From f2782ad4712b0a1185677847a05b84b15bdca940 Mon Sep 17 00:00:00 2001 From: "Chris J. Karr" Date: Tue, 13 Dec 2016 21:09:00 -0600 Subject: [PATCH] Cleaning up folders --- .../glob/node_modules/inherits/package.json | 50 - .../minimatch/node_modules/lru-cache/LICENSE | 15 - .../node_modules/lru-cache/README.md | 119 - .../node_modules/lru-cache/lib/lru-cache.js | 318 - .../node_modules/lru-cache/package.json | 58 - .../node_modules/lru-cache/test/basic.js | 396 - .../node_modules/lru-cache/test/foreach.js | 120 - .../lru-cache/test/memory-leak.js | 51 - .../minimatch/node_modules/sigmund/LICENSE | 15 - .../minimatch/node_modules/sigmund/README.md | 53 - .../node_modules/sigmund/package.json | 60 - .../glob/node_modules/minimatch/package.json | 57 - .../node_modules/glob/package.json | 58 - .../findup-sync/node_modules/lodash/README.md | 145 - .../node_modules/lodash/dist/lodash.compat.js | 7158 ---- .../lodash/dist/lodash.compat.min.js | 92 - .../node_modules/lodash/dist/lodash.js | 6786 ---- .../node_modules/lodash/dist/lodash.min.js | 87 - .../lodash/dist/lodash.underscore.js | 4979 --- .../lodash/dist/lodash.underscore.min.js | 39 - .../findup-sync/node_modules/lodash/lodash.js | 7180 ---- .../node_modules/lodash/package.json | 136 - .../node_modules/findup-sync/package.json | 64 - .../grunt-cli/node_modules/nopt/README.md | 208 - .../node_modules/nopt/examples/my-program.js | 30 - .../grunt-cli/node_modules/nopt/lib/nopt.js | 552 - .../nopt/node_modules/abbrev/LICENSE | 15 - .../nopt/node_modules/abbrev/package.json | 48 - .../nopt/node_modules/abbrev/test.js | 47 - .../grunt-cli/node_modules/nopt/package.json | 55 - .../node_modules/resolve/package.json | 48 - node_modules/grunt-cli/package.json | 79 - .../grunt/node_modules/async/package.json | 55 - .../node_modules/coffee-script/package.json | 67 - .../grunt/node_modules/colors/package.json | 45 - .../node_modules/dateformat/package.json | 41 - .../node_modules/eventemitter2/package.json | 82 - .../grunt/node_modules/exit/package.json | 69 - .../glob/node_modules/inherits/package.json | 50 - .../minimatch/node_modules/lru-cache/LICENSE | 15 - .../node_modules/lru-cache/README.md | 119 - .../node_modules/lru-cache/lib/lru-cache.js | 318 - .../node_modules/lru-cache/package.json | 58 - .../node_modules/lru-cache/test/basic.js | 396 - .../node_modules/lru-cache/test/foreach.js | 120 - .../lru-cache/test/memory-leak.js | 51 - .../minimatch/node_modules/sigmund/LICENSE | 15 - .../minimatch/node_modules/sigmund/README.md | 53 - .../node_modules/sigmund/package.json | 60 - .../glob/node_modules/minimatch/package.json | 57 - .../node_modules/glob/package.json | 58 - .../findup-sync/node_modules/lodash/README.md | 145 - .../node_modules/lodash/dist/lodash.compat.js | 7158 ---- .../lodash/dist/lodash.compat.min.js | 92 - .../node_modules/lodash/dist/lodash.js | 6786 ---- .../node_modules/lodash/dist/lodash.min.js | 87 - .../lodash/dist/lodash.underscore.js | 4979 --- .../lodash/dist/lodash.underscore.min.js | 39 - .../findup-sync/node_modules/lodash/lodash.js | 7180 ---- .../node_modules/lodash/package.json | 137 - .../node_modules/findup-sync/package.json | 64 - .../grunt/node_modules/getobject/package.json | 66 - .../node_modules/graceful-fs/package.json | 63 - .../glob/node_modules/inherits/package.json | 48 - .../grunt/node_modules/glob/package.json | 52 - .../node_modules/grunt-legacy-log/.travis.yml | 16 - .../node_modules/grunt-legacy-log/index.js | 285 - .../node_modules/lodash/README.md | 145 - .../node_modules/lodash/dist/lodash.compat.js | 7158 ---- .../lodash/dist/lodash.compat.min.js | 92 - .../node_modules/lodash/dist/lodash.js | 6786 ---- .../node_modules/lodash/dist/lodash.min.js | 87 - .../lodash/dist/lodash.underscore.js | 4979 --- .../lodash/dist/lodash.underscore.min.js | 39 - .../node_modules/lodash/lodash.js | 7180 ---- .../node_modules/lodash/package.json | 137 - .../underscore.string/package.json | 97 - .../grunt-legacy-log/package.json | 77 - .../grunt-legacy-log/test/index.js | 519 - .../grunt-legacy-util/package.json | 74 - .../grunt/node_modules/hooker/package.json | 65 - .../node_modules/iconv-lite/package.json | 96 - .../js-yaml/node_modules/argparse/HISTORY.md | 115 - .../js-yaml/node_modules/argparse/README.md | 239 - .../argparse/lib/argument_parser.js | 1168 - .../argparse/lib/help/formatter.js | 798 - .../underscore.string/.travis.yml | 8 - .../underscore.string/README.markdown | 825 - .../underscore.string/component.json | 11 - .../lib/underscore.string.js | 673 - .../underscore.string/package.json | 107 - .../argparse/node_modules/underscore/LICENSE | 23 - .../node_modules/underscore/README.md | 22 - .../node_modules/underscore/package.json | 69 - .../node_modules/underscore/underscore-min.js | 6 - .../node_modules/underscore/underscore.js | 1415 - .../node_modules/argparse/package.json | 61 - .../js-yaml/node_modules/esprima/package.json | 65 - .../grunt/node_modules/js-yaml/package.json | 76 - .../grunt/node_modules/lodash/package.json | 78 - .../minimatch/node_modules/lru-cache/LICENSE | 15 - .../node_modules/lru-cache/README.md | 119 - .../node_modules/lru-cache/lib/lru-cache.js | 318 - .../node_modules/lru-cache/package.json | 58 - .../node_modules/lru-cache/test/basic.js | 396 - .../node_modules/lru-cache/test/foreach.js | 120 - .../lru-cache/test/memory-leak.js | 51 - .../minimatch/node_modules/sigmund/LICENSE | 15 - .../minimatch/node_modules/sigmund/README.md | 53 - .../node_modules/sigmund/package.json | 60 - .../grunt/node_modules/minimatch/package.json | 57 - .../grunt/node_modules/nopt/README.md | 208 - .../node_modules/nopt/examples/my-program.js | 30 - .../grunt/node_modules/nopt/lib/nopt.js | 552 - .../nopt/node_modules/abbrev/LICENSE | 15 - .../nopt/node_modules/abbrev/package.json | 48 - .../nopt/node_modules/abbrev/test.js | 47 - .../grunt/node_modules/nopt/package.json | 55 - .../grunt/node_modules/rimraf/package.json | 72 - .../underscore.string/package.json | 95 - node_modules/grunt/node_modules/which/LICENSE | 15 - .../grunt/node_modules/which/package.json | 46 - .../grunt/node_modules/which/which.js | 101 - node_modules/grunt/package.json | 104 - platforms/android/.gitignore | 14 - .../2.2.1/taskArtifacts/cache.properties | 1 - .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 0 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 1174449 -> 0 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 11056522 -> 0 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 23672 -> 0 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 118148 -> 0 bytes platforms/android/AndroidManifest.xml | 39 - .../android/CordovaLib/AndroidManifest.xml | 23 - platforms/android/CordovaLib/build.gradle | 61 - .../bundles/debug/AndroidManifest.xml | 27 - .../bundles/debug/aapt/AndroidManifest.xml | 27 - .../bundles/release/AndroidManifest.xml | 27 - .../bundles/release/aapt/AndroidManifest.xml | 27 - .../compileDebugAidl/dependency.store | Bin 5 -> 0 bytes .../compileReleaseAidl/dependency.store | Bin 5 -> 0 bytes .../incremental/mergeDebugAssets/merger.xml | 2 - .../mergeDebugJniLibFolders/merger.xml | 2 - .../incremental/mergeReleaseAssets/merger.xml | 2 - .../mergeReleaseJniLibFolders/merger.xml | 2 - .../packageDebugResources/merger.xml | 2 - .../packageReleaseResources/merger.xml | 2 - .../build/outputs/aar/CordovaLib-debug.aar | Bin 114402 -> 0 bytes .../build/outputs/aar/CordovaLib-release.aar | Bin 114330 -> 0 bytes platforms/android/CordovaLib/cordova.gradle | 201 - .../android/CordovaLib/project.properties | 16 - platforms/android/android.json | 138 - platforms/android/assets/www/404.html | 157 - platforms/android/assets/www/config.json | 1 - platforms/android/assets/www/config.xml | 21 - .../android/nativeapiprovider.js | 36 - .../android/promptbasednativeapi.js | 35 - .../android/assets/www/cordova-js-src/exec.js | 283 - .../assets/www/cordova-js-src/platform.js | 125 - .../www/cordova-js-src/plugin/android/app.js | 108 - platforms/android/assets/www/cordova.js | 2167 - .../android/assets/www/cordova_plugins.js | 31 - platforms/android/assets/www/favicon.ico | Bin 4286 -> 0 bytes platforms/android/assets/www/icon.png | Bin 54642 -> 0 bytes platforms/android/assets/www/images/logo.png | Bin 15656 -> 0 bytes .../android/assets/www/images/yeoman.png | Bin 13501 -> 0 bytes platforms/android/assets/www/index.html | 144 - .../www/lib/PurpleRobotClient/.bower.json | 32 - .../www/lib/PurpleRobotClient/.gitignore | 2 - .../www/lib/PurpleRobotClient/bower.json | 24 - .../www/lib/PurpleRobotClient/purple-robot.js | 1039 - .../lib/PurpleRobotClient/purple-robot.min.js | 15 - .../www/lib/angular-animate/.bower.json | 18 - .../assets/www/lib/angular-animate/README.md | 54 - .../lib/angular-animate/angular-animate.js | 1616 - .../angular-animate/angular-animate.min.js | 27 - .../angular-animate.min.js.map | 8 - .../assets/www/lib/angular-animate/bower.json | 8 - .../www/lib/angular-cookies/.bower.json | 18 - .../assets/www/lib/angular-cookies/README.md | 54 - .../lib/angular-cookies/angular-cookies.js | 196 - .../angular-cookies/angular-cookies.min.js | 8 - .../angular-cookies.min.js.map | 8 - .../assets/www/lib/angular-cookies/bower.json | 8 - .../assets/www/lib/angular-mocks/.bower.json | 18 - .../assets/www/lib/angular-mocks/README.md | 42 - .../www/lib/angular-mocks/angular-mocks.js | 2163 - .../assets/www/lib/angular-mocks/bower.json | 8 - .../www/lib/angular-moment/angular-moment.js | 727 - .../www/lib/angular-resource/.bower.json | 18 - .../assets/www/lib/angular-resource/README.md | 54 - .../lib/angular-resource/angular-resource.js | 610 - .../angular-resource/angular-resource.min.js | 13 - .../angular-resource.min.js.map | 8 - .../www/lib/angular-resource/bower.json | 8 - .../assets/www/lib/angular-route/.bower.json | 18 - .../assets/www/lib/angular-route/README.md | 54 - .../www/lib/angular-route/angular-route.js | 927 - .../lib/angular-route/angular-route.min.js | 14 - .../angular-route/angular-route.min.js.map | 8 - .../assets/www/lib/angular-route/bower.json | 8 - .../www/lib/angular-sanitize/.bower.json | 18 - .../assets/www/lib/angular-sanitize/README.md | 54 - .../lib/angular-sanitize/angular-sanitize.js | 624 - .../angular-sanitize/angular-sanitize.min.js | 14 - .../angular-sanitize.min.js.map | 8 - .../www/lib/angular-sanitize/bower.json | 8 - .../www/lib/angular-scenario/.bower.json | 18 - .../assets/www/lib/angular-scenario/README.md | 42 - .../lib/angular-scenario/angular-scenario.js | 33464 ---------------- .../www/lib/angular-scenario/bower.json | 8 - .../jstd-scenario-adapter-config.js | 6 - .../angular-scenario/jstd-scenario-adapter.js | 185 - .../assets/www/lib/angular-touch/.bower.json | 18 - .../assets/www/lib/angular-touch/README.md | 54 - .../www/lib/angular-touch/angular-touch.js | 575 - .../lib/angular-touch/angular-touch.min.js | 13 - .../angular-touch/angular-touch.min.js.map | 8 - .../assets/www/lib/angular-touch/bower.json | 8 - .../assets/www/lib/angular/.bower.json | 16 - .../android/assets/www/lib/angular/README.md | 48 - .../assets/www/lib/angular/angular-csp.css | 18 - .../android/assets/www/lib/angular/angular.js | 21464 ---------- .../assets/www/lib/angular/angular.min.js | 210 - .../www/lib/angular/angular.min.js.gzip | Bin 39258 -> 0 bytes .../assets/www/lib/angular/angular.min.js.map | 8 - .../android/assets/www/lib/angular/bower.json | 7 - .../assets/www/lib/bootstrap/.bower.json | 47 - .../assets/www/lib/bootstrap/Gruntfile.js | 480 - .../android/assets/www/lib/bootstrap/LICENSE | 21 - .../assets/www/lib/bootstrap/README.md | 127 - .../assets/www/lib/bootstrap/bower.json | 38 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes .../grunt/bs-glyphicons-data-generator.js | 41 - .../lib/bootstrap/grunt/bs-lessdoc-parser.js | 236 - .../bootstrap/grunt/bs-raw-files-generator.js | 46 - .../lib/bootstrap/grunt/sauce_browsers.yml | 82 - .../assets/www/lib/bootstrap/js/affix.js | 142 - .../assets/www/lib/bootstrap/js/alert.js | 92 - .../assets/www/lib/bootstrap/js/button.js | 110 - .../assets/www/lib/bootstrap/js/carousel.js | 223 - .../assets/www/lib/bootstrap/js/collapse.js | 170 - .../assets/www/lib/bootstrap/js/dropdown.js | 151 - .../assets/www/lib/bootstrap/js/modal.js | 280 - .../assets/www/lib/bootstrap/js/popover.js | 113 - .../assets/www/lib/bootstrap/js/scrollspy.js | 170 - .../assets/www/lib/bootstrap/js/tab.js | 128 - .../assets/www/lib/bootstrap/js/tooltip.js | 457 - .../assets/www/lib/bootstrap/js/transition.js | 59 - .../assets/www/lib/bootstrap/less/alerts.less | 68 - .../assets/www/lib/bootstrap/less/badges.less | 55 - .../www/lib/bootstrap/less/bootstrap.less | 50 - .../www/lib/bootstrap/less/breadcrumbs.less | 26 - .../www/lib/bootstrap/less/button-groups.less | 240 - .../www/lib/bootstrap/less/buttons.less | 157 - .../www/lib/bootstrap/less/carousel.less | 243 - .../assets/www/lib/bootstrap/less/close.less | 33 - .../assets/www/lib/bootstrap/less/code.less | 68 - .../bootstrap/less/component-animations.less | 31 - .../www/lib/bootstrap/less/dropdowns.less | 215 - .../assets/www/lib/bootstrap/less/forms.less | 540 - .../www/lib/bootstrap/less/glyphicons.less | 233 - .../assets/www/lib/bootstrap/less/grid.less | 84 - .../www/lib/bootstrap/less/input-groups.less | 166 - .../www/lib/bootstrap/less/jumbotron.less | 48 - .../assets/www/lib/bootstrap/less/labels.less | 64 - .../www/lib/bootstrap/less/list-group.less | 131 - .../assets/www/lib/bootstrap/less/media.less | 56 - .../assets/www/lib/bootstrap/less/mixins.less | 39 - .../www/lib/bootstrap/less/mixins/alerts.less | 14 - .../less/mixins/background-variant.less | 8 - .../bootstrap/less/mixins/border-radius.less | 18 - .../lib/bootstrap/less/mixins/buttons.less | 50 - .../bootstrap/less/mixins/center-block.less | 7 - .../lib/bootstrap/less/mixins/clearfix.less | 22 - .../www/lib/bootstrap/less/mixins/forms.less | 81 - .../lib/bootstrap/less/mixins/gradients.less | 59 - .../bootstrap/less/mixins/grid-framework.less | 91 - .../www/lib/bootstrap/less/mixins/grid.less | 122 - .../lib/bootstrap/less/mixins/hide-text.less | 21 - .../www/lib/bootstrap/less/mixins/image.less | 34 - .../www/lib/bootstrap/less/mixins/labels.less | 12 - .../lib/bootstrap/less/mixins/list-group.less | 29 - .../bootstrap/less/mixins/nav-divider.less | 10 - .../less/mixins/nav-vertical-align.less | 9 - .../lib/bootstrap/less/mixins/opacity.less | 8 - .../lib/bootstrap/less/mixins/pagination.less | 23 - .../www/lib/bootstrap/less/mixins/panels.less | 24 - .../bootstrap/less/mixins/progress-bar.less | 10 - .../bootstrap/less/mixins/reset-filter.less | 8 - .../www/lib/bootstrap/less/mixins/resize.less | 6 - .../less/mixins/responsive-visibility.less | 15 - .../www/lib/bootstrap/less/mixins/size.less | 10 - .../lib/bootstrap/less/mixins/tab-focus.less | 9 - .../lib/bootstrap/less/mixins/table-row.less | 28 - .../bootstrap/less/mixins/text-emphasis.less | 8 - .../bootstrap/less/mixins/text-overflow.less | 8 - .../less/mixins/vendor-prefixes.less | 224 - .../assets/www/lib/bootstrap/less/modals.less | 150 - .../assets/www/lib/bootstrap/less/navbar.less | 655 - .../assets/www/lib/bootstrap/less/navs.less | 242 - .../www/lib/bootstrap/less/normalize.less | 425 - .../assets/www/lib/bootstrap/less/pager.less | 55 - .../www/lib/bootstrap/less/pagination.less | 88 - .../assets/www/lib/bootstrap/less/panels.less | 243 - .../www/lib/bootstrap/less/popovers.less | 133 - .../assets/www/lib/bootstrap/less/print.less | 101 - .../www/lib/bootstrap/less/progress-bars.less | 105 - .../lib/bootstrap/less/responsive-embed.less | 34 - .../bootstrap/less/responsive-utilities.less | 194 - .../www/lib/bootstrap/less/scaffolding.less | 150 - .../assets/www/lib/bootstrap/less/tables.less | 233 - .../assets/www/lib/bootstrap/less/theme.less | 258 - .../www/lib/bootstrap/less/thumbnails.less | 36 - .../www/lib/bootstrap/less/tooltip.less | 95 - .../assets/www/lib/bootstrap/less/type.less | 313 - .../www/lib/bootstrap/less/utilities.less | 57 - .../www/lib/bootstrap/less/variables.less | 846 - .../assets/www/lib/bootstrap/less/wells.less | 29 - .../assets/www/lib/bootstrap/package.json | 81 - .../assets/www/lib/ckeditor/.bower.json | 28 - .../assets/www/lib/ckeditor/CHANGES.md | 671 - .../assets/www/lib/ckeditor/LICENSE.md | 1264 - .../android/assets/www/lib/ckeditor/README.md | 82 - .../www/lib/ckeditor/adapters/jquery.js | 10 - .../assets/www/lib/ckeditor/bower.json | 8 - .../assets/www/lib/ckeditor/ckeditor.js | 935 - .../assets/www/lib/ckeditor/composer.json | 20 - .../android/assets/www/lib/ckeditor/config.js | 38 - .../assets/www/lib/ckeditor/contents.css | 134 - .../lib/ckeditor/lang/_translationstatus.txt | 63 - .../assets/www/lib/ckeditor/lang/af.js | 5 - .../assets/www/lib/ckeditor/lang/ar.js | 5 - .../assets/www/lib/ckeditor/lang/bg.js | 5 - .../assets/www/lib/ckeditor/lang/bn.js | 5 - .../assets/www/lib/ckeditor/lang/bs.js | 5 - .../assets/www/lib/ckeditor/lang/ca.js | 5 - .../assets/www/lib/ckeditor/lang/cs.js | 5 - .../assets/www/lib/ckeditor/lang/cy.js | 5 - .../assets/www/lib/ckeditor/lang/da.js | 5 - .../assets/www/lib/ckeditor/lang/de.js | 5 - .../assets/www/lib/ckeditor/lang/el.js | 5 - .../assets/www/lib/ckeditor/lang/en-au.js | 5 - .../assets/www/lib/ckeditor/lang/en-ca.js | 5 - .../assets/www/lib/ckeditor/lang/en-gb.js | 5 - .../assets/www/lib/ckeditor/lang/en.js | 5 - .../assets/www/lib/ckeditor/lang/eo.js | 5 - .../assets/www/lib/ckeditor/lang/es.js | 5 - .../assets/www/lib/ckeditor/lang/et.js | 5 - .../assets/www/lib/ckeditor/lang/eu.js | 5 - .../assets/www/lib/ckeditor/lang/fa.js | 5 - .../assets/www/lib/ckeditor/lang/fi.js | 5 - .../assets/www/lib/ckeditor/lang/fo.js | 5 - .../assets/www/lib/ckeditor/lang/fr-ca.js | 5 - .../assets/www/lib/ckeditor/lang/fr.js | 5 - .../assets/www/lib/ckeditor/lang/gl.js | 5 - .../assets/www/lib/ckeditor/lang/gu.js | 5 - .../assets/www/lib/ckeditor/lang/he.js | 5 - .../assets/www/lib/ckeditor/lang/hi.js | 5 - .../assets/www/lib/ckeditor/lang/hr.js | 5 - .../assets/www/lib/ckeditor/lang/hu.js | 5 - .../assets/www/lib/ckeditor/lang/id.js | 5 - .../assets/www/lib/ckeditor/lang/is.js | 5 - .../assets/www/lib/ckeditor/lang/it.js | 5 - .../assets/www/lib/ckeditor/lang/ja.js | 5 - .../assets/www/lib/ckeditor/lang/ka.js | 5 - .../assets/www/lib/ckeditor/lang/km.js | 5 - .../assets/www/lib/ckeditor/lang/ko.js | 5 - .../assets/www/lib/ckeditor/lang/ku.js | 5 - .../assets/www/lib/ckeditor/lang/lt.js | 5 - .../assets/www/lib/ckeditor/lang/lv.js | 5 - .../assets/www/lib/ckeditor/lang/mk.js | 5 - .../assets/www/lib/ckeditor/lang/mn.js | 5 - .../assets/www/lib/ckeditor/lang/ms.js | 5 - .../assets/www/lib/ckeditor/lang/nb.js | 5 - .../assets/www/lib/ckeditor/lang/nl.js | 5 - .../assets/www/lib/ckeditor/lang/no.js | 5 - .../assets/www/lib/ckeditor/lang/pl.js | 5 - .../assets/www/lib/ckeditor/lang/pt-br.js | 5 - .../assets/www/lib/ckeditor/lang/pt.js | 5 - .../assets/www/lib/ckeditor/lang/ro.js | 5 - .../assets/www/lib/ckeditor/lang/ru.js | 5 - .../assets/www/lib/ckeditor/lang/si.js | 5 - .../assets/www/lib/ckeditor/lang/sk.js | 5 - .../assets/www/lib/ckeditor/lang/sl.js | 5 - .../assets/www/lib/ckeditor/lang/sq.js | 5 - .../assets/www/lib/ckeditor/lang/sr-latn.js | 5 - .../assets/www/lib/ckeditor/lang/sr.js | 5 - .../assets/www/lib/ckeditor/lang/sv.js | 5 - .../assets/www/lib/ckeditor/lang/th.js | 5 - .../assets/www/lib/ckeditor/lang/tr.js | 5 - .../assets/www/lib/ckeditor/lang/tt.js | 5 - .../assets/www/lib/ckeditor/lang/ug.js | 5 - .../assets/www/lib/ckeditor/lang/uk.js | 5 - .../assets/www/lib/ckeditor/lang/vi.js | 5 - .../assets/www/lib/ckeditor/lang/zh-cn.js | 5 - .../assets/www/lib/ckeditor/lang/zh.js | 5 - .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 - .../dialogs/lang/_translationstatus.txt | 25 - .../plugins/a11yhelp/dialogs/lang/ar.js | 11 - .../plugins/a11yhelp/dialogs/lang/bg.js | 11 - .../plugins/a11yhelp/dialogs/lang/ca.js | 13 - .../plugins/a11yhelp/dialogs/lang/cs.js | 13 - .../plugins/a11yhelp/dialogs/lang/cy.js | 11 - .../plugins/a11yhelp/dialogs/lang/da.js | 11 - .../plugins/a11yhelp/dialogs/lang/de.js | 13 - .../plugins/a11yhelp/dialogs/lang/el.js | 13 - .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 - .../plugins/a11yhelp/dialogs/lang/en.js | 11 - .../plugins/a11yhelp/dialogs/lang/eo.js | 13 - .../plugins/a11yhelp/dialogs/lang/es.js | 12 - .../plugins/a11yhelp/dialogs/lang/et.js | 11 - .../plugins/a11yhelp/dialogs/lang/fa.js | 11 - .../plugins/a11yhelp/dialogs/lang/fi.js | 12 - .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 12 - .../plugins/a11yhelp/dialogs/lang/fr.js | 13 - .../plugins/a11yhelp/dialogs/lang/gl.js | 12 - .../plugins/a11yhelp/dialogs/lang/gu.js | 11 - .../plugins/a11yhelp/dialogs/lang/he.js | 11 - .../plugins/a11yhelp/dialogs/lang/hi.js | 11 - .../plugins/a11yhelp/dialogs/lang/hr.js | 11 - .../plugins/a11yhelp/dialogs/lang/hu.js | 13 - .../plugins/a11yhelp/dialogs/lang/id.js | 11 - .../plugins/a11yhelp/dialogs/lang/it.js | 13 - .../plugins/a11yhelp/dialogs/lang/ja.js | 9 - .../plugins/a11yhelp/dialogs/lang/km.js | 11 - .../plugins/a11yhelp/dialogs/lang/ko.js | 10 - .../plugins/a11yhelp/dialogs/lang/ku.js | 12 - .../plugins/a11yhelp/dialogs/lang/lt.js | 11 - .../plugins/a11yhelp/dialogs/lang/lv.js | 13 - .../plugins/a11yhelp/dialogs/lang/mk.js | 11 - .../plugins/a11yhelp/dialogs/lang/mn.js | 11 - .../plugins/a11yhelp/dialogs/lang/nb.js | 12 - .../plugins/a11yhelp/dialogs/lang/nl.js | 12 - .../plugins/a11yhelp/dialogs/lang/no.js | 11 - .../plugins/a11yhelp/dialogs/lang/pl.js | 13 - .../plugins/a11yhelp/dialogs/lang/pt-br.js | 12 - .../plugins/a11yhelp/dialogs/lang/pt.js | 12 - .../plugins/a11yhelp/dialogs/lang/ro.js | 12 - .../plugins/a11yhelp/dialogs/lang/ru.js | 11 - .../plugins/a11yhelp/dialogs/lang/si.js | 10 - .../plugins/a11yhelp/dialogs/lang/sk.js | 12 - .../plugins/a11yhelp/dialogs/lang/sl.js | 12 - .../plugins/a11yhelp/dialogs/lang/sq.js | 11 - .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 - .../plugins/a11yhelp/dialogs/lang/sr.js | 11 - .../plugins/a11yhelp/dialogs/lang/sv.js | 12 - .../plugins/a11yhelp/dialogs/lang/th.js | 11 - .../plugins/a11yhelp/dialogs/lang/tr.js | 12 - .../plugins/a11yhelp/dialogs/lang/tt.js | 11 - .../plugins/a11yhelp/dialogs/lang/ug.js | 11 - .../plugins/a11yhelp/dialogs/lang/uk.js | 12 - .../plugins/a11yhelp/dialogs/lang/vi.js | 11 - .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 - .../plugins/a11yhelp/dialogs/lang/zh.js | 9 - .../ckeditor/plugins/about/dialogs/about.js | 7 - .../about/dialogs/hidpi/logo_ckeditor.png | Bin 13339 -> 0 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 6757 -> 0 bytes .../lib/ckeditor/plugins/adobeair/plugin.js | 9 - .../www/lib/ckeditor/plugins/ajax/plugin.js | 7 - .../lib/ckeditor/plugins/autogrow/plugin.js | 8 - .../www/lib/ckeditor/plugins/bbcode/plugin.js | 22 - .../ckeditor/plugins/bidi/icons/bidiltr.png | Bin 769 -> 0 bytes .../ckeditor/plugins/bidi/icons/bidirtl.png | Bin 768 -> 0 bytes .../plugins/bidi/icons/hidpi/bidiltr.png | Bin 1579 -> 0 bytes .../plugins/bidi/icons/hidpi/bidirtl.png | Bin 1596 -> 0 bytes .../www/lib/ckeditor/plugins/bidi/lang/af.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/da.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/de.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/el.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-au.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/en.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/es.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/et.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fo.js | 1 - .../lib/ckeditor/plugins/bidi/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/he.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/id.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/is.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/it.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/km.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/no.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/pl.js | 1 - .../lib/ckeditor/plugins/bidi/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/si.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sq.js | 1 - .../lib/ckeditor/plugins/bidi/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/th.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/vi.js | 1 - .../lib/ckeditor/plugins/bidi/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/bidi/plugin.js | 13 - .../plugins/clipboard/dialogs/paste.js | 11 - .../codesnippet/dialogs/codesnippet.js | 6 - .../plugins/codesnippet/icons/codesnippet.png | Bin 597 -> 0 bytes .../codesnippet/icons/hidpi/codesnippet.png | Bin 1887 -> 0 bytes .../ckeditor/plugins/codesnippet/lang/bg.js | 5 - .../ckeditor/plugins/codesnippet/lang/ca.js | 5 - .../ckeditor/plugins/codesnippet/lang/cs.js | 5 - .../ckeditor/plugins/codesnippet/lang/da.js | 5 - .../ckeditor/plugins/codesnippet/lang/de.js | 5 - .../ckeditor/plugins/codesnippet/lang/el.js | 5 - .../plugins/codesnippet/lang/en-gb.js | 5 - .../ckeditor/plugins/codesnippet/lang/en.js | 5 - .../ckeditor/plugins/codesnippet/lang/eo.js | 5 - .../ckeditor/plugins/codesnippet/lang/es.js | 5 - .../ckeditor/plugins/codesnippet/lang/et.js | 5 - .../ckeditor/plugins/codesnippet/lang/fa.js | 5 - .../ckeditor/plugins/codesnippet/lang/fi.js | 5 - .../plugins/codesnippet/lang/fr-ca.js | 5 - .../ckeditor/plugins/codesnippet/lang/fr.js | 5 - .../ckeditor/plugins/codesnippet/lang/he.js | 5 - .../ckeditor/plugins/codesnippet/lang/hr.js | 5 - .../ckeditor/plugins/codesnippet/lang/hu.js | 5 - .../ckeditor/plugins/codesnippet/lang/it.js | 5 - .../ckeditor/plugins/codesnippet/lang/ja.js | 5 - .../ckeditor/plugins/codesnippet/lang/km.js | 5 - .../ckeditor/plugins/codesnippet/lang/ku.js | 5 - .../ckeditor/plugins/codesnippet/lang/lt.js | 5 - .../ckeditor/plugins/codesnippet/lang/lv.js | 5 - .../ckeditor/plugins/codesnippet/lang/nb.js | 5 - .../ckeditor/plugins/codesnippet/lang/nl.js | 5 - .../ckeditor/plugins/codesnippet/lang/no.js | 5 - .../ckeditor/plugins/codesnippet/lang/pl.js | 5 - .../plugins/codesnippet/lang/pt-br.js | 5 - .../ckeditor/plugins/codesnippet/lang/pt.js | 5 - .../ckeditor/plugins/codesnippet/lang/ro.js | 5 - .../ckeditor/plugins/codesnippet/lang/ru.js | 5 - .../ckeditor/plugins/codesnippet/lang/sk.js | 5 - .../ckeditor/plugins/codesnippet/lang/sl.js | 5 - .../ckeditor/plugins/codesnippet/lang/sq.js | 5 - .../ckeditor/plugins/codesnippet/lang/sv.js | 5 - .../ckeditor/plugins/codesnippet/lang/th.js | 5 - .../ckeditor/plugins/codesnippet/lang/tr.js | 5 - .../ckeditor/plugins/codesnippet/lang/tt.js | 5 - .../ckeditor/plugins/codesnippet/lang/ug.js | 5 - .../ckeditor/plugins/codesnippet/lang/uk.js | 5 - .../ckeditor/plugins/codesnippet/lang/vi.js | 5 - .../plugins/codesnippet/lang/zh-cn.js | 5 - .../ckeditor/plugins/codesnippet/lang/zh.js | 5 - .../codesnippet/lib/highlight/CHANGES.md | 827 - .../plugins/codesnippet/lib/highlight/LICENSE | 24 - .../codesnippet/lib/highlight/README.ru.md | 171 - .../lib/highlight/highlight.pack.js | 1 - .../codesnippet/lib/highlight/styles/arta.css | 160 - .../lib/highlight/styles/ascetic.css | 50 - .../highlight/styles/atelier-dune.dark.css | 93 - .../highlight/styles/atelier-dune.light.css | 93 - .../highlight/styles/atelier-forest.dark.css | 93 - .../highlight/styles/atelier-forest.light.css | 93 - .../highlight/styles/atelier-heath.dark.css | 93 - .../highlight/styles/atelier-heath.light.css | 93 - .../styles/atelier-lakeside.dark.css | 93 - .../styles/atelier-lakeside.light.css | 93 - .../highlight/styles/atelier-seaside.dark.css | 93 - .../styles/atelier-seaside.light.css | 93 - .../lib/highlight/styles/brown_paper.css | 105 - .../lib/highlight/styles/brown_papersq.png | Bin 18198 -> 0 bytes .../codesnippet/lib/highlight/styles/dark.css | 105 - .../lib/highlight/styles/default.css | 153 - .../lib/highlight/styles/docco.css | 132 - .../codesnippet/lib/highlight/styles/far.css | 113 - .../lib/highlight/styles/foundation.css | 133 - .../lib/highlight/styles/github.css | 125 - .../lib/highlight/styles/googlecode.css | 147 - .../codesnippet/lib/highlight/styles/idea.css | 122 - .../lib/highlight/styles/ir_black.css | 105 - .../lib/highlight/styles/magula.css | 122 - .../lib/highlight/styles/mono-blue.css | 62 - .../lib/highlight/styles/monokai.css | 127 - .../lib/highlight/styles/monokai_sublime.css | 149 - .../lib/highlight/styles/obsidian.css | 154 - .../lib/highlight/styles/paraiso.dark.css | 93 - .../lib/highlight/styles/paraiso.light.css | 93 - .../lib/highlight/styles/pojoaque.css | 106 - .../lib/highlight/styles/pojoaque.jpg | Bin 1186 -> 0 bytes .../lib/highlight/styles/railscasts.css | 182 - .../lib/highlight/styles/rainbow.css | 112 - .../lib/highlight/styles/school_book.css | 113 - .../lib/highlight/styles/school_book.png | Bin 486 -> 0 bytes .../lib/highlight/styles/solarized_dark.css | 107 - .../lib/highlight/styles/solarized_light.css | 107 - .../lib/highlight/styles/sunburst.css | 160 - .../highlight/styles/tomorrow-night-blue.css | 93 - .../styles/tomorrow-night-bright.css | 92 - .../styles/tomorrow-night-eighties.css | 92 - .../lib/highlight/styles/tomorrow-night.css | 93 - .../lib/highlight/styles/tomorrow.css | 90 - .../codesnippet/lib/highlight/styles/vs.css | 89 - .../lib/highlight/styles/xcode.css | 158 - .../lib/highlight/styles/zenburn.css | 116 - .../ckeditor/plugins/codesnippet/plugin.js | 12 - .../plugins/codesnippetgeshi/plugin.js | 10 - .../plugins/colorbutton/icons/bgcolor.png | Bin 906 -> 0 bytes .../colorbutton/icons/hidpi/bgcolor.png | Bin 2169 -> 0 bytes .../colorbutton/icons/hidpi/textcolor.png | Bin 1725 -> 0 bytes .../plugins/colorbutton/icons/textcolor.png | Bin 813 -> 0 bytes .../ckeditor/plugins/colorbutton/lang/af.js | 2 - .../ckeditor/plugins/colorbutton/lang/ar.js | 2 - .../ckeditor/plugins/colorbutton/lang/bg.js | 2 - .../ckeditor/plugins/colorbutton/lang/bn.js | 2 - .../ckeditor/plugins/colorbutton/lang/bs.js | 2 - .../ckeditor/plugins/colorbutton/lang/ca.js | 2 - .../ckeditor/plugins/colorbutton/lang/cs.js | 2 - .../ckeditor/plugins/colorbutton/lang/cy.js | 2 - .../ckeditor/plugins/colorbutton/lang/da.js | 2 - .../ckeditor/plugins/colorbutton/lang/de.js | 2 - .../ckeditor/plugins/colorbutton/lang/el.js | 2 - .../plugins/colorbutton/lang/en-au.js | 2 - .../plugins/colorbutton/lang/en-ca.js | 2 - .../plugins/colorbutton/lang/en-gb.js | 2 - .../ckeditor/plugins/colorbutton/lang/en.js | 2 - .../ckeditor/plugins/colorbutton/lang/eo.js | 2 - .../ckeditor/plugins/colorbutton/lang/es.js | 2 - .../ckeditor/plugins/colorbutton/lang/et.js | 2 - .../ckeditor/plugins/colorbutton/lang/eu.js | 2 - .../ckeditor/plugins/colorbutton/lang/fa.js | 2 - .../ckeditor/plugins/colorbutton/lang/fi.js | 3 - .../ckeditor/plugins/colorbutton/lang/fo.js | 2 - .../plugins/colorbutton/lang/fr-ca.js | 2 - .../ckeditor/plugins/colorbutton/lang/fr.js | 2 - .../ckeditor/plugins/colorbutton/lang/gl.js | 2 - .../ckeditor/plugins/colorbutton/lang/gu.js | 2 - .../ckeditor/plugins/colorbutton/lang/he.js | 2 - .../ckeditor/plugins/colorbutton/lang/hi.js | 2 - .../ckeditor/plugins/colorbutton/lang/hr.js | 2 - .../ckeditor/plugins/colorbutton/lang/hu.js | 2 - .../ckeditor/plugins/colorbutton/lang/id.js | 2 - .../ckeditor/plugins/colorbutton/lang/is.js | 2 - .../ckeditor/plugins/colorbutton/lang/it.js | 2 - .../ckeditor/plugins/colorbutton/lang/ja.js | 2 - .../ckeditor/plugins/colorbutton/lang/ka.js | 2 - .../ckeditor/plugins/colorbutton/lang/km.js | 2 - .../ckeditor/plugins/colorbutton/lang/ko.js | 2 - .../ckeditor/plugins/colorbutton/lang/ku.js | 2 - .../ckeditor/plugins/colorbutton/lang/lt.js | 2 - .../ckeditor/plugins/colorbutton/lang/lv.js | 2 - .../ckeditor/plugins/colorbutton/lang/mk.js | 2 - .../ckeditor/plugins/colorbutton/lang/mn.js | 2 - .../ckeditor/plugins/colorbutton/lang/ms.js | 2 - .../ckeditor/plugins/colorbutton/lang/nb.js | 2 - .../ckeditor/plugins/colorbutton/lang/nl.js | 2 - .../ckeditor/plugins/colorbutton/lang/no.js | 2 - .../ckeditor/plugins/colorbutton/lang/pl.js | 2 - .../plugins/colorbutton/lang/pt-br.js | 2 - .../ckeditor/plugins/colorbutton/lang/pt.js | 2 - .../ckeditor/plugins/colorbutton/lang/ro.js | 2 - .../ckeditor/plugins/colorbutton/lang/ru.js | 2 - .../ckeditor/plugins/colorbutton/lang/si.js | 2 - .../ckeditor/plugins/colorbutton/lang/sk.js | 2 - .../ckeditor/plugins/colorbutton/lang/sl.js | 2 - .../ckeditor/plugins/colorbutton/lang/sq.js | 3 - .../plugins/colorbutton/lang/sr-latn.js | 2 - .../ckeditor/plugins/colorbutton/lang/sr.js | 2 - .../ckeditor/plugins/colorbutton/lang/sv.js | 2 - .../ckeditor/plugins/colorbutton/lang/th.js | 2 - .../ckeditor/plugins/colorbutton/lang/tr.js | 2 - .../ckeditor/plugins/colorbutton/lang/tt.js | 2 - .../ckeditor/plugins/colorbutton/lang/ug.js | 2 - .../ckeditor/plugins/colorbutton/lang/uk.js | 2 - .../ckeditor/plugins/colorbutton/lang/vi.js | 2 - .../plugins/colorbutton/lang/zh-cn.js | 2 - .../ckeditor/plugins/colorbutton/lang/zh.js | 2 - .../ckeditor/plugins/colorbutton/plugin.js | 13 - .../colordialog/dialogs/colordialog.js | 13 - .../ckeditor/plugins/colordialog/lang/af.js | 1 - .../ckeditor/plugins/colordialog/lang/ar.js | 1 - .../ckeditor/plugins/colordialog/lang/bg.js | 1 - .../ckeditor/plugins/colordialog/lang/bn.js | 1 - .../ckeditor/plugins/colordialog/lang/bs.js | 1 - .../ckeditor/plugins/colordialog/lang/ca.js | 1 - .../ckeditor/plugins/colordialog/lang/cs.js | 1 - .../ckeditor/plugins/colordialog/lang/cy.js | 1 - .../ckeditor/plugins/colordialog/lang/da.js | 1 - .../ckeditor/plugins/colordialog/lang/de.js | 1 - .../ckeditor/plugins/colordialog/lang/el.js | 1 - .../plugins/colordialog/lang/en-au.js | 1 - .../plugins/colordialog/lang/en-ca.js | 1 - .../plugins/colordialog/lang/en-gb.js | 1 - .../ckeditor/plugins/colordialog/lang/en.js | 1 - .../ckeditor/plugins/colordialog/lang/eo.js | 1 - .../ckeditor/plugins/colordialog/lang/es.js | 1 - .../ckeditor/plugins/colordialog/lang/et.js | 1 - .../ckeditor/plugins/colordialog/lang/eu.js | 1 - .../ckeditor/plugins/colordialog/lang/fa.js | 1 - .../ckeditor/plugins/colordialog/lang/fi.js | 1 - .../ckeditor/plugins/colordialog/lang/fo.js | 1 - .../plugins/colordialog/lang/fr-ca.js | 1 - .../ckeditor/plugins/colordialog/lang/fr.js | 1 - .../ckeditor/plugins/colordialog/lang/gl.js | 1 - .../ckeditor/plugins/colordialog/lang/gu.js | 1 - .../ckeditor/plugins/colordialog/lang/he.js | 1 - .../ckeditor/plugins/colordialog/lang/hi.js | 1 - .../ckeditor/plugins/colordialog/lang/hr.js | 1 - .../ckeditor/plugins/colordialog/lang/hu.js | 1 - .../ckeditor/plugins/colordialog/lang/is.js | 1 - .../ckeditor/plugins/colordialog/lang/it.js | 1 - .../ckeditor/plugins/colordialog/lang/ja.js | 1 - .../ckeditor/plugins/colordialog/lang/ka.js | 1 - .../ckeditor/plugins/colordialog/lang/km.js | 1 - .../ckeditor/plugins/colordialog/lang/ko.js | 1 - .../ckeditor/plugins/colordialog/lang/ku.js | 1 - .../ckeditor/plugins/colordialog/lang/lt.js | 1 - .../ckeditor/plugins/colordialog/lang/lv.js | 1 - .../ckeditor/plugins/colordialog/lang/mk.js | 1 - .../ckeditor/plugins/colordialog/lang/mn.js | 1 - .../ckeditor/plugins/colordialog/lang/ms.js | 1 - .../ckeditor/plugins/colordialog/lang/nb.js | 1 - .../ckeditor/plugins/colordialog/lang/nl.js | 1 - .../ckeditor/plugins/colordialog/lang/no.js | 1 - .../ckeditor/plugins/colordialog/lang/pl.js | 1 - .../plugins/colordialog/lang/pt-br.js | 1 - .../ckeditor/plugins/colordialog/lang/pt.js | 1 - .../ckeditor/plugins/colordialog/lang/ro.js | 1 - .../ckeditor/plugins/colordialog/lang/ru.js | 1 - .../ckeditor/plugins/colordialog/lang/si.js | 1 - .../ckeditor/plugins/colordialog/lang/sk.js | 1 - .../ckeditor/plugins/colordialog/lang/sl.js | 1 - .../ckeditor/plugins/colordialog/lang/sq.js | 1 - .../plugins/colordialog/lang/sr-latn.js | 1 - .../ckeditor/plugins/colordialog/lang/sr.js | 1 - .../ckeditor/plugins/colordialog/lang/sv.js | 1 - .../ckeditor/plugins/colordialog/lang/th.js | 1 - .../ckeditor/plugins/colordialog/lang/tr.js | 1 - .../ckeditor/plugins/colordialog/lang/tt.js | 1 - .../ckeditor/plugins/colordialog/lang/ug.js | 1 - .../ckeditor/plugins/colordialog/lang/uk.js | 1 - .../ckeditor/plugins/colordialog/lang/vi.js | 1 - .../plugins/colordialog/lang/zh-cn.js | 1 - .../ckeditor/plugins/colordialog/lang/zh.js | 1 - .../ckeditor/plugins/colordialog/plugin.js | 7 - .../devtools/lang/_translationstatus.txt | 27 - .../lib/ckeditor/plugins/devtools/lang/ar.js | 5 - .../lib/ckeditor/plugins/devtools/lang/bg.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ca.js | 5 - .../lib/ckeditor/plugins/devtools/lang/cs.js | 5 - .../lib/ckeditor/plugins/devtools/lang/cy.js | 5 - .../lib/ckeditor/plugins/devtools/lang/da.js | 5 - .../lib/ckeditor/plugins/devtools/lang/de.js | 5 - .../lib/ckeditor/plugins/devtools/lang/el.js | 5 - .../ckeditor/plugins/devtools/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/devtools/lang/en.js | 5 - .../lib/ckeditor/plugins/devtools/lang/eo.js | 5 - .../lib/ckeditor/plugins/devtools/lang/es.js | 5 - .../lib/ckeditor/plugins/devtools/lang/et.js | 5 - .../lib/ckeditor/plugins/devtools/lang/eu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fa.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fi.js | 5 - .../ckeditor/plugins/devtools/lang/fr-ca.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/gl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/gu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/he.js | 5 - .../lib/ckeditor/plugins/devtools/lang/hr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/hu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/id.js | 5 - .../lib/ckeditor/plugins/devtools/lang/it.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ja.js | 5 - .../lib/ckeditor/plugins/devtools/lang/km.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ko.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ku.js | 5 - .../lib/ckeditor/plugins/devtools/lang/lt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/lv.js | 5 - .../lib/ckeditor/plugins/devtools/lang/nb.js | 5 - .../lib/ckeditor/plugins/devtools/lang/nl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/no.js | 5 - .../lib/ckeditor/plugins/devtools/lang/pl.js | 5 - .../ckeditor/plugins/devtools/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/devtools/lang/pt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ru.js | 5 - .../lib/ckeditor/plugins/devtools/lang/si.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sk.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sq.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sv.js | 5 - .../lib/ckeditor/plugins/devtools/lang/tr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/tt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ug.js | 5 - .../lib/ckeditor/plugins/devtools/lang/uk.js | 5 - .../lib/ckeditor/plugins/devtools/lang/vi.js | 5 - .../ckeditor/plugins/devtools/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/devtools/lang/zh.js | 5 - .../lib/ckeditor/plugins/devtools/plugin.js | 9 - .../plugins/dialog/dialogDefinition.js | 4 - .../ckeditor/plugins/dialogadvtab/plugin.js | 9 - .../lib/ckeditor/plugins/div/dialogs/div.js | 9 - .../ckeditor/plugins/div/icons/creatediv.png | Bin 862 -> 0 bytes .../plugins/div/icons/hidpi/creatediv.png | Bin 3053 -> 0 bytes .../www/lib/ckeditor/plugins/div/lang/af.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/div/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/div/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/div/lang/da.js | 1 - .../www/lib/ckeditor/plugins/div/lang/de.js | 1 - .../www/lib/ckeditor/plugins/div/lang/el.js | 1 - .../lib/ckeditor/plugins/div/lang/en-au.js | 1 - .../lib/ckeditor/plugins/div/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/div/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/div/lang/en.js | 1 - .../www/lib/ckeditor/plugins/div/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/div/lang/es.js | 1 - .../www/lib/ckeditor/plugins/div/lang/et.js | 1 - .../www/lib/ckeditor/plugins/div/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fo.js | 1 - .../lib/ckeditor/plugins/div/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/he.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/id.js | 1 - .../www/lib/ckeditor/plugins/div/lang/is.js | 1 - .../www/lib/ckeditor/plugins/div/lang/it.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/div/lang/km.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/div/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/div/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/div/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/div/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/no.js | 1 - .../www/lib/ckeditor/plugins/div/lang/pl.js | 1 - .../lib/ckeditor/plugins/div/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/div/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/div/lang/si.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sq.js | 1 - .../lib/ckeditor/plugins/div/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/div/lang/th.js | 1 - .../www/lib/ckeditor/plugins/div/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/div/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/vi.js | 1 - .../lib/ckeditor/plugins/div/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/div/plugin.js | 8 - .../lib/ckeditor/plugins/divarea/plugin.js | 5 - .../plugins/docprops/dialogs/docprops.js | 25 - .../plugins/docprops/icons/docprops-rtl.png | Bin 840 -> 0 bytes .../plugins/docprops/icons/docprops.png | Bin 844 -> 0 bytes .../docprops/icons/hidpi/docprops-rtl.png | Bin 1909 -> 0 bytes .../plugins/docprops/icons/hidpi/docprops.png | Bin 1941 -> 0 bytes .../lib/ckeditor/plugins/docprops/lang/af.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ar.js | 2 - .../lib/ckeditor/plugins/docprops/lang/bg.js | 3 - .../lib/ckeditor/plugins/docprops/lang/bn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/bs.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ca.js | 3 - .../lib/ckeditor/plugins/docprops/lang/cs.js | 3 - .../lib/ckeditor/plugins/docprops/lang/cy.js | 3 - .../lib/ckeditor/plugins/docprops/lang/da.js | 3 - .../lib/ckeditor/plugins/docprops/lang/de.js | 3 - .../lib/ckeditor/plugins/docprops/lang/el.js | 3 - .../ckeditor/plugins/docprops/lang/en-au.js | 3 - .../ckeditor/plugins/docprops/lang/en-ca.js | 3 - .../ckeditor/plugins/docprops/lang/en-gb.js | 3 - .../lib/ckeditor/plugins/docprops/lang/en.js | 3 - .../lib/ckeditor/plugins/docprops/lang/eo.js | 3 - .../lib/ckeditor/plugins/docprops/lang/es.js | 3 - .../lib/ckeditor/plugins/docprops/lang/et.js | 3 - .../lib/ckeditor/plugins/docprops/lang/eu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fa.js | 2 - .../lib/ckeditor/plugins/docprops/lang/fi.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fo.js | 3 - .../ckeditor/plugins/docprops/lang/fr-ca.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/gl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/gu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/he.js | 2 - .../lib/ckeditor/plugins/docprops/lang/hi.js | 3 - .../lib/ckeditor/plugins/docprops/lang/hr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/hu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/id.js | 3 - .../lib/ckeditor/plugins/docprops/lang/is.js | 3 - .../lib/ckeditor/plugins/docprops/lang/it.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ja.js | 2 - .../lib/ckeditor/plugins/docprops/lang/ka.js | 3 - .../lib/ckeditor/plugins/docprops/lang/km.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ko.js | 2 - .../lib/ckeditor/plugins/docprops/lang/ku.js | 3 - .../lib/ckeditor/plugins/docprops/lang/lt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/lv.js | 3 - .../lib/ckeditor/plugins/docprops/lang/mk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/mn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ms.js | 3 - .../lib/ckeditor/plugins/docprops/lang/nb.js | 3 - .../lib/ckeditor/plugins/docprops/lang/nl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/no.js | 3 - .../lib/ckeditor/plugins/docprops/lang/pl.js | 3 - .../ckeditor/plugins/docprops/lang/pt-br.js | 3 - .../lib/ckeditor/plugins/docprops/lang/pt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ro.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ru.js | 3 - .../lib/ckeditor/plugins/docprops/lang/si.js | 2 - .../lib/ckeditor/plugins/docprops/lang/sk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sq.js | 3 - .../ckeditor/plugins/docprops/lang/sr-latn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sv.js | 2 - .../lib/ckeditor/plugins/docprops/lang/th.js | 3 - .../lib/ckeditor/plugins/docprops/lang/tr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/tt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ug.js | 3 - .../lib/ckeditor/plugins/docprops/lang/uk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/vi.js | 3 - .../ckeditor/plugins/docprops/lang/zh-cn.js | 2 - .../lib/ckeditor/plugins/docprops/lang/zh.js | 2 - .../lib/ckeditor/plugins/docprops/plugin.js | 6 - .../lib/ckeditor/plugins/find/dialogs/find.js | 24 - .../ckeditor/plugins/find/icons/find-rtl.png | Bin 980 -> 0 bytes .../lib/ckeditor/plugins/find/icons/find.png | Bin 980 -> 0 bytes .../plugins/find/icons/hidpi/find-rtl.png | Bin 2417 -> 0 bytes .../plugins/find/icons/hidpi/find.png | Bin 2417 -> 0 bytes .../plugins/find/icons/hidpi/replace.png | Bin 2761 -> 0 bytes .../ckeditor/plugins/find/icons/replace.png | Bin 948 -> 0 bytes .../www/lib/ckeditor/plugins/find/lang/af.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/find/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/find/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/find/lang/da.js | 1 - .../www/lib/ckeditor/plugins/find/lang/de.js | 1 - .../www/lib/ckeditor/plugins/find/lang/el.js | 1 - .../lib/ckeditor/plugins/find/lang/en-au.js | 1 - .../lib/ckeditor/plugins/find/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/find/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/find/lang/en.js | 1 - .../www/lib/ckeditor/plugins/find/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/find/lang/es.js | 1 - .../www/lib/ckeditor/plugins/find/lang/et.js | 1 - .../www/lib/ckeditor/plugins/find/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fo.js | 1 - .../lib/ckeditor/plugins/find/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/he.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/id.js | 1 - .../www/lib/ckeditor/plugins/find/lang/is.js | 1 - .../www/lib/ckeditor/plugins/find/lang/it.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/find/lang/km.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/find/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/find/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/find/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/find/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/no.js | 1 - .../www/lib/ckeditor/plugins/find/lang/pl.js | 1 - .../lib/ckeditor/plugins/find/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/find/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/find/lang/si.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sq.js | 1 - .../lib/ckeditor/plugins/find/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/find/lang/th.js | 1 - .../www/lib/ckeditor/plugins/find/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/find/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/vi.js | 1 - .../lib/ckeditor/plugins/find/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/find/plugin.js | 6 - .../ckeditor/plugins/flash/dialogs/flash.js | 24 - .../ckeditor/plugins/flash/icons/flash.png | Bin 1038 -> 0 bytes .../plugins/flash/icons/hidpi/flash.png | Bin 2532 -> 0 bytes .../plugins/flash/images/placeholder.png | Bin 256 -> 0 bytes .../www/lib/ckeditor/plugins/flash/lang/af.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ar.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/bg.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/bn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/bs.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ca.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/cs.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/cy.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/da.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/de.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/el.js | 3 - .../lib/ckeditor/plugins/flash/lang/en-au.js | 2 - .../lib/ckeditor/plugins/flash/lang/en-ca.js | 2 - .../lib/ckeditor/plugins/flash/lang/en-gb.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/en.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/eo.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/es.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/et.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/eu.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fa.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/fi.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fo.js | 3 - .../lib/ckeditor/plugins/flash/lang/fr-ca.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fr.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/gl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/gu.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/he.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hi.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hu.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/id.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/is.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/it.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ja.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ka.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/km.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ko.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ku.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/lt.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/lv.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/mk.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/mn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ms.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/nb.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/nl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/no.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/pl.js | 3 - .../lib/ckeditor/plugins/flash/lang/pt-br.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/pt.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ro.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ru.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/si.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sk.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/sl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/sq.js | 3 - .../ckeditor/plugins/flash/lang/sr-latn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sv.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/th.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/tr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/tt.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ug.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/uk.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/vi.js | 3 - .../lib/ckeditor/plugins/flash/lang/zh-cn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/zh.js | 2 - .../www/lib/ckeditor/plugins/flash/plugin.js | 9 - .../www/lib/ckeditor/plugins/font/lang/af.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/font/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/font/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/font/lang/da.js | 1 - .../www/lib/ckeditor/plugins/font/lang/de.js | 1 - .../www/lib/ckeditor/plugins/font/lang/el.js | 1 - .../lib/ckeditor/plugins/font/lang/en-au.js | 1 - .../lib/ckeditor/plugins/font/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/font/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/font/lang/en.js | 1 - .../www/lib/ckeditor/plugins/font/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/font/lang/es.js | 1 - .../www/lib/ckeditor/plugins/font/lang/et.js | 1 - .../www/lib/ckeditor/plugins/font/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fo.js | 1 - .../lib/ckeditor/plugins/font/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/he.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/id.js | 1 - .../www/lib/ckeditor/plugins/font/lang/is.js | 1 - .../www/lib/ckeditor/plugins/font/lang/it.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/font/lang/km.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/font/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/font/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/font/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/font/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/no.js | 1 - .../www/lib/ckeditor/plugins/font/lang/pl.js | 1 - .../lib/ckeditor/plugins/font/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/font/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/font/lang/si.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sq.js | 1 - .../lib/ckeditor/plugins/font/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/font/lang/th.js | 1 - .../www/lib/ckeditor/plugins/font/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/font/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/vi.js | 1 - .../lib/ckeditor/plugins/font/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/font/plugin.js | 9 - .../ckeditor/plugins/forms/dialogs/button.js | 8 - .../plugins/forms/dialogs/checkbox.js | 8 - .../ckeditor/plugins/forms/dialogs/form.js | 8 - .../plugins/forms/dialogs/hiddenfield.js | 8 - .../ckeditor/plugins/forms/dialogs/radio.js | 8 - .../ckeditor/plugins/forms/dialogs/select.js | 20 - .../plugins/forms/dialogs/textarea.js | 8 - .../plugins/forms/dialogs/textfield.js | 10 - .../ckeditor/plugins/forms/icons/button.png | Bin 528 -> 0 bytes .../ckeditor/plugins/forms/icons/checkbox.png | Bin 756 -> 0 bytes .../lib/ckeditor/plugins/forms/icons/form.png | Bin 590 -> 0 bytes .../plugins/forms/icons/hiddenfield.png | Bin 823 -> 0 bytes .../plugins/forms/icons/hidpi/button.png | Bin 933 -> 0 bytes .../plugins/forms/icons/hidpi/checkbox.png | Bin 1780 -> 0 bytes .../plugins/forms/icons/hidpi/form.png | Bin 1348 -> 0 bytes .../plugins/forms/icons/hidpi/hiddenfield.png | Bin 2166 -> 0 bytes .../plugins/forms/icons/hidpi/imagebutton.png | Bin 1398 -> 0 bytes .../plugins/forms/icons/hidpi/radio.png | Bin 2435 -> 0 bytes .../plugins/forms/icons/hidpi/select-rtl.png | Bin 1451 -> 0 bytes .../plugins/forms/icons/hidpi/select.png | Bin 1452 -> 0 bytes .../forms/icons/hidpi/textarea-rtl.png | Bin 1732 -> 0 bytes .../plugins/forms/icons/hidpi/textarea.png | Bin 1680 -> 0 bytes .../forms/icons/hidpi/textfield-rtl.png | Bin 1324 -> 0 bytes .../plugins/forms/icons/hidpi/textfield.png | Bin 1324 -> 0 bytes .../plugins/forms/icons/imagebutton.png | Bin 680 -> 0 bytes .../ckeditor/plugins/forms/icons/radio.png | Bin 874 -> 0 bytes .../plugins/forms/icons/select-rtl.png | Bin 617 -> 0 bytes .../ckeditor/plugins/forms/icons/select.png | Bin 616 -> 0 bytes .../plugins/forms/icons/textarea-rtl.png | Bin 706 -> 0 bytes .../ckeditor/plugins/forms/icons/textarea.png | Bin 677 -> 0 bytes .../plugins/forms/icons/textfield-rtl.png | Bin 588 -> 0 bytes .../plugins/forms/icons/textfield.png | Bin 588 -> 0 bytes .../plugins/forms/images/hiddenfield.gif | Bin 105 -> 0 bytes .../www/lib/ckeditor/plugins/forms/lang/af.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ar.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bg.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bs.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ca.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/cs.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/cy.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/da.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/de.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/el.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-au.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-ca.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-gb.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/en.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/eo.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/es.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/et.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/eu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fa.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fi.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fo.js | 3 - .../lib/ckeditor/plugins/forms/lang/fr-ca.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/gl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/gu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/he.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/hi.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/hr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/hu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/id.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/is.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/it.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ja.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/ka.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/km.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ko.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/ku.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/lt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/lv.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/mk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/mn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ms.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/nb.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/nl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/no.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/pl.js | 3 - .../lib/ckeditor/plugins/forms/lang/pt-br.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/pt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ro.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ru.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/si.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sq.js | 3 - .../ckeditor/plugins/forms/lang/sr-latn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sv.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/th.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/tr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/tt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ug.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/uk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/vi.js | 3 - .../lib/ckeditor/plugins/forms/lang/zh-cn.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/zh.js | 2 - .../www/lib/ckeditor/plugins/forms/plugin.js | 14 - .../assets/www/lib/ckeditor/plugins/icons.png | Bin 18271 -> 0 bytes .../www/lib/ckeditor/plugins/icons_hidpi.png | Bin 62881 -> 0 bytes .../ckeditor/plugins/iframe/dialogs/iframe.js | 10 - .../plugins/iframe/icons/hidpi/iframe.png | Bin 3091 -> 0 bytes .../ckeditor/plugins/iframe/icons/iframe.png | Bin 989 -> 0 bytes .../plugins/iframe/images/placeholder.png | Bin 265 -> 0 bytes .../lib/ckeditor/plugins/iframe/lang/af.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ar.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bg.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bs.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/cs.js | 1 - .../lib/ckeditor/plugins/iframe/lang/cy.js | 1 - .../lib/ckeditor/plugins/iframe/lang/da.js | 1 - .../lib/ckeditor/plugins/iframe/lang/de.js | 1 - .../lib/ckeditor/plugins/iframe/lang/el.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-au.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en.js | 1 - .../lib/ckeditor/plugins/iframe/lang/eo.js | 1 - .../lib/ckeditor/plugins/iframe/lang/es.js | 1 - .../lib/ckeditor/plugins/iframe/lang/et.js | 1 - .../lib/ckeditor/plugins/iframe/lang/eu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fa.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fo.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/gl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/gu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/he.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/id.js | 1 - .../lib/ckeditor/plugins/iframe/lang/is.js | 1 - .../lib/ckeditor/plugins/iframe/lang/it.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ja.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ka.js | 1 - .../lib/ckeditor/plugins/iframe/lang/km.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ko.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ku.js | 1 - .../lib/ckeditor/plugins/iframe/lang/lt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/lv.js | 1 - .../lib/ckeditor/plugins/iframe/lang/mk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/mn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ms.js | 1 - .../lib/ckeditor/plugins/iframe/lang/nb.js | 1 - .../lib/ckeditor/plugins/iframe/lang/nl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/no.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ro.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ru.js | 1 - .../lib/ckeditor/plugins/iframe/lang/si.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sq.js | 1 - .../ckeditor/plugins/iframe/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sv.js | 1 - .../lib/ckeditor/plugins/iframe/lang/th.js | 1 - .../lib/ckeditor/plugins/iframe/lang/tr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/tt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ug.js | 1 - .../lib/ckeditor/plugins/iframe/lang/uk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/vi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/iframe/plugin.js | 8 - .../ckeditor/plugins/iframedialog/plugin.js | 8 - .../ckeditor/plugins/image/dialogs/image.js | 43 - .../ckeditor/plugins/image/images/noimage.png | Bin 2115 -> 0 bytes .../ckeditor/plugins/image2/dialogs/image2.js | 14 - .../plugins/image2/icons/hidpi/image.png | Bin 1745 -> 0 bytes .../ckeditor/plugins/image2/icons/image.png | Bin 756 -> 0 bytes .../lib/ckeditor/plugins/image2/lang/af.js | 1 - .../lib/ckeditor/plugins/image2/lang/ar.js | 1 - .../lib/ckeditor/plugins/image2/lang/bg.js | 1 - .../lib/ckeditor/plugins/image2/lang/bn.js | 1 - .../lib/ckeditor/plugins/image2/lang/bs.js | 1 - .../lib/ckeditor/plugins/image2/lang/ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/cs.js | 1 - .../lib/ckeditor/plugins/image2/lang/cy.js | 1 - .../lib/ckeditor/plugins/image2/lang/da.js | 1 - .../lib/ckeditor/plugins/image2/lang/de.js | 1 - .../lib/ckeditor/plugins/image2/lang/el.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-au.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/image2/lang/en.js | 1 - .../lib/ckeditor/plugins/image2/lang/eo.js | 1 - .../lib/ckeditor/plugins/image2/lang/es.js | 1 - .../lib/ckeditor/plugins/image2/lang/et.js | 1 - .../lib/ckeditor/plugins/image2/lang/eu.js | 1 - .../lib/ckeditor/plugins/image2/lang/fa.js | 1 - .../lib/ckeditor/plugins/image2/lang/fi.js | 1 - .../lib/ckeditor/plugins/image2/lang/fo.js | 1 - .../lib/ckeditor/plugins/image2/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/fr.js | 1 - .../lib/ckeditor/plugins/image2/lang/gl.js | 1 - .../lib/ckeditor/plugins/image2/lang/gu.js | 1 - .../lib/ckeditor/plugins/image2/lang/he.js | 1 - .../lib/ckeditor/plugins/image2/lang/hi.js | 1 - .../lib/ckeditor/plugins/image2/lang/hr.js | 1 - .../lib/ckeditor/plugins/image2/lang/hu.js | 1 - .../lib/ckeditor/plugins/image2/lang/id.js | 1 - .../lib/ckeditor/plugins/image2/lang/is.js | 1 - .../lib/ckeditor/plugins/image2/lang/it.js | 1 - .../lib/ckeditor/plugins/image2/lang/ja.js | 1 - .../lib/ckeditor/plugins/image2/lang/ka.js | 1 - .../lib/ckeditor/plugins/image2/lang/km.js | 1 - .../lib/ckeditor/plugins/image2/lang/ko.js | 1 - .../lib/ckeditor/plugins/image2/lang/ku.js | 1 - .../lib/ckeditor/plugins/image2/lang/lt.js | 1 - .../lib/ckeditor/plugins/image2/lang/lv.js | 1 - .../lib/ckeditor/plugins/image2/lang/mk.js | 1 - .../lib/ckeditor/plugins/image2/lang/mn.js | 1 - .../lib/ckeditor/plugins/image2/lang/ms.js | 1 - .../lib/ckeditor/plugins/image2/lang/nb.js | 1 - .../lib/ckeditor/plugins/image2/lang/nl.js | 1 - .../lib/ckeditor/plugins/image2/lang/no.js | 1 - .../lib/ckeditor/plugins/image2/lang/pl.js | 1 - .../lib/ckeditor/plugins/image2/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/image2/lang/pt.js | 1 - .../lib/ckeditor/plugins/image2/lang/ro.js | 1 - .../lib/ckeditor/plugins/image2/lang/ru.js | 1 - .../lib/ckeditor/plugins/image2/lang/si.js | 1 - .../lib/ckeditor/plugins/image2/lang/sk.js | 1 - .../lib/ckeditor/plugins/image2/lang/sl.js | 1 - .../lib/ckeditor/plugins/image2/lang/sq.js | 1 - .../ckeditor/plugins/image2/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/image2/lang/sr.js | 1 - .../lib/ckeditor/plugins/image2/lang/sv.js | 1 - .../lib/ckeditor/plugins/image2/lang/th.js | 1 - .../lib/ckeditor/plugins/image2/lang/tr.js | 1 - .../lib/ckeditor/plugins/image2/lang/tt.js | 1 - .../lib/ckeditor/plugins/image2/lang/ug.js | 1 - .../lib/ckeditor/plugins/image2/lang/uk.js | 1 - .../lib/ckeditor/plugins/image2/lang/vi.js | 1 - .../lib/ckeditor/plugins/image2/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/image2/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/image2/plugin.js | 30 - .../ckeditor/plugins/indentblock/plugin.js | 9 - .../justify/icons/hidpi/justifyblock.png | Bin 882 -> 0 bytes .../justify/icons/hidpi/justifycenter.png | Bin 1142 -> 0 bytes .../justify/icons/hidpi/justifyleft.png | Bin 1042 -> 0 bytes .../justify/icons/hidpi/justifyright.png | Bin 1048 -> 0 bytes .../plugins/justify/icons/justifyblock.png | Bin 496 -> 0 bytes .../plugins/justify/icons/justifycenter.png | Bin 609 -> 0 bytes .../plugins/justify/icons/justifyleft.png | Bin 558 -> 0 bytes .../plugins/justify/icons/justifyright.png | Bin 554 -> 0 bytes .../lib/ckeditor/plugins/justify/lang/af.js | 1 - .../lib/ckeditor/plugins/justify/lang/ar.js | 1 - .../lib/ckeditor/plugins/justify/lang/bg.js | 1 - .../lib/ckeditor/plugins/justify/lang/bn.js | 1 - .../lib/ckeditor/plugins/justify/lang/bs.js | 1 - .../lib/ckeditor/plugins/justify/lang/ca.js | 1 - .../lib/ckeditor/plugins/justify/lang/cs.js | 1 - .../lib/ckeditor/plugins/justify/lang/cy.js | 1 - .../lib/ckeditor/plugins/justify/lang/da.js | 1 - .../lib/ckeditor/plugins/justify/lang/de.js | 1 - .../lib/ckeditor/plugins/justify/lang/el.js | 1 - .../ckeditor/plugins/justify/lang/en-au.js | 1 - .../ckeditor/plugins/justify/lang/en-ca.js | 1 - .../ckeditor/plugins/justify/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/justify/lang/en.js | 1 - .../lib/ckeditor/plugins/justify/lang/eo.js | 1 - .../lib/ckeditor/plugins/justify/lang/es.js | 1 - .../lib/ckeditor/plugins/justify/lang/et.js | 1 - .../lib/ckeditor/plugins/justify/lang/eu.js | 1 - .../lib/ckeditor/plugins/justify/lang/fa.js | 1 - .../lib/ckeditor/plugins/justify/lang/fi.js | 1 - .../lib/ckeditor/plugins/justify/lang/fo.js | 1 - .../ckeditor/plugins/justify/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/justify/lang/fr.js | 1 - .../lib/ckeditor/plugins/justify/lang/gl.js | 1 - .../lib/ckeditor/plugins/justify/lang/gu.js | 1 - .../lib/ckeditor/plugins/justify/lang/he.js | 1 - .../lib/ckeditor/plugins/justify/lang/hi.js | 1 - .../lib/ckeditor/plugins/justify/lang/hr.js | 1 - .../lib/ckeditor/plugins/justify/lang/hu.js | 1 - .../lib/ckeditor/plugins/justify/lang/id.js | 1 - .../lib/ckeditor/plugins/justify/lang/is.js | 1 - .../lib/ckeditor/plugins/justify/lang/it.js | 1 - .../lib/ckeditor/plugins/justify/lang/ja.js | 1 - .../lib/ckeditor/plugins/justify/lang/ka.js | 1 - .../lib/ckeditor/plugins/justify/lang/km.js | 1 - .../lib/ckeditor/plugins/justify/lang/ko.js | 1 - .../lib/ckeditor/plugins/justify/lang/ku.js | 1 - .../lib/ckeditor/plugins/justify/lang/lt.js | 1 - .../lib/ckeditor/plugins/justify/lang/lv.js | 1 - .../lib/ckeditor/plugins/justify/lang/mk.js | 1 - .../lib/ckeditor/plugins/justify/lang/mn.js | 1 - .../lib/ckeditor/plugins/justify/lang/ms.js | 1 - .../lib/ckeditor/plugins/justify/lang/nb.js | 1 - .../lib/ckeditor/plugins/justify/lang/nl.js | 1 - .../lib/ckeditor/plugins/justify/lang/no.js | 1 - .../lib/ckeditor/plugins/justify/lang/pl.js | 1 - .../ckeditor/plugins/justify/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/justify/lang/pt.js | 1 - .../lib/ckeditor/plugins/justify/lang/ro.js | 1 - .../lib/ckeditor/plugins/justify/lang/ru.js | 1 - .../lib/ckeditor/plugins/justify/lang/si.js | 1 - .../lib/ckeditor/plugins/justify/lang/sk.js | 1 - .../lib/ckeditor/plugins/justify/lang/sl.js | 1 - .../lib/ckeditor/plugins/justify/lang/sq.js | 1 - .../ckeditor/plugins/justify/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/justify/lang/sr.js | 1 - .../lib/ckeditor/plugins/justify/lang/sv.js | 1 - .../lib/ckeditor/plugins/justify/lang/th.js | 1 - .../lib/ckeditor/plugins/justify/lang/tr.js | 1 - .../lib/ckeditor/plugins/justify/lang/tt.js | 1 - .../lib/ckeditor/plugins/justify/lang/ug.js | 1 - .../lib/ckeditor/plugins/justify/lang/uk.js | 1 - .../lib/ckeditor/plugins/justify/lang/vi.js | 1 - .../ckeditor/plugins/justify/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/justify/lang/zh.js | 1 - .../lib/ckeditor/plugins/justify/plugin.js | 12 - .../plugins/language/icons/hidpi/language.png | Bin 1678 -> 0 bytes .../plugins/language/icons/language.png | Bin 668 -> 0 bytes .../lib/ckeditor/plugins/language/lang/ar.js | 5 - .../lib/ckeditor/plugins/language/lang/ca.js | 5 - .../lib/ckeditor/plugins/language/lang/cs.js | 5 - .../lib/ckeditor/plugins/language/lang/cy.js | 5 - .../lib/ckeditor/plugins/language/lang/de.js | 5 - .../lib/ckeditor/plugins/language/lang/el.js | 5 - .../ckeditor/plugins/language/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/language/lang/en.js | 5 - .../lib/ckeditor/plugins/language/lang/eo.js | 5 - .../lib/ckeditor/plugins/language/lang/es.js | 5 - .../lib/ckeditor/plugins/language/lang/fa.js | 5 - .../lib/ckeditor/plugins/language/lang/fi.js | 5 - .../lib/ckeditor/plugins/language/lang/fr.js | 5 - .../lib/ckeditor/plugins/language/lang/gl.js | 5 - .../lib/ckeditor/plugins/language/lang/he.js | 5 - .../lib/ckeditor/plugins/language/lang/hr.js | 5 - .../lib/ckeditor/plugins/language/lang/hu.js | 5 - .../lib/ckeditor/plugins/language/lang/it.js | 5 - .../lib/ckeditor/plugins/language/lang/ja.js | 5 - .../lib/ckeditor/plugins/language/lang/km.js | 5 - .../lib/ckeditor/plugins/language/lang/nb.js | 5 - .../lib/ckeditor/plugins/language/lang/nl.js | 5 - .../lib/ckeditor/plugins/language/lang/no.js | 5 - .../lib/ckeditor/plugins/language/lang/pl.js | 5 - .../ckeditor/plugins/language/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/language/lang/pt.js | 5 - .../lib/ckeditor/plugins/language/lang/ru.js | 5 - .../lib/ckeditor/plugins/language/lang/sk.js | 5 - .../lib/ckeditor/plugins/language/lang/sl.js | 5 - .../lib/ckeditor/plugins/language/lang/sv.js | 5 - .../lib/ckeditor/plugins/language/lang/tr.js | 5 - .../lib/ckeditor/plugins/language/lang/tt.js | 5 - .../lib/ckeditor/plugins/language/lang/uk.js | 5 - .../lib/ckeditor/plugins/language/lang/vi.js | 5 - .../ckeditor/plugins/language/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/language/lang/zh.js | 5 - .../lib/ckeditor/plugins/language/plugin.js | 8 - .../lib/ckeditor/plugins/lineutils/plugin.js | 21 - .../ckeditor/plugins/link/dialogs/anchor.js | 7 - .../lib/ckeditor/plugins/link/dialogs/link.js | 26 - .../ckeditor/plugins/link/images/anchor.png | Bin 589 -> 0 bytes .../plugins/link/images/hidpi/anchor.png | Bin 1379 -> 0 bytes .../plugins/liststyle/dialogs/liststyle.js | 10 - .../lib/ckeditor/plugins/liststyle/lang/af.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ar.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bg.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bs.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ca.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/cs.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/cy.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/da.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/de.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/el.js | 2 - .../ckeditor/plugins/liststyle/lang/en-au.js | 2 - .../ckeditor/plugins/liststyle/lang/en-ca.js | 2 - .../ckeditor/plugins/liststyle/lang/en-gb.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/en.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/eo.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/es.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/et.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/eu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fa.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fi.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fo.js | 2 - .../ckeditor/plugins/liststyle/lang/fr-ca.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/gl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/gu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/he.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hi.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/id.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/is.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/it.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ja.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ka.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/km.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ko.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ku.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/lt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/lv.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/mk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/mn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ms.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/nb.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/nl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/no.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/pl.js | 2 - .../ckeditor/plugins/liststyle/lang/pt-br.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/pt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ro.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ru.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/si.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sq.js | 2 - .../plugins/liststyle/lang/sr-latn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sv.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/th.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/tr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/tt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ug.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/uk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/vi.js | 2 - .../ckeditor/plugins/liststyle/lang/zh-cn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/zh.js | 2 - .../lib/ckeditor/plugins/liststyle/plugin.js | 7 - .../magicline/images/hidpi/icon-rtl.png | Bin 176 -> 0 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 199 -> 0 bytes .../plugins/magicline/images/icon-rtl.png | Bin 138 -> 0 bytes .../plugins/magicline/images/icon.png | Bin 133 -> 0 bytes .../plugins/mathjax/dialogs/mathjax.js | 7 - .../plugins/mathjax/icons/hidpi/mathjax.png | Bin 1437 -> 0 bytes .../plugins/mathjax/icons/mathjax.png | Bin 703 -> 0 bytes .../plugins/mathjax/images/loader.gif | Bin 784 -> 0 bytes .../lib/ckeditor/plugins/mathjax/lang/ar.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ca.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/cs.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/cy.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/de.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/el.js | 1 - .../ckeditor/plugins/mathjax/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/en.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/eo.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/es.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fa.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fi.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/gl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/he.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/hr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/hu.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/it.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ja.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/km.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/nb.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/nl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/no.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/pl.js | 1 - .../ckeditor/plugins/mathjax/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/pt.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ro.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ru.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sk.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sv.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/tr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/tt.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/uk.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/vi.js | 1 - .../ckeditor/plugins/mathjax/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/zh.js | 1 - .../lib/ckeditor/plugins/mathjax/plugin.js | 15 - .../newpage/icons/hidpi/newpage-rtl.png | Bin 1070 -> 0 bytes .../plugins/newpage/icons/hidpi/newpage.png | Bin 1112 -> 0 bytes .../plugins/newpage/icons/newpage-rtl.png | Bin 575 -> 0 bytes .../plugins/newpage/icons/newpage.png | Bin 580 -> 0 bytes .../lib/ckeditor/plugins/newpage/lang/af.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ar.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bg.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bs.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ca.js | 1 - .../lib/ckeditor/plugins/newpage/lang/cs.js | 1 - .../lib/ckeditor/plugins/newpage/lang/cy.js | 1 - .../lib/ckeditor/plugins/newpage/lang/da.js | 1 - .../lib/ckeditor/plugins/newpage/lang/de.js | 1 - .../lib/ckeditor/plugins/newpage/lang/el.js | 1 - .../ckeditor/plugins/newpage/lang/en-au.js | 1 - .../ckeditor/plugins/newpage/lang/en-ca.js | 1 - .../ckeditor/plugins/newpage/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/newpage/lang/en.js | 1 - .../lib/ckeditor/plugins/newpage/lang/eo.js | 1 - .../lib/ckeditor/plugins/newpage/lang/es.js | 1 - .../lib/ckeditor/plugins/newpage/lang/et.js | 1 - .../lib/ckeditor/plugins/newpage/lang/eu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fa.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fi.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fo.js | 1 - .../ckeditor/plugins/newpage/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/gl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/gu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/he.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hi.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/id.js | 1 - .../lib/ckeditor/plugins/newpage/lang/is.js | 1 - .../lib/ckeditor/plugins/newpage/lang/it.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ja.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ka.js | 1 - .../lib/ckeditor/plugins/newpage/lang/km.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ko.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ku.js | 1 - .../lib/ckeditor/plugins/newpage/lang/lt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/lv.js | 1 - .../lib/ckeditor/plugins/newpage/lang/mk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/mn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ms.js | 1 - .../lib/ckeditor/plugins/newpage/lang/nb.js | 1 - .../lib/ckeditor/plugins/newpage/lang/nl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/no.js | 1 - .../lib/ckeditor/plugins/newpage/lang/pl.js | 1 - .../ckeditor/plugins/newpage/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/newpage/lang/pt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ro.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ru.js | 1 - .../lib/ckeditor/plugins/newpage/lang/si.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sq.js | 1 - .../ckeditor/plugins/newpage/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sv.js | 1 - .../lib/ckeditor/plugins/newpage/lang/th.js | 1 - .../lib/ckeditor/plugins/newpage/lang/tr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/tt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ug.js | 1 - .../lib/ckeditor/plugins/newpage/lang/uk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/vi.js | 1 - .../ckeditor/plugins/newpage/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/zh.js | 1 - .../lib/ckeditor/plugins/newpage/plugin.js | 6 - .../pagebreak/icons/hidpi/pagebreak-rtl.png | Bin 1318 -> 0 bytes .../pagebreak/icons/hidpi/pagebreak.png | Bin 1299 -> 0 bytes .../plugins/pagebreak/icons/pagebreak-rtl.png | Bin 629 -> 0 bytes .../plugins/pagebreak/icons/pagebreak.png | Bin 602 -> 0 bytes .../plugins/pagebreak/images/pagebreak.gif | Bin 54 -> 0 bytes .../lib/ckeditor/plugins/pagebreak/lang/af.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ar.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bg.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bs.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ca.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/cs.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/cy.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/da.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/de.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/el.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-au.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-ca.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/en.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/eo.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/es.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/et.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/eu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fa.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fi.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fo.js | 1 - .../ckeditor/plugins/pagebreak/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/gl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/gu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/he.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hi.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/id.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/is.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/it.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ja.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ka.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/km.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ko.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ku.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/lt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/lv.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/mk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/mn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ms.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/nb.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/nl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/no.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/pl.js | 1 - .../ckeditor/plugins/pagebreak/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/pt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ro.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ru.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/si.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sq.js | 1 - .../plugins/pagebreak/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sv.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/th.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/tr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/tt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ug.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/uk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/vi.js | 1 - .../ckeditor/plugins/pagebreak/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/zh.js | 1 - .../lib/ckeditor/plugins/pagebreak/plugin.js | 9 - .../ckeditor/plugins/panelbutton/plugin.js | 8 - .../plugins/pastefromword/filter/default.js | 31 - .../placeholder/dialogs/placeholder.js | 5 - .../placeholder/icons/hidpi/placeholder.png | Bin 1775 -> 0 bytes .../plugins/placeholder/icons/placeholder.png | Bin 714 -> 0 bytes .../ckeditor/plugins/placeholder/lang/ar.js | 5 - .../ckeditor/plugins/placeholder/lang/bg.js | 5 - .../ckeditor/plugins/placeholder/lang/ca.js | 5 - .../ckeditor/plugins/placeholder/lang/cs.js | 5 - .../ckeditor/plugins/placeholder/lang/cy.js | 5 - .../ckeditor/plugins/placeholder/lang/da.js | 5 - .../ckeditor/plugins/placeholder/lang/de.js | 5 - .../ckeditor/plugins/placeholder/lang/el.js | 5 - .../plugins/placeholder/lang/en-gb.js | 5 - .../ckeditor/plugins/placeholder/lang/en.js | 5 - .../ckeditor/plugins/placeholder/lang/eo.js | 5 - .../ckeditor/plugins/placeholder/lang/es.js | 5 - .../ckeditor/plugins/placeholder/lang/et.js | 5 - .../ckeditor/plugins/placeholder/lang/eu.js | 5 - .../ckeditor/plugins/placeholder/lang/fa.js | 5 - .../ckeditor/plugins/placeholder/lang/fi.js | 5 - .../plugins/placeholder/lang/fr-ca.js | 5 - .../ckeditor/plugins/placeholder/lang/fr.js | 5 - .../ckeditor/plugins/placeholder/lang/gl.js | 5 - .../ckeditor/plugins/placeholder/lang/he.js | 5 - .../ckeditor/plugins/placeholder/lang/hr.js | 5 - .../ckeditor/plugins/placeholder/lang/hu.js | 5 - .../ckeditor/plugins/placeholder/lang/id.js | 5 - .../ckeditor/plugins/placeholder/lang/it.js | 5 - .../ckeditor/plugins/placeholder/lang/ja.js | 5 - .../ckeditor/plugins/placeholder/lang/km.js | 5 - .../ckeditor/plugins/placeholder/lang/ko.js | 5 - .../ckeditor/plugins/placeholder/lang/ku.js | 5 - .../ckeditor/plugins/placeholder/lang/lv.js | 5 - .../ckeditor/plugins/placeholder/lang/nb.js | 5 - .../ckeditor/plugins/placeholder/lang/nl.js | 5 - .../ckeditor/plugins/placeholder/lang/no.js | 5 - .../ckeditor/plugins/placeholder/lang/pl.js | 5 - .../plugins/placeholder/lang/pt-br.js | 5 - .../ckeditor/plugins/placeholder/lang/pt.js | 5 - .../ckeditor/plugins/placeholder/lang/ru.js | 5 - .../ckeditor/plugins/placeholder/lang/si.js | 5 - .../ckeditor/plugins/placeholder/lang/sk.js | 5 - .../ckeditor/plugins/placeholder/lang/sl.js | 5 - .../ckeditor/plugins/placeholder/lang/sq.js | 5 - .../ckeditor/plugins/placeholder/lang/sv.js | 5 - .../ckeditor/plugins/placeholder/lang/th.js | 5 - .../ckeditor/plugins/placeholder/lang/tr.js | 5 - .../ckeditor/plugins/placeholder/lang/tt.js | 5 - .../ckeditor/plugins/placeholder/lang/ug.js | 5 - .../ckeditor/plugins/placeholder/lang/uk.js | 5 - .../ckeditor/plugins/placeholder/lang/vi.js | 5 - .../plugins/placeholder/lang/zh-cn.js | 5 - .../ckeditor/plugins/placeholder/lang/zh.js | 5 - .../ckeditor/plugins/placeholder/plugin.js | 7 - .../preview/icons/hidpi/preview-rtl.png | Bin 2145 -> 0 bytes .../plugins/preview/icons/hidpi/preview.png | Bin 2204 -> 0 bytes .../plugins/preview/icons/preview-rtl.png | Bin 850 -> 0 bytes .../plugins/preview/icons/preview.png | Bin 855 -> 0 bytes .../lib/ckeditor/plugins/preview/lang/af.js | 1 - .../lib/ckeditor/plugins/preview/lang/ar.js | 1 - .../lib/ckeditor/plugins/preview/lang/bg.js | 1 - .../lib/ckeditor/plugins/preview/lang/bn.js | 1 - .../lib/ckeditor/plugins/preview/lang/bs.js | 1 - .../lib/ckeditor/plugins/preview/lang/ca.js | 1 - .../lib/ckeditor/plugins/preview/lang/cs.js | 1 - .../lib/ckeditor/plugins/preview/lang/cy.js | 1 - .../lib/ckeditor/plugins/preview/lang/da.js | 1 - .../lib/ckeditor/plugins/preview/lang/de.js | 1 - .../lib/ckeditor/plugins/preview/lang/el.js | 1 - .../ckeditor/plugins/preview/lang/en-au.js | 1 - .../ckeditor/plugins/preview/lang/en-ca.js | 1 - .../ckeditor/plugins/preview/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/preview/lang/en.js | 1 - .../lib/ckeditor/plugins/preview/lang/eo.js | 1 - .../lib/ckeditor/plugins/preview/lang/es.js | 1 - .../lib/ckeditor/plugins/preview/lang/et.js | 1 - .../lib/ckeditor/plugins/preview/lang/eu.js | 1 - .../lib/ckeditor/plugins/preview/lang/fa.js | 1 - .../lib/ckeditor/plugins/preview/lang/fi.js | 1 - .../lib/ckeditor/plugins/preview/lang/fo.js | 1 - .../ckeditor/plugins/preview/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/preview/lang/fr.js | 1 - .../lib/ckeditor/plugins/preview/lang/gl.js | 1 - .../lib/ckeditor/plugins/preview/lang/gu.js | 1 - .../lib/ckeditor/plugins/preview/lang/he.js | 1 - .../lib/ckeditor/plugins/preview/lang/hi.js | 1 - .../lib/ckeditor/plugins/preview/lang/hr.js | 1 - .../lib/ckeditor/plugins/preview/lang/hu.js | 1 - .../lib/ckeditor/plugins/preview/lang/id.js | 1 - .../lib/ckeditor/plugins/preview/lang/is.js | 1 - .../lib/ckeditor/plugins/preview/lang/it.js | 1 - .../lib/ckeditor/plugins/preview/lang/ja.js | 1 - .../lib/ckeditor/plugins/preview/lang/ka.js | 1 - .../lib/ckeditor/plugins/preview/lang/km.js | 1 - .../lib/ckeditor/plugins/preview/lang/ko.js | 1 - .../lib/ckeditor/plugins/preview/lang/ku.js | 1 - .../lib/ckeditor/plugins/preview/lang/lt.js | 1 - .../lib/ckeditor/plugins/preview/lang/lv.js | 1 - .../lib/ckeditor/plugins/preview/lang/mk.js | 1 - .../lib/ckeditor/plugins/preview/lang/mn.js | 1 - .../lib/ckeditor/plugins/preview/lang/ms.js | 1 - .../lib/ckeditor/plugins/preview/lang/nb.js | 1 - .../lib/ckeditor/plugins/preview/lang/nl.js | 1 - .../lib/ckeditor/plugins/preview/lang/no.js | 1 - .../lib/ckeditor/plugins/preview/lang/pl.js | 1 - .../ckeditor/plugins/preview/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/preview/lang/pt.js | 1 - .../lib/ckeditor/plugins/preview/lang/ro.js | 1 - .../lib/ckeditor/plugins/preview/lang/ru.js | 1 - .../lib/ckeditor/plugins/preview/lang/si.js | 1 - .../lib/ckeditor/plugins/preview/lang/sk.js | 1 - .../lib/ckeditor/plugins/preview/lang/sl.js | 1 - .../lib/ckeditor/plugins/preview/lang/sq.js | 1 - .../ckeditor/plugins/preview/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/preview/lang/sr.js | 1 - .../lib/ckeditor/plugins/preview/lang/sv.js | 1 - .../lib/ckeditor/plugins/preview/lang/th.js | 1 - .../lib/ckeditor/plugins/preview/lang/tr.js | 1 - .../lib/ckeditor/plugins/preview/lang/tt.js | 1 - .../lib/ckeditor/plugins/preview/lang/ug.js | 1 - .../lib/ckeditor/plugins/preview/lang/uk.js | 1 - .../lib/ckeditor/plugins/preview/lang/vi.js | 1 - .../ckeditor/plugins/preview/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/preview/lang/zh.js | 1 - .../lib/ckeditor/plugins/preview/plugin.js | 9 - .../lib/ckeditor/plugins/preview/preview.html | 13 - .../plugins/print/icons/hidpi/print.png | Bin 1648 -> 0 bytes .../ckeditor/plugins/print/icons/print.png | Bin 765 -> 0 bytes .../www/lib/ckeditor/plugins/print/lang/af.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/print/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/print/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/print/lang/da.js | 1 - .../www/lib/ckeditor/plugins/print/lang/de.js | 1 - .../www/lib/ckeditor/plugins/print/lang/el.js | 1 - .../lib/ckeditor/plugins/print/lang/en-au.js | 1 - .../lib/ckeditor/plugins/print/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/print/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/print/lang/en.js | 1 - .../www/lib/ckeditor/plugins/print/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/print/lang/es.js | 1 - .../www/lib/ckeditor/plugins/print/lang/et.js | 1 - .../www/lib/ckeditor/plugins/print/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fo.js | 1 - .../lib/ckeditor/plugins/print/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/he.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/id.js | 1 - .../www/lib/ckeditor/plugins/print/lang/is.js | 1 - .../www/lib/ckeditor/plugins/print/lang/it.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/print/lang/km.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/print/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/print/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/print/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/print/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/no.js | 1 - .../www/lib/ckeditor/plugins/print/lang/pl.js | 1 - .../lib/ckeditor/plugins/print/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/print/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/print/lang/si.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sq.js | 1 - .../ckeditor/plugins/print/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/print/lang/th.js | 1 - .../www/lib/ckeditor/plugins/print/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/print/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/vi.js | 1 - .../lib/ckeditor/plugins/print/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/print/plugin.js | 6 - .../plugins/save/icons/hidpi/save.png | Bin 1648 -> 0 bytes .../lib/ckeditor/plugins/save/icons/save.png | Bin 716 -> 0 bytes .../www/lib/ckeditor/plugins/save/lang/af.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/save/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/save/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/save/lang/da.js | 1 - .../www/lib/ckeditor/plugins/save/lang/de.js | 1 - .../www/lib/ckeditor/plugins/save/lang/el.js | 1 - .../lib/ckeditor/plugins/save/lang/en-au.js | 1 - .../lib/ckeditor/plugins/save/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/save/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/save/lang/en.js | 1 - .../www/lib/ckeditor/plugins/save/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/save/lang/es.js | 1 - .../www/lib/ckeditor/plugins/save/lang/et.js | 1 - .../www/lib/ckeditor/plugins/save/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fo.js | 1 - .../lib/ckeditor/plugins/save/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/he.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/id.js | 1 - .../www/lib/ckeditor/plugins/save/lang/is.js | 1 - .../www/lib/ckeditor/plugins/save/lang/it.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/save/lang/km.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/save/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/save/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/save/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/save/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/no.js | 1 - .../www/lib/ckeditor/plugins/save/lang/pl.js | 1 - .../lib/ckeditor/plugins/save/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/save/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/save/lang/si.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sq.js | 1 - .../lib/ckeditor/plugins/save/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/save/lang/th.js | 1 - .../www/lib/ckeditor/plugins/save/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/save/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/vi.js | 1 - .../lib/ckeditor/plugins/save/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/save/plugin.js | 6 - .../www/lib/ckeditor/plugins/scayt/LICENSE.md | 28 - .../ckeditor/plugins/scayt/dialogs/options.js | 17 - .../plugins/scayt/dialogs/toolbar.css | 71 - .../selectall/icons/hidpi/selectall.png | Bin 1093 -> 0 bytes .../plugins/selectall/icons/selectall.png | Bin 665 -> 0 bytes .../lib/ckeditor/plugins/selectall/lang/af.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ar.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bg.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bs.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ca.js | 1 - .../lib/ckeditor/plugins/selectall/lang/cs.js | 1 - .../lib/ckeditor/plugins/selectall/lang/cy.js | 1 - .../lib/ckeditor/plugins/selectall/lang/da.js | 1 - .../lib/ckeditor/plugins/selectall/lang/de.js | 1 - .../lib/ckeditor/plugins/selectall/lang/el.js | 1 - .../ckeditor/plugins/selectall/lang/en-au.js | 1 - .../ckeditor/plugins/selectall/lang/en-ca.js | 1 - .../ckeditor/plugins/selectall/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/selectall/lang/en.js | 1 - .../lib/ckeditor/plugins/selectall/lang/eo.js | 1 - .../lib/ckeditor/plugins/selectall/lang/es.js | 1 - .../lib/ckeditor/plugins/selectall/lang/et.js | 1 - .../lib/ckeditor/plugins/selectall/lang/eu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fa.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fi.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fo.js | 1 - .../ckeditor/plugins/selectall/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/gl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/gu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/he.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hi.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/id.js | 1 - .../lib/ckeditor/plugins/selectall/lang/is.js | 1 - .../lib/ckeditor/plugins/selectall/lang/it.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ja.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ka.js | 1 - .../lib/ckeditor/plugins/selectall/lang/km.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ko.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ku.js | 1 - .../lib/ckeditor/plugins/selectall/lang/lt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/lv.js | 1 - .../lib/ckeditor/plugins/selectall/lang/mk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/mn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ms.js | 1 - .../lib/ckeditor/plugins/selectall/lang/nb.js | 1 - .../lib/ckeditor/plugins/selectall/lang/nl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/no.js | 1 - .../lib/ckeditor/plugins/selectall/lang/pl.js | 1 - .../ckeditor/plugins/selectall/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/selectall/lang/pt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ro.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ru.js | 1 - .../lib/ckeditor/plugins/selectall/lang/si.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sq.js | 1 - .../plugins/selectall/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sv.js | 1 - .../lib/ckeditor/plugins/selectall/lang/th.js | 1 - .../lib/ckeditor/plugins/selectall/lang/tr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/tt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ug.js | 1 - .../lib/ckeditor/plugins/selectall/lang/uk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/vi.js | 1 - .../ckeditor/plugins/selectall/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/zh.js | 1 - .../lib/ckeditor/plugins/selectall/plugin.js | 6 - .../ckeditor/plugins/sharedspace/plugin.js | 7 - .../showblocks/icons/hidpi/showblocks-rtl.png | Bin 1853 -> 0 bytes .../showblocks/icons/hidpi/showblocks.png | Bin 1895 -> 0 bytes .../showblocks/icons/showblocks-rtl.png | Bin 691 -> 0 bytes .../plugins/showblocks/icons/showblocks.png | Bin 701 -> 0 bytes .../showblocks/images/block_address.png | Bin 152 -> 0 bytes .../showblocks/images/block_blockquote.png | Bin 154 -> 0 bytes .../plugins/showblocks/images/block_div.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h1.png | Bin 120 -> 0 bytes .../plugins/showblocks/images/block_h2.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h3.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h4.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h5.png | Bin 126 -> 0 bytes .../plugins/showblocks/images/block_h6.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_p.png | Bin 115 -> 0 bytes .../plugins/showblocks/images/block_pre.png | Bin 128 -> 0 bytes .../ckeditor/plugins/showblocks/lang/af.js | 1 - .../ckeditor/plugins/showblocks/lang/ar.js | 1 - .../ckeditor/plugins/showblocks/lang/bg.js | 1 - .../ckeditor/plugins/showblocks/lang/bn.js | 1 - .../ckeditor/plugins/showblocks/lang/bs.js | 1 - .../ckeditor/plugins/showblocks/lang/ca.js | 1 - .../ckeditor/plugins/showblocks/lang/cs.js | 1 - .../ckeditor/plugins/showblocks/lang/cy.js | 1 - .../ckeditor/plugins/showblocks/lang/da.js | 1 - .../ckeditor/plugins/showblocks/lang/de.js | 1 - .../ckeditor/plugins/showblocks/lang/el.js | 1 - .../ckeditor/plugins/showblocks/lang/en-au.js | 1 - .../ckeditor/plugins/showblocks/lang/en-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/en-gb.js | 1 - .../ckeditor/plugins/showblocks/lang/en.js | 1 - .../ckeditor/plugins/showblocks/lang/eo.js | 1 - .../ckeditor/plugins/showblocks/lang/es.js | 1 - .../ckeditor/plugins/showblocks/lang/et.js | 1 - .../ckeditor/plugins/showblocks/lang/eu.js | 1 - .../ckeditor/plugins/showblocks/lang/fa.js | 1 - .../ckeditor/plugins/showblocks/lang/fi.js | 1 - .../ckeditor/plugins/showblocks/lang/fo.js | 1 - .../ckeditor/plugins/showblocks/lang/fr-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/fr.js | 1 - .../ckeditor/plugins/showblocks/lang/gl.js | 1 - .../ckeditor/plugins/showblocks/lang/gu.js | 1 - .../ckeditor/plugins/showblocks/lang/he.js | 1 - .../ckeditor/plugins/showblocks/lang/hi.js | 1 - .../ckeditor/plugins/showblocks/lang/hr.js | 1 - .../ckeditor/plugins/showblocks/lang/hu.js | 1 - .../ckeditor/plugins/showblocks/lang/id.js | 1 - .../ckeditor/plugins/showblocks/lang/is.js | 1 - .../ckeditor/plugins/showblocks/lang/it.js | 1 - .../ckeditor/plugins/showblocks/lang/ja.js | 1 - .../ckeditor/plugins/showblocks/lang/ka.js | 1 - .../ckeditor/plugins/showblocks/lang/km.js | 1 - .../ckeditor/plugins/showblocks/lang/ko.js | 1 - .../ckeditor/plugins/showblocks/lang/ku.js | 1 - .../ckeditor/plugins/showblocks/lang/lt.js | 1 - .../ckeditor/plugins/showblocks/lang/lv.js | 1 - .../ckeditor/plugins/showblocks/lang/mk.js | 1 - .../ckeditor/plugins/showblocks/lang/mn.js | 1 - .../ckeditor/plugins/showblocks/lang/ms.js | 1 - .../ckeditor/plugins/showblocks/lang/nb.js | 1 - .../ckeditor/plugins/showblocks/lang/nl.js | 1 - .../ckeditor/plugins/showblocks/lang/no.js | 1 - .../ckeditor/plugins/showblocks/lang/pl.js | 1 - .../ckeditor/plugins/showblocks/lang/pt-br.js | 1 - .../ckeditor/plugins/showblocks/lang/pt.js | 1 - .../ckeditor/plugins/showblocks/lang/ro.js | 1 - .../ckeditor/plugins/showblocks/lang/ru.js | 1 - .../ckeditor/plugins/showblocks/lang/si.js | 1 - .../ckeditor/plugins/showblocks/lang/sk.js | 1 - .../ckeditor/plugins/showblocks/lang/sl.js | 1 - .../ckeditor/plugins/showblocks/lang/sq.js | 1 - .../plugins/showblocks/lang/sr-latn.js | 1 - .../ckeditor/plugins/showblocks/lang/sr.js | 1 - .../ckeditor/plugins/showblocks/lang/sv.js | 1 - .../ckeditor/plugins/showblocks/lang/th.js | 1 - .../ckeditor/plugins/showblocks/lang/tr.js | 1 - .../ckeditor/plugins/showblocks/lang/tt.js | 1 - .../ckeditor/plugins/showblocks/lang/ug.js | 1 - .../ckeditor/plugins/showblocks/lang/uk.js | 1 - .../ckeditor/plugins/showblocks/lang/vi.js | 1 - .../ckeditor/plugins/showblocks/lang/zh-cn.js | 1 - .../ckeditor/plugins/showblocks/lang/zh.js | 1 - .../lib/ckeditor/plugins/showblocks/plugin.js | 9 - .../ckeditor/plugins/smiley/dialogs/smiley.js | 10 - .../plugins/smiley/icons/hidpi/smiley.png | Bin 3073 -> 0 bytes .../ckeditor/plugins/smiley/icons/smiley.png | Bin 916 -> 0 bytes .../plugins/smiley/images/angel_smile.gif | Bin 1245 -> 0 bytes .../plugins/smiley/images/angel_smile.png | Bin 1172 -> 0 bytes .../plugins/smiley/images/angry_smile.gif | Bin 1219 -> 0 bytes .../plugins/smiley/images/angry_smile.png | Bin 1220 -> 0 bytes .../plugins/smiley/images/broken_heart.gif | Bin 732 -> 0 bytes .../plugins/smiley/images/broken_heart.png | Bin 1139 -> 0 bytes .../plugins/smiley/images/confused_smile.gif | Bin 1202 -> 0 bytes .../plugins/smiley/images/confused_smile.png | Bin 1101 -> 0 bytes .../plugins/smiley/images/cry_smile.gif | Bin 795 -> 0 bytes .../plugins/smiley/images/cry_smile.png | Bin 1214 -> 0 bytes .../plugins/smiley/images/devil_smile.gif | Bin 1239 -> 0 bytes .../plugins/smiley/images/devil_smile.png | Bin 1220 -> 0 bytes .../smiley/images/embaressed_smile.gif | Bin 786 -> 0 bytes .../smiley/images/embarrassed_smile.gif | Bin 786 -> 0 bytes .../smiley/images/embarrassed_smile.png | Bin 1145 -> 0 bytes .../plugins/smiley/images/envelope.gif | Bin 506 -> 0 bytes .../plugins/smiley/images/envelope.png | Bin 760 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.gif | Bin 692 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.png | Bin 999 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.gif | Bin 683 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.png | Bin 1003 -> 0 bytes .../plugins/smiley/images/lightbulb.gif | Bin 660 -> 0 bytes .../plugins/smiley/images/lightbulb.png | Bin 919 -> 0 bytes .../plugins/smiley/images/omg_smile.gif | Bin 820 -> 0 bytes .../plugins/smiley/images/omg_smile.png | Bin 1122 -> 0 bytes .../plugins/smiley/images/regular_smile.gif | Bin 1209 -> 0 bytes .../plugins/smiley/images/regular_smile.png | Bin 1084 -> 0 bytes .../plugins/smiley/images/sad_smile.gif | Bin 782 -> 0 bytes .../plugins/smiley/images/sad_smile.png | Bin 1115 -> 0 bytes .../plugins/smiley/images/shades_smile.gif | Bin 1231 -> 0 bytes .../plugins/smiley/images/shades_smile.png | Bin 1204 -> 0 bytes .../plugins/smiley/images/teeth_smile.gif | Bin 1201 -> 0 bytes .../plugins/smiley/images/teeth_smile.png | Bin 1183 -> 0 bytes .../plugins/smiley/images/thumbs_down.gif | Bin 715 -> 0 bytes .../plugins/smiley/images/thumbs_down.png | Bin 985 -> 0 bytes .../plugins/smiley/images/thumbs_up.gif | Bin 714 -> 0 bytes .../plugins/smiley/images/thumbs_up.png | Bin 959 -> 0 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 1210 -> 0 bytes .../plugins/smiley/images/tongue_smile.png | Bin 1132 -> 0 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 1210 -> 0 bytes .../images/whatchutalkingabout_smile.gif | Bin 775 -> 0 bytes .../images/whatchutalkingabout_smile.png | Bin 1039 -> 0 bytes .../plugins/smiley/images/wink_smile.gif | Bin 1202 -> 0 bytes .../plugins/smiley/images/wink_smile.png | Bin 1114 -> 0 bytes .../lib/ckeditor/plugins/smiley/lang/af.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ar.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bg.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bs.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/cs.js | 1 - .../lib/ckeditor/plugins/smiley/lang/cy.js | 1 - .../lib/ckeditor/plugins/smiley/lang/da.js | 1 - .../lib/ckeditor/plugins/smiley/lang/de.js | 1 - .../lib/ckeditor/plugins/smiley/lang/el.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-au.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en.js | 1 - .../lib/ckeditor/plugins/smiley/lang/eo.js | 1 - .../lib/ckeditor/plugins/smiley/lang/es.js | 1 - .../lib/ckeditor/plugins/smiley/lang/et.js | 1 - .../lib/ckeditor/plugins/smiley/lang/eu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fa.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fo.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/gl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/gu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/he.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/id.js | 1 - .../lib/ckeditor/plugins/smiley/lang/is.js | 1 - .../lib/ckeditor/plugins/smiley/lang/it.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ja.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ka.js | 1 - .../lib/ckeditor/plugins/smiley/lang/km.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ko.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ku.js | 1 - .../lib/ckeditor/plugins/smiley/lang/lt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/lv.js | 1 - .../lib/ckeditor/plugins/smiley/lang/mk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/mn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ms.js | 1 - .../lib/ckeditor/plugins/smiley/lang/nb.js | 1 - .../lib/ckeditor/plugins/smiley/lang/nl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/no.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ro.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ru.js | 1 - .../lib/ckeditor/plugins/smiley/lang/si.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sq.js | 1 - .../ckeditor/plugins/smiley/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sv.js | 1 - .../lib/ckeditor/plugins/smiley/lang/th.js | 1 - .../lib/ckeditor/plugins/smiley/lang/tr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/tt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ug.js | 1 - .../lib/ckeditor/plugins/smiley/lang/uk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/vi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/smiley/plugin.js | 7 - .../sourcedialog/dialogs/sourcedialog.js | 6 - .../icons/hidpi/sourcedialog-rtl.png | Bin 1968 -> 0 bytes .../sourcedialog/icons/hidpi/sourcedialog.png | Bin 1999 -> 0 bytes .../sourcedialog/icons/sourcedialog-rtl.png | Bin 762 -> 0 bytes .../sourcedialog/icons/sourcedialog.png | Bin 764 -> 0 bytes .../ckeditor/plugins/sourcedialog/lang/af.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ar.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bg.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bs.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ca.js | 1 - .../ckeditor/plugins/sourcedialog/lang/cs.js | 1 - .../ckeditor/plugins/sourcedialog/lang/cy.js | 1 - .../ckeditor/plugins/sourcedialog/lang/da.js | 1 - .../ckeditor/plugins/sourcedialog/lang/de.js | 1 - .../ckeditor/plugins/sourcedialog/lang/el.js | 1 - .../plugins/sourcedialog/lang/en-au.js | 1 - .../plugins/sourcedialog/lang/en-ca.js | 1 - .../plugins/sourcedialog/lang/en-gb.js | 1 - .../ckeditor/plugins/sourcedialog/lang/en.js | 1 - .../ckeditor/plugins/sourcedialog/lang/eo.js | 1 - .../ckeditor/plugins/sourcedialog/lang/es.js | 1 - .../ckeditor/plugins/sourcedialog/lang/et.js | 1 - .../ckeditor/plugins/sourcedialog/lang/eu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fa.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fi.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fo.js | 1 - .../plugins/sourcedialog/lang/fr-ca.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/gl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/gu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/he.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hi.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/id.js | 1 - .../ckeditor/plugins/sourcedialog/lang/is.js | 1 - .../ckeditor/plugins/sourcedialog/lang/it.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ja.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ka.js | 1 - .../ckeditor/plugins/sourcedialog/lang/km.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ko.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ku.js | 1 - .../ckeditor/plugins/sourcedialog/lang/lt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/lv.js | 1 - .../ckeditor/plugins/sourcedialog/lang/mn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ms.js | 1 - .../ckeditor/plugins/sourcedialog/lang/nb.js | 1 - .../ckeditor/plugins/sourcedialog/lang/nl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/no.js | 1 - .../ckeditor/plugins/sourcedialog/lang/pl.js | 1 - .../plugins/sourcedialog/lang/pt-br.js | 1 - .../ckeditor/plugins/sourcedialog/lang/pt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ro.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ru.js | 1 - .../ckeditor/plugins/sourcedialog/lang/si.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sk.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sq.js | 1 - .../plugins/sourcedialog/lang/sr-latn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sv.js | 1 - .../ckeditor/plugins/sourcedialog/lang/th.js | 1 - .../ckeditor/plugins/sourcedialog/lang/tr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/tt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ug.js | 1 - .../ckeditor/plugins/sourcedialog/lang/uk.js | 1 - .../ckeditor/plugins/sourcedialog/lang/vi.js | 1 - .../plugins/sourcedialog/lang/zh-cn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/zh.js | 1 - .../ckeditor/plugins/sourcedialog/plugin.js | 6 - .../dialogs/lang/_translationstatus.txt | 20 - .../plugins/specialchar/dialogs/lang/ar.js | 13 - .../plugins/specialchar/dialogs/lang/bg.js | 13 - .../plugins/specialchar/dialogs/lang/ca.js | 14 - .../plugins/specialchar/dialogs/lang/cs.js | 13 - .../plugins/specialchar/dialogs/lang/cy.js | 14 - .../plugins/specialchar/dialogs/lang/de.js | 13 - .../plugins/specialchar/dialogs/lang/el.js | 13 - .../plugins/specialchar/dialogs/lang/en-gb.js | 13 - .../plugins/specialchar/dialogs/lang/en.js | 13 - .../plugins/specialchar/dialogs/lang/eo.js | 12 - .../plugins/specialchar/dialogs/lang/es.js | 13 - .../plugins/specialchar/dialogs/lang/et.js | 13 - .../plugins/specialchar/dialogs/lang/fa.js | 12 - .../plugins/specialchar/dialogs/lang/fi.js | 13 - .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 - .../plugins/specialchar/dialogs/lang/fr.js | 11 - .../plugins/specialchar/dialogs/lang/gl.js | 13 - .../plugins/specialchar/dialogs/lang/he.js | 12 - .../plugins/specialchar/dialogs/lang/hr.js | 13 - .../plugins/specialchar/dialogs/lang/hu.js | 12 - .../plugins/specialchar/dialogs/lang/id.js | 13 - .../plugins/specialchar/dialogs/lang/it.js | 14 - .../plugins/specialchar/dialogs/lang/ja.js | 9 - .../plugins/specialchar/dialogs/lang/km.js | 13 - .../plugins/specialchar/dialogs/lang/ku.js | 13 - .../plugins/specialchar/dialogs/lang/lv.js | 13 - .../plugins/specialchar/dialogs/lang/nb.js | 11 - .../plugins/specialchar/dialogs/lang/nl.js | 13 - .../plugins/specialchar/dialogs/lang/no.js | 11 - .../plugins/specialchar/dialogs/lang/pl.js | 12 - .../plugins/specialchar/dialogs/lang/pt-br.js | 11 - .../plugins/specialchar/dialogs/lang/pt.js | 13 - .../plugins/specialchar/dialogs/lang/ru.js | 13 - .../plugins/specialchar/dialogs/lang/si.js | 13 - .../plugins/specialchar/dialogs/lang/sk.js | 13 - .../plugins/specialchar/dialogs/lang/sl.js | 12 - .../plugins/specialchar/dialogs/lang/sq.js | 13 - .../plugins/specialchar/dialogs/lang/sv.js | 11 - .../plugins/specialchar/dialogs/lang/th.js | 13 - .../plugins/specialchar/dialogs/lang/tr.js | 12 - .../plugins/specialchar/dialogs/lang/tt.js | 13 - .../plugins/specialchar/dialogs/lang/ug.js | 13 - .../plugins/specialchar/dialogs/lang/uk.js | 12 - .../plugins/specialchar/dialogs/lang/vi.js | 14 - .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 - .../plugins/specialchar/dialogs/lang/zh.js | 12 - .../specialchar/dialogs/specialchar.js | 14 - .../plugins/stylesheetparser/plugin.js | 7 - .../ckeditor/plugins/table/dialogs/table.js | 21 - .../ckeditor/plugins/tableresize/plugin.js | 13 - .../plugins/tabletools/dialogs/tableCell.js | 17 - .../plugins/templates/dialogs/templates.css | 84 - .../plugins/templates/dialogs/templates.js | 10 - .../templates/icons/hidpi/templates-rtl.png | Bin 1387 -> 0 bytes .../templates/icons/hidpi/templates.png | Bin 1387 -> 0 bytes .../plugins/templates/icons/templates-rtl.png | Bin 639 -> 0 bytes .../plugins/templates/icons/templates.png | Bin 639 -> 0 bytes .../lib/ckeditor/plugins/templates/lang/af.js | 1 - .../lib/ckeditor/plugins/templates/lang/ar.js | 1 - .../lib/ckeditor/plugins/templates/lang/bg.js | 1 - .../lib/ckeditor/plugins/templates/lang/bn.js | 1 - .../lib/ckeditor/plugins/templates/lang/bs.js | 1 - .../lib/ckeditor/plugins/templates/lang/ca.js | 1 - .../lib/ckeditor/plugins/templates/lang/cs.js | 1 - .../lib/ckeditor/plugins/templates/lang/cy.js | 1 - .../lib/ckeditor/plugins/templates/lang/da.js | 1 - .../lib/ckeditor/plugins/templates/lang/de.js | 1 - .../lib/ckeditor/plugins/templates/lang/el.js | 1 - .../ckeditor/plugins/templates/lang/en-au.js | 1 - .../ckeditor/plugins/templates/lang/en-ca.js | 1 - .../ckeditor/plugins/templates/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/templates/lang/en.js | 1 - .../lib/ckeditor/plugins/templates/lang/eo.js | 1 - .../lib/ckeditor/plugins/templates/lang/es.js | 1 - .../lib/ckeditor/plugins/templates/lang/et.js | 1 - .../lib/ckeditor/plugins/templates/lang/eu.js | 1 - .../lib/ckeditor/plugins/templates/lang/fa.js | 1 - .../lib/ckeditor/plugins/templates/lang/fi.js | 1 - .../lib/ckeditor/plugins/templates/lang/fo.js | 1 - .../ckeditor/plugins/templates/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/templates/lang/fr.js | 1 - .../lib/ckeditor/plugins/templates/lang/gl.js | 1 - .../lib/ckeditor/plugins/templates/lang/gu.js | 1 - .../lib/ckeditor/plugins/templates/lang/he.js | 1 - .../lib/ckeditor/plugins/templates/lang/hi.js | 1 - .../lib/ckeditor/plugins/templates/lang/hr.js | 1 - .../lib/ckeditor/plugins/templates/lang/hu.js | 1 - .../lib/ckeditor/plugins/templates/lang/id.js | 1 - .../lib/ckeditor/plugins/templates/lang/is.js | 1 - .../lib/ckeditor/plugins/templates/lang/it.js | 1 - .../lib/ckeditor/plugins/templates/lang/ja.js | 1 - .../lib/ckeditor/plugins/templates/lang/ka.js | 1 - .../lib/ckeditor/plugins/templates/lang/km.js | 1 - .../lib/ckeditor/plugins/templates/lang/ko.js | 1 - .../lib/ckeditor/plugins/templates/lang/ku.js | 1 - .../lib/ckeditor/plugins/templates/lang/lt.js | 1 - .../lib/ckeditor/plugins/templates/lang/lv.js | 1 - .../lib/ckeditor/plugins/templates/lang/mk.js | 1 - .../lib/ckeditor/plugins/templates/lang/mn.js | 1 - .../lib/ckeditor/plugins/templates/lang/ms.js | 1 - .../lib/ckeditor/plugins/templates/lang/nb.js | 1 - .../lib/ckeditor/plugins/templates/lang/nl.js | 1 - .../lib/ckeditor/plugins/templates/lang/no.js | 1 - .../lib/ckeditor/plugins/templates/lang/pl.js | 1 - .../ckeditor/plugins/templates/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/templates/lang/pt.js | 1 - .../lib/ckeditor/plugins/templates/lang/ro.js | 1 - .../lib/ckeditor/plugins/templates/lang/ru.js | 1 - .../lib/ckeditor/plugins/templates/lang/si.js | 1 - .../lib/ckeditor/plugins/templates/lang/sk.js | 1 - .../lib/ckeditor/plugins/templates/lang/sl.js | 1 - .../lib/ckeditor/plugins/templates/lang/sq.js | 1 - .../plugins/templates/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/templates/lang/sr.js | 1 - .../lib/ckeditor/plugins/templates/lang/sv.js | 1 - .../lib/ckeditor/plugins/templates/lang/th.js | 1 - .../lib/ckeditor/plugins/templates/lang/tr.js | 1 - .../lib/ckeditor/plugins/templates/lang/tt.js | 1 - .../lib/ckeditor/plugins/templates/lang/ug.js | 1 - .../lib/ckeditor/plugins/templates/lang/uk.js | 1 - .../lib/ckeditor/plugins/templates/lang/vi.js | 1 - .../ckeditor/plugins/templates/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/templates/lang/zh.js | 1 - .../lib/ckeditor/plugins/templates/plugin.js | 7 - .../plugins/templates/templates/default.js | 6 - .../templates/templates/images/template1.gif | Bin 375 -> 0 bytes .../templates/templates/images/template2.gif | Bin 333 -> 0 bytes .../templates/templates/images/template3.gif | Bin 422 -> 0 bytes .../plugins/uicolor/dialogs/uicolor.js | 9 - .../plugins/uicolor/icons/hidpi/uicolor.png | Bin 2287 -> 0 bytes .../plugins/uicolor/icons/uicolor.png | Bin 965 -> 0 bytes .../uicolor/lang/_translationstatus.txt | 27 - .../lib/ckeditor/plugins/uicolor/lang/ar.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/bg.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ca.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/cs.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/cy.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/da.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/de.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/el.js | 5 - .../ckeditor/plugins/uicolor/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/en.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/eo.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/es.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/et.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/eu.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fa.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fi.js | 5 - .../ckeditor/plugins/uicolor/lang/fr-ca.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/gl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/he.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/hr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/hu.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/id.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/it.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ja.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/km.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ko.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ku.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/lv.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/mk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/nb.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/nl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/no.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/pl.js | 5 - .../ckeditor/plugins/uicolor/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/pt.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ru.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/si.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sq.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sv.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/tr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/tt.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ug.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/uk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/vi.js | 5 - .../ckeditor/plugins/uicolor/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/zh.js | 5 - .../lib/ckeditor/plugins/uicolor/plugin.js | 6 - .../plugins/uicolor/yui/assets/hue_bg.png | Bin 1120 -> 0 bytes .../plugins/uicolor/yui/assets/hue_thumb.png | Bin 195 -> 0 bytes .../uicolor/yui/assets/picker_mask.png | Bin 12174 -> 0 bytes .../uicolor/yui/assets/picker_thumb.png | Bin 192 -> 0 bytes .../plugins/uicolor/yui/assets/yui.css | 7 - .../lib/ckeditor/plugins/uicolor/yui/yui.js | 225 - .../ckeditor/plugins/widget/images/handle.png | Bin 220 -> 0 bytes .../lib/ckeditor/plugins/widget/lang/ar.js | 5 - .../lib/ckeditor/plugins/widget/lang/ca.js | 5 - .../lib/ckeditor/plugins/widget/lang/cs.js | 5 - .../lib/ckeditor/plugins/widget/lang/cy.js | 5 - .../lib/ckeditor/plugins/widget/lang/de.js | 5 - .../lib/ckeditor/plugins/widget/lang/el.js | 5 - .../lib/ckeditor/plugins/widget/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/widget/lang/en.js | 5 - .../lib/ckeditor/plugins/widget/lang/eo.js | 5 - .../lib/ckeditor/plugins/widget/lang/es.js | 5 - .../lib/ckeditor/plugins/widget/lang/fa.js | 5 - .../lib/ckeditor/plugins/widget/lang/fi.js | 5 - .../lib/ckeditor/plugins/widget/lang/fr.js | 5 - .../lib/ckeditor/plugins/widget/lang/gl.js | 5 - .../lib/ckeditor/plugins/widget/lang/he.js | 5 - .../lib/ckeditor/plugins/widget/lang/hr.js | 5 - .../lib/ckeditor/plugins/widget/lang/hu.js | 5 - .../lib/ckeditor/plugins/widget/lang/it.js | 5 - .../lib/ckeditor/plugins/widget/lang/ja.js | 5 - .../lib/ckeditor/plugins/widget/lang/km.js | 5 - .../lib/ckeditor/plugins/widget/lang/ko.js | 5 - .../lib/ckeditor/plugins/widget/lang/nb.js | 5 - .../lib/ckeditor/plugins/widget/lang/nl.js | 5 - .../lib/ckeditor/plugins/widget/lang/no.js | 5 - .../lib/ckeditor/plugins/widget/lang/pl.js | 5 - .../lib/ckeditor/plugins/widget/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/widget/lang/pt.js | 5 - .../lib/ckeditor/plugins/widget/lang/ru.js | 5 - .../lib/ckeditor/plugins/widget/lang/sk.js | 5 - .../lib/ckeditor/plugins/widget/lang/sl.js | 5 - .../lib/ckeditor/plugins/widget/lang/sv.js | 5 - .../lib/ckeditor/plugins/widget/lang/tr.js | 5 - .../lib/ckeditor/plugins/widget/lang/tt.js | 5 - .../lib/ckeditor/plugins/widget/lang/uk.js | 5 - .../lib/ckeditor/plugins/widget/lang/vi.js | 5 - .../lib/ckeditor/plugins/widget/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/widget/lang/zh.js | 5 - .../www/lib/ckeditor/plugins/widget/plugin.js | 58 - .../www/lib/ckeditor/plugins/wsc/LICENSE.md | 28 - .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 - .../plugins/wsc/dialogs/tmpFrameset.html | 52 - .../lib/ckeditor/plugins/wsc/dialogs/wsc.css | 82 - .../lib/ckeditor/plugins/wsc/dialogs/wsc.js | 74 - .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 - .../www/lib/ckeditor/plugins/xml/plugin.js | 7 - .../assets/www/lib/ckeditor/samples/ajax.html | 82 - .../assets/www/lib/ckeditor/samples/api.html | 207 - .../www/lib/ckeditor/samples/appendto.html | 56 - .../samples/assets/inlineall/logo.png | Bin 4283 -> 0 bytes .../assets/outputxhtml/outputxhtml.css | 204 - .../ckeditor/samples/assets/posteddata.php | 59 - .../lib/ckeditor/samples/assets/sample.jpg | Bin 14449 -> 0 bytes .../samples/assets/uilanguages/languages.js | 7 - .../lib/ckeditor/samples/datafiltering.html | 401 - .../www/lib/ckeditor/samples/divreplace.html | 141 - .../www/lib/ckeditor/samples/index.html | 170 - .../www/lib/ckeditor/samples/inlineall.html | 311 - .../lib/ckeditor/samples/inlinebycode.html | 121 - .../lib/ckeditor/samples/inlinetextarea.html | 110 - .../www/lib/ckeditor/samples/jquery.html | 100 - .../samples/plugins/autogrow/autogrow.html | 99 - .../samples/plugins/bbcode/bbcode.html | 111 - .../plugins/codesnippet/codesnippet.html | 233 - .../samples/plugins/devtools/devtools.html | 83 - .../plugins/dialog/assets/my_dialog.js | 48 - .../samples/plugins/dialog/dialog.html | 187 - .../samples/plugins/divarea/divarea.html | 61 - .../samples/plugins/docprops/docprops.html | 78 - .../samples/plugins/enterkey/enterkey.html | 103 - .../assets/outputforflash/outputforflash.fla | Bin 85504 -> 0 bytes .../assets/outputforflash/outputforflash.swf | Bin 15571 -> 0 bytes .../assets/outputforflash/swfobject.js | 18 - .../plugins/htmlwriter/outputforflash.html | 280 - .../plugins/htmlwriter/outputhtml.html | 221 - .../samples/plugins/image2/assets/image1.jpg | Bin 33171 -> 0 bytes .../samples/plugins/image2/assets/image2.jpg | Bin 26238 -> 0 bytes .../samples/plugins/image2/image2.html | 65 - .../samples/plugins/magicline/magicline.html | 206 - .../samples/plugins/mathjax/mathjax.html | 82 - .../plugins/placeholder/placeholder.html | 72 - .../plugins/sharedspace/sharedspace.html | 119 - .../plugins/sourcedialog/sourcedialog.html | 118 - .../stylesheetparser/assets/sample.css | 70 - .../stylesheetparser/stylesheetparser.html | 82 - .../plugins/tableresize/tableresize.html | 104 - .../samples/plugins/toolbar/toolbar.html | 232 - .../samples/plugins/uicolor/uicolor.html | 103 - .../samples/plugins/wysiwygarea/fullpage.html | 77 - .../www/lib/ckeditor/samples/readonly.html | 73 - .../lib/ckeditor/samples/replacebyclass.html | 57 - .../lib/ckeditor/samples/replacebycode.html | 56 - .../www/lib/ckeditor/samples/sample.css | 365 - .../assets/www/lib/ckeditor/samples/sample.js | 50 - .../ckeditor/samples/sample_posteddata.php | 16 - .../www/lib/ckeditor/samples/tabindex.html | 75 - .../www/lib/ckeditor/samples/uicolor.html | 69 - .../www/lib/ckeditor/samples/uilanguages.html | 119 - .../www/lib/ckeditor/samples/xhtmlstyle.html | 231 - .../www/lib/ckeditor/skins/kama/dialog.css | 5 - .../www/lib/ckeditor/skins/kama/dialog_ie.css | 5 - .../lib/ckeditor/skins/kama/dialog_ie7.css | 5 - .../lib/ckeditor/skins/kama/dialog_ie8.css | 5 - .../ckeditor/skins/kama/dialog_iequirks.css | 5 - .../www/lib/ckeditor/skins/kama/editor.css | 5 - .../www/lib/ckeditor/skins/kama/editor_ie.css | 5 - .../lib/ckeditor/skins/kama/editor_ie7.css | 5 - .../lib/ckeditor/skins/kama/editor_ie8.css | 5 - .../ckeditor/skins/kama/editor_iequirks.css | 5 - .../www/lib/ckeditor/skins/kama/icons.png | Bin 9633 -> 0 bytes .../lib/ckeditor/skins/kama/icons_hidpi.png | Bin 15510 -> 0 bytes .../skins/kama/images/dialog_sides.gif | Bin 47 -> 0 bytes .../skins/kama/images/dialog_sides.png | Bin 125 -> 0 bytes .../skins/kama/images/dialog_sides_rtl.png | Bin 128 -> 0 bytes .../lib/ckeditor/skins/kama/images/mini.gif | Bin 181 -> 0 bytes .../ckeditor/skins/kama/images/sprites.png | Bin 6117 -> 0 bytes .../skins/kama/images/sprites_ie6.png | Bin 2658 -> 0 bytes .../skins/kama/images/toolbar_start.gif | Bin 102 -> 0 bytes .../www/lib/ckeditor/skins/kama/readme.md | 40 - .../www/lib/ckeditor/skins/kama/skin.js | 8 - .../www/lib/ckeditor/skins/moono/dialog.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie7.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie8.css | 5 - .../ckeditor/skins/moono/dialog_iequirks.css | 5 - .../www/lib/ckeditor/skins/moono/editor.css | 5 - .../lib/ckeditor/skins/moono/editor_gecko.css | 5 - .../lib/ckeditor/skins/moono/editor_ie.css | 5 - .../lib/ckeditor/skins/moono/editor_ie7.css | 5 - .../lib/ckeditor/skins/moono/editor_ie8.css | 5 - .../ckeditor/skins/moono/editor_iequirks.css | 5 - .../www/lib/ckeditor/skins/moono/icons.png | Bin 18271 -> 0 bytes .../lib/ckeditor/skins/moono/icons_hidpi.png | Bin 62881 -> 0 bytes .../lib/ckeditor/skins/moono/images/arrow.png | Bin 191 -> 0 bytes .../lib/ckeditor/skins/moono/images/close.png | Bin 468 -> 0 bytes .../skins/moono/images/hidpi/close.png | Bin 1271 -> 0 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 1329 -> 0 bytes .../skins/moono/images/hidpi/lock.png | Bin 1299 -> 0 bytes .../skins/moono/images/hidpi/refresh.png | Bin 1842 -> 0 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 349 -> 0 bytes .../lib/ckeditor/skins/moono/images/lock.png | Bin 475 -> 0 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 422 -> 0 bytes .../www/lib/ckeditor/skins/moono/readme.md | 51 - .../android/assets/www/lib/ckeditor/styles.js | 111 - .../android/assets/www/lib/d3/.bower.json | 35 - .../android/assets/www/lib/d3/.spmignore | 4 - .../android/assets/www/lib/d3/CONTRIBUTING.md | 25 - platforms/android/assets/www/lib/d3/LICENSE | 26 - platforms/android/assets/www/lib/d3/README.md | 9 - .../android/assets/www/lib/d3/bower.json | 24 - .../android/assets/www/lib/d3/composer.json | 19 - platforms/android/assets/www/lib/d3/d3.js | 9233 ----- platforms/android/assets/www/lib/d3/d3.min.js | 5 - .../assets/www/lib/es5-shim/.bower.json | 44 - .../android/assets/www/lib/es5-shim/CHANGES | 124 - .../assets/www/lib/es5-shim/CONTRIBUTORS.md | 27 - .../android/assets/www/lib/es5-shim/LICENSE | 22 - .../android/assets/www/lib/es5-shim/README.md | 168 - .../assets/www/lib/es5-shim/bower.json | 35 - .../assets/www/lib/es5-shim/component.json | 20 - .../assets/www/lib/es5-shim/es5-sham.js | 466 - .../assets/www/lib/es5-shim/es5-sham.map | 1 - .../assets/www/lib/es5-shim/es5-sham.min.js | 7 - .../assets/www/lib/es5-shim/es5-shim.js | 1434 - .../assets/www/lib/es5-shim/es5-shim.map | 1 - .../assets/www/lib/es5-shim/es5-shim.min.js | 7 - .../assets/www/lib/es5-shim/package.json | 60 - .../assets/www/lib/es5-shim/shims.json | 7 - .../www/lib/highcharts-ng/highcharts-ng.js | 498 - .../lib/highcharts-ng/highcharts-ng.min.js | 8 - .../adapters/standalone-framework.js | 1 - .../adapters/standalone-framework.src.js | 1 - .../www/lib/highcharts/highcharts-3d.js | 48 - .../www/lib/highcharts/highcharts-3d.src.js | 1712 - .../www/lib/highcharts/highcharts-more.js | 56 - .../www/lib/highcharts/highcharts-more.src.js | 2687 -- .../assets/www/lib/highcharts/highcharts.js | 337 - .../www/lib/highcharts/highcharts.src.js | 19265 --------- .../www/lib/highcharts/modules/boost.js | 12 - .../www/lib/highcharts/modules/boost.src.js | 595 - .../www/lib/highcharts/modules/broken-axis.js | 7 - .../lib/highcharts/modules/broken-axis.src.js | 330 - .../lib/highcharts/modules/canvas-tools.js | 133 - .../highcharts/modules/canvas-tools.src.js | 3115 -- .../assets/www/lib/highcharts/modules/data.js | 26 - .../www/lib/highcharts/modules/data.src.js | 959 - .../www/lib/highcharts/modules/drilldown.js | 17 - .../lib/highcharts/modules/drilldown.src.js | 717 - .../www/lib/highcharts/modules/exporting.js | 24 - .../lib/highcharts/modules/exporting.src.js | 780 - .../www/lib/highcharts/modules/funnel.js | 13 - .../www/lib/highcharts/modules/funnel.src.js | 322 - .../www/lib/highcharts/modules/heatmap.js | 23 - .../www/lib/highcharts/modules/heatmap.src.js | 711 - .../highcharts/modules/no-data-to-display.js | 12 - .../modules/no-data-to-display.src.js | 143 - .../highcharts/modules/offline-exporting.js | 15 - .../modules/offline-exporting.src.js | 301 - .../www/lib/highcharts/modules/solid-gauge.js | 14 - .../lib/highcharts/modules/solid-gauge.src.js | 273 - .../www/lib/highcharts/modules/treemap.js | 30 - .../www/lib/highcharts/modules/treemap.src.js | 868 - .../www/lib/highcharts/themes/dark-blue.js | 254 - .../www/lib/highcharts/themes/dark-green.js | 255 - .../www/lib/highcharts/themes/dark-unica.js | 213 - .../assets/www/lib/highcharts/themes/gray.js | 257 - .../www/lib/highcharts/themes/grid-light.js | 74 - .../assets/www/lib/highcharts/themes/grid.js | 103 - .../www/lib/highcharts/themes/sand-signika.js | 104 - .../assets/www/lib/highcharts/themes/skies.js | 89 - .../android/assets/www/lib/jquery/.bower.json | 37 - .../assets/www/lib/jquery/MIT-LICENSE.txt | 21 - .../android/assets/www/lib/jquery/bower.json | 27 - .../android/assets/www/lib/jquery/src/ajax.js | 806 - .../assets/www/lib/jquery/src/ajax/jsonp.js | 89 - .../assets/www/lib/jquery/src/ajax/load.js | 75 - .../www/lib/jquery/src/ajax/parseJSON.js | 13 - .../www/lib/jquery/src/ajax/parseXML.js | 28 - .../assets/www/lib/jquery/src/ajax/script.js | 64 - .../www/lib/jquery/src/ajax/var/nonce.js | 5 - .../www/lib/jquery/src/ajax/var/rquery.js | 3 - .../assets/www/lib/jquery/src/ajax/xhr.js | 135 - .../assets/www/lib/jquery/src/attributes.js | 11 - .../www/lib/jquery/src/attributes/attr.js | 143 - .../www/lib/jquery/src/attributes/classes.js | 158 - .../www/lib/jquery/src/attributes/prop.js | 96 - .../www/lib/jquery/src/attributes/support.js | 35 - .../www/lib/jquery/src/attributes/val.js | 163 - .../assets/www/lib/jquery/src/callbacks.js | 205 - .../android/assets/www/lib/jquery/src/core.js | 498 - .../assets/www/lib/jquery/src/core/access.js | 60 - .../assets/www/lib/jquery/src/core/init.js | 123 - .../www/lib/jquery/src/core/parseHTML.js | 39 - .../assets/www/lib/jquery/src/core/ready.js | 97 - .../www/lib/jquery/src/core/var/rsingleTag.js | 4 - .../android/assets/www/lib/jquery/src/css.js | 451 - .../www/lib/jquery/src/css/addGetHookIf.js | 24 - .../assets/www/lib/jquery/src/css/curCSS.js | 57 - .../www/lib/jquery/src/css/defaultDisplay.js | 70 - .../jquery/src/css/hiddenVisibleSelectors.js | 15 - .../assets/www/lib/jquery/src/css/support.js | 91 - .../assets/www/lib/jquery/src/css/swap.js | 28 - .../www/lib/jquery/src/css/var/cssExpand.js | 3 - .../www/lib/jquery/src/css/var/getStyles.js | 5 - .../www/lib/jquery/src/css/var/isHidden.js | 13 - .../www/lib/jquery/src/css/var/rmargin.js | 3 - .../www/lib/jquery/src/css/var/rnumnonpx.js | 5 - .../android/assets/www/lib/jquery/src/data.js | 179 - .../assets/www/lib/jquery/src/data/Data.js | 181 - .../assets/www/lib/jquery/src/data/accepts.js | 20 - .../www/lib/jquery/src/data/var/data_priv.js | 5 - .../www/lib/jquery/src/data/var/data_user.js | 5 - .../assets/www/lib/jquery/src/deferred.js | 149 - .../assets/www/lib/jquery/src/deprecated.js | 13 - .../assets/www/lib/jquery/src/dimensions.js | 50 - .../assets/www/lib/jquery/src/effects.js | 649 - .../www/lib/jquery/src/effects/Tween.js | 114 - .../jquery/src/effects/animatedSelector.js | 13 - .../assets/www/lib/jquery/src/event.js | 868 - .../assets/www/lib/jquery/src/event/alias.js | 39 - .../www/lib/jquery/src/event/support.js | 9 - .../assets/www/lib/jquery/src/exports/amd.js | 24 - .../www/lib/jquery/src/exports/global.js | 32 - .../assets/www/lib/jquery/src/intro.js | 44 - .../assets/www/lib/jquery/src/jquery.js | 36 - .../assets/www/lib/jquery/src/manipulation.js | 582 - .../lib/jquery/src/manipulation/_evalUrl.js | 18 - .../lib/jquery/src/manipulation/support.js | 31 - .../src/manipulation/var/rcheckableType.js | 3 - .../assets/www/lib/jquery/src/offset.js | 204 - .../assets/www/lib/jquery/src/outro.js | 1 - .../assets/www/lib/jquery/src/queue.js | 142 - .../assets/www/lib/jquery/src/queue/delay.js | 22 - .../www/lib/jquery/src/selector-native.js | 172 - .../www/lib/jquery/src/selector-sizzle.js | 14 - .../assets/www/lib/jquery/src/selector.js | 1 - .../assets/www/lib/jquery/src/serialize.js | 111 - .../assets/www/lib/jquery/src/traversing.js | 200 - .../lib/jquery/src/traversing/findFilter.js | 100 - .../src/traversing/var/rneedsContext.js | 6 - .../assets/www/lib/jquery/src/var/arr.js | 3 - .../www/lib/jquery/src/var/class2type.js | 4 - .../assets/www/lib/jquery/src/var/concat.js | 5 - .../assets/www/lib/jquery/src/var/hasOwn.js | 5 - .../assets/www/lib/jquery/src/var/indexOf.js | 5 - .../assets/www/lib/jquery/src/var/pnum.js | 3 - .../assets/www/lib/jquery/src/var/push.js | 5 - .../www/lib/jquery/src/var/rnotwhite.js | 3 - .../assets/www/lib/jquery/src/var/slice.js | 5 - .../www/lib/jquery/src/var/strundefined.js | 3 - .../assets/www/lib/jquery/src/var/support.js | 4 - .../assets/www/lib/jquery/src/var/toString.js | 5 - .../android/assets/www/lib/jquery/src/wrap.js | 78 - .../android/assets/www/lib/json3/.bower.json | 47 - .../android/assets/www/lib/json3/CHANGELOG.md | 44 - .../assets/www/lib/json3/CONTRIBUTING.md | 3 - .../android/assets/www/lib/json3/LICENSE | 20 - .../android/assets/www/lib/json3/README.md | 152 - .../android/assets/www/lib/json3/bower.json | 38 - .../android/assets/www/lib/json3/lib/json3.js | 902 - .../assets/www/lib/json3/lib/json3.min.js | 17 - .../android/assets/www/lib/lodash/.bower.json | 33 - .../android/assets/www/lib/lodash/LICENSE.txt | 22 - .../android/assets/www/lib/lodash/bower.json | 23 - .../android/assets/www/lib/moment/moment.js | 3606 -- .../cordova-plugin-device/www/device.js | 86 - .../cordova-plugin-whitelist/whitelist.js | 30 - .../plugins/phonegap-plugin-push/www/push.js | 252 - platforms/android/assets/www/robots.txt | 3 - platforms/android/assets/www/scripts/app.js | 249 - .../assets/www/scripts/controllers/about.js | 17 - .../assets/www/scripts/controllers/admin.js | 13 - .../www/scripts/controllers/awareness.js | 50 - .../assets/www/scripts/controllers/backup | 1 - .../assets/www/scripts/controllers/charts.js | 192 - .../www/scripts/controllers/checkins.js | 16 - .../assets/www/scripts/controllers/cms.js | 70 - .../www/scripts/controllers/daily_check_in.js | 500 - .../www/scripts/controllers/daily_review.js | 150 - .../controllers/daily_review_conclusion.js | 14 - .../controllers/daily_review_summary.js | 13 - .../scripts/controllers/dailyreviewtester.js | 17 - .../assets/www/scripts/controllers/ews.js | 38 - .../assets/www/scripts/controllers/ews2.js | 41 - .../assets/www/scripts/controllers/exit.js | 15 - .../www/scripts/controllers/fetch_content.js | 72 - .../www/scripts/controllers/foundations.js | 26 - .../assets/www/scripts/controllers/home.js | 121 - .../www/scripts/controllers/instructions.js | 29 - .../www/scripts/controllers/intervention.js | 22 - .../www/scripts/controllers/lesson_player.js | 79 - .../scripts/controllers/load_interventions.js | 26 - .../controllers/localstoragebackuprestore.js | 43 - .../assets/www/scripts/controllers/login.js | 17 - .../assets/www/scripts/controllers/main.js | 32 - .../www/scripts/controllers/medications.js | 16 - .../www/scripts/controllers/myskills.js | 55 - .../scripts/controllers/personalsnapshot.js | 29 - .../www/scripts/controllers/resources.js | 17 - .../assets/www/scripts/controllers/risks.js | 17 - .../www/scripts/controllers/schedule.js | 16 - .../www/scripts/controllers/settings.js | 269 - .../assets/www/scripts/controllers/setup.js | 17 - .../assets/www/scripts/controllers/skills.js | 24 - .../scripts/controllers/skills_awareness.js | 24 - .../www/scripts/controllers/skills_coping.js | 19 - .../controllers/skills_fundamentals.js | 22 - .../scripts/controllers/skills_lifestyle.js | 22 - .../www/scripts/controllers/skills_team.js | 34 - .../www/scripts/controllers/summary_player.js | 66 - .../assets/www/scripts/controllers/team.js | 16 - .../www/scripts/controllers/usereditor.js | 17 - .../scripts/controllers/weekly_check_in.js | 136 - .../www/scripts/controllers/wellness.js | 64 - .../scripts/questionGroups/questiongroup.js | 204 - .../scripts/services/clinicalstatusupdate.js | 147 - .../www/scripts/services/dailyreview.js | 548 - .../assets/www/scripts/services/guid.js | 28 - .../assets/www/scripts/services/pound.js | 189 - .../assets/www/scripts/services/questions.js | 83 - .../www/scripts/services/static_content.js | 40 - .../assets/www/scripts/services/user_data.js | 32 - .../www/scripts/services/user_details.js | 49 - .../www/scripts/vendor/cordova.android.js | 1749 - .../assets/www/scripts/vendor/cordova.js | 1938 - .../assets/www/styles/bootstrap.min.css | 7 - platforms/android/assets/www/styles/main.css | 134 - platforms/android/assets/www/views/about.html | 1 - platforms/android/assets/www/views/admin.html | 10 - .../android/assets/www/views/charts.html | 22 - .../android/assets/www/views/checkins.html | 5 - platforms/android/assets/www/views/cms.html | 32 - .../android/assets/www/views/cms/table.html | 49 - .../assets/www/views/daily_check_in.html | 95 - .../assets/www/views/daily_review.html | 101 - .../www/views/daily_review_conclusion.html | 20 - .../www/views/daily_review_summary.html | 1 - .../assets/www/views/dailyreviewtester.html | 15 - platforms/android/assets/www/views/ews.html | 18 - platforms/android/assets/www/views/ews2.html | 20 - platforms/android/assets/www/views/exit.html | 1 - .../android/assets/www/views/foundations.html | 3 - platforms/android/assets/www/views/home.html | 47 - .../assets/www/views/instructions.html | 3 - .../assets/www/views/intervention.html | 3 - .../assets/www/views/lesson_player.html | 18 - .../assets/www/views/load_interventions.html | 6 - .../www/views/localstoragebackuprestore.html | 29 - platforms/android/assets/www/views/login.html | 1 - platforms/android/assets/www/views/main.html | 5 - .../android/assets/www/views/medications.html | 9 - .../android/assets/www/views/myskills.html | 31 - .../assets/www/views/partials/awareness.html | 26 - .../assets/www/views/partials/navbar.html | 10 - .../assets/www/views/partials/resources.html | 5 - .../assets/www/views/partials/risks.html | 9 - .../assets/www/views/personalsnapshot.html | 12 - .../assets/www/views/questionGroups/html.html | 1 - .../www/views/questionGroups/multiple.html | 10 - .../assets/www/views/questionGroups/nav.html | 20 - .../views/questionGroups/question_group.html | 35 - .../www/views/questionGroups/single.html | 14 - .../www/views/questionGroups/title.html | 1 - .../android/assets/www/views/schedule.html | 10 - .../android/assets/www/views/settings.html | 24 - .../android/assets/www/views/skills.html | 4 - .../assets/www/views/skills_awareness.html | 10 - .../assets/www/views/skills_coping.html | 4 - .../assets/www/views/skills_fundamentals.html | 7 - .../assets/www/views/skills_lifestyle.html | 7 - .../android/assets/www/views/skills_team.html | 7 - .../assets/www/views/summary_player.html | 10 - platforms/android/assets/www/views/team.html | 16 - .../android/assets/www/views/usereditor.html | 160 - .../assets/www/views/weekly_check_in.html | 3 - .../android/assets/www/views/wellness.html | 19 - platforms/android/build.gradle | 307 - .../android/nativeapiprovider.js | 36 - .../android/promptbasednativeapi.js | 35 - .../platform_www/cordova-js-src/exec.js | 283 - .../platform_www/cordova-js-src/platform.js | 125 - .../cordova-js-src/plugin/android/app.js | 108 - platforms/android/platform_www/cordova.js | 2167 - .../android/platform_www/cordova_plugins.js | 31 - .../cordova-plugin-device/www/device.js | 86 - .../cordova-plugin-whitelist/whitelist.js | 30 - .../plugins/phonegap-plugin-push/www/push.js | 252 - platforms/android/project.properties | 16 - .../android/res/drawable-land-hdpi/screen.png | Bin 218302 -> 0 bytes .../android/res/drawable-land-ldpi/screen.png | Bin 42616 -> 0 bytes .../android/res/drawable-land-mdpi/screen.png | Bin 92347 -> 0 bytes .../res/drawable-land-xhdpi/screen.png | Bin 489604 -> 0 bytes platforms/android/res/drawable-mdpi/icon.png | Bin 54642 -> 0 bytes .../android/res/drawable-port-hdpi/screen.png | Bin 222148 -> 0 bytes .../android/res/drawable-port-ldpi/screen.png | Bin 42034 -> 0 bytes .../android/res/drawable-port-mdpi/screen.png | Bin 90555 -> 0 bytes .../res/drawable-port-xhdpi/screen.png | Bin 504508 -> 0 bytes platforms/android/res/values/strings.xml | 7 - platforms/android/res/xml/config.xml | 30 - platforms/android/settings.gradle | 3 - .../push/BackgroundActionButtonHandler.java | 32 - .../adobe/phonegap/push/GCMIntentService.java | 634 - .../adobe/phonegap/push/PermissionUtils.java | 55 - .../adobe/phonegap/push/PushConstants.java | 57 - .../phonegap/push/PushHandlerActivity.java | 84 - .../push/PushInstanceIDListenerService.java | 27 - .../com/adobe/phonegap/push/PushPlugin.java | 354 - .../push/RegistrationIntentService.java | 42 - .../cbits/livewell/MainActivity.java | 34 - platforms/browser/browser.json | 49 - platforms/browser/config.xml | 22 - platforms/browser/platform_www/cordova.js | 1551 - .../browser/platform_www/cordova_plugins.js | 25 - .../src/browser/DeviceProxy.js | 84 - .../cordova-plugin-device/www/device.js | 85 - platforms/browser/www/404.html | 157 - platforms/browser/www/config.json | 1 - platforms/browser/www/config.xml | 22 - platforms/browser/www/cordova.js | 1551 - platforms/browser/www/cordova_plugins.js | 25 - platforms/browser/www/favicon.ico | Bin 4286 -> 0 bytes platforms/browser/www/icon.png | Bin 54642 -> 0 bytes platforms/browser/www/images/logo.png | Bin 15656 -> 0 bytes platforms/browser/www/images/yeoman.png | Bin 13501 -> 0 bytes platforms/browser/www/index.html | 144 - .../www/lib/PurpleRobotClient/.bower.json | 32 - .../www/lib/PurpleRobotClient/.gitignore | 2 - .../www/lib/PurpleRobotClient/bower.json | 24 - .../www/lib/PurpleRobotClient/purple-robot.js | 1039 - .../lib/PurpleRobotClient/purple-robot.min.js | 15 - .../www/lib/angular-animate/.bower.json | 18 - .../browser/www/lib/angular-animate/README.md | 54 - .../lib/angular-animate/angular-animate.js | 1616 - .../angular-animate/angular-animate.min.js | 27 - .../angular-animate.min.js.map | 8 - .../www/lib/angular-animate/bower.json | 8 - .../www/lib/angular-cookies/.bower.json | 18 - .../browser/www/lib/angular-cookies/README.md | 54 - .../lib/angular-cookies/angular-cookies.js | 196 - .../angular-cookies/angular-cookies.min.js | 8 - .../angular-cookies.min.js.map | 8 - .../www/lib/angular-cookies/bower.json | 8 - .../browser/www/lib/angular-mocks/.bower.json | 18 - .../browser/www/lib/angular-mocks/README.md | 42 - .../www/lib/angular-mocks/angular-mocks.js | 2163 - .../browser/www/lib/angular-mocks/bower.json | 8 - .../www/lib/angular-moment/angular-moment.js | 727 - .../www/lib/angular-resource/.bower.json | 18 - .../www/lib/angular-resource/README.md | 54 - .../lib/angular-resource/angular-resource.js | 610 - .../angular-resource/angular-resource.min.js | 13 - .../angular-resource.min.js.map | 8 - .../www/lib/angular-resource/bower.json | 8 - .../browser/www/lib/angular-route/.bower.json | 18 - .../browser/www/lib/angular-route/README.md | 54 - .../www/lib/angular-route/angular-route.js | 927 - .../lib/angular-route/angular-route.min.js | 14 - .../angular-route/angular-route.min.js.map | 8 - .../browser/www/lib/angular-route/bower.json | 8 - .../www/lib/angular-sanitize/.bower.json | 18 - .../www/lib/angular-sanitize/README.md | 54 - .../lib/angular-sanitize/angular-sanitize.js | 624 - .../angular-sanitize/angular-sanitize.min.js | 14 - .../angular-sanitize.min.js.map | 8 - .../www/lib/angular-sanitize/bower.json | 8 - .../www/lib/angular-scenario/.bower.json | 18 - .../www/lib/angular-scenario/README.md | 42 - .../lib/angular-scenario/angular-scenario.js | 33464 ---------------- .../www/lib/angular-scenario/bower.json | 8 - .../jstd-scenario-adapter-config.js | 6 - .../angular-scenario/jstd-scenario-adapter.js | 185 - .../browser/www/lib/angular-touch/.bower.json | 18 - .../browser/www/lib/angular-touch/README.md | 54 - .../www/lib/angular-touch/angular-touch.js | 575 - .../lib/angular-touch/angular-touch.min.js | 13 - .../angular-touch/angular-touch.min.js.map | 8 - .../browser/www/lib/angular-touch/bower.json | 8 - platforms/browser/www/lib/angular/.bower.json | 16 - platforms/browser/www/lib/angular/README.md | 48 - .../browser/www/lib/angular/angular-csp.css | 18 - platforms/browser/www/lib/angular/angular.js | 21464 ---------- .../browser/www/lib/angular/angular.min.js | 210 - .../www/lib/angular/angular.min.js.gzip | Bin 39258 -> 0 bytes .../www/lib/angular/angular.min.js.map | 8 - platforms/browser/www/lib/angular/bower.json | 7 - .../browser/www/lib/bootstrap/.bower.json | 47 - .../browser/www/lib/bootstrap/Gruntfile.js | 480 - platforms/browser/www/lib/bootstrap/LICENSE | 21 - platforms/browser/www/lib/bootstrap/README.md | 127 - .../browser/www/lib/bootstrap/bower.json | 38 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes .../grunt/bs-glyphicons-data-generator.js | 41 - .../lib/bootstrap/grunt/bs-lessdoc-parser.js | 236 - .../bootstrap/grunt/bs-raw-files-generator.js | 46 - .../lib/bootstrap/grunt/sauce_browsers.yml | 82 - .../browser/www/lib/bootstrap/js/affix.js | 142 - .../browser/www/lib/bootstrap/js/alert.js | 92 - .../browser/www/lib/bootstrap/js/button.js | 110 - .../browser/www/lib/bootstrap/js/carousel.js | 223 - .../browser/www/lib/bootstrap/js/collapse.js | 170 - .../browser/www/lib/bootstrap/js/dropdown.js | 151 - .../browser/www/lib/bootstrap/js/modal.js | 280 - .../browser/www/lib/bootstrap/js/popover.js | 113 - .../browser/www/lib/bootstrap/js/scrollspy.js | 170 - platforms/browser/www/lib/bootstrap/js/tab.js | 128 - .../browser/www/lib/bootstrap/js/tooltip.js | 457 - .../www/lib/bootstrap/js/transition.js | 59 - .../www/lib/bootstrap/less/alerts.less | 68 - .../www/lib/bootstrap/less/badges.less | 55 - .../www/lib/bootstrap/less/bootstrap.less | 50 - .../www/lib/bootstrap/less/breadcrumbs.less | 26 - .../www/lib/bootstrap/less/button-groups.less | 240 - .../www/lib/bootstrap/less/buttons.less | 157 - .../www/lib/bootstrap/less/carousel.less | 243 - .../browser/www/lib/bootstrap/less/close.less | 33 - .../browser/www/lib/bootstrap/less/code.less | 68 - .../bootstrap/less/component-animations.less | 31 - .../www/lib/bootstrap/less/dropdowns.less | 215 - .../browser/www/lib/bootstrap/less/forms.less | 540 - .../www/lib/bootstrap/less/glyphicons.less | 233 - .../browser/www/lib/bootstrap/less/grid.less | 84 - .../www/lib/bootstrap/less/input-groups.less | 166 - .../www/lib/bootstrap/less/jumbotron.less | 48 - .../www/lib/bootstrap/less/labels.less | 64 - .../www/lib/bootstrap/less/list-group.less | 131 - .../browser/www/lib/bootstrap/less/media.less | 56 - .../www/lib/bootstrap/less/mixins.less | 39 - .../www/lib/bootstrap/less/mixins/alerts.less | 14 - .../less/mixins/background-variant.less | 8 - .../bootstrap/less/mixins/border-radius.less | 18 - .../lib/bootstrap/less/mixins/buttons.less | 50 - .../bootstrap/less/mixins/center-block.less | 7 - .../lib/bootstrap/less/mixins/clearfix.less | 22 - .../www/lib/bootstrap/less/mixins/forms.less | 81 - .../lib/bootstrap/less/mixins/gradients.less | 59 - .../bootstrap/less/mixins/grid-framework.less | 91 - .../www/lib/bootstrap/less/mixins/grid.less | 122 - .../lib/bootstrap/less/mixins/hide-text.less | 21 - .../www/lib/bootstrap/less/mixins/image.less | 34 - .../www/lib/bootstrap/less/mixins/labels.less | 12 - .../lib/bootstrap/less/mixins/list-group.less | 29 - .../bootstrap/less/mixins/nav-divider.less | 10 - .../less/mixins/nav-vertical-align.less | 9 - .../lib/bootstrap/less/mixins/opacity.less | 8 - .../lib/bootstrap/less/mixins/pagination.less | 23 - .../www/lib/bootstrap/less/mixins/panels.less | 24 - .../bootstrap/less/mixins/progress-bar.less | 10 - .../bootstrap/less/mixins/reset-filter.less | 8 - .../www/lib/bootstrap/less/mixins/resize.less | 6 - .../less/mixins/responsive-visibility.less | 15 - .../www/lib/bootstrap/less/mixins/size.less | 10 - .../lib/bootstrap/less/mixins/tab-focus.less | 9 - .../lib/bootstrap/less/mixins/table-row.less | 28 - .../bootstrap/less/mixins/text-emphasis.less | 8 - .../bootstrap/less/mixins/text-overflow.less | 8 - .../less/mixins/vendor-prefixes.less | 224 - .../www/lib/bootstrap/less/modals.less | 150 - .../www/lib/bootstrap/less/navbar.less | 655 - .../browser/www/lib/bootstrap/less/navs.less | 242 - .../www/lib/bootstrap/less/normalize.less | 425 - .../browser/www/lib/bootstrap/less/pager.less | 55 - .../www/lib/bootstrap/less/pagination.less | 88 - .../www/lib/bootstrap/less/panels.less | 243 - .../www/lib/bootstrap/less/popovers.less | 133 - .../browser/www/lib/bootstrap/less/print.less | 101 - .../www/lib/bootstrap/less/progress-bars.less | 105 - .../lib/bootstrap/less/responsive-embed.less | 34 - .../bootstrap/less/responsive-utilities.less | 194 - .../www/lib/bootstrap/less/scaffolding.less | 150 - .../www/lib/bootstrap/less/tables.less | 233 - .../browser/www/lib/bootstrap/less/theme.less | 258 - .../www/lib/bootstrap/less/thumbnails.less | 36 - .../www/lib/bootstrap/less/tooltip.less | 95 - .../browser/www/lib/bootstrap/less/type.less | 313 - .../www/lib/bootstrap/less/utilities.less | 57 - .../www/lib/bootstrap/less/variables.less | 846 - .../browser/www/lib/bootstrap/less/wells.less | 29 - .../browser/www/lib/bootstrap/package.json | 81 - .../browser/www/lib/ckeditor/.bower.json | 28 - platforms/browser/www/lib/ckeditor/CHANGES.md | 671 - platforms/browser/www/lib/ckeditor/LICENSE.md | 1264 - platforms/browser/www/lib/ckeditor/README.md | 82 - .../www/lib/ckeditor/adapters/jquery.js | 10 - platforms/browser/www/lib/ckeditor/bower.json | 8 - .../browser/www/lib/ckeditor/ckeditor.js | 935 - .../browser/www/lib/ckeditor/composer.json | 20 - platforms/browser/www/lib/ckeditor/config.js | 38 - .../browser/www/lib/ckeditor/contents.css | 134 - .../lib/ckeditor/lang/_translationstatus.txt | 63 - platforms/browser/www/lib/ckeditor/lang/af.js | 5 - platforms/browser/www/lib/ckeditor/lang/ar.js | 5 - platforms/browser/www/lib/ckeditor/lang/bg.js | 5 - platforms/browser/www/lib/ckeditor/lang/bn.js | 5 - platforms/browser/www/lib/ckeditor/lang/bs.js | 5 - platforms/browser/www/lib/ckeditor/lang/ca.js | 5 - platforms/browser/www/lib/ckeditor/lang/cs.js | 5 - platforms/browser/www/lib/ckeditor/lang/cy.js | 5 - platforms/browser/www/lib/ckeditor/lang/da.js | 5 - platforms/browser/www/lib/ckeditor/lang/de.js | 5 - platforms/browser/www/lib/ckeditor/lang/el.js | 5 - .../browser/www/lib/ckeditor/lang/en-au.js | 5 - .../browser/www/lib/ckeditor/lang/en-ca.js | 5 - .../browser/www/lib/ckeditor/lang/en-gb.js | 5 - platforms/browser/www/lib/ckeditor/lang/en.js | 5 - platforms/browser/www/lib/ckeditor/lang/eo.js | 5 - platforms/browser/www/lib/ckeditor/lang/es.js | 5 - platforms/browser/www/lib/ckeditor/lang/et.js | 5 - platforms/browser/www/lib/ckeditor/lang/eu.js | 5 - platforms/browser/www/lib/ckeditor/lang/fa.js | 5 - platforms/browser/www/lib/ckeditor/lang/fi.js | 5 - platforms/browser/www/lib/ckeditor/lang/fo.js | 5 - .../browser/www/lib/ckeditor/lang/fr-ca.js | 5 - platforms/browser/www/lib/ckeditor/lang/fr.js | 5 - platforms/browser/www/lib/ckeditor/lang/gl.js | 5 - platforms/browser/www/lib/ckeditor/lang/gu.js | 5 - platforms/browser/www/lib/ckeditor/lang/he.js | 5 - platforms/browser/www/lib/ckeditor/lang/hi.js | 5 - platforms/browser/www/lib/ckeditor/lang/hr.js | 5 - platforms/browser/www/lib/ckeditor/lang/hu.js | 5 - platforms/browser/www/lib/ckeditor/lang/id.js | 5 - platforms/browser/www/lib/ckeditor/lang/is.js | 5 - platforms/browser/www/lib/ckeditor/lang/it.js | 5 - platforms/browser/www/lib/ckeditor/lang/ja.js | 5 - platforms/browser/www/lib/ckeditor/lang/ka.js | 5 - platforms/browser/www/lib/ckeditor/lang/km.js | 5 - platforms/browser/www/lib/ckeditor/lang/ko.js | 5 - platforms/browser/www/lib/ckeditor/lang/ku.js | 5 - platforms/browser/www/lib/ckeditor/lang/lt.js | 5 - platforms/browser/www/lib/ckeditor/lang/lv.js | 5 - platforms/browser/www/lib/ckeditor/lang/mk.js | 5 - platforms/browser/www/lib/ckeditor/lang/mn.js | 5 - platforms/browser/www/lib/ckeditor/lang/ms.js | 5 - platforms/browser/www/lib/ckeditor/lang/nb.js | 5 - platforms/browser/www/lib/ckeditor/lang/nl.js | 5 - platforms/browser/www/lib/ckeditor/lang/no.js | 5 - platforms/browser/www/lib/ckeditor/lang/pl.js | 5 - .../browser/www/lib/ckeditor/lang/pt-br.js | 5 - platforms/browser/www/lib/ckeditor/lang/pt.js | 5 - platforms/browser/www/lib/ckeditor/lang/ro.js | 5 - platforms/browser/www/lib/ckeditor/lang/ru.js | 5 - platforms/browser/www/lib/ckeditor/lang/si.js | 5 - platforms/browser/www/lib/ckeditor/lang/sk.js | 5 - platforms/browser/www/lib/ckeditor/lang/sl.js | 5 - platforms/browser/www/lib/ckeditor/lang/sq.js | 5 - .../browser/www/lib/ckeditor/lang/sr-latn.js | 5 - platforms/browser/www/lib/ckeditor/lang/sr.js | 5 - platforms/browser/www/lib/ckeditor/lang/sv.js | 5 - platforms/browser/www/lib/ckeditor/lang/th.js | 5 - platforms/browser/www/lib/ckeditor/lang/tr.js | 5 - platforms/browser/www/lib/ckeditor/lang/tt.js | 5 - platforms/browser/www/lib/ckeditor/lang/ug.js | 5 - platforms/browser/www/lib/ckeditor/lang/uk.js | 5 - platforms/browser/www/lib/ckeditor/lang/vi.js | 5 - .../browser/www/lib/ckeditor/lang/zh-cn.js | 5 - platforms/browser/www/lib/ckeditor/lang/zh.js | 5 - .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 - .../dialogs/lang/_translationstatus.txt | 25 - .../plugins/a11yhelp/dialogs/lang/ar.js | 11 - .../plugins/a11yhelp/dialogs/lang/bg.js | 11 - .../plugins/a11yhelp/dialogs/lang/ca.js | 13 - .../plugins/a11yhelp/dialogs/lang/cs.js | 13 - .../plugins/a11yhelp/dialogs/lang/cy.js | 11 - .../plugins/a11yhelp/dialogs/lang/da.js | 11 - .../plugins/a11yhelp/dialogs/lang/de.js | 13 - .../plugins/a11yhelp/dialogs/lang/el.js | 13 - .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 - .../plugins/a11yhelp/dialogs/lang/en.js | 11 - .../plugins/a11yhelp/dialogs/lang/eo.js | 13 - .../plugins/a11yhelp/dialogs/lang/es.js | 12 - .../plugins/a11yhelp/dialogs/lang/et.js | 11 - .../plugins/a11yhelp/dialogs/lang/fa.js | 11 - .../plugins/a11yhelp/dialogs/lang/fi.js | 12 - .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 12 - .../plugins/a11yhelp/dialogs/lang/fr.js | 13 - .../plugins/a11yhelp/dialogs/lang/gl.js | 12 - .../plugins/a11yhelp/dialogs/lang/gu.js | 11 - .../plugins/a11yhelp/dialogs/lang/he.js | 11 - .../plugins/a11yhelp/dialogs/lang/hi.js | 11 - .../plugins/a11yhelp/dialogs/lang/hr.js | 11 - .../plugins/a11yhelp/dialogs/lang/hu.js | 13 - .../plugins/a11yhelp/dialogs/lang/id.js | 11 - .../plugins/a11yhelp/dialogs/lang/it.js | 13 - .../plugins/a11yhelp/dialogs/lang/ja.js | 9 - .../plugins/a11yhelp/dialogs/lang/km.js | 11 - .../plugins/a11yhelp/dialogs/lang/ko.js | 10 - .../plugins/a11yhelp/dialogs/lang/ku.js | 12 - .../plugins/a11yhelp/dialogs/lang/lt.js | 11 - .../plugins/a11yhelp/dialogs/lang/lv.js | 13 - .../plugins/a11yhelp/dialogs/lang/mk.js | 11 - .../plugins/a11yhelp/dialogs/lang/mn.js | 11 - .../plugins/a11yhelp/dialogs/lang/nb.js | 12 - .../plugins/a11yhelp/dialogs/lang/nl.js | 12 - .../plugins/a11yhelp/dialogs/lang/no.js | 11 - .../plugins/a11yhelp/dialogs/lang/pl.js | 13 - .../plugins/a11yhelp/dialogs/lang/pt-br.js | 12 - .../plugins/a11yhelp/dialogs/lang/pt.js | 12 - .../plugins/a11yhelp/dialogs/lang/ro.js | 12 - .../plugins/a11yhelp/dialogs/lang/ru.js | 11 - .../plugins/a11yhelp/dialogs/lang/si.js | 10 - .../plugins/a11yhelp/dialogs/lang/sk.js | 12 - .../plugins/a11yhelp/dialogs/lang/sl.js | 12 - .../plugins/a11yhelp/dialogs/lang/sq.js | 11 - .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 - .../plugins/a11yhelp/dialogs/lang/sr.js | 11 - .../plugins/a11yhelp/dialogs/lang/sv.js | 12 - .../plugins/a11yhelp/dialogs/lang/th.js | 11 - .../plugins/a11yhelp/dialogs/lang/tr.js | 12 - .../plugins/a11yhelp/dialogs/lang/tt.js | 11 - .../plugins/a11yhelp/dialogs/lang/ug.js | 11 - .../plugins/a11yhelp/dialogs/lang/uk.js | 12 - .../plugins/a11yhelp/dialogs/lang/vi.js | 11 - .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 - .../plugins/a11yhelp/dialogs/lang/zh.js | 9 - .../ckeditor/plugins/about/dialogs/about.js | 7 - .../about/dialogs/hidpi/logo_ckeditor.png | Bin 13339 -> 0 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 6757 -> 0 bytes .../lib/ckeditor/plugins/adobeair/plugin.js | 9 - .../www/lib/ckeditor/plugins/ajax/plugin.js | 7 - .../lib/ckeditor/plugins/autogrow/plugin.js | 8 - .../www/lib/ckeditor/plugins/bbcode/plugin.js | 22 - .../ckeditor/plugins/bidi/icons/bidiltr.png | Bin 769 -> 0 bytes .../ckeditor/plugins/bidi/icons/bidirtl.png | Bin 768 -> 0 bytes .../plugins/bidi/icons/hidpi/bidiltr.png | Bin 1579 -> 0 bytes .../plugins/bidi/icons/hidpi/bidirtl.png | Bin 1596 -> 0 bytes .../www/lib/ckeditor/plugins/bidi/lang/af.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/da.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/de.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/el.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-au.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/bidi/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/en.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/es.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/et.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fo.js | 1 - .../lib/ckeditor/plugins/bidi/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/he.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/id.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/is.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/it.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/km.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/no.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/pl.js | 1 - .../lib/ckeditor/plugins/bidi/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/si.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sq.js | 1 - .../lib/ckeditor/plugins/bidi/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/th.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/vi.js | 1 - .../lib/ckeditor/plugins/bidi/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/bidi/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/bidi/plugin.js | 13 - .../plugins/clipboard/dialogs/paste.js | 11 - .../codesnippet/dialogs/codesnippet.js | 6 - .../plugins/codesnippet/icons/codesnippet.png | Bin 597 -> 0 bytes .../codesnippet/icons/hidpi/codesnippet.png | Bin 1887 -> 0 bytes .../ckeditor/plugins/codesnippet/lang/bg.js | 5 - .../ckeditor/plugins/codesnippet/lang/ca.js | 5 - .../ckeditor/plugins/codesnippet/lang/cs.js | 5 - .../ckeditor/plugins/codesnippet/lang/da.js | 5 - .../ckeditor/plugins/codesnippet/lang/de.js | 5 - .../ckeditor/plugins/codesnippet/lang/el.js | 5 - .../plugins/codesnippet/lang/en-gb.js | 5 - .../ckeditor/plugins/codesnippet/lang/en.js | 5 - .../ckeditor/plugins/codesnippet/lang/eo.js | 5 - .../ckeditor/plugins/codesnippet/lang/es.js | 5 - .../ckeditor/plugins/codesnippet/lang/et.js | 5 - .../ckeditor/plugins/codesnippet/lang/fa.js | 5 - .../ckeditor/plugins/codesnippet/lang/fi.js | 5 - .../plugins/codesnippet/lang/fr-ca.js | 5 - .../ckeditor/plugins/codesnippet/lang/fr.js | 5 - .../ckeditor/plugins/codesnippet/lang/he.js | 5 - .../ckeditor/plugins/codesnippet/lang/hr.js | 5 - .../ckeditor/plugins/codesnippet/lang/hu.js | 5 - .../ckeditor/plugins/codesnippet/lang/it.js | 5 - .../ckeditor/plugins/codesnippet/lang/ja.js | 5 - .../ckeditor/plugins/codesnippet/lang/km.js | 5 - .../ckeditor/plugins/codesnippet/lang/ku.js | 5 - .../ckeditor/plugins/codesnippet/lang/lt.js | 5 - .../ckeditor/plugins/codesnippet/lang/lv.js | 5 - .../ckeditor/plugins/codesnippet/lang/nb.js | 5 - .../ckeditor/plugins/codesnippet/lang/nl.js | 5 - .../ckeditor/plugins/codesnippet/lang/no.js | 5 - .../ckeditor/plugins/codesnippet/lang/pl.js | 5 - .../plugins/codesnippet/lang/pt-br.js | 5 - .../ckeditor/plugins/codesnippet/lang/pt.js | 5 - .../ckeditor/plugins/codesnippet/lang/ro.js | 5 - .../ckeditor/plugins/codesnippet/lang/ru.js | 5 - .../ckeditor/plugins/codesnippet/lang/sk.js | 5 - .../ckeditor/plugins/codesnippet/lang/sl.js | 5 - .../ckeditor/plugins/codesnippet/lang/sq.js | 5 - .../ckeditor/plugins/codesnippet/lang/sv.js | 5 - .../ckeditor/plugins/codesnippet/lang/th.js | 5 - .../ckeditor/plugins/codesnippet/lang/tr.js | 5 - .../ckeditor/plugins/codesnippet/lang/tt.js | 5 - .../ckeditor/plugins/codesnippet/lang/ug.js | 5 - .../ckeditor/plugins/codesnippet/lang/uk.js | 5 - .../ckeditor/plugins/codesnippet/lang/vi.js | 5 - .../plugins/codesnippet/lang/zh-cn.js | 5 - .../ckeditor/plugins/codesnippet/lang/zh.js | 5 - .../codesnippet/lib/highlight/CHANGES.md | 827 - .../plugins/codesnippet/lib/highlight/LICENSE | 24 - .../codesnippet/lib/highlight/README.ru.md | 171 - .../lib/highlight/highlight.pack.js | 1 - .../codesnippet/lib/highlight/styles/arta.css | 160 - .../lib/highlight/styles/ascetic.css | 50 - .../highlight/styles/atelier-dune.dark.css | 93 - .../highlight/styles/atelier-dune.light.css | 93 - .../highlight/styles/atelier-forest.dark.css | 93 - .../highlight/styles/atelier-forest.light.css | 93 - .../highlight/styles/atelier-heath.dark.css | 93 - .../highlight/styles/atelier-heath.light.css | 93 - .../styles/atelier-lakeside.dark.css | 93 - .../styles/atelier-lakeside.light.css | 93 - .../highlight/styles/atelier-seaside.dark.css | 93 - .../styles/atelier-seaside.light.css | 93 - .../lib/highlight/styles/brown_paper.css | 105 - .../lib/highlight/styles/brown_papersq.png | Bin 18198 -> 0 bytes .../codesnippet/lib/highlight/styles/dark.css | 105 - .../lib/highlight/styles/default.css | 153 - .../lib/highlight/styles/docco.css | 132 - .../codesnippet/lib/highlight/styles/far.css | 113 - .../lib/highlight/styles/foundation.css | 133 - .../lib/highlight/styles/github.css | 125 - .../lib/highlight/styles/googlecode.css | 147 - .../codesnippet/lib/highlight/styles/idea.css | 122 - .../lib/highlight/styles/ir_black.css | 105 - .../lib/highlight/styles/magula.css | 122 - .../lib/highlight/styles/mono-blue.css | 62 - .../lib/highlight/styles/monokai.css | 127 - .../lib/highlight/styles/monokai_sublime.css | 149 - .../lib/highlight/styles/obsidian.css | 154 - .../lib/highlight/styles/paraiso.dark.css | 93 - .../lib/highlight/styles/paraiso.light.css | 93 - .../lib/highlight/styles/pojoaque.css | 106 - .../lib/highlight/styles/pojoaque.jpg | Bin 1186 -> 0 bytes .../lib/highlight/styles/railscasts.css | 182 - .../lib/highlight/styles/rainbow.css | 112 - .../lib/highlight/styles/school_book.css | 113 - .../lib/highlight/styles/school_book.png | Bin 486 -> 0 bytes .../lib/highlight/styles/solarized_dark.css | 107 - .../lib/highlight/styles/solarized_light.css | 107 - .../lib/highlight/styles/sunburst.css | 160 - .../highlight/styles/tomorrow-night-blue.css | 93 - .../styles/tomorrow-night-bright.css | 92 - .../styles/tomorrow-night-eighties.css | 92 - .../lib/highlight/styles/tomorrow-night.css | 93 - .../lib/highlight/styles/tomorrow.css | 90 - .../codesnippet/lib/highlight/styles/vs.css | 89 - .../lib/highlight/styles/xcode.css | 158 - .../lib/highlight/styles/zenburn.css | 116 - .../ckeditor/plugins/codesnippet/plugin.js | 12 - .../plugins/codesnippetgeshi/plugin.js | 10 - .../plugins/colorbutton/icons/bgcolor.png | Bin 906 -> 0 bytes .../colorbutton/icons/hidpi/bgcolor.png | Bin 2169 -> 0 bytes .../colorbutton/icons/hidpi/textcolor.png | Bin 1725 -> 0 bytes .../plugins/colorbutton/icons/textcolor.png | Bin 813 -> 0 bytes .../ckeditor/plugins/colorbutton/lang/af.js | 2 - .../ckeditor/plugins/colorbutton/lang/ar.js | 2 - .../ckeditor/plugins/colorbutton/lang/bg.js | 2 - .../ckeditor/plugins/colorbutton/lang/bn.js | 2 - .../ckeditor/plugins/colorbutton/lang/bs.js | 2 - .../ckeditor/plugins/colorbutton/lang/ca.js | 2 - .../ckeditor/plugins/colorbutton/lang/cs.js | 2 - .../ckeditor/plugins/colorbutton/lang/cy.js | 2 - .../ckeditor/plugins/colorbutton/lang/da.js | 2 - .../ckeditor/plugins/colorbutton/lang/de.js | 2 - .../ckeditor/plugins/colorbutton/lang/el.js | 2 - .../plugins/colorbutton/lang/en-au.js | 2 - .../plugins/colorbutton/lang/en-ca.js | 2 - .../plugins/colorbutton/lang/en-gb.js | 2 - .../ckeditor/plugins/colorbutton/lang/en.js | 2 - .../ckeditor/plugins/colorbutton/lang/eo.js | 2 - .../ckeditor/plugins/colorbutton/lang/es.js | 2 - .../ckeditor/plugins/colorbutton/lang/et.js | 2 - .../ckeditor/plugins/colorbutton/lang/eu.js | 2 - .../ckeditor/plugins/colorbutton/lang/fa.js | 2 - .../ckeditor/plugins/colorbutton/lang/fi.js | 3 - .../ckeditor/plugins/colorbutton/lang/fo.js | 2 - .../plugins/colorbutton/lang/fr-ca.js | 2 - .../ckeditor/plugins/colorbutton/lang/fr.js | 2 - .../ckeditor/plugins/colorbutton/lang/gl.js | 2 - .../ckeditor/plugins/colorbutton/lang/gu.js | 2 - .../ckeditor/plugins/colorbutton/lang/he.js | 2 - .../ckeditor/plugins/colorbutton/lang/hi.js | 2 - .../ckeditor/plugins/colorbutton/lang/hr.js | 2 - .../ckeditor/plugins/colorbutton/lang/hu.js | 2 - .../ckeditor/plugins/colorbutton/lang/id.js | 2 - .../ckeditor/plugins/colorbutton/lang/is.js | 2 - .../ckeditor/plugins/colorbutton/lang/it.js | 2 - .../ckeditor/plugins/colorbutton/lang/ja.js | 2 - .../ckeditor/plugins/colorbutton/lang/ka.js | 2 - .../ckeditor/plugins/colorbutton/lang/km.js | 2 - .../ckeditor/plugins/colorbutton/lang/ko.js | 2 - .../ckeditor/plugins/colorbutton/lang/ku.js | 2 - .../ckeditor/plugins/colorbutton/lang/lt.js | 2 - .../ckeditor/plugins/colorbutton/lang/lv.js | 2 - .../ckeditor/plugins/colorbutton/lang/mk.js | 2 - .../ckeditor/plugins/colorbutton/lang/mn.js | 2 - .../ckeditor/plugins/colorbutton/lang/ms.js | 2 - .../ckeditor/plugins/colorbutton/lang/nb.js | 2 - .../ckeditor/plugins/colorbutton/lang/nl.js | 2 - .../ckeditor/plugins/colorbutton/lang/no.js | 2 - .../ckeditor/plugins/colorbutton/lang/pl.js | 2 - .../plugins/colorbutton/lang/pt-br.js | 2 - .../ckeditor/plugins/colorbutton/lang/pt.js | 2 - .../ckeditor/plugins/colorbutton/lang/ro.js | 2 - .../ckeditor/plugins/colorbutton/lang/ru.js | 2 - .../ckeditor/plugins/colorbutton/lang/si.js | 2 - .../ckeditor/plugins/colorbutton/lang/sk.js | 2 - .../ckeditor/plugins/colorbutton/lang/sl.js | 2 - .../ckeditor/plugins/colorbutton/lang/sq.js | 3 - .../plugins/colorbutton/lang/sr-latn.js | 2 - .../ckeditor/plugins/colorbutton/lang/sr.js | 2 - .../ckeditor/plugins/colorbutton/lang/sv.js | 2 - .../ckeditor/plugins/colorbutton/lang/th.js | 2 - .../ckeditor/plugins/colorbutton/lang/tr.js | 2 - .../ckeditor/plugins/colorbutton/lang/tt.js | 2 - .../ckeditor/plugins/colorbutton/lang/ug.js | 2 - .../ckeditor/plugins/colorbutton/lang/uk.js | 2 - .../ckeditor/plugins/colorbutton/lang/vi.js | 2 - .../plugins/colorbutton/lang/zh-cn.js | 2 - .../ckeditor/plugins/colorbutton/lang/zh.js | 2 - .../ckeditor/plugins/colorbutton/plugin.js | 13 - .../colordialog/dialogs/colordialog.js | 13 - .../ckeditor/plugins/colordialog/lang/af.js | 1 - .../ckeditor/plugins/colordialog/lang/ar.js | 1 - .../ckeditor/plugins/colordialog/lang/bg.js | 1 - .../ckeditor/plugins/colordialog/lang/bn.js | 1 - .../ckeditor/plugins/colordialog/lang/bs.js | 1 - .../ckeditor/plugins/colordialog/lang/ca.js | 1 - .../ckeditor/plugins/colordialog/lang/cs.js | 1 - .../ckeditor/plugins/colordialog/lang/cy.js | 1 - .../ckeditor/plugins/colordialog/lang/da.js | 1 - .../ckeditor/plugins/colordialog/lang/de.js | 1 - .../ckeditor/plugins/colordialog/lang/el.js | 1 - .../plugins/colordialog/lang/en-au.js | 1 - .../plugins/colordialog/lang/en-ca.js | 1 - .../plugins/colordialog/lang/en-gb.js | 1 - .../ckeditor/plugins/colordialog/lang/en.js | 1 - .../ckeditor/plugins/colordialog/lang/eo.js | 1 - .../ckeditor/plugins/colordialog/lang/es.js | 1 - .../ckeditor/plugins/colordialog/lang/et.js | 1 - .../ckeditor/plugins/colordialog/lang/eu.js | 1 - .../ckeditor/plugins/colordialog/lang/fa.js | 1 - .../ckeditor/plugins/colordialog/lang/fi.js | 1 - .../ckeditor/plugins/colordialog/lang/fo.js | 1 - .../plugins/colordialog/lang/fr-ca.js | 1 - .../ckeditor/plugins/colordialog/lang/fr.js | 1 - .../ckeditor/plugins/colordialog/lang/gl.js | 1 - .../ckeditor/plugins/colordialog/lang/gu.js | 1 - .../ckeditor/plugins/colordialog/lang/he.js | 1 - .../ckeditor/plugins/colordialog/lang/hi.js | 1 - .../ckeditor/plugins/colordialog/lang/hr.js | 1 - .../ckeditor/plugins/colordialog/lang/hu.js | 1 - .../ckeditor/plugins/colordialog/lang/is.js | 1 - .../ckeditor/plugins/colordialog/lang/it.js | 1 - .../ckeditor/plugins/colordialog/lang/ja.js | 1 - .../ckeditor/plugins/colordialog/lang/ka.js | 1 - .../ckeditor/plugins/colordialog/lang/km.js | 1 - .../ckeditor/plugins/colordialog/lang/ko.js | 1 - .../ckeditor/plugins/colordialog/lang/ku.js | 1 - .../ckeditor/plugins/colordialog/lang/lt.js | 1 - .../ckeditor/plugins/colordialog/lang/lv.js | 1 - .../ckeditor/plugins/colordialog/lang/mk.js | 1 - .../ckeditor/plugins/colordialog/lang/mn.js | 1 - .../ckeditor/plugins/colordialog/lang/ms.js | 1 - .../ckeditor/plugins/colordialog/lang/nb.js | 1 - .../ckeditor/plugins/colordialog/lang/nl.js | 1 - .../ckeditor/plugins/colordialog/lang/no.js | 1 - .../ckeditor/plugins/colordialog/lang/pl.js | 1 - .../plugins/colordialog/lang/pt-br.js | 1 - .../ckeditor/plugins/colordialog/lang/pt.js | 1 - .../ckeditor/plugins/colordialog/lang/ro.js | 1 - .../ckeditor/plugins/colordialog/lang/ru.js | 1 - .../ckeditor/plugins/colordialog/lang/si.js | 1 - .../ckeditor/plugins/colordialog/lang/sk.js | 1 - .../ckeditor/plugins/colordialog/lang/sl.js | 1 - .../ckeditor/plugins/colordialog/lang/sq.js | 1 - .../plugins/colordialog/lang/sr-latn.js | 1 - .../ckeditor/plugins/colordialog/lang/sr.js | 1 - .../ckeditor/plugins/colordialog/lang/sv.js | 1 - .../ckeditor/plugins/colordialog/lang/th.js | 1 - .../ckeditor/plugins/colordialog/lang/tr.js | 1 - .../ckeditor/plugins/colordialog/lang/tt.js | 1 - .../ckeditor/plugins/colordialog/lang/ug.js | 1 - .../ckeditor/plugins/colordialog/lang/uk.js | 1 - .../ckeditor/plugins/colordialog/lang/vi.js | 1 - .../plugins/colordialog/lang/zh-cn.js | 1 - .../ckeditor/plugins/colordialog/lang/zh.js | 1 - .../ckeditor/plugins/colordialog/plugin.js | 7 - .../devtools/lang/_translationstatus.txt | 27 - .../lib/ckeditor/plugins/devtools/lang/ar.js | 5 - .../lib/ckeditor/plugins/devtools/lang/bg.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ca.js | 5 - .../lib/ckeditor/plugins/devtools/lang/cs.js | 5 - .../lib/ckeditor/plugins/devtools/lang/cy.js | 5 - .../lib/ckeditor/plugins/devtools/lang/da.js | 5 - .../lib/ckeditor/plugins/devtools/lang/de.js | 5 - .../lib/ckeditor/plugins/devtools/lang/el.js | 5 - .../ckeditor/plugins/devtools/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/devtools/lang/en.js | 5 - .../lib/ckeditor/plugins/devtools/lang/eo.js | 5 - .../lib/ckeditor/plugins/devtools/lang/es.js | 5 - .../lib/ckeditor/plugins/devtools/lang/et.js | 5 - .../lib/ckeditor/plugins/devtools/lang/eu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fa.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fi.js | 5 - .../ckeditor/plugins/devtools/lang/fr-ca.js | 5 - .../lib/ckeditor/plugins/devtools/lang/fr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/gl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/gu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/he.js | 5 - .../lib/ckeditor/plugins/devtools/lang/hr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/hu.js | 5 - .../lib/ckeditor/plugins/devtools/lang/id.js | 5 - .../lib/ckeditor/plugins/devtools/lang/it.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ja.js | 5 - .../lib/ckeditor/plugins/devtools/lang/km.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ko.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ku.js | 5 - .../lib/ckeditor/plugins/devtools/lang/lt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/lv.js | 5 - .../lib/ckeditor/plugins/devtools/lang/nb.js | 5 - .../lib/ckeditor/plugins/devtools/lang/nl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/no.js | 5 - .../lib/ckeditor/plugins/devtools/lang/pl.js | 5 - .../ckeditor/plugins/devtools/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/devtools/lang/pt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ru.js | 5 - .../lib/ckeditor/plugins/devtools/lang/si.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sk.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sl.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sq.js | 5 - .../lib/ckeditor/plugins/devtools/lang/sv.js | 5 - .../lib/ckeditor/plugins/devtools/lang/tr.js | 5 - .../lib/ckeditor/plugins/devtools/lang/tt.js | 5 - .../lib/ckeditor/plugins/devtools/lang/ug.js | 5 - .../lib/ckeditor/plugins/devtools/lang/uk.js | 5 - .../lib/ckeditor/plugins/devtools/lang/vi.js | 5 - .../ckeditor/plugins/devtools/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/devtools/lang/zh.js | 5 - .../lib/ckeditor/plugins/devtools/plugin.js | 9 - .../plugins/dialog/dialogDefinition.js | 4 - .../ckeditor/plugins/dialogadvtab/plugin.js | 9 - .../lib/ckeditor/plugins/div/dialogs/div.js | 9 - .../ckeditor/plugins/div/icons/creatediv.png | Bin 862 -> 0 bytes .../plugins/div/icons/hidpi/creatediv.png | Bin 3053 -> 0 bytes .../www/lib/ckeditor/plugins/div/lang/af.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/div/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/div/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/div/lang/da.js | 1 - .../www/lib/ckeditor/plugins/div/lang/de.js | 1 - .../www/lib/ckeditor/plugins/div/lang/el.js | 1 - .../lib/ckeditor/plugins/div/lang/en-au.js | 1 - .../lib/ckeditor/plugins/div/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/div/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/div/lang/en.js | 1 - .../www/lib/ckeditor/plugins/div/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/div/lang/es.js | 1 - .../www/lib/ckeditor/plugins/div/lang/et.js | 1 - .../www/lib/ckeditor/plugins/div/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fo.js | 1 - .../lib/ckeditor/plugins/div/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/div/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/he.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/div/lang/id.js | 1 - .../www/lib/ckeditor/plugins/div/lang/is.js | 1 - .../www/lib/ckeditor/plugins/div/lang/it.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/div/lang/km.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/div/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/div/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/div/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/div/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/no.js | 1 - .../www/lib/ckeditor/plugins/div/lang/pl.js | 1 - .../lib/ckeditor/plugins/div/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/div/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/div/lang/si.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sq.js | 1 - .../lib/ckeditor/plugins/div/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/div/lang/th.js | 1 - .../www/lib/ckeditor/plugins/div/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/div/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/div/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/div/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/div/lang/vi.js | 1 - .../lib/ckeditor/plugins/div/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/div/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/div/plugin.js | 8 - .../lib/ckeditor/plugins/divarea/plugin.js | 5 - .../plugins/docprops/dialogs/docprops.js | 25 - .../plugins/docprops/icons/docprops-rtl.png | Bin 840 -> 0 bytes .../plugins/docprops/icons/docprops.png | Bin 844 -> 0 bytes .../docprops/icons/hidpi/docprops-rtl.png | Bin 1909 -> 0 bytes .../plugins/docprops/icons/hidpi/docprops.png | Bin 1941 -> 0 bytes .../lib/ckeditor/plugins/docprops/lang/af.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ar.js | 2 - .../lib/ckeditor/plugins/docprops/lang/bg.js | 3 - .../lib/ckeditor/plugins/docprops/lang/bn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/bs.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ca.js | 3 - .../lib/ckeditor/plugins/docprops/lang/cs.js | 3 - .../lib/ckeditor/plugins/docprops/lang/cy.js | 3 - .../lib/ckeditor/plugins/docprops/lang/da.js | 3 - .../lib/ckeditor/plugins/docprops/lang/de.js | 3 - .../lib/ckeditor/plugins/docprops/lang/el.js | 3 - .../ckeditor/plugins/docprops/lang/en-au.js | 3 - .../ckeditor/plugins/docprops/lang/en-ca.js | 3 - .../ckeditor/plugins/docprops/lang/en-gb.js | 3 - .../lib/ckeditor/plugins/docprops/lang/en.js | 3 - .../lib/ckeditor/plugins/docprops/lang/eo.js | 3 - .../lib/ckeditor/plugins/docprops/lang/es.js | 3 - .../lib/ckeditor/plugins/docprops/lang/et.js | 3 - .../lib/ckeditor/plugins/docprops/lang/eu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fa.js | 2 - .../lib/ckeditor/plugins/docprops/lang/fi.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fo.js | 3 - .../ckeditor/plugins/docprops/lang/fr-ca.js | 3 - .../lib/ckeditor/plugins/docprops/lang/fr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/gl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/gu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/he.js | 2 - .../lib/ckeditor/plugins/docprops/lang/hi.js | 3 - .../lib/ckeditor/plugins/docprops/lang/hr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/hu.js | 3 - .../lib/ckeditor/plugins/docprops/lang/id.js | 3 - .../lib/ckeditor/plugins/docprops/lang/is.js | 3 - .../lib/ckeditor/plugins/docprops/lang/it.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ja.js | 2 - .../lib/ckeditor/plugins/docprops/lang/ka.js | 3 - .../lib/ckeditor/plugins/docprops/lang/km.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ko.js | 2 - .../lib/ckeditor/plugins/docprops/lang/ku.js | 3 - .../lib/ckeditor/plugins/docprops/lang/lt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/lv.js | 3 - .../lib/ckeditor/plugins/docprops/lang/mk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/mn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ms.js | 3 - .../lib/ckeditor/plugins/docprops/lang/nb.js | 3 - .../lib/ckeditor/plugins/docprops/lang/nl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/no.js | 3 - .../lib/ckeditor/plugins/docprops/lang/pl.js | 3 - .../ckeditor/plugins/docprops/lang/pt-br.js | 3 - .../lib/ckeditor/plugins/docprops/lang/pt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ro.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ru.js | 3 - .../lib/ckeditor/plugins/docprops/lang/si.js | 2 - .../lib/ckeditor/plugins/docprops/lang/sk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sl.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sq.js | 3 - .../ckeditor/plugins/docprops/lang/sr-latn.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/sv.js | 2 - .../lib/ckeditor/plugins/docprops/lang/th.js | 3 - .../lib/ckeditor/plugins/docprops/lang/tr.js | 3 - .../lib/ckeditor/plugins/docprops/lang/tt.js | 3 - .../lib/ckeditor/plugins/docprops/lang/ug.js | 3 - .../lib/ckeditor/plugins/docprops/lang/uk.js | 3 - .../lib/ckeditor/plugins/docprops/lang/vi.js | 3 - .../ckeditor/plugins/docprops/lang/zh-cn.js | 2 - .../lib/ckeditor/plugins/docprops/lang/zh.js | 2 - .../lib/ckeditor/plugins/docprops/plugin.js | 6 - .../lib/ckeditor/plugins/find/dialogs/find.js | 24 - .../ckeditor/plugins/find/icons/find-rtl.png | Bin 980 -> 0 bytes .../lib/ckeditor/plugins/find/icons/find.png | Bin 980 -> 0 bytes .../plugins/find/icons/hidpi/find-rtl.png | Bin 2417 -> 0 bytes .../plugins/find/icons/hidpi/find.png | Bin 2417 -> 0 bytes .../plugins/find/icons/hidpi/replace.png | Bin 2761 -> 0 bytes .../ckeditor/plugins/find/icons/replace.png | Bin 948 -> 0 bytes .../www/lib/ckeditor/plugins/find/lang/af.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/find/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/find/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/find/lang/da.js | 1 - .../www/lib/ckeditor/plugins/find/lang/de.js | 1 - .../www/lib/ckeditor/plugins/find/lang/el.js | 1 - .../lib/ckeditor/plugins/find/lang/en-au.js | 1 - .../lib/ckeditor/plugins/find/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/find/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/find/lang/en.js | 1 - .../www/lib/ckeditor/plugins/find/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/find/lang/es.js | 1 - .../www/lib/ckeditor/plugins/find/lang/et.js | 1 - .../www/lib/ckeditor/plugins/find/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fo.js | 1 - .../lib/ckeditor/plugins/find/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/find/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/he.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/find/lang/id.js | 1 - .../www/lib/ckeditor/plugins/find/lang/is.js | 1 - .../www/lib/ckeditor/plugins/find/lang/it.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/find/lang/km.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/find/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/find/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/find/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/find/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/no.js | 1 - .../www/lib/ckeditor/plugins/find/lang/pl.js | 1 - .../lib/ckeditor/plugins/find/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/find/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/find/lang/si.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sq.js | 1 - .../lib/ckeditor/plugins/find/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/find/lang/th.js | 1 - .../www/lib/ckeditor/plugins/find/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/find/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/find/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/find/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/find/lang/vi.js | 1 - .../lib/ckeditor/plugins/find/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/find/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/find/plugin.js | 6 - .../ckeditor/plugins/flash/dialogs/flash.js | 24 - .../ckeditor/plugins/flash/icons/flash.png | Bin 1038 -> 0 bytes .../plugins/flash/icons/hidpi/flash.png | Bin 2532 -> 0 bytes .../plugins/flash/images/placeholder.png | Bin 256 -> 0 bytes .../www/lib/ckeditor/plugins/flash/lang/af.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ar.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/bg.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/bn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/bs.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ca.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/cs.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/cy.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/da.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/de.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/el.js | 3 - .../lib/ckeditor/plugins/flash/lang/en-au.js | 2 - .../lib/ckeditor/plugins/flash/lang/en-ca.js | 2 - .../lib/ckeditor/plugins/flash/lang/en-gb.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/en.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/eo.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/es.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/et.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/eu.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fa.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/fi.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fo.js | 3 - .../lib/ckeditor/plugins/flash/lang/fr-ca.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/fr.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/gl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/gu.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/he.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hi.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/hu.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/id.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/is.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/it.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ja.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ka.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/km.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ko.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ku.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/lt.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/lv.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/mk.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/mn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ms.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/nb.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/nl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/no.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/pl.js | 3 - .../lib/ckeditor/plugins/flash/lang/pt-br.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/pt.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ro.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/ru.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/si.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sk.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/sl.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/sq.js | 3 - .../ckeditor/plugins/flash/lang/sr-latn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/sv.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/th.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/tr.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/tt.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/ug.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/uk.js | 3 - .../www/lib/ckeditor/plugins/flash/lang/vi.js | 3 - .../lib/ckeditor/plugins/flash/lang/zh-cn.js | 2 - .../www/lib/ckeditor/plugins/flash/lang/zh.js | 2 - .../www/lib/ckeditor/plugins/flash/plugin.js | 9 - .../www/lib/ckeditor/plugins/font/lang/af.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/font/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/font/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/font/lang/da.js | 1 - .../www/lib/ckeditor/plugins/font/lang/de.js | 1 - .../www/lib/ckeditor/plugins/font/lang/el.js | 1 - .../lib/ckeditor/plugins/font/lang/en-au.js | 1 - .../lib/ckeditor/plugins/font/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/font/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/font/lang/en.js | 1 - .../www/lib/ckeditor/plugins/font/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/font/lang/es.js | 1 - .../www/lib/ckeditor/plugins/font/lang/et.js | 1 - .../www/lib/ckeditor/plugins/font/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fo.js | 1 - .../lib/ckeditor/plugins/font/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/font/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/he.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/font/lang/id.js | 1 - .../www/lib/ckeditor/plugins/font/lang/is.js | 1 - .../www/lib/ckeditor/plugins/font/lang/it.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/font/lang/km.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/font/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/font/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/font/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/font/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/no.js | 1 - .../www/lib/ckeditor/plugins/font/lang/pl.js | 1 - .../lib/ckeditor/plugins/font/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/font/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/font/lang/si.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sq.js | 1 - .../lib/ckeditor/plugins/font/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/font/lang/th.js | 1 - .../www/lib/ckeditor/plugins/font/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/font/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/font/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/font/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/font/lang/vi.js | 1 - .../lib/ckeditor/plugins/font/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/font/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/font/plugin.js | 9 - .../ckeditor/plugins/forms/dialogs/button.js | 8 - .../plugins/forms/dialogs/checkbox.js | 8 - .../ckeditor/plugins/forms/dialogs/form.js | 8 - .../plugins/forms/dialogs/hiddenfield.js | 8 - .../ckeditor/plugins/forms/dialogs/radio.js | 8 - .../ckeditor/plugins/forms/dialogs/select.js | 20 - .../plugins/forms/dialogs/textarea.js | 8 - .../plugins/forms/dialogs/textfield.js | 10 - .../ckeditor/plugins/forms/icons/button.png | Bin 528 -> 0 bytes .../ckeditor/plugins/forms/icons/checkbox.png | Bin 756 -> 0 bytes .../lib/ckeditor/plugins/forms/icons/form.png | Bin 590 -> 0 bytes .../plugins/forms/icons/hiddenfield.png | Bin 823 -> 0 bytes .../plugins/forms/icons/hidpi/button.png | Bin 933 -> 0 bytes .../plugins/forms/icons/hidpi/checkbox.png | Bin 1780 -> 0 bytes .../plugins/forms/icons/hidpi/form.png | Bin 1348 -> 0 bytes .../plugins/forms/icons/hidpi/hiddenfield.png | Bin 2166 -> 0 bytes .../plugins/forms/icons/hidpi/imagebutton.png | Bin 1398 -> 0 bytes .../plugins/forms/icons/hidpi/radio.png | Bin 2435 -> 0 bytes .../plugins/forms/icons/hidpi/select-rtl.png | Bin 1451 -> 0 bytes .../plugins/forms/icons/hidpi/select.png | Bin 1452 -> 0 bytes .../forms/icons/hidpi/textarea-rtl.png | Bin 1732 -> 0 bytes .../plugins/forms/icons/hidpi/textarea.png | Bin 1680 -> 0 bytes .../forms/icons/hidpi/textfield-rtl.png | Bin 1324 -> 0 bytes .../plugins/forms/icons/hidpi/textfield.png | Bin 1324 -> 0 bytes .../plugins/forms/icons/imagebutton.png | Bin 680 -> 0 bytes .../ckeditor/plugins/forms/icons/radio.png | Bin 874 -> 0 bytes .../plugins/forms/icons/select-rtl.png | Bin 617 -> 0 bytes .../ckeditor/plugins/forms/icons/select.png | Bin 616 -> 0 bytes .../plugins/forms/icons/textarea-rtl.png | Bin 706 -> 0 bytes .../ckeditor/plugins/forms/icons/textarea.png | Bin 677 -> 0 bytes .../plugins/forms/icons/textfield-rtl.png | Bin 588 -> 0 bytes .../plugins/forms/icons/textfield.png | Bin 588 -> 0 bytes .../plugins/forms/images/hiddenfield.gif | Bin 105 -> 0 bytes .../www/lib/ckeditor/plugins/forms/lang/af.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ar.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bg.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/bs.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ca.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/cs.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/cy.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/da.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/de.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/el.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-au.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-ca.js | 3 - .../lib/ckeditor/plugins/forms/lang/en-gb.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/en.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/eo.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/es.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/et.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/eu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fa.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fi.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fo.js | 3 - .../lib/ckeditor/plugins/forms/lang/fr-ca.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/fr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/gl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/gu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/he.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/hi.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/hr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/hu.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/id.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/is.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/it.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ja.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/ka.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/km.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ko.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/ku.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/lt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/lv.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/mk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/mn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ms.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/nb.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/nl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/no.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/pl.js | 3 - .../lib/ckeditor/plugins/forms/lang/pt-br.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/pt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ro.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ru.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/si.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sl.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sq.js | 3 - .../ckeditor/plugins/forms/lang/sr-latn.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/sv.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/th.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/tr.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/tt.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/ug.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/uk.js | 3 - .../www/lib/ckeditor/plugins/forms/lang/vi.js | 3 - .../lib/ckeditor/plugins/forms/lang/zh-cn.js | 2 - .../www/lib/ckeditor/plugins/forms/lang/zh.js | 2 - .../www/lib/ckeditor/plugins/forms/plugin.js | 14 - .../www/lib/ckeditor/plugins/icons.png | Bin 18271 -> 0 bytes .../www/lib/ckeditor/plugins/icons_hidpi.png | Bin 62881 -> 0 bytes .../ckeditor/plugins/iframe/dialogs/iframe.js | 10 - .../plugins/iframe/icons/hidpi/iframe.png | Bin 3091 -> 0 bytes .../ckeditor/plugins/iframe/icons/iframe.png | Bin 989 -> 0 bytes .../plugins/iframe/images/placeholder.png | Bin 265 -> 0 bytes .../lib/ckeditor/plugins/iframe/lang/af.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ar.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bg.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/bs.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/cs.js | 1 - .../lib/ckeditor/plugins/iframe/lang/cy.js | 1 - .../lib/ckeditor/plugins/iframe/lang/da.js | 1 - .../lib/ckeditor/plugins/iframe/lang/de.js | 1 - .../lib/ckeditor/plugins/iframe/lang/el.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-au.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/iframe/lang/en.js | 1 - .../lib/ckeditor/plugins/iframe/lang/eo.js | 1 - .../lib/ckeditor/plugins/iframe/lang/es.js | 1 - .../lib/ckeditor/plugins/iframe/lang/et.js | 1 - .../lib/ckeditor/plugins/iframe/lang/eu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fa.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fo.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/iframe/lang/fr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/gl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/gu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/he.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/hu.js | 1 - .../lib/ckeditor/plugins/iframe/lang/id.js | 1 - .../lib/ckeditor/plugins/iframe/lang/is.js | 1 - .../lib/ckeditor/plugins/iframe/lang/it.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ja.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ka.js | 1 - .../lib/ckeditor/plugins/iframe/lang/km.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ko.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ku.js | 1 - .../lib/ckeditor/plugins/iframe/lang/lt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/lv.js | 1 - .../lib/ckeditor/plugins/iframe/lang/mk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/mn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ms.js | 1 - .../lib/ckeditor/plugins/iframe/lang/nb.js | 1 - .../lib/ckeditor/plugins/iframe/lang/nl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/no.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/iframe/lang/pt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ro.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ru.js | 1 - .../lib/ckeditor/plugins/iframe/lang/si.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sl.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sq.js | 1 - .../ckeditor/plugins/iframe/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/sv.js | 1 - .../lib/ckeditor/plugins/iframe/lang/th.js | 1 - .../lib/ckeditor/plugins/iframe/lang/tr.js | 1 - .../lib/ckeditor/plugins/iframe/lang/tt.js | 1 - .../lib/ckeditor/plugins/iframe/lang/ug.js | 1 - .../lib/ckeditor/plugins/iframe/lang/uk.js | 1 - .../lib/ckeditor/plugins/iframe/lang/vi.js | 1 - .../lib/ckeditor/plugins/iframe/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/iframe/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/iframe/plugin.js | 8 - .../ckeditor/plugins/iframedialog/plugin.js | 8 - .../ckeditor/plugins/image/dialogs/image.js | 43 - .../ckeditor/plugins/image/images/noimage.png | Bin 2115 -> 0 bytes .../ckeditor/plugins/image2/dialogs/image2.js | 14 - .../plugins/image2/icons/hidpi/image.png | Bin 1745 -> 0 bytes .../ckeditor/plugins/image2/icons/image.png | Bin 756 -> 0 bytes .../lib/ckeditor/plugins/image2/lang/af.js | 1 - .../lib/ckeditor/plugins/image2/lang/ar.js | 1 - .../lib/ckeditor/plugins/image2/lang/bg.js | 1 - .../lib/ckeditor/plugins/image2/lang/bn.js | 1 - .../lib/ckeditor/plugins/image2/lang/bs.js | 1 - .../lib/ckeditor/plugins/image2/lang/ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/cs.js | 1 - .../lib/ckeditor/plugins/image2/lang/cy.js | 1 - .../lib/ckeditor/plugins/image2/lang/da.js | 1 - .../lib/ckeditor/plugins/image2/lang/de.js | 1 - .../lib/ckeditor/plugins/image2/lang/el.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-au.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/image2/lang/en.js | 1 - .../lib/ckeditor/plugins/image2/lang/eo.js | 1 - .../lib/ckeditor/plugins/image2/lang/es.js | 1 - .../lib/ckeditor/plugins/image2/lang/et.js | 1 - .../lib/ckeditor/plugins/image2/lang/eu.js | 1 - .../lib/ckeditor/plugins/image2/lang/fa.js | 1 - .../lib/ckeditor/plugins/image2/lang/fi.js | 1 - .../lib/ckeditor/plugins/image2/lang/fo.js | 1 - .../lib/ckeditor/plugins/image2/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/image2/lang/fr.js | 1 - .../lib/ckeditor/plugins/image2/lang/gl.js | 1 - .../lib/ckeditor/plugins/image2/lang/gu.js | 1 - .../lib/ckeditor/plugins/image2/lang/he.js | 1 - .../lib/ckeditor/plugins/image2/lang/hi.js | 1 - .../lib/ckeditor/plugins/image2/lang/hr.js | 1 - .../lib/ckeditor/plugins/image2/lang/hu.js | 1 - .../lib/ckeditor/plugins/image2/lang/id.js | 1 - .../lib/ckeditor/plugins/image2/lang/is.js | 1 - .../lib/ckeditor/plugins/image2/lang/it.js | 1 - .../lib/ckeditor/plugins/image2/lang/ja.js | 1 - .../lib/ckeditor/plugins/image2/lang/ka.js | 1 - .../lib/ckeditor/plugins/image2/lang/km.js | 1 - .../lib/ckeditor/plugins/image2/lang/ko.js | 1 - .../lib/ckeditor/plugins/image2/lang/ku.js | 1 - .../lib/ckeditor/plugins/image2/lang/lt.js | 1 - .../lib/ckeditor/plugins/image2/lang/lv.js | 1 - .../lib/ckeditor/plugins/image2/lang/mk.js | 1 - .../lib/ckeditor/plugins/image2/lang/mn.js | 1 - .../lib/ckeditor/plugins/image2/lang/ms.js | 1 - .../lib/ckeditor/plugins/image2/lang/nb.js | 1 - .../lib/ckeditor/plugins/image2/lang/nl.js | 1 - .../lib/ckeditor/plugins/image2/lang/no.js | 1 - .../lib/ckeditor/plugins/image2/lang/pl.js | 1 - .../lib/ckeditor/plugins/image2/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/image2/lang/pt.js | 1 - .../lib/ckeditor/plugins/image2/lang/ro.js | 1 - .../lib/ckeditor/plugins/image2/lang/ru.js | 1 - .../lib/ckeditor/plugins/image2/lang/si.js | 1 - .../lib/ckeditor/plugins/image2/lang/sk.js | 1 - .../lib/ckeditor/plugins/image2/lang/sl.js | 1 - .../lib/ckeditor/plugins/image2/lang/sq.js | 1 - .../ckeditor/plugins/image2/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/image2/lang/sr.js | 1 - .../lib/ckeditor/plugins/image2/lang/sv.js | 1 - .../lib/ckeditor/plugins/image2/lang/th.js | 1 - .../lib/ckeditor/plugins/image2/lang/tr.js | 1 - .../lib/ckeditor/plugins/image2/lang/tt.js | 1 - .../lib/ckeditor/plugins/image2/lang/ug.js | 1 - .../lib/ckeditor/plugins/image2/lang/uk.js | 1 - .../lib/ckeditor/plugins/image2/lang/vi.js | 1 - .../lib/ckeditor/plugins/image2/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/image2/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/image2/plugin.js | 30 - .../ckeditor/plugins/indentblock/plugin.js | 9 - .../justify/icons/hidpi/justifyblock.png | Bin 882 -> 0 bytes .../justify/icons/hidpi/justifycenter.png | Bin 1142 -> 0 bytes .../justify/icons/hidpi/justifyleft.png | Bin 1042 -> 0 bytes .../justify/icons/hidpi/justifyright.png | Bin 1048 -> 0 bytes .../plugins/justify/icons/justifyblock.png | Bin 496 -> 0 bytes .../plugins/justify/icons/justifycenter.png | Bin 609 -> 0 bytes .../plugins/justify/icons/justifyleft.png | Bin 558 -> 0 bytes .../plugins/justify/icons/justifyright.png | Bin 554 -> 0 bytes .../lib/ckeditor/plugins/justify/lang/af.js | 1 - .../lib/ckeditor/plugins/justify/lang/ar.js | 1 - .../lib/ckeditor/plugins/justify/lang/bg.js | 1 - .../lib/ckeditor/plugins/justify/lang/bn.js | 1 - .../lib/ckeditor/plugins/justify/lang/bs.js | 1 - .../lib/ckeditor/plugins/justify/lang/ca.js | 1 - .../lib/ckeditor/plugins/justify/lang/cs.js | 1 - .../lib/ckeditor/plugins/justify/lang/cy.js | 1 - .../lib/ckeditor/plugins/justify/lang/da.js | 1 - .../lib/ckeditor/plugins/justify/lang/de.js | 1 - .../lib/ckeditor/plugins/justify/lang/el.js | 1 - .../ckeditor/plugins/justify/lang/en-au.js | 1 - .../ckeditor/plugins/justify/lang/en-ca.js | 1 - .../ckeditor/plugins/justify/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/justify/lang/en.js | 1 - .../lib/ckeditor/plugins/justify/lang/eo.js | 1 - .../lib/ckeditor/plugins/justify/lang/es.js | 1 - .../lib/ckeditor/plugins/justify/lang/et.js | 1 - .../lib/ckeditor/plugins/justify/lang/eu.js | 1 - .../lib/ckeditor/plugins/justify/lang/fa.js | 1 - .../lib/ckeditor/plugins/justify/lang/fi.js | 1 - .../lib/ckeditor/plugins/justify/lang/fo.js | 1 - .../ckeditor/plugins/justify/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/justify/lang/fr.js | 1 - .../lib/ckeditor/plugins/justify/lang/gl.js | 1 - .../lib/ckeditor/plugins/justify/lang/gu.js | 1 - .../lib/ckeditor/plugins/justify/lang/he.js | 1 - .../lib/ckeditor/plugins/justify/lang/hi.js | 1 - .../lib/ckeditor/plugins/justify/lang/hr.js | 1 - .../lib/ckeditor/plugins/justify/lang/hu.js | 1 - .../lib/ckeditor/plugins/justify/lang/id.js | 1 - .../lib/ckeditor/plugins/justify/lang/is.js | 1 - .../lib/ckeditor/plugins/justify/lang/it.js | 1 - .../lib/ckeditor/plugins/justify/lang/ja.js | 1 - .../lib/ckeditor/plugins/justify/lang/ka.js | 1 - .../lib/ckeditor/plugins/justify/lang/km.js | 1 - .../lib/ckeditor/plugins/justify/lang/ko.js | 1 - .../lib/ckeditor/plugins/justify/lang/ku.js | 1 - .../lib/ckeditor/plugins/justify/lang/lt.js | 1 - .../lib/ckeditor/plugins/justify/lang/lv.js | 1 - .../lib/ckeditor/plugins/justify/lang/mk.js | 1 - .../lib/ckeditor/plugins/justify/lang/mn.js | 1 - .../lib/ckeditor/plugins/justify/lang/ms.js | 1 - .../lib/ckeditor/plugins/justify/lang/nb.js | 1 - .../lib/ckeditor/plugins/justify/lang/nl.js | 1 - .../lib/ckeditor/plugins/justify/lang/no.js | 1 - .../lib/ckeditor/plugins/justify/lang/pl.js | 1 - .../ckeditor/plugins/justify/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/justify/lang/pt.js | 1 - .../lib/ckeditor/plugins/justify/lang/ro.js | 1 - .../lib/ckeditor/plugins/justify/lang/ru.js | 1 - .../lib/ckeditor/plugins/justify/lang/si.js | 1 - .../lib/ckeditor/plugins/justify/lang/sk.js | 1 - .../lib/ckeditor/plugins/justify/lang/sl.js | 1 - .../lib/ckeditor/plugins/justify/lang/sq.js | 1 - .../ckeditor/plugins/justify/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/justify/lang/sr.js | 1 - .../lib/ckeditor/plugins/justify/lang/sv.js | 1 - .../lib/ckeditor/plugins/justify/lang/th.js | 1 - .../lib/ckeditor/plugins/justify/lang/tr.js | 1 - .../lib/ckeditor/plugins/justify/lang/tt.js | 1 - .../lib/ckeditor/plugins/justify/lang/ug.js | 1 - .../lib/ckeditor/plugins/justify/lang/uk.js | 1 - .../lib/ckeditor/plugins/justify/lang/vi.js | 1 - .../ckeditor/plugins/justify/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/justify/lang/zh.js | 1 - .../lib/ckeditor/plugins/justify/plugin.js | 12 - .../plugins/language/icons/hidpi/language.png | Bin 1678 -> 0 bytes .../plugins/language/icons/language.png | Bin 668 -> 0 bytes .../lib/ckeditor/plugins/language/lang/ar.js | 5 - .../lib/ckeditor/plugins/language/lang/ca.js | 5 - .../lib/ckeditor/plugins/language/lang/cs.js | 5 - .../lib/ckeditor/plugins/language/lang/cy.js | 5 - .../lib/ckeditor/plugins/language/lang/de.js | 5 - .../lib/ckeditor/plugins/language/lang/el.js | 5 - .../ckeditor/plugins/language/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/language/lang/en.js | 5 - .../lib/ckeditor/plugins/language/lang/eo.js | 5 - .../lib/ckeditor/plugins/language/lang/es.js | 5 - .../lib/ckeditor/plugins/language/lang/fa.js | 5 - .../lib/ckeditor/plugins/language/lang/fi.js | 5 - .../lib/ckeditor/plugins/language/lang/fr.js | 5 - .../lib/ckeditor/plugins/language/lang/gl.js | 5 - .../lib/ckeditor/plugins/language/lang/he.js | 5 - .../lib/ckeditor/plugins/language/lang/hr.js | 5 - .../lib/ckeditor/plugins/language/lang/hu.js | 5 - .../lib/ckeditor/plugins/language/lang/it.js | 5 - .../lib/ckeditor/plugins/language/lang/ja.js | 5 - .../lib/ckeditor/plugins/language/lang/km.js | 5 - .../lib/ckeditor/plugins/language/lang/nb.js | 5 - .../lib/ckeditor/plugins/language/lang/nl.js | 5 - .../lib/ckeditor/plugins/language/lang/no.js | 5 - .../lib/ckeditor/plugins/language/lang/pl.js | 5 - .../ckeditor/plugins/language/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/language/lang/pt.js | 5 - .../lib/ckeditor/plugins/language/lang/ru.js | 5 - .../lib/ckeditor/plugins/language/lang/sk.js | 5 - .../lib/ckeditor/plugins/language/lang/sl.js | 5 - .../lib/ckeditor/plugins/language/lang/sv.js | 5 - .../lib/ckeditor/plugins/language/lang/tr.js | 5 - .../lib/ckeditor/plugins/language/lang/tt.js | 5 - .../lib/ckeditor/plugins/language/lang/uk.js | 5 - .../lib/ckeditor/plugins/language/lang/vi.js | 5 - .../ckeditor/plugins/language/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/language/lang/zh.js | 5 - .../lib/ckeditor/plugins/language/plugin.js | 8 - .../lib/ckeditor/plugins/lineutils/plugin.js | 21 - .../ckeditor/plugins/link/dialogs/anchor.js | 7 - .../lib/ckeditor/plugins/link/dialogs/link.js | 26 - .../ckeditor/plugins/link/images/anchor.png | Bin 589 -> 0 bytes .../plugins/link/images/hidpi/anchor.png | Bin 1379 -> 0 bytes .../plugins/liststyle/dialogs/liststyle.js | 10 - .../lib/ckeditor/plugins/liststyle/lang/af.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ar.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bg.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/bs.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ca.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/cs.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/cy.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/da.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/de.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/el.js | 2 - .../ckeditor/plugins/liststyle/lang/en-au.js | 2 - .../ckeditor/plugins/liststyle/lang/en-ca.js | 2 - .../ckeditor/plugins/liststyle/lang/en-gb.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/en.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/eo.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/es.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/et.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/eu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fa.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fi.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fo.js | 2 - .../ckeditor/plugins/liststyle/lang/fr-ca.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/fr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/gl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/gu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/he.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hi.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/hu.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/id.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/is.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/it.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ja.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ka.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/km.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ko.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ku.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/lt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/lv.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/mk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/mn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ms.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/nb.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/nl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/no.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/pl.js | 2 - .../ckeditor/plugins/liststyle/lang/pt-br.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/pt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ro.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ru.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/si.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sl.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sq.js | 2 - .../plugins/liststyle/lang/sr-latn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/sv.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/th.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/tr.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/tt.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/ug.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/uk.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/vi.js | 2 - .../ckeditor/plugins/liststyle/lang/zh-cn.js | 2 - .../lib/ckeditor/plugins/liststyle/lang/zh.js | 2 - .../lib/ckeditor/plugins/liststyle/plugin.js | 7 - .../magicline/images/hidpi/icon-rtl.png | Bin 176 -> 0 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 199 -> 0 bytes .../plugins/magicline/images/icon-rtl.png | Bin 138 -> 0 bytes .../plugins/magicline/images/icon.png | Bin 133 -> 0 bytes .../plugins/mathjax/dialogs/mathjax.js | 7 - .../plugins/mathjax/icons/hidpi/mathjax.png | Bin 1437 -> 0 bytes .../plugins/mathjax/icons/mathjax.png | Bin 703 -> 0 bytes .../plugins/mathjax/images/loader.gif | Bin 784 -> 0 bytes .../lib/ckeditor/plugins/mathjax/lang/ar.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ca.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/cs.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/cy.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/de.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/el.js | 1 - .../ckeditor/plugins/mathjax/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/en.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/eo.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/es.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fa.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fi.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/fr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/gl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/he.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/hr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/hu.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/it.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ja.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/km.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/nb.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/nl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/no.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/pl.js | 1 - .../ckeditor/plugins/mathjax/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/pt.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ro.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/ru.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sk.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sl.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/sv.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/tr.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/tt.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/uk.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/vi.js | 1 - .../ckeditor/plugins/mathjax/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/mathjax/lang/zh.js | 1 - .../lib/ckeditor/plugins/mathjax/plugin.js | 15 - .../newpage/icons/hidpi/newpage-rtl.png | Bin 1070 -> 0 bytes .../plugins/newpage/icons/hidpi/newpage.png | Bin 1112 -> 0 bytes .../plugins/newpage/icons/newpage-rtl.png | Bin 575 -> 0 bytes .../plugins/newpage/icons/newpage.png | Bin 580 -> 0 bytes .../lib/ckeditor/plugins/newpage/lang/af.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ar.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bg.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/bs.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ca.js | 1 - .../lib/ckeditor/plugins/newpage/lang/cs.js | 1 - .../lib/ckeditor/plugins/newpage/lang/cy.js | 1 - .../lib/ckeditor/plugins/newpage/lang/da.js | 1 - .../lib/ckeditor/plugins/newpage/lang/de.js | 1 - .../lib/ckeditor/plugins/newpage/lang/el.js | 1 - .../ckeditor/plugins/newpage/lang/en-au.js | 1 - .../ckeditor/plugins/newpage/lang/en-ca.js | 1 - .../ckeditor/plugins/newpage/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/newpage/lang/en.js | 1 - .../lib/ckeditor/plugins/newpage/lang/eo.js | 1 - .../lib/ckeditor/plugins/newpage/lang/es.js | 1 - .../lib/ckeditor/plugins/newpage/lang/et.js | 1 - .../lib/ckeditor/plugins/newpage/lang/eu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fa.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fi.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fo.js | 1 - .../ckeditor/plugins/newpage/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/newpage/lang/fr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/gl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/gu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/he.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hi.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/hu.js | 1 - .../lib/ckeditor/plugins/newpage/lang/id.js | 1 - .../lib/ckeditor/plugins/newpage/lang/is.js | 1 - .../lib/ckeditor/plugins/newpage/lang/it.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ja.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ka.js | 1 - .../lib/ckeditor/plugins/newpage/lang/km.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ko.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ku.js | 1 - .../lib/ckeditor/plugins/newpage/lang/lt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/lv.js | 1 - .../lib/ckeditor/plugins/newpage/lang/mk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/mn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ms.js | 1 - .../lib/ckeditor/plugins/newpage/lang/nb.js | 1 - .../lib/ckeditor/plugins/newpage/lang/nl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/no.js | 1 - .../lib/ckeditor/plugins/newpage/lang/pl.js | 1 - .../ckeditor/plugins/newpage/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/newpage/lang/pt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ro.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ru.js | 1 - .../lib/ckeditor/plugins/newpage/lang/si.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sl.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sq.js | 1 - .../ckeditor/plugins/newpage/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/sv.js | 1 - .../lib/ckeditor/plugins/newpage/lang/th.js | 1 - .../lib/ckeditor/plugins/newpage/lang/tr.js | 1 - .../lib/ckeditor/plugins/newpage/lang/tt.js | 1 - .../lib/ckeditor/plugins/newpage/lang/ug.js | 1 - .../lib/ckeditor/plugins/newpage/lang/uk.js | 1 - .../lib/ckeditor/plugins/newpage/lang/vi.js | 1 - .../ckeditor/plugins/newpage/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/newpage/lang/zh.js | 1 - .../lib/ckeditor/plugins/newpage/plugin.js | 6 - .../pagebreak/icons/hidpi/pagebreak-rtl.png | Bin 1318 -> 0 bytes .../pagebreak/icons/hidpi/pagebreak.png | Bin 1299 -> 0 bytes .../plugins/pagebreak/icons/pagebreak-rtl.png | Bin 629 -> 0 bytes .../plugins/pagebreak/icons/pagebreak.png | Bin 602 -> 0 bytes .../plugins/pagebreak/images/pagebreak.gif | Bin 54 -> 0 bytes .../lib/ckeditor/plugins/pagebreak/lang/af.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ar.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bg.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/bs.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ca.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/cs.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/cy.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/da.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/de.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/el.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-au.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-ca.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/en.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/eo.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/es.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/et.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/eu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fa.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fi.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fo.js | 1 - .../ckeditor/plugins/pagebreak/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/fr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/gl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/gu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/he.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hi.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/hu.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/id.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/is.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/it.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ja.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ka.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/km.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ko.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ku.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/lt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/lv.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/mk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/mn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ms.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/nb.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/nl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/no.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/pl.js | 1 - .../ckeditor/plugins/pagebreak/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/pt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ro.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ru.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/si.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sl.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sq.js | 1 - .../plugins/pagebreak/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/sv.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/th.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/tr.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/tt.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/ug.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/uk.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/vi.js | 1 - .../ckeditor/plugins/pagebreak/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/pagebreak/lang/zh.js | 1 - .../lib/ckeditor/plugins/pagebreak/plugin.js | 9 - .../ckeditor/plugins/panelbutton/plugin.js | 8 - .../plugins/pastefromword/filter/default.js | 31 - .../placeholder/dialogs/placeholder.js | 5 - .../placeholder/icons/hidpi/placeholder.png | Bin 1775 -> 0 bytes .../plugins/placeholder/icons/placeholder.png | Bin 714 -> 0 bytes .../ckeditor/plugins/placeholder/lang/ar.js | 5 - .../ckeditor/plugins/placeholder/lang/bg.js | 5 - .../ckeditor/plugins/placeholder/lang/ca.js | 5 - .../ckeditor/plugins/placeholder/lang/cs.js | 5 - .../ckeditor/plugins/placeholder/lang/cy.js | 5 - .../ckeditor/plugins/placeholder/lang/da.js | 5 - .../ckeditor/plugins/placeholder/lang/de.js | 5 - .../ckeditor/plugins/placeholder/lang/el.js | 5 - .../plugins/placeholder/lang/en-gb.js | 5 - .../ckeditor/plugins/placeholder/lang/en.js | 5 - .../ckeditor/plugins/placeholder/lang/eo.js | 5 - .../ckeditor/plugins/placeholder/lang/es.js | 5 - .../ckeditor/plugins/placeholder/lang/et.js | 5 - .../ckeditor/plugins/placeholder/lang/eu.js | 5 - .../ckeditor/plugins/placeholder/lang/fa.js | 5 - .../ckeditor/plugins/placeholder/lang/fi.js | 5 - .../plugins/placeholder/lang/fr-ca.js | 5 - .../ckeditor/plugins/placeholder/lang/fr.js | 5 - .../ckeditor/plugins/placeholder/lang/gl.js | 5 - .../ckeditor/plugins/placeholder/lang/he.js | 5 - .../ckeditor/plugins/placeholder/lang/hr.js | 5 - .../ckeditor/plugins/placeholder/lang/hu.js | 5 - .../ckeditor/plugins/placeholder/lang/id.js | 5 - .../ckeditor/plugins/placeholder/lang/it.js | 5 - .../ckeditor/plugins/placeholder/lang/ja.js | 5 - .../ckeditor/plugins/placeholder/lang/km.js | 5 - .../ckeditor/plugins/placeholder/lang/ko.js | 5 - .../ckeditor/plugins/placeholder/lang/ku.js | 5 - .../ckeditor/plugins/placeholder/lang/lv.js | 5 - .../ckeditor/plugins/placeholder/lang/nb.js | 5 - .../ckeditor/plugins/placeholder/lang/nl.js | 5 - .../ckeditor/plugins/placeholder/lang/no.js | 5 - .../ckeditor/plugins/placeholder/lang/pl.js | 5 - .../plugins/placeholder/lang/pt-br.js | 5 - .../ckeditor/plugins/placeholder/lang/pt.js | 5 - .../ckeditor/plugins/placeholder/lang/ru.js | 5 - .../ckeditor/plugins/placeholder/lang/si.js | 5 - .../ckeditor/plugins/placeholder/lang/sk.js | 5 - .../ckeditor/plugins/placeholder/lang/sl.js | 5 - .../ckeditor/plugins/placeholder/lang/sq.js | 5 - .../ckeditor/plugins/placeholder/lang/sv.js | 5 - .../ckeditor/plugins/placeholder/lang/th.js | 5 - .../ckeditor/plugins/placeholder/lang/tr.js | 5 - .../ckeditor/plugins/placeholder/lang/tt.js | 5 - .../ckeditor/plugins/placeholder/lang/ug.js | 5 - .../ckeditor/plugins/placeholder/lang/uk.js | 5 - .../ckeditor/plugins/placeholder/lang/vi.js | 5 - .../plugins/placeholder/lang/zh-cn.js | 5 - .../ckeditor/plugins/placeholder/lang/zh.js | 5 - .../ckeditor/plugins/placeholder/plugin.js | 7 - .../preview/icons/hidpi/preview-rtl.png | Bin 2145 -> 0 bytes .../plugins/preview/icons/hidpi/preview.png | Bin 2204 -> 0 bytes .../plugins/preview/icons/preview-rtl.png | Bin 850 -> 0 bytes .../plugins/preview/icons/preview.png | Bin 855 -> 0 bytes .../lib/ckeditor/plugins/preview/lang/af.js | 1 - .../lib/ckeditor/plugins/preview/lang/ar.js | 1 - .../lib/ckeditor/plugins/preview/lang/bg.js | 1 - .../lib/ckeditor/plugins/preview/lang/bn.js | 1 - .../lib/ckeditor/plugins/preview/lang/bs.js | 1 - .../lib/ckeditor/plugins/preview/lang/ca.js | 1 - .../lib/ckeditor/plugins/preview/lang/cs.js | 1 - .../lib/ckeditor/plugins/preview/lang/cy.js | 1 - .../lib/ckeditor/plugins/preview/lang/da.js | 1 - .../lib/ckeditor/plugins/preview/lang/de.js | 1 - .../lib/ckeditor/plugins/preview/lang/el.js | 1 - .../ckeditor/plugins/preview/lang/en-au.js | 1 - .../ckeditor/plugins/preview/lang/en-ca.js | 1 - .../ckeditor/plugins/preview/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/preview/lang/en.js | 1 - .../lib/ckeditor/plugins/preview/lang/eo.js | 1 - .../lib/ckeditor/plugins/preview/lang/es.js | 1 - .../lib/ckeditor/plugins/preview/lang/et.js | 1 - .../lib/ckeditor/plugins/preview/lang/eu.js | 1 - .../lib/ckeditor/plugins/preview/lang/fa.js | 1 - .../lib/ckeditor/plugins/preview/lang/fi.js | 1 - .../lib/ckeditor/plugins/preview/lang/fo.js | 1 - .../ckeditor/plugins/preview/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/preview/lang/fr.js | 1 - .../lib/ckeditor/plugins/preview/lang/gl.js | 1 - .../lib/ckeditor/plugins/preview/lang/gu.js | 1 - .../lib/ckeditor/plugins/preview/lang/he.js | 1 - .../lib/ckeditor/plugins/preview/lang/hi.js | 1 - .../lib/ckeditor/plugins/preview/lang/hr.js | 1 - .../lib/ckeditor/plugins/preview/lang/hu.js | 1 - .../lib/ckeditor/plugins/preview/lang/id.js | 1 - .../lib/ckeditor/plugins/preview/lang/is.js | 1 - .../lib/ckeditor/plugins/preview/lang/it.js | 1 - .../lib/ckeditor/plugins/preview/lang/ja.js | 1 - .../lib/ckeditor/plugins/preview/lang/ka.js | 1 - .../lib/ckeditor/plugins/preview/lang/km.js | 1 - .../lib/ckeditor/plugins/preview/lang/ko.js | 1 - .../lib/ckeditor/plugins/preview/lang/ku.js | 1 - .../lib/ckeditor/plugins/preview/lang/lt.js | 1 - .../lib/ckeditor/plugins/preview/lang/lv.js | 1 - .../lib/ckeditor/plugins/preview/lang/mk.js | 1 - .../lib/ckeditor/plugins/preview/lang/mn.js | 1 - .../lib/ckeditor/plugins/preview/lang/ms.js | 1 - .../lib/ckeditor/plugins/preview/lang/nb.js | 1 - .../lib/ckeditor/plugins/preview/lang/nl.js | 1 - .../lib/ckeditor/plugins/preview/lang/no.js | 1 - .../lib/ckeditor/plugins/preview/lang/pl.js | 1 - .../ckeditor/plugins/preview/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/preview/lang/pt.js | 1 - .../lib/ckeditor/plugins/preview/lang/ro.js | 1 - .../lib/ckeditor/plugins/preview/lang/ru.js | 1 - .../lib/ckeditor/plugins/preview/lang/si.js | 1 - .../lib/ckeditor/plugins/preview/lang/sk.js | 1 - .../lib/ckeditor/plugins/preview/lang/sl.js | 1 - .../lib/ckeditor/plugins/preview/lang/sq.js | 1 - .../ckeditor/plugins/preview/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/preview/lang/sr.js | 1 - .../lib/ckeditor/plugins/preview/lang/sv.js | 1 - .../lib/ckeditor/plugins/preview/lang/th.js | 1 - .../lib/ckeditor/plugins/preview/lang/tr.js | 1 - .../lib/ckeditor/plugins/preview/lang/tt.js | 1 - .../lib/ckeditor/plugins/preview/lang/ug.js | 1 - .../lib/ckeditor/plugins/preview/lang/uk.js | 1 - .../lib/ckeditor/plugins/preview/lang/vi.js | 1 - .../ckeditor/plugins/preview/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/preview/lang/zh.js | 1 - .../lib/ckeditor/plugins/preview/plugin.js | 9 - .../lib/ckeditor/plugins/preview/preview.html | 13 - .../plugins/print/icons/hidpi/print.png | Bin 1648 -> 0 bytes .../ckeditor/plugins/print/icons/print.png | Bin 765 -> 0 bytes .../www/lib/ckeditor/plugins/print/lang/af.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/print/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/print/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/print/lang/da.js | 1 - .../www/lib/ckeditor/plugins/print/lang/de.js | 1 - .../www/lib/ckeditor/plugins/print/lang/el.js | 1 - .../lib/ckeditor/plugins/print/lang/en-au.js | 1 - .../lib/ckeditor/plugins/print/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/print/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/print/lang/en.js | 1 - .../www/lib/ckeditor/plugins/print/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/print/lang/es.js | 1 - .../www/lib/ckeditor/plugins/print/lang/et.js | 1 - .../www/lib/ckeditor/plugins/print/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fo.js | 1 - .../lib/ckeditor/plugins/print/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/print/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/he.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/print/lang/id.js | 1 - .../www/lib/ckeditor/plugins/print/lang/is.js | 1 - .../www/lib/ckeditor/plugins/print/lang/it.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/print/lang/km.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/print/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/print/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/print/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/print/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/no.js | 1 - .../www/lib/ckeditor/plugins/print/lang/pl.js | 1 - .../lib/ckeditor/plugins/print/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/print/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/print/lang/si.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sq.js | 1 - .../ckeditor/plugins/print/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/print/lang/th.js | 1 - .../www/lib/ckeditor/plugins/print/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/print/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/print/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/print/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/print/lang/vi.js | 1 - .../lib/ckeditor/plugins/print/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/print/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/print/plugin.js | 6 - .../plugins/save/icons/hidpi/save.png | Bin 1648 -> 0 bytes .../lib/ckeditor/plugins/save/icons/save.png | Bin 716 -> 0 bytes .../www/lib/ckeditor/plugins/save/lang/af.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ar.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bg.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/bs.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ca.js | 1 - .../www/lib/ckeditor/plugins/save/lang/cs.js | 1 - .../www/lib/ckeditor/plugins/save/lang/cy.js | 1 - .../www/lib/ckeditor/plugins/save/lang/da.js | 1 - .../www/lib/ckeditor/plugins/save/lang/de.js | 1 - .../www/lib/ckeditor/plugins/save/lang/el.js | 1 - .../lib/ckeditor/plugins/save/lang/en-au.js | 1 - .../lib/ckeditor/plugins/save/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/save/lang/en-gb.js | 1 - .../www/lib/ckeditor/plugins/save/lang/en.js | 1 - .../www/lib/ckeditor/plugins/save/lang/eo.js | 1 - .../www/lib/ckeditor/plugins/save/lang/es.js | 1 - .../www/lib/ckeditor/plugins/save/lang/et.js | 1 - .../www/lib/ckeditor/plugins/save/lang/eu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fa.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fi.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fo.js | 1 - .../lib/ckeditor/plugins/save/lang/fr-ca.js | 1 - .../www/lib/ckeditor/plugins/save/lang/fr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/gl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/gu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/he.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hi.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/hu.js | 1 - .../www/lib/ckeditor/plugins/save/lang/id.js | 1 - .../www/lib/ckeditor/plugins/save/lang/is.js | 1 - .../www/lib/ckeditor/plugins/save/lang/it.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ja.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ka.js | 1 - .../www/lib/ckeditor/plugins/save/lang/km.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ko.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ku.js | 1 - .../www/lib/ckeditor/plugins/save/lang/lt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/lv.js | 1 - .../www/lib/ckeditor/plugins/save/lang/mk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/mn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ms.js | 1 - .../www/lib/ckeditor/plugins/save/lang/nb.js | 1 - .../www/lib/ckeditor/plugins/save/lang/nl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/no.js | 1 - .../www/lib/ckeditor/plugins/save/lang/pl.js | 1 - .../lib/ckeditor/plugins/save/lang/pt-br.js | 1 - .../www/lib/ckeditor/plugins/save/lang/pt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ro.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ru.js | 1 - .../www/lib/ckeditor/plugins/save/lang/si.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sl.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sq.js | 1 - .../lib/ckeditor/plugins/save/lang/sr-latn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/sv.js | 1 - .../www/lib/ckeditor/plugins/save/lang/th.js | 1 - .../www/lib/ckeditor/plugins/save/lang/tr.js | 1 - .../www/lib/ckeditor/plugins/save/lang/tt.js | 1 - .../www/lib/ckeditor/plugins/save/lang/ug.js | 1 - .../www/lib/ckeditor/plugins/save/lang/uk.js | 1 - .../www/lib/ckeditor/plugins/save/lang/vi.js | 1 - .../lib/ckeditor/plugins/save/lang/zh-cn.js | 1 - .../www/lib/ckeditor/plugins/save/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/save/plugin.js | 6 - .../www/lib/ckeditor/plugins/scayt/LICENSE.md | 28 - .../ckeditor/plugins/scayt/dialogs/options.js | 17 - .../plugins/scayt/dialogs/toolbar.css | 71 - .../selectall/icons/hidpi/selectall.png | Bin 1093 -> 0 bytes .../plugins/selectall/icons/selectall.png | Bin 665 -> 0 bytes .../lib/ckeditor/plugins/selectall/lang/af.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ar.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bg.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/bs.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ca.js | 1 - .../lib/ckeditor/plugins/selectall/lang/cs.js | 1 - .../lib/ckeditor/plugins/selectall/lang/cy.js | 1 - .../lib/ckeditor/plugins/selectall/lang/da.js | 1 - .../lib/ckeditor/plugins/selectall/lang/de.js | 1 - .../lib/ckeditor/plugins/selectall/lang/el.js | 1 - .../ckeditor/plugins/selectall/lang/en-au.js | 1 - .../ckeditor/plugins/selectall/lang/en-ca.js | 1 - .../ckeditor/plugins/selectall/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/selectall/lang/en.js | 1 - .../lib/ckeditor/plugins/selectall/lang/eo.js | 1 - .../lib/ckeditor/plugins/selectall/lang/es.js | 1 - .../lib/ckeditor/plugins/selectall/lang/et.js | 1 - .../lib/ckeditor/plugins/selectall/lang/eu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fa.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fi.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fo.js | 1 - .../ckeditor/plugins/selectall/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/selectall/lang/fr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/gl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/gu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/he.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hi.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/hu.js | 1 - .../lib/ckeditor/plugins/selectall/lang/id.js | 1 - .../lib/ckeditor/plugins/selectall/lang/is.js | 1 - .../lib/ckeditor/plugins/selectall/lang/it.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ja.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ka.js | 1 - .../lib/ckeditor/plugins/selectall/lang/km.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ko.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ku.js | 1 - .../lib/ckeditor/plugins/selectall/lang/lt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/lv.js | 1 - .../lib/ckeditor/plugins/selectall/lang/mk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/mn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ms.js | 1 - .../lib/ckeditor/plugins/selectall/lang/nb.js | 1 - .../lib/ckeditor/plugins/selectall/lang/nl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/no.js | 1 - .../lib/ckeditor/plugins/selectall/lang/pl.js | 1 - .../ckeditor/plugins/selectall/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/selectall/lang/pt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ro.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ru.js | 1 - .../lib/ckeditor/plugins/selectall/lang/si.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sl.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sq.js | 1 - .../plugins/selectall/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/sv.js | 1 - .../lib/ckeditor/plugins/selectall/lang/th.js | 1 - .../lib/ckeditor/plugins/selectall/lang/tr.js | 1 - .../lib/ckeditor/plugins/selectall/lang/tt.js | 1 - .../lib/ckeditor/plugins/selectall/lang/ug.js | 1 - .../lib/ckeditor/plugins/selectall/lang/uk.js | 1 - .../lib/ckeditor/plugins/selectall/lang/vi.js | 1 - .../ckeditor/plugins/selectall/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/selectall/lang/zh.js | 1 - .../lib/ckeditor/plugins/selectall/plugin.js | 6 - .../ckeditor/plugins/sharedspace/plugin.js | 7 - .../showblocks/icons/hidpi/showblocks-rtl.png | Bin 1853 -> 0 bytes .../showblocks/icons/hidpi/showblocks.png | Bin 1895 -> 0 bytes .../showblocks/icons/showblocks-rtl.png | Bin 691 -> 0 bytes .../plugins/showblocks/icons/showblocks.png | Bin 701 -> 0 bytes .../showblocks/images/block_address.png | Bin 152 -> 0 bytes .../showblocks/images/block_blockquote.png | Bin 154 -> 0 bytes .../plugins/showblocks/images/block_div.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h1.png | Bin 120 -> 0 bytes .../plugins/showblocks/images/block_h2.png | Bin 127 -> 0 bytes .../plugins/showblocks/images/block_h3.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h4.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_h5.png | Bin 126 -> 0 bytes .../plugins/showblocks/images/block_h6.png | Bin 123 -> 0 bytes .../plugins/showblocks/images/block_p.png | Bin 115 -> 0 bytes .../plugins/showblocks/images/block_pre.png | Bin 128 -> 0 bytes .../ckeditor/plugins/showblocks/lang/af.js | 1 - .../ckeditor/plugins/showblocks/lang/ar.js | 1 - .../ckeditor/plugins/showblocks/lang/bg.js | 1 - .../ckeditor/plugins/showblocks/lang/bn.js | 1 - .../ckeditor/plugins/showblocks/lang/bs.js | 1 - .../ckeditor/plugins/showblocks/lang/ca.js | 1 - .../ckeditor/plugins/showblocks/lang/cs.js | 1 - .../ckeditor/plugins/showblocks/lang/cy.js | 1 - .../ckeditor/plugins/showblocks/lang/da.js | 1 - .../ckeditor/plugins/showblocks/lang/de.js | 1 - .../ckeditor/plugins/showblocks/lang/el.js | 1 - .../ckeditor/plugins/showblocks/lang/en-au.js | 1 - .../ckeditor/plugins/showblocks/lang/en-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/en-gb.js | 1 - .../ckeditor/plugins/showblocks/lang/en.js | 1 - .../ckeditor/plugins/showblocks/lang/eo.js | 1 - .../ckeditor/plugins/showblocks/lang/es.js | 1 - .../ckeditor/plugins/showblocks/lang/et.js | 1 - .../ckeditor/plugins/showblocks/lang/eu.js | 1 - .../ckeditor/plugins/showblocks/lang/fa.js | 1 - .../ckeditor/plugins/showblocks/lang/fi.js | 1 - .../ckeditor/plugins/showblocks/lang/fo.js | 1 - .../ckeditor/plugins/showblocks/lang/fr-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/fr.js | 1 - .../ckeditor/plugins/showblocks/lang/gl.js | 1 - .../ckeditor/plugins/showblocks/lang/gu.js | 1 - .../ckeditor/plugins/showblocks/lang/he.js | 1 - .../ckeditor/plugins/showblocks/lang/hi.js | 1 - .../ckeditor/plugins/showblocks/lang/hr.js | 1 - .../ckeditor/plugins/showblocks/lang/hu.js | 1 - .../ckeditor/plugins/showblocks/lang/id.js | 1 - .../ckeditor/plugins/showblocks/lang/is.js | 1 - .../ckeditor/plugins/showblocks/lang/it.js | 1 - .../ckeditor/plugins/showblocks/lang/ja.js | 1 - .../ckeditor/plugins/showblocks/lang/ka.js | 1 - .../ckeditor/plugins/showblocks/lang/km.js | 1 - .../ckeditor/plugins/showblocks/lang/ko.js | 1 - .../ckeditor/plugins/showblocks/lang/ku.js | 1 - .../ckeditor/plugins/showblocks/lang/lt.js | 1 - .../ckeditor/plugins/showblocks/lang/lv.js | 1 - .../ckeditor/plugins/showblocks/lang/mk.js | 1 - .../ckeditor/plugins/showblocks/lang/mn.js | 1 - .../ckeditor/plugins/showblocks/lang/ms.js | 1 - .../ckeditor/plugins/showblocks/lang/nb.js | 1 - .../ckeditor/plugins/showblocks/lang/nl.js | 1 - .../ckeditor/plugins/showblocks/lang/no.js | 1 - .../ckeditor/plugins/showblocks/lang/pl.js | 1 - .../ckeditor/plugins/showblocks/lang/pt-br.js | 1 - .../ckeditor/plugins/showblocks/lang/pt.js | 1 - .../ckeditor/plugins/showblocks/lang/ro.js | 1 - .../ckeditor/plugins/showblocks/lang/ru.js | 1 - .../ckeditor/plugins/showblocks/lang/si.js | 1 - .../ckeditor/plugins/showblocks/lang/sk.js | 1 - .../ckeditor/plugins/showblocks/lang/sl.js | 1 - .../ckeditor/plugins/showblocks/lang/sq.js | 1 - .../plugins/showblocks/lang/sr-latn.js | 1 - .../ckeditor/plugins/showblocks/lang/sr.js | 1 - .../ckeditor/plugins/showblocks/lang/sv.js | 1 - .../ckeditor/plugins/showblocks/lang/th.js | 1 - .../ckeditor/plugins/showblocks/lang/tr.js | 1 - .../ckeditor/plugins/showblocks/lang/tt.js | 1 - .../ckeditor/plugins/showblocks/lang/ug.js | 1 - .../ckeditor/plugins/showblocks/lang/uk.js | 1 - .../ckeditor/plugins/showblocks/lang/vi.js | 1 - .../ckeditor/plugins/showblocks/lang/zh-cn.js | 1 - .../ckeditor/plugins/showblocks/lang/zh.js | 1 - .../lib/ckeditor/plugins/showblocks/plugin.js | 9 - .../ckeditor/plugins/smiley/dialogs/smiley.js | 10 - .../plugins/smiley/icons/hidpi/smiley.png | Bin 3073 -> 0 bytes .../ckeditor/plugins/smiley/icons/smiley.png | Bin 916 -> 0 bytes .../plugins/smiley/images/angel_smile.gif | Bin 1245 -> 0 bytes .../plugins/smiley/images/angel_smile.png | Bin 1172 -> 0 bytes .../plugins/smiley/images/angry_smile.gif | Bin 1219 -> 0 bytes .../plugins/smiley/images/angry_smile.png | Bin 1220 -> 0 bytes .../plugins/smiley/images/broken_heart.gif | Bin 732 -> 0 bytes .../plugins/smiley/images/broken_heart.png | Bin 1139 -> 0 bytes .../plugins/smiley/images/confused_smile.gif | Bin 1202 -> 0 bytes .../plugins/smiley/images/confused_smile.png | Bin 1101 -> 0 bytes .../plugins/smiley/images/cry_smile.gif | Bin 795 -> 0 bytes .../plugins/smiley/images/cry_smile.png | Bin 1214 -> 0 bytes .../plugins/smiley/images/devil_smile.gif | Bin 1239 -> 0 bytes .../plugins/smiley/images/devil_smile.png | Bin 1220 -> 0 bytes .../smiley/images/embaressed_smile.gif | Bin 786 -> 0 bytes .../smiley/images/embarrassed_smile.gif | Bin 786 -> 0 bytes .../smiley/images/embarrassed_smile.png | Bin 1145 -> 0 bytes .../plugins/smiley/images/envelope.gif | Bin 506 -> 0 bytes .../plugins/smiley/images/envelope.png | Bin 760 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.gif | Bin 692 -> 0 bytes .../ckeditor/plugins/smiley/images/heart.png | Bin 999 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.gif | Bin 683 -> 0 bytes .../ckeditor/plugins/smiley/images/kiss.png | Bin 1003 -> 0 bytes .../plugins/smiley/images/lightbulb.gif | Bin 660 -> 0 bytes .../plugins/smiley/images/lightbulb.png | Bin 919 -> 0 bytes .../plugins/smiley/images/omg_smile.gif | Bin 820 -> 0 bytes .../plugins/smiley/images/omg_smile.png | Bin 1122 -> 0 bytes .../plugins/smiley/images/regular_smile.gif | Bin 1209 -> 0 bytes .../plugins/smiley/images/regular_smile.png | Bin 1084 -> 0 bytes .../plugins/smiley/images/sad_smile.gif | Bin 782 -> 0 bytes .../plugins/smiley/images/sad_smile.png | Bin 1115 -> 0 bytes .../plugins/smiley/images/shades_smile.gif | Bin 1231 -> 0 bytes .../plugins/smiley/images/shades_smile.png | Bin 1204 -> 0 bytes .../plugins/smiley/images/teeth_smile.gif | Bin 1201 -> 0 bytes .../plugins/smiley/images/teeth_smile.png | Bin 1183 -> 0 bytes .../plugins/smiley/images/thumbs_down.gif | Bin 715 -> 0 bytes .../plugins/smiley/images/thumbs_down.png | Bin 985 -> 0 bytes .../plugins/smiley/images/thumbs_up.gif | Bin 714 -> 0 bytes .../plugins/smiley/images/thumbs_up.png | Bin 959 -> 0 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 1210 -> 0 bytes .../plugins/smiley/images/tongue_smile.png | Bin 1132 -> 0 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 1210 -> 0 bytes .../images/whatchutalkingabout_smile.gif | Bin 775 -> 0 bytes .../images/whatchutalkingabout_smile.png | Bin 1039 -> 0 bytes .../plugins/smiley/images/wink_smile.gif | Bin 1202 -> 0 bytes .../plugins/smiley/images/wink_smile.png | Bin 1114 -> 0 bytes .../lib/ckeditor/plugins/smiley/lang/af.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ar.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bg.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/bs.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/cs.js | 1 - .../lib/ckeditor/plugins/smiley/lang/cy.js | 1 - .../lib/ckeditor/plugins/smiley/lang/da.js | 1 - .../lib/ckeditor/plugins/smiley/lang/de.js | 1 - .../lib/ckeditor/plugins/smiley/lang/el.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-au.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/smiley/lang/en.js | 1 - .../lib/ckeditor/plugins/smiley/lang/eo.js | 1 - .../lib/ckeditor/plugins/smiley/lang/es.js | 1 - .../lib/ckeditor/plugins/smiley/lang/et.js | 1 - .../lib/ckeditor/plugins/smiley/lang/eu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fa.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fo.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/smiley/lang/fr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/gl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/gu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/he.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/hu.js | 1 - .../lib/ckeditor/plugins/smiley/lang/id.js | 1 - .../lib/ckeditor/plugins/smiley/lang/is.js | 1 - .../lib/ckeditor/plugins/smiley/lang/it.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ja.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ka.js | 1 - .../lib/ckeditor/plugins/smiley/lang/km.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ko.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ku.js | 1 - .../lib/ckeditor/plugins/smiley/lang/lt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/lv.js | 1 - .../lib/ckeditor/plugins/smiley/lang/mk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/mn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ms.js | 1 - .../lib/ckeditor/plugins/smiley/lang/nb.js | 1 - .../lib/ckeditor/plugins/smiley/lang/nl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/no.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/smiley/lang/pt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ro.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ru.js | 1 - .../lib/ckeditor/plugins/smiley/lang/si.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sl.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sq.js | 1 - .../ckeditor/plugins/smiley/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/sv.js | 1 - .../lib/ckeditor/plugins/smiley/lang/th.js | 1 - .../lib/ckeditor/plugins/smiley/lang/tr.js | 1 - .../lib/ckeditor/plugins/smiley/lang/tt.js | 1 - .../lib/ckeditor/plugins/smiley/lang/ug.js | 1 - .../lib/ckeditor/plugins/smiley/lang/uk.js | 1 - .../lib/ckeditor/plugins/smiley/lang/vi.js | 1 - .../lib/ckeditor/plugins/smiley/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/smiley/lang/zh.js | 1 - .../www/lib/ckeditor/plugins/smiley/plugin.js | 7 - .../sourcedialog/dialogs/sourcedialog.js | 6 - .../icons/hidpi/sourcedialog-rtl.png | Bin 1968 -> 0 bytes .../sourcedialog/icons/hidpi/sourcedialog.png | Bin 1999 -> 0 bytes .../sourcedialog/icons/sourcedialog-rtl.png | Bin 762 -> 0 bytes .../sourcedialog/icons/sourcedialog.png | Bin 764 -> 0 bytes .../ckeditor/plugins/sourcedialog/lang/af.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ar.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bg.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/bs.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ca.js | 1 - .../ckeditor/plugins/sourcedialog/lang/cs.js | 1 - .../ckeditor/plugins/sourcedialog/lang/cy.js | 1 - .../ckeditor/plugins/sourcedialog/lang/da.js | 1 - .../ckeditor/plugins/sourcedialog/lang/de.js | 1 - .../ckeditor/plugins/sourcedialog/lang/el.js | 1 - .../plugins/sourcedialog/lang/en-au.js | 1 - .../plugins/sourcedialog/lang/en-ca.js | 1 - .../plugins/sourcedialog/lang/en-gb.js | 1 - .../ckeditor/plugins/sourcedialog/lang/en.js | 1 - .../ckeditor/plugins/sourcedialog/lang/eo.js | 1 - .../ckeditor/plugins/sourcedialog/lang/es.js | 1 - .../ckeditor/plugins/sourcedialog/lang/et.js | 1 - .../ckeditor/plugins/sourcedialog/lang/eu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fa.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fi.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fo.js | 1 - .../plugins/sourcedialog/lang/fr-ca.js | 1 - .../ckeditor/plugins/sourcedialog/lang/fr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/gl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/gu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/he.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hi.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/hu.js | 1 - .../ckeditor/plugins/sourcedialog/lang/id.js | 1 - .../ckeditor/plugins/sourcedialog/lang/is.js | 1 - .../ckeditor/plugins/sourcedialog/lang/it.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ja.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ka.js | 1 - .../ckeditor/plugins/sourcedialog/lang/km.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ko.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ku.js | 1 - .../ckeditor/plugins/sourcedialog/lang/lt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/lv.js | 1 - .../ckeditor/plugins/sourcedialog/lang/mn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ms.js | 1 - .../ckeditor/plugins/sourcedialog/lang/nb.js | 1 - .../ckeditor/plugins/sourcedialog/lang/nl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/no.js | 1 - .../ckeditor/plugins/sourcedialog/lang/pl.js | 1 - .../plugins/sourcedialog/lang/pt-br.js | 1 - .../ckeditor/plugins/sourcedialog/lang/pt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ro.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ru.js | 1 - .../ckeditor/plugins/sourcedialog/lang/si.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sk.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sl.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sq.js | 1 - .../plugins/sourcedialog/lang/sr-latn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/sv.js | 1 - .../ckeditor/plugins/sourcedialog/lang/th.js | 1 - .../ckeditor/plugins/sourcedialog/lang/tr.js | 1 - .../ckeditor/plugins/sourcedialog/lang/tt.js | 1 - .../ckeditor/plugins/sourcedialog/lang/ug.js | 1 - .../ckeditor/plugins/sourcedialog/lang/uk.js | 1 - .../ckeditor/plugins/sourcedialog/lang/vi.js | 1 - .../plugins/sourcedialog/lang/zh-cn.js | 1 - .../ckeditor/plugins/sourcedialog/lang/zh.js | 1 - .../ckeditor/plugins/sourcedialog/plugin.js | 6 - .../dialogs/lang/_translationstatus.txt | 20 - .../plugins/specialchar/dialogs/lang/ar.js | 13 - .../plugins/specialchar/dialogs/lang/bg.js | 13 - .../plugins/specialchar/dialogs/lang/ca.js | 14 - .../plugins/specialchar/dialogs/lang/cs.js | 13 - .../plugins/specialchar/dialogs/lang/cy.js | 14 - .../plugins/specialchar/dialogs/lang/de.js | 13 - .../plugins/specialchar/dialogs/lang/el.js | 13 - .../plugins/specialchar/dialogs/lang/en-gb.js | 13 - .../plugins/specialchar/dialogs/lang/en.js | 13 - .../plugins/specialchar/dialogs/lang/eo.js | 12 - .../plugins/specialchar/dialogs/lang/es.js | 13 - .../plugins/specialchar/dialogs/lang/et.js | 13 - .../plugins/specialchar/dialogs/lang/fa.js | 12 - .../plugins/specialchar/dialogs/lang/fi.js | 13 - .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 - .../plugins/specialchar/dialogs/lang/fr.js | 11 - .../plugins/specialchar/dialogs/lang/gl.js | 13 - .../plugins/specialchar/dialogs/lang/he.js | 12 - .../plugins/specialchar/dialogs/lang/hr.js | 13 - .../plugins/specialchar/dialogs/lang/hu.js | 12 - .../plugins/specialchar/dialogs/lang/id.js | 13 - .../plugins/specialchar/dialogs/lang/it.js | 14 - .../plugins/specialchar/dialogs/lang/ja.js | 9 - .../plugins/specialchar/dialogs/lang/km.js | 13 - .../plugins/specialchar/dialogs/lang/ku.js | 13 - .../plugins/specialchar/dialogs/lang/lv.js | 13 - .../plugins/specialchar/dialogs/lang/nb.js | 11 - .../plugins/specialchar/dialogs/lang/nl.js | 13 - .../plugins/specialchar/dialogs/lang/no.js | 11 - .../plugins/specialchar/dialogs/lang/pl.js | 12 - .../plugins/specialchar/dialogs/lang/pt-br.js | 11 - .../plugins/specialchar/dialogs/lang/pt.js | 13 - .../plugins/specialchar/dialogs/lang/ru.js | 13 - .../plugins/specialchar/dialogs/lang/si.js | 13 - .../plugins/specialchar/dialogs/lang/sk.js | 13 - .../plugins/specialchar/dialogs/lang/sl.js | 12 - .../plugins/specialchar/dialogs/lang/sq.js | 13 - .../plugins/specialchar/dialogs/lang/sv.js | 11 - .../plugins/specialchar/dialogs/lang/th.js | 13 - .../plugins/specialchar/dialogs/lang/tr.js | 12 - .../plugins/specialchar/dialogs/lang/tt.js | 13 - .../plugins/specialchar/dialogs/lang/ug.js | 13 - .../plugins/specialchar/dialogs/lang/uk.js | 12 - .../plugins/specialchar/dialogs/lang/vi.js | 14 - .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 - .../plugins/specialchar/dialogs/lang/zh.js | 12 - .../specialchar/dialogs/specialchar.js | 14 - .../plugins/stylesheetparser/plugin.js | 7 - .../ckeditor/plugins/table/dialogs/table.js | 21 - .../ckeditor/plugins/tableresize/plugin.js | 13 - .../plugins/tabletools/dialogs/tableCell.js | 17 - .../plugins/templates/dialogs/templates.css | 84 - .../plugins/templates/dialogs/templates.js | 10 - .../templates/icons/hidpi/templates-rtl.png | Bin 1387 -> 0 bytes .../templates/icons/hidpi/templates.png | Bin 1387 -> 0 bytes .../plugins/templates/icons/templates-rtl.png | Bin 639 -> 0 bytes .../plugins/templates/icons/templates.png | Bin 639 -> 0 bytes .../lib/ckeditor/plugins/templates/lang/af.js | 1 - .../lib/ckeditor/plugins/templates/lang/ar.js | 1 - .../lib/ckeditor/plugins/templates/lang/bg.js | 1 - .../lib/ckeditor/plugins/templates/lang/bn.js | 1 - .../lib/ckeditor/plugins/templates/lang/bs.js | 1 - .../lib/ckeditor/plugins/templates/lang/ca.js | 1 - .../lib/ckeditor/plugins/templates/lang/cs.js | 1 - .../lib/ckeditor/plugins/templates/lang/cy.js | 1 - .../lib/ckeditor/plugins/templates/lang/da.js | 1 - .../lib/ckeditor/plugins/templates/lang/de.js | 1 - .../lib/ckeditor/plugins/templates/lang/el.js | 1 - .../ckeditor/plugins/templates/lang/en-au.js | 1 - .../ckeditor/plugins/templates/lang/en-ca.js | 1 - .../ckeditor/plugins/templates/lang/en-gb.js | 1 - .../lib/ckeditor/plugins/templates/lang/en.js | 1 - .../lib/ckeditor/plugins/templates/lang/eo.js | 1 - .../lib/ckeditor/plugins/templates/lang/es.js | 1 - .../lib/ckeditor/plugins/templates/lang/et.js | 1 - .../lib/ckeditor/plugins/templates/lang/eu.js | 1 - .../lib/ckeditor/plugins/templates/lang/fa.js | 1 - .../lib/ckeditor/plugins/templates/lang/fi.js | 1 - .../lib/ckeditor/plugins/templates/lang/fo.js | 1 - .../ckeditor/plugins/templates/lang/fr-ca.js | 1 - .../lib/ckeditor/plugins/templates/lang/fr.js | 1 - .../lib/ckeditor/plugins/templates/lang/gl.js | 1 - .../lib/ckeditor/plugins/templates/lang/gu.js | 1 - .../lib/ckeditor/plugins/templates/lang/he.js | 1 - .../lib/ckeditor/plugins/templates/lang/hi.js | 1 - .../lib/ckeditor/plugins/templates/lang/hr.js | 1 - .../lib/ckeditor/plugins/templates/lang/hu.js | 1 - .../lib/ckeditor/plugins/templates/lang/id.js | 1 - .../lib/ckeditor/plugins/templates/lang/is.js | 1 - .../lib/ckeditor/plugins/templates/lang/it.js | 1 - .../lib/ckeditor/plugins/templates/lang/ja.js | 1 - .../lib/ckeditor/plugins/templates/lang/ka.js | 1 - .../lib/ckeditor/plugins/templates/lang/km.js | 1 - .../lib/ckeditor/plugins/templates/lang/ko.js | 1 - .../lib/ckeditor/plugins/templates/lang/ku.js | 1 - .../lib/ckeditor/plugins/templates/lang/lt.js | 1 - .../lib/ckeditor/plugins/templates/lang/lv.js | 1 - .../lib/ckeditor/plugins/templates/lang/mk.js | 1 - .../lib/ckeditor/plugins/templates/lang/mn.js | 1 - .../lib/ckeditor/plugins/templates/lang/ms.js | 1 - .../lib/ckeditor/plugins/templates/lang/nb.js | 1 - .../lib/ckeditor/plugins/templates/lang/nl.js | 1 - .../lib/ckeditor/plugins/templates/lang/no.js | 1 - .../lib/ckeditor/plugins/templates/lang/pl.js | 1 - .../ckeditor/plugins/templates/lang/pt-br.js | 1 - .../lib/ckeditor/plugins/templates/lang/pt.js | 1 - .../lib/ckeditor/plugins/templates/lang/ro.js | 1 - .../lib/ckeditor/plugins/templates/lang/ru.js | 1 - .../lib/ckeditor/plugins/templates/lang/si.js | 1 - .../lib/ckeditor/plugins/templates/lang/sk.js | 1 - .../lib/ckeditor/plugins/templates/lang/sl.js | 1 - .../lib/ckeditor/plugins/templates/lang/sq.js | 1 - .../plugins/templates/lang/sr-latn.js | 1 - .../lib/ckeditor/plugins/templates/lang/sr.js | 1 - .../lib/ckeditor/plugins/templates/lang/sv.js | 1 - .../lib/ckeditor/plugins/templates/lang/th.js | 1 - .../lib/ckeditor/plugins/templates/lang/tr.js | 1 - .../lib/ckeditor/plugins/templates/lang/tt.js | 1 - .../lib/ckeditor/plugins/templates/lang/ug.js | 1 - .../lib/ckeditor/plugins/templates/lang/uk.js | 1 - .../lib/ckeditor/plugins/templates/lang/vi.js | 1 - .../ckeditor/plugins/templates/lang/zh-cn.js | 1 - .../lib/ckeditor/plugins/templates/lang/zh.js | 1 - .../lib/ckeditor/plugins/templates/plugin.js | 7 - .../plugins/templates/templates/default.js | 6 - .../templates/templates/images/template1.gif | Bin 375 -> 0 bytes .../templates/templates/images/template2.gif | Bin 333 -> 0 bytes .../templates/templates/images/template3.gif | Bin 422 -> 0 bytes .../plugins/uicolor/dialogs/uicolor.js | 9 - .../plugins/uicolor/icons/hidpi/uicolor.png | Bin 2287 -> 0 bytes .../plugins/uicolor/icons/uicolor.png | Bin 965 -> 0 bytes .../uicolor/lang/_translationstatus.txt | 27 - .../lib/ckeditor/plugins/uicolor/lang/ar.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/bg.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ca.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/cs.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/cy.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/da.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/de.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/el.js | 5 - .../ckeditor/plugins/uicolor/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/en.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/eo.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/es.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/et.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/eu.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fa.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fi.js | 5 - .../ckeditor/plugins/uicolor/lang/fr-ca.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/fr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/gl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/he.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/hr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/hu.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/id.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/it.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ja.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/km.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ko.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ku.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/lv.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/mk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/nb.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/nl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/no.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/pl.js | 5 - .../ckeditor/plugins/uicolor/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/pt.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ru.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/si.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sl.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sq.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/sv.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/tr.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/tt.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/ug.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/uk.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/vi.js | 5 - .../ckeditor/plugins/uicolor/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/uicolor/lang/zh.js | 5 - .../lib/ckeditor/plugins/uicolor/plugin.js | 6 - .../plugins/uicolor/yui/assets/hue_bg.png | Bin 1120 -> 0 bytes .../plugins/uicolor/yui/assets/hue_thumb.png | Bin 195 -> 0 bytes .../uicolor/yui/assets/picker_mask.png | Bin 12174 -> 0 bytes .../uicolor/yui/assets/picker_thumb.png | Bin 192 -> 0 bytes .../plugins/uicolor/yui/assets/yui.css | 7 - .../lib/ckeditor/plugins/uicolor/yui/yui.js | 225 - .../ckeditor/plugins/widget/images/handle.png | Bin 220 -> 0 bytes .../lib/ckeditor/plugins/widget/lang/ar.js | 5 - .../lib/ckeditor/plugins/widget/lang/ca.js | 5 - .../lib/ckeditor/plugins/widget/lang/cs.js | 5 - .../lib/ckeditor/plugins/widget/lang/cy.js | 5 - .../lib/ckeditor/plugins/widget/lang/de.js | 5 - .../lib/ckeditor/plugins/widget/lang/el.js | 5 - .../lib/ckeditor/plugins/widget/lang/en-gb.js | 5 - .../lib/ckeditor/plugins/widget/lang/en.js | 5 - .../lib/ckeditor/plugins/widget/lang/eo.js | 5 - .../lib/ckeditor/plugins/widget/lang/es.js | 5 - .../lib/ckeditor/plugins/widget/lang/fa.js | 5 - .../lib/ckeditor/plugins/widget/lang/fi.js | 5 - .../lib/ckeditor/plugins/widget/lang/fr.js | 5 - .../lib/ckeditor/plugins/widget/lang/gl.js | 5 - .../lib/ckeditor/plugins/widget/lang/he.js | 5 - .../lib/ckeditor/plugins/widget/lang/hr.js | 5 - .../lib/ckeditor/plugins/widget/lang/hu.js | 5 - .../lib/ckeditor/plugins/widget/lang/it.js | 5 - .../lib/ckeditor/plugins/widget/lang/ja.js | 5 - .../lib/ckeditor/plugins/widget/lang/km.js | 5 - .../lib/ckeditor/plugins/widget/lang/ko.js | 5 - .../lib/ckeditor/plugins/widget/lang/nb.js | 5 - .../lib/ckeditor/plugins/widget/lang/nl.js | 5 - .../lib/ckeditor/plugins/widget/lang/no.js | 5 - .../lib/ckeditor/plugins/widget/lang/pl.js | 5 - .../lib/ckeditor/plugins/widget/lang/pt-br.js | 5 - .../lib/ckeditor/plugins/widget/lang/pt.js | 5 - .../lib/ckeditor/plugins/widget/lang/ru.js | 5 - .../lib/ckeditor/plugins/widget/lang/sk.js | 5 - .../lib/ckeditor/plugins/widget/lang/sl.js | 5 - .../lib/ckeditor/plugins/widget/lang/sv.js | 5 - .../lib/ckeditor/plugins/widget/lang/tr.js | 5 - .../lib/ckeditor/plugins/widget/lang/tt.js | 5 - .../lib/ckeditor/plugins/widget/lang/uk.js | 5 - .../lib/ckeditor/plugins/widget/lang/vi.js | 5 - .../lib/ckeditor/plugins/widget/lang/zh-cn.js | 5 - .../lib/ckeditor/plugins/widget/lang/zh.js | 5 - .../www/lib/ckeditor/plugins/widget/plugin.js | 58 - .../www/lib/ckeditor/plugins/wsc/LICENSE.md | 28 - .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 - .../plugins/wsc/dialogs/tmpFrameset.html | 52 - .../lib/ckeditor/plugins/wsc/dialogs/wsc.css | 82 - .../lib/ckeditor/plugins/wsc/dialogs/wsc.js | 74 - .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 - .../www/lib/ckeditor/plugins/xml/plugin.js | 7 - .../www/lib/ckeditor/samples/ajax.html | 82 - .../browser/www/lib/ckeditor/samples/api.html | 207 - .../www/lib/ckeditor/samples/appendto.html | 56 - .../samples/assets/inlineall/logo.png | Bin 4283 -> 0 bytes .../assets/outputxhtml/outputxhtml.css | 204 - .../ckeditor/samples/assets/posteddata.php | 59 - .../lib/ckeditor/samples/assets/sample.jpg | Bin 14449 -> 0 bytes .../samples/assets/uilanguages/languages.js | 7 - .../lib/ckeditor/samples/datafiltering.html | 401 - .../www/lib/ckeditor/samples/divreplace.html | 141 - .../www/lib/ckeditor/samples/index.html | 170 - .../www/lib/ckeditor/samples/inlineall.html | 311 - .../lib/ckeditor/samples/inlinebycode.html | 121 - .../lib/ckeditor/samples/inlinetextarea.html | 110 - .../www/lib/ckeditor/samples/jquery.html | 100 - .../samples/plugins/autogrow/autogrow.html | 99 - .../samples/plugins/bbcode/bbcode.html | 111 - .../plugins/codesnippet/codesnippet.html | 233 - .../samples/plugins/devtools/devtools.html | 83 - .../plugins/dialog/assets/my_dialog.js | 48 - .../samples/plugins/dialog/dialog.html | 187 - .../samples/plugins/divarea/divarea.html | 61 - .../samples/plugins/docprops/docprops.html | 78 - .../samples/plugins/enterkey/enterkey.html | 103 - .../assets/outputforflash/outputforflash.fla | Bin 85504 -> 0 bytes .../assets/outputforflash/outputforflash.swf | Bin 15571 -> 0 bytes .../assets/outputforflash/swfobject.js | 18 - .../plugins/htmlwriter/outputforflash.html | 280 - .../plugins/htmlwriter/outputhtml.html | 221 - .../samples/plugins/image2/assets/image1.jpg | Bin 33171 -> 0 bytes .../samples/plugins/image2/assets/image2.jpg | Bin 26238 -> 0 bytes .../samples/plugins/image2/image2.html | 65 - .../samples/plugins/magicline/magicline.html | 206 - .../samples/plugins/mathjax/mathjax.html | 82 - .../plugins/placeholder/placeholder.html | 72 - .../plugins/sharedspace/sharedspace.html | 119 - .../plugins/sourcedialog/sourcedialog.html | 118 - .../stylesheetparser/assets/sample.css | 70 - .../stylesheetparser/stylesheetparser.html | 82 - .../plugins/tableresize/tableresize.html | 104 - .../samples/plugins/toolbar/toolbar.html | 232 - .../samples/plugins/uicolor/uicolor.html | 103 - .../samples/plugins/wysiwygarea/fullpage.html | 77 - .../www/lib/ckeditor/samples/readonly.html | 73 - .../lib/ckeditor/samples/replacebyclass.html | 57 - .../lib/ckeditor/samples/replacebycode.html | 56 - .../www/lib/ckeditor/samples/sample.css | 365 - .../www/lib/ckeditor/samples/sample.js | 50 - .../ckeditor/samples/sample_posteddata.php | 16 - .../www/lib/ckeditor/samples/tabindex.html | 75 - .../www/lib/ckeditor/samples/uicolor.html | 69 - .../www/lib/ckeditor/samples/uilanguages.html | 119 - .../www/lib/ckeditor/samples/xhtmlstyle.html | 231 - .../www/lib/ckeditor/skins/kama/dialog.css | 5 - .../www/lib/ckeditor/skins/kama/dialog_ie.css | 5 - .../lib/ckeditor/skins/kama/dialog_ie7.css | 5 - .../lib/ckeditor/skins/kama/dialog_ie8.css | 5 - .../ckeditor/skins/kama/dialog_iequirks.css | 5 - .../www/lib/ckeditor/skins/kama/editor.css | 5 - .../www/lib/ckeditor/skins/kama/editor_ie.css | 5 - .../lib/ckeditor/skins/kama/editor_ie7.css | 5 - .../lib/ckeditor/skins/kama/editor_ie8.css | 5 - .../ckeditor/skins/kama/editor_iequirks.css | 5 - .../www/lib/ckeditor/skins/kama/icons.png | Bin 9633 -> 0 bytes .../lib/ckeditor/skins/kama/icons_hidpi.png | Bin 15510 -> 0 bytes .../skins/kama/images/dialog_sides.gif | Bin 47 -> 0 bytes .../skins/kama/images/dialog_sides.png | Bin 125 -> 0 bytes .../skins/kama/images/dialog_sides_rtl.png | Bin 128 -> 0 bytes .../lib/ckeditor/skins/kama/images/mini.gif | Bin 181 -> 0 bytes .../ckeditor/skins/kama/images/sprites.png | Bin 6117 -> 0 bytes .../skins/kama/images/sprites_ie6.png | Bin 2658 -> 0 bytes .../skins/kama/images/toolbar_start.gif | Bin 102 -> 0 bytes .../www/lib/ckeditor/skins/kama/readme.md | 40 - .../www/lib/ckeditor/skins/kama/skin.js | 8 - .../www/lib/ckeditor/skins/moono/dialog.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie7.css | 5 - .../lib/ckeditor/skins/moono/dialog_ie8.css | 5 - .../ckeditor/skins/moono/dialog_iequirks.css | 5 - .../www/lib/ckeditor/skins/moono/editor.css | 5 - .../lib/ckeditor/skins/moono/editor_gecko.css | 5 - .../lib/ckeditor/skins/moono/editor_ie.css | 5 - .../lib/ckeditor/skins/moono/editor_ie7.css | 5 - .../lib/ckeditor/skins/moono/editor_ie8.css | 5 - .../ckeditor/skins/moono/editor_iequirks.css | 5 - .../www/lib/ckeditor/skins/moono/icons.png | Bin 18271 -> 0 bytes .../lib/ckeditor/skins/moono/icons_hidpi.png | Bin 62881 -> 0 bytes .../lib/ckeditor/skins/moono/images/arrow.png | Bin 191 -> 0 bytes .../lib/ckeditor/skins/moono/images/close.png | Bin 468 -> 0 bytes .../skins/moono/images/hidpi/close.png | Bin 1271 -> 0 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 1329 -> 0 bytes .../skins/moono/images/hidpi/lock.png | Bin 1299 -> 0 bytes .../skins/moono/images/hidpi/refresh.png | Bin 1842 -> 0 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 349 -> 0 bytes .../lib/ckeditor/skins/moono/images/lock.png | Bin 475 -> 0 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 422 -> 0 bytes .../www/lib/ckeditor/skins/moono/readme.md | 51 - platforms/browser/www/lib/ckeditor/styles.js | 111 - platforms/browser/www/lib/d3/.bower.json | 35 - platforms/browser/www/lib/d3/.spmignore | 4 - platforms/browser/www/lib/d3/CONTRIBUTING.md | 25 - platforms/browser/www/lib/d3/LICENSE | 26 - platforms/browser/www/lib/d3/README.md | 9 - platforms/browser/www/lib/d3/bower.json | 24 - platforms/browser/www/lib/d3/composer.json | 19 - platforms/browser/www/lib/d3/d3.js | 9233 ----- platforms/browser/www/lib/d3/d3.min.js | 5 - .../browser/www/lib/es5-shim/.bower.json | 44 - platforms/browser/www/lib/es5-shim/CHANGES | 124 - .../browser/www/lib/es5-shim/CONTRIBUTORS.md | 27 - platforms/browser/www/lib/es5-shim/LICENSE | 22 - platforms/browser/www/lib/es5-shim/README.md | 168 - platforms/browser/www/lib/es5-shim/bower.json | 35 - .../browser/www/lib/es5-shim/component.json | 20 - .../browser/www/lib/es5-shim/es5-sham.js | 466 - .../browser/www/lib/es5-shim/es5-sham.map | 1 - .../browser/www/lib/es5-shim/es5-sham.min.js | 7 - .../browser/www/lib/es5-shim/es5-shim.js | 1434 - .../browser/www/lib/es5-shim/es5-shim.map | 1 - .../browser/www/lib/es5-shim/es5-shim.min.js | 7 - .../browser/www/lib/es5-shim/package.json | 60 - platforms/browser/www/lib/es5-shim/shims.json | 7 - .../www/lib/highcharts-ng/highcharts-ng.js | 498 - .../lib/highcharts-ng/highcharts-ng.min.js | 8 - .../adapters/standalone-framework.js | 1 - .../adapters/standalone-framework.src.js | 1 - .../www/lib/highcharts/highcharts-3d.js | 48 - .../www/lib/highcharts/highcharts-3d.src.js | 1712 - .../www/lib/highcharts/highcharts-more.js | 56 - .../www/lib/highcharts/highcharts-more.src.js | 2687 -- .../browser/www/lib/highcharts/highcharts.js | 337 - .../www/lib/highcharts/highcharts.src.js | 19265 --------- .../www/lib/highcharts/modules/boost.js | 12 - .../www/lib/highcharts/modules/boost.src.js | 595 - .../www/lib/highcharts/modules/broken-axis.js | 7 - .../lib/highcharts/modules/broken-axis.src.js | 330 - .../lib/highcharts/modules/canvas-tools.js | 133 - .../highcharts/modules/canvas-tools.src.js | 3115 -- .../www/lib/highcharts/modules/data.js | 26 - .../www/lib/highcharts/modules/data.src.js | 959 - .../www/lib/highcharts/modules/drilldown.js | 17 - .../lib/highcharts/modules/drilldown.src.js | 717 - .../www/lib/highcharts/modules/exporting.js | 24 - .../lib/highcharts/modules/exporting.src.js | 780 - .../www/lib/highcharts/modules/funnel.js | 13 - .../www/lib/highcharts/modules/funnel.src.js | 322 - .../www/lib/highcharts/modules/heatmap.js | 23 - .../www/lib/highcharts/modules/heatmap.src.js | 711 - .../highcharts/modules/no-data-to-display.js | 12 - .../modules/no-data-to-display.src.js | 143 - .../highcharts/modules/offline-exporting.js | 15 - .../modules/offline-exporting.src.js | 301 - .../www/lib/highcharts/modules/solid-gauge.js | 14 - .../lib/highcharts/modules/solid-gauge.src.js | 273 - .../www/lib/highcharts/modules/treemap.js | 30 - .../www/lib/highcharts/modules/treemap.src.js | 868 - .../www/lib/highcharts/themes/dark-blue.js | 254 - .../www/lib/highcharts/themes/dark-green.js | 255 - .../www/lib/highcharts/themes/dark-unica.js | 213 - .../browser/www/lib/highcharts/themes/gray.js | 257 - .../www/lib/highcharts/themes/grid-light.js | 74 - .../browser/www/lib/highcharts/themes/grid.js | 103 - .../www/lib/highcharts/themes/sand-signika.js | 104 - .../www/lib/highcharts/themes/skies.js | 89 - platforms/browser/www/lib/jquery/.bower.json | 37 - .../browser/www/lib/jquery/MIT-LICENSE.txt | 21 - platforms/browser/www/lib/jquery/bower.json | 27 - platforms/browser/www/lib/jquery/src/ajax.js | 806 - .../browser/www/lib/jquery/src/ajax/jsonp.js | 89 - .../browser/www/lib/jquery/src/ajax/load.js | 75 - .../www/lib/jquery/src/ajax/parseJSON.js | 13 - .../www/lib/jquery/src/ajax/parseXML.js | 28 - .../browser/www/lib/jquery/src/ajax/script.js | 64 - .../www/lib/jquery/src/ajax/var/nonce.js | 5 - .../www/lib/jquery/src/ajax/var/rquery.js | 3 - .../browser/www/lib/jquery/src/ajax/xhr.js | 135 - .../browser/www/lib/jquery/src/attributes.js | 11 - .../www/lib/jquery/src/attributes/attr.js | 143 - .../www/lib/jquery/src/attributes/classes.js | 158 - .../www/lib/jquery/src/attributes/prop.js | 96 - .../www/lib/jquery/src/attributes/support.js | 35 - .../www/lib/jquery/src/attributes/val.js | 163 - .../browser/www/lib/jquery/src/callbacks.js | 205 - platforms/browser/www/lib/jquery/src/core.js | 498 - .../browser/www/lib/jquery/src/core/access.js | 60 - .../browser/www/lib/jquery/src/core/init.js | 123 - .../www/lib/jquery/src/core/parseHTML.js | 39 - .../browser/www/lib/jquery/src/core/ready.js | 97 - .../www/lib/jquery/src/core/var/rsingleTag.js | 4 - platforms/browser/www/lib/jquery/src/css.js | 451 - .../www/lib/jquery/src/css/addGetHookIf.js | 24 - .../browser/www/lib/jquery/src/css/curCSS.js | 57 - .../www/lib/jquery/src/css/defaultDisplay.js | 70 - .../jquery/src/css/hiddenVisibleSelectors.js | 15 - .../browser/www/lib/jquery/src/css/support.js | 91 - .../browser/www/lib/jquery/src/css/swap.js | 28 - .../www/lib/jquery/src/css/var/cssExpand.js | 3 - .../www/lib/jquery/src/css/var/getStyles.js | 5 - .../www/lib/jquery/src/css/var/isHidden.js | 13 - .../www/lib/jquery/src/css/var/rmargin.js | 3 - .../www/lib/jquery/src/css/var/rnumnonpx.js | 5 - platforms/browser/www/lib/jquery/src/data.js | 179 - .../browser/www/lib/jquery/src/data/Data.js | 181 - .../www/lib/jquery/src/data/accepts.js | 20 - .../www/lib/jquery/src/data/var/data_priv.js | 5 - .../www/lib/jquery/src/data/var/data_user.js | 5 - .../browser/www/lib/jquery/src/deferred.js | 149 - .../browser/www/lib/jquery/src/deprecated.js | 13 - .../browser/www/lib/jquery/src/dimensions.js | 50 - .../browser/www/lib/jquery/src/effects.js | 649 - .../www/lib/jquery/src/effects/Tween.js | 114 - .../jquery/src/effects/animatedSelector.js | 13 - platforms/browser/www/lib/jquery/src/event.js | 868 - .../browser/www/lib/jquery/src/event/alias.js | 39 - .../www/lib/jquery/src/event/support.js | 9 - .../browser/www/lib/jquery/src/exports/amd.js | 24 - .../www/lib/jquery/src/exports/global.js | 32 - platforms/browser/www/lib/jquery/src/intro.js | 44 - .../browser/www/lib/jquery/src/jquery.js | 36 - .../www/lib/jquery/src/manipulation.js | 582 - .../lib/jquery/src/manipulation/_evalUrl.js | 18 - .../lib/jquery/src/manipulation/support.js | 31 - .../src/manipulation/var/rcheckableType.js | 3 - .../browser/www/lib/jquery/src/offset.js | 204 - platforms/browser/www/lib/jquery/src/outro.js | 1 - platforms/browser/www/lib/jquery/src/queue.js | 142 - .../browser/www/lib/jquery/src/queue/delay.js | 22 - .../www/lib/jquery/src/selector-native.js | 172 - .../www/lib/jquery/src/selector-sizzle.js | 14 - .../browser/www/lib/jquery/src/selector.js | 1 - .../browser/www/lib/jquery/src/serialize.js | 111 - .../browser/www/lib/jquery/src/traversing.js | 200 - .../lib/jquery/src/traversing/findFilter.js | 100 - .../src/traversing/var/rneedsContext.js | 6 - .../browser/www/lib/jquery/src/var/arr.js | 3 - .../www/lib/jquery/src/var/class2type.js | 4 - .../browser/www/lib/jquery/src/var/concat.js | 5 - .../browser/www/lib/jquery/src/var/hasOwn.js | 5 - .../browser/www/lib/jquery/src/var/indexOf.js | 5 - .../browser/www/lib/jquery/src/var/pnum.js | 3 - .../browser/www/lib/jquery/src/var/push.js | 5 - .../www/lib/jquery/src/var/rnotwhite.js | 3 - .../browser/www/lib/jquery/src/var/slice.js | 5 - .../www/lib/jquery/src/var/strundefined.js | 3 - .../browser/www/lib/jquery/src/var/support.js | 4 - .../www/lib/jquery/src/var/toString.js | 5 - platforms/browser/www/lib/jquery/src/wrap.js | 78 - platforms/browser/www/lib/json3/.bower.json | 47 - platforms/browser/www/lib/json3/CHANGELOG.md | 44 - .../browser/www/lib/json3/CONTRIBUTING.md | 3 - platforms/browser/www/lib/json3/LICENSE | 20 - platforms/browser/www/lib/json3/README.md | 152 - platforms/browser/www/lib/json3/bower.json | 38 - platforms/browser/www/lib/json3/lib/json3.js | 902 - .../browser/www/lib/json3/lib/json3.min.js | 17 - platforms/browser/www/lib/lodash/.bower.json | 33 - platforms/browser/www/lib/lodash/LICENSE.txt | 22 - platforms/browser/www/lib/lodash/bower.json | 23 - platforms/browser/www/lib/moment/moment.js | 3606 -- .../src/browser/DeviceProxy.js | 84 - .../cordova-plugin-device/www/device.js | 85 - platforms/browser/www/robots.txt | 3 - platforms/browser/www/scripts/app.js | 249 - .../browser/www/scripts/controllers/about.js | 17 - .../browser/www/scripts/controllers/admin.js | 13 - .../www/scripts/controllers/awareness.js | 50 - .../browser/www/scripts/controllers/backup | 1 - .../browser/www/scripts/controllers/charts.js | 192 - .../www/scripts/controllers/checkins.js | 16 - .../browser/www/scripts/controllers/cms.js | 70 - .../www/scripts/controllers/daily_check_in.js | 500 - .../www/scripts/controllers/daily_review.js | 150 - .../controllers/daily_review_conclusion.js | 14 - .../controllers/daily_review_summary.js | 13 - .../scripts/controllers/dailyreviewtester.js | 17 - .../browser/www/scripts/controllers/ews.js | 38 - .../browser/www/scripts/controllers/ews2.js | 41 - .../browser/www/scripts/controllers/exit.js | 15 - .../www/scripts/controllers/fetch_content.js | 72 - .../www/scripts/controllers/foundations.js | 26 - .../browser/www/scripts/controllers/home.js | 121 - .../www/scripts/controllers/instructions.js | 29 - .../www/scripts/controllers/intervention.js | 22 - .../www/scripts/controllers/lesson_player.js | 79 - .../scripts/controllers/load_interventions.js | 26 - .../controllers/localstoragebackuprestore.js | 43 - .../browser/www/scripts/controllers/login.js | 17 - .../browser/www/scripts/controllers/main.js | 32 - .../www/scripts/controllers/medications.js | 16 - .../www/scripts/controllers/myskills.js | 55 - .../scripts/controllers/personalsnapshot.js | 29 - .../www/scripts/controllers/resources.js | 17 - .../browser/www/scripts/controllers/risks.js | 17 - .../www/scripts/controllers/schedule.js | 16 - .../www/scripts/controllers/settings.js | 269 - .../browser/www/scripts/controllers/setup.js | 17 - .../browser/www/scripts/controllers/skills.js | 24 - .../scripts/controllers/skills_awareness.js | 24 - .../www/scripts/controllers/skills_coping.js | 19 - .../controllers/skills_fundamentals.js | 22 - .../scripts/controllers/skills_lifestyle.js | 22 - .../www/scripts/controllers/skills_team.js | 34 - .../www/scripts/controllers/summary_player.js | 66 - .../browser/www/scripts/controllers/team.js | 16 - .../www/scripts/controllers/usereditor.js | 17 - .../scripts/controllers/weekly_check_in.js | 136 - .../www/scripts/controllers/wellness.js | 64 - .../scripts/questionGroups/questiongroup.js | 204 - .../scripts/services/clinicalstatusupdate.js | 147 - .../www/scripts/services/dailyreview.js | 548 - .../browser/www/scripts/services/guid.js | 28 - .../browser/www/scripts/services/pound.js | 189 - .../browser/www/scripts/services/questions.js | 83 - .../www/scripts/services/static_content.js | 40 - .../browser/www/scripts/services/user_data.js | 32 - .../www/scripts/services/user_details.js | 49 - .../www/scripts/vendor/cordova.android.js | 1749 - .../browser/www/scripts/vendor/cordova.js | 1938 - .../browser/www/styles/bootstrap.min.css | 7 - platforms/browser/www/styles/main.css | 134 - platforms/browser/www/views/about.html | 1 - platforms/browser/www/views/admin.html | 10 - platforms/browser/www/views/charts.html | 22 - platforms/browser/www/views/checkins.html | 5 - platforms/browser/www/views/cms.html | 32 - platforms/browser/www/views/cms/table.html | 49 - .../browser/www/views/daily_check_in.html | 95 - platforms/browser/www/views/daily_review.html | 101 - .../www/views/daily_review_conclusion.html | 20 - .../www/views/daily_review_summary.html | 1 - .../browser/www/views/dailyreviewtester.html | 15 - platforms/browser/www/views/ews.html | 18 - platforms/browser/www/views/ews2.html | 20 - platforms/browser/www/views/exit.html | 1 - platforms/browser/www/views/foundations.html | 3 - platforms/browser/www/views/home.html | 47 - platforms/browser/www/views/instructions.html | 3 - platforms/browser/www/views/intervention.html | 3 - .../browser/www/views/lesson_player.html | 18 - .../browser/www/views/load_interventions.html | 6 - .../www/views/localstoragebackuprestore.html | 29 - platforms/browser/www/views/login.html | 1 - platforms/browser/www/views/main.html | 5 - platforms/browser/www/views/medications.html | 9 - platforms/browser/www/views/myskills.html | 31 - .../browser/www/views/partials/awareness.html | 26 - .../browser/www/views/partials/navbar.html | 10 - .../browser/www/views/partials/resources.html | 5 - .../browser/www/views/partials/risks.html | 9 - .../browser/www/views/personalsnapshot.html | 12 - .../www/views/questionGroups/html.html | 1 - .../www/views/questionGroups/multiple.html | 10 - .../browser/www/views/questionGroups/nav.html | 20 - .../views/questionGroups/question_group.html | 35 - .../www/views/questionGroups/single.html | 14 - .../www/views/questionGroups/title.html | 1 - platforms/browser/www/views/schedule.html | 10 - platforms/browser/www/views/settings.html | 24 - platforms/browser/www/views/skills.html | 4 - .../browser/www/views/skills_awareness.html | 10 - .../browser/www/views/skills_coping.html | 4 - .../www/views/skills_fundamentals.html | 7 - .../browser/www/views/skills_lifestyle.html | 7 - platforms/browser/www/views/skills_team.html | 7 - .../browser/www/views/summary_player.html | 10 - platforms/browser/www/views/team.html | 16 - platforms/browser/www/views/usereditor.html | 160 - .../browser/www/views/weekly_check_in.html | 3 - platforms/browser/www/views/wellness.html | 19 - platforms/platforms.json | 4 - 5915 files changed, 441119 deletions(-) delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/lodash.js delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/package.json delete mode 100644 node_modules/grunt-cli/node_modules/findup-sync/package.json delete mode 100644 node_modules/grunt-cli/node_modules/nopt/README.md delete mode 100755 node_modules/grunt-cli/node_modules/nopt/examples/my-program.js delete mode 100644 node_modules/grunt-cli/node_modules/nopt/lib/nopt.js delete mode 100644 node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/LICENSE delete mode 100644 node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/package.json delete mode 100644 node_modules/grunt-cli/node_modules/nopt/node_modules/abbrev/test.js delete mode 100644 node_modules/grunt-cli/node_modules/nopt/package.json delete mode 100644 node_modules/grunt-cli/node_modules/resolve/package.json delete mode 100644 node_modules/grunt-cli/package.json delete mode 100644 node_modules/grunt/node_modules/async/package.json delete mode 100644 node_modules/grunt/node_modules/coffee-script/package.json delete mode 100644 node_modules/grunt/node_modules/colors/package.json delete mode 100644 node_modules/grunt/node_modules/dateformat/package.json delete mode 100644 node_modules/grunt/node_modules/eventemitter2/package.json delete mode 100644 node_modules/grunt/node_modules/exit/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/glob/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/README.md delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/lodash.js delete mode 100644 node_modules/grunt/node_modules/findup-sync/node_modules/lodash/package.json delete mode 100644 node_modules/grunt/node_modules/findup-sync/package.json delete mode 100644 node_modules/grunt/node_modules/getobject/package.json delete mode 100644 node_modules/grunt/node_modules/glob/node_modules/graceful-fs/package.json delete mode 100644 node_modules/grunt/node_modules/glob/node_modules/inherits/package.json delete mode 100644 node_modules/grunt/node_modules/glob/package.json delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/.travis.yml delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/index.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/README.md delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.compat.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.compat.min.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.min.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.underscore.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.underscore.min.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/lodash.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/package.json delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/node_modules/underscore.string/package.json delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/package.json delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-log/test/index.js delete mode 100644 node_modules/grunt/node_modules/grunt-legacy-util/package.json delete mode 100644 node_modules/grunt/node_modules/hooker/package.json delete mode 100644 node_modules/grunt/node_modules/iconv-lite/package.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/HISTORY.md delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/README.md delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/argparse/package.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/node_modules/esprima/package.json delete mode 100644 node_modules/grunt/node_modules/js-yaml/package.json delete mode 100644 node_modules/grunt/node_modules/lodash/package.json delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/LICENSE delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/README.md delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/package.json delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/basic.js delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/foreach.js delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/sigmund/LICENSE delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/sigmund/README.md delete mode 100644 node_modules/grunt/node_modules/minimatch/node_modules/sigmund/package.json delete mode 100644 node_modules/grunt/node_modules/minimatch/package.json delete mode 100644 node_modules/grunt/node_modules/nopt/README.md delete mode 100755 node_modules/grunt/node_modules/nopt/examples/my-program.js delete mode 100644 node_modules/grunt/node_modules/nopt/lib/nopt.js delete mode 100644 node_modules/grunt/node_modules/nopt/node_modules/abbrev/LICENSE delete mode 100644 node_modules/grunt/node_modules/nopt/node_modules/abbrev/package.json delete mode 100644 node_modules/grunt/node_modules/nopt/node_modules/abbrev/test.js delete mode 100644 node_modules/grunt/node_modules/nopt/package.json delete mode 100644 node_modules/grunt/node_modules/rimraf/package.json delete mode 100644 node_modules/grunt/node_modules/underscore.string/package.json delete mode 100644 node_modules/grunt/node_modules/which/LICENSE delete mode 100644 node_modules/grunt/node_modules/which/package.json delete mode 100644 node_modules/grunt/node_modules/which/which.js delete mode 100644 node_modules/grunt/package.json delete mode 100644 platforms/android/.gitignore delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin delete mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin delete mode 100644 platforms/android/AndroidManifest.xml delete mode 100755 platforms/android/CordovaLib/AndroidManifest.xml delete mode 100644 platforms/android/CordovaLib/build.gradle delete mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml delete mode 100644 platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar delete mode 100644 platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar delete mode 100644 platforms/android/CordovaLib/cordova.gradle delete mode 100644 platforms/android/CordovaLib/project.properties delete mode 100644 platforms/android/android.json delete mode 100644 platforms/android/assets/www/404.html delete mode 100644 platforms/android/assets/www/config.json delete mode 100644 platforms/android/assets/www/config.xml delete mode 100644 platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js delete mode 100644 platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js delete mode 100644 platforms/android/assets/www/cordova-js-src/exec.js delete mode 100644 platforms/android/assets/www/cordova-js-src/platform.js delete mode 100644 platforms/android/assets/www/cordova-js-src/plugin/android/app.js delete mode 100644 platforms/android/assets/www/cordova.js delete mode 100644 platforms/android/assets/www/cordova_plugins.js delete mode 100644 platforms/android/assets/www/favicon.ico delete mode 100755 platforms/android/assets/www/icon.png delete mode 100644 platforms/android/assets/www/images/logo.png delete mode 100644 platforms/android/assets/www/images/yeoman.png delete mode 100644 platforms/android/assets/www/index.html delete mode 100644 platforms/android/assets/www/lib/PurpleRobotClient/.bower.json delete mode 100644 platforms/android/assets/www/lib/PurpleRobotClient/.gitignore delete mode 100644 platforms/android/assets/www/lib/PurpleRobotClient/bower.json delete mode 100644 platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.js delete mode 100644 platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.min.js delete mode 100644 platforms/android/assets/www/lib/angular-animate/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-animate/README.md delete mode 100644 platforms/android/assets/www/lib/angular-animate/angular-animate.js delete mode 100644 platforms/android/assets/www/lib/angular-animate/angular-animate.min.js delete mode 100644 platforms/android/assets/www/lib/angular-animate/angular-animate.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-animate/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-cookies/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-cookies/README.md delete mode 100644 platforms/android/assets/www/lib/angular-cookies/angular-cookies.js delete mode 100644 platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js delete mode 100644 platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-cookies/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-mocks/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-mocks/README.md delete mode 100644 platforms/android/assets/www/lib/angular-mocks/angular-mocks.js delete mode 100644 platforms/android/assets/www/lib/angular-mocks/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-moment/angular-moment.js delete mode 100644 platforms/android/assets/www/lib/angular-resource/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-resource/README.md delete mode 100644 platforms/android/assets/www/lib/angular-resource/angular-resource.js delete mode 100644 platforms/android/assets/www/lib/angular-resource/angular-resource.min.js delete mode 100644 platforms/android/assets/www/lib/angular-resource/angular-resource.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-resource/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-route/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-route/README.md delete mode 100644 platforms/android/assets/www/lib/angular-route/angular-route.js delete mode 100644 platforms/android/assets/www/lib/angular-route/angular-route.min.js delete mode 100644 platforms/android/assets/www/lib/angular-route/angular-route.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-route/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/README.md delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.js delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-sanitize/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-scenario/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-scenario/README.md delete mode 100644 platforms/android/assets/www/lib/angular-scenario/angular-scenario.js delete mode 100644 platforms/android/assets/www/lib/angular-scenario/bower.json delete mode 100644 platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter-config.js delete mode 100644 platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter.js delete mode 100644 platforms/android/assets/www/lib/angular-touch/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular-touch/README.md delete mode 100644 platforms/android/assets/www/lib/angular-touch/angular-touch.js delete mode 100644 platforms/android/assets/www/lib/angular-touch/angular-touch.min.js delete mode 100644 platforms/android/assets/www/lib/angular-touch/angular-touch.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular-touch/bower.json delete mode 100644 platforms/android/assets/www/lib/angular/.bower.json delete mode 100644 platforms/android/assets/www/lib/angular/README.md delete mode 100644 platforms/android/assets/www/lib/angular/angular-csp.css delete mode 100644 platforms/android/assets/www/lib/angular/angular.js delete mode 100644 platforms/android/assets/www/lib/angular/angular.min.js delete mode 100644 platforms/android/assets/www/lib/angular/angular.min.js.gzip delete mode 100644 platforms/android/assets/www/lib/angular/angular.min.js.map delete mode 100644 platforms/android/assets/www/lib/angular/bower.json delete mode 100644 platforms/android/assets/www/lib/bootstrap/.bower.json delete mode 100644 platforms/android/assets/www/lib/bootstrap/Gruntfile.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/LICENSE delete mode 100644 platforms/android/assets/www/lib/bootstrap/README.md delete mode 100644 platforms/android/assets/www/lib/bootstrap/bower.json delete mode 100644 platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100644 platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100644 platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100644 platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100644 platforms/android/assets/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/grunt/bs-lessdoc-parser.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/grunt/bs-raw-files-generator.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/grunt/sauce_browsers.yml delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/affix.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/alert.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/button.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/carousel.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/collapse.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/dropdown.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/modal.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/popover.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/scrollspy.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/tab.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/tooltip.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/js/transition.js delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/alerts.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/badges.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/bootstrap.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/breadcrumbs.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/button-groups.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/buttons.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/carousel.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/close.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/code.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/component-animations.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/dropdowns.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/forms.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/glyphicons.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/grid.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/input-groups.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/jumbotron.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/labels.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/list-group.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/media.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/alerts.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/background-variant.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/border-radius.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/buttons.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/center-block.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/clearfix.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/forms.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/gradients.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/grid-framework.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/grid.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/hide-text.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/image.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/labels.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/list-group.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/nav-divider.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/nav-vertical-align.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/opacity.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/pagination.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/panels.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/progress-bar.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/reset-filter.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/resize.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/responsive-visibility.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/size.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/tab-focus.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/table-row.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/text-emphasis.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/text-overflow.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/mixins/vendor-prefixes.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/modals.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/navbar.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/navs.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/normalize.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/pager.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/pagination.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/panels.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/popovers.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/print.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/progress-bars.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/responsive-embed.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/responsive-utilities.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/scaffolding.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/tables.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/theme.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/thumbnails.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/tooltip.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/type.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/utilities.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/variables.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/less/wells.less delete mode 100644 platforms/android/assets/www/lib/bootstrap/package.json delete mode 100644 platforms/android/assets/www/lib/ckeditor/.bower.json delete mode 100644 platforms/android/assets/www/lib/ckeditor/CHANGES.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/LICENSE.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/README.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/adapters/jquery.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/bower.json delete mode 100644 platforms/android/assets/www/lib/ckeditor/ckeditor.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/composer.json delete mode 100644 platforms/android/assets/www/lib/ckeditor/config.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/contents.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/_translationstatus.txt delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/about.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/adobeair/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/ajax/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/autogrow/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bbcode/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/bidi/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/colordialog/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/devtools/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/dialog/dialogDefinition.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/dialogadvtab/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/dialogs/div.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/icons/creatediv.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/div/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/divarea/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/docprops/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/dialogs/find.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/icons/replace.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/find/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/dialogs/flash.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/flash.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/images/placeholder.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/flash/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/font/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/button.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/form.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/radio.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/select.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textarea.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textfield.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/button.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/checkbox.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/form.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/imagebutton.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/radio.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/forms/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/icons.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/icons_hidpi.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/iframe.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/images/placeholder.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframe/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/iframedialog/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image/dialogs/image.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image/images/noimage.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/dialogs/image2.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/image.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/image2/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/indentblock/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyblock.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifycenter.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyleft.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyright.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/justify/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/icons/hidpi/language.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/icons/language.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/language/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/lineutils/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/anchor.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/link.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/link/images/anchor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/liststyle/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/images/loader.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/mathjax/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/newpage/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/panelbutton/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/pastefromword/filter/default.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/placeholder/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/preview/preview.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/icons/hidpi/print.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/icons/print.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/print/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/icons/hidpi/save.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/icons/save.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/save/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/scayt/LICENSE.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/options.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/selectall.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/selectall/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sharedspace/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_address.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_div.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h1.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h2.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h3.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h4.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h5.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h6.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_p.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_pre.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/showblocks/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/smiley.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/smiley/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/stylesheetparser/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/table/dialogs/table.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/tableresize/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/af.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-au.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/is.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ka.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ms.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ro.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr-latn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/th.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/default.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template1.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template2.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template3.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/bg.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/da.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/et.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/id.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ku.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/lv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/mk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/si.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sq.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ug.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/yui.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/images/handle.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ar.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ca.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cs.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cy.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/de.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/el.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en-gb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/eo.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/es.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fa.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/gl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/he.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hu.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/it.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ja.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/km.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ko.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nb.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/no.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt-br.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ru.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sl.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sv.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tr.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tt.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/uk.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/vi.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh-cn.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/widget/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/LICENSE.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/plugins/xml/plugin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/ajax.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/api.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/appendto.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/assets/inlineall/logo.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/assets/posteddata.php delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/assets/sample.jpg delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/assets/uilanguages/languages.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/datafiltering.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/divreplace.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/index.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/inlineall.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/inlinebycode.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/inlinetextarea.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/jquery.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/devtools/devtools.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/dialog.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/divarea/divarea.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/docprops/docprops.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/image2.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/magicline/magicline.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/readonly.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/replacebyclass.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/replacebycode.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/sample.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/sample.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/sample_posteddata.php delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/tabindex.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/uicolor.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/uilanguages.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/samples/xhtmlstyle.html delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/dialog.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie7.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie8.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_iequirks.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/editor.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie7.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie8.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/editor_iequirks.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/icons.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/icons_hidpi.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/mini.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites_ie6.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/images/toolbar_start.gif delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/readme.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/kama/skin.js delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/dialog.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie7.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie8.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_iequirks.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor_gecko.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie7.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie8.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/editor_iequirks.css delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/icons.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/icons_hidpi.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/arrow.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/close.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/close.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock-open.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/images/refresh.png delete mode 100644 platforms/android/assets/www/lib/ckeditor/skins/moono/readme.md delete mode 100644 platforms/android/assets/www/lib/ckeditor/styles.js delete mode 100644 platforms/android/assets/www/lib/d3/.bower.json delete mode 100644 platforms/android/assets/www/lib/d3/.spmignore delete mode 100644 platforms/android/assets/www/lib/d3/CONTRIBUTING.md delete mode 100644 platforms/android/assets/www/lib/d3/LICENSE delete mode 100644 platforms/android/assets/www/lib/d3/README.md delete mode 100644 platforms/android/assets/www/lib/d3/bower.json delete mode 100644 platforms/android/assets/www/lib/d3/composer.json delete mode 100644 platforms/android/assets/www/lib/d3/d3.js delete mode 100644 platforms/android/assets/www/lib/d3/d3.min.js delete mode 100644 platforms/android/assets/www/lib/es5-shim/.bower.json delete mode 100644 platforms/android/assets/www/lib/es5-shim/CHANGES delete mode 100644 platforms/android/assets/www/lib/es5-shim/CONTRIBUTORS.md delete mode 100644 platforms/android/assets/www/lib/es5-shim/LICENSE delete mode 100644 platforms/android/assets/www/lib/es5-shim/README.md delete mode 100644 platforms/android/assets/www/lib/es5-shim/bower.json delete mode 100644 platforms/android/assets/www/lib/es5-shim/component.json delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-sham.js delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-sham.map delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-sham.min.js delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-shim.js delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-shim.map delete mode 100644 platforms/android/assets/www/lib/es5-shim/es5-shim.min.js delete mode 100644 platforms/android/assets/www/lib/es5-shim/package.json delete mode 100644 platforms/android/assets/www/lib/es5-shim/shims.json delete mode 100755 platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.js delete mode 100755 platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.min.js delete mode 100644 platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.js delete mode 100644 platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts-3d.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts-3d.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts-more.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts-more.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts.js delete mode 100644 platforms/android/assets/www/lib/highcharts/highcharts.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/boost.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/boost.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/broken-axis.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/broken-axis.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/canvas-tools.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/canvas-tools.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/data.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/data.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/drilldown.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/drilldown.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/exporting.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/exporting.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/funnel.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/funnel.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/heatmap.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/heatmap.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/offline-exporting.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/offline-exporting.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/solid-gauge.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/solid-gauge.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/treemap.js delete mode 100644 platforms/android/assets/www/lib/highcharts/modules/treemap.src.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/dark-blue.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/dark-green.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/dark-unica.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/gray.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/grid-light.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/grid.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/sand-signika.js delete mode 100644 platforms/android/assets/www/lib/highcharts/themes/skies.js delete mode 100644 platforms/android/assets/www/lib/jquery/.bower.json delete mode 100644 platforms/android/assets/www/lib/jquery/MIT-LICENSE.txt delete mode 100644 platforms/android/assets/www/lib/jquery/bower.json delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/jsonp.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/load.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/parseJSON.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/parseXML.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/script.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/var/nonce.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/var/rquery.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/ajax/xhr.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes/attr.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes/classes.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes/prop.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes/support.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/attributes/val.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/callbacks.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core/access.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core/init.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core/parseHTML.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core/ready.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/core/var/rsingleTag.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/addGetHookIf.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/curCSS.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/defaultDisplay.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/hiddenVisibleSelectors.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/support.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/swap.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/var/cssExpand.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/var/getStyles.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/var/isHidden.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/var/rmargin.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/css/var/rnumnonpx.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/data.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/data/Data.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/data/accepts.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/data/var/data_priv.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/data/var/data_user.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/deferred.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/deprecated.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/dimensions.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/effects.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/effects/Tween.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/effects/animatedSelector.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/event.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/event/alias.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/event/support.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/exports/amd.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/exports/global.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/intro.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/jquery.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/manipulation.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/manipulation/_evalUrl.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/manipulation/support.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/manipulation/var/rcheckableType.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/offset.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/outro.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/queue.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/queue/delay.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/selector-native.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/selector-sizzle.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/selector.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/serialize.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/traversing.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/traversing/findFilter.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/traversing/var/rneedsContext.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/arr.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/class2type.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/concat.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/hasOwn.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/indexOf.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/pnum.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/push.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/rnotwhite.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/slice.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/strundefined.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/support.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/var/toString.js delete mode 100644 platforms/android/assets/www/lib/jquery/src/wrap.js delete mode 100644 platforms/android/assets/www/lib/json3/.bower.json delete mode 100644 platforms/android/assets/www/lib/json3/CHANGELOG.md delete mode 100644 platforms/android/assets/www/lib/json3/CONTRIBUTING.md delete mode 100644 platforms/android/assets/www/lib/json3/LICENSE delete mode 100644 platforms/android/assets/www/lib/json3/README.md delete mode 100644 platforms/android/assets/www/lib/json3/bower.json delete mode 100644 platforms/android/assets/www/lib/json3/lib/json3.js delete mode 100644 platforms/android/assets/www/lib/json3/lib/json3.min.js delete mode 100644 platforms/android/assets/www/lib/lodash/.bower.json delete mode 100644 platforms/android/assets/www/lib/lodash/LICENSE.txt delete mode 100644 platforms/android/assets/www/lib/lodash/bower.json delete mode 100644 platforms/android/assets/www/lib/moment/moment.js delete mode 100644 platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js delete mode 100644 platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js delete mode 100644 platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js delete mode 100644 platforms/android/assets/www/robots.txt delete mode 100644 platforms/android/assets/www/scripts/app.js delete mode 100644 platforms/android/assets/www/scripts/controllers/about.js delete mode 100644 platforms/android/assets/www/scripts/controllers/admin.js delete mode 100644 platforms/android/assets/www/scripts/controllers/awareness.js delete mode 100644 platforms/android/assets/www/scripts/controllers/backup delete mode 100644 platforms/android/assets/www/scripts/controllers/charts.js delete mode 100644 platforms/android/assets/www/scripts/controllers/checkins.js delete mode 100644 platforms/android/assets/www/scripts/controllers/cms.js delete mode 100644 platforms/android/assets/www/scripts/controllers/daily_check_in.js delete mode 100644 platforms/android/assets/www/scripts/controllers/daily_review.js delete mode 100644 platforms/android/assets/www/scripts/controllers/daily_review_conclusion.js delete mode 100644 platforms/android/assets/www/scripts/controllers/daily_review_summary.js delete mode 100644 platforms/android/assets/www/scripts/controllers/dailyreviewtester.js delete mode 100644 platforms/android/assets/www/scripts/controllers/ews.js delete mode 100644 platforms/android/assets/www/scripts/controllers/ews2.js delete mode 100644 platforms/android/assets/www/scripts/controllers/exit.js delete mode 100644 platforms/android/assets/www/scripts/controllers/fetch_content.js delete mode 100644 platforms/android/assets/www/scripts/controllers/foundations.js delete mode 100644 platforms/android/assets/www/scripts/controllers/home.js delete mode 100644 platforms/android/assets/www/scripts/controllers/instructions.js delete mode 100644 platforms/android/assets/www/scripts/controllers/intervention.js delete mode 100644 platforms/android/assets/www/scripts/controllers/lesson_player.js delete mode 100644 platforms/android/assets/www/scripts/controllers/load_interventions.js delete mode 100644 platforms/android/assets/www/scripts/controllers/localstoragebackuprestore.js delete mode 100644 platforms/android/assets/www/scripts/controllers/login.js delete mode 100644 platforms/android/assets/www/scripts/controllers/main.js delete mode 100644 platforms/android/assets/www/scripts/controllers/medications.js delete mode 100644 platforms/android/assets/www/scripts/controllers/myskills.js delete mode 100644 platforms/android/assets/www/scripts/controllers/personalsnapshot.js delete mode 100644 platforms/android/assets/www/scripts/controllers/resources.js delete mode 100644 platforms/android/assets/www/scripts/controllers/risks.js delete mode 100644 platforms/android/assets/www/scripts/controllers/schedule.js delete mode 100644 platforms/android/assets/www/scripts/controllers/settings.js delete mode 100644 platforms/android/assets/www/scripts/controllers/setup.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills_awareness.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills_coping.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills_fundamentals.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills_lifestyle.js delete mode 100644 platforms/android/assets/www/scripts/controllers/skills_team.js delete mode 100644 platforms/android/assets/www/scripts/controllers/summary_player.js delete mode 100644 platforms/android/assets/www/scripts/controllers/team.js delete mode 100644 platforms/android/assets/www/scripts/controllers/usereditor.js delete mode 100644 platforms/android/assets/www/scripts/controllers/weekly_check_in.js delete mode 100644 platforms/android/assets/www/scripts/controllers/wellness.js delete mode 100644 platforms/android/assets/www/scripts/questionGroups/questiongroup.js delete mode 100644 platforms/android/assets/www/scripts/services/clinicalstatusupdate.js delete mode 100644 platforms/android/assets/www/scripts/services/dailyreview.js delete mode 100644 platforms/android/assets/www/scripts/services/guid.js delete mode 100644 platforms/android/assets/www/scripts/services/pound.js delete mode 100644 platforms/android/assets/www/scripts/services/questions.js delete mode 100644 platforms/android/assets/www/scripts/services/static_content.js delete mode 100644 platforms/android/assets/www/scripts/services/user_data.js delete mode 100644 platforms/android/assets/www/scripts/services/user_details.js delete mode 100644 platforms/android/assets/www/scripts/vendor/cordova.android.js delete mode 100644 platforms/android/assets/www/scripts/vendor/cordova.js delete mode 100644 platforms/android/assets/www/styles/bootstrap.min.css delete mode 100644 platforms/android/assets/www/styles/main.css delete mode 100644 platforms/android/assets/www/views/about.html delete mode 100644 platforms/android/assets/www/views/admin.html delete mode 100644 platforms/android/assets/www/views/charts.html delete mode 100644 platforms/android/assets/www/views/checkins.html delete mode 100644 platforms/android/assets/www/views/cms.html delete mode 100644 platforms/android/assets/www/views/cms/table.html delete mode 100644 platforms/android/assets/www/views/daily_check_in.html delete mode 100644 platforms/android/assets/www/views/daily_review.html delete mode 100644 platforms/android/assets/www/views/daily_review_conclusion.html delete mode 100644 platforms/android/assets/www/views/daily_review_summary.html delete mode 100644 platforms/android/assets/www/views/dailyreviewtester.html delete mode 100644 platforms/android/assets/www/views/ews.html delete mode 100644 platforms/android/assets/www/views/ews2.html delete mode 100644 platforms/android/assets/www/views/exit.html delete mode 100644 platforms/android/assets/www/views/foundations.html delete mode 100644 platforms/android/assets/www/views/home.html delete mode 100644 platforms/android/assets/www/views/instructions.html delete mode 100644 platforms/android/assets/www/views/intervention.html delete mode 100644 platforms/android/assets/www/views/lesson_player.html delete mode 100644 platforms/android/assets/www/views/load_interventions.html delete mode 100644 platforms/android/assets/www/views/localstoragebackuprestore.html delete mode 100644 platforms/android/assets/www/views/login.html delete mode 100644 platforms/android/assets/www/views/main.html delete mode 100644 platforms/android/assets/www/views/medications.html delete mode 100644 platforms/android/assets/www/views/myskills.html delete mode 100644 platforms/android/assets/www/views/partials/awareness.html delete mode 100644 platforms/android/assets/www/views/partials/navbar.html delete mode 100644 platforms/android/assets/www/views/partials/resources.html delete mode 100644 platforms/android/assets/www/views/partials/risks.html delete mode 100644 platforms/android/assets/www/views/personalsnapshot.html delete mode 100644 platforms/android/assets/www/views/questionGroups/html.html delete mode 100644 platforms/android/assets/www/views/questionGroups/multiple.html delete mode 100644 platforms/android/assets/www/views/questionGroups/nav.html delete mode 100644 platforms/android/assets/www/views/questionGroups/question_group.html delete mode 100644 platforms/android/assets/www/views/questionGroups/single.html delete mode 100644 platforms/android/assets/www/views/questionGroups/title.html delete mode 100644 platforms/android/assets/www/views/schedule.html delete mode 100644 platforms/android/assets/www/views/settings.html delete mode 100644 platforms/android/assets/www/views/skills.html delete mode 100644 platforms/android/assets/www/views/skills_awareness.html delete mode 100644 platforms/android/assets/www/views/skills_coping.html delete mode 100644 platforms/android/assets/www/views/skills_fundamentals.html delete mode 100644 platforms/android/assets/www/views/skills_lifestyle.html delete mode 100644 platforms/android/assets/www/views/skills_team.html delete mode 100644 platforms/android/assets/www/views/summary_player.html delete mode 100644 platforms/android/assets/www/views/team.html delete mode 100644 platforms/android/assets/www/views/usereditor.html delete mode 100644 platforms/android/assets/www/views/weekly_check_in.html delete mode 100644 platforms/android/assets/www/views/wellness.html delete mode 100644 platforms/android/build.gradle delete mode 100644 platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js delete mode 100644 platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js delete mode 100644 platforms/android/platform_www/cordova-js-src/exec.js delete mode 100644 platforms/android/platform_www/cordova-js-src/platform.js delete mode 100644 platforms/android/platform_www/cordova-js-src/plugin/android/app.js delete mode 100644 platforms/android/platform_www/cordova.js delete mode 100644 platforms/android/platform_www/cordova_plugins.js delete mode 100644 platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js delete mode 100644 platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js delete mode 100644 platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js delete mode 100644 platforms/android/project.properties delete mode 100644 platforms/android/res/drawable-land-hdpi/screen.png delete mode 100644 platforms/android/res/drawable-land-ldpi/screen.png delete mode 100644 platforms/android/res/drawable-land-mdpi/screen.png delete mode 100644 platforms/android/res/drawable-land-xhdpi/screen.png delete mode 100755 platforms/android/res/drawable-mdpi/icon.png delete mode 100644 platforms/android/res/drawable-port-hdpi/screen.png delete mode 100644 platforms/android/res/drawable-port-ldpi/screen.png delete mode 100644 platforms/android/res/drawable-port-mdpi/screen.png delete mode 100644 platforms/android/res/drawable-port-xhdpi/screen.png delete mode 100644 platforms/android/res/values/strings.xml delete mode 100644 platforms/android/res/xml/config.xml delete mode 100644 platforms/android/settings.gradle delete mode 100644 platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/PushConstants.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/PushPlugin.java delete mode 100644 platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java delete mode 100644 platforms/android/src/edu/northwestern/cbits/livewell/MainActivity.java delete mode 100644 platforms/browser/browser.json delete mode 100644 platforms/browser/config.xml delete mode 100644 platforms/browser/platform_www/cordova.js delete mode 100644 platforms/browser/platform_www/cordova_plugins.js delete mode 100644 platforms/browser/platform_www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js delete mode 100644 platforms/browser/platform_www/plugins/cordova-plugin-device/www/device.js delete mode 100644 platforms/browser/www/404.html delete mode 100644 platforms/browser/www/config.json delete mode 100644 platforms/browser/www/config.xml delete mode 100644 platforms/browser/www/cordova.js delete mode 100644 platforms/browser/www/cordova_plugins.js delete mode 100644 platforms/browser/www/favicon.ico delete mode 100755 platforms/browser/www/icon.png delete mode 100644 platforms/browser/www/images/logo.png delete mode 100644 platforms/browser/www/images/yeoman.png delete mode 100644 platforms/browser/www/index.html delete mode 100644 platforms/browser/www/lib/PurpleRobotClient/.bower.json delete mode 100644 platforms/browser/www/lib/PurpleRobotClient/.gitignore delete mode 100644 platforms/browser/www/lib/PurpleRobotClient/bower.json delete mode 100644 platforms/browser/www/lib/PurpleRobotClient/purple-robot.js delete mode 100644 platforms/browser/www/lib/PurpleRobotClient/purple-robot.min.js delete mode 100644 platforms/browser/www/lib/angular-animate/.bower.json delete mode 100644 platforms/browser/www/lib/angular-animate/README.md delete mode 100644 platforms/browser/www/lib/angular-animate/angular-animate.js delete mode 100644 platforms/browser/www/lib/angular-animate/angular-animate.min.js delete mode 100644 platforms/browser/www/lib/angular-animate/angular-animate.min.js.map delete mode 100644 platforms/browser/www/lib/angular-animate/bower.json delete mode 100644 platforms/browser/www/lib/angular-cookies/.bower.json delete mode 100644 platforms/browser/www/lib/angular-cookies/README.md delete mode 100644 platforms/browser/www/lib/angular-cookies/angular-cookies.js delete mode 100644 platforms/browser/www/lib/angular-cookies/angular-cookies.min.js delete mode 100644 platforms/browser/www/lib/angular-cookies/angular-cookies.min.js.map delete mode 100644 platforms/browser/www/lib/angular-cookies/bower.json delete mode 100644 platforms/browser/www/lib/angular-mocks/.bower.json delete mode 100644 platforms/browser/www/lib/angular-mocks/README.md delete mode 100644 platforms/browser/www/lib/angular-mocks/angular-mocks.js delete mode 100644 platforms/browser/www/lib/angular-mocks/bower.json delete mode 100644 platforms/browser/www/lib/angular-moment/angular-moment.js delete mode 100644 platforms/browser/www/lib/angular-resource/.bower.json delete mode 100644 platforms/browser/www/lib/angular-resource/README.md delete mode 100644 platforms/browser/www/lib/angular-resource/angular-resource.js delete mode 100644 platforms/browser/www/lib/angular-resource/angular-resource.min.js delete mode 100644 platforms/browser/www/lib/angular-resource/angular-resource.min.js.map delete mode 100644 platforms/browser/www/lib/angular-resource/bower.json delete mode 100644 platforms/browser/www/lib/angular-route/.bower.json delete mode 100644 platforms/browser/www/lib/angular-route/README.md delete mode 100644 platforms/browser/www/lib/angular-route/angular-route.js delete mode 100644 platforms/browser/www/lib/angular-route/angular-route.min.js delete mode 100644 platforms/browser/www/lib/angular-route/angular-route.min.js.map delete mode 100644 platforms/browser/www/lib/angular-route/bower.json delete mode 100644 platforms/browser/www/lib/angular-sanitize/.bower.json delete mode 100644 platforms/browser/www/lib/angular-sanitize/README.md delete mode 100644 platforms/browser/www/lib/angular-sanitize/angular-sanitize.js delete mode 100644 platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js delete mode 100644 platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js.map delete mode 100644 platforms/browser/www/lib/angular-sanitize/bower.json delete mode 100644 platforms/browser/www/lib/angular-scenario/.bower.json delete mode 100644 platforms/browser/www/lib/angular-scenario/README.md delete mode 100644 platforms/browser/www/lib/angular-scenario/angular-scenario.js delete mode 100644 platforms/browser/www/lib/angular-scenario/bower.json delete mode 100644 platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter-config.js delete mode 100644 platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter.js delete mode 100644 platforms/browser/www/lib/angular-touch/.bower.json delete mode 100644 platforms/browser/www/lib/angular-touch/README.md delete mode 100644 platforms/browser/www/lib/angular-touch/angular-touch.js delete mode 100644 platforms/browser/www/lib/angular-touch/angular-touch.min.js delete mode 100644 platforms/browser/www/lib/angular-touch/angular-touch.min.js.map delete mode 100644 platforms/browser/www/lib/angular-touch/bower.json delete mode 100644 platforms/browser/www/lib/angular/.bower.json delete mode 100644 platforms/browser/www/lib/angular/README.md delete mode 100644 platforms/browser/www/lib/angular/angular-csp.css delete mode 100644 platforms/browser/www/lib/angular/angular.js delete mode 100644 platforms/browser/www/lib/angular/angular.min.js delete mode 100644 platforms/browser/www/lib/angular/angular.min.js.gzip delete mode 100644 platforms/browser/www/lib/angular/angular.min.js.map delete mode 100644 platforms/browser/www/lib/angular/bower.json delete mode 100644 platforms/browser/www/lib/bootstrap/.bower.json delete mode 100644 platforms/browser/www/lib/bootstrap/Gruntfile.js delete mode 100644 platforms/browser/www/lib/bootstrap/LICENSE delete mode 100644 platforms/browser/www/lib/bootstrap/README.md delete mode 100644 platforms/browser/www/lib/bootstrap/bower.json delete mode 100644 platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100644 platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100644 platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100644 platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100644 platforms/browser/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js delete mode 100644 platforms/browser/www/lib/bootstrap/grunt/bs-lessdoc-parser.js delete mode 100644 platforms/browser/www/lib/bootstrap/grunt/bs-raw-files-generator.js delete mode 100644 platforms/browser/www/lib/bootstrap/grunt/sauce_browsers.yml delete mode 100644 platforms/browser/www/lib/bootstrap/js/affix.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/alert.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/button.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/carousel.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/collapse.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/dropdown.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/modal.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/popover.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/scrollspy.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/tab.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/tooltip.js delete mode 100644 platforms/browser/www/lib/bootstrap/js/transition.js delete mode 100644 platforms/browser/www/lib/bootstrap/less/alerts.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/badges.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/bootstrap.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/breadcrumbs.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/button-groups.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/buttons.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/carousel.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/close.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/code.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/component-animations.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/dropdowns.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/forms.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/glyphicons.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/grid.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/input-groups.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/jumbotron.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/labels.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/list-group.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/media.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/alerts.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/background-variant.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/border-radius.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/buttons.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/center-block.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/clearfix.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/forms.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/gradients.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/grid-framework.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/grid.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/hide-text.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/image.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/labels.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/list-group.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/nav-divider.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/nav-vertical-align.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/opacity.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/pagination.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/panels.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/progress-bar.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/reset-filter.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/resize.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/responsive-visibility.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/size.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/tab-focus.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/table-row.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/text-emphasis.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/text-overflow.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/mixins/vendor-prefixes.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/modals.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/navbar.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/navs.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/normalize.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/pager.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/pagination.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/panels.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/popovers.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/print.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/progress-bars.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/responsive-embed.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/responsive-utilities.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/scaffolding.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/tables.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/theme.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/thumbnails.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/tooltip.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/type.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/utilities.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/variables.less delete mode 100644 platforms/browser/www/lib/bootstrap/less/wells.less delete mode 100644 platforms/browser/www/lib/bootstrap/package.json delete mode 100644 platforms/browser/www/lib/ckeditor/.bower.json delete mode 100644 platforms/browser/www/lib/ckeditor/CHANGES.md delete mode 100644 platforms/browser/www/lib/ckeditor/LICENSE.md delete mode 100644 platforms/browser/www/lib/ckeditor/README.md delete mode 100644 platforms/browser/www/lib/ckeditor/adapters/jquery.js delete mode 100644 platforms/browser/www/lib/ckeditor/bower.json delete mode 100644 platforms/browser/www/lib/ckeditor/ckeditor.js delete mode 100644 platforms/browser/www/lib/ckeditor/composer.json delete mode 100644 platforms/browser/www/lib/ckeditor/config.js delete mode 100644 platforms/browser/www/lib/ckeditor/contents.css delete mode 100644 platforms/browser/www/lib/ckeditor/lang/_translationstatus.txt delete mode 100644 platforms/browser/www/lib/ckeditor/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/about/dialogs/about.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/adobeair/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/ajax/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/autogrow/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bbcode/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/bidi/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippet/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colorbutton/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/colordialog/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/devtools/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/dialog/dialogDefinition.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/dialogadvtab/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/dialogs/div.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/icons/creatediv.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/div/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/divarea/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/docprops/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/dialogs/find.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/find-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/find.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/icons/replace.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/find/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/dialogs/flash.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/icons/flash.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/images/placeholder.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/flash/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/font/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/button.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/form.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/radio.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/select.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textarea.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textfield.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/button.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/checkbox.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/form.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/imagebutton.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/radio.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/select-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/select.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/forms/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/icons.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/icons_hidpi.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/icons/iframe.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/images/placeholder.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframe/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/iframedialog/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image/dialogs/image.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image/images/noimage.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/dialogs/image2.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/icons/image.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/image2/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/indentblock/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyblock.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifycenter.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyleft.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyright.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/justify/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/icons/hidpi/language.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/icons/language.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/language/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/lineutils/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/link/dialogs/anchor.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/link/dialogs/link.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/link/images/anchor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/liststyle/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/images/loader.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/mathjax/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/newpage/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pagebreak/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/panelbutton/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/pastefromword/filter/default.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/placeholder/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/preview/preview.html delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/icons/hidpi/print.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/icons/print.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/print/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/icons/hidpi/save.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/icons/save.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/save/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/scayt/LICENSE.md delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/options.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/icons/selectall.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/selectall/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sharedspace/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_address.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_div.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h1.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h2.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h3.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h4.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h5.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h6.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_p.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_pre.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/showblocks/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/icons/smiley.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/smiley/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/sourcedialog/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/stylesheetparser/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/table/dialogs/table.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/tableresize/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/af.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/bn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/bs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-au.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/fo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/gu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/hi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/is.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ka.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/lt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/mn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ms.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ro.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr-latn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/th.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/templates/default.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template1.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template2.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template3.gif delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/bg.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/da.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/et.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/id.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ku.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/lv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/mk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/si.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sq.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ug.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/yui.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/images/handle.png delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/ar.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/ca.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/cs.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/cy.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/de.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/el.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/en-gb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/en.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/eo.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/es.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/fa.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/fi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/fr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/gl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/he.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/hr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/hu.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/it.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/ja.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/km.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/ko.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/nb.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/nl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/no.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/pl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt-br.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/ru.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/sk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/sl.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/sv.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/tr.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/tt.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/uk.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/vi.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh-cn.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/widget/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/LICENSE.md delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js delete mode 100644 platforms/browser/www/lib/ckeditor/plugins/xml/plugin.js delete mode 100644 platforms/browser/www/lib/ckeditor/samples/ajax.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/api.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/appendto.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/assets/inlineall/logo.png delete mode 100644 platforms/browser/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css delete mode 100644 platforms/browser/www/lib/ckeditor/samples/assets/posteddata.php delete mode 100644 platforms/browser/www/lib/ckeditor/samples/assets/sample.jpg delete mode 100644 platforms/browser/www/lib/ckeditor/samples/assets/uilanguages/languages.js delete mode 100644 platforms/browser/www/lib/ckeditor/samples/datafiltering.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/divreplace.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/index.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/inlineall.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/inlinebycode.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/inlinetextarea.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/jquery.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/devtools/devtools.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/dialog/dialog.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/divarea/divarea.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/docprops/docprops.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/image2/image2.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/magicline/magicline.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/readonly.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/replacebyclass.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/replacebycode.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/sample.css delete mode 100644 platforms/browser/www/lib/ckeditor/samples/sample.js delete mode 100644 platforms/browser/www/lib/ckeditor/samples/sample_posteddata.php delete mode 100644 platforms/browser/www/lib/ckeditor/samples/tabindex.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/uicolor.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/uilanguages.html delete mode 100644 platforms/browser/www/lib/ckeditor/samples/xhtmlstyle.html delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/dialog.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie7.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie8.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/dialog_iequirks.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/editor.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/editor_ie.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/editor_ie7.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/editor_ie8.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/editor_iequirks.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/icons.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/icons_hidpi.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.gif delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/mini.gif delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/sprites.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/sprites_ie6.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/images/toolbar_start.gif delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/readme.md delete mode 100644 platforms/browser/www/lib/ckeditor/skins/kama/skin.js delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/dialog.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie7.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie8.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/dialog_iequirks.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor_gecko.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor_ie.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor_ie7.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor_ie8.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/editor_iequirks.css delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/icons.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/icons_hidpi.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/arrow.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/close.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/close.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/lock-open.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/lock.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/images/refresh.png delete mode 100644 platforms/browser/www/lib/ckeditor/skins/moono/readme.md delete mode 100644 platforms/browser/www/lib/ckeditor/styles.js delete mode 100644 platforms/browser/www/lib/d3/.bower.json delete mode 100644 platforms/browser/www/lib/d3/.spmignore delete mode 100644 platforms/browser/www/lib/d3/CONTRIBUTING.md delete mode 100644 platforms/browser/www/lib/d3/LICENSE delete mode 100644 platforms/browser/www/lib/d3/README.md delete mode 100644 platforms/browser/www/lib/d3/bower.json delete mode 100644 platforms/browser/www/lib/d3/composer.json delete mode 100644 platforms/browser/www/lib/d3/d3.js delete mode 100644 platforms/browser/www/lib/d3/d3.min.js delete mode 100644 platforms/browser/www/lib/es5-shim/.bower.json delete mode 100644 platforms/browser/www/lib/es5-shim/CHANGES delete mode 100644 platforms/browser/www/lib/es5-shim/CONTRIBUTORS.md delete mode 100644 platforms/browser/www/lib/es5-shim/LICENSE delete mode 100644 platforms/browser/www/lib/es5-shim/README.md delete mode 100644 platforms/browser/www/lib/es5-shim/bower.json delete mode 100644 platforms/browser/www/lib/es5-shim/component.json delete mode 100644 platforms/browser/www/lib/es5-shim/es5-sham.js delete mode 100644 platforms/browser/www/lib/es5-shim/es5-sham.map delete mode 100644 platforms/browser/www/lib/es5-shim/es5-sham.min.js delete mode 100644 platforms/browser/www/lib/es5-shim/es5-shim.js delete mode 100644 platforms/browser/www/lib/es5-shim/es5-shim.map delete mode 100644 platforms/browser/www/lib/es5-shim/es5-shim.min.js delete mode 100644 platforms/browser/www/lib/es5-shim/package.json delete mode 100644 platforms/browser/www/lib/es5-shim/shims.json delete mode 100755 platforms/browser/www/lib/highcharts-ng/highcharts-ng.js delete mode 100755 platforms/browser/www/lib/highcharts-ng/highcharts-ng.min.js delete mode 100644 platforms/browser/www/lib/highcharts/adapters/standalone-framework.js delete mode 100644 platforms/browser/www/lib/highcharts/adapters/standalone-framework.src.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts-3d.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts-3d.src.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts-more.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts-more.src.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts.js delete mode 100644 platforms/browser/www/lib/highcharts/highcharts.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/boost.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/boost.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/broken-axis.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/broken-axis.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/canvas-tools.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/canvas-tools.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/data.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/data.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/drilldown.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/drilldown.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/exporting.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/exporting.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/funnel.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/funnel.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/heatmap.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/heatmap.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/no-data-to-display.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/no-data-to-display.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/offline-exporting.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/offline-exporting.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/solid-gauge.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/solid-gauge.src.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/treemap.js delete mode 100644 platforms/browser/www/lib/highcharts/modules/treemap.src.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/dark-blue.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/dark-green.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/dark-unica.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/gray.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/grid-light.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/grid.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/sand-signika.js delete mode 100644 platforms/browser/www/lib/highcharts/themes/skies.js delete mode 100644 platforms/browser/www/lib/jquery/.bower.json delete mode 100644 platforms/browser/www/lib/jquery/MIT-LICENSE.txt delete mode 100644 platforms/browser/www/lib/jquery/bower.json delete mode 100644 platforms/browser/www/lib/jquery/src/ajax.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/jsonp.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/load.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/parseJSON.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/parseXML.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/script.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/var/nonce.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/var/rquery.js delete mode 100644 platforms/browser/www/lib/jquery/src/ajax/xhr.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes/attr.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes/classes.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes/prop.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes/support.js delete mode 100644 platforms/browser/www/lib/jquery/src/attributes/val.js delete mode 100644 platforms/browser/www/lib/jquery/src/callbacks.js delete mode 100644 platforms/browser/www/lib/jquery/src/core.js delete mode 100644 platforms/browser/www/lib/jquery/src/core/access.js delete mode 100644 platforms/browser/www/lib/jquery/src/core/init.js delete mode 100644 platforms/browser/www/lib/jquery/src/core/parseHTML.js delete mode 100644 platforms/browser/www/lib/jquery/src/core/ready.js delete mode 100644 platforms/browser/www/lib/jquery/src/core/var/rsingleTag.js delete mode 100644 platforms/browser/www/lib/jquery/src/css.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/addGetHookIf.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/curCSS.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/defaultDisplay.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/hiddenVisibleSelectors.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/support.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/swap.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/var/cssExpand.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/var/getStyles.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/var/isHidden.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/var/rmargin.js delete mode 100644 platforms/browser/www/lib/jquery/src/css/var/rnumnonpx.js delete mode 100644 platforms/browser/www/lib/jquery/src/data.js delete mode 100644 platforms/browser/www/lib/jquery/src/data/Data.js delete mode 100644 platforms/browser/www/lib/jquery/src/data/accepts.js delete mode 100644 platforms/browser/www/lib/jquery/src/data/var/data_priv.js delete mode 100644 platforms/browser/www/lib/jquery/src/data/var/data_user.js delete mode 100644 platforms/browser/www/lib/jquery/src/deferred.js delete mode 100644 platforms/browser/www/lib/jquery/src/deprecated.js delete mode 100644 platforms/browser/www/lib/jquery/src/dimensions.js delete mode 100644 platforms/browser/www/lib/jquery/src/effects.js delete mode 100644 platforms/browser/www/lib/jquery/src/effects/Tween.js delete mode 100644 platforms/browser/www/lib/jquery/src/effects/animatedSelector.js delete mode 100644 platforms/browser/www/lib/jquery/src/event.js delete mode 100644 platforms/browser/www/lib/jquery/src/event/alias.js delete mode 100644 platforms/browser/www/lib/jquery/src/event/support.js delete mode 100644 platforms/browser/www/lib/jquery/src/exports/amd.js delete mode 100644 platforms/browser/www/lib/jquery/src/exports/global.js delete mode 100644 platforms/browser/www/lib/jquery/src/intro.js delete mode 100644 platforms/browser/www/lib/jquery/src/jquery.js delete mode 100644 platforms/browser/www/lib/jquery/src/manipulation.js delete mode 100644 platforms/browser/www/lib/jquery/src/manipulation/_evalUrl.js delete mode 100644 platforms/browser/www/lib/jquery/src/manipulation/support.js delete mode 100644 platforms/browser/www/lib/jquery/src/manipulation/var/rcheckableType.js delete mode 100644 platforms/browser/www/lib/jquery/src/offset.js delete mode 100644 platforms/browser/www/lib/jquery/src/outro.js delete mode 100644 platforms/browser/www/lib/jquery/src/queue.js delete mode 100644 platforms/browser/www/lib/jquery/src/queue/delay.js delete mode 100644 platforms/browser/www/lib/jquery/src/selector-native.js delete mode 100644 platforms/browser/www/lib/jquery/src/selector-sizzle.js delete mode 100644 platforms/browser/www/lib/jquery/src/selector.js delete mode 100644 platforms/browser/www/lib/jquery/src/serialize.js delete mode 100644 platforms/browser/www/lib/jquery/src/traversing.js delete mode 100644 platforms/browser/www/lib/jquery/src/traversing/findFilter.js delete mode 100644 platforms/browser/www/lib/jquery/src/traversing/var/rneedsContext.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/arr.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/class2type.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/concat.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/hasOwn.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/indexOf.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/pnum.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/push.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/rnotwhite.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/slice.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/strundefined.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/support.js delete mode 100644 platforms/browser/www/lib/jquery/src/var/toString.js delete mode 100644 platforms/browser/www/lib/jquery/src/wrap.js delete mode 100644 platforms/browser/www/lib/json3/.bower.json delete mode 100644 platforms/browser/www/lib/json3/CHANGELOG.md delete mode 100644 platforms/browser/www/lib/json3/CONTRIBUTING.md delete mode 100644 platforms/browser/www/lib/json3/LICENSE delete mode 100644 platforms/browser/www/lib/json3/README.md delete mode 100644 platforms/browser/www/lib/json3/bower.json delete mode 100644 platforms/browser/www/lib/json3/lib/json3.js delete mode 100644 platforms/browser/www/lib/json3/lib/json3.min.js delete mode 100644 platforms/browser/www/lib/lodash/.bower.json delete mode 100644 platforms/browser/www/lib/lodash/LICENSE.txt delete mode 100644 platforms/browser/www/lib/lodash/bower.json delete mode 100644 platforms/browser/www/lib/moment/moment.js delete mode 100644 platforms/browser/www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js delete mode 100644 platforms/browser/www/plugins/cordova-plugin-device/www/device.js delete mode 100644 platforms/browser/www/robots.txt delete mode 100644 platforms/browser/www/scripts/app.js delete mode 100644 platforms/browser/www/scripts/controllers/about.js delete mode 100644 platforms/browser/www/scripts/controllers/admin.js delete mode 100644 platforms/browser/www/scripts/controllers/awareness.js delete mode 100644 platforms/browser/www/scripts/controllers/backup delete mode 100644 platforms/browser/www/scripts/controllers/charts.js delete mode 100644 platforms/browser/www/scripts/controllers/checkins.js delete mode 100644 platforms/browser/www/scripts/controllers/cms.js delete mode 100644 platforms/browser/www/scripts/controllers/daily_check_in.js delete mode 100644 platforms/browser/www/scripts/controllers/daily_review.js delete mode 100644 platforms/browser/www/scripts/controllers/daily_review_conclusion.js delete mode 100644 platforms/browser/www/scripts/controllers/daily_review_summary.js delete mode 100644 platforms/browser/www/scripts/controllers/dailyreviewtester.js delete mode 100644 platforms/browser/www/scripts/controllers/ews.js delete mode 100644 platforms/browser/www/scripts/controllers/ews2.js delete mode 100644 platforms/browser/www/scripts/controllers/exit.js delete mode 100644 platforms/browser/www/scripts/controllers/fetch_content.js delete mode 100644 platforms/browser/www/scripts/controllers/foundations.js delete mode 100644 platforms/browser/www/scripts/controllers/home.js delete mode 100644 platforms/browser/www/scripts/controllers/instructions.js delete mode 100644 platforms/browser/www/scripts/controllers/intervention.js delete mode 100644 platforms/browser/www/scripts/controllers/lesson_player.js delete mode 100644 platforms/browser/www/scripts/controllers/load_interventions.js delete mode 100644 platforms/browser/www/scripts/controllers/localstoragebackuprestore.js delete mode 100644 platforms/browser/www/scripts/controllers/login.js delete mode 100644 platforms/browser/www/scripts/controllers/main.js delete mode 100644 platforms/browser/www/scripts/controllers/medications.js delete mode 100644 platforms/browser/www/scripts/controllers/myskills.js delete mode 100644 platforms/browser/www/scripts/controllers/personalsnapshot.js delete mode 100644 platforms/browser/www/scripts/controllers/resources.js delete mode 100644 platforms/browser/www/scripts/controllers/risks.js delete mode 100644 platforms/browser/www/scripts/controllers/schedule.js delete mode 100644 platforms/browser/www/scripts/controllers/settings.js delete mode 100644 platforms/browser/www/scripts/controllers/setup.js delete mode 100644 platforms/browser/www/scripts/controllers/skills.js delete mode 100644 platforms/browser/www/scripts/controllers/skills_awareness.js delete mode 100644 platforms/browser/www/scripts/controllers/skills_coping.js delete mode 100644 platforms/browser/www/scripts/controllers/skills_fundamentals.js delete mode 100644 platforms/browser/www/scripts/controllers/skills_lifestyle.js delete mode 100644 platforms/browser/www/scripts/controllers/skills_team.js delete mode 100644 platforms/browser/www/scripts/controllers/summary_player.js delete mode 100644 platforms/browser/www/scripts/controllers/team.js delete mode 100644 platforms/browser/www/scripts/controllers/usereditor.js delete mode 100644 platforms/browser/www/scripts/controllers/weekly_check_in.js delete mode 100644 platforms/browser/www/scripts/controllers/wellness.js delete mode 100644 platforms/browser/www/scripts/questionGroups/questiongroup.js delete mode 100644 platforms/browser/www/scripts/services/clinicalstatusupdate.js delete mode 100644 platforms/browser/www/scripts/services/dailyreview.js delete mode 100644 platforms/browser/www/scripts/services/guid.js delete mode 100644 platforms/browser/www/scripts/services/pound.js delete mode 100644 platforms/browser/www/scripts/services/questions.js delete mode 100644 platforms/browser/www/scripts/services/static_content.js delete mode 100644 platforms/browser/www/scripts/services/user_data.js delete mode 100644 platforms/browser/www/scripts/services/user_details.js delete mode 100644 platforms/browser/www/scripts/vendor/cordova.android.js delete mode 100644 platforms/browser/www/scripts/vendor/cordova.js delete mode 100644 platforms/browser/www/styles/bootstrap.min.css delete mode 100644 platforms/browser/www/styles/main.css delete mode 100644 platforms/browser/www/views/about.html delete mode 100644 platforms/browser/www/views/admin.html delete mode 100644 platforms/browser/www/views/charts.html delete mode 100644 platforms/browser/www/views/checkins.html delete mode 100644 platforms/browser/www/views/cms.html delete mode 100644 platforms/browser/www/views/cms/table.html delete mode 100644 platforms/browser/www/views/daily_check_in.html delete mode 100644 platforms/browser/www/views/daily_review.html delete mode 100644 platforms/browser/www/views/daily_review_conclusion.html delete mode 100644 platforms/browser/www/views/daily_review_summary.html delete mode 100644 platforms/browser/www/views/dailyreviewtester.html delete mode 100644 platforms/browser/www/views/ews.html delete mode 100644 platforms/browser/www/views/ews2.html delete mode 100644 platforms/browser/www/views/exit.html delete mode 100644 platforms/browser/www/views/foundations.html delete mode 100644 platforms/browser/www/views/home.html delete mode 100644 platforms/browser/www/views/instructions.html delete mode 100644 platforms/browser/www/views/intervention.html delete mode 100644 platforms/browser/www/views/lesson_player.html delete mode 100644 platforms/browser/www/views/load_interventions.html delete mode 100644 platforms/browser/www/views/localstoragebackuprestore.html delete mode 100644 platforms/browser/www/views/login.html delete mode 100644 platforms/browser/www/views/main.html delete mode 100644 platforms/browser/www/views/medications.html delete mode 100644 platforms/browser/www/views/myskills.html delete mode 100644 platforms/browser/www/views/partials/awareness.html delete mode 100644 platforms/browser/www/views/partials/navbar.html delete mode 100644 platforms/browser/www/views/partials/resources.html delete mode 100644 platforms/browser/www/views/partials/risks.html delete mode 100644 platforms/browser/www/views/personalsnapshot.html delete mode 100644 platforms/browser/www/views/questionGroups/html.html delete mode 100644 platforms/browser/www/views/questionGroups/multiple.html delete mode 100644 platforms/browser/www/views/questionGroups/nav.html delete mode 100644 platforms/browser/www/views/questionGroups/question_group.html delete mode 100644 platforms/browser/www/views/questionGroups/single.html delete mode 100644 platforms/browser/www/views/questionGroups/title.html delete mode 100644 platforms/browser/www/views/schedule.html delete mode 100644 platforms/browser/www/views/settings.html delete mode 100644 platforms/browser/www/views/skills.html delete mode 100644 platforms/browser/www/views/skills_awareness.html delete mode 100644 platforms/browser/www/views/skills_coping.html delete mode 100644 platforms/browser/www/views/skills_fundamentals.html delete mode 100644 platforms/browser/www/views/skills_lifestyle.html delete mode 100644 platforms/browser/www/views/skills_team.html delete mode 100644 platforms/browser/www/views/summary_player.html delete mode 100644 platforms/browser/www/views/team.html delete mode 100644 platforms/browser/www/views/usereditor.html delete mode 100644 platforms/browser/www/views/weekly_check_in.html delete mode 100644 platforms/browser/www/views/wellness.html delete mode 100644 platforms/platforms.json diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json deleted file mode 100644 index bb245d21..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/inherits/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.1", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits.git" - }, - "license": "ISC", - "scripts": { - "test": "node test" - }, - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "_id": "inherits@2.0.1", - "dist": { - "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", - "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "_from": "inherits@>=2.0.0 <3.0.0", - "_npmVersion": "1.3.8", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {}, - "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "readme": "ERROR: No README data found!", - "homepage": "https://github.com/isaacs/inherits#readme" -} diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md deleted file mode 100644 index 3fd6d0bc..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -## Usage: - -```javascript -var LRU = require("lru-cache") - , options = { max: 500 - , length: function (n) { return n * 2 } - , dispose: function (key, n) { n.close() } - , maxAge: 1000 * 60 * 60 } - , cache = LRU(options) - , otherCache = LRU(50) // sets just the max size - -cache.set("key", "value") -cache.get("key") // "value" - -cache.reset() // empty the cache -``` - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -## Options - -* `max` The maximum size of the cache, checked by applying the length - function to all values in the cache. Not setting this is kind of - silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. -* `maxAge` Maximum age in ms. Items are not pro-actively pruned out - as they age, but if you try to get an item that is too old, it'll - drop it and return undefined instead of giving it to you. -* `length` Function that is used to calculate the length of stored - items. If you're storing strings or buffers, then you probably want - to do something like `function(n){return n.length}`. The default is - `function(n){return 1}`, which is fine if you want to store `max` - like-sized things. -* `dispose` Function that is called on items when they are dropped - from the cache. This can be handy if you want to close file - descriptors or do other cleanup tasks when items are no longer - accessible. Called with `key, value`. It's called *before* - actually removing the item from the internal cache, so if you want - to immediately put it back in, you'll have to do that in a - `nextTick` or `setTimeout` callback or it won't do anything. -* `stale` By default, if you set a `maxAge`, it'll only actually pull - stale items out of the cache when you `get(key)`. (That is, it's - not pre-emptively doing a `setTimeout` or anything.) If you set - `stale:true`, it'll return the stale value before deleting it. If - you don't set this, then it'll return `undefined` when you try to - get a stale entry, as if it had already been deleted. - -## API - -* `set(key, value, maxAge)` -* `get(key) => value` - - Both of these will update the "recently used"-ness of the key. - They do what you think. `max` is optional and overrides the - cache `max` option if provided. - -* `peek(key)` - - Returns the key value (or `undefined` if not found) without - updating the "recently used"-ness of the key. - - (If you find yourself using this a lot, you *might* be using the - wrong sort of data structure, but there are some use cases where - it's handy.) - -* `del(key)` - - Deletes a key out of the cache. - -* `reset()` - - Clear the cache entirely, throwing away all values. - -* `has(key)` - - Check if a key is in the cache, without updating the recent-ness - or deleting it for being stale. - -* `forEach(function(value,key,cache), [thisp])` - - Just like `Array.prototype.forEach`. Iterates over all the keys - in the cache, in order of recent-ness. (Ie, more recently used - items are iterated over first.) - -* `keys()` - - Return an array of the keys in the cache. - -* `values()` - - Return an array of the values in the cache. - -* `length()` - - Return total length of objects in cache taking into account - `length` options function. - -* `itemCount` - - Return total quantity of objects currently in cache. Note, that - `stale` (see options) items are returned as part of this item - count. - -* `dump()` - - Return an array of the cache entries ready for serialization and usage - with 'destinationCache.load(arr)`. - -* `load(cacheEntriesArray)` - - Loads another cache entries array, obtained with `sourceCache.dump()`, - into the cache. The destination cache is reset before loading new entries diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index 32c2d2d9..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,318 +0,0 @@ -;(function () { // closure for web browsers - -if (typeof module === 'object' && module.exports) { - module.exports = LRUCache -} else { - // just set the global for non-node platforms. - this.LRUCache = LRUCache -} - -function hOP (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key) -} - -function naiveLength () { return 1 } - -function LRUCache (options) { - if (!(this instanceof LRUCache)) - return new LRUCache(options) - - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - this._max = options.max - // Kind of weird to have a default max of Infinity, but oh well. - if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) - this._max = Infinity - - this._lengthCalculator = options.length || naiveLength - if (typeof this._lengthCalculator !== "function") - this._lengthCalculator = naiveLength - - this._allowStale = options.stale || false - this._maxAge = options.maxAge || null - this._dispose = options.dispose - this.reset() -} - -// resize the cache when the max changes. -Object.defineProperty(LRUCache.prototype, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - this._max = mL - if (this._length > this._max) trim(this) - } - , get : function () { return this._max } - , enumerable : true - }) - -// resize the cache when the lengthCalculator changes. -Object.defineProperty(LRUCache.prototype, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - this._lengthCalculator = naiveLength - this._length = this._itemCount - for (var key in this._cache) { - this._cache[key].length = 1 - } - } else { - this._lengthCalculator = lC - this._length = 0 - for (var key in this._cache) { - this._cache[key].length = this._lengthCalculator(this._cache[key].value) - this._length += this._cache[key].length - } - } - - if (this._length > this._max) trim(this) - } - , get : function () { return this._lengthCalculator } - , enumerable : true - }) - -Object.defineProperty(LRUCache.prototype, "length", - { get : function () { return this._length } - , enumerable : true - }) - - -Object.defineProperty(LRUCache.prototype, "itemCount", - { get : function () { return this._itemCount } - , enumerable : true - }) - -LRUCache.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0 - var itemCount = this._itemCount - - for (var k = this._mru - 1; k >= 0 && i < itemCount; k--) if (this._lruList[k]) { - i++ - var hit = this._lruList[k] - if (isStale(this, hit)) { - del(this, hit) - if (!this._allowStale) hit = undefined - } - if (hit) { - fn.call(thisp, hit.value, hit.key, this) - } - } -} - -LRUCache.prototype.keys = function () { - var keys = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - keys[i++] = hit.key - } - return keys -} - -LRUCache.prototype.values = function () { - var values = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - values[i++] = hit.value - } - return values -} - -LRUCache.prototype.reset = function () { - if (this._dispose && this._cache) { - for (var k in this._cache) { - this._dispose(k, this._cache[k].value) - } - } - - this._cache = Object.create(null) // hash of items by key - this._lruList = Object.create(null) // list of items in order of use recency - this._mru = 0 // most recently used - this._lru = 0 // least recently used - this._length = 0 // number of items in the list - this._itemCount = 0 -} - -LRUCache.prototype.dump = function () { - var arr = [] - var i = 0 - - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - if (!isStale(this, hit)) { - //Do not store staled hits - ++i - arr.push({ - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }); - } - } - //arr has the most read first - return arr -} - -LRUCache.prototype.dumpLru = function () { - return this._lruList -} - -LRUCache.prototype.set = function (key, value, maxAge) { - maxAge = maxAge || this._maxAge - var now = maxAge ? Date.now() : 0 - var len = this._lengthCalculator(value) - - if (hOP(this._cache, key)) { - if (len > this._max) { - del(this, this._cache[key]) - return false - } - // dispose of the old one before overwriting - if (this._dispose) - this._dispose(key, this._cache[key].value) - - this._cache[key].now = now - this._cache[key].maxAge = maxAge - this._cache[key].value = value - this._length += (len - this._cache[key].length) - this._cache[key].length = len - this.get(key) - - if (this._length > this._max) - trim(this) - - return true - } - - var hit = new Entry(key, value, this._mru++, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this._max) { - if (this._dispose) this._dispose(key, value) - return false - } - - this._length += hit.length - this._lruList[hit.lu] = this._cache[key] = hit - this._itemCount ++ - - if (this._length > this._max) - trim(this) - - return true -} - -LRUCache.prototype.has = function (key) { - if (!hOP(this._cache, key)) return false - var hit = this._cache[key] - if (isStale(this, hit)) { - return false - } - return true -} - -LRUCache.prototype.get = function (key) { - return get(this, key, true) -} - -LRUCache.prototype.peek = function (key) { - return get(this, key, false) -} - -LRUCache.prototype.pop = function () { - var hit = this._lruList[this._lru] - del(this, hit) - return hit || null -} - -LRUCache.prototype.del = function (key) { - del(this, this._cache[key]) -} - -LRUCache.prototype.load = function (arr) { - //reset the cache - this.reset(); - - var now = Date.now() - //A previous serialized cache has the most recent items first - for (var l = arr.length - 1; l >= 0; l-- ) { - var hit = arr[l] - var expiresAt = hit.e || 0 - if (expiresAt === 0) { - //the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - } else { - var maxAge = expiresAt - now - //dont add already expired items - if (maxAge > 0) this.set(hit.k, hit.v, maxAge) - } - } -} - -function get (self, key, doUse) { - var hit = self._cache[key] - if (hit) { - if (isStale(self, hit)) { - del(self, hit) - if (!self._allowStale) hit = undefined - } else { - if (doUse) use(self, hit) - } - if (hit) hit = hit.value - } - return hit -} - -function isStale(self, hit) { - if (!hit || (!hit.maxAge && !self._maxAge)) return false - var stale = false; - var diff = Date.now() - hit.now - if (hit.maxAge) { - stale = diff > hit.maxAge - } else { - stale = self._maxAge && (diff > self._maxAge) - } - return stale; -} - -function use (self, hit) { - shiftLU(self, hit) - hit.lu = self._mru ++ - self._lruList[hit.lu] = hit -} - -function trim (self) { - while (self._lru < self._mru && self._length > self._max) - del(self, self._lruList[self._lru]) -} - -function shiftLU (self, hit) { - delete self._lruList[ hit.lu ] - while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ -} - -function del (self, hit) { - if (hit) { - if (self._dispose) self._dispose(hit.key, hit.value) - self._length -= hit.length - self._itemCount -- - delete self._cache[ hit.key ] - shiftLU(self, hit) - } -} - -// classy, since V8 prefers predictable objects. -function Entry (key, value, lu, length, now, maxAge) { - this.key = key - this.value = value - this.lu = lu - this.length = length - this.now = now - if (maxAge) this.maxAge = maxAge -} - -})() diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json deleted file mode 100644 index 80fa97e0..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "lru-cache", - "description": "A cache object that deletes the least-recently-used items.", - "version": "2.7.0", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "keywords": [ - "mru", - "lru", - "cache" - ], - "scripts": { - "test": "tap test --gc" - }, - "main": "lib/lru-cache.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "devDependencies": { - "tap": "^1.2.0", - "weak": "" - }, - "license": "ISC", - "gitHead": "fc6ee93093f4e463e5946736d4c48adc013724d1", - "bugs": { - "url": "https://github.com/isaacs/node-lru-cache/issues" - }, - "homepage": "https://github.com/isaacs/node-lru-cache#readme", - "_id": "lru-cache@2.7.0", - "_shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6", - "_from": "lru-cache@>=2.0.0 <3.0.0", - "_npmVersion": "3.3.2", - "_nodeVersion": "4.0.0", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6", - "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - { - "name": "othiym23", - "email": "ogd@aoaioxxysz.net" - } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js deleted file mode 100644 index b47225f1..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,396 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU({max: 10}) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.max, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("max", function (t) { - var cache = new LRU(3) - - // test changing the max, verify that the LRU items get dropped. - cache.max = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the max restriction, and try again. - cache.max = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.max, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU({ - max: 100, - length: function (item) { return item.size } - }) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.max, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU({ - max: 10, - length: function (item) { return item.size } - }) - t.equal(cache.max, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU({ - max:8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) - -test("lru recently updated with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - t.equal(cache.length, 6) //CCC BB A - cache.set("a", "+A") - t.equal(cache.length, 7) //+A CCC BB - cache.set("b", "++BB") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("c", "oversized") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("a", "oversized") - t.equal(cache.length, 4) //++BB - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), "++BB") - t.end() -}) - -test("set returns proper booleans", function(t) { - var cache = new LRU({ - max: 5, - length: function (item) { return item.length } - }) - - t.equal(cache.set("a", "A"), true) - - // should return false for max exceeded - t.equal(cache.set("b", "donuts"), false) - - t.equal(cache.set("b", "B"), true) - t.equal(cache.set("c", "CCCC"), true) - t.end() -}) - -test("drop the old items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A") - - setTimeout(function () { - cache.set("b", "b") - t.equal(cache.get("a"), "A") - }, 25) - - setTimeout(function () { - cache.set("c", "C") - // timed out - t.notOk(cache.get("a")) - }, 60 + 25) - - setTimeout(function () { - t.notOk(cache.get("b")) - t.equal(cache.get("c"), "C") - }, 90) - - setTimeout(function () { - t.notOk(cache.get("c")) - t.end() - }, 155) -}) - -test("individual item can have it's own maxAge", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A", 20) - setTimeout(function () { - t.notOk(cache.get("a")) - t.end() - }, 25) -}) - -test("individual item can have it's own maxAge > cache's", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 20 - }) - - cache.set("a", "A", 50) - setTimeout(function () { - t.equal(cache.get("a"), "A") - t.end() - }, 25) -}) - -test("disposal function", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - dispose: function (k, n) { - disposed = n - } - }) - - cache.set(1, 1) - cache.set(2, 2) - t.equal(disposed, 1) - cache.set(3, 3) - t.equal(disposed, 2) - cache.reset() - t.equal(disposed, 3) - t.end() -}) - -test("disposal function on too big of item", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - length: function (k) { - return k.length - }, - dispose: function (k, n) { - disposed = n - } - }) - var obj = [ 1, 2 ] - - t.equal(disposed, false) - cache.set("obj", obj) - t.equal(disposed, obj) - t.end() -}) - -test("has()", function(t) { - var cache = new LRU({ - max: 1, - maxAge: 10 - }) - - cache.set('foo', 'bar') - t.equal(cache.has('foo'), true) - cache.set('blu', 'baz') - t.equal(cache.has('foo'), false) - t.equal(cache.has('blu'), true) - setTimeout(function() { - t.equal(cache.has('blu'), false) - t.end() - }, 15) -}) - -test("stale", function(t) { - var cache = new LRU({ - maxAge: 10, - stale: true - }) - - cache.set('foo', 'bar') - t.equal(cache.get('foo'), 'bar') - t.equal(cache.has('foo'), true) - setTimeout(function() { - t.equal(cache.has('foo'), false) - t.equal(cache.get('foo'), 'bar') - t.equal(cache.get('foo'), undefined) - t.end() - }, 15) -}) - -test("lru update via set", function(t) { - var cache = LRU({ max: 2 }); - - cache.set('foo', 1); - cache.set('bar', 2); - cache.del('bar'); - cache.set('baz', 3); - cache.set('qux', 4); - - t.equal(cache.get('foo'), undefined) - t.equal(cache.get('bar'), undefined) - t.equal(cache.get('baz'), 3) - t.equal(cache.get('qux'), 4) - t.end() -}) - -test("least recently set w/ peek", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - t.equal(cache.peek("a"), "A") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("pop the least used item", function (t) { - var cache = new LRU(3) - , last - - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - - t.equal(cache.length, 3) - t.equal(cache.max, 3) - - // Ensure we pop a, c, b - cache.get("b", "B") - - last = cache.pop() - t.equal(last.key, "a") - t.equal(last.value, "A") - t.equal(cache.length, 2) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "c") - t.equal(last.value, "C") - t.equal(cache.length, 1) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "b") - t.equal(last.value, "B") - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last, null) - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - t.end() -}) diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js deleted file mode 100644 index 4190417c..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +++ /dev/null @@ -1,120 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('forEach', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 9 - l.forEach(function (val, key, cache) { - t.equal(cache, l) - t.equal(key, i.toString()) - t.equal(val, i.toString(2)) - i -= 1 - }) - - // get in order of most recently used - l.get(6) - l.get(8) - - var order = [ 8, 6, 9, 7, 5 ] - var i = 0 - - l.forEach(function (val, key, cache) { - var j = order[i ++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - t.end() -}) - -test('keys() and values()', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - t.similar(l.keys(), ['9', '8', '7', '6', '5']) - t.similar(l.values(), ['1001', '1000', '111', '110', '101']) - - // get in order of most recently used - l.get(6) - l.get(8) - - t.similar(l.keys(), ['8', '6', '9', '7', '5']) - t.similar(l.values(), ['1000', '110', '1001', '111', '101']) - - t.end() -}) - -test('all entries are iterated over', function(t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function (val, key, cache) { - if (i > 0) { - cache.del(key) - } - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 1) - - t.end() -}) - -test('all stale entries are removed', function(t) { - var l = new LRU({ max: 5, maxAge: -5, stale: true }) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function () { - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 0) - - t.end() -}) - -test('expires', function (t) { - var l = new LRU({ - max: 10, - maxAge: 50 - }) - for (var i = 0; i < 10; i++) { - l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined)) - } - - var i = 0 - var order = [ 8, 6, 4, 2, 0 ] - setTimeout(function () { - l.forEach(function (val, key, cache) { - var j = order[i++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - setTimeout(function () { - var count = 0; - l.forEach(function (val, key, cache) { count++; }) - t.equal(0, count); - t.end() - }, 25) - - }, 26) -}) diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js deleted file mode 100644 index b5912f6f..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node --expose_gc - - -var weak = require('weak'); -var test = require('tap').test -var LRU = require('../') -var l = new LRU({ max: 10 }) -var refs = 0 -function X() { - refs ++ - weak(this, deref) -} - -function deref() { - refs -- -} - -test('no leaks', function (t) { - // fill up the cache - for (var i = 0; i < 100; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var start = process.memoryUsage() - - // capture the memory - var startRefs = refs - - // do it again, but more - for (var i = 0; i < 10000; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var end = process.memoryUsage() - t.equal(refs, startRefs, 'no leaky refs') - - console.error('start: %j\n' + - 'end: %j', start, end); - t.pass(); - t.end(); -}) diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md deleted file mode 100644 index 25a38a53..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocaine-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `util.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json deleted file mode 100644 index 4255e77a..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "sigmund", - "version": "1.0.1", - "description": "Quick and dirty signatures for Objects.", - "main": "sigmund.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.3.0" - }, - "scripts": { - "test": "tap test/*.js", - "bench": "node bench.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund.git" - }, - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "ISC", - "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6", - "bugs": { - "url": "https://github.com/isaacs/sigmund/issues" - }, - "homepage": "https://github.com/isaacs/sigmund#readme", - "_id": "sigmund@1.0.1", - "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", - "_from": "sigmund@>=1.0.0 <1.1.0", - "_npmVersion": "2.10.0", - "_nodeVersion": "2.0.1", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", - "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json deleted file mode 100644 index b0691e5a..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/node_modules/minimatch/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "0.3.0", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test/*.js" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "devDependencies": { - "tap": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "homepage": "https://github.com/isaacs/minimatch", - "_id": "minimatch@0.3.0", - "_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", - "_from": "minimatch@>=0.3.0 <0.4.0", - "_npmVersion": "1.4.10", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "dist": { - "shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", - "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json deleted file mode 100644 index cbd0dd63..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/glob/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "glob", - "description": "a little globber", - "version": "3.2.11", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "main": "glob.js", - "engines": { - "node": "*" - }, - "dependencies": { - "inherits": "2", - "minimatch": "0.3" - }, - "devDependencies": { - "tap": "~0.4.0", - "mkdirp": "0", - "rimraf": "1" - }, - "scripts": { - "test": "tap test/*.js", - "test-regen": "TEST_REGEN=1 node test/00-setup.js" - }, - "license": "BSD", - "gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2", - "bugs": { - "url": "https://github.com/isaacs/node-glob/issues" - }, - "homepage": "https://github.com/isaacs/node-glob", - "_id": "glob@3.2.11", - "_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", - "_from": "glob@>=3.2.9 <3.3.0", - "_npmVersion": "1.4.10", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "dist": { - "shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", - "tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md deleted file mode 100644 index 86b06367..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# Lo-Dash v2.4.2 -A utility library delivering consistency, [customization](https://lodash.com/custom-builds), [performance](https://lodash.com/benchmarks), & [extras](https://lodash.com/#features). - -## Download - -Check out our [wiki]([https://github.com/lodash/lodash/wiki/build-differences]) for details over the differences between builds. - -* Modern builds perfect for newer browsers/environments:
-[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.js) & -[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.min.js) - -* Compatibility builds for older environment support too:
-[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.compat.js) & -[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.compat.min.js) - -* Underscore builds to use as a drop-in replacement:
-[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.underscore.js) & -[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.underscore.min.js) - -CDN copies are available on [cdnjs](http://cdnjs.com/libraries/lodash.js/) & [jsDelivr](http://www.jsdelivr.com/#!lodash). For smaller file sizes, create [custom builds](https://lodash.com/custom-builds) with only the features needed. - -Love modules? We’ve got you covered with [lodash-amd](https://npmjs.org/package/lodash-amd), [lodash-es6](https://github.com/lodash/lodash-es6), [lodash-node](https://npmjs.org/package/lodash-node), & [npm packages](https://npmjs.org/browse/keyword/lodash-modularized) per method. - -## Dive in - -There’s plenty of **[documentation](https://lodash.com/docs)**, [unit tests](https://lodash.com/tests), & [benchmarks](https://lodash.com/benchmarks).
-Check out DevDocs as a fast, organized, & searchable interface for our documentation. - -The full changelog for this release is available on our [wiki](https://github.com/lodash/lodash/wiki/Changelog).
-A list of upcoming features is available on our [roadmap](https://github.com/lodash/lodash/wiki/Roadmap). - -## Installation & usage - -In browsers: - -```html - -``` - -Using [`npm`](http://npmjs.org/): - -```bash -npm i --save lodash - -{sudo} npm i -g lodash -npm ln lodash -``` - -In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/): - -```js -var _ = require('lodash'); -// or as Underscore -var _ = require('lodash/dist/lodash.underscore'); -``` - -**Notes:** - * Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL - * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('lodash.js'); -``` - -In an AMD loader: - -```js -require({ - 'packages': [ - { 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' } - ] -}, -['lodash'], function(_) { - console.log(_.VERSION); -}); -``` - -## Resources - - * Podcasts - - [JavaScript Jabber](http://javascriptjabber.com/079-jsj-lo-dash-with-john-david-dalton/) - - * Posts - - [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) - - [Custom builds in Lo-Dash 2.0](http://kitcambridge.be/blog/custom-builds-in-lo-dash-2-dot-0/) - - * Videos - - [Introduction](https://vimeo.com/44154599) - - [Origins](https://vimeo.com/44154600) - - [Optimizations & builds](https://vimeo.com/44154601) - - [Native method use](https://vimeo.com/48576012) - - [Testing](https://vimeo.com/45865290) - - [CascadiaJS ’12](http://www.youtube.com/watch?v=dpPy4f_SeEk) - - A list of other community created podcasts, posts, & videos is available on our [wiki](https://github.com/lodash/lodash/wiki/Resources). - -## Features - - * AMD loader support ([curl](https://github.com/cujojs/curl), [dojo](http://dojotoolkit.org/), [requirejs](http://requirejs.org/), etc.) - * [_(…)](https://lodash.com/docs#_) supports intuitive chaining - * [_.at](https://lodash.com/docs#at) for cherry-picking collection values - * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods - * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects - * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects - * [_.constant](https://lodash.com/docs#constant) & [_.property](https://lodash.com/docs#property) function generators for composing functions - * [_.contains](https://lodash.com/docs#contains) accepts a `fromIndex` - * [_.create](https://lodash.com/docs#create) for easier object inheritance - * [_.createCallback](https://lodash.com/docs#createCallback) for extending callbacks in methods & mixins - * [_.curry](https://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions - * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) accept additional `options` for more control - * [_.findIndex](https://lodash.com/docs#findIndex) & [_.findKey](https://lodash.com/docs#findKey) for finding indexes & keys - * [_.forEach](https://lodash.com/docs#forEach) is chainable & supports exiting early - * [_.forIn](https://lodash.com/docs#forIn) for iterating own & inherited properties - * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties - * [_.isPlainObject](https://lodash.com/docs#isPlainObject) for checking if values are created by `Object` - * [_.mapValues](https://lodash.com/docs#mapValues) for [mapping](https://lodash.com/docs#map) values to an object - * [_.memoize](https://lodash.com/docs#memoize) exposes the `cache` of memoized functions - * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) - * [_.noop](https://lodash.com/docs#noop) for function placeholders - * [_.now](https://lodash.com/docs#now) as a cross-browser `Date.now` alternative - * [_.parseInt](https://lodash.com/docs#parseInt) for consistent behavior - * [_.pull](https://lodash.com/docs#pull) & [_.remove](https://lodash.com/docs#remove) for mutating arrays - * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers - * [_.runInContext](https://lodash.com/docs#runInContext) for easier mocking - * [_.sortBy](https://lodash.com/docs#sortBy) supports sorting by multiple properties - * [_.support](https://lodash.com/docs#support) for flagging environment features - * [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals) - * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects - * [_.where](https://lodash.com/docs#where) supports deep object comparisons - * [_.xor](https://lodash.com/docs#xor) as a companion to [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) - * [_.zip](https://lodash.com/docs#zip) is capable of unzipping values - * [_.omit](https://lodash.com/docs#omit), [_.pick](https://lodash.com/docs#pick), & - [more](https://lodash.com/docs "_.assign, _.clone, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept callbacks - * [_.contains](https://lodash.com/docs#contains), [_.toArray](https://lodash.com/docs#toArray), & - [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.forEachRight, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.where") accept strings - * [_.filter](https://lodash.com/docs#filter), [_.map](https://lodash.com/docs#map), & - [more](https://lodash.com/docs "_.countBy, _.every, _.find, _.findKey, _.findLast, _.findLastIndex, _.findLastKey, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* & *“_.where”* shorthands - * [_.findLast](https://lodash.com/docs#findLast), [_.findLastIndex](https://lodash.com/docs#findLastIndex), & - [more](https://lodash.com/docs "_.findLastKey, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods - -## Support - -Tested in Chrome 5~31, Firefox 2~25, IE 6-11, Opera 9.25-17, Safari 3-7, Node.js 0.6.21-0.10.22, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5. diff --git a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js b/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js deleted file mode 100644 index 4d35185f..00000000 --- a/node_modules/grunt-cli/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js +++ /dev/null @@ -1,7158 +0,0 @@ -/** - * @license - * Lo-Dash 2.4.2 (Custom Build) - * Build: `lodash -o ./dist/lodash.compat.js` - * Copyright 2012-2013 The Dojo Foundation - * Based on Underscore.js 1.5.2 - * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre ES5 environments */ - var undefined; - - /** Used to pool arrays and objects used internally */ - var arrayPool = [], - objectPool = []; - - /** Used to generate unique IDs */ - var idCounter = 0; - - /** Used internally to indicate various things */ - var indicatorObject = {}; - - /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ - var keyPrefix = +new Date + ''; - - /** Used as the size when optimizations are enabled for large arrays */ - var largeArraySize = 75; - - /** Used as the max size of the `arrayPool` and `objectPool` */ - var maxPoolSize = 40; - - /** Used to detect and test whitespace */ - var whitespace = ( - // whitespace - ' \t\x0B\f\xA0\ufeff' + - - // line terminators - '\n\r\u2028\u2029' + - - // unicode category "Zs" space separators - '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' - ); - - /** Used to match empty string literals in compiled template source */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** - * Used to match ES6 template delimiters - * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match regexp flags from their coerced string values */ - var reFlags = /\w*$/; - - /** Used to detected named functions */ - var reFuncName = /^\s*function[ \n\r\t]+\w/; - - /** Used to match "interpolate" template delimiters */ - var reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match leading whitespace and zeros to be removed */ - var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)'); - - /** Used to ensure capturing order of template delimiters */ - var reNoMatch = /($^)/; - - /** Used to detect functions containing a `this` reference */ - var reThis = /\bthis\b/; - - /** Used to match unescaped characters in compiled string literals */ - var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; - - /** Used to assign default `context` object properties */ - var contextProps = [ - 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', - 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', - 'parseInt', 'setTimeout' - ]; - - /** Used to fix the JScript [[DontEnum]] bug */ - var shadowedProps = [ - 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', - 'toLocaleString', 'toString', 'valueOf' - ]; - - /** Used to make template sourceURLs easier to identify */ - var templateCounter = 0; - - /** `Object#toString` result shortcuts */ - var argsClass = '[object Arguments]', - arrayClass = '[object Array]', - boolClass = '[object Boolean]', - dateClass = '[object Date]', - errorClass = '[object Error]', - funcClass = '[object Function]', - numberClass = '[object Number]', - objectClass = '[object Object]', - regexpClass = '[object RegExp]', - stringClass = '[object String]'; - - /** Used to identify object classifications that `_.clone` supports */ - var cloneableClasses = {}; - cloneableClasses[funcClass] = false; - cloneableClasses[argsClass] = cloneableClasses[arrayClass] = - cloneableClasses[boolClass] = cloneableClasses[dateClass] = - cloneableClasses[numberClass] = cloneableClasses[objectClass] = - cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; - - /** Used as an internal `_.debounce` options object */ - var debounceOptions = { - 'leading': false, - 'maxWait': 0, - 'trailing': false - }; - - /** Used as the property descriptor for `__bindData__` */ - var descriptor = { - 'configurable': false, - 'enumerable': false, - 'value': null, - 'writable': false - }; - - /** Used as the data object for `iteratorTemplate` */ - var iteratorData = { - 'args': '', - 'array': null, - 'bottom': '', - 'firstArg': '', - 'init': '', - 'keys': null, - 'loop': '', - 'shadowedProps': null, - 'support': null, - 'top': '', - 'useHas': false - }; - - /** Used to determine if values are of the language type Object */ - var objectTypes = { - 'boolean': false, - 'function': true, - 'object': true, - 'number': false, - 'string': false, - 'undefined': false - }; - - /** Used to escape characters for inclusion in compiled string literals */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\t': 't', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Used as a reference to the global object */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `exports` */ - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - /** Detect free variable `module` */ - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports` */ - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - - /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ - var freeGlobal = objectTypes[typeof global] && global; - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.indexOf` without support for binary searches - * or `fromIndex` constraints. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * An implementation of `_.contains` for cache objects that mimics the return - * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. - * - * @private - * @param {Object} cache The cache object to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns `0` if `value` is found, else `-1`. - */ - function cacheIndexOf(cache, value) { - var type = typeof value; - cache = cache.cache; - - if (type == 'boolean' || value == null) { - return cache[value] ? 0 : -1; - } - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value; - cache = (cache = cache[type]) && cache[key]; - - return type == 'object' - ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) - : (cache ? 0 : -1); - } - - /** - * Adds a given value to the corresponding cache object. - * - * @private - * @param {*} value The value to add to the cache. - */ - function cachePush(value) { - var cache = this.cache, - type = typeof value; - - if (type == 'boolean' || value == null) { - cache[value] = true; - } else { - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value, - typeCache = cache[type] || (cache[type] = {}); - - if (type == 'object') { - (typeCache[key] || (typeCache[key] = [])).push(value); - } else { - typeCache[key] = true; - } - } - } - - /** - * Used by `_.max` and `_.min` as the default callback when a given - * collection is a string value. - * - * @private - * @param {string} value The character to inspect. - * @returns {number} Returns the code unit of given character. - */ - function charAtCallback(value) { - return value.charCodeAt(0); - } - - /** - * Used by `sortBy` to compare transformed `collection` elements, stable sorting - * them in ascending order. - * - * @private - * @param {Object} a The object to compare to `b`. - * @param {Object} b The object to compare to `a`. - * @returns {number} Returns the sort order indicator of `1` or `-1`. - */ - function compareAscending(a, b) { - var ac = a.criteria, - bc = b.criteria, - index = -1, - length = ac.length; - - while (++index < length) { - var value = ac[index], - other = bc[index]; - - if (value !== other) { - if (value > other || typeof value == 'undefined') { - return 1; - } - if (value < other || typeof other == 'undefined') { - return -1; - } - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to return the same value for - // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247 - // - // This also ensures a stable sort in V8 and other engines. - // See http://code.google.com/p/v8/issues/detail?id=90 - return a.index - b.index; - } - - /** - * Creates a cache object to optimize linear searches of large arrays. - * - * @private - * @param {Array} [array=[]] The array to search. - * @returns {null|Object} Returns the cache object or `null` if caching should not be used. - */ - function createCache(array) { - var index = -1, - length = array.length, - first = array[0], - mid = array[(length / 2) | 0], - last = array[length - 1]; - - if (first && typeof first == 'object' && - mid && typeof mid == 'object' && last && typeof last == 'object') { - return false; - } - var cache = getObject(); - cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; - - var result = getObject(); - result.array = array; - result.cache = cache; - result.push = cachePush; - - while (++index < length) { - result.push(array[index]); - } - return result; - } - - /** - * Used by `template` to escape characters for inclusion in compiled - * string literals. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(match) { - return '\\' + stringEscapes[match]; - } - - /** - * Gets an array from the array pool or creates a new one if the pool is empty. - * - * @private - * @returns {Array} The array from the pool. - */ - function getArray() { - return arrayPool.pop() || []; - } - - /** - * Gets an object from the object pool or creates a new one if the pool is empty. - * - * @private - * @returns {Object} The object from the pool. - */ - function getObject() { - return objectPool.pop() || { - 'array': null, - 'cache': null, - 'criteria': null, - 'false': false, - 'index': 0, - 'null': false, - 'number': null, - 'object': null, - 'push': null, - 'string': null, - 'true': false, - 'undefined': false, - 'value': null - }; - } - - /** - * Checks if `value` is a DOM node in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`. - */ - function isNode(value) { - // IE < 9 presents DOM nodes as `Object` objects except they have `toString` - // methods that are `typeof` "string" and still can coerce nodes to strings - return typeof value.toString != 'function' && typeof (value + '') == 'string'; - } - - /** - * Releases the given array back to the array pool. - * - * @private - * @param {Array} [array] The array to release. - */ - function releaseArray(array) { - array.length = 0; - if (arrayPool.length < maxPoolSize) { - arrayPool.push(array); - } - } - - /** - * Releases the given object back to the object pool. - * - * @private - * @param {Object} [object] The object to release. - */ - function releaseObject(object) { - var cache = object.cache; - if (cache) { - releaseObject(cache); - } - object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null; - if (objectPool.length < maxPoolSize) { - objectPool.push(object); - } - } - - /** - * Slices the `collection` from the `start` index up to, but not including, - * the `end` index. - * - * Note: This function is used instead of `Array#slice` to support node lists - * in IE < 9 and to ensure dense arrays are returned. - * - * @private - * @param {Array|Object|string} collection The collection to slice. - * @param {number} start The start index. - * @param {number} end The end index. - * @returns {Array} Returns the new array. - */ - function slice(array, start, end) { - start || (start = 0); - if (typeof end == 'undefined') { - end = array ? array.length : 0; - } - var index = -1, - length = end - start || 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = array[start + index]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new `lodash` function using the given context object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} [context=root] The context object. - * @returns {Function} Returns the `lodash` function. - */ - function runInContext(context) { - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See http://es5.github.io/#x11.1.5. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references */ - var Array = context.Array, - Boolean = context.Boolean, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Number = context.Number, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** - * Used for `Array` method references. - * - * Normally `Array.prototype` would suffice, however, using an array literal - * avoids issues in Narwhal. - */ - var arrayRef = []; - - /** Used for native method references */ - var errorProto = Error.prototype, - objectProto = Object.prototype, - stringProto = String.prototype; - - /** Used to restore the original `_` reference in `noConflict` */ - var oldDash = context._; - - /** Used to resolve the internal [[Class]] of values */ - var toString = objectProto.toString; - - /** Used to detect if a method is native */ - var reNative = RegExp('^' + - String(toString) - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/toString| for [^\]]+/g, '.*?') + '$' - ); - - /** Native method shortcuts */ - var ceil = Math.ceil, - clearTimeout = context.clearTimeout, - floor = Math.floor, - fnToString = Function.prototype.toString, - getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - hasOwnProperty = objectProto.hasOwnProperty, - push = arrayRef.push, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - setTimeout = context.setTimeout, - splice = arrayRef.splice, - unshift = arrayRef.unshift; - - /** Used to set meta data on functions */ - var defineProperty = (function() { - // IE 8 only accepts DOM elements - try { - var o = {}, - func = isNative(func = Object.defineProperty) && func, - result = func(o, o, o) && func; - } catch(e) { } - return result; - }()); - - /* Native method shortcuts for methods with the same name as other `lodash` methods */ - var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate, - nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, - nativeIsFinite = context.isFinite, - nativeIsNaN = context.isNaN, - nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random; - - /** Used to lookup a built-in constructor by [[Class]] */ - var ctorByClass = {}; - ctorByClass[arrayClass] = Array; - ctorByClass[boolClass] = Boolean; - ctorByClass[dateClass] = Date; - ctorByClass[funcClass] = Function; - ctorByClass[objectClass] = Object; - ctorByClass[numberClass] = Number; - ctorByClass[regexpClass] = RegExp; - ctorByClass[stringClass] = String; - - /** Used to avoid iterating non-enumerable properties in IE < 9 */ - var nonEnumProps = {}; - nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; - nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true }; - nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true }; - nonEnumProps[objectClass] = { 'constructor': true }; - - (function() { - var length = shadowedProps.length; - while (length--) { - var key = shadowedProps[length]; - for (var className in nonEnumProps) { - if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) { - nonEnumProps[className][key] = false; - } - } - } - }()); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps the given value to enable intuitive - * method chaining. - * - * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: - * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, - * and `unshift` - * - * Chaining is supported in custom builds as long as the `value` method is - * implicitly or explicitly included in the build. - * - * The chainable wrapper functions are: - * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, - * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, - * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, - * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, - * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, - * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, - * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, - * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, - * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, - * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, - * and `zip` - * - * The non-chainable wrapper functions are: - * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, - * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, - * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, - * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, - * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, - * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, - * `template`, `unescape`, `uniqueId`, and `value` - * - * The wrapper functions `first` and `last` return wrapped values when `n` is - * provided, otherwise they return unwrapped values. - * - * Explicit chaining can be enabled by using the `_.chain` method. - * - * @name _ - * @constructor - * @category Chaining - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns a `lodash` instance. - * @example - * - * var wrapped = _([1, 2, 3]); - * - * // returns an unwrapped value - * wrapped.reduce(function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * // returns a wrapped value - * var squares = wrapped.map(function(num) { - * return num * num; - * }); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor - return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) - ? value - : new lodashWrapper(value); - } - - /** - * A fast path for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap in a `lodash` instance. - * @param {boolean} chainAll A flag to enable chaining for all methods - * @returns {Object} Returns a `lodash` instance. - */ - function lodashWrapper(value, chainAll) { - this.__chain__ = !!chainAll; - this.__wrapped__ = value; - } - // ensure `new lodashWrapper` is an instance of `lodash` - lodashWrapper.prototype = lodash.prototype; - - /** - * An object used to flag environments features. - * - * @static - * @memberOf _ - * @type Object - */ - var support = lodash.support = {}; - - (function() { - var ctor = function() { this.x = 1; }, - object = { '0': 1, 'length': 1 }, - props = []; - - ctor.prototype = { 'valueOf': 1, 'y': 1 }; - for (var key in new ctor) { props.push(key); } - for (key in arguments) { } - - /** - * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.argsClass = toString.call(arguments) == argsClass; - - /** - * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5). - * - * @memberOf _.support - * @type boolean - */ - support.argsObject = arguments.constructor == Object && !(arguments instanceof Array); - - /** - * Detect if `name` or `message` properties of `Error.prototype` are - * enumerable by default. (IE < 9, Safari < 5.1) - * - * @memberOf _.support - * @type boolean - */ - support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name'); - - /** - * Detect if `prototype` properties are enumerable by default. - * - * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 - * (if the prototype or a property on the prototype has been set) - * incorrectly sets a function's `prototype` property [[Enumerable]] - * value to `true`. - * - * @memberOf _.support - * @type boolean - */ - support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype'); - - /** - * Detect if functions can be decompiled by `Function#toString` - * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). - * - * @memberOf _.support - * @type boolean - */ - support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext); - - /** - * Detect if `Function#name` is supported (all but IE). - * - * @memberOf _.support - * @type boolean - */ - support.funcNames = typeof Function.name == 'string'; - - /** - * Detect if `arguments` object indexes are non-enumerable - * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumArgs = key != 0; - - /** - * Detect if properties shadowing those on `Object.prototype` are non-enumerable. - * - * In IE < 9 an objects own properties, shadowing non-enumerable ones, are - * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumShadows = !/valueOf/.test(props); - - /** - * Detect if own properties are iterated after inherited properties (all but IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.ownLast = props[0] != 'x'; - - /** - * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. - * - * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` - * and `splice()` functions that fail to remove the last element, `value[0]`, - * of array-like objects even though the `length` property is set to `0`. - * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` - * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. - * - * @memberOf _.support - * @type boolean - */ - support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]); - - /** - * Detect lack of support for accessing string characters by index. - * - * IE < 8 can't access characters by index and IE 8 can only access - * characters by index on string literals. - * - * @memberOf _.support - * @type boolean - */ - support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx'; - - /** - * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9) - * and that the JS engine errors when attempting to coerce an object to - * a string without a `toString` function. - * - * @memberOf _.support - * @type boolean - */ - try { - support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + '')); - } catch(e) { - support.nodeClass = true; - } - }(1)); - - /** - * By default, the template delimiters used by Lo-Dash are similar to those in - * embedded Ruby (ERB). Change the following template settings to use alternative - * delimiters. - * - * @static - * @memberOf _ - * @type Object - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'escape': /<%-([\s\S]+?)%>/g, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'evaluate': /<%([\s\S]+?)%>/g, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type string - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type Object - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type Function - */ - '_': lodash - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The template used to create iterator functions. - * - * @private - * @param {Object} data The data object used to populate the text. - * @returns {string} Returns the interpolated text. - */ - var iteratorTemplate = function(obj) { - - var __p = 'var index, iterable = ' + - (obj.firstArg) + - ', result = ' + - (obj.init) + - ';\nif (!iterable) return result;\n' + - (obj.top) + - ';'; - if (obj.array) { - __p += '\nvar length = iterable.length; index = -1;\nif (' + - (obj.array) + - ') { '; - if (support.unindexedChars) { - __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } '; - } - __p += '\n while (++index < length) {\n ' + - (obj.loop) + - ';\n }\n}\nelse { '; - } else if (support.nonEnumArgs) { - __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' + - (obj.loop) + - ';\n }\n } else { '; - } - - if (support.enumPrototypes) { - __p += '\n var skipProto = typeof iterable == \'function\';\n '; - } - - if (support.enumErrorProps) { - __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n '; - } - - var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); } - - if (obj.useHas && obj.keys) { - __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n'; - if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - } else { - __p += '\n for (index in iterable) {\n'; - if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - if (support.nonEnumShadows) { - __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n '; - for (k = 0; k < 7; k++) { - __p += '\n index = \'' + - (obj.shadowedProps[k]) + - '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))'; - if (!obj.useHas) { - __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])'; - } - __p += ') {\n ' + - (obj.loop) + - ';\n } '; - } - __p += '\n } '; - } - - } - - if (obj.array || support.nonEnumArgs) { - __p += '\n}'; - } - __p += - (obj.bottom) + - ';\nreturn result'; - - return __p - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.bind` that creates the bound function and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new bound function. - */ - function baseBind(bindData) { - var func = bindData[0], - partialArgs = bindData[2], - thisArg = bindData[4]; - - function bound() { - // `Function#bind` spec - // http://es5.github.io/#x15.3.4.5 - if (partialArgs) { - // avoid `arguments` object deoptimizations by using `slice` instead - // of `Array.prototype.slice.call` and not assigning `arguments` to a - // variable as a ternary expression - var args = slice(partialArgs); - push.apply(args, arguments); - } - // mimic the constructor's `return` behavior - // http://es5.github.io/#x13.2.2 - if (this instanceof bound) { - // ensure `new bound` is an instance of `func` - var thisBinding = baseCreate(func.prototype), - result = func.apply(thisBinding, args || arguments); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisArg, args || arguments); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.clone` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, callback, stackA, stackB) { - if (callback) { - var result = callback(value); - if (typeof result != 'undefined') { - return result; - } - } - // inspect [[Class]] - var isObj = isObject(value); - if (isObj) { - var className = toString.call(value); - if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) { - return value; - } - var ctor = ctorByClass[className]; - switch (className) { - case boolClass: - case dateClass: - return new ctor(+value); - - case numberClass: - case stringClass: - return new ctor(value); - - case regexpClass: - result = ctor(value.source, reFlags.exec(value)); - result.lastIndex = value.lastIndex; - return result; - } - } else { - return value; - } - var isArr = isArray(value); - if (isDeep) { - // check for circular references and return corresponding clone - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - result = isArr ? ctor(value.length) : {}; - } - else { - result = isArr ? slice(value) : assign({}, value); - } - // add array properties assigned by `RegExp#exec` - if (isArr) { - if (hasOwnProperty.call(value, 'index')) { - result.index = value.index; - } - if (hasOwnProperty.call(value, 'input')) { - result.input = value.input; - } - } - // exit for shallow clone - if (!isDeep) { - return result; - } - // add the source value to the stack of traversed objects - // and associate it with its clone - stackA.push(value); - stackB.push(result); - - // recursively populate clone (susceptible to call stack limits) - (isArr ? baseEach : forOwn)(value, function(objValue, key) { - result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); - }); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(prototype, properties) { - return isObject(prototype) ? nativeCreate(prototype) : {}; - } - // fallback for browsers without `Object.create` - if (!nativeCreate) { - baseCreate = (function() { - function Object() {} - return function(prototype) { - if (isObject(prototype)) { - Object.prototype = prototype; - var result = new Object; - Object.prototype = null; - } - return result || context.Object(); - }; - }()); - } - - /** - * The base implementation of `_.createCallback` without support for creating - * "_.pluck" or "_.where" style callbacks. - * - * @private - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - */ - function baseCreateCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - // exit early for no `thisArg` or already bound by `Function#bind` - if (typeof thisArg == 'undefined' || !('prototype' in func)) { - return func; - } - var bindData = func.__bindData__; - if (typeof bindData == 'undefined') { - if (support.funcNames) { - bindData = !func.name; - } - bindData = bindData || !support.funcDecomp; - if (!bindData) { - var source = fnToString.call(func); - if (!support.funcNames) { - bindData = !reFuncName.test(source); - } - if (!bindData) { - // checks if `func` references the `this` keyword and stores the result - bindData = reThis.test(source); - setBindData(func, bindData); - } - } - } - // exit early if there are no `this` references or `func` is bound - if (bindData === false || (bindData !== true && bindData[1] & 1)) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 2: return function(a, b) { - return func.call(thisArg, a, b); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - } - return bind(func, thisArg); - } - - /** - * The base implementation of `createWrapper` that creates the wrapper and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new function. - */ - function baseCreateWrapper(bindData) { - var func = bindData[0], - bitmask = bindData[1], - partialArgs = bindData[2], - partialRightArgs = bindData[3], - thisArg = bindData[4], - arity = bindData[5]; - - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - key = func; - - function bound() { - var thisBinding = isBind ? thisArg : this; - if (partialArgs) { - var args = slice(partialArgs); - push.apply(args, arguments); - } - if (partialRightArgs || isCurry) { - args || (args = slice(arguments)); - if (partialRightArgs) { - push.apply(args, partialRightArgs); - } - if (isCurry && args.length < arity) { - bitmask |= 16 & ~32; - return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); - } - } - args || (args = arguments); - if (isBindKey) { - func = thisBinding[key]; - } - if (this instanceof bound) { - thisBinding = baseCreate(func.prototype); - var result = func.apply(thisBinding, args); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisBinding, args); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.difference` that accepts a single array - * of values to exclude. - * - * @private - * @param {Array} array The array to process. - * @param {Array} [values] The array of values to exclude. - * @returns {Array} Returns a new array of filtered values. - */ - function baseDifference(array, values) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - isLarge = length >= largeArraySize && indexOf === baseIndexOf, - result = []; - - if (isLarge) { - var cache = createCache(values); - if (cache) { - indexOf = cacheIndexOf; - values = cache; - } else { - isLarge = false; - } - } - while (++index < length) { - var value = array[index]; - if (indexOf(values, value) < 0) { - result.push(value); - } - } - if (isLarge) { - releaseObject(values); - } - return result; - } - - /** - * The base implementation of `_.flatten` without support for callback - * shorthands or `thisArg` binding. - * - * @private - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. - * @param {number} [fromIndex=0] The index to start from. - * @returns {Array} Returns a new flattened array. - */ - function baseFlatten(array, isShallow, isStrict, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - - if (value && typeof value == 'object' && typeof value.length == 'number' - && (isArray(value) || isArguments(value))) { - // recursively flatten arrays (susceptible to call stack limits) - if (!isShallow) { - value = baseFlatten(value, isShallow, isStrict); - } - var valIndex = -1, - valLength = value.length, - resIndex = result.length; - - result.length += valLength; - while (++valIndex < valLength) { - result[resIndex++] = value[valIndex]; - } - } else if (!isStrict) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.isEqual`, without support for `thisArg` binding, - * that allows partial "_.where" style comparisons. - * - * @private - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. - * @param {Array} [stackA=[]] Tracks traversed `a` objects. - * @param {Array} [stackB=[]] Tracks traversed `b` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { - // used to indicate that when comparing objects, `a` has at least the properties of `b` - if (callback) { - var result = callback(a, b); - if (typeof result != 'undefined') { - return !!result; - } - } - // exit early for identical values - if (a === b) { - // treat `+0` vs. `-0` as not equal - return a !== 0 || (1 / a == 1 / b); - } - var type = typeof a, - otherType = typeof b; - - // exit early for unlike primitive values - if (a === a && - !(a && objectTypes[type]) && - !(b && objectTypes[otherType])) { - return false; - } - // exit early for `null` and `undefined` avoiding ES3's Function#call behavior - // http://es5.github.io/#x15.3.4.4 - if (a == null || b == null) { - return a === b; - } - // compare [[Class]] names - var className = toString.call(a), - otherClass = toString.call(b); - - if (className == argsClass) { - className = objectClass; - } - if (otherClass == argsClass) { - otherClass = objectClass; - } - if (className != otherClass) { - return false; - } - switch (className) { - case boolClass: - case dateClass: - // coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal - return +a == +b; - - case numberClass: - // treat `NaN` vs. `NaN` as equal - return (a != +a) - ? b != +b - // but treat `+0` vs. `-0` as not equal - : (a == 0 ? (1 / a == 1 / b) : a == +b); - - case regexpClass: - case stringClass: - // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) - // treat string primitives and their corresponding object instances as equal - return a == String(b); - } - var isArr = className == arrayClass; - if (!isArr) { - // unwrap any `lodash` wrapped values - var aWrapped = hasOwnProperty.call(a, '__wrapped__'), - bWrapped = hasOwnProperty.call(b, '__wrapped__'); - - if (aWrapped || bWrapped) { - return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); - } - // exit for functions and DOM nodes - if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) { - return false; - } - // in older versions of Opera, `arguments` objects have `Array` constructors - var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor, - ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor; - - // non `Object` object instances with different constructors are not equal - if (ctorA != ctorB && - !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && - ('constructor' in a && 'constructor' in b) - ) { - return false; - } - } - // assume cyclic structures are equal - // the algorithm for detecting cyclic structures is adapted from ES 5.1 - // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == a) { - return stackB[length] == b; - } - } - var size = 0; - result = true; - - // add `a` and `b` to the stack of traversed objects - stackA.push(a); - stackB.push(b); - - // recursively compare objects and arrays (susceptible to call stack limits) - if (isArr) { - // compare lengths to determine if a deep comparison is necessary - length = a.length; - size = b.length; - result = size == length; - - if (result || isWhere) { - // deep compare the contents, ignoring non-numeric properties - while (size--) { - var index = length, - value = b[size]; - - if (isWhere) { - while (index--) { - if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } - } - else { - // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` - // which, in this case, is more costly - forIn(b, function(value, key, b) { - if (hasOwnProperty.call(b, key)) { - // count the number of properties. - size++; - // deep compare each property value. - return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); - } - }); - - if (result && !isWhere) { - // ensure both objects have the same number of properties - forIn(a, function(value, key, a) { - if (hasOwnProperty.call(a, key)) { - // `size` will be `-1` if `a` has more properties than `b` - return (result = --size > -1); - } - }); - } - } - stackA.pop(); - stackB.pop(); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.merge` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} [callback] The function to customize merging properties. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. - */ - function baseMerge(object, source, callback, stackA, stackB) { - (isArray(source) ? forEach : forOwn)(source, function(source, key) { - var found, - isArr, - result = source, - value = object[key]; - - if (source && ((isArr = isArray(source)) || isPlainObject(source))) { - // avoid merging previously merged cyclic sources - var stackLength = stackA.length; - while (stackLength--) { - if ((found = stackA[stackLength] == source)) { - value = stackB[stackLength]; - break; - } - } - if (!found) { - var isShallow; - if (callback) { - result = callback(value, source); - if ((isShallow = typeof result != 'undefined')) { - value = result; - } - } - if (!isShallow) { - value = isArr - ? (isArray(value) ? value : []) - : (isPlainObject(value) ? value : {}); - } - // add `source` and associated `value` to the stack of traversed objects - stackA.push(source); - stackB.push(value); - - // recursively merge objects and arrays (susceptible to call stack limits) - if (!isShallow) { - baseMerge(value, source, callback, stackA, stackB); - } - } - } - else { - if (callback) { - result = callback(value, source); - if (typeof result == 'undefined') { - result = source; - } - } - if (typeof result != 'undefined') { - value = result; - } - } - object[key] = value; - }); - } - - /** - * The base implementation of `_.random` without argument juggling or support - * for returning floating-point numbers. - * - * @private - * @param {number} min The minimum possible value. - * @param {number} max The maximum possible value. - * @returns {number} Returns a random number. - */ - function baseRandom(min, max) { - return min + floor(nativeRandom() * (max - min + 1)); - } - - /** - * The base implementation of `_.uniq` without support for callback shorthands - * or `thisArg` binding. - * - * @private - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function} [callback] The function called per iteration. - * @returns {Array} Returns a duplicate-value-free array. - */ - function baseUniq(array, isSorted, callback) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - result = []; - - var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, - seen = (callback || isLarge) ? getArray() : result; - - if (isLarge) { - var cache = createCache(seen); - indexOf = cacheIndexOf; - seen = cache; - } - while (++index < length) { - var value = array[index], - computed = callback ? callback(value, index, array) : value; - - if (isSorted - ? !index || seen[seen.length - 1] !== computed - : indexOf(seen, computed) < 0 - ) { - if (callback || isLarge) { - seen.push(computed); - } - result.push(value); - } - } - if (isLarge) { - releaseArray(seen.array); - releaseObject(seen); - } else if (callback) { - releaseArray(seen); - } - return result; - } - - /** - * Creates a function that aggregates a collection, creating an object composed - * of keys generated from the results of running each element of the collection - * through a callback. The given `setter` function sets the keys and values - * of the composed object. - * - * @private - * @param {Function} setter The setter function. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter) { - return function(collection, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - setter(result, value, callback(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, callback(value, key, collection), collection); - }); - } - return result; - }; - } - - /** - * Creates a function that, when called, either curries or invokes `func` - * with an optional `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of method flags to compose. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` - * 8 - `_.curry` (bound) - * 16 - `_.partial` - * 32 - `_.partialRight` - * @param {Array} [partialArgs] An array of arguments to prepend to those - * provided to the new function. - * @param {Array} [partialRightArgs] An array of arguments to append to those - * provided to the new function. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new function. - */ - function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - isPartial = bitmask & 16, - isPartialRight = bitmask & 32; - - if (!isBindKey && !isFunction(func)) { - throw new TypeError; - } - if (isPartial && !partialArgs.length) { - bitmask &= ~16; - isPartial = partialArgs = false; - } - if (isPartialRight && !partialRightArgs.length) { - bitmask &= ~32; - isPartialRight = partialRightArgs = false; - } - var bindData = func && func.__bindData__; - if (bindData && bindData !== true) { - // clone `bindData` - bindData = slice(bindData); - if (bindData[2]) { - bindData[2] = slice(bindData[2]); - } - if (bindData[3]) { - bindData[3] = slice(bindData[3]); - } - // set `thisBinding` is not previously bound - if (isBind && !(bindData[1] & 1)) { - bindData[4] = thisArg; - } - // set if previously bound but not currently (subsequent curried functions) - if (!isBind && bindData[1] & 1) { - bitmask |= 8; - } - // set curried arity if not yet set - if (isCurry && !(bindData[1] & 4)) { - bindData[5] = arity; - } - // append partial left arguments - if (isPartial) { - push.apply(bindData[2] || (bindData[2] = []), partialArgs); - } - // append partial right arguments - if (isPartialRight) { - unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs); - } - // merge flags - bindData[1] |= bitmask; - return createWrapper.apply(null, bindData); - } - // fast path for `_.bind` - var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; - return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); - } - - /** - * Creates compiled iteration functions. - * - * @private - * @param {...Object} [options] The compile options object(s). - * @param {string} [options.array] Code to determine if the iterable is an array or array-like. - * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop. - * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration. - * @param {string} [options.args] A comma separated string of iteration function arguments. - * @param {string} [options.top] Code to execute before the iteration branches. - * @param {string} [options.loop] Code to execute in the object loop. - * @param {string} [options.bottom] Code to execute after the iteration branches. - * @returns {Function} Returns the compiled function. - */ - function createIterator() { - // data properties - iteratorData.shadowedProps = shadowedProps; - - // iterator options - iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = ''; - iteratorData.init = 'iterable'; - iteratorData.useHas = true; - - // merge options into a template data object - for (var object, index = 0; object = arguments[index]; index++) { - for (var key in object) { - iteratorData[key] = object[key]; - } - } - var args = iteratorData.args; - iteratorData.firstArg = /^[^,]+/.exec(args)[0]; - - // create the function factory - var factory = Function( - 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + - 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + - 'objectTypes, nonEnumProps, stringClass, stringProto, toString', - 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}' - ); - - // return the compiled function - return factory( - baseCreateCallback, errorClass, errorProto, hasOwnProperty, - indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto, - objectTypes, nonEnumProps, stringClass, stringProto, toString - ); - } - - /** - * Used by `escape` to convert characters to HTML entities. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(match) { - return htmlEscapes[match]; - } - - /** - * Gets the appropriate "indexOf" function. If the `_.indexOf` method is - * customized, this method returns the custom method, otherwise it returns - * the `baseIndexOf` function. - * - * @private - * @returns {Function} Returns the "indexOf" function. - */ - function getIndexOf() { - var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; - return result; - } - - /** - * Checks if `value` is a native function. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. - */ - function isNative(value) { - return typeof value == 'function' && reNative.test(value); - } - - /** - * Sets `this` binding data on a given function. - * - * @private - * @param {Function} func The function to set data on. - * @param {Array} value The data array to set. - */ - var setBindData = !defineProperty ? noop : function(func, value) { - descriptor.value = value; - defineProperty(func, '__bindData__', descriptor); - descriptor.value = null; - }; - - /** - * A fallback implementation of `isPlainObject` which checks if a given value - * is an object created by the `Object` constructor, assuming objects created - * by the `Object` constructor have no inherited enumerable properties and that - * there are no `Object.prototype` extensions. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - */ - function shimIsPlainObject(value) { - var ctor, - result; - - // avoid non Object objects, `arguments` objects, and DOM elements - if (!(value && toString.call(value) == objectClass) || - (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) || - (!support.argsClass && isArguments(value)) || - (!support.nodeClass && isNode(value))) { - return false; - } - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - if (support.ownLast) { - forIn(value, function(value, key, object) { - result = hasOwnProperty.call(object, key); - return false; - }); - return result !== false; - } - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - forIn(value, function(value, key) { - result = key; - }); - return typeof result == 'undefined' || hasOwnProperty.call(value, result); - } - - /** - * Used by `unescape` to convert HTML entities to characters. - * - * @private - * @param {string} match The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(match) { - return htmlUnescapes[match]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if `value` is an `arguments` object. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. - * @example - * - * (function() { return _.isArguments(arguments); })(1, 2, 3); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == argsClass || false; - } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (!support.argsClass) { - isArguments = function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false; - }; - } - - /** - * Checks if `value` is an array. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an array, else `false`. - * @example - * - * (function() { return _.isArray(arguments); })(); - * // => false - * - * _.isArray([1, 2, 3]); - * // => true - */ - var isArray = nativeIsArray || function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == arrayClass || false; - }; - - /** - * A fallback implementation of `Object.keys` which produces an array of the - * given object's own enumerable property names. - * - * @private - * @type Function - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - */ - var shimKeys = createIterator({ - 'args': 'object', - 'init': '[]', - 'top': 'if (!(objectTypes[typeof object])) return result', - 'loop': 'result.push(index)' - }); - - /** - * Creates an array composed of the own enumerable property names of an object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - * @example - * - * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); - * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) - */ - var keys = !nativeKeys ? shimKeys : function(object) { - if (!isObject(object)) { - return []; - } - if ((support.enumPrototypes && typeof object == 'function') || - (support.nonEnumArgs && object.length && isArguments(object))) { - return shimKeys(object); - } - return nativeKeys(object); - }; - - /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ - var eachIteratorOptions = { - 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)", - 'array': "typeof length == 'number'", - 'keys': keys, - 'loop': 'if (callback(iterable[index], index, collection) === false) return result' - }; - - /** Reusable iterator options for `assign` and `defaults` */ - var defaultsIteratorOptions = { - 'args': 'object, source, guard', - 'top': - 'var args = arguments,\n' + - ' argsIndex = 0,\n' + - " argsLength = typeof guard == 'number' ? 2 : args.length;\n" + - 'while (++argsIndex < argsLength) {\n' + - ' iterable = args[argsIndex];\n' + - ' if (iterable && objectTypes[typeof iterable]) {', - 'keys': keys, - 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]", - 'bottom': ' }\n}' - }; - - /** Reusable iterator options for `forIn` and `forOwn` */ - var forOwnIteratorOptions = { - 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top, - 'array': false - }; - - /** - * Used to convert characters to HTML entities: - * - * Though the `>` character is escaped for symmetry, characters like `>` and `/` - * don't require escaping in HTML and have no special meaning unless they're part - * of a tag or an unquoted attribute value. - * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") - */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to convert HTML entities to characters */ - var htmlUnescapes = invert(htmlEscapes); - - /** Used to match HTML entities and HTML characters */ - var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'), - reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); - - /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the callback for each - * element in the collection. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @private - * @type Function - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - */ - var baseEach = createIterator(eachIteratorOptions); - - /*--------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources will overwrite property assignments of previous - * sources. If a callback is provided it will be executed to produce the - * assigned values. The callback is bound to `thisArg` and invoked with two - * arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @type Function - * @alias extend - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize assigning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); - * // => { 'name': 'fred', 'employer': 'slate' } - * - * var defaults = _.partialRight(_.assign, function(a, b) { - * return typeof a == 'undefined' ? b : a; - * }); - * - * var object = { 'name': 'barney' }; - * defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var assign = createIterator(defaultsIteratorOptions, { - 'top': - defaultsIteratorOptions.top.replace(';', - ';\n' + - "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" + - ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' + - "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" + - ' callback = args[--argsLength];\n' + - '}' - ), - 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]' - }); - - /** - * Creates a clone of `value`. If `isDeep` is `true` nested objects will also - * be cloned, otherwise they will be assigned by reference. If a callback - * is provided it will be executed to produce the cloned values. If the - * callback returns `undefined` cloning will be handled by the method instead. - * The callback is bound to `thisArg` and invoked with one argument; (value). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var shallow = _.clone(characters); - * shallow[0] === characters[0]; - * // => true - * - * var deep = _.clone(characters, true); - * deep[0] === characters[0]; - * // => false - * - * _.mixin({ - * 'clone': _.partialRight(_.clone, function(value) { - * return _.isElement(value) ? value.cloneNode(false) : undefined; - * }) - * }); - * - * var clone = _.clone(document.body); - * clone.childNodes.length; - * // => 0 - */ - function clone(value, isDeep, callback, thisArg) { - // allows working with "Collections" methods without using their `index` - // and `collection` arguments for `isDeep` and `callback` - if (typeof isDeep != 'boolean' && isDeep != null) { - thisArg = callback; - callback = isDeep; - isDeep = false; - } - return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates a deep clone of `value`. If a callback is provided it will be - * executed to produce the cloned values. If the callback returns `undefined` - * cloning will be handled by the method instead. The callback is bound to - * `thisArg` and invoked with one argument; (value). - * - * Note: This method is loosely based on the structured clone algorithm. Functions - * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and - * objects created by constructors other than `Object` are cloned to plain `Object` objects. - * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var deep = _.cloneDeep(characters); - * deep[0] === characters[0]; - * // => false - * - * var view = { - * 'label': 'docs', - * 'node': element - * }; - * - * var clone = _.cloneDeep(view, function(value) { - * return _.isElement(value) ? value.cloneNode(true) : undefined; - * }); - * - * clone.node == view.node; - * // => false - */ - function cloneDeep(value, callback, thisArg) { - return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates an object that inherits from the given `prototype` object. If a - * `properties` object is provided its own enumerable properties are assigned - * to the created object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object for all destination properties that resolve to `undefined`. Once a - * property is set, additional defaults of the same property will be ignored. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param- {Object} [guard] Allows working with `_.reduce` without using its - * `key` and `object` arguments as sources. - * @returns {Object} Returns the destination object. - * @example - * - * var object = { 'name': 'barney' }; - * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var defaults = createIterator(defaultsIteratorOptions); - - /** - * This method is like `_.findIndex` except that it returns the key of the - * first element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': false }, - * 'fred': { 'age': 40, 'blocked': true }, - * 'pebbles': { 'age': 1, 'blocked': false } - * }; - * - * _.findKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => 'barney' (property order is not guaranteed across environments) - * - * // using "_.where" callback shorthand - * _.findKey(characters, { 'age': 1 }); - * // => 'pebbles' - * - * // using "_.pluck" callback shorthand - * _.findKey(characters, 'blocked'); - * // => 'fred' - */ - function findKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwn(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * This method is like `_.findKey` except that it iterates over elements - * of a `collection` in the opposite order. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': true }, - * 'fred': { 'age': 40, 'blocked': false }, - * 'pebbles': { 'age': 1, 'blocked': true } - * }; - * - * _.findLastKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => returns `pebbles`, assuming `_.findKey` returns `barney` - * - * // using "_.where" callback shorthand - * _.findLastKey(characters, { 'age': 40 }); - * // => 'fred' - * - * // using "_.pluck" callback shorthand - * _.findLastKey(characters, 'blocked'); - * // => 'pebbles' - */ - function findLastKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwnRight(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * Iterates over own and inherited enumerable properties of an object, - * executing the callback for each property. The callback is bound to `thisArg` - * and invoked with three arguments; (value, key, object). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forIn(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) - */ - var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, { - 'useHas': false - }); - - /** - * This method is like `_.forIn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forInRight(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move' - */ - function forInRight(object, callback, thisArg) { - var pairs = []; - - forIn(object, function(value, key) { - pairs.push(key, value); - }); - - var length = pairs.length; - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - if (callback(pairs[length--], pairs[length], object) === false) { - break; - } - } - return object; - } - - /** - * Iterates over own enumerable properties of an object, executing the callback - * for each property. The callback is bound to `thisArg` and invoked with three - * arguments; (value, key, object). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) - */ - var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions); - - /** - * This method is like `_.forOwn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length' - */ - function forOwnRight(object, callback, thisArg) { - var props = keys(object), - length = props.length; - - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - var key = props[length]; - if (callback(object[key], key, object) === false) { - break; - } - } - return object; - } - - /** - * Creates a sorted array of property names of all enumerable properties, - * own and inherited, of `object` that have function values. - * - * @static - * @memberOf _ - * @alias methods - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names that have function values. - * @example - * - * _.functions(_); - * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] - */ - function functions(object) { - var result = []; - forIn(object, function(value, key) { - if (isFunction(value)) { - result.push(key); - } - }); - return result.sort(); - } - - /** - * Checks if the specified property name exists as a direct property of `object`, - * instead of an inherited property. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to check. - * @returns {boolean} Returns `true` if key is a direct property, else `false`. - * @example - * - * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); - * // => true - */ - function has(object, key) { - return object ? hasOwnProperty.call(object, key) : false; - } - - /** - * Creates an object composed of the inverted keys and values of the given object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to invert. - * @returns {Object} Returns the created inverted object. - * @example - * - * _.invert({ 'first': 'fred', 'second': 'barney' }); - * // => { 'fred': 'first', 'barney': 'second' } - */ - function invert(object) { - var index = -1, - props = keys(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index]; - result[object[key]] = key; - } - return result; - } - - /** - * Checks if `value` is a boolean value. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`. - * @example - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - value && typeof value == 'object' && toString.call(value) == boolClass || false; - } - - /** - * Checks if `value` is a date. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a date, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - */ - function isDate(value) { - return value && typeof value == 'object' && toString.call(value) == dateClass || false; - } - - /** - * Checks if `value` is a DOM element. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - */ - function isElement(value) { - return value && value.nodeType === 1 || false; - } - - /** - * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a - * length of `0` and objects with no own enumerable properties are considered - * "empty". - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if the `value` is empty, else `false`. - * @example - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({}); - * // => true - * - * _.isEmpty(''); - * // => true - */ - function isEmpty(value) { - var result = true; - if (!value) { - return result; - } - var className = toString.call(value), - length = value.length; - - if ((className == arrayClass || className == stringClass || - (support.argsClass ? className == argsClass : isArguments(value))) || - (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { - return !length; - } - forOwn(value, function() { - return (result = false); - }); - return result; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent to each other. If a callback is provided it will be executed - * to compare values. If the callback returns `undefined` comparisons will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (a, b). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'name': 'fred' }; - * var copy = { 'name': 'fred' }; - * - * object == copy; - * // => false - * - * _.isEqual(object, copy); - * // => true - * - * var words = ['hello', 'goodbye']; - * var otherWords = ['hi', 'goodbye']; - * - * _.isEqual(words, otherWords, function(a, b) { - * var reGreet = /^(?:hello|hi)$/i, - * aGreet = _.isString(a) && reGreet.test(a), - * bGreet = _.isString(b) && reGreet.test(b); - * - * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; - * }); - * // => true - */ - function isEqual(a, b, callback, thisArg) { - return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); - } - - /** - * Checks if `value` is, or can be coerced to, a finite number. - * - * Note: This is not the same as native `isFinite` which will return true for - * booleans and empty strings. See http://es5.github.io/#x15.1.2.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is finite, else `false`. - * @example - * - * _.isFinite(-101); - * // => true - * - * _.isFinite('10'); - * // => true - * - * _.isFinite(true); - * // => false - * - * _.isFinite(''); - * // => false - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); - } - - /** - * Checks if `value` is a function. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - */ - function isFunction(value) { - return typeof value == 'function'; - } - // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value == 'function' && toString.call(value) == funcClass; - }; - } - - /** - * Checks if `value` is the language type of Object. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ - function isObject(value) { - // check if the value is the ECMAScript language type of Object - // http://es5.github.io/#x8 - // and avoid a V8 bug - // http://code.google.com/p/v8/issues/detail?id=2291 - return !!(value && objectTypes[typeof value]); - } - - /** - * Checks if `value` is `NaN`. - * - * Note: This is not the same as native `isNaN` which will return `true` for - * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // `NaN` as a primitive is the only value that is not equal to itself - // (perform the [[Class]] check first to avoid errors with some host objects in IE) - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(undefined); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is a number. - * - * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a number, else `false`. - * @example - * - * _.isNumber(8.4 * 5); - * // => true - */ - function isNumber(value) { - return typeof value == 'number' || - value && typeof value == 'object' && toString.call(value) == numberClass || false; - } - - /** - * Checks if `value` is an object created by the `Object` constructor. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * _.isPlainObject(new Shape); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - */ - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) { - return false; - } - var valueOf = value.valueOf, - objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? (value == objProto || getPrototypeOf(value) == objProto) - : shimIsPlainObject(value); - }; - - /** - * Checks if `value` is a regular expression. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`. - * @example - * - * _.isRegExp(/fred/); - * // => true - */ - function isRegExp(value) { - return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false; - } - - /** - * Checks if `value` is a string. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a string, else `false`. - * @example - * - * _.isString('fred'); - * // => true - */ - function isString(value) { - return typeof value == 'string' || - value && typeof value == 'object' && toString.call(value) == stringClass || false; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - */ - function isUndefined(value) { - return typeof value == 'undefined'; - } - - /** - * Creates an object with the same keys as `object` and values generated by - * running each own enumerable property of `object` through the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new object with values of the results of each `callback` execution. - * @example - * - * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - * - * var characters = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // using "_.pluck" callback shorthand - * _.mapValues(characters, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } - */ - function mapValues(object, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - forOwn(object, function(value, key, object) { - result[key] = callback(value, key, object); - }); - return result; - } - - /** - * Recursively merges own enumerable properties of the source object(s), that - * don't resolve to `undefined` into the destination object. Subsequent sources - * will overwrite property assignments of previous sources. If a callback is - * provided it will be executed to produce the merged values of the destination - * and source properties. If the callback returns `undefined` merging will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize merging properties. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * var names = { - * 'characters': [ - * { 'name': 'barney' }, - * { 'name': 'fred' } - * ] - * }; - * - * var ages = { - * 'characters': [ - * { 'age': 36 }, - * { 'age': 40 } - * ] - * }; - * - * _.merge(names, ages); - * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } - * - * var food = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var otherFood = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.merge(food, otherFood, function(a, b) { - * return _.isArray(a) ? a.concat(b) : undefined; - * }); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } - */ - function merge(object) { - var args = arguments, - length = 2; - - if (!isObject(object)) { - return object; - } - // allows working with `_.reduce` and `_.reduceRight` without using - // their `index` and `collection` arguments - if (typeof args[2] != 'number') { - length = args.length; - } - if (length > 3 && typeof args[length - 2] == 'function') { - var callback = baseCreateCallback(args[--length - 1], args[length--], 2); - } else if (length > 2 && typeof args[length - 1] == 'function') { - callback = args[--length]; - } - var sources = slice(arguments, 1, length), - index = -1, - stackA = getArray(), - stackB = getArray(); - - while (++index < length) { - baseMerge(object, sources[index], callback, stackA, stackB); - } - releaseArray(stackA); - releaseArray(stackB); - return object; - } - - /** - * Creates a shallow clone of `object` excluding the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` omitting the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The properties to omit or the - * function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object without the omitted properties. - * @example - * - * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); - * // => { 'name': 'fred' } - * - * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { - * return typeof value == 'number'; - * }); - * // => { 'name': 'fred' } - */ - function omit(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var props = []; - forIn(object, function(value, key) { - props.push(key); - }); - props = baseDifference(props, baseFlatten(arguments, true, false, 1)); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - result[key] = object[key]; - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (!callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * Creates a two dimensional array of an object's key-value pairs, - * i.e. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns new array of key-value pairs. - * @example - * - * _.pairs({ 'barney': 36, 'fred': 40 }); - * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) - */ - function pairs(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; - } - return result; - } - - /** - * Creates a shallow clone of `object` composed of the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` picking the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The function called per - * iteration or property names to pick, specified as individual property - * names or arrays of property names. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object composed of the picked properties. - * @example - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name'); - * // => { 'name': 'fred' } - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) { - * return key.charAt(0) != '_'; - * }); - * // => { 'name': 'fred' } - */ - function pick(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var index = -1, - props = baseFlatten(arguments, true, false, 1), - length = isObject(object) ? props.length : 0; - - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * An alternative to `_.reduce` this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable properties through a callback, with each callback execution - * potentially mutating the `accumulator` object. The callback is bound to - * `thisArg` and invoked with four arguments; (accumulator, value, key, object). - * Callbacks may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) { - * num *= num; - * if (num % 2) { - * return result.push(num) < 3; - * } - * }); - * // => [1, 9, 25] - * - * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function transform(object, callback, accumulator, thisArg) { - var isArr = isArray(object); - if (accumulator == null) { - if (isArr) { - accumulator = []; - } else { - var ctor = object && object.constructor, - proto = ctor && ctor.prototype; - - accumulator = baseCreate(proto); - } - } - if (callback) { - callback = lodash.createCallback(callback, thisArg, 4); - (isArr ? baseEach : forOwn)(object, function(value, index, object) { - return callback(accumulator, value, index, object); - }); - } - return accumulator; - } - - /** - * Creates an array composed of the own enumerable property values of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property values. - * @example - * - * _.values({ 'one': 1, 'two': 2, 'three': 3 }); - * // => [1, 2, 3] (property order is not guaranteed across environments) - */ - function values(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array of elements from the specified indexes, or keys, of the - * `collection`. Indexes may be specified as individual arguments or as arrays - * of indexes. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {...(number|number[]|string|string[])} [index] The indexes of `collection` - * to retrieve, specified as individual indexes or arrays of indexes. - * @returns {Array} Returns a new array of elements corresponding to the - * provided indexes. - * @example - * - * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]); - * // => ['a', 'c', 'e'] - * - * _.at(['fred', 'barney', 'pebbles'], 0, 2); - * // => ['fred', 'pebbles'] - */ - function at(collection) { - var args = arguments, - index = -1, - props = baseFlatten(args, true, false, 1), - length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length, - result = Array(length); - - if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - while(++index < length) { - result[index] = collection[props[index]]; - } - return result; - } - - /** - * Checks if a given value is present in a collection using strict equality - * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the - * offset from the end of the collection. - * - * @static - * @memberOf _ - * @alias include - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {*} target The value to check for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {boolean} Returns `true` if the `target` element is found, else `false`. - * @example - * - * _.contains([1, 2, 3], 1); - * // => true - * - * _.contains([1, 2, 3], 1, 2); - * // => false - * - * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.contains('pebbles', 'eb'); - * // => true - */ - function contains(collection, target, fromIndex) { - var index = -1, - indexOf = getIndexOf(), - length = collection ? collection.length : 0, - result = false; - - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; - if (isArray(collection)) { - result = indexOf(collection, target, fromIndex) > -1; - } else if (typeof length == 'number') { - result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; - } else { - baseEach(collection, function(value) { - if (++index >= fromIndex) { - return !(result = value === target); - } - }); - } - return result; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through the callback. The corresponding value - * of each key is the number of times the key was returned by the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': 1, '6': 2 } - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); - }); - - /** - * Checks if the given callback returns truey value for **all** elements of - * a collection. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias all - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if all elements passed the callback check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes']); - * // => false - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.every(characters, 'age'); - * // => true - * - * // using "_.where" callback shorthand - * _.every(characters, { 'age': 36 }); - * // => false - */ - function every(collection, callback, thisArg) { - var result = true; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (!(result = !!callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning an array of all elements - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias select - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that passed the callback check. - * @example - * - * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [2, 4, 6] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.filter(characters, 'blocked'); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - * - * // using "_.where" callback shorthand - * _.filter(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - */ - function filter(collection, callback, thisArg) { - var result = []; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - result.push(value); - } - } - } else { - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result.push(value); - } - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning the first element that - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias detect, findWhere - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.find(characters, function(chr) { - * return chr.age < 40; - * }); - * // => { 'name': 'barney', 'age': 36, 'blocked': false } - * - * // using "_.where" callback shorthand - * _.find(characters, { 'age': 1 }); - * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } - * - * // using "_.pluck" callback shorthand - * _.find(characters, 'blocked'); - * // => { 'name': 'fred', 'age': 40, 'blocked': true } - */ - function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - return value; - } - } - } else { - var result; - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - } - - /** - * This method is like `_.find` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(num) { - * return num % 2 == 1; - * }); - * // => 3 - */ - function findLast(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forEachRight(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - - /** - * Iterates over elements of a collection, executing the callback for each - * element. The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * Note: As with other "Collections" methods, objects with a `length` property - * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` - * may be used for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); - * // => logs each number and returns '1,2,3' - * - * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); - * // => logs each number and returns the object (property order is not guaranteed across environments) - */ - function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (callback(collection[index], index, collection) === false) { - break; - } - } - } else { - baseEach(collection, callback, thisArg); - } - return collection; - } - - /** - * This method is like `_.forEach` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias eachRight - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(','); - * // => logs each number from right to left and returns '3,2,1' - */ - function forEachRight(collection, callback, thisArg) { - var iterable = collection, - length = collection ? collection.length : 0; - - callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (length--) { - if (callback(collection[length], length, collection) === false) { - break; - } - } - } else { - if (typeof length != 'number') { - var props = keys(collection); - length = props.length; - } else if (support.unindexedChars && isString(collection)) { - iterable = collection.split(''); - } - baseEach(collection, function(value, key, collection) { - key = props ? props[--length] : --length; - return callback(iterable[key], key, collection); - }); - } - return collection; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of a collection through the callback. The corresponding value - * of each key is an array of the elements responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false` - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * // using "_.pluck" callback shorthand - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of the collection through the given callback. The corresponding - * value of each key is the last element responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var keys = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.indexBy(keys, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - */ - var indexBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Invokes the method named by `methodName` on each element in the `collection` - * returning an array of the results of each invoked method. Additional arguments - * will be provided to each invoked method. If `methodName` is a function it - * will be invoked for, and `this` bound to, each element in the `collection`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|string} methodName The name of the method to invoke or - * the function invoked per iteration. - * @param {...*} [arg] Arguments to invoke the method with. - * @returns {Array} Returns a new array of the results of each invoked method. - * @example - * - * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invoke([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - function invoke(collection, methodName) { - var args = slice(arguments, 2), - index = -1, - isFunc = typeof methodName == 'function', - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args); - }); - return result; - } - - /** - * Creates an array of values by running each element in the collection - * through the callback. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias collect - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of the results of each `callback` execution. - * @example - * - * _.map([1, 2, 3], function(num) { return num * 3; }); - * // => [3, 6, 9] - * - * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); - * // => [3, 6, 9] (property order is not guaranteed across environments) - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(characters, 'name'); - * // => ['barney', 'fred'] - */ - function map(collection, callback, thisArg) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - callback = lodash.createCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (++index < length) { - result[index] = callback(collection[index], index, collection); - } - } else { - baseEach(collection, function(value, key, collection) { - result[++index] = callback(value, key, collection); - }); - } - return result; - } - - /** - * Retrieves the maximum value of a collection. If the collection is empty or - * falsey `-Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.max(characters, function(chr) { return chr.age; }); - * // => { 'name': 'fred', 'age': 40 }; - * - * // using "_.pluck" callback shorthand - * _.max(characters, 'age'); - * // => { 'name': 'fred', 'age': 40 }; - */ - function max(collection, callback, thisArg) { - var computed = -Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value > result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current > computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the minimum value of a collection. If the collection is empty or - * falsey `Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.min(characters, function(chr) { return chr.age; }); - * // => { 'name': 'barney', 'age': 36 }; - * - * // using "_.pluck" callback shorthand - * _.min(characters, 'age'); - * // => { 'name': 'barney', 'age': 36 }; - */ - function min(collection, callback, thisArg) { - var computed = Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value < result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current < computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the value of a specified property from all elements in the collection. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {string} property The name of the property to pluck. - * @returns {Array} Returns a new array of property values. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.pluck(characters, 'name'); - * // => ['barney', 'fred'] - */ - var pluck = map; - - /** - * Reduces a collection to a value which is the accumulated result of running - * each element in the collection through the callback, where each successive - * callback execution consumes the return value of the previous execution. If - * `accumulator` is not provided the first element of the collection will be - * used as the initial `accumulator` value. The callback is bound to `thisArg` - * and invoked with four arguments; (accumulator, value, index|key, collection). - * - * @static - * @memberOf _ - * @alias foldl, inject - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var sum = _.reduce([1, 2, 3], function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * return result; - * }, {}); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function reduce(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - if (noaccum) { - accumulator = collection[++index]; - } - while (++index < length) { - accumulator = callback(accumulator, collection[index], index, collection); - } - } else { - baseEach(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection) - }); - } - return accumulator; - } - - /** - * This method is like `_.reduce` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias foldr - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var list = [[0, 1], [2, 3], [4, 5]]; - * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - forEachRight(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The opposite of `_.filter` this method returns the elements of a - * collection that the callback does **not** return truey for. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that failed the callback check. - * @example - * - * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [1, 3, 5] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.reject(characters, 'blocked'); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - * - * // using "_.where" callback shorthand - * _.reject(characters, { 'age': 36 }); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - */ - function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - return filter(collection, function(value, index, collection) { - return !callback(value, index, collection); - }); - } - - /** - * Retrieves a random element or `n` random elements from a collection. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to sample. - * @param {number} [n] The number of elements to sample. - * @param- {Object} [guard] Allows working with functions like `_.map` - * without using their `index` arguments as `n`. - * @returns {Array} Returns the random sample(s) of `collection`. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - * - * _.sample([1, 2, 3, 4], 2); - * // => [3, 1] - */ - function sample(collection, n, guard) { - if (collection && typeof collection.length != 'number') { - collection = values(collection); - } else if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - if (n == null || guard) { - return collection ? collection[baseRandom(0, collection.length - 1)] : undefined; - } - var result = shuffle(collection); - result.length = nativeMin(nativeMax(0, n), result.length); - return result; - } - - /** - * Creates an array of shuffled values, using a version of the Fisher-Yates - * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to shuffle. - * @returns {Array} Returns a new shuffled collection. - * @example - * - * _.shuffle([1, 2, 3, 4, 5, 6]); - * // => [4, 1, 6, 3, 5, 2] - */ - function shuffle(collection) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - var rand = baseRandom(0, ++index); - result[index] = result[rand]; - result[rand] = value; - }); - return result; - } - - /** - * Gets the size of the `collection` by returning `collection.length` for arrays - * and array-like objects or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns `collection.length` or number of own enumerable properties. - * @example - * - * _.size([1, 2]); - * // => 2 - * - * _.size({ 'one': 1, 'two': 2, 'three': 3 }); - * // => 3 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - var length = collection ? collection.length : 0; - return typeof length == 'number' ? length : keys(collection).length; - } - - /** - * Checks if the callback returns a truey value for **any** element of a - * collection. The function returns as soon as it finds a passing value and - * does not iterate over the entire collection. The callback is bound to - * `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias any - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if any element passed the callback check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.some(characters, 'blocked'); - * // => true - * - * // using "_.where" callback shorthand - * _.some(characters, { 'age': 1 }); - * // => false - */ - function some(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if ((result = callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); - } - return !!result; - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection through the callback. This method - * performs a stable sort, that is, it will preserve the original sort order - * of equal elements. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an array of property names is provided for `callback` the collection - * will be sorted by each property value. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Array|Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of sorted elements. - * @example - * - * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); - * // => [3, 1, 2] - * - * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); - * // => [3, 1, 2] - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 26 }, - * { 'name': 'fred', 'age': 30 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(_.sortBy(characters, 'age'), _.values); - * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]] - * - * // sorting by multiple properties - * _.map(_.sortBy(characters, ['name', 'age']), _.values); - * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]] - */ - function sortBy(collection, callback, thisArg) { - var index = -1, - isArr = isArray(callback), - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - if (!isArr) { - callback = lodash.createCallback(callback, thisArg, 3); - } - forEach(collection, function(value, key, collection) { - var object = result[++index] = getObject(); - if (isArr) { - object.criteria = map(callback, function(key) { return value[key]; }); - } else { - (object.criteria = getArray())[0] = callback(value, key, collection); - } - object.index = index; - object.value = value; - }); - - length = result.length; - result.sort(compareAscending); - while (length--) { - var object = result[length]; - result[length] = object.value; - if (!isArr) { - releaseArray(object.criteria); - } - releaseObject(object); - } - return result; - } - - /** - * Converts the `collection` to an array. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to convert. - * @returns {Array} Returns the new converted array. - * @example - * - * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); - * // => [2, 3, 4] - */ - function toArray(collection) { - if (collection && typeof collection.length == 'number') { - return (support.unindexedChars && isString(collection)) - ? collection.split('') - : slice(collection); - } - return values(collection); - } - - /** - * Performs a deep comparison of each element in a `collection` to the given - * `properties` object, returning an array of all elements that have equivalent - * property values. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Object} props The object of property values to filter by. - * @returns {Array} Returns a new array of elements that have the given properties. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * _.where(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] - * - * _.where(characters, { 'pets': ['dino'] }); - * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }] - */ - var where = filter; - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are all falsey. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result.push(value); - } - } - return result; - } - - /** - * Creates an array excluding all values of the provided arrays using strict - * equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to process. - * @param {...Array} [values] The arrays of values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); - * // => [1, 3, 4] - */ - function difference(array) { - return baseDifference(array, baseFlatten(arguments, true, true, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.findIndex(characters, function(chr) { - * return chr.age < 20; - * }); - * // => 2 - * - * // using "_.where" callback shorthand - * _.findIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findIndex(characters, 'blocked'); - * // => 1 - */ - function findIndex(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - if (callback(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of a `collection` from right to left. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': true }, - * { 'name': 'fred', 'age': 40, 'blocked': false }, - * { 'name': 'pebbles', 'age': 1, 'blocked': true } - * ]; - * - * _.findLastIndex(characters, function(chr) { - * return chr.age > 30; - * }); - * // => 1 - * - * // using "_.where" callback shorthand - * _.findLastIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findLastIndex(characters, 'blocked'); - * // => 2 - */ - function findLastIndex(array, callback, thisArg) { - var length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg, 3); - while (length--) { - if (callback(array[length], length, array)) { - return length; - } - } - return -1; - } - - /** - * Gets the first element or first `n` elements of an array. If a callback - * is provided elements at the beginning of the array are returned as long - * as the callback returns truey. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias head, take - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the first element(s) of `array`. - * @example - * - * _.first([1, 2, 3]); - * // => 1 - * - * _.first([1, 2, 3], 2); - * // => [1, 2] - * - * _.first([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [1, 2] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.first(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); - * // => ['barney', 'fred'] - */ - function first(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = -1; - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[0] : undefined; - } - } - return slice(array, 0, nativeMin(nativeMax(0, n), length)); - } - - /** - * Flattens a nested array (the nesting can be to any depth). If `isShallow` - * is truey, the array will only be flattened a single level. If a callback - * is provided each element of the array is passed through the callback before - * flattening. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new flattened array. - * @example - * - * _.flatten([1, [2], [3, [[4]]]]); - * // => [1, 2, 3, 4]; - * - * _.flatten([1, [2], [3, [[4]]]], true); - * // => [1, 2, 3, [[4]]]; - * - * var characters = [ - * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * // using "_.pluck" callback shorthand - * _.flatten(characters, 'pets'); - * // => ['hoppy', 'baby puss', 'dino'] - */ - function flatten(array, isShallow, callback, thisArg) { - // juggle arguments - if (typeof isShallow != 'boolean' && isShallow != null) { - thisArg = callback; - callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; - isShallow = false; - } - if (callback != null) { - array = map(array, callback, thisArg); - } - return baseFlatten(array, isShallow); - } - - /** - * Gets the index at which the first occurrence of `value` is found using - * strict equality for comparisons, i.e. `===`. If the array is already sorted - * providing `true` for `fromIndex` will run a faster binary search. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=0] The index to search from or `true` - * to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2); - * // => 1 - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 4 - * - * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); - * // => 2 - */ - function indexOf(array, value, fromIndex) { - if (typeof fromIndex == 'number') { - var length = array ? array.length : 0; - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); - } else if (fromIndex) { - var index = sortedIndex(array, value); - return array[index] === value ? index : -1; - } - return baseIndexOf(array, value, fromIndex); - } - - /** - * Gets all but the last element or last `n` elements of an array. If a - * callback is provided elements at the end of the array are excluded from - * the result as long as the callback returns truey. The callback is bound - * to `thisArg` and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - * - * _.initial([1, 2, 3], 2); - * // => [1] - * - * _.initial([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [1] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.initial(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name'); - * // => ['barney', 'fred'] - */ - function initial(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : callback || n; - } - return slice(array, 0, nativeMin(nativeMax(0, length - n), length)); - } - - /** - * Creates an array of unique values present in all provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of shared values. - * @example - * - * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2] - */ - function intersection() { - var args = [], - argsIndex = -1, - argsLength = arguments.length, - caches = getArray(), - indexOf = getIndexOf(), - trustIndexOf = indexOf === baseIndexOf, - seen = getArray(); - - while (++argsIndex < argsLength) { - var value = arguments[argsIndex]; - if (isArray(value) || isArguments(value)) { - args.push(value); - caches.push(trustIndexOf && value.length >= largeArraySize && - createCache(argsIndex ? args[argsIndex] : seen)); - } - } - var array = args[0], - index = -1, - length = array ? array.length : 0, - result = []; - - outer: - while (++index < length) { - var cache = caches[0]; - value = array[index]; - - if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { - argsIndex = argsLength; - (cache || seen).push(value); - while (--argsIndex) { - cache = caches[argsIndex]; - if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { - continue outer; - } - } - result.push(value); - } - } - while (argsLength--) { - cache = caches[argsLength]; - if (cache) { - releaseObject(cache); - } - } - releaseArray(caches); - releaseArray(seen); - return result; - } - - /** - * Gets the last element or last `n` elements of an array. If a callback is - * provided elements at the end of the array are returned as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the last element(s) of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - * - * _.last([1, 2, 3], 2); - * // => [2, 3] - * - * _.last([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [2, 3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.last(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.last(characters, { 'employer': 'na' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function last(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[length - 1] : undefined; - } - } - return slice(array, nativeMax(0, length - n)); - } - - /** - * Gets the index at which the last occurrence of `value` is found using strict - * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used - * as the offset from the end of the collection. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); - * // => 4 - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var index = array ? array.length : 0; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Removes all provided values from the given array using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {...*} [value] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * _.pull(array, 2, 3); - * console.log(array); - * // => [1, 1] - */ - function pull(array) { - var args = arguments, - argsIndex = 0, - argsLength = args.length, - length = array ? array.length : 0; - - while (++argsIndex < argsLength) { - var index = -1, - value = args[argsIndex]; - while (++index < length) { - if (array[index] === value) { - splice.call(array, index--, 1); - length--; - } - } - } - return array; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to but not including `end`. If `start` is less than `stop` a - * zero-length range is created unless a negative `step` is specified. - * - * @static - * @memberOf _ - * @category Arrays - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns a new range array. - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - function range(start, end, step) { - start = +start || 0; - step = typeof step == 'number' ? step : (+step || 1); - - if (end == null) { - end = start; - start = 0; - } - // use `Array(length)` so engines like Chakra and V8 avoid slower modes - // http://youtu.be/XAqIpGU8ZZk#t=17m25s - var index = -1, - length = nativeMax(0, ceil((end - start) / (step || 1))), - result = Array(length); - - while (++index < length) { - result[index] = start; - start += step; - } - return result; - } - - /** - * Removes all elements from an array that the callback returns truey for - * and returns an array of removed elements. The callback is bound to `thisArg` - * and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4, 5, 6]; - * var evens = _.remove(array, function(num) { return num % 2 == 0; }); - * - * console.log(array); - * // => [1, 3, 5] - * - * console.log(evens); - * // => [2, 4, 6] - */ - function remove(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0, - result = []; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - var value = array[index]; - if (callback(value, index, array)) { - result.push(value); - splice.call(array, index--, 1); - length--; - } - } - return result; - } - - /** - * The opposite of `_.initial` this method gets all but the first element or - * first `n` elements of an array. If a callback function is provided elements - * at the beginning of the array are excluded from the result as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias drop, tail - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.rest([1, 2, 3]); - * // => [2, 3] - * - * _.rest([1, 2, 3], 2); - * // => [3] - * - * _.rest([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.rest(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.rest(characters, { 'employer': 'slate' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function rest(array, callback, thisArg) { - if (typeof callback != 'number' && callback != null) { - var n = 0, - index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : nativeMax(0, callback); - } - return slice(array, n); - } - - /** - * Uses a binary search to determine the smallest index at which a value - * should be inserted into a given sorted array in order to maintain the sort - * order of the array. If a callback is provided it will be executed for - * `value` and each element of `array` to compute their sort ranking. The - * callback is bound to `thisArg` and invoked with one argument; (value). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([20, 30, 50], 40); - * // => 2 - * - * // using "_.pluck" callback shorthand - * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 2 - * - * var dict = { - * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } - * }; - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return dict.wordToNumber[word]; - * }); - * // => 2 - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return this.wordToNumber[word]; - * }, dict); - * // => 2 - */ - function sortedIndex(array, value, callback, thisArg) { - var low = 0, - high = array ? array.length : low; - - // explicitly reference `identity` for better inlining in Firefox - callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; - value = callback(value); - - while (low < high) { - var mid = (low + high) >>> 1; - (callback(array[mid]) < value) - ? low = mid + 1 - : high = mid; - } - return low; - } - - /** - * Creates an array of unique values, in order, of the provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of combined values. - * @example - * - * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2, 3, 5, 4] - */ - function union() { - return baseUniq(baseFlatten(arguments, true, true)); - } - - /** - * Creates a duplicate-value-free version of an array using strict equality - * for comparisons, i.e. `===`. If the array is sorted, providing - * `true` for `isSorted` will use a faster algorithm. If a callback is provided - * each element of `array` is passed through the callback before uniqueness - * is computed. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias unique - * @category Arrays - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a duplicate-value-free array. - * @example - * - * _.uniq([1, 2, 1, 3, 1]); - * // => [1, 2, 3] - * - * _.uniq([1, 1, 2, 2, 3], true); - * // => [1, 2, 3] - * - * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); - * // => ['A', 'b', 'C'] - * - * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); - * // => [1, 2.5, 3] - * - * // using "_.pluck" callback shorthand - * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniq(array, isSorted, callback, thisArg) { - // juggle arguments - if (typeof isSorted != 'boolean' && isSorted != null) { - thisArg = callback; - callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; - isSorted = false; - } - if (callback != null) { - callback = lodash.createCallback(callback, thisArg, 3); - } - return baseUniq(array, isSorted, callback); - } - - /** - * Creates an array excluding all provided values using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to filter. - * @param {...*} [value] The values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); - * // => [2, 3, 4] - */ - function without(array) { - return baseDifference(array, slice(arguments, 1)); - } - - /** - * Creates an array that is the symmetric difference of the provided arrays. - * See http://en.wikipedia.org/wiki/Symmetric_difference. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of values. - * @example - * - * _.xor([1, 2, 3], [5, 2, 1, 4]); - * // => [3, 5, 4] - * - * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]); - * // => [1, 4, 5] - */ - function xor() { - var index = -1, - length = arguments.length; - - while (++index < length) { - var array = arguments[index]; - if (isArray(array) || isArguments(array)) { - var result = result - ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result))) - : array; - } - } - return result || []; - } - - /** - * Creates an array of grouped elements, the first of which contains the first - * elements of the given arrays, the second of which contains the second - * elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @alias unzip - * @category Arrays - * @param {...Array} [array] Arrays to process. - * @returns {Array} Returns a new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - function zip() { - var array = arguments.length > 1 ? arguments : arguments[0], - index = -1, - length = array ? max(pluck(array, 'length')) : 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = pluck(array, index); - } - return result; - } - - /** - * Creates an object composed from arrays of `keys` and `values`. Provide - * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]` - * or two arrays, one of `keys` and one of corresponding `values`. - * - * @static - * @memberOf _ - * @alias object - * @category Arrays - * @param {Array} keys The array of keys. - * @param {Array} [values=[]] The array of values. - * @returns {Object} Returns an object composed of the given keys and - * corresponding values. - * @example - * - * _.zipObject(['fred', 'barney'], [30, 40]); - * // => { 'fred': 30, 'barney': 40 } - */ - function zipObject(keys, values) { - var index = -1, - length = keys ? keys.length : 0, - result = {}; - - if (!values && length && !isArray(keys[0])) { - values = []; - } - while (++index < length) { - var key = keys[index]; - if (values) { - result[key] = values[index]; - } else if (key) { - result[key[0]] = key[1]; - } - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that executes `func`, with the `this` binding and - * arguments of the created function, only after being called `n` times. - * - * @static - * @memberOf _ - * @category Functions - * @param {number} n The number of times the function must be called before - * `func` is executed. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('Done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => logs 'Done saving!', after all saves have completed - */ - function after(n, func) { - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any additional `bind` arguments to those - * provided to the bound function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to bind. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var func = function(greeting) { - * return greeting + ' ' + this.name; - * }; - * - * func = _.bind(func, { 'name': 'fred' }, 'hi'); - * func(); - * // => 'hi fred' - */ - function bind(func, thisArg) { - return arguments.length > 2 - ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) - : createWrapper(func, 1, null, null, thisArg); - } - - /** - * Binds methods of an object to the object itself, overwriting the existing - * method. Method names may be specified as individual arguments or as arrays - * of method names. If no method names are provided all the function properties - * of `object` will be bound. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...string} [methodName] The object method names to - * bind, specified as individual method names or arrays of method names. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'onClick': function() { console.log('clicked ' + this.label); } - * }; - * - * _.bindAll(view); - * jQuery('#docs').on('click', view.onClick); - * // => logs 'clicked docs', when the button is clicked - */ - function bindAll(object) { - var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object), - index = -1, - length = funcs.length; - - while (++index < length) { - var key = funcs[index]; - object[key] = createWrapper(object[key], 1, null, null, object); - } - return object; - } - - /** - * Creates a function that, when called, invokes the method at `object[key]` - * and prepends any additional `bindKey` arguments to those provided to the bound - * function. This method differs from `_.bind` by allowing bound functions to - * reference methods that will be redefined or don't yet exist. - * See http://michaux.ca/articles/lazy-function-definition-pattern. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object the method belongs to. - * @param {string} key The key of the method. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'name': 'fred', - * 'greet': function(greeting) { - * return greeting + ' ' + this.name; - * } - * }; - * - * var func = _.bindKey(object, 'greet', 'hi'); - * func(); - * // => 'hi fred' - * - * object.greet = function(greeting) { - * return greeting + 'ya ' + this.name + '!'; - * }; - * - * func(); - * // => 'hiya fred!' - */ - function bindKey(object, key) { - return arguments.length > 2 - ? createWrapper(key, 19, slice(arguments, 2), null, object) - : createWrapper(key, 3, null, null, object); - } - - /** - * Creates a function that is the composition of the provided functions, - * where each function consumes the return value of the function that follows. - * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - * Each function is executed with the `this` binding of the composed function. - * - * @static - * @memberOf _ - * @category Functions - * @param {...Function} [func] Functions to compose. - * @returns {Function} Returns the new composed function. - * @example - * - * var realNameMap = { - * 'pebbles': 'penelope' - * }; - * - * var format = function(name) { - * name = realNameMap[name.toLowerCase()] || name; - * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); - * }; - * - * var greet = function(formatted) { - * return 'Hiya ' + formatted + '!'; - * }; - * - * var welcome = _.compose(greet, format); - * welcome('pebbles'); - * // => 'Hiya Penelope!' - */ - function compose() { - var funcs = arguments, - length = funcs.length; - - while (length--) { - if (!isFunction(funcs[length])) { - throw new TypeError; - } - } - return function() { - var args = arguments, - length = funcs.length; - - while (length--) { - args = [funcs[length].apply(this, args)]; - } - return args[0]; - }; - } - - /** - * Creates a function which accepts one or more arguments of `func` that when - * invoked either executes `func` returning its result, if all `func` arguments - * have been provided, or returns a function that accepts one or more of the - * remaining `func` arguments, and so on. The arity of `func` can be specified - * if `func.length` is not sufficient. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @returns {Function} Returns the new curried function. - * @example - * - * var curried = _.curry(function(a, b, c) { - * console.log(a + b + c); - * }); - * - * curried(1)(2)(3); - * // => 6 - * - * curried(1, 2)(3); - * // => 6 - * - * curried(1, 2, 3); - * // => 6 - */ - function curry(func, arity) { - arity = typeof arity == 'number' ? arity : (+arity || func.length); - return createWrapper(func, 4, null, null, null, arity); - } - - /** - * Creates a function that will delay the execution of `func` until after - * `wait` milliseconds have elapsed since the last time it was invoked. - * Provide an options object to indicate that `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. Subsequent calls - * to the debounced function will return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the debounced function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to debounce. - * @param {number} wait The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // avoid costly calculations while the window size is in flux - * var lazyLayout = _.debounce(calculateLayout, 150); - * jQuery(window).on('resize', lazyLayout); - * - * // execute `sendMail` when the click event is fired, debouncing subsequent calls - * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * }); - * - * // ensure `batchLog` is executed once after 1 second of debounced calls - * var source = new EventSource('/stream'); - * source.addEventListener('message', _.debounce(batchLog, 250, { - * 'maxWait': 1000 - * }, false); - */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - wait = nativeMax(0, wait) || 0; - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = options.leading; - maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); - trailing = 'trailing' in options ? options.trailing : trailing; - } - var delayed = function() { - var remaining = wait - (now() - stamp); - if (remaining <= 0) { - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - var isCalled = trailingCall; - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - } else { - timeoutId = setTimeout(delayed, remaining); - } - }; - - var maxDelayed = function() { - if (timeoutId) { - clearTimeout(timeoutId); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (trailing || (maxWait !== wait)) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - }; - - return function() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0; - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - return result; - }; - } - - /** - * Defers executing the `func` function until the current call stack has cleared. - * Additional arguments will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to defer. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { console.log(text); }, 'deferred'); - * // logs 'deferred' after one or more milliseconds - */ - function defer(func) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 1); - return setTimeout(function() { func.apply(undefined, args); }, 1); - } - - /** - * Executes the `func` function after `wait` milliseconds. Additional arguments - * will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay execution. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { console.log(text); }, 1000, 'later'); - * // => logs 'later' after one second - */ - function delay(func, wait) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 2); - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided it will be used to determine the cache key for storing the result - * based on the arguments provided to the memoized function. By default, the - * first argument provided to the memoized function is used as the cache key. - * The `func` is executed with the `this` binding of the memoized function. - * The result cache is exposed as the `cache` property on the memoized function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] A function used to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var fibonacci = _.memoize(function(n) { - * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); - * }); - * - * fibonacci(9) - * // => 34 - * - * var data = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // modifying the result cache - * var get = _.memoize(function(name) { return data[name]; }, _.identity); - * get('pebbles'); - * // => { 'name': 'pebbles', 'age': 1 } - * - * get.cache.pebbles.name = 'penelope'; - * get('pebbles'); - * // => { 'name': 'penelope', 'age': 1 } - */ - function memoize(func, resolver) { - if (!isFunction(func)) { - throw new TypeError; - } - var memoized = function() { - var cache = memoized.cache, - key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0]; - - return hasOwnProperty.call(cache, key) - ? cache[key] - : (cache[key] = func.apply(this, arguments)); - } - memoized.cache = {}; - return memoized; - } - - /** - * Creates a function that is restricted to execute `func` once. Repeat calls to - * the function will return the value of the first call. The `func` is executed - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` executes `createApplication` once - */ - function once(func) { - var ran, - result; - - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (ran) { - return result; - } - ran = true; - result = func.apply(this, arguments); - - // clear the `func` variable so the function may be garbage collected - func = null; - return result; - }; - } - - /** - * Creates a function that, when called, invokes `func` with any additional - * `partial` arguments prepended to those provided to the new function. This - * method is similar to `_.bind` except it does **not** alter the `this` binding. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { return greeting + ' ' + name; }; - * var hi = _.partial(greet, 'hi'); - * hi('fred'); - * // => 'hi fred' - */ - function partial(func) { - return createWrapper(func, 16, slice(arguments, 1)); - } - - /** - * This method is like `_.partial` except that `partial` arguments are - * appended to those provided to the new function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var defaultsDeep = _.partialRight(_.merge, _.defaults); - * - * var options = { - * 'variable': 'data', - * 'imports': { 'jq': $ } - * }; - * - * defaultsDeep(options, _.templateSettings); - * - * options.variable - * // => 'data' - * - * options.imports - * // => { '_': _, 'jq': $ } - */ - function partialRight(func) { - return createWrapper(func, 32, null, slice(arguments, 1)); - } - - /** - * Creates a function that, when executed, will only call the `func` function - * at most once per every `wait` milliseconds. Provide an options object to - * indicate that `func` should be invoked on the leading and/or trailing edge - * of the `wait` timeout. Subsequent calls to the throttled function will - * return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the throttled function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to throttle. - * @param {number} wait The number of milliseconds to throttle executions to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // avoid excessively updating the position while scrolling - * var throttled = _.throttle(updatePosition, 100); - * jQuery(window).on('scroll', throttled); - * - * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes - * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { - * 'trailing': false - * })); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? options.leading : leading; - trailing = 'trailing' in options ? options.trailing : trailing; - } - debounceOptions.leading = leading; - debounceOptions.maxWait = wait; - debounceOptions.trailing = trailing; - - return debounce(func, wait, debounceOptions); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Additional arguments provided to the function are appended - * to those provided to the wrapper function. The wrapper is executed with - * the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {*} value The value to wrap. - * @param {Function} wrapper The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('Fred, Wilma, & Pebbles'); - * // => '

Fred, Wilma, & Pebbles

' - */ - function wrap(value, wrapper) { - return createWrapper(wrapper, 16, [value]); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new function. - * @example - * - * var object = { 'name': 'fred' }; - * var getter = _.constant(object); - * getter() === object; - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - /** - * Produces a callback bound to an optional `thisArg`. If `func` is a property - * name the created callback will return the property value for a given element. - * If `func` is an object the created callback will return `true` for elements - * that contain the equivalent object properties, otherwise it will return `false`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // wrap to create custom callback shorthands - * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { - * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); - * return !match ? func(callback, thisArg) : function(object) { - * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; - * }; - * }); - * - * _.filter(characters, 'age__gt38'); - * // => [{ 'name': 'fred', 'age': 40 }] - */ - function createCallback(func, thisArg, argCount) { - var type = typeof func; - if (func == null || type == 'function') { - return baseCreateCallback(func, thisArg, argCount); - } - // handle "_.pluck" style callback shorthands - if (type != 'object') { - return property(func); - } - var props = keys(func), - key = props[0], - a = func[key]; - - // handle "_.where" style callback shorthands - if (props.length == 1 && a === a && !isObject(a)) { - // fast path the common case of providing an object with a single - // property containing a primitive value - return function(object) { - var b = object[key]; - return a === b && (a !== 0 || (1 / a == 1 / b)); - }; - } - return function(object) { - var length = props.length, - result = false; - - while (length--) { - if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { - break; - } - } - return result; - }; - } - - /** - * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their - * corresponding HTML entities. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} string The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('Fred, Wilma, & Pebbles'); - * // => 'Fred, Wilma, & Pebbles' - */ - function escape(string) { - return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); - } - - /** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'name': 'fred' }; - * _.identity(object) === object; - * // => true - */ - function identity(value) { - return value; - } - - /** - * Adds function properties of a source object to the destination object. - * If `object` is a function methods will be added to its prototype as well. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Function|Object} [object=lodash] object The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options] The options object. - * @param {boolean} [options.chain=true] Specify whether the functions added are chainable. - * @example - * - * function capitalize(string) { - * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - * } - * - * _.mixin({ 'capitalize': capitalize }); - * _.capitalize('fred'); - * // => 'Fred' - * - * _('fred').capitalize().value(); - * // => 'Fred' - * - * _.mixin({ 'capitalize': capitalize }, { 'chain': false }); - * _('fred').capitalize(); - * // => 'Fred' - */ - function mixin(object, source, options) { - var chain = true, - methodNames = source && functions(source); - - if (!source || (!options && !methodNames.length)) { - if (options == null) { - options = source; - } - ctor = lodashWrapper; - source = object; - object = lodash; - methodNames = functions(source); - } - if (options === false) { - chain = false; - } else if (isObject(options) && 'chain' in options) { - chain = options.chain; - } - var ctor = object, - isFunc = isFunction(ctor); - - forEach(methodNames, function(methodName) { - var func = object[methodName] = source[methodName]; - if (isFunc) { - ctor.prototype[methodName] = function() { - var chainAll = this.__chain__, - value = this.__wrapped__, - args = [value]; - - push.apply(args, arguments); - var result = func.apply(object, args); - if (chain || chainAll) { - if (value === result && isObject(result)) { - return this; - } - result = new ctor(result); - result.__chain__ = chainAll; - } - return result; - }; - } - }); - } - - /** - * Reverts the '_' variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @memberOf _ - * @category Utilities - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - context._ = oldDash; - return this; - } - - /** - * A no-operation function. - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var object = { 'name': 'fred' }; - * _.noop(object) === undefined; - * // => true - */ - function noop() { - // no operation performed - } - - /** - * Gets the number of milliseconds that have elapsed since the Unix epoch - * (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var stamp = _.now(); - * _.defer(function() { console.log(_.now() - stamp); }); - * // => logs the number of milliseconds it took for the deferred function to be called - */ - var now = isNative(now = Date.now) && now || function() { - return new Date().getTime(); - }; - - /** - * Converts the given value into an integer of the specified radix. - * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the - * `value` is a hexadecimal, in which case a `radix` of `16` is used. - * - * Note: This method avoids differences in native ES3 and ES5 `parseInt` - * implementations. See http://es5.github.io/#E. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} value The value to parse. - * @param {number} [radix] The radix used to interpret the value to parse. - * @returns {number} Returns the new integer value. - * @example - * - * _.parseInt('08'); - * // => 8 - */ - var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) { - // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt` - return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0); - }; - - /** - * Creates a "_.pluck" style function, which returns the `key` value of a - * given object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} key The name of the property to retrieve. - * @returns {Function} Returns the new function. - * @example - * - * var characters = [ - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 36 } - * ]; - * - * var getName = _.property('name'); - * - * _.map(characters, getName); - * // => ['barney', 'fred'] - * - * _.sortBy(characters, getName); - * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] - */ - function property(key) { - return function(object) { - return object[key]; - }; - } - - /** - * Produces a random number between `min` and `max` (inclusive). If only one - * argument is provided a number between `0` and the given number will be - * returned. If `floating` is truey or either `min` or `max` are floats a - * floating-point number will be returned instead of an integer. - * - * @static - * @memberOf _ - * @category Utilities - * @param {number} [min=0] The minimum possible value. - * @param {number} [max=1] The maximum possible value. - * @param {boolean} [floating=false] Specify returning a floating-point number. - * @returns {number} Returns a random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(min, max, floating) { - var noMin = min == null, - noMax = max == null; - - if (floating == null) { - if (typeof min == 'boolean' && noMax) { - floating = min; - min = 1; - } - else if (!noMax && typeof max == 'boolean') { - floating = max; - noMax = true; - } - } - if (noMin && noMax) { - max = 1; - } - min = +min || 0; - if (noMax) { - max = min; - min = 0; - } else { - max = +max || 0; - } - if (floating || min % 1 || max % 1) { - var rand = nativeRandom(); - return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max); - } - return baseRandom(min, max); - } - - /** - * Resolves the value of property `key` on `object`. If `key` is a function - * it will be invoked with the `this` binding of `object` and its result returned, - * else the property value is returned. If `object` is falsey then `undefined` - * is returned. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to resolve. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { - * 'cheese': 'crumpets', - * 'stuff': function() { - * return 'nonsense'; - * } - * }; - * - * _.result(object, 'cheese'); - * // => 'crumpets' - * - * _.result(object, 'stuff'); - * // => 'nonsense' - */ - function result(object, key) { - if (object) { - var value = object[key]; - return isFunction(value) ? object[key]() : value; - } - } - - /** - * A micro-templating method that handles arbitrary delimiters, preserves - * whitespace, and correctly escapes quotes within interpolated code. - * - * Note: In the development build, `_.template` utilizes sourceURLs for easier - * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl - * - * For more information on precompiling templates see: - * https://lodash.com/custom-builds - * - * For more information on Chrome extension sandboxes see: - * http://developer.chrome.com/stable/extensions/sandboxingEval.html - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} text The template text. - * @param {Object} data The data object used to populate the text. - * @param {Object} [options] The options object. - * @param {RegExp} [options.escape] The "escape" delimiter. - * @param {RegExp} [options.evaluate] The "evaluate" delimiter. - * @param {Object} [options.imports] An object to import into the template as local variables. - * @param {RegExp} [options.interpolate] The "interpolate" delimiter. - * @param {string} [sourceURL] The sourceURL of the template's compiled source. - * @param {string} [variable] The data object variable name. - * @returns {Function|string} Returns a compiled function when no `data` object - * is given, else it returns the interpolated text. - * @example - * - * // using the "interpolate" delimiter to create a compiled template - * var compiled = _.template('hello <%= name %>'); - * compiled({ 'name': 'fred' }); - * // => 'hello fred' - * - * // using the "escape" delimiter to escape HTML in data property values - * _.template('<%- value %>', { 'value': ' -``` - -Using [`npm`](http://npmjs.org/): - -```bash -npm i --save lodash - -{sudo} npm i -g lodash -npm ln lodash -``` - -In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/): - -```js -var _ = require('lodash'); -// or as Underscore -var _ = require('lodash/dist/lodash.underscore'); -``` - -**Notes:** - * Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL - * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('lodash.js'); -``` - -In an AMD loader: - -```js -require({ - 'packages': [ - { 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' } - ] -}, -['lodash'], function(_) { - console.log(_.VERSION); -}); -``` - -## Resources - - * Podcasts - - [JavaScript Jabber](http://javascriptjabber.com/079-jsj-lo-dash-with-john-david-dalton/) - - * Posts - - [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) - - [Custom builds in Lo-Dash 2.0](http://kitcambridge.be/blog/custom-builds-in-lo-dash-2-dot-0/) - - * Videos - - [Introduction](https://vimeo.com/44154599) - - [Origins](https://vimeo.com/44154600) - - [Optimizations & builds](https://vimeo.com/44154601) - - [Native method use](https://vimeo.com/48576012) - - [Testing](https://vimeo.com/45865290) - - [CascadiaJS ’12](http://www.youtube.com/watch?v=dpPy4f_SeEk) - - A list of other community created podcasts, posts, & videos is available on our [wiki](https://github.com/lodash/lodash/wiki/Resources). - -## Features - - * AMD loader support ([curl](https://github.com/cujojs/curl), [dojo](http://dojotoolkit.org/), [requirejs](http://requirejs.org/), etc.) - * [_(…)](https://lodash.com/docs#_) supports intuitive chaining - * [_.at](https://lodash.com/docs#at) for cherry-picking collection values - * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods - * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects - * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects - * [_.constant](https://lodash.com/docs#constant) & [_.property](https://lodash.com/docs#property) function generators for composing functions - * [_.contains](https://lodash.com/docs#contains) accepts a `fromIndex` - * [_.create](https://lodash.com/docs#create) for easier object inheritance - * [_.createCallback](https://lodash.com/docs#createCallback) for extending callbacks in methods & mixins - * [_.curry](https://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions - * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) accept additional `options` for more control - * [_.findIndex](https://lodash.com/docs#findIndex) & [_.findKey](https://lodash.com/docs#findKey) for finding indexes & keys - * [_.forEach](https://lodash.com/docs#forEach) is chainable & supports exiting early - * [_.forIn](https://lodash.com/docs#forIn) for iterating own & inherited properties - * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties - * [_.isPlainObject](https://lodash.com/docs#isPlainObject) for checking if values are created by `Object` - * [_.mapValues](https://lodash.com/docs#mapValues) for [mapping](https://lodash.com/docs#map) values to an object - * [_.memoize](https://lodash.com/docs#memoize) exposes the `cache` of memoized functions - * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) - * [_.noop](https://lodash.com/docs#noop) for function placeholders - * [_.now](https://lodash.com/docs#now) as a cross-browser `Date.now` alternative - * [_.parseInt](https://lodash.com/docs#parseInt) for consistent behavior - * [_.pull](https://lodash.com/docs#pull) & [_.remove](https://lodash.com/docs#remove) for mutating arrays - * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers - * [_.runInContext](https://lodash.com/docs#runInContext) for easier mocking - * [_.sortBy](https://lodash.com/docs#sortBy) supports sorting by multiple properties - * [_.support](https://lodash.com/docs#support) for flagging environment features - * [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals) - * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects - * [_.where](https://lodash.com/docs#where) supports deep object comparisons - * [_.xor](https://lodash.com/docs#xor) as a companion to [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) - * [_.zip](https://lodash.com/docs#zip) is capable of unzipping values - * [_.omit](https://lodash.com/docs#omit), [_.pick](https://lodash.com/docs#pick), & - [more](https://lodash.com/docs "_.assign, _.clone, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept callbacks - * [_.contains](https://lodash.com/docs#contains), [_.toArray](https://lodash.com/docs#toArray), & - [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.forEachRight, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.where") accept strings - * [_.filter](https://lodash.com/docs#filter), [_.map](https://lodash.com/docs#map), & - [more](https://lodash.com/docs "_.countBy, _.every, _.find, _.findKey, _.findLast, _.findLastIndex, _.findLastKey, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* & *“_.where”* shorthands - * [_.findLast](https://lodash.com/docs#findLast), [_.findLastIndex](https://lodash.com/docs#findLastIndex), & - [more](https://lodash.com/docs "_.findLastKey, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods - -## Support - -Tested in Chrome 5~31, Firefox 2~25, IE 6-11, Opera 9.25-17, Safari 3-7, Node.js 0.6.21-0.10.22, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5. diff --git a/node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js b/node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js deleted file mode 100644 index 4d35185f..00000000 --- a/node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js +++ /dev/null @@ -1,7158 +0,0 @@ -/** - * @license - * Lo-Dash 2.4.2 (Custom Build) - * Build: `lodash -o ./dist/lodash.compat.js` - * Copyright 2012-2013 The Dojo Foundation - * Based on Underscore.js 1.5.2 - * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre ES5 environments */ - var undefined; - - /** Used to pool arrays and objects used internally */ - var arrayPool = [], - objectPool = []; - - /** Used to generate unique IDs */ - var idCounter = 0; - - /** Used internally to indicate various things */ - var indicatorObject = {}; - - /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ - var keyPrefix = +new Date + ''; - - /** Used as the size when optimizations are enabled for large arrays */ - var largeArraySize = 75; - - /** Used as the max size of the `arrayPool` and `objectPool` */ - var maxPoolSize = 40; - - /** Used to detect and test whitespace */ - var whitespace = ( - // whitespace - ' \t\x0B\f\xA0\ufeff' + - - // line terminators - '\n\r\u2028\u2029' + - - // unicode category "Zs" space separators - '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' - ); - - /** Used to match empty string literals in compiled template source */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** - * Used to match ES6 template delimiters - * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match regexp flags from their coerced string values */ - var reFlags = /\w*$/; - - /** Used to detected named functions */ - var reFuncName = /^\s*function[ \n\r\t]+\w/; - - /** Used to match "interpolate" template delimiters */ - var reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match leading whitespace and zeros to be removed */ - var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)'); - - /** Used to ensure capturing order of template delimiters */ - var reNoMatch = /($^)/; - - /** Used to detect functions containing a `this` reference */ - var reThis = /\bthis\b/; - - /** Used to match unescaped characters in compiled string literals */ - var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; - - /** Used to assign default `context` object properties */ - var contextProps = [ - 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', - 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', - 'parseInt', 'setTimeout' - ]; - - /** Used to fix the JScript [[DontEnum]] bug */ - var shadowedProps = [ - 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', - 'toLocaleString', 'toString', 'valueOf' - ]; - - /** Used to make template sourceURLs easier to identify */ - var templateCounter = 0; - - /** `Object#toString` result shortcuts */ - var argsClass = '[object Arguments]', - arrayClass = '[object Array]', - boolClass = '[object Boolean]', - dateClass = '[object Date]', - errorClass = '[object Error]', - funcClass = '[object Function]', - numberClass = '[object Number]', - objectClass = '[object Object]', - regexpClass = '[object RegExp]', - stringClass = '[object String]'; - - /** Used to identify object classifications that `_.clone` supports */ - var cloneableClasses = {}; - cloneableClasses[funcClass] = false; - cloneableClasses[argsClass] = cloneableClasses[arrayClass] = - cloneableClasses[boolClass] = cloneableClasses[dateClass] = - cloneableClasses[numberClass] = cloneableClasses[objectClass] = - cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; - - /** Used as an internal `_.debounce` options object */ - var debounceOptions = { - 'leading': false, - 'maxWait': 0, - 'trailing': false - }; - - /** Used as the property descriptor for `__bindData__` */ - var descriptor = { - 'configurable': false, - 'enumerable': false, - 'value': null, - 'writable': false - }; - - /** Used as the data object for `iteratorTemplate` */ - var iteratorData = { - 'args': '', - 'array': null, - 'bottom': '', - 'firstArg': '', - 'init': '', - 'keys': null, - 'loop': '', - 'shadowedProps': null, - 'support': null, - 'top': '', - 'useHas': false - }; - - /** Used to determine if values are of the language type Object */ - var objectTypes = { - 'boolean': false, - 'function': true, - 'object': true, - 'number': false, - 'string': false, - 'undefined': false - }; - - /** Used to escape characters for inclusion in compiled string literals */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\t': 't', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Used as a reference to the global object */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `exports` */ - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - /** Detect free variable `module` */ - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports` */ - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - - /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ - var freeGlobal = objectTypes[typeof global] && global; - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.indexOf` without support for binary searches - * or `fromIndex` constraints. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * An implementation of `_.contains` for cache objects that mimics the return - * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. - * - * @private - * @param {Object} cache The cache object to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns `0` if `value` is found, else `-1`. - */ - function cacheIndexOf(cache, value) { - var type = typeof value; - cache = cache.cache; - - if (type == 'boolean' || value == null) { - return cache[value] ? 0 : -1; - } - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value; - cache = (cache = cache[type]) && cache[key]; - - return type == 'object' - ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) - : (cache ? 0 : -1); - } - - /** - * Adds a given value to the corresponding cache object. - * - * @private - * @param {*} value The value to add to the cache. - */ - function cachePush(value) { - var cache = this.cache, - type = typeof value; - - if (type == 'boolean' || value == null) { - cache[value] = true; - } else { - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value, - typeCache = cache[type] || (cache[type] = {}); - - if (type == 'object') { - (typeCache[key] || (typeCache[key] = [])).push(value); - } else { - typeCache[key] = true; - } - } - } - - /** - * Used by `_.max` and `_.min` as the default callback when a given - * collection is a string value. - * - * @private - * @param {string} value The character to inspect. - * @returns {number} Returns the code unit of given character. - */ - function charAtCallback(value) { - return value.charCodeAt(0); - } - - /** - * Used by `sortBy` to compare transformed `collection` elements, stable sorting - * them in ascending order. - * - * @private - * @param {Object} a The object to compare to `b`. - * @param {Object} b The object to compare to `a`. - * @returns {number} Returns the sort order indicator of `1` or `-1`. - */ - function compareAscending(a, b) { - var ac = a.criteria, - bc = b.criteria, - index = -1, - length = ac.length; - - while (++index < length) { - var value = ac[index], - other = bc[index]; - - if (value !== other) { - if (value > other || typeof value == 'undefined') { - return 1; - } - if (value < other || typeof other == 'undefined') { - return -1; - } - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to return the same value for - // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247 - // - // This also ensures a stable sort in V8 and other engines. - // See http://code.google.com/p/v8/issues/detail?id=90 - return a.index - b.index; - } - - /** - * Creates a cache object to optimize linear searches of large arrays. - * - * @private - * @param {Array} [array=[]] The array to search. - * @returns {null|Object} Returns the cache object or `null` if caching should not be used. - */ - function createCache(array) { - var index = -1, - length = array.length, - first = array[0], - mid = array[(length / 2) | 0], - last = array[length - 1]; - - if (first && typeof first == 'object' && - mid && typeof mid == 'object' && last && typeof last == 'object') { - return false; - } - var cache = getObject(); - cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; - - var result = getObject(); - result.array = array; - result.cache = cache; - result.push = cachePush; - - while (++index < length) { - result.push(array[index]); - } - return result; - } - - /** - * Used by `template` to escape characters for inclusion in compiled - * string literals. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(match) { - return '\\' + stringEscapes[match]; - } - - /** - * Gets an array from the array pool or creates a new one if the pool is empty. - * - * @private - * @returns {Array} The array from the pool. - */ - function getArray() { - return arrayPool.pop() || []; - } - - /** - * Gets an object from the object pool or creates a new one if the pool is empty. - * - * @private - * @returns {Object} The object from the pool. - */ - function getObject() { - return objectPool.pop() || { - 'array': null, - 'cache': null, - 'criteria': null, - 'false': false, - 'index': 0, - 'null': false, - 'number': null, - 'object': null, - 'push': null, - 'string': null, - 'true': false, - 'undefined': false, - 'value': null - }; - } - - /** - * Checks if `value` is a DOM node in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`. - */ - function isNode(value) { - // IE < 9 presents DOM nodes as `Object` objects except they have `toString` - // methods that are `typeof` "string" and still can coerce nodes to strings - return typeof value.toString != 'function' && typeof (value + '') == 'string'; - } - - /** - * Releases the given array back to the array pool. - * - * @private - * @param {Array} [array] The array to release. - */ - function releaseArray(array) { - array.length = 0; - if (arrayPool.length < maxPoolSize) { - arrayPool.push(array); - } - } - - /** - * Releases the given object back to the object pool. - * - * @private - * @param {Object} [object] The object to release. - */ - function releaseObject(object) { - var cache = object.cache; - if (cache) { - releaseObject(cache); - } - object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null; - if (objectPool.length < maxPoolSize) { - objectPool.push(object); - } - } - - /** - * Slices the `collection` from the `start` index up to, but not including, - * the `end` index. - * - * Note: This function is used instead of `Array#slice` to support node lists - * in IE < 9 and to ensure dense arrays are returned. - * - * @private - * @param {Array|Object|string} collection The collection to slice. - * @param {number} start The start index. - * @param {number} end The end index. - * @returns {Array} Returns the new array. - */ - function slice(array, start, end) { - start || (start = 0); - if (typeof end == 'undefined') { - end = array ? array.length : 0; - } - var index = -1, - length = end - start || 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = array[start + index]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new `lodash` function using the given context object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} [context=root] The context object. - * @returns {Function} Returns the `lodash` function. - */ - function runInContext(context) { - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See http://es5.github.io/#x11.1.5. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references */ - var Array = context.Array, - Boolean = context.Boolean, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Number = context.Number, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** - * Used for `Array` method references. - * - * Normally `Array.prototype` would suffice, however, using an array literal - * avoids issues in Narwhal. - */ - var arrayRef = []; - - /** Used for native method references */ - var errorProto = Error.prototype, - objectProto = Object.prototype, - stringProto = String.prototype; - - /** Used to restore the original `_` reference in `noConflict` */ - var oldDash = context._; - - /** Used to resolve the internal [[Class]] of values */ - var toString = objectProto.toString; - - /** Used to detect if a method is native */ - var reNative = RegExp('^' + - String(toString) - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/toString| for [^\]]+/g, '.*?') + '$' - ); - - /** Native method shortcuts */ - var ceil = Math.ceil, - clearTimeout = context.clearTimeout, - floor = Math.floor, - fnToString = Function.prototype.toString, - getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - hasOwnProperty = objectProto.hasOwnProperty, - push = arrayRef.push, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - setTimeout = context.setTimeout, - splice = arrayRef.splice, - unshift = arrayRef.unshift; - - /** Used to set meta data on functions */ - var defineProperty = (function() { - // IE 8 only accepts DOM elements - try { - var o = {}, - func = isNative(func = Object.defineProperty) && func, - result = func(o, o, o) && func; - } catch(e) { } - return result; - }()); - - /* Native method shortcuts for methods with the same name as other `lodash` methods */ - var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate, - nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, - nativeIsFinite = context.isFinite, - nativeIsNaN = context.isNaN, - nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random; - - /** Used to lookup a built-in constructor by [[Class]] */ - var ctorByClass = {}; - ctorByClass[arrayClass] = Array; - ctorByClass[boolClass] = Boolean; - ctorByClass[dateClass] = Date; - ctorByClass[funcClass] = Function; - ctorByClass[objectClass] = Object; - ctorByClass[numberClass] = Number; - ctorByClass[regexpClass] = RegExp; - ctorByClass[stringClass] = String; - - /** Used to avoid iterating non-enumerable properties in IE < 9 */ - var nonEnumProps = {}; - nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; - nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true }; - nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true }; - nonEnumProps[objectClass] = { 'constructor': true }; - - (function() { - var length = shadowedProps.length; - while (length--) { - var key = shadowedProps[length]; - for (var className in nonEnumProps) { - if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) { - nonEnumProps[className][key] = false; - } - } - } - }()); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps the given value to enable intuitive - * method chaining. - * - * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: - * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, - * and `unshift` - * - * Chaining is supported in custom builds as long as the `value` method is - * implicitly or explicitly included in the build. - * - * The chainable wrapper functions are: - * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, - * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, - * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, - * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, - * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, - * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, - * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, - * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, - * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, - * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, - * and `zip` - * - * The non-chainable wrapper functions are: - * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, - * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, - * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, - * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, - * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, - * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, - * `template`, `unescape`, `uniqueId`, and `value` - * - * The wrapper functions `first` and `last` return wrapped values when `n` is - * provided, otherwise they return unwrapped values. - * - * Explicit chaining can be enabled by using the `_.chain` method. - * - * @name _ - * @constructor - * @category Chaining - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns a `lodash` instance. - * @example - * - * var wrapped = _([1, 2, 3]); - * - * // returns an unwrapped value - * wrapped.reduce(function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * // returns a wrapped value - * var squares = wrapped.map(function(num) { - * return num * num; - * }); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor - return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) - ? value - : new lodashWrapper(value); - } - - /** - * A fast path for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap in a `lodash` instance. - * @param {boolean} chainAll A flag to enable chaining for all methods - * @returns {Object} Returns a `lodash` instance. - */ - function lodashWrapper(value, chainAll) { - this.__chain__ = !!chainAll; - this.__wrapped__ = value; - } - // ensure `new lodashWrapper` is an instance of `lodash` - lodashWrapper.prototype = lodash.prototype; - - /** - * An object used to flag environments features. - * - * @static - * @memberOf _ - * @type Object - */ - var support = lodash.support = {}; - - (function() { - var ctor = function() { this.x = 1; }, - object = { '0': 1, 'length': 1 }, - props = []; - - ctor.prototype = { 'valueOf': 1, 'y': 1 }; - for (var key in new ctor) { props.push(key); } - for (key in arguments) { } - - /** - * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.argsClass = toString.call(arguments) == argsClass; - - /** - * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5). - * - * @memberOf _.support - * @type boolean - */ - support.argsObject = arguments.constructor == Object && !(arguments instanceof Array); - - /** - * Detect if `name` or `message` properties of `Error.prototype` are - * enumerable by default. (IE < 9, Safari < 5.1) - * - * @memberOf _.support - * @type boolean - */ - support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name'); - - /** - * Detect if `prototype` properties are enumerable by default. - * - * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 - * (if the prototype or a property on the prototype has been set) - * incorrectly sets a function's `prototype` property [[Enumerable]] - * value to `true`. - * - * @memberOf _.support - * @type boolean - */ - support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype'); - - /** - * Detect if functions can be decompiled by `Function#toString` - * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). - * - * @memberOf _.support - * @type boolean - */ - support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext); - - /** - * Detect if `Function#name` is supported (all but IE). - * - * @memberOf _.support - * @type boolean - */ - support.funcNames = typeof Function.name == 'string'; - - /** - * Detect if `arguments` object indexes are non-enumerable - * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumArgs = key != 0; - - /** - * Detect if properties shadowing those on `Object.prototype` are non-enumerable. - * - * In IE < 9 an objects own properties, shadowing non-enumerable ones, are - * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumShadows = !/valueOf/.test(props); - - /** - * Detect if own properties are iterated after inherited properties (all but IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.ownLast = props[0] != 'x'; - - /** - * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. - * - * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` - * and `splice()` functions that fail to remove the last element, `value[0]`, - * of array-like objects even though the `length` property is set to `0`. - * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` - * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. - * - * @memberOf _.support - * @type boolean - */ - support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]); - - /** - * Detect lack of support for accessing string characters by index. - * - * IE < 8 can't access characters by index and IE 8 can only access - * characters by index on string literals. - * - * @memberOf _.support - * @type boolean - */ - support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx'; - - /** - * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9) - * and that the JS engine errors when attempting to coerce an object to - * a string without a `toString` function. - * - * @memberOf _.support - * @type boolean - */ - try { - support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + '')); - } catch(e) { - support.nodeClass = true; - } - }(1)); - - /** - * By default, the template delimiters used by Lo-Dash are similar to those in - * embedded Ruby (ERB). Change the following template settings to use alternative - * delimiters. - * - * @static - * @memberOf _ - * @type Object - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'escape': /<%-([\s\S]+?)%>/g, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'evaluate': /<%([\s\S]+?)%>/g, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type string - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type Object - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type Function - */ - '_': lodash - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The template used to create iterator functions. - * - * @private - * @param {Object} data The data object used to populate the text. - * @returns {string} Returns the interpolated text. - */ - var iteratorTemplate = function(obj) { - - var __p = 'var index, iterable = ' + - (obj.firstArg) + - ', result = ' + - (obj.init) + - ';\nif (!iterable) return result;\n' + - (obj.top) + - ';'; - if (obj.array) { - __p += '\nvar length = iterable.length; index = -1;\nif (' + - (obj.array) + - ') { '; - if (support.unindexedChars) { - __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } '; - } - __p += '\n while (++index < length) {\n ' + - (obj.loop) + - ';\n }\n}\nelse { '; - } else if (support.nonEnumArgs) { - __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' + - (obj.loop) + - ';\n }\n } else { '; - } - - if (support.enumPrototypes) { - __p += '\n var skipProto = typeof iterable == \'function\';\n '; - } - - if (support.enumErrorProps) { - __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n '; - } - - var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); } - - if (obj.useHas && obj.keys) { - __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n'; - if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - } else { - __p += '\n for (index in iterable) {\n'; - if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - if (support.nonEnumShadows) { - __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n '; - for (k = 0; k < 7; k++) { - __p += '\n index = \'' + - (obj.shadowedProps[k]) + - '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))'; - if (!obj.useHas) { - __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])'; - } - __p += ') {\n ' + - (obj.loop) + - ';\n } '; - } - __p += '\n } '; - } - - } - - if (obj.array || support.nonEnumArgs) { - __p += '\n}'; - } - __p += - (obj.bottom) + - ';\nreturn result'; - - return __p - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.bind` that creates the bound function and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new bound function. - */ - function baseBind(bindData) { - var func = bindData[0], - partialArgs = bindData[2], - thisArg = bindData[4]; - - function bound() { - // `Function#bind` spec - // http://es5.github.io/#x15.3.4.5 - if (partialArgs) { - // avoid `arguments` object deoptimizations by using `slice` instead - // of `Array.prototype.slice.call` and not assigning `arguments` to a - // variable as a ternary expression - var args = slice(partialArgs); - push.apply(args, arguments); - } - // mimic the constructor's `return` behavior - // http://es5.github.io/#x13.2.2 - if (this instanceof bound) { - // ensure `new bound` is an instance of `func` - var thisBinding = baseCreate(func.prototype), - result = func.apply(thisBinding, args || arguments); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisArg, args || arguments); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.clone` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, callback, stackA, stackB) { - if (callback) { - var result = callback(value); - if (typeof result != 'undefined') { - return result; - } - } - // inspect [[Class]] - var isObj = isObject(value); - if (isObj) { - var className = toString.call(value); - if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) { - return value; - } - var ctor = ctorByClass[className]; - switch (className) { - case boolClass: - case dateClass: - return new ctor(+value); - - case numberClass: - case stringClass: - return new ctor(value); - - case regexpClass: - result = ctor(value.source, reFlags.exec(value)); - result.lastIndex = value.lastIndex; - return result; - } - } else { - return value; - } - var isArr = isArray(value); - if (isDeep) { - // check for circular references and return corresponding clone - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - result = isArr ? ctor(value.length) : {}; - } - else { - result = isArr ? slice(value) : assign({}, value); - } - // add array properties assigned by `RegExp#exec` - if (isArr) { - if (hasOwnProperty.call(value, 'index')) { - result.index = value.index; - } - if (hasOwnProperty.call(value, 'input')) { - result.input = value.input; - } - } - // exit for shallow clone - if (!isDeep) { - return result; - } - // add the source value to the stack of traversed objects - // and associate it with its clone - stackA.push(value); - stackB.push(result); - - // recursively populate clone (susceptible to call stack limits) - (isArr ? baseEach : forOwn)(value, function(objValue, key) { - result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); - }); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(prototype, properties) { - return isObject(prototype) ? nativeCreate(prototype) : {}; - } - // fallback for browsers without `Object.create` - if (!nativeCreate) { - baseCreate = (function() { - function Object() {} - return function(prototype) { - if (isObject(prototype)) { - Object.prototype = prototype; - var result = new Object; - Object.prototype = null; - } - return result || context.Object(); - }; - }()); - } - - /** - * The base implementation of `_.createCallback` without support for creating - * "_.pluck" or "_.where" style callbacks. - * - * @private - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - */ - function baseCreateCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - // exit early for no `thisArg` or already bound by `Function#bind` - if (typeof thisArg == 'undefined' || !('prototype' in func)) { - return func; - } - var bindData = func.__bindData__; - if (typeof bindData == 'undefined') { - if (support.funcNames) { - bindData = !func.name; - } - bindData = bindData || !support.funcDecomp; - if (!bindData) { - var source = fnToString.call(func); - if (!support.funcNames) { - bindData = !reFuncName.test(source); - } - if (!bindData) { - // checks if `func` references the `this` keyword and stores the result - bindData = reThis.test(source); - setBindData(func, bindData); - } - } - } - // exit early if there are no `this` references or `func` is bound - if (bindData === false || (bindData !== true && bindData[1] & 1)) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 2: return function(a, b) { - return func.call(thisArg, a, b); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - } - return bind(func, thisArg); - } - - /** - * The base implementation of `createWrapper` that creates the wrapper and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new function. - */ - function baseCreateWrapper(bindData) { - var func = bindData[0], - bitmask = bindData[1], - partialArgs = bindData[2], - partialRightArgs = bindData[3], - thisArg = bindData[4], - arity = bindData[5]; - - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - key = func; - - function bound() { - var thisBinding = isBind ? thisArg : this; - if (partialArgs) { - var args = slice(partialArgs); - push.apply(args, arguments); - } - if (partialRightArgs || isCurry) { - args || (args = slice(arguments)); - if (partialRightArgs) { - push.apply(args, partialRightArgs); - } - if (isCurry && args.length < arity) { - bitmask |= 16 & ~32; - return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); - } - } - args || (args = arguments); - if (isBindKey) { - func = thisBinding[key]; - } - if (this instanceof bound) { - thisBinding = baseCreate(func.prototype); - var result = func.apply(thisBinding, args); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisBinding, args); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.difference` that accepts a single array - * of values to exclude. - * - * @private - * @param {Array} array The array to process. - * @param {Array} [values] The array of values to exclude. - * @returns {Array} Returns a new array of filtered values. - */ - function baseDifference(array, values) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - isLarge = length >= largeArraySize && indexOf === baseIndexOf, - result = []; - - if (isLarge) { - var cache = createCache(values); - if (cache) { - indexOf = cacheIndexOf; - values = cache; - } else { - isLarge = false; - } - } - while (++index < length) { - var value = array[index]; - if (indexOf(values, value) < 0) { - result.push(value); - } - } - if (isLarge) { - releaseObject(values); - } - return result; - } - - /** - * The base implementation of `_.flatten` without support for callback - * shorthands or `thisArg` binding. - * - * @private - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. - * @param {number} [fromIndex=0] The index to start from. - * @returns {Array} Returns a new flattened array. - */ - function baseFlatten(array, isShallow, isStrict, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - - if (value && typeof value == 'object' && typeof value.length == 'number' - && (isArray(value) || isArguments(value))) { - // recursively flatten arrays (susceptible to call stack limits) - if (!isShallow) { - value = baseFlatten(value, isShallow, isStrict); - } - var valIndex = -1, - valLength = value.length, - resIndex = result.length; - - result.length += valLength; - while (++valIndex < valLength) { - result[resIndex++] = value[valIndex]; - } - } else if (!isStrict) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.isEqual`, without support for `thisArg` binding, - * that allows partial "_.where" style comparisons. - * - * @private - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. - * @param {Array} [stackA=[]] Tracks traversed `a` objects. - * @param {Array} [stackB=[]] Tracks traversed `b` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { - // used to indicate that when comparing objects, `a` has at least the properties of `b` - if (callback) { - var result = callback(a, b); - if (typeof result != 'undefined') { - return !!result; - } - } - // exit early for identical values - if (a === b) { - // treat `+0` vs. `-0` as not equal - return a !== 0 || (1 / a == 1 / b); - } - var type = typeof a, - otherType = typeof b; - - // exit early for unlike primitive values - if (a === a && - !(a && objectTypes[type]) && - !(b && objectTypes[otherType])) { - return false; - } - // exit early for `null` and `undefined` avoiding ES3's Function#call behavior - // http://es5.github.io/#x15.3.4.4 - if (a == null || b == null) { - return a === b; - } - // compare [[Class]] names - var className = toString.call(a), - otherClass = toString.call(b); - - if (className == argsClass) { - className = objectClass; - } - if (otherClass == argsClass) { - otherClass = objectClass; - } - if (className != otherClass) { - return false; - } - switch (className) { - case boolClass: - case dateClass: - // coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal - return +a == +b; - - case numberClass: - // treat `NaN` vs. `NaN` as equal - return (a != +a) - ? b != +b - // but treat `+0` vs. `-0` as not equal - : (a == 0 ? (1 / a == 1 / b) : a == +b); - - case regexpClass: - case stringClass: - // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) - // treat string primitives and their corresponding object instances as equal - return a == String(b); - } - var isArr = className == arrayClass; - if (!isArr) { - // unwrap any `lodash` wrapped values - var aWrapped = hasOwnProperty.call(a, '__wrapped__'), - bWrapped = hasOwnProperty.call(b, '__wrapped__'); - - if (aWrapped || bWrapped) { - return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); - } - // exit for functions and DOM nodes - if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) { - return false; - } - // in older versions of Opera, `arguments` objects have `Array` constructors - var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor, - ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor; - - // non `Object` object instances with different constructors are not equal - if (ctorA != ctorB && - !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && - ('constructor' in a && 'constructor' in b) - ) { - return false; - } - } - // assume cyclic structures are equal - // the algorithm for detecting cyclic structures is adapted from ES 5.1 - // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == a) { - return stackB[length] == b; - } - } - var size = 0; - result = true; - - // add `a` and `b` to the stack of traversed objects - stackA.push(a); - stackB.push(b); - - // recursively compare objects and arrays (susceptible to call stack limits) - if (isArr) { - // compare lengths to determine if a deep comparison is necessary - length = a.length; - size = b.length; - result = size == length; - - if (result || isWhere) { - // deep compare the contents, ignoring non-numeric properties - while (size--) { - var index = length, - value = b[size]; - - if (isWhere) { - while (index--) { - if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } - } - else { - // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` - // which, in this case, is more costly - forIn(b, function(value, key, b) { - if (hasOwnProperty.call(b, key)) { - // count the number of properties. - size++; - // deep compare each property value. - return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); - } - }); - - if (result && !isWhere) { - // ensure both objects have the same number of properties - forIn(a, function(value, key, a) { - if (hasOwnProperty.call(a, key)) { - // `size` will be `-1` if `a` has more properties than `b` - return (result = --size > -1); - } - }); - } - } - stackA.pop(); - stackB.pop(); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.merge` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} [callback] The function to customize merging properties. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. - */ - function baseMerge(object, source, callback, stackA, stackB) { - (isArray(source) ? forEach : forOwn)(source, function(source, key) { - var found, - isArr, - result = source, - value = object[key]; - - if (source && ((isArr = isArray(source)) || isPlainObject(source))) { - // avoid merging previously merged cyclic sources - var stackLength = stackA.length; - while (stackLength--) { - if ((found = stackA[stackLength] == source)) { - value = stackB[stackLength]; - break; - } - } - if (!found) { - var isShallow; - if (callback) { - result = callback(value, source); - if ((isShallow = typeof result != 'undefined')) { - value = result; - } - } - if (!isShallow) { - value = isArr - ? (isArray(value) ? value : []) - : (isPlainObject(value) ? value : {}); - } - // add `source` and associated `value` to the stack of traversed objects - stackA.push(source); - stackB.push(value); - - // recursively merge objects and arrays (susceptible to call stack limits) - if (!isShallow) { - baseMerge(value, source, callback, stackA, stackB); - } - } - } - else { - if (callback) { - result = callback(value, source); - if (typeof result == 'undefined') { - result = source; - } - } - if (typeof result != 'undefined') { - value = result; - } - } - object[key] = value; - }); - } - - /** - * The base implementation of `_.random` without argument juggling or support - * for returning floating-point numbers. - * - * @private - * @param {number} min The minimum possible value. - * @param {number} max The maximum possible value. - * @returns {number} Returns a random number. - */ - function baseRandom(min, max) { - return min + floor(nativeRandom() * (max - min + 1)); - } - - /** - * The base implementation of `_.uniq` without support for callback shorthands - * or `thisArg` binding. - * - * @private - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function} [callback] The function called per iteration. - * @returns {Array} Returns a duplicate-value-free array. - */ - function baseUniq(array, isSorted, callback) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - result = []; - - var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, - seen = (callback || isLarge) ? getArray() : result; - - if (isLarge) { - var cache = createCache(seen); - indexOf = cacheIndexOf; - seen = cache; - } - while (++index < length) { - var value = array[index], - computed = callback ? callback(value, index, array) : value; - - if (isSorted - ? !index || seen[seen.length - 1] !== computed - : indexOf(seen, computed) < 0 - ) { - if (callback || isLarge) { - seen.push(computed); - } - result.push(value); - } - } - if (isLarge) { - releaseArray(seen.array); - releaseObject(seen); - } else if (callback) { - releaseArray(seen); - } - return result; - } - - /** - * Creates a function that aggregates a collection, creating an object composed - * of keys generated from the results of running each element of the collection - * through a callback. The given `setter` function sets the keys and values - * of the composed object. - * - * @private - * @param {Function} setter The setter function. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter) { - return function(collection, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - setter(result, value, callback(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, callback(value, key, collection), collection); - }); - } - return result; - }; - } - - /** - * Creates a function that, when called, either curries or invokes `func` - * with an optional `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of method flags to compose. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` - * 8 - `_.curry` (bound) - * 16 - `_.partial` - * 32 - `_.partialRight` - * @param {Array} [partialArgs] An array of arguments to prepend to those - * provided to the new function. - * @param {Array} [partialRightArgs] An array of arguments to append to those - * provided to the new function. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new function. - */ - function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - isPartial = bitmask & 16, - isPartialRight = bitmask & 32; - - if (!isBindKey && !isFunction(func)) { - throw new TypeError; - } - if (isPartial && !partialArgs.length) { - bitmask &= ~16; - isPartial = partialArgs = false; - } - if (isPartialRight && !partialRightArgs.length) { - bitmask &= ~32; - isPartialRight = partialRightArgs = false; - } - var bindData = func && func.__bindData__; - if (bindData && bindData !== true) { - // clone `bindData` - bindData = slice(bindData); - if (bindData[2]) { - bindData[2] = slice(bindData[2]); - } - if (bindData[3]) { - bindData[3] = slice(bindData[3]); - } - // set `thisBinding` is not previously bound - if (isBind && !(bindData[1] & 1)) { - bindData[4] = thisArg; - } - // set if previously bound but not currently (subsequent curried functions) - if (!isBind && bindData[1] & 1) { - bitmask |= 8; - } - // set curried arity if not yet set - if (isCurry && !(bindData[1] & 4)) { - bindData[5] = arity; - } - // append partial left arguments - if (isPartial) { - push.apply(bindData[2] || (bindData[2] = []), partialArgs); - } - // append partial right arguments - if (isPartialRight) { - unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs); - } - // merge flags - bindData[1] |= bitmask; - return createWrapper.apply(null, bindData); - } - // fast path for `_.bind` - var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; - return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); - } - - /** - * Creates compiled iteration functions. - * - * @private - * @param {...Object} [options] The compile options object(s). - * @param {string} [options.array] Code to determine if the iterable is an array or array-like. - * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop. - * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration. - * @param {string} [options.args] A comma separated string of iteration function arguments. - * @param {string} [options.top] Code to execute before the iteration branches. - * @param {string} [options.loop] Code to execute in the object loop. - * @param {string} [options.bottom] Code to execute after the iteration branches. - * @returns {Function} Returns the compiled function. - */ - function createIterator() { - // data properties - iteratorData.shadowedProps = shadowedProps; - - // iterator options - iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = ''; - iteratorData.init = 'iterable'; - iteratorData.useHas = true; - - // merge options into a template data object - for (var object, index = 0; object = arguments[index]; index++) { - for (var key in object) { - iteratorData[key] = object[key]; - } - } - var args = iteratorData.args; - iteratorData.firstArg = /^[^,]+/.exec(args)[0]; - - // create the function factory - var factory = Function( - 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + - 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + - 'objectTypes, nonEnumProps, stringClass, stringProto, toString', - 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}' - ); - - // return the compiled function - return factory( - baseCreateCallback, errorClass, errorProto, hasOwnProperty, - indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto, - objectTypes, nonEnumProps, stringClass, stringProto, toString - ); - } - - /** - * Used by `escape` to convert characters to HTML entities. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(match) { - return htmlEscapes[match]; - } - - /** - * Gets the appropriate "indexOf" function. If the `_.indexOf` method is - * customized, this method returns the custom method, otherwise it returns - * the `baseIndexOf` function. - * - * @private - * @returns {Function} Returns the "indexOf" function. - */ - function getIndexOf() { - var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; - return result; - } - - /** - * Checks if `value` is a native function. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. - */ - function isNative(value) { - return typeof value == 'function' && reNative.test(value); - } - - /** - * Sets `this` binding data on a given function. - * - * @private - * @param {Function} func The function to set data on. - * @param {Array} value The data array to set. - */ - var setBindData = !defineProperty ? noop : function(func, value) { - descriptor.value = value; - defineProperty(func, '__bindData__', descriptor); - descriptor.value = null; - }; - - /** - * A fallback implementation of `isPlainObject` which checks if a given value - * is an object created by the `Object` constructor, assuming objects created - * by the `Object` constructor have no inherited enumerable properties and that - * there are no `Object.prototype` extensions. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - */ - function shimIsPlainObject(value) { - var ctor, - result; - - // avoid non Object objects, `arguments` objects, and DOM elements - if (!(value && toString.call(value) == objectClass) || - (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) || - (!support.argsClass && isArguments(value)) || - (!support.nodeClass && isNode(value))) { - return false; - } - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - if (support.ownLast) { - forIn(value, function(value, key, object) { - result = hasOwnProperty.call(object, key); - return false; - }); - return result !== false; - } - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - forIn(value, function(value, key) { - result = key; - }); - return typeof result == 'undefined' || hasOwnProperty.call(value, result); - } - - /** - * Used by `unescape` to convert HTML entities to characters. - * - * @private - * @param {string} match The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(match) { - return htmlUnescapes[match]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if `value` is an `arguments` object. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. - * @example - * - * (function() { return _.isArguments(arguments); })(1, 2, 3); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == argsClass || false; - } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (!support.argsClass) { - isArguments = function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false; - }; - } - - /** - * Checks if `value` is an array. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an array, else `false`. - * @example - * - * (function() { return _.isArray(arguments); })(); - * // => false - * - * _.isArray([1, 2, 3]); - * // => true - */ - var isArray = nativeIsArray || function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == arrayClass || false; - }; - - /** - * A fallback implementation of `Object.keys` which produces an array of the - * given object's own enumerable property names. - * - * @private - * @type Function - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - */ - var shimKeys = createIterator({ - 'args': 'object', - 'init': '[]', - 'top': 'if (!(objectTypes[typeof object])) return result', - 'loop': 'result.push(index)' - }); - - /** - * Creates an array composed of the own enumerable property names of an object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - * @example - * - * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); - * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) - */ - var keys = !nativeKeys ? shimKeys : function(object) { - if (!isObject(object)) { - return []; - } - if ((support.enumPrototypes && typeof object == 'function') || - (support.nonEnumArgs && object.length && isArguments(object))) { - return shimKeys(object); - } - return nativeKeys(object); - }; - - /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ - var eachIteratorOptions = { - 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)", - 'array': "typeof length == 'number'", - 'keys': keys, - 'loop': 'if (callback(iterable[index], index, collection) === false) return result' - }; - - /** Reusable iterator options for `assign` and `defaults` */ - var defaultsIteratorOptions = { - 'args': 'object, source, guard', - 'top': - 'var args = arguments,\n' + - ' argsIndex = 0,\n' + - " argsLength = typeof guard == 'number' ? 2 : args.length;\n" + - 'while (++argsIndex < argsLength) {\n' + - ' iterable = args[argsIndex];\n' + - ' if (iterable && objectTypes[typeof iterable]) {', - 'keys': keys, - 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]", - 'bottom': ' }\n}' - }; - - /** Reusable iterator options for `forIn` and `forOwn` */ - var forOwnIteratorOptions = { - 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top, - 'array': false - }; - - /** - * Used to convert characters to HTML entities: - * - * Though the `>` character is escaped for symmetry, characters like `>` and `/` - * don't require escaping in HTML and have no special meaning unless they're part - * of a tag or an unquoted attribute value. - * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") - */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to convert HTML entities to characters */ - var htmlUnescapes = invert(htmlEscapes); - - /** Used to match HTML entities and HTML characters */ - var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'), - reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); - - /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the callback for each - * element in the collection. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @private - * @type Function - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - */ - var baseEach = createIterator(eachIteratorOptions); - - /*--------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources will overwrite property assignments of previous - * sources. If a callback is provided it will be executed to produce the - * assigned values. The callback is bound to `thisArg` and invoked with two - * arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @type Function - * @alias extend - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize assigning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); - * // => { 'name': 'fred', 'employer': 'slate' } - * - * var defaults = _.partialRight(_.assign, function(a, b) { - * return typeof a == 'undefined' ? b : a; - * }); - * - * var object = { 'name': 'barney' }; - * defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var assign = createIterator(defaultsIteratorOptions, { - 'top': - defaultsIteratorOptions.top.replace(';', - ';\n' + - "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" + - ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' + - "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" + - ' callback = args[--argsLength];\n' + - '}' - ), - 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]' - }); - - /** - * Creates a clone of `value`. If `isDeep` is `true` nested objects will also - * be cloned, otherwise they will be assigned by reference. If a callback - * is provided it will be executed to produce the cloned values. If the - * callback returns `undefined` cloning will be handled by the method instead. - * The callback is bound to `thisArg` and invoked with one argument; (value). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var shallow = _.clone(characters); - * shallow[0] === characters[0]; - * // => true - * - * var deep = _.clone(characters, true); - * deep[0] === characters[0]; - * // => false - * - * _.mixin({ - * 'clone': _.partialRight(_.clone, function(value) { - * return _.isElement(value) ? value.cloneNode(false) : undefined; - * }) - * }); - * - * var clone = _.clone(document.body); - * clone.childNodes.length; - * // => 0 - */ - function clone(value, isDeep, callback, thisArg) { - // allows working with "Collections" methods without using their `index` - // and `collection` arguments for `isDeep` and `callback` - if (typeof isDeep != 'boolean' && isDeep != null) { - thisArg = callback; - callback = isDeep; - isDeep = false; - } - return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates a deep clone of `value`. If a callback is provided it will be - * executed to produce the cloned values. If the callback returns `undefined` - * cloning will be handled by the method instead. The callback is bound to - * `thisArg` and invoked with one argument; (value). - * - * Note: This method is loosely based on the structured clone algorithm. Functions - * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and - * objects created by constructors other than `Object` are cloned to plain `Object` objects. - * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var deep = _.cloneDeep(characters); - * deep[0] === characters[0]; - * // => false - * - * var view = { - * 'label': 'docs', - * 'node': element - * }; - * - * var clone = _.cloneDeep(view, function(value) { - * return _.isElement(value) ? value.cloneNode(true) : undefined; - * }); - * - * clone.node == view.node; - * // => false - */ - function cloneDeep(value, callback, thisArg) { - return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates an object that inherits from the given `prototype` object. If a - * `properties` object is provided its own enumerable properties are assigned - * to the created object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object for all destination properties that resolve to `undefined`. Once a - * property is set, additional defaults of the same property will be ignored. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param- {Object} [guard] Allows working with `_.reduce` without using its - * `key` and `object` arguments as sources. - * @returns {Object} Returns the destination object. - * @example - * - * var object = { 'name': 'barney' }; - * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var defaults = createIterator(defaultsIteratorOptions); - - /** - * This method is like `_.findIndex` except that it returns the key of the - * first element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': false }, - * 'fred': { 'age': 40, 'blocked': true }, - * 'pebbles': { 'age': 1, 'blocked': false } - * }; - * - * _.findKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => 'barney' (property order is not guaranteed across environments) - * - * // using "_.where" callback shorthand - * _.findKey(characters, { 'age': 1 }); - * // => 'pebbles' - * - * // using "_.pluck" callback shorthand - * _.findKey(characters, 'blocked'); - * // => 'fred' - */ - function findKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwn(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * This method is like `_.findKey` except that it iterates over elements - * of a `collection` in the opposite order. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': true }, - * 'fred': { 'age': 40, 'blocked': false }, - * 'pebbles': { 'age': 1, 'blocked': true } - * }; - * - * _.findLastKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => returns `pebbles`, assuming `_.findKey` returns `barney` - * - * // using "_.where" callback shorthand - * _.findLastKey(characters, { 'age': 40 }); - * // => 'fred' - * - * // using "_.pluck" callback shorthand - * _.findLastKey(characters, 'blocked'); - * // => 'pebbles' - */ - function findLastKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwnRight(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * Iterates over own and inherited enumerable properties of an object, - * executing the callback for each property. The callback is bound to `thisArg` - * and invoked with three arguments; (value, key, object). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forIn(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) - */ - var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, { - 'useHas': false - }); - - /** - * This method is like `_.forIn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forInRight(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move' - */ - function forInRight(object, callback, thisArg) { - var pairs = []; - - forIn(object, function(value, key) { - pairs.push(key, value); - }); - - var length = pairs.length; - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - if (callback(pairs[length--], pairs[length], object) === false) { - break; - } - } - return object; - } - - /** - * Iterates over own enumerable properties of an object, executing the callback - * for each property. The callback is bound to `thisArg` and invoked with three - * arguments; (value, key, object). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) - */ - var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions); - - /** - * This method is like `_.forOwn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length' - */ - function forOwnRight(object, callback, thisArg) { - var props = keys(object), - length = props.length; - - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - var key = props[length]; - if (callback(object[key], key, object) === false) { - break; - } - } - return object; - } - - /** - * Creates a sorted array of property names of all enumerable properties, - * own and inherited, of `object` that have function values. - * - * @static - * @memberOf _ - * @alias methods - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names that have function values. - * @example - * - * _.functions(_); - * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] - */ - function functions(object) { - var result = []; - forIn(object, function(value, key) { - if (isFunction(value)) { - result.push(key); - } - }); - return result.sort(); - } - - /** - * Checks if the specified property name exists as a direct property of `object`, - * instead of an inherited property. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to check. - * @returns {boolean} Returns `true` if key is a direct property, else `false`. - * @example - * - * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); - * // => true - */ - function has(object, key) { - return object ? hasOwnProperty.call(object, key) : false; - } - - /** - * Creates an object composed of the inverted keys and values of the given object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to invert. - * @returns {Object} Returns the created inverted object. - * @example - * - * _.invert({ 'first': 'fred', 'second': 'barney' }); - * // => { 'fred': 'first', 'barney': 'second' } - */ - function invert(object) { - var index = -1, - props = keys(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index]; - result[object[key]] = key; - } - return result; - } - - /** - * Checks if `value` is a boolean value. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`. - * @example - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - value && typeof value == 'object' && toString.call(value) == boolClass || false; - } - - /** - * Checks if `value` is a date. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a date, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - */ - function isDate(value) { - return value && typeof value == 'object' && toString.call(value) == dateClass || false; - } - - /** - * Checks if `value` is a DOM element. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - */ - function isElement(value) { - return value && value.nodeType === 1 || false; - } - - /** - * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a - * length of `0` and objects with no own enumerable properties are considered - * "empty". - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if the `value` is empty, else `false`. - * @example - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({}); - * // => true - * - * _.isEmpty(''); - * // => true - */ - function isEmpty(value) { - var result = true; - if (!value) { - return result; - } - var className = toString.call(value), - length = value.length; - - if ((className == arrayClass || className == stringClass || - (support.argsClass ? className == argsClass : isArguments(value))) || - (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { - return !length; - } - forOwn(value, function() { - return (result = false); - }); - return result; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent to each other. If a callback is provided it will be executed - * to compare values. If the callback returns `undefined` comparisons will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (a, b). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'name': 'fred' }; - * var copy = { 'name': 'fred' }; - * - * object == copy; - * // => false - * - * _.isEqual(object, copy); - * // => true - * - * var words = ['hello', 'goodbye']; - * var otherWords = ['hi', 'goodbye']; - * - * _.isEqual(words, otherWords, function(a, b) { - * var reGreet = /^(?:hello|hi)$/i, - * aGreet = _.isString(a) && reGreet.test(a), - * bGreet = _.isString(b) && reGreet.test(b); - * - * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; - * }); - * // => true - */ - function isEqual(a, b, callback, thisArg) { - return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); - } - - /** - * Checks if `value` is, or can be coerced to, a finite number. - * - * Note: This is not the same as native `isFinite` which will return true for - * booleans and empty strings. See http://es5.github.io/#x15.1.2.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is finite, else `false`. - * @example - * - * _.isFinite(-101); - * // => true - * - * _.isFinite('10'); - * // => true - * - * _.isFinite(true); - * // => false - * - * _.isFinite(''); - * // => false - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); - } - - /** - * Checks if `value` is a function. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - */ - function isFunction(value) { - return typeof value == 'function'; - } - // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value == 'function' && toString.call(value) == funcClass; - }; - } - - /** - * Checks if `value` is the language type of Object. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ - function isObject(value) { - // check if the value is the ECMAScript language type of Object - // http://es5.github.io/#x8 - // and avoid a V8 bug - // http://code.google.com/p/v8/issues/detail?id=2291 - return !!(value && objectTypes[typeof value]); - } - - /** - * Checks if `value` is `NaN`. - * - * Note: This is not the same as native `isNaN` which will return `true` for - * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // `NaN` as a primitive is the only value that is not equal to itself - // (perform the [[Class]] check first to avoid errors with some host objects in IE) - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(undefined); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is a number. - * - * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a number, else `false`. - * @example - * - * _.isNumber(8.4 * 5); - * // => true - */ - function isNumber(value) { - return typeof value == 'number' || - value && typeof value == 'object' && toString.call(value) == numberClass || false; - } - - /** - * Checks if `value` is an object created by the `Object` constructor. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * _.isPlainObject(new Shape); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - */ - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) { - return false; - } - var valueOf = value.valueOf, - objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? (value == objProto || getPrototypeOf(value) == objProto) - : shimIsPlainObject(value); - }; - - /** - * Checks if `value` is a regular expression. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`. - * @example - * - * _.isRegExp(/fred/); - * // => true - */ - function isRegExp(value) { - return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false; - } - - /** - * Checks if `value` is a string. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a string, else `false`. - * @example - * - * _.isString('fred'); - * // => true - */ - function isString(value) { - return typeof value == 'string' || - value && typeof value == 'object' && toString.call(value) == stringClass || false; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - */ - function isUndefined(value) { - return typeof value == 'undefined'; - } - - /** - * Creates an object with the same keys as `object` and values generated by - * running each own enumerable property of `object` through the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new object with values of the results of each `callback` execution. - * @example - * - * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - * - * var characters = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // using "_.pluck" callback shorthand - * _.mapValues(characters, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } - */ - function mapValues(object, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - forOwn(object, function(value, key, object) { - result[key] = callback(value, key, object); - }); - return result; - } - - /** - * Recursively merges own enumerable properties of the source object(s), that - * don't resolve to `undefined` into the destination object. Subsequent sources - * will overwrite property assignments of previous sources. If a callback is - * provided it will be executed to produce the merged values of the destination - * and source properties. If the callback returns `undefined` merging will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize merging properties. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * var names = { - * 'characters': [ - * { 'name': 'barney' }, - * { 'name': 'fred' } - * ] - * }; - * - * var ages = { - * 'characters': [ - * { 'age': 36 }, - * { 'age': 40 } - * ] - * }; - * - * _.merge(names, ages); - * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } - * - * var food = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var otherFood = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.merge(food, otherFood, function(a, b) { - * return _.isArray(a) ? a.concat(b) : undefined; - * }); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } - */ - function merge(object) { - var args = arguments, - length = 2; - - if (!isObject(object)) { - return object; - } - // allows working with `_.reduce` and `_.reduceRight` without using - // their `index` and `collection` arguments - if (typeof args[2] != 'number') { - length = args.length; - } - if (length > 3 && typeof args[length - 2] == 'function') { - var callback = baseCreateCallback(args[--length - 1], args[length--], 2); - } else if (length > 2 && typeof args[length - 1] == 'function') { - callback = args[--length]; - } - var sources = slice(arguments, 1, length), - index = -1, - stackA = getArray(), - stackB = getArray(); - - while (++index < length) { - baseMerge(object, sources[index], callback, stackA, stackB); - } - releaseArray(stackA); - releaseArray(stackB); - return object; - } - - /** - * Creates a shallow clone of `object` excluding the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` omitting the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The properties to omit or the - * function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object without the omitted properties. - * @example - * - * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); - * // => { 'name': 'fred' } - * - * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { - * return typeof value == 'number'; - * }); - * // => { 'name': 'fred' } - */ - function omit(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var props = []; - forIn(object, function(value, key) { - props.push(key); - }); - props = baseDifference(props, baseFlatten(arguments, true, false, 1)); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - result[key] = object[key]; - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (!callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * Creates a two dimensional array of an object's key-value pairs, - * i.e. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns new array of key-value pairs. - * @example - * - * _.pairs({ 'barney': 36, 'fred': 40 }); - * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) - */ - function pairs(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; - } - return result; - } - - /** - * Creates a shallow clone of `object` composed of the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` picking the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The function called per - * iteration or property names to pick, specified as individual property - * names or arrays of property names. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object composed of the picked properties. - * @example - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name'); - * // => { 'name': 'fred' } - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) { - * return key.charAt(0) != '_'; - * }); - * // => { 'name': 'fred' } - */ - function pick(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var index = -1, - props = baseFlatten(arguments, true, false, 1), - length = isObject(object) ? props.length : 0; - - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * An alternative to `_.reduce` this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable properties through a callback, with each callback execution - * potentially mutating the `accumulator` object. The callback is bound to - * `thisArg` and invoked with four arguments; (accumulator, value, key, object). - * Callbacks may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) { - * num *= num; - * if (num % 2) { - * return result.push(num) < 3; - * } - * }); - * // => [1, 9, 25] - * - * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function transform(object, callback, accumulator, thisArg) { - var isArr = isArray(object); - if (accumulator == null) { - if (isArr) { - accumulator = []; - } else { - var ctor = object && object.constructor, - proto = ctor && ctor.prototype; - - accumulator = baseCreate(proto); - } - } - if (callback) { - callback = lodash.createCallback(callback, thisArg, 4); - (isArr ? baseEach : forOwn)(object, function(value, index, object) { - return callback(accumulator, value, index, object); - }); - } - return accumulator; - } - - /** - * Creates an array composed of the own enumerable property values of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property values. - * @example - * - * _.values({ 'one': 1, 'two': 2, 'three': 3 }); - * // => [1, 2, 3] (property order is not guaranteed across environments) - */ - function values(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array of elements from the specified indexes, or keys, of the - * `collection`. Indexes may be specified as individual arguments or as arrays - * of indexes. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {...(number|number[]|string|string[])} [index] The indexes of `collection` - * to retrieve, specified as individual indexes or arrays of indexes. - * @returns {Array} Returns a new array of elements corresponding to the - * provided indexes. - * @example - * - * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]); - * // => ['a', 'c', 'e'] - * - * _.at(['fred', 'barney', 'pebbles'], 0, 2); - * // => ['fred', 'pebbles'] - */ - function at(collection) { - var args = arguments, - index = -1, - props = baseFlatten(args, true, false, 1), - length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length, - result = Array(length); - - if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - while(++index < length) { - result[index] = collection[props[index]]; - } - return result; - } - - /** - * Checks if a given value is present in a collection using strict equality - * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the - * offset from the end of the collection. - * - * @static - * @memberOf _ - * @alias include - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {*} target The value to check for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {boolean} Returns `true` if the `target` element is found, else `false`. - * @example - * - * _.contains([1, 2, 3], 1); - * // => true - * - * _.contains([1, 2, 3], 1, 2); - * // => false - * - * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.contains('pebbles', 'eb'); - * // => true - */ - function contains(collection, target, fromIndex) { - var index = -1, - indexOf = getIndexOf(), - length = collection ? collection.length : 0, - result = false; - - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; - if (isArray(collection)) { - result = indexOf(collection, target, fromIndex) > -1; - } else if (typeof length == 'number') { - result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; - } else { - baseEach(collection, function(value) { - if (++index >= fromIndex) { - return !(result = value === target); - } - }); - } - return result; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through the callback. The corresponding value - * of each key is the number of times the key was returned by the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': 1, '6': 2 } - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); - }); - - /** - * Checks if the given callback returns truey value for **all** elements of - * a collection. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias all - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if all elements passed the callback check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes']); - * // => false - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.every(characters, 'age'); - * // => true - * - * // using "_.where" callback shorthand - * _.every(characters, { 'age': 36 }); - * // => false - */ - function every(collection, callback, thisArg) { - var result = true; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (!(result = !!callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning an array of all elements - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias select - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that passed the callback check. - * @example - * - * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [2, 4, 6] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.filter(characters, 'blocked'); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - * - * // using "_.where" callback shorthand - * _.filter(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - */ - function filter(collection, callback, thisArg) { - var result = []; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - result.push(value); - } - } - } else { - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result.push(value); - } - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning the first element that - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias detect, findWhere - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.find(characters, function(chr) { - * return chr.age < 40; - * }); - * // => { 'name': 'barney', 'age': 36, 'blocked': false } - * - * // using "_.where" callback shorthand - * _.find(characters, { 'age': 1 }); - * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } - * - * // using "_.pluck" callback shorthand - * _.find(characters, 'blocked'); - * // => { 'name': 'fred', 'age': 40, 'blocked': true } - */ - function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - return value; - } - } - } else { - var result; - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - } - - /** - * This method is like `_.find` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(num) { - * return num % 2 == 1; - * }); - * // => 3 - */ - function findLast(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forEachRight(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - - /** - * Iterates over elements of a collection, executing the callback for each - * element. The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * Note: As with other "Collections" methods, objects with a `length` property - * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` - * may be used for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); - * // => logs each number and returns '1,2,3' - * - * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); - * // => logs each number and returns the object (property order is not guaranteed across environments) - */ - function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (callback(collection[index], index, collection) === false) { - break; - } - } - } else { - baseEach(collection, callback, thisArg); - } - return collection; - } - - /** - * This method is like `_.forEach` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias eachRight - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(','); - * // => logs each number from right to left and returns '3,2,1' - */ - function forEachRight(collection, callback, thisArg) { - var iterable = collection, - length = collection ? collection.length : 0; - - callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (length--) { - if (callback(collection[length], length, collection) === false) { - break; - } - } - } else { - if (typeof length != 'number') { - var props = keys(collection); - length = props.length; - } else if (support.unindexedChars && isString(collection)) { - iterable = collection.split(''); - } - baseEach(collection, function(value, key, collection) { - key = props ? props[--length] : --length; - return callback(iterable[key], key, collection); - }); - } - return collection; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of a collection through the callback. The corresponding value - * of each key is an array of the elements responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false` - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * // using "_.pluck" callback shorthand - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of the collection through the given callback. The corresponding - * value of each key is the last element responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var keys = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.indexBy(keys, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - */ - var indexBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Invokes the method named by `methodName` on each element in the `collection` - * returning an array of the results of each invoked method. Additional arguments - * will be provided to each invoked method. If `methodName` is a function it - * will be invoked for, and `this` bound to, each element in the `collection`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|string} methodName The name of the method to invoke or - * the function invoked per iteration. - * @param {...*} [arg] Arguments to invoke the method with. - * @returns {Array} Returns a new array of the results of each invoked method. - * @example - * - * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invoke([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - function invoke(collection, methodName) { - var args = slice(arguments, 2), - index = -1, - isFunc = typeof methodName == 'function', - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args); - }); - return result; - } - - /** - * Creates an array of values by running each element in the collection - * through the callback. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias collect - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of the results of each `callback` execution. - * @example - * - * _.map([1, 2, 3], function(num) { return num * 3; }); - * // => [3, 6, 9] - * - * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); - * // => [3, 6, 9] (property order is not guaranteed across environments) - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(characters, 'name'); - * // => ['barney', 'fred'] - */ - function map(collection, callback, thisArg) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - callback = lodash.createCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (++index < length) { - result[index] = callback(collection[index], index, collection); - } - } else { - baseEach(collection, function(value, key, collection) { - result[++index] = callback(value, key, collection); - }); - } - return result; - } - - /** - * Retrieves the maximum value of a collection. If the collection is empty or - * falsey `-Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.max(characters, function(chr) { return chr.age; }); - * // => { 'name': 'fred', 'age': 40 }; - * - * // using "_.pluck" callback shorthand - * _.max(characters, 'age'); - * // => { 'name': 'fred', 'age': 40 }; - */ - function max(collection, callback, thisArg) { - var computed = -Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value > result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current > computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the minimum value of a collection. If the collection is empty or - * falsey `Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.min(characters, function(chr) { return chr.age; }); - * // => { 'name': 'barney', 'age': 36 }; - * - * // using "_.pluck" callback shorthand - * _.min(characters, 'age'); - * // => { 'name': 'barney', 'age': 36 }; - */ - function min(collection, callback, thisArg) { - var computed = Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value < result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current < computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the value of a specified property from all elements in the collection. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {string} property The name of the property to pluck. - * @returns {Array} Returns a new array of property values. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.pluck(characters, 'name'); - * // => ['barney', 'fred'] - */ - var pluck = map; - - /** - * Reduces a collection to a value which is the accumulated result of running - * each element in the collection through the callback, where each successive - * callback execution consumes the return value of the previous execution. If - * `accumulator` is not provided the first element of the collection will be - * used as the initial `accumulator` value. The callback is bound to `thisArg` - * and invoked with four arguments; (accumulator, value, index|key, collection). - * - * @static - * @memberOf _ - * @alias foldl, inject - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var sum = _.reduce([1, 2, 3], function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * return result; - * }, {}); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function reduce(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - if (noaccum) { - accumulator = collection[++index]; - } - while (++index < length) { - accumulator = callback(accumulator, collection[index], index, collection); - } - } else { - baseEach(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection) - }); - } - return accumulator; - } - - /** - * This method is like `_.reduce` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias foldr - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var list = [[0, 1], [2, 3], [4, 5]]; - * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - forEachRight(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The opposite of `_.filter` this method returns the elements of a - * collection that the callback does **not** return truey for. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that failed the callback check. - * @example - * - * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [1, 3, 5] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.reject(characters, 'blocked'); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - * - * // using "_.where" callback shorthand - * _.reject(characters, { 'age': 36 }); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - */ - function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - return filter(collection, function(value, index, collection) { - return !callback(value, index, collection); - }); - } - - /** - * Retrieves a random element or `n` random elements from a collection. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to sample. - * @param {number} [n] The number of elements to sample. - * @param- {Object} [guard] Allows working with functions like `_.map` - * without using their `index` arguments as `n`. - * @returns {Array} Returns the random sample(s) of `collection`. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - * - * _.sample([1, 2, 3, 4], 2); - * // => [3, 1] - */ - function sample(collection, n, guard) { - if (collection && typeof collection.length != 'number') { - collection = values(collection); - } else if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - if (n == null || guard) { - return collection ? collection[baseRandom(0, collection.length - 1)] : undefined; - } - var result = shuffle(collection); - result.length = nativeMin(nativeMax(0, n), result.length); - return result; - } - - /** - * Creates an array of shuffled values, using a version of the Fisher-Yates - * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to shuffle. - * @returns {Array} Returns a new shuffled collection. - * @example - * - * _.shuffle([1, 2, 3, 4, 5, 6]); - * // => [4, 1, 6, 3, 5, 2] - */ - function shuffle(collection) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - var rand = baseRandom(0, ++index); - result[index] = result[rand]; - result[rand] = value; - }); - return result; - } - - /** - * Gets the size of the `collection` by returning `collection.length` for arrays - * and array-like objects or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns `collection.length` or number of own enumerable properties. - * @example - * - * _.size([1, 2]); - * // => 2 - * - * _.size({ 'one': 1, 'two': 2, 'three': 3 }); - * // => 3 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - var length = collection ? collection.length : 0; - return typeof length == 'number' ? length : keys(collection).length; - } - - /** - * Checks if the callback returns a truey value for **any** element of a - * collection. The function returns as soon as it finds a passing value and - * does not iterate over the entire collection. The callback is bound to - * `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias any - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if any element passed the callback check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.some(characters, 'blocked'); - * // => true - * - * // using "_.where" callback shorthand - * _.some(characters, { 'age': 1 }); - * // => false - */ - function some(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if ((result = callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); - } - return !!result; - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection through the callback. This method - * performs a stable sort, that is, it will preserve the original sort order - * of equal elements. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an array of property names is provided for `callback` the collection - * will be sorted by each property value. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Array|Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of sorted elements. - * @example - * - * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); - * // => [3, 1, 2] - * - * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); - * // => [3, 1, 2] - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 26 }, - * { 'name': 'fred', 'age': 30 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(_.sortBy(characters, 'age'), _.values); - * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]] - * - * // sorting by multiple properties - * _.map(_.sortBy(characters, ['name', 'age']), _.values); - * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]] - */ - function sortBy(collection, callback, thisArg) { - var index = -1, - isArr = isArray(callback), - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - if (!isArr) { - callback = lodash.createCallback(callback, thisArg, 3); - } - forEach(collection, function(value, key, collection) { - var object = result[++index] = getObject(); - if (isArr) { - object.criteria = map(callback, function(key) { return value[key]; }); - } else { - (object.criteria = getArray())[0] = callback(value, key, collection); - } - object.index = index; - object.value = value; - }); - - length = result.length; - result.sort(compareAscending); - while (length--) { - var object = result[length]; - result[length] = object.value; - if (!isArr) { - releaseArray(object.criteria); - } - releaseObject(object); - } - return result; - } - - /** - * Converts the `collection` to an array. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to convert. - * @returns {Array} Returns the new converted array. - * @example - * - * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); - * // => [2, 3, 4] - */ - function toArray(collection) { - if (collection && typeof collection.length == 'number') { - return (support.unindexedChars && isString(collection)) - ? collection.split('') - : slice(collection); - } - return values(collection); - } - - /** - * Performs a deep comparison of each element in a `collection` to the given - * `properties` object, returning an array of all elements that have equivalent - * property values. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Object} props The object of property values to filter by. - * @returns {Array} Returns a new array of elements that have the given properties. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * _.where(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] - * - * _.where(characters, { 'pets': ['dino'] }); - * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }] - */ - var where = filter; - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are all falsey. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result.push(value); - } - } - return result; - } - - /** - * Creates an array excluding all values of the provided arrays using strict - * equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to process. - * @param {...Array} [values] The arrays of values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); - * // => [1, 3, 4] - */ - function difference(array) { - return baseDifference(array, baseFlatten(arguments, true, true, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.findIndex(characters, function(chr) { - * return chr.age < 20; - * }); - * // => 2 - * - * // using "_.where" callback shorthand - * _.findIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findIndex(characters, 'blocked'); - * // => 1 - */ - function findIndex(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - if (callback(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of a `collection` from right to left. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': true }, - * { 'name': 'fred', 'age': 40, 'blocked': false }, - * { 'name': 'pebbles', 'age': 1, 'blocked': true } - * ]; - * - * _.findLastIndex(characters, function(chr) { - * return chr.age > 30; - * }); - * // => 1 - * - * // using "_.where" callback shorthand - * _.findLastIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findLastIndex(characters, 'blocked'); - * // => 2 - */ - function findLastIndex(array, callback, thisArg) { - var length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg, 3); - while (length--) { - if (callback(array[length], length, array)) { - return length; - } - } - return -1; - } - - /** - * Gets the first element or first `n` elements of an array. If a callback - * is provided elements at the beginning of the array are returned as long - * as the callback returns truey. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias head, take - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the first element(s) of `array`. - * @example - * - * _.first([1, 2, 3]); - * // => 1 - * - * _.first([1, 2, 3], 2); - * // => [1, 2] - * - * _.first([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [1, 2] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.first(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); - * // => ['barney', 'fred'] - */ - function first(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = -1; - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[0] : undefined; - } - } - return slice(array, 0, nativeMin(nativeMax(0, n), length)); - } - - /** - * Flattens a nested array (the nesting can be to any depth). If `isShallow` - * is truey, the array will only be flattened a single level. If a callback - * is provided each element of the array is passed through the callback before - * flattening. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new flattened array. - * @example - * - * _.flatten([1, [2], [3, [[4]]]]); - * // => [1, 2, 3, 4]; - * - * _.flatten([1, [2], [3, [[4]]]], true); - * // => [1, 2, 3, [[4]]]; - * - * var characters = [ - * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * // using "_.pluck" callback shorthand - * _.flatten(characters, 'pets'); - * // => ['hoppy', 'baby puss', 'dino'] - */ - function flatten(array, isShallow, callback, thisArg) { - // juggle arguments - if (typeof isShallow != 'boolean' && isShallow != null) { - thisArg = callback; - callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; - isShallow = false; - } - if (callback != null) { - array = map(array, callback, thisArg); - } - return baseFlatten(array, isShallow); - } - - /** - * Gets the index at which the first occurrence of `value` is found using - * strict equality for comparisons, i.e. `===`. If the array is already sorted - * providing `true` for `fromIndex` will run a faster binary search. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=0] The index to search from or `true` - * to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2); - * // => 1 - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 4 - * - * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); - * // => 2 - */ - function indexOf(array, value, fromIndex) { - if (typeof fromIndex == 'number') { - var length = array ? array.length : 0; - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); - } else if (fromIndex) { - var index = sortedIndex(array, value); - return array[index] === value ? index : -1; - } - return baseIndexOf(array, value, fromIndex); - } - - /** - * Gets all but the last element or last `n` elements of an array. If a - * callback is provided elements at the end of the array are excluded from - * the result as long as the callback returns truey. The callback is bound - * to `thisArg` and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - * - * _.initial([1, 2, 3], 2); - * // => [1] - * - * _.initial([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [1] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.initial(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name'); - * // => ['barney', 'fred'] - */ - function initial(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : callback || n; - } - return slice(array, 0, nativeMin(nativeMax(0, length - n), length)); - } - - /** - * Creates an array of unique values present in all provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of shared values. - * @example - * - * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2] - */ - function intersection() { - var args = [], - argsIndex = -1, - argsLength = arguments.length, - caches = getArray(), - indexOf = getIndexOf(), - trustIndexOf = indexOf === baseIndexOf, - seen = getArray(); - - while (++argsIndex < argsLength) { - var value = arguments[argsIndex]; - if (isArray(value) || isArguments(value)) { - args.push(value); - caches.push(trustIndexOf && value.length >= largeArraySize && - createCache(argsIndex ? args[argsIndex] : seen)); - } - } - var array = args[0], - index = -1, - length = array ? array.length : 0, - result = []; - - outer: - while (++index < length) { - var cache = caches[0]; - value = array[index]; - - if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { - argsIndex = argsLength; - (cache || seen).push(value); - while (--argsIndex) { - cache = caches[argsIndex]; - if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { - continue outer; - } - } - result.push(value); - } - } - while (argsLength--) { - cache = caches[argsLength]; - if (cache) { - releaseObject(cache); - } - } - releaseArray(caches); - releaseArray(seen); - return result; - } - - /** - * Gets the last element or last `n` elements of an array. If a callback is - * provided elements at the end of the array are returned as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the last element(s) of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - * - * _.last([1, 2, 3], 2); - * // => [2, 3] - * - * _.last([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [2, 3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.last(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.last(characters, { 'employer': 'na' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function last(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[length - 1] : undefined; - } - } - return slice(array, nativeMax(0, length - n)); - } - - /** - * Gets the index at which the last occurrence of `value` is found using strict - * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used - * as the offset from the end of the collection. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); - * // => 4 - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var index = array ? array.length : 0; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Removes all provided values from the given array using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {...*} [value] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * _.pull(array, 2, 3); - * console.log(array); - * // => [1, 1] - */ - function pull(array) { - var args = arguments, - argsIndex = 0, - argsLength = args.length, - length = array ? array.length : 0; - - while (++argsIndex < argsLength) { - var index = -1, - value = args[argsIndex]; - while (++index < length) { - if (array[index] === value) { - splice.call(array, index--, 1); - length--; - } - } - } - return array; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to but not including `end`. If `start` is less than `stop` a - * zero-length range is created unless a negative `step` is specified. - * - * @static - * @memberOf _ - * @category Arrays - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns a new range array. - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - function range(start, end, step) { - start = +start || 0; - step = typeof step == 'number' ? step : (+step || 1); - - if (end == null) { - end = start; - start = 0; - } - // use `Array(length)` so engines like Chakra and V8 avoid slower modes - // http://youtu.be/XAqIpGU8ZZk#t=17m25s - var index = -1, - length = nativeMax(0, ceil((end - start) / (step || 1))), - result = Array(length); - - while (++index < length) { - result[index] = start; - start += step; - } - return result; - } - - /** - * Removes all elements from an array that the callback returns truey for - * and returns an array of removed elements. The callback is bound to `thisArg` - * and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4, 5, 6]; - * var evens = _.remove(array, function(num) { return num % 2 == 0; }); - * - * console.log(array); - * // => [1, 3, 5] - * - * console.log(evens); - * // => [2, 4, 6] - */ - function remove(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0, - result = []; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - var value = array[index]; - if (callback(value, index, array)) { - result.push(value); - splice.call(array, index--, 1); - length--; - } - } - return result; - } - - /** - * The opposite of `_.initial` this method gets all but the first element or - * first `n` elements of an array. If a callback function is provided elements - * at the beginning of the array are excluded from the result as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias drop, tail - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.rest([1, 2, 3]); - * // => [2, 3] - * - * _.rest([1, 2, 3], 2); - * // => [3] - * - * _.rest([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.rest(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.rest(characters, { 'employer': 'slate' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function rest(array, callback, thisArg) { - if (typeof callback != 'number' && callback != null) { - var n = 0, - index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : nativeMax(0, callback); - } - return slice(array, n); - } - - /** - * Uses a binary search to determine the smallest index at which a value - * should be inserted into a given sorted array in order to maintain the sort - * order of the array. If a callback is provided it will be executed for - * `value` and each element of `array` to compute their sort ranking. The - * callback is bound to `thisArg` and invoked with one argument; (value). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([20, 30, 50], 40); - * // => 2 - * - * // using "_.pluck" callback shorthand - * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 2 - * - * var dict = { - * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } - * }; - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return dict.wordToNumber[word]; - * }); - * // => 2 - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return this.wordToNumber[word]; - * }, dict); - * // => 2 - */ - function sortedIndex(array, value, callback, thisArg) { - var low = 0, - high = array ? array.length : low; - - // explicitly reference `identity` for better inlining in Firefox - callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; - value = callback(value); - - while (low < high) { - var mid = (low + high) >>> 1; - (callback(array[mid]) < value) - ? low = mid + 1 - : high = mid; - } - return low; - } - - /** - * Creates an array of unique values, in order, of the provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of combined values. - * @example - * - * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2, 3, 5, 4] - */ - function union() { - return baseUniq(baseFlatten(arguments, true, true)); - } - - /** - * Creates a duplicate-value-free version of an array using strict equality - * for comparisons, i.e. `===`. If the array is sorted, providing - * `true` for `isSorted` will use a faster algorithm. If a callback is provided - * each element of `array` is passed through the callback before uniqueness - * is computed. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias unique - * @category Arrays - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a duplicate-value-free array. - * @example - * - * _.uniq([1, 2, 1, 3, 1]); - * // => [1, 2, 3] - * - * _.uniq([1, 1, 2, 2, 3], true); - * // => [1, 2, 3] - * - * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); - * // => ['A', 'b', 'C'] - * - * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); - * // => [1, 2.5, 3] - * - * // using "_.pluck" callback shorthand - * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniq(array, isSorted, callback, thisArg) { - // juggle arguments - if (typeof isSorted != 'boolean' && isSorted != null) { - thisArg = callback; - callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; - isSorted = false; - } - if (callback != null) { - callback = lodash.createCallback(callback, thisArg, 3); - } - return baseUniq(array, isSorted, callback); - } - - /** - * Creates an array excluding all provided values using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to filter. - * @param {...*} [value] The values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); - * // => [2, 3, 4] - */ - function without(array) { - return baseDifference(array, slice(arguments, 1)); - } - - /** - * Creates an array that is the symmetric difference of the provided arrays. - * See http://en.wikipedia.org/wiki/Symmetric_difference. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of values. - * @example - * - * _.xor([1, 2, 3], [5, 2, 1, 4]); - * // => [3, 5, 4] - * - * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]); - * // => [1, 4, 5] - */ - function xor() { - var index = -1, - length = arguments.length; - - while (++index < length) { - var array = arguments[index]; - if (isArray(array) || isArguments(array)) { - var result = result - ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result))) - : array; - } - } - return result || []; - } - - /** - * Creates an array of grouped elements, the first of which contains the first - * elements of the given arrays, the second of which contains the second - * elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @alias unzip - * @category Arrays - * @param {...Array} [array] Arrays to process. - * @returns {Array} Returns a new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - function zip() { - var array = arguments.length > 1 ? arguments : arguments[0], - index = -1, - length = array ? max(pluck(array, 'length')) : 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = pluck(array, index); - } - return result; - } - - /** - * Creates an object composed from arrays of `keys` and `values`. Provide - * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]` - * or two arrays, one of `keys` and one of corresponding `values`. - * - * @static - * @memberOf _ - * @alias object - * @category Arrays - * @param {Array} keys The array of keys. - * @param {Array} [values=[]] The array of values. - * @returns {Object} Returns an object composed of the given keys and - * corresponding values. - * @example - * - * _.zipObject(['fred', 'barney'], [30, 40]); - * // => { 'fred': 30, 'barney': 40 } - */ - function zipObject(keys, values) { - var index = -1, - length = keys ? keys.length : 0, - result = {}; - - if (!values && length && !isArray(keys[0])) { - values = []; - } - while (++index < length) { - var key = keys[index]; - if (values) { - result[key] = values[index]; - } else if (key) { - result[key[0]] = key[1]; - } - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that executes `func`, with the `this` binding and - * arguments of the created function, only after being called `n` times. - * - * @static - * @memberOf _ - * @category Functions - * @param {number} n The number of times the function must be called before - * `func` is executed. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('Done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => logs 'Done saving!', after all saves have completed - */ - function after(n, func) { - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any additional `bind` arguments to those - * provided to the bound function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to bind. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var func = function(greeting) { - * return greeting + ' ' + this.name; - * }; - * - * func = _.bind(func, { 'name': 'fred' }, 'hi'); - * func(); - * // => 'hi fred' - */ - function bind(func, thisArg) { - return arguments.length > 2 - ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) - : createWrapper(func, 1, null, null, thisArg); - } - - /** - * Binds methods of an object to the object itself, overwriting the existing - * method. Method names may be specified as individual arguments or as arrays - * of method names. If no method names are provided all the function properties - * of `object` will be bound. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...string} [methodName] The object method names to - * bind, specified as individual method names or arrays of method names. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'onClick': function() { console.log('clicked ' + this.label); } - * }; - * - * _.bindAll(view); - * jQuery('#docs').on('click', view.onClick); - * // => logs 'clicked docs', when the button is clicked - */ - function bindAll(object) { - var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object), - index = -1, - length = funcs.length; - - while (++index < length) { - var key = funcs[index]; - object[key] = createWrapper(object[key], 1, null, null, object); - } - return object; - } - - /** - * Creates a function that, when called, invokes the method at `object[key]` - * and prepends any additional `bindKey` arguments to those provided to the bound - * function. This method differs from `_.bind` by allowing bound functions to - * reference methods that will be redefined or don't yet exist. - * See http://michaux.ca/articles/lazy-function-definition-pattern. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object the method belongs to. - * @param {string} key The key of the method. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'name': 'fred', - * 'greet': function(greeting) { - * return greeting + ' ' + this.name; - * } - * }; - * - * var func = _.bindKey(object, 'greet', 'hi'); - * func(); - * // => 'hi fred' - * - * object.greet = function(greeting) { - * return greeting + 'ya ' + this.name + '!'; - * }; - * - * func(); - * // => 'hiya fred!' - */ - function bindKey(object, key) { - return arguments.length > 2 - ? createWrapper(key, 19, slice(arguments, 2), null, object) - : createWrapper(key, 3, null, null, object); - } - - /** - * Creates a function that is the composition of the provided functions, - * where each function consumes the return value of the function that follows. - * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - * Each function is executed with the `this` binding of the composed function. - * - * @static - * @memberOf _ - * @category Functions - * @param {...Function} [func] Functions to compose. - * @returns {Function} Returns the new composed function. - * @example - * - * var realNameMap = { - * 'pebbles': 'penelope' - * }; - * - * var format = function(name) { - * name = realNameMap[name.toLowerCase()] || name; - * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); - * }; - * - * var greet = function(formatted) { - * return 'Hiya ' + formatted + '!'; - * }; - * - * var welcome = _.compose(greet, format); - * welcome('pebbles'); - * // => 'Hiya Penelope!' - */ - function compose() { - var funcs = arguments, - length = funcs.length; - - while (length--) { - if (!isFunction(funcs[length])) { - throw new TypeError; - } - } - return function() { - var args = arguments, - length = funcs.length; - - while (length--) { - args = [funcs[length].apply(this, args)]; - } - return args[0]; - }; - } - - /** - * Creates a function which accepts one or more arguments of `func` that when - * invoked either executes `func` returning its result, if all `func` arguments - * have been provided, or returns a function that accepts one or more of the - * remaining `func` arguments, and so on. The arity of `func` can be specified - * if `func.length` is not sufficient. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @returns {Function} Returns the new curried function. - * @example - * - * var curried = _.curry(function(a, b, c) { - * console.log(a + b + c); - * }); - * - * curried(1)(2)(3); - * // => 6 - * - * curried(1, 2)(3); - * // => 6 - * - * curried(1, 2, 3); - * // => 6 - */ - function curry(func, arity) { - arity = typeof arity == 'number' ? arity : (+arity || func.length); - return createWrapper(func, 4, null, null, null, arity); - } - - /** - * Creates a function that will delay the execution of `func` until after - * `wait` milliseconds have elapsed since the last time it was invoked. - * Provide an options object to indicate that `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. Subsequent calls - * to the debounced function will return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the debounced function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to debounce. - * @param {number} wait The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // avoid costly calculations while the window size is in flux - * var lazyLayout = _.debounce(calculateLayout, 150); - * jQuery(window).on('resize', lazyLayout); - * - * // execute `sendMail` when the click event is fired, debouncing subsequent calls - * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * }); - * - * // ensure `batchLog` is executed once after 1 second of debounced calls - * var source = new EventSource('/stream'); - * source.addEventListener('message', _.debounce(batchLog, 250, { - * 'maxWait': 1000 - * }, false); - */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - wait = nativeMax(0, wait) || 0; - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = options.leading; - maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); - trailing = 'trailing' in options ? options.trailing : trailing; - } - var delayed = function() { - var remaining = wait - (now() - stamp); - if (remaining <= 0) { - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - var isCalled = trailingCall; - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - } else { - timeoutId = setTimeout(delayed, remaining); - } - }; - - var maxDelayed = function() { - if (timeoutId) { - clearTimeout(timeoutId); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (trailing || (maxWait !== wait)) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - }; - - return function() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0; - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - return result; - }; - } - - /** - * Defers executing the `func` function until the current call stack has cleared. - * Additional arguments will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to defer. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { console.log(text); }, 'deferred'); - * // logs 'deferred' after one or more milliseconds - */ - function defer(func) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 1); - return setTimeout(function() { func.apply(undefined, args); }, 1); - } - - /** - * Executes the `func` function after `wait` milliseconds. Additional arguments - * will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay execution. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { console.log(text); }, 1000, 'later'); - * // => logs 'later' after one second - */ - function delay(func, wait) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 2); - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided it will be used to determine the cache key for storing the result - * based on the arguments provided to the memoized function. By default, the - * first argument provided to the memoized function is used as the cache key. - * The `func` is executed with the `this` binding of the memoized function. - * The result cache is exposed as the `cache` property on the memoized function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] A function used to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var fibonacci = _.memoize(function(n) { - * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); - * }); - * - * fibonacci(9) - * // => 34 - * - * var data = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // modifying the result cache - * var get = _.memoize(function(name) { return data[name]; }, _.identity); - * get('pebbles'); - * // => { 'name': 'pebbles', 'age': 1 } - * - * get.cache.pebbles.name = 'penelope'; - * get('pebbles'); - * // => { 'name': 'penelope', 'age': 1 } - */ - function memoize(func, resolver) { - if (!isFunction(func)) { - throw new TypeError; - } - var memoized = function() { - var cache = memoized.cache, - key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0]; - - return hasOwnProperty.call(cache, key) - ? cache[key] - : (cache[key] = func.apply(this, arguments)); - } - memoized.cache = {}; - return memoized; - } - - /** - * Creates a function that is restricted to execute `func` once. Repeat calls to - * the function will return the value of the first call. The `func` is executed - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` executes `createApplication` once - */ - function once(func) { - var ran, - result; - - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (ran) { - return result; - } - ran = true; - result = func.apply(this, arguments); - - // clear the `func` variable so the function may be garbage collected - func = null; - return result; - }; - } - - /** - * Creates a function that, when called, invokes `func` with any additional - * `partial` arguments prepended to those provided to the new function. This - * method is similar to `_.bind` except it does **not** alter the `this` binding. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { return greeting + ' ' + name; }; - * var hi = _.partial(greet, 'hi'); - * hi('fred'); - * // => 'hi fred' - */ - function partial(func) { - return createWrapper(func, 16, slice(arguments, 1)); - } - - /** - * This method is like `_.partial` except that `partial` arguments are - * appended to those provided to the new function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var defaultsDeep = _.partialRight(_.merge, _.defaults); - * - * var options = { - * 'variable': 'data', - * 'imports': { 'jq': $ } - * }; - * - * defaultsDeep(options, _.templateSettings); - * - * options.variable - * // => 'data' - * - * options.imports - * // => { '_': _, 'jq': $ } - */ - function partialRight(func) { - return createWrapper(func, 32, null, slice(arguments, 1)); - } - - /** - * Creates a function that, when executed, will only call the `func` function - * at most once per every `wait` milliseconds. Provide an options object to - * indicate that `func` should be invoked on the leading and/or trailing edge - * of the `wait` timeout. Subsequent calls to the throttled function will - * return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the throttled function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to throttle. - * @param {number} wait The number of milliseconds to throttle executions to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // avoid excessively updating the position while scrolling - * var throttled = _.throttle(updatePosition, 100); - * jQuery(window).on('scroll', throttled); - * - * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes - * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { - * 'trailing': false - * })); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? options.leading : leading; - trailing = 'trailing' in options ? options.trailing : trailing; - } - debounceOptions.leading = leading; - debounceOptions.maxWait = wait; - debounceOptions.trailing = trailing; - - return debounce(func, wait, debounceOptions); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Additional arguments provided to the function are appended - * to those provided to the wrapper function. The wrapper is executed with - * the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {*} value The value to wrap. - * @param {Function} wrapper The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('Fred, Wilma, & Pebbles'); - * // => '

Fred, Wilma, & Pebbles

' - */ - function wrap(value, wrapper) { - return createWrapper(wrapper, 16, [value]); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new function. - * @example - * - * var object = { 'name': 'fred' }; - * var getter = _.constant(object); - * getter() === object; - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - /** - * Produces a callback bound to an optional `thisArg`. If `func` is a property - * name the created callback will return the property value for a given element. - * If `func` is an object the created callback will return `true` for elements - * that contain the equivalent object properties, otherwise it will return `false`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // wrap to create custom callback shorthands - * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { - * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); - * return !match ? func(callback, thisArg) : function(object) { - * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; - * }; - * }); - * - * _.filter(characters, 'age__gt38'); - * // => [{ 'name': 'fred', 'age': 40 }] - */ - function createCallback(func, thisArg, argCount) { - var type = typeof func; - if (func == null || type == 'function') { - return baseCreateCallback(func, thisArg, argCount); - } - // handle "_.pluck" style callback shorthands - if (type != 'object') { - return property(func); - } - var props = keys(func), - key = props[0], - a = func[key]; - - // handle "_.where" style callback shorthands - if (props.length == 1 && a === a && !isObject(a)) { - // fast path the common case of providing an object with a single - // property containing a primitive value - return function(object) { - var b = object[key]; - return a === b && (a !== 0 || (1 / a == 1 / b)); - }; - } - return function(object) { - var length = props.length, - result = false; - - while (length--) { - if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { - break; - } - } - return result; - }; - } - - /** - * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their - * corresponding HTML entities. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} string The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('Fred, Wilma, & Pebbles'); - * // => 'Fred, Wilma, & Pebbles' - */ - function escape(string) { - return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); - } - - /** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'name': 'fred' }; - * _.identity(object) === object; - * // => true - */ - function identity(value) { - return value; - } - - /** - * Adds function properties of a source object to the destination object. - * If `object` is a function methods will be added to its prototype as well. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Function|Object} [object=lodash] object The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options] The options object. - * @param {boolean} [options.chain=true] Specify whether the functions added are chainable. - * @example - * - * function capitalize(string) { - * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - * } - * - * _.mixin({ 'capitalize': capitalize }); - * _.capitalize('fred'); - * // => 'Fred' - * - * _('fred').capitalize().value(); - * // => 'Fred' - * - * _.mixin({ 'capitalize': capitalize }, { 'chain': false }); - * _('fred').capitalize(); - * // => 'Fred' - */ - function mixin(object, source, options) { - var chain = true, - methodNames = source && functions(source); - - if (!source || (!options && !methodNames.length)) { - if (options == null) { - options = source; - } - ctor = lodashWrapper; - source = object; - object = lodash; - methodNames = functions(source); - } - if (options === false) { - chain = false; - } else if (isObject(options) && 'chain' in options) { - chain = options.chain; - } - var ctor = object, - isFunc = isFunction(ctor); - - forEach(methodNames, function(methodName) { - var func = object[methodName] = source[methodName]; - if (isFunc) { - ctor.prototype[methodName] = function() { - var chainAll = this.__chain__, - value = this.__wrapped__, - args = [value]; - - push.apply(args, arguments); - var result = func.apply(object, args); - if (chain || chainAll) { - if (value === result && isObject(result)) { - return this; - } - result = new ctor(result); - result.__chain__ = chainAll; - } - return result; - }; - } - }); - } - - /** - * Reverts the '_' variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @memberOf _ - * @category Utilities - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - context._ = oldDash; - return this; - } - - /** - * A no-operation function. - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var object = { 'name': 'fred' }; - * _.noop(object) === undefined; - * // => true - */ - function noop() { - // no operation performed - } - - /** - * Gets the number of milliseconds that have elapsed since the Unix epoch - * (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var stamp = _.now(); - * _.defer(function() { console.log(_.now() - stamp); }); - * // => logs the number of milliseconds it took for the deferred function to be called - */ - var now = isNative(now = Date.now) && now || function() { - return new Date().getTime(); - }; - - /** - * Converts the given value into an integer of the specified radix. - * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the - * `value` is a hexadecimal, in which case a `radix` of `16` is used. - * - * Note: This method avoids differences in native ES3 and ES5 `parseInt` - * implementations. See http://es5.github.io/#E. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} value The value to parse. - * @param {number} [radix] The radix used to interpret the value to parse. - * @returns {number} Returns the new integer value. - * @example - * - * _.parseInt('08'); - * // => 8 - */ - var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) { - // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt` - return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0); - }; - - /** - * Creates a "_.pluck" style function, which returns the `key` value of a - * given object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} key The name of the property to retrieve. - * @returns {Function} Returns the new function. - * @example - * - * var characters = [ - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 36 } - * ]; - * - * var getName = _.property('name'); - * - * _.map(characters, getName); - * // => ['barney', 'fred'] - * - * _.sortBy(characters, getName); - * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] - */ - function property(key) { - return function(object) { - return object[key]; - }; - } - - /** - * Produces a random number between `min` and `max` (inclusive). If only one - * argument is provided a number between `0` and the given number will be - * returned. If `floating` is truey or either `min` or `max` are floats a - * floating-point number will be returned instead of an integer. - * - * @static - * @memberOf _ - * @category Utilities - * @param {number} [min=0] The minimum possible value. - * @param {number} [max=1] The maximum possible value. - * @param {boolean} [floating=false] Specify returning a floating-point number. - * @returns {number} Returns a random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(min, max, floating) { - var noMin = min == null, - noMax = max == null; - - if (floating == null) { - if (typeof min == 'boolean' && noMax) { - floating = min; - min = 1; - } - else if (!noMax && typeof max == 'boolean') { - floating = max; - noMax = true; - } - } - if (noMin && noMax) { - max = 1; - } - min = +min || 0; - if (noMax) { - max = min; - min = 0; - } else { - max = +max || 0; - } - if (floating || min % 1 || max % 1) { - var rand = nativeRandom(); - return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max); - } - return baseRandom(min, max); - } - - /** - * Resolves the value of property `key` on `object`. If `key` is a function - * it will be invoked with the `this` binding of `object` and its result returned, - * else the property value is returned. If `object` is falsey then `undefined` - * is returned. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to resolve. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { - * 'cheese': 'crumpets', - * 'stuff': function() { - * return 'nonsense'; - * } - * }; - * - * _.result(object, 'cheese'); - * // => 'crumpets' - * - * _.result(object, 'stuff'); - * // => 'nonsense' - */ - function result(object, key) { - if (object) { - var value = object[key]; - return isFunction(value) ? object[key]() : value; - } - } - - /** - * A micro-templating method that handles arbitrary delimiters, preserves - * whitespace, and correctly escapes quotes within interpolated code. - * - * Note: In the development build, `_.template` utilizes sourceURLs for easier - * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl - * - * For more information on precompiling templates see: - * https://lodash.com/custom-builds - * - * For more information on Chrome extension sandboxes see: - * http://developer.chrome.com/stable/extensions/sandboxingEval.html - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} text The template text. - * @param {Object} data The data object used to populate the text. - * @param {Object} [options] The options object. - * @param {RegExp} [options.escape] The "escape" delimiter. - * @param {RegExp} [options.evaluate] The "evaluate" delimiter. - * @param {Object} [options.imports] An object to import into the template as local variables. - * @param {RegExp} [options.interpolate] The "interpolate" delimiter. - * @param {string} [sourceURL] The sourceURL of the template's compiled source. - * @param {string} [variable] The data object variable name. - * @returns {Function|string} Returns a compiled function when no `data` object - * is given, else it returns the interpolated text. - * @example - * - * // using the "interpolate" delimiter to create a compiled template - * var compiled = _.template('hello <%= name %>'); - * compiled({ 'name': 'fred' }); - * // => 'hello fred' - * - * // using the "escape" delimiter to escape HTML in data property values - * _.template('<%- value %>', { 'value': ' -``` - -Using [`npm`](http://npmjs.org/): - -```bash -npm i --save lodash - -{sudo} npm i -g lodash -npm ln lodash -``` - -In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/): - -```js -var _ = require('lodash'); -// or as Underscore -var _ = require('lodash/dist/lodash.underscore'); -``` - -**Notes:** - * Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL - * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('lodash.js'); -``` - -In an AMD loader: - -```js -require({ - 'packages': [ - { 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' } - ] -}, -['lodash'], function(_) { - console.log(_.VERSION); -}); -``` - -## Resources - - * Podcasts - - [JavaScript Jabber](http://javascriptjabber.com/079-jsj-lo-dash-with-john-david-dalton/) - - * Posts - - [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) - - [Custom builds in Lo-Dash 2.0](http://kitcambridge.be/blog/custom-builds-in-lo-dash-2-dot-0/) - - * Videos - - [Introduction](https://vimeo.com/44154599) - - [Origins](https://vimeo.com/44154600) - - [Optimizations & builds](https://vimeo.com/44154601) - - [Native method use](https://vimeo.com/48576012) - - [Testing](https://vimeo.com/45865290) - - [CascadiaJS ’12](http://www.youtube.com/watch?v=dpPy4f_SeEk) - - A list of other community created podcasts, posts, & videos is available on our [wiki](https://github.com/lodash/lodash/wiki/Resources). - -## Features - - * AMD loader support ([curl](https://github.com/cujojs/curl), [dojo](http://dojotoolkit.org/), [requirejs](http://requirejs.org/), etc.) - * [_(…)](https://lodash.com/docs#_) supports intuitive chaining - * [_.at](https://lodash.com/docs#at) for cherry-picking collection values - * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods - * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects - * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects - * [_.constant](https://lodash.com/docs#constant) & [_.property](https://lodash.com/docs#property) function generators for composing functions - * [_.contains](https://lodash.com/docs#contains) accepts a `fromIndex` - * [_.create](https://lodash.com/docs#create) for easier object inheritance - * [_.createCallback](https://lodash.com/docs#createCallback) for extending callbacks in methods & mixins - * [_.curry](https://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions - * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) accept additional `options` for more control - * [_.findIndex](https://lodash.com/docs#findIndex) & [_.findKey](https://lodash.com/docs#findKey) for finding indexes & keys - * [_.forEach](https://lodash.com/docs#forEach) is chainable & supports exiting early - * [_.forIn](https://lodash.com/docs#forIn) for iterating own & inherited properties - * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties - * [_.isPlainObject](https://lodash.com/docs#isPlainObject) for checking if values are created by `Object` - * [_.mapValues](https://lodash.com/docs#mapValues) for [mapping](https://lodash.com/docs#map) values to an object - * [_.memoize](https://lodash.com/docs#memoize) exposes the `cache` of memoized functions - * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) - * [_.noop](https://lodash.com/docs#noop) for function placeholders - * [_.now](https://lodash.com/docs#now) as a cross-browser `Date.now` alternative - * [_.parseInt](https://lodash.com/docs#parseInt) for consistent behavior - * [_.pull](https://lodash.com/docs#pull) & [_.remove](https://lodash.com/docs#remove) for mutating arrays - * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers - * [_.runInContext](https://lodash.com/docs#runInContext) for easier mocking - * [_.sortBy](https://lodash.com/docs#sortBy) supports sorting by multiple properties - * [_.support](https://lodash.com/docs#support) for flagging environment features - * [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals) - * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects - * [_.where](https://lodash.com/docs#where) supports deep object comparisons - * [_.xor](https://lodash.com/docs#xor) as a companion to [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) - * [_.zip](https://lodash.com/docs#zip) is capable of unzipping values - * [_.omit](https://lodash.com/docs#omit), [_.pick](https://lodash.com/docs#pick), & - [more](https://lodash.com/docs "_.assign, _.clone, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept callbacks - * [_.contains](https://lodash.com/docs#contains), [_.toArray](https://lodash.com/docs#toArray), & - [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.forEachRight, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.where") accept strings - * [_.filter](https://lodash.com/docs#filter), [_.map](https://lodash.com/docs#map), & - [more](https://lodash.com/docs "_.countBy, _.every, _.find, _.findKey, _.findLast, _.findLastIndex, _.findLastKey, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* & *“_.where”* shorthands - * [_.findLast](https://lodash.com/docs#findLast), [_.findLastIndex](https://lodash.com/docs#findLastIndex), & - [more](https://lodash.com/docs "_.findLastKey, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods - -## Support - -Tested in Chrome 5~31, Firefox 2~25, IE 6-11, Opera 9.25-17, Safari 3-7, Node.js 0.6.21-0.10.22, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5. diff --git a/node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.compat.js b/node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.compat.js deleted file mode 100644 index 4d35185f..00000000 --- a/node_modules/grunt/node_modules/grunt-legacy-log/node_modules/lodash/dist/lodash.compat.js +++ /dev/null @@ -1,7158 +0,0 @@ -/** - * @license - * Lo-Dash 2.4.2 (Custom Build) - * Build: `lodash -o ./dist/lodash.compat.js` - * Copyright 2012-2013 The Dojo Foundation - * Based on Underscore.js 1.5.2 - * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre ES5 environments */ - var undefined; - - /** Used to pool arrays and objects used internally */ - var arrayPool = [], - objectPool = []; - - /** Used to generate unique IDs */ - var idCounter = 0; - - /** Used internally to indicate various things */ - var indicatorObject = {}; - - /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ - var keyPrefix = +new Date + ''; - - /** Used as the size when optimizations are enabled for large arrays */ - var largeArraySize = 75; - - /** Used as the max size of the `arrayPool` and `objectPool` */ - var maxPoolSize = 40; - - /** Used to detect and test whitespace */ - var whitespace = ( - // whitespace - ' \t\x0B\f\xA0\ufeff' + - - // line terminators - '\n\r\u2028\u2029' + - - // unicode category "Zs" space separators - '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' - ); - - /** Used to match empty string literals in compiled template source */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** - * Used to match ES6 template delimiters - * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match regexp flags from their coerced string values */ - var reFlags = /\w*$/; - - /** Used to detected named functions */ - var reFuncName = /^\s*function[ \n\r\t]+\w/; - - /** Used to match "interpolate" template delimiters */ - var reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match leading whitespace and zeros to be removed */ - var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)'); - - /** Used to ensure capturing order of template delimiters */ - var reNoMatch = /($^)/; - - /** Used to detect functions containing a `this` reference */ - var reThis = /\bthis\b/; - - /** Used to match unescaped characters in compiled string literals */ - var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; - - /** Used to assign default `context` object properties */ - var contextProps = [ - 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', - 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', - 'parseInt', 'setTimeout' - ]; - - /** Used to fix the JScript [[DontEnum]] bug */ - var shadowedProps = [ - 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', - 'toLocaleString', 'toString', 'valueOf' - ]; - - /** Used to make template sourceURLs easier to identify */ - var templateCounter = 0; - - /** `Object#toString` result shortcuts */ - var argsClass = '[object Arguments]', - arrayClass = '[object Array]', - boolClass = '[object Boolean]', - dateClass = '[object Date]', - errorClass = '[object Error]', - funcClass = '[object Function]', - numberClass = '[object Number]', - objectClass = '[object Object]', - regexpClass = '[object RegExp]', - stringClass = '[object String]'; - - /** Used to identify object classifications that `_.clone` supports */ - var cloneableClasses = {}; - cloneableClasses[funcClass] = false; - cloneableClasses[argsClass] = cloneableClasses[arrayClass] = - cloneableClasses[boolClass] = cloneableClasses[dateClass] = - cloneableClasses[numberClass] = cloneableClasses[objectClass] = - cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; - - /** Used as an internal `_.debounce` options object */ - var debounceOptions = { - 'leading': false, - 'maxWait': 0, - 'trailing': false - }; - - /** Used as the property descriptor for `__bindData__` */ - var descriptor = { - 'configurable': false, - 'enumerable': false, - 'value': null, - 'writable': false - }; - - /** Used as the data object for `iteratorTemplate` */ - var iteratorData = { - 'args': '', - 'array': null, - 'bottom': '', - 'firstArg': '', - 'init': '', - 'keys': null, - 'loop': '', - 'shadowedProps': null, - 'support': null, - 'top': '', - 'useHas': false - }; - - /** Used to determine if values are of the language type Object */ - var objectTypes = { - 'boolean': false, - 'function': true, - 'object': true, - 'number': false, - 'string': false, - 'undefined': false - }; - - /** Used to escape characters for inclusion in compiled string literals */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\t': 't', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Used as a reference to the global object */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `exports` */ - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - /** Detect free variable `module` */ - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports` */ - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - - /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ - var freeGlobal = objectTypes[typeof global] && global; - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.indexOf` without support for binary searches - * or `fromIndex` constraints. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * An implementation of `_.contains` for cache objects that mimics the return - * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. - * - * @private - * @param {Object} cache The cache object to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns `0` if `value` is found, else `-1`. - */ - function cacheIndexOf(cache, value) { - var type = typeof value; - cache = cache.cache; - - if (type == 'boolean' || value == null) { - return cache[value] ? 0 : -1; - } - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value; - cache = (cache = cache[type]) && cache[key]; - - return type == 'object' - ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) - : (cache ? 0 : -1); - } - - /** - * Adds a given value to the corresponding cache object. - * - * @private - * @param {*} value The value to add to the cache. - */ - function cachePush(value) { - var cache = this.cache, - type = typeof value; - - if (type == 'boolean' || value == null) { - cache[value] = true; - } else { - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value, - typeCache = cache[type] || (cache[type] = {}); - - if (type == 'object') { - (typeCache[key] || (typeCache[key] = [])).push(value); - } else { - typeCache[key] = true; - } - } - } - - /** - * Used by `_.max` and `_.min` as the default callback when a given - * collection is a string value. - * - * @private - * @param {string} value The character to inspect. - * @returns {number} Returns the code unit of given character. - */ - function charAtCallback(value) { - return value.charCodeAt(0); - } - - /** - * Used by `sortBy` to compare transformed `collection` elements, stable sorting - * them in ascending order. - * - * @private - * @param {Object} a The object to compare to `b`. - * @param {Object} b The object to compare to `a`. - * @returns {number} Returns the sort order indicator of `1` or `-1`. - */ - function compareAscending(a, b) { - var ac = a.criteria, - bc = b.criteria, - index = -1, - length = ac.length; - - while (++index < length) { - var value = ac[index], - other = bc[index]; - - if (value !== other) { - if (value > other || typeof value == 'undefined') { - return 1; - } - if (value < other || typeof other == 'undefined') { - return -1; - } - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to return the same value for - // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247 - // - // This also ensures a stable sort in V8 and other engines. - // See http://code.google.com/p/v8/issues/detail?id=90 - return a.index - b.index; - } - - /** - * Creates a cache object to optimize linear searches of large arrays. - * - * @private - * @param {Array} [array=[]] The array to search. - * @returns {null|Object} Returns the cache object or `null` if caching should not be used. - */ - function createCache(array) { - var index = -1, - length = array.length, - first = array[0], - mid = array[(length / 2) | 0], - last = array[length - 1]; - - if (first && typeof first == 'object' && - mid && typeof mid == 'object' && last && typeof last == 'object') { - return false; - } - var cache = getObject(); - cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; - - var result = getObject(); - result.array = array; - result.cache = cache; - result.push = cachePush; - - while (++index < length) { - result.push(array[index]); - } - return result; - } - - /** - * Used by `template` to escape characters for inclusion in compiled - * string literals. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(match) { - return '\\' + stringEscapes[match]; - } - - /** - * Gets an array from the array pool or creates a new one if the pool is empty. - * - * @private - * @returns {Array} The array from the pool. - */ - function getArray() { - return arrayPool.pop() || []; - } - - /** - * Gets an object from the object pool or creates a new one if the pool is empty. - * - * @private - * @returns {Object} The object from the pool. - */ - function getObject() { - return objectPool.pop() || { - 'array': null, - 'cache': null, - 'criteria': null, - 'false': false, - 'index': 0, - 'null': false, - 'number': null, - 'object': null, - 'push': null, - 'string': null, - 'true': false, - 'undefined': false, - 'value': null - }; - } - - /** - * Checks if `value` is a DOM node in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`. - */ - function isNode(value) { - // IE < 9 presents DOM nodes as `Object` objects except they have `toString` - // methods that are `typeof` "string" and still can coerce nodes to strings - return typeof value.toString != 'function' && typeof (value + '') == 'string'; - } - - /** - * Releases the given array back to the array pool. - * - * @private - * @param {Array} [array] The array to release. - */ - function releaseArray(array) { - array.length = 0; - if (arrayPool.length < maxPoolSize) { - arrayPool.push(array); - } - } - - /** - * Releases the given object back to the object pool. - * - * @private - * @param {Object} [object] The object to release. - */ - function releaseObject(object) { - var cache = object.cache; - if (cache) { - releaseObject(cache); - } - object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null; - if (objectPool.length < maxPoolSize) { - objectPool.push(object); - } - } - - /** - * Slices the `collection` from the `start` index up to, but not including, - * the `end` index. - * - * Note: This function is used instead of `Array#slice` to support node lists - * in IE < 9 and to ensure dense arrays are returned. - * - * @private - * @param {Array|Object|string} collection The collection to slice. - * @param {number} start The start index. - * @param {number} end The end index. - * @returns {Array} Returns the new array. - */ - function slice(array, start, end) { - start || (start = 0); - if (typeof end == 'undefined') { - end = array ? array.length : 0; - } - var index = -1, - length = end - start || 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = array[start + index]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new `lodash` function using the given context object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} [context=root] The context object. - * @returns {Function} Returns the `lodash` function. - */ - function runInContext(context) { - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See http://es5.github.io/#x11.1.5. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references */ - var Array = context.Array, - Boolean = context.Boolean, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Number = context.Number, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** - * Used for `Array` method references. - * - * Normally `Array.prototype` would suffice, however, using an array literal - * avoids issues in Narwhal. - */ - var arrayRef = []; - - /** Used for native method references */ - var errorProto = Error.prototype, - objectProto = Object.prototype, - stringProto = String.prototype; - - /** Used to restore the original `_` reference in `noConflict` */ - var oldDash = context._; - - /** Used to resolve the internal [[Class]] of values */ - var toString = objectProto.toString; - - /** Used to detect if a method is native */ - var reNative = RegExp('^' + - String(toString) - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/toString| for [^\]]+/g, '.*?') + '$' - ); - - /** Native method shortcuts */ - var ceil = Math.ceil, - clearTimeout = context.clearTimeout, - floor = Math.floor, - fnToString = Function.prototype.toString, - getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - hasOwnProperty = objectProto.hasOwnProperty, - push = arrayRef.push, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - setTimeout = context.setTimeout, - splice = arrayRef.splice, - unshift = arrayRef.unshift; - - /** Used to set meta data on functions */ - var defineProperty = (function() { - // IE 8 only accepts DOM elements - try { - var o = {}, - func = isNative(func = Object.defineProperty) && func, - result = func(o, o, o) && func; - } catch(e) { } - return result; - }()); - - /* Native method shortcuts for methods with the same name as other `lodash` methods */ - var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate, - nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, - nativeIsFinite = context.isFinite, - nativeIsNaN = context.isNaN, - nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random; - - /** Used to lookup a built-in constructor by [[Class]] */ - var ctorByClass = {}; - ctorByClass[arrayClass] = Array; - ctorByClass[boolClass] = Boolean; - ctorByClass[dateClass] = Date; - ctorByClass[funcClass] = Function; - ctorByClass[objectClass] = Object; - ctorByClass[numberClass] = Number; - ctorByClass[regexpClass] = RegExp; - ctorByClass[stringClass] = String; - - /** Used to avoid iterating non-enumerable properties in IE < 9 */ - var nonEnumProps = {}; - nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; - nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true }; - nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true }; - nonEnumProps[objectClass] = { 'constructor': true }; - - (function() { - var length = shadowedProps.length; - while (length--) { - var key = shadowedProps[length]; - for (var className in nonEnumProps) { - if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) { - nonEnumProps[className][key] = false; - } - } - } - }()); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps the given value to enable intuitive - * method chaining. - * - * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: - * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, - * and `unshift` - * - * Chaining is supported in custom builds as long as the `value` method is - * implicitly or explicitly included in the build. - * - * The chainable wrapper functions are: - * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, - * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, - * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, - * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, - * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, - * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, - * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, - * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, - * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, - * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, - * and `zip` - * - * The non-chainable wrapper functions are: - * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, - * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, - * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, - * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, - * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, - * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, - * `template`, `unescape`, `uniqueId`, and `value` - * - * The wrapper functions `first` and `last` return wrapped values when `n` is - * provided, otherwise they return unwrapped values. - * - * Explicit chaining can be enabled by using the `_.chain` method. - * - * @name _ - * @constructor - * @category Chaining - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns a `lodash` instance. - * @example - * - * var wrapped = _([1, 2, 3]); - * - * // returns an unwrapped value - * wrapped.reduce(function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * // returns a wrapped value - * var squares = wrapped.map(function(num) { - * return num * num; - * }); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor - return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) - ? value - : new lodashWrapper(value); - } - - /** - * A fast path for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap in a `lodash` instance. - * @param {boolean} chainAll A flag to enable chaining for all methods - * @returns {Object} Returns a `lodash` instance. - */ - function lodashWrapper(value, chainAll) { - this.__chain__ = !!chainAll; - this.__wrapped__ = value; - } - // ensure `new lodashWrapper` is an instance of `lodash` - lodashWrapper.prototype = lodash.prototype; - - /** - * An object used to flag environments features. - * - * @static - * @memberOf _ - * @type Object - */ - var support = lodash.support = {}; - - (function() { - var ctor = function() { this.x = 1; }, - object = { '0': 1, 'length': 1 }, - props = []; - - ctor.prototype = { 'valueOf': 1, 'y': 1 }; - for (var key in new ctor) { props.push(key); } - for (key in arguments) { } - - /** - * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.argsClass = toString.call(arguments) == argsClass; - - /** - * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5). - * - * @memberOf _.support - * @type boolean - */ - support.argsObject = arguments.constructor == Object && !(arguments instanceof Array); - - /** - * Detect if `name` or `message` properties of `Error.prototype` are - * enumerable by default. (IE < 9, Safari < 5.1) - * - * @memberOf _.support - * @type boolean - */ - support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name'); - - /** - * Detect if `prototype` properties are enumerable by default. - * - * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 - * (if the prototype or a property on the prototype has been set) - * incorrectly sets a function's `prototype` property [[Enumerable]] - * value to `true`. - * - * @memberOf _.support - * @type boolean - */ - support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype'); - - /** - * Detect if functions can be decompiled by `Function#toString` - * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). - * - * @memberOf _.support - * @type boolean - */ - support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext); - - /** - * Detect if `Function#name` is supported (all but IE). - * - * @memberOf _.support - * @type boolean - */ - support.funcNames = typeof Function.name == 'string'; - - /** - * Detect if `arguments` object indexes are non-enumerable - * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumArgs = key != 0; - - /** - * Detect if properties shadowing those on `Object.prototype` are non-enumerable. - * - * In IE < 9 an objects own properties, shadowing non-enumerable ones, are - * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). - * - * @memberOf _.support - * @type boolean - */ - support.nonEnumShadows = !/valueOf/.test(props); - - /** - * Detect if own properties are iterated after inherited properties (all but IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.ownLast = props[0] != 'x'; - - /** - * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. - * - * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` - * and `splice()` functions that fail to remove the last element, `value[0]`, - * of array-like objects even though the `length` property is set to `0`. - * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` - * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. - * - * @memberOf _.support - * @type boolean - */ - support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]); - - /** - * Detect lack of support for accessing string characters by index. - * - * IE < 8 can't access characters by index and IE 8 can only access - * characters by index on string literals. - * - * @memberOf _.support - * @type boolean - */ - support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx'; - - /** - * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9) - * and that the JS engine errors when attempting to coerce an object to - * a string without a `toString` function. - * - * @memberOf _.support - * @type boolean - */ - try { - support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + '')); - } catch(e) { - support.nodeClass = true; - } - }(1)); - - /** - * By default, the template delimiters used by Lo-Dash are similar to those in - * embedded Ruby (ERB). Change the following template settings to use alternative - * delimiters. - * - * @static - * @memberOf _ - * @type Object - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'escape': /<%-([\s\S]+?)%>/g, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'evaluate': /<%([\s\S]+?)%>/g, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type string - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type Object - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type Function - */ - '_': lodash - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The template used to create iterator functions. - * - * @private - * @param {Object} data The data object used to populate the text. - * @returns {string} Returns the interpolated text. - */ - var iteratorTemplate = function(obj) { - - var __p = 'var index, iterable = ' + - (obj.firstArg) + - ', result = ' + - (obj.init) + - ';\nif (!iterable) return result;\n' + - (obj.top) + - ';'; - if (obj.array) { - __p += '\nvar length = iterable.length; index = -1;\nif (' + - (obj.array) + - ') { '; - if (support.unindexedChars) { - __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } '; - } - __p += '\n while (++index < length) {\n ' + - (obj.loop) + - ';\n }\n}\nelse { '; - } else if (support.nonEnumArgs) { - __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' + - (obj.loop) + - ';\n }\n } else { '; - } - - if (support.enumPrototypes) { - __p += '\n var skipProto = typeof iterable == \'function\';\n '; - } - - if (support.enumErrorProps) { - __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n '; - } - - var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); } - - if (obj.useHas && obj.keys) { - __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n'; - if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - } else { - __p += '\n for (index in iterable) {\n'; - if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - if (support.nonEnumShadows) { - __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n '; - for (k = 0; k < 7; k++) { - __p += '\n index = \'' + - (obj.shadowedProps[k]) + - '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))'; - if (!obj.useHas) { - __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])'; - } - __p += ') {\n ' + - (obj.loop) + - ';\n } '; - } - __p += '\n } '; - } - - } - - if (obj.array || support.nonEnumArgs) { - __p += '\n}'; - } - __p += - (obj.bottom) + - ';\nreturn result'; - - return __p - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `_.bind` that creates the bound function and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new bound function. - */ - function baseBind(bindData) { - var func = bindData[0], - partialArgs = bindData[2], - thisArg = bindData[4]; - - function bound() { - // `Function#bind` spec - // http://es5.github.io/#x15.3.4.5 - if (partialArgs) { - // avoid `arguments` object deoptimizations by using `slice` instead - // of `Array.prototype.slice.call` and not assigning `arguments` to a - // variable as a ternary expression - var args = slice(partialArgs); - push.apply(args, arguments); - } - // mimic the constructor's `return` behavior - // http://es5.github.io/#x13.2.2 - if (this instanceof bound) { - // ensure `new bound` is an instance of `func` - var thisBinding = baseCreate(func.prototype), - result = func.apply(thisBinding, args || arguments); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisArg, args || arguments); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.clone` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, callback, stackA, stackB) { - if (callback) { - var result = callback(value); - if (typeof result != 'undefined') { - return result; - } - } - // inspect [[Class]] - var isObj = isObject(value); - if (isObj) { - var className = toString.call(value); - if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) { - return value; - } - var ctor = ctorByClass[className]; - switch (className) { - case boolClass: - case dateClass: - return new ctor(+value); - - case numberClass: - case stringClass: - return new ctor(value); - - case regexpClass: - result = ctor(value.source, reFlags.exec(value)); - result.lastIndex = value.lastIndex; - return result; - } - } else { - return value; - } - var isArr = isArray(value); - if (isDeep) { - // check for circular references and return corresponding clone - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - result = isArr ? ctor(value.length) : {}; - } - else { - result = isArr ? slice(value) : assign({}, value); - } - // add array properties assigned by `RegExp#exec` - if (isArr) { - if (hasOwnProperty.call(value, 'index')) { - result.index = value.index; - } - if (hasOwnProperty.call(value, 'input')) { - result.input = value.input; - } - } - // exit for shallow clone - if (!isDeep) { - return result; - } - // add the source value to the stack of traversed objects - // and associate it with its clone - stackA.push(value); - stackB.push(result); - - // recursively populate clone (susceptible to call stack limits) - (isArr ? baseEach : forOwn)(value, function(objValue, key) { - result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); - }); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(prototype, properties) { - return isObject(prototype) ? nativeCreate(prototype) : {}; - } - // fallback for browsers without `Object.create` - if (!nativeCreate) { - baseCreate = (function() { - function Object() {} - return function(prototype) { - if (isObject(prototype)) { - Object.prototype = prototype; - var result = new Object; - Object.prototype = null; - } - return result || context.Object(); - }; - }()); - } - - /** - * The base implementation of `_.createCallback` without support for creating - * "_.pluck" or "_.where" style callbacks. - * - * @private - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - */ - function baseCreateCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - // exit early for no `thisArg` or already bound by `Function#bind` - if (typeof thisArg == 'undefined' || !('prototype' in func)) { - return func; - } - var bindData = func.__bindData__; - if (typeof bindData == 'undefined') { - if (support.funcNames) { - bindData = !func.name; - } - bindData = bindData || !support.funcDecomp; - if (!bindData) { - var source = fnToString.call(func); - if (!support.funcNames) { - bindData = !reFuncName.test(source); - } - if (!bindData) { - // checks if `func` references the `this` keyword and stores the result - bindData = reThis.test(source); - setBindData(func, bindData); - } - } - } - // exit early if there are no `this` references or `func` is bound - if (bindData === false || (bindData !== true && bindData[1] & 1)) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 2: return function(a, b) { - return func.call(thisArg, a, b); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - } - return bind(func, thisArg); - } - - /** - * The base implementation of `createWrapper` that creates the wrapper and - * sets its meta data. - * - * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new function. - */ - function baseCreateWrapper(bindData) { - var func = bindData[0], - bitmask = bindData[1], - partialArgs = bindData[2], - partialRightArgs = bindData[3], - thisArg = bindData[4], - arity = bindData[5]; - - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - key = func; - - function bound() { - var thisBinding = isBind ? thisArg : this; - if (partialArgs) { - var args = slice(partialArgs); - push.apply(args, arguments); - } - if (partialRightArgs || isCurry) { - args || (args = slice(arguments)); - if (partialRightArgs) { - push.apply(args, partialRightArgs); - } - if (isCurry && args.length < arity) { - bitmask |= 16 & ~32; - return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); - } - } - args || (args = arguments); - if (isBindKey) { - func = thisBinding[key]; - } - if (this instanceof bound) { - thisBinding = baseCreate(func.prototype); - var result = func.apply(thisBinding, args); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisBinding, args); - } - setBindData(bound, bindData); - return bound; - } - - /** - * The base implementation of `_.difference` that accepts a single array - * of values to exclude. - * - * @private - * @param {Array} array The array to process. - * @param {Array} [values] The array of values to exclude. - * @returns {Array} Returns a new array of filtered values. - */ - function baseDifference(array, values) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - isLarge = length >= largeArraySize && indexOf === baseIndexOf, - result = []; - - if (isLarge) { - var cache = createCache(values); - if (cache) { - indexOf = cacheIndexOf; - values = cache; - } else { - isLarge = false; - } - } - while (++index < length) { - var value = array[index]; - if (indexOf(values, value) < 0) { - result.push(value); - } - } - if (isLarge) { - releaseObject(values); - } - return result; - } - - /** - * The base implementation of `_.flatten` without support for callback - * shorthands or `thisArg` binding. - * - * @private - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. - * @param {number} [fromIndex=0] The index to start from. - * @returns {Array} Returns a new flattened array. - */ - function baseFlatten(array, isShallow, isStrict, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - - if (value && typeof value == 'object' && typeof value.length == 'number' - && (isArray(value) || isArguments(value))) { - // recursively flatten arrays (susceptible to call stack limits) - if (!isShallow) { - value = baseFlatten(value, isShallow, isStrict); - } - var valIndex = -1, - valLength = value.length, - resIndex = result.length; - - result.length += valLength; - while (++valIndex < valLength) { - result[resIndex++] = value[valIndex]; - } - } else if (!isStrict) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.isEqual`, without support for `thisArg` binding, - * that allows partial "_.where" style comparisons. - * - * @private - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. - * @param {Array} [stackA=[]] Tracks traversed `a` objects. - * @param {Array} [stackB=[]] Tracks traversed `b` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { - // used to indicate that when comparing objects, `a` has at least the properties of `b` - if (callback) { - var result = callback(a, b); - if (typeof result != 'undefined') { - return !!result; - } - } - // exit early for identical values - if (a === b) { - // treat `+0` vs. `-0` as not equal - return a !== 0 || (1 / a == 1 / b); - } - var type = typeof a, - otherType = typeof b; - - // exit early for unlike primitive values - if (a === a && - !(a && objectTypes[type]) && - !(b && objectTypes[otherType])) { - return false; - } - // exit early for `null` and `undefined` avoiding ES3's Function#call behavior - // http://es5.github.io/#x15.3.4.4 - if (a == null || b == null) { - return a === b; - } - // compare [[Class]] names - var className = toString.call(a), - otherClass = toString.call(b); - - if (className == argsClass) { - className = objectClass; - } - if (otherClass == argsClass) { - otherClass = objectClass; - } - if (className != otherClass) { - return false; - } - switch (className) { - case boolClass: - case dateClass: - // coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal - return +a == +b; - - case numberClass: - // treat `NaN` vs. `NaN` as equal - return (a != +a) - ? b != +b - // but treat `+0` vs. `-0` as not equal - : (a == 0 ? (1 / a == 1 / b) : a == +b); - - case regexpClass: - case stringClass: - // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) - // treat string primitives and their corresponding object instances as equal - return a == String(b); - } - var isArr = className == arrayClass; - if (!isArr) { - // unwrap any `lodash` wrapped values - var aWrapped = hasOwnProperty.call(a, '__wrapped__'), - bWrapped = hasOwnProperty.call(b, '__wrapped__'); - - if (aWrapped || bWrapped) { - return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); - } - // exit for functions and DOM nodes - if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) { - return false; - } - // in older versions of Opera, `arguments` objects have `Array` constructors - var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor, - ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor; - - // non `Object` object instances with different constructors are not equal - if (ctorA != ctorB && - !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && - ('constructor' in a && 'constructor' in b) - ) { - return false; - } - } - // assume cyclic structures are equal - // the algorithm for detecting cyclic structures is adapted from ES 5.1 - // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == a) { - return stackB[length] == b; - } - } - var size = 0; - result = true; - - // add `a` and `b` to the stack of traversed objects - stackA.push(a); - stackB.push(b); - - // recursively compare objects and arrays (susceptible to call stack limits) - if (isArr) { - // compare lengths to determine if a deep comparison is necessary - length = a.length; - size = b.length; - result = size == length; - - if (result || isWhere) { - // deep compare the contents, ignoring non-numeric properties - while (size--) { - var index = length, - value = b[size]; - - if (isWhere) { - while (index--) { - if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } - } - else { - // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` - // which, in this case, is more costly - forIn(b, function(value, key, b) { - if (hasOwnProperty.call(b, key)) { - // count the number of properties. - size++; - // deep compare each property value. - return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); - } - }); - - if (result && !isWhere) { - // ensure both objects have the same number of properties - forIn(a, function(value, key, a) { - if (hasOwnProperty.call(a, key)) { - // `size` will be `-1` if `a` has more properties than `b` - return (result = --size > -1); - } - }); - } - } - stackA.pop(); - stackB.pop(); - - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } - return result; - } - - /** - * The base implementation of `_.merge` without argument juggling or support - * for `thisArg` binding. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} [callback] The function to customize merging properties. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. - */ - function baseMerge(object, source, callback, stackA, stackB) { - (isArray(source) ? forEach : forOwn)(source, function(source, key) { - var found, - isArr, - result = source, - value = object[key]; - - if (source && ((isArr = isArray(source)) || isPlainObject(source))) { - // avoid merging previously merged cyclic sources - var stackLength = stackA.length; - while (stackLength--) { - if ((found = stackA[stackLength] == source)) { - value = stackB[stackLength]; - break; - } - } - if (!found) { - var isShallow; - if (callback) { - result = callback(value, source); - if ((isShallow = typeof result != 'undefined')) { - value = result; - } - } - if (!isShallow) { - value = isArr - ? (isArray(value) ? value : []) - : (isPlainObject(value) ? value : {}); - } - // add `source` and associated `value` to the stack of traversed objects - stackA.push(source); - stackB.push(value); - - // recursively merge objects and arrays (susceptible to call stack limits) - if (!isShallow) { - baseMerge(value, source, callback, stackA, stackB); - } - } - } - else { - if (callback) { - result = callback(value, source); - if (typeof result == 'undefined') { - result = source; - } - } - if (typeof result != 'undefined') { - value = result; - } - } - object[key] = value; - }); - } - - /** - * The base implementation of `_.random` without argument juggling or support - * for returning floating-point numbers. - * - * @private - * @param {number} min The minimum possible value. - * @param {number} max The maximum possible value. - * @returns {number} Returns a random number. - */ - function baseRandom(min, max) { - return min + floor(nativeRandom() * (max - min + 1)); - } - - /** - * The base implementation of `_.uniq` without support for callback shorthands - * or `thisArg` binding. - * - * @private - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function} [callback] The function called per iteration. - * @returns {Array} Returns a duplicate-value-free array. - */ - function baseUniq(array, isSorted, callback) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - result = []; - - var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, - seen = (callback || isLarge) ? getArray() : result; - - if (isLarge) { - var cache = createCache(seen); - indexOf = cacheIndexOf; - seen = cache; - } - while (++index < length) { - var value = array[index], - computed = callback ? callback(value, index, array) : value; - - if (isSorted - ? !index || seen[seen.length - 1] !== computed - : indexOf(seen, computed) < 0 - ) { - if (callback || isLarge) { - seen.push(computed); - } - result.push(value); - } - } - if (isLarge) { - releaseArray(seen.array); - releaseObject(seen); - } else if (callback) { - releaseArray(seen); - } - return result; - } - - /** - * Creates a function that aggregates a collection, creating an object composed - * of keys generated from the results of running each element of the collection - * through a callback. The given `setter` function sets the keys and values - * of the composed object. - * - * @private - * @param {Function} setter The setter function. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter) { - return function(collection, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - setter(result, value, callback(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, callback(value, key, collection), collection); - }); - } - return result; - }; - } - - /** - * Creates a function that, when called, either curries or invokes `func` - * with an optional `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of method flags to compose. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` - * 8 - `_.curry` (bound) - * 16 - `_.partial` - * 32 - `_.partialRight` - * @param {Array} [partialArgs] An array of arguments to prepend to those - * provided to the new function. - * @param {Array} [partialRightArgs] An array of arguments to append to those - * provided to the new function. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new function. - */ - function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - isPartial = bitmask & 16, - isPartialRight = bitmask & 32; - - if (!isBindKey && !isFunction(func)) { - throw new TypeError; - } - if (isPartial && !partialArgs.length) { - bitmask &= ~16; - isPartial = partialArgs = false; - } - if (isPartialRight && !partialRightArgs.length) { - bitmask &= ~32; - isPartialRight = partialRightArgs = false; - } - var bindData = func && func.__bindData__; - if (bindData && bindData !== true) { - // clone `bindData` - bindData = slice(bindData); - if (bindData[2]) { - bindData[2] = slice(bindData[2]); - } - if (bindData[3]) { - bindData[3] = slice(bindData[3]); - } - // set `thisBinding` is not previously bound - if (isBind && !(bindData[1] & 1)) { - bindData[4] = thisArg; - } - // set if previously bound but not currently (subsequent curried functions) - if (!isBind && bindData[1] & 1) { - bitmask |= 8; - } - // set curried arity if not yet set - if (isCurry && !(bindData[1] & 4)) { - bindData[5] = arity; - } - // append partial left arguments - if (isPartial) { - push.apply(bindData[2] || (bindData[2] = []), partialArgs); - } - // append partial right arguments - if (isPartialRight) { - unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs); - } - // merge flags - bindData[1] |= bitmask; - return createWrapper.apply(null, bindData); - } - // fast path for `_.bind` - var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; - return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); - } - - /** - * Creates compiled iteration functions. - * - * @private - * @param {...Object} [options] The compile options object(s). - * @param {string} [options.array] Code to determine if the iterable is an array or array-like. - * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop. - * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration. - * @param {string} [options.args] A comma separated string of iteration function arguments. - * @param {string} [options.top] Code to execute before the iteration branches. - * @param {string} [options.loop] Code to execute in the object loop. - * @param {string} [options.bottom] Code to execute after the iteration branches. - * @returns {Function} Returns the compiled function. - */ - function createIterator() { - // data properties - iteratorData.shadowedProps = shadowedProps; - - // iterator options - iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = ''; - iteratorData.init = 'iterable'; - iteratorData.useHas = true; - - // merge options into a template data object - for (var object, index = 0; object = arguments[index]; index++) { - for (var key in object) { - iteratorData[key] = object[key]; - } - } - var args = iteratorData.args; - iteratorData.firstArg = /^[^,]+/.exec(args)[0]; - - // create the function factory - var factory = Function( - 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + - 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + - 'objectTypes, nonEnumProps, stringClass, stringProto, toString', - 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}' - ); - - // return the compiled function - return factory( - baseCreateCallback, errorClass, errorProto, hasOwnProperty, - indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto, - objectTypes, nonEnumProps, stringClass, stringProto, toString - ); - } - - /** - * Used by `escape` to convert characters to HTML entities. - * - * @private - * @param {string} match The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(match) { - return htmlEscapes[match]; - } - - /** - * Gets the appropriate "indexOf" function. If the `_.indexOf` method is - * customized, this method returns the custom method, otherwise it returns - * the `baseIndexOf` function. - * - * @private - * @returns {Function} Returns the "indexOf" function. - */ - function getIndexOf() { - var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; - return result; - } - - /** - * Checks if `value` is a native function. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. - */ - function isNative(value) { - return typeof value == 'function' && reNative.test(value); - } - - /** - * Sets `this` binding data on a given function. - * - * @private - * @param {Function} func The function to set data on. - * @param {Array} value The data array to set. - */ - var setBindData = !defineProperty ? noop : function(func, value) { - descriptor.value = value; - defineProperty(func, '__bindData__', descriptor); - descriptor.value = null; - }; - - /** - * A fallback implementation of `isPlainObject` which checks if a given value - * is an object created by the `Object` constructor, assuming objects created - * by the `Object` constructor have no inherited enumerable properties and that - * there are no `Object.prototype` extensions. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - */ - function shimIsPlainObject(value) { - var ctor, - result; - - // avoid non Object objects, `arguments` objects, and DOM elements - if (!(value && toString.call(value) == objectClass) || - (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) || - (!support.argsClass && isArguments(value)) || - (!support.nodeClass && isNode(value))) { - return false; - } - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - if (support.ownLast) { - forIn(value, function(value, key, object) { - result = hasOwnProperty.call(object, key); - return false; - }); - return result !== false; - } - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - forIn(value, function(value, key) { - result = key; - }); - return typeof result == 'undefined' || hasOwnProperty.call(value, result); - } - - /** - * Used by `unescape` to convert HTML entities to characters. - * - * @private - * @param {string} match The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(match) { - return htmlUnescapes[match]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if `value` is an `arguments` object. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. - * @example - * - * (function() { return _.isArguments(arguments); })(1, 2, 3); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == argsClass || false; - } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (!support.argsClass) { - isArguments = function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false; - }; - } - - /** - * Checks if `value` is an array. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an array, else `false`. - * @example - * - * (function() { return _.isArray(arguments); })(); - * // => false - * - * _.isArray([1, 2, 3]); - * // => true - */ - var isArray = nativeIsArray || function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == arrayClass || false; - }; - - /** - * A fallback implementation of `Object.keys` which produces an array of the - * given object's own enumerable property names. - * - * @private - * @type Function - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - */ - var shimKeys = createIterator({ - 'args': 'object', - 'init': '[]', - 'top': 'if (!(objectTypes[typeof object])) return result', - 'loop': 'result.push(index)' - }); - - /** - * Creates an array composed of the own enumerable property names of an object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - * @example - * - * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); - * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) - */ - var keys = !nativeKeys ? shimKeys : function(object) { - if (!isObject(object)) { - return []; - } - if ((support.enumPrototypes && typeof object == 'function') || - (support.nonEnumArgs && object.length && isArguments(object))) { - return shimKeys(object); - } - return nativeKeys(object); - }; - - /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ - var eachIteratorOptions = { - 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)", - 'array': "typeof length == 'number'", - 'keys': keys, - 'loop': 'if (callback(iterable[index], index, collection) === false) return result' - }; - - /** Reusable iterator options for `assign` and `defaults` */ - var defaultsIteratorOptions = { - 'args': 'object, source, guard', - 'top': - 'var args = arguments,\n' + - ' argsIndex = 0,\n' + - " argsLength = typeof guard == 'number' ? 2 : args.length;\n" + - 'while (++argsIndex < argsLength) {\n' + - ' iterable = args[argsIndex];\n' + - ' if (iterable && objectTypes[typeof iterable]) {', - 'keys': keys, - 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]", - 'bottom': ' }\n}' - }; - - /** Reusable iterator options for `forIn` and `forOwn` */ - var forOwnIteratorOptions = { - 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top, - 'array': false - }; - - /** - * Used to convert characters to HTML entities: - * - * Though the `>` character is escaped for symmetry, characters like `>` and `/` - * don't require escaping in HTML and have no special meaning unless they're part - * of a tag or an unquoted attribute value. - * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") - */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to convert HTML entities to characters */ - var htmlUnescapes = invert(htmlEscapes); - - /** Used to match HTML entities and HTML characters */ - var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'), - reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); - - /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the callback for each - * element in the collection. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @private - * @type Function - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - */ - var baseEach = createIterator(eachIteratorOptions); - - /*--------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources will overwrite property assignments of previous - * sources. If a callback is provided it will be executed to produce the - * assigned values. The callback is bound to `thisArg` and invoked with two - * arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @type Function - * @alias extend - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize assigning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); - * // => { 'name': 'fred', 'employer': 'slate' } - * - * var defaults = _.partialRight(_.assign, function(a, b) { - * return typeof a == 'undefined' ? b : a; - * }); - * - * var object = { 'name': 'barney' }; - * defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var assign = createIterator(defaultsIteratorOptions, { - 'top': - defaultsIteratorOptions.top.replace(';', - ';\n' + - "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" + - ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' + - "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" + - ' callback = args[--argsLength];\n' + - '}' - ), - 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]' - }); - - /** - * Creates a clone of `value`. If `isDeep` is `true` nested objects will also - * be cloned, otherwise they will be assigned by reference. If a callback - * is provided it will be executed to produce the cloned values. If the - * callback returns `undefined` cloning will be handled by the method instead. - * The callback is bound to `thisArg` and invoked with one argument; (value). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var shallow = _.clone(characters); - * shallow[0] === characters[0]; - * // => true - * - * var deep = _.clone(characters, true); - * deep[0] === characters[0]; - * // => false - * - * _.mixin({ - * 'clone': _.partialRight(_.clone, function(value) { - * return _.isElement(value) ? value.cloneNode(false) : undefined; - * }) - * }); - * - * var clone = _.clone(document.body); - * clone.childNodes.length; - * // => 0 - */ - function clone(value, isDeep, callback, thisArg) { - // allows working with "Collections" methods without using their `index` - // and `collection` arguments for `isDeep` and `callback` - if (typeof isDeep != 'boolean' && isDeep != null) { - thisArg = callback; - callback = isDeep; - isDeep = false; - } - return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates a deep clone of `value`. If a callback is provided it will be - * executed to produce the cloned values. If the callback returns `undefined` - * cloning will be handled by the method instead. The callback is bound to - * `thisArg` and invoked with one argument; (value). - * - * Note: This method is loosely based on the structured clone algorithm. Functions - * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and - * objects created by constructors other than `Object` are cloned to plain `Object` objects. - * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var deep = _.cloneDeep(characters); - * deep[0] === characters[0]; - * // => false - * - * var view = { - * 'label': 'docs', - * 'node': element - * }; - * - * var clone = _.cloneDeep(view, function(value) { - * return _.isElement(value) ? value.cloneNode(true) : undefined; - * }); - * - * clone.node == view.node; - * // => false - */ - function cloneDeep(value, callback, thisArg) { - return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); - } - - /** - * Creates an object that inherits from the given `prototype` object. If a - * `properties` object is provided its own enumerable properties are assigned - * to the created object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object for all destination properties that resolve to `undefined`. Once a - * property is set, additional defaults of the same property will be ignored. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param- {Object} [guard] Allows working with `_.reduce` without using its - * `key` and `object` arguments as sources. - * @returns {Object} Returns the destination object. - * @example - * - * var object = { 'name': 'barney' }; - * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } - */ - var defaults = createIterator(defaultsIteratorOptions); - - /** - * This method is like `_.findIndex` except that it returns the key of the - * first element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': false }, - * 'fred': { 'age': 40, 'blocked': true }, - * 'pebbles': { 'age': 1, 'blocked': false } - * }; - * - * _.findKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => 'barney' (property order is not guaranteed across environments) - * - * // using "_.where" callback shorthand - * _.findKey(characters, { 'age': 1 }); - * // => 'pebbles' - * - * // using "_.pluck" callback shorthand - * _.findKey(characters, 'blocked'); - * // => 'fred' - */ - function findKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwn(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * This method is like `_.findKey` except that it iterates over elements - * of a `collection` in the opposite order. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to search. - * @param {Function|Object|string} [callback=identity] The function called per - * iteration. If a property name or object is provided it will be used to - * create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {string|undefined} Returns the key of the found element, else `undefined`. - * @example - * - * var characters = { - * 'barney': { 'age': 36, 'blocked': true }, - * 'fred': { 'age': 40, 'blocked': false }, - * 'pebbles': { 'age': 1, 'blocked': true } - * }; - * - * _.findLastKey(characters, function(chr) { - * return chr.age < 40; - * }); - * // => returns `pebbles`, assuming `_.findKey` returns `barney` - * - * // using "_.where" callback shorthand - * _.findLastKey(characters, { 'age': 40 }); - * // => 'fred' - * - * // using "_.pluck" callback shorthand - * _.findLastKey(characters, 'blocked'); - * // => 'pebbles' - */ - function findLastKey(object, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forOwnRight(object, function(value, key, object) { - if (callback(value, key, object)) { - result = key; - return false; - } - }); - return result; - } - - /** - * Iterates over own and inherited enumerable properties of an object, - * executing the callback for each property. The callback is bound to `thisArg` - * and invoked with three arguments; (value, key, object). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forIn(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) - */ - var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, { - 'useHas': false - }); - - /** - * This method is like `_.forIn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forInRight(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move' - */ - function forInRight(object, callback, thisArg) { - var pairs = []; - - forIn(object, function(value, key) { - pairs.push(key, value); - }); - - var length = pairs.length; - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - if (callback(pairs[length--], pairs[length], object) === false) { - break; - } - } - return object; - } - - /** - * Iterates over own enumerable properties of an object, executing the callback - * for each property. The callback is bound to `thisArg` and invoked with three - * arguments; (value, key, object). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) - */ - var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions); - - /** - * This method is like `_.forOwn` except that it iterates over elements - * of a `collection` in the opposite order. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length' - */ - function forOwnRight(object, callback, thisArg) { - var props = keys(object), - length = props.length; - - callback = baseCreateCallback(callback, thisArg, 3); - while (length--) { - var key = props[length]; - if (callback(object[key], key, object) === false) { - break; - } - } - return object; - } - - /** - * Creates a sorted array of property names of all enumerable properties, - * own and inherited, of `object` that have function values. - * - * @static - * @memberOf _ - * @alias methods - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names that have function values. - * @example - * - * _.functions(_); - * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] - */ - function functions(object) { - var result = []; - forIn(object, function(value, key) { - if (isFunction(value)) { - result.push(key); - } - }); - return result.sort(); - } - - /** - * Checks if the specified property name exists as a direct property of `object`, - * instead of an inherited property. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to check. - * @returns {boolean} Returns `true` if key is a direct property, else `false`. - * @example - * - * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); - * // => true - */ - function has(object, key) { - return object ? hasOwnProperty.call(object, key) : false; - } - - /** - * Creates an object composed of the inverted keys and values of the given object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to invert. - * @returns {Object} Returns the created inverted object. - * @example - * - * _.invert({ 'first': 'fred', 'second': 'barney' }); - * // => { 'fred': 'first', 'barney': 'second' } - */ - function invert(object) { - var index = -1, - props = keys(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index]; - result[object[key]] = key; - } - return result; - } - - /** - * Checks if `value` is a boolean value. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`. - * @example - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - value && typeof value == 'object' && toString.call(value) == boolClass || false; - } - - /** - * Checks if `value` is a date. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a date, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - */ - function isDate(value) { - return value && typeof value == 'object' && toString.call(value) == dateClass || false; - } - - /** - * Checks if `value` is a DOM element. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - */ - function isElement(value) { - return value && value.nodeType === 1 || false; - } - - /** - * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a - * length of `0` and objects with no own enumerable properties are considered - * "empty". - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if the `value` is empty, else `false`. - * @example - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({}); - * // => true - * - * _.isEmpty(''); - * // => true - */ - function isEmpty(value) { - var result = true; - if (!value) { - return result; - } - var className = toString.call(value), - length = value.length; - - if ((className == arrayClass || className == stringClass || - (support.argsClass ? className == argsClass : isArguments(value))) || - (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { - return !length; - } - forOwn(value, function() { - return (result = false); - }); - return result; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent to each other. If a callback is provided it will be executed - * to compare values. If the callback returns `undefined` comparisons will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (a, b). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'name': 'fred' }; - * var copy = { 'name': 'fred' }; - * - * object == copy; - * // => false - * - * _.isEqual(object, copy); - * // => true - * - * var words = ['hello', 'goodbye']; - * var otherWords = ['hi', 'goodbye']; - * - * _.isEqual(words, otherWords, function(a, b) { - * var reGreet = /^(?:hello|hi)$/i, - * aGreet = _.isString(a) && reGreet.test(a), - * bGreet = _.isString(b) && reGreet.test(b); - * - * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; - * }); - * // => true - */ - function isEqual(a, b, callback, thisArg) { - return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); - } - - /** - * Checks if `value` is, or can be coerced to, a finite number. - * - * Note: This is not the same as native `isFinite` which will return true for - * booleans and empty strings. See http://es5.github.io/#x15.1.2.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is finite, else `false`. - * @example - * - * _.isFinite(-101); - * // => true - * - * _.isFinite('10'); - * // => true - * - * _.isFinite(true); - * // => false - * - * _.isFinite(''); - * // => false - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); - } - - /** - * Checks if `value` is a function. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - */ - function isFunction(value) { - return typeof value == 'function'; - } - // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value == 'function' && toString.call(value) == funcClass; - }; - } - - /** - * Checks if `value` is the language type of Object. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ - function isObject(value) { - // check if the value is the ECMAScript language type of Object - // http://es5.github.io/#x8 - // and avoid a V8 bug - // http://code.google.com/p/v8/issues/detail?id=2291 - return !!(value && objectTypes[typeof value]); - } - - /** - * Checks if `value` is `NaN`. - * - * Note: This is not the same as native `isNaN` which will return `true` for - * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // `NaN` as a primitive is the only value that is not equal to itself - // (perform the [[Class]] check first to avoid errors with some host objects in IE) - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(undefined); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is a number. - * - * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a number, else `false`. - * @example - * - * _.isNumber(8.4 * 5); - * // => true - */ - function isNumber(value) { - return typeof value == 'number' || - value && typeof value == 'object' && toString.call(value) == numberClass || false; - } - - /** - * Checks if `value` is an object created by the `Object` constructor. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * _.isPlainObject(new Shape); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - */ - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) { - return false; - } - var valueOf = value.valueOf, - objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? (value == objProto || getPrototypeOf(value) == objProto) - : shimIsPlainObject(value); - }; - - /** - * Checks if `value` is a regular expression. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`. - * @example - * - * _.isRegExp(/fred/); - * // => true - */ - function isRegExp(value) { - return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false; - } - - /** - * Checks if `value` is a string. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a string, else `false`. - * @example - * - * _.isString('fred'); - * // => true - */ - function isString(value) { - return typeof value == 'string' || - value && typeof value == 'object' && toString.call(value) == stringClass || false; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - */ - function isUndefined(value) { - return typeof value == 'undefined'; - } - - /** - * Creates an object with the same keys as `object` and values generated by - * running each own enumerable property of `object` through the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new object with values of the results of each `callback` execution. - * @example - * - * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - * - * var characters = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // using "_.pluck" callback shorthand - * _.mapValues(characters, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } - */ - function mapValues(object, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - forOwn(object, function(value, key, object) { - result[key] = callback(value, key, object); - }); - return result; - } - - /** - * Recursively merges own enumerable properties of the source object(s), that - * don't resolve to `undefined` into the destination object. Subsequent sources - * will overwrite property assignments of previous sources. If a callback is - * provided it will be executed to produce the merged values of the destination - * and source properties. If the callback returns `undefined` merging will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize merging properties. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * var names = { - * 'characters': [ - * { 'name': 'barney' }, - * { 'name': 'fred' } - * ] - * }; - * - * var ages = { - * 'characters': [ - * { 'age': 36 }, - * { 'age': 40 } - * ] - * }; - * - * _.merge(names, ages); - * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } - * - * var food = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var otherFood = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.merge(food, otherFood, function(a, b) { - * return _.isArray(a) ? a.concat(b) : undefined; - * }); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } - */ - function merge(object) { - var args = arguments, - length = 2; - - if (!isObject(object)) { - return object; - } - // allows working with `_.reduce` and `_.reduceRight` without using - // their `index` and `collection` arguments - if (typeof args[2] != 'number') { - length = args.length; - } - if (length > 3 && typeof args[length - 2] == 'function') { - var callback = baseCreateCallback(args[--length - 1], args[length--], 2); - } else if (length > 2 && typeof args[length - 1] == 'function') { - callback = args[--length]; - } - var sources = slice(arguments, 1, length), - index = -1, - stackA = getArray(), - stackB = getArray(); - - while (++index < length) { - baseMerge(object, sources[index], callback, stackA, stackB); - } - releaseArray(stackA); - releaseArray(stackB); - return object; - } - - /** - * Creates a shallow clone of `object` excluding the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` omitting the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The properties to omit or the - * function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object without the omitted properties. - * @example - * - * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); - * // => { 'name': 'fred' } - * - * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { - * return typeof value == 'number'; - * }); - * // => { 'name': 'fred' } - */ - function omit(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var props = []; - forIn(object, function(value, key) { - props.push(key); - }); - props = baseDifference(props, baseFlatten(arguments, true, false, 1)); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - result[key] = object[key]; - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (!callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * Creates a two dimensional array of an object's key-value pairs, - * i.e. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns new array of key-value pairs. - * @example - * - * _.pairs({ 'barney': 36, 'fred': 40 }); - * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) - */ - function pairs(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; - } - return result; - } - - /** - * Creates a shallow clone of `object` composed of the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` picking the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The function called per - * iteration or property names to pick, specified as individual property - * names or arrays of property names. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object composed of the picked properties. - * @example - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name'); - * // => { 'name': 'fred' } - * - * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) { - * return key.charAt(0) != '_'; - * }); - * // => { 'name': 'fred' } - */ - function pick(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var index = -1, - props = baseFlatten(arguments, true, false, 1), - length = isObject(object) ? props.length : 0; - - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * An alternative to `_.reduce` this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable properties through a callback, with each callback execution - * potentially mutating the `accumulator` object. The callback is bound to - * `thisArg` and invoked with four arguments; (accumulator, value, key, object). - * Callbacks may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) { - * num *= num; - * if (num % 2) { - * return result.push(num) < 3; - * } - * }); - * // => [1, 9, 25] - * - * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * }); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function transform(object, callback, accumulator, thisArg) { - var isArr = isArray(object); - if (accumulator == null) { - if (isArr) { - accumulator = []; - } else { - var ctor = object && object.constructor, - proto = ctor && ctor.prototype; - - accumulator = baseCreate(proto); - } - } - if (callback) { - callback = lodash.createCallback(callback, thisArg, 4); - (isArr ? baseEach : forOwn)(object, function(value, index, object) { - return callback(accumulator, value, index, object); - }); - } - return accumulator; - } - - /** - * Creates an array composed of the own enumerable property values of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property values. - * @example - * - * _.values({ 'one': 1, 'two': 2, 'three': 3 }); - * // => [1, 2, 3] (property order is not guaranteed across environments) - */ - function values(object) { - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array of elements from the specified indexes, or keys, of the - * `collection`. Indexes may be specified as individual arguments or as arrays - * of indexes. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {...(number|number[]|string|string[])} [index] The indexes of `collection` - * to retrieve, specified as individual indexes or arrays of indexes. - * @returns {Array} Returns a new array of elements corresponding to the - * provided indexes. - * @example - * - * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]); - * // => ['a', 'c', 'e'] - * - * _.at(['fred', 'barney', 'pebbles'], 0, 2); - * // => ['fred', 'pebbles'] - */ - function at(collection) { - var args = arguments, - index = -1, - props = baseFlatten(args, true, false, 1), - length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length, - result = Array(length); - - if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - while(++index < length) { - result[index] = collection[props[index]]; - } - return result; - } - - /** - * Checks if a given value is present in a collection using strict equality - * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the - * offset from the end of the collection. - * - * @static - * @memberOf _ - * @alias include - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {*} target The value to check for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {boolean} Returns `true` if the `target` element is found, else `false`. - * @example - * - * _.contains([1, 2, 3], 1); - * // => true - * - * _.contains([1, 2, 3], 1, 2); - * // => false - * - * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.contains('pebbles', 'eb'); - * // => true - */ - function contains(collection, target, fromIndex) { - var index = -1, - indexOf = getIndexOf(), - length = collection ? collection.length : 0, - result = false; - - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; - if (isArray(collection)) { - result = indexOf(collection, target, fromIndex) > -1; - } else if (typeof length == 'number') { - result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; - } else { - baseEach(collection, function(value) { - if (++index >= fromIndex) { - return !(result = value === target); - } - }); - } - return result; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through the callback. The corresponding value - * of each key is the number of times the key was returned by the callback. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': 1, '6': 2 } - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); - }); - - /** - * Checks if the given callback returns truey value for **all** elements of - * a collection. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias all - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if all elements passed the callback check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes']); - * // => false - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.every(characters, 'age'); - * // => true - * - * // using "_.where" callback shorthand - * _.every(characters, { 'age': 36 }); - * // => false - */ - function every(collection, callback, thisArg) { - var result = true; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (!(result = !!callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning an array of all elements - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias select - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that passed the callback check. - * @example - * - * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [2, 4, 6] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.filter(characters, 'blocked'); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - * - * // using "_.where" callback shorthand - * _.filter(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - */ - function filter(collection, callback, thisArg) { - var result = []; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - result.push(value); - } - } - } else { - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result.push(value); - } - }); - } - return result; - } - - /** - * Iterates over elements of a collection, returning the first element that - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias detect, findWhere - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.find(characters, function(chr) { - * return chr.age < 40; - * }); - * // => { 'name': 'barney', 'age': 36, 'blocked': false } - * - * // using "_.where" callback shorthand - * _.find(characters, { 'age': 1 }); - * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } - * - * // using "_.pluck" callback shorthand - * _.find(characters, 'blocked'); - * // => { 'name': 'fred', 'age': 40, 'blocked': true } - */ - function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - return value; - } - } - } else { - var result; - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - } - - /** - * This method is like `_.find` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(num) { - * return num % 2 == 1; - * }); - * // => 3 - */ - function findLast(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - forEachRight(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - - /** - * Iterates over elements of a collection, executing the callback for each - * element. The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * Note: As with other "Collections" methods, objects with a `length` property - * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` - * may be used for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); - * // => logs each number and returns '1,2,3' - * - * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); - * // => logs each number and returns the object (property order is not guaranteed across environments) - */ - function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (callback(collection[index], index, collection) === false) { - break; - } - } - } else { - baseEach(collection, callback, thisArg); - } - return collection; - } - - /** - * This method is like `_.forEach` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias eachRight - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(','); - * // => logs each number from right to left and returns '3,2,1' - */ - function forEachRight(collection, callback, thisArg) { - var iterable = collection, - length = collection ? collection.length : 0; - - callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (length--) { - if (callback(collection[length], length, collection) === false) { - break; - } - } - } else { - if (typeof length != 'number') { - var props = keys(collection); - length = props.length; - } else if (support.unindexedChars && isString(collection)) { - iterable = collection.split(''); - } - baseEach(collection, function(value, key, collection) { - key = props ? props[--length] : --length; - return callback(iterable[key], key, collection); - }); - } - return collection; - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of a collection through the callback. The corresponding value - * of each key is an array of the elements responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false` - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * // using "_.pluck" callback shorthand - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of the collection through the given callback. The corresponding - * value of each key is the last element responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var keys = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.indexBy(keys, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - */ - var indexBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Invokes the method named by `methodName` on each element in the `collection` - * returning an array of the results of each invoked method. Additional arguments - * will be provided to each invoked method. If `methodName` is a function it - * will be invoked for, and `this` bound to, each element in the `collection`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|string} methodName The name of the method to invoke or - * the function invoked per iteration. - * @param {...*} [arg] Arguments to invoke the method with. - * @returns {Array} Returns a new array of the results of each invoked method. - * @example - * - * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invoke([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - function invoke(collection, methodName) { - var args = slice(arguments, 2), - index = -1, - isFunc = typeof methodName == 'function', - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args); - }); - return result; - } - - /** - * Creates an array of values by running each element in the collection - * through the callback. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias collect - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of the results of each `callback` execution. - * @example - * - * _.map([1, 2, 3], function(num) { return num * 3; }); - * // => [3, 6, 9] - * - * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); - * // => [3, 6, 9] (property order is not guaranteed across environments) - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(characters, 'name'); - * // => ['barney', 'fred'] - */ - function map(collection, callback, thisArg) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - callback = lodash.createCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (++index < length) { - result[index] = callback(collection[index], index, collection); - } - } else { - baseEach(collection, function(value, key, collection) { - result[++index] = callback(value, key, collection); - }); - } - return result; - } - - /** - * Retrieves the maximum value of a collection. If the collection is empty or - * falsey `-Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.max(characters, function(chr) { return chr.age; }); - * // => { 'name': 'fred', 'age': 40 }; - * - * // using "_.pluck" callback shorthand - * _.max(characters, 'age'); - * // => { 'name': 'fred', 'age': 40 }; - */ - function max(collection, callback, thisArg) { - var computed = -Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value > result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current > computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the minimum value of a collection. If the collection is empty or - * falsey `Infinity` is returned. If a callback is provided it will be executed - * for each value in the collection to generate the criterion by which the value - * is ranked. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.min(characters, function(chr) { return chr.age; }); - * // => { 'name': 'barney', 'age': 36 }; - * - * // using "_.pluck" callback shorthand - * _.min(characters, 'age'); - * // => { 'name': 'barney', 'age': 36 }; - */ - function min(collection, callback, thisArg) { - var computed = Infinity, - result = computed; - - // allows working with functions like `_.map` without using - // their `index` argument as a callback - if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { - callback = null; - } - if (callback == null && isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (value < result) { - result = value; - } - } - } else { - callback = (callback == null && isString(collection)) - ? charAtCallback - : lodash.createCallback(callback, thisArg, 3); - - baseEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current < computed) { - computed = current; - result = value; - } - }); - } - return result; - } - - /** - * Retrieves the value of a specified property from all elements in the collection. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {string} property The name of the property to pluck. - * @returns {Array} Returns a new array of property values. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * _.pluck(characters, 'name'); - * // => ['barney', 'fred'] - */ - var pluck = map; - - /** - * Reduces a collection to a value which is the accumulated result of running - * each element in the collection through the callback, where each successive - * callback execution consumes the return value of the previous execution. If - * `accumulator` is not provided the first element of the collection will be - * used as the initial `accumulator` value. The callback is bound to `thisArg` - * and invoked with four arguments; (accumulator, value, index|key, collection). - * - * @static - * @memberOf _ - * @alias foldl, inject - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var sum = _.reduce([1, 2, 3], function(sum, num) { - * return sum + num; - * }); - * // => 6 - * - * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { - * result[key] = num * 3; - * return result; - * }, {}); - * // => { 'a': 3, 'b': 6, 'c': 9 } - */ - function reduce(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - if (noaccum) { - accumulator = collection[++index]; - } - while (++index < length) { - accumulator = callback(accumulator, collection[index], index, collection); - } - } else { - baseEach(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection) - }); - } - return accumulator; - } - - /** - * This method is like `_.reduce` except that it iterates over elements - * of a `collection` from right to left. - * - * @static - * @memberOf _ - * @alias foldr - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [accumulator] Initial value of the accumulator. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the accumulated value. - * @example - * - * var list = [[0, 1], [2, 3], [4, 5]]; - * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = lodash.createCallback(callback, thisArg, 4); - forEachRight(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The opposite of `_.filter` this method returns the elements of a - * collection that the callback does **not** return truey for. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that failed the callback check. - * @example - * - * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [1, 3, 5] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.reject(characters, 'blocked'); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] - * - * // using "_.where" callback shorthand - * _.reject(characters, { 'age': 36 }); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - */ - function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - return filter(collection, function(value, index, collection) { - return !callback(value, index, collection); - }); - } - - /** - * Retrieves a random element or `n` random elements from a collection. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to sample. - * @param {number} [n] The number of elements to sample. - * @param- {Object} [guard] Allows working with functions like `_.map` - * without using their `index` arguments as `n`. - * @returns {Array} Returns the random sample(s) of `collection`. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - * - * _.sample([1, 2, 3, 4], 2); - * // => [3, 1] - */ - function sample(collection, n, guard) { - if (collection && typeof collection.length != 'number') { - collection = values(collection); - } else if (support.unindexedChars && isString(collection)) { - collection = collection.split(''); - } - if (n == null || guard) { - return collection ? collection[baseRandom(0, collection.length - 1)] : undefined; - } - var result = shuffle(collection); - result.length = nativeMin(nativeMax(0, n), result.length); - return result; - } - - /** - * Creates an array of shuffled values, using a version of the Fisher-Yates - * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to shuffle. - * @returns {Array} Returns a new shuffled collection. - * @example - * - * _.shuffle([1, 2, 3, 4, 5, 6]); - * // => [4, 1, 6, 3, 5, 2] - */ - function shuffle(collection) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - forEach(collection, function(value) { - var rand = baseRandom(0, ++index); - result[index] = result[rand]; - result[rand] = value; - }); - return result; - } - - /** - * Gets the size of the `collection` by returning `collection.length` for arrays - * and array-like objects or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns `collection.length` or number of own enumerable properties. - * @example - * - * _.size([1, 2]); - * // => 2 - * - * _.size({ 'one': 1, 'two': 2, 'three': 3 }); - * // => 3 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - var length = collection ? collection.length : 0; - return typeof length == 'number' ? length : keys(collection).length; - } - - /** - * Checks if the callback returns a truey value for **any** element of a - * collection. The function returns as soon as it finds a passing value and - * does not iterate over the entire collection. The callback is bound to - * `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias any - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if any element passed the callback check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.some(characters, 'blocked'); - * // => true - * - * // using "_.where" callback shorthand - * _.some(characters, { 'age': 1 }); - * // => false - */ - function some(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if ((result = callback(collection[index], index, collection))) { - break; - } - } - } else { - baseEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); - } - return !!result; - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection through the callback. This method - * performs a stable sort, that is, it will preserve the original sort order - * of equal elements. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an array of property names is provided for `callback` the collection - * will be sorted by each property value. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Array|Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of sorted elements. - * @example - * - * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); - * // => [3, 1, 2] - * - * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); - * // => [3, 1, 2] - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 26 }, - * { 'name': 'fred', 'age': 30 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(_.sortBy(characters, 'age'), _.values); - * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]] - * - * // sorting by multiple properties - * _.map(_.sortBy(characters, ['name', 'age']), _.values); - * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]] - */ - function sortBy(collection, callback, thisArg) { - var index = -1, - isArr = isArray(callback), - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - if (!isArr) { - callback = lodash.createCallback(callback, thisArg, 3); - } - forEach(collection, function(value, key, collection) { - var object = result[++index] = getObject(); - if (isArr) { - object.criteria = map(callback, function(key) { return value[key]; }); - } else { - (object.criteria = getArray())[0] = callback(value, key, collection); - } - object.index = index; - object.value = value; - }); - - length = result.length; - result.sort(compareAscending); - while (length--) { - var object = result[length]; - result[length] = object.value; - if (!isArr) { - releaseArray(object.criteria); - } - releaseObject(object); - } - return result; - } - - /** - * Converts the `collection` to an array. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to convert. - * @returns {Array} Returns the new converted array. - * @example - * - * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); - * // => [2, 3, 4] - */ - function toArray(collection) { - if (collection && typeof collection.length == 'number') { - return (support.unindexedChars && isString(collection)) - ? collection.split('') - : slice(collection); - } - return values(collection); - } - - /** - * Performs a deep comparison of each element in a `collection` to the given - * `properties` object, returning an array of all elements that have equivalent - * property values. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Object} props The object of property values to filter by. - * @returns {Array} Returns a new array of elements that have the given properties. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * _.where(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] - * - * _.where(characters, { 'pets': ['dino'] }); - * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }] - */ - var where = filter; - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are all falsey. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result.push(value); - } - } - return result; - } - - /** - * Creates an array excluding all values of the provided arrays using strict - * equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to process. - * @param {...Array} [values] The arrays of values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); - * // => [1, 3, 4] - */ - function difference(array) { - return baseDifference(array, baseFlatten(arguments, true, true, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element that passes the callback check, instead of the element itself. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; - * - * _.findIndex(characters, function(chr) { - * return chr.age < 20; - * }); - * // => 2 - * - * // using "_.where" callback shorthand - * _.findIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findIndex(characters, 'blocked'); - * // => 1 - */ - function findIndex(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - if (callback(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of a `collection` from right to left. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': true }, - * { 'name': 'fred', 'age': 40, 'blocked': false }, - * { 'name': 'pebbles', 'age': 1, 'blocked': true } - * ]; - * - * _.findLastIndex(characters, function(chr) { - * return chr.age > 30; - * }); - * // => 1 - * - * // using "_.where" callback shorthand - * _.findLastIndex(characters, { 'age': 36 }); - * // => 0 - * - * // using "_.pluck" callback shorthand - * _.findLastIndex(characters, 'blocked'); - * // => 2 - */ - function findLastIndex(array, callback, thisArg) { - var length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg, 3); - while (length--) { - if (callback(array[length], length, array)) { - return length; - } - } - return -1; - } - - /** - * Gets the first element or first `n` elements of an array. If a callback - * is provided elements at the beginning of the array are returned as long - * as the callback returns truey. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias head, take - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the first element(s) of `array`. - * @example - * - * _.first([1, 2, 3]); - * // => 1 - * - * _.first([1, 2, 3], 2); - * // => [1, 2] - * - * _.first([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [1, 2] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.first(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); - * // => ['barney', 'fred'] - */ - function first(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = -1; - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[0] : undefined; - } - } - return slice(array, 0, nativeMin(nativeMax(0, n), length)); - } - - /** - * Flattens a nested array (the nesting can be to any depth). If `isShallow` - * is truey, the array will only be flattened a single level. If a callback - * is provided each element of the array is passed through the callback before - * flattening. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new flattened array. - * @example - * - * _.flatten([1, [2], [3, [[4]]]]); - * // => [1, 2, 3, 4]; - * - * _.flatten([1, [2], [3, [[4]]]], true); - * // => [1, 2, 3, [[4]]]; - * - * var characters = [ - * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * // using "_.pluck" callback shorthand - * _.flatten(characters, 'pets'); - * // => ['hoppy', 'baby puss', 'dino'] - */ - function flatten(array, isShallow, callback, thisArg) { - // juggle arguments - if (typeof isShallow != 'boolean' && isShallow != null) { - thisArg = callback; - callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; - isShallow = false; - } - if (callback != null) { - array = map(array, callback, thisArg); - } - return baseFlatten(array, isShallow); - } - - /** - * Gets the index at which the first occurrence of `value` is found using - * strict equality for comparisons, i.e. `===`. If the array is already sorted - * providing `true` for `fromIndex` will run a faster binary search. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=0] The index to search from or `true` - * to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2); - * // => 1 - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 4 - * - * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); - * // => 2 - */ - function indexOf(array, value, fromIndex) { - if (typeof fromIndex == 'number') { - var length = array ? array.length : 0; - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); - } else if (fromIndex) { - var index = sortedIndex(array, value); - return array[index] === value ? index : -1; - } - return baseIndexOf(array, value, fromIndex); - } - - /** - * Gets all but the last element or last `n` elements of an array. If a - * callback is provided elements at the end of the array are excluded from - * the result as long as the callback returns truey. The callback is bound - * to `thisArg` and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - * - * _.initial([1, 2, 3], 2); - * // => [1] - * - * _.initial([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [1] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.initial(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }] - * - * // using "_.where" callback shorthand - * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name'); - * // => ['barney', 'fred'] - */ - function initial(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : callback || n; - } - return slice(array, 0, nativeMin(nativeMax(0, length - n), length)); - } - - /** - * Creates an array of unique values present in all provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of shared values. - * @example - * - * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2] - */ - function intersection() { - var args = [], - argsIndex = -1, - argsLength = arguments.length, - caches = getArray(), - indexOf = getIndexOf(), - trustIndexOf = indexOf === baseIndexOf, - seen = getArray(); - - while (++argsIndex < argsLength) { - var value = arguments[argsIndex]; - if (isArray(value) || isArguments(value)) { - args.push(value); - caches.push(trustIndexOf && value.length >= largeArraySize && - createCache(argsIndex ? args[argsIndex] : seen)); - } - } - var array = args[0], - index = -1, - length = array ? array.length : 0, - result = []; - - outer: - while (++index < length) { - var cache = caches[0]; - value = array[index]; - - if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { - argsIndex = argsLength; - (cache || seen).push(value); - while (--argsIndex) { - cache = caches[argsIndex]; - if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { - continue outer; - } - } - result.push(value); - } - } - while (argsLength--) { - cache = caches[argsLength]; - if (cache) { - releaseObject(cache); - } - } - releaseArray(caches); - releaseArray(seen); - return result; - } - - /** - * Gets the last element or last `n` elements of an array. If a callback is - * provided elements at the end of the array are returned as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the last element(s) of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - * - * _.last([1, 2, 3], 2); - * // => [2, 3] - * - * _.last([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [2, 3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.last(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.last(characters, { 'employer': 'na' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function last(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; - } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[length - 1] : undefined; - } - } - return slice(array, nativeMax(0, length - n)); - } - - /** - * Gets the index at which the last occurrence of `value` is found using strict - * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used - * as the offset from the end of the collection. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. - * @example - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); - * // => 4 - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var index = array ? array.length : 0; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Removes all provided values from the given array using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {...*} [value] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * _.pull(array, 2, 3); - * console.log(array); - * // => [1, 1] - */ - function pull(array) { - var args = arguments, - argsIndex = 0, - argsLength = args.length, - length = array ? array.length : 0; - - while (++argsIndex < argsLength) { - var index = -1, - value = args[argsIndex]; - while (++index < length) { - if (array[index] === value) { - splice.call(array, index--, 1); - length--; - } - } - } - return array; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to but not including `end`. If `start` is less than `stop` a - * zero-length range is created unless a negative `step` is specified. - * - * @static - * @memberOf _ - * @category Arrays - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns a new range array. - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - function range(start, end, step) { - start = +start || 0; - step = typeof step == 'number' ? step : (+step || 1); - - if (end == null) { - end = start; - start = 0; - } - // use `Array(length)` so engines like Chakra and V8 avoid slower modes - // http://youtu.be/XAqIpGU8ZZk#t=17m25s - var index = -1, - length = nativeMax(0, ceil((end - start) / (step || 1))), - result = Array(length); - - while (++index < length) { - result[index] = start; - start += step; - } - return result; - } - - /** - * Removes all elements from an array that the callback returns truey for - * and returns an array of removed elements. The callback is bound to `thisArg` - * and invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to modify. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4, 5, 6]; - * var evens = _.remove(array, function(num) { return num % 2 == 0; }); - * - * console.log(array); - * // => [1, 3, 5] - * - * console.log(evens); - * // => [2, 4, 6] - */ - function remove(array, callback, thisArg) { - var index = -1, - length = array ? array.length : 0, - result = []; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length) { - var value = array[index]; - if (callback(value, index, array)) { - result.push(value); - splice.call(array, index--, 1); - length--; - } - } - return result; - } - - /** - * The opposite of `_.initial` this method gets all but the first element or - * first `n` elements of an array. If a callback function is provided elements - * at the beginning of the array are excluded from the result as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias drop, tail - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback=1] The function called - * per element or the number of elements to exclude. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a slice of `array`. - * @example - * - * _.rest([1, 2, 3]); - * // => [2, 3] - * - * _.rest([1, 2, 3], 2); - * // => [3] - * - * _.rest([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; - * - * // using "_.pluck" callback shorthand - * _.pluck(_.rest(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] - * - * // using "_.where" callback shorthand - * _.rest(characters, { 'employer': 'slate' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] - */ - function rest(array, callback, thisArg) { - if (typeof callback != 'number' && callback != null) { - var n = 0, - index = -1, - length = array ? array.length : 0; - - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; - } - } else { - n = (callback == null || thisArg) ? 1 : nativeMax(0, callback); - } - return slice(array, n); - } - - /** - * Uses a binary search to determine the smallest index at which a value - * should be inserted into a given sorted array in order to maintain the sort - * order of the array. If a callback is provided it will be executed for - * `value` and each element of `array` to compute their sort ranking. The - * callback is bound to `thisArg` and invoked with one argument; (value). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([20, 30, 50], 40); - * // => 2 - * - * // using "_.pluck" callback shorthand - * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 2 - * - * var dict = { - * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } - * }; - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return dict.wordToNumber[word]; - * }); - * // => 2 - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return this.wordToNumber[word]; - * }, dict); - * // => 2 - */ - function sortedIndex(array, value, callback, thisArg) { - var low = 0, - high = array ? array.length : low; - - // explicitly reference `identity` for better inlining in Firefox - callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; - value = callback(value); - - while (low < high) { - var mid = (low + high) >>> 1; - (callback(array[mid]) < value) - ? low = mid + 1 - : high = mid; - } - return low; - } - - /** - * Creates an array of unique values, in order, of the provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of combined values. - * @example - * - * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); - * // => [1, 2, 3, 5, 4] - */ - function union() { - return baseUniq(baseFlatten(arguments, true, true)); - } - - /** - * Creates a duplicate-value-free version of an array using strict equality - * for comparisons, i.e. `===`. If the array is sorted, providing - * `true` for `isSorted` will use a faster algorithm. If a callback is provided - * each element of `array` is passed through the callback before uniqueness - * is computed. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias unique - * @category Arrays - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a duplicate-value-free array. - * @example - * - * _.uniq([1, 2, 1, 3, 1]); - * // => [1, 2, 3] - * - * _.uniq([1, 1, 2, 2, 3], true); - * // => [1, 2, 3] - * - * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); - * // => ['A', 'b', 'C'] - * - * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); - * // => [1, 2.5, 3] - * - * // using "_.pluck" callback shorthand - * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniq(array, isSorted, callback, thisArg) { - // juggle arguments - if (typeof isSorted != 'boolean' && isSorted != null) { - thisArg = callback; - callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; - isSorted = false; - } - if (callback != null) { - callback = lodash.createCallback(callback, thisArg, 3); - } - return baseUniq(array, isSorted, callback); - } - - /** - * Creates an array excluding all provided values using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to filter. - * @param {...*} [value] The values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); - * // => [2, 3, 4] - */ - function without(array) { - return baseDifference(array, slice(arguments, 1)); - } - - /** - * Creates an array that is the symmetric difference of the provided arrays. - * See http://en.wikipedia.org/wiki/Symmetric_difference. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of values. - * @example - * - * _.xor([1, 2, 3], [5, 2, 1, 4]); - * // => [3, 5, 4] - * - * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]); - * // => [1, 4, 5] - */ - function xor() { - var index = -1, - length = arguments.length; - - while (++index < length) { - var array = arguments[index]; - if (isArray(array) || isArguments(array)) { - var result = result - ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result))) - : array; - } - } - return result || []; - } - - /** - * Creates an array of grouped elements, the first of which contains the first - * elements of the given arrays, the second of which contains the second - * elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @alias unzip - * @category Arrays - * @param {...Array} [array] Arrays to process. - * @returns {Array} Returns a new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - function zip() { - var array = arguments.length > 1 ? arguments : arguments[0], - index = -1, - length = array ? max(pluck(array, 'length')) : 0, - result = Array(length < 0 ? 0 : length); - - while (++index < length) { - result[index] = pluck(array, index); - } - return result; - } - - /** - * Creates an object composed from arrays of `keys` and `values`. Provide - * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]` - * or two arrays, one of `keys` and one of corresponding `values`. - * - * @static - * @memberOf _ - * @alias object - * @category Arrays - * @param {Array} keys The array of keys. - * @param {Array} [values=[]] The array of values. - * @returns {Object} Returns an object composed of the given keys and - * corresponding values. - * @example - * - * _.zipObject(['fred', 'barney'], [30, 40]); - * // => { 'fred': 30, 'barney': 40 } - */ - function zipObject(keys, values) { - var index = -1, - length = keys ? keys.length : 0, - result = {}; - - if (!values && length && !isArray(keys[0])) { - values = []; - } - while (++index < length) { - var key = keys[index]; - if (values) { - result[key] = values[index]; - } else if (key) { - result[key[0]] = key[1]; - } - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that executes `func`, with the `this` binding and - * arguments of the created function, only after being called `n` times. - * - * @static - * @memberOf _ - * @category Functions - * @param {number} n The number of times the function must be called before - * `func` is executed. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('Done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => logs 'Done saving!', after all saves have completed - */ - function after(n, func) { - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any additional `bind` arguments to those - * provided to the bound function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to bind. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var func = function(greeting) { - * return greeting + ' ' + this.name; - * }; - * - * func = _.bind(func, { 'name': 'fred' }, 'hi'); - * func(); - * // => 'hi fred' - */ - function bind(func, thisArg) { - return arguments.length > 2 - ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) - : createWrapper(func, 1, null, null, thisArg); - } - - /** - * Binds methods of an object to the object itself, overwriting the existing - * method. Method names may be specified as individual arguments or as arrays - * of method names. If no method names are provided all the function properties - * of `object` will be bound. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...string} [methodName] The object method names to - * bind, specified as individual method names or arrays of method names. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'onClick': function() { console.log('clicked ' + this.label); } - * }; - * - * _.bindAll(view); - * jQuery('#docs').on('click', view.onClick); - * // => logs 'clicked docs', when the button is clicked - */ - function bindAll(object) { - var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object), - index = -1, - length = funcs.length; - - while (++index < length) { - var key = funcs[index]; - object[key] = createWrapper(object[key], 1, null, null, object); - } - return object; - } - - /** - * Creates a function that, when called, invokes the method at `object[key]` - * and prepends any additional `bindKey` arguments to those provided to the bound - * function. This method differs from `_.bind` by allowing bound functions to - * reference methods that will be redefined or don't yet exist. - * See http://michaux.ca/articles/lazy-function-definition-pattern. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object the method belongs to. - * @param {string} key The key of the method. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'name': 'fred', - * 'greet': function(greeting) { - * return greeting + ' ' + this.name; - * } - * }; - * - * var func = _.bindKey(object, 'greet', 'hi'); - * func(); - * // => 'hi fred' - * - * object.greet = function(greeting) { - * return greeting + 'ya ' + this.name + '!'; - * }; - * - * func(); - * // => 'hiya fred!' - */ - function bindKey(object, key) { - return arguments.length > 2 - ? createWrapper(key, 19, slice(arguments, 2), null, object) - : createWrapper(key, 3, null, null, object); - } - - /** - * Creates a function that is the composition of the provided functions, - * where each function consumes the return value of the function that follows. - * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - * Each function is executed with the `this` binding of the composed function. - * - * @static - * @memberOf _ - * @category Functions - * @param {...Function} [func] Functions to compose. - * @returns {Function} Returns the new composed function. - * @example - * - * var realNameMap = { - * 'pebbles': 'penelope' - * }; - * - * var format = function(name) { - * name = realNameMap[name.toLowerCase()] || name; - * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); - * }; - * - * var greet = function(formatted) { - * return 'Hiya ' + formatted + '!'; - * }; - * - * var welcome = _.compose(greet, format); - * welcome('pebbles'); - * // => 'Hiya Penelope!' - */ - function compose() { - var funcs = arguments, - length = funcs.length; - - while (length--) { - if (!isFunction(funcs[length])) { - throw new TypeError; - } - } - return function() { - var args = arguments, - length = funcs.length; - - while (length--) { - args = [funcs[length].apply(this, args)]; - } - return args[0]; - }; - } - - /** - * Creates a function which accepts one or more arguments of `func` that when - * invoked either executes `func` returning its result, if all `func` arguments - * have been provided, or returns a function that accepts one or more of the - * remaining `func` arguments, and so on. The arity of `func` can be specified - * if `func.length` is not sufficient. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @returns {Function} Returns the new curried function. - * @example - * - * var curried = _.curry(function(a, b, c) { - * console.log(a + b + c); - * }); - * - * curried(1)(2)(3); - * // => 6 - * - * curried(1, 2)(3); - * // => 6 - * - * curried(1, 2, 3); - * // => 6 - */ - function curry(func, arity) { - arity = typeof arity == 'number' ? arity : (+arity || func.length); - return createWrapper(func, 4, null, null, null, arity); - } - - /** - * Creates a function that will delay the execution of `func` until after - * `wait` milliseconds have elapsed since the last time it was invoked. - * Provide an options object to indicate that `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. Subsequent calls - * to the debounced function will return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the debounced function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to debounce. - * @param {number} wait The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // avoid costly calculations while the window size is in flux - * var lazyLayout = _.debounce(calculateLayout, 150); - * jQuery(window).on('resize', lazyLayout); - * - * // execute `sendMail` when the click event is fired, debouncing subsequent calls - * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * }); - * - * // ensure `batchLog` is executed once after 1 second of debounced calls - * var source = new EventSource('/stream'); - * source.addEventListener('message', _.debounce(batchLog, 250, { - * 'maxWait': 1000 - * }, false); - */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - wait = nativeMax(0, wait) || 0; - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = options.leading; - maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); - trailing = 'trailing' in options ? options.trailing : trailing; - } - var delayed = function() { - var remaining = wait - (now() - stamp); - if (remaining <= 0) { - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - var isCalled = trailingCall; - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - } else { - timeoutId = setTimeout(delayed, remaining); - } - }; - - var maxDelayed = function() { - if (timeoutId) { - clearTimeout(timeoutId); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (trailing || (maxWait !== wait)) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - }; - - return function() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0; - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - return result; - }; - } - - /** - * Defers executing the `func` function until the current call stack has cleared. - * Additional arguments will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to defer. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { console.log(text); }, 'deferred'); - * // logs 'deferred' after one or more milliseconds - */ - function defer(func) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 1); - return setTimeout(function() { func.apply(undefined, args); }, 1); - } - - /** - * Executes the `func` function after `wait` milliseconds. Additional arguments - * will be provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay execution. - * @param {...*} [arg] Arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { console.log(text); }, 1000, 'later'); - * // => logs 'later' after one second - */ - function delay(func, wait) { - if (!isFunction(func)) { - throw new TypeError; - } - var args = slice(arguments, 2); - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided it will be used to determine the cache key for storing the result - * based on the arguments provided to the memoized function. By default, the - * first argument provided to the memoized function is used as the cache key. - * The `func` is executed with the `this` binding of the memoized function. - * The result cache is exposed as the `cache` property on the memoized function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] A function used to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var fibonacci = _.memoize(function(n) { - * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); - * }); - * - * fibonacci(9) - * // => 34 - * - * var data = { - * 'fred': { 'name': 'fred', 'age': 40 }, - * 'pebbles': { 'name': 'pebbles', 'age': 1 } - * }; - * - * // modifying the result cache - * var get = _.memoize(function(name) { return data[name]; }, _.identity); - * get('pebbles'); - * // => { 'name': 'pebbles', 'age': 1 } - * - * get.cache.pebbles.name = 'penelope'; - * get('pebbles'); - * // => { 'name': 'penelope', 'age': 1 } - */ - function memoize(func, resolver) { - if (!isFunction(func)) { - throw new TypeError; - } - var memoized = function() { - var cache = memoized.cache, - key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0]; - - return hasOwnProperty.call(cache, key) - ? cache[key] - : (cache[key] = func.apply(this, arguments)); - } - memoized.cache = {}; - return memoized; - } - - /** - * Creates a function that is restricted to execute `func` once. Repeat calls to - * the function will return the value of the first call. The `func` is executed - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` executes `createApplication` once - */ - function once(func) { - var ran, - result; - - if (!isFunction(func)) { - throw new TypeError; - } - return function() { - if (ran) { - return result; - } - ran = true; - result = func.apply(this, arguments); - - // clear the `func` variable so the function may be garbage collected - func = null; - return result; - }; - } - - /** - * Creates a function that, when called, invokes `func` with any additional - * `partial` arguments prepended to those provided to the new function. This - * method is similar to `_.bind` except it does **not** alter the `this` binding. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { return greeting + ' ' + name; }; - * var hi = _.partial(greet, 'hi'); - * hi('fred'); - * // => 'hi fred' - */ - function partial(func) { - return createWrapper(func, 16, slice(arguments, 1)); - } - - /** - * This method is like `_.partial` except that `partial` arguments are - * appended to those provided to the new function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var defaultsDeep = _.partialRight(_.merge, _.defaults); - * - * var options = { - * 'variable': 'data', - * 'imports': { 'jq': $ } - * }; - * - * defaultsDeep(options, _.templateSettings); - * - * options.variable - * // => 'data' - * - * options.imports - * // => { '_': _, 'jq': $ } - */ - function partialRight(func) { - return createWrapper(func, 32, null, slice(arguments, 1)); - } - - /** - * Creates a function that, when executed, will only call the `func` function - * at most once per every `wait` milliseconds. Provide an options object to - * indicate that `func` should be invoked on the leading and/or trailing edge - * of the `wait` timeout. Subsequent calls to the throttled function will - * return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the throttled function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to throttle. - * @param {number} wait The number of milliseconds to throttle executions to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // avoid excessively updating the position while scrolling - * var throttled = _.throttle(updatePosition, 100); - * jQuery(window).on('scroll', throttled); - * - * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes - * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { - * 'trailing': false - * })); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? options.leading : leading; - trailing = 'trailing' in options ? options.trailing : trailing; - } - debounceOptions.leading = leading; - debounceOptions.maxWait = wait; - debounceOptions.trailing = trailing; - - return debounce(func, wait, debounceOptions); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Additional arguments provided to the function are appended - * to those provided to the wrapper function. The wrapper is executed with - * the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {*} value The value to wrap. - * @param {Function} wrapper The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('Fred, Wilma, & Pebbles'); - * // => '

Fred, Wilma, & Pebbles

' - */ - function wrap(value, wrapper) { - return createWrapper(wrapper, 16, [value]); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new function. - * @example - * - * var object = { 'name': 'fred' }; - * var getter = _.constant(object); - * getter() === object; - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - /** - * Produces a callback bound to an optional `thisArg`. If `func` is a property - * name the created callback will return the property value for a given element. - * If `func` is an object the created callback will return `true` for elements - * that contain the equivalent object properties, otherwise it will return `false`. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // wrap to create custom callback shorthands - * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { - * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); - * return !match ? func(callback, thisArg) : function(object) { - * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; - * }; - * }); - * - * _.filter(characters, 'age__gt38'); - * // => [{ 'name': 'fred', 'age': 40 }] - */ - function createCallback(func, thisArg, argCount) { - var type = typeof func; - if (func == null || type == 'function') { - return baseCreateCallback(func, thisArg, argCount); - } - // handle "_.pluck" style callback shorthands - if (type != 'object') { - return property(func); - } - var props = keys(func), - key = props[0], - a = func[key]; - - // handle "_.where" style callback shorthands - if (props.length == 1 && a === a && !isObject(a)) { - // fast path the common case of providing an object with a single - // property containing a primitive value - return function(object) { - var b = object[key]; - return a === b && (a !== 0 || (1 / a == 1 / b)); - }; - } - return function(object) { - var length = props.length, - result = false; - - while (length--) { - if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { - break; - } - } - return result; - }; - } - - /** - * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their - * corresponding HTML entities. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} string The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('Fred, Wilma, & Pebbles'); - * // => 'Fred, Wilma, & Pebbles' - */ - function escape(string) { - return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); - } - - /** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'name': 'fred' }; - * _.identity(object) === object; - * // => true - */ - function identity(value) { - return value; - } - - /** - * Adds function properties of a source object to the destination object. - * If `object` is a function methods will be added to its prototype as well. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Function|Object} [object=lodash] object The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options] The options object. - * @param {boolean} [options.chain=true] Specify whether the functions added are chainable. - * @example - * - * function capitalize(string) { - * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - * } - * - * _.mixin({ 'capitalize': capitalize }); - * _.capitalize('fred'); - * // => 'Fred' - * - * _('fred').capitalize().value(); - * // => 'Fred' - * - * _.mixin({ 'capitalize': capitalize }, { 'chain': false }); - * _('fred').capitalize(); - * // => 'Fred' - */ - function mixin(object, source, options) { - var chain = true, - methodNames = source && functions(source); - - if (!source || (!options && !methodNames.length)) { - if (options == null) { - options = source; - } - ctor = lodashWrapper; - source = object; - object = lodash; - methodNames = functions(source); - } - if (options === false) { - chain = false; - } else if (isObject(options) && 'chain' in options) { - chain = options.chain; - } - var ctor = object, - isFunc = isFunction(ctor); - - forEach(methodNames, function(methodName) { - var func = object[methodName] = source[methodName]; - if (isFunc) { - ctor.prototype[methodName] = function() { - var chainAll = this.__chain__, - value = this.__wrapped__, - args = [value]; - - push.apply(args, arguments); - var result = func.apply(object, args); - if (chain || chainAll) { - if (value === result && isObject(result)) { - return this; - } - result = new ctor(result); - result.__chain__ = chainAll; - } - return result; - }; - } - }); - } - - /** - * Reverts the '_' variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @memberOf _ - * @category Utilities - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - context._ = oldDash; - return this; - } - - /** - * A no-operation function. - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var object = { 'name': 'fred' }; - * _.noop(object) === undefined; - * // => true - */ - function noop() { - // no operation performed - } - - /** - * Gets the number of milliseconds that have elapsed since the Unix epoch - * (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @category Utilities - * @example - * - * var stamp = _.now(); - * _.defer(function() { console.log(_.now() - stamp); }); - * // => logs the number of milliseconds it took for the deferred function to be called - */ - var now = isNative(now = Date.now) && now || function() { - return new Date().getTime(); - }; - - /** - * Converts the given value into an integer of the specified radix. - * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the - * `value` is a hexadecimal, in which case a `radix` of `16` is used. - * - * Note: This method avoids differences in native ES3 and ES5 `parseInt` - * implementations. See http://es5.github.io/#E. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} value The value to parse. - * @param {number} [radix] The radix used to interpret the value to parse. - * @returns {number} Returns the new integer value. - * @example - * - * _.parseInt('08'); - * // => 8 - */ - var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) { - // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt` - return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0); - }; - - /** - * Creates a "_.pluck" style function, which returns the `key` value of a - * given object. - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} key The name of the property to retrieve. - * @returns {Function} Returns the new function. - * @example - * - * var characters = [ - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'barney', 'age': 36 } - * ]; - * - * var getName = _.property('name'); - * - * _.map(characters, getName); - * // => ['barney', 'fred'] - * - * _.sortBy(characters, getName); - * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] - */ - function property(key) { - return function(object) { - return object[key]; - }; - } - - /** - * Produces a random number between `min` and `max` (inclusive). If only one - * argument is provided a number between `0` and the given number will be - * returned. If `floating` is truey or either `min` or `max` are floats a - * floating-point number will be returned instead of an integer. - * - * @static - * @memberOf _ - * @category Utilities - * @param {number} [min=0] The minimum possible value. - * @param {number} [max=1] The maximum possible value. - * @param {boolean} [floating=false] Specify returning a floating-point number. - * @returns {number} Returns a random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(min, max, floating) { - var noMin = min == null, - noMax = max == null; - - if (floating == null) { - if (typeof min == 'boolean' && noMax) { - floating = min; - min = 1; - } - else if (!noMax && typeof max == 'boolean') { - floating = max; - noMax = true; - } - } - if (noMin && noMax) { - max = 1; - } - min = +min || 0; - if (noMax) { - max = min; - min = 0; - } else { - max = +max || 0; - } - if (floating || min % 1 || max % 1) { - var rand = nativeRandom(); - return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max); - } - return baseRandom(min, max); - } - - /** - * Resolves the value of property `key` on `object`. If `key` is a function - * it will be invoked with the `this` binding of `object` and its result returned, - * else the property value is returned. If `object` is falsey then `undefined` - * is returned. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object to inspect. - * @param {string} key The name of the property to resolve. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { - * 'cheese': 'crumpets', - * 'stuff': function() { - * return 'nonsense'; - * } - * }; - * - * _.result(object, 'cheese'); - * // => 'crumpets' - * - * _.result(object, 'stuff'); - * // => 'nonsense' - */ - function result(object, key) { - if (object) { - var value = object[key]; - return isFunction(value) ? object[key]() : value; - } - } - - /** - * A micro-templating method that handles arbitrary delimiters, preserves - * whitespace, and correctly escapes quotes within interpolated code. - * - * Note: In the development build, `_.template` utilizes sourceURLs for easier - * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl - * - * For more information on precompiling templates see: - * https://lodash.com/custom-builds - * - * For more information on Chrome extension sandboxes see: - * http://developer.chrome.com/stable/extensions/sandboxingEval.html - * - * @static - * @memberOf _ - * @category Utilities - * @param {string} text The template text. - * @param {Object} data The data object used to populate the text. - * @param {Object} [options] The options object. - * @param {RegExp} [options.escape] The "escape" delimiter. - * @param {RegExp} [options.evaluate] The "evaluate" delimiter. - * @param {Object} [options.imports] An object to import into the template as local variables. - * @param {RegExp} [options.interpolate] The "interpolate" delimiter. - * @param {string} [sourceURL] The sourceURL of the template's compiled source. - * @param {string} [variable] The data object variable name. - * @returns {Function|string} Returns a compiled function when no `data` object - * is given, else it returns the interpolated text. - * @example - * - * // using the "interpolate" delimiter to create a compiled template - * var compiled = _.template('hello <%= name %>'); - * compiled({ 'name': 'fred' }); - * // => 'hello fred' - * - * // using the "escape" delimiter to escape HTML in data property values - * _.template('<%- value %>', { 'value': '').stripTags() -=> 'a linkalert("hello world!")' -``` - -**toSentence** _.toSentence(array, [delimiter, lastDelimiter]) - -Join an array into a human readable sentence. - -```javascript -_.toSentence(['jQuery', 'Mootools', 'Prototype']) -=> 'jQuery, Mootools and Prototype'; - -_.toSentence(['jQuery', 'Mootools', 'Prototype'], ', ', ' unt ') -=> 'jQuery, Mootools unt Prototype'; -``` - -**toSentenceSerial** _.toSentenceSerial(array, [delimiter, lastDelimiter]) - -The same as `toSentence`, but adjusts delimeters to use [Serial comma](http://en.wikipedia.org/wiki/Serial_comma). - -```javascript -_.toSentenceSerial(['jQuery', 'Mootools']) -=> 'jQuery and Mootools'; - -_.toSentenceSerial(['jQuery', 'Mootools', 'Prototype']) -=> 'jQuery, Mootools, and Prototype' - -_.toSentenceSerial(['jQuery', 'Mootools', 'Prototype'], ', ', ' unt '); -=> 'jQuery, Mootools, unt Prototype'; -``` - -**repeat** _.repeat(string, count, [separator]) - -Repeats a string count times. - -```javascript -_.repeat("foo", 3) -=> 'foofoofoo'; - -_.repeat("foo", 3, "bar") -=> 'foobarfoobarfoo' -``` - -**surround** _.surround(string, wrap) - -Surround a string with another string. - -```javascript -_.surround("foo", "ab") -=> 'abfooab'; -``` - -**quote** _.quote(string, quoteChar) or _.q(string, quoteChar) - -Quotes a string. `quoteChar` defaults to `"`. - -```javascript -_.quote('foo', quoteChar) -=> '"foo"'; -``` -**unquote** _.unquote(string, quoteChar) - -Unquotes a string. `quoteChar` defaults to `"`. - -```javascript -_.unquote('"foo"') -=> 'foo'; -_.unquote("'foo'", "'") -=> 'foo'; -``` - - -**slugify** _.slugify(string) - -Transform text into a URL slug. Replaces whitespaces, accentuated, and special characters with a dash. - -```javascript -_.slugify("Un éléphant à l'orée du bois") -=> 'un-elephant-a-loree-du-bois'; -``` - -***Caution: this function is charset dependent*** - -**naturalCmp** array.sort(_.naturalCmp) - -Naturally sort strings like humans would do. - -```javascript -['foo20', 'foo5'].sort(_.naturalCmp) -=> [ 'foo5', 'foo20' ] -``` - -**toBoolean** _.toBoolean(string) or _.toBool(string) - -Turn strings that can be commonly considered as booleas to real booleans. Such as "true", "false", "1" and "0". This function is case insensitive. - -```javascript -_.toBoolean("true") -=> true -_.toBoolean("FALSE") -=> false -_.toBoolean("random") -=> undefined -``` - -It can be customized by giving arrays of truth and falsy value matcher as parameters. Matchers can be also RegExp objects. - -```javascript -_.toBoolean("truthy", ["truthy"], ["falsy"]) -=> true -_.toBoolean("true only at start", [/^true/]) -=> true -``` - -## Roadmap ## - -Any suggestions or bug reports are welcome. Just email me or more preferably open an issue. - -#### Problems - -We lose two things for `include` and `reverse` methods from `_.string`: - -* Calls like `_('foobar').include('bar')` aren't available; -* Chaining isn't available too. - -But if you need this functionality you can create aliases for conflict functions which will be convenient for you: - -```javascript -_.mixin({ - includeString: _.str.include, - reverseString: _.str.reverse -}) - -// Now wrapper calls and chaining are available. -_('foobar').chain().reverseString().includeString('rab').value() -``` - -#### Standalone Usage - -If you are using Underscore.string without Underscore. You also have `_.string` namespace for it and `_.str` alias -But of course you can just reassign `_` variable with `_.string` - -```javascript -_ = _.string -``` - -## Changelog ## - -### 2.4.0 ### - -* Move from rake to gulp -* Add support form classify camelcase strings -* Fix bower.json -* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.3...2.4.0) - -### 2.3.3 ### - -* Add `toBoolean` -* Add `unquote` -* Add quote char option to `quote` -* Support dash-separated words in `titleize` -* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.2...2.3.3) - -### 2.3.2 ### - -* Add `naturalCmp` -* Bug fix to `camelize` -* Add ă, ș, ț and ś to `slugify` -* Doc updates -* Add support for [component](http://component.io/) -* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.1...v2.3.2) - -### 2.3.1 ### - -* Bug fixes to `escapeHTML`, `classify`, `substr` -* Faster `count` -* Documentation fixes -* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.0...v2.3.1) - -### 2.3.0 ### - -* Added `numberformat` method -* Added `levenshtein` method (Levenshtein distance calculation) -* Added `swapCase` method -* Changed default behavior of `words` method -* Added `toSentenceSerial` method -* Added `surround` and `quote` methods - -### 2.2.1 ### - -* Same as 2.2.0 (2.2.0rc on npm) to fix some npm drama - -### 2.2.0 ### - -* Capitalize method behavior changed -* Various perfomance tweaks - -### 2.1.1### - -* Fixed words method bug -* Added classify method - -### 2.1.0 ### - -* AMD support -* Added toSentence method -* Added slugify method -* Lots of speed optimizations - -### 2.0.0 ### - -* Added prune, humanize functions -* Added _.string (_.str) namespace for Underscore.string library -* Removed includes function - -For upgrading to this version you need to mix in Underscore.string library to Underscore object: - -```javascript -_.mixin(_.string.exports()); -``` - -and all non-conflict Underscore.string functions will be available through Underscore object. -Also function `includes` has been removed, you should replace this function by `_.str.include` -or create alias `_.includes = _.str.include` and all your code will work fine. - -### 1.1.6 ### - -* Fixed reverse and truncate -* Added isBlank, stripTags, inlude(alias for includes) -* Added uglifier compression - -### 1.1.5 ### - -* Added strRight, strRightBack, strLeft, strLeftBack - -### 1.1.4 ### - -* Added pad, lpad, rpad, lrpad methods and aliases center, ljust, rjust -* Integration with Underscore 1.1.6 - -### 1.1.3 ### - -* Added methods: underscored, camelize, dasherize -* Support newer version of npm - -### 1.1.2 ### - -* Created functions: lines, chars, words functions - -### 1.0.2 ### - -* Created integration test suite with underscore.js 1.1.4 (now it's absolutely compatible) -* Removed 'reverse' function, because this function override underscore.js 'reverse' - -## Contribute ## - -* Fork & pull request. Don't forget about tests. -* If you planning add some feature please create issue before. - -Otherwise changes will be rejected. - -## Contributors list ## -[Can be found here](https://github.com/epeli/underscore.string/graphs/contributors). - - -## Licence ## - -The MIT License - -Copyright (c) 2011 Esa-Matti Suuronen esa-matti@suuronen.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json deleted file mode 100644 index 96e23d33..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "underscore.string", - "repo": "epeli/underscore.string", - "description": "String manipulation extensions for Underscore.js javascript library", - "version": "2.4.0", - "keywords": ["underscore", "string"], - "dependencies": {}, - "development": {}, - "main": "lib/underscore.string.js", - "scripts": ["lib/underscore.string.js"] -} diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js deleted file mode 100644 index c9c8d47f..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +++ /dev/null @@ -1,673 +0,0 @@ -// Underscore.string -// (c) 2010 Esa-Matti Suuronen -// Underscore.string is freely distributable under the terms of the MIT license. -// Documentation: https://github.com/epeli/underscore.string -// Some code is borrowed from MooTools and Alexandru Marasteanu. -// Version '2.4.0' - -!function(root, String){ - 'use strict'; - - // Defining helper functions. - - var nativeTrim = String.prototype.trim; - var nativeTrimRight = String.prototype.trimRight; - var nativeTrimLeft = String.prototype.trimLeft; - - var parseNumber = function(source) { return source * 1 || 0; }; - - var strRepeat = function(str, qty){ - if (qty < 1) return ''; - var result = ''; - while (qty > 0) { - if (qty & 1) result += str; - qty >>= 1, str += str; - } - return result; - }; - - var slice = [].slice; - - var defaultToWhiteSpace = function(characters) { - if (characters == null) - return '\\s'; - else if (characters.source) - return characters.source; - else - return '[' + _s.escapeRegExp(characters) + ']'; - }; - - // Helper for toBoolean - function boolMatch(s, matchers) { - var i, matcher, down = s.toLowerCase(); - matchers = [].concat(matchers); - for (i = 0; i < matchers.length; i += 1) { - matcher = matchers[i]; - if (!matcher) continue; - if (matcher.test && matcher.test(s)) return true; - if (matcher.toLowerCase() === down) return true; - } - } - - var escapeChars = { - lt: '<', - gt: '>', - quot: '"', - amp: '&', - apos: "'" - }; - - var reversedEscapeChars = {}; - for(var key in escapeChars) reversedEscapeChars[escapeChars[key]] = key; - reversedEscapeChars["'"] = '#39'; - - // sprintf() for JavaScript 0.7-beta1 - // http://www.diveintojavascript.com/projects/javascript-sprintf - // - // Copyright (c) Alexandru Marasteanu - // All rights reserved. - - var sprintf = (function() { - function get_type(variable) { - return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase(); - } - - var str_repeat = strRepeat; - - var str_format = function() { - if (!str_format.cache.hasOwnProperty(arguments[0])) { - str_format.cache[arguments[0]] = str_format.parse(arguments[0]); - } - return str_format.format.call(null, str_format.cache[arguments[0]], arguments); - }; - - str_format.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; - for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]); - if (node_type === 'string') { - output.push(parse_tree[i]); - } - else if (node_type === 'array') { - match = parse_tree[i]; // convenience purposes only - if (match[2]) { // keyword argument - arg = argv[cursor]; - for (k = 0; k < match[2].length; k++) { - if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf('[_.sprintf] property "%s" does not exist', match[2][k])); - } - arg = arg[match[2][k]]; - } - } else if (match[1]) { // positional argument (explicit) - arg = argv[match[1]]; - } - else { // positional argument (implicit) - arg = argv[cursor++]; - } - - if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { - throw new Error(sprintf('[_.sprintf] expecting number but found %s', get_type(arg))); - } - switch (match[8]) { - case 'b': arg = arg.toString(2); break; - case 'c': arg = String.fromCharCode(arg); break; - case 'd': arg = parseInt(arg, 10); break; - case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; - case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; - case 'o': arg = arg.toString(8); break; - case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; - case 'u': arg = Math.abs(arg); break; - case 'x': arg = arg.toString(16); break; - case 'X': arg = arg.toString(16).toUpperCase(); break; - } - arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); - pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; - pad_length = match[6] - String(arg).length; - pad = match[6] ? str_repeat(pad_character, pad_length) : ''; - output.push(match[5] ? arg + pad : pad + arg); - } - } - return output.join(''); - }; - - str_format.cache = {}; - - str_format.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; - while (_fmt) { - if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { - parse_tree.push(match[0]); - } - else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { - parse_tree.push('%'); - } - else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { - if (match[2]) { - arg_names |= 1; - var field_list = [], replacement_field = match[2], field_match = []; - if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { - if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else { - throw new Error('[_.sprintf] huh?'); - } - } - } - else { - throw new Error('[_.sprintf] huh?'); - } - match[2] = field_list; - } - else { - arg_names |= 2; - } - if (arg_names === 3) { - throw new Error('[_.sprintf] mixing positional and named placeholders is not (yet) supported'); - } - parse_tree.push(match); - } - else { - throw new Error('[_.sprintf] huh?'); - } - _fmt = _fmt.substring(match[0].length); - } - return parse_tree; - }; - - return str_format; - })(); - - - - // Defining underscore.string - - var _s = { - - VERSION: '2.4.0', - - isBlank: function(str){ - if (str == null) str = ''; - return (/^\s*$/).test(str); - }, - - stripTags: function(str){ - if (str == null) return ''; - return String(str).replace(/<\/?[^>]+>/g, ''); - }, - - capitalize : function(str){ - str = str == null ? '' : String(str); - return str.charAt(0).toUpperCase() + str.slice(1); - }, - - chop: function(str, step){ - if (str == null) return []; - str = String(str); - step = ~~step; - return step > 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str]; - }, - - clean: function(str){ - return _s.strip(str).replace(/\s+/g, ' '); - }, - - count: function(str, substr){ - if (str == null || substr == null) return 0; - - str = String(str); - substr = String(substr); - - var count = 0, - pos = 0, - length = substr.length; - - while (true) { - pos = str.indexOf(substr, pos); - if (pos === -1) break; - count++; - pos += length; - } - - return count; - }, - - chars: function(str) { - if (str == null) return []; - return String(str).split(''); - }, - - swapCase: function(str) { - if (str == null) return ''; - return String(str).replace(/\S/g, function(c){ - return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase(); - }); - }, - - escapeHTML: function(str) { - if (str == null) return ''; - return String(str).replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; }); - }, - - unescapeHTML: function(str) { - if (str == null) return ''; - return String(str).replace(/\&([^;]+);/g, function(entity, entityCode){ - var match; - - if (entityCode in escapeChars) { - return escapeChars[entityCode]; - } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { - return String.fromCharCode(parseInt(match[1], 16)); - } else if (match = entityCode.match(/^#(\d+)$/)) { - return String.fromCharCode(~~match[1]); - } else { - return entity; - } - }); - }, - - escapeRegExp: function(str){ - if (str == null) return ''; - return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); - }, - - splice: function(str, i, howmany, substr){ - var arr = _s.chars(str); - arr.splice(~~i, ~~howmany, substr); - return arr.join(''); - }, - - insert: function(str, i, substr){ - return _s.splice(str, i, 0, substr); - }, - - include: function(str, needle){ - if (needle === '') return true; - if (str == null) return false; - return String(str).indexOf(needle) !== -1; - }, - - join: function() { - var args = slice.call(arguments), - separator = args.shift(); - - if (separator == null) separator = ''; - - return args.join(separator); - }, - - lines: function(str) { - if (str == null) return []; - return String(str).split("\n"); - }, - - reverse: function(str){ - return _s.chars(str).reverse().join(''); - }, - - startsWith: function(str, starts){ - if (starts === '') return true; - if (str == null || starts == null) return false; - str = String(str); starts = String(starts); - return str.length >= starts.length && str.slice(0, starts.length) === starts; - }, - - endsWith: function(str, ends){ - if (ends === '') return true; - if (str == null || ends == null) return false; - str = String(str); ends = String(ends); - return str.length >= ends.length && str.slice(str.length - ends.length) === ends; - }, - - succ: function(str){ - if (str == null) return ''; - str = String(str); - return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length-1) + 1); - }, - - titleize: function(str){ - if (str == null) return ''; - str = String(str).toLowerCase(); - return str.replace(/(?:^|\s|-)\S/g, function(c){ return c.toUpperCase(); }); - }, - - camelize: function(str){ - return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, c){ return c ? c.toUpperCase() : ""; }); - }, - - underscored: function(str){ - return _s.trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); - }, - - dasherize: function(str){ - return _s.trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); - }, - - classify: function(str){ - return _s.capitalize(_s.camelize(String(str).replace(/[\W_]/g, ' ')).replace(/\s/g, '')); - }, - - humanize: function(str){ - return _s.capitalize(_s.underscored(str).replace(/_id$/,'').replace(/_/g, ' ')); - }, - - trim: function(str, characters){ - if (str == null) return ''; - if (!characters && nativeTrim) return nativeTrim.call(str); - characters = defaultToWhiteSpace(characters); - return String(str).replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); - }, - - ltrim: function(str, characters){ - if (str == null) return ''; - if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str); - characters = defaultToWhiteSpace(characters); - return String(str).replace(new RegExp('^' + characters + '+'), ''); - }, - - rtrim: function(str, characters){ - if (str == null) return ''; - if (!characters && nativeTrimRight) return nativeTrimRight.call(str); - characters = defaultToWhiteSpace(characters); - return String(str).replace(new RegExp(characters + '+$'), ''); - }, - - truncate: function(str, length, truncateStr){ - if (str == null) return ''; - str = String(str); truncateStr = truncateStr || '...'; - length = ~~length; - return str.length > length ? str.slice(0, length) + truncateStr : str; - }, - - /** - * _s.prune: a more elegant version of truncate - * prune extra chars, never leaving a half-chopped word. - * @author github.com/rwz - */ - prune: function(str, length, pruneStr){ - if (str == null) return ''; - - str = String(str); length = ~~length; - pruneStr = pruneStr != null ? String(pruneStr) : '...'; - - if (str.length <= length) return str; - - var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; }, - template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' - - if (template.slice(template.length-2).match(/\w\w/)) - template = template.replace(/\s*\S+$/, ''); - else - template = _s.rtrim(template.slice(0, template.length-1)); - - return (template+pruneStr).length > str.length ? str : str.slice(0, template.length)+pruneStr; - }, - - words: function(str, delimiter) { - if (_s.isBlank(str)) return []; - return _s.trim(str, delimiter).split(delimiter || /\s+/); - }, - - pad: function(str, length, padStr, type) { - str = str == null ? '' : String(str); - length = ~~length; - - var padlen = 0; - - if (!padStr) - padStr = ' '; - else if (padStr.length > 1) - padStr = padStr.charAt(0); - - switch(type) { - case 'right': - padlen = length - str.length; - return str + strRepeat(padStr, padlen); - case 'both': - padlen = length - str.length; - return strRepeat(padStr, Math.ceil(padlen/2)) + str - + strRepeat(padStr, Math.floor(padlen/2)); - default: // 'left' - padlen = length - str.length; - return strRepeat(padStr, padlen) + str; - } - }, - - lpad: function(str, length, padStr) { - return _s.pad(str, length, padStr); - }, - - rpad: function(str, length, padStr) { - return _s.pad(str, length, padStr, 'right'); - }, - - lrpad: function(str, length, padStr) { - return _s.pad(str, length, padStr, 'both'); - }, - - sprintf: sprintf, - - vsprintf: function(fmt, argv){ - argv.unshift(fmt); - return sprintf.apply(null, argv); - }, - - toNumber: function(str, decimals) { - if (!str) return 0; - str = _s.trim(str); - if (!str.match(/^-?\d+(?:\.\d+)?$/)) return NaN; - return parseNumber(parseNumber(str).toFixed(~~decimals)); - }, - - numberFormat : function(number, dec, dsep, tsep) { - if (isNaN(number) || number == null) return ''; - - number = number.toFixed(~~dec); - tsep = typeof tsep == 'string' ? tsep : ','; - - var parts = number.split('.'), fnums = parts[0], - decimals = parts[1] ? (dsep || '.') + parts[1] : ''; - - return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals; - }, - - strRight: function(str, sep){ - if (str == null) return ''; - str = String(str); sep = sep != null ? String(sep) : sep; - var pos = !sep ? -1 : str.indexOf(sep); - return ~pos ? str.slice(pos+sep.length, str.length) : str; - }, - - strRightBack: function(str, sep){ - if (str == null) return ''; - str = String(str); sep = sep != null ? String(sep) : sep; - var pos = !sep ? -1 : str.lastIndexOf(sep); - return ~pos ? str.slice(pos+sep.length, str.length) : str; - }, - - strLeft: function(str, sep){ - if (str == null) return ''; - str = String(str); sep = sep != null ? String(sep) : sep; - var pos = !sep ? -1 : str.indexOf(sep); - return ~pos ? str.slice(0, pos) : str; - }, - - strLeftBack: function(str, sep){ - if (str == null) return ''; - str += ''; sep = sep != null ? ''+sep : sep; - var pos = str.lastIndexOf(sep); - return ~pos ? str.slice(0, pos) : str; - }, - - toSentence: function(array, separator, lastSeparator, serial) { - separator = separator || ', '; - lastSeparator = lastSeparator || ' and '; - var a = array.slice(), lastMember = a.pop(); - - if (array.length > 2 && serial) lastSeparator = _s.rtrim(separator) + lastSeparator; - - return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember; - }, - - toSentenceSerial: function() { - var args = slice.call(arguments); - args[3] = true; - return _s.toSentence.apply(_s, args); - }, - - slugify: function(str) { - if (str == null) return ''; - - var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź", - to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz", - regex = new RegExp(defaultToWhiteSpace(from), 'g'); - - str = String(str).toLowerCase().replace(regex, function(c){ - var index = from.indexOf(c); - return to.charAt(index) || '-'; - }); - - return _s.dasherize(str.replace(/[^\w\s-]/g, '')); - }, - - surround: function(str, wrapper) { - return [wrapper, str, wrapper].join(''); - }, - - quote: function(str, quoteChar) { - return _s.surround(str, quoteChar || '"'); - }, - - unquote: function(str, quoteChar) { - quoteChar = quoteChar || '"'; - if (str[0] === quoteChar && str[str.length-1] === quoteChar) - return str.slice(1,str.length-1); - else return str; - }, - - exports: function() { - var result = {}; - - for (var prop in this) { - if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse)$/)) continue; - result[prop] = this[prop]; - } - - return result; - }, - - repeat: function(str, qty, separator){ - if (str == null) return ''; - - qty = ~~qty; - - // using faster implementation if separator is not needed; - if (separator == null) return strRepeat(String(str), qty); - - // this one is about 300x slower in Google Chrome - for (var repeat = []; qty > 0; repeat[--qty] = str) {} - return repeat.join(separator); - }, - - naturalCmp: function(str1, str2){ - if (str1 == str2) return 0; - if (!str1) return -1; - if (!str2) return 1; - - var cmpRegex = /(\.\d+)|(\d+)|(\D+)/g, - tokens1 = String(str1).toLowerCase().match(cmpRegex), - tokens2 = String(str2).toLowerCase().match(cmpRegex), - count = Math.min(tokens1.length, tokens2.length); - - for(var i = 0; i < count; i++) { - var a = tokens1[i], b = tokens2[i]; - - if (a !== b){ - var num1 = parseInt(a, 10); - if (!isNaN(num1)){ - var num2 = parseInt(b, 10); - if (!isNaN(num2) && num1 - num2) - return num1 - num2; - } - return a < b ? -1 : 1; - } - } - - if (tokens1.length === tokens2.length) - return tokens1.length - tokens2.length; - - return str1 < str2 ? -1 : 1; - }, - - levenshtein: function(str1, str2) { - if (str1 == null && str2 == null) return 0; - if (str1 == null) return String(str2).length; - if (str2 == null) return String(str1).length; - - str1 = String(str1); str2 = String(str2); - - var current = [], prev, value; - - for (var i = 0; i <= str2.length; i++) - for (var j = 0; j <= str1.length; j++) { - if (i && j) - if (str1.charAt(j - 1) === str2.charAt(i - 1)) - value = prev; - else - value = Math.min(current[j], current[j - 1], prev) + 1; - else - value = i + j; - - prev = current[j]; - current[j] = value; - } - - return current.pop(); - }, - - toBoolean: function(str, trueValues, falseValues) { - if (typeof str === "number") str = "" + str; - if (typeof str !== "string") return !!str; - str = _s.trim(str); - if (boolMatch(str, trueValues || ["true", "1"])) return true; - if (boolMatch(str, falseValues || ["false", "0"])) return false; - } - }; - - // Aliases - - _s.strip = _s.trim; - _s.lstrip = _s.ltrim; - _s.rstrip = _s.rtrim; - _s.center = _s.lrpad; - _s.rjust = _s.lpad; - _s.ljust = _s.rpad; - _s.contains = _s.include; - _s.q = _s.quote; - _s.toBool = _s.toBoolean; - - // Exporting - - // CommonJS module is defined - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) - module.exports = _s; - - exports._s = _s; - } - - // Register as a named module with AMD. - if (typeof define === 'function' && define.amd) - define('underscore.string', [], function(){ return _s; }); - - - // Integrate with Underscore.js if defined - // or create our own underscore object. - root._ = root._ || {}; - root._.string = root._.str = _s; -}(this, String); diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json deleted file mode 100644 index 877cc71c..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "underscore.string", - "version": "2.4.0", - "description": "String manipulation extensions for Underscore.js javascript library.", - "homepage": "http://epeli.github.com/underscore.string/", - "contributors": [ - { - "name": "Esa-Matti Suuronen", - "email": "esa-matti@suuronen.org", - "url": "http://esa-matti.suuronen.org/" - }, - { - "name": "Edward Tsech", - "email": "edtsech@gmail.com" - }, - { - "name": "Pavel Pravosud", - "email": "pavel@pravosud.com", - "url": "" - }, - { - "name": "Sasha Koss", - "email": "kossnocorp@gmail.com", - "url": "http://koss.nocorp.me/" - }, - { - "name": "Vladimir Dronnikov", - "email": "dronnikov@gmail.com" - }, - { - "name": "Pete Kruckenberg", - "email": "https://github.com/kruckenb", - "url": "" - }, - { - "name": "Paul Chavard", - "email": "paul@chavard.net", - "url": "" - }, - { - "name": "Ed Finkler", - "email": "coj@funkatron.com", - "url": "" - } - ], - "keywords": [ - "underscore", - "string" - ], - "main": "./lib/underscore.string.js", - "directories": { - "lib": "./lib" - }, - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/epeli/underscore.string.git" - }, - "bugs": { - "url": "https://github.com/epeli/underscore.string/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "scripts": { - "test": "gulp test" - }, - "devDependencies": { - "gulp": "~3.8.10", - "gulp-uglify": "~1.0.1", - "gulp-qunit": "~1.0.0", - "gulp-clean": "~0.3.1", - "gulp-rename": "~1.2.0" - }, - "_id": "underscore.string@2.4.0", - "dist": { - "shasum": "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b", - "tarball": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - }, - "_from": "underscore.string@>=2.4.0 <2.5.0", - "_npmVersion": "1.3.24", - "_npmUser": { - "name": "epeli", - "email": "esa-matti@suuronen.org" - }, - "maintainers": [ - { - "name": "edtsech", - "email": "edtsech@gmail.com" - }, - { - "name": "rwz", - "email": "rwz@duckroll.ru" - }, - { - "name": "epeli", - "email": "esa-matti@suuronen.org" - } - ], - "_shasum": "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b", - "_resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE deleted file mode 100644 index 0d6b8739..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md deleted file mode 100644 index c2ba2590..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +++ /dev/null @@ -1,22 +0,0 @@ - __ - /\ \ __ - __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ - /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ - \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ - \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ - \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ - \ \____/ - \/___/ - -Underscore.js is a utility-belt library for JavaScript that provides -support for the usual functional suspects (each, map, reduce, filter...) -without extending any core JavaScript objects. - -For Docs, License, Tests, and pre-packed downloads, see: -http://underscorejs.org - -Underscore is an open-sourced component of DocumentCloud: -https://github.com/documentcloud - -Many thanks to our contributors: -https://github.com/jashkenas/underscore/contributors diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json deleted file mode 100644 index 11c71759..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "underscore", - "description": "JavaScript's functional programming helper library.", - "homepage": "http://underscorejs.org", - "keywords": [ - "util", - "functional", - "server", - "client", - "browser" - ], - "author": { - "name": "Jeremy Ashkenas", - "email": "jeremy@documentcloud.org" - }, - "repository": { - "type": "git", - "url": "git://github.com/jashkenas/underscore.git" - }, - "main": "underscore.js", - "version": "1.7.0", - "devDependencies": { - "docco": "0.6.x", - "phantomjs": "1.9.7-1", - "uglify-js": "2.4.x", - "eslint": "0.6.x" - }, - "scripts": { - "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true && eslint underscore.js test/*.js test/vendor/runner.js", - "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", - "doc": "docco underscore.js" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/jashkenas/underscore/master/LICENSE" - } - ], - "files": [ - "underscore.js", - "underscore-min.js", - "LICENSE" - ], - "gitHead": "da996e665deb0b69b257e80e3e257c04fde4191c", - "bugs": { - "url": "https://github.com/jashkenas/underscore/issues" - }, - "_id": "underscore@1.7.0", - "_shasum": "6bbaf0877500d36be34ecaa584e0db9fef035209", - "_from": "underscore@>=1.7.0 <1.8.0", - "_npmVersion": "1.4.24", - "_npmUser": { - "name": "jashkenas", - "email": "jashkenas@gmail.com" - }, - "maintainers": [ - { - "name": "jashkenas", - "email": "jashkenas@gmail.com" - } - ], - "dist": { - "shasum": "6bbaf0877500d36be34ecaa584e0db9fef035209", - "tarball": "http://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js deleted file mode 100644 index 11f1d96f..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// Underscore.js 1.7.0 -// http://underscorejs.org -// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this); -//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js deleted file mode 100644 index b4f49a02..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +++ /dev/null @@ -1,1415 +0,0 @@ -// Underscore.js 1.7.0 -// http://underscorejs.org -// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `exports` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var - push = ArrayProto.push, - slice = ArrayProto.slice, - concat = ArrayProto.concat, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.7.0'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var createCallback = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - // A mostly-internal function to generate callbacks that can be applied - // to each element in a collection, returning the desired result — either - // identity, an arbitrary callback, a property matcher, or a property accessor. - _.iteratee = function(value, context, argCount) { - if (value == null) return _.identity; - if (_.isFunction(value)) return createCallback(value, context, argCount); - if (_.isObject(value)) return _.matches(value); - return _.property(value); - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - if (obj == null) return obj; - iteratee = createCallback(iteratee, context); - var i, length = obj.length; - if (length === +length) { - for (i = 0; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - if (obj == null) return []; - iteratee = _.iteratee(iteratee, context); - var keys = obj.length !== +obj.length && _.keys(obj), - length = (keys || obj).length, - results = Array(length), - currentKey; - for (var index = 0; index < length; index++) { - currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - var reduceError = 'Reduce of empty array with no initial value'; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) { - if (obj == null) obj = []; - iteratee = createCallback(iteratee, context, 4); - var keys = obj.length !== +obj.length && _.keys(obj), - length = (keys || obj).length, - index = 0, currentKey; - if (arguments.length < 3) { - if (!length) throw new TypeError(reduceError); - memo = obj[keys ? keys[index++] : index++]; - } - for (; index < length; index++) { - currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - }; - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = function(obj, iteratee, memo, context) { - if (obj == null) obj = []; - iteratee = createCallback(iteratee, context, 4); - var keys = obj.length !== + obj.length && _.keys(obj), - index = (keys || obj).length, - currentKey; - if (arguments.length < 3) { - if (!index) throw new TypeError(reduceError); - memo = obj[keys ? keys[--index] : --index]; - } - while (index--) { - currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - }; - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var result; - predicate = _.iteratee(predicate, context); - _.some(obj, function(value, index, list) { - if (predicate(value, index, list)) { - result = value; - return true; - } - }); - return result; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - if (obj == null) return results; - predicate = _.iteratee(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(_.iteratee(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - if (obj == null) return true; - predicate = _.iteratee(predicate, context); - var keys = obj.length !== +obj.length && _.keys(obj), - length = (keys || obj).length, - index, currentKey; - for (index = 0; index < length; index++) { - currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - if (obj == null) return false; - predicate = _.iteratee(predicate, context); - var keys = obj.length !== +obj.length && _.keys(obj), - length = (keys || obj).length, - index, currentKey; - for (index = 0; index < length; index++) { - currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given value (using `===`). - // Aliased as `include`. - _.contains = _.include = function(obj, target) { - if (obj == null) return false; - if (obj.length !== +obj.length) obj = _.values(obj); - return _.indexOf(obj, target) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - return (isFunc ? method : value[method]).apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matches(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matches(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = obj.length === +obj.length ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value > result) { - result = value; - } - } - } else { - iteratee = _.iteratee(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = obj.length === +obj.length ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value < result) { - result = value; - } - } - } else { - iteratee = _.iteratee(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection, using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - _.shuffle = function(obj) { - var set = obj && obj.length === +obj.length ? obj : _.values(obj); - var length = set.length; - var shuffled = Array(length); - for (var index = 0, rand; index < length; index++) { - rand = _.random(0, index); - if (rand !== index) shuffled[index] = shuffled[rand]; - shuffled[rand] = set[index]; - } - return shuffled; - }; - - // Sample **n** random values from a collection. - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (obj.length !== +obj.length) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - return _.shuffle(obj).slice(0, Math.max(0, n)); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - iteratee = _.iteratee(iteratee, context); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value: value, - index: index, - criteria: iteratee(value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior) { - return function(obj, iteratee, context) { - var result = {}; - iteratee = _.iteratee(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = _.iteratee(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = array.length; - while (low < high) { - var mid = low + high >>> 1; - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (obj.length === +obj.length) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return obj.length === +obj.length ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = function(obj, predicate, context) { - predicate = _.iteratee(predicate, context); - var pass = [], fail = []; - _.each(obj, function(value, key, obj) { - (predicate(value, key, obj) ? pass : fail).push(value); - }); - return [pass, fail]; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[0]; - if (n < 0) return []; - return slice.call(array, 0, n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. The **guard** check allows it to work with - // `_.map`. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. The **guard** check allows it to work with `_.map`. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[array.length - 1]; - return slice.call(array, Math.max(array.length - n, 0)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. The **guard** - // check allows it to work with `_.map`. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, output) { - if (shallow && _.every(input, _.isArray)) { - return concat.apply(output, input); - } - for (var i = 0, length = input.length; i < length; i++) { - var value = input[i]; - if (!_.isArray(value) && !_.isArguments(value)) { - if (!strict) output.push(value); - } else if (shallow) { - push.apply(output, value); - } else { - flatten(value, shallow, strict, output); - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false, []); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (array == null) return []; - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = _.iteratee(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = array.length; i < length; i++) { - var value = array[i]; - if (isSorted) { - if (!i || seen !== value) result.push(value); - seen = value; - } else if (iteratee) { - var computed = iteratee(value, i, array); - if (_.indexOf(seen, computed) < 0) { - seen.push(computed); - result.push(value); - } - } else if (_.indexOf(result, value) < 0) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(flatten(arguments, true, true, [])); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - if (array == null) return []; - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = array.length; i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - for (var j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = flatten(slice.call(arguments, 1), true, true, []); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function(array) { - if (array == null) return []; - var length = _.max(arguments, 'length').length; - var results = Array(length); - for (var i = 0; i < length; i++) { - results[i] = _.pluck(arguments, i); - } - return results; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - if (list == null) return {}; - var result = {}; - for (var i = 0, length = list.length; i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = function(array, item, isSorted) { - if (array == null) return -1; - var i = 0, length = array.length; - if (isSorted) { - if (typeof isSorted == 'number') { - i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted; - } else { - i = _.sortedIndex(array, item); - return array[i] === item ? i : -1; - } - } - for (; i < length; i++) if (array[i] === item) return i; - return -1; - }; - - _.lastIndexOf = function(array, item, from) { - if (array == null) return -1; - var idx = array.length; - if (typeof from == 'number') { - idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1); - } - while (--idx >= 0) if (array[idx] === item) return idx; - return -1; - }; - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - step = step || 1; - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Reusable constructor function for prototype setting. - var Ctor = function(){}; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - var args, bound; - if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - args = slice.call(arguments, 2); - bound = function() { - if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); - Ctor.prototype = func.prototype; - var self = new Ctor; - Ctor.prototype = null; - var result = func.apply(self, args.concat(slice.call(arguments))); - if (_.isObject(result)) return result; - return self; - }; - return bound; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder, allowing any combination of arguments to be pre-filled. - _.partial = function(func) { - var boundArgs = slice.call(arguments, 1); - return function() { - var position = 0; - var args = boundArgs.slice(); - for (var i = 0, length = args.length; i < length; i++) { - if (args[i] === _) args[i] = arguments[position++]; - } - while (position < arguments.length) args.push(arguments[position++]); - return func.apply(this, args); - }; - }; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = function(obj) { - var i, length = arguments.length, key; - if (length <= 1) throw new Error('bindAll must be passed function names'); - for (i = 1; i < length; i++) { - key = arguments[i]; - obj[key] = _.bind(obj[key], obj); - } - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = hasher ? hasher.apply(this, arguments) : key; - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ - return func.apply(null, args); - }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = function(func) { - return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); - }; - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) options = {}; - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - return function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, args, context, timestamp, result; - - var later = function() { - var last = _.now() - timestamp; - - if (last < wait && last > 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - if (!timeout) context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = _.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed after being called N times. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed before being called N times. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } else { - func = null; - } - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - // Object Functions - // ---------------- - - // Retrieve the names of an object's properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = function(obj) { - if (!_.isObject(obj)) return obj; - var source, prop; - for (var i = 1, length = arguments.length; i < length; i++) { - source = arguments[i]; - for (prop in source) { - if (hasOwnProperty.call(source, prop)) { - obj[prop] = source[prop]; - } - } - } - return obj; - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(obj, iteratee, context) { - var result = {}, key; - if (obj == null) return result; - if (_.isFunction(iteratee)) { - iteratee = createCallback(iteratee, context); - for (key in obj) { - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - } else { - var keys = concat.apply([], slice.call(arguments, 1)); - obj = new Object(obj); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (key in obj) result[key] = obj[key]; - } - } - return result; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj, iteratee, context) { - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - } else { - var keys = _.map(concat.apply([], slice.call(arguments, 1)), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }; - - // Fill in a given object with default properties. - _.defaults = function(obj) { - if (!_.isObject(obj)) return obj; - for (var i = 1, length = arguments.length; i < length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (obj[prop] === void 0) obj[prop] = source[prop]; - } - } - return obj; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - } - if (typeof a != 'object' || typeof b != 'object') return false; - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - // Objects with different constructors are not equivalent, but `Object`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if ( - aCtor !== bCtor && - // Handle Object.create(x) cases - 'constructor' in a && 'constructor' in b && - !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - ) { - return false; - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - var size, result; - // Recursively compare objects and arrays. - if (className === '[object Array]') { - // Compare array lengths to determine if a deep comparison is necessary. - size = a.length; - result = size === b.length; - if (result) { - // Deep compare the contents, ignoring non-numeric properties. - while (size--) { - if (!(result = eq(a[size], b[size], aStack, bStack))) break; - } - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - size = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - result = _.keys(b).length === size; - if (result) { - while (size--) { - // Deep compare each member - key = keys[size]; - if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; - } - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return result; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b, [], []); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0; - for (var key in obj) if (_.has(obj, key)) return false; - return true; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around an IE 11 bug. - if (typeof /./ !== 'function') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj !== +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - _.property = function(key) { - return function(obj) { - return obj[key]; - }; - }; - - // Returns a predicate for checking whether an object has a given set of `key:value` pairs. - _.matches = function(attrs) { - var pairs = _.pairs(attrs), length = pairs.length; - return function(obj) { - if (obj == null) return !length; - obj = new Object(obj); - for (var i = 0; i < length; i++) { - var pair = pairs[i], key = pair[0]; - if (pair[1] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = createCallback(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // If the value of the named `property` is a function then invoke it with the - // `object` as context; otherwise, return it. - _.result = function(object, property) { - if (object == null) return void 0; - var value = object[property]; - return _.isFunction(value) ? object[property]() : value; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escaper, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - try { - var render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(obj) { - return this._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result.call(this, func.apply(_, args)); - }; - }); - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return result.call(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result.call(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (typeof define === 'function' && define.amd) { - define('underscore', [], function() { - return _; - }); - } -}.call(this)); diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/package.json b/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/package.json deleted file mode 100644 index 33eafae3..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/argparse/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "argparse", - "description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library", - "version": "0.1.16", - "keywords": [ - "cli", - "parser", - "argparse", - "option", - "args" - ], - "homepage": "https://github.com/nodeca/argparse", - "contributors": [ - { - "name": "Eugene Shkuropat" - }, - { - "name": "Paul Jacobson" - } - ], - "bugs": { - "url": "https://github.com/nodeca/argparse/issues" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/nodeca/argparse.git" - }, - "main": "./index.js", - "scripts": { - "test": "make test" - }, - "dependencies": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" - }, - "devDependencies": { - "mocha": "*" - }, - "gitHead": "9c32eb1405d5d4b5686087d95bac010774979659", - "_id": "argparse@0.1.16", - "_shasum": "cfd01e0fbba3d6caed049fbd758d40f65196f57c", - "_from": "argparse@>=0.1.11 <0.2.0", - "_npmVersion": "1.4.28", - "_npmUser": { - "name": "vitaly", - "email": "vitaly@rcdesign.ru" - }, - "maintainers": [ - { - "name": "vitaly", - "email": "vitaly@rcdesign.ru" - } - ], - "dist": { - "shasum": "cfd01e0fbba3d6caed049fbd758d40f65196f57c", - "tarball": "http://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz" -} diff --git a/node_modules/grunt/node_modules/js-yaml/node_modules/esprima/package.json b/node_modules/grunt/node_modules/js-yaml/node_modules/esprima/package.json deleted file mode 100644 index b460b3b8..00000000 --- a/node_modules/grunt/node_modules/js-yaml/node_modules/esprima/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "esprima", - "description": "ECMAScript parsing infrastructure for multipurpose analysis", - "homepage": "http://esprima.org", - "main": "esprima.js", - "bin": { - "esparse": "./bin/esparse.js", - "esvalidate": "./bin/esvalidate.js" - }, - "files": [ - "bin", - "test/run.js", - "test/runner.js", - "test/test.js", - "test/compat.js", - "test/reflect.js", - "esprima.js" - ], - "version": "1.0.4", - "engines": { - "node": ">=0.4.0" - }, - "maintainers": [ - { - "name": "ariya", - "email": "ariya.hidayat@gmail.com" - } - ], - "repository": { - "type": "git", - "url": "http://github.com/ariya/esprima.git" - }, - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/ariya/esprima/raw/master/LICENSE.BSD" - } - ], - "keywords": [ - "ast", - "ecmascript", - "javascript", - "parser", - "syntax" - ], - "scripts": { - "test": "node test/run.js", - "benchmark": "node test/benchmarks.js", - "benchmark-quick": "node test/benchmarks.js quick" - }, - "_id": "esprima@1.0.4", - "dist": { - "shasum": "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad", - "tarball": "http://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - }, - "_npmVersion": "1.1.61", - "_npmUser": { - "name": "ariya", - "email": "ariya.hidayat@gmail.com" - }, - "directories": {}, - "_shasum": "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad", - "_resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "_from": "esprima@>=1.0.2 <1.1.0" -} diff --git a/node_modules/grunt/node_modules/js-yaml/package.json b/node_modules/grunt/node_modules/js-yaml/package.json deleted file mode 100644 index e4cc31d3..00000000 --- a/node_modules/grunt/node_modules/js-yaml/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "js-yaml", - "version": "2.0.5", - "description": "YAML 1.2 parser and serializer", - "keywords": [ - "yaml", - "parser", - "serializer", - "pyyaml" - ], - "homepage": "https://github.com/nodeca/js-yaml", - "author": { - "name": "Dervus Grim", - "email": "dervus@lavabit.com" - }, - "contributors": [ - { - "name": "Aleksey V Zapparov", - "email": "ixti@member.fsf.org", - "url": "http://www.ixti.net/" - }, - { - "name": "Martin Grenfell", - "email": "martin.grenfell@gmail.com", - "url": "http://got-ravings.blogspot.com" - } - ], - "bugs": { - "url": "https://github.com/nodeca/js-yaml/issues" - }, - "license": { - "type": "MIT", - "url": "https://github.com/nodeca/js-yaml/blob/master/LICENSE" - }, - "repository": { - "type": "git", - "url": "git://github.com/nodeca/js-yaml.git" - }, - "main": "./index.js", - "bin": { - "js-yaml": "bin/js-yaml.js" - }, - "scripts": { - "test": "make test" - }, - "dependencies": { - "argparse": "~ 0.1.11", - "esprima": "~ 1.0.2" - }, - "devDependencies": { - "mocha": "*" - }, - "engines": { - "node": ">= 0.6.0" - }, - "_id": "js-yaml@2.0.5", - "dist": { - "shasum": "a25ae6509999e97df278c6719da11bd0687743a8", - "tarball": "http://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz" - }, - "_from": "js-yaml@>=2.0.5 <2.1.0", - "_resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "_npmVersion": "1.2.14", - "_npmUser": { - "name": "vitaly", - "email": "vitaly@rcdesign.ru" - }, - "maintainers": [ - { - "name": "vitaly", - "email": "vitaly@rcdesign.ru" - } - ], - "directories": {}, - "_shasum": "a25ae6509999e97df278c6719da11bd0687743a8" -} diff --git a/node_modules/grunt/node_modules/lodash/package.json b/node_modules/grunt/node_modules/lodash/package.json deleted file mode 100644 index 06030676..00000000 --- a/node_modules/grunt/node_modules/lodash/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "lodash", - "version": "0.9.2", - "description": "A utility library delivering consistency, customization, performance, and extras.", - "homepage": "http://lodash.com", - "license": "MIT", - "main": "./lodash.js", - "keywords": [ - "browser", - "client", - "functional", - "performance", - "server", - "speed", - "util" - ], - "author": { - "name": "John-David Dalton", - "email": "john.david.dalton@gmail.com", - "url": "http://allyoucanleet.com/" - }, - "contributors": [ - { - "name": "John-David Dalton", - "email": "john.david.dalton@gmail.com", - "url": "http://allyoucanleet.com/" - }, - { - "name": "Blaine Bublitz", - "email": "blaine@iceddev.com", - "url": "http://iceddev.com/" - }, - { - "name": "Kit Cambridge", - "email": "github@kitcambridge.be", - "url": "http://kitcambridge.be/" - }, - { - "name": "Mathias Bynens", - "email": "mathias@qiwi.be", - "url": "http://mathiasbynens.be/" - } - ], - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/lodash/lodash.git" - }, - "engines": [ - "node", - "rhino" - ], - "jam": { - "main": "./lodash.js" - }, - "_id": "lodash@0.9.2", - "dist": { - "shasum": "8f3499c5245d346d682e5b0d3b40767e09f1a92c", - "tarball": "http://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "_from": "lodash@>=0.9.2 <0.10.0", - "_npmVersion": "1.2.24", - "_npmUser": { - "name": "jdalton", - "email": "john.david.dalton@gmail.com" - }, - "maintainers": [ - { - "name": "jdalton", - "email": "john.david.dalton@gmail.com" - } - ], - "directories": {}, - "_shasum": "8f3499c5245d346d682e5b0d3b40767e09f1a92c", - "_resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" -} diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/LICENSE b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/README.md b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/README.md deleted file mode 100644 index 3fd6d0bc..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -## Usage: - -```javascript -var LRU = require("lru-cache") - , options = { max: 500 - , length: function (n) { return n * 2 } - , dispose: function (key, n) { n.close() } - , maxAge: 1000 * 60 * 60 } - , cache = LRU(options) - , otherCache = LRU(50) // sets just the max size - -cache.set("key", "value") -cache.get("key") // "value" - -cache.reset() // empty the cache -``` - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -## Options - -* `max` The maximum size of the cache, checked by applying the length - function to all values in the cache. Not setting this is kind of - silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. -* `maxAge` Maximum age in ms. Items are not pro-actively pruned out - as they age, but if you try to get an item that is too old, it'll - drop it and return undefined instead of giving it to you. -* `length` Function that is used to calculate the length of stored - items. If you're storing strings or buffers, then you probably want - to do something like `function(n){return n.length}`. The default is - `function(n){return 1}`, which is fine if you want to store `max` - like-sized things. -* `dispose` Function that is called on items when they are dropped - from the cache. This can be handy if you want to close file - descriptors or do other cleanup tasks when items are no longer - accessible. Called with `key, value`. It's called *before* - actually removing the item from the internal cache, so if you want - to immediately put it back in, you'll have to do that in a - `nextTick` or `setTimeout` callback or it won't do anything. -* `stale` By default, if you set a `maxAge`, it'll only actually pull - stale items out of the cache when you `get(key)`. (That is, it's - not pre-emptively doing a `setTimeout` or anything.) If you set - `stale:true`, it'll return the stale value before deleting it. If - you don't set this, then it'll return `undefined` when you try to - get a stale entry, as if it had already been deleted. - -## API - -* `set(key, value, maxAge)` -* `get(key) => value` - - Both of these will update the "recently used"-ness of the key. - They do what you think. `max` is optional and overrides the - cache `max` option if provided. - -* `peek(key)` - - Returns the key value (or `undefined` if not found) without - updating the "recently used"-ness of the key. - - (If you find yourself using this a lot, you *might* be using the - wrong sort of data structure, but there are some use cases where - it's handy.) - -* `del(key)` - - Deletes a key out of the cache. - -* `reset()` - - Clear the cache entirely, throwing away all values. - -* `has(key)` - - Check if a key is in the cache, without updating the recent-ness - or deleting it for being stale. - -* `forEach(function(value,key,cache), [thisp])` - - Just like `Array.prototype.forEach`. Iterates over all the keys - in the cache, in order of recent-ness. (Ie, more recently used - items are iterated over first.) - -* `keys()` - - Return an array of the keys in the cache. - -* `values()` - - Return an array of the values in the cache. - -* `length()` - - Return total length of objects in cache taking into account - `length` options function. - -* `itemCount` - - Return total quantity of objects currently in cache. Note, that - `stale` (see options) items are returned as part of this item - count. - -* `dump()` - - Return an array of the cache entries ready for serialization and usage - with 'destinationCache.load(arr)`. - -* `load(cacheEntriesArray)` - - Loads another cache entries array, obtained with `sourceCache.dump()`, - into the cache. The destination cache is reset before loading new entries diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index 32c2d2d9..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,318 +0,0 @@ -;(function () { // closure for web browsers - -if (typeof module === 'object' && module.exports) { - module.exports = LRUCache -} else { - // just set the global for non-node platforms. - this.LRUCache = LRUCache -} - -function hOP (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key) -} - -function naiveLength () { return 1 } - -function LRUCache (options) { - if (!(this instanceof LRUCache)) - return new LRUCache(options) - - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - this._max = options.max - // Kind of weird to have a default max of Infinity, but oh well. - if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) - this._max = Infinity - - this._lengthCalculator = options.length || naiveLength - if (typeof this._lengthCalculator !== "function") - this._lengthCalculator = naiveLength - - this._allowStale = options.stale || false - this._maxAge = options.maxAge || null - this._dispose = options.dispose - this.reset() -} - -// resize the cache when the max changes. -Object.defineProperty(LRUCache.prototype, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - this._max = mL - if (this._length > this._max) trim(this) - } - , get : function () { return this._max } - , enumerable : true - }) - -// resize the cache when the lengthCalculator changes. -Object.defineProperty(LRUCache.prototype, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - this._lengthCalculator = naiveLength - this._length = this._itemCount - for (var key in this._cache) { - this._cache[key].length = 1 - } - } else { - this._lengthCalculator = lC - this._length = 0 - for (var key in this._cache) { - this._cache[key].length = this._lengthCalculator(this._cache[key].value) - this._length += this._cache[key].length - } - } - - if (this._length > this._max) trim(this) - } - , get : function () { return this._lengthCalculator } - , enumerable : true - }) - -Object.defineProperty(LRUCache.prototype, "length", - { get : function () { return this._length } - , enumerable : true - }) - - -Object.defineProperty(LRUCache.prototype, "itemCount", - { get : function () { return this._itemCount } - , enumerable : true - }) - -LRUCache.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0 - var itemCount = this._itemCount - - for (var k = this._mru - 1; k >= 0 && i < itemCount; k--) if (this._lruList[k]) { - i++ - var hit = this._lruList[k] - if (isStale(this, hit)) { - del(this, hit) - if (!this._allowStale) hit = undefined - } - if (hit) { - fn.call(thisp, hit.value, hit.key, this) - } - } -} - -LRUCache.prototype.keys = function () { - var keys = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - keys[i++] = hit.key - } - return keys -} - -LRUCache.prototype.values = function () { - var values = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - values[i++] = hit.value - } - return values -} - -LRUCache.prototype.reset = function () { - if (this._dispose && this._cache) { - for (var k in this._cache) { - this._dispose(k, this._cache[k].value) - } - } - - this._cache = Object.create(null) // hash of items by key - this._lruList = Object.create(null) // list of items in order of use recency - this._mru = 0 // most recently used - this._lru = 0 // least recently used - this._length = 0 // number of items in the list - this._itemCount = 0 -} - -LRUCache.prototype.dump = function () { - var arr = [] - var i = 0 - - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - if (!isStale(this, hit)) { - //Do not store staled hits - ++i - arr.push({ - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }); - } - } - //arr has the most read first - return arr -} - -LRUCache.prototype.dumpLru = function () { - return this._lruList -} - -LRUCache.prototype.set = function (key, value, maxAge) { - maxAge = maxAge || this._maxAge - var now = maxAge ? Date.now() : 0 - var len = this._lengthCalculator(value) - - if (hOP(this._cache, key)) { - if (len > this._max) { - del(this, this._cache[key]) - return false - } - // dispose of the old one before overwriting - if (this._dispose) - this._dispose(key, this._cache[key].value) - - this._cache[key].now = now - this._cache[key].maxAge = maxAge - this._cache[key].value = value - this._length += (len - this._cache[key].length) - this._cache[key].length = len - this.get(key) - - if (this._length > this._max) - trim(this) - - return true - } - - var hit = new Entry(key, value, this._mru++, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this._max) { - if (this._dispose) this._dispose(key, value) - return false - } - - this._length += hit.length - this._lruList[hit.lu] = this._cache[key] = hit - this._itemCount ++ - - if (this._length > this._max) - trim(this) - - return true -} - -LRUCache.prototype.has = function (key) { - if (!hOP(this._cache, key)) return false - var hit = this._cache[key] - if (isStale(this, hit)) { - return false - } - return true -} - -LRUCache.prototype.get = function (key) { - return get(this, key, true) -} - -LRUCache.prototype.peek = function (key) { - return get(this, key, false) -} - -LRUCache.prototype.pop = function () { - var hit = this._lruList[this._lru] - del(this, hit) - return hit || null -} - -LRUCache.prototype.del = function (key) { - del(this, this._cache[key]) -} - -LRUCache.prototype.load = function (arr) { - //reset the cache - this.reset(); - - var now = Date.now() - //A previous serialized cache has the most recent items first - for (var l = arr.length - 1; l >= 0; l-- ) { - var hit = arr[l] - var expiresAt = hit.e || 0 - if (expiresAt === 0) { - //the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - } else { - var maxAge = expiresAt - now - //dont add already expired items - if (maxAge > 0) this.set(hit.k, hit.v, maxAge) - } - } -} - -function get (self, key, doUse) { - var hit = self._cache[key] - if (hit) { - if (isStale(self, hit)) { - del(self, hit) - if (!self._allowStale) hit = undefined - } else { - if (doUse) use(self, hit) - } - if (hit) hit = hit.value - } - return hit -} - -function isStale(self, hit) { - if (!hit || (!hit.maxAge && !self._maxAge)) return false - var stale = false; - var diff = Date.now() - hit.now - if (hit.maxAge) { - stale = diff > hit.maxAge - } else { - stale = self._maxAge && (diff > self._maxAge) - } - return stale; -} - -function use (self, hit) { - shiftLU(self, hit) - hit.lu = self._mru ++ - self._lruList[hit.lu] = hit -} - -function trim (self) { - while (self._lru < self._mru && self._length > self._max) - del(self, self._lruList[self._lru]) -} - -function shiftLU (self, hit) { - delete self._lruList[ hit.lu ] - while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ -} - -function del (self, hit) { - if (hit) { - if (self._dispose) self._dispose(hit.key, hit.value) - self._length -= hit.length - self._itemCount -- - delete self._cache[ hit.key ] - shiftLU(self, hit) - } -} - -// classy, since V8 prefers predictable objects. -function Entry (key, value, lu, length, now, maxAge) { - this.key = key - this.value = value - this.lu = lu - this.length = length - this.now = now - if (maxAge) this.maxAge = maxAge -} - -})() diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/package.json b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/package.json deleted file mode 100644 index 80fa97e0..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "lru-cache", - "description": "A cache object that deletes the least-recently-used items.", - "version": "2.7.0", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "keywords": [ - "mru", - "lru", - "cache" - ], - "scripts": { - "test": "tap test --gc" - }, - "main": "lib/lru-cache.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "devDependencies": { - "tap": "^1.2.0", - "weak": "" - }, - "license": "ISC", - "gitHead": "fc6ee93093f4e463e5946736d4c48adc013724d1", - "bugs": { - "url": "https://github.com/isaacs/node-lru-cache/issues" - }, - "homepage": "https://github.com/isaacs/node-lru-cache#readme", - "_id": "lru-cache@2.7.0", - "_shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6", - "_from": "lru-cache@>=2.0.0 <3.0.0", - "_npmVersion": "3.3.2", - "_nodeVersion": "4.0.0", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6", - "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - { - "name": "othiym23", - "email": "ogd@aoaioxxysz.net" - } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/basic.js deleted file mode 100644 index b47225f1..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,396 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU({max: 10}) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.max, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("max", function (t) { - var cache = new LRU(3) - - // test changing the max, verify that the LRU items get dropped. - cache.max = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the max restriction, and try again. - cache.max = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.max, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU({ - max: 100, - length: function (item) { return item.size } - }) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.max, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU({ - max: 10, - length: function (item) { return item.size } - }) - t.equal(cache.max, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU({ - max:8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) - -test("lru recently updated with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - t.equal(cache.length, 6) //CCC BB A - cache.set("a", "+A") - t.equal(cache.length, 7) //+A CCC BB - cache.set("b", "++BB") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("c", "oversized") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("a", "oversized") - t.equal(cache.length, 4) //++BB - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), "++BB") - t.end() -}) - -test("set returns proper booleans", function(t) { - var cache = new LRU({ - max: 5, - length: function (item) { return item.length } - }) - - t.equal(cache.set("a", "A"), true) - - // should return false for max exceeded - t.equal(cache.set("b", "donuts"), false) - - t.equal(cache.set("b", "B"), true) - t.equal(cache.set("c", "CCCC"), true) - t.end() -}) - -test("drop the old items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A") - - setTimeout(function () { - cache.set("b", "b") - t.equal(cache.get("a"), "A") - }, 25) - - setTimeout(function () { - cache.set("c", "C") - // timed out - t.notOk(cache.get("a")) - }, 60 + 25) - - setTimeout(function () { - t.notOk(cache.get("b")) - t.equal(cache.get("c"), "C") - }, 90) - - setTimeout(function () { - t.notOk(cache.get("c")) - t.end() - }, 155) -}) - -test("individual item can have it's own maxAge", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A", 20) - setTimeout(function () { - t.notOk(cache.get("a")) - t.end() - }, 25) -}) - -test("individual item can have it's own maxAge > cache's", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 20 - }) - - cache.set("a", "A", 50) - setTimeout(function () { - t.equal(cache.get("a"), "A") - t.end() - }, 25) -}) - -test("disposal function", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - dispose: function (k, n) { - disposed = n - } - }) - - cache.set(1, 1) - cache.set(2, 2) - t.equal(disposed, 1) - cache.set(3, 3) - t.equal(disposed, 2) - cache.reset() - t.equal(disposed, 3) - t.end() -}) - -test("disposal function on too big of item", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - length: function (k) { - return k.length - }, - dispose: function (k, n) { - disposed = n - } - }) - var obj = [ 1, 2 ] - - t.equal(disposed, false) - cache.set("obj", obj) - t.equal(disposed, obj) - t.end() -}) - -test("has()", function(t) { - var cache = new LRU({ - max: 1, - maxAge: 10 - }) - - cache.set('foo', 'bar') - t.equal(cache.has('foo'), true) - cache.set('blu', 'baz') - t.equal(cache.has('foo'), false) - t.equal(cache.has('blu'), true) - setTimeout(function() { - t.equal(cache.has('blu'), false) - t.end() - }, 15) -}) - -test("stale", function(t) { - var cache = new LRU({ - maxAge: 10, - stale: true - }) - - cache.set('foo', 'bar') - t.equal(cache.get('foo'), 'bar') - t.equal(cache.has('foo'), true) - setTimeout(function() { - t.equal(cache.has('foo'), false) - t.equal(cache.get('foo'), 'bar') - t.equal(cache.get('foo'), undefined) - t.end() - }, 15) -}) - -test("lru update via set", function(t) { - var cache = LRU({ max: 2 }); - - cache.set('foo', 1); - cache.set('bar', 2); - cache.del('bar'); - cache.set('baz', 3); - cache.set('qux', 4); - - t.equal(cache.get('foo'), undefined) - t.equal(cache.get('bar'), undefined) - t.equal(cache.get('baz'), 3) - t.equal(cache.get('qux'), 4) - t.end() -}) - -test("least recently set w/ peek", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - t.equal(cache.peek("a"), "A") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("pop the least used item", function (t) { - var cache = new LRU(3) - , last - - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - - t.equal(cache.length, 3) - t.equal(cache.max, 3) - - // Ensure we pop a, c, b - cache.get("b", "B") - - last = cache.pop() - t.equal(last.key, "a") - t.equal(last.value, "A") - t.equal(cache.length, 2) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "c") - t.equal(last.value, "C") - t.equal(cache.length, 1) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "b") - t.equal(last.value, "B") - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last, null) - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - t.end() -}) diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/foreach.js b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/foreach.js deleted file mode 100644 index 4190417c..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +++ /dev/null @@ -1,120 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('forEach', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 9 - l.forEach(function (val, key, cache) { - t.equal(cache, l) - t.equal(key, i.toString()) - t.equal(val, i.toString(2)) - i -= 1 - }) - - // get in order of most recently used - l.get(6) - l.get(8) - - var order = [ 8, 6, 9, 7, 5 ] - var i = 0 - - l.forEach(function (val, key, cache) { - var j = order[i ++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - t.end() -}) - -test('keys() and values()', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - t.similar(l.keys(), ['9', '8', '7', '6', '5']) - t.similar(l.values(), ['1001', '1000', '111', '110', '101']) - - // get in order of most recently used - l.get(6) - l.get(8) - - t.similar(l.keys(), ['8', '6', '9', '7', '5']) - t.similar(l.values(), ['1000', '110', '1001', '111', '101']) - - t.end() -}) - -test('all entries are iterated over', function(t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function (val, key, cache) { - if (i > 0) { - cache.del(key) - } - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 1) - - t.end() -}) - -test('all stale entries are removed', function(t) { - var l = new LRU({ max: 5, maxAge: -5, stale: true }) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function () { - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 0) - - t.end() -}) - -test('expires', function (t) { - var l = new LRU({ - max: 10, - maxAge: 50 - }) - for (var i = 0; i < 10; i++) { - l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined)) - } - - var i = 0 - var order = [ 8, 6, 4, 2, 0 ] - setTimeout(function () { - l.forEach(function (val, key, cache) { - var j = order[i++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - setTimeout(function () { - var count = 0; - l.forEach(function (val, key, cache) { count++; }) - t.equal(0, count); - t.end() - }, 25) - - }, 26) -}) diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js b/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js deleted file mode 100644 index b5912f6f..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node --expose_gc - - -var weak = require('weak'); -var test = require('tap').test -var LRU = require('../') -var l = new LRU({ max: 10 }) -var refs = 0 -function X() { - refs ++ - weak(this, deref) -} - -function deref() { - refs -- -} - -test('no leaks', function (t) { - // fill up the cache - for (var i = 0; i < 100; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var start = process.memoryUsage() - - // capture the memory - var startRefs = refs - - // do it again, but more - for (var i = 0; i < 10000; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var end = process.memoryUsage() - t.equal(refs, startRefs, 'no leaky refs') - - console.error('start: %j\n' + - 'end: %j', start, end); - t.pass(); - t.end(); -}) diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/LICENSE b/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/README.md b/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/README.md deleted file mode 100644 index 25a38a53..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocaine-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `util.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/package.json b/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/package.json deleted file mode 100644 index 4255e77a..00000000 --- a/node_modules/grunt/node_modules/minimatch/node_modules/sigmund/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "sigmund", - "version": "1.0.1", - "description": "Quick and dirty signatures for Objects.", - "main": "sigmund.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.3.0" - }, - "scripts": { - "test": "tap test/*.js", - "bench": "node bench.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund.git" - }, - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "ISC", - "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6", - "bugs": { - "url": "https://github.com/isaacs/sigmund/issues" - }, - "homepage": "https://github.com/isaacs/sigmund#readme", - "_id": "sigmund@1.0.1", - "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", - "_from": "sigmund@>=1.0.0 <1.1.0", - "_npmVersion": "2.10.0", - "_nodeVersion": "2.0.1", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", - "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/minimatch/package.json b/node_modules/grunt/node_modules/minimatch/package.json deleted file mode 100644 index a949c3cc..00000000 --- a/node_modules/grunt/node_modules/minimatch/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "0.2.14", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test/*.js" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "devDependencies": { - "tap": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "homepage": "https://github.com/isaacs/minimatch", - "_id": "minimatch@0.2.14", - "dist": { - "shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a", - "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" - }, - "_from": "minimatch@>=0.2.12 <0.3.0", - "_npmVersion": "1.3.17", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {}, - "_shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a", - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/nopt/README.md b/node_modules/grunt/node_modules/nopt/README.md deleted file mode 100644 index eeddfd4f..00000000 --- a/node_modules/grunt/node_modules/nopt/README.md +++ /dev/null @@ -1,208 +0,0 @@ -If you want to write an option parser, and have it be good, there are -two ways to do it. The Right Way, and the Wrong Way. - -The Wrong Way is to sit down and write an option parser. We've all done -that. - -The Right Way is to write some complex configurable program with so many -options that you go half-insane just trying to manage them all, and put -it off with duct-tape solutions until you see exactly to the core of the -problem, and finally snap and write an awesome option parser. - -If you want to write an option parser, don't write an option parser. -Write a package manager, or a source control system, or a service -restarter, or an operating system. You probably won't end up with a -good one of those, but if you don't give up, and you are relentless and -diligent enough in your procrastination, you may just end up with a very -nice option parser. - -## USAGE - - // my-program.js - var nopt = require("nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - , "many" : [String, Array] - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag"] - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - console.log(parsed) - -This would give you support for any of the following: - -```bash -$ node my-program.js --foo "blerp" --no-flag -{ "foo" : "blerp", "flag" : false } - -$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag -{ bar: 7, foo: "Mr. Hand", flag: true } - -$ node my-program.js --foo "blerp" -f -----p -{ foo: "blerp", flag: true, pick: true } - -$ node my-program.js -fp --foofoo -{ foo: "Mr. Foo", flag: true, pick: true } - -$ node my-program.js --foofoo -- -fp # -- stops the flag parsing. -{ foo: "Mr. Foo", argv: { remain: ["-fp"] } } - -$ node my-program.js --blatzk 1000 -fp # unknown opts are ok. -{ blatzk: 1000, flag: true, pick: true } - -$ node my-program.js --blatzk true -fp # but they need a value -{ blatzk: true, flag: true, pick: true } - -$ node my-program.js --no-blatzk -fp # unless they start with "no-" -{ blatzk: false, flag: true, pick: true } - -$ node my-program.js --baz b/a/z # known paths are resolved. -{ baz: "/Users/isaacs/b/a/z" } - -# if Array is one of the types, then it can take many -# values, and will always be an array. The other types provided -# specify what types are allowed in the list. - -$ node my-program.js --many 1 --many null --many foo -{ many: ["1", "null", "foo"] } - -$ node my-program.js --many foo -{ many: ["foo"] } -``` - -Read the tests at the bottom of `lib/nopt.js` for more examples of -what this puppy can do. - -## Types - -The following types are supported, and defined on `nopt.typeDefs` - -* String: A normal string. No parsing is done. -* path: A file system path. Gets resolved against cwd if not absolute. -* url: A url. If it doesn't parse, it isn't accepted. -* Number: Must be numeric. -* Date: Must parse as a date. If it does, and `Date` is one of the options, - then it will return a Date object, not a string. -* Boolean: Must be either `true` or `false`. If an option is a boolean, - then it does not need a value, and its presence will imply `true` as - the value. To negate boolean flags, do `--no-whatever` or `--whatever - false` -* NaN: Means that the option is strictly not allowed. Any value will - fail. -* Stream: An object matching the "Stream" class in node. Valuable - for use when validating programmatically. (npm uses this to let you - supply any WriteStream on the `outfd` and `logfd` config options.) -* Array: If `Array` is specified as one of the types, then the value - will be parsed as a list of options. This means that multiple values - can be specified, and that the value will always be an array. - -If a type is an array of values not on this list, then those are -considered valid values. For instance, in the example above, the -`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, -and any other value will be rejected. - -When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be -interpreted as their JavaScript equivalents, and numeric values will be -interpreted as a number. - -You can also mix types and values, or multiple types, in a list. For -instance `{ blah: [Number, null] }` would allow a value to be set to -either a Number or null. - -To define a new type, add it to `nopt.typeDefs`. Each item in that -hash is an object with a `type` member and a `validate` method. The -`type` member is an object that matches what goes in the type list. The -`validate` method is a function that gets called with `validate(data, -key, val)`. Validate methods should assign `data[key]` to the valid -value of `val` if it can be handled properly, or return boolean -`false` if it cannot. - -You can also call `nopt.clean(data, types, typeDefs)` to clean up a -config object and remove its invalid properties. - -## Error Handling - -By default, nopt outputs a warning to standard error when invalid -options are found. You can change this behavior by assigning a method -to `nopt.invalidHandler`. This method will be called with -the offending `nopt.invalidHandler(key, val, types)`. - -If no `nopt.invalidHandler` is assigned, then it will console.error -its whining. If it is assigned to boolean `false` then the warning is -suppressed. - -## Abbreviations - -Yes, they are supported. If you define options like this: - -```javascript -{ "foolhardyelephants" : Boolean -, "pileofmonkeys" : Boolean } -``` - -Then this will work: - -```bash -node program.js --foolhar --pil -node program.js --no-f --pileofmon -# etc. -``` - -## Shorthands - -Shorthands are a hash of shorter option names to a snippet of args that -they expand to. - -If multiple one-character shorthands are all combined, and the -combination does not unambiguously match any other option or shorthand, -then they will be broken up into their constituent parts. For example: - -```json -{ "s" : ["--loglevel", "silent"] -, "g" : "--global" -, "f" : "--force" -, "p" : "--parseable" -, "l" : "--long" -} -``` - -```bash -npm ls -sgflp -# just like doing this: -npm ls --loglevel silent --global --force --long --parseable -``` - -## The Rest of the args - -The config object returned by nopt is given a special member called -`argv`, which is an object with the following fields: - -* `remain`: The remaining args after all the parsing has occurred. -* `original`: The args as they originally appeared. -* `cooked`: The args after flags and shorthands are expanded. - -## Slicing - -Node programs are called with more or less the exact argv as it appears -in C land, after the v8 and node-specific options have been plucked off. -As such, `argv[0]` is always `node` and `argv[1]` is always the -JavaScript program being run. - -That's usually not very useful to you. So they're sliced off by -default. If you want them, then you can pass in `0` as the last -argument, or any other number that you'd like to slice off the start of -the list. diff --git a/node_modules/grunt/node_modules/nopt/examples/my-program.js b/node_modules/grunt/node_modules/nopt/examples/my-program.js deleted file mode 100755 index 142447e1..00000000 --- a/node_modules/grunt/node_modules/nopt/examples/my-program.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node - -//process.env.DEBUG_NOPT = 1 - -// my-program.js -var nopt = require("../lib/nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag", "true"] - , "g" : ["--flag"] - , "s" : "--flag" - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - -console.log("parsed =\n"+ require("util").inspect(parsed)) diff --git a/node_modules/grunt/node_modules/nopt/lib/nopt.js b/node_modules/grunt/node_modules/nopt/lib/nopt.js deleted file mode 100644 index ff802daf..00000000 --- a/node_modules/grunt/node_modules/nopt/lib/nopt.js +++ /dev/null @@ -1,552 +0,0 @@ -// info about each config option. - -var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG - ? function () { console.error.apply(console, arguments) } - : function () {} - -var url = require("url") - , path = require("path") - , Stream = require("stream").Stream - , abbrev = require("abbrev") - -module.exports = exports = nopt -exports.clean = clean - -exports.typeDefs = - { String : { type: String, validate: validateString } - , Boolean : { type: Boolean, validate: validateBoolean } - , url : { type: url, validate: validateUrl } - , Number : { type: Number, validate: validateNumber } - , path : { type: path, validate: validatePath } - , Stream : { type: Stream, validate: validateStream } - , Date : { type: Date, validate: validateDate } - } - -function nopt (types, shorthands, args, slice) { - args = args || process.argv - types = types || {} - shorthands = shorthands || {} - if (typeof slice !== "number") slice = 2 - - debug(types, shorthands, args, slice) - - args = args.slice(slice) - var data = {} - , key - , remain = [] - , cooked = args - , original = args.slice(0) - - parse(args, data, remain, types, shorthands) - // now data is full - clean(data, types, exports.typeDefs) - data.argv = {remain:remain,cooked:cooked,original:original} - data.argv.toString = function () { - return this.original.map(JSON.stringify).join(" ") - } - return data -} - -function clean (data, types, typeDefs) { - typeDefs = typeDefs || exports.typeDefs - var remove = {} - , typeDefault = [false, true, null, String, Number] - - Object.keys(data).forEach(function (k) { - if (k === "argv") return - var val = data[k] - , isArray = Array.isArray(val) - , type = types[k] - if (!isArray) val = [val] - if (!type) type = typeDefault - if (type === Array) type = typeDefault.concat(Array) - if (!Array.isArray(type)) type = [type] - - debug("val=%j", val) - debug("types=", type) - val = val.map(function (val) { - // if it's an unknown value, then parse false/true/null/numbers/dates - if (typeof val === "string") { - debug("string %j", val) - val = val.trim() - if ((val === "null" && ~type.indexOf(null)) - || (val === "true" && - (~type.indexOf(true) || ~type.indexOf(Boolean))) - || (val === "false" && - (~type.indexOf(false) || ~type.indexOf(Boolean)))) { - val = JSON.parse(val) - debug("jsonable %j", val) - } else if (~type.indexOf(Number) && !isNaN(val)) { - debug("convert to number", val) - val = +val - } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { - debug("convert to date", val) - val = new Date(val) - } - } - - if (!types.hasOwnProperty(k)) { - return val - } - - // allow `--no-blah` to set 'blah' to null if null is allowed - if (val === false && ~type.indexOf(null) && - !(~type.indexOf(false) || ~type.indexOf(Boolean))) { - val = null - } - - var d = {} - d[k] = val - debug("prevalidated val", d, val, types[k]) - if (!validate(d, k, val, types[k], typeDefs)) { - if (exports.invalidHandler) { - exports.invalidHandler(k, val, types[k], data) - } else if (exports.invalidHandler !== false) { - debug("invalid: "+k+"="+val, types[k]) - } - return remove - } - debug("validated val", d, val, types[k]) - return d[k] - }).filter(function (val) { return val !== remove }) - - if (!val.length) delete data[k] - else if (isArray) { - debug(isArray, data[k], val) - data[k] = val - } else data[k] = val[0] - - debug("k=%s val=%j", k, val, data[k]) - }) -} - -function validateString (data, k, val) { - data[k] = String(val) -} - -function validatePath (data, k, val) { - data[k] = path.resolve(String(val)) - return true -} - -function validateNumber (data, k, val) { - debug("validate Number %j %j %j", k, val, isNaN(val)) - if (isNaN(val)) return false - data[k] = +val -} - -function validateDate (data, k, val) { - debug("validate Date %j %j %j", k, val, Date.parse(val)) - var s = Date.parse(val) - if (isNaN(s)) return false - data[k] = new Date(val) -} - -function validateBoolean (data, k, val) { - if (val instanceof Boolean) val = val.valueOf() - else if (typeof val === "string") { - if (!isNaN(val)) val = !!(+val) - else if (val === "null" || val === "false") val = false - else val = true - } else val = !!val - data[k] = val -} - -function validateUrl (data, k, val) { - val = url.parse(String(val)) - if (!val.host) return false - data[k] = val.href -} - -function validateStream (data, k, val) { - if (!(val instanceof Stream)) return false - data[k] = val -} - -function validate (data, k, val, type, typeDefs) { - // arrays are lists of types. - if (Array.isArray(type)) { - for (var i = 0, l = type.length; i < l; i ++) { - if (type[i] === Array) continue - if (validate(data, k, val, type[i], typeDefs)) return true - } - delete data[k] - return false - } - - // an array of anything? - if (type === Array) return true - - // NaN is poisonous. Means that something is not allowed. - if (type !== type) { - debug("Poison NaN", k, val, type) - delete data[k] - return false - } - - // explicit list of values - if (val === type) { - debug("Explicitly allowed %j", val) - // if (isArray) (data[k] = data[k] || []).push(val) - // else data[k] = val - data[k] = val - return true - } - - // now go through the list of typeDefs, validate against each one. - var ok = false - , types = Object.keys(typeDefs) - for (var i = 0, l = types.length; i < l; i ++) { - debug("test type %j %j %j", k, val, types[i]) - var t = typeDefs[types[i]] - if (t && type === t.type) { - var d = {} - ok = false !== t.validate(d, k, val) - val = d[k] - if (ok) { - // if (isArray) (data[k] = data[k] || []).push(val) - // else data[k] = val - data[k] = val - break - } - } - } - debug("OK? %j (%j %j %j)", ok, k, val, types[i]) - - if (!ok) delete data[k] - return ok -} - -function parse (args, data, remain, types, shorthands) { - debug("parse", args, data, remain) - - var key = null - , abbrevs = abbrev(Object.keys(types)) - , shortAbbr = abbrev(Object.keys(shorthands)) - - for (var i = 0; i < args.length; i ++) { - var arg = args[i] - debug("arg", arg) - - if (arg.match(/^-{2,}$/)) { - // done with keys. - // the rest are args. - remain.push.apply(remain, args.slice(i + 1)) - args[i] = "--" - break - } - if (arg.charAt(0) === "-") { - if (arg.indexOf("=") !== -1) { - var v = arg.split("=") - arg = v.shift() - v = v.join("=") - args.splice.apply(args, [i, 1].concat([arg, v])) - } - // see if it's a shorthand - // if so, splice and back up to re-parse it. - var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) - debug("arg=%j shRes=%j", arg, shRes) - if (shRes) { - debug(arg, shRes) - args.splice.apply(args, [i, 1].concat(shRes)) - if (arg !== shRes[0]) { - i -- - continue - } - } - arg = arg.replace(/^-+/, "") - var no = false - while (arg.toLowerCase().indexOf("no-") === 0) { - no = !no - arg = arg.substr(3) - } - - if (abbrevs[arg]) arg = abbrevs[arg] - - var isArray = types[arg] === Array || - Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1 - - var val - , la = args[i + 1] - - var isBool = no || - types[arg] === Boolean || - Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 || - (la === "false" && - (types[arg] === null || - Array.isArray(types[arg]) && ~types[arg].indexOf(null))) - - if (isBool) { - // just set and move along - val = !no - // however, also support --bool true or --bool false - if (la === "true" || la === "false") { - val = JSON.parse(la) - la = null - if (no) val = !val - i ++ - } - - // also support "foo":[Boolean, "bar"] and "--foo bar" - if (Array.isArray(types[arg]) && la) { - if (~types[arg].indexOf(la)) { - // an explicit type - val = la - i ++ - } else if ( la === "null" && ~types[arg].indexOf(null) ) { - // null allowed - val = null - i ++ - } else if ( !la.match(/^-{2,}[^-]/) && - !isNaN(la) && - ~types[arg].indexOf(Number) ) { - // number - val = +la - i ++ - } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) { - // string - val = la - i ++ - } - } - - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val - - continue - } - - if (la && la.match(/^-{2,}$/)) { - la = undefined - i -- - } - - val = la === undefined ? true : la - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val - - i ++ - continue - } - remain.push(arg) - } -} - -function resolveShort (arg, shorthands, shortAbbr, abbrevs) { - // handle single-char shorthands glommed together, like - // npm ls -glp, but only if there is one dash, and only if - // all of the chars are single-char shorthands, and it's - // not a match to some other abbrev. - arg = arg.replace(/^-+/, '') - if (abbrevs[arg] && !shorthands[arg]) { - return null - } - if (shortAbbr[arg]) { - arg = shortAbbr[arg] - } else { - var singles = shorthands.___singles - if (!singles) { - singles = Object.keys(shorthands).filter(function (s) { - return s.length === 1 - }).reduce(function (l,r) { l[r] = true ; return l }, {}) - shorthands.___singles = singles - } - var chrs = arg.split("").filter(function (c) { - return singles[c] - }) - if (chrs.join("") === arg) return chrs.map(function (c) { - return shorthands[c] - }).reduce(function (l, r) { - return l.concat(r) - }, []) - } - - if (shorthands[arg] && !Array.isArray(shorthands[arg])) { - shorthands[arg] = shorthands[arg].split(/\s+/) - } - return shorthands[arg] -} - -if (module === require.main) { -var assert = require("assert") - , util = require("util") - - , shorthands = - { s : ["--loglevel", "silent"] - , d : ["--loglevel", "info"] - , dd : ["--loglevel", "verbose"] - , ddd : ["--loglevel", "silly"] - , noreg : ["--no-registry"] - , reg : ["--registry"] - , "no-reg" : ["--no-registry"] - , silent : ["--loglevel", "silent"] - , verbose : ["--loglevel", "verbose"] - , h : ["--usage"] - , H : ["--usage"] - , "?" : ["--usage"] - , help : ["--usage"] - , v : ["--version"] - , f : ["--force"] - , desc : ["--description"] - , "no-desc" : ["--no-description"] - , "local" : ["--no-global"] - , l : ["--long"] - , p : ["--parseable"] - , porcelain : ["--parseable"] - , g : ["--global"] - } - - , types = - { aoa: Array - , nullstream: [null, Stream] - , date: Date - , str: String - , browser : String - , cache : path - , color : ["always", Boolean] - , depth : Number - , description : Boolean - , dev : Boolean - , editor : path - , force : Boolean - , global : Boolean - , globalconfig : path - , group : [String, Number] - , gzipbin : String - , logfd : [Number, Stream] - , loglevel : ["silent","win","error","warn","info","verbose","silly"] - , long : Boolean - , "node-version" : [false, String] - , npaturl : url - , npat : Boolean - , "onload-script" : [false, String] - , outfd : [Number, Stream] - , parseable : Boolean - , pre: Boolean - , prefix: path - , proxy : url - , "rebuild-bundle" : Boolean - , registry : url - , searchopts : String - , searchexclude: [null, String] - , shell : path - , t: [Array, String] - , tag : String - , tar : String - , tmp : path - , "unsafe-perm" : Boolean - , usage : Boolean - , user : String - , username : String - , userconfig : path - , version : Boolean - , viewer: path - , _exit : Boolean - } - -; [["-v", {version:true}, []] - ,["---v", {version:true}, []] - ,["ls -s --no-reg connect -d", - {loglevel:"info",registry:null},["ls","connect"]] - ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] - ,["ls --registry blargle", {}, ["ls"]] - ,["--no-registry", {registry:null}, []] - ,["--no-color true", {color:false}, []] - ,["--no-color false", {color:true}, []] - ,["--no-color", {color:false}, []] - ,["--color false", {color:false}, []] - ,["--color --logfd 7", {logfd:7,color:true}, []] - ,["--color=true", {color:true}, []] - ,["--logfd=10", {logfd:10}, []] - ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] - ,["--tmp=tmp -tar=gtar", - {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]] - ,["--logfd x", {}, []] - ,["a -true -- -no-false", {true:true},["a","-no-false"]] - ,["a -no-false", {false:false},["a"]] - ,["a -no-no-true", {true:true}, ["a"]] - ,["a -no-no-no-false", {false:false}, ["a"]] - ,["---NO-no-No-no-no-no-nO-no-no"+ - "-No-no-no-no-no-no-no-no-no"+ - "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ - "-no-body-can-do-the-boogaloo-like-I-do" - ,{"body-can-do-the-boogaloo-like-I-do":false}, []] - ,["we are -no-strangers-to-love "+ - "--you-know the-rules --and so-do-i "+ - "---im-thinking-of=a-full-commitment "+ - "--no-you-would-get-this-from-any-other-guy "+ - "--no-gonna-give-you-up "+ - "-no-gonna-let-you-down=true "+ - "--no-no-gonna-run-around false "+ - "--desert-you=false "+ - "--make-you-cry false "+ - "--no-tell-a-lie "+ - "--no-no-and-hurt-you false" - ,{"strangers-to-love":false - ,"you-know":"the-rules" - ,"and":"so-do-i" - ,"you-would-get-this-from-any-other-guy":false - ,"gonna-give-you-up":false - ,"gonna-let-you-down":false - ,"gonna-run-around":false - ,"desert-you":false - ,"make-you-cry":false - ,"tell-a-lie":false - ,"and-hurt-you":false - },["we", "are"]] - ,["-t one -t two -t three" - ,{t: ["one", "two", "three"]} - ,[]] - ,["-t one -t null -t three four five null" - ,{t: ["one", "null", "three"]} - ,["four", "five", "null"]] - ,["-t foo" - ,{t:["foo"]} - ,[]] - ,["--no-t" - ,{t:["false"]} - ,[]] - ,["-no-no-t" - ,{t:["true"]} - ,[]] - ,["-aoa one -aoa null -aoa 100" - ,{aoa:["one", null, 100]} - ,[]] - ,["-str 100" - ,{str:"100"} - ,[]] - ,["--color always" - ,{color:"always"} - ,[]] - ,["--no-nullstream" - ,{nullstream:null} - ,[]] - ,["--nullstream false" - ,{nullstream:null} - ,[]] - ,["--notadate 2011-01-25" - ,{notadate: "2011-01-25"} - ,[]] - ,["--date 2011-01-25" - ,{date: new Date("2011-01-25")} - ,[]] - ].forEach(function (test) { - var argv = test[0].split(/\s+/) - , opts = test[1] - , rem = test[2] - , actual = nopt(types, shorthands, argv, 0) - , parsed = actual.argv - delete actual.argv - console.log(util.inspect(actual, false, 2, true), parsed.remain) - for (var i in opts) { - var e = JSON.stringify(opts[i]) - , a = JSON.stringify(actual[i] === undefined ? null : actual[i]) - if (e && typeof e === "object") { - assert.deepEqual(e, a) - } else { - assert.equal(e, a) - } - } - assert.deepEqual(rem, parsed.remain) - }) -} diff --git a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/LICENSE b/node_modules/grunt/node_modules/nopt/node_modules/abbrev/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/package.json b/node_modules/grunt/node_modules/nopt/node_modules/abbrev/package.json deleted file mode 100644 index c13eef40..00000000 --- a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "abbrev", - "version": "1.0.7", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "tap test.js --cov" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "devDependencies": { - "tap": "^1.2.0" - }, - "gitHead": "821d09ce7da33627f91bbd8ed631497ed6f760c2", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.0.7", - "_shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", - "_from": "abbrev@>=1.0.0 <2.0.0", - "_npmVersion": "2.10.1", - "_nodeVersion": "2.0.1", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", - "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/test.js b/node_modules/grunt/node_modules/nopt/node_modules/abbrev/test.js deleted file mode 100644 index eb30e421..00000000 --- a/node_modules/grunt/node_modules/nopt/node_modules/abbrev/test.js +++ /dev/null @@ -1,47 +0,0 @@ -var abbrev = require('./abbrev.js') -var assert = require("assert") -var util = require("util") - -console.log("TAP version 13") -var count = 0 - -function test (list, expect) { - count++ - var actual = abbrev(list) - assert.deepEqual(actual, expect, - "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "\n"+ - "actual: "+util.inspect(actual)) - actual = abbrev.apply(exports, list) - assert.deepEqual(abbrev.apply(exports, list), expect, - "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "\n"+ - "actual: "+util.inspect(actual)) - console.log('ok - ' + list.join(' ')) -} - -test([ "ruby", "ruby", "rules", "rules", "rules" ], -{ rub: 'ruby' -, ruby: 'ruby' -, rul: 'rules' -, rule: 'rules' -, rules: 'rules' -}) -test(["fool", "foom", "pool", "pope"], -{ fool: 'fool' -, foom: 'foom' -, poo: 'pool' -, pool: 'pool' -, pop: 'pope' -, pope: 'pope' -}) -test(["a", "ab", "abc", "abcd", "abcde", "acde"], -{ a: 'a' -, ab: 'ab' -, abc: 'abc' -, abcd: 'abcd' -, abcde: 'abcde' -, ac: 'acde' -, acd: 'acde' -, acde: 'acde' -}) - -console.log("1..%d", count) diff --git a/node_modules/grunt/node_modules/nopt/package.json b/node_modules/grunt/node_modules/nopt/package.json deleted file mode 100644 index e56535be..00000000 --- a/node_modules/grunt/node_modules/nopt/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "nopt", - "version": "1.0.10", - "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "main": "lib/nopt.js", - "scripts": { - "test": "node lib/nopt.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/nopt.git" - }, - "bin": { - "nopt": "./bin/nopt.js" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/nopt/raw/master/LICENSE" - }, - "dependencies": { - "abbrev": "1" - }, - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "_id": "nopt@1.0.10", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "_engineSupported": true, - "_npmVersion": "1.0.93", - "_nodeVersion": "v0.5.9-pre", - "_defaultsLoaded": true, - "dist": { - "shasum": "6ddd21bd2a31417b92727dd585f8a6f37608ebee", - "tarball": "http://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {}, - "_shasum": "6ddd21bd2a31417b92727dd585f8a6f37608ebee", - "_resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "_from": "nopt@>=1.0.10 <1.1.0" -} diff --git a/node_modules/grunt/node_modules/rimraf/package.json b/node_modules/grunt/node_modules/rimraf/package.json deleted file mode 100644 index 74d96245..00000000 --- a/node_modules/grunt/node_modules/rimraf/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "rimraf", - "version": "2.2.8", - "main": "rimraf.js", - "description": "A deep deletion module for node (like `rm -rf`)", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/rimraf.git" - }, - "scripts": { - "test": "cd test && bash run.sh" - }, - "bin": { - "rimraf": "./bin.js" - }, - "contributors": [ - { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - { - "name": "Wayne Larsen", - "email": "wayne@larsen.st", - "url": "http://github.com/wvl" - }, - { - "name": "ritch", - "email": "skawful@gmail.com" - }, - { - "name": "Marcel Laverdet" - }, - { - "name": "Yosef Dinerstein", - "email": "yosefd@microsoft.com" - } - ], - "bugs": { - "url": "https://github.com/isaacs/rimraf/issues" - }, - "homepage": "https://github.com/isaacs/rimraf", - "_id": "rimraf@2.2.8", - "_shasum": "e439be2aaee327321952730f99a8929e4fc50582", - "_from": "rimraf@>=2.2.8 <2.3.0", - "_npmVersion": "1.4.10", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "dist": { - "shasum": "e439be2aaee327321952730f99a8929e4fc50582", - "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" -} diff --git a/node_modules/grunt/node_modules/underscore.string/package.json b/node_modules/grunt/node_modules/underscore.string/package.json deleted file mode 100644 index 095fd16b..00000000 --- a/node_modules/grunt/node_modules/underscore.string/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "underscore.string", - "version": "2.2.1", - "description": "String manipulation extensions for Underscore.js javascript library.", - "homepage": "http://epeli.github.com/underscore.string/", - "contributors": [ - { - "name": "Esa-Matti Suuronen", - "email": "esa-matti@suuronen.org", - "url": "http://esa-matti.suuronen.org/" - }, - { - "name": "Edward Tsech", - "email": "edtsech@gmail.com" - }, - { - "name": "Sasha Koss", - "email": "kossnocorp@gmail.com", - "url": "http://koss.nocorp.me/" - }, - { - "name": "Vladimir Dronnikov", - "email": "dronnikov@gmail.com" - }, - { - "name": "Pete Kruckenberg", - "email": "https://github.com/kruckenb", - "url": "" - }, - { - "name": "Paul Chavard", - "email": "paul@chavard.net", - "url": "" - }, - { - "name": "Ed Finkler", - "email": "coj@funkatron.com", - "url": "" - }, - { - "name": "Pavel Pravosud", - "email": "rwz@duckroll.ru" - } - ], - "keywords": [ - "underscore", - "string" - ], - "main": "./lib/underscore.string", - "directories": { - "lib": "./lib" - }, - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/epeli/underscore.string.git" - }, - "bugs": { - "url": "https://github.com/epeli/underscore.string/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "_id": "underscore.string@2.2.1", - "dist": { - "shasum": "d7c0fa2af5d5a1a67f4253daee98132e733f0f19", - "tarball": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "_from": "underscore.string@>=2.2.1 <2.3.0", - "_npmVersion": "1.2.32", - "_npmUser": { - "name": "epeli", - "email": "esa-matti@suuronen.org" - }, - "maintainers": [ - { - "name": "edtsech", - "email": "edtsech@gmail.com" - }, - { - "name": "rwz", - "email": "rwz@duckroll.ru" - }, - { - "name": "epeli", - "email": "esa-matti@suuronen.org" - } - ], - "_shasum": "d7c0fa2af5d5a1a67f4253daee98132e733f0f19", - "_resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" -} diff --git a/node_modules/grunt/node_modules/which/LICENSE b/node_modules/grunt/node_modules/which/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/node_modules/grunt/node_modules/which/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/grunt/node_modules/which/package.json b/node_modules/grunt/node_modules/which/package.json deleted file mode 100644 index fc527845..00000000 --- a/node_modules/grunt/node_modules/which/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.9", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "which": "./bin/which" - }, - "license": "ISC", - "gitHead": "df3d52a0ecd5f366d550e0f14d67ca4d5e621bad", - "bugs": { - "url": "https://github.com/isaacs/node-which/issues" - }, - "homepage": "https://github.com/isaacs/node-which", - "_id": "which@1.0.9", - "scripts": {}, - "_shasum": "460c1da0f810103d0321a9b633af9e575e64486f", - "_from": "which@>=1.0.5 <1.1.0", - "_npmVersion": "2.6.0", - "_nodeVersion": "1.1.0", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "dist": { - "shasum": "460c1da0f810103d0321a9b633af9e575e64486f", - "tarball": "http://registry.npmjs.org/which/-/which-1.0.9.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" -} diff --git a/node_modules/grunt/node_modules/which/which.js b/node_modules/grunt/node_modules/which/which.js deleted file mode 100644 index 2a45417d..00000000 --- a/node_modules/grunt/node_modules/which/which.js +++ /dev/null @@ -1,101 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - , isExe - , fs = require("fs") - -if (process.platform == "win32") { - // On windows, there is no good way to check that a file is executable - isExe = function isExe () { return true } -} else { - isExe = function isExe (mod, uid, gid) { - //console.error(mod, uid, gid); - //console.error("isExe?", (mod & 0111).toString(8)) - var ret = (mod & 0001) - || (mod & 0010) && process.getgid && gid === process.getgid() - || (mod & 0010) && process.getuid && 0 === process.getuid() - || (mod & 0100) && process.getuid && uid === process.getuid() - || (mod & 0100) && process.getuid && 0 === process.getuid() - //console.error("isExe?", ret) - return ret - } -} - - - -function which (cmd, cb) { - if (isAbsolute(cmd)) return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - //console.error("pathEnv", pathEnv) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.resolve(pathEnv[i], cmd) - ;(function E (ii, ll) { - if (ii === ll) return F(i + 1, l) - var ext = pathExt[ii] - //console.error(p + ext) - fs.stat(p + ext, function (er, stat) { - if (!er && - stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) { - //console.error("yes, exe!", p + ext) - return cb(null, p + ext) - } - return E(ii + 1, ll) - }) - })(0, pathExt.length) - })(0, pathEnv.length) -} - -function whichSync (cmd) { - if (isAbsolute(cmd)) return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - for (var j = 0, ll = pathExt.length; j < ll; j ++) { - var cur = p + pathExt[j] - var stat - try { stat = fs.statSync(cur) } catch (ex) {} - if (stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) return cur - } - } - throw new Error("not found: "+cmd) -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/node_modules/grunt/package.json b/node_modules/grunt/package.json deleted file mode 100644 index d698ec0f..00000000 --- a/node_modules/grunt/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "name": "grunt", - "description": "The JavaScript Task Runner", - "version": "0.4.5", - "author": { - "name": "\"Cowboy\" Ben Alman", - "url": "http://benalman.com/" - }, - "homepage": "http://gruntjs.com/", - "repository": { - "type": "git", - "url": "git://github.com/gruntjs/grunt.git" - }, - "bugs": { - "url": "http://github.com/gruntjs/grunt/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT" - } - ], - "main": "lib/grunt", - "scripts": { - "test": "grunt test" - }, - "engines": { - "node": ">= 0.8.0" - }, - "keywords": [ - "task", - "async", - "cli", - "minify", - "uglify", - "build", - "lodash", - "unit", - "test", - "qunit", - "nodeunit", - "server", - "init", - "scaffold", - "make", - "jake", - "tool" - ], - "dependencies": { - "async": "~0.1.22", - "coffee-script": "~1.3.3", - "colors": "~0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "~0.4.13", - "findup-sync": "~0.1.2", - "glob": "~3.1.21", - "hooker": "~0.2.3", - "iconv-lite": "~0.2.11", - "minimatch": "~0.2.12", - "nopt": "~1.0.10", - "rimraf": "~2.2.8", - "lodash": "~0.9.2", - "underscore.string": "~2.2.1", - "which": "~1.0.5", - "js-yaml": "~2.0.5", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "grunt-legacy-util": "~0.2.0", - "grunt-legacy-log": "~0.1.0" - }, - "devDependencies": { - "temporary": "~0.0.4", - "grunt-contrib-jshint": "~0.6.4", - "grunt-contrib-nodeunit": "~0.2.0", - "grunt-contrib-watch": "~0.5.3", - "difflet": "~0.2.3", - "semver": "2.1.0", - "shelljs": "~0.2.5" - }, - "_id": "grunt@0.4.5", - "dist": { - "shasum": "56937cd5194324adff6d207631832a9d6ba4e7f0", - "tarball": "http://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz" - }, - "_from": "grunt@*", - "_npmVersion": "1.4.4", - "_npmUser": { - "name": "cowboy", - "email": "cowboy@rj3.net" - }, - "maintainers": [ - { - "name": "cowboy", - "email": "cowboy@rj3.net" - }, - { - "name": "tkellen", - "email": "tyler@sleekcode.net" - } - ], - "directories": {}, - "_shasum": "56937cd5194324adff6d207631832a9d6ba4e7f0", - "_resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz" -} diff --git a/platforms/android/.gitignore b/platforms/android/.gitignore deleted file mode 100644 index 6e524459..00000000 --- a/platforms/android/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# Non-project-specific build files: -build.xml -local.properties -/gradlew -/gradlew.bat -/gradle -# Ant builds -ant-build -ant-gen -# Eclipse builds -gen -out -# Gradle builds -/build diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties deleted file mode 100644 index 37827ff7..00000000 --- a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties +++ /dev/null @@ -1 +0,0 @@ -#Thu Apr 14 18:49:51 CDT 2016 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock deleted file mode 100644 index 6da0e6f33512a5021e6362d5d5f7986f55adb757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 VcmZP$4&Z$0siO0W0R$LbSOF#R17-jK diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin deleted file mode 100644 index e70954f701fa97eb3c3539a0ea604ece8b793cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174449 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

`&&&EE*d$N;mxZfuEf-Gc>EqN2At+wE@= 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%0A) z^nn_s-Q4jq5enBSzM*lY~_tZr8=*22~hT$AT zOG1p91;yI)Xz@?mZOk48BE{ZMhr)K`(B%`%y)Hz|;hhzrl_EqnBEL zoc*8M&q>cqlBdPP!Bk}!LVgE#{{2ugutNJ3Hdw7 zBe6mi_!IU`fm<~?&0c*YIrgsA6Q%tPr;rM=IZqgUQO;}FrV=xA6PGXfiCy)`9-Fq0 z&2){!=fKe$`!AGZ_e>E6!@KILJI=MO{?bwYv9sS~UVb8!V@CQNpN*W6e1OGs?HK!~J0A;*U7fRUTY z>;pryIcz?q4=Xfs7R8BpJy^px(peK|T-X((fyM znorX2>nIU&yhs~}e8XYr)h)H?`hTCr@;Bc}9Cd#4vQy?*jwVD~PT7($E& zTa;CsiSV1rO;KocTI6AVJ*_=EYV^cwoeJ#Jh>_(Fd7{()rUD$@|B2f$la2T4L53u; zDivb~HFt||DTHQ{VFzO60yKNU=>9*k17rbvU(wMva?uwFNBPu(-5rq#IyiU#yZvx* z3x|J&>CJkcJLf;MOEd5K2SO`}R8h`YWddJVHU_82qThY2>fJy&vA3f7Oz(SuVGRyT z*l`gk};sz z5>cX@G^W1fBVAuS_)8B^n>9ucsfq?ePXTjCeaksMX9M7vg!VY1kxPN>gmH zc$)PEvcV$IJC52p_lf5L@=c zD9@a7#!Is{cJR;Vs{H^%xoGVplnwPPA+9%b<2CE}+$(=LBk4 z;4;MzZP|^aI^16Av*uV$IdsP7H9r#-;E zbJnU7UGf|UX3C))`(tMl$VCRp(-E0|8FxFNMdO^B0D^#9N4a3#0~(OaZhLlZY^vW< z%FOgf1-Uq~btK3z%+A1;TOT2JUu$uZDA7I2T7^a3i+m^oaEz#)QRh6qq-+}B+PJ}m z%x!FnmpNIxS3G>u0auA~Q}OwcQ13x}yr(6P*5vtTkGv@;>FvjOEeR84O}F6D8H z(HYk~yc+;nKjdqxBbAik!x6Acs{I8n1ijF*!8l z(1O9k;6Eg66Lmnkhm)bteAc0g4q(V?i|m`2)~x_0rp0#ZsD0heptU0<`tPeR0!$0V znD`jC1R;K^-(uxs`VQ$Q|HV&Jp z#45B)boYJ8wL0>I%9^b=aQr{k-aMSj?~DIF$2^ZkMW)D1<{`?I%#<;dDKbwfl%lAR znIvUsKxQhH3<;Ua6e%ThqGV2H&%Mw2^mXp-_s{Qnp3iml>FTB<6 z%}c^AI=vIZaB}HaoNhoEnK|ar8JEQ5R|}rMtCo1YAWRd8WxR8O4+4z(F8GF$_ni16 zs1jDAmca&LNC$#^=-B+;JfwE+OT-aJ=8_~WE{8WXjdYX{h8T@JIA1kW2m7P~>xOvNICTsOr8Im@4f>mcJnMFCgE zUh$;D-M0ko_20kUozHBz&Q?zQc_AkvC`=s4$y#lDEd-@vqEq%GEG6GHfpPC8Ej2Vo zln$`OHFJD5A{brNB*m&!_sH}8m+v<4x+&44IjkAru4OWAyIXleCPqJqp{?Uc`0T=8 z&WPj`%FNS%YowXL&)2P@d4a0OK!nUSC#Cwf9hle6az>af$Uh96tX7{aID|CKC^K<;WzmwDH#og5Go8HH z;x(iEL~DIM&hlQHQAcB#X&@JJ z?x(7xKylQa#^SLH3@W{M)fMI*xQyuo?o?_V{y2>wSzbEQlUWEg#k4sm-7H}HD-G#o z15SpB*#z?Dt{CC&hFVF5OyVLANs@U#G)8TpCE&BXPPgn4yk3TT2e= z{;2E#cdo~L5t5_rv8GL-9Ne?!dy;ACQfDC~_ZDC-q8i(BrPz9he3*Snmspmih7u1Y z(nb+RfdUuwPtk4ggvG{R8V;k+GV6aSJ3Dno6WWvzM+3QN$5{M@+E%WdcM4hc@jPa5 z!8eUz?)(8hv>HBkE*rJ}(BR}Z-o2ikKN+G?n=P^Sk_wvV*jS*pqwX(19P-3uljC2V zRHdhd~&w)QYy9eFj^Z#&fk!qqF+tx(ZR$CsM;jh{LTUx`Hpu zA!llsg=;x0RX1PA<0xut7=Hy}$HCxAiFm6Z%xQiytCmQgGb(wf+qh%rJZW<=nj;bhTy>5QIm|UDcd;0~^b`;(_+Wc&#-tU^;b&ev zi*GSx=DxYgmau-iKT90PNhFz;kv$J;BD4Xypo9?oSv0`}daaD*Szqi# z2E`G0siTqtrRmjJ|_y_MAXjhkg^Udnh_eOUloc%_oTXmCHD(B77fcy0`BLvSDug@ z)xk$*T<00fTGA%F_pCmJ_r18$4PT&z%Y$H4TR&|{i|zZG(qG)-lJbz1xD?xUrY00p zCRsT33Bv4wk$l3Y#+OGWiwwqy4ZW%=DHUa z+2*2*GzQqcSo<5WFK_OjJswF z(TR-7C_QW;aykIs*tF^gnR&KI+Oeyz>ejDkEatW=P2(sGLt+cC7YU5_VY$-BH`Feg zMlN`xB^Z3t*q!k<9~A6bW7>CbQC&)zM}A zOrMfEVecJUq|$94+b1(>O9=C!se7+~*W?I)_lW~Ro@vmkh4~58-p}mVcD?_WamuPE zet`N`z^>TGmiuzia@hTVt3OIh2gxaao04T`x^b@D*h#;HugH1o(H54CgoqM}~SI0Luh(k&m^7NI)>^NklhL-QyVDA~y`9Q1tk-S3; z5cUILemosg5VqSU(&BlL_B)r@@#%|)4@1o&21x)6=3}T4{>f7UD>rK{mz7I?3}4*0 zlGOO)EYeh>d^rrbq+W+9NKR#Kf8xyS*P3=!cdWqC{m2e?JLZ1(93zBDElnGU9k|H& zozHjuh8Oi=2*VAIc`!U0hY?trjXC)IPpWB@GUe8!H~jdo+uU@UjidvINuSG2tuSV!J`#=&y9YQ$zRb)IzFXp==UpoXVS_-eOj(ct z9^5>#|Kh3IbKdHB;4SBGv33xL%jf9KCILw9^60*q>|dVddo29c-)r>SLKsetHAxD; zMs5u*(D2;rGAI9>nLP#ydykSJ!6Ebs23OPvuR1=5t-RwrBs+b8gj_Ik(XyNIY6!&P z%B7Ou<8Aka_dWG14`i%=3kak5#v~uA0&%#69y#8j2OdOAmLjNyzOM+x=s=-AK0#gyCZ6>=+6kxf)%J`k-GCbMA7M&?9mZ3Tt!ygQvb<4+}scc!P+#Tzk zEh=QJ)KgbO`ykvC!f+9%XQyd~t*qA5jV3nzV*SnLuWNfI6JixAGm#8H-gwGM{R0Yt zTd?(C;)SM%gJlxuM$Gyc(HLnhz(@@R+hMuypD&*csp5t8$=&LJQjvUtrx2APSK$zEex~h=->(?6&%)Yf_Rfv*pOY7v z)r1_)8sH8I+2c28TcHz{Jozjl>+#6pRU7Y~%|&-KMluJm7TXpz$V$bH)B;m$Hm7o8 zJ}J^Cve4wAd=D_mAogC^$||cHGi{6-p6Uutw~`8-DbR9kI)IxhjEINiG-q9-nO+L! z^pV6WUCUy9fyO9!0H(xqRvE&qR=G4!uU@<~uFK)-P*DzTK5t|Jtl&`^z9$kw{sDdw z4!eh0g$`eb`$b33D+-d?X#~2N`A)68W18D?Y$mOS!CihNj$PE{r@INPoBqCu9 zxNxzHqZSE*%;exN4tZehdi@YfJaM_exGoywrw4ME^A=4ZjEp>$`TF$R8^N_qgQ`>` zX=scU$x{rbDLo3`U=mo_*r}rO!g_DQV_wtOV+_1TXpRZFzd&C8)=n-8$=Q6GxW>&R zu=Y(!!cXtnjz?&WJriJ31KaMJu-&V<-9E1tt4O9+7+!WjR#JrkjOv*>FQlfXvrspa z5OG+lWe+2Vn;hhmJxI%sJfv{@7(Wgp7+i#)zXEC15C01$DZlKF}ZyY8rPgxvJ=ToGjc6J{nQve83s{6=?G!dzCUjpZrMiNCw^gC8(^ znkJz+2HdfatL45Nm}_;g(Yjt9)2kiyb}Ihx4?Z-v2iayIcl5Va&ca-VU>w8GSKOt& zPvXVTYCYXVbEFRe$1@{Bf#bHS7~Y>!w7 zCS7}sa#Q3@-&xlWM|E!;gvW-YI0iGy{VE@a5v25MDIcktGa83C9a6)LD~n#D<><8l zr`v_eZMF<2)FdP~>bng;3X@xDCW0D74lj}YF){a0gx|zcD^uhw^g^xb9G$CRh zXpRH7aM9&Dn?S=eiOp3FVyWE8b>8m?t^7UY*Ase$202tic3Z~77O!`^Mp{xvPn@IyZXDE{U* z`aZV0LXPJ4;gXEOv)>2SD_%=^(yhZRbA!TKF35g^6V2_xHN?J5%f>ivD_bmj!=*E8 zH%Sy}UK2T;Swr?Ngvog&5tzAeCK5j3J@BX3rag!{cFyRTX_l@vDH?M^_K8UJ7HYSZ zzw(PgF1IB@vPm`D%x++8p*=n44B$)_qFvz8ZASe{xH>zsTS+tAm7PdV53NT(1~|Rg zaAgD0<|Stjy4u>iKnInVP~#z+4X8i3ZA}XbC8HnqplmxasL9`(Uoi4uHka?G?L`` zMg|1+cT~;WTo6EWbhuqm`cFxC5%O5N9MPE)tN3fl{B=sXloT4{z|~F11O0W7SN7#K zyYjCl^4my7Z~o4FpNqzLB!QK-hq{a4(ZvU1F4exhoE(%RbV?`9-Wbj8`wTdf??3j! z-0On-=}CDa)9u_s#Rtbo+R@zpb--1JyWNAircE~0m;3W{{_0T_Fu27c`w+sJ$9oWP zjZ=S#py4?_KIJ9+_r$w0yYne)k_o5Ln7}Q7Ii8Y+%lj^4p-zS7-uk1Qw2P9z4?6$kf4^=|To{NunddW0U zU>z+WGgELog}oGa@f&7>+)Pb!JHyUTy{=YJrk9i2xd*Kme+k%mgnir_@``3Oo02|R zl4yMMZ1baianR29Za%;w8FcZ-t^{&F+Sg@PDXw3$lCtqJleryOBhIOru$XP+;-XG8SgxRMFDdOK z?H59S9;8eDb=ZaGFiwCw>T9*F(;4zUevsmMx&B-7%)5_otsy%!!l`%Y5a8rRQ!`+_ zii`SdwR`|FZk zDhQ(?S5zebG48g2vZ?F*@0IE=u`S(=Q8Ndra7pRVN|FV=1tMRTuD z0q){O7I#R_=G)`6v?ym@%RH-C;UZNoH1-CWzDN}tVx)yIzJbSw`!YL19x2>Txfy)+ zG8#K-12Faea`-~p>dO1mn_TA~Mh22>v^&c7qp?4@+E>==PYtO_^}N9F)%RU#?KMCC zz@u{zjZxxObH5ki_}RJ@aH|xPoF&JA*iHKl$r4GuOf-gh4UC*^l1PDFc~|?QV@+J@ zV`}calthP2sA6Jq3s(TGXBf;)49r9j+f3;+2R>Apjy8mrWh_$Zkt41@x{J{0oEK{U z97xx%q)(}@4(xMkM4O5I3a}Epo8=HjZ!&N__MDdZot**Xi;FRX5S9(FEFGPC*vi)Z z@iL`#>~R{m^^{pj?;>3~VLFri1)QDF)o+lTp<6Q9F*)-=ef^RBkxYkPpfOSjfJq$L zi_b5Dyj*P8-PaXQ{xz~VF4)->a~$HB0aqoTh<`R_D|S-9e)qk29xu1~x`m02-X8fe zLMzE}Efx2b{|Ruc zJ{x6(?05*(h~$8gT8(1c>g>-%;f4owt{aTwSwF&KrE}06B@#*uMtAZm{zh%fO1f*V zd--*rYj`Z_3<$h^R)oSxRxbeThSGnx*aW_;%6<|tT10Be)Dw4Vs@LBd#StkV2AqR# zK743?N@MJxU;L!*uD{A`@=`ib#7S}e8?(347sx4&v$qdXj+R;fBqOCK&C8%dsbPq! zfg0n6Bz!YwJtCSu!BeE@^=ynQsNo?Q8pD4dR$o3XDWn$k{C(*ImwXeY&a3=|!b?z5 zr+*C8+*da7NAv_fX~`#Q2zM>4&+T}A$%MHTi?U(adFm8oSQ^kPKc?w0?ePf2;VFc z$fazAQn!-Yytvv^7qMG2Jsi!k8UgN$PunZVD?VoqlBzNC=jA=C=$;(mMZ7>L$G8_@ zi*3XBUUED$ZBxN?Nox`TFGMQ*j4q0gtuK3fog4vanB0}^^oHjgQ z(!S3M{6fOfkyrxm7c>2~R(N^LHL*qH^TW%LLqp~xJ1Ni{Id1;sXpONE==o)t;~wxA_$4KAMCDH7=R)i9X5_~RhlfFCJ_f@aYokS_~%L&~e+%X8KdV_8q4lXc}rHIor0L zfVLK9^?;+&>`{fIFqrG5m7o?Dqh9n=Usv>9Gg^-ZcNma$BL`k6?UhS)bbYn%^NJtq z=N`{N`aD9f?8O!LXD0KRu-qEk?Nd31&u3MFreE3nlcu4$VG&@a(sBX*R+_*q4_WTK z?)1l50Lwi zE?Ef4`5iVFSXNGaBV;h7YZzQIfX1kieqKM1Q~+D4qc4W646xN{YEgc!W`1kjgX6OA zJ2Ym4Y>JR`9H*oB8MKvQf;Lx=%Ut_Lx=HJKJ^0QkB%=r?5W@_>b_kMgdvIt;F|B7N zpxfTl{5|`T-10_<8v$HViXr~tnk~8DW#_j~MYV&+3MUt3ikr`%F`I!9o1RX(Q zriOP}VJS#?iR<1A?7MEwg60^50XJ@%MAcqpLN$ccd3u+WGhgxQW^+k&or{1i+T?~ef#TdU*ZpD1Z^0<@6tHMypMA3!~p*cG=MxqO_^Y@LNA#eH-lTjKi z+&?(-bfBLkZi*Cz5jWuWcn2M4wjE4%a5slmdHTjbQ?!1wDpq|5#bLE^CnVQIT<=42 z0Y)w>mv7gNJfj(tOld3$L1VL4z)J0w$^jfk5WF>(R`0J5W3k=#ZDdIwyBkm(#^e*= zb~5U~2Qp`F9%UHV;b5gCH~*=y&l5V_!ZZP_!3L`gS-GR#@!Pu_;_}_Q#2q~4_@TnS z^D4j;my)*KgBM?ZuJ^2KLCsn~fpImDiV|(5C@wXXg3j!KM;CVM5qYSRiw+aEw=dL) z&H~LzAXNr~881Cc0hy_maD{T|?xQ*``+WM_Gt!f2j9C?6ro!j&&*g4q3Niohjmx@} z`Mho>n?_$!htU}0A)H#*3;b>U7G^qal=uBy|4%U{e>cxtKX;=s{Bzj8u`_VQy$@SI zW{Le^CVOklHxNUM?u;;GxYDVb2lWx%!e451&=`>@z}&fPwp~7aWoax9dcZ@G*>~%3^)c*C zG^bbsxIc-p@gWKr>uwc0_ZjdXf@6lb-_03wg zQW~Z|Lh%^#2?m++7|dyj*=>dIYxYV$*|(B;pJfs5{aKRGDnf(X_wLHwyKN)WTx56o zO7K9bhLv>N72cNuXfqj)13f#XLHyan*61jvLw>}Th9!y>x$ZUDD~i-(!qMSB9&pCD z9-m(XrJ;3`uQa0Bh_jlS#)Nh^Inq55a=3TJV9bw{EVh??zx{=Yg11r!cqF zaobpO#=;+xXpXcJaHTEU+wSRW?vCGn|JG{Px~cNq*g>i`G)IX$b#>b_zpX8bSP5_% z60rT8q~}z(EB7LDCqn2IvTHz3{#$ zrg0d-@UnO3%d5#~dYsa>QTp(g?h2a2eg|Cebu9i#?5!XiCVIpmon&~|d*1T5ryxcX zjp0vSZQO2d^Ga-OcEkAciE~LddD*rX8lfoAIsmzzP4X_-%$kicwq2s`#E(oZZ2ZcG zs?d5EZNMo;`{BJpFud#UwU{?94<>ZXog7h7+QkTQNQxs(W@0ORhOJPPPc8jA)S2l^=)J7Sp_jX&9-=XZg8&otUi}1*E=gn3;7Wtb zI{o4F)F2Ak^JtD7m(pLU81PRP5{&MuRnQSXax=~<5m995vj<^NrsqFr92g(&i zxeaOdx$)J36@hdcT_LDG(3=A6+vMwE2-{85bj~*LvBhmVh3V=gW2mRacZ>Q|celmh zKFeVl-sZQAf^9)9<G3&gL1*0T*dp9XQTP%=PB_U26Nnk>bh8S=GJF@Y| zyaaX@EjoV?`Ks{hkPCaBq@e0PG>8A#xQsyve1R$&+2DJUeqkj~_0$t{irn953{)AU z_9^^XgUy`E;$J&`qVt7Z*w=aQBxhrY!)<@4x|iVX4|DdMdUbY_kOSi;cCT#W3L3-W ziV@YYt|F8wMAxp=1*LsC-FKzU_tsAvX*7nxH4j95dZiF1B;B>p|EEa$QF}AF(=r!Q z$O(Ok!EHyR-5%_QFqN~^vgE!R=8d*I%F6x%NFowqSlrmAp1y=JPp6`~Jeis|ktO}o zZNJ8libaSqBTXRkU1rCRWJ7A&hQ-gmG^`%*7UEvfGI|HC2X*5TI%dfoEI8tbI5{!?N$EUkT>_al#=I>BLr*Gf| z6Bvvay(rw$((y9Bzkf1B+%@`PQI~$A3tEkM3SjkK9QggNAo34x@Q1V<8)7;8*ccpTkRwHH{NHBP~FqQEv$lT$7~>s^^D)=p*SI7$@%iAuYXy_ z&}u%4Kn?Sxqzb~+^skA0KV`MN+xPnTT%KbT8l%hvl>al60C;d^XWTKjFN>M<8y7PP zjKp!FIgBUZK3}dm1j(J3j3j zYtf-LxXP*k&iY)!bC~=3RV0o0W(4K#`giC0qP>xXB8&m%FyOpe>EU&pEc#WaF-Jzh z$uKeVcpWBW8ly04fD!F|jDHfIV3M!T)PK&o%0!ubT|TApwxT)2sQ@mSiUy7yNxUda zqlU1xUQm*~468a+8!$!yd#PN%?E>M8`i*?6Bdl~Uy}Xi0K4N4cIc31@dE>loNiLn( z%M=iDYV+puxV7{n_WckC281y#rpDK>tyxa?H1fBOPqs9r(yZMb>k+6vV~~{{gAsnq zn+gXZ{fNl3EMvJx8`h!6X1m|QeG0NYLEh<6s9FN$3bR#+0;gw#;eFb@-aGEr>^%q7wL)Y&|lRkfSeD?2w~4Embrb|!*Cr6N&VPta@ zC4PBdf9C}=Youl*qxE=k9j4p84;C=Dv{zxnxh=d*vV!c-3h_s%OUdN|cDnoDdIk;e z&@s8$nWGV&PXr`uodu2P(Q=%f0DGY2aR8RP8dV+Ff3Aw+2i4fsKDQ*~!i_Kp`1ge|2&eQP1Pp*li zA{0klj$5|g7qFSaX8yR}HDUF`(Fghd+u_>Hqi7Cu!2{?e9Z$udV-n1t4_Ap^YYhvf z#hpg90ObV^We@i zmS-HPDZhQ1`SAWXI>(5-aQjH|6VmVr4h@&r=ZS1N*TZRF9Zf3&koiLBOl{oOr?#M) z2D0+9&b!cjv7?b6_sZndbF(6&Ccvan9}jH41@{<^n4AS`J9=ar|che}J#`|XD7G6K*TNh!cym+Ym4tt`G+JFquRW8!jt zj>pbKx)W%Q+7)olg1g`?+M&NjxtT%ZgQn$|clA`0K*fk87GT~R;&YIdJ1%{gxlY$$ z{CPR6jo7;#+U?TB18hmV$`!Wq)yu)QH@Sl6M5jYC@@?Ird}hbZAFBg9MqqAYf6cS; z$g@@l-fmFmuc`W=N4HlU=*2e$;@7RMd7!uMTFt{U``{bfFmGtCHnh3MA~C^Wh*OBS zrOLY6vDoB6spU-KlB@`tAMmm@2e`+I_w*pI7?7CyKfZ2M%ogAfB<-I8-58PLGVHJS zGx*($ink9MvwBMpb)~e;7=Mr*)@)^qmDSmX}->axxwoto?4WLW#qM#|a(Z2j-gZM%^t4&QbPy*M(s zw6EtX6C)>7pjk5jmlvQ4A9U~!Z6%kCTS_EX#|xQ)W^ zW@*tvAc^Povrxlus|F~nD(!I_Qk@n>3c8++X1zM*ptrlnYZDt#=QY-u@hIkLE~l3#+mHWq5`k ztyudKsrkJ(-U-vA`@S}#)riglD6EkE;LQuzt&EG>5eTT7;jf3T%MOQsEM}lj+ z*8&XSM)*LLw8%Q!^OKaztdECc9uuK4;*&s*Tqp4$G`c;@LlxZDJH>8=zR)k-mjd|` zi!_|bh4(;F6oj3*c{cRgS(}hRbw}R@pBN;e2t$sQ1(@V6LHsgK5W3&w+%h5*b>cc# ze(rV3%SJK^#hC!EcSHn#GDX0}Vk!pPrIczPDK1y%c8cQXPvLC}@bk!P=EA`LLyzvR zgUs~JYw45N5xvVtg#Vz-tJPvi4mW?S1MM0h%qr|i!Oc57=2&`Pf=H{vWx>T6Mmo{6P`v_{?h&Ta9FWrT|65g72q}g|uH>@e5!<84_j}|+0 zqvfza0CtTjSOl{26c*#456L z;%8ae@$i$9{0UT-(HuE)3WO{oy2rO|eZC877Efy5VPWYvi+D5Y1Fs^utyX}*P7Y{z zZdIReO;7E7ud+j*QGnHHFt zXJQZt$ywa+4qi86{F{94t?S1-a_7+)Sq#AbrdPoS9EJk#0{F@#^r`;jKQ?JrEJI_v z>H)^lmv$Vs@>8Rl!QK5vG<}irMPFSfDIpG7Gm(!=Zm8qAtqju{ck$ePo%kV77JWV& zT|3lZT6qFYGj|!k(b~dz63!o|{PbAh0M)xaza>0t&}u}u47(j@g)d=Sn1g`+a;rmb zq{o>(Ry331!)R;=Zat9iJq|x2B=#_$MMnFPq}5U=?Nv>3q>K|rfT|oA8KbQV-@7U9 zckp0*DNRzX8dl0hyboHDi4y@PWpSw-cI5_<^Pan>873||s?K|Tb=pA75h0ZjIawVK zw}QDT+QP=eoPndqC<>cOXtmwY90}6OAs1+$IvzlYBJ8uj`??R+RWk3Cc`YvAuV}0f z`8V=O9IE}>%q(jB5ZOicB3@g`^3!QowQ)4JfP@l*5r{v6uj>TUu48b4!8l0F*<;_4 zjpf8WnJ5n1jBEKGIGGXS%tU;R;R1i?cTs7Yt>~X{$!ItwU2)e4MPX>gke|VD z>C-7O%gTHpYniz-^@90bzx`+qgR6Xlzu)3#-BzY(jvrhyNE-@TyUlV!Ye80$G6F0Xdl5gjEj5`H_6+6<$B_ch!a#~&N=RKL zOfdZG9eIaxN+2~l;WQrxY3|S{@hXmcRf}Di2? z4$U)rJzD2LRw=^a5xW3AKE50iXn2<{`c%~D8|$7V61wg0XAa$HVQ@|U)67y)2-7-y zYrgbCag4_mfs}l!AgF?2OMu#`PN`K0Q_ITMo$WjJ+3NWN`xpE9-=d8qQUloef|UW- zDGR@TBzGJ?X119t(lCRyM7G3)gCo)h98K)bZPTDprPE}-f69X;K0a4UhWtC4!>|HQ zPP$hP*2`C)|Im;dl5OQ{S(%vPeHh{@05>=lx9wqt7mwD9uDlc)9_C@v2@B^&N+hA3 zRK9?-tZ=pd|D?B-(ideJJ4KuQE+^#G$}x?P{6WiMEPz~V`D^@xEd;sJa(6ED*-rn+ zf{3Lj-R6{#J4wz0&Pq%}7B(}~5Q_4M>|DZcl4+^42lvMN*iM!I znRzR8{i{%in~I;z{bzaIuOMz2=1i?{#i(kbpM4 zL^vy5x-;M_XrD{!9_eyex{PvJfu+D4cC;L31jv=AcK5<^!@nCbe2!mbzdkCu9`pD! z5t<|V1-M^U-1t_7AXf&QBQGrrN*ZbfaOXetk;<4Vr_OUwK!X*Bxpt#F{^)(5EF(RI}EVJQa3XQJFrRG ze`D0mQhZvYD!n%L2!wqA*lbN4J_cI}#&9wRd$XghZZ-SG!3A4`V-PkCFnY!4S)3X{ z2=1Cu6bgP2Kg=E>^C;fS!xiFQ1MXSE@gIwZ-0+`YH z{WK8v|F)>SDb5H}P8|3*H=oA&^JNx0>dox3x@=P}~%HmN2H z<-UnRW7N3amMbx53hb0z`yP55?fE?B+&VMQF+ON?WVohQ$Fl|hXe)s;%VnJI?h0!$ z&WqN{Vko`}Z_II-^4aJT{)wwCGxxcK2bK^AwXn4^9uE}`<3yW@4FRLmmiQqLn>iVK zopoIJ-u~l^W@iHY9P}Wr6>!y8)fu56@MExh2IJQ?Pg<@M+mbdR+cLt$#Nh6ezkUc& zhcH(u)iV!I5RZ-iZH#B_It{JnM7Y6C*-N#;R`$j`+3Y-1X^@$LrQ4%#hit?N<%nZ| zl@e*MZ@}Eh8ONr-LPk!R=~vFJn%Uh)bEH=RN2+=DGt9N0ls*<@7e7;0Ktz&!`b!O( z!+#-_4z~32d<(TfmLl)`Ilgg?44VNA=jv;5< z1Q>Y$?wI4i0UCVExP@`Zn9=qrUmD9C92(il`->Qd72a?L)*)|e#x)&6M>^n)K5cm{ z;i#RWhp%k%ZnSk2!CZAw4Q-Kn#=9^0=20Bh4(AhL>H~N=g8AANHnmB6$!O41XH=zU-zWo$ zBY#o}^a|*g@I40sm)lbm(DMLW&zxkDLhs0h-(399D_AbTiG3@%4cpnCC~jgI?tker z*|p3po?3{*AHYSYDdT&itsuDjh}%9o-pnl&9%*K87lseH-%DIegdu;6G!w}8Z+>8( zhvimGmm1CG{~pdSEo)+&P4~bJPt2kN{5{_<-c0R@SmqHExJFobk+97~Zho$(#R!&8Fv>I#p+fzEe zx+`i+?heVR0q&go?Pi$kd&^{OFi0Eh9jKxx`-x`~;!Xl?G5)tPWM<&p<-afbd=lar z;-gRa3*mER%PDpMvma|)hAlDYi}4Wl=X0mIZn?|C?!ZrApLOXpRio1S79CHkN}MvGb(#s8GCm= zhcHrRfLZaLkA+89cTzU;M3lx8-9Vl4PbRKRXgP9Zfk58L;q*Nj=JK4Df~@JBrRJ_i zx!gHujDSCNEAf&k_@a}YoAwlJs1OO)&svT6dso7U+Ik9g2( z1Mm^pgY-qPFDr5cSfUkBLho&seE6IU5j`R=~*V1t!ZIoj~m zf0qIOj3fyGSUxs*Tf3NiLsQ~Cld39>>u8U=3s?HwRNik?eD=&%Z8ZO^ z;G*=>_Tc0QxYT2-EqOj|Bvs#E1)VuK*Nx}?)jpC&!2MKW#pm-@f_a^Pfw|rIB>hmA z?B~7&_y4eeAt%cNm{#o09$0Su;j6=X`*)GQvOdrmFp<=RHj_*XaAH)-m5^7gc)q-Q zece*{!@l~DG;0pp5S9$Eer6_e2vd@D-a}k)ZG@&Fyqd)F{X;ZHj5P4brj>!Ovre zb=$ySEf@h|m}|M6LKS*9H^^mpL`C`90=^d(`xo;ExHhcRUjja?WxJ(xE9U26y0`}? zF^j4XkZJ%*m~AGI!C>t!fWPj2k?(`N!sU2yj+oVJ(&vbiU`O_`W<2Jt0)8Ar?za>C zB{$1Z23uJvc;+pQ^9|8Iw~lpMxkdap6aHCAgv-otC)>`!ToTpCH_GkjI+D&lDX?`G z&cW;bOHE=wpl3nJAO&+PSt((MnQUtdMxTtxIiBB-=17qh0{KLZB2g;L-F=+Uu0Rur2-ln%I+K3ISt*G84sP&=LHE(0-Et+%_evcfJPg-~^}!GB zpEF5qfZEBJBO?%|U{3TTrtF;eQKg^_xmaB(v`y(3`6z_l2H5S@Pb`oc_lC};gZUMYN|B;&{+>zkUj`l`OlRkV}PT|Zik=9v@hG~B9_p2#PRyk3Ee;XI%qi} zT$<>+&}_Sq`Q1sW@Q6rkwIG}I<^70UWUoW$6jEOx_ia6C81f}{SCr@bCpRh^B;(x6 zm`~bxSRK|K}K2$PU;GkRf#{{%=xT)Wo`hCksJe9(d5v!^P+k++3uBV zRLbAao7oR2s4YPp5#Z$ge~iMRdw-AXK~T$G@{|JeMpqses4XI)1YEvFq7P)IGdtDl zU5f7MALJg1O%;z^(Q-t%#m-3T%^z4UeNp}Kl#FO%KL?3z!I(XqDUX4iuT|i-M!#6a zdhbnV2QTaNqf7?jgSBWq{8fOK_387FnRd4o==7XV>Zf15M*V}E0cuT&5$_@|%s%-z zA2xI9l6gnrY{kw_lenEhN7E|sa{m&V7}v22l(iVa+-OST%aQYkKfd|>MlMHmbQ;Z( z7yv!{UOs#uwv{VNLF(>NenV1Og^eD^QvZEU@_+RbnZC%$k4Qd#)!M>nl{Q6sFNrX# z=Xz?=?3la>sZjweBKJ=QY-NP(yo2jn)7Vdj+VUs&|9!OYpBxdgJRl!H(4fFSyeowK z1IY^TeJRP^`(N^QUW|*rd|x$q;@=w`{&6JF0oNayCkO?BwYThWQAgIBN_*3NSmHo2 zD0WB=AfNVj!mPt)-s~8j9iBgAJR-_35&AS0S)~Z4IWdm&j@gZ`Mq6I_KOWlsuNdJE z?fgrg<2#%!OrhgKG{@Y!?^$KHp7a-aRd}_3or5*f8Y7=oJvxHlU=ujy5A#(+!OA;U z-`XgB`wWb3p@Wd=3^?6k4}AMZz|C5eug8kpiKa)AW+m<9(86=Jnc(L!SQlFGS58_t z{_25%yRGv{@y}wh<(%S9@8xM7zwNEZk`6EO6PUKmF4u>NU zc8WOE>s(WImeyYL&>y7l#L;TRnE*>u3TuKe8{yjuEDvPAt1uJuW8WGf3l*V}jF3R=WG)IiP{rN^(pbt6a0?&zx zTNmjY9LlIS7jAEeqA~I}K<=|pCNV5GS-?(wHiGzGHV2>X{ZLaiG)IQpSG=nd<%GG9 zE~T7xKkoCMIr4npwQONz`6e75*-N0;V->#bBLO9%-PsowpBcPS9Q)3fun~ynNRZ)T zFnuPE7NOypXqh&T`Nv0mYlJE{8l+o2t5B8bmXgF6neJ@Yd7#e56nn@9-Fzet@G z`tg_Iq)_H{JodlE71xK=C<$-t9m;0z-?P}k@h8FZMj-7CdJD81Id0dq->2>uG&min zNB&*`kyqHF?w16v?L?*v%1Sw4rEHQJ{+R`W%={ZW?>c||LciAsnO5E}MS2j2t6;O& z{=9)h9wyT8pu=5twBgu2U7q&8k!X%&6zKhOwX=n}h$?ft%+_ji$x3cN8s+xAc(=|7w{B~EH;EE!`&phY zQh@wIlv@e__mXo1zqi|x3w|=n9zimIId+WX+PZxJvb+&u#JCBx*W3~RUK#>#&R+i5 z!LYh)NNuJT@$ehZf6Lat-htc=$UW|J-Zl|l)P-rUE`D-xtmCUatlo_TnNW|+3vkZg zAL1wMmYEJ(y@!8zQ%-t6JNu?;GW;-vA!Z}b(^OK+!a?}IS|zvSSf*y}4v>n7%ThcY zy+`w6H(HJq=>w4kp^j1uO3lkmMI{F<%6?ud;`#bzqGLZAqr}|>*s1!?K$u;)`OW&w zIDw(6kMFd&WEvq%0jNDz&%rNt1TlE}T0K`>nv+-E{<;j6h7!{K68e&o9dIHK?cp6S znO@f{X+XC_inxYUc})0!^YvfoND2YAkKNTBvQm)$r~3KIpEnFH+_2#I6@fGgglbeN z0NZ?=UJqeAgr+-nHDBCPG6>UpSo*#UjZxs#yyeCiAdH7X=xQ(hMVkf#@?;WO^{)_y zth&-Aqy8SA088e|WSg+7=91iQDof z=W$wOZ8272#t~d23V;8IetG+AougcN=)XUK67oc-?vdb}@>km_1&0w>*~)y5{7L(rDBW8eE*?8Pp;<@q4p^DWDh1z&3GaN$ z8Km=vCBZYM(0JfOgfJFz##Y+L9wXWQv?L?uD)tce0H~3fWSoVt z)4JbndF}~n1{4iZ|gwSbUd4Sd2P?Lw{?v?ZfM@(4}FI6|)c`5PeBAO!$1ss_xBmCIa zCF`8jwfB{GT8{pqVz}@%2aPds0ql+8S@>~`lfIPl)&3_Z4Ywwxi4e`2 zOhsu>5g{6gCM8LQWJ)DP^<4Y99Gz>Q{`r2N-&)V}$M0V2KKE^{^YZ@e`Lo}9U)S+% z^16L}`_XSbtQbe?V%Y2YI9~e*LY1OvWZK|qzkjypOv}kz!Un;3ImQz}PTu7Zmh&yu zr9lkCk@vI%htJ3DZoC#odMhd^Z(v6kJK=TS*o9NFo_VEL~2 z#McVFKHvfvrLe9-7U!Ghy$SVl&&!pzy`P@5dvOiVVXpwqt#*`!YIE;(@v_-8ll@7- zJX6(2_BY|fWIcn1DLxSjH(vF*jOll3o5WZwJJ$uYe^>39zum3`3=cHvmw?iTx!J9sq~27sMDU6=)7 z8f$AeRj*-k6@KS#Pn59QkH?rk0_@W!?wxSq9-lW(7L1+!|9O95GK*&?# z_m8x}+{f3Fna>?fdAsIxek#Ua--zdEX91^BpmP%DK4eN(ZMnVs)yS4V&I)Oor!kJy zH(Aj==>3phEtC^S{*pD|Uv^KEte?}5?`pj~s9^e2F9)y2giQ6wIa=FkIO_|2y=il& zk8IEf7rR3Nrn;E?79=6-;c zQ4_FkxfJAvRR(L`cIi=hIvdzY3fz{#t6}{l-a>`KgKmr~&Uf9ps-c{V-)d}3qz%tu zPDSOgF~yyjcL6~>A;*HSKkqy@Q1l3jDhXfPW9e#AO z_2BAeydHB9;I95kfDJ-3c_ylvbDaezxtZ z(Ia?(W(>~>iURJ=r+qmv_x6yWr`%ex>{Nf-*Ws3#As9z$1+Eyt>7IXd8EU+MzVob` z51uK`FZ?p1b28+wfkVQ0J_GFR+G5PnUurxqwl)0DY}N^(6*RB?Ph4iktMNDj%v3rV zyT?IRnUA@iij3w8%hfovXuU3xN8DAgn3LqVku(r_1E{|^w!2=Ela3pmy;HZ{qJ2%L ztES<~Kzya}p*cX6p9{7}Tf#P9_0em2t1_s$W0kmZjWKjKFL)lPSu=l@f$GHRR*HGa z3Lal6)r?(R-M9Rmo=HQTn+afPj4uvD*zOa&oZ6KunKu+@^+x?i{T3f2H)4qxh2Q6q1}4vMxUzv-$oJwI6eFw3t4bf7d>g2ZPsN_KHkfJT$8+58 z0H-0Q51*+pADO&i^3vp2P}WaxV}&vw3?sDw|2=?dsx)Ks7nxkX+>@3Ll`rdZ9+vAq zIi#42m*YY=F=tfQPQYRQpXEq#VtU68=P5z8xpK?I&KN^oPtEQ`wZaD0Wmpdyu+{L<3IyTB2p!5NX@+iQX)I_jz0J1h8{U}8n_qg!< z_YXzte?khM<2mjhfRhf&u!BpNY$y9ZCrb6qjXS?Q|D>oueT5q>U1(5+HOvik=qQCL z9Q@9%>TN7lqV#vX{u_8EKri^<;YFx;2P-OwlFkB2yS+KfCl2&g;lmU#2G|eN^y9Ex zMmf#1gyFdIQ-)gHtDgu@<2gaJ(SIMXbA!1oXQkD>)*G~m+IbfP`*zXeIj$t2*Yo`j zd>f6pV0HRuY>yy?x~?rRR>u@&fI-tAw!2P&P1+c(x8w@0_nm-!U!oLxx4V|?f& z7Mr${Vj;=cRK#;=n&!d#!vj_po7IpcmVBz^at2Y#t$RhWAt~Uym%ZNMTFm!#t>+$= zC&l9RxJCi@pP|S%xK_>#wfdZj3i5b*?SZdxYvJEo`8Qx+0xnNNj)MEvW!F6MN$%rK z?JUK`9r_*kI9GT8PV%eK2Dn<*KYKH}Q?2g(qHA)~`<;KMO_CgsC&2XO#}y!Kzld$u z7{`akkPU~o%FwwC;Y%m*6ktZ7p@VSg8h4+4z}PhAXMAl}O|oe(;&_tRCa*5wq&_BK z)8EnxB&C-0R&;gjCUMzTNr&(a33yBpsa&LRUK;Sr2zITQ8C2UQkRc`R^QWi%#twXx zD`@~GQDpNQDqPTtJ0d-{ui|KLC9wWyW%D=D|2KY80oLt&)fX<@O*fU*Yum4MX6{LM zKCZSGa+7)W0H;>%OasYDxLkEpRc9IebKj(iCca+*ALS}8fUVxKULL~C2wH5AwlNTKa+ux3J!*U<`(wGM-8McXVKa@7<(YTBcQ@{y?x$XWJ z%#K;=Vf)uaQn`h{-!eZ!y|rXjvKC&B8}%K;uAK;krysIkXrl*y5Nz%NTd}F`e_3wg58g^XBsn$7G&x|aIWbalJ=_L2m*q&~72`g?D0vHW-2;tmg}Rex z-kY!BI`R2k1QaJaWjYjxVN>l=SCQPSUc;07BruZrG_j4I{}F^CNj&mMhwx==H%XQT z%zXA@a-Iv}XO~(r)RQWU?0Cqlg%^C25V>D44Qd6M>xC7BP+jW2_22H;@0k6YRvv@V`T>#s7F{BW}*a<&#(?eQl46JF}{k28^ z+72W&u1J9GG&xlPVXM^r-3%Y?$azygBeD6wijR=m1Az7EQ&Z#s*JgqSFF!gkwNSWP zk(gHf*RCMR@yY-$({Y62(d{&wrfau`ACA5@GLjlqLbf+gR?}a zTJ~Le!ZG}vXR{Eq*ZU(JcJcTy1qy&%1vdwrXdc%Jr4}0qW8GPEIeNrj9%?%QWKKh# z;-LyJfz%XjoqlOfsNNgbgG?j3W|nW8AUQ6;<=S+sKyq9~gj?KuC$Bp@ zCtdZ}6Vwc0rvPRh!+8xZ-Os@lqo;gi{lbVD7o9gx{>_a3g^9{da{OF?x$^?T@3Z%m zb+M#~h(tW@4S@8}F2Fy;|wn7|QE8?G=C~~8@!@VvIXMTAX2XKBo{Mh;k#G!gJC7XI- zz2|CGO3ib#Dhm#x56flvZbBTA3L=k13wyS}-2MNU*f#q&>oD{i(;YLG<91dF!HKQNW=0z#uL)zuh+eO)zXIF}sUS>VLm3IE z@wTQu@sM-M{r*n8yRC@(zhp>_7hr28+-x9BX&v)+B@x=L3I};wdz+a&2tzA#E2|wB zggKlny&{y{FQsXCOZHTvZ?O)tl_t!~{0Maj2YQSjhb_NS^BJ0C~8TyKFew1*w7 zjdq1Fw2vAN2u$BrzqlCi zH}m^9T+!00$KQVl$+5Fjk8(+eKAX9cJsxP*I1kC8b=el>i+N&8Nr0G$iYbG{qw}np z$>z>ZTae@z7bV&)b;1WfIJ8nmijpa|*gqGx3Mp|NJ%1*@yL?dB7)kVSaiSb&Xu&?Hc(xT%e#(aL zcou*9RV%ReurG%NnQy?RKC&kN8ok|8{*xU`C|#D{uvtL`#G#EaX<9D>7cV-(e64`# z9_O0A&^5D9bN?pM|GEkqrk&lN)i9Us=Tw;Q+jukH#ls}6fF>H!L)J~?@|9sR#d4l< z%kjLO8js6Sovhg#A$BwnhjvZ#saq6tW={TR2H8diT6qcj>h^$Hc;KNc-U6G!8>l+< zIAUzCZj#>h_NlmF+u~(p4}xn2wAJ^}pQBjL8`f=XNj;i6Jg;4_qD;>A{d0&z%O@7afZc2&<61t^Jy3f3Og#OZNATkV!fgwobspRU!(r3%1(UY zH^iZOJzDp$z2VZ-B7L*HNkdCXD!w}2OxjMy4#H45NjJv^SZ*$GYWi@X!DB+o`%Jst z_u*z=IYX(%0@fI6}A$?ciEZ^bV?iMG# ze<%3O^?ippv>B>otp#cy$=p$l?wLA#^(4?a z(~Ng8FR!L$?Ip{XzUhz}8s&+&Tp>u!bGMvf(@WY}8lEYEYn7955{F`?VM#`CW!9S= zsMOBTdD}c`x}UpG2(A)%Ln*by!!QKsC*Sg8GjAHvWu&xPNMgXOBSggHyhsI?BKT<2ev{v95ADA#)U8#`1h zrk3B{A1a@e7oUx3`qF*^p2*NB#pB!VLfDb}KW=p=J*#N=M%0m1W8S!2l)s8b?n9Wi zYJitVQ+DFJK9&zvf507RTn9tzk~VqWwACKN zb@FFrux;VT>{@p{`s}ts&OH!^7LIkYgCFMd8bemaY24w`6`&U%@Z`P%ap?FlbX?p8 zbLo}oxofKJ0(kObX6DzNS$0idyfKPxXUN9gFXG*1vC+h$h*9C8i?RuDoLKqRYj1(| zGWFM`I#!rYtOP6}@UKh+=JRbS9q}{wXaeIoD^OGZgZ3}NLFi??c zB^G>IsThdDT9`aT_=reB^`@4?1*Pa^j^#0bIBUUQerM7yMT| zPCWO^zRP*Yv z_Nmr(|5-^hw#9qS%W+%Z{qlfHM^(fsu~<{gD&Qbk==d_@^Kw|@jn6d@#%6g*)MaY? zoY$z@rNm&D8xST83a5xXx(ipz!|dK}WBKr;y2A^1E_;bi;W=dir)`tM~PKRL5i*zEca4>-=wd7dG_X(l8bAK>6Gzu828hy`8ZTM`spoe z=jjRW23JVF`ze!UupIVWjt#zNp?;>zN!9xzRo%V2!7uk3WkDEPDc>G-QziiyEj;HG z$_O9#7xNriG<}Qblu&nntLwFKC`#*3mqzhN)4(uv~o!-Ed z%7dyUL)9V4W2elk)i9^`pEpTB5<27pooWL9fMqR*#f){f`zwEspx}+EgkWBzV<79@ zzt`e14+D%VGSdW0{K!^>m_H_8V;jojhPIop%`1lE+3C9w*9SNkg9i8rLVa_arHtm}GddghBPw4P zbRg^%!0y!dQ)KP$=5*OMyUJ~nYLl6j`Z!+!aY#moJU#Sc11}ur8G#i_@m*D&HZOh} zg|-v1JoDcVT2P_K(gDxuurqhEMyUBTG&Y)N$)hrR%D3jtKFpo`#~C0t2J(>8`(Y}m zHZ_yxHDUynx467N65m$w*a!{tUn9_=eZ^~iPZNZB88XhyiUoGQTIhFPx%;pKRyxwp zZmj$R)LuQNYKBYKCu!RJe5-54ufzYn5;V)dk8q~Zzo)Cg_mN-YIR`$CU#LBUxpv2_ zkbzyfeVV52t;ieJPNRB$_q4$G2?R!a@cF|oWgZICeVs%HPrzOKx%BQRqYY6z@z~x0 zfPEo+!xoaIo@sWMzvYI;y&hp}$%&}e!$=24M#4We=A!@;nc9KPVPtJ^)z))O%%%=g zm78T-=SoJ|oEr9HXha6(!3Cv|K^_@~EK2e`V*#}p6y z<%ten`RHk9CDZ%LNtJtDWlhEorYhD3Tkt?=#J)E zJ>T{N*;8zu5_c8x7$cJB5(v!#)L$V?Hczjka|>f^;*D6*Ly?8?c#LQYu)a$>1t83X zWs2Q#ZEdZl4^cYS&ICy@$je5DWaG$drTm-6Aj~zhql0f-QiX>1_B9%ZoUpm}UsYni z7X5zTh%kgnL{)yiVIQV)E^6A+^>~~uUX2-@RBYgC{@Pyn622)}fE#Qf`gr z^jKo_PmYLICH1hGB+T_XeX}Z-^-3yBCM*`(dYr)PQI&(zIa#iy(7RXa<*0n`tnAu# z_D`rkJiG~U$XOur5ZAf4J+NNsPmc4l1N2+GWewf*IB$4D9O5Yu2oA#QXP|1?pgTRq z6m)La`T>VfCjYm{uqJN=#!P_O`6ci{7%htnuZM^I-r?H9s+%`F`0*Il2ofGY+u$fK zYJ|3(&HHmyWPZoo$yHBd@Eo;2kh3^kkO6ZS2#<%xyyu#^XST{1?c4AK;?QYj;K)lq zC`=wv#XTchN3-pAcV)L3Tn)ivL`NXE!}=}74yf+-pNviOQrjGyy(WV_?;^E8UMqC9 zfZK4qv>TFRnJ(CLBcMp;c}C<;B>^c~JVxaUupeO?u)eZ1IdGIT7K>flXEyuj=1}p6 z=d17-^LK!48d8JDkMN!&#`WI(ro|6w8s6s4U&CX>bbuYG^G$++47??w^v*l)Rc|!y z<>!e%F5xk%djJcMwZe9HWCNjfi|$&T_c?El-nHhF$VpO$IJD{JIX|6+S!Q0e{>J* zHCcYYJ(BsuEvB$Uf0iMVCju`=jbttaLaM>s98@PJ2lD(3R1aCdyy>6rsQ8nJ$B5{X z%%Mty0TV1+Ry-`NfAh5peMy7;^})6v@qLw5UH9TN^Y8ac)4b*X!6* zsPRI~*S1)jT3Zf0cssAQ{|}a({%ZxsB7k*E>)nLq=0h4*`#5oPNN}_3ynnSG>d{y$ z>=0zYQh=pK_w=icliPBtShAmV5t`qei+M`0*287~82UW8h<5s8Jl+PWRYF z0BSpGG)n6lF6`RFk{Z*5*xfmSEjO-d3P?zU-+jclT>wz~csd3Kh}?2n7CkAqoTT!+KUB z!mX?k@gk2@|1G7-c#Z{`c#(&(TnF-?rgQjO=y7nQMN@aPoFJFAgB>0tmH_O$0xKgN zX3@|`9y6DS_r5ykC(5X*X7C(U7vNSg51xbMRDS2|Ir~xGPs}^cm%ca30>a_}W;jZq zIIMbewye*As>!6}w{3smvyc}Mhc-ENL3b@AXR26ib6wkdG>b~8Y}k)I2aho#JqOvw z@U7*5OLxa9Ad1J0zN4U$>0JxEjwPPM8ll3u1?ypCwfk zMtn8!yJ_c7!Ft!ODqr?~E4=5PA4|~&)Az^d zmOW$dbT;Gn5e`OoWEY5&69-&_`YP-kVM)%mBw16rVt5;KMx3+A+bLZbpFEYu_yx0-drEEW0p#%nD{-2o<-_0+oS;JJ%$T# zLX`usi8!4SRBj2=Im_hUWAh#o@fjvS+w1(=mcZYvyR z$0$*E)sG_=uNp;MRnXqojdC(U9N_x|0&4*H%(I}8g5X=z29K6(b-U-22wtweJizFs?u@%lvn<&^ww>-7V@gQs?+ zyAW<(Lj|R)uTh4`fhMsKY|J463&6|BlnHJgU@X# zs?jhvAh9!DR5f+G#00f!<82#cMMX*{Q`!r@Paxhz{*3IgHKN#{(j7^yD*9$U_B1Z5 z&|=$<_gG#lbNU4MI`VEPY4ADzDsCr)d8|xuWZd9zrC>jgKtkBtziNeObOb6beSk@v zDSQQCmhz%{0l@~>S^1oTAC&M4V?kyj!yWw7ECxPJj!I&O2xK$+e;!O(Z_|#;Jez&2 z|4_3P8wh?)=oE{*iQ**SOdk=}KytQiZd>JNCi32gF1(g8|N2)hdky$Hf$H=;_)lp? zAPb6-$^CNr!j;73d3k*?@7};yhZC_d!{37MBd=e-rBO* z&^VAUg<;2jfv+R)#^nc}^&Jz~WVF;%#3lD6O4h3NIlfq#bkWBJNq<4h-A)EyNB&hpbP^YPUF z#-v9lFWlio<^H*n%xwURw40__%|9$0pNL3&u`OBP`081ntP+GXjs8*k9DJWZ<+Bd_ z=V9X!Sx8R6BK(x`4Ynh!W~n3nUpOE+olgMUel~<6`TnyqZmaM8iIDxCVM@E^X~xko zuN7jYJ3eFzxb+w7`cXMj+pXo`d%ZG$dx7jcbs4jZ(w+*;<@kraM=F;<2-_Z-H;m(u z_m{qX@SeG2r|qA8;Xf3U?XPtgGlTin z6yJ@^o8P3~f_UWQ90SP63BR|0poZftofQpX>|R_bY)Mcg+)Q!Bb1U`&?khKcCCn8K z`R|^f`6Z@(K2r5fvn^&!{)=;!Kj5ssv~Gd9yqmKEchA?q_!+t|&Q%kIZA<=fOsH>k z-&%~qqaVmFdiiMoepMy?mCYZ#*CT5jdHMKUfL?TW-)dMd#hNjAS6{L5)^{xpF>N2P zcKD}9cN=gkWYpk^Y}+Sgw{i}BYirSh=JJC3$l^gRCxV=}AP>xNE-0gNOJi0y$2N-d zT!*z%reUDo`aG)9-+?gY zrmf=_nLcdrTemN?DM3we7q5C5kt12(xAOo~ttg)3 zLZ{oFd^hwqnq)V=58*YV|D~#<`u?aXJcgCd5N>Pm@@a&B!5W{ z@3SqtgXheY0q1ad1-5-!s!WHhu>ra!_SH>~EMDFY7-hm^@<>w>2y6~#u{|Z3+^PSB z;&*QR_?m84+o|0Vd$1wb#2{s5NbSzLx5Xl zGIkki1(wqq4tCAQH&*ED*sa^TAE^cMR-i!_A-4e5t0+b$mrgvsLfBx#y-~de6Zt2{ zFh5`^%nTqG-7Sr|cVyfb6)Fz#pc>~4OP+GKic{Ds^pE5H4Y-yd?=4=~a?BJj5Qs$1f#&e7`fFl@GV_ljo%;;l} zc@jmKWkg*odA{oYc#P-t{{xr>XRqDn!R^V%G?NP5NO9TkAEC z1_Mm|Qjt6?H(TAg+CNcxZ3h1}gBHJ!@pz5_$p#U30+vYn^%&!wW% zV@wcd1-LW3PPd^jLy6f(CkL)sYew(}Xq;R`Rvq#_Cc_OdStku_i@r31s4w1_@uLf` z2%XBwk>B3ifybDUc?Q`W1}|c6`x3_I_2X5i5>e{4R)D%k<{>Nt|5umFngDaZG6`o8 zyuVb<8B|7J?4j?=|56xy6R#$RY=jAf&b^8|pt6a6JLuDXUuWj(%DkWVTRzhQEa+k^ z1Nb`f|Hy2Cyxv`Uu>!8jI0o6K#kV_%jWru>&iii$+Y-yV{ou24oe3+< zoq8$xN~@L7aBb`6SYc_f{U_%Lh(7Wf3=aW3x0WMxbAf78!`2taBL3@&NzS*$V^sS9 z#-o1k4|X0(HV~#~1gW2F>kjL=svzUMX&9+yay=Rc09s8yiGt(&-*We4KFRp~=~pci zz1Q~U*H{#!hpy;DQ8zhpdTTj!e_9Www~sXXZqZvWUc&GQ!H{M+ja4VrFp^s%KQ?jg z^9BkFyeT~8JHOfMs244r)j7_WTre;J%lQe^XglghI!@s9kX5Mp&Gj9TtUhwYYPayu ztDEg@PRryy$4++>9PC)f$}o`rf7%rmt&or z*g1@UuW{oZt@A?)1PVyv=;Z*{{fOex*?=FtMc>CCiyZUzKB4U@K8DAzce^-k?|=`w z4)AbkRB-XmD{%MRu)dRq4u&N)YShko^o0KtT)GB(i7?0y~hqJrC>`WdnV_Ys6d#9-1@O4 zeMwG5tedO(=yi6%%!~aCNw?JT7>_Z)jGHN52_qN%yL;o=Vm|e>TnX2tw~!hwvPdAW zjC4Ky3vPo)(>6OLrd+dkq^CbOg2(z!%xra*tsy zg~fa<%70iXz&az@3}Ct5(!>2<)L&@pcvxP~=v`#PbF}LLw=LMS9_D_%tqNV$-gv2_ ztF4o zkCb?Fbye~j<(bJ$2)hd8F1)!;;WSpJh5inXOn6&6b>rr~3;x=8juz>vNY`9pX#>eg zSLYl|pAmbdS=MDKlCcW);{MHJ1X^@ipqZHa0++6!K14(EAWJR(@6x_(hj}Eg!IiE9 z$i3JpM!}WrQu3sme5X=w$>YN8G#-HGsCWS9%{+ijM@wCkUM$9^bx~MJi=FB+&CT0F zc#JIA zK-D71C-?UF`e3C-jsB})W`58##)9V3HWM0;Aj~A>j=&XA5UzjNn0Qu zV?egT1j0@CkMN0{-Jqk0cK`JWwv9WDQ`Crhc#J3pu=e6-U!fp{haO}mJKj2GtdsN3 zY{nbS+m~9LN&#T|N-km7#g_V|V?K+y*wwIi{^v#tzpTwR!mCja0gOK3S|O@N)=@^a zcJ5BoX3A;OeX_5$sjd^_NRt@d1;8EJR)cX%a+XfTTNfP{Bj`2-f4aEAR{+8|0aj~M zkpjzIvd9eM)11t_mQQG~?eBml71~O`t=sYQOx%SalpM}rnG z?`O;{s4`bYt|7?=A_EhcnvT?AK2Ascz>;=i^KH@0Qqf;B8I9YoX;wdsN zuDD{f*=*S9p?eO*^#QJpU0?(%UU+Kv{P)F38z2mo<5{mJ2p2Ei_`?-N zz2dp`gu}be#*Y1+#7NabUk~JLQ>rLD@QM{SU--XzFW5+3nenDkMH-pBcx$KuR~vN6 z2MW{jN8}5=?Md<{1B6_Uc3!T+V^qlcht$e`DeNF(sY}xj2zj=J-PRwEVDu1wnYlRl3|aAlr3GGorMFy%4SBd`2@+C&gvI@bN5bR1g?hHdWzkWH%Q(GjSW@Q1&U0_YHv+L4U|anzIKY*1in-bFDVM-QE%)IQW=F@M z<&HK8aK7pf;Aw^G6|vbqu#=v~o4QWy$0lTJM&9OhXu^2ZSBc^p!^GO!C_WX7+8t%P z16dM!%J3W&vLGS9^s*@kzQ&+*k8Z9kUH#2Iy(68cKFmW&JCg>$#z$8CfGQ>Quvw4C zf8YK~{`us?R>nPxcr_t(qsN|ZX%1n6(_I|V>Dbq%_=s9VkNn1 zPbU+S>ucIuS}$o7Sn@aTBXtxxL%_Wr+UWte!56zzu1DOwHJyGR@%i|>7-=h9Wd;Lo zyJZ1|Q$M)bt8ltfHYMHgYsAJ7(J?&7w*qiwp0>WQUbfp0;%LY>)2=7$ay65;D`FgJ zHe$X7xOFVX@Q%wrfx~E`^qcui{8ja?ukA?fkxxb}$cls<$W;cxS+qr32MbrM`)J;g zzLNMZ*s>|9`J5>vRL zn#Q3$F0Z^yZQ0PgQ-8n{>URIH=Tkw zR4?+IkPghvQ3dYNex9~@$j;`g>BPfGJST}}D>XZmKfqiUM@79u+(tCUn}T=aIWcth3lI7GA}z8x`io9l;6k~?Ojyb1 z1ohDgSv*G%zDaQ2*L50>vrYQh*?1T3EkF1)^L!;0w&6J%ZomnPFvDK&fj|8I@Q zryV=!&HD=MOP0zono*XW(8zlnygE5lC6_zc?U?UHc$_`+>8=v!Z;5bBYnffFzp928@ zPa3ex8=|E0VTNe1*3c$2&ZX{ooL40EaS-<~EqAL_WD&y)eD@@3fiQ_3)D+&>@_r~u z4)a6Tw;aRVda~wQ-VY^lm>>F{W?lvgb9q0MgkgTDS%gV9ge~ufk}%8<{mFce;>>Y* zKlC4m?z}c04_^m2`tp7#iNpNRrz`VWp)i;CLrECshh8}4F$l{o?}w5&%nv<6*NQdX zQkyUDhmtVN4~?)|gW0HLZMVE1O5!j-bng`#MW}Sk`=KNZ^Ftk&qH-Z@c|VkdVSeb7 z0(KR+QvR)V{7Gwo?>E-=U5{LPrwKprKVQzUpl*D0v z=;LdW6l>S=ekh5<{Ll}#q~P7c@_r}@!~9Tp`3CGgJ4@5i@_r}@!~D=K4KMaX^TYCf zC<(*-(6eXCA3)ghekcjU{LsjfLyZu&ydO%!Fh6wR@E-WW+46oU3B&wQH}_TWC6wj; zP!fjup-TGF2jK=^-VY@uo0uP}-J)Cq6>fPy^dE-$p~)RvFh`nfL0H}oC2^P^y5-s* zibLk*{ZJBz`Ju6)bl47KsiQ3KhmtVN50#yKT@KgE@_s0Z!~9UYCROYb%97mjekcjU z{806_Q+}}A@_s0Z!~D?O-LEJ{dDF6fD2c=T(2eD`6n7z)_e1}2s2}>_zjNbIqc87= z{=-lUPxERm4_v(E{ZJBz`Jn+T6%$}?c|VlIVSZ@x5252wn9KX2Bn;ToH=+sV zmiI$RdYB*T9da5oSja}~=(2t&iNpNR73ZFYK()ENA4%lo1KuxnuQE5D;M1Vy>LANmhN{mH1tzTI$>FYkwv zILr@Cw&F{Nx#j)Pe;le;>~d)r%q{PSk~qu{O?y`J5$2ZnLrEOwhYD>Fqv)E;`=KNb z^FuAZ|HhIr^3JlXA4=jdKh)@@`3X4A<^50+hxwrj#qky>x76y(`=KNZ^Fyb8tNn!K z8cXlei+xC73avA{f6%|H6z3dK4abAt!Z{Lwug zGZdkw*UD`uRGr^Bzj<%N+a})7$#9|;vcuq&rHSfIKsoceX@zPpt_3fR0 z@5LZ47hvPA`gTy)^jMs#(tG|S?Lc>BtoeG?JUm8?I{XU)_KOfE+Zy(9Jm|*>b6ftJ z$=<~ZJVq=BYJAVFu?2mpa7UHvt5cb8=0!aX$_VSkUOKtt)Dw~OPULb_c#gW+t;%aIv9bRgI-B;wUB^4?wiWJ3Cmv0t(j>D)d>p_&;-OJv< zQO;TXdTgaUqj{ygvYB%t%LB&|h&uuIYk&F}6lG}iqSo1H<~=Vj7|!m^pz(t+v{JIB zc3}(GQk0sl$Jm7Q93~xoZX5`UG75k&^gugAbtT0f;cL7{o0(4F0Y;bFOlb%DBM^t2 zNFW!;=T}gqMz0@onHjxh4fhV#QdR5`L8cz^$|Ryk5HYfzd!W(<|2RHV_1Y&jg(D?# zU!de9ggF8^?!CLQd3LFE!t35J*4+H1!0DC#ZA@+b-^&Q3<$%}gN!^(sy4tS2?bG{P+szAu zIY*0J^dJyM95+3K^{%xGrny$?4$AJOQr3Hmy;yc>;-g&&xJ^|L;gyx1HphwMWo)Oj zn$g&~5qnWc4*4_k3?@y=PFU{tbilo#vfHcs4=8>j1dL|jIV$8l9eJ5qjS-xuglzF$ z$!--^nZN$w;K$y|pLmQm8DQqsJI=#$HIt&2Ka>_u2fewFcPct#2I80j_cX&T80D6F z=Jq5phgL_IYLTBCdhI6~AK)>X-vDb}S5gFFf(Jk8mCy7m_|A8h4K18mg~y2N0On9c zT>(cq%4&40X0!1XJ7Rajq?ILf4u}0b^u3nEaF~0@W4K%0F<7noF1@pC&mLjC9(M6~ zj+P2D5SB`}w*No2s|u@Uv`0^hw)mF9Z8rkKJk!M70?QRveGd?r&a2(6wZ>WN(ioC- zk#{j7a;XlvcbpzT(Fn2Tr*-XPSGoJg9_)0w<1mHi=t2OuhE5{_s!c18;%L3vHLSGz z8A^phd~NU;?FoRfDf>}e4LDoStz~fj(5I(^Jv}$|x2r=O(&Y#Qm61v87SK|yFmK!2 zoVF0w(_=U!T4EJ0h{w3(0Jd}bMLiUyB*O*GRWr^f8KiSrY`y0c@EBDVz{EH08iy-0 z#(1Jfb;Ec;Mf(`vsBx<_o}+#OxW3=n1W4}K%6Exzy!t2me_UliUN?@^9eEp2*8@>_6>ew`fxCQedJ?0`nyG<#O1KTxzaf}$~V+PgEG&9X$QVXpJsMzg6fj$JdhjK zuoZ*3Hb#3TdA0}g0&_gulh=ot;q_=_0T*~rI|d4qyM4o&e%kR%UlKQ7{KDfph{ve! z0F20^)d0(7HZ0ocudCDG5wD3n>S=!p;;I1WdzBjAysDdd>3nb!{rGjuvu!_azksqg zsxg3R|JE{sqTI=Q;l#QPM-$G>=RPNvGrQr{XsiI%t;bXiM>+KAWGYiyujR(=8-K2k z^frY!G;<=m}8+=>u-2Gt(l|q#QDDS2*2XcFUmhwPRuHHs;s&|J$L4E+(ei31cn=XdWR09HC z4BCZ4Sdu@Sya-`R0Bah4_#dRUtBom0<*D0m4&QSf7Pa$8uP5)$H0YpvYn^%u zrKug*TL0)I-}<4Hz+OB?WCUtiIBvS(8iM2lh@Ns|L9m zl`g>8siQE{VF@D+Y%`u1+B{Sm-0?W!el05=qek1i^1)9E;$79s-pi;ua(`g~>z-L!NYDJ&% z(}S{&z0ASz_KXu?rmXy`5GK#hek0?yLHWsPLZ1HnYe+9750V<0b&+YW;O8S0BTI`O z*9zXum)cq_tq?JiJ9q|)k_s71NYh!Z#Qc<{x>ShKUN7r%-cMsoiFb+E>tm2y1i((k zaOlEvbGJ=a@%}j71(eOIp&6po_@3th7P+Ij1$Fk_$=p>|ddjdBTNJ3688tZFo3y({y9xq&l0c#KK}U|ilGF`JgG&Cm1P z>*uQVo+%PfdGvb|0ct$rQNV?J>y$!rrZdSe++H(|Z|?OyoHBO^>X}3nfK`mzV`oid zaxbQ|^tFBE0#0mf$lKdVScwmlh^%4A+fS#V^m<~ zA-rde#b$LfxehmWYpq=mhLwyCs(lS}dXMLb*8pdJZymOcA>)2X8%)lNFtGQCnqAxV z{UlO*jfebMAX4ufGqeA-i%NtChbh$G1x0;X~ePuk5QpBZP~9@Ex2%hY9>~x>CyFb9ogo5uT-xB&k=6{ zxy$s&UqEv7x|+cY53>m_hDJj!`sY(1%n4wpm13~{E?J9TN~txa4Ne?rOT`QW;2(>JQMPwb)GYOivpvN6_O3`c2QP zC;E@%ogc!NkM=g;u6+4Y3CGzS{Iz#L%3M6BiKgT$Z#Xp0X;lDske(J^Cneg%rElxZ z8PD-JR%8l&7l7o@?TDXvt2``sYD@3~2I?!TR151K#ocj-{75P!=_C-`o~6Erxi8w& zhO`fqjBb2Q?>=GUSOe*82i(RBKNMiD{7BjD@V2gt)ux?AF+Nt0@f^)}z@2RR9))sC zL%~vo?fQzSc*Rr&_cMd7SCBiZD2&(WeApnjJAf3$q~F8lB@JLGK9AuAv<_MBAJV7dHM z)1uhiuxo4jK51Bqwm|+HE!xS(8g)FO#*=w^BJhp;lMtsS-o`cbALsBNf?hF=vA|gQi=WaKN>Rk79lw8P~Arw=?_Ldf$sNjz&BZx|{J~ z(jc1##-S!rgGzDVA9RDFQEy?HN%DK_Le7socR?bE!5 zgy)YJKWp(E?P0)4Z0bsZtF!B#*5!UN77$lt~uTL6e zUxefkG0_W9?_8I6vr<>N{>7S7t^mP&sSF51XF%oVeJU_^LMBh-seB@9%*ERD{+rkF z7}hzDNYYUlGO7G3yU!V~tI&K~E8oYScoxsmBI^r*p!WD9#fIiZNRii~UvE>Q)Oy3O z@&u^WX^^3h_)Sb%@K$tH`kp`cg!O`ycRSQ3_T2xCm!m=EZR8n`kN2;`mH9tfE|(^< zgYFYeU*Enh?gVo0CH~+dR4)4_d;w|zARZ&{$!uOru5GL;_w{3CEz^I z^lf0cxWfAix&BJ9@}nVe5_Cq*2^#R8#qo+S12d({hia;L#Q_C zIsmu2!}B@R=$to|N-HDm*K%yw_wX0LBAi;Gd*-r~=kPfRYrBEHk$y<61JkdotF6ZS z@ln#FGsH8uGWhiF&`Yjzi_uiqLxv7luBP0E1}t3+2y$rSFN#B;diPQ1kX&sV@vtWj z>8~b{0Yg3z=+Fl|7Iz8yK!w{ew)&bv#~zk9L{@<*?FDG7O+*Td*jrbQVbk!)#%!sd4~2%2;(t&Zh&=GZ<&Kz z?(&Ji<}{KlR&w=GS>*4>HQhJBMTdH0dB;*4h@ERqz59BjSkF*xauu&L zH6EiH0a!qv4R+0iOs;9)s_)P1&Z}jGKcne5f7Alc(ewc>-S9K~k^;L}|1<8?NzTGj z#+4a|%a1}BG76FBxgPLk!EIMtJWMC863cz_#tYZF(_JSZ4&CM5xL%Kq1F|stN9bE^ z^;U=7yU^7z|J_^}&tb(&JoSJE*860a^PFKTA)#))!owGR>d5Ysyf$fff;eq+%dp~+ z={+8wd*5W_Ghwn(;Z;%l^+r5LgXZopjGSs=y?9pd%Chyz&-rzCQ^%Ha$Us~v(90;c zPlh@fwYX99b+;_X0zr%Y(ZnpMI8v>hUU;9Z|C;!f(Czn;5qDhvr8iq4RGlaru8`G+jI`>ZS{Ln>irt( z(={AZx$oa#-0Y9RZ3gl8o+Wt`)GN#Yn){BSa;T#P2Udk##mKBm@Dj> zcwjDW?ifKL`h@g2b61~OX$>;H;Ti#*RqQ5C+d^R~4#~#8@|x}R%;*{ENl9eJW6XL$ zj!)B{8Nwv9MiPAWDye6S{2sU@A6`Qeu9@1m*0D5T^MoBRD>kZAjl1=CAFO+zIs;+ormMJIGI%vbpfHr!HRuKbSx<|3`;{oQ@KA$y3+Bx2dA%8vj z(4$8dcmmr~~lH;p(*CTh6Feh%zNh zaEh62;lyLq$ZSs_gjlWJ1&5hjW;WIRHO^6Kjg{e{C-zVyU~bjM(mnfN?$hd=A*TRZ zk-f(4!kOIe$XFvU-YO&yArOlB?KoiWtj=BqrYfb2rAMF7d(i&$!E>CS0N4GCmLfm; zTpwC{J8RePP5VboDz3FS<2fEa!0GjNOv8Gq$D?1~4mv5X8Sde&^mff%JhuW(1qxPV zet@|~A(yw8T3%kC6#QcA(piv?=eWv&o|d%$Me`K}N6H#YL=vCK|BTY#XpLkx)U{T$@&HhG#`;Nr0Pc8@Xa$KhYHmRk~2+Q>;J=}R&m^$pj zeLka+x^5nbqXFFZ31Nz>Uyp`zl+FbAbUxeYsV5ab2+h>o=z@~9qH7(hw-hFErvD*r zS(b#V%%0&yH_;Tl9G^Fk%hmte2um0*cc!v{#pRl)p|iOMuZAFPOx^~ZcK}wyKEW|Ht&9jd^5Q@|| zdD*zm0jztdQ4empF&4R=Lf=f;Sx@mVRv+aLLmav`-!wH_4|5-)`L9xODW(6&yu-b< zwis#xuAM;d;^8}Rmj}CWx2gK~rfZrl?q`bPD~=4@Xbm{_)^O zl4yjTq8%RNd=AuTL>2P?ANJlnn(8n9|2@WIcFdGHl1d^fQ_`df88RhGDj73Jq@qG3 z^E_loic}Pd$XG};pioJXG?=3d_dR^t=e)P?U-#biy=&d|vsRza>e=hDUweG**WT}Q z-r!nheDV$A$hjoHtt&6raU=N@k>kUXRO@D?wU9gKo1@png9QFM7v18xYJ3hkTGMtW zAGX2j*+0i)ElrFbznQ%4Zo!sk>-_$T?8<(3h{*BYL#wGmXS?W%e{y#Jv9>1L18i+S zec>`D zuFg|ZwY3`uzcTl(BVs&rsJjcR3l`n=Hpnryp0i$?^5DoP-}7w=Yl$3RC(3m#c^d(b zLQ*_wYeMKH4GH&k@mKEceAX1{Jt>VqDQ@+zVjb4!UZT+1BSZrdB>?q#+PRX4@%Z9-Z@ zJLtUFT$y6lz#qj@YpJdN+|l2(E?$(=>;=`b zl!B}ed?O1LsUUsYT0e8Uf>cez)Hn6N*JFZxqTW!r zWbkD5ubnHS?+-yI1p#D5ArHIW#lkCL8HF=jTz_oN?lY5zpH*Q$(VYl(o-xxN(udu} zcvmbp6k+w*_Tj)zPImj>5Lbk{D@@?P&p|XRDAdb9O7!Q(_@9v*b`OkX8xlF*w~ zwGgqTVW_wJr?)Tq%uA+Ic+ed^#p=yLMXbUfiPv-iFyecKRQK(C~>IKsma3*^^N77-Q2cwJTrL->LZe zn`wuL4&-h>iYb(>+5o$&2%59nQ>VY}Q`x{4KM6Nz&l4U;xsQkSxgd9EWNo*`9GSfS zW7;t6p?M&ZA<_;WuQiG}Z~wOF!$8A61^e%Psy5ha_%zbC>m5=p0;hp;$~+2;a5ew$ za_PyB0-x=2QK~b&Jhl0P)(6O6E$UB+N$CRYFO*4=w4_dly|%TzTcT!e0^*LMoLYvP z6wEcZC@phlDLCAso7Q9MS%XY|+V%--L^+EKTQ9*}_RVK4nZnF=4|H1QJTBTmhjbz2 zU_>IBHf_fjA9YeI?Rb$}BJx^mW+%Vs(QXBPqC4JP6!TMQG{W3bG1axD8Kk17;n*_4 z{F$pUAw-M^IW~|;#XIj5!?g^1y`uev=hZ!)>DC)nkE9~S)3%NenXAa?wUppj5L9>T z0*kpi#UYESOT=)ALH%c{Cs^?QDYKNJ$cwZG;}-07xrjhK~l z%9hDQj8_lEgxwzEpUk1z67tRp{JdtYB{Fw|zkBJxXC(H}j<>*dl*@41jX!Oq;X=Ao zJOm`>9F=XuwF3`tfaZxn5Xw2*X~7TjM8254+$HqN{L%G7g_c@1D6;b++cb%!7h1CD zHlR^#>47KNN8A|cINEysmhUB2lb-|SmhGGEgT{c@q4vZ2obmVH7F-ll3g02Kp0;&7 z*fG?AoR)@RG_Cu4GF><P?cF{~phHl!qq71)}a+S(CrRT#@{r1H2E#!=zM}4S(Pb zL8?XYcN^v2=}F_GKppetdP(ypmnu)xa!mKG(P~jAV!YUy{`2jZ?y$QGZgJPnr8!)2 zeuZ1URzKQ9RSH)`fd? zM2>{ySjcB)Id)Az)jT+95+>`hHquat?d|%>kAp;v4m;uHKYO|8gx7iG#40A^t0yb? zKJF?0Y2pQO-%xiZ`)*SpcPmn?7;M!pIetFor5XLK9y#aIPE5KP6#KGs0>6=_PE4Ii z!Q7#<{M=Vo@OTQf20+1x?iq>+zkl2Tc{6p_{BYYMw1v(65Pw2Z2ec*AO{19KOZQiB zU!GIgH+{a8_iKaUR`$M)uF#fDkB!}D+dq{s7m}XezS$^ws#{ZGUtHH4bEtLL6JLhn zYIxbH{#x1pbyejD)4Jx9Y)2DEAgmItrfqWWqI>0`j~DY_%RM-9`Gl>}#Sd|v5Qm)d zkzf?}XD!q#r+;|I7fbD%wr>$IIIhs$4Pn?(<}XEMDTIlI9N?U{&h3u)oM|_m_vt$k zqsQ|U4v9q%Aztnr>CyS%;wW|Ua%eA4$#x<~ht+cAy5c9eGyk`_v-u)kM?CsD2T8*> zSPoR2h3bjrZ%3BectG7^X#Jbt%&&0b^b244Im;jL9D9TgLTSdKLb!PkZOZkxuvP6@ z6_&m9jn_wQ$Xy}I?K5Fr^vUJ2Zw{XrRw+E#cxw4&-KS{yA*>+GpZ?A`_!;arLw(!2 z=TjpQ1$QQ5s;#Do7`+hc&a5~HznG-ifxZU4d@w1_a`2Ij*0#@uI+;X{t_QCau;~j)74kYr&M6@n~~{{ zu2dpMkDV<{&1BEP?vetu-#*I^4cc;xEw0LAw=u*aMgCtM+~wnnMXaV5U94a46<+U?3U>>#77>5;T?sHZu))Gi@#cNS=nkt6jOX?PyAHNda(KVy)8iiJ-K<;)0veaIzecpAiLXt69@UQ`dRiK!I zz#e!?`xy9EbkBFXIlc&0Qwf)Y?)LGogNHnrsfRnI;pM2di`Q50O#ivOqY4w2kh{;Q zJ99qWjZiIDOC6p_F`zWu8h z5u;l`F`FW$MaS2d-raS#y)9HXDLG&Ewe_G7IeP4D(WGlP2)C|KJ70S#Q>3@khlEEt zeeKE@pMQLd=#H)hb@%=+ z$2{DdCBGv-vE4SHjFwsc-Qb^1ky zR*-(Kt$l6OV+d16u~B6s3D{lbiuMu?rCZ#ZO;J`G@9#pkI9hjf*usM!}eYjUXzCCN+_|!+7h|&9^?xZr#?T6h}4egBBbz*m2CHHWpUi&R2B8TUiHb&;~ z4l5m?7ISl|(8Y7xCbjN$mPjYi){@=~bvGcM)t}xAypTq_iWKot&W=fL2sAwK(%Z@G0*zr2mYU6G|M$zJNB_Qdt08C z-=o}zIj7+eU4^;}XHVpZ+<7Equ6k5;fNpHIE1&VybENMGeTiiqJD$lFVHl0OHzKp^ z#!a6c_hx^*@zVKO=rlu*JqTi|JhbQ%F009J+3B$4=fn5aNbm2iZzB4`Uk|%-fO*kV z=^xI@hZQ6on>#wyTIPd#kR4}nJ+<=1;qYLsosha>jhMdze^AGue<8e;+(mn(WbA?f z+`NemLw7rpS+AtT?JT%h!tw-ihlCmALi+I80GPW!QB|HODV&nzKUq{c_4^XUVVi>R zU5O-^du%lmb>i%y$6H-Bd9QH`^+Q}7>QC(A_c@qLeDl;KZP;Wr`E$|7#~wbD5Qn8l z>ETBBv5RK-O6HpQ)~`-s`+Vu7xh=}B3Om_qXvjTmId~hhK04lw1?Q%{oT26L+mC^2;)V)@h$(e=$1b6l9!u1!lKwIx!|9NB0`#W_)MxT$4HmD-PUQ$ju77SQRsNoAH<|vgHsOH;iJ}I>LtF zPN`&HnK%2iG}$-*dGNKshfv-@hipm6ufMF~9fewFt8)C==-@Ni@^iVaDSSqzkh?q- zyU5PJ=mQfMayE~s+bM)~cbwGuP+$f^#3k+-Z%qs z=_vPcSIMFkTXx(jYHW)Bw4t65uj}4cULESYW*x&!gRTa&`>*OSP@85Ng zm8>^ZkvDuEnH;pEH&%&OGi&VNqQ{iyGPj0a*j<_={CBN}P7Dt+%CsCAIV~dJ$;;dN z<^SX66|dqKKB<53bIjWK7zKxqBZO+wHzM%~c_4SN)gG?q|M1I7sBddSo)e>7mzfFv zu~O<V2G>QeW){06 z^h@aQ%L4<`>yH+&Dr6BccI5Pi92HEZ7De};ZcfvZcTOZfr5~p-i@)4M=IM2rF3yiUqL#4`_?x%r#1mg2vyUBrUCeAk!E z?MI2+#_gy(J1@gUw`xsiuk^@F2Vd#}pm1}pC%ji~@NCp_3V9-Mj&Ga0maM`w-nx!cs5yz; zT#x>br%)2_73$#Wvv?dy-CAg`;^TBCOozD;_m+WUB+h3jcKo#1dbn|2Vuy^b`n;(u z?OV6qVBP2(kt0cD}7a>tcJw@kMl3p*ylHZ&tPNM>G#*Nfj`<>r>~XZ5Ja(H?JEw&o zgs4-+MWW!!iLa~gxt)4sNjLh+iHM=U9ufHvm(EJ~i+l_=LTgu$=k}HQzLCE-fAYV( zqkpwzLIVP+;k+4so}md36L;iChJ@swom|+mG&1Go8lpQUEP;6ScVQRQDdwfA@iBtV z+h&ix@%5ekfDAEhG!g4JtHapn`3%&$eEMpD3t|>Kb_o{t}F_QAujoe)oZh(IIz9 z$d@)qv+v|9k_YI$j?;3I^9ljEDgut<1W!n5Zw|H zyXwZUf(wx&GooBg#VI({9=%`gBx*j#sFoZdrtixW zDPqS|M{js5%Hw{8I!9we!5aLcx3=`tj8EYDHS?A-$iy@aZ4YTNQ{}dndkS1z#+LC z+Pb7G%NNDIT8EQMd%It=E-CE|O*32XP2`x7J0avgp!4%f*k4c&yQ3}dGS}ySr!1ad zs{QX&@-Noz8^XBA;W4Or@^45J_wv{OIkwT4bMw@8FQU7HVkoBc>eg1+UFso8gPAo~ zPwtp2SASJ8Gfm_;`cST^YCs<5I$afb&U0PA$9ww|n?WAORw5^j-NaqLo4^TGa|!#K ztTWf5dU^P5&c4_tid<Uo;Brk8=K%RjO8Z z!=H%ZbF53@DZHDn?B|aBo7f!?vZu0hU-56^lqNAxpx!POJvW4F8QagTI`oz=w%mX- zE%uhwX`(wr8I)7LEj|L(QpGY&@q6DPNi&(-jXRHzT_s|aMii^s{2>Fvj{mv-I;wEO z>*AvnBac(VNRB}} zj4^DsjsGcgdx>c9@onW}%tQ{KDJeeZ@be@!s%Wn)Iz15=9hLIFM$N#b2)S&aaYv~| zD@h7w^n)*?1$PakbeCS*ZLR(AeooSpQUZotSD@I#hwb=$rg}RQ`!%X^$q%<ehUpsgmyN7P+chG!wnMX+u2YS&dHzo=(_#m+xGWs7w^wy}TtFXJ?2-V{g=h1$ zT73Ozrab4yII6ofOAi_sd-<6RxF5eD-OPxd&1v#Q24w$3ewFh1H8T*#SVg{V?DQ-o zXrMuC{&5?!anNGQ*qPT#HZ}&XWz!DxzK2Ec4D#e>Z$7IJmm_kF$a+HN*-L>5$emk( zK1@->x*uI;3R+m$ekCOUjhGaB6E9h&JL@GI$^()cjZ-L=gq7pK1h zzd)d_1N$Fh1|f-dr)rNC^!r1mH!`hCUp$lWp#tzDHTp_ znM<0~?8@pO_6d_4+9yLX1=CQU_?V>$^!yPmUvchqMV3geClM36i(-X7w)nLJ)!Pz{ zzJ0b1Eqmin$fwPoE&ff!m=2+sv)F!oPo`q)7uY&(bO(oeuv#9z`Gp zF?v?JCB7vSF%e|bL_WP0621<0m%dZOH_Ra|vtn>6DZyc}YA-L_<oQx?91Eq3>_~=%yy|0^0zXnS;b$}*bLqH0?)2)G zm;S$Z*!?>os41gZLs9oi*j-P`&UXDLMZq#EiHA?h#BL{6lZ@=P$aRHATrSMDE?u|w z;(ktba?bFa_psmykz*P{Ia@V({A!CP*2dl7(p2i{l(LC7{Nr%>a43;u#LniKk2a@V%U7=z=uQWsXnU zOAoy_O=;7#nIm%ayHIysbQiPXYJSvm+m!gRuj%r>C*4&$qhp91?`@Qm3^0BG^~!16 z=jYs}{kBd$C5yFhzspa=RFM<}IfLpAFM}}Gp{^@uf5_;VL^--jtg2p3#MHS^tV3Q( z8m?uHx9?nIUd;HfAoX@Whqyo@$K;4|2Ud$Ln$TUw>FnnIDtdeKtOe9gM1~PLiVw;a zsJ~zIp|%H6@!o!aM;o4>I#yM%Tgr;aG1Q}6&4`K#)I8xY+h3G!w3cc#E?;IZBgIC< z7&o98FU#Wl`4@aKLzTM1^`iHBj;vFc_(kM6(6~j)+n0l{1oUrcfRdt+-8Tj+O>Vxk z(dWf}kkhVOWnYbxI< z+$FG#Bm2}?mw$-b-QAIT8l)3JGgJvS8b_m7puNu4$ z4|!+B&b95{BMxQf+xxwGe5Z&UpBBoo?p(nObI+R}t$X;fLu8v_@tFmu-$>#`yMV-A zq1?fPkB`CJ+XA|KadI>7DBsyQ_vvOL&qQcB1`CwqI=baM%ni5}>=R`g=DqIrw<2QQ zYUFa3mLs>I-0#WADwvB}v#z@Ij%WuzIVL{gPCAq@3VcDin7t+Q7)R~S?U4&!@-1zl z9;zFh?S3acCA#Cp2G6h{nFqqwrTy%DJ|BBjV#C~-4#t{PBF3zTdMjSJqzS?t?sBZ( zEaA64=&Jqv2GiBEM2zJcij9_SgHy4cbuD{7$Tdj++&2H#+FC7|h|#Y?vCJQA3~--> z*)^oSs6Ll>;rxZsTk_G!<8|7;q+n5{@7cq}W1b~0a!u1e_Vy*Hd?0*sba`#f%qd!oo*VV%Et&*p52tR*dUHx^Oo~P5f3T=|6->nF=um8d zYhNf-NtOB%^8*FBr$T$g)VNL6k!42fjdU5stUQC@6lZORLD6VS;(Cd@-$P42#UjT? zS`7bi)7a;Oi#`a_`~HJF*PHTh0W#ZMyY)Jj5IIIk)SY=Q1D0 z-dabxokxireg|haB{l{R-IdhX&65J7=C({XEi4DommtvA6aSrYnju4YXVUnq`}*OC zGM&lUj6-ioVtZsh5;@ixw4Nb%((vOlb?gF>I)ym^KTkVJ#J0ptKeRu)ycajaw{U4JH^;`osN?PQzLsw!P zf++T7+Go)>biRbll_-gy=+B+~dFFAdQxee~{Z^C{P7Y9mJM)D~(TyiZp9=lZ2u_Pl z8b=aK+SV~TqnxYfCHzy)G@Usl6Zy_?B&*Nn!|mi{@5F8sITBKDq03Me>FYGjvFEkvBNmYIH(_x3qs$p@{zTxWk@P@x?xk9+10O z6bl$ASoG1Y_Tvm!d70(qqfbr+nC@^qK;-Bipxkp3-&)9>f>J=x#k+&`;Kz{ynQ3O z=!6i@pLGy7jdCTgU58=r!7n+BLtkc2Gw)rp5a6hW+_Tco6;d6_x&0kBhpOp0TM%*} z|Jd}3Y>x@1()}ewjLr;mH{OhgBbqU9wvcc?=6Cf`wZ3tTvfNpu7YOdKoohk2chLbh z6`dPlH<$b|m)b*K192Iszn5`Unou=0HtxSY?ESmf-o7JJq;vX>~941Jir{#A`SkrP3ZND|4ibplUqX}WVNZ24P#HgnM^Y5B`eNn84e z96k)!IpsW|Zt+Xm?WT2d3whOMhWC5x*Xt87x^2kDiM(?y-Z2NlmOOoxl^ApKhD{;Q zcgwRJ$W}!&c;pkk<@|NTnRV8(y%Z5VXV&$6%7#-VT6#LOBIRn+w_myZ)8QFcnRKtKZvidKyV7a7G z%)#CB9)u}KuwP=I67M#=;h>T~Q3YLfaIvFU!?W{?a-3%SHL(c}K^y3!!q=*De1K9^ zc4Xs3e&f#?4>%f`sb%hcd1Lpo*3=tI)1CzEAT*A|f=pBrDX9F;HK>+b^ryFp1niQ~ zV-J71{((;}5nI`SVrKfzSrB%(z+__A9*Mhe0&^a68z&;$DeZu7{D5Ln>)$@dFq-My zSI&E1p!G*UsdadCWV&Uv>)YCR9a5JTyvAv3s^_Wm6Fj!Z;aPLqOi z?-n-T$7SlqrJ>yJ@^G8v?##Qz%H0uiAw+B?lEx#iBpct62et0Vjp55XCRZqKxfXOP zy5;5=5mUs5Kz&fip~VMz(=xgn_9XaS9ah(>x`7r*V%q#?;lH1Rz{GB!g8Jo{&b`we z=ph@+v`?pDceo^mN3Vb$xyQ2d6{Q)oXW>o(dbHU3VQE7ocq2co8LxpJ_q0FjoreRa zGne@QJx6ayON@gB)7hD1sCxUOMD*ou!`w^gB=VlwZ8` z$Ms{nKrddE^jR+w=^5mQ%`zS6k2moCimbrvN!D2p^r}_CXHwrHn-=oJb$kiX>wD|u zjdbr}I=89=&>Ko7TQKvO zd*}U#qua4DJ>$)#v&T$qbp|hdyqv}I{R8HQ?!*tHahCpX2zsvdHPA#Uh$S4DyO|kbzLfa6gljn!2`h`a?>B0ms zos@S4=9!nO<&yT&9{AN1LEHqi>VuY3XY%?&Ye z4?iQ}75U*3tOUB=5l3^Dd)OXAqHF{WPBh%#`qT?Q6_L2YR{(qCXWVa+ej-~J@aMr+o?<$yAegs_2gr}3Dnb}Ao$Ho7us=$1%-}V#!0mZwse1j$cb64sFrE1k zwcqSnN?aYz{K0g3e-Pgi9Zsmwy}EcEFaN}MP>#zo2}TajL`>&#*Z}lXVU9lt>r$jF$+mR zkRPsoL7>MNJ-Klx;5nwV=$r(4YK8Bq)lmz$eb*q+bH}c*kP7g1#Fcss=mkub<-6ta z{$y0*0D58nt95Vq+pu!D$<+E3j(V(%cE_@15~sa8urK9T4X{uO#_Y-VLqMRsvCa{J$7I%~yEpw~MpctyM$ z#r;ZO2YMq}ZMfx50j85q7EyJ{^8yvAad6D9`fj!^bbIYscv9z7UMalsB65~r5M*^1N_Mff-U2bVd-l3{vm`>jCg{prS zueaYRis`JU_5)olhJ9B&=S@uKvf>81MrXO5i4Q-n-xCJ9=HpL2Zc@>h&Jd>t^erET z!ZIt|Fr6&W3G{7~Px5``gK#}SAL!d9&1+U^AV*o`hts(i==vVv9p?RVxV_|Qpc}sy zl=$iY-@JY21avd4p^d5I#kl>4JwUhm>M^$I>O)NDsR*L#leN-k6_ERWK;BX)ucQv@$&sZ{7mvmpbNDSz%Iu~tdXLie7{P$nk5~>m_2*# zA)x!8ANiDLD~ah8OC6w}+sGVyS;rjH$&a1@{Q~E@?*Vw4L*i@#`Bl=DL#Ynw8cQ*I z)^ZT{lH%#6f-1f9@p4vy_?DD#T-{J^nGmkuZ35+|26p#-9OuMzhQ4v2r|O_)97UQ?iFFAQxy5QWbNo}2=p-@JITOs?b*X3vsO2lV^KrS(s_ z@Hj?kumgIT>u9l5P8w#<&J;`4&oZcGo|D9MX1#2nKcr)1YEe_f^=-94uUK=;Cw&Z$ z&#b2+fZpJ`7MbS+)Ukpms9iz=soF%?ab^p zm`<{01bXj6OGbr{f9E^LQNNk#_+4_YBjUQ#|;5rXQomtBKO8Gl$db z@%mh!1@^xq@{g~z!}AJ;PU`snv1Bi(ebIv1b4N!5`@d&jjQMHp!|OxI0Q#(=U_Mg> zp5HP$+@|VTLybmZZ!vq;XuR0bMA*K$&683DX%j-2u8p+{#LJaXb$5STzG( zQi49WngP$FD6MHgU(sX6%|!QQ6b~qjBG-VfbL2|p_hZ}e`YT%ieVfE#4uuQIMJ@6} zDd_?FuCPbqO(Z^U6R!7~grD(Q^XRNv2?bNp?I~>U1hv57Qanf&Dt!r7xdp zKpQ{5kWK}Ha$F}obH5t-VfJ)K-vK?)?q}-3)2lF@MGoW-$?>KvC1$SWm`=HJ7uY8q zmfIyPA%fdy+X6jh<%^s9*F3^>a>!wzU)y_(G2~zhu1}o?dZC7`a=X)MOlPP7d4BSp zvg)128}K;HElr)b&vJ6Id(}5%_N}`jqXBac%}5Oy}Y~0rbBoUO%$meHPQ%7WJD2E?;Ws`%d0;aR@<^o+nwCvf2 zxENf&91rv*pT6GM9P|v+NqeM$E}js-ez+$J(|Pu216}Hf_yKv&eoW`~nxX2qBGzAz z!Sew&V}GDa=kWj7d;KzIPk$HO1Ek29+pP$X#^VE-0`l9Gm0z~4`rd%=YupdPKAxiT zWnaOntE;hcxNIds`8$_~tY4Xk@9*R#U>&9Gxv{csIu1V{F>V6uH^um9+fgI;5v&}R zQ#(O9Cclm^Y}xk^FFyn1lPRVl>;De4?ZtFXgCD@&wBnPRh%`PA8Q)ObYj&+8CwDU! zX3x;A3G9y z=FxrZjaWHse3wBvL5Gg|S>M`@>8!qB|4q5nnbWVT~cCGxP-mJ@s1R7Jt`XOy@cN8t55zGGcZX_xW8HrE1$9s+_R;WR7=PszYq-5 zIee(|>Y;Gx+~jwB-(;-U0_9f)eRjWA&WhX5P{+NhiC)L@5x$@DJoNzfPlr@8p2p+% zEj(u=fZnt*G^A4`el_ z&fBs6?=jOt`1z4pTMU%5pvGcoaL)kqOQ$>aPfw*ozH+ZCPlxIBI?+I9tm7R=9tdJO z=Z0ROGf#Czs@Vu&I?sAlpbLLgk%_Iu<00q4WS~pzT~JOeR&cuR}6bHrgKk#ye@UMSnmnD-S|Bf<5_uNzgmr}yYe9($9Nn-ewezB(dN&I z(f{hXDi+wQH7Q%@v*YJzmbHI?uHljAaP!s*ygu=qK;N9%b-|Hq9@EKdjex%Mb?xi( z#tXQ;`~jfvvX0s`$%)TrPS@2`J&j4~k!BZW&p8Ut^{IM;6gJx!VN54oegfb&GV<-#g`&~#EmNS%LI?wJzpqu?tXniPw>-1;AevxW6v0=u_h#RwKIRWc?oI)l}Rc|jQ1UlvKcdsEvB(^+Cc97_#yM^=P^;gQsx6%Rs)Anr$<>#;fBergP0u*J*Z7O_c8^YfL9sq=9mZHUzzB zM8Bnk{IF^c0R6$uw)a52-i)!h`RpbY9v(?|E{k?RN1XX3v--2K0}ko+rk?;O7o{dFp)l z&e8Vpj1wL|DNH@U{`>utx4rPU2qMqjYJfh@^)(=m7q1U}>KdR={5Yv`P~8*r%gs!k z4}W57_g1ju`4#191F)ZsXsp%a!_UPmD}8}Je{}NCvpziEW4yidpPoim&wF8gACJ$B zH-Xbs7r*N3vb4953& z9y?i}FUuO}sPn_~ZF1y(pfA6|GFzXGpPT3ob_0EFT+&qwJ$#Oe4|fpA+tYH64;{TL_X@Aig9%`t<0AK>S@jR5Q`G;-3u)JvXQeG=uEKO4 zj)VXHA?=1gPp;saU`%J)1=eX=3EPqK@c?5?XUq=)_77OTYI;rOVLHnMb)HnroC;Yx zx(CzAlEc9M@kt+_ssF~8ti28BH7RxiJGbEZ7SLC z56?5XNByb#dyl#x14hg*a_L z>v-Je80`h+|53X~IwER|*>g>S^JChdeaaiObvI%GZ>Aznz)cis|I#v;WFT zXO?~IvhN}uA6Pv=oKI()dZp!l*#Wa>dQk`LDXN2Q27~6f->ZQ@mpeOUshfz$b22jv z&{zFh`TN`T8O)yZ5QzWj3cT)x7x>m-I=h+-u;0+w8sQ-J71Jq>U_PgBdOup7x!eiU zNhU?WUOUGkQ2D`COlPzo2m1Dn1tSOfX7O^0K%SYtdkylm@F0GF%X7#Z*jsEpd(zor z8D`I;YroP+1pOo1T(Nk64!vdrmcC1y`AnFGoRs48Bj5s%Mv`upZUKPQq> zuuTAuw`4(T`RDUYH8OThVC9fqM1lPUqh&hz>Moehs0QL&dhDG;=CKxd{O5`I1?=OG zIvszu5zhxGePF$$Csr+gS(?8ID~D7H^5^tSslcC_-SL>tP6zVm^oP<600beiV5Bxx{G;NVdQM!$lLw{8V=(U3vOn>tJ*Pk0f+)i(>X}j39S`xG8 zi2`vTy)nG8C)os#d(2ZHo}@p0lv8E-`U_^ysm%b&Z=GAI&*6&apWK>aKz|WmX_mAy z3$y3W1NnA(+cJTv`L_SgU+;bZ`!)-84y$qe`4o8ti0A2T7YChAY?s5zp_o(K`*L>2 zhutwtaa}YMl+!87VR)At&!f0(L0*yGdF#&Gy&v)TL*D-i*nes~y02&&pXXe5AdaPv z+L*88k^hL5&(hfp?59`91>8#Cf$7|~LqMO)OVd58YKQ5Zg)9H*87vXy>wnSX4%Y(}pvy}0pQg9`Z(qBZ2y}S{U$P5pD^?D3*=?XJIwy_=b>Q{k zVfqMkC9bt}oGkdd<7tTny7H>RTeHYv4*g--1oE*A<&KUUZRwayV!sFCQpURXjj00F zcs@ox{}`0B?$e{~OO&{aEklT&@VF`YZ@CD7Gu4@76r4`DhbAH?~LEidi% zSPczgI-MPe=NbAnbwLYTTQHquG6>2s=&I7nyNbtiRxVed8@F+)T=_3vkrlXreu!s$ zRorbnZnM^b`H&Y1;o?oGcf@pjdN{Wl}% zc)R||n3I^!`TQQRzqCn9y!Z*e4^rf|1O3X&^E#BJ`1zgtCpf2ML^^J&wqQSxl|!xp zd0<9VdI(w8>;k4!q^a{WFZxkkVZAb@vtOsq!@M%tDakwd{3jJt?QihS$45TG?<=@} zQ~UXb?2}{u1vjyB=$th`J#T0Yx48WNZ@rEc|}Isw^#kvL3mtZ zWTe*Tb!cPYRXsfKdHq`a*l91d&(MWd*^@qvHC>f`54P+0w`y}B=nYSDL#%&!OQ>YnRH?U zO-Z^*SUKD+_CRNxR|u?pr;q7e{lP#d8-7XlKZMC7%5h$xi`5ZmaxAVv4t=&J0>wVx{lc{U}+TCPdA*Rz` zPXYF33!zDc_W#BI^B`}`Jix$yE1&x*X3tsn3D_UxOdZ>)@DtNnvi1VqCTD(-l!x21 zuA2e+q1&~yA=CJ|lH2J$&`&f|-fT$3`;)7K+RrXYN(Y_P%CPdeH-P;y)1~clx=nj1 zrZY2x`^?NsMz>`}yzqHQ-btf>j?k6&8pG_#veb5k4JR)-xq#=5+!Ga`J`tRX9y{mo za}9H_5748gjXN7M|I0TNO@JO_&iht{vt=4qiZ0cA3xkueHkLYgoCzMOv6ODfnP9FJ- z6#9p9A~bWSRqtg9cRSZJ*=nnh%OKh>Stx3wm~>}z2JG(j)>Y4S&Ij%(d*ATwid2Fx zk<%?fIeUX1SEzOFr?2kSVv}0lZFqY~>QXsUJgqzYtaetJtO&d7-aZn@CEl!>zCHd? zL(9c0{}V?SFE0kUvu*w^z5IK0_~pdTRxyhHaR@6wYstXea~Q(hPrS)3=uzz4PucS8 zdHE?MqaoDtK8m^7Jb=HSzC53O|8T5zLtuWw_?q5U10tq?ZESn`>fsUJ_-uCd$yHHh zE4FVm;P}*mK9T{b#Zx9*rf9-tADMvU|JV0>QQ8)ZQq>hQvSKT?bW?W2;c-&%Q?)kJI<+-qt8vLd4b| zK(VN=(fC(usS`y`KYxRGS#!B<&55R+T*^p3M%y;6b`(p!sVV?@+q-(n31L0fpRYLc zoLIBwkZS^3Y!%W)B+~2i!M1Rhe90g9guK05^>MP`MaN?K6GU$9U6eblF$1px`(ZDh zGhGg4Pi{*u$dByyA!4hrEYD2f%zD^eu1D^Xztd+_e4lc3JUHnBExOf4sJqbT+VHox zPgcL140^xL(M#e>&WiAx$oimdog#+Kh+cDbSexLPmBXa1VU&Tzhy@BnJ+|lPRu<6}IU~70EvL|ka>714mqTMtUlFyd z^6RkblILIdQJxe-*yaZ)Cg5+r=!?7;a}SlRTqF4=SAD)iVO28{>1f?4Vn>gcp_W~c zJKu<|?J75|gE9`UU@Cpmy`PA!-JJHp?zZR~_wOH2p zWitz6nXWpC;E>#;MEv zL~iw4lzUt*hrcj}+9~$>7yJ1ihB-ao{z$5vE_#B9DZWNADZe{Qp;}6pl!Z6a7ko=l z3|HVg3%~k*H9E$mz%gDu2wRcfSTPgner5hctQot#O*PTm25%Irb9lWE!dTWE*j>iQ z*11J8xNCcCni&yWErMb~<`#IuM{V1h59LlVWo#aFte?xuNCg^1Y!?<84zpjyUwBS4 zEkE8Zy?CVevQ?>4+2QzA-AFP+8;I5*n;41o?L40hR7;Z=Qaodxb!t1Tc8#?LyWb>Y z>))Z+ooGQahS9kDDLY%+yc_?>n z+91+-wAI{(U44ymT}y(w`ZVgWfgWdwn63@#%|un53G#N}T#Ma;q<40hFXQ}+qwC)jvB_&FmZdy_ zzq5j744PMpkB2WC@cwYSc&ArfCj*gVdxdgCu>waScbr`vJ(-j#<$lGomWt zX5nVmvdd9PM2t@y#iqp{Eq>L7w&tVP_ktuxj%|K0by3@u$WgEZQ+|x*2Do{p&VPSe zD@cBw{?J#@w5IqMk>d_P{l%SH0mt=2Yh+oO4KD9eu9n(yLENZ^i1DhR*vk2D@=)vC zcjfsTp6nBtej&&5WtXrP5fj4_fb|D`@N|P_5aO@#*az>~-mBP@Fj5iZww1_nV^265 z4P8GtA#yy0D90akM;5B4_Uiyi^*x$T%Eacsp5s3Q z9qhQV2yM1A7vHsLdL_B*$%E``tX!i*O{?qZ#HxwzgnChTZmLHX_2y`r{2?a(i0X%f z{YQQ{aXcn+yx8YB%(bG};O321GsZgme-RqnyjOtXX96?|d`QeDk=!o@@WWhhSG|A1 z_BQ>N^32)sJ$Idm{sfSe2T4wC*44w@{m7=>G1o-GFBy5p+8o`si^%a{!_Y!^AAgq~ zbqn$+2|LOfA>-T8?v?aX*%~>w(5`d}b~AF`KdB#cM?KonJ&rzg+|BsXA5{Cy)dgK)N8(jiWAR?Lct|BR()FtaB{YiHNp-goIbLM_BJZd>B;f=1kU- z&sRp@VD+SS=P|Rlq^kOgGeV`WzGSdZju0^}QPkbKHlIqkc@bxHWR%W~pRaOeTXFhx zogwzbAFC_z*dK$!;*Tv4Z_&@3$R%-d4s~DO8wc z;6LC;D(HCWgo*F_;KawCTwjp1hIR?@oJ6^%QxUOn^Um&1 zk$2>BNINk7)N|T*Idn?EpGelI-`Njy=kL9lZ~WA|aPd{Wl21(QL83oO8|u$>=++R_ zJRgy;yOUn6f8N@N@Q9DZW)d+ze-u0ZcYIL*tm{v#>iJsp`pjVAiN+f)hD45M4&{pY zzb_hvS8G?B3)T1O|9SU2Mcme{U=<@`cN(A%M{H#&pM+?Wu>upBFBvcU?h?q{>u#2Qu3sW*$abX z#ld~g0`(HopF)@$iixb;`T)Xoz012c^;Y_4-l#l1v~M-%n7F_aVuH||>`)A*;J6AOtwg3p%~-+->YDT64doAB-r%-vMY zPRiRH^6rt!7rtTHP9)qB7T!ga>+rsWzfX!LZ2ofi?ao@{c&tmb@c&}(%;Tx*+W&vf zaX9DTOej=_qCp|ioT4I{B$_lKAt{t3O+qr263P%7kRg>ygOU`Ld5Fk76lIDEQR#Qi zT6LZ5`}^#GS(Mz(q~xR>TU{cyj4X{4#5ZeuKNEj;QBc}+|8iw|;=AglSKf@X zW9hn#G!vQ2H!}$r-bpCUsm^QM!7+-<4%;VwxasW3^ZswgjX}GT5?vbcYvNWiW%mbu zy4~xdQhz^DyTMEE|23OAmS37>?6{Yxw14`$TE|6yP(C{*X}_9OXW&6X*1PI`2TU^aE#&PRcn>{IiS7COsrm_x`jm6?1qTIQCc#GAV`kZx&z_toc1-|PH! zqxF_#3Zxxjq@56%U!JI&ttQd#RMQ>DJIWK& z)wlYV8+W|t9ryg(3A}wN@2a~rhB(0XaIZ3TrgqOgS8DZ2s^;Lgk!B*iRw9w)lXadE zi_2fSF?;MR`U*~a(EXl#UuS|HiYb`}SN{_mJhs^MonBq-RHwe#VI8C8=SVveZ=~|h zEaZO=5X;M5{d(d0(u$7r<#9i>)yB6F?2`F*ms<~Y5$#gE##%fZO1mT_qdLkiL~{qh zE|qWR_$lc>tKFkLq>OK!^FHn#x4|Se$*lN7T)<~pK(TSV8wFB z=Y+!!60#e$n|m15Q!ruGZpzqYr!3yCa#%In?Cb=>0V?SvzqqMa)JzFxx@P20XZ4SN z*HBx#bCXd~H=&liC_^H}KN1xum}%F=F6cgWwBf+Anaf|FyDdsE;{{&cueDuw@R8p? z6E!x zV%{Z~9p@KUcPRrelmFbF_uB4q*1AFArI%igvX+XB`@ihMK1oa_w5FYGpX$|w_lv^S0MMZWpm6tiEhIui0gc%ws#+~BCkDiYiuh==k z=;GP+jXMepY_|^)%uwH@oK$usl(t9c$LrDeV;JXNN%?O_pNuD31(=B{foS|`RN0m$r+0*GD zg}AzQ@y&MZzkP?;l<(|+_$s9c$4W6iSFCFpAg*@2oSJt&+%WSCp}2!R`kd1%*1CM3 zweyZ-uMRQvUE`ab==ttJFk8*qrmhw!u2pJudNBW0{|iE!pbV~N(e?iiLF!bzu$vSYNwIj0#z4s~e+J5-z$#j%%A zoQ$rihqdwr@6)>HO{Tv8#XBS)5mM0Ic?Wy$CKl)Os4znMh>6`N-wV!i=hPhtb|}*J zTa3L+C{EV1)+um?=-qASdyI4^tRc=iR9xk!WB6I9e;PA=+8MIRiI_11X{;AP!}Vc= z;!p(pl-K>AbJuUzf4KW~&WMtanZQaMK9vQn3< zf}(n2s|52qLF?#A;>O8r4{Moo&ADF9Rm>?B(LH{I(oi3`mUw?BHfG7d>tDY|jV*jV z;b-%+vCX_a$cS3{Br#Olc>|XNi+P>`!&6IueLJw+f${7IDK51fOq;#`SjlYmQRArRguT4*%)6*Ea-eVf(dMpW%pZ}w?^>Py27J)rK;;H)+-{6G zL3<8M=fv#bqF6*?4u1TruO$WXeymOA%}(AW>|qL=a>H(E_CBd=&xCw6c{y5sTZIeF~nJuVr5A9zXsf@0UW}#klC?!TJBA)H^l|p5vO~90Y9UY+jpc%qf<(f_@{Tk z$1YEiH&RYVdQy-YaQQL4dCI4F!IXDVFFhCVkHXaAWhfYvD02k*@#cZEKfe1@pZ(D9 zwMtJ?p2yAIjr?$0W`iH4H_gX}pYp;I?-CIe1HNuZ#A1daZcm0Wy!TeSLG?qs@@-x` z;$57?iJ;$D+-$a3937*QgucN0TeW7L^1mkV|J*9?;z~Gy-ZnziX;KbaDM^fl>w()1 zN15k0e?od%nlA9&lVeVVEu$e$@82Te9g=&7=HqcrTGasDE%)^jBY)mv!n-Iv@IFWF z;gVE^^@Zw)GmgQ$t39%{rLsHXJ>skicyFfmXoAX?*!R2@o_EpO&A|UL-6pRuWle~4 zWkv&cPdFVK^y~xT%#RQUYCSxH%M68ik%xED$V||moa21_=DGsJDN*nqXRWt`$LKsy zJWr|7_dxIKu_*7xQFORRqH7)pes;B+p2TWgE+U31ch!7q5B|~52?2d(bhXaY zDg&hF+QNHFwa?N#hna~TkpDlbq|3-G% zmP@Pfd}Qio0xwsd+o7Yn75Sm(K|HLj2@l;_T=W}pp~;G%uQw0Bn{Xff7Di&-6!d$e z`(Sk55hbLjB@ToBceNc;zZ!5IajJ-*JwNZ?yydFnUaYUk0)1~n!`ZTB@rcu3%mw~6nwn#^ znYV-CUEBwPb{pK;o^T)k=@Swq7T!Co9USo2sXc_pC-Wt|S5!OXCst#2RulWV5AQA2 z{_u{nc>LTNarS9=U#Irxc&WjN#?e^cqW!l%b)?--7v`Gd`(=x=fm1fhs>#$gB0Wdv z7jWv($z)v%9Jg7Ypdag4)j!rf@H>h0w3vL*OE?BiIvhU{ar)MN;8JR@S~q?0K%Dw! z2>7T^j2M}9V-XiB=mI`kw7TTZ#8AYAvmXE-=bB%awrv1$O5%0kazBM;p9))vI7brV zOx?tTPHpGE<96VPw7OhCn^_U8L+Onz%ZgEA3Gps7cDiWt4J?&Qv z@WoE{tF8wKAJ z{nqS`DS0nNak&lxKikixycNHS#}(J*An2{EV=wo-#{I~=-!0(pR9;sv!}CSl65gY# zvw3Lo{Hxn~mFUc`4=~ zPTL&^eh$~nee@)4I^uMv`@ns!E6N@{{sVC~-2}M5#pX?uTZAzm1@p1)?DXrU_r!Py zw7iQ#gZJm^A_K?G_Ij#~IOBN+_=$d_Be6|A3vrHJBJkMklO_W%00W{UgG?On;{s7w||+$%%#jgdTOtr9q!h24_Vi~L!4_RX#a-}U8)l2 zEfA-e!+Kp;F!yMj)=3;cIqiaSyOz>ePA9J+J>yv})aPr&c6LRjKjO5Rvw(kZ*eKg! zcp7n0X+b<0T=9O?4sopK*4To6_}al)jSs&dJ!dWC3H7AICH>nJ(J3K`1h2vWt|uMy zpcX_ZAU$Q*_P>7W=>wm&AM4 zpE$iNbIVyK(z7<~1^uMfpZEO~uz!jn#OL}M@9tV#7U4LD82|N#6X=ES+C34c zGCe@Q@`&Z+QEn#?XY8;7ZalAf&ap*!9cNp612;{3da6Ge=g*ux!F^fI(P>f4_<;N{ z_xzRruD4A0{T>{O*B$X%)xZCt-rDEUs~vSX-=mHd+}ED<--Bj;#(61=3Hf>b5eg-1 z!6P%|UuY7<^ZKL9)~9YhgXa=csFY zoX7>Sh*Mbb9%_Be%sVeWOqEBR`vTtMufJ@??CSsXT{q@pYw&-?yt!GcRucOm!+xs% z>PyS_k=nSOIW4uIPc)PGU}riN=^2#A0`8d3c(Ba^aq@IA;8`Z)HO8eSAx=FhF5nH* zrPtpb#@xyjc+NH5+cTIr&u13Hx>H}4D`I}Qm5%)%3*MAv$ zd%M~R_X}lh`Cokl$>z#~2mN?HQq*dI3n@R5HBNtm{BvyvfV0|eO1#?3JB{L9jJXQH z$5;!Go0jwvamwY3m?XJ{Je<<%w6+>69{1tS>N z(}wYjZdI0F_9M=G zI~nwvNm|q?Mooxw^;Li`otb#L_!-`pu>{{YZCGWnBgHSL5c~NA(lY+Dy|PCFB~n^4?W0q@*?Ufs(J`C*xS2fp1z_H=QY9pQ9cqah|K^2|THG!cfrseMrx7 z7PL=tx5ungy9{xC-pPahMuE7&C;d#sg@z#CXt>>MK5I{9IO4*yj)MM9n3BhlKi@5& z)~yDfWgGlxoEu&T=~qVq&$~I^{o5@Hu1|)bp2gD+=G=UQ;|aHk3;H)s_sZ<&9Y%V} zURd87$`iajvP1AW8|!Eg=-)=xW~cjL|FpK#0{&X!rH}I(7Rad(YHM}scn4C*c5?_c*+?e!MI+z{5ahPG1IbKIr35T{7S zgT7<JaEZ(718s=YwHE=qog(f>_BA5TZvFy()`aM*MD;b+8rZ+38t8pzudo#h!s|Huv!I>*wlDBcA81B; zvc@pzPakRuGCq#yyQr-O@W8=wr+YG#kzRb?MBqUxLQT?jc>SePuL3_m@$DT0pI^8> zsW9IggU1XOtPayboI`m7`jEWOst=XNAWltz^RC8=H)A`M6qwjg>2%OXtQj}Yaq}+h zN8e7sJ9SF}%kX}X#(oL>Qb@9vYYjdhAWty@e)(cuU*lFhzc}Pmz^|wmY2G|TM*c-N zEC(K|<#+khd2Pfgsq=u}o@fyBD%}-vMmntTjp^;|=#ztZywQXlL7&yOpBv-09qHLq zVPDhuoV4k-$xWPxFm6PH{*?vO<+=-Q2TmiLKQ!hh+^jnN5YJQgVL|=#2Ii(LR*^;i zSy8YqH0E!AR~DZ-jLU5)2LA=p<+18#dA|&sgB8gWwc0nkf7 zYw@2@{2OzpHsCU(o0aEHE+S435eBX>L8IqTE(39)a){4ON>i>h53c-)^-^#?(4>^r zJbKm+Jgn*uRaS zeb$)ll5k1G>owJ62I!4#>cVY3W+6RSQU>_O^p)mIY6j!H$x7q&UDlnCNKc-4 z2lQ4SFBUDG+KRa7Fd4YbrmaDSeO}l<8S>;NyLs6k7n7bL&hZko|L&T-nL9V6AWrF8 z41VmL)Hd&JeuFr}(-*kok2#kOW?CXnHR=YwFFUTrax%`Bs3n4NyFWT2t0;nt^xSI~ zLGLVnH-^3)=VMe?*!MLZA!q5gmd9azE5wbaqsP6Mq$r3YPWFKK)8ut;_+@+$(f3$bOlxn8X|~z%SQGbZ!5R*CW=2R{}nm zmecqWkAD{HGw`ck@}H*5&Bpco)c`zx9dlZalx_Yt zhq)Zd!pH?6kx4l-9*Xmy{!ra0c^k4Iag*Lr;fcaZNydBV) zG#o05+d*WxH0TFB-$$LChVxZsVk+?8iJMs8-s1f}SqB(OwfqtA-lm5^sJRVrZA;8BU8UC<-=X|86)|Ud; zDo*3voP_gL&Qq8d%`>y;Sqpt}p2OX@3H0+)4X0h{KY{!(!eL!#*8W}`@#g7#nkTxzOx686t}p#}Oa5;Yalvf9}HtzEz^)W7fY5nF*c{Sd^N zX3JVN$FyyD+>*}U1--4x>h5LXIA7u#Cj;NLF6(;!yJF;rTj>hi?!NUiqYb)A)QxKDAKWCyxD;K^$my68m*HIJg^e%3R3b znw{TF${cTOhd5PoGx#~!^6C8~{M87OP%Z#F1v+h&>~y@*H=@FQK_Wf!L3!v4br z`*dGTxXxVf>2v+FW|pO-rGc404$t3sb) z-E0mv%lWlbWG2?z*?>Oy)we?(OHU$Bi`ol3{L4Ixy*EB%eV<^QN38dJbI2?JaqcC^ zC!6B}*lRTI;XH@DIvo5YytiBs^XKnHa5lyPPb^q?s9AagF1JT8uanju+!3me;}Y{h z0q9f3CrgON;Jlso+YI=my$4{l%5J+HJ2={b6^ zPi#(imUv{btqXCAk_+gch`oL~I|G%7`gUu{SybIpy66Z=h$mpuEqHP zGadT9MOtGxt*{B}snW2Hx5#EJDqg$>uP>Z;Nl>nArrR}-8r*KIdoWL1#%|IG8+OL? zNOU8NpO(pvN3Xlx`jf9t^#eaDJrj>Euf*e)qYdjti@L#8FV_!v9&v(2L9gllEhBQC z5^4wP%`V_t6xX=Mxp;kN1VO*FXluOvoUI*(^dd&-pkLxcUOy)g`(gH60B(Fh`dapB z?1$;}5%{Ll-qTv#ILHrW7sQj6ZB`|{_CIkyiaVbIz4^w7-&w68NKb#zFW^zXuP%Bz z3UN|UIdFTw<_FTJ@w}rjAda;his`H-eY%45vh6YFkT)# z4RMOTp#H~W^M9V4h5gg-!Z~M)*DGD&h__Wp&(VRry5;0VzrM=&Ld2QIf`0TdPM>g7 zcMRg}A8`KG;$P5wFeEG(aiN^oP#^!+2W_eQ@wy;<2G)_5)3i5V+CS>yax1x@KX+_Y z?h}7S#F;k_1CLOj^sD@Q9^&-N6M$dd*^z43B!qdVV4PoW8>8W4U4c0JU<~N5T>ors zKONVfJMk;%ZBzx?mN`P?t3ED-(o|NYPZTHt>z@V^%LUkm(yZvo<) z2v7S&BAthqF5X)dy>npT0Wa?y@g@S=cODe_=}EM^X;raTLNoAMrs9DOJG9xnb#sIr zI19qjeyu}bX7G}-f@{?D z`iRiQ$B`c&FC&xrHq+nc4z3+aft*wRLkI^M=69_8gV3j_kSkv|KXAbo2U+173p(sY~HG&bhDMW z85?1TiYu9?wvbSqzVn7+`8Fx>g>gHBC7lP36Uu1%r{jrGI+l70`ClJgxxj1U8;M-L!w=!?C|qD zbp1oO9L|s1GUuxHEjSTTO-k z`QD7@4bM$;4CEx{e3flf^C?+Ru-nhKlN<01Cswn`#N^_lf|fz8Vb0R^(Z|md?Ckh< z!FzgEB0E7f^&(Bm7Os81s4UFY;@r6l3r3nTllf)}C+PT7ApdlF+V(l5zRa-cqdaNx zXH$+8jI?8+jH$BgxEQgTDW|I9J<|{DGJYdgBki+Y z+CcK{{h4}Rv2>&zh1X2H-kWrR_%RTTZ%*s`>F-XhOX|y6OAT)tX+|^Wn@Mdx_Mcad zZb;>@ZA12(bRSyzb@2I^StISpu6(=8Q(}m(2u_bqmp!v-ul0*3UFTdP9i|Y>&=ktb zSc_kz7j(j`S<}R8Qoc8oZS?%rvEV6h+w<>O!KFP8S%E*FATTo;?;N=LgRki1$gvO1 z{oiF1%pCcZ+{9(~5W1Y!CFvwVX|AD$A3dyc(3*G1KcX}=UuUzGO$cTVsVs=0 zI~RU&_rC{65^hfOoB27p?)49P9`6g8(f#@j!3@O){gtNp(_VsFij*G-O4!o%)K}%P zwPM(*c7hr2W_d3GnR((@@BgXgZL#7!Q#H89VVG4CAWZB9p+@d6?5-7blA2g1!+zCV4|@7Q+RP$N&L4^`}$1T$~G+11_W zh#w484Eg5SKHw+6Bx~He*cTmE1Tz%(yyNdj5lZ8HNQ#xx&`ii)c+38D$(kgB*P^)z1SWdlY0=KP<{1 zn4v}Ffv83x!EBfD+ROX<&$EJNHF-o<5Ax36M>Himw+r0<#tNDJ({oR6m!I7n@i?JS z_1c%Kv0lW1g6=L?Ut$HJIAt&U2tNe{8&!qyh$iO?#9?`ee{;Wk)=eXr>Bby9U6sGb zxv1}aM|}H*96~M8XzpL(@rzi?BD<`CEOX`ym3yQ29W*mfBiNypJmKlBG@@Os_{ywx zqOX+BW?blM_?k;d9LT&O!25L4m>y!-lb(BHe@zbMRqOsa84l$U#A)EfH?tRg89*$q zsaV)A#dnX%v4BuZ zRaK6i=D^t8>1|2|c5*SipQ%RlK@`81&xXy2Ny-vyQ}uPOi`dbPN`0PMp1hkGVTPhZ z=H?^agwmu{(;wJ8yI~kq&3wOJ%_5dyh7QvkUsf9uyP!O3=i99*SN7z8>IqS#wGg|& zgI~+&Wk-$^?b^rtN{&);m=|SpeCL{|9$pSKqMAGTcEuH9RH9wrq`H;K$)cHE)7CC$ zQA~LLN7$ieWQN}OLL;evq`=^$_rMGz(H8p)WA+{++C>dD6bAe0l$z(f|GGF;gpe%K#`EnKNn9ZgX}LQ6 zQp32Pzr}rS8@7o#5uy=Im2dXwmSh>RxI+8!n_jJGoK13d9CNTPX*Hpmv-ozh2F1j$ zqexTFxt8q6Uw-@jH~BfO z_;#kzpSKY@Z~kI8r;zpTtDEFrwEQ@r_MA{0FUs(?gx=}@`IF=kew2~st#AL=?gzvxsWOk1Z+pHOeXo9`8AF(FrjurhSCW6C%H6nMO+OxnDh2IQ)43NkDRiVA z9xAyzG{}VFl)Iit&6CqQbuIVfBX!%{-jQY^3jE?KDxc;PM@qJ^y$W-)zx)!>O(B<$ zW+#udqYd-zW`*vULMTo<_~^vVn;aD<4o%FcPIcnNx_{eJD2s0vYN_y_Ki=SdJxxk{ zl(dh=1G}p#Pd}X%{iC9)qb?KNIW-r&MM?U!G9>*>F@ zC!)!>JNzLFe+^79RCY-@*D3iPfBcs9vM6o?|4&hjFw^3jopdO7A>7?2w=oZMXA}>} zyTzy-4GpCe%--|7N#_+$A}!3hdxc;o5))Kqw=yh`{KJK2(Ys;c zNHcOP-^`+G`hPy2)P46x)q}(3o2qvCEpAIrP#kF|lESxR?l8a``hSK>`Sf`)W73L; z%r?%c64Iz6-W{?_uv$h;Pq#>Nec~-!6u#?SGO4~;Uof&b1}|EWNIM(y@D~mLDbDYy zW1{-Gb;=>rw<>Pf`Z06{{KQiYnbm>iMpZgtgp=NmKCr`H^C4Qj{ipnIRp+?Z_r!Exk%?U?(k^WfV zYbFm}UU^d#ahCN(;9GnmuH5>;L7cPC8MtNc1@)@@PQ=AsZUMKaOk5RpssnMR&VJx~ zD&}6!crgZXb|pMSo99TXTvKCs264vuP|)vtck#!R6DEk$W#HkzJZIIc1R;m{SFTwdIg|@6DRwO)RoaZGqcrkv;Bc!Kk3)=Z)+55JxJQV6k%(X4x-`gUp zw)e^mq-Vc82i$j}*szdP58@10L3{eHGICkSOvnDaEI{vHH*eb44ZH-3f7uxW4?K5L zx!k)OVUdhx;OBh0ci5KT@xYv^4*a~PRKvsS0Hmkxg@<7BBGbo|kINCm+%_Kcmo<(0 zYzj6bPM!!4TjX6mp1p;-nG~mw+Lh|p2BqBewMes0OUe2jqYv^itJX4l5fd19vmQVhvXoVsPzgi3Y zwc4q~x7&G}eBMPqBndo!a;5QQ(_@Hpa(sYSpWbZrWdCc#88>W!*YwG>TMlDA@2_V8 zum3taUM%hj(zDuT0dM+EvfLN82ywc29`H{F(-OD#;Q2zk@ELf!&&76b5!ySEgsKGX z(|#sCWN4Zq@3pxqtdw=2A9vzn z!1wlz$PcsLTEKq^Ejwz6#|i!F7vK}MJKR3|>LWe12Oi$dSE*UAlTKmznw+zP((iM2!)-*YKgpvxR{6#@MX~hchBv;j`al^z>UsMJ}W;?NeYBU@4=96oEbb5Fh9q$qyt_N-{ zZ&Z^z#}skOI(T?1-?pgZwMASU;zBp!q2&DCqNf^z9A_dfKA8!AoEm6BKGiyib7#~6 zKR8ESA@3HBKa^D!z>l4aTabAj$4Sn{THqckS3`|2uS0(54Y0oC`@Pn*Ti87g*Jtu3 z(EIfjuFdyZf;j5~JlvKau*xr7K`$F|riq|mLhPcGY1X)&EH4iDiIDkxGH5jw>DjX% z0FTTuc+jL?4QMP0iIGT zajbhOj{nqK!N8xEx9ey5Z9{&jIj}C|XZ5!_#&_UxLj9Bo`sdg4Qljjc(F5SW$|m)Jgfw1%$s6Dy z?ED(d(P?2^d8Fr9{{(&gW9PW5qeL(#3)-!*)y75k=wZz5BSHWEZC%{59gc`oQy~85 zcLZOmjgG=`l6(vv%FOSr?A3PixPtWb1uEdD-z;|Qep(&kta3qo`@xc`J}?^X&qy4> zN0;({xU1RhD{;eq@`}OFZ|2O@j6F4o3!jDh6i}lb`rPwRAWq$>`Bz^c@@C(UBWH84 zpJUKI1>)Rq^tN_?#6>NCfu89g`hJTHjx(HGn0EzImpw;wvoevMA`k0Yfy{whdn-Pm z9TO^?x(03x)h2 z^jMz7{&nFY&Vt1zGGFG zyY1N0vBnm0R=z9fS45>RSv4Ey4?-OK`T@wjDWwSs?Bn~l`^EWEz3zs3PKGu&lv_#OKv_d_01u$gmyH+kV0n>-MO~dm-R9w(6_6~b39>)E|ejcWQ{*duvrXC&7Utz6r zzKY%aKzh!WbHM#Xw2dk{u^-A5$V&_SE2ye54LJU==fV6fIH%%p>XJ$n@n%?L&s%k{|5OCd_n0*hR}0E++g|igJB{?h zM_+>eP2oe))^;4vxu&qL6;#b>Xp8^GJI&=?>?A?^H@|faSCd6MGZOt?5BOFb-g%7@qQ$}E zkn4~M{Hvn4wWh;Mq!(r01Ky{rH(U7`UI*FA;=ub&HR3{Ke2`wq67r>jfrtHbCKTiK zh%v+buf9-{9o;l_iUrbBFDd{Z-8KJ5V+YO$$ctfJD^!T_*j{-T=NkQj2XhO?9z}k*X3%bh+K+0M z`ugKMlU5|~uh&Mhb4o17dhvADIH+%Uv9LGrBkXIL4tK4+b zkHYH(NBax-u~~OQX;;TLT>m%Hz;{`h7=+#mMO;)u(EhtJ``&5JszRJ~4dQK~{rXpZ zQv-R&HN1=2e;xen|L8dB>K;7b#j84iyByqPo#p>$+~%kPck>N9;P-Me@r|mz zNs`vI*R6;%{2-1Mdc^1ZB=!#?&RqxVNa3l?xw022xmZtyIA0hbbB_6?eh%UyzjC46 z^H2KJX@6eAVT)}B9!%SKMa9<*>6!XIz{6MEk$jha8F7j@#FN5sZ^<~{RXG0_in;^( zXyJNc3qQPGa1ZGLk1h||PKz;n7%F70&2c_7&i_PK>Gzhr1!b;td}F){&t?rVe0$v4H3A92e; z-~|TS+O)f%K{ut$Nuc($*osl#Q&Ia?raFRTcwQ@(o;&uiK@ zU(i=3thjK^L>B3}R`-F|&Fx$9!Kx2&rh~wL! zhZGJa?VLHa(h70Po@1aNrUtaEiN|q|ey#K`FCx`7hrQRu@sr{Vd0-J))s|W^5uMtS zIIXacE~3~Dsyq{tK>oS+AkG(wiPRfD|7M3c=Q#)bi{FyiWZ{m><n0Ha{!T2d!{3GBz z^}Gk-;*Pt(&yxPwZc+gQak4D*W6`p;&n)%rRwB;&A>c-C{o2vl?-6GogE(1a9QD>w zB@C}$LRY4N|Fty=9?hNyaJlby1K(Wkv1Hbp#fZ~Z!?-HiQ5^L~%kwkhLhlSg?_i+Q zGybC_F4t{7a3`sq#Ws)sgJ}!9|*%@qLjU?SOlz1`S*d z#OnxkQZ;bTx1nW49{9fK;bh>a!aILT54=GBsrO(%TjalPv#j)|TEtncFyD*Lx9Dr_ zh{W-q6%YHkqLA-1<8IAdi0^B31^B;cZTNnAwI|~AFo@elVJ4GzZC1L1%MIxV{iUF< z)zxEPBhEbq`+}laG2i6@b?-1gI2QB?hKFbA+{g2mYT7B_Tbkt0k??$E4hin-fjYVQ zrQSp2htib_`ix6!SCuT?kGRNB7Vy`q6CKLN;c-IModrD4aMWkknm_y8ZL5J7dhNY3 zJ@wCeYWZBiYwNT}-Nxl|nMuHlFDa_|NKHrOl49Vzv8ZbPcK^}Fcs=4Ag!ooebtjy1}*p2k$6N3I~pK>kPILQ@pT823IX`g?w&UD=o#6_0CKE0@O zEbF+4##_YczH*@N{Z4*$ryIuy?y0T7`w#BgQJ8Ta=~)-dfDhFjxSwB&^DEBc9^gNf zMol}C|7RT+d+?VRlODZIt5?J0pPK-AW--}}vy^U&^LgR(+MuU;%6Tyduv*^o3imJhGvr0Z(%Uk&u6h3v`Qi8% zfd4Uy`kpm$IKFY_9R@CM9GTbUg7Y^{iWqQ(`5KOnyL6Es?%pQgie@Pf8!FNer^a0d zuI`}yd!rdX{}*?HxKunlZ6ILxUM-{-`6XzdxeMBMXFjK3KRqxXi|0u+JzBEO1#w0O zOzbsEU=r z@tiRZ;&$;W)}q(y?K_bl_TyEcUw21k^6V9V#`8XykHzbre+X4oSzii>GbGro^~8@b}r19Vz+hG^GR26KEU;cyrTG+ z)oSN)YPj9lGhp2>K5j9#>bJx<$VJm%e(eM?;RG5@p<_!Wg87EcEi5$75U z=GS%hSS^cLzYr(?{sQ`>al=g?R{h4@z7u#V#l?3({0!n8o0-7x^zwdn{UwF{Cnf+- z*SX}iMG~J+QX(MU7H2s3DtEkGn2fUrRed;J}9B&yXVcjY2 z?p8kX48QF`;z~P${>!lyDo58X$MsAXjL&a1OFPzR<9H(CWeNJeZ%5w0@x=L_`1VJC zc?n&Aq3HaaH^>h)R~a~G)R<4P891J^{9(N-8Kba_dSn$IhvKR?K`-y?<{nas^G~{H zlz@lE&WuvQ^MVqW0bC*6O+u{e0xFm6{13m{wx(i2JK_|LMW9!V)SLF;z9r(^D=-dA zv{Qe^%nrx>!n{)q`en-8$Q9Fyke-naS*pJ+Jj7F#*RPQQJz;+e!b>tr)=LnUNp?+{yjws4#gWT<+Kl zz)yU%k{xQo<#JPDpI&lG_e;@(Rd^r7Eo=n6@7s7~UB^|(4|fZU!;-+P&1>j$brGkf zwSqoql1WwcyA6nQWITbNC-2Sna?3=VI!FZ`Tz%=4?n@!8e+>CpNr-BJ>6`m_KTFeJ z5Bdv(v{>_NJFuTc4B%HAYbQUlAB#A5vMccTt0%RVRN{7^1wejYa=lh*|LQ*<3ud?q z^a<7)?J!T?3v;8FS zxALzm)32<)IX&G?J zyJ#UJE4+`Up0EHe^zK$v#qV9HToD~OXD(%~nqBm@9Q&up-|CcDo&-NAagFSLKD z)LDh6(wA7c{!7@^=2^%-&2nGe8cyH!khV1Um_nC~FZ zDb?LN|FlA7H_}sS5Qj^3W2Xd9GG`;s*qRA`mbNa@KAIbeIN3nJSNK^(`aQXVxajs# zpkG-unwckppVOdE`vrWJ+7sXX?Prl*Tm|BG>H1=$_)R9beT1^bLBC;+amjbucciEK zcmUs6({#;lY6Py2(QV*ntLEN2z_^Jx&F`Rq_a+3KmB#UztS#_w_T#vMYC3|ZRcdXnMz+Dd97wvzE&tXXSlz{tAJI%BWI*sd-c16I4<|eN(Sd2JleJb#? z!FyjiipXKTChTiUBVHU^ou=S`xbQ4kze=yJe(Ss}d<^2Ws!;F~Yv1avwz?T{?lD0- zyeK}t^qC&ka|R&~Da}?>opNEkInq;4z`9WSvVV?>y?Gq=Uy=>}i(KyKY59FXoM{5_ zzqD$++8nmiLBz>pVnF{PE9GR3xfkNx<^tfYDl6NAEpR@-OehE5CTr)b(}DN(?56?1 zdwO0fm&ny)|9zRj2VRZ&Uh8-bafV1N@L$WUHr%#gAWjwT{>#fKhO;KR&BOZw_RX)r znWly_gYMtJ^^}5jxlCsM>hT9DQxO-s2IIC&uJLWrof^E)rO=*$9|c)$g+3p=Z{_UH z1gt@;FvY)P%df2~M2IR?Q2D`I+UoKKWemKG;@Ut>w{%`qZIIp0uTLXNR@{OpqEAV9=N3z_3QQ+Vbs;HO&iMzx*JzY0uSuW z?QOk?;|#Mk2Kc3GuDeq&Uq^b1s~_-at8gRpBs`vJ6h+{%Teq;@1*jlBcX==H>ot}S zE_mX&!3u!*R+e!?OH%UsBOFye_kZ1>?VP_e>vsAH04sWCi1)boM!O2{OJfVS{6T{r~+p z-@n@=GHzE?*#G|Le=YF87WiKa{I3Q6*8;rPH2EjC{A_Ll{~sblZ&qFqv_x!#tFcMlW9{9WrSRrN;NNwD~K*#oJ>*9vtlJWIx; zE;iR%p!B3WKU#I9nUFu<>~puqEy8;bd#d_!d-ol0)9#4dwJ^e;mxcZNc7_mIh39UT zWf9EWR|l1ogEUAYfs^g@#xqupG^4xmOMB7a@}E~N1GRr&sSfybYFEyVB?_<2c*)Mc z#fhNgq@L6KhEUw$*u8bl2cOUCVYH{~G+(#lE35&y@iimp$v~FQ3FEgj~GO4GnMS{}&QjLE~?dl5owBJ4vnjUfBny9Cb|Q7ie2Euy_Wb;fc=Rs;0LFv`=9@l#NVd^zdd`YboLy4SjlbG z6L8n>O62)?QzUc?4igh@H;XWbUra>xq#6W+{t@GW*Q1sEsYD_PU4YF)LdJ~aoonCD zLY$jy3Hq!fdO_!eH4$fwG6(+RqSSrB6@;?&zh!0QfcXS{rf4@qg>FM&5$WS5k=UqpJ&g@?f3Pp+UC zX5%EDzWkPeoA0>vO&Zr~r{nzI$;WuNY5U1~T0p8z# zYF3LIJ`AO{_W}PN6u0<@Gv3ruf59P0!ce#9$;eTokstQG$$#~UBDR@7LUxEEPO^a{ zK9TX{ZiRecH{z6#BG7Y`CxnTAu|%B3SqPk)cgAv>A|31R#{rkT{ZakaX#8U{v)TZ- zl<|#$J9>|ho;yAUxa=fm!{Mqwo4WK@z{lOleP`@pg7oBv4#21E**GK3eGlSvCd|`B zmHO3{#-B^De{DGQOq@Zh4Mip6gN z{esuWKHZ(U5&PMG9=PH7&z`$Jd_tVIU(i0Q=NFmGTJ{BT<~n!KuMR)Dz3uO2wSO6K zi?&oLjqF^cXNk)J-$_5q@^TqKT*NQ|_>po$uNU|5k3;lXD}f)A?eqwC=B;kLODr`K z`0=RIyB1sgIn?eJ1@3P1Kk3*F1jlgftuX*_`&;{u^ukHfB*ObW2 z*Q~*Q-i-nNI9Vs*eDo{CX}LDQGlcxdKhRCa`m>*azo=PmD?V!h)>p$r28nrAUvzW_ zc`G9CBF}_Fki>%HJC}R>n1MLO6XITC#Veg>ZWiW<)8{_||E>Cu*X93tiH^Pm;!Q{h+o3>VI=$h^^+v3pJgc8gb#g$7Zn3%E?ai>VGf>OtV7W6Nm6|dueO`<@*e)R zLLc;_;<$4Ax&siVxy}bZ`eo{@+#cNiluj$)a#wW1PU+%xQ@GRv_~K#v52uUp;WZ^N z1Nc(o#*(L}ULyaTHt64^6^b_~JNKgugT%V?4D@Tp_q#;UHX*%;F%9@yR-yei16)t) zTUdXS)}CLzdh3!Vq!$W-!>lBewQ`uJQS!f4-T$*CCBRg>Y8He409~rQ_V__7F^pr7z`*JVK(DXZx>%+ar2E7Mq@%q>s zZAdS68xB2_ymeLT&u(`>oGbGU^udds$;X8yAuhZ`P;TTl=a~T$;}EB-+Jipj%!~aj z-LZ&^EcOI`YwES1KOK4yC-+_jey7KT@i7UH2bLiJNqVZoToafeiS)D~!MM$@SafXH z5>H&N@HOyLv_er{)o(v8*I=`NUorhyWpo*FYOA2!k|vk>+f6v1;j|0dt-R?{sZ!!i z>_150zd<7+Jg?3UaZ0e@z8X0y#-&ejJCNmNq1^UYF$-#XXW?=~)&lR!bz(KH!|`0~ z0pyKI{cRIUM`wj&|9fD4N&5LN?r8A*yNEM(wS%8wg|(mKCr(A2fZtU7)>_#-{XM*;LRmD7t=d+@kr{y+BqJg(;L{r`aX*xtL^lcYg&G-wVXp;D}>9uC;RQkNy4qec$&VXFne2oX2_g zTCcU<>%G>suC?BKxDD|qV;0?3viu}I^yfM~1pVByS*0H~`QUmZIl$-7AE3+=#d!$f z8st$K<_)t(f(LM(Mt(2^dh2~c6Tfuh_`va00=~?5f(*_48}g^kG6ZfLDR8@J3ZB=5 zgKvPZ-E~nSy#c@3g>!}19w(V^Li0rMzKP%rhs7Cg@j9VdVYvU9dA$B{&z5gB{?&!+ z6~#^qV-nADEAE&gPCB&}cw9Ge>BN_#hZLhPZh$86GnZP=yg5C- z?wFnje(vY&=VC{3p2MK^15dS#6iyby{Xm(}1N<^`tzGR57WV%D@g(E2Sn!#m92vyv zW%;1bl$tDRvUYsDDL3%Aeds&;$xNhYTzmyQd*!|S7VT!lNf+~gU%h^Q*Ex$1h|~H6 zfEQj_6Gym##|g!3AMl$dyB4>4bCI5$aRPXS+4^5$a`--yiy+=+Jh>_Dn#IKH1#uS7 zr$J-pGm~w_xLzV}zP})K7{+vr=T}*>;NMg#njo2o$20q4Jn)vEOC4^|ah#{PO#|Lm zU)Q2}?iliC);9xxlg2VUT0Nc@1!Mqk7x-4bRT$4}!j57dzb_kCoHIWD#UT&Oc-LAU zC-hJS`E%rX^Qfma^<~lGtBA8!{Iwa$_*|VRnrOb&r+ftSR%P&Uww-=si^ny@DWZpgyDr$J z67A%MIQt#1|6NTTgdRKNcuq2hbC1lelaCBco{O(bU_RuxncH&+iR5GWp)9uu##N@f z_Rit8p1A$YRw1a@M>BR!n)p)woo;BjMHMf9A$sM1wzJ49z3=!V_jfvd6e5zwC)^jI%3 zVToVQSsZU^=BGfPHZU~1@9K4=CvNApC%xY0;ftLI5U1zz`X@8qs98Wy8F5;qCHQ0o z%8B|56e2D}*8rZ~8-M@#+!(|;OL*erEnu z!k&xlJBYK|`apm4MwPTNgN8V>H5Yi-#p zVMppE#7SYWzGrq{5D+)%#p?y<&0c6vpQ!d>t#mrl(}N!X@9zsZr6afkaTfg*@PS$D zlYWHaxJ2>V1bp!4jPR1T50IXgS_1sbq40oD%r5LRU;+Hk({$S={anP!O#^>}QaFFeQh3xXowwx^(o^c7KeLpAu87t@`hz&bIAdoebkD zOL_QFQ`*oyq$hbNgI#X48y|hd`%rVh)!3y)j!;qd*(hFR~Z_b3IiqD8MQ!fLbXrSZt^K%2@424AClXjXZN-fhxoD^69 zTtO@R3i+im;?y819#61LjQX}4`|Q64Tq)80w(R(u5jkrh-e#LhHA~Pkxkyj68>JnTp`_X>jdk-sIXdvV9L(78v zBs*}Y-}6-cM&v_U+6MZdd@BvLV0?d>mO;P|PTM^%d2%_vF6wsRA(!Jszu$d`I3<<> zJhJMQc~&ES{=zvl2>jUYTZ`#B?MP2>gneIj?2%R47sBy554EBO^zrkjPFy55K2GX* z{dOil@{iatDct_W;-F8SeD>}>;~K+eD@f)q z&mqlk*1oYh5OL1I7~r%h8NCC-czn_-p`UXEzwdpziHp}|W~nRaC%&6Du88^pQ#e?Tv{t>BQ&&3ME~{%~J%rV2hd^Fxn_c?{%HIqHuFXUvpHLYzIF z3O-ulYAXkQa6fR&4glBAfA*LfZHx58>wAuEdiWD!{!7HE2X=wpw&R7Vy3#JJ z4~6wBXVtN5aRD`Wzswfw0lmW+p}NJJaQ;m0-3i=D`;~0elby(ir~>mS$LWn#^oAWc z&*#47-51vzT1#%58{&GU{J>|6``%ZJeDQfTw{R(s|FV95GieXf3&z7aSk8_J&1sWe z@VPgKz5w(d-G?QL)v-Tg0k8i(ce#Jxu(B1`8+;!0UhfvXuO9yp4r84c@ICd1`!^lO z_lw*(1l-Si-ur=t(~%EX%LsT-==x9Jmzy9?_j3Rqvi`cLnkpV|Ox}k%bB?xDT3G!` zM|x5}u+n`ufXSB%;663dF(mSFwm(E z=?QD*0e|wL^TcE;JkA*;UjMY%>Kt&+#N(Xl0na0H+UNOXZS?cT?ODc~M{m0va~z(A zBF^dT2mkK$f)5`@K4N_UZ+!Mi+8uiEbq3-LWnTY$p0X=OEbR*BLa^@S3@hsV{x}=w z8|*NMtGT4=N!@1GasEvHxZ!WTxs=u$`KPn+c?;Pd;(4xMz6#N#*ctf~4g5hbOxgHa z|Mz6X1tnp<$mM3um5lqQia7lR8T8zd2$5TVaR0C#E&wiO<<~9b?2q)!p3}e;?i+=@ zYtTiURS^$-+OO%>ozz>1Q+OYi$elTNDvjff_ZNh-XFxyOFCtIpT?EpztKj@Rcix7a3DdIHMN5D6wKAvqi?HlG_VZWBU`7yPsq^%5dJ1fw;rU!fs z@2*CiGG*ak{`bFQ+~Cy*SM>M){`FrE{MQ5j^}v5U@Lv!7*8~6c!2b_=fd7*Sw_6hC z=s&-CPB>Y#^5tEx(S6-NpD2hOYogYHMM3=K`uc{CWd$!yIw-Q0-4^Fr^lv$e{8%|n zPjCF2B4b(Z7?J0YTz^H*iwwJESGj3I4)fKHe~Xc$#)>Tu=>I>Tb-8gj<40K`=}E1$ z9J`LFKzR)W!_3A&rMTYaeyaF!a~ z1pIS#;bYY$boC~|$3b${Wa`!l_xR%UnW4Ye42 zb%=BB!S+#YnxbZs7zw!|^;~9G%CEdfvT?}jb-#@6C zylJSMc&-BZFgF_jx9IS!yEYv^=H=|M2EJUzajxywW?XOaYT)+so_)P3bq;ZcK5S>z z9FvV&Z*IWX#deqtdMEuYHgg6?2f*lyQ=kgmrTm9Tib*u)<#T~=32JFKcvguxeTfBd zcjw1hn=a#HB-U!!_Nnc)?>j3q0dFgr-SC)HZJ&JNF1g;P$cI~Z8GHhpDoeP@sV1gckRo;D|lQH zzuJJlFnjT;=ym&$p0)T1@FG2}J>R8_aJ`CfEUk9GW=f}#3_eb#^S&EO?cw=FC%-?z z+cKgbuOFVBl%3~$b2;*%x52TQTK(;SMC}>)z6dhl7**|+^Ch`h10kfRT%tjHeoj0l z@_45<;?!W+ZmRtb-?>JFi;p*$U2x2=&QV|gBGv{UW0M?Uys2|*{Ow9Q=OG_L9Q1?w zBwtcJt6CXx?!sAr>s6ohki(8}2tu6M567SC;tBrk&+GAV1+8HV=q2APi+J5EMtb&k zcr2qXb$yF(M$LD`={tUbUg_tmM^YmAIDvf(?ytJ)p@gAmD?EQ0=IWr=8ESO%a@~o1 z7_RVGM%`p-zrLSb4(93Upf`0E4}0#(L0oVHuRV*?jy!vKr5bVO%k`kQy)}W{xo!dC zoRbHDuTi~yNW6I(;^e-iz&B>B`Fifdal|Q?;5bU%X=B;&B!M4@)AD)!?{d&wDY#4> z^R7nlasQ-3k&ws76?79p9v?Yh)OZHpFV>RXzz+y}`79d$4oPA!#7XtgAG@opEDs=m z#w`iZM<`4a)K$2RIJXLpnbo5MA2!FiwjfU6eFvs`^jBFGH(N!-S+)?!)KA!{74H3H zkNve$z&}~qIxEQh0OIuBzky$w6!}_q7aq?-w|M=QUH&q@{Ke?9Jo;j{%mIB)=7@y$ z3`@kB3)+ES7i*0YyM)ITDHx6|)yoVR3-VUuc+Qw{0rVC1q>aA^laLSj8^lTV`}JZk zlC4q^7ozlnzN)59=4_f7;=;e+afEvHhhs6aL=VL2BBG$Lxp^{gj`(HFA2hhKVWov|Kzq@oEu{&$J3S?oxlN zSQT5dB>?HUg<_!Z>YDe;CQ$@&){ig1zwEA`R4t!^+j$(0!PI}W=x?4#!f{n7RUY(z zx__G=E5-AjY_IW`YY>a~iQZ1c$H@XEunua_PHNN@{dtf4nJ=e;o@JRg`k|YXh*LbS z0O#b^I%oVg$NCOfH#H`BCJ{#x@c5@bas<6-tg&PV>O@r6j;4vDFX8uZ{}#|tj1a4ycTNR!PY!VXAI;bOTwWkf`6>&1?$b}*xv!Xr zv#a4Tk%ocTy^g3E`w^$-L%yLg@7%Y5WTlIUv)=9jpLw;>DW!pD5GOxZ13v$-yy8Kl zHpB&`W&yXEy)n&K?lo%lZg-a*_Rg*2!) z;A!Zc$BVuo&IpF}MI-pI-5HggJ&4n^c z`)pm{hekX;i7R>I`Bd>W(Tklp&Ik{}I<9fHDB39^9mhS6FdVmQB%YQtZs>i5{JE!m z!T++Y&t?&=4VYUO@%W*L7N=>rpNWI^z^_}JrzuP_M0$!LuiviQbIdnXTtJ-t8{)sl z^%U2|9V&Yfr$<4&(kNyhbCl`PLR{d}8}P4^XWKva#OoT{CLeeMJ=*&HgeIitcEICh zjW>yfx8G~;LYy<{59m8ZbNy~C#Q7>`A{@_aygh%J!|XIgdiG<=U%jSq%hY#QzX>Bw zH35H3k(HL2uRC!5L*I7;^rER3)#Y7q`#H66A2lZnM4H8~@5cU`5dSqb;|_amEoUJv zaK|5fblWD^e4UboIL+u4@R^PDYqMj=_Yrw8-Zb?Rb46koNg+MKFAnqubHoK~X89n_ z2qFQWpR@c#y2Wh7S^MDesisle965UP99%DRGw7`)%{J#`U{1GE0lq?oELJ))AL*Hk zx`3}MYI=IvHwST!3e0OwM~^$3E|hs={|^D6ch;$^IS}TEeH`6*{8P7mMZO>6l;nHB zeJm#E+9*{aPG8UsJm7$U-PKkn#JMetfbU};kCGS1?WcId+t4%*e0riM5{btlV=C{y zA1NcQk(0sWhanXXKB3iXUmh*N>l7t$Ch(|;e4l4S`0X34eGm^dW!{DSe&KEE6IK60lX27Pi()587~ckH7G`KRU;|D*AZ)DMU=LN|gw zJKO2v{+!LKpl@7u z?Q4ToB;v$wW8lrK3)~>5LB!cQkl$*)J|X+OX&C24tUbp;-@!7wuEWScdYS{Qcbc8c zo;;`?If^*T7uI*pcczofRZ|=g7j%KRq&e_;=ELB0{8(G~Yb5x88lErps1L^t+8Gz% zpO=2kxjFvbT$IBQe>A^H`rlp@UWw~1xCHudf{RBaeqBzIPT z{^zfdx-WHMNY9xU5B%3>$-3^^@i=J)`w`9G^;g#j7#Cpw`MkI^5-+q`WWONdgov=e zK3Y`$G{S;79LFfD;eKf`K5DwIEX47IxOWKjLieh5Ly{wq4_h_}ICJ1|dYL&M55yi> z;3A4?F<-aJBE9ejT^_&ocIZJiUax75(0(n^6WUShzrI9zava<*EpgI{SDg#Uh%-X; zz(>YPAV6)7DB^S*h$mX|EJf$X7y2&_?;@m9+ zy*AO@L$9|9=>^Qpfa@lS-AVW|em-C^0r>Q#7S}W0d_#KTG(q6=in}Q12XX#D*a-7Z z%g8fi5ADlWq-Xu=1ic9-qR3|aT!p*9j>m7k-m1D5_a_5x*NB!`nqhWo`FKBsOauL* zZSH!B>+rse!uwhaE%U|U=af=+pn91Nu)b?qn4YU%?T+IEO@1x-ShycJXg2=wBL`d@AH-*^<=hq53|HZO3SsR} z(66}6DYtCs#r@+7`JvXz!epm7%>cyd$IU^%ep6C#UrH;kH{v>QhxY*u(H`d!r_JX1 z`^tn>n{dY8#!}J(dOxT02e!rGaYEw#c9@p`#|X!`Dh=dAIUx!9!$ZAySD4|vm-aFN zctm8%;dl!Nq-V=Q{-AYqfzOchv4@xs^6EYJIzggK%nETv9ma zT4}O!v>{cT?=ke0q2A12J!hvqp<{m$h=*ENAD@l#U-B0FmqWbOx@G_8#z9Lwekfbt zflu|IZpT4+ye@Mh$iN>S^mQPr;OnBjRRLZr=-6gKa!3BG7Yl$tK4AMY(`XuQk1^yM zT6Kf#4$RfZ`v}&X8qhy~xZNqMsSN1}34T1@pWC=QuLyBL*CgN#zMIpip+69(*g+nm z_0mczbLb@=Ka>r*pnvmm{iZ3@6-ZCBgY{RdL-Rz${8xBAB`%c%eb+*j;Fq_)V|}p! z@ZQ$^?S!1oh?A6HLTdFrQMM7h{1I__p*ZOK;|^=)EW&YvG7RUIS_8`OitD^^y^IK6 zocyZ&U|Rh|3FIRvvK)LyR=K@DVWosPdm-a5*Cv-mT`75|j5uvw7mxQ1{26ZBiS_m{ zueG`BWcpj#c)qh3#h@2!S1b}*?2Gi=j3>Y)*IqGBEyZ~?MHTin+S2VJb5suF{R=$> z_AlCUlF0%R%jJ-dAZHTzOliAulDbU?aatRUbM0x%lhu_Z#^Z+Z9MJ0uPfC8;8IJVC z1-y37jTR(M&6t2VLjl%hZNo`g>+kI|LY%7#{i$uly`vR41Mlle6TgDL+1>8O2j2KT z(pN|FarDotflgom5qP_M)`4qT?)Y6qDH?DCww2`q($3-dzknXACkcB zXMe~B?zyqhD>ek*ceY|Zk6)=M@W{paDn|g~p0@WP#blFbc-)eNc=u&j+T}}~A8`J| zv4S|Gy{~YSc8AXR{$(lediS+D+Y7wF<6K}-HPjn;Ln^s{R|aZ77sA_!c3{bXpzfAB z#M#Gr<3A`=@N~s&oNo{hUIU+yoc3);X?T5P*zv|~)Yr(UU$+a9kDxPe{70`0C_eDW z6>;I#6!1A7YxO!k1J7Ts55!6BSWh#lttohZ3A>ep{&c{KAnwsU*k?Da``YKu4yUkd z&mqofXaapw3|n@k-)h9k#c*z^om#PfQ)%}*#JSbH`FJ@oGPl+n$9YB$>Qz>DV@mDg4!ATip9DzUSFm5>DoPzbg?gM}Ng>pe;%3Z{1`ul-5tyoD}@b}{*6#>9I^)53hKk)vY zoSx6)$w{)+Hgk{<`48;Bv^(F4gibTOf&FzqfWEi++q60TxL&qj8}Pob)+L8%c>l;w zf_=31XN&&aM0=e7a6_#@|GCU?bL5qH1pdt<>0R_$Kg3y9(!hrabw;fEB*f|O zA&%*glFJ+=Y3+#9rpx`+>yU2UN}IcGCE}DR{=lgkU6nQQcwTU*us_w|vJcB!``~ql zzVIyQCncQRn0{d?uJah##Z}eiOVmLUSRMX)H^d*)=K(MKdv`J6Zow2t0~P3@P3VPXAO^6gm9g5 zvyqw(1!09s5tL^<8iXar!36_jGm)Udny* z1dj(!53HLyo@)sJ__8Ab&Y7p z!S{ke*oZ5%dQm1(Kw8 z;{70DQx))V&)&zICgJsq!iIcFCu-xbnbVackPj&s&NFq6Ro;ueH+L7}LRnYA=lGE6 zB2nET#Az|G{_31G@t&J{tqA)ZhCEy+`KRSt|NY+)XBaF1pR|uj7E|xxcCx3ydZAOS ze|cT8atPAX@AIy=^3PGfMMoSFr#*WFKKHqg#G4Wf5GS`R2VRw>l@oEp6mibsc;F9i z5-#u1P{TeYKY-Ubg_u#@wq|O!V7&^Kj;nmr`3Zx{z=k^Q-*l`->7J& zFP?|j5q544=wB+xZG4?EzHWL(18+SS+}LD<*AW(533$hLk@Gj7wBdSf|Kbsy?m4>J zjk>jnQv*N!{ew==9HLF48_tuNg(rXyN_E93J8naIqW^B-U;0?$2kA=KzYg~4y2PCL z{gt0^9!0x7^jEJ-D=Gdr`Op<$zoR?(U|7+P4BQ?<+;{Mi z3Gw^+kZggpJ2YNn8|52x-6 z_}kStlvNA|;Okln`w`u>lO$RSf-tAN{3{>PwHI(OS?#h8>DgX0|NcSO!FlWcZ;>^K zQ};u@q3dunZYH$?#~E(tGSIuZMNVbS%*JtBbAHhjDZxP%8>yGYj0pSp%#NEh8P>KLPyH8wLqoaBmadIQ%Kf3!zx)WD9 znIq0v{|)p9)=oIpdvqe=>}tp#bPp>2qGg|cgg9xi0`!pr+=QvYOvG6U^}vr7IX>)u zb`5c+o-FW~$;LYy7T|eA{(TGhv0CcOhvuu0og zx*<-9=kZf*h502{tq`ZHOagtXVuALw8V=%w0$49}Q(N@o)Q{r%P72oneb!w~wn7k| zM+D0r;1y3jECrqMIA_Ihc>HbK38B~TkUz2L74Z8L1Pt@~9wRQ?rv<#~X<}_HtqO6{ zj19ma7_O~2%w38&W%t>p2JHg;zgh;&Dhc$OHcEUiOrhr}(}zU;G08eZ|R?#14FJ zPk+Me&!MEFTelU*9FV9-PM^7P67h-~b^Gtd3l23R)$QCW-@wulS ziB9uCdXldjk1szpJ@8B!;tWOy@GaJ_&gGuN`54U`;_ctRkLjh33H?Up{`=Q|J@8)- z{MQ5j^}v5U@Lv!7f3*krK8T=sHEdN>R?NMlKewN^X*=f0_kn`ov9@_uXtDW{*(^*gsstKuey}Q|5r7pmg-2-Zk{| zeB~;~$||4TuRdgPfyV%tJ{BMe>}@|Al&RxbPb>KXjyQi7(bRyHk`vDf?A zdGcx6=;`f0?L^t}x~#1oe3z&EYs4zExb3#y?!@=u+7`P17NgR~s#}_n{)4ZW*`jrZ zwJ&rZxeSk-E?j!!^}od^IH#0u)q%)LvgPRO8p^M=@? zYU>WYp80PvGJ0B9La5Q^D`uHhRjuP#_j#|`FOsIj2LrxhX{ffyYkT>MZS}OTzVp-L zk=u*pg7!HNy!nbf94pqF=ct5={m(3jeR)PAB1fL!*mL?;k*3G!S>->YGGwgWg_8<9 z_{;SNke;^&*qx61)V$Fv@A6r`a_H>z${#G_NPZ_X0prxR^zuYzcRh0g}<)~=K9msCrzjx#n_YBOdJ`>V^>nu9A z@=V^p#mGm-IYCLT=|OGYUlRJ9pAI%*Q$-jwLQkZW%Pe*BacoC0-@+d zE1kcUrMh2_M)?M21zM1A7I8*KkF)+MhvKusBu*kkAcD`ZFdChjms>SNPt00jp#)`j{ zHJO1;;_Ie)6h1sW;q;lQYJAllAFEE$;XeM2Db>;cksteq&~y9lQNC814v4Ric35*#_WTdgmm!>ne~XdP0c4clb^h8&PQMyTru&(X zETcDQ{VW)j{qHTOkj82|d8tW-|Kcj$r%c)9u1x;AH~ie8rTbR=TMqxA)wVa8~@Zd8Vd=8eG1ac`OB3It-8Z-PY;Um%2~1Dl_u@qa%2>1 zzlXfW<#?Sbv{1yLcdlB%mkuw2K&>VJ$hdI@#`O zA9Cm8>YTn}!LEPnquP$uC$?rgo_D;?WSTFZs#1D2?@0Atxrb3pN5{th-aBf>STXOL z_5WwA9I`afJo~L>=Bj$@8nMS;PyAbsjLt%3$O(pgy|P1dh1ZJ3>rMVlnsr&z*V~z| z*wnG=E-c@Cg|FB)dC>v)ruljS_hLoPKRz)!tN*u^k3EI(xUZ!!GA;gn535A*ls{a3@6Z~XRKs6%13KWH2j`L`VR-B@+PJ~noI)p<{l ziEX;(q`EO(tf2nhsmy^5$TNCgL^mhpn5ApdpB@~_~O-`x5woNen1=3UcdqJPEjZ~KR z8^14#x)9FUCud5M&i59L#?8?ebJzg%St(Dd={AoL=cW;PJYV9zLggF833+gCJ~@wF z7ZN4$0ddMb-gOmFG`uqQ;`_+D{sDYSD9W^J*HCC6kZa+&+T>EZP3NZX9*uOPFY1i* zpf9UCv~9n@JnWx&6nOcg147p*C|4y=N&#<{Ml>e^L9p>nZ zO*{koXPV2m|2{Yyar#zXKR-V`Ahp#3k1NjY)1Yry`!2x3nu7IoD)84=jzvgamO`Al zMIU(EmmkNi+4#Dc9?yWk{j9Be#cXsz7=6*mync8mzTnRRT0Y_gr=_4D_%?ItS#A;H zj1)TXZ(qth<_x(Z&e7Qk{AaY4)0PO_Z`6nIykYW?bLeo@Hhf*|z}KMvQ)g?Xb9N5$ z;r1~8aw)L&OPrKY=qiHb-W%9wW})x)(UBht;+IxEnZ4`Ue@W9 zl|tzWf#dcDxYEGMO19+7@YUN3XBzFgi#T2CEbtA>c4x5La6Dnxnecdj@oK%zIIePILV-IF z+d0uIP9h)DhMPPdI=TLW?dV!P`r^!+#^bjN&buqm!g^6&y)G3}vwB~QAWmB+1p4iv zoD(nGYZ0eb!~u6dFjsAdW-8+B_Y;BdxzzJ6ZTxE$*%}*x`>$UxL;ntbenwf(t9M^t z7sD~=J@R2(gXj8Efi_t&8=o-{XH`!CpM$Rsx_|bJM4T3=4*ZaHi^Je!{5~h*Z{GNf zTsHcBe;e`r5-^+&`pEO`-{_J!Zjisp0YACgRbOu2=vHR*#rP=${LG+-dFq<6(}U4` z;2W$LQmIEOb`jo$AkJ})0{s=wu-HYf(hz4y^2SO2M_<381iY>Z+G>Knq(jly=mn1R z0wxi_YmIe#d?sRl_F{N`FZFb1{0hz3(NuHvMO&-``e$a^c3}^q5U1RP^-=1D)6h1H zvvkadAZ|;wuOfMvc zYL4^8`Zc`y*uTx%K*&Vk^yrr7M`*Ng3 zbXH!aPQmM%aPN1}PmDj*<1%mw`H&96`XxQFvgVYbR1M;^@A5qTbGwYq)FH%$+vfup zo9!4pGkQJZ3^9o3(vv$b{}FtF;|8}K=9jcghHJu+;y>8`1Kf9MrAmXG$fbB4q?p0; zV`-hw!ZFr?21rkSy$|Z0L0e>Qrx1iViy{tOpRs`I9(@6~rKlzIXIa_&eYlpe8W-0*y|Q}oRhD} z0=IWvR{AOgk2iW=4shq7##J)LxIN74Qoy&`Zh2Ogu7&(r*%yI(-o&58RK~ovk=C!^wFEby61&*ke>4e@?_~_mfoub0vfSTBE$jdSc(1L|43s!rFIzn zFD#I#h+;oMdUob&;K{SyFAe43_ge^VE&`sy@EmmR@Wy&)n2*w_p)zyZ7q%nLh=BD- zy2Q6=?upc1+@4pD!RKa<#^JfY@j6Jj3UNld@`24}w-O7ar!IB?{j)Zo{3VOmxJz^$1E|`sxv<1;P7lWTf`qnS3@1uV0i`gP@m@b9^9DH4*7K>cYTfSN|RwS%rNB zPdoB>%eBEXXDpGP?E?KTqj9@Cf3qL%H_|$YGcra@y|l?O!AQ?AfjA(uxHP-R^yGKM zN!q)>f63fswkwrzd?U%jypvgyc;5P?vIcT3>VG0mSGf&7KIzm!yGkp>8IJD2cljsu4?V&A z7a;-2t7Uw5g~l{2^+9@SD6c>L4zoL6Ou~5rC-M;Z1gscvy{MOr>m7mkDRV?_c#!@K z=bxvNhxa3FGOXh=r$e&aBGo73cCLZ>E^|T4+*SGF7sR;@@V;u9OH%_+ zKd>9!*pI#_yq_JHxm;1Un3P?IIPrHp)SKa)X1?dq5yYuMzj^%kCEWrl&Y#I&oPg(w zpRRvvHVf%VDIvhGPo5zaE2)hAZF%GB)||*+$qg(JwjzqddCsI2jnMtY{nZ15?) z=5O>d>#2&GzkDcxQ}ok=?abmMbMAJU?if4MAK z{G5f_VjLfsuj_$RLpOX?}MQrxe2bUu7lhZRf8%=zuuO?i%PN z|E!vQ@y&Ri6T+)k%H6tHx1ba0X}4fMB`aIIkU+nV*Dr={C-^9MT|X!m8IAO$J+{E7 z$LG?rwn^aj1g7x#yR}ab9@&XFrxo%p*?9)@5~S-Kv3_a==#4YppK4l%^}-I27s)QV zt=p;2#Bo5VoYx-nbJjAFMjMb1cf}0wakl@Owxo6~;>76=z_;t3IPx?M#~Jc#xG%E1 z*31v6S+M~7m`nuyo)WLYkYHiNnVAqLW&OnyP2CmtBTnmsd`ULo;M=B8FGmn(9Akq| z(A9le5zc!M=X`?kDI2!5H}uR$CBy{@u)fR2xD4B>o8s}tzOf#BjvZ_qD))~>dg2aA z;3tQ?V>++m@xwMG0Y7(2QCBO{9qB0_-vht6FTbCbb_Tb{AI{Tc(6;h5EHt4ZPXE;l{Fdyp(-Za=BFI_*BoQk9_11C+YFV?X$U4UA7lIMw}DLyROFh zDk2JLE3sa<4}4nt`zN$lCLu1oAsP6WnUQ*}*9H-1CD{P~8q=@d7J}m{}Pz$a^` z=INzvL7eje@^CpBMnKhE))3E+!}}gCIr+d<7BM=|tl!!gzsrA{2)5IYEl$&O3z2g2#NyMqfFpuQ4e)j#EP_Y+rl4Uyh zYtP%graBJacbXH7XE~$Nz9IU38Kh^G4uIauG*tfd?fZxmzwmsPE?5$$V1ciTeK;2M zwndW-EBX%Mdi`KMm0SM6EoV#oOvI@NAP&f_CV!qX)wT<9nq(9B*dH75EieCtICDDO zcR9y(>>{NYJboAi1<*UzbPdS z_^SW=D&oXFJAfZte2`ewiQ@pl;|cI!C%;FxW5bZ1TDuGQkx7JA1%`M(NSVMJhv6kv z;S$fAken!kODH{#_Bja&z@-5(3)n0Ben=XR%G?z)hZ=}c&fKQ>Bl=K(j zb(8kP9r)DA1jl_IlaLQdfCyaW`Np3bH13f^oMp-5^IUc{Q71+rPFW`k zK1P{kcaHDD^MY^=;};!Jx(@Uiy(nY-_`E8@go zUx3>rybjlT^#gHMu_W--0a|jKj?^JeGFuINL$Ko~!g`!fvhKqEQQltX$`g5&e54ot z%xk}+!R0}>%K3;h7ed^Y-y~8K6MmY4IA?1p_&fJZbFO$co^Px1#*d3<7UiQzDAqqz z0loLhxIN!y>LAYEyBWC8MS-X5J#Qk;IBUw|>03*f3-J6U8g2yc*D%XSvh^j>GkbXa zpbL3_ej`3Vq0WOmK|Xxq(TpdpF-T84t_(gWw=5|OmN|+zW!YWeiT50DK7PFxaeApV z@YLv5p*jgXA2~jIfv2C_Q!#z(6r?A_!+If~^^7}gm(!ix{LgYycrweUWI`~dbH@@49Jy<3^xxZZ|Z zXlHpN>z(u;6YR4G_O0?YT^c{)_B10-*=Y>=x^-%9M|#?pJm6nV&wiOg#^FFYeK>t(rnzc)2Bj)eE z10U)wb$F7F=NCp9-oM)nwD3;&H{i9R@zr$~(SXuEg5r~rt_A3Up3^#coe^%FG&^v6-cwd`_ z*K6t_$deU3qpnT7vk&KWw3CIP_q?3;z9;4(_7R4>QDLtz+bO7hBI4{5Fb)-he4JR1 zO5Y+*y8-iEAtYp1pxNkex{kesl3_e69QhfyGl8=Mac*M{)Ei~7l}c>H=QC_~7@rE4 zV&vtwwm(IB%6f=n3YX$G)lZy^^8_OAJW%0s*DxnS2#*s%I>ZfytR*V4ZMWtiABHgR z{$|BCrdBI{LYyui5A7*(c=A&A)&spLYd9a^ z6hqulXn&_sV7~$9d$c2v&nvv64s5cm#rcMS^+E9OPXA4Pu>-$PhH{^GT|M*7A~&AH z9os6CwR@4%;TgjwHECxtjSIu7`k80L!D06gy~lxE<6hR;eW{yBs7 z8%V&1Zw3l|9*+++fvmq=kx}5??GT3ZBD&}T;L?E}Gc_0DI74%T_@F3zvqt;yJ3Rg= zWINEy70pnZ_7vxb)ak!~PvLN1tqsKMov=F3UwQb5hspc#@nAX(dX-S`tM|>aQTy43 z`oPuncYKiZ%EA3}6Y?uXwX&E+Z+m?ar(JvwdYvm1J!h*fLY!a)>w@C+E%7f_Dy+pm zjpwAaY_{neDvqP8JM<{int*C8gP@CNrz1ry+>TQ`7-cDx$Ca0#U4gn zfF=OkJVHdG^yq!WSrZ}7E1Kucz9}Gu^9qI=%!BTni&3Veq(ak8Ezo~PtnD}nD^PBM0TSb+2lE6DQ|_s$A5pS!IR zw=*OZ^!tumw$XmYASsq-5wIc^2X{XUG#24_}z}B5?@|h(C%+?+$-E zEQk9?kO=vqVhWdhOwxHS(i7su!6&2AXvFBqcEkl)kZ&vItW0z_NyYJ>{0io&;#L2A z*Rw|gke(dp1wJ>H6s((aZXM$6pibb$`Z2j)^0#okXW-mYv2?YA4a2!|NOBf1MM;|x*^MQhMV{JBGl~Tl4Ov~4E z!j^!!U z+xq9cdyy{ug0CFP`OaI+isrAcVrhjPL80w=)=aaHw3wdJz0p7I{4iEuQ)fT^V4CXa z|BOAQmFFl&SQZCo+Dxo-GGEYYm^^w^`%kf?Q4wK|>5*{0UfFd~?dP3I`I++u{v2Y6 z&K~}M6uRgk@D)P`DQ8EHZ{@$ZhB*?-uXnV^Z}juM zJzh^nr!!4@|8myq_Uzp9{lAF9EooCGrDu4 z&MnFMfycVhjmST}f^J@t+tV<<%X3^eJ-+G>yDg>i$H7@vk4N`S{}e-=xoDypnZLSA z(IO?A{%p@T8+L0Q39B64ul!REorjdjKaJ!s*Fm*i8t+?@XW4bXvuwAfB44=&V>j=6 zzHlmkxo?3hd(-2ZUeDjCP`Su$6946)?qr5P`ad6HJg_o*R_D$=D!S2fzGuwnqhtS{ zcAgrmPoPNYDPOnP`y0R3ym>S2T3CIA;;P+!e8tdqG}ZE$F@H0^oG41GG~L@*CsdQ_ zv+?@qw&tJe(Do$V$oCpwby7c_hXM(z@ph?i_Q$Un7UC<0X3&+{@s9k}b!}M5?RcrY z!=`vOV+Gk>ny=iCv8$V!I9~)l7ga2Hd)?yaHRol<{z9O!;Q66osn@J3heOSXlhWb5 zO|Uw*^XZSA0mM1fl)w8O!J35So{j#dh!ecvd_u5&@p*-mtc{3MmcseBV0#(;o}JtH zxrh^-8wqw?duX1xtQ_n8Vc#j(@qHin*w}p@eQ}~cK)vsj9Pa9!#QS@WP#^I3U1mqB zLhZ0mEIfx7>>3m}-~C`Tb4z7`{}5U+y|x?slQZC)Rd6We(P{g}5v;d@eXS6g zHPu1V<|*Ptb;4gCAzDh@ueMvO5U165@c0vN=h(9!5hve(_6rI95gMpiC5kv*(*g9t z#01m0uQbG|)o{)sBz(N3rT)}1>>qB&)0bS<;{LWmoTGaLIESuod@*?*;^e%oJihcq z{oELQ9z$F*2wXfOM3!=Ybb%dxkz#UzORPKfcHJ{Pez+FJz$Y8k4QXUYAU!P<&R>P3 zJASVfQuu;6wb~T)%IwwWSD0KzoNd<2MO&eJEMwgM%m+)IIaAzhnHZl;8AFjR(kH0f9uQJ2W zsVD&q;M+a6F4#47G|rE{*h+JNdk$ZsU#-FCbA%i?2NLpTmrKW<#^)}iU8h0s>mRRm zDr+>tjlQUl;rX6WkmR)=8>qP7xO#BzA{2C}DjAz z{PhFpP5v&3vt@by6Ngsco>`WJdGmG9OBfWFd|IW1IHTMj zxNMQTjJeQE#EC--fXh#u>8oUl=LK`qR37)!duDP3t>gp}m*+pF;Nadr>sh$oMg!0* z-??vaN&!FLpeaQHpB?0Wn^J@0JR$56@I}J=?pw}cA|KAAO5hery7D9K$8h_J5GRE# zLq1>ep1c}yddpGJFJ0Lib<5ldah3x-2M}KVa`TB}>pBq^WGI4ug(anUPH8gsnE~%N z5nlVwYr9^gG4=_7xF@`!>rKf1=SL71ek}(+j;q=gmW}^z4$%(QFJWi7DZb8|QQAwO zRl##zVOLWXa_CZ5uGR(QXJRbEE6 z0OFJva2_nYe@lt;W+y7<%i#Hd@cwf_E_W<(oD{e%3HAPe*n9J+n!ES^|8zQa&Z*9n zs3eJ~Xig-}NoWo!jYNi$LZ%E2lp>TVM1x9EA)$FzrW8e^OrfYqk|BK0**n+K>;C-z zTfep5t#!ZO>wetN=e751zxKZNwfAwdzo~1mHWcS)l1nr2BTwXAmc4XAaRjHY0v1yd?uRWQ=r}^6=O+M<>r8x^DexV|p|XAfKc9B}w3i}|FSb&H&l|_) zj+N0vdPXzkXR-4=Z>QbcrGWX9JkY1hP0e_IwF_~UiY4%jP_|+6!PkhB6QLduyQ1_w z#^LBO#Kn{#Z;0jRB);!d`GMn1iHA7(EpLLyNZ@*a&fvfI0>#KD1vI>0kX433f4lZT z*6NY{f||zxe*ZwsuSJizM`-R3c>;VsBUZca_|z8rk@+T83HpY{NuOtD;Lia>*1+c~ zVvUMFR`rd4jN))^+y{O0%lS)GU*LJp-pB_2BJ@T|#V~$e#$EW_L+q6R?PGbC8Hz)V z>4p4ud#+3tv57W9oEZdlvRL2Dr7{JtaK072 z1o>9%V{iH5J^OQUyDACL&rhMVbPj&O`!z-K3h@5L`hIJ|alOY*RX25Fa2|?zRpLSK0giOPq)d+iLz10yyP5k^<8O+cBf_{&Q89-=XZa%yx+t^ zobty3xK_y6Mat3%IL~A2(rf~IG zz5Dpw#EujPzWL#kw_^1a+^*#Y;DM)iwPaCn-Xl9feZ>g#9$&k-vJAH?&YwT~%r;q7 zehEdKVg&mdBcf)_``k}>y|X3x?<@My!vjB$UP5|Oum!XmXPaYYQkH@^yR`y%yq)#c zO9E3cpJU4B4d>S>PyT?o;G++GKDbQk!^UL9#r)yi%838=WLZo#K3|jNAdfK;v;5jw zE0-WWZ8y{#jARd`-2>$l5f?IygZQbxq8xT+<2)>C@E&-^^%jZVE}TyUPuBo1^q<=< zI_@ZnL$bC3UUX3Z!K3qde`K^l-NmRnk#WDrYAe!53p(Mf z3Amo2EhYnhlhQvSXzvyjhk1d&js~6Ou9;Qix{>_F2lU@A-}$=v%O9i{FopNaWY#$K zU)i@4akj+tzj~&`o|Ts@RdHQMjTi%5y2_m7{}tB*WLrJp8ZlG>h2@1P4($NEU#5z@dBBfc-8f<2C7icK3t>Gn zPwhPF-FOo3?<@;f(8n9S-{=&08pY?>eB|@cxU1g_v7RHI4m`m)KGCbq4e3Rs_~U&2 z&WYdKI`Dg86iowtZu|9ovzmOQXE@&gej~xe)a9EO;xy81;5R>{Pjr2>3+uHH0MBP>mt|2b8h`+wd1C}p&s~?Ft%kK=tsY({|GD)CfJ}?V-&E0zs zX{~~Y3#^L-e*dB94)UfD#OdC!?=x%vd=n2NpF~{nHvfG!9hr9Sz*ziTB5_I(r&V`r zO1;HBq^Bg@1^&!vd4RMut^=9PurD(^lpb6DXxV|=72?nTcP{m|$0fKI%-kQ=zWEU6 z1GVLPWCtEMN|h(@zJ2w}+DCq`iGWEb@J|v6Ehj9?P#o$-{`h>3PEsg2D26yqcoFCa zZKW?C#)lIu4MjryX%46mbWVT~!N?72|q?)(Q78tjY6-y9#gDBR%u+V~C^CdBssOTNC%^P%3a8VcNr4_VW-Y zT{;1L7W1a|hObeGv(1x$>l)0@nD(m*aiLn6Z!EnXtM4f+x`8;^PXP3DWzCmX3hqH% zFooalyvVZ(9lYP^%KhP_YythkD@wb|Q`=xrKArxiQJ zpg6RPEa3K?+G3Is-H20N4+CG^u)kC3_8r89jurrSDe#e<^aR(p@I`Qxy4=Y9Pe2F{a=qLZNCb;wIXtQW^&E5NylwYSow#W>O$#o?$!eZmS|E!yU* zHUn|yn7t6^K>wktjEbNvn8r>M8q13ze`^yX{I&-q`XJXCBx~_x!1Xg_X_`3l; zIA2k9qaeU^wAyBFFgzTs}@m3%T00rIr|}xv2OLHcDf{= zMR6#1T|i&pkVVa`*o-*4Q3QC6ZqC|Pf4tr~!u)n?7EJ5um~|QJ!};TXPmokuvT`Zr zQ~2>~1L=!H=9D1Lijac%wFBG2g?{cwoJsQoUT?)#u8gojT(J8G@JH2$e)^9`m?RX+ zU#Csma-UX6`k?D?lhtGpV=*|-k$gKR@iaTK2C>;rAU ze;)igob~D{(sPWU?q&Vj(z}=JPDfnO&E~J3O}TK^qr3;#dmMcU;H-xQyKNWWMS9kT zalpkjjpjd-!Fhu<*BJQNnagH&QN59#I-?Buq;}A@Pzk>&C5f`k= z0lmAdoA(_#oR`GDY6ACgEAbv~#P6Ns%^x4H)e_OOQ=X$Z?1Qi`vwha zqgf~CbX>;slcfcDl^wIL^t8>a$4D;}1N#~~R#iKIHXfgI zMO>inWyc0~EH=GZi}VbSpU}_vE$)|2$iG0GYV!hk@+-lXD3LP6Dc|P;PgPzVu-&l; zahlHp;90lDHf7nbN1QEa20Ytx!v~>R2N9?HK>f+S`jly$RZYfmXqQ1>u2k1tSVzJ9 z^hMwg#q?&}IW-Y+&RPCAJe)o8)_t*Kh%*~ZKwm#Y=*22uOo3ye`;|f5ZIYP}6t2 zkmo4lb|c^%!4Wy?q`EEgJL2>!q`w9Z^VgovD9U`qSyN#jQ&B| zKNTPK$KrjNq6BpsXL9S(NfCE7aC~!qKWAiG@4c6a>o+oU6SO;{iQ_K(b~@4vOe_bk zDk6HaHsmPc6cN~`INGAh52>yA{K%;P0{S_3QmeL7aXrK2-{*7YN@-r9mg4yA*;0H#_5b#n|Wt+_>~zP_wTP(u z+-)k##(G8%aN9$ZmJBxFIIL;Ufjb36xIcTZhV%LU(67>&RMSGj_eB(s6ySb&d%j#BxQFyK3d~zhpqlKxVbV>^ukoL28?(p1 zaJ&rS%!mevvqMntsMuA!j#zj4f$wEpdp+NG8285l<})X}Pf$+fNh#u#%VMBE5W-SA z8I1EMs}I&S=ivMA9LnX(SihlEZePHO#mt;0Wu zFi$xM`V46c`=bf?{3!U;6!;~jOc##^f23#gKL_Vz-c{1*nlut$a4G0>EZpx`Prrur zf>rNKM8F$r)7C-ViY0vb(T%0`E_%6H;?<15j4dB9UEgxETeL->9nUDv>MaF&p zm3eY9=FM<^6c>G3{%S*Q1LDlH4iHBypyL(kYyskAX;`P?Owm8>pBr&rrLW<~XV%$% zn;R&O^i<1r5Qo#O+<#^=4aYh02DprYu)oTpR@`m@jF0$~fZw|2SMx%%VDH{8q!%vC2X4qztC$##&!^Nefxs5cUE4-J-+`tL=GNCk) zuur(|rEGi-eAS039l=x9Aw5TpAAjQvml8kyV8jK_+JJti_2aysw+ay#O}!3$_l#1T zZ%N}2r?|@j4>s^onyOZVIfp+FLuAL_5gGY>lcucz`Vf=7*^{Q>`NLQd3_R>~@Z{=) z-%uRdTK>50TY8zPUmA`$tJxm(kz>w!q_^XGm~IXGns{tfR!Z-mMx>|eS%CidOlKRHSG0K|U8x*!_pT zy9wuK=6bkC6;FJ8R#s$-3XZ=G_G|GZg>!Gl<*Opj@rQjx{HmeK6u(M5p6rLvpTGU$ z>37I}{e^u0`=9@f!2d?ze1@sN#*6!d3EwEl z=5;sjN4W>#3kMchd_Z=%D*v|26b?e#%h|P5?D~P0T*#D(nxT}4# zN!kFxhmHka_JLZ2=KQBD$fQt$eM%Sh$M&|AbE~9LU$aQ#H7BnoZ2{kVNY-D~CTsn1 z_Zi-QAqhJq{oR-K{bYY#|Kl?OamoZk;QL}H9(nw;2XVo&Q^5CYEw9+N4e$Rn$1dRE z9Q&C|45N^q?b-o6!ee&mOp-I=H2&{j(?2jQzu@BvYs9H%o`62OjrOo}+sHXP6wZJ8 z32L1`z6i)7J$)M$^yxn51QY)RATD?k&L#Tk58n(M?ZbKj87Am2pUaC(+kPFln=J!8 z>#^yRhYxlj&XLOoe(j#lJG~$u#Mxy_ffqPE&{B`b^%^My>U8~ryqI(Bxgtm}u+Ja# zg^FSOKT-c6PLqXuFa6SEQS#Mp`2K?xB?tPl%_cs2^!-RLHaHP@`El!Wlg{cPP7T}x zyn2r{)9dXV#D(Ul0O@8{Pr0 zEpP6;x#}6>0uKE7@YKEVh|i;u^YrIB&^PUIbg9w|c!5GCzUzY*jhn zY}4c{wRsAN3v5gTF7YGsYPtAq9DhkM@QL=feO=X8Ax`dg;q&5KXIk#PN1U~_3AkL; zlW3dR%{b0#_}s~0iY-gX=@T7s_F1Uw4W@~CsELlDY@n>`3F$V^)JGKBtlbe4&ucss--naX)YI`)QNwWu+T^3vt0rxJNgz zzp7@DnT_8UqaD_r!Q%1K7yWmk1V&;9ZGiZT8!wuKeZ}_^!h?r_FAeINI62V($InOx z?pjATSbQ2KG!o^-ZQ!f@4D-y(@H}KKhjnM*-+zC=xpEtd!#rIN`aqXcmFbfE5Emi6 z1-@PJbn^<2^@vl{`2F7@Z|O7J9p^WZKVw0^N7!4StHclK*`^+Rera3WzPot7vF)b- z4;@~7)4J*%)~CSzy}^kg6SL`?$0IJ7!GDjZHv1I&y%j*5dK~U23{EGw2#ar*M4Zh3 zy*37C<0}t6lgIZ=B(HR6_w1Fg2O4Z=;W#w@x;R&}) zGZS6{&%S6HX?05*arQ#EhcmdE+1#df4Sxq;*lO+JFhjVvk0=L4HnT&>Db z9GU`u-WCgrt+`OJ5V!l4zaA@fyU$CB;m-|3q~ZR?;9-@}p@Kh6NKfJCRfD>{ue16O z7U4Ll`=Q;soXZ|$8=N1gmA`;LJtUbcAES=+)W$8qoAzqA)dl1GOS0M`;4kHGU#)Qz zLwfSMEa07M){rzc@c0YX^84SJ@GfuR7kocKE7=D6x4$UbOWp8&3}qGU*9Pxqgy$*- zkIX|!AJBKVPZ%^hyaKgL^T`9=t0`37(}3?Gn06|t2Y$Q%XOdPfIlZ^Zkz<1W9}n0AvpoXrwzRVE@9f5C}D~3Gbl7k;BxBp zR~{Ggk)Dz;8Tgdc_(;e18HiKuRs&a@dr^p!Ylt{Gbr86+&%D9aWn(Zuw+pzcNoLoP zhd4h7_ClU9RINC_S;Asuzp#eS84T67Z1S;7K8oT9FMxW$P)jR7I@TKJCDE%k5Z~&n z;y7)MVcgG5*iQ}Z+9LO#-+|{3Yf%E|7uz4r{5Wej(z9kjel~O**FN>dG`tT|Wfp+m z*?5)yPx^ACC%HWU?yckFD(2RPIAxYTaNl)$)kiKQBThR6`-|b$XamUyiKd8?MPZ#9 z?pPQk+4-dtafVMf#EGzrJlzr*g*f-?7{DX#1x-T7;rve>dMakY5851QWS@?pbhkgjOoI0FQpM@R#SnWY+H~d(~RpPf!`^>ucp2&lDfJU=_!qx zz;jnjTrs8y-?K7YAio*jJiV-xHG3rAIu3!pA|s!sE24?wFq~Pyt8Bikp)IyRoOEM0 z@FuHAM-8>{I52~9fVb?M8N%6x$6v7hJMdO5r<<~LJU`h#9s_?Fv@3$a*@@x{zAXU$ zPPn;?xeu>*>Po2V47(RT?eQM@eO~n6;h^vF*qNqw7VqPnpa|ffIH{9nZ_7dPMYBYK z_kU=}E|1PdoEilA!SJ)$Eo9G~w?s?mJ&2FG!Q@i7t~TzX)syDsMCkhhJbmbC<;d+B9 z-VAzesRvB=+vX?^yBq2RqgmF+%d{gmAx>v~2EFdgsCzT6;QEBpp33LPrN=r57_mtJNI1k?-53!?6;GGu!y_E%&UQ{aF;($<()7L2tFB^^N^DDIDhj z%oC#}6&H+coA5YO%V1wNa-zA|X;^GWdRjSu{Jp4^GY>}3M4a*11mdr=tD~;2EJvJk ziU!>0wd}7yjsb|1qUHkkzkKWSu$m3x%mDtp+Unonct^quah4T-{%q|t(QMZGhB#T} zHpJOx5g@R0_dUef?Y+RaOMJezZ~Oto>7{1CcP_S(kgC-{T-Zh&_+E~Zj^Nh0hzowL z0e6XCbYUIM%Mz~&O#wY-f5A%(bO@4^_WqoVRJKlOTRp?8hysMlW%EYC7;7DX|8pw>uE0{Z0UWbA?NMlkaTA89AQ7 z^Bqi%9J0c7pkQ$|@PcQjGG34ELVET@$a_X5!W;ThV(>kNuqi)InXjSK#OOu1KM&;~ zPI;rMq-mBu;`AhE;I{?Ne_I?nk_Y6ffZsE^mgXLV=MQyn5b*jnmuM~zTu>a^Cw~5E ziB$gTynjC80!ICyZz)zWzxj@V_3M*?KhH|j?Wf`QDEy@x_{%GwJsYYQ;C@ag1OL`l z^{(;YF2orb@cECi;Oj5?pN>}{PTjWYuijW_N_bt#MqK}}MBzOe3#Ax7wrIz7vcQH* zpcn4h@rOAMpBE^;ke7@_tc9{0-{AGjJO<}DV`iJ5=^gP{)Gm8FFL@gkbfOC9IU zO~vOy!H-bS8;5VvvMh7J=P8B}@f0zX35 zqrd)w$A>EM1Ne!b7FtS1c)w#@hyBR-q_$mbI?|Iu;Qqw8W50r-pQ zdY4GQaD5`SejV^m5vHsJ6VErn&jP^TS$j5#B;Y!SR=N~;59xQ`ESWzjK0W3Z@P4IU zig@41{ebE*;Dal+Cl9)KBRy-a!(VP9kfVGw>Hbk=_PPw<6{>kY{`gIUcvh{nGrFhChlU3I7j9e=v7y% zS%mHwxmPS_1J{ZUI{a)=DALmkVE-~PuG^zCbzTQm$x;CyEiVKS-UW){w4V%@Osm_!-fE@{~?2I+-Npk6YG zlMI&kHt<8?&&^Bs6nUV;!UDhTNr&5%D$ zE-n4KxZRrZpuf11He{%(jX2d5&M79B&rh1&oN9nLD`X4kFDJRlH7%(?oNUft zUs+m}p3_FYSIS;{0`%D(OAXEMtU`KPe;x2E?vv9#ZqLQ>&z%K+E$p#ExdX1#SX&^E zndED^EuZ&(8jiCz3-tL>!Uhpxcs-I1Jpo==Hh668Onm=9z4Hxtg~0oT&h{@*9Lhod zJgl4-;o3Y2k3TD&KOY`RKE64r zBqkkuTVz~iaUNr)T7&+1{ysTs8?LuGiBLbAypC(w@V;*n>Le;&EdP z-UI$F_t)5tJ9y)yc)I}a+HxbnZ6)5ngnvMtVA5xIGDYwLo^Py2P}iA!w^B~kbj?ET z(pMdUIDdvFyjZbE2658dhN+mO~_O5ekvB=%ICWcTIl_nIF330JWeXd9{zGtA+ z%>wSpe*9Bo8-Bm+lj6Wvekh1s`OF=~5iNy%+%zz!^bp+^$04r^1pS_2&OxV#_&mjA zLA`1kMmc4@Uk=X)O7t1fhg}Q#I(WVW#iuKM0Dd6CL-j;iBO92N`e0n^G$(=GO#!gUU7j0eQI{qS1t+5R}B zXP(FbUcL0``kAeGz0;OI0RBMz@cx)*NOXF2c&X)*Gp{DX+o z=feGlX``m5SbbU|;*4xl&_DHj@V&YG9^&kGun(HHxUL(Rv{?ypN-@->rrlQ(nzRn! zd?K_b6ykhL%4^&|;W*MWt$zaV|4>)6ci(cvIS1kVYdRpcF<@d!Ip(Y9f_}I_cB+Uq zo`g)OuXX(PdkeO4Uw6p)n_X&g^dq5nI zP``0bbSI=29fbYJY(;tF;MlZe#M$mMK)+gA!TmrAuFnN;j0e79oH+A9P8-tGw)5ZP zmLAeyLGVCzyo{Nwbb-;C)tTKb$Yj!a5af>HZT@9QqF} zh_kd@%_4 zt(s#;FMV2qxG)v+s#$@9aa*EF5#l1hVnJUXbbUkmjAe+^SgU|n6dqAiziPC5qnZ)W%U-KCDFjO5k6D$v(2?{>~Uj`IWglNIpCrXtb9BcH#}^|t|U z_*5h9|5XabXB6%Q-d?kF%MbYu#6?&efxoJD8n}6EE8>)w7l41N@AF@J7w0SbI@s6D zJ~h?4c>URq^qf1dK;OS|eA1DTzpsTkz@H~yCkib$b~udmEDip889G^2c{b`X;&h8} zi1TgJ;_g|O@%f0f=Kf#)_y2kN9J?E_$oIeh`QHfqZv_4~0{{@M?s_J@0`Il)3*R&-;fRus&?ixM%3u4X6A!@~+O@+x}7CU%1Y**-0wv6M8vGQh~Or z&g9a*RHFs$UY6WThktDXsEAXaoi0M`Q90zZytHG>Qy(j{%A(lUV`l+&$efAx*Wl#Q!k>pf7C z>e`r?;k9&R`)lJmi!)aH72;JOpCAWcj z*-ZP8{OK1fyEbxMa8Gw;RS96{mkC_~Ll&O)6e` zj_8X$mZjXSI^AWvc3jx;IceN$`BBf8#`DROJpbd1`F&n(!S$-gS07$W9IQ#?{xOzO zK6I=u{$A%pY%g`vRcrd42{DsRqC_uNu~G;=^cqeX{=l!Dzg`z>3*J4`*Z4M4Pgqq{q=C>R(y6W?LOWc4GqpxZ{_fR>imw$LR#c5T42sWeD3Dg|g zvc$m)9{oj0=G<&B%7)h6!ZWV_`KyBp_kCsF{O(-tcdR=7xO@cn&SaDiJ>2bW3HWa~ z`e#m`y^~ipYj>h-$Y9rAx>1G&!I#JD=ARw2eF@!kQ;X{D*LrMt@6P4~iv|zw(REaF z=pCF<>tPVz!L3liSM#5j4rp&0e?D`eo)p1{y4hDf&5zKW@i+;`X|puFZ)`qVqV;CD^3bxn2_Acu+aCaM#oeI!avGs9vJh`Y#EE5^UpNi2sPO*ikP&>r5s4 z`on$ymu+ZkMkc|gG5hGS>{7Kq;!k!sI;m)e5p0imLzyqU(VSr0?Wh)aYu)uB!}Vtq z$6V_BL9lU`FNrk!V5B|4COM!*GV+z!_%^?wk)b}3ds#T@*|@8aM0y{fw}xPosh+dk zhW+Z5X>-kwaf07&5o~CF#c4Q}6KqoF3w5Vguy^iLx6%kZrXNMHo#nNrzQcb5!8YaV z8|_Ml|F-j0SR#g6 z`)4vg^@}^Zb${oQmEI!C1C+HMqni_q=J~!F{hUqc<&yF<+TY)LcK*>SlUs6h1@|8H z-=P%P#Ip?wIV>hN7eD8N(RGXQzlJ^90+08HDHP)(pe!J z@^C(-O;=|E)rerTf#(u(|VEJFWc!XY_xDGS_T+QhQ&wUYBx|zLSa0M}p6b=krvlUqxunkn?oowtxxy zro_IDV&@OvBiL+swnuci%>C-$;KZ*gSc*JHB7@2{sY8<+@GD zY|gZ_w#7emvI!YoU_H+kD#XM&_MeAqpoo<3e6DPG=fr|K-CsU}gyztjtGK+c9X0ol zuQDpFPj_rngI-(416L;y$XNuMUT_eu?)E`&5F> zm}iR$dEh~8E}|%_?yF=+5Pg^1%qnsecl1VelRLjjq$xXI-6Z-hy(w->UK4HVX20Rk zO!v~21RqK%a`y&_GgGl*34QCk(?7O1i~jZ~<9#1{RC8{;<|bQz=b?c5^JxoWQ~WMJ zuev`qz3r4k!0_%F1YZcxN7wh1A#~I3ZifSTkIVFW-)8qdMLlnV&5385J$B6`VsoF> zYf~ycyI!vCNWB01_{sMKAA09rz1qe^U$pnNv&EH>iDNb8{DQ|+5px(yeHWi>wIcfZ z%uD`!f8o@=t2nUBxyyx4Xpft*xyRic<<~@CtLm+7hQBJJe;=7K%$85&5PYaT@3${f ziN5?3%fur$##=>|9az)LXaXwP&d0cnSIVHGn|A#Kl=pW3FXBwA!IxtHu2g zXOs=CSm9{_9Aa}tqI-;0V=W`k)RYl?gaktJ5b)V(Si7I->yFRaDA!`CfSPN2IO zY@c657)lcNyg(vdt;wHA7?UZ3TkLlyO?r^JQoGpP?;|(+{QGdUYdqUY`Kn@q&9kPt zU18^jNEo%`oM{%wsc%(H!05&zExM|McwZ;yz*#X}zrDy3h~DoT^!(2v@Bdi$P~)}r%lpx* z+qa8unmgJ@-oR_FF5qJ|p*j6sXBKQeW;XOWPkf7xQ;qXzn*iEIGP1ww5ufgOR^UO- zvK=p~8Xrz*yZLd+|K+xb1YJE;Vr`BtyZ|-@1y-A-`Bf-w`}FKlLXss-l&|N z>O7a&&Bv>Cdff*K^>pVJ1ol1%P*kVJI~8ReXV?aod;ZLuZ>P1lu#7?c|xeI)tZN9(h44;oiy#SwaCy z)y=fR(Ka$~_(;Ag<`M+k{7z0dWtw5@`HY>vZYJwa8f_D}!?PV8+P9uy6H67?H?Y?( zvwcN%dzG5wXM*i6&-TJl3cqsxvoQ{zb6wRr5Pf)ov5@4Kg*^mYDbIHBhlUq%C?lS` zr1zS=+G6$DS#tcEw{iqu9nYuRdJvZY{N`qz4vo8VWt-_f^}zMjoJHmY+dH1EW+47Q z>7mQ3?nV4y@^jIwxS=aXH{Or-k-4W*66u;w`zK;I--lYt8z>rNsCu-zx>Ss9CHThi ze6s>tiSNMe`yX8k^Lw}Fn_EAxA9r{R!N#3%B+|K$i~f_MUrFxOo&4BUTlUO3c{4;CfLxZ%o~_AKzzEmkS#kUZF0-lhG%8Q zYkmzN_;PvOyy#XzBQ(b`+3(&xcg5{jY+36Z=hNJRX4LXQtJP|2Jn{7Ee~BE>q#WZ@ zvAQgG_W6Us1X}~IH3?JBOhRi@dL9Jqt0JwOJaK6mCH>7pf{pv34tKGh8~>a5aHX^M zUi&^aIeo{+BhDc$6~&`{WbOnfky2~F>>xBZy}R0Ov3KvnB`rek5B${$l?oXh&96!O zM-iJl(ed`>xMiQ3=9pThb}knpmTw)r=H7kDrV@RPVEY`6F|*52^?NRY_2zL z!4axJq%(MXzUvKHJ+Dz3&z(T*4nB3hG2WbvnA{O_|J{sAvI|mzjvDNNJcx3 zHZVL0shzxo=ZiWz4`2WM(@V9}UdChV>vnEckC53|SUI{mGB-JqNILHCoQdz?WM_KB z+~=hcH(qbiWo-B41|0QtXurE$5d5E7<$k#O3g1=ptrOPmpLs58zBa*E!)tHOi4Vkg zFy(t(m{XMNy&&pfZAR-S;u(~?LvWw&S6mZeFsY4VL(X&k`l|Q7ABvrOmpC)gjF$Oi zuS9&hBMZbeKJN}+O|}cPaF6ihrt(owhkUjUarh37KbU)3R5z?WephOP`}Zw@9iP1k zHg18%y;2r;H6=Dz`r_1=yjq_}XXBsQ_xlFp=^ z?))u&WwZ?!`z1ADI|;Tmg`W<{GiH|lEVS@3E|JG|UO9~RV2AlSJ7P9h~)9T6iw+zCIC%JLVNk0)IUcUjTLJ9GX!mSl9Ays0KpPV~i` zcDrGbHg46)y(nyT`_J7^_(aALwWrm&XXOnsl zjrNgMcs@;1(=x(nTIH)J{yu(GM0&{EqJK^{;gt&>=GkuDQ^BA3{gcBo@5NouN@}K$ zUFW!HLVh^+ko)h`O)ug3auPZ#h@*0!K5h9^hV8>M8_EoS$Ia9l?Gs$U^R4JxO> z52v_Z(k`=Y*6@54edK~8!Dhv?W$ilmpSz~xw^lEh82qU-|DavX)O*U0M*FCNJl~8= zTjC#7QK>E5oKAgr#@E$5*-gxauwJPrcs9u&iugRqe|OR`-myBm z{|*XeG0)aA@I06B4n)WJt!zF zL*j>L-y?kLDkR0T#Tnedr^0_;U2?LQd0Gu~Li!3PE9$;4L8F@!Zsz$oTMppQ?*8$m znfS)LU%wt9WGj&?_M`a4XdlIs=R3fdj_;!RgCeu_ZtUFOrYDleU)`%*uSO%-xCa~V z^;^vP|77T9xfL(-f85rjKiL~5baFa(@J0AU`>!v&?d|7|OL~E^^x4!Hof^8|!wtg-7KSzt$v|Upk4+|&i zmnh7LkDvIH;Pc@5zSb}5f?ph4k+)=B&?oyKG>1s6OYn;p@*F$8oR6@5cn*@l0DOTj zZ&}4Nea|73XGk1H_<~E`^1xa4|E_27$%c`r(q*@cIrj7eg3UV%8TB*m7S_~7xR2j&6qEPTIxF!~ej z|0WUOJ-a=Qw@3IRPG-Ot{_;Lq8T!UuKy@BTU~d5E`~O%;`!H?rbEUx-U-G_K=epF+ z$v~Vs(eAH4Um(x#1V@~kdbvNG*j>PBQb(7xO-VqUmNXkUy{~!MWUW<*Q>}V{i^$dG zY@dkI6Nxex#vxxk!S1p38Zo37p8Fj1W8VzgJQ7D|6B5fGzMz(`Sh6iJaX|#qvp>NX zV)B*dTjT{iz;Oif;R{>&O3hj0ejMT^1nv*bvkl^__$#HIYMX_)@RuCmTCvSbs?Or| z$X?O_Tqo}S(!@;zNY5f00oT2s>{4fi^~^<|fg7z04`x_$_kZpWO=cXQ_ngy8nCOQ% z{rC`Y)9Ih)YD&doeFUuceDgm(imn>(5$9ZoFMQ|EXX!l@oBsrHO2a{jV<}*mE6}Wq zIP0YjaNF45kE@1{AWjd0FEZwPkhKm4n&S1v)^P^Ck5kFAq*>fTp8F%#RmtbsZ{KUA z@lq)F7hwO?1n$2}QRMx`lZewQ6o3aj>`?e6?1lN-H^8@M6^p#Sj^~Mh+f3lwC^||L z`<@{^CF}|C;K2;}_6D@&ljwQnz{7s7x2-Z&MS8|S6Y%|di+W{Jb|FreT?_oc^@#OT0;{FKifiH09mpYXQy)eajfHMd3Pky=N znhdMS+*2+0hZ8*p+PyzE=eVqK5yzi(s{ED z#UUT<0!}HkDZQ?O$|Vx>j3IEbqoyJh0Rg0^R>FQ)Fh1w(GvS52f{L35y!iSlAB!fM zUm97z?Xw`xG{feFBn7-rF_zW>*Z(G{6!zvKa4A|z6w^aS#q7x$E^>!Kjc79 z(68>ay<8+V1IJN&41C>C%W(9b6vUbP(}4$ii`TrZ<6e(&f9P8LaSk?C4)*wg^9lR> zKF}Xvo>-|`vK;A24v+^5PTXvHW3P+r5c*0L(4Q2qrj))nMtX`@1)s|>{G&A%BF@U& z13WH8R@m7Tj}Nu~Ch+sRW%*~;f5z?RKs{EF#L&^6E4>-V@f-ww(lp)qt*uFj3x55J z{}d$eb$GHd${OqKSbzURLGtr;eUnP?JQvdC$GLQ3p_M_p4ARrO?|}YNxGp`tYhWU&~+pA zsyXECf@*EsaMAT-q^G98g*f->@5*gAxq~?Q=nmi=XCrg&O#OzqU@p{G1+Tw#&rW*C zM4WENAJ1+THw6O`PsAxqH;B_e&*ckExf^kg6nufTpx<|nW@1qY;>=3^a}7&YcZvIl zAx`pvFB}*ARxdsmpM}Sb<}Ug-ej%mPCw|5B!$>c9c`9();~Y=xet8_<1@d+w^Lh2k zx>Yz|u@h;aXWwyBjdjNBmwxI#@G)M_A{pP^Q5;TD0dR>`*~iqme+H5F!+r?+W}!r- zRGMCeHs%9wKtD-8`&miSq^02GadGL>$u{5jq_?6@YyTo zG#=YA(w_=@;1v%V7y-FHb%gmrk?vg zJZ%HgQwI3`bRDY|+UlE)`}vI@$0N)`>CgQ<%%8(PSh!;RW7XfuI1cNB7Q|mOx8`g} z5w2rJeoY3x(fldJaR}GX)HSDp`#al4F8Yl3Q%;0G@U3IkeVAo#fS+rvJMbN*7tgJ> zmO@-GAr1ImdR1$1Upnxdpda6}a@HU&w7VVnt!10&Gpcca zs0$tfFVI|-^RX1?Tl(_jz>7qwrm>TTP#mUfF7P|2{JyfH@cu>5z6<<*>Y;+$i|1hd z^CaL8#=XkbZ@qvxXAC6n!us}g=T|D8N1XL86!i7OF*FA%o)4lGaE>T!u&)VooVf_; z*?R&(-!`|Xe%)o9Hz+<(pBHv)95aP>)d=Zn&HQnDJ6}wCuGTojDRT25&fC4`$9S9S zA}*Q)=Yqoit4fz_)}KS1V^IbA!P0c@FZi5*ID1Vn@ZWURm%?K8h%>i9o-ZP&92b{a zn1?v|I@DuDLgx<@FiLR#XZ(WqQbY}6_3eK50_i!5Mt|cMi5%#!OPcJ8c@mr#iWuRC zSRSu)7zXZkMn7v%9ltLQi3;4E<=tl)9D^IU;0t`kw|EL#oW>qV!zrll=LoN`bH_|Bgmok?L2aDOaL0uM@=F2A|83UR7X9Pr)D&vEmo z9L4cF;(>?Ve0O+jc>&fJH3Hwar@TqJJQ3@i6@ee?GGtc_b3c&d{xIIaK3H^aIK)sn z71tpQ&10ZX-!^;D^G^oSQ#bS9S9*U;r|d$!j;P&(9i8u)Yulm>!xGNv)X><7FcH7zS#kh54D89hXY|z(GtSfBq zG$T$IgZirIj?6l9mJJJW%1nMgA89qEcLaS$oRc^S;yix+u_xy#-XB@Da6T&P+C4L< z!ylh_Xi7Gq?`4k@Ttc~l;!xcSfcJliZD*|=M4V{{`)twY^68o9J5FQ${VAaTqD5(1 z6^-w0gtYnd_D|irFK$oqdM9(t|LThc_WCR|cCSToNKsJ77L)0pKJDvG#5_n6^yI3h zdLK7S#3|~-AkPd{VWz*zx|`Z#{)=D4}^SDEHpfC%d1K|#M#EME{ds7 ze|H#!Iw4MT+zIi;EPwQeFmRpBesCGM_@=8CyFR_caU|eeRxBYCZ{j+~7;#oH)bqts z&#q86U5vRRVhxp1y(vRzQ?m=8I1?Eq&iiKck+7jGPiun`J zYtIM~zh)bN^wjfEhZJkC@|0wXnBw>e*ZKN;eL54}@jgi2pa6Wf<-r|i+`l0`V+iI+ z@!b8N)7@1B5EnAA0=>b+39U_$xXz?3;m0v+K3+4o565Tj<&TfqP)pQ29bXhj#2wC? z#q);pw_YAJMw})88saas>l~v3n%Se zGH)1IGcHZum7pP-{&lDm(l`tLh(I^HlyfQI1eyd)`7mRV5e{Cvq%(&(H;Q2A^Q@| zCJE<%PRJwR%~6}r6b9jY4AzGv;H}z1PEI4gSX8(O?x~8O+00I^qn<+X>HGM3@6~IC zfQ)zMxZNTC{C~Z0#j66%iTJs~p`IyzD{d0r+V&H10Trkpia#XQK2=IkKwNCF68bX` zXt8=(GT!gl&tidp_4r};SoJH?(@#h6dCHvB5AC{$Qy0nbdDf>JuZy-I&TJ3?K9pW2 zzQ_*GbFvzL-Tl03Y@V_Y%s^b3vqTftkV+a zpD3zWnI7UIVlZz@#&r5@4(-I_FXAW;aU@Q>%FMfs?+FEyVcbf_l?2c4RK{^QZ3&hAmFJ`?90!x@swkTjrqpd^Ke%rgyULP?WU zq(R6$6iTKh4N?&*QJG3)YLZMDN{KWnAyUsdd)GQS-`}6lKhJaB=eoM@t5@%}*8c3z z-fOSDKWF$euPtEy7ERY3U6z`#0PFWFfnNT(@x(hjG!bV@z&I&dkY(l9uZs66Y+4WK z6-%r3ocwbx%HG)ueDSG%ftK?M$dBli#lTlszg0Xr7oQsll*77Hr2C-sv=Ra91%E9A zy>6TF>Wm1Shlx(!z}HR?e<~sL1^FlWE&{$T?Qm+~D9#&f?>^ujEAM|aoiPpRnY-@+ z-#++Gc7EVonq}=!bV(>Tn2i72kp!-X=UuEXasn4hL_`uC5I3f;eAnJ z(Q&I!D|Ro(_m?$29`whzch74|bwhggY&P(7R>yp;Xm}jb)_DTYs4IQ#8l8yrq@F6^ zIVxXDvf0_#&ou+!cUH?p+G&>{PT3?5{O-@7El-E=zJQzx>q1eXJgY_91lKL}%>AG* zi8EZ=UZ{=y2u&0KUU_kK;?JHg#Hq!+`}@fH=7*QUI6nwz>4LsV=w;7@;ZUR}&Y23l zv()@Hn}s(F!6KGI2m2^THzF9wQ!v zaab(=?c2%xPg4k`$4i z=?mktc>*#m^ zyk0Z9#lZiX5Vz9?ujk;n88DBE?XJumcFPRH?evCvwb*X(QRu8`1&CAk?*KpcTK!Wt zROlm4E*u3OJbC%_o-FL28Vh-*IIN-B+>b1W^rW10(1-WO98^Am_rElYYTyw?SHI4P zF~)k0)4-1;EiJzG8ut%n>rLPZ;Ry$4i?|}akmLd2Nw!*#$q(?kD{b*h;OEMP7Ce2~ zgY;Avci@+$fBi5^n~%8YXMG-TpSko(e?Q_xS;$w#*Sc#i5I;XcoaK5A^!M*(Z})kF z$AidhsK<(Hjw-*f?*EPb^Xi=9N1k&+EvE_~E;z{3*PmU~EKk7uLH26i{B6+^S#%(A zBhoX(FGJk7{Vs|^8Ig#yC-Ls%hlnio=ZDWB&J5`Q{ZN@q%&12b_H&bWAAdG{vfO5l z?>jx`G3bB3S3m5kh1Y$`^_;)FgeG4lQM`UD@GP$!hIPHxBx zK6U}=X-9Z|r01Tf*IP0Rx993^@U!61?BTep6S04(T|E9uqh+eyX~c=sAy1Yp9dXw> z(~RpGf%4^`*Cu%gQ2aL|y>PJ>k2eHS-VCH6F1oG}xPi~Yj`oX75T}qdfP31VUmc-~ z$B(EJ)UhQ#8h7r#wlG9`_SKc3-~0BPwqDZ|#04He{x3O@$oXK1Sw7-|d0#;v5aK_( zQXJoR`t@kwq4%j@4O}iGz0l7az{3W`QX;c2B2G6d1Rk+{dSA`0GQ`PQvw=s-$G;Dl zs*5<$AQt$M<&!UV%*E%)?8sj{9xPF{c^0mV1P;MCEQx!l-r~RV6Y|5l!_z0M*GV+r zAC9=lKoj^$JTKB0zi=|*w5^%IPme#F9z5Rxaq{zi;AykJ)(;%P_no){@^;Dj2@1l$ zCGdJg9e*G6>DqNW-dNs1e%Jy;;2GZ6x4p~4<6Ov`H%@Ybs~5@o#~{7%ZCLk9@>YK# zluj#0oOI(o_$hErakQzEMVwr;1bB%8GhX}^J_lndd+~VwsuBUSYNTgb76HGnQo29p zDXt#~*-)33JRFGE9+`sIUuF!if1WLTys52R4iI z**!XVKSJwX1^)Z*cON!1+l2ItD##lpgN1IXDa&!56zy08`oa6>hzjv$NY9p;1$<~j zoq?cS2I8d8TmSM>p~ymI<)e5WvD$-yi(VKqYl7$C^c07>Zjs)9{FJu!TM5a zbjfY&P7Wd#}{3^msW{5RlgJT zE}hcvV|TY;KDr6G>!SX-&(w*C)2@5|<$wRr<*7q`+tI)O_n-fI;J+UDuLu6?f&b6< z0NteEn#P!8@l!`4bT>s@`Swi=MUpUv>)n&y~UF7cvZc zloNT3QpU1~V+ICRJ+gN}L5jKAxa;XsSGUpDC&;v#PY{&FMIqNbUt@6RAE zEcgmI{bp`jz057diSwWyHllZt%Kcv8b1k8Du>KkenccA+o-_mL+2)eqXWR~lyavtn zh_j6BfKRkM8tQs%0CC387r-SSdD%bB5JOzF3HA|2Q;x4(fBE`N#OY2KKrdVGRZxAd z5OLzH6yVdcx>XyWUO`+?T?6>^I}d#gEO%o+&Tw8~q>#}QQ)~05E?U3_{k)lRbEbOM zAw6~P0^swHT?{|m{T*?pHq_5X3-9)yyw-*5QsJAh|210l=;5M!9(e!D<~?sRQmk-} zT=P5{`4QoKQQ@DL(UQXZ%;G7bh*Q#Qfvb0KksB}c3-bnE|F2HozJ9wgZa;Mp_7O(9 zB1#+11suoi)Pa43k#1-Afn)vH4-LxX-$n)>Z_CP@eueZbeQAhmZ1iZ{ppP)(w5)Bw zO>fTI7-`~;+fxGjK_lz>%zTl&HHeF9w}XD|?zC}P%6Q*F*L%j}AD+tHp(G(aX(pT} z8`&+0O1V>V1aX!DydS{Gt|n10zoHp&T3r_SaVlVVke%>&V6UGH+_i4@#6F6~+n z@GXsA&IhcOkRQg~+<$np(+dv+#DxWU{k%gl^fydM`d0E{A>l;YuJDET+r7nTT~>Q*^Bk@aloIw|73eygqt@x?<+oH1-#Mit-&lYypN{R zVP9|5mMiWpZiVj)Jz^O2?N{rh4to`0|1?eD?>`+A9(}$J^ZP4+_Y!t(JeZh?IQ;?a zgN(jhj2}sy5{o#~ITiF@mnNOdI_88pNn|yTx4E>*?+U~El21H7RCDJM^CIGeb&$`E zzL&J6?jPTPIDP&D&<|?$_7djd>!M8<0zR~JzkT44J=W8X1OL@NWrcu_BKCg?-fv(m z@VuusO*{eXt)czKRQZv%jgRm-32T4BUq8mwRJ-`zADfY0$W|1%$o_ZTS|64m&Jg$J z@!A(hj@flzm?%}PV^H5{e=A^QI9`3AU*Q}?C*>x9@uij_2UV|DKp_5$#~K%%hvjxWW)&@ z;GEWY`np|uwa(f&uEGKEKc~KIexVCq2Pwzr0bk;6aBZ0!J_jQyz_>MD((}GIHv#WY zi8{7CeQ&RDQz||WWFF`B&$5@BR*P!mb&8S(=K#j4htBI*2;uz9{P6|+EWgBx(wTe* zwUa8R!Q;Kg1ie;6d|laO;D%3&lJ9Z91dQ`y=7j+_u{}KAZGi{kRNi^7vE}NQr?oTi z{UXsefPPKYgWy^E-q_EeHE`R)gI@LC`w*wxxe44M!PxE4F`Ty5{% zeH6~mjrY8RZC0U@qK5mgmWNxG!?>^2) zdeS1ulg8P<#ARHsBFy!G4P>~PNU0TaNeMO)d2qUxbfrw zIcL-!0aZU9zZ?{PK>?2w>XT^Tqiq+C%vAhyKDK--@L%U$y7v|xKz>L%u>P75Z|X}Q z)YU?qDq`|iZ$dgbE#j`wGQ`xWFgLa2lL28AXZaip534MwJ;O()bnp2 zXMMei^z=O^fC~l6TiGU$;J9nxoX|wrWkk*0_Y2~rDN&$j9W|=2LHi=k=O)T7180vk zWQQ)r^NuZ24P4AvXx*>RbC4g}bg1`C#!ICySB&mNoNWv9*F@YVH2Cgb0mMaK%>+M_ zLPHi0%){+uErIiV6Da{9)`2SQhq&+v=%v2DcwK{pFFOZ}<$;(CFv@vHuxn~R^zP!H3A zJMF!n9&le4`KMpV0`4O9G@`l`-!H}`UjMuO6z|!=#_J|k`3dMf^juc2wA9CbCc(ba zWV7kvXa1|Q5vQudI%~4|(PnM>vIUq|eE>h6TNSTZ*lHlovf=fQ_sg?$Ym;$(LTP~f zY_hA5__(FyJ<_w~lfciO9H-p;!U)7^eU89=hvdGp{(NqNajXvb!S>P{YL9T<6a3Wy z{D|KLg9w%7$PZnAFYvgygJNXgD%{SAkY`Mi-0n5g{_LZf=V+i$dPHocPia7U@^8qi zCa2vb%Jj9?;dY)71^t=gwx;V(a2_Lsi2+a3?vv~qhu1rrChXTtE^QSWPnW>=OEga( z^f$kK(rXzyjs4#z0KX%hGE+NB7IEsz^}vhLmx#Q-j@K6v-VdLeRMXO4oKrGDdh$>{ z=-Z|yv*eb{KwOmfzHXB?rP^1Sws`!Lba~g?=96u)XEq)Wf-5G1pI0ZtoqjHEL4FwH zc=_;kn!?JY?fHn)rmX~h5BbLSjD9NO?0F%;Kisu>Hf5Y1)?2m%|2SjZri9J7ULxi% z1^y}9S1x(cHl(M{cK|+cII{I?K?dRifla`NBdE&7mM(}h9^C>yQsa^O^#jfWRR8zD zf8{+2Tf6fEZqEmozuc5s@k`Ugd>Z1+L$L2KokV;Ymzn8>IJt%e`h`DEAI|BmMV#ac zdBAkZbjh53D!AUJ<-`0kRf*bt>$Ak4^^PI~e$))o%}4#zkss=eBpzSa`<!6yv?!lqQSs*-W_BLv z%|Fc1VBW!TMO%x2+r*>|PS*3l?NsA&dyRD&-=Fm1{^{-ly+eoV#i=%}h||}=d5Ed| zy7SJzb0#28O7sW4XOl?EyS2D}5H2_k+%ZGi<+7J1mzJ$DI zde*1^S-XWL;`D`m5ciV&7vW36xNc+~GY6g-cNH{lXFa-+6f|$c2XM4dLQ$;P+UuVF`NskRKtL zr@+hN-3PblYvcA5Lw#uaph%*;O!+b5%tNrxGJUx1(qyqM?-6HJLf$Z~64}4gEZG|S zcb5YH&zfh9JU!xrIL&n!cwO>ybt8j6s2 z{@nL(dw?75+Vg3W<7T91`@;P)Gjm+C_KH|BZqMFg(3_n;KNx+X6t|}n#*dlxg9Yk> zk5e&UA_jWvS1rMrGhQGr+Cv1sUT>UGiozzuX?tNjm^n|YzA~+HE8-+?o`07stt~}o z{#;ix)Lmv?Zkf~e+7ux@qth7t?-pH7bDOM!IIC$Va34ydO8Z(ouSMNI0{5H96c%}= zfb>-NyTC&~Z%cl$DhKoHg}~#M)#S|UGDDmmTn_xgp`~8Gh|P!#QlO4CyQY&|xIDoa zahjwG=N_U>ML7cS668MAb&9<=%aQg+KHGr2(w?vie;5dd=Dd`O|Dfc}IX;CeGW$S#^K?nA4WkKI`_uvhDiVn&CRch3~clpW1ynVapes&uKY6z~$1W^=OYM zAwB(2Jn)$w=66iuA0p0tcN_TfLD?q?Q}I5L60i%ndc4wok1IGYQ8q*X*E}znS-yHE z@+0cb1irc~FXO_(U5K-Db^|x`9(1_9`6uEOOIT0Mja-Ry`kI#@PFhn7daJ9Jr?jTw zI)VOcBJefyuQrc=9*gwM#~D0cnQ40J~G6h-ZMXtA3bEb`v}rAEJ{It(9WcpHIachtrYf6=7GLK>0A9~OCmj`Wg769;*6@F!hhl>!a0(8tWDIB$C_D4 z&m_S<(LC<+?S9e$JWqu$cYvRh$qh$p2ZE4ZWERXv^PJELH6tn)5f>(^gFg30?|G#! z%Mm9J9Ri-G`cxrejx6G$MuNce3+Z#!18{vvt6c=V*!x_Syc@35*tt*-nBVU*ydC)( zxgiksVVyF6pk*^0dF?Rz2TBg?Bh1UYZm#OOc?@ylOx}2VI()MH#>R<=lT=`zZvMR8 zlbpWI1?#;b@0q`_b?JUzUx7I5Vl=d~N%iH86Q$vZQ;WM$dl$H zE_G>BG{}gvAMx5VviC$@xD?)3vhKq3BlDkz%U2ncok4n{(uu!uEr<;=C&f0zBQE%T z6gZ{!#k%3b*@!bpalond&x>Aui$+}36y~*s=)?yGev8&3PB^&^^y10A(OR6JP2#>- z3Jl;5eZx+f6Xdg0* z@VOA<6Ysi|N5vW%9^<-*MuL29v0Po>ry^xNZvXK{@UNkCbn~qw1H_45aBgOyVgBph zvZ;F!r|j1Rz3zqYs^=WK5N8g+d5(qNyZlh~iwhB_hf_hXFB0h6Hq#Vw+Wj5C4UXo& z4)@JPoNxm2gN4!3r@01iah_pa`UHC8bFNy}DGo?azUl?sBxqu-Lb*5Ml#EHhO=(&m zS5N{FCykp9+#;u@A+YWe)_42_zV>(Z)IDo(eNKrx4&2doS8eWnTqlUGwE*s-R9NnI3epM@F?lN ztG$0d4^E%(26*!3t-IH1)L=h`X~0izELxGeFadGaxi7#k>i;G2>V^K zNkLp72I^{y-!fmGd(6b^1-WfC=zsr8Dz~oOKY^SxYt} zQC~0pPhGcm0r-*3CFnky@gDi1Y4hSrJ8w6XvlB#|J_GilmeRjvvaDk8_-9jM!OvtR z@vquaIL}aGe0f~e_**^qS8X{j%6c2%Q;J@x<$L8}|K5?n>h(untocNx{mzQ|lY3~_9oN6TwepYOo zdHD2?<%ly$uzp$UT;EJe1pC-=1H=kUoS1Q zY0at@#A$7?kFa!#F6xYvzlS(!59B4w4T|+DYK{1MMStD~KbvTWPJ9}{0 z;ghw$Ln3a!O9JqHKL&jd$lyFi3xfTN<)H<^ACjza{YF0C4*J012Yvc?r(r+BtAK}w z?dxpZjq6ypKa7*V|IXEiZ#=se+5PvQ|9arR9{8^Z{_BDNdf>kv_^${4j~+lDMBrB0 z+)9J69sNu7fU;7M1H%_p!U{JGC>P3o+0d55R(3m z&(4W!7hXU=#BX<{=y~_s$Jvr)ErT|GyC{Y3F9|Ok zPw73VdDQ=<%bU;c3itX_%w}aFyIGvSOy&Mzt!~bqU9#P7X71kMUnZjqoW`079N>ru zhsGC9_2a+jcJ$j$ZM?ZENoesF zJ~I^UdrR z;!VjeCu#86p@*GHeQ)`H@=jYf=y!jQP)W#VN@c^!!2kJ?sX7(&of28KUFGY;)^$}S%8s=Y5aot@v#KG0 zFP!)HVNp?k*{EG-ZaaR=P~elDIj1X2x8zLYYebXv(Trsj;uE zE%!PcW*MYdaYSPp$r*11!kXW!6;QN)l1j1Il!(lO`|Ry2%kv4Q%}4p{(59$vy~F?f z{?8A8(hIG;iiK0H1t~eziE(4?sIA<11|^Nx_~RY!(n}|1<>~qVRQL98l;k`l__v)@ zba>OO=6#&6S2nAQS?L)WD}3E_`NrKTZ@!K-qwL~_V;m>)|6Z44fWXmT?@86MzBN~a zU&}^}H4~KPnjQ8O`JZ1hJ-21DZ-YeRh6QsKrk$7PWZE&Uq*QS2D%Pox`C7S1$m6EO zz7emL8zZed^TmGhnFVmok_5gf^LI*q@?jAX^Ly7#sxwpNY|~fq**S6TE*uj*#}`hH zp%<{qP_#@V_S+gin{#|aMSv5YKv*~Dtq*^=;p%xs_0N|M+>>5+#d(88AYV8%GT%S+ z%E?mqQ?Cf0!i-0-|f0hX#Awz&sX7NF?Qo${M#n1 z&b57;PbSg}-i6}@n&53$Fqr_5GSsL$4@rTH$8uSKMEhOQG%y}|JK#_hgt;iu@C(e9KYMV zP4+siuZSNXh<<|OQ=7LJ<|yR2;bSh!VmQvVc}FLUoHbBEaVba2!2c(k-Ackv=7`fG zYk`m0c1UgfwGnYfOcam%7aQy*okpCk2akJfM(gO7pQFsMf2l`*^|sXPwpH`){Ki~v zEpU2`{n`nN+=;+BmXzKNTws0cTw$t-9fZ${Ye)LmK$F#|PSf9q~kZ zqAc8BTX7S055)_dRLFTzGuD89Qu0&Px5Y(>vxH$B+RoY;w)kii4RMOoc+k%&B%WCC z2wxY~CI$Gsgn2gk>(?PY?eu=&%FPdtZu7w7oN%oMxaP#kl^2JnVErL@+-7Th-d)!) zx(0FfR&UUoNL>Dr;mj#9I4|aBxbL>+N2Y2|ySoo@mOJ#nt(D)9kfbCTarSO_tYEvg z)!66|%@J|NJ-F|-4ku+}qGIo3{dqNryWz!|*RJ$uh?C#80NgV_u-|7n;9l7i}Bn^GtvboA{VZ?dEK6 zI4?>&Jl?evlH0Icbm3>j1u0E`^>(5QZk_W8A3&V-{SL`#U<3p51jFxO&%D zi+5glUeGtD0ymoWnr3!>J<>A-A%EJL1=STr`r&y;{<;kG=2B~EBjz|C3R$@GxY2V- z$xV113W*H^w^&$ac|-xZC$Q&U;_**E*QJ&goI4 z|CPv_NKeiF2zs}D^i>tn;)pZldHU_&TMd#}PKXN&z<9IUu`pgwjg0dZt2hh%?9sbZ zC;1HLCF1H=Jnp&TP>c?$^a#bRo#U1kLaWIpbuT#vinJI0n)Q7;4z9_T(Ypp{tLGeCuc{2{+M6K z=i}N}FnjATT&!yuV#*Tq{!0wJ- zjL76C?~tDLVF2{^-dz+vr2hqRAu(9j>?#9evpW1m5EreYfxe3I_RxM?T;~wN;4zuq zV|k<9quQJu59h^Pk_P%GeO=cJ;~pbUciRs9g|?b(R43*X8y;_-^VI8%G_DgErfkr+ zh$%(SsM(19%((;nb)bON=1+?e7e2>p{~NuYy>j+qh_joELI3Wz-ki9dGZ3emkbw6Y z$h1!J#C}+{gTMzex8-bgc0qcY`6u8%KJF&ly9*%B*y#d%<^_)8j1SC?D~Bp=xUYpW*8NkXaOk~1KDW0pd+ps<=!W!c30^;VTAqttukmO7ih*^|-ZRB~ZIxam_OAnP$Fkpb zUMJVIK@@S;ELDiR>xaL^1T{Rr7=w@}?fu1D-r6VoAU!qvCg=mKHtqM?7lb&83~vLl z4{IGfIzJY-lO+e^$3B8RDkj(vjr8n^P!HHghv*;m7DkvrpAY%R{`mLK=3nbn&_9sh zL_^#JjjOSf=i_>b`W)7G`_%O=lvFV)(i2xh{9E zr+v`}e(|mS`bBJK#90!vfM=d>D|#lf6LG3D)J68Wxz9wIB6wY<*b9OFMo^34%+IHg zo*kG8{AOZy@$1M3m@9q-UT|$ix_{P3%ooZ4FV8qfxbKhl&ji7nZNMwY2j_VI`I=4A z_D~-8_8aeY=}*2j`~bY>bN;ueFR+! z?xO>JgGday+X4BZuAKVUzXSb3MH8_#8*xgv0`T$id1kD=iik7w%z=xmoOQnKGK#pM zNgr_8?c}Qz{@KtBmgzW8`gE-R<_9G7Zhvknvdx6IZWj@Sn2czx5&P@Y1ke;xUcfH0R&iEUC z#P^X_mSJ@XZ2O_u?m6Qx`@Yf^q#F8 zJ%;sDUIO3MZLhy{S{CB;o8y4*HE;hRK%I>B8y^GTFE!mgVFcIPEP-vn56s!=CFVc?(MU85#pe|?yJGOuLpkf~ z=8e}=qI*7%KdT!*BL-g=GgBG(N9qGJ_leQ*$G@_&XH+B zv?}C>o^k;Avf!&E9r`B3nO7eIU$L-Qc)ZsO#6^`PfNPHKEZ#O5*SCaBUcVV!WBUEL z`3~ucduM~*Mb~>souPo^vNd>ou>FhDG`w#jn!|W-+&q3(vFM+#b!BzJ+io4V?H44^ z9>w{e#rxVK$DKY(COx-tzGXkz3;um#1RkgtS4*}2VS^8 zDNA$R737D_+h04DbliOGaCJ52t012{mU&xx-q?fn#0@#%=i$B`#Knzx95RloIzxO{)MP|*fZM`s6C8LP{%sH zG>|{N_h!A;W&(X;#M1)}nyVxSfNy zK(81xf9CY!FNiZ72*8zAXy*?Nnjs>0)$o^S*7 z22SBOa~RK%o_v#czl;oj4=?EYlQ+&D2E9>>v-{jkTqiJ>Gyyjry}iCQ8?V>Q6}*14 zTp4QVa~-#zN`P_eWWB?^Jmf9T=Y;ct;K%8CJ zcPp7SX#Mjj(u=+w0`Be+wohxjBjQ3r?Y zgp~!?(*LXr(W1b&=uNDj#Ji74 zYt9bcD#H6mrnLs>&$pcU+T+GTde*q5z%x&8|6TDr5^-kTR30y5yX;H2i2ZM(0?$@Y zENBiFL!8bi|UrD=X3x4u{44kl5NyF_q;Q;*c zjl07WzToSnX~DYV^i<$v)kUU1*4tKqzHv*+v=*a3&$Cu<2i_dl)vw=y^FPCO6Y$Q_ z(8bTTI3YiTZM^)`^(b=Tdjf7J<6#=;yD!};HeTO~^t6MIfxkcYlXzq)UZ-f3HNZ#D z*KN4%pN{l&TgWrc^Va0y`t9Pa!WkuwE#_KQR8`NXY<5MEUpJ+Tqeni?^ zK`$Hj)6~Wtk2li(2;j4--q)r_;&IMQfOX1w-n8-ezOBON`7|kB+B@4QqxjQo={ zp{{VAFLuD0IIs_K%EdhJKi_W)+pT8{=Cv>%ofj1UF3g`LjX1GjJm?osc8)P^I)J!H zQyg#=In_$fKVRD=@C5eb&MPiI-|wp^g7makupT+91xLR~@o7h#(JKXhG-Z_{`xm<* z&Rp~vxYmUB4Qm=g5f>cn2W}WHwX`P-=N}6332^K1qb)ygwIMyh8tPkT=ils1R=XsQ zo9+wxEhEcbE?$Jkp>X;Z;M*S@)S7?s7t&LmRsi?5{Sv=_>q*3!%L;+}zN}_dw|ip! zLD;W3@7rQgvs@pylVBqW`h8o@+^dYl>z7b9JPfj{M4UES3_Qwrd&<7ET8J|@Kpt>D{=&Vz%v=g_fy(QkKfQ6NN-z8p z=0{q9pAT~Ua?1hNf%H7cZ_eqbc8d)KIw3txpAPzK!Am}ryvKQxzKQ2QcdPnC;c>YC znI|`Z{)V$mhSUIFuc<*ie(Url!yU1>ABaAXmz-}khj|7iEk$t|?Tf%qzND{G(%l`1 z(@C(-I_HNEzfAi3a}|3b&pQ{ovU{`F8(@7{BKRrMpB<~3j>iMLlLGv);@x#Oj;_Gh z%ZB{m{P@AWn(AHnJcMyL9`rA!?vR&UdJ?)D(j_Z;F`nG|Y(w>iT zoylCz>(7n?#j-EY@wz}b`v&x#DUsh21ewSW>le@e+sv1e2CcZ?*x@|?U30TD>0QRS z{eimR=bb`Q-2x$H#7Sb?fPaaLWk^x15oZ*O0q<{3oFwzw5pm)IUS9eUUjA*{8oZ8^ z7|TIFED_aKU#pJv%<{kZxAX5L?edwPN!ZUp$X71HU2V!4#(3OPRL=Z0a1lxDbzj(l z_b+Ts25>RgjwIg=I6sSihyHgFfA-raToaFHYUK;iON7O*5}hK4;<6KF1DBsD_4M|v zKXsj`H;*rx!7Mb#>xIbsPrzrd{CT5h;R1YJ6QO=~nP;jm7MO_F1(7}#(9g3>uw5hc z=RE4D2aneXOyBN^`z4NKY;v2l^Gc75y5WpAe^zCj(bYkLYy0Dv$kNhV|4%L$f?*@Tel< z>_%9xU9^HVWEDjP5T}Ll+Ouj`gIs?98^l=+P;a~FJn)v$+=%NI^5u^ZSMP%D>iOyy zke*;+41C>_nQ9g{ryx$!$p-GU*WJJ>5!bh@$PD1F&bwwsp2qzkdesQ{mb?3>^km@u z9dXfl;9g;u^h4H;NB*h1VP3d+J&@~?mw16V{q%gE{FgT0tb^n3z6$=MdnBZ9Sf&HyGjT6|HCke$~&htzhsD z^21EM3p`u=p7F#=oImMmBfzhFxIX!)XOHyk#qWUMux*^5JT(My)&kyrEcf5o5pDAU zamraL|^|MkFsJ@8)-{MQ5j^}v5U@c;K7 z;QK(qnpClCZ%u}8M;1K1Ff=lynePJyrQGgNj~aI#na$?>Wg7Pnn-DnOyI-@dHBPF^ zkQBJ_GNgFp9`Njl4wly#|<1_2xMjN+YQ;)xuWzUs#KdI~(P_h`R9uCytl#XNW z0Xi}Wl%~z$3#XT#A8~WjZRW9~>VbAE?2eB$6DZ_{TO*dUm_OY4gW?-{`}WoO8tdA- zO^D`Hm}9~%;@XuL?2+ZSi=VEe{UjwyUtHr+?~6s--jB7T=5X!Kr!2SNYv!^a-+hd_ z0_tl%ELC18W5Ri(!kBPATr(5B_7?td7xtaGe9M;ci?GFgG{j{`IG^2huH8Bjp`(1^ z)Vd7I-``p|?@aP3_JN%Y&OrP(oFLj~9t^qf$sg{@s#WAd$PHgxSeefA*dx!D*y z2W~j((`PY!;TD){4D9mWYvtR2HA-fsfAv^1$_UqN)L3~2pV_9mVlBf0*%G~LAxCb# zO0(cI6Xcr3jDPx=zm*A+F{QG%R?#$m6Q`U!jayFv>+R?qZt(0_Cx%B^*T|fm(sc&&j5yi1( z;RYeq!LLDsB$FMl&*#I~x? zpDPwwPFWr~|L1jIK09=ddUNJCDSo@7MjF2}=g+d5?dGEO{h$D6X#Cqu(nM~zL}@&- z=eN7iz5i}SWK==Itg5C>+VPzI^%y%&rY8`rYz@Wv?Y^6a3=n#!JkyX=7u`Iktz@hn z5uN+F+!$ZOZA1 z5~D^v|1UGMCA2O4;ob+UpH%t&I^$zc;L;%Dy)Jxq=!wVvHqjq^;cUsS^(B*~v>vSV z+qj!-&8dXO^kpLV>K4UhZQ?Uqv0%4(rBIm=vF84_7vZNkxo(VEJ=ZKjOCi$npc03 z&rB`Ewjof-Zql-iMlD4d$+csnkydlfCcN9lpK5(*>D$gf^U&9J_%R_WX0u(()d3V)~cB+NAzy;SyYWjx(f zYW-%u^@oUNPwIKk>wH(YaDC&=o<|>yN*^z?Rk$o`#}^Krd5^j@P3AMRSo1hwfy|^tlQT&b6DbL|$@KHVS+h>_ zXNEIevk|>2JevO*Uk_^SUFn0G<>xGVK7CY?)n$8O~G=wORF`S#P+ z(D&Z8tN^}d_HyIJJZyQ+Z`XAv$%K%Ro1%DZtpnxGF;0T~_ui4w!=if)TkzLU{1fj4 z`D$E`@k{BH#3S`{(j5KNX6dxM^CQ%iZhO6Eth?jg3b{Df8W?ZzBBhend$=7nD0k7z&;x z>;HWN=h@u9-AP0l+BkPl1;1Sc{n(E^fv-DtX!?Z_ z^nSCHyF!xbQ><0^%-g--xOVfF z%^%?lXRNuT>e<$s_G<#BI${)2AwIJ!Tr&yf9=vgy#rX>^j3f$JqC*aG$wX3yOJ*8% z5ue#Zu36}V*Aw`nEwYV!O#8OfYf00yYuS?x_^NLbr<@}YoF+-{8 zE$$cTU!b)X>Gf=V%f@YPrO4NS+qTChWyRwbX4kcT? z%y_(R{bQH2?_}m=|3Mdr6{E#>+6vqG>`=9+XmTW;KVF!PnbdQgZGGRb)!!P;-hYVC zu8Z5wFRMKNXCj=f)ClqM_3_DECUd6F+UPW&ogdfkz)F)){&;~M-FK@Qn?z159(?oa z*Iui!cBHjjyQ3fW;o6&b7i?N)&Y9!*dnr?S=1H(aF6cNZKsto76s zC|deSvv>UXMNdg%%}A)Cx*#0lz~9QtkxU!6%d@6x-1ZP|X#bqSXXnUmWgc_OX1;K; zq6b5}P0!vAR=vawaN5t=KmL2uNu1p*fv{F7SccE+;KS=DQ}@M9NVvOo)y$knVq?vS zoQvg@nHO^f`CIu-p0fJ#)sM2RuWLpIqq4X1*>Q>&0zq|sRu^A5>-R<118Jwm>pn`$ zv_BKWpHt9KX&bD*!ym3Y=f{9h)aUKZkDg5pl72`Y8;*{O9E}r?o%zDCr;gZd{iIZG z>6qW%RJDO`x+=`zwz8==&ydf|*7Eoai}!hp?+I&o=zkBRj*UiPaLwLyTfg8lTao{+ z)9`Y}g5-$@u6Yh@=A6C!dkg4qxMs(%I4KimTtbXsZMelf$t!V$TcIJ z)RLXXZ+Gg;r3mXo-?)iEDvyVAm@L^B5lb`h6^PMKf#7X&`+vTYC?)fRZjy(8 zwTbFf;wq75&YM{OjVH*Nyad9egN9f6Iz{&SiR7?H1!hvVVw*PKHRQ~ef6d6xxMmku zosHr%+xK!MtDg;|7>bHvgB|ns!0{;#>MsD8b+V$dk=>HLtqXTTcGJ%s#7V z4f93Q-I|(5QZvyT*G7)tvfw!1(n@~BZDhx}5dN>c(n{Y&nHq7ssQJL!irmG!I0@w6 zYol-y6M?X2rO^`=#jIo za{4`rCCM>|WNY$cteJo}*DT=nmw9|>a#&dD>QMzIiKWRJ$!bGT)XvY5pD3bP*I`xb{EDynE#vmF9e!1ybUY#Nt%nC zw|5QZ&*0->q4go(0)-pU-6Sx#x%_=QNob49V8^P{hmfB59^M8N+NN6+Z+?R_LpU#5 zj}7QM+;U=Pv~w0!&Wn1-0{HtQC)Ui3<}80)er6}|55c2pxAe*or#!p?e86gC=eN-j z#6>HJz=zDrf6tRCMV#?q7VzPLrS@!^3F54}xqo?>K&jW_o+rz(pLy{1qcGZIn;e~8 zG{h;T@b0xlJK-Y&rZ7}C?T4+EEJeh{Ec z_7DV8N-^kF zhuR${uegi!l#UqSYNaQ1)r{_AKiTkh^Ds>Th31LTcMvE3dI@^X$5$I2ZVDq#_k*{i zg=x9Q&ovSFh4m5k%h7!2J!gQ~sU1@+oIA4F!0NkSC%Pux*^V}Z3cd&wu7}J(jRf* zYaPJzdKd2V{Digu1d$(CfZvO4Xq;j(jQum) zmt+rbvkq&c99X(DJOSxNe-DBFZNl)mFIFG1AKU4`zxQ@l$tL3bAY1|;0}Ce%_0z=3 z*gxZt?_Yg5aZ^y~kC#W0ANmGA;6l+Zp}$RbAkNwu4qQaxUbxxC62zIO;bV2-3?1|B ztLTl03tv0}dglI=%XX_P5GS~-11|oh;&S+WJRWFDw!kM2PdAR5*S z-+Bu6b5#oTIs(>)_O53Tr?tU257%SW<#{N5L0pJZ1$y(>iu&k1z@GyQH!OamwQhz+6ed3a4 z_Xzq2ib)>$zkdGc(s9~Gh_elO{dt2{bfMvpJL2S#5YQJK=x>Xig(_77MavQRosd?U z>fEo`5AW@{;e|p46%XcjAWl`|`6=;;Jwg9{5^=#5Cg7)(AaSla%@1*gGrT=Iyxdpy zn|cTyCsgfgps$o%l>TT&8q%{KP6b|N_FxjR?la<|mL5F*=umYL zKO3*V%+Kb)A5Rr=-(?wy^b|>d;7`qiD{Ia1Jffd>0sh?GYG$tFC8Q@=Z2|t`$3Ypd zE2ps^P2PBGy!W&ubpYo9(mpciI~JG|oa}HvGf9x&!aMY|z6w?BMt+2tP`8ACxFPwj z_a|P*nQhO(&(}hyrh5D|fFLv(-bNh$J)`%{^Tu_^5BmY+^YFpDCzdMh;B418FJ|U8 z@bkk!ewkG<=Tw68qPhD6AKtv^MS^Ai;0=g zx8fG!Y}4D|N9%UGpqVO;15^sPo@=VFip)|BLVCVS(7&O^0o#Uq7-M5J7Q`7h;jw{G7ddU|vt#vV&20s}#|nYsIR)BCPnr(#C)C4d zTCP<9!UX1QG0^XOY4|eyGR{NjD%|Tm@aEARwUs3>IYsTR`sZ7;R?iAaSwr)o{0W>(ii8AG|8{PDIFDl1aO+>ngX!M<*dY!5zkJm}JkAr0R$J5f`+AyeMo&QP;9HcJYX_Cc*d*lcUy# z`uBZ8oL*B4{uQ=Ont$NhCB#V%vw<&8|9R_EO(^2bK-g!6E&d}zORn@roY4>aqcGJY z5;yj_;`mG{hjAFD`La1?##K?ICsOnjS z(_1o;p;v|D66xT4@Ux=YQO@A_bEGFqF@PINSy|>+Vn4)%Fpt8F%I@gi-aP~9NnVFQ zzeZtGI;qMLaoYTJE;q8iP*)I+IRDBQT>k9J7QS4Z-%>l50$;ma;>nQ-XqB`XYtQrq;5N;_ zdd`)|Vn4IF{vDOKE0L$wBTiofaU;w#{jtt2e!Qozp$0+{c{YlnMMGEnm0t8v0rQf#n_z-2daS?CeRWkstE$>A;UH zabk-krDFaV^8c`)`o~jJvT%MV7zg{@u%l{53Q|9?e@3S^_&Jtp@BVFv3-ZG}Ckp&H zdCLCG4BQTc1IK`$l!>PtA?_~h+ct(WmYQ}0@A0=bp=RZH{85(>0o!~ldJ6{U* z>NeQ;1nH?N&q1GZNxg+FfyXWRM-T9;X*YMjc#iiw{GqPE(`EWAT|Zjla=*6&zjb-n ztZ&Ahh?5lW0ngG(UHesJ5OIRh5-vZsrNMgj4#a79O@SA(M9U*TK0=(?e}>D~otV&V z?0`7sTM_UlTEVH#V{a>`Hu?j9x>$0~?38AtC;NT`UgeU}wCBYu#7Wop0dF``biZ&2 z=UsGHBQDRlrZ=+i4$>2Ddpz^T?a4S(j@Jw35)a_ayAfVypJyXKL}?k|thQOo_# zElAJYU;|uffGTs$Od4_4w-dmX$rJ34Hw0n-v!sE~-xVK_#@f2O1ocm5mV zjE%4#30JGsriu;Xc}>2)3G_O%EGJJ(*@nxFTMt~%YTN1TqAu)z6~u>dJ?lT=4uyDp z5}jb58@}>(Rg~}}JdYTStHF=KQc3D9#~S2^neZ2ngm0cyf4S!5cg(#V{{A7{#{ATV z`qv+DeOPdw7QRj3lEH!NxE;t!VxYG(@3?t#5}rq7pJ6WlEWPh)>3ZacCPfCm<7O0b zVmw~Q>17ZH!kv9rpVXFDMtYJ}9Ozy5KU}?h0zTJbn0NtqzaDo{!Tl)GGu&H&?>Fw7 zE52~61h?8M`3=a$3R+U$a<1jlP_Fv)Q z3C3qPZxq7i&T#|(r+f2aPHN-4ny*_IcyyQgF~zZ;2PMzr_G4W5$%j6ziO3IgC3l>} z7isF>i@^B|)ePcBcp|?qiBf~d4{POJ@Sj@r*3Q{w8uCNA2K)N(>&pihk*!J)r&1vw z2*0z|Mo?@S?k{FoBKXN?6n=m1irbTx2{_6b~#`l!lFJH{>X};Vyme+YM1O2ymx6Vs$#p?o7Dh7B@s>ua&@v-{v zfxII8*NYl`o#Z~;4nMB{)kjRt&un_~iikK>9`e`-sSW$4EzUlLIKLj`EfF$ur8347 zaK1sW0RItlziQR)O~!G6-oyg`3Ve6&W~X~${~|D+BNS$oHAo%C=UOxYI9H5N^fp<& z+h{4$(;Z+Pj8HmtGyLWLA?ydj`AEc~A8Ma#i}3hi=tn`hYU-iAPL`fX&)~lRT(4$( z!gfA9u4vLzfUhLRzEmqqMtZ@K!@$>7RLrA$NMk?m%z&? z>vIvOKF|X0QDR-_H1_k{f{e$&cRy$CI1q1$^z^JS;6As7BRWvbV{o8fhe%7FYfBAwtoBkBna z>G{%%L7#1G(7ZtIC*lHn62NnoibqK9zl%6AU^4LgdB+7e-okkcb%=Ytxr@!LmQ&wh z{d~w{BMN#WR#BBEBhK*s>t-aPM59gV%jg$*IUn+OzQ2Enc+3o1Y&rIG!wf5k=MmKl z*}@a)YmuHm1maReoyJ6^%wB!Osm2foBI>982*_LAia4uq0r+p2=XA1eFavYFel9;~ zxYNH_6Z?^cI1|y3S}-l=fiU7E68Cyv*pe4m&d5WYKEECOy!dYTr$YyE%Mk;^luPAm<@=UNmUxGxaVo$I_}_iB7jMg9;C`tO1c zmDv?I-{TLy4ZQD=MA%kg1yn9y{G`7;lF;k4aAP2D2ZGx+;1r9G3BMZ~u)bymaJp}0 z!=;e(h%*~ty@(XQSR-q@JO*(_EUb5t61_90s$ax$mE{QWBvPqTj6$j_#eSqAKZ%@g zGIXG+=pN!EJ;-MwRm1t~_fMRQIKc(lCsN(^nfkR%oItQ(IUR{ynsj(ZJrTD*X${1a z$fb|7*AaK_!Txu4!*wlfuv_4xC51S73*=Xk1~rNu&zf-@V=sjDF4C|@`OR<#J`W+= z!g?BM^iopKn=cdj;hTK|{BKzI=AzYfyw1`lL%tDdU0D7$ZBrnwPXr0{j+L=dKekIC zPMZbeEz;TYjfH``66V~W^^A13|M+pG2R=s<&~^epd#=VVZjhgd^sGNU!1wMf{bqIy z=eLx5*1!)KEX^KBz;Q#sU(1EAZn=(!+koEf8l#3IdP%rat^+2%le3 z%T2kNxPK-I0LzcQjRq!;u#h*Z$1zevkZ9Y|n!}LFZ=HR8KnM zWaE{}GwXhVnMGQ1wq zvSUD>lOVCnKw&5LV_OfrK)_A6Q*Acl^jAlLKfI}G>vkA(;qJ{`UgmpXnMWtm3mBXO zULq-dd`%wImqc^S}F)_MVCK!X8h!T->zr`d6H%30;MC zHuB}U$;Z8fnvtIUm^^5O=1$NLQ-i03w8SCK zB*6On_wS?pbl8i-=4!Pg<*IFyu;%!JzR)IS){o9Y|muLwNBTf~A6PbSdCwt;@>(65T8+H`^ zI}2m>_ZH%l5#k!yq4m2`^t~&k%aNXSYB|)$tv0>J?+QNIWb+9D_rIR%!+)F)>6ugW zfd~FvzUN8>KDiKfx(ob>eT%oDh$^lRNuJ9KN_DcX;hhQ9-y3*n+@eeT_wY#vS#K@y z6Vo+S#ftHDu|l~1V+S;7{1fIN|D@ZnGwHt+mUjNeyWhB6yCU$Dc+pIxqz0dmQf|8g zPg{^BudH2w^sL=*g4}=IC&+D<{|MsDgiWBou_EfDL(5*o$v?T*mCqiRSC)bY-Z zZ=?nM7d{zGExW0Q^ujH6z>6YB3_XA06GnzN?EL#59nW=ZN8X$T#rOp~V*`dvYo%{efkUH_?Tzs-gUbg+Op8=uy zO@aei%klN@fSvY$a1Kj*iCI75LW$QvPv8IiNGKiOY2eF`)eaj^2eHp6J_dv>v)`d|i;!4VojKcgzd>fUlQ%w`Irl8%WQ8 z%pSO@uTlBp2s{p%#c&61!1_2@e6p4b($lTYL2sAyvX!tB$35ZQ5U&PY{+wa%T8{gR zWDD_Rz+K4laI(u-JFMllgAe~YV*c@L3b7D9LhqRY|6dfBP%G$KF^jR z&Uo|^>Jt)Pr0%F7fjBFuhRd&(URtzh*z3ivIv>I`N zhr+;bDkq+z?LLh-^B8yBX7u(y7#MrO7i%@d+kr=ZbB(oUeMNe z`w?gCXa6whfBBu#*+R#h>e~c-z)t_wv6EvbYkB+s@Og984~pK8y=cOclC;f~{=utY}2 zyCl5sP_?-AVM_-+7uqrjl}i;50{;_sI?!5{;c?EUod7O+$f>oHjn_eD{bJxUtCYRP z+;Bd?S_~(-gYuVlznJ(l9r+i~y#acqJY6665`2P8OHBf<@iswlFy#Y*FEpPV z6B&|+{IK-j0#}={%ZE7e&v#`o3dA;5f@570Ng}3O~tqXj}w;iR^aQqG&;LpZ$NtHm1DrS{@5mQ ziFpK<>-vGq`zEUSKiq|R;&R|Sl%79qDaQRM`~%j7K}YYL^#S#`eW=GeLGSGMP`2@8 z2l7L-fc$OHH+D|FKuIb_kiV`mO!4u{-p_;h>LZ*5;;Q*I;ht7 zi(fktr*^?NO9rpL+)I$zP>eYH$aBzN6IT0JoI3?^(rylobE`1d0pF=2n!+8v!E6(mi^8&a{LmtvLAlwM@5>Ua@f}TS7vw*K zIg4W7p3K1Q&sPoW>|o9lpVaOB`%$@+pyS{t-~PPvB)hYSvm|AKKQuFyh||LJjy>}! z@L~^fIa-tt(lg$3+p|1-U+vw(e8hzkxYt{`zSLpulCikAs}%fHwk~mc{0y(x!u_GZ zs}4@^)l;@be)x|OVkVU3_hUr5zp*w9_HLU%DDRv-H+Ren_8| z0B_NJKHT(cY+Y+u1^mqlsr2(wT}V%r%K-lN@|#6b8n+Q=NB;!gt!Xe}%jFu(r#S=v zxvIywOPr0kfG)QmdmH&vlLz-;{d6km`+GX0l78a2&5m;dJ`|i}mDx3f^rYD{|MDT) z?@cpEKkz<|m3;;{on8IqcpJ_)m|7NGz9_EYn6M7=LoizM;SX|HVuNL~uIFDtl?FQ~_|I&Hxl^CQahxh<@4H6$vbi(^A#$m`$hCC$P&jjQ-AU#DN)~O-S zu+Y@CU)~|kO!5XlUO5*E*0+lyE_Ceym)Dprr7wy@oL~j{#*k0n=he$aT(N)QNuWP4 zyCtpp=XAswbVuNRF6k2M?%Y9~IUE2yaQ2LyL9_9CO^f*q{BXHn?7-L)kK|(pz>gjB zGT+wWkNreg0}obUFssMDA;*_420X-YXLZIc+`p_in7>0Y^D?a_EWC{C`Cu{V&n@xs}hx}04L!ck< z_IkIfZZhUH6W~MIBE6@nBZxCBVP7*eZ2a=^MV+yJe+2P%m{?hw{U){(=>-nQ{`E6V zYO;G!Jb>d8+u9a5->}BZp_HviPjG^`G)%n_>U&Q$4RPXf7|+AhmP${PieSWP129g8 zCxqmtI6SvPoE#7RI6UcRbL7cG_*0td^VxFS3(~l4*szDqZHa4%}-*1597>oD|{Ft3=J^d;8I@W8? zU~G;^ytcL62X(lbL|yDpM2U z-te(UyQ?N9I3qn%suIc#7EW>q>cx2ieI4Xc!{I4ql1mSl;`*$;1^Q&EfP?3qO)x*h z9Sj)x#F{FB?B`70Q*6MvmYocb8z{BZuSfR&$Y@Omd~ zWe9!><-~Wt%DaU0w7u_u7uB3u)NkH~{p8&T{-`ljIc8-d;_Rz=z)NG+(5+QO5oeY| zJRh!jqoKNW8s2yFC2+^#(={o@El03_CY|f2vQ2kx=bT*RM{q6VMZ?dWKl}W#K84G5 zP2L4a_6A)*d$o{JzAw6-+@;|=@ane@E z|3~-}i!zEealXx@!#C|lm_eDAB2QlI+J_a7j^c6`s(}Bg>Y|%UN*5!} z?1ubpWU6I1bH6LDKVMS}=*1&uO311dAU)moDe!snH}1cGhSx{3D#Y^V0z9(dl3`BV2Rziq)TQ1g4BYfL`k z?DDHzu5U*wbZJ7Iv0nkW@mptWBm4V^6Rlx?J+gMD{*!^8!`QzR#O)CiL&vB$P1cAL zj;n$n^Awpmp3*qJ32?tLJhCzP@sw9oN2F&~K|VjS>A~96wL{+!XG?LfYfHh@FrhHq zKI{OPzay6N62Swlo3S6!J}B4ix!QT*i8zlEZVLpy_w-`du|b^ddJ^=B*5xA$*W+^! z2A>-6sdmi8qF zaiS`>-*bD^Cs*yk>xl5Le(>|4?p4Oig}7hH)9Jtq^rWrTgmHXk+oS_8c|D=*?zw~5 zzaGT@k;jMLJ|x;%Y~@A%C+79zTMUx%0R6jd|AVD{GJ+ ziZsN-k@x-2GSGO`Kt zu>bHw;Af=9bh+Z5hlta!M*iglqD;D}p$r~xBxQ)V1k(4VkynG#k)Cxe81#HwABexo zb3vSXu^hO7?(5qP-|;-6-GK2%5RS=7dHq-r>zx8XPk$!+ap?05#0i%mFC|Q}Gx&6{ zaS7($p`f42+}rh35$7$;3mL%08&Zwqx9VWM@j2kLh{r@2RyYsgyYdpa;&#PpNBD7G z!76}tmY_1BcA|R8bmWKr8Tyx?s_cCt)8RAXk<)ZLEzi?3)3__6q0b^pf+ zoR10G%>iy@JT-IqW-WYOUK4;jE!6(<(xw%0p~R)Y-Pm&%p3L+@oPQO!o=5Ec4+b}l zwZFzh&>u}`n>~w#_m7Mu*gq0Nqj$=t&v(G(vXns|vmuXEb20&O!cI#rk6G|yiiZ*6 zj7f06h7d1xHepF{5aPt8J3t@5XTzjC`6-B#CH?@v)ZoK^?jVj=)JQm=BwRikXVxRU zANwy02YqVSVXt%ve7;S&G#U7fZtIu>26*4WRuBVzbLH0g;g5QeAKC_(*M!?|lSI=S zaa^U_LEIo@&*Rf<|2cMUscZ^<$_E84(q#Ryp9m}9RW&O=Ng3Bz;I*!WABrBg zBR%O_4e*Ap(ujHjj!PuLV&E_DT%T#S5$E~jXB&YxryZro+6*B->@3Lh39WN(UI@K{ z^9pt`x1N7|PgU(L!R^c@!TLfNsy49gnmiZzp}a{3|3h`5J5HRI#{3mG&I~`=uy&E6 z7~+f$zQ1}RDPNU!x(DZhtTi3L=?`Z!^|bK5l~(G+*k@6!1yqL2i{1nTV6f2Y`!xvY`YB${ zoZL7QxSV=(%!l>g5f`+|2d-Eunf+Sa7IF4W*dGy<84+zO1+gCrV>#$mZy1c2>Mz9Q z?pg+1?^KN{DG2XV7)>p}^@$&M7s%LS|E)#9&ECHKF3!f|jhs&czWMdXzAL)(k)E7* z2Doj<4uPQwc>FMO?Sb!fHoR(ocP-L0r4@O@up_>E~*xIVcMXNbPK;Ya=ywcv7Fxb^oB%&=ZG`T`@)hxi-T zU*e(nwx3S+;rK&0zYhL`vNV&LWVd0xl|JzBXx+Z>aD1Laaw`BHk)vT3&A{WC`~>1K zF)kq3aPG%H$PaVAHRuzw4rrX0o`g76_6zXjoJU65?LQC~%7yimn0muHZXxXu;gWo}G6XJwpDZtZ9W(K&}9!H$+$?f+WWvNdB9x5QtIso&InB6~pc93Ne;_Ml) zZzAUXAS_DIeu?=3h^xehszcr`mUw?bV*ZA5E6T5Bgt!kQJwp)o#l(u9Z#uIc6eG@T ztOWhjZ5Bp>6C)6(u7Ld`u}1T!roQ`b%=y ze_i-lq>wNc=O07dCUy%utj`z3>lbCk0Ql*d6wMa&!s{vfI2m|v{jxjf<8VDWxfbx> zwZdeNFLO}2j6qljiN9Z+^gTBhkAGSSx1RkJdtdeSI8IVL_x$xk5|XjcS1TABKeDi1 zljwKVY#uRi{G=Q>4f@IHc~(h;WK=HO*_z9%{P%Tb+{5j#3iit+3HBbjj+r=)kxYj` zFKOvDy{jIVOFjeZ2ub?M={pbGM6mxv$SX(-LKceM(81TmmVOR?)JF0RZcLwr^n9rq zz|~a(9&WBCAx?P(`%}`g%;2s4f_QzTTzv(4{Us~D#uVk@a;qU9Bds{{FxJ`CkkCuLb_s0{?4)|FyvXTHyat3!oByZO5v{zO=YayWT|X7Ji}!ss8s&3*zm!;S^}DCZ`EtdhS{^g^(W=b7H@kuN z`GvX_X99JTwa;`<_0U*da(~BoI{}n^DqmNV=e0Y0=47#fvUMXP_Ckd1ud_VW3JsC8LwLCVQ`P7?NSdE|>66(Q=7 ziVsgU52%Yfip-z(%RZSBG<$|y7>}92sM#l~2EMv~iYwoC<2dIQQEdIO6W_&?$-Dk< zcCQanDtU?%8wuN7aPjG{s~WeetL;XAv~yf7_l_3Fr~4VdF`7G64!Ym^cp#ZkC#n2f zLM_P5a=aP8>!?|mXcmLFG2^tST=2Hh|6L<5m2}RS^<}&r72P@AbgcJ3Z}Tg@kt`sj z>TI;;^NFBbxxH%+?U)u-i*9pw3^3GJb2Ap z&3nm%Gpkg>+`3hwY1Kco6382>07iMg=<#W z+$elE>$+7eXM6jv9bfmT-QkN&-uGye`QN8YEss9jGJmd=e0F6bj~UvX%$L(%!CTy? z)rb5vk0#IFa%$p5!gD6)bnD;Z@atf7#id(#uFk|&uetVYc#Oq%<$><}Q=CoFzh-=> zIG0mfKl7OJPx&Fd=>bJbRAW!&AyF^Ncr&u~=*2Dhvx)aDGP1c_SDidcZAi71Qn_Pq z7SCgbwyevN6u0tTT)GCL7sSCT* zWXzt5%s24%7UJBB8)tWV)b5DkduQJA4#m#pmrJ)Tf9fH6Y+n>(&v-lhdZYaYUgo@Z z5&PsfysxZq-L2Fb_N%;ND~}yIQjV`XjNkjnjSmZH6Uh?NH8~458DC|!8eST2Mn-oE zS2YVA;w>(2S(dT+jk8;qyfB#Ae=7eLj~yq@5D57RUrc!IDoNs6JGR9a*Iw7`&wI*$ zj>qoGsGY>*NBPK(Tg^F6at9ty_WZVIH#2Z@`T(SDFo3G-1mmjmYZnq4x`%EVJ+w@!P z6C1{x382G|8<#KgzGGLm!{_cRvP_$&*}>FDibeH2X3IuP({gIj;%$>3v89K$&+AF6 z8^}*yDlofmyd6Jz)GjJUMV05`4!$5iID4^^+8j@mdg=0uGcf+WIKFSAW{-R7ahv=z z@7iBniT?AxW>==sPe;BzZ;tZVy&bhPuuJBB-Q9joXP0F&bJj{(WZupH!Im6vCb(tP z?2<|E6W*&koKv)AW#6o+ok9hNrxVBr#@i9nNA12gh-vWJU8~4<4p^{!+XVZt+12wN zaK5qd@8uED3C?YkLEd)(v$gCdd56`Re;GXay!Ve9&%h*n9W9Qq;rt`s;_`Jw<81uu zM#!J7r5aZKEa54R^KSyd(o0K`rxSMG%QB96@UT(3<$lsj$2FXD)p4~%K~uci(t*cp z`SZvres#GvA&;U8HMazD2I4p~PEtT1^xGuhSj(N{mLv6NgP*5LmFsK9isol>X6HCF zPK@FFe$3884|y*x+ssXGUdM>MR_zJO(kMAjBaE}l8nv^o6D{SnE3aODWl*PqB`1H< z&2yDCXI781dp2s9q$n@VYuA&yOtEABU4q0$!lSZH`)?AXDd$@K-3y7Z{>$4xD);v(q&1;+HZy?g-kiw_8{uywm6>hu8!JioXK)S z<#C%+X{em3TO4%IZ;5h%TKMRfoyS!ZnZ4~7zrtf?s?>er(!HeT10P*&s#5mwWPSu> zRys%Q8t>J;>1!2_6JDYGHsFTWi{HJRdn4nDLt|z8EAt^W(eZd$nyFx=WrvD_CjI6UGQ=w9u!Ct>d+OCb5TX^fR-rJ^sMu zA_aSn|8e!?Bv}N)nUzETd9h{N*BgJNc3y9s;G7UxZp0SlvCAH{Q`CPhi^}8nf|gnN zB;~Xeqvj~DYnP4k`FPBpjGB3$+~dky&3?D-GuC@sY;Rn#*2zRvSC+@FVAO8yp=*h} zcDaF`?cu z4*Rp4=kjztYK1k;5^5WDP87F0Nbqb+2!*576uhSx%40U~FjYdlv*m~RBN2mZCCyGe zr8SP4O<6qoKbxmtCiHEpYo@BU8Rp0=i#BJBw<9t~?W{`;7xT8tiH?Y`{c~>^+{kjg zP!=QPI^K?uF=`ihJmo)c#ePuO^vran)7iQEcdaeoEL_iHheE`f^wm8)mnVA4=BGtm z`oX~~lf6G~+3Ln)hE|2$0iB2sib3`=(&RCWHhT+fyWH(4Rw^?^KPEB+m6>g3TA=^kr;sba?It8o+W z`Dkg*D-tjAUflDGDfFlAbvc()o;T{AYc(EkN8~gTf$%F@0-tvLGostB49G-u&H1@u zcJey@k~W_BM??urEY0jHZ+TsBKGV&1$gJ&K*j14e{EH`(Cfpe$7=h*PCLyq_9`xt4ZMen?Tr}qm6UFf2#R$zQ`6O>b054&mSc!4A=3Tk`T~DpGOVE z??L6p6~&`db`-D4(_pr^R($i5SK=w|#%OWjk7w~_aR;dtZobn>lJ`uj&#wISD3r$x zP4m9G3A)j0dy6#Zp9 zwM-hly5BvfD|yTu-*xNT%Bc$)=>ND;y1scOk6Fv8+3rqv{Myxj8YO(QPDzNMwxY-u z+LFz4UJZ`7BPx#Cg`}+aM8*AMSN!vhrmT>7lzfml{|&(a&iXyB&+|v^_LPy*d8$bp z++`N__V@QS`Vux*4kqy?;8#b@guB-l^O#xeI3TXE|H20a(Is2!C*9)6#+8QJQY9__ zKd)r2(@B|DZG2~h9@HJ4p2u0Y#@nF?y>V#hclOq%r>}&jif^zA$}kkyt>Cdk z!Ot)5Od4;ibPQ5|54W5?Zs?xaluAB%oyQL4n#@e{e}ZQ5t=7v6Bs;G9+WY)TS`+tx z$L`~3vkd*-hI@}YH0Qgd+gupbdN|Yj;W3xl>uq?^^E(xZ8`nr~-pONz_G&wGB`@$c%K05W z#o-Q3qMKgbxPGOSu$RZKYP2|u*eu?p!k978qT95H| z0`EudYQv}I@Y)@#>-sT#b)J}$ao7Dv4}&?2{=YMUdS=wl+(Oce*Din{^;*M9=c?l5 zV?~3P+*UTjWJ5L<`FtUH7vm0(KdPVAbdY>TfPgK&wP2LRxJABa4P32eb1$W-H#gf2kPWP7cg;xca8_5$9~<-!>s}5-b8?{<>jf z9y1GV(*VttzPV(dZ1Y9Qou9^=@u`lQ(S?@H?M^mm{-(B4%!W`vKNY*I=JP~MKF3kJtv8eQ@f7E{abu{uyXp&5!*2bZ z+Wu#GirY16_TrfJ8{XpXO)nh$F~{9imSIvul4=*^u|r=)vMq1>Ploeq?xv}`-3FV>9ph*jT3R`O5k7?DHs!)g zjm5trr!EjXw(N7`q&@xP&G@g4nl&r0;k`AsXRW|Tn_<;UWIMr|Q}agGwsB3u$p{F9 z3zY`?ydD0d{JwdzJ&Bo^smlHqSrfSmBVA`NQ-b?`9 zC4RrsJ%PuJ7{#Awd$iM?oBx^yIZ4~E8$Nrv%9&pF z9dAcA7`?jW?Du$k_fIGM8j4S;UzK`F(bkZlY3}x%$Bwg*aZ;o87MeWOq)18@JW-oi z7``d;N!t-V&I#tfV}*=1PLHZ>0(i{!8c+^@_*p#h@wtHWgBlZkc+61OZLVo`=e@eq zTC}Aqi348pUU@FfHgTNB8&@1B*NBKtcRDRrt<3m>D-DK|X zD6$xDM_w~(_pQ%_$ZJ>2^jxKtTbfyNYvadqCE@V@n_bkBAG|5fo~HaGTYT&$|C~Uz zerz_0CmfN{a?aYX^PiO@s9mZKBWX)9NAj_Ss>CK@ZpgS-E8cR7@$dreN7DO1ez+-%-45{LH7HMqYj){KCV2@T>=8(OGSPh zZ?m-T(%4D0`*pr5^46cSt2!<`c4nh?bvwjscwhryQy`bNK=if474l$7%k3%9z=<4wUt#ALlv5IDLP~$@<0P1F8k#b&0_y|IfeSgrR_NK!M4XljkH0txYixGt z%0Rmj0`==4=;@NX`NZ_nke>PY8E{5&<)_DLUYMVO$CaEW8RYh)c9di81>?|ZN>eQT z;#OtE8Bd`fou)dRbG`G_4sq(dQt&_fv){({B{vc0lZA2Uq#&F7(zFyERuD*;@t|M) zOYn1T9VbWUeE4$cz|{+6?hXD%XP5-W06fm_}&mEPbpPjlpl zD6<3nXutAkJF|N?;^g70!1ca$XS^ACi8%cpJig;(5Hs~qUm_Kc2)KO$c zvt&Hh7oGw?7SDuFF8svVcX2+f=ih*D{Vc6(ZRU?SZP9Ar+s+enV;6HWztPVQd*C}p zY;0q9y+W9NT?DwJh}x`_4BVbf<3ixO?Wb4{>AygF_S_~e&s|X7XLBEM>KAR`zC?jZ z0qd6{PN{{*NuB)Tl}>r3qZNWcEry@Fa5|Y+uq2Fu`%9?kF!(u>oxT1o`6%)u7`F`g zWf|quZy%%00D&R_kDEB9Mu!Xikw-}mf&QC29&Rl+rAYj_fc%hX@Hm3g?M%(ji~L*> z=j(*WYn<-TwIX(3A8WTm-1g5-ZDEU&nvh=joek9I$+R6E+w?aePLb09UTs$Gbcn%; z%$yIibO!Jjj*U+vzN3|kK(P`9-qBhinL3GcE;Xtz+zR|%=1ik`i!2bQ$U_`(`Wi7& zG~*18pX~Gq(Ekio%Gl^|0O@I3@VJK4$eGMjZeCf4^U2!%)jLy~diHHDKs#yz;};Y7 zG;+S4NH=H2<$S1K(4NlI7fh=OeX|&G@;QiC&eE2L2Ws_9F#o&{{78H4)}8KRgE&cK z4ey`+oWW19_ zoD#4FxL%sZ#C7Yio{<2L!8xx8d*69WpbY70BJg;(^NQ0OfBP)Ij5tYi1Nbp2|G0T! zH9F!ZF!GOc`HPV*qqEJp+zas7qO)KkAUGp4c1L6SU!gF7NpRFDx zhZAuYPv8%)2EJos*Uh>G_SpYQnAgs3yZlv3=Hh;*S$zb(`{b>c-uGkwj1(BR&c5#k zZ#cDnM}GLjeuCcbD0PP9!bym;Twy(R_P2UBck*TrTy7S(J^^X=q8lXecwkh)`tBUi ztE_7D?Gw^dcUpu0Bd3p7eUKX6@^a$gogcu12JOX{p1|>n;01i_= zpbvTU>wD2Qy#6xF7IXRgpgWJJpFw(RND}Z+GunLJQy&ngzX%5&^<4a?us-Lkkn^FY z!Mf=j^ZdK()MU=B3C@Q$6CR6nK2u!1>!~Pbx5fFex2l1kb3M6V%kwrNP9ef$tj-sP z19nJ9*CS3P!}{x-B&4)iSg{Rpy7hGMldShFR!N$361$gcq{-gUnw`08;mzRX9 z2)%d1{YAJ8aoD-ceKX$?lZjaG!L3gN+uZv8o0w(Ys}H!3)9B+hOH-j&m_aAO0G^Fql9z<-~mhzyo?B0p4RSg)P` zj8vuMea7p!0Oc*{N0v=pF6@KXak}w~zubi{+b${2;w$n)w1IrUMX>zC=Egrb@1mR* z2R&<+X3LKO95?7Uhk=V6VAWj7$8m!_2l65p(UT8)LxK+={|wJK(2K{dy^(gp0C9rX zY~XYDnwjPc%5dBfuS53X?T;Bh{zYXzWJ*gtKdNa|V4 zx5NB(QMeRdspXc8`9_#WE{YpAsEBP~V19xKeiR2LKP{@p^GiU#6}U<(y=4JQ80(uL zA9GRZ6rvxy5rjA;8Xl{4S#ZN%{--3K?~K@7@S`TJ+8Yx;AL$u%SYKS!E)Oa)dTt}m zj?Uxiuk7FSrure`v}N3ORx8-muGE2cegx_b?scivS=oi0NJn}B5{zdTjg8G4O0qH# zCq=`)!$te)S_QdK8sdUxu)etHcTV(4dY6Sby8z~w%f`9K?XhB&q5Z#73;Hp@(t zaa^m3IA05lPnWH&tEgvPaxGNU zlf4_M+1-e?}7E*Ww&dxg!CY8f7X#Bpg(wc(}$AwwMb8Pk_7G- z&fI;w{WRhf#TYI>$FD&NutA*R(*`_TQfRV6@Yud^;=2@i?Ef3Ar!I*BEp{g2_AM!X;Uhy>xm`1k#hsxbxzw`9X*ChB)rA+qgXa1N(b$ z_GVnqiC@8ghQd#go|R+cM7o{JZG#IG9!McQd;Wdk1;&BfKD^t3%QajMyeOx(F72gFdTmyRP`P}sAs=x0(5-Y# z_uT|se?M*<{^akH&~9Rbd22t^XCUym!KOF0*w0*J;6t8L^1EIf8}kE?Q@fI$UX~}T z6(Y`m7~0>J@w`~sL>=!RDVrz#_2VkK{K8Y!Mjxanr$GMiI++w#bXfxD159g}kFJyB z^`e!J$6^0!Ft1&w&QCJ^Ie^Cxa}UH-*Ju$c+3>?pizu|nq zRp!v;z4x=5k)H3O5$NaDT9F@ojX|8a(+arCk^}j#9^w3!7XA&m>XSR@HNT#K}?+-&|MaD=K|@g7X2^gDTLkme47^@Ef1QP`EF+ zcQq34GQB(%=S8eaZnT7qs#1K^*t^s(u0A;x{S4UInig!e1`{w1@&oDIv?VC4nGF&kU(5fa@iSiqCyaG$3TsBx3Xp-&a`s_?i$td!cH4u0;LS{ z8Q1-eL44xwcwa*l{{njd;^c&7{yUKYe--4Pu1AJlB*fnEBThU3@zXWRd7z*9U`+@E9|M4a-S3HSUj zL!Rk+y}6lPl4XwcOkc>KUGEya{FrroKH?;I$cJ4EESn8&jt^tKKkQ#zOW$n!t`NKd zak{<~l>2zQ3%liYcUZp2M5Yww>MLVBhftaol?g9h94ra1qnO3*-0-EZD`WeHwi z2#M2xPduS1D|ttKFM+Fw6`4XGa(S*S$Wo!Zu|W@PtVL~-#yZV>#z9^cx=-= zFfZJ$X!9xF4Oxvi`PN#{r+2(2R(kzGob-h|elnVZrOEB$xZIIBpwFAGI=rO%J@zvr z79W7?)FUCz2!Z+TR=3gcQ^%Ps#F-XN z)d6oc*VB1ofcJfjm)!PwOLlD4_lI)YY-e0WT+klYWw#G8zbD(wazmUv z$rkkA`dmYPe4``In9QAzJ;8cf=^KwCPOo|m`auh;3=?(ihq%KD`0&8J*qJM%kY0G+ zw!hq+|7>S{?K?aUX$sKJ?t&uMC&f|sBRy?4tY7Yesbx>UXkNiQ3Gz30mi#%d-(Uu{Eg#>l5YyU&8L0`s~n8#2GG-2fC|&eAd%17mGOcmoVrx5~4RPF!w~9 zwiV```?3b(GxS%N5$Ai)ZMT(eauHvnvJn^lZ3TYxd)Gd7*w&6XOG*s5;f60JreZk0 z2@fQ4`3srX<|R1KVI`aezP2&+=O)#e$Pe>R0Pyvvf~~3+<2;R~wHmlpoAA5GkMQ{k zW!fy@)^T<}wiiYtKUA+8;Pz+si4~deL!6`tamn3hRneCq7g?;I4(qJD?`~mbtwb}# z`3Wz;&p{&r*{UEs?*s?Cfcy2D$>)Wn?;8VXi$s*X6761wR!AKZX--GEup753Zj|g&yw*p*8rr zK5_f2O0n(C6AGSRBy|G#sjZ=8E68`?`v2(%-t=bv44FUI5GVGKfj84Pl+-xmI79Ey z=kk}n%0ovsAU)&HcHpfG)aY{ijv-Fi2K#0A&a1;$gq=fhxqAXY|K4ZcZXD$aUl}4kB7Lnl-9Z-yni9r#DSk#4o4*EBz!K!S1AL0G2u&-<1Tz% zq@YE>)vL?e-b(}_|Fp=rz?aV1C1~_wEDi{j0N2zRys(YshxC-&u&#Nm@=CoMko*R5 z^0q3_Z`#-+

1w`Q)`mDs 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Ψ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

17$iq154M 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

2j8@LSG!(g_6!8*^kr38` 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 EA0gYmE&u=k diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin deleted file mode 100644 index 2d484d3ba308d840a60f28f9cb74cee85b678495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11056522 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

yIGHwT?l_CN$DOL<_c5{R$0W)DeY}u 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

  • zXi=fcoz&sf%A|+ehv-tWkYfe>r?V z@DhpQOoiSA4Te%+5*-c`zes;mP0A6YIXczd4XR$iM>HnL{UR&6E%ssltfzS%PPcgd zz^QlOC6|-X3E9`U@&v6IuNe;w@x^;b(ayaP#sK%&Xln#lSAsJg9!7Wiit~_H(%-V{uvP6ZMgI4o^9g3Q$u{%pr?uWS z^q`~tx%gGDvqRh3xXhxQU;*fUCw2k|^30p)=1xbD*4Fni);0L`$2W#)E?w91{uSuF zlcSx^D&MD7FAxZuwo~CS;rFZ8hxcCweLu#rIg$S5`q;>AyL@Gze!FgSU-tUk3qbXB zXiRBztjiwvLu-~=P1RCyUpAn1zZmqDu({y#`9;RYS%tJ5lPk9kWv-5x1V^8AqqJnd(RXd(*W zhG`$@8-%s$#Ut&f9L!E%2l{KUw+Ior08&8LUFj=%^W=X1{gvULt?`+A(F!fNpbC%9 zm=q#-LtQWe3=zOVOY-Ntd$JKPloCVlY`wWC$qD%1&$he-;a6{cF~{us?_CFy-~L!` zv$VtzG;qb*U;(Sh;4qg7Hi>>4oL+u^+*n;?;A#o{1kCD_6}oYl&YM36ryu!7X|Ar7 z4W0jlAGCiQhv}lqYlljg?*Y$bC8N`+ZEHg7G|%b z-1;Q5uk6AU&^`bW&tiZ3FQ(ntydv(5S~E2=6NQTV;!X@^PNtRG7)&rT(*CDZ|zLW8tS^`OV)?1FyI^wt1l2_)f3w z*2�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

    k%Sa5 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

  • D0mOfAxEJh9l^xk+mTcagYmV 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%0AvrTNQ}Fw@T#JI^pzQ`%-4G3OzMK`eI%E;~T)h7? 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

    q%WaCw^vI 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%0ABYU{rZkKGao!PENc3C!}Ymf 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%0AyTQlXNb>RVo*<|-p|2bYrfL-AXnD1?c*I}Zp^<g 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%0AN)n3Zi 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 bJU<xZ$y6$Ziv15011R91+iy$<;^zH-uu+~8 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin deleted file mode 100644 index 935ca43b786c45ccb8946dd0daac4ea40a33e990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23672 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 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin deleted file mode 100644 index a6b185de1cfb6636339e7093261892429d704110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118148 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 G`{(~09OJA2 diff --git a/platforms/android/AndroidManifest.xml b/platforms/android/AndroidManifest.xml deleted file mode 100644 index 0362c219..00000000 --- a/platforms/android/AndroidManifest.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<manifest android:hardwareAccelerated="true" android:versionCode="30301" android:versionName="3.3.1" package="edu.northwestern.cbits.livewell" xmlns:android="http://schemas.android.com/apk/res/android"> - <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> - <uses-permission android:name="android.permission.INTERNET" /> - <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true"> - <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize"> - <intent-filter android:label="@string/launcher_name"> - <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> - <activity android:exported="true" android:name="com.adobe.phonegap.push.PushHandlerActivity" /> - <receiver android:name="com.adobe.phonegap.push.BackgroundActionButtonHandler" /> - <receiver android:exported="true" android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND"> - <intent-filter> - <action android:name="com.google.android.c2dm.intent.RECEIVE" /> - <category android:name="edu.northwestern.cbits.livewell" /> - </intent-filter> - </receiver> - <service android:exported="false" android:name="com.adobe.phonegap.push.GCMIntentService"> - <intent-filter> - <action android:name="com.google.android.c2dm.intent.RECEIVE" /> - </intent-filter> - </service> - <service android:exported="false" android:name="com.adobe.phonegap.push.PushInstanceIDListenerService"> - <intent-filter> - <action android:name="com.google.android.gms.iid.InstanceID" /> - </intent-filter> - </service> - <service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" /> - </application> - <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" /> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - <uses-permission android:name="android.permission.VIBRATE" /> - <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> - <permission android:name="edu.northwestern.cbits.livewell.permission.C2D_MESSAGE" android:protectionLevel="signature" /> - <uses-permission android:name="edu.northwestern.cbits.livewell.permission.C2D_MESSAGE" /> - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -</manifest> diff --git a/platforms/android/CordovaLib/AndroidManifest.xml b/platforms/android/CordovaLib/AndroidManifest.xml deleted file mode 100755 index 3feb903c..00000000 --- a/platforms/android/CordovaLib/AndroidManifest.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" android:versionName="1.0" android:versionCode="1"> - <uses-sdk android:minSdkVersion="14" /> -</manifest> diff --git a/platforms/android/CordovaLib/build.gradle b/platforms/android/CordovaLib/build.gradle deleted file mode 100644 index f1c6682d..00000000 --- a/platforms/android/CordovaLib/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - - - -buildscript { - repositories { - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:1.5.0' - } - -} - -apply plugin: 'android-library' - -ext { - apply from: 'cordova.gradle' - cdvCompileSdkVersion = privateHelpers.getProjectTarget() - cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools() -} - -android { - compileSdkVersion cdvCompileSdkVersion - buildToolsVersion cdvBuildToolsVersion - publishNonDefault true - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_6 - targetCompatibility JavaVersion.VERSION_1_6 - } - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - renderscript.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] - } - } -} diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store b/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store deleted file mode 100644 index 8b8400dcf9e65fb815794fe016943dc09d0e8a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5 Mcmb<tU|?Vb00MykfdBvi diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store b/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store deleted file mode 100644 index 8b8400dcf9e65fb815794fe016943dc09d0e8a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5 Mcmb<tU|?Vb00MykfdBvi diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml deleted file mode 100644 index d775de8b..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/assets"/></dataSet><dataSet config="debug"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/debug/assets"/></dataSet></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml deleted file mode 100644 index e14a3039..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="debug"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/debug/jniLibs"/></dataSet></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml deleted file mode 100644 index 3ecb160a..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/assets"/></dataSet><dataSet config="release"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/release/assets"/></dataSet></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml deleted file mode 100644 index a6fb7780..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="release"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/release/jniLibs"/></dataSet></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml deleted file mode 100644 index fe12e91a..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/res"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug$Generated" generated="true"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/res"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug" generated-set="debug$Generated"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/debug/res"/></dataSet><mergedItems/></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml deleted file mode 100644 index 51521fa7..00000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/res"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release$Generated" generated="true"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/release/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/res"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release" generated-set="release$Generated"><source path="/Users/markbegale/Repositories/livewell_now_app/platforms/android/CordovaLib/src/release/res"/></dataSet><mergedItems/></merger> \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar b/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar deleted file mode 100644 index 7fdd4a1a1e14ee8c3c95ba2d1cad1d057260429e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114402 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%0D8BHVgN>uUxs`8vT*NJw^ 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 J&o}_U{{hm_h|>T7 diff --git a/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar b/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar deleted file mode 100644 index f972f9d12e74aaab68768362ee413d976f4faebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114330 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 diff --git a/platforms/android/CordovaLib/cordova.gradle b/platforms/android/CordovaLib/cordova.gradle deleted file mode 100644 index 74652667..00000000 --- a/platforms/android/CordovaLib/cordova.gradle +++ /dev/null @@ -1,201 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -import java.util.regex.Pattern -import groovy.swing.SwingBuilder - -String doEnsureValueExists(filePath, props, key) { - if (props.get(key) == null) { - throw new GradleException(filePath + ': Missing key required "' + key + '"') - } - return props.get(key) -} - -String doGetProjectTarget() { - def props = new Properties() - file('project.properties').withReader { reader -> - props.load(reader) - } - return doEnsureValueExists('project.properties', props, 'target') -} - -String[] getAvailableBuildTools() { - def buildToolsDir = new File(getAndroidSdkDir(), "build-tools") - buildToolsDir.list() - .findAll { it ==~ /[0-9.]+/ } - .sort { a, b -> compareVersions(b, a) } -} - -String doFindLatestInstalledBuildTools(String minBuildToolsVersion) { - def availableBuildToolsVersions - try { - availableBuildToolsVersions = getAvailableBuildTools() - } catch (e) { - println "An exception occurred while trying to find the Android build tools." - throw e - } - if (availableBuildToolsVersions.length > 0) { - def highestBuildToolsVersion = availableBuildToolsVersions[0] - if (compareVersions(highestBuildToolsVersion, minBuildToolsVersion) < 0) { - throw new RuntimeException( - "No usable Android build tools found. Highest installed version is " + - highestBuildToolsVersion + "; minimum version required is " + - minBuildToolsVersion + ".") - } - highestBuildToolsVersion - } else { - throw new RuntimeException( - "No installed build tools found. Please install the Android build tools version " + - minBuildToolsVersion + " or higher.") - } -} - -// Return the first non-zero result of subtracting version list elements -// pairwise. If they are all identical, return the difference in length of -// the two lists. -int compareVersionList(Collection aParts, Collection bParts) { - def pairs = ([aParts, bParts]).transpose() - pairs.findResult(aParts.size()-bParts.size()) {it[0] - it[1] != 0 ? it[0] - it[1] : null} -} - -// Compare two version strings, such as "19.0.0" and "18.1.1.0". If all matched -// elements are identical, the longer version is the largest by this method. -// Examples: -// "19.0.0" > "19" -// "19.0.1" > "19.0.0" -// "19.1.0" > "19.0.1" -// "19" > "18.999.999" -int compareVersions(String a, String b) { - def aParts = a.tokenize('.').collect {it.toInteger()} - def bParts = b.tokenize('.').collect {it.toInteger()} - compareVersionList(aParts, bParts) -} - -String getAndroidSdkDir() { - def rootDir = project.rootDir - def androidSdkDir = null - String envVar = System.getenv("ANDROID_HOME") - def localProperties = new File(rootDir, 'local.properties') - String systemProperty = System.getProperty("android.home") - if (envVar != null) { - androidSdkDir = envVar - } else if (localProperties.exists()) { - Properties properties = new Properties() - localProperties.withInputStream { instr -> - properties.load(instr) - } - def sdkDirProp = properties.getProperty('sdk.dir') - if (sdkDirProp != null) { - androidSdkDir = sdkDirProp - } else { - sdkDirProp = properties.getProperty('android.dir') - if (sdkDirProp != null) { - androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath() - } - } - } - if (androidSdkDir == null && systemProperty != null) { - androidSdkDir = systemProperty - } - if (androidSdkDir == null) { - throw new RuntimeException( - "Unable to determine Android SDK directory.") - } - androidSdkDir -} - -def doExtractIntFromManifest(name) { - def manifestFile = file(android.sourceSets.main.manifest.srcFile) - def pattern = Pattern.compile(name + "=\"(\\d+)\"") - def matcher = pattern.matcher(manifestFile.getText()) - matcher.find() - return Integer.parseInt(matcher.group(1)) -} - -def doExtractStringFromManifest(name) { - def manifestFile = file(android.sourceSets.main.manifest.srcFile) - def pattern = Pattern.compile(name + "=\"(\\S+)\"") - def matcher = pattern.matcher(manifestFile.getText()) - matcher.find() - return matcher.group(1) -} - -def doPromptForPassword(msg) { - if (System.console() == null) { - def ret = null - new SwingBuilder().edt { - dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) { - vbox { - label(text: msg) - def input = passwordField() - button(defaultButton: true, text: 'OK', actionPerformed: { - ret = input.password; - dispose(); - }) - } - } - } - if (!ret) { - throw new GradleException('User canceled build') - } - return new String(ret) - } else { - return System.console().readPassword('\n' + msg); - } -} - -def doGetConfigXml() { - def xml = file("res/xml/config.xml").getText() - // Disable namespace awareness since Cordova doesn't use them properly - return new XmlParser(false, false).parseText(xml) -} - -def doGetConfigPreference(name, defaultValue) { - name = name.toLowerCase() - def root = doGetConfigXml() - - def ret = defaultValue - root.preference.each { it -> - def attrName = it.attribute("name") - if (attrName && attrName.toLowerCase() == name) { - ret = it.attribute("value") - } - } - return ret -} - -// Properties exported here are visible to all plugins. -ext { - // These helpers are shared, but are not guaranteed to be stable / unchanged. - privateHelpers = {} - privateHelpers.getProjectTarget = { doGetProjectTarget() } - privateHelpers.findLatestInstalledBuildTools = { doFindLatestInstalledBuildTools('19.1.0') } - privateHelpers.extractIntFromManifest = { name -> doExtractIntFromManifest(name) } - privateHelpers.extractStringFromManifest = { name -> doExtractStringFromManifest(name) } - privateHelpers.promptForPassword = { msg -> doPromptForPassword(msg) } - privateHelpers.ensureValueExists = { filePath, props, key -> doEnsureValueExists(filePath, props, key) } - - // These helpers can be used by plugins / projects and will not change. - cdvHelpers = {} - // Returns a XmlParser for the config.xml. Added in 4.1.0. - cdvHelpers.getConfigXml = { doGetConfigXml() } - // Returns the value for the desired <preference>. Added in 4.1.0. - cdvHelpers.getConfigPreference = { name, defaultValue -> doGetConfigPreference(name, defaultValue) } -} - diff --git a/platforms/android/CordovaLib/project.properties b/platforms/android/CordovaLib/project.properties deleted file mode 100644 index 2342a162..00000000 --- a/platforms/android/CordovaLib/project.properties +++ /dev/null @@ -1,16 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Indicates whether an apk should be generated for each density. -split.density=false -# Project target. -target=android-23 -apk-configurations= -renderscript.opt.level=O0 -android.library=true diff --git a/platforms/android/android.json b/platforms/android/android.json deleted file mode 100644 index 7b5bbe51..00000000 --- a/platforms/android/android.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "prepare_queue": { - "installed": [], - "uninstalled": [] - }, - "config_munge": { - "files": { - "res/xml/config.xml": { - "parents": { - "/*": [ - { - "xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>", - "count": 1 - }, - { - "xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>", - "count": 1 - } - ] - } - }, - "AndroidManifest.xml": { - "parents": { - "/*": [], - "/manifest": [ - { - "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />", - "count": 1 - }, - { - "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />", - "count": 1 - }, - { - "xml": "<uses-permission android:name=\"android.permission.WAKE_LOCK\" />", - "count": 1 - }, - { - "xml": "<uses-permission android:name=\"android.permission.VIBRATE\" />", - "count": 1 - }, - { - "xml": "<uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />", - "count": 1 - }, - { - "xml": "<permission android:name=\"edu.northwestern.cbits.livewell.permission.C2D_MESSAGE\" android:protectionLevel=\"signature\" />", - "count": 1 - }, - { - "xml": "<uses-permission android:name=\"edu.northwestern.cbits.livewell.permission.C2D_MESSAGE\" />", - "count": 1 - } - ], - "/manifest/application": [ - { - "xml": "<activity android:exported=\"true\" android:name=\"com.adobe.phonegap.push.PushHandlerActivity\" />", - "count": 1 - }, - { - "xml": "<receiver android:name=\"com.adobe.phonegap.push.BackgroundActionButtonHandler\" />", - "count": 1 - }, - { - "xml": "<receiver android:exported=\"true\" android:name=\"com.google.android.gms.gcm.GcmReceiver\" android:permission=\"com.google.android.c2dm.permission.SEND\"><intent-filter><action android:name=\"com.google.android.c2dm.intent.RECEIVE\" /><category android:name=\"edu.northwestern.cbits.livewell\" /></intent-filter></receiver>", - "count": 1 - }, - { - "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.GCMIntentService\"><intent-filter><action android:name=\"com.google.android.c2dm.intent.RECEIVE\" /></intent-filter></service>", - "count": 1 - }, - { - "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.PushInstanceIDListenerService\"><intent-filter><action android:name=\"com.google.android.gms.iid.InstanceID\" /></intent-filter></service>", - "count": 1 - }, - { - "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\"></service>", - "count": 1 - } - ] - } - }, - "res/values/strings.xml": { - "parents": { - "/resources": [ - { - "xml": "<string name=\"google_app_id\">334078391843</string>", - "count": 1 - } - ] - } - } - } - }, - "installed_plugins": { - "cordova-plugin-whitelist": { - "PACKAGE_NAME": "edu.northwestern.cbits.livewell" - }, - "phonegap-plugin-push": { - "SENDER_ID": "334078391843", - "PACKAGE_NAME": "edu.northwestern.cbits.livewell" - }, - "cordova-plugin-device": { - "PACKAGE_NAME": "edu.northwestern.cbits.livewell" - } - }, - "dependent_plugins": {}, - "modules": [ - { - "file": "plugins/cordova-plugin-whitelist/whitelist.js", - "id": "cordova-plugin-whitelist.whitelist", - "runs": true - }, - { - "file": "plugins/phonegap-plugin-push/www/push.js", - "id": "phonegap-plugin-push.PushNotification", - "clobbers": [ - "PushNotification" - ] - }, - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "clobbers": [ - "device" - ] - } - ], - "plugin_metadata": { - "cordova-plugin-whitelist": "1.2.2-dev", - "phonegap-plugin-push": "1.6.2", - "cordova-plugin-device": "1.1.2" - } -} \ No newline at end of file diff --git a/platforms/android/assets/www/404.html b/platforms/android/assets/www/404.html deleted file mode 100644 index ec98e3c2..00000000 --- a/platforms/android/assets/www/404.html +++ /dev/null @@ -1,157 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Page Not Found :(</title> - <style> - ::-moz-selection { - background: #b3d4fc; - text-shadow: none; - } - - ::selection { - background: #b3d4fc; - text-shadow: none; - } - - html { - padding: 30px 10px; - font-size: 20px; - line-height: 1.4; - color: #737373; - background: #f0f0f0; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - } - - html, - input { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - } - - body { - max-width: 500px; - _width: 500px; - padding: 30px 20px 50px; - border: 1px solid #b3b3b3; - border-radius: 4px; - margin: 0 auto; - box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; - background: #fcfcfc; - } - - h1 { - margin: 0 10px; - font-size: 50px; - text-align: center; - } - - h1 span { - color: #bbb; - } - - h3 { - margin: 1.5em 0 0.5em; - } - - p { - margin: 1em 0; - } - - ul { - padding: 0 0 0 40px; - margin: 1em 0; - } - - .container { - max-width: 380px; - _width: 380px; - margin: 0 auto; - } - - /* google search */ - - #goog-fixurl ul { - list-style: none; - padding: 0; - margin: 0; - } - - #goog-fixurl form { - margin: 0; - } - - #goog-wm-qt, - #goog-wm-sb { - border: 1px solid #bbb; - font-size: 16px; - line-height: normal; - vertical-align: top; - color: #444; - border-radius: 2px; - } - - #goog-wm-qt { - width: 220px; - height: 20px; - padding: 5px; - margin: 5px 10px 0 0; - box-shadow: inset 0 1px 1px #ccc; - } - - #goog-wm-sb { - display: inline-block; - height: 32px; - padding: 0 10px; - margin: 5px 0 0; - white-space: nowrap; - cursor: pointer; - background-color: #f5f5f5; - background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - *overflow: visible; - *display: inline; - *zoom: 1; - } - - #goog-wm-sb:hover, - #goog-wm-sb:focus { - border-color: #aaa; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - background-color: #f8f8f8; - } - - #goog-wm-qt:hover, - #goog-wm-qt:focus { - border-color: #105cb6; - outline: 0; - color: #222; - } - - input::-moz-focus-inner { - padding: 0; - border: 0; - } - </style> - </head> - <body> - <div class="container"> - <h1>Not found <span>:(</span></h1> - <p>Sorry, but the page you were trying to view does not exist.</p> - <p>It looks like this was the result of either:</p> - <ul> - <li>a mistyped address</li> - <li>an out-of-date link</li> - </ul> - <script> - var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; - </script> - <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> - </div> - </body> -</html> diff --git a/platforms/android/assets/www/config.json b/platforms/android/assets/www/config.json deleted file mode 100644 index 70789f22..00000000 --- a/platforms/android/assets/www/config.json +++ /dev/null @@ -1 +0,0 @@ -{"environment":"","server":""} diff --git a/platforms/android/assets/www/config.xml b/platforms/android/assets/www/config.xml deleted file mode 100644 index 1a5fe06e..00000000 --- a/platforms/android/assets/www/config.xml +++ /dev/null @@ -1,21 +0,0 @@ - <?xml version='1.0' encoding='utf-8'?> -<widget id="edu.northwestern.cbits.livewell" version="3.3.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <name>LiveWell</name> - <description> - An application for bipolar disorder - </description> - <author email="e-goulding@northwestern.edu" href="http://www.cbits.northwestern.edu"> - Evan Goulding - </author> - <content src="index.html" /> - - <access origin="*" /> - - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - - <!-- Allow tel: links to open the dialer --> - <allow-intent href="tel:*" /> - - <icon src="icon.png" /> -</widget> diff --git a/platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js b/platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js deleted file mode 100644 index 2e9aa67b..00000000 --- a/platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -*/ - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; diff --git a/platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js b/platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js deleted file mode 100644 index f7fb6bc7..00000000 --- a/platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -*/ - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; diff --git a/platforms/android/assets/www/cordova-js-src/exec.js b/platforms/android/assets/www/cordova-js-src/exec.js deleted file mode 100644 index fa8b41be..00000000 --- a/platforms/android/assets/www/cordova-js-src/exec.js +++ /dev/null @@ -1,283 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - bridgeSecret = -1; - -var messagesFromNative = []; -var isProcessing = false; -var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve(); -var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); }; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } else if (msgs) { - messagesFromNative.push(msgs); - // Always process async to avoid exceptions messing up stack. - nextTick(processMessages); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - if (msgs) { - messagesFromNative.push(msgs); - // Process sync since we know we're already top-of-stack. - processMessages(); - } -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -function buildPayload(payload, message) { - var payloadKind = message.charAt(0); - if (payloadKind == 's') { - payload.push(message.slice(1)); - } else if (payloadKind == 't') { - payload.push(true); - } else if (payloadKind == 'f') { - payload.push(false); - } else if (payloadKind == 'N') { - payload.push(null); - } else if (payloadKind == 'n') { - payload.push(+message.slice(1)); - } else if (payloadKind == 'A') { - var data = message.slice(1); - payload.push(base64.toArrayBuffer(data)); - } else if (payloadKind == 'S') { - payload.push(window.atob(message.slice(1))); - } else if (payloadKind == 'M') { - var multipartMessages = message.slice(1); - while (multipartMessages !== "") { - var spaceIdx = multipartMessages.indexOf(' '); - var msgLen = +multipartMessages.slice(0, spaceIdx); - var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen); - multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1); - buildPayload(payload, multipartMessage); - } - } else { - payload.push(JSON.parse(message)); - } -} - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - // This is deprecated on the .java side. It doesn't work with CSP enabled. - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadMessage = message.slice(nextSpaceIdx + 1); - var payload = []; - buildPayload(payload, payloadMessage); - cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } -} - -function processMessages() { - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (messagesFromNative.length === 0) { - return; - } - isProcessing = true; - try { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - nextTick(pollOnce); - return; - } - processMessage(msg); - } finally { - isProcessing = false; - if (messagesFromNative.length > 0) { - nextTick(processMessages); - } - } -} - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; diff --git a/platforms/android/assets/www/cordova-js-src/platform.js b/platforms/android/assets/www/cordova-js-src/platform.js deleted file mode 100644 index 2bfd0247..00000000 --- a/platforms/android/assets/www/cordova-js-src/platform.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -// The last resume event that was received that had the result of a plugin call. -var lastResumeEvent = null; - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // The resume event is not "sticky", but it is possible that the event - // will contain the result of a plugin call. We need to ensure that the - // plugin result is delivered even after the event is fired (CB-10498) - var cordovaAddEventListener = document.addEventListener; - - document.addEventListener = function(evt, handler, capture) { - cordovaAddEventListener(evt, handler, capture); - - if (evt === 'resume' && lastResumeEvent) { - handler(lastResumeEvent); - } - }; - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []); - exec(null, null, APP_PLUGIN_NAME, "show", []); - }); - } -}; - -function onMessageFromNative(msg) { - var cordova = require('cordova'); - var action = msg.action; - - switch (action) - { - // Button events - case 'backbutton': - case 'menubutton': - case 'searchbutton': - // App life cycle events - case 'pause': - // Volume events - case 'volumedownbutton': - case 'volumeupbutton': - cordova.fireDocumentEvent(action); - break; - case 'resume': - if(arguments.length > 1 && msg.pendingResult) { - if(arguments.length === 2) { - msg.pendingResult.result = arguments[1]; - } else { - // The plugin returned a multipart message - var res = []; - for(var i = 1; i < arguments.length; i++) { - res.push(arguments[i]); - } - msg.pendingResult.result = res; - } - - // Save the plugin result so that it can be delivered to the js - // even if they miss the initial firing of the event - lastResumeEvent = msg; - } - cordova.fireDocumentEvent(action, msg); - break; - default: - throw new Error('Unknown event action ' + action); - } -} diff --git a/platforms/android/assets/www/cordova-js-src/plugin/android/app.js b/platforms/android/assets/www/cordova-js-src/plugin/android/app.js deleted file mode 100644 index 22cf96e8..00000000 --- a/platforms/android/assets/www/cordova-js-src/plugin/android/app.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var exec = require('cordova/exec'); -var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, APP_PLUGIN_NAME, "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, APP_PLUGIN_NAME, "exitApp", []); - } -}; diff --git a/platforms/android/assets/www/cordova.js b/platforms/android/assets/www/cordova.js deleted file mode 100644 index e94e0f7f..00000000 --- a/platforms/android/assets/www/cordova.js +++ /dev/null @@ -1,2167 +0,0 @@ -// Platform: android -// c517ca811b4948b630e0b74dbae6c9637939da24 -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '5.1.1'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - -// Workaround for Windows 10 in hosted environment case -// http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); -} - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { - try { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!isSuccess) { - callback.fail && callback.fail.apply(null, args); - } - /* - else - Note, this case is intentionally not caught. - this can happen if isSuccess is true, but callbackStatus is NO_RESULT - which is used to remove a callback from the list without calling the callbacks - typically keepCallback is false in this case - */ - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; - console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); - throw err; - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - var needsProperty = false; - try { - obj[key] = value; - } catch (e) { - needsProperty = true; - } - // Getters can only be overridden by getters. - if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - bridgeSecret = -1; - -var messagesFromNative = []; -var isProcessing = false; -var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve(); -var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); }; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } else if (msgs) { - messagesFromNative.push(msgs); - // Always process async to avoid exceptions messing up stack. - nextTick(processMessages); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - if (msgs) { - messagesFromNative.push(msgs); - // Process sync since we know we're already top-of-stack. - processMessages(); - } -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -function buildPayload(payload, message) { - var payloadKind = message.charAt(0); - if (payloadKind == 's') { - payload.push(message.slice(1)); - } else if (payloadKind == 't') { - payload.push(true); - } else if (payloadKind == 'f') { - payload.push(false); - } else if (payloadKind == 'N') { - payload.push(null); - } else if (payloadKind == 'n') { - payload.push(+message.slice(1)); - } else if (payloadKind == 'A') { - var data = message.slice(1); - payload.push(base64.toArrayBuffer(data)); - } else if (payloadKind == 'S') { - payload.push(window.atob(message.slice(1))); - } else if (payloadKind == 'M') { - var multipartMessages = message.slice(1); - while (multipartMessages !== "") { - var spaceIdx = multipartMessages.indexOf(' '); - var msgLen = +multipartMessages.slice(0, spaceIdx); - var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen); - multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1); - buildPayload(payload, multipartMessage); - } - } else { - payload.push(JSON.parse(message)); - } -} - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - // This is deprecated on the .java side. It doesn't work with CSP enabled. - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadMessage = message.slice(nextSpaceIdx + 1); - var payload = []; - buildPayload(payload, payloadMessage); - cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } -} - -function processMessages() { - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (messagesFromNative.length === 0) { - return; - } - isProcessing = true; - try { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - nextTick(pollOnce); - return; - } - processMessage(msg); - } finally { - isProcessing = false; - if (messagesFromNative.length > 0) { - nextTick(processMessages); - } - } -} - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} - -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/common/modulemapper_b.js -define("cordova/modulemapper_b", function(require, exports, module) { - -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/platform.js -define("cordova/platform", function(require, exports, module) { - -// The last resume event that was received that had the result of a plugin call. -var lastResumeEvent = null; - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // The resume event is not "sticky", but it is possible that the event - // will contain the result of a plugin call. We need to ensure that the - // plugin result is delivered even after the event is fired (CB-10498) - var cordovaAddEventListener = document.addEventListener; - - document.addEventListener = function(evt, handler, capture) { - cordovaAddEventListener(evt, handler, capture); - - if (evt === 'resume' && lastResumeEvent) { - handler(lastResumeEvent); - } - }; - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []); - exec(null, null, APP_PLUGIN_NAME, "show", []); - }); - } -}; - -function onMessageFromNative(msg) { - var cordova = require('cordova'); - var action = msg.action; - - switch (action) - { - // Button events - case 'backbutton': - case 'menubutton': - case 'searchbutton': - // App life cycle events - case 'pause': - // Volume events - case 'volumedownbutton': - case 'volumeupbutton': - cordova.fireDocumentEvent(action); - break; - case 'resume': - if(arguments.length > 1 && msg.pendingResult) { - if(arguments.length === 2) { - msg.pendingResult.result = arguments[1]; - } else { - // The plugin returned a multipart message - var res = []; - for(var i = 1; i < arguments.length; i++) { - res.push(arguments[i]); - } - msg.pendingResult.result = res; - } - - // Save the plugin result so that it can be delivered to the js - // even if they miss the initial firing of the event - lastResumeEvent = msg; - } - cordova.fireDocumentEvent(action, msg); - break; - default: - throw new Error('Unknown event action ' + action); - } -} - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); -var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, APP_PLUGIN_NAME, "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, APP_PLUGIN_NAME, "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/pluginloader_b.js -define("cordova/pluginloader_b", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { - // if moduleList is not defined or empty, we've nothing to do - if (!moduleList || !moduleList.length) { - return; - } - - // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } -} - -// Loads all plugins' js-modules. Plugin loading is syncronous in browserified bundle -// but the method accepts callback to be compatible with non-browserify flow. -// onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are -// no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(moduleList); - - callback(); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return (d instanceof Date); -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - return function() { - var args = params || arguments; - return func.apply(context, args); - }; -}; - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - - - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js deleted file mode 100644 index d1a71ef6..00000000 --- a/platforms/android/assets/www/cordova_plugins.js +++ /dev/null @@ -1,31 +0,0 @@ -cordova.define('cordova/plugin_list', function(require, exports, module) { -module.exports = [ - { - "file": "plugins/cordova-plugin-whitelist/whitelist.js", - "id": "cordova-plugin-whitelist.whitelist", - "runs": true - }, - { - "file": "plugins/phonegap-plugin-push/www/push.js", - "id": "phonegap-plugin-push.PushNotification", - "clobbers": [ - "PushNotification" - ] - }, - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "clobbers": [ - "device" - ] - } -]; -module.exports.metadata = -// TOP OF METADATA -{ - "cordova-plugin-whitelist": "1.2.2-dev", - "phonegap-plugin-push": "1.6.2", - "cordova-plugin-device": "1.1.2" -}; -// BOTTOM OF METADATA -}); \ No newline at end of file diff --git a/platforms/android/assets/www/favicon.ico b/platforms/android/assets/www/favicon.ico deleted file mode 100644 index 6527905307f19ba00762f9241f7eb535fa84a2f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmchaPe@cz6vpqQW1y54B@{_hhFD-kWPgyXjSGVaf);_51TESOlSPOdvy}@W5Q+** zs6~RrtlR}7(V|sCkP&1f7!5{Hixw@4+x@+HXSm*Z^WGalm2d8S=brO@=iGm9MyZ7P zPo)%}YN|=8W~EfSfibDm2H3qnGq$y%h@zqVv#zn@@WvhIGJ8*ECePe@roq(*vwGys z4?Q;bI~MRIM&jXu6Yg@wqQ#8&8x#z55E}ONd3<&rw_h!5AbBx{CcZ%&z736jHxFa0 zsBLqly3+dQ%MZGH{QU}GW6bsq=@$a@sXtac^<8>8uP>*+d!Qdtv&&mnKlvE_T-+SC z*QNCVwcvq%+&DDc+T}Uf(2_FavDN{-&hCpIs?aW=A$mcrzyD+9(025i1~K&uVf&w4 zItQLK9T{7k?s@bnU*&p+<^UI*aHA1aH+Fo^PAzM|xjNK09?2V(Cme7IFB(BP?7#at z(>DB3w`AUFS~=(LUBdZ>v-SG4J~%Mrfj&05Z)oj13l5tbEq4x>8+<xOzx>;FC0Dvr z<Zj`N0l1Ehyw;hSrIHVQY>bJY#7PS$+yE_Cf7gxqQEC@RoZX5J^}71l+`Q~qnOF4D za`lhjUuqZa-sj)EHDleV2i|mc!Ly-@7IwzPM{?pBUt(+@IHi8HTz#Iq9)9h|hrL3) zfOT#@|5$JCxmRjsOj>&kUt(m8*57|W(FoE`CX*8edYv%j=3sR5>!hvglJ#@8K6j$g z&IuUbRC_{)p}sbyx%UD6Fki;t6n<J;-|d_C%AmYkf?71&)LY$}nDJWr*n)g5+n}pc z>Dk0gT5&6Q_at7FbVVOu?4VK{oR#!kyYbCc;<4+LITzoZ8-~O5L+9MiLHL4NyME>! z;Ky7<)UR!gN_~GXhMvPMHNB;EmmIK}eHD&~cRx89jth}IM#tU%ablw0|GxfE9IjRR zl-)b-IvC#UD!IewzPL77SI>R+?}<2ERr|R2o~zCC8rJUR8>DI5*0O$6+k~wZ)Mt;b z(Hul-OFl+F))}lK&&Yi*+S2kJmHDbdBWOQn<D7ZX3~K#6m=AKvMdXt=<DB22sNXrF r^-HP7S*2<Oi{@t_z)m}BjY;3O-!bEVl-g~B*bv}*>aSA6S|#*<GsP;^ diff --git a/platforms/android/assets/www/icon.png b/platforms/android/assets/www/icon.png deleted file mode 100755 index c1259d5cfe0a93ef0e322a26dd1fbecae5fe8539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54642 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 diff --git a/platforms/android/assets/www/images/logo.png b/platforms/android/assets/www/images/logo.png deleted file mode 100644 index 6ec94bc621469c33c9217f87813d60338436cf03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15656 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 diff --git a/platforms/android/assets/www/images/yeoman.png b/platforms/android/assets/www/images/yeoman.png deleted file mode 100644 index 92497addf96c5c009ac24007f55eb989f3bf74c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13501 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 diff --git a/platforms/android/assets/www/index.html b/platforms/android/assets/www/index.html deleted file mode 100644 index 03c18235..00000000 --- a/platforms/android/assets/www/index.html +++ /dev/null @@ -1,144 +0,0 @@ -<!doctype html> -<html class="no-js"> - <head> - <meta charset="utf-8"> - <title></title> - <meta name="description" content=""> - <meta name="viewport" content="width=device-width"> -<!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> - --> - - <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> - - <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> - - <link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css" /> - - <link rel="stylesheet" href="styles/main.css"> - <link rel="stylesheet" href="styles/bootstrap.min.css"> - - <link href='http://fonts.googleapis.com/css?family=Lato' rel='stylesheet' type='text/css'> - </head> - <body ng-app="livewellApp"> - <!--[if lt IE 7]> - <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> - <![endif]--> - - <!-- Add your site or application content here --> - <div class="container"> - <div ng-view></div> - </div> - - <!--[if lt IE 9]> - <script src="lib/es5-shim/es5-shim.js"></script> - <script src="lib/json3/lib/json3.min.js"></script> - <![endif]--> - - <script src="lib/jquery/dist/jquery.js"></script> - <script src="lib/angular/angular.js"></script> - <script src="lib/json3/lib/json3.js"></script> - <script src="lib/bootstrap/dist/js/bootstrap.js"></script> - <script src="lib/angular-resource/angular-resource.js"></script> - <script src="lib/angular-cookies/angular-cookies.js"></script> - <script src="lib/angular-sanitize/angular-sanitize.js"></script> - <script src="lib/angular-animate/angular-animate.js"></script> - <script src="lib/angular-touch/angular-touch.js"></script> - <script src="lib/angular-route/angular-route.js"></script> - <script src="lib/moment/moment.js"></script> - <script src="lib/angular-moment/angular-moment.js"></script> - <script src="lib/lodash/dist/lodash.compat.js"></script> - <script src="lib/highcharts-ng/highcharts-ng.js"></script> - <script src="lib/highcharts/highcharts.js"></script> - <script src="lib/highcharts/highcharts-more.js"></script> - <script src="lib/highcharts/modules/exporting.js"></script> - <script src="lib/PurpleRobotClient/purple-robot.js"></script> - - <script src="scripts/app.js"></script> - <script src="scripts/controllers/main.js"></script> - <script src="scripts/controllers/about.js"></script> - <script src="scripts/controllers/foundations.js"></script> - <script src="scripts/controllers/checkins.js"></script> - <script src="scripts/controllers/daily_review.js"></script> - <script src="scripts/controllers/wellness.js"></script> - <script src="scripts/controllers/instructions.js"></script> - <script src="scripts/controllers/daily_review_summary.js"></script> - <script src="scripts/controllers/daily_review_conclusion.js"></script> - <script src="scripts/controllers/medications.js"></script> - <script src="scripts/controllers/skills.js"></script> - <script src="scripts/controllers/team.js"></script> - <script src="scripts/controllers/intervention.js"></script> - <script src="scripts/controllers/exit.js"></script> - <script src="scripts/controllers/charts.js"></script> - <script src="scripts/controllers/resources.js"></script> - <script src="scripts/controllers/risks.js"></script> - <script src="scripts/controllers/awareness.js"></script> - <script src="scripts/controllers/weekly_check_in.js"></script> - <script src="scripts/controllers/daily_check_in.js"></script> - <script src="scripts/controllers/ews.js"></script> - <script src="scripts/controllers/ews2.js"></script> - <script src="scripts/services/static_content.js"></script> - <script src="scripts/controllers/fetch_content.js"></script> - <script src="scripts/services/user_data.js"></script> - <script src="scripts/services/questions.js"></script> - <script src="scripts/questionGroups/questiongroup.js"></script> - <script src="scripts/controllers/settings.js"></script> - <script src="scripts/services/guid.js"></script> - <script src="scripts/controllers/login.js"></script> - <script src="scripts/services/pound.js"></script> - <script src="scripts/services/user_details.js"></script> - <script src="scripts/controllers/localstoragebackuprestore.js"></script> - <script src="scripts/controllers/cms.js"></script> - <script src="scripts/controllers/admin.js"></script> - <script src="scripts/controllers/lesson_player.js"></script> - <script src="scripts/controllers/load_interventions.js"></script> - <script src="scripts/controllers/skills_fundamentals.js"></script> - <script src="scripts/controllers/skills_awareness.js"></script> - <script src="scripts/controllers/skills_lifestyle.js"></script> - <script src="scripts/controllers/skills_coping.js"></script> - <script src="scripts/controllers/skills_team.js"></script> - <script src="scripts/controllers/schedule.js"></script> - <script src="scripts/controllers/summary_player.js"></script> - <script src="scripts/controllers/myskills.js"></script> - <script src="scripts/controllers/dailyreviewtester.js"></script> - <script src="scripts/controllers/personalsnapshot.js"></script> - <script src="scripts/services/dailyreview.js"></script> - <script src="scripts/controllers/home.js"></script> - <script src="scripts/controllers/setup.js"></script> - <script src="scripts/controllers/usereditor.js"></script> - <script src="scripts/services/clinicalstatusupdate.js"></script> - <script src="cordova.js"></script> - <script src="cordova_plugins.js"></script> - - <script> - document.addEventListener("deviceready", function() { - - document.addEventListener("resume", function() { - window.location.href = "index.html"; - }, false); - - document.addEventListener("click", function(ev){ - var clickTrackPayload = {objectClicked: ev.srcElement.outerHTML, targetPage:ev.currentTarget.URL}; - (new PurpleRobot()).emitReading('livewell_event_tracking', clickTrackPayload).execute(); - }); - - var push = PushNotification.init({ "android": {"senderID": "334078391843"}} ); - - console.log(push); - - push.on('registration', function(data) { - console.log("registration", data); - localStorage['registrationId'] = data.registrationId; - }); - - push.on('notification', function(data) { - console.log("notification", data); - }); - - push.on('error', function(e) { - console.log("error", e); - }); - - }); - </script> -</body> -</html> diff --git a/platforms/android/assets/www/lib/PurpleRobotClient/.bower.json b/platforms/android/assets/www/lib/PurpleRobotClient/.bower.json deleted file mode 100644 index 30421c24..00000000 --- a/platforms/android/assets/www/lib/PurpleRobotClient/.bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "PurpleRobotClient", - "homepage": "https://github.com/cbitstech/PurpleRobotClient", - "authors": [ - "Mark Begale <m-begale@northwestern.edu>", - "Eric Carty-Fickes <ericcf@northwestern.edu>" - ], - "description": "JavaScript client for Purple Robot services", - "main": "purple-robot.js", - "devDependencies": { - "jasmine": "2" - }, - "ignore": [ - "README.md", - "default-triggers.js", - "index.html", - "purple-robot-client.js", - "run_specs", - "test-prompt copy.js", - "docs", - "spec" - ], - "_release": "1.5.10.0", - "_resolution": { - "type": "tag", - "tag": "1.5.10.0", - "commit": "c3f27a19f14a86699d1bc4a19f3df38d8a160a4f" - }, - "_source": "git@github.com:cbitstech/PurpleRobotClient.git", - "_target": "1.5.10.0", - "_originalSource": "git@github.com:cbitstech/PurpleRobotClient.git" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/PurpleRobotClient/.gitignore b/platforms/android/assets/www/lib/PurpleRobotClient/.gitignore deleted file mode 100644 index 878275d5..00000000 --- a/platforms/android/assets/www/lib/PurpleRobotClient/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.DS_Store -bower_components diff --git a/platforms/android/assets/www/lib/PurpleRobotClient/bower.json b/platforms/android/assets/www/lib/PurpleRobotClient/bower.json deleted file mode 100644 index 4d7a07a4..00000000 --- a/platforms/android/assets/www/lib/PurpleRobotClient/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PurpleRobotClient", - "version": "1.5.10.0", - "homepage": "https://github.com/cbitstech/PurpleRobotClient", - "authors": [ - "Mark Begale <m-begale@northwestern.edu>", - "Eric Carty-Fickes <ericcf@northwestern.edu>" - ], - "description": "JavaScript client for Purple Robot services", - "main": "purple-robot.js", - "devDependencies": { - "jasmine": "2" - }, - "ignore": [ - "README.md", - "default-triggers.js", - "index.html", - "purple-robot-client.js", - "run_specs", - "test-prompt copy.js", - "docs", - "spec" - ] -} diff --git a/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.js b/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.js deleted file mode 100644 index 30828543..00000000 --- a/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.js +++ /dev/null @@ -1,1039 +0,0 @@ -;(function() { - // ## Example - // - // var pr = new PurpleRobot(); - // pr.playDefaultTone().execute(); - - // __constructor__ - // - // Initialize the client with an options object made up of - // `serverUrl` - the url to which commands are sent - function PurpleRobot(options) { - options = options || {}; - - // __className__ - // - // `@public` - this.className = "PurpleRobot"; - - // ___serverUrl__ - // - // `@private` - this._serverUrl = options.serverUrl || "http://localhost:12345/json/submit"; - // ___script__ - // - // `@private` - this._script = options.script || ""; - } - - var PR = PurpleRobot; - var root = window; - - function PurpleRobotArgumentException(methodName, argument, expectedArgument) { - this.methodName = methodName; - this.argument = argument; - this.expectedArgument = expectedArgument; - this.message = ' received an unexpected argument "'; - - this.toString = function() { - return [ - "PurpleRobot.", - this.methodName, - this.message, - this.argument, - '" expected: ', - this.expectedArgument - ].join(""); - }; - } - - // __apiVersion__ - // - // `@public` - // - // The version of the API, corresponding to the version of Purple Robot. - PR.apiVersion = "1.5.10.0"; - - // __setEnvironment()__ - // - // `@public` - // `@param {string} ['production'|'debug'|'web']` - // - // Set the environment to one of: - // `production`: Make real calls to the Purple Robot HTTP server with minimal - // logging. - // `debug': Make real calls to the Purple Robot HTTP server with extra - // logging. - // `web`: Make fake calls to the Purple Robot HTTP server with extra logging. - PR.setEnvironment = function(env) { - if (env !== 'production' && env !== 'debug' && env !== 'web') { - throw new PurpleRobotArgumentException('setEnvironment', env, '["production", "debug", "web"]'); - } - - this.env = env; - - return this; - }; - - // ___push(nextScript)__ - // - // `@private` - // `@returns {Object}` A new PurpleRobot instance. - // - // Enables chaining of method calls. - PR.prototype._push = function(methodName, argStr) { - var nextScript = ["PurpleRobot.", methodName, "(", argStr, ");"].join(""); - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, nextScript].join(" ").trim() - }); - }; - - // ___stringify(value)__ - // - // `@private` - // `@param {*} value` The value to be stringified. - // `@returns {string}` The stringified representation. - // - // Returns a string representation of the input. If the input is a - // `PurpleRobot` instance, a string expression is returned, otherwise a JSON - // stringified version is returned. - PR.prototype._stringify = function(value) { - var str; - - if (value !== null && - typeof value === "object" && - value.className === this.className) { - str = value.toStringExpression(); - } else { - str = JSON.stringify(value); - } - - return str; - }; - - // __toString()__ - // - // `@returns {string}` The current script as a string. - // - // Returns the string representation of the current script. - PR.prototype.toString = function() { - return this._script; - }; - - // __toStringExpression()__ - // - // `@returns {string}` A string representation of a function that returns the - // value of this script when evaluated. - // - // Example - // - // pr.emitToast("foo").toStringExpression(); - // // "(function() { return PurpleRobot.emitToast('foo'); })()" - PR.prototype.toStringExpression = function () { - return "(function() { return " + this._script + " })()"; - }; - - // __toJson()__ - // - // `@returns {string}` A JSON stringified version of this script. - // - // Returns the escaped string representation of the method call. - PR.prototype.toJson = function() { - return JSON.stringify(this.toString()); - }; - - // __execute(callbacks)__ - // - // Executes the current method (and any previously chained methods) by - // making an HTTP request to the Purple Robot HTTP server. - // - // Example - // - // pr.fetchEncryptedString("foo").execute({ - // done: function(payload) { - // console.log(payload); - // } - // }) - PR.prototype.execute = function(callbacks) { - var json = JSON.stringify({ - command: "execute_script", - script: this.toString() - }); - - if (PR.env !== 'web') { - function onChange() { - if (callbacks && httpRequest.readyState === XMLHttpRequest.DONE) { - if (httpRequest.response === null) { - callbacks.fail && callbacks.fail(); - } else if (callbacks.done) { - callbacks.done(JSON.parse(httpRequest.response).payload); - } - } - } - - var httpRequest = new XMLHttpRequest(); - httpRequest.onreadystatechange = onChange; - var isAsynchronous = true; - httpRequest.open("POST", this._serverUrl, isAsynchronous); - httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - httpRequest.send("json=" + json); - } else { - console.log('PurpleRobot POSTing to "' + this._serverUrl + '": ' + json); - } - }; - - // __save()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Saves a string representation of script(s) to localStorage. - // - // Example - // - // pr.emitReading("foo", "bar").save(); - PR.prototype.save = function() { - localStorage.prQueue = localStorage.prQueue || ""; - localStorage.prQueue += this.toString(); - - return this; - }; - - // __restore()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Restores saved script(s) from localStorage. - // - // Example - // - // pr.restore().execute(); - PR.prototype.restore = function() { - localStorage.prQueue = localStorage.prQueue || ""; - this._script = localStorage.prQueue; - - return this; - }; - - // __destroy()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Deletes saved script(s) from localStorage. - // - // Example - // - // pr.destroy(); - PR.prototype.destroy = function() { - delete localStorage.prQueue; - - return this; - }; - - // __isEqual(valA, valB)__ - // - // `@param {*} valA` The left hand value. - // `@param {*} valB` The right hand value. - // `@returns {Object}` Returns the current object instance. - // - // Generates an equality expression between two values. - // - // Example - // - // pr.isEqual(pr.fetchEncryptedString("a"), null); - PR.prototype.isEqual = function(valA, valB) { - var expr = this._stringify(valA) + " == " + this._stringify(valB); - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, expr].join(" ").trim() - }); - }; - - // __ifThenElse(condition, thenStmt, elseStmt)__ - // - // `@param {Object} condition` A PurpleRobot instance that evaluates to true or - // false. - // `@param {Object} thenStmt` A PurpleRobot instance. - // `@param {Object} elseStmt` A PurpleRobot instance. - // `@returns {Object}` A new PurpleRobot instance. - // - // Generates a conditional expression. - // - // Example - // - // pr.ifThenElse(pr.isEqual(1, 1), pr.emitToast("true"), pr.emitToast("error")); - PR.prototype.ifThenElse = function(condition, thenStmt, elseStmt) { - var expr = "if (" + condition.toString() + ") { " + - thenStmt.toString() + - " } else { " + - elseStmt.toString() + - " }"; - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, expr].join(" ").trim() - }); - }; - - // __doNothing()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Generates an explicitly empty script. - // - // Example - // - // pr.doNothing(); - PR.prototype.doNothing = function() { - return new PR({ - serverUrl: this._serverUrl, - script: this._script - }); - }; - - // __q(value)__ - // - // `@private` - // `@param {string} value` A string argument. - // `@returns {string}` A string with extra single quotes surrounding it. - function q(value) { - return "'" + value + "'"; - }; - - // ##Purple Robot API - - // __addNamespace(namespace)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds a namespace under which unencrypted values might be stored. - // - // Example - // - // pr.addNamespace("foo"); - PR.prototype.addNamespace = function(namespace) { - return this._push("addNamespace", [q(namespace)].join(", ")); - }; - - // __broadcastIntent(action, options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Broadcasts an Android intent. - // - // Example - // - // pr.broadcastIntent("intent"); - PR.prototype.broadcastIntent = function(action, options) { - return this._push("broadcastIntent", [q(action), - JSON.stringify(options || null)].join(", ")); - }; - - // __cancelScriptNotification()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Removes the tray notification from the task bar. - // - // Example - // - // pr.cancelScriptNotification(); - PR.prototype.cancelScriptNotification = function() { - return this._push("cancelScriptNotification"); - }; - - // __clearNativeDialogs()__ - // __clearNativeDialogs(tag)__ - // - // `@param {string} tag (optional)` An identifier of a specific dialog. - // `@returns {Object}` A new PurpleRobot instance. - // - // Removes all native dialogs from the screen. - // - // Examples - // - // pr.clearNativeDialogs(); - // pr.clearNativeDialogs("my-id"); - PR.prototype.clearNativeDialogs = function(tag) { - if (tag) { - return this._push("clearNativeDialogs", q(tag)); - } else { - return this._push("clearNativeDialogs"); - } - }; - - // __clearTriggers()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Deletes all Purple Robot triggers. - // - // Example - // - // pr.clearTriggers(); - PR.prototype.clearTriggers = function() { - return this._push("clearTriggers"); - }; - - // __dateFromTimestamp(epoch)__ - // - // `@param {number} epoch` The Unix epoch timestamp including milliseconds. - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a Date object given an epoch timestamp. - // - // Example - // - // pr.dateFromTimestamp(1401205124000); - PR.prototype.dateFromTimestamp = function(epoch) { - return this._push("dateFromTimestamp", epoch); - }; - - // __deleteTrigger(id)__ - // - // `@param {string} id` The id of the trigger. - // `@returns {Object}` A new PurpleRobot instance. - // - // Deletes the Purple Robot trigger identified by `id`; - // - // Example - // - // pr.deleteTrigger("MY-TRIGGER"); - PR.prototype.deleteTrigger = function(id) { - return this._push("deleteTrigger", q(id)); - }; - - // __disableTrigger(id)__ - // - // `@param {string} id` The id of the trigger. - // `@returns {Object}` A new PurpleRobot instance. - // - // Disables the Purple Robot trigger identified by `id`; - // - // Example - // - // pr.disableTrigger("MY-TRIGGER"); - PR.prototype.disableTrigger = function(id) { - return this._push("disableTrigger", q(id)); - }; - - // __emitReading(name, value)__ - // - // `@param {string} name` The name of the reading. - // `@param {*} value` The value of the reading. - // `@returns {Object}` A new PurpleRobot instance. - // - // Transmits a name value pair to be stored in Purple Robot Warehouse. The - // table name will be *name*, and the columns and data values will be - // extrapolated from the *value*. - // - // Example - // - // pr.emitReading("sandwich", "pb&j"); - PR.prototype.emitReading = function(name, value) { - return this._push("emitReading", q(name) + ", " + JSON.stringify(value)); - }; - - // __emitToast(message, hasLongDuration)__ - // - // `@param {string} message` The text of the toast. - // `@param {boolean} hasLongDuration` True if the toast should display longer. - // `@returns {Object}` A new PurpleRobot instance. - // - // Displays a native toast message on the phone. - // - // Example - // - // pr.emitToast("howdy", true); - PR.prototype.emitToast = function(message, hasLongDuration) { - hasLongDuration = (typeof hasLongDuration === "boolean") ? hasLongDuration : true; - - return this._push("emitToast", q(message) + ", " + hasLongDuration); - }; - - // __enableTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Enables the trigger. - // - // Example - // - // pr.enableTrigger("my-trigger"); - PR.prototype.enableTrigger = function(id) { - return this._push("enableTrigger", q(id)); - }; - - // __fetchConfig()__ - PR.prototype.fetchConfig = function() { - return this._push("fetchConfig"); - }; - - // __fetchEncryptedString(key, namespace)__ - // __fetchEncryptedString(key)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a value stored for the namespace and key provided. Generally - // paired with `persistEncryptedString`. - // - // Examples - // - // pr.fetchEncryptedString("x", "my stuff"); - // pr.fetchEncryptedString("y"); - PR.prototype.fetchEncryptedString = function(key, namespace) { - if (typeof namespace === "undefined") { - return this._push("fetchEncryptedString", q(key)); - } else { - return this._push("fetchEncryptedString", q(namespace) + ", " + q(key)); - } - }; - - // __fetchNamespace(namespace)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a hash of the keys and values stored in the namespace. - // - // Examples - // - // pr.fetchNamespace("x").execute({ - // done(function(store) { - // ... - // }); - PR.prototype.fetchNamespace = function(namespace) { - return this._push("fetchNamespace", [q(namespace)].join(", ")); - }; - - // __fetchNamespaces()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns an array of all the namespaces - // - // Examples - // - // pr.fetchNamespaces.execute({ - // done(function(namespaces) { - // ... - // }); - PR.prototype.fetchNamespaces = function() { - return this._push("fetchNamespaces"); - }; - - // __fetchTrigger(id)__ - // - // Example - // - // pr.fetchTrigger("my-trigger").execute({ - // done: function(triggerConfig) { - // ... - // } - // }); - PR.prototype.fetchTrigger = function(id) { - return this._push("fetchTrigger", [q(id)].join(", ")); - }; - - // __fetchTriggerIds()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns an array of Trigger id strings. - // - // Example - // - // pr.fetchTriggerIds().execute({ - // done: function(ids) { - // ... - // } - // }); - PR.prototype.fetchTriggerIds = function() { - return this._push("fetchTriggerIds"); - }; - - // __fetchUserId()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the Purple Robot configured user id string. - // - // Example - // - // pr.fetchUserId().execute().done(function(userId) { - // console.log(userId); - // }); - PR.prototype.fetchUserId = function() { - return this._push("fetchUserId"); - }; - - // __fetchWidget()__ - PR.prototype.fetchWidget = function(id) { - throw new Error("PurpleRobot.prototype.fetchWidget not implemented yet"); - }; - - // __fireTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Fires the trigger immediately. - // - // Example - // - // pr.fireTrigger("my-trigger"); - PR.prototype.fireTrigger = function(id) { - return this._push("fireTrigger", q(id)); - }; - - // __formatDate(date)__ - PR.prototype.formatDate = function(date) { - throw new Error("PurpleRobot.prototype.formatDate not implemented yet"); - }; - - // __launchApplication(name)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Launches the specified Android application as if the user had pressed - // the icon. - // - // Example - // - // pr.launchApplication("edu.northwestern.cbits.awesome_app"); - PR.prototype.launchApplication = function(name) { - return this._push("launchApplication", q(name)); - }; - - // __launchInternalUrl(url)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Launches a URL within the Purple Robot application WebView. - // - // Example - // - // pr.launchInternalUrl("https://www.google.com"); - PR.prototype.launchInternalUrl = function(url) { - return this._push("launchInternalUrl", [q(url)].join(", ")); - }; - - // __launchUrl(url)__ - // - // `@param {string} url` The URL to request. - // `@returns {Object}` A new object instance. - // - // Opens a new browser tab and requests the URL. - // - // Example - // - // pr.launchUrl("https://www.google.com"); - PR.prototype.launchUrl = function(url) { - return this._push("launchUrl", q(url)); - }; - - // __loadLibrary(name)__ - PR.prototype.loadLibrary = function(name) { - throw new Error("PurpleRobot.prototype.loadLibrary not implemented yet"); - }; - - // __log(name, value)__ - // - // `@param {string} name` The prefix to the log message. - // `@param {*} value` The contents of the log message. - // `@returns {Object}` A new PurpleRobot instance. - // - // Logs an event to the PR event capturing service as well as the Android log. - // - // Example - // - // pr.log("zing", { wing: "ding" }); - PR.prototype.log = function(name, value) { - return this._push("log", q(name) + ", " + JSON.stringify(value)); - }; - - // __models()__ - PR.prototype.models = function() { - throw new Error("PurpleRobot.prototype.models not implemented yet"); - }; - - // __now()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Calculates a string representing the current date. - // - // Example - // - // pr.now().execute({ - // done: function(dateStr) { - // ... - // } - // }); - PR.prototype.now = function() { - return this._push("now"); - }; - - // __packageForApplicationName(applicationName)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the package name string for the application. - // - // Example - // - // pr.packageForApplicationName("edu.northwestern.cbits.purple_robot_manager").execute({ - // done: function(package) { - // ... - // } - // }); - PR.prototype.packageForApplicationName = function(applicationName) { - return this._push("packageForApplicationName", [q(applicationName)].join(", ")); - }; - - // __parseDate(dateString)__ - PR.prototype.parseDate = function(dateString) { - throw new Error("PurpleRobot.prototype.parseDate not implemented yet"); - }; - - // __persistEncryptedString(key, value, namespace)__ - // __persistEncryptedString(key, value)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Stores the *value* within the *namespace*, identified by the *key*. - // - // Examples - // - // pr.persistEncryptedString("foo", "bar", "app Q"); - // pr.persistEncryptedString("foo", "bar"); - PR.prototype.persistEncryptedString = function(key, value, namespace) { - if (typeof namespace === "undefined") { - return this._push("persistEncryptedString", q(key) + ", " + q(value)); - } else { - return this._push("persistEncryptedString", q(namespace) + ", " + q(key) + ", " + q(value)); - } - }; - - // __playDefaultTone()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Plays a default Android notification sound. - // - // Example - // - // pr.playDefaultTone(); - PR.prototype.playDefaultTone = function() { - return this._push("playDefaultTone"); - }; - - // __playTone(tone)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Plays an existing notification sound on an Android phone. - // - // Example - // - // pr.playTone("Hojus"); - PR.prototype.playTone = function(tone) { - return this._push("playTone", q(tone)); - }; - - // __predictions()__ - PR.prototype.predictions = function() { - throw new Error("PurpleRobot.prototype.predictions not implemented yet"); - }; - - // __readings()__ - PR.prototype.readings = function() { - throw new Error("PurpleRobot.prototype.readings not implemented yet"); - }; - - // __readUrl(url)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Attempts to GET a URL and return the body as a string. - // - // Example - // - // pr.readUrl("http://www.northwestern.edu"); - PR.prototype.readUrl = function(url) { - return this._push("readUrl", q(url)); - }; - - // __resetTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Resets the trigger. __Note: the default implementation of this method in - // PurpleRobot does nothing.__ - // - // Example - // - // pr.resetTrigger("my-trigger"); - PR.prototype.resetTrigger = function(id) { - return this._push("resetTrigger", q(id)); - }; - - // __runScript(script)__ - // - // `@param {Object} script` A PurpleRobot instance. - // `@returns {Object}` A new PurpleRobot instance. - // - // Runs a script immediately. - // - // Example - // - // pr.runScript(pr.emitToast("toasty")); - PR.prototype.runScript = function(script) { - return this._push("runScript", script.toJson()); - }; - - // __scheduleScript(name, minutes, script)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Schedules a script to run a specified number of minutes in the future - // (calculated from when this script is evaluated). - // - // Example - // - // pr.scheduleScript("fancy script", 5, pr.playDefaultTone()); - PR.prototype.scheduleScript = function(name, minutes, script) { - var timestampStr = "(function() { var now = new Date(); var scheduled = new Date(now.getTime() + " + minutes + " * 60000); var pad = function(n) { return n < 10 ? '0' + n : n; }; return '' + scheduled.getFullYear() + pad(scheduled.getMonth() + 1) + pad(scheduled.getDate()) + 'T' + pad(scheduled.getHours()) + pad(scheduled.getMinutes()) + pad(scheduled.getSeconds()); })()"; - - return this._push("scheduleScript", q(name) + ", " + timestampStr + ", " + script.toJson()); - }; - - // __setUserId(value)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Sets the Purple Robot user id string. - // - // Example - // - // pr.setUserId("Bobbie"); - PR.prototype.setUserId = function(value) { - return this._push("setUserId", q(value)); - }; - - // __showApplicationLaunchNotification(options)__ - PR.prototype.showApplicationLaunchNotification = function(options) { - throw new Error("PurpleRobot.prototype.showApplicationLaunchNotification not implemented yet"); - }; - - // __showNativeDialog(options)__ - // - // `@param {Object} options` Parameterized options for the dialog, including: - // `{string} title` the dialog title, `{string} message` the body text, - // `{string} buttonLabelA` the first button label, `{Object} scriptA` a - // PurpleRobot instance to be run when button A is pressed, `{string} - // buttonLabelB` the second button label, `{Object} scriptB` a PurpleRobot - // instance to be run when button B is pressed, `{string} tag (optional)` an - // id to be associated with the dialog, `{number} priority` an importance - // associated with the dialog that informs stacking where higher means more - // important. - // `@returns {Object}` A new PurpleRobot instance. - // - // Opens an Android dialog with two buttons, *A* and *B*, and associates - // scripts to be run when each is pressed. - // - // Example - // - // pr.showNativeDialog({ - // title: "My Dialog", - // message: "What say you?", - // buttonLabelA: "cheers", - // scriptA: pr.emitToast("cheers!"), - // buttonLabelB: "boo", - // scriptB: pr.emitToast("boo!"), - // tag: "my-dialog", - // priority: 3 - // }); - PR.prototype.showNativeDialog = function(options) { - var tag = options.tag || null; - var priority = options.priority || 0; - - return this._push("showNativeDialog", [q(options.title), - q(options.message), q(options.buttonLabelA), - q(options.buttonLabelB), options.scriptA.toJson(), - options.scriptB.toJson(), JSON.stringify(tag), priority].join(", ")); - }; - - // __showScriptNotification(options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds a notification to the the tray and atttaches a script to be run when - // it is pressed. - // - // Example - // - // pr.showScriptNotification({ - // title: "My app", - // message: "Press here", - // isPersistent: true, - // isSticky: false, - // script: pr.emitToast("You pressed it") - // }); - PR.prototype.showScriptNotification = function(options) { - options = options || {}; - - return this._push("showScriptNotification", [q(options.title), - q(options.message), options.isPersistent, options.isSticky, - options.script.toJson()].join(", ")); - }; - - // __updateConfig(options)__ - // - // `@param {Object} options` The options to configure. Included: - // `config_data_server_uri` - // `config_enable_data_server` - // `config_feature_weather_underground_enabled` - // `config_http_liberal_ssl` - // `config_last_weather_underground_check` - // `config_probe_running_software_enabled` - // `config_probe_running_software_frequency` - // `config_probes_enabled` - // `config_restrict_data_wifi` - // `@returns {Object}` A new PurpleRobot instance. - // - // Example - // - // pr.updateConfig({ - // config_enable_data_server: true, - // config_restrict_data_wifi: false - // }); - PR.prototype.updateConfig = function(options) { - return this._push("updateConfig", [JSON.stringify(options)].join(", ")); - }; - - // __updateTrigger(options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds or updates a Purple Robot trigger to be run at a time and with a - // recurrence rule. - // - // Example - // - // The following would emit a toast daily at the same time: - // - // pr.updateTrigger({ - // script: pr.emitToast("butter"), - // startAt: "20140505T020304", - // endAt: "20140505T020404" - // }); - PR.prototype.updateTrigger = function(options) { - options = options || {}; - - var timestamp = (new Date()).getTime(); - var triggerId = options.triggerId || ("TRIGGER-" + timestamp); - - function formatDate (date){ - function formatYear(date){ - return date.getFullYear(); - } - - function formatMonth(date){ - return ("0" + parseInt(1+date.getMonth())).slice(-2); - } - - function formatDays(date){ - return ("0" + parseInt(date.getDate())).slice(-2); - } - - function formatHours(date){ - return ("0" + date.getHours()).slice(-2); - } - - function formatMinutes(date){ - return ("0" + date.getMinutes()).slice(-2); - } - - function formatSeconds (date){ - return ("0" + date.getSeconds()).slice(-2); - } - - return formatYear(date) + formatMonth(date) + formatDays(date) + "T" + - formatHours(date) + formatMinutes(date) + formatSeconds(date); - - } - - var triggerJson = JSON.stringify({ - type: options.type || "datetime", - name: triggerId, - identifier: triggerId, - action: options.script.toString(), - datetime_start: formatDate(options.startAt), - datetime_end: formatDate(options.endAt), - datetime_repeat: options.repeatRule || "FREQ=DAILY;INTERVAL=1", - datetime_random: (options.random === true) || false, - fire_on_boot: true && (options.fire_on_boot !== false) - }); - - return this._push("updateTrigger", q(triggerId) + ", " + triggerJson); - }; - - // __updateWidget(parameters)__ - PR.prototype.updateWidget = function(parameters) { - throw new Error("PurpleRobot.prototype.updateWidget not implemented yet"); - }; - - // __version()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the current version string for Purple Robot. - // - // Example - // - // pr.version(); - PR.prototype.version = function() { - return this._push("version"); - }; - - // __vibrate(pattern)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Vibrates the phone with a preset pattern. - // - // Examples - // - // pr.vibrate("buzz"); - // pr.vibrate("blip"); - // pr.vibrate("sos"); - PR.prototype.vibrate = function(pattern) { - pattern = pattern || "buzz"; - - return this._push("vibrate", q(pattern)); - }; - - // __widgets()__ - PR.prototype.widgets = function() { - throw new Error("PurpleRobot.prototype.widgets not implemented yet"); - }; - - // ## More complex examples - // - // Example of nesting - // - // var playTone = pr.playDefaultTone(); - // var toast = pr.emitToast("sorry"); - // var dialog1 = pr.showNativeDialog( - // "dialog 1", "are you happy?", "Yes", "No", playTone, toast - // ); - // pr.scheduleScript("dialog 1", 10, "minutes", dialog1) - // .execute(); - // - // Example of chaining - // - // pr.playDefaultTone().emitToast("hey there").execute(); - - root.PurpleRobot = PurpleRobot; -}.call(this)); diff --git a/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.min.js b/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.min.js deleted file mode 100644 index e8cd1496..00000000 --- a/platforms/android/assets/www/lib/PurpleRobotClient/purple-robot.min.js +++ /dev/null @@ -1,15 +0,0 @@ -(function(){function b(a){a=a||{};this.className="PurpleRobot";this._serverUrl=a.serverUrl||"http://localhost:12345/json/submit";this._script=a.script||""}function e(a,b,c){this.methodName=a;this.argument=b;this.expectedArgument=c;this.message=' received an unexpected argument "';this.toString=function(){return["PurpleRobot.",this.methodName,this.message,this.argument,'" expected: ',this.expectedArgument].join("")}}function c(a){return"'"+a+"'"}var f=window;b.apiVersion="1.5.10.0";b.setEnvironment= -function(a){if("production"!==a&&"debug"!==a&&"web"!==a)throw new e("setEnvironment",a,'["production", "debug", "web"]');this.env=a;return this};b.prototype._push=function(a,c){var d=["PurpleRobot.",a,"(",c,");"].join("");return new b({serverUrl:this._serverUrl,script:[this._script,d].join(" ").trim()})};b.prototype._stringify=function(a){return null!==a&&"object"===typeof a&&a.className===this.className?a.toStringExpression():JSON.stringify(a)};b.prototype.toString=function(){return this._script}; -b.prototype.toStringExpression=function(){return"(function() { return "+this._script+" })()"};b.prototype.toJson=function(){return JSON.stringify(this.toString())};b.prototype.execute=function(a){var c=JSON.stringify({command:"execute_script",script:this.toString()});if("web"!==b.env){var d=new XMLHttpRequest;d.onreadystatechange=function(){a&&d.readyState===XMLHttpRequest.DONE&&(null===d.response?a.fail&&a.fail():a.done&&a.done(JSON.parse(d.response).payload))};d.open("POST",this._serverUrl,!0); -d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.send("json="+c)}else console.log('PurpleRobot POSTing to "'+this._serverUrl+'": '+c)};b.prototype.save=function(){localStorage.prQueue=localStorage.prQueue||"";localStorage.prQueue+=this.toString();return this};b.prototype.restore=function(){localStorage.prQueue=localStorage.prQueue||"";this._script=localStorage.prQueue;return this};b.prototype.destroy=function(){delete localStorage.prQueue;return this};b.prototype.isEqual=function(a, -c){var d=this._stringify(a)+" == "+this._stringify(c);return new b({serverUrl:this._serverUrl,script:[this._script,d].join(" ").trim()})};b.prototype.ifThenElse=function(a,c,d){return new b({serverUrl:this._serverUrl,script:[this._script,"if ("+a.toString()+") { "+c.toString()+" } else { "+d.toString()+" }"].join(" ").trim()})};b.prototype.doNothing=function(){return new b({serverUrl:this._serverUrl,script:this._script})};b.prototype.addNamespace=function(a){return this._push("addNamespace",""+c(a))}; -b.prototype.broadcastIntent=function(a,b){return this._push("broadcastIntent",[c(a),JSON.stringify(b||null)].join(", "))};b.prototype.cancelScriptNotification=function(){return this._push("cancelScriptNotification")};b.prototype.clearNativeDialogs=function(a){return a?this._push("clearNativeDialogs",c(a)):this._push("clearNativeDialogs")};b.prototype.clearTriggers=function(){return this._push("clearTriggers")};b.prototype.dateFromTimestamp=function(a){return this._push("dateFromTimestamp",a)};b.prototype.deleteTrigger= -function(a){return this._push("deleteTrigger",c(a))};b.prototype.disableTrigger=function(a){return this._push("disableTrigger",c(a))};b.prototype.emitReading=function(a,b){return this._push("emitReading",c(a)+", "+JSON.stringify(b))};b.prototype.emitToast=function(a,b){b="boolean"===typeof b?b:!0;return this._push("emitToast",c(a)+", "+b)};b.prototype.enableTrigger=function(a){return this._push("enableTrigger",c(a))};b.prototype.fetchConfig=function(){return this._push("fetchConfig")};b.prototype.fetchEncryptedString= -function(a,b){return"undefined"===typeof b?this._push("fetchEncryptedString",c(a)):this._push("fetchEncryptedString",c(b)+", "+c(a))};b.prototype.fetchNamespace=function(a){return this._push("fetchNamespace",""+c(a))};b.prototype.fetchNamespaces=function(){return this._push("fetchNamespaces")};b.prototype.fetchTrigger=function(a){return this._push("fetchTrigger",""+c(a))};b.prototype.fetchTriggerIds=function(){return this._push("fetchTriggerIds")};b.prototype.fetchUserId=function(){return this._push("fetchUserId")}; -b.prototype.fetchWidget=function(a){throw Error("PurpleRobot.prototype.fetchWidget not implemented yet");};b.prototype.fireTrigger=function(a){return this._push("fireTrigger",c(a))};b.prototype.formatDate=function(a){throw Error("PurpleRobot.prototype.formatDate not implemented yet");};b.prototype.launchApplication=function(a){return this._push("launchApplication",c(a))};b.prototype.launchInternalUrl=function(a){return this._push("launchInternalUrl",""+c(a))};b.prototype.launchUrl=function(a){return this._push("launchUrl", -c(a))};b.prototype.loadLibrary=function(a){throw Error("PurpleRobot.prototype.loadLibrary not implemented yet");};b.prototype.log=function(a,b){return this._push("log",c(a)+", "+JSON.stringify(b))};b.prototype.models=function(){throw Error("PurpleRobot.prototype.models not implemented yet");};b.prototype.now=function(){return this._push("now")};b.prototype.packageForApplicationName=function(a){return this._push("packageForApplicationName",""+c(a))};b.prototype.parseDate=function(a){throw Error("PurpleRobot.prototype.parseDate not implemented yet"); -};b.prototype.persistEncryptedString=function(a,b,d){return"undefined"===typeof d?this._push("persistEncryptedString",c(a)+", "+c(b)):this._push("persistEncryptedString",c(d)+", "+c(a)+", "+c(b))};b.prototype.playDefaultTone=function(){return this._push("playDefaultTone")};b.prototype.playTone=function(a){return this._push("playTone",c(a))};b.prototype.predictions=function(){throw Error("PurpleRobot.prototype.predictions not implemented yet");};b.prototype.readings=function(){throw Error("PurpleRobot.prototype.readings not implemented yet"); -};b.prototype.readUrl=function(a){return this._push("readUrl",c(a))};b.prototype.resetTrigger=function(a){return this._push("resetTrigger",c(a))};b.prototype.runScript=function(a){return this._push("runScript",a.toJson())};b.prototype.scheduleScript=function(a,b,d){b="(function() { var now = new Date(); var scheduled = new Date(now.getTime() + "+b+" * 60000); var pad = function(n) { return n < 10 ? '0' + n : n; }; return '' + scheduled.getFullYear() + pad(scheduled.getMonth() + 1) + pad(scheduled.getDate()) + 'T' + pad(scheduled.getHours()) + pad(scheduled.getMinutes()) + pad(scheduled.getSeconds()); })()"; -return this._push("scheduleScript",c(a)+", "+b+", "+d.toJson())};b.prototype.setUserId=function(a){return this._push("setUserId",c(a))};b.prototype.showApplicationLaunchNotification=function(a){throw Error("PurpleRobot.prototype.showApplicationLaunchNotification not implemented yet");};b.prototype.showNativeDialog=function(a){var b=a.tag||null,d=a.priority||0;return this._push("showNativeDialog",[c(a.title),c(a.message),c(a.buttonLabelA),c(a.buttonLabelB),a.scriptA.toJson(),a.scriptB.toJson(),JSON.stringify(b), -d].join(", "))};b.prototype.showScriptNotification=function(a){a=a||{};return this._push("showScriptNotification",[c(a.title),c(a.message),a.isPersistent,a.isSticky,a.script.toJson()].join(", "))};b.prototype.updateConfig=function(a){return this._push("updateConfig",""+JSON.stringify(a))};b.prototype.updateTrigger=function(a){a=a||{};var b=(new Date).getTime(),b=a.triggerId||"TRIGGER-"+b;a=JSON.stringify({type:a.type||"datetime",name:b,identifier:b,action:a.script.toString(),datetime_start:a.startAt, -datetime_end:a.endAt,datetime_repeat:a.repeatRule||"FREQ=DAILY;INTERVAL=1"});return this._push("updateTrigger",c(b)+", "+a)};b.prototype.updateWidget=function(a){throw Error("PurpleRobot.prototype.updateWidget not implemented yet");};b.prototype.version=function(){return this._push("version")};b.prototype.vibrate=function(a){return this._push("vibrate",c(a||"buzz"))};b.prototype.widgets=function(){throw Error("PurpleRobot.prototype.widgets not implemented yet");};f.PurpleRobot=b}).call(this); diff --git a/platforms/android/assets/www/lib/angular-animate/.bower.json b/platforms/android/assets/www/lib/angular-animate/.bower.json deleted file mode 100644 index 19570b38..00000000 --- a/platforms/android/assets/www/lib/angular-animate/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-animate", - "version": "1.2.16", - "main": "./angular-animate.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-animate", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "4eccd8ec8356a33bf3a98958d7a73b71290d3985" - }, - "_source": "git://github.com/angular/bower-angular-animate.git", - "_target": "1.2.16", - "_originalSource": "angular-animate" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-animate/README.md b/platforms/android/assets/www/lib/angular-animate/README.md deleted file mode 100644 index de4c61b8..00000000 --- a/platforms/android/assets/www/lib/angular-animate/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-animate - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-animate -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-animate/angular-animate.js"></script> -``` - -And add `ngAnimate` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngAnimate']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-animate/angular-animate.js b/platforms/android/assets/www/lib/angular-animate/angular-animate.js deleted file mode 100644 index 9a0af80f..00000000 --- a/platforms/android/assets/www/lib/angular-animate/angular-animate.js +++ /dev/null @@ -1,1616 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/* jshint maxlen: false */ - -/** - * @ngdoc module - * @name ngAnimate - * @description - * - * # ngAnimate - * - * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives. - * - * - * <div doc-module-components="ngAnimate"></div> - * - * # Usage - * - * To see animations in action, all that is required is to define the appropriate CSS classes - * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are: - * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation - * by using the `$animate` service. - * - * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: - * - * | Directive | Supported Animations | - * |---------------------------------------------------------- |----------------------------------------------------| - * | {@link ng.directive:ngRepeat#usage_animations ngRepeat} | enter, leave and move | - * | {@link ngRoute.directive:ngView#usage_animations ngView} | enter and leave | - * | {@link ng.directive:ngInclude#usage_animations ngInclude} | enter and leave | - * | {@link ng.directive:ngSwitch#usage_animations ngSwitch} | enter and leave | - * | {@link ng.directive:ngIf#usage_animations ngIf} | enter and leave | - * | {@link ng.directive:ngClass#usage_animations ngClass} | add and remove | - * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide} | add and remove (the ng-hide class value) | - * | {@link ng.directive:form#usage_animations form} | add and remove (dirty, pristine, valid, invalid & all other validations) | - * | {@link ng.directive:ngModel#usage_animations ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) | - * - * You can find out more information about animations upon visiting each directive page. - * - * Below is an example of how to apply animations to a directive that supports animation hooks: - * - * ```html - * <style type="text/css"> - * .slide.ng-enter, .slide.ng-leave { - * -webkit-transition:0.5s linear all; - * transition:0.5s linear all; - * } - * - * .slide.ng-enter { } /&#42; starting animations for enter &#42;/ - * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/ - * .slide.ng-leave { } /&#42; starting animations for leave &#42;/ - * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/ - * </style> - * - * <!-- - * the animate service will automatically add .ng-enter and .ng-leave to the element - * to trigger the CSS transition/animations - * --> - * <ANY class="slide" ng-include="..."></ANY> - * ``` - * - * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's - * animation has completed. - * - * <h2>CSS-defined Animations</h2> - * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes - * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported - * and can be used to play along with this naming structure. - * - * The following code below demonstrates how to perform animations using **CSS transitions** with Angular: - * - * ```html - * <style type="text/css"> - * /&#42; - * The animate class is apart of the element and the ng-enter class - * is attached to the element once the enter animation event is triggered - * &#42;/ - * .reveal-animation.ng-enter { - * -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/ - * transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/ - * - * /&#42; The animation preparation code &#42;/ - * opacity: 0; - * } - * - * /&#42; - * Keep in mind that you want to combine both CSS - * classes together to avoid any CSS-specificity - * conflicts - * &#42;/ - * .reveal-animation.ng-enter.ng-enter-active { - * /&#42; The animation code itself &#42;/ - * opacity: 1; - * } - * </style> - * - * <div class="view-container"> - * <div ng-view class="reveal-animation"></div> - * </div> - * ``` - * - * The following code below demonstrates how to perform animations using **CSS animations** with Angular: - * - * ```html - * <style type="text/css"> - * .reveal-animation.ng-enter { - * -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/ - * animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/ - * } - * @-webkit-keyframes enter_sequence { - * from { opacity:0; } - * to { opacity:1; } - * } - * @keyframes enter_sequence { - * from { opacity:0; } - * to { opacity:1; } - * } - * </style> - * - * <div class="view-container"> - * <div ng-view class="reveal-animation"></div> - * </div> - * ``` - * - * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing. - * - * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add - * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically - * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be - * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end - * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element - * has no CSS transition/animation classes applied to it. - * - * <h3>CSS Staggering Animations</h3> - * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a - * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be - * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for - * the animation. The style property expected within the stagger class can either be a **transition-delay** or an - * **animation-delay** property (or both if your animation contains both transitions and keyframe animations). - * - * ```css - * .my-animation.ng-enter { - * /&#42; standard transition code &#42;/ - * -webkit-transition: 1s linear all; - * transition: 1s linear all; - * opacity:0; - * } - * .my-animation.ng-enter-stagger { - * /&#42; this will have a 100ms delay between each successive leave animation &#42;/ - * -webkit-transition-delay: 0.1s; - * transition-delay: 0.1s; - * - * /&#42; in case the stagger doesn't work then these two values - * must be set to 0 to avoid an accidental CSS inheritance &#42;/ - * -webkit-transition-duration: 0s; - * transition-duration: 0s; - * } - * .my-animation.ng-enter.ng-enter-active { - * /&#42; standard transition styles &#42;/ - * opacity:1; - * } - * ``` - * - * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations - * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this - * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation - * will also be reset if more than 10ms has passed after the last animation has been fired. - * - * The following code will issue the **ng-leave-stagger** event on the element provided: - * - * ```js - * var kids = parent.children(); - * - * $animate.leave(kids[0]); //stagger index=0 - * $animate.leave(kids[1]); //stagger index=1 - * $animate.leave(kids[2]); //stagger index=2 - * $animate.leave(kids[3]); //stagger index=3 - * $animate.leave(kids[4]); //stagger index=4 - * - * $timeout(function() { - * //stagger has reset itself - * $animate.leave(kids[5]); //stagger index=0 - * $animate.leave(kids[6]); //stagger index=1 - * }, 100, false); - * ``` - * - * Stagger animations are currently only supported within CSS-defined animations. - * - * <h2>JavaScript-defined Animations</h2> - * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not - * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module. - * - * ```js - * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application. - * var ngModule = angular.module('YourApp', ['ngAnimate']); - * ngModule.animation('.my-crazy-animation', function() { - * return { - * enter: function(element, done) { - * //run the animation here and call done when the animation is complete - * return function(cancelled) { - * //this (optional) function will be called when the animation - * //completes or when the animation is cancelled (the cancelled - * //flag will be set to true if cancelled). - * }; - * }, - * leave: function(element, done) { }, - * move: function(element, done) { }, - * - * //animation that can be triggered before the class is added - * beforeAddClass: function(element, className, done) { }, - * - * //animation that can be triggered after the class is added - * addClass: function(element, className, done) { }, - * - * //animation that can be triggered before the class is removed - * beforeRemoveClass: function(element, className, done) { }, - * - * //animation that can be triggered after the class is removed - * removeClass: function(element, className, done) { } - * }; - * }); - * ``` - * - * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run - * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits - * the element's CSS class attribute value and then run the matching animation event function (if found). - * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will - * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported). - * - * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. - * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, - * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation - * or transition code that is defined via a stylesheet). - * - */ - -angular.module('ngAnimate', ['ng']) - - /** - * @ngdoc provider - * @name $animateProvider - * @description - * - * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module. - * When an animation is triggered, the $animate service will query the $animate service to find any animations that match - * the provided name value. - * - * Requires the {@link ngAnimate `ngAnimate`} module to be installed. - * - * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. - * - */ - - //this private service is only used within CSS-enabled animations - //IE8 + IE9 do not support rAF natively, but that is fine since they - //also don't support transitions and keyframes which means that the code - //below will never be used by the two browsers. - .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) { - var bod = $document[0].body; - return function(fn) { - //the returned function acts as the cancellation function - return $$rAF(function() { - //the line below will force the browser to perform a repaint - //so that all the animated elements within the animation frame - //will be properly updated and drawn on screen. This is - //required to perform multi-class CSS based animations with - //Firefox. DO NOT REMOVE THIS LINE. - var a = bod.offsetWidth + 1; - fn(); - }); - }; - }]) - - .config(['$provide', '$animateProvider', function($provide, $animateProvider) { - var noop = angular.noop; - var forEach = angular.forEach; - var selectors = $animateProvider.$$selectors; - - var ELEMENT_NODE = 1; - var NG_ANIMATE_STATE = '$$ngAnimateState'; - var NG_ANIMATE_CLASS_NAME = 'ng-animate'; - var rootAnimateState = {running: true}; - - function extractElementNode(element) { - for(var i = 0; i < element.length; i++) { - var elm = element[i]; - if(elm.nodeType == ELEMENT_NODE) { - return elm; - } - } - } - - function stripCommentsFromElement(element) { - return angular.element(extractElementNode(element)); - } - - function isMatchingElement(elm1, elm2) { - return extractElementNode(elm1) == extractElementNode(elm2); - } - - $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document', - function($delegate, $injector, $sniffer, $rootElement, $$asyncCallback, $rootScope, $document) { - - var globalAnimationCounter = 0; - $rootElement.data(NG_ANIMATE_STATE, rootAnimateState); - - // disable animations during bootstrap, but once we bootstrapped, wait again - // for another digest until enabling animations. The reason why we digest twice - // is because all structural animations (enter, leave and move) all perform a - // post digest operation before animating. If we only wait for a single digest - // to pass then the structural animation would render its animation on page load. - // (which is what we're trying to avoid when the application first boots up.) - $rootScope.$$postDigest(function() { - $rootScope.$$postDigest(function() { - rootAnimateState.running = false; - }); - }); - - var classNameFilter = $animateProvider.classNameFilter(); - var isAnimatableClassName = !classNameFilter - ? function() { return true; } - : function(className) { - return classNameFilter.test(className); - }; - - function lookup(name) { - if (name) { - var matches = [], - flagMap = {}, - classes = name.substr(1).split('.'); - - //the empty string value is the default animation - //operation which performs CSS transition and keyframe - //animations sniffing. This is always included for each - //element animation procedure if the browser supports - //transitions and/or keyframe animations. The default - //animation is added to the top of the list to prevent - //any previous animations from affecting the element styling - //prior to the element being animated. - if ($sniffer.transitions || $sniffer.animations) { - matches.push($injector.get(selectors[''])); - } - - for(var i=0; i < classes.length; i++) { - var klass = classes[i], - selectorFactoryName = selectors[klass]; - if(selectorFactoryName && !flagMap[klass]) { - matches.push($injector.get(selectorFactoryName)); - flagMap[klass] = true; - } - } - return matches; - } - } - - function animationRunner(element, animationEvent, className) { - //transcluded directives may sometimes fire an animation using only comment nodes - //best to catch this early on to prevent any animation operations from occurring - var node = element[0]; - if(!node) { - return; - } - - var isSetClassOperation = animationEvent == 'setClass'; - var isClassBased = isSetClassOperation || - animationEvent == 'addClass' || - animationEvent == 'removeClass'; - - var classNameAdd, classNameRemove; - if(angular.isArray(className)) { - classNameAdd = className[0]; - classNameRemove = className[1]; - className = classNameAdd + ' ' + classNameRemove; - } - - var currentClassName = element.attr('class'); - var classes = currentClassName + ' ' + className; - if(!isAnimatableClassName(classes)) { - return; - } - - var beforeComplete = noop, - beforeCancel = [], - before = [], - afterComplete = noop, - afterCancel = [], - after = []; - - var animationLookup = (' ' + classes).replace(/\s+/g,'.'); - forEach(lookup(animationLookup), function(animationFactory) { - var created = registerAnimation(animationFactory, animationEvent); - if(!created && isSetClassOperation) { - registerAnimation(animationFactory, 'addClass'); - registerAnimation(animationFactory, 'removeClass'); - } - }); - - function registerAnimation(animationFactory, event) { - var afterFn = animationFactory[event]; - var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)]; - if(afterFn || beforeFn) { - if(event == 'leave') { - beforeFn = afterFn; - //when set as null then animation knows to skip this phase - afterFn = null; - } - after.push({ - event : event, fn : afterFn - }); - before.push({ - event : event, fn : beforeFn - }); - return true; - } - } - - function run(fns, cancellations, allCompleteFn) { - var animations = []; - forEach(fns, function(animation) { - animation.fn && animations.push(animation); - }); - - var count = 0; - function afterAnimationComplete(index) { - if(cancellations) { - (cancellations[index] || noop)(); - if(++count < animations.length) return; - cancellations = null; - } - allCompleteFn(); - } - - //The code below adds directly to the array in order to work with - //both sync and async animations. Sync animations are when the done() - //operation is called right away. DO NOT REFACTOR! - forEach(animations, function(animation, index) { - var progress = function() { - afterAnimationComplete(index); - }; - switch(animation.event) { - case 'setClass': - cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress)); - break; - case 'addClass': - cancellations.push(animation.fn(element, classNameAdd || className, progress)); - break; - case 'removeClass': - cancellations.push(animation.fn(element, classNameRemove || className, progress)); - break; - default: - cancellations.push(animation.fn(element, progress)); - break; - } - }); - - if(cancellations && cancellations.length === 0) { - allCompleteFn(); - } - } - - return { - node : node, - event : animationEvent, - className : className, - isClassBased : isClassBased, - isSetClassOperation : isSetClassOperation, - before : function(allCompleteFn) { - beforeComplete = allCompleteFn; - run(before, beforeCancel, function() { - beforeComplete = noop; - allCompleteFn(); - }); - }, - after : function(allCompleteFn) { - afterComplete = allCompleteFn; - run(after, afterCancel, function() { - afterComplete = noop; - allCompleteFn(); - }); - }, - cancel : function() { - if(beforeCancel) { - forEach(beforeCancel, function(cancelFn) { - (cancelFn || noop)(true); - }); - beforeComplete(true); - } - if(afterCancel) { - forEach(afterCancel, function(cancelFn) { - (cancelFn || noop)(true); - }); - afterComplete(true); - } - } - }; - } - - /** - * @ngdoc service - * @name $animate - * @function - * - * @description - * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations. - * When any of these operations are run, the $animate service - * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) - * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run. - * - * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives - * will work out of the box without any extra configuration. - * - * Requires the {@link ngAnimate `ngAnimate`} module to be installed. - * - * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. - * - */ - return { - /** - * @ngdoc method - * @name $animate#enter - * @function - * - * @description - * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once - * the animation is started, the following CSS classes will be present on the element for the duration of the animation: - * - * Below is a breakdown of each step that occurs during enter animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.enter(...) is called | class="my-animation" | - * | 2. element is inserted into the parentElement element or beside the afterElement element | class="my-animation" | - * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 4. the .ng-enter class is added to the element | class="my-animation ng-animate ng-enter" | - * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-enter" | - * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-enter" | - * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" | - * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" | - * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * @param {DOMElement} element the element that will be the focus of the enter animation - * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation - * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - enter : function(element, parentElement, afterElement, doneCallback) { - this.enabled(false, element); - $delegate.enter(element, parentElement, afterElement); - $rootScope.$$postDigest(function() { - element = stripCommentsFromElement(element); - performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#leave - * @function - * - * @description - * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once - * the animation is started, the following CSS classes will be added for the duration of the animation: - * - * Below is a breakdown of each step that occurs during leave animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.leave(...) is called | class="my-animation" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 3. the .ng-leave class is added to the element | class="my-animation ng-animate ng-leave" | - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-leave" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-leave" | - * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 9. The element is removed from the DOM | ... | - * | 10. The doneCallback() callback is fired (if provided) | ... | - * - * @param {DOMElement} element the element that will be the focus of the leave animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - leave : function(element, doneCallback) { - cancelChildAnimations(element); - this.enabled(false, element); - $rootScope.$$postDigest(function() { - performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() { - $delegate.leave(element); - }, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#move - * @function - * - * @description - * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or - * add the element directly after the afterElement element if present. Then the move animation will be run. Once - * the animation is started, the following CSS classes will be added for the duration of the animation: - * - * Below is a breakdown of each step that occurs during move animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.move(...) is called | class="my-animation" | - * | 2. element is moved into the parentElement element or beside the afterElement element | class="my-animation" | - * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 4. the .ng-move class is added to the element | class="my-animation ng-animate ng-move" | - * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-move" | - * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-move" | - * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" | - * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" | - * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * @param {DOMElement} element the element that will be the focus of the move animation - * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation - * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - move : function(element, parentElement, afterElement, doneCallback) { - cancelChildAnimations(element); - this.enabled(false, element); - $delegate.move(element, parentElement, afterElement); - $rootScope.$$postDigest(function() { - element = stripCommentsFromElement(element); - performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#addClass - * - * @description - * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. - * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide - * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions - * or keyframes are defined on the -add or base CSS class). - * - * Below is a breakdown of each step that occurs during addClass animation: - * - * | Animation Step | What the element class attribute looks like | - * |------------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.addClass(element, 'super') is called | class="my-animation" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 3. the .super-add class are added to the element | class="my-animation ng-animate super-add" | - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-add" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate super-add" | - * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super super-add super-add-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation super super-add super-add-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation super" | - * | 9. The super class is kept on the element | class="my-animation super" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation super" | - * - * @param {DOMElement} element the element that will be animated - * @param {string} className the CSS class that will be added to the element and then animated - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - addClass : function(element, className, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('addClass', className, element, null, null, function() { - $delegate.addClass(element, className); - }, doneCallback); - }, - - /** - * @ngdoc method - * @name $animate#removeClass - * - * @description - * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value - * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in - * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if - * no CSS transitions or keyframes are defined on the -remove or base CSS classes). - * - * Below is a breakdown of each step that occurs during removeClass animation: - * - * | Animation Step | What the element class attribute looks like | - * |-----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.removeClass(element, 'super') is called | class="my-animation super" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation super ng-animate" | - * | 3. the .super-remove class are added to the element | class="my-animation super ng-animate super-remove"| - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation super ng-animate super-remove" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation super ng-animate super-remove" | - * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 9. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * - * @param {DOMElement} element the element that will be animated - * @param {string} className the CSS class that will be animated and then removed from the element - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - removeClass : function(element, className, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('removeClass', className, element, null, null, function() { - $delegate.removeClass(element, className); - }, doneCallback); - }, - - /** - * - * @ngdoc function - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('setClass', [add, remove], element, null, null, function() { - $delegate.setClass(element, add, remove); - }, doneCallback); - }, - - /** - * @ngdoc method - * @name $animate#enabled - * @function - * - * @param {boolean=} value If provided then set the animation on or off. - * @param {DOMElement=} element If provided then the element will be used to represent the enable/disable operation - * @return {boolean} Current animation state. - * - * @description - * Globally enables/disables animations. - * - */ - enabled : function(value, element) { - switch(arguments.length) { - case 2: - if(value) { - cleanup(element); - } else { - var data = element.data(NG_ANIMATE_STATE) || {}; - data.disabled = true; - element.data(NG_ANIMATE_STATE, data); - } - break; - - case 1: - rootAnimateState.disabled = !value; - break; - - default: - value = !rootAnimateState.disabled; - break; - } - return !!value; - } - }; - - /* - all animations call this shared animation triggering function internally. - The animationEvent variable refers to the JavaScript animation event that will be triggered - and the className value is the name of the animation that will be applied within the - CSS code. Element, parentElement and afterElement are provided DOM elements for the animation - and the onComplete callback will be fired once the animation is fully complete. - */ - function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) { - - var runner = animationRunner(element, animationEvent, className); - if(!runner) { - fireDOMOperation(); - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - closeAnimation(); - return; - } - - className = runner.className; - var elementEvents = angular.element._data(runner.node); - elementEvents = elementEvents && elementEvents.events; - - if (!parentElement) { - parentElement = afterElement ? afterElement.parent() : element.parent(); - } - - var ngAnimateState = element.data(NG_ANIMATE_STATE) || {}; - var runningAnimations = ngAnimateState.active || {}; - var totalActiveAnimations = ngAnimateState.totalActive || 0; - var lastAnimation = ngAnimateState.last; - - //only allow animations if the currently running animation is not structural - //or if there is no animation running at all - var skipAnimations = runner.isClassBased ? - ngAnimateState.disabled || (lastAnimation && !lastAnimation.isClassBased) : - false; - - //skip the animation if animations are disabled, a parent is already being animated, - //the element is not currently attached to the document body or then completely close - //the animation if any matching animations are not found at all. - //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found. - if (skipAnimations || animationsDisabled(element, parentElement)) { - fireDOMOperation(); - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - closeAnimation(); - return; - } - - var skipAnimation = false; - if(totalActiveAnimations > 0) { - var animationsToCancel = []; - if(!runner.isClassBased) { - if(animationEvent == 'leave' && runningAnimations['ng-leave']) { - skipAnimation = true; - } else { - //cancel all animations when a structural animation takes place - for(var klass in runningAnimations) { - animationsToCancel.push(runningAnimations[klass]); - cleanup(element, klass); - } - runningAnimations = {}; - totalActiveAnimations = 0; - } - } else if(lastAnimation.event == 'setClass') { - animationsToCancel.push(lastAnimation); - cleanup(element, className); - } - else if(runningAnimations[className]) { - var current = runningAnimations[className]; - if(current.event == animationEvent) { - skipAnimation = true; - } else { - animationsToCancel.push(current); - cleanup(element, className); - } - } - - if(animationsToCancel.length > 0) { - forEach(animationsToCancel, function(operation) { - operation.cancel(); - }); - } - } - - if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) { - skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR - } - - if(skipAnimation) { - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - fireDoneCallbackAsync(); - return; - } - - if(animationEvent == 'leave') { - //there's no need to ever remove the listener since the element - //will be removed (destroyed) after the leave animation ends or - //is cancelled midway - element.one('$destroy', function(e) { - var element = angular.element(this); - var state = element.data(NG_ANIMATE_STATE); - if(state) { - var activeLeaveAnimation = state.active['ng-leave']; - if(activeLeaveAnimation) { - activeLeaveAnimation.cancel(); - cleanup(element, 'ng-leave'); - } - } - }); - } - - //the ng-animate class does nothing, but it's here to allow for - //parent animations to find and cancel child animations when needed - element.addClass(NG_ANIMATE_CLASS_NAME); - - var localAnimationCount = globalAnimationCounter++; - totalActiveAnimations++; - runningAnimations[className] = runner; - - element.data(NG_ANIMATE_STATE, { - last : runner, - active : runningAnimations, - index : localAnimationCount, - totalActive : totalActiveAnimations - }); - - //first we run the before animations and when all of those are complete - //then we perform the DOM operation and run the next set of animations - fireBeforeCallbackAsync(); - runner.before(function(cancelled) { - var data = element.data(NG_ANIMATE_STATE); - cancelled = cancelled || - !data || !data.active[className] || - (runner.isClassBased && data.active[className].event != animationEvent); - - fireDOMOperation(); - if(cancelled === true) { - closeAnimation(); - } else { - fireAfterCallbackAsync(); - runner.after(closeAnimation); - } - }); - - function fireDOMCallback(animationPhase) { - var eventName = '$animate:' + animationPhase; - if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) { - $$asyncCallback(function() { - element.triggerHandler(eventName, { - event : animationEvent, - className : className - }); - }); - } - } - - function fireBeforeCallbackAsync() { - fireDOMCallback('before'); - } - - function fireAfterCallbackAsync() { - fireDOMCallback('after'); - } - - function fireDoneCallbackAsync() { - fireDOMCallback('close'); - if(doneCallback) { - $$asyncCallback(function() { - doneCallback(); - }); - } - } - - //it is less complicated to use a flag than managing and canceling - //timeouts containing multiple callbacks. - function fireDOMOperation() { - if(!fireDOMOperation.hasBeenRun) { - fireDOMOperation.hasBeenRun = true; - domOperation(); - } - } - - function closeAnimation() { - if(!closeAnimation.hasBeenRun) { - closeAnimation.hasBeenRun = true; - var data = element.data(NG_ANIMATE_STATE); - if(data) { - /* only structural animations wait for reflow before removing an - animation, but class-based animations don't. An example of this - failing would be when a parent HTML tag has a ng-class attribute - causing ALL directives below to skip animations during the digest */ - if(runner && runner.isClassBased) { - cleanup(element, className); - } else { - $$asyncCallback(function() { - var data = element.data(NG_ANIMATE_STATE) || {}; - if(localAnimationCount == data.index) { - cleanup(element, className, animationEvent); - } - }); - element.data(NG_ANIMATE_STATE, data); - } - } - fireDoneCallbackAsync(); - } - } - } - - function cancelChildAnimations(element) { - var node = extractElementNode(element); - if (node) { - var nodes = angular.isFunction(node.getElementsByClassName) ? - node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) : - node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME); - forEach(nodes, function(element) { - element = angular.element(element); - var data = element.data(NG_ANIMATE_STATE); - if(data && data.active) { - forEach(data.active, function(runner) { - runner.cancel(); - }); - } - }); - } - } - - function cleanup(element, className) { - if(isMatchingElement(element, $rootElement)) { - if(!rootAnimateState.disabled) { - rootAnimateState.running = false; - rootAnimateState.structural = false; - } - } else if(className) { - var data = element.data(NG_ANIMATE_STATE) || {}; - - var removeAnimations = className === true; - if(!removeAnimations && data.active && data.active[className]) { - data.totalActive--; - delete data.active[className]; - } - - if(removeAnimations || !data.totalActive) { - element.removeClass(NG_ANIMATE_CLASS_NAME); - element.removeData(NG_ANIMATE_STATE); - } - } - } - - function animationsDisabled(element, parentElement) { - if (rootAnimateState.disabled) return true; - - if(isMatchingElement(element, $rootElement)) { - return rootAnimateState.disabled || rootAnimateState.running; - } - - do { - //the element did not reach the root element which means that it - //is not apart of the DOM. Therefore there is no reason to do - //any animations on it - if(parentElement.length === 0) break; - - var isRoot = isMatchingElement(parentElement, $rootElement); - var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE); - var result = state && (!!state.disabled || state.running || state.totalActive > 0); - if(isRoot || result) { - return result; - } - - if(isRoot) return true; - } - while(parentElement = parentElement.parent()); - - return true; - } - }]); - - $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow', - function($window, $sniffer, $timeout, $$animateReflow) { - // Detect proper transitionend/animationend event names. - var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; - - // If unprefixed events are not supported but webkit-prefixed are, use the latter. - // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. - // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` - // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. - // Register both events in case `window.onanimationend` is not supported because of that, - // do the same for `transitionend` as Safari is likely to exhibit similar behavior. - // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit - // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition - if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { - CSS_PREFIX = '-webkit-'; - TRANSITION_PROP = 'WebkitTransition'; - TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; - } else { - TRANSITION_PROP = 'transition'; - TRANSITIONEND_EVENT = 'transitionend'; - } - - if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { - CSS_PREFIX = '-webkit-'; - ANIMATION_PROP = 'WebkitAnimation'; - ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; - } else { - ANIMATION_PROP = 'animation'; - ANIMATIONEND_EVENT = 'animationend'; - } - - var DURATION_KEY = 'Duration'; - var PROPERTY_KEY = 'Property'; - var DELAY_KEY = 'Delay'; - var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; - var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey'; - var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data'; - var NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions'; - var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; - var CLOSING_TIME_BUFFER = 1.5; - var ONE_SECOND = 1000; - - var lookupCache = {}; - var parentCounter = 0; - var animationReflowQueue = []; - var cancelAnimationReflow; - function afterReflow(element, callback) { - if(cancelAnimationReflow) { - cancelAnimationReflow(); - } - animationReflowQueue.push(callback); - cancelAnimationReflow = $$animateReflow(function() { - forEach(animationReflowQueue, function(fn) { - fn(); - }); - - animationReflowQueue = []; - cancelAnimationReflow = null; - lookupCache = {}; - }); - } - - var closingTimer = null; - var closingTimestamp = 0; - var animationElementQueue = []; - function animationCloseHandler(element, totalTime) { - var node = extractElementNode(element); - element = angular.element(node); - - //this item will be garbage collected by the closing - //animation timeout - animationElementQueue.push(element); - - //but it may not need to cancel out the existing timeout - //if the timestamp is less than the previous one - var futureTimestamp = Date.now() + totalTime; - if(futureTimestamp <= closingTimestamp) { - return; - } - - $timeout.cancel(closingTimer); - - closingTimestamp = futureTimestamp; - closingTimer = $timeout(function() { - closeAllAnimations(animationElementQueue); - animationElementQueue = []; - }, totalTime, false); - } - - function closeAllAnimations(elements) { - forEach(elements, function(element) { - var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(elementData) { - (elementData.closeAnimationFn || noop)(); - } - }); - } - - function getElementAnimationDetails(element, cacheKey) { - var data = cacheKey ? lookupCache[cacheKey] : null; - if(!data) { - var transitionDuration = 0; - var transitionDelay = 0; - var animationDuration = 0; - var animationDelay = 0; - var transitionDelayStyle; - var animationDelayStyle; - var transitionDurationStyle; - var transitionPropertyStyle; - - //we want all the styles defined before and after - forEach(element, function(element) { - if (element.nodeType == ELEMENT_NODE) { - var elementStyles = $window.getComputedStyle(element) || {}; - - transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY]; - - transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration); - - transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY]; - - transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY]; - - transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay); - - animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY]; - - animationDelay = Math.max(parseMaxTime(animationDelayStyle), animationDelay); - - var aDuration = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]); - - if(aDuration > 0) { - aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1; - } - - animationDuration = Math.max(aDuration, animationDuration); - } - }); - data = { - total : 0, - transitionPropertyStyle: transitionPropertyStyle, - transitionDurationStyle: transitionDurationStyle, - transitionDelayStyle: transitionDelayStyle, - transitionDelay: transitionDelay, - transitionDuration: transitionDuration, - animationDelayStyle: animationDelayStyle, - animationDelay: animationDelay, - animationDuration: animationDuration - }; - if(cacheKey) { - lookupCache[cacheKey] = data; - } - } - return data; - } - - function parseMaxTime(str) { - var maxValue = 0; - var values = angular.isString(str) ? - str.split(/\s*,\s*/) : - []; - forEach(values, function(value) { - maxValue = Math.max(parseFloat(value) || 0, maxValue); - }); - return maxValue; - } - - function getCacheKey(element) { - var parentElement = element.parent(); - var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY); - if(!parentID) { - parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter); - parentID = parentCounter; - } - return parentID + '-' + extractElementNode(element).getAttribute('class'); - } - - function animateSetup(animationEvent, element, className, calculationDecorator) { - var cacheKey = getCacheKey(element); - var eventCacheKey = cacheKey + ' ' + className; - var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0; - - var stagger = {}; - if(itemIndex > 0) { - var staggerClassName = className + '-stagger'; - var staggerCacheKey = cacheKey + ' ' + staggerClassName; - var applyClasses = !lookupCache[staggerCacheKey]; - - applyClasses && element.addClass(staggerClassName); - - stagger = getElementAnimationDetails(element, staggerCacheKey); - - applyClasses && element.removeClass(staggerClassName); - } - - /* the animation itself may need to add/remove special CSS classes - * before calculating the anmation styles */ - calculationDecorator = calculationDecorator || - function(fn) { return fn(); }; - - element.addClass(className); - - var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {}; - - var timings = calculationDecorator(function() { - return getElementAnimationDetails(element, eventCacheKey); - }); - - var transitionDuration = timings.transitionDuration; - var animationDuration = timings.animationDuration; - if(transitionDuration === 0 && animationDuration === 0) { - element.removeClass(className); - return false; - } - - element.data(NG_ANIMATE_CSS_DATA_KEY, { - running : formerData.running || 0, - itemIndex : itemIndex, - stagger : stagger, - timings : timings, - closeAnimationFn : noop - }); - - //temporarily disable the transition so that the enter styles - //don't animate twice (this is here to avoid a bug in Chrome/FF). - var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass'; - if(transitionDuration > 0) { - blockTransitions(element, className, isCurrentlyAnimating); - } - - //staggering keyframe animations work by adjusting the `animation-delay` CSS property - //on the given element, however, the delay value can only calculated after the reflow - //since by that time $animate knows how many elements are being animated. Therefore, - //until the reflow occurs the element needs to be blocked (where the keyframe animation - //is set to `none 0s`). This blocking mechanism should only be set for when a stagger - //animation is detected and when the element item index is greater than 0. - if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) { - blockKeyframeAnimations(element); - } - - return true; - } - - function isStructuralAnimation(className) { - return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave'; - } - - function blockTransitions(element, className, isAnimating) { - if(isStructuralAnimation(className) || !isAnimating) { - extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none'; - } else { - element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME); - } - } - - function blockKeyframeAnimations(element) { - extractElementNode(element).style[ANIMATION_PROP] = 'none 0s'; - } - - function unblockTransitions(element, className) { - var prop = TRANSITION_PROP + PROPERTY_KEY; - var node = extractElementNode(element); - if(node.style[prop] && node.style[prop].length > 0) { - node.style[prop] = ''; - } - element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME); - } - - function unblockKeyframeAnimations(element) { - var prop = ANIMATION_PROP; - var node = extractElementNode(element); - if(node.style[prop] && node.style[prop].length > 0) { - node.style[prop] = ''; - } - } - - function animateRun(animationEvent, element, className, activeAnimationComplete) { - var node = extractElementNode(element); - var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(node.getAttribute('class').indexOf(className) == -1 || !elementData) { - activeAnimationComplete(); - return; - } - - var activeClassName = ''; - forEach(className.split(' '), function(klass, i) { - activeClassName += (i > 0 ? ' ' : '') + klass + '-active'; - }); - - var stagger = elementData.stagger; - var timings = elementData.timings; - var itemIndex = elementData.itemIndex; - var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration); - var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay); - var maxDelayTime = maxDelay * ONE_SECOND; - - var startTime = Date.now(); - var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT; - - var style = '', appliedStyles = []; - if(timings.transitionDuration > 0) { - var propertyStyle = timings.transitionPropertyStyle; - if(propertyStyle.indexOf('all') == -1) { - style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';'; - style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';'; - appliedStyles.push(CSS_PREFIX + 'transition-property'); - appliedStyles.push(CSS_PREFIX + 'transition-duration'); - } - } - - if(itemIndex > 0) { - if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) { - var delayStyle = timings.transitionDelayStyle; - style += CSS_PREFIX + 'transition-delay: ' + - prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; '; - appliedStyles.push(CSS_PREFIX + 'transition-delay'); - } - - if(stagger.animationDelay > 0 && stagger.animationDuration === 0) { - style += CSS_PREFIX + 'animation-delay: ' + - prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; '; - appliedStyles.push(CSS_PREFIX + 'animation-delay'); - } - } - - if(appliedStyles.length > 0) { - //the element being animated may sometimes contain comment nodes in - //the jqLite object, so we're safe to use a single variable to house - //the styles since there is always only one element being animated - var oldStyle = node.getAttribute('style') || ''; - node.setAttribute('style', oldStyle + ' ' + style); - } - - element.on(css3AnimationEvents, onAnimationProgress); - element.addClass(activeClassName); - elementData.closeAnimationFn = function() { - onEnd(); - activeAnimationComplete(); - }; - - var staggerTime = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0); - var animationTime = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER; - var totalTime = (staggerTime + animationTime) * ONE_SECOND; - - elementData.running++; - animationCloseHandler(element, totalTime); - return onEnd; - - // This will automatically be called by $animate so - // there is no need to attach this internally to the - // timeout done method. - function onEnd(cancelled) { - element.off(css3AnimationEvents, onAnimationProgress); - element.removeClass(activeClassName); - animateClose(element, className); - var node = extractElementNode(element); - for (var i in appliedStyles) { - node.style.removeProperty(appliedStyles[i]); - } - } - - function onAnimationProgress(event) { - event.stopPropagation(); - var ev = event.originalEvent || event; - var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now(); - - /* Firefox (or possibly just Gecko) likes to not round values up - * when a ms measurement is used for the animation */ - var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); - - /* $manualTimeStamp is a mocked timeStamp value which is set - * within browserTrigger(). This is only here so that tests can - * mock animations properly. Real events fallback to event.timeStamp, - * or, if they don't, then a timeStamp is automatically created for them. - * We're checking to see if the timeStamp surpasses the expected delay, - * but we're using elapsedTime instead of the timeStamp on the 2nd - * pre-condition since animations sometimes close off early */ - if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { - activeAnimationComplete(); - } - } - } - - function prepareStaggerDelay(delayStyle, staggerDelay, index) { - var style = ''; - forEach(delayStyle.split(','), function(val, i) { - style += (i > 0 ? ',' : '') + - (index * staggerDelay + parseInt(val, 10)) + 's'; - }); - return style; - } - - function animateBefore(animationEvent, element, className, calculationDecorator) { - if(animateSetup(animationEvent, element, className, calculationDecorator)) { - return function(cancelled) { - cancelled && animateClose(element, className); - }; - } - } - - function animateAfter(animationEvent, element, className, afterAnimationComplete) { - if(element.data(NG_ANIMATE_CSS_DATA_KEY)) { - return animateRun(animationEvent, element, className, afterAnimationComplete); - } else { - animateClose(element, className); - afterAnimationComplete(); - } - } - - function animate(animationEvent, element, className, animationComplete) { - //If the animateSetup function doesn't bother returning a - //cancellation function then it means that there is no animation - //to perform at all - var preReflowCancellation = animateBefore(animationEvent, element, className); - if(!preReflowCancellation) { - animationComplete(); - return; - } - - //There are two cancellation functions: one is before the first - //reflow animation and the second is during the active state - //animation. The first function will take care of removing the - //data from the element which will not make the 2nd animation - //happen in the first place - var cancel = preReflowCancellation; - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - //once the reflow is complete then we point cancel to - //the new cancellation function which will remove all of the - //animation properties from the active animation - cancel = animateAfter(animationEvent, element, className, animationComplete); - }); - - return function(cancelled) { - (cancel || noop)(cancelled); - }; - } - - function animateClose(element, className) { - element.removeClass(className); - var data = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(data) { - if(data.running) { - data.running--; - } - if(!data.running || data.running === 0) { - element.removeData(NG_ANIMATE_CSS_DATA_KEY); - } - } - } - - return { - enter : function(element, animationCompleted) { - return animate('enter', element, 'ng-enter', animationCompleted); - }, - - leave : function(element, animationCompleted) { - return animate('leave', element, 'ng-leave', animationCompleted); - }, - - move : function(element, animationCompleted) { - return animate('move', element, 'ng-move', animationCompleted); - }, - - beforeSetClass : function(element, add, remove, animationCompleted) { - var className = suffixClasses(remove, '-remove') + ' ' + - suffixClasses(add, '-add'); - var cancellationMethod = animateBefore('setClass', element, className, function(fn) { - /* when classes are removed from an element then the transition style - * that is applied is the transition defined on the element without the - * CSS class being there. This is how CSS3 functions outside of ngAnimate. - * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */ - var klass = element.attr('class'); - element.removeClass(remove); - element.addClass(add); - var timings = fn(); - element.attr('class', klass); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - beforeAddClass : function(element, className, animationCompleted) { - var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), function(fn) { - - /* when a CSS class is added to an element then the transition style that - * is applied is the transition defined on the element when the CSS class - * is added at the time of the animation. This is how CSS3 functions - * outside of ngAnimate. */ - element.addClass(className); - var timings = fn(); - element.removeClass(className); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - setClass : function(element, add, remove, animationCompleted) { - remove = suffixClasses(remove, '-remove'); - add = suffixClasses(add, '-add'); - var className = remove + ' ' + add; - return animateAfter('setClass', element, className, animationCompleted); - }, - - addClass : function(element, className, animationCompleted) { - return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted); - }, - - beforeRemoveClass : function(element, className, animationCompleted) { - var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), function(fn) { - /* when classes are removed from an element then the transition style - * that is applied is the transition defined on the element without the - * CSS class being there. This is how CSS3 functions outside of ngAnimate. - * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */ - var klass = element.attr('class'); - element.removeClass(className); - var timings = fn(); - element.attr('class', klass); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - removeClass : function(element, className, animationCompleted) { - return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted); - } - }; - - function suffixClasses(classes, suffix) { - var className = ''; - classes = angular.isArray(classes) ? classes : classes.split(/\s+/); - forEach(classes, function(klass, i) { - if(klass && klass.length > 0) { - className += (i > 0 ? ' ' : '') + klass + suffix; - } - }); - return className; - } - }]); - }]); - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js b/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js deleted file mode 100644 index 55971e54..00000000 --- a/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(s,g,P){'use strict';g.module("ngAnimate",["ng"]).factory("$$animateReflow",["$$rAF","$document",function(g,s){return function(e){return g(function(){e()})}}]).config(["$provide","$animateProvider",function(ga,G){function e(e){for(var p=0;p<e.length;p++){var g=e[p];if(g.nodeType==ba)return g}}function u(p){return g.element(e(p))}var m=g.noop,p=g.forEach,Q=G.$$selectors,ba=1,h="$$ngAnimateState",J="ng-animate",r={running:!0};ga.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement", -"$$asyncCallback","$rootScope","$document",function(t,s,aa,K,E,H,P){function R(a){if(a){var b=[],c={};a=a.substr(1).split(".");(aa.transitions||aa.animations)&&b.push(s.get(Q[""]));for(var d=0;d<a.length;d++){var f=a[d],e=Q[f];e&&!c[f]&&(b.push(s.get(e)),c[f]=!0)}return b}}function L(a,b,c){function d(a,b){var c=a[b],d=a["before"+b.charAt(0).toUpperCase()+b.substr(1)];if(c||d)return"leave"==b&&(d=c,c=null),A.push({event:b,fn:c}),l.push({event:b,fn:d}),!0}function f(b,d,e){var f=[];p(b,function(a){a.fn&& -f.push(a)});var n=0;p(f,function(b,p){var C=function(){a:{if(d){(d[p]||m)();if(++n<f.length)break a;d=null}e()}};switch(b.event){case "setClass":d.push(b.fn(a,q,y,C));break;case "addClass":d.push(b.fn(a,q||c,C));break;case "removeClass":d.push(b.fn(a,y||c,C));break;default:d.push(b.fn(a,C))}});d&&0===d.length&&e()}var e=a[0];if(e){var h="setClass"==b,r=h||"addClass"==b||"removeClass"==b,q,y;g.isArray(c)&&(q=c[0],y=c[1],c=q+" "+y);var z=a.attr("class")+" "+c;if(T(z)){var v=m,w=[],l=[],x=m,n=[],A=[], -z=(" "+z).replace(/\s+/g,".");p(R(z),function(a){!d(a,b)&&h&&(d(a,"addClass"),d(a,"removeClass"))});return{node:e,event:b,className:c,isClassBased:r,isSetClassOperation:h,before:function(a){v=a;f(l,w,function(){v=m;a()})},after:function(a){x=a;f(A,n,function(){x=m;a()})},cancel:function(){w&&(p(w,function(a){(a||m)(!0)}),v(!0));n&&(p(n,function(a){(a||m)(!0)}),x(!0))}}}}}function F(a,b,c,d,f,e,r){function m(d){var e="$animate:"+d;x&&(x[e]&&0<x[e].length)&&E(function(){c.triggerHandler(e,{event:a, -className:b})})}function q(){m("before")}function y(){m("after")}function z(){m("close");r&&E(function(){r()})}function v(){v.hasBeenRun||(v.hasBeenRun=!0,e())}function w(){if(!w.hasBeenRun){w.hasBeenRun=!0;var d=c.data(h);d&&(l&&l.isClassBased?B(c,b):(E(function(){var d=c.data(h)||{};t==d.index&&B(c,b,a)}),c.data(h,d)));z()}}var l=L(c,a,b);if(l){b=l.className;var x=g.element._data(l.node),x=x&&x.events;d||(d=f?f.parent():c.parent());var n=c.data(h)||{};f=n.active||{};var A=n.totalActive||0,C=n.last; -if(l.isClassBased&&(n.disabled||C&&!C.isClassBased)||N(c,d))v(),q(),y(),w();else{d=!1;if(0<A){n=[];if(l.isClassBased)"setClass"==C.event?(n.push(C),B(c,b)):f[b]&&(s=f[b],s.event==a?d=!0:(n.push(s),B(c,b)));else if("leave"==a&&f["ng-leave"])d=!0;else{for(var s in f)n.push(f[s]),B(c,s);f={};A=0}0<n.length&&p(n,function(a){a.cancel()})}!l.isClassBased||(l.isSetClassOperation||d)||(d="addClass"==a==c.hasClass(b));if(d)q(),y(),z();else{if("leave"==a)c.one("$destroy",function(a){a=g.element(this);var b= -a.data(h);b&&(b=b.active["ng-leave"])&&(b.cancel(),B(a,"ng-leave"))});c.addClass(J);var t=O++;A++;f[b]=l;c.data(h,{last:l,active:f,index:t,totalActive:A});q();l.before(function(d){var e=c.data(h);d=d||!e||!e.active[b]||l.isClassBased&&e.active[b].event!=a;v();!0===d?w():(y(),l.after(w))})}}}else v(),q(),y(),w()}function U(a){if(a=e(a))a=g.isFunction(a.getElementsByClassName)?a.getElementsByClassName(J):a.querySelectorAll("."+J),p(a,function(a){a=g.element(a);(a=a.data(h))&&a.active&&p(a.active,function(a){a.cancel()})})} -function B(a,b){if(e(a)==e(K))r.disabled||(r.running=!1,r.structural=!1);else if(b){var c=a.data(h)||{},d=!0===b;!d&&(c.active&&c.active[b])&&(c.totalActive--,delete c.active[b]);if(d||!c.totalActive)a.removeClass(J),a.removeData(h)}}function N(a,b){if(r.disabled)return!0;if(e(a)==e(K))return r.disabled||r.running;do{if(0===b.length)break;var c=e(b)==e(K),d=c?r:b.data(h),d=d&&(!!d.disabled||d.running||0<d.totalActive);if(c||d)return d;if(c)break}while(b=b.parent());return!0}var O=0;K.data(h,r);H.$$postDigest(function(){H.$$postDigest(function(){r.running= -!1})});var V=G.classNameFilter(),T=V?function(a){return V.test(a)}:function(){return!0};return{enter:function(a,b,c,d){this.enabled(!1,a);t.enter(a,b,c);H.$$postDigest(function(){a=u(a);F("enter","ng-enter",a,b,c,m,d)})},leave:function(a,b){U(a);this.enabled(!1,a);H.$$postDigest(function(){F("leave","ng-leave",u(a),null,null,function(){t.leave(a)},b)})},move:function(a,b,c,d){U(a);this.enabled(!1,a);t.move(a,b,c);H.$$postDigest(function(){a=u(a);F("move","ng-move",a,b,c,m,d)})},addClass:function(a, -b,c){a=u(a);F("addClass",b,a,null,null,function(){t.addClass(a,b)},c)},removeClass:function(a,b,c){a=u(a);F("removeClass",b,a,null,null,function(){t.removeClass(a,b)},c)},setClass:function(a,b,c,d){a=u(a);F("setClass",[b,c],a,null,null,function(){t.setClass(a,b,c)},d)},enabled:function(a,b){switch(arguments.length){case 2:if(a)B(b);else{var c=b.data(h)||{};c.disabled=!0;b.data(h,c)}break;case 1:r.disabled=!a;break;default:a=!r.disabled}return!!a}}}]);G.register("",["$window","$sniffer","$timeout", -"$$animateReflow",function(h,r,u,K){function E(a,k){S&&S();W.push(k);S=K(function(){p(W,function(a){a()});W=[];S=null;M={}})}function H(a,k){var b=e(a);a=g.element(b);Y.push(a);b=Date.now()+k;b<=fa||(u.cancel(ea),fa=b,ea=u(function(){J(Y);Y=[]},k,!1))}function J(a){p(a,function(a){(a=a.data(n))&&(a.closeAnimationFn||m)()})}function R(a,k){var b=k?M[k]:null;if(!b){var c=0,d=0,e=0,f=0,n,Z,$,g;p(a,function(a){if(a.nodeType==ba){a=h.getComputedStyle(a)||{};$=a[I+z];c=Math.max(L($),c);g=a[I+v];n=a[I+w]; -d=Math.max(L(n),d);Z=a[q+w];f=Math.max(L(Z),f);var k=L(a[q+z]);0<k&&(k*=parseInt(a[q+l],10)||1);e=Math.max(k,e)}});b={total:0,transitionPropertyStyle:g,transitionDurationStyle:$,transitionDelayStyle:n,transitionDelay:d,transitionDuration:c,animationDelayStyle:Z,animationDelay:f,animationDuration:e};k&&(M[k]=b)}return b}function L(a){var k=0;a=g.isString(a)?a.split(/\s*,\s*/):[];p(a,function(a){k=Math.max(parseFloat(a)||0,k)});return k}function F(a){var k=a.parent(),b=k.data(x);b||(k.data(x,++da), -b=da);return b+"-"+e(a).getAttribute("class")}function U(a,k,b,c){var d=F(k),f=d+" "+b,p=M[f]?++M[f].total:0,g={};if(0<p){var h=b+"-stagger",g=d+" "+h;(d=!M[g])&&k.addClass(h);g=R(k,g);d&&k.removeClass(h)}c=c||function(a){return a()};k.addClass(b);var h=k.data(n)||{},l=c(function(){return R(k,f)});c=l.transitionDuration;d=l.animationDuration;if(0===c&&0===d)return k.removeClass(b),!1;k.data(n,{running:h.running||0,itemIndex:p,stagger:g,timings:l,closeAnimationFn:m});a=0<h.running||"setClass"==a;0< -c&&B(k,b,a);0<d&&(0<g.animationDelay&&0===g.animationDuration)&&(e(k).style[q]="none 0s");return!0}function B(a,b,c){"ng-enter"!=b&&("ng-move"!=b&&"ng-leave"!=b)&&c?a.addClass(A):e(a).style[I+v]="none"}function N(a,b){var c=I+v,d=e(a);d.style[c]&&0<d.style[c].length&&(d.style[c]="");a.removeClass(A)}function O(a){var b=q;a=e(a);a.style[b]&&0<a.style[b].length&&(a.style[b]="")}function V(a,b,c,f){function g(a){b.off(z,h);b.removeClass(r);d(b,c);a=e(b);for(var X in u)a.style.removeProperty(u[X])}function h(a){a.stopPropagation(); -var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(C));Math.max(a-A,0)>=x&&b>=v&&f()}var l=e(b);a=b.data(n);if(-1!=l.getAttribute("class").indexOf(c)&&a){var r="";p(c.split(" "),function(a,b){r+=(0<b?" ":"")+a+"-active"});var q=a.stagger,m=a.timings,s=a.itemIndex,v=Math.max(m.transitionDuration,m.animationDuration),w=Math.max(m.transitionDelay,m.animationDelay),x=w*ca,A=Date.now(),z=y+" "+G,t="",u=[];if(0<m.transitionDuration){var B=m.transitionPropertyStyle; --1==B.indexOf("all")&&(t+=D+"transition-property: "+B+";",t+=D+"transition-duration: "+m.transitionDurationStyle+";",u.push(D+"transition-property"),u.push(D+"transition-duration"))}0<s&&(0<q.transitionDelay&&0===q.transitionDuration&&(t+=D+"transition-delay: "+T(m.transitionDelayStyle,q.transitionDelay,s)+"; ",u.push(D+"transition-delay")),0<q.animationDelay&&0===q.animationDuration&&(t+=D+"animation-delay: "+T(m.animationDelayStyle,q.animationDelay,s)+"; ",u.push(D+"animation-delay")));0<u.length&& -(m=l.getAttribute("style")||"",l.setAttribute("style",m+" "+t));b.on(z,h);b.addClass(r);a.closeAnimationFn=function(){g();f()};l=(s*(Math.max(q.animationDelay,q.transitionDelay)||0)+(w+v)*Q)*ca;a.running++;H(b,l);return g}f()}function T(a,b,c){var d="";p(a.split(","),function(a,X){d+=(0<X?",":"")+(c*b+parseInt(a,10))+"s"});return d}function a(a,b,c,e){if(U(a,b,c,e))return function(a){a&&d(b,c)}}function b(a,b,c,e){if(b.data(n))return V(a,b,c,e);d(b,c);e()}function c(c,d,e,f){var g=a(c,d,e);if(g){var h= -g;E(d,function(){N(d,e);O(d);h=b(c,d,e,f)});return function(a){(h||m)(a)}}f()}function d(a,b){a.removeClass(b);var c=a.data(n);c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData(n))}function f(a,b){var c="";a=g.isArray(a)?a:a.split(/\s+/);p(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var D="",I,G,q,y;s.ontransitionend===P&&s.onwebkittransitionend!==P?(D="-webkit-",I="WebkitTransition",G="webkitTransitionEnd transitionend"):(I="transition",G="transitionend");s.onanimationend=== -P&&s.onwebkitanimationend!==P?(D="-webkit-",q="WebkitAnimation",y="webkitAnimationEnd animationend"):(q="animation",y="animationend");var z="Duration",v="Property",w="Delay",l="IterationCount",x="$$ngAnimateKey",n="$$ngAnimateCSS3Data",A="ng-animate-block-transitions",C=3,Q=1.5,ca=1E3,M={},da=0,W=[],S,ea=null,fa=0,Y=[];return{enter:function(a,b){return c("enter",a,"ng-enter",b)},leave:function(a,b){return c("leave",a,"ng-leave",b)},move:function(a,b){return c("move",a,"ng-move",b)},beforeSetClass:function(b, -c,d,e){var g=f(d,"-remove")+" "+f(c,"-add"),h=a("setClass",b,g,function(a){var e=b.attr("class");b.removeClass(d);b.addClass(c);a=a();b.attr("class",e);return a});if(h)return E(b,function(){N(b,g);O(b);e()}),h;e()},beforeAddClass:function(b,c,d){var e=a("addClass",b,f(c,"-add"),function(a){b.addClass(c);a=a();b.removeClass(c);return a});if(e)return E(b,function(){N(b,c);O(b);d()}),e;d()},setClass:function(a,c,d,e){d=f(d,"-remove");c=f(c,"-add");return b("setClass",a,d+" "+c,e)},addClass:function(a, -c,d){return b("addClass",a,f(c,"-add"),d)},beforeRemoveClass:function(b,c,d){var e=a("removeClass",b,f(c,"-remove"),function(a){var d=b.attr("class");b.removeClass(c);a=a();b.attr("class",d);return a});if(e)return E(b,function(){N(b,c);O(b);d()}),e;d()},removeClass:function(a,c,d){return b("removeClass",a,f(c,"-remove"),d)}}}])}])})(window,window.angular); -//# sourceMappingURL=angular-animate.min.js.map diff --git a/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js.map b/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js.map deleted file mode 100644 index 1206afbe..00000000 --- a/platforms/android/assets/www/lib/angular-animate/angular-animate.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-animate.min.js", -"lineCount":26, -"mappings":"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", -"sources":["angular-animate.js"], -"names":["window","angular","undefined","module","factory","$$rAF","$document","fn","config","$provide","$animateProvider","extractElementNode","element","i","length","elm","nodeType","ELEMENT_NODE","stripCommentsFromElement","noop","forEach","selectors","$$selectors","NG_ANIMATE_STATE","NG_ANIMATE_CLASS_NAME","rootAnimateState","decorator","$delegate","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","lookup","name","matches","flagMap","classes","substr","split","transitions","animations","push","get","klass","selectorFactoryName","animationRunner","animationEvent","className","registerAnimation","animationFactory","event","afterFn","beforeFn","charAt","toUpperCase","after","before","run","fns","cancellations","allCompleteFn","animation","count","index","progress","classNameAdd","classNameRemove","node","isSetClassOperation","isClassBased","isArray","attr","currentClassName","isAnimatableClassName","beforeComplete","beforeCancel","afterComplete","afterCancel","animationLookup","replace","created","cancel","cancelFn","performAnimation","parentElement","afterElement","domOperation","doneCallback","fireDOMCallback","animationPhase","eventName","elementEvents","triggerHandler","fireBeforeCallbackAsync","fireAfterCallbackAsync","fireDoneCallbackAsync","fireDOMOperation","hasBeenRun","closeAnimation","data","runner","cleanup","localAnimationCount","_data","events","parent","ngAnimateState","runningAnimations","active","totalActiveAnimations","totalActive","lastAnimation","last","disabled","animationsDisabled","skipAnimation","animationsToCancel","current","operation","hasClass","one","e","state","activeLeaveAnimation","addClass","globalAnimationCounter","cancelled","cancelChildAnimations","nodes","isFunction","getElementsByClassName","querySelectorAll","running","structural","removeAnimations","removeClass","removeData","isRoot","result","$$postDigest","classNameFilter","test","enter","enabled","leave","move","setClass","add","remove","value","arguments","register","$window","$timeout","$$animateReflow","afterReflow","callback","cancelAnimationReflow","animationReflowQueue","lookupCache","animationCloseHandler","totalTime","animationElementQueue","futureTimestamp","Date","now","closingTimestamp","closingTimer","closeAllAnimations","elements","elementData","NG_ANIMATE_CSS_DATA_KEY","closeAnimationFn","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","transitionDelayStyle","animationDelayStyle","transitionDurationStyle","transitionPropertyStyle","elementStyles","getComputedStyle","TRANSITION_PROP","DURATION_KEY","Math","max","parseMaxTime","PROPERTY_KEY","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","str","maxValue","values","isString","parseFloat","getCacheKey","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","getAttribute","animateSetup","calculationDecorator","eventCacheKey","itemIndex","total","stagger","staggerClassName","staggerCacheKey","applyClasses","formerData","timings","isCurrentlyAnimating","blockTransitions","style","isAnimating","NG_ANIMATE_BLOCK_CLASS_NAME","unblockTransitions","prop","unblockKeyframeAnimations","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","activeClassName","animateClose","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","maxDuration","indexOf","maxDelay","ONE_SECOND","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","propertyStyle","CSS_PREFIX","prepareStaggerDelay","oldStyle","setAttribute","on","elementData.closeAnimationFn","CLOSING_TIME_BUFFER","delayStyle","staggerDelay","val","animateBefore","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","animationCompleted","beforeSetClass","cancellationMethod","beforeAddClass","beforeRemoveClass"] -} diff --git a/platforms/android/assets/www/lib/angular-animate/bower.json b/platforms/android/assets/www/lib/angular-animate/bower.json deleted file mode 100644 index 21b67989..00000000 --- a/platforms/android/assets/www/lib/angular-animate/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-animate", - "version": "1.2.16", - "main": "./angular-animate.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-cookies/.bower.json b/platforms/android/assets/www/lib/angular-cookies/.bower.json deleted file mode 100644 index eaa46035..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-cookies", - "version": "1.2.16", - "main": "./angular-cookies.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-cookies", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "8515dbd25c3b0a9d334f657849e4a7ec609bf91b" - }, - "_source": "git://github.com/angular/bower-angular-cookies.git", - "_target": "1.2.16", - "_originalSource": "angular-cookies" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-cookies/README.md b/platforms/android/assets/www/lib/angular-cookies/README.md deleted file mode 100644 index 77c71f4d..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-cookies - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngCookies). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-cookies -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-cookies/angular-cookies.js"></script> -``` - -And add `ngCookies` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngCookies']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngCookies). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.js b/platforms/android/assets/www/lib/angular-cookies/angular-cookies.js deleted file mode 100644 index f43d44dc..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngCookies - * @description - * - * # ngCookies - * - * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies. - * - * - * <div doc-module-components="ngCookies"></div> - * - * See {@link ngCookies.$cookies `$cookies`} and - * {@link ngCookies.$cookieStore `$cookieStore`} for usage. - */ - - -angular.module('ngCookies', ['ng']). - /** - * @ngdoc service - * @name $cookies - * - * @description - * Provides read/write access to browser's cookies. - * - * Only a simple Object is exposed and by adding or removing properties to/from this object, new - * cookies are created/deleted at the end of current $eval. - * The object's properties can only be strings. - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - <example> - <file name="index.html"> - <script> - function ExampleController($cookies) { - // Retrieving a cookie - var favoriteCookie = $cookies.myFavorite; - // Setting a cookie - $cookies.myFavorite = 'oatmeal'; - } - </script> - </file> - </example> - */ - factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) { - var cookies = {}, - lastCookies = {}, - lastBrowserCookies, - runEval = false, - copy = angular.copy, - isUndefined = angular.isUndefined; - - //creates a poller fn that copies all cookies from the $browser to service & inits the service - $browser.addPollFn(function() { - var currentCookies = $browser.cookies(); - if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl - lastBrowserCookies = currentCookies; - copy(currentCookies, lastCookies); - copy(currentCookies, cookies); - if (runEval) $rootScope.$apply(); - } - })(); - - runEval = true; - - //at the end of each eval, push cookies - //TODO: this should happen before the "delayed" watches fire, because if some cookies are not - // strings or browser refuses to store some cookies, we update the model in the push fn. - $rootScope.$watch(push); - - return cookies; - - - /** - * Pushes all the cookies from the service to the browser and verifies if all cookies were - * stored. - */ - function push() { - var name, - value, - browserCookies, - updated; - - //delete any cookies deleted in $cookies - for (name in lastCookies) { - if (isUndefined(cookies[name])) { - $browser.cookies(name, undefined); - } - } - - //update all cookies updated in $cookies - for(name in cookies) { - value = cookies[name]; - if (!angular.isString(value)) { - value = '' + value; - cookies[name] = value; - } - if (value !== lastCookies[name]) { - $browser.cookies(name, value); - updated = true; - } - } - - //verify what was actually stored - if (updated){ - updated = false; - browserCookies = $browser.cookies(); - - for (name in cookies) { - if (cookies[name] !== browserCookies[name]) { - //delete or reset all cookies that the browser dropped from $cookies - if (isUndefined(browserCookies[name])) { - delete cookies[name]; - } else { - cookies[name] = browserCookies[name]; - } - updated = true; - } - } - } - } - }]). - - - /** - * @ngdoc service - * @name $cookieStore - * @requires $cookies - * - * @description - * Provides a key-value (string-object) storage, that is backed by session cookies. - * Objects put or retrieved from this storage are automatically serialized or - * deserialized by angular's toJson/fromJson. - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - */ - factory('$cookieStore', ['$cookies', function($cookies) { - - return { - /** - * @ngdoc method - * @name $cookieStore#get - * - * @description - * Returns the value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {Object} Deserialized cookie value. - */ - get: function(key) { - var value = $cookies[key]; - return value ? angular.fromJson(value) : value; - }, - - /** - * @ngdoc method - * @name $cookieStore#put - * - * @description - * Sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {Object} value Value to be stored. - */ - put: function(key, value) { - $cookies[key] = angular.toJson(value); - }, - - /** - * @ngdoc method - * @name $cookieStore#remove - * - * @description - * Remove given cookie - * - * @param {string} key Id of the key-value pair to delete. - */ - remove: function(key) { - delete $cookies[key]; - } - }; - - }]); - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js b/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js deleted file mode 100644 index 4d4527f3..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore", -["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular); -//# sourceMappingURL=angular-cookies.min.js.map diff --git a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js.map b/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js.map deleted file mode 100644 index 1d3c5d32..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/angular-cookies.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-cookies.min.js", -"lineCount":7, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CACEY,CAKA,CALQZ,CAAA,CAAQW,CAAR,CAKR,CAJKjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAIL,GAHEA,CACA,CADQ,EACR,CADaA,CACb,CAAAZ,CAAA,CAAQW,CAAR,CAAA,CAAgBC,CAElB,EAAIA,CAAJ,GAAcX,CAAA,CAAYU,CAAZ,CAAd,GACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CAFZ,CAOF,IAAIA,CAAJ,CAIE,IAAKF,CAAL,GAFAI,EAEaf,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBI,CAAA,CAAeJ,CAAf,CAAtB,GAEMN,CAAA,CAAYU,CAAA,CAAeJ,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBI,CAAA,CAAeJ,CAAf,CALpB,CAhCU,CAThB,CAEA,OAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA0HW,cA1HX;AA0H2B,CAAC,UAAD,CAAa,QAAQ,CAACmB,CAAD,CAAW,CAErD,MAAO,KAWAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHN,CACG,CADKI,CAAA,CAASE,CAAT,CACL,EAAQxB,CAAAyB,SAAA,CAAiBP,CAAjB,CAAR,CAAkCA,CAFxB,CAXd,KA0BAQ,QAAQ,CAACF,CAAD,CAAMN,CAAN,CAAa,CACxBI,CAAA,CAASE,CAAT,CAAA,CAAgBxB,CAAA2B,OAAA,CAAeT,CAAf,CADQ,CA1BrB,QAuCGU,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CAvCjB,CAF8C,CAAhC,CA1H3B,CAnBsC,CAArC,CAAA,CA8LEzB,MA9LF,CA8LUA,MAAAC,QA9LV;", -"sources":["angular-cookies.js"], -"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"] -} diff --git a/platforms/android/assets/www/lib/angular-cookies/bower.json b/platforms/android/assets/www/lib/angular-cookies/bower.json deleted file mode 100644 index cf5f05a0..00000000 --- a/platforms/android/assets/www/lib/angular-cookies/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-cookies", - "version": "1.2.16", - "main": "./angular-cookies.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-mocks/.bower.json b/platforms/android/assets/www/lib/angular-mocks/.bower.json deleted file mode 100644 index ce38275c..00000000 --- a/platforms/android/assets/www/lib/angular-mocks/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.2.16", - "main": "./angular-mocks.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-mocks", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "e429a011d88c402430329449500f352751d1a137" - }, - "_source": "git://github.com/angular/bower-angular-mocks.git", - "_target": "1.2.16", - "_originalSource": "angular-mocks" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-mocks/README.md b/platforms/android/assets/www/lib/angular-mocks/README.md deleted file mode 100644 index 3448d284..00000000 --- a/platforms/android/assets/www/lib/angular-mocks/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# bower-angular-mocks - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-mocks -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/guide/dev_guide.unit-testing). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-mocks/angular-mocks.js b/platforms/android/assets/www/lib/angular-mocks/angular-mocks.js deleted file mode 100644 index da804b4a..00000000 --- a/platforms/android/assets/www/lib/angular-mocks/angular-mocks.js +++ /dev/null @@ -1,2163 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) { - -'use strict'; - -/** - * @ngdoc object - * @name angular.mock - * @description - * - * Namespace from 'angular-mocks.js' which contains testing related code. - */ -angular.mock = {}; - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * - * @description - * This service is a mock implementation of {@link ng.$browser}. It provides fake - * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, - * cookies, etc... - * - * The api of this service is the same as that of the real {@link ng.$browser $browser}, except - * that there are several helper methods available which can be used in tests. - */ -angular.mock.$BrowserProvider = function() { - this.$get = function() { - return new angular.mock.$Browser(); - }; -}; - -angular.mock.$Browser = function() { - var self = this; - - this.isMock = true; - self.$$url = "http://server/"; - self.$$lastUrl = self.$$url; // used by url polling fn - self.pollFns = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = angular.noop; - self.$$incOutstandingRequestCount = angular.noop; - - - // register url polling fn - - self.onUrlChange = function(listener) { - self.pollFns.push( - function() { - if (self.$$lastUrl != self.$$url) { - self.$$lastUrl = self.$$url; - listener(self.$$url); - } - } - ); - - return listener; - }; - - self.cookieHash = {}; - self.lastCookieHash = {}; - self.deferredFns = []; - self.deferredNextId = 0; - - self.defer = function(fn, delay) { - delay = delay || 0; - self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); - self.deferredFns.sort(function(a,b){ return a.time - b.time;}); - return self.deferredNextId++; - }; - - - /** - * @name $browser#defer.now - * - * @description - * Current milliseconds mock time. - */ - self.defer.now = 0; - - - self.defer.cancel = function(deferId) { - var fnIndex; - - angular.forEach(self.deferredFns, function(fn, index) { - if (fn.id === deferId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - self.deferredFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - - /** - * @name $browser#defer.flush - * - * @description - * Flushes all pending requests and executes the defer callbacks. - * - * @param {number=} number of milliseconds to flush. See {@link #defer.now} - */ - self.defer.flush = function(delay) { - if (angular.isDefined(delay)) { - self.defer.now += delay; - } else { - if (self.deferredFns.length) { - self.defer.now = self.deferredFns[self.deferredFns.length-1].time; - } else { - throw new Error('No deferred tasks to be flushed'); - } - } - - while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { - self.deferredFns.shift().fn(); - } - }; - - self.$$baseHref = ''; - self.baseHref = function() { - return this.$$baseHref; - }; -}; -angular.mock.$Browser.prototype = { - -/** - * @name $browser#poll - * - * @description - * run all fns in pollFns - */ - poll: function poll() { - angular.forEach(this.pollFns, function(pollFn){ - pollFn(); - }); - }, - - addPollFn: function(pollFn) { - this.pollFns.push(pollFn); - return pollFn; - }, - - url: function(url, replace) { - if (url) { - this.$$url = url; - return this; - } - - return this.$$url; - }, - - cookies: function(name, value) { - if (name) { - if (angular.isUndefined(value)) { - delete this.cookieHash[name]; - } else { - if (angular.isString(value) && //strings only - value.length <= 4096) { //strict cookie storage limits - this.cookieHash[name] = value; - } - } - } else { - if (!angular.equals(this.cookieHash, this.lastCookieHash)) { - this.lastCookieHash = angular.copy(this.cookieHash); - this.cookieHash = angular.copy(this.cookieHash); - } - return this.cookieHash; - } - }, - - notifyWhenNoOutstandingRequests: function(fn) { - fn(); - } -}; - - -/** - * @ngdoc provider - * @name $exceptionHandlerProvider - * - * @description - * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors - * passed into the `$exceptionHandler`. - */ - -/** - * @ngdoc service - * @name $exceptionHandler - * - * @description - * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed - * into it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration - * information. - * - * - * ```js - * describe('$exceptionHandlerProvider', function() { - * - * it('should capture log messages and exceptions', function() { - * - * module(function($exceptionHandlerProvider) { - * $exceptionHandlerProvider.mode('log'); - * }); - * - * inject(function($log, $exceptionHandler, $timeout) { - * $timeout(function() { $log.log(1); }); - * $timeout(function() { $log.log(2); throw 'banana peel'; }); - * $timeout(function() { $log.log(3); }); - * expect($exceptionHandler.errors).toEqual([]); - * expect($log.assertEmpty()); - * $timeout.flush(); - * expect($exceptionHandler.errors).toEqual(['banana peel']); - * expect($log.log.logs).toEqual([[1], [2], [3]]); - * }); - * }); - * }); - * ``` - */ - -angular.mock.$ExceptionHandlerProvider = function() { - var handler; - - /** - * @ngdoc method - * @name $exceptionHandlerProvider#mode - * - * @description - * Sets the logging mode. - * - * @param {string} mode Mode of operation, defaults to `rethrow`. - * - * - `rethrow`: If any errors are passed into the handler in tests, it typically - * means that there is a bug in the application or test, so this mock will - * make these tests fail. - * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` - * mode stores an array of errors in `$exceptionHandler.errors`, to allow later - * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and - * {@link ngMock.$log#reset reset()} - */ - this.mode = function(mode) { - switch(mode) { - case 'rethrow': - handler = function(e) { - throw e; - }; - break; - case 'log': - var errors = []; - - handler = function(e) { - if (arguments.length == 1) { - errors.push(e); - } else { - errors.push([].slice.call(arguments, 0)); - } - }; - - handler.errors = errors; - break; - default: - throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); - } - }; - - this.$get = function() { - return handler; - }; - - this.mode('rethrow'); -}; - - -/** - * @ngdoc service - * @name $log - * - * @description - * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays - * (one array per logging level). These arrays are exposed as `logs` property of each of the - * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. - * - */ -angular.mock.$LogProvider = function() { - var debug = true; - - function concat(array1, array2, index) { - return array1.concat(Array.prototype.slice.call(array2, index)); - } - - this.debugEnabled = function(flag) { - if (angular.isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = function () { - var $log = { - log: function() { $log.log.logs.push(concat([], arguments, 0)); }, - warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, - info: function() { $log.info.logs.push(concat([], arguments, 0)); }, - error: function() { $log.error.logs.push(concat([], arguments, 0)); }, - debug: function() { - if (debug) { - $log.debug.logs.push(concat([], arguments, 0)); - } - } - }; - - /** - * @ngdoc method - * @name $log#reset - * - * @description - * Reset all of the logging arrays to empty. - */ - $log.reset = function () { - /** - * @ngdoc property - * @name $log#log.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#log}. - * - * @example - * ```js - * $log.log('Some Log'); - * var first = $log.log.logs.unshift(); - * ``` - */ - $log.log.logs = []; - /** - * @ngdoc property - * @name $log#info.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#info}. - * - * @example - * ```js - * $log.info('Some Info'); - * var first = $log.info.logs.unshift(); - * ``` - */ - $log.info.logs = []; - /** - * @ngdoc property - * @name $log#warn.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#warn}. - * - * @example - * ```js - * $log.warn('Some Warning'); - * var first = $log.warn.logs.unshift(); - * ``` - */ - $log.warn.logs = []; - /** - * @ngdoc property - * @name $log#error.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#error}. - * - * @example - * ```js - * $log.error('Some Error'); - * var first = $log.error.logs.unshift(); - * ``` - */ - $log.error.logs = []; - /** - * @ngdoc property - * @name $log#debug.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#debug}. - * - * @example - * ```js - * $log.debug('Some Error'); - * var first = $log.debug.logs.unshift(); - * ``` - */ - $log.debug.logs = []; - }; - - /** - * @ngdoc method - * @name $log#assertEmpty - * - * @description - * Assert that the all of the logging methods have no logged messages. If messages present, an - * exception is thrown. - */ - $log.assertEmpty = function() { - var errors = []; - angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { - angular.forEach($log[logLevel].logs, function(log) { - angular.forEach(log, function (logItem) { - errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + - (logItem.stack || '')); - }); - }); - }); - if (errors.length) { - errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+ - "an expected log message was not checked and removed:"); - errors.push(''); - throw new Error(errors.join('\n---------\n')); - } - }; - - $log.reset(); - return $log; - }; -}; - - -/** - * @ngdoc service - * @name $interval - * - * @description - * Mock implementation of the $interval service. - * - * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - */ -angular.mock.$IntervalProvider = function() { - this.$get = ['$rootScope', '$q', - function($rootScope, $q) { - var repeatFns = [], - nextRepeatId = 0, - now = 0; - - var $interval = function(fn, delay, count, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (angular.isDefined(invokeApply) && !invokeApply); - - count = (angular.isDefined(count)) ? count : 0, - promise.then(null, null, fn); - - promise.$$intervalId = nextRepeatId; - - function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - var fnIndex; - deferred.resolve(iteration); - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns.splice(fnIndex, 1); - } - } - - if (!skipApply) $rootScope.$apply(); - } - - repeatFns.push({ - nextTime:(now + delay), - delay: delay, - fn: tick, - id: nextRepeatId, - deferred: deferred - }); - repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); - - nextRepeatId++; - return promise; - }; - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise A promise from calling the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully cancelled. - */ - $interval.cancel = function(promise) { - if(!promise) return false; - var fnIndex; - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns[fnIndex].deferred.reject('canceled'); - repeatFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - /** - * @ngdoc method - * @name $interval#flush - * @description - * - * Runs interval tasks scheduled to be run in the next `millis` milliseconds. - * - * @param {number=} millis maximum timeout amount to flush up until. - * - * @return {number} The amount of time moved forward. - */ - $interval.flush = function(millis) { - now += millis; - while (repeatFns.length && repeatFns[0].nextTime <= now) { - var task = repeatFns[0]; - task.fn(); - task.nextTime += task.delay; - repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); - } - return millis; - }; - - return $interval; - }]; -}; - - -/* jshint -W101 */ -/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! - * This directive should go inside the anonymous function but a bug in JSHint means that it would - * not be enacted early enough to prevent the warning. - */ -var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; - -function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8061_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0; - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); - date.setUTCHours(int(match[4]||0) - tzHour, - int(match[5]||0) - tzMin, - int(match[6]||0), - int(match[7]||0)); - return date; - } - return string; -} - -function int(str) { - return parseInt(str, 10); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -/** - * @ngdoc type - * @name angular.mock.TzDate - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. - * - * Mock of the Date type which has its timezone specified via constructor arg. - * - * The main purpose is to create Date-like instances with timezone fixed to the specified timezone - * offset, so that we can test code that depends on local timezone settings without dependency on - * the time zone settings of the machine where the code is running. - * - * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) - * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* - * - * @example - * !!!! WARNING !!!!! - * This is not a complete Date object so only methods that were implemented can be called safely. - * To make matters worse, TzDate instances inherit stuff from Date via a prototype. - * - * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is - * incomplete we might be missing some non-standard methods. This can result in errors like: - * "Date.prototype.foo called on incompatible Object". - * - * ```js - * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); - * newYearInBratislava.getTimezoneOffset() => -60; - * newYearInBratislava.getFullYear() => 2010; - * newYearInBratislava.getMonth() => 0; - * newYearInBratislava.getDate() => 1; - * newYearInBratislava.getHours() => 0; - * newYearInBratislava.getMinutes() => 0; - * newYearInBratislava.getSeconds() => 0; - * ``` - * - */ -angular.mock.TzDate = function (offset, timestamp) { - var self = new Date(0); - if (angular.isString(timestamp)) { - var tsStr = timestamp; - - self.origDate = jsonStringToDate(timestamp); - - timestamp = self.origDate.getTime(); - if (isNaN(timestamp)) - throw { - name: "Illegal Argument", - message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" - }; - } else { - self.origDate = new Date(timestamp); - } - - var localOffset = new Date(timestamp).getTimezoneOffset(); - self.offsetDiff = localOffset*60*1000 - offset*1000*60*60; - self.date = new Date(timestamp + self.offsetDiff); - - self.getTime = function() { - return self.date.getTime() - self.offsetDiff; - }; - - self.toLocaleDateString = function() { - return self.date.toLocaleDateString(); - }; - - self.getFullYear = function() { - return self.date.getFullYear(); - }; - - self.getMonth = function() { - return self.date.getMonth(); - }; - - self.getDate = function() { - return self.date.getDate(); - }; - - self.getHours = function() { - return self.date.getHours(); - }; - - self.getMinutes = function() { - return self.date.getMinutes(); - }; - - self.getSeconds = function() { - return self.date.getSeconds(); - }; - - self.getMilliseconds = function() { - return self.date.getMilliseconds(); - }; - - self.getTimezoneOffset = function() { - return offset * 60; - }; - - self.getUTCFullYear = function() { - return self.origDate.getUTCFullYear(); - }; - - self.getUTCMonth = function() { - return self.origDate.getUTCMonth(); - }; - - self.getUTCDate = function() { - return self.origDate.getUTCDate(); - }; - - self.getUTCHours = function() { - return self.origDate.getUTCHours(); - }; - - self.getUTCMinutes = function() { - return self.origDate.getUTCMinutes(); - }; - - self.getUTCSeconds = function() { - return self.origDate.getUTCSeconds(); - }; - - self.getUTCMilliseconds = function() { - return self.origDate.getUTCMilliseconds(); - }; - - self.getDay = function() { - return self.date.getDay(); - }; - - // provide this method only on browsers that already have it - if (self.toISOString) { - self.toISOString = function() { - return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + - padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + - padNumber(self.origDate.getUTCDate(), 2) + 'T' + - padNumber(self.origDate.getUTCHours(), 2) + ':' + - padNumber(self.origDate.getUTCMinutes(), 2) + ':' + - padNumber(self.origDate.getUTCSeconds(), 2) + '.' + - padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; - }; - } - - //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getUTCDay', - 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', - 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', - 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', - 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', - 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; - - angular.forEach(unimplementedMethods, function(methodName) { - self[methodName] = function() { - throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); - }; - }); - - return self; -}; - -//make "tzDateInstance instanceof Date" return true -angular.mock.TzDate.prototype = Date.prototype; -/* jshint +W101 */ - -angular.mock.animate = angular.module('ngAnimateMock', ['ng']) - - .config(['$provide', function($provide) { - - var reflowQueue = []; - $provide.value('$$animateReflow', function(fn) { - var index = reflowQueue.length; - reflowQueue.push(fn); - return function cancel() { - reflowQueue.splice(index, 1); - }; - }); - - $provide.decorator('$animate', function($delegate, $$asyncCallback) { - var animate = { - queue : [], - enabled : $delegate.enabled, - triggerCallbacks : function() { - $$asyncCallback.flush(); - }, - triggerReflow : function() { - angular.forEach(reflowQueue, function(fn) { - fn(); - }); - reflowQueue = []; - } - }; - - angular.forEach( - ['enter','leave','move','addClass','removeClass','setClass'], function(method) { - animate[method] = function() { - animate.queue.push({ - event : method, - element : arguments[0], - args : arguments - }); - $delegate[method].apply($delegate, arguments); - }; - }); - - return animate; - }); - - }]); - - -/** - * @ngdoc function - * @name angular.mock.dump - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available function. - * - * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for - * debugging. - * - * This method is also available on window, where it can be used to display objects on debug - * console. - * - * @param {*} object - any object to turn into string. - * @return {string} a serialized string of the argument - */ -angular.mock.dump = function(object) { - return serialize(object); - - function serialize(object) { - var out; - - if (angular.isElement(object)) { - object = angular.element(object); - out = angular.element('<div></div>'); - angular.forEach(object, function(element) { - out.append(angular.element(element).clone()); - }); - out = out.html(); - } else if (angular.isArray(object)) { - out = []; - angular.forEach(object, function(o) { - out.push(serialize(o)); - }); - out = '[ ' + out.join(', ') + ' ]'; - } else if (angular.isObject(object)) { - if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { - out = serializeScope(object); - } else if (object instanceof Error) { - out = object.stack || ('' + object.name + ': ' + object.message); - } else { - // TODO(i): this prevents methods being logged, - // we should have a better way to serialize objects - out = angular.toJson(object, true); - } - } else { - out = String(object); - } - - return out; - } - - function serializeScope(scope, offset) { - offset = offset || ' '; - var log = [offset + 'Scope(' + scope.$id + '): {']; - for ( var key in scope ) { - if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { - log.push(' ' + key + ': ' + angular.toJson(scope[key])); - } - } - var child = scope.$$childHead; - while(child) { - log.push(serializeScope(child, offset + ' ')); - child = child.$$nextSibling; - } - log.push('}'); - return log.join('\n' + offset); - } -}; - -/** - * @ngdoc service - * @name $httpBackend - * @description - * Fake HTTP backend implementation suitable for unit testing applications that use the - * {@link ng.$http $http service}. - * - * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less - * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. - * - * During unit testing, we want our unit tests to run quickly and have no external dependencies so - * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or - * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is - * to verify whether a certain request has been sent or not, or alternatively just let the - * application make requests, respond with pre-trained responses and assert that the end result is - * what we expect it to be. - * - * This mock implementation can be used to respond with static or dynamic responses via the - * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). - * - * When an Angular application needs some data from a server, it calls the $http service, which - * sends the request to a real server using $httpBackend service. With dependency injection, it is - * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify - * the requests and respond with some testing data without sending a request to real server. - * - * There are two ways to specify what test data should be returned as http responses by the mock - * backend when the code under test makes http requests: - * - * - `$httpBackend.expect` - specifies a request expectation - * - `$httpBackend.when` - specifies a backend definition - * - * - * # Request Expectations vs Backend Definitions - * - * Request expectations provide a way to make assertions about requests made by the application and - * to define responses for those requests. The test will fail if the expected requests are not made - * or they are made in the wrong order. - * - * Backend definitions allow you to define a fake backend for your application which doesn't assert - * if a particular request was made or not, it just returns a trained response if a request is made. - * The test will pass whether or not the request gets made during testing. - * - * - * <table class="table"> - * <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr> - * <tr> - * <th>Syntax</th> - * <td>.expect(...).respond(...)</td> - * <td>.when(...).respond(...)</td> - * </tr> - * <tr> - * <th>Typical usage</th> - * <td>strict unit tests</td> - * <td>loose (black-box) unit testing</td> - * </tr> - * <tr> - * <th>Fulfills multiple requests</th> - * <td>NO</td> - * <td>YES</td> - * </tr> - * <tr> - * <th>Order of requests matters</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Request required</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Response required</th> - * <td>optional (see below)</td> - * <td>YES</td> - * </tr> - * </table> - * - * In cases where both backend definitions and request expectations are specified during unit - * testing, the request expectations are evaluated first. - * - * If a request expectation has no response specified, the algorithm will search your backend - * definitions for an appropriate response. - * - * If a request didn't match any expectation or if the expectation doesn't have the response - * defined, the backend definitions are evaluated in sequential order to see if any of them match - * the request. The response from the first matched definition is returned. - * - * - * # Flushing HTTP requests - * - * The $httpBackend used in production always responds to requests asynchronously. If we preserved - * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, - * to follow and to maintain. But neither can the testing mock respond synchronously; that would - * change the execution of the code under test. For this reason, the mock $httpBackend has a - * `flush()` method, which allows the test to explicitly flush pending requests. This preserves - * the async api of the backend, while allowing the test to execute synchronously. - * - * - * # Unit testing with mock $httpBackend - * The following code shows how to setup and use the mock backend when unit testing a controller. - * First we create the controller under test: - * - ```js - // The controller code - function MyController($scope, $http) { - var authToken; - - $http.get('/auth.py').success(function(data, status, headers) { - authToken = headers('A-Token'); - $scope.user = data; - }); - - $scope.saveMessage = function(message) { - var headers = { 'Authorization': authToken }; - $scope.status = 'Saving...'; - - $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { - $scope.status = ''; - }).error(function() { - $scope.status = 'ERROR!'; - }); - }; - } - ``` - * - * Now we setup the mock backend and create the test specs: - * - ```js - // testing controller - describe('MyController', function() { - var $httpBackend, $rootScope, createController; - - beforeEach(inject(function($injector) { - // Set up the mock http service responses - $httpBackend = $injector.get('$httpBackend'); - // backend definition common for all tests - $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'}); - - // Get hold of a scope (i.e. the root scope) - $rootScope = $injector.get('$rootScope'); - // The $controller service is used to create instances of controllers - var $controller = $injector.get('$controller'); - - createController = function() { - return $controller('MyController', {'$scope' : $rootScope }); - }; - })); - - - afterEach(function() { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); - }); - - - it('should fetch authentication token', function() { - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - }); - - - it('should send msg to server', function() { - var controller = createController(); - $httpBackend.flush(); - - // now you don’t care about the authentication, but - // the controller will still send the request and - // $httpBackend will respond without you having to - // specify the expectation and response for this request - - $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); - $rootScope.saveMessage('message content'); - expect($rootScope.status).toBe('Saving...'); - $httpBackend.flush(); - expect($rootScope.status).toBe(''); - }); - - - it('should send auth header', function() { - var controller = createController(); - $httpBackend.flush(); - - $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { - // check if the header was send, if it wasn't the expectation won't - // match the request and the test will fail - return headers['Authorization'] == 'xxx'; - }).respond(201, ''); - - $rootScope.saveMessage('whatever'); - $httpBackend.flush(); - }); - }); - ``` - */ -angular.mock.$HttpBackendProvider = function() { - this.$get = ['$rootScope', createHttpBackendMock]; -}; - -/** - * General factory function for $httpBackend mock. - * Returns instance for unit testing (when no arguments specified): - * - passing through is disabled - * - auto flushing is disabled - * - * Returns instance for e2e testing (when `$delegate` and `$browser` specified): - * - passing through (delegating request to real backend) is enabled - * - auto flushing is enabled - * - * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) - * @param {Object=} $browser Auto-flushing enabled if specified - * @return {Object} Instance of $httpBackend mock - */ -function createHttpBackendMock($rootScope, $delegate, $browser) { - var definitions = [], - expectations = [], - responses = [], - responsesPush = angular.bind(responses, responses.push), - copy = angular.copy; - - function createResponse(status, data, headers, statusText) { - if (angular.isFunction(status)) return status; - - return function() { - return angular.isNumber(status) - ? [status, data, headers, statusText] - : [200, status, data]; - }; - } - - // TODO(vojta): change params to: method, url, data, headers, callback - function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { - var xhr = new MockXhr(), - expectation = expectations[0], - wasExpected = false; - - function prettyPrint(data) { - return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) - ? data - : angular.toJson(data); - } - - function wrapResponse(wrapped) { - if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); - - return handleResponse; - - function handleResponse() { - var response = wrapped.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(), - copy(response[3] || '')); - } - - function handleTimeout() { - for (var i = 0, ii = responses.length; i < ii; i++) { - if (responses[i] === handleResponse) { - responses.splice(i, 1); - callback(-1, undefined, ''); - break; - } - } - } - } - - if (expectation && expectation.match(method, url)) { - if (!expectation.matchData(data)) - throw new Error('Expected ' + expectation + ' with different data\n' + - 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); - - if (!expectation.matchHeaders(headers)) - throw new Error('Expected ' + expectation + ' with different headers\n' + - 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + - prettyPrint(headers)); - - expectations.shift(); - - if (expectation.response) { - responses.push(wrapResponse(expectation)); - return; - } - wasExpected = true; - } - - var i = -1, definition; - while ((definition = definitions[++i])) { - if (definition.match(method, url, data, headers || {})) { - if (definition.response) { - // if $browser specified, we do auto flush all requests - ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); - } else if (definition.passThrough) { - $delegate(method, url, data, callback, headers, timeout, withCredentials); - } else throw new Error('No response defined !'); - return; - } - } - throw wasExpected ? - new Error('No response defined !') : - new Error('Unexpected request: ' + method + ' ' + url + '\n' + - (expectation ? 'Expected ' + expectation : 'No more request expected')); - } - - /** - * @ngdoc method - * @name $httpBackend#when - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). - */ - $httpBackend.when = function(method, url, data, headers) { - var definition = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - definition.response = createResponse(status, data, headers, statusText); - } - }; - - if ($browser) { - chain.passThrough = function() { - definition.passThrough = true; - }; - } - - definitions.push(definition); - return chain; - }; - - /** - * @ngdoc method - * @name $httpBackend#whenGET - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPOST - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPUT - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - createShortMethods('when'); - - - /** - * @ngdoc method - * @name $httpBackend#expect - * @description - * Creates a new request expectation. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current expectation. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). - */ - $httpBackend.expect = function(method, url, data, headers) { - var expectation = new MockHttpExpectation(method, url, data, headers); - expectations.push(expectation); - return { - respond: function (status, data, headers, statusText) { - expectation.response = createResponse(status, data, headers, statusText); - } - }; - }; - - - /** - * @ngdoc method - * @name $httpBackend#expectGET - * @description - * Creates a new request expectation for GET requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. See #expect for more info. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectHEAD - * @description - * Creates a new request expectation for HEAD requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectDELETE - * @description - * Creates a new request expectation for DELETE requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPOST - * @description - * Creates a new request expectation for POST requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPUT - * @description - * Creates a new request expectation for PUT requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPATCH - * @description - * Creates a new request expectation for PATCH requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectJSONP - * @description - * Creates a new request expectation for JSONP requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - createShortMethods('expect'); - - - /** - * @ngdoc method - * @name $httpBackend#flush - * @description - * Flushes all pending requests using the trained responses. - * - * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, - * all pending requests will be flushed. If there are no pending requests when the flush method - * is called an exception is thrown (as this typically a sign of programming error). - */ - $httpBackend.flush = function(count) { - $rootScope.$digest(); - if (!responses.length) throw new Error('No pending request to flush !'); - - if (angular.isDefined(count)) { - while (count--) { - if (!responses.length) throw new Error('No more pending request to flush !'); - responses.shift()(); - } - } else { - while (responses.length) { - responses.shift()(); - } - } - $httpBackend.verifyNoOutstandingExpectation(); - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingExpectation - * @description - * Verifies that all of the requests defined via the `expect` api were made. If any of the - * requests were not made, verifyNoOutstandingExpectation throws an exception. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingExpectation); - * ``` - */ - $httpBackend.verifyNoOutstandingExpectation = function() { - $rootScope.$digest(); - if (expectations.length) { - throw new Error('Unsatisfied requests: ' + expectations.join(', ')); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingRequest - * @description - * Verifies that there are no outstanding requests that need to be flushed. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingRequest); - * ``` - */ - $httpBackend.verifyNoOutstandingRequest = function() { - if (responses.length) { - throw new Error('Unflushed requests: ' + responses.length); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#resetExpectations - * @description - * Resets all request expectations, but preserves all backend definitions. Typically, you would - * call resetExpectations during a multiple-phase test when you want to reuse the same instance of - * $httpBackend mock. - */ - $httpBackend.resetExpectations = function() { - expectations.length = 0; - responses.length = 0; - }; - - return $httpBackend; - - - function createShortMethods(prefix) { - angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) { - $httpBackend[prefix + method] = function(url, headers) { - return $httpBackend[prefix](method, url, undefined, headers); - }; - }); - - angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { - $httpBackend[prefix + method] = function(url, data, headers) { - return $httpBackend[prefix](method, url, data, headers); - }; - }); - } -} - -function MockHttpExpectation(method, url, data, headers) { - - this.data = data; - this.headers = headers; - - this.match = function(m, u, d, h) { - if (method != m) return false; - if (!this.matchUrl(u)) return false; - if (angular.isDefined(d) && !this.matchData(d)) return false; - if (angular.isDefined(h) && !this.matchHeaders(h)) return false; - return true; - }; - - this.matchUrl = function(u) { - if (!url) return true; - if (angular.isFunction(url.test)) return url.test(u); - return url == u; - }; - - this.matchHeaders = function(h) { - if (angular.isUndefined(headers)) return true; - if (angular.isFunction(headers)) return headers(h); - return angular.equals(headers, h); - }; - - this.matchData = function(d) { - if (angular.isUndefined(data)) return true; - if (data && angular.isFunction(data.test)) return data.test(d); - if (data && angular.isFunction(data)) return data(d); - if (data && !angular.isString(data)) return angular.equals(data, angular.fromJson(d)); - return data == d; - }; - - this.toString = function() { - return method + ' ' + url; - }; -} - -function createMockXhr() { - return new MockXhr(); -} - -function MockXhr() { - - // hack for testing $http, $httpBackend - MockXhr.$$lastInstance = this; - - this.open = function(method, url, async) { - this.$$method = method; - this.$$url = url; - this.$$async = async; - this.$$reqHeaders = {}; - this.$$respHeaders = {}; - }; - - this.send = function(data) { - this.$$data = data; - }; - - this.setRequestHeader = function(key, value) { - this.$$reqHeaders[key] = value; - }; - - this.getResponseHeader = function(name) { - // the lookup must be case insensitive, - // that's why we try two quick lookups first and full scan last - var header = this.$$respHeaders[name]; - if (header) return header; - - name = angular.lowercase(name); - header = this.$$respHeaders[name]; - if (header) return header; - - header = undefined; - angular.forEach(this.$$respHeaders, function(headerVal, headerName) { - if (!header && angular.lowercase(headerName) == name) header = headerVal; - }); - return header; - }; - - this.getAllResponseHeaders = function() { - var lines = []; - - angular.forEach(this.$$respHeaders, function(value, key) { - lines.push(key + ': ' + value); - }); - return lines.join('\n'); - }; - - this.abort = angular.noop; -} - - -/** - * @ngdoc service - * @name $timeout - * @description - * - * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" and "verifyNoPendingTasks" methods. - */ - -angular.mock.$TimeoutDecorator = function($delegate, $browser) { - - /** - * @ngdoc method - * @name $timeout#flush - * @description - * - * Flushes the queue of pending tasks. - * - * @param {number=} delay maximum timeout amount to flush up until - */ - $delegate.flush = function(delay) { - $browser.defer.flush(delay); - }; - - /** - * @ngdoc method - * @name $timeout#verifyNoPendingTasks - * @description - * - * Verifies that there are no pending tasks that need to be flushed. - */ - $delegate.verifyNoPendingTasks = function() { - if ($browser.deferredFns.length) { - throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + - formatPendingTasksAsString($browser.deferredFns)); - } - }; - - function formatPendingTasksAsString(tasks) { - var result = []; - angular.forEach(tasks, function(task) { - result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); - }); - - return result.join(', '); - } - - return $delegate; -}; - -angular.mock.$RAFDecorator = function($delegate) { - var queue = []; - var rafFn = function(fn) { - var index = queue.length; - queue.push(fn); - return function() { - queue.splice(index, 1); - }; - }; - - rafFn.supported = $delegate.supported; - - rafFn.flush = function() { - if(queue.length === 0) { - throw new Error('No rAF callbacks present'); - } - - var length = queue.length; - for(var i=0;i<length;i++) { - queue[i](); - } - - queue = []; - }; - - return rafFn; -}; - -angular.mock.$AsyncCallbackDecorator = function($delegate) { - var callbacks = []; - var addFn = function(fn) { - callbacks.push(fn); - }; - addFn.flush = function() { - angular.forEach(callbacks, function(fn) { - fn(); - }); - callbacks = []; - }; - return addFn; -}; - -/** - * - */ -angular.mock.$RootElementProvider = function() { - this.$get = function() { - return angular.element('<div ng-app></div>'); - }; -}; - -/** - * @ngdoc module - * @name ngMock - * @description - * - * # ngMock - * - * The `ngMock` module providers support to inject and mock Angular services into unit tests. - * In addition, ngMock also extends various core ng services such that they can be - * inspected and controlled in a synchronous manner within test code. - * - * - * <div doc-module-components="ngMock"></div> - * - */ -angular.module('ngMock', ['ng']).provider({ - $browser: angular.mock.$BrowserProvider, - $exceptionHandler: angular.mock.$ExceptionHandlerProvider, - $log: angular.mock.$LogProvider, - $interval: angular.mock.$IntervalProvider, - $httpBackend: angular.mock.$HttpBackendProvider, - $rootElement: angular.mock.$RootElementProvider -}).config(['$provide', function($provide) { - $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); - $provide.decorator('$$rAF', angular.mock.$RAFDecorator); - $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator); -}]); - -/** - * @ngdoc module - * @name ngMockE2E - * @module ngMockE2E - * @description - * - * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. - * Currently there is only one mock present in this module - - * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. - */ -angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { - $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); -}]); - -/** - * @ngdoc service - * @name $httpBackend - * @module ngMockE2E - * @description - * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of - * applications that use the {@link ng.$http $http service}. - * - * *Note*: For fake http backend implementation suitable for unit testing please see - * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. - * - * This implementation can be used to respond with static or dynamic responses via the `when` api - * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the - * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch - * templates from a webserver). - * - * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application - * is being developed with the real backend api replaced with a mock, it is often desirable for - * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch - * templates or static files from the webserver). To configure the backend with this behavior - * use the `passThrough` request handler of `when` instead of `respond`. - * - * Additionally, we don't want to manually have to flush mocked out requests like we do during unit - * testing. For this reason the e2e $httpBackend automatically flushes mocked out requests - * automatically, closely simulating the behavior of the XMLHttpRequest object. - * - * To setup the application to run with this http backend, you have to create a module that depends - * on the `ngMockE2E` and your application modules and defines the fake backend: - * - * ```js - * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); - * myAppDev.run(function($httpBackend) { - * phones = [{name: 'phone1'}, {name: 'phone2'}]; - * - * // returns the current list of phones - * $httpBackend.whenGET('/phones').respond(phones); - * - * // adds a new phone to the phones array - * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { - * phones.push(angular.fromJson(data)); - * }); - * $httpBackend.whenGET(/^\/templates\//).passThrough(); - * //... - * }); - * ``` - * - * Afterwards, bootstrap your app with this new module. - */ - -/** - * @ngdoc method - * @name $httpBackend#when - * @module ngMockE2E - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can return - * an array containing response status (number), response data (string), response headers - * (Object), and the text for the status (string). - * - passThrough – `{function()}` – Any request matching a backend definition with - * `passThrough` handler will be passed through to the real backend (an XHR request will be made - * to the server.) - */ - -/** - * @ngdoc method - * @name $httpBackend#whenGET - * @module ngMockE2E - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @module ngMockE2E - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @module ngMockE2E - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPOST - * @module ngMockE2E - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPUT - * @module ngMockE2E - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPATCH - * @module ngMockE2E - * @description - * Creates a new backend definition for PATCH requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @module ngMockE2E - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ -angular.mock.e2e = {}; -angular.mock.e2e.$httpBackendDecorator = - ['$rootScope', '$delegate', '$browser', createHttpBackendMock]; - - -angular.mock.clearDataCache = function() { - var key, - cache = angular.element.cache; - - for(key in cache) { - if (Object.prototype.hasOwnProperty.call(cache,key)) { - var handle = cache[key].handle; - - handle && angular.element(handle.elem).off(); - delete cache[key]; - } - } -}; - - -if(window.jasmine || window.mocha) { - - var currentSpec = null, - isSpecRunning = function() { - return !!currentSpec; - }; - - - beforeEach(function() { - currentSpec = this; - }); - - afterEach(function() { - var injector = currentSpec.$injector; - - currentSpec.$injector = null; - currentSpec.$modules = null; - currentSpec = null; - - if (injector) { - injector.get('$rootElement').off(); - injector.get('$browser').pollFns.length = 0; - } - - angular.mock.clearDataCache(); - - // clean up jquery's fragment cache - angular.forEach(angular.element.fragments, function(val, key) { - delete angular.element.fragments[key]; - }); - - MockXhr.$$lastInstance = null; - - angular.forEach(angular.callbacks, function(val, key) { - delete angular.callbacks[key]; - }); - angular.callbacks.counter = 0; - }); - - /** - * @ngdoc function - * @name angular.mock.module - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * - * This function registers a module configuration code. It collects the configuration information - * which will be used when the injector is created by {@link angular.mock.inject inject}. - * - * See {@link angular.mock.inject inject} for usage example - * - * @param {...(string|Function|Object)} fns any number of modules which are represented as string - * aliases or as anonymous module initialization functions. The modules are used to - * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an - * object literal is passed they will be register as values in the module, the key being - * the module name and the value being what is returned. - */ - window.module = angular.mock.module = function() { - var moduleFns = Array.prototype.slice.call(arguments, 0); - return isSpecRunning() ? workFn() : workFn; - ///////////////////// - function workFn() { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not register a module!'); - } else { - var modules = currentSpec.$modules || (currentSpec.$modules = []); - angular.forEach(moduleFns, function(module) { - if (angular.isObject(module) && !angular.isArray(module)) { - modules.push(function($provide) { - angular.forEach(module, function(value, key) { - $provide.value(key, value); - }); - }); - } else { - modules.push(module); - } - }); - } - } - }; - - /** - * @ngdoc function - * @name angular.mock.inject - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * - * The inject function wraps a function into an injectable function. The inject() creates new - * instance of {@link auto.$injector $injector} per test, which is then used for - * resolving references. - * - * - * ## Resolving References (Underscore Wrapping) - * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this - * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable - * that is declared in the scope of the `describe()` block. Since we would, most likely, want - * the variable to have the same name of the reference we have a problem, since the parameter - * to the `inject()` function would hide the outer variable. - * - * To help with this, the injected parameters can, optionally, be enclosed with underscores. - * These are ignored by the injector when the reference name is resolved. - * - * For example, the parameter `_myService_` would be resolved as the reference `myService`. - * Since it is available in the function body as _myService_, we can then assign it to a variable - * defined in an outer scope. - * - * ``` - * // Defined out reference variable outside - * var myService; - * - * // Wrap the parameter in underscores - * beforeEach( inject( function(_myService_){ - * myService = _myService_; - * })); - * - * // Use myService in a series of tests. - * it('makes use of myService', function() { - * myService.doStuff(); - * }); - * - * ``` - * - * See also {@link angular.mock.module angular.mock.module} - * - * ## Example - * Example of what a typical jasmine tests looks like with the inject method. - * ```js - * - * angular.module('myApplicationModule', []) - * .value('mode', 'app') - * .value('version', 'v1.0.1'); - * - * - * describe('MyApp', function() { - * - * // You need to load modules that you want to test, - * // it loads only the "ng" module by default. - * beforeEach(module('myApplicationModule')); - * - * - * // inject() is used to inject arguments of all given functions - * it('should provide a version', inject(function(mode, version) { - * expect(version).toEqual('v1.0.1'); - * expect(mode).toEqual('app'); - * })); - * - * - * // The inject and module method can also be used inside of the it or beforeEach - * it('should override a version and test the new version is injected', function() { - * // module() takes functions or strings (module aliases) - * module(function($provide) { - * $provide.value('version', 'overridden'); // override version here - * }); - * - * inject(function(version) { - * expect(version).toEqual('overridden'); - * }); - * }); - * }); - * - * ``` - * - * @param {...Function} fns any number of functions which will be injected using the injector. - */ - - - - var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { - this.message = e.message; - this.name = e.name; - if (e.line) this.line = e.line; - if (e.sourceId) this.sourceId = e.sourceId; - if (e.stack && errorForStack) - this.stack = e.stack + '\n' + errorForStack.stack; - if (e.stackArray) this.stackArray = e.stackArray; - }; - ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; - - window.inject = angular.mock.inject = function() { - var blockFns = Array.prototype.slice.call(arguments, 0); - var errorForStack = new Error('Declaration Location'); - return isSpecRunning() ? workFn.call(currentSpec) : workFn; - ///////////////////// - function workFn() { - var modules = currentSpec.$modules || []; - - modules.unshift('ngMock'); - modules.unshift('ng'); - var injector = currentSpec.$injector; - if (!injector) { - injector = currentSpec.$injector = angular.injector(modules); - } - for(var i = 0, ii = blockFns.length; i < ii; i++) { - try { - /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ - injector.invoke(blockFns[i] || angular.noop, this); - /* jshint +W040 */ - } catch (e) { - if (e.stack && errorForStack) { - throw new ErrorAddingDeclarationLocationStack(e, errorForStack); - } - throw e; - } finally { - errorForStack = null; - } - } - } - }; -} - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-mocks/bower.json b/platforms/android/assets/www/lib/angular-mocks/bower.json deleted file mode 100644 index 09d2e7cf..00000000 --- a/platforms/android/assets/www/lib/angular-mocks/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.2.16", - "main": "./angular-mocks.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-moment/angular-moment.js b/platforms/android/assets/www/lib/angular-moment/angular-moment.js deleted file mode 100644 index 47157f7e..00000000 --- a/platforms/android/assets/www/lib/angular-moment/angular-moment.js +++ /dev/null @@ -1,727 +0,0 @@ - -/* angular-moment.js / v1.0.0-beta.3 / (c) 2013, 2014, 2015 Uri Shaked / MIT Licence */ - -'format amd'; -/* global define */ - -(function () { - 'use strict'; - - function isUndefinedOrNull(val) { - return angular.isUndefined(val) || val === null; - } - - function requireMoment() { - try { - return require('moment'); // Using nw.js or browserify? - } catch (e) { - throw new Error('Please install moment via npm. Please reference to: https://github.com/urish/angular-moment'); // Add wiki/troubleshooting section? - } - } - - function angularMoment(angular, moment) { - - if(typeof moment === 'undefined') { - if(typeof require === 'function') { - moment = requireMoment(); - }else{ - throw new Error('Moment cannot be found by angular-moment! Please reference to: https://github.com/urish/angular-moment'); // Add wiki/troubleshooting section? - } - } - - /** - * @ngdoc overview - * @name angularMoment - * - * @description - * angularMoment module provides moment.js functionality for angular.js apps. - */ - return angular.module('angularMoment', []) - - /** - * @ngdoc object - * @name angularMoment.config:angularMomentConfig - * - * @description - * Common configuration of the angularMoment module - */ - .constant('angularMomentConfig', { - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#preprocess - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {function} A preprocessor function that will be applied on all incoming dates - * - * @description - * Defines a preprocessor function to apply on all input dates (e.g. the input of `am-time-ago`, - * `amCalendar`, etc.). The function must return a `moment` object. - * - * @example - * // Causes angular-moment to always treat the input values as unix timestamps - * angularMomentConfig.preprocess = function(value) { - * return moment.unix(value); - * } - */ - preprocess: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#timezone - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {string} The default timezone - * - * @description - * The default timezone (e.g. 'Europe/London'). Empty string by default (does not apply - * any timezone shift). - * - * NOTE: This option requires moment-timezone >= 0.3.0. - */ - timezone: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#format - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {string} The pre-conversion format of the date - * - * @description - * Specify the format of the input date. Essentially it's a - * default and saves you from specifying a format in every - * element. Overridden by element attr. Null by default. - */ - format: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#statefulFilters - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {boolean} Whether angular-moment filters should be stateless (or not) - * - * @description - * Specifies whether the filters included with angular-moment are stateful. - * Stateful filters will automatically re-evaluate whenever you change the timezone - * or locale settings, but may negatively impact performance. true by default. - */ - statefulFilters: true - }) - - /** - * @ngdoc object - * @name angularMoment.object:moment - * - * @description - * moment global (as provided by the moment.js library) - */ - .constant('moment', moment) - - /** - * @ngdoc object - * @name angularMoment.config:amTimeAgoConfig - * @module angularMoment - * - * @description - * configuration specific to the amTimeAgo directive - */ - .constant('amTimeAgoConfig', { - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#withoutSuffix - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {boolean} Whether to include a suffix in am-time-ago directive - * - * @description - * Defaults to false. - */ - withoutSuffix: false, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#serverTime - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {number} Server time in milliseconds since the epoch - * - * @description - * If set, time ago will be calculated relative to the given value. - * If null, local time will be used. Defaults to null. - */ - serverTime: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#titleFormat - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {string} The format of the date to be displayed in the title of the element. If null, - * the directive set the title of the element. - * - * @description - * The format of the date used for the title of the element. null by default. - */ - titleFormat: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#fullDateThreshold - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {number} The minimum number of days for showing a full date instead of relative time - * - * @description - * The threshold for displaying a full date. The default is null, which means the date will always - * be relative, and full date will never be displayed. - */ - fullDateThreshold: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#fullDateFormat - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {string} The format to use when displaying a full date. - * - * @description - * Specify the format of the date when displayed as full date. null by default. - */ - fullDateFormat: null - }) - - /** - * @ngdoc directive - * @name angularMoment.directive:amTimeAgo - * @module angularMoment - * - * @restrict A - */ - .directive('amTimeAgo', ['$window', 'moment', 'amMoment', 'amTimeAgoConfig', function ($window, moment, amMoment, amTimeAgoConfig) { - - return function (scope, element, attr) { - var activeTimeout = null; - var currentValue; - var withoutSuffix = amTimeAgoConfig.withoutSuffix; - var titleFormat = amTimeAgoConfig.titleFormat; - var fullDateThreshold = amTimeAgoConfig.fullDateThreshold; - var fullDateFormat = amTimeAgoConfig.fullDateFormat; - var localDate = new Date().getTime(); - var modelName = attr.amTimeAgo; - var currentFrom; - var isTimeElement = ('TIME' === element[0].nodeName.toUpperCase()); - var setTitleTime = !element.attr('title'); - - function getNow() { - var now; - if (currentFrom) { - now = currentFrom; - } else if (amTimeAgoConfig.serverTime) { - var localNow = new Date().getTime(); - var nowMillis = localNow - localDate + amTimeAgoConfig.serverTime; - now = moment(nowMillis); - } - else { - now = moment(); - } - return now; - } - - function cancelTimer() { - if (activeTimeout) { - $window.clearTimeout(activeTimeout); - activeTimeout = null; - } - } - - function updateTime(momentInstance) { - var daysAgo = getNow().diff(momentInstance, 'day'); - var showFullDate = fullDateThreshold && daysAgo >= fullDateThreshold; - - if (showFullDate) { - element.text(momentInstance.format(fullDateFormat)); - } else { - element.text(momentInstance.from(getNow(), withoutSuffix)); - } - - if (titleFormat && setTitleTime) { - element.attr('title', momentInstance.local().format(titleFormat)); - } - - if (!showFullDate) { - var howOld = Math.abs(getNow().diff(momentInstance, 'minute')); - var secondsUntilUpdate = 3600; - if (howOld < 1) { - secondsUntilUpdate = 1; - } else if (howOld < 60) { - secondsUntilUpdate = 30; - } else if (howOld < 180) { - secondsUntilUpdate = 300; - } - - activeTimeout = $window.setTimeout(function () { - updateTime(momentInstance); - }, secondsUntilUpdate * 1000); - } - } - - function updateDateTimeAttr(value) { - if (isTimeElement) { - element.attr('datetime', value); - } - } - - function updateMoment() { - cancelTimer(); - if (currentValue) { - var momentValue = amMoment.preprocessDate(currentValue); - updateTime(momentValue); - updateDateTimeAttr(momentValue.toISOString()); - } - } - - scope.$watch(modelName, function (value) { - if (isUndefinedOrNull(value) || (value === '')) { - cancelTimer(); - if (currentValue) { - element.text(''); - updateDateTimeAttr(''); - currentValue = null; - } - return; - } - - currentValue = value; - updateMoment(); - }); - - if (angular.isDefined(attr.amFrom)) { - scope.$watch(attr.amFrom, function (value) { - if (isUndefinedOrNull(value) || (value === '')) { - currentFrom = null; - } else { - currentFrom = moment(value); - } - updateMoment(); - }); - } - - if (angular.isDefined(attr.amWithoutSuffix)) { - scope.$watch(attr.amWithoutSuffix, function (value) { - if (typeof value === 'boolean') { - withoutSuffix = value; - updateMoment(); - } else { - withoutSuffix = amTimeAgoConfig.withoutSuffix; - } - }); - } - - attr.$observe('amFullDateThreshold', function (newValue) { - fullDateThreshold = newValue; - updateMoment(); - }); - - attr.$observe('amFullDateFormat', function (newValue) { - fullDateFormat = newValue; - updateMoment(); - }); - - scope.$on('$destroy', function () { - cancelTimer(); - }); - - scope.$on('amMoment:localeChanged', function () { - updateMoment(); - }); - }; - }]) - - /** - * @ngdoc service - * @name angularMoment.service.amMoment - * @module angularMoment - */ - .service('amMoment', ['moment', '$rootScope', '$log', 'angularMomentConfig', function (moment, $rootScope, $log, angularMomentConfig) { - var defaultTimezone = null; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#changeLocale - * @methodOf angularMoment.service.amMoment - * - * @description - * Changes the locale for moment.js and updates all the am-time-ago directive instances - * with the new locale. Also broadcasts an `amMoment:localeChanged` event on $rootScope. - * - * @param {string} locale Locale code (e.g. en, es, ru, pt-br, etc.) - * @param {object} customization object of locale strings to override - */ - this.changeLocale = function (locale, customization) { - var result = moment.locale(locale, customization); - if (angular.isDefined(locale)) { - $rootScope.$broadcast('amMoment:localeChanged'); - - } - return result; - }; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#changeTimezone - * @methodOf angularMoment.service.amMoment - * - * @description - * Changes the default timezone for amCalendar, amDateFormat and amTimeAgo. Also broadcasts an - * `amMoment:timezoneChanged` event on $rootScope. - * - * Note: this method works only if moment-timezone > 0.3.0 is loaded - * - * @param {string} timezone Timezone name (e.g. UTC) - */ - this.changeTimezone = function (timezone) { - if (moment.tz && moment.tz.setDefault) { - moment.tz.setDefault(timezone); - $rootScope.$broadcast('amMoment:timezoneChanged'); - } else { - $log.warn('angular-moment: changeTimezone() works only with moment-timezone.js v0.3.0 or greater.'); - } - angularMomentConfig.timezone = timezone; - defaultTimezone = timezone; - }; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#preprocessDate - * @methodOf angularMoment.service.amMoment - * - * @description - * Preprocess a given value and convert it into a Moment instance appropriate for use in the - * am-time-ago directive and the filters. The behavior of this function can be overriden by - * setting `angularMomentConfig.preprocess`. - * - * @param {*} value The value to be preprocessed - * @return {Moment} A `moment` object - */ - this.preprocessDate = function (value) { - // Configure the default timezone if needed - if (defaultTimezone !== angularMomentConfig.timezone) { - this.changeTimezone(angularMomentConfig.timezone); - } - - if (angularMomentConfig.preprocess) { - return angularMomentConfig.preprocess(value); - } - - if (!isNaN(parseFloat(value)) && isFinite(value)) { - // Milliseconds since the epoch - return moment(parseInt(value, 10)); - } - - // else just returns the value as-is. - return moment(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amParse - * @module angularMoment - */ - .filter('amParse', ['moment', function (moment) { - return function (value, format) { - return moment(value, format); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amFromUnix - * @module angularMoment - */ - .filter('amFromUnix', ['moment', function (moment) { - return function (value) { - return moment.unix(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amUtc - * @module angularMoment - */ - .filter('amUtc', ['moment', function (moment) { - return function (value) { - return moment.utc(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amUtcOffset - * @module angularMoment - * - * @description - * Adds a UTC offset to the given timezone object. The offset can be a number of minutes, or a string such as - * '+0300', '-0300' or 'Z'. - */ - .filter('amUtcOffset', ['amMoment', function (amMoment) { - function amUtcOffset(value, offset) { - return amMoment.preprocessDate(value).utcOffset(offset); - } - - return amUtcOffset; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amLocal - * @module angularMoment - */ - .filter('amLocal', ['moment', function (moment) { - return function (value) { - return moment.isMoment(value) ? value.local() : null; - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amTimezone - * @module angularMoment - * - * @description - * Apply a timezone onto a given moment object, e.g. 'America/Phoenix'). - * - * You need to include moment-timezone.js for timezone support. - */ - .filter('amTimezone', ['amMoment', 'angularMomentConfig', '$log', function (amMoment, angularMomentConfig, $log) { - function amTimezone(value, timezone) { - var aMoment = amMoment.preprocessDate(value); - - if (!timezone) { - return aMoment; - } - - if (aMoment.tz) { - return aMoment.tz(timezone); - } else { - $log.warn('angular-moment: named timezone specified but moment.tz() is undefined. Did you forget to include moment-timezone.js ?'); - return aMoment; - } - } - - return amTimezone; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amCalendar - * @module angularMoment - */ - .filter('amCalendar', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amCalendarFilter(value) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - return date.isValid() ? date.calendar() : ''; - } - - // Since AngularJS 1.3, filters have to explicitly define being stateful - // (this is no longer the default). - amCalendarFilter.$stateful = angularMomentConfig.statefulFilters; - - return amCalendarFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDifference - * @module angularMoment - */ - .filter('amDifference', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amDifferenceFilter(value, otherValue, unit, usePrecision) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - var date2 = !isUndefinedOrNull(otherValue) ? amMoment.preprocessDate(otherValue) : moment(); - - if (!date.isValid() || !date2.isValid()) { - return ''; - } - - return date.diff(date2, unit, usePrecision); - } - - amDifferenceFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDifferenceFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDateFormat - * @module angularMoment - * @function - */ - .filter('amDateFormat', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amDateFormatFilter(value, format) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - if (!date.isValid()) { - return ''; - } - - return date.format(format); - } - - amDateFormatFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDateFormatFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDurationFormat - * @module angularMoment - * @function - */ - .filter('amDurationFormat', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amDurationFormatFilter(value, format, suffix) { - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment.duration(value, format).humanize(suffix); - } - - amDurationFormatFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDurationFormatFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amTimeAgo - * @module angularMoment - * @function - */ - .filter('amTimeAgo', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amTimeAgoFilter(value, suffix, from) { - var date, dateFrom; - - if (isUndefinedOrNull(value)) { - return ''; - } - - value = amMoment.preprocessDate(value); - date = moment(value); - if (!date.isValid()) { - return ''; - } - - dateFrom = moment(from); - if (!isUndefinedOrNull(from) && dateFrom.isValid()) { - return date.from(dateFrom, suffix); - } - - return date.fromNow(suffix); - } - - amTimeAgoFilter.$stateful = angularMomentConfig.statefulFilters; - - return amTimeAgoFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amSubtract - * @module angularMoment - * @function - */ - .filter('amSubtract', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amSubtractFilter(value, amount, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).subtract(parseInt(amount, 10), type); - } - - amSubtractFilter.$stateful = angularMomentConfig.statefulFilters; - - return amSubtractFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amAdd - * @module angularMoment - * @function - */ - .filter('amAdd', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amAddFilter(value, amount, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).add(parseInt(amount, 10), type); - } - - amAddFilter.$stateful = angularMomentConfig.statefulFilters; - - return amAddFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amStartOf - * @module angularMoment - * @function - */ - .filter('amStartOf', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amStartOfFilter(value, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).startOf(type); - } - - amStartOfFilter.$stateful = angularMomentConfig.statefulFilters; - - return amStartOfFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amEndOf - * @module angularMoment - * @function - */ - .filter('amEndOf', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amEndOfFilter(value, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).endOf(type); - } - - amEndOfFilter.$stateful = angularMomentConfig.statefulFilters; - - return amEndOfFilter; - }]); - } - - if (typeof define === 'function' && define.amd) { - define(['angular', 'moment'], angularMoment); - } else if (typeof module !== 'undefined' && module && module.exports) { - angularMoment(require('angular'), require('moment')); - module.exports = 'angularMoment'; - } else { - angularMoment(angular, (typeof global !== 'undefined' ? global : window).moment); - } -})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-resource/.bower.json b/platforms/android/assets/www/lib/angular-resource/.bower.json deleted file mode 100644 index a7e0b984..00000000 --- a/platforms/android/assets/www/lib/angular-resource/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.2.16", - "main": "./angular-resource.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-resource", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "06a1d9f570fd47b767b019881d523a3f3416ca93" - }, - "_source": "git://github.com/angular/bower-angular-resource.git", - "_target": "1.2.16", - "_originalSource": "angular-resource" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-resource/README.md b/platforms/android/assets/www/lib/angular-resource/README.md deleted file mode 100644 index c8ac8146..00000000 --- a/platforms/android/assets/www/lib/angular-resource/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-resource - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngResource). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-resource -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-resource/angular-resource.js"></script> -``` - -And add `ngResource` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngResource']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngResource). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-resource/angular-resource.js b/platforms/android/assets/www/lib/angular-resource/angular-resource.js deleted file mode 100644 index 7014984c..00000000 --- a/platforms/android/assets/www/lib/angular-resource/angular-resource.js +++ /dev/null @@ -1,610 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $resourceMinErr = angular.$$minErr('$resource'); - -// Helper functions and regex to lookup a dotted path on an object -// stopping at undefined/null. The path must be composed of ASCII -// identifiers (just like $parse) -var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/; - -function isValidDottedPath(path) { - return (path != null && path !== '' && path !== 'hasOwnProperty' && - MEMBER_NAME_REGEX.test('.' + path)); -} - -function lookupDottedPath(obj, path) { - if (!isValidDottedPath(path)) { - throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path); - } - var keys = path.split('.'); - for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) { - var key = keys[i]; - obj = (obj !== null) ? obj[key] : undefined; - } - return obj; -} - -/** - * Create a shallow copy of an object and clear other fields from the destination - */ -function shallowClearAndCopy(src, dst) { - dst = dst || {}; - - angular.forEach(dst, function(value, key){ - delete dst[key]; - }); - - for (var key in src) { - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - -/** - * @ngdoc module - * @name ngResource - * @description - * - * # ngResource - * - * The `ngResource` module provides interaction support with RESTful services - * via the $resource service. - * - * - * <div doc-module-components="ngResource"></div> - * - * See {@link ngResource.$resource `$resource`} for usage. - */ - -/** - * @ngdoc service - * @name $resource - * @requires $http - * - * @description - * A factory which creates a resource object that lets you interact with - * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. - * - * The returned resource object has action methods which provide high-level behaviors without - * the need to interact with the low level {@link ng.$http $http} service. - * - * Requires the {@link ngResource `ngResource`} module to be installed. - * - * @param {string} url A parametrized URL template with parameters prefixed by `:` as in - * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), it will be respected. - * - * If you are using a url with a suffix, just add the suffix, like this: - * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')` - * or even `$resource('http://example.com/resource/:resource_id.:format')` - * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be - * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you - * can escape it with `/\.`. - * - * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in - * `actions` methods. If any of the parameter value is a function, it will be executed every time - * when a param value needs to be obtained for a request (unless the param was overridden). - * - * Each key value in the parameter object is first bound to url template if present and then any - * excess keys are appended to the url search query after the `?`. - * - * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in - * URL `/path/greet?salutation=Hello`. - * - * If the parameter value is prefixed with `@` then the value of that parameter is extracted from - * the data object (useful for non-GET operations). - * - * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend - * the default set of resource actions. The declaration should be created in the format of {@link - * ng.$http#usage_parameters $http.config}: - * - * {action1: {method:?, params:?, isArray:?, headers:?, ...}, - * action2: {method:?, params:?, isArray:?, headers:?, ...}, - * ...} - * - * Where: - * - * - **`action`** – {string} – The name of action. This name becomes the name of the method on - * your resource object. - * - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, - * `DELETE`, and `JSONP`. - * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of - * the parameter value is a function, it will be executed every time when a param value needs to - * be obtained for a request (unless the param was overridden). - * - **`url`** – {string} – action specific `url` override. The url templating is supported just - * like for the resource-level urls. - * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, - * see `returns` section. - * - **`transformRequest`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **`transformResponse`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that - * should abort the request when resolved. - * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See - * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5) - * for more information. - * - **`responseType`** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods - - * `response` and `responseError`. Both `response` and `responseError` interceptors get called - * with `http response` object. See {@link ng.$http $http interceptors}. - * - * @returns {Object} A resource "class" object with methods for the default set of resource actions - * optionally extended with custom `actions`. The default set contains these actions: - * ```js - * { 'get': {method:'GET'}, - * 'save': {method:'POST'}, - * 'query': {method:'GET', isArray:true}, - * 'remove': {method:'DELETE'}, - * 'delete': {method:'DELETE'} }; - * ``` - * - * Calling these methods invoke an {@link ng.$http} with the specified http method, - * destination and parameters. When the data is returned from the server then the object is an - * instance of the resource class. The actions `save`, `remove` and `delete` are available on it - * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create, - * read, update, delete) on server-side data like this: - * ```js - * var User = $resource('/user/:userId', {userId:'@id'}); - * var user = User.get({userId:123}, function() { - * user.abc = true; - * user.$save(); - * }); - * ``` - * - * It is important to realize that invoking a $resource object method immediately returns an - * empty reference (object or array depending on `isArray`). Once the data is returned from the - * server the existing reference is populated with the actual data. This is a useful trick since - * usually the resource is assigned to a model which is then rendered by the view. Having an empty - * object results in no rendering, once the data arrives from the server then the object is - * populated with the data and the view automatically re-renders itself showing the new data. This - * means that in most cases one never has to write a callback function for the action methods. - * - * The action methods on the class object or instance object can be invoked with the following - * parameters: - * - * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])` - * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` - * - non-GET instance actions: `instance.$action([parameters], [success], [error])` - * - * Success callback is called with (value, responseHeaders) arguments. Error callback is called - * with (httpResponse) argument. - * - * Class actions return empty instance (with additional properties below). - * Instance actions return promise of the action. - * - * The Resource instances and collection have these additional properties: - * - * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this - * instance or collection. - * - * On success, the promise is resolved with the same resource instance or collection object, - * updated with data from server. This makes it easy to use in - * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view - * rendering until the resource(s) are loaded. - * - * On failure, the promise is resolved with the {@link ng.$http http response} object, without - * the `resource` property. - * - * If an interceptor object was provided, the promise will instead be resolved with the value - * returned by the interceptor. - * - * - `$resolved`: `true` after first server interaction is completed (either with success or - * rejection), `false` before that. Knowing if the Resource has been resolved is useful in - * data-binding. - * - * @example - * - * # Credit card resource - * - * ```js - // Define CreditCard class - var CreditCard = $resource('/user/:userId/card/:cardId', - {userId:123, cardId:'@id'}, { - charge: {method:'POST', params:{charge:true}} - }); - - // We can retrieve a collection from the server - var cards = CreditCard.query(function() { - // GET: /user/123/card - // server returns: [ {id:456, number:'1234', name:'Smith'} ]; - - var card = cards[0]; - // each item is an instance of CreditCard - expect(card instanceof CreditCard).toEqual(true); - card.name = "J. Smith"; - // non GET methods are mapped onto the instances - card.$save(); - // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'} - // server returns: {id:456, number:'1234', name: 'J. Smith'}; - - // our custom method is mapped as well. - card.$charge({amount:9.99}); - // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'} - }); - - // we can create an instance as well - var newCard = new CreditCard({number:'0123'}); - newCard.name = "Mike Smith"; - newCard.$save(); - // POST: /user/123/card {number:'0123', name:'Mike Smith'} - // server returns: {id:789, number:'0123', name: 'Mike Smith'}; - expect(newCard.id).toEqual(789); - * ``` - * - * The object returned from this function execution is a resource "class" which has "static" method - * for each action in the definition. - * - * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and - * `headers`. - * When the data is returned from the server then the object is an instance of the resource type and - * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD - * operations (create, read, update, delete) on server-side data. - - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(user) { - user.abc = true; - user.$save(); - }); - ``` - * - * It's worth noting that the success callback for `get`, `query` and other methods gets passed - * in the response that came from the server as well as $http header getter function, so one - * could rewrite the above example and get access to http headers as: - * - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(u, getResponseHeaders){ - u.abc = true; - u.$save(function(u, putResponseHeaders) { - //u => saved user object - //putResponseHeaders => $http header getter - }); - }); - ``` - * - * You can also access the raw `$http` promise via the `$promise` property on the object returned - * - ``` - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}) - .$promise.then(function(user) { - $scope.user = user; - }); - ``` - - * # Creating a custom 'PUT' request - * In this example we create a custom method on our resource to make a PUT request - * ```js - * var app = angular.module('app', ['ngResource', 'ngRoute']); - * - * // Some APIs expect a PUT request in the format URL/object/ID - * // Here we are creating an 'update' method - * app.factory('Notes', ['$resource', function($resource) { - * return $resource('/notes/:id', null, - * { - * 'update': { method:'PUT' } - * }); - * }]); - * - * // In our controller we get the ID from the URL using ngRoute and $routeParams - * // We pass in $routeParams and our Notes factory along with $scope - * app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', - function($scope, $routeParams, Notes) { - * // First get a note object from the factory - * var note = Notes.get({ id:$routeParams.id }); - * $id = note.id; - * - * // Now call update passing in the ID first then the object you are updating - * Notes.update({ id:$id }, note); - * - * // This will PUT /notes/ID with the note object in the request payload - * }]); - * ``` - */ -angular.module('ngResource', ['ng']). - factory('$resource', ['$http', '$q', function($http, $q) { - - var DEFAULT_ACTIONS = { - 'get': {method:'GET'}, - 'save': {method:'POST'}, - 'query': {method:'GET', isArray:true}, - 'remove': {method:'DELETE'}, - 'delete': {method:'DELETE'} - }; - var noop = angular.noop, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy, - isFunction = angular.isFunction; - - /** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); - } - - - /** - * This method is intended for encoding *key* or *value* parts of query component. We need a - * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't - * have to be encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); - } - - function Route(template, defaults) { - this.template = template; - this.defaults = defaults || {}; - this.urlParams = {}; - } - - Route.prototype = { - setUrlParams: function(config, params, actionUrl) { - var self = this, - url = actionUrl || self.template, - val, - encodedVal; - - var urlParams = self.urlParams = {}; - forEach(url.split(/\W/), function(param){ - if (param === 'hasOwnProperty') { - throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name."); - } - if (!(new RegExp("^\\d+$").test(param)) && param && - (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { - urlParams[param] = true; - } - }); - url = url.replace(/\\:/g, ':'); - - params = params || {}; - forEach(self.urlParams, function(_, urlParam){ - val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; - if (angular.isDefined(val) && val !== null) { - encodedVal = encodeUriSegment(val); - url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { - return encodedVal + p1; - }); - } else { - url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, - leadingSlashes, tail) { - if (tail.charAt(0) == '/') { - return tail; - } else { - return leadingSlashes + tail; - } - }); - } - }); - - // strip trailing slashes and set the url - url = url.replace(/\/+$/, '') || '/'; - // then replace collapse `/.` if found in the last URL path segment before the query - // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x` - url = url.replace(/\/\.(?=\w+($|\?))/, '.'); - // replace escaped `/\.` with `/.` - config.url = url.replace(/\/\\\./, '/.'); - - - // set params - delegate param encoding to $http - forEach(params, function(value, key){ - if (!self.urlParams[key]) { - config.params = config.params || {}; - config.params[key] = value; - } - }); - } - }; - - - function resourceFactory(url, paramDefaults, actions) { - var route = new Route(url); - - actions = extend({}, DEFAULT_ACTIONS, actions); - - function extractParams(data, actionParams){ - var ids = {}; - actionParams = extend({}, paramDefaults, actionParams); - forEach(actionParams, function(value, key){ - if (isFunction(value)) { value = value(); } - ids[key] = value && value.charAt && value.charAt(0) == '@' ? - lookupDottedPath(data, value.substr(1)) : value; - }); - return ids; - } - - function defaultResponseInterceptor(response) { - return response.resource; - } - - function Resource(value){ - shallowClearAndCopy(value || {}, this); - } - - forEach(actions, function(action, name) { - var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); - - Resource[name] = function(a1, a2, a3, a4) { - var params = {}, data, success, error; - - /* jshint -W086 */ /* (purposefully fall through case statements) */ - switch(arguments.length) { - case 4: - error = a4; - success = a3; - //fallthrough - case 3: - case 2: - if (isFunction(a2)) { - if (isFunction(a1)) { - success = a1; - error = a2; - break; - } - - success = a2; - error = a3; - //fallthrough - } else { - params = a1; - data = a2; - success = a3; - break; - } - case 1: - if (isFunction(a1)) success = a1; - else if (hasBody) data = a1; - else params = a1; - break; - case 0: break; - default: - throw $resourceMinErr('badargs', - "Expected up to 4 arguments [params, data, success, error], got {0} arguments", - arguments.length); - } - /* jshint +W086 */ /* (purposefully fall through case statements) */ - - var isInstanceCall = this instanceof Resource; - var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); - var httpConfig = {}; - var responseInterceptor = action.interceptor && action.interceptor.response || - defaultResponseInterceptor; - var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || - undefined; - - forEach(action, function(value, key) { - if (key != 'params' && key != 'isArray' && key != 'interceptor') { - httpConfig[key] = copy(value); - } - }); - - if (hasBody) httpConfig.data = data; - route.setUrlParams(httpConfig, - extend({}, extractParams(data, action.params || {}), params), - action.url); - - var promise = $http(httpConfig).then(function(response) { - var data = response.data, - promise = value.$promise; - - if (data) { - // Need to convert action.isArray to boolean in case it is undefined - // jshint -W018 - if (angular.isArray(data) !== (!!action.isArray)) { - throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' + - 'response to contain an {0} but got an {1}', - action.isArray?'array':'object', angular.isArray(data)?'array':'object'); - } - // jshint +W018 - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - value.push(new Resource(item)); - }); - } else { - shallowClearAndCopy(data, value); - value.$promise = promise; - } - } - - value.$resolved = true; - - response.resource = value; - - return response; - }, function(response) { - value.$resolved = true; - - (error||noop)(response); - - return $q.reject(response); - }); - - promise = promise.then( - function(response) { - var value = responseInterceptor(response); - (success||noop)(value, response.headers); - return value; - }, - responseErrorInterceptor); - - if (!isInstanceCall) { - // we are creating instance / collection - // - set the initial promise - // - return the instance / collection - value.$promise = promise; - value.$resolved = false; - - return value; - } - - // instance call - return promise; - }; - - - Resource.prototype['$' + name] = function(params, success, error) { - if (isFunction(params)) { - error = success; success = params; params = {}; - } - var result = Resource[name].call(this, params, this, success, error); - return result.$promise || result; - }; - }); - - Resource.bind = function(additionalParamDefaults){ - return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions); - }; - - return Resource; - } - - return resourceFactory; - }]); - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js b/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js deleted file mode 100644 index eac389ed..00000000 --- a/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&& -b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f<c&&k!==A;f++){var g=a[f];k=null!==k?k[g]:A}}else k=b;e[d]=k});return e}function e(a){return a.resource}function f(a){D(a||{},this)}var F=new c(n);l=x({},B,l);s(l,function(h,d){var c=/^(POST|PUT|PATCH)$/i.test(h.method);f[d]=function(b,d,k,w){var q={},n,l,y;switch(arguments.length){case 4:y=w,l=k;case 3:case 2:if(u(d)){if(u(b)){l= -b;y=d;break}l=d;y=k}else{q=b;n=d;l=k;break}case 1:u(b)?l=b:c?n=b:q=b;break;case 0:break;default:throw v("badargs",arguments.length);}var t=this instanceof f,m=t?n:h.isArray?[]:new f(n),z={},B=h.interceptor&&h.interceptor.response||e,C=h.interceptor&&h.interceptor.responseError||A;s(h,function(a,b){"params"!=b&&("isArray"!=b&&"interceptor"!=b)&&(z[b]=G(a))});c&&(z.data=n);F.setUrlParams(z,x({},r(n,h.params||{}),q),h.url);q=p(z).then(function(b){var d=b.data,k=m.$promise;if(d){if(a.isArray(d)!==!!h.isArray)throw v("badcfg", -h.isArray?"array":"object",a.isArray(d)?"array":"object");h.isArray?(m.length=0,s(d,function(b){m.push(new f(b))})):(D(d,m),m.$promise=k)}m.$resolved=!0;b.resource=m;return b},function(b){m.$resolved=!0;(y||E)(b);return g.reject(b)});q=q.then(function(b){var a=B(b);(l||E)(a,b.headers);return a},C);return t?q:(m.$promise=q,m.$resolved=!1,m)};f.prototype["$"+d]=function(b,a,k){u(b)&&(k=a,a=b,b={});b=f[d].call(this,b,this,a,k);return b.$promise||b}});f.bind=function(a){return t(n,x({},w,a),l)};return f} -var B={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},E=a.noop,s=a.forEach,x=a.extend,G=a.copy,u=a.isFunction;c.prototype={setUrlParams:function(c,g,l){var r=this,e=l||r.template,f,p,h=r.urlParams={};s(e.split(/\W/),function(a){if("hasOwnProperty"===a)throw v("badname");!/^\d+$/.test(a)&&(a&&RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(e))&&(h[a]=!0)});e=e.replace(/\\:/g,":");g=g||{};s(r.urlParams,function(d,c){f=g.hasOwnProperty(c)? -g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),function(a,c){return p+c})):e=e.replace(RegExp("(/?):"+c+"(\\W|$)","g"),function(a,c,d){return"/"==d.charAt(0)?d:c+d})});e=e.replace(/\/+$/,"")||"/";e=e.replace(/\/\.(?=\w+($|\?))/,".");c.url=e.replace(/\/\\\./,"/.");s(g,function(a, -e){r.urlParams[e]||(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular); -//# sourceMappingURL=angular-resource.min.js.map diff --git a/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js.map b/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js.map deleted file mode 100644 index 7c17bc80..00000000 --- a/platforms/android/assets/www/lib/angular-resource/angular-resource.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-resource.min.js", -"lineCount":12, -"mappings":"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", -"sources":["angular-resource.js"], -"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","factory","$http","$q","Route","template","defaults","urlParams","resourceFactory","url","paramDefaults","actions","extractParams","data","actionParams","ids","extend","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","DEFAULT_ACTIONS","action","name","hasBody","method","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","isArray","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","$promise","item","push","$resolved","noop","reject","headers","prototype","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"] -} diff --git a/platforms/android/assets/www/lib/angular-resource/bower.json b/platforms/android/assets/www/lib/angular-resource/bower.json deleted file mode 100644 index 5b1cf50b..00000000 --- a/platforms/android/assets/www/lib/angular-resource/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.2.16", - "main": "./angular-resource.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-route/.bower.json b/platforms/android/assets/www/lib/angular-route/.bower.json deleted file mode 100644 index 4bacfc53..00000000 --- a/platforms/android/assets/www/lib/angular-route/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-route", - "version": "1.2.16", - "main": "./angular-route.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-route", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "ed0e2b796077d953f518cb81cc7af981cf695a45" - }, - "_source": "git://github.com/angular/bower-angular-route.git", - "_target": "1.2.16", - "_originalSource": "angular-route" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-route/README.md b/platforms/android/assets/www/lib/angular-route/README.md deleted file mode 100644 index 49f55fc0..00000000 --- a/platforms/android/assets/www/lib/angular-route/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-route - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngRoute). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-route -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-route/angular-route.js"></script> -``` - -And add `ngRoute` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngRoute']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngRoute). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-route/angular-route.js b/platforms/android/assets/www/lib/angular-route/angular-route.js deleted file mode 100644 index f7ebda8b..00000000 --- a/platforms/android/assets/www/lib/angular-route/angular-route.js +++ /dev/null @@ -1,927 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngRoute - * @description - * - * # ngRoute - * - * The `ngRoute` module provides routing and deeplinking services and directives for angular apps. - * - * ## Example - * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. - * - * - * <div doc-module-components="ngRoute"></div> - */ - /* global -ngRouteModule */ -var ngRouteModule = angular.module('ngRoute', ['ng']). - provider('$route', $RouteProvider); - -/** - * @ngdoc provider - * @name $routeProvider - * @function - * - * @description - * - * Used for configuring routes. - * - * ## Example - * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. - * - * ## Dependencies - * Requires the {@link ngRoute `ngRoute`} module to be installed. - */ -function $RouteProvider(){ - function inherit(parent, extra) { - return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra); - } - - var routes = {}; - - /** - * @ngdoc method - * @name $routeProvider#when - * - * @param {string} path Route path (matched against `$location.path`). If `$location.path` - * contains redundant trailing slash or is missing one, the route will still match and the - * `$location.path` will be updated to add or drop the trailing slash to exactly match the - * route definition. - * - * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up - * to the next slash are matched and stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain named groups starting with a colon and ending with a star: - * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain optional named groups with a question mark: e.g.`:name?`. - * - * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match - * `/color/brown/largecode/code/with/slashes/edit` and extract: - * - * * `color: brown` - * * `largecode: code/with/slashes`. - * - * - * @param {Object} route Mapping information to be assigned to `$route.current` on route - * match. - * - * Object properties: - * - * - `controller` – `{(string|function()=}` – Controller fn that should be associated with - * newly created scope or the name of a {@link angular.Module#controller registered - * controller} if passed as a string. - * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be - * published to scope under the `controllerAs` name. - * - `template` – `{string=|function()=}` – html template as a string or a function that - * returns an html template as a string which should be used by {@link - * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. - * This property takes precedence over `templateUrl`. - * - * If `template` is a function, it will be called with the following parameters: - * - * - `{Array.<Object>}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html - * template that should be used by {@link ngRoute.directive:ngView ngView}. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - `{Array.<Object>}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should - * be injected into the controller. If any of these dependencies are promises, the router - * will wait for them all to be resolved or one to be rejected before the controller is - * instantiated. - * If all the promises are resolved successfully, the values of the resolved promises are - * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is - * fired. If any of the promises are rejected the - * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object - * is: - * - * - `key` – `{string}`: a name of a dependency to be injected into the controller. - * - `factory` - `{string|function}`: If `string` then it is an alias for a service. - * Otherwise if function, then it is {@link auto.$injector#invoke injected} - * and the return value is treated as the dependency. If the result is a promise, it is - * resolved before its value is injected into the controller. Be aware that - * `ngRoute.$routeParams` will still refer to the previous route within these resolve - * functions. Use `$route.current.params` to access the new route parameters, instead. - * - * - `redirectTo` – {(string|function())=} – value to update - * {@link ng.$location $location} path with and trigger route redirection. - * - * If `redirectTo` is a function, it will be called with the following parameters: - * - * - `{Object.<string>}` - route parameters extracted from the current - * `$location.path()` by applying the current route templateUrl. - * - `{string}` - current `$location.path()` - * - `{Object}` - current `$location.search()` - * - * The custom `redirectTo` function is expected to return a string which will be used - * to update `$location.path()` and `$location.search()`. - * - * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()` - * or `$location.hash()` changes. - * - * If the option is set to `false` and url in the browser changes, then - * `$routeUpdate` event is broadcasted on the root scope. - * - * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive - * - * If the option is set to `true`, then the particular route can be matched without being - * case sensitive - * - * @returns {Object} self - * - * @description - * Adds a new route definition to the `$route` service. - */ - this.when = function(path, route) { - routes[path] = angular.extend( - {reloadOnSearch: true}, - route, - path && pathRegExp(path, route) - ); - - // create redirection for trailing slashes - if (path) { - var redirectPath = (path[path.length-1] == '/') - ? path.substr(0, path.length-1) - : path +'/'; - - routes[redirectPath] = angular.extend( - {redirectTo: path}, - pathRegExp(redirectPath, route) - ); - } - - return this; - }; - - /** - * @param path {string} path - * @param opts {Object} options - * @return {?Object} - * - * @description - * Normalizes the given path, returning a regular expression - * and the original path. - * - * Inspired by pathRexp in visionmedia/express/lib/utils.js. - */ - function pathRegExp(path, opts) { - var insensitive = opts.caseInsensitiveMatch, - ret = { - originalPath: path, - regexp: path - }, - keys = ret.keys = []; - - path = path - .replace(/([().])/g, '\\$1') - .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option){ - var optional = option === '?' ? option : null; - var star = option === '*' ? option : null; - keys.push({ name: key, optional: !!optional }); - slash = slash || ''; - return '' - + (optional ? '' : slash) - + '(?:' - + (optional ? slash : '') - + (star && '(.+?)' || '([^/]+)') - + (optional || '') - + ')' - + (optional || ''); - }) - .replace(/([\/$\*])/g, '\\$1'); - - ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : ''); - return ret; - } - - /** - * @ngdoc method - * @name $routeProvider#otherwise - * - * @description - * Sets route definition that will be used on route change when no other route definition - * is matched. - * - * @param {Object} params Mapping information to be assigned to `$route.current`. - * @returns {Object} self - */ - this.otherwise = function(params) { - this.when(null, params); - return this; - }; - - - this.$get = ['$rootScope', - '$location', - '$routeParams', - '$q', - '$injector', - '$http', - '$templateCache', - '$sce', - function($rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) { - - /** - * @ngdoc service - * @name $route - * @requires $location - * @requires $routeParams - * - * @property {Object} current Reference to the current route definition. - * The route definition contains: - * - * - `controller`: The controller constructor as define in route definition. - * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for - * controller instantiation. The `locals` contain - * the resolved values of the `resolve` map. Additionally the `locals` also contain: - * - * - `$scope` - The current route scope. - * - `$template` - The current route template HTML. - * - * @property {Object} routes Object with all route configuration Objects as its properties. - * - * @description - * `$route` is used for deep-linking URLs to controllers and views (HTML partials). - * It watches `$location.url()` and tries to map the path to an existing route definition. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. - * - * The `$route` service is typically used in conjunction with the - * {@link ngRoute.directive:ngView `ngView`} directive and the - * {@link ngRoute.$routeParams `$routeParams`} service. - * - * @example - * This example shows how changing the URL hash causes the `$route` to match a route against the - * URL, and the `ngView` pulls in the partial. - * - * Note that this example is using {@link ng.directive:script inlined templates} - * to get it working on jsfiddle as well. - * - * <example name="$route-service" module="ngRouteExample" - * deps="angular-route.js" fixBase="true"> - * <file name="index.html"> - * <div ng-controller="MainController"> - * Choose: - * <a href="Book/Moby">Moby</a> | - * <a href="Book/Moby/ch/1">Moby: Ch1</a> | - * <a href="Book/Gatsby">Gatsby</a> | - * <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | - * <a href="Book/Scarlet">Scarlet Letter</a><br/> - * - * <div ng-view></div> - * - * <hr /> - * - * <pre>$location.path() = {{$location.path()}}</pre> - * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre> - * <pre>$route.current.params = {{$route.current.params}}</pre> - * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre> - * <pre>$routeParams = {{$routeParams}}</pre> - * </div> - * </file> - * - * <file name="book.html"> - * controller: {{name}}<br /> - * Book Id: {{params.bookId}}<br /> - * </file> - * - * <file name="chapter.html"> - * controller: {{name}}<br /> - * Book Id: {{params.bookId}}<br /> - * Chapter Id: {{params.chapterId}} - * </file> - * - * <file name="script.js"> - * angular.module('ngRouteExample', ['ngRoute']) - * - * .controller('MainController', function($scope, $route, $routeParams, $location) { - * $scope.$route = $route; - * $scope.$location = $location; - * $scope.$routeParams = $routeParams; - * }) - * - * .controller('BookController', function($scope, $routeParams) { - * $scope.name = "BookController"; - * $scope.params = $routeParams; - * }) - * - * .controller('ChapterController', function($scope, $routeParams) { - * $scope.name = "ChapterController"; - * $scope.params = $routeParams; - * }) - * - * .config(function($routeProvider, $locationProvider) { - * $routeProvider - * .when('/Book/:bookId', { - * templateUrl: 'book.html', - * controller: 'BookController', - * resolve: { - * // I will cause a 1 second delay - * delay: function($q, $timeout) { - * var delay = $q.defer(); - * $timeout(delay.resolve, 1000); - * return delay.promise; - * } - * } - * }) - * .when('/Book/:bookId/ch/:chapterId', { - * templateUrl: 'chapter.html', - * controller: 'ChapterController' - * }); - * - * // configure html5 to get links working on jsfiddle - * $locationProvider.html5Mode(true); - * }); - * - * </file> - * - * <file name="protractor.js" type="protractor"> - * it('should load and compile correct template', function() { - * element(by.linkText('Moby: Ch1')).click(); - * var content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: ChapterController/); - * expect(content).toMatch(/Book Id\: Moby/); - * expect(content).toMatch(/Chapter Id\: 1/); - * - * element(by.partialLinkText('Scarlet')).click(); - * - * content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: BookController/); - * expect(content).toMatch(/Book Id\: Scarlet/); - * }); - * </file> - * </example> - */ - - /** - * @ngdoc event - * @name $route#$routeChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occur. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a route dependencies are resolved. - * {@link ngRoute.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is - * first route entered. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeError - * @eventType broadcast on root scope - * @description - * Broadcasted if any of the resolve promises are rejected. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. - */ - - /** - * @ngdoc event - * @name $route#$routeUpdate - * @eventType broadcast on root scope - * @description - * - * The `reloadOnSearch` property has been set to false, and we are reusing the same - * instance of the Controller. - */ - - var forceReload = false, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name $route#reload - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ngRoute.directive:ngView ngView} - * creates new scope, reinstantiates the controller. - */ - reload: function() { - forceReload = true; - $rootScope.$evalAsync(updateRoute); - } - }; - - $rootScope.$on('$locationChangeSuccess', updateRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param route {Object} route regexp to match the url against - * @return {?Object} - * - * @description - * Check if the route matches the current url. - * - * Inspired by match in - * visionmedia/express/lib/router/router.js. - */ - function switchRouteMatcher(on, route) { - var keys = route.keys, - params = {}; - - if (!route.regexp) return null; - - var m = route.regexp.exec(on); - if (!m) return null; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - var val = 'string' == typeof m[i] - ? decodeURIComponent(m[i]) - : m[i]; - - if (key && val) { - params[key.name] = val; - } - } - return params; - } - - function updateRoute() { - var next = parseRoute(), - last = $route.current; - - if (next && last && next.$$route === last.$$route - && angular.equals(next.pathParams, last.pathParams) - && !next.reloadOnSearch && !forceReload) { - last.params = next.params; - angular.copy(last.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', last); - } else if (next || last) { - forceReload = false; - $rootScope.$broadcast('$routeChangeStart', next, last); - $route.current = next; - if (next) { - if (next.redirectTo) { - if (angular.isString(next.redirectTo)) { - $location.path(interpolate(next.redirectTo, next.params)).search(next.params) - .replace(); - } else { - $location.url(next.redirectTo(next.pathParams, $location.path(), $location.search())) - .replace(); - } - } - } - - $q.when(next). - then(function() { - if (next) { - var locals = angular.extend({}, next.resolve), - template, templateUrl; - - angular.forEach(locals, function(value, key) { - locals[key] = angular.isString(value) ? - $injector.get(value) : $injector.invoke(value); - }); - - if (angular.isDefined(template = next.template)) { - if (angular.isFunction(template)) { - template = template(next.params); - } - } else if (angular.isDefined(templateUrl = next.templateUrl)) { - if (angular.isFunction(templateUrl)) { - templateUrl = templateUrl(next.params); - } - templateUrl = $sce.getTrustedResourceUrl(templateUrl); - if (angular.isDefined(templateUrl)) { - next.loadedTemplateUrl = templateUrl; - template = $http.get(templateUrl, {cache: $templateCache}). - then(function(response) { return response.data; }); - } - } - if (angular.isDefined(template)) { - locals['$template'] = template; - } - return $q.all(locals); - } - }). - // after route change - then(function(locals) { - if (next == $route.current) { - if (next) { - next.locals = locals; - angular.copy(next.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', next, last); - } - }, function(error) { - if (next == $route.current) { - $rootScope.$broadcast('$routeChangeError', next, last, error); - } - }); - } - } - - - /** - * @returns {Object} the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - angular.forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), route))) { - match = inherit(route, { - params: angular.extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @returns {string} interpolation of the redirect path with the parameters - */ - function interpolate(string, params) { - var result = []; - angular.forEach((string||'').split(':'), function(segment, i) { - if (i === 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -ngRouteModule.provider('$routeParams', $RouteParamsProvider); - - -/** - * @ngdoc service - * @name $routeParams - * @requires $route - * - * @description - * The `$routeParams` service allows you to retrieve the current set of route parameters. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * The route parameters are a combination of {@link ng.$location `$location`}'s - * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. - * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * Note that the `$routeParams` are only updated *after* a route change completes successfully. - * This means that you cannot rely on `$routeParams` being correct in route resolve functions. - * Instead you can use `$route.current.params` to access the new route's parameters. - * - * @example - * ```js - * // Given: - * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby - * // Route: /Chapter/:chapterId/Section/:sectionId - * // - * // Then - * $routeParams ==> {chapterId:1, sectionId:2, search:'moby'} - * ``` - */ -function $RouteParamsProvider() { - this.$get = function() { return {}; }; -} - -ngRouteModule.directive('ngView', ngViewFactory); -ngRouteModule.directive('ngView', ngViewFillContentFactory); - - -/** - * @ngdoc directive - * @name ngView - * @restrict ECA - * - * @description - * # Overview - * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the view is updated. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated - * as an expression yields a truthy value. - * @example - <example name="ngView-directive" module="ngViewExample" - deps="angular-route.js;angular-animate.js" - animations="true" fixBase="true"> - <file name="index.html"> - <div ng-controller="MainCtrl as main"> - Choose: - <a href="Book/Moby">Moby</a> | - <a href="Book/Moby/ch/1">Moby: Ch1</a> | - <a href="Book/Gatsby">Gatsby</a> | - <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | - <a href="Book/Scarlet">Scarlet Letter</a><br/> - - <div class="view-animate-container"> - <div ng-view class="view-animate"></div> - </div> - <hr /> - - <pre>$location.path() = {{main.$location.path()}}</pre> - <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre> - <pre>$route.current.params = {{main.$route.current.params}}</pre> - <pre>$route.current.scope.name = {{main.$route.current.scope.name}}</pre> - <pre>$routeParams = {{main.$routeParams}}</pre> - </div> - </file> - - <file name="book.html"> - <div> - controller: {{book.name}}<br /> - Book Id: {{book.params.bookId}}<br /> - </div> - </file> - - <file name="chapter.html"> - <div> - controller: {{chapter.name}}<br /> - Book Id: {{chapter.params.bookId}}<br /> - Chapter Id: {{chapter.params.chapterId}} - </div> - </file> - - <file name="animations.css"> - .view-animate-container { - position:relative; - height:100px!important; - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .view-animate { - padding:10px; - } - - .view-animate.ng-enter, .view-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - - display:block; - width:100%; - border-left:1px solid black; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - padding:10px; - } - - .view-animate.ng-enter { - left:100%; - } - .view-animate.ng-enter.ng-enter-active { - left:0; - } - .view-animate.ng-leave.ng-leave-active { - left:-100%; - } - </file> - - <file name="script.js"> - angular.module('ngViewExample', ['ngRoute', 'ngAnimate']) - .config(['$routeProvider', '$locationProvider', - function($routeProvider, $locationProvider) { - $routeProvider - .when('/Book/:bookId', { - templateUrl: 'book.html', - controller: 'BookCtrl', - controllerAs: 'book' - }) - .when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: 'ChapterCtrl', - controllerAs: 'chapter' - }); - - // configure html5 to get links working on jsfiddle - $locationProvider.html5Mode(true); - }]) - .controller('MainCtrl', ['$route', '$routeParams', '$location', - function($route, $routeParams, $location) { - this.$route = $route; - this.$location = $location; - this.$routeParams = $routeParams; - }]) - .controller('BookCtrl', ['$routeParams', function($routeParams) { - this.name = "BookCtrl"; - this.params = $routeParams; - }]) - .controller('ChapterCtrl', ['$routeParams', function($routeParams) { - this.name = "ChapterCtrl"; - this.params = $routeParams; - }]); - - </file> - - <file name="protractor.js" type="protractor"> - it('should load and compile correct template', function() { - element(by.linkText('Moby: Ch1')).click(); - var content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: ChapterCtrl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element(by.partialLinkText('Scarlet')).click(); - - content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: BookCtrl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngView#$viewContentLoaded - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate']; -function ngViewFactory( $route, $anchorScroll, $animate) { - return { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - link: function(scope, $element, attr, ctrl, $transclude) { - var currentScope, - currentElement, - previousElement, - autoScrollExp = attr.autoscroll, - onloadExp = attr.onload || ''; - - scope.$on('$routeChangeSuccess', update); - update(); - - function cleanupLastView() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (angular.isDefined(template)) { - var newScope = scope.$new(); - var current = $route.current; - - // Note: This will also link all children of ng-view that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-view on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () { - if (angular.isDefined(autoScrollExp) - && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }); - cleanupLastView(); - }); - - currentElement = clone; - currentScope = current.scope = newScope; - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } else { - cleanupLastView(); - } - } - } - }; -} - -// This directive is called during the $transclude call of the first `ngView` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngView -// is called. -ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route']; -function ngViewFillContentFactory($compile, $controller, $route) { - return { - restrict: 'ECA', - priority: -400, - link: function(scope, $element) { - var current = $route.current, - locals = current.locals; - - $element.html(locals.$template); - - var link = $compile($element.contents()); - - if (current.controller) { - locals.$scope = scope; - var controller = $controller(current.controller, locals); - if (current.controllerAs) { - scope[current.controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - - link(scope); - } - }; -} - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-route/angular-route.min.js b/platforms/android/assets/www/lib/angular-route/angular-route.min.js deleted file mode 100644 index aef1fd60..00000000 --- a/platforms/android/assets/www/lib/angular-route/angular-route.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(n,e,A){'use strict';function x(s,g,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);h&&(h.$destroy(),h=null);l&&(k.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){k.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});h=d.scope=b;h.$emit("$viewContentLoaded");h.$eval(u)}else y()} -var h,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){}, -{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},k=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;k.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b= -"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,h){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart", -d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=h.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl= -b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(k,function(f,k){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var h=1,p=g.length;h<p;++h){var n=q[h-1],r="string"==typeof g[h]?decodeURIComponent(g[h]): -g[h];n&&r&&(l[n.name]=r)}q=l}else q=null;else q=null;q=a=q}q&&(b=s(f,{params:e.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||k[null]&&s(k[null],{params:{},pathParams:{}})}function t(a,c){var b=[];e.forEach((a||"").split(":"),function(a,d){if(0===d)b.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];b.push(c[f]);b.push(e[2]||"");delete c[f]}});return b.join("")}var u=!1,r={routes:k,reload:function(){u=!0;a.$evalAsync(l)}};a.$on("$locationChangeSuccess",l);return r}]});n.provider("$routeParams", -function(){this.$get=function(){return{}}});n.directive("ngView",x);n.directive("ngView",z);x.$inject=["$route","$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular); -//# sourceMappingURL=angular-route.min.js.map diff --git a/platforms/android/assets/www/lib/angular-route/angular-route.min.js.map b/platforms/android/assets/www/lib/angular-route/angular-route.min.js.map deleted file mode 100644 index 3510eaf8..00000000 --- a/platforms/android/assets/www/lib/angular-route/angular-route.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-route.min.js", -"lineCount":13, -"mappings":"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", -"sources":["angular-route.js"], -"names":["window","angular","undefined","ngViewFactory","$route","$anchorScroll","$animate","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousElement","remove","currentScope","$destroy","currentElement","leave","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","ngRouteModule","module","provider","$RouteProvider","inherit","parent","extra","extend","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","keys","replace","_","slash","key","option","optional","star","push","regexp","RegExp","routes","when","this.when","route","redirectPath","length","substr","otherwise","this.otherwise","params","$get","$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce","updateRoute","next","parseRoute","last","$$route","equals","pathParams","reloadOnSearch","forceReload","copy","$broadcast","redirectTo","isString","interpolate","search","url","then","resolve","template","templateUrl","forEach","value","get","invoke","isFunction","getTrustedResourceUrl","loadedTemplateUrl","response","all","error","match","m","exec","on","i","len","val","decodeURIComponent","name","string","result","split","segment","segmentMatch","join","reload","$evalAsync","$RouteParamsProvider","this.$get","directive","$inject"] -} diff --git a/platforms/android/assets/www/lib/angular-route/bower.json b/platforms/android/assets/www/lib/angular-route/bower.json deleted file mode 100644 index 55c9a0fb..00000000 --- a/platforms/android/assets/www/lib/angular-route/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-route", - "version": "1.2.16", - "main": "./angular-route.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-sanitize/.bower.json b/platforms/android/assets/www/lib/angular-sanitize/.bower.json deleted file mode 100644 index 9c2cde87..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-sanitize", - "version": "1.2.16", - "main": "./angular-sanitize.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-sanitize", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "0534ccd6bb2b7b6e5d0fa6c27fd3277f312a4347" - }, - "_source": "git://github.com/angular/bower-angular-sanitize.git", - "_target": "1.2.16", - "_originalSource": "angular-sanitize" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-sanitize/README.md b/platforms/android/assets/www/lib/angular-sanitize/README.md deleted file mode 100644 index 585a235e..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-sanitize - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-sanitize -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-sanitize/angular-sanitize.js"></script> -``` - -And add `ngSanitize` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngSanitize']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.js b/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.js deleted file mode 100644 index b670812d..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.js +++ /dev/null @@ -1,624 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $sanitizeMinErr = angular.$$minErr('$sanitize'); - -/** - * @ngdoc module - * @name ngSanitize - * @description - * - * # ngSanitize - * - * The `ngSanitize` module provides functionality to sanitize HTML. - * - * - * <div doc-module-components="ngSanitize"></div> - * - * See {@link ngSanitize.$sanitize `$sanitize`} for usage. - */ - -/* - * HTML Parser By Misko Hevery (misko@hevery.com) - * based on: HTML Parser By John Resig (ejohn.org) - * Original code by Erik Arvidsson, Mozilla Public License - * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js - * - * // Use like so: - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - */ - - -/** - * @ngdoc service - * @name $sanitize - * @function - * - * @description - * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are - * then serialized back to properly escaped html string. This means that no unsafe input can make - * it into the returned string, however, since our parser is more strict than a typical browser - * parser, it's possible that some obscure input, which would be recognized as valid HTML by a - * browser, won't make it through the sanitizer. - * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and - * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}. - * - * @param {string} html Html input. - * @returns {string} Sanitized html. - * - * @example - <example module="ngSanitize" deps="angular-sanitize.js"> - <file name="index.html"> - <script> - function Ctrl($scope, $sce) { - $scope.snippet = - '<p style="color:blue">an html\n' + - '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' + - 'snippet</p>'; - $scope.deliberatelyTrustDangerousSnippet = function() { - return $sce.trustAsHtml($scope.snippet); - }; - } - </script> - <div ng-controller="Ctrl"> - Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea> - <table> - <tr> - <td>Directive</td> - <td>How</td> - <td>Source</td> - <td>Rendered</td> - </tr> - <tr id="bind-html-with-sanitize"> - <td>ng-bind-html</td> - <td>Automatically uses $sanitize</td> - <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td> - <td><div ng-bind-html="snippet"></div></td> - </tr> - <tr id="bind-html-with-trust"> - <td>ng-bind-html</td> - <td>Bypass $sanitize by explicitly trusting the dangerous value</td> - <td> - <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt; -&lt;/div&gt;</pre> - </td> - <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td> - </tr> - <tr id="bind-default"> - <td>ng-bind</td> - <td>Automatically escapes</td> - <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td> - <td><div ng-bind="snippet"></div></td> - </tr> - </table> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should sanitize the html snippet by default', function() { - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('<p>an html\n<em>click here</em>\nsnippet</p>'); - }); - - it('should inline raw snippet if bound to a trusted value', function() { - expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should escape snippet without any filter', function() { - expect(element(by.css('#bind-default div')).getInnerHtml()). - toBe("&lt;p style=\"color:blue\"&gt;an html\n" + - "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" + - "snippet&lt;/p&gt;"); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>'); - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('new <b>text</b>'); - expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe( - 'new <b onclick="alert(1)">text</b>'); - expect(element(by.css('#bind-default div')).getInnerHtml()).toBe( - "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;"); - }); - </file> - </example> - */ -function $SanitizeProvider() { - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, angular.noop); - writer.chars(chars); - return buf.join(''); -} - - -// Regular Expressions for parsing tags and attributes -var START_TAG_REGEXP = - /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, - END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, - ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, - BEGIN_TAG_REGEXP = /^</, - BEGING_END_TAGE_REGEXP = /^<\s*\//, - COMMENT_REGEXP = /<!--(.*?)-->/g, - DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i, - CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; - - -// Good source of info about elements and attributes -// http://dev.w3.org/html5/spec/Overview.html#semantics -// http://simon.html5.org/html-elements - -// Safe Void Elements - HTML5 -// http://dev.w3.org/html5/spec/Overview.html#void-elements -var voidElements = makeMap("area,br,col,hr,img,wbr"); - -// Elements that you can, intentionally, leave open (and which close themselves) -// http://dev.w3.org/html5/spec/Overview.html#optional-tags -var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), - optionalEndTagInlineElements = makeMap("rp,rt"), - optionalEndTagElements = angular.extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); - -// Safe Block Elements - HTML5 -var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + - "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," + - "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); - -// Inline Elements - HTML5 -var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + - "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," + - "samp,small,span,strike,strong,sub,sup,time,tt,u,var")); - - -// Special Elements (can contain anything) -var specialElements = makeMap("script,style"); - -var validElements = angular.extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements); - -//Attributes that have href and hence need to be sanitized -var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); -var validAttrs = angular.extend({}, uriAttrs, makeMap( - 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+ - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+ - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+ - 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+ - 'valign,value,vspace,width')); - -function makeMap(str) { - var obj = {}, items = str.split(','), i; - for (i = 0; i < items.length; i++) obj[items[i]] = true; - return obj; -} - - -/** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ -function htmlParser( html, handler ) { - var index, chars, match, stack = [], last = html; - stack.last = function() { return stack[ stack.length - 1 ]; }; - - while ( html ) { - chars = true; - - // Make sure we're not in a script or style element - if ( !stack.last() || !specialElements[ stack.last() ] ) { - - // Comment - if ( html.indexOf("<!--") === 0 ) { - // comments containing -- are not allowed unless they terminate the comment - index = html.indexOf("--", 4); - - if ( index >= 0 && html.lastIndexOf("-->", index) === index) { - if (handler.comment) handler.comment( html.substring( 4, index ) ); - html = html.substring( index + 3 ); - chars = false; - } - // DOCTYPE - } else if ( DOCTYPE_REGEXP.test(html) ) { - match = html.match( DOCTYPE_REGEXP ); - - if ( match ) { - html = html.replace( match[0], ''); - chars = false; - } - // end tag - } else if ( BEGING_END_TAGE_REGEXP.test(html) ) { - match = html.match( END_TAG_REGEXP ); - - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( END_TAG_REGEXP, parseEndTag ); - chars = false; - } - - // start tag - } else if ( BEGIN_TAG_REGEXP.test(html) ) { - match = html.match( START_TAG_REGEXP ); - - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( START_TAG_REGEXP, parseStartTag ); - chars = false; - } - } - - if ( chars ) { - index = html.indexOf("<"); - - var text = index < 0 ? html : html.substring( 0, index ); - html = index < 0 ? "" : html.substring( index ); - - if (handler.chars) handler.chars( decodeEntities(text) ); - } - - } else { - html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), - function(all, text){ - text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); - - if (handler.chars) handler.chars( decodeEntities(text) ); - - return ""; - }); - - parseEndTag( "", stack.last() ); - } - - if ( html == last ) { - throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + - "of html: {0}", html); - } - last = html; - } - - // Clean up any remaining tags - parseEndTag(); - - function parseStartTag( tag, tagName, rest, unary ) { - tagName = angular.lowercase(tagName); - if ( blockElements[ tagName ] ) { - while ( stack.last() && inlineElements[ stack.last() ] ) { - parseEndTag( "", stack.last() ); - } - } - - if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) { - parseEndTag( "", tagName ); - } - - unary = voidElements[ tagName ] || !!unary; - - if ( !unary ) - stack.push( tagName ); - - var attrs = {}; - - rest.replace(ATTR_REGEXP, - function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { - var value = doubleQuotedValue - || singleQuotedValue - || unquotedValue - || ''; - - attrs[name] = decodeEntities(value); - }); - if (handler.start) handler.start( tagName, attrs, unary ); - } - - function parseEndTag( tag, tagName ) { - var pos = 0, i; - tagName = angular.lowercase(tagName); - if ( tagName ) - // Find the closest opened tag of the same type - for ( pos = stack.length - 1; pos >= 0; pos-- ) - if ( stack[ pos ] == tagName ) - break; - - if ( pos >= 0 ) { - // Close all the open elements, up the stack - for ( i = stack.length - 1; i >= pos; i-- ) - if (handler.end) handler.end( stack[ i ] ); - - // Remove the open elements from the stack - stack.length = pos; - } - } -} - -var hiddenPre=document.createElement("pre"); -var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/; -/** - * decodes all entities into regular string - * @param value - * @returns {string} A string with decoded entities. - */ -function decodeEntities(value) { - if (!value) { return ''; } - - // Note: IE8 does not preserve spaces at the start/end of innerHTML - // so we must capture them and reattach them afterward - var parts = spaceRe.exec(value); - var spaceBefore = parts[1]; - var spaceAfter = parts[3]; - var content = parts[2]; - if (content) { - hiddenPre.innerHTML=content.replace(/</g,"&lt;"); - // innerText depends on styling as it doesn't display hidden elements. - // Therefore, it's better to use textContent not to cause unnecessary - // reflows. However, IE<9 don't support textContent so the innerText - // fallback is necessary. - content = 'textContent' in hiddenPre ? - hiddenPre.textContent : hiddenPre.innerText; - } - return spaceBefore + content + spaceAfter; -} - -/** - * Escapes all potentially dangerous characters, so that the - * resulting string can be safely inserted into attribute or - * element text. - * @param value - * @returns {string} escaped text - */ -function encodeEntities(value) { - return value. - replace(/&/g, '&amp;'). - replace(NON_ALPHANUMERIC_REGEXP, function(value){ - return '&#' + value.charCodeAt(0) + ';'; - }). - replace(/</g, '&lt;'). - replace(/>/g, '&gt;'); -} - -/** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.jain('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ -function htmlSanitizeWriter(buf, uriValidator){ - var ignore = false; - var out = angular.bind(buf, buf.push); - return { - start: function(tag, attrs, unary){ - tag = angular.lowercase(tag); - if (!ignore && specialElements[tag]) { - ignore = tag; - } - if (!ignore && validElements[tag] === true) { - out('<'); - out(tag); - angular.forEach(attrs, function(value, key){ - var lkey=angular.lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out(unary ? '/>' : '>'); - } - }, - end: function(tag){ - tag = angular.lowercase(tag); - if (!ignore && validElements[tag] === true) { - out('</'); - out(tag); - out('>'); - } - if (tag == ignore) { - ignore = false; - } - }, - chars: function(chars){ - if (!ignore) { - out(encodeEntities(chars)); - } - } - }; -} - - -// define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); - -/* global sanitizeText: false */ - -/** - * @ngdoc filter - * @name linky - * @function - * - * @description - * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. - * @returns {string} Html-linkified text. - * - * @usage - <span ng-bind-html="linky_expression | linky"></span> - * - * @example - <example module="ngSanitize" deps="angular-sanitize.js"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.snippet = - 'Pretty text with some links:\n'+ - 'http://angularjs.org/,\n'+ - 'mailto:us@somewhere.org,\n'+ - 'another@somewhere.org,\n'+ - 'and one more: ftp://127.0.0.1/.'; - $scope.snippetWithTarget = 'http://angularjs.org/'; - } - </script> - <div ng-controller="Ctrl"> - Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea> - <table> - <tr> - <td>Filter</td> - <td>Source</td> - <td>Rendered</td> - </tr> - <tr id="linky-filter"> - <td>linky filter</td> - <td> - <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre> - </td> - <td> - <div ng-bind-html="snippet | linky"></div> - </td> - </tr> - <tr id="linky-target"> - <td>linky target</td> - <td> - <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre> - </td> - <td> - <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div> - </td> - </tr> - <tr id="escaped-html"> - <td>no filter</td> - <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td> - <td><div ng-bind="snippet"></div></td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - it('should linkify the snippet with urls', function() { - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); - }); - - it('should not linkify snippet without the linky filter', function() { - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new http://link.'); - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('new http://link.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) - .toBe('new http://link.'); - }); - - it('should work with the target property', function() { - expect(element(by.id('linky-target')). - element(by.binding("snippetWithTarget | linky:'_blank'")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); - }); - </file> - </example> - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/, - MAILTO_REGEXP = /^mailto:/; - - return function(text, target) { - if (!text) return text; - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/mailto then assume mailto - if (match[2] == match[3]) url = 'mailto:' + url; - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - html.push('<a '); - if (angular.isDefined(target)) { - html.push('target="'); - html.push(target); - html.push('" '); - } - html.push('href="'); - html.push(url); - html.push('">'); - addText(text); - html.push('</a>'); - } - }; -}]); - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js b/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js deleted file mode 100644 index 08964713..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(p,h,q){'use strict';function E(a){var e=[];s(e,h.noop).chars(a);return e.join("")}function k(a){var e={};a=a.split(",");var d;for(d=0;d<a.length;d++)e[a[d]]=!0;return e}function F(a,e){function d(a,b,d,g){b=h.lowercase(b);if(t[b])for(;f.last()&&u[f.last()];)c("",f.last());v[b]&&f.last()==b&&c("",b);(g=w[b]||!!g)||f.push(b);var l={};d.replace(G,function(a,b,e,c,d){l[b]=r(e||c||d||"")});e.start&&e.start(b,l,g)}function c(a,b){var c=0,d;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--); -if(0<=c){for(d=f.length-1;d>=c;d--)e.end&&e.end(f[d]);f.length=c}}var b,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(b,a){a=a.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(r(a));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&e.comment(a.substring(4,b)),a=a.substring(b+3),g=!1);else if(y.test(a)){if(b=a.match(y))a= -a.replace(b[0],""),g=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,c),g=!1}else K.test(a)&&(b=a.match(A))&&(a=a.substring(b[0].length),b[0].replace(A,d),g=!1);g&&(b=a.indexOf("<"),g=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}c()}function r(a){if(!a)return"";var e=M.exec(a);a=e[1];var d=e[3];if(e=e[2])n.innerHTML=e.replace(/</g,"&lt;"),e="textContent"in n?n.textContent:n.innerText;return a+e+d}function B(a){return a.replace(/&/g, -"&amp;").replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function s(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!d&&x[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(g,function(d,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==O[g]||!0===D[g]&&!e(d,k)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d|| -c(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\s*\//,H=/\x3c!--(.*?)--\x3e/g,y=/<!DOCTYPE([^>]*?)>/i,I=/<!\[CDATA\[(.*?)]]\x3e/g,N=/([^\#-~| |!])/g,w=k("area,br,col,hr,img,wbr");p=k("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");q=k("rp,rt");var v=h.extend({},q,p),t=h.extend({},p,k("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")), -u=h.extend({},q,k("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),x=k("script,style"),C=h.extend({},w,t,u,v),D=k("background,cite,href,longdesc,src,usemap"),O=h.extend({},D,k("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width")), -n=document.createElement("pre"),M=/^(\s*)([\s\S]*?)(\s*)$/;h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(e){var d=[];F(e,s(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var e=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/,d=/^mailto:/;return function(c,b){function g(a){a&&m.push(E(a))}function f(a,c){m.push("<a ");h.isDefined(b)&& -(m.push('target="'),m.push(b),m.push('" '));m.push('href="');m.push(a);m.push('">');g(c);m.push("</a>")}if(!c)return c;for(var l,k=c,m=[],n,p;l=k.match(e);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(d,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular); -//# sourceMappingURL=angular-sanitize.min.js.map diff --git a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js.map b/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js.map deleted file mode 100644 index dbf6b259..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/angular-sanitize.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-sanitize.min.js", -"lineCount":13, -"mappings":"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", -"sources":["angular-sanitize.js"], -"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","makeMap","str","obj","items","split","i","length","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","lowercase","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","stack.last","specialElements","RegExp","all","text","COMMENT_REGEXP","CDATA_REGEXP","indexOf","lastIndexOf","comment","substring","DOCTYPE_REGEXP","test","BEGING_END_TAGE_REGEXP","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","parts","spaceRe","exec","spaceBefore","spaceAfter","content","hiddenPre","innerHTML","textContent","innerText","encodeEntities","NON_ALPHANUMERIC_REGEXP","charCodeAt","uriValidator","ignore","out","bind","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","document","createElement","module","provider","$SanitizeProvider","$get","$$sanitizeUri","uri","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","target","addText","addLink","url","isDefined","raw","substr"] -} diff --git a/platforms/android/assets/www/lib/angular-sanitize/bower.json b/platforms/android/assets/www/lib/angular-sanitize/bower.json deleted file mode 100644 index 1160f22f..00000000 --- a/platforms/android/assets/www/lib/angular-sanitize/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-sanitize", - "version": "1.2.16", - "main": "./angular-sanitize.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-scenario/.bower.json b/platforms/android/assets/www/lib/angular-scenario/.bower.json deleted file mode 100644 index f33be682..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.2.16", - "main": "./angular-scenario.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-scenario", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "387bd67cc4863655aed0f889956cdeb4acdb03ae" - }, - "_source": "git://github.com/angular/bower-angular-scenario.git", - "_target": "1.2.16", - "_originalSource": "angular-scenario" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-scenario/README.md b/platforms/android/assets/www/lib/angular-scenario/README.md deleted file mode 100644 index 7f80a8c5..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# bower-angular-scenario - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngScenario). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-scenario -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-scenario/angular-scenario.js b/platforms/android/assets/www/lib/angular-scenario/angular-scenario.js deleted file mode 100644 index 81491c59..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/angular-scenario.js +++ /dev/null @@ -1,33464 +0,0 @@ -/*! - * jQuery JavaScript Library v1.10.2 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03T13:48Z - */ -(function( window, undefined ) {'use strict'; - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -// - -var - // The deferred used on DOM ready - readyList, - - // A central reference to the root jQuery(document) - rootjQuery, - - // Support: IE<10 - // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` - core_strundefined = typeof undefined, - - // Use the correct document accordingly with window argument (sandbox) - location = window.location, - document = window.document, - docElem = document.documentElement, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // [[Class]] -> type pairs - class2type = {}, - - // List of deleted data cache ids, so we can reuse them - core_deletedIds = [], - - core_version = "1.10.2", - - // Save a reference to some core methods - core_concat = core_deletedIds.concat, - core_push = core_deletedIds.push, - core_slice = core_deletedIds.slice, - core_indexOf = core_deletedIds.indexOf, - core_toString = class2type.toString, - core_hasOwn = class2type.hasOwnProperty, - core_trim = core_version.trim, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Used for matching numbers - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, - - // Used for splitting on whitespace - core_rnotwhite = /\S+/g, - - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // The ready event handler - completed = function( event ) { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { - detach(); - jQuery.ready(); - } - }, - // Clean-up method for dom ready events - detach = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: core_version, - - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return core_slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; - }, - - slice: function() { - return this.pushStack( core_slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), - - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - /* jshint eqeqeq: false */ - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - if ( obj == null ) { - return String( obj ); - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ core_toString.call(obj) ] || "object" : - typeof obj; - }, - - isPlainObject: function( obj ) { - var key; - - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Support: IE<9 - // Handle iteration over inherited properties before own properties. - if ( jQuery.support.ownLast ) { - for ( key in obj ) { - return core_hasOwn.call( obj, key ); - } - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // keepScripts (optional): If true, will include scripts passed in the html string - parseHTML: function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - if ( scripts ) { - jQuery( scripts ).remove(); - } - return jQuery.merge( [], parsed.childNodes ); - }, - - parseJSON: function( data ) { - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - if ( data === null ) { - return data; - } - - if ( typeof data === "string" ) { - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - if ( data ) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - } - } - } - - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - core_push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return core_concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations. - // Note: this method belongs to the css module but it's needed here for the support module. - // If support gets modularized, this method should be moved back to the css module. - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} - - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); -}; - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || type !== "function" && - ( length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj ); -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); -/*! - * Sizzle CSS Selector Engine v1.10.2 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03 - */ -(function( window, undefined ) { - -var i, - support, - cachedruns, - Expr, - getText, - isXML, - compile, - outermostContext, - sortInput, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - hasDuplicate = false, - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - - // Prefer arguments quoted, - // then not containing pseudos/brackets, - // then attribute selectors/non-parenthetical expressions, - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rsibling = new RegExp( whitespace + "*[+~]" ), - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - // BMP codepoint - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( documentIsHTML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && context.parentNode || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key += " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Detect xml - * @param {Element|Object} elem An element or a document - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent.attachEvent && parent !== parent.top ) { - parent.attachEvent( "onbeforeunload", function() { - setDocument(); - }); - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = assert(function( div ) { - div.innerHTML = "<div class='a'></div><div class='a i'></div>"; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = "<select><option selected=''></option></select>"; - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - - // Support: Opera 10-12/IE8 - // ^= $= *= and empty values - // Should not select anything - // Support: Windows 8 Native Apps - // The type attribute is restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "t", "" ); - - if ( div.querySelectorAll("[t^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - } : - function( a, b ) { - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Parentless nodes are either documents or disconnected - } else if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [elem] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val === undefined ? - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null : - val; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[5] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] && match[4] !== undefined ) { - match[2] = match[4]; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( tokens = [] ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var data, cache, outerCache, - dirkey = dirruns + " " + doneName; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { - if ( (data = cache[1]) === true || data === cachedruns ) { - return data === true; - } - } else { - cache = outerCache[ dir ] = [ dirkey ]; - cache[1] = matcher( elem, context, xml ) || cachedruns; - if ( cache[1] === true ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - // A counter to specify which element is currently being matched - var matcherCachedRuns = 0, - bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); - - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = matcherCachedRuns; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - for ( ; (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - cachedruns = ++matcherCachedRuns; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; -}; - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - match = tokenize( selector ); - - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - } - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && context.parentNode || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - } - - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) - ); - return results; -} - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - elem[ name ] === true ? name.toLowerCase() : null; - } - }); -} - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})( window ); -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); -jQuery.support = (function( support ) { - - var all, a, input, select, fragment, opt, eventName, isSupported, i, - div = document.createElement("div"); - - // Setup - div.setAttribute( "className", "t" ); - div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; - - // Finish early in limited (non-browser) environments - all = div.getElementsByTagName("*") || []; - a = div.getElementsByTagName("a")[ 0 ]; - if ( !a || !a.style || !all.length ) { - return support; - } - - // First batch of tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; - - a.style.cssText = "top:1px;float:left;opacity:.5"; - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - support.getSetAttribute = div.className !== "t"; - - // IE strips leading whitespace when .innerHTML is used - support.leadingWhitespace = div.firstChild.nodeType === 3; - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - support.tbody = !div.getElementsByTagName("tbody").length; - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - support.htmlSerialize = !!div.getElementsByTagName("link").length; - - // Get the style information from getAttribute - // (IE uses .cssText instead) - support.style = /top/.test( a.getAttribute("style") ); - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - support.hrefNormalized = a.getAttribute("href") === "/a"; - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - support.opacity = /^0.5/.test( a.style.opacity ); - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - support.cssFloat = !!a.style.cssFloat; - - // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) - support.checkOn = !!input.value; - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - support.optSelected = opt.selected; - - // Tests for enctype support on a form (#6743) - support.enctype = !!document.createElement("form").enctype; - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>"; - - // Will be defined later - support.inlineBlockNeedsLayout = false; - support.shrinkWrapBlocks = false; - support.pixelPosition = false; - support.deleteExpando = true; - support.noCloneEvent = true; - support.reliableMarginRight = true; - support.boxSizingReliable = true; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<9 - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - // Check if we can trust getAttribute("value") - input = document.createElement("input"); - input.setAttribute( "value", "" ); - support.input = input.getAttribute( "value" ) === ""; - - // Check if an input maintains its value after becoming a radio - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "checked", "t" ); - input.setAttribute( "name", "t" ); - - fragment = document.createDocumentFragment(); - fragment.appendChild( input ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) - for ( i in { submit: true, change: true, focusin: true }) { - div.setAttribute( eventName = "on" + i, "t" ); - - support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - // Support: IE<9 - // Iteration over object's inherited properties before its own. - for ( i in jQuery( support ) ) { - break; - } - support.ownLast = i !== "0"; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, marginDiv, tds, - divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - container = document.createElement("div"); - container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - - body.appendChild( container ).appendChild( div ); - - // Support: IE8 - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Support: IE8 - // Check if empty table cells still have offsetWidth/Height - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check box-sizing and margin behavior. - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - - // Workaround failing boxSizing test due to offsetWidth returning wrong value - // with some non-1 values of body zoom, ticket #13543 - jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { - support.boxSizing = div.offsetWidth === 4; - }); - - // Use window.getComputedStyle because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = div.appendChild( document.createElement("div") ); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } - - if ( typeof div.style.zoom !== core_strundefined ) { - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - div.style.display = "block"; - div.innerHTML = "<div></div>"; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - - if ( support.inlineBlockNeedsLayout ) { - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); - - // Null elements to avoid leaks in IE - container = div = tds = marginDiv = null; - }); - - // Null elements to avoid leaks in IE - all = select = fragment = opt = a = input = null; - - return support; -})({}); - -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; - -function internalData( elem, name, data, pvt /* Internal Use Only */ ){ - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var ret, thisCache, - internalKey = jQuery.expando, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - // Avoid exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( typeof name === "string" ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, i, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } else { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - i = name.length; - while ( i-- ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - /* jshint eqeqeq: false */ - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - /* jshint eqeqeq: true */ - delete cache[ id ]; - - // When all else fails, null - } else { - cache[ id ] = null; - } -} - -jQuery.extend({ - cache: {}, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "applet": true, - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data ) { - return internalData( elem, name, data ); - }, - - removeData: function( elem, name ) { - return internalRemoveData( elem, name ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - // Do not set data on non-element because it will not be cleared (#8335). - if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { - return false; - } - - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var attrs, name, - data = null, - i = 0, - elem = this[0]; - - // Special expections of .data basically thwart jQuery.access, - // so implement the relevant behavior ourselves - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attrs = elem.attributes; - for ( ; i < attrs.length; i++ ) { - name = attrs[i].name; - - if ( name.indexOf("data-") === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - return arguments.length > 1 ? - - // Sets one value - this.each(function() { - jQuery.data( this, key, value ); - }) : - - // Gets one value - // Try to fetch any internally stored data first - elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - jQuery._removeData( elem, type + "queue" ); - jQuery._removeData( elem, key ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var nodeHook, boolHook, - rclass = /[\t\r\n\f]/g, - rreturn = /\r/g, - rfocusable = /^(?:input|select|textarea|button|object)$/i, - rclickable = /^(?:a|area)$/i, - ruseDefault = /^(?:checked|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - getSetInput = jQuery.support.input; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - elem.className = jQuery.trim( cur ); - - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = arguments.length === 0 || typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - elem.className = value ? jQuery.trim( cur ) : ""; - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( core_rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === core_strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var ret, hooks, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // Use proper attribute retrieval(#6932, #12072) - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - elem.text; - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // oldIE doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === core_strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( core_rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - elem[ propName ] = false; - // Support: IE<9 - // Also clear defaultChecked/defaultSelected (if appropriate) - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = - elem[ propName ] = false; - } - - // See #9699 for explanation of this approach (setting first, then removal) - } else { - jQuery.attr( elem, name, "" ); - } - - elem.removeAttribute( getSetAttribute ? name : propName ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - return tabindex ? - parseInt( tabindex, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - -1; - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - // IE<8 needs the *property* name - elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); - - // Use defaultChecked and defaultSelected for oldIE - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; - } - - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; - - jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? - function( elem, name, isXML ) { - var fn = jQuery.expr.attrHandle[ name ], - ret = isXML ? - undefined : - /* jshint eqeqeq: false */ - (jQuery.expr.attrHandle[ name ] = undefined) != - getter( elem, name, isXML ) ? - - name.toLowerCase() : - null; - jQuery.expr.attrHandle[ name ] = fn; - return ret; - } : - function( elem, name, isXML ) { - return isXML ? - undefined : - elem[ jQuery.camelCase( "default-" + name ) ] ? - name.toLowerCase() : - null; - }; -}); - -// fix oldIE attroperties -if ( !getSetInput || !getSetAttribute ) { - jQuery.attrHooks.value = { - set: function( elem, value, name ) { - if ( jQuery.nodeName( elem, "input" ) ) { - // Does not return so that setAttribute is also used - elem.defaultValue = value; - } else { - // Use nodeHook if defined (#1954); otherwise setAttribute is fine - return nodeHook && nodeHook.set( elem, value, name ); - } - } - }; -} - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = { - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - elem.setAttributeNode( - (ret = elem.ownerDocument.createAttribute( name )) - ); - } - - ret.value = value += ""; - - // Break association with cloned elements by also using setAttribute (#9646) - return name === "value" || value === elem.getAttribute( name ) ? - value : - undefined; - } - }; - jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = - // Some attributes are constructed with empty-string values when not defined - function( elem, name, isXML ) { - var ret; - return isXML ? - undefined : - (ret = elem.getAttributeNode( name )) && ret.value !== "" ? - ret.value : - null; - }; - jQuery.valHooks.button = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return ret && ret.specified ? - ret.value : - undefined; - }, - set: nodeHook.set - }; - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - set: function( elem, value, name ) { - nodeHook.set( elem, value === "" ? false : value, name ); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }; - }); -} - - -// Some attributes require a special call on IE -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !jQuery.support.hrefNormalized ) { - // href/src property should get the full normalized URL (#10299/#12915) - jQuery.each([ "href", "src" ], function( i, name ) { - jQuery.propHooks[ name ] = { - get: function( elem ) { - return elem.getAttribute( name, 4 ); - } - }; - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Note: IE uppercases css property names, but if we were to .toLowerCase() - // .cssText, that would destroy case senstitivity in URL's, like in "background" - return elem.style.cssText || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !jQuery.support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - var tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = core_hasOwn.call( event, "type" ) ? event.type : event, - namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = core_slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var sel, handleObj, matches, i, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === core_strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); -var isSimple = /^.[^:#\[\.,]*$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - ret = [], - self = this, - len = self.length; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - cur = ret.push( cur ); - break; - } - } - } - - return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( jQuery.unique(all) ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); - - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - ret = jQuery.unique( ret ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - } - - return this.pushStack( ret ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( isSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; - }); -} -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /<tbody/i, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - manipulation_rcheckableType = /^(?:checkbox|radio)$/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "<select multiple='multiple'>", "</select>" ], - legend: [ 1, "<fieldset>", "</fieldset>" ], - area: [ 1, "<map>", "</map>" ], - param: [ 1, "<object>", "</object>" ], - thead: [ 1, "<table>", "</table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var - // Snapshot the DOM in case .domManip sweeps something relevant into its fragment - args = jQuery.map( this, function( elem ) { - return [ elem.nextSibling, elem.parentNode ]; - }), - i = 0; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - var next = args[ i++ ], - parent = args[ i++ ]; - - if ( parent ) { - // Don't use the snapshot next if it has moved (#13810) - if ( next && next.parentNode !== parent ) { - next = this.nextSibling; - } - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - // Allow new content to include elements from the context set - }, true ); - - // Force removal if there was no new content (e.g., from empty arguments) - return i ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback, allowIntersection ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback, allowIntersection ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery._evalUrl( node.src ); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -// Support: IE<8 -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted <tbody> from table fragments - if ( !jQuery.support.tbody ) { - - // String was a <table>, *may* have spurious <tbody> - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare <thead> or <tfoot> - wrap[1] === "<table>" && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - }, - - _evalUrl: function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } -}); -jQuery.fn.extend({ - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("<iframe frameborder='0' width='0' height='0'/>") - .css( "cssText", "display:block !important" ) - ).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document; - doc.write("<!doctype html><html><body>"); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} - -// Called ONLY from within css_defaultDisplay -function actualDisplay( name, doc ) { - var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - display = jQuery.css( elem[0], "display" ); - elem.remove(); - return display; -} - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -if ( !jQuery.support.opacity ) { - jQuery.cssHooks.opacity = { - get: function( elem, computed ) { - // IE uses filters for opacity - return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? - ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : - computed ? "1" : ""; - }, - - set: function( elem, value ) { - var style = elem.style, - currentStyle = elem.currentStyle, - opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", - filter = currentStyle && currentStyle.filter || style.filter || ""; - - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - - // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 - // if value === "", then remove inline opacity #12685 - if ( ( value >= 1 || value === "" ) && - jQuery.trim( filter.replace( ralpha, "" ) ) === "" && - style.removeAttribute ) { - - // Setting style.filter to null, "" & " " still leave "filter:" in the cssText - // if "filter:" is present at all, clearType is disabled, we want to avoid this - // style.removeAttribute is IE Only, but so apparently is this code path... - style.removeAttribute( "filter" ); - - // if there is no filter style applied in a css rule or unset inline opacity, we are done - if ( value === "" || currentStyle && !currentStyle.filter ) { - return; - } - } - - // otherwise, set new filter values - style.filter = ralpha.test( filter ) ? - filter.replace( ralpha, opacity ) : - filter + " " + opacity; - } - }; -} - -// These hooks cannot be added until DOM ready because the support test -// for it is not run until after DOM ready -jQuery(function() { - if ( !jQuery.support.reliableMarginRight ) { - jQuery.cssHooks.marginRight = { - get: function( elem, computed ) { - if ( computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } - }; - } - - // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 - // getComputedStyle returns percent when specified for top/left/bottom/right - // rather than make the css module depend on the offset module, we just check for it here - if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { - jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = { - get: function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - }; - }); - } - -}); - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 || - (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); - }; - - jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); - }; -} - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function(){ - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function(){ - var type = this.type; - // Use .is(":disabled") so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !manipulation_rcheckableType.test( type ) ); - }) - .map(function( i, elem ){ - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ){ - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -//Serialize an array of form elements or a set of -//key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - } -}); -var - // Document location - ajaxLocParts, - ajaxLocation, - ajax_nonce = jQuery.now(), - - ajax_rquery = /\?/, - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - - // Keep a copy of the old load method - _load = jQuery.fn.load, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat("*"); - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var deep, key, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, response, type, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = url.slice( off, url.length ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){ - jQuery.fn[ type ] = function( fn ){ - return this.on( type, fn ); - }; -}); - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var // Cross-domain detection vars - parts, - // Loop variable - i, - // URL without anti-cache param - cacheURL, - // Response headers as string - responseHeadersString, - // timeout handle - timeoutTimer, - - // To know if global events are to be dispatched - fireGlobals, - - transport, - // Response headers - responseHeaders, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - var firstDataType, ct, finalDataType, type, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and global -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - s.global = false; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function(s) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - - var script, - head = document.head || jQuery("head")[0] || document.documentElement; - - return { - - send: function( _, callback ) { - - script = document.createElement("script"); - - script.async = true; - - if ( s.scriptCharset ) { - script.charset = s.scriptCharset; - } - - script.src = s.url; - - // Attach handlers for all browsers - script.onload = script.onreadystatechange = function( _, isAbort ) { - - if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { - - // Handle memory leak in IE - script.onload = script.onreadystatechange = null; - - // Remove the script - if ( script.parentNode ) { - script.parentNode.removeChild( script ); - } - - // Dereference the script - script = null; - - // Callback if not abort - if ( !isAbort ) { - callback( 200, "success" ); - } - } - }; - - // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending - // Use native DOM manipulation to avoid our domManip AJAX trickery - head.insertBefore( script, head.firstChild ); - }, - - abort: function() { - if ( script ) { - script.onload( undefined, true ); - } - } - }; - } -}); -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); -var xhrCallbacks, xhrSupported, - xhrId = 0, - // #5280: Internet Explorer will keep connections alive if we don't abort on unload - xhrOnUnloadAbort = window.ActiveXObject && function() { - // Abort all pending requests - var key; - for ( key in xhrCallbacks ) { - xhrCallbacks[ key ]( undefined, true ); - } - }; - -// Functions to create xhrs -function createStandardXHR() { - try { - return new window.XMLHttpRequest(); - } catch( e ) {} -} - -function createActiveXHR() { - try { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } catch( e ) {} -} - -// Create the request object -// (This is still attached to ajaxSettings for backward compatibility) -jQuery.ajaxSettings.xhr = window.ActiveXObject ? - /* Microsoft failed to properly - * implement the XMLHttpRequest in IE7 (can't request local files), - * so we use the ActiveXObject when it is available - * Additionally XMLHttpRequest can be disabled in IE7/IE8 so - * we need a fallback. - */ - function() { - return !this.isLocal && createStandardXHR() || createActiveXHR(); - } : - // For all other browsers, use the standard XMLHttpRequest object - createStandardXHR; - -// Determine support properties -xhrSupported = jQuery.ajaxSettings.xhr(); -jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -xhrSupported = jQuery.support.ajax = !!xhrSupported; - -// Create transport if the browser can provide an xhr -if ( xhrSupported ) { - - jQuery.ajaxTransport(function( s ) { - // Cross domain only allowed if supported through XMLHttpRequest - if ( !s.crossDomain || jQuery.support.cors ) { - - var callback; - - return { - send: function( headers, complete ) { - - // Get a new xhr - var handle, i, - xhr = s.xhr(); - - // Open the socket - // Passing null username, generates a login popup on Opera (#2865) - if ( s.username ) { - xhr.open( s.type, s.url, s.async, s.username, s.password ); - } else { - xhr.open( s.type, s.url, s.async ); - } - - // Apply custom fields if provided - if ( s.xhrFields ) { - for ( i in s.xhrFields ) { - xhr[ i ] = s.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( s.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( s.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !s.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Need an extra try/catch for cross domain requests in Firefox 3 - try { - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - } catch( err ) {} - - // Do send the request - // This may raise an exception which is actually - // handled in jQuery.ajax (so no try/catch here) - xhr.send( ( s.hasContent && s.data ) || null ); - - // Listener - callback = function( _, isAbort ) { - var status, responseHeaders, statusText, responses; - - // Firefox throws exceptions when accessing properties - // of an xhr when a network error occurred - // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) - try { - - // Was never called and is aborted or complete - if ( callback && ( isAbort || xhr.readyState === 4 ) ) { - - // Only called once - callback = undefined; - - // Do not keep as active anymore - if ( handle ) { - xhr.onreadystatechange = jQuery.noop; - if ( xhrOnUnloadAbort ) { - delete xhrCallbacks[ handle ]; - } - } - - // If it's an abort - if ( isAbort ) { - // Abort it manually if needed - if ( xhr.readyState !== 4 ) { - xhr.abort(); - } - } else { - responses = {}; - status = xhr.status; - responseHeaders = xhr.getAllResponseHeaders(); - - // When requesting binary data, IE6-9 will throw an exception - // on any attempt to access responseText (#11426) - if ( typeof xhr.responseText === "string" ) { - responses.text = xhr.responseText; - } - - // Firefox throws an exception when accessing - // statusText for faulty cross-domain requests - try { - statusText = xhr.statusText; - } catch( e ) { - // We normalize with Webkit giving an empty statusText - statusText = ""; - } - - // Filter status for non standard behaviors - - // If the request is local and we have data: assume a success - // (success with no data won't get notified, that's the best we - // can do given current implementations) - if ( !status && s.isLocal && !s.crossDomain ) { - status = responses.text ? 200 : 404; - // IE - #1450: sometimes returns 1223 when it should be 204 - } else if ( status === 1223 ) { - status = 204; - } - } - } - } catch( firefoxAccessException ) { - if ( !isAbort ) { - complete( -1, firefoxAccessException ); - } - } - - // Call complete if needed - if ( responses ) { - complete( status, statusText, responses, responseHeaders ); - } - }; - - if ( !s.async ) { - // if we're in sync mode we fire the callback - callback(); - } else if ( xhr.readyState === 4 ) { - // (IE6 & IE7) if it's in cache and has been - // retrieved directly we need to fire the callback - setTimeout( callback ); - } else { - handle = ++xhrId; - if ( xhrOnUnloadAbort ) { - // Create the active xhrs callbacks list if needed - // and attach the unload handler - if ( !xhrCallbacks ) { - xhrCallbacks = {}; - jQuery( window ).unload( xhrOnUnloadAbort ); - } - // Add to list of active xhrs callbacks - xhrCallbacks[ handle ] = callback; - } - xhr.onreadystatechange = callback; - } - }, - - abort: function() { - if ( callback ) { - callback( undefined, true ); - } - } - }; - } - }); -} -var fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - }] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // we're done with this property - return tween; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = jQuery._data( elem, "fxshow" ); - - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE does not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - if ( jQuery.css( elem, "display" ) === "inline" && - jQuery.css( elem, "float" ) === "none" ) { - - // inline-level elements accept inline-block; - // block-level elements need to be inline with layout - if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { - style.display = "inline-block"; - - } else { - style.zoom = 1; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - if ( !jQuery.support.shrinkWrapBlocks ) { - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - } - - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - continue; - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = jQuery._data( elem, "fxshow", {} ); - } - - // store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - jQuery._removeData( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - } -} - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 -// Panic based approach to setting things on disconnected nodes - -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || jQuery._data( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = jQuery._data( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = jQuery._data( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // enable finishing flag on private data - data.finish = true; - - // empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // turn off finishing flag - delete data.finish; - }); - } -}); - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - attrs = { height: type }, - i = 0; - - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth? 1 : 0; - for( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p*Math.PI ) / 2; - } -}; - -jQuery.timers = []; -jQuery.fx = Tween.prototype.init; -jQuery.fx.tick = function() { - var timer, - timers = jQuery.timers, - i = 0; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - if ( timer() && jQuery.timers.push( timer ) ) { - jQuery.fx.start(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; - }; -} -jQuery.fn.offset = function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - box = { top: 0, left: 0 }, - elem = this[ 0 ], - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== core_strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ), - left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 ) - }; -}; - -jQuery.offset = { - - setOffset: function( elem, options, i ) { - var position = jQuery.css( elem, "position" ); - - // set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - var curElem = jQuery( elem ), - curOffset = curElem.offset(), - curCSSTop = jQuery.css( elem, "top" ), - curCSSLeft = jQuery.css( elem, "left" ), - calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, - props = {}, curPosition = {}, curTop, curLeft; - - // need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - } -}; - - -jQuery.fn.extend({ - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - parentOffset = { top: 0, left: 0 }, - elem = this[ 0 ]; - - // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // we assume that getBoundingClientRect is available when computed position is fixed - offset = elem.getBoundingClientRect(); - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - // note: when an element has margin: auto the offsetLeft and marginLeft - // are the same in Safari causing offset.left to incorrectly be 0 - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - return offsetParent || docElem; - }); - } -}); - - -// Create scrollLeft and scrollTop methods -jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { - var top = /Y/.test( prop ); - - jQuery.fn[ method ] = function( val ) { - return jQuery.access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? (prop in win) ? win[ prop ] : - win.document.documentElement[ method ] : - elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : jQuery( win ).scrollLeft(), - top ? val : jQuery( win ).scrollTop() - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? - elem : - elem.nodeType === 9 ? - elem.defaultView || elem.parentWindow : - false; -} -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return jQuery.access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest - // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); -// Limit scope pollution from any deprecated API -// (function() { - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - -// })(); -if ( typeof module === "object" && module && typeof module.exports === "object" ) { - // Expose jQuery as module.exports in loaders that implement the Node - // module pattern (including browserify). Do not create the global, since - // the user will be storing it themselves locally, and globals are frowned - // upon in the Node module world. - module.exports = jQuery; -} else { - // Otherwise expose jQuery to the global object as usual - window.jQuery = window.$ = jQuery; - - // Register as a named AMD module, since jQuery can be concatenated with other - // files that may use define, but not via a proper concatenation script that - // understands anonymous AMD modules. A named AMD is safest and most robust - // way to register. Lowercase jquery is used because AMD module names are - // derived from file names, and jQuery is normally delivered in a lowercase - // file name. Do this after creating the global so that if an AMD module wants - // to call noConflict to hide this version of jQuery, it will work. - if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function () { return jQuery; } ); - } -} - -})( window ); - -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document){ - var _jQuery = window.jQuery.noConflict(true); - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module) { - return function () { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - stringify = function (obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return JSON.stringify(obj); - } - return obj; - }, - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function (match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - arg = templateArgs[index + 2]; - if (typeof arg === 'function') { - return arg.toString().replace(/ ?\{[\s\S]*$/, ''); - } else if (typeof arg === 'undefined') { - return 'undefined'; - } else if (typeof arg !== 'string') { - return toJson(arg); - } - return arg; - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.2.16/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + - encodeURIComponent(stringify(arguments[i])); - } - - return new Error(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global - -angular, - -msie, - -jqLite, - -jQuery, - -slice, - -push, - -toString, - -ngMinErr, - -_angular, - -angularModule, - -nodeName_, - -uid, - - -lowercase, - -uppercase, - -manualLowercase, - -manualUppercase, - -nodeName_, - -isArrayLike, - -forEach, - -sortedKeys, - -forEachSorted, - -reverseParams, - -nextUid, - -setHashKey, - -extend, - -int, - -inherit, - -noop, - -identity, - -valueFn, - -isUndefined, - -isDefined, - -isObject, - -isString, - -isNumber, - -isDate, - -isArray, - -isFunction, - -isRegExp, - -isWindow, - -isScope, - -isFile, - -isBlob, - -isBoolean, - -trim, - -isElement, - -makeMap, - -map, - -size, - -includes, - -indexOf, - -arrayRemove, - -isLeafNode, - -copy, - -shallowCopy, - -equals, - -csp, - -concat, - -sliceArgs, - -bind, - -toJsonReplacer, - -toJson, - -fromJson, - -toBoolean, - -startingTag, - -tryDecodeURIComponent, - -parseKeyValue, - -toKeyValue, - -encodeUriSegment, - -encodeUriQuery, - -angularInit, - -bootstrap, - -snake_case, - -bindJQuery, - -assertArg, - -assertArgFn, - -assertNotHasOwnProperty, - -getter, - -getBlockElements, - -hasOwnProperty, - -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var /** holds major version number for IE or NaN for real browsers */ - msie, - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - - _angular = window.angular, - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - nodeName_, - uid = ['0', '0', '0']; - -/** - * IE 11 changed the format of the UserAgent string. - * See http://msdn.microsoft.com/en-us/library/ms537503.aspx - */ -msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -if (isNaN(msie)) { - msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -} - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === 1 && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` - * is the value of an object property or an array element and `key` is the object property key or - * array element index. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key){ - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ -function forEach(obj, iterator, context) { - var key; - if (obj) { - if (isFunction(obj)){ - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context); - } else if (isArrayLike(obj)) { - for (key = 0; key < obj.length; key++) - iterator.call(context, obj[key], key); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys.sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for ( var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric - * characters such as '012ABC'. The reason why we are not using simply a number counter is that - * the number string gets longer over time, and it can also overflow, where as the nextId - * will grow much slower, it is a string, and it will never overflow. - * - * @returns {string} an unique alpha-numeric string - */ -function nextUid() { - var index = uid.length; - var digit; - - while(index) { - index--; - digit = uid[index].charCodeAt(0); - if (digit == 57 /*'9'*/) { - uid[index] = 'A'; - return uid.join(''); - } - if (digit == 90 /*'Z'*/) { - uid[index] = '0'; - } else { - uid[index] = String.fromCharCode(digit + 1); - return uid.join(''); - } - } - uid.unshift('0'); - return uid.join(''); -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @function - * - * @description - * Extends the destination object `dst` by copying all of the properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - forEach(arguments, function(obj){ - if (obj !== dst) { - forEach(obj, function(value, key){ - dst[key] = value; - }); - } - }); - - setHashKey(dst,h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(new (extend(function() {}, {prototype:parent}))(), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value){return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value){return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value){return value != null && typeof value === 'object';} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value){return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value){return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value){ - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(value) { - return toString.call(value) === '[object Array]'; -} - - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value){return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -var trim = (function() { - // native trim is way faster: http://jsperf.com/angular-trim-test - // but IE doesn't have it... :-( - // TODO: we should move this into IE/ES5 polyfill - if (!String.prototype.trim) { - return function(value) { - return isString(value) ? value.replace(/^\s\s*/, '').replace(/\s\s*$/, '') : value; - }; - } - return function(value) { - return isString(value) ? value.trim() : value; - }; -})(); - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str){ - var obj = {}, items = str.split(","), i; - for ( i = 0; i < items.length; i++ ) - obj[ items[i] ] = true; - return obj; -} - - -if (msie < 9) { - nodeName_ = function(element) { - element = element.nodeName ? element : element[0]; - return (element.scopeName && element.scopeName != 'HTML') - ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; - }; -} else { - nodeName_ = function(element) { - return element.nodeName ? element.nodeName : element[0].nodeName; - }; -} - - -function map(obj, iterator, context) { - var results = []; - forEach(obj, function(value, index, list) { - results.push(iterator.call(context, value, index, list)); - }); - return results; -} - - -/** - * @description - * Determines the number of elements in an array, the number of properties an object has, or - * the length of a string. - * - * Note: This function is used to augment the Object type in Angular expressions. See - * {@link angular.Object} for more information about Angular arrays. - * - * @param {Object|Array|string} obj Object, array, or string to inspect. - * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object - * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array. - */ -function size(obj, ownPropsOnly) { - var count = 0, key; - - if (isArray(obj) || isString(obj)) { - return obj.length; - } else if (isObject(obj)){ - for (key in obj) - if (!ownPropsOnly || obj.hasOwnProperty(key)) - count++; - } - - return count; -} - - -function includes(array, obj) { - return indexOf(array, obj) != -1; -} - -function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for (var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; -} - -function arrayRemove(array, value) { - var index = indexOf(array, value); - if (index >=0) - array.splice(index, 1); - return value; -} - -function isLeafNode (node) { - if (node) { - switch (node.nodeName) { - case "OPTION": - case "PRE": - case "TITLE": - return true; - } - } - return false; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for array) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="Controller"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - function Controller($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - } - </script> - </file> - </example> - */ -function copy(source, destination){ - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, []); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source); - } else if (isObject(source)) { - destination = copy(source, {}); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - if (isArray(source)) { - destination.length = 0; - for ( var i = 0; i < source.length; i++) { - destination.push(copy(source[i])); - } - } else { - var h = destination.$$hashKey; - forEach(destination, function(value, key){ - delete destination[key]; - }); - for ( var key in source) { - destination[key] = copy(source[key]); - } - setHashKey(destination,h); - } - } - return destination; -} - -/** - * Create a shallow copy of an object - */ -function shallowCopy(src, dst) { - dst = dst || {}; - - for(var key in src) { - // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src - // so we don't need to worry about using our custom hasOwnProperty here - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavasScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for(key=0; key<length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - return isDate(o2) && o1.getTime() == o2.getTime(); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for(key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for(key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - - -function csp() { - return (document.securityPolicy && document.securityPolicy.isActive) || - (document.querySelector && - !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]'))); -} - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0))) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace. - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized thingy. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -function toBoolean(value) { - if (typeof value === 'function') { - value = true; - } else if (value && value.length !== 0) { - var v = lowercase("" + value); - value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); - } else { - value = false; - } - return value; -} - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch(e) {} - // As Per DOM Standards - var TEXT_NODE = 3; - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch(e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch(e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue){ - if ( keyValue ) { - key_value = keyValue.split('='); - key = tryDecodeURIComponent(key_value[0]); - if ( isDefined(key) ) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!obj[key]) { - obj[key] = val; - } else if(isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common, way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - */ -function angularInit(element, bootstrap) { - var elements = [element], - appElement, - module, - names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], - NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; - - function append(element) { - element && elements.push(element); - } - - forEach(names, function(name) { - names[name] = true; - append(document.getElementById(name)); - name = name.replace(':', '\\:'); - if (element.querySelectorAll) { - forEach(element.querySelectorAll('.' + name), append); - forEach(element.querySelectorAll('.' + name + '\\:'), append); - forEach(element.querySelectorAll('[' + name + ']'), append); - } - }); - - forEach(elements, function(element) { - if (!appElement) { - var className = ' ' + element.className + ' '; - var match = NG_APP_CLASS_REGEXP.exec(className); - if (match) { - appElement = element; - module = (match[2] || '').replace(/\s+/g, ','); - } else { - forEach(element.attributes, function(attr) { - if (!appElement && names[attr.name]) { - appElement = element; - module = attr.value; - } - }); - } - } - }); - if (appElement) { - bootstrap(appElement, module ? [module] : []); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * <example name="multi-bootstrap" module="multi-bootstrap"> - * <file name="index.html"> - * <script src="../../../angular.js"></script> - * <div ng-controller="BrokenTable"> - * <table> - * <tr> - * <th ng-repeat="heading in headings">{{heading}}</th> - * </tr> - * <tr ng-repeat="filling in fillings"> - * <td ng-repeat="fill in filling">{{fill}}</td> - * </tr> - * </table> - * </div> - * </file> - * <file name="controller.js"> - * var app = angular.module('multi-bootstrap', []) - * - * .controller('BrokenTable', function($scope) { - * $scope.headings = ['One', 'Two', 'Three']; - * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; - * }); - * </file> - * <file name="protractor.js" type="protractor"> - * it('should only insert one table cell for each item in $scope.fillings', function() { - * expect(element.all(by.css('td')).count()) - * .toBe(9); - * }); - * </file> - * </example> - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a run block. - * See: {@link angular.module modules} - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules) { - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - modules.unshift('ng'); - var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', - function(scope, element, compile, injector, animate) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator){ - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -function bindJQuery() { - // bind to jQuery if present; - jQuery = window.jQuery; - // reset to jQuery or default to us. - if (jQuery) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - // Method signature: - // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) - jqLitePatchJQueryRemove('remove', true, true, false); - jqLitePatchJQueryRemove('empty', false, false, false); - jqLitePatchJQueryRemove('html', false, false, true); - } else { - jqLite = JQLite; - } - angular.element = jqLite; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {DOMElement} object containing the elements - */ -function getBlockElements(nodes) { - var startNode = nodes[0], - endNode = nodes[nodes.length - 1]; - if (startNode === endNode) { - return jqLite(startNode); - } - - var element = startNode; - var elements = [element]; - - do { - element = element.nextSibling; - if (!element) break; - elements.push(element); - } while (element !== endNode); - - return jqLite(elements); -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. -<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If ->>>>>* unspecified then the module is being retrieved for further configuration. - * @param {Function} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke'); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * @returns {Array.<string>} List of module names which must be loaded before this module. - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * @returns {string} Name of the module. - * @description - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod) { - return function() { - invokeQueue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global - angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - requiredDirective, - requiredDirective, - ngValueDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.2.16', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 2, - dot: 16, - codeName: 'badger-enumeration' -}; - - -function publishExternalAPI(angular){ - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop':noop, - 'bind':bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity':identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - '$$minErr': minErr, - '$$csp': csp - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - required: requiredDirective, - ngRequired: requiredDirective, - ngValue: ngValueDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback : $$AsyncCallbackProvider - }); - } - ]); -} - -/* global - - -JQLitePrototype, - -addEventListenerFn, - -removeEventListenerFn, - -BOOLEAN_ATTR -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - * - [`data()`](http://api.jquery.com/data/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng-' + new Date().getTime(), - jqId = 1, - addEventListenerFn = (window.document.addEventListener - ? function(element, type, fn) {element.addEventListener(type, fn, false);} - : function(element, type, fn) {element.attachEvent('on' + type, fn);}), - removeEventListenerFn = (window.document.removeEventListener - ? function(element, type, fn) {element.removeEventListener(type, fn, false); } - : function(element, type, fn) {element.detachEvent('on' + type, fn); }); - -/* - * !!! This is an undocumented "private" function !!! - */ -var jqData = JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -///////////////////////////////////////////// -// jQuery mutation patch -// -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a -// $destroy event on all DOM nodes being removed. -// -///////////////////////////////////////////// - -function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { - var originalJqFn = jQuery.fn[name]; - originalJqFn = originalJqFn.$original || originalJqFn; - removePatch.$original = originalJqFn; - jQuery.fn[name] = removePatch; - - function removePatch(param) { - // jshint -W040 - var list = filterElems && param ? [this.filter(param)] : [this], - fireEvent = dispatchThis, - set, setIndex, setLength, - element, childIndex, childLength, children; - - if (!getterIfNoArguments || param != null) { - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); - } - } - } - } - return originalJqFn.apply(this, arguments); - } -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteBuildFragment(html, context) { - var elem, tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i, j, jj; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - tmp = fragment.appendChild(context.createElement('div')); - // Convert html into DOM nodes - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = '<div>&#160;</div>' + - wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - tmp.removeChild(tmp.firstChild); - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - return nodes; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - return jqLiteBuildFragment(html, context); -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - if (isString(element)) { - element = trim(element); - } - if (!(this instanceof JQLite)) { - if (isString(element) && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (isString(element)) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - var fragment = jqLite(document.createDocumentFragment()); - fragment.append(this); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element){ - jqLiteRemoveData(element); - for ( var i = 0, children = element.childNodes || []; i < children.length; i++) { - jqLiteDealoc(children[i]); - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!handle) return; //no listeners registered - - if (isUndefined(type)) { - forEach(events, function(eventHandler, type) { - removeEventListenerFn(element, type, eventHandler); - delete events[type]; - }); - } else { - forEach(type.split(' '), function(type) { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type] || [], fn); - } - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete jqCache[expandoId].data[name]; - return; - } - - if (expandoStore.handle) { - expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - jqLiteOff(element); - } - delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. - } -} - -function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId || -1]; - - if (isDefined(value)) { - if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {}; - } - expandoStore[key] = value; - } else { - return expandoStore && expandoStore[key]; - } -} - -function jqLiteData(element, key, value) { - var data = jqLiteExpandoStore(element, 'data'), - isSetter = isDefined(value), - keyDefined = !isSetter && isDefined(key), - isSimpleGetter = keyDefined && !isObject(key); - - if (!data && !isSimpleGetter) { - jqLiteExpandoStore(element, 'data', data = {}); - } - - if (isSetter) { - data[key] = value; - } else { - if (keyDefined) { - if (isSimpleGetter) { - // don't create data in this case. - return data && data[key]; - } else { - extend(data, key); - } - } else { - return data; - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf( " " + selector + " " ) > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - -function jqLiteAddNodes(root, elements) { - if (elements) { - elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements)) - ? elements - : [ elements ]; - for(var i=0; i < elements.length; i++) { - root.push(elements[i]); - } - } -} - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - element = jqLite(element); - - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if(element[0].nodeType == 9) { - element = element.find('html'); - } - var names = isArray(name) ? name : [name]; - - while (element.length) { - var node = element[0]; - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = element.data(names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = jqLite(node.parentNode || (node.nodeType === 11 && node.host)); - } -} - -function jqLiteEmpty(element) { - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document already is loaded - if (document.readyState === 'complete'){ - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e){ value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[uppercase(value)] = true; -}); - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; -} - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element,name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - var val; - - if (msie <= 8) { - // this is some IE specific weirdness that jQuery 1.6.4 does not sure why - val = element.currentStyle && element.currentStyle[name]; - if (val === '') val = 'auto'; - } - - val = val || element.style[name]; - - if (msie <= 8) { - // jquery weirdness :-/ - val = (val === '') ? undefined : val; - } - - return val; - } - }, - - attr: function(element, name, value){ - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name)|| noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - var NODE_TYPE_TEXT_PROPERTY = []; - if (msie < 9) { - NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ - } else { - NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ - } - getText.$dv = ''; - return getText; - - function getText(element, value) { - var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; - if (isUndefined(value)) { - return textProp ? element[textProp] : ''; - } - element[textProp] = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (nodeName_(element) === 'SELECT' && element.multiple) { - var result = []; - forEach(element.options, function (option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name){ - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < this.length; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(this.length, 1) : this.length; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < this.length; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function (event, type) { - if (!event.preventDefault) { - event.preventDefault = function() { - event.returnValue = false; //ie - }; - } - - if (!event.stopPropagation) { - event.stopPropagation = function() { - event.cancelBubble = true; //ie - }; - } - - if (!event.target) { - event.target = event.srcElement || document; - } - - if (isUndefined(event.defaultPrevented)) { - var prevent = event.preventDefault; - event.preventDefault = function() { - event.defaultPrevented = true; - prevent.call(event); - }; - event.defaultPrevented = false; - } - - event.isDefaultPrevented = function() { - return event.defaultPrevented || event.returnValue === false; - }; - - // Copy event handlers in case event handlers array is modified during execution. - var eventHandlersCopy = shallowCopy(events[type || event.type] || []); - - forEach(eventHandlersCopy, function(fn) { - fn.call(element, event); - }); - - // Remove monkey-patched methods (IE), - // as they would cause memory leaks in IE8. - if (msie <= 8) { - // IE7/8 does not allow to delete property on native object - event.preventDefault = null; - event.stopPropagation = null; - event.isDefaultPrevented = null; - } else { - // It shouldn't affect normal browsers (native methods are defined on prototype). - delete event.preventDefault; - delete event.stopPropagation; - delete event.isDefaultPrevented; - } - }; - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - dealoc: jqLiteDealoc, - - on: function onFn(element, type, fn, unsupported){ - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!events) jqLiteExpandoStore(element, 'events', events = {}); - if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events)); - - forEach(type.split(' '), function(type){ - var eventFns = events[type]; - - if (!eventFns) { - if (type == 'mouseenter' || type == 'mouseleave') { - var contains = document.body.contains || document.body.compareDocumentPosition ? - function( a, b ) { - // jshint bitwise: false - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - events[type] = []; - - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; - - onFn(element, eventmap[type], function(event) { - var target = this, related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !contains(target, related)) ){ - handle(event, type); - } - }); - - } else { - addEventListenerFn(element, type, handle); - events[type] = []; - } - eventFns = events[type]; - } - eventFns.push(fn); - }); - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node){ - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element){ - if (element.nodeType === 1) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - forEach(new JQLite(node), function(child){ - if (element.nodeType === 1 || element.nodeType === 11) { - element.appendChild(child); - } - }); - }, - - prepend: function(element, node) { - if (element.nodeType === 1) { - var index = element.firstChild; - forEach(new JQLite(node), function(child){ - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode)[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: function(element) { - jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - forEach(new JQLite(newElement), function(node){ - parent.insertBefore(node, index.nextSibling); - index = node; - }); - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className){ - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - - next: function(element) { - if (element.nextElementSibling) { - return element.nextElementSibling; - } - - // IE8 doesn't have nextElementSibling - var elm = element.nextSibling; - while (elm != null && elm.nodeType !== 1) { - elm = elm.nextSibling; - } - return elm; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, eventName, eventData) { - var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; - - eventData = eventData || []; - - var event = [{ - preventDefault: noop, - stopPropagation: noop - }]; - - forEach(eventFns, function(fn) { - fn.apply(element, event.concat(eventData)); - }); - } -}, function(fn, name){ - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - for(var i=0; i < this.length; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj) { - var objType = typeof obj, - key; - - if (objType == 'object' && obj !== null) { - if (typeof (key = obj.$$hashKey) == 'function') { - // must invoke on object to keep the right this - key = obj.$$hashKey(); - } else if (key === undefined) { - key = obj.$$hashKey = nextUid(); - } - } else { - key = obj; - } - - return objType + ':' + key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array){ - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @function - * - * @description - * Creates an injector function that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @returns {function()} Injector function. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document){ - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); -function annotate(fn) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn == 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ - arg.replace(FN_ARG, function(all, underscore, name){ - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * @function - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector){ - * return $injector; - * }).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with - * minification, and obfuscation tools since these tools change the argument names. - * - * ## `$inject` Annotation - * By adding a `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exist. - * - * @param {string} Name of the service to query. - * @returns {boolean} returns true if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function invokes the new - * operator and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc object - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad) { - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function() { - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(servicename) { - var provider = providerInjector.get(servicename + providerSuffix); - return instanceInjector.invoke(provider.$get, provider); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val)); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad){ - var runBlocks = [], moduleFn, invokeQueue, i, ii; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - - for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { - var invokeArgs = invokeQueue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals){ - var args = [], - $inject = annotate(fn), - length, i, - key; - - for(i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key) - ); - } - if (!fn.$inject) { - // this means that we must be an array. - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals) { - var Constructor = function() {}, - instance, returnedValue; - - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype; - instance = new Constructor(); - returnedValue = invoke(Type, instance, locals); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -/** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks current value of `$location.hash()` and scroll to related element, - * according to rules specified in - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor. - * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`. - * - * @example - <example> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollCtrl"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - function ScrollCtrl($scope, $location, $anchorScroll) { - $scope.gotoBottom = function (){ - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - } - </file> - <file name="style.css"> - #scrollArea { - height: 350px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // helper function to get first anchor from a NodeList - // can't use filter.filter, as it accepts only instances of Array - // and IE can't convert NodeList to an array using [].slice - // TODO(vojta): use filter if we change it to accept lists as well - function getFirstAnchor(list) { - var result = null; - forEach(list, function(element) { - if (!result && lowercase(element.nodeName) === 'a') result = element; - }); - return result; - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) $window.scrollTo(0, 0); - - // element with given id - else if ((elm = document.getElementById(hash))) elm.scrollIntoView(); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView(); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') $window.scrollTo(0, 0); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction() { - $rootScope.$evalAsync(scroll); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if(arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) { - - function async(fn) { - fn && $$asyncCallback(fn); - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - - /** - * - * @ngdoc method - * @name $animate#enter - * @function - * @description Inserts the element into the DOM either after the `after` element or within - * the `parent` element. Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {Function=} done callback function that will be called after the element has been - * inserted into the DOM - */ - enter : function(element, parent, after, done) { - if (after) { - after.after(element); - } else { - if (!parent || !parent[0]) { - parent = after.parent(); - } - parent.append(element); - } - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @function - * @description Removes the element from the DOM. Once complete, the done() callback will be - * fired (if provided). - * @param {DOMElement} element the element which will be removed from the DOM - * @param {Function=} done callback function that will be called after the element has been - * removed from the DOM - */ - leave : function(element, done) { - element.remove(); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. Once complete, the - * done() callback will be fired (if provided). - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {Function=} done the callback function (if provided) that will be fired after the - * element has been moved to its new position - */ - move : function(element, parent, after, done) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - this.enter(element, parent, after, done); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @function - * @description Adds the provided className CSS class value to the provided element. Once - * complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been added to the element - */ - addClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteAddClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @function - * @description Removes the provided className CSS class value from the provided element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been removed from the element - */ - removeClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteRemoveClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, done) { - forEach(element, function (element) { - jqLiteAddClass(element, add); - jqLiteRemoveClass(element, remove); - }); - async(done); - }, - - enabled : noop - }; - }]; -}]; - -function $$AsyncCallbackProvider(){ - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {function()} XHR XMLHttpRequest constructor. - * @param {object} $log console.log or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while(outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn){ pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn){ pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var lastBrowserUrl = location.href, - baseElement = document.find('base'), - newLocation = null; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record ? - */ - self.url = function(url, replace) { - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - if (lastBrowserUrl == url) return; - lastBrowserUrl = url; - if ($sniffer.history) { - if (replace) history.replaceState(null, '', url); - else { - history.pushState(null, '', url); - // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462 - baseElement.attr('href', baseElement.attr('href')); - } - } else { - newLocation = url; - if (replace) { - location.replace(url); - } else { - location.href = url; - } - } - return self; - // getter - } else { - // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href - // methods not updating location.href synchronously. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return newLocation || location.href.replace(/%27/g,"'"); - } - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function fireUrlChange() { - newLocation = null; - if (lastBrowserUrl == self.url()) return; - - lastBrowserUrl = self.url(); - forEach(urlChangeListeners, function(listener) { - listener(self.url()); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); - // hashchange event - if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); - // polling - else self.addPollFn(fireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - /* global escape: false, unescape: false */ - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = escape(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '"+ name + - "' possibly not set or overflowed because it was too large ("+ - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = unescape(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = unescape(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider(){ - this.$get = ['$window', '$log', '$sniffer', '$document', - function( $window, $log, $sniffer, $document){ - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - $scope.cache.put(key, value); - $scope.keys.push(key); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the of the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be below the `ng-app` definition. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * replace: false, - * transclude: false, - * restrict: 'A', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression and to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. - * `function([scope], cloneLinkingFn)`. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the - * `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the default (attributes only) is used. - * - * * `E` - Element name: `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `template` - * replace the current element with the contents of the HTML. The replacement process - * migrates all of the attributes / classes from the old element to the new one. See the - * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive - * Directives Guide} for an example. - * - * You can specify `template` as a string representing the template or as a function which takes - * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and - * returns a string value representing the template. - * - * - * #### `templateUrl` - * Same as `template` but the template is loaded from the specified URL. Because - * the template loading is asynchronous the compilation/linking is suspended until the template - * is loaded. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - * specify where the template should be inserted. Defaults to `false`. - * - * * `true` - the template will replace the current element. - * * `false` - the template will replace the contents of the current element. - * - * - * #### `transclude` - * compile the content of the element and make it available to the directive. - * Typically used with {@link ng.directive:ngTransclude - * ngTransclude}. The advantage of transclusion is that the linking function receives a - * transclusion function which is pre-bound to the correct scope. In a typical setup the widget - * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate` - * scope. This makes it possible for the widget to have private state, and the transclusion to - * be bound to the parent (pre-`isolate`) scope. - * - * * `true` - transclude the content of the directive. - * * `'element'` - transclude the whole element including any directives defined at lower priority. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. Examples that require compile functions are - * directives that transform template DOM, such as {@link - * api/ng.directive:ngRepeat ngRepeat}, or load the contents - * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The - * compile function takes the following arguments. - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. This is the same as the `$transclude` - * parameter of directive controllers. - * `function([scope], cloneLinkingFn)`. - * - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. - * - * <a name="Attributes"></a> - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * Below is an example using `$compileProvider`. - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compile"> - <file name="index.html"> - <script> - angular.module('compile', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }) - }); - - function Ctrl($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - } - </script> - <div ng-controller="Ctrl"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives. - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * @function - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - /** - * @ngdoc method - * @name $compileProvider#directive - * @function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'A'; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attr) { - this.$$element = element; - this.$attr = attr || {}; - }; - - Attributes.prototype = { - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass : function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - var toRemove = tokenDifference(oldClasses, newClasses); - - if(toAdd.length === 0) { - $animate.removeClass(this.$$element, toRemove); - } else if(toRemove.length === 0) { - $animate.addClass(this.$$element, toAdd); - } else { - $animate.setClass(this.$$element, toAdd, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var booleanKey = getBooleanAttrName(this.$$element[0], key), - normalizedVal, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // sanitize a[href] and img[src] values - if ((nodeName === 'A' && key === 'href') || - (nodeName === 'IMG' && key === 'src')) { - this[key] = value = $$sanitizeUri(value, key === 'src'); - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[key], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#Attributes Directives} guide for more info. - * @returns {function()} the `fn` parameter. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = {})), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - return fn; - } - }; - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index){ - if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ - assertArg(scope, 'scope'); - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - var $linkNode = cloneConnectFn - ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! - : $compileNodes; - - forEach(transcludeControllers, function(instance, name) { - $linkNode.data('$' + name + 'Controller', instance); - }); - - // Attach scope only to non-text nodes. - for(var i = 0, ii = $linkNode.length; i<ii; i++) { - var node = $linkNode[i], - nodeType = node.nodeType; - if (nodeType === 1 /* element */ || nodeType === 9 /* document */) { - $linkNode.eq(i).data('$scope', scope); - } - } - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); - return $linkNode; - }; - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch(e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - safeAddClass(jqLite(nodeList[i]), 'ng-scope'); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); - - linkFns.push(nodeLinkFn, childLinkFn); - linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; - - // copy nodeList so that linking doesn't break due to live list updates. - var nodeListLength = nodeList.length, - stableNodeList = new Array(nodeListLength); - for (i = 0; i < nodeListLength; i++) { - stableNodeList[i] = nodeList[i]; - } - - for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) { - node = stableNodeList[n]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - $node = jqLite(node); - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - $node.data('$scope', childScope); - } else { - childScope = scope; - } - childTranscludeFn = nodeLinkFn.transclude; - if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, - createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) - ); - } else { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); - } - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn) { - return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { - var scopeCreated = false; - - if (!transcludedScope) { - transcludedScope = scope.$new(); - transcludedScope.$$transcluded = true; - scopeCreated = true; - } - - var clone = transcludeFn(transcludedScope, cloneFn, controllers); - if (scopeCreated) { - clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); - } - return clone; - }; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch(nodeType) { - case 1: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - if (!msie || msie >= 8 || attr.specified) { - name = attr.name; - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (NG_ATTR_BINDING.test(ngAttrName)) { - name = snake_case(ngAttrName.substr(6), '-'); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - attrs[nName] = value = trim(attr.value); - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - // use class as directive - className = node.className; - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case 3: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case 8: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - var startNode = node; - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == 1 /** Element **/) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for(var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - newScopeDirective = newScopeDirective || directive; - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - if (isObject(directiveValue)) { - newIsolateScopeDirective = directive; - } - } - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = groupScan(compileNode, attrStart, attrEnd); - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = jqLite(directiveValue); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - if (isString(require)) { - while((value = require.charAt(0)) == '^' || value == '?') { - require = require.substr(1); - if (value == '^') { - retrievalMethod = 'inheritedData'; - } - optional = optional || value == '?'; - } - value = null; - - if (elementControllers && retrievalMethod === 'data') { - value = elementControllers[require]; - } - value = value || $element[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; - - if (compileNode === linkNode) { - attrs = templateAttrs; - } else { - attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); - } - $element = attrs.$$element; - - if (newIsolateScopeDirective) { - var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; - var $linkNode = jqLite(linkNode); - - isolateScope = scope.$new(true); - - if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { - $linkNode.data('$isolateScope', isolateScope) ; - } else { - $linkNode.data('$isolateScopeNoTemplate', isolateScope); - } - - - - safeAddClass($linkNode, 'ng-isolate-scope'); - - forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP) || [], - attrName = match[3] || scopeName, - optional = (match[2] == '?'), - mode = match[1], // @, =, or & - lastValue, - parentGet, parentSet, compare; - - isolateScope.$$isolateBindings[scopeName] = mode + attrName; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateScope[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if( attrs[attrName] ) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateScope[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a,b) { return a === b; }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateScope[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateScope[scopeName] = parentGet(scope); - isolateScope.$watch(function parentValueWatch() { - var parentValue = parentGet(scope); - if (!compare(parentValue, isolateScope[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateScope[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateScope[scopeName]); - } - } - return lastValue = parentValue; - }, null, parentGet.literal); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateScope[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - - default: - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - newIsolateScopeDirective.name, scopeName, definition); - } - }); - } - transcludeFn = boundTranscludeFn && controllersBoundTransclude; - if (controllerDirectives) { - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals); - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance); - } - - if (directive.controllerAs) { - locals.$scope[directive.controllerAs] = controllerInstance; - } - }); - } - - // PRELINKING - for(i = 0, ii = preLinkFns.length; i < ii; i++) { - try { - linkFn = preLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for(i = postLinkFns.length - 1; i >= 0; i--) { - try { - linkFn = postLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // This is the function that is injected as `$transclude`. - function controllersBoundTransclude(scope, cloneAttachFn) { - var transcludeControllers; - - // no scope passed - if (arguments.length < 2) { - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for(var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i<ii; i++) { - try { - directive = directives[i]; - if ( (maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch(e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key]) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl; - - $compileNode.empty(); - - $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). - success(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = jqLite(content); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - - while(linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transclude) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }). - error(function(response, code, headers, config) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - if (linkQueue) { - linkQueue.push(scope); - linkQueue.push(node); - linkQueue.push(rootElement); - linkQueue.push(boundTranscludeFn); - } else { - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: valueFn(function textInterpolateLinkFn(scope, node) { - var parent = node.parent(), - bindings = parent.data('$binding') || []; - bindings.push(interpolateFn); - safeAddClass(parent.data('$binding', bindings), 'ng-binding'); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }) - }); - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "FORM" && attrNormalizedName == "action") || - (tag != "IMG" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name) { - var interpolateFn = $interpolate(value, true); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "SELECT") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // we need to interpolate again, in case the attribute value has been updated - // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the - // actual attr value - attr[name] = interpolateFn(scope); - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if(name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - }]; -} - -var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * All of these will become 'myDirective': - * my:Directive - * my-directive - * x-my-directive - * data-my:directive - * - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * @returns {object} A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * check `window[constructor]` on the global `window` object - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals) { - var instance, match, constructor, identifier; - - if(isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || getter($window, constructor, true); - - assertArgFn(expression, constructor, true); - } - - instance = $injector.instantiate(expression, locals); - - if (identifier) { - if (!(locals && typeof locals.$scope == 'object')) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - constructor || expression.name, identifier); - } - - locals.$scope[identifier] = instance; - } - - return instance; - }; - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - function MainCtrl($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - } - </file> - </example> - */ -function $DocumentProvider(){ - this.$get = ['$window', function(window){ - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () { - * return function (exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/, - CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; - - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: copy(CONTENT_TYPE_APPLICATION_JSON), - put: copy(CONTENT_TYPE_APPLICATION_JSON), - patch: copy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - /** - * Are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - */ - var interceptorFactories = this.interceptors = []; - - /** - * For historical reasons, response interceptors are ordered by the order in which - * they are applied to the response. (This is the opposite of interceptorFactories) - */ - var responseInterceptorFactories = this.responseInterceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - forEach(responseInterceptorFactories, function(interceptorFactory, index) { - var responseFn = isString(interceptorFactory) - ? $injector.get(interceptorFactory) - : $injector.invoke(interceptorFactory); - - /** - * Response interceptors go before "around" interceptors (no real reason, just - * had to pick one.) But they are already reversed, so we can't use unshift, hence - * the splice. - */ - reversedInterceptors.splice(index, 0, { - response: function(response) { - return responseFn($q.when(response)); - }, - responseError: function(response) { - return responseFn($q.reject(response)); - } - }); - }); - - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * $http({method: 'GET', url: '/someUrl'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * # Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * To globally augment or override the default transforms, modify the - * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` - * properties. These properties are by default an array of transform functions, which allows you - * to `push` or `unshift` a new transformation function into the transformation chain. You can - * also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. These defaults - * are again available on the $http factory at run-time, which may be useful if you have run-time - * services you wish to be involved in your transformations. - * - * Similarly, to locally override the request/response transforms, augment the - * `transformRequest` and/or `transformResponse` properties of the configuration object passed - * into `$http`. - * - * - * # Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * # Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with http `config` object. The function is free to - * modify the `config` or create a new one. The function needs to return the `config` - * directly or as a promise. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` or create a new one. The function needs to return the `response` - * directly or as a promise. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config || $q.when(config); - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response || $q.when(response); - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * # Response interceptors (DEPRECATED) - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous preprocessing of received responses, it is desirable to be able to intercept - * responses for http requests before they are handed over to the application code that - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return function(promise) { - * return promise.then(function(response) { - * // do something on success - * return response; - * }, function(response) { - * // do something on error - * if (canRecover(response)) { - * return responseOrNewPromise - * } - * return $q.reject(response); - * }); - * } - * }); - * - * $httpProvider.responseInterceptors.push('myHttpInterceptor'); - * - * - * // register the interceptor via an anonymous factory - * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { - * return function(promise) { - * // same as above - * } - * }); - * ``` - * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **transformResponse** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example> -<file name="index.html"> - <div ng-controller="FetchCtrl"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - - it('should make a JSONP request to angularjs.org', function() { - sampleJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Super Hero!/); - }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - var config = { - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }; - var headers = mergeHeaders(requestConfig); - - extend(config, requestConfig); - config.headers = headers; - config.method = uppercase(config.method); - - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - - var serverRequest = function(config) { - headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(config.data)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData, headers).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while(chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, config.transformResponse) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // execute if header value is function - execHeaders(defHeaders); - execHeaders(reqHeaders); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - return reqHeaders; - - function execHeaders(headers) { - var headerContent; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - headers[header] = headerContent; - } else { - delete headers[header]; - } - } - }); - } - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // if we won't have the response in cache, send the request to the backend - if (isUndefined(cachedResp)) { - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - resolvePromise(response, status, headersString, statusText); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText : statusText - }); - } - - - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - v = toJson(v); - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if(parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - - - }]; -} - -function createXhr(method) { - //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest - //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest - //if it is available - if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) || - !window.XMLHttpRequest)) { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } else if (window.XMLHttpRequest) { - return new window.XMLHttpRequest(); - } - - throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - var ABORTED = -1; - - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - var status; - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, status || -2); - } - callbacks[callbackId] = angular.noop; - }); - } else { - - var xhr = createXhr(method); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - // In IE6 and 7, this might be called synchronously when xhr.send below is called and the - // response is in the cache. the promise api will ensure that to the app code the api is - // always async - xhr.onreadystatechange = function() { - // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by - // xhrs that are resolved while the app is in the background (see #5426). - // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before - // continuing - // - // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and - // Safari respectively. - if (xhr && xhr.readyState == 4) { - var responseHeaders = null, - response = null; - - if(status !== ABORTED) { - responseHeaders = xhr.getAllResponseHeaders(); - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - response = ('response' in xhr) ? xhr.response : xhr.responseText; - } - - completeRequest(callback, - status || xhr.status, - response, - responseHeaders, - xhr.statusText || ''); - } - }; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (timeout && timeout.then) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - status = ABORTED; - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - timeoutId && $browserDefer.cancel(timeoutId); - jsonpDone = xhr = null; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status === 1223 ? 204 : status; - statusText = statusText || ''; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - script.onreadystatechange = script.onload = script.onerror = null; - rawDocument.body.removeChild(script); - if (done) done(); - }; - - script.type = 'text/javascript'; - script.src = url; - - if (msie && msie <= 8) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) { - doneWrapper(); - } - }; - } else { - script.onload = script.onerror = function() { - doneWrapper(); - }; - } - - rawDocument.body.appendChild(script); - return doneWrapper; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * @function - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function DemoController() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value){ - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value){ - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length; - - /** - * @ngdoc service - * @name $interpolate - * @function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * * `context`: an object against which any expressions embedded in the strings are evaluated - * against. - * - */ - function $interpolate(text, mustHaveExpression, trustedContext) { - var startIndex, - endIndex, - index = 0, - parts = [], - length = text.length, - hasInterpolation = false, - fn, - exp, - concat = []; - - while(index < length) { - if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - (index != startIndex) && parts.push(text.substring(index, startIndex)); - parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); - fn.exp = exp; - index = endIndex + endSymbolLength; - hasInterpolation = true; - } else { - // we did not find anything, so we have to add the remainder to the parts array - (index != length) && parts.push(text.substring(index)); - index = length; - } - } - - if (!(length = parts.length)) { - // we added, nothing, must have been an empty string. - parts.push(''); - length = 1; - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && parts.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || hasInterpolation) { - concat.length = length; - fn = function(context) { - try { - for(var i = 0, ii = length, part; i<ii; i++) { - if (typeof (part = parts[i]) == 'function') { - part = part(context); - if (trustedContext) { - part = $sce.getTrusted(trustedContext, part); - } else { - part = $sce.valueOf(part); - } - if (part === null || isUndefined(part)) { - part = ''; - } else if (typeof part != 'string') { - part = toJson(part); - } - } - concat[i] = part; - } - return concat.join(''); - } - catch(err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - }; - fn.exp = text; - fn.parts = parts; - return fn; - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', - function($rootScope, $window, $q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="time"> - * <file name="index.html"> - * <script> - * function Ctrl2($scope,$interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * } - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * } - * - * angular.module('time', []) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time ofter the DOM element was removed. - * element.bind('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }); - * </script> - * - * <div> - * <div ng-controller="Ctrl2"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply); - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - short: 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { - var parsedUrl = urlResolve(absoluteUrl, appBase); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj, appBase) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl, appBase); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} newAbsoluteUrl HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, appBase); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$rewrite = function(url) { - var appUrl, prevAppUrl; - - if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { - prevAppUrl = appUrl; - if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { - return appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - return appBase + prevAppUrl; - } - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { - return appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - return appBaseNoFile; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' - ? beginsWith(hashPrefix, withoutBaseUrl) - : (this.$$html5) - ? withoutBaseUrl - : ''; - - if (!isString(withoutHashUrl)) { - throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, - hashPrefix); - } - parseAppUrl(withoutHashUrl, this, appBase); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName (path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/?.*?:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - /* - * The input URL intentionally contains a - * first path segment that ends with a colon. - */ - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$rewrite = function(url) { - if(stripHash(appBase) == stripHash(url)) { - return url; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$rewrite = function(url) { - var appUrl; - - if ( appBase == stripHash(url) ) { - return url; - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { - return appBase + hashPrefix + appUrl; - } else if ( appBaseNoFile === url + '/') { - return appBaseNoFile; - } - }; -} - - -LocationHashbangInHtml5Url.prototype = - LocationHashbangUrl.prototype = - LocationHtml5Url.prototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing ? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @param {string=} replace The path that will be changed - * @return {string} url - */ - url: function(url, replace) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1]) this.path(decodeURIComponent(match[1])); - if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * @param {string=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. Hash object may contain an array of values, which will be decoded as duplicates in - * the url. - * - * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a - * single search parameter. If `paramValue` is an array, it will set the parameter as a - * comma-separated value. If `paramValue` is `null`, the parameter will be deleted. - * - * @return {string} search - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search)) { - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * @param {string=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', identity), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider(){ - var hashPrefix = '', - html5Mode = false; - - /** - * @ngdoc property - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc property - * @name $locationProvider#html5Mode - * @description - * @param {boolean=} mode Use HTML5 strategy if available. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isDefined(mode)) { - html5Mode = mode; - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', - function( $rootScope, $browser, $sniffer, $rootElement) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode) { - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parse($location.$$rewrite(initialUrl)); - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (event.ctrlKey || event.metaKey || event.which == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (lowercase(elm[0].nodeName) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - var rewrittenUrl = $location.$$rewrite(absHref); - - if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { - event.preventDefault(); - if (rewrittenUrl != $browser.url()) { - // update location manually - $location.$$parse(rewrittenUrl); - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - window.angular['ff-684208-preventDefault'] = true; - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl) { - if ($location.absUrl() != newUrl) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - - $location.$$parse(newUrl); - if ($rootScope.$broadcast('$locationChangeStart', newUrl, - oldUrl).defaultPrevented) { - $location.$$parse(oldUrl); - $browser.url(oldUrl); - } else { - afterLocationChange(oldUrl); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - } - }); - - // update browser - var changeCounter = 0; - $rootScope.$watch(function $locationWatch() { - var oldUrl = $browser.url(); - var currentReplace = $location.$$replace; - - if (!changeCounter || oldUrl != $location.absUrl()) { - changeCounter++; - $rootScope.$evalAsync(function() { - if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl). - defaultPrevented) { - $location.$$parse(oldUrl); - } else { - $browser.url($location.absUrl(), currentReplace); - afterLocationChange(oldUrl); - } - }); - } - $location.$$replace = false; - - return changeCounter; - }); - - return $location; - - function afterLocationChange(oldUrl) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example> - <file name="script.js"> - function LogCtrl($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - } - </file> - <file name="index.html"> - <div ng-controller="LogCtrl"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider(){ - var debug = true, - self = this; - - /** - * @ngdoc property - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window){ - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function () { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); -var promiseWarningCache = {}; -var promiseWarning; - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor(alert("evil JS code")) -// -// We want to prevent this type of access. For the sake of performance, during the lexing phase we -// disallow any "dotted" access to any member named "constructor". -// -// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor -// while evaluating the expression, which is a stronger but more expensive test. Since reflective -// calls are expensive anyway, this is not such a big deal compared to static dereferencing. -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// A developer could foil the name check by aliasing the Function constructor under a different -// name on the scope. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. - -function ensureSafeMemberName(name, fullExpression) { - if (name === "constructor") { - throw $parseMinErr('isecfld', - 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.document && obj.location && obj.alert && obj.setInterval) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var OPERATORS = { - /* jshint bitwise : false */ - 'null':function(){return null;}, - 'true':function(){return true;}, - 'false':function(){return false;}, - undefined:noop, - '+':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b)?b:undefined;}, - '-':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - return (isDefined(a)?a:0)-(isDefined(b)?b:0); - }, - '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, - '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, - '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, - '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, - '=':noop, - '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, - '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, - '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, - '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, - '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);}, - '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);}, - '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);}, - '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);}, - '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);}, - '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);}, - '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);}, -// '|':function(self, locals, a,b){return a|b;}, - '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));}, - '!':function(self, locals, a){return !a(self, locals);} -}; -/* jshint bitwise: true */ -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function (options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function (text) { - this.text = text; - - this.index = 0; - this.ch = undefined; - this.lastCh = ':'; // can start regexp - - this.tokens = []; - - var token; - var json = []; - - while (this.index < this.text.length) { - this.ch = this.text.charAt(this.index); - if (this.is('"\'')) { - this.readString(this.ch); - } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(this.ch)) { - this.readIdent(); - // identifiers can only be if the preceding char was a { or , - if (this.was('{,') && json[0] === '{' && - (token = this.tokens[this.tokens.length - 1])) { - token.json = token.text.indexOf('.') === -1; - } - } else if (this.is('(){}[].,;:?')) { - this.tokens.push({ - index: this.index, - text: this.ch, - json: (this.was(':[,') && this.is('{[')) || this.is('}]:,') - }); - if (this.is('{[')) json.unshift(this.ch); - if (this.is('}]')) json.shift(); - this.index++; - } else if (this.isWhitespace(this.ch)) { - this.index++; - continue; - } else { - var ch2 = this.ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var fn = OPERATORS[this.ch]; - var fn2 = OPERATORS[ch2]; - var fn3 = OPERATORS[ch3]; - if (fn3) { - this.tokens.push({index: this.index, text: ch3, fn: fn3}); - this.index += 3; - } else if (fn2) { - this.tokens.push({index: this.index, text: ch2, fn: fn2}); - this.index += 2; - } else if (fn) { - this.tokens.push({ - index: this.index, - text: this.ch, - fn: fn, - json: (this.was('[,:') && this.is('+-')) - }); - this.index += 1; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - this.lastCh = this.ch; - } - return this.tokens; - }, - - is: function(chars) { - return chars.indexOf(this.ch) !== -1; - }, - - was: function(chars) { - return chars.indexOf(this.lastCh) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9'); - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - number = 1 * number; - this.tokens.push({ - index: start, - text: number, - json: true, - fn: function() { return number; } - }); - }, - - readIdent: function() { - var parser = this; - - var ident = ''; - var start = this.index; - - var lastDot, peekIndex, methodName, ch; - - while (this.index < this.text.length) { - ch = this.text.charAt(this.index); - if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) { - if (ch === '.') lastDot = this.index; - ident += ch; - } else { - break; - } - this.index++; - } - - //check if this is not a method invocation and if it is back out to last dot - if (lastDot) { - peekIndex = this.index; - while (peekIndex < this.text.length) { - ch = this.text.charAt(peekIndex); - if (ch === '(') { - methodName = ident.substr(lastDot - start + 1); - ident = ident.substr(0, lastDot - start); - this.index = peekIndex; - break; - } - if (this.isWhitespace(ch)) { - peekIndex++; - } else { - break; - } - } - } - - - var token = { - index: start, - text: ident - }; - - // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn - if (OPERATORS.hasOwnProperty(ident)) { - token.fn = OPERATORS[ident]; - token.json = OPERATORS[ident]; - } else { - var getter = getterFn(ident, this.options, this.text); - token.fn = extend(function(self, locals) { - return (getter(self, locals)); - }, { - assign: function(self, value) { - return setter(self, ident, value, parser.text, parser.options); - } - }); - } - - this.tokens.push(token); - - if (methodName) { - this.tokens.push({ - index:lastDot, - text: '.', - json: false - }); - this.tokens.push({ - index: lastDot + 1, - text: methodName, - json: false - }); - } - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - if (rep) { - string += rep; - } else { - string += ch; - } - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - string: string, - json: true, - fn: function() { return string; } - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -/** - * @constructor - */ -var Parser = function (lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function () { - return 0; -}, { - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function (text, json) { - this.text = text; - - //TODO(i): strip all the obsolte json stuff from this file - this.json = json; - - this.tokens = this.lexer.lex(text); - - if (json) { - // The extra level of aliasing is here, just in case the lexer misses something, so that - // we prevent any accidental execution in JSON. - this.assignment = this.logicalOR; - - this.functionCall = - this.fieldAccess = - this.objectIndex = - this.filterChain = function() { - this.throwError('is not valid json', {text: text, index: 0}); - }; - } - - var value = json ? this.primary() : this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function () { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else { - var token = this.expect(); - primary = token.fn; - if (!primary) { - this.throwError('not a primary expression', token); - } - if (token.json) { - primary.constant = true; - primary.literal = true; - } - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - if (this.tokens.length > 0) { - var token = this.tokens[0]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4){ - var token = this.peek(e1, e2, e3, e4); - if (token) { - if (this.json && !token.json) { - this.throwError('is not valid json', token); - } - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1){ - if (!this.expect(e1)) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - }, - - unaryFn: function(fn, right) { - return extend(function(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant - }); - }, - - ternaryFn: function(left, middle, right){ - return extend(function(self, locals){ - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - }, - - binaryFn: function(left, fn, right) { - return extend(function(self, locals) { - return fn(self, locals, left, right); - }, { - constant:left.constant && right.constant - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function(self, locals) { - var value; - for (var i = 0; i < statements.length; i++) { - var statement = statements[i]; - if (statement) { - value = statement(self, locals); - } - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while (true) { - if ((token = this.expect('|'))) { - left = this.binaryFn(left, token.fn, this.filter()); - } else { - return left; - } - } - }, - - filter: function() { - var token = this.expect(); - var fn = this.$filter(token.text); - var argsFn = []; - while (true) { - if ((token = this.expect(':'))) { - argsFn.push(this.expression()); - } else { - var fnInvoke = function(self, locals, input) { - var args = [input]; - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](self, locals)); - } - return fn.apply(self, args); - }; - return function() { - return fnInvoke; - }; - } - } - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return function(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }; - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.ternary(); - if ((token = this.expect(':'))) { - return this.ternaryFn(left, middle, this.ternary()); - } else { - this.throwError('expected :', token); - } - } else { - return left; - } - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while (true) { - if ((token = this.expect('||'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } else { - return left; - } - } - }, - - logicalAND: function() { - var left = this.equality(); - var token; - if ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - if ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.fn, this.equality()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - if ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.fn, this.relational()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.fn, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.fn, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.fn, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.fn, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var parser = this; - var field = this.expect().text; - var getter = getterFn(field, this.options, this.text); - - return extend(function(scope, locals, self) { - return getter(self || object(scope, locals)); - }, { - assign: function(scope, value, locals) { - return setter(object(scope, locals), field, value, parser.text, parser.options); - } - }); - }, - - objectIndex: function(obj) { - var parser = this; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v, p; - - if (!o) return undefined; - v = ensureSafeObject(o[i], parser.text); - if (v && v.then && parser.options.unwrapPromises) { - p = v; - if (!('$$v' in v)) { - p.$$v = undefined; - p.then(function(val) { p.$$v = val; }); - } - v = v.$$v; - } - return v; - }, { - assign: function(self, value, locals) { - var key = indexFn(self, locals); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var safe = ensureSafeObject(obj(self, locals), parser.text); - return safe[key] = value; - } - }); - }, - - functionCall: function(fn, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var parser = this; - - return function(scope, locals) { - var args = []; - var context = contextGetter ? contextGetter(scope, locals) : scope; - - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](scope, locals)); - } - var fnPtr = fn(scope, locals, context) || noop; - - ensureSafeObject(context, parser.text); - ensureSafeObject(fnPtr, parser.text); - - // IE stupidity! (IE doesn't have apply for some native functions) - var v = fnPtr.apply - ? fnPtr.apply(context, args) - : fnPtr(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, parser.text); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function () { - var elementFns = []; - var allConstant = true; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - var elementFn = this.expression(); - elementFns.push(elementFn); - if (!elementFn.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function(self, locals) { - var array = []; - for (var i = 0; i < elementFns.length; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: allConstant - }); - }, - - object: function () { - var keyValues = []; - var allConstant = true; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.expect(), - key = token.string || token.text; - this.consume(':'); - var value = this.expression(); - keyValues.push({key: key, value: value}); - if (!value.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function(self, locals) { - var object = {}; - for (var i = 0; i < keyValues.length; i++) { - var keyValue = keyValues[i]; - object[keyValue.key] = keyValue.value(self, locals); - } - return object; - }, { - literal: true, - constant: allConstant - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp, options) { - //needed? - options = options || {}; - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - if (obj.then && options.unwrapPromises) { - promiseWarning(fullExp); - if (!("$$v" in obj)) { - (function(promise) { - promise.then(function(val) { promise.$$v = val; }); } - )(obj); - } - if (obj.$$v === undefined) { - obj.$$v = {}; - } - obj = obj.$$v; - } - } - key = ensureSafeMemberName(element.shift(), fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCache = {}; - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - - return !options.unwrapPromises - ? function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = pathVal[key0]; - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - - return pathVal; - } - : function cspSafePromiseEnabledGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, - promise; - - if (pathVal == null) return pathVal; - - pathVal = pathVal[key0]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - return pathVal; - }; -} - -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); - - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - }; -} - -function simpleGetterFn2(key0, key1, fullExp) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - - return function simpleGetterFn2(scope, locals) { - if (scope == null) return undefined; - scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - return scope == null ? undefined : scope[key1]; - }; -} - -function getterFn(path, options, fullExp) { - // Check whether the cache has this getter already. - // We can use hasOwnProperty directly on the cache because we ensure, - // see below, that the cache never stores a path called 'hasOwnProperty' - if (getterFnCache.hasOwnProperty(path)) { - return getterFnCache[path]; - } - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length, - fn; - - // When we have only 1 or 2 tokens, use optimized special case closures. - // http://jsperf.com/angularjs-parse-getter/6 - if (!options.unwrapPromises && pathKeysLength === 1) { - fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (!options.unwrapPromises && pathKeysLength === 2) { - fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); - } else if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, - options); - } else { - fn = function(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, options)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = 'var p;\n'; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - code += 'if(s == null) return undefined;\n' + - 's='+ (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' + - (options.unwrapPromises - ? 'if (s && s.then) {\n' + - ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + - ' if (!("$$v" in s)) {\n' + - ' p=s;\n' + - ' p.$$v = undefined;\n' + - ' p.then(function(v) {p.$$v=v;});\n' + - '}\n' + - ' s=s.$$v\n' + - '}\n' - : ''); - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - fn = options.unwrapPromises ? function(scope, locals) { - return evaledFnGetter(scope, locals, promiseWarning); - } : evaledFnGetter; - } - - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - if (path !== 'hasOwnProperty') { - getterFnCache[path] = fn; - } - return fn; -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @function - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = {}; - - var $parseOptions = { - csp: false, - unwrapPromises: false, - logPromiseWarnings: true - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#unwrapPromises - * @description - * - * **This feature is deprecated, see deprecation notes below for more info** - * - * If set to true (default is false), $parse will unwrap promises automatically when a promise is - * found at any part of the expression. In other words, if set to true, the expression will always - * result in a non-promise value. - * - * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, - * the fulfillment value is used in place of the promise while evaluating the expression. - * - * **Deprecation notice** - * - * This is a feature that didn't prove to be wildly useful or popular, primarily because of the - * dichotomy between data access in templates (accessed as raw values) and controller code - * (accessed as promises). - * - * In most code we ended up resolving promises manually in controllers anyway and thus unifying - * the model access there. - * - * Other downsides of automatic promise unwrapping: - * - * - when building components it's often desirable to receive the raw promises - * - adds complexity and slows down expression evaluation - * - makes expression code pre-generation unattractive due to the amount of code that needs to be - * generated - * - makes IDE auto-completion and tool support hard - * - * **Warning Logs** - * - * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a - * promise (to reduce the noise, each expression is logged only once). To disable this logging use - * `$parseProvider.logPromiseWarnings(false)` api. - * - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.unwrapPromises = function(value) { - if (isDefined(value)) { - $parseOptions.unwrapPromises = !!value; - return this; - } else { - return $parseOptions.unwrapPromises; - } - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#logPromiseWarnings - * @description - * - * Controls whether Angular should log a warning on any encounter of a promise in an expression. - * - * The default is set to `true`. - * - * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.logPromiseWarnings = function(value) { - if (isDefined(value)) { - $parseOptions.logPromiseWarnings = value; - return this; - } else { - return $parseOptions.logPromiseWarnings; - } - }; - - - this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { - $parseOptions.csp = $sniffer.csp; - - promiseWarning = function promiseWarningFn(fullExp) { - if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; - promiseWarningCache[fullExp] = true; - $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + - 'Automatic unwrapping of promises in Angular expressions is deprecated.'); - }; - - return function(exp) { - var parsedExpression; - - switch (typeof exp) { - case 'string': - - if (cache.hasOwnProperty(exp)) { - return cache[exp]; - } - - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp, false); - - if (exp !== 'hasOwnProperty') { - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - cache[exp] = parsedExpression; - } - - return parsedExpression; - - case 'function': - return exp; - - default: - return noop; - } - }; - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * // since this fn executes async in a future turn of the event loop, we need to wrap - * // our code into an $apply call so that the model changes are properly observed. - * scope.$apply(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }); - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as - * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to - * make your code IE8 and Android 2.x compatible. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - - -/** - * Constructs a promise manager. - * - * @param {function(Function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - - /** - * @ngdoc method - * @name $q#defer - * @function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - var pending = [], - value, deferred; - - deferred = { - - resolve: function(val) { - if (pending) { - var callbacks = pending; - pending = undefined; - value = ref(val); - - if (callbacks.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - value.then(callback[0], callback[1], callback[2]); - } - }); - } - } - }, - - - reject: function(reason) { - deferred.resolve(createInternalRejectedPromise(reason)); - }, - - - notify: function(progress) { - if (pending) { - var callbacks = pending; - - if (pending.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - callback[2](progress); - } - }); - } - } - }, - - - promise: { - then: function(callback, errback, progressback) { - var result = defer(); - - var wrappedCallback = function(value) { - try { - result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedErrback = function(reason) { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress)); - } catch(e) { - exceptionHandler(e); - } - }; - - if (pending) { - pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]); - } else { - value.then(wrappedCallback, wrappedErrback, wrappedProgressback); - } - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback) { - - function makePromise(value, resolved) { - var result = defer(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - } - - function handleCallback(value, isResolved) { - var callbackOutput = null; - try { - callbackOutput = (callback ||defaultCallback)(); - } catch(e) { - return makePromise(e, false); - } - if (callbackOutput && isFunction(callbackOutput.then)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - } - - return this.then(function(value) { - return handleCallback(value, true); - }, function(error) { - return handleCallback(error, false); - }); - } - } - }; - - return deferred; - }; - - - var ref = function(value) { - if (value && isFunction(value.then)) return value; - return { - then: function(callback) { - var result = defer(); - nextTick(function() { - result.resolve(callback(value)); - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#reject - * @function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = defer(); - result.reject(reason); - return result.promise; - }; - - var createInternalRejectedPromise = function(reason) { - return { - then: function(callback, errback) { - var result = defer(); - nextTick(function() { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#when - * @function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - var when = function(value, callback, errback, progressback) { - var result = defer(), - done; - - var wrappedCallback = function(value) { - try { - return (isFunction(callback) ? callback : defaultCallback)(value); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedErrback = function(reason) { - try { - return (isFunction(errback) ? errback : defaultErrback)(reason); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - return (isFunction(progressback) ? progressback : defaultCallback)(progress); - } catch (e) { - exceptionHandler(e); - } - }; - - nextTick(function() { - ref(value).then(function(value) { - if (done) return; - done = true; - result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback)); - }, function(reason) { - if (done) return; - done = true; - result.resolve(wrappedErrback(reason)); - }, function(progress) { - if (done) return; - result.notify(wrappedProgressback(progress)); - }); - }); - - return result.promise; - }; - - - function defaultCallback(value) { - return value; - } - - - function defaultErrback(reason) { - return reject(reason); - } - - - /** - * @ngdoc method - * @name $q#all - * @function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - function all(promises) { - var deferred = defer(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - ref(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - return { - defer: defer, - reject: reject, - when: when, - all: all - }; -} - -function $$RAFProvider(){ //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame || - $window.mozRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.mozCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (shift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider(){ - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function( $injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - child.name = "World"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this['this'] = this.$root = this; - this.$$destroyed = false; - this.$$asyncQueue = []; - this.$$postDigestQueue = []; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = {}; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for - * debugging. - */ - - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and - * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the - * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate) { - var ChildScope, - child; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - // ensure that there is just one async queue per $rootScope and its children - child.$$asyncQueue = this.$$asyncQueue; - child.$$postDigestQueue = this.$$postDigestQueue; - } else { - ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges - // the name it does not become random set of chars. This will then show up as class - // name in the web inspector. - ChildScope.prototype = this; - child = new ChildScope(); - child.$id = nextUid(); - } - child['this'] = child; - child.$$listeners = {}; - child.$$listenerCount = {}; - child.$parent = this; - child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; - child.$$prevSibling = this.$$childTail; - if (this.$$childHead) { - this.$$childTail.$$nextSibling = child; - this.$$childTail = child; - } else { - this.$$childHead = this.$$childTail = child; - } - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). The inequality is determined according to - * {@link angular.equals} function. To save the value of the object for later comparison, - * the {@link angular.copy} function is used. It also means that watching complex options - * will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * The example below contains an illustration of using a function as your $watch listener - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - - - - // Using a listener function - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This is the listener function - function() { return food; }, - // This is the change handler - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {(function()|string)=} listener Callback called whenever the return value of - * the `watchExpression` changes. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(newValue, oldValue, scope)`: called with current and previous values as - * parameters. - * - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var scope = this, - get = compileToFn(watchExp, 'watch'), - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - // in the case user pass string, we need to compile it, do we really need this ? - if (!isFunction(listener)) { - var listenFn = compileToFn(listener || noop, 'listener'); - watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; - } - - if (typeof watchExp == 'string' && get.constant) { - var originalFn = watcher.fn; - watcher.fn = function(newVal, oldVal, scope) { - originalFn.call(this, newVal, oldVal, scope); - arrayRemove(array, watcher); - }; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var objGetter = $parse(obj); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionWatch() { - newValue = objGetter(self); - var newLength, key; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - var bothNaN = (oldValue[i] !== oldValue[i]) && - (newValue[i] !== newValue[i]); - if (!bothNaN && (oldValue[i] !== newValue[i])) { - changeDetected++; - oldValue[i] = newValue[i]; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - if (oldValue.hasOwnProperty(key)) { - if (oldValue[key] !== newValue[key]) { - changeDetected++; - oldValue[key] = newValue[key]; - } - } else { - oldLength++; - oldValue[key] = newValue[key]; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for(key in oldValue) { - if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch($watchCollectionWatch, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - asyncQueue = this.$$asyncQueue, - postDigestQueue = this.$$postDigestQueue, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while(asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression); - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value == 'number' && typeof last == 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - logMsg = (isFunction(watch.exp)) - ? 'fn: ' + (watch.exp.name || watch.exp.toString()) - : watch.exp; - logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); - watchLog[logIdx].push(logMsg); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, toJson(watchLog)); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while(postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = null; - - // don't reset these to null in case some async task tries to register a listener/watch/task - this.$$listeners = {}; - this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; - - // prevent NPEs since these methods have references to properties we nulled out - this.$destroy = this.$digest = this.$apply = noop; - this.$on = this.$watch = function() { return noop; }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - */ - $evalAsync: function(expr) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { - $browser.defer(function() { - if ($rootScope.$$asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - this.$$asyncQueue.push({scope: this, expression: expr}); - }, - - $$postDigest : function(fn) { - this.$$postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the current scope which is handling the event. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - namedListeners[indexOf(namedListeners, listener)] = null; - decrementListenerCount(self, 1, name); - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i=0, length=namedListeners.length; i<length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) return event; - //traverse upwards - scope = scope.$parent; - } while (scope); - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i=0, length = listeners.length; i<length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch(e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - return event; - } - }; - - var $rootScope = new Scope(); - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function compileToFn(exp, name) { - var fn = $parse(exp); - assertArgFn(fn, name); - return fn; - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case. - if (!msie || msie >= 8 ) { - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:'+normalizedVal; - } - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -// Copied from: -// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962 -// Prereq: s is a string. -function escapeForRegexp(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -} - - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * <pre class="prettyprint"> - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**']); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**']); - * }); - * </pre> - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function (value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function (value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * <pre class="prettyprint"> - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"> - * </pre> - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * <pre class="prettyprint"> - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * </pre> - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead for the developer? - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) It's usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * @example -<example module="mySceApp" deps="angular-sanitize.js"> -<file name="index.html"> - <div ng-controller="myAppController as myCtrl"> - <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - <b>User comments</b><br> - By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - $sanitize is available. If $sanitize isn't available, this results in an error instead of an - exploit. - <div class="well"> - <div ng-repeat="userComment in myCtrl.userComments"> - <b>{{userComment.name}}</b>: - <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - <br> - </div> - </div> - </div> -</file> - -<file name="script.js"> - var mySceApp = angular.module('mySceApp', ['ngSanitize']); - - mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { - var self = this; - $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - self.userComments = userComments; - }); - self.explicitlyTrustedHtml = $sce.trustAsHtml( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); -</file> - -<file name="test_data.json"> -[ - { "name": "Alice", - "htmlComment": - "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - }, - { "name": "Bob", - "htmlComment": "<i>Yes!</i> Am I the only other one?" - } -] -</file> - -<file name="protractor.js" type="protractor"> - describe('SCE doc demo', function() { - it('should sanitize untrusted values', function() { - expect(element(by.css('.htmlComment')).getInnerHtml()) - .toBe('<span>Is <i>anyone</i> reading this?</span>'); - }); - - it('should NOT sanitize explicitly trusted values', function() { - expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); - }); -</file> -</example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * <pre class="prettyprint"> - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * </pre> - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function (value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sniffer', '$sceDelegate', function( - $parse, $sniffer, $sceDelegate) { - // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = copy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function () { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parse - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return function sceParseAsTrusted(self, locals) { - return sce.getTrusted(type, parsed(self, locals)); - }; - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function (enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function (expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function (value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function (value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} hashchange Does the browser support hashchange event ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - documentMode = document.documentMode, - vendorPrefix, - vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for(var prop in bodyStyle) { - if(match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if(!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions||!animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hashchange: 'onhashchange' in $window && - // IE8 compatible mode lies - (!documentMode || documentMode > 7), - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - if (event == 'input' && msie == 9) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions : transitions, - animations : animations, - android: android, - msie : msie, - msieDocumentMode: documentMode - }; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', - function($rootScope, $browser, $q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - skipApply = (isDefined(invokeApply) && !invokeApply), - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch(e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href, true); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url, base) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - } - </script> - <div ng-controller="Ctrl"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ -/** - * @ngdoc method - * @name $filterProvider#register - * @description - * Register filter factory function. - * - * @param {String} name Name of the filter. - * @param {Function} fn The filter factory function which is injectable. - */ - - -/** - * @ngdoc service - * @name $filter - * @function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if(isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against - * the contents of the `array`. All strings or objects with string properties in `array` that contain this string - * will be returned. The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object. That's equivalent to the simple substring match with a `string` - * as described above. - * - * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is - * called for each element of `array`. The final result is an array of those elements that - * the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var comparatorType = typeof(comparator), - predicates = []; - - predicates.check = function(value) { - for (var j = 0; j < predicates.length; j++) { - if(!predicates[j](value)) { - return false; - } - } - return true; - }; - - if (comparatorType !== 'function') { - if (comparatorType === 'boolean' && comparator) { - comparator = function(obj, text) { - return angular.equals(obj, text); - }; - } else { - comparator = function(obj, text) { - if (obj && text && typeof obj === 'object' && typeof text === 'object') { - for (var objKey in obj) { - if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && - comparator(obj[objKey], text[objKey])) { - return true; - } - } - return false; - } - text = (''+text).toLowerCase(); - return (''+obj).toLowerCase().indexOf(text) > -1; - }; - } - } - - var search = function(obj, text){ - if (typeof text == 'string' && text.charAt(0) === '!') { - return !search(obj, text.substr(1)); - } - switch (typeof obj) { - case "boolean": - case "number": - case "string": - return comparator(obj, text); - case "object": - switch (typeof text) { - case "object": - return comparator(obj, text); - default: - for ( var objKey in obj) { - if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) { - return true; - } - } - break; - } - return false; - case "array": - for ( var i = 0; i < obj.length; i++) { - if (search(obj[i], text)) { - return true; - } - } - return false; - default: - return false; - } - }; - switch (typeof expression) { - case "boolean": - case "number": - case "string": - // Set up expression object and fall through - expression = {$:expression}; - // jshint -W086 - case "object": - // jshint +W086 - for (var key in expression) { - (function(path) { - if (typeof expression[path] == 'undefined') return; - predicates.push(function(value) { - return search(path == '$' ? value : (value && value[path]), expression[path]); - }); - })(key); - } - break; - case 'function': - predicates.push(expression); - break; - default: - return array; - } - var filtered = []; - for ( var j = 0; j < array.length; j++) { - var value = array[j]; - if (predicates.check(value)) { - filtered.push(value); - } - } - return filtered; - }; -} - -/** - * @ngdoc filter - * @name currency - * @function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @returns {string} Formatted number. - * - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.amount = 1234.56; - } - </script> - <div ng-controller="Ctrl"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol){ - if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; - return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = 1234.56789; - } - </script> - <div ng-controller="Ctrl"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (number == null || !isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - numStr = '0'; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - var pow = Math.pow(10, fractionSize); - number = Math.round(number * pow) / pow; - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i)%group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i)%lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while(fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - - if (fractionSize > 0 && number > -1 && number < 1) { - formatedText = number.toFixed(fractionSize); - } - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre); - parts.push(formatedText); - parts.push(isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12 ) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in am/pm, padded (01-12) - * * `'h'`: Hour in am/pm, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) - * * `'a'`: am/pm marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 pm) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) - * - * `format` string can contain literal values. These need to be quoted with single quotes (e.g. - * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4]||0) - tzHour; - var m = int(match[5]||0) - tzMin; - var s = int(match[6]||0); - var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - if (NUMBER_STRING.test(date)) { - date = int(date); - } else { - date = jsonStringToDate(date); - } - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while(format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - forEach(parts, function(value){ - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre>{{ {'name':'value'} | json }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object) { - return toJson(object, true); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array or string, as specified by - * the value and sign (positive or negative) of `limit`. - * - * @param {Array|string} input Source array or string to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.numLimit = 3; - $scope.letterLimit = 3; - } - </script> - <div ng-controller="Ctrl"> - Limit {{numbers}} to: <input type="integer" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="integer" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - }); - - it('should update the output when -3 is entered', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('-3'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('-3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - }); - </file> - </example> - */ -function limitToFilter(){ - return function(input, limit) { - if (!isArray(input) && !isString(input)) return input; - - limit = int(limit); - - if (isString(input)) { - //NaN check on limit - if (limit) { - return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length); - } else { - return ""; - } - } - - var out = [], - i, n; - - // if abs(limit) exceeds maximum length, trim it - if (limit > input.length) - limit = input.length; - else if (limit < -input.length) - limit = -input.length; - - if (limit > 0) { - i = 0; - n = limit; - } else { - i = input.length + limit; - n = input.length; - } - - for (; i<n; i++) { - out.push(input[i]); - } - - return out; - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @function - * - * @description - * Orders a specified `array` by the `expression` predicate. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression which evaluates to an object to order by, such as 'name' - * to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control - * ascending or descending sort order (for example, +name or -name). - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}] - $scope.predicate = '-age'; - } - </script> - <div ng-controller="Ctrl"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse){ - return function(array, sortPredicate, reverseOrder) { - if (!isArray(array)) return array; - if (!sortPredicate) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; - sortPredicate = map(sortPredicate, function(predicate){ - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a,b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a,b){ - return compare(get(a),get(b)); - }, descending); - }); - var arrayCopy = []; - for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); } - return arrayCopy.sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2){ - for ( var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return toBoolean(descending) - ? function(a,b){return comp(b,a);} - : comp; - } - function compare(v1, v2){ - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 == t2) { - if (t1 == "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - - if (msie <= 8) { - - // turn <a href ng-click="..">link</a> into a stylable link in IE - // but only if it doesn't have name attribute, in which case it's an anchor - if (!attr.href && !attr.name) { - attr.$set('href', ''); - } - - // add a comment node to anchors to workaround IE bug that causes element content to be reset - // to new attribute content if attribute is updated with value containing @ and element also - // contains value with @ - // see issue #1949 - element.append(document.createComment('IE fix')); - } - - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event){ - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. - * - * The `ngHref` directive solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 1000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 1000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) - return; - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl */ -var nullFormCtrl = { - $addControl: noop, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop -}; - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * - * @property {Object} $error Is an object hash, containing references to all invalid controls or - * forms, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that are invalid for given error name. - * - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate']; -function FormController(element, attrs, $scope, $animate) { - var form = this, - parentForm = element.parent().controller('form') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - errors = form.$error = {}, - controls = []; - - // init state - form.$name = attrs.name || attrs.ngForm; - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - - parentForm.$addControl(form); - - // Setup initial state of the control - element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(errors, function(queue, validationToken) { - form.$setValidity(validationToken, true, control); - }); - - arrayRemove(controls, control); - }; - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - form.$setValidity = function(validationToken, isValid, control) { - var queue = errors[validationToken]; - - if (isValid) { - if (queue) { - arrayRemove(queue, control); - if (!queue.length) { - invalidCount--; - if (!invalidCount) { - toggleValidCss(isValid); - form.$valid = true; - form.$invalid = false; - } - errors[validationToken] = false; - toggleValidCss(true, validationToken); - parentForm.$setValidity(validationToken, true, form); - } - } - - } else { - if (!invalidCount) { - toggleValidCss(isValid); - } - if (queue) { - if (includes(queue, control)) return; - } else { - errors[validationToken] = queue = []; - invalidCount++; - toggleValidCss(false, validationToken); - parentForm.$setValidity(validationToken, false, form); - } - queue.push(control); - - form.$valid = false; - form.$invalid = true; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function () { - $animate.removeClass(element, DIRTY_CLASS); - $animate.addClass(element, PRISTINE_CLASS); - form.$dirty = false; - form.$pristine = true; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; -} - - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.userType = 'guest'; - } - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="Ctrl" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function() { - return { - pre: function(scope, formElement, attr, controller) { - if (!attr.action) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var preventDefaultListener = function(event) { - event.preventDefault - ? event.preventDefault() - : event.returnValue = false; // IE - }; - - addEventListenerFn(formElement[0], 'submit', preventDefaultListener); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); - }, 0, false); - }); - } - - var parentFormCtrl = formElement.parent().controller('form'), - alias = attr.name || attr.ngForm; - - if (alias) { - setter(scope, alias, controller, alias); - } - if (parentFormCtrl) { - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global - - -VALID_CLASS, - -INVALID_CLASS, - -PRISTINE_CLASS, - -DIRTY_CLASS -*/ - -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * - * @example - <example name="text-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'guest'; - $scope.word = /^\s*\w*\s*$/; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Single word: <input type="text" name="input" ng-model="text" - ng-pattern="word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value = 12; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Number: <input type="number" name="input" ng-model="value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'http://google.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - URL: <input type="url" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'me@example.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Email: <input type="email" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.color = 'blue'; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - <input type="radio" ng-model="color" value="red"> Red <br/> - <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color" value="blue"> Blue <br/> - <tt>color = {{color | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngTrueValue The value to which the expression should be set when selected. - * @param {string=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value1 = true; - $scope.value2 = 'YES' - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Value1: <input type="checkbox" ng-model="value1"> <br/> - Value2: <input type="checkbox" ng-model="value2" - ng-true-value="YES" ng-false-value="NO"> <br/> - <tt>value1 = {{value1}}</tt><br/> - <tt>value2 = {{value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('value1')); - var value2 = element(by.binding('value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('value1')).click(); - element(by.model('value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -// A helper function to call $setValidity and return the value / undefined, -// a pattern that is repeated a lot in the input validation logic. -function validate(ctrl, validatorName, validity, value){ - ctrl.$setValidity(validatorName, validity); - return validity ? value : undefined; -} - - -function addNativeHtml5Validators(ctrl, validatorName, element) { - var validity = element.prop('validity'); - if (isObject(validity)) { - var validator = function(value) { - // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can - // perform the required validation) - if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError || - validity.typeMismatch) && !validity.valueMissing) { - ctrl.$setValidity(validatorName, false); - return; - } - return value; - }; - ctrl.$parsers.push(validator); - } -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var validity = element.prop('validity'); - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function() { - if (composing) return; - var value = element.val(); - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // e.g. <input ng-model="foo" ng-trim="false"> - if (toBoolean(attr.ngTrim || 'T')) { - value = trim(value); - } - - if (ctrl.$viewValue !== value || - // If the value is still empty/falsy, and there is no `required` error, run validators - // again. This enables HTML5 constraint validation errors to affect Angular validation - // even when the first character entered causes an error. - (validity && value === '' && !validity.valueMissing)) { - if (scope.$$phase) { - ctrl.$setViewValue(value); - } else { - scope.$apply(function() { - ctrl.$setViewValue(value); - }); - } - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function() { - if (!timeout) { - timeout = $browser.defer(function() { - listener(); - timeout = null; - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; - - // pattern validator - var pattern = attr.ngPattern, - patternValidator, - match; - - if (pattern) { - var validateRegex = function(regexp, value) { - return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); - }; - match = pattern.match(/^\/(.*)\/([gim]*)$/); - if (match) { - pattern = new RegExp(match[1], match[2]); - patternValidator = function(value) { - return validateRegex(pattern, value); - }; - } else { - patternValidator = function(value) { - var patternObj = scope.$eval(pattern); - - if (!patternObj || !patternObj.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, - patternObj, startingTag(element)); - } - return validateRegex(patternObj, value); - }; - } - - ctrl.$formatters.push(patternValidator); - ctrl.$parsers.push(patternValidator); - } - - // min length validator - if (attr.ngMinlength) { - var minlength = int(attr.ngMinlength); - var minLengthValidator = function(value) { - return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value); - }; - - ctrl.$parsers.push(minLengthValidator); - ctrl.$formatters.push(minLengthValidator); - } - - // max length validator - if (attr.ngMaxlength) { - var maxlength = int(attr.ngMaxlength); - var maxLengthValidator = function(value) { - return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); - }; - - ctrl.$parsers.push(maxLengthValidator); - ctrl.$formatters.push(maxLengthValidator); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$parsers.push(function(value) { - var empty = ctrl.$isEmpty(value); - if (empty || NUMBER_REGEXP.test(value)) { - ctrl.$setValidity('number', true); - return value === '' ? null : (empty ? value : parseFloat(value)); - } else { - ctrl.$setValidity('number', false); - return undefined; - } - }); - - addNativeHtml5Validators(ctrl, 'number', element); - - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? '' : '' + value; - }); - - if (attr.min) { - var minValidator = function(value) { - var min = parseFloat(attr.min); - return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); - }; - - ctrl.$parsers.push(minValidator); - ctrl.$formatters.push(minValidator); - } - - if (attr.max) { - var maxValidator = function(value) { - var max = parseFloat(attr.max); - return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); - }; - - ctrl.$parsers.push(maxValidator); - ctrl.$formatters.push(maxValidator); - } - - ctrl.$formatters.push(function(value) { - return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); - }); -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var urlValidator = function(value) { - return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(urlValidator); - ctrl.$parsers.push(urlValidator); -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var emailValidator = function(value) { - return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(emailValidator); - ctrl.$parsers.push(emailValidator); -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - element.on('click', function() { - if (element[0].checked) { - scope.$apply(function() { - ctrl.$setViewValue(attr.value); - }); - } - }); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function checkboxInputType(scope, element, attr, ctrl) { - var trueValue = attr.ngTrueValue, - falseValue = attr.ngFalseValue; - - if (!isString(trueValue)) trueValue = true; - if (!isString(falseValue)) falseValue = false; - - element.on('click', function() { - scope.$apply(function() { - ctrl.$setViewValue(element[0].checked); - }); - }); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox. - ctrl.$isEmpty = function(value) { - return value !== trueValue; - }; - - ctrl.$formatters.push(function(value) { - return value === trueValue; - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control with angular data-binding. Input control follows HTML5 input types - * and polyfills the HTML5 validation behavior for older browsers. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - } - </script> - <div ng-controller="Ctrl"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.binding('{{user}}')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { - return { - restrict: 'E', - require: '?ngModel', - link: function(scope, element, attr, ctrl) { - if (ctrl) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, - $browser); - } - } - }; -}]; - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty'; - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. Each function is called, in turn, passing the value - through to the next. The last return value is used to populate the model. - Used to sanitize / convert the value as well as validation. For validation, - the parsers should update the validity state using - {@link ngModel.NgModelController#$setValidity $setValidity()}, - and return `undefined` for invalid values. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. Each function is called, in turn, passing the value through to the - next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all errors as keys. - * - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * - * @description - * - * `NgModelController` provides API for the `ng-model` directive. The controller contains - * services for data-binding, validation, CSS updates, and value formatting and parsing. It - * purposefully does not contain any logic which deals with DOM rendering or listening to - * DOM events. Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding. - * - * ## Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * <example name="NgModelController" module="customControl"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', []). - directive('contenteditable', function() { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if(!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html(ngModel.$viewValue || ''); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$apply(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$name = $attr.name; - - var ngModelGet = $parse($attr.ngModel), - ngModelSet = ngModelGet.assign; - - if (!ngModelSet) { - throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of the input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is empty. - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - $error = this.$error = {}; // keep invalid keys here - - - // Setup initial state of the control - $element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notifies the form when the control changes validity. (i.e. it - * does not notify form if given validator is already marked as invalid). - * - * This method should be called by validators - i.e. the parser or formatter functions. - * - * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign - * to `$error[validationErrorKey]=isValid` so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true) or invalid (false). - */ - this.$setValidity = function(validationErrorKey, isValid) { - // Purposeful use of ! here to cast isValid to boolean in case it is undefined - // jshint -W018 - if ($error[validationErrorKey] === !isValid) return; - // jshint +W018 - - if (isValid) { - if ($error[validationErrorKey]) invalidCount--; - if (!invalidCount) { - toggleValidCss(true); - this.$valid = true; - this.$invalid = false; - } - } else { - toggleValidCss(false); - this.$invalid = true; - this.$valid = false; - invalidCount++; - } - - $error[validationErrorKey] = !isValid; - toggleValidCss(isValid, validationErrorKey); - - parentForm.$setValidity(validationErrorKey, isValid, this); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the control to its pristine - * state (ng-pristine class). - */ - this.$setPristine = function () { - this.$dirty = false; - this.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when the view value changes, typically from within a DOM event handler. - * For example {@link ng.directive:input input} and - * {@link ng.directive:select select} directives call it. - * - * It will update the $viewValue, then pass this value through each of the functions in `$parsers`, - * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to - * `$modelValue` and the **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - */ - this.$setViewValue = function(value) { - this.$viewValue = value; - - // change to dirty - if (this.$pristine) { - this.$dirty = true; - this.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - } - - forEach(this.$parsers, function(fn) { - value = fn(value); - }); - - if (this.$modelValue !== value) { - this.$modelValue = value; - ngModelSet($scope, value); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch(e) { - $exceptionHandler(e); - } - }); - } - }; - - // model -> value - var ctrl = this; - - $scope.$watch(function ngModelWatch() { - var value = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - if (ctrl.$modelValue !== value) { - - var formatters = ctrl.$formatters, - idx = formatters.length; - - ctrl.$modelValue = value; - while(idx--) { - value = formatters[idx](value); - } - - if (ctrl.$viewValue !== value) { - ctrl.$viewValue = value; - ctrl.$render(); - } - } - - return value; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [https://github.com/angular/angular.js/wiki/Understanding-Scopes] - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid` is set if the model is valid. - * - `ng-invalid` is set if the model is invalid. - * - `ng-pristine` is set if the model is pristine. - * - `ng-dirty` is set if the model is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = '1'; - } - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="Ctrl"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - */ -var ngModelDirective = function() { - return { - require: ['ngModel', '^?form'], - controller: NgModelController, - link: function(scope, element, attr, ctrls) { - // notify others, especially parent forms - - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - formCtrl.$addControl(modelCtrl); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * The expression is not evaluated when the value change is coming from the model. - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive"> - * <file name="index.html"> - * <script> - * function Controller($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * } - * </script> - * <div ng-controller="Controller"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - - -var requiredDirective = function() { - return { - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - var validator = function(value) { - if (attr.required && ctrl.$isEmpty(value)) { - ctrl.$setValidity('required', false); - return; - } else { - ctrl.$setValidity('required', true); - return value; - } - }; - - ctrl.$formatters.push(validator); - ctrl.$parsers.unshift(validator); - - attr.$observe('required', function() { - validator(ctrl.$viewValue); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The delimiter - * can be a fixed string (by default a comma) or a regular expression. - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. If - * specified in form `/something/` then the value will be converted into a regular expression. - * - * @example - <example name="ngList-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['igor', 'misko', 'vojta']; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - List: <input name="namesInput" ng-model="names" ng-list required> - <span class="error" ng-show="myForm.namesInput.$error.required"> - Required!</span> - <br> - <tt>names = {{names}}</tt><br/> - <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var listInput = element(by.model('names')); - var names = element(by.binding('{{names}}')); - var valid = element(by.binding('myForm.namesInput.$valid')); - var error = element(by.css('span.error')); - - it('should initialize to model', function() { - expect(names.getText()).toContain('["igor","misko","vojta"]'); - expect(valid.getText()).toContain('true'); - expect(error.getCssValue('display')).toBe('none'); - }); - - it('should be invalid if empty', function() { - listInput.clear(); - listInput.sendKeys(''); - - expect(names.getText()).toContain(''); - expect(valid.getText()).toContain('false'); - expect(error.getCssValue('display')).not.toBe('none'); }); - </file> - </example> - */ -var ngListDirective = function() { - return { - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var match = /\/(.*)\//.exec(attr.ngList), - separator = match && new RegExp(match[1]) || attr.ngList || ','; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trim(value)); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(', '); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `input[select]` or `input[radio]`, so - * that when the element is selected, the `ngModel` of that element is set to the - * bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as - * shown below. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - } - </script> - <form ng-controller="Ctrl"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.name = 'Whirled'; - } - </script> - <div ng-controller="Ctrl"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ngDirective(function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBind); - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - // We are purposefully using == here rather than === because we want to - // catch when value is "null or undefined" - // jshint -W041 - element.text(value == undefined ? '' : value); - }); -}); - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - } - </script> - <div ng-controller="Ctrl"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', function($interpolate) { - return function(scope, element, attr) { - // TODO: move this to scenario runner - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - element.addClass('ng-binding').data('$binding', interpolateFn); - attr.$observe('ngBindTemplate', function(value) { - element.text(value); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link - * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` - * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in - * core Angular.) You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - Try it here: enter text in text box and watch the greeting change. - - <example module="ngBindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ngBindHtmlCtrl"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('ngBindHtmlExample', ['ngSanitize']) - - .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with <a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); - - var parsed = $parse(attr.ngBindHtml); - function getStringValue() { return (parsed(scope) || '').toString(); } - - scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { - element.html($sce.getTrustedHtml(parsed(scope)) || ''); - }); - }; -}]; - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== old$index & 1) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts (classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function (className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses (oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toRemove = digestClassCounts(toRemove, -1); - toAdd = digestClassCounts(toAdd, 1); - - if (toAdd.length === 0) { - $animate.removeClass(element, toRemove); - } else if (toRemove.length === 0) { - $animate.addClass(element, toAdd); - } else { - $animate.setClass(element, toAdd, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = copy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses (classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = [], i = 0; - forEach(classVal, function(v, k) { - if (v) { - classes.push(k); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * add - happens just before the class is applied to the element - * remove - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and - {@link ngAnimate.$animate#removeclass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} &nbsp; &nbsp; &nbsp; - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @param {expression} ngController Name of a globally accessible constructor function or an - * {@link guide/expression expression} that on the current scope evaluates to a - * constructor function. The controller instance can be published into a scope property - * by specifying `as propertyName`. - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Notice that the scope becomes the `this` for the - * controller's instance. This allows for easy access to the view data from the controller. Also - * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. The example is shown in two different declaration styles you may use - * according to preference. - <example> - <file name="index.html"> - <script> - function SettingsController1() { - this.name = "John Smith"; - this.contacts = [ - {type: 'phone', value: '408 555 1212'}, - {type: 'email', value: 'john.smith@example.org'} ]; - }; - - SettingsController1.prototype.greet = function() { - alert(this.name); - }; - - SettingsController1.prototype.addContact = function() { - this.contacts.push({type: 'email', value: 'yourname@example.org'}); - }; - - SettingsController1.prototype.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - SettingsController1.prototype.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - </script> - <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - Name: <input type="text" ng-model="settings.name"/> - [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in settings.contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller as', function() { - var container = element(by.id('ctrl-as-exmpl')); - - expect(container.findElement(by.model('settings.name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - <example> - <file name="index.html"> - <script> - function SettingsController2($scope) { - $scope.name = "John Smith"; - $scope.contacts = [ - {type:'phone', value:'408 555 1212'}, - {type:'email', value:'john.smith@example.org'} ]; - - $scope.greet = function() { - alert(this.name); - }; - - $scope.addContact = function() { - this.contacts.push({type:'email', value:'yourname@example.org'}); - }; - - $scope.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - $scope.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - } - </script> - <div id="ctrl-exmpl" ng-controller="SettingsController2"> - Name: <input type="text" ng-model="name"/> - [ <a href="" ng-click="greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="clearContact(contact)">clear</a> - | <a href="" ng-click="removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller', function() { - var container = element(by.id('ctrl-exmpl')); - - expect(container.findElement(by.model('name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - - */ -var ngControllerDirective = [function() { - return { - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For us to be compatible, we just need to implement the "getterFn" in $parse without violating - * any of these restrictions. - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * In order to use this feature put the `ngCsp` directive on the root element of the application. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap -// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute -// anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{count}} - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A directive that allows creation of custom onclick handlers that are defined as angular - * expressions and are compiled and executed within the current scope. - * - * Events that are handled via these handler are always configured not to propagate further. - */ -var ngEventDirectives = {}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(name) { - var directiveName = directiveNormalize('ng-' + name); - ngEventDirectives[directiveName] = ['$parse', function($parse) { - return { - compile: function($element, attr) { - var fn = $parse(attr[directiveName]); - return function(scope, element, attr) { - element.on(lowercase(name), function(event) { - scope.$apply(function() { - fn(scope, {$event:event}); - }); - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keyup="count = count + 1" ng-init="count=0"> - key up count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - } - </script> - <form ng-submit="submit()" ng-controller="Ctrl"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.input('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container - * leave - happens just before the ngIf contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - I'm removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function ($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (toBoolean(value)) { - if (!childScope) { - childScope = $scope.$new(); - $transclude(childScope, function (clone) { - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if(previousElements) { - previousElements.remove(); - previousElements = null; - } - if(childScope) { - childScope.$destroy(); - childScope = null; - } - if(block) { - previousElements = getBlockElements(block.clone); - $animate.leave(previousElements, function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <tt>{{template.url}}</tt> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - } - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - */ -var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', - function($http, $templateCache, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element, afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); - }).error(function() { - if (thisChangeId === changeCounter) cleanupLastIncludeContent(); - }); - scope.$emit('$includeContentRequested'); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * <div ng-init="test1 = (data | orderBy:'name')"></div> - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - } - </script> - <div ng-controller="Ctrl"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - } - </script> - <div ng-controller="Ctrl"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g; - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - isWhen = /^when(Minus)?(.+)$/; - - forEach(attr, function(expression, attributeName) { - if (isWhen.test(attributeName)) { - whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = - element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = - $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + - offset + endSymbol)); - }); - - scope.$watch(function ngPluralizeWatch() { - var value = parseFloat(scope.$eval(numberExp)); - - if (!isNaN(value)) { - //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, - //check it against pluralization rules in $locale service - if (!(value in whens)) value = $locale.pluralCat(value - offset); - return whensExpFns[value](scope, element, true); - } else { - return ''; - } - }, function ngPluralizeWatchAction(newVal) { - element.text(newVal); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - return { - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude){ - var expression = $attr.ngRepeat; - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), - trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, - lhs, rhs, valueIdentifier, keyIdentifier, - hashFnLocals = {$id: hashKey}; - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - lhs = match[1]; - rhs = match[2]; - trackByExp = match[3]; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - valueIdentifier = match[3] || match[1]; - keyIdentifier = match[2]; - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - var lastBlockMap = {}; - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection){ - var index, length, - previousNode = $element[0], // current position of the node - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = {}, - arrayLength, - childScope, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder = [], - elementsToRemove; - - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (key in collection) { - if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { - collectionKeys.push(key); - } - } - collectionKeys.sort(); - } - - arrayLength = collectionKeys.length; - - // locate existing items - length = nextBlockOrder.length = collectionKeys.length; - for(index = 0; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - assertNotHasOwnProperty(trackById, '`track by` id'); - if(lastBlockMap.hasOwnProperty(trackById)) { - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap.hasOwnProperty(trackById)) { - // restore lastBlockMap - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - // This is a duplicate and we need to throw an error - throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", - expression, trackById); - } else { - // new never before seen block - nextBlockOrder[index] = { id: trackById }; - nextBlockMap[trackById] = false; - } - } - - // remove existing items - for (key in lastBlockMap) { - // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn - if (lastBlockMap.hasOwnProperty(key)) { - block = lastBlockMap[key]; - elementsToRemove = getBlockElements(block.clone); - $animate.leave(elementsToRemove); - forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); - block.scope.$destroy(); - } - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0, length = collectionKeys.length; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]); - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - childScope = block.scope; - - nextNode = previousNode; - do { - nextNode = nextNode.nextSibling; - } while(nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - } else { - // new item which we don't know about - childScope = $scope.$new(); - } - - childScope[valueIdentifier] = value; - if (keyIdentifier) childScope[keyIdentifier] = key; - childScope.$index = index; - childScope.$first = (index === 0); - childScope.$last = (index === (arrayLength - 1)); - childScope.$middle = !(childScope.$first || childScope.$last); - // jshint bitwise: false - childScope.$odd = !(childScope.$even = (index&1) === 0); - // jshint bitwise: true - - if (!block.scope) { - $transclude(childScope, function(clone) { - clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = clone; - block.scope = childScope; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - }); - } - } - lastBlockMap = nextBlockMap; - }); - } - }; - - function getBlockStart(block) { - return block.clone[0]; - } - - function getBlockEnd(block) { - return block.clone[block.clone.length - 1]; - } -}]; - -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the ngShow attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When true, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngShow - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-show { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-show.ng-hide-add, - .animate-show.ng-hide-remove { - display:block!important; - } - - .animate-show.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value){ - $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the ngHide attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * ``` - * - * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When false, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngHide - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that - * you must also include the !important flag to override the display property so - * that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-hide.ng-hide-add, - .animate-hide.ng-hide-remove { - display:block!important; - } - - .animate-hide.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value){ - $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); - }); - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set" ng-click="myStyle={color:'red'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=set]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }, true); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * - * - * @scope - * @priority 800 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - } - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.element.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.element.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes, - selectedElements, - previousElements, - selectedScopes = []; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii = selectedScopes.length; - if(ii > 0) { - if(previousElements) { - for (i = 0; i < ii; i++) { - previousElements[i].remove(); - } - previousElements = null; - } - - previousElements = []; - for (i= 0; i<ii; i++) { - var selected = selectedElements[i]; - selectedScopes[i].$destroy(); - previousElements[i] = selected; - $animate.leave(selected, function() { - previousElements.splice(i, 1); - if(previousElements.length === 0) { - previousElements = null; - } - }); - } - } - - selectedElements = []; - selectedScopes = []; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - scope.$eval(attr.change); - forEach(selectedTranscludes, function(selectedTransclude) { - var selectedScope = scope.$new(); - selectedScopes.push(selectedScope); - selectedTransclude.transclude(selectedScope, function(caseElement) { - var anchor = selectedTransclude.element; - - selectedElements.push(caseElement); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict AC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transclude"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - } - - angular.module('transclude', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<div ng-transclude></div>' + - '</div>' - }; - }); - </script> - <div ng-controller="Ctrl"> - <input ng-model="title"><br> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension_expression. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead - * of {@link ng.directive:ngRepeat ngRepeat} when you want the - * `select` model to be bound to a non-string value. This is because an option element can only - * be bound to string values at present. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). - * - * @example - <example> - <file name="index.html"> - <script> - function MyCntrl($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.color = $scope.colors[2]; // red - } - </script> - <div ng-controller="MyCntrl"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="color" ng-options="c.name for c in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="color" ng-options="c.name for c in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="color" ng-options="c.name group by c.shade for c in colors"> - </select><br/> - - - Select <a href ng-click="color={name:'not in list'}">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:color} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':color.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red'); - element.all(by.select('color')).first().click(); - element.all(by.css('select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="color"]')).click(); - element.all(by.css('.nullable select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ terminal: true }); -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue == value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = copy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]]; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', function() { - scope.$apply(function() { - var optionGroup, - collection = valuesFn(scope) || [], - locals = {}, - key, value, optionElement, index, groupIndex, length, groupLength, trackIndex; - - if (multiple) { - value = []; - for (groupIndex = 0, groupLength = optionGroupsCache.length; - groupIndex < groupLength; - groupIndex++) { - // list of options for that group. (first item has the parent) - optionGroup = optionGroupsCache[groupIndex]; - - for(index = 1, length = optionGroup.length; index < length; index++) { - if ((optionElement = optionGroup[index].element)[0].selected) { - key = optionElement.val(); - if (keyName) locals[keyName] = key; - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) break; - } - } else { - locals[valueName] = collection[key]; - } - value.push(valueFn(scope, locals)); - } - } - } - } else { - key = selectElement.val(); - if (key == '?') { - value = undefined; - } else if (key === ''){ - value = null; - } else { - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) { - value = valueFn(scope, locals); - break; - } - } - } else { - locals[valueName] = collection[key]; - if (keyName) locals[keyName] = key; - value = valueFn(scope, locals); - } - } - // Update the null option's selected property here so $render cleans it up correctly - if (optionGroupsCache[0].length > 1) { - if (optionGroupsCache[0][1].id !== key) { - optionGroupsCache[0][1].selected = false; - } - } - } - ctrl.$setViewValue(value); - }); - }); - - ctrl.$render = render; - - // TODO(vojta): can't we optimize this ? - scope.$watch(render); - - function render() { - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - modelValue = ctrl.$modelValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - groupLength, length, - groupIndex, index, - locals = {}, - selected, - selectedSet = false, // nothing is selected yet - lastElement, - element, - label; - - if (multiple) { - if (trackFn && isArray(modelValue)) { - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { - locals[valueName] = modelValue[trackIndex]; - selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); - } - } else { - selectedSet = new HashMap(modelValue); - } - } - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - - key = index; - if (keyName) { - key = keys[index]; - if ( key.charAt(0) === '$' ) continue; - locals[keyName] = key; - } - - locals[valueName] = values[key]; - - optionGroupName = groupByFn(scope, locals) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - if (multiple) { - selected = isDefined( - selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) - ); - } else { - if (trackFn) { - var modelCast = {}; - modelCast[valueName] = modelValue; - selected = trackFn(scope, modelCast) === trackFn(scope, locals); - } else { - selected = modelValue === valueFn(scope, locals); - } - selectedSet = selectedSet || selected; // see if at least one item is selected - } - label = displayFn(scope, locals); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionGroup.push({ - // either the index into array or key from object - id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || modelValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!selectedSet}); - } else if (!selectedSet) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for(index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index+1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - lastElement.text(existingOption.label = option.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (existingOption.selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .attr('selected', option.selected) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while(existingOptions.length > index) { - existingOptions.pop().element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while(optionGroupsCache.length > groupIndex) { - optionGroupsCache.pop()[0].element.remove(); - } - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function (scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (selectCtrl && selectCtrl.databound) { - // For some reason Opera defaults to true and if not overridden this messes up the repeater. - // We don't want the view to drive the initialization of the model anyway. - element.prop('selected', false); - } else { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (newVal !== oldVal) selectCtrl.removeOption(oldVal); - selectCtrl.addOption(newVal); - }); - } else { - selectCtrl.addOption(attr.value); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: true -}); - -/** - * Setup file for the Scenario. - * Must be first in the compilation/bootstrap list. - */ - -// Public namespace -angular.scenario = angular.scenario || {}; - -/** - * Expose jQuery (e.g. for custom dsl extensions). - */ -angular.scenario.jQuery = _jQuery; - -/** - * Defines a new output format. - * - * @param {string} name the name of the new output format - * @param {function()} fn function(context, runner) that generates the output - */ -angular.scenario.output = angular.scenario.output || function(name, fn) { - angular.scenario.output[name] = fn; -}; - -/** - * Defines a new DSL statement. If your factory function returns a Future - * it's returned, otherwise the result is assumed to be a map of functions - * for chaining. Chained functions are subject to the same rules. - * - * Note: All functions on the chain are bound to the chain scope so values - * set on "this" in your statement function are available in the chained - * functions. - * - * @param {string} name The name of the statement - * @param {function()} fn Factory function(), return a function for - * the statement. - */ -angular.scenario.dsl = angular.scenario.dsl || function(name, fn) { - angular.scenario.dsl[name] = function() { - /* jshint -W040 *//* The dsl binds `this` for us when calling chained functions */ - function executeStatement(statement, args) { - var result = statement.apply(this, args); - if (angular.isFunction(result) || result instanceof angular.scenario.Future) - return result; - var self = this; - var chain = angular.extend({}, result); - angular.forEach(chain, function(value, name) { - if (angular.isFunction(value)) { - chain[name] = function() { - return executeStatement.call(self, value, arguments); - }; - } else { - chain[name] = value; - } - }); - return chain; - } - var statement = fn.apply(this, arguments); - return function() { - return executeStatement.call(this, statement, arguments); - }; - }; -}; - -/** - * Defines a new matcher for use with the expects() statement. The value - * this.actual (like in Jasmine) is available in your matcher to compare - * against. Your function should return a boolean. The future is automatically - * created for you. - * - * @param {string} name The name of the matcher - * @param {function()} fn The matching function(expected). - */ -angular.scenario.matcher = angular.scenario.matcher || function(name, fn) { - angular.scenario.matcher[name] = function(expected) { - var description = this.future.name + - (this.inverse ? ' not ' : ' ') + name + - ' ' + angular.toJson(expected); - var self = this; - this.addFuture('expect ' + description, - function(done) { - var error; - self.actual = self.future.value; - if ((self.inverse && fn.call(self, expected)) || - (!self.inverse && !fn.call(self, expected))) { - error = 'expected ' + description + - ' but was ' + angular.toJson(self.actual); - } - done(error); - }); - }; -}; - -/** - * Initialize the scenario runner and run ! - * - * Access global window and document object - * Access $runner through closure - * - * @param {Object=} config Config options - */ -angular.scenario.setUpAndRun = function(config) { - var href = window.location.href; - var body = _jQuery(document.body); - var output = []; - var objModel = new angular.scenario.ObjectModel($runner); - - if (config && config.scenario_output) { - output = config.scenario_output.split(','); - } - - angular.forEach(angular.scenario.output, function(fn, name) { - if (!output.length || indexOf(output,name) != -1) { - var context = body.append('<div></div>').find('div:last'); - context.attr('id', name); - fn.call({}, context, $runner, objModel); - } - }); - - if (!/^http/.test(href) && !/^https/.test(href)) { - body.append('<p id="system-error"></p>'); - body.find('#system-error').text( - 'Scenario runner must be run using http or https. The protocol ' + - href.split(':')[0] + ':// is not supported.' - ); - return; - } - - var appFrame = body.append('<div id="application"></div>').find('#application'); - var application = new angular.scenario.Application(appFrame); - - $runner.on('RunnerEnd', function() { - appFrame.css('display', 'none'); - appFrame.find('iframe').attr('src', 'about:blank'); - }); - - $runner.on('RunnerError', function(error) { - if (window.console) { - console.log(formatException(error)); - } else { - // Do something for IE - alert(error); - } - }); - - $runner.run(application); -}; - -/** - * Iterates through list with iterator function that must call the - * continueFunction to continue iterating. - * - * @param {Array} list list to iterate over - * @param {function()} iterator Callback function(value, continueFunction) - * @param {function()} done Callback function(error, result) called when - * iteration finishes or an error occurs. - */ -function asyncForEach(list, iterator, done) { - var i = 0; - function loop(error, index) { - if (index && index > i) { - i = index; - } - if (error || i >= list.length) { - done(error); - } else { - try { - iterator(list[i++], loop); - } catch (e) { - done(e); - } - } - } - loop(); -} - -/** - * Formats an exception into a string with the stack trace, but limits - * to a specific line length. - * - * @param {Object} error The exception to format, can be anything throwable - * @param {Number=} [maxStackLines=5] max lines of the stack trace to include - * default is 5. - */ -function formatException(error, maxStackLines) { - maxStackLines = maxStackLines || 5; - var message = error.toString(); - if (error.stack) { - var stack = error.stack.split('\n'); - if (stack[0].indexOf(message) === -1) { - maxStackLines++; - stack.unshift(error.message); - } - message = stack.slice(0, maxStackLines).join('\n'); - } - return message; -} - -/** - * Returns a function that gets the file name and line number from a - * location in the stack if available based on the call site. - * - * Note: this returns another function because accessing .stack is very - * expensive in Chrome. - * - * @param {Number} offset Number of stack lines to skip - */ -function callerFile(offset) { - var error = new Error(); - - return function() { - var line = (error.stack || '').split('\n')[offset]; - - // Clean up the stack trace line - if (line) { - if (line.indexOf('@') !== -1) { - // Firefox - line = line.substring(line.indexOf('@')+1); - } else { - // Chrome - line = line.substring(line.indexOf('(')+1).replace(')', ''); - } - } - - return line || ''; - }; -} - - -/** - * Don't use the jQuery trigger method since it works incorrectly. - * - * jQuery notifies listeners and then changes the state of a checkbox and - * does not create a real browser event. A real click changes the state of - * the checkbox and then notifies listeners. - * - * To work around this we instead use our own handler that fires a real event. - */ -(function(fn){ - // We need a handle to the original trigger function for input tests. - var parentTrigger = fn._originalTrigger = fn.trigger; - fn.trigger = function(type) { - if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) { - var processDefaults = []; - this.each(function(index, node) { - processDefaults.push(browserTrigger(node, type)); - }); - - // this is not compatible with jQuery - we return an array of returned values, - // so that scenario runner know whether JS code has preventDefault() of the event or not... - return processDefaults; - } - return parentTrigger.apply(this, arguments); - }; -})(_jQuery.fn); - -/** - * Finds all bindings with the substring match of name and returns an - * array of their values. - * - * @param {string} bindExp The name to match - * @return {Array.<string>} String of binding values - */ -_jQuery.fn.bindings = function(windowJquery, bindExp) { - var result = [], match, - bindSelector = '.ng-binding:visible'; - if (angular.isString(bindExp)) { - bindExp = bindExp.replace(/\s/g, ''); - match = function (actualExp) { - if (actualExp) { - actualExp = actualExp.replace(/\s/g, ''); - if (actualExp == bindExp) return true; - if (actualExp.indexOf(bindExp) === 0) { - return actualExp.charAt(bindExp.length) == '|'; - } - } - }; - } else if (bindExp) { - match = function(actualExp) { - return actualExp && bindExp.exec(actualExp); - }; - } else { - match = function(actualExp) { - return !!actualExp; - }; - } - var selection = this.find(bindSelector); - if (this.is(bindSelector)) { - selection = selection.add(this); - } - - function push(value) { - if (value === undefined) { - value = ''; - } else if (typeof value != 'string') { - value = angular.toJson(value); - } - result.push('' + value); - } - - selection.each(function() { - var element = windowJquery(this), - binding; - if (binding = element.data('$binding')) { - if (typeof binding == 'string') { - if (match(binding)) { - push(element.scope().$eval(binding)); - } - } else { - if (!angular.isArray(binding)) { - binding = [binding]; - } - for(var fns, j=0, jj=binding.length; j<jj; j++) { - fns = binding[j]; - if (fns.parts) { - fns = fns.parts; - } else { - fns = [fns]; - } - for (var scope, fn, i = 0, ii = fns.length; i < ii; i++) { - if(match((fn = fns[i]).exp)) { - push(fn(scope = scope || element.scope())); - } - } - } - } - } - }); - return result; -}; - -(function() { - var msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1], 10); - - function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for ( var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; - } - - - - /** - * Triggers a browser event. Attempts to choose the right event if one is - * not specified. - * - * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement - * @param {string} eventType Optional event type - * @param {Object=} eventData An optional object which contains additional event data (such as x,y - * coordinates, keys, etc...) that are passed into the event when triggered - */ - window.browserTrigger = function browserTrigger(element, eventType, eventData) { - if (element && !element.nodeName) element = element[0]; - if (!element) return; - - eventData = eventData || {}; - var keys = eventData.keys; - var x = eventData.x; - var y = eventData.y; - - var inputType = (element.type) ? element.type.toLowerCase() : null, - nodeName = element.nodeName.toLowerCase(); - - if (!eventType) { - eventType = { - 'text': 'change', - 'textarea': 'change', - 'hidden': 'change', - 'password': 'change', - 'button': 'click', - 'submit': 'click', - 'reset': 'click', - 'image': 'click', - 'checkbox': 'click', - 'radio': 'click', - 'select-one': 'change', - 'select-multiple': 'change', - '_default_': 'click' - }[inputType || '_default_']; - } - - if (nodeName == 'option') { - element.parentNode.value = element.value; - element = element.parentNode; - eventType = 'change'; - } - - keys = keys || []; - function pressed(key) { - return indexOf(keys, key) !== -1; - } - - if (msie < 9) { - if (inputType == 'radio' || inputType == 'checkbox') { - element.checked = !element.checked; - } - - // WTF!!! Error: Unspecified error. - // Don't know why, but some elements when detached seem to be in inconsistent state and - // calling .fireEvent() on them will result in very unhelpful error (Error: Unspecified error) - // forcing the browser to compute the element position (by reading its CSS) - // puts the element in consistent state. - element.style.posLeft; - - // TODO(vojta): create event objects with pressed keys to get it working on IE<9 - var ret = element.fireEvent('on' + eventType); - if (inputType == 'submit') { - while(element) { - if (element.nodeName.toLowerCase() == 'form') { - element.fireEvent('onsubmit'); - break; - } - element = element.parentNode; - } - } - return ret; - } else { - var evnt; - if(/transitionend/.test(eventType)) { - if(window.WebKitTransitionEvent) { - evnt = new WebKitTransitionEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new TransitionEvent(eventType, eventData); - } - catch(e) { - evnt = document.createEvent('TransitionEvent'); - evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else if(/animationend/.test(eventType)) { - if(window.WebKitAnimationEvent) { - evnt = new WebKitAnimationEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new AnimationEvent(eventType, eventData); - } - catch(e) { - evnt = document.createEvent('AnimationEvent'); - evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else { - evnt = document.createEvent('MouseEvents'); - x = x || 0; - y = y || 0; - evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), - pressed('alt'), pressed('shift'), pressed('meta'), 0, element); - } - - /* we're unable to change the timeStamp value directly so this - * is only here to allow for testing where the timeStamp value is - * read */ - evnt.$manualTimeStamp = eventData.timeStamp; - - if(!evnt) return; - - var originalPreventDefault = evnt.preventDefault, - appWindow = element.ownerDocument.defaultView, - fakeProcessDefault = true, - finalProcessDefault, - angular = appWindow.angular || {}; - - // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208 - angular['ff-684208-preventDefault'] = false; - evnt.preventDefault = function() { - fakeProcessDefault = false; - return originalPreventDefault.apply(evnt, arguments); - }; - - element.dispatchEvent(evnt); - finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); - - delete angular['ff-684208-preventDefault']; - - return finalProcessDefault; - } - }; -}()); - -/** - * Represents the application currently being tested and abstracts usage - * of iframes or separate windows. - * - * @param {Object} context jQuery wrapper around HTML context. - */ -angular.scenario.Application = function(context) { - this.context = context; - context.append( - '<h2>Current URL: <a href="about:blank">None</a></h2>' + - '<div id="test-frames"></div>' - ); -}; - -/** - * Gets the jQuery collection of frames. Don't use this directly because - * frames may go stale. - * - * @private - * @return {Object} jQuery collection - */ -angular.scenario.Application.prototype.getFrame_ = function() { - return this.context.find('#test-frames iframe:last'); -}; - -/** - * Gets the window of the test runner frame. Always favor executeAction() - * instead of this method since it prevents you from getting a stale window. - * - * @private - * @return {Object} the window of the frame - */ -angular.scenario.Application.prototype.getWindow_ = function() { - var contentWindow = this.getFrame_().prop('contentWindow'); - if (!contentWindow) - throw 'Frame window is not accessible.'; - return contentWindow; -}; - -/** - * Changes the location of the frame. - * - * @param {string} url The URL. If it begins with a # then only the - * hash of the page is changed. - * @param {function()} loadFn function($window, $document) Called when frame loads. - * @param {function()} errorFn function(error) Called if any error when loading. - */ -angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) { - var self = this; - var frame = self.getFrame_(); - //TODO(esprehn): Refactor to use rethrow() - errorFn = errorFn || function(e) { throw e; }; - if (url === 'about:blank') { - errorFn('Sandbox Error: Navigating to about:blank is not allowed.'); - } else if (url.charAt(0) === '#') { - url = frame.attr('src').split('#')[0] + url; - frame.attr('src', url); - self.executeAction(loadFn); - } else { - frame.remove(); - self.context.find('#test-frames').append('<iframe>'); - frame = self.getFrame_(); - - frame.load(function() { - frame.off(); - try { - var $window = self.getWindow_(); - - if ($window.angular) { - // Disable animations - $window.angular.resumeBootstrap([['$provide', function($provide) { - return ['$animate', function($animate) { - $animate.enabled(false); - }]; - }]]); - } - - self.executeAction(loadFn); - } catch (e) { - errorFn(e); - } - }).attr('src', url); - - // for IE compatibility set the name *after* setting the frame url - frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!"; - } - self.context.find('> h2 a').attr('href', url).text(url); -}; - -/** - * Executes a function in the context of the tested application. Will wait - * for all pending angular xhr requests before executing. - * - * @param {function()} action The callback to execute. function($window, $document) - * $document is a jQuery wrapped document. - */ -angular.scenario.Application.prototype.executeAction = function(action) { - var self = this; - var $window = this.getWindow_(); - if (!$window.document) { - throw 'Sandbox Error: Application document not accessible.'; - } - if (!$window.angular) { - return action.call(this, $window, _jQuery($window.document)); - } - angularInit($window.document, function(element) { - var $injector = $window.angular.element(element).injector(); - var $element = _jQuery(element); - - $element.injector = function() { - return $injector; - }; - - $injector.invoke(function($browser){ - $browser.notifyWhenNoOutstandingRequests(function() { - action.call(self, $window, $element); - }); - }); - }); -}; - -/** - * The representation of define blocks. Don't used directly, instead use - * define() in your tests. - * - * @param {string} descName Name of the block - * @param {Object} parent describe or undefined if the root. - */ -angular.scenario.Describe = function(descName, parent) { - this.only = parent && parent.only; - this.beforeEachFns = []; - this.afterEachFns = []; - this.its = []; - this.children = []; - this.name = descName; - this.parent = parent; - this.id = angular.scenario.Describe.id++; - - /** - * Calls all before functions. - */ - var beforeEachFns = this.beforeEachFns; - this.setupBefore = function() { - if (parent) parent.setupBefore.call(this); - angular.forEach(beforeEachFns, function(fn) { fn.call(this); }, this); - }; - - /** - * Calls all after functions. - */ - var afterEachFns = this.afterEachFns; - this.setupAfter = function() { - angular.forEach(afterEachFns, function(fn) { fn.call(this); }, this); - if (parent) parent.setupAfter.call(this); - }; -}; - -// Shared Unique ID generator for every describe block -angular.scenario.Describe.id = 0; - -// Shared Unique ID generator for every it (spec) -angular.scenario.Describe.specId = 0; - -/** - * Defines a block to execute before each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.beforeEach = function(body) { - this.beforeEachFns.push(body); -}; - -/** - * Defines a block to execute after each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.afterEach = function(body) { - this.afterEachFns.push(body); -}; - -/** - * Creates a new describe block that's a child of this one. - * - * @param {string} name Name of the block. Appended to the parent block's name. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.describe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - this.children.push(child); - body.call(child); -}; - -/** - * Same as describe() but makes ddescribe blocks the only to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.ddescribe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - child.only = true; - this.children.push(child); - body.call(child); -}; - -/** - * Use to disable a describe block. - */ -angular.scenario.Describe.prototype.xdescribe = angular.noop; - -/** - * Defines a test. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.it = function(name, body) { - this.its.push({ - id: angular.scenario.Describe.specId++, - definition: this, - only: this.only, - name: name, - before: this.setupBefore, - body: body, - after: this.setupAfter - }); -}; - -/** - * Same as it() but makes iit tests the only test to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.iit = function(name, body) { - this.it.apply(this, arguments); - this.its[this.its.length-1].only = true; -}; - -/** - * Use to disable a test block. - */ -angular.scenario.Describe.prototype.xit = angular.noop; - -/** - * Gets an array of functions representing all the tests (recursively). - * that can be executed with SpecRunner's. - * - * @return {Array<Object>} Array of it blocks { - * definition : Object // parent Describe - * only: boolean - * name: string - * before: Function - * body: Function - * after: Function - * } - */ -angular.scenario.Describe.prototype.getSpecs = function() { - var specs = arguments[0] || []; - angular.forEach(this.children, function(child) { - child.getSpecs(specs); - }); - angular.forEach(this.its, function(it) { - specs.push(it); - }); - var only = []; - angular.forEach(specs, function(it) { - if (it.only) { - only.push(it); - } - }); - return (only.length && only) || specs; -}; - -/** - * A future action in a spec. - * - * @param {string} name name of the future action - * @param {function()} behavior future callback(error, result) - * @param {function()} line Optional. function that returns the file/line number. - */ -angular.scenario.Future = function(name, behavior, line) { - this.name = name; - this.behavior = behavior; - this.fulfilled = false; - this.value = undefined; - this.parser = angular.identity; - this.line = line || function() { return ''; }; -}; - -/** - * Executes the behavior of the closure. - * - * @param {function()} doneFn Callback function(error, result) - */ -angular.scenario.Future.prototype.execute = function(doneFn) { - var self = this; - this.behavior(function(error, result) { - self.fulfilled = true; - if (result) { - try { - result = self.parser(result); - } catch(e) { - error = e; - } - } - self.value = error || result; - doneFn(error, result); - }); -}; - -/** - * Configures the future to convert it's final with a function fn(value) - * - * @param {function()} fn function(value) that returns the parsed value - */ -angular.scenario.Future.prototype.parsedWith = function(fn) { - this.parser = fn; - return this; -}; - -/** - * Configures the future to parse it's final value from JSON - * into objects. - */ -angular.scenario.Future.prototype.fromJson = function() { - return this.parsedWith(angular.fromJson); -}; - -/** - * Configures the future to convert it's final value from objects - * into JSON. - */ -angular.scenario.Future.prototype.toJson = function() { - return this.parsedWith(angular.toJson); -}; - -/** - * Maintains an object tree from the runner events. - * - * @param {Object} runner The scenario Runner instance to connect to. - * - * TODO(esprehn): Every output type creates one of these, but we probably - * want one global shared instance. Need to handle events better too - * so the HTML output doesn't need to do spec model.getSpec(spec.id) - * silliness. - * - * TODO(vojta) refactor on, emit methods (from all objects) - use inheritance - */ -angular.scenario.ObjectModel = function(runner) { - var self = this; - - this.specMap = {}; - this.listeners = []; - this.value = { - name: '', - children: {} - }; - - runner.on('SpecBegin', function(spec) { - var block = self.value, - definitions = []; - - angular.forEach(self.getDefinitionPath(spec), function(def) { - if (!block.children[def.name]) { - block.children[def.name] = { - id: def.id, - name: def.name, - children: {}, - specs: {} - }; - } - block = block.children[def.name]; - definitions.push(def.name); - }); - - var it = self.specMap[spec.id] = - block.specs[spec.name] = - new angular.scenario.ObjectModel.Spec(spec.id, spec.name, definitions); - - // forward the event - self.emit('SpecBegin', it); - }); - - runner.on('SpecError', function(spec, error) { - var it = self.getSpec(spec.id); - it.status = 'error'; - it.error = error; - - // forward the event - self.emit('SpecError', it, error); - }); - - runner.on('SpecEnd', function(spec) { - var it = self.getSpec(spec.id); - complete(it); - - // forward the event - self.emit('SpecEnd', it); - }); - - runner.on('StepBegin', function(spec, step) { - var it = self.getSpec(spec.id); - step = new angular.scenario.ObjectModel.Step(step.name); - it.steps.push(step); - - // forward the event - self.emit('StepBegin', it, step); - }); - - runner.on('StepEnd', function(spec) { - var it = self.getSpec(spec.id); - var step = it.getLastStep(); - if (step.name !== step.name) - throw 'Events fired in the wrong order. Step names don\'t match.'; - complete(step); - - // forward the event - self.emit('StepEnd', it, step); - }); - - runner.on('StepFailure', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('failure', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepFailure', it, modelStep, error); - }); - - runner.on('StepError', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('error', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepError', it, modelStep, error); - }); - - runner.on('RunnerBegin', function() { - self.emit('RunnerBegin'); - }); - runner.on('RunnerEnd', function() { - self.emit('RunnerEnd'); - }); - - function complete(item) { - item.endTime = new Date().getTime(); - item.duration = item.endTime - item.startTime; - item.status = item.status || 'success'; - } -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName Name of the event to add a handler for - * @param {function()} listener Function that will be called when event is fired - */ -angular.scenario.ObjectModel.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.ObjectModel.prototype.emit = function(eventName) { - var self = this, - args = Array.prototype.slice.call(arguments, 1); - - eventName = eventName.toLowerCase(); - - if (this.listeners[eventName]) { - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); - } -}; - -/** - * Computes the path of definition describe blocks that wrap around - * this spec. - * - * @param spec Spec to compute the path for. - * @return {Array<Describe>} The describe block path - */ -angular.scenario.ObjectModel.prototype.getDefinitionPath = function(spec) { - var path = []; - var currentDefinition = spec.definition; - while (currentDefinition && currentDefinition.name) { - path.unshift(currentDefinition); - currentDefinition = currentDefinition.parent; - } - return path; -}; - -/** - * Gets a spec by id. - * - * @param {string} id The id of the spec to get the object for. - * @return {Object} the Spec instance - */ -angular.scenario.ObjectModel.prototype.getSpec = function(id) { - return this.specMap[id]; -}; - -/** - * A single it block. - * - * @param {string} id Id of the spec - * @param {string} name Name of the spec - * @param {Array<string>=} definitionNames List of all describe block names that wrap this spec - */ -angular.scenario.ObjectModel.Spec = function(id, name, definitionNames) { - this.id = id; - this.name = name; - this.startTime = new Date().getTime(); - this.steps = []; - this.fullDefinitionName = (definitionNames || []).join(' '); -}; - -/** - * Adds a new step to the Spec. - * - * @param {string} name Name of the step (really name of the future) - * @return {Object} the added step - */ -angular.scenario.ObjectModel.Spec.prototype.addStep = function(name) { - var step = new angular.scenario.ObjectModel.Step(name); - this.steps.push(step); - return step; -}; - -/** - * Gets the most recent step. - * - * @return {Object} the step - */ -angular.scenario.ObjectModel.Spec.prototype.getLastStep = function() { - return this.steps[this.steps.length-1]; -}; - -/** - * Set status of the Spec from given Step - * - * @param {angular.scenario.ObjectModel.Step} step - */ -angular.scenario.ObjectModel.Spec.prototype.setStatusFromStep = function(step) { - if (!this.status || step.status == 'error') { - this.status = step.status; - this.error = step.error; - this.line = step.line; - } -}; - -/** - * A single step inside a Spec. - * - * @param {string} name Name of the step - */ -angular.scenario.ObjectModel.Step = function(name) { - this.name = name; - this.startTime = new Date().getTime(); -}; - -/** - * Helper method for setting all error status related properties - * - * @param {string} status - * @param {string} error - * @param {string} line - */ -angular.scenario.ObjectModel.Step.prototype.setErrorStatus = function(status, error, line) { - this.status = status; - this.error = error; - this.line = line; -}; - -/** - * Runner for scenarios - * - * Has to be initialized before any test is loaded, - * because it publishes the API into window (global space). - */ -angular.scenario.Runner = function($window) { - this.listeners = []; - this.$window = $window; - this.rootDescribe = new angular.scenario.Describe(); - this.currentDescribe = this.rootDescribe; - this.api = { - it: this.it, - iit: this.iit, - xit: angular.noop, - describe: this.describe, - ddescribe: this.ddescribe, - xdescribe: angular.noop, - beforeEach: this.beforeEach, - afterEach: this.afterEach - }; - angular.forEach(this.api, angular.bind(this, function(fn, key) { - this.$window[key] = angular.bind(this, fn); - })); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.Runner.prototype.emit = function(eventName) { - var self = this; - var args = Array.prototype.slice.call(arguments, 1); - eventName = eventName.toLowerCase(); - if (!this.listeners[eventName]) - return; - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName The name of the event to add a handler for - * @param {string} listener The fn(...) that takes the extra arguments from emit() - */ -angular.scenario.Runner.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Defines a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.describe = function(name, body) { - var self = this; - this.currentDescribe.describe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Same as describe, but makes ddescribe the only blocks to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.ddescribe = function(name, body) { - var self = this; - this.currentDescribe.ddescribe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Defines a test in a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.it = function(name, body) { - this.currentDescribe.it(name, body); -}; - -/** - * Same as it, but makes iit tests the only tests to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.iit = function(name, body) { - this.currentDescribe.iit(name, body); -}; - -/** - * Defines a function to be called before each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.beforeEach = function(body) { - this.currentDescribe.beforeEach(body); -}; - -/** - * Defines a function to be called after each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.afterEach = function(body) { - this.currentDescribe.afterEach(body); -}; - -/** - * Creates a new spec runner. - * - * @private - * @param {Object} scope parent scope - */ -angular.scenario.Runner.prototype.createSpecRunner_ = function(scope) { - var child = scope.$new(); - var Cls = angular.scenario.SpecRunner; - - // Export all the methods to child scope manually as now we don't mess controllers with scopes - // TODO(vojta): refactor scenario runner so that these objects are not tightly coupled as current - for (var name in Cls.prototype) - child[name] = angular.bind(child, Cls.prototype[name]); - - Cls.call(child); - return child; -}; - -/** - * Runs all the loaded tests with the specified runner class on the - * provided application. - * - * @param {angular.scenario.Application} application App to remote control. - */ -angular.scenario.Runner.prototype.run = function(application) { - var self = this; - var $root = angular.injector(['ng']).get('$rootScope'); - angular.extend($root, this); - angular.forEach(angular.scenario.Runner.prototype, function(fn, name) { - $root[name] = angular.bind(self, fn); - }); - $root.application = application; - $root.emit('RunnerBegin'); - asyncForEach(this.rootDescribe.getSpecs(), function(spec, specDone) { - var dslCache = {}; - var runner = self.createSpecRunner_($root); - angular.forEach(angular.scenario.dsl, function(fn, key) { - dslCache[key] = fn.call($root); - }); - angular.forEach(angular.scenario.dsl, function(fn, key) { - self.$window[key] = function() { - var line = callerFile(3); - var scope = runner.$new(); - - // Make the dsl accessible on the current chain - scope.dsl = {}; - angular.forEach(dslCache, function(fn, key) { - scope.dsl[key] = function() { - return dslCache[key].apply(scope, arguments); - }; - }); - - // Make these methods work on the current chain - scope.addFuture = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFuture.apply(scope, arguments); - }; - scope.addFutureAction = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFutureAction.apply(scope, arguments); - }; - - return scope.dsl[key].apply(scope, arguments); - }; - }); - runner.run(spec, function() { - runner.$destroy(); - specDone.apply(this, arguments); - }); - }, - function(error) { - if (error) { - self.emit('RunnerError', error); - } - self.emit('RunnerEnd'); - }); -}; - -/** - * This class is the "this" of the it/beforeEach/afterEach method. - * Responsibilities: - * - "this" for it/beforeEach/afterEach - * - keep state for single it/beforeEach/afterEach execution - * - keep track of all of the futures to execute - * - run single spec (execute each future) - */ -angular.scenario.SpecRunner = function() { - this.futures = []; - this.afterIndex = 0; -}; - -/** - * Executes a spec which is an it block with associated before/after functions - * based on the describe nesting. - * - * @param {Object} spec A spec object - * @param {function()} specDone function that is called when the spec finishes, - * of the form `Function(error, index)` - */ -angular.scenario.SpecRunner.prototype.run = function(spec, specDone) { - var self = this; - this.spec = spec; - - this.emit('SpecBegin', spec); - - try { - spec.before.call(this); - spec.body.call(this); - this.afterIndex = this.futures.length; - spec.after.call(this); - } catch (e) { - this.emit('SpecError', spec, e); - this.emit('SpecEnd', spec); - specDone(); - return; - } - - var handleError = function(error, done) { - if (self.error) { - return done(); - } - self.error = true; - done(null, self.afterIndex); - }; - - asyncForEach( - this.futures, - function(future, futureDone) { - self.step = future; - self.emit('StepBegin', spec, future); - try { - future.execute(function(error) { - if (error) { - self.emit('StepFailure', spec, future, error); - self.emit('StepEnd', spec, future); - return handleError(error, futureDone); - } - self.emit('StepEnd', spec, future); - self.$window.setTimeout(function() { futureDone(); }, 0); - }); - } catch (e) { - self.emit('StepError', spec, future, e); - self.emit('StepEnd', spec, future); - handleError(e, futureDone); - } - }, - function(e) { - if (e) { - self.emit('SpecError', spec, e); - } - self.emit('SpecEnd', spec); - // Call done in a timeout so exceptions don't recursively - // call this function - self.$window.setTimeout(function() { specDone(); }, 0); - } - ); -}; - -/** - * Adds a new future action. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFuture = function(name, behavior, line) { - var future = new angular.scenario.Future(name, angular.bind(this, behavior), line); - this.futures.push(future); - return future; -}; - -/** - * Adds a new future action to be executed on the application window. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, line) { - var self = this; - var NG = /\[ng\\\:/; - return this.addFuture(name, function(done) { - this.application.executeAction(function($window, $document) { - - //TODO(esprehn): Refactor this so it doesn't need to be in here. - $document.elements = function(selector) { - var args = Array.prototype.slice.call(arguments, 1); - selector = (self.selector || '') + ' ' + (selector || ''); - selector = _jQuery.trim(selector) || '*'; - angular.forEach(args, function(value, index) { - selector = selector.replace('$' + (index + 1), value); - }); - var result = $document.find(selector); - if (selector.match(NG)) { - angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index){ - result = result.add(selector.replace(NG, value), $document); - }); - } - if (!result.length) { - throw { - type: 'selector', - message: 'Selector ' + selector + ' did not match any elements.' - }; - } - - return result; - }; - - try { - behavior.call(self, $window, $document, done); - } catch(e) { - if (e.type && e.type === 'selector') { - done(e.message); - } else { - throw e; - } - } - }); - }, line); -}; - -/** - * Shared DSL statements that are useful to all scenarios. - */ - - /** - * Usage: - * pause() pauses until you call resume() in the console - */ -angular.scenario.dsl('pause', function() { - return function() { - return this.addFuture('pausing for you to resume', function(done) { - this.emit('InteractivePause', this.spec, this.step); - this.$window.resume = function() { done(); }; - }); - }; -}); - -/** - * Usage: - * sleep(seconds) pauses the test for specified number of seconds - */ -angular.scenario.dsl('sleep', function() { - return function(time) { - return this.addFuture('sleep for ' + time + ' seconds', function(done) { - this.$window.setTimeout(function() { done(null, time * 1000); }, time * 1000); - }); - }; -}); - -/** - * Usage: - * browser().navigateTo(url) Loads the url into the frame - * browser().navigateTo(url, fn) where fn(url) is called and returns the URL to navigate to - * browser().reload() refresh the page (reload the same URL) - * browser().window.href() window.location.href - * browser().window.path() window.location.pathname - * browser().window.search() window.location.search - * browser().window.hash() window.location.hash without # prefix - * browser().location().url() see ng.$location#url - * browser().location().path() see ng.$location#path - * browser().location().search() see ng.$location#search - * browser().location().hash() see ng.$location#hash - */ -angular.scenario.dsl('browser', function() { - var chain = {}; - - chain.navigateTo = function(url, delegate) { - var application = this.application; - return this.addFuture("browser navigate to '" + url + "'", function(done) { - if (delegate) { - url = delegate.call(this, url); - } - application.navigateTo(url, function() { - done(null, url); - }, done); - }); - }; - - chain.reload = function() { - var application = this.application; - return this.addFutureAction('browser reload', function($window, $document, done) { - var href = $window.location.href; - application.navigateTo(href, function() { - done(null, href); - }, done); - }); - }; - - chain.window = function() { - var api = {}; - - api.href = function() { - return this.addFutureAction('window.location.href', function($window, $document, done) { - done(null, $window.location.href); - }); - }; - - api.path = function() { - return this.addFutureAction('window.location.path', function($window, $document, done) { - done(null, $window.location.pathname); - }); - }; - - api.search = function() { - return this.addFutureAction('window.location.search', function($window, $document, done) { - done(null, $window.location.search); - }); - }; - - api.hash = function() { - return this.addFutureAction('window.location.hash', function($window, $document, done) { - done(null, $window.location.hash.replace('#', '')); - }); - }; - - return api; - }; - - chain.location = function() { - var api = {}; - - api.url = function() { - return this.addFutureAction('$location.url()', function($window, $document, done) { - done(null, $document.injector().get('$location').url()); - }); - }; - - api.path = function() { - return this.addFutureAction('$location.path()', function($window, $document, done) { - done(null, $document.injector().get('$location').path()); - }); - }; - - api.search = function() { - return this.addFutureAction('$location.search()', function($window, $document, done) { - done(null, $document.injector().get('$location').search()); - }); - }; - - api.hash = function() { - return this.addFutureAction('$location.hash()', function($window, $document, done) { - done(null, $document.injector().get('$location').hash()); - }); - }; - - return api; - }; - - return function() { - return chain; - }; -}); - -/** - * Usage: - * expect(future).{matcher} where matcher is one of the matchers defined - * with angular.scenario.matcher - * - * ex. expect(binding("name")).toEqual("Elliott") - */ -angular.scenario.dsl('expect', function() { - var chain = angular.extend({}, angular.scenario.matcher); - - chain.not = function() { - this.inverse = true; - return chain; - }; - - return function(future) { - this.future = future; - return chain; - }; -}); - -/** - * Usage: - * using(selector, label) scopes the next DSL element selection - * - * ex. - * using('#foo', "'Foo' text field").input('bar') - */ -angular.scenario.dsl('using', function() { - return function(selector, label) { - this.selector = _jQuery.trim((this.selector||'') + ' ' + selector); - if (angular.isString(label) && label.length) { - this.label = label + ' ( ' + this.selector + ' )'; - } else { - this.label = this.selector; - } - return this.dsl; - }; -}); - -/** - * Usage: - * binding(name) returns the value of the first matching binding - */ -angular.scenario.dsl('binding', function() { - return function(name) { - return this.addFutureAction("select binding '" + name + "'", - function($window, $document, done) { - var values = $document.elements().bindings($window.angular.element, name); - if (!values.length) { - return done("Binding selector '" + name + "' did not match."); - } - done(null, values[0]); - }); - }; -}); - -/** - * Usage: - * input(name).enter(value) enters value in input with specified name - * input(name).check() checks checkbox - * input(name).select(value) selects the radio button with specified name/value - * input(name).val() returns the value of the input. - */ -angular.scenario.dsl('input', function() { - var chain = {}; - var supportInputEvent = 'oninput' in document.createElement('div') && msie != 9; - - chain.enter = function(value, event) { - return this.addFutureAction("input '" + this.name + "' enter '" + value + "'", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - input.val(value); - input.trigger(event || (supportInputEvent ? 'input' : 'change')); - done(); - }); - }; - - chain.check = function() { - return this.addFutureAction("checkbox '" + this.name + "' toggle", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':checkbox'); - input.trigger('click'); - done(); - }); - }; - - chain.select = function(value) { - return this.addFutureAction("radio button '" + this.name + "' toggle '" + value + "'", - function($window, $document, done) { - var input = $document. - elements('[ng\\:model="$1"][value="$2"]', this.name, value).filter(':radio'); - input.trigger('click'); - done(); - }); - }; - - chain.val = function() { - return this.addFutureAction("return input val", function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - done(null,input.val()); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - - -/** - * Usage: - * repeater('#products table', 'Product List').count() number of rows - * repeater('#products table', 'Product List').row(1) all bindings in row as an array - * repeater('#products table', 'Product List').column('product.name') all values across all rows - * in an array - */ -angular.scenario.dsl('repeater', function() { - var chain = {}; - - chain.count = function() { - return this.addFutureAction("repeater '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.column = function(binding) { - return this.addFutureAction("repeater '" + this.label + "' column '" + binding + "'", - function($window, $document, done) { - done(null, $document.elements().bindings($window.angular.element, binding)); - }); - }; - - chain.row = function(index) { - return this.addFutureAction("repeater '" + this.label + "' row '" + index + "'", - function($window, $document, done) { - var matches = $document.elements().slice(index, index + 1); - if (!matches.length) - return done('row ' + index + ' out of bounds'); - done(null, matches.bindings($window.angular.element)); - }); - }; - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Usage: - * select(name).option('value') select one option - * select(name).options('value1', 'value2', ...) select options from a multi select - */ -angular.scenario.dsl('select', function() { - var chain = {}; - - chain.option = function(value) { - return this.addFutureAction("select '" + this.name + "' option '" + value + "'", - function($window, $document, done) { - var select = $document.elements('select[ng\\:model="$1"]', this.name); - var option = select.find('option[value="' + value + '"]'); - if (option.length) { - select.val(value); - } else { - option = select.find('option').filter(function(){ - return _jQuery(this).text() === value; - }); - if (!option.length) { - option = select.find('option:contains("' + value + '")'); - } - if (option.length) { - select.val(option.val()); - } else { - return done("option '" + value + "' not found"); - } - } - select.trigger('change'); - done(); - }); - }; - - chain.options = function() { - var values = arguments; - return this.addFutureAction("select '" + this.name + "' options '" + values + "'", - function($window, $document, done) { - var select = $document.elements('select[multiple][ng\\:model="$1"]', this.name); - select.val(values); - select.trigger('change'); - done(); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - -/** - * Usage: - * element(selector, label).count() get the number of elements that match selector - * element(selector, label).click() clicks an element - * element(selector, label).mouseover() mouseover an element - * element(selector, label).mousedown() mousedown an element - * element(selector, label).mouseup() mouseup an element - * element(selector, label).query(fn) executes fn(selectedElements, done) - * element(selector, label).{method}() gets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(value) sets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(key) gets the value (as defined by jQuery, ex. attr) - * element(selector, label).{method}(key, value) sets the value (as defined by jQuery, ex. attr) - */ -angular.scenario.dsl('element', function() { - var KEY_VALUE_METHODS = ['attr', 'css', 'prop']; - var VALUE_METHODS = [ - 'val', 'text', 'html', 'height', 'innerHeight', 'outerHeight', 'width', - 'innerWidth', 'outerWidth', 'position', 'scrollLeft', 'scrollTop', 'offset' - ]; - var chain = {}; - - chain.count = function() { - return this.addFutureAction("element '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.click = function() { - return this.addFutureAction("element '" + this.label + "' click", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('click')[0]; - - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.dblclick = function() { - return this.addFutureAction("element '" + this.label + "' dblclick", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('dblclick')[0]; - - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.mouseover = function() { - return this.addFutureAction("element '" + this.label + "' mouseover", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseover'); - done(); - }); - }; - - chain.mousedown = function() { - return this.addFutureAction("element '" + this.label + "' mousedown", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mousedown'); - done(); - }); - }; - - chain.mouseup = function() { - return this.addFutureAction("element '" + this.label + "' mouseup", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseup'); - done(); - }); - }; - - chain.query = function(fn) { - return this.addFutureAction('element ' + this.label + ' custom query', - function($window, $document, done) { - fn.call(this, $document.elements(), done); - }); - }; - - angular.forEach(KEY_VALUE_METHODS, function(methodName) { - chain[methodName] = function(name, value) { - var args = arguments, - futureName = (args.length == 1) - ? "element '" + this.label + "' get " + methodName + " '" + name + "'" - : "element '" + this.label + "' set " + methodName + " '" + name + "' to " + "'" + - value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - angular.forEach(VALUE_METHODS, function(methodName) { - chain[methodName] = function(value) { - var args = arguments, - futureName = (args.length === 0) - ? "element '" + this.label + "' " + methodName - : "element '" + this.label + "' set " + methodName + " to '" + value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Matchers for implementing specs. Follows the Jasmine spec conventions. - */ - -angular.scenario.matcher('toEqual', function(expected) { - return angular.equals(this.actual, expected); -}); - -angular.scenario.matcher('toBe', function(expected) { - return this.actual === expected; -}); - -angular.scenario.matcher('toBeDefined', function() { - return angular.isDefined(this.actual); -}); - -angular.scenario.matcher('toBeTruthy', function() { - return this.actual; -}); - -angular.scenario.matcher('toBeFalsy', function() { - return !this.actual; -}); - -angular.scenario.matcher('toMatch', function(expected) { - return new RegExp(expected).test(this.actual); -}); - -angular.scenario.matcher('toBeNull', function() { - return this.actual === null; -}); - -angular.scenario.matcher('toContain', function(expected) { - return includes(this.actual, expected); -}); - -angular.scenario.matcher('toBeLessThan', function(expected) { - return this.actual < expected; -}); - -angular.scenario.matcher('toBeGreaterThan', function(expected) { - return this.actual > expected; -}); - -/** - * User Interface for the Scenario Runner. - * - * TODO(esprehn): This should be refactored now that ObjectModel exists - * to use angular bindings for the UI. - */ -angular.scenario.output('html', function(context, runner, model) { - var specUiMap = {}, - lastStepUiMap = {}; - - context.append( - '<div id="header">' + - ' <h1><span class="angular">AngularJS</span>: Scenario Test Runner</h1>' + - ' <ul id="status-legend" class="status-display">' + - ' <li class="status-error">0 Errors</li>' + - ' <li class="status-failure">0 Failures</li>' + - ' <li class="status-success">0 Passed</li>' + - ' </ul>' + - '</div>' + - '<div id="specs">' + - ' <div class="test-children"></div>' + - '</div>' - ); - - runner.on('InteractivePause', function(spec) { - var ui = lastStepUiMap[spec.id]; - ui.find('.test-title'). - html('paused... <a href="javascript:resume()">resume</a> when ready.'); - }); - - runner.on('SpecBegin', function(spec) { - var ui = findContext(spec); - ui.find('> .tests').append( - '<li class="status-pending test-it"></li>' - ); - ui = ui.find('> .tests li:last'); - ui.append( - '<div class="test-info">' + - ' <p class="test-title">' + - ' <span class="timer-result"></span>' + - ' <span class="test-name"></span>' + - ' </p>' + - '</div>' + - '<div class="scrollpane">' + - ' <ol class="test-actions"></ol>' + - '</div>' - ); - ui.find('> .test-info .test-name').text(spec.name); - ui.find('> .test-info').click(function() { - var scrollpane = ui.find('> .scrollpane'); - var actions = scrollpane.find('> .test-actions'); - var name = context.find('> .test-info .test-name'); - if (actions.find(':visible').length) { - actions.hide(); - name.removeClass('open').addClass('closed'); - } else { - actions.show(); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - name.removeClass('closed').addClass('open'); - } - }); - - specUiMap[spec.id] = ui; - }); - - runner.on('SpecError', function(spec, error) { - var ui = specUiMap[spec.id]; - ui.append('<pre></pre>'); - ui.find('> pre').text(formatException(error)); - }); - - runner.on('SpecEnd', function(spec) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - ui.removeClass('status-pending'); - ui.addClass('status-' + spec.status); - ui.find("> .test-info .timer-result").text(spec.duration + "ms"); - if (spec.status === 'success') { - ui.find('> .test-info .test-name').addClass('closed'); - ui.find('> .scrollpane .test-actions').hide(); - } - updateTotals(spec.status); - }); - - runner.on('StepBegin', function(spec, step) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - ui.find('> .scrollpane .test-actions').append('<li class="status-pending"></li>'); - var stepUi = lastStepUiMap[spec.id] = ui.find('> .scrollpane .test-actions li:last'); - stepUi.append( - '<div class="timer-result"></div>' + - '<div class="test-title"></div>' - ); - stepUi.find('> .test-title').text(step.name); - var scrollpane = stepUi.parents('.scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - runner.on('StepFailure', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepError', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepEnd', function(spec, step) { - var stepUi = lastStepUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - stepUi.find('.timer-result').text(step.duration + 'ms'); - stepUi.removeClass('status-pending'); - stepUi.addClass('status-' + step.status); - var scrollpane = specUiMap[spec.id].find('> .scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - /** - * Finds the context of a spec block defined by the passed definition. - * - * @param {Object} The definition created by the Describe object. - */ - function findContext(spec) { - var currentContext = context.find('#specs'); - angular.forEach(model.getDefinitionPath(spec), function(defn) { - var id = 'describe-' + defn.id; - if (!context.find('#' + id).length) { - currentContext.find('> .test-children').append( - '<div class="test-describe" id="' + id + '">' + - ' <h2></h2>' + - ' <div class="test-children"></div>' + - ' <ul class="tests"></ul>' + - '</div>' - ); - context.find('#' + id).find('> h2').text('describe: ' + defn.name); - } - currentContext = context.find('#' + id); - }); - return context.find('#describe-' + spec.definition.id); - } - - /** - * Updates the test counter for the status. - * - * @param {string} the status. - */ - function updateTotals(status) { - var legend = context.find('#status-legend .status-' + status); - var parts = legend.text().split(' '); - var value = (parts[0] * 1) + 1; - legend.text(value + ' ' + parts[1]); - } - - /** - * Add an error to a step. - * - * @param {Object} The JQuery wrapped context - * @param {function()} fn() that should return the file/line number of the error - * @param {Object} the error. - */ - function addError(context, line, error) { - context.find('.test-title').append('<pre></pre>'); - var message = _jQuery.trim(line() + '\n\n' + formatException(error)); - context.find('.test-title pre:last').text(message); - } -}); - -/** - * Generates JSON output into a context. - */ -angular.scenario.output('json', function(context, runner, model) { - model.on('RunnerEnd', function() { - context.text(angular.toJson(model.value)); - }); -}); - -/** - * Generates XML output into a context. - */ -angular.scenario.output('xml', function(context, runner, model) { - var $ = function(args) {return new context.init(args);}; - model.on('RunnerEnd', function() { - var scenario = $('<scenario></scenario>'); - context.append(scenario); - serializeXml(scenario, model.value); - }); - - /** - * Convert the tree into XML. - * - * @param {Object} context jQuery context to add the XML to. - * @param {Object} tree node to serialize - */ - function serializeXml(context, tree) { - angular.forEach(tree.children, function(child) { - var describeContext = $('<describe></describe>'); - describeContext.attr('id', child.id); - describeContext.attr('name', child.name); - context.append(describeContext); - serializeXml(describeContext, child); - }); - var its = $('<its></its>'); - context.append(its); - angular.forEach(tree.specs, function(spec) { - var it = $('<it></it>'); - it.attr('id', spec.id); - it.attr('name', spec.name); - it.attr('duration', spec.duration); - it.attr('status', spec.status); - its.append(it); - angular.forEach(spec.steps, function(step) { - var stepContext = $('<step></step>'); - stepContext.attr('name', step.name); - stepContext.attr('duration', step.duration); - stepContext.attr('status', step.status); - it.append(stepContext); - if (step.error) { - var error = $('<error></error>'); - stepContext.append(error); - error.text(formatException(step.error)); - } - }); - }); - } -}); - -/** - * Creates a global value $result with the result of the runner. - */ -angular.scenario.output('object', function(context, runner, model) { - runner.$window.$result = model.value; -}); - -bindJQuery(); -publishExternalAPI(angular); - -var $runner = new angular.scenario.Runner(window), - scripts = document.getElementsByTagName('script'), - script = scripts[scripts.length - 1], - config = {}; - -angular.forEach(script.attributes, function(attr) { - var match = attr.name.match(/ng[:\-](.*)/); - if (match) { - config[match[1]] = attr.value || true; - } -}); - -if (config.autotest) { - JQLite(document).ready(function() { - angular.scenario.setUpAndRun(config); - }); -} -})(window, document); - - -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide {\n display: none !important;\n}\n\nng\\:form {\n display: block;\n}\n\n.ng-animate-block-transitions {\n transition:0s all!important;\n -webkit-transition:0s all!important;\n}\n</style>'); -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n/* CSS Document */\n\n/** Structure */\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n font-size: 14px;\n}\n\n#system-error {\n font-size: 1.5em;\n text-align: center;\n}\n\n#json, #xml {\n display: none;\n}\n\n#header {\n position: fixed;\n width: 100%;\n}\n\n#specs {\n padding-top: 50px;\n}\n\n#header .angular {\n font-family: Courier New, monospace;\n font-weight: bold;\n}\n\n#header h1 {\n font-weight: normal;\n float: left;\n font-size: 30px;\n line-height: 30px;\n margin: 0;\n padding: 10px 10px;\n height: 30px;\n}\n\n#application h2,\n#specs h2 {\n margin: 0;\n padding: 0.5em;\n font-size: 1.1em;\n}\n\n#status-legend {\n margin-top: 10px;\n margin-right: 10px;\n}\n\n#header,\n#application,\n.test-info,\n.test-actions li {\n overflow: hidden;\n}\n\n#application {\n margin: 10px;\n}\n\n#application iframe {\n width: 100%;\n height: 758px;\n}\n\n#application .popout {\n float: right;\n}\n\n#application iframe {\n border: none;\n}\n\n.tests li,\n.test-actions li,\n.test-it li,\n.test-it ol,\n.status-display {\n list-style-type: none;\n}\n\n.tests,\n.test-it ol,\n.status-display {\n margin: 0;\n padding: 0;\n}\n\n.test-info {\n margin-left: 1em;\n margin-top: 0.5em;\n border-radius: 8px 0 0 8px;\n -webkit-border-radius: 8px 0 0 8px;\n -moz-border-radius: 8px 0 0 8px;\n cursor: pointer;\n}\n\n.test-info:hover .test-name {\n text-decoration: underline;\n}\n\n.test-info .closed:before {\n content: \'\\25b8\\00A0\';\n}\n\n.test-info .open:before {\n content: \'\\25be\\00A0\';\n font-weight: bold;\n}\n\n.test-it ol {\n margin-left: 2.5em;\n}\n\n.status-display,\n.status-display li {\n float: right;\n}\n\n.status-display li {\n padding: 5px 10px;\n}\n\n.timer-result,\n.test-title {\n display: inline-block;\n margin: 0;\n padding: 4px;\n}\n\n.test-actions .test-title,\n.test-actions .test-result {\n display: table-cell;\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n.test-actions {\n display: table;\n}\n\n.test-actions li {\n display: table-row;\n}\n\n.timer-result {\n width: 4em;\n padding: 0 10px;\n text-align: right;\n font-family: monospace;\n}\n\n.test-it pre,\n.test-actions pre {\n clear: left;\n color: black;\n margin-left: 6em;\n}\n\n.test-describe {\n padding-bottom: 0.5em;\n}\n\n.test-describe .test-describe {\n margin: 5px 5px 10px 2em;\n}\n\n.test-actions .status-pending .test-title:before {\n content: \'\\00bb\\00A0\';\n}\n\n.scrollpane {\n max-height: 20em;\n overflow: auto;\n}\n\n/** Colors */\n\n#header {\n background-color: #F2C200;\n}\n\n#specs h2 {\n border-top: 2px solid #BABAD1;\n}\n\n#specs h2,\n#application h2 {\n background-color: #efefef;\n}\n\n#application {\n border: 1px solid #BABAD1;\n}\n\n.test-describe .test-describe {\n border-left: 1px solid #BABAD1;\n border-right: 1px solid #BABAD1;\n border-bottom: 1px solid #BABAD1;\n}\n\n.status-display {\n border: 1px solid #777;\n}\n\n.status-display .status-pending,\n.status-pending .test-info {\n background-color: #F9EEBC;\n}\n\n.status-display .status-success,\n.status-success .test-info {\n background-color: #B1D7A1;\n}\n\n.status-display .status-failure,\n.status-failure .test-info {\n background-color: #FF8286;\n}\n\n.status-display .status-error,\n.status-error .test-info {\n background-color: black;\n color: white;\n}\n\n.test-actions .status-success .test-title {\n color: #30B30A;\n}\n\n.test-actions .status-failure .test-title {\n color: #DF0000;\n}\n\n.test-actions .status-error .test-title {\n color: black;\n}\n\n.test-actions .timer-result {\n color: #888;\n}\n</style>'); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-scenario/bower.json b/platforms/android/assets/www/lib/angular-scenario/bower.json deleted file mode 100644 index 0949da7a..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.2.16", - "main": "./angular-scenario.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter-config.js b/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter-config.js deleted file mode 100644 index 5147ab34..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter-config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Configuration for jstd scenario adapter - */ -var jstdScenarioAdapter = { - relativeUrlPrefix: '/build/docs/' -}; diff --git a/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter.js b/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter.js deleted file mode 100644 index f65afd90..00000000 --- a/platforms/android/assets/www/lib/angular-scenario/jstd-scenario-adapter.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @license AngularJS v1.0.4 - * (c) 2010-2012 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window) { -'use strict'; - -/** - * JSTestDriver adapter for angular scenario tests - * - * Example of jsTestDriver.conf for running scenario tests with JSTD: - <pre> - server: http://localhost:9877 - - load: - - lib/angular-scenario.js - - lib/jstd-scenario-adapter-config.js - - lib/jstd-scenario-adapter.js - # your test files go here # - - proxy: - - {matcher: "/your-prefix/*", server: "http://localhost:8000/"} - </pre> - * - * For more information on how to configure jstd proxy, see {@link http://code.google.com/p/js-test-driver/wiki/Proxy} - * Note the order of files - it's important ! - * - * Example of jstd-scenario-adapter-config.js - <pre> - var jstdScenarioAdapter = { - relativeUrlPrefix: '/your-prefix/' - }; - </pre> - * - * Whenever you use <code>browser().navigateTo('relativeUrl')</code> in your scenario test, the relativeUrlPrefix will be prepended. - * You have to configure this to work together with JSTD proxy. - * - * Let's assume you are using the above configuration (jsTestDriver.conf and jstd-scenario-adapter-config.js): - * Now, when you call <code>browser().navigateTo('index.html')</code> in your scenario test, the browser will open /your-prefix/index.html. - * That matches the proxy, so JSTD will proxy this request to http://localhost:8000/index.html. - */ - -/** - * Custom type of test case - * - * @const - * @see jstestdriver.TestCaseInfo - */ -var SCENARIO_TYPE = 'scenario'; - -/** - * Plugin for JSTestDriver - * Connection point between scenario's jstd output and jstestdriver. - * - * @see jstestdriver.PluginRegistrar - */ -function JstdPlugin() { - var nop = function() {}; - - this.reportResult = nop; - this.reportEnd = nop; - this.runScenario = nop; - - this.name = 'Angular Scenario Adapter'; - - /** - * Called for each JSTD TestCase - * - * Handles only SCENARIO_TYPE test cases. There should be only one fake TestCase. - * Runs all scenario tests (under one fake TestCase) and report all results to JSTD. - * - * @param {jstestdriver.TestRunConfiguration} configuration - * @param {Function} onTestDone - * @param {Function} onAllTestsComplete - * @returns {boolean} True if this type of test is handled by this plugin, false otherwise - */ - this.runTestConfiguration = function(configuration, onTestDone, onAllTestsComplete) { - if (configuration.getTestCaseInfo().getType() != SCENARIO_TYPE) return false; - - this.reportResult = onTestDone; - this.reportEnd = onAllTestsComplete; - this.runScenario(); - - return true; - }; - - this.getTestRunsConfigurationFor = function(testCaseInfos, expressions, testRunsConfiguration) { - testRunsConfiguration.push( - new jstestdriver.TestRunConfiguration( - new jstestdriver.TestCaseInfo( - 'Angular Scenario Tests', function() {}, SCENARIO_TYPE), [])); - - return true; - }; -} - -/** - * Singleton instance of the plugin - * Accessed using closure by: - * - jstd output (reports to this plugin) - * - initScenarioAdapter (register the plugin to jstd) - */ -var plugin = new JstdPlugin(); - -/** - * Initialise scenario jstd-adapter - * (only if jstestdriver is defined) - * - * @param {Object} jstestdriver Undefined when run from browser (without jstd) - * @param {Function} initScenarioAndRun Function that inits scenario and runs all the tests - * @param {Object=} config Configuration object, supported properties: - * - relativeUrlPrefix: prefix for all relative links when navigateTo() - */ -function initScenarioAdapter(jstestdriver, initScenarioAndRun, config) { - if (jstestdriver) { - // create and register ScenarioPlugin - jstestdriver.pluginRegistrar.register(plugin); - plugin.runScenario = initScenarioAndRun; - - /** - * HACK (angular.scenario.Application.navigateTo) - * - * We need to navigate to relative urls when running from browser (without JSTD), - * because we want to allow running scenario tests without creating its own virtual host. - * For example: http://angular.local/build/docs/docs-scenario.html - * - * On the other hand, when running with JSTD, we need to navigate to absolute urls, - * because of JSTD proxy. (proxy, because of same domain policy) - * - * So this hack is applied only if running with JSTD and change all relative urls to absolute. - */ - var appProto = angular.scenario.Application.prototype, - navigateTo = appProto.navigateTo, - relativeUrlPrefix = config && config.relativeUrlPrefix || '/'; - - appProto.navigateTo = function(url, loadFn, errorFn) { - if (url.charAt(0) != '/' && url.charAt(0) != '#' && - url != 'about:blank' && !url.match(/^https?/)) { - url = relativeUrlPrefix + url; - } - - return navigateTo.call(this, url, loadFn, errorFn); - }; - } -} - -/** - * Builds proper TestResult object from given model spec - * - * TODO(vojta) report error details - * - * @param {angular.scenario.ObjectModel.Spec} spec - * @returns {jstestdriver.TestResult} - */ -function createTestResultFromSpec(spec) { - var map = { - success: 'PASSED', - error: 'ERROR', - failure: 'FAILED' - }; - - return new jstestdriver.TestResult( - spec.fullDefinitionName, - spec.name, - jstestdriver.TestResult.RESULT[map[spec.status]], - spec.error || '', - spec.line || '', - spec.duration); -} - -/** - * Generates JSTD output (jstestdriver.TestResult) - */ -angular.scenario.output('jstd', function(context, runner, model) { - model.on('SpecEnd', function(spec) { - plugin.reportResult(createTestResultFromSpec(spec)); - }); - - model.on('RunnerEnd', function() { - plugin.reportEnd(); - }); -}); -initScenarioAdapter(window.jstestdriver, angular.scenario.setUpAndRun, window.jstdScenarioAdapter); -})(window); diff --git a/platforms/android/assets/www/lib/angular-touch/.bower.json b/platforms/android/assets/www/lib/angular-touch/.bower.json deleted file mode 100644 index b8643cc0..00000000 --- a/platforms/android/assets/www/lib/angular-touch/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-touch", - "version": "1.2.16", - "main": "./angular-touch.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-touch", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "877473e33d5b51052dc3335899c20a49a909932b" - }, - "_source": "git://github.com/angular/bower-angular-touch.git", - "_target": "1.2.16", - "_originalSource": "angular-touch" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular-touch/README.md b/platforms/android/assets/www/lib/angular-touch/README.md deleted file mode 100644 index 0939eb04..00000000 --- a/platforms/android/assets/www/lib/angular-touch/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-touch - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngTouch). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-touch -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-touch/angular-touch.js"></script> -``` - -And add `ngTouch` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngTouch']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngTouch). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular-touch/angular-touch.js b/platforms/android/assets/www/lib/angular-touch/angular-touch.js deleted file mode 100644 index 4157f2aa..00000000 --- a/platforms/android/assets/www/lib/angular-touch/angular-touch.js +++ /dev/null @@ -1,575 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngTouch - * @description - * - * # ngTouch - * - * The `ngTouch` module provides touch events and other helpers for touch-enabled devices. - * The implementation is based on jQuery Mobile touch event handling - * ([jquerymobile.com](http://jquerymobile.com/)). - * - * - * See {@link ngTouch.$swipe `$swipe`} for usage. - * - * <div doc-module-components="ngTouch"></div> - * - */ - -// define ngTouch module -/* global -ngTouch */ -var ngTouch = angular.module('ngTouch', []); - -/* global ngTouch: false */ - - /** - * @ngdoc service - * @name $swipe - * - * @description - * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe - * behavior, to make implementing swipe-related directives more convenient. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by - * `ngCarousel` in a separate component. - * - * # Usage - * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element - * which is to be watched for swipes, and an object with four handler functions. See the - * documentation for `bind` below. - */ - -ngTouch.factory('$swipe', [function() { - // The total distance in any direction before we make the call on swipe vs. scroll. - var MOVE_BUFFER_RADIUS = 10; - - function getCoordinates(event) { - var touches = event.touches && event.touches.length ? event.touches : [event]; - var e = (event.changedTouches && event.changedTouches[0]) || - (event.originalEvent && event.originalEvent.changedTouches && - event.originalEvent.changedTouches[0]) || - touches[0].originalEvent || touches[0]; - - return { - x: e.clientX, - y: e.clientY - }; - } - - return { - /** - * @ngdoc method - * @name $swipe#bind - * - * @description - * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an - * object containing event handlers. - * - * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end` - * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`. - * - * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is - * watching for `touchmove` or `mousemove` events. These events are ignored until the total - * distance moved in either dimension exceeds a small threshold. - * - * Once this threshold is exceeded, either the horizontal or vertical delta is greater. - * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow. - * - If the vertical distance is greater, this is a scroll, and we let the browser take over. - * A `cancel` event is sent. - * - * `move` is called on `mousemove` and `touchmove` after the above logic has determined that - * a swipe is in progress. - * - * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`. - * - * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling - * as described above. - * - */ - bind: function(element, eventHandlers) { - // Absolute total movement, used to control swipe vs. scroll. - var totalX, totalY; - // Coordinates of the start position. - var startCoords; - // Last event's position. - var lastPos; - // Whether a swipe is active. - var active = false; - - element.on('touchstart mousedown', function(event) { - startCoords = getCoordinates(event); - active = true; - totalX = 0; - totalY = 0; - lastPos = startCoords; - eventHandlers['start'] && eventHandlers['start'](startCoords, event); - }); - - element.on('touchcancel', function(event) { - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - }); - - element.on('touchmove mousemove', function(event) { - if (!active) return; - - // Android will send a touchcancel if it thinks we're starting to scroll. - // So when the total distance (+ or - or both) exceeds 10px in either direction, - // we either: - // - On totalX > totalY, we send preventDefault() and treat this as a swipe. - // - On totalY > totalX, we let the browser handle it as a scroll. - - if (!startCoords) return; - var coords = getCoordinates(event); - - totalX += Math.abs(coords.x - lastPos.x); - totalY += Math.abs(coords.y - lastPos.y); - - lastPos = coords; - - if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) { - return; - } - - // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll. - if (totalY > totalX) { - // Allow native scrolling to take over. - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - return; - } else { - // Prevent the browser from scrolling. - event.preventDefault(); - eventHandlers['move'] && eventHandlers['move'](coords, event); - } - }); - - element.on('touchend mouseup', function(event) { - if (!active) return; - active = false; - eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event); - }); - } - }; -}]); - -/* global ngTouch: false */ - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * A more powerful replacement for the default ngClick designed to be used on touchscreen - * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending - * the click event. This version handles them immediately, and then prevents the - * following click event from propagating. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * This directive can fall back to using an ordinary click event, and so works on desktop - * browsers as well as mobile. - * - * This directive also sets the CSS class `ng-click-active` while the element is being held - * down (by a mouse click or touch) so you can restyle the depressed element if you wish. - * - * @element ANY - * @param {expression} ngClick {@link guide/expression Expression} to evaluate - * upon tap. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{ count }} - </file> - </example> - */ - -ngTouch.config(['$provide', function($provide) { - $provide.decorator('ngClickDirective', ['$delegate', function($delegate) { - // drop the default ngClick directive - $delegate.shift(); - return $delegate; - }]); -}]); - -ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', - function($parse, $timeout, $rootElement) { - var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag. - var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers. - var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click - var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks. - - var ACTIVE_CLASS_NAME = 'ng-click-active'; - var lastPreventedTime; - var touchCoordinates; - var lastLabelClickCoordinates; - - - // TAP EVENTS AND GHOST CLICKS - // - // Why tap events? - // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're - // double-tapping, and then fire a click event. - // - // This delay sucks and makes mobile apps feel unresponsive. - // So we detect touchstart, touchmove, touchcancel and touchend ourselves and determine when - // the user has tapped on something. - // - // What happens when the browser then generates a click event? - // The browser, of course, also detects the tap and fires a click after a delay. This results in - // tapping/clicking twice. So we do "clickbusting" to prevent it. - // - // How does it work? - // We attach global touchstart and click handlers, that run during the capture (early) phase. - // So the sequence for a tap is: - // - global touchstart: Sets an "allowable region" at the point touched. - // - element's touchstart: Starts a touch - // (- touchmove or touchcancel ends the touch, no click follows) - // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold - // too long) and fires the user's tap handler. The touchend also calls preventGhostClick(). - // - preventGhostClick() removes the allowable region the global touchstart created. - // - The browser generates a click event. - // - The global click handler catches the click, and checks whether it was in an allowable region. - // - If preventGhostClick was called, the region will have been removed, the click is busted. - // - If the region is still there, the click proceeds normally. Therefore clicks on links and - // other elements without ngTap on them work normally. - // - // This is an ugly, terrible hack! - // Yeah, tell me about it. The alternatives are using the slow click events, or making our users - // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular - // encapsulates this ugly logic away from the user. - // - // Why not just put click handlers on the element? - // We do that too, just to be sure. The problem is that the tap event might have caused the DOM - // to change, so that the click fires in the same position but something else is there now. So - // the handlers are global and care only about coordinates and not elements. - - // Checks if the coordinates are close enough to be within the region. - function hit(x1, y1, x2, y2) { - return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD; - } - - // Checks a list of allowable regions against a click location. - // Returns true if the click should be allowed. - // Splices out the allowable region from the list after it has been used. - function checkAllowableRegions(touchCoordinates, x, y) { - for (var i = 0; i < touchCoordinates.length; i += 2) { - if (hit(touchCoordinates[i], touchCoordinates[i+1], x, y)) { - touchCoordinates.splice(i, i + 2); - return true; // allowable region - } - } - return false; // No allowable region; bust it. - } - - // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick - // was called recently. - function onClick(event) { - if (Date.now() - lastPreventedTime > PREVENT_DURATION) { - return; // Too old. - } - - var touches = event.touches && event.touches.length ? event.touches : [event]; - var x = touches[0].clientX; - var y = touches[0].clientY; - // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label - // and on the input element). Depending on the exact browser, this second click we don't want - // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label - // click event - if (x < 1 && y < 1) { - return; // offscreen - } - if (lastLabelClickCoordinates && - lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) { - return; // input click triggered by label click - } - // reset label click coordinates on first subsequent click - if (lastLabelClickCoordinates) { - lastLabelClickCoordinates = null; - } - // remember label click coordinates to prevent click busting of trigger click event on input - if (event.target.tagName.toLowerCase() === 'label') { - lastLabelClickCoordinates = [x, y]; - } - - // Look for an allowable region containing this click. - // If we find one, that means it was created by touchstart and not removed by - // preventGhostClick, so we don't bust it. - if (checkAllowableRegions(touchCoordinates, x, y)) { - return; - } - - // If we didn't find an allowable region, bust the click. - event.stopPropagation(); - event.preventDefault(); - - // Blur focused form elements - event.target && event.target.blur(); - } - - - // Global touchstart handler that creates an allowable region for a click event. - // This allowable region can be removed by preventGhostClick if we want to bust it. - function onTouchStart(event) { - var touches = event.touches && event.touches.length ? event.touches : [event]; - var x = touches[0].clientX; - var y = touches[0].clientY; - touchCoordinates.push(x, y); - - $timeout(function() { - // Remove the allowable region. - for (var i = 0; i < touchCoordinates.length; i += 2) { - if (touchCoordinates[i] == x && touchCoordinates[i+1] == y) { - touchCoordinates.splice(i, i + 2); - return; - } - } - }, PREVENT_DURATION, false); - } - - // On the first call, attaches some event handlers. Then whenever it gets called, it creates a - // zone around the touchstart where clicks will get busted. - function preventGhostClick(x, y) { - if (!touchCoordinates) { - $rootElement[0].addEventListener('click', onClick, true); - $rootElement[0].addEventListener('touchstart', onTouchStart, true); - touchCoordinates = []; - } - - lastPreventedTime = Date.now(); - - checkAllowableRegions(touchCoordinates, x, y); - } - - // Actual linking function. - return function(scope, element, attr) { - var clickHandler = $parse(attr.ngClick), - tapping = false, - tapElement, // Used to blur the element after a tap. - startTime, // Used to check if the tap was held too long. - touchStartX, - touchStartY; - - function resetState() { - tapping = false; - element.removeClass(ACTIVE_CLASS_NAME); - } - - element.on('touchstart', function(event) { - tapping = true; - tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement. - // Hack for Safari, which can target text nodes instead of containers. - if(tapElement.nodeType == 3) { - tapElement = tapElement.parentNode; - } - - element.addClass(ACTIVE_CLASS_NAME); - - startTime = Date.now(); - - var touches = event.touches && event.touches.length ? event.touches : [event]; - var e = touches[0].originalEvent || touches[0]; - touchStartX = e.clientX; - touchStartY = e.clientY; - }); - - element.on('touchmove', function(event) { - resetState(); - }); - - element.on('touchcancel', function(event) { - resetState(); - }); - - element.on('touchend', function(event) { - var diff = Date.now() - startTime; - - var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches : - ((event.touches && event.touches.length) ? event.touches : [event]); - var e = touches[0].originalEvent || touches[0]; - var x = e.clientX; - var y = e.clientY; - var dist = Math.sqrt( Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2) ); - - if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) { - // Call preventGhostClick so the clickbuster will catch the corresponding click. - preventGhostClick(x, y); - - // Blur the focused element (the button, probably) before firing the callback. - // This doesn't work perfectly on Android Chrome, but seems to work elsewhere. - // I couldn't get anything to work reliably on Android Chrome. - if (tapElement) { - tapElement.blur(); - } - - if (!angular.isDefined(attr.disabled) || attr.disabled === false) { - element.triggerHandler('click', [event]); - } - } - - resetState(); - }); - - // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click - // something else nearby. - element.onclick = function(event) { }; - - // Actual click handler. - // There are three different kinds of clicks, only two of which reach this point. - // - On desktop browsers without touch events, their clicks will always come here. - // - On mobile browsers, the simulated "fast" click will call this. - // - But the browser's follow-up slow click will be "busted" before it reaches this handler. - // Therefore it's safe to use this directive on both mobile and desktop. - element.on('click', function(event, touchend) { - scope.$apply(function() { - clickHandler(scope, {$event: (touchend || event)}); - }); - }); - - element.on('mousedown', function(event) { - element.addClass(ACTIVE_CLASS_NAME); - }); - - element.on('mousemove mouseup', function(event) { - element.removeClass(ACTIVE_CLASS_NAME); - }); - - }; -}]); - -/* global ngTouch: false */ - -/** - * @ngdoc directive - * @name ngSwipeLeft - * - * @description - * Specify custom behavior when an element is swiped to the left on a touchscreen device. - * A leftward swipe is a quick, right-to-left slide of the finger. - * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag - * too. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * @element ANY - * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate - * upon left swipe. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <div ng-show="!showActions" ng-swipe-left="showActions = true"> - Some list content, like an email in the inbox - </div> - <div ng-show="showActions" ng-swipe-right="showActions = false"> - <button ng-click="reply()">Reply</button> - <button ng-click="delete()">Delete</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSwipeRight - * - * @description - * Specify custom behavior when an element is swiped to the right on a touchscreen device. - * A rightward swipe is a quick, left-to-right slide of the finger. - * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag - * too. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * @element ANY - * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate - * upon right swipe. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <div ng-show="!showActions" ng-swipe-left="showActions = true"> - Some list content, like an email in the inbox - </div> - <div ng-show="showActions" ng-swipe-right="showActions = false"> - <button ng-click="reply()">Reply</button> - <button ng-click="delete()">Delete</button> - </div> - </file> - </example> - */ - -function makeSwipeDirective(directiveName, direction, eventName) { - ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) { - // The maximum vertical delta for a swipe should be less than 75px. - var MAX_VERTICAL_DISTANCE = 75; - // Vertical distance should not be more than a fraction of the horizontal distance. - var MAX_VERTICAL_RATIO = 0.3; - // At least a 30px lateral motion is necessary for a swipe. - var MIN_HORIZONTAL_DISTANCE = 30; - - return function(scope, element, attr) { - var swipeHandler = $parse(attr[directiveName]); - - var startCoords, valid; - - function validSwipe(coords) { - // Check that it's within the coordinates. - // Absolute vertical distance must be within tolerances. - // Horizontal distance, we take the current X - the starting X. - // This is negative for leftward swipes and positive for rightward swipes. - // After multiplying by the direction (-1 for left, +1 for right), legal swipes - // (ie. same direction as the directive wants) will have a positive delta and - // illegal ones a negative delta. - // Therefore this delta must be positive, and larger than the minimum. - if (!startCoords) return false; - var deltaY = Math.abs(coords.y - startCoords.y); - var deltaX = (coords.x - startCoords.x) * direction; - return valid && // Short circuit for already-invalidated swipes. - deltaY < MAX_VERTICAL_DISTANCE && - deltaX > 0 && - deltaX > MIN_HORIZONTAL_DISTANCE && - deltaY / deltaX < MAX_VERTICAL_RATIO; - } - - $swipe.bind(element, { - 'start': function(coords, event) { - startCoords = coords; - valid = true; - }, - 'cancel': function(event) { - valid = false; - }, - 'end': function(coords, event) { - if (validSwipe(coords)) { - scope.$apply(function() { - element.triggerHandler(eventName); - swipeHandler(scope, {$event: event}); - }); - } - } - }); - }; - }]); -} - -// Left is negative X-coordinate, right is positive. -makeSwipeDirective('ngSwipeLeft', -1, 'swipeleft'); -makeSwipeDirective('ngSwipeRight', 1, 'swiperight'); - - - -})(window, window.angular); diff --git a/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js b/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js deleted file mode 100644 index 6ec92ed4..00000000 --- a/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(y,w,z){'use strict';function u(f,a,c){r.directive(f,["$parse","$swipe",function(m,p){var q=75,g=0.3,e=30;return function(h,n,l){function k(d){if(!b)return!1;var s=Math.abs(d.y-b.y);d=(d.x-b.x)*a;return v&&s<q&&0<d&&d>e&&s/d<g}var s=m(l[f]),b,v;p.bind(n,{start:function(d,s){b=d;v=!0},cancel:function(b){v=!1},end:function(b,a){k(b)&&h.$apply(function(){n.triggerHandler(c);s(h,{$event:a})})}})}}])}var r=w.module("ngTouch",[]);r.factory("$swipe",[function(){function f(a){var c=a.touches&&a.touches.length? -a.touches:[a];a=a.changedTouches&&a.changedTouches[0]||a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0]||c[0].originalEvent||c[0];return{x:a.clientX,y:a.clientY}}return{bind:function(a,c){var m,p,q,g,e=!1;a.on("touchstart mousedown",function(a){q=f(a);e=!0;p=m=0;g=q;c.start&&c.start(q,a)});a.on("touchcancel",function(a){e=!1;c.cancel&&c.cancel(a)});a.on("touchmove mousemove",function(a){if(e&&q){var n=f(a);m+=Math.abs(n.x-g.x);p+=Math.abs(n.y-g.y);g=n;10>m&&10>p|| -(p>m?(e=!1,c.cancel&&c.cancel(a)):(a.preventDefault(),c.move&&c.move(n,a)))}});a.on("touchend mouseup",function(a){e&&(e=!1,c.end&&c.end(f(a),a))})}}}]);r.config(["$provide",function(f){f.decorator("ngClickDirective",["$delegate",function(a){a.shift();return a}])}]);r.directive("ngClick",["$parse","$timeout","$rootElement",function(f,a,c){function m(a,b,c){for(var d=0;d<a.length;d+=2)if(Math.abs(a[d]-b)<e&&Math.abs(a[d+1]-c)<e)return a.splice(d,d+2),!0;return!1}function p(a){if(!(Date.now()-n>g)){var b= -a.touches&&a.touches.length?a.touches:[a],c=b[0].clientX,b=b[0].clientY;1>c&&1>b||k&&k[0]===c&&k[1]===b||(k&&(k=null),"label"===a.target.tagName.toLowerCase()&&(k=[c,b]),m(l,c,b)||(a.stopPropagation(),a.preventDefault(),a.target&&a.target.blur()))}}function q(c){c=c.touches&&c.touches.length?c.touches:[c];var b=c[0].clientX,e=c[0].clientY;l.push(b,e);a(function(){for(var a=0;a<l.length;a+=2)if(l[a]==b&&l[a+1]==e){l.splice(a,a+2);break}},g,!1)}var g=2500,e=25,h="ng-click-active",n,l,k;return function(a, -b,e){function d(){k=!1;b.removeClass(h)}var g=f(e.ngClick),k=!1,t,r,u,x;b.on("touchstart",function(a){k=!0;t=a.target?a.target:a.srcElement;3==t.nodeType&&(t=t.parentNode);b.addClass(h);r=Date.now();a=a.touches&&a.touches.length?a.touches:[a];a=a[0].originalEvent||a[0];u=a.clientX;x=a.clientY});b.on("touchmove",function(a){d()});b.on("touchcancel",function(a){d()});b.on("touchend",function(a){var g=Date.now()-r,f=a.changedTouches&&a.changedTouches.length?a.changedTouches:a.touches&&a.touches.length? -a.touches:[a],h=f[0].originalEvent||f[0],f=h.clientX,h=h.clientY,s=Math.sqrt(Math.pow(f-u,2)+Math.pow(h-x,2));k&&(750>g&&12>s)&&(l||(c[0].addEventListener("click",p,!0),c[0].addEventListener("touchstart",q,!0),l=[]),n=Date.now(),m(l,f,h),t&&t.blur(),w.isDefined(e.disabled)&&!1!==e.disabled||b.triggerHandler("click",[a]));d()});b.onclick=function(a){};b.on("click",function(b,c){a.$apply(function(){g(a,{$event:c||b})})});b.on("mousedown",function(a){b.addClass(h)});b.on("mousemove mouseup",function(a){b.removeClass(h)})}}]); -u("ngSwipeLeft",-1,"swipeleft");u("ngSwipeRight",1,"swiperight")})(window,window.angular); -//# sourceMappingURL=angular-touch.min.js.map diff --git a/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js.map b/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js.map deleted file mode 100644 index d599b934..00000000 --- a/platforms/android/assets/www/lib/angular-touch/angular-touch.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-touch.min.js", -"lineCount":12, -"mappings":"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", -"sources":["angular-touch.js"], -"names":["window","angular","undefined","makeSwipeDirective","directiveName","direction","eventName","ngTouch","directive","$parse","$swipe","MAX_VERTICAL_DISTANCE","MAX_VERTICAL_RATIO","MIN_HORIZONTAL_DISTANCE","scope","element","attr","validSwipe","coords","startCoords","deltaY","Math","abs","y","deltaX","x","valid","swipeHandler","bind","start","event","cancel","end","$apply","triggerHandler","module","factory","getCoordinates","touches","length","e","changedTouches","originalEvent","clientX","clientY","eventHandlers","totalX","totalY","lastPos","active","on","MOVE_BUFFER_RADIUS","preventDefault","config","$provide","decorator","$delegate","shift","$timeout","$rootElement","checkAllowableRegions","touchCoordinates","i","x1","CLICKBUSTER_THRESHOLD","y1","splice","onClick","Date","now","lastPreventedTime","PREVENT_DURATION","lastLabelClickCoordinates","target","tagName","toLowerCase","stopPropagation","blur","onTouchStart","push","ACTIVE_CLASS_NAME","resetState","tapping","removeClass","clickHandler","ngClick","tapElement","startTime","touchStartX","touchStartY","srcElement","nodeType","parentNode","addClass","diff","dist","sqrt","pow","TAP_DURATION","MOVE_TOLERANCE","addEventListener","isDefined","disabled","onclick","element.onclick","touchend"] -} diff --git a/platforms/android/assets/www/lib/angular-touch/bower.json b/platforms/android/assets/www/lib/angular-touch/bower.json deleted file mode 100644 index 9cdeb22a..00000000 --- a/platforms/android/assets/www/lib/angular-touch/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-touch", - "version": "1.2.16", - "main": "./angular-touch.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/android/assets/www/lib/angular/.bower.json b/platforms/android/assets/www/lib/angular/.bower.json deleted file mode 100644 index 8c166490..00000000 --- a/platforms/android/assets/www/lib/angular/.bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "angular", - "version": "1.2.16", - "main": "./angular.js", - "dependencies": {}, - "homepage": "https://github.com/angular/bower-angular", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "7ae38b4a0cfced157e3486a0d6e2d299601723bb" - }, - "_source": "git://github.com/angular/bower-angular.git", - "_target": "1.2.16", - "_originalSource": "angular" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular/README.md b/platforms/android/assets/www/lib/angular/README.md deleted file mode 100644 index fc0c0998..00000000 --- a/platforms/android/assets/www/lib/angular/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# bower-angular - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular/angular.js"></script> -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/angular/angular-csp.css b/platforms/android/assets/www/lib/angular/angular-csp.css deleted file mode 100644 index 0d3d3a9a..00000000 --- a/platforms/android/assets/www/lib/angular/angular-csp.css +++ /dev/null @@ -1,18 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], -.ng-cloak, .x-ng-cloak, -.ng-hide { - display: none !important; -} - -ng\:form { - display: block; -} - -.ng-animate-block-transitions { - transition:0s all!important; - -webkit-transition:0s all!important; -} diff --git a/platforms/android/assets/www/lib/angular/angular.js b/platforms/android/assets/www/lib/angular/angular.js deleted file mode 100644 index 2f26beed..00000000 --- a/platforms/android/assets/www/lib/angular/angular.js +++ /dev/null @@ -1,21464 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document, undefined) {'use strict'; - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module) { - return function () { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - stringify = function (obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return JSON.stringify(obj); - } - return obj; - }, - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function (match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - arg = templateArgs[index + 2]; - if (typeof arg === 'function') { - return arg.toString().replace(/ ?\{[\s\S]*$/, ''); - } else if (typeof arg === 'undefined') { - return 'undefined'; - } else if (typeof arg !== 'string') { - return toJson(arg); - } - return arg; - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.2.16/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + - encodeURIComponent(stringify(arguments[i])); - } - - return new Error(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global - -angular, - -msie, - -jqLite, - -jQuery, - -slice, - -push, - -toString, - -ngMinErr, - -_angular, - -angularModule, - -nodeName_, - -uid, - - -lowercase, - -uppercase, - -manualLowercase, - -manualUppercase, - -nodeName_, - -isArrayLike, - -forEach, - -sortedKeys, - -forEachSorted, - -reverseParams, - -nextUid, - -setHashKey, - -extend, - -int, - -inherit, - -noop, - -identity, - -valueFn, - -isUndefined, - -isDefined, - -isObject, - -isString, - -isNumber, - -isDate, - -isArray, - -isFunction, - -isRegExp, - -isWindow, - -isScope, - -isFile, - -isBlob, - -isBoolean, - -trim, - -isElement, - -makeMap, - -map, - -size, - -includes, - -indexOf, - -arrayRemove, - -isLeafNode, - -copy, - -shallowCopy, - -equals, - -csp, - -concat, - -sliceArgs, - -bind, - -toJsonReplacer, - -toJson, - -fromJson, - -toBoolean, - -startingTag, - -tryDecodeURIComponent, - -parseKeyValue, - -toKeyValue, - -encodeUriSegment, - -encodeUriQuery, - -angularInit, - -bootstrap, - -snake_case, - -bindJQuery, - -assertArg, - -assertArgFn, - -assertNotHasOwnProperty, - -getter, - -getBlockElements, - -hasOwnProperty, - -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var /** holds major version number for IE or NaN for real browsers */ - msie, - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - - _angular = window.angular, - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - nodeName_, - uid = ['0', '0', '0']; - -/** - * IE 11 changed the format of the UserAgent string. - * See http://msdn.microsoft.com/en-us/library/ms537503.aspx - */ -msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -if (isNaN(msie)) { - msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -} - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === 1 && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` - * is the value of an object property or an array element and `key` is the object property key or - * array element index. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key){ - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ -function forEach(obj, iterator, context) { - var key; - if (obj) { - if (isFunction(obj)){ - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context); - } else if (isArrayLike(obj)) { - for (key = 0; key < obj.length; key++) - iterator.call(context, obj[key], key); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys.sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for ( var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric - * characters such as '012ABC'. The reason why we are not using simply a number counter is that - * the number string gets longer over time, and it can also overflow, where as the nextId - * will grow much slower, it is a string, and it will never overflow. - * - * @returns {string} an unique alpha-numeric string - */ -function nextUid() { - var index = uid.length; - var digit; - - while(index) { - index--; - digit = uid[index].charCodeAt(0); - if (digit == 57 /*'9'*/) { - uid[index] = 'A'; - return uid.join(''); - } - if (digit == 90 /*'Z'*/) { - uid[index] = '0'; - } else { - uid[index] = String.fromCharCode(digit + 1); - return uid.join(''); - } - } - uid.unshift('0'); - return uid.join(''); -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @function - * - * @description - * Extends the destination object `dst` by copying all of the properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - forEach(arguments, function(obj){ - if (obj !== dst) { - forEach(obj, function(value, key){ - dst[key] = value; - }); - } - }); - - setHashKey(dst,h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(new (extend(function() {}, {prototype:parent}))(), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value){return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value){return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value){return value != null && typeof value === 'object';} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value){return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value){return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value){ - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(value) { - return toString.call(value) === '[object Array]'; -} - - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value){return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -var trim = (function() { - // native trim is way faster: http://jsperf.com/angular-trim-test - // but IE doesn't have it... :-( - // TODO: we should move this into IE/ES5 polyfill - if (!String.prototype.trim) { - return function(value) { - return isString(value) ? value.replace(/^\s\s*/, '').replace(/\s\s*$/, '') : value; - }; - } - return function(value) { - return isString(value) ? value.trim() : value; - }; -})(); - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str){ - var obj = {}, items = str.split(","), i; - for ( i = 0; i < items.length; i++ ) - obj[ items[i] ] = true; - return obj; -} - - -if (msie < 9) { - nodeName_ = function(element) { - element = element.nodeName ? element : element[0]; - return (element.scopeName && element.scopeName != 'HTML') - ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; - }; -} else { - nodeName_ = function(element) { - return element.nodeName ? element.nodeName : element[0].nodeName; - }; -} - - -function map(obj, iterator, context) { - var results = []; - forEach(obj, function(value, index, list) { - results.push(iterator.call(context, value, index, list)); - }); - return results; -} - - -/** - * @description - * Determines the number of elements in an array, the number of properties an object has, or - * the length of a string. - * - * Note: This function is used to augment the Object type in Angular expressions. See - * {@link angular.Object} for more information about Angular arrays. - * - * @param {Object|Array|string} obj Object, array, or string to inspect. - * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object - * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array. - */ -function size(obj, ownPropsOnly) { - var count = 0, key; - - if (isArray(obj) || isString(obj)) { - return obj.length; - } else if (isObject(obj)){ - for (key in obj) - if (!ownPropsOnly || obj.hasOwnProperty(key)) - count++; - } - - return count; -} - - -function includes(array, obj) { - return indexOf(array, obj) != -1; -} - -function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for (var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; -} - -function arrayRemove(array, value) { - var index = indexOf(array, value); - if (index >=0) - array.splice(index, 1); - return value; -} - -function isLeafNode (node) { - if (node) { - switch (node.nodeName) { - case "OPTION": - case "PRE": - case "TITLE": - return true; - } - } - return false; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for array) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="Controller"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - function Controller($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - } - </script> - </file> - </example> - */ -function copy(source, destination){ - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, []); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source); - } else if (isObject(source)) { - destination = copy(source, {}); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - if (isArray(source)) { - destination.length = 0; - for ( var i = 0; i < source.length; i++) { - destination.push(copy(source[i])); - } - } else { - var h = destination.$$hashKey; - forEach(destination, function(value, key){ - delete destination[key]; - }); - for ( var key in source) { - destination[key] = copy(source[key]); - } - setHashKey(destination,h); - } - } - return destination; -} - -/** - * Create a shallow copy of an object - */ -function shallowCopy(src, dst) { - dst = dst || {}; - - for(var key in src) { - // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src - // so we don't need to worry about using our custom hasOwnProperty here - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavasScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for(key=0; key<length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - return isDate(o2) && o1.getTime() == o2.getTime(); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for(key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for(key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - - -function csp() { - return (document.securityPolicy && document.securityPolicy.isActive) || - (document.querySelector && - !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]'))); -} - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0))) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace. - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized thingy. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -function toBoolean(value) { - if (typeof value === 'function') { - value = true; - } else if (value && value.length !== 0) { - var v = lowercase("" + value); - value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); - } else { - value = false; - } - return value; -} - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch(e) {} - // As Per DOM Standards - var TEXT_NODE = 3; - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch(e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch(e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue){ - if ( keyValue ) { - key_value = keyValue.split('='); - key = tryDecodeURIComponent(key_value[0]); - if ( isDefined(key) ) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!obj[key]) { - obj[key] = val; - } else if(isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common, way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - */ -function angularInit(element, bootstrap) { - var elements = [element], - appElement, - module, - names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], - NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; - - function append(element) { - element && elements.push(element); - } - - forEach(names, function(name) { - names[name] = true; - append(document.getElementById(name)); - name = name.replace(':', '\\:'); - if (element.querySelectorAll) { - forEach(element.querySelectorAll('.' + name), append); - forEach(element.querySelectorAll('.' + name + '\\:'), append); - forEach(element.querySelectorAll('[' + name + ']'), append); - } - }); - - forEach(elements, function(element) { - if (!appElement) { - var className = ' ' + element.className + ' '; - var match = NG_APP_CLASS_REGEXP.exec(className); - if (match) { - appElement = element; - module = (match[2] || '').replace(/\s+/g, ','); - } else { - forEach(element.attributes, function(attr) { - if (!appElement && names[attr.name]) { - appElement = element; - module = attr.value; - } - }); - } - } - }); - if (appElement) { - bootstrap(appElement, module ? [module] : []); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * <example name="multi-bootstrap" module="multi-bootstrap"> - * <file name="index.html"> - * <script src="../../../angular.js"></script> - * <div ng-controller="BrokenTable"> - * <table> - * <tr> - * <th ng-repeat="heading in headings">{{heading}}</th> - * </tr> - * <tr ng-repeat="filling in fillings"> - * <td ng-repeat="fill in filling">{{fill}}</td> - * </tr> - * </table> - * </div> - * </file> - * <file name="controller.js"> - * var app = angular.module('multi-bootstrap', []) - * - * .controller('BrokenTable', function($scope) { - * $scope.headings = ['One', 'Two', 'Three']; - * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; - * }); - * </file> - * <file name="protractor.js" type="protractor"> - * it('should only insert one table cell for each item in $scope.fillings', function() { - * expect(element.all(by.css('td')).count()) - * .toBe(9); - * }); - * </file> - * </example> - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a run block. - * See: {@link angular.module modules} - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules) { - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - modules.unshift('ng'); - var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', - function(scope, element, compile, injector, animate) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator){ - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -function bindJQuery() { - // bind to jQuery if present; - jQuery = window.jQuery; - // reset to jQuery or default to us. - if (jQuery) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - // Method signature: - // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) - jqLitePatchJQueryRemove('remove', true, true, false); - jqLitePatchJQueryRemove('empty', false, false, false); - jqLitePatchJQueryRemove('html', false, false, true); - } else { - jqLite = JQLite; - } - angular.element = jqLite; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {DOMElement} object containing the elements - */ -function getBlockElements(nodes) { - var startNode = nodes[0], - endNode = nodes[nodes.length - 1]; - if (startNode === endNode) { - return jqLite(startNode); - } - - var element = startNode; - var elements = [element]; - - do { - element = element.nextSibling; - if (!element) break; - elements.push(element); - } while (element !== endNode); - - return jqLite(elements); -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. -<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If ->>>>>* unspecified then the module is being retrieved for further configuration. - * @param {Function} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke'); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * @returns {Array.<string>} List of module names which must be loaded before this module. - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * @returns {string} Name of the module. - * @description - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod) { - return function() { - invokeQueue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global - angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - requiredDirective, - requiredDirective, - ngValueDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.2.16', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 2, - dot: 16, - codeName: 'badger-enumeration' -}; - - -function publishExternalAPI(angular){ - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop':noop, - 'bind':bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity':identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - '$$minErr': minErr, - '$$csp': csp - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - required: requiredDirective, - ngRequired: requiredDirective, - ngValue: ngValueDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback : $$AsyncCallbackProvider - }); - } - ]); -} - -/* global - - -JQLitePrototype, - -addEventListenerFn, - -removeEventListenerFn, - -BOOLEAN_ATTR -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - * - [`data()`](http://api.jquery.com/data/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng-' + new Date().getTime(), - jqId = 1, - addEventListenerFn = (window.document.addEventListener - ? function(element, type, fn) {element.addEventListener(type, fn, false);} - : function(element, type, fn) {element.attachEvent('on' + type, fn);}), - removeEventListenerFn = (window.document.removeEventListener - ? function(element, type, fn) {element.removeEventListener(type, fn, false); } - : function(element, type, fn) {element.detachEvent('on' + type, fn); }); - -/* - * !!! This is an undocumented "private" function !!! - */ -var jqData = JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -///////////////////////////////////////////// -// jQuery mutation patch -// -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a -// $destroy event on all DOM nodes being removed. -// -///////////////////////////////////////////// - -function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { - var originalJqFn = jQuery.fn[name]; - originalJqFn = originalJqFn.$original || originalJqFn; - removePatch.$original = originalJqFn; - jQuery.fn[name] = removePatch; - - function removePatch(param) { - // jshint -W040 - var list = filterElems && param ? [this.filter(param)] : [this], - fireEvent = dispatchThis, - set, setIndex, setLength, - element, childIndex, childLength, children; - - if (!getterIfNoArguments || param != null) { - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); - } - } - } - } - return originalJqFn.apply(this, arguments); - } -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteBuildFragment(html, context) { - var elem, tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i, j, jj; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - tmp = fragment.appendChild(context.createElement('div')); - // Convert html into DOM nodes - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = '<div>&#160;</div>' + - wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - tmp.removeChild(tmp.firstChild); - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - return nodes; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - return jqLiteBuildFragment(html, context); -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - if (isString(element)) { - element = trim(element); - } - if (!(this instanceof JQLite)) { - if (isString(element) && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (isString(element)) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - var fragment = jqLite(document.createDocumentFragment()); - fragment.append(this); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element){ - jqLiteRemoveData(element); - for ( var i = 0, children = element.childNodes || []; i < children.length; i++) { - jqLiteDealoc(children[i]); - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!handle) return; //no listeners registered - - if (isUndefined(type)) { - forEach(events, function(eventHandler, type) { - removeEventListenerFn(element, type, eventHandler); - delete events[type]; - }); - } else { - forEach(type.split(' '), function(type) { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type] || [], fn); - } - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete jqCache[expandoId].data[name]; - return; - } - - if (expandoStore.handle) { - expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - jqLiteOff(element); - } - delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. - } -} - -function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId || -1]; - - if (isDefined(value)) { - if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {}; - } - expandoStore[key] = value; - } else { - return expandoStore && expandoStore[key]; - } -} - -function jqLiteData(element, key, value) { - var data = jqLiteExpandoStore(element, 'data'), - isSetter = isDefined(value), - keyDefined = !isSetter && isDefined(key), - isSimpleGetter = keyDefined && !isObject(key); - - if (!data && !isSimpleGetter) { - jqLiteExpandoStore(element, 'data', data = {}); - } - - if (isSetter) { - data[key] = value; - } else { - if (keyDefined) { - if (isSimpleGetter) { - // don't create data in this case. - return data && data[key]; - } else { - extend(data, key); - } - } else { - return data; - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf( " " + selector + " " ) > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - -function jqLiteAddNodes(root, elements) { - if (elements) { - elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements)) - ? elements - : [ elements ]; - for(var i=0; i < elements.length; i++) { - root.push(elements[i]); - } - } -} - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - element = jqLite(element); - - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if(element[0].nodeType == 9) { - element = element.find('html'); - } - var names = isArray(name) ? name : [name]; - - while (element.length) { - var node = element[0]; - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = element.data(names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = jqLite(node.parentNode || (node.nodeType === 11 && node.host)); - } -} - -function jqLiteEmpty(element) { - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document already is loaded - if (document.readyState === 'complete'){ - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e){ value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[uppercase(value)] = true; -}); - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; -} - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element,name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - var val; - - if (msie <= 8) { - // this is some IE specific weirdness that jQuery 1.6.4 does not sure why - val = element.currentStyle && element.currentStyle[name]; - if (val === '') val = 'auto'; - } - - val = val || element.style[name]; - - if (msie <= 8) { - // jquery weirdness :-/ - val = (val === '') ? undefined : val; - } - - return val; - } - }, - - attr: function(element, name, value){ - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name)|| noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - var NODE_TYPE_TEXT_PROPERTY = []; - if (msie < 9) { - NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ - } else { - NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ - } - getText.$dv = ''; - return getText; - - function getText(element, value) { - var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; - if (isUndefined(value)) { - return textProp ? element[textProp] : ''; - } - element[textProp] = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (nodeName_(element) === 'SELECT' && element.multiple) { - var result = []; - forEach(element.options, function (option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name){ - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < this.length; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(this.length, 1) : this.length; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < this.length; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function (event, type) { - if (!event.preventDefault) { - event.preventDefault = function() { - event.returnValue = false; //ie - }; - } - - if (!event.stopPropagation) { - event.stopPropagation = function() { - event.cancelBubble = true; //ie - }; - } - - if (!event.target) { - event.target = event.srcElement || document; - } - - if (isUndefined(event.defaultPrevented)) { - var prevent = event.preventDefault; - event.preventDefault = function() { - event.defaultPrevented = true; - prevent.call(event); - }; - event.defaultPrevented = false; - } - - event.isDefaultPrevented = function() { - return event.defaultPrevented || event.returnValue === false; - }; - - // Copy event handlers in case event handlers array is modified during execution. - var eventHandlersCopy = shallowCopy(events[type || event.type] || []); - - forEach(eventHandlersCopy, function(fn) { - fn.call(element, event); - }); - - // Remove monkey-patched methods (IE), - // as they would cause memory leaks in IE8. - if (msie <= 8) { - // IE7/8 does not allow to delete property on native object - event.preventDefault = null; - event.stopPropagation = null; - event.isDefaultPrevented = null; - } else { - // It shouldn't affect normal browsers (native methods are defined on prototype). - delete event.preventDefault; - delete event.stopPropagation; - delete event.isDefaultPrevented; - } - }; - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - dealoc: jqLiteDealoc, - - on: function onFn(element, type, fn, unsupported){ - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!events) jqLiteExpandoStore(element, 'events', events = {}); - if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events)); - - forEach(type.split(' '), function(type){ - var eventFns = events[type]; - - if (!eventFns) { - if (type == 'mouseenter' || type == 'mouseleave') { - var contains = document.body.contains || document.body.compareDocumentPosition ? - function( a, b ) { - // jshint bitwise: false - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - events[type] = []; - - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; - - onFn(element, eventmap[type], function(event) { - var target = this, related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !contains(target, related)) ){ - handle(event, type); - } - }); - - } else { - addEventListenerFn(element, type, handle); - events[type] = []; - } - eventFns = events[type]; - } - eventFns.push(fn); - }); - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node){ - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element){ - if (element.nodeType === 1) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - forEach(new JQLite(node), function(child){ - if (element.nodeType === 1 || element.nodeType === 11) { - element.appendChild(child); - } - }); - }, - - prepend: function(element, node) { - if (element.nodeType === 1) { - var index = element.firstChild; - forEach(new JQLite(node), function(child){ - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode)[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: function(element) { - jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - forEach(new JQLite(newElement), function(node){ - parent.insertBefore(node, index.nextSibling); - index = node; - }); - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className){ - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - - next: function(element) { - if (element.nextElementSibling) { - return element.nextElementSibling; - } - - // IE8 doesn't have nextElementSibling - var elm = element.nextSibling; - while (elm != null && elm.nodeType !== 1) { - elm = elm.nextSibling; - } - return elm; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, eventName, eventData) { - var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; - - eventData = eventData || []; - - var event = [{ - preventDefault: noop, - stopPropagation: noop - }]; - - forEach(eventFns, function(fn) { - fn.apply(element, event.concat(eventData)); - }); - } -}, function(fn, name){ - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - for(var i=0; i < this.length; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj) { - var objType = typeof obj, - key; - - if (objType == 'object' && obj !== null) { - if (typeof (key = obj.$$hashKey) == 'function') { - // must invoke on object to keep the right this - key = obj.$$hashKey(); - } else if (key === undefined) { - key = obj.$$hashKey = nextUid(); - } - } else { - key = obj; - } - - return objType + ':' + key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array){ - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @function - * - * @description - * Creates an injector function that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @returns {function()} Injector function. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document){ - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); -function annotate(fn) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn == 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ - arg.replace(FN_ARG, function(all, underscore, name){ - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * @function - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector){ - * return $injector; - * }).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with - * minification, and obfuscation tools since these tools change the argument names. - * - * ## `$inject` Annotation - * By adding a `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exist. - * - * @param {string} Name of the service to query. - * @returns {boolean} returns true if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function invokes the new - * operator and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc object - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad) { - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function() { - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(servicename) { - var provider = providerInjector.get(servicename + providerSuffix); - return instanceInjector.invoke(provider.$get, provider); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val)); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad){ - var runBlocks = [], moduleFn, invokeQueue, i, ii; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - - for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { - var invokeArgs = invokeQueue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals){ - var args = [], - $inject = annotate(fn), - length, i, - key; - - for(i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key) - ); - } - if (!fn.$inject) { - // this means that we must be an array. - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals) { - var Constructor = function() {}, - instance, returnedValue; - - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype; - instance = new Constructor(); - returnedValue = invoke(Type, instance, locals); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -/** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks current value of `$location.hash()` and scroll to related element, - * according to rules specified in - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor. - * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`. - * - * @example - <example> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollCtrl"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - function ScrollCtrl($scope, $location, $anchorScroll) { - $scope.gotoBottom = function (){ - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - } - </file> - <file name="style.css"> - #scrollArea { - height: 350px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // helper function to get first anchor from a NodeList - // can't use filter.filter, as it accepts only instances of Array - // and IE can't convert NodeList to an array using [].slice - // TODO(vojta): use filter if we change it to accept lists as well - function getFirstAnchor(list) { - var result = null; - forEach(list, function(element) { - if (!result && lowercase(element.nodeName) === 'a') result = element; - }); - return result; - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) $window.scrollTo(0, 0); - - // element with given id - else if ((elm = document.getElementById(hash))) elm.scrollIntoView(); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView(); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') $window.scrollTo(0, 0); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction() { - $rootScope.$evalAsync(scroll); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if(arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) { - - function async(fn) { - fn && $$asyncCallback(fn); - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - - /** - * - * @ngdoc method - * @name $animate#enter - * @function - * @description Inserts the element into the DOM either after the `after` element or within - * the `parent` element. Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {Function=} done callback function that will be called after the element has been - * inserted into the DOM - */ - enter : function(element, parent, after, done) { - if (after) { - after.after(element); - } else { - if (!parent || !parent[0]) { - parent = after.parent(); - } - parent.append(element); - } - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @function - * @description Removes the element from the DOM. Once complete, the done() callback will be - * fired (if provided). - * @param {DOMElement} element the element which will be removed from the DOM - * @param {Function=} done callback function that will be called after the element has been - * removed from the DOM - */ - leave : function(element, done) { - element.remove(); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. Once complete, the - * done() callback will be fired (if provided). - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {Function=} done the callback function (if provided) that will be fired after the - * element has been moved to its new position - */ - move : function(element, parent, after, done) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - this.enter(element, parent, after, done); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @function - * @description Adds the provided className CSS class value to the provided element. Once - * complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been added to the element - */ - addClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteAddClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @function - * @description Removes the provided className CSS class value from the provided element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been removed from the element - */ - removeClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteRemoveClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, done) { - forEach(element, function (element) { - jqLiteAddClass(element, add); - jqLiteRemoveClass(element, remove); - }); - async(done); - }, - - enabled : noop - }; - }]; -}]; - -function $$AsyncCallbackProvider(){ - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {function()} XHR XMLHttpRequest constructor. - * @param {object} $log console.log or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while(outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn){ pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn){ pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var lastBrowserUrl = location.href, - baseElement = document.find('base'), - newLocation = null; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record ? - */ - self.url = function(url, replace) { - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - if (lastBrowserUrl == url) return; - lastBrowserUrl = url; - if ($sniffer.history) { - if (replace) history.replaceState(null, '', url); - else { - history.pushState(null, '', url); - // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462 - baseElement.attr('href', baseElement.attr('href')); - } - } else { - newLocation = url; - if (replace) { - location.replace(url); - } else { - location.href = url; - } - } - return self; - // getter - } else { - // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href - // methods not updating location.href synchronously. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return newLocation || location.href.replace(/%27/g,"'"); - } - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function fireUrlChange() { - newLocation = null; - if (lastBrowserUrl == self.url()) return; - - lastBrowserUrl = self.url(); - forEach(urlChangeListeners, function(listener) { - listener(self.url()); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); - // hashchange event - if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); - // polling - else self.addPollFn(fireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - /* global escape: false, unescape: false */ - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = escape(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '"+ name + - "' possibly not set or overflowed because it was too large ("+ - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = unescape(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = unescape(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider(){ - this.$get = ['$window', '$log', '$sniffer', '$document', - function( $window, $log, $sniffer, $document){ - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - $scope.cache.put(key, value); - $scope.keys.push(key); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the of the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be below the `ng-app` definition. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * replace: false, - * transclude: false, - * restrict: 'A', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression and to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. - * `function([scope], cloneLinkingFn)`. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the - * `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the default (attributes only) is used. - * - * * `E` - Element name: `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `template` - * replace the current element with the contents of the HTML. The replacement process - * migrates all of the attributes / classes from the old element to the new one. See the - * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive - * Directives Guide} for an example. - * - * You can specify `template` as a string representing the template or as a function which takes - * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and - * returns a string value representing the template. - * - * - * #### `templateUrl` - * Same as `template` but the template is loaded from the specified URL. Because - * the template loading is asynchronous the compilation/linking is suspended until the template - * is loaded. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - * specify where the template should be inserted. Defaults to `false`. - * - * * `true` - the template will replace the current element. - * * `false` - the template will replace the contents of the current element. - * - * - * #### `transclude` - * compile the content of the element and make it available to the directive. - * Typically used with {@link ng.directive:ngTransclude - * ngTransclude}. The advantage of transclusion is that the linking function receives a - * transclusion function which is pre-bound to the correct scope. In a typical setup the widget - * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate` - * scope. This makes it possible for the widget to have private state, and the transclusion to - * be bound to the parent (pre-`isolate`) scope. - * - * * `true` - transclude the content of the directive. - * * `'element'` - transclude the whole element including any directives defined at lower priority. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. Examples that require compile functions are - * directives that transform template DOM, such as {@link - * api/ng.directive:ngRepeat ngRepeat}, or load the contents - * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The - * compile function takes the following arguments. - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. This is the same as the `$transclude` - * parameter of directive controllers. - * `function([scope], cloneLinkingFn)`. - * - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. - * - * <a name="Attributes"></a> - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * Below is an example using `$compileProvider`. - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compile"> - <file name="index.html"> - <script> - angular.module('compile', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }) - }); - - function Ctrl($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - } - </script> - <div ng-controller="Ctrl"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives. - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * @function - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - /** - * @ngdoc method - * @name $compileProvider#directive - * @function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'A'; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attr) { - this.$$element = element; - this.$attr = attr || {}; - }; - - Attributes.prototype = { - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass : function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - var toRemove = tokenDifference(oldClasses, newClasses); - - if(toAdd.length === 0) { - $animate.removeClass(this.$$element, toRemove); - } else if(toRemove.length === 0) { - $animate.addClass(this.$$element, toAdd); - } else { - $animate.setClass(this.$$element, toAdd, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var booleanKey = getBooleanAttrName(this.$$element[0], key), - normalizedVal, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // sanitize a[href] and img[src] values - if ((nodeName === 'A' && key === 'href') || - (nodeName === 'IMG' && key === 'src')) { - this[key] = value = $$sanitizeUri(value, key === 'src'); - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[key], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#Attributes Directives} guide for more info. - * @returns {function()} the `fn` parameter. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = {})), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - return fn; - } - }; - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index){ - if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ - assertArg(scope, 'scope'); - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - var $linkNode = cloneConnectFn - ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! - : $compileNodes; - - forEach(transcludeControllers, function(instance, name) { - $linkNode.data('$' + name + 'Controller', instance); - }); - - // Attach scope only to non-text nodes. - for(var i = 0, ii = $linkNode.length; i<ii; i++) { - var node = $linkNode[i], - nodeType = node.nodeType; - if (nodeType === 1 /* element */ || nodeType === 9 /* document */) { - $linkNode.eq(i).data('$scope', scope); - } - } - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); - return $linkNode; - }; - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch(e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - safeAddClass(jqLite(nodeList[i]), 'ng-scope'); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); - - linkFns.push(nodeLinkFn, childLinkFn); - linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; - - // copy nodeList so that linking doesn't break due to live list updates. - var nodeListLength = nodeList.length, - stableNodeList = new Array(nodeListLength); - for (i = 0; i < nodeListLength; i++) { - stableNodeList[i] = nodeList[i]; - } - - for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) { - node = stableNodeList[n]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - $node = jqLite(node); - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - $node.data('$scope', childScope); - } else { - childScope = scope; - } - childTranscludeFn = nodeLinkFn.transclude; - if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, - createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) - ); - } else { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); - } - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn) { - return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { - var scopeCreated = false; - - if (!transcludedScope) { - transcludedScope = scope.$new(); - transcludedScope.$$transcluded = true; - scopeCreated = true; - } - - var clone = transcludeFn(transcludedScope, cloneFn, controllers); - if (scopeCreated) { - clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); - } - return clone; - }; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch(nodeType) { - case 1: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - if (!msie || msie >= 8 || attr.specified) { - name = attr.name; - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (NG_ATTR_BINDING.test(ngAttrName)) { - name = snake_case(ngAttrName.substr(6), '-'); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - attrs[nName] = value = trim(attr.value); - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - // use class as directive - className = node.className; - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case 3: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case 8: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - var startNode = node; - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == 1 /** Element **/) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for(var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - newScopeDirective = newScopeDirective || directive; - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - if (isObject(directiveValue)) { - newIsolateScopeDirective = directive; - } - } - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = groupScan(compileNode, attrStart, attrEnd); - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = jqLite(directiveValue); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - if (isString(require)) { - while((value = require.charAt(0)) == '^' || value == '?') { - require = require.substr(1); - if (value == '^') { - retrievalMethod = 'inheritedData'; - } - optional = optional || value == '?'; - } - value = null; - - if (elementControllers && retrievalMethod === 'data') { - value = elementControllers[require]; - } - value = value || $element[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; - - if (compileNode === linkNode) { - attrs = templateAttrs; - } else { - attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); - } - $element = attrs.$$element; - - if (newIsolateScopeDirective) { - var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; - var $linkNode = jqLite(linkNode); - - isolateScope = scope.$new(true); - - if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { - $linkNode.data('$isolateScope', isolateScope) ; - } else { - $linkNode.data('$isolateScopeNoTemplate', isolateScope); - } - - - - safeAddClass($linkNode, 'ng-isolate-scope'); - - forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP) || [], - attrName = match[3] || scopeName, - optional = (match[2] == '?'), - mode = match[1], // @, =, or & - lastValue, - parentGet, parentSet, compare; - - isolateScope.$$isolateBindings[scopeName] = mode + attrName; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateScope[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if( attrs[attrName] ) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateScope[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a,b) { return a === b; }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateScope[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateScope[scopeName] = parentGet(scope); - isolateScope.$watch(function parentValueWatch() { - var parentValue = parentGet(scope); - if (!compare(parentValue, isolateScope[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateScope[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateScope[scopeName]); - } - } - return lastValue = parentValue; - }, null, parentGet.literal); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateScope[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - - default: - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - newIsolateScopeDirective.name, scopeName, definition); - } - }); - } - transcludeFn = boundTranscludeFn && controllersBoundTransclude; - if (controllerDirectives) { - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals); - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance); - } - - if (directive.controllerAs) { - locals.$scope[directive.controllerAs] = controllerInstance; - } - }); - } - - // PRELINKING - for(i = 0, ii = preLinkFns.length; i < ii; i++) { - try { - linkFn = preLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for(i = postLinkFns.length - 1; i >= 0; i--) { - try { - linkFn = postLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // This is the function that is injected as `$transclude`. - function controllersBoundTransclude(scope, cloneAttachFn) { - var transcludeControllers; - - // no scope passed - if (arguments.length < 2) { - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for(var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i<ii; i++) { - try { - directive = directives[i]; - if ( (maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch(e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key]) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl; - - $compileNode.empty(); - - $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). - success(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = jqLite(content); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - - while(linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transclude) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }). - error(function(response, code, headers, config) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - if (linkQueue) { - linkQueue.push(scope); - linkQueue.push(node); - linkQueue.push(rootElement); - linkQueue.push(boundTranscludeFn); - } else { - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: valueFn(function textInterpolateLinkFn(scope, node) { - var parent = node.parent(), - bindings = parent.data('$binding') || []; - bindings.push(interpolateFn); - safeAddClass(parent.data('$binding', bindings), 'ng-binding'); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }) - }); - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "FORM" && attrNormalizedName == "action") || - (tag != "IMG" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name) { - var interpolateFn = $interpolate(value, true); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "SELECT") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // we need to interpolate again, in case the attribute value has been updated - // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the - // actual attr value - attr[name] = interpolateFn(scope); - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if(name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - }]; -} - -var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * All of these will become 'myDirective': - * my:Directive - * my-directive - * x-my-directive - * data-my:directive - * - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * @returns {object} A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * check `window[constructor]` on the global `window` object - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals) { - var instance, match, constructor, identifier; - - if(isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || getter($window, constructor, true); - - assertArgFn(expression, constructor, true); - } - - instance = $injector.instantiate(expression, locals); - - if (identifier) { - if (!(locals && typeof locals.$scope == 'object')) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - constructor || expression.name, identifier); - } - - locals.$scope[identifier] = instance; - } - - return instance; - }; - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - function MainCtrl($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - } - </file> - </example> - */ -function $DocumentProvider(){ - this.$get = ['$window', function(window){ - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () { - * return function (exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/, - CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; - - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: copy(CONTENT_TYPE_APPLICATION_JSON), - put: copy(CONTENT_TYPE_APPLICATION_JSON), - patch: copy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - /** - * Are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - */ - var interceptorFactories = this.interceptors = []; - - /** - * For historical reasons, response interceptors are ordered by the order in which - * they are applied to the response. (This is the opposite of interceptorFactories) - */ - var responseInterceptorFactories = this.responseInterceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - forEach(responseInterceptorFactories, function(interceptorFactory, index) { - var responseFn = isString(interceptorFactory) - ? $injector.get(interceptorFactory) - : $injector.invoke(interceptorFactory); - - /** - * Response interceptors go before "around" interceptors (no real reason, just - * had to pick one.) But they are already reversed, so we can't use unshift, hence - * the splice. - */ - reversedInterceptors.splice(index, 0, { - response: function(response) { - return responseFn($q.when(response)); - }, - responseError: function(response) { - return responseFn($q.reject(response)); - } - }); - }); - - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * $http({method: 'GET', url: '/someUrl'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * # Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * To globally augment or override the default transforms, modify the - * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` - * properties. These properties are by default an array of transform functions, which allows you - * to `push` or `unshift` a new transformation function into the transformation chain. You can - * also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. These defaults - * are again available on the $http factory at run-time, which may be useful if you have run-time - * services you wish to be involved in your transformations. - * - * Similarly, to locally override the request/response transforms, augment the - * `transformRequest` and/or `transformResponse` properties of the configuration object passed - * into `$http`. - * - * - * # Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * # Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with http `config` object. The function is free to - * modify the `config` or create a new one. The function needs to return the `config` - * directly or as a promise. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` or create a new one. The function needs to return the `response` - * directly or as a promise. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config || $q.when(config); - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response || $q.when(response); - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * # Response interceptors (DEPRECATED) - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous preprocessing of received responses, it is desirable to be able to intercept - * responses for http requests before they are handed over to the application code that - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return function(promise) { - * return promise.then(function(response) { - * // do something on success - * return response; - * }, function(response) { - * // do something on error - * if (canRecover(response)) { - * return responseOrNewPromise - * } - * return $q.reject(response); - * }); - * } - * }); - * - * $httpProvider.responseInterceptors.push('myHttpInterceptor'); - * - * - * // register the interceptor via an anonymous factory - * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { - * return function(promise) { - * // same as above - * } - * }); - * ``` - * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **transformResponse** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example> -<file name="index.html"> - <div ng-controller="FetchCtrl"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - - it('should make a JSONP request to angularjs.org', function() { - sampleJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Super Hero!/); - }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - var config = { - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }; - var headers = mergeHeaders(requestConfig); - - extend(config, requestConfig); - config.headers = headers; - config.method = uppercase(config.method); - - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - - var serverRequest = function(config) { - headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(config.data)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData, headers).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while(chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, config.transformResponse) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // execute if header value is function - execHeaders(defHeaders); - execHeaders(reqHeaders); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - return reqHeaders; - - function execHeaders(headers) { - var headerContent; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - headers[header] = headerContent; - } else { - delete headers[header]; - } - } - }); - } - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // if we won't have the response in cache, send the request to the backend - if (isUndefined(cachedResp)) { - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - resolvePromise(response, status, headersString, statusText); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText : statusText - }); - } - - - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - v = toJson(v); - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if(parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - - - }]; -} - -function createXhr(method) { - //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest - //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest - //if it is available - if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) || - !window.XMLHttpRequest)) { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } else if (window.XMLHttpRequest) { - return new window.XMLHttpRequest(); - } - - throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - var ABORTED = -1; - - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - var status; - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, status || -2); - } - callbacks[callbackId] = angular.noop; - }); - } else { - - var xhr = createXhr(method); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - // In IE6 and 7, this might be called synchronously when xhr.send below is called and the - // response is in the cache. the promise api will ensure that to the app code the api is - // always async - xhr.onreadystatechange = function() { - // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by - // xhrs that are resolved while the app is in the background (see #5426). - // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before - // continuing - // - // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and - // Safari respectively. - if (xhr && xhr.readyState == 4) { - var responseHeaders = null, - response = null; - - if(status !== ABORTED) { - responseHeaders = xhr.getAllResponseHeaders(); - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - response = ('response' in xhr) ? xhr.response : xhr.responseText; - } - - completeRequest(callback, - status || xhr.status, - response, - responseHeaders, - xhr.statusText || ''); - } - }; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (timeout && timeout.then) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - status = ABORTED; - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - timeoutId && $browserDefer.cancel(timeoutId); - jsonpDone = xhr = null; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status === 1223 ? 204 : status; - statusText = statusText || ''; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - script.onreadystatechange = script.onload = script.onerror = null; - rawDocument.body.removeChild(script); - if (done) done(); - }; - - script.type = 'text/javascript'; - script.src = url; - - if (msie && msie <= 8) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) { - doneWrapper(); - } - }; - } else { - script.onload = script.onerror = function() { - doneWrapper(); - }; - } - - rawDocument.body.appendChild(script); - return doneWrapper; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * @function - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function DemoController() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value){ - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value){ - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length; - - /** - * @ngdoc service - * @name $interpolate - * @function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * * `context`: an object against which any expressions embedded in the strings are evaluated - * against. - * - */ - function $interpolate(text, mustHaveExpression, trustedContext) { - var startIndex, - endIndex, - index = 0, - parts = [], - length = text.length, - hasInterpolation = false, - fn, - exp, - concat = []; - - while(index < length) { - if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - (index != startIndex) && parts.push(text.substring(index, startIndex)); - parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); - fn.exp = exp; - index = endIndex + endSymbolLength; - hasInterpolation = true; - } else { - // we did not find anything, so we have to add the remainder to the parts array - (index != length) && parts.push(text.substring(index)); - index = length; - } - } - - if (!(length = parts.length)) { - // we added, nothing, must have been an empty string. - parts.push(''); - length = 1; - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && parts.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || hasInterpolation) { - concat.length = length; - fn = function(context) { - try { - for(var i = 0, ii = length, part; i<ii; i++) { - if (typeof (part = parts[i]) == 'function') { - part = part(context); - if (trustedContext) { - part = $sce.getTrusted(trustedContext, part); - } else { - part = $sce.valueOf(part); - } - if (part === null || isUndefined(part)) { - part = ''; - } else if (typeof part != 'string') { - part = toJson(part); - } - } - concat[i] = part; - } - return concat.join(''); - } - catch(err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - }; - fn.exp = text; - fn.parts = parts; - return fn; - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', - function($rootScope, $window, $q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="time"> - * <file name="index.html"> - * <script> - * function Ctrl2($scope,$interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * } - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * } - * - * angular.module('time', []) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time ofter the DOM element was removed. - * element.bind('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }); - * </script> - * - * <div> - * <div ng-controller="Ctrl2"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply); - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - short: 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { - var parsedUrl = urlResolve(absoluteUrl, appBase); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj, appBase) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl, appBase); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} newAbsoluteUrl HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, appBase); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$rewrite = function(url) { - var appUrl, prevAppUrl; - - if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { - prevAppUrl = appUrl; - if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { - return appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - return appBase + prevAppUrl; - } - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { - return appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - return appBaseNoFile; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' - ? beginsWith(hashPrefix, withoutBaseUrl) - : (this.$$html5) - ? withoutBaseUrl - : ''; - - if (!isString(withoutHashUrl)) { - throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, - hashPrefix); - } - parseAppUrl(withoutHashUrl, this, appBase); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName (path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/?.*?:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - /* - * The input URL intentionally contains a - * first path segment that ends with a colon. - */ - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$rewrite = function(url) { - if(stripHash(appBase) == stripHash(url)) { - return url; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$rewrite = function(url) { - var appUrl; - - if ( appBase == stripHash(url) ) { - return url; - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { - return appBase + hashPrefix + appUrl; - } else if ( appBaseNoFile === url + '/') { - return appBaseNoFile; - } - }; -} - - -LocationHashbangInHtml5Url.prototype = - LocationHashbangUrl.prototype = - LocationHtml5Url.prototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing ? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @param {string=} replace The path that will be changed - * @return {string} url - */ - url: function(url, replace) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1]) this.path(decodeURIComponent(match[1])); - if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * @param {string=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. Hash object may contain an array of values, which will be decoded as duplicates in - * the url. - * - * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a - * single search parameter. If `paramValue` is an array, it will set the parameter as a - * comma-separated value. If `paramValue` is `null`, the parameter will be deleted. - * - * @return {string} search - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search)) { - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * @param {string=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', identity), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider(){ - var hashPrefix = '', - html5Mode = false; - - /** - * @ngdoc property - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc property - * @name $locationProvider#html5Mode - * @description - * @param {boolean=} mode Use HTML5 strategy if available. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isDefined(mode)) { - html5Mode = mode; - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', - function( $rootScope, $browser, $sniffer, $rootElement) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode) { - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parse($location.$$rewrite(initialUrl)); - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (event.ctrlKey || event.metaKey || event.which == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (lowercase(elm[0].nodeName) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - var rewrittenUrl = $location.$$rewrite(absHref); - - if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { - event.preventDefault(); - if (rewrittenUrl != $browser.url()) { - // update location manually - $location.$$parse(rewrittenUrl); - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - window.angular['ff-684208-preventDefault'] = true; - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl) { - if ($location.absUrl() != newUrl) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - - $location.$$parse(newUrl); - if ($rootScope.$broadcast('$locationChangeStart', newUrl, - oldUrl).defaultPrevented) { - $location.$$parse(oldUrl); - $browser.url(oldUrl); - } else { - afterLocationChange(oldUrl); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - } - }); - - // update browser - var changeCounter = 0; - $rootScope.$watch(function $locationWatch() { - var oldUrl = $browser.url(); - var currentReplace = $location.$$replace; - - if (!changeCounter || oldUrl != $location.absUrl()) { - changeCounter++; - $rootScope.$evalAsync(function() { - if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl). - defaultPrevented) { - $location.$$parse(oldUrl); - } else { - $browser.url($location.absUrl(), currentReplace); - afterLocationChange(oldUrl); - } - }); - } - $location.$$replace = false; - - return changeCounter; - }); - - return $location; - - function afterLocationChange(oldUrl) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example> - <file name="script.js"> - function LogCtrl($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - } - </file> - <file name="index.html"> - <div ng-controller="LogCtrl"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider(){ - var debug = true, - self = this; - - /** - * @ngdoc property - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window){ - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function () { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); -var promiseWarningCache = {}; -var promiseWarning; - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor(alert("evil JS code")) -// -// We want to prevent this type of access. For the sake of performance, during the lexing phase we -// disallow any "dotted" access to any member named "constructor". -// -// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor -// while evaluating the expression, which is a stronger but more expensive test. Since reflective -// calls are expensive anyway, this is not such a big deal compared to static dereferencing. -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// A developer could foil the name check by aliasing the Function constructor under a different -// name on the scope. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. - -function ensureSafeMemberName(name, fullExpression) { - if (name === "constructor") { - throw $parseMinErr('isecfld', - 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.document && obj.location && obj.alert && obj.setInterval) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var OPERATORS = { - /* jshint bitwise : false */ - 'null':function(){return null;}, - 'true':function(){return true;}, - 'false':function(){return false;}, - undefined:noop, - '+':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b)?b:undefined;}, - '-':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - return (isDefined(a)?a:0)-(isDefined(b)?b:0); - }, - '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, - '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, - '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, - '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, - '=':noop, - '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, - '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, - '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, - '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, - '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);}, - '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);}, - '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);}, - '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);}, - '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);}, - '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);}, - '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);}, -// '|':function(self, locals, a,b){return a|b;}, - '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));}, - '!':function(self, locals, a){return !a(self, locals);} -}; -/* jshint bitwise: true */ -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function (options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function (text) { - this.text = text; - - this.index = 0; - this.ch = undefined; - this.lastCh = ':'; // can start regexp - - this.tokens = []; - - var token; - var json = []; - - while (this.index < this.text.length) { - this.ch = this.text.charAt(this.index); - if (this.is('"\'')) { - this.readString(this.ch); - } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(this.ch)) { - this.readIdent(); - // identifiers can only be if the preceding char was a { or , - if (this.was('{,') && json[0] === '{' && - (token = this.tokens[this.tokens.length - 1])) { - token.json = token.text.indexOf('.') === -1; - } - } else if (this.is('(){}[].,;:?')) { - this.tokens.push({ - index: this.index, - text: this.ch, - json: (this.was(':[,') && this.is('{[')) || this.is('}]:,') - }); - if (this.is('{[')) json.unshift(this.ch); - if (this.is('}]')) json.shift(); - this.index++; - } else if (this.isWhitespace(this.ch)) { - this.index++; - continue; - } else { - var ch2 = this.ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var fn = OPERATORS[this.ch]; - var fn2 = OPERATORS[ch2]; - var fn3 = OPERATORS[ch3]; - if (fn3) { - this.tokens.push({index: this.index, text: ch3, fn: fn3}); - this.index += 3; - } else if (fn2) { - this.tokens.push({index: this.index, text: ch2, fn: fn2}); - this.index += 2; - } else if (fn) { - this.tokens.push({ - index: this.index, - text: this.ch, - fn: fn, - json: (this.was('[,:') && this.is('+-')) - }); - this.index += 1; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - this.lastCh = this.ch; - } - return this.tokens; - }, - - is: function(chars) { - return chars.indexOf(this.ch) !== -1; - }, - - was: function(chars) { - return chars.indexOf(this.lastCh) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9'); - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - number = 1 * number; - this.tokens.push({ - index: start, - text: number, - json: true, - fn: function() { return number; } - }); - }, - - readIdent: function() { - var parser = this; - - var ident = ''; - var start = this.index; - - var lastDot, peekIndex, methodName, ch; - - while (this.index < this.text.length) { - ch = this.text.charAt(this.index); - if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) { - if (ch === '.') lastDot = this.index; - ident += ch; - } else { - break; - } - this.index++; - } - - //check if this is not a method invocation and if it is back out to last dot - if (lastDot) { - peekIndex = this.index; - while (peekIndex < this.text.length) { - ch = this.text.charAt(peekIndex); - if (ch === '(') { - methodName = ident.substr(lastDot - start + 1); - ident = ident.substr(0, lastDot - start); - this.index = peekIndex; - break; - } - if (this.isWhitespace(ch)) { - peekIndex++; - } else { - break; - } - } - } - - - var token = { - index: start, - text: ident - }; - - // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn - if (OPERATORS.hasOwnProperty(ident)) { - token.fn = OPERATORS[ident]; - token.json = OPERATORS[ident]; - } else { - var getter = getterFn(ident, this.options, this.text); - token.fn = extend(function(self, locals) { - return (getter(self, locals)); - }, { - assign: function(self, value) { - return setter(self, ident, value, parser.text, parser.options); - } - }); - } - - this.tokens.push(token); - - if (methodName) { - this.tokens.push({ - index:lastDot, - text: '.', - json: false - }); - this.tokens.push({ - index: lastDot + 1, - text: methodName, - json: false - }); - } - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - if (rep) { - string += rep; - } else { - string += ch; - } - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - string: string, - json: true, - fn: function() { return string; } - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -/** - * @constructor - */ -var Parser = function (lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function () { - return 0; -}, { - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function (text, json) { - this.text = text; - - //TODO(i): strip all the obsolte json stuff from this file - this.json = json; - - this.tokens = this.lexer.lex(text); - - if (json) { - // The extra level of aliasing is here, just in case the lexer misses something, so that - // we prevent any accidental execution in JSON. - this.assignment = this.logicalOR; - - this.functionCall = - this.fieldAccess = - this.objectIndex = - this.filterChain = function() { - this.throwError('is not valid json', {text: text, index: 0}); - }; - } - - var value = json ? this.primary() : this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function () { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else { - var token = this.expect(); - primary = token.fn; - if (!primary) { - this.throwError('not a primary expression', token); - } - if (token.json) { - primary.constant = true; - primary.literal = true; - } - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - if (this.tokens.length > 0) { - var token = this.tokens[0]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4){ - var token = this.peek(e1, e2, e3, e4); - if (token) { - if (this.json && !token.json) { - this.throwError('is not valid json', token); - } - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1){ - if (!this.expect(e1)) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - }, - - unaryFn: function(fn, right) { - return extend(function(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant - }); - }, - - ternaryFn: function(left, middle, right){ - return extend(function(self, locals){ - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - }, - - binaryFn: function(left, fn, right) { - return extend(function(self, locals) { - return fn(self, locals, left, right); - }, { - constant:left.constant && right.constant - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function(self, locals) { - var value; - for (var i = 0; i < statements.length; i++) { - var statement = statements[i]; - if (statement) { - value = statement(self, locals); - } - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while (true) { - if ((token = this.expect('|'))) { - left = this.binaryFn(left, token.fn, this.filter()); - } else { - return left; - } - } - }, - - filter: function() { - var token = this.expect(); - var fn = this.$filter(token.text); - var argsFn = []; - while (true) { - if ((token = this.expect(':'))) { - argsFn.push(this.expression()); - } else { - var fnInvoke = function(self, locals, input) { - var args = [input]; - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](self, locals)); - } - return fn.apply(self, args); - }; - return function() { - return fnInvoke; - }; - } - } - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return function(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }; - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.ternary(); - if ((token = this.expect(':'))) { - return this.ternaryFn(left, middle, this.ternary()); - } else { - this.throwError('expected :', token); - } - } else { - return left; - } - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while (true) { - if ((token = this.expect('||'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } else { - return left; - } - } - }, - - logicalAND: function() { - var left = this.equality(); - var token; - if ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - if ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.fn, this.equality()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - if ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.fn, this.relational()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.fn, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.fn, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.fn, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.fn, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var parser = this; - var field = this.expect().text; - var getter = getterFn(field, this.options, this.text); - - return extend(function(scope, locals, self) { - return getter(self || object(scope, locals)); - }, { - assign: function(scope, value, locals) { - return setter(object(scope, locals), field, value, parser.text, parser.options); - } - }); - }, - - objectIndex: function(obj) { - var parser = this; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v, p; - - if (!o) return undefined; - v = ensureSafeObject(o[i], parser.text); - if (v && v.then && parser.options.unwrapPromises) { - p = v; - if (!('$$v' in v)) { - p.$$v = undefined; - p.then(function(val) { p.$$v = val; }); - } - v = v.$$v; - } - return v; - }, { - assign: function(self, value, locals) { - var key = indexFn(self, locals); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var safe = ensureSafeObject(obj(self, locals), parser.text); - return safe[key] = value; - } - }); - }, - - functionCall: function(fn, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var parser = this; - - return function(scope, locals) { - var args = []; - var context = contextGetter ? contextGetter(scope, locals) : scope; - - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](scope, locals)); - } - var fnPtr = fn(scope, locals, context) || noop; - - ensureSafeObject(context, parser.text); - ensureSafeObject(fnPtr, parser.text); - - // IE stupidity! (IE doesn't have apply for some native functions) - var v = fnPtr.apply - ? fnPtr.apply(context, args) - : fnPtr(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, parser.text); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function () { - var elementFns = []; - var allConstant = true; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - var elementFn = this.expression(); - elementFns.push(elementFn); - if (!elementFn.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function(self, locals) { - var array = []; - for (var i = 0; i < elementFns.length; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: allConstant - }); - }, - - object: function () { - var keyValues = []; - var allConstant = true; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.expect(), - key = token.string || token.text; - this.consume(':'); - var value = this.expression(); - keyValues.push({key: key, value: value}); - if (!value.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function(self, locals) { - var object = {}; - for (var i = 0; i < keyValues.length; i++) { - var keyValue = keyValues[i]; - object[keyValue.key] = keyValue.value(self, locals); - } - return object; - }, { - literal: true, - constant: allConstant - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp, options) { - //needed? - options = options || {}; - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - if (obj.then && options.unwrapPromises) { - promiseWarning(fullExp); - if (!("$$v" in obj)) { - (function(promise) { - promise.then(function(val) { promise.$$v = val; }); } - )(obj); - } - if (obj.$$v === undefined) { - obj.$$v = {}; - } - obj = obj.$$v; - } - } - key = ensureSafeMemberName(element.shift(), fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCache = {}; - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - - return !options.unwrapPromises - ? function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = pathVal[key0]; - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - - return pathVal; - } - : function cspSafePromiseEnabledGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, - promise; - - if (pathVal == null) return pathVal; - - pathVal = pathVal[key0]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - return pathVal; - }; -} - -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); - - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - }; -} - -function simpleGetterFn2(key0, key1, fullExp) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - - return function simpleGetterFn2(scope, locals) { - if (scope == null) return undefined; - scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - return scope == null ? undefined : scope[key1]; - }; -} - -function getterFn(path, options, fullExp) { - // Check whether the cache has this getter already. - // We can use hasOwnProperty directly on the cache because we ensure, - // see below, that the cache never stores a path called 'hasOwnProperty' - if (getterFnCache.hasOwnProperty(path)) { - return getterFnCache[path]; - } - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length, - fn; - - // When we have only 1 or 2 tokens, use optimized special case closures. - // http://jsperf.com/angularjs-parse-getter/6 - if (!options.unwrapPromises && pathKeysLength === 1) { - fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (!options.unwrapPromises && pathKeysLength === 2) { - fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); - } else if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, - options); - } else { - fn = function(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, options)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = 'var p;\n'; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - code += 'if(s == null) return undefined;\n' + - 's='+ (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' + - (options.unwrapPromises - ? 'if (s && s.then) {\n' + - ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + - ' if (!("$$v" in s)) {\n' + - ' p=s;\n' + - ' p.$$v = undefined;\n' + - ' p.then(function(v) {p.$$v=v;});\n' + - '}\n' + - ' s=s.$$v\n' + - '}\n' - : ''); - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - fn = options.unwrapPromises ? function(scope, locals) { - return evaledFnGetter(scope, locals, promiseWarning); - } : evaledFnGetter; - } - - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - if (path !== 'hasOwnProperty') { - getterFnCache[path] = fn; - } - return fn; -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @function - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = {}; - - var $parseOptions = { - csp: false, - unwrapPromises: false, - logPromiseWarnings: true - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#unwrapPromises - * @description - * - * **This feature is deprecated, see deprecation notes below for more info** - * - * If set to true (default is false), $parse will unwrap promises automatically when a promise is - * found at any part of the expression. In other words, if set to true, the expression will always - * result in a non-promise value. - * - * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, - * the fulfillment value is used in place of the promise while evaluating the expression. - * - * **Deprecation notice** - * - * This is a feature that didn't prove to be wildly useful or popular, primarily because of the - * dichotomy between data access in templates (accessed as raw values) and controller code - * (accessed as promises). - * - * In most code we ended up resolving promises manually in controllers anyway and thus unifying - * the model access there. - * - * Other downsides of automatic promise unwrapping: - * - * - when building components it's often desirable to receive the raw promises - * - adds complexity and slows down expression evaluation - * - makes expression code pre-generation unattractive due to the amount of code that needs to be - * generated - * - makes IDE auto-completion and tool support hard - * - * **Warning Logs** - * - * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a - * promise (to reduce the noise, each expression is logged only once). To disable this logging use - * `$parseProvider.logPromiseWarnings(false)` api. - * - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.unwrapPromises = function(value) { - if (isDefined(value)) { - $parseOptions.unwrapPromises = !!value; - return this; - } else { - return $parseOptions.unwrapPromises; - } - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#logPromiseWarnings - * @description - * - * Controls whether Angular should log a warning on any encounter of a promise in an expression. - * - * The default is set to `true`. - * - * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.logPromiseWarnings = function(value) { - if (isDefined(value)) { - $parseOptions.logPromiseWarnings = value; - return this; - } else { - return $parseOptions.logPromiseWarnings; - } - }; - - - this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { - $parseOptions.csp = $sniffer.csp; - - promiseWarning = function promiseWarningFn(fullExp) { - if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; - promiseWarningCache[fullExp] = true; - $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + - 'Automatic unwrapping of promises in Angular expressions is deprecated.'); - }; - - return function(exp) { - var parsedExpression; - - switch (typeof exp) { - case 'string': - - if (cache.hasOwnProperty(exp)) { - return cache[exp]; - } - - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp, false); - - if (exp !== 'hasOwnProperty') { - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - cache[exp] = parsedExpression; - } - - return parsedExpression; - - case 'function': - return exp; - - default: - return noop; - } - }; - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * // since this fn executes async in a future turn of the event loop, we need to wrap - * // our code into an $apply call so that the model changes are properly observed. - * scope.$apply(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }); - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as - * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to - * make your code IE8 and Android 2.x compatible. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - - -/** - * Constructs a promise manager. - * - * @param {function(Function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - - /** - * @ngdoc method - * @name $q#defer - * @function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - var pending = [], - value, deferred; - - deferred = { - - resolve: function(val) { - if (pending) { - var callbacks = pending; - pending = undefined; - value = ref(val); - - if (callbacks.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - value.then(callback[0], callback[1], callback[2]); - } - }); - } - } - }, - - - reject: function(reason) { - deferred.resolve(createInternalRejectedPromise(reason)); - }, - - - notify: function(progress) { - if (pending) { - var callbacks = pending; - - if (pending.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - callback[2](progress); - } - }); - } - } - }, - - - promise: { - then: function(callback, errback, progressback) { - var result = defer(); - - var wrappedCallback = function(value) { - try { - result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedErrback = function(reason) { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress)); - } catch(e) { - exceptionHandler(e); - } - }; - - if (pending) { - pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]); - } else { - value.then(wrappedCallback, wrappedErrback, wrappedProgressback); - } - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback) { - - function makePromise(value, resolved) { - var result = defer(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - } - - function handleCallback(value, isResolved) { - var callbackOutput = null; - try { - callbackOutput = (callback ||defaultCallback)(); - } catch(e) { - return makePromise(e, false); - } - if (callbackOutput && isFunction(callbackOutput.then)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - } - - return this.then(function(value) { - return handleCallback(value, true); - }, function(error) { - return handleCallback(error, false); - }); - } - } - }; - - return deferred; - }; - - - var ref = function(value) { - if (value && isFunction(value.then)) return value; - return { - then: function(callback) { - var result = defer(); - nextTick(function() { - result.resolve(callback(value)); - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#reject - * @function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = defer(); - result.reject(reason); - return result.promise; - }; - - var createInternalRejectedPromise = function(reason) { - return { - then: function(callback, errback) { - var result = defer(); - nextTick(function() { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#when - * @function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - var when = function(value, callback, errback, progressback) { - var result = defer(), - done; - - var wrappedCallback = function(value) { - try { - return (isFunction(callback) ? callback : defaultCallback)(value); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedErrback = function(reason) { - try { - return (isFunction(errback) ? errback : defaultErrback)(reason); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - return (isFunction(progressback) ? progressback : defaultCallback)(progress); - } catch (e) { - exceptionHandler(e); - } - }; - - nextTick(function() { - ref(value).then(function(value) { - if (done) return; - done = true; - result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback)); - }, function(reason) { - if (done) return; - done = true; - result.resolve(wrappedErrback(reason)); - }, function(progress) { - if (done) return; - result.notify(wrappedProgressback(progress)); - }); - }); - - return result.promise; - }; - - - function defaultCallback(value) { - return value; - } - - - function defaultErrback(reason) { - return reject(reason); - } - - - /** - * @ngdoc method - * @name $q#all - * @function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - function all(promises) { - var deferred = defer(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - ref(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - return { - defer: defer, - reject: reject, - when: when, - all: all - }; -} - -function $$RAFProvider(){ //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame || - $window.mozRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.mozCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (shift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider(){ - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function( $injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - child.name = "World"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this['this'] = this.$root = this; - this.$$destroyed = false; - this.$$asyncQueue = []; - this.$$postDigestQueue = []; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = {}; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for - * debugging. - */ - - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and - * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the - * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate) { - var ChildScope, - child; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - // ensure that there is just one async queue per $rootScope and its children - child.$$asyncQueue = this.$$asyncQueue; - child.$$postDigestQueue = this.$$postDigestQueue; - } else { - ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges - // the name it does not become random set of chars. This will then show up as class - // name in the web inspector. - ChildScope.prototype = this; - child = new ChildScope(); - child.$id = nextUid(); - } - child['this'] = child; - child.$$listeners = {}; - child.$$listenerCount = {}; - child.$parent = this; - child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; - child.$$prevSibling = this.$$childTail; - if (this.$$childHead) { - this.$$childTail.$$nextSibling = child; - this.$$childTail = child; - } else { - this.$$childHead = this.$$childTail = child; - } - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). The inequality is determined according to - * {@link angular.equals} function. To save the value of the object for later comparison, - * the {@link angular.copy} function is used. It also means that watching complex options - * will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * The example below contains an illustration of using a function as your $watch listener - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - - - - // Using a listener function - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This is the listener function - function() { return food; }, - // This is the change handler - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {(function()|string)=} listener Callback called whenever the return value of - * the `watchExpression` changes. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(newValue, oldValue, scope)`: called with current and previous values as - * parameters. - * - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var scope = this, - get = compileToFn(watchExp, 'watch'), - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - // in the case user pass string, we need to compile it, do we really need this ? - if (!isFunction(listener)) { - var listenFn = compileToFn(listener || noop, 'listener'); - watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; - } - - if (typeof watchExp == 'string' && get.constant) { - var originalFn = watcher.fn; - watcher.fn = function(newVal, oldVal, scope) { - originalFn.call(this, newVal, oldVal, scope); - arrayRemove(array, watcher); - }; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var objGetter = $parse(obj); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionWatch() { - newValue = objGetter(self); - var newLength, key; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - var bothNaN = (oldValue[i] !== oldValue[i]) && - (newValue[i] !== newValue[i]); - if (!bothNaN && (oldValue[i] !== newValue[i])) { - changeDetected++; - oldValue[i] = newValue[i]; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - if (oldValue.hasOwnProperty(key)) { - if (oldValue[key] !== newValue[key]) { - changeDetected++; - oldValue[key] = newValue[key]; - } - } else { - oldLength++; - oldValue[key] = newValue[key]; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for(key in oldValue) { - if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch($watchCollectionWatch, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - asyncQueue = this.$$asyncQueue, - postDigestQueue = this.$$postDigestQueue, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while(asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression); - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value == 'number' && typeof last == 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - logMsg = (isFunction(watch.exp)) - ? 'fn: ' + (watch.exp.name || watch.exp.toString()) - : watch.exp; - logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); - watchLog[logIdx].push(logMsg); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, toJson(watchLog)); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while(postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = null; - - // don't reset these to null in case some async task tries to register a listener/watch/task - this.$$listeners = {}; - this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; - - // prevent NPEs since these methods have references to properties we nulled out - this.$destroy = this.$digest = this.$apply = noop; - this.$on = this.$watch = function() { return noop; }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - */ - $evalAsync: function(expr) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { - $browser.defer(function() { - if ($rootScope.$$asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - this.$$asyncQueue.push({scope: this, expression: expr}); - }, - - $$postDigest : function(fn) { - this.$$postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the current scope which is handling the event. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - namedListeners[indexOf(namedListeners, listener)] = null; - decrementListenerCount(self, 1, name); - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i=0, length=namedListeners.length; i<length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) return event; - //traverse upwards - scope = scope.$parent; - } while (scope); - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i=0, length = listeners.length; i<length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch(e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - return event; - } - }; - - var $rootScope = new Scope(); - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function compileToFn(exp, name) { - var fn = $parse(exp); - assertArgFn(fn, name); - return fn; - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case. - if (!msie || msie >= 8 ) { - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:'+normalizedVal; - } - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -// Copied from: -// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962 -// Prereq: s is a string. -function escapeForRegexp(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -} - - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * <pre class="prettyprint"> - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**']); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**']); - * }); - * </pre> - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function (value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function (value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * <pre class="prettyprint"> - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"> - * </pre> - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * <pre class="prettyprint"> - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * </pre> - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead for the developer? - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) It's usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * @example -<example module="mySceApp" deps="angular-sanitize.js"> -<file name="index.html"> - <div ng-controller="myAppController as myCtrl"> - <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - <b>User comments</b><br> - By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - $sanitize is available. If $sanitize isn't available, this results in an error instead of an - exploit. - <div class="well"> - <div ng-repeat="userComment in myCtrl.userComments"> - <b>{{userComment.name}}</b>: - <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - <br> - </div> - </div> - </div> -</file> - -<file name="script.js"> - var mySceApp = angular.module('mySceApp', ['ngSanitize']); - - mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { - var self = this; - $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - self.userComments = userComments; - }); - self.explicitlyTrustedHtml = $sce.trustAsHtml( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); -</file> - -<file name="test_data.json"> -[ - { "name": "Alice", - "htmlComment": - "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - }, - { "name": "Bob", - "htmlComment": "<i>Yes!</i> Am I the only other one?" - } -] -</file> - -<file name="protractor.js" type="protractor"> - describe('SCE doc demo', function() { - it('should sanitize untrusted values', function() { - expect(element(by.css('.htmlComment')).getInnerHtml()) - .toBe('<span>Is <i>anyone</i> reading this?</span>'); - }); - - it('should NOT sanitize explicitly trusted values', function() { - expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); - }); -</file> -</example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * <pre class="prettyprint"> - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * </pre> - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function (value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sniffer', '$sceDelegate', function( - $parse, $sniffer, $sceDelegate) { - // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = copy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function () { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parse - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return function sceParseAsTrusted(self, locals) { - return sce.getTrusted(type, parsed(self, locals)); - }; - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function (enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function (expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function (value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function (value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} hashchange Does the browser support hashchange event ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - documentMode = document.documentMode, - vendorPrefix, - vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for(var prop in bodyStyle) { - if(match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if(!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions||!animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hashchange: 'onhashchange' in $window && - // IE8 compatible mode lies - (!documentMode || documentMode > 7), - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - if (event == 'input' && msie == 9) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions : transitions, - animations : animations, - android: android, - msie : msie, - msieDocumentMode: documentMode - }; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', - function($rootScope, $browser, $q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - skipApply = (isDefined(invokeApply) && !invokeApply), - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch(e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href, true); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url, base) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - } - </script> - <div ng-controller="Ctrl"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ -/** - * @ngdoc method - * @name $filterProvider#register - * @description - * Register filter factory function. - * - * @param {String} name Name of the filter. - * @param {Function} fn The filter factory function which is injectable. - */ - - -/** - * @ngdoc service - * @name $filter - * @function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if(isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against - * the contents of the `array`. All strings or objects with string properties in `array` that contain this string - * will be returned. The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object. That's equivalent to the simple substring match with a `string` - * as described above. - * - * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is - * called for each element of `array`. The final result is an array of those elements that - * the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var comparatorType = typeof(comparator), - predicates = []; - - predicates.check = function(value) { - for (var j = 0; j < predicates.length; j++) { - if(!predicates[j](value)) { - return false; - } - } - return true; - }; - - if (comparatorType !== 'function') { - if (comparatorType === 'boolean' && comparator) { - comparator = function(obj, text) { - return angular.equals(obj, text); - }; - } else { - comparator = function(obj, text) { - if (obj && text && typeof obj === 'object' && typeof text === 'object') { - for (var objKey in obj) { - if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && - comparator(obj[objKey], text[objKey])) { - return true; - } - } - return false; - } - text = (''+text).toLowerCase(); - return (''+obj).toLowerCase().indexOf(text) > -1; - }; - } - } - - var search = function(obj, text){ - if (typeof text == 'string' && text.charAt(0) === '!') { - return !search(obj, text.substr(1)); - } - switch (typeof obj) { - case "boolean": - case "number": - case "string": - return comparator(obj, text); - case "object": - switch (typeof text) { - case "object": - return comparator(obj, text); - default: - for ( var objKey in obj) { - if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) { - return true; - } - } - break; - } - return false; - case "array": - for ( var i = 0; i < obj.length; i++) { - if (search(obj[i], text)) { - return true; - } - } - return false; - default: - return false; - } - }; - switch (typeof expression) { - case "boolean": - case "number": - case "string": - // Set up expression object and fall through - expression = {$:expression}; - // jshint -W086 - case "object": - // jshint +W086 - for (var key in expression) { - (function(path) { - if (typeof expression[path] == 'undefined') return; - predicates.push(function(value) { - return search(path == '$' ? value : (value && value[path]), expression[path]); - }); - })(key); - } - break; - case 'function': - predicates.push(expression); - break; - default: - return array; - } - var filtered = []; - for ( var j = 0; j < array.length; j++) { - var value = array[j]; - if (predicates.check(value)) { - filtered.push(value); - } - } - return filtered; - }; -} - -/** - * @ngdoc filter - * @name currency - * @function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @returns {string} Formatted number. - * - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.amount = 1234.56; - } - </script> - <div ng-controller="Ctrl"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol){ - if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; - return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = 1234.56789; - } - </script> - <div ng-controller="Ctrl"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (number == null || !isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - numStr = '0'; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - var pow = Math.pow(10, fractionSize); - number = Math.round(number * pow) / pow; - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i)%group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i)%lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while(fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - - if (fractionSize > 0 && number > -1 && number < 1) { - formatedText = number.toFixed(fractionSize); - } - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre); - parts.push(formatedText); - parts.push(isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12 ) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in am/pm, padded (01-12) - * * `'h'`: Hour in am/pm, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) - * * `'a'`: am/pm marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 pm) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) - * - * `format` string can contain literal values. These need to be quoted with single quotes (e.g. - * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4]||0) - tzHour; - var m = int(match[5]||0) - tzMin; - var s = int(match[6]||0); - var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - if (NUMBER_STRING.test(date)) { - date = int(date); - } else { - date = jsonStringToDate(date); - } - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while(format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - forEach(parts, function(value){ - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre>{{ {'name':'value'} | json }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object) { - return toJson(object, true); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array or string, as specified by - * the value and sign (positive or negative) of `limit`. - * - * @param {Array|string} input Source array or string to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.numLimit = 3; - $scope.letterLimit = 3; - } - </script> - <div ng-controller="Ctrl"> - Limit {{numbers}} to: <input type="integer" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="integer" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - }); - - it('should update the output when -3 is entered', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('-3'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('-3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - }); - </file> - </example> - */ -function limitToFilter(){ - return function(input, limit) { - if (!isArray(input) && !isString(input)) return input; - - limit = int(limit); - - if (isString(input)) { - //NaN check on limit - if (limit) { - return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length); - } else { - return ""; - } - } - - var out = [], - i, n; - - // if abs(limit) exceeds maximum length, trim it - if (limit > input.length) - limit = input.length; - else if (limit < -input.length) - limit = -input.length; - - if (limit > 0) { - i = 0; - n = limit; - } else { - i = input.length + limit; - n = input.length; - } - - for (; i<n; i++) { - out.push(input[i]); - } - - return out; - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @function - * - * @description - * Orders a specified `array` by the `expression` predicate. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression which evaluates to an object to order by, such as 'name' - * to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control - * ascending or descending sort order (for example, +name or -name). - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}] - $scope.predicate = '-age'; - } - </script> - <div ng-controller="Ctrl"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse){ - return function(array, sortPredicate, reverseOrder) { - if (!isArray(array)) return array; - if (!sortPredicate) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; - sortPredicate = map(sortPredicate, function(predicate){ - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a,b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a,b){ - return compare(get(a),get(b)); - }, descending); - }); - var arrayCopy = []; - for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); } - return arrayCopy.sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2){ - for ( var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return toBoolean(descending) - ? function(a,b){return comp(b,a);} - : comp; - } - function compare(v1, v2){ - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 == t2) { - if (t1 == "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - - if (msie <= 8) { - - // turn <a href ng-click="..">link</a> into a stylable link in IE - // but only if it doesn't have name attribute, in which case it's an anchor - if (!attr.href && !attr.name) { - attr.$set('href', ''); - } - - // add a comment node to anchors to workaround IE bug that causes element content to be reset - // to new attribute content if attribute is updated with value containing @ and element also - // contains value with @ - // see issue #1949 - element.append(document.createComment('IE fix')); - } - - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event){ - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. - * - * The `ngHref` directive solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 1000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 1000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) - return; - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl */ -var nullFormCtrl = { - $addControl: noop, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop -}; - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * - * @property {Object} $error Is an object hash, containing references to all invalid controls or - * forms, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that are invalid for given error name. - * - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate']; -function FormController(element, attrs, $scope, $animate) { - var form = this, - parentForm = element.parent().controller('form') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - errors = form.$error = {}, - controls = []; - - // init state - form.$name = attrs.name || attrs.ngForm; - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - - parentForm.$addControl(form); - - // Setup initial state of the control - element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(errors, function(queue, validationToken) { - form.$setValidity(validationToken, true, control); - }); - - arrayRemove(controls, control); - }; - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - form.$setValidity = function(validationToken, isValid, control) { - var queue = errors[validationToken]; - - if (isValid) { - if (queue) { - arrayRemove(queue, control); - if (!queue.length) { - invalidCount--; - if (!invalidCount) { - toggleValidCss(isValid); - form.$valid = true; - form.$invalid = false; - } - errors[validationToken] = false; - toggleValidCss(true, validationToken); - parentForm.$setValidity(validationToken, true, form); - } - } - - } else { - if (!invalidCount) { - toggleValidCss(isValid); - } - if (queue) { - if (includes(queue, control)) return; - } else { - errors[validationToken] = queue = []; - invalidCount++; - toggleValidCss(false, validationToken); - parentForm.$setValidity(validationToken, false, form); - } - queue.push(control); - - form.$valid = false; - form.$invalid = true; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function () { - $animate.removeClass(element, DIRTY_CLASS); - $animate.addClass(element, PRISTINE_CLASS); - form.$dirty = false; - form.$pristine = true; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; -} - - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.userType = 'guest'; - } - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="Ctrl" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function() { - return { - pre: function(scope, formElement, attr, controller) { - if (!attr.action) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var preventDefaultListener = function(event) { - event.preventDefault - ? event.preventDefault() - : event.returnValue = false; // IE - }; - - addEventListenerFn(formElement[0], 'submit', preventDefaultListener); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); - }, 0, false); - }); - } - - var parentFormCtrl = formElement.parent().controller('form'), - alias = attr.name || attr.ngForm; - - if (alias) { - setter(scope, alias, controller, alias); - } - if (parentFormCtrl) { - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global - - -VALID_CLASS, - -INVALID_CLASS, - -PRISTINE_CLASS, - -DIRTY_CLASS -*/ - -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * - * @example - <example name="text-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'guest'; - $scope.word = /^\s*\w*\s*$/; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Single word: <input type="text" name="input" ng-model="text" - ng-pattern="word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value = 12; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Number: <input type="number" name="input" ng-model="value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'http://google.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - URL: <input type="url" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'me@example.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Email: <input type="email" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.color = 'blue'; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - <input type="radio" ng-model="color" value="red"> Red <br/> - <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color" value="blue"> Blue <br/> - <tt>color = {{color | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngTrueValue The value to which the expression should be set when selected. - * @param {string=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value1 = true; - $scope.value2 = 'YES' - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Value1: <input type="checkbox" ng-model="value1"> <br/> - Value2: <input type="checkbox" ng-model="value2" - ng-true-value="YES" ng-false-value="NO"> <br/> - <tt>value1 = {{value1}}</tt><br/> - <tt>value2 = {{value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('value1')); - var value2 = element(by.binding('value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('value1')).click(); - element(by.model('value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -// A helper function to call $setValidity and return the value / undefined, -// a pattern that is repeated a lot in the input validation logic. -function validate(ctrl, validatorName, validity, value){ - ctrl.$setValidity(validatorName, validity); - return validity ? value : undefined; -} - - -function addNativeHtml5Validators(ctrl, validatorName, element) { - var validity = element.prop('validity'); - if (isObject(validity)) { - var validator = function(value) { - // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can - // perform the required validation) - if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError || - validity.typeMismatch) && !validity.valueMissing) { - ctrl.$setValidity(validatorName, false); - return; - } - return value; - }; - ctrl.$parsers.push(validator); - } -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var validity = element.prop('validity'); - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function() { - if (composing) return; - var value = element.val(); - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // e.g. <input ng-model="foo" ng-trim="false"> - if (toBoolean(attr.ngTrim || 'T')) { - value = trim(value); - } - - if (ctrl.$viewValue !== value || - // If the value is still empty/falsy, and there is no `required` error, run validators - // again. This enables HTML5 constraint validation errors to affect Angular validation - // even when the first character entered causes an error. - (validity && value === '' && !validity.valueMissing)) { - if (scope.$$phase) { - ctrl.$setViewValue(value); - } else { - scope.$apply(function() { - ctrl.$setViewValue(value); - }); - } - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function() { - if (!timeout) { - timeout = $browser.defer(function() { - listener(); - timeout = null; - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; - - // pattern validator - var pattern = attr.ngPattern, - patternValidator, - match; - - if (pattern) { - var validateRegex = function(regexp, value) { - return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); - }; - match = pattern.match(/^\/(.*)\/([gim]*)$/); - if (match) { - pattern = new RegExp(match[1], match[2]); - patternValidator = function(value) { - return validateRegex(pattern, value); - }; - } else { - patternValidator = function(value) { - var patternObj = scope.$eval(pattern); - - if (!patternObj || !patternObj.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, - patternObj, startingTag(element)); - } - return validateRegex(patternObj, value); - }; - } - - ctrl.$formatters.push(patternValidator); - ctrl.$parsers.push(patternValidator); - } - - // min length validator - if (attr.ngMinlength) { - var minlength = int(attr.ngMinlength); - var minLengthValidator = function(value) { - return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value); - }; - - ctrl.$parsers.push(minLengthValidator); - ctrl.$formatters.push(minLengthValidator); - } - - // max length validator - if (attr.ngMaxlength) { - var maxlength = int(attr.ngMaxlength); - var maxLengthValidator = function(value) { - return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); - }; - - ctrl.$parsers.push(maxLengthValidator); - ctrl.$formatters.push(maxLengthValidator); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$parsers.push(function(value) { - var empty = ctrl.$isEmpty(value); - if (empty || NUMBER_REGEXP.test(value)) { - ctrl.$setValidity('number', true); - return value === '' ? null : (empty ? value : parseFloat(value)); - } else { - ctrl.$setValidity('number', false); - return undefined; - } - }); - - addNativeHtml5Validators(ctrl, 'number', element); - - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? '' : '' + value; - }); - - if (attr.min) { - var minValidator = function(value) { - var min = parseFloat(attr.min); - return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); - }; - - ctrl.$parsers.push(minValidator); - ctrl.$formatters.push(minValidator); - } - - if (attr.max) { - var maxValidator = function(value) { - var max = parseFloat(attr.max); - return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); - }; - - ctrl.$parsers.push(maxValidator); - ctrl.$formatters.push(maxValidator); - } - - ctrl.$formatters.push(function(value) { - return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); - }); -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var urlValidator = function(value) { - return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(urlValidator); - ctrl.$parsers.push(urlValidator); -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var emailValidator = function(value) { - return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(emailValidator); - ctrl.$parsers.push(emailValidator); -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - element.on('click', function() { - if (element[0].checked) { - scope.$apply(function() { - ctrl.$setViewValue(attr.value); - }); - } - }); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function checkboxInputType(scope, element, attr, ctrl) { - var trueValue = attr.ngTrueValue, - falseValue = attr.ngFalseValue; - - if (!isString(trueValue)) trueValue = true; - if (!isString(falseValue)) falseValue = false; - - element.on('click', function() { - scope.$apply(function() { - ctrl.$setViewValue(element[0].checked); - }); - }); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox. - ctrl.$isEmpty = function(value) { - return value !== trueValue; - }; - - ctrl.$formatters.push(function(value) { - return value === trueValue; - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control with angular data-binding. Input control follows HTML5 input types - * and polyfills the HTML5 validation behavior for older browsers. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - } - </script> - <div ng-controller="Ctrl"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.binding('{{user}}')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { - return { - restrict: 'E', - require: '?ngModel', - link: function(scope, element, attr, ctrl) { - if (ctrl) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, - $browser); - } - } - }; -}]; - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty'; - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. Each function is called, in turn, passing the value - through to the next. The last return value is used to populate the model. - Used to sanitize / convert the value as well as validation. For validation, - the parsers should update the validity state using - {@link ngModel.NgModelController#$setValidity $setValidity()}, - and return `undefined` for invalid values. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. Each function is called, in turn, passing the value through to the - next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all errors as keys. - * - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * - * @description - * - * `NgModelController` provides API for the `ng-model` directive. The controller contains - * services for data-binding, validation, CSS updates, and value formatting and parsing. It - * purposefully does not contain any logic which deals with DOM rendering or listening to - * DOM events. Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding. - * - * ## Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * <example name="NgModelController" module="customControl"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', []). - directive('contenteditable', function() { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if(!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html(ngModel.$viewValue || ''); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$apply(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$name = $attr.name; - - var ngModelGet = $parse($attr.ngModel), - ngModelSet = ngModelGet.assign; - - if (!ngModelSet) { - throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of the input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is empty. - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - $error = this.$error = {}; // keep invalid keys here - - - // Setup initial state of the control - $element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notifies the form when the control changes validity. (i.e. it - * does not notify form if given validator is already marked as invalid). - * - * This method should be called by validators - i.e. the parser or formatter functions. - * - * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign - * to `$error[validationErrorKey]=isValid` so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true) or invalid (false). - */ - this.$setValidity = function(validationErrorKey, isValid) { - // Purposeful use of ! here to cast isValid to boolean in case it is undefined - // jshint -W018 - if ($error[validationErrorKey] === !isValid) return; - // jshint +W018 - - if (isValid) { - if ($error[validationErrorKey]) invalidCount--; - if (!invalidCount) { - toggleValidCss(true); - this.$valid = true; - this.$invalid = false; - } - } else { - toggleValidCss(false); - this.$invalid = true; - this.$valid = false; - invalidCount++; - } - - $error[validationErrorKey] = !isValid; - toggleValidCss(isValid, validationErrorKey); - - parentForm.$setValidity(validationErrorKey, isValid, this); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the control to its pristine - * state (ng-pristine class). - */ - this.$setPristine = function () { - this.$dirty = false; - this.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when the view value changes, typically from within a DOM event handler. - * For example {@link ng.directive:input input} and - * {@link ng.directive:select select} directives call it. - * - * It will update the $viewValue, then pass this value through each of the functions in `$parsers`, - * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to - * `$modelValue` and the **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - */ - this.$setViewValue = function(value) { - this.$viewValue = value; - - // change to dirty - if (this.$pristine) { - this.$dirty = true; - this.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - } - - forEach(this.$parsers, function(fn) { - value = fn(value); - }); - - if (this.$modelValue !== value) { - this.$modelValue = value; - ngModelSet($scope, value); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch(e) { - $exceptionHandler(e); - } - }); - } - }; - - // model -> value - var ctrl = this; - - $scope.$watch(function ngModelWatch() { - var value = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - if (ctrl.$modelValue !== value) { - - var formatters = ctrl.$formatters, - idx = formatters.length; - - ctrl.$modelValue = value; - while(idx--) { - value = formatters[idx](value); - } - - if (ctrl.$viewValue !== value) { - ctrl.$viewValue = value; - ctrl.$render(); - } - } - - return value; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [https://github.com/angular/angular.js/wiki/Understanding-Scopes] - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid` is set if the model is valid. - * - `ng-invalid` is set if the model is invalid. - * - `ng-pristine` is set if the model is pristine. - * - `ng-dirty` is set if the model is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = '1'; - } - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="Ctrl"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - */ -var ngModelDirective = function() { - return { - require: ['ngModel', '^?form'], - controller: NgModelController, - link: function(scope, element, attr, ctrls) { - // notify others, especially parent forms - - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - formCtrl.$addControl(modelCtrl); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * The expression is not evaluated when the value change is coming from the model. - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive"> - * <file name="index.html"> - * <script> - * function Controller($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * } - * </script> - * <div ng-controller="Controller"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - - -var requiredDirective = function() { - return { - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - var validator = function(value) { - if (attr.required && ctrl.$isEmpty(value)) { - ctrl.$setValidity('required', false); - return; - } else { - ctrl.$setValidity('required', true); - return value; - } - }; - - ctrl.$formatters.push(validator); - ctrl.$parsers.unshift(validator); - - attr.$observe('required', function() { - validator(ctrl.$viewValue); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The delimiter - * can be a fixed string (by default a comma) or a regular expression. - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. If - * specified in form `/something/` then the value will be converted into a regular expression. - * - * @example - <example name="ngList-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['igor', 'misko', 'vojta']; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - List: <input name="namesInput" ng-model="names" ng-list required> - <span class="error" ng-show="myForm.namesInput.$error.required"> - Required!</span> - <br> - <tt>names = {{names}}</tt><br/> - <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var listInput = element(by.model('names')); - var names = element(by.binding('{{names}}')); - var valid = element(by.binding('myForm.namesInput.$valid')); - var error = element(by.css('span.error')); - - it('should initialize to model', function() { - expect(names.getText()).toContain('["igor","misko","vojta"]'); - expect(valid.getText()).toContain('true'); - expect(error.getCssValue('display')).toBe('none'); - }); - - it('should be invalid if empty', function() { - listInput.clear(); - listInput.sendKeys(''); - - expect(names.getText()).toContain(''); - expect(valid.getText()).toContain('false'); - expect(error.getCssValue('display')).not.toBe('none'); }); - </file> - </example> - */ -var ngListDirective = function() { - return { - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var match = /\/(.*)\//.exec(attr.ngList), - separator = match && new RegExp(match[1]) || attr.ngList || ','; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trim(value)); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(', '); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `input[select]` or `input[radio]`, so - * that when the element is selected, the `ngModel` of that element is set to the - * bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as - * shown below. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - } - </script> - <form ng-controller="Ctrl"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.name = 'Whirled'; - } - </script> - <div ng-controller="Ctrl"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ngDirective(function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBind); - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - // We are purposefully using == here rather than === because we want to - // catch when value is "null or undefined" - // jshint -W041 - element.text(value == undefined ? '' : value); - }); -}); - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - } - </script> - <div ng-controller="Ctrl"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', function($interpolate) { - return function(scope, element, attr) { - // TODO: move this to scenario runner - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - element.addClass('ng-binding').data('$binding', interpolateFn); - attr.$observe('ngBindTemplate', function(value) { - element.text(value); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link - * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` - * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in - * core Angular.) You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - Try it here: enter text in text box and watch the greeting change. - - <example module="ngBindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ngBindHtmlCtrl"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('ngBindHtmlExample', ['ngSanitize']) - - .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with <a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); - - var parsed = $parse(attr.ngBindHtml); - function getStringValue() { return (parsed(scope) || '').toString(); } - - scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { - element.html($sce.getTrustedHtml(parsed(scope)) || ''); - }); - }; -}]; - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== old$index & 1) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts (classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function (className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses (oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toRemove = digestClassCounts(toRemove, -1); - toAdd = digestClassCounts(toAdd, 1); - - if (toAdd.length === 0) { - $animate.removeClass(element, toRemove); - } else if (toRemove.length === 0) { - $animate.addClass(element, toAdd); - } else { - $animate.setClass(element, toAdd, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = copy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses (classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = [], i = 0; - forEach(classVal, function(v, k) { - if (v) { - classes.push(k); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * add - happens just before the class is applied to the element - * remove - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and - {@link ngAnimate.$animate#removeclass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} &nbsp; &nbsp; &nbsp; - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @param {expression} ngController Name of a globally accessible constructor function or an - * {@link guide/expression expression} that on the current scope evaluates to a - * constructor function. The controller instance can be published into a scope property - * by specifying `as propertyName`. - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Notice that the scope becomes the `this` for the - * controller's instance. This allows for easy access to the view data from the controller. Also - * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. The example is shown in two different declaration styles you may use - * according to preference. - <example> - <file name="index.html"> - <script> - function SettingsController1() { - this.name = "John Smith"; - this.contacts = [ - {type: 'phone', value: '408 555 1212'}, - {type: 'email', value: 'john.smith@example.org'} ]; - }; - - SettingsController1.prototype.greet = function() { - alert(this.name); - }; - - SettingsController1.prototype.addContact = function() { - this.contacts.push({type: 'email', value: 'yourname@example.org'}); - }; - - SettingsController1.prototype.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - SettingsController1.prototype.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - </script> - <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - Name: <input type="text" ng-model="settings.name"/> - [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in settings.contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller as', function() { - var container = element(by.id('ctrl-as-exmpl')); - - expect(container.findElement(by.model('settings.name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - <example> - <file name="index.html"> - <script> - function SettingsController2($scope) { - $scope.name = "John Smith"; - $scope.contacts = [ - {type:'phone', value:'408 555 1212'}, - {type:'email', value:'john.smith@example.org'} ]; - - $scope.greet = function() { - alert(this.name); - }; - - $scope.addContact = function() { - this.contacts.push({type:'email', value:'yourname@example.org'}); - }; - - $scope.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - $scope.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - } - </script> - <div id="ctrl-exmpl" ng-controller="SettingsController2"> - Name: <input type="text" ng-model="name"/> - [ <a href="" ng-click="greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="clearContact(contact)">clear</a> - | <a href="" ng-click="removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller', function() { - var container = element(by.id('ctrl-exmpl')); - - expect(container.findElement(by.model('name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - - */ -var ngControllerDirective = [function() { - return { - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For us to be compatible, we just need to implement the "getterFn" in $parse without violating - * any of these restrictions. - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * In order to use this feature put the `ngCsp` directive on the root element of the application. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap -// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute -// anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{count}} - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A directive that allows creation of custom onclick handlers that are defined as angular - * expressions and are compiled and executed within the current scope. - * - * Events that are handled via these handler are always configured not to propagate further. - */ -var ngEventDirectives = {}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(name) { - var directiveName = directiveNormalize('ng-' + name); - ngEventDirectives[directiveName] = ['$parse', function($parse) { - return { - compile: function($element, attr) { - var fn = $parse(attr[directiveName]); - return function(scope, element, attr) { - element.on(lowercase(name), function(event) { - scope.$apply(function() { - fn(scope, {$event:event}); - }); - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keyup="count = count + 1" ng-init="count=0"> - key up count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - } - </script> - <form ng-submit="submit()" ng-controller="Ctrl"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.input('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container - * leave - happens just before the ngIf contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - I'm removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function ($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (toBoolean(value)) { - if (!childScope) { - childScope = $scope.$new(); - $transclude(childScope, function (clone) { - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if(previousElements) { - previousElements.remove(); - previousElements = null; - } - if(childScope) { - childScope.$destroy(); - childScope = null; - } - if(block) { - previousElements = getBlockElements(block.clone); - $animate.leave(previousElements, function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <tt>{{template.url}}</tt> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - } - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - */ -var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', - function($http, $templateCache, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element, afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); - }).error(function() { - if (thisChangeId === changeCounter) cleanupLastIncludeContent(); - }); - scope.$emit('$includeContentRequested'); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * <div ng-init="test1 = (data | orderBy:'name')"></div> - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - } - </script> - <div ng-controller="Ctrl"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - } - </script> - <div ng-controller="Ctrl"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g; - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - isWhen = /^when(Minus)?(.+)$/; - - forEach(attr, function(expression, attributeName) { - if (isWhen.test(attributeName)) { - whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = - element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = - $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + - offset + endSymbol)); - }); - - scope.$watch(function ngPluralizeWatch() { - var value = parseFloat(scope.$eval(numberExp)); - - if (!isNaN(value)) { - //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, - //check it against pluralization rules in $locale service - if (!(value in whens)) value = $locale.pluralCat(value - offset); - return whensExpFns[value](scope, element, true); - } else { - return ''; - } - }, function ngPluralizeWatchAction(newVal) { - element.text(newVal); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - return { - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude){ - var expression = $attr.ngRepeat; - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), - trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, - lhs, rhs, valueIdentifier, keyIdentifier, - hashFnLocals = {$id: hashKey}; - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - lhs = match[1]; - rhs = match[2]; - trackByExp = match[3]; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - valueIdentifier = match[3] || match[1]; - keyIdentifier = match[2]; - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - var lastBlockMap = {}; - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection){ - var index, length, - previousNode = $element[0], // current position of the node - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = {}, - arrayLength, - childScope, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder = [], - elementsToRemove; - - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (key in collection) { - if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { - collectionKeys.push(key); - } - } - collectionKeys.sort(); - } - - arrayLength = collectionKeys.length; - - // locate existing items - length = nextBlockOrder.length = collectionKeys.length; - for(index = 0; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - assertNotHasOwnProperty(trackById, '`track by` id'); - if(lastBlockMap.hasOwnProperty(trackById)) { - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap.hasOwnProperty(trackById)) { - // restore lastBlockMap - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - // This is a duplicate and we need to throw an error - throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", - expression, trackById); - } else { - // new never before seen block - nextBlockOrder[index] = { id: trackById }; - nextBlockMap[trackById] = false; - } - } - - // remove existing items - for (key in lastBlockMap) { - // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn - if (lastBlockMap.hasOwnProperty(key)) { - block = lastBlockMap[key]; - elementsToRemove = getBlockElements(block.clone); - $animate.leave(elementsToRemove); - forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); - block.scope.$destroy(); - } - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0, length = collectionKeys.length; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]); - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - childScope = block.scope; - - nextNode = previousNode; - do { - nextNode = nextNode.nextSibling; - } while(nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - } else { - // new item which we don't know about - childScope = $scope.$new(); - } - - childScope[valueIdentifier] = value; - if (keyIdentifier) childScope[keyIdentifier] = key; - childScope.$index = index; - childScope.$first = (index === 0); - childScope.$last = (index === (arrayLength - 1)); - childScope.$middle = !(childScope.$first || childScope.$last); - // jshint bitwise: false - childScope.$odd = !(childScope.$even = (index&1) === 0); - // jshint bitwise: true - - if (!block.scope) { - $transclude(childScope, function(clone) { - clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = clone; - block.scope = childScope; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - }); - } - } - lastBlockMap = nextBlockMap; - }); - } - }; - - function getBlockStart(block) { - return block.clone[0]; - } - - function getBlockEnd(block) { - return block.clone[block.clone.length - 1]; - } -}]; - -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the ngShow attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When true, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngShow - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-show { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-show.ng-hide-add, - .animate-show.ng-hide-remove { - display:block!important; - } - - .animate-show.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value){ - $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the ngHide attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * ``` - * - * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When false, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngHide - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that - * you must also include the !important flag to override the display property so - * that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-hide.ng-hide-add, - .animate-hide.ng-hide-remove { - display:block!important; - } - - .animate-hide.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value){ - $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); - }); - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set" ng-click="myStyle={color:'red'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=set]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }, true); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * - * - * @scope - * @priority 800 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - } - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.element.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.element.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes, - selectedElements, - previousElements, - selectedScopes = []; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii = selectedScopes.length; - if(ii > 0) { - if(previousElements) { - for (i = 0; i < ii; i++) { - previousElements[i].remove(); - } - previousElements = null; - } - - previousElements = []; - for (i= 0; i<ii; i++) { - var selected = selectedElements[i]; - selectedScopes[i].$destroy(); - previousElements[i] = selected; - $animate.leave(selected, function() { - previousElements.splice(i, 1); - if(previousElements.length === 0) { - previousElements = null; - } - }); - } - } - - selectedElements = []; - selectedScopes = []; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - scope.$eval(attr.change); - forEach(selectedTranscludes, function(selectedTransclude) { - var selectedScope = scope.$new(); - selectedScopes.push(selectedScope); - selectedTransclude.transclude(selectedScope, function(caseElement) { - var anchor = selectedTransclude.element; - - selectedElements.push(caseElement); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict AC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transclude"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - } - - angular.module('transclude', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<div ng-transclude></div>' + - '</div>' - }; - }); - </script> - <div ng-controller="Ctrl"> - <input ng-model="title"><br> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension_expression. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead - * of {@link ng.directive:ngRepeat ngRepeat} when you want the - * `select` model to be bound to a non-string value. This is because an option element can only - * be bound to string values at present. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). - * - * @example - <example> - <file name="index.html"> - <script> - function MyCntrl($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.color = $scope.colors[2]; // red - } - </script> - <div ng-controller="MyCntrl"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="color" ng-options="c.name for c in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="color" ng-options="c.name for c in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="color" ng-options="c.name group by c.shade for c in colors"> - </select><br/> - - - Select <a href ng-click="color={name:'not in list'}">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:color} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':color.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red'); - element.all(by.select('color')).first().click(); - element.all(by.css('select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="color"]')).click(); - element.all(by.css('.nullable select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ terminal: true }); -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue == value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = copy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]]; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', function() { - scope.$apply(function() { - var optionGroup, - collection = valuesFn(scope) || [], - locals = {}, - key, value, optionElement, index, groupIndex, length, groupLength, trackIndex; - - if (multiple) { - value = []; - for (groupIndex = 0, groupLength = optionGroupsCache.length; - groupIndex < groupLength; - groupIndex++) { - // list of options for that group. (first item has the parent) - optionGroup = optionGroupsCache[groupIndex]; - - for(index = 1, length = optionGroup.length; index < length; index++) { - if ((optionElement = optionGroup[index].element)[0].selected) { - key = optionElement.val(); - if (keyName) locals[keyName] = key; - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) break; - } - } else { - locals[valueName] = collection[key]; - } - value.push(valueFn(scope, locals)); - } - } - } - } else { - key = selectElement.val(); - if (key == '?') { - value = undefined; - } else if (key === ''){ - value = null; - } else { - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) { - value = valueFn(scope, locals); - break; - } - } - } else { - locals[valueName] = collection[key]; - if (keyName) locals[keyName] = key; - value = valueFn(scope, locals); - } - } - // Update the null option's selected property here so $render cleans it up correctly - if (optionGroupsCache[0].length > 1) { - if (optionGroupsCache[0][1].id !== key) { - optionGroupsCache[0][1].selected = false; - } - } - } - ctrl.$setViewValue(value); - }); - }); - - ctrl.$render = render; - - // TODO(vojta): can't we optimize this ? - scope.$watch(render); - - function render() { - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - modelValue = ctrl.$modelValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - groupLength, length, - groupIndex, index, - locals = {}, - selected, - selectedSet = false, // nothing is selected yet - lastElement, - element, - label; - - if (multiple) { - if (trackFn && isArray(modelValue)) { - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { - locals[valueName] = modelValue[trackIndex]; - selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); - } - } else { - selectedSet = new HashMap(modelValue); - } - } - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - - key = index; - if (keyName) { - key = keys[index]; - if ( key.charAt(0) === '$' ) continue; - locals[keyName] = key; - } - - locals[valueName] = values[key]; - - optionGroupName = groupByFn(scope, locals) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - if (multiple) { - selected = isDefined( - selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) - ); - } else { - if (trackFn) { - var modelCast = {}; - modelCast[valueName] = modelValue; - selected = trackFn(scope, modelCast) === trackFn(scope, locals); - } else { - selected = modelValue === valueFn(scope, locals); - } - selectedSet = selectedSet || selected; // see if at least one item is selected - } - label = displayFn(scope, locals); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionGroup.push({ - // either the index into array or key from object - id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || modelValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!selectedSet}); - } else if (!selectedSet) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for(index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index+1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - lastElement.text(existingOption.label = option.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (existingOption.selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .attr('selected', option.selected) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while(existingOptions.length > index) { - existingOptions.pop().element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while(optionGroupsCache.length > groupIndex) { - optionGroupsCache.pop()[0].element.remove(); - } - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function (scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (selectCtrl && selectCtrl.databound) { - // For some reason Opera defaults to true and if not overridden this messes up the repeater. - // We don't want the view to drive the initialization of the model anyway. - element.prop('selected', false); - } else { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (newVal !== oldVal) selectCtrl.removeOption(oldVal); - selectCtrl.addOption(newVal); - }); - } else { - selectCtrl.addOption(attr.value); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: true -}); - - if (window.angular.bootstrap) { - //AngularJS is already loaded, so we can return here... - console.log('WARNING: Tried to load angular more than once.'); - return; - } - - //try to bind to jquery now so that one can write angular.element().read() - //but we will rebind on bootstrap again. - bindJQuery(); - - publishExternalAPI(angular); - - jqLite(document).ready(function() { - angularInit(document, bootstrap); - }); - -})(window, document); - -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>'); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/angular/angular.min.js b/platforms/android/assets/www/lib/angular/angular.min.js deleted file mode 100644 index 43f31f67..00000000 --- a/platforms/android/assets/www/lib/angular/angular.min.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(O,U,s){'use strict';function t(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.16/"+(b?b+"/":"")+a;for(c=1;c<arguments.length;c++)a=a+(1==c?"?":"&")+"p"+(c-1)+"="+encodeURIComponent("function"==typeof arguments[c]?arguments[c].toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof arguments[c]?"undefined":"string"!=typeof arguments[c]?JSON.stringify(arguments[c]):arguments[c]);return Error(a)}}function ab(b){if(null==b||Ca(b))return!1; -var a=b.length;return 1===b.nodeType&&a?!0:w(b)||M(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function q(b,a,c){var d;if(b)if(P(b))for(d in b)"prototype"==d||("length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d))||a.call(c,b[d],d);else if(b.forEach&&b.forEach!==q)b.forEach(a,c);else if(ab(b))for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d);return b}function Qb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function Sc(b, -a,c){for(var d=Qb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function Rb(b){return function(a,c){b(c,a)}}function bb(){for(var b=ka.length,a;b;){b--;a=ka[b].charCodeAt(0);if(57==a)return ka[b]="A",ka.join("");if(90==a)ka[b]="0";else return ka[b]=String.fromCharCode(a+1),ka.join("")}ka.unshift("0");return ka.join("")}function Sb(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function D(b){var a=b.$$hashKey;q(arguments,function(a){a!==b&&q(a,function(a,c){b[c]=a})});Sb(b,a);return b}function Y(b){return parseInt(b, -10)}function Tb(b,a){return D(new (D(function(){},{prototype:b})),a)}function C(){}function Da(b){return b}function aa(b){return function(){return b}}function E(b){return"undefined"===typeof b}function B(b){return"undefined"!==typeof b}function X(b){return null!=b&&"object"===typeof b}function w(b){return"string"===typeof b}function vb(b){return"number"===typeof b}function Na(b){return"[object Date]"===wa.call(b)}function M(b){return"[object Array]"===wa.call(b)}function P(b){return"function"===typeof b} -function cb(b){return"[object RegExp]"===wa.call(b)}function Ca(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function Tc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Uc(b,a,c){var d=[];q(b,function(b,g,f){d.push(a.call(c,b,g,f))});return d}function db(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Oa(b,a){var c=db(b,a);0<=c&&b.splice(c,1);return a}function ba(b,a){if(Ca(b)||b&&b.$evalAsync&&b.$watch)throw Pa("cpws"); -if(a){if(b===a)throw Pa("cpi");if(M(b))for(var c=a.length=0;c<b.length;c++)a.push(ba(b[c]));else{c=a.$$hashKey;q(a,function(b,c){delete a[c]});for(var d in b)a[d]=ba(b[d]);Sb(a,c)}}else(a=b)&&(M(b)?a=ba(b,[]):Na(b)?a=new Date(b.getTime()):cb(b)?a=RegExp(b.source):X(b)&&(a=ba(b,{})));return a}function Ub(b,a){a=a||{};for(var c in b)!b.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(a[c]=b[c]);return a}function xa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0; -var c=typeof b,d;if(c==typeof a&&"object"==c)if(M(b)){if(!M(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!xa(b[d],a[d]))return!1;return!0}}else{if(Na(b))return Na(a)&&b.getTime()==a.getTime();if(cb(b)&&cb(a))return b.toString()==a.toString();if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&a.$watch||Ca(b)||Ca(a)||M(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!P(b[d])){if(!xa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==s&&!P(a[d]))return!1; -return!0}return!1}function Vb(){return U.securityPolicy&&U.securityPolicy.isActive||U.querySelector&&!(!U.querySelector("[ng-csp]")&&!U.querySelector("[data-ng-csp]"))}function eb(b,a){var c=2<arguments.length?ya.call(arguments,2):[];return!P(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,c.concat(ya.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Vc(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)?c= -s:Ca(a)?c="$WINDOW":a&&U===a?c="$DOCUMENT":a&&(a.$evalAsync&&a.$watch)&&(c="$SCOPE");return c}function qa(b,a){return"undefined"===typeof b?s:JSON.stringify(b,Vc,a?" ":null)}function Wb(b){return w(b)?JSON.parse(b):b}function Qa(b){"function"===typeof b?b=!0:b&&0!==b.length?(b=K(""+b),b=!("f"==b||"0"==b||"false"==b||"no"==b||"n"==b||"[]"==b)):b=!1;return b}function ha(b){b=y(b).clone();try{b.empty()}catch(a){}var c=y("<div>").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, -function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function Xb(b){try{return decodeURIComponent(b)}catch(a){}}function Yb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Xb(c[0]),B(d)&&(b=B(c[1])?Xb(c[1]):!0,a[d]?M(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Zb(b){var a=[];q(b,function(b,d){M(b)?q(b,function(b){a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))}):a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))});return a.length?a.join("&"):""}function wb(b){return za(b, -!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function za(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Wc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(U.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+ -a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function $b(b,a){var c=function(){b=y(b);if(b.injector()){var c=b[0]===U?"document":ha(b);throw Pa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=ac(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", -function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(O&&!d.test(O.name))return c();O.name=O.name.replace(d,"");Ea.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function fb(b,a){a=a||"_";return b.replace(Xc,function(b,d){return(d?a:"")+b.toLowerCase()})}function xb(b,a,c){if(!b)throw Pa("areq",a||"?",c||"required");return b}function Ra(b,a,c){c&&M(b)&&(b=b[b.length-1]);xb(P(b),a,"not a function, got "+(b&&"object"==typeof b? -b.constructor.name||"Object":typeof b));return b}function Aa(b,a){if("hasOwnProperty"===b)throw Pa("badname",a);}function bc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f<g;f++)d=a[f],b&&(b=(e=b)[d]);return!c&&P(b)?eb(e,b):b}function yb(b){var a=b[0];b=b[b.length-1];if(a===b)return y(a);var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return y(c)}function Yc(b){var a=t("$injector"),c=t("ng");b=b.angular||(b.angular={});b.$$minErr=b.$$minErr||t;return b.module|| -(b.module=function(){var b={};return function(e,g,f){if("hasOwnProperty"===e)throw c("badname","module");g&&b.hasOwnProperty(e)&&(b[e]=null);return b[e]||(b[e]=function(){function b(a,d,e){return function(){c[e||"push"]([a,d,arguments]);return n}}if(!g)throw a("nomod",e);var c=[],d=[],m=b("$injector","invoke"),n={_invokeQueue:c,_runBlocks:d,requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:b("$provide","value"),constant:b("$provide", -"constant","unshift"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:m,run:function(a){d.push(a);return this}};f&&m(f);return n}())}}())}function Zc(b){D(b,{bootstrap:$b,copy:ba,extend:D,equals:xa,element:y,forEach:q,injector:ac,noop:C,bind:eb,toJson:qa,fromJson:Wb,identity:Da,isUndefined:E,isDefined:B,isString:w,isFunction:P,isObject:X,isNumber:vb,isElement:Tc,isArray:M, -version:$c,isDate:Na,lowercase:K,uppercase:Fa,callbacks:{counter:0},$$minErr:t,$$csp:Vb});Sa=Yc(O);try{Sa("ngLocale")}catch(a){Sa("ngLocale",[]).provider("$locale",ad)}Sa("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:bd});a.provider("$compile",cc).directive({a:cd,input:dc,textarea:dc,form:dd,script:ed,select:fd,style:gd,option:hd,ngBind:id,ngBindHtml:jd,ngBindTemplate:kd,ngClass:ld,ngClassEven:md,ngClassOdd:nd,ngCloak:od,ngController:pd,ngForm:qd,ngHide:rd,ngIf:sd,ngInclude:td, -ngInit:ud,ngNonBindable:vd,ngPluralize:wd,ngRepeat:xd,ngShow:yd,ngStyle:zd,ngSwitch:Ad,ngSwitchWhen:Bd,ngSwitchDefault:Cd,ngOptions:Dd,ngTransclude:Ed,ngModel:Fd,ngList:Gd,ngChange:Hd,required:ec,ngRequired:ec,ngValue:Id}).directive({ngInclude:Jd}).directive(zb).directive(fc);a.provider({$anchorScroll:Kd,$animate:Ld,$browser:Md,$cacheFactory:Nd,$controller:Od,$document:Pd,$exceptionHandler:Qd,$filter:gc,$interpolate:Rd,$interval:Sd,$http:Td,$httpBackend:Ud,$location:Vd,$log:Wd,$parse:Xd,$rootScope:Yd, -$q:Zd,$sce:$d,$sceDelegate:ae,$sniffer:be,$templateCache:ce,$timeout:de,$window:ee,$$rAF:fe,$$asyncCallback:ge})}])}function Ta(b){return b.replace(he,function(a,b,d,e){return e?d.toUpperCase():d}).replace(ie,"Moz$1")}function Ab(b,a,c,d){function e(b){var e=c&&b?[this.filter(b)]:[this],l=a,k,m,n,p,r,z;if(!d||null!=b)for(;e.length;)for(k=e.shift(),m=0,n=k.length;m<n;m++)for(p=y(k[m]),l?p.triggerHandler("$destroy"):l=!l,r=0,p=(z=p.children()).length;r<p;r++)e.push(Ga(z[r]));return g.apply(this,arguments)} -var g=Ga.fn[b],g=g.$original||g;e.$original=g;Ga.fn[b]=e}function N(b){if(b instanceof N)return b;w(b)&&(b=ca(b));if(!(this instanceof N)){if(w(b)&&"<"!=b.charAt(0))throw Bb("nosel");return new N(b)}if(w(b)){var a=b;b=U;var c;if(c=je.exec(a))b=[b.createElement(c[1])];else{var d=b,e;b=d.createDocumentFragment();c=[];if(Cb.test(a)){d=b.appendChild(d.createElement("div"));e=(ke.exec(a)||["",""])[1].toLowerCase();e=ea[e]||ea._default;d.innerHTML="<div>&#160;</div>"+e[1]+a.replace(le,"<$1></$2>")+e[2]; -d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a<e;++a)c.push(d.childNodes[a]);d=b.firstChild;d.textContent=""}else c.push(d.createTextNode(a));b.textContent="";b.innerHTML="";b=c}Db(this,b);y(U.createDocumentFragment()).append(this)}else Db(this,b)}function Eb(b){return b.cloneNode(!0)}function Ha(b){hc(b);var a=0;for(b=b.childNodes||[];a<b.length;a++)Ha(b[a])}function ic(b,a,c,d){if(B(d))throw Bb("offargs");var e=la(b,"events");la(b,"handle")&&(E(a)?q(e, -function(a,c){Fb(b,c,a);delete e[c]}):q(a.split(" "),function(a){E(c)?(Fb(b,a,e[a]),delete e[a]):Oa(e[a]||[],c)}))}function hc(b,a){var c=b[gb],d=Ua[c];d&&(a?delete Ua[c].data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),ic(b)),delete Ua[c],b[gb]=s))}function la(b,a,c){var d=b[gb],d=Ua[d||-1];if(B(c))d||(b[gb]=d=++me,d=Ua[d]={}),d[a]=c;else return d&&d[a]}function jc(b,a,c){var d=la(b,"data"),e=B(c),g=!e&&B(a),f=g&&!X(a);d||f||la(b,"data",d={});if(e)d[a]=c;else if(g){if(f)return d&&d[a]; -D(d,a)}else return d}function Gb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function hb(b,a){a&&b.setAttribute&&q(a.split(" "),function(a){b.setAttribute("class",ca((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+ca(a)+" "," ")))})}function ib(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(a.split(" "),function(a){a=ca(a);-1===c.indexOf(" "+a+" ")&& -(c+=a+" ")});b.setAttribute("class",ca(c))}}function Db(b,a){if(a){a=a.nodeName||!B(a.length)||Ca(a)?[a]:a;for(var c=0;c<a.length;c++)b.push(a[c])}}function kc(b,a){return jb(b,"$"+(a||"ngController")+"Controller")}function jb(b,a,c){b=y(b);9==b[0].nodeType&&(b=b.find("html"));for(a=M(a)?a:[a];b.length;){for(var d=b[0],e=0,g=a.length;e<g;e++)if((c=b.data(a[e]))!==s)return c;b=y(d.parentNode||11===d.nodeType&&d.host)}}function lc(b){for(var a=0,c=b.childNodes;a<c.length;a++)Ha(c[a]);for(;b.firstChild;)b.removeChild(b.firstChild)} -function mc(b,a){var c=kb[a.toLowerCase()];return c&&nc[b.nodeName]&&c}function ne(b,a){var c=function(c,e){c.preventDefault||(c.preventDefault=function(){c.returnValue=!1});c.stopPropagation||(c.stopPropagation=function(){c.cancelBubble=!0});c.target||(c.target=c.srcElement||U);if(E(c.defaultPrevented)){var g=c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented||!1===c.returnValue};var f=Ub(a[e|| -c.type]||[]);q(f,function(a){a.call(b,c)});8>=S?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ia(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===s&&(c=b.$$hashKey=bb()):c=b;return a+":"+c}function Va(b){q(b,this.put,this)}function oc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(oe, -""),c=c.match(pe),q(c[1].split(qe),function(b){b.replace(re,function(b,c,d){a.push(d)})})),b.$inject=a):M(b)?(c=b.length-1,Ra(b[c],"fn"),a=b.slice(0,c)):Ra(b,"fn",!0);return a}function ac(b){function a(a){return function(b,c){if(X(b))q(b,Rb(a));else return a(b,c)}}function c(a,b){Aa(a,"service");if(P(b)||M(b))b=n.instantiate(b);if(!b.$get)throw Wa("pget",a);return m[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(w(a))for(c= -Sa(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g<h;g++){var f=d[g],l=n.get(f[0]);l[f[1]].apply(l,f[2])}else P(a)?b.push(n.invoke(a)):M(a)?b.push(n.invoke(a)):Ra(a,"module")}catch(m){throw M(a)&&(a=a[a.length-1]),m.message&&(m.stack&&-1==m.stack.indexOf(m.message))&&(m=m.message+"\n"+m.stack),Wa("modulerr",a,m.stack||m.message||m);}}});return b}function g(a,b){function c(d){if(a.hasOwnProperty(d)){if(a[d]===f)throw Wa("cdep",l.join(" <- "));return a[d]}try{return l.unshift(d), -a[d]=f,a[d]=b(d)}catch(e){throw a[d]===f&&delete a[d],e;}finally{l.shift()}}function d(a,b,e){var g=[],h=oc(a),f,l,k;l=0;for(f=h.length;l<f;l++){k=h[l];if("string"!==typeof k)throw Wa("itkn",k);g.push(e&&e.hasOwnProperty(k)?e[k]:c(k))}a.$inject||(a=a[f]);return a.apply(b,g)}return{invoke:d,instantiate:function(a,b){var c=function(){},e;c.prototype=(M(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return X(e)||P(e)?e:c},get:c,annotate:oc,has:function(b){return m.hasOwnProperty(b+h)||a.hasOwnProperty(b)}}} -var f={},h="Provider",l=[],k=new Va,m={$provide:{provider:a(c),factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,aa(b))}),constant:a(function(a,b){Aa(a,"constant");m[a]=b;p[a]=b}),decorator:function(a,b){var c=n.get(a+h),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},n=m.$injector=g(m,function(){throw Wa("unpr",l.join(" <- "));}),p={},r=p.$injector=g(p,function(a){a=n.get(a+ -h);return r.invoke(a.$get,a)});q(e(b),function(a){r.invoke(a||C)});return r}function Kd(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==K(a.nodeName)||(b=a)});return b}function g(){var b=c.hash(),d;b?(d=f.getElementById(b))?d.scrollIntoView():(d=e(f.getElementsByName(b)))?d.scrollIntoView():"top"===b&&a.scrollTo(0,0):a.scrollTo(0,0)}var f=a.document;b&&d.$watch(function(){return c.hash()}, -function(){d.$evalAsync(g)});return g}]}function ge(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function se(b,a,c,d){function e(a){try{a.apply(null,ya.call(arguments,1))}finally{if(z--,0===z)for(;u.length;)try{u.pop()()}catch(b){c.error(b)}}}function g(a,b){(function T(){q(F,function(a){a()});v=b(T,a)})()}function f(){x=null;J!=h.url()&&(J=h.url(),q(ma,function(a){a(h.url())}))}var h=this,l=a[0],k=b.location,m=b.history, -n=b.setTimeout,p=b.clearTimeout,r={};h.isMock=!1;var z=0,u=[];h.$$completeOutstandingRequest=e;h.$$incOutstandingRequestCount=function(){z++};h.notifyWhenNoOutstandingRequests=function(a){q(F,function(a){a()});0===z?a():u.push(a)};var F=[],v;h.addPollFn=function(a){E(v)&&g(100,n);F.push(a);return a};var J=k.href,A=a.find("base"),x=null;h.url=function(a,c){k!==b.location&&(k=b.location);m!==b.history&&(m=b.history);if(a){if(J!=a)return J=a,d.history?c?m.replaceState(null,"",a):(m.pushState(null,"", -a),A.attr("href",A.attr("href"))):(x=a,c?k.replace(a):k.href=a),h}else return x||k.href.replace(/%27/g,"'")};var ma=[],L=!1;h.onUrlChange=function(a){if(!L){if(d.history)y(b).on("popstate",f);if(d.hashchange)y(b).on("hashchange",f);else h.addPollFn(f);L=!0}ma.push(a);return a};h.baseHref=function(){var a=A.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var Q={},da="",H=h.baseHref();h.cookies=function(a,b){var d,e,g,h;if(a)b===s?l.cookie=escape(a)+"=;path="+H+";expires=Thu, 01 Jan 1970 00:00:00 GMT": -w(b)&&(d=(l.cookie=escape(a)+"="+escape(b)+";path="+H).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(l.cookie!==da)for(da=l.cookie,d=da.split("; "),Q={},g=0;g<d.length;g++)e=d[g],h=e.indexOf("="),0<h&&(a=unescape(e.substring(0,h)),Q[a]===s&&(Q[a]=unescape(e.substring(h+1))));return Q}};h.defer=function(a,b){var c;z++;c=n(function(){delete r[c];e(a)},b||0);r[c]=!0;return c};h.defer.cancel=function(a){return r[a]?(delete r[a], -p(a),e(C),!0):!1}}function Md(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new se(b,d,a,c)}]}function Nd(){this.$get=function(){function b(b,d){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,g(a.n,a.p),g(a,n),n=a,n.n=null)}function g(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw t("$cacheFactory")("iid",b);var f=0,h=D({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,m={},n=null,p=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a}); -e(c)}if(!E(b))return a in l||f++,l[a]=b,f>k&&this.remove(p.key),b},get:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p);b==p&&(p=b.n);g(b.n,b.p);delete m[a]}delete l[a];f--},removeAll:function(){l={};f=0;m={};n=p=null},destroy:function(){m=h=l=null;delete a[b]},info:function(){return D({},h,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]}; -return b}}function ce(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function cc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,g=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function l(a,e){Aa(a,"directive");w(a)?(xb(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);P(f)?f={compile:aa(f)}:!f.compile&&f.link&&(f.compile= -aa(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(l){d(l)}});return e}])),c[a].push(e)):q(a,Rb(l));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate", -"$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,m,n,p,r,z,u,F,v,J,A){function x(a,b,c,d,e){a instanceof y||(a=y(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=y(b).wrap("<span></span>").parent()[0])});var g=L(a,b,a,c,d,e);ma(a,"ng-scope");return function(b,c,d){xb(b,"scope");var e=c?Ja.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;d<f;d++){var l= -e[d].nodeType;1!==l&&9!==l||e.eq(d).data("$scope",b)}c&&c(e,b);g&&g(b,e,e);return e}}function ma(a,b){try{a.addClass(b)}catch(c){}}function L(a,b,c,d,e,g){function f(a,c,d,e){var g,k,m,r,n,p,z;g=c.length;var I=Array(g);for(n=0;n<g;n++)I[n]=c[n];z=n=0;for(p=l.length;n<p;z++)k=I[z],c=l[n++],g=l[n++],m=y(k),c?(c.scope?(r=a.$new(),m.data("$scope",r)):r=a,(m=c.transclude)||!e&&b?c(g,r,k,d,Q(a,m||b)):c(g,r,k,d,e)):g&&g(a,k.childNodes,s,e)}for(var l=[],k,m,r,n,p=0;p<a.length;p++)k=new Hb,m=da(a[p],[],k, -0===p?d:s,e),(g=m.length?ia(m,a[p],k,b,c,null,[],[],g):null)&&g.scope&&ma(y(a[p]),"ng-scope"),k=g&&g.terminal||!(r=a[p].childNodes)||!r.length?null:L(r,g?g.transclude:b),l.push(g,k),n=n||g||k,g=null;return n?f:null}function Q(a,b){return function(c,d,e){var g=!1;c||(c=a.$new(),g=c.$$transcluded=!0);d=b(c,d,e);if(g)d.on("$destroy",eb(c,c.$destroy));return d}}function da(a,b,c,d,f){var k=c.$attr,l;switch(a.nodeType){case 1:T(b,na(Ka(a).toLowerCase()),"E",d,f);var m,r,n;l=a.attributes;for(var p=0,z= -l&&l.length;p<z;p++){var u=!1,F=!1;m=l[p];if(!S||8<=S||m.specified){r=m.name;n=na(r);W.test(n)&&(r=fb(n.substr(6),"-"));var J=n.replace(/(Start|End)$/,"");n===J+"Start"&&(u=r,F=r.substr(0,r.length-5)+"end",r=r.substr(0,r.length-6));n=na(r.toLowerCase());k[n]=r;c[n]=m=ca(m.value);mc(a,n)&&(c[n]=!0);N(a,b,m,n);T(b,n,"A",d,f,u,F)}}a=a.className;if(w(a)&&""!==a)for(;l=g.exec(a);)n=na(l[2]),T(b,n,"C",d,f)&&(c[n]=ca(l[3])),a=a.substr(l.index+l[0].length);break;case 3:t(b,a.nodeValue);break;case 8:try{if(l= -e.exec(a.nodeValue))n=na(l[1]),T(b,n,"M",d,f)&&(c[n]=ca(l[2]))}catch(x){}}b.sort(E);return b}function H(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return y(d)}function R(a,b,c){return function(d,e,g,f,l){e=H(e[0],b,c);return a(d,e,g,f,l)}}function ia(a,c,d,e,g,f,l,n,p){function u(a,b,c,d){if(a){c&&(a=R(a,c,d));a.require=G.require;if(Q=== -G||G.$$isolateScope)a=qc(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=R(b,c,d));b.require=G.require;if(Q===G||G.$$isolateScope)b=qc(b,{isolateScope:!0});n.push(b)}}function F(a,b,c){var d,e="data",g=!1;if(w(a)){for(;"^"==(d=a.charAt(0))||"?"==d;)a=a.substr(1),"^"==d&&(e="inheritedData"),g=g||"?"==d;d=null;c&&"data"===e&&(d=c[a]);d=d||b[e]("$"+a+"Controller");if(!d&&!g)throw ja("ctreq",a,t);}else M(a)&&(d=[],q(a,function(a){d.push(F(a,b,c))}));return d}function J(a,e,g,f,p){function u(a,b){var c;2>arguments.length&& -(b=a,a=s);D&&(c=lb);return p(a,b,c)}var I,x,v,A,R,H,lb={},da;I=c===g?d:Ub(d,new Hb(y(g),d.$attr));x=I.$$element;if(Q){var T=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=y(g);H=e.$new(!0);ia&&ia===Q.$$originalDirective?f.data("$isolateScope",H):f.data("$isolateScopeNoTemplate",H);ma(f,"ng-isolate-scope");q(Q.scope,function(a,c){var d=a.match(T)||[],g=d[3]||c,f="?"==d[2],d=d[1],l,m,n,p;H.$$isolateBindings[c]=d+g;switch(d){case "@":I.$observe(g,function(a){H[c]=a});I.$$observers[g].$$scope=e;I[g]&&(H[c]=b(I[g])(e)); -break;case "=":if(f&&!I[g])break;m=r(I[g]);p=m.literal?xa:function(a,b){return a===b};n=m.assign||function(){l=H[c]=m(e);throw ja("nonassign",I[g],Q.name);};l=H[c]=m(e);H.$watch(function(){var a=m(e);p(a,H[c])||(p(a,l)?n(e,a=H[c]):H[c]=a);return l=a},null,m.literal);break;case "&":m=r(I[g]);H[c]=function(a){return m(e,a)};break;default:throw ja("iscp",Q.name,c,a);}})}da=p&&u;L&&q(L,function(a){var b={$scope:a===Q||a.$$isolateScope?H:e,$element:x,$attrs:I,$transclude:da},c;R=a.controller;"@"==R&&(R= -I[a.name]);c=z(R,b);lb[a.name]=c;D||x.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(v=l.length;f<v;f++)try{A=l[f],A(A.isolateScope?H:e,x,I,A.require&&F(A.require,x,lb),da)}catch(G){m(G,ha(x))}f=e;Q&&(Q.template||null===Q.templateUrl)&&(f=H);a&&a(f,g.childNodes,s,p);for(f=n.length-1;0<=f;f--)try{A=n[f],A(A.isolateScope?H:e,x,I,A.require&&F(A.require,x,lb),da)}catch(B){m(B,ha(x))}}p=p||{};for(var v=-Number.MAX_VALUE,A,L=p.controllerDirectives,Q=p.newIsolateScopeDirective, -ia=p.templateDirective,T=p.nonTlbTranscludeDirective,E=!1,D=p.hasElementTranscludeDirective,Z=d.$$element=y(c),G,t,V,Xa=e,O,N=0,S=a.length;N<S;N++){G=a[N];var ra=G.$$start,W=G.$$end;ra&&(Z=H(c,ra,W));V=s;if(v>G.priority)break;if(V=G.scope)A=A||G,G.templateUrl||(K("new/isolated scope",Q,G,Z),X(V)&&(Q=G));t=G.name;!G.templateUrl&&G.controller&&(V=G.controller,L=L||{},K("'"+t+"' controller",L[t],G,Z),L[t]=G);if(V=G.transclude)E=!0,G.$$tlb||(K("transclusion",T,G,Z),T=G),"element"==V?(D=!0,v=G.priority, -V=H(c,ra,W),Z=d.$$element=y(U.createComment(" "+t+": "+d[t]+" ")),c=Z[0],mb(g,y(ya.call(V,0)),c),Xa=x(V,e,v,f&&f.name,{nonTlbTranscludeDirective:T})):(V=y(Eb(c)).contents(),Z.empty(),Xa=x(V,e));if(G.template)if(K("template",ia,G,Z),ia=G,V=P(G.template)?G.template(Z,d):G.template,V=Y(V),G.replace){f=G;V=Cb.test(V)?y(V):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",t,"");mb(g,Z,c);S={$attr:{}};V=da(c,[],S);var $=a.splice(N+1,a.length-(N+1));Q&&pc(V);a=a.concat(V).concat($);B(d,S);S=a.length}else Z.html(V); -if(G.templateUrl)K("template",ia,G,Z),ia=G,G.replace&&(f=G),J=C(a.splice(N,a.length-N),Z,d,g,Xa,l,n,{controllerDirectives:L,newIsolateScopeDirective:Q,templateDirective:ia,nonTlbTranscludeDirective:T}),S=a.length;else if(G.compile)try{O=G.compile(Z,d,Xa),P(O)?u(null,O,ra,W):O&&u(O.pre,O.post,ra,W)}catch(aa){m(aa,ha(Z))}G.terminal&&(J.terminal=!0,v=Math.max(v,G.priority))}J.scope=A&&!0===A.scope;J.transclude=E&&Xa;p.hasElementTranscludeDirective=D;return J}function pc(a){for(var b=0,c=a.length;b<c;b++)a[b]= -Tb(a[b],{$$isolateScope:!0})}function T(b,e,g,f,k,n,r){if(e===k)return null;k=null;if(c.hasOwnProperty(e)){var p;e=a.get(e+d);for(var z=0,u=e.length;z<u;z++)try{p=e[z],(f===s||f>p.priority)&&-1!=p.restrict.indexOf(g)&&(n&&(p=Tb(p,{$$start:n,$$end:r})),b.push(p),k=p)}catch(F){m(F)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ma(e,b),a["class"]=(a["class"]? -a["class"]+" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function C(a,b,c,d,e,g,f,l){var k=[],m,r,z=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),x=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl;b.empty();n.get(v.getTrustedResourceUrl(x),{cache:p}).success(function(n){var p,J;n=Y(n);if(u.replace){n=Cb.test(n)?y(n):[];p=n[0];if(1!=n.length|| -1!==p.nodeType)throw ja("tplrt",u.name,x);n={$attr:{}};mb(d,b,p);var v=da(p,[],n);X(u.scope)&&pc(v);a=v.concat(a);B(c,n)}else p=z,b.html(n);a.unshift(F);m=ia(a,p,c,e,b,u,g,f,l);q(d,function(a,c){a==p&&(d[c]=b[0])});for(r=L(b[0].childNodes,e);k.length;){n=k.shift();J=k.shift();var A=k.shift(),R=k.shift(),v=b[0];if(J!==z){var H=J.className;l.hasElementTranscludeDirective&&u.replace||(v=Eb(p));mb(A,y(J),v);ma(y(v),H)}J=m.transclude?Q(n,m.transclude):R;m(r,n,v,d,J)}k=null}).error(function(a,b,c,d){throw ja("tpload", -d.url);});return function(a,b,c,d,e){k?(k.push(b),k.push(c),k.push(d),k.push(e)):m(r,b,c,d,e)}}function E(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function K(a,b,c,d){if(b)throw ja("multidir",b.name,c.name,a,ha(d));}function t(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:aa(function(a,b){var c=b.parent(),e=c.data("$binding")||[];e.push(d);ma(c.data("$binding",e),"ng-binding");a.$watch(d,function(a){b[0].nodeValue=a})})})}function O(a,b){if("srcdoc"== -b)return v.HTML;var c=Ka(a);if("xlinkHref"==b||"FORM"==c&&"action"==b||"IMG"!=c&&("src"==b||"ngSrc"==b))return v.RESOURCE_URL}function N(a,c,d,e){var g=b(d,!0);if(g){if("multiple"===e&&"SELECT"===Ka(a))throw ja("selmulti",ha(a));c.push({priority:100,compile:function(){return{pre:function(c,d,l){d=l.$$observers||(l.$$observers={});if(f.test(e))throw ja("nodomevents");if(g=b(l[e],!0,O(a,e)))l[e]=g(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(g,function(a,b){"class"=== -e&&a!=b?l.$updateClass(a,b):l.$set(e,a)})}}}})}}function mb(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,l;if(a)for(f=0,l=a.length;f<l;f++)if(a[f]==d){a[f++]=c;l=f+e-1;for(var k=a.length;f<k;f++,l++)l<k?a[f]=a[l]:delete a[f];a.length-=e-1;break}g&&g.replaceChild(c,d);a=U.createDocumentFragment();a.appendChild(d);c[y.expando]=d[y.expando];d=1;for(e=b.length;d<e;d++)g=b[d],y(g).remove(),a.appendChild(g),delete b[d];b[0]=c;b.length=1}function qc(a,b){return D(function(){return a.apply(null,arguments)}, -a,b)}var Hb=function(a,b){this.$$element=a;this.$attr=b||{}};Hb.prototype={$normalize:na,$addClass:function(a){a&&0<a.length&&J.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&J.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=rc(a,b),d=rc(b,a);0===c.length?J.removeClass(this.$$element,d):0===d.length?J.addClass(this.$$element,c):J.setClass(this.$$element,c,d)},$set:function(a,b,c,d){var e=mc(this.$$element[0],a);e&&(this.$$element.prop(a,b),d=e);this[a]=b;d?this.$attr[a]= -d:(d=this.$attr[a])||(this.$attr[a]=d=fb(a,"-"));e=Ka(this.$$element);if("A"===e&&"href"===a||"IMG"===e&&"src"===a)this[a]=b=A(b,"src"===a);!1!==c&&(null===b||b===s?this.$$element.removeAttr(d):this.$$element.attr(d,b));(c=this.$$observers)&&q(c[a],function(a){try{a(b)}catch(c){m(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||b(c[a])});return b}};var Z=b.startSymbol(),ra=b.endSymbol(),Y="{{"==Z||"}}"==ra? -Da:function(a){return a.replace(/\{\{/g,Z).replace(/}}/g,ra)},W=/^ngAttr[A-Z]/;return x}]}function na(b){return Ta(b.replace(te,""))}function rc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),g=0;a:for(;g<d.length;g++){for(var f=d[g],h=0;h<e.length;h++)if(f==e[h])continue a;c+=(0<c.length?" ":"")+f}return c}function Od(){var b={},a=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,d){Aa(a,"controller");X(a)?D(b,a):b[a]=d};this.$get=["$injector","$window",function(c,d){return function(e,g){var f, -h,l;w(e)&&(f=e.match(a),h=f[1],l=f[3],e=b.hasOwnProperty(h)?b[h]:bc(g.$scope,h,!0)||bc(d,h,!0),Ra(e,h,!0));f=c.instantiate(e,g);if(l){if(!g||"object"!=typeof g.$scope)throw t("$controller")("noscp",h||e.name,l);g.$scope[l]=f}return f}}]}function Pd(){this.$get=["$window",function(b){return y(b.document)}]}function Qd(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function sc(b){var a={},c,d,e;if(!b)return a;q(b.split("\n"),function(b){e=b.indexOf(":");c=K(ca(b.substr(0, -e)));d=ca(b.substr(e+1));c&&(a[c]=a[c]?a[c]+(", "+d):d)});return a}function tc(b){var a=X(b)?b:s;return function(c){a||(a=sc(b));return c?a[K(c)]||null:a}}function uc(b,a,c){if(P(c))return c(b,a);q(c,function(c){b=c(b,a)});return b}function Td(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},e=this.defaults={transformResponse:[function(d){w(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=Wb(d)));return d}],transformRequest:[function(a){return X(a)&& -"[object File]"!==wa.call(a)&&"[object Blob]"!==wa.call(a)?qa(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ba(d),put:ba(d),patch:ba(d)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},g=this.interceptors=[],f=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,d,n,p){function r(a){function c(a){var b=D({},a,{data:uc(a.data,a.headers,d.transformResponse)});return 200<=a.status&&300>a.status? -b:n.reject(b)}var d={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b,d){P(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=D({},a.headers),g,f,c=D({},c.common,c[K(a.method)]);b(c);b(d);a:for(g in c){a=K(g);for(f in d)if(K(f)===a)continue a;d[g]=c[g]}return d}(a);D(d,a);d.headers=g;d.method=Fa(d.method);(a=Ib(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]= -a);var f=[function(a){g=a.headers;var b=uc(a.data,tc(g),a.transformRequest);E(a.data)&&q(g,function(a,b){"content-type"===K(b)&&delete g[b]});E(a.withCredentials)&&!E(e.withCredentials)&&(a.withCredentials=e.withCredentials);return z(a,b,g).then(c,c)},s],h=n.when(d);for(q(v,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data, -b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function z(b,c,g){function f(a,b,c,e){v&&(200<=a&&300>a?v.put(s,[a,b,sc(c),e]):v.remove(s));l(b,a,c,e);d.$$phase||d.$apply()}function l(a,c,d,e){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:tc(d),config:b,statusText:e})}function k(){var a=db(r.pendingRequests,b);-1!==a&&r.pendingRequests.splice(a,1)}var p=n.defer(),z=p.promise,v,q,s=u(b.url, -b.params);r.pendingRequests.push(b);z.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(v=X(b.cache)?b.cache:X(e.cache)?e.cache:F);if(v)if(q=v.get(s),B(q)){if(q.then)return q.then(k,k),q;M(q)?l(q[1],q[0],ba(q[2]),q[3]):l(q,200,{},"OK")}else v.put(s,z);E(q)&&a(b.method,s,c,f,g,b.timeout,b.withCredentials,b.responseType);return z}function u(a,b){if(!b)return a;var c=[];Sc(b,function(a,b){null===a||E(a)||(M(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(za(b)+"="+za(a))}))});0<c.length&& -(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var F=c("$http"),v=[];q(g,function(a){v.unshift(w(a)?p.get(a):p.invoke(a))});q(f,function(a,b){var c=w(a)?p.get(a):p.invoke(a);v.splice(b,0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});r.pendingRequests=[];(function(a){q(arguments,function(a){r[a]=function(b,c){return r(D(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(D(d|| -{},{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function ue(b){if(8>=S&&(!b.match(/^(get|post|head|put|delete|options)$/i)||!O.XMLHttpRequest))return new O.ActiveXObject("Microsoft.XMLHTTP");if(O.XMLHttpRequest)return new O.XMLHttpRequest;throw t("$httpBackend")("noxhr");}function Ud(){this.$get=["$browser","$window","$document",function(b,a,c){return ve(b,ue,b.defer,a.angular.callbacks,c[0])}]}function ve(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange= -c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;S&&8>=S?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,l,k,m,n,p,r,z){function u(){v=f;A&&A();x&&x.abort()}function F(a,d,e,g,f){L&&c.cancel(L);A=x=null;0===d&&(d=e?200:"file"==sa(l).protocol?404:0);a(1223===d?204:d,e,g,f||"");b.$$completeOutstandingRequest(C)}var v;b.$$incOutstandingRequestCount(); -l=l||b.url();if("jsonp"==K(e)){var J="_"+(d.counter++).toString(36);d[J]=function(a){d[J].data=a};var A=g(l.replace("JSON_CALLBACK","angular.callbacks."+J),function(){d[J].data?F(m,200,d[J].data):F(m,v||-2);d[J]=Ea.noop})}else{var x=a(e);x.open(e,l,!0);q(n,function(a,b){B(a)&&x.setRequestHeader(b,a)});x.onreadystatechange=function(){if(x&&4==x.readyState){var a=null,b=null;v!==f&&(a=x.getAllResponseHeaders(),b="response"in x?x.response:x.responseText);F(m,v||x.status,b,a,x.statusText||"")}};r&&(x.withCredentials= -!0);if(z)try{x.responseType=z}catch(s){if("json"!==z)throw s;}x.send(k||null)}if(0<p)var L=c(u,p);else p&&p.then&&p.then(u)}}function Rd(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function g(g,k,m){for(var n,p,r=0,z=[],u=g.length,F=!1,v=[];r<u;)-1!=(n=g.indexOf(b,r))&&-1!=(p=g.indexOf(a,n+f))?(r!=n&&z.push(g.substring(r,n)),z.push(r=c(F=g.substring(n+f,p))), -r.exp=F,r=p+h,F=!0):(r!=u&&z.push(g.substring(r)),r=u);(u=z.length)||(z.push(""),u=1);if(m&&1<z.length)throw vc("noconcat",g);if(!k||F)return v.length=u,r=function(a){try{for(var b=0,c=u,f;b<c;b++)"function"==typeof(f=z[b])&&(f=f(a),f=m?e.getTrusted(m,f):e.valueOf(f),null===f||E(f)?f="":"string"!=typeof f&&(f=qa(f))),v[b]=f;return v.join("")}catch(h){a=vc("interr",g,h.toString()),d(a)}},r.exp=g,r.parts=z,r}var f=b.length,h=a.length;g.startSymbol=function(){return b};g.endSymbol=function(){return a}; -return g}]}function Sd(){this.$get=["$rootScope","$window","$q",function(b,a,c){function d(d,f,h,l){var k=a.setInterval,m=a.clearInterval,n=c.defer(),p=n.promise,r=0,z=B(l)&&!l;h=B(h)?h:0;p.then(null,null,d);p.$$intervalId=k(function(){n.notify(r++);0<h&&r>=h&&(n.resolve(r),m(p.$$intervalId),delete e[p.$$intervalId]);z||b.$apply()},f);e[p.$$intervalId]=n;return p}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId], -!0):!1};return d}]}function ad(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "), -DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function wc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=wb(b[a]);return b.join("/")}function xc(b,a,c){b=sa(b,c);a.$$protocol= -b.protocol;a.$$host=b.hostname;a.$$port=Y(b.port)||we[b.protocol]||null}function yc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=sa(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Yb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ya(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Jb(b){return b.substr(0, -Ya(b).lastIndexOf("/")+1)}function zc(b,a){this.$$html5=!0;a=a||"";var c=Jb(b);xc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!w(e))throw Kb("ipthprfx",a,c);yc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Zb(this.$$search),b=this.$$hash?"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=oa(b,d))!==s)return d=e,(e=oa(a,e))!==s?c+(oa("/",e)||e):b+d;if((e=oa(c, -d))!==s)return c+e;if(c==d+"/")return c}}function Lb(b,a){var c=Jb(b);xc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e):this.$$html5?e:"";if(!w(e))throw Kb("ihshprfx",d,a);yc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Zb(this.$$search),e=this.$$hash?"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl= -b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Ya(b)==Ya(a))return a}}function Ac(b,a){this.$$html5=!0;Lb.apply(this,arguments);var c=Jb(b);this.$$rewrite=function(d){var e;if(b==Ya(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function nb(b){return function(){return this[b]}}function Bc(b,a){return function(c){if(E(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Vd(){var b="",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode= -function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,l=d.baseHref(),k=d.url();a?(l=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(l||"/"),e=e.history?zc:Ac):(l=Ya(k),e=Lb);h=new e(l,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=y(a.target);"a"!==K(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return; -var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=sa(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&&(a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),O.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase|| -c.$digest())});var m=0;c.$watch(function(){var a=d.url(),b=h.$$replace;m&&a==h.absUrl()||(m++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return m});return h}]}function Wd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack: -a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function fa(b,a){if("constructor"===b)throw Ba("isecfld",a);return b}function Za(b, -a){if(b){if(b.constructor===b)throw Ba("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw Ba("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Ba("isecdom",a);}return b}function ob(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1<a.length;f++){g=fa(a.shift(),d);var h=b[g];h||(h={},b[g]=h);b=h;b.then&&e.unwrapPromises&&(ta(d),"$$v"in b||function(a){a.then(function(b){a.$$v=b})}(b),b.$$v===s&&(b.$$v={}),b=b.$$v)}g=fa(a.shift(),d);return b[g]=c}function Cc(b, -a,c,d,e,g,f){fa(b,g);fa(a,g);fa(c,g);fa(d,g);fa(e,g);return f.unwrapPromises?function(f,l){var k=l&&l.hasOwnProperty(b)?l:f,m;if(null==k)return k;(k=k[b])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!a)return k;if(null==k)return s;(k=k[a])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!c)return k;if(null==k)return s;(k=k[c])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!d)return k;if(null== -k)return s;(k=k[d])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!e)return k;if(null==k)return s;(k=k[e])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);return k}:function(g,f){var k=f&&f.hasOwnProperty(b)?f:g;if(null==k)return k;k=k[b];if(!a)return k;if(null==k)return s;k=k[a];if(!c)return k;if(null==k)return s;k=k[c];if(!d)return k;if(null==k)return s;k=k[d];return e?null==k?s:k=k[e]:k}}function xe(b,a){fa(b,a);return function(a, -d){return null==a?s:(d&&d.hasOwnProperty(b)?d:a)[b]}}function ye(b,a,c){fa(b,c);fa(a,c);return function(c,e){if(null==c)return s;c=(e&&e.hasOwnProperty(b)?e:c)[b];return null==c?s:c[a]}}function Dc(b,a,c){if(Mb.hasOwnProperty(b))return Mb[b];var d=b.split("."),e=d.length,g;if(a.unwrapPromises||1!==e)if(a.unwrapPromises||2!==e)if(a.csp)g=6>e?Cc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=Cc(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=s,b=h;while(f<e);return h};else{var f="var p;\n"; -q(d,function(b,d){fa(b,c);f+="if(s == null) return undefined;\ns="+(d?"s":'((k&&k.hasOwnProperty("'+b+'"))?k:s)')+'["'+b+'"];\n'+(a.unwrapPromises?'if (s && s.then) {\n pw("'+c.replace(/(["\r\n])/g,"\\$1")+'");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n':"")});var f=f+"return s;",h=new Function("s","k","pw",f);h.toString=aa(f);g=a.unwrapPromises?function(a,b){return h(a,b,ta)}:h}else g=ye(d[0],d[1],c);else g=xe(d[0],c);"hasOwnProperty"!== -b&&(Mb[b]=g);return g}function Xd(){var b={},a={csp:!1,unwrapPromises:!1,logPromiseWarnings:!0};this.unwrapPromises=function(b){return B(b)?(a.unwrapPromises=!!b,this):a.unwrapPromises};this.logPromiseWarnings=function(b){return B(b)?(a.logPromiseWarnings=b,this):a.logPromiseWarnings};this.$get=["$filter","$sniffer","$log",function(c,d,e){a.csp=d.csp;ta=function(b){a.logPromiseWarnings&&!Ec.hasOwnProperty(b)&&(Ec[b]=!0,e.warn("[$parse] Promise found in the expression `"+b+"`. Automatic unwrapping of promises in Angular expressions is deprecated."))}; -return function(d){var e;switch(typeof d){case "string":if(b.hasOwnProperty(d))return b[d];e=new Nb(a);e=(new $a(e,c,a)).parse(d,!1);"hasOwnProperty"!==d&&(b[d]=e);return e;case "function":return d;default:return C}}}]}function Zd(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return ze(function(a){b.$evalAsync(a)},a)}]}function ze(b,a){function c(a){return a}function d(a){return f(a)}var e=function(){var f=[],k,m;return m={resolve:function(a){if(f){var c=f;f=s;k=g(a);c.length&&b(function(){for(var a, -b=0,d=c.length;b<d;b++)a=c[b],k.then(a[0],a[1],a[2])})}},reject:function(a){m.resolve(h(a))},notify:function(a){if(f){var c=f;f.length&&b(function(){for(var b,d=0,e=c.length;d<e;d++)b=c[d],b[2](a)})}},promise:{then:function(b,g,h){var m=e(),u=function(d){try{m.resolve((P(b)?b:c)(d))}catch(e){m.reject(e),a(e)}},F=function(b){try{m.resolve((P(g)?g:d)(b))}catch(c){m.reject(c),a(c)}},v=function(b){try{m.notify((P(h)?h:c)(b))}catch(d){a(d)}};f?f.push([u,F,v]):k.then(u,F,v);return m.promise},"catch":function(a){return this.then(null, -a)},"finally":function(a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,g){var f=null;try{f=(a||c)()}catch(h){return b(h,!1)}return f&&P(f.then)?f.then(function(){return b(e,g)},function(a){return b(a,!1)}):b(e,g)}return this.then(function(a){return d(a,!0)},function(a){return d(a,!1)})}}}},g=function(a){return a&&P(a.then)?a:{then:function(c){var d=e();b(function(){d.resolve(c(a))});return d.promise}}},f=function(a){var b=e();b.reject(a);return b.promise},h=function(c){return{then:function(g, -f){var h=e();b(function(){try{h.resolve((P(f)?f:d)(c))}catch(b){h.reject(b),a(b)}});return h.promise}}};return{defer:e,reject:f,when:function(h,k,m,n){var p=e(),r,z=function(b){try{return(P(k)?k:c)(b)}catch(d){return a(d),f(d)}},u=function(b){try{return(P(m)?m:d)(b)}catch(c){return a(c),f(c)}},F=function(b){try{return(P(n)?n:c)(b)}catch(d){a(d)}};b(function(){g(h).then(function(a){r||(r=!0,p.resolve(g(a).then(z,u,F)))},function(a){r||(r=!0,p.resolve(u(a)))},function(a){r||p.notify(F(a))})});return p.promise}, -all:function(a){var b=e(),c=0,d=M(a)?[]:{};q(a,function(a,e){c++;g(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise}}}function fe(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,g=e? -function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};g.supported=e;return g}]}function Yd(){var b=10,a=t("$rootScope"),c=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(d,e,g,f){function h(){this.$id=bb();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this; -this.$$destroyed=!1;this.$$asyncQueue=[];this.$$postDigestQueue=[];this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings={}}function l(b){if(p.$$phase)throw a("inprog",p.$$phase);p.$$phase=b}function k(a,b){var c=g(a);Ra(c,b);return c}function m(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function n(){}h.prototype={constructor:h,$new:function(a){a?(a=new h,a.$root=this.$root,a.$$asyncQueue=this.$$asyncQueue,a.$$postDigestQueue= -this.$$postDigestQueue):(a=function(){},a.prototype=this,a=new a,a.$id=bb());a["this"]=a;a.$$listeners={};a.$$listenerCount={};a.$parent=this;a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,d){var e=k(a,"watch"),g=this.$$watchers,f={fn:b,last:n,get:e,exp:a,eq:!!d};c=null;if(!P(b)){var h=k(b||C,"listener");f.fn=function(a, -b,c){h(c)}}if("string"==typeof a&&e.constant){var l=f.fn;f.fn=function(a,b,c){l.call(this,a,b,c);Oa(g,f)}}g||(g=this.$$watchers=[]);g.unshift(f);return function(){Oa(g,f);c=null}},$watchCollection:function(a,b){var c=this,d,e,f,h=1<b.length,l=0,k=g(a),m=[],n={},p=!0,q=0;return this.$watch(function(){d=k(c);var a,b;if(X(d))if(ab(d))for(e!==m&&(e=m,q=e.length=0,l++),a=d.length,q!==a&&(l++,e.length=q=a),b=0;b<a;b++)e[b]!==e[b]&&d[b]!==d[b]||e[b]===d[b]||(l++,e[b]=d[b]);else{e!==n&&(e=n={},q=0,l++);a= -0;for(b in d)d.hasOwnProperty(b)&&(a++,e.hasOwnProperty(b)?e[b]!==d[b]&&(l++,e[b]=d[b]):(q++,e[b]=d[b],l++));if(q>a)for(b in l++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(q--,delete e[b])}else e!==d&&(e=d,l++);return l},function(){p?(p=!1,b(d,d,c)):b(d,f,c);if(h)if(X(d))if(ab(d)){f=Array(d.length);for(var a=0;a<d.length;a++)f[a]=d[a]}else for(a in f={},d)Fc.call(d,a)&&(f[a]=d[a]);else f=d})},$digest:function(){var d,g,f,h,k=this.$$asyncQueue,m=this.$$postDigestQueue,q,x,s=b,L,Q=[],y,H,R;l("$digest"); -c=null;do{x=!1;for(L=this;k.length;){try{R=k.shift(),R.scope.$eval(R.expression)}catch(B){p.$$phase=null,e(B)}c=null}a:do{if(h=L.$$watchers)for(q=h.length;q--;)try{if(d=h[q])if((g=d.get(L))!==(f=d.last)&&!(d.eq?xa(g,f):"number"==typeof g&&"number"==typeof f&&isNaN(g)&&isNaN(f)))x=!0,c=d,d.last=d.eq?ba(g):g,d.fn(g,f===n?g:f,L),5>s&&(y=4-s,Q[y]||(Q[y]=[]),H=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,H+="; newVal: "+qa(g)+"; oldVal: "+qa(f),Q[y].push(H));else if(d===c){x=!1;break a}}catch(w){p.$$phase= -null,e(w)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((x||k.length)&&!s--)throw p.$$phase=null,a("infdig",b,qa(Q));}while(x||k.length);for(p.$$phase=null;m.length;)try{m.shift()()}catch(T){e(T)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,eb(null,m,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&& -(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=C,this.$on=this.$watch=function(){return C})}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase|| -p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent); -var e=this;return function(){c[db(c,b)]=null;m(e,1,a)}},$emit:function(a,b){var c=[],d,g=this,f=!1,h={name:a,targetScope:g,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},l=[h].concat(ya.call(arguments,1)),k,m;do{d=g.$$listeners[a]||c;h.currentScope=g;k=0;for(m=d.length;k<m;k++)if(d[k])try{d[k].apply(null,l)}catch(n){e(n)}else d.splice(k,1),k--,m--;if(f)break;g=g.$parent}while(g);return h},$broadcast:function(a,b){for(var c=this,d=this,g={name:a, -targetScope:this,preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1},f=[g].concat(ya.call(arguments,1)),h,k;c=d;){g.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,f)}catch(l){e(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}return g}};var p=new h;return p}]}function bd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*(https?|ftp|file):|data:image\//; -this.aHrefSanitizationWhitelist=function(a){return B(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,g;if(!S||8<=S)if(g=sa(c).href,""!==g&&!g.match(e))return"unsafe:"+g;return c}}}function Ae(b){if("self"===b)return b;if(w(b)){if(-1<b.indexOf("***"))throw ua("iwcard",b);b=b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08").replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return RegExp("^"+ -b+"$")}if(cb(b))return RegExp("^"+b.source+"$");throw ua("imatcher");}function Gc(b){var a=[];B(b)&&q(b,function(b){a.push(Ae(b))});return a}function ae(){this.SCE_CONTEXTS=ga;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=Gc(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=Gc(b));return a};this.$get=["$injector",function(c){function d(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf= -function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var e=function(a){throw ua("unsafe");};c.has("$sanitize")&&(e=c.get("$sanitize"));var g=d(),f={};f[ga.HTML]=d(g);f[ga.CSS]=d(g);f[ga.URL]=d(g);f[ga.JS]=d(g);f[ga.RESOURCE_URL]=d(f[ga.URL]);return{trustAs:function(a,b){var c=f.hasOwnProperty(a)?f[a]:null;if(!c)throw ua("icontext",a,b);if(null===b||b===s||""===b)return b;if("string"!==typeof b)throw ua("itype",a);return new c(b)}, -getTrusted:function(c,d){if(null===d||d===s||""===d)return d;var g=f.hasOwnProperty(c)?f[c]:null;if(g&&d instanceof g)return d.$$unwrapTrustedValue();if(c===ga.RESOURCE_URL){var g=sa(d.toString()),m,n,p=!1;m=0;for(n=b.length;m<n;m++)if("self"===b[m]?Ib(g):b[m].exec(g.href)){p=!0;break}if(p)for(m=0,n=a.length;m<n;m++)if("self"===a[m]?Ib(g):a[m].exec(g.href)){p=!1;break}if(p)return d;throw ua("insecurl",d.toString());}if(c===ga.HTML)return e(d);throw ua("unsafe");},valueOf:function(a){return a instanceof -g?a.$$unwrapTrustedValue():a}}}]}function $d(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sniffer","$sceDelegate",function(a,c,d){if(b&&c.msie&&8>c.msieDocumentMode)throw ua("iequirks");var e=ba(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Da);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b, -d(a,c))}};var g=e.parseAs,f=e.getTrusted,h=e.trustAs;q(ga,function(a,b){var c=K(b);e[Ta("parse_as_"+c)]=function(b){return g(a,b)};e[Ta("get_trusted_"+c)]=function(b){return f(a,b)};e[Ta("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function be(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,l=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style, -m=!1,n=!1;if(k){for(var p in k)if(m=l.exec(p)){h=m[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");m=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in k);!d||m&&n||(m=w(g.body.style.webkitTransition),n=w(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7<f),hasEvent:function(a){if("input"==a&&9==S)return!1;if(E(c[a])){var b=g.createElement("div");c[a]="on"+ -a in b}return c[a]},csp:Vb(),vendorPrefix:h,transitions:m,animations:n,android:d,msie:S,msieDocumentMode:f}}]}function de(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,h,l){var k=c.defer(),m=k.promise,n=B(l)&&!l;h=a.defer(function(){try{k.resolve(e())}catch(a){k.reject(a),d(a)}finally{delete g[m.$$timeoutId]}n||b.$apply()},h);m.$$timeoutId=h;g[h]=k;return m}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"), -delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function sa(b,a){var c=b;S&&(W.setAttribute("href",c),c=W.href);W.setAttribute("href",c);return{href:W.href,protocol:W.protocol?W.protocol.replace(/:$/,""):"",host:W.host,search:W.search?W.search.replace(/^\?/,""):"",hash:W.hash?W.hash.replace(/^#/,""):"",hostname:W.hostname,port:W.port,pathname:"/"===W.pathname.charAt(0)?W.pathname:"/"+W.pathname}}function Ib(b){b=w(b)?sa(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host} -function ee(){this.$get=aa(O)}function gc(b){function a(d,e){if(X(d)){var g={};q(d,function(b,c){g[c]=a(c,b)});return g}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Be);a("json",Ce);a("limitTo",De);a("lowercase",Ee);a("number",Kc);a("orderBy",Lc);a("uppercase",Fe)}function Be(){return function(b,a,c){if(!M(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;b<e.length;b++)if(!e[b](a))return!1; -return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return Ea.equals(a,b)}:function(a,b){if(a&&b&&"object"===typeof a&&"object"===typeof b){for(var d in a)if("$"!==d.charAt(0)&&Fc.call(a,d)&&c(a[d],b[d]))return!0;return!1}b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var g=function(a,b){if("string"==typeof b&&"!"===b.charAt(0))return!g(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a, -b);default:for(var d in a)if("$"!==d.charAt(0)&&g(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(g(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a={$:a};case "object":for(var f in a)(function(b){"undefined"!=typeof a[b]&&e.push(function(c){return g("$"==b?c:c&&c[b],a[b])})})(f);break;case "function":e.push(a);break;default:return b}d=[];for(f=0;f<b.length;f++){var h=b[f];e.check(h)&&d.push(h)}return d}}function Ic(b){var a= -b.NUMBER_FORMATS;return function(b,d){E(d)&&(d=a.CURRENCY_SYM);return Mc(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function Kc(b){var a=b.NUMBER_FORMATS;return function(b,d){return Mc(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Mc(b,a,c,d,e){if(null==b||!isFinite(b)||X(b))return"";var g=0>b;b=Math.abs(b);var f=b+"",h="",l=[],k=!1;if(-1!==f.indexOf("e")){var m=f.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?f="0":(h=f,k=!0)}if(k)0<e&&(-1<b&&1>b)&&(h=b.toFixed(e)); -else{f=(f.split(Nc)[1]||"").length;E(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Nc);f=b[0];b=b[1]||"";var m=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(m=f.length-n,k=0;k<m;k++)0===(m-k)%p&&0!==k&&(h+=c),h+=f.charAt(k);for(k=m;k<f.length;k++)0===(f.length-k)%n&&0!==k&&(h+=c),h+=f.charAt(k);for(;b.length<e;)b+="0";e&&"0"!==e&&(h+=d+b.substr(0,e))}l.push(g?a.negPre:a.posPre);l.push(h);l.push(g?a.negSuf:a.posSuf);return l.join("")}function Ob(b, -a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function $(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ob(e,a,d)}}function pb(b,a){return function(c,d){var e=c["get"+b](),g=Fa(a?"SHORT"+b:b);return d[g][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=Y(b[9]+b[10]),f=Y(b[9]+b[11])); -h.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));g=Y(b[4]||0)-g;f=Y(b[5]||0)-f;h=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;w(c)&&(c=Ge.test(c)?Y(c):a(c));vb(c)&&(c=new Date(c));if(!Na(c))return c;for(;e;)(l=He.exec(e))?(f=f.concat(ya.call(l,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h= -Ie[a];g+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ce(){return function(b){return qa(b,!0)}}function De(){return function(b,a){if(!M(b)&&!w(b))return b;a=Y(a);if(w(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function Lc(b){return function(a,c,d){function e(a,b){return Qa(b)?function(b,c){return a(c,b)}:a} -function g(a,b){var c=typeof a,d=typeof b;return c==d?("string"==c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!M(a)||!c)return a;c=M(c)?c:[c];c=Uc(c,function(a){var c=!1,d=a||Da;if(w(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);d=b(a);if(d.constant){var f=d();return e(function(a,b){return g(a[f],b[f])},c)}}return e(function(a,b){return g(d(a),d(b))},c)});for(var f=[],h=0;h<a.length;h++)f.push(a[h]);return f.sort(e(function(a,b){for(var d= -0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function va(b){P(b)&&(b={link:b});b.restrict=b.restrict||"AC";return aa(b)}function Oc(b,a,c,d){function e(a,c){c=c?"-"+fb(c,"-"):"";d.removeClass(b,(a?qb:rb)+c);d.addClass(b,(a?rb:qb)+c)}var g=this,f=b.parent().controller("form")||sb,h=0,l=g.$error={},k=[];g.$name=a.name||a.ngForm;g.$dirty=!1;g.$pristine=!0;g.$valid=!0;g.$invalid=!1;f.$addControl(g);b.addClass(La);e(!0);g.$addControl=function(a){Aa(a.$name,"input");k.push(a);a.$name&& -(g[a.$name]=a)};g.$removeControl=function(a){a.$name&&g[a.$name]===a&&delete g[a.$name];q(l,function(b,c){g.$setValidity(c,!0,a)});Oa(k,a)};g.$setValidity=function(a,b,c){var d=l[a];if(b)d&&(Oa(d,c),d.length||(h--,h||(e(b),g.$valid=!0,g.$invalid=!1),l[a]=!1,e(!0,a),f.$setValidity(a,!0,g)));else{h||e(b);if(d){if(-1!=db(d,c))return}else l[a]=d=[],h++,e(!1,a),f.$setValidity(a,!1,g);d.push(c);g.$valid=!1;g.$invalid=!0}};g.$setDirty=function(){d.removeClass(b,La);d.addClass(b,tb);g.$dirty=!0;g.$pristine= -!1;f.$setDirty()};g.$setPristine=function(){d.removeClass(b,tb);d.addClass(b,La);g.$dirty=!1;g.$pristine=!0;q(k,function(a){a.$setPristine()})}}function pa(b,a,c,d){b.$setValidity(a,c);return c?d:s}function Je(b,a,c){var d=c.prop("validity");X(d)&&b.$parsers.push(function(c){if(b.$error[a]||!(d.badInput||d.customError||d.typeMismatch)||d.valueMissing)return c;b.$setValidity(a,!1)})}function ub(b,a,c,d,e,g){var f=a.prop("validity");if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0}); -a.on("compositionend",function(){h=!1;l()})}var l=function(){if(!h){var e=a.val();Qa(c.ngTrim||"T")&&(e=ca(e));if(d.$viewValue!==e||f&&""===e&&!f.valueMissing)b.$$phase?d.$setViewValue(e):b.$apply(function(){d.$setViewValue(e)})}};if(e.hasEvent("input"))a.on("input",l);else{var k,m=function(){k||(k=g.defer(function(){l();k=null}))};a.on("keydown",function(a){a=a.keyCode;91===a||(15<a&&19>a||37<=a&&40>=a)||m()});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)? -"":d.$viewValue)};var n=c.ngPattern;n&&((e=n.match(/^\/(.*)\/([gim]*)$/))?(n=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||n.test(a),a)}):e=function(c){var e=b.$eval(n);if(!e||!e.test)throw t("ngPattern")("noregexp",n,e,ha(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var p=Y(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=p,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var r= -Y(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=r,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Pb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!M(a)){if(w(a))return a.split(" ");if(X(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b}}return a}return{restrict:"AC",link:function(g,f,h){function l(a,b){var c= -f.data("$classCounts")||{},d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});f.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===a||g.$index%2===a){var k=e(b||[]);if(!m){var r=l(k,1);h.$addClass(r)}else if(!xa(b,m)){var q=e(m),r=d(k,q),k=d(q,k),k=l(k,-1),r=l(r,1);0===r.length?c.removeClass(f,k):0===k.length?c.addClass(f,r):c.setClass(f,r,k)}}m=ba(b)}var m;g.$watch(h[b],k,!0);h.$observe("class",function(a){k(g.$eval(h[b]))});"ngClass"!==b&&g.$watch("$index", -function(c,d){var f=c&1;if(f!==d&1){var k=e(g.$eval(h[b]));f===a?(f=l(k,1),h.$addClass(f)):(f=l(k,-1),h.$removeClass(f))}})}}}]}var K=function(b){return w(b)?b.toLowerCase():b},Fc=Object.prototype.hasOwnProperty,Fa=function(b){return w(b)?b.toUpperCase():b},S,y,Ga,ya=[].slice,Ke=[].push,wa=Object.prototype.toString,Pa=t("ng"),Ea=O.angular||(O.angular={}),Sa,Ka,ka=["0","0","0"];S=Y((/msie (\d+)/.exec(K(navigator.userAgent))||[])[1]);isNaN(S)&&(S=Y((/trident\/.*; rv:(\d+)/.exec(K(navigator.userAgent))|| -[])[1]));C.$inject=[];Da.$inject=[];var ca=function(){return String.prototype.trim?function(b){return w(b)?b.trim():b}:function(b){return w(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ka=9>S?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Fa(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xc=/[A-Z]/g,$c={full:"1.2.16",major:1,minor:2,dot:16,codeName:"badger-enumeration"},Ua=N.cache={},gb=N.expando="ng-"+(new Date).getTime(), -me=1,Pc=O.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Fb=O.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};N._data=function(b){return this.cache[b[this.expando]]||{}};var he=/([\:\-\_]+(.))/g,ie=/^moz([A-Z])/,Bb=t("jqLite"),je=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Cb=/<|&#?\w+;/,ke=/<([\w:]+)/,le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea= -{option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th=ea.td;var Ja=N.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),N(O).on("load",a))},toString:function(){var b= -[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:Ke,sort:[].sort,splice:[].splice},kb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){kb[K(b)]=b});var nc={};q("input select option textarea button form details".split(" "),function(b){nc[Fa(b)]=!0});q({data:jc,inheritedData:jb,scope:function(b){return y(b).data("$scope")||jb(b.parentNode||b,["$isolateScope","$scope"])}, -isolateScope:function(b){return y(b).data("$isolateScope")||y(b).data("$isolateScopeNoTemplate")},controller:kc,injector:function(b){return jb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Gb,css:function(b,a,c){a=Ta(a);if(B(c))b.style[a]=c;else{var d;8>=S&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=S&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=K(a);if(kb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d)); -else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:s;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(E(d))return e?b[e]:"";b[e]=d}var a=[];9>S?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(E(a)){if("SELECT"===Ka(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&& -c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(E(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<d.length;c++)Ha(d[c]);b.innerHTML=a},empty:lc},function(b,a){N.prototype[a]=function(a,d){var e,g;if(b!==lc&&(2==b.length&&b!==Gb&&b!==kc?a:d)===s){if(X(a)){for(e=0;e<this.length;e++)if(b===jc)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}e=b.$dv;g=e===s?Math.min(this.length,1):this.length;for(var f=0;f<g;f++){var h=b(this[f],a,d);e= -e?e+h:h}return e}for(e=0;e<this.length;e++)b(this[e],a,d);return this}});q({removeData:hc,dealoc:Ha,on:function a(c,d,e,g){if(B(g))throw Bb("onargs");var f=la(c,"events"),h=la(c,"handle");f||la(c,"events",f={});h||la(c,"handle",h=ne(c,f));q(d.split(" "),function(d){var g=f[d];if(!g){if("mouseenter"==d||"mouseleave"==d){var m=U.body.contains||U.body.compareDocumentPosition?function(a,c){var d=9===a.nodeType?a.documentElement:a,e=c&&c.parentNode;return a===e||!!(e&&1===e.nodeType&&(d.contains?d.contains(e): -a.compareDocumentPosition&&a.compareDocumentPosition(e)&16))}:function(a,c){if(c)for(;c=c.parentNode;)if(c===a)return!0;return!1};f[d]=[];a(c,{mouseleave:"mouseout",mouseenter:"mouseover"}[d],function(a){var c=a.relatedTarget;c&&(c===this||m(this,c))||h(a,d)})}else Pc(c,d,h),f[d]=[];g=f[d]}g.push(e)})},off:ic,one:function(a,c,d){a=y(a);a.on(c,function g(){a.off(c,d);a.off(c,g)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;Ha(a);q(new N(c),function(c){d?e.insertBefore(c,d.nextSibling): -e.replaceChild(c,a);d=c})},children:function(a){var c=[];q(a.childNodes,function(a){1===a.nodeType&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){q(new N(c),function(c){1!==a.nodeType&&11!==a.nodeType||a.appendChild(c)})},prepend:function(a,c){if(1===a.nodeType){var d=a.firstChild;q(new N(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=y(c)[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){Ha(a); -var c=a.parentNode;c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;q(new N(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:ib,removeClass:hb,toggleClass:function(a,c,d){c&&q(c.split(" "),function(c){var g=d;E(g)&&(g=!Gb(a,c));(g?ib:hb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){if(a.nextElementSibling)return a.nextElementSibling;for(a=a.nextSibling;null!=a&&1!==a.nodeType;)a=a.nextSibling;return a},find:function(a,c){return a.getElementsByTagName? -a.getElementsByTagName(c):[]},clone:Eb,triggerHandler:function(a,c,d){c=(la(a,"events")||{})[c];d=d||[];var e=[{preventDefault:C,stopPropagation:C}];q(c,function(c){c.apply(a,e.concat(d))})}},function(a,c){N.prototype[c]=function(c,e,g){for(var f,h=0;h<this.length;h++)E(f)?(f=a(this[h],c,e,g),B(f)&&(f=y(f))):Db(f,a(this[h],c,e,g));return B(f)?f:this};N.prototype.bind=N.prototype.on;N.prototype.unbind=N.prototype.off});Va.prototype={put:function(a,c){this[Ia(a)]=c},get:function(a){return this[Ia(a)]}, -remove:function(a){var c=this[a=Ia(a)];delete this[a];return c}};var pe=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,qe=/,/,re=/^\s*(_?)(\S+?)\1\s*$/,oe=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Wa=t("$injector"),Le=t("$animate"),Ld=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Le("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp? -a:null);return this.$$classNameFilter};this.$get=["$timeout","$$asyncCallback",function(a,d){return{enter:function(a,c,f,h){f?f.after(a):(c&&c[0]||(c=f.parent()),c.append(a));h&&d(h)},leave:function(a,c){a.remove();c&&d(c)},move:function(a,c,d,h){this.enter(a,c,d,h)},addClass:function(a,c,f){c=w(c)?c:M(c)?c.join(" "):"";q(a,function(a){ib(a,c)});f&&d(f)},removeClass:function(a,c,f){c=w(c)?c:M(c)?c.join(" "):"";q(a,function(a){hb(a,c)});f&&d(f)},setClass:function(a,c,f,h){q(a,function(a){ib(a,c);hb(a, -f)});h&&d(h)},enabled:C}}]}],ja=t("$compile");cc.$inject=["$provide","$$sanitizeUriProvider"];var te=/^(x[\:\-_]|data[\:\-_])/i,vc=t("$interpolate"),Me=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,we={http:80,https:443,ftp:21},Kb=t("$location");Ac.prototype=Lb.prototype=zc.prototype={$$html5:!1,$$replace:!1,absUrl:nb("$$absUrl"),url:function(a,c){if(E(a))return this.$$url;var d=Me.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));(d[2]||d[1])&&this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:nb("$$protocol"), -host:nb("$$host"),port:nb("$$port"),path:Bc("$$path",function(a){return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(w(a))this.$$search=Yb(a);else if(X(a))this.$$search=a;else throw Kb("isrcharg");break;default:E(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:Bc("$$hash",Da),replace:function(){this.$$replace=!0;return this}};var Ba=t("$parse"),Ec={},ta,Ma={"null":function(){return null},"true":function(){return!0}, -"false":function(){return!1},undefined:C,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return B(d)?B(e)?d+e:d:B(e)?e:s},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(B(d)?d:0)-(B(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"=":C,"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a, -c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Ne={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'}, -Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index<this.text.length;){this.ch=this.text.charAt(this.index);if(this.is("\"'"))this.readString(this.ch);else if(this.isNumber(this.ch)||this.is(".")&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(this.ch))this.readIdent(),this.was("{,")&&("{"===a[0]&&(c=this.tokens[this.tokens.length-1]))&&(c.json=-1===c.text.indexOf(".")); -else if(this.is("(){}[].,;:?"))this.tokens.push({index:this.index,text:this.ch,json:this.was(":[,")&&this.is("{[")||this.is("}]:,")}),this.is("{[")&&a.unshift(this.ch),this.is("}]")&&a.shift(),this.index++;else if(this.isWhitespace(this.ch)){this.index++;continue}else{var d=this.ch+this.peek(),e=d+this.peek(2),g=Ma[this.ch],f=Ma[d],h=Ma[e];h?(this.tokens.push({index:this.index,text:e,fn:h}),this.index+=3):f?(this.tokens.push({index:this.index,text:d,fn:f}),this.index+=2):g?(this.tokens.push({index:this.index, -text:this.ch,fn:g,json:this.was("[,:")&&this.is("+-")}),this.index+=1):this.throwError("Unexpected next character ",this.index,this.index+1)}this.lastCh=this.ch}return this.tokens},is:function(a){return-1!==a.indexOf(this.ch)},was:function(a){return-1!==a.indexOf(this.lastCh)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"=== -a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Ba("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=K(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+= -d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}a*=1;this.tokens.push({index:c,text:a,json:!0,fn:function(){return a}})},readIdent:function(){for(var a=this,c="",d=this.index,e,g,f,h;this.index<this.text.length;){h=this.text.charAt(this.index);if("."===h||this.isIdent(h)||this.isNumber(h))"."===h&&(e=this.index),c+=h;else break; -this.index++}if(e)for(g=this.index;g<this.text.length;){h=this.text.charAt(g);if("("===h){f=c.substr(e-d+1);c=c.substr(0,e-d);this.index=g;break}if(this.isWhitespace(h))g++;else break}d={index:d,text:c};if(Ma.hasOwnProperty(c))d.fn=Ma[c],d.json=Ma[c];else{var l=Dc(c,this.options,this.text);d.fn=D(function(a,c){return l(a,c)},{assign:function(d,e){return ob(d,c,e,a.text,a.options)}})}this.tokens.push(d);f&&(this.tokens.push({index:e,text:".",json:!1}),this.tokens.push({index:e+1,text:f,json:!1}))}, -readString:function(a){var c=this.index;this.index++;for(var d="",e=a,g=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),e=e+f;if(g)"u"===f?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d=(g=Ne[f])?d+g:d+f,g=!1;else if("\\"===f)g=!0;else{if(f===a){this.index++;this.tokens.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});return}d+= -f}this.index++}this.throwError("Unterminated quote",c)}};var $a=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};$a.ZERO=D(function(){return 0},{constant:!0});$a.prototype={constructor:$a,parse:function(a,c){this.text=a;this.json=c;this.tokens=this.lexer.lex(a);c&&(this.assignment=this.logicalOR,this.functionCall=this.fieldAccess=this.objectIndex=this.filterChain=function(){this.throwError("is not valid json",{text:a,index:0})});var d=c?this.primary():this.statements();0!==this.tokens.length&& -this.throwError("is an unexpected token",this.tokens[0]);d.literal=!!d.literal;d.constant=!!d.constant;return d},primary:function(){var a;if(this.expect("("))a=this.filterChain(),this.consume(")");else if(this.expect("["))a=this.arrayDeclaration();else if(this.expect("{"))a=this.object();else{var c=this.expect();(a=c.fn)||this.throwError("not a primary expression",c);c.json&&(a.constant=!0,a.literal=!0)}for(var d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text? -(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw Ba("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw Ba("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){if(0<this.tokens.length){var g=this.tokens[0],f=g.text;if(f===a||f===c||f===d||f===e||!(a||c||d||e))return g}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d, -e))?(this.json&&!a.json&&this.throwError("is not valid json",a),this.tokens.shift(),a):!1},consume:function(a){this.expect(a)||this.throwError("is unexpected, expecting ["+a+"]",this.peek())},unaryFn:function(a,c){return D(function(d,e){return a(d,e,c)},{constant:c.constant})},ternaryFn:function(a,c,d){return D(function(e,g){return a(e,g)?c(e,g):d(e,g)},{constant:a.constant&&c.constant&&d.constant})},binaryFn:function(a,c,d){return D(function(e,g){return c(e,g,a,d)},{constant:a.constant&&d.constant})}, -statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,g=0;g<a.length;g++){var f=a[g];f&&(e=f(c,d))}return e}},filterChain:function(){for(var a=this.expression(),c;;)if(c=this.expect("|"))a=this.binaryFn(a,c.fn,this.filter());else return a},filter:function(){for(var a=this.expect(),c=this.$filter(a.text),d=[];;)if(a=this.expect(":"))d.push(this.expression());else{var e= -function(a,e,h){h=[h];for(var l=0;l<d.length;l++)h.push(d[l](a,e));return c.apply(a,h)};return function(){return e}}},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),function(d,g){return a.assign(d,c(d,g),g)}):a},ternary:function(){var a=this.logicalOR(),c,d;if(this.expect("?")){c=this.ternary(); -if(d=this.expect(":"))return this.ternaryFn(a,c,this.ternary());this.throwError("expected :",d)}else return a},logicalOR:function(){for(var a=this.logicalAND(),c;;)if(c=this.expect("||"))a=this.binaryFn(a,c.fn,this.logicalAND());else return a},logicalAND:function(){var a=this.equality(),c;if(c=this.expect("&&"))a=this.binaryFn(a,c.fn,this.logicalAND());return a},equality:function(){var a=this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.fn,this.equality());return a}, -relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn($a.ZERO,a.fn, -this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Dc(d,this.options,this.text);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,f,h){return ob(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,g){var f=a(e,g),h=d(e,g),l;if(!f)return s;(f=Za(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&&(l=f,"$$v"in f||(l.$$v=s,l.then(function(a){l.$$v= -a})),f=f.$$v);return f},{assign:function(e,g,f){var h=d(e,f);return Za(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],l=c?c(g,f):g,k=0;k<d.length;k++)h.push(d[k](g,f));k=a(g,f,l)||C;Za(l,e.text);Za(k,e.text);h=k.apply?k.apply(l,h):k(h[0],h[1],h[2],h[3],h[4]);return Za(h,e.text)}},arrayDeclaration:function(){var a=[],c=!0;if("]"!==this.peekToken().text){do{if(this.peek("]"))break; -var d=this.expression();a.push(d);d.constant||(c=!1)}while(this.expect(","))}this.consume("]");return D(function(c,d){for(var f=[],h=0;h<a.length;h++)f.push(a[h](c,d));return f},{literal:!0,constant:c})},object:function(){var a=[],c=!0;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.expect(),d=d.string||d.text;this.consume(":");var e=this.expression();a.push({key:d,value:e});e.constant||(c=!1)}while(this.expect(","))}this.consume("}");return D(function(c,d){for(var e={},l=0;l< -a.length;l++){var k=a[l];e[k.key]=k.value(c,d)}return e},{literal:!0,constant:c})}};var Mb={},ua=t("$sce"),ga={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},W=U.createElement("a"),Hc=sa(O.location.href,!0);gc.$inject=["$provide"];Ic.$inject=["$locale"];Kc.$inject=["$locale"];var Nc=".",Ie={yyyy:$("FullYear",4),yy:$("FullYear",2,0,!0),y:$("FullYear",1),MMMM:pb("Month"),MMM:pb("Month",!0),MM:$("Month",2,1),M:$("Month",1,1),dd:$("Date",2),d:$("Date",1),HH:$("Hours",2),H:$("Hours", -1),hh:$("Hours",2,-12),h:$("Hours",1,-12),mm:$("Minutes",2),m:$("Minutes",1),ss:$("Seconds",2),s:$("Seconds",1),sss:$("Milliseconds",3),EEEE:pb("Day"),EEE:pb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ob(Math[0<a?"floor":"ceil"](a/60),2)+Ob(Math.abs(a%60),2))}},He=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Ge=/^\-?\d+$/;Jc.$inject=["$locale"];var Ee=aa(K),Fe=aa(Fa);Lc.$inject= -["$parse"];var cd=aa({restrict:"E",compile:function(a,c){8>=S&&(c.href||c.name||c.$set("href",""),a.append(U.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var g="[object SVGAnimatedString]"===wa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),zb={};q(kb,function(a,c){if("multiple"!=a){var d=na("ng-"+c);zb[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src", -"srcset","href"],function(a){var c=na("ng-"+a);zb[c]=function(){return{priority:99,link:function(d,e,g){var f=a,h=a;"href"===a&&"[object SVGAnimatedString]"===wa.call(e.prop("href"))&&(h="xlinkHref",g.$attr[h]="xlink:href",f=null);g.$observe(c,function(a){a&&(g.$set(h,a),S&&f&&e.prop(f,g[h]))})}}}});var sb={$addControl:C,$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C};Oc.$inject=["$element","$attrs","$scope","$animate"];var Qc=function(a){return["$timeout",function(c){return{name:"form", -restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Pc(e[0],"submit",h);e.on("$destroy",function(){c(function(){Fb(e[0],"submit",h)},0,!1)})}var l=e.parent().controller("form"),k=g.name||g.ngForm;k&&ob(a,k,f,k);if(l)e.on("$destroy",function(){l.$removeControl(f);k&&ob(a,k,s,k);D(f,sb)})}}}}}]},dd=Qc(),qd=Qc(!0),Oe=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, -Pe=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,Qe=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc={text:ub,number:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Qe.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});Je(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a), -e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e,"number",e.$isEmpty(a)||vb(a),a)})},url:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||Oe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||Pe.test(a),a)};e.$formatters.push(a); -e.$parsers.push(a)},radio:function(a,c,d,e){E(d.name)&&c.attr("name",bb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;w(g)||(g=!0);w(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g}; -e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:C,button:C,submit:C,reset:C,file:C},dc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,f){f&&(Rc[K(g.type)]||Rc.text)(d,e,g,f,c,a)}}}],rb="ng-valid",qb="ng-invalid",La="ng-pristine",tb="ng-dirty",Re=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,g,f){function h(a,c){c=c?"-"+fb(c,"-"):"";f.removeClass(e,(a?qb:rb)+c); -f.addClass(e,(a?rb:qb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var l=g(d.ngModel),k=l.assign;if(!k)throw t("ngModel")("nonassign",d.ngModel,ha(e));this.$render=C;this.$isEmpty=function(a){return E(a)||""===a||null===a||a!==a};var m=e.inheritedData("$formController")||sb,n=0,p=this.$error={};e.addClass(La);h(!0);this.$setValidity=function(a,c){p[a]!== -!c&&(c?(p[a]&&n--,n||(h(!0),this.$valid=!0,this.$invalid=!1)):(h(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,h(c,a),m.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;f.removeClass(e,tb);f.addClass(e,La)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,f.removeClass(e,La),f.addClass(e,tb),m.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,k(a,d),q(this.$viewChangeListeners, -function(a){try{a()}catch(d){c(d)}}))};var r=this;a.$watch(function(){var c=l(a);if(r.$modelValue!==c){var d=r.$formatters,e=d.length;for(r.$modelValue=c;e--;)c=d[e](c);r.$viewValue!==c&&(r.$viewValue=c,r.$render())}return c})}],Fd=function(){return{require:["ngModel","^?form"],controller:Re,link:function(a,c,d,e){var g=e[0],f=e[1]||sb;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},Hd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -ec=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Gd=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!E(a)){var c=[];a&&q(a.split(g),function(a){a&& -c.push(ca(a))});return c}});e.$formatters.push(function(a){return M(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},Se=/^(true|false|\d+)$/,Id=function(){return{priority:100,compile:function(a,c){return Se.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},id=va(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),kd=["$interpolate", -function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],jd=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding",g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],ld=Pb("",!0),nd=Pb("Odd",0),md=Pb("Even",1),od=va({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}), -pd=[function(){return{scope:!0,controller:"@",priority:500}}],fc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=na("ng-"+a);fc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d,e){d.on(K(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var sd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A", -$$tlb:!0,link:function(c,d,e,g,f){var h,l,k;c.$watch(e.ngIf,function(g){Qa(g)?l||(l=c.$new(),f(l,function(c){c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=yb(h.clone),a.leave(k,function(){k=null}),h=null))})}}}],td=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ea.noop,compile:function(f, -h){var l=h.ngInclude||h.src,k=h.onload||"",m=h.autoscroll;return function(f,h,q,s,u){var F=0,v,y,A,x=function(){y&&(y.remove(),y=null);v&&(v.$destroy(),v=null);A&&(e.leave(A,function(){y=null}),y=A,A=null)};f.$watch(g.parseAsResourceUrl(l),function(g){var l=function(){!B(m)||m&&!f.$eval(m)||d()},q=++F;g?(a.get(g,{cache:c}).success(function(a){if(q===F){var c=f.$new();s.template=a;a=u(c,function(a){x();e.enter(a,null,h,l)});v=c;A=a;v.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q=== -F&&x()}),f.$emit("$includeContentRequested")):(x(),s.template=null)})}}}}],Jd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],ud=va({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),vd=va({terminal:!0,priority:1E3}),wd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,l=f.$attr.when&&g.attr(f.$attr.when),k=f.offset|| -0,m=e.$eval(l)||{},n={},p=c.startSymbol(),r=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(f,function(a,c){s.test(c)&&(m[K(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(m,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+r))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in m||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}],xd=["$parse","$animate",function(a,c){var d=t("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0, -link:function(e,g,f,h,l){var k=f.ngRepeat,m=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,r,s,u,F,v={$id:Ia};if(!m)throw d("iexp",k);f=m[1];h=m[2];(m=m[3])?(n=a(m),p=function(a,c,d){F&&(v[F]=a);v[u]=c;v.$index=d;return n(e,v)}):(r=function(a,c){return Ia(c)},s=function(a){return a});m=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!m)throw d("iidexp",f);u=m[3]||m[1];F=m[2];var B={};e.$watchCollection(h,function(a){var f,h,m=g[0],n,v={},H,R,w,C,T,t, -E=[];if(ab(a))T=a,n=p||r;else{n=p||s;T=[];for(w in a)a.hasOwnProperty(w)&&"$"!=w.charAt(0)&&T.push(w);T.sort()}H=T.length;h=E.length=T.length;for(f=0;f<h;f++)if(w=a===T?f:T[f],C=a[w],C=n(w,C,f),Aa(C,"`track by` id"),B.hasOwnProperty(C))t=B[C],delete B[C],v[C]=t,E[f]=t;else{if(v.hasOwnProperty(C))throw q(E,function(a){a&&a.scope&&(B[a.id]=a)}),d("dupes",k,C);E[f]={id:C};v[C]=!1}for(w in B)B.hasOwnProperty(w)&&(t=B[w],f=yb(t.clone),c.leave(f),q(f,function(a){a.$$NG_REMOVED=!0}),t.scope.$destroy()); -f=0;for(h=T.length;f<h;f++){w=a===T?f:T[f];C=a[w];t=E[f];E[f-1]&&(m=E[f-1].clone[E[f-1].clone.length-1]);if(t.scope){R=t.scope;n=m;do n=n.nextSibling;while(n&&n.$$NG_REMOVED);t.clone[0]!=n&&c.move(yb(t.clone),null,y(m));m=t.clone[t.clone.length-1]}else R=e.$new();R[u]=C;F&&(R[F]=w);R.$index=f;R.$first=0===f;R.$last=f===H-1;R.$middle=!(R.$first||R.$last);R.$odd=!(R.$even=0===(f&1));t.scope||l(R,function(a){a[a.length++]=U.createComment(" end ngRepeat: "+k+" ");c.enter(a,null,y(m));m=a;t.scope=R;t.clone= -a;v[t.id]=t})}B=v})}}}],yd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngShow,function(c){a[Qa(c)?"removeClass":"addClass"](d,"ng-hide")})}}],rd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngHide,function(c){a[Qa(c)?"addClass":"removeClass"](d,"ng-hide")})}}],zd=va(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Ad=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases= -{}}],link:function(c,d,e,g){var f,h,l,k=[];c.$watch(e.ngSwitch||e.on,function(d){var n,p=k.length;if(0<p){if(l){for(n=0;n<p;n++)l[n].remove();l=null}l=[];for(n=0;n<p;n++){var r=h[n];k[n].$destroy();l[n]=r;a.leave(r,function(){l.splice(n,1);0===l.length&&(l=null)})}}h=[];k=[];if(f=g.cases["!"+d]||g.cases["?"])c.$eval(e.change),q(f,function(d){var e=c.$new();k.push(e);d.transclude(e,function(c){var e=d.element;h.push(c);a.enter(c,e.parent(),e)})})})}}}],Bd=va({transclude:"element",priority:800,require:"^ngSwitch", -link:function(a,c,d,e,g){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:g,element:c})}}),Cd=va({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,c,d,e,g){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:g,element:c})}}),Ed=va({link:function(a,c,d,e,g){if(!g)throw t("ngTransclude")("orphan",ha(c));g(function(a){c.empty();c.append(a)})}}),ed=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c, -d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],Te=t("ngOptions"),Dd=aa({terminal:!0}),fd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:C};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},m=e,n;l.databound= -d.ngModel;l.init=function(a,c,d){m=a;n=d};l.addOption=function(c){Aa(c,'"option value"');k[c]=!0;m.$viewValue==c&&(a.val(c),n.parent()&&n.remove())};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],m.$viewValue==a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c="? "+Ia(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=C})}],link:function(e,f,h,l){function k(a, -c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(A.parent()&&A.remove(),c.val(a),""===a&&w.prop("selected",!0)):E(a)&&w?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){A.parent()&&A.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new Va(d.$viewValue);q(c.find("option"),function(c){c.selected=B(a.get(c.value))})};a.$watch(function(){xa(e,d.$viewValue)||(e=ba(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a= -[];q(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function h(){var a={"":[]},c=[""],d,k,s,t,z;t=g.$modelValue;z=y(e)||[];var E=n?Qb(z):z,F,I,A;I={};s=!1;var D,H;if(r)if(w&&M(t))for(s=new Va([]),A=0;A<t.length;A++)I[m]=t[A],s.put(w(e,I),t[A]);else s=new Va(t);for(A=0;F=E.length,A<F;A++){k=A;if(n){k=E[A];if("$"===k.charAt(0))continue;I[n]=k}I[m]=z[k];d=p(e,I)||"";(k=a[d])||(k=a[d]=[],c.push(d));r?d=B(s.remove(w?w(e,I):q(e,I))):(w?(d={},d[m]=t,d= -w(e,d)===w(e,I)):d=t===q(e,I),s=s||d);D=l(e,I);D=B(D)?D:"";k.push({id:w?w(e,I):n?E[A]:A,label:D,selected:d})}r||(u||null===t?a[""].unshift({id:"",label:"",selected:!s}):s||a[""].unshift({id:"?",label:"",selected:!0}));I=0;for(E=c.length;I<E;I++){d=c[I];k=a[d];x.length<=I?(t={element:C.clone().attr("label",d),label:k.label},z=[t],x.push(z),f.append(t.element)):(z=x[I],t=z[0],t.label!=d&&t.element.attr("label",t.label=d));D=null;A=0;for(F=k.length;A<F;A++)s=k[A],(d=z[A+1])?(D=d.element,d.label!==s.label&& -D.text(d.label=s.label),d.id!==s.id&&D.val(d.id=s.id),d.selected!==s.selected&&D.prop("selected",d.selected=s.selected)):(""===s.id&&u?H=u:(H=v.clone()).val(s.id).attr("selected",s.selected).text(s.label),z.push({element:H,label:s.label,id:s.id,selected:s.selected}),D?D.after(H):t.element.append(H),D=H);for(A++;z.length>A;)z.pop().element.remove()}for(;x.length>I;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Te("iexp",t,ha(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q= -c(k[2]?k[1]:m),y=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];u&&(a(u)(e),u.removeClass("ng-scope"),u.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=y(e)||[],d={},h,k,l,p,t,v,u;if(r)for(k=[],p=0,v=x.length;p<v;p++)for(a=x[p],l=1,t=a.length;l<t;l++){if((h=a[l].element)[0].selected){h=h.val();n&&(d[n]=h);if(w)for(u=0;u<c.length&&(d[m]=c[u],w(e,d)!=h);u++);else d[m]=c[h];k.push(q(e,d))}}else{h=f.val();if("?"==h)k=s;else if(""===h)k=null;else if(w)for(u=0;u<c.length;u++){if(d[m]= -c[u],w(e,d)==h){k=q(e,d);break}}else d[m]=c[h],n&&(d[n]=h),k=q(e,d);1<x[0].length&&x[0][1].id!==h&&(x[0][1].selected=!1)}g.$setViewValue(k)})});g.$render=h;e.$watch(h)}if(l[1]){var p=l[0];l=l[1];var r=h.multiple,t=h.ngOptions,u=!1,w,v=y(U.createElement("option")),C=y(U.createElement("optgroup")),A=v.clone();h=0;for(var x=f.children(),D=x.length;h<D;h++)if(""===x[h].value){w=u=x.eq(h);break}p.init(l,u,A);r&&(l.$isEmpty=function(a){return!a||0===a.length});t?n(e,f,l):r?m(e,f,l):k(e,f,l,p)}}}}],hd=["$interpolate", -function(a){var c={addOption:C,removeOption:C};return{restrict:"E",priority:100,compile:function(d,e){if(E(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),m=k.data("$selectController")||k.parent().data("$selectController");m&&m.databound?d.prop("selected",!1):m=c;g?a.$watch(g,function(a,c){e.$set("value",a);a!==c&&m.removeOption(c);m.addOption(a)}):m.addOption(e.value);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],gd=aa({restrict:"E", -terminal:!0});O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):((Ga=O.jQuery)?(y=Ga,D(Ga.fn,{scope:Ja.scope,isolateScope:Ja.isolateScope,controller:Ja.controller,injector:Ja.injector,inheritedData:Ja.inheritedData}),Ab("remove",!0,!0,!1),Ab("empty",!1,!1,!1),Ab("html",!1,!1,!0)):y=N,Ea.element=y,Zc(Ea),y(U).ready(function(){Wc(U,$b)}))})(window,document);!angular.$$csp()&&angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>'); -//# sourceMappingURL=angular.min.js.map diff --git a/platforms/android/assets/www/lib/angular/angular.min.js.gzip b/platforms/android/assets/www/lib/angular/angular.min.js.gzip deleted file mode 100644 index 5daa0cdc93f8c3f207689eed4fd93cc6b007b21d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39258 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%0DP_J$*(3aXuaS&^J!a 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 SGm?O&mH!3EH$vr6o&f-gDF0ai diff --git a/platforms/android/assets/www/lib/angular/angular.min.js.map b/platforms/android/assets/www/lib/angular/angular.min.js.map deleted file mode 100644 index 0dddf2aa..00000000 --- a/platforms/android/assets/www/lib/angular/angular.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular.min.js", -"lineCount":209, -"mappings":"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", -"sources":["angular.js"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","prop","attr","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","publishExternalAPI","version","uppercase","angularModule","$LocaleProvider","ngModule","$$SanitizeUriProvider","$CompileProvider","directive","htmlAnchorDirective","inputDirective","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBindDirective","ngBindHtmlDirective","ngBindTemplateDirective","ngClassDirective","ngClassEvenDirective","ngClassOddDirective","ngCloakDirective","ngControllerDirective","ngFormDirective","ngHideDirective","ngIfDirective","ngIncludeDirective","ngInitDirective","ngNonBindableDirective","ngPluralizeDirective","ngRepeatDirective","ngShowDirective","ngStyleDirective","ngSwitchDirective","ngSwitchWhenDirective","ngSwitchDefaultDirective","ngOptionsDirective","ngTranscludeDirective","ngModelDirective","ngListDirective","ngChangeDirective","requiredDirective","ngValueDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$ExceptionHandlerProvider","$FilterProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$HttpBackendProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$SceProvider","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","fragment","createDocumentFragment","HTML_REGEXP","tmp","appendChild","createElement","TAG_NAME_REGEXP","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","removeChild","firstChild","lastChild","j","jj","childNodes","textContent","createTextNode","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","parentNode","host","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","$$rAF","$timeout","supported","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","on","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$document","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$cacheFactory","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","createBoundTranscludeFn","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","directiveName","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","childBoundTranscludeFn","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","setClass","writeAttr","booleanKey","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","CNTRL_REG","register","this.register","expression","identifier","exception","cause","parseHeaders","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","statusText","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","ActiveXObject","createHttpBackend","callbacks","$browserDefer","jsonpReq","script","doneWrapper","onreadystatechange","onload","onerror","body","script.onreadystatechange","readyState","script.onerror","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","urlResolve","protocol","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","simpleGetterFn1","simpleGetterFn2","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","createInternalRejectedPromise","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","id","timer","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","ChildScope","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","veryOldValue","trackVeryOldValue","changeDetected","objGetter","internalArray","internalObject","initRun","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","$on","this.$watch","expr","$$postDigest","namedListeners","$emit","listenerArgs","array1","currentScope","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","predicate","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","addNativeHtml5Validators","$parsers","validator","badInput","customError","typeMismatch","valueMissing","textInputType","composing","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","Object","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","_data","JQLite._data","optgroup","option","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","contentDocument","prepend","wrapNode","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$$asyncCallback","enter","leave","move","add","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ctrls","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBind","ngBindWatchAction","ngBindTemplate","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","$attrs","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] -} diff --git a/platforms/android/assets/www/lib/angular/bower.json b/platforms/android/assets/www/lib/angular/bower.json deleted file mode 100644 index 55a3b8e5..00000000 --- a/platforms/android/assets/www/lib/angular/bower.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "angular", - "version": "1.2.16", - "main": "./angular.js", - "dependencies": { - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/.bower.json b/platforms/android/assets/www/lib/bootstrap/.bower.json deleted file mode 100644 index 7192ff15..00000000 --- a/platforms/android/assets/www/lib/bootstrap/.bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "js", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "main": [ - "less/bootstrap.less", - "dist/css/bootstrap.css", - "dist/js/bootstrap.js", - "dist/fonts/glyphicons-halflings-regular.eot", - "dist/fonts/glyphicons-halflings-regular.svg", - "dist/fonts/glyphicons-halflings-regular.ttf", - "dist/fonts/glyphicons-halflings-regular.woff" - ], - "ignore": [ - ".*", - "_config.yml", - "CNAME", - "composer.json", - "CONTRIBUTING.md", - "docs", - "js/tests", - "test-infra" - ], - "dependencies": { - "jquery": ">= 1.9.0" - }, - "_release": "3.2.0", - "_resolution": { - "type": "version", - "tag": "v3.2.0", - "commit": "c068162161154a4b85110ea1e7dd3d7897ce2b72" - }, - "_source": "git://github.com/twbs/bootstrap.git", - "_target": "~3.2.0", - "_originalSource": "bootstrap" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/bootstrap/Gruntfile.js b/platforms/android/assets/www/lib/bootstrap/Gruntfile.js deleted file mode 100644 index 66e1de36..00000000 --- a/platforms/android/assets/www/lib/bootstrap/Gruntfile.js +++ /dev/null @@ -1,480 +0,0 @@ -/*! - * Bootstrap's Gruntfile - * http://getbootstrap.com - * Copyright 2013-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -module.exports = function (grunt) { - 'use strict'; - - // Force use of Unix newlines - grunt.util.linefeed = '\n'; - - RegExp.quote = function (string) { - return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); - }; - - var fs = require('fs'); - var path = require('path'); - var npmShrinkwrap = require('npm-shrinkwrap'); - var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); - var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); - var generateRawFiles = require('./grunt/bs-raw-files-generator.js'); - - // Project configuration. - grunt.initConfig({ - - // Metadata. - pkg: grunt.file.readJSON('package.json'), - banner: '/*!\n' + - ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + - ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + - ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + - ' */\n', - // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too. - jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n', - - // Task configuration. - clean: { - dist: ['dist', 'docs/dist'] - }, - - jshint: { - options: { - jshintrc: 'js/.jshintrc' - }, - grunt: { - options: { - jshintrc: 'grunt/.jshintrc' - }, - src: ['Gruntfile.js', 'grunt/*.js'] - }, - src: { - src: 'js/*.js' - }, - test: { - options: { - jshintrc: 'js/tests/unit/.jshintrc' - }, - src: 'js/tests/unit/*.js' - }, - assets: { - src: ['docs/assets/js/_src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js'] - } - }, - - jscs: { - options: { - config: 'js/.jscsrc' - }, - grunt: { - src: '<%= jshint.grunt.src %>' - }, - src: { - src: '<%= jshint.src.src %>' - }, - test: { - src: '<%= jshint.test.src %>' - }, - assets: { - options: { - requireCamelCaseOrUpperCaseIdentifiers: null - }, - src: '<%= jshint.assets.src %>' - } - }, - - concat: { - options: { - banner: '<%= banner %>\n<%= jqueryCheck %>', - stripBanners: false - }, - bootstrap: { - src: [ - 'js/transition.js', - 'js/alert.js', - 'js/button.js', - 'js/carousel.js', - 'js/collapse.js', - 'js/dropdown.js', - 'js/modal.js', - 'js/tooltip.js', - 'js/popover.js', - 'js/scrollspy.js', - 'js/tab.js', - 'js/affix.js' - ], - dest: 'dist/js/<%= pkg.name %>.js' - } - }, - - uglify: { - options: { - preserveComments: 'some' - }, - bootstrap: { - src: '<%= concat.bootstrap.dest %>', - dest: 'dist/js/<%= pkg.name %>.min.js' - }, - customize: { - src: [ - 'docs/assets/js/_vendor/less.min.js', - 'docs/assets/js/_vendor/jszip.min.js', - 'docs/assets/js/_vendor/uglify.min.js', - 'docs/assets/js/_vendor/blob.js', - 'docs/assets/js/_vendor/filesaver.js', - 'docs/assets/js/raw-files.min.js', - 'docs/assets/js/_src/customizer.js' - ], - dest: 'docs/assets/js/customize.min.js' - }, - docsJs: { - src: [ - 'docs/assets/js/_vendor/holder.js', - 'docs/assets/js/_vendor/ZeroClipboard.min.js', - 'docs/assets/js/_src/application.js' - ], - dest: 'docs/assets/js/docs.min.js' - } - }, - - qunit: { - options: { - inject: 'js/tests/unit/phantom.js' - }, - files: 'js/tests/index.html' - }, - - less: { - compileCore: { - options: { - strictMath: true, - sourceMap: true, - outputSourceFiles: true, - sourceMapURL: '<%= pkg.name %>.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' - }, - files: { - 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less' - } - }, - compileTheme: { - options: { - strictMath: true, - sourceMap: true, - outputSourceFiles: true, - sourceMapURL: '<%= pkg.name %>-theme.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' - }, - files: { - 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less' - } - } - }, - - autoprefixer: { - options: { - browsers: [ - 'Android 2.3', - 'Android >= 4', - 'Chrome >= 20', - 'Firefox >= 24', // Firefox 24 is the latest ESR - 'Explorer >= 8', - 'iOS >= 6', - 'Opera >= 12', - 'Safari >= 6' - ] - }, - core: { - options: { - map: true - }, - src: 'dist/css/<%= pkg.name %>.css' - }, - theme: { - options: { - map: true - }, - src: 'dist/css/<%= pkg.name %>-theme.css' - }, - docs: { - src: 'docs/assets/css/_src/docs.css' - }, - examples: { - expand: true, - cwd: 'docs/examples/', - src: ['**/*.css'], - dest: 'docs/examples/' - } - }, - - csslint: { - options: { - csslintrc: 'less/.csslintrc' - }, - src: [ - 'dist/css/bootstrap.css', - 'dist/css/bootstrap-theme.css' - ], - examples: [ - 'docs/examples/**/*.css' - ], - docs: { - options: { - ids: false, - 'overqualified-elements': false - }, - src: 'docs/assets/css/_src/docs.css' - } - }, - - cssmin: { - options: { - compatibility: 'ie8', - keepSpecialComments: '*', - noAdvanced: true - }, - core: { - files: { - 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', - 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' - } - }, - docs: { - src: [ - 'docs/assets/css/_src/docs.css', - 'docs/assets/css/_src/pygments-manni.css' - ], - dest: 'docs/assets/css/docs.min.css' - } - }, - - usebanner: { - options: { - position: 'top', - banner: '<%= banner %>' - }, - files: { - src: 'dist/css/*.css' - } - }, - - csscomb: { - options: { - config: 'less/.csscomb.json' - }, - dist: { - expand: true, - cwd: 'dist/css/', - src: ['*.css', '!*.min.css'], - dest: 'dist/css/' - }, - examples: { - expand: true, - cwd: 'docs/examples/', - src: '**/*.css', - dest: 'docs/examples/' - }, - docs: { - files: { - 'docs/assets/css/_src/docs.css': 'docs/assets/css/_src/docs.css' - } - } - }, - - copy: { - fonts: { - expand: true, - src: 'fonts/*', - dest: 'dist/' - }, - docs: { - expand: true, - cwd: './dist', - src: [ - '{css,js}/*.min.*', - 'css/*.map', - 'fonts/*' - ], - dest: 'docs/dist' - } - }, - - connect: { - server: { - options: { - port: 3000, - base: '.' - } - } - }, - - jekyll: { - docs: {} - }, - - jade: { - compile: { - options: { - pretty: true, - data: function () { - var filePath = path.join(__dirname, 'less/variables.less'); - var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); - var parser = new BsLessdocParser(fileContent); - return { sections: parser.parseFile() }; - } - }, - files: { - 'docs/_includes/customizer-variables.html': 'docs/_jade/customizer-variables.jade', - 'docs/_includes/nav/customize.html': 'docs/_jade/customizer-nav.jade' - } - } - }, - - validation: { - options: { - charset: 'utf-8', - doctype: 'HTML5', - failHard: true, - reset: true, - relaxerror: [ - 'Bad value X-UA-Compatible for attribute http-equiv on element meta.', - 'Element img is missing required attribute src.' - ] - }, - files: { - src: '_gh_pages/**/*.html' - } - }, - - watch: { - src: { - files: '<%= jshint.src.src %>', - tasks: ['jshint:src', 'qunit'] - }, - test: { - files: '<%= jshint.test.src %>', - tasks: ['jshint:test', 'qunit'] - }, - less: { - files: 'less/*.less', - tasks: 'less' - } - }, - - sed: { - versionNumber: { - pattern: (function () { - var old = grunt.option('oldver'); - return old ? RegExp.quote(old) : old; - })(), - replacement: grunt.option('newver'), - recursive: true - } - }, - - 'saucelabs-qunit': { - all: { - options: { - build: process.env.TRAVIS_JOB_ID, - concurrency: 10, - maxRetries: 3, - urls: ['http://127.0.0.1:3000/js/tests/index.html'], - browsers: grunt.file.readYAML('grunt/sauce_browsers.yml') - } - } - }, - - exec: { - npmUpdate: { - command: 'npm update' - } - } - }); - - - // These plugins provide necessary tasks. - require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); - require('time-grunt')(grunt); - - // Docs HTML validation task - grunt.registerTask('validate-html', ['jekyll', 'validation']); - - var runSubset = function (subset) { - return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; - }; - var isUndefOrNonZero = function (val) { - return val === undefined || val !== '0'; - }; - - // Test task. - var testSubtasks = []; - // Skip core tests if running a different subset of the test suite - if (runSubset('core')) { - testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']); - } - // Skip HTML validation if running a different subset of the test suite - if (runSubset('validate-html') && - // Skip HTML5 validator on Travis when [skip validator] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) { - testSubtasks.push('validate-html'); - } - // Only run Sauce Labs tests if there's a Sauce access key - if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' && - // Skip Sauce if running a different subset of the test suite - runSubset('sauce-js-unit') && - // Skip Sauce on Travis when [skip sauce] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) { - testSubtasks.push('connect'); - testSubtasks.push('saucelabs-qunit'); - } - grunt.registerTask('test', testSubtasks); - - // JS distribution task. - grunt.registerTask('dist-js', ['concat', 'uglify']); - - // CSS distribution task. - grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']); - grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'usebanner', 'csscomb', 'cssmin']); - - // Docs distribution task. - grunt.registerTask('dist-docs', 'copy:docs'); - - // Full distribution task. - grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']); - - // Default task. - grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer']); - - // Version numbering task. - // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z - // This can be overzealous, so its changes should always be manually reviewed! - grunt.registerTask('change-version-number', 'sed'); - - grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); }); - - // task for building customizer - grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']); - grunt.registerTask('build-customizer-html', 'jade'); - grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { - var banner = grunt.template.process('<%= banner %>'); - generateRawFiles(grunt, banner); - }); - - // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json). - // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change. - grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']); - grunt.registerTask('_update-shrinkwrap', function () { - var done = this.async(); - npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) { - if (err) { - grunt.fail.warn(err) - } - var dest = 'test-infra/npm-shrinkwrap.json'; - fs.renameSync('npm-shrinkwrap.json', dest); - grunt.log.writeln('File ' + dest.cyan + ' updated.'); - done(); - }); - }); -}; diff --git a/platforms/android/assets/www/lib/bootstrap/LICENSE b/platforms/android/assets/www/lib/bootstrap/LICENSE deleted file mode 100644 index 8d94aa9a..00000000 --- a/platforms/android/assets/www/lib/bootstrap/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2014 Twitter, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/bootstrap/README.md b/platforms/android/assets/www/lib/bootstrap/README.md deleted file mode 100644 index 82c4a17b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# [Bootstrap](http://getbootstrap.com) -[![Bower version](https://badge.fury.io/bo/bootstrap.svg)](http://badge.fury.io/bo/bootstrap) -[![NPM version](https://badge.fury.io/js/bootstrap.svg)](http://badge.fury.io/js/bootstrap) -[![Build Status](https://secure.travis-ci.org/twbs/bootstrap.svg?branch=master)](http://travis-ci.org/twbs/bootstrap) -[![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) -[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) - -Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community. - -To get started, check out <http://getbootstrap.com>! - -## Table of contents - - - [Quick start](#quick-start) - - [Bugs and feature requests](#bugs-and-feature-requests) - - [Documentation](#documentation) - - [Contributing](#contributing) - - [Community](#community) - - [Versioning](#versioning) - - [Creators](#creators) - - [Copyright and license](#copyright-and-license) - -## Quick start - -Three quick start options are available: - -- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.2.0.zip). -- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. -- Install with [Bower](http://bower.io): `bower install bootstrap`. - -Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. - -### What's included - -Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: - -``` -bootstrap/ -├── css/ -│ ├── bootstrap.css -│ ├── bootstrap.min.css -│ ├── bootstrap-theme.css -│ └── bootstrap-theme.min.css -├── js/ -│ ├── bootstrap.js -│ └── bootstrap.min.js -└── fonts/ - ├── glyphicons-halflings-regular.eot - ├── glyphicons-halflings-regular.svg - ├── glyphicons-halflings-regular.ttf - └── glyphicons-halflings-regular.woff -``` - -We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). Fonts from Glyphicons are included, as is the optional Bootstrap theme. - - - -## Bugs and feature requests - -Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). - - -## Documentation - -Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally. - -### Running documentation locally - -1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.0.x). - - **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. We use Pygments for syntax highlighting, so make sure to read the sections on installing Python and Pygments. -2. From the root `/bootstrap` directory, run `jekyll serve` in the command line. -3. Open <http://localhost:9001> in your browser, and voilà. - -Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). - -### Documentation for previous releases - -Documentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3. - -[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. - - - -## Contributing - -Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. - -Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). - -Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>. - - - -## Community - -Keep track of development and community news. - -- Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). -- Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). -- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. -- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). - - - -## Versioning - -For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. - - - -## Creators - -**Mark Otto** - -- <http://twitter.com/mdo> -- <http://github.com/mdo> - -**Jacob Thornton** - -- <http://twitter.com/fat> -- <http://github.com/fat> - - - -## Copyright and license - -Code and documentation copyright 2011-2014 Twitter, Inc. Code released under [the MIT license](LICENSE). Docs released under [Creative Commons](docs/LICENSE). diff --git a/platforms/android/assets/www/lib/bootstrap/bower.json b/platforms/android/assets/www/lib/bootstrap/bower.json deleted file mode 100644 index eaf768a7..00000000 --- a/platforms/android/assets/www/lib/bootstrap/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "js", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "main": [ - "less/bootstrap.less", - "dist/css/bootstrap.css", - "dist/js/bootstrap.js", - "dist/fonts/glyphicons-halflings-regular.eot", - "dist/fonts/glyphicons-halflings-regular.svg", - "dist/fonts/glyphicons-halflings-regular.ttf", - "dist/fonts/glyphicons-halflings-regular.woff" - ], - "ignore": [ - ".*", - "_config.yml", - "CNAME", - "composer.json", - "CONTRIBUTING.md", - "docs", - "js/tests", - "test-infra" - ], - "dependencies": { - "jquery": ">= 1.9.0" - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20335 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 diff --git a/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index e3e2dc73..00000000 --- a/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > -<font-face units-per-em="1200" ascent="960" descent="-240" /> -<missing-glyph horiz-adv-x="500" /> -<glyph /> -<glyph /> -<glyph unicode="&#xd;" /> -<glyph unicode=" " /> -<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> -<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> -<glyph unicode="&#xa0;" /> -<glyph unicode="&#x2000;" horiz-adv-x="652" /> -<glyph unicode="&#x2001;" horiz-adv-x="1304" /> -<glyph unicode="&#x2002;" horiz-adv-x="652" /> -<glyph unicode="&#x2003;" horiz-adv-x="1304" /> -<glyph unicode="&#x2004;" horiz-adv-x="434" /> -<glyph unicode="&#x2005;" horiz-adv-x="326" /> -<glyph unicode="&#x2006;" horiz-adv-x="217" /> -<glyph unicode="&#x2007;" horiz-adv-x="217" /> -<glyph unicode="&#x2008;" horiz-adv-x="163" /> -<glyph unicode="&#x2009;" horiz-adv-x="260" /> -<glyph unicode="&#x200a;" horiz-adv-x="72" /> -<glyph unicode="&#x202f;" horiz-adv-x="260" /> -<glyph unicode="&#x205f;" horiz-adv-x="326" /> -<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> -<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" /> -<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" /> -<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" /> -<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> -<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> -<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> -<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> -<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> -<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> -<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" /> -<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> -<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> -<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> -<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> -<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> -<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> -<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> -<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> -<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> -<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> -<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> -<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> -<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> -<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" /> -<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> -<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> -<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" /> -<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" /> -<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> -<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" /> -<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> -<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> -<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> -<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> -<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> -<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> -<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> -<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> -<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> -<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> -<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> -<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> -<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> -<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> -<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> -<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> -<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> -<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" /> -<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> -<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> -<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> -<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> -<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> -<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> -<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> -<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" /> -<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" /> -<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> -<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" /> -<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> -<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" /> -<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> -<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> -<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" /> -<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> -<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> -<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> -<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> -<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> -<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> -<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" /> -<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" /> -<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> -<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" /> -<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" /> -<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> -<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" /> -<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" /> -<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" /> -<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" /> -<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" /> -<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" /> -<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" /> -<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> -<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> -<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" /> -<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" /> -<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> -<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" /> -<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> -<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> -<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> -<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> -<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> -<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> -<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> -<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> -<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> -<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> -<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> -<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> -<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" /> -<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" /> -<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" /> -<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> -<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> -<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> -<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> -<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> -<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> -<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> -<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> -<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" /> -<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" /> -<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" /> -<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" /> -<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" /> -<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> -<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" /> -<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" /> -<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" /> -<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" /> -<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" /> -<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> -<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> -<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> -<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> -<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> -<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" /> -<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" /> -<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" /> -<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> -<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> -<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> -<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> -<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> -<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> -<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> -<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> -<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> -<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> -<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> -<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> -<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> -<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> -<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> -<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> -<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" /> -<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" /> -<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " /> -<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" /> -<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" /> -<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" /> -<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" /> -<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" /> -<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" /> -<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" /> -<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" /> -<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" /> -<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" /> -<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" /> -<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" /> -<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" /> -<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" /> -<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" /> -<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" /> -<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" /> -<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> -<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> -<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" /> -<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" /> -<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" /> -<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> -<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> -<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" /> -<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" /> -<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" /> -<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" /> -<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" /> -<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> -<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 67fa00bf83801d2fa568546b982c80d27f6ef74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41280 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 diff --git a/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/platforms/android/assets/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23320 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 diff --git a/platforms/android/assets/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js b/platforms/android/assets/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js deleted file mode 100644 index 82dc727b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * Bootstrap Grunt task for Glyphicons data generation - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -'use strict'; -var fs = require('fs'); - -module.exports = function generateGlyphiconsData(grunt) { - // Pass encoding, utf8, so `readFileSync` will return a string instead of a - // buffer - var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); - var glyphiconsLines = glyphiconsFile.split('\n'); - - // Use any line that starts with ".glyphicon-" and capture the class name - var iconClassName = /^\.(glyphicon-[^\s]+)/; - var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + - '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; - var glyphiconsYml = 'docs/_data/glyphicons.yml'; - for (var i = 0, len = glyphiconsLines.length; i < len; i++) { - var match = glyphiconsLines[i].match(iconClassName); - - if (match !== null) { - glyphiconsData += '- ' + match[1] + '\n'; - } - } - - // Create the `_data` directory if it doesn't already exist - if (!fs.existsSync('docs/_data')) { - fs.mkdirSync('docs/_data'); - } - - try { - fs.writeFileSync(glyphiconsYml, glyphiconsData); - } - catch (err) { - grunt.fail.warn(err); - } - grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); -}; diff --git a/platforms/android/assets/www/lib/bootstrap/grunt/bs-lessdoc-parser.js b/platforms/android/assets/www/lib/bootstrap/grunt/bs-lessdoc-parser.js deleted file mode 100644 index c1821de1..00000000 --- a/platforms/android/assets/www/lib/bootstrap/grunt/bs-lessdoc-parser.js +++ /dev/null @@ -1,236 +0,0 @@ -/*! - * Bootstrap Grunt task for parsing Less docstrings - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -'use strict'; - -var markdown = require('markdown').markdown; - -function markdown2html(markdownString) { - // the slice removes the <p>...</p> wrapper output by Markdown processor - return markdown.toHTML(markdownString.trim()).slice(3, -4); -} - - -/* -Mini-language: - //== This is a normal heading, which starts a section. Sections group variables together. - //## Optional description for the heading - - //=== This is a subheading. - - //** Optional description for the following variable. You **can** use Markdown in descriptions to discuss `<html>` stuff. - @foo: #fff; - - //-- This is a heading for a section whose variables shouldn't be customizable - - All other lines are ignored completely. -*/ - - -var CUSTOMIZABLE_HEADING = /^[/]{2}={2}(.*)$/; -var UNCUSTOMIZABLE_HEADING = /^[/]{2}-{2}(.*)$/; -var SUBSECTION_HEADING = /^[/]{2}={3}(.*)$/; -var SECTION_DOCSTRING = /^[/]{2}#{2}(.*)$/; -var VAR_ASSIGNMENT = /^(@[a-zA-Z0-9_-]+):[ ]*([^ ;][^;]+);[ ]*$/; -var VAR_DOCSTRING = /^[/]{2}[*]{2}(.*)$/; - -function Section(heading, customizable) { - this.heading = heading.trim(); - this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); - this.customizable = customizable; - this.docstring = null; - this.subsections = []; -} - -Section.prototype.addSubSection = function (subsection) { - this.subsections.push(subsection); -}; - -function SubSection(heading) { - this.heading = heading.trim(); - this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); - this.variables = []; -} - -SubSection.prototype.addVar = function (variable) { - this.variables.push(variable); -}; - -function VarDocstring(markdownString) { - this.html = markdown2html(markdownString); -} - -function SectionDocstring(markdownString) { - this.html = markdown2html(markdownString); -} - -function Variable(name, defaultValue) { - this.name = name; - this.defaultValue = defaultValue; - this.docstring = null; -} - -function Tokenizer(fileContent) { - this._lines = fileContent.split('\n'); - this._next = undefined; -} - -Tokenizer.prototype.unshift = function (token) { - if (this._next !== undefined) { - throw new Error('Attempted to unshift twice!'); - } - this._next = token; -}; - -Tokenizer.prototype._shift = function () { - // returning null signals EOF - // returning undefined means the line was ignored - if (this._next !== undefined) { - var result = this._next; - this._next = undefined; - return result; - } - if (this._lines.length <= 0) { - return null; - } - var line = this._lines.shift(); - var match = null; - match = SUBSECTION_HEADING.exec(line); - if (match !== null) { - return new SubSection(match[1]); - } - match = CUSTOMIZABLE_HEADING.exec(line); - if (match !== null) { - return new Section(match[1], true); - } - match = UNCUSTOMIZABLE_HEADING.exec(line); - if (match !== null) { - return new Section(match[1], false); - } - match = SECTION_DOCSTRING.exec(line); - if (match !== null) { - return new SectionDocstring(match[1]); - } - match = VAR_DOCSTRING.exec(line); - if (match !== null) { - return new VarDocstring(match[1]); - } - var commentStart = line.lastIndexOf('//'); - var varLine = (commentStart === -1) ? line : line.slice(0, commentStart); - match = VAR_ASSIGNMENT.exec(varLine); - if (match !== null) { - return new Variable(match[1], match[2]); - } - return undefined; -}; - -Tokenizer.prototype.shift = function () { - while (true) { - var result = this._shift(); - if (result === undefined) { - continue; - } - return result; - } -}; - -function Parser(fileContent) { - this._tokenizer = new Tokenizer(fileContent); -} - -Parser.prototype.parseFile = function () { - var sections = []; - while (true) { - var section = this.parseSection(); - if (section === null) { - if (this._tokenizer.shift() !== null) { - throw new Error('Unexpected unparsed section of file remains!'); - } - return sections; - } - sections.push(section); - } -}; - -Parser.prototype.parseSection = function () { - var section = this._tokenizer.shift(); - if (section === null) { - return null; - } - if (!(section instanceof Section)) { - throw new Error('Expected section heading; got: ' + JSON.stringify(section)); - } - var docstring = this._tokenizer.shift(); - if (docstring instanceof SectionDocstring) { - section.docstring = docstring; - } - else { - this._tokenizer.unshift(docstring); - } - this.parseSubSections(section); - - return section; -}; - -Parser.prototype.parseSubSections = function (section) { - while (true) { - var subsection = this.parseSubSection(); - if (subsection === null) { - if (section.subsections.length === 0) { - // Presume an implicit initial subsection - subsection = new SubSection(''); - this.parseVars(subsection); - } - else { - break; - } - } - section.addSubSection(subsection); - } - - if (section.subsections.length === 1 && !(section.subsections[0].heading) && section.subsections[0].variables.length === 0) { - // Ignore lone empty implicit subsection - section.subsections = []; - } -}; - -Parser.prototype.parseSubSection = function () { - var subsection = this._tokenizer.shift(); - if (subsection instanceof SubSection) { - this.parseVars(subsection); - return subsection; - } - this._tokenizer.unshift(subsection); - return null; -}; - -Parser.prototype.parseVars = function (subsection) { - while (true) { - var variable = this.parseVar(); - if (variable === null) { - return; - } - subsection.addVar(variable); - } -}; - -Parser.prototype.parseVar = function () { - var docstring = this._tokenizer.shift(); - if (!(docstring instanceof VarDocstring)) { - this._tokenizer.unshift(docstring); - docstring = null; - } - var variable = this._tokenizer.shift(); - if (variable instanceof Variable) { - variable.docstring = docstring; - return variable; - } - this._tokenizer.unshift(variable); - return null; -}; - - -module.exports = Parser; diff --git a/platforms/android/assets/www/lib/bootstrap/grunt/bs-raw-files-generator.js b/platforms/android/assets/www/lib/bootstrap/grunt/bs-raw-files-generator.js deleted file mode 100644 index ec8c5314..00000000 --- a/platforms/android/assets/www/lib/bootstrap/grunt/bs-raw-files-generator.js +++ /dev/null @@ -1,46 +0,0 @@ -/*! - * Bootstrap Grunt task for generating raw-files.min.js for the Customizer - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/* global btoa: true */ - -'use strict'; -var fs = require('fs'); -var btoa = require('btoa'); -var glob = require('glob'); - -function getFiles(type) { - var files = {}; - var recursive = (type === 'less'); - var globExpr = (recursive ? '/**/*' : '/*'); - glob.sync(type + globExpr) - .filter(function (path) { - return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); - }) - .forEach(function (fullPath) { - var relativePath = fullPath.replace(/^[^/]+\//, ''); - files[relativePath] = (type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8')); - }); - return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; -} - -module.exports = function generateRawFilesJs(grunt, banner) { - if (!banner) { - banner = ''; - } - var dirs = ['js', 'less', 'fonts']; - var files = banner + dirs.map(getFiles).reduce(function (combined, file) { - return combined + file; - }, ''); - var rawFilesJs = 'docs/assets/js/raw-files.min.js'; - try { - fs.writeFileSync(rawFilesJs, files); - } - catch (err) { - grunt.fail.warn(err); - } - grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); -}; diff --git a/platforms/android/assets/www/lib/bootstrap/grunt/sauce_browsers.yml b/platforms/android/assets/www/lib/bootstrap/grunt/sauce_browsers.yml deleted file mode 100644 index 8014bfcb..00000000 --- a/platforms/android/assets/www/lib/bootstrap/grunt/sauce_browsers.yml +++ /dev/null @@ -1,82 +0,0 @@ -[ - # Docs: https://saucelabs.com/docs/platforms/webdriver - - { - browserName: "safari", - platform: "OS X 10.9" - }, - { - browserName: "chrome", - platform: "OS X 10.9" - }, - { - browserName: "firefox", - platform: "OS X 10.9" - }, - - # Mac Opera not currently supported by Sauce Labs - - { - browserName: "internet explorer", - version: "11", - platform: "Windows 8.1" - }, - { - browserName: "internet explorer", - version: "10", - platform: "Windows 8" - }, - { - browserName: "internet explorer", - version: "9", - platform: "Windows 7" - }, - { - browserName: "internet explorer", - version: "8", - platform: "Windows 7" - }, - - # { # Unofficial - # browserName: "internet explorer", - # version: "7", - # platform: "Windows XP" - # }, - - { - browserName: "chrome", - platform: "Windows 8.1" - }, - { - browserName: "firefox", - platform: "Windows 8.1" - }, - - # Win Opera 15+ not currently supported by Sauce Labs - - { - browserName: "iphone", - platform: "OS X 10.9", - version: "7.1" - }, - - # iOS Chrome not currently supported by Sauce Labs - - # Linux (unofficial) - { - browserName: "chrome", - platform: "Linux" - }, - { - browserName: "firefox", - platform: "Linux" - } - - # Android Chrome not currently supported by Sauce Labs - - # { # Android Browser (super-unofficial) - # browserName: "android", - # version: "4.0", - # platform: "Linux" - # } -] diff --git a/platforms/android/assets/www/lib/bootstrap/js/affix.js b/platforms/android/assets/www/lib/bootstrap/js/affix.js deleted file mode 100644 index 7d404ebe..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/affix.js +++ /dev/null @@ -1,142 +0,0 @@ -/* ======================================================================== - * Bootstrap: affix.js v3.2.0 - * http://getbootstrap.com/javascript/#affix - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - - this.$target = $(this.options.target) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = - this.unpin = - this.pinnedOffset = null - - this.checkPosition() - } - - Affix.VERSION = '3.2.0' - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0, - target: window - } - - Affix.prototype.getPinnedOffset = function () { - if (this.pinnedOffset) return this.pinnedOffset - this.$element.removeClass(Affix.RESET).addClass('affix') - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - return (this.pinnedOffset = position.top - scrollTop) - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) - - var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : - offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : - offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false - - if (this.affixed === affix) return - if (this.unpin != null) this.$element.css('top', '') - - var affixType = 'affix' + (affix ? '-' + affix : '') - var e = $.Event(affixType + '.bs.affix') - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null - - this.$element - .removeClass(Affix.RESET) - .addClass(affixType) - .trigger($.Event(affixType.replace('affix', 'affixed'))) - - if (affix == 'bottom') { - this.$element.offset({ - top: scrollHeight - this.$element.height() - offsetBottom - }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.affix - - $.fn.affix = Plugin - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom) data.offset.bottom = data.offsetBottom - if (data.offsetTop) data.offset.top = data.offsetTop - - Plugin.call($spy, data) - }) - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/alert.js b/platforms/android/assets/www/lib/bootstrap/js/alert.js deleted file mode 100644 index 0efd92cb..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/alert.js +++ /dev/null @@ -1,92 +0,0 @@ -/* ======================================================================== - * Bootstrap: alert.js v3.2.0 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.VERSION = '3.2.0' - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - // detach from parent, fire event then clean up data - $parent.detach().trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one('bsTransitionEnd', removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.alert - - $.fn.alert = Plugin - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/button.js b/platforms/android/assets/www/lib/bootstrap/js/button.js deleted file mode 100644 index dc3164f8..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/button.js +++ /dev/null @@ -1,110 +0,0 @@ -/* ======================================================================== - * Bootstrap: button.js v3.2.0 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.VERSION = '3.2.0' - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (data.resetText == null) $el.data('resetText', $el[val]()) - - $el[val](data[state] == null ? this.options[state] : data[state]) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') - } - - if (changed) this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - var old = $.fn.button - - $.fn.button = Plugin - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - Plugin.call($btn, 'toggle') - e.preventDefault() - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/carousel.js b/platforms/android/assets/www/lib/bootstrap/js/carousel.js deleted file mode 100644 index b7da1ba5..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/carousel.js +++ /dev/null @@ -1,223 +0,0 @@ -/* ======================================================================== - * Bootstrap: carousel.js v3.2.0 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) - .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) - } - - Carousel.VERSION = '3.2.0' - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true - } - - Carousel.prototype.keydown = function (e) { - switch (e.which) { - case 37: this.prev(); break - case 39: this.next(); break - default: return - } - - e.preventDefault() - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getItemIndex = function (item) { - this.$items = item.parent().children('.item') - return this.$items.index(item || this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return (this.sliding = false) - - var relatedTarget = $next[0] - var slideEvent = $.Event('slide.bs.carousel', { - relatedTarget: relatedTarget, - direction: direction - }) - this.$element.trigger(slideEvent) - if (slideEvent.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) - $nextIndicator && $nextIndicator.addClass('active') - } - - var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one('bsTransitionEnd', function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { - that.$element.trigger(slidEvent) - }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger(slidEvent) - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - var old = $.fn.carousel - - $.fn.carousel = Plugin - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var href - var $this = $(this) - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 - if (!$target.hasClass('carousel')) return - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - Plugin.call($target, options) - - if (slideIndex) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - Plugin.call($carousel, $carousel.data()) - }) - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/collapse.js b/platforms/android/assets/www/lib/bootstrap/js/collapse.js deleted file mode 100644 index e4e6d793..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/collapse.js +++ /dev/null @@ -1,170 +0,0 @@ -/* ======================================================================== - * Bootstrap: collapse.js v3.2.0 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.VERSION = '3.2.0' - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - Plugin.call(actives, 'hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing')[dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in')[dimension]('') - this.transitioning = 0 - this.$element - .trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element[dimension](this.$element[dimension]())[0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.collapse - - $.fn.collapse = Plugin - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { - var href - var $this = $(this) - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - Plugin.call($target, option) - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/dropdown.js b/platforms/android/assets/www/lib/bootstrap/js/dropdown.js deleted file mode 100644 index 88f118c2..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/dropdown.js +++ /dev/null @@ -1,151 +0,0 @@ -/* ======================================================================== - * Bootstrap: dropdown.js v3.2.0 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle="dropdown"]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.VERSION = '3.2.0' - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) - } - - var relatedTarget = { relatedTarget: this } - $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this.trigger('focus') - - $parent - .toggleClass('open') - .trigger('shown.bs.dropdown', relatedTarget) - } - - return false - } - - Dropdown.prototype.keydown = function (e) { - if (!/(38|40|27)/.test(e.keyCode)) return - - var $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).trigger('focus') - return $this.trigger('click') - } - - var desc = ' li:not(.divider):visible a' - var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) - - if (!$items.length) return - - var index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items.eq(index).trigger('focus') - } - - function clearMenus(e) { - if (e && e.which === 3) return - $(backdrop).remove() - $(toggle).each(function () { - var $parent = getParent($(this)) - var relatedTarget = { relatedTarget: this } - if (!$parent.hasClass('open')) return - $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) - if (e.isDefaultPrevented()) return - $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = selector && $(selector) - - return $parent && $parent.length ? $parent : $this.parent() - } - - - // DROPDOWN PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.dropdown') - - if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.dropdown - - $.fn.dropdown = Plugin - $.fn.dropdown.Constructor = Dropdown - - - // DROPDOWN NO CONFLICT - // ==================== - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - // APPLY TO STANDARD DROPDOWN ELEMENTS - // =================================== - - $(document) - .on('click.bs.dropdown.data-api', clearMenus) - .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) - .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/modal.js b/platforms/android/assets/www/lib/bootstrap/js/modal.js deleted file mode 100644 index 29eedf11..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/modal.js +++ /dev/null @@ -1,280 +0,0 @@ -/* ======================================================================== - * Bootstrap: modal.js v3.2.0 - * http://getbootstrap.com/javascript/#modals - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // MODAL CLASS DEFINITION - // ====================== - - var Modal = function (element, options) { - this.options = options - this.$body = $(document.body) - this.$element = $(element) - this.$backdrop = - this.isShown = null - this.scrollbarWidth = 0 - - if (this.options.remote) { - this.$element - .find('.modal-content') - .load(this.options.remote, $.proxy(function () { - this.$element.trigger('loaded.bs.modal') - }, this)) - } - } - - Modal.VERSION = '3.2.0' - - Modal.DEFAULTS = { - backdrop: true, - keyboard: true, - show: true - } - - Modal.prototype.toggle = function (_relatedTarget) { - return this.isShown ? this.hide() : this.show(_relatedTarget) - } - - Modal.prototype.show = function (_relatedTarget) { - var that = this - var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.checkScrollbar() - this.$body.addClass('modal-open') - - this.setScrollbar() - this.escape() - - this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(that.$body) // don't move modals dom position - } - - that.$element - .show() - .scrollTop(0) - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) - - transition ? - that.$element.find('.modal-dialog') // wait for modal to slide in - .one('bsTransitionEnd', function () { - that.$element.trigger('focus').trigger(e) - }) - .emulateTransitionEnd(300) : - that.$element.trigger('focus').trigger(e) - }) - } - - Modal.prototype.hide = function (e) { - if (e) e.preventDefault() - - e = $.Event('hide.bs.modal') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.$body.removeClass('modal-open') - - this.resetScrollbar() - this.escape() - - $(document).off('focusin.bs.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - .off('click.dismiss.bs.modal') - - $.support.transition && this.$element.hasClass('fade') ? - this.$element - .one('bsTransitionEnd', $.proxy(this.hideModal, this)) - .emulateTransitionEnd(300) : - this.hideModal() - } - - Modal.prototype.enforceFocus = function () { - $(document) - .off('focusin.bs.modal') // guard against infinite focus loop - .on('focusin.bs.modal', $.proxy(function (e) { - if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { - this.$element.trigger('focus') - } - }, this)) - } - - Modal.prototype.escape = function () { - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { - e.which == 27 && this.hide() - }, this)) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.bs.modal') - } - } - - Modal.prototype.hideModal = function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.$element.trigger('hidden.bs.modal') - }) - } - - Modal.prototype.removeBackdrop = function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - Modal.prototype.backdrop = function (callback) { - var that = this - var animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(this.$body) - - this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { - if (e.target !== e.currentTarget) return - this.options.backdrop == 'static' - ? this.$element[0].focus.call(this.$element[0]) - : this.hide.call(this) - }, this)) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop - .one('bsTransitionEnd', callback) - .emulateTransitionEnd(150) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - var callbackRemove = function () { - that.removeBackdrop() - callback && callback() - } - $.support.transition && this.$element.hasClass('fade') ? - this.$backdrop - .one('bsTransitionEnd', callbackRemove) - .emulateTransitionEnd(150) : - callbackRemove() - - } else if (callback) { - callback() - } - } - - Modal.prototype.checkScrollbar = function () { - if (document.body.clientWidth >= window.innerWidth) return - this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar() - } - - Modal.prototype.setScrollbar = function () { - var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) - if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) - } - - Modal.prototype.resetScrollbar = function () { - this.$body.css('padding-right', '') - } - - Modal.prototype.measureScrollbar = function () { // thx walsh - var scrollDiv = document.createElement('div') - scrollDiv.className = 'modal-scrollbar-measure' - this.$body.append(scrollDiv) - var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth - this.$body[0].removeChild(scrollDiv) - return scrollbarWidth - } - - - // MODAL PLUGIN DEFINITION - // ======================= - - function Plugin(option, _relatedTarget) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.modal') - var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option](_relatedTarget) - else if (options.show) data.show(_relatedTarget) - }) - } - - var old = $.fn.modal - - $.fn.modal = Plugin - $.fn.modal.Constructor = Modal - - - // MODAL NO CONFLICT - // ================= - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - // MODAL DATA-API - // ============== - - $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - var href = $this.attr('href') - var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 - var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) - - if ($this.is('a')) e.preventDefault() - - $target.one('show.bs.modal', function (showEvent) { - if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown - $target.one('hidden.bs.modal', function () { - $this.is(':visible') && $this.trigger('focus') - }) - }) - Plugin.call($target, option, this) - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/popover.js b/platforms/android/assets/www/lib/bootstrap/js/popover.js deleted file mode 100644 index 825e1b39..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/popover.js +++ /dev/null @@ -1,113 +0,0 @@ -/* ======================================================================== - * Bootstrap: popover.js v3.2.0 - * http://getbootstrap.com/javascript/#popovers - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // POPOVER PUBLIC CLASS DEFINITION - // =============================== - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') - - Popover.VERSION = '3.2.0' - - Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right', - trigger: 'click', - content: '', - template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover - - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS - } - - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events - this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' - ](content) - - $tip.removeClass('fade top bottom left right in') - - // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do - // this manually by checking the contents. - if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() - } - - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } - - Popover.prototype.getContent = function () { - var $e = this.$element - var o = this.options - - return $e.attr('data-content') - || (typeof o.content == 'function' ? - o.content.call($e[0]) : - o.content) - } - - Popover.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.arrow')) - } - - Popover.prototype.tip = function () { - if (!this.$tip) this.$tip = $(this.options.template) - return this.$tip - } - - - // POPOVER PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option - - if (!data && option == 'destroy') return - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.popover - - $.fn.popover = Plugin - $.fn.popover.Constructor = Popover - - - // POPOVER NO CONFLICT - // =================== - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/scrollspy.js b/platforms/android/assets/www/lib/bootstrap/js/scrollspy.js deleted file mode 100644 index db237878..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/scrollspy.js +++ /dev/null @@ -1,170 +0,0 @@ -/* ======================================================================== - * Bootstrap: scrollspy.js v3.2.0 - * http://getbootstrap.com/javascript/#scrollspy - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // SCROLLSPY CLASS DEFINITION - // ========================== - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - - this.$body = $('body') - this.$scrollElement = $(element).is('body') ? $(window) : $(element) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target || '') + ' .nav li > a' - this.offsets = [] - this.targets = [] - this.activeTarget = null - this.scrollHeight = 0 - - this.$scrollElement.on('scroll.bs.scrollspy', process) - this.refresh() - this.process() - } - - ScrollSpy.VERSION = '3.2.0' - - ScrollSpy.DEFAULTS = { - offset: 10 - } - - ScrollSpy.prototype.getScrollHeight = function () { - return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - } - - ScrollSpy.prototype.refresh = function () { - var offsetMethod = 'offset' - var offsetBase = 0 - - if (!$.isWindow(this.$scrollElement[0])) { - offsetMethod = 'position' - offsetBase = this.$scrollElement.scrollTop() - } - - this.offsets = [] - this.targets = [] - this.scrollHeight = this.getScrollHeight() - - var self = this - - this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#./.test(href) && $(href) - - return ($href - && $href.length - && $href.is(':visible') - && [[$href[offsetMethod]().top + offsetBase, href]]) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.getScrollHeight() - var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i - - if (this.scrollHeight != scrollHeight) { - this.refresh() - } - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) - } - - if (activeTarget && scrollTop <= offsets[0]) { - return activeTarget != (i = targets[0]) && this.activate(i) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate(targets[i]) - } - } - - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target - - $(this.selector) - .parentsUntil(this.options.target, '.active') - .removeClass('active') - - var selector = this.selector + - '[data-target="' + target + '"],' + - this.selector + '[href="' + target + '"]' - - var active = $(selector) - .parents('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active - .closest('li.dropdown') - .addClass('active') - } - - active.trigger('activate.bs.scrollspy') - } - - - // SCROLLSPY PLUGIN DEFINITION - // =========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.scrollspy - - $.fn.scrollspy = Plugin - $.fn.scrollspy.Constructor = ScrollSpy - - - // SCROLLSPY NO CONFLICT - // ===================== - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - // SCROLLSPY DATA-API - // ================== - - $(window).on('load.bs.scrollspy.data-api', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - Plugin.call($spy, $spy.data()) - }) - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/tab.js b/platforms/android/assets/www/lib/bootstrap/js/tab.js deleted file mode 100644 index c0e1e466..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/tab.js +++ /dev/null @@ -1,128 +0,0 @@ -/* ======================================================================== - * Bootstrap: tab.js v3.2.0 - * http://getbootstrap.com/javascript/#tabs - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TAB CLASS DEFINITION - // ==================== - - var Tab = function (element) { - this.element = $(element) - } - - Tab.VERSION = '3.2.0' - - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.data('target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - if ($this.parent('li').hasClass('active')) return - - var previous = $ul.find('.active:last a')[0] - var e = $.Event('show.bs.tab', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - var $target = $(selector) - - this.activate($this.closest('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown.bs.tab', - relatedTarget: previous - }) - }) - } - - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if (element.parent('.dropdown-menu')) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active - .one('bsTransitionEnd', next) - .emulateTransitionEnd(150) : - next() - - $active.removeClass('in') - } - - - // TAB PLUGIN DEFINITION - // ===================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') - - if (!data) $this.data('bs.tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tab - - $.fn.tab = Plugin - $.fn.tab.Constructor = Tab - - - // TAB NO CONFLICT - // =============== - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - // TAB DATA-API - // ============ - - $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - Plugin.call($(this), 'show') - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/tooltip.js b/platforms/android/assets/www/lib/bootstrap/js/tooltip.js deleted file mode 100644 index 9cdb6c9e..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/tooltip.js +++ /dev/null @@ -1,457 +0,0 @@ -/* ======================================================================== - * Bootstrap: tooltip.js v3.2.0 - * http://getbootstrap.com/javascript/#tooltip - * Inspired by the original jQuery.tipsy by Jason Frame - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TOOLTIP PUBLIC CLASS DEFINITION - // =============================== - - var Tooltip = function (element, options) { - this.type = - this.options = - this.enabled = - this.timeout = - this.hoverState = - this.$element = null - - this.init('tooltip', element, options) - } - - Tooltip.VERSION = '3.2.0' - - Tooltip.DEFAULTS = { - animation: true, - placement: 'top', - selector: false, - template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - container: false, - viewport: { - selector: 'body', - padding: 0 - } - } - - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport) - - var triggers = this.options.trigger.split(' ') - - for (var i = triggers.length; i--;) { - var trigger = triggers[i] - - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' - - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } - - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay, - hide: options.delay - } - } - - return options - } - - Tooltip.prototype.getDelegateOptions = function () { - var options = {} - var defaults = this.getDefaults() - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) - - return options - } - - Tooltip.prototype.enter = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - clearTimeout(self.timeout) - - self.hoverState = 'in' - - if (!self.options.delay || !self.options.delay.show) return self.show() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - clearTimeout(self.timeout) - - self.hoverState = 'out' - - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.' + this.type) - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - - var inDom = $.contains(document.documentElement, this.$element[0]) - if (e.isDefaultPrevented() || !inDom) return - var that = this - - var $tip = this.tip() - - var tipId = this.getUID(this.type) - - this.setContent() - $tip.attr('id', tipId) - this.$element.attr('aria-describedby', tipId) - - if (this.options.animation) $tip.addClass('fade') - - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - var autoToken = /\s?auto?\s?/i - var autoPlace = autoToken.test(placement) - if (autoPlace) placement = placement.replace(autoToken, '') || 'top' - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - .addClass(placement) - .data('bs.' + this.type, this) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (autoPlace) { - var orgPlacement = placement - var $parent = this.$element.parent() - var parentDim = this.getPosition($parent) - - placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' : - placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' : - placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' : - placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' : - placement - - $tip - .removeClass(orgPlacement) - .addClass(placement) - } - - var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) - - this.applyPlacement(calculatedOffset, placement) - - var complete = function () { - that.$element.trigger('shown.bs.' + that.type) - that.hoverState = null - } - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(150) : - complete() - } - } - - Tooltip.prototype.applyPlacement = function (offset, placement) { - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight - - // manually read margins because getBoundingClientRect includes difference - var marginTop = parseInt($tip.css('margin-top'), 10) - var marginLeft = parseInt($tip.css('margin-left'), 10) - - // we must check for NaN for ie 8/9 - if (isNaN(marginTop)) marginTop = 0 - if (isNaN(marginLeft)) marginLeft = 0 - - offset.top = offset.top + marginTop - offset.left = offset.left + marginLeft - - // $.fn.offset doesn't round pixel values - // so we use setOffset directly with our own function B-0 - $.offset.setOffset($tip[0], $.extend({ - using: function (props) { - $tip.css({ - top: Math.round(props.top), - left: Math.round(props.left) - }) - } - }, offset), 0) - - $tip.addClass('in') - - // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - } - - var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) - - if (delta.left) offset.left += delta.left - else offset.top += delta.top - - var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight - var arrowPosition = delta.left ? 'left' : 'top' - var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight' - - $tip.offset(offset) - this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition) - } - - Tooltip.prototype.replaceArrow = function (delta, dimension, position) { - this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '') - } - - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - Tooltip.prototype.hide = function () { - var that = this - var $tip = this.tip() - var e = $.Event('hide.bs.' + this.type) - - this.$element.removeAttr('aria-describedby') - - function complete() { - if (that.hoverState != 'in') $tip.detach() - that.$element.trigger('hidden.bs.' + that.type) - } - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(150) : - complete() - - this.hoverState = null - - return this - } - - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } - - Tooltip.prototype.getPosition = function ($element) { - $element = $element || this.$element - var el = $element[0] - var isBody = el.tagName == 'BODY' - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, { - scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(), - width: isBody ? $(window).width() : $element.outerWidth(), - height: isBody ? $(window).height() : $element.outerHeight() - }, isBody ? { top: 0, left: 0 } : $element.offset()) - } - - Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { - return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : - /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } - - } - - Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { - var delta = { top: 0, left: 0 } - if (!this.$viewport) return delta - - var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 - var viewportDimensions = this.getPosition(this.$viewport) - - if (/right|left/.test(placement)) { - var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll - var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight - if (topEdgeOffset < viewportDimensions.top) { // top overflow - delta.top = viewportDimensions.top - topEdgeOffset - } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow - delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset - } - } else { - var leftEdgeOffset = pos.left - viewportPadding - var rightEdgeOffset = pos.left + viewportPadding + actualWidth - if (leftEdgeOffset < viewportDimensions.left) { // left overflow - delta.left = viewportDimensions.left - leftEdgeOffset - } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow - delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset - } - } - - return delta - } - - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - Tooltip.prototype.getUID = function (prefix) { - do prefix += ~~(Math.random() * 1000000) - while (document.getElementById(prefix)) - return prefix - } - - Tooltip.prototype.tip = function () { - return (this.$tip = this.$tip || $(this.options.template)) - } - - Tooltip.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) - } - - Tooltip.prototype.validate = function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - Tooltip.prototype.enable = function () { - this.enabled = true - } - - Tooltip.prototype.disable = function () { - this.enabled = false - } - - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } - - Tooltip.prototype.toggle = function (e) { - var self = this - if (e) { - self = $(e.currentTarget).data('bs.' + this.type) - if (!self) { - self = new this.constructor(e.currentTarget, this.getDelegateOptions()) - $(e.currentTarget).data('bs.' + this.type, self) - } - } - - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } - - Tooltip.prototype.destroy = function () { - clearTimeout(this.timeout) - this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) - } - - - // TOOLTIP PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option - - if (!data && option == 'destroy') return - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tooltip - - $.fn.tooltip = Plugin - $.fn.tooltip.Constructor = Tooltip - - - // TOOLTIP NO CONFLICT - // =================== - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/js/transition.js b/platforms/android/assets/www/lib/bootstrap/js/transition.js deleted file mode 100644 index 83f85bf4..00000000 --- a/platforms/android/assets/www/lib/bootstrap/js/transition.js +++ /dev/null @@ -1,59 +0,0 @@ -/* ======================================================================== - * Bootstrap: transition.js v3.2.0 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - WebkitTransition : 'webkitTransitionEnd', - MozTransition : 'transitionend', - OTransition : 'oTransitionEnd otransitionend', - transition : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false - var $el = this - $(this).one('bsTransitionEnd', function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - - if (!$.support.transition) return - - $.event.special.bsTransitionEnd = { - bindType: $.support.transition.end, - delegateType: $.support.transition.end, - handle: function (e) { - if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) - } - } - }) - -}(jQuery); diff --git a/platforms/android/assets/www/lib/bootstrap/less/alerts.less b/platforms/android/assets/www/lib/bootstrap/less/alerts.less deleted file mode 100644 index df070b8a..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/alerts.less +++ /dev/null @@ -1,68 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: @alert-padding; - margin-bottom: @line-height-computed; - border: 1px solid transparent; - border-radius: @alert-border-radius; - - // Headings for larger alerts - h4 { - margin-top: 0; - // Specified for the h4 to prevent conflicts of changing @headings-color - color: inherit; - } - // Provide class for links that match alerts - .alert-link { - font-weight: @alert-link-font-weight; - } - - // Improve alignment and spacing of inner content - > p, - > ul { - margin-bottom: 0; - } - > p + p { - margin-top: 5px; - } -} - -// Dismissible alerts -// -// Expand the right padding and account for the close button's positioning. - -.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. -.alert-dismissible { - padding-right: (@alert-padding + 20); - - // Adjust close link position - .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; - } -} - -// Alternate styles -// -// Generate contextual modifier classes for colorizing the alert. - -.alert-success { - .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); -} -.alert-info { - .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); -} -.alert-warning { - .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); -} -.alert-danger { - .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/badges.less b/platforms/android/assets/www/lib/bootstrap/less/badges.less deleted file mode 100644 index 20624f30..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/badges.less +++ /dev/null @@ -1,55 +0,0 @@ -// -// Badges -// -------------------------------------------------- - - -// Base class -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: @font-size-small; - font-weight: @badge-font-weight; - color: @badge-color; - line-height: @badge-line-height; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: @badge-bg; - border-radius: @badge-border-radius; - - // Empty badges collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for badges in buttons - .btn & { - position: relative; - top: -1px; - } - .btn-xs & { - top: 0; - padding: 1px 5px; - } - - // Hover state, but only for links - a& { - &:hover, - &:focus { - color: @badge-link-hover-color; - text-decoration: none; - cursor: pointer; - } - } - - // Account for badges in navs - a.list-group-item.active > &, - .nav-pills > .active > a > & { - color: @badge-active-color; - background-color: @badge-active-bg; - } - .nav-pills > li > a > & { - margin-left: 3px; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/bootstrap.less b/platforms/android/assets/www/lib/bootstrap/less/bootstrap.less deleted file mode 100644 index 61b77474..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/bootstrap.less +++ /dev/null @@ -1,50 +0,0 @@ -// Core variables and mixins -@import "variables.less"; -@import "mixins.less"; - -// Reset and dependencies -@import "normalize.less"; -@import "print.less"; -@import "glyphicons.less"; - -// Core CSS -@import "scaffolding.less"; -@import "type.less"; -@import "code.less"; -@import "grid.less"; -@import "tables.less"; -@import "forms.less"; -@import "buttons.less"; - -// Components -@import "component-animations.less"; -@import "dropdowns.less"; -@import "button-groups.less"; -@import "input-groups.less"; -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; -@import "labels.less"; -@import "badges.less"; -@import "jumbotron.less"; -@import "thumbnails.less"; -@import "alerts.less"; -@import "progress-bars.less"; -@import "media.less"; -@import "list-group.less"; -@import "panels.less"; -@import "responsive-embed.less"; -@import "wells.less"; -@import "close.less"; - -// Components w/ JavaScript -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; -@import "carousel.less"; - -// Utility classes -@import "utilities.less"; -@import "responsive-utilities.less"; diff --git a/platforms/android/assets/www/lib/bootstrap/less/breadcrumbs.less b/platforms/android/assets/www/lib/bootstrap/less/breadcrumbs.less deleted file mode 100644 index cb01d503..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/breadcrumbs.less +++ /dev/null @@ -1,26 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; - margin-bottom: @line-height-computed; - list-style: none; - background-color: @breadcrumb-bg; - border-radius: @border-radius-base; - - > li { - display: inline-block; - - + li:before { - content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space - padding: 0 5px; - color: @breadcrumb-color; - } - } - - > .active { - color: @breadcrumb-active-color; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/button-groups.less b/platforms/android/assets/www/lib/bootstrap/less/button-groups.less deleted file mode 100644 index 7021ecd1..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/button-groups.less +++ /dev/null @@ -1,240 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - -// Make the div behave like a button -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; // match .btn alignment given font-size hack above - > .btn { - position: relative; - float: left; - // Bring the "active" button to the front - &:hover, - &:focus, - &:active, - &.active { - z-index: 2; - } - &:focus { - // Remove focus outline when dropdown JS adds it after closing the menu - outline: 0; - } - } -} - -// Prevent double borders when buttons are next to each other -.btn-group { - .btn + .btn, - .btn + .btn-group, - .btn-group + .btn, - .btn-group + .btn-group { - margin-left: -1px; - } -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - margin-left: -5px; // Offset the first child's margin - &:extend(.clearfix all); - - .btn-group, - .input-group { - float: left; - } - > .btn, - > .btn-group, - > .input-group { - margin-left: 5px; - } -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - &:not(:last-child):not(.dropdown-toggle) { - .border-right-radius(0); - } -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - .border-left-radius(0); -} - -// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child { - > .btn:last-child, - > .dropdown-toggle { - .border-right-radius(0); - } -} -.btn-group > .btn-group:last-child > .btn:first-child { - .border-left-radius(0); -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - -// Sizing -// -// Remix the default button sizing classes into new ones for easier manipulation. - -.btn-group-xs > .btn { &:extend(.btn-xs); } -.btn-group-sm > .btn { &:extend(.btn-sm); } -.btn-group-lg > .btn { &:extend(.btn-lg); } - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} - -// The clickable button for toggling the menu -// Remove the gradient and set the same inset shadow as the :active state -.btn-group.open .dropdown-toggle { - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - - // Show no shadow for `.btn-link` since it has no other button styles. - &.btn-link { - .box-shadow(none); - } -} - - -// Reposition the caret -.btn .caret { - margin-left: 0; -} -// Carets in other button sizes -.btn-lg .caret { - border-width: @caret-width-large @caret-width-large 0; - border-bottom-width: 0; -} -// Upside down carets for .dropup -.dropup .btn-lg .caret { - border-width: 0 @caret-width-large @caret-width-large; -} - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - > .btn, - > .btn-group, - > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; - } - - // Clear floats so dropdown menus can be properly placed - > .btn-group { - &:extend(.clearfix all); - > .btn { - float: none; - } - } - - > .btn + .btn, - > .btn + .btn-group, - > .btn-group + .btn, - > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; - } -} - -.btn-group-vertical > .btn { - &:not(:first-child):not(:last-child) { - border-radius: 0; - } - &:first-child:not(:last-child) { - border-top-right-radius: @border-radius-base; - .border-bottom-radius(0); - } - &:last-child:not(:first-child) { - border-bottom-left-radius: @border-radius-base; - .border-top-radius(0); - } -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) { - > .btn:last-child, - > .dropdown-toggle { - .border-bottom-radius(0); - } -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - .border-top-radius(0); -} - - - -// Justified button groups -// ---------------------- - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; - > .btn, - > .btn-group { - float: none; - display: table-cell; - width: 1%; - } - > .btn-group .btn { - width: 100%; - } - - > .btn-group .dropdown-menu { - left: auto; - } -} - - -// Checkbox and radio options -// -// In order to support the browser's form validation feedback, powered by the -// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot -// use `display: none;` or `visibility: hidden;` as that also hides the popover. -// This way, we ensure a DOM element is visible to position the popover from. -// -// See https://github.com/twbs/bootstrap/pull/12794 for more. - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - position: absolute; - z-index: -1; - .opacity(0); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/buttons.less b/platforms/android/assets/www/lib/bootstrap/less/buttons.less deleted file mode 100644 index 492bdc65..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/buttons.less +++ /dev/null @@ -1,157 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -.btn { - display: inline-block; - margin-bottom: 0; // For input.btn - font-weight: @btn-font-weight; - text-align: center; - vertical-align: middle; - cursor: pointer; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - white-space: nowrap; - .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); - .user-select(none); - - &, - &:active, - &.active { - &:focus { - .tab-focus(); - } - } - - &:hover, - &:focus { - color: @btn-default-color; - text-decoration: none; - } - - &:active, - &.active { - outline: 0; - background-image: none; - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - cursor: not-allowed; - pointer-events: none; // Future-proof disabling of clicks - .opacity(.65); - .box-shadow(none); - } -} - - -// Alternate buttons -// -------------------------------------------------- - -.btn-default { - .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); -} -.btn-primary { - .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); -} -// Success appears as green -.btn-success { - .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); -} -// Info appears as blue-green -.btn-info { - .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); -} -// Warning appears as orange -.btn-warning { - .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); -} -// Danger and error appear as red -.btn-danger { - .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); -} - - -// Link buttons -// ------------------------- - -// Make a button look and behave like a link -.btn-link { - color: @link-color; - font-weight: normal; - cursor: pointer; - border-radius: 0; - - &, - &:active, - &[disabled], - fieldset[disabled] & { - background-color: transparent; - .box-shadow(none); - } - &, - &:hover, - &:focus, - &:active { - border-color: transparent; - } - &:hover, - &:focus { - color: @link-hover-color; - text-decoration: underline; - background-color: transparent; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @btn-link-disabled-color; - text-decoration: none; - } - } -} - - -// Button Sizes -// -------------------------------------------------- - -.btn-lg { - // line-height: ensure even-numbered height of button next to large input - .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); -} -.btn-sm { - // line-height: ensure proper height of button next to small input - .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} -.btn-xs { - .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} - - -// Block button -// -------------------------------------------------- - -.btn-block { - display: block; - width: 100%; -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/carousel.less b/platforms/android/assets/www/lib/bootstrap/less/carousel.less deleted file mode 100644 index 1644ddf7..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/carousel.less +++ /dev/null @@ -1,243 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -// Wrapper for the slide container and indicators -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; - - > .item { - display: none; - position: relative; - .transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - &:extend(.img-responsive); - line-height: 1; - } - } - - > .active, - > .next, - > .prev { - display: block; - } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: @carousel-control-width; - .opacity(@carousel-control-opacity); - font-size: @carousel-control-font-size; - color: @carousel-control-color; - text-align: center; - text-shadow: @carousel-text-shadow; - // We can't have this transition here because WebKit cancels the carousel - // animation if you trip this while in the middle of another animation. - - // Set gradients for backgrounds - &.left { - #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); - } - &.right { - left: auto; - right: 0; - #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); - } - - // Hover/focus state - &:hover, - &:focus { - outline: 0; - color: @carousel-control-color; - text-decoration: none; - .opacity(.9); - } - - // Toggles - .icon-prev, - .icon-next, - .glyphicon-chevron-left, - .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - } - .icon-prev, - .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; - } - .icon-next, - .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; - } - .icon-prev, - .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - font-family: serif; - } - - - .icon-prev { - &:before { - content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) - } - } - .icon-next { - &:before { - content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) - } - } -} - -// Optional indicator pips -// -// Add an unordered list with the following class and add a list item for each -// slide your carousel holds. - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; - - li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid @carousel-indicator-border-color; - border-radius: 10px; - cursor: pointer; - - // IE8-9 hack for event handling - // - // Internet Explorer 8-9 does not support clicks on elements without a set - // `background-color`. We cannot use `filter` since that's not viewed as a - // background color by the browser. Thus, a hack is needed. - // - // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we - // set alpha transparency for the best results possible. - background-color: #000 \9; // IE8 - background-color: rgba(0,0,0,0); // IE9 - } - .active { - margin: 0; - width: 12px; - height: 12px; - background-color: @carousel-indicator-active-bg; - } -} - -// Optional captions -// ----------------------------- -// Hidden by default for smaller viewports -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: @carousel-caption-color; - text-align: center; - text-shadow: @carousel-text-shadow; - & .btn { - text-shadow: none; // No shadow for button elements in carousel-caption - } -} - - -// Scale up controls for tablets and up -@media screen and (min-width: @screen-sm-min) { - - // Scale up the controls a smidge - .carousel-control { - .glyphicon-chevron-left, - .glyphicon-chevron-right, - .icon-prev, - .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .glyphicon-chevron-left, - .icon-prev { - margin-left: -15px; - } - .glyphicon-chevron-right, - .icon-next { - margin-right: -15px; - } - } - - // Show and left align the captions - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - - // Move up the indicators - .carousel-indicators { - bottom: 20px; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/close.less b/platforms/android/assets/www/lib/bootstrap/less/close.less deleted file mode 100644 index 9b4e74f2..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/close.less +++ /dev/null @@ -1,33 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: (@font-size-base * 1.5); - font-weight: @close-font-weight; - line-height: 1; - color: @close-color; - text-shadow: @close-text-shadow; - .opacity(.2); - - &:hover, - &:focus { - color: @close-color; - text-decoration: none; - cursor: pointer; - .opacity(.5); - } - - // Additional properties for button version - // iOS requires the button element instead of an anchor tag. - // If you want the anchor version, it requires `href="#"`. - button& { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/code.less b/platforms/android/assets/www/lib/bootstrap/less/code.less deleted file mode 100644 index baa13df6..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/code.less +++ /dev/null @@ -1,68 +0,0 @@ -// -// Code (inline and block) -// -------------------------------------------------- - - -// Inline and block code styles -code, -kbd, -pre, -samp { - font-family: @font-family-monospace; -} - -// Inline code -code { - padding: 2px 4px; - font-size: 90%; - color: @code-color; - background-color: @code-bg; - border-radius: @border-radius-base; -} - -// User input typically entered via keyboard -kbd { - padding: 2px 4px; - font-size: 90%; - color: @kbd-color; - background-color: @kbd-bg; - border-radius: @border-radius-small; - box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); - - kbd { - padding: 0; - font-size: 100%; - box-shadow: none; - } -} - -// Blocks of code -pre { - display: block; - padding: ((@line-height-computed - 1) / 2); - margin: 0 0 (@line-height-computed / 2); - font-size: (@font-size-base - 1); // 14px to 13px - line-height: @line-height-base; - word-break: break-all; - word-wrap: break-word; - color: @pre-color; - background-color: @pre-bg; - border: 1px solid @pre-border-color; - border-radius: @border-radius-base; - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: @pre-scrollable-max-height; - overflow-y: scroll; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/component-animations.less b/platforms/android/assets/www/lib/bootstrap/less/component-animations.less deleted file mode 100644 index 9400a0d3..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/component-animations.less +++ /dev/null @@ -1,31 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - -// Heads up! -// -// We don't use the `.opacity()` mixin here since it causes a bug with text -// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. - -.fade { - opacity: 0; - .transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - display: none; - - &.in { display: block; } - tr&.in { display: table-row; } - tbody&.in { display: table-row-group; } -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - .transition(height .35s ease); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/dropdowns.less b/platforms/android/assets/www/lib/bootstrap/less/dropdowns.less deleted file mode 100644 index 3eb7fc05..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/dropdowns.less +++ /dev/null @@ -1,215 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Dropdown arrow/caret -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: @caret-width-base solid; - border-right: @caret-width-base solid transparent; - border-left: @caret-width-base solid transparent; -} - -// The dropdown wrapper (div) -.dropdown { - position: relative; -} - -// Prevent the focus on the dropdown toggle when closing dropdowns -.dropdown-toggle:focus { - outline: 0; -} - -// The dropdown menu (ul) -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: @zindex-dropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - font-size: @font-size-base; - text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) - background-color: @dropdown-bg; - border: 1px solid @dropdown-fallback-border; // IE8 fallback - border: 1px solid @dropdown-border; - border-radius: @border-radius-base; - .box-shadow(0 6px 12px rgba(0,0,0,.175)); - background-clip: padding-box; - - // Aligns the dropdown menu to right - // - // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - .nav-divider(@dropdown-divider-bg); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: @line-height-base; - color: @dropdown-link-color; - white-space: nowrap; // prevent links from randomly breaking onto new lines - } -} - -// Hover/Focus state -.dropdown-menu > li > a { - &:hover, - &:focus { - text-decoration: none; - color: @dropdown-link-hover-color; - background-color: @dropdown-link-hover-bg; - } -} - -// Active state -.dropdown-menu > .active > a { - &, - &:hover, - &:focus { - color: @dropdown-link-active-color; - text-decoration: none; - outline: 0; - background-color: @dropdown-link-active-bg; - } -} - -// Disabled state -// -// Gray out text and ensure the hover/focus state remains gray - -.dropdown-menu > .disabled > a { - &, - &:hover, - &:focus { - color: @dropdown-link-disabled-color; - } -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a { - &:hover, - &:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: not-allowed; - } -} - -// Open state for the dropdown -.open { - // Show the menu - > .dropdown-menu { - display: block; - } - - // Remove the outline when :focus is triggered - > a { - outline: 0; - } -} - -// Menu positioning -// -// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown -// menu with the parent. -.dropdown-menu-right { - left: auto; // Reset the default from `.dropdown-menu` - right: 0; -} -// With v3, we enabled auto-flipping if you have a dropdown within a right -// aligned nav component. To enable the undoing of that, we provide an override -// to restore the default dropdown menu alignment. -// -// This is only for left-aligning a dropdown menu within a `.navbar-right` or -// `.pull-right` nav component. -.dropdown-menu-left { - left: 0; - right: auto; -} - -// Dropdown section headers -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: @font-size-small; - line-height: @line-height-base; - color: @dropdown-header-color; - white-space: nowrap; // as with > li > a -} - -// Backdrop to catch body clicks on mobile, etc. -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: (@zindex-dropdown - 10); -} - -// Right aligned dropdowns -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? - -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: @caret-width-base solid; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - - -// Component alignment -// -// Reiterate per navbar.less and the modified component alignment there. - -@media (min-width: @grid-float-breakpoint) { - .navbar-right { - .dropdown-menu { - .dropdown-menu-right(); - } - // Necessary for overrides of the default right aligned menu. - // Will remove come v4 in all likelihood. - .dropdown-menu-left { - .dropdown-menu-left(); - } - } -} - diff --git a/platforms/android/assets/www/lib/bootstrap/less/forms.less b/platforms/android/assets/www/lib/bootstrap/less/forms.less deleted file mode 100644 index 2c5e9bfa..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/forms.less +++ /dev/null @@ -1,540 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// Normalize non-controls -// -// Restyle and baseline non-control form elements. - -fieldset { - padding: 0; - margin: 0; - border: 0; - // Chrome and Firefox set a `min-width: min-content;` on fieldsets, - // so we reset that to ensure it behaves more like a standard block element. - // See https://github.com/twbs/bootstrap/issues/12359. - min-width: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: @line-height-computed; - font-size: (@font-size-base * 1.5); - line-height: inherit; - color: @legend-color; - border: 0; - border-bottom: 1px solid @legend-border-color; -} - -label { - display: inline-block; - max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) - margin-bottom: 5px; - font-weight: bold; -} - - -// Normalize form controls -// -// While most of our form styles require extra classes, some basic normalization -// is required to ensure optimum display with or without those classes to better -// address browser inconsistencies. - -// Override content-box in Normalize (* isn't specific enough) -input[type="search"] { - .box-sizing(border-box); -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; // IE8-9 - line-height: normal; -} - -// Set the height of file controls to match text inputs -input[type="file"] { - display: block; -} - -// Make range inputs behave like textual form controls -input[type="range"] { - display: block; - width: 100%; -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for file, radio, and checkbox -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - .tab-focus(); -} - -// Adjust output element -output { - display: block; - padding-top: (@padding-base-vertical + 1); - font-size: @font-size-base; - line-height: @line-height-base; - color: @input-color; -} - - -// Common form controls -// -// Shared size and type resets for form controls. Apply `.form-control` to any -// of the following form controls: -// -// select -// textarea -// input[type="text"] -// input[type="password"] -// input[type="datetime"] -// input[type="datetime-local"] -// input[type="date"] -// input[type="month"] -// input[type="time"] -// input[type="week"] -// input[type="number"] -// input[type="email"] -// input[type="url"] -// input[type="search"] -// input[type="tel"] -// input[type="color"] - -.form-control { - display: block; - width: 100%; - height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - padding: @padding-base-vertical @padding-base-horizontal; - font-size: @font-size-base; - line-height: @line-height-base; - color: @input-color; - background-color: @input-bg; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid @input-border; - border-radius: @input-border-radius; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); - - // Customize the `:focus` state to imitate native WebKit styles. - .form-control-focus(); - - // Placeholder - .placeholder(); - - // Disabled and read-only inputs - // - // HTML5 says that controls under a fieldset > legend:first-child won't be - // disabled if the fieldset is disabled. Due to implementation difficulty, we - // don't honor that edge case; we style them as disabled anyway. - &[disabled], - &[readonly], - fieldset[disabled] & { - cursor: not-allowed; - background-color: @input-bg-disabled; - opacity: 1; // iOS fix for unreadable disabled content - } - - // Reset height for `textarea`s - textarea& { - height: auto; - } -} - - -// Search inputs in iOS -// -// This overrides the extra rounded corners on search inputs in iOS so that our -// `.form-control` class can properly style them. Note that this cannot simply -// be added to `.form-control` as it's not specific enough. For details, see -// https://github.com/twbs/bootstrap/issues/11586. - -input[type="search"] { - -webkit-appearance: none; -} - - -// Special styles for iOS temporal inputs -// -// In Mobile Safari, setting `display: block` on temporal inputs causes the -// text within the input to become vertically misaligned. -// As a workaround, we set a pixel line-height that matches the -// given height of the input. Since this fucks up everything else, we have to -// appropriately reset it for Internet Explorer and the size variations. - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - line-height: @input-height-base; - // IE8+ misaligns the text within date inputs, so we reset - line-height: @line-height-base ~"\0"; - - &.input-sm { - line-height: @input-height-small; - } - &.input-lg { - line-height: @input-height-large; - } -} - - -// Form groups -// -// Designed to help with the organization and spacing of vertical forms. For -// horizontal forms, use the predefined grid classes. - -.form-group { - margin-bottom: 15px; -} - - -// Checkboxes and radios -// -// Indent the labels to position radios/checkboxes as hanging controls. - -.radio, -.checkbox { - position: relative; - display: block; - min-height: @line-height-computed; // clear the floating input if there is no label text - margin-top: 10px; - margin-bottom: 10px; - - label { - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; - } -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing -} - -// Radios and checkboxes on same line -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; // space out consecutive inline controls -} - -// Apply same disabled cursor tweak as for inputs -// Some special care is needed because <label>s don't inherit their parent's `cursor`. -// -// Note: Neither radios nor checkboxes can be readonly. -input[type="radio"], -input[type="checkbox"] { - &[disabled], - &.disabled, - fieldset[disabled] & { - cursor: not-allowed; - } -} -// These classes are used directly on <label>s -.radio-inline, -.checkbox-inline { - &.disabled, - fieldset[disabled] & { - cursor: not-allowed; - } -} -// These classes are used on elements with <label> descendants -.radio, -.checkbox { - &.disabled, - fieldset[disabled] & { - label { - cursor: not-allowed; - } - } -} - - -// Static form control text -// -// Apply class to a `p` element to make any string of text align with labels in -// a horizontal form layout. - -.form-control-static { - // Size it appropriately next to real form controls - padding-top: (@padding-base-vertical + 1); - padding-bottom: (@padding-base-vertical + 1); - // Remove default margin from `p` - margin-bottom: 0; - - &.input-lg, - &.input-sm { - padding-left: 0; - padding-right: 0; - } -} - - -// Form control sizing -// -// Build on `.form-control` with modifier classes to decrease or increase the -// height and font-size of form controls. - -.input-sm { - .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} - -.input-lg { - .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); -} - - -// Form control feedback states -// -// Apply contextual and semantic states to individual form controls. - -.has-feedback { - // Enable absolute positioning - position: relative; - - // Ensure icons don't overlap text - .form-control { - padding-right: (@input-height-base * 1.25); - } -} -// Feedback icon (requires .glyphicon classes) -.form-control-feedback { - position: absolute; - top: (@line-height-computed + 5); // Height of the `label` and its margin - right: 0; - z-index: 2; // Ensure icon is above input groups - display: block; - width: @input-height-base; - height: @input-height-base; - line-height: @input-height-base; - text-align: center; -} -.input-lg + .form-control-feedback { - width: @input-height-large; - height: @input-height-large; - line-height: @input-height-large; -} -.input-sm + .form-control-feedback { - width: @input-height-small; - height: @input-height-small; - line-height: @input-height-small; -} - -// Feedback states -.has-success { - .form-control-validation(@state-success-text; @state-success-text; @state-success-bg); -} -.has-warning { - .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg); -} -.has-error { - .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg); -} - - -// Reposition feedback icon if label is hidden with "screenreader only" state -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} - - -// Help text -// -// Apply to any element you wish to create light text for placement immediately -// below a form control. Use for general help, formatting, or instructional text. - -.help-block { - display: block; // account for any element using help-block - margin-top: 5px; - margin-bottom: 10px; - color: lighten(@text-color, 25%); // lighten the text some for contrast -} - - - -// Inline forms -// -// Make forms appear inline(-block) by adding the `.form-inline` class. Inline -// forms begin stacked on extra small (mobile) devices and then go inline when -// viewports reach <768px. -// -// Requires wrapping inputs and labels with `.form-group` for proper display of -// default HTML form controls and our custom form controls (e.g., input groups). -// -// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. - -.form-inline { - - // Kick in the inline - @media (min-width: @screen-sm-min) { - // Inline-block all the things for "inline" - .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - - // In navbar-form, allow folks to *not* use `.form-group` - .form-control { - display: inline-block; - width: auto; // Prevent labels from stacking above inputs in `.form-group` - vertical-align: middle; - } - - .input-group { - display: inline-table; - vertical-align: middle; - - .input-group-addon, - .input-group-btn, - .form-control { - width: auto; - } - } - - // Input groups need that 100% width though - .input-group > .form-control { - width: 100%; - } - - .control-label { - margin-bottom: 0; - vertical-align: middle; - } - - // Remove default margin on radios/checkboxes that were used for stacking, and - // then undo the floating of radios and checkboxes to match (which also avoids - // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). - .radio, - .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - - label { - padding-left: 0; - } - } - .radio input[type="radio"], - .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - } - } -} - - -// Horizontal forms -// -// Horizontal forms are built on grid classes and allow you to create forms with -// labels on the left and inputs on the right. - -.form-horizontal { - - // Consistent vertical alignment of radios and checkboxes - // - // Labels also get some reset styles, but that is scoped to a media query below. - .radio, - .checkbox, - .radio-inline, - .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: (@padding-base-vertical + 1); // Default padding plus a border - } - // Account for padding we're adding to ensure the alignment and of help text - // and other content below items - .radio, - .checkbox { - min-height: (@line-height-computed + (@padding-base-vertical + 1)); - } - - // Make form groups behave like rows - .form-group { - .make-row(); - } - - // Reset spacing and right align labels, but scope to media queries so that - // labels on narrow viewports stack the same as a default form example. - @media (min-width: @screen-sm-min) { - .control-label { - text-align: right; - margin-bottom: 0; - padding-top: (@padding-base-vertical + 1); // Default padding plus a border - } - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - right: (@grid-gutter-width / 2); - } - - // Form group sizes - // - // Quick utility class for applying `.input-lg` and `.input-sm` styles to the - // inputs and labels within a `.form-group`. - .form-group-lg { - @media (min-width: @screen-sm-min) { - .control-label { - padding-top: ((@padding-large-vertical * @line-height-large) + 1); - } - } - .form-control { - &:extend(.input-lg); - } - } - .form-group-sm { - @media (min-width: @screen-sm-min) { - .control-label { - padding-top: (@padding-small-vertical + 1); - } - } - .form-control { - &:extend(.input-sm); - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/glyphicons.less b/platforms/android/assets/www/lib/bootstrap/less/glyphicons.less deleted file mode 100644 index d3485dcb..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/glyphicons.less +++ /dev/null @@ -1,233 +0,0 @@ -// -// Glyphicons for Bootstrap -// -// Since icons are fonts, they can be placed anywhere text is placed and are -// thus automatically sized to match the surrounding child. To use, create an -// inline element with the appropriate classes, like so: -// -// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a> - -// Import the fonts -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('@{icon-font-path}@{icon-font-name}.eot'); - src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'), - url('@{icon-font-path}@{icon-font-name}.woff') format('woff'), - url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'), - url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg'); -} - -// Catchall baseclass -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -// Individual icons -.glyphicon-asterisk { &:before { content: "\2a"; } } -.glyphicon-plus { &:before { content: "\2b"; } } -.glyphicon-euro { &:before { content: "\20ac"; } } -.glyphicon-minus { &:before { content: "\2212"; } } -.glyphicon-cloud { &:before { content: "\2601"; } } -.glyphicon-envelope { &:before { content: "\2709"; } } -.glyphicon-pencil { &:before { content: "\270f"; } } -.glyphicon-glass { &:before { content: "\e001"; } } -.glyphicon-music { &:before { content: "\e002"; } } -.glyphicon-search { &:before { content: "\e003"; } } -.glyphicon-heart { &:before { content: "\e005"; } } -.glyphicon-star { &:before { content: "\e006"; } } -.glyphicon-star-empty { &:before { content: "\e007"; } } -.glyphicon-user { &:before { content: "\e008"; } } -.glyphicon-film { &:before { content: "\e009"; } } -.glyphicon-th-large { &:before { content: "\e010"; } } -.glyphicon-th { &:before { content: "\e011"; } } -.glyphicon-th-list { &:before { content: "\e012"; } } -.glyphicon-ok { &:before { content: "\e013"; } } -.glyphicon-remove { &:before { content: "\e014"; } } -.glyphicon-zoom-in { &:before { content: "\e015"; } } -.glyphicon-zoom-out { &:before { content: "\e016"; } } -.glyphicon-off { &:before { content: "\e017"; } } -.glyphicon-signal { &:before { content: "\e018"; } } -.glyphicon-cog { &:before { content: "\e019"; } } -.glyphicon-trash { &:before { content: "\e020"; } } -.glyphicon-home { &:before { content: "\e021"; } } -.glyphicon-file { &:before { content: "\e022"; } } -.glyphicon-time { &:before { content: "\e023"; } } -.glyphicon-road { &:before { content: "\e024"; } } -.glyphicon-download-alt { &:before { content: "\e025"; } } -.glyphicon-download { &:before { content: "\e026"; } } -.glyphicon-upload { &:before { content: "\e027"; } } -.glyphicon-inbox { &:before { content: "\e028"; } } -.glyphicon-play-circle { &:before { content: "\e029"; } } -.glyphicon-repeat { &:before { content: "\e030"; } } -.glyphicon-refresh { &:before { content: "\e031"; } } -.glyphicon-list-alt { &:before { content: "\e032"; } } -.glyphicon-lock { &:before { content: "\e033"; } } -.glyphicon-flag { &:before { content: "\e034"; } } -.glyphicon-headphones { &:before { content: "\e035"; } } -.glyphicon-volume-off { &:before { content: "\e036"; } } -.glyphicon-volume-down { &:before { content: "\e037"; } } -.glyphicon-volume-up { &:before { content: "\e038"; } } -.glyphicon-qrcode { &:before { content: "\e039"; } } -.glyphicon-barcode { &:before { content: "\e040"; } } -.glyphicon-tag { &:before { content: "\e041"; } } -.glyphicon-tags { &:before { content: "\e042"; } } -.glyphicon-book { &:before { content: "\e043"; } } -.glyphicon-bookmark { &:before { content: "\e044"; } } -.glyphicon-print { &:before { content: "\e045"; } } -.glyphicon-camera { &:before { content: "\e046"; } } -.glyphicon-font { &:before { content: "\e047"; } } -.glyphicon-bold { &:before { content: "\e048"; } } -.glyphicon-italic { &:before { content: "\e049"; } } -.glyphicon-text-height { &:before { content: "\e050"; } } -.glyphicon-text-width { &:before { content: "\e051"; } } -.glyphicon-align-left { &:before { content: "\e052"; } } -.glyphicon-align-center { &:before { content: "\e053"; } } -.glyphicon-align-right { &:before { content: "\e054"; } } -.glyphicon-align-justify { &:before { content: "\e055"; } } -.glyphicon-list { &:before { content: "\e056"; } } -.glyphicon-indent-left { &:before { content: "\e057"; } } -.glyphicon-indent-right { &:before { content: "\e058"; } } -.glyphicon-facetime-video { &:before { content: "\e059"; } } -.glyphicon-picture { &:before { content: "\e060"; } } -.glyphicon-map-marker { &:before { content: "\e062"; } } -.glyphicon-adjust { &:before { content: "\e063"; } } -.glyphicon-tint { &:before { content: "\e064"; } } -.glyphicon-edit { &:before { content: "\e065"; } } -.glyphicon-share { &:before { content: "\e066"; } } -.glyphicon-check { &:before { content: "\e067"; } } -.glyphicon-move { &:before { content: "\e068"; } } -.glyphicon-step-backward { &:before { content: "\e069"; } } -.glyphicon-fast-backward { &:before { content: "\e070"; } } -.glyphicon-backward { &:before { content: "\e071"; } } -.glyphicon-play { &:before { content: "\e072"; } } -.glyphicon-pause { &:before { content: "\e073"; } } -.glyphicon-stop { &:before { content: "\e074"; } } -.glyphicon-forward { &:before { content: "\e075"; } } -.glyphicon-fast-forward { &:before { content: "\e076"; } } -.glyphicon-step-forward { &:before { content: "\e077"; } } -.glyphicon-eject { &:before { content: "\e078"; } } -.glyphicon-chevron-left { &:before { content: "\e079"; } } -.glyphicon-chevron-right { &:before { content: "\e080"; } } -.glyphicon-plus-sign { &:before { content: "\e081"; } } -.glyphicon-minus-sign { &:before { content: "\e082"; } } -.glyphicon-remove-sign { &:before { content: "\e083"; } } -.glyphicon-ok-sign { &:before { content: "\e084"; } } -.glyphicon-question-sign { &:before { content: "\e085"; } } -.glyphicon-info-sign { &:before { content: "\e086"; } } -.glyphicon-screenshot { &:before { content: "\e087"; } } -.glyphicon-remove-circle { &:before { content: "\e088"; } } -.glyphicon-ok-circle { &:before { content: "\e089"; } } -.glyphicon-ban-circle { &:before { content: "\e090"; } } -.glyphicon-arrow-left { &:before { content: "\e091"; } } -.glyphicon-arrow-right { &:before { content: "\e092"; } } -.glyphicon-arrow-up { &:before { content: "\e093"; } } -.glyphicon-arrow-down { &:before { content: "\e094"; } } -.glyphicon-share-alt { &:before { content: "\e095"; } } -.glyphicon-resize-full { &:before { content: "\e096"; } } -.glyphicon-resize-small { &:before { content: "\e097"; } } -.glyphicon-exclamation-sign { &:before { content: "\e101"; } } -.glyphicon-gift { &:before { content: "\e102"; } } -.glyphicon-leaf { &:before { content: "\e103"; } } -.glyphicon-fire { &:before { content: "\e104"; } } -.glyphicon-eye-open { &:before { content: "\e105"; } } -.glyphicon-eye-close { &:before { content: "\e106"; } } -.glyphicon-warning-sign { &:before { content: "\e107"; } } -.glyphicon-plane { &:before { content: "\e108"; } } -.glyphicon-calendar { &:before { content: "\e109"; } } -.glyphicon-random { &:before { content: "\e110"; } } -.glyphicon-comment { &:before { content: "\e111"; } } -.glyphicon-magnet { &:before { content: "\e112"; } } -.glyphicon-chevron-up { &:before { content: "\e113"; } } -.glyphicon-chevron-down { &:before { content: "\e114"; } } -.glyphicon-retweet { &:before { content: "\e115"; } } -.glyphicon-shopping-cart { &:before { content: "\e116"; } } -.glyphicon-folder-close { &:before { content: "\e117"; } } -.glyphicon-folder-open { &:before { content: "\e118"; } } -.glyphicon-resize-vertical { &:before { content: "\e119"; } } -.glyphicon-resize-horizontal { &:before { content: "\e120"; } } -.glyphicon-hdd { &:before { content: "\e121"; } } -.glyphicon-bullhorn { &:before { content: "\e122"; } } -.glyphicon-bell { &:before { content: "\e123"; } } -.glyphicon-certificate { &:before { content: "\e124"; } } -.glyphicon-thumbs-up { &:before { content: "\e125"; } } -.glyphicon-thumbs-down { &:before { content: "\e126"; } } -.glyphicon-hand-right { &:before { content: "\e127"; } } -.glyphicon-hand-left { &:before { content: "\e128"; } } -.glyphicon-hand-up { &:before { content: "\e129"; } } -.glyphicon-hand-down { &:before { content: "\e130"; } } -.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } -.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } -.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } -.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } -.glyphicon-globe { &:before { content: "\e135"; } } -.glyphicon-wrench { &:before { content: "\e136"; } } -.glyphicon-tasks { &:before { content: "\e137"; } } -.glyphicon-filter { &:before { content: "\e138"; } } -.glyphicon-briefcase { &:before { content: "\e139"; } } -.glyphicon-fullscreen { &:before { content: "\e140"; } } -.glyphicon-dashboard { &:before { content: "\e141"; } } -.glyphicon-paperclip { &:before { content: "\e142"; } } -.glyphicon-heart-empty { &:before { content: "\e143"; } } -.glyphicon-link { &:before { content: "\e144"; } } -.glyphicon-phone { &:before { content: "\e145"; } } -.glyphicon-pushpin { &:before { content: "\e146"; } } -.glyphicon-usd { &:before { content: "\e148"; } } -.glyphicon-gbp { &:before { content: "\e149"; } } -.glyphicon-sort { &:before { content: "\e150"; } } -.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } -.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } -.glyphicon-sort-by-order { &:before { content: "\e153"; } } -.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } -.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } -.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } -.glyphicon-unchecked { &:before { content: "\e157"; } } -.glyphicon-expand { &:before { content: "\e158"; } } -.glyphicon-collapse-down { &:before { content: "\e159"; } } -.glyphicon-collapse-up { &:before { content: "\e160"; } } -.glyphicon-log-in { &:before { content: "\e161"; } } -.glyphicon-flash { &:before { content: "\e162"; } } -.glyphicon-log-out { &:before { content: "\e163"; } } -.glyphicon-new-window { &:before { content: "\e164"; } } -.glyphicon-record { &:before { content: "\e165"; } } -.glyphicon-save { &:before { content: "\e166"; } } -.glyphicon-open { &:before { content: "\e167"; } } -.glyphicon-saved { &:before { content: "\e168"; } } -.glyphicon-import { &:before { content: "\e169"; } } -.glyphicon-export { &:before { content: "\e170"; } } -.glyphicon-send { &:before { content: "\e171"; } } -.glyphicon-floppy-disk { &:before { content: "\e172"; } } -.glyphicon-floppy-saved { &:before { content: "\e173"; } } -.glyphicon-floppy-remove { &:before { content: "\e174"; } } -.glyphicon-floppy-save { &:before { content: "\e175"; } } -.glyphicon-floppy-open { &:before { content: "\e176"; } } -.glyphicon-credit-card { &:before { content: "\e177"; } } -.glyphicon-transfer { &:before { content: "\e178"; } } -.glyphicon-cutlery { &:before { content: "\e179"; } } -.glyphicon-header { &:before { content: "\e180"; } } -.glyphicon-compressed { &:before { content: "\e181"; } } -.glyphicon-earphone { &:before { content: "\e182"; } } -.glyphicon-phone-alt { &:before { content: "\e183"; } } -.glyphicon-tower { &:before { content: "\e184"; } } -.glyphicon-stats { &:before { content: "\e185"; } } -.glyphicon-sd-video { &:before { content: "\e186"; } } -.glyphicon-hd-video { &:before { content: "\e187"; } } -.glyphicon-subtitles { &:before { content: "\e188"; } } -.glyphicon-sound-stereo { &:before { content: "\e189"; } } -.glyphicon-sound-dolby { &:before { content: "\e190"; } } -.glyphicon-sound-5-1 { &:before { content: "\e191"; } } -.glyphicon-sound-6-1 { &:before { content: "\e192"; } } -.glyphicon-sound-7-1 { &:before { content: "\e193"; } } -.glyphicon-copyright-mark { &:before { content: "\e194"; } } -.glyphicon-registration-mark { &:before { content: "\e195"; } } -.glyphicon-cloud-download { &:before { content: "\e197"; } } -.glyphicon-cloud-upload { &:before { content: "\e198"; } } -.glyphicon-tree-conifer { &:before { content: "\e199"; } } -.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/platforms/android/assets/www/lib/bootstrap/less/grid.less b/platforms/android/assets/www/lib/bootstrap/less/grid.less deleted file mode 100644 index e100655b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/grid.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Container widths -// -// Set the container width, and override it for fixed navbars in media queries. - -.container { - .container-fixed(); - - @media (min-width: @screen-sm-min) { - width: @container-sm; - } - @media (min-width: @screen-md-min) { - width: @container-md; - } - @media (min-width: @screen-lg-min) { - width: @container-lg; - } -} - - -// Fluid container -// -// Utilizes the mixin meant for fixed width containers, but without any defined -// width for fluid, full width layouts. - -.container-fluid { - .container-fixed(); -} - - -// Row -// -// Rows contain and clear the floats of your columns. - -.row { - .make-row(); -} - - -// Columns -// -// Common styles for small and large grid columns - -.make-grid-columns(); - - -// Extra small grid -// -// Columns, offsets, pushes, and pulls for extra small devices like -// smartphones. - -.make-grid(xs); - - -// Small grid -// -// Columns, offsets, pushes, and pulls for the small device range, from phones -// to tablets. - -@media (min-width: @screen-sm-min) { - .make-grid(sm); -} - - -// Medium grid -// -// Columns, offsets, pushes, and pulls for the desktop device range. - -@media (min-width: @screen-md-min) { - .make-grid(md); -} - - -// Large grid -// -// Columns, offsets, pushes, and pulls for the large desktop device range. - -@media (min-width: @screen-lg-min) { - .make-grid(lg); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/input-groups.less b/platforms/android/assets/www/lib/bootstrap/less/input-groups.less deleted file mode 100644 index a8712f25..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/input-groups.less +++ /dev/null @@ -1,166 +0,0 @@ -// -// Input groups -// -------------------------------------------------- - -// Base styles -// ------------------------- -.input-group { - position: relative; // For dropdowns - display: table; - border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table - - // Undo padding and float of grid classes - &[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; - } - - .form-control { - // Ensure that the input is always above the *appended* addon button for - // proper border colors. - position: relative; - z-index: 2; - - // IE9 fubars the placeholder attribute in text inputs and the arrows on - // select elements in input groups. To fix it, we float the input. Details: - // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 - float: left; - - width: 100%; - margin-bottom: 0; - } -} - -// Sizing options -// -// Remix the default form control sizing classes into new ones for easier -// manipulation. - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - .input-lg(); -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - .input-sm(); -} - - -// Display as table-cell -// ------------------------- -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; - - &:not(:first-child):not(:last-child) { - border-radius: 0; - } -} -// Addon and addon wrapper for buttons -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; // Match the inputs -} - -// Text input groups -// ------------------------- -.input-group-addon { - padding: @padding-base-vertical @padding-base-horizontal; - font-size: @font-size-base; - font-weight: normal; - line-height: 1; - color: @input-color; - text-align: center; - background-color: @input-group-addon-bg; - border: 1px solid @input-group-addon-border-color; - border-radius: @border-radius-base; - - // Sizing - &.input-sm { - padding: @padding-small-vertical @padding-small-horizontal; - font-size: @font-size-small; - border-radius: @border-radius-small; - } - &.input-lg { - padding: @padding-large-vertical @padding-large-horizontal; - font-size: @font-size-large; - border-radius: @border-radius-large; - } - - // Nuke default margins from checkboxes and radios to vertically center within. - input[type="radio"], - input[type="checkbox"] { - margin-top: 0; - } -} - -// Reset rounded corners -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - .border-right-radius(0); -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - .border-left-radius(0); -} -.input-group-addon:last-child { - border-left: 0; -} - -// Button input groups -// ------------------------- -.input-group-btn { - position: relative; - // Jankily prevent input button groups from wrapping with `white-space` and - // `font-size` in combination with `inline-block` on buttons. - font-size: 0; - white-space: nowrap; - - // Negative margin for spacing, position for bringing hovered/focused/actived - // element above the siblings. - > .btn { - position: relative; - + .btn { - margin-left: -1px; - } - // Bring the "active" button to the front - &:hover, - &:focus, - &:active { - z-index: 2; - } - } - - // Negative margin to only have a 1px border between the two - &:first-child { - > .btn, - > .btn-group { - margin-right: -1px; - } - } - &:last-child { - > .btn, - > .btn-group { - margin-left: -1px; - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/jumbotron.less b/platforms/android/assets/www/lib/bootstrap/less/jumbotron.less deleted file mode 100644 index 27cd8b81..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/jumbotron.less +++ /dev/null @@ -1,48 +0,0 @@ -// -// Jumbotron -// -------------------------------------------------- - - -.jumbotron { - padding: @jumbotron-padding; - margin-bottom: @jumbotron-padding; - color: @jumbotron-color; - background-color: @jumbotron-bg; - - h1, - .h1 { - color: @jumbotron-heading-color; - } - p { - margin-bottom: (@jumbotron-padding / 2); - font-size: @jumbotron-font-size; - font-weight: 200; - } - - > hr { - border-top-color: darken(@jumbotron-bg, 10%); - } - - .container & { - border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container - } - - .container { - max-width: 100%; - } - - @media screen and (min-width: @screen-sm-min) { - padding-top: (@jumbotron-padding * 1.6); - padding-bottom: (@jumbotron-padding * 1.6); - - .container & { - padding-left: (@jumbotron-padding * 2); - padding-right: (@jumbotron-padding * 2); - } - - h1, - .h1 { - font-size: (@font-size-base * 4.5); - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/labels.less b/platforms/android/assets/www/lib/bootstrap/less/labels.less deleted file mode 100644 index 9a5a2700..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/labels.less +++ /dev/null @@ -1,64 +0,0 @@ -// -// Labels -// -------------------------------------------------- - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: @label-color; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; - - // Add hover effects, but only for links - a& { - &:hover, - &:focus { - color: @label-link-hover-color; - text-decoration: none; - cursor: pointer; - } - } - - // Empty labels collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for labels in buttons - .btn & { - position: relative; - top: -1px; - } -} - -// Colors -// Contextual variations (linked labels get darker on :hover) - -.label-default { - .label-variant(@label-default-bg); -} - -.label-primary { - .label-variant(@label-primary-bg); -} - -.label-success { - .label-variant(@label-success-bg); -} - -.label-info { - .label-variant(@label-info-bg); -} - -.label-warning { - .label-variant(@label-warning-bg); -} - -.label-danger { - .label-variant(@label-danger-bg); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/list-group.less b/platforms/android/assets/www/lib/bootstrap/less/list-group.less deleted file mode 100644 index 1946bf59..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/list-group.less +++ /dev/null @@ -1,131 +0,0 @@ -// -// List groups -// -------------------------------------------------- - - -// Base class -// -// Easily usable on <ul>, <ol>, or <div>. - -.list-group { - // No need to set list-style: none; since .list-group-item is block level - margin-bottom: 20px; - padding-left: 0; // reset padding because ul and ol -} - - -// Individual list items -// -// Use on `li`s or `div`s within the `.list-group` parent. - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - // Place the border on the list items and negative margin up for better styling - margin-bottom: -1px; - background-color: @list-group-bg; - border: 1px solid @list-group-border; - - // Round the first and last items - &:first-child { - .border-top-radius(@list-group-border-radius); - } - &:last-child { - margin-bottom: 0; - .border-bottom-radius(@list-group-border-radius); - } - - // Align badges within list items - > .badge { - float: right; - } - > .badge + .badge { - margin-right: 5px; - } -} - - -// Linked list items -// -// Use anchor elements instead of `li`s or `div`s to create linked list items. -// Includes an extra `.active` modifier class for showing selected items. - -a.list-group-item { - color: @list-group-link-color; - - .list-group-item-heading { - color: @list-group-link-heading-color; - } - - // Hover state - &:hover, - &:focus { - text-decoration: none; - color: @list-group-link-hover-color; - background-color: @list-group-hover-bg; - } -} - -.list-group-item { - // Disabled state - &.disabled, - &.disabled:hover, - &.disabled:focus { - background-color: @list-group-disabled-bg; - color: @list-group-disabled-color; - - // Force color to inherit for custom content - .list-group-item-heading { - color: inherit; - } - .list-group-item-text { - color: @list-group-disabled-text-color; - } - } - - // Active class on item itself, not parent - &.active, - &.active:hover, - &.active:focus { - z-index: 2; // Place active items above their siblings for proper border styling - color: @list-group-active-color; - background-color: @list-group-active-bg; - border-color: @list-group-active-border; - - // Force color to inherit for custom content - .list-group-item-heading, - .list-group-item-heading > small, - .list-group-item-heading > .small { - color: inherit; - } - .list-group-item-text { - color: @list-group-active-text-color; - } - } -} - - -// Contextual variants -// -// Add modifier classes to change text and background color on individual items. -// Organizationally, this must come after the `:hover` states. - -.list-group-item-variant(success; @state-success-bg; @state-success-text); -.list-group-item-variant(info; @state-info-bg; @state-info-text); -.list-group-item-variant(warning; @state-warning-bg; @state-warning-text); -.list-group-item-variant(danger; @state-danger-bg; @state-danger-text); - - -// Custom content options -// -// Extra classes for creating well-formatted content within `.list-group-item`s. - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/media.less b/platforms/android/assets/www/lib/bootstrap/less/media.less deleted file mode 100644 index 5ad22cd6..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/media.less +++ /dev/null @@ -1,56 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media { - > .pull-left { - margin-right: 10px; - } - > .pull-right { - margin-left: 10px; - } -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - padding-left: 0; - list-style: none; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins.less b/platforms/android/assets/www/lib/bootstrap/less/mixins.less deleted file mode 100644 index af4408fc..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins.less +++ /dev/null @@ -1,39 +0,0 @@ -// Mixins -// -------------------------------------------------- - -// Utilities -@import "mixins/hide-text.less"; -@import "mixins/opacity.less"; -@import "mixins/image.less"; -@import "mixins/labels.less"; -@import "mixins/reset-filter.less"; -@import "mixins/resize.less"; -@import "mixins/responsive-visibility.less"; -@import "mixins/size.less"; -@import "mixins/tab-focus.less"; -@import "mixins/text-emphasis.less"; -@import "mixins/text-overflow.less"; -@import "mixins/vendor-prefixes.less"; - -// Components -@import "mixins/alerts.less"; -@import "mixins/buttons.less"; -@import "mixins/panels.less"; -@import "mixins/pagination.less"; -@import "mixins/list-group.less"; -@import "mixins/nav-divider.less"; -@import "mixins/forms.less"; -@import "mixins/progress-bar.less"; -@import "mixins/table-row.less"; - -// Skins -@import "mixins/background-variant.less"; -@import "mixins/border-radius.less"; -@import "mixins/gradients.less"; - -// Layout -@import "mixins/clearfix.less"; -@import "mixins/center-block.less"; -@import "mixins/nav-vertical-align.less"; -@import "mixins/grid-framework.less"; -@import "mixins/grid.less"; diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/alerts.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/alerts.less deleted file mode 100644 index 396196f4..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/alerts.less +++ /dev/null @@ -1,14 +0,0 @@ -// Alerts - -.alert-variant(@background; @border; @text-color) { - background-color: @background; - border-color: @border; - color: @text-color; - - hr { - border-top-color: darken(@border, 5%); - } - .alert-link { - color: darken(@text-color, 10%); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/background-variant.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/background-variant.less deleted file mode 100644 index 556e490d..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/background-variant.less +++ /dev/null @@ -1,8 +0,0 @@ -// Contextual backgrounds - -.bg-variant(@color) { - background-color: @color; - a&:hover { - background-color: darken(@color, 10%); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/border-radius.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/border-radius.less deleted file mode 100644 index ca05dbf4..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/border-radius.less +++ /dev/null @@ -1,18 +0,0 @@ -// Single side border-radius - -.border-top-radius(@radius) { - border-top-right-radius: @radius; - border-top-left-radius: @radius; -} -.border-right-radius(@radius) { - border-bottom-right-radius: @radius; - border-top-right-radius: @radius; -} -.border-bottom-radius(@radius) { - border-bottom-right-radius: @radius; - border-bottom-left-radius: @radius; -} -.border-left-radius(@radius) { - border-bottom-left-radius: @radius; - border-top-left-radius: @radius; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/buttons.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/buttons.less deleted file mode 100644 index 409f8f20..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/buttons.less +++ /dev/null @@ -1,50 +0,0 @@ -// Button variants -// -// Easily pump out default styles, as well as :hover, :focus, :active, -// and disabled options for all buttons - -.button-variant(@color; @background; @border) { - color: @color; - background-color: @background; - border-color: @border; - - &:hover, - &:focus, - &:active, - &.active, - .open > .dropdown-toggle& { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 12%); - } - &:active, - &.active, - .open > .dropdown-toggle& { - background-image: none; - } - &.disabled, - &[disabled], - fieldset[disabled] & { - &, - &:hover, - &:focus, - &:active, - &.active { - background-color: @background; - border-color: @border; - } - } - - .badge { - color: @background; - background-color: @color; - } -} - -// Button sizes -.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - border-radius: @border-radius; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/center-block.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/center-block.less deleted file mode 100644 index d18d6de9..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/center-block.less +++ /dev/null @@ -1,7 +0,0 @@ -// Center-align a block level element - -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/clearfix.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/clearfix.less deleted file mode 100644 index 3f7a3820..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/clearfix.less +++ /dev/null @@ -1,22 +0,0 @@ -// Clearfix -// -// For modern browsers -// 1. The space content is one way to avoid an Opera bug when the -// contenteditable attribute is included anywhere else in the document. -// Otherwise it causes space to appear at the top and bottom of elements -// that are clearfixed. -// 2. The use of `table` rather than `block` is only necessary if using -// `:before` to contain the top-margins of child elements. -// -// Source: http://nicolasgallagher.com/micro-clearfix-hack/ - -.clearfix() { - &:before, - &:after { - content: " "; // 1 - display: table; // 2 - } - &:after { - clear: both; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/forms.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/forms.less deleted file mode 100644 index e36c4a8c..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/forms.less +++ /dev/null @@ -1,81 +0,0 @@ -// Form validation states -// -// Used in forms.less to generate the form validation CSS for warnings, errors, -// and successes. - -.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { - // Color the label and help text - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline { - color: @text-color; - } - // Set the border and box shadow on specific inputs to match - .form-control { - border-color: @border-color; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@border-color, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); - .box-shadow(@shadow); - } - } - // Set validation states also for addons - .input-group-addon { - color: @text-color; - border-color: @border-color; - background-color: @background-color; - } - // Optional feedback icon - .form-control-feedback { - color: @text-color; - } -} - - -// Form control focus state -// -// Generate a customized focus state and for any input with the specified color, -// which defaults to the `@input-border-focus` variable. -// -// We highly encourage you to not customize the default value, but instead use -// this to tweak colors on an as-needed basis. This aesthetic change is based on -// WebKit's default styles, but applicable to a wider range of browsers. Its -// usability and accessibility should be taken into account with any change. -// -// Example usage: change the default blue border and shadow to white for better -// contrast against a dark gray background. -.form-control-focus(@color: @input-border-focus) { - @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); - &:focus { - border-color: @color; - outline: 0; - .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); - } -} - -// Form control sizing -// -// Relative text size, padding, and border-radii changes for form controls. For -// horizontal sizing, wrap controls in the predefined grid classes. `<select>` -// element gets special love because it's special, and that's a fact! -.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - height: @input-height; - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - border-radius: @border-radius; - - select& { - height: @input-height; - line-height: @input-height; - } - - textarea&, - select[multiple]& { - height: auto; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/gradients.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/gradients.less deleted file mode 100644 index 0b88a89c..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/gradients.less +++ /dev/null @@ -1,59 +0,0 @@ -// Gradients - -#gradient { - - // Horizontal gradient, from left to right - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - // Vertical gradient, from top to bottom - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { - background-repeat: repeat-x; - background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12 - background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - } - .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@inner-color: #555; @outer-color: #333) { - background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); - background-image: radial-gradient(circle, @inner-color, @outer-color); - background-repeat: no-repeat; - } - .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { - background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/grid-framework.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/grid-framework.less deleted file mode 100644 index 63178546..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/grid-framework.less +++ /dev/null @@ -1,91 +0,0 @@ -// Framework grid generation -// -// Used only by Bootstrap to generate the correct number of grid classes given -// any value of `@grid-columns`. - -.make-grid-columns() { - // Common styles for all sizes of grid columns, widths 1-12 - .col(@index) when (@index = 1) { // initial - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - position: relative; - // Prevent columns from collapsing when empty - min-height: 1px; - // Inner gutter via padding - padding-left: (@grid-gutter-width / 2); - padding-right: (@grid-gutter-width / 2); - } - } - .col(1); // kickstart it -} - -.float-grid-columns(@class) { - .col(@index) when (@index = 1) { // initial - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - float: left; - } - } - .col(1); // kickstart it -} - -.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { - .col-@{class}-@{index} { - width: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { - .col-@{class}-push-@{index} { - left: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { - .col-@{class}-push-0 { - left: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { - .col-@{class}-pull-@{index} { - right: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { - .col-@{class}-pull-0 { - right: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = offset) { - .col-@{class}-offset-@{index} { - margin-left: percentage((@index / @grid-columns)); - } -} - -// Basic looping in LESS -.loop-grid-columns(@index, @class, @type) when (@index >= 0) { - .calc-grid-column(@index, @class, @type); - // next iteration - .loop-grid-columns((@index - 1), @class, @type); -} - -// Create grid for specific class -.make-grid(@class) { - .float-grid-columns(@class); - .loop-grid-columns(@grid-columns, @class, width); - .loop-grid-columns(@grid-columns, @class, pull); - .loop-grid-columns(@grid-columns, @class, push); - .loop-grid-columns(@grid-columns, @class, offset); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/grid.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/grid.less deleted file mode 100644 index cae5eaff..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/grid.less +++ /dev/null @@ -1,122 +0,0 @@ -// Grid system -// -// Generate semantic grid columns with these mixins. - -// Centered container element -.container-fixed(@gutter: @grid-gutter-width) { - margin-right: auto; - margin-left: auto; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - &:extend(.clearfix all); -} - -// Creates a wrapper for a series of columns -.make-row(@gutter: @grid-gutter-width) { - margin-left: (@gutter / -2); - margin-right: (@gutter / -2); - &:extend(.clearfix all); -} - -// Generate the extra small columns -.make-xs-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - float: left; - width: percentage((@columns / @grid-columns)); - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); -} -.make-xs-column-offset(@columns) { - margin-left: percentage((@columns / @grid-columns)); -} -.make-xs-column-push(@columns) { - left: percentage((@columns / @grid-columns)); -} -.make-xs-column-pull(@columns) { - right: percentage((@columns / @grid-columns)); -} - -// Generate the small columns -.make-sm-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-sm-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-offset(@columns) { - @media (min-width: @screen-sm-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-push(@columns) { - @media (min-width: @screen-sm-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-pull(@columns) { - @media (min-width: @screen-sm-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the medium columns -.make-md-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-md-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-md-column-offset(@columns) { - @media (min-width: @screen-md-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-push(@columns) { - @media (min-width: @screen-md-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-pull(@columns) { - @media (min-width: @screen-md-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the large columns -.make-lg-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-lg-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-offset(@columns) { - @media (min-width: @screen-lg-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-push(@columns) { - @media (min-width: @screen-lg-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-pull(@columns) { - @media (min-width: @screen-lg-min) { - right: percentage((@columns / @grid-columns)); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/hide-text.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/hide-text.less deleted file mode 100644 index c2315e57..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/hide-text.less +++ /dev/null @@ -1,21 +0,0 @@ -// CSS image replacement -// -// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for -// mixins being reused as classes with the same name, this doesn't hold up. As -// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. -// -// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 - -// Deprecated as of v3.0.1 (will be removed in v4) -.hide-text() { - font: ~"0/0" a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -// New mixin to use as of v3.0.1 -.text-hide() { - .hide-text(); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/image.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/image.less deleted file mode 100644 index 5d2cccb2..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/image.less +++ /dev/null @@ -1,34 +0,0 @@ -// Image Mixins -// - Responsive image -// - Retina image - - -// Responsive image -// -// Keep images from scaling beyond the width of their parents. -.img-responsive(@display: block) { - display: @display; - width: 100% \9; // Force IE10 and below to size SVG images correctly - max-width: 100%; // Part 1: Set a maximum relative to the parent - height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching -} - - -// Retina image -// -// Short retina mixin for setting background-image and -size. Note that the -// spelling of `min--moz-device-pixel-ratio` is intentional. -.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { - background-image: url("@{file-1x}"); - - @media - only screen and (-webkit-min-device-pixel-ratio: 2), - only screen and ( min--moz-device-pixel-ratio: 2), - only screen and ( -o-min-device-pixel-ratio: 2/1), - only screen and ( min-device-pixel-ratio: 2), - only screen and ( min-resolution: 192dpi), - only screen and ( min-resolution: 2dppx) { - background-image: url("@{file-2x}"); - background-size: @width-1x @height-1x; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/labels.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/labels.less deleted file mode 100644 index 6f9e490b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/labels.less +++ /dev/null @@ -1,12 +0,0 @@ -// Labels - -.label-variant(@color) { - background-color: @color; - - &[href] { - &:hover, - &:focus { - background-color: darken(@color, 10%); - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/list-group.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/list-group.less deleted file mode 100644 index 8b5b065c..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/list-group.less +++ /dev/null @@ -1,29 +0,0 @@ -// List Groups - -.list-group-item-variant(@state; @background; @color) { - .list-group-item-@{state} { - color: @color; - background-color: @background; - - a& { - color: @color; - - .list-group-item-heading { - color: inherit; - } - - &:hover, - &:focus { - color: @color; - background-color: darken(@background, 5%); - } - &.active, - &.active:hover, - &.active:focus { - color: #fff; - background-color: @color; - border-color: @color; - } - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-divider.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-divider.less deleted file mode 100644 index feb1e9ed..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-divider.less +++ /dev/null @@ -1,10 +0,0 @@ -// Horizontal dividers -// -// Dividers (basically an hr) within dropdowns and nav lists - -.nav-divider(@color: #e5e5e5) { - height: 1px; - margin: ((@line-height-computed / 2) - 1) 0; - overflow: hidden; - background-color: @color; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-vertical-align.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-vertical-align.less deleted file mode 100644 index d458c786..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/nav-vertical-align.less +++ /dev/null @@ -1,9 +0,0 @@ -// Navbar vertical align -// -// Vertically center elements in the navbar. -// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. - -.navbar-vertical-align(@element-height) { - margin-top: ((@navbar-height - @element-height) / 2); - margin-bottom: ((@navbar-height - @element-height) / 2); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/opacity.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/opacity.less deleted file mode 100644 index 33ed25ce..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/opacity.less +++ /dev/null @@ -1,8 +0,0 @@ -// Opacity - -.opacity(@opacity) { - opacity: @opacity; - // IE8 filter - @opacity-ie: (@opacity * 100); - filter: ~"alpha(opacity=@{opacity-ie})"; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/pagination.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/pagination.less deleted file mode 100644 index 7deb505d..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/pagination.less +++ /dev/null @@ -1,23 +0,0 @@ -// Pagination - -.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) { - > li { - > a, - > span { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - } - &:first-child { - > a, - > span { - .border-left-radius(@border-radius); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius); - } - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/panels.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/panels.less deleted file mode 100644 index 49ee10d4..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/panels.less +++ /dev/null @@ -1,24 +0,0 @@ -// Panels - -.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { - border-color: @border; - - & > .panel-heading { - color: @heading-text-color; - background-color: @heading-bg-color; - border-color: @heading-border; - - + .panel-collapse > .panel-body { - border-top-color: @border; - } - .badge { - color: @heading-bg-color; - background-color: @heading-text-color; - } - } - & > .panel-footer { - + .panel-collapse > .panel-body { - border-bottom-color: @border; - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/progress-bar.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/progress-bar.less deleted file mode 100644 index f07996a3..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/progress-bar.less +++ /dev/null @@ -1,10 +0,0 @@ -// Progress bars - -.progress-bar-variant(@color) { - background-color: @color; - - // Deprecated parent class requirement as of v3.2.0 - .progress-striped & { - #gradient > .striped(); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/reset-filter.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/reset-filter.less deleted file mode 100644 index 68cdb5e1..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/reset-filter.less +++ /dev/null @@ -1,8 +0,0 @@ -// Reset filters for IE -// -// When you need to remove a gradient background, do not forget to use this to reset -// the IE filter for IE9 and below. - -.reset-filter() { - filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/resize.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/resize.less deleted file mode 100644 index 3acd3afd..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/resize.less +++ /dev/null @@ -1,6 +0,0 @@ -// Resize anything - -.resizable(@direction) { - resize: @direction; // Options: horizontal, vertical, both - overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/responsive-visibility.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/responsive-visibility.less deleted file mode 100644 index f7951c3d..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/responsive-visibility.less +++ /dev/null @@ -1,15 +0,0 @@ -// Responsive utilities - -// -// More easily include all the states for responsive-utilities.less. -.responsive-visibility() { - display: block !important; - table& { display: table; } - tr& { display: table-row !important; } - th&, - td& { display: table-cell !important; } -} - -.responsive-invisibility() { - display: none !important; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/size.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/size.less deleted file mode 100644 index a8be6508..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/size.less +++ /dev/null @@ -1,10 +0,0 @@ -// Sizing shortcuts - -.size(@width; @height) { - width: @width; - height: @height; -} - -.square(@size) { - .size(@size; @size); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/tab-focus.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/tab-focus.less deleted file mode 100644 index 1f1f05ab..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/tab-focus.less +++ /dev/null @@ -1,9 +0,0 @@ -// WebKit-style focus - -.tab-focus() { - // Default - outline: thin dotted; - // WebKit - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/table-row.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/table-row.less deleted file mode 100644 index 0f287f1a..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/table-row.less +++ /dev/null @@ -1,28 +0,0 @@ -// Tables - -.table-row-variant(@state; @background) { - // Exact selectors below required to override `.table-striped` and prevent - // inheritance to nested tables. - .table > thead > tr, - .table > tbody > tr, - .table > tfoot > tr { - > td.@{state}, - > th.@{state}, - &.@{state} > td, - &.@{state} > th { - background-color: @background; - } - } - - // Hover states for `.table-hover` - // Note: this is not available for cells or rows within `thead` or `tfoot`. - .table-hover > tbody > tr { - > td.@{state}:hover, - > th.@{state}:hover, - &.@{state}:hover > td, - &:hover > .@{state}, - &.@{state}:hover > th { - background-color: darken(@background, 5%); - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/text-emphasis.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/text-emphasis.less deleted file mode 100644 index 0868ef9f..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/text-emphasis.less +++ /dev/null @@ -1,8 +0,0 @@ -// Typography - -.text-emphasis-variant(@color) { - color: @color; - a&:hover { - color: darken(@color, 10%); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/text-overflow.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/text-overflow.less deleted file mode 100644 index c11ad2fb..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/text-overflow.less +++ /dev/null @@ -1,8 +0,0 @@ -// Text overflow -// Requires inline-block or block for proper styling - -.text-overflow() { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/mixins/vendor-prefixes.less b/platforms/android/assets/www/lib/bootstrap/less/mixins/vendor-prefixes.less deleted file mode 100644 index e2008c8b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/mixins/vendor-prefixes.less +++ /dev/null @@ -1,224 +0,0 @@ -// Vendor Prefixes -// -// All vendor mixins are deprecated as of v3.2.0 due to the introduction of -// Autoprefixer in our Gruntfile. They will be removed in v4. - -// - Animations -// - Backface visibility -// - Box shadow -// - Box sizing -// - Content columns -// - Hyphens -// - Placeholder text -// - Transformations -// - Transitions -// - User Select - - -// Animations -.animation(@animation) { - -webkit-animation: @animation; - -o-animation: @animation; - animation: @animation; -} -.animation-name(@name) { - -webkit-animation-name: @name; - animation-name: @name; -} -.animation-duration(@duration) { - -webkit-animation-duration: @duration; - animation-duration: @duration; -} -.animation-timing-function(@timing-function) { - -webkit-animation-timing-function: @timing-function; - animation-timing-function: @timing-function; -} -.animation-delay(@delay) { - -webkit-animation-delay: @delay; - animation-delay: @delay; -} -.animation-iteration-count(@iteration-count) { - -webkit-animation-iteration-count: @iteration-count; - animation-iteration-count: @iteration-count; -} -.animation-direction(@direction) { - -webkit-animation-direction: @direction; - animation-direction: @direction; -} -.animation-fill-mode(@fill-mode) { - -webkit-animation-fill-mode: @fill-mode; - animation-fill-mode: @fill-mode; -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden` - -.backface-visibility(@visibility){ - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Drop shadows -// -// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's -// supported browsers that have box shadow capabilities now support it. - -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 - box-shadow: @shadow; -} - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// CSS3 Content Columns -.content-columns(@column-count; @column-gap: @grid-gutter-width) { - -webkit-column-count: @column-count; - -moz-column-count: @column-count; - column-count: @column-count; - -webkit-column-gap: @column-gap; - -moz-column-gap: @column-gap; - column-gap: @column-gap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; // IE10+ - -o-hyphens: @mode; - hyphens: @mode; -} - -// Placeholder text -.placeholder(@color: @input-color-placeholder) { - &::-moz-placeholder { color: @color; // Firefox - opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 - &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ - &::-webkit-input-placeholder { color: @color; } // Safari and Chrome -} - -// Transformations -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -ms-transform: scale(@ratio); // IE9 only - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.scale(@ratioX; @ratioY) { - -webkit-transform: scale(@ratioX, @ratioY); - -ms-transform: scale(@ratioX, @ratioY); // IE9 only - -o-transform: scale(@ratioX, @ratioY); - transform: scale(@ratioX, @ratioY); -} -.scaleX(@ratio) { - -webkit-transform: scaleX(@ratio); - -ms-transform: scaleX(@ratio); // IE9 only - -o-transform: scaleX(@ratio); - transform: scaleX(@ratio); -} -.scaleY(@ratio) { - -webkit-transform: scaleY(@ratio); - -ms-transform: scaleY(@ratio); // IE9 only - -o-transform: scaleY(@ratio); - transform: scaleY(@ratio); -} -.skew(@x; @y) { - -webkit-transform: skewX(@x) skewY(@y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ - -o-transform: skewX(@x) skewY(@y); - transform: skewX(@x) skewY(@y); -} -.translate(@x; @y) { - -webkit-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); // IE9 only - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.translate3d(@x; @y; @z) { - -webkit-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); // IE9 only - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.rotateX(@degrees) { - -webkit-transform: rotateX(@degrees); - -ms-transform: rotateX(@degrees); // IE9 only - -o-transform: rotateX(@degrees); - transform: rotateX(@degrees); -} -.rotateY(@degrees) { - -webkit-transform: rotateY(@degrees); - -ms-transform: rotateY(@degrees); // IE9 only - -o-transform: rotateY(@degrees); - transform: rotateY(@degrees); -} -.perspective(@perspective) { - -webkit-perspective: @perspective; - -moz-perspective: @perspective; - perspective: @perspective; -} -.perspective-origin(@perspective) { - -webkit-perspective-origin: @perspective; - -moz-perspective-origin: @perspective; - perspective-origin: @perspective; -} -.transform-origin(@origin) { - -webkit-transform-origin: @origin; - -moz-transform-origin: @origin; - -ms-transform-origin: @origin; // IE9 only - transform-origin: @origin; -} - - -// Transitions - -.transition(@transition) { - -webkit-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-property(@transition-property) { - -webkit-transition-property: @transition-property; - transition-property: @transition-property; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} -.transition-timing-function(@timing-function) { - -webkit-transition-timing-function: @timing-function; - transition-timing-function: @timing-function; -} -.transition-transform(@transition) { - -webkit-transition: -webkit-transform @transition; - -moz-transition: -moz-transform @transition; - -o-transition: -o-transform @transition; - transition: transform @transition; -} - - -// User select -// For selecting text on the page - -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; // IE10+ - user-select: @select; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/modals.less b/platforms/android/assets/www/lib/bootstrap/less/modals.less deleted file mode 100644 index 6da50ba9..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/modals.less +++ /dev/null @@ -1,150 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// .modal-open - body class for killing the scroll -// .modal - container to scroll within -// .modal-dialog - positioning shell for the actual modal -// .modal-content - actual modal w/ bg and corners and shit - -// Kill the scroll on the body -.modal-open { - overflow: hidden; -} - -// Container that the modal scrolls within -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindex-modal; - -webkit-overflow-scrolling: touch; - - // Prevent Chrome on Windows from adding a focus outline. For details, see - // https://github.com/twbs/bootstrap/pull/10951. - outline: 0; - - // When fading in the modal, animate it to slide down - &.fade .modal-dialog { - .translate3d(0, -25%, 0); - .transition-transform(~"0.3s ease-out"); - } - &.in .modal-dialog { .translate3d(0, 0, 0) } -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -// Shell div to position the modal with bottom padding -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} - -// Actual modal -.modal-content { - position: relative; - background-color: @modal-content-bg; - border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) - border: 1px solid @modal-content-border-color; - border-radius: @border-radius-large; - .box-shadow(0 3px 9px rgba(0,0,0,.5)); - background-clip: padding-box; - // Remove focus outline from opened modal - outline: 0; -} - -// Modal background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindex-modal-background; - background-color: @modal-backdrop-bg; - // Fade for backdrop - &.fade { .opacity(0); } - &.in { .opacity(@modal-backdrop-opacity); } -} - -// Modal header -// Top section of the modal w/ title and dismiss -.modal-header { - padding: @modal-title-padding; - border-bottom: 1px solid @modal-header-border-color; - min-height: (@modal-title-padding + @modal-title-line-height); -} -// Close icon -.modal-header .close { - margin-top: -2px; -} - -// Title text within header -.modal-title { - margin: 0; - line-height: @modal-title-line-height; -} - -// Modal body -// Where all modal content resides (sibling of .modal-header and .modal-footer) -.modal-body { - position: relative; - padding: @modal-inner-padding; -} - -// Footer (for actions) -.modal-footer { - padding: @modal-inner-padding; - text-align: right; // right align buttons - border-top: 1px solid @modal-footer-border-color; - &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} - -// Measure scrollbar width for padding body during modal show/hide -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -// Scale up the modal -@media (min-width: @screen-sm-min) { - // Automatically set modal's width for larger viewports - .modal-dialog { - width: @modal-md; - margin: 30px auto; - } - .modal-content { - .box-shadow(0 5px 15px rgba(0,0,0,.5)); - } - - // Modal sizes - .modal-sm { width: @modal-sm; } -} - -@media (min-width: @screen-md-min) { - .modal-lg { width: @modal-lg; } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/navbar.less b/platforms/android/assets/www/lib/bootstrap/less/navbar.less deleted file mode 100644 index 55bfd294..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/navbar.less +++ /dev/null @@ -1,655 +0,0 @@ -// -// Navbars -// -------------------------------------------------- - - -// Wrapper and base class -// -// Provide a static navbar from which we expand to create full-width, fixed, and -// other navbar variations. - -.navbar { - position: relative; - min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) - margin-bottom: @navbar-margin-bottom; - border: 1px solid transparent; - - // Prevent floats from breaking the navbar - &:extend(.clearfix all); - - @media (min-width: @grid-float-breakpoint) { - border-radius: @navbar-border-radius; - } -} - - -// Navbar heading -// -// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy -// styling of responsive aspects. - -.navbar-header { - &:extend(.clearfix all); - - @media (min-width: @grid-float-breakpoint) { - float: left; - } -} - - -// Navbar collapse (body) -// -// Group your navbar content into this for easy collapsing and expanding across -// various device sizes. By default, this content is collapsed when <768px, but -// will expand past that for a horizontal display. -// -// To start (on mobile devices) the navbar links, forms, and buttons are stacked -// vertically and include a `max-height` to overflow in case you have too much -// content for the user's viewport. - -.navbar-collapse { - overflow-x: visible; - padding-right: @navbar-padding-horizontal; - padding-left: @navbar-padding-horizontal; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,.1); - &:extend(.clearfix all); - -webkit-overflow-scrolling: touch; - - &.in { - overflow-y: auto; - } - - @media (min-width: @grid-float-breakpoint) { - width: auto; - border-top: 0; - box-shadow: none; - - &.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; // Override default setting - overflow: visible !important; - } - - &.in { - overflow-y: visible; - } - - // Undo the collapse side padding for navbars with containers to ensure - // alignment of right-aligned contents. - .navbar-fixed-top &, - .navbar-static-top &, - .navbar-fixed-bottom & { - padding-left: 0; - padding-right: 0; - } - } -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - .navbar-collapse { - max-height: @navbar-collapse-max-height; - - @media (max-width: @screen-xs-min) and (orientation: landscape) { - max-height: 200px; - } - } -} - - -// Both navbar header and collapse -// -// When a container is present, change the behavior of the header and collapse. - -.container, -.container-fluid { - > .navbar-header, - > .navbar-collapse { - margin-right: -@navbar-padding-horizontal; - margin-left: -@navbar-padding-horizontal; - - @media (min-width: @grid-float-breakpoint) { - margin-right: 0; - margin-left: 0; - } - } -} - - -// -// Navbar alignment options -// -// Display the navbar across the entirety of the page or fixed it to the top or -// bottom of the page. - -// Static top (unfixed, but 100% wide) navbar -.navbar-static-top { - z-index: @zindex-navbar; - border-width: 0 0 1px; - - @media (min-width: @grid-float-breakpoint) { - border-radius: 0; - } -} - -// Fix the top/bottom navbars when screen real estate supports it -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: @zindex-navbar-fixed; - .translate3d(0, 0, 0); - - // Undo the rounded corners - @media (min-width: @grid-float-breakpoint) { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; // override .navbar defaults - border-width: 1px 0 0; -} - - -// Brand/project name - -.navbar-brand { - float: left; - padding: @navbar-padding-vertical @navbar-padding-horizontal; - font-size: @font-size-large; - line-height: @line-height-computed; - height: @navbar-height; - - &:hover, - &:focus { - text-decoration: none; - } - - @media (min-width: @grid-float-breakpoint) { - .navbar > .container &, - .navbar > .container-fluid & { - margin-left: -@navbar-padding-horizontal; - } - } -} - - -// Navbar toggle -// -// Custom button for toggling the `.navbar-collapse`, powered by the collapse -// JavaScript plugin. - -.navbar-toggle { - position: relative; - float: right; - margin-right: @navbar-padding-horizontal; - padding: 9px 10px; - .navbar-vertical-align(34px); - background-color: transparent; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - border-radius: @border-radius-base; - - // We remove the `outline` here, but later compensate by attaching `:hover` - // styles to `:focus`. - &:focus { - outline: 0; - } - - // Bars - .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; - } - .icon-bar + .icon-bar { - margin-top: 4px; - } - - @media (min-width: @grid-float-breakpoint) { - display: none; - } -} - - -// Navbar nav links -// -// Builds on top of the `.nav` components with its own modifier class to make -// the nav the full height of the horizontal nav (above 768px). - -.navbar-nav { - margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal; - - > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: @line-height-computed; - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - > li > a, - .dropdown-header { - padding: 5px 15px 5px 25px; - } - > li > a { - line-height: @line-height-computed; - &:hover, - &:focus { - background-image: none; - } - } - } - } - - // Uncollapse the nav - @media (min-width: @grid-float-breakpoint) { - float: left; - margin: 0; - - > li { - float: left; - > a { - padding-top: @navbar-padding-vertical; - padding-bottom: @navbar-padding-vertical; - } - } - - &.navbar-right:last-child { - margin-right: -@navbar-padding-horizontal; - } - } -} - - -// Component alignment -// -// Repurpose the pull utilities as their own navbar utilities to avoid specificity -// issues with parents and chaining. Only do this when the navbar is uncollapsed -// though so that navbar contents properly stack and align in mobile. - -@media (min-width: @grid-float-breakpoint) { - .navbar-left { .pull-left(); } - .navbar-right { .pull-right(); } -} - - -// Navbar form -// -// Extension of the `.form-inline` with some extra flavor for optimum display in -// our navbars. - -.navbar-form { - margin-left: -@navbar-padding-horizontal; - margin-right: -@navbar-padding-horizontal; - padding: 10px @navbar-padding-horizontal; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - .box-shadow(@shadow); - - // Mixin behavior for optimum display - .form-inline(); - - .form-group { - @media (max-width: @grid-float-breakpoint-max) { - margin-bottom: 5px; - } - } - - // Vertically center in expanded, horizontal navbar - .navbar-vertical-align(@input-height-base); - - // Undo 100% width for pull classes - @media (min-width: @grid-float-breakpoint) { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - .box-shadow(none); - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: -@navbar-padding-horizontal; - } - } -} - - -// Dropdown menus - -// Menu position and menu carets -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - .border-top-radius(0); -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - .border-bottom-radius(0); -} - - -// Buttons in navbars -// -// Vertically center a button within a navbar (when *not* in a form). - -.navbar-btn { - .navbar-vertical-align(@input-height-base); - - &.btn-sm { - .navbar-vertical-align(@input-height-small); - } - &.btn-xs { - .navbar-vertical-align(22); - } -} - - -// Text in navbars -// -// Add a class to make any element properly align itself vertically within the navbars. - -.navbar-text { - .navbar-vertical-align(@line-height-computed); - - @media (min-width: @grid-float-breakpoint) { - float: left; - margin-left: @navbar-padding-horizontal; - margin-right: @navbar-padding-horizontal; - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: 0; - } - } -} - -// Alternate navbars -// -------------------------------------------------- - -// Default navbar -.navbar-default { - background-color: @navbar-default-bg; - border-color: @navbar-default-border; - - .navbar-brand { - color: @navbar-default-brand-color; - &:hover, - &:focus { - color: @navbar-default-brand-hover-color; - background-color: @navbar-default-brand-hover-bg; - } - } - - .navbar-text { - color: @navbar-default-color; - } - - .navbar-nav { - > li > a { - color: @navbar-default-link-color; - - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - background-color: @navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-active-color; - background-color: @navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - background-color: @navbar-default-link-disabled-bg; - } - } - } - - .navbar-toggle { - border-color: @navbar-default-toggle-border-color; - &:hover, - &:focus { - background-color: @navbar-default-toggle-hover-bg; - } - .icon-bar { - background-color: @navbar-default-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: @navbar-default-border; - } - - // Dropdown menu items - .navbar-nav { - // Remove background color from open dropdown - > .open > a { - &, - &:hover, - &:focus { - background-color: @navbar-default-link-active-bg; - color: @navbar-default-link-active-color; - } - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - > li > a { - color: @navbar-default-link-color; - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - background-color: @navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-active-color; - background-color: @navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - background-color: @navbar-default-link-disabled-bg; - } - } - } - } - } - - - // Links in navbars - // - // Add a class to ensure links outside the navbar nav are colored correctly. - - .navbar-link { - color: @navbar-default-link-color; - &:hover { - color: @navbar-default-link-hover-color; - } - } - - .btn-link { - color: @navbar-default-link-color; - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - } - } - } -} - -// Inverse navbar - -.navbar-inverse { - background-color: @navbar-inverse-bg; - border-color: @navbar-inverse-border; - - .navbar-brand { - color: @navbar-inverse-brand-color; - &:hover, - &:focus { - color: @navbar-inverse-brand-hover-color; - background-color: @navbar-inverse-brand-hover-bg; - } - } - - .navbar-text { - color: @navbar-inverse-color; - } - - .navbar-nav { - > li > a { - color: @navbar-inverse-link-color; - - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - background-color: @navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-active-color; - background-color: @navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - background-color: @navbar-inverse-link-disabled-bg; - } - } - } - - // Darken the responsive nav toggle - .navbar-toggle { - border-color: @navbar-inverse-toggle-border-color; - &:hover, - &:focus { - background-color: @navbar-inverse-toggle-hover-bg; - } - .icon-bar { - background-color: @navbar-inverse-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: darken(@navbar-inverse-bg, 7%); - } - - // Dropdowns - .navbar-nav { - > .open > a { - &, - &:hover, - &:focus { - background-color: @navbar-inverse-link-active-bg; - color: @navbar-inverse-link-active-color; - } - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display - .open .dropdown-menu { - > .dropdown-header { - border-color: @navbar-inverse-border; - } - .divider { - background-color: @navbar-inverse-border; - } - > li > a { - color: @navbar-inverse-link-color; - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - background-color: @navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-active-color; - background-color: @navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - background-color: @navbar-inverse-link-disabled-bg; - } - } - } - } - } - - .navbar-link { - color: @navbar-inverse-link-color; - &:hover { - color: @navbar-inverse-link-hover-color; - } - } - - .btn-link { - color: @navbar-inverse-link-color; - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - } - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/navs.less b/platforms/android/assets/www/lib/bootstrap/less/navs.less deleted file mode 100644 index 98a64307..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/navs.less +++ /dev/null @@ -1,242 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// Base class -// -------------------------------------------------- - -.nav { - margin-bottom: 0; - padding-left: 0; // Override default ul/ol - list-style: none; - &:extend(.clearfix all); - - > li { - position: relative; - display: block; - - > a { - position: relative; - display: block; - padding: @nav-link-padding; - &:hover, - &:focus { - text-decoration: none; - background-color: @nav-link-hover-bg; - } - } - - // Disabled state sets text to gray and nukes hover/tab effects - &.disabled > a { - color: @nav-disabled-link-color; - - &:hover, - &:focus { - color: @nav-disabled-link-hover-color; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; - } - } - } - - // Open dropdowns - .open > a { - &, - &:hover, - &:focus { - background-color: @nav-link-hover-bg; - border-color: @link-color; - } - } - - // Nav dividers (deprecated with v3.0.1) - // - // This should have been removed in v3 with the dropping of `.nav-list`, but - // we missed it. We don't currently support this anywhere, but in the interest - // of maintaining backward compatibility in case you use it, it's deprecated. - .nav-divider { - .nav-divider(); - } - - // Prevent IE8 from misplacing imgs - // - // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 - > li > a > img { - max-width: none; - } -} - - -// Tabs -// ------------------------- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid @nav-tabs-border-color; - > li { - float: left; - // Make the list-items overlay the bottom border - margin-bottom: -1px; - - // Actual tabs (as links) - > a { - margin-right: 2px; - line-height: @line-height-base; - border: 1px solid transparent; - border-radius: @border-radius-base @border-radius-base 0 0; - &:hover { - border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color; - } - } - - // Active state, and its :hover to override normal :hover - &.active > a { - &, - &:hover, - &:focus { - color: @nav-tabs-active-link-hover-color; - background-color: @nav-tabs-active-link-hover-bg; - border: 1px solid @nav-tabs-active-link-hover-border-color; - border-bottom-color: transparent; - cursor: default; - } - } - } - // pulling this in mainly for less shorthand - &.nav-justified { - .nav-justified(); - .nav-tabs-justified(); - } -} - - -// Pills -// ------------------------- -.nav-pills { - > li { - float: left; - - // Links rendered as pills - > a { - border-radius: @nav-pills-border-radius; - } - + li { - margin-left: 2px; - } - - // Active state - &.active > a { - &, - &:hover, - &:focus { - color: @nav-pills-active-link-hover-color; - background-color: @nav-pills-active-link-hover-bg; - } - } - } -} - - -// Stacked pills -.nav-stacked { - > li { - float: none; - + li { - margin-top: 2px; - margin-left: 0; // no need for this gap between nav items - } - } -} - - -// Nav variations -// -------------------------------------------------- - -// Justified nav links -// ------------------------- - -.nav-justified { - width: 100%; - - > li { - float: none; - > a { - text-align: center; - margin-bottom: 5px; - } - } - - > .dropdown .dropdown-menu { - top: auto; - left: auto; - } - - @media (min-width: @screen-sm-min) { - > li { - display: table-cell; - width: 1%; - > a { - margin-bottom: 0; - } - } - } -} - -// Move borders to anchors instead of bottom of list -// -// Mixin for adding on top the shared `.nav-justified` styles for our tabs -.nav-tabs-justified { - border-bottom: 0; - - > li > a { - // Override margin from .nav-tabs - margin-right: 0; - border-radius: @border-radius-base; - } - - > .active > a, - > .active > a:hover, - > .active > a:focus { - border: 1px solid @nav-tabs-justified-link-border-color; - } - - @media (min-width: @screen-sm-min) { - > li > a { - border-bottom: 1px solid @nav-tabs-justified-link-border-color; - border-radius: @border-radius-base @border-radius-base 0 0; - } - > .active > a, - > .active > a:hover, - > .active > a:focus { - border-bottom-color: @nav-tabs-justified-active-link-border-color; - } - } -} - - -// Tabbable tabs -// ------------------------- - -// Hide tabbable panes to start, show them when `.active` -.tab-content { - > .tab-pane { - display: none; - } - > .active { - display: block; - } -} - - -// Dropdowns -// ------------------------- - -// Specific dropdowns -.nav-tabs .dropdown-menu { - // make dropdown border overlap tab border - margin-top: -1px; - // Remove the top rounded corners here since there is a hard edge above the menu - .border-top-radius(0); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/normalize.less b/platforms/android/assets/www/lib/bootstrap/less/normalize.less deleted file mode 100644 index ce04b6a2..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/normalize.less +++ /dev/null @@ -1,425 +0,0 @@ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ - -// -// 1. Set default font family to sans-serif. -// 2. Prevent iOS text size adjust after orientation change, without disabling -// user zoom. -// - -html { - font-family: sans-serif; // 1 - -ms-text-size-adjust: 100%; // 2 - -webkit-text-size-adjust: 100%; // 2 -} - -// -// Remove default margin. -// - -body { - margin: 0; -} - -// HTML5 display definitions -// ========================================================================== - -// -// Correct `block` display not defined for any HTML5 element in IE 8/9. -// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. -// Correct `block` display not defined for `main` in IE 11. -// - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -// -// 1. Correct `inline-block` display not defined in IE 8/9. -// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. -// - -audio, -canvas, -progress, -video { - display: inline-block; // 1 - vertical-align: baseline; // 2 -} - -// -// Prevent modern browsers from displaying `audio` without controls. -// Remove excess height in iOS 5 devices. -// - -audio:not([controls]) { - display: none; - height: 0; -} - -// -// Address `[hidden]` styling not present in IE 8/9/10. -// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. -// - -[hidden], -template { - display: none; -} - -// Links -// ========================================================================== - -// -// Remove the gray background color from active links in IE 10. -// - -a { - background: transparent; -} - -// -// Improve readability when focused and also mouse hovered in all browsers. -// - -a:active, -a:hover { - outline: 0; -} - -// Text-level semantics -// ========================================================================== - -// -// Address styling not present in IE 8/9/10/11, Safari, and Chrome. -// - -abbr[title] { - border-bottom: 1px dotted; -} - -// -// Address style set to `bolder` in Firefox 4+, Safari, and Chrome. -// - -b, -strong { - font-weight: bold; -} - -// -// Address styling not present in Safari and Chrome. -// - -dfn { - font-style: italic; -} - -// -// Address variable `h1` font-size and margin within `section` and `article` -// contexts in Firefox 4+, Safari, and Chrome. -// - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -// -// Address styling not present in IE 8/9. -// - -mark { - background: #ff0; - color: #000; -} - -// -// Address inconsistent and variable font size in all browsers. -// - -small { - font-size: 80%; -} - -// -// Prevent `sub` and `sup` affecting `line-height` in all browsers. -// - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -// Embedded content -// ========================================================================== - -// -// Remove border when inside `a` element in IE 8/9/10. -// - -img { - border: 0; -} - -// -// Correct overflow not hidden in IE 9/10/11. -// - -svg:not(:root) { - overflow: hidden; -} - -// Grouping content -// ========================================================================== - -// -// Address margin not present in IE 8/9 and Safari. -// - -figure { - margin: 1em 40px; -} - -// -// Address differences between Firefox and other browsers. -// - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -// -// Contain overflow in all browsers. -// - -pre { - overflow: auto; -} - -// -// Address odd `em`-unit font size rendering in all browsers. -// - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -// Forms -// ========================================================================== - -// -// Known limitation: by default, Chrome and Safari on OS X allow very limited -// styling of `select`, unless a `border` property is set. -// - -// -// 1. Correct color not being inherited. -// Known issue: affects color of disabled elements. -// 2. Correct font properties not being inherited. -// 3. Address margins set differently in Firefox 4+, Safari, and Chrome. -// - -button, -input, -optgroup, -select, -textarea { - color: inherit; // 1 - font: inherit; // 2 - margin: 0; // 3 -} - -// -// Address `overflow` set to `hidden` in IE 8/9/10/11. -// - -button { - overflow: visible; -} - -// -// Address inconsistent `text-transform` inheritance for `button` and `select`. -// All other form control elements do not inherit `text-transform` values. -// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. -// Correct `select` style inheritance in Firefox. -// - -button, -select { - text-transform: none; -} - -// -// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` -// and `video` controls. -// 2. Correct inability to style clickable `input` types in iOS. -// 3. Improve usability and consistency of cursor style between image-type -// `input` and others. -// - -button, -html input[type="button"], // 1 -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // 2 - cursor: pointer; // 3 -} - -// -// Re-set default cursor for disabled elements. -// - -button[disabled], -html input[disabled] { - cursor: default; -} - -// -// Remove inner padding and border in Firefox 4+. -// - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -// -// Address Firefox 4+ setting `line-height` on `input` using `!important` in -// the UA stylesheet. -// - -input { - line-height: normal; -} - -// -// It's recommended that you don't attempt to style these elements. -// Firefox's implementation doesn't respect box-sizing, padding, or width. -// -// 1. Address box sizing set to `content-box` in IE 8/9/10. -// 2. Remove excess padding in IE 8/9/10. -// - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; // 1 - padding: 0; // 2 -} - -// -// Fix the cursor style for Chrome's increment/decrement buttons. For certain -// `font-size` values of the `input`, it causes the cursor style of the -// decrement button to change from `default` to `text`. -// - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -// -// 1. Address `appearance` set to `searchfield` in Safari and Chrome. -// 2. Address `box-sizing` set to `border-box` in Safari and Chrome -// (include `-moz` to future-proof). -// - -input[type="search"] { - -webkit-appearance: textfield; // 1 - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; // 2 - box-sizing: content-box; -} - -// -// Remove inner padding and search cancel button in Safari and Chrome on OS X. -// Safari (but not Chrome) clips the cancel button when the search input has -// padding (and `textfield` appearance). -// - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -// -// Define consistent border, margin, and padding. -// - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -// -// 1. Correct `color` not being inherited in IE 8/9/10/11. -// 2. Remove padding so people aren't caught out if they zero out fieldsets. -// - -legend { - border: 0; // 1 - padding: 0; // 2 -} - -// -// Remove default vertical scrollbar in IE 8/9/10/11. -// - -textarea { - overflow: auto; -} - -// -// Don't inherit the `font-weight` (applied by a rule above). -// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. -// - -optgroup { - font-weight: bold; -} - -// Tables -// ========================================================================== - -// -// Remove most spacing between table cells. -// - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/pager.less b/platforms/android/assets/www/lib/bootstrap/less/pager.less deleted file mode 100644 index 59103f44..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/pager.less +++ /dev/null @@ -1,55 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - padding-left: 0; - margin: @line-height-computed 0; - list-style: none; - text-align: center; - &:extend(.clearfix all); - li { - display: inline; - > a, - > span { - display: inline-block; - padding: 5px 14px; - background-color: @pager-bg; - border: 1px solid @pager-border; - border-radius: @pager-border-radius; - } - - > a:hover, - > a:focus { - text-decoration: none; - background-color: @pager-hover-bg; - } - } - - .next { - > a, - > span { - float: right; - } - } - - .previous { - > a, - > span { - float: left; - } - } - - .disabled { - > a, - > a:hover, - > a:focus, - > span { - color: @pager-disabled-color; - background-color: @pager-bg; - cursor: not-allowed; - } - } - -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/pagination.less b/platforms/android/assets/www/lib/bootstrap/less/pagination.less deleted file mode 100644 index b2856ae6..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/pagination.less +++ /dev/null @@ -1,88 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- -.pagination { - display: inline-block; - padding-left: 0; - margin: @line-height-computed 0; - border-radius: @border-radius-base; - - > li { - display: inline; // Remove list-style and block-level defaults - > a, - > span { - position: relative; - float: left; // Collapse white-space - padding: @padding-base-vertical @padding-base-horizontal; - line-height: @line-height-base; - text-decoration: none; - color: @pagination-color; - background-color: @pagination-bg; - border: 1px solid @pagination-border; - margin-left: -1px; - } - &:first-child { - > a, - > span { - margin-left: 0; - .border-left-radius(@border-radius-base); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius-base); - } - } - } - - > li > a, - > li > span { - &:hover, - &:focus { - color: @pagination-hover-color; - background-color: @pagination-hover-bg; - border-color: @pagination-hover-border; - } - } - - > .active > a, - > .active > span { - &, - &:hover, - &:focus { - z-index: 2; - color: @pagination-active-color; - background-color: @pagination-active-bg; - border-color: @pagination-active-border; - cursor: default; - } - } - - > .disabled { - > span, - > span:hover, - > span:focus, - > a, - > a:hover, - > a:focus { - color: @pagination-disabled-color; - background-color: @pagination-disabled-bg; - border-color: @pagination-disabled-border; - cursor: not-allowed; - } - } -} - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-lg { - .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large); -} - -// Small -.pagination-sm { - .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/panels.less b/platforms/android/assets/www/lib/bootstrap/less/panels.less deleted file mode 100644 index 2dc21316..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/panels.less +++ /dev/null @@ -1,243 +0,0 @@ -// -// Panels -// -------------------------------------------------- - - -// Base class -.panel { - margin-bottom: @line-height-computed; - background-color: @panel-bg; - border: 1px solid transparent; - border-radius: @panel-border-radius; - .box-shadow(0 1px 1px rgba(0,0,0,.05)); -} - -// Panel contents -.panel-body { - padding: @panel-body-padding; - &:extend(.clearfix all); -} - -// Optional heading -.panel-heading { - padding: @panel-heading-padding; - border-bottom: 1px solid transparent; - .border-top-radius((@panel-border-radius - 1)); - - > .dropdown .dropdown-toggle { - color: inherit; - } -} - -// Within heading, strip any `h*` tag of its default margins for spacing. -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: ceil((@font-size-base * 1.125)); - color: inherit; - - > a { - color: inherit; - } -} - -// Optional footer (stays gray in every modifier class) -.panel-footer { - padding: @panel-footer-padding; - background-color: @panel-footer-bg; - border-top: 1px solid @panel-inner-border; - .border-bottom-radius((@panel-border-radius - 1)); -} - - -// List groups in panels -// -// By default, space out list group content from panel headings to account for -// any kind of custom content between the two. - -.panel { - > .list-group { - margin-bottom: 0; - - .list-group-item { - border-width: 1px 0; - border-radius: 0; - } - - // Add border top radius for first one - &:first-child { - .list-group-item:first-child { - border-top: 0; - .border-top-radius((@panel-border-radius - 1)); - } - } - // Add border bottom radius for last one - &:last-child { - .list-group-item:last-child { - border-bottom: 0; - .border-bottom-radius((@panel-border-radius - 1)); - } - } - } -} -// Collapse space between when there's no additional content. -.panel-heading + .list-group { - .list-group-item:first-child { - border-top-width: 0; - } -} -.list-group + .panel-footer { - border-top-width: 0; -} - -// Tables in panels -// -// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and -// watch it go full width. - -.panel { - > .table, - > .table-responsive > .table, - > .panel-collapse > .table { - margin-bottom: 0; - } - // Add border top radius for first one - > .table:first-child, - > .table-responsive:first-child > .table:first-child { - .border-top-radius((@panel-border-radius - 1)); - - > thead:first-child, - > tbody:first-child { - > tr:first-child { - td:first-child, - th:first-child { - border-top-left-radius: (@panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-top-right-radius: (@panel-border-radius - 1); - } - } - } - } - // Add border bottom radius for last one - > .table:last-child, - > .table-responsive:last-child > .table:last-child { - .border-bottom-radius((@panel-border-radius - 1)); - - > tbody:last-child, - > tfoot:last-child { - > tr:last-child { - td:first-child, - th:first-child { - border-bottom-left-radius: (@panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-bottom-right-radius: (@panel-border-radius - 1); - } - } - } - } - > .panel-body + .table, - > .panel-body + .table-responsive { - border-top: 1px solid @table-border-color; - } - > .table > tbody:first-child > tr:first-child th, - > .table > tbody:first-child > tr:first-child td { - border-top: 0; - } - > .table-bordered, - > .table-responsive > .table-bordered { - border: 0; - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - > thead, - > tbody { - > tr:first-child { - > td, - > th { - border-bottom: 0; - } - } - } - > tbody, - > tfoot { - > tr:last-child { - > td, - > th { - border-bottom: 0; - } - } - } - } - > .table-responsive { - border: 0; - margin-bottom: 0; - } -} - - -// Collapsable panels (aka, accordion) -// -// Wrap a series of panels in `.panel-group` to turn them into an accordion with -// the help of our collapse JavaScript plugin. - -.panel-group { - margin-bottom: @line-height-computed; - - // Tighten up margin so it's only between panels - .panel { - margin-bottom: 0; - border-radius: @panel-border-radius; - + .panel { - margin-top: 5px; - } - } - - .panel-heading { - border-bottom: 0; - + .panel-collapse > .panel-body { - border-top: 1px solid @panel-inner-border; - } - } - .panel-footer { - border-top: 0; - + .panel-collapse .panel-body { - border-bottom: 1px solid @panel-inner-border; - } - } -} - - -// Contextual variations -.panel-default { - .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border); -} -.panel-primary { - .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border); -} -.panel-success { - .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border); -} -.panel-info { - .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border); -} -.panel-warning { - .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border); -} -.panel-danger { - .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/popovers.less b/platforms/android/assets/www/lib/bootstrap/less/popovers.less deleted file mode 100644 index bf6af40a..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/popovers.less +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindex-popover; - display: none; - max-width: @popover-max-width; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: @popover-bg; - background-clip: padding-box; - border: 1px solid @popover-fallback-border-color; - border: 1px solid @popover-border-color; - border-radius: @border-radius-large; - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -@popover-arrow-width; } - &.right { margin-left: @popover-arrow-width; } - &.bottom { margin-top: @popover-arrow-width; } - &.left { margin-left: -@popover-arrow-width; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: @font-size-base; - font-weight: normal; - line-height: 18px; - background-color: @popover-title-bg; - border-bottom: 1px solid darken(@popover-title-bg, 5%); - border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover > .arrow { - &, - &:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - } -} -.popover > .arrow { - border-width: @popover-arrow-outer-width; -} -.popover > .arrow:after { - border-width: @popover-arrow-width; - content: ""; -} - -.popover { - &.top > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-top-color: @popover-arrow-outer-color; - bottom: -@popover-arrow-outer-width; - &:after { - content: " "; - bottom: 1px; - margin-left: -@popover-arrow-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-color; - } - } - &.right > .arrow { - top: 50%; - left: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-left-width: 0; - border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-right-color: @popover-arrow-outer-color; - &:after { - content: " "; - left: 1px; - bottom: -@popover-arrow-width; - border-left-width: 0; - border-right-color: @popover-arrow-color; - } - } - &.bottom > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-bottom-color: @popover-arrow-outer-color; - top: -@popover-arrow-outer-width; - &:after { - content: " "; - top: 1px; - margin-left: -@popover-arrow-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-color; - } - } - - &.left > .arrow { - top: 50%; - right: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-right-width: 0; - border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-left-color: @popover-arrow-outer-color; - &:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: @popover-arrow-color; - bottom: -@popover-arrow-width; - } - } - -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/print.less b/platforms/android/assets/www/lib/bootstrap/less/print.less deleted file mode 100644 index 3655d039..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/print.less +++ /dev/null @@ -1,101 +0,0 @@ -// -// Basic print styles -// -------------------------------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } - - // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 - // Once fixed, we can just straight up remove this. - select { - background: #fff !important; - } - - // Bootstrap components - .navbar { - display: none; - } - .table { - td, - th { - background-color: #fff !important; - } - } - .btn, - .dropup > .btn { - > .caret { - border-top-color: #000 !important; - } - } - .label { - border: 1px solid #000; - } - - .table { - border-collapse: collapse !important; - } - .table-bordered { - th, - td { - border: 1px solid #ddd !important; - } - } - -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/progress-bars.less b/platforms/android/assets/www/lib/bootstrap/less/progress-bars.less deleted file mode 100644 index 3ac52a29..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/progress-bars.less +++ /dev/null @@ -1,105 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// Bar animations -// ------------------------- - -// WebKit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Spec and IE10+ -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// Bar itself -// ------------------------- - -// Outer container -.progress { - overflow: hidden; - height: @line-height-computed; - margin-bottom: @line-height-computed; - background-color: @progress-bg; - border-radius: @border-radius-base; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); -} - -// Bar of progress -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: @font-size-small; - line-height: @line-height-computed; - color: @progress-bar-color; - text-align: center; - background-color: @progress-bar-bg; - .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .transition(width .6s ease); -} - -// Striped bars -// -// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the -// `.progress-bar-striped` class, which you just add to an existing -// `.progress-bar`. -.progress-striped .progress-bar, -.progress-bar-striped { - #gradient > .striped(); - background-size: 40px 40px; -} - -// Call animation for the active one -// -// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the -// `.progress-bar.active` approach. -.progress.active .progress-bar, -.progress-bar.active { - .animation(progress-bar-stripes 2s linear infinite); -} - -// Account for lower percentages -.progress-bar { - &[aria-valuenow="1"], - &[aria-valuenow="2"] { - min-width: 30px; - } - - &[aria-valuenow="0"] { - color: @gray-light; - min-width: 30px; - background-color: transparent; - background-image: none; - box-shadow: none; - } -} - - - -// Variations -// ------------------------- - -.progress-bar-success { - .progress-bar-variant(@progress-bar-success-bg); -} - -.progress-bar-info { - .progress-bar-variant(@progress-bar-info-bg); -} - -.progress-bar-warning { - .progress-bar-variant(@progress-bar-warning-bg); -} - -.progress-bar-danger { - .progress-bar-variant(@progress-bar-danger-bg); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/responsive-embed.less b/platforms/android/assets/www/lib/bootstrap/less/responsive-embed.less deleted file mode 100644 index a884d49f..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/responsive-embed.less +++ /dev/null @@ -1,34 +0,0 @@ -// Embeds responsive -// -// Credit: Nicolas Gallagher and SUIT CSS. - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; - - .embed-responsive-item, - iframe, - embed, - object { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; - } - - // Modifier class for 16:9 aspect ratio - &.embed-responsive-16by9 { - padding-bottom: 56.25%; - } - - // Modifier class for 4:3 aspect ratio - &.embed-responsive-4by3 { - padding-bottom: 75%; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/responsive-utilities.less b/platforms/android/assets/www/lib/bootstrap/less/responsive-utilities.less deleted file mode 100644 index b1db31d7..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/responsive-utilities.less +++ /dev/null @@ -1,194 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 in Windows (Phone) 8 -// -// Support for responsive views via media queries is kind of borked in IE10, for -// Surface/desktop in split view and for Windows Phone 8. This particular fix -// must be accompanied by a snippet of JavaScript to sniff the user agent and -// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at -// our Getting Started page for more information on this bug. -// -// For more information, see the following: -// -// Issue: https://github.com/twbs/bootstrap/issues/10497 -// Docs: http://getbootstrap.com/getting-started/#support-ie10-width -// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ - -@-ms-viewport { - width: device-width; -} - - -// Visibility utilities -// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - .responsive-invisibility(); -} - -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} - -.visible-xs { - @media (max-width: @screen-xs-max) { - .responsive-visibility(); - } -} -.visible-xs-block { - @media (max-width: @screen-xs-max) { - display: block !important; - } -} -.visible-xs-inline { - @media (max-width: @screen-xs-max) { - display: inline !important; - } -} -.visible-xs-inline-block { - @media (max-width: @screen-xs-max) { - display: inline-block !important; - } -} - -.visible-sm { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - .responsive-visibility(); - } -} -.visible-sm-block { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: block !important; - } -} -.visible-sm-inline { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: inline !important; - } -} -.visible-sm-inline-block { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: inline-block !important; - } -} - -.visible-md { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - .responsive-visibility(); - } -} -.visible-md-block { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: block !important; - } -} -.visible-md-inline { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: inline !important; - } -} -.visible-md-inline-block { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: inline-block !important; - } -} - -.visible-lg { - @media (min-width: @screen-lg-min) { - .responsive-visibility(); - } -} -.visible-lg-block { - @media (min-width: @screen-lg-min) { - display: block !important; - } -} -.visible-lg-inline { - @media (min-width: @screen-lg-min) { - display: inline !important; - } -} -.visible-lg-inline-block { - @media (min-width: @screen-lg-min) { - display: inline-block !important; - } -} - -.hidden-xs { - @media (max-width: @screen-xs-max) { - .responsive-invisibility(); - } -} -.hidden-sm { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - .responsive-invisibility(); - } -} -.hidden-md { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - .responsive-invisibility(); - } -} -.hidden-lg { - @media (min-width: @screen-lg-min) { - .responsive-invisibility(); - } -} - - -// Print utilities -// -// Media queries are placed on the inside to be mixin-friendly. - -// Note: Deprecated .visible-print as of v3.2.0 -.visible-print { - .responsive-invisibility(); - - @media print { - .responsive-visibility(); - } -} -.visible-print-block { - display: none !important; - - @media print { - display: block !important; - } -} -.visible-print-inline { - display: none !important; - - @media print { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; - - @media print { - display: inline-block !important; - } -} - -.hidden-print { - @media print { - .responsive-invisibility(); - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/scaffolding.less b/platforms/android/assets/www/lib/bootstrap/less/scaffolding.less deleted file mode 100644 index c1e270fb..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/scaffolding.less +++ /dev/null @@ -1,150 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Reset the box-sizing -// -// Heads up! This reset may cause conflicts with some third-party widgets. -// For recommendations on resolving such conflicts, see -// http://getbootstrap.com/getting-started/#third-box-sizing -* { - .box-sizing(border-box); -} -*:before, -*:after { - .box-sizing(border-box); -} - - -// Body reset - -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0,0,0,0); -} - -body { - font-family: @font-family-base; - font-size: @font-size-base; - line-height: @line-height-base; - color: @text-color; - background-color: @body-bg; -} - -// Reset fonts for relevant elements -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - - -// Links - -a { - color: @link-color; - text-decoration: none; - - &:hover, - &:focus { - color: @link-hover-color; - text-decoration: underline; - } - - &:focus { - .tab-focus(); - } -} - - -// Figures -// -// We reset this here because previously Normalize had no `figure` margins. This -// ensures we don't break anyone's use of the element. - -figure { - margin: 0; -} - - -// Images - -img { - vertical-align: middle; -} - -// Responsive images (ensure images don't scale beyond their parents) -.img-responsive { - .img-responsive(); -} - -// Rounded corners -.img-rounded { - border-radius: @border-radius-large; -} - -// Image thumbnails -// -// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. -.img-thumbnail { - padding: @thumbnail-padding; - line-height: @line-height-base; - background-color: @thumbnail-bg; - border: 1px solid @thumbnail-border; - border-radius: @thumbnail-border-radius; - .transition(all .2s ease-in-out); - - // Keep them at most 100% wide - .img-responsive(inline-block); -} - -// Perfect circle -.img-circle { - border-radius: 50%; // set radius in percents -} - - -// Horizontal rules - -hr { - margin-top: @line-height-computed; - margin-bottom: @line-height-computed; - border: 0; - border-top: 1px solid @hr-border; -} - - -// Only display content to screen readers -// -// See: http://a11yproject.com/posts/how-to-hide-content/ - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - border: 0; -} - -// Use in conjunction with .sr-only to only display content when it's focused. -// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 -// Credit: HTML5 Boilerplate - -.sr-only-focusable { - &:active, - &:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/tables.less b/platforms/android/assets/www/lib/bootstrap/less/tables.less deleted file mode 100644 index 2e1ef337..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/tables.less +++ /dev/null @@ -1,233 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -table { - background-color: @table-bg; -} -th { - text-align: left; -} - - -// Baseline styles - -.table { - width: 100%; - max-width: 100%; - margin-bottom: @line-height-computed; - // Cells - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: @table-cell-padding; - line-height: @line-height-base; - vertical-align: top; - border-top: 1px solid @table-border-color; - } - } - } - // Bottom align for column headings - > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid @table-border-color; - } - // Remove top border from thead by default - > caption + thead, - > colgroup + thead, - > thead:first-child { - > tr:first-child { - > th, - > td { - border-top: 0; - } - } - } - // Account for multiple tbody instances - > tbody + tbody { - border-top: 2px solid @table-border-color; - } - - // Nesting - .table { - background-color: @body-bg; - } -} - - -// Condensed table w/ half padding - -.table-condensed { - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: @table-condensed-cell-padding; - } - } - } -} - - -// Bordered version -// -// Add borders all around the table and between all the columns. - -.table-bordered { - border: 1px solid @table-border-color; - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - border: 1px solid @table-border-color; - } - } - } - > thead > tr { - > th, - > td { - border-bottom-width: 2px; - } - } -} - - -// Zebra-striping -// -// Default zebra-stripe styles (alternating gray and transparent backgrounds) - -.table-striped { - > tbody > tr:nth-child(odd) { - > td, - > th { - background-color: @table-bg-accent; - } - } -} - - -// Hover effect -// -// Placed here since it has to come after the potential zebra striping - -.table-hover { - > tbody > tr:hover { - > td, - > th { - background-color: @table-bg-hover; - } - } -} - - -// Table cell sizing -// -// Reset default table behavior - -table col[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-column; -} -table { - td, - th { - &[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-cell; - } - } -} - - -// Table backgrounds -// -// Exact selectors below required to override `.table-striped` and prevent -// inheritance to nested tables. - -// Generate the contextual variants -.table-row-variant(active; @table-bg-active); -.table-row-variant(success; @state-success-bg); -.table-row-variant(info; @state-info-bg); -.table-row-variant(warning; @state-warning-bg); -.table-row-variant(danger; @state-danger-bg); - - -// Responsive tables -// -// Wrap your tables in `.table-responsive` and we'll make them mobile friendly -// by enabling horizontal scrolling. Only applies <768px. Everything above that -// will display normally. - -.table-responsive { - @media screen and (max-width: @screen-xs-max) { - width: 100%; - margin-bottom: (@line-height-computed * 0.75); - overflow-y: hidden; - overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid @table-border-color; - -webkit-overflow-scrolling: touch; - - // Tighten up spacing - > .table { - margin-bottom: 0; - - // Ensure the content doesn't wrap - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - white-space: nowrap; - } - } - } - } - - // Special overrides for the bordered tables - > .table-bordered { - border: 0; - - // Nuke the appropriate borders so that the parent can handle them - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - - // Only nuke the last row's bottom-border in `tbody` and `tfoot` since - // chances are there will be only one `tr` in a `thead` and that would - // remove the border altogether. - > tbody, - > tfoot { - > tr:last-child { - > th, - > td { - border-bottom: 0; - } - } - } - - } - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/theme.less b/platforms/android/assets/www/lib/bootstrap/less/theme.less deleted file mode 100644 index b089424c..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/theme.less +++ /dev/null @@ -1,258 +0,0 @@ - -// -// Load core variables and mixins -// -------------------------------------------------- - -@import "variables.less"; -@import "mixins.less"; - - - -// -// Buttons -// -------------------------------------------------- - -// Common styles -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); - .box-shadow(@shadow); - - // Reset the shadow - &:active, - &.active { - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } -} - -// Mixin for generating new styles -.btn-styles(@btn-color: #555) { - #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); - .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners - background-repeat: repeat-x; - border-color: darken(@btn-color, 14%); - - &:hover, - &:focus { - background-color: darken(@btn-color, 12%); - background-position: 0 -15px; - } - - &:active, - &.active { - background-color: darken(@btn-color, 12%); - border-color: darken(@btn-color, 14%); - } - - &:disabled, - &[disabled] { - background-color: darken(@btn-color, 12%); - background-image: none; - } -} - -// Common styles -.btn { - // Remove the gradient for the pressed/active state - &:active, - &.active { - background-image: none; - } -} - -// Apply the mixin to the buttons -.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } -.btn-primary { .btn-styles(@btn-primary-bg); } -.btn-success { .btn-styles(@btn-success-bg); } -.btn-info { .btn-styles(@btn-info-bg); } -.btn-warning { .btn-styles(@btn-warning-bg); } -.btn-danger { .btn-styles(@btn-danger-bg); } - - - -// -// Images -// -------------------------------------------------- - -.thumbnail, -.img-thumbnail { - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} - - - -// -// Dropdowns -// -------------------------------------------------- - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); - background-color: darken(@dropdown-link-hover-bg, 5%); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); - background-color: darken(@dropdown-link-active-bg, 5%); -} - - - -// -// Navbar -// -------------------------------------------------- - -// Default navbar -.navbar-default { - #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - border-radius: @navbar-border-radius; - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); - .box-shadow(@shadow); - - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); - } -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255,255,255,.25); -} - -// Inverted navbar -.navbar-inverse { - #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); - } - - .navbar-brand, - .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - } -} - -// Undo rounded corners in static and fixed navbars -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - - - -// -// Alerts -// -------------------------------------------------- - -// Common styles -.alert { - text-shadow: 0 1px 0 rgba(255,255,255,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); - .box-shadow(@shadow); -} - -// Mixin for generating new styles -.alert-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); - border-color: darken(@color, 15%); -} - -// Apply the mixin to the alerts -.alert-success { .alert-styles(@alert-success-bg); } -.alert-info { .alert-styles(@alert-info-bg); } -.alert-warning { .alert-styles(@alert-warning-bg); } -.alert-danger { .alert-styles(@alert-danger-bg); } - - - -// -// Progress bars -// -------------------------------------------------- - -// Give the progress background some depth -.progress { - #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) -} - -// Mixin for generating new styles -.progress-bar-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); -} - -// Apply the mixin to the progress bars -.progress-bar { .progress-bar-styles(@progress-bar-bg); } -.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } -.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } -.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } -.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } - -// Reset the striped class because our mixins don't do multiple gradients and -// the above custom styles override the new `.progress-bar-striped` in v3.2.0. -.progress-bar-striped { - #gradient > .striped(); -} - - -// -// List groups -// -------------------------------------------------- - -.list-group { - border-radius: @border-radius-base; - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); - #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); - border-color: darken(@list-group-active-border, 7.5%); -} - - - -// -// Panels -// -------------------------------------------------- - -// Common styles -.panel { - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} - -// Mixin for generating new styles -.panel-heading-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); -} - -// Apply the mixin to the panel headings only -.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } -.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } -.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } -.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } -.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } -.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } - - - -// -// Wells -// -------------------------------------------------- - -.well { - #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); - border-color: darken(@well-bg, 10%); - @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); - .box-shadow(@shadow); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/thumbnails.less b/platforms/android/assets/www/lib/bootstrap/less/thumbnails.less deleted file mode 100644 index c428920b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/thumbnails.less +++ /dev/null @@ -1,36 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Mixin and adjust the regular image class -.thumbnail { - display: block; - padding: @thumbnail-padding; - margin-bottom: @line-height-computed; - line-height: @line-height-base; - background-color: @thumbnail-bg; - border: 1px solid @thumbnail-border; - border-radius: @thumbnail-border-radius; - .transition(all .2s ease-in-out); - - > img, - a > img { - &:extend(.img-responsive); - margin-left: auto; - margin-right: auto; - } - - // Add a hover state for linked versions only - a&:hover, - a&:focus, - a&.active { - border-color: @link-color; - } - - // Image captions - .caption { - padding: @thumbnail-caption-padding; - color: @thumbnail-caption-color; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/tooltip.less b/platforms/android/assets/www/lib/bootstrap/less/tooltip.less deleted file mode 100644 index bd626996..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/tooltip.less +++ /dev/null @@ -1,95 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindex-tooltip; - display: block; - visibility: visible; - font-size: @font-size-small; - line-height: 1.4; - .opacity(0); - - &.in { .opacity(@tooltip-opacity); } - &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } - &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } - &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } - &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: @tooltip-max-width; - padding: 3px 8px; - color: @tooltip-color; - text-align: center; - text-decoration: none; - background-color: @tooltip-bg; - border-radius: @border-radius-base; -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-left .tooltip-arrow { - bottom: 0; - left: @tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-right .tooltip-arrow { - bottom: 0; - right: @tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; - border-right-color: @tooltip-arrow-color; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; - border-left-color: @tooltip-arrow-color; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-left .tooltip-arrow { - top: 0; - left: @tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-right .tooltip-arrow { - top: 0; - right: @tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/type.less b/platforms/android/assets/www/lib/bootstrap/less/type.less deleted file mode 100644 index 9b1e48ba..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/type.less +++ /dev/null @@ -1,313 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - font-family: @headings-font-family; - font-weight: @headings-font-weight; - line-height: @headings-line-height; - color: @headings-color; - - small, - .small { - font-weight: normal; - line-height: 1; - color: @headings-small-color; - } -} - -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: @line-height-computed; - margin-bottom: (@line-height-computed / 2); - - small, - .small { - font-size: 65%; - } -} -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: (@line-height-computed / 2); - margin-bottom: (@line-height-computed / 2); - - small, - .small { - font-size: 75%; - } -} - -h1, .h1 { font-size: @font-size-h1; } -h2, .h2 { font-size: @font-size-h2; } -h3, .h3 { font-size: @font-size-h3; } -h4, .h4 { font-size: @font-size-h4; } -h5, .h5 { font-size: @font-size-h5; } -h6, .h6 { font-size: @font-size-h6; } - - -// Body text -// ------------------------- - -p { - margin: 0 0 (@line-height-computed / 2); -} - -.lead { - margin-bottom: @line-height-computed; - font-size: floor((@font-size-base * 1.15)); - font-weight: 300; - line-height: 1.4; - - @media (min-width: @screen-sm-min) { - font-size: (@font-size-base * 1.5); - } -} - - -// Emphasis & misc -// ------------------------- - -// Ex: (12px small font / 14px base font) * 100% = about 85% -small, -.small { - font-size: floor((100% * @font-size-small / @font-size-base)); -} - -// Undo browser default styling -cite { - font-style: normal; -} - -mark, -.mark { - background-color: @state-warning-bg; - padding: .2em; -} - -// Alignment -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } -.text-justify { text-align: justify; } -.text-nowrap { white-space: nowrap; } - -// Transformation -.text-lowercase { text-transform: lowercase; } -.text-uppercase { text-transform: uppercase; } -.text-capitalize { text-transform: capitalize; } - -// Contextual colors -.text-muted { - color: @text-muted; -} -.text-primary { - .text-emphasis-variant(@brand-primary); -} -.text-success { - .text-emphasis-variant(@state-success-text); -} -.text-info { - .text-emphasis-variant(@state-info-text); -} -.text-warning { - .text-emphasis-variant(@state-warning-text); -} -.text-danger { - .text-emphasis-variant(@state-danger-text); -} - -// Contextual backgrounds -// For now we'll leave these alongside the text classes until v4 when we can -// safely shift things around (per SemVer rules). -.bg-primary { - // Given the contrast here, this is the only class to have its color inverted - // automatically. - color: #fff; - .bg-variant(@brand-primary); -} -.bg-success { - .bg-variant(@state-success-bg); -} -.bg-info { - .bg-variant(@state-info-bg); -} -.bg-warning { - .bg-variant(@state-warning-bg); -} -.bg-danger { - .bg-variant(@state-danger-bg); -} - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: ((@line-height-computed / 2) - 1); - margin: (@line-height-computed * 2) 0 @line-height-computed; - border-bottom: 1px solid @page-header-border-color; -} - - -// Lists -// ------------------------- - -// Unordered and Ordered lists -ul, -ol { - margin-top: 0; - margin-bottom: (@line-height-computed / 2); - ul, - ol { - margin-bottom: 0; - } -} - -// List options - -// Unstyled keeps list items block level, just removes default browser padding and list-style -.list-unstyled { - padding-left: 0; - list-style: none; -} - -// Inline turns list items into inline-block -.list-inline { - .list-unstyled(); - margin-left: -5px; - - > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-top: 0; // Remove browser default - margin-bottom: @line-height-computed; -} -dt, -dd { - line-height: @line-height-base; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; // Undo browser default -} - -// Horizontal description lists -// -// Defaults to being stacked without any of the below styles applied, until the -// grid breakpoint is reached (default of ~768px). - -.dl-horizontal { - dd { - &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present - } - - @media (min-width: @grid-float-breakpoint) { - dt { - float: left; - width: (@dl-horizontal-offset - 20); - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @dl-horizontal-offset; - } - } -} - - -// Misc -// ------------------------- - -// Abbreviations and acronyms -abbr[title], -// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @abbr-border-color; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: (@line-height-computed / 2) @line-height-computed; - margin: 0 0 @line-height-computed; - font-size: @blockquote-font-size; - border-left: 5px solid @blockquote-border-color; - - p, - ul, - ol { - &:last-child { - margin-bottom: 0; - } - } - - // Note: Deprecated small and .small as of v3.1.0 - // Context: https://github.com/twbs/bootstrap/issues/11660 - footer, - small, - .small { - display: block; - font-size: 80%; // back to default font-size - line-height: @line-height-base; - color: @blockquote-small-color; - - &:before { - content: '\2014 \00A0'; // em dash, nbsp - } - } -} - -// Opposite alignment of blockquote -// -// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @blockquote-border-color; - border-left: 0; - text-align: right; - - // Account for citation - footer, - small, - .small { - &:before { content: ''; } - &:after { - content: '\00A0 \2014'; // nbsp, em dash - } - } -} - -// Quotes -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - margin-bottom: @line-height-computed; - font-style: normal; - line-height: @line-height-base; -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/utilities.less b/platforms/android/assets/www/lib/bootstrap/less/utilities.less deleted file mode 100644 index c0becabe..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/utilities.less +++ /dev/null @@ -1,57 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Floats -// ------------------------- - -.clearfix { - .clearfix(); -} -.center-block { - .center-block(); -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} - - -// Toggling content -// ------------------------- - -// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - .text-hide(); -} - - -// Hide from screenreaders and browsers -// -// Credit: HTML5 Boilerplate - -.hidden { - display: none !important; - visibility: hidden !important; -} - - -// For Affix plugin -// ------------------------- - -.affix { - position: fixed; - .translate3d(0, 0, 0); -} diff --git a/platforms/android/assets/www/lib/bootstrap/less/variables.less b/platforms/android/assets/www/lib/bootstrap/less/variables.less deleted file mode 100644 index 582f0f8d..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/variables.less +++ /dev/null @@ -1,846 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -@gray-darker: lighten(#000, 13.5%); // #222 -@gray-dark: lighten(#000, 20%); // #333 -@gray: lighten(#000, 33.5%); // #555 -@gray-light: lighten(#000, 46.7%); // #777 -@gray-lighter: lighten(#000, 93.5%); // #eee - -@brand-primary: #428bca; -@brand-success: #5cb85c; -@brand-info: #5bc0de; -@brand-warning: #f0ad4e; -@brand-danger: #d9534f; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for `<body>`. -@body-bg: #fff; -//** Global text color on `<body>`. -@text-color: @gray-dark; - -//** Global textual link color. -@link-color: @brand-primary; -//** Link hover color set via `darken()` function. -@link-hover-color: darken(@link-color, 15%); - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; -@font-family-serif: Georgia, "Times New Roman", Times, serif; -//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`. -@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; -@font-family-base: @font-family-sans-serif; - -@font-size-base: 14px; -@font-size-large: ceil((@font-size-base * 1.25)); // ~18px -@font-size-small: ceil((@font-size-base * 0.85)); // ~12px - -@font-size-h1: floor((@font-size-base * 2.6)); // ~36px -@font-size-h2: floor((@font-size-base * 2.15)); // ~30px -@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px -@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px -@font-size-h5: @font-size-base; -@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px - -//** Unit-less `line-height` for use in components like buttons. -@line-height-base: 1.428571429; // 20/14 -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc. -@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px - -//** By default, this inherits from the `<body>`. -@headings-font-family: inherit; -@headings-font-weight: 500; -@headings-line-height: 1.1; -@headings-color: inherit; - - -//== Iconography -// -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower. - -//** Load fonts from this directory. -@icon-font-path: "../fonts/"; -//** File name for all font files. -@icon-font-name: "glyphicons-halflings-regular"; -//** Element ID within SVG icon file. -@icon-font-svg-id: "glyphicons_halflingsregular"; - - -//== Components -// -//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start). - -@padding-base-vertical: 6px; -@padding-base-horizontal: 12px; - -@padding-large-vertical: 10px; -@padding-large-horizontal: 16px; - -@padding-small-vertical: 5px; -@padding-small-horizontal: 10px; - -@padding-xs-vertical: 1px; -@padding-xs-horizontal: 5px; - -@line-height-large: 1.33; -@line-height-small: 1.5; - -@border-radius-base: 4px; -@border-radius-large: 6px; -@border-radius-small: 3px; - -//** Global color for active items (e.g., navs or dropdowns). -@component-active-color: #fff; -//** Global background color for active items (e.g., navs or dropdowns). -@component-active-bg: @brand-primary; - -//** Width of the `border` for generating carets that indicator dropdowns. -@caret-width-base: 4px; -//** Carets increase slightly in size for larger components. -@caret-width-large: 5px; - - -//== Tables -// -//## Customizes the `.table` component with basic values, each used across all table variations. - -//** Padding for `<th>`s and `<td>`s. -@table-cell-padding: 8px; -//** Padding for cells in `.table-condensed`. -@table-condensed-cell-padding: 5px; - -//** Default background color used for all tables. -@table-bg: transparent; -//** Background color used for `.table-striped`. -@table-bg-accent: #f9f9f9; -//** Background color used for `.table-hover`. -@table-bg-hover: #f5f5f5; -@table-bg-active: @table-bg-hover; - -//** Border color for table and cell borders. -@table-border-color: #ddd; - - -//== Buttons -// -//## For each of Bootstrap's buttons, define text, background and border color. - -@btn-font-weight: normal; - -@btn-default-color: #333; -@btn-default-bg: #fff; -@btn-default-border: #ccc; - -@btn-primary-color: #fff; -@btn-primary-bg: @brand-primary; -@btn-primary-border: darken(@btn-primary-bg, 5%); - -@btn-success-color: #fff; -@btn-success-bg: @brand-success; -@btn-success-border: darken(@btn-success-bg, 5%); - -@btn-info-color: #fff; -@btn-info-bg: @brand-info; -@btn-info-border: darken(@btn-info-bg, 5%); - -@btn-warning-color: #fff; -@btn-warning-bg: @brand-warning; -@btn-warning-border: darken(@btn-warning-bg, 5%); - -@btn-danger-color: #fff; -@btn-danger-bg: @brand-danger; -@btn-danger-border: darken(@btn-danger-bg, 5%); - -@btn-link-disabled-color: @gray-light; - - -//== Forms -// -//## - -//** `<input>` background color -@input-bg: #fff; -//** `<input disabled>` background color -@input-bg-disabled: @gray-lighter; - -//** Text color for `<input>`s -@input-color: @gray; -//** `<input>` border color -@input-border: #ccc; -//** `<input>` border radius -@input-border-radius: @border-radius-base; -//** Border color for inputs on focus -@input-border-focus: #66afe9; - -//** Placeholder text color -@input-color-placeholder: @gray-light; - -//** Default `.form-control` height -@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); -//** Large `.form-control` height -@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); -//** Small `.form-control` height -@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); - -@legend-color: @gray-dark; -@legend-border-color: #e5e5e5; - -//** Background color for textual input addons -@input-group-addon-bg: @gray-lighter; -//** Border color for textual input addons -@input-group-addon-border-color: @input-border; - - -//== Dropdowns -// -//## Dropdown menu container and contents. - -//** Background for the dropdown menu. -@dropdown-bg: #fff; -//** Dropdown menu `border-color`. -@dropdown-border: rgba(0,0,0,.15); -//** Dropdown menu `border-color` **for IE8**. -@dropdown-fallback-border: #ccc; -//** Divider color for between dropdown items. -@dropdown-divider-bg: #e5e5e5; - -//** Dropdown link text color. -@dropdown-link-color: @gray-dark; -//** Hover color for dropdown links. -@dropdown-link-hover-color: darken(@gray-dark, 5%); -//** Hover background for dropdown links. -@dropdown-link-hover-bg: #f5f5f5; - -//** Active dropdown menu item text color. -@dropdown-link-active-color: @component-active-color; -//** Active dropdown menu item background color. -@dropdown-link-active-bg: @component-active-bg; - -//** Disabled dropdown menu item background color. -@dropdown-link-disabled-color: @gray-light; - -//** Text color for headers within dropdown menus. -@dropdown-header-color: @gray-light; - -//** Deprecated `@dropdown-caret-color` as of v3.1.0 -@dropdown-caret-color: #000; - - -//-- Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. -// -// Note: These variables are not generated into the Customizer. - -@zindex-navbar: 1000; -@zindex-dropdown: 1000; -@zindex-popover: 1060; -@zindex-tooltip: 1070; -@zindex-navbar-fixed: 1030; -@zindex-modal-background: 1040; -@zindex-modal: 1050; - - -//== Media queries breakpoints -// -//## Define the breakpoints at which your layout will change, adapting to different screen sizes. - -// Extra small screen / phone -//** Deprecated `@screen-xs` as of v3.0.1 -@screen-xs: 480px; -//** Deprecated `@screen-xs-min` as of v3.2.0 -@screen-xs-min: @screen-xs; -//** Deprecated `@screen-phone` as of v3.0.1 -@screen-phone: @screen-xs-min; - -// Small screen / tablet -//** Deprecated `@screen-sm` as of v3.0.1 -@screen-sm: 768px; -@screen-sm-min: @screen-sm; -//** Deprecated `@screen-tablet` as of v3.0.1 -@screen-tablet: @screen-sm-min; - -// Medium screen / desktop -//** Deprecated `@screen-md` as of v3.0.1 -@screen-md: 992px; -@screen-md-min: @screen-md; -//** Deprecated `@screen-desktop` as of v3.0.1 -@screen-desktop: @screen-md-min; - -// Large screen / wide desktop -//** Deprecated `@screen-lg` as of v3.0.1 -@screen-lg: 1200px; -@screen-lg-min: @screen-lg; -//** Deprecated `@screen-lg-desktop` as of v3.0.1 -@screen-lg-desktop: @screen-lg-min; - -// So media queries don't overlap when required, provide a maximum -@screen-xs-max: (@screen-sm-min - 1); -@screen-sm-max: (@screen-md-min - 1); -@screen-md-max: (@screen-lg-min - 1); - - -//== Grid system -// -//## Define your custom responsive grid. - -//** Number of columns in the grid. -@grid-columns: 12; -//** Padding between columns. Gets divided in half for the left and right. -@grid-gutter-width: 30px; -// Navbar collapse -//** Point at which the navbar becomes uncollapsed. -@grid-float-breakpoint: @screen-sm-min; -//** Point at which the navbar begins collapsing. -@grid-float-breakpoint-max: (@grid-float-breakpoint - 1); - - -//== Container sizes -// -//## Define the maximum width of `.container` for different screen sizes. - -// Small screen / tablet -@container-tablet: ((720px + @grid-gutter-width)); -//** For `@screen-sm-min` and up. -@container-sm: @container-tablet; - -// Medium screen / desktop -@container-desktop: ((940px + @grid-gutter-width)); -//** For `@screen-md-min` and up. -@container-md: @container-desktop; - -// Large screen / wide desktop -@container-large-desktop: ((1140px + @grid-gutter-width)); -//** For `@screen-lg-min` and up. -@container-lg: @container-large-desktop; - - -//== Navbar -// -//## - -// Basics of a navbar -@navbar-height: 50px; -@navbar-margin-bottom: @line-height-computed; -@navbar-border-radius: @border-radius-base; -@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); -@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); -@navbar-collapse-max-height: 340px; - -@navbar-default-color: #777; -@navbar-default-bg: #f8f8f8; -@navbar-default-border: darken(@navbar-default-bg, 6.5%); - -// Navbar links -@navbar-default-link-color: #777; -@navbar-default-link-hover-color: #333; -@navbar-default-link-hover-bg: transparent; -@navbar-default-link-active-color: #555; -@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); -@navbar-default-link-disabled-color: #ccc; -@navbar-default-link-disabled-bg: transparent; - -// Navbar brand label -@navbar-default-brand-color: @navbar-default-link-color; -@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%); -@navbar-default-brand-hover-bg: transparent; - -// Navbar toggle -@navbar-default-toggle-hover-bg: #ddd; -@navbar-default-toggle-icon-bar-bg: #888; -@navbar-default-toggle-border-color: #ddd; - - -// Inverted navbar -// Reset inverted navbar basics -@navbar-inverse-color: @gray-light; -@navbar-inverse-bg: #222; -@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); - -// Inverted navbar links -@navbar-inverse-link-color: @gray-light; -@navbar-inverse-link-hover-color: #fff; -@navbar-inverse-link-hover-bg: transparent; -@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; -@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); -@navbar-inverse-link-disabled-color: #444; -@navbar-inverse-link-disabled-bg: transparent; - -// Inverted navbar brand label -@navbar-inverse-brand-color: @navbar-inverse-link-color; -@navbar-inverse-brand-hover-color: #fff; -@navbar-inverse-brand-hover-bg: transparent; - -// Inverted navbar toggle -@navbar-inverse-toggle-hover-bg: #333; -@navbar-inverse-toggle-icon-bar-bg: #fff; -@navbar-inverse-toggle-border-color: #333; - - -//== Navs -// -//## - -//=== Shared nav styles -@nav-link-padding: 10px 15px; -@nav-link-hover-bg: @gray-lighter; - -@nav-disabled-link-color: @gray-light; -@nav-disabled-link-hover-color: @gray-light; - -@nav-open-link-hover-color: #fff; - -//== Tabs -@nav-tabs-border-color: #ddd; - -@nav-tabs-link-hover-border-color: @gray-lighter; - -@nav-tabs-active-link-hover-bg: @body-bg; -@nav-tabs-active-link-hover-color: @gray; -@nav-tabs-active-link-hover-border-color: #ddd; - -@nav-tabs-justified-link-border-color: #ddd; -@nav-tabs-justified-active-link-border-color: @body-bg; - -//== Pills -@nav-pills-border-radius: @border-radius-base; -@nav-pills-active-link-hover-bg: @component-active-bg; -@nav-pills-active-link-hover-color: @component-active-color; - - -//== Pagination -// -//## - -@pagination-color: @link-color; -@pagination-bg: #fff; -@pagination-border: #ddd; - -@pagination-hover-color: @link-hover-color; -@pagination-hover-bg: @gray-lighter; -@pagination-hover-border: #ddd; - -@pagination-active-color: #fff; -@pagination-active-bg: @brand-primary; -@pagination-active-border: @brand-primary; - -@pagination-disabled-color: @gray-light; -@pagination-disabled-bg: #fff; -@pagination-disabled-border: #ddd; - - -//== Pager -// -//## - -@pager-bg: @pagination-bg; -@pager-border: @pagination-border; -@pager-border-radius: 15px; - -@pager-hover-bg: @pagination-hover-bg; - -@pager-active-bg: @pagination-active-bg; -@pager-active-color: @pagination-active-color; - -@pager-disabled-color: @pagination-disabled-color; - - -//== Jumbotron -// -//## - -@jumbotron-padding: 30px; -@jumbotron-color: inherit; -@jumbotron-bg: @gray-lighter; -@jumbotron-heading-color: inherit; -@jumbotron-font-size: ceil((@font-size-base * 1.5)); - - -//== Form states and alerts -// -//## Define colors for form feedback states and, by default, alerts. - -@state-success-text: #3c763d; -@state-success-bg: #dff0d8; -@state-success-border: darken(spin(@state-success-bg, -10), 5%); - -@state-info-text: #31708f; -@state-info-bg: #d9edf7; -@state-info-border: darken(spin(@state-info-bg, -10), 7%); - -@state-warning-text: #8a6d3b; -@state-warning-bg: #fcf8e3; -@state-warning-border: darken(spin(@state-warning-bg, -10), 5%); - -@state-danger-text: #a94442; -@state-danger-bg: #f2dede; -@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); - - -//== Tooltips -// -//## - -//** Tooltip max width -@tooltip-max-width: 200px; -//** Tooltip text color -@tooltip-color: #fff; -//** Tooltip background color -@tooltip-bg: #000; -@tooltip-opacity: .9; - -//** Tooltip arrow width -@tooltip-arrow-width: 5px; -//** Tooltip arrow color -@tooltip-arrow-color: @tooltip-bg; - - -//== Popovers -// -//## - -//** Popover body background color -@popover-bg: #fff; -//** Popover maximum width -@popover-max-width: 276px; -//** Popover border color -@popover-border-color: rgba(0,0,0,.2); -//** Popover fallback border color -@popover-fallback-border-color: #ccc; - -//** Popover title background color -@popover-title-bg: darken(@popover-bg, 3%); - -//** Popover arrow width -@popover-arrow-width: 10px; -//** Popover arrow color -@popover-arrow-color: #fff; - -//** Popover outer arrow width -@popover-arrow-outer-width: (@popover-arrow-width + 1); -//** Popover outer arrow color -@popover-arrow-outer-color: fadein(@popover-border-color, 5%); -//** Popover outer arrow fallback color -@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); - - -//== Labels -// -//## - -//** Default label background color -@label-default-bg: @gray-light; -//** Primary label background color -@label-primary-bg: @brand-primary; -//** Success label background color -@label-success-bg: @brand-success; -//** Info label background color -@label-info-bg: @brand-info; -//** Warning label background color -@label-warning-bg: @brand-warning; -//** Danger label background color -@label-danger-bg: @brand-danger; - -//** Default label text color -@label-color: #fff; -//** Default text color of a linked label -@label-link-hover-color: #fff; - - -//== Modals -// -//## - -//** Padding applied to the modal body -@modal-inner-padding: 15px; - -//** Padding applied to the modal title -@modal-title-padding: 15px; -//** Modal title line-height -@modal-title-line-height: @line-height-base; - -//** Background color of modal content area -@modal-content-bg: #fff; -//** Modal content border color -@modal-content-border-color: rgba(0,0,0,.2); -//** Modal content border color **for IE8** -@modal-content-fallback-border-color: #999; - -//** Modal backdrop background color -@modal-backdrop-bg: #000; -//** Modal backdrop opacity -@modal-backdrop-opacity: .5; -//** Modal header border color -@modal-header-border-color: #e5e5e5; -//** Modal footer border color -@modal-footer-border-color: @modal-header-border-color; - -@modal-lg: 900px; -@modal-md: 600px; -@modal-sm: 300px; - - -//== Alerts -// -//## Define alert colors, border radius, and padding. - -@alert-padding: 15px; -@alert-border-radius: @border-radius-base; -@alert-link-font-weight: bold; - -@alert-success-bg: @state-success-bg; -@alert-success-text: @state-success-text; -@alert-success-border: @state-success-border; - -@alert-info-bg: @state-info-bg; -@alert-info-text: @state-info-text; -@alert-info-border: @state-info-border; - -@alert-warning-bg: @state-warning-bg; -@alert-warning-text: @state-warning-text; -@alert-warning-border: @state-warning-border; - -@alert-danger-bg: @state-danger-bg; -@alert-danger-text: @state-danger-text; -@alert-danger-border: @state-danger-border; - - -//== Progress bars -// -//## - -//** Background color of the whole progress component -@progress-bg: #f5f5f5; -//** Progress bar text color -@progress-bar-color: #fff; - -//** Default progress bar color -@progress-bar-bg: @brand-primary; -//** Success progress bar color -@progress-bar-success-bg: @brand-success; -//** Warning progress bar color -@progress-bar-warning-bg: @brand-warning; -//** Danger progress bar color -@progress-bar-danger-bg: @brand-danger; -//** Info progress bar color -@progress-bar-info-bg: @brand-info; - - -//== List group -// -//## - -//** Background color on `.list-group-item` -@list-group-bg: #fff; -//** `.list-group-item` border color -@list-group-border: #ddd; -//** List group border radius -@list-group-border-radius: @border-radius-base; - -//** Background color of single list items on hover -@list-group-hover-bg: #f5f5f5; -//** Text color of active list items -@list-group-active-color: @component-active-color; -//** Background color of active list items -@list-group-active-bg: @component-active-bg; -//** Border color of active list elements -@list-group-active-border: @list-group-active-bg; -//** Text color for content within active list items -@list-group-active-text-color: lighten(@list-group-active-bg, 40%); - -//** Text color of disabled list items -@list-group-disabled-color: @gray-light; -//** Background color of disabled list items -@list-group-disabled-bg: @gray-lighter; -//** Text color for content within disabled list items -@list-group-disabled-text-color: @list-group-disabled-color; - -@list-group-link-color: #555; -@list-group-link-hover-color: @list-group-link-color; -@list-group-link-heading-color: #333; - - -//== Panels -// -//## - -@panel-bg: #fff; -@panel-body-padding: 15px; -@panel-heading-padding: 10px 15px; -@panel-footer-padding: @panel-heading-padding; -@panel-border-radius: @border-radius-base; - -//** Border color for elements within panels -@panel-inner-border: #ddd; -@panel-footer-bg: #f5f5f5; - -@panel-default-text: @gray-dark; -@panel-default-border: #ddd; -@panel-default-heading-bg: #f5f5f5; - -@panel-primary-text: #fff; -@panel-primary-border: @brand-primary; -@panel-primary-heading-bg: @brand-primary; - -@panel-success-text: @state-success-text; -@panel-success-border: @state-success-border; -@panel-success-heading-bg: @state-success-bg; - -@panel-info-text: @state-info-text; -@panel-info-border: @state-info-border; -@panel-info-heading-bg: @state-info-bg; - -@panel-warning-text: @state-warning-text; -@panel-warning-border: @state-warning-border; -@panel-warning-heading-bg: @state-warning-bg; - -@panel-danger-text: @state-danger-text; -@panel-danger-border: @state-danger-border; -@panel-danger-heading-bg: @state-danger-bg; - - -//== Thumbnails -// -//## - -//** Padding around the thumbnail image -@thumbnail-padding: 4px; -//** Thumbnail background color -@thumbnail-bg: @body-bg; -//** Thumbnail border color -@thumbnail-border: #ddd; -//** Thumbnail border radius -@thumbnail-border-radius: @border-radius-base; - -//** Custom text color for thumbnail captions -@thumbnail-caption-color: @text-color; -//** Padding around the thumbnail caption -@thumbnail-caption-padding: 9px; - - -//== Wells -// -//## - -@well-bg: #f5f5f5; -@well-border: darken(@well-bg, 7%); - - -//== Badges -// -//## - -@badge-color: #fff; -//** Linked badge text color on hover -@badge-link-hover-color: #fff; -@badge-bg: @gray-light; - -//** Badge text color in active nav link -@badge-active-color: @link-color; -//** Badge background color in active nav link -@badge-active-bg: #fff; - -@badge-font-weight: bold; -@badge-line-height: 1; -@badge-border-radius: 10px; - - -//== Breadcrumbs -// -//## - -@breadcrumb-padding-vertical: 8px; -@breadcrumb-padding-horizontal: 15px; -//** Breadcrumb background color -@breadcrumb-bg: #f5f5f5; -//** Breadcrumb text color -@breadcrumb-color: #ccc; -//** Text color of current page in the breadcrumb -@breadcrumb-active-color: @gray-light; -//** Textual separator for between breadcrumb elements -@breadcrumb-separator: "/"; - - -//== Carousel -// -//## - -@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6); - -@carousel-control-color: #fff; -@carousel-control-width: 15%; -@carousel-control-opacity: .5; -@carousel-control-font-size: 20px; - -@carousel-indicator-active-bg: #fff; -@carousel-indicator-border-color: #fff; - -@carousel-caption-color: #fff; - - -//== Close -// -//## - -@close-font-weight: bold; -@close-color: #000; -@close-text-shadow: 0 1px 0 #fff; - - -//== Code -// -//## - -@code-color: #c7254e; -@code-bg: #f9f2f4; - -@kbd-color: #fff; -@kbd-bg: #333; - -@pre-bg: #f5f5f5; -@pre-color: @gray-dark; -@pre-border-color: #ccc; -@pre-scrollable-max-height: 340px; - - -//== Type -// -//## - -//** Horizontal offset for forms and lists. -@component-offset-horizontal: 180px; -//** Text muted color -@text-muted: @gray-light; -//** Abbreviations and acronyms border color -@abbr-border-color: @gray-light; -//** Headings small color -@headings-small-color: @gray-light; -//** Blockquote small color -@blockquote-small-color: @gray-light; -//** Blockquote font size -@blockquote-font-size: (@font-size-base * 1.25); -//** Blockquote border color -@blockquote-border-color: @gray-lighter; -//** Page header border color -@page-header-border-color: @gray-lighter; -//** Width of horizontal description list titles -@dl-horizontal-offset: @component-offset-horizontal; -//** Horizontal line color. -@hr-border: @gray-lighter; - - diff --git a/platforms/android/assets/www/lib/bootstrap/less/wells.less b/platforms/android/assets/www/lib/bootstrap/less/wells.less deleted file mode 100644 index 15d072b0..00000000 --- a/platforms/android/assets/www/lib/bootstrap/less/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @well-bg; - border: 1px solid @well-border; - border-radius: @border-radius-base; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-lg { - padding: 24px; - border-radius: @border-radius-large; -} -.well-sm { - padding: 9px; - border-radius: @border-radius-small; -} diff --git a/platforms/android/assets/www/lib/bootstrap/package.json b/platforms/android/assets/www/lib/bootstrap/package.json deleted file mode 100644 index 3243fa8b..00000000 --- a/platforms/android/assets/www/lib/bootstrap/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "author": "Twitter, Inc.", - "scripts": { - "test": "grunt test" - }, - "style": "dist/css/bootstrap.css", - "less": "less/bootstrap.less", - "repository": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git" - }, - "bugs": { - "url": "https://github.com/twbs/bootstrap/issues" - }, - "license": { - "type": "MIT", - "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE" - }, - "devDependencies": { - "btoa": "~1.1.2", - "glob": "~4.0.2", - "grunt": "~0.4.5", - "grunt-autoprefixer": "~0.7.6", - "grunt-banner": "~0.2.3", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-concat": "~0.4.0", - "grunt-contrib-connect": "~0.8.0", - "grunt-contrib-copy": "~0.5.0", - "grunt-contrib-csslint": "~0.2.0", - "grunt-contrib-cssmin": "~0.10.0", - "grunt-contrib-jade": "~0.12.0", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-less": "~0.11.3", - "grunt-contrib-qunit": "~0.5.1", - "grunt-contrib-uglify": "~0.5.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-csscomb": "~2.0.1", - "grunt-exec": "~0.4.5", - "grunt-html-validation": "~0.1.18", - "grunt-jekyll": "~0.4.2", - "grunt-jscs-checker": "~0.6.0", - "grunt-saucelabs": "~8.1.0", - "grunt-sed": "~0.1.1", - "load-grunt-tasks": "~0.6.0", - "markdown": "~0.5.0", - "npm-shrinkwrap": "~3.1.6", - "time-grunt": "~0.3.2" - }, - "engines": { - "node": "~0.10.1" - }, - "jspm": { - "main": "js/bootstrap", - "directories": { - "example": "examples", - "lib": "dist" - }, - "shim": { - "js/bootstrap": { - "imports": "jquery", - "exports": "$" - } - }, - "buildConfig": { - "uglify": true - } - } -} diff --git a/platforms/android/assets/www/lib/ckeditor/.bower.json b/platforms/android/assets/www/lib/ckeditor/.bower.json deleted file mode 100644 index 122e71a9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/.bower.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "keywords": [ - "ckeditor", - "fckeditor", - "editor", - "wysiwyg", - "html", - "richtext", - "text", - "javascript" - ], - "authors": "CKSource (http://cksource.com/)", - "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", - "homepage": "http://ckeditor.com", - "version": "4.4.5", - "_release": "4.4.5", - "_resolution": { - "type": "version", - "tag": "4.4.5", - "commit": "68cc6ad041e5268fd0d1445802a7d6a6ce6e1802" - }, - "_source": "git://github.com/ckeditor/ckeditor-releases.git", - "_target": "~4.4.5", - "_originalSource": "ckeditor", - "_direct": true -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/CHANGES.md b/platforms/android/assets/www/lib/ckeditor/CHANGES.md deleted file mode 100644 index 9bfaef34..00000000 --- a/platforms/android/assets/www/lib/ckeditor/CHANGES.md +++ /dev/null @@ -1,671 +0,0 @@ -CKEditor 4 Changelog -==================== - -## CKEditor 4.4.5 - -New Features: - -* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). - -Fixed Issues: - -* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. -* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! -* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! -* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! -* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! -* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. -* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. -* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). -* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements. -* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. -* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. -* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. -* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. -* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. -* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. -* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. -* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. - - -## CKEditor 4.4.4 - -Fixed Issues: - -* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! -* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word]((http://ckeditor.com/addon/pastefromword)) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: - * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. - * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. - * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. -* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. -* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. -* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. -* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. -* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. -* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. -* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. -* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. -* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. -* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. -* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line. -* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. -* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. - - -Other Changes: - -* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. - -## CKEditor 4.4.3 - -**Security Updates:** - -* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). - -**An upgrade is highly recommended!** - -New Features: - -* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. - -Fixed Issues: - -* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: **Enter** key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! -* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. -* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. -* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). -* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. -* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element. -* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. - -## CKEditor 4.4.2 - -Important Notes: - -* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. - Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). - -New Features: - -* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. - -Fixed Issues: - -* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! -* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! -* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. -* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. -* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. -* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). -* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. -* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). -* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. -* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. -* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection). -* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. -* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. -* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. -* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. -* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. -* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. -* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. -* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. -* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. -* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. -* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. - -## CKEditor 4.4.1 - -New Features: - -* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. - -Fixed Issues: - -* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. -* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! -* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! -* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element. -* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element. -* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. -* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. -* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. -* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. -* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. -* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). -* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). -* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. -* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. -* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. -* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. -* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. -* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. -* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. -* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. -* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. -* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. - -Other Changes: - -* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. -* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. -* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. - -## CKEditor 4.4 - -**Important Notes:** - -* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. -* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. -* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. -* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). -* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. - -New Features: - -* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: - * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. - * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. - * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). - * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). -* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: - * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. - * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. - If this setting is defined, the editor produces classes instead of inline styles for aligned images. - * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. -* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. -* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. -* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. -* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). -* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). -* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. -* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. - -Other Changes: - -* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). -* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. -* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: - * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. - * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. - * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). -* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. - -Fixed Issues: - -* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. -* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. - -## CKEditor 4.3.5 - -New Features: - -* Added new translation: Tatar. - -Fixed Issues: - -* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. -* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. - -## CKEditor 4.3.4 - -Fixed Issues: - -* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. -* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. -* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. -* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. -* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. -* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. -* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. -* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. -* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. -* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. - -## CKEditor 4.3.3 - -Fixed Issues: - -* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). -* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. -* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. -* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). -* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. -* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. -* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. -* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. -* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. -* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. -* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. -* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. -* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. -* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. -* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. -* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. -* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. -* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. -* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. - -## CKEditor 4.3.2 - -Fixed Issues: - -* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. -* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: - * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. - * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. - * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. - * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. -* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. -* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: - * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. - * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. -* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. -* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). -* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. -* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. -* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. -* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. -* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. -* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. -* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. -* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. -* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. -* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. -* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. -* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. -* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). -* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. -* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. -* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. -* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. -* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. -* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. -* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. -* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. - -## CKEditor 4.3.1 - -**Important Notes:** - -* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). -* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). - -Fixed Issues: - -* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. -* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. -* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. -* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. -* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. -* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. -* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. -* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. -* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. -* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. -* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. -* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. -* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. -* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. -* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. -* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. -* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. -* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. -* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. -* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. -* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. -* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. -* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. -* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. -* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. -* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. - -## CKEditor 4.3 - -New Features: - -* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. -* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. -* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. -* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. -* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. -* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. -* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. -* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: - * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), - * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), - * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), - * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), - * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), - * fixing other minor bugs. -* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. -* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. -* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. -* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. -* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). -* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. - -Fixed Issues: - -* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. -* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. -* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. -* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. -* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. -* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. -* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. -* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. -* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. -* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. -* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. -* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. -* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. -* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. -* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. -* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. -* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. -* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. -* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. -* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. -* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. -* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. -* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. -* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. -* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). - -## CKEditor 4.3 Beta - -New Features: - -* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. - * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). - * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). - * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. - * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). - * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. - * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. - * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. - * Dozens of new methods were introduced &ndash; most interesting ones: - * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), - * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), - * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), - * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), - * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). -* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. -* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. -* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). -* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). - -## CKEditor 4.2.3 - -Fixed Issues: - -* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. -* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. -* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. -* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). -* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. - -## CKEditor 4.2.2 - -Fixed Issues: - -* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. -* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. -* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. -* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. -* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. -* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. -* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. -* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. -* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. -* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. -* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). -* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). -* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. -* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. - -## CKEditor 4.2.1 - -Fixed Issues: - -* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. -* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. -* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. -* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. -* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. -* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. -* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. -* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. -* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. -* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. -* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. -* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. -* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. -* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. - -## CKEditor 4.2 - -**Important Notes:** - -* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. - -* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). - -New Features: - -* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). -* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. -* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). -* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. -* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. -* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. -* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. -* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. - -Fixed Issues: - -* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. -* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. -* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). - -## CKEditor 4.1.3 - -New Features: - -* Added new translation: Indonesian. - -Fixed Issues: - -* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. -* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". -* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. -* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). -* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. - -## CKEditor 4.1.2 - -New Features: - -* Added new translation: Sinhala. - -Fixed Issues: - -* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. -* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. -* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. -* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. -* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). -* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. -* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). -* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. -* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. -* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. -* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. -* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. -* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. - -## CKEditor 4.1.1 - -New Features: - -* Added new translation: Albanian. - -Fixed Issues: - -* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. -* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. -* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. -* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. -* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. -* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). -* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). -* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. -* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. -* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. -* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. -* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. -* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. -* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). - -## CKEditor 4.1 - -Fixed Issues: - -* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. -* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. -* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. -* Minor issues in plugin integration with Advanced Content Filter: - * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. - * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. - * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. - -## CKEditor 4.1 RC - -New Features: - -* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. - - Brand new data filtering system that works in 2 modes: - - * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its - current configuration can handle. - * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data - will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. - - See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). -* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. -* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. -* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. -* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. -* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. -* Included in [#10103](http://dev.ckeditor.com/ticket/10103): - * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. - * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. -* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. - -## CKEditor 4.0.3 - -Fixed Issues: - -* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. -* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. -* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). - -## CKEditor 4.0.2 - -Fixed Issues: - -* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. -* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). -* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. -* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. -* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. -* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. -* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. -* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. -* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. -* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. -* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. -* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. -* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. -* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. -* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. -* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. -* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. -* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. -* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. - -## CKEditor 4.0.1.1 - -Fixed Issues: - -* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. - -## CKEditor 4.0.1 - -Fixed Issues: - -* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). -* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). -* [Magic Line](http://ckeditor.com/addon/magicline) plugin: - * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. - * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. - * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. -* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. -* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. -* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. -* Context menu: - * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. - * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. - * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. -* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. -* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. -* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. -* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. -* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. -* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. -* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. -* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. -* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. -* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. -* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. -* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. -* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. -* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. -* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. -* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. -* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). -* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. -* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. -* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. -* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. -* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. -* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. -* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. -* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. - - -## CKEditor 4.0 - -The first stable release of the new CKEditor 4 code line. - -The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever -possible. The list of relevant changes can be found in the [API Changes page of -the CKEditor 4 documentation][1]. - -[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/platforms/android/assets/www/lib/ckeditor/LICENSE.md b/platforms/android/assets/www/lib/ckeditor/LICENSE.md deleted file mode 100644 index b6e0b9ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/LICENSE.md +++ /dev/null @@ -1,1264 +0,0 @@ -Software License Agreement -========================== - -CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your -choice: - - - GNU General Public License Version 2 or later (the "GPL") - http://www.gnu.org/licenses/gpl.html - (See Appendix A) - - - GNU Lesser General Public License Version 2.1 or later (the "LGPL") - http://www.gnu.org/licenses/lgpl.html - (See Appendix B) - - - Mozilla Public License Version 1.1 or later (the "MPL") - http://www.mozilla.org/MPL/MPL-1.1.html - (See Appendix C) - -You are not required to, but if you want to explicitly declare the -license you have chosen to be bound to when using, reproducing, -modifying and distributing this software, just include a text file -titled "legal.txt" in your version of this software, indicating your -license choice. In any case, your choice will not restrict any -recipient of your version of this software to use, reproduce, modify -and distribute this software under any of the above licenses. - -Sources of Intellectual Property Included in CKEditor ------------------------------------------------------ - -Where not otherwise indicated, all CKEditor content is authored by -CKSource engineers and consists of CKSource-owned intellectual -property. In some specific instances, CKEditor will incorporate work -done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand -and product names are trademarks, registered trademarks or service -marks of their respective holders. - ---- - -Appendix A: The GPL License ---------------------------- - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software-to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix B: The LGPL License ----------------------------- - -GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software-to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages-typically libraries-of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -GNU LESSER GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - -NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix C: The MPL License ---------------------------- - -MOZILLA PUBLIC LICENSE -Version 1.1 - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'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. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning 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. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] diff --git a/platforms/android/assets/www/lib/ckeditor/README.md b/platforms/android/assets/www/lib/ckeditor/README.md deleted file mode 100644 index d6b5e2af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/README.md +++ /dev/null @@ -1,82 +0,0 @@ -CKEditor 4 - Releases -===================== - -## Releases Code - -This repository contains the official release versions of [CKEditor](http://ckeditor.com). - -There are four versions for each release &mdash; `standard-all`, `basic`, `standard`, and `full`. -They differ in the number of plugins that are compiled into the main `ckeditor.js` file as well as the toolbar configuration. - -See the [comparison](http://ckeditor.com/presets) of the `basic`, `standard`, and `full` installation presets for more details. - -The `standard-all` build includes all official CKSource plugins with only those from the `standard` installation preset compiled into the `ckeditor.js` file and enabled in the configuration. - -All versions available in this repository were built using [CKBuilder](http://ckeditor.com/builder), so they are optimized and ready to be used in a production environment. - -## Documentation - -Developer documentation for CKEditor is available online at: <http://docs.ckeditor.com>. - -## Installation - -### Git clone - -To install one of the available releases, just clone this repository and switch to the respective branch (see next section): - - git clone -b <release branch> git://github.com/ckeditor/ckeditor-releases.git - -### Git submodule - -If you are using git for your project and you want to integrate CKEditor, we recommend to add this repository as a -[submodule](http://git-scm.com/book/en/Git-Tools-Submodules). - - git submodule add -b <release branch> git://github.com/ckeditor/ckeditor-releases.git <clone dir> - git commit -m "Added CKEditor submodule in <clone dir> directory." - -### Using Package Managers - -See the [Installing CKEditor with Package Managers](http://docs.ckeditor.com/#!/guide/dev_package_managers) article for more details about installing CKEditor with Bower and Composer. - -## Repository Structure - -### Branches - -This repository contains the following branches: - - - `master` and `latest` &ndash; the latest release of the `standard-all` preset (including betas). - - `stable` &ndash; the latest stable release of the `standard-all` preset (non-beta). - - `A.B.x` (e.g. `4.3.x`) &ndash; the latest release of the `standard-all` preset in the `A.B` branch. - - `(basic|standard|full)/stable` &ndash; the latest stable release tag point (non-beta). - - `(basic|standard|full)/latest` &ndash; the latest release tag point (including betas). - - `(basic|standard|full)/A.B.x` (e.g. `basic/4.0.x`) &ndash; the latest releases in the `A.B` branch. - -### Tags - -**Since version 4.3.3** this repository uses the following tag naming rules: - - - `x.y.z` &ndash; contains the `standard-all` editor build, e.g. `4.3.3`, `4.4.0` etc. - - `(basic|standard|full)/x.y.z` &ndash; contains the editor build with a given preset, e.g. `basic/4.3.3`. - -The version numbers follow the [Semantic Versioning 2.0.0](http://semver.org/) scheme. - -Up to version **4.3.2** the tags were released in the following form `x.y[.z]/(basic|standard|full)`. -For example: `4.0/basic`, `4.0.1/standard`. This convention was changed in CKEditor 4.3.3 to conform to the Semantic Versioning scheme. - -## Checking Your Installation - -The editor comes with a few sample pages that can be used to verify if the installation succeeded. Take a look at the `samples` directory. - -To test your installation, just call the following page for your website: - - http://<your site>/<CKEditor installation path>/samples/index.html - -For example: - - http://www.example.com/ckeditor/samples/index.html - -### License - -Licensed under the GPL, LGPL, and MPL licenses, at your choice. - -Please check the `LICENSE.md` file for more information about the license. \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/adapters/jquery.js b/platforms/android/assets/www/lib/ckeditor/adapters/jquery.js deleted file mode 100644 index 3ec908b0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/adapters/jquery.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= -a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", -!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); -return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, -100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); -return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/bower.json b/platforms/android/assets/www/lib/ckeditor/bower.json deleted file mode 100644 index 9654c47a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "authors": "CKSource (http://cksource.com/)", - "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", - "homepage": "http://ckeditor.com" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/ckeditor.js b/platforms/android/assets/www/lib/ckeditor/ckeditor.js deleted file mode 100644 index ab3e3e54..00000000 --- a/platforms/android/assets/www/lib/ckeditor/ckeditor.js +++ /dev/null @@ -1,935 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){if(!window.CKEDITOR||!window.CKEDITOR.dom)window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"E8PD",version:"4.4.5 (Standard)",revision:"25cdcad",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var c=window.CKEDITOR_BASEPATH||"";if(!c)for(var d=document.getElementsByTagName("script"),b=0;b<d.length;b++){var f=d[b].src.match(a);if(f){c=f[1];break}}-1==c.indexOf(":/")&& -"//"!=c.slice(0,2)&&(c=0===c.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+c:location.href.match(/^[^\?]*\/(?:)/)[0]+c);if(!c)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return c}(),getUrl:function(c){-1==c.indexOf(":/")&&0!==c.indexOf("/")&&(c=this.basePath+c);this.timestamp&&("/"!=c.charAt(c.length-1)&&!/[&?]t=/.test(c))&&(c+=(0<=c.indexOf("?")?"&":"?")+"t="+this.timestamp); -return c},domReady:function(){function c(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",c,!1),a()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",c),a())}catch(b){}}function a(){for(var c;c=b.shift();)c()}var b=[];return function(a){function d(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(d,1);return}c()}b.push(a);"complete"===document.readyState&&setTimeout(c,1);if(1==b.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded", -c,!1),window.addEventListener("load",c,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",c);window.attachEvent("onload",c);a=!1;try{a=!window.frameElement}catch(g){}document.documentElement.doScroll&&a&&d()}}}()},b=window.CKEDITOR_GETURL;if(b){var g=e.getUrl;e.getUrl=function(a){return b.call(e,a)||g.call(e,a)}}return e}()),CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==null&&(a[b]=e[b])}, -CKEDITOR.event.prototype=function(){function a(a){var c=e(this);return c[a]||(c[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var c=0,d=this.listeners;c<d.length;c++)if(d[c].fn==a)return c;return-1}};return{define:function(b,c){var d=a.call(this,b);CKEDITOR.tools.extend(d,c,true)},on:function(b,c,d,i,f){function h(a,k,f,h){a={name:b,sender:this, -editor:a,data:k,listenerData:i,stop:f,cancel:h,removeListener:e};return c.call(d,a)===false?false:a.data}function e(){m.removeListener(b,c)}var k=a.call(this,b);if(k.getListenerIndex(c)<0){k=k.listeners;d||(d=this);isNaN(f)&&(f=10);var m=this;h.fn=c;h.priority=f;for(var q=k.length-1;q>=0;q--)if(k[q].priority<=f){k.splice(q+1,0,h);return{removeListener:e}}k.unshift(h)}return{removeListener:e}},once:function(){var a=Array.prototype.slice.call(arguments),c=a[1];a[1]=function(a){a.removeListener();return c.apply(this, -arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,c=function(){a=1},d=0,b=function(){d=1};return function(f,h,j){var k=e(this)[f],f=a,m=d;a=d=0;if(k){var q=k.listeners;if(q.length)for(var q=q.slice(0),s,n=0;n<q.length;n++){if(k.errorProof)try{s=q[n].call(this,j,h,c,b)}catch(l){}else s=q[n].call(this,j,h,c,b);s===false?d=1:typeof s!="undefined"&&(h=s);if(a||d)break}}h= -d?false:typeof h=="undefined"?true:h;a=f;d=m;return h}}(),fireOnce:function(a,c,d){c=this.fire(a,c,d);delete e(this)[a];return c},removeListener:function(a,c){var d=e(this)[a];if(d){var b=d.getListenerIndex(c);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),c;for(c in a)delete a[c]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length>0}}}()),CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire= -function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)),CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")> --1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol=="https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode? -parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var g=a.match(/rv:([\d\.]+)/);if(g){g=g[1].split(".");b=g[0]*1E4+(g[1]||0)*100+(g[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>= -2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air";if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()),"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR); -CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status= -"basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}(),CKEDITOR.dom={},function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,g=/>/g,c=/</g,d=/"/g,i=/&amp;/g,f=/&gt;/g,h=/&lt;/g,j=/&quot;/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,c){if(!a&&!c)return true;if(!a||!c||a.length!=c.length)return false;for(var d=0;d< -a.length;d++)if(a[d]!=c[d])return false;return true},clone:function(a){var c;if(a&&a instanceof Array){c=[];for(var d=0;d<a.length;d++)c[d]=CKEDITOR.tools.clone(a[d]);return c}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;c=new a.constructor;for(d in a)c[d]=CKEDITOR.tools.clone(a[d]);return c},capitalize:function(a,c){return a.charAt(0).toUpperCase()+(c?a.slice(1):a.slice(1).toLowerCase())}, -extend:function(a){var c=arguments.length,d,b;if(typeof(d=arguments[c-1])=="boolean")c--;else if(typeof(d=arguments[c-2])=="boolean"){b=arguments[c-1];c=c-2}for(var f=1;f<c;f++){var g=arguments[f],i;for(i in g)if(d===true||a[i]==null)if(!b||i in b)a[i]=g[i]}return a},prototypedCopy:function(a){var c=function(){};c.prototype=a;return new c},copy:function(a){var c={},d;for(d in a)c[d]=a[d];return c},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var c in a)if(a.hasOwnProperty(c))return false; -return true},cssVendorPrefix:function(a,c,d){if(d)return e+a+":"+c+";"+a+":"+c;d={};d[a]=c;d[e+a]=c;return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,c=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?c:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),c,d=[],b=0;b<a.length;b++)if(c=a[b])/@import|[{}]/.test(c)?d.push("<style>"+ -c+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+c+'">');return d.join("")},htmlEncode:function(a){return(""+a).replace(b,"&amp;").replace(g,"&gt;").replace(c,"&lt;")},htmlDecode:function(a){return a.replace(i,"&").replace(f,">").replace(h,"<")},htmlEncodeAttr:function(a){return a.replace(d,"&quot;").replace(c,"&lt;").replace(g,"&gt;")},htmlDecodeAttr:function(a){return a.replace(j,'"').replace(h,"<").replace(f,">")},getNextNumber:function(){var a=0;return function(){return++a}}(), -getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,c){var d=c(a);d.prototype=a.prototype;return d},setTimeout:function(a,c,d,b,f){f||(f=window);d||(d=f);return f.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},c||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(c){return c.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(c){return c.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(c){return c.replace(a, -"")}}(),indexOf:function(a,c){if(typeof c=="function")for(var d=0,b=a.length;d<b;d++){if(c(a[d]))return d}else{if(a.indexOf)return a.indexOf(c);d=0;for(b=a.length;d<b;d++)if(a[d]===c)return d}return-1},search:function(a,c){var d=CKEDITOR.tools.indexOf(a,c);return d>=0?a[d]:null},bind:function(a,c){return function(){return a.apply(c,arguments)}},createClass:function(a){var c=a.$,d=a.base,b=a.privates||a._,f=a.proto,a=a.statics;!c&&(c=function(){d&&this.base.apply(this,arguments)});if(b)var i=c,c=function(){var a= -this._||(this._={}),c;for(c in b){var d=b[c];a[c]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}i.apply(this,arguments)};if(d){c.prototype=this.prototypedCopy(d.prototype);c.prototype.constructor=c;c.base=d;c.baseProto=d.prototype;c.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}f&&this.extend(c.prototype,f,true);a&&this.extend(c,a,true);return c},addFunction:function(c,d){return a.push(function(){return c.apply(d||this,arguments)})-1}, -removeFunction:function(c){a[c]=null},callFunction:function(c){var d=a[c];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,c;return function(d){c=CKEDITOR.tools.trim(d+"")+"px";return a.test(c)?c:d||""}}(),convertToPx:function(){var a;return function(c){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(c)){a.setStyle("width", -c);return a.$.clientWidth}return c}}(),repeat:function(a,c){return Array(c+1).join(a)},tryThese:function(){for(var a,c=0,d=arguments.length;c<d;c++){var b=arguments[c];try{a=b();break}catch(f){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var c=arguments,d=this;window.setTimeout(function(){a.apply(d,c)},0)}},normalizeCssText:function(a,c){var d=[],b,f=CKEDITOR.tools.parseCssText(a,true,c);for(b in f)d.push(b+":"+f[b]);d.sort(); -return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,c,d,b){a=[c,d,b];for(c=0;c<3;c++)a[c]=("0"+parseInt(a[c],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,c,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, -function(a,d,f){if(c){d=d.toLowerCase();d=="font-family"&&(f=f.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));f=CKEDITOR.tools.trim(f)}b[d]=f});return b},writeCssText:function(a,c){var d,b=[];for(d in a)b.push(d+":"+a[d]);c&&b.sort();return b.join("; ")},objectCompare:function(a,c,d){var b;if(!a&&!c)return true;if(!a||!c)return false;for(b in a)if(a[b]!=c[b])return false;if(!d)for(b in c)if(a[b]!=c[b])return false;return true},objectKeys:function(a){var c=[],d;for(d in a)c.push(d);return c}, -convertArrayToObject:function(a,c){var d={};arguments.length==1&&(c=true);for(var b=0,f=a.length;b<f;++b)d[a[b]]=c;return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(c){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,c){function d(){f=(new Date).getTime();b=false;c()}var b,f=0;return{input:function(){if(!b){var c=(new Date).getTime()-f;c<a?b=setTimeout(d,a-c):d()}},reset:function(){b&&clearTimeout(b); -b=f=0}}},enableHtml5Elements:function(a,c){for(var d=["abbr","article","aside","audio","bdi","canvas","data","datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,f;b--;){f=a.createElement(d[b]);c&&a.appendChild(f)}},checkIfAnyArrayItemMatches:function(a,c){for(var d=0,b=a.length;d<b;++d)if(a[d].match(c))return true;return false},checkIfAnyObjectPropertyMatches:function(a,c){for(var d in a)if(d.match(c))return true; -return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}}(),CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,c){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var c=arguments[b],f;for(f in c)delete d[f]}return d},b={},g={},c={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1, -table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},i={},f={"#":1},h={center:1,dir:1,noframes:1};a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},f,{acronym:1,applet:1, -basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(g,c,b,h);e={a:e(b,{a:1,button:1}),abbr:b,address:g,area:i,article:a({style:1},g),aside:a({style:1},g),audio:a({source:1,track:1},g),b:b,base:i,bdi:b,bdo:b,blockquote:g,body:g,br:i,button:e(b,{a:1,button:1}),canvas:b,caption:g,cite:b,code:b,col:i,colgroup:{col:1},command:i,datalist:a({option:1},b),dd:g,del:b,details:a({summary:1},g),dfn:b,div:a({style:1},g),dl:{dt:1,dd:1},dt:g,em:b,embed:i,fieldset:a({legend:1},g),figcaption:g,figure:a({figcaption:1}, -g),footer:g,form:g,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:g,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:i,html:a({head:1,body:1},g,d),i:b,iframe:f,img:i,input:i,ins:b,kbd:b,keygen:i,label:b,legend:b,li:g,link:i,map:g,mark:b,menu:a({li:1},g),meta:i,meter:e(b,{meter:1}),nav:g,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:f,output:b,p:b,param:i,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:f, -section:a({style:1},g),select:{optgroup:1,option:1},small:b,source:i,span:b,strong:b,style:f,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:g,textarea:f,tfoot:{tr:1},th:g,thead:{tr:1},time:e(b,{time:1}),title:f,tr:{th:1,td:1},track:i,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},g),wbr:i,acronym:b,applet:a({param:1},g),basefont:i,big:b,center:g,dialog:i,dir:{li:1},font:b,isindex:i,noframes:g,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1, -li:1,video:1},c,h),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1, -dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1, -del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1, -tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}(),CKEDITOR.dom.event=function(a){this.$=a},CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a= -this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a=this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}},CKEDITOR.CTRL=1114112,CKEDITOR.SHIFT=2228224,CKEDITOR.ALT= -4456448,CKEDITOR.EVENT_PHASE_CAPTURING=1,CKEDITOR.EVENT_PHASE_AT_TARGET=2,CKEDITOR.EVENT_PHASE_BUBBLING=3,CKEDITOR.dom.domObject=function(a){if(a)this.$=a},CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(g){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(g))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners", -b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),g=b&&b[a];if(g){this.$.removeEventListener?this.$.removeEventListener(a,g,false):this.$.detachEvent&&this.$.detachEvent("on"+ -a,g);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var g=a[b];this.$.detachEvent?this.$.detachEvent("on"+b,g):this.$.removeEventListener&&this.$.removeEventListener(b,g,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(),function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(g){return false}};a.setCustomData=function(a,g){var c=this.getUniqueId();(e[c]|| -(e[c]={}))[a]=g;return this};a.getCustomData=function(a){var g=this.$["data-cke-expando"];return(g=g&&e[g])&&a in g?g[a]:null};a.removeCustomData=function(a){var g=this.$["data-cke-expando"],g=g&&e[g],c,d;if(g){c=g[a];d=a in g;delete g[a]}return d?c:null};a.clearCustomData=function(){this.removeAllListeners();var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)}(CKEDITOR.dom.domObject.prototype), -CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this},CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject,CKEDITOR.NODE_ELEMENT=1,CKEDITOR.NODE_DOCUMENT=9,CKEDITOR.NODE_TEXT=3,CKEDITOR.NODE_COMMENT=8,CKEDITOR.NODE_DOCUMENT_FRAGMENT=11,CKEDITOR.POSITION_IDENTICAL= -0,CKEDITOR.POSITION_DISCONNECTED=1,CKEDITOR.POSITION_FOLLOWING=2,CKEDITOR.POSITION_PRECEDING=4,CKEDITOR.POSITION_IS_CONTAINED=8,CKEDITOR.POSITION_CONTAINS=16,CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),g=function(c){c["data-cke-expando"]&&(c["data-cke-expando"]=false);if(c.nodeType==CKEDITOR.NODE_ELEMENT){e||c.removeAttribute("id",false);if(a)for(var c=c.childNodes,d=0;d<c.length;d++)g(c[d])}};g(b); -return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,g=this.$;g&&g!=b;){var c=g.parentNode;c&&e.unshift(this.getIndex.call({$:g}, -a));g=c}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){var e=this.$,b=-1,g;if(!this.$.parentNode)return b;do if(!a||!(e!=this.$&&e.nodeType==CKEDITOR.NODE_TEXT&&(g||!e.nodeValue))){b++;g=e.nodeType==CKEDITOR.NODE_TEXT}while(e=e.previousSibling);return b},getNextSourceNode:function(a,e,b){if(b&&!b.call)var g=b,b=function(a){return!a.equals(g)};var a=!a&&this.getFirst&&this.getFirst(),c;if(!a){if(this.type== -CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(c=(c||this).getParent());){if(b&&b(c,true)===false)return null;a=c.getNext()}return!a||b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var g=b,b=function(a){return!a.equals(g)};var a=!a&&this.getLast&&this.getLast(),c;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&&(c=(c||this).getParent());){if(b&& -b(c,true)===false)return null;a=c.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e=this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT||a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)? -new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type== -CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(),b=Math.min(e.length,a.length),g=0;g<=b-1;g++)if(e[g]!= -a[g]){if(g<b)return e[g]<a[g]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,g,c;if(!e)b=b.parentNode;if(typeof a=="function"){c=true;g=a}else{c=false;g=function(c){c=typeof c.nodeName=="string"?c.nodeName.toLowerCase():"";return typeof a=="string"?c==a:c in a}}for(;b;){if(g(c?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b); -try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode;if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&& -(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a= -this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true;if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}}),CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this, -a)},CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject,CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft|| -a.body.scrollLeft||0,y:a.documentElement.scrollTop||a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}}),CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject,CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link"); -e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e||b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a, -this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b=this.$.documentElement,g=0;b&&g<a.length;g++){var c=a[g];if(e)for(var d=-1,i=0;i<b.childNodes.length;i++){var f=b.childNodes[i];if(!(e===true&&f.nodeType==3&&f.previousSibling&&f.previousSibling.nodeType==3)){d++;if(d== -c){b=f;break}}}else b=b.childNodes[c]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){!(CKEDITOR.env.ie&&document.documentMode<=8)&&e&&(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)}, -getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a= -this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}}),CKEDITOR.dom.nodeList=function(a){this.$=a},CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}},CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this, -a)},CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))},CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node,CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(a,e,b,g){var c=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), -d=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[c]=e;d[b]=1;return e.setCustomData(b,g)},CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)},CKEDITOR.dom.element.clearMarkers=function(a,e,b){var g=e.getCustomData("list_marker_names"),c=e.getCustomData("list_marker_id"),d;for(d in g)e.removeCustomData(d);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id"); -delete a[c]}},function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function e(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,f=g[a].length;b<f;b++)d=d+(parseInt(this.getComputedStyle(g[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+ -a+"(?:\\s|$)","").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$, -this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is|| -!a.is("br")){a=this.getDocument().createElement("br");CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)& -16)},focus:function(){function a(){try{this.$.focus()}catch(c){}}return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect()); -!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(f){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML= -a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a; -case "checked":a=this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie? -function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&& -(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a=parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<= -8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName(); -if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]==a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span; -return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml(); -if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b=b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false; -for(var a=this.getChildren(),d=0,b=a.count();d<b;d++){var f=a.getItem(d);if(!(f.type==CKEDITOR.NODE_ELEMENT&&f.data("cke-bookmark"))&&(f.type==CKEDITOR.NODE_ELEMENT&&!f.isEmptyInlineRemoveable()||f.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(f.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true; -case "data-cke-expando":continue;default:if(b.specified)return true}}return false}:function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(c){var b=this.$.attributes.getNamedItem(c);if(this.getName()=="input")switch(c){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":c=this.getAttribute("type");return c=="checkbox"||c=="radio"? -this.$.value!="on":!!this.$.value}return!b?false:b.specified}return CKEDITOR.env.ie?CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var f;if(d)for(;f=b.lastChild;)a.insertBefore(b.removeChild(f),a.firstChild);else for(;f=b.firstChild;)a.appendChild(b.removeChild(f))}},mergeSiblings:function(){function a(c, -b,f){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var g=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){g.push(b);b=f?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(c.isIdentical(b)){for(var e=f?c.getLast():c.getFirst();g.length;)g.shift().move(c,!f);b.moveChildren(c,!f);b.remove();e&&e.type==CKEDITOR.NODE_ELEMENT&&e.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(), -show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,c){this.$.setAttribute(a,c);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d== -"src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}: -a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=0;d<a.length;d++)this.removeAttribute(a[d]);else for(d in a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(!d.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var b=["top","left","right","bottom"],f;a=="border"&&(f=["color","style","width"]);for(var d=[],g=0;g<b.length;g++)if(f)for(var e=0;e<f.length;e++)d.push([a,b[g],f[e]].join("-"));else d.push([a,b[g]].join("-"));for(a= -0;a<d.length;a++)this.removeStyle(d[a])}else{d.removeProperty?d.removeProperty(a):d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+ -a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,f=d.count();b<f;b++){a=d.getItem(b);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0, -g=0,f=this.getDocument(),h=f.getBody(),e=f.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var k=this.$.getBoundingClientRect(),m=f.$.documentElement,q=m.clientTop||h.$.clientTop||0,s=m.clientLeft||h.$.clientLeft||0,n=true;if(CKEDITOR.env.ie){n=f.getDocumentElement().contains(this);f=f.getBody().contains(this);n=e&&f||!e&&n}if(n){b=k.left+(!e&&m.scrollLeft||h.$.scrollLeft);b=b-s;g=k.top+(!e&&m.scrollTop||h.$.scrollTop);g=g-q}}else{h=this;for(f=null;h&&!(h.getName()== -"body"||h.getName()=="html");){b=b+(h.$.offsetLeft-h.$.scrollLeft);g=g+(h.$.offsetTop-h.$.scrollTop);if(!h.equals(this)){b=b+(h.$.clientLeft||0);g=g+(h.$.clientTop||0)}for(;f&&!f.equals(h);){b=b-f.$.scrollLeft;g=g-f.$.scrollTop;f=f.getParent()}f=h;h=(k=h.$.offsetParent)?new CKEDITOR.dom.element(k):null}}if(a){h=this.getWindow();f=a.getWindow();if(!h.equals(f)&&h.$.frameElement){a=(new CKEDITOR.dom.element(h.$.frameElement)).getDocumentPosition(a);b=b+a.x;g=g+a.y}}if(!document.documentElement.getBoundingClientRect&& -CKEDITOR.env.gecko&&!e){b=b+(this.$.clientLeft?1:0);g=g+(this.$.clientTop?1:0)}return{x:b,y:g}},scrollIntoView:function(a){var b=this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var g=b.getWindow();try{var f=g.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(h){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,g){var f,h,e,k;function m(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b, -d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}}function q(a,b){var c={x:0,y:0};if(!a.is(n?"body":"html")){var d=a.$.getBoundingClientRect();c.x=d.left;c.y=d.top}d=a.getWindow();if(!d.equals(b)){d=q(CKEDITOR.dom.element.get(d.$.frameElement),b);c.x=c.x+d.x;c.y=c.y+d.y}return c}function s(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var n=e.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=n?e.getBody(): -e.getDocumentElement());e=a.getWindow();h=q(this,e);var l=q(a,e),o=this.$.offsetHeight;f=this.$.offsetWidth;var r=a.$.clientHeight,p=a.$.clientWidth;e=h.x-s(this,"left")-l.x||0;k=h.y-s(this,"top")-l.y||0;f=h.x+f+s(this,"right")-(l.x+p)||0;h=h.y+o+s(this,"bottom")-(l.y+r)||0;if(k<0||h>0)m(0,b===true?k:b===false?h:k<0?k:h);if(g&&(e<0||f>0))m(e<0?e:f,0)},setState:function(a,b,g){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled"); -g&&this.setAttribute("aria-pressed",true);g&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");g&&this.setAttribute("aria-disabled",true);g&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");g&&this.removeAttribute("aria-pressed");g&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$; -try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){for(var g=this.$.attributes,b=b||{},f=0;f<g.length;f++){var h=g[f],e=h.nodeName.toLowerCase(),k;if(!(e in b))if(e=="checked"&&(k=this.getAttribute(e)))a.setAttribute(e,k);else if(!CKEDITOR.env.ie||this.hasAttribute(e)){k=this.getAttribute(e);if(k===null)k=h.nodeValue;a.setAttribute(e,k)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!= -a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(c>=0&&c<f.length)return f[c]}return function(b){var g=this.$;if(b.slice)for(;b.length>0&&g;)g=a(g,b.shift());else g=a(g,b);return g?new CKEDITOR.dom.node(g):null}}(),getChildCount:function(){return this.$.childNodes.length}, -disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a, -b);return null},getEditor:function(){var a=CKEDITOR.instances,b,g;for(b in a){g=a[b];if(g.element.equals(this)&&g.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return g}return null},find:function(b){var d=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this,b)));d();return b},findOne:function(b){var d=a(this),b=this.$.querySelector(e(this,b));d();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,g){if(!g&&(!b||this.type==b))var f=a(this);if(f!==false)for(var g=this.getChildren(), -h=0;h<g.count();h++){f=g.getItem(h);f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}}});var g={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,d,g){if(typeof d=="number"){if(g&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))d=d-b.call(this,a);this.setStyle(a,d+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,d){var g= -Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;d&&(g=g-b.call(this,a));return g}}(),CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a},CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1, -appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}),function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,f=c.startContainer;d=c.endContainer;var g=c.startOffset,k=c.endOffset,h,e=this.guard,i=this.type,j=a?"getPreviousSourceNode": -"getNextSourceNode";if(!a&&!this._.guardLTR){var u=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),t=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(k):d.getNext();this._.guardLTR=function(a,b){return(!b||!u.equals(a))&&(!t||!a.equals(t))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var y=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),z=f.type==CKEDITOR.NODE_ELEMENT?g?f.getChild(g-1):null:f.getPrevious();this._.guardRTL=function(a,b){return(!b||!y.equals(a))&&(!z||!a.equals(z))&& -(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var A=a?this._.guardRTL:this._.guardLTR;h=e?function(a,b){return A(a,b)===false?false:e(a,b)}:A;if(this.current)d=this.current[j](false,i,h);else{if(a)d.type==CKEDITOR.NODE_ELEMENT&&(d=k>0?d.getChild(k-1):h(d,true)===false?null:d.getPreviousSourceNode(true,i,h));else{d=f;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(g)))d=h(f,true)===false?null:f.getNextSourceNode(true,i,h)}d&&h(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator|| -this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[j](false,i,h)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d}function b(a){if(j(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(k))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!j(a.getChild(b))){b= -false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._= -{}}}});var g={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},c={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in c)&&g[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type== -CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var f,g;f=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(g=d.getParent())&&c(g);f=a?f:f||c(d);return!!(b^f)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())|| -CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!i(a)&&!f(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"): -c.getText&&d.test(c.getText());if(f){f=c.getParent();c=c.getNext(b);f=f.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,i=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.dom.walker.bookmark(),h=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b= -i(b)||f(b)||h(b);return!!(a^b)}};var j=CKEDITOR.dom.walker.ignored(),k=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block);CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(f(a)||i(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&& -d.test(a.getText()))?a:false}}(),CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a},function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),f=CKEDITOR.dom.walker.bogus();return function(g){if(c(g)||b(g))return true;if(f(g)&&!a)return a=true;return g.type==CKEDITOR.NODE_TEXT&& -(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(d)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&i(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&j(a)&&(b=a);return h(a)&&!(i(a)&&a.equals(b))})}}var g=function(a){a.collapsed= -a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},c=function(a,b,c,d){a.optimizeBookmark();var f=a.startContainer,g=a.endContainer,h=a.startOffset,e=a.endOffset,i,j;if(g.type==CKEDITOR.NODE_TEXT)g=g.split(e);else if(g.getChildCount()>0)if(e>=g.getChildCount()){g=g.append(a.document.createText(""));j=true}else g=g.getChild(e);if(f.type==CKEDITOR.NODE_TEXT){f.split(h);f.equals(g)&&(g=f.getNext())}else if(h)if(h>=f.getChildCount()){f=f.append(a.document.createText("")); -i=true}else f=f.getChild(h).getPrevious();else{f=f.append(a.document.createText(""),1);i=true}var h=f.getParents(),e=g.getParents(),v,x,u;for(v=0;v<h.length;v++){x=h[v];u=e[v];if(!x.equals(u))break}for(var t=c,y,z,A,B=v;B<h.length;B++){y=h[B];t&&!y.equals(f)&&(z=t.append(y.clone()));for(y=y.getNext();y;){if(y.equals(e[B])||y.equals(g))break;A=y.getNext();if(b==2)t.append(y.clone(true));else{y.remove();b==1&&t.append(y)}y=A}t&&(t=z)}t=c;for(c=v;c<e.length;c++){y=e[c];b>0&&!y.equals(g)&&(z=t.append(y.clone())); -if(!h[c]||y.$.parentNode!=h[c].$.parentNode)for(y=y.getPrevious();y;){if(y.equals(h[c])||y.equals(f))break;A=y.getPrevious();if(b==2)t.$.insertBefore(y.$.cloneNode(true),t.$.firstChild);else{y.remove();b==1&&t.$.insertBefore(y.$,t.$.firstChild)}y=A}t&&(t=z)}if(b==2){x=a.startContainer;if(x.type==CKEDITOR.NODE_TEXT){x.$.data=x.$.data+x.$.nextSibling.data;x.$.parentNode.removeChild(x.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data; -a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(x&&u&&(f.$.parentNode!=x.$.parentNode||g.$.parentNode!=u.$.parentNode)){b=u.getIndex();i&&u.$.parentNode==f.$.parentNode&&b--;if(d&&x.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>',a.document);d.insertAfter(x);x.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(u.getParent(),b)}a.collapse(true)}i&&f.remove();j&&g.$.parentNode&&g.remove()},d={abbr:1, -acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},i=CKEDITOR.dom.walker.bogus(),f=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,h=CKEDITOR.dom.walker.editable(),j=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset; -a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||c(this,2,a);return a},deleteContents:function(a){this.collapsed||c(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| -c(this,1,b,a);return b},createBookmark:function(a){var b,c,d,f,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(g?"C":"S"))}if(!g){c=b.clone();c.setHtml("&nbsp;");a&&c.setAttribute("id",d+"E");f=this.clone();f.collapse();f.insertNode(c)}f=this.clone();f.collapse(true);f.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b, -CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(g?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:g}},createBookmark2:function(){function a(b){var c=b.container,d=b.offset,f;f=c;var g=d;f=f.type!=CKEDITOR.NODE_ELEMENT||g===0||g==f.getChildCount()?0:f.getChild(g-1).type==CKEDITOR.NODE_TEXT&&f.getChild(g).type==CKEDITOR.NODE_TEXT;if(f){c=c.getChild(d-1);d=c.getLength()}c.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=c.getChild(d-1).getIndex(true)+1);if(c.type==CKEDITOR.NODE_TEXT){f=c;for(g=0;(f=f.getPrevious())&& -f.type==CKEDITOR.NODE_TEXT;)g=g+f.getLength();d=d+g}b.container=c;b.offset=d}return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(f)}return{start:d.container.getAddress(b),end:c?null:f.container.getAddress(b),startOffset:d.offset,endOffset:f.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset, -d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT){f=a.getChildCount(); -if(f>c)a=a.getChild(c);else if(f<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){f=b.getChildCount();if(f>d)b=b.getChild(d).getPreviousSourceNode(true);else if(f<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer, -d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a= -this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(g, -this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(f){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!f&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/); -switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,e,i,j,v,x,u=false,t,y;t=this.startContainer;var z=this.startOffset;if(t.type==CKEDITOR.NODE_TEXT){if(z){t=!CKEDITOR.tools.trim(t.substring(0,z)).length&&t;u=!!t}if(t&&!(v=t.getPrevious()))j=t.getParent()}else{z&&(v=t.getChild(z-1)||t.getLast());v||(j=t)}for(j=c(j);j||v;){if(j&&!v){!x&&j.equals(g)&&(x=true);if(f?j.isBlockBoundary():!h.contains(j))break;if(!u|| -j.getComputedStyle("display")!="inline"){u=false;x?e=j:this.setStartBefore(j)}v=j.getPrevious()}for(;v;){t=false;if(v.type==CKEDITOR.NODE_COMMENT)v=v.getPrevious();else{if(v.type==CKEDITOR.NODE_TEXT){y=v.getText();d.test(y)&&(v=null);t=/[\s\ufeff]$/.test(y)}else if((v.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&v.is("br"))&&!v.data("cke-bookmark"))if(u&&CKEDITOR.dtd.$removeEmpty[v.getName()]){y=v.getText();if(d.test(y))v=null;else for(var z=v.$.getElementsByTagName("*"),A=0,B;B=z[A++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){v= -null;break}v&&(t=!!y.length)}else v=null;t&&(u?x?e=j:j&&this.setStartBefore(j):u=true);if(v){t=v.getPrevious();if(!j&&!t){j=v;v=null;break}v=t}else j=null}}j&&(j=c(j.getParent()))}t=this.endContainer;z=this.endOffset;j=v=null;x=u=false;var G=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return false; -y=f!=a?f.getText():f.substring(b);if(d.test(y))return false}return true};if(t.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(t.substring(z)).length)u=true;else{u=!t.getLength();if(z==t.getLength()){if(!(v=t.getNext()))j=t.getParent()}else G(t,z)&&(j=t.getParent())}else(v=t.getChild(z))||(j=t);for(;j||v;){if(j&&!v){!x&&j.equals(g)&&(x=true);if(f?j.isBlockBoundary():!h.contains(j))break;if(!u||j.getComputedStyle("display")!="inline"){u=false;x?i=j:j&&this.setEndAfter(j)}v=j.getNext()}for(;v;){t=false; -if(v.type==CKEDITOR.NODE_TEXT){y=v.getText();G(v,0)||(v=null);t=/^[\s\ufeff]/.test(y)}else if(v.type==CKEDITOR.NODE_ELEMENT){if((v.$.offsetWidth>0||b&&v.is("br"))&&!v.data("cke-bookmark"))if(u&&CKEDITOR.dtd.$removeEmpty[v.getName()]){y=v.getText();if(d.test(y))v=null;else{z=v.$.getElementsByTagName("*");for(A=0;B=z[A++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){v=null;break}}v&&(t=!!y.length)}else v=null}else t=1;t&&u&&(x?i=j:this.setEndAfter(j));if(v){t=v.getNext();if(!j&&!t){j=v; -v=null;break}v=t}else j=null}j&&(j=c(j.getParent()))}if(e&&i){g=e.contains(i)?i:e;this.setStartBefore(g);this.setEndAfter(g)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:j=new CKEDITOR.dom.range(this.root);h=this.root;j.setStartAt(h,CKEDITOR.POSITION_AFTER_START);j.setEnd(this.startContainer,this.startOffset);j=new CKEDITOR.dom.walker(j);var C,J,F=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),E=null,D=function(a){if(a.type== -CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(E){if(E.equals(a)){E=null;return}}else E=a;else if(E)return;var b=F(a);b||(C=a);return b},f=function(a){var b=D(a);!b&&(a.is&&a.is("br"))&&(J=a);return b};j.guard=D;j=j.lastBackward();C=C||h;this.setStartAt(C,!C.is("br")&&(!j&&this.checkStartOfBlock()||j&&C.contains(j))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){j=this.clone();j=new CKEDITOR.dom.walker(j);var I=CKEDITOR.dom.walker.whitespaces(), -L=CKEDITOR.dom.walker.bookmark();j.evaluator=function(a){return!I(a)&&!L(a)};if((j=j.previous())&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))break}j=this.clone();j.collapse();j.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);j=new CKEDITOR.dom.walker(j);j.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:D;C=E=J=null;j=j.lastForward();C=C||h;this.setEndAt(C,!j&&this.checkEndOfBlock()||j&&C.contains(j)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);J&&this.setEndAfter(J)}},shrink:function(a,b,c){if(!this.collapsed){var a= -a||CKEDITOR.SHRINK_TEXT,d=this.clone(),f=this.startContainer,g=this.endContainer,h=this.startOffset,e=this.endOffset,i=1,j=1;if(f&&f.type==CKEDITOR.NODE_TEXT)if(h)if(h>=f.getLength())d.setStartAfter(f);else{d.setStartBefore(f);i=0}else d.setStartBefore(f);if(g&&g.type==CKEDITOR.NODE_TEXT)if(e)if(e>=g.getLength())d.setEndAfter(g);else{d.setEndAfter(g);j=0}else d.setEndBefore(g);var d=new CKEDITOR.dom.walker(d),v=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT? -CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var x;d.guard=function(b,d){if(v(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(x)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(x=b);return true};if(i)(f=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START); -if(j){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!i&&!j)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer, -a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=a;this.endOffset=b}g(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b= -a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}g(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a, -0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}g(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a); -break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}g(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,f=c.block,g=null; -if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!d){d=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();this.deleteContents();if(d&&d.equals(f))if(b){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(a){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d, -CKEDITOR.POSITION_BEFORE_START);d=null}else{f=this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:f,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:g}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)|| -(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,g;f&&!f.equals(d.root)&&!f.getFirst(a(f));){g=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=g}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer, -this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0, -c));f.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));f.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer, -this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d); -c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a, -b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&f.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&& -this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,g=c,h=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(h=d[b?"getLast":"getFirst"](j));!g&&!h&&(h=d[b?"getPrevious":"getNext"](j));a=h}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,f,g=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START]; -c.moveToPosition(a,g[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if(f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)&&f.getAttribute("contenteditable")=="false"){c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(f,g[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a, -true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT? -a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",this.document),b,c,d,f=this.clone();f.optimize();if(d=f.startContainer.type==CKEDITOR.NODE_TEXT){c=f.startContainer.getText();b=f.startContainer.split(f.startOffset);a.insertAfter(f.startContainer)}else f.insertNode(a); -a.scrollIntoView();if(d){f.startContainer.setText(c);b.remove()}a.remove()}}}(),CKEDITOR.POSITION_AFTER_START=1,CKEDITOR.POSITION_BEFORE_END=2,CKEDITOR.POSITION_BEFORE_START=3,CKEDITOR.POSITION_AFTER_END=4,CKEDITOR.ENLARGE_ELEMENT=1,CKEDITOR.ENLARGE_BLOCK_CONTENTS=2,CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3,CKEDITOR.ENLARGE_INLINE=4,CKEDITOR.START=1,CKEDITOR.END=2,CKEDITOR.SHRINK_ELEMENT=1,CKEDITOR.SHRINK_TEXT=2,"use strict",function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak= -0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a,b,c){for(a=a.getNextSourceNode(b,null,c);!i(a);)a=a.getNextSourceNode(b,null,c);return a}function b(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function g(a,c,d,f){a:{f==null&&(f=b(d));for(var h;h=f.shift();)if(h.getDtd().p){f={element:h,remaining:f};break a}f=null}if(!f)return 0;if((h=CKEDITOR.filter.instances[f.element.data("cke-filter")])&& -!h.check(c))return g(a,c,d,f.remaining);c=new CKEDITOR.dom.range(f.element);c.selectNodeContents(f.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:f.element,container:d,remaining:f.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var d=/^[\r\n\t ]+$/,i=CKEDITOR.dom.walker.bookmark(false,true), -f=CKEDITOR.dom.walker.whitespaces(true),h=function(a){return i(a)&&f(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var b,f,s,n,l,a=a||"p";if(this._.nestedEditable){if(b=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return b}this.activeFilter=this.filter;if(g(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= -null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var o=this.range.clone();f=o.startPath();var r=o.endPath(),p=!o.collapsed&&c(o,f.block),w=!o.collapsed&&c(o,r.block,1);o.shrink(CKEDITOR.SHRINK_ELEMENT,true);p&&o.setStartAt(f.block,CKEDITOR.POSITION_BEFORE_END);w&&o.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);f=o.endContainer.hasAscendant("pre",true)||o.startContainer.hasAscendant("pre",true);o.enlarge(this.forceBrBreak&&!f||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: -CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!o.collapsed){f=new CKEDITOR.dom.walker(o.clone());r=CKEDITOR.dom.walker.bookmark(true,true);f.evaluator=r;this._.nextNode=f.next();f=new CKEDITOR.dom.walker(o.clone());f.evaluator=r;f=f.previous();this._.lastNode=f.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){r=this.range.clone();r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); -if(r.checkEndOfBlock()){r=new CKEDITOR.dom.elementPath(r.endContainer,r.root);this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!o.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=o.document.createText("");this._.lastNode.insertAfter(f)}o=null}this._.started=1;f=o}r=this._.nextNode;o=this._.lastNode;for(this._.nextNode=null;r;){var p=0,w=r.hasAscendant("pre"),v=r.type!=CKEDITOR.NODE_ELEMENT,x=0;if(v)r.type==CKEDITOR.NODE_TEXT&&d.test(r.getText())&& -(v=0);else{var u=r.getName();if(CKEDITOR.dtd.$block[u]&&r.getAttribute("contenteditable")=="false"){b=r;g(this,a,b);break}else if(r.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if(u=="br")v=1;else if(!f&&!r.getChildCount()&&u!="hr"){b=r;s=r.equals(o);break}if(f){f.setEndAt(r,CKEDITOR.POSITION_BEFORE_START);if(u!="br")this._.nextNode=r}p=1}else{if(r.getFirst()){if(!f){f=this.range.clone();f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}r=r.getFirst();continue}v=1}}if(v&&!f){f=this.range.clone(); -f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}s=(!p||v)&&r.equals(o);if(f&&!p)for(;!r.getNext(h)&&!s;){u=r.getParent();if(u.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){p=1;v=0;s||u.equals(o);f.setEndAt(u,CKEDITOR.POSITION_BEFORE_END);break}r=u;v=1;s=r.equals(o);x=1}v&&f.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=e(r,x,o);if((s=!r)||p&&f)break}if(!b){if(!f){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}b=new CKEDITOR.dom.elementPath(f.startContainer,f.root);r=b.blockLimit; -p={div:1,th:1,td:1};b=b.block;if(!b&&r&&!this.enforceRealBlocks&&p[r.getName()]&&f.checkStartOfBlock()&&f.checkEndOfBlock()&&!r.equals(f.root))b=r;else if(!b||this.enforceRealBlocks&&b.is(j)){b=this.range.document.createElement(a);f.extractContents().appendTo(b);b.trim();f.insertNode(b);n=l=true}else if(b.getName()!="li"){if(!f.checkStartOfBlock()||!f.checkEndOfBlock()){b=b.clone(false);f.extractContents().appendTo(b);b.trim();l=f.splitBlock();n=!l.wasStartOfBlock;l=!l.wasEndOfBlock;f.insertNode(b)}}else if(!s)this._.nextNode= -b.equals(o)?null:e(f.getBoundaryNodes().endNode,1,o)}if(n)(n=b.getPrevious())&&n.type==CKEDITOR.NODE_ELEMENT&&(n.getName()=="br"?n.remove():n.getLast()&&n.getLast().$.nodeName.toLowerCase()=="br"&&n.getLast().remove());if(l)(n=b.getLast())&&n.type==CKEDITOR.NODE_ELEMENT&&n.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||n.getPrevious(i)||n.getNext(i))&&n.remove();if(!this._.nextNode)this._.nextNode=s||b.equals(o)||!o?null:e(b,1,o);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}}(), -CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& -this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(g){return!g&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)},CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState|| -typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}},CKEDITOR.event.implementOn(CKEDITOR.command.prototype), -CKEDITOR.ENTER_P=1,CKEDITOR.ENTER_BR=2,CKEDITOR.ENTER_DIV=3,CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]},function(){function a(a, -b,c,d,f){var g,h,a=[];for(g in b){h=b[g];h=typeof h=="boolean"?{}:typeof h=="function"?{match:h}:G(h);if(g.charAt(0)!="$")h.elements=g;if(c)h.featureName=c.toLowerCase();var e=h;e.elements=i(e.elements,/\s+/)||null;e.propertiesOnly=e.propertiesOnly||e.elements===true;var j=/\s*,\s*/,o=void 0;for(o in E){e[o]=i(e[o],j)||null;var p=e,n=D[o],k=i(e[D[o]],j),x=e[o],w=[],F=true,v=void 0;k?F=false:k={};for(v in x)if(v.charAt(0)=="!"){v=v.slice(1);w.push(v);k[v]=true;F=false}for(;v=w.pop();){x[v]=x["!"+v]; -delete x["!"+v]}p[n]=(F?false:k)||null}e.match=e.match||null;d.push(h);a.push(h)}for(var b=f.elements,f=f.generic,l,c=0,d=a.length;c<d;++c){g=G(a[c]);h=g.classes===true||g.styles===true||g.attributes===true;e=g;o=n=j=void 0;for(j in E)e[j]=r(e[j]);p=true;for(o in D){j=D[o];n=e[j];k=[];x=void 0;for(x in n)x.indexOf("*")>-1?k.push(RegExp("^"+x.replace(/\*/g,".*")+"$")):k.push(x);n=k;if(n.length){e[j]=n;p=false}}e.nothingRequired=p;e.noProperties=!(e.attributes||e.classes||e.styles);if(g.elements=== -true||g.elements===null)f[h?"unshift":"push"](g);else{e=g.elements;delete g.elements;for(l in e)if(b[l])b[l][h?"unshift":"push"](g);else b[l]=[g]}}}function e(a,c,d,g){if(!a.match||a.match(c))if(g||f(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;g=d.validClasses;if(a)if(a===true)a=true;else{for(var h=0,e=c.length,i;h< -e;++h){i=c[h];g[i]||(g[i]=a(i))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function g(a,b,d){if(!a.match||a.match(b)){if(a.noProperties)return false;d.hadInvalidAttribute=c(a.attributes,b.attributes)||d.hadInvalidAttribute;d.hadInvalidStyle=c(a.styles,b.styles)||d.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var f=false,g=a===true,h=b.length;h--;)if(g||a(b[h])){b.splice(h,1);f=true}a=f}else a= -false;d.hadInvalidClass=a||d.hadInvalidClass}}function c(a,b){if(!a)return false;var c=false,d=a===true,f;for(f in b)if(d||a(f)){delete b[f];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function i(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=C(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):false; -var c={},d=0,f;for(f in a){c[f]=a[f];d++}return d?c:false}function f(a,b){if(a.nothingRequired)return true;var c,d,f,g;if(f=a.requiredClasses){g=b.classes;for(c=0;c<f.length;++c){d=f[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(g,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(g,d))return false}}return h(b.styles,a.requiredStyles)&&h(b.attributes,a.requiredAttributes)}function h(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in -a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function j(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=J;return b}function k(a){for(var b,c,d,f,g={},h=1,a=C(a);b=a.match(I);){if(c=b[2]){d=m(c,"styles");f=m(c,"attrs");c=m(c,"classes")}else d=f=c=null;g["$"+h++]={elements:b[1],classes:c,styles:d,attributes:f};a=a.slice(b[0].length)}return g}function m(a,b){var c=a.match(L[b]);return c?C(c[1]):null}function q(a){var b= -a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function s(a,b,c,d){var f=0,h;if(d.toHtml)b.name=b.name.replace(H,"$1");if(d.doCallbacks&&a.elementCallbacks){a:for(var i=a.elementCallbacks,j=0,p=i.length,r;j<p;++j)if(r=i[j](b)){h=r;break a}if(h)return h}if(d.doTransform)if(h=a._.transformations[b.name]){q(b);for(i=0;i<h.length;++i)x(a,b,h[i]);l(b)}if(d.doFilter){a:{i=b.name; -j=a._;a=j.allowedRules.elements[i];h=j.allowedRules.generic;i=j.disallowedRules.elements[i];j=j.disallowedRules.generic;p=d.skipRequired;r={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var n,k;if(!a&&!h)a=null;else{q(b);if(i){n=0;for(k=i.length;n<k;++n)if(g(i[n],b,r)===false){a=null;break a}}if(j){n=0;for(k=j.length;n<k;++n)g(j[n],b,r)}if(a){n=0;for(k=a.length;n< -k;++n)e(a[n],b,r,p)}if(h){n=0;for(k=h.length;n<k;++n)e(h[n],b,r,p)}a=r}}if(!a){c.push(b);return B}if(!a.valid){c.push(b);return B}k=a.validAttributes;var w=a.validStyles;h=a.validClasses;var i=b.attributes,v=b.styles,j=b.classes,p=b.classBackup,F=b.styleBackup,m,E,u=[];r=[];var I=/^data-cke-/;n=false;delete i.style;delete i["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(m in i)if(!k[m])if(I.test(m)){if(m!=(E=m.replace(/^data-cke-saved-/,""))&&!k[E]){delete i[m];n=true}}else{delete i[m]; -n=true}if(!a.allStyles||a.hadInvalidStyle){for(m in v)a.allStyles||w[m]?u.push(m+":"+v[m]):n=true;if(u.length)i.style=u.sort().join("; ")}else if(F)i.style=F;if(!a.allClasses||a.hadInvalidClass){for(m=0;m<j.length;++m)(a.allClasses||h[j[m]])&&r.push(j[m]);r.length&&(i["class"]=r.sort().join(" "));p&&r.length<p.split(/\s+/).length&&(n=true)}else p&&(i["class"]=p);n&&(f=B);if(!d.skipFinalValidation&&!o(b)){c.push(b);return B}}if(d.toHtml)b.name=b.name.replace(Q,"cke:$1");return f}function n(a){var b= -[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function l(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function o(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function r(a){if(!a)return false;if(a===true)return true; -var b=n(a);return function(c){return c in a||b&&c.match(b)}}function p(){return new CKEDITOR.htmlParser.element("br")}function w(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||A.$block[a.name])}function v(a,b,c){var d=a.name;if(A.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(p());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(A.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!w(a.previous)){b=p();b.insertBefore(a)}if(a.next&&!w(a.next)){b=p();b.insertAfter(a)}a.replaceWithChildren()}else{var d= -a.children,f;b:{f=A[b];for(var g=0,h=d.length,e;g<h;++g){e=d[g];if(e.type==CKEDITOR.NODE_ELEMENT&&!f[e.name]){f=false;break b}}f=true}if(f){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{f=a.parent;for(var g=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.name=="body",i,h=d.length;h>0;){e=d[--h];if(g&&(e.type==CKEDITOR.NODE_TEXT||e.type==CKEDITOR.NODE_ELEMENT&&A.$inline[e.name])){if(!i){i=new CKEDITOR.htmlParser.element(b);i.insertAfter(a);c.push({check:"parent-down",el:i})}i.add(e,0)}else{i= -null;e.insertAfter(a);f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e.type==CKEDITOR.NODE_ELEMENT&&!A[f.name][e.name])&&c.push({check:"el-up",el:e})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function x(a,b,c){var d,f;for(d=0;d<c.length;++d){f=c[d];if((!f.check||a.check(f.check,false))&&(!f.left||f.left(b))){f.right(b,O);break}}}function u(a,b){var c=b.getDefinition(),d=c.attributes,f=c.styles,g,h,e,i;if(a.name!=c.element)return false; -for(g in d)if(g=="class"){c=d[g].split(/\s+/);for(e=a.classes.join("|");i=c.pop();)if(e.indexOf(i)==-1)return false}else if(a.attributes[g]!=d[g])return false;for(h in f)if(a.styles[h]!=f[h])return false;return true}function t(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function y(a){return function(b){return u(b,a)}}function z(a){return function(b,c){c[a](b)}}var A=CKEDITOR.dtd, -B=1,G=CKEDITOR.tools.copy,C=CKEDITOR.tools.trim,J="cke-test",F=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a; -this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(F[a.enterMode]+" "+F[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,f){if(!d(this,b,f))return false;var g,h;if(typeof b=="string")b=k(b); -else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,f);g=b.getDefinition();b={};f=g.attributes;b[g.element]=g={styles:g.styles,requiredStyles:g.styles&&CKEDITOR.tools.objectKeys(g.styles)};if(f){f=G(f);g.classes=f["class"]?f["class"].split(/\s+/):null;g.requiredClasses=g.classes;delete f["class"];g.attributes=f;g.requiredAttributes=f&&CKEDITOR.tools.objectKeys(f)}}else if(CKEDITOR.tools.isArray(b)){for(g=0;g<b.length;++g)h=this.allow(b[g], -c,f);return h}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var f=this,g=[],h=this.editor&&this.editor.config.protectedSource,e,i=false,j={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){e=s(f,a,g,j);if(e&B)i= -true;else if(e&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var o,p,n;if(h)for(p=0;p<h.length;++p)if((n=d.match(h[p]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(o=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&s(f,o,c,j);c=!c.length}c||g.push(a)}},null,true);g.length&&(i=true);for(var p,a=[],d=F[d||(this.editor? -this.editor.enterMode:CKEDITOR.ENTER_P)];c=g.pop();)c.type==CKEDITOR.NODE_ELEMENT?v(c,d,a):c.remove();for(;p=a.pop();){c=p.el;if(c.parent)switch(p.check){case "it":A.$removeEmpty[c.name]&&!c.children.length?v(c,d,a):o(c)||v(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!A[c.parent.name][c.name]&&v(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!A[c.parent.name][c.name]&&v(c.parent,d,a)}}return i},checkFeature:function(a){if(this.disabled|| -!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=k(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],f;for(b=0;b<a.length&&!f;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))f=c}if(f){for(b=0;b<a.length;++b)d.push(t(a[b], -f));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, -c;if(!this.disabled&&a){var d=this._.transformations,f;for(f=0;f<a.length;++f){b=a[f];var g=void 0,h=void 0,e=void 0,i=void 0,j=void 0,o=void 0;c=[];for(h=0;h<b.length;++h){e=b[h];if(typeof e=="string"){e=e.split(/\s*:\s*/);i=e[0];j=null;o=e[1]}else{i=e.check;j=e.left;o=e.right}if(!g){g=e;g=g.element?g.element:i?i.match(/^([a-z0-9]+)/i)[0]:g.left.getDefinition().element}j instanceof CKEDITOR.style&&(j=y(j));c.push({check:i==g?null:i,left:j,right:typeof o=="string"?z(o):o})}b=g;d[b]||(d[b]=[]);d[b].push(c)}}}, -check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var f,g;if(typeof a=="string"){g=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(g in this._.cachedChecks)return this._.cachedChecks[g];d=k(a).$1;f=d.styles;var h=d.classes;d.name=d.elements;d.classes=h=h?h.split(/\s*,\s*/):[];d.styles=j(f);d.attributes=j(d.attributes);d.children=[];h.length&&(d.attributes["class"]=h.join(" "));if(f)d.attributes.style= -CKEDITOR.tools.writeCssText(d.styles);f=d}else{d=a.getDefinition();f=d.styles;h=d.attributes||{};if(f){f=G(f);h.style=CKEDITOR.tools.writeCssText(f,true)}else f={};f={name:d.element,attributes:h,classes:h["class"]?h["class"].split(/\s+/):[],styles:f,children:[]}}var h=CKEDITOR.tools.clone(f),e=[],i;if(b!==false&&(i=this._.transformations[f.name])){for(d=0;d<i.length;++d)x(this,f,i[d]);l(f)}s(this,h,e,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=e.length>0?false: -CKEDITOR.tools.objectCompare(f.attributes,h.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[g]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var f=a.slice(),g;if(this.check(F[c]))return c;for(d||(f=f.reverse());g=f.pop();)if(this.check(g))return b[g];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; -delete this.disallowedContent}};var E={styles:1,attributes:1,classes:1},D={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},I=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,L={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},H=/^cke:(object|embed|param)$/,Q=/^(object|embed|param)$/,O=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, -"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],f=d&&d.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[c]=f[1]:d==J&&(a.attributes[c]=J)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= -a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:u,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,f=c.attributes,g,h,e,i;a.name=c.element;for(g in f)if(g=="class"){c=a.classes.join("|");for(e=f[g].split(/\s+/);i=e.pop();)c.indexOf(i)==-1&& -a.classes.push(i)}else a.attributes[g]=f[g];for(h in d)a.styles[h]=d[h]}}}}(),function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true; -(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}},lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer; -e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b||b!=this){b&&b.remove(a);var b="focus",g="blur";if(e)if(CKEDITOR.env.ie){b="focusin";g="focusout"}else CKEDITOR.event.useCapture=1;var c={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,c.focus,this);a.on(g,c.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",c)}},remove:function(a){a.removeCustomData("focusmanager"); -var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur",e.blur);a.removeListener("focus",e.focus)}}}(),CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this},function(){var a,e=function(b){var b=b.data,c=b.getKeystroke(),d=this.keystrokes[c],e=this._.editor;a=e.fire("key",{keyCode:c,domEvent:b})===false;if(!a){d&&(a=e.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a= -!!this.blockedKeystrokes[c])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}}(),function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1, -km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e,a);var g=this,e=function(){g[a].dir=g.rtl[a]?"rtl":"ltr";b(a,g[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language|| -a,g=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),c=g[1],g=g[2];b[c+"-"+g]?c=c+"-"+g:b[c]||(c=null);CKEDITOR.lang.detect=c?function(){return c}:function(a){return a};return c||a}}}(),CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,g,c,d){var i=typeof b=="string";i&&(b=[b]);c||(c=CKEDITOR);var f=b.length,h=[],j=[],k=function(a){g&&(i?g.call(c,a):g.call(c,h,j))};if(f===0)k(true);else{var m=function(a,b){(b?h:j).push(a);if(--f<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"); -k(b)}},q=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var f=0;f<d.length;f++)d[f](b,c)},s=function(b){if(a[b])m(b,true);else{var c=e[b]||(e[b]=[]);c.push(m);if(!(c.length>1)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:b});if(g)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)d.$.onreadystatechange=function(){if(d.$.readyState=="loaded"||d.$.readyState=="complete"){d.$.onreadystatechange=null;q(b,true)}};else{d.$.onload=function(){setTimeout(function(){q(b,true)}, -0)};d.$.onerror=function(){q(b,false)}}d.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var n=0;n<f;n++)s(b[n])}},queue:function(){function a(){var b;(b=g[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var g=[];return function(c,d){var e=this;g.push({scriptUrl:c,callback:function(){d&&d.apply(this,arguments);g.shift();a.call(e)}});g.length==1&&a.call(this)}}()}}(),CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName= -e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&& -e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),g=0;g<a.length;g++){var c=a[g];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[c]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var g=this.loaded,c=this.registered,d=[],i={},f={},h=0;h<a.length;h++){var j=a[h];if(j)if(!g[j]&& -!c[j]){var k=this.getFilePath(j);d.push(k);k in i||(i[k]=[]);i[k].push(j)}else f[j]=this.get(j)}CKEDITOR.scriptLoader.load(d,function(a,c){if(c.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+i[c[0]].join(",")+'" was not found at "'+c[0]+'".';for(var d=0;d<a.length;d++)for(var h=i[a[d]],j=0;j<h.length;j++){var o=h[j];f[o]=this.get(o);g[o]=1}e.call(b,f)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load, -function(a){var e={};return function(b,g,c){var d={},i=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],f;for(f in a){var m=a[f],q=m&&m.requires;if(!e[f]){if(m.icons)for(var s=m.icons.split(","),n=s.length;n--;)CKEDITOR.skin.addIcon(s[n],m.path+"icons/"+(CKEDITOR.env.hidpi&&m.hidpi?"hidpi/":"")+s[n]+".png");e[f]=1}if(q){q.split&&(q=q.split(","));for(m=0;m<q.length;m++)d[q[m]]||b.push(q[m])}}if(b.length)i.call(this,b);else{for(f in d){m=d[f];if(m.onLoad&&!m.onLoad._called){m.onLoad()=== -false&&delete d[f];m.onLoad._called=1}}g&&g.call(c||window,d)}},this)};i.call(this,b)}}),CKEDITOR.plugins.setLang=function(a,e,b){var g=this.get(a),a=g.langEntries||(g.langEntries={}),g=g.lang||(g.lang=[]);g.split&&(g=g.split(","));CKEDITOR.tools.indexOf(g,e)==-1&&g.push(e);a[e]=b},CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this},CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var g=this.items[a]={type:e, -command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(g,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],g=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;g&&g.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]=e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+ -"_"+a}},CKEDITOR.event.implementOn(CKEDITOR.ui),function(){function a(a,d,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(d!==void 0){if(d instanceof CKEDITOR.dom.element){if(!f)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(f==CKEDITOR.ELEMENT_MODE_INLINE?d.is(CKEDITOR.dtd.$editable)|| -d.is("textarea"):f==CKEDITOR.ELEMENT_MODE_REPLACE?!d.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+d.getName()+'".');this.element=d;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(d.getId()||d.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config); -this.ui=new CKEDITOR.ui(this);this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){c(this,a.data.path)});this.on("activeFilterChange",function(){c(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){i(this,a)},0,this)} -function e(){do var a="editor"+ ++q;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)g(this,a[b])}function g(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function c(a,b,c){if(b){var d,f,g=a.commands;for(f in g){d=g[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=s[b]||(s[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)== -b||!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function i(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== -CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= -new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);f(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function f(a){CKEDITOR.skin.loadPart("editor",function(){h(a)})}function h(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= -a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");j(a)})}function j(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);k(a)})}function k(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var g=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(g,""),c=c+(","+d);if(f)var h=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(h,"");CKEDITOR.env.air&& -(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],g=[];a.plugins=c;for(var e in c){var i=c[e],j=i.lang,p=null,o=i.requires,r;CKEDITOR.tools.isArray(o)&&(o=o.join(","));if(o&&(r=o.match(h)))for(;o=r.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[o,e]);if(j&&!a.lang[e]){j.split&&(j=j.split(","));if(CKEDITOR.tools.indexOf(j,a.langCode)>= -0)p=a.langCode;else{p=a.langCode.replace(/-.*/,"");p=p!=a.langCode&&CKEDITOR.tools.indexOf(j,p)>=0?p:CKEDITOR.tools.indexOf(j,"en")>=0?"en":j[0]}if(!i.langEntries||!i.langEntries[p])g.push(CKEDITOR.getUrl(i.path+"lang/"+p+".js"));else{a.lang[e]=i.langEntries[p];p=null}}f.push(p);d.push(i)}CKEDITOR.scriptLoader.load(g,function(){for(var c=["beforeInit","init","afterInit"],g=0;g<c.length;g++)for(var h=0;h<d.length;h++){var e=d[h];g===0&&(f[h]&&e.lang&&e.langEntries)&&(a.lang[e.name]=e.langEntries[f[h]]); -if(e[c[g]])e[c[g]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function m(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): -a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var q=0,s={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var c=new CKEDITOR.command(this,b);this.mode&&g(this,c);return this.commands[a]=c},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& -d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&m.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", -null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", -d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& -(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,f=b;if(b&&typeof b=="object"){c=b.internal;f=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(f||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= -a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return m.call(this)}, -setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), -a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})}(),CKEDITOR.ELEMENT_MODE_NONE=0,CKEDITOR.ELEMENT_MODE_REPLACE=1,CKEDITOR.ELEMENT_MODE_APPENDTO=2,CKEDITOR.ELEMENT_MODE_INLINE=3,CKEDITOR.htmlParser=function(){this._= -{htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}},function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){}, -parse:function(b){for(var g,c,d=0,i;g=this._.htmlPartsRegex.exec(b);){c=g.index;if(c>d){d=b.substring(d,c);if(i)i.push(d);else this.onText(d)}d=this._.htmlPartsRegex.lastIndex;if(c=g[1]){c=c.toLowerCase();if(i&&CKEDITOR.dtd.$cdata[c]){this.onCDATA(i.join(""));i=null}if(!i){this.onTagClose(c);continue}}if(i)i.push(g[0]);else if(c=g[3]){c=c.toLowerCase();if(!/="/.test(c)){var f={},h;g=g[4];var j=!!(g&&g.charAt(g.length-1)=="/");if(g)for(;h=a.exec(g);){var k=h[1].toLowerCase();h=h[2]||h[3]||h[4]||""; -f[k]=!h&&e[k]?k:CKEDITOR.tools.htmlDecodeAttr(h)}this.onTagOpen(c,f,j);!i&&CKEDITOR.dtd.$cdata[c]&&(i=[])}}else if(c=g[2])this.onComment(c)}if(b.length>d)this.onText(b.substring(d,b.length))}}}(),CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e)); -this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}}),"use strict",function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children, -e=CKEDITOR.tools.indexOf(a,this),b=this.previous,g=this.next;b&&(b.next=g);g&&(g.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),g=a.previous=this.previous,c=a.next=this.next;g&&(g.next=a);c&&(c.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a),g=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;g&&(g.previous= -this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&&b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this); -return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}}(),"use strict",CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}},CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value= -b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}}),"use strict",function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata= -function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})}(),"use strict",CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}},function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1, -ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},g=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),c={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(d,i,f){function h(a){var b;if(o.length>0)for(var c=0;c<o.length;c++){var d=o[c],f=d.name,g=CKEDITOR.dtd[f],h=p.name&&CKEDITOR.dtd[p.name];if((!h||h[f])&&(!a||!g||g[a]|| -!CKEDITOR.dtd[a])){if(!b){j();b=1}d=d.clone();d.parent=p;p=d;o.splice(c,1);c--}else if(f==p.name){m(p,p.parent,1);c--}}}function j(){for(;r.length;)m(r.shift(),p)}function k(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))?c.value=d:a.children.length=b-1}}function m(b,c,d){var c=c||p||l,g=p;if(b.previous===void 0){if(q(c,b)){p=c;n.onTagOpen(f,{});b.returnPoint=c=p}k(b);(!a(b)||b.children.length)&& -c.add(b);b.name=="pre"&&(v=false);b.name=="textarea"&&(w=false)}if(b.returnPoint){p=b.returnPoint;delete b.returnPoint}else p=d?c:g}function q(a,b){if((a==l||a.name=="body")&&f&&(!a.name||CKEDITOR.dtd[a.name][f])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function s(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"|| -a=="dd"&&b=="dt":false}var n=new CKEDITOR.htmlParser,l=i instanceof CKEDITOR.htmlParser.element?i:typeof i=="string"?new CKEDITOR.htmlParser.element(i):new CKEDITOR.htmlParser.fragment,o=[],r=[],p=l,w=l.name=="textarea",v=l.name=="pre";n.onTagOpen=function(c,d,f,i){d=new CKEDITOR.htmlParser.element(c,d);if(d.isUnknown&&f)d.isEmpty=true;d.isOptionalClose=i;if(a(d))o.push(d);else{if(c=="pre")v=true;else{if(c=="br"&&v){p.add(new CKEDITOR.htmlParser.text("\n"));return}c=="textarea"&&(w=true)}if(c=="br")r.push(d); -else{for(;;){i=(f=p.name)?CKEDITOR.dtd[f]||(p._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):g;if(!d.isUnknown&&!p.isUnknown&&!i[c])if(p.isOptionalClose)n.onTagClose(f);else if(c in b&&f in b){f=p.children;(f=f[f.length-1])&&f.name=="li"||m(f=new CKEDITOR.htmlParser.element("li"),p);!d.returnPoint&&(d.returnPoint=p);p=f}else if(c in CKEDITOR.dtd.$listItem&&!s(c,f))n.onTagOpen(c=="li"?"ul":"dl",{},0,1);else if(f in e&&!s(c,f)){!d.returnPoint&&(d.returnPoint=p);p=p.parent}else{f in CKEDITOR.dtd.$inline&& -o.unshift(p);if(p.parent)m(p,p.parent,1);else{d.isOrphan=1;break}}else break}h(c);j();d.parent=p;d.isEmpty?m(d):p=d}}};n.onTagClose=function(a){for(var b=o.length-1;b>=0;b--)if(a==o[b].name){o.splice(b,1);return}for(var c=[],d=[],g=p;g!=l&&g.name!=a;){g._.isBlockLike||d.unshift(g);c.push(g);g=g.returnPoint||g.parent}if(g!=l){for(b=0;b<c.length;b++){var h=c[b];m(h,h.parent)}p=g;g._.isBlockLike&&j();m(g,g.parent);if(g==p)p=p.parent;o=o.concat(d)}a=="body"&&(f=false)};n.onText=function(a){if((!p._.hasInlineStarted|| -r.length)&&!v&&!w){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=p.name,d=b?CKEDITOR.dtd[b]||(p._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):g;if(!w&&!d["#"]&&b in e){n.onTagOpen(c[b]||"");n.onText(a)}else{j();h();!v&&!w&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a);if(q(p,a))this.onTagOpen(f,{},0,1);p.add(a)}};n.onCDATA=function(a){p.add(new CKEDITOR.htmlParser.cdata(a))};n.onComment=function(a){j();h();p.add(new CKEDITOR.htmlParser.comment(a))};n.parse(d); -for(j();p!=l;)m(p,p.parent,1);k(l);return l};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT|| -a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a,c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var g=this.getFilterContext(); -if(c&&!this.parent&&b)b.onRoot(g,this);b&&this.filterChildren(b,false,g);b=0;c=this.children;for(g=c.length;b<g;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var g=a(this);if(g!==false)for(var c=this.children,e=0;e<c.length;e++){g=c[e];g.type==CKEDITOR.NODE_ELEMENT?g.forEach(a,b):(!b||g.type==b)&&a(g)}},getFilterContext:function(a){return a||{}}}}(),"use strict",function(){function a(){this.rules=[]}function e(b,g,c,d){var e,f;for(e in g){(f=b[e])||(f=b[e]=new a);f.add(g[e], -c,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,g){var c;if(typeof g=="number")c=g;else if(g&&"priority"in g)c=g.priority;typeof c!="number"&&(c=10);typeof g!="object"&&(g={});a.elementNames&&this.elementNameRules.addMany(a.elementNames, -c,g);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,c,g);a.elements&&e(this.elementsRules,a.elements,c,g);a.attributes&&e(this.attributesRules,a.attributes,c,g);a.text&&this.textRules.add(a.text,c,g);a.comment&&this.commentRules.add(a.comment,c,g);a.root&&this.rootRules.add(a.root,c,g)},applyTo:function(a){a.filter(this)},onElementName:function(a,g){return this.elementNameRules.execOnName(a,g)},onAttributeName:function(a,g){return this.attributeNameRules.execOnName(a,g)},onText:function(a, -g,c){return this.textRules.exec(a,g,c)},onComment:function(a,g,c){return this.commentRules.exec(a,g,c)},onRoot:function(a,g){return this.rootRules.exec(a,g)},onElement:function(a,g){for(var c=[this.elementsRules["^"],this.elementsRules[g.name],this.elementsRules.$],d,e=0;e<3;e++)if(d=c[e]){d=d.exec(a,g,this);if(d===false)return null;if(d&&d!=g)return this.onNode(a,d);if(g.parent&&!g.name)break}return g},onNode:function(a,g){var c=g.type;return c==CKEDITOR.NODE_ELEMENT?this.onElement(a,g):c==CKEDITOR.NODE_TEXT? -new CKEDITOR.htmlParser.text(this.onText(a,g.value)):c==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,g.value)):null},onAttribute:function(a,g,c,d){return(c=this.attributesRules[c])?c.exec(a,d,g,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,g,c){this.rules.splice(this.findIndex(g),0,{value:a,priority:g,options:c})},addMany:function(a,g,c){for(var d=[this.findIndex(g),0],e=0,f=a.length;e<f;e++)d.push({value:a[e],priority:g,options:c});this.rules.splice.apply(this.rules, -d)},findIndex:function(a){for(var g=this.rules,c=g.length-1;c>=0&&a<g[c].priority;)c--;return c+1},exec:function(a,g){var c=g instanceof CKEDITOR.htmlParser.node||g instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),e=this.rules,f=e.length,h,j,k,m;for(m=0;m<f;m++){if(c){h=g.type;j=g.name}k=e[m];if(!(a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable)){k=k.value.apply(null,d);if(k===false||c&&k&&(k.name!=j||k.type!=h))return k;k!= -null&&(d[0]=g=k)}}return g},execOnName:function(a,g){for(var c=0,d=this.rules,e=d.length,f;g&&c<e;c++){f=d[c];!(a.nonEditable&&!f.options.applyToAll||a.nestedEditable&&f.options.excludeNestedEditable)&&(g=g.replace(f.value[0],f.value[1]))}return g}}}(),function(){function a(a,f){function h(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function e(a,c){return function(f){if(f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e= -[],i=b(f),p,o;if(i)for(j(i,1)&&e.push(i);i;){if(d(i)&&(p=g(i))&&j(p))if((o=g(p))&&!d(o))e.push(p);else{h(k).insertAfter(p);p.remove()}i=i.previous}for(i=0;i<e.length;i++)e[i].remove();if(e=(typeof c=="function"?c(f):c)!==false)if(!k&&!CKEDITOR.env.needsBrFiller&&f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)e=false;else if(!k&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||f.name in CKEDITOR.dtd.tr||f.name in CKEDITOR.dtd.$listItem))e=false;else{e=b(f);e=!e||f.name=="form"&&e.name=="input"}e&&f.add(h(a))}}} -function j(a,b){if((!k||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(o))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0,c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&k&&(!b||a.parent.name in w))return true;if(!k)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var r={elements:{}},k=f=="html",w=CKEDITOR.tools.extend({}, -v),n;for(n in w)"#"in p[n]||delete w[n];for(n in w)r.elements[n]=e(k,a.config.fillEmptyBlocks);r.root=e(k,false);r.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=b.attributes;if("data-cke-bogus"in f||"data-cke-eol"in f)delete f["data-cke-bogus"];else{for(f=b.next;f&&c(f);)f=f.next;var e=g(b);!f&&d(b.parent)?i(b.parent,h(a)):d(f)&&(e&&!d(e))&&h(a).insertBefore(f)}}}}(k);return r}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV? -"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&c(a);)a=a.previous;return a}function g(a){for(a=a.previous;a&&c(a);)a=a.previous;return a}function c(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in v||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function i(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next= -b;b.previous=c}}function f(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function h(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function j(a){return a.replace(z,function(a,b,c){return"<"+b+c.replace(A,function(a,b){return B.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function k(a, -b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+s(c).replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function m(a){return a.replace(J,function(a,b){return decodeURIComponent(b)})}function q(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(a){return"<\!--"+r+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function s(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g, -function(a,b){return decodeURIComponent(b)})}function n(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function l(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore={id:1}),g=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g, -function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),h=0;h<d.length;h++)a=a.replace(d[h],function(a){a=a.replace(g,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(g,function(a,b,d){return"<\!--"+r+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g, -function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+n(s(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(x);c.addRules(u,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true}); -d.addRules(t);d.addRules(y,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=l(c,b),c=k(c,C),c=j(c),c=k(c,G),c=c.replace(F,"$1cke:$2"),c=c.replace(D,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d); -d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(E,"$1$2");c=m(c);c=s(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter, -true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=q(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter, -true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=s(c);c=n(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var f=this.editor,g,h,e;if(b&&typeof b=="object"){g=b.context;c=b.fixForBody;d=b.dontFilter;h=b.filter;e=b.enterMode}else g=b;!g&&g!==null&&(g=f.editable().getName()); -return f.fire("toHtml",{dataValue:a,context:g,fixForBody:c,dontFilter:d,filter:h||f.filter,enterMode:e||f.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var o=/(?:&nbsp;|\xa0)$/,r="{cke_protected}",p=CKEDITOR.dtd,w=["caption","colgroup","col","thead","tfoot", -"tbody"],v=CKEDITOR.tools.extend({},p.$blockLimit,p.$block),x={elements:{input:f,textarea:f}},u={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},t={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},y={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]], -attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(w,a.name);d=CKEDITOR.tools.indexOf(w,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex(): --1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b= -a.children[0];!b&&i(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:h,textarea:h},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)y.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var z=/<(a|area|img|input|source)\b([^>]*)>/gi,A=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,B=/^(href|src|name)$/i,G=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, -C=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,J=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,F=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,D=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi}(),"use strict",CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",g=b.match(/^cke:(.*)/);g&&(b=g[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&& -!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}},CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,g,c){g=="font-family"&&(c=c.replace(/["']/g,""));e[g.toLowerCase()]=c});return{rules:e,populate:function(a){var g= -this.toString();if(g)a instanceof CKEDITOR.dom.element?a.setAttribute("style",g):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=g:a.style=g},toString:function(){var a=[],g;for(g in e)e[g]&&a.push(g,":",e[g],";");return a.join("")}}},function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype= -CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,e,f,b=d.getFilterContext(b);if(b.off)return true;if(!d.parent)a.onRoot(b,d);for(;;){e=d.name;if(!(f=a.onElementName(b,e))){this.remove();return false}d.name=f;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==e)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d); -return false}if(!d.name){this.replaceWithChildren();return false}}e=d.attributes;var h,j;for(h in e){j=h;for(f=e[h];;)if(j=a.onAttributeName(b,h))if(j!=h){delete e[h];h=j}else break;else{delete e[h];break}j&&((f=a.onAttribute(b,d,j,f))===false?delete e[j]:e[j]=f)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,i=[],f=this.attributes,h,j;a.openTag(d,f);for(h in f)i.push([h,f[h]]);a.sortAttributes&&i.sort(e); -h=0;for(j=i.length;h<j;h++){f=i[h];a.attribute(f[0],f[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a=this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var c=0,d=this.children.length;c<d;++c)if(b(this.children[c]))return this.children[c]; -return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0,d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),e=0;e<b.length;++e)b[e].parent=d;d.children=b;if(b[0])b[0].previous= -null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)}, -getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable=="false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)}(),function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g, -g=/\n/g,c=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var i=d.replace(b,"\\$1").replace(g,"\\n").replace(c,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+i+"'):['"+i+"'].join('');")}}}(),delete CKEDITOR.loadFullCore,CKEDITOR.instances={},CKEDITOR.document=new CKEDITOR.dom.document(document),CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!= -a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)},CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]},function(){var a={};CKEDITOR.addTemplate=function(e,b){var g=a[e];if(g)return g;g={name:e,source:b};CKEDITOR.fire("template",g);return a[e]=new CKEDITOR.template(g.source)};CKEDITOR.getTemplate=function(e){return a[e]}}(), -function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}}(),CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")}),CKEDITOR.TRISTATE_ON=1,CKEDITOR.TRISTATE_OFF=2,CKEDITOR.TRISTATE_DISABLED=0,function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.'; -var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),g=a.is("textarea")?a:null;if(g){b.setData(g.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+g.getValue()+"</div>",CKEDITOR.document);a.insertAfter(g);g.hide();g.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode= -"wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(g){b.container.clearCustomData();b.container.remove();g.show()}b.element.clearCustomData();delete b.element});return b};CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var g=CKEDITOR.document.getElementsByTag(b),c=0,d=g.count();c<d;c++){a=g.getItem(c);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}}; -CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})}(),CKEDITOR.replaceClass="ckeditor",function(){function a(a,c,d,i){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var f=new CKEDITOR.editor(c,a,i);if(i==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden"); -f._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&f.setData(d,null,true);f.on("loaded",function(){b(f);i==CKEDITOR.ELEMENT_MODE_REPLACE&&(f.config.autoUpdateElement&&a.$.form)&&f._attachToForm();f.setMode(f.config.startupMode,function(){f.resetDirty();f.status="ready";f.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,f)})});f.on("destroy",e);return f}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData(); -if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,e=a.elementMode,f=a.fire("uiSpace",{space:"top",html:""}).html,h=a.fire("uiSpace",{space:"bottom",html:""}).html,j=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title? -' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'),b=CKEDITOR.dom.element.createFromHtml(j.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:f?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+ -f+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:h?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+h+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(e==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b);a.container=b;f&&a.ui.space("top").unselectable();h&&a.ui.space("bottom").unselectable();d=a.config.width;e=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));e&&a.ui.space("contents").setStyle("height", -CKEDITOR.tools.cssLength(e));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,c){return a(b,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,c,d){return a(b,c,d,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+ -"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](e,d)===false)continue}this.replace(e,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,e=this._.modes;if(!(a==d.mode||!e||!e[a])){d.fire("beforeSetMode",a);if(d.mode){var f=d.checkDirty(),e=d._.previousModeData,h,j=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData= -h=d.getData(1);if(d.mode=="source"&&e==h){d.fire("lockSnapshot",{forceUpdate:true});j=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;f!==void 0&&!f&&d.resetDirty();j?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot");setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,e){var f=this.container,h=this.ui.space("contents"),j=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement, -e=e?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):f;e.setSize("width",a,true);j&&(j.style.width="1%");h.setStyle("height",Math.max(b-(d?0:(e.$.offsetHeight||0)-(h.$.clientHeight||0)),0)+"px");j&&(j.style.width="100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})}(),CKEDITOR.config.startupMode= -"wysiwyg",function(){function a(a){var b=a.editor,c=a.data.path,d=c.blockLimit,f=a.data.selection,h=f.getRanges()[0],j;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(f=e(f,c)){f.appendBogus();j=CKEDITOR.env.ie}if(i(b,c.block,d)&&h.collapsed&&!h.getCommonAncestor().isReadOnly()){c=h.clone();c.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);d=new CKEDITOR.dom.walker(c);d.guard=function(a){return!g(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!d.checkForward()||c.checkStartOfBlock()&& -c.checkEndOfBlock()){b=h.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(g))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/))&&b.remove();j=1;a.cancel()}}j&&h.select()}function e(a,b){if(a.isFake)return 0;var c=b.block||b.blockLimit,d=c&&c.getLast(g);if(c&&c.isBlockBoundary()&&(!d||!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()))&&!c.is("pre")&&!c.getBogus())return c}function b(a){var b=a.data.getTarget(); -if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function g(a){return q(a)&&s(a)}function c(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,d){d&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(c=b);if(!d&&g(b)&&(!a||!k(b)))return false}}var c,d=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, -dl:1};if(d.startPath().contains(f)){var e=d.clone();e.collapse(1);e.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(e);a.guard=b();a.checkBackward();if(c){e=d.clone();e.collapse();e.setEndAt(c,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(e);a.guard=b(true);c=false;a.checkForward();return c}}return null}function i(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} -function f(a){a.editor.focus();a.editor.fire("saveSnapshot")}function h(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function j(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; -if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var d=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= -a=="focus"?"focusin":"focusout";b=c(b,this);d[0]=a;d[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,d)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, -b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){f(this);n(this,b||"html",a)},insertText:function(a){f(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", -true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var g=/\n{2}/g;if(g.test(a))var e="<"+c+">",h="</"+c+">",a=e+a.replace(g,function(){return h+e})+h}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g,"&nbsp;");a=a.replace(/(>|\s) /g,function(a,b){return b+"&nbsp;"}).replace(/ (?=<)/g, -"&nbsp;");n(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,f=a.getName(),g=CKEDITOR.dtd.$block[f];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&l(b);var e,h;if(g)for(;(e=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[e.getName()])&&(!h||!h[f]);)if(e.getName()in -CKEDITOR.dtd.span)b.splitElement(e);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(e);b.collapse(true);e.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){f(this);var b=this.editor,c=b.activeEnterMode,b=b.getSelection(),d=b.getRanges()[0],e=a.getName(),e=CKEDITOR.dtd.$block[e];if(this.insertElementIntoRange(a,d)){d.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(e)if((e=a.getNext(function(a){return g(a)&& -!k(a)}))&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block))e.getDtd()["#"]?d.moveToElementEditStart(e):d.moveToElementEditEnd(a);else if(!e&&c!=CKEDITOR.ENTER_BR){e=d.fixBlock(true,c==CKEDITOR.ENTER_DIV?"div":"p");d.moveToElementEditStart(e)}}b.selectRanges([d]);h(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b)); -return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(m,function(a,b){return b}));a.setData(b, -null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a, -"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]= -+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var c=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker); -var f=a.config.contentsLangDirection;this.getDirection(1)!=f&&this.changeAttr("dir",f);var e=CKEDITOR.getCss();if(e){f=c.getHead();if(!f.getCustomData("stylesheet")){e=c.appendStyleText(e);e=new CKEDITOR.dom.element(e.ownerNode||e.owningElement);f.setCustomData("stylesheet",e);e.data("cke-temp",1)}}f=c.getCustomData("stylesheet_ref")||0;c.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a= -a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var h={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),f;if(c in h){var b=a.getSelection(),g,e=b.getRanges()[0],i=e.startPath(),j,p,k,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(g=b.getSelectedElement())||(g=d(b))){a.fire("saveSnapshot");e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START);g.remove();e.select(); -a.fire("saveSnapshot");f=1}else if(e.collapsed)if((j=i.block)&&(k=j[c?"getPrevious":"getNext"](q))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("table")&&e[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");e[c?"checkEndOfBlock":"checkStartOfBlock"]()&&j.remove();e["moveToElementEdit"+(c?"End":"Start")](k);e.select();a.fire("saveSnapshot");f=1}else if(i.blockLimit&&i.blockLimit.is("td")&&(p=i.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END)&&(k= -p[c?"getPrevious":"getNext"](q))){a.fire("saveSnapshot");e["moveToElementEdit"+(c?"End":"Start")](k);e.checkStartOfBlock()&&e.checkEndOfBlock()?k.remove():e.select();a.fire("saveSnapshot");f=1}else if((p=i.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END))f=1}return!f});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in h&&!this.getFirst(g)){this.appendBogus();b=a.createRange(); -b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}}); -CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(m,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a, -"key",function(b){b=b.data.domEvent.getKey();if(b in h){var c=b==8,d=a.getSelection().getRanges()[0],b=d.startPath();if(d.collapsed){var f;a:{var e=b.block;if(e)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(e,!c)||!d.collapsed)f=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var g=d.startContainer.getChild(d.startOffset-(c?1:0));if(g&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("hr")){a.fire("saveSnapshot");g.remove();f=true;break a}}if((d=d.startPath().block)&& -(!d||!d.contains(e))){a.fire("saveSnapshot");var i;(i=(c?d:e).getBogus())&&i.remove();f=a.getSelection();i=f.createBookmarks();(c?e:d).moveChildren(c?d:e,false);b.lastElement.mergeSiblings();j(e,d,!c);f.selectBookmarks(i);f=true}}else f=false;else f=false}if(!f)return}else{c=d;f=b.block;i=c.endPath().block;if(!f||!i||f.equals(i))b=false;else{a.fire("saveSnapshot");(e=f.getBogus())&&e.remove();c.deleteContents();if(i.getParent()){i.moveChildren(f,false);b.lastElement.mergeSiblings();j(f,i,true)}c= -a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView();a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref", -c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var k=CKEDITOR.dom.walker.bogus(),m=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, -q=CKEDITOR.dom.walker.whitespaces(true),s=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty(); -c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var f=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+ -f+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",f)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var f,e,g,h,i=[],p=d.range.startContainer;f=d.range.startPath();for(var p=j[p.getName()],k=0,n=c.getChildren(),w=n.count(),v=-1,m=-1,x=0,l=f.contains(j.$list);k<w;++k){f=n.getItem(k);if(a(f)){g=f.getName(); -if(l&&g in CKEDITOR.dtd.$list)i=i.concat(b(f,d));else{h=!!p[g];if(g=="br"&&f.data("cke-eol")&&(!k||k==w-1)){x=(e=k?i[k-1].node:n.getItem(k+1))&&(!a(e)||!e.is("br"));e=e&&a(e)&&j.$block[e.getName()]}v==-1&&!h&&(v=k);h||(m=k);i.push({isElement:1,isLineBreak:x,isBlock:f.isBlockBoundary(),hasBlockSibling:e,node:f,name:g,allowed:h});e=x=0}}else i.push({isElement:0,node:f,allowed:1})}if(v>-1)i[v].firstNotAllowed=1;if(m>-1)i[m].lastNotAllowed=1;return i}function c(b,d){var f=[],e=b.getChildren(),g=e.count(), -h,i=0,k=j[d],n=!b.is(j.$inline)||b.is("br");for(n&&f.push(" ");i<g;i++){h=e.getItem(i);a(h)&&!h.is(k)?f=f.concat(c(h,d)):f.push(h)}n&&f.push(" ");return f}function d(b){return b&&a(b)&&(b.is(j.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var g=b.clone(),h,i;g.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((h=(new CKEDITOR.dom.walker(g)).next())&&a(h)&&k[h.getName()]&&(i=h.getPrevious())&&a(i)&&!i.getParent().equals(b.startContainer)&&d.contains(i)&&e.contains(h)&&h.isIdentical(i)){h.moveChildren(i); -h.remove();f(b,c,d,e)}}function e(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var f=c.endContainer.getChild(c.endOffset),g=c.endContainer.getChild(c.endOffset-1);f&&d(f,b[b.length-1]);if(g&&d(g,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var j=CKEDITOR.dtd,k={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},n={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},m=CKEDITOR.tools.extend({},j.$inline);delete m.br; -return function(k,l,s){var t=k.editor,q=t.getSelection().getRanges()[0],F=false;if(l=="unfiltered_html"){l="html";F=true}if(!q.checkReadOnly()){var E=(new CKEDITOR.dom.elementPath(q.startContainer,q.root)).blockLimit||q.root,l={type:l,dontFilter:F,editable:k,editor:t,range:q,blockLimit:E,mergeCandidates:[],zombies:[]},t=l.range,F=l.mergeCandidates,D,I,L,H;if(l.type=="text"&&t.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){D=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",t.document);t.insertNode(D); -t.setStartAfter(D)}I=new CKEDITOR.dom.elementPath(t.startContainer);l.endPath=L=new CKEDITOR.dom.elementPath(t.endContainer);if(!t.collapsed){var E=L.block||L.blockLimit,Q=t.getCommonAncestor();E&&(!E.equals(Q)&&!E.contains(Q)&&t.checkEndOfBlock())&&l.zombies.push(E);t.deleteContents()}for(;(H=a(t.startContainer)&&t.startContainer.getChild(t.startOffset-1))&&a(H)&&H.isBlockBoundary()&&I.contains(H);)t.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);f(t,l.blockLimit,I,L);if(D){t.setEndBefore(D);t.collapse(); -D.remove()}D=t.startPath();if(E=D.contains(d,false,1)){t.splitElement(E);l.inlineStylesRoot=E;l.inlineStylesPeak=D.lastElement}D=t.createBookmark();(E=D.startNode.getPrevious(g))&&a(E)&&d(E)&&F.push(E);(E=D.startNode.getNext(g))&&a(E)&&d(E)&&F.push(E);for(E=D.startNode;(E=E.getParent())&&d(E);)F.push(E);t.moveToBookmark(D);if(D=s){D=l.range;if(l.type=="text"&&l.inlineStylesRoot){H=l.inlineStylesPeak;t=H.getDocument().createText("{cke-peak}");for(F=l.inlineStylesRoot.getParent();!H.equals(F);){t=t.appendTo(H.clone()); -H=H.getParent()}s=t.getOuterHtml().split("{cke-peak}").join(s)}H=l.blockLimit.getName();if(/^\s+|\s+$/.test(s)&&"span"in CKEDITOR.dtd[H])var O='<span data-cke-marker="1">&nbsp;</span>',s=O+s+O;s=l.editor.dataProcessor.toHtml(s,{context:null,fixForBody:false,dontFilter:l.dontFilter,filter:l.editor.activeFilter,enterMode:l.editor.activeEnterMode});H=D.document.createElement("body");H.setHtml(s);if(O){H.getFirst().remove();H.getLast().remove()}if((O=D.startPath().block)&&!(O.getChildCount()==1&&O.getBogus()))a:{var M; -if(H.getChildCount()==1&&a(M=H.getFirst())&&M.is(n)){O=M.getElementsByTag("*");D=0;for(F=O.count();D<F;D++){t=O.getItem(D);if(!t.is(m))break a}M.moveChildren(M.getParent(1));M.remove()}}l.dataWrapper=H;D=s}if(D){M=l.range;var O=M.document,K,s=l.blockLimit;D=0;var R;H=[];var N,T,F=t=0,P,V;I=M.startContainer;var E=l.endPath.elements[0],W;L=E.getPosition(I);Q=!!E.getCommonAncestor(I)&&L!=CKEDITOR.POSITION_IDENTICAL&&!(L&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);I=b(l.dataWrapper,l); -for(e(I,M);D<I.length;D++){L=I[D];if(K=L.isLineBreak){K=M;P=s;var S=void 0,Y=void 0;if(L.hasBlockSibling)K=1;else{S=K.startContainer.getAscendant(j.$block,1);if(!S||!S.is({div:1,p:1}))K=0;else{Y=S.getPosition(P);if(Y==CKEDITOR.POSITION_IDENTICAL||Y==CKEDITOR.POSITION_CONTAINS)K=0;else{P=K.splitElement(S);K.moveToPosition(P,CKEDITOR.POSITION_AFTER_START);K=1}}}}if(K)F=D>0;else{K=M.startPath();if(!L.isBlock&&i(l.editor,K.block,K.blockLimit)&&(T=l.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&l.editor.config.autoParagraph!== -false?l.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){T=O.createElement(T);T.appendBogus();M.insertNode(T);CKEDITOR.env.needsBrFiller&&(R=T.getBogus())&&R.remove();M.moveToPosition(T,CKEDITOR.POSITION_BEFORE_END)}if((K=M.startPath().block)&&!K.equals(N)){if(R=K.getBogus()){R.remove();H.push(K)}N=K}L.firstNotAllowed&&(t=1);if(t&&L.isElement){K=M.startContainer;for(P=null;K&&!j[K.getName()][L.name];){if(K.equals(s)){K=null;break}P=K;K=K.getParent()}if(K){if(P){V=M.splitElement(P);l.zombies.push(V); -l.zombies.push(P)}}else{P=s.getName();W=!D;K=D==I.length-1;P=c(L.node,P);for(var S=[],Y=P.length,Z=0,ba=void 0,X=0,aa=-1;Z<Y;Z++){ba=P[Z];if(ba==" "){if(!X&&(!W||Z)){S.push(new CKEDITOR.dom.text(" "));aa=S.length}X=1}else{S.push(ba);X=0}}K&&aa==S.length&&S.pop();W=S}}if(W){for(;K=W.pop();)M.insertNode(K);W=0}else M.insertNode(L.node);if(L.lastNotAllowed&&D<I.length-1){(V=Q?E:V)&&M.setEndAt(V,CKEDITOR.POSITION_AFTER_START);t=0}M.collapse()}}l.dontMoveCaret=F;l.bogusNeededBlocks=H}R=l.range;var U;V= -l.bogusNeededBlocks;for(W=R.createBookmark();N=l.zombies.pop();)if(N.getParent()){T=R.clone();T.moveToElementEditStart(N);T.removeEmptyBlocksAtEnd()}if(V)for(;N=V.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(R.document.createText(" "));for(;N=l.mergeCandidates.pop();)N.mergeSiblings();R.moveToBookmark(W);if(!l.dontMoveCaret){for(N=a(R.startContainer)&&R.startContainer.getChild(R.startOffset-1);N&&a(N)&&!N.is(j.$empty);){if(N.isBlockBoundary())R.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END); -else{if(d(N)&&N.getHtml().match(/(\s|&nbsp;)$/g)){U=null;break}U=R.clone();U.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(g)}U&&R.moveToRange(U)}q.select();h(k)}}}(),l=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b= -a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var f=d.startContainer,e=f.getAscendant("table",1),g=false;c(e.getElementsByTag("td"));c(e.getElementsByTag("th"));e=d.clone();e.setStart(f,0);e=a(e).lastBackward();if(!e){e=d.clone();e.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);e=a(e).lastForward();g=true}e||(e=f);if(e.is("table")){d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START); -d.collapse(true);e.remove()}else{e.is({tbody:1,thead:1,tfoot:1})&&(e=b(e,"tr",g));e.is("tr")&&(e=b(e,e.getParent().is("thead")?"th":"td",g));(f=e.getBogus())&&f.remove();d.moveToPosition(e,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()}(),function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath(); -if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){q=true;if(!m){b.call(this);m=CKEDITOR.tools.setTimeout(b,200,this)}}function b(){m=null;if(q){CKEDITOR.tools.setTimeout(a,0,this);q=false}}function g(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false; -var c=a.startContainer,d=a.getPreviousNode(s,null,c),f=a.getNextNode(s,null,c);return b(d)||b(f,1)||!d&&!f&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function c(a){return a.getCustomData("cke-fillingChar")}function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,f=a.getDocument().getSelection().getNative(),e=f&&f.type!="None"&&f.getRangeAt(0);if(c.getLength()>1&&e&&e.intersectsNode(c.$)){d=[f.anchorOffset,f.focusOffset];e=f.focusNode== -c.$&&f.focusOffset>0;f.anchorNode==c.$&&f.anchorOffset>0&&d[0]--;e&&d[1]--;var g;e=f;if(!e.isCollapsed){g=e.getRangeAt(0);g.setStart(e.anchorNode,e.anchorOffset);g.setEnd(e.focusNode,e.focusOffset);g=g.collapsed}g&&d.unshift(d.pop())}}c.setText(i(c.getText()));if(d){c=f.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);f.removeAllRanges();f.addRange(c)}}}function i(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function f(a,b,c){var d=a.on("focus", -function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var f=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var e=new CKEDITOR.dom.range(a);e.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(e.startContainer.$,e.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();d.removeListener();f&&f.removeListener()}function h(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+ -(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'">&nbsp;</div>',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),f=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function j(a){var b={37:1,39:1,8:1,46:1};return function(c){var d= -c.data.getKeystroke();if(b[d]){var f=a.getSelection().getRanges(),e=f[0];if(f.length==1&&e.collapsed)if((d=e[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function k(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,f;d;){if((f=d.type== -CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;f&&d.getAttribute("contentEditable")=="false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;f=c.endContainer;var e=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(e>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));f&&f.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(f):h.setEndBefore(f));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var f=c.clone(); -c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){f.setStartAfter(d);f.collapsed||a.splice(b+1,0,f)}return true}return false};d.next()}}return a}var m,q,s=CKEDITOR.dom.walker.invisible(1),n=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),f;if(!(f= -d.moveToClosestEditablePosition(b.selected,a)))f=d.moveToClosestEditablePosition(b.selected,!a);f&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();if(!f){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=f.getSelection();a&&a.removeAllRanges()}var f=b.editor;f.on("contentDom",function(){function b(){m= -new CKEDITOR.dom.selection(f.getSelection());m.lock()}function c(){h.removeListener("mouseup",c);p.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==g.$&&b.select()}var g=f.document,h=CKEDITOR.document,i=f.editable(),k=g.getBody(),p=g.getDocumentElement(),n=i.isInline(),r,m;CKEDITOR.env.gecko&&i.attachListener(i,"focus",function(a){a.removeListener();if(r!==0)if((a=f.getSelection().getNative())&&a.isCollapsed&&a.anchorNode== -i.$){a=f.createRange();a.moveToElementEditStart(i);a.select()}},null,null,-2);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){r&&CKEDITOR.env.webkit&&(r=f._.previousActive&&f._.previousActive.equals(g.getActive()));f.unlockSelection(r);r=0},null,null,-1);i.attachListener(i,"mousedown",function(){r=0});if(CKEDITOR.env.ie||n){l?i.attachListener(i,"beforedeactivate",b,null,null,-1):i.attachListener(f,"selectionCheck",b,null,null,-1);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusOut": -"blur",function(){f.lockSelection(m);r=1},null,null,-1);i.attachListener(i,"mousedown",function(){r=0})}if(CKEDITOR.env.ie&&!n){var F;i.attachListener(i,"mousedown",function(a){if(a.data.$.button==2){a=f.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)F=f.window.getScrollPosition()}});i.attachListener(i,"mouseup",function(a){if(a.data.$.button==2&&F){f.document.$.documentElement.scrollLeft=F.x;f.document.$.documentElement.scrollTop=F.y}F=null});if(g.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.ie6Compat)p.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=k.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(f){}d.setEndPoint(e.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){p.removeListener("mousemove",b);h.removeListener("mouseup",c);p.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<p.$.clientHeight&&a.$.x<p.$.clientWidth){var d=k.$.createTextRange();try{d.moveToPoint(a.$.clientX, -a.$.clientY)}catch(f){}var e=d.duplicate();p.on("mousemove",b);h.on("mouseup",c);p.on("mouseup",c)}});if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)p.on("mousedown",function(a){if(a.data.getTarget().is("html")){h.on("mouseup",c);p.on("mouseup",c)}})}}i.attachListener(i,"selectionchange",a,f);i.attachListener(i,"keyup",e,f);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(n&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var o; -i.attachListener(i,"mousedown",function(){o=1});i.attachListener(g.getDocumentElement(),"mouseup",function(){o&&e.call(f);o=0})}else i.attachListener(CKEDITOR.env.ie?i:g.getDocumentElement(),"mouseup",e,f);CKEDITOR.env.webkit&&i.attachListener(g,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(i)}},null,null,-1);i.attachListener(i,"keydown",j(f),null,null,-1)});f.on("setData",function(){f.unlockSelection();CKEDITOR.env.webkit&& -c()});f.on("contentDomUnload",function(){f.unlockSelection()});if(CKEDITOR.env.ie9Compat)f.on("beforeDestroy",c,null,null,9);f.on("dataReady",function(){delete f._.fakeSelection;delete f._.hiddenSelectionContainer;f.selectionChange(1)});f.on("loadSnapshot",function(){var a=f.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&&a.remove()},null,null,100);f.on("key",function(a){if(f.mode=="wysiwyg"){var b=f.getSelection();if(b.isFake){var c= -n[a.data.keyCode];if(c)return c({editor:f,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=c(a)){var d=e.document.$.defaultView.getSelection();d.type=="Caret"&&d.anchorNode==a.$&&(h=1);g=a.getText();a.setText(i(g))}}function f(){var a=e.editable();if(a)if(a=c(a)){a.setText(g);if(h){e.document.$.defaultView.getSelection().setPosition(a.$,a.getLength());h=0}}}var e=a.editor;if(CKEDITOR.env.webkit){e.on("selectionChange", -function(){var a=e.editable(),b=c(a);b&&(b.getCustomData("ready")?d(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){d(e.editable())},null,null,-1);var g,h;e.on("beforeUndoImage",b);e.on("afterUndoImage",f);e.on("beforeGetData",b,null,null,0);e.on("getData",f)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection|| -this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck= -function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var l=typeof window.getSelection!="function",o=1;CKEDITOR.dom.selection=function(a){if(a instanceof -CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:o++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}c=l?this.document.$.selection:this.document.getWindow().$.getSelection();if(CKEDITOR.env.webkit)(c.type=="None"&&this.document.getActive().equals(a)|| -c.type=="Caret"&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&f(a,c);else if(CKEDITOR.env.gecko)c&&(this.document.getActive().equals(a)&&c.anchorNode&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&f(a,c,true);else if(CKEDITOR.env.ie){b=this.document.getActive();if(l)c.type=="None"&&(b&&b.equals(this.document.getDocumentElement()))&&f(a,null,true);else{(c=c&&c.anchorNode)&&(c=new CKEDITOR.dom.node(c));b&&(b.equals(this.document.getDocumentElement())&&c&&(a.equals(c)||a.contains(c)))&&f(a,null, -true)}}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(g){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges= -new CKEDITOR.dom.rangeList}return this};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=l?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:l?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c= -this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(f){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&r[d.childNodes[c.startOffset].nodeName.toLowerCase()])b= -CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=l?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var f=d.children,e,g,h=b.duplicate(),i=0,j=f.length-1,k=-1,p,n;i<=j;){k=Math.floor((i+j)/2);e=f[k];h.moveToElementText(e);p=h.compareEndPoints("StartToStart",b);if(p>0)j=k-1;else if(p<0)i=k+1;else return{container:d,offset:a(e)}}if(k== --1||k==f.length-1&&p<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;f=d.childNodes;if(!h){e=f[f.length-1];return e.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:f.length}:{container:e,offset:e.nodeValue.length}}for(d=f.length;h>0&&d>0;){g=f[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){n=g;h=h-g.nodeValue.length}}return{container:n,offset:-h}}h.collapse(p>0?true:false);h.setEndPoint(p>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g, -"\n").length;if(!h)return{container:d,offset:a(e)+(p>0?0:1)};for(;h>0;)try{g=e[p>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;n=g}e=g}catch(r){return{container:d,offset:a(e)}}return{container:n,offset:p>0?-h:n.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset); -d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],f=0;f<c.length;f++){for(var e=c.item(f),g=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<g.childNodes.length&&g.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(g),h);a.setEnd(new CKEDITOR.dom.node(g),h+1);d.push(a)}return d}return[]}}():function(){var a= -[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var f=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(f.startContainer),f.startOffset);b.setEnd(new CKEDITOR.dom.node(f.endContainer),f.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:k(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!== -void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent(); -b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,f=2;f&&(!(c=a.getEnclosedNode())|| -!(c.type==CKEDITOR.NODE_ELEMENT&&r[c.getName()]&&(d=c)));f--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=l?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel= -null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty(); -a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=o++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,f=0;f<a.length;++f){c=a[f];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var e= -CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();e&&!e.equals(this.root)&&e.focus()}else{var h;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(h=j.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT){j=j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)h=i;if(h.getAttribute("contenteditable")=="false")break a}h=void 0}if(h)this.fake(h);else{if(l){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1, -tbody:1,tr:1};if(a.length>1){h=a[a.length-1];a[0].setEnd(h.endContainer,h.endOffset)}h=a[0];var a=h.collapsed,k,n,m;if((c=h.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in r&&(!c.is("a")||!c.getText()))try{m=c.$.createControlRange();m.addElement(c.$);m.select();return}catch(o){}if(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b){h.shrink(CKEDITOR.NODE_ELEMENT,true);a=h.collapsed}m= -h.createBookmark();b=m.startNode;if(!a)e=m.endNode;m=h.document.$.body.createTextRange();m.moveToElementText(b.$);m.moveStart("character",1);if(e){i=h.document.$.body.createTextRange();i.moveToElementText(e.$);m.setEndPoint("EndToEnd",i);m.moveEnd("character",-1)}else{k=b.getNext(j);n=b.hasAscendant("pre");k=!(k&&k.getText&&k.getText().match(i))&&(n||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));n=h.document.createElement("span");n.setHtml("&#65279;");n.insertBefore(b);k&&h.document.createText("").insertBefore(b)}h.setStartBefore(b); -b.remove();if(a){if(k){m.moveStart("character",-1);m.select();h.document.$.selection.clear()}else m.select();h.moveToPosition(n,CKEDITOR.POSITION_BEFORE_START);n.remove()}else{h.setEndBefore(e);e.remove();m.select()}}else{e=this.getNative();if(!e)return;this.removeAllRanges();for(m=0;m<a.length;m++){if(m<a.length-1){k=a[m];n=a[m+1];i=k.clone();i.setStart(k.endContainer,k.endOffset);i.setEnd(n.startContainer,n.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);h=i.getCommonAncestor(); -i=i.getEnclosedNode();if(h.isReadOnly()||i&&i.isReadOnly()){n.setStart(k.startContainer,k.startOffset);a.splice(m--,1);continue}}}h=a[m];n=this.document.$.createRange();if(h.collapsed&&CKEDITOR.env.webkit&&g(h)){k=this.root;d(k,false);i=k.getDocument().createText("​");k.setCustomData("cke-fillingChar",i);h.insertNode(i);if((k=i.getNext())&&!i.getPrevious()&&k.type==CKEDITOR.NODE_ELEMENT&&k.getName()=="br"){d(this.root);h.moveToPosition(k,CKEDITOR.POSITION_BEFORE_START)}else h.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}n.setStart(h.startContainer.$, -h.startOffset);try{n.setEnd(h.endContainer.$,h.endOffset)}catch(s){if(s.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){h.collapse(1);n.setEnd(h.endContainer.$,h.endOffset)}else throw s;}e.addRange(n)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();h(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT; -c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=o++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b= -[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative(); -try{a&&a[l?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var f=a.getAttribute("contentEditable");f=="false"?c=a:f=="true"&&(d=1)}}return c}function e(b){var c=b.document;if(b.collapsed){c=o(this,c);b.insertNode(c);b.moveToPosition(c,CKEDITOR.POSITION_BEFORE_END)}else{var d=this.element, -f=this._.definition,h,i=f.ignoreReadonly,j=i||f.includeReadonly;j==null&&(j=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[d];if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var n=b.createBookmark(),r=n.startNode,m=n.endNode,p=r,l;if(!i){var w=b.getCommonAncestor(),i=a(r,w),w=a(m,w);i&&(p=i.getNextSourceNode(true));w&&(m=w)}for(p.getPosition(m)==CKEDITOR.POSITION_FOLLOWING&&(p=0);p;){i=false;if(p.equals(m)){p=null;i=true}else{var q=p.type==CKEDITOR.NODE_ELEMENT? -p.getName():null,w=q&&p.getAttribute("contentEditable")=="false",v=q&&p.getAttribute("data-nostyle");if(q&&p.data("cke-bookmark")){p=p.getNextSourceNode(true);continue}if(w&&j&&CKEDITOR.dtd.$block[q])for(var x=p,t=g(x),u=void 0,z=t.length,y=0,x=z&&new CKEDITOR.dom.range(x.getDocument());y<z;++y){var u=t[y],B=CKEDITOR.filter.instances[u.data("cke-filter")];if(B?B.check(this):1){x.selectNodeContents(u);e.call(this,x)}}t=q?!k[q]||v?0:w&&!j?0:(p.getPosition(m)|G)==G&&(!f.childRule||f.childRule(p)):1; -if(t)if((t=p.getParent())&&((t.getDtd()||CKEDITOR.dtd.span)[d]||h)&&(!f.parentRule||f.parentRule(t))){if(!l&&(!q||!CKEDITOR.dtd.$removeEmpty[q]||(p.getPosition(m)|G)==G)){l=b.clone();l.setStartBefore(p)}q=p.type;if(q==CKEDITOR.NODE_TEXT||w||q==CKEDITOR.NODE_ELEMENT&&!p.getChildCount()){for(var q=p,aa;(i=!q.getNext(A))&&(aa=q.getParent(),k[aa.getName()])&&(aa.getPosition(r)|C)==C&&(!f.childRule||f.childRule(aa));)q=aa;l.setEndAfter(q)}}else i=true;else i=true;p=p.getNextSourceNode(v||w)}if(i&&l&&!l.collapsed){for(var i= -o(this,c),w=i.hasAttributes(),v=l.getCommonAncestor(),q={},t={},u={},z={},U,$,ca;i&&v;){if(v.getName()==d){for(U in f.attributes)if(!z[U]&&(ca=v.getAttribute($)))i.getAttribute(U)==ca?t[U]=1:z[U]=1;for($ in f.styles)if(!u[$]&&(ca=v.getStyle($)))i.getStyle($)==ca?q[$]=1:u[$]=1}v=v.getParent()}for(U in t)i.removeAttribute(U);for($ in q)i.removeStyle($);w&&!i.hasAttributes()&&(i=null);if(i){l.extractContents().appendTo(i);l.insertNode(i);s.call(this,i);i.mergeSiblings();CKEDITOR.env.ie||i.$.normalize()}else{i= -new CKEDITOR.dom.element("span");l.extractContents().appendTo(i);l.insertNode(i);s.call(this,i);i.remove(true)}l=null}}b.moveToBookmark(n);b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),f=null,e=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;k.checkElementRemovable(h)&&(f=h)}for(g=0;g<c.elements.length;g++){h= -c.elements[g];if(h==c.block||h==c.blockLimit)break;k.checkElementRemovable(h)&&(e=h)}e&&j.breakParent(e);f&&d.breakParent(f)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var f=new CKEDITOR.dom.elementPath(d.getParent(),a.root),e,h=0,g;h<f.elements.length&&(g=f.elements[h]);h++){if(g==f.block||g==f.blockLimit)break;if(this.checkElementRemovable(g)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(g,CKEDITOR.END)||(i=a.checkBoundaryOfElement(g,CKEDITOR.START)))){e= -g;e.match=i?"start":"end"}else{g.mergeSiblings();g.is(this.element)?q.call(this,g):n(g,w(this)[g.getName()])}}}if(e){g=d;for(h=0;;h++){i=f.elements[h];if(i.equals(e))break;else if(i.match)continue;else i=i.clone();i.append(g);g=i}g[e.match=="start"?"insertBefore":"insertAfter"](e)}}else{var j=c.endNode,k=this;b();for(f=d;!f.equals(j);){e=f.getNextSourceNode();if(f.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(f)){f.getName()==this.element?q.call(this,f):n(f,w(this)[f.getName()]);if(e.type== -CKEDITOR.NODE_ELEMENT&&e.contains(d)){b();e=d.getNext()}}f=e}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function g(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function c(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&r(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b, -a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var f in b.styles)b.styles.hasOwnProperty(f)&&a.removeStyle(f)}}function i(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,f=a.document,e;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){e=o(this,f,d);h(d,e)}a.moveToBookmark(b)} -function f(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,f;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(f=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(f);h(d,f)}else q.call(this,d);a.moveToBookmark(b)}function h(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&& -b.is("pre"),f=a.is("pre"),e=!d&&f;if(d&&!f){f=b;(e=a.getBogus())&&e.remove();e=a.getHtml();e=k(e,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");e=e.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");e=e.replace(/([ \t\n\r]+|&nbsp;)/g," ");e=e.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(f);f.$.outerHTML="<pre>"+e+"</pre>";f.copyAttributes(g.getFirst());f=g.getFirst().remove()}else f.setHtml(e);b=f}else e?b=m(c?[a.getHtml()]:j(a),b):a.moveChildren(b); -b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(B))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=k(h.getHtml(),/\n$/,"")+"\n\n"+k(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);h.remove()}}else c&&l(b)}function j(a){var b=[];k(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function k(a,b,c){var d="",f= -"",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(f=c);return""});return d+a.replace(b,c)+f}function m(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var f=a[d],f=f.replace(/(\r\n|\r)/g,"\n"),f=k(f,/^[ \t]*\n/,""),f=k(f,/\n$/,""),f=k(f,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;", -a.length-1)+" "}),f=f.replace(/\n/g,"<br>"),f=f.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "});if(c){var e=b.clone();e.setHtml(f);c.append(e)}else b.setHtml(f)}return c||b}function q(a,b){var c=this._.definition,d=c.attributes,c=c.styles,f=w(this)[a.getName()],e=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),h;for(h in d)if(!((h=="class"||this._.definition.fullMatch)&&a.getAttribute(h)!=v(h,d[h]))&&!(b&&h.slice(0,5)=="data-")){e=a.hasAttribute(h);a.removeAttribute(h)}for(var g in c)if(!(this._.definition.fullMatch&& -a.getStyle(g)!=v(g,c[g],true))){e=e||!!a.getStyle(g);a.removeStyle(g)}n(a,f,u[a.getName()]);e&&(this._.definition.alwaysRemoveElement?l(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?l(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function s(a){for(var b=w(this),c=a.getElementsByTag(this.element),d,f=c.count();--f>=0;){d=c.getItem(f);d.isReadOnly()||q.call(this,d,true)}for(var e in b)if(e!=this.element){c=a.getElementsByTag(e);for(f= -c.count()-1;f>=0;f--){d=c.getItem(f);d.isReadOnly()||n(d,b[e])}}}function n(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var f=b[d][0],e;if(e=a.getAttribute(f)){var h=b[d][1];(h===null||h.test&&h.test(e)||typeof h=="string"&&e==h)&&a.removeAttribute(f)}}c||l(a)}function l(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(B),d=a.getNext(B);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&& -a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&&d.mergeSiblings()}}}function o(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=r(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function r(a,b){var c=b._.definition,d=c.attributes, -c=CKEDITOR.style.getStyleText(c);if(d)for(var f in d)a.setAttribute(f,d[f]);c&&a.setAttribute("style",c);return a}function p(a,b){for(var c in a)a[c]=a[c].replace(z,function(a,c){return b[c]})}function w(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var f=c[d],e,h;if(typeof f=="string")e=f.toLowerCase();else{e=f.element?f.element.toLowerCase():a.element;h=f.attributes}f=b[e]||(b[e]={}); -if(h){var f=f.attributes=f.attributes||[],g;for(g in h)f.push([g.toLowerCase(),h[g]])}}}return b}function v(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a,b);return d[c?"getStyle":"getAttribute"](a)}function x(a,b,c){for(var d=a.document,f=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,e,h=f.createIterator();e=h.getNextRange();)b.call(this,e,c);a.selectRanges(f);d.removeCustomData("doc_processing_style")}var u={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1, -p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},t={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},y=/\s*(?:;\s*|$)/,z=/#\((.+?)\)/g,A=CKEDITOR.dom.walker.bookmark(0,1),B=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a); -var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);p(a.attributes,b);p(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(u[c]?CKEDITOR.STYLE_BLOCK:t[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof -CKEDITOR.dom.document)return x.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;x.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return x.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;x.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange= -this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?i:this.type==CKEDITOR.STYLE_OBJECT?c:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?f:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){r(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c= -a.elements,d=0,f;d<c.length;d++){f=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(f==a.block||f==a.blockLimit))){if(this.type==CKEDITOR.STYLE_OBJECT){var e=f.getName();if(!(typeof this.element=="string"?e==this.element:e in this.element))continue}if(this.checkElementRemovable(f,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true}, -checkElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},f=0,e=c.attributes;if(e)for(var h in e){f++;d[h]=e[h]}if(h=CKEDITOR.style.getStyleText(c)){d.style||f++;d.style=h}d._length=f;c=c._AC=d}if(c._length){for(var g in c)if(g!="_length"){f=a.getAttribute(g)||"";if(g=="style")a:{d=c[g];typeof d== -"string"&&(d=CKEDITOR.tools.parseCssText(d));typeof f=="string"&&(f=CKEDITOR.tools.parseCssText(f,true));h=void 0;for(h in d)if(!(h in f&&(f[h]==d[h]||d[h]=="inherit"||f[h]=="inherit"))){d=false;break a}d=true}else d=c[g]==f;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=w(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0]; -if(d=a.getAttribute(d)){var f=b[c][1];if(f===null||typeof f=="string"&&d==f||f.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],f=b.attributes;if(f)for(var e in f)c.push(" ",e,'="',f[e],'"');(f=CKEDITOR.style.getStyleText(b))&&c.push(' style="',f,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b; -var b=a.styles,c=a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(y,";"));for(var f in b){var e=b[f],h=(f+":"+e).replace(y,";");e=="inherit"?d=d+h:c=c+h}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT}, -a,true);return this.customHandlers[a.type]=b};var G=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,C=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)},CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&& -a.removeStyle(this.style)},CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"),CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet),CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)},CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var c= -0;c<b.length;c++){var d=b[c],e=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,e)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"), -g=b[0];CKEDITOR.stylesSet.addExternal(g,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(g,function(b){e._.stylesDefinitions=b[g];a(e._.stylesDefinitions)})}}}}),CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+ -"--\>"}}),"use strict",function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,c){var d=null,i=null,f=[],h=b,j,c=c||b.getDocument().getBody();do if(h.type==CKEDITOR.NODE_ELEMENT){f.push(h);if(!this.lastElement){this.lastElement=h;if(h.is(CKEDITOR.dtd.$object)||h.getAttribute("contenteditable")=="false")continue}if(h.equals(c))break; -if(!i){j=h.getName();h.getAttribute("contenteditable")=="true"?i=h:!d&&e[j]&&(d=h);if(a[j]){var k;if(k=!d){if(j=j=="div"){a:{j=h.getChildren();k=0;for(var m=j.count();k<m;k++){var q=j.getItem(k);if(q.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[q.getName()]){j=true;break a}}j=false}j=!j}k=j}k?d=h:i=h}}}while(h=h.getParent());i||(i=c);this.block=d;this.blockLimit=i;this.root=c;this.elements=f}}(),CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a|| -e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var g;typeof a=="string"&&(g=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?g=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?g=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?g=a:typeof a=="object"&&(g=function(b){return b.getName()in a});var c=this.elements,d=c.length;e&&d--;if(b){c=Array.prototype.slice.call(c, -0);c.reverse()}for(e=0;e<d;e++)if(g(c[e]))return c[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a},CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node, -CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,g=this.getLength(),c=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),c);if(e.childNodes.length==b)if(a>=g){d=c.createText("");d.insertAfter(this)}else{a=c.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, -e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}),function(){function a(a,e,c){var d=a.serializable,i=e[c?"endContainer":"startContainer"],f=c?"endOffset":"startOffset",h=d?e.document.getById(a.startNode):a.startNode,a=d?e.document.getById(a.endNode):a.endNode;if(i.equals(h.getPrevious())){e.startOffset=e.startOffset-i.getLength()-a.getPrevious().getLength();i=a.getNext()}else if(i.equals(a.getPrevious())){e.startOffset=e.startOffset-i.getLength();i=a.getNext()}i.equals(h.getParent())&& -e[f]++;i.equals(a.getParent())&&e[f]++;e[c?"endContainer":"startContainer"]=i;return e}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,e=CKEDITOR.dom.walker.bookmark(),c=[],d;return{getNextRange:function(i){d=d===void 0?0:d+1;var f=a[d];if(f&&a.length>1){if(!d)for(var h=a.length-1;h>=0;h--)c.unshift(a[h].createBookmark(true));if(i)for(var j= -0;a[d+j+1];){for(var k=f.document,i=0,h=k.getById(c[j].endNode),k=k.getById(c[j+1].startNode);;){h=h.getNextSourceNode(false);if(k.equals(h))i=1;else if(e(h)||h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary())continue;break}if(!i)break;j++}for(f.moveToBookmark(c.shift());j--;){h=a[++d];h.moveToBookmark(c.shift());f.setEnd(h.endContainer,h.endOffset)}}return f}}},createBookmarks:function(b){for(var e=[],c,d=0;d<this.length;d++){e.push(c=this[d].createBookmark(b,true));for(var i=d+1;i<this.length;i++){this[i]= -a(c,this[i]);this[i]=a(c,this[i],true)}}return e},createBookmarks2:function(a){for(var e=[],c=0;c<this.length;c++)e.push(this[c].createBookmark2(a));return e},moveToBookmarks:function(a){for(var e=0;e<this.length;e++)this[e].moveToBookmark(a[e])}}}(),function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),f= -0,e;f<c.length;f++){e=c[f];if(d.ie&&(e.replace(/^ie/,"")==d.version||d.quirks&&e=="iequirks"))e="ie";if(d[e]){b=b+("_"+c[f]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(e(a));d[a]=1}b&&b()}function g(a){var b=a.getById(i);if(!b){b=a.getHead().append("style");b.setAttribute("id",i);b.setAttribute("type","text/css")}return b}function c(a,b,c){var d,f,e;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(f=0;f<b.length;f++)b[f]=b[f].split("{")}for(var h= -0;h<a.length;h++)if(CKEDITOR.env.webkit)for(f=0;f<b.length;f++){e=b[f][1];for(d=0;d<c.length;d++)e=e.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[f][0],e)}else{e=b;for(d=0;d<c.length;d++)e=e.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&&CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+e:a[h].$.innerHTML=a[h].$.innerHTML+e}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+ -"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,f){var e;if(a){a=a.toLowerCase();b&&(e=this.icons[a+"-rtl"]);e||(e=this.icons[a])}a=c||e&&e.path||"";d=d||e&&e.offset;f=f||e&&e.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype, -{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=g(CKEDITOR.document);return(this.setUiColor=function(a){var d=CKEDITOR.skin.chameleon,e=[[h,a]];this.uiColor=a;c([b],d(this,"editor"),e);c(f,d(this,"panel"),e)}).call(this,a)}});var i="cke_ui_color",f=[],h=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a= -g(a);f.push(a);var d=b.getUiColor();d&&c([a],CKEDITOR.skin.chameleon(b,"panel"),[[h,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"), -b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(g){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}}(),CKEDITOR.skin.name="moono",CKEDITOR.skin.ua_editor= -"ie,iequirks,ie7,ie8,gecko",CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8",CKEDITOR.skin.chameleon=function(){var a=function(){return function(a,b){for(var d=a.match(/[^#]./g),e=0;e<3;e++){var f=d,h=e,j;j=parseInt(d[e],16);j=("0"+(b<0?0|j*(1+b):0|j+(255-j)*b).toString(16)).slice(-2);f[h]=j}return"#"+d.join("")}}(),e=function(){var a=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');"); -return function(b,d){return a.output({from:b,to:d})}}(),b={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), -panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; -return function(g,c){var d=g.uiColor,d={id:"."+g.id,defaultBorder:a(d,-0.1),defaultGradient:e(a(d,0.9),d),lightGradient:e(a(d,1),a(d,0.7)),mediumGradient:e(a(d,0.8),a(d,0.5)),ckeButtonOn:e(a(d,0.6),a(d,0.7)),ckeResizer:a(d,-0.4),ckeToolbarSeparator:a(d,0.5),ckeColorauto:a(d,0.8),dialogBody:a(d,0.7),dialogTabSelected:e("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:a(d,-0.6),elementsPathBg:d,menubuttonIcon:a(d,0.5),menubuttonIconHover:a(d,0.3)};return b[c].output(d).replace(/\[/g, -"{").replace(/\]/g,"}")}}(),CKEDITOR.plugins.add("dialogui",{onLoad:function(){var a=function(a){this._||(this._={});this._["default"]=this._.initValue=a["default"]||"";this._.required=a.required||false;for(var b=[this._],c=1;c<arguments.length;c++)b.push(arguments[c]);b.push(true);CKEDITOR.tools.extend.apply(CKEDITOR.tools,b);return this._},e={build:function(a,b,c){return new CKEDITOR.ui.dialog.textInput(a,b,c)}},b={build:function(a,b,c){return new CKEDITOR.ui.dialog[b.type](a,b,c)}},g={isChanged:function(){return this.getValue()!= -this.getInitValue()},reset:function(a){this.setValue(this.getInitValue(),a)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},c=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(a,b){if(!this._.domOnChangeRegistered){a.on("load",function(){this.getInputElement().on("change",function(){a.parts.dialog.isVisible()&&this.fire("change", -{value:this.getValue()})},this)},this);this._.domOnChangeRegistered=true}this.on("change",b)}},true),d=/^on([A-Z]\w+)/,i=function(a){for(var b in a)(d.test(b)||b=="title"||b=="type")&&delete a[b];return a};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,c,d,e){if(!(arguments.length<4)){var g=a.call(this,c);g.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var i={role:c.role||"presentation"};if(c.includeLabel)i["aria-labelledby"]=g.labelId;CKEDITOR.ui.dialog.uiElement.call(this, -b,c,d,"div",null,i,function(){var a=[],d=c.required?" cke_required":"";if(c.labelLayout!="horizontal")a.push('<label class="cke_dialog_ui_labeled_label'+d+'" ',' id="'+g.labelId+'"',g.inputId?' for="'+g.inputId+'"':"",(c.labelStyle?' style="'+c.labelStyle+'"':"")+">",c.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',c.controlStyle?' style="'+c.controlStyle+'"':"",' role="presentation">',e.call(this,b,c),"</div>");else{d={type:"hbox",widths:c.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ -d+'" id="'+g.labelId+'" for="'+g.inputId+'"'+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(c.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(c.controlStyle?' style="'+c.controlStyle+'"':"")+">"+e.call(this,b,c)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,d,a)}return a.join("")})}},textInput:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",g={"class":"cke_dialog_ui_input_"+ -c.type,id:e,type:c.type};if(c.validate)this.validate=c.validate;if(c.maxLength)g.maxlength=c.maxLength;if(c.size)g.size=c.size;if(c.inputStyle)g.style=c.inputStyle;var i=this,s=false;b.on("load",function(){i.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(s=true)});i.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&s){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);s=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, -b,c,d,function(){var a=['<div class="cke_dialog_ui_input_',c.type,'" role="presentation"'];c.width&&a.push('style="width:'+c.width+'" ');a.push("><input ");g["aria-labelledby"]=this._.labelId;this._.required&&(g["aria-required"]=this._.required);for(var b in g)a.push(b+'="'+g[b]+'" ');a.push(" /></div>");return a.join("")})}},textarea:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this,g=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",i={};if(c.validate)this.validate=c.validate; -i.rows=c.rows||5;i.cols=c.cols||20;i["class"]="cke_dialog_ui_input_textarea "+(c["class"]||"");if(typeof c.inputStyle!="undefined")i.style=c.inputStyle;if(c.dir)i.dir=c.dir;CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){i["aria-labelledby"]=this._.labelId;this._.required&&(i["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',g,'" '],b;for(b in i)a.push(b+'="'+CKEDITOR.tools.htmlEncode(i[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(e._["default"]), -"</textarea></div>");return a.join("")})}},checkbox:function(b,c,d){if(!(arguments.length<3)){var e=a.call(this,c,{"default":!!c["default"]});if(c.validate)this.validate=c.validate;CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"span",null,null,function(){var a=CKEDITOR.tools.extend({},c,{id:c.id?c.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),d=[],g=CKEDITOR.tools.getNextId()+"_label",j={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":g};i(a);if(c["default"])j.checked= -"checked";if(typeof a.inputStyle!="undefined")a.style=a.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,a,d,"input",null,j);d.push(' <label id="',g,'" for="',j.id,'"'+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(c.label),"</label>");return d.join("")})}},radio:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);if(!this._["default"])this._["default"]=this._.initValue=c.items[0][1];if(c.validate)this.validate=c.valdiate;var e=[],g=this;c.role="radiogroup"; -c.includeLabel=true;CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){for(var a=[],d=[],j=(c.id?c.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<c.items.length;l++){var o=c.items[l],r=o[2]!==void 0?o[2]:o[0],p=o[1]!==void 0?o[1]:o[0],w=CKEDITOR.tools.getNextId()+"_radio_input",v=w+"_label",w=CKEDITOR.tools.extend({},c,{id:w,title:null,type:null},true),r=CKEDITOR.tools.extend({},w,{title:r},true),x={type:"radio","class":"cke_dialog_ui_radio_input",name:j,value:p,"aria-labelledby":v},u=[]; -if(g._["default"]==p)x.checked="checked";i(w);i(r);if(typeof w.inputStyle!="undefined")w.style=w.inputStyle;w.keyboardFocusable=true;e.push(new CKEDITOR.ui.dialog.uiElement(b,w,u,"input",null,x));u.push(" ");new CKEDITOR.ui.dialog.uiElement(b,r,u,"label",null,{id:v,"for":x.id},o[0]);a.push(u.join(""))}new CKEDITOR.ui.dialog.hbox(b,e,a,d);return d.join("")});this._.children=e}},button:function(b,c,d){if(arguments.length){typeof c=="function"&&(c=c(b.getParentEditor()));a.call(this,c,{disabled:c.disabled|| -false});CKEDITOR.event.implementOn(this);var e=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){if(a.data.getKeystroke()in{32:1}){e.click();a.data.preventDefault()}})})();a.unselectable()},this);var g=CKEDITOR.tools.extend({},c);delete g.style;var i=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,g,d,"a",null,{style:c.style,href:"javascript:void(0)",title:c.label,hidefocus:"true", -"class":c["class"],role:"button","aria-labelledby":i},'<span id="'+i+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(c.label)+"</span>")}},select:function(b,c,d){if(!(arguments.length<3)){var e=a.call(this,c);if(c.validate)this.validate=c.validate;e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){var a=CKEDITOR.tools.extend({},c,{id:c.id?c.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],g=[],j={id:e.inputId,"class":"cke_dialog_ui_input_select", -"aria-labelledby":this._.labelId};d.push('<div class="cke_dialog_ui_input_',c.type,'" role="presentation"');c.width&&d.push('style="width:'+c.width+'" ');d.push(">");if(c.size!=void 0)j.size=c.size;if(c.multiple!=void 0)j.multiple=c.multiple;i(a);for(var l=0,o;l<c.items.length&&(o=c.items[l]);l++)g.push('<option value="',CKEDITOR.tools.htmlEncode(o[1]!==void 0?o[1]:o[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(o[0]));if(typeof a.inputStyle!="undefined")a.style=a.inputStyle;e.select= -new CKEDITOR.ui.dialog.uiElement(b,a,d,"select",null,j,g.join(""));d.push("</div>");return d.join("")})}},file:function(b,c,d){if(!(arguments.length<3)){c["default"]===void 0&&(c["default"]="");var e=CKEDITOR.tools.extend(a.call(this,c),{definition:c,buttons:[]});if(c.validate)this.validate=c.validate;b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){e.frameId=CKEDITOR.tools.getNextId()+ -"_fileInput";var a=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',e.frameId,'" title="',c.label,'" src="javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"></iframe>');return a.join("")})}},fileButton:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this;if(c.validate)this.validate=c.validate;var g=CKEDITOR.tools.extend({}, -c),i=g.onClick;g.className=(g.className?g.className+" ":"")+"cke_dialog_ui_button";g.onClick=function(a){var d=c["for"];if(!i||i.call(this,a)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(c["for"][0],c["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,g,d)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,c=/\/$/;return function(d,e,g){if(!(arguments.length<3)){var i=[], -n=e.html;n.charAt(0)!="<"&&(n="<span>"+n+"</span>");var l=e.focus;if(l){var o=this.focus;this.focus=function(){(typeof l=="function"?l:o).call(this);this.fire("focus")};if(e.isFocusable)this.isFocusable=this.isFocusable;this.keyboardFocusable=true}CKEDITOR.ui.dialog.uiElement.call(this,d,e,i,"span",null,null,"");i=i.join("").match(a);n=n.match(b)||["","",""];if(c.test(n[1])){n[1]=n[1].slice(0,-1);n[2]="/"+n[2]}g.push([n[1]," ",i[1]||"",n[2]].join(""))}}}(),fieldset:function(a,b,c,d,e){var g=e.label; -this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,e,d,"fieldset",null,null,function(){var a=[];g&&a.push("<legend"+(e.labelStyle?' style="'+e.labelStyle+'"':"")+">"+g+"</legend>");for(var b=0;b<c.length;b++)a.push(c[b]);return a.join("")})}},true);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(a){var b=CKEDITOR.document.getById(this._.labelId);b.getChildCount()< -1?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue=a;return this},getLabel:function(){var a=CKEDITOR.document.getById(this._.labelId);return!a||a.getChildCount()<1?"":a.getChild(0).getText()},eventProcessors:c},true);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):false},enable:function(){this._.disabled=false;var a=this.getElement();a&&a.removeClass("cke_disabled")}, -disable:function(){this._.disabled=true;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(a,b){this.on("click",function(){b.apply(this,arguments)})}},true),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:true},true);CKEDITOR.ui.dialog.textInput.prototype= -CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&b.$.focus()},0)},select:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();if(b){b.$.focus();b.$.select()}},0)},accessKeyUp:function(){this.select()},setValue:function(a){!a&&(a="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this, -arguments)},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(a,b,c){var d=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),e=this.getInputElement().$;d.$.text=a;d.$.value=b===void 0||b===null?a:b;c===void 0||c===null?CKEDITOR.env.ie?e.add(d.$):e.add(d.$, -null):e.add(d.$,c);return this},remove:function(a){this.getInputElement().$.remove(a);return this},clear:function(){for(var a=this.getInputElement().$;a.length>0;)a.remove(0);return this},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked}, -accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(a,b){if(!CKEDITOR.env.ie||CKEDITOR.env.version>8)return c.onChange.apply(this,arguments);a.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;b.propertyName=="checked"&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",b);return null}},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, -{setValue:function(a,b){for(var c=this._.children,d,e=0;e<c.length&&(d=c[e]);e++)d.getElement().$.checked=d.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(a,b){if(CKEDITOR.env.ie){a.on("load", -function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;a.propertyName=="checked"&&this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b)}else return c.onChange.apply(this,arguments);return null}}},g,true);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,g,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument(); -return a.$.forms.length>0?new CKEDITOR.dom.element(a.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,d=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},e;for(e in a)if(c=e.match(b))this.eventProcessors[e]?this.eventProcessors[e].call(this,this._.dialog,a[e]):d(this,this._.dialog, -c[1].toLowerCase(),a[e]);return this},reset:function(){function a(){c.$.open();var f="";d.size&&(f=d.size-(CKEDITOR.env.ie?7:0));var r=b.frameId+"_input";c.$.write(['<html dir="'+n+'" lang="'+l+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+n+'" lang="'+l+'" action="',CKEDITOR.tools.htmlEncode(d.action),'"><label id="',b.labelId,'" for="',r,'" style="display:none">',CKEDITOR.tools.htmlEncode(d.label), -'</label><input style="width:100%" id="',r,'" aria-labelledby="',b.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(d.id||"cke_upload"),'" size="',CKEDITOR.tools.htmlEncode(f>0?f:""),'" /></form></body></html><script>',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+g+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+i+")}","<\/script>"].join(""));c.$.close();for(f=0;f<e.length;f++)e[f].enable()}var b= -this._,c=CKEDITOR.document.getById(b.frameId).getFrameDocument(),d=b.definition,e=b.buttons,g=this.formLoadedNumber,i=this.formUnloadNumber,n=b.dialog._.editor.lang.dir,l=b.dialog._.editor.langCode;if(!g){g=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this);i=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this);this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(g);CKEDITOR.tools.removeFunction(i)})}CKEDITOR.env.gecko? -setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){if(!this._.domOnChangeRegistered){this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this);this._.domOnChangeRegistered=true}this.on("change",b)}},keyboardFocusable:true},true);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype= -CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",e);CKEDITOR.dialog.addUIElement("password",e);CKEDITOR.dialog.addUIElement("textarea",b);CKEDITOR.dialog.addUIElement("checkbox",b);CKEDITOR.dialog.addUIElement("radio",b);CKEDITOR.dialog.addUIElement("button",b);CKEDITOR.dialog.addUIElement("select",b);CKEDITOR.dialog.addUIElement("file",b);CKEDITOR.dialog.addUIElement("fileButton",b);CKEDITOR.dialog.addUIElement("html",b);CKEDITOR.dialog.addUIElement("fieldset", -{build:function(a,b,c){for(var d=b.children,e,g=[],i=[],n=0;n<d.length&&(e=d[n]);n++){var l=[];g.push(l);i.push(CKEDITOR.dialog._.uiElementBuilders[e.type].build(a,e,l))}return new CKEDITOR.ui.dialog[b.type](a,i,g,c,b)}})}}),CKEDITOR.DIALOG_RESIZE_NONE=0,CKEDITOR.DIALOG_RESIZE_WIDTH=1,CKEDITOR.DIALOG_RESIZE_HEIGHT=2,CKEDITOR.DIALOG_RESIZE_BOTH=3,function(){function a(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c% -a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function e(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function b(a,b){for(var c=a.$.getElementsByTagName("input"),d=0,f=c.length;d<f;d++){var e=new CKEDITOR.dom.element(c[d]);if(e.getAttribute("type").toLowerCase()=="text")if(b){e.setAttribute("value",e.getCustomData("fake_value")|| -"");e.removeCustomData("fake_value")}else{e.setCustomData("fake_value",e.getAttribute("value"));e.setAttribute("value","")}}}function g(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",true));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})}function c(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function d(a){var a=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog", -l).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),b=a.getChild([0,0,0,0,0]),c=b.getChild(0),d=b.getChild(1);if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var f="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())";CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+ -f+'" tabIndex="-1"></iframe>').appendTo(b.getParent())}c.unselectable();d.unselectable();return{element:a,parts:{dialog:a.getChild(0),title:c,close:d,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function i(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in -{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function f(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function h(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function j(a){function b(c){var i=a.getSize(),j=CKEDITOR.document.getWindow().getViewPaneSize(),k=c.data.$.screenX,r=c.data.$.screenY,n=k-d.x,p=r-d.y;d={x:k,y:r}; -f.x=f.x+n;f.y=f.y+p;a.move(f.x+h[3]<g?-h[3]:f.x-h[1]>j.width-i.width-g?j.width-i.width+(e.lang.dir=="rtl"?0:h[1]):f.x,f.y+h[0]<g?-h[0]:f.y-h[2]>j.height-i.height-g?j.height-i.height+h[2]:f.y,1);c.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=t.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var d=null,f=null;a.getElement().getFirst();var e= -a.getParentEditor(),g=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];typeof g=="undefined"&&(g=20);a.parts.title.on("mousedown",function(e){d={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);f=a.getPosition();if(CKEDITOR.env.ie6Compat){var g=t.getChild(0).getFrameDocument();g.on("mousemove",b);g.on("mouseup",c)}e.data.preventDefault()},a)}function k(a){var b,c;function d(f){var n=h.lang.dir=="rtl",p=r.width,o=r.height, -l=p+(f.data.$.screenX-b)*(n?-1:1)*(a._.moved?1:2),m=o+(f.data.$.screenY-c)*(a._.moved?1:2),w=a._.element.getFirst(),w=n&&w.getComputedStyle("right"),v=a.getPosition();v.y+m>k.height&&(m=k.height-v.y);if((n?w:v.x)+l>k.width)l=k.width-(n?w:v.x);if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)p=Math.max(e.minWidth||0,l-i);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||g==CKEDITOR.DIALOG_RESIZE_BOTH)o=Math.max(e.minHeight||0,m-j);a.resize(p,o);a._.moved||a.layout();f.data.preventDefault()}function f(){CKEDITOR.document.removeListener("mouseup", -f);CKEDITOR.document.removeListener("mousemove",d);if(n){n.remove();n=null}if(CKEDITOR.env.ie6Compat){var a=t.getChild(0).getFrameDocument();a.removeListener("mouseup",f);a.removeListener("mousemove",d)}}var e=a.definition,g=e.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var h=a.getParentEditor(),i,j,k,r,n,p=CKEDITOR.tools.addFunction(function(e){r=a.getSize();var g=a.parts.contents;if(g.$.getElementsByTagName("iframe").length){n=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'); -g.append(n)}j=r.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));i=r.width-a.parts.contents.getSize("width",1);b=e.screenX;c=e.screenY;k=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",d);CKEDITOR.document.on("mouseup",f);if(CKEDITOR.env.ie6Compat){g=t.getChild(0).getFrameDocument();g.on("mousemove",d);g.on("mouseup",f)}e.preventDefault&&e.preventDefault()});a.on("load",function(){var b="";g==CKEDITOR.DIALOG_RESIZE_WIDTH? -b=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+b+" cke_resizer_"+h.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(h.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event )">'+(h.lang.dir=="ltr"?"◢":"◣")+"</div>");a.parts.footer.append(b,1)});h.on("destroy",function(){CKEDITOR.tools.removeFunction(p)})}}function m(a){a.data.preventDefault(1)}function q(a){var b=CKEDITOR.document.getWindow(), -c=a.config,d=c.dialog_backgroundCoverColor||"white",f=c.dialog_backgroundCoverOpacity,e=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,f,e),g=u[c];if(g)g.show();else{e=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",e,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+d:"",'" class="cke_dialog_background_cover">'];if(CKEDITOR.env.ie6Compat){d="<html><body style=\\'background-color:"+d+";\\'></body></html>";e.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'); -e.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())");e.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')}e.push("</div>");g=CKEDITOR.dom.element.createFromHtml(e.join(""));g.setOpacity(f!=void 0?f:0.5);g.on("keydown",m);g.on("keypress",m);g.on("keyup",m);g.appendTo(CKEDITOR.document.getBody());u[c]=g}a.focusManager.add(g); -t=g;var a=function(){var a=b.getViewPaneSize();g.setStyles({width:a.width+"px",height:a.height+"px"})},h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;g.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do{a=c.getPosition();c.move(a.x,a.y)}while(c=c._.parentDialog)}};x=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&g.focus();if(CKEDITOR.env.ie6Compat){var i=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){i.prevScrollHandler= -window.onscroll||function(){};window.onscroll=i},0);h()}}function s(a){if(t){a.focusManager.remove(t);a=CKEDITOR.document.getWindow();t.hide();a.removeListener("resize",x);CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0);x=null}}var n=CKEDITOR.tools.cssLength,l='<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog '+ -CKEDITOR.env.cssClass+' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>'; -CKEDITOR.dialog=function(b,f){function h(){var a=u._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function i(a){var b=u._.focusList,a=a||0;if(!(b.length<1)){var c=u._.currentFocusIndex;try{b[c].getInputElement().$.blur()}catch(d){}for(var f=c=(c+a+b.length)%b.length;a&&!b[f].isFocusable();){f=(f+a+b.length)%b.length;if(f==c)break}b[f].focus();b[f].type=="text"&&b[f].select()}}function r(c){if(u== -CKEDITOR.dialog._.currentTop){var d=c.data.getKeystroke(),f=b.lang.dir=="rtl";x=q=0;if(d==9||d==CKEDITOR.SHIFT+9){d=d==CKEDITOR.SHIFT+9;if(u._.tabBarMode){d=d?a.call(u):e.call(u);u.selectPage(d);u._.tabs[d][0].focus()}else i(d?-1:1);x=1}else if(d==CKEDITOR.ALT+121&&!u._.tabBarMode&&u.getPageCount()>1){u._.tabBarMode=true;u._.tabs[u._.currentTabId][0].focus();x=1}else if((d==37||d==39)&&u._.tabBarMode){d=d==(f?39:37)?a.call(u):e.call(u);u.selectPage(d);u._.tabs[d][0].focus();x=1}else if((d==13||d== -32)&&u._.tabBarMode){this.selectPage(this._.currentTabId);this._.tabBarMode=false;this._.currentFocusIndex=-1;i(1);x=1}else if(d==13){d=c.data.getTarget();if(!d.is("a","button","select","textarea")&&(!d.is("input")||d.$.type!="button")){(d=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(d.click,0,d);x=1}q=1}else if(d==27){(d=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(d.click,0,d):this.fire("cancel",{hide:true}).hide!==false&&this.hide();q=1}else return;n(c)}}function n(a){x?a.data.preventDefault(1): -q&&a.data.stopPropagation()}var p=CKEDITOR.dialog._.dialogDefinitions[f],l=CKEDITOR.tools.clone(o),m=b.config.dialog_buttonsOrder||"OS",w=b.lang.dir,s={},x,q;(m=="OS"&&CKEDITOR.env.mac||m=="rtl"&&w=="ltr"||m=="ltr"&&w=="rtl")&&l.buttons.reverse();p=CKEDITOR.tools.extend(p(b),l);p=CKEDITOR.tools.clone(p);p=new v(this,p);l=d(b);this._={editor:b,element:l.element,name:f,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null, -currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};this.parts=l.parts;CKEDITOR.tools.setTimeout(function(){b.fire("ariaWidget",this.parts.contents)},0,this);l={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};l[w=="rtl"?"right":"left"]=0;this.parts.dialog.setStyles(l);CKEDITOR.event.call(this);this.definition=p=CKEDITOR.fire("dialogDefinition",{name:f,definition:p},b).definition;if(!("removeDialogTabs"in b._)&& -b.config.removeDialogTabs){l=b.config.removeDialogTabs.split(";");for(w=0;w<l.length;w++){m=l[w].split(":");if(m.length==2){var t=m[0];s[t]||(s[t]=[]);s[t].push(m[1])}}b._.removeDialogTabs=s}if(b._.removeDialogTabs&&(s=b._.removeDialogTabs[f]))for(w=0;w<s.length;w++)p.removeContents(s[w]);if(p.onLoad)this.on("load",p.onLoad);if(p.onShow)this.on("show",p.onShow);if(p.onHide)this.on("hide",p.onHide);if(p.onOk)this.on("ok",function(a){b.fire("saveSnapshot");setTimeout(function(){b.fire("saveSnapshot")}, -0);if(p.onOk.call(this,a)===false)a.data.hide=false});if(p.onCancel)this.on("cancel",function(a){if(p.onCancel.call(this,a)===false)a.data.hide=false});var u=this,z=function(a){var b=u._.contents,c=false,d;for(d in b)for(var f in b[d])if(c=a.call(this,b[d][f]))return};this.on("ok",function(a){z(function(b){if(b.validate){var c=b.validate(this),d=typeof c=="string"||c===false;if(d){a.data.hide=false;a.stop()}g.call(b,!d,typeof c=="string"?c:void 0);return d}})},this,null,0);this.on("cancel",function(a){z(function(c){if(c.isChanged()){if(!b.config.dialog_noConfirmCancel&& -!confirm(b.lang.common.confirmCancel))a.data.hide=false;return true}})},this,null,0);this.parts.close.on("click",function(a){this.fire("cancel",{hide:true}).hide!==false&&this.hide();a.data.preventDefault()},this);this.changeFocus=i;var y=this._.element;b.focusManager.add(y,1);this.on("show",function(){y.on("keydown",r,this);if(CKEDITOR.env.gecko)y.on("keypress",n,this)});this.on("hide",function(){y.removeListener("keydown",r);CKEDITOR.env.gecko&&y.removeListener("keypress",n);z(function(a){c.apply(a)})}); -this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",r,this,null,0)});this.on("show",function(){h();if(b.config.dialog_startupFocusTab&&u._.pageCount>1){u._.tabBarMode=true;u._.tabs[u._.currentTabId][0].focus()}else if(!this._.hasFocus){this._.currentFocusIndex=-1;if(p.onFocus){var a=p.onFocus.call(this);a&&a.focus()}else i(1)}},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst(); -b.remove();b.appendTo(a)},this);j(this);k(this);(new CKEDITOR.dom.text(p.title,CKEDITOR.document)).appendTo(this.parts.title);for(w=0;w<p.contents.length;w++)(s=p.contents[w])&&this.addPage(s);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();if(b.hasClass("cke_dialog_tab")){b=b.$.id;this.selectPage(b.substring(4,b.lastIndexOf("_")));if(this._.tabBarMode){this._.tabBarMode=false;this._.currentFocusIndex=-1;i(1)}a.data.preventDefault()}},this);w=[];s=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this, -{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:p.buttons},w).getChild();this.parts.footer.setHtml(w.join(""));for(w=0;w<s.length;w++)this._.buttons[s[w].id]=s[w]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b)){CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor);this.fire("resize",{width:a,height:b}, -this._.editor);this.parts.contents.setStyles({width:a+"px",height:b+"px"});if(this._.editor.lang.dir=="rtl"&&this._.position)this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10);this._.contentSize={width:a,height:b}}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var d=this._.element.getFirst(),f=this._.editor.lang.dir== -"rtl",e=d.getComputedStyle("position")=="fixed";CKEDITOR.env.ie&&d.setStyle("zoom","100%");if(!e||!this._.position||!(this._.position.x==a&&this._.position.y==b)){this._.position={x:a,y:b};if(!e){e=CKEDITOR.document.getWindow().getScrollPosition();a=a+e.x;b=b+e.y}if(f){e=this.getSize();a=CKEDITOR.document.getWindow().getViewPaneSize().width-e.width-a}b={top:(b>0?b:0)+"px"};b[f?"right":"left"]=(a>0?a:0)+"px";d.setStyles(b);c&&(this._.moved=1)}},getPosition:function(){return CKEDITOR.tools.extend({}, -this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()):a.setStyle("display","block");this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);if(CKEDITOR.dialog._.currentZIndex===null)CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex; -this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex=CKEDITOR.dialog._.currentZIndex+10);if(CKEDITOR.dialog._.currentTop===null){CKEDITOR.dialog._.currentTop=this;this._.parentDialog=null;q(this._.editor)}else{this._.parentDialog=CKEDITOR.dialog._.currentTop;this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);CKEDITOR.dialog._.currentTop=this}a.on("keydown",z);a.on("keyup",A);this._.hasFocus=false;for(var c in b.contents)if(b.contents[c]){var a= -b.contents[c],d=this._.tabs[a.id],e=a.requiredContent,g=0;if(d){for(var h in this._.contents[a.id]){var i=this._.contents[a.id][h];if(!(i.type=="hbox"||i.type=="vbox"||!i.getInputElement()))if(i.requiredContent&&!this._.editor.activeFilter.check(i.requiredContent))i.disable();else{i.enable();g++}}!g||e&&!this._.editor.activeFilter.check(e)?d[0].addClass("cke_dialog_tab_disabled"):d[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();f(this);this.parts.dialog.setStyle("visibility", -"");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),d=(c.width-b.width)/2,f=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(f>0?f:0)>c.height||b.width+(d>0?d:0)>c.width?a.setStyle("position", -"absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:d,this._.moved?this._.position.y:f)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&& -this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(G(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst(); -b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else s(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex=CKEDITOR.dialog._.currentZIndex-10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",z);a.removeListener("keyup",A);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&& -a.resetInitValue()})}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",d=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),f=this._.contents[a.id]={},e=d.getChild(),g=0;d=e.shift();){!d.notAllowed&&(d.type!="hbox"&&d.type!="vbox")&&g++;f[d.id]= -d;typeof d.getChild=="function"&&e.push.apply(e,d.getChild())}if(!g)a.hidden=true;b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");d=CKEDITOR.env;f="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',this._.pageCount>0?" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',f,'"',d.gecko&&!d.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join("")); -b.setAttribute("aria-labelledby",f);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);if(a.accessKey){B(this,this,"CTRL+"+a.accessKey,J,C);this._.accessKeyMap["CTRL+"+a.accessKey]=a.id}}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&this.fire("selectPage",{page:a,currentPage:this._.currentTabId})!== -false){for(var c in this._.tabs){var d=this._.tabs[c][0],f=this._.tabs[c][1];if(c!=a){d.removeClass("cke_dialog_tab_selected");f.hide()}f.setAttribute("aria-hidden",c!=a)}var e=this._.tabs[a];e[0].addClass("cke_dialog_tab_selected");if(CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat){b(e[1]);e[1].show();setTimeout(function(){b(e[1],1)},0)}else e[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(this._.pageCount=== -1?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(b){var c=this._.tabs[b]&&this._.tabs[b][0];if(c&&this._.pageCount!=1&&c.isVisible()){b==this._.currentTabId&&this.selectPage(a.call(this));c.hide();this._.pageCount--;this.updateStyle()}},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0]){a.show();this._.pageCount++;this.updateStyle()}},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a]; -return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()}, -addFocusable:function(a,b){if(typeof b=="undefined"){b=this._.focusList.length;this._.focusList.push(new i(this,a,b))}else{this._.focusList.splice(b,0,new i(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||typeof b=="function")this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop}, -isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;a.fire("ok",{hide:true}).hide!==false&&a.hide()}},b,true)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},true)};return a}(), -cancelButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;a.fire("cancel",{hide:true}).hide!==false&&a.hide()}},b,true)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},true)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{}, -dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var o={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},r=function(a,b,c){for(var d=0,f;f=a[d];d++){if(f.id==b)return f;if(c&&f[c])if(f=r(f[c],b,c))return f}return null},p=function(a,b,c,d,f){if(c){for(var e=0,g;g=a[e];e++){if(g.id==c){a.splice(e,0,b);return b}if(d&& -g[d])if(g=p(g[d],b,c,d,true))return g}if(f)return null}a.push(b);return b},w=function(a,b,c){for(var d=0,f;f=a[d];d++){if(f.id==b)return a.splice(d,1);if(c&&f[c])if(f=w(f[c],b,c))return f}return null},v=function(a,b){this.dialog=a;for(var c=b.contents,d=0,f;f=c[d];d++)c[d]=f&&new h(a,f);CKEDITOR.tools.extend(this,b)};v.prototype={getContents:function(a){return r(this.contents,a)},getButton:function(a){return r(this.buttons,a)},addContents:function(a,b){return p(this.contents,a,b)},addButton:function(a, -b){return p(this.buttons,a,b)},removeContents:function(a){w(this.contents,a)},removeButton:function(a){w(this.buttons,a)}};h.prototype={get:function(a){return r(this.elements,a,"children")},add:function(a,b){return p(this.elements,a,b,"children")},remove:function(a){w(this.elements,a,"children")}};var x,u={},t,y={},z=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode);if((b=y[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+ -f])&&b.length){b=b[b.length-1];b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key);a.data.preventDefault()}},A=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode);if((b=y[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+f])&&b.length){b=b[b.length-1];if(b.keyup){b.keyup.call(b.uiElement,b.dialog,b.key);a.data.preventDefault()}}},B=function(a,b,c,d,f){(y[c]||(y[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:f||a.accessKeyUp, -keydown:d||a.accessKeyDown})},G=function(a){for(var b in y){for(var c=y[b],d=c.length-1;d>=0;d--)(c[d].dialog==a||c[d].uiElement==a)&&c.splice(d,1);c.length===0&&delete y[b]}},C=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},J=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,d,f,e,g){if(!(arguments.length<4)){var h=(d.call?d(b):d)||"div",i=["<",h," "],j=(f&&f.call?f(b):f)||{},k=(e&&e.call?e(b):e)||{},r=(g&&g.call?g.call(this,a,b):g)||"",p=this.domId=k.id|| -CKEDITOR.tools.getNextId()+"_uiElement";this.id=b.id;if(b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)){j.display="none";this.notAllowed=true}k.id=p;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&&(n.cke_disabled=1);for(var o=k["class"]&&k["class"].split?k["class"].split(" "):[],p=0;p<o.length;p++)o[p]&&(n[o[p]]=1);o=[];for(p in n)o.push(p);k["class"]=o.join(" ");if(b.title)k.title=b.title;n=(b.style||"").split(";");if(b.align){o= -b.align;j["margin-left"]=o=="left"?0:"auto";j["margin-right"]=o=="right"?0:"auto"}for(p in j)n.push(p+":"+j[p]);b.hidden&&n.push("display:none");for(p=n.length-1;p>=0;p--)n[p]===""&&n.splice(p,1);if(n.length>0)k.style=(k.style?k.style+"; ":"")+n.join("; ");for(p in k)i.push(p+'="'+CKEDITOR.tools.htmlEncode(k[p])+'" ');i.push(">",r,"</",h,">");c.push(i.join(""));(this._||(this._={})).dialog=a;if(typeof b.isChanged=="boolean")this.isChanged=function(){return b.isChanged};if(typeof b.isChanged=="function")this.isChanged= -b.isChanged;if(typeof b.setValue=="function")this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}});if(typeof b.getValue=="function")this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}});CKEDITOR.event.implementOn(this);this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&B(this,a,"CTRL+"+b.accessKey);var l=this;a.on("load",function(){var b= -l.getInputElement();if(b){var c=l.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;l.fire("focus");c&&this.addClass(c)});b.on("blur",function(){l.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);if(this.keyboardFocusable){this.tabIndex=b.tabIndex||0;this.focusIndex=a._.focusList.push(this)-1;this.on("focus",function(){a._.currentFocusIndex=l.focusIndex})}}},hbox:function(a, -b,c,d,f){if(!(arguments.length<4)){this._||(this._={});var e=this._.children=b,g=f&&f.widths||null,h=f&&f.height||null,i,j={role:"presentation"};f&&f.align&&(j.align=f.align);CKEDITOR.ui.dialog.uiElement.call(this,a,f||{type:"hbox"},d,"table",{},j,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(i=0;i<c.length;i++){var b="cke_dialog_ui_hbox_child",d=[];i===0&&(b="cke_dialog_ui_hbox_first");i==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" '); -g?g[i]&&d.push("width:"+n(g[i])):d.push("width:"+Math.floor(100/c.length)+"%");h&&d.push("height:"+n(h));f&&f.padding!=void 0&&d.push("padding:"+n(f.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&e[i].align)&&d.push("text-align:"+e[i].align);d.length>0&&a.push('style="'+d.join("; ")+'" ');a.push(">",c[i],"</td>")}a.push("</tr></tbody>");return a.join("")})}},vbox:function(a,b,c,d,f){if(!(arguments.length<3)){this._||(this._={});var e=this._.children=b,g=f&&f.width||null,h=f&&f.heights||null;CKEDITOR.ui.dialog.uiElement.call(this, -a,f||{type:"vbox"},d,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');f&&f.expand&&b.push("height:100%;");b.push("width:"+n(g||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(f&&f.align||(a.getParentEditor().lang.dir=="ltr"?"left":"right")),'" ');b.push("><tbody>");for(var d=0;d<c.length;d++){var i=[];b.push('<tr><td role="presentation" ');g&&i.push("width:"+ -n(g||"100%"));h?i.push("height:"+n(h[d])):f&&f.expand&&i.push("height:"+Math.floor(100/c.length)+"%");f&&f.padding!=void 0&&i.push("padding:"+n(f.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&e[d].align)&&i.push("text-align:"+e[d].align);i.length>0&&b.push('style="',i.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">',c[d],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)}, -getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return false},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&a.$.className.search("cke_dialog_page_contents")==-1;);if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!= -a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,d=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},f;for(f in a)if(c=f.match(b))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):d(this,this._.dialog,c[1].toLowerCase(),a[f]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show", -b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()}, -isFocusable:function(){return!this.isEnabled()||!this.isVisible()?false:true}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(arguments.length<1)return this._.children.concat();a.splice||(a=[a]);return a.length<2?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},true);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a= -{build:function(a,b,c){for(var d=b.children,f,e=[],g=[],h=0;h<d.length&&(f=d[h]);h++){var i=[];e.push(i);g.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,i))}return new CKEDITOR.ui.dialog[b.type](a,g,e,c,b)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;CKEDITOR.tools.extend(this,b,true)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:false,editorFocus:1}; -(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,f=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,e=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():a[0],c=void 0,d=CKEDITOR.VALIDATE_AND,f=[],e;for(e=0;e<a.length;e++)if(typeof a[e]=="function")f.push(a[e]);else break;if(e<a.length&& -typeof a[e]=="string"){c=a[e];e++}e<a.length&&typeof a[e]=="number"&&(d=a[e]);var g=d==CKEDITOR.VALIDATE_AND?true:false;for(e=0;e<f.length;e++)g=d==CKEDITOR.VALIDATE_AND?g&&f[e](b):g||f[e](b);return!g?c:true}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:true}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))}, -a)},htmlLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in u)u[c].remove(); -u={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,d=CKEDITOR.dialog._.dialogDefinitions[a];CKEDITOR.dialog._.currentTop===null&&q(this);if(typeof d=="function"){c=this._.storedDialogs||(this._.storedDialogs={});c=c[a]||(c[a]=new CKEDITOR.dialog(this,a));b&&b.call(c,c);c.show()}else{if(d=="failed"){s(this);throw Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.'); -}typeof d=="string"&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(d),function(){typeof CKEDITOR.dialog._.dialogDefinitions[a]!="function"&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})}(),CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){a.on("doubleclick",function(e){e.data.dialog&&a.openDialog(e.data.dialog)},null,null,999)}}),function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{ar:1, -bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(a){var e=this;a.addCommand("a11yHelp",{exec:function(){var b=a.langCode,b=e.availableLangs[b]?b:e.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e.path+ -"dialogs/lang/"+b+".js"),function(){a.lang.a11yhelp=e.langEntries[b];a.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:false});a.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");a.on("ariaEditorHelpLabel",function(b){b.data.label=a.lang.common.editorHelp})}})}(),CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var e=a.addCommand("about",new CKEDITOR.dialogCommand("about"));e.modes={wysiwyg:1,source:1}; -e.canUndo=false;e.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),CKEDITOR.plugins.add("basicstyles",{init:function(a){var e=0,b=function(b,c,d,j){if(j){var j=new CKEDITOR.style(j),k=g[d];k.unshift(j);a.attachStyleStateChange(j,function(b){!a.readOnly&&a.getCommand(d).setState(b)});a.addCommand(d,new CKEDITOR.styleCommand(j,{contentForms:k}));a.ui.addButton&&a.ui.addButton(b, -{label:c,command:d,toolbar:"basicstyles,"+(e=e+10)})}},g={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return a=="bold"||+a>=700}]],italic:["em","i",["span",function(a){return a.styles["font-style"]=="italic"}]],underline:["u",["span",function(a){return a.styles["text-decoration"]=="underline"}]],strike:["s","strike",["span",function(a){return a.styles["text-decoration"]=="line-through"}]],subscript:["sub"],superscript:["sup"]},c=a.config,d=a.lang.basicstyles;b("Bold",d.bold,"bold", -c.coreStyles_bold);b("Italic",d.italic,"italic",c.coreStyles_italic);b("Underline",d.underline,"underline",c.coreStyles_underline);b("Strike",d.strike,"strike",c.coreStyles_strike);b("Subscript",d.subscript,"subscript",c.coreStyles_subscript);b("Superscript",d.superscript,"superscript",c.coreStyles_superscript);a.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}}),CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"},CKEDITOR.config.coreStyles_italic= -{element:"em",overrides:"i"},CKEDITOR.config.coreStyles_underline={element:"u"},CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"},CKEDITOR.config.coreStyles_subscript={element:"sub"},CKEDITOR.config.coreStyles_superscript={element:"sup"},function(){var a={exec:function(a){var b=a.getCommand("blockquote").state,g=a.getSelection(),c=g&&g.getRanges()[0];if(c){var d=g.createBookmarks();if(CKEDITOR.env.ie){var i=d[0].startNode,f=d[0].endNode,h;if(i&&i.getParent().getName()=="blockquote")for(h= -i;h=h.getNext();)if(h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary()){i.move(h,true);break}if(f&&f.getParent().getName()=="blockquote")for(h=f;h=h.getPrevious();)if(h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary()){f.move(h);break}}var j=c.createIterator();j.enlargeBr=a.config.enterMode!=CKEDITOR.ENTER_BR;if(b==CKEDITOR.TRISTATE_OFF){for(i=[];b=j.getNextParagraph();)i.push(b);if(i.length<1){b=a.document.createElement(a.config.enterMode==CKEDITOR.ENTER_P?"p":"div");f=d.shift();c.insertNode(b); -b.append(new CKEDITOR.dom.text("",a.document));c.moveToBookmark(f);c.selectNodeContents(b);c.collapse(true);f=c.createBookmark();i.push(b);d.unshift(f)}h=i[0].getParent();c=[];for(f=0;f<i.length;f++){b=i[f];h=h.getCommonAncestor(b.getParent())}for(b={table:1,tbody:1,tr:1,ol:1,ul:1};b[h.getName()];)h=h.getParent();for(f=null;i.length>0;){for(b=i.shift();!b.getParent().equals(h);)b=b.getParent();b.equals(f)||c.push(b);f=b}for(;c.length>0;){b=c.shift();if(b.getName()=="blockquote"){for(f=new CKEDITOR.dom.documentFragment(a.document);b.getFirst();){f.append(b.getFirst().remove()); -i.push(f.getLast())}f.replace(b)}else i.push(b)}c=a.document.createElement("blockquote");for(c.insertBefore(i[0]);i.length>0;){b=i.shift();c.append(b)}}else if(b==CKEDITOR.TRISTATE_ON){f=[];for(h={};b=j.getNextParagraph();){for(i=c=null;b.getParent();){if(b.getParent().getName()=="blockquote"){c=b.getParent();i=b;break}b=b.getParent()}if(c&&i&&!i.getCustomData("blockquote_moveout")){f.push(i);CKEDITOR.dom.element.setMarker(h,i,"blockquote_moveout",true)}}CKEDITOR.dom.element.clearAllMarkers(h);b= -[];i=[];for(h={};f.length>0;){j=f.shift();c=j.getParent();if(j.getPrevious())if(j.getNext()){j.breakParent(j.getParent());i.push(j.getNext())}else j.remove().insertAfter(c);else j.remove().insertBefore(c);if(!c.getCustomData("blockquote_processed")){i.push(c);CKEDITOR.dom.element.setMarker(h,c,"blockquote_processed",true)}b.push(j)}CKEDITOR.dom.element.clearAllMarkers(h);for(f=i.length-1;f>=0;f--){c=i[f];a:{h=c;for(var j=0,k=h.getChildCount(),m=void 0;j<k&&(m=h.getChild(j));j++)if(m.type==CKEDITOR.NODE_ELEMENT&& -m.isBlockBoundary()){h=false;break a}h=true}h&&c.remove()}if(a.config.enterMode==CKEDITOR.ENTER_BR)for(c=true;b.length;){j=b.shift();if(j.getName()=="div"){f=new CKEDITOR.dom.documentFragment(a.document);c&&(j.getPrevious()&&!(j.getPrevious().type==CKEDITOR.NODE_ELEMENT&&j.getPrevious().isBlockBoundary()))&&f.append(a.document.createElement("br"));for(c=j.getNext()&&!(j.getNext().type==CKEDITOR.NODE_ELEMENT&&j.getNext().isBlockBoundary());j.getFirst();)j.getFirst().remove().appendTo(f);c&&f.append(a.document.createElement("br")); -f.replace(j);c=false}}}g.selectBookmarks(d);a.focus()}},refresh:function(a,b){this.setState(a.elementPath(b.block||b.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(e){if(!e.blockless){e.addCommand("blockquote",a);e.ui.addButton&&e.ui.addButton("Blockquote",{label:e.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"})}}})}(), -"use strict",function(){function a(a){function b(){var c=a.editable();c.on(y,function(a){(!CKEDITOR.env.ie||!x)&&p(a)});CKEDITOR.env.ie&&c.on("paste",function(b){if(!u){e();b.data.preventDefault();p(b);q("paste")||a.openDialog("paste")}});if(CKEDITOR.env.ie){c.on("contextmenu",g,null,null,0);c.on("beforepaste",function(a){a.data&&(!a.data.$.ctrlKey&&!a.data.$.shiftKey)&&g()},null,null,0)}c.on("beforecut",function(){!x&&n(a)});var d;c.attachListener(CKEDITOR.env.ie?c:a.document.getDocumentElement(), -"mouseup",function(){d=setTimeout(function(){w()},0)});a.on("destroy",function(){clearTimeout(d)});c.on("keyup",w)}function c(b){return{type:b,canUndo:b=="cut",startDisabled:true,exec:function(){this.type=="cut"&&n();var b;var c=this.type;if(CKEDITOR.env.ie)b=q(c);else try{b=a.document.$.execCommand(c,false,null)}catch(d){b=false}b||alert(a.lang.clipboard[this.type+"Error"]);return b}}}function d(){return{canUndo:false,async:true,exec:function(a,b){var c=function(b,c){b&&s(b.type,b.dataValue,!!c); -a.fire("afterCommandExec",{name:"paste",command:d,returnValue:!!b})},d=this;typeof b=="string"?c({type:"auto",dataValue:b},1):a.getClipboardData(c)}}}function e(){u=1;setTimeout(function(){u=0},100)}function g(){x=1;setTimeout(function(){x=0},10)}function q(b){var c=a.document,d=c.getBody(),f=false,e=function(){f=true};d.on(b,e);(CKEDITOR.env.version>7?c.$:c.$.selection.createRange()).execCommand(b);d.removeListener(b,e);return f}function s(b,c,d){b={type:b};if(d&&a.fire("beforePaste",b)===false|| -!c)return false;b.dataValue=c;return a.fire("paste",b)}function n(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var b=a.getSelection(),c,d,f;if(b.getType()==CKEDITOR.SELECTION_ELEMENT&&(c=b.getSelectedElement())){d=b.getRanges()[0];f=a.document.createText("");f.insertBefore(c);d.setStartBefore(f);d.setEndAfter(c);b.selectRanges([d]);setTimeout(function(){if(c.getParent()){f.remove();b.selectElement(c)}},0)}}}function l(b,c){var d=a.document,f=a.editable(),e=function(a){a.cancel()},g;if(!d.getById("cke_pastebin")){var h= -a.getSelection(),j=h.createBookmarks();CKEDITOR.env.ie&&h.root.fire("selectionchange");var k=new CKEDITOR.dom.element((CKEDITOR.env.webkit||f.is("body"))&&!CKEDITOR.env.ie?"body":"div",d);k.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var r=0,d=d.getWindow();if(CKEDITOR.env.webkit){f.append(k);k.addClass("cke_editable");if(!f.is("body")){r=f.getComputedStyle("position")!="static"?f:CKEDITOR.dom.element.get(f.$.offsetParent);r=r.getDocumentPosition().y}}else f.getAscendant(CKEDITOR.env.ie? -"body":"html",1).append(k);k.setStyles({position:"absolute",top:d.getScrollPosition().y-r+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});if(r=k.getParent().isReadOnly()){k.setOpacity(0);k.setAttribute("contenteditable",true)}else k.setStyle(a.config.contentsLangDirection=="ltr"?"left":"right","-1000px");a.on("selectionChange",e,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)g=f.once("blur",e,null,null,-100);r&&k.focus();r= -new CKEDITOR.dom.range(k);r.selectNodeContents(k);var p=r.select();CKEDITOR.env.ie&&(g=f.once("blur",function(){a.lockSelection(p)}));var n=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=n;g&&g.removeListener();CKEDITOR.env.ie&&f.focus();h.selectBookmarks(j);k.remove();var b;if(CKEDITOR.env.webkit&&(b=k.getFirst())&&b.is&&b.hasClass("Apple-style-span"))k=b;a.removeListener("selectionChange",e);c(k.getHtml())}, -0)}}function o(){if(CKEDITOR.env.ie){a.focus();e();var b=a.focusManager;b.lock();if(a.editable().fire(y)&&!q("paste")){b.unlock();return false}b.unlock()}else try{if(a.editable().fire(y)&&!a.document.$.execCommand("Paste",false,null))throw 0;}catch(c){return false}return true}function r(b){if(a.mode=="wysiwyg")switch(b.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:b=a.editable();e();!CKEDITOR.env.ie&&b.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"); -setTimeout(function(){a.fire("saveSnapshot")},50)}}function p(b){var c={type:"auto"},d=a.fire("beforePaste",c);l(b,function(a){a=a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");d&&s(c.type,a,0,1)})}function w(){if(a.mode=="wysiwyg"){var b=v("paste");a.getCommand("cut").setState(v("cut"));a.getCommand("copy").setState(v("copy"));a.getCommand("paste").setState(b);a.fire("pasteState",b)}}function v(b){if(t&&b in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if(b=="paste")return CKEDITOR.TRISTATE_OFF; -var b=a.getSelection(),c=b.getRanges();return b.getType()==CKEDITOR.SELECTION_NONE||c.length==1&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var x=0,u=0,t=0,y=CKEDITOR.env.ie?"beforepaste":"paste";(function(){a.on("key",r);a.on("contentDom",b);a.on("selectionChange",function(a){t=a.data.selection.getRanges()[0].checkReadOnly();w()});a.contextMenu&&a.contextMenu.addListener(function(a,b){t=b.getRanges()[0].checkReadOnly();return{cut:v("cut"),copy:v("copy"),paste:v("paste")}})})(); -(function(){function b(c,d,f,e,g){var h=a.lang.clipboard[d];a.addCommand(d,f);a.ui.addButton&&a.ui.addButton(c,{label:h,command:d,toolbar:"clipboard,"+e});a.addMenuItems&&a.addMenuItem(d,{label:h,command:d,group:"clipboard",order:g})}b("Cut","cut",c("cut"),10,1);b("Copy","copy",c("copy"),20,4);b("Paste","paste",d(),30,8)})();a.getClipboardData=function(b,c){function d(a){a.removeListener();a.cancel();c(a.data)}function f(a){a.removeListener();a.cancel();j=true;c({type:h,dataValue:a.data})}function e(){this.customTitle= -b&&b.title}var g=false,h="auto",j=false;if(!c){c=b;b=null}a.on("paste",d,null,null,0);a.on("beforePaste",function(a){a.removeListener();g=true;h=a.data.type},null,null,1E3);if(o()===false){a.removeListener("paste",d);if(g&&a.fire("pasteDialog",e)){a.on("pasteDialogCommit",f);a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",f);setTimeout(function(){j||c(null)},10)})}else c(null)}}}function e(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&& -!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function b(a,b){function c(a){return CKEDITOR.tools.repeat("</p><p>",~~(a/2))+(a%2==1?"<br>":"")}b=b.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");b=b.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(b.match(/^[^<]$/))return b;if(CKEDITOR.env.webkit&&b.indexOf("<div>")>-1){b= -b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>");b.match(/<div>(<br>|)<\/div>/)&&(b="<p>"+b.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return c(a.split("</div><div>").length+1)})+"</p>");b=b.replace(/<\/div><div>/g,"<br>");b=b.replace(/<\/?div>/g,"")}if(CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR){CKEDITOR.env.gecko&&(b=b.replace(/^<br><br>$/,"<br>"));b.indexOf("<br><br>")>-1&&(b="<p>"+b.replace(/(<br>){2,}/g, -function(a){return c(a.length/4)})+"</p>")}return d(a,b)}function g(){var a=new CKEDITOR.htmlParser.filter,b={blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ol:1,p:1,table:1,ul:1},c=CKEDITOR.tools.extend({br:0},CKEDITOR.dtd.$inline),d={p:1,br:1,"cke:br":1},e=CKEDITOR.dtd,g=CKEDITOR.tools.extend({area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1},CKEDITOR.dtd.$nonBodyContent,CKEDITOR.dtd.$cdata),q=function(a){delete a.name;a.add(new CKEDITOR.htmlParser.text(" "))},s=function(a){for(var b= -a,c;(b=b.next)&&b.name&&b.name.match(/^h\d$/);){c=new CKEDITOR.htmlParser.element("cke:br");c.isEmpty=true;for(a.add(c);c=b.children.shift();)a.add(c)}};a.addRules({elements:{h1:s,h2:s,h3:s,h4:s,h5:s,h6:s,img:function(a){var a=CKEDITOR.tools.trim(a.attributes.alt||""),b=" ";a&&!a.match(/(^http|\.(jpe?g|gif|png))/i)&&(b=" ["+a+"] ");return new CKEDITOR.htmlParser.text(b)},td:q,th:q,$:function(a){var i=a.name,o;if(g[i])return false;a.attributes={};if(i=="br")return a;if(b[i])a.name="p";else if(c[i])delete a.name; -else if(e[i]){o=new CKEDITOR.htmlParser.element("cke:br");o.isEmpty=true;if(CKEDITOR.dtd.$empty[i])return o;a.add(o,0);o=o.clone();o.isEmpty=true;a.add(o);delete a.name}d[a.name]||delete a.name;return a}}},{applyToAll:true});return a}function c(a,b,c){var b=new CKEDITOR.htmlParser.fragment.fromHtml(b),e=new CKEDITOR.htmlParser.basicWriter;b.writeHtml(e,c);var b=e.getHtml(),b=b.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g,"$1").replace(/(<cke:br \/>){2,}/g,"<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g, -"$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g,"$1").replace(/<(cke:)?br( \/)?>/g,"<br>").replace(/<p><\/p>/g,""),g=0,b=b.replace(/<\/?p>/g,function(a){if(a=="<p>"){if(++g>1)return"</p><p>"}else if(--g>0)return"</p><p>";return a}).replace(/<p><\/p>/g,"");return d(a,b)}function d(a,b){a.enterMode==CKEDITOR.ENTER_BR?b=b.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("<br>",a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(b=b.replace(/<(\/)?p>/g,"<$1div>"));return b} -CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(d){var f;a(d);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));d.on("paste",function(a){var b=a.data.dataValue,c=CKEDITOR.dtd.$block;if(b.indexOf("Apple-")>-1){b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," ");a.data.type!="html"&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")}));if(b.indexOf('<br class="Apple-interchange-newline">')> --1){a.data.startsWithEOL=1;a.data.preSniffing="html";b=b.replace(/<br class="Apple-interchange-newline">/,"")}b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1")}if(b.match(/^<[^<]+cke_(editable|contents)/i)){var d,f,e=new CKEDITOR.dom.element("div");for(e.setHtml(b);e.getChildCount()==1&&(d=e.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)e=f=d;f&&(b=f.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b, -d){if(d.toLowerCase()in c){a.data.preSniffing="html";return"<"+d}return b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){if(d in c){a.data.endsWithEOL=1;return"</"+d+">"}return b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);d.on("paste",function(a){var a=a.data,j=a.type,k=a.dataValue,m,q=d.config.clipboard_defaultContentType||"html";m=j=="html"||a.preSniffing=="html"?"html":e(k);m=="htmlifiedtext"?k=b(d.config,k):j=="text"&&m== -"html"&&(k=c(d.config,k,f||(f=g(d))));a.startsWithEOL&&(k='<br data-cke-eol="1">'+k);a.endsWithEOL&&(k=k+'<br data-cke-eol="1">');j=="auto"&&(j=m=="html"||q=="html"?"html":"text");a.type=j;a.dataValue=k;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);d.on("paste",function(a){a=a.data;d.insertHtml(a.dataValue,a.type);setTimeout(function(){d.fire("afterPaste")},0)},null,null,1E3);d.on("pasteDialog",function(a){setTimeout(function(){d.openDialog("paste",a.data)},0)})}})}(), -function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var a=CKEDITOR.addTemplate("panel", -'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),e=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'),b=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>'); -CKEDITOR.ui.panel.prototype={render:function(g,c){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),c=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&c.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});c=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=true;if(this.onLoad)this.onLoad()},this));a.write(b.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css), -onload:"window.parent.CKEDITOR.tools.callFunction("+c+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&this._.onKeyDown(b)===false?a.data.preventDefault():(b==27||b==(c=="rtl"?39:37))&&this.onEscape&&this.onEscape(b)===false&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(c)}else a=this.document.getById(this.id);this._.holder= -a}return a};var d={editorId:g.id,id:this.id,langCode:g.langCode,dir:g.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":g.config.baseFloatZIndex+1};if(this.isFramed){var i=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=e.output({id:this.id+"_frame",src:i})}i=a.output(d);c&&c.push(i);return i},addBlock:function(a,b){b=this._.blocks[a]= -b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show(); -return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex= --1;this.element.disableContextMenu()},_:{markItem:function(a){if(a!=-1){a=this.element.getElementsByTag("a").getItem(this._.focusIndex=a);CKEDITOR.env.webkit&&a.getDocument().getWindow().focus();a.focus();this.onMark&&this.onMark(a)}}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||this.onHide.call(this)!==true)&&this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"), -f;f=d.getItem(++e);)if(f.getAttribute("_cke_focus")&&f.$.offsetWidth){this._.focusIndex=e;f.focus();break}if(!f&&!b){this._.focusIndex=-1;return this.onKeyDown(a,1)}return false;case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");e>0&&(f=d.getItem(--e));){if(f.getAttribute("_cke_focus")&&f.$.offsetWidth){this._.focusIndex=e;f.focus();break}f=null}if(!f&&!b){this._.focusIndex=d.count();return this.onKeyDown(a,1)}return false;case "click":case "mouseup":e=this._.focusIndex;(f=e>= -0&&this.element.getElementsByTag("a").getItem(e))&&(f.$[d]?f.$[d]():f.$["on"+d]());return false}return true}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function a(a,g,c,d,i){var i=CKEDITOR.tools.genKey(g.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",d.css||"",i||""),f=e[i];if(!f){f=e[i]=new CKEDITOR.ui.panel(g,d);f.element=c.append(CKEDITOR.dom.element.createFromHtml(f.render(a),g));f.element.setStyles({display:"none",position:"absolute"})}return f}var e={};CKEDITOR.ui.floatPanel= -CKEDITOR.tools.createClass({$:function(b,e,c,d){function i(){k.hide()}c.forceIFrame=1;c.toolbarRelated&&b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+b.name));var f=e.getDocument(),d=a(b,f,e,c,d||0),h=d.element,j=h.getFirst(),k=this;h.disableContextMenu();this.element=h;this._={editor:b,panel:d,parentElement:e,definition:c,document:f,iframe:j,children:[],dir:b.lang.dir};b.on("mode",i);b.on("resize",i);if(!CKEDITOR.env.iOS)f.getWindow().on("resize",i)},proto:{addBlock:function(a, -e){return this._.panel.addBlock(a,e)},addListBlock:function(a,e){return this._.panel.addListBlock(a,e)},getBlock:function(a){return this._.panel.getBlock(a)},showBlock:function(a,e,c,d,i,f){var h=this._.panel,j=h.showBlock(a);this.allowBlur(false);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var k=this.element,a=this._.iframe,a=CKEDITOR.env.ie?a:new CKEDITOR.dom.window(a.$.contentWindow),m=k.getDocument(), -q=this._.parentElement.getPositionedAncestor(),s=e.getDocumentPosition(m),m=q?q.getDocumentPosition(m):{x:0,y:0},n=this._.dir=="rtl",l=s.x+(d||0)-m.x,o=s.y+(i||0)-m.y;if(n&&(c==1||c==4))l=l+e.$.offsetWidth;else if(!n&&(c==2||c==3))l=l+(e.$.offsetWidth-1);if(c==3||c==4)o=o+(e.$.offsetHeight-1);this._.panel._.offsetParentId=e.getId();k.setStyles({top:o+"px",left:0,display:""});k.setOpacity(0);k.getFirst().removeStyle("width");this._.editor.focusManager.add(a);if(!this._.blurSet){CKEDITOR.event.useCapture= -true;a.on("blur",function(a){function b(){delete this._.returnFocus;this.hide()}if(this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild)if(CKEDITOR.env.iOS){if(!this._.hideTimeout)this._.hideTimeout=CKEDITOR.tools.setTimeout(b,0,this)}else b.call(this)},this);a.on("focus",function(){this._.focused=true;this.hideChild();this.allowBlur(true)},this);if(CKEDITOR.env.iOS){a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this);a.on("touchend", -function(){this._.hideTimeout=0;this.focus()},this)}CKEDITOR.event.useCapture=false;this._.blurSet=1}h.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&this.onEscape(a)===false)return false},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){k.removeStyle("width");if(j.autoSize){var a=j.element.getDocument(),a=(CKEDITOR.env.webkit?j.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((k.$.offsetWidth||0)-(k.$.clientWidth||0)+ -3));k.setStyle("width",a+10+"px");a=j.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((k.$.offsetHeight||0)-(k.$.clientHeight||0)+3));k.setStyle("height",a+"px");h._.currentBlock.element.setStyle("display","none").removeStyle("display")}else k.removeStyle("height");n&&(l=l-k.$.offsetWidth);k.setStyle("left",l+"px");var b=h.element.getWindow(),a=k.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,d=a.height||a.bottom-a.top,e=n?a.right:b.width-a.left, -g=n?b.width-a.right:a.left;n?e<c&&(l=g>c?l+c:b.width>c?l-a.left:l-a.right+b.width):e<c&&(l=g>c?l-c:b.width>c?l-a.right+b.width:l-a.left);c=a.top;b.height-a.top<d&&(o=c>d?o-d:b.height>d?o-a.bottom+b.height:o-a.top);if(CKEDITOR.env.ie){b=a=new CKEDITOR.dom.element(k.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(l=CKEDITOR.env.ie8Compat?l-k.getDocument().getDocumentElement().$.scrollLeft*2:l-(a.$.scrollWidth-a.$.clientWidth))}var a=k.getFirst(), -i;(i=a.getCustomData("activePanel"))&&i.onHide&&i.onHide.call(this,1);a.setCustomData("activePanel",this);k.setStyles({top:o+"px",left:l+"px"});k.setOpacity(1);f&&f()},this);h.isLoaded?a():h.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();j.element.focus();if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=a;this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200: -0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||this.onHide.call(this)!==true)){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur(); -this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus){CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus();a.focus()}delete this._.lastFocused;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var e=this._.panel;if(a!=void 0)e.allowBlur=a;return e.allowBlur},showAsChild:function(a,e,c,d,i,f){if(!(this._.activeChild==a&&a._.panel._.offsetParentId==c.getId())){this.hideChild();a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused|| -this.hide()},0,this)},this);this._.activeChild=a;this._.focused=false;a.showBlock(e,c,d,i,f);this.blur();(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100)}},hideChild:function(a){var e=this._.activeChild;if(e){delete e.onHide;delete this._.activeChild;e.hide();a&&this.focus()}}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),g;for(g in e){var c=e[g];a?c.destroy():c.element.hide()}a&& -(e={})})}(),CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(a){for(var e=a.config.menu_groups.split(","),b=a._.menuGroups={},g=a._.menuItems={},c=0;c<e.length;c++)b[e[c]]=c+1;a.addMenuGroup=function(a,c){b[a]=c||100};a.addMenuItem=function(a,c){b[c.group]&&(g[a]=new CKEDITOR.menuItem(this,a,c))};a.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};a.getMenuItem=function(a){return g[a]};a.removeMenuItem=function(a){delete g[a]}}}),function(){function a(a){a.sort(function(a, -b){return a.group<b.group?-1:a.group>b.group?1:a.order<b.order?-1:a.order>b.order?1:0})}var e='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="{role}" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(e=e+' onkeypress="return false;"');CKEDITOR.env.gecko&&(e=e+' onblur="this.style.cssText = this.style.cssText;"'); -var e=e+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),b=CKEDITOR.addTemplate("menuItem",e+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'), -g=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var e=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),f=e.block.attributes=e.attributes||{};!f.role&&(f.role="menu");this._.panelDefinition=e},_:{onShow:function(){var a= -this.editor.getSelection(),b=a&&a.getStartElement(),e=this.editor.elementPath(),f=this._.listeners;this.removeAll();for(var g=0;g<f.length;g++){var j=f[g](b,a,e);if(j)for(var k in j){var m=this.editor.getMenuItem(k);if(m&&(!m.command||this.editor.getCommand(m.command).state)){m.state=j[k];this.add(m)}}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):a==27&&this.hide(1);return false}, -onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,e=this.items[a];if(e=e.getItems&&e.getItems()){if(b)b.removeAll();else{b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},true));b.parent=this;b._.onClick=CKEDITOR.tools.bind(this._.onClick,this)}for(var f in e){var g=this.editor.getMenuItem(f);if(g){g.state=e[f];b.add(g)}}var j=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+ -(""+a));setTimeout(function(){b.show(j,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){if(!a.order)a.order=this.items.length;this.items.push(a)},removeAll:function(){this.items=[]},show:function(b,d,e,f){if(!this.parent){this._.onShow();if(!this.items.length)return}var d=d||(this.editor.lang.dir=="rtl"?2:1),g=this.items,j=this.editor,k=this._.panel,m=this._.element;if(!k){k=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level); -k.onEscape=CKEDITOR.tools.bind(function(a){if(this._.onEscape(a)===false)return false},this);k.onShow=function(){k._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")};k.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);m=k.addBlock(this.id,this._.panelDefinition.block);m.autoSize=true;var q=m.keys;q[40]="next";q[9]="next";q[38]="prev";q[CKEDITOR.SHIFT+9]="prev";q[j.lang.dir=="rtl"?37:39]=CKEDITOR.env.ie?"mouseup":"click";q[32]=CKEDITOR.env.ie?"mouseup": -"click";CKEDITOR.env.ie&&(q[13]="mouseup");m=this._.element=m.element;q=m.getDocument();q.getBody().setStyle("overflow","hidden");q.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,j.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this); -this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}a(g);for(var q=j.elementPath(),q=['<div class="cke_menu'+(q&&q.direction()!=j.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],s=g.length,n=s&&g[0].group,l=0;l<s;l++){var o=g[l];if(n!=o.group){q.push('<div class="cke_menuseparator" role="separator"></div>');n=o.group}o.render(this,l,q)}q.push("</div>"); -m.setHtml(q.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(k,this.id,b,d,e,f):k.showBlock(this.id,b,d,e,f);j.fire("menuShow",[k])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,e){CKEDITOR.tools.extend(this,e,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name= -b},proto:{render:function(a,d,e){var f=a.id+(""+d),h=typeof this.state=="undefined"?CKEDITOR.TRISTATE_OFF:this.state,j="",k=h==CKEDITOR.TRISTATE_ON?"on":h==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(j=' aria-checked="'+(h==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var m=this.getItems,q="&#"+(this.editor.lang.dir=="rtl"?"9668":"9658")+";",s=this.name;if(this.icon&&!/\./.test(this.icon))s=this.icon;a={id:f,name:this.name,iconName:s,label:this.label, -cls:this.className||"",state:k,hasPopup:m?"true":"false",disabled:h==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:d,iconStyle:CKEDITOR.skin.getIconStyle(s,this.editor.lang.dir=="rtl",s==this.icon?null:this.icon,this.iconOffset),arrowHtml:m?g.output({label:q}):"",role:this.role?this.role:"menuitem",ariaChecked:j};b.output(a,e)}}})}(),CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div", -CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){var a=a.data,d=CKEDITOR.env.webkit?b:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!d){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var d=this.editor, -g=(new CKEDITOR.dom.elementPath(a.getTarget(),d.editable())).contains(function(a){return a.hasAttribute("contenteditable")},true);g&&g.getAttribute("contenteditable")=="false"&&d.getSelection().fake(g)}var g=a.getTarget().getDocument(),f=a.getTarget().getDocument().getDocumentElement(),d=!g.equals(CKEDITOR.document),g=g.getWindow().getScrollPosition(),h=d?a.$.clientX:a.$.pageX||g.x+a.$.clientX,j=d?a.$.clientY:a.$.pageY||g.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(f,null,h,j)},CKEDITOR.env.ie? -200:0,this)}},this);if(CKEDITOR.env.webkit){var b,g=function(){b=0};a.on("keydown",function(a){b=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",g);a.on("contextmenu",g)}},open:function(a,e,b,g){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,b,g)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),a.config.browserContextMenuOnCtrl!== -false)});a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}}),function(){var a;function e(d,e){function f(a){a=m.list[a];if(a.equals(d.editable())||a.getAttribute("contenteditable")=="true"){var b=d.createRange();b.selectNodeContents(a);b.select()}else d.getSelection().selectElement(a);d.focus()}function g(){k&&k.setHtml(b);delete m.list}var j=d.ui.spaceId("path"), -k,m=d._.elementsPath,q=m.idBase;e.html=e.html+('<span id="'+j+'_label" class="cke_voice_label">'+d.lang.elementspath.eleLabel+'</span><span id="'+j+'" class="cke_path" role="group" aria-labelledby="'+j+'_label">'+b+"</span>");d.on("uiReady",function(){var a=d.ui.space("path");a&&d.focusManager.add(a,1)});m.onClick=f;var s=CKEDITOR.tools.addFunction(f),n=CKEDITOR.tools.addFunction(function(a,b){var c=m.idBase,e,b=new CKEDITOR.dom.event(b);e=d.lang.dir=="rtl";switch(b.getKeystroke()){case e?39:37:case 9:(e= -CKEDITOR.document.getById(c+(a+1)))||(e=CKEDITOR.document.getById(c+"0"));e.focus();return false;case e?37:39:case CKEDITOR.SHIFT+9:(e=CKEDITOR.document.getById(c+(a-1)))||(e=CKEDITOR.document.getById(c+(m.list.length-1)));e.focus();return false;case 27:d.focus();return false;case 13:case 32:f(a);return false}return true});d.on("selectionChange",function(){d.editable();for(var a=[],f=m.list=[],e=[],g=m.filters,h=true,i=d.elementPath().elements,x,u=i.length;u--;){var t=i[u],y=0;x=t.data("cke-display-name")? -t.data("cke-display-name"):t.data("cke-real-element-type")?t.data("cke-real-element-type"):t.getName();h=t.hasAttribute("contenteditable")?t.getAttribute("contenteditable")=="true":h;!h&&!t.hasAttribute("contenteditable")&&(y=1);for(var z=0;z<g.length;z++){var A=g[z](t,x);if(A===false){y=1;break}x=A||x}if(!y){f.unshift(t);e.unshift(x)}}f=f.length;for(g=0;g<f;g++){x=e[g];h=d.lang.elementspath.eleTitle.replace(/%1/,x);x=c.output({id:q+g,label:h,text:x,jsTitle:"javascript:void('"+x+"')",index:g,keyDownFn:n, -clickFn:s});a.unshift(x)}k||(k=CKEDITOR.document.getById(j));e=k;e.setHtml(a.join("")+b);d.fire("elementsPathUpdate",{space:e})});d.on("readOnly",g);d.on("contentDomUnload",g);d.addCommand("elementsPathFocus",a);d.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}a={editorFocus:false,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}};var b='<span class="cke_path_empty">&nbsp;</span>',g="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&& -(g=g+' onkeypress="return false;"');CKEDITOR.env.gecko&&(g=g+' onblur="this.style.cssText = this.style.cssText;"');var c=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+g+' hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath= -{idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(b){b.data.space=="bottom"&&e(a,b.data)})}})}(),function(){function a(a,c){var d,i;c.on("refresh",function(a){var c=[e],d;for(d in a.data.states)c.push(a.data.states[d]);this.setState(CKEDITOR.tools.search(c,b)?b:e)},c,null,100);c.on("exec",function(b){d=a.getSelection();i=d.createBookmarks(1);if(!b.data)b.data={};b.data.done=false},c,null,0);c.on("exec",function(){a.forceNextSelectionCheck();d.selectBookmarks(i)}, -c,null,100)}var e=CKEDITOR.TRISTATE_DISABLED,b=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(b){var c=CKEDITOR.plugins.indent.genericDefinition;a(b,b.addCommand("indent",new c(true)));a(b,b.addCommand("outdent",new c));if(b.ui.addButton){b.ui.addButton("Indent",{label:b.lang.indent.indent,command:"indent",directional:true,toolbar:"indent,20"});b.ui.addButton("Outdent",{label:b.lang.indent.outdent,command:"outdent",directional:true,toolbar:"indent,10"})}b.on("dirChanged",function(a){var c= -b.createRange(),f=a.data.node;c.setStartBefore(f);c.setEndAfter(f);for(var e=new CKEDITOR.dom.walker(c),j;j=e.next();)if(j.type==CKEDITOR.NODE_ELEMENT)if(!j.equals(f)&&j.getDirection()){c.setStartAfter(j);e=new CKEDITOR.dom.walker(c)}else{var k=b.config.indentClasses;if(k)for(var m=a.data.dir=="ltr"?["_rtl",""]:["","_rtl"],q=0;q<k.length;q++)if(j.hasClass(k[q]+m[0])){j.removeClass(k[q]+m[0]);j.addClass(k[q]+m[1])}k=j.getStyle("margin-right");m=j.getStyle("margin-left");k?j.setStyle("margin-left", -k):j.removeStyle("margin-left");m?j.setStyle("margin-right",m):j.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,b,d){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!d;this.relatedGlobal=d?"indent":"outdent";this.indentKey=d?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a, -b){var c=a.getCommand(b.relatedGlobal),d;for(d in b.jobs){c.on("exec",function(c){if(!c.data.done){a.fire("lockSnapshot");if(b.execJob(a,d))c.data.done=true;a.fire("unlockSnapshot");CKEDITOR.dom.element.clearAllMarkers(b.database)}},this,null,d);c.on("refresh",function(c){if(!c.data.states)c.data.states={};c.data.states[b.name+"@"+d]=b.refreshJob(a,d,c.data.path)},this,null,d)}a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype= -{execJob:function(a,b){var d=this.jobs[b];if(d.state!=e)return d.exec.call(this,a)},refreshJob:function(a,b,d){b=this.jobs[b];b.state=a.activeFilter.checkFeature(this)?b.refresh.call(this,a,d):e;return b.state},getContext:function(a){return a.contains(this.context)}}}(),function(){function a(a){function c(b){for(var i=n.startContainer,j=n.endContainer;i&&!i.getParent().equals(b);)i=i.getParent();for(;j&&!j.getParent().equals(b);)j=j.getParent();if(!i||!j)return false;for(var o=i,i=[],l=false;!l;){o.equals(j)&& -(l=true);i.push(o);o=o.getNext()}if(i.length<1)return false;o=b.getParents(true);for(j=0;j<o.length;j++)if(o[j].getName&&e[o[j].getName()]){b=o[j];break}for(var o=d.isIndent?1:-1,j=i[0],i=i[i.length-1],l=CKEDITOR.plugins.list.listToArray(b,f),s=l[i.getCustomData("listarray_index")].indent,j=j.getCustomData("listarray_index");j<=i.getCustomData("listarray_index");j++){l[j].indent=l[j].indent+o;if(o>0){var t=l[j].parent;l[j].parent=new CKEDITOR.dom.element(t.getName(),t.getDocument())}}for(j=i.getCustomData("listarray_index")+ -1;j<l.length&&l[j].indent>s;j++)l[j].indent=l[j].indent+o;i=CKEDITOR.plugins.list.arrayToList(l,f,null,a.config.enterMode,b.getDirection());if(!d.isIndent){var y;if((y=b.getParent())&&y.is("li"))for(var o=i.listNode.getChildren(),z=[],A,j=o.count()-1;j>=0;j--)(A=o.getItem(j))&&(A.is&&A.is("li"))&&z.push(A)}i&&i.listNode.replace(b);if(z&&z.length)for(j=0;j<z.length;j++){for(A=b=z[j];(A=A.getNext())&&A.is&&A.getName()in e;){CKEDITOR.env.needsNbspFiller&&!b.getFirst(g)&&b.append(n.document.createText(" ")); -b.append(A)}b.insertAfter(y)}i&&a.fire("contentDomInvalidated");return true}for(var d=this,f=this.database,e=this.context,i=a.getSelection(),i=(i&&i.getRanges()).createIterator(),n;n=i.getNextRange();){for(var l=n.getCommonAncestor();l&&!(l.type==CKEDITOR.NODE_ELEMENT&&e[l.getName()]);)l=l.getParent();l||(l=n.startPath().contains(e))&&n.setEndAt(l,CKEDITOR.POSITION_BEFORE_END);if(!l){var o=n.getEnclosedNode();if(o&&o.type==CKEDITOR.NODE_ELEMENT&&o.getName()in e){n.setStartAt(o,CKEDITOR.POSITION_AFTER_START); -n.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);l=o}}if(l&&n.startContainer.type==CKEDITOR.NODE_ELEMENT&&n.startContainer.getName()in e){o=new CKEDITOR.dom.walker(n);o.evaluator=b;n.startContainer=o.next()}if(l&&n.endContainer.type==CKEDITOR.NODE_ELEMENT&&n.endContainer.getName()in e){o=new CKEDITOR.dom.walker(n);o.evaluator=b;n.endContainer=o.previous()}if(l)return c(l)}return 0}function e(a,c){c||(c=a.contains(this.context));return c&&a.block&&a.block.equals(c.getFirst(b))}function b(a){return a.type== -CKEDITOR.NODE_ELEMENT&&a.is("li")}function g(a){return c(a)&&d(a)}var c=CKEDITOR.dom.walker.whitespaces(true),d=CKEDITOR.dom.walker.bookmark(false,true),i=CKEDITOR.TRISTATE_DISABLED,f=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(b){function c(b,g){d.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];b.on("key",function(a){if(b.mode=="wysiwyg"&&a.data.keyCode==this.indentKey){var c=this.getContext(b.elementPath());if(c&&(!this.isIndent|| -!e.call(this,b.elementPath(),c))){b.execCommand(this.relatedGlobal);a.cancel()}}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=e.call(this,b,c);return!c||!this.isIndent||d?i:f}:function(a,b){return!this.getContext(b)||this.isIndent?i:f},exec:CKEDITOR.tools.bind(a,this)}}var d=CKEDITOR.plugins.indent;d.registerCommands(b,{indentlist:new c(b,"indentlist",true),outdentlist:new c(b,"outdentlist")});CKEDITOR.tools.extend(c.prototype,d.specificDefinition.prototype, -{context:{ol:1,ul:1}})}})}(),function(){function a(a,b,c){function d(c){if((j=i[c?"getFirst":"getLast"]())&&(!j.is||!j.isBlockBoundary())&&(k=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(true)))&&(!k.is||!k.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](j)}for(var f=CKEDITOR.plugins.list.listToArray(b.root,c),e=[],g=0;g<b.contents.length;g++){var h=b.contents[g];if((h=h.getAscendant("li",true))&&!h.getCustomData("list_item_processed")){e.push(h); -CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",true)}}h=null;for(g=0;g<e.length;g++){h=e[g].getCustomData("listarray_index");f[h].indent=-1}for(g=h+1;g<f.length;g++)if(f[g].indent>f[g-1].indent+1){e=f[g-1].indent+1-f[g].indent;for(h=f[g].indent;f[g]&&f[g].indent>=h;){f[g].indent=f[g].indent+e;g++}g--}var i=CKEDITOR.plugins.list.arrayToList(f,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,j,k;d(true);d();i.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name= -a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function b(a,b,c,d){for(var f,e;f=a[d?"getLast":"getFirst"](s);){(e=f.getDirection(1))!==b.getDirection(1)&&f.setAttribute("dir",e);f.remove();c?f[d?"insertBefore":"insertAfter"](c):b.append(f,d)}}function g(a){var c;(c=function(c){var d=a[c?"getPrevious":"getNext"](k);if(d&&d.type==CKEDITOR.NODE_ELEMENT&&d.is(a.getName())){b(a,d,null,!c);a.remove();a=d}})();c(1)}function c(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in -CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function d(a,c,d){a.fire("saveSnapshot");d.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var f=d.extractContents();c.trim(false,true);var e=c.createBookmark(),h=new CKEDITOR.dom.elementPath(c.startContainer),j=h.block,h=h.lastElement.getAscendant("li",1)||j,s=new CKEDITOR.dom.elementPath(d.startContainer),u=s.contains(CKEDITOR.dtd.$listItem),s=s.contains(CKEDITOR.dtd.$list);if(j)(j=j.getBogus())&&j.remove(); -else if(s)(j=s.getPrevious(k))&&m(j)&&j.remove();(j=f.getLast())&&(j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))&&j.remove();(j=c.startContainer.getChild(c.startOffset))?f.insertBefore(j):c.startContainer.append(f);if(u)if(f=i(u))if(h.contains(u)){b(f,u.getParent(),u);f.remove()}else h.append(f);for(;d.checkStartOfBlock()&&d.checkEndOfBlock();){s=d.startPath();f=s.block;if(!f)break;if(f.is("li")){h=f.getParent();f.equals(h.getLast(k))&&f.equals(h.getFirst(k))&&(f=h)}d.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START); -f.remove()}d=d.clone();f=a.editable();d.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=function(a){return k(a)&&!m(a)};(d=d.next())&&(d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in CKEDITOR.dtd.$list)&&g(d);c.moveToBookmark(e);c.select();a.fire("saveSnapshot")}function i(a){return(a=a.getLast(k))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in f?a:null}var f={ol:1,ul:1},h=CKEDITOR.dom.walker.whitespaces(),j=CKEDITOR.dom.walker.bookmark(),k=function(a){return!(h(a)|| -j(a))},m=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(a,b,c,d,e){if(!f[a.getName()])return[];d||(d=0);c||(c=[]);for(var g=0,h=a.getChildCount();g<h;g++){var i=a.getChild(g);i.type==CKEDITOR.NODE_ELEMENT&&i.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(i,b,c,d+1);if(i.$.nodeName.toLowerCase()=="li"){var j={parent:a,indent:d,element:i,contents:[]};if(e)j.grandparent=e;else{j.grandparent=a.getParent();if(j.grandparent&&j.grandparent.$.nodeName.toLowerCase()== -"li")j.grandparent=j.grandparent.getParent()}b&&CKEDITOR.dom.element.setMarker(b,i,"listarray_index",c.length);c.push(j);for(var k=0,m=i.getChildCount(),s;k<m;k++){s=i.getChild(k);s.type==CKEDITOR.NODE_ELEMENT&&f[s.getName()]?CKEDITOR.plugins.list.listToArray(s,b,c,d+1,j.grandparent):j.contents.push(s)}}}return c},arrayToList:function(a,b,c,d,e){c||(c=0);if(!a||a.length<c+1)return null;for(var g,h=a[c].parent.getDocument(),i=new CKEDITOR.dom.documentFragment(h),m=null,s=c,q=Math.max(a[c].indent,0), -z=null,A,B,G=d==CKEDITOR.ENTER_P?"p":"div";;){var C=a[s];g=C.grandparent;A=C.element.getDirection(1);if(C.indent==q){if(!m||a[s].parent.getName()!=m.getName()){m=a[s].parent.clone(false,1);e&&m.setAttribute("dir",e);i.append(m)}z=m.append(C.element.clone(0,1));A!=m.getDirection(1)&&z.setAttribute("dir",A);for(g=0;g<C.contents.length;g++)z.append(C.contents[g].clone(1,1));s++}else if(C.indent==Math.max(q,0)+1){C=a[s-1].element.getDirection(1);s=CKEDITOR.plugins.list.arrayToList(a,null,s,d,C!=A?A:null); -!z.getChildCount()&&(CKEDITOR.env.needsNbspFiller&&!(h.$.documentMode>7))&&z.append(h.createText(" "));z.append(s.listNode);s=s.nextIndex}else if(C.indent==-1&&!c&&g){if(f[g.getName()]){z=C.element.clone(false,true);A!=g.getDirection(1)&&z.setAttribute("dir",A)}else z=new CKEDITOR.dom.documentFragment(h);var m=g.getDirection(1)!=A,J=C.element,F=J.getAttribute("class"),E=J.getAttribute("style"),D=z.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(d!=CKEDITOR.ENTER_BR||m||E||F),I,L=C.contents.length,H;for(g= -0;g<L;g++){I=C.contents[g];if(j(I)&&L>1)D?H=I.clone(1,1):z.append(I.clone(1,1));else if(I.type==CKEDITOR.NODE_ELEMENT&&I.isBlockBoundary()){m&&!I.getDirection()&&I.setAttribute("dir",A);B=I;var Q=J.getAttribute("style");Q&&B.setAttribute("style",Q.replace(/([^;])$/,"$1;")+(B.getAttribute("style")||""));F&&I.addClass(F);B=null;if(H){z.append(H);H=null}z.append(I.clone(1,1))}else if(D){if(!B){B=h.createElement(G);z.append(B);m&&B.setAttribute("dir",A)}E&&B.setAttribute("style",E);F&&B.setAttribute("class", -F);if(H){B.append(H);H=null}B.append(I.clone(1,1))}else z.append(I.clone(1,1))}if(H){(B||z).append(H);H=null}if(z.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&s!=a.length-1){if(CKEDITOR.env.needsBrFiller)(A=z.getLast())&&(A.type==CKEDITOR.NODE_ELEMENT&&A.is("br"))&&A.remove();A=z.getLast(k);(!A||!(A.type==CKEDITOR.NODE_ELEMENT&&A.is(CKEDITOR.dtd.$block)))&&z.append(h.createElement("br"))}A=z.$.nodeName.toLowerCase();(A=="div"||A=="p")&&z.appendBogus();i.append(z);m=null;s++}else return null;B=null;if(a.length<= -s||Math.max(a[s].indent,0)<q)break}if(b)for(a=i.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT){CKEDITOR.dom.element.clearMarkers(b,a);if(a.getName()in CKEDITOR.dtd.$listItem){c=a;h=e=d=void 0;if(d=c.getDirection()){for(e=c.getParent();e&&!(h=e.getDirection());)e=e.getParent();d==h&&c.removeAttribute("dir")}}}a=a.getNextSourceNode()}return{listNode:i,nextIndex:s}}};var q=/^h[1-6]$/,s=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(b){this.refresh(b,b.elementPath()); -var c=b.config,d=b.getSelection(),e=d&&d.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var h=b.editable();if(h.getFirst(k)){var i=e.length==1&&e[0];(c=i&&i.getEnclosedNode())&&(c.is&&this.type==c.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else{c.enterMode==CKEDITOR.ENTER_BR?h.appendBogus():e[0].fixBlock(1,c.enterMode==CKEDITOR.ENTER_P?"p":"div");d.selectRanges(e)}}for(var c=d.createBookmarks(true),h=[],j={},e=e.createIterator(),m=0;(i=e.getNextRange())&&++m;){var s=i.getBoundaryNodes(),t= -s.startNode,y=s.endNode;t.type==CKEDITOR.NODE_ELEMENT&&t.getName()=="td"&&i.setStartAt(s.startNode,CKEDITOR.POSITION_AFTER_START);y.type==CKEDITOR.NODE_ELEMENT&&y.getName()=="td"&&i.setEndAt(s.endNode,CKEDITOR.POSITION_BEFORE_END);i=i.createIterator();for(i.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;s=i.getNextParagraph();)if(!s.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(j,s,"list_block",1);for(var z=b.elementPath(s),t=z.elements,y=0,z=z.blockLimit,A,B=t.length-1;B>=0&&(A=t[B]);B--)if(f[A.getName()]&& -z.contains(A)){z.removeCustomData("list_group_object_"+m);if(t=A.getCustomData("list_group_object"))t.contents.push(s);else{t={root:A,contents:[s]};h.push(t);CKEDITOR.dom.element.setMarker(j,A,"list_group_object",t)}y=1;break}if(!y){y=z;if(y.getCustomData("list_group_object_"+m))y.getCustomData("list_group_object_"+m).contents.push(s);else{t={root:y,contents:[s]};CKEDITOR.dom.element.setMarker(j,y,"list_group_object_"+m,t);h.push(t)}}}}for(A=[];h.length>0;){t=h.shift();if(this.state==CKEDITOR.TRISTATE_OFF)if(f[t.root.getName()]){e= -b;m=t;t=j;i=A;y=CKEDITOR.plugins.list.listToArray(m.root,t);z=[];for(s=0;s<m.contents.length;s++){B=m.contents[s];if((B=B.getAscendant("li",true))&&!B.getCustomData("list_item_processed")){z.push(B);CKEDITOR.dom.element.setMarker(t,B,"list_item_processed",true)}}for(var B=m.root.getDocument(),G=void 0,C=void 0,s=0;s<z.length;s++){var J=z[s].getCustomData("listarray_index"),G=y[J].parent;if(!G.is(this.type)){C=B.createElement(this.type);G.copyAttributes(C,{start:1,type:1});C.removeStyle("list-style-type"); -y[J].parent=C}}t=CKEDITOR.plugins.list.arrayToList(y,t,null,e.config.enterMode);y=void 0;z=t.listNode.getChildCount();for(s=0;s<z&&(y=t.listNode.getChild(s));s++)y.getName()==this.type&&i.push(y);t.listNode.replace(m.root);e.fire("contentDomInvalidated")}else{y=b;s=t;i=A;z=s.contents;e=s.root.getDocument();m=[];if(z.length==1&&z[0].equals(s.root)){t=e.createElement("div");z[0].moveChildren&&z[0].moveChildren(t);z[0].append(t);z[0]=t}s=s.contents[0].getParent();for(B=0;B<z.length;B++)s=s.getCommonAncestor(z[B].getParent()); -G=y.config.useComputedState;y=t=void 0;G=G===void 0||G;for(B=0;B<z.length;B++)for(C=z[B];J=C.getParent();){if(J.equals(s)){m.push(C);!y&&C.getDirection()&&(y=1);C=C.getDirection(G);t!==null&&(t=t&&t!=C?null:C);break}C=J}if(!(m.length<1)){z=m[m.length-1].getNext();B=e.createElement(this.type);i.push(B);for(G=i=void 0;m.length;){i=m.shift();G=e.createElement("li");if(i.is("pre")||q.test(i.getName())||i.getAttribute("contenteditable")=="false")i.appendTo(G);else{i.copyAttributes(G);if(t&&i.getDirection()){G.removeStyle("direction"); -G.removeAttribute("dir")}i.moveChildren(G);i.remove()}G.appendTo(B)}t&&y&&B.setAttribute("dir",t);z?B.insertBefore(z):B.appendTo(s)}}else this.state==CKEDITOR.TRISTATE_ON&&f[t.root.getName()]&&a.call(this,b,t,j)}for(B=0;B<A.length;B++)g(A[B]);CKEDITOR.dom.element.clearAllMarkers(j);d.selectBookmarks(c);b.focus()},refresh:function(a,b){var c=b.contains(f,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}}; -CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){if(!a.blockless){a.addCommand("numberedlist",new e("numberedlist","ol"));a.addCommand("bulletedlist",new e("bulletedlist","ul"));if(a.ui.addButton){a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:true,toolbar:"list,10"});a.ui.addButton("BulletedList",{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:true,toolbar:"list,20"})}a.on("key",function(b){var e=b.data.domEvent.getKey(); -if(a.mode=="wysiwyg"&&e in{8:1,46:1}){var g=a.getSelection().getRanges()[0],h=g&&g.startPath();if(g&&g.collapsed){var j=e==8,s=a.editable(),q=new CKEDITOR.dom.walker(g.clone());q.evaluator=function(a){return k(a)&&!m(a)};q.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=g.clone();if(j){var u,t;if((u=h.contains(f))&&g.checkBoundaryOfElement(u,CKEDITOR.START)&&(u=u.getParent())&&u.is("li")&&(u=i(u))){t=u;u=u.getPrevious(k);e.moveToPosition(u&&m(u)?u:t,CKEDITOR.POSITION_BEFORE_START)}else{q.range.setStartAt(s, -CKEDITOR.POSITION_AFTER_START);q.range.setEnd(g.startContainer,g.startOffset);if((u=q.previous())&&u.type==CKEDITOR.NODE_ELEMENT&&(u.getName()in f||u.is("li"))){if(!u.is("li")){q.range.selectNodeContents(u);q.reset();q.evaluator=c;u=q.previous()}t=u;e.moveToElementEditEnd(t)}}if(t){d(a,e,g);b.cancel()}else if((e=h.contains(f))&&g.checkBoundaryOfElement(e,CKEDITOR.START)){t=e.getFirst(k);if(g.checkBoundaryOfElement(t,CKEDITOR.START)){u=e.getPrevious(k);if(i(t)){if(u){g.moveToElementEditEnd(u);g.select()}}else a.execCommand("outdent"); -b.cancel()}}}else if(t=h.contains("li")){q.range.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);s=(h=t.getLast(k))&&c(h)?h:t;t=0;if((u=q.next())&&u.type==CKEDITOR.NODE_ELEMENT&&u.getName()in f&&u.equals(h)){t=1;u=q.next()}else g.checkBoundaryOfElement(s,CKEDITOR.END)&&(t=1);if(t&&u){g=g.clone();g.moveToElementEditStart(u);d(a,e,g);b.cancel()}}else{q.range.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);if((u=q.next())&&u.type==CKEDITOR.NODE_ELEMENT&&u.is(f)){u=u.getFirst(k);if(h.block&&g.checkStartOfBlock()&& -g.checkEndOfBlock()){h.block.remove();g.moveToElementEditStart(u);g.select()}else if(i(u)){g.moveToElementEditStart(u);g.select()}else{g=g.clone();g.moveToElementEditStart(u);d(a,e,g)}b.cancel()}}setTimeout(function(){a.selectionChange(1)})}}})}}})}(),function(){function a(a){var b=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="true"},true);if(a.root.equals(b))return a;b=new CKEDITOR.dom.range(b);b.moveToRange(a);return b}function e(a, -b,c){c=a.config.forceEnterMode||c;if(a.mode=="wysiwyg"){if(!b)b=a.activeEnterMode;if(!a.elementPath().isContextFor("p")){b=CKEDITOR.ENTER_BR;c=1}a.fire("saveSnapshot");b==CKEDITOR.ENTER_BR?i(a,b,null,c):f(a,b,null,c);a.fire("saveSnapshot")}}function b(a){for(var a=a.getSelection().getRanges(true),b=a.length-1;b>0;b--)a[b].deleteContents();return a[0]}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:false,exec:function(a){e(a)}});a.addCommand("shiftEnter", -{modes:{wysiwyg:1},editorFocus:false,exec:function(a){e(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var g=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(d,f,e,q){if(e=e||b(d)){var e=a(e),s=e.document,n=e.checkStartOfBlock(),l=e.checkEndOfBlock(),o=d.elementPath(e.startContainer),r=o.block,p=f==CKEDITOR.ENTER_DIV?"div":"p",w;if(n&&l){if(r&&(r.is("li")||r.getParent().is("li"))){r.is("li")|| -(r=r.getParent());e=r.getParent();w=e.getParent();var q=!r.hasPrevious(),v=!r.hasNext(),p=d.getSelection(),x=p.createBookmarks(),n=r.getDirection(1),l=r.getAttribute("class"),u=r.getAttribute("style"),t=w.getDirection(1)!=n,d=d.enterMode!=CKEDITOR.ENTER_BR||t||u||l;if(w.is("li"))if(q||v)r[q?"insertBefore":"insertAfter"](w);else r.breakParent(w);else{if(d){if(o.block.is("li")){w=s.createElement(f==CKEDITOR.ENTER_P?"p":"div");t&&w.setAttribute("dir",n);u&&w.setAttribute("style",u);l&&w.setAttribute("class", -l);r.moveChildren(w)}else w=o.block;if(q||v)w[q?"insertBefore":"insertAfter"](e);else{r.breakParent(e);w.insertAfter(e)}}else{r.appendBogus(true);if(q||v)for(;s=r[q?"getFirst":"getLast"]();)s[q?"insertBefore":"insertAfter"](e);else for(r.breakParent(e);s=r.getLast();)s.insertAfter(e)}r.remove()}p.selectBookmarks(x);return}if(r&&r.getParent().is("blockquote")){r.breakParent(r.getParent());r.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||r.getPrevious().remove();r.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))|| -r.getNext().remove();e.moveToElementEditStart(r);e.select();return}}else if(r&&r.is("pre")&&!l){i(d,f,e,q);return}if(n=e.splitBlock(p)){f=n.previousBlock;r=n.nextBlock;o=n.wasStartOfBlock;d=n.wasEndOfBlock;if(r){x=r.getParent();if(x.is("li")){r.breakParent(x);r.move(r.getNext(),1)}}else if(f&&(x=f.getParent())&&x.is("li")){f.breakParent(x);x=f.getNext();e.moveToElementEditStart(x);f.move(f.getPrevious())}if(!o&&!d){if(r.is("li")){w=e.clone();w.selectNodeContents(r);w=new CKEDITOR.dom.walker(w);w.evaluator= -function(a){return!(c(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))};(x=w.next())&&(x.type==CKEDITOR.NODE_ELEMENT&&x.is("ul","ol"))&&(CKEDITOR.env.needsBrFiller?s.createElement("br"):s.createText(" ")).insertBefore(x)}r&&e.moveToElementEditStart(r)}else{if(f){if(f.is("li")||!h.test(f.getName())&&!f.is("pre"))w=f.clone()}else r&&(w=r.clone());if(w)q&&!w.is("li")&&w.renameNode(p);else if(x&&x.is("li"))w=x;else{w=s.createElement(p); -f&&(v=f.getDirection())&&w.setAttribute("dir",v)}if(s=n.elementPath){q=0;for(p=s.elements.length;q<p;q++){x=s.elements[q];if(x.equals(s.block)||x.equals(s.blockLimit))break;if(CKEDITOR.dtd.$removeEmpty[x.getName()]){x=x.clone();w.moveChildren(x);w.append(x)}}}w.appendBogus();w.getParent()||e.insertNode(w);w.is("li")&&w.removeAttribute("value");if(CKEDITOR.env.ie&&o&&(!d||!f.getChildCount())){e.moveToElementEditStart(d?f:w);e.select()}e.moveToElementEditStart(o&&!d?r:w)}e.select();e.scrollIntoView()}}}, -enterBr:function(a,c,d,e){if(d=d||b(a)){var g=d.document,i=d.checkEndOfBlock(),l=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),o=l.block,r=o&&l.block.getName();if(!e&&r=="li")f(a,c,d,e);else{if(!e&&i&&h.test(r))if(i=o.getDirection()){g=g.createElement("div");g.setAttribute("dir",i);g.insertAfter(o);d.setStart(g,0)}else{g.createElement("br").insertAfter(o);CKEDITOR.env.gecko&&g.createText("").insertAfter(o);d.setStartAt(o.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START: -CKEDITOR.POSITION_AFTER_START)}else{a=r=="pre"&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?g.createText("\r"):g.createElement("br");d.deleteContents();d.insertNode(a);if(CKEDITOR.env.needsBrFiller){g.createText("").insertAfter(a);i&&(o||l.blockLimit).appendBogus();a.getNext().$.nodeValue="";d.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)}else d.setStartAt(a,CKEDITOR.POSITION_AFTER_END)}d.collapse(true);d.select();d.scrollIntoView()}}}};var d=CKEDITOR.plugins.enterkey,i=d.enterBr,f=d.enterBlock, -h=/^h[1-6]$/}(),function(){function a(a,b){var g={},c=[],d={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,f){var e=b?"&"+f+";":d[f];g[e]=b?d[f]:"&"+f+";";c.push(e);return""});if(!b&&a){var a=a.split(","),i=document.createElement("div"),f;i.innerHTML="&"+a.join(";&")+";";f=i.innerHTML;i=null;for(i=0;i<f.length;i++){var h=f.charAt(i);g[h]="&"+a[i]+";";c.push(h)}}g.regex=c.join(b?"|":"");return g}CKEDITOR.plugins.add("entities", -{afterInit:function(e){var b=e.config;if(e=(e=e.dataProcessor)&&e.htmlFilter){var g=[];b.basicEntities!==false&&g.push("nbsp,gt,lt,amp");if(b.entities){g.length&&g.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"); -b.entities_latin&&g.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml");b.entities_greek&&g.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"); -b.entities_additional&&g.push(b.entities_additional)}var c=a(g.join(",")),d=c.regex?"["+c.regex+"]":"a^";delete c.regex;b.entities&&b.entities_processNumerical&&(d="[^ -~]|"+d);var d=RegExp(d,"g"),i=function(a){return b.entities_processNumerical=="force"||!c[a]?"&#"+a.charCodeAt(0)+";":c[a]},f=a("nbsp,gt,lt,amp,shy",true),h=RegExp(f.regex,"g"),j=function(a){return f[a]};e.addRules({text:function(a){return a.replace(h,j).replace(d,i)}},{applyToAll:true,excludeNestedEditable:true})}}})}(),CKEDITOR.config.basicEntities= -!0,CKEDITOR.config.entities=!0,CKEDITOR.config.entities_latin=!0,CKEDITOR.config.entities_greek=!0,CKEDITOR.config.entities_additional="#39",CKEDITOR.plugins.add("popup"),CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(a,e,b,g){e=e||"80%";b=b||"70%";typeof e=="string"&&(e.length>1&&e.substr(e.length-1,1)=="%")&&(e=parseInt(window.screen.width*parseInt(e,10)/100,10));typeof b=="string"&&(b.length>1&&b.substr(b.length-1,1)=="%")&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10)); -e<640&&(e=640);b<420&&(b=420);var c=parseInt((window.screen.height-b)/2,10),d=parseInt((window.screen.width-e)/2,10),g=(g||"location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")+",width="+e+",height="+b+",top="+c+",left="+d,i=window.open("",null,g,true);if(!i)return false;try{if(navigator.userAgent.toLowerCase().indexOf(" chrome/")==-1){i.moveTo(d,c);i.resizeTo(e,b)}i.focus();i.location.href=a}catch(f){window.open(a,null,g,true)}return true}}), -function(){function a(a,b){var c=[];if(b)for(var d in b)c.push(d+"="+encodeURIComponent(b[d]));else return a;return a+(a.indexOf("?")!=-1?"&":"?")+c.join("&")}function e(a){a=a+"";return a.charAt(0).toUpperCase()+a.substr(1)}function b(){var b=this.getDialog(),c=b.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+e(b.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",b=c.config["filebrowser"+e(b.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%", -f=this.filebrowser.params||{};f.CKEditor=c.name;f.CKEditorFuncNum=c._.filebrowserFn;if(!f.langCode)f.langCode=c.langCode;f=a(this.filebrowser.url,f);c.popup(f,d,b,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function g(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return!a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value||!a.getContentElement(this["for"][0],this["for"][1]).getAction()?false:true}function c(b,c,d){var f=d.params|| -{};f.CKEditor=b.name;f.CKEditorFuncNum=b._.filebrowserFn;if(!f.langCode)f.langCode=b.langCode;c.action=a(d.url,f);c.filebrowser=d}function d(a,f,i,m){if(m&&m.length)for(var q,s=m.length;s--;){q=m[s];(q.type=="hbox"||q.type=="vbox"||q.type=="fieldset")&&d(a,f,i,q.children);if(q.filebrowser){if(typeof q.filebrowser=="string")q.filebrowser={action:q.type=="fileButton"?"QuickUpload":"Browse",target:q.filebrowser};if(q.filebrowser.action=="Browse"){var n=q.filebrowser.url;if(n===void 0){n=a.config["filebrowser"+ -e(f)+"BrowseUrl"];if(n===void 0)n=a.config.filebrowserBrowseUrl}if(n){q.onClick=b;q.filebrowser.url=n;q.hidden=false}}else if(q.filebrowser.action=="QuickUpload"&&q["for"]){n=q.filebrowser.url;if(n===void 0){n=a.config["filebrowser"+e(f)+"UploadUrl"];if(n===void 0)n=a.config.filebrowserUploadUrl}if(n){var l=q.onClick;q.onClick=function(a){var b=a.sender;return l&&l.call(b,a)===false?false:g.call(b,a)};q.filebrowser.url=n;q.hidden=false;c(a,i.getContents(q["for"][0]).get(q["for"][1]),q.filebrowser)}}}}} -function i(a,b,c){if(c.indexOf(";")!==-1){for(var c=c.split(";"),d=0;d<c.length;d++)if(i(a,b,c[d]))return true;return false}return(a=a.getContents(b).get(c).filebrowser)&&a.url}function f(a,b){var c=this._.filebrowserSe.getDialog(),d=this._.filebrowserSe["for"],f=this._.filebrowserSe.filebrowser.onSelect;d&&c.getContentElement(d[0],d[1]).reset();if(!(typeof b=="function"&&b.call(this._.filebrowserSe)===false)&&!(f&&f.call(this._.filebrowserSe,a,b)===false)){typeof b=="string"&&b&&alert(b);if(a){d= -this._.filebrowserSe;c=d.getDialog();if(d=d.filebrowser.target||null){d=d.split(":");if(f=c.getContentElement(d[0],d[1])){f.setValue(a);c.selectPage(d[0])}}}}}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(f,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,c,f=0;f<b.contents.length;++f)if(c=b.contents[f]){d(a.editor, -a.data.name,b,c.elements);if(c.hidden&&c.filebrowser)c.hidden=!i(b,c.id,c.filebrowser)}})}(),function(){function a(a){var c=a.config,d=a.fire("uiSpace",{space:"top",html:""}).html,i=function(){function d(a,c,f){h.setStyle(c,b(f));h.setStyle("position",a)}function f(a){var b=k.getDocumentPosition();switch(a){case "top":d("absolute","top",b.y-p-x);break;case "pin":d("fixed","top",t);break;case "bottom":d("absolute","top",b.y+(o.height||o.bottom-o.top)+x)}j=a}var j,k,l,o,r,p,w,v=c.floatSpaceDockedOffsetX|| -0,x=c.floatSpaceDockedOffsetY||0,u=c.floatSpacePinnedOffsetX||0,t=c.floatSpacePinnedOffsetY||0;return function(c){if(k=a.editable()){c&&c.name=="focus"&&h.show();h.removeStyle("left");h.removeStyle("right");l=h.getClientRect();o=k.getClientRect();r=e.getViewPaneSize();p=l.height;w="pageXOffset"in e.$?e.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;if(j){p+x<=o.top?f("top"):p+x>r.height-o.bottom?f("pin"):f("bottom");var c=r.width/2,c=o.left>0&&o.right<r.width&&o.width>l.width?a.config.contentsLangDirection== -"rtl"?"right":"left":c-o.left>o.right-c?"left":"right",d;if(l.width>r.width){c="left";d=0}else{d=c=="left"?o.left>0?o.left:0:o.right<r.width?r.width-o.right:0;if(d+l.width>r.width){c=c=="left"?"right":"left";d=0}}h.setStyle(c,b((j=="pin"?u:v)+d+(j=="pin"?0:c=="left"?w:-w)))}else{j="pin";f("pin");i(c)}}}}();if(d){var f=new CKEDITOR.template('<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko? -" ":"")+'" lang="{langCode}" role="application" style="{style}"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':" ")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':" ")+'<div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'),h=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(f.output({content:d,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+ -(c.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),j=CKEDITOR.tools.eventsBuffer(500,i),k=CKEDITOR.tools.eventsBuffer(100,i);h.unselectable();h.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){i(b);a.on("change",j.input);e.on("scroll",k.input);e.on("resize",k.input)});a.on("blur",function(){h.hide();a.removeListener("change",j.input);e.removeListener("scroll",k.input);e.removeListener("resize",k.input)});a.on("destroy", -function(){e.removeListener("scroll",k.input);e.removeListener("resize",k.input);h.clearCustomData();h.remove()});a.focusManager.hasFocus&&h.show();a.focusManager.add(h,1)}}var e=CKEDITOR.document.getWindow(),b=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(b){b.on("loaded",function(){a(this)},null,null,20)}})}(),CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var a=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'), -e=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),b=CKEDITOR.addTemplate("panel-list-group",'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>'),g=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a, -new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},e=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(e["aria-multiselectable"]=true);!e.role&&(e.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",e.role);e=this.keys;e[40]="next";e[9]="next";e[38]="prev";e[CKEDITOR.SHIFT+9]="prev";e[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(e[13]= -"mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var b=a.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(b);delete this._.started}},getClick:function(){if(!this._.click)this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this);return this._.click}},proto:{add:function(a,b,i){var f=CKEDITOR.tools.getNextId();if(!this._.started){this._.started= -1;this._.size=this._.size||0}this._.items[a]=f;var h;h=CKEDITOR.tools.htmlEncodeAttr(a).replace(g,"\\'");a={id:f,val:h,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(i||a),text:b||a};this._.pendingList.push(e.output(a))},startGroup:function(a){this._.close();var d=CKEDITOR.tools.getNextId();this._.groups[a]=d;this._.pendingHtml.push(b.output({id:d,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join("")); -delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();if(a){a.setStyle("display","none");b&&b.getName()=="ul"&&b.setStyle("display","none")}},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,e=this.element.getDocument(),f;for(f in a)e.getById(a[f]).setStyle("display", -"");for(var g in b){a=e.getById(b[g]);f=a.getNext();a.setStyle("display","");f&&f.getName()=="ul"&&f.setStyle("display","")}},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",true);this.onMark&&this.onMark(b)},unmark:function(a){var b=this.element.getDocument(),a=this._.items[a],e=b.getById(a);e.removeClass("cke_selected");b.getById(a+ -"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(e)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),e;for(e in a){var f=a[e];b.getById(f).removeClass("cke_selected");b.getById(f+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),e,f=-1;if(a)for(e= -this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++f);){if(a.equals(e)){this._.focusIndex=f;break}}else this.element.focus();e&&setTimeout(function(){e.focus()},0)}}})}}),function(){var a='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}" aria-disabled="{ariaDisabled}"'; -CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a=a+' onkeypress="return false;"');CKEDITOR.env.gecko&&(a=a+' onblur="this.style.cssText = this.style.cssText;"');var a=a+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),a=a+ -'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>',e=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),b=CKEDITOR.addTemplate("button",a);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label, -click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,c){var d=CKEDITOR.env,i=this._.id=CKEDITOR.tools.getNextId(),f="",h=this.command,j;this._.editor=a;var k={id:i,button:this,editor:a,focus:function(){CKEDITOR.document.getById(i).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},m=CKEDITOR.tools.addFunction(function(a){if(k.onkey){a= -new CKEDITOR.dom.event(a);return k.onkey(k,a.getKeystroke())!==false}}),q=CKEDITOR.tools.addFunction(function(a){var b;k.onfocus&&(b=k.onfocus(k,new CKEDITOR.dom.event(a))!==false);return b}),s=0;k.clickFn=j=CKEDITOR.tools.addFunction(function(){if(s){a.unlockSelection(1);s=0}k.execute();d.iOS&&a.focus()});if(this.modes){var n={},l=function(){var b=a.mode;if(b){b=this.modes[b]?n[b]!=void 0?n[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED: -b;this.setState(b);this.refresh&&this.refresh()}};a.on("beforeModeUnload",function(){if(a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED)n[a.mode]=this._.state},this);a.on("activeFilterChange",l,this);a.on("mode",l,this);!this.readOnly&&a.on("readOnly",l,this)}else if(h)if(h=a.getCommand(h)){h.on("state",function(){this.setState(h.state)},this);f=f+(h.state==CKEDITOR.TRISTATE_ON?"on":h.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off")}if(this.directional)a.on("contentDirChanged",function(b){var c= -CKEDITOR.document.getById(this._.id),d=c.getFirst(),b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(o,b=="rtl",this.icon,this.iconOffset))},this);h||(f=f+"off");var o=l=this.name||this.command;if(this.icon&&!/\./.test(this.icon)){o=this.icon;this.icon=null}f={id:i,name:l,iconName:o,label:this.label,cls:this.className||"",state:f,ariaDisabled:f=="disabled"?"true":"false",title:this.title,titleJs:d.gecko&& -!d.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:m,focusFn:q,clickFn:j,style:CKEDITOR.skin.getIconStyle(o,a.lang.dir=="rtl",this.icon,this.iconOffset),arrowHtml:this.hasArrow?e.output():""};b.output(f,c);if(this.onRender)this.onRender();return k},setState:function(a){if(this._.state==a)return false;this._.state=a;var b=CKEDITOR.document.getById(this._.id);if(b){b.setState(a,"cke_button");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",true):b.removeAttribute("aria-disabled"); -if(this.hasArrow){a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label;CKEDITOR.document.getById(this._.id+"_label").setText(a)}else a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",true):b.removeAttribute("aria-pressed");return true}return false},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;!this.allowedContent&&(!this.requiredContent&&this.command)&&(b=a.getCommand(this.command)|| -b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}}(),CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}}),function(){var a='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&& -!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a=a+' onkeypress="return false;"');CKEDITOR.env.gecko&&(a=a+' onblur="this.style.cssText = this.style.cssText;"');var a=a+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+ -'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"),e=CKEDITOR.addTemplate("combo",a);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:false,title:a.label,modes:{wysiwyg:1},editorFocus:1}); -a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=true;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var e=[];this.render(a,e);return e.join("")},render:function(a,g){function c(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED; -if(a.readOnly&&!this.readOnly)c=CKEDITOR.TRISTATE_DISABLED;this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=CKEDITOR.env,i="cke_"+this.id,f=CKEDITOR.tools.addFunction(function(c){if(q){a.unlockSelection(1);q=0}j.execute(c)},this),h=this,j={id:i,combo:this,focus:function(){CKEDITOR.document.getById(i).getChild(1).focus()},execute:function(c){var d=h._;if(d.state!=CKEDITOR.TRISTATE_DISABLED){h.createPanel(a);if(d.on)d.panel.hide();else{h.commit(); -var f=h.getValue();f?d.list.mark(f):d.list.unmarkAll();d.panel.showBlock(h.id,new CKEDITOR.dom.element(c),4)}}},clickFn:f};a.on("activeFilterChange",c,this);a.on("mode",c,this);a.on("selectionChange",c,this);!this.readOnly&&a.on("readOnly",c,this);var k=CKEDITOR.tools.addFunction(function(c,d){var c=new CKEDITOR.dom.event(c),e=c.getKeystroke();if(e==40)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(e){case 13:case 32:case 40:CKEDITOR.tools.callFunction(f,d);break; -default:j.onkey(j,e)}c.preventDefault()}),m=CKEDITOR.tools.addFunction(function(){j.onfocus&&j.onfocus()}),q=0;j.keyDownFn=k;d={id:i,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:k,focusFn:m,clickFn:f};e.output(d,g);if(this.onRender)this.onRender();return j},createPanel:function(a){if(!this._.panel){var e=this._.panelDefinition,c=this._.panelDefinition.block,d=e.parent||CKEDITOR.document.getBody(), -i="cke_combopanel__"+this.name,f=new CKEDITOR.ui.floatPanel(a,d,e),h=f.addListBlock(this.id,c),j=this;f.onShow=function(){this.element.addClass(i);j.setState(CKEDITOR.TRISTATE_ON);j._.on=1;j.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(j.onOpen)j.onOpen();a.once("panelShow",function(){h.focus(!h.multiSelect&&j.getValue())})};f.onHide=function(c){this.element.removeClass(i);j.setState(j.modes&&j.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);j._.on=0;if(!c&&j.onClose)j.onClose()}; -f.onEscape=function(){f.hide(1)};h.onClick=function(a,b){j.onClick&&j.onClick.call(j,a,b);f.hide()};this._.panel=f;this._.list=h;f.getBlock(this.id).onHide=function(){j._.on=0;j.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,e){this._.value=a;var c=this.document.getById("cke_"+this.id+"_text");if(c){if(!a&&!e){e=this.label;c.addClass("cke_combo_inlinelabel")}else c.removeClass("cke_combo_inlinelabel");c.setText(typeof e!="undefined"?e:a)}},getValue:function(){return this._.value|| -""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,e,c){this._.items[a]=c||a;this._.list.add(a,e,c)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){if(!this._.committed){this._.list.commit();this._.committed=1;CKEDITOR.ui.fire("ready",this)}this._.committed=1},setState:function(a){if(this._.state!= -a){var e=this.document.getById("cke_"+this.id);e.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?e.setAttribute("aria-disabled",true):e.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){if(this._.state!=CKEDITOR.TRISTATE_DISABLED){this._.lastState=this._.state;this.setState(CKEDITOR.TRISTATE_DISABLED)}}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}}); -CKEDITOR.ui.prototype.addRichCombo=function(a,e){this.add(a,CKEDITOR.UI_RICHCOMBO,e)}}(),CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var e=a.config,b=a.lang.format,g=e.format_tags.split(";"),c={},d=0,i=[],f=0;f<g.length;f++){var h=g[f],j=new CKEDITOR.style(e["format_"+h]);if(!a.filter.customConfig||a.filter.check(j)){d++;c[h]=j;c[h]._.enterMode=a.config.enterMode;i.push(j)}}d!==0&&a.ui.addRichCombo("Format",{label:b.label,title:b.panelTitle,toolbar:"styles,20", -allowedContent:i,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(e.contentsCss),multiSelect:false,attributes:{"aria-label":b.panelTitle}},init:function(){this.startGroup(b.panelTitle);for(var a in c){var d=b["tag_"+a];this.add(a,c[a].buildPreview(d),d)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=c[b],d=a.elementPath();a[b.checkActive(d,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var d= -this.getValue(),b=b.data.path;this.refresh();for(var f in c)if(c[f].checkActive(b,a)){f!=d&&this.setValue(f,a.lang.format["tag_"+f]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in c)a.activeFilter.check(c[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var d in c)if(a.activeFilter.check(c[d]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}}),CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div",CKEDITOR.config.format_p= -{element:"p"},CKEDITOR.config.format_div={element:"div"},CKEDITOR.config.format_pre={element:"pre"},CKEDITOR.config.format_address={element:"address"},CKEDITOR.config.format_h1={element:"h1"},CKEDITOR.config.format_h2={element:"h2"},CKEDITOR.config.format_h3={element:"h3"},CKEDITOR.config.format_h4={element:"h4"},CKEDITOR.config.format_h5={element:"h5"},CKEDITOR.config.format_h6={element:"h6"},function(){var a={canUndo:false,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)}, -allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(e){if(!e.blockless){e.addCommand("horizontalrule",a);e.ui.addButton&&e.ui.addButton("HorizontalRule",{label:e.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"})}}})}(),CKEDITOR.plugins.add("htmlwriter",{init:function(a){var e=new CKEDITOR.htmlWriter;e.forceSimpleAmpersand=a.config.forceSimpleAmpersand;e.indentationChars=a.config.dataIndentationChars||"\t";a.dataProcessor.writer=e}}), -CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var a=CKEDITOR.dtd,e;for(e in CKEDITOR.tools.extend({},a.$nonBodyContent,a.$block,a.$listItem,a.$tableContent))this.setRules(e,{indent:!a[e]["#"],breakBeforeOpen:1,breakBeforeClose:!a[e]["#"],breakAfterClose:1,needsSpace:e in -a.$block&&!(e in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(a){var e=this._.rules[a];this._.afterCloser&&(e&&e.needsSpace&&this._.needsSpace)&&this._.output.push("\n");if(this._.indent)this.indentation();else if(e&&e.breakBeforeOpen){this.lineBreak();this.indentation()}this._.output.push("<",a);this._.afterCloser= -0},openTagClose:function(a,e){var b=this._.rules[a];if(e){this._.output.push(this.selfClosingEnd);if(b&&b.breakAfterClose)this._.needsSpace=b.needsSpace}else{this._.output.push(">");if(b&&b.indent)this._.indentation=this._.indentation+this.indentationChars}b&&b.breakAfterOpen&&this.lineBreak();a=="pre"&&(this._.inPre=1)},attribute:function(a,e){if(typeof e=="string"){this.forceSimpleAmpersand&&(e=e.replace(/&amp;/g,"&"));e=CKEDITOR.tools.htmlEncodeAttr(e)}this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){var e= -this._.rules[a];if(e&&e.indent)this._.indentation=this._.indentation.substr(this.indentationChars.length);if(this._.indent)this.indentation();else if(e&&e.breakBeforeClose){this.lineBreak();this.indentation()}this._.output.push("</",a,">");a=="pre"&&(this._.inPre=0);if(e&&e.breakAfterClose){this.lineBreak();this._.needsSpace=e.needsSpace}this._.afterCloser=1},text:function(a){if(this._.indent){this.indentation();!this._.inPre&&(a=CKEDITOR.tools.ltrim(a))}this._.output.push(a)},comment:function(a){this._.indent&& -this.indentation();this._.output.push("<\!--",a,"--\>")},lineBreak:function(){!this._.inPre&&this._.output.length>0&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(a,e){var b=this._.rules[a];b?CKEDITOR.tools.extend(b,e,true):this._.rules[a]=e}}}),function(){function a(a, -e){e||(e=a.getSelection().getSelectedElement());if(e&&e.is("img")&&!e.data("cke-realelement")&&!e.isReadOnly())return e}function e(a){var e=a.getStyle("float");if(e=="inherit"||e=="none")e=0;e||(e=a.getAttribute("align"));return e}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var e="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}"; -CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(e="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:e,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(a){var b= -a.data.element;if(b.is("img")&&!b.data("cke-realelement")&&!b.isReadOnly())a.data.dialog="image"});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(c){if(a(b,c))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function g(c){var d=b.getCommand("justify"+c);if(d){if(c=="left"||c=="right")d.on("exec",function(d){var f=a(b),g;if(f){g=e(f);if(g==c){f.removeStyle("float");c==e(f)&&f.removeAttribute("align")}else f.setStyle("float", -c);d.cancel()}});d.on("refresh",function(d){var f=a(b);if(f){f=e(f);this.setState(f==c?CKEDITOR.TRISTATE_ON:c=="right"||c=="left"?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d.cancel()}})}}if(!b.plugins.image2){g("left");g("right");g("center");g("block")}}})}(),CKEDITOR.config.image_removeLinkByEmptyURL=!0,function(){function a(a,b){var c=g.exec(a),e=g.exec(b);if(c){if(!c[2]&&e[2]=="px")return e[1];if(c[2]=="px"&&!e[2])return e[1]+"px"}return b}var e=CKEDITOR.htmlParser.cssStyle,b=CKEDITOR.tools.cssLength, -g=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,c={elements:{$:function(b){var c=b.attributes;if((c=(c=(c=c&&c["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(c)))&&c.children[0])&&b.attributes["data-cke-resizable"]){var f=(new e(b)).rules,b=c.attributes,g=f.width,f=f.height;g&&(b.width=a(b.width,g));f&&(b.height=a(b.height,f))}return c}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")}, -afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(c,{applyToAll:true})}});CKEDITOR.editor.prototype.createFakeElement=function(a,c,f,g){var j=this.lang.fakeobjects,j=j[f]||j.unknown,c={"class":c,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type,alt:j,title:j,align:a.getAttribute("align")||""};if(!CKEDITOR.env.hc)c.src=CKEDITOR.tools.transparentImageData;f&&(c["data-cke-real-element-type"]=f);if(g){c["data-cke-resizable"]=g;f=new e;g= -a.getAttribute("width");a=a.getAttribute("height");g&&(f.rules.width=b(g));a&&(f.rules.height=b(a));f.populate(c)}return this.document.createElement("img",{attributes:c})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,c,f,g){var j=this.lang.fakeobjects,j=j[f]||j.unknown,k;k=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(k);k=k.getHtml();c={"class":c,"data-cke-realelement":encodeURIComponent(k),"data-cke-real-node-type":a.type,alt:j,title:j,align:a.attributes.align||""};if(!CKEDITOR.env.hc)c.src= -CKEDITOR.tools.transparentImageData;f&&(c["data-cke-real-element-type"]=f);if(g){c["data-cke-resizable"]=g;g=a.attributes;a=new e;f=g.width;g=g.height;f!=void 0&&(a.rules.width=b(f));g!=void 0&&(a.rules.height=b(g));a.populate(c)}return new CKEDITOR.htmlParser.element("img",c)};CKEDITOR.editor.prototype.restoreRealElement=function(b){if(b.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var c=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(b.data("cke-realelement")),this.document); -if(b.data("cke-resizable")){var f=b.getStyle("width"),b=b.getStyle("height");f&&c.setAttribute("width",a(c.getAttribute("width"),f));b&&c.setAttribute("height",a(c.getAttribute("height"),b))}return c}}(),"use strict",function(){function a(a){return a.replace(/'/g,"\\$&")}function e(a){for(var b,c=a.length,d=[],f=0;f<c;f++){b=a.charCodeAt(f);d.push(b)}return"String.fromCharCode("+d.join(",")+")"}function b(b,c){var d=b.plugins.link,f=d.compiledProtectionFunction.params,e,g;g=[d.compiledProtectionFunction.name, -"("];for(var h=0;h<f.length;h++){d=f[h].toLowerCase();e=c[d];h>0&&g.push(",");g.push("'",e?a(encodeURIComponent(c[d])):"","'")}g.push(")");return g.join("")}function g(a){var a=a.config.emailProtection||"",b;if(a&&a!="encode"){b={};a.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,d){b.name=c;b.params=[];d.replace(/[^,\s]+/g,function(a){b.params.push(a)})})}return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function a(b){return c.replace(/%1/g,b=="rtl"?"right":"left").replace(/%2/g, -"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;",c=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(a("ltr")+a("rtl"))},init:function(a){var b="a[!href]"; -CKEDITOR.dialog.isTabEnabled(a,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)"));CKEDITOR.dialog.isTabEnabled(a,"link","target")&&(b=b.replace("]",",target,onclick]"));a.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));a.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));a.addCommand("unlink",new CKEDITOR.unlinkCommand);a.addCommand("removeAnchor", -new CKEDITOR.removeAnchorCommand);a.setKeystroke(CKEDITOR.CTRL+76,"link");if(a.ui.addButton){a.ui.addButton("Link",{label:a.lang.link.toolbar,command:"link",toolbar:"links,10"});a.ui.addButton("Unlink",{label:a.lang.link.unlink,command:"unlink",toolbar:"links,20"});a.ui.addButton("Anchor",{label:a.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"})}CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");a.on("doubleclick",function(b){var c= -CKEDITOR.plugins.link.getSelectedLink(a)||b.data.element;if(!c.isReadOnly())if(c.is("a")){b.data.dialog=c.getAttribute("name")&&(!c.getAttribute("href")||!c.getChildCount())?"anchor":"link";b.data.link=c}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,c))b.data.dialog="anchor"},null,null,0);a.on("doubleclick",function(b){b.data.dialog in{link:1,anchor:1}&&b.data.link&&a.getSelection().selectElement(b.data.link)},null,null,20);a.addMenuItems&&a.addMenuItems({anchor:{label:a.lang.link.anchor.menu, -command:"anchor",group:"anchor",order:1},removeAnchor:{label:a.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:a.lang.link.menu,command:"link",group:"link",order:1},unlink:{label:a.lang.link.unlink,command:"unlink",group:"link",order:5}});a.contextMenu&&a.contextMenu.addListener(function(b){if(!b||b.isReadOnly())return null;b=CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,b);if(!b&&!(b=CKEDITOR.plugins.link.getSelectedLink(a)))return null;var c={};b.getAttribute("href")&& -b.getChildCount()&&(c={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(b&&b.hasAttribute("name"))c.anchor=c.removeAnchor=CKEDITOR.TRISTATE_OFF;return c});this.compiledProtectionFunction=g(a)},afterInit:function(a){a.dataProcessor.dataFilter.addRules({elements:{a:function(b){return!b.attributes.name?null:!b.children.length?a.createFakeParserElement(b,"cke_anchor","anchor"):null}}});var b=a._.elementsPath&&a._.elementsPath.filters;b&&b.push(function(b,c){if(c=="a"&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, -b)||b.getAttribute("name")&&(!b.getAttribute("href")||!b.getChildCount())))return"anchor"})}});var c=/^javascript:/,d=/^mailto:([^?]+)(?:\?(.+))?$/,i=/subject=([^;?:@&=$,\/]*)/,f=/body=([^;?:@&=$,\/]*)/,h=/^#(.*)$/,j=/^((?:http|https|ftp|news):\/\/)?(.*)$/,k=/^(_(?:self|top|parent|blank))$/,m=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,q=/^javascript:([^(]+)\(([^)]+)\)$/,s=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, -n=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,l={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",title:"advTitle",type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"};CKEDITOR.plugins.link={getSelectedLink:function(a){var b=a.getSelection(),c=b.getSelectedElement();if(c&&c.is("a"))return c;if(b=b.getRanges()[0]){b.shrink(CKEDITOR.SHRINK_TEXT);return a.elementPath(b.getCommonAncestor()).contains("a",1)}return null}, -getEditorAnchors:function(a){for(var b=a.editable(),c=b.isInline()&&!a.plugins.divarea?a.document:b,b=c.getElementsByTag("a"),c=c.getElementsByTag("img"),d=[],f=0,e;e=b.getItem(f++);)if(e.data("cke-saved-name")||e.hasAttribute("name"))d.push({name:e.data("cke-saved-name")||e.getAttribute("name"),id:e.getAttribute("id")});for(f=0;e=c.getItem(f++);)(e=this.tryRestoreFakeAnchor(a,e))&&d.push({name:e.getAttribute("name"),id:e.getAttribute("id")});return d},fakeAnchor:true,tryRestoreFakeAnchor:function(a, -b){if(b&&b.data("cke-real-element-type")&&b.data("cke-real-element-type")=="anchor"){var c=a.restoreRealElement(b);if(c.data("cke-saved-name"))return c}},parseLinkAttributes:function(a,b){var e=b&&(b.data("cke-saved-href")||b.getAttribute("href"))||"",g=a.plugins.link.compiledProtectionFunction,v=a.config.emailProtection,x,u={};e.match(c)&&(v=="encode"?e=e.replace(m,function(a,b,c){return"mailto:"+String.fromCharCode.apply(String,b.split(","))+(c&&c.replace(/\\'/g,"'"))}):v&&e.replace(q,function(a, -b,c){if(b==g.name){u.type="email";for(var a=u.email={},b=/(^')|('$)/g,c=c.match(/[^,\s]+/g),d=c.length,f,e,h=0;h<d;h++){f=decodeURIComponent;e=c[h].replace(b,"").replace(/\\'/g,"'");e=f(e);f=g.params[h].toLowerCase();a[f]=e}a.address=[a.name,a.domain].join("@")}}));if(!u.type)if(v=e.match(h)){u.type="anchor";u.anchor={};u.anchor.name=u.anchor.id=v[1]}else if(v=e.match(d)){x=e.match(i);e=e.match(f);u.type="email";var t=u.email={};t.address=v[1];x&&(t.subject=decodeURIComponent(x[1]));e&&(t.body=decodeURIComponent(e[1]))}else if(e&& -(x=e.match(j))){u.type="url";u.url={};u.url.protocol=x[1];u.url.url=x[2]}if(b){if(e=b.getAttribute("target"))u.target={type:e.match(k)?e:"frame",name:e};else if(e=(e=b.data("cke-pa-onclick")||b.getAttribute("onclick"))&&e.match(s))for(u.target={type:"popup",name:e[1]};v=n.exec(e[2]);)(v[2]=="yes"||v[2]=="1")&&!(v[1]in{height:1,width:1,top:1,left:1})?u.target[v[1]]=true:isFinite(v[2])&&(u.target[v[1]]=v[2]);var e={},y;for(y in l)(v=b.getAttribute(y))&&(e[l[y]]=v);if(y=b.data("cke-saved-name")||e.advName)e.advName= -y;if(!CKEDITOR.tools.isEmpty(e))u.advanced=e}return u},getLinkAttributes:function(c,d){var f=c.config.emailProtection||"",g={};switch(d.type){case "url":var f=d.url&&d.url.protocol!=void 0?d.url.protocol:"http://",h=d.url&&CKEDITOR.tools.trim(d.url.url)||"";g["data-cke-saved-href"]=h.indexOf("/")===0?h:f+h;break;case "anchor":f=d.anchor&&d.anchor.id;g["data-cke-saved-href"]="#"+(d.anchor&&d.anchor.name||f||"");break;case "email":var i=d.email,h=i.address;switch(f){case "":case "encode":var j=encodeURIComponent(i.subject|| -""),k=encodeURIComponent(i.body||""),i=[];j&&i.push("subject="+j);k&&i.push("body="+k);i=i.length?"?"+i.join("&"):"";if(f=="encode"){f=["javascript:void(location.href='mailto:'+",e(h)];i&&f.push("+'",a(i),"'");f.push(")")}else f=["mailto:",h,i];break;default:f=h.split("@",2);i.name=f[0];i.domain=f[1];f=["javascript:",b(c,i)]}g["data-cke-saved-href"]=f.join("")}if(d.target)if(d.target.type=="popup"){for(var f=["window.open(this.href, '",d.target.name||"","', '"],n=["resizable","status","location", -"toolbar","menubar","fullscreen","scrollbars","dependent"],h=n.length,j=function(a){d.target[a]&&n.push(a+"="+d.target[a])},i=0;i<h;i++)n[i]=n[i]+(d.target[n[i]]?"=yes":"=no");j("width");j("left");j("height");j("top");f.push(n.join(","),"'); return false;");g["data-cke-pa-onclick"]=f.join("")}else if(d.target.type!="notSet"&&d.target.name)g.target=d.target.name;if(d.advanced){for(var s in l)(f=d.advanced[l[s]])&&(g[s]=f);if(g.name)g["data-cke-saved-name"]=g.name}if(g["data-cke-saved-href"])g.href= -g["data-cke-saved-href"];s=CKEDITOR.tools.extend({target:1,onclick:1,"data-cke-pa-onclick":1,"data-cke-saved-name":1},l);for(var m in g)delete s[m];return{set:g,removed:CKEDITOR.tools.objectKeys(s)}}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(a){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});a.removeStyle(b)},refresh:function(a,b){var c=b.lastElement&&b.lastElement.getAscendant("a",true);c&&c.getName()=="a"&&c.getAttribute("href")&& -c.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(a){var b=a.getSelection(),c=b.createBookmarks(),d;if(b&&(d=b.getSelectedElement())&&(!d.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,d):d.is("a")))d.remove(1);else if(d=CKEDITOR.plugins.link.getSelectedLink(a))if(d.hasAttribute("href")){d.removeAttributes({name:1, -"data-cke-saved-name":1});d.removeClass("cke_anchor")}else d.remove(1);b.selectBookmarks(c)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:true,linkShowTargetTab:true})}(),"use strict",function(){function a(a,b,c){return k(b)&&k(c)&&c.equals(b.getNext(function(a){return!(Y(a)||Z(a)||m(a))}))}function e(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function b(a){var b=a.element;if(b&&k(b))if((b=b.getAscendant(a.triggers,true))&&a.editable.contains(b)){var c= -d(b);if(c.getAttribute("contenteditable")=="true")return b;if(c.is(a.triggers))return c}return null}function g(a,b,c){w(a,b);w(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function c(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!Y(b)||k(b)&&!m(b)&&!j(a,b)})}function d(a,b){if(a.data("cke-editable"))return null;for(b||(a=a.getParent());a;){if(a.data("cke-editable"))break;if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null} -function i(a){var b=a.doc,c=z('<span contenteditable="false" style="'+P+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',b),d=CKEDITOR.getUrl(this.path+"images/"+(A.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");t(c,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,true);return this},lineChildren:[t(z('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',b),{base:P+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+ -d+") center no-repeat "+a.boxColor+";cursor:pointer;"+(A.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(A.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px",1),"top:-17px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px 2px 0px 0px",1),"top:-1px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","0px 0px 2px 2px",1)]}),t(z(W,b),{base:V+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px", -"border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),t(z(W,b),{base:V+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){w(a,this);var b=a.holdDistance,c=this.size;return c&&a.mouse.y>c.top-b&&a.mouse.y<c.bottom+b&&a.mouse.x>c.left-b&&a.mouse.x<c.right+b?true:false},place:function(){var b= -a.view,c=a.editable,d=a.trigger,f=d.upper,e=d.lower,g=f||e,h=g.getParent(),i={};this.trigger=d;f&&w(a,f,true);e&&w(a,e,true);w(a,h,true);a.inInlineMode&&v(a,true);if(h.equals(c)){i.left=b.scroll.x;i.right=-b.scroll.x;i.width=""}else{i.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0);i.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x;i.right=""}if(f&&e)i.top=f.size.margin.bottom===e.size.margin.top?0|f.size.bottom+f.size.margin.bottom/ -2:f.size.margin.bottom<e.size.margin.top?f.size.bottom+f.size.margin.bottom:f.size.bottom+f.size.margin.bottom-e.size.margin.top;else if(f){if(!e)i.top=f.size.bottom+f.size.margin.bottom}else i.top=e.size.top-e.size.margin.top;if(d.is(L)||i.top>b.scroll.y-15&&i.top<b.scroll.y+5){i.top=a.inInlineMode?0:b.scroll.y;this.look(L)}else if(d.is(H)||i.top>b.pane.bottom-5&&i.top<b.pane.bottom+15){i.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1;this.look(H)}else{if(a.inInlineMode)i.top= -i.top-(b.editable.top+b.editable.border.top);this.look(Q)}if(a.inInlineMode){i.top--;i.top=i.top+b.editable.scroll.top;i.left=i.left+b.editable.scroll.left}for(var j in i)i[j]=CKEDITOR.tools.cssLength(i[j]);this.setStyles(i)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new y("span",a.doc)});for(b=c.lineChildren.length;b--;)c.lineChildren[b].appendTo(c);c.look(Q);c.appendTo(c.wrap); -c.unselectable();c.lineChildren[0].on("mouseup",function(b){c.detach();f(a,function(b){var c=a.line.trigger;b[c.is(J)?"insertBefore":"insertAfter"](c.is(J)?c.lower:c.upper)},true);a.editor.focus();!A.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(true)});c.on("mousedown",function(a){a.data.preventDefault(true)});a.line=c}function f(a,b,c){var f=new CKEDITOR.dom.range(a.doc),e=a.editor,g;if(A.ie&&a.enterMode==CKEDITOR.ENTER_BR)g=a.doc.createText(O);else{g=(g=d(a.element, -true))&&g.data("cke-enter-mode")||a.enterMode;g=new y(C[g],a.doc);g.is("br")||a.doc.createText(O).appendTo(g)}c&&e.fire("saveSnapshot");b(g);f.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([f]);a.hotNode=g;c&&e.fire("saveSnapshot")}function h(a,e){return{canUndo:true,modes:{wysiwyg:1},exec:function(){function g(b){var c=A.ie&&A.version<9?" ":O,d=a.hotNode&&a.hotNode.getText()==c&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!e;f(a,function(c){d&&a.hotNode&&a.hotNode.remove(); -c[e?"insertAfter":"insertBefore"](b);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!e});a.lastCmdDirection=!!e});!A.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}return function(f){var f=f.getSelection().getStartElement(),h,f=f.getAscendant(N,1);if(!n(a,f)&&f&&!f.equals(a.editable)&&!f.contains(a.editable)){if((h=d(f))&&h.getAttribute("contenteditable")=="false")f=h;a.element=f;h=c(a,f,!e);var i;if(k(h)&&h.is(a.triggers)&&h.is(R)&&(!c(a,h,!e)|| -(i=c(a,h,!e))&&k(i)&&i.is(a.triggers)))g(h);else{i=b(a,f);if(k(i))if(c(a,i,!e))(f=c(a,i,!e))&&(k(f)&&f.is(a.triggers))&&g(i);else g(i)}}}}()}}function j(a,b){if(!b||!(b.type==CKEDITOR.NODE_ELEMENT&&b.$))return false;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function k(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function m(a){if(!k(a))return false;var b;if(!(b=q(a)))if(k(a)){b={left:1,right:1,center:1};b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])}else b=false; -return b}function q(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function s(a,b){return k(b)?b.is(a.triggers):null}function n(a,b){if(!b)return false;for(var c=b.getParents(1),d=c.length;d--;)for(var f=a.tabuList.length;f--;)if(c[d].hasAttribute(a.tabuList[f]))return true;return false}function l(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(K)});if(!b)return false;w(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function o(a){var b=a.editable, -c=a.mouse,d=a.view,f=a.triggerOffset;v(a);var g=c.y>(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[g?"getLast":"getFirst"](function(a){return!(Y(a)||Z(a))});if(!b)return null;j(a,b)&&(b=a.line.wrap[g?"getPrevious":"getNext"](function(a){return!(Y(a)||Z(a))}));if(!k(b)||m(b)||!s(a,b))return null;w(a,b);if(!g&&b.size.top>=0&&c.y>0&&c.y<b.size.top+f){a=a.inInlineMode||d.scroll.y===0?L:Q;return new e([null,b,J,D,a])}if(g&&b.size.bottom<=d.pane.height&& -c.y>b.size.bottom-f&&c.y<d.pane.height){a=a.inInlineMode||b.size.bottom>d.pane.height-f&&b.size.bottom<d.pane.height?H:Q;return new e([b,null,F,D,a])}return null}function r(a){var d=a.mouse,f=a.view,g=a.triggerOffset,h=b(a);if(!h)return null;w(a,h);var g=Math.min(g,0|h.size.outerHeight/2),i=[],j,n;if(d.y>h.size.top-1&&d.y<h.size.top+g)n=false;else if(d.y>h.size.bottom-g&&d.y<h.size.bottom+1)n=true;else return null;if(m(h)||l(a,h,n)||h.getParent().is(M))return null;var r=c(a,h,!n);if(r){if(r&&r.type== -CKEDITOR.NODE_TEXT)return null;if(k(r)){if(m(r)||!s(a,r)||r.getParent().is(M))return null;i=[r,h][n?"reverse":"concat"]().concat([E,D])}}else{if(h.equals(a.editable[n?"getLast":"getFirst"](a.isRelevant))){v(a);n&&d.y>h.size.bottom-g&&d.y<f.pane.height&&h.size.bottom>f.pane.height-g&&h.size.bottom<f.pane.height?j=H:d.y>0&&d.y<h.size.top+g&&(j=L)}else j=Q;i=[null,h][n?"reverse":"concat"]().concat([n?F:J,D,j,h.equals(a.editable[n?"getLast":"getFirst"](a.isRelevant))?n?H:L:Q])}return 0 in i?new e(i): -null}function p(a,b,c,d){for(var f=function(){var c=A.ie?b.$.currentStyle:a.win.$.getComputedStyle(b.$,"");return A.ie?function(a){return c[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){return c.getPropertyValue(a)}}(),e=b.getDocumentPosition(),g={},h={},i={},j={},k=X.length;k--;){g[X[k]]=parseInt(f("border-"+X[k]+"-width"),10)||0;i[X[k]]=parseInt(f("padding-"+X[k]),10)||0;h[X[k]]=parseInt(f("margin-"+X[k]),10)||0}(!c||d)&&x(a,d);j.top=e.y-(c?0:a.view.scroll.y);j.left=e.x-(c?0:a.view.scroll.x); -j.outerWidth=b.$.offsetWidth;j.outerHeight=b.$.offsetHeight;j.height=j.outerHeight-(i.top+i.bottom+g.top+g.bottom);j.width=j.outerWidth-(i.left+i.right+g.left+g.right);j.bottom=j.top+j.outerHeight;j.right=j.left+j.outerWidth;if(a.inInlineMode)j.scroll={top:b.$.scrollTop,left:b.$.scrollLeft};return t({border:g,padding:i,margin:h,ignoreScroll:c},j,true)}function w(a,b,c){if(!k(b))return b.size=null;if(b.size){if(b.size.ignoreScroll==c&&b.size.date>new Date-T)return null}else b.size={};return t(b.size, -p(a,b,c),{date:+new Date},true)}function v(a,b){a.view.editable=p(a,a.editable,b,true)}function x(a,b){if(!a.view)a.view={};var c=a.view;if(b||!(c&&c.date>new Date-T)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();t(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},true)}}function u(a,b,c,d){for(var f=d,g=d,h=0,i=false,j=false,k=a.view.pane.height, -n=a.mouse;n.y+h<k&&n.y-h>0;){i||(i=b(f,d));j||(j=b(g,d));!i&&n.y-h>0&&(f=c(a,{x:n.x,y:n.y-h}));!j&&n.y+h<k&&(g=c(a,{x:n.x,y:n.y+h}));if(i&&j)break;h=h+2}return new e([f,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var d=a.config,g=d.magicline_triggerOffset||30,l={editor:a,enterMode:d.enterMode,triggerOffset:g,holdDistance:0|g*(d.magicline_holdDistance||0.5),boxColor:d.magicline_color||"#ff0000",rtl:d.contentsLangDirection=="rtl",tabuList:["data-cke-hidden-sel"].concat(d.magicline_tabuList|| -[]),triggers:d.magicline_everywhere?N:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},s,w,u;l.isRelevant=function(a){return k(a)&&!j(l,a)&&!m(a)};a.on("contentDom",function(){var g=a.editable(),k=a.document,m=a.window;t(l,{editable:g,inInlineMode:g.isInline(),doc:k,win:m,hotNode:null},true);l.boundary=l.inInlineMode?l.editable:l.doc.getDocumentElement();if(!g.is(G.$inline)){l.inInlineMode&&!q(g)&&g.setStyles({position:"relative",top:null,left:null});i.call(this,l);x(l);g.attachListener(a, -"beforeUndoImage",function(){l.line.detach()});g.attachListener(a,"beforeGetData",function(){if(l.line.wrap.getParent()){l.line.detach();a.once("getData",function(){l.line.attach()},null,null,1E3)}},null,null,0);g.attachListener(l.inInlineMode?k:k.getWindow().getFrame(),"mouseout",function(b){if(a.mode=="wysiwyg")if(l.inInlineMode){var c=b.data.$.clientX,b=b.data.$.clientY;x(l);v(l,true);var d=l.view.editable,f=l.view.scroll;if(!(c>d.left-f.x&&c<d.right-f.x)||!(b>d.top-f.y&&b<d.bottom-f.y)){clearTimeout(u); -u=null;l.line.detach()}}else{clearTimeout(u);u=null;l.line.detach()}});g.attachListener(g,"keyup",function(){l.hiddenMode=0});g.attachListener(g,"keydown",function(b){if(a.mode=="wysiwyg"){b=b.data.getKeystroke();a.getSelection().getStartElement();switch(b){case 2228240:case 16:l.hiddenMode=1;l.line.detach()}}});g.attachListener(l.inInlineMode?g:k,"mousemove",function(b){w=true;if(!(a.mode!="wysiwyg"||a.readOnly||u)){var c={x:b.data.$.clientX,y:b.data.$.clientY};u=setTimeout(function(){l.mouse=c; -u=l.trigger=null;x(l);if(w&&!l.hiddenMode&&a.focusManager.hasFocus&&!l.line.mouseNear()&&(l.element=S(l,true))){if((l.trigger=o(l)||r(l)||ba(l))&&!n(l,l.trigger.upper||l.trigger.lower))l.line.attach().place();else{l.trigger=null;l.line.detach()}w=false}},30)}});g.attachListener(m,"scroll",function(){if(a.mode=="wysiwyg"){l.line.detach();if(A.webkit){l.hiddenMode=1;clearTimeout(s);s=setTimeout(function(){if(!l.mouseDown)l.hiddenMode=0},50)}}});g.attachListener(B?k:m,"mousedown",function(){if(a.mode== -"wysiwyg"){l.line.detach();l.hiddenMode=1;l.mouseDown=1}});g.attachListener(B?k:m,"mouseup",function(){l.hiddenMode=0;l.mouseDown=0});a.addCommand("accessPreviousSpace",h(l));a.addCommand("accessNextSpace",h(l,true));a.setKeystroke([[d.magicline_keystrokePrevious,"accessPreviousSpace"],[d.magicline_keystrokeNext,"accessNextSpace"]]);a.on("loadSnapshot",function(){var b,c,d,f;for(f in{p:1,br:1,div:1}){b=a.document.getElementsByTag(f);for(d=b.count();d--;)if((c=b.getItem(d)).data("cke-magicline-hot")){l.hotNode= -c;l.lastCmdDirection=c.data("cke-magicline-dir")==="true"?true:false;return}}});this.backdoor={accessFocusSpace:f,boxTrigger:e,isLine:j,getAscendantTrigger:b,getNonEmptyNeighbour:c,getSize:p,that:l,triggerEdge:r,triggerEditable:o,triggerExpand:ba}}},this)}});var t=CKEDITOR.tools.extend,y=CKEDITOR.dom.element,z=y.createFromHtml,A=CKEDITOR.env,B=CKEDITOR.env.ie&&CKEDITOR.env.version<9,G=CKEDITOR.dtd,C={},J=128,F=64,E=32,D=16,I=8,L=4,H=2,Q=1,O=" ",M=G.$listItem,K=G.$tableContent,R=t({},G.$nonEditable, -G.$empty),N=G.$block,T=100,P="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",V=P+"border-color:transparent;display:block;border-style:solid;",W="<span>"+O+"</span>";C[CKEDITOR.ENTER_BR]="br";C[CKEDITOR.ENTER_P]="p";C[CKEDITOR.ENTER_DIV]="div";e.prototype={set:function(a,b,c){this.properties=a+b+(c||Q);return this},is:function(a){return(this.properties&a)==a}};var S=function(){function a(b,c){var d=b.$.elementFromPoint(c.x, -c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,d){if(!b.mouse)return null;var f=b.doc,e=b.line.wrap,d=d||b.mouse,g=a(f,d);if(c&&j(b,g)){e.hide();g=a(f,d);e.show()}return!g||!(g.type==CKEDITOR.NODE_ELEMENT&&g.$)||A.ie&&A.version<9&&!b.boundary.equals(g)&&!b.boundary.contains(g)?null:g}}(),Y=CKEDITOR.dom.walker.whitespaces(),Z=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),ba=function(){function b(d){var f=d.element,e,h,i;if(!k(f)||f.contains(d.editable)||f.isReadOnly())return null; -i=u(d,function(a,b){return!b.equals(a)},function(a,b){return S(a,true,b)},f);e=i.upper;h=i.lower;if(a(d,e,h))return i.set(E,I);if(e&&f.contains(e))for(;!e.getParent().equals(f);)e=e.getParent();else e=f.getFirst(function(a){return c(d,a)});if(h&&f.contains(h))for(;!h.getParent().equals(f);)h=h.getParent();else h=f.getLast(function(a){return c(d,a)});if(!e||!h)return null;w(d,e);w(d,h);if(!(d.mouse.y>e.size.top&&d.mouse.y<h.size.bottom))return null;for(var f=Number.MAX_VALUE,j,l,n,r;h&&!h.equals(e);){if(!(l= -e.getNext(d.isRelevant)))break;j=Math.abs(g(d,e,l)-d.mouse.y);if(j<f){f=j;n=e;r=l}e=l;w(d,e)}if(!n||!r||!(d.mouse.y>n.size.top&&d.mouse.y<r.size.bottom))return null;i.upper=n;i.lower=r;return i.set(E,I)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||Z(b)||m(b)||j(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=b(c),f;if(f=d){f=d.upper;var e=d.lower;f=!f||!e||m(e)||m(f)||e.equals(f)||f.equals(e)||e.contains(f)||f.contains(e)?false:s(c,f)&&s(c,e)&&a(c,f,e)?true: -false}return f?d:null}}(),X=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function a(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||a.getName()!="form")return[];for(var b=[],c=["style","className"],e=0;e<c.length;e++){var g=a.$.elements.namedItem(c[e]);if(g){g=new CKEDITOR.dom.element(g);b.push([g,g.nextSibling]);g.remove()}}return b}function e(a,b){if(a&&!(a.type!= -CKEDITOR.NODE_ELEMENT||a.getName()!="form")&&b.length>0)for(var c=b.length-1;c>=0;c--){var e=b[c][0],g=b[c][1];g?e.insertBefore(g):e.appendTo(a)}}function b(b,c){var f=a(b),g={},j=b.$;if(!c){g["class"]=j.className||"";j.className=""}g.inline=j.style.cssText||"";if(!c)j.style.cssText="position: static; overflow: visible";e(f);return g}function g(b,c){var f=a(b),g=b.$;if("class"in c)g.className=c["class"];if("inline"in c)g.style.cssText=c.inline;e(f)}function c(a){if(!a.editable().isInline()){var b= -CKEDITOR.instances,c;for(c in b){var e=b[c];if(e.mode=="wysiwyg"&&!e.readOnly){e=e.document.getBody();e.setAttribute("contentEditable",false);e.setAttribute("contentEditable",true)}}if(a.editable().hasFocus){a.toolbox.focus();a.focus()}}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=j.getViewPaneSize();a.resize(b.width,b.height,null,true)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,h=CKEDITOR.document,j=h.getWindow(),k,m,q,s=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize", -{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:false,exec:function(){var n=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),l=a.ui.space("contents");if(a.mode=="wysiwyg"){var o=a.getSelection();k=o&&o.getRanges();m=j.getScrollPosition()}else{var r=a.editable().$;k=!CKEDITOR.env.ie&&[r.selectionStart,r.selectionEnd];m=[r.scrollLeft,r.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){j.on("resize",e);q=j.getScrollPosition(); -for(o=a.container;o=o.getParent();){o.setCustomData("maximize_saved_styles",b(o));o.setStyle("z-index",a.config.baseFloatZIndex-5)}l.setCustomData("maximize_saved_styles",b(l,true));n.setCustomData("maximize_saved_styles",b(n,true));l={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};h.getDocumentElement().setStyles(l);!CKEDITOR.env.gecko&&h.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&h.getBody().setStyles(l);CKEDITOR.env.ie?setTimeout(function(){j.$.scrollTo(0, -0)},0):j.$.scrollTo(0,0);n.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");n.$.offsetLeft;n.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});n.addClass("cke_maximized");e();l=n.getDocumentPosition();n.setStyles({left:-1*l.x+"px",top:-1*l.y+"px"});CKEDITOR.env.gecko&&c(a)}else if(this.state==CKEDITOR.TRISTATE_ON){j.removeListener("resize",e);l=[l,n];for(o=0;o<l.length;o++){g(l[o],l[o].getCustomData("maximize_saved_styles"));l[o].removeCustomData("maximize_saved_styles")}for(o= -a.container;o=o.getParent();){g(o,o.getCustomData("maximize_saved_styles"));o.removeCustomData("maximize_saved_styles")}CKEDITOR.env.ie?setTimeout(function(){j.$.scrollTo(q.x,q.y)},0):j.$.scrollTo(q.x,q.y);n.removeClass("cke_maximized");if(CKEDITOR.env.webkit){n.setStyle("display","inline");setTimeout(function(){n.setStyle("display","block")},0)}a.fire("resize")}this.toggleState();if(o=this.uiItems[0]){l=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize;o=CKEDITOR.document.getById(o._.id); -o.getChild(1).setHtml(l);o.setAttribute("title",l);o.setAttribute("href",'javascript:void("'+l+'");')}if(a.mode=="wysiwyg")if(k){CKEDITOR.env.gecko&&c(a);a.getSelection().selectRanges(k);(r=a.getSelection().getStartElement())&&r.scrollIntoView(true)}else j.$.scrollTo(m.x,m.y);else{if(k){r.selectionStart=k[0];r.selectionEnd=k[1]}r.scrollLeft=m[0];r.scrollTop=m[1]}k=m=null;s=this.state;a.fire("maximize",this.state)},canUndo:false});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize, -command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:s)},null,null,100)}}})}(),function(){function a(a,e,c){var d=CKEDITOR.cleanWord;if(d)c();else{a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||e+"filter/default.js");CKEDITOR.scriptLoader.load(a,c,null,true)}return!d}function e(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(b){var g= -0,c=this.path;b.addCommand("pastefromword",{canUndo:false,async:true,exec:function(a){var b=this;g=1;a.once("beforePaste",e);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste",{type:"html",dataValue:c.dataValue});a.fire("afterCommandExec",{name:"pastefromword",command:b,returnValue:!!c})})}});b.ui.addButton&&b.ui.addButton("PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.on("pasteState",function(a){b.getCommand("pastefromword").setState(a.data)}); -b.on("paste",function(d){var e=d.data,f=e.dataValue;if(f&&(g||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(f))){var h=a(b,c,function(){if(h)b.fire("paste",e);else if(!b.config.pasteFromWordPromptCleanup||g||confirm(b.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(f,b)});h&&d.cancel()}},null,null,3)}})}(),function(){var a={canUndo:false,async:true,exec:function(e){e.getClipboardData({title:e.lang.pastetext.title},function(b){b&&e.fire("paste",{type:"text",dataValue:b.dataValue}); -e.fire("afterCommandExec",{name:"pastetext",command:a,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(e){e.addCommand("pastetext",a);e.ui.addButton&&e.ui.addButton("PasteText",{label:e.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(e.config.forcePasteAsPlainText)e.on("beforePaste",function(a){if(a.data.type!="html")a.data.type="text"});e.on("pasteState",function(a){e.getCommand("pastetext").setState(a.data)})}})}(),CKEDITOR.plugins.add("removeformat", -{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var e=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),b=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")), -g=CKEDITOR.plugins.removeformat.filter,c=a.getSelection().getRanges(),d=c.createIterator(),i=function(a){return a.type==CKEDITOR.NODE_ELEMENT},f;f=d.getNextRange();){f.collapsed||f.enlarge(CKEDITOR.ENLARGE_ELEMENT);var h=f.createBookmark(),j=h.startNode,k=h.endNode,m=function(b){for(var c=a.elementPath(b),d=c.elements,f=1,h;h=d[f];f++){if(h.equals(c.block)||h.equals(c.blockLimit))break;e.test(h.getName())&&g(a,h)&&b.breakParent(h)}};m(j);if(k){m(k);for(j=j.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT);j;){if(j.equals(k))break; -if(j.isReadOnly()){if(j.getPosition(k)&CKEDITOR.POSITION_CONTAINS)break;j=j.getNext(i)}else{m=j.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);if(!(j.getName()=="img"&&j.data("cke-realelement"))&&g(a,j))if(e.test(j.getName()))j.remove(1);else{j.removeAttributes(b);a.fire("removeFormatCleanup",j)}j=m}}}f.moveToBookmark(h)}a.forceNextSelectionCheck();a.getSelection().selectRanges(c)}}},filter:function(a,e){for(var b=a._.removeFormatFilters||[],g=0;g<b.length;g++)if(b[g](e)===false)return false;return true}}, -CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){if(!this._.removeFormatFilters)this._.removeFormatFilters=[];this._.removeFormatFilters.push(a)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",CKEDITOR.plugins.add("resize",{init:function(a){var e,b,g,c,d=a.config,i=a.ui.spaceId("resizer"),f=a.element?a.element.getDirection(1): -"ltr";!d.resize_dir&&(d.resize_dir="vertical");d.resize_maxWidth==void 0&&(d.resize_maxWidth=3E3);d.resize_maxHeight==void 0&&(d.resize_maxHeight=3E3);d.resize_minWidth==void 0&&(d.resize_minWidth=750);d.resize_minHeight==void 0&&(d.resize_minHeight=250);if(d.resize_enabled!==false){var h=null,j=(d.resize_dir=="both"||d.resize_dir=="horizontal")&&d.resize_minWidth!=d.resize_maxWidth,k=(d.resize_dir=="both"||d.resize_dir=="vertical")&&d.resize_minHeight!=d.resize_maxHeight,m=function(h){var i=e,o= -b,r=i+(h.data.$.screenX-g)*(f=="rtl"?-1:1),h=o+(h.data.$.screenY-c);j&&(i=Math.max(d.resize_minWidth,Math.min(r,d.resize_maxWidth)));k&&(o=Math.max(d.resize_minHeight,Math.min(h,d.resize_maxHeight)));a.resize(j?i:null,o)},q=function(){CKEDITOR.document.removeListener("mousemove",m);CKEDITOR.document.removeListener("mouseup",q);if(a.document){a.document.removeListener("mousemove",m);a.document.removeListener("mouseup",q)}},s=CKEDITOR.tools.addFunction(function(f){h||(h=a.getResizable());e=h.$.offsetWidth|| -0;b=h.$.offsetHeight||0;g=f.screenX;c=f.screenY;d.resize_minWidth>e&&(d.resize_minWidth=e);d.resize_minHeight>b&&(d.resize_minHeight=b);CKEDITOR.document.on("mousemove",m);CKEDITOR.document.on("mouseup",q);if(a.document){a.document.on("mousemove",m);a.document.on("mouseup",q)}f.preventDefault&&f.preventDefault()});a.on("destroy",function(){CKEDITOR.tools.removeFunction(s)});a.on("uiSpace",function(b){if(b.data.space=="bottom"){var c="";j&&!k&&(c=" cke_resizer_horizontal");!j&&k&&(c=" cke_resizer_vertical"); -var d='<span id="'+i+'" class="cke_resizer'+c+" cke_resizer_"+f+'" title="'+CKEDITOR.tools.htmlEncode(a.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+s+', event)">'+(f=="ltr"?"◢":"◣")+"</span>";f=="ltr"&&c=="ltr"?b.data.html=b.data.html+d:b.data.html=d+b.data.html}},a,null,100);a.on("maximize",function(b){a.ui.space("resizer")[b.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}}),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var a=function(a){var b= -this._,g=b.menu;if(b.state!==CKEDITOR.TRISTATE_DISABLED)if(b.on&&g)g.hide();else{b.previousState=b.state;if(!g){g=b.menu=new CKEDITOR.menu(a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.common.options}}});g.onHide=CKEDITOR.tools.bind(function(){var c=this.command?a.getCommand(this.command).modes:this.modes;this.setState(!c||c[a.mode]?b.previousState:CKEDITOR.TRISTATE_DISABLED);b.on=0},this);this.onMenu&&g.addListener(this.onMenu)}this.setState(CKEDITOR.TRISTATE_ON);b.on=1;setTimeout(function(){g.show(CKEDITOR.document.getById(b.id), -4)},0)}};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(e){delete e.panel;this.base(e);this.hasArrow=true;this.click=a},statics:{handler:{create:function(a){return new CKEDITOR.ui.menuButton(a)}}}})},beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",init:function(a){var e= -this,b=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js"));this.addMenuItems(a);var g=a.lang.scayt,c=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:g.text_title,title:g.text_title,modes:{wysiwyg:!(c.ie&&(c.version<8||c.quirks))},toolbar:"spellchecker,20",refresh:function(){var c=a.ui.instances.Scayt.getState();a.scayt&&(c=b.state[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF); -a.fire("scaytButtonState",c)},onRender:function(){var b=this;a.on("scaytButtonState",function(a){typeof a.data!==void 0&&b.setState(a.data)})},onMenu:function(){var c=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[c&&b.state[a.name]?"btn_disable":"btn_enable"];c={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:c? -CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete c.scaytOptions;a.config.scayt_uiTabs[1]||delete c.scaytLangs;a.config.scayt_uiTabs[2]||delete c.scaytDict;return c}});if(a.contextMenu&&a.addMenuItems){a.contextMenu.addListener(function(){var b=a.scayt,c;if(b){var f=b.getSelectionNode();if(f=f?f.getAttribute(b.getNodeAttribute()):f){c=e.menuGenerator(a,f,e);b.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" ."))}}return c}); -a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var c=a.scayt;c&&c.hideBanner();return b.apply(this)}})}},addMenuItems:function(a){var e=this,b=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");var g=a.config.scayt_contextMenuItemsOrder.split("|");if(g&&g.length)for(var c=0;c<g.length;c++)a.addMenuGroup("scayt_"+g[c],c-10);g={scaytToggle:{label:a.lang.scayt.btn_enable,group:"scaytButton",onClick:function(){var c=a.scayt;b.state[a.name]=!b.state[a.name]; -b.state[a.name]===true?c||b.createScayt(a):c&&b.destroy(a)}},scaytAbout:{label:a.lang.scayt.btn_about,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(e.dialogName)}},scaytOptions:{label:a.lang.scayt.btn_options,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(e.dialogName)}},scaytLangs:{label:a.lang.scayt.btn_langs,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(e.dialogName)}}, -scaytDict:{label:a.lang.scayt.btn_dictionaries,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(e.dialogName)}}};if(a.plugins.wsc)g.WSC={label:a.lang.wsc.toolbar,group:"scaytButton",onClick:function(){var b=CKEDITOR.plugins.scayt,c=a.scayt,f=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();if(f=f.replace(/\s/g,"")){c&&(b.state[a.name]&&c.setMarkupPaused)&&c.setMarkupPaused(true);a.lockSelection(); -a.execCommand("checkspell")}else alert("Nothing to check!")}};a.addMenuItems(g)},bindEvents:function(a){var e=CKEDITOR.plugins.scayt,b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE;CKEDITOR.on("dialogDefinition",function(a){if(a.data.name==="scaytDialog")a.data.definition.dialog.on("cancel",function(){return false},this,null,-1)});var g=function(){a.scayt&&e.destroy(a)},c=function(){e.state[a.name]&&!a.readOnly&&e.createScayt(a)},d=function(){if(b){a.on("blur",g);a.on("focus",c);a.focusManager.hasFocus&& -c()}else c()};a.on("contentDom",d);a.on("beforeCommandExec",function(b){if(b.data.name in e.options.disablingCommandExec&&a.mode=="wysiwyg"){if(b=a.scayt){e.destroy(a);a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}}else if(b.data.name==="bold"||b.data.name==="italic"||b.data.name==="underline"||b.data.name==="strike"||b.data.name==="subscript"||b.data.name==="superscript")if(b=a.scayt){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}});a.on("beforeSetMode",function(b){if(b.data== -"source")if(b=a.scayt){e.destroy(a);a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}});a.on("afterCommandExec",function(b){var c;if(a.mode=="wysiwyg"&&(b.data.name=="undo"||b.data.name=="redo"))(c=a.scayt)&&setTimeout(function(){c.fire("startSpellCheck")},250)});a.on("readOnly",function(b){var c;if(b){c=a.scayt;if(b.editor.readOnly===true)c&&c.fire("removeMarkupInDocument",{});else if(c)c.fire("startSpellCheck");else if(b.editor.mode=="wysiwyg"&&e.state[b.editor.name]===true){e.createScayt(a); -b.editor.fire("scaytButtonState",CKEDITOR.TRISTATE_ON)}}});a.on("beforeDestroy",g);a.on("setData",function(){g();a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&d()},this,null,50);a.on("insertElement",function(){var b=a.scayt;if(b){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}},this,null,50);a.on("insertHtml",function(){var b=a.scayt;if(b){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}},this,null,50);a.on("scaytDialogShown",function(b){b.data.selectPage(a.scayt.tabToOpen)})}, -parseConfig:function(a){var e=CKEDITOR.plugins.scayt;e.replaceOldOptionsNames(a.config);if(typeof a.config.scayt_autoStartup!=="boolean")a.config.scayt_autoStartup=false;e.state[a.name]=a.config.scayt_autoStartup;if(!a.config.scayt_contextCommands)a.config.scayt_contextCommands="ignore|ignoreall|add";if(!a.config.scayt_contextMenuItemsOrder)a.config.scayt_contextMenuItemsOrder="suggest|moresuggest|control";if(!a.config.scayt_sLang)a.config.scayt_sLang="en_US";if(a.config.scayt_maxSuggestions===void 0|| -typeof a.config.scayt_maxSuggestions!="number"||a.config.scayt_maxSuggestions<0)a.config.scayt_maxSuggestions=5;if(a.config.scayt_customDictionaryIds===void 0||typeof a.config.scayt_customDictionaryIds!=="string")a.config.scayt_customDictionaryIds="";if(a.config.scayt_userDictionaryName===void 0||typeof a.config.scayt_userDictionaryName!=="string")a.config.scayt_userDictionaryName=null;if(typeof a.config.scayt_uiTabs==="string"&&a.config.scayt_uiTabs.split(",").length===3){var b=[],g=[];a.config.scayt_uiTabs= -a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){if(Number(a)===1||Number(a)===0){g.push(true);b.push(Number(a))}else g.push(false)});a.config.scayt_uiTabs=CKEDITOR.tools.search(g,false)===null?b:[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];if(typeof a.config.scayt_serviceProtocol!="string")a.config.scayt_serviceProtocol=null;if(typeof a.config.scayt_serviceHost!="string")a.config.scayt_serviceHost=null;if(typeof a.config.scayt_servicePort!="string")a.config.scayt_servicePort= -null;if(typeof a.config.scayt_servicePath!="string")a.config.scayt_servicePath=null;if(!a.config.scayt_moreSuggestions)a.config.scayt_moreSuggestions="on";if(typeof a.config.scayt_customerId!=="string")a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2";if(typeof a.config.scayt_srcUrl!=="string"){e=document.location.protocol;e=e.search(/https?:/)!=-1?e:"http:";a.config.scayt_srcUrl=e+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js"}if(typeof CKEDITOR.config.scayt_handleCheckDirty!== -"boolean")CKEDITOR.config.scayt_handleCheckDirty=true;if(typeof CKEDITOR.config.scayt_handleUndoRedo!=="boolean")CKEDITOR.config.scayt_handleUndoRedo=true},addRule:function(a){var e=a.dataProcessor,b=e&&e.htmlFilter,g=a._.elementsPath&&a._.elementsPath.filters,e=e&&e.dataFilter,c=a.addRemoveFormatFilter,d=function(b){var c=CKEDITOR.plugins.scayt;if(a.scayt&&b.hasAttribute(c.options.data_attribute_name))return false},i=function(b){var c=CKEDITOR.plugins.scayt,d=true;a.scayt&&b.hasAttribute(c.options.data_attribute_name)&& -(d=false);return d};g&&g.push(d);e&&e.addRules({elements:{span:function(b){var c=CKEDITOR.plugins.scayt;if(c&&c.state[a.name]&&b.classes&&CKEDITOR.tools.search(b.classes,c.options.misspelled_word_class))if(b.classes&&b.parent.type===CKEDITOR.NODE_DOCUMENT_FRAGMENT){delete b.attributes.style;delete b.name}else delete b.classes[CKEDITOR.tools.indexOf(b.classes,c.options.misspelled_word_class)];return b}}});b&&b.addRules({elements:{span:function(b){var c=CKEDITOR.plugins.scayt;if(c&&c.state[a.name]&& -b.hasClass(c.options.misspelled_word_class)&&b.attributes[c.options.data_attribute_name]){b.removeClass(c.options.misspelled_word_class);delete b.attributes[c.options.data_attribute_name];delete b.name}return b}}});c&&c.call(a,i)},scaytMenuDefinition:function(a){var e=this,a=a.scayt;return{scayt_ignore:{label:a.getLocal("btn_ignore"),group:"scayt_control",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal("btn_ignoreAll"),group:"scayt_control",order:2,exec:function(a){a.scayt.ignoreAllWords()}}, -scayt_add:{label:a.getLocal("btn_addWord"),group:"scayt_control",order:3,exec:function(a){var e=a.scayt;setTimeout(function(){e.addWordToUserDictionary()},10)}},option:{label:a.getLocal("btn_options"),group:"scayt_control",order:4,exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[0]==1?true:false}},language:{label:a.getLocal("btn_langs"),group:"scayt_control",order:5,exec:function(a){a.scayt.tabToOpen="langs"; -a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[1]==1?true:false}},dictionary:{label:a.getLocal("btn_dictionaries"),group:"scayt_control",order:6,exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[2]==1?true:false}},about:{label:a.getLocal("btn_about"),group:"scayt_control",order:7,exec:function(a){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(e.dialogName)}}}}, -buildSuggestionMenuItems:function(a,e){var b={},g={},c=a.scayt;if(e.length>0&&e[0]!=="no_any_suggestions")for(var d=0;d<e.length;d++){var i="scayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[d].replace(" ","_");a.addCommand(i,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d]));if(d<a.config.scayt_maxSuggestions){a.addMenuItem(i,{label:e[d],command:i,group:"scayt_suggest",order:d+1});b[i]=CKEDITOR.TRISTATE_OFF}else{a.addMenuItem(i,{label:e[d],command:i,group:"scayt_moresuggest",order:d+1}); -g[i]=CKEDITOR.TRISTATE_OFF;if(a.config.scayt_moreSuggestions==="on"){a.addMenuItem("scayt_moresuggest",{label:c.getLocal("btn_moreSuggestions"),group:"scayt_moresuggest",order:10,getItems:function(){return g}});b.scayt_moresuggest=CKEDITOR.TRISTATE_OFF}}}else{b.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED;a.addCommand("no_scayt_suggest",{exec:function(){}});a.addMenuItem("no_scayt_suggest",{label:c.getLocal("btn_noSuggestions")||"no_scayt_suggest",command:"no_scayt_suggest",group:"scayt_suggest",order:0})}return b}, -menuGenerator:function(a,e){var b=a.scayt,g=this.scaytMenuDefinition(a),c={},d=a.config.scayt_contextCommands.split("|");b.fire("getSuggestionsList",{lang:b.getLang(),word:e});c=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions);if(a.config.scayt_contextCommands=="off")return c;for(var i in g)if(!(CKEDITOR.tools.indexOf(d,i.replace("scayt_",""))==-1&&a.config.scayt_contextCommands!="all")){c[i]=CKEDITOR.TRISTATE_OFF;typeof g[i].verification==="function"&&!g[i].verification(a)&&delete c[i]; -a.addCommand(i,{exec:g[i].exec});a.addMenuItem(i,{label:a.lang.scayt[g[i].label]||g[i].label,command:i,group:g[i].group,order:g[i].order})}return c},createCommand:function(a){return{exec:function(e){e.scayt.replaceSelectionNode({word:a})}}}}),CKEDITOR.plugins.scayt={state:{},suggestions:[],loadingHelper:{loadOrder:[]},isLoading:!1,options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol", -scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},replaceOldOptionsNames:function(a){for(var e in a)if(e in this.backCompatibilityMap){a[this.backCompatibilityMap[e]]=a[e];delete a[e]}},createScayt:function(a){var e=this;this.loadScaytLibrary(a,function(a){var g={lang:a.config.scayt_sLang,container:a.editable().$.nodeName=="BODY"?a.document.getWindow().$.frameElement:a.editable().$,customDictionary:a.config.scayt_customDictionaryIds, -userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,data_attribute_name:e.options.data_attribute_name,misspelled_word_class:e.options.misspelled_word_class};if(a.config.scayt_serviceProtocol)g.service_protocol=a.config.scayt_serviceProtocol;if(a.config.scayt_serviceHost)g.service_host=a.config.scayt_serviceHost;if(a.config.scayt_servicePort)g.service_port=a.config.scayt_servicePort;if(a.config.scayt_servicePath)g.service_path=a.config.scayt_servicePath; -g=new SCAYT.CKSCAYT(g,function(){},function(){});g.subscribe("suggestionListSend",function(a){for(var b={},e=[],f=0;f<a.suggestionList.length;f++)if(!b[a.suggestionList[f]]){b[a.suggestionList[f]]=a.suggestionList[f];e.push(a.suggestionList[f])}CKEDITOR.plugins.scayt.suggestions=e});a.scayt=g;a.fire("scaytButtonState",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire("scaytButtonState",CKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a, -e){var b=this;if(typeof window.SCAYT==="undefined"||typeof window.SCAYT.CKSCAYT!=="function"){this.loadingHelper[a.name]=e;this.loadingHelper.loadOrder.push(a.name);CKEDITOR.scriptLoader.load(a.config.scayt_srcUrl,function(){var a;CKEDITOR.fireOnce("scaytReady");for(var c=0;c<b.loadingHelper.loadOrder.length;c++){a=b.loadingHelper.loadOrder[c];if(typeof b.loadingHelper[a]==="function")b.loadingHelper[a](CKEDITOR.instances[a]);delete b.loadingHelper[a]}b.loadingHelper.loadOrder=[]})}else if(window.SCAYT&& -typeof window.SCAYT.CKSCAYT==="function"){CKEDITOR.fireOnce("scaytReady");a.scayt||typeof e==="function"&&e(a)}}},CKEDITOR.on("scaytReady",function(){if(CKEDITOR.config.scayt_handleCheckDirty===true){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var e=null,c=this.scayt;if(!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt)e=a.call(this);else if(e=this.status=="ready")var d=c.removeMarkupFromString(this.getSnapshot()), -c=c.removeMarkupFromString(this._.previousValue),e=e&&c!==d;return e}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty,function(a){return function(){var e=this.scayt;!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt?a.call(this):this._.previousValue=e.removeMarkupFromString(this.getSnapshot())}})}if(CKEDITOR.config.scayt_handleUndoRedo===true){var a=CKEDITOR.plugins.undo.Image.prototype,e=typeof a.equalsContent=="function"?"equalsContent":"equals";a[e]=CKEDITOR.tools.override(a[e], -function(a){return function(e){var c=e.editor.scayt,d=this.contents,i=e.contents,f=null;if(CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state[e.editor.name]&&e.editor.scayt){this.contents=c.removeMarkupFromString(d)||"";e.contents=c.removeMarkupFromString(i)||""}f=a.apply(this,arguments);this.contents=d;e.contents=i;return f}})}}),function(){var a={preserveState:true,editorFocus:false,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state== -CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:[".%1 table.%2,",".%1 table.%2 > tr > td, .%1 table.%2 > tr > th,",".%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,",".%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,",".%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th", -"{","border : #d3d3d3 1px dotted","}"]).join("").replace(/%2/g,"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(e){var b=e.addCommand("showborders",a);b.canUndo=false;e.config.startupShowBorders!==false&&b.setState(CKEDITOR.TRISTATE_ON);e.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(e)},null,null,100);e.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(e)});e.on("removeFormatCleanup",function(a){a=a.data;e.getCommand("showborders").state== -CKEDITOR.TRISTATE_ON&&(a.is("table")&&(!a.hasAttribute("border")||parseInt(a.getAttribute("border"),10)<=0))&&a.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor,a=b&&b.dataFilter,b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"],d=parseInt(a.border,10);if((!d||d<=0)&&(!b||b.indexOf("cke_show_border")==-1))a["class"]=(b||"")+" cke_show_border"}}});b&&b.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"];b&&(a["class"]= -b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/,""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if(b=="table"||b=="tableProperties"){a=a.data.definition;b=a.getContents("info").get("txtBorder");b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,d){a.apply(this,arguments);var e=parseInt(this.getValue(),10);d[!e||e<=0?"addClass":"removeClass"]("cke_show_border")}});if(a=(a=a.getContents("advanced"))&&a.get("advCSSClasses")){a.setup= -CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}});a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,d){a.apply(this,arguments);parseInt(d.getAttribute("border"),10)||d.addClass("cke_show_border")}})}}})}(),function(){CKEDITOR.plugins.add("sourcearea",{init:function(e){function b(){var a=c&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+ -"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show();a&&this.focus()}if(e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var g=CKEDITOR.plugins.sourcearea;e.addMode("source",function(c){var g=e.ui.space("contents").getDocument().createElement("textarea");g.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",e.config.sourceAreaTabSize||4)));g.setAttribute("dir", -"ltr");g.addClass("cke_source cke_reset cke_enable_context_menu");e.ui.space("contents").append(g);g=e.editable(new a(e,g));g.setData(e.getData(1));if(CKEDITOR.env.ie){g.attachListener(e,"resize",b,g);g.attachListener(CKEDITOR.document.getWindow(),"resize",b,g);CKEDITOR.tools.setTimeout(b,0,g)}e.fire("ariaWidget",this);c()});e.addCommand("source",g.commands.source);e.ui.addButton&&e.ui.addButton("Source",{label:e.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});e.on("mode",function(){e.getCommand("source").setState(e.mode== -"source"?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var c=CKEDITOR.env.ie&&CKEDITOR.env.version==9}}});var a=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){a.baseProto.detach.call(this); -this.clearCustomData();this.remove()}}})}(),CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(a){a.mode=="wysiwyg"&&a.fire("saveSnapshot");a.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);a.setMode(a.mode=="source"?"wysiwyg":"source")},canUndo:!1}}},CKEDITOR.plugins.add("specialchar",{availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1, -km:1,ku:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var e=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b=e.availableLangs[b]?b:e.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar, -e.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:false});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}}),CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" "), -function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(a){var e=a.config,b=a.lang.stylescombo,g={},c=[],d=[];a.on("stylesSet",function(b){if(b=b.data.styles){for(var f,h,j,k=0,m=b.length;k<m;k++){f=b[k];if(!(a.blockless&&f.element in CKEDITOR.dtd.$block)){h=f.name;f=new CKEDITOR.style(f);if(!a.filter.customConfig||a.filter.check(f)){f._name=h;f._.enterMode=e.enterMode;f._.type=j=f.assignedTo||f.type;f._.weight=k+(j==CKEDITOR.STYLE_OBJECT?1:j==CKEDITOR.STYLE_BLOCK?2:3)*1E3; -g[h]=f;c.push(f);d.push(f)}}}c.sort(function(a,b){return a._.weight-b._.weight})}});a.ui.addRichCombo("Styles",{label:b.label,title:b.panelTitle,toolbar:"styles,10",allowedContent:d,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(e.contentsCss),multiSelect:true,attributes:{"aria-label":b.panelTitle}},init:function(){var a,d,e,g,k,m;k=0;for(m=c.length;k<m;k++){a=c[k];d=a._name;g=a._.type;if(g!=e){this.startGroup(b["panelTitle"+g]);e=g}this.add(d,a.type==CKEDITOR.STYLE_OBJECT?d:a.buildPreview(), -d)}this.commit()},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=g[b],c=a.elementPath();a[b.checkActive(c,a)?"removeStyle":"applyStyle"](b);a.fire("saveSnapshot")},onRender:function(){a.on("selectionChange",function(b){for(var c=this.getValue(),b=b.data.path.elements,d=0,e=b.length,k;d<e;d++){k=b[d];for(var m in g)if(g[m].checkElementRemovable(k,true,a)){m!=c&&this.setValue(m);return}}this.setValue("")},this)},onOpen:function(){var c=a.getSelection().getSelectedElement(),c=a.elementPath(c), -d=[0,0,0,0];this.showAll();this.unmarkAll();for(var e in g){var j=g[e],k=j._.type;j.checkApplicable(c,a,a.activeFilter)?d[k]++:this.hideItem(e);j.checkActive(c,a)&&this.mark(e)}d[CKEDITOR.STYLE_BLOCK]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_BLOCK]);d[CKEDITOR.STYLE_INLINE]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_INLINE]);d[CKEDITOR.STYLE_OBJECT]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_OBJECT])},refresh:function(){var b=a.elementPath();if(b){for(var c in g)if(g[c].checkApplicable(b, -a,a.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){g={};c=[]}})}})}(),function(){function a(a){return{editorFocus:false,canUndo:false,modes:{wysiwyg:1},exec:function(b){if(b.editable().hasFocus){var e=b.getSelection(),f;if(f=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=b.createRange(),g=CKEDITOR.tools.tryThese(function(){var b=f.getParent().$.cells[f.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b= -f.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(!g&&!a){for(var j=f.getAscendant("table").$,g=f.getParent().$.cells,j=new CKEDITOR.dom.element(j.insertRow(-1),b.document),k=0,m=g.length;k<m;k++)j.append((new CKEDITOR.dom.element(g[k],b.document)).clone(false,false)).appendBogus();e.moveToElementEditStart(j)}else if(g){g=new CKEDITOR.dom.element(g);e.moveToElementEditStart(g);(!e.checkStartOfBlock()||!e.checkEndOfBlock())&&e.selectNodeContents(g)}else return true; -e.select(true);return true}}return false}}}var e={editorFocus:false,modes:{wysiwyg:1,source:1}},b={exec:function(a){a.container.focusNext(true,a.tabIndex)}},g={exec:function(a){a.container.focusPrevious(true,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=c.config.enableTabKeyTools!==false,i=c.config.tabSpaces||0,f="";i--;)f=f+" ";if(f)c.on("key",function(a){if(a.data.keyCode==9){c.insertHtml(f);a.cancel()}});if(d)c.on("key",function(a){(a.data.keyCode==9&&c.execCommand("selectNextCell")|| -a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});c.addCommand("blur",CKEDITOR.tools.extend(b,e));c.addCommand("blurBack",CKEDITOR.tools.extend(g,e));c.addCommand("selectNextCell",a());c.addCommand("selectPreviousCell",a(true))}})}(),CKEDITOR.dom.element.prototype.focusNext=function(a,e){var b=e===void 0?this.getTabIndex():e,g,c,d,i,f,h;if(b<=0)for(f=this.getNextSourceNode(a,CKEDITOR.NODE_ELEMENT);f;){if(f.isVisible()&&f.getTabIndex()===0){d=f;break}f=f.getNextSourceNode(false, -CKEDITOR.NODE_ELEMENT)}else for(f=this.getDocument().getBody().getFirst();f=f.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);){if(!g)if(!c&&f.equals(this)){c=true;if(a){if(!(f=f.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;g=1}}else c&&!this.contains(f)&&(g=1);if(f.isVisible()&&!((h=f.getTabIndex())<0)){if(g&&h==b){d=f;break}if(h>b&&(!d||!i||h<i)){d=f;i=h}else if(!d&&h===0){d=f;i=h}}}d&&d.focus()},CKEDITOR.dom.element.prototype.focusPrevious=function(a,e){for(var b=e===void 0?this.getTabIndex(): -e,g,c,d,i=0,f,h=this.getDocument().getBody().getLast();h=h.getPreviousSourceNode(false,CKEDITOR.NODE_ELEMENT);){if(!g)if(!c&&h.equals(this)){c=true;if(a){if(!(h=h.getPreviousSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;g=1}}else c&&!this.contains(h)&&(g=1);if(h.isVisible()&&!((f=h.getTabIndex())<0))if(b<=0){if(g&&f===0){d=h;break}if(f>i){d=h;i=f}}else{if(g&&f==b){d=h;break}if(f<b&&(!d||f>i)){d=h;i=f}}}d&&d.focus()},CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(a){return CKEDITOR.tools.extend(a|| -{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var b=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab?"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle", -"table[width]: sizeToAttribute"]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(a){var b=a.elementPath().contains("table",1);if(b){var d=b.getParent(),e=a.editable();d.getChildCount()==1&&(!d.is("td","th")&&!d.equals(e))&&(b=d);a=a.createRange();a.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);b.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:b.toolbar,command:"table",toolbar:"insert,30"}); -CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:b.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:b.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){if(a.data.element.is("table"))a.data.dialog="tableProperties"});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}), -function(){function a(a){function b(a){if(!(c.length>0)&&a.type==CKEDITOR.NODE_ELEMENT&&q.test(a.getName())&&!a.getCustomData("selected_cell")){CKEDITOR.dom.element.setMarker(d,a,"selected_cell",true);c.push(a)}}for(var a=a.getRanges(),c=[],d={},f=0;f<a.length;f++){var e=a[f];if(e.collapsed){e=e.getCommonAncestor();(e=e.getAscendant("td",true)||e.getAscendant("th",true))&&c.push(e)}else{var e=new CKEDITOR.dom.walker(e),g;for(e.guard=b;g=e.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g= -g.getAscendant("td",true)||g.getAscendant("th",true))&&!g.getCustomData("selected_cell")){CKEDITOR.dom.element.setMarker(d,g,"selected_cell",true);c.push(g)}}}CKEDITOR.dom.element.clearAllMarkers(d);return c}function e(b,c){for(var d=a(b),f=d[0],e=f.getAscendant("table"),f=f.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],i=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(e.$.rows[i]),h=c?h:i,g=c?g:d,d=CKEDITOR.tools.buildTableMap(e),e=d[h],h=c?d[h-1]:d[h+1],d=d[0].length, -f=f.createElement("tr"),i=0;e[i]&&i<d;i++){var j;if(e[i].rowSpan>1&&h&&e[i]==h[i]){j=e[i];j.rowSpan=j.rowSpan+1}else{j=(new CKEDITOR.dom.element(e[i])).clone();j.removeAttribute("rowSpan");j.appendBogus();f.append(j);j=j.$}i=i+(j.colSpan-1)}c?f.insertBefore(g):f.insertAfter(g)}function b(c){if(c instanceof CKEDITOR.dom.selection){for(var d=a(c),f=d[0].getAscendant("table"),e=CKEDITOR.tools.buildTableMap(f),c=d[0].getParent().$.rowIndex,d=d[d.length-1],g=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[], -h=c;h<=g;h++){for(var i=e[h],j=new CKEDITOR.dom.element(f.$.rows[h]),k=0;k<i.length;k++){var m=new CKEDITOR.dom.element(i[k]),q=m.getParent().$.rowIndex;if(m.$.rowSpan==1)m.remove();else{m.$.rowSpan=m.$.rowSpan-1;if(q==h){q=e[h+1];q[k-1]?m.insertAfter(new CKEDITOR.dom.element(q[k-1])):(new CKEDITOR.dom.element(f.$.rows[h+1])).append(m,1)}}k=k+(m.$.colSpan-1)}d.push(j)}e=f.$.rows;f=new CKEDITOR.dom.element(e[g+1]||(c>0?e[c-1]:null)||f.$.parentNode);for(h=d.length;h>=0;h--)b(d[h]);return f}if(c instanceof -CKEDITOR.dom.element){f=c.getAscendant("table");f.$.rows.length==1?f.remove():c.remove()}return null}function g(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var f;f=a[d];for(var e=b,g=f.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(e?1:j.colSpan);if(j==f.$)break}f=h-1;if(b?f<c:f>c)c=f}return c}function c(b,c){for(var d=a(b),f=d[0].getAscendant("table"),e=g(d,1),d=g(d),e=c?e:d,h=CKEDITOR.tools.buildTableMap(f),f=[],d=[],i=h.length,j=0;j<i;j++){f.push(h[j][e]);d.push(c?h[j][e-1]:h[j][e+ -1])}for(j=0;j<i;j++)if(f[j]){if(f[j].colSpan>1&&d[j]==f[j]){e=f[j];e.colSpan=e.colSpan+1}else{e=(new CKEDITOR.dom.element(f[j])).clone();e.removeAttribute("colSpan");e.appendBogus();e[c?"insertBefore":"insertAfter"].call(e,new CKEDITOR.dom.element(f[j]));e=e.$}j=j+(e.rowSpan-1)}}function d(a,b){var c=a.getStartElement();if(c=c.getAscendant("td",1)||c.getAscendant("th",1)){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function i(b){if(b instanceof CKEDITOR.dom.selection){var b= -a(b),c=b[0]&&b[0].getAscendant("table"),d;a:{var e=0;d=b.length-1;for(var g={},h,j;h=b[e++];)CKEDITOR.dom.element.setMarker(g,h,"delete_cell",true);for(e=0;h=b[e++];)if((j=h.getPrevious())&&!j.getCustomData("delete_cell")||(j=h.getNext())&&!j.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(g);d=j;break a}CKEDITOR.dom.element.clearAllMarkers(g);j=b[0].getParent();if(j=j.getPrevious())d=j.getLast();else{j=b[d].getParent();d=(j=j.getNext())?j.getChild(0):null}}for(j=b.length-1;j>= -0;j--)i(b[j]);d?f(d,true):c&&c.remove()}else if(b instanceof CKEDITOR.dom.element){c=b.getParent();c.getChildCount()==1?c.remove():b.remove()}}function f(a,b){var c=a.getDocument(),d=CKEDITOR.document;if(CKEDITOR.env.ie&&CKEDITOR.env.version==10){d.focus();c.focus()}c=new CKEDITOR.dom.range(c);if(!c["moveToElementEdit"+(b?"End":"Start")](a)){c.selectNodeContents(a);c.collapse(b?false:true)}c.select(true)}function h(a,b,c){a=a[b];if(typeof c=="undefined")return a;for(b=0;a&&b<a.length;b++){if(c.is&& -a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function j(b,c,d){var f=a(b),e;if((c?f.length!=1:f.length<2)||(e=b.getCommonAncestor())&&e.type==CKEDITOR.NODE_ELEMENT&&e.is("table"))return false;var g,b=f[0];e=b.getAscendant("table");var i=CKEDITOR.tools.buildTableMap(e),j=i.length,k=i[0].length,m=b.getParent().$.rowIndex,q=h(i,m,b);if(c){var y;try{var z=parseInt(b.getAttribute("rowspan"),10)||1;g=parseInt(b.getAttribute("colspan"),10)||1;y=i[c=="up"?m-z:c=="down"? -m+z:m][c=="left"?q-g:c=="right"?q+g:q]}catch(A){return false}if(!y||b.$==y)return false;f[c=="up"||c=="left"?"unshift":"push"](new CKEDITOR.dom.element(y))}for(var c=b.getDocument(),B=m,z=y=0,G=!d&&new CKEDITOR.dom.documentFragment(c),C=0,c=0;c<f.length;c++){g=f[c];var J=g.getParent(),F=g.getFirst(),E=g.$.colSpan,D=g.$.rowSpan,J=J.$.rowIndex,I=h(i,J,g),C=C+E*D,z=Math.max(z,I-q+E);y=Math.max(y,J-m+D);if(!d){E=g;(D=E.getBogus())&&D.remove();E.trim();if(g.getChildren().count()){if(J!=B&&F&&(!F.isBlockBoundary|| -!F.isBlockBoundary({br:1})))(B=G.getLast(CKEDITOR.dom.walker.whitespaces(true)))&&(!B.is||!B.is("br"))&&G.append("br");g.moveChildren(G)}c?g.remove():g.setHtml("")}B=J}if(d)return y*z==C;G.moveChildren(b);b.appendBogus();z>=k?b.removeAttribute("rowSpan"):b.$.rowSpan=y;y>=j?b.removeAttribute("colSpan"):b.$.colSpan=z;d=new CKEDITOR.dom.nodeList(e.$.rows);f=d.count();for(c=f-1;c>=0;c--){e=d.getItem(c);if(!e.$.cells.length){e.remove();f++}}return b}function k(b,c){var d=a(b);if(d.length>1)return false; -if(c)return true;var d=d[0],f=d.getParent(),e=f.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(e),i=f.$.rowIndex,j=h(g,i,d),k=d.$.rowSpan,m;if(k>1){m=Math.ceil(k/2);for(var k=Math.floor(k/2),f=i+m,e=new CKEDITOR.dom.element(e.$.rows[f]),g=h(g,f),q,f=d.clone(),i=0;i<g.length;i++){q=g[i];if(q.parentNode==e.$&&i>j){f.insertBefore(new CKEDITOR.dom.element(q));break}else q=null}q||e.append(f)}else{k=m=1;e=f.clone();e.insertAfter(f);e.append(f=d.clone());q=h(g,i);for(j=0;j<q.length;j++)q[j].rowSpan++}f.appendBogus(); -d.$.rowSpan=m;f.$.rowSpan=k;m==1&&d.removeAttribute("rowSpan");k==1&&f.removeAttribute("rowSpan");return f}function m(b,c){var d=a(b);if(d.length>1)return false;if(c)return true;var d=d[0],f=d.getParent(),e=f.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(e),g=h(e,f.$.rowIndex,d),i=d.$.colSpan;if(i>1){f=Math.ceil(i/2);i=Math.floor(i/2)}else{for(var i=f=1,j=[],k=0;k<e.length;k++){var m=e[k];j.push(m[g]);m[g].rowSpan>1&&(k=k+(m[g].rowSpan-1))}for(e=0;e<j.length;e++)j[e].colSpan++}e=d.clone(); -e.insertAfter(d);e.appendBogus();d.$.colSpan=f;e.$.colSpan=i;f==1&&d.removeAttribute("colSpan");i==1&&e.removeAttribute("colSpan");return e}var q=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(g){function h(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function l(a,b){var c=g.addCommand(a,b);g.addFeature(c)}var o=g.lang.table; -l("cellProperties",new CKEDITOR.dialogCommand("cellProperties",h({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:"table"})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");l("rowDelete",h({requiredContent:"table",exec:function(a){a=a.getSelection();f(b(a))}}));l("rowInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();e(a,true)}}));l("rowInsertAfter",h({requiredContent:"table", -exec:function(a){a=a.getSelection();e(a)}}));l("columnDelete",h({requiredContent:"table",exec:function(b){for(var b=b.getSelection(),b=a(b),c=b[0],d=b[b.length-1],b=c.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(b),g,h,i=[],j=0,k=e.length;j<k;j++)for(var m=0,n=e[j].length;m<n;m++){e[j][m]==c.$&&(g=m);e[j][m]==d.$&&(h=m)}for(j=g;j<=h;j++)for(m=0;m<e.length;m++){d=e[m];c=new CKEDITOR.dom.element(b.$.rows[m]);d=new CKEDITOR.dom.element(d[j]);if(d.$){d.$.colSpan==1?d.remove():d.$.colSpan=d.$.colSpan- -1;m=m+(d.$.rowSpan-1);c.$.cells.length||i.push(c)}}h=b.$.rows[0]&&b.$.rows[0].cells;g=new CKEDITOR.dom.element(h[g]||(g?h[g-1]:b.$.parentNode));i.length==k&&b.remove();g&&f(g,true)}}));l("columnInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();c(a,true)}}));l("columnInsertAfter",h({requiredContent:"table",exec:function(a){a=a.getSelection();c(a)}}));l("cellDelete",h({requiredContent:"table",exec:function(a){a=a.getSelection();i(a)}}));l("cellMerge",h({allowedContent:"td[colspan,rowspan]", -requiredContent:"td[colspan,rowspan]",exec:function(a){f(j(a.getSelection()),true)}}));l("cellMergeRight",h({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){f(j(a.getSelection(),"right"),true)}}));l("cellMergeDown",h({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){f(j(a.getSelection(),"down"),true)}}));l("cellVerticalSplit",h({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){f(k(a.getSelection()))}}));l("cellHorizontalSplit", -h({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){f(m(a.getSelection()))}}));l("cellInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();d(a,true)}}));l("cellInsertAfter",h({requiredContent:"table",exec:function(a){a=a.getSelection();d(a)}}));g.addMenuItems&&g.addMenuItems({tablecell:{label:o.cell.menu,group:"tablecell",order:1,getItems:function(){var b=g.getSelection(),c=a(b);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF, -tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:j(b,null,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:j(b,"right",true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:j(b,"down",true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:k(b,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:m(b,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:c.length>0?CKEDITOR.TRISTATE_OFF: -CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:o.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:o.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:o.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:o.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:o.cell.mergeRight,group:"tablecell",command:"cellMergeRight", -order:17},tablecell_merge_down:{label:o.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:o.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:o.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:o.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:o.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF, -tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:o.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:o.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:o.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:o.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF, -tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:o.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:o.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:o.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});g.contextMenu&&g.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1}, -1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:a};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(a){for(var a=a.$.rows,e=-1,b=[],g=0;g<a.length;g++){e++;!b[e]&&(b[e]=[]);for(var c=-1,d=0;d<a[g].cells.length;d++){var i=a[g].cells[d];for(c++;b[e][c];)c++;for(var f=isNaN(i.colSpan)?1:i.colSpan,i=isNaN(i.rowSpan)?1:i.rowSpan,h=0;h<i;h++){b[e+h]||(b[e+ -h]=[]);for(var j=0;j<f;j++)b[e+h][c+j]=a[g].cells[d]}c=c+(f-1)}}return b},function(){function a(a){function b(){for(var d=g(),h=CKEDITOR.tools.clone(a.config.toolbarGroups)||e(a),j=0;j<h.length;j++){var k=h[j];if(k!="/"){typeof k=="string"&&(k=h[j]={name:k});var l,o=k.groups;if(o)for(var r=0;r<o.length;r++){l=o[r];(l=d[l])&&f(k,l)}(l=d[k.name])&&f(k,l)}}return h}function g(){var b={},d,f,e;for(d in a.ui.items){f=a.ui.items[d];e=f.toolbar||"others";e=e.split(",");f=e[0];e=parseInt(e[1]||-1,10);b[f]|| -(b[f]=[]);b[f].push({name:d,order:e})}for(f in b)b[f]=b[f].sort(function(a,b){return a.order==b.order?0:b.order<0?-1:a.order<0?1:a.order<b.order?-1:1});return b}function f(b,d){if(d.length){b.items?b.items.push(a.ui.create("-")):b.items=[];for(var f;f=d.shift();){f=typeof f=="string"?f:f.name;if(!j||CKEDITOR.tools.indexOf(j,f)==-1)(f=a.ui.create(f))&&a.addFeature(f)&&b.items.push(f)}}}function h(a){var b=[],c,d,e;for(c=0;c<a.length;++c){d=a[c];e={};if(d=="/")b.push(d);else if(CKEDITOR.tools.isArray(d)){f(e, -CKEDITOR.tools.clone(d));b.push(e)}else if(d.items){f(e,CKEDITOR.tools.clone(d.items));e.name=d.name;b.push(e)}}return b}var j=a.config.removeButtons,j=j&&j.split(","),k=a.config.toolbar;typeof k=="string"&&(k=a.config["toolbar_"+k]);return a.toolbar=k?h(k):b()}function e(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/", -{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var b=function(){this.toolbars=[];this.focusCommandExecuted=false};b.prototype.focus=function(){for(var a=0,b;b=this.toolbars[a++];)for(var e=0,f;f=b.items[e++];)if(f.focus){f.focus();return}};var g={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){if(a.toolbox){a.toolbox.focusCommandExecuted= -true;CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus()}}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(c){var d,e=function(a,b){var g,k=c.lang.dir=="rtl",m=c.config.toolbarGroupCycling,q=k?37:39,k=k?39:37,m=m===void 0||m;switch(b){case 9:case CKEDITOR.SHIFT+9:for(;!g||!g.items.length;){g=b==9?(g?g.next:a.toolbar.next)||c.toolbox.toolbars[0]:(g?g.previous:a.toolbar.previous)||c.toolbox.toolbars[c.toolbox.toolbars.length-1];if(g.items.length)for(a= -g.items[d?g.items.length-1:0];a&&!a.focus;)(a=d?a.previous:a.next)||(g=0)}a&&a.focus();return false;case q:g=a;do{g=g.next;!g&&m&&(g=a.toolbar.items[0])}while(g&&!g.focus);g?g.focus():e(a,9);return false;case 40:if(a.button&&a.button.hasArrow){c.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});a.execute()}else e(a,b==40?q:k);return false;case k:case 38:g=a;do{g=g.previous;!g&&m&&(g=a.toolbar.items[a.toolbar.items.length-1])}while(g&&!g.focus);if(g)g.focus();else{d=1;e(a, -CKEDITOR.SHIFT+9);d=0}return false;case 27:c.focus();return false;case 13:case 32:a.execute();return false}return true};c.on("uiSpace",function(d){if(d.data.space==c.config.toolbarLocation){d.removeListener();c.toolbox=new b;var g=CKEDITOR.tools.getNextId(),j=['<span id="',g,'" class="cke_voice_label">',c.lang.toolbar.toolbars,"</span>",'<span id="'+c.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',g,'" onmousedown="return false;">'],g=c.config.toolbarStartupExpanded!== -false,k,m;c.config.toolbarCanCollapse&&c.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&j.push('<span class="cke_toolbox_main"'+(g?">":' style="display:none">'));for(var q=c.toolbox.toolbars,s=a(c),n=0;n<s.length;n++){var l,o=0,r,p=s[n],w;if(p){if(k){j.push("</span>");m=k=0}if(p==="/")j.push('<span class="cke_toolbar_break"></span>');else{w=p.items||p;for(var v=0;v<w.length;v++){var x=w[v],u;if(x)if(x.type==CKEDITOR.UI_SEPARATOR)m=k&&x;else{u=x.canGroup!==false;if(!o){l=CKEDITOR.tools.getNextId();o={id:l, -items:[]};r=p.name&&(c.lang.toolbar.toolbarGroups[p.name]||p.name);j.push('<span id="',l,'" class="cke_toolbar"',r?' aria-labelledby="'+l+'_label"':"",' role="toolbar">');r&&j.push('<span id="',l,'_label" class="cke_voice_label">',r,"</span>");j.push('<span class="cke_toolbar_start"></span>');var t=q.push(o)-1;if(t>0){o.previous=q[t-1];o.previous.next=o}}if(u){if(!k){j.push('<span class="cke_toolgroup" role="presentation">');k=1}}else if(k){j.push("</span>");k=0}l=function(a){a=a.render(c,j);t=o.items.push(a)- -1;if(t>0){a.previous=o.items[t-1];a.previous.next=a}a.toolbar=o;a.onkey=e;a.onfocus=function(){c.toolbox.focusCommandExecuted||c.focus()}};if(m){l(m);m=0}l(x)}}if(k){j.push("</span>");m=k=0}o&&j.push('<span class="cke_toolbar_end"></span></span>')}}}c.config.toolbarCanCollapse&&j.push("</span>");if(c.config.toolbarCanCollapse&&c.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var y=CKEDITOR.tools.addFunction(function(){c.execCommand("toolbarCollapse")});c.on("destroy",function(){CKEDITOR.tools.removeFunction(y)}); -c.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),c=b.getPrevious(),d=a.ui.space("contents"),f=c.getParent(),e=parseInt(d.$.style.height,10),g=f.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");if(h){c.show();b.removeClass("cke_toolbox_collapser_min");b.setAttribute("title",a.lang.toolbar.toolbarCollapse)}else{c.hide();b.addClass("cke_toolbox_collapser_min");b.setAttribute("title",a.lang.toolbar.toolbarExpand)}b.getFirst().setText(h?"▲":"◀"); -d.setStyle("height",e-(f.$.offsetHeight-g)+"px");a.fire("resize")},modes:{wysiwyg:1,source:1}});c.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");j.push('<a title="'+(g?c.lang.toolbar.toolbarCollapse:c.lang.toolbar.toolbarExpand)+'" id="'+c.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');g||j.push(" cke_toolbox_collapser_min");j.push('" onclick="CKEDITOR.tools.callFunction('+y+')">','<span class="cke_arrow">&#9650;</span>', -"</a>")}j.push("</span>");d.data.html=d.data.html+j.join("")}});c.on("destroy",function(){if(this.toolbox){var a,b=0,c,d,e;for(a=this.toolbox.toolbars;b<a.length;b++){d=a[b].items;for(c=0;c<d.length;c++){e=d[c];e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn);e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}}}});c.on("uiReady",function(){var a=c.ui.space("toolbox");a&&c.focusManager.add(a,1)});c.addCommand("toolbarFocus",g);c.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");c.ui.add("-",CKEDITOR.UI_SEPARATOR, -{});c.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,b){b.push('<span class="cke_toolbar_separator" role="separator"></span>');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,g){var f=e(this.editor),h=b===0,j={name:a};if(g){if(g=CKEDITOR.tools.search(f,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(b){b=CKEDITOR.tools.indexOf(g.groups,b);if(b>=0){g.groups.splice(b+1,0,a);return}}h?g.groups.splice(0,0,a):g.groups.push(a);return}b=null}b&& -(b=CKEDITOR.tools.indexOf(f,function(a){return a.name==b}));h?f.splice(0,0,a):typeof b=="number"?f.splice(b+1,0,j):f.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){var a=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],e={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(c){function e(a){i.enabled&&a.data.command.canUndo!==false&&i.save()}function g(){i.enabled=c.readOnly?false:c.mode=="wysiwyg";i.onChange()}var i= -c.undoManager=new b(c),m=i.editingHandler=new d(i),q=c.addCommand("undo",{exec:function(){if(i.undo()){c.selectionChange();this.fire("afterUndo")}},startDisabled:true,canUndo:false}),s=c.addCommand("redo",{exec:function(){if(i.redo()){c.selectionChange();this.fire("afterRedo")}},startDisabled:true,canUndo:false});c.setKeystroke([[a[0],"undo"],[a[1],"redo"],[a[2],"redo"]]);i.onChange=function(){q.setState(i.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);s.setState(i.redoable()?CKEDITOR.TRISTATE_OFF: -CKEDITOR.TRISTATE_DISABLED)};c.on("beforeCommandExec",e);c.on("afterCommandExec",e);c.on("saveSnapshot",function(a){i.save(a.data&&a.data.contentOnly)});c.on("contentDom",m.attachListeners,m);c.on("instanceReady",function(){c.fire("saveSnapshot")});c.on("beforeModeUnload",function(){c.mode=="wysiwyg"&&i.save(true)});c.on("mode",g);c.on("readOnly",g);if(c.ui.addButton){c.ui.addButton("Undo",{label:c.lang.undo.undo,command:"undo",toolbar:"undo,10"});c.ui.addButton("Redo",{label:c.lang.undo.redo,command:"redo", -toolbar:"undo,20"})}c.resetUndo=function(){i.reset();c.fire("saveSnapshot")};c.on("updateSnapshot",function(){i.currentImage&&i.update()});c.on("lockSnapshot",function(a){a=a.data;i.lock(a&&a.dontUpdate,a&&a.forceUpdate)});c.on("unlockSnapshot",i.unlock,i)}});CKEDITOR.plugins.undo={};var b=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};b.prototype= -{type:function(a,c){var d=b.getKeyGroup(a),e=this.strokesRecorded[d]+1,c=c||e>=this.strokesLimit;if(!this.typing){this.hasUndo=this.typing=true;this.hasRedo=false;this.onChange()}if(c){e=0;this.editor.fire("saveSnapshot")}else this.editor.fire("change");this.strokesRecorded[d]=e;this.previousKeyGroup=d},keyGroupChanged:function(a){return b.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=false;this.locked=null; -this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=false;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(true);this.hasRedo=!!this.getNextImage(false);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked||d.status!="ready"||d.mode!="wysiwyg")return false;var e=d.editable();if(!e||e.status!="ready")return false;e=this.snapshots;b||(b=new g(d));if(b.contents===false)return false;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a|| -b.equalsSelection(this.currentImage))return false}else c!==false&&d.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;c!==false&&this.refreshState();return true},restoreImage:function(a){var b=this.editor,c;if(a.bookmarks){b.focus();c=b.getSelection()}this.locked={level:999};this.editor.loadSnapshot(a.contents);if(a.bookmarks)c.selectBookmarks(a.bookmarks);else if(CKEDITOR.env.ie){c=this.editor.document.getBody().$.createTextRange(); -c.collapse(true);c.select()}this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;d>=0;d--){a=b[d];if(!c.equalsContent(a)){a.index=d;return a}}else for(d=this.index+1;d<b.length;d++){a=b[d];if(!c.equalsContent(a)){a.index=d;return a}}return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&& -this.hasUndo},undo:function(){if(this.undoable()){this.save(true);var a=this.getNextImage(true);if(a)return this.restoreImage(a),true}return false},redo:function(){if(this.redoable()){this.save(true);if(this.redoable()){var a=this.getNextImage(false);if(a)return this.restoreImage(a),true}}return false},update:function(a){if(!this.locked){a||(a=new g(this.editor));for(var b=this.index,c=this.snapshots;b>0&&this.currentImage.equalsContent(c[b-1]);)b=b-1;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage= -a}},updateSelection:function(a){if(!this.snapshots.length)return false;var b=this.snapshots,c=b[b.length-1];if(c.equalsContent(a)&&!c.equalsSelection(a)){this.currentImage=b[b.length-1]=a;return true}return false},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=true;else{var d=new g(this.editor,true);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a= -this.locked.update;this.locked=null;if(a===true)this.update();else if(a){var b=new g(this.editor,true);a.equalsContent(b)||this.update()}}}};b.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};b.keyGroups={PRINTABLE:0,FUNCTIONAL:1};b.isNavigationKey=function(a){return!!b.navigationKeyCodes[a]};b.getKeyGroup=function(a){var c=b.keyGroups;return e[a]?c.FUNCTIONAL:c.PRINTABLE};b.getOppositeKeyGroup=function(a){var c=b.keyGroups;return a==c.FUNCTIONAL?c.PRINTABLE:c.FUNCTIONAL};b.ieFunctionalKeysBug= -function(a){return CKEDITOR.env.ie&&b.getKeyGroup(a)==b.keyGroups.FUNCTIONAL};var g=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;if(!b)this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(true);a.fire("afterUndoImage")},c=/\b(?:href|src|name)="[^"]*?"/gi;g.prototype={equalsContent:function(a){var b=this.contents,a=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.quirks)){b=b.replace(c,"");a=a.replace(c,"")}return b!=a?false:true},equalsSelection:function(a){var b=this.bookmarks,a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return false;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end,e.end))return false}}return true}};var d=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent= -false;this.keyEventsStack=new i;this.lastKeydownImage=null};d.prototype={onKeydown:function(c){if(CKEDITOR.tools.indexOf(a,c.data.getKeystroke())>-1)c.data.preventDefault();else{this.keyEventsStack.cleanUp(c);var c=c.data.getKey(),d=this.undoManager;this.keyEventsStack.getLast(c)||this.keyEventsStack.push(c);this.lastKeydownImage=new g(d.editor);if(b.isNavigationKey(c)||this.undoManager.keyGroupChanged(c))if(d.strokesRecorded[0]||d.strokesRecorded[1]){d.save(false,this.lastKeydownImage);d.resetType()}}}, -onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=false;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);if(this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit){this.undoManager.type(a.keyCode,true);this.keyEventsStack.resetInputs()}}},onKeyup:function(a){var c=this.undoManager,a=a.data.getKey(),d=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!b.ieFunctionalKeysBug(a)||!this.lastKeydownImage|| -!this.lastKeydownImage.equalsContent(new g(c.editor,true)))if(d>0)c.type(a);else if(b.isNavigationKey(a))this.onNavigationKey(true)},onNavigationKey:function(a){var b=this.undoManager;(a||!b.save(true,null,false))&&b.updateSelection(new g(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=true},attachListeners:function(){var a=this.undoManager.editor,c=a.editable(),d=this;c.attachListener(c,"keydown",function(a){d.onKeydown(a);if(b.ieFunctionalKeysBug(a.data.getKey()))d.onInput()}, -null,null,999);c.attachListener(c,CKEDITOR.env.ie?"keypress":"input",d.onInput,d,null,999);c.attachListener(c,"keyup",d.onKeyup,d,null,999);c.attachListener(c,"paste",d.ignoreInputEventListener,d,null,999);c.attachListener(c,"drop",d.ignoreInputEventListener,d,null,999);c.attachListener(c.isInline()?c:a.document.getDocumentElement(),"click",function(){d.onNavigationKey()},null,null,999);c.attachListener(this.undoManager.editor,"blur",function(){d.keyEventsStack.remove(9)},null,null,999)}};var i=CKEDITOR.plugins.undo.KeyEventsStack= -function(){this.stack=[]};i.prototype={push:function(a){return this.stack[this.stack.push({keyCode:a,inputs:0})-1]},getLastIndex:function(a){if(typeof a!="number")return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return a!=-1?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);a!=-1&&this.stack.splice(a,1)},resetInputs:function(a){if(typeof a== -"number")this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b=b+this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;!a.ctrlKey&&!a.metaKey&&this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}}(),CKEDITOR.config.wsc_removeGlobalVariable=!0,CKEDITOR.plugins.add("wsc",{requires:"dialog",parseApi:function(a){a.config.wsc_onFinish=typeof a.config.wsc_onFinish==="function"?a.config.wsc_onFinish: -function(){};a.config.wsc_onClose=typeof a.config.wsc_onClose==="function"?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds||CKEDITOR.config.wsc_customDictionaryIds||"";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName|| -"";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||"spell";CKEDITOR.config.wsc_version=CKEDITOR.version+" | %Rev%"},init:function(a){var e=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes={wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(e.ie&&(e.version<8||e.quirks))}; -typeof a.plugins.scayt=="undefined"&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,click:function(a){var e=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(e=e.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&CKEDITOR.env.version<=7?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}}), -function(){function a(a){var b=this.editor,g=a.document,f=g.body,h=g.getElementById("cke_actscrpt");h&&h.parentNode.removeChild(h);(h=g.getElementById("cke_shimscrpt"))&&h.parentNode.removeChild(h);(h=g.getElementById("cke_basetagscrpt"))&&h.parentNode.removeChild(h);if(CKEDITOR.env.gecko){f.contentEditable=false;if(CKEDITOR.env.version<2E4){f.innerHTML=f.innerHTML.replace(/^.*<\!-- cke-content-start --\>/,"");setTimeout(function(){var a=new CKEDITOR.dom.range(new CKEDITOR.dom.document(g));a.setStart(new CKEDITOR.dom.node(f), -0);b.getSelection().selectRanges([a])},0)}}f.contentEditable=true;if(CKEDITOR.env.ie){f.hideFocus=true;f.disabled=true;f.removeAttribute("disabled")}delete this._.isLoadingData;this.$=f;g=new CKEDITOR.dom.document(g);this.setup();if(CKEDITOR.env.ie){g.getDocumentElement().addClass(g.$.compatMode);b.config.enterMode!=CKEDITOR.ENTER_P&&this.attachListener(g,"selectionchange",function(){var a=g.getBody(),c=b.getSelection(),e=c&&c.getRanges()[0];e&&(a.getHtml().match(/^<p>(?:&nbsp;|<br>)<\/p>$/i)&&e.startContainer.equals(a))&& -setTimeout(function(){e=b.getSelection().getRanges()[0];if(!e.startContainer.equals("body")){a.getFirst().remove(1);e.moveToElementEditEnd(a);e.select()}},0)})}if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&CKEDITOR.env.version>10)g.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){b.editable().focus()})});e(b);try{b.document.$.execCommand("2D-position",false,true)}catch(j){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&b.document.$.compatMode=="CSS1Compat")&& -this.attachListener(this,"keydown",function(a){var c=a.data.getKeystroke();if(c==33||c==34)if(CKEDITOR.env.ie)setTimeout(function(){b.getSelection().scrollIntoView()},0);else if(b.window.$.innerHeight>this.$.offsetHeight){var e=b.createRange();e[c==33?"moveToElementEditStart":"moveToElementEditEnd"](this);e.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(g,"blur",function(){try{g.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(g,"touchend",function(){a.focus()}); -h=b.document.getElementsByTag("title").getItem(0);h.data("cke-title",h.getText());if(CKEDITOR.env.ie)b.document.$.title=this._.docTitle;CKEDITOR.tools.setTimeout(function(){if(this.status=="unloaded")this.status="ready";b.fire("contentDom");if(this._.isPendingFocus){b.focus();this._.isPendingFocus=false}setTimeout(function(){b.fire("dataReady")},0);CKEDITOR.env.ie&&setTimeout(function(){if(b.document){var a=b.document.$.body;a.runtimeStyle.marginBottom="0px";a.runtimeStyle.marginBottom=""}},1E3)}, -0,this)}function e(a){function b(){var d;a.editable().attachListener(a,"selectionChange",function(){var b=a.getSelection().getSelectedElement();if(b){if(d){d.detachEvent("onresizestart",e);d=null}b.$.attachEvent("onresizestart",e);d=b.$}})}function e(a){a.returnValue=false}if(CKEDITOR.env.gecko)try{var f=a.document.$;f.execCommand("enableObjectResizing",false,!a.config.disableObjectResizing);f.execCommand("enableInlineTableEditing",false,!a.config.disableNativeTableHandles)}catch(g){}else CKEDITOR.env.ie&& -(CKEDITOR.env.version<11&&a.config.disableObjectResizing)&&b(a)}function b(){var a=[];if(CKEDITOR.document.$.documentMode>=8){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var b=[],e;for(e in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+e+"[contenteditable=false]");a.push(b.join(",")+"{display:inline-block}")}else if(CKEDITOR.env.gecko){a.push("html{height:100% !important}");a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}a.push("html{cursor:text;*cursor:auto}"); -a.push("img,input,textarea{cursor:default}");return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(b){function e(f){f&&f.removeListener();a.editable(new g(a,h.$.contentWindow.document.body));a.setData(a.getData(1),b)}var f="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();", -f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent(f)+"}())":"",h=CKEDITOR.dom.element.createFromHtml('<iframe src="'+f+'" frameBorder="0"></iframe>');h.setStyles({width:"100%",height:"100%"});h.addClass("cke_wysiwyg_frame cke_reset");var j=a.ui.space("contents");j.append(h);if(f=CKEDITOR.env.ie||CKEDITOR.env.gecko)h.on("load",e);var k=a.title,m=a.fire("ariaEditorHelpLabel",{}).label;if(k){CKEDITOR.env.ie&&m&&(k=k+(", "+m));h.setAttribute("title", -k)}if(m){var k=CKEDITOR.tools.getNextId(),q=CKEDITOR.dom.element.createFromHtml('<span id="'+k+'" class="cke_voice_label">'+m+"</span>");j.append(q,1);h.setAttribute("aria-describedby",k)}a.on("beforeModeUnload",function(a){a.removeListener();q&&q.remove()});h.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!f&&e();if(CKEDITOR.env.webkit){f=function(){j.setStyle("width","100%");h.hide();h.setSize("width",j.getSize("width"));j.removeStyle("width");h.show()};h.setCustomData("onResize", -f);CKEDITOR.document.getWindow().on("resize",f)}a.fire("ariaWidget",h)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,e=b.contentsCss;if(!CKEDITOR.tools.isArray(e))b.contentsCss=e?[e]:[];b.contentsCss.push(a)};var g=CKEDITOR.tools.createClass({$:function(b){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(b){CKEDITOR.tools.setTimeout(a,0,this,b)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable, -proto:{setData:function(a,d){var e=this.editor;if(d){this.setHtml(a);e.fire("dataReady")}else{this._.isLoadingData=true;e._.dataStore={id:1};var f=e.config,g=f.fullPage,j=f.docType,k=CKEDITOR.tools.buildStyleHtml(b()).replace(/<style>/,'<style data-cke-temp="1">');g||(k=k+CKEDITOR.tools.buildStyleHtml(e.config.contentsCss));var m=f.baseHref?'<base href="'+f.baseHref+'" data-cke-temp="1" />':"";g&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){e.docType=j=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){e.xmlDeclaration= -a;return""}));a=e.dataProcessor.toHtml(a);if(g){/<body[\s|>]/.test(a)||(a="<body>"+a);/<html[\s|>]/.test(a)||(a="<html>"+a+"</html>");/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>");m&&(a=a.replace(/<head[^>]*?>/,"$&"+m));a=a.replace(/<\/head\s*>/,k+"$&");a=j+a}else a=f.docType+'<html dir="'+f.contentsLangDirection+'" lang="'+(f.contentsLanguage||e.langCode)+'"><head><title>'+this._.docTitle+ -"</title>"+m+k+"</head><body"+(f.bodyId?' id="'+f.bodyId+'"':"")+(f.bodyClass?' class="'+f.bodyClass+'"':"")+">"+a+"</body></html>";if(CKEDITOR.env.gecko){a=a.replace(/<body/,'<body contenteditable="true" ');CKEDITOR.env.version<2E4&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>"))}f='<script id="cke_actscrpt" type="text/javascript"'+(CKEDITOR.env.ie?' defer="defer" ':"")+">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+ -",window);wasLoaded=1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"<\/script>";CKEDITOR.env.ie&&CKEDITOR.env.version<9&&(f=f+'<script id="cke_shimscrpt">window.parent.CKEDITOR.tools.enableHtml5Elements(document)<\/script>');m&&(CKEDITOR.env.ie&&CKEDITOR.env.version<10)&&(f=f+'<script id="cke_basetagscrpt">var baseTag = document.querySelector( "base" );baseTag.href = baseTag.href;<\/script>');a=a.replace(/(?=\s*<\/(:?head)>)/,f);this.clearCustomData(); -this.clearListeners();e.fire("contentDomUnload");var q=this.getDocument();try{q.write(a)}catch(s){setTimeout(function(){q.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();var a=this.editor,b=a.config,e=b.fullPage,f=e&&a.docType,g=e&&a.xmlDeclaration,j=this.getDocument(),e=e?j.getDocumentElement().getOuterHtml():j.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,""));e=a.dataProcessor.toDataFormat(e);g&&(e=g+"\n"+e);f&&(e= -f+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=true:g.baseProto.focus.call(this)},detach:function(){var a=this.editor,b=a.document,a=a.window.getFrame();g.baseProto.detach.call(this);this.clearCustomData();b.getDocumentElement().clearCustomData();a.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(b=a.removeCustomData("onResize"))&&b.removeListener();a.remove()}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles= -!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css"),CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,basicstyles,blockquote,clipboard,panel,floatpanel,menu,contextmenu,elementspath,indent,indentlist,list,enterkey,entities,popup,filebrowser,floatingspace,listblock,button,richcombo,format,horizontalrule,htmlwriter,image,fakeobjects,link,magicline,maximize,pastefromword,pastetext,removeformat,resize,menubutton,scayt,showborders,sourcearea,specialchar,stylescombo,tab,table,tabletools,toolbar,undo,wsc,wysiwygarea", -CKEDITOR.config.skin="moono",function(){var a=function(a,b){for(var g=CKEDITOR.getUrl("plugins/"+b),a=a.split(","),c=0;c<a.length;c++)CKEDITOR.skin.icons[a[c]]={path:g,offset:-a[++c],bgsize:a[++c]}};CKEDITOR.env.hidpi?a("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,codesnippet,384,,bgcolor,408,,textcolor,432,,creatediv,456,,docprops-rtl,480,,docprops,504,,find-rtl,528,,find,552,,replace,576,,flash,600,,button,624,,checkbox,648,,form,672,,hiddenfield,696,,imagebutton,720,,radio,744,,select-rtl,768,,select,792,,textarea-rtl,816,,textarea,840,,textfield-rtl,864,,textfield,888,,horizontalrule,912,,iframe,936,,image,960,,indent-rtl,984,,indent,1008,,outdent-rtl,1032,,outdent,1056,,justifyblock,1080,,justifycenter,1104,,justifyleft,1128,,justifyright,1152,,language,1176,,anchor-rtl,1200,,anchor,1224,,link,1248,,unlink,1272,,bulletedlist-rtl,1296,,bulletedlist,1320,,numberedlist-rtl,1344,,numberedlist,1368,,mathjax,1392,,maximize,1416,,newpage-rtl,1440,,newpage,1464,,pagebreak-rtl,1488,,pagebreak,1512,,pastefromword-rtl,1536,,pastefromword,1560,,pastetext-rtl,1584,,pastetext,1608,,placeholder,1632,,preview-rtl,1656,,preview,1680,,print,1704,,removeformat,1728,,save,1752,,scayt,1776,,selectall,1800,,showblocks-rtl,1824,,showblocks,1848,,smiley,1872,,source-rtl,1896,,source,1920,,sourcedialog-rtl,1944,,sourcedialog,1968,,specialchar,1992,,table,2016,,templates-rtl,2040,,templates,2064,,uicolor,2088,,redo-rtl,2112,,redo,2136,,undo-rtl,2160,,undo,2184,,simplebox,4416,auto,spellchecker,2232,", -"icons_hidpi.png"):a("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,codesnippet,384,auto,bgcolor,408,auto,textcolor,432,auto,creatediv,456,auto,docprops-rtl,480,auto,docprops,504,auto,find-rtl,528,auto,find,552,auto,replace,576,auto,flash,600,auto,button,624,auto,checkbox,648,auto,form,672,auto,hiddenfield,696,auto,imagebutton,720,auto,radio,744,auto,select-rtl,768,auto,select,792,auto,textarea-rtl,816,auto,textarea,840,auto,textfield-rtl,864,auto,textfield,888,auto,horizontalrule,912,auto,iframe,936,auto,image,960,auto,indent-rtl,984,auto,indent,1008,auto,outdent-rtl,1032,auto,outdent,1056,auto,justifyblock,1080,auto,justifycenter,1104,auto,justifyleft,1128,auto,justifyright,1152,auto,language,1176,auto,anchor-rtl,1200,auto,anchor,1224,auto,link,1248,auto,unlink,1272,auto,bulletedlist-rtl,1296,auto,bulletedlist,1320,auto,numberedlist-rtl,1344,auto,numberedlist,1368,auto,mathjax,1392,auto,maximize,1416,auto,newpage-rtl,1440,auto,newpage,1464,auto,pagebreak-rtl,1488,auto,pagebreak,1512,auto,pastefromword-rtl,1536,auto,pastefromword,1560,auto,pastetext-rtl,1584,auto,pastetext,1608,auto,placeholder,1632,auto,preview-rtl,1656,auto,preview,1680,auto,print,1704,auto,removeformat,1728,auto,save,1752,auto,scayt,1776,auto,selectall,1800,auto,showblocks-rtl,1824,auto,showblocks,1848,auto,smiley,1872,auto,source-rtl,1896,auto,source,1920,auto,sourcedialog-rtl,1944,auto,sourcedialog,1968,auto,specialchar,1992,auto,table,2016,auto,templates-rtl,2040,auto,templates,2064,auto,uicolor,2088,auto,redo-rtl,2112,auto,redo,2136,auto,undo-rtl,2160,auto,undo,2184,auto,simplebox,2208,auto,spellchecker,2232,auto", -"icons.png")}()})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/composer.json b/platforms/android/assets/www/lib/ckeditor/composer.json deleted file mode 100644 index dc3a40d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/composer.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "ckeditor/ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "type": "library", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "homepage": "http://ckeditor.com", - "license": [ "GPL-2.0+", "LGPL-2.1+", "MPL-1.1+" ], - "authors": [ - { - "name": "CKSource", - "homepage": "http://cksource.com" - } - ], - "support": { - "issues": "http://dev.ckeditor.com", - "forum": "http://ckeditor.com/forums", - "wiki": "http://docs.ckeditor.com", - "source": "http://github.com/ckeditor/ckeditor-dev" - } -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/config.js b/platforms/android/assets/www/lib/ckeditor/config.js deleted file mode 100644 index d3e7f5d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/config.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -CKEDITOR.editorConfig = function( config ) { - // Define changes to default configuration here. - // For complete reference see: - // http://docs.ckeditor.com/#!/api/CKEDITOR.config - - // The toolbar groups arrangement, optimized for two toolbar rows. - config.toolbarGroups = [ - { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, - { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, - { name: 'links' }, - { name: 'insert' }, - { name: 'forms' }, - { name: 'tools' }, - { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, - { name: 'others' }, - '/', - { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, - { name: 'styles' }, - { name: 'colors' }, - { name: 'about' } - ]; - - // Remove some buttons provided by the standard plugins, which are - // not needed in the Standard(s) toolbar. - config.removeButtons = 'Underline,Subscript,Superscript'; - - // Set the most common block elements. - config.format_tags = 'p;h1;h2;h3;pre'; - - // Simplify the dialog windows. - config.removeDialogTabs = 'image:advanced;link:advanced'; -}; diff --git a/platforms/android/assets/www/lib/ckeditor/contents.css b/platforms/android/assets/www/lib/ckeditor/contents.css deleted file mode 100644 index f29bc0a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/contents.css +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -body -{ - /* Font */ - font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; - font-size: 12px; - - /* Text color */ - color: #333; - - /* Remove the background color to make it transparent */ - background-color: #fff; - - margin: 20px; -} - -.cke_editable -{ - font-size: 13px; - line-height: 1.6; -} - -blockquote -{ - font-style: italic; - font-family: Georgia, Times, "Times New Roman", serif; - padding: 2px 0; - border-style: solid; - border-color: #ccc; - border-width: 0; -} - -.cke_contents_ltr blockquote -{ - padding-left: 20px; - padding-right: 8px; - border-left-width: 5px; -} - -.cke_contents_rtl blockquote -{ - padding-left: 8px; - padding-right: 20px; - border-right-width: 5px; -} - -a -{ - color: #0782C1; -} - -ol,ul,dl -{ - /* IE7: reset rtl list margin. (#7334) */ - *margin-right: 0px; - /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/ - padding: 0 40px; -} - -h1,h2,h3,h4,h5,h6 -{ - font-weight: normal; - line-height: 1.2; -} - -hr -{ - border: 0px; - border-top: 1px solid #ccc; -} - -img.right -{ - border: 1px solid #ccc; - float: right; - margin-left: 15px; - padding: 5px; -} - -img.left -{ - border: 1px solid #ccc; - float: left; - margin-right: 15px; - padding: 5px; -} - -pre -{ - white-space: pre-wrap; /* CSS 2.1 */ - word-wrap: break-word; /* IE7 */ - -moz-tab-size: 4; - -o-tab-size: 4; - -webkit-tab-size: 4; - tab-size: 4; -} - -.marker -{ - background-color: Yellow; -} - -span[lang] -{ - font-style: italic; -} - -figure -{ - text-align: center; - border: solid 1px #ccc; - border-radius: 2px; - background: rgba(0,0,0,0.05); - padding: 10px; - margin: 10px 20px; - display: inline-block; -} - -figure > figcaption -{ - text-align: center; - display: block; /* For IE8 */ -} - -a > img { - padding: 1px; - margin: 1px; - border: none; - outline: 1px solid #0782C1; -} diff --git a/platforms/android/assets/www/lib/ckeditor/lang/_translationstatus.txt b/platforms/android/assets/www/lib/ckeditor/lang/_translationstatus.txt deleted file mode 100644 index 085e66c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/_translationstatus.txt +++ /dev/null @@ -1,63 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -af.js Found: 62 Missing: 4 -ar.js Found: 51 Missing: 15 -bg.js Found: 58 Missing: 8 -bn.js Found: 40 Missing: 26 -bs.js Found: 29 Missing: 37 -ca.js Found: 61 Missing: 5 -cs.js Found: 66 Missing: 0 -cy.js Found: 66 Missing: 0 -da.js Found: 66 Missing: 0 -de.js Found: 66 Missing: 0 -el.js Found: 59 Missing: 7 -en-au.js Found: 38 Missing: 28 -en-ca.js Found: 37 Missing: 29 -en-gb.js Found: 61 Missing: 5 -eo.js Found: 66 Missing: 0 -es.js Found: 66 Missing: 0 -et.js Found: 66 Missing: 0 -eu.js Found: 48 Missing: 18 -fa.js Found: 66 Missing: 0 -fi.js Found: 66 Missing: 0 -fo.js Found: 66 Missing: 0 -fr-ca.js Found: 42 Missing: 24 -fr.js Found: 66 Missing: 0 -gl.js Found: 40 Missing: 26 -gu.js Found: 66 Missing: 0 -he.js Found: 66 Missing: 0 -hi.js Found: 43 Missing: 23 -hr.js Found: 66 Missing: 0 -hu.js Found: 63 Missing: 3 -is.js Found: 41 Missing: 25 -it.js Found: 66 Missing: 0 -ja.js Found: 62 Missing: 4 -ka.js Found: 62 Missing: 4 -km.js Found: 40 Missing: 26 -ko.js Found: 40 Missing: 26 -lt.js Found: 66 Missing: 0 -lv.js Found: 40 Missing: 26 -mk.js Found: 0 Missing: 66 -mn.js Found: 40 Missing: 26 -ms.js Found: 39 Missing: 27 -nb.js Found: 66 Missing: 0 -nl.js Found: 65 Missing: 1 -no.js Found: 66 Missing: 0 -pl.js Found: 66 Missing: 0 -pt-br.js Found: 66 Missing: 0 -pt.js Found: 52 Missing: 14 -ro.js Found: 61 Missing: 5 -ru.js Found: 66 Missing: 0 -sk.js Found: 49 Missing: 17 -sl.js Found: 48 Missing: 18 -sr-latn.js Found: 40 Missing: 26 -sr.js Found: 40 Missing: 26 -sv.js Found: 62 Missing: 4 -th.js Found: 40 Missing: 26 -tr.js Found: 66 Missing: 0 -ug.js Found: 66 Missing: 0 -uk.js Found: 66 Missing: 0 -vi.js Found: 66 Missing: 0 -zh-cn.js Found: 66 Missing: 0 -zh.js Found: 58 Missing: 8 diff --git a/platforms/android/assets/www/lib/ckeditor/lang/af.js b/platforms/android/assets/www/lib/ckeditor/lang/af.js deleted file mode 100644 index edfbce24..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/af.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['af']={"wsc":{"btnIgnore":"Ignoreer","btnIgnoreAll":"Ignoreer alles","btnReplace":"Vervang","btnReplaceAll":"vervang alles","btnUndo":"Ontdoen","changeTo":"Verander na","errorLoading":"Fout by inlaai van diens: %s.","ieSpellDownload":"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?","manyChanges":"Klaar met speltoets: %1 woorde verander","noChanges":"Klaar met speltoets: Geen woorde verander nie","noMispell":"Klaar met speltoets: Geen foute nie","noSuggestions":"- Geen voorstel -","notAvailable":"Jammer, hierdie diens is nie nou beskikbaar nie.","notInDic":"Nie in woordeboek nie","oneChange":"Klaar met speltoets: Een woord verander","progress":"Spelling word getoets...","title":"Speltoetser","toolbar":"Speltoets"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"stylescombo":{"label":"Styl","panelTitle":"Opmaak style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"sourcearea":{"toolbar":"Bron"},"scayt":{"btn_about":"SCAYT info","btn_dictionaries":"Woordeboeke","btn_disable":"SCAYT af","btn_enable":"SCAYT aan","btn_langs":"Tale","btn_options":"Opsies","text_title":""},"removeformat":{"toolbar":"Verwyder opmaak"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"<ander>","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"<raam>","targetFrameName":"Naam van doelraam","targetPopup":"<opspringvenster>","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"image":{"alertUrl":"Gee URL van afbeelding.","alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Sitaatblok"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurstreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Info oor CKEditor","help":"Check $1 for help.","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:","title":"Info oor CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Teksverwerker","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur na bediener","image":"Afbeelding","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teks-area","hiddenField":"Blinde veld","button":"Knop","select":"Keuseveld","imageButton":"Afbeeldingsknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Sleep om te herskaal","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n getal nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Doel","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Oplyn","alignLeft":"Links","alignRight":"Regs","alignCenter":"Sentreer","alignJustify":"Uitvul","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/lang/ar.js deleted file mode 100644 index f1586649..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ar']={"wsc":{"btnIgnore":"تجاهل","btnIgnoreAll":"تجاهل الكل","btnReplace":"تغيير","btnReplaceAll":"تغيير الكل","btnUndo":"تراجع","changeTo":"التغيير إلى","errorLoading":"خطأ في تحميل تطبيق خدمة الاستضافة: %s.","ieSpellDownload":"المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟","manyChanges":"تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات","noChanges":"تم التدقيق الإملائي: لم يتم تغيير أي كلمة","noMispell":"تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية","noSuggestions":"- لا توجد إقتراحات -","notAvailable":"عفواً، ولكن هذه الخدمة غير متاحة الان","notInDic":"ليست في القاموس","oneChange":"تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط","progress":"جاري التدقيق الاملائى","title":"التدقيق الإملائي","toolbar":"تدقيق إملائي"},"undo":{"redo":"إعادة","undo":"تراجع"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج حرف خاص"},"sourcearea":{"toolbar":"المصدر"},"scayt":{"btn_about":"عن SCAYT","btn_dictionaries":"قواميس","btn_disable":"تعطيل SCAYT","btn_enable":"تفعيل SCAYT","btn_langs":"لغات","btn_options":"خيارات","text_title":""},"removeformat":{"toolbar":"إزالة التنسيقات"},"pastetext":{"button":"لصق كنص بسيط","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"magicline":{"title":"إدراج فقرة هنا"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"link":{"acccessKey":"مفاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"إزالة الإشارة المرجعية"},"anchorId":"حسب رقم العنصر","anchorName":"حسب إسم الإشارة المرجعية","charset":"ترميز المادة المطلوبة","cssClasses":"فئات التنسيق","emailAddress":"البريد الإلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"رمز اللغة","langDir":"إتجاه نص اللغة","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير الرابط","name":"إسم","noAnchors":"(لا توجد علامات مرجعية في هذا المستند)","noEmail":"الرجاء كتابة الريد الإلكتروني","noUrl":"الرجاء كتابة رابط الموقع","other":"<أخرى>","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص النافذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"العلاقة","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هدف الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدف","targetPopup":"<نافذة منبثقة>","targetPopupName":"اسم النافذة المنبثقة","title":"رابط","toAnchor":"مكان في هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رفع"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"image":{"alertUrl":"فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.","alt":"عنوان الصورة","border":"سمك الحدود","btnUpload":"أرسلها للخادم","button2Img":"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟","hSpace":"تباعد أفقي","img2Button":"هل تريد تحويل الصورة المختارة إلى زر صورة؟","infoTab":"معلومات الصورة","linkTab":"الرابط","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","resetSize":"إستعادة الحجم الأصلي","title":"خصائص الصورة","titleButton":"خصائص زر الصورة","upload":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","vSpace":"تباعد عمودي","validateBorder":"الإطار يجب أن يكون عددا","validateHSpace":"HSpace يجب أن يكون عدداً.","validateVSpace":"VSpace يجب أن يكون عدداً."},"horizontalrule":{"toolbar":"خط فاصل"},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالفلاش","hiddenfield":"إدراج حقل خفي","iframe":"iframe","unknown":"عنصر غير معروف"},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"contextmenu":{"options":"خصائص قائمة السياق"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteArea":"منطقة اللصق","pasteMsg":"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر <STRONG>موافق</STRONG>.","securityMsg":"نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.","title":"لصق"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"اقتباس"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","help":"راجع $1 من أجل المساعدة","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:","title":"عن CKEditor","userGuide":"دليل مستخدم CKEditor."},"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","alignLeft":"يسار","alignRight":"يمين","alignCenter":"وسط","alignJustify":"ضبط","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/lang/bg.js deleted file mode 100644 index f0db4fd0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bg']={"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай всичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий всичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- Няма препоръчани -","notAvailable":"Съжаляваме, но услугата не е достъпна за момента","notInDic":"Не е в речника","oneChange":"Spell check complete: One word changed","progress":"Проверява се правописа...","title":"Проверка на правопис","toolbar":"Проверка на правопис"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Undo","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е позитивно число.","invalidCellSpacing":"Интервала в клетките трябва да е позитивно число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Вътрешни стилове","panelTitle3":"Обектни стилове"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"sourcearea":{"toolbar":"Източник"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Речници","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Премахване на форматирането"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"magicline":{"title":"Вмъкнете параграф тук"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"image":{"alertUrl":"Моля, въведете пълния път до изображението","alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати я на сървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отстъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за снимка","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки за снимка","resetSize":"Нулиране на размер","title":"Настройки за снимка","titleButton":"Настойки за бутон за снимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отстъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опции на контекстното меню"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.","securityMsg":"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Блок за цитат"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Относно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна информация моля посетете сайта ни:","title":"Относно CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Текстов редактор за форматиран текст","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignJustify":"Двустранно подравняване","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"None","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/lang/bn.js deleted file mode 100644 index bbbf8f54..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/bn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bn']={"wsc":{"btnIgnore":"ইগনোর কর","btnIgnoreAll":"সব ইগনোর কর","btnReplace":"বদলে দাও","btnReplaceAll":"সব বদলে দাও","btnUndo":"আন্ডু","changeTo":"এতে বদলাও","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?","manyChanges":"বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে","noChanges":"বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি","noMispell":"বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি","noSuggestions":"- কোন সাজেশন নেই -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"শব্দকোষে নেই","oneChange":"বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে","progress":"বানান পরীক্ষা চলছে...","title":"Spell Check","toolbar":"বানান চেক"},"undo":{"redo":"রি-ডু","undo":"আনডু"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"বর্ডার সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"stylescombo":{"label":"স্টাইল","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"sourcearea":{"toolbar":"সোর্স"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ফরমেট সরাও"},"pastetext":{"button":"সাদা টেক্সট হিসেবে পেস্ট কর","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"বুলেট লিস্ট লেবেল","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"link":{"acccessKey":"এক্সেস কী","advanced":"এডভান্সড","advisoryContentType":"পরামর্শ কন্টেন্টের প্রকার","advisoryTitle":"পরামর্শ শীর্ষক","anchor":{"toolbar":"নোঙ্গর","menu":"নোঙর প্রোপার্টি","title":"নোঙর প্রোপার্টি","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করুন","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোর্স ক্যারেক্টর সেট","cssClasses":"স্টাইল-শীট ক্লাস","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথ্য","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সম্পাদন","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন","noUrl":"অনুগ্রহ করে URL লিংক টাইপ করুন","other":"<other>","popupDependent":"ডিপেন্ডেন্ট (Netscape)","popupFeatures":"পপআপ উইন্ডো ফীচার সমূহ","popupFullScreen":"পূর্ণ পর্দা জুড়ে (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেন্যু বার","popupResizable":"Resizable","popupScrollBars":"স্ক্রল বার","popupStatusBar":"স্ট্যাটাস বার","popupToolbar":"টুল বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"স্টাইল","tabIndex":"ট্যাব ইন্ডেক্স","target":"টার্গেট","targetFrame":"<ফ্রেম>","targetFrameName":"টার্গেট ফ্রেমের নাম","targetPopup":"<পপআপ উইন্ডো>","targetPopupName":"পপআপ উইন্ডোর নাম","title":"লিংক","toAnchor":"এই পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toolbar":"লিংক যুক্ত কর","type":"লিংক প্রকার","unlink":"লিংক সরাও","upload":"আপলোড"},"indent":{"indent":"ইনডেন্ট বাড়াও","outdent":"ইনডেন্ট কমাও"},"image":{"alertUrl":"অনুগ্রহক করে ছবির URL টাইপ করুন","alt":"বিকল্প টেক্সট","border":"বর্ডার","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"হরাইজন্টাল স্পেস","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ছবির তথ্য","linkTab":"লিংক","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","title":"ছবির প্রোপার্টি","titleButton":"ছবি বাটন প্রোপার্টি","upload":"আপলোড","urlMissing":"Image source URL is missing.","vSpace":"ভার্টিকেল স্পেস","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"রেখা যুক্ত কর"},"format":{"label":"ফন্ট ফরমেট","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteArea":"Paste Area","pasteMsg":"অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"পেস্ট"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"বোল্ড","italic":"ইটালিক","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","alignLeft":"বামে","alignRight":"ডানে","alignCenter":"মাঝখানে","alignJustify":"ব্লক জাস্টিফাই","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/lang/bs.js deleted file mode 100644 index c2550e9e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/bs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bs']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Ponovi","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"sourcearea":{"toolbar":"HTML kôd"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Poništi format"},"pastetext":{"button":"Zalijepi kao obièan tekst","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","other":"<other>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"<frejm>","targetFrameName":"Target Frame Name","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"image":{"alertUrl":"Molimo ukucajte URL od slike.","alt":"Tekst na slici","border":"Okvir","btnUpload":"Šalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","resetSize":"Resetuj dimenzije","title":"Svojstva slike","titleButton":"Image Button Properties","upload":"Šalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Centar","alignJustify":"Puno poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/lang/ca.js deleted file mode 100644 index c9d68a5b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ca']={"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora-les totes","btnReplace":"Canvia","btnReplaceAll":"Canvia-les totes","btnUndo":"Desfés","changeTo":"Reemplaça amb","errorLoading":"Error carregant el servidor: %s.","ieSpellDownload":"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?","manyChanges":"Verificació ortogràfica: s'han canviat %1 paraules","noChanges":"Verificació ortogràfica: no s'ha canviat cap paraula","noMispell":"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita","noSuggestions":"Cap suggeriment","notAvailable":"El servei no es troba disponible ara.","notInDic":"No és al diccionari","oneChange":"Verificació ortogràfica: s'ha canviat una paraula","progress":"Verificació ortogràfica en curs...","title":"Comprova l'ortografia","toolbar":"Revisa l'ortografia"},"undo":{"redo":"Refés","undo":"Desfés"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"sourcearea":{"toolbar":"Codi font"},"scayt":{"btn_about":"Quant a l'SCAYT","btn_dictionaries":"Diccionaris","btn_disable":"Deshabilita SCAYT","btn_enable":"Habilitat l'SCAYT","btn_langs":"Idiomes","btn_options":"Opcions","text_title":""},"removeformat":{"toolbar":"Elimina Format"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"magicline":{"title":"Insereix el paràgraf aquí"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"image":{"alertUrl":"Si us plau, escriviu la URL de la imatge","alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxar"},"button":{"selectedLabel":"%1 (Seleccionat)"},"blockquote":{"toolbar":"Bloc de cita"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor","help":"Premi $1 per obtenir ajuda.","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:","title":"Quant al CKEditor","userGuide":"Manual d'usuari de CKEditor"},"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignJustify":"Justificat","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"None","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/lang/cs.js deleted file mode 100644 index afa68d30..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['cs']={"wsc":{"btnIgnore":"Přeskočit","btnIgnoreAll":"Přeskakovat vše","btnReplace":"Zaměnit","btnReplaceAll":"Zaměňovat vše","btnUndo":"Zpět","changeTo":"Změnit na","errorLoading":"Chyba nahrávání služby aplikace z: %s.","ieSpellDownload":"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?","manyChanges":"Kontrola pravopisu dokončena: %1 slov změněno","noChanges":"Kontrola pravopisu dokončena: Beze změn","noMispell":"Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny","noSuggestions":"- žádné návrhy -","notAvailable":"Omlouváme se, ale služba nyní není dostupná.","notInDic":"Není ve slovníku","oneChange":"Kontrola pravopisu dokončena: Jedno slovo změněno","progress":"Probíhá kontrola pravopisu...","title":"Kontrola pravopisu","toolbar":"Zkontrolovat pravopis"},"undo":{"redo":"Znovu","undo":"Zpět"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"sourcearea":{"toolbar":"Zdroj"},"scayt":{"btn_about":"O aplikaci SCAYT","btn_dictionaries":"Slovníky","btn_disable":"Vypnout SCAYT","btn_enable":"Zapnout SCAYT","btn_langs":"Jazyky","btn_options":"Nastavení","text_title":""},"removeformat":{"toolbar":"Odstranit formátování"},"pastetext":{"button":"Vložit jako čistý text","title":"Vložit jako čistý text"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"magicline":{"title":"zde vložit odstavec"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"image":{"alertUrl":"Zadejte prosím URL obrázku","alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?","hSpace":"Horizontální mezera","img2Button":"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlačítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých číslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých číslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých číslech."},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"button":{"selectedLabel":"%1 (Vybráno)"},"blockquote":{"toolbar":"Citace"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor","help":"Prohlédněte si $1 pro nápovědu.","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:","title":"O aplikaci CKEditor","userGuide":"Uživatelská příručka CKEditor"},"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na střed","alignJustify":"Zarovnat do bloku","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/lang/cy.js deleted file mode 100644 index 4bb05316..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['cy']={"wsc":{"btnIgnore":"Anwybyddu Un","btnIgnoreAll":"Anwybyddu Pob","btnReplace":"Amnewid Un","btnReplaceAll":"Amnewid Pob","btnUndo":"Dadwneud","changeTo":"Newid i","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?","manyChanges":"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair","noChanges":"Gwirio sillafu wedi gorffen: Dim newidiadau","noMispell":"Gwirio sillafu wedi gorffen: Dim camsillaf.","noSuggestions":"- Dim awgrymiadau -","notAvailable":"Nid yw'r gwasanaeth hwn ar gael yn bresennol.","notInDic":"Nid i'w gael yn y geiriadur","oneChange":"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair","progress":"Gwirio sillafu yn ar y gweill...","title":"Gwirio Sillafu","toolbar":"Gwirio Sillafu"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"sourcearea":{"toolbar":"HTML"},"scayt":{"btn_about":"Ynghylch SCAYT","btn_dictionaries":"Geiriaduron","btn_disable":"Analluogi SCAYT","btn_enable":"Galluogi SCAYT","btn_langs":"Ieithoedd","btn_options":"Opsiynau","text_title":""},"removeformat":{"toolbar":"Tynnu Fformat"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"magicline":{"title":"Mewnosod paragraff yma"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"image":{"alertUrl":"Rhowch URL y ddelwedd","alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Dyfyniad bloc"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"Ynghylch CKEditor","help":"Gwirio $1 am gymorth.","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:","title":"Ynghylch CKEditor","userGuide":"Canllawiau Defnyddiwr CKEditor"},"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignJustify":"Unioni","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/da.js b/platforms/android/assets/www/lib/ckeditor/lang/da.js deleted file mode 100644 index 6942e80d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['da']={"wsc":{"btnIgnore":"Ignorér","btnIgnoreAll":"Ignorér alle","btnReplace":"Erstat","btnReplaceAll":"Erstat alle","btnUndo":"Tilbage","changeTo":"Forslag","errorLoading":"Fejl ved indlæsning af host: %s.","ieSpellDownload":"Stavekontrol ikke installeret. Vil du installere den nu?","manyChanges":"Stavekontrol færdig: %1 ord ændret","noChanges":"Stavekontrol færdig: Ingen ord ændret","noMispell":"Stavekontrol færdig: Ingen fejl fundet","noSuggestions":"(ingen forslag)","notAvailable":"Stavekontrol er desværre ikke tilgængelig.","notInDic":"Ikke i ordbogen","oneChange":"Stavekontrol færdig: Et ord ændret","progress":"Stavekontrollen arbejder...","title":"Stavekontrol","toolbar":"Stavekontrol"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøger","btn_disable":"Deaktivér SCAYT","btn_enable":"Aktivér SCAYT","btn_langs":"Sprog","btn_options":"Indstillinger","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image":{"alertUrl":"Indtast stien til billedet","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor","help":"Se $1 for at få hjælp.","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):","title":"Om CKEditor","userGuide":"CKEditor-brugermanual"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignJustify":"Lige margener","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/de.js b/platforms/android/assets/www/lib/ckeditor/lang/de.js deleted file mode 100644 index 6b6d8b49..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['de']={"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"sourcearea":{"toolbar":"Quellcode"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":""},"removeformat":{"toolbar":"Formatierungen entfernen"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenü Optionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"<nichts>","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignJustify":"Blocksatz","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/el.js b/platforms/android/assets/www/lib/ckeditor/lang/el.js deleted file mode 100644 index f79080d8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['el']={"wsc":{"btnIgnore":"Αγνόηση","btnIgnoreAll":"Αγνόηση όλων","btnReplace":"Αντικατάσταση","btnReplaceAll":"Αντικατάσταση όλων","btnUndo":"Αναίρεση","changeTo":"Αλλαγή σε","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;","manyChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξαν %1 λέξεις","noChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις","noMispell":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη","noSuggestions":"- Δεν υπάρχουν προτάσεις -","notAvailable":"Η υπηρεσία δεν είναι διαθέσιμη αυτήν την στιγμή.","notInDic":"Δεν υπάρχει στο λεξικό","oneChange":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξε μια λέξη","progress":"Γίνεται ορθογραφικός έλεγχος...","title":"Ορθογραφικός Έλεγχος","toolbar":"Ορθογραφικός Έλεγχος"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντια Διαίρεση Κελιού","splitVertical":"Κατακόρυφη Διαίρεση Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Γραμμών","colSpan":"Εύρος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Baseline","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι αριθμός.","invalidRowSpan":"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.","invalidColSpan":"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.","chooseColor":"Επιλέξτε"},"cellPad":"Αναπλήρωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"Διαγραφή Στηλών"},"columns":"Στήλες","deleteTable":"Διαγραφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Γραμμή","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"sourcearea":{"toolbar":"Κώδικας"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Λεξικά","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Γλώσσες","btn_options":"Επιλογές","text_title":""},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"link":{"acccessKey":"Συντόμευση","advanced":"Για Προχωρημένους","advisoryContentType":"Ενδεικτικός Τύπος Περιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεργασία Άγκυρας","menu":"Ιδιότητες άγκυρας","title":"Ιδιότητες άγκυρας","name":"Όνομα άγκυρας","errorName":"Παρακαλούμε εισάγετε όνομα άγκυρας","remove":"Αφαίρεση Άγκυρας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος Άγκυρας","charset":"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής","cssClasses":"Κλάσεις Φύλλων Στυλ","emailAddress":"Διεύθυνση E-mail","emailBody":"Κείμενο Μηνύματος","emailSubject":"Θέμα Μηνύματος","id":"Id","info":"Πληροφορίες Συνδέσμου","langCode":"Κατεύθυνση Κειμένου","langDir":"Κατεύθυνση Κειμένου","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","menu":"Επεξεργασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάρχουν άγκυρες στο κείμενο)","noEmail":"Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του συνδέσμου","other":"<άλλο>","popupDependent":"Εξαρτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου Παραθύρου","popupFullScreen":"Πλήρης Οθόνη (IE)","popupLeft":"Θέση Αριστερά","popupLocationBar":"Γραμμή Τοποθεσίας","popupMenuBar":"Γραμμή Επιλογών","popupResizable":"Προσαρμοζόμενο Μέγεθος","popupScrollBars":"Μπάρες Κύλισης","popupStatusBar":"Γραμμή Κατάστασης","popupToolbar":"Εργαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια Άγκυρα","styles":"Μορφή","tabIndex":"Σειρά Μεταπήδησης","target":"Παράθυρο Προορισμού","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Πλαισίου Προορισμού","targetPopup":"<αναδυόμενο παράθυρο>","targetPopupName":"Όνομα Αναδυόμενου Παραθύρου","title":"Σύνδεσμος","toAnchor":"Άγκυρα σε αυτήν τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toolbar":"Σύνδεσμος","type":"Τύπος Συνδέσμου","unlink":"Αφαίρεση Συνδέσμου","upload":"Αποστολή"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"image":{"alertUrl":"Εισάγετε την τοποθεσία (URL) της εικόνας","alt":"Εναλλακτικό Κείμενο","border":"Περίγραμμα","btnUpload":"Αποστολή στον Διακομιστή","button2Img":"Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;","hSpace":"HSpace","img2Button":"Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;","infoTab":"Πληροφορίες Εικόνας","linkTab":"Σύνδεσμος","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","resetSize":"Επαναφορά Αρχικού Μεγέθους","title":"Ιδιότητες Εικόνας","titleButton":"Ιδιότητες Κουμπιού Εικόνας","upload":"Αποστολή","urlMissing":"Το URL πηγής για την εικόνα λείπει.","vSpace":"VSpace","validateBorder":"Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.","validateHSpace":"Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.","validateVSpace":"Το VSpace πρέπει να είναι ένας ακέραιος αριθμός."},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"Προ-μορφοποιημένη"},"fakeobjects":{"anchor":"Άγκυρα","flash":"Ταινία Flash","hiddenfield":"Κρυφό Πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Παρακαλώ επικολλήστε στο ακόλουθο κουτί χρησιμοποιώντας το πληκτρολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.","securityMsg":"Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.","title":"Επικόλληση"},"button":{"selectedLabel":"%1 (Επιλεγμένο)"},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor","help":"Ελέγξτε τις $1 για βοήθεια.","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:","title":"Περί του CKEditor","userGuide":"Οδηγίες Χρήστη CKEditor"},"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"Φόρμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"Περιοχή Κειμένου","hiddenField":"Κρυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση Κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική Περιγραφή URL","cssClass":"Κλάσεις Φύλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"Μορφή Κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για Προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδιο Παράθυρο (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Κλάσεις Φύλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","alignLeft":"Αριστερά","alignRight":"Δεξιά","alignCenter":"Κέντρο","alignJustify":"Πλήρης Στοίχιση","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/lang/en-au.js deleted file mode 100644 index 7ef53932..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/en-au.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-au']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/lang/en-ca.js deleted file mode 100644 index cf8d1843..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/en-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-ca']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/lang/en-gb.js deleted file mode 100644 index 9e14d9ee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-gb']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/en.js b/platforms/android/assets/www/lib/ckeditor/lang/en.js deleted file mode 100644 index e41e6fd1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/lang/eo.js deleted file mode 100644 index 41ca309b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['eo']={"wsc":{"btnIgnore":"Ignori","btnIgnoreAll":"Ignori Ĉion","btnReplace":"Anstataŭigi","btnReplaceAll":"Anstataŭigi Ĉion","btnUndo":"Malfari","changeTo":"Ŝanĝi al","errorLoading":"Eraro en la servoelŝuto el la gastiga komputiko: %s.","ieSpellDownload":"Ortografikontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?","manyChanges":"Ortografikontrolado finita: %1 vortoj korektitaj","noChanges":"Ortografikontrolado finita: neniu vorto korektita","noMispell":"Ortografikontrolado finita: neniu eraro trovita","noSuggestions":"- Neniu propono -","notAvailable":"Bedaŭrinde la servo ne funkcias nuntempe.","notInDic":"Ne trovita en la vortaro","oneChange":"Ortografikontrolado finita: unu vorto korektita","progress":"La ortografio estas kontrolata...","title":"Kontroli la ortografion","toolbar":"Kontroli la ortografion"},"undo":{"redo":"Refari","undo":"Malfari"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"sourcearea":{"toolbar":"Fonto"},"scayt":{"btn_about":"Pri OKDVT","btn_dictionaries":"Vortaroj","btn_disable":"Malebligi OKDVT","btn_enable":"Ebligi OKDVT","btn_langs":"Lingvoj","btn_options":"Opcioj","text_title":""},"removeformat":{"toolbar":"Forigi Formaton"},"pastetext":{"button":"Interglui kiel platan tekston","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/Ŝanĝi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","emailAddress":"Retpoŝto","emailBody":"Mesaĝa korpo","emailSubject":"Mesaĝa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"Ŝanĝi Ligilon","name":"Nomo","noAnchors":"<Ne disponeblas ankroj en la dokumento>","noEmail":"Bonvolu entajpi la retpoŝtadreson","noUrl":"Bonvolu entajpi la URL-on","other":"<alia>","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Ŝprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"Dimensiŝanĝebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"<kadro>","targetFrameName":"Nomo de CelKadro","targetPopup":"<ŝprucfenestro>","targetPopupName":"Nomo de Ŝprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paĝo","toEmail":"Retpoŝto","toUrl":"URL","toolbar":"Enmeti/Ŝanĝi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"Alŝuti"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"image":{"alertUrl":"Bonvolu tajpi la retadreson de la bildo","alt":"Anstataŭiga Teksto","border":"Bordero","btnUpload":"Sendu al Servilo","button2Img":"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?","hSpace":"Horizontala Spaco","img2Button":"Ĉu vi volas transformi la selektitan bildon en bildbutonon?","infoTab":"Informoj pri Bildo","linkTab":"Ligilo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","resetSize":"Origina Grando","title":"Atributoj de Bildo","titleButton":"Bildbutonaj Atributoj","upload":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","vSpace":"Vertikala Spaco","validateBorder":"La bordero devas esti entjera nombro.","validateHSpace":"La horizontala spaco devas esti entjera nombro.","validateVSpace":"La vertikala spaco devas esti entjera nombro."},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"fakeobjects":{"anchor":"Ankro","flash":"FlaŝAnimacio","hiddenfield":"Kaŝita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteArea":"Intergluoareo","pasteMsg":"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK","securityMsg":"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.","title":"Interglui"},"button":{"selectedLabel":"%1 (Selektita)"},"blockquote":{"toolbar":"Citaĵo"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor","help":"Kontroli $1 por helpo.","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:","title":"Pri CKEditor","userGuide":"CKEditor Uzindikoj"},"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<Defaŭlta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","alignLeft":"Maldekstre","alignRight":"Dekstre","alignCenter":"Centre","alignJustify":"Ĝisrandigi Ambaŭflanke","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"None","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/es.js b/platforms/android/assets/www/lib/ckeditor/lang/es.js deleted file mode 100644 index a69056b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['es']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcearea":{"toolbar":"Fuente HTML"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":""},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image":{"alertUrl":"Por favor escriba la URL de la imagen","alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor","help":"Lea la $1 para resolver sus dudas.","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:","title":"Acerca de CKEditor","userGuide":"Guía de usuario de CKEditor"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"None","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/et.js b/platforms/android/assets/www/lib/ckeditor/lang/et.js deleted file mode 100644 index 37be80d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['et']={"wsc":{"btnIgnore":"Ignoreeri","btnIgnoreAll":"Ignoreeri kõiki","btnReplace":"Asenda","btnReplaceAll":"Asenda kõik","btnUndo":"Võta tagasi","changeTo":"Muuda","errorLoading":"Viga rakenduse teenushosti laadimisel: %s.","ieSpellDownload":"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?","manyChanges":"Õigekirja kontroll sooritatud: %1 sõna muudetud","noChanges":"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud","noMispell":"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud","noSuggestions":"- Soovitused puuduvad -","notAvailable":"Kahjuks ei ole teenus praegu saadaval.","notInDic":"Puudub sõnastikust","oneChange":"Õigekirja kontroll sooritatud: üks sõna muudeti","progress":"Toimub õigekirja kontroll...","title":"Õigekirjakontroll","toolbar":"Õigekirjakontroll"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"sourcearea":{"toolbar":"Lähtekood"},"scayt":{"btn_about":"SCAYT-ist lähemalt","btn_dictionaries":"Sõnaraamatud","btn_disable":"SCAYT keelatud","btn_enable":"SCAYT lubatud","btn_langs":"Keeled","btn_options":"Valikud","text_title":""},"removeformat":{"toolbar":"Vormingu eemaldamine"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"magicline":{"title":"Sisesta siia lõigu tekst"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"image":{"alertUrl":"Palun kirjuta pildi URL","alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"contextmenu":{"options":"Kontekstimenüü valikud"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokktsitaat"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditorist","help":"Abi jaoks vaata $1.","moreInfo":"Litsentsi andmed leiab meie veebilehelt:","title":"CKEditorist","userGuide":"CKEditori kasutusjuhendit"},"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignJustify":"Rööpjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"None","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/lang/eu.js deleted file mode 100644 index 2adf9e1d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['eu']={"wsc":{"btnIgnore":"Ezikusi","btnIgnoreAll":"Denak Ezikusi","btnReplace":"Ordezkatu","btnReplaceAll":"Denak Ordezkatu","btnUndo":"Desegin","changeTo":"Honekin ordezkatu","errorLoading":"Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.","ieSpellDownload":"Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?","manyChanges":"Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira","noChanges":"Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu","noMispell":"Zuzenketa ortografikoa bukatuta: Akatsik ez","noSuggestions":"- Iradokizunik ez -","notAvailable":"Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.","notInDic":"Ez dago hiztegian","oneChange":"Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da","progress":"Zuzenketa ortografikoa martxan...","title":"Ortografia zuzenketa","toolbar":"Ortografia"},"undo":{"redo":"Berregin","undo":"Desegin"},"toolbar":{"toolbarCollapse":"Tresna-barra Txikitu","toolbarExpand":"Tresna-barra Luzatu","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editorearen Tresna-barra"},"table":{"border":"Ertzaren Zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu Gelaxka Aurretik","insertAfter":"Txertatu Gelaxka Ostean","deleteCell":"Kendu Gelaxkak","merge":"Batu Gelaxkak","mergeRight":"Elkartu Eskumara","mergeDown":"Elkartu Behera","splitHorizontal":"Banatu Gelaxkak Horizontalki","splitVertical":"Banatu Gelaxkak Bertikalki","title":"Gelaxken Ezaugarriak","cellType":"Gelaxka Mota","rowSpan":"Hedatutako Lerroak","colSpan":"Hedatutako Zutabeak","wordWrap":"Itzulbira","hAlign":"Lerrokatze Horizontala","vAlign":"Lerrokatze Bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Fondoaren Kolorea","borderColor":"Ertzaren Kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Lerroen hedapena zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedapena zenbaki osoa izan behar da.","chooseColor":"Choose"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu Zutabea Aurretik","insertAfter":"Txertatu Zutabea Ostean","deleteColumn":"Ezabatu Zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu Taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen lerroa","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen Ezaugarriak","row":{"menu":"Lerroa","insertBefore":"Txertatu Lerroa Aurretik","insertAfter":"Txertatu Lerroa Ostean","deleteRow":"Ezabatu Lerroak"},"rows":"Lerroak","summary":"Laburpena","title":"Taularen Ezaugarriak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"stylescombo":{"label":"Estiloa","panelTitle":"Formatu Estiloak","panelTitle1":"Bloke Estiloak","panelTitle2":"Inline Estiloak","panelTitle3":"Objektu Estiloak"},"specialchar":{"options":"Karaktere Berezien Aukerak","title":"Karaktere Berezia Aukeratu","toolbar":"Txertatu Karaktere Berezia"},"sourcearea":{"toolbar":"HTML Iturburua"},"scayt":{"btn_about":"SCAYTi buruz","btn_dictionaries":"Hiztegiak","btn_disable":"Desgaitu SCAYT","btn_enable":"Gaitu SCAYT","btn_langs":"Hizkuntzak","btn_options":"Aukerak","text_title":""},"removeformat":{"toolbar":"Kendu Formatua"},"pastetext":{"button":"Testu Arrunta bezala Itsatsi","title":"Testu Arrunta bezala Itsatsi"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barneko errore bat dela eta ezin izan da testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"magicline":{"title":"Txertatu paragrafoa hemen"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"link":{"acccessKey":"Sarbide-gakoa","advanced":"Aurreratua","advisoryContentType":"Eduki Mota (Content Type)","advisoryTitle":"Izenburua","anchor":{"toolbar":"Aingura","menu":"Ainguraren Ezaugarriak","title":"Ainguraren Ezaugarriak","name":"Ainguraren Izena","errorName":"Idatzi ainguraren izena","remove":"Remove Anchor"},"anchorId":"Elementuaren ID-gatik","anchorName":"Aingura izenagatik","charset":"Estekatutako Karaktere Multzoa","cssClasses":"Estilo-orriko Klaseak","emailAddress":"ePosta Helbidea","emailBody":"Mezuaren Gorputza","emailSubject":"Mezuaren Gaia","id":"Id","info":"Estekaren Informazioa","langCode":"Hizkuntzaren Norabidea","langDir":"Hizkuntzaren Norabidea","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","menu":"Aldatu Esteka","name":"Izena","noAnchors":"(Ez daude aingurak eskuragarri dokumentuan)","noEmail":"Mesedez ePosta helbidea idatzi","noUrl":"Mesedez URL esteka idatzi","other":"<bestelakoa>","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Popup Leihoaren Ezaugarriak","popupFullScreen":"Pantaila Osoa (IE)","popupLeft":"Ezkerreko Posizioa","popupLocationBar":"Kokaleku Barra","popupMenuBar":"Menu Barra","popupResizable":"Tamaina Aldakorra","popupScrollBars":"Korritze Barrak","popupStatusBar":"Egoera Barra","popupToolbar":"Tresna Barra","popupTop":"Goiko Posizioa","rel":"Erlazioa","selectAnchor":"Aingura bat hautatu","styles":"Estiloa","tabIndex":"Tabulazio Indizea","target":"Target (Helburua)","targetFrame":"<marko>","targetFrameName":"Marko Helburuaren Izena","targetPopup":"<popup leihoa>","targetPopupName":"Popup Leihoaren Izena","title":"Esteka","toAnchor":"Aingura orrialde honetan","toEmail":"ePosta","toUrl":"URL","toolbar":"Txertatu/Editatu Esteka","type":"Esteka Mota","unlink":"Kendu Esteka","upload":"Gora kargatu"},"indent":{"indent":"Handitu Koska","outdent":"Txikitu Koska"},"image":{"alertUrl":"Mesedez Irudiaren URLa idatzi","alt":"Ordezko Testua","border":"Ertza","btnUpload":"Zerbitzarira bidalia","button2Img":"Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?","hSpace":"HSpace","img2Button":"Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?","infoTab":"Irudi informazioa","linkTab":"Esteka","lockRatio":"Erlazioa Blokeatu","menu":"Irudi Ezaugarriak","resetSize":"Tamaina Berrezarri","title":"Irudi Ezaugarriak","titleButton":"Irudi Botoiaren Ezaugarriak","upload":"Gora Kargatu","urlMissing":"Irudiaren iturburu URL-a falta da.","vSpace":"VSpace","validateBorder":"Ertza zenbaki oso bat izan behar da.","validateHSpace":"HSpace zenbaki oso bat izan behar da.","validateVSpace":"VSpace zenbaki oso bat izan behar da."},"horizontalrule":{"toolbar":"Txertatu Marra Horizontala"},"format":{"label":"Formatua","panelTitle":"Formatua","tag_address":"Helbidea","tag_div":"Paragrafoa (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Arrunta","tag_pre":"Formateatua"},"fakeobjects":{"anchor":"Aingura","flash":"Flash Animazioa","hiddenfield":"Ezkutuko Eremua","iframe":"IFrame","unknown":"Objektu ezezaguna"},"elementspath":{"eleLabel":"Elementu bidea","eleTitle":"%1 elementua"},"contextmenu":{"options":"Testuingurko Menuaren Aukerak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteArea":"Itsasteko Area","pasteMsg":"Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.","securityMsg":"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.","title":"Itsatsi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Aipamen blokea"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indize","superscript":"Goi-indize","underline":"Azpimarratu"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor(r)i buruz","help":"$1 aztertu laguntza jasotzeko.","moreInfo":"Lizentziari buruzko informazioa gure webgunean:","title":"CKEditor(r)i buruz","userGuide":"CKEditor User's Guide"},"editor":"Testu Aberastuko Editorea","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT 0 sakatu laguntza jasotzeko","browseServer":"Zerbitzaria arakatu","url":"URL","protocol":"Protokoloa","upload":"Gora kargatu","uploadSubmit":"Zerbitzarira bidali","image":"Irudia","flash":"Flasha","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu Eremua","textarea":"Testu-area","hiddenField":"Ezkutuko Eremua","button":"Botoia","select":"Hautespen Eremua","imageButton":"Irudi Botoia","notSet":"<Ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren Norabidea","langDirLtr":"Ezkerretik Eskumara(LTR)","langDirRtl":"Eskumatik Ezkerrera (RTL)","langCode":"Hizkuntza Kodea","longDescr":"URL Deskribapen Luzea","cssClass":"Estilo-orriko Klaseak","advisoryTitle":"Izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Arrastatu tamaina aldatzeko","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Target (Helburua)","targetNew":"Leiho Berria (_blank)","targetTop":"Goieneko Leihoan (_top)","targetSelf":"Leiho Berdinean (_self)","targetParent":"Leiho Gurasoan (_parent)","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko Klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatu","alignLeft":"Ezkerrera","alignRight":"Eskuman","alignCenter":"Erdian","alignJustify":"Justifikatu","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"None","invalidValue":"Balio ezegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidCssLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran CSS neurri unitate batekin (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran HTML neurri unitate batekin (px edo %).","invalidInlineStyle":"Lerroko estiloan zehazten dena tupla \"name : value\" formatuko eta puntu eta komaz bereiztutako tupla bat edo gehiago izan behar dira.","cssLengthTooltip":"Zenbakia bakarrik zehazten bada pixeletan egongo da. CSS neurri unitatea ere zehaztu ahal da (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/lang/fa.js deleted file mode 100644 index d58160ec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fa']={"wsc":{"btnIgnore":"چشمپوشی","btnIgnoreAll":"چشمپوشی همه","btnReplace":"جایگزینی","btnReplaceAll":"جایگزینی همه","btnUndo":"واچینش","changeTo":"تغییر به","errorLoading":"خطا در بارگیری برنامه خدمات میزبان: %s.","ieSpellDownload":"بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟","manyChanges":"بررسی املا انجام شد. %1 واژه تغییر یافت","noChanges":"بررسی املا انجام شد. هیچ واژهای تغییر نیافت","noMispell":"بررسی املا انجام شد. هیچ غلط املائی یافت نشد","noSuggestions":"- پیشنهادی نیست -","notAvailable":"با عرض پوزش خدمات الان در دسترس نیستند.","notInDic":"در واژه~نامه یافت نشد","oneChange":"بررسی املا انجام شد. یک واژه تغییر یافت","progress":"بررسی املا در حال انجام...","title":"بررسی املا","toolbar":"بررسی املا"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"sourcearea":{"toolbar":"منبع"},"scayt":{"btn_about":"درباره SCAYT","btn_dictionaries":"دیکشنریها","btn_disable":"غیرفعالسازی SCAYT","btn_enable":"فعالسازی SCAYT","btn_langs":"زبانها","btn_options":"گزینهها","text_title":""},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرفته","advisoryContentType":"نوع محتوای کمکی","advisoryTitle":"عنوان کمکی","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگی​های لنگر","title":"ویژگی​های لنگر","name":"نام لنگر","errorName":"لطفا نام لنگر را بنویسید","remove":"حذف لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسه​گان منبع پیوند شده","cssClasses":"کلاس​های شیوه​نامه(Stylesheet)","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهت​نمای زبان","langDir":"جهت​نمای زبان","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطفا نشانی پست الکترونیکی را بنویسید","noUrl":"لطفا URL پیوند را بنویسید","other":"<سایر>","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگی​های پنجرهٴ پاپاپ","popupFullScreen":"تمام صفحه (IE)","popupLeft":"موقعیت چپ","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میله​های پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوار ابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه (style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<فریم>","targetFrameName":"نام فریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صفحه","toEmail":"پست الکترونیکی","toUrl":"URL","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image":{"alertUrl":"لطفا URL تصویر را بنویسید","alt":"متن جایگزین","border":"لبه","btnUpload":"به سرور بفرست","button2Img":"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟","hSpace":"فاصلهٴ افقی","img2Button":"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟","infoTab":"اطلاعات تصویر","linkTab":"پیوند","lockRatio":"قفل کردن نسبت","menu":"ویژگی​های تصویر","resetSize":"بازنشانی اندازه","title":"ویژگی​های تصویر","titleButton":"ویژگی​های دکمهٴ تصویری","upload":"انتقال به سرور","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","vSpace":"فاصلهٴ عمودی","validateBorder":"مقدار خطوط باید یک عدد باشد.","validateHSpace":"مقدار فاصله گذاری افقی باید یک عدد باشد.","validateVSpace":"مقدار فاصله گذاری عمودی باید یک عدد باشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن فلش","hiddenfield":"فیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteArea":"محل چسباندن","pasteMsg":"لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.","securityMsg":"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.","title":"چسباندن"},"button":{"selectedLabel":"%1 (انتخاب شده)"},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","help":" برای راهنمایی $1 را ملاحظه کنید.","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:","title":"درباره CKEditor","userGuide":"راهنمای کاربران CKEditor"},"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","alignLeft":"چپ","alignRight":"راست","alignCenter":"وسط","alignJustify":"بلوک چین","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/lang/fi.js deleted file mode 100644 index 955aa8f0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fi']={"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"},"undo":{"redo":"Toista","undo":"Kumoa"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"sourcearea":{"toolbar":"Koodi"},"scayt":{"btn_about":"Tietoja oikoluvusta kirjoitetaessa","btn_dictionaries":"Sanakirjat","btn_disable":"Poista käytöstä oikoluku kirjoitetaessa","btn_enable":"Ota käyttöön oikoluku kirjoitettaessa","btn_langs":"Kielet","btn_options":"Asetukset","text_title":""},"removeformat":{"toolbar":"Poista muotoilu"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"magicline":{"title":"Lisää kappale tähän."},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"image":{"alertUrl":"Kirjoita kuvan osoite (URL)","alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"button":{"selectedLabel":"%1 (Valittu)"},"blockquote":{"toolbar":"Lainaus"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignJustify":"Tasaa molemmat reunat","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/lang/fo.js deleted file mode 100644 index bb85f513..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/fo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fo']={"wsc":{"btnIgnore":"Forfjóna","btnIgnoreAll":"Forfjóna alt","btnReplace":"Yvirskriva","btnReplaceAll":"Yvirskriva alt","btnUndo":"Angra","changeTo":"Broyt til","errorLoading":"Feilur við innlesing av application service host: %s.","ieSpellDownload":"Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?","manyChanges":"Rættstavarin liðugur: %1 orð broytt","noChanges":"Rættstavarin liðugur: Einki orð varð broytt","noMispell":"Rættstavarin liðugur: Eingin feilur funnin","noSuggestions":"- Einki uppskot -","notAvailable":"Tíverri, ikki tøkt í løtuni.","notInDic":"Finst ikki í orðabókini","oneChange":"Rættstavarin liðugur: Eitt orð er broytt","progress":"Rættstavarin arbeiðir...","title":"Kanna stavseting","toolbar":"Kanna stavseting"},"undo":{"redo":"Vend aftur","undo":"Angra"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"sourcearea":{"toolbar":"Kelda"},"scayt":{"btn_about":"Um SCAYT","btn_dictionaries":"Orðabøkur","btn_disable":"Nokta SCAYT","btn_enable":"Loyv SCAYT","btn_langs":"Tungumál","btn_options":"Uppseting","text_title":""},"removeformat":{"toolbar":"Strika sniðgeving"},"pastetext":{"button":"Innrita som reinan tekst","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","other":"<annað>","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"<ramma>","targetFrameName":"Vís navn vindeygans","targetPopup":"<popup vindeyga>","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"image":{"alertUrl":"Rita slóðina til myndina","alt":"Alternativur tekstur","border":"Bordi","btnUpload":"Send til ambætaran","button2Img":"Skal valdi myndaknøttur gerast til vanliga mynd?","hSpace":"Høgri breddi","img2Button":"Skal valda mynd gerast til myndaknøtt?","infoTab":"Myndaupplýsingar","linkTab":"Tilknýti","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","resetSize":"Upprunastødd","title":"Myndaeginleikar","titleButton":"Eginleikar fyri myndaknøtt","upload":"Send","urlMissing":"URL til mynd manglar.","vSpace":"Vinstri breddi","validateBorder":"Bordi má vera eitt heiltal.","validateHSpace":"HSpace má vera eitt heiltal.","validateVSpace":"VSpace má vera eitt heiltal."},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteArea":"Avritingarumráði","pasteMsg":"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.","securityMsg":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.","title":"Innrita"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor","help":"Kekka $1 fyri hjálp.","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:","title":"Um CKEditor","userGuide":"CKEditor Brúkaravegleiðing"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýst","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","alignLeft":"Vinstra","alignRight":"Høgra","alignCenter":"Miðsett","alignJustify":"Javnir tekstkantar","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/lang/fr-ca.js deleted file mode 100644 index ad9611a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fr-ca']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Changer en","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?","manyChanges":"Vérification d'orthographe terminée: %1 mots modifiés","noChanges":"Vérification d'orthographe terminée: Pas de modifications","noMispell":"Vérification d'orthographe terminée: pas d'erreur trouvée","noSuggestions":"- Pas de suggestion -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Pas dans le dictionnaire","oneChange":"Vérification d'orthographe terminée: Un mot modifié","progress":"Vérification d'orthographe en cours...","title":"Spell Check","toolbar":"Orthographe"},"undo":{"redo":"Refaire","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Supprimer le formatage"},"pastetext":{"button":"Coller comme texte","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"magicline":{"title":"Insérer le paragraphe ici"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu","advisoryTitle":"Description","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Supprimer l'ancre"},"anchorId":"Par ID","anchorName":"Par nom","charset":"Encodage de la cible","cssClasses":"Classes CSS","emailAddress":"Courriel","emailBody":"Corps du message","emailSubject":"Objet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir le courriel","noUrl":"Veuillez saisir l'URL","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position de la gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"<Cadre>","targetFrameName":"Nom du cadre de destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre dans cette page","toEmail":"Courriel","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image":{"alertUrl":"Veuillez saisir l'URL de l'image","alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Désirez-vous transformer l'image sélectionnée en image simple?","hSpace":"Espacement horizontal","img2Button":"Désirez-vous transformer l'image sélectionnée en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image","resetSize":"Taille originale","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un entier.","validateHSpace":"L'espacement horizontal doit être un entier.","validateVSpace":"L'espacement vertical doit être un entier."},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, consulter notre site internet:","title":"À propos de CKEditor","userGuide":"Guide utilisateur de CKEditor"},"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifié","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/lang/fr.js deleted file mode 100644 index 880c71b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fr']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"},"undo":{"redo":"Rétablir","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Editer","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Fractionner horizontalement","splitVertical":"Fractionner verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Césure","hAlign":"Alignement Horizontal","vAlign":"Alignement Vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de Bordure","data":"Données","header":"Entête","yes":"Oui","no":"Non","invalidWidth":"La Largeur de Cellule doit être un nombre.","invalidHeight":"La Hauteur de Cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Choisissez"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonnes","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-Têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucunes","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge intérieure des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"% pourcents","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en page","panelTitle1":"Styles de blocs","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionnez un caractère","toolbar":"Insérer un caractère spécial"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Supprimer la mise en forme"},"pastetext":{"button":"Coller comme texte sans mise en forme","title":"Coller comme texte sans mise en forme"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"maximize":{"maximize":"Agrandir","minimize":"Minimiser"},"magicline":{"title":"Insérez un paragraphe ici"},"list":{"bulletedlist":"Insérer/Supprimer la liste à puces","numberedlist":"Insérer/Supprimer la liste numérotée"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (ex: text/html)","advisoryTitle":"Description (title)","anchor":{"toolbar":"Ancre","menu":"Editer l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Charset de la cible","cssClasses":"Classe CSS","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Infos sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche","menu":"Editer le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse e-mail","noUrl":"Veuillez entrer l'adresse du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Options de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre de status","popupToolbar":"Barre d'outils","popupTop":"Position haute","rel":"Relation","selectAnchor":"Sélectionner l'ancre","styles":"Style","tabIndex":"Index de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du Cadre destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Transformer le lien en ancre dans le texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Envoyer"},"indent":{"indent":"Augmenter le retrait (tabulation)","outdent":"Diminuer le retrait (tabulation)"},"image":{"alertUrl":"Veuillez entrer l'adresse de l'image","alt":"Texte de remplacement","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton image sélectionné en simple image?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Taille d'origine","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Envoyer","urlMissing":"L'adresse source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"Bordure doit être un entier.","validateHSpace":"HSpace doit être un entier.","validateVSpace":"VSpace doit être un entier."},"horizontalrule":{"toolbar":"Ligne horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Formaté"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 éléments"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Sélectionné)"},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, veuillez visiter notre site web:","title":"À propos de CKEditor","userGuide":"Guide de l'utilisateur CKEditor en anglais"},"editor":"Éditeur de Texte Enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Appuyez sur ALT-0 pour l'aide","browseServer":"Explorer le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton Radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<non défini>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue (longdesc => malvoyant)","cssClass":"Classe CSS","advisoryTitle":"Description (title)","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Déplacer pour modifier la taille","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?","options":"Options","target":"Cible (Target)","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à Droite (LTR)","langDirRTL":"Droite à Gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifier","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur incorrecte.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, Indisponible</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/lang/gl.js deleted file mode 100644 index 85f095be..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['gl']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todas","btnReplace":"Substituir","btnReplaceAll":"Substituir Todas","btnUndo":"Desfacer","changeTo":"Cambiar a","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"O corrector ortográfico non está instalado. ¿Quere descargalo agora?","manyChanges":"Corrección ortográfica rematada: %1 verbas substituidas","noChanges":"Corrección ortográfica rematada: Non se substituiu nengunha verba","noMispell":"Corrección ortográfica rematada: Non se atoparon erros","noSuggestions":"- Sen candidatos -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Non está no diccionario","oneChange":"Corrección ortográfica rematada: Unha verba substituida","progress":"Corrección ortográfica en progreso...","title":"Spell Check","toolbar":"Corrección Ortográfica"},"undo":{"redo":"Refacer","undo":"Desfacer"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de obxecto"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"sourcearea":{"toolbar":"Orixe"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Retirar o formato"},"pastetext":{"button":"Pegar como texto simple","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir aquí o parágrafo"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Índice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nome do marco de destino","targetPopup":"<xanela emerxente>","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"image":{"alertUrl":"Escriba o URL da imaxe","alt":"Texto alternativo","border":"Bordo","btnUpload":"Enviar ao servidor","button2Img":"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?","hSpace":"Esp.Horiz.","img2Button":"Quere converter a imaxe seleccionada nun botón de imaxe?","infoTab":"Información da imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propiedades da imaxe","resetSize":"Tamaño orixinal","title":"Propiedades da imaxe","titleButton":"Propiedades do botón de imaxe","upload":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","vSpace":"Esp.Vert.","validateBorder":"O bordo debe ser un número.","validateHSpace":"O espazado horizontal debe ser un número.","validateVSpace":"O espazado vertical debe ser un número."},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opcións do menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prema en Aceptar","securityMsg":"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.","title":"Pegar"},"button":{"selectedLabel":"%1 (seleccionado)"},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"about":{"copy":"Copyright &copy; $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Consulte $1 para obter axuda.","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:","title":"Sobre o CKEditor","userGuide":"Guía do usuario do CKEditor"},"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignJustify":"Xustificado","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"None","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/lang/gu.js deleted file mode 100644 index e445685f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/gu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['gu']={"wsc":{"btnIgnore":"ઇગ્નોર/અવગણના કરવી","btnIgnoreAll":"બધાની ઇગ્નોર/અવગણના કરવી","btnReplace":"બદલવું","btnReplaceAll":"બધા બદલી કરો","btnUndo":"અન્ડૂ","changeTo":"આનાથી બદલવું","errorLoading":"સર્વિસ એપ્લીકેશન લોડ નથી થ: %s.","ieSpellDownload":"સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?","manyChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે","noChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી","noMispell":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી","noSuggestions":"- કઇ સજેશન નથી -","notAvailable":"માફ કરશો, આ સુવિધા ઉપલબ્ધ નથી","notInDic":"શબ્દકોશમાં નથી","oneChange":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે","progress":"શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...","title":"સ્પેલ ","toolbar":"જોડણી (સ્પેલિંગ) તપાસવી"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"scayt":{"btn_about":"SCAYT વિષે","btn_dictionaries":"શબ્દકોશ","btn_disable":"SCAYT ડિસેબલ કરવું","btn_enable":"SCAYT એનેબલ કરવું","btn_langs":"ભાષાઓ","btn_options":"વિકલ્પો","text_title":""},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"link":{"acccessKey":"ઍક્સેસ કી","advanced":"અડ્વાન્સડ","advisoryContentType":"મુખ્ય કન્ટેન્ટ પ્રકાર","advisoryTitle":"મુખ્ય મથાળું","anchor":{"toolbar":"ઍંકર ઇન્સર્ટ/દાખલ કરવી","menu":"ઍંકરના ગુણ","title":"ઍંકરના ગુણ","name":"ઍંકરનું નામ","errorName":"ઍંકરનું નામ ટાઈપ કરો","remove":"સ્થિર નકરવું"},"anchorId":"ઍંકર એલિમન્ટ Id થી પસંદ કરો","anchorName":"ઍંકર નામથી પસંદ કરો","charset":"લિંક રિસૉર્સ કૅરિક્ટર સેટ","cssClasses":"સ્ટાઇલ-શીટ ક્લાસ","emailAddress":"ઈ-મેલ સરનામું","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇન્ફૉ ટૅબ","langCode":"ભાષા લેખવાની પદ્ધતિ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક એડિટ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)","noEmail":"ઈ-મેલ સરનામું ટાઇપ કરો","noUrl":"લિંક URL ટાઇપ કરો","other":"<other> <અન્ય>","popupDependent":"ડિપેન્ડન્ટ (Netscape)","popupFeatures":"પૉપ-અપ વિન્ડો ફીચરસૅ","popupFullScreen":"ફુલ સ્ક્રીન (IE)","popupLeft":"ડાબી બાજુ","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેન્યૂ બાર","popupResizable":"રીસાઈઝએબલ","popupScrollBars":"સ્ક્રોલ બાર","popupStatusBar":"સ્ટૅટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજુ","rel":"સંબંધની સ્થિતિ","selectAnchor":"ઍંકર પસંદ કરો","styles":"સ્ટાઇલ","tabIndex":"ટૅબ ઇન્ડેક્સ","target":"ટાર્ગેટ/લક્ષ્ય","targetFrame":"<ફ્રેમ>","targetFrameName":"ટાર્ગેટ ફ્રેમ નું નામ","targetPopup":"<પૉપ-અપ વિન્ડો>","targetPopupName":"પૉપ-અપ વિન્ડો નું નામ","title":"લિંક","toAnchor":"આ પેજનો ઍંકર","toEmail":"ઈ-મેલ","toUrl":"URL","toolbar":"લિંક ઇન્સર્ટ/દાખલ કરવી","type":"લિંક પ્રકાર","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"image":{"alertUrl":"ચિત્રની URL ટાઇપ કરો","alt":"ઑલ્ટર્નટ ટેક્સ્ટ","border":"બોર્ડર","btnUpload":"આ સર્વરને મોકલવું","button2Img":"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.","hSpace":"સમસ્તરીય જગ્યા","img2Button":"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.","infoTab":"ચિત્ર ની જાણકારી","linkTab":"લિંક","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","resetSize":"રીસેટ સાઇઝ","title":"ચિત્રના ગુણ","titleButton":"ચિત્ર બટનના ગુણ","upload":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","vSpace":"લંબરૂપ જગ્યા","validateBorder":"બોર્ડેર આંકડો હોવો જોઈએ.","validateHSpace":"HSpaceઆંકડો હોવો જોઈએ.","validateVSpace":"VSpace આંકડો હોવો જોઈએ. "},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"fakeobjects":{"anchor":"અનકર","flash":"ફ્લેશ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબ્જેક્ટ"},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો","securityMsg":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.","title":"પેસ્ટ"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","help":"મદદ માટે $1 તપાસો","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ","title":"CKEditor વિષે","userGuide":"CKEditor યુઝર્સ ગાઈડ"},"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"પ્રેસ ALT 0 મદદ માટ","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","alignLeft":"ડાબી બાજુ ગોઠવવું","alignRight":"જમણી","alignCenter":"મધ્ય સેન્ટર","alignJustify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સ્ટાઈલ ની વેલ્યુ \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતું</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/he.js b/platforms/android/assets/www/lib/ckeditor/lang/he.js deleted file mode 100644 index a72da9a9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['he']={"wsc":{"btnIgnore":"התעלמות","btnIgnoreAll":"התעלמות מהכל","btnReplace":"החלפה","btnReplaceAll":"החלפת הכל","btnUndo":"החזרה","changeTo":"שינוי ל","errorLoading":"שגיאה בהעלאת השירות: %s.","ieSpellDownload":"בודק האיות לא מותקן, האם להורידו?","manyChanges":"בדיקות איות הסתיימה: %1 מילים שונו","noChanges":"בדיקות איות הסתיימה: לא שונתה אף מילה","noMispell":"בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב","noSuggestions":"- אין הצעות -","notAvailable":"לא נמצא שירות זמין.","notInDic":"לא נמצא במילון","oneChange":"בדיקות איות הסתיימה: שונתה מילה אחת","progress":"בודק האיות בתהליך בדיקה....","title":"בדיקת איות","toolbar":"בדיקת איות"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"sourcearea":{"toolbar":"מקור"},"scayt":{"btn_about":"אודות SCAYT","btn_dictionaries":"מילון","btn_disable":"בטל SCAYT","btn_enable":"אפשר SCAYT","btn_langs":"שפות","btn_options":"אפשרויות","text_title":""},"removeformat":{"toolbar":"הסרת העיצוב"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"magicline":{"title":"הכנס פסקה כאן"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","other":"<אחר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"image":{"alertUrl":"יש להקליד את כתובת התמונה","alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"האם להפוך את תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח אופקי","img2Button":"האם להפוך את התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"איפוס הגודל","title":"מאפייני התמונה","titleButton":"מאפיני כפתור תמונה","upload":"העלאה","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח אנכי","validateBorder":"שדה המסגרת חייב להיות מספר שלם.","validateHSpace":"שדה המרווח האופקי חייב להיות מספר שלם.","validateVSpace":"שדה המרווח האנכי חייב להיות מספר שלם."},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"איזור הדבקה","pasteMsg":"נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.","securityMsg":"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.","title":"הדבקה"},"button":{"selectedLabel":"1% (סומן)"},"blockquote":{"toolbar":"בלוק ציטוט"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","help":"היכנסו ל$1 לעזרה.","moreInfo":"למידע נוסף בקרו באתרנו:","title":"אודות CKEditor","userGuide":"מדריך המשתמש של CKEditor"},"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמאל","alignRight":"לימין","alignCenter":"מרכז","alignJustify":"יישור לשוליים","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/lang/hi.js deleted file mode 100644 index 5b6c5b7d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/hi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hi']={"wsc":{"btnIgnore":"इग्नोर","btnIgnoreAll":"सभी इग्नोर करें","btnReplace":"रिप्लेस","btnReplaceAll":"सभी रिप्लेस करें","btnUndo":"अन्डू","changeTo":"इसमें बदलें","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?","manyChanges":"वर्तनी की जाँच : %1 शब्द बदले गये","noChanges":"वर्तनी की जाँच :कोई शब्द नहीं बदला गया","noMispell":"वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई","noSuggestions":"- कोई सुझाव नहीं -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"शब्दकोश में नहीं","oneChange":"वर्तनी की जाँच : एक शब्द बदला गया","progress":"वर्तनी की जाँच (स्पॅल-चॅक) जारी है...","title":"Spell Check","toolbar":"वर्तनी (स्पेलिंग) जाँच"},"undo":{"redo":"रीडू","undo":"अन्डू"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"sourcearea":{"toolbar":"सोर्स"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","title":"पेस्ट (सादा टॅक्स्ट)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"link":{"acccessKey":"ऍक्सॅस की","advanced":"ऍड्वान्स्ड","advisoryContentType":"परामर्श कन्टॅन्ट प्रकार","advisoryTitle":"परामर्श शीर्शक","anchor":{"toolbar":"ऐंकर इन्सर्ट/संपादन","menu":"ऐंकर प्रॉपर्टीज़","title":"ऐंकर प्रॉपर्टीज़","name":"ऐंकर का नाम","errorName":"ऐंकर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"ऍलीमॅन्ट Id से","anchorName":"ऐंकर नाम से","charset":"लिंक रिसोर्स करॅक्टर सॅट","cssClasses":"स्टाइल-शीट क्लास","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","other":"<अन्य>","popupDependent":"डिपेन्डॅन्ट (Netscape)","popupFeatures":"पॉप-अप विन्डो फ़ीचर्स","popupFullScreen":"फ़ुल स्क्रीन (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅन्यू बार","popupResizable":"Resizable","popupScrollBars":"स्क्रॉल बार","popupStatusBar":"स्टेटस बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"Relationship","selectAnchor":"ऐंकर चुनें","styles":"स्टाइल","tabIndex":"टैब इन्डॅक्स","target":"टार्गेट","targetFrame":"<फ़्रेम>","targetFrameName":"टार्गेट फ़्रेम का नाम","targetPopup":"<पॉप-अप विन्डो>","targetPopupName":"पॉप-अप विन्डो का नाम","title":"लिंक","toAnchor":"इस पेज का ऐंकर","toEmail":"ई-मेल","toUrl":"URL","toolbar":"लिंक इन्सर्ट/संपादन","type":"लिंक प्रकार","unlink":"लिंक हटायें","upload":"अपलोड"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"image":{"alertUrl":"तस्वीर का URL टाइप करें ","alt":"वैकल्पिक टेक्स्ट","border":"बॉर्डर","btnUpload":"इसे सर्वर को भेजें","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"हॉरिज़ॉन्टल स्पेस","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"तस्वीर की जानकारी","linkTab":"लिंक","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","resetSize":"रीसॅट साइज़","title":"तस्वीर प्रॉपर्टीज़","titleButton":"तस्वीर बटन प्रॉपर्टीज़","upload":"अपलोड","urlMissing":"Image source URL is missing.","vSpace":"वर्टिकल स्पेस","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"fakeobjects":{"anchor":"ऐंकर इन्सर्ट/संपादन","flash":"Flash Animation","hiddenfield":"गुप्त फ़ील्ड","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteArea":"Paste Area","pasteMsg":"Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.","securityMsg":"आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.","title":"पेस्ट"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"ब्लॉक-कोट"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","alignLeft":"दायें","alignRight":"दायें","alignCenter":"बीच में","alignJustify":"ब्लॉक जस्टीफ़ाई","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/lang/hr.js deleted file mode 100644 index 1cddd30c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hr']={"wsc":{"btnIgnore":"Zanemari","btnIgnoreAll":"Zanemari sve","btnReplace":"Zamijeni","btnReplaceAll":"Zamijeni sve","btnUndo":"Vrati","changeTo":"Promijeni u","errorLoading":"Greška učitavanja aplikacije: %s.","ieSpellDownload":"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?","manyChanges":"Provjera završena: Promijenjeno %1 riječi","noChanges":"Provjera završena: Nije napravljena promjena","noMispell":"Provjera završena: Nema grešaka","noSuggestions":"-Nema preporuke-","notAvailable":"Žao nam je, ali usluga trenutno nije dostupna.","notInDic":"Nije u rječniku","oneChange":"Provjera završena: Jedna riječ promjenjena","progress":"Provjera u tijeku...","title":"Provjera pravopisa","toolbar":"Provjeri pravopis"},"undo":{"redo":"Ponovi","undo":"Poništi"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"sourcearea":{"toolbar":"Kôd"},"scayt":{"btn_about":"O SCAYT","btn_dictionaries":"Rječnici","btn_disable":"Onemogući SCAYT","btn_enable":"Omogući SCAYT","btn_langs":"Jezici","btn_options":"Opcije","text_title":""},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalijepi kao čisti tekst","title":"Zalijepi kao čisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"magicline":{"title":"Ubaci paragraf ovdje"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"Pošalji"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","resetSize":"Obriši veličinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"Pošalji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije izbornika"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O CKEditoru","help":"Provjeri $1 za pomoć.","moreInfo":"Za informacije o licencama posjetite našu web stranicu:","title":"O CKEditoru","userGuide":"Vodič za CKEditor korisnike"},"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Središnje","alignJustify":"Blok poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"None","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/lang/hu.js deleted file mode 100644 index 8476ea2f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hu']={"wsc":{"btnIgnore":"Kihagyja","btnIgnoreAll":"Mindet kihagyja","btnReplace":"Csere","btnReplaceAll":"Összes cseréje","btnUndo":"Visszavonás","changeTo":"Módosítás","errorLoading":"Hiba a szolgáltatás host betöltése közben: %s.","ieSpellDownload":"A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?","manyChanges":"Helyesírás-ellenőrzés kész: %1 szó cserélve","noChanges":"Helyesírás-ellenőrzés kész: Nincs változtatott szó","noMispell":"Helyesírás-ellenőrzés kész: Nem találtam hibát","noSuggestions":"Nincs javaslat","notAvailable":"Sajnálom, de a szolgáltatás jelenleg nem elérhető.","notInDic":"Nincs a szótárban","oneChange":"Helyesírás-ellenőrzés kész: Egy szó cserélve","progress":"Helyesírás-ellenőrzés folyamatban...","title":"Helyesírás ellenörző","toolbar":"Helyesírás-ellenőrzés"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"sourcearea":{"toolbar":"Forráskód"},"scayt":{"btn_about":"SCAYT névjegy","btn_dictionaries":"Szótár","btn_disable":"SCAYT letiltása","btn_enable":"SCAYT engedélyezése","btn_langs":"Nyelvek","btn_options":"Beállítások","text_title":""},"removeformat":{"toolbar":"Formázás eltávolítása"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"magicline":{"title":"Szúrja be a bekezdést ide"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"image":{"alertUrl":"Töltse ki a kép webcímét","alt":"Buborék szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"A kiválasztott képgombból sima képet szeretne csinálni?","hSpace":"Vízsz. táv","img2Button":"A kiválasztott képből képgombot szeretne csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"Függőleges távolságnak egész számot kell beírni!"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"contextmenu":{"options":"Helyi menü opciók"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mező","pasteMsg":"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"button":{"selectedLabel":"%1 (Kiválasztva)"},"blockquote":{"toolbar":"Idézet blokk"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"CKEditor névjegy","help":"Itt találsz segítséget: $1","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:","title":"CKEditor névjegy","userGuide":"CKEditor Felhasználói útmutató"},"editor":"HTML szerkesztő","editorPanel":"Rich Text szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtettmező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignJustify":"Sorkizárt","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"None","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/id.js b/platforms/android/assets/www/lib/ckeditor/lang/id.js deleted file mode 100644 index 1ee75ecd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['id']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Editor toolbars"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"sourcearea":{"toolbar":"Sumber"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Hapus Format"},"pastetext":{"button":"Tempel sebagai teks polos","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"magicline":{"title":"Masukkan paragraf disini"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Penasehat Judul","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Kelas Stylesheet","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Kode Bahasa","langDir":"Arah Bahasa","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Edit Link","name":"Nama","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Gaya","tabIndex":"Tab Index","target":"Sasaran","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Tautan","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Tautan","type":"Link Type","unlink":"Unlink","upload":"Unggah"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"image":{"alertUrl":"Mohon tulis URL gambar","alt":"Teks alternatif","border":"Batas","btnUpload":"Kirim ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Gambar","linkTab":"Tautan","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Unggah","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"fakeobjects":{"anchor":"Anchor","flash":"Animasi Flash","hiddenfield":"Kolom Tersembunyi","iframe":"IFrame","unknown":"Obyek Tak Dikenal"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteArea":"Area Tempel","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tempel"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Kutipan Blok"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"about":{"copy":"Hak cipta &copy; $1. All rights reserved.","dlgTitle":"Tentang CKEditor","help":"Cel $1 untuk bantuan.","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:","title":"Tentang CKEditor","userGuide":"Petunjuk Pengguna CKEditor"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Rata kiri-kanan","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/is.js b/platforms/android/assets/www/lib/ckeditor/lang/is.js deleted file mode 100644 index 1cc2d663..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/is.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['is']={"wsc":{"btnIgnore":"Hunsa","btnIgnoreAll":"Hunsa allt","btnReplace":"Skipta","btnReplaceAll":"Skipta öllu","btnUndo":"Til baka","changeTo":"Tillaga","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Villuleit ekki sett upp.<br>Viltu setja hana upp?","manyChanges":"Villuleit lokið: %1 orðum breytt","noChanges":"Villuleit lokið: Engu orði breytt","noMispell":"Villuleit lokið: Engin villa fannst","noSuggestions":"- engar tillögur -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Ekki í orðabókinni","oneChange":"Villuleit lokið: Einu orði breytt","progress":"Villuleit í gangi...","title":"Spell Check","toolbar":"Villuleit"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"sourcearea":{"toolbar":"Kóði"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Fjarlægja snið"},"pastetext":{"button":"Líma sem ósniðinn texta","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"<Engin bókamerki á skrá>","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","other":"<annar>","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"<rammi>","targetFrameName":"Nafn markglugga","targetPopup":"<sprettigluggi>","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"image":{"alertUrl":"Sláðu inn slóðina að myndinni","alt":"Baklægur texti","border":"Rammi","btnUpload":"Hlaða upp","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Vinstri bil","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Almennt","linkTab":"Stikla","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","resetSize":"Reikna stærð","title":"Eigindi myndar","titleButton":"Eigindi myndahnapps","upload":"Hlaða upp","urlMissing":"Image source URL is missing.","vSpace":"Hægri bil","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Lóðrétt lína"},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteArea":"Paste Area","pasteMsg":"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.","securityMsg":"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.","title":"Líma"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Inndráttur"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","alignLeft":"Vinstri","alignRight":"Hægri","alignCenter":"Miðjað","alignJustify":"Jafna báðum megin","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/it.js b/platforms/android/assets/www/lib/ckeditor/lang/it.js deleted file mode 100644 index 5d4ee53c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['it']={"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora tutto","btnReplace":"Cambia","btnReplaceAll":"Cambia tutto","btnUndo":"Annulla","changeTo":"Cambia in","errorLoading":"Errore nel caricamento dell'host col servizio applicativo: %s.","ieSpellDownload":"Contollo ortografico non installato. Lo vuoi scaricare ora?","manyChanges":"Controllo ortografico completato: %1 parole cambiate","noChanges":"Controllo ortografico completato: nessuna parola cambiata","noMispell":"Controllo ortografico completato: nessun errore trovato","noSuggestions":"- Nessun suggerimento -","notAvailable":"Il servizio non è momentaneamente disponibile.","notInDic":"Non nel dizionario","oneChange":"Controllo ortografico completato: 1 parola cambiata","progress":"Controllo ortografico in corso","title":"Controllo ortografico","toolbar":"Correttore ortografico"},"undo":{"redo":"Ripristina","undo":"Annulla"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"sourcearea":{"toolbar":"Sorgente"},"scayt":{"btn_about":"About COMS","btn_dictionaries":"Dizionari","btn_disable":"Disabilita COMS","btn_enable":"Abilita COMS","btn_langs":"Lingue","btn_options":"Opzioni","text_title":""},"removeformat":{"toolbar":"Elimina formattazione"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"magicline":{"title":"Inserisci paragrafo qui"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"image":{"alertUrl":"Devi inserire l'URL per l'immagine","alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opzioni del menù contestuale"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"button":{"selectedLabel":"%1 (selezionato)"},"blockquote":{"toolbar":"Citazione"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Riguardo CKEditor","help":"Vedi $1 per l'aiuto.","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:","title":"Riguardo CKEditor","userGuide":"Guida Utente CKEditor"},"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignJustify":"Giustifica","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/lang/ja.js deleted file mode 100644 index 2d4b86f8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ja']={"wsc":{"btnIgnore":"無視","btnIgnoreAll":"すべて無視","btnReplace":"置換","btnReplaceAll":"すべて置換","btnUndo":"やり直し","changeTo":"変更","errorLoading":"アプリケーションサービスホスト読込みエラー: %s.","ieSpellDownload":"スペルチェッカーがインストールされていません。今すぐダウンロードしますか?","manyChanges":"スペルチェック完了: %1 語句変更されました","noChanges":"スペルチェック完了: 語句は変更されませんでした","noMispell":"スペルチェック完了: スペルの誤りはありませんでした","noSuggestions":"- 該当なし -","notAvailable":"申し訳ありません、現在サービスを利用することができません","notInDic":"辞書にありません","oneChange":"スペルチェック完了: 1語句変更されました","progress":"スペルチェック処理中...","title":"スペルチェック","toolbar":"スペルチェック"},"undo":{"redo":"やり直す","undo":"元に戻す"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールバー"},"table":{"border":"枠線の幅","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルを前に挿入","insertAfter":"セルを後に挿入","deleteCell":"セルを削除","merge":"セルを結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向に分割","splitVertical":"セルを垂直方向に分割","title":"セルのプロパティ","cellType":"セルの種類","rowSpan":"行の結合数","colSpan":"列の結合数","wordWrap":"単語の折り返し","hAlign":"水平方向の配置","vAlign":"垂直方向の配置","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"sourcearea":{"toolbar":"ソース"},"scayt":{"btn_about":"SCAYTバージョン","btn_dictionaries":"辞書","btn_disable":"SCAYT無効","btn_enable":"SCAYT有効","btn_langs":"言語","btn_options":"オプション","text_title":""},"removeformat":{"toolbar":"書式を解除"},"pastetext":{"button":"プレーンテキストとして貼り付け","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"ここに段落を挿入"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"link":{"acccessKey":"アクセスキー","advanced":"高度な設定","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカーの編集","title":"アンカーのプロパティ","name":"アンカー名","errorName":"アンカー名を入力してください。","remove":"アンカーを削除"},"anchorId":"エレメントID","anchorName":"アンカー名","charset":"リンク先のcharset","cssClasses":"スタイルシートクラス","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件名","id":"Id","info":"ハイパーリンク情報","langCode":"言語コード","langDir":"文字表記の方向","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","menu":"リンクを編集","name":"Name属性","noAnchors":"(このドキュメント内にアンカーはありません)","noEmail":"メールアドレスを入力してください。","noUrl":"リンクURLを入力してください。","other":"<その他の>","popupDependent":"開いたウィンドウに連動して閉じる (Netscape)","popupFeatures":"ポップアップウィンドウ特徴","popupFullScreen":"全画面モード(IE)","popupLeft":"左端からの座標で指定","popupLocationBar":"ロケーションバー","popupMenuBar":"メニューバー","popupResizable":"サイズ可変","popupScrollBars":"スクロールバー","popupStatusBar":"ステータスバー","popupToolbar":"ツールバー","popupTop":"上端からの座標で指定","rel":"関連リンク","selectAnchor":"アンカーを選択","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"ターゲットのフレーム名","targetPopup":"<ポップアップウィンドウ>","targetPopupName":"ポップアップウィンドウ名","title":"ハイパーリンク","toAnchor":"ページ内のアンカー","toEmail":"E-Mail","toUrl":"URL","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンクを削除","upload":"アップロード"},"indent":{"indent":"インデント","outdent":"インデント解除"},"image":{"alertUrl":"画像のURLを入力してください","alt":"代替テキスト","border":"枠線の幅","btnUpload":"サーバーに送信","button2Img":"選択した画像ボタンを画像に変換しますか?","hSpace":"水平間隔","img2Button":"選択した画像を画像ボタンに変換しますか?","infoTab":"画像情報","linkTab":"リンク","lockRatio":"比率を固定","menu":"画像のプロパティ","resetSize":"サイズをリセット","title":"画像のプロパティ","titleButton":"画像ボタンのプロパティ","upload":"アップロード","urlMissing":"画像のURLを入力してください。","vSpace":"垂直間隔","validateBorder":"枠線の幅は数値で入力してください。","validateHSpace":"水平間隔は数値で入力してください。","validateVSpace":"垂直間隔は数値で入力してください。"},"horizontalrule":{"toolbar":"水平線"},"format":{"label":"書式","panelTitle":"段落の書式","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"不可視フィールド","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"contextmenu":{"options":"コンテキストメニューオプション"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteArea":"貼り付け場所","pasteMsg":"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼り付けて、<STRONG>OK</STRONG>を押してください。","securityMsg":"ブラウザのセキュリティ設定により、エディタはクリップボードデータに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。","title":"貼り付け"},"button":{"selectedLabel":"%1 (選択中)"},"blockquote":{"toolbar":"ブロック引用文"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorについて","help":"$1 のヘルプを見てください。","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:","title":"CKEditorについて","userGuide":"CKEditor User's Guide"},"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?","options":"オプション","target":"ターゲット","targetNew":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","alignLeft":"左","alignRight":"右","alignCenter":"中央","alignJustify":"両端揃え","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidCssLength":"入力された \"%1\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。","invalidHtmlLength":"入力された \"%1\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。","invalidInlineStyle":"入力されたインラインスタイルの値は、\"名前 : 値\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/lang/ka.js deleted file mode 100644 index a92b646f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ka.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ka']={"wsc":{"btnIgnore":"უგულებელყოფა","btnIgnoreAll":"ყველას უგულებელყოფა","btnReplace":"შეცვლა","btnReplaceAll":"ყველას შეცვლა","btnUndo":"გაუქმება","changeTo":"შეცვლელი","errorLoading":"სერვისის გამოძახების შეცდომა: %s.","ieSpellDownload":"მართლწერის შემოწმება არაა დაინსტალირებული. ჩამოვქაჩოთ ინტერნეტიდან?","manyChanges":"მართლწერის შემოწმება: %1 სიტყვა შეიცვალა","noChanges":"მართლწერის შემოწმება: არაფერი შეცვლილა","noMispell":"მართლწერის შემოწმება: შეცდომა არ მოიძებნა","noSuggestions":"- არაა შემოთავაზება -","notAvailable":"უკაცრავად, ეს სერვისი ამჟამად მიუწვდომელია.","notInDic":"არაა ლექსიკონში","oneChange":"მართლწერის შემოწმება: ერთი სიტყვა შეიცვალა","progress":"მიმდინარეობს მართლწერის შემოწმება...","title":"მართლწერა","toolbar":"მართლწერა"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"sourcearea":{"toolbar":"კოდები"},"scayt":{"btn_about":"SCAYT-ის შესახებ","btn_dictionaries":"ლექსიკონები","btn_disable":"SCAYT-ის გამორთვა","btn_enable":"SCAYT-ის ჩართვა","btn_langs":"ენები","btn_options":"პარამეტრები","text_title":""},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"link":{"acccessKey":"წვდომის ღილაკი","advanced":"დაწვრილებით","advisoryContentType":"შიგთავსის ტიპი","advisoryTitle":"სათაური","anchor":{"toolbar":"ღუზა","menu":"ღუზის რედაქტირება","title":"ღუზის პარამეტრები","name":"ღუზუს სახელი","errorName":"აკრიფეთ ღუზის სახელი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სახელით","charset":"კოდირება","cssClasses":"CSS კლასი","emailAddress":"ელფოსტის მისამართები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სათაური","id":"Id","info":"ბმულის ინფორმაცია","langCode":"ენის კოდი","langDir":"ენის მიმართულება","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","menu":"ბმულის რედაქტირება","name":"სახელი","noAnchors":"(ამ დოკუმენტში ღუზა არაა)","noEmail":"აკრიფეთ ელფოსტის მისამართი","noUrl":"აკრიფეთ ბმულის URL","other":"<სხვა>","popupDependent":"დამოკიდებული (Netscape)","popupFeatures":"Popup ფანჯრის პარამეტრები","popupFullScreen":"მთელი ეკრანი (IE)","popupLeft":"მარცხენა პოზიცია","popupLocationBar":"ნავიგაციის ზოლი","popupMenuBar":"მენიუს ზოლი","popupResizable":"ცვალებადი ზომით","popupScrollBars":"გადახვევის ზოლები","popupStatusBar":"სტატუსის ზოლი","popupToolbar":"ხელსაწყოთა ზოლი","popupTop":"ზედა პოზიცია","rel":"კავშირი","selectAnchor":"აირჩიეთ ღუზა","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გახსნის ადგილი","targetFrame":"<frame>","targetFrameName":"Frame-ის სახელი","targetPopup":"<popup ფანჯარა>","targetPopupName":"Popup ფანჯრის სახელი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზაზე","toEmail":"ელფოსტა","toUrl":"URL","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მოხსნა","upload":"აქაჩვა"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"image":{"alertUrl":"აკრიფეთ სურათის URL","alt":"სანაცვლო ტექსტი","border":"ჩარჩო","btnUpload":"სერვერისთვის გაგზავნა","button2Img":"გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?","hSpace":"ჰორიზონტალური სივრცე","img2Button":"გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?","infoTab":"სურათის ინფორმცია","linkTab":"ბმული","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","resetSize":"ზომის დაბრუნება","title":"სურათის პარამეტრები","titleButton":"სურათიანი ღილაკის პარამეტრები","upload":"ატვირთვა","urlMissing":"სურათის URL არაა შევსებული.","vSpace":"ვერტიკალური სივრცე","validateBorder":"ჩარჩო მთელი რიცხვი უნდა იყოს.","validateHSpace":"ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.","validateVSpace":"ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს."},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"fakeobjects":{"anchor":"ღუზა","flash":"Flash ანიმაცია","hiddenfield":"მალული ველი","iframe":"IFrame","unknown":"უცნობი ობიექტი"},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteArea":"ჩასმის არე","pasteMsg":"ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (<strong>Ctrl/Cmd+V</strong>) და დააჭირეთ OK-ს","securityMsg":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.","title":"ჩასმა"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"ციტატა"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"about":{"copy":"Copyright &copy; $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","help":"დახმარებისთვის იხილეთ $1.","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:","title":"CKEditor-ის შესახებ","userGuide":"CKEditor-ის მომხმარებლის სახელმძღვანელო"},"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","alignLeft":"მარცხენა","alignRight":"მარჯვენა","alignCenter":"შუა","alignJustify":"両端揃え","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდომელია</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/km.js b/platforms/android/assets/www/lib/ckeditor/lang/km.js deleted file mode 100644 index c96529b4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['km']={"wsc":{"btnIgnore":"មិនផ្លាស់ប្តូរ","btnIgnoreAll":"មិនផ្លាស់ប្តូរ ទាំងអស់","btnReplace":"ជំនួស","btnReplaceAll":"ជំនួសទាំងអស់","btnUndo":"សារឡើងវិញ","changeTo":"ផ្លាស់ប្តូរទៅ","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?","manyChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ","noChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ","noMispell":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស","noSuggestions":"- គ្មានសំណើរ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"គ្មានក្នុងវចនានុក្រម","oneChange":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ","progress":"កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...","title":"Spell Check","toolbar":"ពិនិត្យអក្ខរាវិរុទ្ធ"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"table":{"border":"ទំហំ​បន្ទាត់​ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូល​ក្រឡា​ពីមុខ","insertAfter":"បញ្ចូល​ក្រឡា​ពី​ក្រោយ","deleteCell":"លុប​ក្រឡា","merge":"បញ្ចូល​ក្រឡា​ចូល​គ្នា","mergeRight":"បញ្ចូល​គ្នា​ខាង​ស្ដាំ","mergeDown":"បញ្ចូល​គ្នា​ចុះ​ក្រោម","splitHorizontal":"ពុះ​ក្រឡា​ផ្ដេក","splitVertical":"ពុះ​ក្រឡា​បញ្ឈរ","title":"លក្ខណៈ​ក្រឡា","cellType":"ប្រភេទ​ក្រឡា","rowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា","colSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា","wordWrap":"រុំ​ពាក្យ","hAlign":"ការ​តម្រឹម​ផ្ដេក","vAlign":"ការ​តម្រឹម​បញ្ឈរ","alignBaseline":"ខ្សែ​បន្ទាត់​គោល","bgColor":"ពណ៌​ផ្ទៃ​ក្រោយ","borderColor":"ពណ៌​បន្ទាត់​ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidHeight":"កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidRowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","invalidColSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះ​ក្រឡា","cellSpace":"គម្លាត​ក្រឡា","column":{"menu":"ជួរ​ឈរ","insertBefore":"បញ្ចូល​ជួរ​ឈរ​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ","deleteColumn":"លុប​ជួរ​ឈរ"},"columns":"ជួរឈរ","deleteTable":"លុប​តារាង","headers":"ក្បាល","headersBoth":"ទាំង​ពីរ","headersColumn":"ជួរ​ឈរ​ដំបូង","headersNone":"មិន​មាន","headersRow":"ជួរ​ដេក​ដំបូង","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"link":{"acccessKey":"សោរ​ចូល","advanced":"កម្រិត​ខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ​ប្រឹក្សា","advisoryTitle":"ចំណងជើង​ប្រឹក្សា","anchor":{"toolbar":"យុថ្កា","menu":"កែ​យុថ្កា","title":"លក្ខណៈ​យុថ្កា","name":"ឈ្មោះ​យុថ្កា","errorName":"សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា","remove":"ដក​យុថ្កា​ចេញ"},"anchorId":"តាម ID ធាតុ","anchorName":"តាម​ឈ្មោះ​យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អាសយដ្ឋាន​អ៊ីមែល","emailBody":"តួ​អត្ថបទ","emailSubject":"ប្រធានបទ​សារ","id":"Id","info":"ព័ត៌មាន​ពី​តំណ","langCode":"កូដ​ភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែ​តំណ","name":"ឈ្មោះ","noAnchors":"(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)","noEmail":"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល","noUrl":"សូម​បញ្ចូល​តំណ URL","other":"<ផ្សេង​ទៀត>","popupDependent":"Dependent (Netscape)","popupFeatures":"មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង","popupFullScreen":"ពេញ​អេក្រង់ (IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របារ​ទីតាំង","popupMenuBar":"របារ​ម៉ឺនុយ","popupResizable":"អាច​ប្ដូរ​ទំហំ","popupScrollBars":"របារ​រំកិល","popupStatusBar":"របារ​ស្ថានភាព","popupToolbar":"របារ​ឧបករណ៍","popupTop":"ទីតាំង​កំពូល","rel":"សម្ពន្ធ​ភាព","selectAnchor":"រើស​យក​យុថ្កា​មួយ","styles":"ស្ទីល","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ស៊ុម>","targetFrameName":"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ","targetPopup":"<វីនដូ​ផុស​ឡើង>","targetPopupName":"ឈ្មោះ​វីនដូត​ផុស​ឡើង","title":"តំណ","toAnchor":"ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"តំណ","type":"ប្រភេទ​តំណ","unlink":"ផ្ដាច់​តំណ","upload":"ផ្ទុក​ឡើង"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"image":{"alertUrl":"សូម​បញ្ចូល URL រូបភាព","alt":"អត្ថបទជំនួស","border":"ស៊ុម","btnUpload":"ផ្ញើ​ទៅ​ម៉ាស៊ីន​បម្រើ","button2Img":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​ប៊ូតុង​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​រូបភាព​ធម្មតា​មួយ​មែនទេ?","hSpace":"គម្លាត​ផ្ដេក","img2Button":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​ប៊ូតុង​រូបភាព​មែនទេ?","infoTab":"ពត៌មានអំពីរូបភាព","linkTab":"តំណ","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ខណៈ​រូបភាព","resetSize":"កំណត់ទំហំឡើងវិញ","title":"លក្ខណៈ​រូបភាព","titleButton":"លក្ខណៈ​ប៊ូតុង​រូបភាព","upload":"ផ្ទុកឡើង","urlMissing":"ខ្វះ URL ប្រភព​រូប​ភាព។","vSpace":"គម្លាត​បញ្ឈរ","validateBorder":"ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","validateHSpace":"គម្លាត​ផ្ដេក​ត្រូវ​តែ​ជា​លេខ។","validateVSpace":"គម្លាត​បញ្ឈរ​ត្រូវ​តែ​ជា​លេខ។"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់​កថាខណ្ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មតា (DIV)","tag_h1":"ចំណង​ជើង 1","tag_h2":"ចំណង​ជើង 2","tag_h3":"ចំណង​ជើង 3","tag_h4":"ចំណង​ជើង 4","tag_h5":"ចំណង​ជើង 5","tag_h6":"ចំណង​ជើង 6","tag_p":"ធម្មតា","tag_pre":"Formatted"},"fakeobjects":{"anchor":"យុថ្កា","flash":"Flash មាន​ចលនា","hiddenfield":"វាល​កំបាំង","iframe":"IFrame","unknown":"វត្ថុ​មិន​ស្គាល់"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។","securityMsg":"ព្រោះតែ​ការកំណត់​សុវត្ថិភាព ប្រអប់សរសេរ​មិន​អាចចាប់​យកទិន្នន័យពីក្តារតម្បៀតខ្ទាស់​អ្នក​​ដោយផ្ទាល់​បានទេ។ អ្នក​ត្រូវចំលង​ដាក់វាម្តង​ទៀត ក្នុងផ្ទាំងនេះ។","title":"បិទ​ភ្ជាប់"},"button":{"selectedLabel":"%1 (បាន​ជ្រើស​រើស)"},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"about":{"copy":"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","help":"ពិនិត្យ $1 សម្រាប់​ជំនួយ។","moreInfo":"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖","title":"អំពី CKEditor","userGuide":"វិធី​ប្រើ​ប្រាស់ CKEditor"},"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"Textarea","hiddenField":"វាល​កំបាំង","button":"ប៊ូតុង","select":"វាល​ជម្រើស","imageButton":"ប៊ូតុង​រូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខ​កូដ​ភាសា","longDescr":"URL អធិប្បាយ​វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណង​ជើង​ណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើល​ជា​មុន","resize":"ប្ដូរ​ទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិត​ខ្ពស់","validateNumberFailed":"តម្លៃ​នេះ​ពុំ​មែន​ជា​លេខ​ទេ។","confirmNewPage":"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាតិកា​នេះ នឹង​ត្រូវ​បាត់​បង់។ តើ​អ្នក​ពិត​ជា​ចង់​ផ្ទុក​ទំព័រ​ថ្មី​មែនទេ?","confirmCancel":"ការ​កំណត់​មួយ​ចំនួន​ត្រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ តើ​អ្នក​ពិត​ជា​ចង់​បិទ​ប្រអប់​នេះ​មែនទេ?","options":"ការ​កំណត់","target":"គោលដៅ","targetNew":"វីនដូ​ថ្មី (_blank)","targetTop":"វីនដូ​លើ​គេ (_top)","targetSelf":"វីនដូ​ដូច​គ្នា (_self)","targetParent":"វីនដូ​មេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់​ទីតាំង","alignLeft":"ខាងឆ្វង","alignRight":"ខាងស្តាំ","alignCenter":"កណ្តាល","alignJustify":"両端揃え","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"អត់","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidCssLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃ​កំណត់​សម្រាប់​រចនាបថ​ក្នុង​តួ ត្រូវ​តែ​មាន​មួយ​ឬ​ធាតុ​ច្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \"ឈ្មោះ : តម្លៃ\" ហើយ​ញែក​ចេញ​ពី​គ្នា​ដោយ​ចុច​ក្បៀស។","cssLengthTooltip":"បញ្ចូល​លេខ​សម្រាប់​តម្លៃ​ជា​ភិចសែល ឬ​លេខ​ដែល​មាន​ឯកតា​ត្រឹមត្រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1<span class=\"cke_accessibility\">, មិន​មាន</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/lang/ko.js deleted file mode 100644 index aa75cb8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ko']={"wsc":{"btnIgnore":"건너뜀","btnIgnoreAll":"모두 건너뜀","btnReplace":"변경","btnReplaceAll":"모두 변경","btnUndo":"취소","changeTo":"변경할 단어","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?","manyChanges":"철자검사 완료: %1 단어가 변경되었습니다.","noChanges":"철자검사 완료: 변경된 단어가 없습니다.","noMispell":"철자검사 완료: 잘못된 철자가 없습니다.","noSuggestions":"- 추천단어 없음 -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"사전에 없는 단어","oneChange":"철자검사 완료: 단어가 변경되었습니다.","progress":"철자검사를 진행중입니다...","title":"Spell Check","toolbar":"철자검사"},"undo":{"redo":"재실행","undo":"취소"},"toolbar":{"toolbarCollapse":"툴바 삭제","toolbarExpand":"확장 툴바","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"편집자용 툴바들"},"table":{"border":"테두리 크기","caption":"캡션","cell":{"menu":"셀/칸(Cell)","insertBefore":"앞에 셀/칸 삽입","insertAfter":"뒤에 셀/칸 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 뭉치기","mergeDown":"왼쪽 뭉치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열(Column)","insertBefore":"앞에 열 삽입","insertAfter":"뒤에 열 삽입","deleteColumn":"세로줄 삭제"},"columns":"세로줄","deleteTable":"표 삭제","headers":"해더","headersBoth":"모두","headersColumn":"첫 열","headersNone":"None","headersRow":"첫 행","invalidBorder":"테두리 크기는 숫자여야 합니다.","invalidCellPadding":"셀 안쪽의 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"행 번호는 0보다 큰 숫자여야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 큰 숫자여야 합니다.","invalidWidth":"표의 폭은 숫자여야 합니다.","menu":"표 설정","row":{"menu":"행(Row)","insertBefore":"앞에 행 삽입","insertAfter":"뒤에 행 삽입","deleteRow":"가로줄 삭제"},"rows":"가로줄","summary":"요약","title":"표 설정","toolbar":"표","widthPc":"퍼센트","widthPx":"픽셀","widthUnit":"폭 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"오브젝트 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcearea":{"toolbar":"소스"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"포맷 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣기 할 텍스트는 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 MS Word 포멧을 삭제 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 형식에서 붙여넣기","toolbar":"MS Word 형식에서 붙여넣기"},"maximize":{"maximize":"최대","minimize":"최소"},"magicline":{"title":"여기에 그래프 삽입"},"list":{"bulletedlist":"순서없는 목록","numberedlist":"순서있는 목록"},"link":{"acccessKey":"엑세스 키","advanced":"자세히","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"책갈피 삽입/변경","menu":"책갈피 속성","title":"책갈피 속성","name":"책갈피 이름","errorName":"책갈피 이름을 입력하십시요.","remove":"Remove Anchor"},"anchorId":"책갈피 ID","anchorName":"책갈피 이름","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"이메일 주소","emailBody":"내용","emailSubject":"제목","id":"ID","info":"링크 정보","langCode":"쓰기 방향","langDir":"쓰기 방향","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","menu":"링크 수정","name":"Name","noAnchors":"(문서에 책갈피가 없습니다.)","noEmail":"이메일주소를 입력하십시요.","noUrl":"링크 URL을 입력하십시요.","other":"<기타>","popupDependent":"Dependent (Netscape)","popupFeatures":"팝업창 설정","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소표시줄","popupMenuBar":"메뉴바","popupResizable":"크기 조절 가능","popupScrollBars":"스크롤바","popupStatusBar":"상태바","popupToolbar":"툴바","popupTop":"윗쪽 위치","rel":"관계","selectAnchor":"책갈피 선택","styles":"Style","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 이름","targetPopup":"<팝업창>","targetPopupName":"팝업창 이름","title":"링크","toAnchor":"책갈피","toEmail":"이메일","toUrl":"URL","toolbar":"링크 삽입/변경","type":"링크 종류","unlink":"링크 삭제","upload":"업로드"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image":{"alertUrl":"이미지 URL을 입력하십시요","alt":"이미지 설명","border":"테두리","btnUpload":"서버로 전송","button2Img":"단순 이미지에서 선택한 이미지 버튼을 변환하시겠습니까?","hSpace":"수평여백","img2Button":"이미지 버튼에 선택한 이미지를 변환하시겠습니까?","infoTab":"이미지 정보","linkTab":"링크","lockRatio":"비율 유지","menu":"이미지 설정","resetSize":"원래 크기로","title":"이미지 설정","titleButton":"이미지버튼 속성","upload":"업로드","urlMissing":"이미지 소스 URL이 없습니다.","vSpace":"수직여백","validateBorder":"테두리는 정수여야 합니다.","validateHSpace":"가로 길이는 정수여야 합니다.","validateVSpace":"세로 길이는 정수여야 합니다."},"horizontalrule":{"toolbar":"수평선 삽입"},"format":{"label":"포맷","panelTitle":"포맷","tag_address":"Address","tag_div":"기본 (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"책갈피 삽입/변경","flash":"Flash Animation","hiddenfield":"숨김필드","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"요소 위치","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사하기","copyError":"브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+C).","cut":"잘라내기","cutError":"브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+X).","paste":"붙여넣기","pasteArea":"범위 붙여넣기","pasteMsg":"키보드의 (<STRONG>Ctrl/Cmd+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.","securityMsg":"브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.","title":"붙여넣기"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"인용 블록"},"basicstyles":{"bold":"진하게","italic":"이텔릭","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 &copy; $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","help":"도움이 필요하시면 $1 를 확인하세요","moreInfo":"라이센스에 대한 정보를 보고싶다면 우리의 웹 사이트를 방문하세요:","title":"CKEditor에 대하여","userGuide":"CKEditor User's Guide"},"editor":"리치 텍스트 편집기","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"도움이 필요하시면 ALT 0 을 누르세요","browseServer":"서버 보기","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래쉬","form":"폼","checkbox":"체크박스","radio":"라디오버튼","textField":"입력필드","textarea":"입력영역","hiddenField":"숨김필드","button":"버튼","select":"펼침목록","imageButton":"이미지버튼","notSet":"<설정되지 않음>","id":"ID","name":"Name","langDir":"쓰기 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"URL 설명","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"예","cancel":"아니오","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"몇몇개의 옵션이 바꼈습니다. 정말로 창을 닫으시겠습니까?","options":"옵션","target":"타겟","targetNew":"새로운 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"너비","height":"높이","align":"정렬","alignLeft":"왼쪽","alignRight":"오른쪽","alignCenter":"가운데","alignJustify":"両端揃え","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"None","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, 사용할 수 없음</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/lang/ku.js deleted file mode 100644 index ee193520..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ku']={"wsc":{"btnIgnore":"پشتگوێ کردن","btnIgnoreAll":"پشتگوێکردنی ههمووی","btnReplace":"لهبریدانن","btnReplaceAll":"لهبریدانانی ههمووی","btnUndo":"پووچکردنهوه","changeTo":"گۆڕینی بۆ","errorLoading":"ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.","ieSpellDownload":"پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?","manyChanges":"پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ی وشهکان گۆڕدرا","noChanges":"پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا","noMispell":"پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه","noSuggestions":"- هیچ پێشنیارێك -","notAvailable":"ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.","notInDic":"لهفهرههنگ دانیه","oneChange":"پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا","progress":"پشکنینی ڕێنووس لهبهردهوامبوون دایه...","title":"پشکنینی ڕێنووس","toolbar":"پشکنینی ڕێنووس"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لەپێش","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی لەگەڵ ڕاست","mergeDown":"تێکەڵکردنی لەگەڵ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"ڕەنگی پاشبنەما","borderColor":"ڕەنگی پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون لەپێش","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"sourcearea":{"toolbar":"سەرچاوە"},"scayt":{"btn_about":"دهربارهی SCAYT","btn_dictionaries":"فهرههنگهکان","btn_disable":"ناچالاککردنی SCAYT","btn_enable":"چالاککردنی SCAYT","btn_langs":"زمانهکان","btn_options":"ههڵبژارده","text_title":""},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"magicline":{"title":"بڕگە لێرە دابنێ"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"link":{"acccessKey":"کلیلی دەستپێگەیشتن","advanced":"پێشکەوتوو","advisoryContentType":"جۆری ناوەڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سەردێڕ","anchor":{"toolbar":"دانان/چاکسازی لەنگەر","menu":"چاکسازی لەنگەر","title":"خاسیەتی لەنگەر","name":"ناوی لەنگەر","errorName":"تکایه ناوی لەنگەر بنووسه","remove":"لابردنی لەنگەر"},"anchorId":"بەپێی ناسنامەی توخم","anchorName":"بەپێی ناوی لەنگەر","charset":"بەستەری سەرچاوەی نووسە","cssClasses":"شێوازی چینی پەڕه","emailAddress":"ناونیشانی ئیمەیل","emailBody":"ناوەڕۆکی نامە","emailSubject":"بابەتی نامە","id":"ناسنامە","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستەی زمان","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)","noEmail":"تکایە ناونیشانی ئیمەیل بنووسە","noUrl":"تکایە ناونیشانی بەستەر بنووسە","other":"<هیتر>","popupDependent":"پێوەبەستراو (Netscape)","popupFeatures":"خاسیەتی پەنجەرەی سەرهەڵدەر","popupFullScreen":"پڕ بەپڕی شاشە (IE)","popupLeft":"جێگای چەپ","popupLocationBar":"هێڵی ناونیشانی بەستەر","popupMenuBar":"هێڵی لیسته","popupResizable":"توانای گۆڕینی قەباره","popupScrollBars":"هێڵی هاتووچۆپێکردن","popupStatusBar":"هێڵی دۆخ","popupToolbar":"هێڵی تووڵامراز","popupTop":"جێگای سەرەوە","rel":"پەیوەندی","selectAnchor":"هەڵبژاردنی لەنگەرێك","styles":"شێواز","tabIndex":"بازدەری تابی ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوە>","targetFrameName":"ناوی ئامانجی چووارچێوە","targetPopup":"<پەنجەرەی سەرهەڵدەر>","targetPopupName":"ناوی پەنجەرەی سەرهەڵدەر","title":"بەستەر","toAnchor":"بەستەر بۆ لەنگەر له دەق","toEmail":"ئیمەیل","toUrl":"ناونیشانی بەستەر","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بەستەر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"image":{"alertUrl":"تکایه ناونیشانی بەستەری وێنه بنووسه","alt":"جێگرەوەی دەق","border":"پەراوێز","btnUpload":"ناردنی بۆ ڕاژه","button2Img":"تۆ دەتەوێت دوگمەی وێنەی دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟","hSpace":"بۆشایی ئاسۆیی","img2Button":"تۆ دەتەوێت وێنەی دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟","infoTab":"زانیاری وێنه","linkTab":"بەستەر","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","resetSize":"ڕێکخستنەوەی قەباره","title":"خاسیەتی وێنه","titleButton":"خاسیەتی دوگمەی وێنه","upload":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","vSpace":"بۆشایی ئەستونی","validateBorder":"پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.","validateHSpace":"بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.","validateVSpace":"بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت."},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"fakeobjects":{"anchor":"لەنگەر","flash":"فلاش","hiddenfield":"شاردنەوەی خانه","iframe":"لەچوارچێوە","unknown":"بەرکارێکی نەناسراو"},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteArea":"ناوچەی لکاندن","pasteMsg":"تکایە بیلکێنە لەناوەوەی ئەم سنوقە لەڕێی تەختەکلیلەکەت بە بەکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشە بکە.","securityMsg":"بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت لەم پەنجەرەیه.","title":"لکاندن"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"about":{"copy":"مافی لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor","help":"سەیری $1 بکه بۆ یارمەتی.","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:","title":"دەربارەی CKEditor","userGuide":"ڕێپیشاندەری CKEditors"},"editor":"سەرنووسەی دەقی بە پیت","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی په‌ڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"هەڵوەشاندن","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","alignLeft":"چەپ","alignRight":"ڕاست","alignCenter":"ناوەڕاست","alignJustify":"هاوستوونی","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"None","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە فاریزە و خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/lang/lt.js deleted file mode 100644 index abfe9d8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['lt']={"wsc":{"btnIgnore":"Ignoruoti","btnIgnoreAll":"Ignoruoti visus","btnReplace":"Pakeisti","btnReplaceAll":"Pakeisti visus","btnUndo":"Atšaukti","changeTo":"Pakeisti į","errorLoading":"Klaida įkraunant servisą: %s.","ieSpellDownload":"Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?","manyChanges":"Rašybos tikrinimas baigtas: Pakeista %1 žodžių","noChanges":"Rašybos tikrinimas baigtas: Nėra pakeistų žodžių","noMispell":"Rašybos tikrinimas baigtas: Nerasta rašybos klaidų","noSuggestions":"- Nėra pasiūlymų -","notAvailable":"Atleiskite, šiuo metu servisas neprieinamas.","notInDic":"Žodyne nerastas","oneChange":"Rašybos tikrinimas baigtas: Vienas žodis pakeistas","progress":"Vyksta rašybos tikrinimas...","title":"Tikrinti klaidas","toolbar":"Rašybos tikrinimas"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"sourcearea":{"toolbar":"Šaltinis"},"scayt":{"btn_about":"Apie SCAYT","btn_dictionaries":"Žodynai","btn_disable":"Išjungti SCAYT","btn_enable":"Įjungti SCAYT","btn_langs":"Kalbos","btn_options":"Parametrai","text_title":""},"removeformat":{"toolbar":"Panaikinti formatą"},"pastetext":{"button":"Įdėti kaip gryną tekstą","title":"Įdėti kaip gryną tekstą"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"Konsultacinė antraštė","anchor":{"toolbar":"Įterpti/modifikuoti žymę","menu":"Žymės savybės","title":"Žymės savybės","name":"Žymės vardas","errorName":"Prašome įvesti žymės vardą","remove":"Pašalinti žymę"},"anchorId":"Pagal žymės Id","anchorName":"Pagal žymės vardą","charset":"Susietų išteklių simbolių lentelė","cssClasses":"Stilių lentelės klasės","emailAddress":"El.pašto adresas","emailBody":"Žinutės turinys","emailSubject":"Žinutės tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","menu":"Taisyti nuorodą","name":"Vardas","noAnchors":"(Šiame dokumente žymių nėra)","noEmail":"Prašome įvesti el.pašto adresą","noUrl":"Prašome įvesti nuorodos URL","other":"<kitas>","popupDependent":"Priklausomas (Netscape)","popupFeatures":"Išskleidžiamo lango savybės","popupFullScreen":"Visas ekranas (IE)","popupLeft":"Kairė pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"Būsenos juosta","popupToolbar":"Mygtukų juosta","popupTop":"Viršutinė pozicija","rel":"Sąsajos","selectAnchor":"Pasirinkite žymę","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"<kadras>","targetFrameName":"Paskirties kadro vardas","targetPopup":"<išskleidžiamas langas>","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"Žymė šiame puslapyje","toEmail":"El.paštas","toUrl":"Nuoroda","toolbar":"Įterpti/taisyti nuorodą","type":"Nuorodos tipas","unlink":"Panaikinti nuorodą","upload":"Siųsti"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"image":{"alertUrl":"Prašome įvesti vaizdo URL","alt":"Alternatyvus Tekstas","border":"Rėmelis","btnUpload":"Siųsti į serverį","button2Img":"Ar norite mygtuką paversti paprastu paveiksliuku?","hSpace":"Hor.Erdvė","img2Button":"Ar norite paveiksliuką paversti mygtuku?","infoTab":"Vaizdo informacija","linkTab":"Nuoroda","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","resetSize":"Atstatyti dydį","title":"Vaizdo savybės","titleButton":"Vaizdinio mygtuko savybės","upload":"Nusiųsti","urlMissing":"Paveiksliuko nuorodos nėra.","vSpace":"Vert.Erdvė","validateBorder":"Reikšmė turi būti sveikas skaičius.","validateHSpace":"Reikšmė turi būti sveikas skaičius.","validateVSpace":"Reikšmė turi būti sveikas skaičius."},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"fakeobjects":{"anchor":"Žymė","flash":"Flash animacija","hiddenfield":"Paslėptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteArea":"Įkelti dalį","pasteMsg":"Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.","securityMsg":"Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.","title":"Įdėti"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citata"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor","help":"Patikrinkite $1 dėl pagalbos.","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:","title":"Apie CKEditor","userGuide":"CKEditor Vartotojo Gidas"},"editor":"Pilnas redaktorius","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nėra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","alignLeft":"Kairę","alignRight":"Dešinę","alignCenter":"Centrą","alignJustify":"Lygiuoti abi puses","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"None","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/lang/lv.js deleted file mode 100644 index 2428cfc6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['lv']={"wsc":{"btnIgnore":"Ignorēt","btnIgnoreAll":"Ignorēt visu","btnReplace":"Aizvietot","btnReplaceAll":"Aizvietot visu","btnUndo":"Atcelt","changeTo":"Nomainīt uz","errorLoading":"Kļūda ielādējot aplikācijas servisa adresi: %s.","ieSpellDownload":"Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?","manyChanges":"Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti","noChanges":"Pareizrakstības pārbaude pabeigta: nekas netika labots","noMispell":"Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas","noSuggestions":"- Nav ieteikumu -","notAvailable":"Atvainojiet, bet serviss šobrīd nav pieejams.","notInDic":"Netika atrasts vārdnīcā","oneChange":"Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts","progress":"Notiek pareizrakstības pārbaude...","title":"Pārbaudīt gramatiku","toolbar":"Pareizrakstības pārbaude"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"sourcearea":{"toolbar":"HTML kods"},"scayt":{"btn_about":"Par SCAYT","btn_dictionaries":"Vārdnīcas","btn_disable":"Atslēgt SCAYT","btn_enable":"Ieslēgt SCAYT","btn_langs":"Valodas","btn_options":"Uzstādījumi","text_title":""},"removeformat":{"toolbar":"Noņemt stilus"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","title":"Ievietot kā vienkāršu tekstu"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"magicline":{"title":"Ievietot šeit rindkopu"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"Izvērstais","advisoryContentType":"Konsultatīvs satura tips","advisoryTitle":"Konsultatīvs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezīmi","menu":"Labot iezīmi","title":"Iezīmes uzstādījumi","name":"Iezīmes nosaukums","errorName":"Lūdzu norādiet iezīmes nosaukumu","remove":"Noņemt iezīmi"},"anchorId":"Pēc elementa ID","anchorName":"Pēc iezīmes nosaukuma","charset":"Pievienotā resursa kodējums","cssClasses":"Stilu saraksta klases","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tēma","id":"ID","info":"Hipersaites informācija","langCode":"Valodas kods","langDir":"Valodas lasīšanas virziens","langDirLTR":"No kreisās uz labo (LTR)","langDirRTL":"No labās uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Šajā dokumentā nav iezīmju)","noEmail":"Lūdzu norādi e-pasta adresi","noUrl":"Lūdzu norādi hipersaiti","other":"<cits>","popupDependent":"Atkarīgs (Netscape)","popupFeatures":"Uznirstošā loga nosaukums īpašības","popupFullScreen":"Pilnā ekrānā (IE)","popupLeft":"Kreisā koordināte","popupLocationBar":"Atrašanās vietas josla","popupMenuBar":"Izvēlnes josla","popupResizable":"Mērogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"Rīku josla","popupTop":"Augšējā koordināte","rel":"Relācija","selectAnchor":"Izvēlēties iezīmi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"Mērķis","targetFrame":"<ietvars>","targetFrameName":"Mērķa ietvara nosaukums","targetPopup":"<uznirstošā logā>","targetPopupName":"Uznirstošā loga nosaukums","title":"Hipersaite","toAnchor":"Iezīme šajā lapā","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"Augšupielādēt"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"image":{"alertUrl":"Lūdzu norādīt attēla hipersaiti","alt":"Alternatīvais teksts","border":"Rāmis","btnUpload":"Nosūtīt serverim","button2Img":"Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?","hSpace":"Horizontālā telpa","img2Button":"Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?","infoTab":"Informācija par attēlu","linkTab":"Hipersaite","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","resetSize":"Atjaunot sākotnējo izmēru","title":"Attēla īpašības","titleButton":"Attēlpogas īpašības","upload":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","vSpace":"Vertikālā telpa","validateBorder":"Apmalei jābūt veselam skaitlim","validateHSpace":"HSpace jābūt veselam skaitlim","validateVSpace":"VSpace jābūt veselam skaitlim"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"fakeobjects":{"anchor":"Iezīme","flash":"Flash animācija","hiddenfield":"Slēpts lauks","iframe":"Iframe","unknown":"Nezināms objekts"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteArea":"Ielīmēšanas zona","pasteMsg":"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.","securityMsg":"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.","title":"Ievietot"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Bloka citāts"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor","help":"Pārbaudiet $1 palīdzībai.","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:","title":"Par CKEditor","userGuide":"CKEditor Lietotāja pamācība"},"editor":"Bagātinātā teksta redaktors","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"Centrēti","alignJustify":"Izlīdzināt malas","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"None","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/lang/mk.js deleted file mode 100644 index 7641a8b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/mk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['mk']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/lang/mn.js deleted file mode 100644 index a1b0fa7d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/mn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['mn']={"wsc":{"btnIgnore":"Зөвшөөрөх","btnIgnoreAll":"Бүгдийг зөвшөөрөх","btnReplace":"Солих","btnReplaceAll":"Бүгдийг Дарж бичих","btnUndo":"Буцаах","changeTo":"Өөрчлөх","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?","manyChanges":"Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн","noChanges":"Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй","noMispell":"Дүрэм шалгаад дууссан: Алдаа олдсонгүй","noSuggestions":"- Тайлбаргүй -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Толь бичиггүй","oneChange":"Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн","progress":"Дүрэм шалгаж байгаа үйл явц...","title":"Spell Check","toolbar":"Үгийн дүрэх шалгах"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Холбоосууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Хэрэгслүүд"},"toolbars":"Болосруулагчийн хэрэгслийн самбар"},"table":{"border":"Хүрээний хэмжээ","caption":"Тайлбар","cell":{"menu":"Нүх/зай","insertBefore":"Нүх/зай өмнө нь оруулах","insertAfter":"Нүх/зай дараа нь оруулах","deleteCell":"Нүх устгах","merge":"Нүх нэгтэх","mergeRight":"Баруун тийш нэгтгэх","mergeDown":"Доош нэгтгэх","splitHorizontal":"Нүх/зайг босоогоор нь тусгаарлах","splitVertical":"Нүх/зайг хөндлөнгөөр нь тусгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Хэвтээд тэгшлэх арга","vAlign":"Босоод тэгшлэх арга","alignBaseline":"Baseline","bgColor":"Дэвсгэр өнгө","borderColor":"Хүрээний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Нүдний өргөн нь тоо байх ёстой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Нүх доторлох(padding)","cellSpace":"Нүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана устгах"},"columns":"Багана","deleteTable":"Хүснэгт устгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Хүснэгтийн өргөн нь тоо байх ёстой.","menu":"Хүснэгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр устгах"},"rows":"Мөр","summary":"Тайлбар","title":"Хүснэгт","toolbar":"Хүснэгт","widthPc":"хувь","widthPx":"цэг","widthUnit":"өргөний нэгж"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"sourcearea":{"toolbar":"Код"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Толь бичгүүд","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Хэлүүд","btn_options":"Сонголт","text_title":""},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","title":"Энгийн бичвэрээр буулгах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-оос буулгах","toolbar":"Word-оос буулгах"},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"link":{"acccessKey":"Холбох түлхүүр","advanced":"Нэмэлт","advisoryContentType":"Зөвлөлдөх төрлийн агуулга","advisoryTitle":"Зөвлөлдөх гарчиг","anchor":{"toolbar":"Зангуу","menu":"Зангууг болосруулах","title":"Зангуугийн шинж чанар","name":"Зангуугийн нэр","errorName":"Зангуугийн нэрийг оруулна уу","remove":"Зангууг устгах"},"anchorId":"Элемэнтйн Id нэрээр","anchorName":"Зангуугийн нэрээр","charset":"Тэмдэгт оноох нөөцөд холбогдсон","cssClasses":"Stylesheet классууд","emailAddress":"Э-шуудангийн хаяг","emailBody":"Зурвасны их бие","emailSubject":"Зурвасны гарчиг","id":"Id","info":"Холбоосын тухай мэдээлэл","langCode":"Хэлний код","langDir":"Хэлний чиглэл","langDirLTR":"Зүүнээс баруун (LTR)","langDirRTL":"Баруунаас зүүн (RTL)","menu":"Холбоос засварлах","name":"Нэр","noAnchors":"(Баримт бичиг зангуугүй байна)","noEmail":"Э-шуудангий хаягаа шивнэ үү","noUrl":"Холбоосны URL хаягийг шивнэ үү","other":"<other>","popupDependent":"Хамаатай (Netscape)","popupFeatures":"Popup цонхны онцлог","popupFullScreen":"Цонх дүүргэх (Internet Explorer)","popupLeft":"Зүүн байрлал","popupLocationBar":"Location хэсэг","popupMenuBar":"Цэсний самбар","popupResizable":"Resizable","popupScrollBars":"Скрол хэсэгүүд","popupStatusBar":"Статус хэсэг","popupToolbar":"Багажны самбар","popupTop":"Дээд байрлал","rel":"Relationship","selectAnchor":"Нэг зангууг сонгоно уу","styles":"Загвар","tabIndex":"Tab индекс","target":"Байрлал","targetFrame":"<Агуулах хүрээ>","targetFrameName":"Очих фремын нэр","targetPopup":"<popup цонх>","targetPopupName":"Popup цонхны нэр","title":"Холбоос","toAnchor":"Энэ бичвэр дэх зангуу руу очих холбоос","toEmail":"Э-захиа","toUrl":"цахим хуудасны хаяг (URL)","toolbar":"Холбоос","type":"Линкийн төрөл","unlink":"Холбоос авч хаях","upload":"Хуулах"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"image":{"alertUrl":"Зурагны URL-ын төрлийн сонгоно уу","alt":"Зургийг орлох бичвэр","border":"Хүрээ","btnUpload":"Үүнийг сервэррүү илгээ","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хөндлөн зай","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Зурагны мэдээлэл","linkTab":"Холбоос","lockRatio":"Радио түгжих","menu":"Зураг","resetSize":"хэмжээ дахин оноох","title":"Зураг","titleButton":"Зурган товчны шинж чанар","upload":"Хуулах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","vSpace":"Босоо зай","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"Хаяг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Хэвийн","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Зангуу","flash":"Flash Animation","hiddenfield":"Нууц талбар","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteArea":"Paste Area","pasteMsg":"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.","securityMsg":"Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.","title":"Буулгах"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Ишлэл хэсэг"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх","url":"цахим хуудасны хаяг (URL)","protocol":"Протокол","upload":"Илгээж ачаалах","uploadSubmit":"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх","image":"Зураг","flash":"Флаш хөдөлгөөнтэй зураг","form":"Маягт","checkbox":"Тэмдэглээний нүд","radio":"Радио товчлуур","textField":"Бичвэрийн талбар","textarea":"Бичвэрийн зай","hiddenField":"Далд талбар","button":"Товчлуур","select":"Сонголтын талбар","imageButton":"Зургий товчуур","notSet":"<тохируулаагүй>","id":"Id (техникийн нэр)","name":"Нэр","langDir":"Хэлний чиглэл","langDirLtr":"Зүүнээс баруун (LTR)","langDirRtl":"Баруунаас зүүн (RTL)","langCode":"Хэлний код","longDescr":"Урт тайлбарын вэб хаяг","cssClass":"Хэлбэрийн хуудасны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","ok":"За","cancel":"Болих","close":"Хаах","preview":"Урьдчилан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Гүнзгий","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн талаас баруун тийшээ (LTR)","langDirRTL":"Баруун талаас зүүн тийшээ (RTL)","styles":"Загвар","cssClasses":"Хэлбэрийн хуудасны ангиуд","width":"Өргөн","height":"Өндөр","align":"Эгнээ","alignLeft":"Зүүн","alignRight":"Баруун","alignCenter":"Төвд","alignJustify":"Тэгшлэх","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/lang/ms.js deleted file mode 100644 index 12b0437e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ms.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ms']={"wsc":{"btnIgnore":"Biar","btnIgnoreAll":"Biarkan semua","btnReplace":"Ganti","btnReplaceAll":"Gantikan Semua","btnUndo":"Batalkan","changeTo":"Tukarkan kepada","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?","manyChanges":"Pemeriksaan ejaan siap: %1 perkataan diubah","noChanges":"Pemeriksaan ejaan siap: Tiada perkataan diubah","noMispell":"Pemeriksaan ejaan siap: Tiada salah ejaan","noSuggestions":"- Tiada cadangan -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Tidak terdapat didalam kamus","oneChange":"Pemeriksaan ejaan siap: Satu perkataan telah diubah","progress":"Pemeriksaan ejaan sedang diproses...","title":"Spell Check","toolbar":"Semak Ejaan"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"sourcearea":{"toolbar":"Sumber"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Buang Format"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"<lain>","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"<bingkai>","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"<tetingkap popup>","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"image":{"alertUrl":"Sila taip URL untuk fail gambar","alt":"Text Alternatif","border":"Border","btnUpload":"Hantar ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Ruang Melintang","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Imej","linkTab":"Sambungan","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","resetSize":"Saiz Set Semula","title":"Ciri-ciri Imej","titleButton":"Ciri-ciri Butang Bergambar","upload":"Muat Naik","urlMissing":"Image source URL is missing.","vSpace":"Ruang Menegak","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Close","preview":"Prebiu","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Jajaran Blok","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/lang/nb.js deleted file mode 100644 index 8d367222..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['nb']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<strong>Ctrl/Cmd+V</strong>) og trykk <strong>OK</strong>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Valgt)"},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/lang/nl.js deleted file mode 100644 index a409e448..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['nl']={"wsc":{"btnIgnore":"Negeren","btnIgnoreAll":"Alles negeren","btnReplace":"Vervangen","btnReplaceAll":"Alles vervangen","btnUndo":"Ongedaan maken","changeTo":"Wijzig in","errorLoading":"Er is een fout opgetreden bij het laden van de dienst: %s.","ieSpellDownload":"De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?","manyChanges":"Klaar met spellingscontrole: %1 woorden aangepast","noChanges":"Klaar met spellingscontrole: geen woorden aangepast","noMispell":"Klaar met spellingscontrole: geen fouten gevonden","noSuggestions":"- Geen suggesties -","notAvailable":"Excuses, deze dienst is momenteel niet beschikbaar.","notInDic":"Niet in het woordenboek","oneChange":"Klaar met spellingscontrole: één woord aangepast","progress":"Bezig met spellingscontrole...","title":"Spellingscontrole","toolbar":"Spellingscontrole"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"table":{"border":"Randdikte","caption":"Onderschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"sourcearea":{"toolbar":"Broncode"},"scayt":{"btn_about":"Over SCAYT","btn_dictionaries":"Woordenboeken","btn_disable":"SCAYT uitschakelen","btn_enable":"SCAYT inschakelen","btn_langs":"Talen","btn_options":"Opties","text_title":""},"removeformat":{"toolbar":"Opmaak verwijderen"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"magicline":{"title":"Hier paragraaf invoeren"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"image":{"alertUrl":"Geef de URL van de afbeelding","alt":"Alternatieve tekst","border":"Rand","btnUpload":"Naar server verzenden","button2Img":"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?","hSpace":"HSpace","img2Button":"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?","infoTab":"Informatie afbeelding","linkTab":"Link","lockRatio":"Afmetingen vergrendelen","menu":"Eigenschappen afbeelding","resetSize":"Afmetingen resetten","title":"Eigenschappen afbeelding","titleButton":"Eigenschappen afbeeldingsknop","upload":"Upload","urlMissing":"De URL naar de afbeelding ontbreekt.","vSpace":"VSpace","validateBorder":"Rand moet een heel nummer zijn.","validateHSpace":"HSpace moet een heel nummer zijn.","validateVSpace":"VSpace moet een heel nummer zijn."},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"contextmenu":{"options":"Contextmenu opties"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"button":{"selectedLabel":"%1 (Geselecteerd)"},"blockquote":{"toolbar":"Citaatblok"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor","help":"Bekijk de $1 voor hulp.","moreInfo":"Bezoek onze website voor licentieinformatie:","title":"Over CKEditor","userGuide":"CKEditor gebruiksaanwijzing"},"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignJustify":"Uitvullen","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/no.js b/platforms/android/assets/www/lib/ckeditor/lang/no.js deleted file mode 100644 index 143a4e7f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['no']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/lang/pl.js deleted file mode 100644 index 94a50ea8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pl']={"wsc":{"btnIgnore":"Ignoruj","btnIgnoreAll":"Ignoruj wszystkie","btnReplace":"Zmień","btnReplaceAll":"Zmień wszystkie","btnUndo":"Cofnij","changeTo":"Zmień na","errorLoading":"Błąd wczytywania hosta aplikacji usługi: %s.","ieSpellDownload":"Słownik nie jest zainstalowany. Czy chcesz go pobrać?","manyChanges":"Sprawdzanie zakończone: zmieniono %l słów","noChanges":"Sprawdzanie zakończone: nie zmieniono żadnego słowa","noMispell":"Sprawdzanie zakończone: nie znaleziono błędów","noSuggestions":"- Brak sugestii -","notAvailable":"Przepraszamy, ale usługa jest obecnie niedostępna.","notInDic":"Słowa nie ma w słowniku","oneChange":"Sprawdzanie zakończone: zmieniono jedno słowo","progress":"Trwa sprawdzanie...","title":"Sprawdź pisownię","toolbar":"Sprawdź pisownię"},"undo":{"redo":"Ponów","undo":"Cofnij"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"sourcearea":{"toolbar":"Źródło dokumentu"},"scayt":{"btn_about":"Informacje o SCAYT","btn_dictionaries":"Słowniki","btn_disable":"Wyłącz SCAYT","btn_enable":"Włącz SCAYT","btn_langs":"Języki","btn_options":"Opcje","text_title":""},"removeformat":{"toolbar":"Usuń formatowanie"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"magicline":{"title":"Wstaw nowy akapit"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"image":{"alertUrl":"Podaj adres obrazka.","alt":"Tekst zastępczy","border":"Obramowanie","btnUpload":"Wyślij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?","hSpace":"Odstęp poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"Hiperłącze","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","resetSize":"Przywróć rozmiar","title":"Właściwości obrazka","titleButton":"Właściwości przycisku graficznego","upload":"Wyślij","urlMissing":"Podaj adres URL obrazka.","vSpace":"Odstęp pionowy","validateBorder":"Wartość obramowania musi być liczbą całkowitą.","validateHSpace":"Wartość odstępu poziomego musi być liczbą całkowitą.","validateVSpace":"Wartość odstępu pionowego musi być liczbą całkowitą."},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"contextmenu":{"options":"Opcje menu kontekstowego"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"button":{"selectedLabel":"%1 (Wybrany)"},"blockquote":{"toolbar":"Cytat"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podręczniku użytkownika programu CKEditor"},"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignJustify":"Wyjustuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/lang/pt-br.js deleted file mode 100644 index 324f04ac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pt-br']={"wsc":{"btnIgnore":"Ignorar uma vez","btnIgnoreAll":"Ignorar Todas","btnReplace":"Alterar","btnReplaceAll":"Alterar Todas","btnUndo":"Desfazer","changeTo":"Alterar para","errorLoading":"Erro carregando servidor de aplicação: %s.","ieSpellDownload":"A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?","manyChanges":"Verificação ortográfica encerrada: %1 palavras foram alteradas","noChanges":"Verificação ortográfica encerrada: Não houve alterações","noMispell":"Verificação encerrada: Não foram encontrados erros de ortografia","noSuggestions":"-sem sugestões de ortografia-","notAvailable":"Desculpe, o serviço não está disponível no momento.","notInDic":"Não encontrada","oneChange":"Verificação ortográfica encerrada: Uma palavra foi alterada","progress":"Verificação ortográfica em andamento...","title":"Corretor Ortográfico","toolbar":"Verificar Ortografia"},"undo":{"redo":"Refazer","undo":"Desfazer"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcearea":{"toolbar":"Código-Fonte"},"scayt":{"btn_about":"Sobre a correção ortográfica durante a digitação","btn_dictionaries":"Dicionários","btn_disable":"Desabilitar correção ortográfica durante a digitação","btn_enable":"Habilitar correção ortográfica durante a digitação","btn_langs":"Idiomas","btn_options":"Opções","text_title":""},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Insera um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Âncora","menu":"Formatar Âncora","title":"Formatar Âncora","name":"Nome da Âncora","errorName":"Por favor, digite o nome da âncora","remove":"Remover Âncora"},"anchorId":"Id da âncora","anchorName":"Nome da âncora","charset":"Charset do Link","cssClasses":"Classe de CSS","emailAddress":"Endereço E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Assunto da Mensagem","id":"Id","info":"Informações","langCode":"Direção do idioma","langDir":"Direção do idioma","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","menu":"Editar Link","name":"Nome","noAnchors":"(Não há âncoras no documento)","noEmail":"Por favor, digite o endereço de e-mail","noUrl":"Por favor, digite o endereço do Link","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Propriedades da Janela Pop-up","popupFullScreen":"Modo Tela Cheia (IE)","popupLeft":"Esquerda","popupLocationBar":"Barra de Endereços","popupMenuBar":"Barra de Menus","popupResizable":"Redimensionável","popupScrollBars":"Barras de Rolagem","popupStatusBar":"Barra de Status","popupToolbar":"Barra de Ferramentas","popupTop":"Topo","rel":"Tipo de Relação","selectAnchor":"Selecione uma âncora","styles":"Estilos","tabIndex":"Índice de Tabulação","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Frame de Destino","targetPopup":"<janela popup>","targetPopupName":"Nome da Janela Pop-up","title":"Editar Link","toAnchor":"Âncora nesta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Link","type":"Tipo de hiperlink","unlink":"Remover Link","upload":"Enviar ao Servidor"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image":{"alertUrl":"Por favor, digite a URL da imagem.","alt":"Texto Alternativo","border":"Borda","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão de imagem em uma imagem comum?","hSpace":"HSpace","img2Button":"Deseja transformar a imagem em um botão de imagem?","infoTab":"Informações da Imagem","linkTab":"Link","lockRatio":"Travar Proporções","menu":"Formatar Imagem","resetSize":"Redefinir para o Tamanho Original","title":"Formatar Imagem","titleButton":"Formatar Botão de Imagem","upload":"Enviar","urlMissing":"URL da imagem está faltando.","vSpace":"VSpace","validateBorder":"A borda deve ser um número inteiro.","validateHSpace":"O HSpace deve ser um número inteiro.","validateVSpace":"O VSpace deve ser um número inteiro."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":"Âncora","flash":"Animação em Flash","hiddenfield":"Campo Oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Área para Colar","pasteMsg":"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.","securityMsg":"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionado)"},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Verifique o $1 para obter ajuda.","moreInfo":"Para informações sobre a licença por favor visite o nosso site:","title":"Sobre o CKEditor","userGuide":"Guia do Usuário do CKEditor"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centralizado","alignJustify":"Justificar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/lang/pt.js deleted file mode 100644 index 528de82a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pt']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Tudo","btnReplace":"Substituir","btnReplaceAll":"Substituir Tudo","btnUndo":"Anular","changeTo":"Mudar para","errorLoading":"Error loading application service host: %s.","ieSpellDownload":" Verificação ortográfica não instalada. Quer descarregar agora?","manyChanges":"Verificação ortográfica completa: %1 palavras alteradas","noChanges":"Verificação ortográfica completa: não houve alteração de palavras","noMispell":"Verificação ortográfica completa: não foram encontrados erros","noSuggestions":"- Sem sugestões -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Não está num directório","oneChange":"Verificação ortográfica completa: uma palavra alterada","progress":"Verificação ortográfica em progresso…","title":"Spell Check","toolbar":"Verificação Ortográfica"},"undo":{"redo":"Refazer","undo":"Anular"},"toolbar":{"toolbarCollapse":"Ocultar Barra de Ferramentas","toolbarExpand":"Expandir Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de Transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de Barras de Ferramentas"},"table":{"border":"Tamanho da Margem","caption":"Título","cell":{"menu":"Célula","insertBefore":"Inserir Célula Antes","insertAfter":"Inserir Célula Depois","deleteCell":"Apagar Células","merge":"Unir Células","mergeRight":"Unir à Direita","mergeDown":"Unir Abaixo","splitHorizontal":"Dividir Célula Horizontalmente","splitVertical":"Dividir Célula Verticalmente","title":"Propriedades da Célula","cellType":"Tipo de Célula","rowSpan":"Filas na Célula","colSpan":"Colunas na Célula","wordWrap":"Continuar","hAlign":"Alinhamento Horizontal","vAlign":"Alinhamento Vertical","alignBaseline":"Base","bgColor":"Cor de Fundo","borderColor":"Cor da Margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As filas da célula deve ter um número inteiro.","invalidColSpan":"As colunas da célula deve ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Criação de Espaço","cellSpace":"Espaçamento Célula","column":{"menu":"Coluna","insertBefore":"Inserir Coluna Antes","insertAfter":"Inserir Coluna Depois","deleteColumn":"Apagar Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira Linha","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número das linhas tem de ser um número maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da Tabela","row":{"menu":"Linha","insertBefore":"Inserir Linha Antes","insertAfter":"Inserir Linha Depois","deleteRow":"Apagar Linhas"},"rows":"Linhas","summary":"Sumário","title":"Propriedades da Tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pontos","widthUnit":"unidade da largura"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de Bloco","panelTitle2":"Estilos de Linha","panelTitle3":"Estilos de Objeto"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir Caracter Especial"},"sourcearea":{"toolbar":"Fonte"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Colar como Texto Simples","title":"Colar como Texto Simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?","error":"Não foi possivel limpar a informação colada decido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insira aqui o parágrafo"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar Âncora","menu":"Propriedades da Âncora","title":"Propriedades da Âncora","name":"Nome da Âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remove Anchor"},"anchorId":"Por ID de elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo de Folhas Classes","emailAddress":"Endereço de E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Título de Mensagem","id":"ID","info":"Informação de Hiperligação","langCode":"Orientação de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita a Esquerda (RTL)","menu":"Editar Hiperligação","name":"Nome","noAnchors":"(Não há referências disponíveis no documento)","noEmail":"Por favor introduza o endereço de e-mail","noUrl":"Por favor introduza a hiperligação URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de Janela de Popup","popupFullScreen":"Janela Completa (IE)","popupLeft":"Posição Esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de Menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Ferramentas","popupTop":"Posição Direita","rel":"Relação","selectAnchor":"Seleccionar una referência","styles":"Estilo","tabIndex":"Índice de Tubulação","target":"Destino","targetFrame":"<Frame>","targetFrameName":"Nome do Frame Destino","targetPopup":"<Janela de popup>","targetPopupName":"Nome da Janela de Popup","title":"Hiperligação","toAnchor":"Referência a esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Hiperligação","type":"Tipo de Hiperligação","unlink":"Eliminar Hiperligação","upload":"Carregar"},"indent":{"indent":"Aumentar Avanço","outdent":"Diminuir Avanço"},"image":{"alertUrl":"Por favor introduza o URL da imagem","alt":"Texto Alternativo","border":"Limite","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão com imagem selecionado em uma imagem?","hSpace":"Esp.Horiz","img2Button":"Deseja transformar a imagem selecionada em um botão com imagem?","infoTab":"Informação da Imagem","linkTab":"Hiperligação","lockRatio":"Proporcional","menu":"Propriedades da Imagem","resetSize":"Tamanho Original","title":"Propriedades da Imagem","titleButton":"Propriedades do Botão de imagens","upload":"Carregar","urlMissing":"O URL da fonte da imagem está em falta.","vSpace":"Esp.Vert","validateBorder":"A borda tem de ser um numero.","validateHSpace":"HSpace tem de ser um numero.","validateVSpace":"VSpace tem de ser um numero."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":" Inserir/Editar Âncora","flash":"Animação Flash","hiddenfield":"Campo Ocultado","iframe":"IFrame","unknown":"Objeto Desconhecido"},"elementspath":{"eleLabel":"Camninho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Menu de opções de contexto"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Colar Área","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.","securityMsg":"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionados)"},"blockquote":{"toolbar":"Bloco de citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à Linha","superscript":"Inferior à Linha","underline":"Sublinhado"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Doar $1 para ajudar.","moreInfo":"Para informação sobre o licenciamento, visite o nosso site da web:","title":"Sobre o CKEditor","userGuide":"CKEditor - Guia do Utilizador"},"editor":"Rich Text Editor","editorPanel":"Painel do Rich Text Editor","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Explorar Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviá-lo para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão","textField":"Campo do Texto","textarea":"Área do Texto","hiddenField":"Campo Ocultado","button":"Botão","select":"Campo da Seleção","imageButton":"Botão da Imagem","notSet":"<Não definido>","id":"Id.","name":"Nome","langDir":"Direção do Idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do Idioma","longDescr":"Descrição Completa do URL","cssClass":"Classes de Estilo das Folhas","advisoryTitle":"Título Consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela Superior (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Parente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de Estilo das Folhas","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Base","alignNone":"None","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/lang/ro.js deleted file mode 100644 index b4080501..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ro.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ro']={"wsc":{"btnIgnore":"Ignoră","btnIgnoreAll":"Ignoră toate","btnReplace":"Înlocuieşte","btnReplaceAll":"Înlocuieşte tot","btnUndo":"Starea anterioară (undo)","changeTo":"Schimbă în","errorLoading":"Eroare în lansarea aplicației service host %s.","ieSpellDownload":"Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?","manyChanges":"Verificarea textului terminată: 1% cuvinte modificate","noChanges":"Verificarea textului terminată: Niciun cuvânt modificat","noMispell":"Verificarea textului terminată: Nicio greşeală găsită","noSuggestions":"- Fără sugestii -","notAvailable":"Scuzați, dar serviciul nu este disponibil momentan.","notInDic":"Nu e în dicţionar","oneChange":"Verificarea textului terminată: Un cuvânt modificat","progress":"Verificarea textului în desfăşurare...","title":"Spell Check","toolbar":"Verifică scrierea textului"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"stylescombo":{"label":"Stil","panelTitle":"Formatarea stilurilor","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"sourcearea":{"toolbar":"Sursa"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Înlătură formatarea"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","title":"Adaugă ca text simplu (Plain Text)"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"link":{"acccessKey":"Tasta de acces","advanced":"Avansat","advisoryContentType":"Tipul consultativ al titlului","advisoryTitle":"Titlul consultativ","anchor":{"toolbar":"Inserează/Editează ancoră","menu":"Proprietăţi ancoră","title":"Proprietăţi ancoră","name":"Numele ancorei","errorName":"Vă rugăm scrieţi numele ancorei","remove":"Elimină ancora"},"anchorId":"după Id-ul elementului","anchorName":"după numele ancorei","charset":"Setul de caractere al resursei legate","cssClasses":"Clasele cu stilul paginii (CSS)","emailAddress":"Adresă de e-mail","emailBody":"Opțiuni Meniu Contextual","emailSubject":"Subiectul mesajului","id":"Id","info":"Informaţii despre link (Legătură web)","langCode":"Direcţia cuvintelor","langDir":"Direcţia cuvintelor","langDirLTR":"stânga-dreapta (LTR)","langDirRTL":"dreapta-stânga (RTL)","menu":"Editează Link","name":"Nume","noAnchors":"(Nicio ancoră disponibilă în document)","noEmail":"Vă rugăm să scrieţi adresa de e-mail","noUrl":"Vă rugăm să scrieţi URL-ul","other":"<alt>","popupDependent":"Dependent (Netscape)","popupFeatures":"Proprietăţile ferestrei popup","popupFullScreen":"Tot ecranul (Full Screen)(IE)","popupLeft":"Poziţia la stânga","popupLocationBar":"Bara de locaţie","popupMenuBar":"Bara de meniu","popupResizable":"Redimensionabil","popupScrollBars":"Bare de derulare","popupStatusBar":"Bara de status","popupToolbar":"Bara de opţiuni","popupTop":"Poziţia la dreapta","rel":"Relație","selectAnchor":"Selectaţi o ancoră","styles":"Stil","tabIndex":"Indexul tabului","target":"Ţintă (Target)","targetFrame":"<frame>","targetFrameName":"Numele frameului ţintă","targetPopup":"<fereastra popup>","targetPopupName":"Numele ferestrei popup","title":"Link (Legătură web)","toAnchor":"Ancoră în această pagină","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserează/Editează link (legătură web)","type":"Tipul link-ului (al legăturii web)","unlink":"Înlătură link (legătură web)","upload":"Încarcă"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"image":{"alertUrl":"Vă rugăm să scrieţi URL-ul imaginii","alt":"Text alternativ","border":"Margine","btnUpload":"Trimite la server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informaţii despre imagine","linkTab":"Link (Legătură web)","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","resetSize":"Resetează mărimea","title":"Proprietăţile imaginii","titleButton":"Proprietăţi buton imagine (Image Button)","upload":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","vSpace":"VSpace","validateBorder":"Bordura trebuie să fie un număr întreg.","validateHSpace":"Hspace trebuie să fie un număr întreg.","validateVSpace":"Vspace trebuie să fie un număr întreg."},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"fakeobjects":{"anchor":"Inserează/Editează ancoră","flash":"Flash Animation","hiddenfield":"Câmp ascuns (HiddenField)","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"%1 element"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Taie","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteArea":"Suprafața de adăugare","pasteMsg":"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK","securityMsg":"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.","title":"Adaugă"},"button":{"selectedLabel":"%1 (Selectat)"},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"about":{"copy":"Copyright &copy; $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor","help":"Citește $1 pentru ajutor.","moreInfo":"Pentru informații despre licență, vă rugăm vizitați web site-ul nostru:","title":"Despre CKEditor","userGuide":"CKEditor Ghid Utilizator"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoieşte server","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"<nesetat>","id":"Id","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"stânga-dreapta (LTR)","langDirRtl":"dreapta-stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea lungă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Trage pentru a redimensiona","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr.","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Stylesheet Classes","width":"Lăţime","height":"Înălţime","align":"Aliniere","alignLeft":"Mărește Bara","alignRight":"Dreapta","alignCenter":"Centru","alignJustify":"Aliniere în bloc (Block Justify)","alignTop":"Sus","alignMiddle":"Mijloc","alignBottom":"Jos","alignNone":"None","invalidValue":"Varloare invalida","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/lang/ru.js deleted file mode 100644 index 04c90b8f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ru']={"wsc":{"btnIgnore":"Пропустить","btnIgnoreAll":"Пропустить всё","btnReplace":"Заменить","btnReplaceAll":"Заменить всё","btnUndo":"Отменить","changeTo":"Изменить на","errorLoading":"Произошла ошибка при подключении к серверу проверки орфографии: %s.","ieSpellDownload":"Модуль проверки орфографии не установлен. Хотите скачать его?","manyChanges":"Проверка орфографии завершена. Изменено слов: %1","noChanges":"Проверка орфографии завершена. Не изменено ни одного слова","noMispell":"Проверка орфографии завершена. Ошибок не найдено","noSuggestions":"- Варианты отсутствуют -","notAvailable":"Извините, но в данный момент сервис недоступен.","notInDic":"Отсутствует в словаре","oneChange":"Проверка орфографии завершена. Изменено одно слово","progress":"Орфография проверяется...","title":"Проверка орфографии","toolbar":"Проверить орфографию"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по горизонтали","splitVertical":"Разделить ячейку по вертикали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcearea":{"toolbar":"Источник"},"scayt":{"btn_about":"О SCAYT","btn_dictionaries":"Словари","btn_disable":"Отключить SCAYT","btn_enable":"Включить SCAYT","btn_langs":"Языки","btn_options":"Настройки","text_title":"Проверка орфографии по мере ввода (SCAYT)"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image":{"alertUrl":"Пожалуйста, введите ссылку на изображение","alt":"Альтернативный текст","border":"Граница","btnUpload":"Загрузить на сервер","button2Img":"Вы желаете преобразовать это изображение-кнопку в обычное изображение?","hSpace":"Гориз. отступ","img2Button":"Вы желаете преобразовать это обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"Ссылка","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","resetSize":"Вернуть обычные размеры","title":"Свойства изображения","titleButton":"Свойства изображения-кнопки","upload":"Загрузить","urlMissing":"Не указана ссылка на изображение.","vSpace":"Вертик. отступ","validateBorder":"Размер границ должен быть задан числом.","validateHSpace":"Горизонтальный отступ должен быть задан числом.","validateVSpace":"Вертикальный отступ должен быть задан числом."},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"button":{"selectedLabel":"%1 (Выбрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/si.js b/platforms/android/assets/www/lib/ckeditor/lang/si.js deleted file mode 100644 index cf3d64da..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['si']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"විශේෂ ගුණාංග වීකල්ප","title":"විශේෂ ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"sourcearea":{"toolbar":"මුලාශ්‍රය"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","title":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"link":{"acccessKey":"ප්‍රවේශ යතුර","advanced":"දීය","advisoryContentType":"උපදේශාත්මක අන්තර්ගත ආකාරය","advisoryTitle":"උපදේශාත්මක නාමය","anchor":{"toolbar":"ආධාරය","menu":"ආධාරය වෙනස් කිරීම","title":"ආධාරක ","name":"ආධාරකයේ නාමය","errorName":"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න","remove":"ආධාරකය ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලාසපත්‍ර පන්තිය","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භාෂා කේතය","langDir":"භාෂා දිශාව","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලාසය","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"සබැඳිය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබැඳිය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"image":{"alertUrl":"කරුණාකර රුපයේ URL ලියන්න","alt":"විකල්ප ","border":"සීමාවවල ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","button2Img":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","hSpace":"HSpace","img2Button":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","infoTab":"රුපයේ තොරතුරු","linkTab":"සබැඳිය","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","title":"රුපයේ ","titleButton":"රුප බොත්තමේ ගුණ","upload":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්‍ර URL නැත.","vSpace":"VSpace","validateBorder":"මාඉම් සම්පුර්ණ සංක්‍යාවක් විය යුතුය.","validateHSpace":"HSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය","validateVSpace":"VSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය."},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්‍ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්‍ය","tag_pre":"ආකෘතියන්"},"fakeobjects":{"anchor":"ආධාරය","flash":"Flash Animation","hiddenfield":"සැඟවුණු ප්‍රදේශය","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","help":"උදව් සඳහා $1 ","moreInfo":"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:","title":"CKEditor ගැන විස්තර","userGuide":"CKEditor භාවිතා කිරීම පිළිබඳ "},"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්‍ය","alignJustify":"Justify","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම පේළි විලාසයයට ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/lang/sk.js deleted file mode 100644 index 9c9218b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sk']={"wsc":{"btnIgnore":"Ignorovať","btnIgnoreAll":"Ignorovať všetko","btnReplace":"Prepísat","btnReplaceAll":"Prepísat všetko","btnUndo":"Späť","changeTo":"Zmeniť na","errorLoading":"Chyba pri načítaní slovníka z adresy: %s.","ieSpellDownload":"Kontrola pravopisu nie je naištalovaná. Chcete ju teraz stiahnuť?","manyChanges":"Kontrola pravopisu dokončená: Bolo zmenených %1 slov","noChanges":"Kontrola pravopisu dokončená: Neboli zmenené žiadne slová","noMispell":"Kontrola pravopisu dokončená: Neboli nájdené žiadne chyby pravopisu","noSuggestions":"- Žiadny návrh -","notAvailable":"Prepáčte, ale služba je momentálne nedostupná.","notInDic":"Nie je v slovníku","oneChange":"Kontrola pravopisu dokončená: Bolo zmenené jedno slovo","progress":"Prebieha kontrola pravopisu...","title":"Skontrolovať pravopis","toolbar":"Kontrola pravopisu"},"undo":{"redo":"Znovu","undo":"Späť"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"table":{"border":"Šírka rámu (border)","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalomovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba rámu","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Širka rámu musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Vnútroriadkové (inline) štýly","panelTitle3":"Štýly objeku"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"sourcearea":{"toolbar":"Zdroj"},"scayt":{"btn_about":"O KPPP (Kontrola pravopisu počas písania)","btn_dictionaries":"Slovníky","btn_disable":"Zakázať KPPP (Kontrola pravopisu počas písania)","btn_enable":"Povoliť KPPP (Kontrola pravopisu počas písania)","btn_langs":"Jazyky","btn_options":"Možnosti","text_title":""},"removeformat":{"toolbar":"Odstrániť formátovanie"},"pastetext":{"button":"Vložiť ako čistý text","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?","error":"Nebolo možné vyčistiť vložené dáta kvôli internej chybe","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"magicline":{"title":"Sem vložte paragraf"},"list":{"bulletedlist":"Vložiť/Odstrániť zoznam s odrážkami","numberedlist":"Vložiť/Odstrániť číslovaný zoznam"},"link":{"acccessKey":"Prístupový kľúč","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"Upraviť kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"Odstrániť kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy štýlu","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"Upraviť odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"Závislosť (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosť (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"Vzťah (rel)","selectAnchor":"Vybrať kotvu","styles":"Štýl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstrániť odkaz","upload":"Nahrať"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"image":{"alertUrl":"Zadajte prosím URL obrázka","alt":"Alternatívny text","border":"Rám (border)","btnUpload":"Odoslať to na server","button2Img":"Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?","hSpace":"H-medzera","img2Button":"Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?","infoTab":"Informácie o obrázku","linkTab":"Odkaz","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","resetSize":"Pôvodná veľkosť","title":"Vlastnosti obrázka","titleButton":"Vlastnosti obrázkového tlačidla","upload":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","vSpace":"V-medzera","validateBorder":"Rám (border) musí byť celé číslo.","validateHSpace":"H-medzera musí byť celé číslo.","validateVSpace":"V-medzera musí byť celé číslo."},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"contextmenu":{"options":"Možnosti kontextového menu"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteArea":"Miesto pre vloženie","pasteMsg":"Prosím, vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte OK.","securityMsg":"Kvôli vašim bezpečnostným nastaveniam prehliadača editor nie je schopný pristupovať k vašej schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"Vložiť"},"button":{"selectedLabel":"%1 (Vybrané)"},"blockquote":{"toolbar":"Citácia"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O CKEditor-e","help":"Zaškrtnite $1 pre pomoc.","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:","title":"O CKEditor-e","userGuide":"Používateľská príručka KCEditor-a"},"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačte ALT 0 pre nápovedu","browseServer":"Prechádzať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie políčko","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvorit","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nieje číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignJustify":"Zarovnať do bloku","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/lang/sl.js deleted file mode 100644 index 69b841a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sl']={"wsc":{"btnIgnore":"Prezri","btnIgnoreAll":"Prezri vse","btnReplace":"Zamenjaj","btnReplaceAll":"Zamenjaj vse","btnUndo":"Razveljavi","changeTo":"Spremeni v","errorLoading":"Napaka pri nalaganju storitve programa na naslovu %s.","ieSpellDownload":"Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?","manyChanges":"Črkovanje je končano: Spremenjenih je bilo %1 besed","noChanges":"Črkovanje je končano: Nobena beseda ni bila spremenjena","noMispell":"Črkovanje je končano: Brez napak","noSuggestions":"- Ni predlogov -","notAvailable":"Oprostite, storitev trenutno ni dosegljiva.","notInDic":"Ni v slovarju","oneChange":"Črkovanje je končano: Spremenjena je bila ena beseda","progress":"Preverjanje črkovanja se izvaja...","title":"Črkovalnik","toolbar":"Preveri črkovanje"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"toolbar":{"toolbarCollapse":"Skrči Orodno Vrstico","toolbarExpand":"Razširi Orodno Vrstico","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Urejevalnik orodne vrstice"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Zamik celic mora biti število","invalidCellSpacing":"Razmik med celicami mora biti število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"enota širine"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"specialchar":{"options":"Možnosti Posebnega Znaka","title":"Izberi Posebni Znak","toolbar":"Vstavi posebni znak"},"sourcearea":{"toolbar":"Izvorna koda"},"scayt":{"btn_about":"O storitvi SCAYT","btn_dictionaries":"Slovarji","btn_disable":"Onemogoči SCAYT","btn_enable":"Omogoči SCAYT","btn_langs":"Jeziki","btn_options":"Možnosti","text_title":""},"removeformat":{"toolbar":"Odstrani oblikovanje"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"magicline":{"title":"Vstavite odstavek tukaj"},"list":{"bulletedlist":"Označen seznam","numberedlist":"Oštevilčen seznam"},"link":{"acccessKey":"Dostopno Geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporočila","emailSubject":"Predmet sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"<drug>","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"image":{"alertUrl":"Vnesite URL slike","alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"Pošlji na strežnik","button2Img":"Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni razmik","img2Button":"Želiš pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"Pošlji","urlMissing":"Manjka vir (URL) slike.","vSpace":"Navpični razmik","validateBorder":"Meja mora biti celo število.","validateHSpace":"HSpace mora biti celo število.","validateVSpace":"VSpace mora biti celo število."},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"%1 element"},"contextmenu":{"options":"Možnosti Kontekstnega Menija"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi Prostor","pasteMsg":"Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"button":{"selectedLabel":"%1 (Izbrano)"},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Preverite $1 za pomoč.","moreInfo":"Za informacijo o licenci prosim obiščite našo spletno stran:","title":"O programu CKEditor","userGuide":"CKEditor Navodila za Uporabo"},"editor":"Bogat Urejevalnik Besedila","editorPanel":"Rich Text Editor plošča","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno Polje","imageButton":"Slikovni Gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda Jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo Okno (_blank)","targetTop":"Vrhovno Okno (_top)","targetSelf":"Enako Okno (_self)","targetParent":"Matično Okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignJustify":"Obojestranska poravnava","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).","invalidHtmlLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne HTML enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost določena za inline slog mora biti sestavljena iz ene ali več tork (tuples) z obliko \"ime : vrednost\", ločenih z podpičji.","cssLengthTooltip":"Vnesite številko za vrednost v slikovnih pikah (pixels) ali številko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/lang/sq.js deleted file mode 100644 index 0d6d0071..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sq']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokument","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formular","basicstyles":"Stili Bazë","paragraph":"Paragraf","links":"Nyjet","insert":"Shto","styles":"Stil","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritet e Redaktuesit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"stylescombo":{"label":"Stil","panelTitle":"Stilet e Formatimit","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stili i Brendshëm","panelTitle3":"Stilet e Objektit"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"sourcearea":{"toolbar":"Burimi"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Largo Formatin"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"magicline":{"title":"Vendos paragraf këtu"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"link":{"acccessKey":"Sipas ID-së së Elementit","advanced":"Të përparuara","advisoryContentType":"Lloji i Përmbajtjes Këshillimore","advisoryTitle":"Titull","anchor":{"toolbar":"Spirancë","menu":"Redakto Spirancën","title":"Anchor Properties","name":"Emri i Spirancës","errorName":"Ju lutemi shkruani emrin e spirancës","remove":"Largo Spirancën"},"anchorId":"Sipas ID-së së Elementit","anchorName":"Sipas Emrit të Spirancës","charset":"Seti i Karaktereve të Burimeve të Nëdlidhura","cssClasses":"Klasa stili CSS","emailAddress":"Posta Elektronike","emailBody":"Trupi i Porosisë","emailSubject":"Titulli i Porosisë","id":"Id","info":"Informacione të Nyjes","langCode":"Kod gjuhe","langDir":"Drejtim teksti","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","menu":"Redakto Nyjen","name":"Emër","noAnchors":"(Nuk ka asnjë spirancë në dokument)","noEmail":"Ju lutemi shkruani postën elektronike","noUrl":"Ju lutemi shkruani URL-në e nyjes","other":"<tjetër>","popupDependent":"E Varur (Netscape)","popupFeatures":"Karakteristikat e Dritares së Dialogut","popupFullScreen":"Ekran i Plotë (IE)","popupLeft":"Pozita Majtas","popupLocationBar":"Shiriti i Lokacionit","popupMenuBar":"Shiriti i Menysë","popupResizable":"I ndryshueshëm","popupScrollBars":"Scroll Bars","popupStatusBar":"Shiriti i Statutit","popupToolbar":"Shiriti i Mejteve","popupTop":"Top Pozita","rel":"Marrëdhëniet","selectAnchor":"Përzgjidh një Spirancë","styles":"Stil","tabIndex":"Tab Index","target":"Objektivi","targetFrame":"<frame>","targetFrameName":"Emri i Kornizës së Synuar","targetPopup":"<popup window>","targetPopupName":"Emri i Dritares së Dialogut","title":"Nyja","toAnchor":"Lidhu me spirancën në tekst","toEmail":"Posta Elektronike","toUrl":"URL","toolbar":"Nyja","type":"Lloji i Nyjes","unlink":"Largo Nyjen","upload":"Ngarko"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"image":{"alertUrl":"Ju lutemi shkruani URL-në e fotos","alt":"Tekst Alternativ","border":"Korniza","btnUpload":"Dërgo në server","button2Img":"Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?","hSpace":"HSpace","img2Button":"Dëshironi të ndryshoni foton e përzgjedhur në pullë?","infoTab":"Informacione mbi Fotografinë","linkTab":"Nyja","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","resetSize":"Rikthe Madhësinë","title":"Karakteristikat e Fotografisë","titleButton":"Karakteristikat e Pullës së Fotografisë","upload":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","vSpace":"Hapësira Vertikale","validateBorder":"Korniza duhet të jetë numër i plotë.","validateHSpace":"Hapësira horizontale duhet të jetë numër i plotë.","validateVSpace":"Hapësira vertikale duhet të jetë numër i plotë."},"horizontalrule":{"toolbar":"Vendos Vijë Horizontale"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"fakeobjects":{"anchor":"Spirancë","flash":"Objekt flash","hiddenfield":"Fushë e fshehur","iframe":"IFrame","unknown":"Objekt i Panjohur"},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteArea":"Hapësira Hedhëse","pasteMsg":"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (<strong>Ctrl/Cmd+V</strong>) dhe shtypni Mirë.","securityMsg":"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.","title":"Hidhe"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citatet"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"about":{"copy":"Të drejtat e kopjimit &copy; $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor","help":"Kontrollo $1 për ndihmë.","moreInfo":"Për informacione rreth licencave shih faqen tonë:","title":"Rreth CKEditor","userGuide":"Udhëzuesi i Shfrytëzuesit të CKEditor"},"editor":"Redaktues i Pasur Teksti","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"Dërgo në server","image":"Imazh","flash":"Objekt flash","form":"Formular","checkbox":"Checkbox","radio":"Buton radio","textField":"Fushë tekst","textarea":"Hapësirë tekst","hiddenField":"Fushë e fshehur","button":"Buton","select":"Menu zgjedhjeje","imageButton":"Buton imazhi","notSet":"<e pazgjedhur>","id":"Id","name":"Emër","langDir":"Kod gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kod gjuhe","longDescr":"Përshkrim i hollësishëm","cssClass":"Klasa stili CSS","advisoryTitle":"Titull","cssStyle":"Stil","ok":"OK","cancel":"Anulo","close":"Mbyll","preview":"Parashiko","resize":"Ripërmaso","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Vlera e futur nuk është një numër","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?","confirmCancel":"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?","options":"Opsione","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stil","cssClasses":"Klasa Stili CSS","width":"Gjerësi","height":"Lartësi","align":"Rreshtim","alignLeft":"Majtas","alignRight":"Djathtas","alignCenter":"Qendër","alignJustify":"Zgjero","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"None","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Stili inline duhet të jetë një apo disa vlera të formatit \"emër: vlerë\", ndarë nga pikëpresje.","cssLengthTooltip":"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/lang/sr-latn.js deleted file mode 100644 index 7337c8b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sr-latn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sr-latn']={"wsc":{"btnIgnore":"Ignoriši","btnIgnoreAll":"Ignoriši sve","btnReplace":"Zameni","btnReplaceAll":"Zameni sve","btnUndo":"Vrati akciju","changeTo":"Izmeni","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?","manyChanges":"Provera spelovanja završena: %1 reč(i) je izmenjeno","noChanges":"Provera spelovanja završena: Nije izmenjena nijedna rec","noMispell":"Provera spelovanja završena: greške nisu pronadene","noSuggestions":"- Bez sugestija -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Nije u rečniku","oneChange":"Provera spelovanja završena: Izmenjena je jedna reč","progress":"Provera spelovanja u toku...","title":"Spell Check","toolbar":"Proveri spelovanje"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"toolbar":{"toolbarCollapse":"Suzi alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Obriši ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"None","headersRow":"Prvi red","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Obriši redove"},"rows":"Redova","summary":"Sažetak","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcearea":{"toolbar":"Kôd"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao čist tekst","title":"Zalepi kao čist tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"link":{"acccessKey":"Pristupni taster","advanced":"Napredni tagovi","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Unesi/izmeni sidro","menu":"Osobine sidra","title":"Osobine sidra","name":"Naziv sidra","errorName":"Unesite naziv sidra","remove":"Ukloni sidro"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","menu":"Izmeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Otkucajte adresu elektronske pote","noUrl":"Unesite URL linka","other":"<остало>","popupDependent":"Zavisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Prikaz preko celog ekrana (IE)","popupLeft":"Od leve ivice ekrana (px)","popupLocationBar":"Lokacija","popupMenuBar":"Kontekstni meni","popupResizable":"Promenljive veličine","popupScrollBars":"Scroll bar","popupStatusBar":"Statusna linija","popupToolbar":"Toolbar","popupTop":"Od vrha ekrana (px)","rel":"Odnos","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Naziv odredišnog frejma","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Unesi/izmeni link","type":"Vrsta linka","unlink":"Ukloni link","upload":"Pošalji"},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Osobine slika","resetSize":"Resetuj veličinu","title":"Osobine slika","titleButton":"Osobine dugmeta sa slikom","upload":"Pošalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Unesi/izmeni sidro","flash":"Flash Animation","hiddenfield":"Skriveno polje","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteArea":"Prostor za lepljenje","pasteMsg":"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki vašeg pregledača, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite još jednom u ovom prozoru.","title":"Zalepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Bogati uređivač teksta","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Resize","generalTab":"Opšte","advancedTab":"Napredni tagovi","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Opcije","target":"Meta","targetNew":"Novi prozor (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Širina","height":"Visina","align":"Ravnanje","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredina","alignJustify":"Obostrano ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/lang/sr.js deleted file mode 100644 index b364d4a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sr']={"wsc":{"btnIgnore":"Игнориши","btnIgnoreAll":"Игнориши све","btnReplace":"Замени","btnReplaceAll":"Замени све","btnUndo":"Врати акцију","changeTo":"Измени","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?","manyChanges":"Провера спеловања завршена: %1 реч(и) је измењено","noChanges":"Провера спеловања завршена: Није измењена ниједна реч","noMispell":"Провера спеловања завршена: грешке нису пронађене","noSuggestions":"- Без сугестија -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Није у речнику","oneChange":"Провера спеловања завршена: Измењена је једна реч","progress":"Провера спеловања у току...","title":"Spell Check","toolbar":"Провери спеловање"},"undo":{"redo":"Понови акцију","undo":"Поништи акцију"},"toolbar":{"toolbarCollapse":"Склопи алатну траку","toolbarExpand":"Прошири алатну траку","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Едитор алатне траке"},"table":{"border":"Величина оквира","caption":"Наслов табеле","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"None","headersRow":"Први ред","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Особине табеле","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Обриши редове"},"rows":"Редова","summary":"Резиме","title":"Особине табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"stylescombo":{"label":"Стил","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcearea":{"toolbar":"Kôд"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Уклони форматирање"},"pastetext":{"button":"Залепи као чист текст","title":"Залепи као чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Ненабројива листа","numberedlist":"Набројиву листу"},"link":{"acccessKey":"Приступни тастер","advanced":"Напредни тагови","advisoryContentType":"Advisory врста садржаја","advisoryTitle":"Advisory наслов","anchor":{"toolbar":"Унеси/измени сидро","menu":"Особине сидра","title":"Особине сидра","name":"Име сидра","errorName":"Молимо Вас да унесете име сидра","remove":"Remove Anchor"},"anchorId":"Пo Ид-jу елемента","anchorName":"По називу сидра","charset":"Linked Resource Charset","cssClasses":"Stylesheet класе","emailAddress":"Адреса електронске поште","emailBody":"Садржај поруке","emailSubject":"Наслов","id":"Ид","info":"Линк инфо","langCode":"Смер језика","langDir":"Смер језика","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","menu":"Промени линк","name":"Назив","noAnchors":"(Нема доступних сидра)","noEmail":"Откуцајте адресу електронске поште","noUrl":"Унесите УРЛ линка","other":"<друго>","popupDependent":"Зависно (Netscape)","popupFeatures":"Могућности искачућег прозора","popupFullScreen":"Приказ преко целог екрана (ИE)","popupLeft":"Од леве ивице екрана (пиксела)","popupLocationBar":"Локација","popupMenuBar":"Контекстни мени","popupResizable":"Величина се мења","popupScrollBars":"Скрол бар","popupStatusBar":"Статусна линија","popupToolbar":"Toolbar","popupTop":"Од врха екрана (пиксела)","rel":"Однос","selectAnchor":"Одабери сидро","styles":"Стил","tabIndex":"Таб индекс","target":"Meтa","targetFrame":"<оквир>","targetFrameName":"Назив одредишног фрејма","targetPopup":"<искачући прозор>","targetPopupName":"Назив искачућег прозора","title":"Линк","toAnchor":"Сидро на овој страници","toEmail":"Eлектронска пошта","toUrl":"УРЛ","toolbar":"Унеси/измени линк","type":"Врста линка","unlink":"Уклони линк","upload":"Пошаљи"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи леву маргину"},"image":{"alertUrl":"Унесите УРЛ слике","alt":"Алтернативни текст","border":"Оквир","btnUpload":"Пошаљи на сервер","button2Img":"Да ли желите да промените одабрану слику дугмета као једноставну слику?","hSpace":"HSpace","img2Button":"Да ли желите да промените одабрану слику у слику дугмета?","infoTab":"Инфо слике","linkTab":"Линк","lockRatio":"Закључај однос","menu":"Особине слика","resetSize":"Ресетуј величину","title":"Особине слика","titleButton":"Особине дугмета са сликом","upload":"Пошаљи","urlMissing":"Недостаје УРЛ слике.","vSpace":"VSpace","validateBorder":"Ивица треба да буде цифра.","validateHSpace":"HSpace треба да буде цифра.","validateVSpace":"VSpace треба да буде цифра."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Нормално (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteArea":"Залепи зону","pasteMsg":"Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.","securityMsg":"Због сигурносних подешавања претраживача, едитор не може да приступи оставу. Требате да га поново залепите у овом прозору.","title":"Залепи"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Претражи сервер","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер језика","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"Stylesheet класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед странице","resize":"Resize","generalTab":"Опште","advancedTab":"Напредни тагови","validateNumberFailed":"Ова вредност није цигра.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опције","target":"Meтa","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet класе","width":"Ширина","height":"Висина","align":"Равнање","alignLeft":"Лево","alignRight":"Десно","alignCenter":"Средина","alignJustify":"Обострано равнање","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/lang/sv.js deleted file mode 100644 index 040d1315..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sv']={"wsc":{"btnIgnore":"Ignorera","btnIgnoreAll":"Ignorera alla","btnReplace":"Ersätt","btnReplaceAll":"Ersätt alla","btnUndo":"Ångra","changeTo":"Ändra till","errorLoading":"Tjänsten är ej tillgänglig: %s.","ieSpellDownload":"Stavningskontrollen är ej installerad. Vill du göra det nu?","manyChanges":"Stavningskontroll slutförd: %1 ord rättades.","noChanges":"Stavningskontroll slutförd: Inga ord rättades.","noMispell":"Stavningskontroll slutförd: Inga stavfel påträffades.","noSuggestions":"- Förslag saknas -","notAvailable":"Tyvärr är tjänsten ej tillgänglig nu","notInDic":"Saknas i ordlistan","oneChange":"Stavningskontroll slutförd: Ett ord rättades.","progress":"Stavningskontroll pågår...","title":"Kontrollera stavning","toolbar":"Stavningskontroll"},"undo":{"redo":"Gör om","undo":"Ångra"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Redigera verktygsfält"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"sourcearea":{"toolbar":"Källa"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordlistor","btn_disable":"Inaktivera SCAYT","btn_enable":"Aktivera SCAYT","btn_langs":"Språk","btn_options":"Inställningar","text_title":""},"removeformat":{"toolbar":"Radera formatering"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"magicline":{"title":"Infoga paragraf här"},"list":{"bulletedlist":"Punktlista","numberedlist":"Numrerad lista"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"Efter element-id","anchorName":"Efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkkod","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange e-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"image":{"alertUrl":"Var god och ange bildens URL","alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"button":{"selectedLabel":"%1 (Vald)"},"blockquote":{"toolbar":"Blockcitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information av licensiering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignJustify":"Justera till marginaler","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/th.js b/platforms/android/assets/www/lib/ckeditor/lang/th.js deleted file mode 100644 index d24370fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['th']={"wsc":{"btnIgnore":"ยกเว้น","btnIgnoreAll":"ยกเว้นทั้งหมด","btnReplace":"แทนที่","btnReplaceAll":"แทนที่ทั้งหมด","btnUndo":"ยกเลิก","changeTo":"แก้ไขเป็น","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?","manyChanges":"ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ","noChanges":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ","noMispell":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด","noSuggestions":"- ไม่มีคำแนะนำใดๆ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"ไม่พบในดิกชันนารี","oneChange":"ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ","progress":"กำลังตรวจสอบคำสะกด...","title":"Spell Check","toolbar":"ตรวจการสะกดคำ"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"toolbar":{"toolbarCollapse":"ซ่อนแถบเครื่องมือ","toolbarExpand":"เปิดแถบเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ล้างรูปแบบ"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"link":{"acccessKey":"แอคเซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเกริ่นนำ","advisoryTitle":"คำเกริ่นนำ","anchor":{"toolbar":"แทรก/แก้ไข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"กรุณาระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"การเขียน-อ่านภาษา","langDir":"การเขียน-อ่านภาษา","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","menu":"แก้ไข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)","noEmail":"กรุณาระบุอีเมล์ (E-mail)","noUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"แสดงเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ก (Pop-up)","popupFullScreen":"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิกัดซ้าย (Left Position)","popupLocationBar":"แสดงที่อยู่ของไฟล์","popupMenuBar":"แสดงแถบเมนู","popupResizable":"สามารถปรับขนาดได้","popupScrollBars":"แสดงแถบเลื่อน","popupStatusBar":"แสดงแถบสถานะ","popupToolbar":"แสดงแถบเครื่องมือ","popupTop":"พิกัดบน (Top Position)","rel":"ความสัมพันธ์","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลักษณะการแสดงผล","tabIndex":"ลำดับของ แท็บ","target":"การเปิดหน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เก็ตเฟรม","targetPopup":"<เปิดหน้าจอเล็ก (Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ก (Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"แทรก/แก้ไข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"image":{"alertUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)","alt":"คำประกอบรูปภาพ","border":"ขนาดขอบรูป","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"ระยะแนวนอน","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ข้อมูลของรูปภาพ","linkTab":"ลิ้งค์","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","resetSize":"กำหนดรูปเท่าขนาดจริง","title":"คุณสมบัติของ รูปภาพ","titleButton":"คุณสมบัติของ ปุ่มแบบรูปภาพ","upload":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","vSpace":"ระยะแนวตั้ง","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"แทรก/แก้ไข Anchor","flash":"ภาพอนิเมชั่นแฟลช","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"วัตถุไม่ทราบชนิด"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"กึ่งกลาง","alignJustify":"நியாயப்படுத்தவும்","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/lang/tr.js deleted file mode 100644 index ace5d64f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['tr']={"wsc":{"btnIgnore":"Yoksay","btnIgnoreAll":"Tümünü Yoksay","btnReplace":"Değiştir","btnReplaceAll":"Tümünü Değiştir","btnUndo":"Geri Al","changeTo":"Şuna değiştir:","errorLoading":"Uygulamada yüklerken hata oluştu: %s.","ieSpellDownload":"Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?","manyChanges":"Yazım denetimi tamamlandı: %1 kelime değiştirildi","noChanges":"Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi","noMispell":"Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı","noSuggestions":"- Öneri Yok -","notAvailable":"Üzügünüz, bu servis şuanda hizmet dışıdır.","notInDic":"Sözlükte Yok","oneChange":"Yazım denetimi tamamlandı: Bir kelime değiştirildi","progress":"Yazım denetimi işlemde...","title":"Yazımı Denetle","toolbar":"Yazım Denetimi"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"sourcearea":{"toolbar":"Kaynak"},"scayt":{"btn_about":"SCAYT'ı hakkında","btn_dictionaries":"Sözlükler","btn_disable":"SCAYT'ı pasifleştir","btn_enable":"SCAYT'ı etkinleştir","btn_langs":"Diller","btn_options":"Seçenekler","text_title":""},"removeformat":{"toolbar":"Biçimi Kaldır"},"pastetext":{"button":"Düz Metin Olarak Yapıştır","title":"Düz Metin Olarak Yapıştır"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"magicline":{"title":"Parağrafı buraya ekle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"link":{"acccessKey":"Erişim Tuşu","advanced":"Gelişmiş","advisoryContentType":"Danışma İçerik Türü","advisoryTitle":"Danışma Başlığı","anchor":{"toolbar":"Bağlantı Ekle/Düzenle","menu":"Bağlantı Özellikleri","title":"Bağlantı Özellikleri","name":"Bağlantı Adı","errorName":"Lütfen bağlantı için ad giriniz","remove":"Bağlantıyı Kaldır"},"anchorId":"Eleman Kimlik Numarası ile","anchorName":"Bağlantı Adı ile","charset":"Bağlı Kaynak Karakter Gurubu","cssClasses":"Biçem Sayfası Sınıfları","emailAddress":"E-Posta Adresi","emailBody":"İleti Gövdesi","emailSubject":"İleti Konusu","id":"Id","info":"Link Bilgisi","langCode":"Dil Yönü","langDir":"Dil Yönü","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","menu":"Link Düzenle","name":"Ad","noAnchors":"(Bu belgede hiç çapa yok)","noEmail":"Lütfen E-posta adresini yazın","noUrl":"Lütfen Link URL'sini yazın","other":"<diğer>","popupDependent":"Bağımlı (Netscape)","popupFeatures":"Yeni Açılan Pencere Özellikleri","popupFullScreen":"Tam Ekran (IE)","popupLeft":"Sola Göre Konum","popupLocationBar":"Yer Çubuğu","popupMenuBar":"Menü Çubuğu","popupResizable":"Resizable","popupScrollBars":"Kaydırma Çubukları","popupStatusBar":"Durum Çubuğu","popupToolbar":"Araç Çubuğu","popupTop":"Yukarıya Göre Konum","rel":"İlişki","selectAnchor":"Bağlantı Seç","styles":"Biçem","tabIndex":"Sekme İndeksi","target":"Hedef","targetFrame":"<çerçeve>","targetFrameName":"Hedef Çerçeve Adı","targetPopup":"<yeni açılan pencere>","targetPopupName":"Yeni Açılan Pencere Adı","title":"Link","toAnchor":"Bu sayfada çapa","toEmail":"E-Posta","toUrl":"URL","toolbar":"Link Ekle/Düzenle","type":"Link Türü","unlink":"Köprü Kaldır","upload":"Karşıya Yükle"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"image":{"alertUrl":"Lütfen resmin URL'sini yazınız","alt":"Alternatif Yazı","border":"Kenar","btnUpload":"Sunucuya Yolla","button2Img":"Seçili resim butonunu basit resime çevirmek istermisiniz?","hSpace":"Yatay Boşluk","img2Button":"Seçili olan resimi, resimli butona çevirmek istermisiniz?","infoTab":"Resim Bilgisi","linkTab":"Köprü","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","resetSize":"Boyutu Başa Döndür","title":"Resim Özellikleri","titleButton":"Resimli Düğme Özellikleri","upload":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı eksiktir.","vSpace":"Dikey Boşluk","validateBorder":"Çerçeve tam sayı olmalıdır.","validateHSpace":"HSpace tam sayı olmalıdır.","validateVSpace":"VSpace tam sayı olmalıdır."},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"fakeobjects":{"anchor":"Bağlantı","flash":"Flash Animasyonu","hiddenfield":"Gizli Alan","iframe":"IFrame","unknown":"Bilinmeyen Nesne"},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"clipboard":{"copy":"Kopyala","copyError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteArea":"Yapıştırma Alanı","pasteMsg":"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.","securityMsg":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..","title":"Yapıştır"},"button":{"selectedLabel":"%1 (Seçilmiş)"},"blockquote":{"toolbar":"Blok Oluştur"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","help":"Yardım için $1 kontrol edin.","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:","title":"CKEditor Hakkında","userGuide":"CKEditor Kullanıcı Kılavuzu"},"editor":"Zengin Metin Editörü","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Onay Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":"Dil Kodlaması","longDescr":"Uzun Tanımlı URL","cssClass":"Biçem Sayfası Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Biçem","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Biçem","cssClasses":"Biçem Sayfası Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","alignLeft":"Sol","alignRight":"Sağ","alignCenter":"Ortala","alignJustify":"İki Kenara Yaslanmış","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).","invalidInlineStyle":"Satıriçi biçem için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/lang/tt.js deleted file mode 100644 index f0c2e960..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['tt']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"table":{"border":"Чик калынлыгы","caption":"Исем","cell":{"menu":"Күзәнәк","insertBefore":"Алдына күзәнәк өстәү","insertAfter":"Артына күзәнәк өстәү","deleteCell":"Күзәнәкләрне бетерү","merge":"Күзәнәкләрне берләштерү","mergeRight":"Уң яктагы белән берләштерү","mergeDown":"Астагы белән берләштерү","splitHorizontal":"Күзәнәкне юлларга бүлү","splitVertical":"Күзәнәкне баганаларга бүлү","title":"Күзәнәк үзлекләре","cellType":"Күзәнәк төре","rowSpan":"Юлларны берләштерү","colSpan":"Баганаларны берләштерү","wordWrap":"Текстны күчерү","hAlign":"Ятма тигезләү","vAlign":"Асма тигезләү","alignBaseline":"Таяныч сызыгы","bgColor":"Фон төсе","borderColor":"Чик төсе","data":"Мәгълүмат","header":"Башлык","yes":"Әйе","no":"Юк","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сайлау"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Таблица үзлекләре","row":{"menu":"Юл","insertBefore":"Өстән юллар өстәү","insertAfter":"Астан юллар өстәү","deleteRow":"Юлларны бетерү"},"rows":"Юллар","summary":"Йомгаклау","title":"Таблица үзлекләре","toolbar":"Таблица","widthPc":"процент","widthPx":"Нокталар","widthUnit":"киңлек берәмлеге"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"sourcearea":{"toolbar":"Чыганак"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Форматлауны бетерү"},"pastetext":{"button":"Форматлаусыз текст өстәү","title":"Форматлаусыз текст өстәү"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word'тан өстәү","toolbar":"Word'тан өстәү"},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"magicline":{"title":"Бирегә параграф өстәү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"link":{"acccessKey":"Access Key","advanced":"Киңәйтелгән көйләүләр","advisoryContentType":"Advisory Content Type","advisoryTitle":"Киңәш исем","anchor":{"toolbar":"Якорь","menu":"Якорьне үзгәртү","title":"Якорь үзлекләре","name":"Якорь исеме","errorName":"Якорьнең исемен языгыз","remove":"Якорьне бетерү"},"anchorId":"Элемент идентификаторы буенча","anchorName":"Якорь исеме буенча","charset":"Linked Resource Charset","cssClasses":"Стильләр класслары","emailAddress":"Электрон почта адресы","emailBody":"Хат эчтәлеге","emailSubject":"Хат темасы","id":"Идентификатор","info":"Сылталама тасвирламасы","langCode":"Тел коды","langDir":"Язылыш юнəлеше","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","menu":"Сылталамаyны үзгәртү","name":"Исем","noAnchors":"(Әлеге документта якорьләр табылмады)","noEmail":"Электрон почта адресын языгыз","noUrl":"Сылталаманы языгыз","other":"<бүтән>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Бәйләнеш","selectAnchor":"Якорьне сайлау","styles":"Стиль","tabIndex":"Tab Index","target":"Максат","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Сылталама","toAnchor":"Якорьне текст белән бәйләү","toEmail":"Электрон почта","toUrl":"Сылталама","toolbar":"Сылталама","type":"Сылталама төре","unlink":"Сылталаманы бетерү","upload":"Йөкләү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"image":{"alertUrl":"Please type the image URL","alt":"Альтернатив текст","border":"Чик","btnUpload":"Серверга җибәрү","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Рәсем тасвирламасы","linkTab":"Сылталама","lockRatio":"Lock Ratio","menu":"Рәсем үзлекләре","resetSize":"Reset Size","title":"Рәсем үзлекләре","titleButton":"Рәсемле төймə үзлекләре","upload":"Йөкләү","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Чик киңлеге сан булырга тиеш","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"format":{"label":"Форматлау","panelTitle":"Параграф форматлавы","tag_address":"Адрес","tag_div":"Гади (DIV)","tag_h1":"Башлам 1","tag_h2":"Башлам 2","tag_h3":"Башлам 3","tag_h4":"Башлам 4","tag_h5":"Башлам 5","tag_h6":"Башлам 6","tag_p":"Гади","tag_pre":"Форматлаулы"},"fakeobjects":{"anchor":"Якорь","flash":"Флеш анимациясы","hiddenfield":"Яшерен кыр","iframe":"IFrame","unknown":"Танылмаган объект"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteArea":"Өстәү мәйданы","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Өстәү"},"button":{"selectedLabel":"%1 (Сайланган)"},"blockquote":{"toolbar":"Өземтә блогы"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"about":{"copy":"Copyright &copy; $1. Бар хокуклар сакланган","dlgTitle":"CKEditor турында","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"CKEditor турында","userGuide":"CKEditor кулланмасы"},"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"Рәсем","flash":"Флеш","form":"Форма","checkbox":"Чекбокс","radio":"Радио төймә","textField":"Текст кыры","textarea":"Текст мәйданы","hiddenField":"Яшерен кыр","button":"Төймə","select":"Сайлау кыры","imageButton":"Рәсемле төймə","notSet":"<билгеләнмәгән>","id":"Id","name":"Исем","langDir":"Язылыш юнəлеше","langDirLtr":"Сулдан уңга язылыш (LTR)","langDirRtl":"Уңнан сулга язылыш (RTL)","langCode":"Тел коды","longDescr":"Җентекле тасвирламага сылталама","cssClass":"Стильләр класслары","advisoryTitle":"Киңәш исем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт сан түгел","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","alignLeft":"Сул якка","alignRight":"Уң якка","alignCenter":"Үзәккә","alignJustify":"Киңлеккә карап тигезләү","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"None","invalidValue":"Дөрес булмаган кыйммәт","invalidHeight":"Биеклек сан булырга тиеш","invalidWidth":"Киңлек сан булырга тиеш","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/lang/ug.js deleted file mode 100644 index bd4226ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ug']={"wsc":{"btnIgnore":"پەرۋا قىلما","btnIgnoreAll":"ھەممىگە پەرۋا قىلما","btnReplace":"ئالماشتۇر","btnReplaceAll":"ھەممىنى ئالماشتۇر","btnUndo":"يېنىۋال","changeTo":"ئۆزگەرت","errorLoading":"لازىملىق مۇلازىمېتىرنى يۈكلىگەندە خاتالىق كۆرۈلدى: %s.","ieSpellDownload":"ئىملا تەكشۈرۈش قىستۇرمىسى تېخى ئورنىتىلمىغان، ھازىرلا چۈشۈرەمسىز؟","manyChanges":"ئىملا تەكشۈرۈش تامام: %1 سۆزنى ئۆزگەرتتى","noChanges":"ئىملا تەكشۈرۈش تامام: ھېچقانداق سۆزنى ئۆزگەرتمىدى","noMispell":"ئىملا تەكشۈرۈش تامام: ئىملا خاتالىقى بايقالمىدى","noSuggestions":"-تەكلىپ يوق-","notAvailable":"كەچۈرۈڭ، مۇلازىمېتىرنى ۋاقتىنچە ئىشلەتكىلى بولمايدۇ","notInDic":"لۇغەتتە يوق","oneChange":"ئىملا تەكشۈرۈش تامام: بىر سۆزنى ئۆزگەرتتى","progress":"ئىملا تەكشۈرۈۋاتىدۇ…","title":"ئىملا تەكشۈر","toolbar":"ئىملا تەكشۈر"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون ۋە بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"sourcearea":{"toolbar":"مەنبە"},"scayt":{"btn_about":"شۇئان ئىملا تەكشۈرۈش ھەققىدە","btn_dictionaries":"لۇغەت","btn_disable":"شۇئان ئىملا تەكشۈرۈشنى چەكلە","btn_enable":"شۇئان ئىملا تەكشۈرۈشنى قوزغات","btn_langs":"تىل","btn_options":"تاللانما","text_title":""},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"link":{"acccessKey":"زىيارەت كۇنۇپكا","advanced":"ئالىي","advisoryContentType":"مەزمۇن تىپى","advisoryTitle":"ماۋزۇ","anchor":{"toolbar":"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە","menu":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","title":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","name":"لەڭگەرلىك نۇقتا ئاتى","errorName":"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ","remove":"لەڭگەرلىك نۇقتا ئۆچۈر"},"anchorId":"لەڭگەرلىك نۇقتا ID سى بويىچە","anchorName":"لەڭگەرلىك نۇقتا ئاتى بويىچە","charset":"ھەرپ كودلىنىشى","cssClasses":"ئۇسلۇب خىلى ئاتى","emailAddress":"ئادرېس","emailBody":"مەزمۇن","emailSubject":"ماۋزۇ","id":"ID","info":"ئۇلانما ئۇچۇرى","langCode":"تىل كودى","langDir":"تىل يۆنىلىشى","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","menu":"ئۇلانما تەھرىر","name":"ئات","noAnchors":"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)","noEmail":"ئېلخەت ئادرېسىنى كىرگۈزۈڭ","noUrl":"ئۇلانما ئادرېسىنى كىرگۈزۈڭ","other":"‹باشقا›","popupDependent":"تەۋە (NS)","popupFeatures":"قاڭقىش كۆزنەك خاسلىقى","popupFullScreen":"پۈتۈن ئېكران (IE)","popupLeft":"سول","popupLocationBar":"ئادرېس بالداق","popupMenuBar":"تىزىملىك بالداق","popupResizable":"چوڭلۇقى ئۆزگەرتىشچان","popupScrollBars":"دومىلىما سۈرگۈچ","popupStatusBar":"ھالەت بالداق","popupToolbar":"قورال بالداق","popupTop":"ئوڭ","rel":"باغلىنىش","selectAnchor":"بىر لەڭگەرلىك نۇقتا تاللاڭ","styles":"قۇر ئىچىدىكى ئۇسلۇبى","tabIndex":"Tab تەرتىپى","target":"نىشان","targetFrame":"‹كاندۇك›","targetFrameName":"نىشان كاندۇك ئاتى","targetPopup":"‹قاڭقىش كۆزنەك›","targetPopupName":"قاڭقىش كۆزنەك ئاتى","title":"ئۇلانما","toAnchor":"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى","toEmail":"ئېلخەت","toUrl":"ئادرېس","toolbar":"ئۇلانما قىستۇر/تەھرىرلە","type":"ئۇلانما تىپى","unlink":"ئۇلانما بىكار قىل","upload":"يۈكلە"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"image":{"alertUrl":"سۈرەت ئادرېسىنى كىرگۈزۈڭ","alt":"تېكىست ئالماشتۇر","border":"گىرۋەك چوڭلۇقى","btnUpload":"مۇلازىمېتىرغا يۈكلە","button2Img":"نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟","hSpace":"توغرىسىغا ئارىلىقى","img2Button":"نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟","infoTab":"سۈرەت","linkTab":"ئۇلانما","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","resetSize":"ئەسلى چوڭلۇق","title":"سۈرەت خاسلىقى","titleButton":"سۈرەت دائىرە خاسلىقى","upload":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","vSpace":"بويىغا ئارىلىقى","validateBorder":"گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ","validateHSpace":"توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ","validateVSpace":"بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرېس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"fakeobjects":{"anchor":"لەڭگەرلىك نۇقتا","flash":"Flash جانلاندۇرۇم","hiddenfield":"يوشۇرۇن دائىرە","iframe":"IFrame","unknown":"يوچۇن نەڭ"},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"clipboard":{"copy":"نەشر ھوقۇقىغا ئىگە بەلگىسى","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"ھەرپتاختا تېز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بېسىڭ","securityMsg":"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.","title":"چاپلا"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"بۆلەك نەقىل"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor ھەققىدە","help":"$1 نى زىيارەت قىلىپ ياردەمگە ئېرىشىڭ","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ","title":"CKEditor ھەققىدە","userGuide":"CKEditor ئىشلەتكۈچى قوللانمىسى"},"editor":"تەھرىرلىگۈچ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","flash":"Flash","form":"جەدۋەل","checkbox":"كۆپ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تېكىست","textarea":"كۆپ قۇر تېكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرېسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز كەچ","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"يېڭى كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئېگىزلىك","align":"توغرىلىنىشى","alignLeft":"سول","alignRight":"ئوڭ","alignCenter":"ئوتتۇرا","alignJustify":"ئىككى تەرەپتىن توغرىلا","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"None","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">، ئىشلەتكىلى بولمايدۇ</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/lang/uk.js deleted file mode 100644 index 9e97eceb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['uk']={"wsc":{"btnIgnore":"Пропустити","btnIgnoreAll":"Пропустити все","btnReplace":"Замінити","btnReplaceAll":"Замінити все","btnUndo":"Назад","changeTo":"Замінити на","errorLoading":"Помилка завантаження : %s.","ieSpellDownload":"Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?","manyChanges":"Перевірку орфографії завершено: 1% слів(ова) змінено","noChanges":"Перевірку орфографії завершено: жодне слово не змінено","noMispell":"Перевірку орфографії завершено: помилок не знайдено","noSuggestions":"- немає варіантів -","notAvailable":"Вибачте, але сервіс наразі недоступний.","notInDic":"Немає в словнику","oneChange":"Перевірку орфографії завершено: змінено одне слово","progress":"Виконується перевірка орфографії...","title":"Перевірка орфографії","toolbar":"Перевірити орфографію"},"undo":{"redo":"Повторити","undo":"Повернути"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Вставити комірку перед","insertAfter":"Вставити комірку після","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати справа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"Властивості комірки","cellType":"Тип комірки","rowSpan":"Об'єднання рядків","colSpan":"Об'єднання стовпців","wordWrap":"Автоперенесення тексту","hAlign":"Гориз. вирівнювання","vAlign":"Верт. вирівнювання","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"Ні","invalidWidth":"Ширина комірки повинна бути цілим числом.","invalidHeight":"Висота комірки повинна бути цілим числом.","invalidRowSpan":"Кількість об'єднуваних рядків повинна бути цілим числом.","invalidColSpan":"Кількість об'єднуваних стовбців повинна бути цілим числом.","chooseColor":"Обрати"},"cellPad":"Внутр. відступ","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Вставити стовбець перед","insertAfter":"Вставити стовбець після","deleteColumn":"Видалити стовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки стовбців/рядків","headersBoth":"Стовбці і рядки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"Рядки","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"Одиниці вимір."},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"sourcearea":{"toolbar":"Джерело"},"scayt":{"btn_about":"Про SCAYT","btn_dictionaries":"Словники","btn_disable":"Вимкнути SCAYT","btn_enable":"Ввімкнути SCAYT","btn_langs":"Мови","btn_options":"Опції","text_title":""},"removeformat":{"toolbar":"Очистити форматування"},"pastetext":{"button":"Вставити тільки текст","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"magicline":{"title":"Вставити абзац"},"list":{"bulletedlist":"Маркірований список","numberedlist":"Нумерований список"},"link":{"acccessKey":"Гаряча клавіша","advanced":"Додаткове","advisoryContentType":"Тип вмісту","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставити/Редагувати якір","menu":"Властивості якоря","title":"Властивості якоря","name":"Ім'я якоря","errorName":"Будь ласка, вкажіть ім'я якоря","remove":"Прибрати якір"},"anchorId":"За ідентифікатором елементу","anchorName":"За ім'ям елементу","charset":"Кодування","cssClasses":"Клас CSS","emailAddress":"Адреса ел. пошти","emailBody":"Тіло повідомлення","emailSubject":"Тема листа","id":"Ідентифікатор","info":"Інформація посилання","langCode":"Код мови","langDir":"Напрямок мови","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","menu":"Вставити посилання","name":"Ім'я","noAnchors":"(В цьому документі немає якорів)","noEmail":"Будь ласка, вкажіть адрес ел. пошти","noUrl":"Будь ласка, вкажіть URL посилання","other":"<інший>","popupDependent":"Залежний (Netscape)","popupFeatures":"Властивості випливаючого вікна","popupFullScreen":"Повний екран (IE)","popupLeft":"Позиція зліва","popupLocationBar":"Панель локації","popupMenuBar":"Панель меню","popupResizable":"Масштабоване","popupScrollBars":"Стрічки прокрутки","popupStatusBar":"Рядок статусу","popupToolbar":"Панель інструментів","popupTop":"Позиція зверху","rel":"Зв'язок","selectAnchor":"Оберіть якір","styles":"Стиль CSS","tabIndex":"Послідовність переходу","target":"Ціль","targetFrame":"<фрейм>","targetFrameName":"Ім'я цільового фрейму","targetPopup":"<випливаюче вікно>","targetPopupName":"Ім'я випливаючого вікна","title":"Посилання","toAnchor":"Якір на цю сторінку","toEmail":"Ел. пошта","toUrl":"URL","toolbar":"Вставити/Редагувати посилання","type":"Тип посилання","unlink":"Видалити посилання","upload":"Надіслати"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"image":{"alertUrl":"Будь ласка, вкажіть URL зображення","alt":"Альтернативний текст","border":"Рамка","btnUpload":"Надіслати на сервер","button2Img":"Бажаєте перетворити обрану кнопку-зображення на просте зображення?","hSpace":"Гориз. відступ","img2Button":"Бажаєте перетворити обране зображення на кнопку-зображення?","infoTab":"Інформація про зображення","linkTab":"Посилання","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","resetSize":"Очистити поля розмірів","title":"Властивості зображення","titleButton":"Властивості кнопки із зображенням","upload":"Надіслати","urlMissing":"Вкажіть URL зображення.","vSpace":"Верт. відступ","validateBorder":"Ширина рамки повинна бути цілим числом.","validateHSpace":"Гориз. відступ повинен бути цілим числом.","validateVSpace":"Верт. відступ повинен бути цілим числом."},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"format":{"label":"Форматування","panelTitle":"Форматування параграфа","tag_address":"Адреса","tag_div":"Нормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Нормальний","tag_pre":"Форматований"},"fakeobjects":{"anchor":"Якір","flash":"Flash-анімація","hiddenfield":"Приховані Поля","iframe":"IFrame","unknown":"Невідомий об'єкт"},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опції контекстного меню"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteArea":"Область вставки","pasteMsg":"Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.","securityMsg":"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.","title":"Вставити"},"button":{"selectedLabel":"%1 (Вибрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"about":{"copy":"Copyright &copy; $1. Всі права застережено.","dlgTitle":"Про CKEditor","help":"Перевірте $1 для допомоги.","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:","title":"Про CKEditor","userGuide":"Інструкція Користувача для CKEditor"},"editor":"Текстовий редактор","editorPanel":"Панель текстового редактора","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд Сервера","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"Текстове поле","textarea":"Текстова область","hiddenField":"Приховане поле","button":"Кнопка","select":"Список","imageButton":"Кнопка із зображенням","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'я","langDir":"Напрямок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий опис URL","cssClass":"Клас CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"Скасувати","close":"Закрити","preview":"Попередній перегляд","resize":"Потягніть для зміни розмірів","generalTab":"Основне","advancedTab":"Додаткове","validateNumberFailed":"Значення не є цілим числом.","confirmNewPage":"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?","confirmCancel":"Деякі опції змінено. Закрити вікно без збереження змін?","options":"Опції","target":"Ціль","targetNew":"Нове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"Батьківський фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"Клас CSS","width":"Ширина","height":"Висота","align":"Вирівнювання","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширині","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidCssLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).","invalidHtmlLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px або %).","invalidInlineStyle":"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \"ім'я : значення\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доступне</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/lang/vi.js deleted file mode 100644 index 0fed6b13..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['vi']={"wsc":{"btnIgnore":"Bỏ qua","btnIgnoreAll":"Bỏ qua tất cả","btnReplace":"Thay thế","btnReplaceAll":"Thay thế tất cả","btnUndo":"Phục hồi lại","changeTo":"Chuyển thành","errorLoading":"Lỗi khi đang nạp dịch vụ ứng dụng: %s.","ieSpellDownload":"Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?","manyChanges":"Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi","noChanges":"Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi","noMispell":"Hoàn tất kiểm tra chính tả: Không có lỗi chính tả","noSuggestions":"- Không đưa ra gợi ý về từ -","notAvailable":"Xin lỗi, dịch vụ này hiện tại không có.","notInDic":"Không có trong từ điển","oneChange":"Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi","progress":"Đang tiến hành kiểm tra chính tả...","title":"Kiểm tra chính tả","toolbar":"Kiểm tra chính tả"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"sourcearea":{"toolbar":"Mã HTML"},"scayt":{"btn_about":"Thông tin về SCAYT","btn_dictionaries":"Từ điển","btn_disable":"Tắt SCAYT","btn_enable":"Bật SCAYT","btn_langs":"Ngôn ngữ","btn_options":"Tùy chọn","text_title":""},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"link":{"acccessKey":"Phím hỗ trợ truy cập","advanced":"Mở rộng","advisoryContentType":"Nội dung hướng dẫn","advisoryTitle":"Nhan đề hướng dẫn","anchor":{"toolbar":"Chèn/Sửa điểm neo","menu":"Thuộc tính điểm neo","title":"Thuộc tính điểm neo","name":"Tên của điểm neo","errorName":"Hãy nhập vào tên của điểm neo","remove":"Xóa neo"},"anchorId":"Theo định danh thành phần","anchorName":"Theo tên điểm neo","charset":"Bảng mã của tài nguyên được liên kết đến","cssClasses":"Lớp Stylesheet","emailAddress":"Thư điện tử","emailBody":"Nội dung thông điệp","emailSubject":"Tiêu đề thông điệp","id":"Định danh","info":"Thông tin liên kết","langCode":"Mã ngôn ngữ","langDir":"Hướng ngôn ngữ","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","menu":"Sửa liên kết","name":"Tên","noAnchors":"(Không có điểm neo nào trong tài liệu)","noEmail":"Hãy đưa vào địa chỉ thư điện tử","noUrl":"Hãy đưa vào đường dẫn liên kết (URL)","other":"<khác>","popupDependent":"Phụ thuộc (Netscape)","popupFeatures":"Đặc điểm của cửa sổ Popup","popupFullScreen":"Toàn màn hình (IE)","popupLeft":"Vị trí bên trái","popupLocationBar":"Thanh vị trí","popupMenuBar":"Thanh Menu","popupResizable":"Có thể thay đổi kích cỡ","popupScrollBars":"Thanh cuộn","popupStatusBar":"Thanh trạng thái","popupToolbar":"Thanh công cụ","popupTop":"Vị trí phía trên","rel":"Quan hệ","selectAnchor":"Chọn một điểm neo","styles":"Kiểu (style)","tabIndex":"Chỉ số của Tab","target":"Đích","targetFrame":"<khung>","targetFrameName":"Tên khung đích","targetPopup":"<cửa sổ popup>","targetPopupName":"Tên cửa sổ Popup","title":"Liên kết","toAnchor":"Neo trong trang này","toEmail":"Thư điện tử","toUrl":"URL","toolbar":"Chèn/Sửa liên kết","type":"Kiểu liên kết","unlink":"Xoá liên kết","upload":"Tải lên"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image":{"alertUrl":"Hãy đưa vào đường dẫn của ảnh","alt":"Chú thích ảnh","border":"Đường viền","btnUpload":"Tải lên máy chủ","button2Img":"Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?","hSpace":"Khoảng đệm ngang","img2Button":"Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?","infoTab":"Thông tin của ảnh","linkTab":"Tab liên kết","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","resetSize":"Kích thước gốc","title":"Thuộc tính của ảnh","titleButton":"Thuộc tính nút của ảnh","upload":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","vSpace":"Khoảng đệm dọc","validateBorder":"Chiều rộng của đường viền phải là một số nguyên dương","validateHSpace":"Khoảng đệm ngang phải là một số nguyên dương","validateVSpace":"Khoảng đệm dọc phải là một số nguyên dương"},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"fakeobjects":{"anchor":"Điểm neo","flash":"Flash","hiddenfield":"Trường ẩn","iframe":"IFrame","unknown":"Đối tượng không rõ ràng"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteArea":"Khu vực dán","pasteMsg":"Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.","securityMsg":"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.","title":"Dán"},"button":{"selectedLabel":"%1 (Đã chọn)"},"blockquote":{"toolbar":"Khối trích dẫn"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"about":{"copy":"Bản quyền &copy; $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor","help":"Kiểm tra $1 để được giúp đỡ.","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:","title":"Thông tin về CKEditor","userGuide":"Hướng dẫn sử dụng CKEditor"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"Chiều cao","align":"Vị trí","alignLeft":"Trái","alignRight":"Phải","alignCenter":"Giữa","alignJustify":"Sắp chữ","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/lang/zh-cn.js deleted file mode 100644 index 1198971f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['zh-cn']={"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"替换","btnReplaceAll":"全部替换","btnUndo":"撤消","changeTo":"更改为","errorLoading":"加载应该服务主机时出错: %s.","ieSpellDownload":"拼写检查插件还没安装, 您是否想现在就下载?","manyChanges":"拼写检查完成: 更改了 %1 个单词","noChanges":"拼写检查完成: 没有更改任何单词","noMispell":"拼写检查完成: 没有发现拼写错误","noSuggestions":"- 没有建议 -","notAvailable":"抱歉, 服务目前暂不可用","notInDic":"没有在字典里","oneChange":"拼写检查完成: 更改了一个单词","progress":"正在进行拼写检查...","title":"拼写检查","toolbar":"拼写检查"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcearea":{"toolbar":"源码"},"scayt":{"btn_about":"关于即时拼写检查","btn_dictionaries":"字典","btn_disable":"禁用即时拼写检查","btn_enable":"启用即时拼写检查","btn_langs":"语言","btn_options":"选项","text_title":""},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"link":{"acccessKey":"访问键","advanced":"高级","advisoryContentType":"内容类型","advisoryTitle":"标题","anchor":{"toolbar":"插入/编辑锚点链接","menu":"锚点链接属性","title":"锚点链接属性","name":"锚点名称","errorName":"请输入锚点名称","remove":"删除锚点"},"anchorId":"按锚点 ID","anchorName":"按锚点名称","charset":"字符编码","cssClasses":"样式类名称","emailAddress":"地址","emailBody":"内容","emailSubject":"主题","id":"ID","info":"超链接信息","langCode":"语言代码","langDir":"语言方向","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","menu":"编辑超链接","name":"名称","noAnchors":"(此文档没有可用的锚点)","noEmail":"请输入电子邮件地址","noUrl":"请输入超链接地址","other":"<其他>","popupDependent":"依附 (NS)","popupFeatures":"弹出窗口属性","popupFullScreen":"全屏 (IE)","popupLeft":"左","popupLocationBar":"地址栏","popupMenuBar":"菜单栏","popupResizable":"可缩放","popupScrollBars":"滚动条","popupStatusBar":"状态栏","popupToolbar":"工具栏","popupTop":"右","rel":"关联","selectAnchor":"选择一个锚点","styles":"行内样式","tabIndex":"Tab 键次序","target":"目标","targetFrame":"<框架>","targetFrameName":"目标框架名称","targetPopup":"<弹出窗口>","targetPopupName":"弹出窗口名称","title":"超链接","toAnchor":"页内锚点链接","toEmail":"电子邮件","toUrl":"地址","toolbar":"插入/编辑超链接","type":"超链接类型","unlink":"取消超链接","upload":"上传"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image":{"alertUrl":"请输入图像地址","alt":"替换文本","border":"边框大小","btnUpload":"上传到服务器","button2Img":"确定要把当前图像按钮转换为普通图像吗?","hSpace":"水平间距","img2Button":"确定要把当前图像改变为图像按钮吗?","infoTab":"图像信息","linkTab":"链接","lockRatio":"锁定比例","menu":"图像属性","resetSize":"原始尺寸","title":"图像属性","titleButton":"图像域属性","upload":"上传","urlMissing":"缺少图像源文件地址","vSpace":"垂直间距","validateBorder":"边框大小必须为整数格式","validateHSpace":"水平间距必须为整数格式","validateVSpace":"垂直间距必须为整数格式"},"horizontalrule":{"toolbar":"插入水平线"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"fakeobjects":{"anchor":"锚点","flash":"Flash 动画","hiddenfield":"隐藏域","iframe":"IFrame","unknown":"未知对象"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteArea":"粘贴区域","pasteMsg":"请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>","securityMsg":"因为您的浏览器的安全设置原因,本编辑器不能直接访问您的剪贴板内容,你需要在本窗口重新粘贴一次。","title":"粘贴"},"button":{"selectedLabel":"已选中 %1 项"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor","help":"访问 $1 以获取帮助。","moreInfo":"相关授权许可信息请访问我们的网站:","title":"关于 CKEditor","userGuide":"CKEditor 用户向导"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存,是否确认新建文档?","confirmCancel":"部分修改尚未保存,是否确认关闭对话框?","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignJustify":"两端对齐","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"None","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字,或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,不可用</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/lang/zh.js deleted file mode 100644 index e158e5bf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['zh']={"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"取代","btnReplaceAll":"全部取代","btnUndo":"復原","changeTo":"更改為","errorLoading":"無法聯系侍服器: %s.","ieSpellDownload":"尚未安裝拼字檢查元件。您是否想要現在下載?","manyChanges":"拼字檢查完成:更改了 %1 個單字","noChanges":"拼字檢查完成:未更改任何單字","noMispell":"拼字檢查完成:未發現拼字錯誤","noSuggestions":"- 無建議值 -","notAvailable":"抱歉,服務目前暫不可用","notInDic":"不在字典中","oneChange":"拼字檢查完成:更改了 1 個單字","progress":"進行拼字檢查中…","title":"拼字檢查","toolbar":"拼字檢查"},"undo":{"redo":"取消復原","undo":"復原"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"table":{"border":"框線大小","caption":"標題","cell":{"menu":"儲存格","insertBefore":"前方插入儲存格","insertAfter":"後方插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併","mergeDown":"向下合併","splitHorizontal":"水平分割儲存格","splitVertical":"垂直分割儲存格","title":"儲存格屬性","cellType":"儲存格類型","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"自動斷行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基準線","bgColor":"背景顏色","borderColor":"框線顏色","data":"資料","header":"Header","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字。","invalidHeight":"儲存格高度必須為數字。","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"選擇"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"行","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"行","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"無","headersRow":"First Row","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"行數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"列","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"列","summary":"Summary","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"stylescombo":{"label":"樣式","panelTitle":"Formatting Styles","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"sourcearea":{"toolbar":"原始碼"},"scayt":{"btn_about":"關於即時拼寫檢查","btn_dictionaries":"字典","btn_disable":"關閉即時拼寫檢查","btn_enable":"啟用即時拼寫檢查","btn_langs":"語言","btn_options":"選項","text_title":""},"removeformat":{"toolbar":"移除格式"},"pastetext":{"button":"貼成純文字","title":"貼成純文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"在此插入段落"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"link":{"acccessKey":"便捷鍵","advanced":"進階","advisoryContentType":"建議內容類型","advisoryTitle":"標題","anchor":{"toolbar":"錨點","menu":"編輯錨點","title":"錨點內容","name":"錨點名稱","errorName":"請輸入錨點名稱","remove":"移除錨點"},"anchorId":"依元件編號","anchorName":"依錨點名稱","charset":"連結資源的字元集","cssClasses":"樣式表類別","emailAddress":"電子郵件地址","emailBody":"郵件本文","emailSubject":"郵件主旨","id":"ID","info":"連結資訊","langCode":"語言碼","langDir":"語言方向","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","menu":"編輯連結","name":"名稱","noAnchors":"(本文件中無可用之錨點)","noEmail":"請輸入電子郵件","noUrl":"請輸入連結 URL","other":"<其他>","popupDependent":"獨立 (Netscape)","popupFeatures":"快顯視窗功能","popupFullScreen":"全螢幕 (IE)","popupLeft":"左側位置","popupLocationBar":"位置列","popupMenuBar":"功能表列","popupResizable":"可調大小","popupScrollBars":"捲軸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"頂端位置","rel":"關係","selectAnchor":"選取一個錨點","styles":"樣式","tabIndex":"定位順序","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架名稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗名稱","title":"連結","toAnchor":"文字中的錨點連結","toEmail":"電子郵件","toUrl":"網址","toolbar":"連結","type":"連結類型","unlink":"取消連結","upload":"上傳"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"image":{"alertUrl":"請輸入圖片 URL","alt":"替代文字","border":"框線","btnUpload":"傳送到伺服器","button2Img":"請問您確定要將「圖片按鈕」轉換成「圖片」嗎?","hSpace":"HSpace","img2Button":"請問您確定要將「圖片」轉換成「圖片按鈕」嗎?","infoTab":"影像資訊","linkTab":"連結","lockRatio":"固定比例","menu":"影像屬性","resetSize":"重設大小","title":"影像屬性","titleButton":"影像按鈕屬性","upload":"上傳","urlMissing":"遺失圖片來源之 URL ","vSpace":"VSpace","validateBorder":"框線必須是整數。","validateHSpace":"HSpace 必須是整數。","validateVSpace":"VSpace 必須是整數。"},"horizontalrule":{"toolbar":"插入水平線"},"format":{"label":"格式","panelTitle":"段落格式","tag_address":"地址","tag_div":"標準 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"標準","tag_pre":"格式設定"},"fakeobjects":{"anchor":"錨點","flash":"Flash 動畫","hiddenfield":"隱藏欄位","iframe":"IFrame","unknown":"無法辨識的物件"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"contextmenu":{"options":"內容功能表選項"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"貼上區","pasteMsg":"請使用鍵盤快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下「確定」。","securityMsg":"因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。","title":"貼上"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"引用段落"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor","help":"檢閱 $1 尋求幫助。","moreInfo":"關於授權資訊,請參閱我們的網站:","title":"關於 CKEditor","userGuide":"CKEditor 使用者手冊"},"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","common":{"editorHelp":"按下 ALT 0 取得說明。","browseServer":"瀏覽伺服器","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"傳送至伺服器","image":"圖像","flash":"Flash","form":"表格","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字欄位","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"選取欄位","imageButton":"影像按鈕","notSet":"<未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左至右 (LTR)","langDirRtl":"由右至左 (RTL)","langCode":"語言代碼","longDescr":"完整描述 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"關閉","preview":"預覽","resize":"調整大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"此值不是數值。","confirmNewPage":"現存的修改尚未儲存,要開新檔案?","confirmCancel":"部份選項尚未儲存,要關閉對話框?","options":"選項","target":"目標","targetNew":"開新視窗 (_blank)","targetTop":"最上層視窗 (_top)","targetSelf":"相同視窗 (_self)","targetParent":"父視窗 (_parent)","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊方式","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignJustify":"左右對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidCssLength":"「%1」的值應為正數,並可包含有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","invalidHtmlLength":"「%1」的值應為正數,並可包含有效的 HTML 單位 (px 或 %)。","invalidInlineStyle":"行內樣式的值應包含一個以上的變數值組,其格式如「名稱:值」,並以分號區隔之。","cssLengthTooltip":"請輸入數值,單位是像素或有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,無法使用</span>"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js deleted file mode 100644 index 32c14faf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, -105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT, -CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d<f.length;d++)i=f[d],h=b/f[d],1<h&&2>=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, -html:function(){for(var e='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+l+'_arialbl" tabIndex="-1">%1</div><span id="'+l+'_arialbl" class="cke_voice_label">'+a.contents+" </span>",g=[],c=a.legend,j=c.length,f=0;f<j;f++){for(var b=c[f],h=[],i=b.items,k=i.length,d=0;d<k;d++){var n=i[d],o=n.legend.replace(m,p);o.match(m)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",n.name).replace("%2",o))}g.push("<h1>%1</h1><dl>%2</dl>".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1", -g.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}], -buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt deleted file mode 100644 index c760b6f9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -cs.js Found: 30 Missing: 0 -cy.js Found: 30 Missing: 0 -da.js Found: 12 Missing: 18 -de.js Found: 30 Missing: 0 -el.js Found: 25 Missing: 5 -eo.js Found: 30 Missing: 0 -fa.js Found: 30 Missing: 0 -fi.js Found: 30 Missing: 0 -fr.js Found: 30 Missing: 0 -gu.js Found: 12 Missing: 18 -he.js Found: 30 Missing: 0 -it.js Found: 30 Missing: 0 -mk.js Found: 5 Missing: 25 -nb.js Found: 30 Missing: 0 -nl.js Found: 30 Missing: 0 -no.js Found: 30 Missing: 0 -pt-br.js Found: 30 Missing: 0 -ro.js Found: 6 Missing: 24 -tr.js Found: 30 Missing: 0 -ug.js Found: 27 Missing: 3 -vi.js Found: 6 Missing: 24 -zh-cn.js Found: 30 Missing: 0 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js deleted file mode 100644 index 49f816f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js deleted file mode 100644 index bddf534f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js deleted file mode 100644 index 04f705ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT-TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, -{name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se al següent camp del quadre de diàleg, premi SHIFT + TAB per desplaçar-se a l'anterior camp, premi ENTER per acceptar el quadre de diàleg, premi ESC per cancel·lar el quadre de diàleg. Per els quadres de diàleg que tenen diverses pestanyes, premi ALT + F10 per anar a la llista de pestanyes. Després podrà desplaçar-se a la següent pestanya amb TAB o RIGHT ARROW. Anar a la pestanya anterior amb SHIFT + TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar la pestanya."}, -{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT + TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."}, -{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"}, -{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat", -legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape",pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall", -end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6",numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8", -numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert",backSlash:"Barra Invertida", -closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js deleted file mode 100644 index ed61622e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT-TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", -legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další pole, stiskněte SHIFT + TAB pro přesun na předchozí pole, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT + F10 pr oprocházení seznamu karet. Pak se přesuňte na další kartu pomocí TAB nebo ŠIPKA VPRAVO. Pro přesun na předchozí stiskněte SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru", -legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT + TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."}, -{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí položku se přesunete pomocí SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva", -legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:"Příkaz pro přístup k dalšímu prostoru zaměření", -legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru",pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo", -upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7",numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9", -multiply:"Numerická klávesa násobení",add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka",backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka", -singleQuote:"Jednoduchá uvozovka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js deleted file mode 100644 index 86bd79d7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."}, -{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, -{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, -{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, -{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js deleted file mode 100644 index 2be9ece1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js deleted file mode 100644 index 2a1e6f49..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, -{name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."}, -{name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."}, -{name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl", -legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, -{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Rücklöschtaste",tab:"Tab",enter:"Eingabe",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf", -pageDown:"Bild ab",end:"Ende",home:"Pos1",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8", -numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich", -closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js deleted file mode 100644 index f2065da4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT-TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", -legend:"Μέσα σε ένα παράθυρο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο προηγούμενο. Πατήστε ENTER για να υποβάλετε την φόρμα. Πατήστε ESC για να ακυρώσετε την διαδικασία της φόρμας. Για παράθυρα διαλόγων που έχουν πολλές σελίδες σε καρτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καρτελών. Στην συνέχεια μπορείτε να μεταβείτε στην επόμενη καρτέλα πατώντας το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μπορείτε να μεταβείτε στην προηγούμενη καρτέλα πατώντας SHIFT + TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε την καρτέλα για προβολή."}, -{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, -{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT + TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, -{name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, -{name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6", -numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης", -backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js deleted file mode 100644 index 4182e6c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js deleted file mode 100644 index ae9b3385..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js deleted file mode 100644 index 081cc7e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, -{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaŭa kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaĝoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviĝu al la sekva langeto per la klavo TABA aŭ SAGO DEKSTREN. Moviĝu al la antaŭa langeto per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por selekti la langetretpaĝon."}, -{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, -{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, -{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."}, -{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"Retropaŝo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo", -pageDown:"Sekva Paĝo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7", -numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo", -singleQuote:"Citilo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js deleted file mode 100644 index eb30d5ee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", -legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."}, -{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor", -legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT + TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, -{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, -{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js deleted file mode 100644 index 4a893b0e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js deleted file mode 100644 index a0a8ae55..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shif-Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", -legend:"در داخل یک پنجره محاورهای، کلید Tab را بفشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به فیلد قبلی، فشردن Enter برای ثبت اطلاعات پنجره، فشردن Esc برای لغو پنجره محاورهای و برای پنجرههایی که چندین برگه دارند، فشردن Alt+F10 جهت رفتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, -{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, -{name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, -{name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان چپ", -upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذف",leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن", -f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js deleted file mode 100644 index 644d45bd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, -{name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko", -legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko", -legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, -{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."}, -{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8", -numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js deleted file mode 100644 index 15c3c4eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, -{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, -{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, -{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, -{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, -{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", -leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1", -f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js deleted file mode 100644 index a7de279a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche Ech (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, -{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, -{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches Ech ou FLECHE GAUCHE. Fermer le menu contextuel avec Ech."}, -{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, -{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", -legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, -{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Echap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite", -selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12", -numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js deleted file mode 100644 index 37fea83b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, -{name:"Editor de diálogo",legend:"Dentro dun cadro de diálogo, prema a tecla TAB para desprazarse ao campo seguinte do cadro de diálogo, prema MAIÚS + TAB para desprazarse ao campo anterior, prema INTRO para presentar o cadro de diálogo, prema a tecla ESC para cancelar o diálogo. Para os diálogos que teñen varias páxinas, prema ALT + F10 para navegar á lapela da lista. Despois pasar á seguinte lapela con TAB ou FRECHA DEREITA. Para ir á lapela anterior con SHIFT + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar a lapela da páxina."}, -{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."}, -{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"}, -{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Orde «acceder ao seguinte espazo en foco»", -legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba",pageDown:"Páxina abaixo",end:"Fin",home:"Inicio", -leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7",numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9", -multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida",closeBracket:"Pechar corchete",singleQuote:"Comiña simple"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js deleted file mode 100644 index 2982b4f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js deleted file mode 100644 index 6be2191c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב."}, -{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", -legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, -{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"חץ שמאלה",upArrow:"חץ למעלה",rightArrow:"חץ ימינה",downArrow:"חץ למטה",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", -numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סלאש",graveAccent:"Grave Accent", -openBracket:"Open Bracket",backSlash:"סלאש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js deleted file mode 100644 index 2e50a82a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js deleted file mode 100644 index 3cf43663..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT-TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", -legend:"Unutar dijaloga, pritisnite TAB za navigaciju do sljedećeg polja, pritisnite SHIFT + TAB za vraćanje na prethodno polje, pritisnite ENTER za slanje dijaloga ili ESC za zatvaranje dijaloga. Za dijaloge koji imaju višestruke kartice, pritisnite ALT + F10 za na navigaciju i zatim TAB ili lijeva strelica kursora ili SHIFT + TAB i desna strelica kursora. SPACE ili ENTER odabiru karticu."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, -{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT + TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT + TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, -{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, -{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js deleted file mode 100644 index 41d64897..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", -legend:"Párbeszédablakban nyomjon TAB-ot a következő párbeszédmezőhöz ugráshoz, nyomjon SHIFT + TAB-ot az előző mezőhöz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÍLLAL a következő fülre ugorhat. Az előző fülre ugráshoz használja a SHIFT + TAB-ot vagy a BAL NYILAT. Nyomjon SPACE-t vagy ENTER-t hogy kijelölje a fület."}, -{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, -{name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, -{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, -{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8", -numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel", -singleQuote:"szimpla idézőjel"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js deleted file mode 100644 index bf14b8a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js deleted file mode 100644 index 4166252b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."}, -{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."}, -{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, -{name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]}, -{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, -{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù", -end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico", -numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave", -openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js deleted file mode 100644 index 4a6b4c7a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"ダイヤログ内では、ダイアログの次の選択肢に移動するにはTabを押します。前の選択肢に移動するには、SHIFT+Tabを押します。ダイアログを決定するには、ENTERを押します。ESCでダイアログをキャンセルできます。複数のタブがあるダイアログではタブリストを操作するにはALT+F10を押します。次のタブに移動するにはTabか右カーソル、前のタブに戻るにはSHIFT+Tabか左カーソルです。タブページを決定するにはスペースもしくは、ENTERキーを押してください。"}, -{name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, -{name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, -{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert","delete":"Delete",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5", -numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js deleted file mode 100644 index 649e5054..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម", -legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"លុបថយក្រោយ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", -openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js deleted file mode 100644 index 8337ee88..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"편집기 다이얼로그",legend:"다이얼로그 내부에서 TAB"},{name:"편집기 환경 메뉴",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, -{name:"편집기 목록 박스",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"명령",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js deleted file mode 100644 index 96412248..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", -legend:"لەهەمانکاتدا کە تۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابەری لیستی بازدەرەکان. بۆ چوونە بازدەری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری دەستی ڕاست. بۆچوونە بازدەری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری دەستی چەپ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازدەر (تاب)."}, -{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, -{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, -{name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js deleted file mode 100644 index 04d50a94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js deleted file mode 100644 index 36ad0cdb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, -{name:"Redaktora dialoga logs",legend:"Dialoga logā nospiediet pogu TAB lai pārvietotos uz nākošo dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekšējā laukā, nospiediet ENTER lai apstiprinātu dialoga datus, nospiediet ESC lai aizvērtu šo dialogu. Dialogam kuram ir vairākas cilnes, nospiediet ALT+F10 lai pārvietotos uz nepieciešamo cilni. Lai pārvietotos uz nākošo cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos lapas cilni."}, -{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, -{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, -{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", -legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, -{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js deleted file mode 100644 index fa1b2ef3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", -legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, -{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js deleted file mode 100644 index d40e4d3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js deleted file mode 100644 index c86ef4ab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", -legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, -{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, -{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, -{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Select key",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7", -numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Bakover skråstrek", -closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js deleted file mode 100644 index 21944803..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, -{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."}, -{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."}, -{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht", -legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, -{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen", -subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js deleted file mode 100644 index 6c696647..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", -legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, -{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, -{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, -{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js deleted file mode 100644 index 664b1276..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Wciśnij ${toolbarFocus} aby przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT-TAB. Przejdź do następnego i poprzedniego narzędzia używając STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Wciśnij SPACJĘ lub ENTER, aby aktywować zaznaczone narzędzie."}, -{name:"Okno dialogowe edytora",legend:"Będąc w oknie dialogowym wciśnij TAB aby przejść do następnego pola dialogowego, wciśnij SHIFT + TAB aby przejść do poprzedniego pola, wciśnij ENTER aby wysłać dialog, wciśnij ESC aby anulować dialog. Dla okien dialogowych z wieloma zakładkami, wciśnij ALT + F10 aby przejść do listy zakładek. Gdy to zrobisz przejdź do następnej zakładki wciskając TAB lub STRZAŁKĘ W PRAWO. Przejdź do poprzedniej zakładki wciskając SHIFT + TAB lub STRZAŁKĘ W LEWO. Wciśnij SPACJĘ lub ENTER aby wybrać zakładkę."}, -{name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", -legend:"W polu listy możesz przechodzić do następnego elementu za pomocą klawisza TAB lub STRZAŁKI W DÓŁ. Poprzedni element osiągniesz za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Za pomocą SPACJI lub ENTERA wybierzesz daną opcję z listy, a za pomocą klawisza ESC opuścisz listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz Tab lub Strzałki w prawo. W celu przejścia do poprzedniego elementu naciśnij klawisze Shift+Tab lub Strzałki w lewo. By wybrać element w edytorze, użyj klawisza Spacji lub Enter."}]}, -{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo", -upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej", -numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza", -period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js deleted file mode 100644 index 1557459c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, -{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."}, -{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, -{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, -{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",downArrow:"Seta à Baixo",insert:"Insert","delete":"Delete",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico", -numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes", -backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js deleted file mode 100644 index c7cd0701..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de Acessibilidade",contents:"Conteúdos da Ajuda. Pressione em 'ESC' para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, -{name:"Janela do Editor",legend:"Dentro de uma janela, pressione TAB para navigar para o campo da janela seguinte, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para submeter a janela, pressione ESC para cancelar a janela. Para as janelas que têm múltiplos páginas com separadores, pressione ALT + F10 para navegar para a lista do separador. Depois mova para o seguinte separador com TAB ou SETA DIREITA. Mover para o separador anterior com SHIFT + TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o separador da página."}, -{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa Lista Editor",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."}, -{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:"Comando de Anular",legend:"Pressione ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"}, -{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior",legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, -{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js deleted file mode 100644 index 1d1479a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT-TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."}, -{name:"Dialog editor",legend:"Într-un dialog, apasă TAB pentru a naviga spre câmpul următor de dialog, apasă SHIFT + TAB pentru a te duce la câmpul anterior, apasă ENTER pentru a trimite dialogul, apasă ESC pentru a anula dialogul. Pentru dialoguri care au mai multe subferestre, apasă ALT + F10 pentr a naviga în lista de subferestre. Treci la subferestrea următoare cu TAB sau SĂGEATĂ DREAPTA. Treci la subfereastra anterioară cu SHIFT + TAB sau SĂGEATĂ STÂNGA. Apasă SPAȚIU sau ENTER pentru a selecta subfereastra."}, -{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."},{name:"Editor Casetă Listă", -legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT + TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js deleted file mode 100644 index 0c0e31a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT-TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"В диалоговом окне, нажмите клавишу TAB для перехода к следующему диалоговому полю, нажмите клавиши SHIFT + TAB, чтобы перейти к предыдущему полю, нажмите ENTER, чтобы отправить данные, нажмите клавишу ESC, для отмены. Для окон, которые имеют несколько вкладок, нажмите ALT + F10 для перехода к списку вкладок. Переход к следующей вкладке TAB ИЛИ ПРАВУЮ СТРЕЛКУ. Переход к предыдущей вкладке с помощью SHIFT + TAB или ЛЕВАЯ СТРЕЛКА. Нажмите ПРОБЕЛ или ENTER, чтобы выбрать вкладку."}, -{name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", -legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT + TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, -{name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, -{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End", -home:"Home",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert","delete":"Delete",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка", -divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js deleted file mode 100644 index b5616dd0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"දෙබසක් තුළ, ඊළඟ දෙබස් පෙදෙසට යෑමට TAB බොත්තම ඔබන්න, කලින් පෙදෙසට යෑමට SHIFT + TAB බොත්තම ද, දෙබස් ඉදිරිපත් කිරීමට ENTER බොත්තම ද, දෙබස් නැවතීමට ESCබොත්තම ද, දෙබස් සහිත ගොනු, පිටු වැඩි සංක්‍යයාවක් ලබා ගෙනිමට,ගොනු තුළ එහාමෙහා යෑමට ALT + F10 බොත්තම් ද, ඊළඟ ගොනුවට යෑමට TAB හෝ RIGTH ARROW බොත්තම ඔබන්න. පෙර ගොනුවට යෑමට SHIFT + TAB හෝ LEFT ARROW බොත්තම් ද ,ගොනු පිටු තේරීමට SPACE හෝ ENTER බොත්තම් ද ඔබන්න."}, -{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT + TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, -{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, -{name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl", -alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8", -numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js deleted file mode 100644 index 083236c4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, -{name:"Editorový dialóg",legend:"V dialogu, stlačte TAB pre navigáciu na ďalšie dialógové pole, stlačte STIFT + TAB pre presun na predchádzajúce pole, stlačte ENTER pre odoslanie dialógu, stlačte ESC pre zrušenie dialógu. Pre dialógy, ktoré majú viac záložiek, stlačte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ďalšej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlačte SHIFT + TAB alebo ľavú šípku. Stlačte medzerník alebo ENTER pre vybranie záložky."}, -{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, -{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT + TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, -{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, -{name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole", -end:"End",home:"Home",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",downArrow:"Šípka dole",insert:"Insert","delete":"Delete",leftWindowKey:"Ľavé Windows tlačidlo",rightWindowKey:"Pravé Windows tlačidlo",selectKey:"Tlačidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"Sčítanie",subtract:"Odčítanie", -decimalPoint:"Desatinná čiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Bodkočiarka",equalSign:"Rovná sa",comma:"Čiarka",dash:"Pomĺčka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js deleted file mode 100644 index f99db09b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT-TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, -{name:"Urejevalno Pogovorno Okno",legend:"Znotraj pogovornega okna, pritisnite tipko TAB za pomik na naslednjo pogovorno polje, pritisnite SHIFT + TAB za pomik v prejšnje polje, pritisnite tipko ENTER za predložitev pogovornega okna, pritisnite tipko ESC, da prekličete okno. Za okna, ki imajo več zavihkov, pritisnite ALT + F10, da pojdete na seznam zavihkov. Na naslednji zavihek se premaknete s tipko TAB ali DESNO PUŠČICO. Z SHIFT + TAB ali LEVO PUŠČICO pa se premaknete na prejšnji zavihek. Pritisnite tipko SPACE ali ENTER za izbiro zavihka."}, -{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."},{name:"Urejevalno Seznamsko Polje", -legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT + TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT + TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, -{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, -{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", -home:"Home",leftArrow:"Levo puščica",upArrow:"Gor puščica",rightArrow:"Desno puščica",downArrow:"Dol puščica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica", -divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Oklepaj",singleQuote:"Opuščaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js deleted file mode 100644 index 7bcd7690..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, -{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", -numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", -openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js deleted file mode 100644 index e1a720b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js deleted file mode 100644 index a75fdd4d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js deleted file mode 100644 index 49f9293d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."}, -{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny", -legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."}, -{name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"}, -{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},{name:"Tillgå nästa fokuskommandots utrymme", -legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut",home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil", -rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4", -f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js deleted file mode 100644 index 4e7c3e0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", -legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js deleted file mode 100644 index 57fd77a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, -{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, -{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, -{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, -{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, -{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",end:"End",home:"Home",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Insert","delete":"Silme",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Noktalı virgül",equalSign:"Eşittir",comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Parantez aç",backSlash:"Backslash",closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js deleted file mode 100644 index 12cb6a88..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"}, -{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү","delete":"Бетерү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык", -graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js deleted file mode 100644 index c7ab77c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT + TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT + F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛ SHIFT + TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."}, -{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", -legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT + TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, -{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, -{name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape", -pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract", -decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js deleted file mode 100644 index 7c8f9098..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT-TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів"},{name:"Діалог Редактора", -legend:"У діалозі натисніть клавішу TAB для переходу до наступного поля, натисніть SHIFT + TAB, щоб перейти до попереднього поля, натисніть ENTER, щоб відправити дані, натисніть ESC, щоб скасувати. Для вікон, які мають кілька вкладок, натисніть ALT + F10 для переходу до списку вкладок. Перехід до наступної вкладки TAB АБО СТРІЛКА ВПРАВО. Перехід до попередньої вкладки за допомогою SHIFT + TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER, щоб вибрати вкладку."},{name:"Контекстне Меню Редактора", -legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."},{name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT + TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."}, -{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"}, -{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, -{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0", -numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання",decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період", -forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js deleted file mode 100644 index e82e39a1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Bên trong một hộp thoại, nhấn TAB để chuyển sang trường tiếp theo, nhấn SHIFT + TAB để quay lại trường phía trước, nhấn ENTER để chấp nhận, nhấn ESC để đóng hộp thoại. Đối với các hộp thoại có nhiều tab, nhấn ALT + F10 để chuyển đến danh sách các tab. Sau đó nhấn TAB hoặc MŨI TÊN SANG PHẢI để chuyển sang tab tiếp theo. Nhấn SHIFT + TAB hoặc MŨI TÊN SANG TRÁI để chuyển sang tab trước đó. Nhấn DẤU CÁCH hoặc ENTER để chọn tab."}, -{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, -{name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím Tab hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím Shift+Tab hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím Enter để chọn các tùy chọn trong danh sách. Nhấn phím Esc để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím Tab hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím Shift+Tab hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc Enter để chọn đối tượng trong trình soạn thảo."}]}, -{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, -{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock", -escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9", -multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js deleted file mode 100644 index fe2cab0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 导航到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个和下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,TAB 键移动到下一个字段,SHIFT + TAB 组合键移动到上一个字段,ENTER 键提交对话框,ESC 键取消对话框。对于有多选项卡的对话框,用ALT + F10来移到选项卡列表。然后用 TAB 键或者向右箭头来移动到下一个选项卡;SHIFT + TAB 组合键或者向左箭头移动到上一个选项卡。用 SPACE 键或者 ENTER 键选择选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, -{name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, -{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab 键",enter:"回车键",shift:"Shift 键",ctrl:"Ctrl 键",alt:"Alt 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键", -insert:"插入键","delete":"删除键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键", -semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js deleted file mode 100644 index 1521763d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按「${toolbarFocus}」以瀏覽工具列。\r\n利用「TAB」或「SHIFT+TAB」以便移動到下一個或前一個工具列群組。\r\n利用「→」或「←」以便移動到下一個或前一個工具列按鈕。\r\n請按下「空白鍵」或「ENTER」鍵啟動工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,請按 TAB 鍵以便移動到下個欄位,請按 SHIFT + TAB 以便移動到前個欄位;請按 ENTER 以提交對話框資料,或按下 ESC 取消對話框。\r\n若是有多個頁框的對話框,請按 ALT + F10 以移動到頁框列表,並以 TAB 或是 → 方向鍵移動到下個頁框。以 SHIFT + TAB 或是 ← 方向鍵移動到前個頁框。按下 空白鍵 或是 ENTER 以選取頁框。"},{name:"編輯器內容功能表", -legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"},{name:"編輯器清單方塊",legend:"在列表中,請利用 TAB 或 ↓ 方向鍵以移動到下一個項目;或利用 SHIFT + TAB 或 ↑ 方向鍵移動到前一個項目。請按下 空白鍵 或是 ENTER 以選取項目。請按 ESC 關閉列表。"},{name:"編輯器元件路徑工具列",legend:"請按「${elementsPathFocus}」以瀏覽元素路徑工具列。\r\n利用「TAB」或「→」以便移動到下一個元素按鈕。\r\n利用「SHIFT+TAB」或「←」以便移動到前一個元素按鈕。\r\n請按下「空白鍵」或「ENTER」鍵選擇編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令", -legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"},{name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}], -backspace:"退格鍵",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"向左箭號",upArrow:"向上鍵號",rightArrow:"向右鍵號",downArrow:"向下鍵號",insert:"插入","delete":"刪除",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6", -numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"新增",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"等號",comma:"逗號",dash:"虛線",period:"句點",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"反斜線",closeBracket:"右方括號",singleQuote:"單引號"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/about.js b/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/about.js deleted file mode 100644 index ee5473a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/about.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("about",function(a){var a=a.lang.about,b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+ -b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}</style><div class="cke_about_container"><div class="cke_about_logo"></div><p>CKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')<br><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com</a></p><p>'+a.help.replace("$1",'<a target="_blank" href="http://docs.ckeditor.com/user">'+ -a.userGuide+"</a>")+"</p><p>"+a.moreInfo+'<br><a target="_blank" href="http://ckeditor.com/about/license">http://ckeditor.com/about/license</a></p><p>'+a.copy.replace("$1",'<a target="_blank" href="http://cksource.com/">CKSource</a> - Frederico Knabben')+"</p></div>"}]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png b/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png deleted file mode 100644 index 10cc7368ad1bb65b16d037fa31e494906d60695e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13339 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/platforms/android/assets/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png deleted file mode 100644 index f186eb87a09f826311e422cbf08cf6c98f1b2d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6757 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 Hu0mjf?$$BB diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/adobeair/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/adobeair/plugin.js deleted file mode 100644 index 3b7b5cd3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/adobeair/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){for(var a=a.getElementsByTag("*"),c=a.count(),b,e=0;e<c;e++)b=a.getItem(e),function(a){for(var b=0;b<j.length;b++)(function(b){var c=a.getAttribute("on"+b);a.hasAttribute("on"+b)&&(a.removeAttribute("on"+b),a.on(b,function(b){var e=/(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec(c),k=e&&e[1],f=e&&e[2].split(","),e=/return false;/.test(c);if(f){for(var h=f.length,i,g=0;g<h;g++){f[g]=i=CKEDITOR.tools.trim(f[g]);var d=i.match(/^(["'])([^"']*?)\1$/);if(d)f[g]=d[2]; -else if(i.match(/\d+/))f[g]=parseInt(i,10);else switch(i){case "this":f[g]=a.$;break;case "event":f[g]=b.data.$;break;case "null":f[g]=null}}f=CKEDITOR.tools.callFunction.apply(window,f);k&&!1===f&&(e=1)}e&&b.data.preventDefault()}))})(j[b])}(b)}var j="click keydown mousedown keypress mouseover mouseout".split(" ");CKEDITOR.plugins.add("adobeair",{onLoad:function(){CKEDITOR.env.air&&(CKEDITOR.dom.document.prototype.write=CKEDITOR.tools.override(CKEDITOR.dom.document.prototype.write,function(a){function c(b, -a,c,h){a=b.append(a);(c=CKEDITOR.htmlParser.fragment.fromHtml(c).children[0].attributes)&&a.setAttributes(c);h&&a.append(b.getDocument().createText(h))}return function(b,e){if(this.getBody()){var d=this,h=this.getHead(),b=b.replace(/(<style[^>]*>)([\s\S]*?)<\/style>/gi,function(a,b,d){c(h,"style",b,d);return""}),b=b.replace(/<base\b[^>]*\/>/i,function(b){c(h,"base",b);return""}),b=b.replace(/<title>([\s\S]*)<\/title>/i,function(b,a){d.$.title=a;return""}),b=b.replace(/<head>([\s\S]*)<\/head>/i,function(b){var a= -new CKEDITOR.dom.element("div",d);a.setHtml(b);a.moveChildren(h);return""});b.replace(/(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i,function(b,a,c){d.getBody().setHtml(c);(b=CKEDITOR.htmlParser.fragment.fromHtml(a).children[0].attributes)&&d.getBody().setAttributes(b)})}else a.apply(this,arguments)}}),CKEDITOR.addCss("body.cke_editable { padding: 8px }"),CKEDITOR.ui.on("ready",function(a){a=a.data;if(a._.panel){var c=a._.panel._.panel,b;(function(){c.isLoaded?(b=c._.holder,d(b)):setTimeout(arguments.callee, -30)})()}else a instanceof CKEDITOR.dialog&&d(a._.element)}))},init:function(a){CKEDITOR.env.air&&(a.on("uiReady",function(){d(a.container);a.on("elementsPathUpdate",function(a){d(a.data.space)})}),a.on("contentDom",function(){a.document.on("click",function(a){a.data.preventDefault(!0)})}))}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/ajax/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/ajax/plugin.js deleted file mode 100644 index 8756cc6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/ajax/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("ajax",{requires:"xml"});CKEDITOR.ajax=function(){function g(){if(!CKEDITOR.env.ie||"file:"!=location.protocol)try{return new XMLHttpRequest}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}return null}function h(a){return 4==a.readyState&&(200<=a.status&&300>a.status||304==a.status||0===a.status||1223==a.status)}function i(a){return h(a)?a.responseText:null}function k(a){if(h(a)){var b= -a.responseXML;return new CKEDITOR.xml(b&&b.firstChild?b:a.responseText)}return null}function j(a,b,e){var f=!!b,c=g();if(!c)return null;c.open("GET",a,f);f&&(c.onreadystatechange=function(){4==c.readyState&&(b(e(c)),c=null)});c.send(null);return f?"":e(c)}function l(a,b,e,f,c){var d=g();if(!d)return null;d.open("POST",a,!0);d.onreadystatechange=function(){4==d.readyState&&(f(c(d)),d=null)};d.setRequestHeader("Content-type",e||"application/x-www-form-urlencoded; charset=UTF-8");d.send(b)}return{load:function(a, -b){return j(a,b,i)},post:function(a,b,e,f){return l(a,b,e,f,i)},loadXml:function(a,b){return j(a,b,k)}}}()})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/autogrow/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/autogrow/plugin.js deleted file mode 100644 index 891e3bc7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/autogrow/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(a){function k(){d=a.document;l=d[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();c=CKEDITOR.env.quirks?d.getBody():d.getDocumentElement();e=CKEDITOR.dom.element.createFromHtml('<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">'+(CKEDITOR.env.webkit?"&nbsp;":"")+"</span>",d)}function f(){i&&c.setStyle("overflow-y","hidden");var g=a.window.getViewPaneSize().height,b;l.append(e);b=e.getDocumentPosition(d).y+e.$.offsetHeight;e.remove(); -b+=h;b=Math.max(b,o);b=Math.min(b,m);b!=g&&j!=b&&(b=a.fire("autoGrow",{currentHeight:g,newHeight:b}).newHeight,a.resize(a.container.getStyle("width"),b,!0),j=b);i||(b<m&&c.$.scrollHeight>c.$.clientHeight?c.setStyle("overflow-y","hidden"):c.removeStyle("overflow-y"))}var j,d,l,c,e,h=a.config.autoGrow_bottomSpace||0,o=void 0!=a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200,m=a.config.autoGrow_maxHeight||Infinity,i=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:f,modes:{wysiwyg:1}, -readOnly:1,canUndo:!1,editorFocus:!1});var p={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},n;for(n in p)a.on(n,function(g){"wysiwyg"==g.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?j=null:(f(),i||f())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?c.removeStyle("overflow-y"):f())});a.on("contentDom",k);k();a.config.autoGrow_onStartup&& -a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){a.editable().isInline()?a.ui.space("contents").setStyle("height","auto"):h(a)})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bbcode/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/bbcode/plugin.js deleted file mode 100644 index 5d0cc491..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bbcode/plugin.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.on("dialogDefinition",function(a){var b;b=a.data.name;a=a.data.definition;"link"==b?(a.removeContents("target"),a.removeContents("upload"),a.removeContents("advanced"),b=a.getContents("info"),b.remove("emailSubject"),b.remove("emailBody")):"image"==b&&(a.removeContents("advanced"),b=a.getContents("Link"),b.remove("cmbTarget"),b=a.getContents("info"),b.remove("txtAlt"),b.remove("basic"))});var j={b:"strong",u:"u",i:"em",color:"span",size:"span",quote:"blockquote",code:"code",url:"a", -email:"span",img:"span","*":"li",list:"ol"},u={strong:"b",b:"b",u:"u",em:"i",i:"i",code:"code",li:"*"},k={strong:"b",em:"i",u:"u",li:"*",ul:"list",ol:"list",code:"code",a:"link",img:"img",blockquote:"quote"},v={color:"color",size:"font-size"},w={url:"href",email:"mailhref",quote:"cite",list:"listType"},m=CKEDITOR.dtd,x=CKEDITOR.tools.extend({table:1},m.$block,m.$listItem,m.$tableContent,m.$list),z=/\s*(?:;\s*|$)/,o={smiley:":)",sad:":(",wink:";)",laugh:":D",cheeky:":P",blush:":*)",surprise:":-o", -indecision:":|",angry:">:(",angel:"o:)",cool:"8-)",devil:">:-)",crying:";(",kiss:":-*"},y={},p=[],q;for(q in o)y[o[q]]=q,p.push(o[q].replace(/\(|\)|\:|\/|\*|\-|\|/g,function(a){return"\\"+a}));var p=RegExp(p.join("|"),"g"),A=function(){var a=[],b={nbsp:" ",shy:"­",gt:">",lt:"<"},c;for(c in b)a.push(c);a=RegExp("&("+a.join("|")+");","g");return function(c){return c.replace(a,function(e,a){return b[a]})}}();CKEDITOR.BBCodeParser=function(){this._={bbcPartsRegex:/(?:\[([^\/\]=]*?)(?:=([^\]]*?))?\])|(?:\[\/([a-z]{1,16})\])/ig}}; -CKEDITOR.BBCodeParser.prototype={parse:function(a){for(var b,c,i=0;b=this._.bbcPartsRegex.exec(a);){c=b.index;if(c>i)this.onText(a.substring(i,c),1);i=this._.bbcPartsRegex.lastIndex;if((c=(b[1]||b[3]||"").toLowerCase())&&!j[c])this.onText(b[0]);else if(b[1]){var e=j[c],g={},h={};if(b=b[2])if("list"==c&&(isNaN(b)?/^[a-z]+$/.test(b)?b="lower-alpha":/^[A-Z]+$/.test(b)&&(b="upper-alpha"):b="decimal"),v[c]){"size"==c&&(b+="%");h[v[c]]=b;b=g;var f="",d=void 0;for(d in h)var r=(d+":"+h[d]).replace(z,";"), -f=f+r;b.style=f}else w[c]&&(g[w[c]]=b);if("email"==c||"img"==c)g.bbcode=c;this.onTagOpen(e,g,CKEDITOR.dtd.$empty[e])}else if(b[3])this.onTagClose(j[c])}if(a.length>i)this.onText(a.substring(i,a.length),1)}};CKEDITOR.htmlParser.fragment.fromBBCode=function(a){function b(a){if(0<h.length)for(var e=0;e<h.length;e++){var b=h[e],c=b.name,g=CKEDITOR.dtd[c],f=d.name&&CKEDITOR.dtd[d.name];if((!f||f[c])&&(!a||!g||g[a]||!CKEDITOR.dtd[a]))b=b.clone(),b.parent=d,d=b,h.splice(e,1),e--}}function c(e,a){var b=d.children.length, -c=0<b&&d.children[b-1],b=!c&&s.getRule(k[d.name],"breakAfterOpen"),c=c&&c.type==CKEDITOR.NODE_ELEMENT&&s.getRule(k[c.name],"breakAfterClose"),g=e&&s.getRule(k[e],a?"breakBeforeClose":"breakBeforeOpen");f&&(b||c||g)&&f--;f&&e in x&&f++;for(;f&&f--;)d.children.push(new CKEDITOR.htmlParser.element("br"))}function i(e,a){c(e.name,1);var a=a||d||g,b=a.children.length;e.previous=0<b&&a.children[b-1]||null;e.parent=a;a.children.push(e);e.returnPoint&&(d=e.returnPoint,delete e.returnPoint)}var e=new CKEDITOR.BBCodeParser, -g=new CKEDITOR.htmlParser.fragment,h=[],f=0,d=g,r;e.onTagOpen=function(a,g,f){var l=new CKEDITOR.htmlParser.element(a,g);if(CKEDITOR.dtd.$removeEmpty[a])h.push(l);else{var t=d.name,n=t&&(CKEDITOR.dtd[t]||(d._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span));if(n&&!n[a]){var n=!1,j;a==t?i(d,d.parent):(a in CKEDITOR.dtd.$listItem?(e.onTagOpen("ul",{}),j=d):(i(d,d.parent),h.unshift(d)),n=!0);d=j?j:d.returnPoint||d.parent;if(n){e.onTagOpen.apply(this,arguments);return}}b(a);c(a);l.parent=d;l.returnPoint= -r;r=0;l.isEmpty?i(l):d=l}};e.onTagClose=function(a){for(var e=h.length-1;0<=e;e--)if(a==h[e].name){h.splice(e,1);return}for(var b=[],c=[],g=d;g.type&&g.name!=a;)g._.isBlockLike||c.unshift(g),b.push(g),g=g.parent;if(g.type){for(e=0;e<b.length;e++)a=b[e],i(a,a.parent);d=g;i(g,g.parent);g==d&&(d=d.parent);h=h.concat(c)}};e.onText=function(a){var e=CKEDITOR.dtd[d.name];if(!e||e["#"])c(),b(),a.replace(/(\r\n|[\r\n])|[^\r\n]*/g,function(a,e){if(void 0!==e&&e.length)f++;else if(a.length){var b=0;a.replace(p, -function(e,c){i(new CKEDITOR.htmlParser.text(a.substring(b,c)),d);i(new CKEDITOR.htmlParser.element("smiley",{desc:y[e]}),d);b=c+e.length});b!=a.length&&i(new CKEDITOR.htmlParser.text(a.substring(b,a.length)),d)}})};for(e.parse(CKEDITOR.tools.htmlEncode(a));d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT;)a=d.parent,i(d,a),d=a;return g};var s=new (CKEDITOR.tools.createClass({$:function(){this._={output:[],rules:[]};this.setRules("list",{breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:1,breakAfterClose:1}); -this.setRules("*",{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:1,breakAfterClose:0});this.setRules("quote",{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:0,breakAfterClose:1})},proto:{setRules:function(a,b){var c=this._.rules[a];c?CKEDITOR.tools.extend(c,b,!0):this._.rules[a]=b},getRule:function(a,b){return this._.rules[a]&&this._.rules[a][b]},openTag:function(a){a in j&&(this.getRule(a,"breakBeforeOpen")&&this.lineBreak(1),this.write("[",a))},openTagClose:function(a){"br"==a?this._.output.push("\n"): -a in j&&(this.write("]"),this.getRule(a,"breakAfterOpen")&&this.lineBreak(1))},attribute:function(a,b){"option"==a&&("string"==typeof b&&(b=b.replace(/&amp;/g,"&")),this.write("=",b))},closeTag:function(a){a in j&&(this.getRule(a,"breakBeforeClose")&&this.lineBreak(1),"*"!=a&&this.write("[/",a,"]"),this.getRule(a,"breakAfterClose")&&this.lineBreak(1))},text:function(a){this.write(a)},comment:function(){},lineBreak:function(){!this._.hasLineBreak&&this._.output.length&&(this.write("\n"),this._.hasLineBreak= -1)},write:function(){this._.hasLineBreak=0;this._.output.push(Array.prototype.join.call(arguments,""))},reset:function(){this._.output=[];this._.hasLineBreak=0},getHtml:function(a){var b=this._.output.join("");a&&this.reset();return A(b)}}}));CKEDITOR.plugins.add("bbcode",{requires:"entities",beforeInit:function(a){CKEDITOR.tools.extend(a.config,{enterMode:CKEDITOR.ENTER_BR,basicEntities:!1,entities:!1,fillEmptyBlocks:!1},!0);a.filter.disable();a.activeEnterMode=a.enterMode=CKEDITOR.ENTER_BR},init:function(a){function b(a){var b= -a.data,a=CKEDITOR.htmlParser.fragment.fromBBCode(a.data.dataValue),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,i);a=c.getHtml(!0);b.dataValue=a}var c=a.config,i=new CKEDITOR.htmlParser.filter;i.addRules({elements:{blockquote:function(a){var b=new CKEDITOR.htmlParser.element("div");b.children=a.children;a.children=[b];if(b=a.attributes.cite){var c=new CKEDITOR.htmlParser.element("cite");c.add(new CKEDITOR.htmlParser.text(b.replace(/^"|"$/g,"")));delete a.attributes.cite;a.children.unshift(c)}}, -span:function(a){var b;if(b=a.attributes.bbcode)"img"==b?(a.name="img",a.attributes.src=a.children[0].value,a.children=[]):"email"==b&&(a.name="a",a.attributes.href="mailto:"+a.children[0].value),delete a.attributes.bbcode},ol:function(a){a.attributes.listType?"decimal"!=a.attributes.listType&&(a.attributes.style="list-style-type:"+a.attributes.listType):a.name="ul";delete a.attributes.listType},a:function(a){a.attributes.href||(a.attributes.href=a.children[0].value)},smiley:function(a){a.name="img"; -var b=a.attributes.desc,h=c.smiley_images[CKEDITOR.tools.indexOf(c.smiley_descriptions,b)],h=CKEDITOR.tools.htmlEncode(c.smiley_path+h);a.attributes={src:h,"data-cke-saved-src":h,title:b,alt:b}}}});a.dataProcessor.htmlFilter.addRules({elements:{$:function(b){var c=b.attributes,h=CKEDITOR.tools.parseCssText(c.style,1),f,d=b.name;if(d in u)d=u[d];else if("span"==d)if(f=h.color)d="color",f=CKEDITOR.tools.convertRgbToHex(f);else{if(f=h["font-size"])if(c=f.match(/(\d+)%$/))f=c[1],d="size"}else if("ol"== -d||"ul"==d){if(f=h["list-style-type"])switch(f){case "lower-alpha":f="a";break;case "upper-alpha":f="A"}else"ol"==d&&(f=1);d="list"}else if("blockquote"==d){try{var i=b.children[0],j=b.children[1],k="cite"==i.name&&i.children[0].value;k&&(f='"'+k+'"',b.children=j.children)}catch(m){}d="quote"}else if("a"==d){if(f=c.href)-1!==f.indexOf("mailto:")?(d="email",b.children=[new CKEDITOR.htmlParser.text(f.replace("mailto:",""))],f=""):((d=1==b.children.length&&b.children[0])&&(d.type==CKEDITOR.NODE_TEXT&& -d.value==f)&&(f=""),d="url")}else if("img"==d){b.isEmpty=0;h=c["data-cke-saved-src"]||c.src;c=c.alt;if(h&&-1!=h.indexOf(a.config.smiley_path)&&c)return new CKEDITOR.htmlParser.text(o[c]);b.children=[new CKEDITOR.htmlParser.text(h)]}b.name=d;f&&(b.attributes.option=f);return null},br:function(a){if((a=a.next)&&a.name in x)return!1}}},1);a.dataProcessor.writer=s;if(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE)a.once("contentDom",function(){a.on("setData",b)});else a.on("setData",b)},afterInit:function(a){var b; -a._.elementsPath&&(b=a._.elementsPath.filters)&&b.push(function(b){var i=b.getName(),e=k[i]||!1;"link"==e&&0===b.getAttribute("href").indexOf("mailto:")?e="email":"span"==i?b.getStyle("font-size")?e="size":b.getStyle("color")&&(e="color"):"img"==e&&(b=b.data("cke-saved-src")||b.getAttribute("src"))&&0===b.indexOf(a.config.smiley_path)&&(e="smiley");return e})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png deleted file mode 100644 index a909c0103b4bbf439f65374a29a46fbfaf2a1f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ila!~6V~EA+*2(+*q#Xs?_ut(sFjwGN3YW$sAt|my+yNJYFE8<& zZQj5p*T~)xw4}f}PJuOu%PLCifQQ?$O(KmoR<FPPd+W!wN!(*j%97kN)BQisns3fB zkod4Z!0YT@aY2Sf`&Bd78XimN`T6*+WqUE-`@c1eYfZbmyGwS*Zn;*>Dkm?0^0SQX z`dx-?dE2`UpG^&VwKwRMlcwrJmq3-de(Y;aCkCzBs-sl#{$f=7srP1PW_G!Gc}YDF zzkJzp=kDEF+qr&)=M<G(qOu=ZsP!eUT6HMux6GaPxpQS#txB?yV^&#w@kCr~?9|C8 zS)R+>l5n1+Qerjt@zklJ)22_4F38T#zF1<VdcJtoDkhDz&5{m5(^Qq3!n`(a*wA43 z%tNzu&z3DNGRL1(p8NOj-_r~eCEwsvn{pVVvb!H_YTdDS@7Y(cUQG;oWzm<sN$2sC zCr@tQyLa#U?AfzVoA^dECi_^=4O2L6RJB)bZ`^y|*y|#$j30h}`0(NM+qY}0D=HWk zWJ+zhw&jCs%dT}h_wP@yt^NDv-Me?yvzA#r-?4Asy7t2lkMCM{KP{3?AYzMP<@=du z({gfi=YIYDxBFv7jleJ7$08FSaAfN$eafCXw>Ty8*w3Foj}}<i6r9@|vFiCr#Wh<i z-p^mApk(5EIKjXoV^-R`Tgx)LI;H@FLQvDWTVH`qV}JX1I}49GKPAmBruTn?@BQCb zEWpWm{wBj8hP-^!M_hY;Rs)lcYKdz^NlIc#s#S7PDv)9@GB7mOH89sTFbOd<w=ysW zB5eaBD+2@HCA)#i3Q0q5eoAIqC2kEiKbemJHAsSN2+mI{DNig)WhgH%*UQYyE>2D? ZNY%?PN}v7CMhd8i!PC{xWt~$(69BAIPS*ec diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png deleted file mode 100644 index 7dbad48c123532de7d3ce1883187581cd5cfa3ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilccAMV~EA+(%{{BQjQ|F<?kF+k}q(HFXLExcZb3s2G+gV=9!nC z@xM9tkEPyWic+ieCuU8Zr3LP<yQZ@=i3X))hj*8KGd0#cq!Xd$J}c|lJj>_ziZiX| z9%}3;;J6m`hksIsLJNa&^UV9U7owcAd6UmLDrvSjtPOMCe6vO1k;1{(ueBdpv|amk zcW*+P$!uSP;?|CR0v9KAtg#OAx}9OdH)%T8w(0ZFpFh7pJ|?DNrlADSrMmt96*-zd zrKeBt@bWI|f0Moby7RQu54G|Pd!81pbXy#_D{lS5t!-0;+}+(*gsl$na@1sfD0Mk& zYl;9%$76}eX^ak=Zssr?IK7GI4A1$`1w}<oZi@?_SIW(hbjt44=qe~J{kkVcPq0n# zl8LVLiYZ<*B#$3IzT*08g+<nB`__i7{;!j{7AX7f{rmd(xVV3_eALb-N=#!3@(R(K zy6MN4FJHFZe*11&LXYDl6^0LwpFMl_Jjd*^zP>&~!y*j_mkrkzX>e`1{kH#YnRKAY zTaK7t#~v5j%|E~YY309@wl}^p`8`eA_@lV2?Awm0wG*COuGuQU@W4&8rD5we&88r( zYf%!(3#K%^|9zdGpZ~Dm^3OYN<^Zjl$)|o*)LLU{LQmsntNG{G&!0E1El|WUyVv|< zQPA40FRS*pZ8hUP{K2=Sd(nXstG#+%N$Cd@*Dt(RCKNYG#o*YUn>YThUHZ4QOyxIg zb)bF6{;3;XHh$CVUja-xswJ)wB`Jv|saDBFsX&Us$iUE8*T7uYz$C=b+{(Zhh_nri ztPBi%m+S_nDkKfL`6-!cmAEz7{A4}?)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8F VD1G)j8!4b722WQ%mvv4FO#okUNGAXQ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png deleted file mode 100644 index c5998e007764ea631a643dd033e239273fa5afda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1579 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png deleted file mode 100644 index 8aa2adc87009f5751a5e799743dd8784948de156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1596 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/af.js deleted file mode 100644 index 0b9a692a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","af",{ltr:"Skryfrigting van links na regs",rtl:"Skryfrigting van regs na links"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ar.js deleted file mode 100644 index a776f798..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ar",{ltr:"إتجاه النص من اليسار إلى اليمين",rtl:"إتجاه النص من اليمين إلى اليسار"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bg.js deleted file mode 100644 index cd775f89..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bg",{ltr:"Посока на текста от ляво на дясно",rtl:"Посока на текста от дясно на ляво"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bn.js deleted file mode 100644 index 34ef7460..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bn",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bs.js deleted file mode 100644 index 849f6f41..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bs",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ca.js deleted file mode 100644 index 10076e23..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ca",{ltr:"Direcció del text d'esquerra a dreta",rtl:"Direcció del text de dreta a esquerra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cs.js deleted file mode 100644 index fa4a0f89..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","cs",{ltr:"Směr textu zleva doprava",rtl:"Směr textu zprava doleva"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cy.js deleted file mode 100644 index 76b10960..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","cy",{ltr:"Cyfeiriad testun o'r chwith i'r dde",rtl:"Cyfeiriad testun o'r dde i'r chwith"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/da.js deleted file mode 100644 index 9474fffb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","da",{ltr:"Tekstretning fra venstre til højre",rtl:"Tekstretning fra højre til venstre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/de.js deleted file mode 100644 index 5193d805..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","de",{ltr:"Leserichtung von Links nach Rechts",rtl:"Leserichtung von Rechts nach Links"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/el.js deleted file mode 100644 index 73f7703f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","el",{ltr:"Διεύθυνση κειμένου από αριστερά στα δεξιά",rtl:"Διεύθυνση κειμένου από δεξιά στα αριστερά"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-au.js deleted file mode 100644 index 5939f82d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-au",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-ca.js deleted file mode 100644 index 78827e3a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-ca",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-gb.js deleted file mode 100644 index 3dd38210..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-gb",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en.js deleted file mode 100644 index f9aed2a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eo.js deleted file mode 100644 index 30e93b1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","eo",{ltr:"Tekstdirekto de maldekstre dekstren",rtl:"Tekstdirekto de dekstre maldekstren"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/es.js deleted file mode 100644 index 7321b290..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","es",{ltr:"Dirección del texto de izquierda a derecha",rtl:"Dirección del texto de derecha a izquierda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/et.js deleted file mode 100644 index cd499548..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","et",{ltr:"Teksti suund vasakult paremale",rtl:"Teksti suund paremalt vasakule"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eu.js deleted file mode 100644 index 0fbdda3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","eu",{ltr:"Testuaren norantza ezkerretik eskuinera",rtl:"Testuaren norantza eskuinetik ezkerrera"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fa.js deleted file mode 100644 index a625ce95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fa",{ltr:"جهت متن از چپ به راست",rtl:"جهت متن از راست به چپ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fi.js deleted file mode 100644 index d6501bf9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fi",{ltr:"Tekstin suunta vasemmalta oikealle",rtl:"Tekstin suunta oikealta vasemmalle"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fo.js deleted file mode 100644 index 9f936505..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fo",{ltr:"Tekstkós frá vinstru til høgru",rtl:"Tekstkós frá høgru til vinstru"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js deleted file mode 100644 index 0f92cc73..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fr-ca",{ltr:"Direction du texte de gauche à droite",rtl:"Direction du texte de droite à gauche"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr.js deleted file mode 100644 index f3904683..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fr",{ltr:"Direction du texte de la gauche vers la droite",rtl:"Direction du texte de la droite vers la gauche"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gl.js deleted file mode 100644 index 8c33c966..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","gl",{ltr:"Dirección do texto de esquerda a dereita",rtl:"Dirección do texto de dereita a esquerda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gu.js deleted file mode 100644 index 69fb4ebe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","gu",{ltr:"ટેક્ષ્ત્ ની દિશા ડાબે થી જમણે",rtl:"ટેક્ષ્ત્ ની દિશા જમણે થી ડાબે"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/he.js deleted file mode 100644 index 5f35dbca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","he",{ltr:"כיוון טקסט משמאל לימין (LTR)",rtl:"כיוון טקסט מימין לשמאל (RTL)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hi.js deleted file mode 100644 index 1a56a676..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hi",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hr.js deleted file mode 100644 index e53b4d9e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hr",{ltr:"Smjer teksta s lijeva na desno",rtl:"Smjer teksta s desna na lijevo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hu.js deleted file mode 100644 index 2edc7818..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hu",{ltr:"Szöveg iránya balról jobbra",rtl:"Szöveg iránya jobbról balra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/id.js deleted file mode 100644 index a614b243..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","id",{ltr:"Arah penulisan dari kiri ke kanan.",rtl:"Arah penulisan dari kanan ke kiri."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/is.js deleted file mode 100644 index 9bee7c82..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","is",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/it.js deleted file mode 100644 index c9fc54bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","it",{ltr:"Direzione del testo da sinistra verso destra",rtl:"Direzione del testo da destra verso sinistra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ja.js deleted file mode 100644 index 53ac0ee1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ja",{ltr:"テキストの向き : 左から右へ",rtl:"テキストの向き : 右から左へ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ka.js deleted file mode 100644 index fb14539f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ka",{ltr:"ტექსტის მიმართულება მარცხნიდან მარჯვნივ",rtl:"ტექსტის მიმართულება მარჯვნიდან მარცხნივ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/km.js deleted file mode 100644 index fec2b242..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","km",{ltr:"ទិស​ដៅ​អក្សរ​ពី​ឆ្វេង​ទៅ​ស្ដាំ",rtl:"ទិស​ដៅ​អក្សរ​ពី​ស្ដាំ​ទៅ​ឆ្វេង"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ko.js deleted file mode 100644 index 50ad8a12..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ko",{ltr:"택스트 방향이 왼쪽에서 오른쪽으로 ",rtl:"택스트 방향이 오른쪽에서 왼쪽으로"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ku.js deleted file mode 100644 index 9b668f05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ku",{ltr:"ئاراستەی نووسە لە چەپ بۆ ڕاست",rtl:"ئاراستەی نووسە لە ڕاست بۆ چەپ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lt.js deleted file mode 100644 index d809fc02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","lt",{ltr:"Tekstas iš kairės į dešinę",rtl:"Tekstas iš dešinės į kairę"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lv.js deleted file mode 100644 index 014b9cfd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","lv",{ltr:"Teksta virziens no kreisās uz labo",rtl:"Teksta virziens no labās uz kreiso"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mk.js deleted file mode 100644 index 8bf3d73a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","mk",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mn.js deleted file mode 100644 index d7f6ba9d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","mn",{ltr:"Зүүнээс баруун тийш бичлэг",rtl:"Баруунаас зүүн тийш бичлэг"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ms.js deleted file mode 100644 index 09c685d7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ms",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nb.js deleted file mode 100644 index 05d502ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","nb",{ltr:"Tekstretning fra venstre til høyre",rtl:"Tekstretning fra høyre til venstre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nl.js deleted file mode 100644 index c7babcff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","nl",{ltr:"Schrijfrichting van links naar rechts",rtl:"Schrijfrichting van rechts naar links"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/no.js deleted file mode 100644 index e956963b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","no",{ltr:"Tekstretning fra venstre til høyre",rtl:"Tekstretning fra høyre til venstre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pl.js deleted file mode 100644 index bcee3e0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pl",{ltr:"Kierunek tekstu od lewej strony do prawej",rtl:"Kierunek tekstu od prawej strony do lewej"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt-br.js deleted file mode 100644 index e62c4ca7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pt-br",{ltr:"Direção do texto da esquerda para a direita",rtl:"Direção do texto da direita para a esquerda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt.js deleted file mode 100644 index 293ba251..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pt",{ltr:"Direção do texto da esquerda para a direita",rtl:"Direção do texto da direita para a esquerda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ro.js deleted file mode 100644 index 028d40c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ro",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ru.js deleted file mode 100644 index 033c0008..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ru",{ltr:"Направление текста слева направо",rtl:"Направление текста справа налево"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/si.js deleted file mode 100644 index 466e72fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","si",{ltr:"වගන්ති දිශාව වමේ සිට දකුණට",rtl:"වගන්ති දිශාව දකුණේ සිට වමට"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sk.js deleted file mode 100644 index 26150c48..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sk",{ltr:"Smer textu zľava doprava",rtl:"Smer textu sprava doľava"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sl.js deleted file mode 100644 index ae184de2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sl",{ltr:"Smer besedila od leve proti desni",rtl:"Smer besedila od desne proti levi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sq.js deleted file mode 100644 index 8ae3bb3f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sq",{ltr:"Drejtimi i tekstit nga e majta në të djathtë",rtl:"Drejtimi i tekstit nga e djathta në të majtë"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js deleted file mode 100644 index 04f04fc2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sr-latn",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr.js deleted file mode 100644 index 56efd86a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sr",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sv.js deleted file mode 100644 index b5eb279f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sv",{ltr:"Text riktning från vänster till höger",rtl:"Text riktning från höger till vänster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/th.js deleted file mode 100644 index 82de00f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","th",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tr.js deleted file mode 100644 index 74fc6641..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","tr",{ltr:"Metin yönü soldan sağa",rtl:"Metin yönü sağdan sola"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tt.js deleted file mode 100644 index f6fea6a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","tt",{ltr:"Сулдан уңга язылыш",rtl:"Уңнан сулга язылыш"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ug.js deleted file mode 100644 index 2ad6f067..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ug",{ltr:"تېكىست يۆنىلىشى سولدىن ئوڭغا",rtl:"تېكىست يۆنىلىشى ئوڭدىن سولغا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/uk.js deleted file mode 100644 index aaa68d7e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","uk",{ltr:"Напрямок тексту зліва направо",rtl:"Напрямок тексту справа наліво"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/vi.js deleted file mode 100644 index ceefbdd9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","vi",{ltr:"Văn bản hướng từ trái sang phải",rtl:"Văn bản hướng từ phải sang trái"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js deleted file mode 100644 index 7eae5cfb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","zh-cn",{ltr:"文字方向为从左至右",rtl:"文字方向为从右至左"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh.js deleted file mode 100644 index e978e3e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","zh",{ltr:"文字方向從左至右",rtl:"文字方向從右至左"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/bidi/plugin.js deleted file mode 100644 index 1eb15a05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/bidi/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function n(a,f,d,b){if(!a.isReadOnly()&&!a.equals(d.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);for(var b=a,c=d.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b="useComputedState"in d.config?d.config.useComputedState:1;if((b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f)a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&& -a.setAttribute("dir",f)):a.setAttribute("dir",f),d.forceNextSelectionCheck()}}function r(a,f,d){var b=a.getCommonAncestor(!1,!0),a=a.clone();a.enlarge(d==CKEDITOR.ENTER_BR?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(a.checkBoundaryOfElement(b,CKEDITOR.START)&&a.checkBoundaryOfElement(b,CKEDITOR.END)){for(var c;b&&b.type==CKEDITOR.NODE_ELEMENT&&(c=b.getParent())&&1==c.getChildCount()&&!(b.getName()in f);)b=c;return b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in f&&b}}function m(a){return{context:"p", -allowedContent:{"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td":{propertiesOnly:!0,attributes:"dir"}},requiredContent:"p[dir]",refresh:function(a,d){var b=a.config.useComputedState,c,b=void 0===b||b;if(!b){c=d.lastElement;for(var h=a.editable();c&&!(c.getName()in q||c.equals(h));){var e=c.getParent();if(!e)break;c=e}}c=c||d.block||d.blockLimit;c.equals(a.editable())&&(h=a.getSelection().getRanges()[0].getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(c=h);c&&(b=b?c.getComputedStyle("direction"): -c.getStyle("direction")||c.getAttribute("dir"),a.getCommand("bidirtl").setState("rtl"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),a.getCommand("bidiltr").setState("ltr"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF));b=(d.block||d.blockLimit||a.editable()).getDirection(1);if(b!=(a._.selDir||a.lang.dir))a._.selDir=b,a.fire("contentDirChanged",b)},exec:function(f){var d=f.getSelection(),b=f.config.enterMode,c=d.getRanges();if(c&&c.length){for(var h={},e=d.createBookmarks(),c=c.createIterator(),g, -j=0;g=c.getNextRange(1);){var i=g.getEnclosedNode();if(!i||i&&!(i.type==CKEDITOR.NODE_ELEMENT&&i.getName()in o))i=r(g,p,b);i&&n(i,a,f,h);var k=new CKEDITOR.dom.walker(g),l=e[j].startNode,m=e[j++].endNode;k.evaluator=function(a){return!!(a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in p&&!(a.getName()==(b==CKEDITOR.ENTER_P?"p":"div")&&a.getParent().type==CKEDITOR.NODE_ELEMENT&&"blockquote"==a.getParent().getName())&&a.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&(a.getPosition(m)&CKEDITOR.POSITION_PRECEDING+ -CKEDITOR.POSITION_CONTAINS)==CKEDITOR.POSITION_PRECEDING)};for(;i=k.next();)n(i,a,f,h);g=g.createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;i=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)n(i,a,f,h)}CKEDITOR.dom.element.clearAllMarkers(h);f.forceNextSelectionCheck();d.selectBookmarks(e);f.focus()}}}}function s(a){var f=a==j.setAttribute,d=a==j.removeAttribute,b=/\bdirection\s*:\s*(.*?)\s*(:?$|;)/;return function(c,h){if(!this.isReadOnly()){var e;if(e=c==(f||d?"dir":"direction")||"style"== -c&&(d||b.test(h))){a:{e=this;for(var g=e.getDocument().getBody().getParent();e;){if(e.equals(g)){e=!1;break a}e=e.getParent()}e=!0}e=!e}if(e&&(e=this.getDirection(1),g=a.apply(this,arguments),e!=this.getDirection(1)))return this.getDocument().fire("dirChanged",this),g}return a.apply(this,arguments)}}var p={table:1,ul:1,ol:1,blockquote:1,div:1},o={},q={};CKEDITOR.tools.extend(o,p,{tr:1,p:1,div:1,li:1});CKEDITOR.tools.extend(q,o,{td:1});CKEDITOR.plugins.add("bidi",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn", -icons:"bidiltr,bidirtl",hidpi:!0,init:function(a){function f(b,c,d,e,f){a.addCommand(d,new CKEDITOR.command(a,e));a.ui.addButton&&a.ui.addButton(b,{label:c,command:d,toolbar:"bidi,"+f})}if(!a.blockless){var d=a.lang.bidi;f("BidiLtr",d.ltr,"bidiltr",m("ltr"),10);f("BidiRtl",d.rtl,"bidirtl",m("rtl"),20);a.on("contentDom",function(){a.document.on("dirChanged",function(b){a.fire("dirChanged",{node:b.data,dir:b.data.getDirection(1)})})});a.on("contentDirChanged",function(b){var b=(a.lang.dir!=b.data?"add": -"remove")+"Class",c=a.ui.space(a.config.toolbarLocation);if(c)c[b]("cke_mixed_dir_content")})}}});for(var j=CKEDITOR.dom.element.prototype,l=["setStyle","removeStyle","setAttribute","removeAttribute"],k=0;k<l.length;k++)j[l[k]]=CKEDITOR.tools.override(j[l[k]],s)})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js b/platforms/android/assets/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js deleted file mode 100644 index fd793e94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); -b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+e.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+e.pasteMsg+"</div>"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(), -b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(h,a)+",this);<\/script></body></html>",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie? -"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'" role="region" aria-label="'+e.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'" aria-multiple="true"></iframe>');d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody()); -CKEDITOR.env.air&&h.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");a.append(d);if(CKEDITOR.env.ie){var g=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');g.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(g);this.focus=function(){g.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height", -d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",d)},0)}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js deleted file mode 100644 index d048dece..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("codeSnippet",function(c){var b=c._.codesnippet.langs,d=c.lang.codesnippet,g=document.documentElement.clientHeight,e=[],f;e.push([c.lang.common.notSet,""]);for(f in b)e.push([b[f],f]);b=CKEDITOR.document.getWindow().getViewPaneSize();c=Math.min(b.width-70,800);b=b.height/1.5;650>g&&(b=g-220);return{title:d.title,minHeight:200,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"info",elements:[{id:"lang",type:"select",label:d.language,items:e,setup:function(a){a.ready&& -a.data.lang&&this.setValue(a.data.lang);if(CKEDITOR.env.gecko&&(!a.data.lang||!a.ready))this.getInputElement().$.selectedIndex=-1},commit:function(a){a.setData("lang",this.getValue())}},{id:"code",type:"textarea",label:d.codeContents,setup:function(a){this.setValue(a.data.code)},commit:function(a){a.setData("code",this.getValue())},required:!0,validate:CKEDITOR.dialog.validate.notEmpty(d.emptySnippetError),inputStyle:"cursor:auto;width:"+c+"px;height:"+b+"px;tab-size:4;text-align:left;","class":"cke_source"}]}]}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png deleted file mode 100644 index 187d188019c74ddff755068f64bfe8f2a95ff467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW1gprV~EA+sgn+NNjVC%?T;!FJhnjmq~j#P)OAiB3PPMuo*B2) z`tk3a#m-^rdLvP>LUOU3(9+Asm+SegU+>zjW*r^y$2G8|HuUPVy~i!vRa6qwwwkmw z6!S57R!wUYVAygqXUB?3HtzYF40>mH7>o~}332y-^`4_@@4Z6)|DP@T`c)>q<M4~G zJ#}8_%1gb@MH=UXue`0Zkm>t6sp8{=1?xPOPH$RXUNCvvw3)RlAGOZh%d+NX&b>c; zo+Z0u=Ndl{{h;eP$$rv{@4qcSh`yL}p}TCi?t_Kj8(+UHiSqar+50owXy%jyq5|^k zH{8vW&#keMtC!$wUmv}8+S%uy{TaHCJ~HZ3lJ0f;m}6GWzF?CM<CDGY0i{}=v)+EM z7C&Cd_-DnerOgKyl$`rJ?Tege)cWflLDN#dmu!tv%$)Q5=eEl)pIlwB^Lw50%iLMZ zB4#c7ZxhVXD8S@7NyRm==HA<~e5u}JT3w6!Pe1*%d*(;+`CB`dmh6?50Y-;viEBhj zN@7W>RdP`(kYX@0Ff`FMFxE9P4>2^fGBLI?vD7v&v@$S|3;Op8MMG|WN@iLmZVmbT zZec(Tk{}y`^V3So6N^$A%FE03GV`*FlM@S4_413-XTP(N0xDwgboFyt=akR{0I06@ A761SM diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png deleted file mode 100644 index 7f0c881062ab87f50d3c60c19bc309ce9b09796c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 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 ZaAhuUa%Y?FJQ@H1002ovPDHLkV1luDj1T|- diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/bg.js deleted file mode 100644 index dc085f71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","bg",{button:"Въведете кода",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ca.js deleted file mode 100644 index ab704ea8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ca",{button:"Insereix el fragment de codi",codeContents:"Contingut del codi",emptySnippetError:"El fragment de codi no pot estar buit.",language:"Idioma",title:"Fragment de codi",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/cs.js deleted file mode 100644 index 97fe0e72..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","cs",{button:"Vložit úryvek kódu",codeContents:"Obsah kódu",emptySnippetError:"Úryvek kódu nemůže být prázdný.",language:"Jazyk",title:"Úryvek kódu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/da.js deleted file mode 100644 index e1538238..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","da",{button:"Indsæt koden her",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/de.js deleted file mode 100644 index 5f1d815a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","de",{button:"Codeschnipsel einfügen",codeContents:"Codeinhalt",emptySnippetError:"Ein Codeschnipsel kann nicht leer sein.",language:"Sprache",title:"Codeschnipsel",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/el.js deleted file mode 100644 index 7ba1ed59..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","el",{button:"Εισαγωγή τμήματος κώδικα",codeContents:"Περιεχόμενο κώδικα",emptySnippetError:"Δεν γίνεται να είναι κενά τα αποσπάσματα κώδικα.",language:"Γλώσσα",title:"Απόσπασμα κώδικα",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js deleted file mode 100644 index 93940cea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","en-gb",{button:"Insert Code Snippet",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en.js deleted file mode 100644 index 6b018c0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","en",{button:"Insert Code Snippet",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/eo.js deleted file mode 100644 index 080142b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","eo",{button:"Enmeti kodaĵeron",codeContents:"Kodenhavo",emptySnippetError:"Kodaĵero ne povas esti malplena.",language:"Lingvo",title:"Kodaĵero",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/es.js deleted file mode 100644 index 375782a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","es",{button:"Insertar fragmento de código",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/et.js deleted file mode 100644 index 805647fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","et",{button:"Koodilõigu sisestamine",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fa.js deleted file mode 100644 index 51ee08a1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fa",{button:"قرار دادن کد قطعه",codeContents:"محتوای کد",emptySnippetError:"کد نمی تواند خالی باشد.",language:"زبان",title:"کد قطعه",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fi.js deleted file mode 100644 index c9647d4e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fi",{button:"Lisää koodileike",codeContents:"Koodisisältö",emptySnippetError:"Koodileike ei voi olla tyhjä.",language:"Kieli",title:"Koodileike",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js deleted file mode 100644 index d938e73b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fr-ca",{button:"Insérer du code",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr.js deleted file mode 100644 index 3220c4f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fr",{button:"Insérer un extrait de code",codeContents:"Contenu du code",emptySnippetError:"Un extrait de code ne peut pas être vide",language:"Langue",title:"Extrait de code",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/he.js deleted file mode 100644 index 6bbe1824..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","he",{button:"הכנס קטע קוד",codeContents:"תוכן קוד",emptySnippetError:"קטע קוד לא יכול להיות ריק.",language:"שפה",title:"קטע קוד",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hr.js deleted file mode 100644 index 53fd25ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","hr",{button:"Ubaci isječak kôda",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hu.js deleted file mode 100644 index 24840f5e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","hu",{button:"Illeszd be a kódtöredéket",codeContents:"Kód tartalom",emptySnippetError:"A kódtöredék nem lehet üres.",language:"Nyelv",title:"Kódtöredék",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/it.js deleted file mode 100644 index 83f62d72..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","it",{button:"Inserisci frammento di codice",codeContents:"Contenuto del codice",emptySnippetError:"Un frammento di codice non può essere vuoto.",language:"Lingua",title:"Frammento di codice",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ja.js deleted file mode 100644 index 4f9e2a7c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ja",{button:"コードスニペットを挿入",codeContents:"コード内容",emptySnippetError:"コードスニペットを入力してください。",language:"言語",title:"コードスニペット",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/km.js deleted file mode 100644 index 253671d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","km",{button:"Insert code snippet",codeContents:"មាតិកាកូដ",emptySnippetError:"A code snippet cannot be empty.",language:"ភាសា",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ku.js deleted file mode 100644 index 6fd1f9af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ku",{button:"تیتکی کۆد دابنێ",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lt.js deleted file mode 100644 index dccd7423..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","lt",{button:"Įterpkite kodo gabaliuką",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lv.js deleted file mode 100644 index 2973418f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","lv",{button:"Ievietot koda fragmentu",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nb.js deleted file mode 100644 index 43af1293..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","nb",{button:"Sett inn kodesnutt",codeContents:"Kodeinnhold",emptySnippetError:"En kodesnutt kan ikke være tom.",language:"Språk",title:"Kodesnutt",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nl.js deleted file mode 100644 index 8c26fe63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","nl",{button:"Stuk code invoegen",codeContents:"Code",emptySnippetError:"Een stuk code kan niet leeg zijn.",language:"Taal",title:"Stuk code",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/no.js deleted file mode 100644 index fb988ab3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","no",{button:"Sett inn kodesnutt",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pl.js deleted file mode 100644 index c512e1f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pl",{button:"Wstaw fragment kodu",codeContents:"Treść kodu",emptySnippetError:"Kod nie może być pusty.",language:"Język",title:"Fragment kodu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js deleted file mode 100644 index 7c9a9deb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pt-br",{button:"Inserir fragmento de código",codeContents:"Conteúdo do código",emptySnippetError:"Um fragmento de código não pode ser vazio",language:"Idioma",title:"Fragmento de código",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt.js deleted file mode 100644 index 6056c7c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pt",{button:"Inserir fragmento de código",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ro.js deleted file mode 100644 index 7c5e170d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ro.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ro",{button:"Adaugă segment de cod",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ru.js deleted file mode 100644 index 7494c5c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ru",{button:"Вставить сниппет",codeContents:"Содержимое кода",emptySnippetError:"Сниппет не может быть пустым",language:"Язык",title:"Сниппет",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sk.js deleted file mode 100644 index 29d7d00b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sk",{button:"Vložte kód Snippet-u",codeContents:"Obsah kódu",emptySnippetError:"Snippet kódu nesmie byť prázdny",language:"Jazyk",title:"Snippet kódu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sl.js deleted file mode 100644 index 8b5f5d83..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sl",{button:"Vstavi odsek kode",codeContents:"Koda vsebina",emptySnippetError:"Odrezek kode ne more biti prazen.",language:"Jezik",title:"Odrezek kode",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sq.js deleted file mode 100644 index 5a7a4d05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sq",{button:"Shto kod copëze",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sv.js deleted file mode 100644 index 07a1b71c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sv",{button:"Infoga kodsnutt",codeContents:"Kodinnehålll",emptySnippetError:"Innehåll krävs för kodsnutt",language:"Språk",title:"Kodsnutt",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/th.js deleted file mode 100644 index cb2f44d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","th",{button:"แทรกชิ้นส่วนของรหัสหรือโค้ด",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tr.js deleted file mode 100644 index c51b3d4b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","tr",{button:"Kod parçacığı ekle",codeContents:"Kod",emptySnippetError:"Kod parçacığı boş bırakılamaz",language:"Dil",title:"Kod parçacığı",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tt.js deleted file mode 100644 index 52e5d1b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","tt",{button:"Код өзеген өстәү",codeContents:"Код эчтәлеге",emptySnippetError:"Код өзеге буш булмаска тиеш",language:"Тел",title:"Код өзеге",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ug.js deleted file mode 100644 index 04c78194..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ug",{button:"كود پارچىسى قىستۇرۇش",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/uk.js deleted file mode 100644 index 6204ec1d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","uk",{button:"Вставити фрагмент коду",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/vi.js deleted file mode 100644 index 4a042960..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","vi",{button:"Chèn đoạn mã",codeContents:"Nội dung mã",emptySnippetError:"Một đoạn mã không thể để trống.",language:"Ngôn ngữ",title:"Đoạn mã",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js deleted file mode 100644 index f281b7df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","zh-cn",{button:"插入代码",codeContents:"Code content",emptySnippetError:"插入代码不能为空",language:"语言",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh.js deleted file mode 100644 index 18a149a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","zh",{button:"插入程式碼片段",codeContents:"程式碼內容",emptySnippetError:"程式碼片段不可為空白。",language:"語言",title:"程式碼片段",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md deleted file mode 100644 index 8c3fe322..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md +++ /dev/null @@ -1,827 +0,0 @@ -## Version 8.0 beta - -This new major release is quite a big overhaul bringing both new features and -some backwards incompatible changes. However, chances are that the majority of -users won't be affected by the latter: the basic scenario described in the -README is left intact. - -Here's what did change in an incompatible way: - -- We're now prefixing all classes located in [CSS classes reference][cr] with - `hljs-`, by default, because some class names would collide with other - people's stylesheets. If you were using an older version, you might still want - the previous behavior, but still want to upgrade. To suppress this new - behavior, you would initialize like so: - - ```html - <script type="text/javascript"> - hljs.configure({classPrefix: ''}); - hljs.initHighlightingOnLoad(); - </script> - ``` - -- `tabReplace` and `useBR` that were used in different places are also unified - into the global options object and are to be set using `configure(options)`. - This function is documented in our [API docs][]. Also note that these - parameters are gone from `highlightBlock` and `fixMarkup` which are now also - rely on `configure`. - -- We removed public-facing (though undocumented) object `hljs.LANGUAGES` which - was used to register languages with the library in favor of two new methods: - `registerLanguage` and `getLanguage`. Both are documented in our [API docs][]. - -- Result returned from `highlight` and `highlightAuto` no longer contains two - separate attributes contributing to relevance score, `relevance` and - `keyword_count`. They are now unified in `relevance`. - -Another technically compatible change that nonetheless might need attention: - -- The structure of the NPM package was refactored, so if you had installed it - locally, you'll have to update your paths. The usual `require('highlight.js')` - works as before. This is contributed by [Dmitry Smolin][]. - -New features: - -- Languages now can be recognized by multiple names like "js" for JavaScript or - "html" for, well, HTML (which earlier insisted on calling it "xml"). These - aliases can be specified in the class attribute of the code container in your - HTML as well as in various API calls. For now there are only a few very common - aliases but we'll expand it in the future. All of them are listed in the - [class reference][]. - -- Language detection can now be restricted to a subset of languages relevant in - a given context — a web page or even a single highlighting call. This is - especially useful for node.js build that includes all the known languages. - Another example is a StackOverflow-style site where users specify languages - as tags rather than in the markdown-formatted code snippets. This is - documented in the [API reference][] (see methods `highlightAuto` and - `configure`). - -- Language definition syntax streamlined with [variants][] and - [beginKeywords][]. - -New languages and styles: - -- *Oxygene* by [Carlo Kok][] -- *Mathematica* by [Daniel Kvasnička][] -- *Autohotkey* by [Seongwon Lee][] -- *Atelier* family of styles in 10 variants by [Bram de Haan][] -- *Paraíso* styles by [Jan T. Sott][] - -Miscelleanous improvements: - -- Highlighting `=>` prompts in Clojure. -- [Jeremy Hull][] fixed a lot of styles for consistency. -- Finally, highlighting PHP and HTML [mixed in peculiar ways][php-html]. -- Objective C and C# now properly highlight titles in method definition. -- Big overhaul of relevance counting for a number of languages. Please do report - bugs about mis-detection of non-trivial code snippets! - -[cr]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html -[api docs]: http://highlightjs.readthedocs.org/en/latest/api.html -[variants]: https://groups.google.com/d/topic/highlightjs/VoGC9-1p5vk/discussion -[beginKeywords]: https://github.com/isagalaev/highlight.js/commit/6c7fdea002eb3949577a85b3f7930137c7c3038d -[php-html]: https://twitter.com/highlightjs/status/408890903017689088 - -[Carlo Kok]: https://github.com/carlokok -[Bram de Haan]: https://github.com/atelierbram -[Daniel Kvasnička]: https://github.com/dkvasnicka -[Dmitry Smolin]: https://github.com/dimsmol -[Jeremy Hull]: https://github.com/sourrust -[Seongwon Lee]: https://github.com/dlimpid -[Jan T. Sott]: https://github.com/idleberg - - -## Version 7.5 - -A catch-up release dealing with some of the accumulated contributions. This one -is probably will be the last before the 8.0 which will be slightly backwards -incompatible regarding some advanced use-cases. - -One outstanding change in this version is the addition of 6 languages to the -[hosted script][d]: Markdown, ObjectiveC, CoffeeScript, Apache, Nginx and -Makefile. It now weighs about 6K more but we're going to keep it under 30K. - -New languages: - -- OCaml by [Mehdi Dogguy][mehdid] and [Nicolas Braud-Santoni][nbraud] -- [LiveCode Server][lcs] by [Ralf Bitter][revig] -- Scilab by [Sylvestre Ledru][sylvestre] -- basic support for Makefile by [Ivan Sagalaev][isagalaev] - -Improvements: - -- Ruby's got support for characters like `?A`, `?1`, `?\012` etc. and `%r{..}` - regexps. -- Clojure now allows a function call in the beginning of s-expressions - `(($filter "myCount") (arr 1 2 3 4 5))`. -- Haskell's got new keywords and now recognizes more things like pragmas, - preprocessors, modules, containers, FFIs etc. Thanks to [Zena Treep][treep] - for the implementation and to [Jeremy Hull][sourrust] for guiding it. -- Miscelleanous fixes in PHP, Brainfuck, SCSS, Asciidoc, CMake, Python and F#. - -[mehdid]: https://github.com/mehdid -[nbraud]: https://github.com/nbraud -[revig]: https://github.com/revig -[lcs]: http://livecode.com/developers/guides/server/ -[sylvestre]: https://github.com/sylvestre -[isagalaev]: https://github.com/isagalaev -[treep]: https://github.com/treep -[sourrust]: https://github.com/sourrust -[d]: http://highlightjs.org/download/ - - -## New core developers - -The latest long period of almost complete inactivity in the project coincided -with growing interest to it led to a decision that now seems completely obvious: -we need more core developers. - -So without further ado let me welcome to the core team two long-time -contributors: [Jeremy Hull][] and [Oleg -Efimov][]. - -Hope now we'll be able to work through stuff faster! - -P.S. The historical commit is [here][1] for the record. - -[Jeremy Hull]: https://github.com/sourrust -[Oleg Efimov]: https://github.com/sannis -[1]: https://github.com/isagalaev/highlight.js/commit/f3056941bda56d2b72276b97bc0dd5f230f2473f - - -## Version 7.4 - -This long overdue version is a snapshot of the current source tree with all the -changes that happened during the past year. Sorry for taking so long! - -Along with the changes in code highlight.js has finally got its new home at -<http://highlightjs.org/>, moving from its craddle on Software Maniacs which it -outgrew a long time ago. Be sure to report any bugs about the site to -<mailto:info@highlightjs.org>. - -On to what's new… - -New languages: - -- Handlebars templates by [Robin Ward][] -- Oracle Rules Language by [Jason Jacobson][] -- F# by [Joans Follesø][] -- AsciiDoc and Haml by [Dan Allen][] -- Lasso by [Eric Knibbe][] -- SCSS by [Kurt Emch][] -- VB.NET by [Poren Chiang][] -- Mizar by [Kelley van Evert][] - -[Robin Ward]: https://github.com/eviltrout -[Jason Jacobson]: https://github.com/jayce7 -[Joans Follesø]: https://github.com/follesoe -[Dan Allen]: https://github.com/mojavelinux -[Eric Knibbe]: https://github.com/EricFromCanada -[Kurt Emch]: https://github.com/kemch -[Poren Chiang]: https://github.com/rschiang -[Kelley van Evert]: https://github.com/kelleyvanevert - -New style themes: - -- Monokai Sublime by [noformnocontent][] -- Railscasts by [Damien White][] -- Obsidian by [Alexander Marenin][] -- Docco by [Simon Madine][] -- Mono Blue by [Ivan Sagalaev][] (uses a single color hue for everything) -- Foundation by [Dan Allen][] - -[noformnocontent]: http://nn.mit-license.org/ -[Damien White]: https://github.com/visoft -[Alexander Marenin]: https://github.com/ioncreature -[Simon Madine]: https://github.com/thingsinjars -[Ivan Sagalaev]: https://github.com/isagalaev - -Other notable changes: - -- Corrected many corner cases in CSS. -- Dropped Python 2 version of the build tool. -- Implemented building for the AMD format. -- Updated Rust keywords (thanks to [Dmitry Medvinsky][]). -- Literal regexes can now be used in language definitions. -- CoffeeScript highlighting is now significantly more robust and rich due to - input from [Cédric Néhémie][]. - -[Dmitry Medvinsky]: https://github.com/dmedvinsky -[Cédric Néhémie]: https://github.com/abe33 - - -## Version 7.3 - -- Since this version highlight.js no longer works in IE version 8 and older. - It's made it possible to reduce the library size and dramatically improve code - readability and made it easier to maintain. Time to go forward! - -- New languages: AppleScript (by [Nathan Grigg][ng] and [Dr. Drang][dd]) and - Brainfuck (by [Evgeny Stepanischev][bolk]). - -- Improvements to existing languages: - - - interpreter prompt in Python (`>>>` and `...`) - - @-properties and classes in CoffeeScript - - E4X in JavaScript (by [Oleg Efimov][oe]) - - new keywords in Perl (by [Kirk Kimmel][kk]) - - big Ruby syntax update (by [Vasily Polovnyov][vast]) - - small fixes in Bash - -- Also Oleg Efimov did a great job of moving all the docs for language and style - developers and contributors from the old wiki under the source code in the - "docs" directory. Now these docs are nicely presented at - <http://highlightjs.readthedocs.org/>. - -[ng]: https://github.com/nathan11g -[dd]: https://github.com/drdrang -[bolk]: https://github.com/bolknote -[oe]: https://github.com/Sannis -[kk]: https://github.com/kimmel -[vast]: https://github.com/vast - - -## Version 7.2 - -A regular bug-fix release without any significant new features. Enjoy! - - -## Version 7.1 - -A Summer crop: - -- [Marc Fornos][mf] made the definition for Clojure along with the matching - style Rainbow (which, of course, works for other languages too). -- CoffeeScript support continues to improve getting support for regular - expressions. -- Yoshihide Jimbo ported to highlight.js [five Tomorrow styles][tm] from the - [project by Chris Kempson][tm0]. -- Thanks to [Casey Duncun][cd] the library can now be built in the popular - [AMD format][amd]. -- And last but not least, we've got a fair number of correctness and consistency - fixes, including a pretty significant refactoring of Ruby. - -[mf]: https://github.com/mfornos -[tm]: http://jmblog.github.com/color-themes-for-highlightjs/ -[tm0]: https://github.com/ChrisKempson/Tomorrow-Theme -[cd]: https://github.com/caseman -[amd]: http://requirejs.org/docs/whyamd.html - - -## Version 7.0 - -The reason for the new major version update is a global change of keyword syntax -which resulted in the library getting smaller once again. For example, the -hosted build is 2K less than at the previous version while supporting two new -languages. - -Notable changes: - -- The library now works not only in a browser but also with [node.js][]. It is - installable with `npm install highlight.js`. [API][] docs are available on our - wiki. - -- The new unique feature (apparently) among syntax highlighters is highlighting - *HTTP* headers and an arbitrary language in the request body. The most useful - languages here are *XML* and *JSON* both of which highlight.js does support. - Here's [the detailed post][p] about the feature. - -- Two new style themes: a dark "south" *[Pojoaque][]* by Jason Tate and an - emulation of*XCode* IDE by [Angel Olloqui][ao]. - -- Three new languages: *D* by [Aleksandar Ružičić][ar], *R* by [Joe Cheng][jc] - and *GLSL* by [Sergey Tikhomirov][st]. - -- *Nginx* syntax has become a million times smaller and more universal thanks to - remaking it in a more generic manner that doesn't require listing all the - directives in the known universe. - -- Function titles are now highlighted in *PHP*. - -- *Haskell* and *VHDL* were significantly reworked to be more rich and correct - by their respective maintainers [Jeremy Hull][sr] and [Igor Kalnitsky][ik]. - -And last but not least, many bugs have been fixed around correctness and -language detection. - -Overall highlight.js currently supports 51 languages and 20 style themes. - -[node.js]: http://nodejs.org/ -[api]: http://softwaremaniacs.org/wiki/doku.php/highlight.js:api -[p]: http://softwaremaniacs.org/blog/2012/05/10/http-and-json-in-highlight-js/en/ -[pojoaque]: http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html -[ao]: https://github.com/angelolloqui -[ar]: https://github.com/raleksandar -[jc]: https://github.com/jcheng5 -[st]: https://github.com/tikhomirov -[sr]: https://github.com/sourrust -[ik]: https://github.com/ikalnitsky - - -## Version 6.2 - -A lot of things happened in highlight.js since the last version! We've got nine -new contributors, the discussion group came alive, and the main branch on GitHub -now counts more than 350 followers. Here are most significant results coming -from all this activity: - -- 5 (five!) new languages: Rust, ActionScript, CoffeeScript, MatLab and - experimental support for markdown. Thanks go to [Andrey Vlasovskikh][av], - [Alexander Myadzel][am], [Dmytrii Nagirniak][dn], [Oleg Efimov][oe], [Denis - Bardadym][db] and [John Crepezzi][jc]. - -- 2 new style themes: Monokai by [Luigi Maselli][lm] and stylistic imitation of - another well-known highlighter Google Code Prettify by [Aahan Krish][ak]. - -- A vast number of [correctness fixes and code refactorings][log], mostly made - by [Oleg Efimov][oe] and [Evgeny Stepanischev][es]. - -[av]: https://github.com/vlasovskikh -[am]: https://github.com/myadzel -[dn]: https://github.com/dnagir -[oe]: https://github.com/Sannis -[db]: https://github.com/btd -[jc]: https://github.com/seejohnrun -[lm]: http://grigio.org/ -[ak]: https://github.com/geekpanth3r -[es]: https://github.com/bolknote -[log]: https://github.com/isagalaev/highlight.js/commits/ - - -## Version 6.1 — Solarized - -[Jeremy Hull][jh] has implemented my dream feature — a port of [Solarized][] -style theme famous for being based on the intricate color theory to achieve -correct contrast and color perception. It is now available for highlight.js in -both variants — light and dark. - -This version also adds a new original style Arta. Its author pumbur maintains a -[heavily modified fork of highlight.js][pb] on GitHub. - -[jh]: https://github.com/sourrust -[solarized]: http://ethanschoonover.com/solarized -[pb]: https://github.com/pumbur/highlight.js - - -## Version 6.0 - -New major version of the highlighter has been built on a significantly -refactored syntax. Due to this it's even smaller than the previous one while -supporting more languages! - -New languages are: - -- Haskell by [Jeremy Hull][sourrust] -- Erlang in two varieties — module and REPL — made collectively by [Nikolay - Zakharov][desh], [Dmitry Kovega][arhibot] and [Sergey Ignatov][ignatov] -- Objective C by [Valerii Hiora][vhbit] -- Vala by [Antono Vasiljev][antono] -- Go by [Stephan Kountso][steplg] - -[sourrust]: https://github.com/sourrust -[desh]: http://desh.su/ -[arhibot]: https://github.com/arhibot -[ignatov]: https://github.com/ignatov -[vhbit]: https://github.com/vhbit -[antono]: https://github.com/antono -[steplg]: https://github.com/steplg - -Also this version is marginally faster and fixes a number of small long-standing -bugs. - -Developer overview of the new language syntax is available in a [blog post about -recent beta release][beta]. - -[beta]: http://softwaremaniacs.org/blog/2011/04/25/highlight-js-60-beta/en/ - -P.S. New version is not yet available on a Yandex' CDN, so for now you have to -download [your own copy][d]. - -[d]: /soft/highlight/en/download/ - - -## Version 5.14 - -Fixed bugs in HTML/XML detection and relevance introduced in previous -refactoring. - -Also test.html now shows the second best result of language detection by -relevance. - - -## Version 5.13 - -Past weekend began with a couple of simple additions for existing languages but -ended up in a big code refactoring bringing along nice improvements for language -developers. - -### For users - -- Description of C++ has got new keywords from the upcoming [C++ 0x][] standard. -- Description of HTML has got new tags from [HTML 5][]. -- CSS-styles have been unified to use consistent padding and also have lost - pop-outs with names of detected languages. -- [Igor Kalnitsky][ik] has sent two new language descriptions: CMake и VHDL. - -This makes total number of languages supported by highlight.js to reach 35. - -Bug fixes: - -- Custom classes on `<pre>` tags are not being overridden anymore -- More correct highlighting of code blocks inside non-`<pre>` containers: - highlighter now doesn't insist on replacing them with its own container and - just replaces the contents. -- Small fixes in browser compatibility and heuristics. - -[c++ 0x]: http://ru.wikipedia.org/wiki/C%2B%2B0x -[html 5]: http://en.wikipedia.org/wiki/HTML5 -[ik]: http://kalnitsky.org.ua/ - -### For developers - -The most significant change is the ability to include language submodes right -under `contains` instead of defining explicit named submodes in the main array: - - contains: [ - 'string', - 'number', - {begin: '\\n', end: hljs.IMMEDIATE_RE} - ] - -This is useful for auxiliary modes needed only in one place to define parsing. -Note that such modes often don't have `className` and hence won't generate a -separate `<span>` in the resulting markup. This is similar in effect to -`noMarkup: true`. All existing languages have been refactored accordingly. - -Test file test.html has at last become a real test. Now it not only puts the -detected language name under the code snippet but also tests if it matches the -expected one. Test summary is displayed right above all language snippets. - - -## CDN - -Fine people at [Yandex][] agreed to host highlight.js on their big fast servers. -[Link up][l]! - -[yandex]: http://yandex.com/ -[l]: http://softwaremaniacs.org/soft/highlight/en/download/ - - -## Version 5.10 — "Paris". - -Though I'm on a vacation in Paris, I decided to release a new version with a -couple of small fixes: - -- Tomas Vitvar discovered that TAB replacement doesn't always work when used - with custom markup in code -- SQL parsing is even more rigid now and doesn't step over SmallTalk in tests - - -## Version 5.9 - -A long-awaited version is finally released. - -New languages: - -- Andrew Fedorov made a definition for Lua -- a long-time highlight.js contributor [Peter Leonov][pl] made a definition for - Nginx config -- [Vladimir Moskva][vm] made a definition for TeX - -[pl]: http://kung-fu-tzu.ru/ -[vm]: http://fulc.ru/ - -Fixes for existing languages: - -- [Loren Segal][ls] reworked the Ruby definition and added highlighting for - [YARD][] inline documentation -- the definition of SQL has become more solid and now it shouldn't be overly - greedy when it comes to language detection - -[ls]: http://gnuu.org/ -[yard]: http://yardoc.org/ - -The highlighter has become more usable as a library allowing to do highlighting -from initialization code of JS frameworks and in ajax methods (see. -readme.eng.txt). - -Also this version drops support for the [WordPress][wp] plugin. Everyone is -welcome to [pick up its maintenance][p] if needed. - -[wp]: http://wordpress.org/ -[p]: http://bazaar.launchpad.net/~isagalaev/+junk/highlight/annotate/342/src/wp_highlight.js.php - - -## Version 5.8 - -- Jan Berkel has contributed a definition for Scala. +1 to hotness! -- All CSS-styles are rewritten to work only inside `<pre>` tags to avoid - conflicts with host site styles. - - -## Version 5.7. - -Fixed escaping of quotes in VBScript strings. - - -## Version 5.5 - -This version brings a small change: now .ini-files allow digits, underscores and -square brackets in key names. - - -## Version 5.4 - -Fixed small but upsetting bug in the packer which caused incorrect highlighting -of explicitly specified languages. Thanks to Andrew Fedorov for precise -diagnostics! - - -## Version 5.3 - -The version to fulfil old promises. - -The most significant change is that highlight.js now preserves custom user -markup in code along with its own highlighting markup. This means that now it's -possible to use, say, links in code. Thanks to [Vladimir Dolzhenko][vd] for the -[initial proposal][1] and for making a proof-of-concept patch. - -Also in this version: - -- [Vasily Polovnyov][vp] has sent a GitHub-like style and has implemented - support for CSS @-rules and Ruby symbols. -- Yura Zaripov has sent two styles: Brown Paper and School Book. -- Oleg Volchkov has sent a definition for [Parser 3][p3]. - -[1]: http://softwaremaniacs.org/forum/highlightjs/6612/ -[p3]: http://www.parser.ru/ -[vp]: http://vasily.polovnyov.ru/ -[vd]: http://dolzhenko.blogspot.com/ - - -## Version 5.2 - -- at last it's possible to replace indentation TABs with something sensible (e.g. 2 or 4 spaces) -- new keywords and built-ins for 1C by Sergey Baranov -- a couple of small fixes to Apache highlighting - - -## Version 5.1 - -This is one of those nice version consisting entirely of new and shiny -contributions! - -- [Vladimir Ermakov][vooon] created highlighting for AVR Assembler -- [Ruslan Keba][rukeba] created highlighting for Apache config file. Also his - original visual style for it is now available for all highlight.js languages - under the name "Magula". -- [Shuen-Huei Guan][drake] (aka Drake) sent new keywords for RenderMan - languages. Also thanks go to [Konstantin Evdokimenko][ke] for his advice on - the matter. - -[vooon]: http://vehq.ru/about/ -[rukeba]: http://rukeba.com/ -[drake]: http://drakeguan.org/ -[ke]: http://k-evdokimenko.moikrug.ru/ - - -## Version 5.0 - -The main change in the new major version of highlight.js is a mechanism for -packing several languages along with the library itself into a single compressed -file. Now sites using several languages will load considerably faster because -the library won't dynamically include additional files while loading. - -Also this version fixes a long-standing bug with Javascript highlighting that -couldn't distinguish between regular expressions and division operations. - -And as usually there were a couple of minor correctness fixes. - -Great thanks to all contributors! Keep using highlight.js. - - -## Version 4.3 - -This version comes with two contributions from [Jason Diamond][jd]: - -- language definition for C# (yes! it was a long-missed thing!) -- Visual Studio-like highlighting style - -Plus there are a couple of minor bug fixes for parsing HTML and XML attributes. - -[jd]: http://jason.diamond.name/weblog/ - - -## Version 4.2 - -The biggest news is highlighting for Lisp, courtesy of Vasily Polovnyov. It's -somewhat experimental meaning that for highlighting "keywords" it doesn't use -any pre-defined set of a Lisp dialect. Instead it tries to highlight first word -in parentheses wherever it makes sense. I'd like to ask people programming in -Lisp to confirm if it's a good idea and send feedback to [the forum][f]. - -Other changes: - -- Smalltalk was excluded from DEFAULT_LANGUAGES to save traffic -- [Vladimir Epifanov][voldmar] has implemented javascript style switcher for - test.html -- comments now allowed inside Ruby function definition -- [MEL][] language from [Shuen-Huei Guan][drake] -- whitespace now allowed between `<pre>` and `<code>` -- better auto-detection of C++ and PHP -- HTML allows embedded VBScript (`<% .. %>`) - -[f]: http://softwaremaniacs.org/forum/highlightjs/ -[voldmar]: http://voldmar.ya.ru/ -[mel]: http://en.wikipedia.org/wiki/Maya_Embedded_Language -[drake]: http://drakeguan.org/ - - -## Version 4.1 - -Languages: - -- Bash from Vah -- DOS bat-files from Alexander Makarov (Sam) -- Diff files from Vasily Polovnyov -- Ini files from myself though initial idea was from Sam - -Styles: - -- Zenburn from Vladimir Epifanov, this is an imitation of a - [well-known theme for Vim][zenburn]. -- Ascetic from myself, as a realization of ideals of non-flashy highlighting: - just one color in only three gradations :-) - -In other news. [One small bug][bug] was fixed, built-in keywords were added for -Python and C++ which improved auto-detection for the latter (it was shame that -[my wife's blog][alenacpp] had issues with it from time to time). And lastly -thanks go to Sam for getting rid of my stylistic comments in code that were -getting in the way of [JSMin][]. - -[zenburn]: http://en.wikipedia.org/wiki/Zenburn -[alenacpp]: http://alenacpp.blogspot.com/ -[bug]: http://softwaremaniacs.org/forum/viewtopic.php?id=1823 -[jsmin]: http://code.google.com/p/jsmin-php/ - - -## Version 4.0 - -New major version is a result of vast refactoring and of many contributions. - -Visible new features: - -- Highlighting of embedded languages. Currently is implemented highlighting of - Javascript and CSS inside HTML. -- Bundled 5 ready-made style themes! - -Invisible new features: - -- Highlight.js no longer pollutes global namespace. Only one object and one - function for backward compatibility. -- Performance is further increased by about 15%. - -Changing of a major version number caused by a new format of language definition -files. If you use some third-party language files they should be updated. - - -## Version 3.5 - -A very nice version in my opinion fixing a number of small bugs and slightly -increased speed in a couple of corner cases. Thanks to everybody who reports -bugs in he [forum][f] and by email! - -There is also a new language — XML. A custom XML formerly was detected as HTML -and didn't highlight custom tags. In this version I tried to make custom XML to -be detected and highlighted by its own rules. Which by the way include such -things as CDATA sections and processing instructions (`<? ... ?>`). - -[f]: http://softwaremaniacs.org/forum/viewforum.php?id=6 - - -## Version 3.3 - -[Vladimir Gubarkov][xonix] has provided an interesting and useful addition. -File export.html contains a little program that shows and allows to copy and -paste an HTML code generated by the highlighter for any code snippet. This can -be useful in situations when one can't use the script itself on a site. - - -[xonix]: http://xonixx.blogspot.com/ - - -## Version 3.2 consists completely of contributions: - -- Vladimir Gubarkov has described SmallTalk -- Yuri Ivanov has described 1C -- Peter Leonov has packaged the highlighter as a Firefox extension -- Vladimir Ermakov has compiled a mod for phpBB - -Many thanks to you all! - - -## Version 3.1 - -Three new languages are available: Django templates, SQL and Axapta. The latter -two are sent by [Dmitri Roudakov][1]. However I've almost entirely rewrote an -SQL definition but I'd never started it be it from the ground up :-) - -The engine itself has got a long awaited feature of grouping keywords -("keyword", "built-in function", "literal"). No more hacks! - -[1]: http://roudakov.ru/ - - -## Version 3.0 - -It is major mainly because now highlight.js has grown large and has become -modular. Now when you pass it a list of languages to highlight it will -dynamically load into a browser only those languages. - -Also: - -- Konstantin Evdokimenko of [RibKit][] project has created a highlighting for - RenderMan Shading Language and RenderMan Interface Bytestream. Yay for more - languages! -- Heuristics for C++ and HTML got better. -- I've implemented (at last) a correct handling of backslash escapes in C-like - languages. - -There is also a small backwards incompatible change in the new version. The -function initHighlighting that was used to initialize highlighting instead of -initHighlightingOnLoad a long time ago no longer works. If you by chance still -use it — replace it with the new one. - -[RibKit]: http://ribkit.sourceforge.net/ - - -## Version 2.9 - -Highlight.js is a parser, not just a couple of regular expressions. That said -I'm glad to announce that in the new version 2.9 has support for: - -- in-string substitutions for Ruby -- `#{...}` -- strings from from numeric symbol codes (like #XX) for Delphi - - -## Version 2.8 - -A maintenance release with more tuned heuristics. Fully backwards compatible. - - -## Version 2.7 - -- Nikita Ledyaev presents highlighting for VBScript, yay! -- A couple of bugs with escaping in strings were fixed thanks to Mickle -- Ongoing tuning of heuristics - -Fixed bugs were rather unpleasant so I encourage everyone to upgrade! - - -## Version 2.4 - -- Peter Leonov provides another improved highlighting for Perl -- Javascript gets a new kind of keywords — "literals". These are the words - "true", "false" and "null" - -Also highlight.js homepage now lists sites that use the library. Feel free to -add your site by [dropping me a message][mail] until I find the time to build a -submit form. - -[mail]: mailto:Maniac@SoftwareManiacs.Org - - -## Version 2.3 - -This version fixes IE breakage in previous version. My apologies to all who have -already downloaded that one! - - -## Version 2.2 - -- added highlighting for Javascript -- at last fixed parsing of Delphi's escaped apostrophes in strings -- in Ruby fixed highlighting of keywords 'def' and 'class', same for 'sub' in - Perl - - -## Version 2.0 - -- Ruby support by [Anton Kovalyov][ak] -- speed increased by orders of magnitude due to new way of parsing -- this same way allows now correct highlighting of keywords in some tricky - places (like keyword "End" at the end of Delphi classes) - -[ak]: http://anton.kovalyov.net/ - - -## Version 1.0 - -Version 1.0 of javascript syntax highlighter is released! - -It's the first version available with English description. Feel free to post -your comments and question to [highlight.js forum][forum]. And don't be afraid -if you find there some fancy Cyrillic letters -- it's for Russian users too :-) - -[forum]: http://softwaremaniacs.org/forum/viewforum.php?id=6 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE deleted file mode 100644 index 422deb73..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2006, Ivan Sagalaev -All rights reserved. -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 highlight.js 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 REGENTS 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 REGENTS AND 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. diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md deleted file mode 100644 index be85f6ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md +++ /dev/null @@ -1,171 +0,0 @@ -# Highlight.js - -Highlight.js нужен для подсветки синтаксиса в примерах кода в блогах, -форумах и вообще на любых веб-страницах. Пользоваться им очень просто, -потому что работает он автоматически: сам находит блоки кода, сам -определяет язык, сам подсвечивает. - -Автоопределением языка можно управлять, когда оно не справляется само (см. -дальше "Эвристика"). - - -## Простое использование - -Подключите библиотеку и стиль на страницу и повесть вызов подсветки на -загрузку страницы: - -```html -<link rel="stylesheet" href="styles/default.css"> -<script src="highlight.pack.js"></script> -<script>hljs.initHighlightingOnLoad();</script> -``` - -Весь код на странице, обрамлённый в теги `<pre><code> .. </code></pre>` -будет автоматически подсвечен. Если вы используете другие теги или хотите -подсвечивать блоки кода динамически, читайте "Инициализацию вручную" ниже. - -- Вы можете скачать собственную версию "highlight.pack.js" или сослаться - на захостенный файл, как описано на странице загрузки: - <http://highlightjs.org/download/> - -- Стилевые темы можно найти в загруженном архиве или также использовать - захостенные. Чтобы сделать собственный стиль для своего сайта, вам - будет полезен [CSS classes reference][cr], который тоже есть в архиве. - -[cr]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html - - -## node.js - -Highlight.js можно использовать в node.js. Библиотеку со всеми возможными языками можно -установить с NPM: - - npm install highlight.js - -Также её можно собрать из исходников с только теми языками, которые нужны: - - python3 tools/build.py -tnode lang1 lang2 .. - -Использование библиотеки: - -```javascript -var hljs = require('highlight.js'); - -// Если вы знаете язык -hljs.highlight(lang, code).value; - -// Автоопределение языка -hljs.highlightAuto(code).value; -``` - - -## AMD - -Highlight.js можно использовать с загрузчиком AMD-модулей. Для этого его -нужно собрать из исходников следующей командой: - -```bash -$ python3 tools/build.py -tamd lang1 lang2 .. -``` - -Она создаст файл `build/highlight.pack.js`, который является загружаемым -AMD-модулем и содержит все выбранные при сборке языки. Используется он так: - -```javascript -require(["highlight.js/build/highlight.pack"], function(hljs){ - - // Если вы знаете язык - hljs.highlight(lang, code).value; - - // Автоопределение языка - hljs.highlightAuto(code).value; -}); -``` - - -## Замена TABов - -Также вы можете заменить символы TAB ('\x09'), используемые для отступов, на -фиксированное количество пробелов или на отдельный `<span>`, чтобы задать ему -какой-нибудь специальный стиль: - -```html -<script type="text/javascript"> - hljs.configure({tabReplace: ' '}); // 4 spaces - // ... or - hljs.configure({tabReplace: '<span class="indent">\t</span>'}); - - hljs.initHighlightingOnLoad(); -</script> -``` - - -## Инициализация вручную - -Если вы используете другие теги для блоков кода, вы можете инициализировать их -явно с помощью функции `highlightBlock(code)`. Она принимает DOM-элемент с -текстом расцвечиваемого кода и опционально - строчку для замены символов TAB. - -Например с использованием jQuery код инициализации может выглядеть так: - -```javascript -$(document).ready(function() { - $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); -}); -``` - -`highlightBlock` можно также использовать, чтобы подсветить блоки кода, -добавленные на страницу динамически. Только убедитесь, что вы не делаете этого -повторно для уже раскрашенных блоков. - -Если ваш блок кода использует `<br>` вместо переводов строки (т.е. если это не -`<pre>`), включите опцию `useBR`: - -```javascript -hljs.configure({useBR: true}); -$('div.code').each(function(i, e) {hljs.highlightBlock(e)}); -``` - - -## Эвристика - -Определение языка, на котором написан фрагмент, делается с помощью -довольно простой эвристики: программа пытается расцветить фрагмент всеми -языками подряд, и для каждого языка считает количество подошедших -синтаксически конструкций и ключевых слов. Для какого языка нашлось больше, -тот и выбирается. - -Это означает, что в коротких фрагментах высока вероятность ошибки, что -периодически и случается. Чтобы указать язык фрагмента явно, надо написать -его название в виде класса к элементу `<code>`: - -```html -<pre><code class="html">...</code></pre> -``` - -Можно использовать рекомендованные в HTML5 названия классов: -"language-html", "language-php". Также можно назначать классы на элемент -`<pre>`. - -Чтобы запретить расцветку фрагмента вообще, используется класс "no-highlight": - -```html -<pre><code class="no-highlight">...</code></pre> -``` - - -## Экспорт - -В файле export.html находится небольшая программка, которая показывает и дает -скопировать непосредственно HTML-код подсветки для любого заданного фрагмента кода. -Это может понадобится например на сайте, на котором нельзя подключить сам скрипт -highlight.js. - - -## Координаты - -- Версия: 8.0 -- URL: http://highlightjs.org/ - -Лицензионное соглашение читайте в файле LICENSE. -Список авторов и соавторов читайте в файле AUTHORS.ru.txt diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js deleted file mode 100644 index 627f79e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -var hljs=new function(){function k(v){return v.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(v){return v.nodeName.toLowerCase()}function i(w,x){var v=w&&w.exec(x);return v&&v.index==0}function d(v){return Array.prototype.map.call(v.childNodes,function(w){if(w.nodeType==3){return b.useBR?w.nodeValue.replace(/\n/g,""):w.nodeValue}if(t(w)=="br"){return"\n"}return d(w)}).join("")}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^language-/,"")});return v.filter(function(x){return j(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset<y[0].offset)?w:y}return y[0].event=="start"?w:y}function A(H){function G(I){return" "+I.nodeName+'="'+k(I.value)+'"'}F+="<"+t(H)+Array.prototype.map.call(H.attributes,G).join("")+">"}function E(G){F+="</"+t(G)+">"}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=k(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+k(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};function E(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})}if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b=D.bK.split(" ").join("|")}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?\\b("+F.b+")\\b\\.?":F.b}).concat([D.tE]).concat([D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T<V.c.length;T++){if(i(V.c[T].bR,U)){return V.c[T]}}}function z(U,T){if(i(U.eR,T)){return U}if(U.eW){return z(U.parent,T)}}function A(T,U){return !J&&i(U.iR,T)}function E(V,T){var U=M.cI?T[0].toLowerCase():T[0];return V.k.hasOwnProperty(U)&&V.k[U]}function w(Z,X,W,V){var T=V?"":b.classPrefix,U='<span class="'+T,Y=W?"":"</span>";U+=Z+'">';return U+X+Y}function N(){var U=k(C);if(!I.k){return U}var T="";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(U);while(V){T+=U.substr(X,V.index-X);var W=E(I,V);if(W){H+=W[1];T+=w(W[0],V[0])}else{T+=V[0]}X=I.lR.lastIndex;V=I.lR.exec(U)}return T+U.substr(X)}function F(){if(I.sL&&!f[I.sL]){return k(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):g(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=k(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+="</span>"}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=k(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"<unnamed>")+'"')}C+=X;return X.length||1}var M=j(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+="</span>"}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:k(L)}}else{throw O}}}function g(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:k(y)};var w=v;x.forEach(function(z){if(!j(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function h(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"<br>")}return v}function p(z){var y=d(z);var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):g(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=h(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function e(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function j(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=g;this.fixMarkup=h;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=e;this.getLanguage=j;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage("cs",function(b){var a="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield";return{k:a,c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|<!--|-->"},{cN:"xmlDocTag",b:"</?",e:">"}]},b.CLCM,b.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},b.ASM,b.QSM,b.CNM,{bK:"protected public private internal",e:/[{;=]/,k:a,c:[{bK:"class namespace interface",starts:{c:[b.TM]}},{b:b.IR+"\\s*\\(",rB:true,c:[b.TM]}]}]}});hljs.registerLanguage("ruby",function(e){var h="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor";var a={cN:"yardoctag",b:"@[A-Za-z]+"};var i={cN:"comment",v:[{b:"#",e:"$",c:[a]},{b:"^\\=begin",e:"^\\=end",c:[a],r:10},{b:"^__END__",e:"\\n$"}]};var c={cN:"subst",b:"#\\{",e:"}",k:g};var d={cN:"string",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:"%[qw]?\\(",e:"\\)"},{b:"%[qw]?\\[",e:"\\]"},{b:"%[qw]?{",e:"}"},{b:"%[qw]?<",e:">",r:10},{b:"%[qw]?/",e:"/",r:10},{b:"%[qw]?%",e:"%",r:10},{b:"%[qw]?-",e:"-",r:10},{b:"%[qw]?\\|",e:"\\|",r:10},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]};var b={cN:"params",b:"\\(",e:"\\)",k:g};var f=[d,i,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]},i]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:h}),b,i]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[d,{b:h}],r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[i,{cN:"regexp",c:[e.BE,c],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];c.c=f;b.c=f;return{k:g,c:f}});hljs.registerLanguage("diff",function(a){return{c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBLCLM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/</,r:0,c:[d,{cN:"attribute",b:c,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html"],cI:true,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ /><]+",r:0},b]}]}});hljs.registerLanguage("markdown",function(a){return{c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].+?[\\)\\]]",rB:true,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:true,rE:true,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:true,eE:true},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:true,eE:true,}],r:10},{b:"^\\[.+\\]:",e:"$",rB:true,c:[{cN:"link_reference",b:"\\[",e:"\\]",eB:true,eE:true},{cN:"link_url",b:"\\s",e:"$"}]}]}});hljs.registerLanguage("css",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.NM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("http",function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}});hljs.registerLanguage("java",function(b){var a="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws";return{k:a,i:/<\//,c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"(^|\\s)@[A-Za-z]+"}],r:10},b.CLCM,b.CBLCLM,b.ASM,b.QSM,{bK:"protected public private",e:/[{;=]/,k:a,c:[{cN:"class",bK:"class interface",eW:true,i:/[:"<>]/,c:[{bK:"extends implements",r:10},b.UTM]},{b:b.UIR+"\\s*\\(",rB:true,c:[b.UTM]}]},b.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("php",function(b){var e={cN:"variable",b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var a={cN:"preprocessor",b:/<\?(php)?|\?>/};var c={cN:"string",c:[b.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[b.CLCM,b.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},a]},{cN:"comment",b:"__halt_compiler.+?;",eW:true,k:"__halt_compiler",l:b.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[b.BE]},a,e,{cN:"function",bK:"function",e:/[;{]/,i:"\\$|\\[|%",c:[b.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e,b.CBLCLM,c,d]}]},{cN:"class",bK:"class interface",e:"{",i:/[:\(\$"]/,c:[{bK:"extends implements",r:10},b.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[b.UTM]},{bK:"use",e:";",c:[b.UTM]},{b:"=>"},c,d]}});hljs.registerLanguage("python",function(a){var f={cN:"prompt",b:/^(>>>|\.\.\.) /};var b={cN:"string",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/,},{b:/(b|br)"/,e:/"/,},a.ASM,a.QSM]};var d={cN:"number",r:0,v:[{b:a.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:a.CNR+"[lLjJ]?"}]};var e={cN:"params",b:/\(/,e:/\)/,c:["self",f,d,b]};var c={e:/:/,i:/[${=;\n]/,c:[a.UTM,e]};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:"function",bK:"def",r:10}),a.inherit(c,{cN:"class",bK:"class"}),{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("sql",function(a){return{cI:true,i:/[<>]/,c:[{cN:"operator",b:"\\b(begin|end|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant|merge)\\b(?!:)",e:";",eW:true,k:{keyword:"all partial global month current_timestamp using go revoke smallint indicator end-exec disconnect zone with character assertion to add current_user usage input local alter match collate real then rollback get read timestamp session_user not integer bit unique day minute desc insert execute like ilike|2 level decimal drop continue isolation found where constraints domain right national some module transaction relative second connect escape close system_user for deferred section cast current sqlstate allocate intersect deallocate numeric public preserve full goto initially asc no key output collation group by union session both last language constraint column of space foreign deferrable prior connection unknown action commit view or first into float year primary cascaded except restrict set references names table outer open select size are rows from prepare distinct leading create only next inner authorization schema corresponding option declare precision immediate else timezone_minute external varying translation true case exception join hour default double scroll value cursor descriptor values dec fetch procedure delete and false int is describe char as at in varchar null trailing any absolute current_time end grant privileges when cross check write current_date pad begin temporary exec time update catalog user sql date on identity timezone_hour natural whenever interval work order cascade diagnostics nchar having left call do handler load replace truncate start lock show pragma exists number trigger if before after each row merge matched database",aggregate:"count sum min max avg"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM]},a.CBLCLM,{cN:"comment",b:"--",e:"$"}]}});hljs.registerLanguage("ini",function(a){return{cI:true,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage("perl",function(c){var d="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var f={cN:"subst",b:"[$@]\\{",e:"\\}",k:d};var g={b:"->{",e:"}"};var a={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@\*](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@\*][^\s\w{]/,r:0}]};var e={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},g,{cN:"string",c:h,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[c.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[c.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+c.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[c.HCM,e,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[c.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];f.c=b;g.c=b;return{k:d,c:b}});hljs.registerLanguage("objectivec",function(a){var d={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign self synchronized id nonatomic super unichar IBOutlet IBAction strong weak @private @protected @public @try @property @end @throw @catch @finally @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b="@interface @class @protocol @implementation";return{k:d,l:c,i:"</",c:[a.CLCM,a.CBLCLM,a.CNM,a.QSM,{cN:"string",b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"},{cN:"preprocessor",b:"#import",e:"$",c:[{cN:"title",b:'"',e:'"'},{cN:"title",b:"<",e:">"}]},{cN:"preprocessor",b:"#",e:"$"},{cN:"class",b:"("+b.split(" ").join("|")+")\\b",e:"({|$)",k:b,l:c,c:[a.UTM]},{cN:"variable",b:"\\."+a.UIR,r:0}]}});hljs.registerLanguage("coffeescript",function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module exports global window document"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var f=c.inherit(c.TM,{b:a});var e={cN:"subst",b:/#\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/"""/,e:/"""/,c:[c.BE,e]},{b:/"/,e:/"/,c:[c.BE,e]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[e,c.HCM]},{b:"//[gim]*",r:0},{b:"/\\S(\\\\.|[^\\n])*?/[gim]*(?=\\s|\\W|$)"}]},{cN:"property",b:"@"+a},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"}];e.c=d;return{k:b,c:d.concat([{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"function",b:"("+a+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",e:"[-=]>",rB:true,c:[f,{cN:"params",b:"\\(",rB:true,c:[{b:/\(/,e:/\)/,k:b,c:["self"].concat(d)}]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:true,i:/[:="\[\]]/,c:[f]},f]},{cN:"attribute",b:a+":",e:":",rB:true,eE:true,r:0}])}});hljs.registerLanguage("nginx",function(c){var b={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+c.UIR}]};var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[c.HCM,{cN:"string",c:[c.BE,b],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true},{cN:"regexp",c:[c.BE,b],v:[{b:"\\s\\^",e:"\\s|{|;",rE:true},{b:"~\\*?\\s+",e:"\\s|{|;",rE:true},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},b]};return{c:[c.HCM,{b:c.UIR+"\\s",e:";|{",rB:true,c:[c.inherit(c.UTM,{starts:a})],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("json",function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}});hljs.registerLanguage("apache",function(a){var b={cN:"number",b:"[\\$%]\\d+"};return{cI:true,c:[a.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",b]},b,a.QSM]}}],i:/\S/}});hljs.registerLanguage("cpp",function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c"],k:b,i:"</",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},a.CNM,{cN:"preprocessor",b:"#",e:"$",c:[{b:"include\\s*<",e:">",i:"\\n"},a.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,r:10,c:["self"]}]}});hljs.registerLanguage("makefile",function(a){var b={cN:"variable",b:/\$\(/,e:/\)/,c:[a.BE]};return{c:[a.HCM,{b:/^\w+\s*\W*=/,rB:true,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:true,starts:{e:/$/,r:0,c:[b],}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,c:[a.QSM,b]}]}}); diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css deleted file mode 100644 index c2a55bbe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css +++ /dev/null @@ -1,160 +0,0 @@ -/* -Date: 17.V.2011 -Author: pumbur <pumbur@pumbur.net> -*/ - -.hljs -{ - display: block; padding: 0.5em; - background: #222; -} - -.profile .hljs-header *, -.ini .hljs-title, -.nginx .hljs-title -{ - color: #fff; -} - -.hljs-comment, -.hljs-javadoc, -.hljs-preprocessor, -.hljs-preprocessor .hljs-title, -.hljs-pragma, -.hljs-shebang, -.profile .hljs-summary, -.diff, -.hljs-pi, -.hljs-doctype, -.hljs-tag, -.hljs-template_comment, -.css .hljs-rules, -.tex .hljs-special -{ - color: #444; -} - -.hljs-string, -.hljs-symbol, -.diff .hljs-change, -.hljs-regexp, -.xml .hljs-attribute, -.smalltalk .hljs-char, -.xml .hljs-value, -.ini .hljs-value, -.clojure .hljs-attribute, -.coffeescript .hljs-attribute -{ - color: #ffcc33; -} - -.hljs-number, -.hljs-addition -{ - color: #00cc66; -} - -.hljs-built_in, -.hljs-literal, -.vhdl .hljs-typename, -.go .hljs-constant, -.go .hljs-typename, -.ini .hljs-keyword, -.lua .hljs-title, -.perl .hljs-variable, -.php .hljs-variable, -.mel .hljs-variable, -.django .hljs-variable, -.css .funtion, -.smalltalk .method, -.hljs-hexcolor, -.hljs-important, -.hljs-flow, -.hljs-inheritance, -.parser3 .hljs-variable -{ - color: #32AAEE; -} - -.hljs-keyword, -.hljs-tag .hljs-title, -.css .hljs-tag, -.css .hljs-class, -.css .hljs-id, -.css .hljs-pseudo, -.css .hljs-attr_selector, -.lisp .hljs-title, -.clojure .hljs-built_in, -.hljs-winutils, -.tex .hljs-command, -.hljs-request, -.hljs-status -{ - color: #6644aa; -} - -.hljs-title, -.ruby .hljs-constant, -.vala .hljs-constant, -.hljs-parent, -.hljs-deletion, -.hljs-template_tag, -.css .hljs-keyword, -.objectivec .hljs-class .hljs-id, -.smalltalk .hljs-class, -.lisp .hljs-keyword, -.apache .hljs-tag, -.nginx .hljs-variable, -.hljs-envvar, -.bash .hljs-variable, -.go .hljs-built_in, -.vbscript .hljs-built_in, -.lua .hljs-built_in, -.rsl .hljs-built_in, -.tail, -.avrasm .hljs-label, -.tex .hljs-formula, -.tex .hljs-formula * -{ - color: #bb1166; -} - -.hljs-yardoctag, -.hljs-phpdoc, -.profile .hljs-header, -.ini .hljs-title, -.apache .hljs-tag, -.parser3 .hljs-title -{ - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata -{ - opacity: 0.6; -} - -.hljs, -.javascript, -.css, -.xml, -.hljs-subst, -.diff .hljs-chunk, -.css .hljs-value, -.css .hljs-attribute, -.lisp .hljs-string, -.lisp .hljs-number, -.tail .hljs-params, -.hljs-container, -.haskell *, -.erlang *, -.erlang_repl * -{ - color: #aaa; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css deleted file mode 100644 index 89c5fe2f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css +++ /dev/null @@ -1,50 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-filter .hljs-argument, -.hljs-addition, -.hljs-change, -.apache .hljs-tag, -.apache .hljs-cbracket, -.nginx .hljs-built_in, -.tex .hljs-formula { - color: #888; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-shebang, -.hljs-doctype, -.hljs-pi, -.hljs-javadoc, -.hljs-deletion, -.apache .hljs-sqbracket { - color: #CCC; -} - -.hljs-keyword, -.hljs-tag .hljs-title, -.ini .hljs-title, -.lisp .hljs-title, -.clojure .hljs-title, -.http .hljs-title, -.nginx .hljs-title, -.css .hljs-tag, -.hljs-winutils, -.hljs-flow, -.apache .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css deleted file mode 100644 index 4cfc77ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Dune Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Dune Dark Comment */ -.hljs-comment, -.hljs-title { - color: #999580; -} - -/* Atelier Dune Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d73737; -} - -/* Atelier Dune Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #b65611; -} - -/* Atelier Dune Dark Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #cfb017; -} - -/* Atelier Dune Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #60ac39; -} - -/* Atelier Dune Dark Aqua */ -.css .hljs-hexcolor { - color: #1fad83; -} - -/* Atelier Dune Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6684e1; -} - -/* Atelier Dune Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b854d4; -} - -.hljs { - display: block; - background: #292824; - color: #a6a28c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css deleted file mode 100644 index 3501bf82..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Dune Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Dune Light Comment */ -.hljs-comment, -.hljs-title { - color: #7d7a68; -} - -/* Atelier Dune Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d73737; -} - -/* Atelier Dune Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #b65611; -} - -/* Atelier Dune Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #cfb017; -} - -/* Atelier Dune Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #60ac39; -} - -/* Atelier Dune Light Aqua */ -.css .hljs-hexcolor { - color: #1fad83; -} - -/* Atelier Dune Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6684e1; -} - -/* Atelier Dune Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b854d4; -} - -.hljs { - display: block; - background: #fefbec; - color: #6e6b5e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css deleted file mode 100644 index 9c26b7be..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Forest Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Forest Dark Comment */ -.hljs-comment, -.hljs-title { - color: #9c9491; -} - -/* Atelier Forest Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f22c40; -} - -/* Atelier Forest Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #df5320; -} - -/* Atelier Forest Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #d5911a; -} - -/* Atelier Forest Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #5ab738; -} - -/* Atelier Forest Dark Aqua */ -.css .hljs-hexcolor { - color: #00ad9c; -} - -/* Atelier Forest Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #407ee7; -} - -/* Atelier Forest Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #6666ea; -} - -.hljs { - display: block; - background: #2c2421; - color: #a8a19f; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css deleted file mode 100644 index 3de3dadb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Forest Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Forest Light Comment */ -.hljs-comment, -.hljs-title { - color: #766e6b; -} - -/* Atelier Forest Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f22c40; -} - -/* Atelier Forest Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #df5320; -} - -/* Atelier Forest Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #d5911a; -} - -/* Atelier Forest Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #5ab738; -} - -/* Atelier Forest Light Aqua */ -.css .hljs-hexcolor { - color: #00ad9c; -} - -/* Atelier Forest Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #407ee7; -} - -/* Atelier Forest Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #6666ea; -} - -.hljs { - display: block; - background: #f1efee; - color: #68615e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css deleted file mode 100644 index df1446c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Heath Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Heath Dark Comment */ -.hljs-comment, -.hljs-title { - color: #9e8f9e; -} - -/* Atelier Heath Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ca402b; -} - -/* Atelier Heath Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #a65926; -} - -/* Atelier Heath Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #bb8a35; -} - -/* Atelier Heath Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #379a37; -} - -/* Atelier Heath Dark Aqua */ -.css .hljs-hexcolor { - color: #159393; -} - -/* Atelier Heath Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #516aec; -} - -/* Atelier Heath Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #7b59c0; -} - -.hljs { - display: block; - background: #292329; - color: #ab9bab; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css deleted file mode 100644 index a737a082..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Heath Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Heath Light Comment */ -.hljs-comment, -.hljs-title { - color: #776977; -} - -/* Atelier Heath Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ca402b; -} - -/* Atelier Heath Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #a65926; -} - -/* Atelier Heath Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #bb8a35; -} - -/* Atelier Heath Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #379a37; -} - -/* Atelier Heath Light Aqua */ -.css .hljs-hexcolor { - color: #159393; -} - -/* Atelier Heath Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #516aec; -} - -/* Atelier Heath Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #7b59c0; -} - -.hljs { - display: block; - background: #f7f3f7; - color: #695d69; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css deleted file mode 100644 index 43c5b4ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Lakeside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Lakeside Dark Comment */ -.hljs-comment, -.hljs-title { - color: #7195a8; -} - -/* Atelier Lakeside Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d22d72; -} - -/* Atelier Lakeside Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #935c25; -} - -/* Atelier Lakeside Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #8a8a0f; -} - -/* Atelier Lakeside Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #568c3b; -} - -/* Atelier Lakeside Dark Aqua */ -.css .hljs-hexcolor { - color: #2d8f6f; -} - -/* Atelier Lakeside Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #257fad; -} - -/* Atelier Lakeside Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #5d5db1; -} - -.hljs { - display: block; - background: #1f292e; - color: #7ea2b4; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css deleted file mode 100644 index 5a782694..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Lakeside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Lakeside Light Comment */ -.hljs-comment, -.hljs-title { - color: #5a7b8c; -} - -/* Atelier Lakeside Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d22d72; -} - -/* Atelier Lakeside Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #935c25; -} - -/* Atelier Lakeside Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #8a8a0f; -} - -/* Atelier Lakeside Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #568c3b; -} - -/* Atelier Lakeside Light Aqua */ -.css .hljs-hexcolor { - color: #2d8f6f; -} - -/* Atelier Lakeside Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #257fad; -} - -/* Atelier Lakeside Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #5d5db1; -} - -.hljs { - display: block; - background: #ebf8ff; - color: #516d7b; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css deleted file mode 100644 index 3bea9b36..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Seaside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Seaside Dark Comment */ -.hljs-comment, -.hljs-title { - color: #809980; -} - -/* Atelier Seaside Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #e6193c; -} - -/* Atelier Seaside Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #87711d; -} - -/* Atelier Seaside Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #c3c322; -} - -/* Atelier Seaside Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #29a329; -} - -/* Atelier Seaside Dark Aqua */ -.css .hljs-hexcolor { - color: #1999b3; -} - -/* Atelier Seaside Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #3d62f5; -} - -/* Atelier Seaside Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ad2bee; -} - -.hljs { - display: block; - background: #242924; - color: #8ca68c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css deleted file mode 100644 index e86c44d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Seaside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Seaside Light Comment */ -.hljs-comment, -.hljs-title { - color: #687d68; -} - -/* Atelier Seaside Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #e6193c; -} - -/* Atelier Seaside Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #87711d; -} - -/* Atelier Seaside Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #c3c322; -} - -/* Atelier Seaside Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #29a329; -} - -/* Atelier Seaside Light Aqua */ -.css .hljs-hexcolor { - color: #1999b3; -} - -/* Atelier Seaside Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #3d62f5; -} - -/* Atelier Seaside Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ad2bee; -} - -.hljs { - display: block; - background: #f0fff0; - color: #5e6e5e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css deleted file mode 100644 index 0838fb8f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - -Brown Paper style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - background:#b7a68e url(./brown_papersq.png); -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special, -.hljs-request, -.hljs-status { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-keyword { - color: #363C69; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-number { - color: #2C009F; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula { - color: #802022; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-command { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.8; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png deleted file mode 100644 index 3813903dbf9fa7b1fb5bd11d9534c06667d9056f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18198 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css deleted file mode 100644 index b9426c37..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - -Dark style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #444; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color: white; -} - -.hljs, -.hljs-subst { - color: #DDD; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.ini .hljs-title, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt, -.coffeescript .hljs-attribute { - color: #D88; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #777; -} - -.hljs-keyword, -.hljs-literal, -.hljs-title, -.css .hljs-id, -.hljs-phpdoc, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css deleted file mode 100644 index ae9af353..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css +++ /dev/null @@ -1,153 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #F0F0F0; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-title, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-constant, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.haml .hljs-symbol, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.bash .hljs-variable, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.tex .hljs-special, -.erlang_repl .hljs-function_or_atom, -.asciidoc .hljs-header, -.markdown .hljs-header, -.coffeescript .hljs-attribute { - color: #800; -} - -.smartquote, -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk, -.asciidoc .hljs-blockquote, -.markdown .hljs-blockquote { - color: #888; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.hljs-hexcolor, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.go .hljs-constant, -.hljs-change, -.lasso .hljs-variable, -.makefile .hljs-variable, -.asciidoc .hljs-bullet, -.markdown .hljs-bullet, -.asciidoc .hljs-link_url, -.markdown .hljs-link_url { - color: #080; -} - -.hljs-label, -.hljs-javadoc, -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-important, -.hljs-pseudo, -.hljs-pi, -.haml .hljs-bullet, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula, -.erlang_repl .hljs-reserved, -.hljs-prompt, -.asciidoc .hljs-link_label, -.markdown .hljs-link_label, -.vhdl .hljs-attribute, -.clojure .hljs-attribute, -.asciidoc .hljs-attribute, -.lasso .hljs-attribute, -.coffeescript .hljs-property, -.hljs-phony { - color: #88F -} - -.hljs-keyword, -.hljs-id, -.hljs-title, -.hljs-built_in, -.hljs-aggregate, -.css .hljs-tag, -.hljs-javadoctag, -.hljs-phpdoc, -.hljs-yardoctag, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.go .hljs-typename, -.tex .hljs-command, -.asciidoc .hljs-strong, -.markdown .hljs-strong, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.asciidoc .hljs-emphasis, -.markdown .hljs-emphasis { - font-style: italic; -} - -.nginx .hljs-built_in { - font-weight: normal; -} - -.coffeescript .javascript, -.javascript .xml, -.lasso .markup, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css deleted file mode 100644 index 5026d6cf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css +++ /dev/null @@ -1,132 +0,0 @@ -/* -Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) -*/ - -.hljs { - display: block; padding: 0.5em; - color: #000; - background: #f8f8ff -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #408080; - font-style: italic -} - -.hljs-keyword, -.assignment, -.hljs-literal, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - color: #954121; -} - -.hljs-number, -.hljs-hexcolor { - color: #40a070 -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula { - color: #219161; -} - -.hljs-title, -.hljs-id { - color: #19469D; -} -.hljs-params { - color: #00F; -} - -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - font-weight: normal -} - -.hljs-class .hljs-title, -.haskell .hljs-label, -.tex .hljs-command { - color: #458; - font-weight: bold -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal -} - -.hljs-attribute, -.hljs-variable, -.instancevar, -.lisp .hljs-body { - color: #008080 -} - -.hljs-regexp { - color: #B68 -} - -.hljs-class { - color: #458; - font-weight: bold -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-symbol .hljs-keyword, -.ruby .hljs-symbol .keymethods, -.lisp .hljs-keyword, -.tex .hljs-special, -.input_number { - color: #990073 -} - -.builtin, -.constructor, -.hljs-built_in, -.lisp .hljs-title { - color: #0086b3 -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold -} - -.hljs-deletion { - background: #fdd -} - -.hljs-addition { - background: #dfd -} - -.diff .hljs-change { - background: #0086b3 -} - -.hljs-chunk { - color: #aaa -} - -.tex .hljs-formula { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css deleted file mode 100644 index be505362..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css +++ /dev/null @@ -1,113 +0,0 @@ -/* - -FAR Style (c) MajestiC <majestic2k@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000080; -} - -.hljs, -.hljs-subst { - color: #0FF; -} - -.hljs-string, -.ruby .hljs-string, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.css .hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.clojure .hljs-title, -.coffeescript .hljs-attribute { - color: #FF0; -} - -.hljs-keyword, -.css .hljs-id, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.xml .hljs-tag .hljs-title, -.hljs-winutils, -.hljs-flow, -.hljs-change, -.hljs-envvar, -.bash .hljs-variable, -.tex .hljs-special, -.clojure .hljs-built_in { - color: #FFF; -} - -.hljs-comment, -.hljs-phpdoc, -.hljs-javadoc, -.java .hljs-annotation, -.hljs-template_comment, -.hljs-deletion, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #888; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.clojure .hljs-attribute { - color: #0F0; -} - -.python .hljs-decorator, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.xml .hljs-pi, -.diff .hljs-header, -.hljs-chunk, -.hljs-shebang, -.nginx .hljs-built_in, -.hljs-prompt { - color: #008080; -} - -.hljs-keyword, -.css .hljs-id, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.hljs-winutils, -.hljs-flow, -.apache .hljs-tag, -.nginx .hljs-built_in, -.tex .hljs-command, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css deleted file mode 100644 index 0710a10f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css +++ /dev/null @@ -1,133 +0,0 @@ -/* -Description: Foundation 4 docs style for highlight.js -Author: Dan Allen <dan.j.allen@gmail.com> -Website: http://foundation.zurb.com/docs/ -Version: 1.0 -Date: 2013-04-02 -*/ - -.hljs { - display: block; padding: 0.5em; - background: #eee; -} - -.hljs-header, -.hljs-decorator, -.hljs-annotation { - color: #000077; -} - -.hljs-horizontal_rule, -.hljs-link_url, -.hljs-emphasis, -.hljs-attribute { - color: #070; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-link_label, -.hljs-strong, -.hljs-value, -.hljs-string, -.scss .hljs-value .hljs-string { - color: #d14; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-blockquote, -.hljs-comment { - color: #998; - font-style: italic; -} - -.asciidoc .hljs-title, -.hljs-function .hljs-title { - color: #900; -} - -.hljs-class { - color: #458; -} - -.hljs-id, -.hljs-pseudo, -.hljs-constant, -.hljs-hexcolor { - color: teal; -} - -.hljs-variable { - color: #336699; -} - -.hljs-bullet, -.hljs-javadoc { - color: #997700; -} - -.hljs-pi, -.hljs-doctype { - color: #3344bb; -} - -.hljs-code, -.hljs-number { - color: #099; -} - -.hljs-important { - color: #f00; -} - -.smartquote, -.hljs-label { - color: #970; -} - -.hljs-preprocessor, -.hljs-pragma { - color: #579; -} - -.hljs-reserved, -.hljs-keyword, -.scss .hljs-value { - color: #000; -} - -.hljs-regexp { - background-color: #fff0ff; - color: #880088; -} - -.hljs-symbol { - color: #990073; -} - -.hljs-symbol .hljs-string { - color: #a60; -} - -.hljs-tag { - color: #007700; -} - -.hljs-at_rule, -.hljs-at_rule .hljs-keyword { - color: #088; -} - -.hljs-at_rule .hljs-preprocessor { - color: #808; -} - -.scss .hljs-tag, -.scss .hljs-attribute { - color: #339; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css deleted file mode 100644 index 5517086b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css +++ /dev/null @@ -1,125 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #333; - background: #f8f8f8 -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #099; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula { - color: #d14 -} - -.hljs-title, -.hljs-id, -.coffeescript .hljs-params, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold -} - -.javascript .hljs-title, -.lisp .hljs-title, -.clojure .hljs-title, -.hljs-subst { - font-weight: normal -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080 -} - -.hljs-regexp { - color: #009926 -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073 -} - -.hljs-built_in, -.lisp .hljs-title, -.clojure .hljs-built_in { - color: #0086b3 -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold -} - -.hljs-deletion { - background: #fdd -} - -.hljs-addition { - background: #dfd -} - -.diff .hljs-change { - background: #0086b3 -} - -.hljs-chunk { - color: #aaa -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css deleted file mode 100644 index 5cc49b68..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css +++ /dev/null @@ -1,147 +0,0 @@ -/* - -Google Code style (c) Aahan Krish <geekpanth3r@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-comment * { - color: #800; -} - -.hljs-keyword, -.method, -.hljs-list .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.hljs-tag .hljs-title, -.setting .hljs-value, -.hljs-winutils, -.tex .hljs-command, -.http .hljs-title, -.hljs-request, -.hljs-status { - color: #008; -} - -.hljs-envvar, -.tex .hljs-special { - color: #660; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.hljs-regexp, -.coffeescript .hljs-attribute { - color: #080; -} - -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.ini .hljs-title, -.hljs-shebang, -.hljs-prompt, -.hljs-hexcolor, -.hljs-rules .hljs-value, -.css .hljs-value .hljs-number, -.hljs-literal, -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number, -.css .hljs-function, -.clojure .hljs-attribute { - color: #066; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.hljs-typename, -.hljs-tag .hljs-attribute, -.hljs-doctype, -.hljs-class .hljs-id, -.hljs-built_in, -.setting, -.hljs-params, -.hljs-variable, -.clojure .hljs-title { - color: #606; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.hljs-subst { - color: #000; -} - -.css .hljs-class, -.css .hljs-id { - color: #9B703F; -} - -.hljs-value .hljs-important { - color: #ff7700; - font-weight: bold; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #444; -} - -.tex .hljs-formula { - background-color: #EEE; - font-style: italic; -} - -.diff .hljs-header, -.hljs-chunk { - color: #808080; - font-weight: bold; -} - -.diff .hljs-change { - background-color: #BCCFF9; -} - -.hljs-addition { - background-color: #BAEEBA; -} - -.hljs-deletion { - background-color: #FFC8BD; -} - -.hljs-comment .hljs-yardoctag { - font-weight: bold; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css deleted file mode 100644 index 3e810c5f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css +++ /dev/null @@ -1,122 +0,0 @@ -/* - -Intellij Idea-like styling (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #000; - background: #fff; -} - -.hljs-subst, -.hljs-title { - font-weight: normal; - color: #000; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.diff .hljs-header { - color: #808080; - font-style: italic; -} - -.hljs-annotation, -.hljs-decorator, -.hljs-preprocessor, -.hljs-pragma, -.hljs-doctype, -.hljs-pi, -.hljs-chunk, -.hljs-shebang, -.apache .hljs-cbracket, -.hljs-prompt, -.http .hljs-title { - color: #808000; -} - -.hljs-tag, -.hljs-pi { - background: #efefef; -} - -.hljs-tag .hljs-title, -.hljs-id, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-literal, -.hljs-keyword, -.hljs-hexcolor, -.css .hljs-function, -.ini .hljs-title, -.css .hljs-class, -.hljs-list .hljs-title, -.clojure .hljs-title, -.nginx .hljs-title, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; - color: #000080; -} - -.hljs-attribute, -.hljs-rules .hljs-keyword, -.hljs-number, -.hljs-date, -.hljs-regexp, -.tex .hljs-special { - font-weight: bold; - color: #0000ff; -} - -.hljs-number, -.hljs-regexp { - font-weight: normal; -} - -.hljs-string, -.hljs-value, -.hljs-filter .hljs-argument, -.css .hljs-function .hljs-params, -.apache .hljs-tag { - color: #008000; - font-weight: bold; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-char, -.tex .hljs-formula { - color: #000; - background: #d0eded; - font-style: italic; -} - -.hljs-phpdoc, -.hljs-yardoctag, -.hljs-javadoctag { - text-decoration: underline; -} - -.hljs-variable, -.hljs-envvar, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #660e7a; -} - -.hljs-addition { - background: #baeeba; -} - -.hljs-deletion { - background: #ffc8bd; -} - -.diff .hljs-change { - background: #bccff9; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css deleted file mode 100644 index 66f7c193..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - IR_Black style (c) Vasily Mikhailitchenko <vaskas@programica.ru> -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000; color: #f8f8f8; -} - -.hljs-shebang, -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc { - color: #7c7c7c; -} - -.hljs-keyword, -.hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status, -.clojure .hljs-attribute { - color: #96CBFE; -} - -.hljs-sub .hljs-keyword, -.method, -.hljs-list .hljs-title, -.nginx .hljs-title { - color: #FFFFB6; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.coffeescript .hljs-attribute { - color: #A8FF60; -} - -.hljs-subst { - color: #DAEFA3; -} - -.hljs-regexp { - color: #E9C062; -} - -.hljs-title, -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-decorator, -.tex .hljs-special, -.haskell .hljs-type, -.hljs-constant, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.nginx .hljs-built_in { - color: #FFFFB6; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number, -.hljs-variable, -.vbscript, -.hljs-literal { - color: #C6C5FE; -} - -.css .hljs-tag { - color: #96CBFE; -} - -.css .hljs-rules .hljs-property, -.css .hljs-id { - color: #FFFFB6; -} - -.css .hljs-class { - color: #FFF; -} - -.hljs-hexcolor { - color: #C6C5FE; -} - -.hljs-number { - color:#FF73FD; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.7; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css deleted file mode 100644 index bc69a377..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css +++ /dev/null @@ -1,122 +0,0 @@ -/* -Description: Magula style for highligh.js -Author: Ruslan Keba <rukeba@gmail.com> -Website: http://rukeba.com/ -Version: 1.0 -Date: 2009-01-03 -Music: Aphex Twin / Xtal -*/ - -.hljs { - display: block; padding: 0.5em; - background-color: #f4f4f4; -} - -.hljs, -.hljs-subst, -.lisp .hljs-title, -.clojure .hljs-built_in { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.bash .hljs-variable, -.apache .hljs-cbracket, -.coffeescript .hljs-attribute { - color: #050; -} - -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk { - color: #777; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.hljs-change, -.tex .hljs-special { - color: #800; -} - -.hljs-label, -.hljs-javadoc, -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula, -.hljs-prompt, -.clojure .hljs-attribute { - color: #00e; -} - -.hljs-keyword, -.hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-built_in, -.hljs-aggregate, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.xml .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; - color: navy; -} - -.nginx .hljs-built_in { - font-weight: normal; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} - -/* --- */ -.apache .hljs-tag { - font-weight: bold; - color: blue; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css deleted file mode 100644 index bfe2495b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css +++ /dev/null @@ -1,62 +0,0 @@ -/* - Five-color theme from a single blue hue. -*/ -.hljs { - display: block; padding: 0.5em; - background: #EAEEF3; color: #00193A; -} - -.hljs-keyword, -.hljs-title, -.hljs-important, -.hljs-request, -.hljs-header, -.hljs-javadoctag { - font-weight: bold; -} - -.hljs-comment, -.hljs-chunk, -.hljs-template_comment { - color: #738191; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-built_in, -.hljs-literal, -.hljs-filename, -.hljs-value, -.hljs-addition, -.hljs-tag, -.hljs-argument, -.hljs-link_label, -.hljs-blockquote, -.hljs-header { - color: #0048AB; -} - -.hljs-decorator, -.hljs-prompt, -.hljs-yardoctag, -.hljs-subst, -.hljs-symbol, -.hljs-doctype, -.hljs-regexp, -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-attribute, -.hljs-attr_selector, -.hljs-javadoc, -.hljs-xmlDocTag, -.hljs-deletion, -.hljs-shebang, -.hljs-string .hljs-variable, -.hljs-link_url, -.hljs-bullet, -.hljs-sqbracket, -.hljs-phony { - color: #4C81C9; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css deleted file mode 100644 index 34cd4f9e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css +++ /dev/null @@ -1,127 +0,0 @@ -/* -Monokai style - ported by Luigi Maselli - http://grigio.org -*/ - -.hljs { - display: block; padding: 0.5em; - background: #272822; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-keyword, -.hljs-literal, -.hljs-strong, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color: #F92672; -} - -.hljs { - color: #DDD; -} - -.hljs .hljs-constant, -.asciidoc .hljs-code { - color: #66D9EF; -} - -.hljs-code, -.hljs-class .hljs-title, -.hljs-header { - color: white; -} - -.hljs-link_label, -.hljs-attribute, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-value, -.hljs-regexp { - color: #BF79DB; -} - -.hljs-link_url, -.hljs-tag .hljs-value, -.hljs-string, -.hljs-bullet, -.hljs-subst, -.hljs-title, -.hljs-emphasis, -.haskell .hljs-type, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt { - color: #A6E22E; -} - -.hljs-comment, -.java .hljs-annotation, -.smartquote, -.hljs-blockquote, -.hljs-horizontal_rule, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #75715E; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-header, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css deleted file mode 100644 index 2d216333..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css +++ /dev/null @@ -1,149 +0,0 @@ -/* - -Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #23241f; -} - -.hljs, -.hljs-tag, -.css .hljs-rules, -.css .hljs-value, -.css .hljs-function -.hljs-preprocessor, -.hljs-pragma { - color: #f8f8f2; -} - -.hljs-strongemphasis, -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-blockquote, -.hljs-horizontal_rule, -.hljs-number, -.hljs-regexp, -.alias .hljs-keyword, -.hljs-literal, -.hljs-hexcolor { - color: #ae81ff; -} - -.hljs-tag .hljs-value, -.hljs-code, -.hljs-title, -.css .hljs-class, -.hljs-class .hljs-title:last-child { - color: #a6e22e; -} - -.hljs-link_url { - font-size: 80%; -} - -.hljs-strong, -.hljs-strongemphasis { - font-weight: bold; -} - -.hljs-emphasis, -.hljs-strongemphasis, -.hljs-class .hljs-title:last-child { - font-style: italic; -} - -.hljs-keyword, -.hljs-function, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special, -.hljs-header, -.hljs-attribute, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-tag .hljs-title, -.hljs-value, -.alias .hljs-keyword:first-child, -.css .hljs-tag, -.css .unit, -.css .hljs-important { - color: #F92672; -} - -.hljs-function .hljs-keyword, -.hljs-class .hljs-keyword:first-child, -.hljs-constant, -.css .hljs-attribute { - color: #66d9ef; -} - -.hljs-variable, -.hljs-params, -.hljs-class .hljs-title { - color: #f8f8f2; -} - -.hljs-string, -.css .hljs-id, -.hljs-subst, -.haskell .hljs-type, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt, -.hljs-link_label, -.hljs-link_url { - color: #e6db74; -} - -.hljs-comment, -.hljs-javadoc, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #75715e; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata, -.xml .php, -.php .xml { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css deleted file mode 100644 index 68259fc8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Obsidian style - * ported by Alexander Marenin (http://github.com/ioncreature) - */ - -.hljs { - display: block; padding: 0.5em; - background: #282B2E; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.css .hljs-id, -.tex .hljs-special { - color: #93C763; -} - -.hljs-number { - color: #FFCD22; -} - -.hljs { - color: #E0E2E4; -} - -.css .hljs-tag, -.css .hljs-pseudo { - color: #D0D2B5; -} - -.hljs-attribute, -.hljs .hljs-constant { - color: #668BB0; -} - -.xml .hljs-attribute { - color: #B3B689; -} - -.xml .hljs-tag .hljs-value { - color: #E8E2B7; -} - -.hljs-code, -.hljs-class .hljs-title, -.hljs-header { - color: white; -} - -.hljs-class, -.hljs-hexcolor { - color: #93C763; -} - -.hljs-regexp { - color: #D39745; -} - -.hljs-at_rule, -.hljs-at_rule .hljs-keyword { - color: #A082BD; -} - -.hljs-doctype { - color: #557182; -} - -.hljs-link_url, -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-bullet, -.hljs-subst, -.hljs-emphasis, -.haskell .hljs-type, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt { - color: #8CBBAD; -} - -.hljs-string { - color: #EC7600; -} - -.hljs-comment, -.java .hljs-annotation, -.hljs-blockquote, -.hljs-horizontal_rule, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #818E96; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-header, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-at_rule .hljs-keyword, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css deleted file mode 100644 index 55d02f1d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* - Paraíso (dark) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-title { - color: #8d8687; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99b15; -} - -/* Paraíso Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #48b685; -} - -/* Paraíso Aqua */ -.css .hljs-hexcolor { - color: #5bc4bf; -} - -/* Paraíso Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #06b6ef; -} - -/* Paraíso Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #815ba4; -} - -.hljs { - display: block; - background: #2f1e2e; - color: #a39e9b; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css deleted file mode 100644 index d29ee1b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* - Paraíso (light) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-title { - color: #776e71; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99b15; -} - -/* Paraíso Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #48b685; -} - -/* Paraíso Aqua */ -.css .hljs-hexcolor { - color: #5bc4bf; -} - -/* Paraíso Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #06b6ef; -} - -/* Paraíso Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #815ba4; -} - -.hljs { - display: block; - background: #e7e9db; - color: #4f424c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css deleted file mode 100644 index 86307929..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css +++ /dev/null @@ -1,106 +0,0 @@ -/* - -Pojoaque Style by Jason Tate -http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html -Based on Solarized Style from http://ethanschoonover.com/solarized - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #DCCF8F; - background: url(./pojoaque.jpg) repeat scroll left top #181914; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.lisp .hljs-string, -.hljs-javadoc { - color: #586e75; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.method, -.hljs-addition, -.css .hljs-tag, -.clojure .hljs-title, -.nginx .hljs-title { - color: #B64926; -} - -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor { - color: #468966; -} - -.hljs-title, -.hljs-localvars, -.hljs-function .hljs-title, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.lisp .hljs-title, -.clojure .hljs-built_in, -.hljs-identifier, -.hljs-id { - color: #FFB03B; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type { - color: #b58900; -} - -.css .hljs-attribute { - color: #b89859; -} - -.css .hljs-number, -.css .hljs-hexcolor { - color: #DCCF8F; -} - -.css .hljs-class { - color: #d3a60c; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-important, -.hljs-subst, -.hljs-cdata { - color: #cb4b16; -} - -.hljs-deletion { - color: #dc322f; -} - -.tex .hljs-formula { - background: #073642; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg deleted file mode 100644 index 9c07d4ab40b6d77e90ff69f0012bcd33b21d31c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 zcmZXSe^8Tk9LK-kXFs3)f@f?)Cddzw3v4wdZyXQ;4x3=;Ja*N#%n9ik!UGmt9H3k0 zJST|5jOc(ID$FQt3C?jQZBws#kXolO1lg9Pba9BB=Q+UEBX!nY@6Uhl&+ofe$Q$y5 z@ci`~)&qzDP(lO<O#w_=Ra{yPARq$(#Dp~sI5{Qw_V+=FlW<^Y6zm5ml}e>iQ5p?p z(`j^e7!yUAVHk%K#^GQXn?s0=VLYCI$HRoe=xCuZ>A6<E5Jc&8l!3As3|1J6!wQRd z-V(uI9KaVwV1y!skwSq$AdHNO5ej2s5)+pvCcfxj8FB)Q4jMoM2_^spgCq=wu7Iro zLP#9>A3@sxEP#XqNFpIb=0)KQ#Nss_tD17;m4@$JKL;LR|K|QF3f%!L5+s(9Ft8SQ zG|~pGp<w4_&QCo@xn1P1M0j6PuuaUUx?w)Q15Ksdv-E1Uyr8jff%m|S;O0KGX4?5u zcY>EGFW5Z|OA)-O@mNHy-g@7m8JTf?kl@vUKBGmw)Y*9sDRNr3PN!IKefWaydTe1D zjzpyzPnD3}hBNaS4aFX7=0&~I*<I1gl);;MHu4&K1%I;}H}}pdeV}msD&8ZuzDzH< zjs%}^eZx9tj&Cj4Rem!m7?W9-;wPH|CTw__Q8b>Hu7#4au@qVBglH#-m;QFOx_`=j z{EqRY#Eh*yoWP^pa4H>8GH{rO?!_+xwL0(k4yL^D%^nBkJ*UI;Lx;ped8d|f*S_s@ z3~ilcRC(&NT#9Gn#UD;o^EYSMXDMf%XcUi3>;WXXD-QX3P9wMy<Tt*(wEUr;=}T08 zwr4iQLXQt-4U$zHxQBaftQf(Yp<ET%udI>P7eA&RS{)h5{??W3^Rq=goFJ>?lA~J- zdYe>!xvYLW*fPT0RK7wsJRg^?x#W1*GP9<C`ZfC?$$I3ZovN#F=y~=x<iwqpGc&Fa z!>_f`6t>QD_X>0d!owyN>nO2?U5}|3?hX_UZYT@^>S!9eB~bZ9U`q;`U)@L670o1g z`Hd<uZEy9yjY6-c(?%?S4=3`QI_=xfg529VWEEJk$>}h<_WR<Zc1@js5HPhhe{UnV z+qpwizwrJv_3wqH(KR=Zp2|HqVCv6SNX`wV`OPQRXJj)}%e$t=$MRdar)ZmEr9R!$ z<l(H`+bxXKz73<WvNG=#;y(f(W{xUg<V#f`{pr)>vUc|n*%v4Hbb-4tJD40iyF^<n zrd(ZUzA$o-V2Gj0TB0p$%WvWRao2gif1>q%g*&!6>hkYDvi-<Lx9G?TP4>{Uc4yTM zzcthN4Z{ka!+F_KzYV#yWi;c^X^q6g`pD8cp?$Kl?hCz0s^a|mH%P!CF%*<6k^~i` zT5Mi-t5-frUcHkk^Qh}+N)Kz1&Bi95`oNc|quI>tUi~BY>xcF9(%tv2i{G6kE9*q~ qCoAGl20`)w0rdgp9H%Q=M5|p`hOhFz6$I%Y&ncY8>c?7PXyh+SL&XXJ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css deleted file mode 100644 index 83d0cde5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css +++ /dev/null @@ -1,182 +0,0 @@ -/* - -Railscasts-like style (c) Visoft, Inc. (Damien White) - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #232323; - color: #E6E1DC; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-shebang { - color: #BC9458; - font-style: italic; -} - -.hljs-keyword, -.ruby .hljs-function .hljs-keyword, -.hljs-request, -.hljs-status, -.nginx .hljs-title, -.method, -.hljs-list .hljs-title { - color: #C26230; -} - -.hljs-string, -.hljs-number, -.hljs-regexp, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.tex .hljs-command, -.markdown .hljs-link_label { - color: #A5C261; -} - -.hljs-subst { - color: #519F50; -} - -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-tag .hljs-title, -.hljs-doctype, -.hljs-sub .hljs-identifier, -.hljs-pi, -.input_number { - color: #E8BF6A; -} - -.hljs-identifier { - color: #D0D0FF; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc { - text-decoration: none; -} - -.hljs-constant { - color: #DA4939; -} - - -.hljs-symbol, -.hljs-built_in, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-symbol .hljs-identifier, -.markdown .hljs-link_url, -.hljs-attribute { - color: #6D9CBE; -} - -.markdown .hljs-link_url { - text-decoration: underline; -} - - - -.hljs-params, -.hljs-variable, -.clojure .hljs-attribute { - color: #D0D0FF; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.tex .hljs-special { - color: #CDA869; -} - -.css .hljs-class { - color: #9B703F; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-rules .hljs-value { - color: #CF6A4C; -} - -.css .hljs-id { - color: #8B98AB; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #8996A8 !important; -} - -.hljs-hexcolor, -.css .hljs-value .hljs-number { - color: #A5C261; -} - -.hljs-title, -.hljs-decorator, -.css .hljs-function { - color: #FFC66D; -} - -.diff .hljs-header, -.hljs-chunk { - background-color: #2F33AB; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.diff .hljs-change { - background-color: #4A410D; - color: #F8F8F8; - display: inline-block; - width: 100%; -} - -.hljs-addition { - background-color: #144212; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #600; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.7; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css deleted file mode 100644 index 08142466..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - -Style with support for rainbow parens - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #474949; color: #D1D9E1; -} - - -.hljs-body, -.hljs-collection { - color: #D1D9E1; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.lisp .hljs-string, -.hljs-javadoc { - color: #969896; - font-style: italic; -} - -.hljs-keyword, -.clojure .hljs-attribute, -.hljs-winutils, -.javascript .hljs-title, -.hljs-addition, -.css .hljs-tag { - color: #cc99cc; -} - -.hljs-number { color: #f99157; } - -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor { - color: #8abeb7; -} - -.hljs-title, -.hljs-localvars, -.hljs-function .hljs-title, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.lisp .hljs-title, -.hljs-identifier -{ - color: #b5bd68; -} - -.hljs-class .hljs-keyword -{ - color: #f2777a; -} - -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-label, -.hljs-id, -.lisp .hljs-title, -.clojure .hljs-title .hljs-built_in { - color: #ffcc66; -} - -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword, -.clojure .hljs-title .hljs-built_in { - font-weight: bold; -} - -.hljs-attribute, -.clojure .hljs-title { - color: #81a2be; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-important, -.hljs-subst, -.hljs-cdata { - color: #f99157; -} - -.hljs-deletion { - color: #dc322f; -} - -.tex .hljs-formula { - background: #eee8d5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css deleted file mode 100644 index a36e8362..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css +++ /dev/null @@ -1,113 +0,0 @@ -/* - -School Book style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net> - -*/ - -.hljs { - display: block; padding: 15px 0.5em 0.5em 30px; - font-size: 11px !important; - line-height:16px !important; -} - -pre{ - background:#f6f6ae url(./school_book.png); - border-top: solid 2px #d2e8b9; - border-bottom: solid 1px #d2e8b9; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-keyword { - color: #3E5915; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.nginx .hljs-built_in, -.tex .hljs-command, -.coffeescript .hljs-attribute { - color: #2C009F; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket { - color: #E60415; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.xml .hljs-tag .hljs-title, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png deleted file mode 100644 index 956e9790a0e2c079b3d568348ff3accd1d9cac30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yV7?7x3vjRjNjAS6Ga$v1?&#~tz_9*=IcwKTAYZb? zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|R4)r;B4q#jQ7Ycl#YS5MfK$ z?b^fh#qmaEhFDxvyThwfhdfkOPApt1lr{NA;Vr%uzxJuVIyzm(ed_<E=VqS`p8l-k zMtpHz{$@YRySeLE*Ya}$?Ok`{te)BVtcjm@Ca0ycGcY`ur8@;E%+QhxBm}lGGB7yY z0680(Z#S8FKUh{@M?@OPNCXi`Y7>8_-0$LLU})H&o5Re&aDemE>EG#(|F^t9_pa-H z_Mf?rMVrs}-M?S|?ZdY@c6s41zy8~}@a{v&#Ea7V)wJ$+#K|u$<a;jco6PrHvRYR7 zd%!Bk+<CfxufI!;xGfPoxmaf1$vs==)R}qJUdyr#eg1fxWvS-#bL&}n`+t3#d9p8N z!?kDKTLZga?|R;GcVE5XB+g&IH(a^x?fZ81;t8fvzjU{H8y{PLR#EDh##{B^#6KJN zOib&U@Ahrg;rF_q!%YQaoy1Q|n*P>5UvWCdFLwGac}6w{_s*=8A6L7Rfc|9gboFyt I=akR{0OLZ+qyPW_ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css deleted file mode 100644 index 970d5f81..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css +++ /dev/null @@ -1,107 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com> - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #002b36; - color: #839496; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.hljs-pi, -.lisp .hljs-string, -.hljs-javadoc { - color: #586e75; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-winutils, -.method, -.hljs-addition, -.css .hljs-tag, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor, -.hljs-link_url { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-localvars, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.hljs-identifier, -.vhdl .hljs-literal, -.hljs-id, -.css .hljs-function { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type, -.hljs-link_reference { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-preprocessor, -.hljs-preprocessor .hljs-keyword, -.hljs-pragma, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-subst, -.hljs-cdata, -.clojure .hljs-title, -.css .hljs-pseudo, -.hljs-header { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-deletion, -.hljs-important { - color: #dc322f; -} - -/* Solarized Violet */ -.hljs-link_label { - color: #6c71c4; -} - -.tex .hljs-formula { - background: #073642; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css deleted file mode 100644 index 8e1f4365..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css +++ /dev/null @@ -1,107 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com> - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #fdf6e3; - color: #657b83; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.hljs-pi, -.lisp .hljs-string, -.hljs-javadoc { - color: #93a1a1; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-winutils, -.method, -.hljs-addition, -.css .hljs-tag, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor, -.hljs-link_url { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-localvars, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.hljs-identifier, -.vhdl .hljs-literal, -.hljs-id, -.css .hljs-function { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type, -.hljs-link_reference { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-preprocessor, -.hljs-preprocessor .hljs-keyword, -.hljs-pragma, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-subst, -.hljs-cdata, -.clojure .hljs-title, -.css .hljs-pseudo, -.hljs-header { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-deletion, -.hljs-important { - color: #dc322f; -} - -/* Solarized Violet */ -.hljs-link_label { - color: #6c71c4; -} - -.tex .hljs-formula { - background: #eee8d5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css deleted file mode 100644 index 8816520c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css +++ /dev/null @@ -1,160 +0,0 @@ -/* - -Sunburst-like style (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000; color: #f8f8f8; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc { - color: #aeaeae; - font-style: italic; -} - -.hljs-keyword, -.ruby .hljs-function .hljs-keyword, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #E28964; -} - -.hljs-function .hljs-keyword, -.hljs-sub .hljs-keyword, -.method, -.hljs-list .hljs-title { - color: #99CF50; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.tex .hljs-command, -.coffeescript .hljs-attribute { - color: #65B042; -} - -.hljs-subst { - color: #DAEFA3; -} - -.hljs-regexp { - color: #E9C062; -} - -.hljs-title, -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.hljs-shebang, -.hljs-prompt { - color: #89BDFF; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc { - text-decoration: underline; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number { - color: #3387CC; -} - -.hljs-params, -.hljs-variable, -.clojure .hljs-attribute { - color: #3E87E3; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.tex .hljs-special { - color: #CDA869; -} - -.css .hljs-class { - color: #9B703F; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-rules .hljs-value { - color: #CF6A4C; -} - -.css .hljs-id { - color: #8B98AB; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-pragma { - color: #8996A8; -} - -.hljs-hexcolor, -.css .hljs-value .hljs-number { - color: #DD7B3B; -} - -.css .hljs-function { - color: #DAD085; -} - -.diff .hljs-header, -.hljs-chunk, -.tex .hljs-formula { - background-color: #0E2231; - color: #F8F8F8; - font-style: italic; -} - -.diff .hljs-change { - background-color: #4A410D; - color: #F8F8F8; -} - -.hljs-addition { - background-color: #253B22; - color: #F8F8F8; -} - -.hljs-deletion { - background-color: #420E09; - color: #F8F8F8; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css deleted file mode 100644 index e63ab3de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Tomorrow Night Blue Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #7285b7; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ff9da4; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #ffc58f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #ffeead; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #d1f1a9; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #99ffff; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #bbdaff; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ebbbff; -} - -.hljs { - display: block; - background: #002451; - color: white; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css deleted file mode 100644 index 3bbf367d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css +++ /dev/null @@ -1,92 +0,0 @@ -/* Tomorrow Night Bright Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d54e53; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #e78c45; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #e7c547; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #b9ca4a; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #70c0b1; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #7aa6da; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #c397d8; -} - -.hljs { - display: block; - background: black; - color: #eaeaea; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css deleted file mode 100644 index b8de0dbf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css +++ /dev/null @@ -1,92 +0,0 @@ -/* Tomorrow Night Eighties Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #999999; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f2777a; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99157; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #ffcc66; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #99cc99; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #66cccc; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6699cc; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #cc99cc; -} - -.hljs { - display: block; - background: #2d2d2d; - color: #cccccc; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css deleted file mode 100644 index 54ceb585..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Tomorrow Night Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #cc6666; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #de935f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #f0c674; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #b5bd68; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #8abeb7; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #81a2be; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b294bb; -} - -.hljs { - display: block; - background: #1d1f21; - color: #c5c8c6; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css deleted file mode 100644 index a81a2e85..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css +++ /dev/null @@ -1,90 +0,0 @@ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #8e908c; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #c82829; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f5871f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #eab700; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #718c00; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #3e999f; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #4271ae; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #8959a8; -} - -.hljs { - display: block; - background: white; - color: #4d4d4c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css deleted file mode 100644 index 5ebf4541..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css +++ /dev/null @@ -1,89 +0,0 @@ -/* - -Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name> - -*/ -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk, -.apache .hljs-cbracket { - color: #008000; -} - -.hljs-keyword, -.hljs-id, -.hljs-built_in, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.tex .hljs-command, -.hljs-request, -.hljs-status, -.nginx .hljs-title, -.xml .hljs-tag, -.xml .hljs-tag .hljs-value { - color: #00f; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.apache .hljs-tag, -.hljs-date, -.tex .hljs-formula, -.coffeescript .hljs-attribute { - color: #a31515; -} - -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.hljs-preprocessor, -.hljs-pragma, -.userType, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-special, -.hljs-prompt { - color: #2b91af; -} - -.hljs-phpdoc, -.hljs-javadoc, -.hljs-xmlDocTag { - color: #808080; -} - -.vhdl .hljs-typename { font-weight: bold; } -.vhdl .hljs-string { color: #666666; } -.vhdl .hljs-literal { color: #a31515; } -.vhdl .hljs-attribute { color: #00B0E8; } - -.xml .hljs-attribute { color: #f00; } diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css deleted file mode 100644 index 8d54da72..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css +++ /dev/null @@ -1,158 +0,0 @@ -/* - -XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #fff; color: black; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-comment * { - color: #006a00; -} - -.hljs-keyword, -.hljs-literal, -.nginx .hljs-title { - color: #aa0d91; -} -.method, -.hljs-list .hljs-title, -.hljs-tag .hljs-title, -.setting .hljs-value, -.hljs-winutils, -.tex .hljs-command, -.http .hljs-title, -.hljs-request, -.hljs-status { - color: #008; -} - -.hljs-envvar, -.tex .hljs-special { - color: #660; -} - -.hljs-string { - color: #c41a16; -} -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.hljs-regexp { - color: #080; -} - -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.ini .hljs-title, -.hljs-shebang, -.hljs-prompt, -.hljs-hexcolor, -.hljs-rules .hljs-value, -.css .hljs-value .hljs-number, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-number, -.css .hljs-function, -.clojure .hljs-title, -.clojure .hljs-built_in, -.hljs-function .hljs-title, -.coffeescript .hljs-attribute { - color: #1c00cf; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.hljs-typename, -.hljs-tag .hljs-attribute, -.hljs-doctype, -.hljs-class .hljs-id, -.hljs-built_in, -.setting, -.hljs-params, -.clojure .hljs-attribute { - color: #5c2699; -} - -.hljs-variable { - color: #3f6e74; -} -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.hljs-subst { - color: #000; -} - -.css .hljs-class, -.css .hljs-id { - color: #9B703F; -} - -.hljs-value .hljs-important { - color: #ff7700; - font-weight: bold; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #643820; -} - -.tex .hljs-formula { - background-color: #EEE; - font-style: italic; -} - -.diff .hljs-header, -.hljs-chunk { - color: #808080; - font-weight: bold; -} - -.diff .hljs-change { - background-color: #BCCFF9; -} - -.hljs-addition { - background-color: #BAEEBA; -} - -.hljs-deletion { - background-color: #FFC8BD; -} - -.hljs-comment .hljs-yardoctag { - font-weight: bold; -} - -.method .hljs-id { - color: #000; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css deleted file mode 100644 index 3e6a6871..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css +++ /dev/null @@ -1,116 +0,0 @@ -/* - -Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru> -based on dark.css by Ivan Sagalaev - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #3F3F3F; - color: #DCDCDC; -} - -.hljs-keyword, -.hljs-tag, -.css .hljs-class, -.css .hljs-id, -.lisp .hljs-title, -.nginx .hljs-title, -.hljs-request, -.hljs-status, -.clojure .hljs-attribute { - color: #E3CEAB; -} - -.django .hljs-template_tag, -.django .hljs-variable, -.django .hljs-filter .hljs-argument { - color: #DCDCDC; -} - -.hljs-number, -.hljs-date { - color: #8CD0D3; -} - -.dos .hljs-envvar, -.dos .hljs-stream, -.hljs-variable, -.apache .hljs-sqbracket { - color: #EFDCBC; -} - -.dos .hljs-flow, -.diff .hljs-change, -.python .exception, -.python .hljs-built_in, -.hljs-literal, -.tex .hljs-special { - color: #EFEFAF; -} - -.diff .hljs-chunk, -.hljs-subst { - color: #8F8F8F; -} - -.dos .hljs-keyword, -.python .hljs-decorator, -.hljs-title, -.haskell .hljs-type, -.diff .hljs-header, -.ruby .hljs-class .hljs-parent, -.apache .hljs-tag, -.nginx .hljs-built_in, -.tex .hljs-command, -.hljs-prompt { - color: #efef8f; -} - -.dos .hljs-winutils, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-string { - color: #DCA3A3; -} - -.diff .hljs-deletion, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.sql .hljs-aggregate, -.hljs-javadoc, -.smalltalk .hljs-class, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.css .hljs-rules .hljs-value, -.hljs-attr_selector, -.hljs-pseudo, -.apache .hljs-cbracket, -.tex .hljs-formula, -.coffeescript .hljs-attribute { - color: #CC9393; -} - -.hljs-shebang, -.diff .hljs-addition, -.hljs-comment, -.java .hljs-annotation, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype { - color: #7F9F7F; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/plugin.js deleted file mode 100644 index 7301255b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippet/plugin.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){CKEDITOR.tools.extend(this,a);this.queue=[];this.init?this.init(CKEDITOR.tools.bind(function(){for(var a;a=this.queue.pop();)a.call(this);this.ready=!0},this)):this.ready=!0}function l(a){var b=a.config.codeSnippet_codeClass,c=/\r?\n/g,h=new CKEDITOR.dom.element("textarea");a.widgets.add("codeSnippet",{allowedContent:"pre; code(language-*)",requiredContent:"pre",styleableElements:"pre",template:'<pre><code class="'+b+'"></code></pre>',dialog:"codeSnippet",pathName:a.lang.codesnippet.pathName, -mask:!0,parts:{pre:"pre",code:"code"},highlight:function(){var e=this,f=this.data,b=function(a){e.parts.code.setHtml(k?a:a.replace(c,"<br>"))};b(CKEDITOR.tools.htmlEncode(f.code));a._.codesnippet.highlighter.highlight(f.code,f.lang,function(e){a.fire("lockSnapshot");b(e);a.fire("unlockSnapshot")})},data:function(){var a=this.data,b=this.oldData;a.code&&this.parts.code.setHtml(CKEDITOR.tools.htmlEncode(a.code));b&&a.lang!=b.lang&&this.parts.code.removeClass("language-"+b.lang);a.lang&&(this.parts.code.addClass("language-"+ -a.lang),this.highlight());this.oldData=CKEDITOR.tools.copy(a)},upcast:function(e,f){if("pre"==e.name){for(var c=[],d=e.children,i,j=d.length-1;0<=j;j--)i=d[j],(i.type!=CKEDITOR.NODE_TEXT||!i.value.match(m))&&c.push(i);var g;if(!(1!=c.length||"code"!=(g=c[0]).name))if(!(1!=g.children.length||g.children[0].type!=CKEDITOR.NODE_TEXT)){if(c=a._.codesnippet.langsRegex.exec(g.attributes["class"]))f.lang=c[1];h.setHtml(g.getHtml());f.code=h.getValue();g.addClass(b);return e}}},downcast:function(a){var c= -a.getFirst("code");c.children.length=0;c.removeClass(b);c.add(new CKEDITOR.htmlParser.text(CKEDITOR.tools.htmlEncode(this.data.code)));return a}});var m=/^[\s\n\r]*$/}var k=!CKEDITOR.env.ie||8<CKEDITOR.env.version;CKEDITOR.plugins.add("codesnippet",{requires:"widget,dialog",lang:"bg,ca,cs,da,de,el,en,en-gb,eo,es,et,fa,fi,fr,fr-ca,he,hr,hu,it,ja,km,ku,lt,lv,nb,nl,no,pl,pt,pt-br,ro,ru,sk,sl,sq,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"codesnippet",hidpi:!0,beforeInit:function(a){a._.codesnippet={};this.setHighlighter= -function(b){a._.codesnippet.highlighter=b;b=a._.codesnippet.langs=a.config.codeSnippet_languages||b.languages;a._.codesnippet.langsRegex=RegExp("(?:^|\\s)language-("+CKEDITOR.tools.objectKeys(b).join("|")+")(?:\\s|$)")}},onLoad:function(){CKEDITOR.dialog.add("codeSnippet",this.path+"dialogs/codesnippet.js")},init:function(a){a.ui.addButton&&a.ui.addButton("CodeSnippet",{label:a.lang.codesnippet.button,command:"codeSnippet",toolbar:"insert,10"})},afterInit:function(a){var b=this.path;l(a);a._.codesnippet.highlighter|| -this.setHighlighter(new CKEDITOR.plugins.codesnippet.highlighter({languages:{apache:"Apache",bash:"Bash",coffeescript:"CoffeeScript",cpp:"C++",cs:"C#",css:"CSS",diff:"Diff",html:"HTML",http:"HTTP",ini:"INI",java:"Java",javascript:"JavaScript",json:"JSON",makefile:"Makefile",markdown:"Markdown",nginx:"Nginx",objectivec:"Objective-C",perl:"Perl",php:"PHP",python:"Python",ruby:"Ruby",sql:"SQL",vbscript:"VBScript",xhtml:"XHTML",xml:"XML"},init:function(c){var h=this;k&&CKEDITOR.scriptLoader.load(b+"lib/highlight/highlight.pack.js", -function(){h.hljs=window.hljs;c()});a.addContentsCss(b+"lib/highlight/styles/"+a.config.codeSnippet_theme+".css")},highlighter:function(a,b,d){(a=this.hljs.highlightAuto(a,this.hljs.getLanguage(b)?[b]:void 0))&&d(a.value)}}))}});CKEDITOR.plugins.codesnippet={highlighter:d};d.prototype.highlight=function(){var a=arguments;this.ready?this.highlighter.apply(this,a):this.queue.push(function(){this.highlighter.apply(this,a)})}})();CKEDITOR.config.codeSnippet_codeClass="hljs"; -CKEDITOR.config.codeSnippet_theme="default"; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js deleted file mode 100644 index 25b3c209..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("codesnippetgeshi",{requires:"ajax,codesnippet",init:function(c){var d=new CKEDITOR.htmlParser.basicWriter,f=new CKEDITOR.plugins.codesnippet.highlighter({languages:a,highlighter:function(b,a,e){b=JSON.stringify({lang:a,html:b});CKEDITOR.ajax.post(CKEDITOR.getUrl(c.config.codeSnippetGeshi_url||""),b,"application/json",function(a){a?(CKEDITOR.htmlParser.fragment.fromHtml(a||"").children[0].writeChildrenHtml(d),e(d.getHtml(!0))):e("")})}});c.plugins.codesnippet.setHighlighter(f)}}); -var a={abap:"ABAP",actionscript:"ActionScript",ada:"Ada",apache:"Apache Configuration",applescript:"AppleScript",asm:"Assembly",asp:"Active Server Pages (ASP)",autoit:"AutoIt",bash:"Bash",basic4gl:"Basic4GL",bf:"Brainfuck",blitzbasic:"Blitz BASIC",bnf:"Backus-Naur Form",c:"C",c_mac:"C (Mac)",caddcl:"AutoCAD DCL",cadlisp:"AutoLISP",cfdg:"CFDG",cfm:"ColdFusion Markup Language",cil:"Common Intermediate Language (CIL)",cobol:"COBOL","cpp-qt":"C++ (Qt toolkit)",cpp:"C++",csharp:"C#",css:"Cascading Style Sheets (CSS)", -d:"D",delphi:"Delphi",diff:"Diff",div:"DIV",dos:"DOS batch file",dot:"DOT",eiffel:"Eiffel",fortran:"Fortran",freebasic:"FreeBASIC",gambas:"Gambas",genero:"Genero",gettext:"GNU internationalization (i18n) library",glsl:"OpenGL Shading Language (GLSL)",gml:"Game Maker Language (GML)",gnuplot:"gnuplot",groovy:"Groovy",haskell:"Haskell",hq9plus:"HQ9+",html4strict:"HTML",html5:"HTML5",idl:"Uno IDL",ini:"INI",inno:"Inno",intercal:"INTERCAL",io:"Io",java:"Java",java5:"Java(TM) 2 Platform Standard Edition 5.0", -javascript:"JavaScript",kixtart:"KiXtart",klonec:"Klone C",klonecpp:"Klone C++",latex:"LaTeX",lisp:"Lisp",lolcode:"LOLCODE",lotusscript:"LotusScript",lua:"Lua",Code:"Language",m68k:"Motorola 68000 Assembler",make:"make",matlab:"MATLAB M",mirc:"mIRC scripting language",mxml:"MXML",mpasm:"Microchip Assembler",mysql:"MySQL",nsis:"Nullsoft Scriptable Install System (NSIS)",objc:"Objective-C","ocaml-brief":"OCaml",ocaml:"OCaml",oobas:"OpenOffice.org Basic",oracle8:"Oracle 8 SQL",oracle11:"Oracle 11 SQL", -pascal:"Pascal",per:"per",perl:"Perl","php-brief":"PHP",php:"PHP",pixelbender:"Pixel Bender",plsql:"PL/SQL",povray:"Persistence of Vision Raytracer",powershell:"Windows PowerShell",progress:"OpenEdge Advanced Business Language",prolog:"Prolog",providex:"ProvideX",python:"Python",qbasic:"QBasic/QuickBASIC",rails:"Rails",reg:"Windows Registry",robots:"robots.txt",rsplus:"R",ruby:"Ruby",sas:"SAS",scala:"Scala",scheme:"Scheme",scilab:"Scilab",sdlbasic:"SdlBasic",smalltalk:"Smalltalk",smarty:"Smarty", -sql:"SQL",tcl:"Tcl",teraterm:"Tera Term",text:"Plain text",thinbasic:"thinBasic",tsql:"Transact-SQL",typoscript:"TypoScript",vala:"Vala",vb:"Visual Basic",vbnet:"Visual Basic .NET",verilog:"Verilog",vhdl:"VHDL",vim:"Vimscript",visualfoxpro:"Visual FoxPro",visualprolog:"Visual Prolog",whitespace:"Whitespace",winbatch:"Winbatch",xml:"XML",xorg_conf:"Xorg.conf",xpp:"X++",z80:"ZiLOG Z80 Assembler"}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png deleted file mode 100644 index a313938d8bc0f72e3086129816be628c1a7aa100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6 z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch& zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4 zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5 zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58 zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#* zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>a?jz9na diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png deleted file mode 100644 index 54b3e18c4602dbf05cf21e897477998211c02dfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2169 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png deleted file mode 100644 index 8fc56bcbd2185cdf319554c4edfdb161c87fe8b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1725 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 To9;Xs00000NkvXXu0mjf;)5CX diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png deleted file mode 100644 index 0d8e45907bca4c92dc43ced827d1896e968ec27c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4 zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4` z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8 z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig! zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$ OMGT&<elF{r5}E)t`BzH- diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/af.js deleted file mode 100644 index 89a2928c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","af",{auto:"Outomaties",bgColorTitle:"Agtergrondkleur",colors:{"000":"Swart",8E5:"Meroen","8B4513":"Sjokoladebruin","2F4F4F":"Donkerleisteengrys","008080":"Blougroen","000080":"Vlootblou","4B0082":"Indigo",696969:"Donkergrys",B22222:"Rooibaksteen",A52A2A:"Bruin",DAA520:"Donkergeel","006400":"Donkergroen","40E0D0":"Turkoois","0000CD":"Middelblou",800080:"Pers",808080:"Grys",F00:"Rooi",FF8C00:"Donkeroranje",FFD700:"Goud","008000":"Groen","0FF":"Siaan","00F":"Blou", -EE82EE:"Viooltjieblou",A9A9A9:"Donkergrys",FFA07A:"Ligsalm",FFA500:"Oranje",FFFF00:"Geel","00FF00":"Lemmetjie",AFEEEE:"Ligturkoois",ADD8E6:"Ligblou",DDA0DD:"Pruim",D3D3D3:"Liggrys",FFF0F5:"Linne",FAEBD7:"Ivoor",FFFFE0:"Liggeel",F0FFF0:"Heuningdou",F0FFFF:"Asuur",F0F8FF:"Ligte hemelsblou",E6E6FA:"Laventel",FFF:"Wit"},more:"Meer Kleure...",panelTitle:"Kleure",textColorTitle:"Tekskleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ar.js deleted file mode 100644 index 43b7461f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ar",{auto:"تلقائي",bgColorTitle:"لون الخلفية",colors:{"000":"أسود",8E5:"كستنائي","8B4513":"بني فاتح","2F4F4F":"رمادي أردوازي غامق","008080":"أزرق مخضر","000080":"أزرق داكن","4B0082":"كحلي",696969:"رمادي داكن",B22222:"طوبي",A52A2A:"بني",DAA520:"ذهبي داكن","006400":"أخضر داكن","40E0D0":"فيروزي","0000CD":"أزرق متوسط",800080:"بنفسجي غامق",808080:"رمادي",F00:"أحمر",FF8C00:"برتقالي داكن",FFD700:"ذهبي","008000":"أخضر","0FF":"تركواز","00F":"أزرق",EE82EE:"بنفسجي",A9A9A9:"رمادي شاحب", -FFA07A:"برتقالي وردي",FFA500:"برتقالي",FFFF00:"أصفر","00FF00":"ليموني",AFEEEE:"فيروزي شاحب",ADD8E6:"أزرق فاتح",DDA0DD:"بنفسجي فاتح",D3D3D3:"رمادي فاتح",FFF0F5:"وردي فاتح",FAEBD7:"أبيض عتيق",FFFFE0:"أصفر فاتح",F0FFF0:"أبيض مائل للأخضر",F0FFFF:"سماوي",F0F8FF:"لبني",E6E6FA:"أرجواني",FFF:"أبيض"},more:"ألوان إضافية...",panelTitle:"Colors",textColorTitle:"لون النص"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bg.js deleted file mode 100644 index 5deb5f7b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bg.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bg",{auto:"Автоматично",bgColorTitle:"Фонов цвят",colors:{"000":"Черно",8E5:"Кестеняво","8B4513":"Светлокафяво","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Индиго",696969:"Тъмно сиво",B22222:"Огнено червено",A52A2A:"Кафяво",DAA520:"Златисто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно синьо",800080:"Пурпурно",808080:"Сиво",F00:"Червено",FF8C00:"Тъмно оранжево",FFD700:"Златно","008000":"Зелено","0FF":"Светло синьо", -"00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Още цветове",panelTitle:"Цветове",textColorTitle:"Цвят на шрифт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bn.js deleted file mode 100644 index 8fb99a87..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bn",{auto:"অটোমেটিক",bgColorTitle:"বেকগ্রাউন্ড রং",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"আরও রং...",panelTitle:"Colors",textColorTitle:"টেক্স্ট রং"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bs.js deleted file mode 100644 index 3865b40a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bs",{auto:"Automatska",bgColorTitle:"Boja pozadine",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Više boja...",panelTitle:"Colors",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ca.js deleted file mode 100644 index 068e7ef7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ca",{auto:"Automàtic",bgColorTitle:"Color de Fons",colors:{"000":"Negre",8E5:"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi",696969:"Gris Fosc",B22222:"Foc Maó",A52A2A:"Marró",DAA520:"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2",800080:"Lila",808080:"Gris",F00:"Vermell",FF8C00:"Taronja Fosc",FFD700:"Or","008000":"Verd","0FF":"Cian","00F":"Blau",EE82EE:"Violat", -A9A9A9:"Gris clar",FFA07A:"Salmó clar",FFA500:"Taronja",FFFF00:"Groc","00FF00":"Verd Llima",AFEEEE:"Turquesa Pàl·lid",ADD8E6:"Blau Clar",DDA0DD:"Pruna",D3D3D3:"Gris Clar",FFF0F5:"Lavanda rosat",FAEBD7:"Blanc Antic",FFFFE0:"Groc Clar",F0FFF0:"Verd Pàl·lid",F0FFFF:"Atzur",F0F8FF:"Cian pàlid",E6E6FA:"Lavanda",FFF:"Blanc"},more:"Més Colors...",panelTitle:"Colors",textColorTitle:"Color del Text"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cs.js deleted file mode 100644 index fbc5126e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","cs",{auto:"Automaticky",bgColorTitle:"Barva pozadí",colors:{"000":"Černá",8E5:"Kaštanová","8B4513":"Sedlová hněď","2F4F4F":"Tmavě bledě šedá","008080":"Čírka","000080":"Námořnická modř","4B0082":"Inkoustová",696969:"Tmavě šedá",B22222:"Pálená cihla",A52A2A:"Hnědá",DAA520:"Zlatý prut","006400":"Tmavě zelená","40E0D0":"Tyrkisová","0000CD":"Středně modrá",800080:"Purpurová",808080:"Šedá",F00:"Červená",FF8C00:"Tmavě oranžová",FFD700:"Zlatá","008000":"Zelená","0FF":"Azurová", -"00F":"Modrá",EE82EE:"Fialová",A9A9A9:"Kalně šedá",FFA07A:"Světle lososová",FFA500:"Oranžová",FFFF00:"Žlutá","00FF00":"Limetková",AFEEEE:"Bledě tyrkisová",ADD8E6:"Světle modrá",DDA0DD:"Švestková",D3D3D3:"Světle šedá",FFF0F5:"Levandulově ruměnná",FAEBD7:"Antická bílá",FFFFE0:"Světle žlutá",F0FFF0:"Medová rosa",F0FFFF:"Azurová",F0F8FF:"Alenčina modrá",E6E6FA:"Levandulová",FFF:"Bílá"},more:"Více barev...",panelTitle:"Barvy",textColorTitle:"Barva textu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cy.js deleted file mode 100644 index 7a9b6d9c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","cy",{auto:"Awtomatig",bgColorTitle:"Lliw Cefndir",colors:{"000":"Du",8E5:"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo",696969:"Llwyd Tywyll",B22222:"Bric Tân",A52A2A:"Brown",DAA520:"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig",800080:"Porffor",808080:"Llwyd",F00:"Coch",FF8C00:"Oren Tywyll",FFD700:"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas",EE82EE:"Fioled", -A9A9A9:"Llwyd Pwl",FFA07A:"Samwn Golau",FFA500:"Oren",FFFF00:"Melyn","00FF00":"Leim",AFEEEE:"Gwyrddlas Golau",ADD8E6:"Glas Golau",DDA0DD:"Eirinen",D3D3D3:"Llwyd Golau",FFF0F5:"Gwrid Lafant",FAEBD7:"Gwyn Hynafol",FFFFE0:"Melyn Golau",F0FFF0:"Melwn Gwyrdd Golau",F0FFFF:"Aswr",F0F8FF:"Glas Alys",E6E6FA:"Lafant",FFF:"Gwyn"},more:"Mwy o Liwiau...",panelTitle:"Lliwiau",textColorTitle:"Lliw Testun"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/da.js deleted file mode 100644 index bc53d8d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/da.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","da",{auto:"Automatisk",bgColorTitle:"Baggrundsfarve",colors:{"000":"Sort",8E5:"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Mørkegrå",B22222:"Scarlet / Rød",A52A2A:"Brun",DAA520:"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå",800080:"Lilla",808080:"Grå",F00:"Rød",FF8C00:"Mørk orange",FFD700:"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå",EE82EE:"Violet",A9A9A9:"Matgrå", -FFA07A:"Laksefarve",FFA500:"Orange",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Mat tyrkis",ADD8E6:"Lyseblå",DDA0DD:"Plum",D3D3D3:"Lysegrå",FFF0F5:"Lavender Blush",FAEBD7:"Antikhvid",FFFFE0:"Lysegul",F0FFF0:"Gul / Beige",F0FFFF:"Himmeblå",F0F8FF:"Alice blue",E6E6FA:"Lavendel",FFF:"Hvid"},more:"Flere farver...",panelTitle:"Farver",textColorTitle:"Tekstfarve"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/de.js deleted file mode 100644 index 2f1e6949..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/de.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","de",{auto:"Automatisch",bgColorTitle:"Hintergrundfarbe",colors:{"000":"Schwarz",8E5:"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Navy","4B0082":"Indigo",696969:"Dunkelgrau",B22222:"Ziegelrot",A52A2A:"Braun",DAA520:"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Medium Blau",800080:"Lila",808080:"Grau",F00:"Rot",FF8C00:"Dunkelorange",FFD700:"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau",EE82EE:"Hellviolett", -A9A9A9:"Dunkelgrau",FFA07A:"Helles Lachsrosa",FFA500:"Orange",FFFF00:"Gelb","00FF00":"Lime",AFEEEE:"Blaß-Türkis",ADD8E6:"Hellblau",DDA0DD:"Pflaumenblau",D3D3D3:"Hellgrau",FFF0F5:"Lavendel",FAEBD7:"Antik Weiß",FFFFE0:"Hellgelb",F0FFF0:"Honigtau",F0FFFF:"Azurblau",F0F8FF:"Alice Blau",E6E6FA:"Lavendel",FFF:"Weiß"},more:"Weitere Farben...",panelTitle:"Farben",textColorTitle:"Textfarbe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/el.js deleted file mode 100644 index 056d7444..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/el.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","el",{auto:"Αυτόματα",bgColorTitle:"Χρώμα Φόντου",colors:{"000":"Μαύρο",8E5:"Καστανέρυθρο","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Βαθυκύανο","000080":"Μπλε μαρέν","4B0082":"Ινδικό",696969:"Σκούρο Γκρι",B22222:"Ανοικτό Κόκκινο",A52A2A:"Καφέ",DAA520:"Golden Rod","006400":"Σκούρο Πράσινο","40E0D0":"Τυρκουάζ","0000CD":"Medium Blue",800080:"Μοβ",808080:"Γκρι",F00:"Κόκκινο",FF8C00:"Σκούρο Πορτοκαλί",FFD700:"Χρυσαφί","008000":"Πράσινο","0FF":"Κυανό", -"00F":"Μπλε",EE82EE:"Μενεξεδί",A9A9A9:"Ποντικί",FFA07A:"Ανοικτό Σομόν",FFA500:"Πορτοκαλί",FFFF00:"Κίτρινο","00FF00":"Μοσχολέμονο",AFEEEE:"Pale Turquoise",ADD8E6:"Γαλάζιο",DDA0DD:"Plum",D3D3D3:"Ανοικτό Γκρι",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Ανοικτό Κίτρινο",F0FFF0:"Honeydew",F0FFFF:"Γαλανό",F0F8FF:"Alice Blue",E6E6FA:"Ελαφρός Ιώδες",FFF:"Λευκό"},more:"Περισσότερα Χρώματα...",panelTitle:"Χρώματα",textColorTitle:"Χρώμα Κειμένου"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js deleted file mode 100644 index dacd4299..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-au",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colors",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js deleted file mode 100644 index e20fd95c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-ca",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colors",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js deleted file mode 100644 index 52be5079..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-gb",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Grey","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Grey",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Grey",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Grey",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colours",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en.js deleted file mode 100644 index c1347cc8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en",{auto:"Automatic",bgColorTitle:"Background Color",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Colors",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eo.js deleted file mode 100644 index 64b3ea30..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","eo",{auto:"Aŭtomata",bgColorTitle:"Fona Koloro",colors:{"000":"Nigra",8E5:"Kaŝtankolora","8B4513":"Mezbruna","2F4F4F":"Ardezgriza","008080":"Marĉanaskolora","000080":"Maristblua","4B0082":"Indigokolora",696969:"Malhelgriza",B22222:"Brikruĝa",A52A2A:"Bruna",DAA520:"Senbrilorkolora","006400":"Malhelverda","40E0D0":"Turkisblua","0000CD":"Reĝblua",800080:"Purpura",808080:"Griza",F00:"Ruĝa",FF8C00:"Malheloranĝkolora",FFD700:"Orkolora","008000":"Verda","0FF":"Verdblua", -"00F":"Blua",EE82EE:"Viola",A9A9A9:"Mezgriza",FFA07A:"Salmokolora",FFA500:"Oranĝkolora",FFFF00:"Flava","00FF00":"Limetkolora",AFEEEE:"Helturkiskolora",ADD8E6:"Helblua",DDA0DD:"Prunkolora",D3D3D3:"Helgriza",FFF0F5:"Lavendkolora vangoŝminko",FAEBD7:"Antikvablanka",FFFFE0:"Helflava",F0FFF0:"Vintromelonkolora",F0FFFF:"Lazura",F0F8FF:"Aliceblua",E6E6FA:"Lavendkolora",FFF:"Blanka"},more:"Pli da Koloroj...",panelTitle:"Koloroj",textColorTitle:"Teksta Koloro"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/es.js deleted file mode 100644 index 057d6563..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","es",{auto:"Automático",bgColorTitle:"Color de Fondo",colors:{"000":"Negro",8E5:"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil",696969:"Gris oscuro",B22222:"Ladrillo",A52A2A:"Marrón",DAA520:"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro",800080:"Púrpura",808080:"Gris",F00:"Rojo",FF8C00:"Naranja oscuro",FFD700:"Oro","008000":"Verde","0FF":"Cian", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Gris medio",FFA07A:"Salmón claro",FFA500:"Naranja",FFFF00:"Amarillo","00FF00":"Lima",AFEEEE:"Turquesa claro",ADD8E6:"Azul claro",DDA0DD:"Violeta claro",D3D3D3:"Gris claro",FFF0F5:"Lavanda rojizo",FAEBD7:"Blanco antiguo",FFFFE0:"Amarillo claro",F0FFF0:"Miel",F0FFFF:"Azul celeste",F0F8FF:"Azul pálido",E6E6FA:"Lavanda",FFF:"Blanco"},more:"Más Colores...",panelTitle:"Colores",textColorTitle:"Color de Texto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/et.js deleted file mode 100644 index 8c31cf0f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/et.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","et",{auto:"Automaatne",bgColorTitle:"Tausta värv",colors:{"000":"Must",8E5:"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine",696969:"Tumehall",B22222:"Šamottkivi",A52A2A:"Pruun",DAA520:"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine",800080:"Lilla",808080:"Hall",F00:"Punanae",FF8C00:"Tumeoranž",FFD700:"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine", -"00F":"Sinine",EE82EE:"Violetne",A9A9A9:"Tuhm hall",FFA07A:"Hele lõhe",FFA500:"Oranž",FFFF00:"Kollane","00FF00":"Lubja hall",AFEEEE:"Kahvatu türkiis",ADD8E6:"Helesinine",DDA0DD:"Ploomililla",D3D3D3:"Helehall",FFF0F5:"Lavendlipunane",FAEBD7:"Antiikvalge",FFFFE0:"Helekollane",F0FFF0:"Meloniroheline",F0FFFF:"Taevasinine",F0F8FF:"Beebisinine",E6E6FA:"Lavendel",FFF:"Valge"},more:"Rohkem värve...",panelTitle:"Värvid",textColorTitle:"Teksti värv"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eu.js deleted file mode 100644 index c448ae90..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/eu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","eu",{auto:"Automatikoa",bgColorTitle:"Atzeko kolorea",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Kolore gehiago...",panelTitle:"Colors",textColorTitle:"Testu Kolorea"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fa.js deleted file mode 100644 index 53c627d2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fa",{auto:"خودکار",bgColorTitle:"رنگ پس​زمینه",colors:{"000":"سیاه",8E5:"خرمایی","8B4513":"قهوه​ای شکلاتی","2F4F4F":"ارغوانی مایل به خاکستری","008080":"آبی مایل به خاکستری","000080":"آبی سیر","4B0082":"نیلی",696969:"خاکستری تیره",B22222:"آتش آجری",A52A2A:"قهوه​ای",DAA520:"میله​ی طلایی","006400":"سبز تیره","40E0D0":"فیروزه​ای","0000CD":"آبی روشن",800080:"ارغوانی",808080:"خاکستری",F00:"قرمز",FF8C00:"نارنجی پررنگ",FFD700:"طلایی","008000":"سبز","0FF":"آبی مایل به سبز", -"00F":"آبی",EE82EE:"بنفش",A9A9A9:"خاکستری مات",FFA07A:"صورتی کدر روشن",FFA500:"نارنجی",FFFF00:"زرد","00FF00":"فسفری",AFEEEE:"فیروزه​ای رنگ پریده",ADD8E6:"آبی کمرنگ",DDA0DD:"آلویی",D3D3D3:"خاکستری روشن",FFF0F5:"بنفش کمرنگ",FAEBD7:"عتیقه سفید",FFFFE0:"زرد روشن",F0FFF0:"عسلی",F0FFFF:"لاجوردی",F0F8FF:"آبی براق",E6E6FA:"بنفش کمرنگ",FFF:"سفید"},more:"رنگ​های بیشتر...",panelTitle:"رنگها",textColorTitle:"رنگ متن"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fi.js deleted file mode 100644 index 7c2f18d2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fi",{auto:"Automaattinen",bgColorTitle:"Taustaväri",colors:{"000":"Musta",8E5:"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen",696969:"Tummanharmaa",B22222:"Tiili",A52A2A:"Ruskea",DAA520:"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen",800080:"Purppura",808080:"Harmaa",F00:"Punainen",FF8C00:"Tumma oranssi",FFD700:"Kulta", -"008000":"Vihreä","0FF":"Syaani","00F":"Sininen",EE82EE:"Violetti",A9A9A9:"Tummanharmaa",FFA07A:"Vaaleanlohenpunainen",FFA500:"Oranssi",FFFF00:"Keltainen","00FF00":"Limetin vihreä",AFEEEE:"Haalea turkoosi",ADD8E6:"Vaaleansininen",DDA0DD:"Luumu",D3D3D3:"Vaaleanharmaa",FFF0F5:"Laventelinpunainen",FAEBD7:"Antiikinvalkoinen",FFFFE0:"Vaaleankeltainen",F0FFF0:"Hunajameloni",F0FFFF:"Asurinsininen",F0F8FF:"Alice Blue -sininen",E6E6FA:"Lavanteli",FFF:"Valkoinen"},more:"Lisää värejä...",panelTitle:"Värit", -textColorTitle:"Tekstiväri"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fo.js deleted file mode 100644 index 24c03500..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fo",{auto:"Automatiskt",bgColorTitle:"Bakgrundslitur",colors:{"000":"Svart",8E5:"Maroon","8B4513":"Saðilsbrúnt","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Myrkagrátt",B22222:"Fire Brick",A52A2A:"Brúnt",DAA520:"Gullstavur","006400":"Myrkagrønt","40E0D0":"Turquoise","0000CD":"Meðal blátt",800080:"Purple",808080:"Grátt",F00:"Reytt",FF8C00:"Myrkt appelsingult",FFD700:"Gull","008000":"Grønt","0FF":"Cyan","00F":"Blátt",EE82EE:"Violet", -A9A9A9:"Døkt grátt",FFA07A:"Ljósur laksur",FFA500:"Appelsingult",FFFF00:"Gult","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Ljósablátt",DDA0DD:"Plum",D3D3D3:"Ljósagrátt",FFF0F5:"Lavender Blush",FAEBD7:"Klassiskt hvítt",FFFFE0:"Ljósagult",F0FFF0:"Hunangsdøggur",F0FFFF:"Azure",F0F8FF:"Alice Blátt",E6E6FA:"Lavender",FFF:"Hvítt"},more:"Fleiri litir...",panelTitle:"Litir",textColorTitle:"Tekstlitur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js deleted file mode 100644 index a488534c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fr-ca",{auto:"Automatique",bgColorTitle:"Couleur de fond",colors:{"000":"Noir",8E5:"Marron","8B4513":"Brun foncé","2F4F4F":"Gris ardoise foncé","008080":"Sarcelle","000080":"Marine","4B0082":"Indigo",696969:"Gris foncé",B22222:"Rouge brique",A52A2A:"Brun",DAA520:"Doré","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu",800080:"Mauve",808080:"Gris",F00:"Rouge",FF8C00:"Orange foncé",FFD700:"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu",EE82EE:"Violet", -A9A9A9:"Gris pâle",FFA07A:"Saumon clair",FFA500:"Orange",FFFF00:"Jaune","00FF00":"Vert lime",AFEEEE:"Turquoise pâle",ADD8E6:"Bleu pâle",DDA0DD:"Prune",D3D3D3:"Gris pâle",FFF0F5:"Bleu lavande",FAEBD7:"Blanc antique",FFFFE0:"Jaune pâle",F0FFF0:"Miel doré",F0FFFF:"Azure",F0F8FF:"Bleu alice",E6E6FA:"Lavande",FFF:"Blanc"},more:"Plus de couleurs...",panelTitle:"Couleurs",textColorTitle:"Couleur de texte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr.js deleted file mode 100644 index b3df258c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/fr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fr",{auto:"Automatique",bgColorTitle:"Couleur d'arrière plan",colors:{"000":"Noir",8E5:"Marron","8B4513":"Brun moyen","2F4F4F":"Vert sombre","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo",696969:"Gris foncé",B22222:"Rouge brique",A52A2A:"Brun",DAA520:"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal",800080:"Pourpre",808080:"Gris",F00:"Rouge",FF8C00:"Orange foncé",FFD700:"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu",EE82EE:"Violet", -A9A9A9:"Gris moyen",FFA07A:"Saumon",FFA500:"Orange",FFFF00:"Jaune","00FF00":"Lime",AFEEEE:"Turquoise clair",ADD8E6:"Bleu clair",DDA0DD:"Prune",D3D3D3:"Gris clair",FFF0F5:"Fard Lavande",FAEBD7:"Blanc antique",FFFFE0:"Jaune clair",F0FFF0:"Honeydew",F0FFFF:"Azur",F0F8FF:"Bleu Alice",E6E6FA:"Lavande",FFF:"Blanc"},more:"Plus de couleurs...",panelTitle:"Couleurs",textColorTitle:"Couleur de texte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gl.js deleted file mode 100644 index 9dc1baf9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","gl",{auto:"Automático",bgColorTitle:"Cor do fondo",colors:{"000":"Negro",8E5:"Marrón escuro","8B4513":"Ocre","2F4F4F":"Pizarra escuro","008080":"Verde azulado","000080":"Azul mariño","4B0082":"Índigo",696969:"Gris escuro",B22222:"Ladrillo",A52A2A:"Marrón",DAA520:"Dourado escuro","006400":"Verde escuro","40E0D0":"Turquesa","0000CD":"Azul medio",800080:"Púrpura",808080:"Gris",F00:"Vermello",FF8C00:"Laranxa escuro",FFD700:"Dourado","008000":"Verde","0FF":"Cian", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Gris medio",FFA07A:"Salmón claro",FFA500:"Laranxa",FFFF00:"Amarelo","00FF00":"Lima",AFEEEE:"Turquesa pálido",ADD8E6:"Azul claro",DDA0DD:"Violeta pálido",D3D3D3:"Verde claro",FFF0F5:"Lavanda vermello",FAEBD7:"Branco antigo",FFFFE0:"Amarelo claro",F0FFF0:"Mel",F0FFFF:"Azul celeste",F0F8FF:"Azul pálido",E6E6FA:"Lavanda",FFF:"Branco"},more:"Máis cores...",panelTitle:"Cores",textColorTitle:"Cor do texto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gu.js deleted file mode 100644 index 8b2a9ff8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","gu",{auto:"સ્વચાલિત",bgColorTitle:"બૅકગ્રાઉન્ડ રંગ,",colors:{"000":"કાળો",8E5:"મરુન","8B4513":"છીક","2F4F4F":"ડાર્ક સ્લેટ ગ્રે ","008080":"ટીલ","000080":"નેવી","4B0082":"જામલી",696969:"ડાર્ક ગ્રે",B22222:"ઈટ",A52A2A:"બ્રાઉન",DAA520:"ગોલ્ડન રોડ","006400":"ડાર્ક લીલો","40E0D0":"ટ્રકોઈસ","0000CD":"મધ્યમ વાદળી",800080:"પર્પલ",808080:"ગ્રે",F00:"લાલ",FF8C00:"ડાર્ક ઓરંજ",FFD700:"ગોલ્ડ","008000":"ગ્રીન","0FF":"સાયન","00F":"વાદળી",EE82EE:"વાયોલેટ",A9A9A9:"ડીમ ",FFA07A:"લાઈટ સાલમન", -FFA500:"ઓરંજ",FFFF00:"પીળો","00FF00":"લાઈમ",AFEEEE:"પેલ કોઈસ",ADD8E6:"લાઈટ બ્લુ",DDA0DD:"પલ્મ",D3D3D3:"લાઈટ ગ્રે",FFF0F5:"લવંડર ",FAEBD7:"એન્ટીક સફેદ",FFFFE0:"લાઈટ પીળો",F0FFF0:"હનીડઉય",F0FFFF:"અઝુરે",F0F8FF:"એલીસ બ્લુ",E6E6FA:"લવંડર",FFF:"સફેદ"},more:"ઔર રંગ...",panelTitle:"રંગ",textColorTitle:"શબ્દનો રંગ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/he.js deleted file mode 100644 index 6658e3b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","he",{auto:"אוטומטי",bgColorTitle:"צבע רקע",colors:{"000":"שחור",8E5:"סגול כהה","8B4513":"חום בהיר","2F4F4F":"אפור צפחה","008080":"כחול-ירוק","000080":"כחול-סגול","4B0082":"אינדיגו",696969:"אפור מעומעם",B22222:"אדום-חום",A52A2A:"חום",DAA520:"כתום זהב","006400":"ירוק כהה","40E0D0":"טורקיז","0000CD":"כחול בינוני",800080:"סגול",808080:"אפור",F00:"אדום",FF8C00:"כתום כהה",FFD700:"זהב","008000":"ירוק","0FF":"ציאן","00F":"כחול",EE82EE:"סגלגל",A9A9A9:"אפור כהה",FFA07A:"כתום-וורוד", -FFA500:"כתום",FFFF00:"צהוב","00FF00":"ליים",AFEEEE:"טורקיז בהיר",ADD8E6:"כחול בהיר",DDA0DD:"שזיף",D3D3D3:"אפור בהיר",FFF0F5:"לבנדר מסמיק",FAEBD7:"לבן עתיק",FFFFE0:"צהוב בהיר",F0FFF0:"טל דבש",F0FFFF:"תכלת",F0F8FF:"כחול טיפת מים",E6E6FA:"לבנדר",FFF:"לבן"},more:"צבעים נוספים...",panelTitle:"צבעים",textColorTitle:"צבע טקסט"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hi.js deleted file mode 100644 index 497f83bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hi",{auto:"स्वचालित",bgColorTitle:"बैक्ग्राउन्ड रंग",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"और रंग...",panelTitle:"Colors",textColorTitle:"टेक्स्ट रंग"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hr.js deleted file mode 100644 index a4ec1a14..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hr",{auto:"Automatski",bgColorTitle:"Boja pozadine",colors:{"000":"Crna",8E5:"Kesten","8B4513":"Smeđa","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo",696969:"Tamno siva",B22222:"Vatrena cigla",A52A2A:"Smeđa",DAA520:"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava",800080:"Ljubičasta",808080:"Siva",F00:"Crvena",FF8C00:"Tamno naranđasta",FFD700:"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava",EE82EE:"Ljubičasta", -A9A9A9:"Mutno siva",FFA07A:"Svijetli losos",FFA500:"Naranđasto",FFFF00:"Žuto","00FF00":"Limun",AFEEEE:"Blijedo tirkizna",ADD8E6:"Svijetlo plava",DDA0DD:"Šljiva",D3D3D3:"Svijetlo siva",FFF0F5:"Lavanda rumeno",FAEBD7:"Antikno bijela",FFFFE0:"Svijetlo žuta",F0FFF0:"Med",F0FFFF:"Azurna",F0F8FF:"Alice plava",E6E6FA:"Lavanda",FFF:"Bijela"},more:"Više boja...",panelTitle:"Boje",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hu.js deleted file mode 100644 index ee57ef94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/hu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hu",{auto:"Automatikus",bgColorTitle:"Háttérszín",colors:{"000":"Fekete",8E5:"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék",696969:"Szürke",B22222:"Tégla vörös",A52A2A:"Vörös",DAA520:"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék",800080:"Lila",808080:"Szürke",F00:"Piros",FF8C00:"Sötét narancs",FFD700:"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék",EE82EE:"Rózsaszín",A9A9A9:"Sötét szürke", -FFA07A:"Lazac",FFA500:"Narancs",FFFF00:"Citromsárga","00FF00":"Neon zöld",AFEEEE:"Világos türkiz",ADD8E6:"Világos kék",DDA0DD:"Világos lila",D3D3D3:"Világos szürke",FFF0F5:"Lavender Blush",FAEBD7:"Törtfehér",FFFFE0:"Világos sárga",F0FFF0:"Menta",F0FFFF:"Azúr kék",F0F8FF:"Halvány kék",E6E6FA:"Lavender",FFF:"Fehér"},more:"További színek...",panelTitle:"Színek",textColorTitle:"Betűszín"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/id.js deleted file mode 100644 index c6b31c7c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","id",{auto:"Automatic",bgColorTitle:"Warna Latar Belakang",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Warna",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/is.js deleted file mode 100644 index c740c058..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","is",{auto:"Sjálfval",bgColorTitle:"Bakgrunnslitur",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Fleiri liti...",panelTitle:"Colors",textColorTitle:"Litur texta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/it.js deleted file mode 100644 index 7cdf3de5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/it.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","it",{auto:"Automatico",bgColorTitle:"Colore sfondo",colors:{"000":"Nero",8E5:"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo",696969:"Grigio Scuro",B22222:"Giallo Fiamma",A52A2A:"Marrone",DAA520:"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro",800080:"Viola",808080:"Grigio",F00:"Rosso",FF8C00:"Arancio Scuro",FFD700:"Oro","008000":"Verde", -"0FF":"Ciano","00F":"Blu",EE82EE:"Violetto",A9A9A9:"Grigio Scuro",FFA07A:"Salmone",FFA500:"Arancio",FFFF00:"Giallo","00FF00":"Lime",AFEEEE:"Turchese Chiaro",ADD8E6:"Blu Chiaro",DDA0DD:"Rosso Ciliegia",D3D3D3:"Grigio Chiaro",FFF0F5:"Lavanda Chiara",FAEBD7:"Bianco Antico",FFFFE0:"Giallo Chiaro",F0FFF0:"Verde Mela",F0FFFF:"Azzurro",F0F8FF:"Celeste",E6E6FA:"Lavanda",FFF:"Bianco"},more:"Altri colori...",panelTitle:"Colori",textColorTitle:"Colore testo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ja.js deleted file mode 100644 index 4a3b2215..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ja",{auto:"自動",bgColorTitle:"背景色",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"その他の色...",panelTitle:"色",textColorTitle:"文字色"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ka.js deleted file mode 100644 index 6d39de57..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ka.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ka",{auto:"ავტომატური",bgColorTitle:"ფონის ფერი",colors:{"000":"შავი",8E5:"მუქი შინდისფერი","8B4513":"ყავისფერი","2F4F4F":"მოლურჯო ნაცრისფერი","008080":"ჩამქრალი ლურჯი","000080":"მუქი ლურჯი","4B0082":"იასამნისფერი",696969:"მუქი ნაცრისფერი",B22222:"აგურისფერი",A52A2A:"მუქი ყავისფერი",DAA520:"მოყვითალო","006400":"მუქი მწვანე","40E0D0":"ცისფერი","0000CD":"ზომიერად ლურჯი",800080:"იისფერი",808080:"ნაცრისფერი",F00:"წითელი",FF8C00:"მუქი სტაფილოსფერი",FFD700:"ოქროსფერი", -"008000":"მწვანე","0FF":"ღია ცისფერი","00F":"ლურჯი",EE82EE:"იისფერი",A9A9A9:"ბაცი ნაცრისფერი",FFA07A:"ჩამქრალი ვარდისფერი",FFA500:"სტაფილოსფერი",FFFF00:"ყვითელი","00FF00":"ლურჯი",AFEEEE:"ცისფერი",ADD8E6:"ღია ლურჯი",DDA0DD:"ღია იისფერი",D3D3D3:"ღია ნაცრისფერი",FFF0F5:"ღია ვარდისფერი",FAEBD7:"ღია ყავისფერი",FFFFE0:"ნათელი ყვითელი",F0FFF0:"ღია მწვანე",F0FFFF:"ღია ცისფერი 2",F0F8FF:"ღია ცისფერი 3",E6E6FA:"ღია იისფერი 2",FFF:"თეთრი"},more:"მეტი ფერი...",panelTitle:"ფერები",textColorTitle:"ტექსტის ფერი"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/km.js deleted file mode 100644 index cbff6abd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","km",{auto:"ស្វ័យប្រវត្តិ",bgColorTitle:"ពណ៌ផ្ទៃខាងក្រោយ",colors:{"000":"ខ្មៅ",8E5:"ត្នោត​ចាស់","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"ខៀវ​ចាស់","4B0082":"ធ្លះ",696969:"ប្រផេះ​ក្រាស់",B22222:"Fire Brick",A52A2A:"ត្នោត",DAA520:"Golden Rod","006400":"បៃតង​ចាស់","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"ប្រផេះ",F00:"ក្រហម",FF8C00:"ទឹក​ក្រូច​ចាស់",FFD700:"មាស","008000":"បៃតង","0FF":"Cyan","00F":"ខៀវ", -EE82EE:"ស្វាយ",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"ទឹក​ក្រូច",FFFF00:"លឿង","00FF00":"ក្រូច​ឆ្មារ",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"លឿង​ស្ដើង",F0FFF0:"Honeydew",F0FFFF:"ផ្ទៃមេឃ",F0F8FF:"Alice Blue",E6E6FA:"ឡាវិនដឺ",FFF:"ស"},more:"ពណ៌​ផ្សេង​ទៀត..",panelTitle:"ពណ៌",textColorTitle:"ពណ៌អក្សរ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ko.js deleted file mode 100644 index cbf7d6fc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ko",{auto:"기본색상",bgColorTitle:"배경 색상",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"색상선택...",panelTitle:"Colors",textColorTitle:"글자 색상"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ku.js deleted file mode 100644 index 7627dcd1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ku.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ku",{auto:"خۆکار",bgColorTitle:"ڕەنگی پاشبنەما",colors:{"000":"ڕەش",8E5:"سۆرو ماڕوونی","8B4513":"ماڕوونی","2F4F4F":"سەوزی تاریك","008080":"سەوز و شین","000080":"شینی تۆخ","4B0082":"مۆری تۆخ",696969:"ڕەساسی تۆخ",B22222:"سۆری تۆخ",A52A2A:"قاوەیی",DAA520:"قاوەیی بریسکەدار","006400":"سەوزی تۆخ","40E0D0":"شینی ناتۆخی بریسکەدار","0000CD":"شینی مامناوەند",800080:"پەمبەیی",808080:"ڕەساسی",F00:"سۆر",FF8C00:"نارەنجی تۆخ",FFD700:"زەرد","008000":"سەوز","0FF":"شینی ئاسمانی", -"00F":"شین",EE82EE:"پەمەیی",A9A9A9:"ڕەساسی ناتۆخ",FFA07A:"نارەنجی ناتۆخ",FFA500:"نارەنجی",FFFF00:"زەرد","00FF00":"سەوز",AFEEEE:"شینی ناتۆخ",ADD8E6:"شینی زۆر ناتۆخ",DDA0DD:"پەمەیی ناتۆخ",D3D3D3:"ڕەساسی بریسکەدار",FFF0F5:"جەرگی زۆر ناتۆخ",FAEBD7:"جەرگی ناتۆخ",FFFFE0:"سپی ناتۆخ",F0FFF0:"هەنگوینی ناتۆخ",F0FFFF:"شینێکی زۆر ناتۆخ",F0F8FF:"شینێکی ئاسمانی زۆر ناتۆخ",E6E6FA:"شیری",FFF:"سپی"},more:"ڕەنگی زیاتر...",panelTitle:"ڕەنگەکان",textColorTitle:"ڕەنگی دەق"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lt.js deleted file mode 100644 index 288abf2f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","lt",{auto:"Automatinis",bgColorTitle:"Fono spalva",colors:{"000":"Juoda",8E5:"Kaštoninė","8B4513":"Tamsiai ruda","2F4F4F":"Pilka tamsaus šiferio","008080":"Teal","000080":"Karinis","4B0082":"Indigo",696969:"Tamsiai pilka",B22222:"Ugnies",A52A2A:"Ruda",DAA520:"Aukso","006400":"Tamsiai žalia","40E0D0":"Turquoise","0000CD":"Vidutinė mėlyna",800080:"Violetinė",808080:"Pilka",F00:"Raudona",FF8C00:"Tamsiai oranžinė",FFD700:"Auksinė","008000":"Žalia","0FF":"Žydra", -"00F":"Mėlyna",EE82EE:"Violetinė",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Oranžinė",FFFF00:"Geltona","00FF00":"Citrinų",AFEEEE:"Pale Turquoise",ADD8E6:"Šviesiai mėlyna",DDA0DD:"Plum",D3D3D3:"Šviesiai pilka",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Šviesiai geltona",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Balta"},more:"Daugiau spalvų...",panelTitle:"Spalva",textColorTitle:"Teksto spalva"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lv.js deleted file mode 100644 index 723b21f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/lv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","lv",{auto:"Automātiska",bgColorTitle:"Fona krāsa",colors:{"000":"Melns",8E5:"Sarkanbrūns","8B4513":"Sedlu brūns","2F4F4F":"Tumšas tāfeles pelēks","008080":"Zili-zaļš","000080":"Jūras","4B0082":"Indigo",696969:"Tumši pelēks",B22222:"Ķieģeļsarkans",A52A2A:"Brūns",DAA520:"Zelta","006400":"Tumši zaļš","40E0D0":"Tirkīzs","0000CD":"Vidēji zils",800080:"Purpurs",808080:"Pelēks",F00:"Sarkans",FF8C00:"Tumši oranžs",FFD700:"Zelta","008000":"Zaļš","0FF":"Tumšzils","00F":"Zils", -EE82EE:"Violets",A9A9A9:"Pelēks",FFA07A:"Gaiši laškrāsas",FFA500:"Oranžs",FFFF00:"Dzeltens","00FF00":"Laima",AFEEEE:"Gaiši tirkīza",ADD8E6:"Gaiši zils",DDA0DD:"Plūmju",D3D3D3:"Gaiši pelēks",FFF0F5:"Lavandas sārts",FAEBD7:"Antīki balts",FFFFE0:"Gaiši dzeltens",F0FFF0:"Meduspile",F0FFFF:"Debesszils",F0F8FF:"Alises zils",E6E6FA:"Lavanda",FFF:"Balts"},more:"Plašāka palete...",panelTitle:"Krāsa",textColorTitle:"Teksta krāsa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mk.js deleted file mode 100644 index 606e7e5e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","mk",{auto:"Automatic",bgColorTitle:"Background Color",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Colors",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mn.js deleted file mode 100644 index a0699298..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","mn",{auto:"Автоматаар",bgColorTitle:"Дэвсгэр өнгө",colors:{"000":"Хар",8E5:"Хүрэн","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Саарал",F00:"Улаан",FF8C00:"Dark Orange",FFD700:"Алт","008000":"Ногоон","0FF":"Цэнхэр","00F":"Хөх",EE82EE:"Ягаан", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Улбар шар",FFFF00:"Шар","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Цайвар саарал",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Цагаан"},more:"Нэмэлт өнгөнүүд...",panelTitle:"Өнгөнүүд",textColorTitle:"Бичвэрийн өнгө"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ms.js deleted file mode 100644 index d65c79ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ms",{auto:"Otomatik",bgColorTitle:"Warna Latarbelakang",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Warna lain-lain...",panelTitle:"Colors",textColorTitle:"Warna Text"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nb.js deleted file mode 100644 index 26422ebd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","nb",{auto:"Automatisk",bgColorTitle:"Bakgrunnsfarge",colors:{"000":"Svart",8E5:"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo",696969:"Mørk grå",B22222:"Mørkerød",A52A2A:"Brun",DAA520:"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå",800080:"Purpur",808080:"Grå",F00:"Rød",FF8C00:"Mørk oransje",FFD700:"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå",EE82EE:"Fiolett",A9A9A9:"Svak grå", -FFA07A:"Rosa-oransje",FFA500:"Oransje",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Svak turkis",ADD8E6:"Lys Blå",DDA0DD:"Plomme",D3D3D3:"Lys grå",FFF0F5:"Svak lavendelrosa",FAEBD7:"Antikk-hvit",FFFFE0:"Lys gul",F0FFF0:"Honningmelon",F0FFFF:"Svakt asurblått",F0F8FF:"Svak cyan",E6E6FA:"Lavendel",FFF:"Hvit"},more:"Flere farger...",panelTitle:"Farger",textColorTitle:"Tekstfarge"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nl.js deleted file mode 100644 index f30b8aa4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/nl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","nl",{auto:"Automatisch",bgColorTitle:"Achtergrondkleur",colors:{"000":"Zwart",8E5:"Kastanjebruin","8B4513":"Chocoladebruin","2F4F4F":"Donkerleigrijs","008080":"Blauwgroen","000080":"Marine","4B0082":"Indigo",696969:"Donkergrijs",B22222:"Baksteen",A52A2A:"Bruin",DAA520:"Donkergeel","006400":"Donkergroen","40E0D0":"Turquoise","0000CD":"Middenblauw",800080:"Paars",808080:"Grijs",F00:"Rood",FF8C00:"Donkeroranje",FFD700:"Goud","008000":"Groen","0FF":"Cyaan","00F":"Blauw", -EE82EE:"Violet",A9A9A9:"Donkergrijs",FFA07A:"Lichtzalm",FFA500:"Oranje",FFFF00:"Geel","00FF00":"Felgroen",AFEEEE:"Lichtturquoise",ADD8E6:"Lichtblauw",DDA0DD:"Pruim",D3D3D3:"Lichtgrijs",FFF0F5:"Linnen",FAEBD7:"Ivoor",FFFFE0:"Lichtgeel",F0FFF0:"Honingdauw",F0FFFF:"Azuur",F0F8FF:"Licht hemelsblauw",E6E6FA:"Lavendel",FFF:"Wit"},more:"Meer kleuren...",panelTitle:"Kleuren",textColorTitle:"Tekstkleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/no.js deleted file mode 100644 index 39d18137..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","no",{auto:"Automatisk",bgColorTitle:"Bakgrunnsfarge",colors:{"000":"Svart",8E5:"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo",696969:"Mørk grå",B22222:"Mørkerød",A52A2A:"Brun",DAA520:"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå",800080:"Purpur",808080:"Grå",F00:"Rød",FF8C00:"Mørk oransje",FFD700:"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå",EE82EE:"Fiolett",A9A9A9:"Svak grå", -FFA07A:"Rosa-oransje",FFA500:"Oransje",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Svak turkis",ADD8E6:"Lys Blå",DDA0DD:"Plomme",D3D3D3:"Lys grå",FFF0F5:"Svak lavendelrosa",FAEBD7:"Antikk-hvit",FFFFE0:"Lys gul",F0FFF0:"Honningmelon",F0FFFF:"Svakt asurblått",F0F8FF:"Svak cyan",E6E6FA:"Lavendel",FFF:"Hvit"},more:"Flere farger...",panelTitle:"Farger",textColorTitle:"Tekstfarge"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pl.js deleted file mode 100644 index 1028ac37..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pl",{auto:"Automatycznie",bgColorTitle:"Kolor tła",colors:{"000":"Czarny",8E5:"Kasztanowy","8B4513":"Czekoladowy","2F4F4F":"Ciemnografitowy","008080":"Morski","000080":"Granatowy","4B0082":"Indygo",696969:"Ciemnoszary",B22222:"Czerwień żelazowa",A52A2A:"Brązowy",DAA520:"Ciemnozłoty","006400":"Ciemnozielony","40E0D0":"Turkusowy","0000CD":"Ciemnoniebieski",800080:"Purpurowy",808080:"Szary",F00:"Czerwony",FF8C00:"Ciemnopomarańczowy",FFD700:"Złoty","008000":"Zielony", -"0FF":"Cyjan","00F":"Niebieski",EE82EE:"Fioletowy",A9A9A9:"Przygaszony szary",FFA07A:"Łososiowy",FFA500:"Pomarańczowy",FFFF00:"Żółty","00FF00":"Limonkowy",AFEEEE:"Bladoturkusowy",ADD8E6:"Jasnoniebieski",DDA0DD:"Śliwkowy",D3D3D3:"Jasnoszary",FFF0F5:"Jasnolawendowy",FAEBD7:"Kremowobiały",FFFFE0:"Jasnożółty",F0FFF0:"Bladozielony",F0FFFF:"Jasnolazurowy",F0F8FF:"Jasnobłękitny",E6E6FA:"Lawendowy",FFF:"Biały"},more:"Więcej kolorów...",panelTitle:"Kolory",textColorTitle:"Kolor tekstu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js deleted file mode 100644 index 4f1ee835..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pt-br",{auto:"Automático",bgColorTitle:"Cor do Plano de Fundo",colors:{"000":"Preto",8E5:"Foquete","8B4513":"Marrom 1","2F4F4F":"Cinza 1","008080":"Cerceta","000080":"Azul Marinho","4B0082":"Índigo",696969:"Cinza 2",B22222:"Tijolo de Fogo",A52A2A:"Marrom 2",DAA520:"Vara Dourada","006400":"Verde Escuro","40E0D0":"Turquesa","0000CD":"Azul Médio",800080:"Roxo",808080:"Cinza 3",F00:"Vermelho",FF8C00:"Laranja Escuro",FFD700:"Dourado","008000":"Verde","0FF":"Ciano", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Cinza Escuro",FFA07A:"Salmão Claro",FFA500:"Laranja",FFFF00:"Amarelo","00FF00":"Lima",AFEEEE:"Turquesa Pálido",ADD8E6:"Azul Claro",DDA0DD:"Ameixa",D3D3D3:"Cinza Claro",FFF0F5:"Lavanda 1",FAEBD7:"Branco Antiguidade",FFFFE0:"Amarelo Claro",F0FFF0:"Orvalho",F0FFFF:"Azure",F0F8FF:"Azul Alice",E6E6FA:"Lavanda 2",FFF:"Branco"},more:"Mais Cores...",panelTitle:"Cores",textColorTitle:"Cor do Texto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt.js deleted file mode 100644 index c99783ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/pt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pt",{auto:"Automático",bgColorTitle:"Cor de Fundo",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Mais Cores...",panelTitle:"Colors",textColorTitle:"Cor do Texto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ro.js deleted file mode 100644 index 39127053..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ro.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ro",{auto:"Automatic",bgColorTitle:"Coloarea fundalului",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Mai multe culori...",panelTitle:"Colors",textColorTitle:"Culoarea textului"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ru.js deleted file mode 100644 index 558c4b6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ru.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ru",{auto:"Автоматически",bgColorTitle:"Цвет фона",colors:{"000":"Чёрный",8E5:"Бордовый","8B4513":"Кожано-коричневый","2F4F4F":"Темный синевато-серый","008080":"Сине-зелёный","000080":"Тёмно-синий","4B0082":"Индиго",696969:"Тёмно-серый",B22222:"Кирпичный",A52A2A:"Коричневый",DAA520:"Золотисто-берёзовый","006400":"Темно-зелёный","40E0D0":"Бирюзовый","0000CD":"Умеренно синий",800080:"Пурпурный",808080:"Серый",F00:"Красный",FF8C00:"Темно-оранжевый",FFD700:"Золотистый", -"008000":"Зелёный","0FF":"Васильковый","00F":"Синий",EE82EE:"Фиолетовый",A9A9A9:"Тускло-серый",FFA07A:"Светло-лососевый",FFA500:"Оранжевый",FFFF00:"Жёлтый","00FF00":"Лайма",AFEEEE:"Бледно-синий",ADD8E6:"Свелто-голубой",DDA0DD:"Сливовый",D3D3D3:"Светло-серый",FFF0F5:"Розово-лавандовый",FAEBD7:"Античный белый",FFFFE0:"Светло-жёлтый",F0FFF0:"Медвяной росы",F0FFFF:"Лазурный",F0F8FF:"Бледно-голубой",E6E6FA:"Лавандовый",FFF:"Белый"},more:"Ещё цвета...",panelTitle:"Цвета",textColorTitle:"Цвет текста"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/si.js deleted file mode 100644 index 53d553d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","si",{auto:"Automatic",bgColorTitle:"පසුබිම් වර්ණය",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"වර්ණය",textColorTitle:"අක්ෂර වර්ණ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sk.js deleted file mode 100644 index dfb8c673..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sk",{auto:"Automaticky",bgColorTitle:"Farba pozadia",colors:{"000":"Čierna",8E5:"Maroon","8B4513":"Sedlová hnedá","2F4F4F":"Tmavo bridlicovo sivá","008080":"Modrozelená","000080":"Tmavomodrá","4B0082":"Indigo",696969:"Tmavá sivá",B22222:"Ohňová tehlová",A52A2A:"Hnedá",DAA520:"Zlatobyľ","006400":"Tmavá zelená","40E0D0":"Tyrkysová","0000CD":"Stredná modrá",800080:"Purpurová",808080:"Sivá",F00:"Červená",FF8C00:"Tmavá oranžová",FFD700:"Zlatá","008000":"Zelená", -"0FF":"Azúrová","00F":"Modrá",EE82EE:"Fialová",A9A9A9:"Tmavá sivá",FFA07A:"Svetlo lososová",FFA500:"Oranžová",FFFF00:"Žltá","00FF00":"Vápenná",AFEEEE:"Svetlo tyrkysová",ADD8E6:"Svetlo modrá",DDA0DD:"Slivková",D3D3D3:"Svetlo sivá",FFF0F5:"Levanduľovo červená",FAEBD7:"Antická biela",FFFFE0:"Svetlo žltá",F0FFF0:"Medová",F0FFFF:"Azúrová",F0F8FF:"Alicovo modrá",E6E6FA:"Levanduľová",FFF:"Biela"},more:"Viac farieb...",panelTitle:"Farby",textColorTitle:"Farba textu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sl.js deleted file mode 100644 index 81d10f73..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sl",{auto:"Samodejno",bgColorTitle:"Barva ozadja",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Več barv...",panelTitle:"Colors",textColorTitle:"Barva besedila"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sq.js deleted file mode 100644 index 559b17cd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sq",{auto:"Automatik",bgColorTitle:"Ngjyra e Prapavijës",colors:{"000":"E zezë",8E5:"Ngjyrë gështenjë","8B4513":"Ngjyrë Shale Kafe","2F4F4F":"Ngjyrë Gri të errët ardëz","008080":"Ngjyrë bajukë","000080":"Ngjyrë Marine","4B0082":"Indigo",696969:"Gri e Errët",B22222:"Tullë në Flakë",A52A2A:"Ngjytë Kafe",DAA520:"Shkop i Artë","006400":"E Gjelbër e Errët","40E0D0":"Ngjyrë e Bruztë","0000CD":"E Kaltër e Mesme",800080:"Vjollcë",808080:"Gri",F00:"E Kuqe",FF8C00:"E Portokalltë e Errët", -FFD700:"Ngjyrë Ari","008000":"E Gjelbërt","0FF":"Cyan","00F":"E Kaltër",EE82EE:"Vjollcë",A9A9A9:"Gri e Zbehtë",FFA07A:"Salmon i Ndritur",FFA500:"E Portokalltë",FFFF00:"E Verdhë","00FF00":"Ngjyrë Gëlqere",AFEEEE:"Ngjyrë e Bruztë e Zbehtë",ADD8E6:"E Kaltër e Ndritur",DDA0DD:"Ngjyrë Llokumi",D3D3D3:"Gri e Ndritur",FFF0F5:"Ngjyrë Purpur e Skuqur",FAEBD7:"E Bardhë Antike",FFFFE0:"E verdhë e Ndritur",F0FFF0:"Ngjyrë Nektari",F0FFFF:"Ngjyrë Qielli",F0F8FF:"E Kaltër Alice",E6E6FA:"Ngjyrë Purpur e Zbetë",FFF:"E bardhë"}, -more:"Më Shumë Ngjyra...",panelTitle:"Ngjyrat",textColorTitle:"Ngjyra e Tekstit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js deleted file mode 100644 index f0d15e3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sr-latn",{auto:"Automatski",bgColorTitle:"Boja pozadine",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Više boja...",panelTitle:"Colors",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr.js deleted file mode 100644 index 4f6ba162..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sr",{auto:"Аутоматски",bgColorTitle:"Боја позадине",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Више боја...",panelTitle:"Colors",textColorTitle:"Боја текста"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sv.js deleted file mode 100644 index 995a3683..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sv",{auto:"Automatisk",bgColorTitle:"Bakgrundsfärg",colors:{"000":"Svart",8E5:"Rödbrun","8B4513":"Mörkbrun","2F4F4F":"Skiffergrå","008080":"Kricka","000080":"Marinblå","4B0082":"Indigo",696969:"Mörkgrå",B22222:"Tegelsten",A52A2A:"Brun",DAA520:"Mörk guld","006400":"Mörkgrön","40E0D0":"Turkos","0000CD":"Medium blå",800080:"Lila",808080:"Grå",F00:"Röd",FF8C00:"Mörkorange",FFD700:"Guld","008000":"Grön","0FF":"Turkos","00F":"Blå",EE82EE:"Violett",A9A9A9:"Matt grå", -FFA07A:"Laxrosa",FFA500:"Orange",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Ljusturkos",ADD8E6:"Ljusblå",DDA0DD:"Plommon",D3D3D3:"Ljusgrå",FFF0F5:"Ljus lavendel",FAEBD7:"Antikvit",FFFFE0:"Ljusgul",F0FFF0:"Honungsdagg",F0FFFF:"Azurblå",F0F8FF:"Aliceblå",E6E6FA:"Lavendel",FFF:"Vit"},more:"Fler färger...",panelTitle:"Färger",textColorTitle:"Textfärg"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/th.js deleted file mode 100644 index 7b65cbd8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/th.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","th",{auto:"สีอัตโนมัติ",bgColorTitle:"สีพื้นหลัง",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"เลือกสีอื่นๆ...",panelTitle:"Colors",textColorTitle:"สีตัวอักษร"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tr.js deleted file mode 100644 index 56ca2b1d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","tr",{auto:"Otomatik",bgColorTitle:"Arka Renk",colors:{"000":"Siyah",8E5:"Kestane","8B4513":"Koyu Kahverengi","2F4F4F":"Koyu Kurşuni Gri","008080":"Teal","000080":"Mavi","4B0082":"Çivit Mavisi",696969:"Silik Gri",B22222:"Ateş Tuğlası",A52A2A:"Kahverengi",DAA520:"Altun Sırık","006400":"Koyu Yeşil","40E0D0":"Turkuaz","0000CD":"Orta Mavi",800080:"Pembe",808080:"Gri",F00:"Kırmızı",FF8C00:"Koyu Portakal",FFD700:"Altın","008000":"Yeşil","0FF":"Ciyan","00F":"Mavi", -EE82EE:"Menekşe",A9A9A9:"Koyu Gri",FFA07A:"Açık Sarımsı",FFA500:"Portakal",FFFF00:"Sarı","00FF00":"Açık Yeşil",AFEEEE:"Sönük Turkuaz",ADD8E6:"Açık Mavi",DDA0DD:"Mor",D3D3D3:"Açık Gri",FFF0F5:"Eflatun Pembe",FAEBD7:"Antik Beyaz",FFFFE0:"Açık Sarı",F0FFF0:"Balsarısı",F0FFFF:"Gök Mavisi",F0F8FF:"Reha Mavi",E6E6FA:"Eflatun",FFF:"Beyaz"},more:"Diğer renkler...",panelTitle:"Renkler",textColorTitle:"Yazı Rengi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tt.js deleted file mode 100644 index 376111d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","tt",{auto:"Автоматик",bgColorTitle:"Фон төсе",colors:{"000":"Кара",8E5:"Бордо","8B4513":"Дарчин","2F4F4F":"Аспид соры","008080":"Күкле-яшелле","000080":"Куе күк","4B0082":"Индиго",696969:"Куе соры",B22222:"Кармин",A52A2A:"Чия кызыл",DAA520:"Алтын каен","006400":"Үлән","40E0D0":"Фирәзә","0000CD":"Фарсы күк",800080:"Шәмәхә",808080:"Соры",F00:"Кызыл",FF8C00:"Кабак",FFD700:"Алтын","008000":"Яшел","0FF":"Ачык зәңгәр","00F":"Зәңгәр",EE82EE:"Миләүшә",A9A9A9:"Ачык соры", -FFA07A:"Кызгылт сары алсу",FFA500:"Кызгылт сары",FFFF00:"Сары","00FF00":"Лайм",AFEEEE:"Тонык күк",ADD8E6:"Тонык күкбаш",DDA0DD:"Аксыл шәмәхә",D3D3D3:"Ачык соры",FFF0F5:"Ал ала миләүшә",FAEBD7:"Җитен",FFFFE0:"Ачык сары",F0FFF0:"Аксыл көрән",F0FFFF:"Ап-ак",F0F8FF:"Аксыл зәңгәр диңгез",E6E6FA:"Ала миләүшә",FFF:"Ак"},more:"Башка төсләр",panelTitle:"Төсләр",textColorTitle:"Текст төсе"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ug.js deleted file mode 100644 index 2ae15574..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/ug.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ug",{auto:"ئۆزلۈكىدىن",bgColorTitle:"تەگلىك رەڭگى",colors:{"000":"قارا",8E5:"قىزغۇچ سېرىق","8B4513":"توق قوڭۇر","2F4F4F":"قارامتۇل يېشىل","008080":"كۆكۈش يېشىل","000080":"قارامتۇل كۆك","4B0082":"كۆكۈش كۈلرەڭ",696969:"قارامتۇل كۈلرەڭ",B22222:"خىش قىزىل",A52A2A:"قوڭۇر",DAA520:"ئالتۇن سېرىق","006400":"توق يېشىل","40E0D0":"كۆكۈچ يېشىل","0000CD":"ئوتتۇراھال كۆك",800080:"بىنەپشە",808080:"كۈلرەڭ",F00:"قىزىل",FF8C00:"توق قىزغۇچ سېرىق",FFD700:"ئالتۇن","008000":"يېشىل", -"0FF":"يېشىل كۆك","00F":"كۆك",EE82EE:"قىزغۇچ بىنەپشە",A9A9A9:"توق كۈلرەڭ",FFA07A:"كاۋا چېچىكى سېرىق",FFA500:"قىزغۇچ سېرىق",FFFF00:"سېرىق","00FF00":"Lime",AFEEEE:"سۇس ھاۋا رەڭ",ADD8E6:"ئوچۇق كۆك",DDA0DD:"قىزغۇچ بىنەپشە",D3D3D3:"سۇس كۆكۈچ كۈلرەڭ",FFF0F5:"سۇس قىزغۇچ بىنەپشە",FAEBD7:"Antique White",FFFFE0:"سۇس سېرىق",F0FFF0:"Honeydew",F0FFFF:"ئاسمان كۆكى",F0F8FF:"سۇس كۆك",E6E6FA:"سۇس بىنەپشە",FFF:"ئاق"},more:"باشقا رەڭ",panelTitle:"رەڭ",textColorTitle:"تېكىست رەڭگى"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/uk.js deleted file mode 100644 index b694a953..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/uk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","uk",{auto:"Авто",bgColorTitle:"Колір фону",colors:{"000":"Чорний",8E5:"Бордовий","8B4513":"Коричневий","2F4F4F":"Темний сіро-зелений","008080":"Морської хвилі","000080":"Сливовий","4B0082":"Індиго",696969:"Темносірий",B22222:"Темночервоний",A52A2A:"Каштановий",DAA520:"Бежевий","006400":"Темнозелений","40E0D0":"Бірюзовий","0000CD":"Темносиній",800080:"Пурпурний",808080:"Сірий",F00:"Червоний",FF8C00:"Темнооранжевий",FFD700:"Жовтий","008000":"Зелений","0FF":"Синьо-зелений", -"00F":"Синій",EE82EE:"Фіолетовий",A9A9A9:"Світлосірий",FFA07A:"Рожевий",FFA500:"Оранжевий",FFFF00:"Яскравожовтий","00FF00":"Салатовий",AFEEEE:"Світлобірюзовий",ADD8E6:"Блакитний",DDA0DD:"Світлофіолетовий",D3D3D3:"Сріблястий",FFF0F5:"Світлорожевий",FAEBD7:"Світлооранжевий",FFFFE0:"Світложовтий",F0FFF0:"Світлозелений",F0FFFF:"Світлий синьо-зелений",F0F8FF:"Світлоблакитний",E6E6FA:"Лавандовий",FFF:"Білий"},more:"Кольори...",panelTitle:"Кольори",textColorTitle:"Колір тексту"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/vi.js deleted file mode 100644 index ee992873..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/vi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","vi",{auto:"Tự động",bgColorTitle:"Màu nền",colors:{"000":"Đen",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Nâu",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Xám",F00:"Đỏ",FF8C00:"Dark Orange",FFD700:"Vàng","008000":"Xanh lá cây","0FF":"Cyan","00F":"Xanh da trời",EE82EE:"Tím",A9A9A9:"Xám tối", -FFA07A:"Light Salmon",FFA500:"Màu cam",FFFF00:"Vàng","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Trắng"},more:"Màu khác...",panelTitle:"Màu sắc",textColorTitle:"Màu chữ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js deleted file mode 100644 index f36e793e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","zh-cn",{auto:"自动",bgColorTitle:"背景颜色",colors:{"000":"黑",8E5:"褐红","8B4513":"深褐","2F4F4F":"墨绿","008080":"绿松石","000080":"海军蓝","4B0082":"靛蓝",696969:"暗灰",B22222:"砖红",A52A2A:"褐",DAA520:"金黄","006400":"深绿","40E0D0":"蓝绿","0000CD":"中蓝",800080:"紫",808080:"灰",F00:"红",FF8C00:"深橙",FFD700:"金","008000":"绿","0FF":"青","00F":"蓝",EE82EE:"紫罗兰",A9A9A9:"深灰",FFA07A:"亮橙",FFA500:"橙",FFFF00:"黄","00FF00":"水绿",AFEEEE:"粉蓝",ADD8E6:"亮蓝",DDA0DD:"梅红",D3D3D3:"淡灰",FFF0F5:"淡紫红",FAEBD7:"古董白",FFFFE0:"淡黄", -F0FFF0:"蜜白",F0FFFF:"天蓝",F0F8FF:"淡蓝",E6E6FA:"淡紫",FFF:"白"},more:"其它颜色...",panelTitle:"颜色",textColorTitle:"文本颜色"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh.js deleted file mode 100644 index e1fb6831..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","zh",{auto:"自動",bgColorTitle:"背景顏色",colors:{"000":"黑色",8E5:"栗色","8B4513":"鞍褐色","2F4F4F":"暗瓦灰色","008080":"水壓色","000080":"丈青澀","4B0082":"靛青",696969:"深灰色",B22222:"磚紅色",A52A2A:"褐色",DAA520:"金黃色","006400":"深綠色","40E0D0":"青綠色","0000CD":"藍色",800080:"紫色",808080:"灰色",F00:"紅色",FF8C00:"深橘色",FFD700:"金色","008000":"綠色","0FF":"藍綠色","00F":"藍色",EE82EE:"紫色",A9A9A9:"暗灰色",FFA07A:"亮鮭紅",FFA500:"橘色",FFFF00:"黃色","00FF00":"鮮綠色",AFEEEE:"綠松色",ADD8E6:"淺藍色",DDA0DD:"枚紅色",D3D3D3:"淺灰色",FFF0F5:"淺紫色", -FAEBD7:"骨董白",FFFFE0:"淺黃色",F0FFF0:"蜜瓜綠",F0FFFF:"天藍色",F0F8FF:"愛麗斯蘭",E6E6FA:"淺紫色",FFF:"白色"},more:"更多顏色",panelTitle:"顏色",textColorTitle:"文字顏色"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/plugin.js deleted file mode 100644 index 3d80f61a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colorbutton/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"bgcolor,textcolor",hidpi:!0,init:function(c){function o(m,g,d,h){var i=new CKEDITOR.style(j["colorButton_"+g+"Style"]),k=CKEDITOR.tools.getNextId()+"_colorBox";c.ui.add(m,CKEDITOR.UI_PANELBUTTON,{label:d, -title:d,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+h,allowedContent:i,requiredContent:i,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":f.panelTitle}},onBlock:function(a,b){b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(q(a,g,k));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var e=b.keys,d="rtl"==c.lang.dir;e[d?37:39]="next";e[40]="next";e[9]="next";e[d?39:37]="prev";e[38]="prev";e[CKEDITOR.SHIFT+ -9]="prev";e[32]="click"},refresh:function(){c.activeFilter.check(i)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=c.getSelection(),a=a&&a.getStartElement(),a=c.elementPath(a),b;if(a){a=a.block||a.blockLimit||c.document.getBody();do b=a&&a.getComputedStyle("back"==g?"background-color":"color")||"transparent";while("back"==g&&"transparent"==b&&a&&(a=a.getParent()));if(!b||"transparent"==b)b="#ffffff";this._.panel._.iframe.getFrameDocument().getById(k).setStyle("background-color", -b);return b}}})}function q(m,g,d){var h=[],i=j.colorButton_colors.split(","),k=c.plugins.colordialog&&!1!==j.colorButton_enableMore,a=i.length+(k?2:1),b=CKEDITOR.tools.addFunction(function(a,b){if("?"==a){var e=arguments.callee,d=function(a){this.removeListener("ok",d);this.removeListener("cancel",d);"ok"==a.name&&e(this.getContentElement("picker","selectedColor").getValue(),b)};c.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)})}else{c.focus();m.hide();c.fire("saveSnapshot"); -c.removeStyle(new CKEDITOR.style(j["colorButton_"+b+"Style"],{color:"inherit"}));if(a){var f=j["colorButton_"+b+"Style"];f.childRule="back"==b?function(a){return p(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||p(a)};c.applyStyle(new CKEDITOR.style(f,{color:a}))}c.fire("saveSnapshot")}});h.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',f.auto,'" onclick="CKEDITOR.tools.callFunction(',b,",null,'",g,"');return false;\" href=\"javascript:void('",f.auto,'\')" role="option" aria-posinset="1" aria-setsize="', -a,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',d,'"></span></td><td colspan=7 align=center>',f.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');for(d=0;d<i.length;d++){0===d%8&&h.push("</tr><tr>");var e=i[d].split("/"),l=e[0],n=e[1]||l;e[1]||(l="#"+l.replace(/^(.)(.)(.)$/,"$1$1$2$2$3$3"));e=c.lang.colorbutton.colors[n]||n;h.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="', -e,'" onclick="CKEDITOR.tools.callFunction(',b,",'",l,"','",g,"'); return false;\" href=\"javascript:void('",e,'\')" role="option" aria-posinset="',d+2,'" aria-setsize="',a,'"><span class="cke_colorbox" style="background-color:#',n,'"></span></a></td>')}k&&h.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',f.more,'" onclick="CKEDITOR.tools.callFunction(',b,",'?','",g,"');return false;\" href=\"javascript:void('",f.more,"')\"",' role="option" aria-posinset="', -a,'" aria-setsize="',a,'">',f.more,"</a></td>");h.push("</tr></table>");return h.join("")}function p(c){return"false"==c.getAttribute("contentEditable")||c.getAttribute("data-nostyle")}var j=c.config,f=c.lang.colorbutton;CKEDITOR.env.hc||(o("TextColor","fore",f.textColorTitle,10),o("BGColor","back",f.bgColorTitle,20))}});CKEDITOR.config.colorButton_colors="000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF"; -CKEDITOR.config.colorButton_foreStyle={element:"span",styles:{color:"#(color)"},overrides:[{element:"font",attributes:{color:null}}]};CKEDITOR.config.colorButton_backStyle={element:"span",styles:{"background-color":"#(color)"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js deleted file mode 100644 index d91dcc65..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("colordialog",function(t){function n(){f.getById(o).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");j&&j.removeAttribute("aria-selected");j=null}function u(a){var a=a.data.getTarget(),b;if("td"==a.getName()&&(b=a.getChild(0).getHtml()))j=a,j.setAttribute("aria-selected",!0),p.getContentElement("picker","selectedColor").setValue(b)}function y(a){for(var a=a.replace(/^#/,""),b=0,c=[];2>=b;b++)c[b]=parseInt(a.substr(2*b,2),16);return"#"+ -(165<=0.2126*c[0]+0.7152*c[1]+0.0722*c[2]?"000":"fff")}function v(a){!a.name&&(a=new CKEDITOR.event(a));var b=!/mouse/.test(a.name),c=a.data.getTarget(),e;if("td"==c.getName()&&(e=c.getChild(0).getHtml()))q(a),b?g=c:w=c,b&&(c.setStyle("border-color",y(e)),c.setStyle("border-style","dotted")),f.getById(k).setStyle("background-color",e),f.getById(l).setHtml(e)}function q(a){if(a=!/mouse/.test(a.name)&&g){var b=a.getChild(0).getHtml();a.setStyle("border-color",b);a.setStyle("border-style","solid")}!g&& -!w&&(f.getById(k).removeStyle("background-color"),f.getById(l).setHtml("&nbsp;"))}function z(a){var b=a.data,c=b.getTarget(),e=b.getKeystroke(),d="rtl"==t.lang.dir;switch(e){case 38:if(a=c.getParent().getPrevious())a=a.getChild([c.getIndex()]),a.focus();b.preventDefault();break;case 40:if(a=c.getParent().getNext())(a=a.getChild([c.getIndex()]))&&1==a.type&&a.focus();b.preventDefault();break;case 32:case 13:u(a);b.preventDefault();break;case d?37:39:if(a=c.getNext())1==a.type&&(a.focus(),b.preventDefault(!0)); -else if(a=c.getParent().getNext())if((a=a.getChild([0]))&&1==a.type)a.focus(),b.preventDefault(!0);break;case d?39:37:if(a=c.getPrevious())a.focus(),b.preventDefault(!0);else if(a=c.getParent().getPrevious())a=a.getLast(),a.focus(),b.preventDefault(!0)}}var r=CKEDITOR.dom.element,f=CKEDITOR.document,h=t.lang.colordialog,p,x={type:"html",html:"&nbsp;"},j,g,w,m=function(a){return CKEDITOR.tools.getNextId()+"_"+a},k=m("hicolor"),l=m("hicolortext"),o=m("selhicolor"),i;(function(){function a(a,d){for(var s= -a;s<a+3;s++){var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var f=d;f<d+3;f++)for(var g=0;6>g;g++)b(e.$,"#"+c[f]+c[g]+c[s])}}function b(a,c){var b=new r(a.insertCell(-1));b.setAttribute("class","ColorCell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",z);b.on("click",u);b.on("focus",v);b.on("blur",q);b.setStyle("background-color",c);b.setStyle("border","1px solid "+c);b.setStyle("width","14px");b.setStyle("height","14px");var d=m("color_table_cell"); -b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+c+"</span>",CKEDITOR.document))}i=CKEDITOR.dom.element.createFromHtml('<table tabIndex="-1" aria-label="'+h.options+'" role="grid" style="border-collapse:separate;" cellspacing="0"><caption class="cke_voice_label">'+h.options+'</caption><tbody role="presentation"></tbody></table>');i.on("mouseover",v);i.on("mouseout",q);var c="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0, -3);a(3,3);var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var d=0;6>d;d++)b(e.$,"#"+c[d]+c[d]+c[d]);for(d=0;12>d;d++)b(e.$,"#000000")})();return{title:h.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){n();var a=g.getChild(0).getHtml();g.setStyle("border-color",a);g.setStyle("border-style","solid");f.getById(k).removeStyle("background-color");f.getById(l).setHtml("&nbsp;");g=null},contents:[{id:"picker",label:h.title,accessKey:"I",elements:[{type:"hbox", -padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"<div></div>",onLoad:function(){CKEDITOR.document.getById(this.domId).append(i)},focus:function(){(g||this.getElement().getElementsByTag("td").getItem(0)).focus()}},x,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"<span>"+h.highlight+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+k+'" style="border: 1px solid; height: 74px; width: 74px;"></div>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+l+'">&nbsp;</div><span>'+h.selected+ -'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+o+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'},{type:"text",label:h.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{f.getById(o).setStyle("background-color",this.getValue())}catch(a){n()}}},x,{type:"button",id:"clear",label:h.clear,onClick:n}]}]}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/af.js deleted file mode 100644 index 9a6d5746..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","af",{clear:"Herstel",highlight:"Aktief",options:"Kleuropsies",selected:"Geselekteer",title:"Kies kleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ar.js deleted file mode 100644 index 3b4a4977..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ar",{clear:"مسح",highlight:"تحديد",options:"اختيارات الألوان",selected:"اللون المختار",title:"اختر اللون"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bg.js deleted file mode 100644 index f57a3a9c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bg",{clear:"Изчистване",highlight:"Осветяване",options:"Цветови опции",selected:"Изберете цвят",title:"Изберете цвят"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bn.js deleted file mode 100644 index 1cd50972..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bs.js deleted file mode 100644 index e8ea577b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bs",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ca.js deleted file mode 100644 index 9e76e9e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ca",{clear:"Neteja",highlight:"Destacat",options:"Opcions del color",selected:"Color Seleccionat",title:"Seleccioni el color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cs.js deleted file mode 100644 index 4de1f1fc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","cs",{clear:"Vyčistit",highlight:"Zvýraznit",options:"Nastavení barvy",selected:"Vybráno",title:"Výběr barvy"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cy.js deleted file mode 100644 index 6536226b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","cy",{clear:"Clirio",highlight:"Uwcholeuo",options:"Opsiynau Lliw",selected:"Lliw a Ddewiswyd",title:"Dewis lliw"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/da.js deleted file mode 100644 index df1c5c85..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","da",{clear:"Nulstil",highlight:"Markér",options:"Farvemuligheder",selected:"Valgt farve",title:"Vælg farve"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/de.js deleted file mode 100644 index 7ccd5b6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","de",{clear:"Entfernen",highlight:"Hervorheben",options:"Farbeoptionen",selected:"Ausgewählte Farbe",title:"Farbe wählen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/el.js deleted file mode 100644 index 1447a1c4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","el",{clear:"Εκκαθάριση",highlight:"Σήμανση",options:"Επιλογές Χρωμάτων",selected:"Επιλεγμένο Χρώμα",title:"Επιλογή χρώματος"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-au.js deleted file mode 100644 index cdde12b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-au",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js deleted file mode 100644 index 535acfca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-ca",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js deleted file mode 100644 index 1ec95ff2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-gb",{clear:"Clear",highlight:"Highlight",options:"Colour Options",selected:"Selected Colour",title:"Select colour"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en.js deleted file mode 100644 index 21a79bc0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eo.js deleted file mode 100644 index aaa8cf96..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","eo",{clear:"Forigi",highlight:"Detaloj",options:"Opcioj pri koloroj",selected:"Selektita koloro",title:"Selekti koloron"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/es.js deleted file mode 100644 index ae4688f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","es",{clear:"Borrar",highlight:"Muestra",options:"Opciones de colores",selected:"Elegido",title:"Elegir color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/et.js deleted file mode 100644 index 4a51ac6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","et",{clear:"Eemalda",highlight:"Näidis",options:"Värvi valikud",selected:"Valitud värv",title:"Värvi valimine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eu.js deleted file mode 100644 index 09a91290..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","eu",{clear:"Garbitu",highlight:"Nabarmendu",options:"Kolore Aukerak",selected:"Hautatutako Kolorea",title:"Kolorea Hautatu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fa.js deleted file mode 100644 index 8b0de9df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fa",{clear:"پاک کردن",highlight:"متمایز",options:"گزینه​های رنگ",selected:"رنگ انتخاب شده",title:"انتخاب رنگ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fi.js deleted file mode 100644 index 8a9a1fe3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fi",{clear:"Poista",highlight:"Korostus",options:"Värin ominaisuudet",selected:"Valittu",title:"Valitse väri"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fo.js deleted file mode 100644 index 575a9d47..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fo",{clear:"Strika",highlight:"Framheva",options:"Litmøguleikar",selected:"Valdur litur",title:"Vel lit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js deleted file mode 100644 index d321a839..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fr-ca",{clear:"Effacer",highlight:"Surligner",options:"Options de couleur",selected:"Couleur sélectionnée",title:"Choisir une couleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr.js deleted file mode 100644 index b99e1b92..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fr",{clear:"Effacer",highlight:"Détails",options:"Option des couleurs",selected:"Couleur choisie",title:"Choisir une couleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gl.js deleted file mode 100644 index 13fcd5fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","gl",{clear:"Limpar",highlight:"Resaltar",options:"Opcións de cor",selected:"Cor seleccionado",title:"Seleccione unha cor"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gu.js deleted file mode 100644 index 658cb5a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","gu",{clear:"સાફ કરવું",highlight:"હાઈઈટ",options:"રંગના વિકલ્પ",selected:"પસંદ કરેલો રંગ",title:"રંગ પસંદ કરો"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/he.js deleted file mode 100644 index c5700716..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","he",{clear:"ניקוי",highlight:"סימון",options:"אפשרויות צבע",selected:"בחירה",title:"בחירת צבע"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hi.js deleted file mode 100644 index d14f1a84..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hi",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hr.js deleted file mode 100644 index 5a99c466..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hr",{clear:"Očisti",highlight:"Istaknuto",options:"Opcije boje",selected:"Odabrana boja",title:"Odaberi boju"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hu.js deleted file mode 100644 index f905e8f0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hu",{clear:"Ürítés",highlight:"Nagyítás",options:"Szín opciók",selected:"Kiválasztott",title:"Válasszon színt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/is.js deleted file mode 100644 index 35044395..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","is",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/it.js deleted file mode 100644 index cb5ca860..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","it",{clear:"cancella",highlight:"Evidenzia",options:"Opzioni colore",selected:"Seleziona il colore",title:"Selezionare il colore"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ja.js deleted file mode 100644 index 01f28518..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ja",{clear:"クリア",highlight:"ハイライト",options:"カラーオプション",selected:"選択された色",title:"色選択"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ka.js deleted file mode 100644 index d11c4849..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ka",{clear:"გასუფთავება",highlight:"ჩვენება",options:"ფერის პარამეტრები",selected:"არჩეული ფერი",title:"ფერის შეცვლა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/km.js deleted file mode 100644 index 9be3d0f0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","km",{clear:"សម្អាត",highlight:"បន្លិច​ពណ៌",options:"ជម្រើស​ពណ៌",selected:"ពណ៌​ដែល​បាន​រើស",title:"រើស​ពណ៌"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ko.js deleted file mode 100644 index 25715bf3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ko",{clear:"제거",highlight:"하이라이트",options:"색상 옵션",selected:"색상 선택됨",title:"색상 선택"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ku.js deleted file mode 100644 index 5b590758..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ku",{clear:"پاکیکەوە",highlight:"نیشانکردن",options:"هەڵبژاردەی ڕەنگەکان",selected:"ڕەنگی هەڵبژێردراو",title:"هەڵبژاردنی ڕەنگ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lt.js deleted file mode 100644 index 4e3f2506..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","lt",{clear:"Išvalyti",highlight:"Paryškinti",options:"Spalvos nustatymai",selected:"Pasirinkta spalva",title:"Pasirinkite spalvą"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lv.js deleted file mode 100644 index 0e4c7b8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","lv",{clear:"Notīrīt",highlight:"Paraugs",options:"Krāsas uzstādījumi",selected:"Izvēlētā krāsa",title:"Izvēlies krāsu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mk.js deleted file mode 100644 index 870e2325..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","mk",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mn.js deleted file mode 100644 index 0547d82c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","mn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ms.js deleted file mode 100644 index 65c6e817..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ms",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nb.js deleted file mode 100644 index dab73fd5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","nb",{clear:"Tøm",highlight:"Merk",options:"Alternativer for farge",selected:"Valgt",title:"Velg farge"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nl.js deleted file mode 100644 index c2ed1223..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","nl",{clear:"Wissen",highlight:"Actief",options:"Kleuropties",selected:"Geselecteerde kleur",title:"Selecteer kleur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/no.js deleted file mode 100644 index 7a853026..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","no",{clear:"Tøm",highlight:"Merk",options:"Alternativer for farge",selected:"Valgt",title:"Velg farge"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pl.js deleted file mode 100644 index 3be00f6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pl",{clear:"Wyczyść",highlight:"Zaznacz",options:"Opcje koloru",selected:"Wybrany",title:"Wybierz kolor"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js deleted file mode 100644 index 90c14fd7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pt-br",{clear:"Limpar",highlight:"Grifar",options:"Opções de Cor",selected:"Cor Selecionada",title:"Selecione uma Cor"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt.js deleted file mode 100644 index ac11b30d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pt",{clear:"Limpar",highlight:"Realçar",options:"Opções da Cor",selected:"Cor Selecionada",title:"Selecionar Cor"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ro.js deleted file mode 100644 index 85d83ffb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ro",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ru.js deleted file mode 100644 index 7fe16d27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ru",{clear:"Очистить",highlight:"Под курсором",options:"Настройки цвета",selected:"Выбранный цвет",title:"Выберите цвет"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/si.js deleted file mode 100644 index 54bb6924..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","si",{clear:"පැහැදිලි",highlight:"මතුකර පෙන්වන්න",options:"වර්ණ විකල්ප",selected:"තෙරු වර්ණ",title:"වර්ණ තෝරන්න"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sk.js deleted file mode 100644 index be5f13a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sk",{clear:"Vyčistiť",highlight:"Zvýrazniť",options:"Možnosti farby",selected:"Vybraná farba",title:"Vyberte farbu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sl.js deleted file mode 100644 index 610c269a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sl",{clear:"Počisti",highlight:"Poudarjeno",options:"Barvne Možnosti",selected:"Izbrano",title:"Izberi barvo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sq.js deleted file mode 100644 index f739ac4d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sq",{clear:"Pastro",highlight:"Thekso",options:"Përzgjedhjet e Ngjyrave",selected:"Ngjyra e Përzgjedhur",title:"Përzgjidh një ngjyrë"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js deleted file mode 100644 index cd518c98..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sr-latn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr.js deleted file mode 100644 index 227ed2ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sr",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sv.js deleted file mode 100644 index d527156a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sv",{clear:"Rensa",highlight:"Markera",options:"Färgalternativ",selected:"Vald färg",title:"Välj färg"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/th.js deleted file mode 100644 index 8f352d9d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","th",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tr.js deleted file mode 100644 index c416c061..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","tr",{clear:"Temizle",highlight:"İşaretle",options:"Renk Seçenekleri",selected:"Seçilmiş",title:"Renk seç"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tt.js deleted file mode 100644 index df9d32ae..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","tt",{clear:"Бушату",highlight:"Билгеләү",options:"Төс көйләүләре",selected:"Сайланган төсләр",title:"Төс сайлау"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ug.js deleted file mode 100644 index f89a948c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ug",{clear:"تازىلا",highlight:"يورۇت",options:"رەڭ تاللانمىسى",selected:"رەڭ تاللاڭ",title:"رەڭ تاللاڭ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/uk.js deleted file mode 100644 index c59d1de8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","uk",{clear:"Очистити",highlight:"Колір, на який вказує курсор",options:"Опції кольорів",selected:"Обраний колір",title:"Обрати колір"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/vi.js deleted file mode 100644 index dae8623e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","vi",{clear:"Xóa bỏ",highlight:"Màu chọn",options:"Tùy chọn màu",selected:"Màu đã chọn",title:"Chọn màu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js deleted file mode 100644 index 25e3b000..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","zh-cn",{clear:"清除",highlight:"高亮",options:"颜色选项",selected:"选择颜色",title:"选择颜色"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh.js deleted file mode 100644 index 57868b94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","zh",{clear:"清除",highlight:"高亮",options:"色彩選項",selected:"選取的色彩",title:"選取色彩"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/plugin.js deleted file mode 100644 index 9f393004..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/colordialog/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.colordialog={requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(b){var c=new CKEDITOR.dialogCommand("colordialog");c.editorFocus=!1;b.addCommand("colordialog",c);CKEDITOR.dialog.add("colordialog",this.path+"dialogs/colordialog.js");b.getColorFromDialog=function(c,f){var d=function(a){this.removeListener("ok", -d);this.removeListener("cancel",d);a="ok"==a.name?this.getValueOf("picker","selectedColor"):null;c.call(f,a)},e=function(a){a.on("ok",d);a.on("cancel",d)};b.execCommand("colordialog");if(b._.storedDialogs&&b._.storedDialogs.colordialog)e(b._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(a){if("colordialog"==a.data.name){var b=a.data.definition;a.removeListener();b.onLoad=CKEDITOR.tools.override(b.onLoad,function(a){return function(){e(this);b.onLoad=a;"function"==typeof a&& -a.call(this)}})}})}}};CKEDITOR.plugins.add("colordialog",CKEDITOR.plugins.colordialog); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt deleted file mode 100644 index 8e09cb23..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -bg.js Found: 5 Missing: 0 -cs.js Found: 5 Missing: 0 -cy.js Found: 5 Missing: 0 -da.js Found: 5 Missing: 0 -de.js Found: 5 Missing: 0 -el.js Found: 5 Missing: 0 -eo.js Found: 5 Missing: 0 -et.js Found: 5 Missing: 0 -fa.js Found: 5 Missing: 0 -fi.js Found: 5 Missing: 0 -fr.js Found: 5 Missing: 0 -gu.js Found: 5 Missing: 0 -he.js Found: 5 Missing: 0 -hr.js Found: 5 Missing: 0 -it.js Found: 5 Missing: 0 -nb.js Found: 5 Missing: 0 -nl.js Found: 5 Missing: 0 -no.js Found: 5 Missing: 0 -pl.js Found: 5 Missing: 0 -tr.js Found: 5 Missing: 0 -ug.js Found: 5 Missing: 0 -uk.js Found: 5 Missing: 0 -vi.js Found: 5 Missing: 0 -zh-cn.js Found: 5 Missing: 0 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ar.js deleted file mode 100644 index c781fcfc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ar",{title:"معلومات العنصر",dialogName:"إسم نافذة الحوار",tabName:"إسم التبويب",elementId:"إسم العنصر",elementType:"نوع العنصر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/bg.js deleted file mode 100644 index 6432b5d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","bg",{title:"Информация за елемента",dialogName:"Име на диалоговия прозорец",tabName:"Име на таб",elementId:"ID на елемента",elementType:"Тип на елемента"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ca.js deleted file mode 100644 index 7505a8d8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ca",{title:"Informació de l'element",dialogName:"Nom de la finestra de quadre de diàleg",tabName:"Nom de la pestanya",elementId:"ID de l'element",elementType:"Tipus d'element"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cs.js deleted file mode 100644 index 5a2573fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","cs",{title:"Informace o prvku",dialogName:"Název dialogového okna",tabName:"Název karty",elementId:"ID prvku",elementType:"Typ prvku"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cy.js deleted file mode 100644 index ffd1c8ac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","cy",{title:"Gwybodaeth am yr Elfen",dialogName:"Enw ffenestr y deialog",tabName:"Enw'r tab",elementId:"ID yr Elfen",elementType:"Math yr elfen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/da.js deleted file mode 100644 index 5bac0651..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","da",{title:"Information på elementet",dialogName:"Dialogboks",tabName:"Tab beskrivelse",elementId:"ID på element",elementType:"Type af element"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/de.js deleted file mode 100644 index 6b350ca3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","de",{title:"Elementinformation",dialogName:"Dialogfenstername",tabName:"Reitername",elementId:"Element ID",elementType:"Elementtyp"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/el.js deleted file mode 100644 index 3b53133d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","el",{title:"Πληροφορίες Στοιχείου",dialogName:"Όνομα παραθύρου διαλόγου",tabName:"Όνομα καρτέλας",elementId:"Αναγνωριστικό Στοιχείου",elementType:"Τύπος στοιχείου"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en-gb.js deleted file mode 100644 index bdadf923..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","en-gb",{title:"Element Information",dialogName:"Dialogue window name",tabName:"Tab name",elementId:"Element ID",elementType:"Element type"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en.js deleted file mode 100644 index e3022855..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","en",{title:"Element Information",dialogName:"Dialog window name",tabName:"Tab name",elementId:"Element ID",elementType:"Element type"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eo.js deleted file mode 100644 index bc67c556..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","eo",{title:"Informo pri la elemento",dialogName:"Nomo de la dialogfenestro",tabName:"Langetnomo",elementId:"ID de la elemento",elementType:"Tipo de la elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/es.js deleted file mode 100644 index 681809ed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","es",{title:"Información del Elemento",dialogName:"Nombre de la ventana de diálogo",tabName:"Nombre de la pestaña",elementId:"ID del Elemento",elementType:"Tipo del elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/et.js deleted file mode 100644 index 548e5865..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","et",{title:"Elemendi andmed",dialogName:"Dialoogiakna nimi",tabName:"Saki nimi",elementId:"Elemendi ID",elementType:"Elemendi liik"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eu.js deleted file mode 100644 index ec05883a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","eu",{title:"Elementuaren Informazioa",dialogName:"Elkarrizketa leihoaren izena",tabName:"Fitxaren izena",elementId:"Elementuaren ID-a",elementType:"Elementu mota"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fa.js deleted file mode 100644 index d89f8fe3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fa",{title:"اطلاعات عنصر",dialogName:"نام پنجره محاوره‌ای",tabName:"نام برگه",elementId:"ID عنصر",elementType:"نوع عنصر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fi.js deleted file mode 100644 index 0eef32cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fi",{title:"Elementin tiedot",dialogName:"Dialogi-ikkunan nimi",tabName:"Välilehden nimi",elementId:"Elementin ID",elementType:"Elementin tyyppi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js deleted file mode 100644 index 074bd4f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fr-ca",{title:"Information de l'élément",dialogName:"Nom de la fenêtre",tabName:"Nom de l'onglet",elementId:"ID de l'élément",elementType:"Type de l'élément"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr.js deleted file mode 100644 index b0686908..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fr",{title:"Information sur l'élément",dialogName:"Nom de la fenêtre de dialogue",tabName:"Nom de l'onglet",elementId:"ID de l'élément",elementType:"Type de l'élément"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gl.js deleted file mode 100644 index 11e1c2a6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","gl",{title:"Información do elemento",dialogName:"Nome da xanela de diálogo",tabName:"Nome da lapela",elementId:"ID do elemento",elementType:"Tipo do elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gu.js deleted file mode 100644 index e7ef6677..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/gu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","gu",{title:"પ્રાથમિક માહિતી",dialogName:"વિન્ડોનું નામ",tabName:"ટેબનું નામ",elementId:"પ્રાથમિક આઈડી",elementType:"પ્રાથમિક પ્રકાર"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/he.js deleted file mode 100644 index aaf968ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","he",{title:"מידע על האלמנט",dialogName:"שם הדיאלוג",tabName:"שם הטאב",elementId:"ID של האלמנט",elementType:"סוג האלמנט"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hr.js deleted file mode 100644 index 0ec29f36..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","hr",{title:"Informacije elementa",dialogName:"Naziv prozora za dijalog",tabName:"Naziva jahača",elementId:"ID elementa",elementType:"Vrsta elementa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hu.js deleted file mode 100644 index 2f3c5653..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","hu",{title:"Elem információ",dialogName:"Párbeszédablak neve",tabName:"Fül neve",elementId:"Elem ID",elementType:"Elem típusa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/id.js deleted file mode 100644 index e988b2f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","id",{title:"Informasi Elemen",dialogName:"Nama jendela dialog",tabName:"Nama tab",elementId:"ID Elemen",elementType:"Tipe elemen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/it.js deleted file mode 100644 index 79a18eab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","it",{title:"Informazioni elemento",dialogName:"Nome finestra di dialogo",tabName:"Nome Tab",elementId:"ID Elemento",elementType:"Tipo elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ja.js deleted file mode 100644 index 6e7bc0fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ja",{title:"エレメント情報",dialogName:"ダイアログウィンドウ名",tabName:"タブ名",elementId:"エレメントID",elementType:"要素タイプ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/km.js deleted file mode 100644 index d9de2802..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","km",{title:"ព័ត៌មាន​នៃ​ធាតុ",dialogName:"ឈ្មោះ​ប្រអប់​វីនដូ",tabName:"ឈ្មោះ​ផ្ទាំង",elementId:"អត្តលេខ​ធាតុ",elementType:"ប្រភេទ​ធាតុ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ko.js deleted file mode 100644 index a41c6a8e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ko",{title:"구성 요소 정보",dialogName:"다이얼로그 윈도우 이름",tabName:"탭 이름",elementId:"요소 ID",elementType:"요소 형식"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ku.js deleted file mode 100644 index 12372f43..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ku",{title:"زانیاری توخم",dialogName:"ناوی پەنجەرەی دیالۆگ",tabName:"ناوی بازدەر تاب",elementId:"ناسنامەی توخم",elementType:"جۆری توخم"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lt.js deleted file mode 100644 index 8ed88b6f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","lt",{title:"Elemento informacija",dialogName:"Dialogo lango pavadinimas",tabName:"Auselės pavadinimas",elementId:"Elemento ID",elementType:"Elemento tipas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lv.js deleted file mode 100644 index 95a2d235..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","lv",{title:"Elementa informācija",dialogName:"Dialoga loga nosaukums",tabName:"Cilnes nosaukums",elementId:"Elementa ID",elementType:"Elementa tips"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nb.js deleted file mode 100644 index 0a8bd3d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","nb",{title:"Elementinformasjon",dialogName:"Navn på dialogvindu",tabName:"Navn på fane",elementId:"Element-ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nl.js deleted file mode 100644 index 587fedfb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","nl",{title:"Elementinformatie",dialogName:"Naam dialoogvenster",tabName:"Tabnaam",elementId:"Element ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/no.js deleted file mode 100644 index 7461a121..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","no",{title:"Elementinformasjon",dialogName:"Navn på dialogvindu",tabName:"Navn på fane",elementId:"Element-ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pl.js deleted file mode 100644 index 1ef3d228..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pl",{title:"Informacja o elemencie",dialogName:"Nazwa okna dialogowego",tabName:"Nazwa zakładki",elementId:"ID elementu",elementType:"Typ elementu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt-br.js deleted file mode 100644 index f75850fc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pt-br",{title:"Informação do Elemento",dialogName:"Nome da janela de diálogo",tabName:"Nome da aba",elementId:"ID do Elemento",elementType:"Tipo do elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt.js deleted file mode 100644 index a9c96a8c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pt",{title:"Informação do Elemento",dialogName:"Nome da janela do diálogo",tabName:"Nome do Separador",elementId:"Id. do Elemento",elementType:"Tipo de Elemento"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ru.js deleted file mode 100644 index 36c4b1de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ru",{title:"Информация об элементе",dialogName:"Имя окна диалога",tabName:"Имя вкладки",elementId:"ID элемента",elementType:"Тип элемента"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/si.js deleted file mode 100644 index a1fb3707..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","si",{title:"මුලද්‍රව්‍ය ",dialogName:"දෙබස් කවුළුවේ නම",tabName:"තීරුවේ නම",elementId:"මුලද්‍රව්‍ය කේතය",elementType:"මුලද්‍රව්‍ය වර්ගය"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sk.js deleted file mode 100644 index e80a613d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sk",{title:"Informácie o prvku",dialogName:"Názov okna dialógu",tabName:"Názov záložky",elementId:"ID prvku",elementType:"Typ prvku"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sl.js deleted file mode 100644 index 6f1df087..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sl",{title:"Podatki elementa",dialogName:"Ime pogovornega okna",tabName:"Ime zavihka",elementId:"ID elementa",elementType:"Tip elementa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sq.js deleted file mode 100644 index bb173c47..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sq",{title:"Të dhënat e elementit",dialogName:"Emri i dritares së dialogut",tabName:"Emri i fletës",elementId:"ID e elementit",elementType:"Lloji i elementit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sv.js deleted file mode 100644 index 1c73e5e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sv",{title:"Elementinformation",dialogName:"Dialogrutans namn",tabName:"Fliknamn",elementId:"Elementet-ID",elementType:"Elementet-typ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tr.js deleted file mode 100644 index 293d3ced..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","tr",{title:"Eleman Bilgisi",dialogName:"İletişim pencere ismi",tabName:"Sekme adı",elementId:"Eleman ID",elementType:"Eleman türü"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tt.js deleted file mode 100644 index e3f94b34..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","tt",{title:"Элемент тасвирламасы",dialogName:"Диалог тәрәзәсе исеме",tabName:"Өстәмә бит исеме",elementId:"Элемент идентификаторы",elementType:"Элемент төре"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ug.js deleted file mode 100644 index b5c98762..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ug",{title:"ئېلېمېنت ئۇچۇرى",dialogName:"سۆزلەشكۈ كۆزنەك ئاتى",tabName:"Tab ئاتى",elementId:"ئېلېمېنت كىملىكى",elementType:"ئېلېمېنت تىپى"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/uk.js deleted file mode 100644 index 3974ef87..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","uk",{title:"Відомості про Елемент",dialogName:"Заголовок діалогового вікна",tabName:"Назва вкладки",elementId:"Ідентифікатор Елемента",elementType:"Тип Елемента"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/vi.js deleted file mode 100644 index 08076e51..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","vi",{title:"Thông tin thành ph",dialogName:"Tên hộp tho",tabName:"Tên th",elementId:"Mã thành ph",elementType:"Loại thành ph"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js deleted file mode 100644 index ae1b8e0b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","zh-cn",{title:"元素信息",dialogName:"对话框窗口名称",tabName:"选项卡名称",elementId:"元素 ID",elementType:"元素类型"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh.js deleted file mode 100644 index 613e9edf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","zh",{title:"元件資訊",dialogName:"對話視窗名稱",tabName:"標籤名稱",elementId:"元件 ID",elementType:"元件類型"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/devtools/plugin.js deleted file mode 100644 index be0a2de6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/devtools/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("devtools",{lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,gu,he,hr,hu,id,it,ja,km,ko,ku,lt,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn",init:function(i){i._.showDialogDefinitionTooltips=1},onLoad:function(){CKEDITOR.document.appendStyleText(CKEDITOR.config.devtools_styles||"#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }#cke_tooltip ul { padding: 0pt; list-style-type: none; }")}}); -(function(){function i(a,c,b,f){var a=a.lang.devtools,j='<a href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.definition.'+(b?"text"==b.type?"textInput":b.type:"content")+'" target="_blank">'+(b?b.type:"content")+"</a>",c="<h2>"+a.title+"</h2><ul><li><strong>"+a.dialogName+"</strong> : "+c.getName()+"</li><li><strong>"+a.tabName+"</strong> : "+f+"</li>";b&&(c+="<li><strong>"+a.elementId+"</strong> : "+b.id+"</li>");c+="<li><strong>"+a.elementType+"</strong> : "+j+"</li>";return c+"</ul>"}function k(d, -c,b,f,j,g){var e=c.getDocumentPosition(),h={"z-index":CKEDITOR.dialog._.currentZIndex+10,top:e.y+c.getSize("height")+"px"};a.setHtml(d(b,f,j,g));a.show();"rtl"==b.lang.dir?(d=CKEDITOR.document.getWindow().getViewPaneSize(),h.right=d.width-e.x-c.getSize("width")+"px"):h.left=e.x+"px";a.setStyles(h)}var a;CKEDITOR.on("reset",function(){a&&a.remove();a=null});CKEDITOR.on("dialogDefinition",function(d){var c=d.editor;if(c._.showDialogDefinitionTooltips){a||(a=CKEDITOR.dom.element.createFromHtml('<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>', -CKEDITOR.document),a.hide(),a.on("mouseover",function(){this.show()}),a.on("mouseout",function(){this.hide()}),a.appendTo(CKEDITOR.document.getBody()));var b=d.data.definition.dialog,f=c.config.devtools_textCallback||i;b.on("load",function(){for(var d=b.parts.tabs.getChildren(),g,e=0,h=d.count();e<h;e++){g=d.getItem(e);g.on("mouseover",function(){var a=this.$.id;k(f,this,c,b,null,a.substring(4,a.lastIndexOf("_")))});g.on("mouseout",function(){a.hide()})}b.foreach(function(d){if(!(d.type in{hbox:1, -vbox:1})){var e=d.getElement();if(e){e.on("mouseover",function(){k(f,this,c,b,d,b._.currentTabId)});e.on("mouseout",function(){a.hide()})}}})})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/dialog/dialogDefinition.js b/platforms/android/assets/www/lib/ckeditor/plugins/dialog/dialogDefinition.js deleted file mode 100644 index 67d361ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/dialog/dialogDefinition.js +++ /dev/null @@ -1,4 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/dialogadvtab/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/dialogadvtab/plugin.js deleted file mode 100644 index 50784d82..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/dialogadvtab/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function f(c){var a=this.att,c=c&&c.hasAttribute(a)&&c.getAttribute(a)||"";void 0!==c&&this.setValue(c)}function g(){for(var c,a=0;a<arguments.length;a++)if(arguments[a]instanceof CKEDITOR.dom.element){c=arguments[a];break}if(c){var a=this.att,b=this.getValue();b?c.setAttribute(a,b):c.removeAttribute(a,b)}}var i={id:1,dir:1,classes:1,styles:1};CKEDITOR.plugins.add("dialogadvtab",{requires:"dialog",allowedContent:function(c){c||(c=i);var a=[];c.id&&a.push("id");c.dir&&a.push("dir");var b= -"";a.length&&(b+="["+a.join(",")+"]");c.classes&&(b+="(*)");c.styles&&(b+="{*}");return b},createAdvancedTab:function(c,a,b){a||(a=i);var d=c.lang.common,h={id:"advanced",label:d.advancedTab,title:d.advancedTab,elements:[{type:"vbox",padding:1,children:[]}]},e=[];if(a.id||a.dir)a.id&&e.push({id:"advId",att:"id",type:"text",requiredContent:b?b+"[id]":null,label:d.id,setup:f,commit:g}),a.dir&&e.push({id:"advLangDir",att:"dir",type:"select",requiredContent:b?b+"[dir]":null,label:d.langDir,"default":"", -style:"width:100%",items:[[d.notSet,""],[d.langDirLTR,"ltr"],[d.langDirRTL,"rtl"]],setup:f,commit:g}),h.elements[0].children.push({type:"hbox",widths:["50%","50%"],children:[].concat(e)});if(a.styles||a.classes)e=[],a.styles&&e.push({id:"advStyles",att:"style",type:"text",requiredContent:b?b+"{cke-xyz}":null,label:d.styles,"default":"",validate:CKEDITOR.dialog.validate.inlineStyle(d.invalidInlineStyle),onChange:function(){},getStyle:function(a,c){var b=this.getValue().match(RegExp("(?:^|;)\\s*"+a+ -"\\s*:\\s*([^;]*)","i"));return b?b[1]:c},updateStyle:function(a,b){var d=this.getValue(),e=c.document.createElement("span");e.setAttribute("style",d);e.setStyle(a,b);d=CKEDITOR.tools.normalizeCssText(e.getAttribute("style"));this.setValue(d,1)},setup:f,commit:g}),a.classes&&e.push({type:"hbox",widths:["45%","55%"],children:[{id:"advCSSClasses",att:"class",type:"text",requiredContent:b?b+"(cke-xyz)":null,label:d.cssClasses,"default":"",setup:f,commit:g}]}),h.elements[0].children.push({type:"hbox", -widths:["50%","50%"],children:[].concat(e)});return h}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/dialogs/div.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/dialogs/div.js deleted file mode 100644 index 80bb959e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/dialogs/div.js +++ /dev/null @@ -1,9 +0,0 @@ -(function(){function p(a,k,o){if(!k.is||!k.getCustomData("block_processed"))k.is&&CKEDITOR.dom.element.setMarker(o,k,"block_processed",!0),a.push(k)}function n(a,k){function o(){this.foreach(function(a){if(/^(?!vbox|hbox)/.test(a.type)&&(a.setup||(a.setup=function(c){a.setValue(c.getAttribute(a.id)||"",1)}),!a.commit))a.commit=function(c){var g=this.getValue();"dir"==a.id&&c.getComputedStyle("direction")==g||(g?c.setAttribute(a.id,g):c.removeAttribute(a.id))}})}var n=function(){var f=CKEDITOR.tools.extend({}, -CKEDITOR.dtd.$blockLimit);a.config.div_wrapTable&&(delete f.td,delete f.th);return f}(),q=CKEDITOR.dtd.div,l={},m=[];return{title:a.lang.div.title,minWidth:400,minHeight:165,contents:[{id:"info",label:a.lang.common.generalTab,title:a.lang.common.generalTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"elementStyle",type:"select",style:"width: 100%;",label:a.lang.div.styleSelectLabel,"default":"",items:[[a.lang.common.notSet,""]],onChange:function(){var f=["info:elementStyle","info:class", -"advanced:dir","advanced:style"],c=this.getDialog(),g=c._element&&c._element.clone()||new CKEDITOR.dom.element("div",a.document);this.commit(g,!0);for(var f=[].concat(f),b=f.length,i,e=0;e<b;e++)(i=c.getContentElement.apply(c,f[e].split(":")))&&i.setup&&i.setup(g,!0)},setup:function(f){for(var c in l)l[c].checkElementRemovable(f,!0,a)&&this.setValue(c,1)},commit:function(f){var c;(c=this.getValue())?l[c].applyToObject(f,a):f.removeAttribute("style")}},{id:"class",type:"text",requiredContent:"div(cke-xyz)", -label:a.lang.common.cssClass,"default":""}]}]},{id:"advanced",label:a.lang.common.advancedTab,title:a.lang.common.advancedTab,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"id",requiredContent:"div[id]",label:a.lang.common.id,"default":""},{type:"text",id:"lang",requiredContent:"div[lang]",label:a.lang.common.langCode,"default":""}]},{type:"hbox",children:[{type:"text",id:"style",requiredContent:"div{cke-xyz}",style:"width: 100%;",label:a.lang.common.cssStyle, -"default":"",commit:function(a){a.setAttribute("style",this.getValue())}}]},{type:"hbox",children:[{type:"text",id:"title",requiredContent:"div[title]",style:"width: 100%;",label:a.lang.common.advisoryTitle,"default":""}]},{type:"select",id:"dir",requiredContent:"div[dir]",style:"width: 100%;",label:a.lang.common.langDir,"default":"",items:[[a.lang.common.notSet,""],[a.lang.common.langDirLtr,"ltr"],[a.lang.common.langDirRtl,"rtl"]]}]}]}],onLoad:function(){o.call(this);var f=this,c=this.getContentElement("info", -"elementStyle");a.getStylesSet(function(g){var b,i;if(g)for(var e=0;e<g.length;e++)i=g[e],i.element&&"div"==i.element&&(b=i.name,l[b]=i=new CKEDITOR.style(i),a.filter.check(i)&&(c.items.push([b,b]),c.add(b,b)));c[1<c.items.length?"enable":"disable"]();setTimeout(function(){f._element&&c.setup(f._element)},0)})},onShow:function(){"editdiv"==k&&this.setupContent(this._element=CKEDITOR.plugins.div.getSurroundDiv(a))},onOk:function(){if("editdiv"==k)m=[this._element];else{var f=[],c={},g=[],b,i=a.getSelection(), -e=i.getRanges(),l=i.createBookmarks(),h,j;for(h=0;h<e.length;h++)for(j=e[h].createIterator();b=j.getNextParagraph();)if(b.getName()in n&&!b.isReadOnly()){var d=b.getChildren();for(b=0;b<d.count();b++)p(g,d.getItem(b),c)}else{for(;!q[b.getName()]&&!b.equals(e[h].root);)b=b.getParent();p(g,b,c)}CKEDITOR.dom.element.clearAllMarkers(c);e=[];h=null;for(j=0;j<g.length;j++)b=g[j],d=a.elementPath(b).blockLimit,d.isReadOnly()&&(d=d.getParent()),a.config.div_wrapTable&&d.is(["td","th"])&&(d=a.elementPath(d.getParent()).blockLimit), -d.equals(h)||(h=d,e.push([])),e[e.length-1].push(b);for(h=0;h<e.length;h++){d=e[h][0];g=d.getParent();for(b=1;b<e[h].length;b++)g=g.getCommonAncestor(e[h][b]);j=new CKEDITOR.dom.element("div",a.document);for(b=0;b<e[h].length;b++){for(d=e[h][b];!d.getParent().equals(g);)d=d.getParent();e[h][b]=d}for(b=0;b<e[h].length;b++)if(d=e[h][b],!d.getCustomData||!d.getCustomData("block_processed"))d.is&&CKEDITOR.dom.element.setMarker(c,d,"block_processed",!0),b||j.insertBefore(d),j.append(d);CKEDITOR.dom.element.clearAllMarkers(c); -f.push(j)}i.selectBookmarks(l);m=f}f=m.length;for(c=0;c<f;c++)this.commitContent(m[c]),!m[c].getAttribute("style")&&m[c].removeAttribute("style");this.hide()},onHide:function(){"editdiv"==k&&this._element.removeCustomData("elementStyle");delete this._element}}}CKEDITOR.dialog.add("creatediv",function(a){return n(a,"creatediv")});CKEDITOR.dialog.add("editdiv",function(a){return n(a,"editdiv")})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/icons/creatediv.png b/platforms/android/assets/www/lib/ckeditor/plugins/div/icons/creatediv.png deleted file mode 100644 index 6cca564d20596ab81caab0eba9305416daec4d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ@N*$V~EA+)JeAfGT|a^^Nr<sqF8)H6$6fld2V!Q*&^g5dAi7T zW=LR{i-y-!wV%QwA}i;X2>J;wU09ZWQpwHh@v+W~goq_qnM5~Sd~<y6+?nRB<zd@u zW>>$vX!*YKeewFGnO*OHn@I6KvQXo3R-4QjIZd(CfXC2S<>8#!Pv;c(xG6I+oc|mV z6O)pc=jStBh1tN^)5th@-gC81jjk!FGoM!Wnd=_<Y;)_a*`zrt>1j+i?%rixa5qnw zg)vcL)7Gu70xUCbMzb@dMjA=*FeEj+efw6>AvE;L?j`(>W;*CTnj_8ZqbAJIwP=A| z^*r<L?1?iSc(u9~eV3YB%+PcE@lA#2GL`e{H4@S`FM3$O;V><gAtol~%npyD>({SO zN&OkNV3pP<n{*4APk9rI``X*t=M=jHikQzndvS{ApLxxzR!Q)%eW|kj&Nu0XrThN- z>x&=zEq~1L>+ioCpKVkg&XnBu-q_xrUtsplc{6RNnZ!j!9XhkmaC3Uvx7L|&)jdC* z{PfAFPzLCinAq6D^73%|)6X5`e*_23t-hRNc6##U$?qGyAH+XU_PlfdzVr6mYdh_k z{&`P&lJB|SfA;*Gyu7UR^ygEToLAYKwKXdC0Z)Wx7n8qGY9v$5)vT>z-@ktke$f7M zZ~dp*`G*f5zJ9>|z;|tJ?YUpSe)VrucMWt{e)-|EXKbGK@87=N%fR&@`@!R@SFa}J z=DzJ+ay;1GzwzY9j~~4~<L}+O=QL~CocZ&WPpbT#q;j&`ZShC#f*l(+ENE_SPQU!D z^1=GWix*FywC`=%?wGhZp(`8CojbQ><HnDVU%q@9oWQX|^TPAJaqHQv80)+*f9e1A z`7b{MNBx-#o6^1l)1_*OYeY#(Vo9o1a#1RfVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~ z1K%aPfoT>=LvDUbW?Cg~4K_cSj{r4Df@}!RPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw T{mw=TsEEPS)z4*}Q$iB}PH=bo diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png b/platforms/android/assets/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png deleted file mode 100644 index f0ca49fdf8b0983126685c25089fce769858633f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3053 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/af.js deleted file mode 100644 index d3d3fc9d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","af",{IdInputLabel:"Id",advisoryTitleInputLabel:"Aanbevole Titel",cssClassInputLabel:"CSS klasse",edit:"Wysig Div",inlineStyleInputLabel:"Inlyn Styl",langDirLTRLabel:"Links na regs (LTR)",langDirLabel:"Skryfrigting",langDirRTLLabel:"Regs na links (RTL)",languageCodeInputLabel:" Taalkode",remove:"Verwyder Div",styleSelectLabel:"Styl",title:"Skep Div houer",toolbar:"Skep Div houer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ar.js deleted file mode 100644 index 21c63f7e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ar",{IdInputLabel:"هوية",advisoryTitleInputLabel:"عنوان التقرير",cssClassInputLabel:"فئات التنسيق",edit:"تحرير Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"اليسار لليمين (LTR)",langDirLabel:"إتجاه النص",langDirRTLLabel:"اليمين لليسار (RTL)",languageCodeInputLabel:"رمز اللغة",remove:"إزالة Div",styleSelectLabel:"نمط",title:"إحداث Div Container",toolbar:"إحداث Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bg.js deleted file mode 100644 index d37a72d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bg",{IdInputLabel:"ID",advisoryTitleInputLabel:"Препоръчително заглавие",cssClassInputLabel:"Класове за CSS",edit:"Промяна на Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Ляво на Дясно (ЛнД)",langDirLabel:"Посока на езика",langDirRTLLabel:"Дясно на Ляво (ДнЛ)",languageCodeInputLabel:" Код на езика",remove:"Премахване на Div",styleSelectLabel:"Стил",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bn.js deleted file mode 100644 index ae62f7d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bs.js deleted file mode 100644 index 259583de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bs",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory title",cssClassInputLabel:"Klase CSS stilova",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"S lijeva na desno (LTR)",langDirLabel:"Smjer pisanja",langDirRTLLabel:"S desna na lijevo (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ca.js deleted file mode 100644 index 118a6816..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ca",{IdInputLabel:"Id",advisoryTitleInputLabel:"Títol de guia",cssClassInputLabel:"Classes de la fulla d'estils",edit:"Edita la Capa",inlineStyleInputLabel:"Estil en línia",langDirLTRLabel:"D'esquerra a dreta (LTR)",langDirLabel:"Direcció de l'idioma",langDirRTLLabel:"De dreta a esquerra (RTL)",languageCodeInputLabel:" Codi d'idioma",remove:"Elimina la Capa",styleSelectLabel:"Estil",title:"Crea una Capa Contenidora",toolbar:"Crea una Capa Contenidora"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cs.js deleted file mode 100644 index 1239c576..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","cs",{IdInputLabel:"Id",advisoryTitleInputLabel:"Nápovědní titulek",cssClassInputLabel:"Třídy stylů",edit:"Změnit Div",inlineStyleInputLabel:"Vnitřní styly",langDirLTRLabel:"Zleva doprava (LTR)",langDirLabel:"Směr jazyka",langDirRTLLabel:"Zprava doleva (RTL)",languageCodeInputLabel:" Kód jazyka",remove:"Odstranit Div",styleSelectLabel:"Styly",title:"Vytvořit Div kontejner",toolbar:"Vytvořit Div kontejner"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cy.js deleted file mode 100644 index aed7b773..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","cy",{IdInputLabel:"Id",advisoryTitleInputLabel:"Teitl Cynghorol",cssClassInputLabel:"Dosbarthiadau Ffeil Arddull",edit:"Golygu Div",inlineStyleInputLabel:"Arddull Mewn Llinell",langDirLTRLabel:"Chwith i'r Dde (LTR)",langDirLabel:"Cyfeiriad yr Iaith",langDirRTLLabel:"Dde i'r Chwith (RTL)",languageCodeInputLabel:" Cod Iaith",remove:"Tynnu Div",styleSelectLabel:"Arddull",title:"Creu Cynhwysydd Div",toolbar:"Creu Cynhwysydd Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/da.js deleted file mode 100644 index 38e5920d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","da",{IdInputLabel:"Id",advisoryTitleInputLabel:"Vejledende titel",cssClassInputLabel:"Typografiark",edit:"Rediger Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Venstre til højre (LTR)",langDirLabel:"Sprogretning",langDirRTLLabel:"Højre til venstre (RTL)",languageCodeInputLabel:" Sprogkode",remove:"Slet Div",styleSelectLabel:"Style",title:"Opret Div Container",toolbar:"Opret Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/de.js deleted file mode 100644 index d5929965..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","de",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tooltip",cssClassInputLabel:"Stylesheet Klasse",edit:"Div bearbeiten",inlineStyleInputLabel:"Inline Stil",langDirLTRLabel:"Links nach Rechs (LTR)",langDirLabel:"Sprache Richtung",langDirRTLLabel:"Rechs nach Links (RTL)",languageCodeInputLabel:"Sprachenkürzel",remove:"Div entfernen",styleSelectLabel:"Style",title:"Div Container erzeugen",toolbar:"Div Container erzeugen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/el.js deleted file mode 100644 index d65661c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","el",{IdInputLabel:"Id",advisoryTitleInputLabel:"Ενδεικτικός Τίτλος",cssClassInputLabel:"Κλάσεις Φύλλων Στυλ",edit:"Επεξεργασία Div",inlineStyleInputLabel:"Στυλ Εν Σειρά",langDirLTRLabel:"Αριστερά προς Δεξιά (LTR)",langDirLabel:"Κατεύθυνση Κειμένου",langDirRTLLabel:"Δεξιά προς Αριστερά (RTL)",languageCodeInputLabel:"Κωδικός Γλώσσας",remove:"Διαγραφή Div",styleSelectLabel:"Μορφή",title:"Δημιουργία Div",toolbar:"Δημιουργία Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-au.js deleted file mode 100644 index eb881031..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-au",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-ca.js deleted file mode 100644 index 136b99f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-ca",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-gb.js deleted file mode 100644 index 04d4745d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-gb",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en.js deleted file mode 100644 index 03fc7d6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eo.js deleted file mode 100644 index e587cac4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","eo",{IdInputLabel:"Id",advisoryTitleInputLabel:"Priskriba Titolo",cssClassInputLabel:"Stilfolioklasoj",edit:"Redakti Div",inlineStyleInputLabel:"Enlinia stilo",langDirLTRLabel:"Maldekstre dekstren (angle LTR)",langDirLabel:"Skribdirekto",langDirRTLLabel:"Dekstre maldekstren (angle RTL)",languageCodeInputLabel:" Lingvokodo",remove:"Forigi Div",styleSelectLabel:"Stilo",title:"Krei DIV ujon",toolbar:"Krei DIV ujon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/es.js deleted file mode 100644 index 78732f14..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","es",{IdInputLabel:"Id",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Clase de hoja de estilos",edit:"Editar Div",inlineStyleInputLabel:"Estilo",langDirLTRLabel:"Izquierda a Derecha (LTR)",langDirLabel:"Orientación",langDirRTLLabel:"Derecha a Izquierda (RTL)",languageCodeInputLabel:" Codigo de idioma",remove:"Quitar Div",styleSelectLabel:"Estilo",title:"Crear contenedor DIV",toolbar:"Crear contenedor DIV"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/et.js deleted file mode 100644 index 690848d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","et",{IdInputLabel:"ID",advisoryTitleInputLabel:"Soovitatav pealkiri",cssClassInputLabel:"Stiililehe klassid",edit:"Muuda Div",inlineStyleInputLabel:"Reasisene stiil",langDirLTRLabel:"Vasakult paremale (LTR)",langDirLabel:"Keele suund",langDirRTLLabel:"Paremalt vasakule (RTL)",languageCodeInputLabel:" Keelekood",remove:"Eemalda Div",styleSelectLabel:"Stiil",title:"Div-konteineri loomine",toolbar:"Div-konteineri loomine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eu.js deleted file mode 100644 index 8108d3bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","eu",{IdInputLabel:"Id",advisoryTitleInputLabel:"Izenburua",cssClassInputLabel:"Estilo-orriko Klaseak",edit:"Div-a editatu",inlineStyleInputLabel:"Inline Estiloa",langDirLTRLabel:"Ezkerretik Eskuinera (LTR)",langDirLabel:"Hizkuntzaren Norabidea",langDirRTLLabel:"Eskumatik Ezkerrera (RTL)",languageCodeInputLabel:"Hizkuntza Kodea",remove:"Div-a Kendu",styleSelectLabel:"Estiloa",title:"Div Edukiontzia Sortu",toolbar:"Div Edukiontzia Sortu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fa.js deleted file mode 100644 index bdc9449c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fa",{IdInputLabel:"شناسه",advisoryTitleInputLabel:"عنوان مشاوره",cssClassInputLabel:"کلاس​های شیوه​نامه",edit:"ویرایش Div",inlineStyleInputLabel:"سبک درون​خطی(Inline Style)",langDirLTRLabel:"چپ به راست (LTR)",langDirLabel:"جهت نوشتاری زبان",langDirRTLLabel:"راست به چپ (RTL)",languageCodeInputLabel:" کد زبان",remove:"حذف Div",styleSelectLabel:"سبک",title:"ایجاد یک محل DIV",toolbar:"ایجاد یک محل DIV"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fi.js deleted file mode 100644 index e8885797..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fi",{IdInputLabel:"Id",advisoryTitleInputLabel:"Ohjeistava otsikko",cssClassInputLabel:"Tyylitiedoston luokat",edit:"Muokkaa Diviä",inlineStyleInputLabel:"Sisätyyli",langDirLTRLabel:"Vasemmalta oikealle (LTR)",langDirLabel:"Kielen suunta",langDirRTLLabel:"Oikealta vasemmalle (RTL)",languageCodeInputLabel:" Kielen koodi",remove:"Poista Div",styleSelectLabel:"Tyyli",title:"Luo div-kehikko",toolbar:"Luo div-kehikko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fo.js deleted file mode 100644 index e00fb861..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fo",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Redigera Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Vinstru til høgru (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Høgru til vinstru (RTL)",languageCodeInputLabel:" Language Code",remove:"Strika Div",styleSelectLabel:"Style",title:"Ger Div Container",toolbar:"Ger Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr-ca.js deleted file mode 100644 index 0f61fc34..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fr-ca",{IdInputLabel:"ID",advisoryTitleInputLabel:"Titre",cssClassInputLabel:"Classes CSS",edit:"Modifier le DIV",inlineStyleInputLabel:"Style en ligne",langDirLTRLabel:"De gauche à droite (LTR)",langDirLabel:"Sens d'écriture",langDirRTLLabel:"De droite à gauche (RTL)",languageCodeInputLabel:"Code de langue",remove:"Supprimer le DIV",styleSelectLabel:"Style",title:"Créer un DIV",toolbar:"Créer un DIV"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr.js deleted file mode 100644 index e936030c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Classe CSS",edit:"Éditer la DIV",inlineStyleInputLabel:"Style en ligne",langDirLTRLabel:"Gauche à droite (LTR)",langDirLabel:"Sens d'écriture",langDirRTLLabel:"Droite à gauche (RTL)",languageCodeInputLabel:"Code de langue",remove:"Enlever la DIV",styleSelectLabel:"Style",title:"Créer un container DIV",toolbar:"Créer un container DIV"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gl.js deleted file mode 100644 index 68cab558..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","gl",{IdInputLabel:"ID",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Clases da folla de estilos",edit:"Editar Div",inlineStyleInputLabel:"Estilo de liña",langDirLTRLabel:"Esquerda a dereita (LTR)",langDirLabel:"Dirección de escritura do idioma",langDirRTLLabel:"Dereita a esquerda (RTL)",languageCodeInputLabel:"Código do idioma",remove:"Retirar Div",styleSelectLabel:"Estilo",title:"Crear un contedor Div",toolbar:"Crear un contedor Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gu.js deleted file mode 100644 index 633644c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","gu",{IdInputLabel:"Id",advisoryTitleInputLabel:"એડવાઈઝર શીર્ષક",cssClassInputLabel:"સ્ટાઈલશીટ કલાસીસ",edit:"ડીવીમાં ફેરફાર કરવો",inlineStyleInputLabel:"ઈનલાઈન પદ્ધતિ",langDirLTRLabel:"ડાબે થી જમણે (LTR)",langDirLabel:"ભાષાની દિશા",langDirRTLLabel:"જમણે થી ડાબે (RTL)",languageCodeInputLabel:"ભાષાનો કોડ",remove:"ડીવી કાઢી કાઢવું",styleSelectLabel:"સ્ટાઈલ",title:"Div કન્ટેનર બનાવુંવું",toolbar:"Div કન્ટેનર બનાવુંવું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/he.js deleted file mode 100644 index 80ad2a97..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","he",{IdInputLabel:"מזהה (ID)",advisoryTitleInputLabel:"כותרת מוצעת",cssClassInputLabel:"מחלקת עיצוב",edit:"עריכת מיכל (Div)",inlineStyleInputLabel:"סגנון פנימי",langDirLTRLabel:"שמאל לימין (LTR)",langDirLabel:"כיוון שפה",langDirRTLLabel:"ימין לשמאל (RTL)",languageCodeInputLabel:"קוד שפה",remove:"הסרת מיכל (Div)",styleSelectLabel:"סגנון",title:"יצירת מיכל (Div)",toolbar:"יצירת מיכל (Div)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hi.js deleted file mode 100644 index fa3f8955..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hi",{IdInputLabel:"Id",advisoryTitleInputLabel:"परामर्श शीर्शक",cssClassInputLabel:"स्टाइल-शीट क्लास",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"बायें से दायें (LTR)",langDirLabel:"भाषा लिखने की दिशा",langDirRTLLabel:"दायें से बायें (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"स्टाइल",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hr.js deleted file mode 100644 index 87d62ffc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Savjetodavni naslov",cssClassInputLabel:"Klase stilova",edit:"Uredi DIV",inlineStyleInputLabel:"Stil u liniji",langDirLTRLabel:"S lijeva na desno (LTR)",langDirLabel:"Smjer jezika",langDirRTLLabel:"S desna na lijevo (RTL)",languageCodeInputLabel:"Jezični kod",remove:"Ukloni DIV",styleSelectLabel:"Stil",title:"Napravi DIV kontejner",toolbar:"Napravi DIV kontejner"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hu.js deleted file mode 100644 index 949b2dd9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hu",{IdInputLabel:"Azonosító",advisoryTitleInputLabel:"Tipp szöveg",cssClassInputLabel:"Stíluslap osztály",edit:"DIV szerkesztése",inlineStyleInputLabel:"Inline stílus",langDirLTRLabel:"Balról jobbra (LTR)",langDirLabel:"Nyelvi irány",langDirRTLLabel:"Jobbról balra (RTL)",languageCodeInputLabel:" Nyelv kódja",remove:"DIV eltávolítása",styleSelectLabel:"Stílus",title:"DIV tároló létrehozása",toolbar:"DIV tároló létrehozása"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/id.js deleted file mode 100644 index a7016a39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","id",{IdInputLabel:"Id",advisoryTitleInputLabel:"Penasehat Judul",cssClassInputLabel:"Kelas Stylesheet",edit:"Sunting Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Kiri ke Kanan (LTR)",langDirLabel:"Arah Bahasa",langDirRTLLabel:"Kanan ke Kiri (RTL)",languageCodeInputLabel:"Kode Bahasa",remove:"Hapus Div",styleSelectLabel:"Gaya",title:"Ciptakan Wadah Div",toolbar:"Cipatakan Wadah Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/is.js deleted file mode 100644 index 39a3b10b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","is",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/it.js deleted file mode 100644 index 4d1717c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","it",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titolo Avviso",cssClassInputLabel:"Classi di stile",edit:"Modifica DIV",inlineStyleInputLabel:"Stile Inline",langDirLTRLabel:"Da sinistra a destra (LTR)",langDirLabel:"Direzione di scrittura",langDirRTLLabel:"Da destra a sinistra (RTL)",languageCodeInputLabel:"Codice lingua",remove:"Rimuovi DIV",styleSelectLabel:"Stile",title:"Crea DIV contenitore",toolbar:"Crea DIV contenitore"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ja.js deleted file mode 100644 index c3fa6f0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ja",{IdInputLabel:"Id",advisoryTitleInputLabel:"Title属性",cssClassInputLabel:"スタイルシートクラス",edit:"Divコンテナを編集",inlineStyleInputLabel:"インラインスタイル",langDirLTRLabel:"左から右 (LTR)",langDirLabel:"文字表記の方向",langDirRTLLabel:"右から左 (RTL)",languageCodeInputLabel:" 言語コード",remove:"Divコンテナを削除",styleSelectLabel:"スタイル",title:"Divコンテナ",toolbar:"Divコンテナ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ka.js deleted file mode 100644 index aff4cc2d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ka",{IdInputLabel:"Id",advisoryTitleInputLabel:"სათაური",cssClassInputLabel:"CSS კლასები",edit:"Div-ის რედაქტირება",inlineStyleInputLabel:"თანდართული სტილი",langDirLTRLabel:"მარცხნიდან მარჯვნიც (LTR)",langDirLabel:"ენის მინართულება",langDirRTLLabel:"მარჯვნიდან მარცხნივ (RTL)",languageCodeInputLabel:"ენის კოდი",remove:"Div-ის წაშლა",styleSelectLabel:"სტილი",title:"Div კონტეინერის შექმნა",toolbar:"Div კონტეინერის შექმნა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/km.js deleted file mode 100644 index 7032cb71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","km",{IdInputLabel:"Id",advisoryTitleInputLabel:"ចំណង​ជើង​ប្រឹក្សា",cssClassInputLabel:"Stylesheet Classes",edit:"កែ Div",inlineStyleInputLabel:"ស្ទីល​ក្នុង​បន្ទាត់",langDirLTRLabel:"ពីឆ្វេងទៅស្តាំ(LTR)",langDirLabel:"ទិសដៅភាសា",langDirRTLLabel:"ពីស្តាំទៅឆ្វេង(RTL)",languageCodeInputLabel:"កូដ​ភាសា",remove:"ដក Div ចេញ",styleSelectLabel:"ស្ទីល",title:"បង្កើត​អ្នក​ផ្ទុក Div",toolbar:"បង្កើត​អ្នក​ផ្ទុក Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ko.js deleted file mode 100644 index ba830273..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ko",{IdInputLabel:"ID",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Div 태그 수정",inlineStyleInputLabel:"인라인 스타일",langDirLTRLabel:"왼쪽에서 오른쪽 (LTR)",langDirLabel:"쓰기 방향",langDirRTLLabel:"오른쪽에서 왼쪽 (RTL)",languageCodeInputLabel:"언어 코드",remove:"Div 태그 삭제",styleSelectLabel:"Style",title:"Div 태그 생성",toolbar:"Div 태그 생성"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ku.js deleted file mode 100644 index 33b89295..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ku",{IdInputLabel:"ناسنامە",advisoryTitleInputLabel:"سەردێڕ",cssClassInputLabel:"شێوازی چینی پەڕه",edit:"چاکسازی Div",inlineStyleInputLabel:"شێوازی ناوهێڵ",langDirLTRLabel:"چەپ بۆ ڕاست (LTR)",langDirLabel:"ئاراستەی زمان",langDirRTLLabel:"ڕاست بۆ چەپ (RTL)",languageCodeInputLabel:"هێمای زمان",remove:"لابردنی Div",styleSelectLabel:"شێواز",title:"دروستکردنی لەخۆگری Div",toolbar:"دروستکردنی لەخۆگری Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lt.js deleted file mode 100644 index 2dace839..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","lt",{IdInputLabel:"Id",advisoryTitleInputLabel:"Patariamas pavadinimas",cssClassInputLabel:"Stilių klasės",edit:"Redaguoti Div",inlineStyleInputLabel:"Vidiniai stiliai",langDirLTRLabel:"Iš kairės į dešinę (LTR)",langDirLabel:"Kalbos nurodymai",langDirRTLLabel:"Iš dešinės į kairę (RTL)",languageCodeInputLabel:" Kalbos kodas",remove:"Pašalinti Div",styleSelectLabel:"Stilius",title:"Sukurti Div elementą",toolbar:"Sukurti Div elementą"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lv.js deleted file mode 100644 index e8cfc365..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","lv",{IdInputLabel:"Id",advisoryTitleInputLabel:"Konsultatīvs virsraksts",cssClassInputLabel:"Stilu klases",edit:"Labot Div",inlineStyleInputLabel:"Iekļautais stils",langDirLTRLabel:"Kreisais uz Labo (LTR)",langDirLabel:"Valodas virziens",langDirRTLLabel:"Labais uz kreiso (RTL)",languageCodeInputLabel:"Valodas kods",remove:"Noņemt Div",styleSelectLabel:"Stils",title:"Izveidot div konteineri",toolbar:"Izveidot div konteineri"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mk.js deleted file mode 100644 index f24eece9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","mk",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mn.js deleted file mode 100644 index cb515d65..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","mn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Зөвлөлдөх гарчиг",cssClassInputLabel:"Stylesheet классууд",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Зүүн талаас баруун тишээ (LTR)",langDirLabel:"Хэлний чиглэл",langDirRTLLabel:"Баруун талаас зүүн тишээ (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Загвар",title:"Div гэдэг хэсэг бий болгох",toolbar:"Div гэдэг хэсэг бий болгох"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ms.js deleted file mode 100644 index 0b06fd00..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ms",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nb.js deleted file mode 100644 index 0cbf6170..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","nb",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tittel",cssClassInputLabel:"Stilark-klasser",edit:"Rediger Div",inlineStyleInputLabel:"Inlinestiler",langDirLTRLabel:"Venstre til høyre (VTH)",langDirLabel:"Språkretning",langDirRTLLabel:"Høyre til venstre (HTV)",languageCodeInputLabel:" Språkkode",remove:"Fjern Div",styleSelectLabel:"Stil",title:"Sett inn Div Container",toolbar:"Sett inn Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nl.js deleted file mode 100644 index 4989eb61..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","nl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Adviserende titel",cssClassInputLabel:"Stylesheet klassen",edit:"Div wijzigen",inlineStyleInputLabel:"Inline stijl",langDirLTRLabel:"Links naar rechts (LTR)",langDirLabel:"Schrijfrichting",langDirRTLLabel:"Rechts naar links (RTL)",languageCodeInputLabel:" Taalcode",remove:"Div verwijderen",styleSelectLabel:"Stijl",title:"Div aanmaken",toolbar:"Div aanmaken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/no.js deleted file mode 100644 index e4319360..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","no",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tittel",cssClassInputLabel:"Stilark-klasser",edit:"Rediger Div",inlineStyleInputLabel:"Inlinestiler",langDirLTRLabel:"Venstre til høyre (VTH)",langDirLabel:"Språkretning",langDirRTLLabel:"Høyre til venstre (HTV)",languageCodeInputLabel:" Språkkode",remove:"Fjern Div",styleSelectLabel:"Stil",title:"Sett inn Div Container",toolbar:"Sett inn Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pl.js deleted file mode 100644 index 11edd560..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Opis obiektu docelowego",cssClassInputLabel:"Klasy arkusza stylów",edit:"Edytuj pojemnik Div",inlineStyleInputLabel:"Style liniowe",langDirLTRLabel:"Od lewej do prawej (LTR)",langDirLabel:"Kierunek tekstu",langDirRTLLabel:"Od prawej do lewej (RTL)",languageCodeInputLabel:"Kod języka",remove:"Usuń pojemnik Div",styleSelectLabel:"Styl",title:"Utwórz pojemnik Div",toolbar:"Utwórz pojemnik Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt-br.js deleted file mode 100644 index 7bbd2cac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pt-br",{IdInputLabel:"Id",advisoryTitleInputLabel:"Título Consulta",cssClassInputLabel:"Classes de CSS",edit:"Editar Div",inlineStyleInputLabel:"Estilo Inline",langDirLTRLabel:"Esquerda para Direita (LTR)",langDirLabel:"Direção da Escrita",langDirRTLLabel:"Direita para Esquerda (RTL)",languageCodeInputLabel:"Código de Idioma",remove:"Remover Div",styleSelectLabel:"Estilo",title:"Criar Container de DIV",toolbar:"Criar Container de DIV"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt.js deleted file mode 100644 index 07fa21bf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pt",{IdInputLabel:"ID",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Classes de Estilo de Folhas Classes",edit:"Editar Div",inlineStyleInputLabel:"Estilho em Linha",langDirLTRLabel:"Esquerda à Direita (LTR)",langDirLabel:"Orientação de idioma",langDirRTLLabel:"Direita a Esquerda (RTL)",languageCodeInputLabel:"Codigo do Idioma",remove:"Remover Div",styleSelectLabel:"Estilo",title:"Criar Div",toolbar:"Criar Div"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ro.js deleted file mode 100644 index 5743edd6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ro",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titlul consultativ",cssClassInputLabel:"Clasele cu stilul paginii (CSS)",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"stânga-dreapta (LTR)",langDirLabel:"Direcţia cuvintelor",langDirRTLLabel:"dreapta-stânga (RTL)",languageCodeInputLabel:"Codul limbii",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ru.js deleted file mode 100644 index a254ceeb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ru",{IdInputLabel:"Идентификатор",advisoryTitleInputLabel:"Заголовок",cssClassInputLabel:"Классы CSS",edit:"Редактировать контейнер",inlineStyleInputLabel:"Стиль элемента",langDirLTRLabel:"Слева направо (LTR)",langDirLabel:"Направление текста",langDirRTLLabel:"Справа налево (RTL)",languageCodeInputLabel:"Код языка",remove:"Удалить контейнер",styleSelectLabel:"Стиль",title:"Создать Div-контейнер",toolbar:"Создать Div-контейнер"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/si.js deleted file mode 100644 index 035a735d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","si",{IdInputLabel:"අංකය",advisoryTitleInputLabel:"උපදේශාත්මක නාමය",cssClassInputLabel:"විලාසපත්‍ර පන්තිය",edit:"වෙනස්කිරීම",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"වමේසිට දකුණුට",langDirLabel:"භාෂා දිශාව",langDirRTLLabel:"දකුණේ සිට වමට",languageCodeInputLabel:"භාෂා ",remove:"ඉවත් කිරීම",styleSelectLabel:"විලාසය",title:"නිර්මාණය ",toolbar:"නිර්මාණය "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sk.js deleted file mode 100644 index ba965da0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sk",{IdInputLabel:"Id",advisoryTitleInputLabel:"Pomocný titulok",cssClassInputLabel:"Triedy štýlu",edit:"Upraviť Div",inlineStyleInputLabel:"Inline štýl",langDirLTRLabel:"Zľava doprava (LTR)",langDirLabel:"Smer jazyka",langDirRTLLabel:"Zprava doľava (RTL)",languageCodeInputLabel:"Kód jazyka",remove:"Odstrániť Div",styleSelectLabel:"Štýl",title:"Vytvoriť Div kontajner",toolbar:"Vytvoriť Div kontajner"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sl.js deleted file mode 100644 index d067d516..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Predlagani naslov",cssClassInputLabel:"Razred stilne predloge",edit:"Uredi Div",inlineStyleInputLabel:"Inline Slog",langDirLTRLabel:"Od leve proti desni (LTR)",langDirLabel:"Smer jezika",langDirRTLLabel:"Od desne proti levi (RTL)",languageCodeInputLabel:"Koda Jezika",remove:"Odstrani Div",styleSelectLabel:"Slog",title:"Ustvari Div Posodo",toolbar:"Ustvari Div Posodo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sq.js deleted file mode 100644 index 8ec9583d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sq",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titull",cssClassInputLabel:"Klasa stili CSS",edit:"Redakto Div",inlineStyleInputLabel:"Stili i brendshëm",langDirLTRLabel:"Nga e majta në të djathë (LTR)",langDirLabel:"Drejtim teksti",langDirRTLLabel:"Nga e djathta në të majtë (RTL)",languageCodeInputLabel:"Kodi i Gjuhës",remove:"Largo Div",styleSelectLabel:"Stil",title:"Krijo Div Përmbajtës",toolbar:"Krijo Div Përmbajtës"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr-latn.js deleted file mode 100644 index 344573b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sr-latn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory naslov",cssClassInputLabel:"Stylesheet klase",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"S leva na desno (LTR)",langDirLabel:"Smer jezika",langDirRTLLabel:"S desna na levo (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr.js deleted file mode 100644 index 194041a9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sv.js deleted file mode 100644 index 56e58762..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sv",{IdInputLabel:"Id",advisoryTitleInputLabel:"Rådgivande titel",cssClassInputLabel:"Stilmallar",edit:"Redigera Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Vänster till höger (LTR)",langDirLabel:"Språkriktning",langDirRTLLabel:"Höger till vänster (RTL)",languageCodeInputLabel:" Språkkod",remove:"Ta bort Div",styleSelectLabel:"Stil",title:"Skapa Div container",toolbar:"Skapa Div container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/th.js deleted file mode 100644 index 1b5bbbe8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","th",{IdInputLabel:"ไอดี",advisoryTitleInputLabel:"คำเกริ่นนำ",cssClassInputLabel:"คลาสของไฟล์กำหนดลักษณะการแสดงผล",edit:"แก้ไข Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"จากซ้ายไปขวา (LTR)",langDirLabel:"การเขียน-อ่านภาษา",langDirRTLLabel:"จากขวามาซ้าย (RTL)",languageCodeInputLabel:"รหัสภาษา",remove:"ลบ Div",styleSelectLabel:"ลักษณะการแสดงผล",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tr.js deleted file mode 100644 index 7c9a0266..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","tr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tavsiye Başlığı",cssClassInputLabel:"Stilltipi Sınıfı",edit:"Div Düzenle",inlineStyleInputLabel:"Inline Stili",langDirLTRLabel:"Soldan sağa (LTR)",langDirLabel:"Dil Yönü",langDirRTLLabel:"Sağdan sola (RTL)",languageCodeInputLabel:" Dil Kodu",remove:"Div Kaldır",styleSelectLabel:"Stil",title:"Div İçeriği Oluştur",toolbar:"Div İçeriği Oluştur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tt.js deleted file mode 100644 index 1dbf9873..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","tt",{IdInputLabel:"Идентификатор",advisoryTitleInputLabel:"Киңәш исем",cssClassInputLabel:"Стильләр класслары",edit:"Edit Div",inlineStyleInputLabel:"Эчке стиль",langDirLTRLabel:"Сулдан уңга язылыш (LTR)",langDirLabel:"Язылыш юнəлеше",langDirRTLLabel:"Уңнан сулга язылыш (RTL)",languageCodeInputLabel:"Тел коды",remove:"Remove Div",styleSelectLabel:"Стиль",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ug.js deleted file mode 100644 index 0ec740ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ug",{IdInputLabel:"ID",advisoryTitleInputLabel:"ماۋزۇ",cssClassInputLabel:"ئۇسلۇب تىپىنىڭ ئاتى",edit:"DIV تەھرىر",inlineStyleInputLabel:"قۇر ئىچىدىكى ئۇسلۇبى",langDirLTRLabel:"سولدىن ئوڭغا (LTR)",langDirLabel:"تىل يۆنىلىشى",langDirRTLLabel:"ئوڭدىن سولغا (RTL)",languageCodeInputLabel:"تىل كودى",remove:"DIV چىقىرىۋەت",styleSelectLabel:"ئۇسلۇب",title:"DIV قاچا قۇر",toolbar:"DIV قاچا قۇر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/uk.js deleted file mode 100644 index 8722fc6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","uk",{IdInputLabel:"Ідентифікатор",advisoryTitleInputLabel:"Зміст випливаючої підказки",cssClassInputLabel:"Клас CSS",edit:"Редагувати блок",inlineStyleInputLabel:"Вписаний стиль",langDirLTRLabel:"Зліва направо (LTR)",langDirLabel:"Напрямок мови",langDirRTLLabel:"Справа наліво (RTL)",languageCodeInputLabel:"Код мови",remove:"Видалити блок",styleSelectLabel:"Стиль CSS",title:"Створити блок-контейнер",toolbar:"Створити блок-контейнер"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/vi.js deleted file mode 100644 index abab6579..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","vi",{IdInputLabel:"Định danh (id)",advisoryTitleInputLabel:"Nhan đề hướng dẫn",cssClassInputLabel:"Các lớp CSS",edit:"Chỉnh sửa",inlineStyleInputLabel:"Kiểu nội dòng",langDirLTRLabel:"Trái sang phải (LTR)",langDirLabel:"Hướng ngôn ngữ",langDirRTLLabel:"Phải qua trái (RTL)",languageCodeInputLabel:"Mã ngôn ngữ",remove:"Xóa bỏ",styleSelectLabel:"Kiểu (style)",title:"Tạo khối các thành phần",toolbar:"Tạo khối các thành phần"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh-cn.js deleted file mode 100644 index 8957cc8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","zh-cn",{IdInputLabel:"ID",advisoryTitleInputLabel:"标题",cssClassInputLabel:"样式类名称",edit:"编辑 DIV",inlineStyleInputLabel:"行内样式",langDirLTRLabel:"从左到右 (LTR)",langDirLabel:"语言方向",langDirRTLLabel:"从右到左 (RTL)",languageCodeInputLabel:"语言代码",remove:"移除 DIV",styleSelectLabel:"样式",title:"创建 DIV 容器",toolbar:"创建 DIV 容器"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh.js deleted file mode 100644 index c266d4c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","zh",{IdInputLabel:"ID",advisoryTitleInputLabel:"標題",cssClassInputLabel:"樣式表類別",edit:"編輯 Div",inlineStyleInputLabel:"行內樣式",langDirLTRLabel:"由左至右 (LTR)",langDirLabel:"語言方向",langDirRTLLabel:"由右至左 (RTL)",languageCodeInputLabel:"語言碼",remove:"移除 Div",styleSelectLabel:"樣式",title:"建立 Div 容器",toolbar:"建立 Div 容器"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/div/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/div/plugin.js deleted file mode 100644 index de6d25a6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/div/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("div",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"creatediv",hidpi:!0,init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv", -{allowedContent:b,requiredContent:"div",contextSensitive:!0,refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",new CKEDITOR.dialogCommand("editdiv",{requiredContent:"div"}));a.addCommand("removediv",{requiredContent:"div",exec:function(a){function c(b){if((b=CKEDITOR.plugins.div.getSurroundDiv(a,b))&&!b.data("cke-div-added"))f.push(b),b.data("cke-div-added")}for(var b=a.getSelection(), -g=b&&b.getRanges(),e,h=b.createBookmarks(),f=[],d=0;d<g.length;d++)e=g[d],e.collapsed?c(b.getStartElement()):(e=new CKEDITOR.dom.walker(e),e.evaluator=c,e.lastForward());for(d=0;d<f.length;d++)f[d].remove(!0);b.selectBookmarks(h)}});a.ui.addButton&&a.ui.addButton("CreateDiv",{label:c.toolbar,command:"creatediv",toolbar:"blocks,50"});a.addMenuItems&&(a.addMenuItems({editdiv:{label:c.edit,command:"editdiv",group:"div",order:1},removediv:{label:c.remove,command:"removediv",group:"div",order:5}}),a.contextMenu&& -a.contextMenu.addListener(function(b){return!b||b.isReadOnly()?null:CKEDITOR.plugins.div.getSurroundDiv(a)?{editdiv:CKEDITOR.TRISTATE_OFF,removediv:CKEDITOR.TRISTATE_OFF}:null}));CKEDITOR.dialog.add("creatediv",this.path+"dialogs/div.js");CKEDITOR.dialog.add("editdiv",this.path+"dialogs/div.js")}}});CKEDITOR.plugins.div={getSurroundDiv:function(a,c){var b=a.elementPath(c);return a.elementPath(b.blockLimit).contains(function(a){return a.is("div")&&!a.isReadOnly()},1)}}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/divarea/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/divarea/plugin.js deleted file mode 100644 index 1140d8c0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/divarea/plugin.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("divarea",{afterInit:function(a){a.addMode("wysiwyg",function(c){var b=CKEDITOR.dom.element.createFromHtml('<div class="cke_wysiwyg_div cke_reset" hidefocus="true"></div>');a.ui.space("contents").append(b);b=a.editable(b);b.detach=CKEDITOR.tools.override(b.detach,function(a){return function(){a.apply(this,arguments);this.remove()}});a.setData(a.getData(1),c);a.fire("contentDom")})}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js deleted file mode 100644 index 28d043f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("docProps",function(g){function p(a,d){var e=function(){b(this);d(this,this._.parentDialog)},b=function(a){a.removeListener("ok",e);a.removeListener("cancel",b)},f=function(a){a.on("ok",e);a.on("cancel",b)};g.execCommand(a);if(g._.storedDialogs.colordialog)f(g._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(b){if(b.data.name==a){var d=b.data.definition;b.removeListener();d.onLoad=CKEDITOR.tools.override(d.onLoad,function(a){return function(){f(this);d.onLoad= -a;"function"==typeof a&&a.call(this)}})}})}function l(){var a=this.getDialog().getContentElement("general",this.id+"Other");a&&("other"==this.getValue()?(a.getInputElement().removeAttribute("readOnly"),a.focus(),a.getElement().removeClass("cke_disabled")):(a.getInputElement().setAttribute("readOnly",!0),a.getElement().addClass("cke_disabled")))}function i(a,d,e){return function(b,f,c){f=k;b="undefined"!=typeof e?e:this.getValue();!b&&a in f?f[a].remove():b&&a in f?f[a].setAttribute("content",b):b&& -(f=new CKEDITOR.dom.element("meta",g.document),f.setAttribute(d?"http-equiv":"name",a),f.setAttribute("content",b),c.append(f))}}function j(a,d){return function(){var e=k,e=a in e?e[a].getAttribute("content")||"":"";if(d)return e;this.setValue(e);return null}}function m(a){return function(d,e,b,f){f.removeAttribute("margin"+a);d=this.getValue();""!==d?f.setStyle("margin-"+a,CKEDITOR.tools.cssLength(d)):f.removeStyle("margin-"+a)}}function n(a,d,e){a.removeStyle(d);a.getComputedStyle(d)!=e&&a.setStyle(d, -e)}var c=g.lang.docprops,h=g.lang.common,k={},o=function(a,d,e){return{type:"hbox",padding:0,widths:["60%","40%"],children:[CKEDITOR.tools.extend({type:"text",id:a,label:c[d]},e||{},1),{type:"button",id:a+"Choose",label:c.chooseColor,className:"colorChooser",onClick:function(){var b=this;p("colordialog",function(d){var e=b.getDialog();e.getContentElement(e._.currentTabId,a).setValue(d.getContentElement("picker","selectedColor").getValue())})}}]}},q="javascript:void((function(){"+encodeURIComponent("document.open();"+ -(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+'document.write( \'<html style="background-color: #ffffff; height: 100%"><head></head><body style="width: 100%; height: 100%; margin: 0px">'+c.previewHtml+"</body></html>' );document.close();")+"})())";return{title:c.title,minHeight:330,minWidth:500,onShow:function(){for(var a=g.document,d=a.getElementsByTag("html").getItem(0),e=a.getHead(),b=a.getBody(),f={},c=a.getElementsByTag("meta"),h=c.count(),i=0;i<h;i++){var j=c.getItem(i);f[j.getAttribute(j.hasAttribute("http-equiv")? -"http-equiv":"name").toLowerCase()]=j}k=f;this.setupContent(a,d,e,b)},onHide:function(){k={}},onOk:function(){var a=g.document,d=a.getElementsByTag("html").getItem(0),e=a.getHead(),b=a.getBody();this.commitContent(a,d,e,b)},contents:[{id:"general",label:h.generalTab,elements:[{type:"text",id:"title",label:c.docTitle,setup:function(a){this.setValue(a.getElementsByTag("title").getItem(0).data("cke-title"))},commit:function(a,d,e,b,c){c||a.getElementsByTag("title").getItem(0).data("cke-title",this.getValue())}}, -{type:"hbox",children:[{type:"select",id:"dir",label:h.langDir,style:"width: 100%",items:[[h.notSet,""],[h.langDirLtr,"ltr"],[h.langDirRtl,"rtl"]],setup:function(a,d,e,b){this.setValue(b.getDirection()||"")},commit:function(a,d,e,b){(a=this.getValue())?b.setAttribute("dir",a):b.removeAttribute("dir");b.removeStyle("direction")}},{type:"text",id:"langCode",label:h.langCode,setup:function(a,d){this.setValue(d.getAttribute("xml:lang")||d.getAttribute("lang")||"")},commit:function(a,d,e,b,c){c||((a=this.getValue())? -d.setAttributes({"xml:lang":a,lang:a}):d.removeAttributes({"xml:lang":1,lang:1}))}}]},{type:"hbox",children:[{type:"select",id:"charset",label:c.charset,style:"width: 100%",items:[[h.notSet,""],[c.charsetASCII,"us-ascii"],[c.charsetCE,"iso-8859-2"],[c.charsetCT,"big5"],[c.charsetCR,"iso-8859-5"],[c.charsetGR,"iso-8859-7"],[c.charsetJP,"iso-2022-jp"],[c.charsetKR,"iso-2022-kr"],[c.charsetTR,"iso-8859-9"],[c.charsetUN,"utf-8"],[c.charsetWE,"iso-8859-1"],[c.other,"other"]],"default":"",onChange:function(){this.getDialog().selectedCharset= -"other"!=this.getValue()?this.getValue():"";l.call(this)},setup:function(){this.metaCharset="charset"in k;var a=j(this.metaCharset?"charset":"content-type",1,1).call(this);!this.metaCharset&&a.match(/charset=[^=]+$/)&&(a=a.substring(a.indexOf("=")+1));if(a){this.setValue(a.toLowerCase());if(!this.getValue()){this.setValue("other");var d=this.getDialog().getContentElement("general","charsetOther");d&&d.setValue(a)}this.getDialog().selectedCharset=a}l.call(this)},commit:function(a,d,e,b,c){c||(b=this.getValue(), -c=this.getDialog().getContentElement("general","charsetOther"),"other"==b&&(b=c?c.getValue():""),b&&!this.metaCharset&&(b=(k["content-type"]?k["content-type"].getAttribute("content").split(";")[0]:"text/html")+"; charset="+b),i(this.metaCharset?"charset":"content-type",1,b).call(this,a,d,e))}},{type:"text",id:"charsetOther",label:c.charsetOther,onChange:function(){this.getDialog().selectedCharset=this.getValue()}}]},{type:"hbox",children:[{type:"select",id:"docType",label:c.docType,style:"width: 100%", -items:[[h.notSet,""],["XHTML 1.1",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'],["XHTML 1.0 Transitional",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'],["XHTML 1.0 Strict",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'],["XHTML 1.0 Frameset",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'], -["HTML 5","<!DOCTYPE html>"],["HTML 4.01 Transitional",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'],["HTML 4.01 Strict",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'],["HTML 4.01 Frameset",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'],["HTML 3.2",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'],["HTML 2.0",'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'],[c.other, -"other"]],onChange:l,setup:function(){if(g.docType&&(this.setValue(g.docType),!this.getValue())){this.setValue("other");var a=this.getDialog().getContentElement("general","docTypeOther");a&&a.setValue(g.docType)}l.call(this)},commit:function(a,d,c,b,f){f||(a=this.getValue(),d=this.getDialog().getContentElement("general","docTypeOther"),g.docType="other"==a?d?d.getValue():"":a)}},{type:"text",id:"docTypeOther",label:c.docTypeOther}]},{type:"checkbox",id:"xhtmlDec",label:c.xhtmlDec,setup:function(){this.setValue(!!g.xmlDeclaration)}, -commit:function(a,d,c,b,f){f||(this.getValue()?(g.xmlDeclaration='<?xml version="1.0" encoding="'+(this.getDialog().selectedCharset||"utf-8")+'"?>',d.setAttribute("xmlns","http://www.w3.org/1999/xhtml")):(g.xmlDeclaration="",d.removeAttribute("xmlns")))}}]},{id:"design",label:c.design,elements:[{type:"hbox",widths:["60%","40%"],children:[{type:"vbox",children:[o("txtColor","txtColor",{setup:function(a,d,c,b){this.setValue(b.getComputedStyle("color"))},commit:function(a,d,c,b,f){if(this.isChanged()|| -f)b.removeAttribute("text"),(a=this.getValue())?b.setStyle("color",a):b.removeStyle("color")}}),o("bgColor","bgColor",{setup:function(a,d,c,b){a=b.getComputedStyle("background-color")||"";this.setValue("transparent"==a?"":a)},commit:function(a,d,c,b,f){if(this.isChanged()||f)b.removeAttribute("bgcolor"),(a=this.getValue())?b.setStyle("background-color",a):n(b,"background-color","transparent")}}),{type:"hbox",widths:["60%","40%"],padding:1,children:[{type:"text",id:"bgImage",label:c.bgImage,setup:function(a, -d,c,b){a=b.getComputedStyle("background-image")||"";a="none"==a?"":a.replace(/url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i,function(a,b,d){return d});this.setValue(a)},commit:function(a,d,c,b){b.removeAttribute("background");(a=this.getValue())?b.setStyle("background-image","url("+a+")"):n(b,"background-image","none")}},{type:"button",id:"bgImageChoose",label:h.browseServer,style:"display:inline-block;margin-top:10px;",hidden:!0,filebrowser:"design:bgImage"}]},{type:"checkbox",id:"bgFixed",label:c.bgFixed, -setup:function(a,d,c,b){this.setValue("fixed"==b.getComputedStyle("background-attachment"))},commit:function(a,d,c,b){this.getValue()?b.setStyle("background-attachment","fixed"):n(b,"background-attachment","scroll")}}]},{type:"vbox",children:[{type:"html",id:"marginTitle",html:'<div style="text-align: center; margin: 0px auto; font-weight: bold">'+c.margin+"</div>"},{type:"text",id:"marginTop",label:c.marginTop,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center", -setup:function(a,d,c,b){this.setValue(b.getStyle("margin-top")||b.getAttribute("margintop")||"")},commit:m("top")},{type:"hbox",children:[{type:"text",id:"marginLeft",label:c.marginLeft,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center",setup:function(a,d,c,b){this.setValue(b.getStyle("margin-left")||b.getAttribute("marginleft")||"")},commit:m("left")},{type:"text",id:"marginRight",label:c.marginRight,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center", -setup:function(a,d,c,b){this.setValue(b.getStyle("margin-right")||b.getAttribute("marginright")||"")},commit:m("right")}]},{type:"text",id:"marginBottom",label:c.marginBottom,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center",setup:function(a,c,e,b){this.setValue(b.getStyle("margin-bottom")||b.getAttribute("marginbottom")||"")},commit:m("bottom")}]}]}]},{id:"meta",label:c.meta,elements:[{type:"textarea",id:"metaKeywords",label:c.metaKeywords,setup:j("keywords"), -commit:i("keywords")},{type:"textarea",id:"metaDescription",label:c.metaDescription,setup:j("description"),commit:i("description")},{type:"text",id:"metaAuthor",label:c.metaAuthor,setup:j("author"),commit:i("author")},{type:"text",id:"metaCopyright",label:c.metaCopyright,setup:j("copyright"),commit:i("copyright")}]},{id:"preview",label:h.preview,elements:[{type:"html",id:"previewHtml",html:'<iframe src="'+q+'" style="width: 100%; height: 310px" hidefocus="true" frameborder="0" id="cke_docProps_preview_iframe"></iframe>', -onLoad:function(){this.getDialog().on("selectPage",function(a){if("preview"==a.data.page){var c=this;setTimeout(function(){var a=CKEDITOR.document.getById("cke_docProps_preview_iframe").getFrameDocument(),b=a.getElementsByTag("html").getItem(0),f=a.getHead(),g=a.getBody();c.commitContent(a,b,f,g,1)},50)}});CKEDITOR.document.getById("cke_docProps_preview_iframe").getAscendant("table").setStyle("height","100%")}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png deleted file mode 100644 index ed286a2587bcbcda876327117dc1521856390384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ=+GfV~EA++{uRCDv=_s`=di+V{@m5mTf=AHv5E=dh?7e+DaNe z8yb0x7Cx9iBj9F5-H8Kv`(ARW&DNQnlh$40sk~@gZ}0k5yW;Nh&UqF3@nEa?oZ|PE z&+n=?A7o$<JowpWk%p3|kj(LidyQwGt*EGY@bV>Rw(dFaPnRwUy)BczUh41Sa$o!Y zchkPdKN+5@Ru&ct3R-4vjf(FvG!8v`|JtovQhkpVl+HKH9#`yIWO?)ZU;V`wJ(?A6 zu>PycPBfY+k*&+Hs_Xf#ciNxMp6ylh+*DpyR~Hs~Rp!Mmy}Nnh$vml%i&imIC^fy_ z#c;g5yj-no(cbRvZsYTxISx-q+uUi`wn#%ju&=-W`NHlK#U0n8rcIyTxhNywLS|kk zN1@E-O`Du1sq8PYlC8Oa{Cn-1t^3^rj~qI5sCYu=tVz!;3uRUtwmmHHn6>QBhn?Ia zt4@_ztxeVbuzKq>6W{;!ZrQqhkN2$dTmCtE|NVT1mP8JR{r8t&%&3|B*oCEGlg`Tb zr4ES_bsS9$f<M)i?7L6MpG}*5_3G96S$DKqOPg1%I<cu|?p)bVHtDsse~WkD{a2ox z{5UvJBqujFb6RRh=+T<^*KA5oZ-2gc@nZhR3Llx{IeB?PZHnK&f0vPy`)51XZ+`Kv zUAq?PoR;sJa{G3)+hW1%*RQX5b$pRVSKRvLw{PFR_4?}-iD00}>C@h9&5Utt7fieV zwybjDtMhJ)H~#+d<Hz2sS%x!xIGPg7eJ@|OGG6~}^{S4JeX+5jQ*F+l+{Ba2v#RP> z(SqP<s*gWPgg)JSo_WLm{pWMc9zS@{uxiz_l!pHdhO0vD!@}=A0j5CJ64!{5l*E!$ ztK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)Mb^}u<l7`&;l+3hB+!}0tG9LkI wkObKfoS#-wo>-L10E}+E%)IR4<ivthz5Jr|+3#$mfQlGAUHx3vIVCg!09%@Se*gdg diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops.png b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/docprops.png deleted file mode 100644 index 8bfdcb914d5adbcfec4cc846c99e7e598068c469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ>v$nV~EA++=+X$-?)h!tuGI|ROfNct9!rHV<kPGgxLvq)+F~F zYztpvaBzvqkNFi#eP8`iY+S;>r0d~TMc=56YtAI~Tz86alV5#tNkQ4$@ALF!W>_Dd zQ~l1;NUs0o*D4mrhTPkG!hJ7KSf&{{E%3VOu^CTi2YEgGZP)i$La<VNZP;ro9_J>7 z1DkYQo=kOc3Gmvudv~|tvOhwV^Um+S`_5f(XIy0D&n_3njJ2MZMHGGr&GmbpVl`Ll zc;PgadCwP4VLD)REa19n<-Ex%o`$o}UWnT77w{@AJ^lHYfB*iS|N8Z7ztW)^yZv=_ zb#B>zH!&T!dR0`(Y4=?<4kj~mbI!v8r#E#hdJ(+;zWv;@X>2>PwnlYuC^fzMT2(Qx z{n{_{<Ant>?FSPa_TT?smz&Fb|GS`|+T@e!=Rf;}hlgK`+VA$I{xfqzk6}vWwvLrd zep{{`DLj*6q<Fr#=DvAqq|kB0K#{#iGH!p<Uwn~+;d&{fM6cVo1cM)unn$Ded`+Ku z=-an%=5NcS1%Jl6>=T_BZ#|c9-RrvJ-6jk!ExXoDPiF`fVQp`3U$#o?+xPGFJcmEr z-@AA3{8O8r{P;0rkw(U>w4X1vStF+v78ZW|{`j%-y4OVo1r6_it9TxI`t+$ix4+oB z`ZR?D6*k8tJ}aL8oMj<1Yw==bV;Mf*(9o%d&ko<cD|`9n6rcr1wU({R&dbm5T*R?@ zUG^i3f63X|uT^|6@85M-&)?tw#<to;Tld|(apOnMgXo_O*B%{`D4zV>(lsz(n(Bex z)X28-tcTr(&s13j7iLPGJAZ!W`R8-y&eioeUG6YR<+RB^=EK)~<u;@%O$4Sw)e_f; zl9a@fRIB8oR3OD*WMF8lYhbQxU=m_zZe?H$MA`;MRt5&XOLhZOD3XTU{FKbJO57T3 zeli~cYLEok5S*V@Ql40p%1~Zju9umYU7Va)kgAtols@~NjTBH3gQu&X%Q~loCIFhL Be2V}8 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png deleted file mode 100644 index 4a966da0391aa0b08e6f6b23e256bd7aa29ae48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1909 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png deleted file mode 100644 index a66c86976062646ab353a237d46d120049047fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1941 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 bV_|S*E^l&Yo9;Xs00000NkvXXu0mjf<LQ{^ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/af.js deleted file mode 100644 index dbda4d7b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/af.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","af",{bgColor:"Agtergrond kleur",bgFixed:"Vasgeklemde Agtergrond",bgImage:"Agtergrond Beeld URL",charset:"Karakterstel Kodeering",charsetASCII:"ASCII",charsetCE:"Sentraal Europa",charsetCR:"Cyrillic",charsetCT:"Chinees Traditioneel (Big5)",charsetGR:"Grieks",charsetJP:"Japanees",charsetKR:"Koreans",charsetOther:"Ander Karakterstel Kodeering",charsetTR:"Turks",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Kies",design:"Design",docTitle:"Bladsy Opskrif", -docType:"Dokument Opskrif Soort",docTypeOther:"Ander Dokument Opskrif Soort",label:"Dokument Eienskappe",margin:"Bladsy Rante",marginBottom:"Onder",marginLeft:"Links",marginRight:"Regs",marginTop:"Bo",meta:"Meta Data",metaAuthor:"Skrywer",metaCopyright:"Kopiereg",metaDescription:"Dokument Beskrywing",metaKeywords:"Dokument Index Sleutelwoorde(comma verdeelt)",other:"<ander>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokument Eienskappe", -txtColor:"Tekskleur",xhtmlDec:"Voeg XHTML verklaring by"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ar.js deleted file mode 100644 index bd26b491..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ar",{bgColor:"لون الخلفية",bgFixed:"جعلها علامة مائية",bgImage:"رابط الصورة الخلفية",charset:"ترميز الحروف",charsetASCII:"ASCII",charsetCE:"أوروبا الوسطى",charsetCR:"السيريلية",charsetCT:"الصينية التقليدية (Big5)",charsetGR:"اليونانية",charsetJP:"اليابانية",charsetKR:"الكورية",charsetOther:"ترميز آخر",charsetTR:"التركية",charsetUN:"Unicode (UTF-8)",charsetWE:"أوروبا الغربية",chooseColor:"اختر",design:"تصميم",docTitle:"عنوان الصفحة",docType:"ترويسة نوع الصفحة", -docTypeOther:"ترويسة نوع صفحة أخرى",label:"خصائص الصفحة",margin:"هوامش الصفحة",marginBottom:"سفلي",marginLeft:"أيسر",marginRight:"أيمن",marginTop:"علوي",meta:"المعرّفات الرأسية",metaAuthor:"الكاتب",metaCopyright:"المالك",metaDescription:"وصف الصفحة",metaKeywords:"الكلمات الأساسية (مفصولة بفواصل)َ",other:"<أخرى>",previewHtml:'<p>هذه مجرد <strong>كتابة بسيطة</strong>من أجل التمثيل. <a href="javascript:void(0)">CKEditor</a>.</p>',title:"خصائص الصفحة",txtColor:"لون النص",xhtmlDec:"تضمين إعلانات لغة XHTMLَ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bg.js deleted file mode 100644 index 5faba47d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bg",{bgColor:"Фон",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Кодова таблица",charsetASCII:"ASCII",charsetCE:"Централна европейска",charsetCR:"Cyrillic",charsetCT:"Китайски традиционен",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Друга кодова таблица",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Изберете",design:"Дизайн",docTitle:"Заглавие на страницата", -docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Настройки на документа",margin:"Page Margins",marginBottom:"Долу",marginLeft:"Ляво",marginRight:"Дясно",marginTop:"Горе",meta:"Мета етикети",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Други...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Настройки на документа",txtColor:"Цвят на шрифт",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bn.js deleted file mode 100644 index 838cbc8f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bn",{bgColor:"ব্যাকগ্রাউন্ড রং",bgFixed:"স্ক্রলহীন ব্যাকগ্রাউন্ড",bgImage:"ব্যাকগ্রাউন্ড ছবির URL",charset:"ক্যারেক্টার সেট এনকোডিং",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"অন্য ক্যারেক্টার সেট এনকোডিং",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"পেজ শীর্ষক", -docType:"ডক্যুমেন্ট টাইপ হেডিং",docTypeOther:"অন্য ডক্যুমেন্ট টাইপ হেডিং",label:"ডক্যুমেন্ট প্রোপার্টি",margin:"পেজ মার্জিন",marginBottom:"নীচে",marginLeft:"বামে",marginRight:"ডানে",marginTop:"উপর",meta:"মেটাডেটা",metaAuthor:"লেখক",metaCopyright:"কপীরাইট",metaDescription:"ডক্যূমেন্ট বর্ণনা",metaKeywords:"ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"ডক্যুমেন্ট প্রোপার্টি", -txtColor:"টেক্স্ট রং",xhtmlDec:"XHTML ডেক্লারেশন যুক্ত কর"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bs.js deleted file mode 100644 index 624acfc4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/bs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bs",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Dno",marginLeft:"Lijevo",marginRight:"Desno",marginTop:"Vrh",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Boja teksta",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ca.js deleted file mode 100644 index 6eafe7fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ca",{bgColor:"Color de fons",bgFixed:"Fons sense desplaçament (Fixe)",bgImage:"URL de la imatge de fons",charset:"Codificació de conjunt de caràcters",charsetASCII:"ASCII",charsetCE:"Europeu Central",charsetCR:"Ciríl·lic",charsetCT:"Xinès tradicional (Big5)",charsetGR:"Grec",charsetJP:"Japonès",charsetKR:"Coreà",charsetOther:"Una altra codificació de caràcters",charsetTR:"Turc",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeu occidental",chooseColor:"Triar",design:"Disseny", -docTitle:"Títol de la pàgina",docType:"Capçalera de tipus de document",docTypeOther:"Un altra capçalera de tipus de document",label:"Propietats del document",margin:"Marges de pàgina",marginBottom:"Peu",marginLeft:"Esquerra",marginRight:"Dreta",marginTop:"Cap",meta:"Metadades",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Descripció del document",metaKeywords:"Paraules clau per a indexació (separats per coma)",other:"Altre...",previewHtml:'<p>Aquest és un <strong>text d\'exemple</strong>. Estàs utilitzant <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propietats del document",txtColor:"Color de Text",xhtmlDec:"Incloure declaracions XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cs.js deleted file mode 100644 index 568bac85..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","cs",{bgColor:"Barva pozadí",bgFixed:"Nerolovatelné (Pevné) pozadí",bgImage:"URL obrázku na pozadí",charset:"Znaková sada",charsetASCII:"ASCII",charsetCE:"Středoevropské jazyky",charsetCR:"Cyrilice",charsetCT:"Tradiční čínština (Big5)",charsetGR:"Řečtina",charsetJP:"Japonština",charsetKR:"Korejština",charsetOther:"Další znaková sada",charsetTR:"Turečtina",charsetUN:"Unicode (UTF-8)",charsetWE:"Západoevropské jazyky",chooseColor:"Výběr",design:"Vzhled",docTitle:"Titulek stránky", -docType:"Typ dokumentu",docTypeOther:"Jiný typ dokumetu",label:"Vlastnosti dokumentu",margin:"Okraje stránky",marginBottom:"Dolní",marginLeft:"Levý",marginRight:"Pravý",marginTop:"Horní",meta:"Metadata",metaAuthor:"Autor",metaCopyright:"Autorská práva",metaDescription:"Popis dokumentu",metaKeywords:"Klíčová slova (oddělená čárkou)",other:"<jiný>",previewHtml:'<p>Toto je <strong>ukázkový text</strong>. Používáte <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Vlastnosti dokumentu",txtColor:"Barva textu", -xhtmlDec:"Zahrnout deklarace XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cy.js deleted file mode 100644 index ef7e1cc9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/cy.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","cy",{bgColor:"Lliw Cefndir",bgFixed:"Cefndir Sefydlog (Ddim yn Sgrolio)",bgImage:"URL Delwedd Cefndir",charset:"Amgodio Set Nodau",charsetASCII:"ASCII",charsetCE:"Ewropeaidd Canol",charsetCR:"Syrilig",charsetCT:"Tsieinëeg Traddodiadol (Big5)",charsetGR:"Groeg",charsetJP:"Siapanëeg",charsetKR:"Corëeg",charsetOther:"Amgodio Set Nodau Arall",charsetTR:"Tyrceg",charsetUN:"Unicode (UTF-8)",charsetWE:"Ewropeaidd Gorllewinol",chooseColor:"Dewis",design:"Cynllunio",docTitle:"Teitl y Dudalen", -docType:"Pennawd Math y Ddogfen",docTypeOther:"Pennawd Math y Ddogfen Arall",label:"Priodweddau Dogfen",margin:"Ffin y Dudalen",marginBottom:"Gwaelod",marginLeft:"Chwith",marginRight:"Dde",marginTop:"Brig",meta:"Tagiau Meta",metaAuthor:"Awdur",metaCopyright:"Hawlfraint",metaDescription:"Disgrifiad y Ddogfen",metaKeywords:"Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)",other:"Arall...",previewHtml:'<p>Dyma ychydig o <strong>destun sampl</strong>. Rydych chi\'n defnyddio <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Priodweddau Dogfen",txtColor:"Lliw y Testun",xhtmlDec:"Cynnwys Datganiadau XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/da.js deleted file mode 100644 index 0a10cf09..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","da",{bgColor:"Baggrundsfarve",bgFixed:"Fastlåst baggrund",bgImage:"Baggrundsbillede URL",charset:"Tegnsætskode",charsetASCII:"ASCII",charsetCE:"Centraleuropæisk",charsetCR:"Kyrillisk",charsetCT:"Traditionel kinesisk (Big5)",charsetGR:"Græsk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Anden tegnsætskode",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropæisk",chooseColor:"Vælg",design:"Design",docTitle:"Sidetitel",docType:"Dokumenttype kategori", -docTypeOther:"Anden dokumenttype kategori",label:"Egenskaber for dokument",margin:"Sidemargen",marginBottom:"Nederst",marginLeft:"Venstre",marginRight:"Højre",marginTop:"Øverst",meta:"Metatags",metaAuthor:"Forfatter",metaCopyright:"Copyright",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument index nøgleord (kommasepareret)",other:"<anden>",previewHtml:'<p>Dette er et <strong>eksempel på noget tekst</strong>. Du benytter <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Egenskaber for dokument", -txtColor:"Tekstfarve",xhtmlDec:"Inkludere XHTML deklartion"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/de.js deleted file mode 100644 index 6dee2e4a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","de",{bgColor:"Hintergrundfarbe",bgFixed:"feststehender Hintergrund",bgImage:"Hintergrundbild URL",charset:"Zeichenkodierung",charsetASCII:"ASCII",charsetCE:"Zentraleuropäisch",charsetCR:"Kyrillisch",charsetCT:"traditionell Chinesisch (Big5)",charsetGR:"Griechisch",charsetJP:"Japanisch",charsetKR:"Koreanisch",charsetOther:"Andere Zeichenkodierung",charsetTR:"Türkisch",charsetUN:"Unicode (UTF-8)",charsetWE:"Westeuropäisch",chooseColor:"Wählen",design:"Design",docTitle:"Seitentitel", -docType:"Dokumententyp",docTypeOther:"Anderer Dokumententyp",label:"Dokument-Eigenschaften",margin:"Seitenränder",marginBottom:"Unten",marginLeft:"Links",marginRight:"Rechts",marginTop:"Oben",meta:"Metadaten",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Dokument-Beschreibung",metaKeywords:"Schlüsselwörter (durch Komma getrennt)",other:"<andere>",previewHtml:'<p>Das ist ein <strong>Beispieltext</strong>. Du schreibst in <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokument-Eigenschaften", -txtColor:"Textfarbe",xhtmlDec:"Beziehe XHTML Deklarationen ein"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/el.js deleted file mode 100644 index 3f0999c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","el",{bgColor:"Χρώμα Φόντου",bgFixed:"Φόντο Χωρίς Κύλιση (Σταθερό)",bgImage:"Διεύθυνση Εικόνας Φόντου",charset:"Κωδικοποίηση Χαρακτήρων",charsetASCII:"ASCII",charsetCE:"Κεντρικής Ευρώπης",charsetCR:"Κυριλλική",charsetCT:"Παραδοσιακή Κινέζικη (Big5)",charsetGR:"Ελληνική",charsetJP:"Ιαπωνική",charsetKR:"Κορεάτικη",charsetOther:"Άλλη Κωδικοποίηση Χαρακτήρων",charsetTR:"Τουρκική",charsetUN:"Διεθνής (UTF-8)",charsetWE:"Δυτικής Ευρώπης",chooseColor:"Επιλέξτε",design:"Σχεδιασμός", -docTitle:"Τίτλος Σελίδας",docType:"Κεφαλίδα Τύπου Εγγράφου",docTypeOther:"Άλλη Κεφαλίδα Τύπου Εγγράφου",label:"Ιδιότητες Εγγράφου",margin:"Περιθώρια Σελίδας",marginBottom:"Κάτω",marginLeft:"Αριστερά",marginRight:"Δεξιά",marginTop:"Κορυφή",meta:"Μεταδεδομένα",metaAuthor:"Δημιουργός",metaCopyright:"Πνευματικά Δικαιώματα",metaDescription:"Περιγραφή Εγγράφου",metaKeywords:"Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)",other:"Άλλο...",previewHtml:'<p>Αυτό είναι ένα <strong>παραδειγματικό κείμενο</strong>. Χρησιμοποιείτε το <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Ιδιότητες Εγγράφου",txtColor:"Χρώμα Κειμένου",xhtmlDec:"Να Συμπεριληφθούν οι Δηλώσεις XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-au.js deleted file mode 100644 index 1991fce7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-au.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-au",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-ca.js deleted file mode 100644 index f135acfa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-ca",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-gb.js deleted file mode 100644 index 4ae5c6f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en-gb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-gb",{bgColor:"Background Colour",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma-separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Colour",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en.js deleted file mode 100644 index 73926df2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/en.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eo.js deleted file mode 100644 index 182ea18b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","eo",{bgColor:"Fona Koloro",bgFixed:"Neruluma Fono",bgImage:"URL de Fona Bildo",charset:"Signara Kodo",charsetASCII:"ASCII",charsetCE:"Centra Eŭropa",charsetCR:"Cirila",charsetCT:"Tradicia Ĉina (Big5)",charsetGR:"Greka",charsetJP:"Japana",charsetKR:"Korea",charsetOther:"Alia Signara Kodo",charsetTR:"Turka",charsetUN:"Unikodo (UTF-8)",charsetWE:"Okcidenta Eŭropa",chooseColor:"Elektu",design:"Dizajno",docTitle:"Paĝotitolo",docType:"Dokumenta Tipo",docTypeOther:"Alia Dokumenta Tipo", -label:"Dokumentaj Atributoj",margin:"Paĝaj Marĝenoj",marginBottom:"Malsupra",marginLeft:"Maldekstra",marginRight:"Dekstra",marginTop:"Supra",meta:"Metadatenoj",metaAuthor:"Verkinto",metaCopyright:"Kopirajto",metaDescription:"Dokumenta Priskribo",metaKeywords:"Ŝlosilvortoj de la Dokumento (apartigitaj de komoj)",other:"<alia>",previewHtml:'<p>Tio estas <strong>sampla teksto</strong>. Vi estas uzanta <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentaj Atributoj",txtColor:"Teksta Koloro", -xhtmlDec:"Inkluzivi XHTML Deklarojn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/es.js deleted file mode 100644 index 8170464f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/es.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","es",{bgColor:"Color de fondo",bgFixed:"Fondo fijo (no se desplaza)",bgImage:"Imagen de fondo",charset:"Codificación de caracteres",charsetASCII:"ASCII",charsetCE:"Centro Europeo",charsetCR:"Ruso",charsetCT:"Chino Tradicional (Big5)",charsetGR:"Griego",charsetJP:"Japonés",charsetKR:"Koreano",charsetOther:"Otra codificación de caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeo occidental",chooseColor:"Elegir",design:"Diseño",docTitle:"Título de página", -docType:"Tipo de documento",docTypeOther:"Otro tipo de documento",label:"Propiedades del documento",margin:"Márgenes",marginBottom:"Inferior",marginLeft:"Izquierdo",marginRight:"Derecho",marginTop:"Superior",meta:"Meta Tags",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Descripción del documento",metaKeywords:"Palabras claves del documento separadas por coma (meta keywords)",other:"Otro...",previewHtml:'<p>Este es un <strong>texto de ejemplo</strong>. Usted está usando <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propiedades del documento",txtColor:"Color del texto",xhtmlDec:"Incluir declaración XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/et.js deleted file mode 100644 index 43ad55d2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","et",{bgColor:"Taustavärv",bgFixed:"Mittekeritav tagataust",bgImage:"Taustapildi URL",charset:"Märgistiku kodeering",charsetASCII:"ASCII",charsetCE:"Kesk-Euroopa",charsetCR:"Kirillisa",charsetCT:"Hiina traditsiooniline (Big5)",charsetGR:"Kreeka",charsetJP:"Jaapani",charsetKR:"Korea",charsetOther:"Ülejäänud märgistike kodeeringud",charsetTR:"Türgi",charsetUN:"Unicode (UTF-8)",charsetWE:"Lääne-Euroopa",chooseColor:"Vali",design:"Disain",docTitle:"Lehekülje tiitel", -docType:"Dokumendi tüüppäis",docTypeOther:"Teised dokumendi tüüppäised",label:"Dokumendi omadused",margin:"Lehekülje äärised",marginBottom:"Alaserv",marginLeft:"Vasakserv",marginRight:"Paremserv",marginTop:"Ülaserv",meta:"Meta andmed",metaAuthor:"Autor",metaCopyright:"Autoriõigus",metaDescription:"Dokumendi kirjeldus",metaKeywords:"Dokumendi võtmesõnad (eraldatud komadega)",other:"<muu>",previewHtml:'<p>See on <strong>näidistekst</strong>. Sa kasutad <a href="javascript:void(0)">CKEditori</a>.</p>', -title:"Dokumendi omadused",txtColor:"Teksti värv",xhtmlDec:"Arva kaasa XHTML deklaratsioonid"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eu.js deleted file mode 100644 index 16175cc1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","eu",{bgColor:"Atzeko Kolorea",bgFixed:"Korritze gabeko Atzealdea",bgImage:"Atzeko Irudiaren URL-a",charset:"Karaktere Multzoaren Kodeketa",charsetASCII:"ASCII",charsetCE:"Erdialdeko Europakoa",charsetCR:"Zirilikoa",charsetCT:"Txinatar Tradizionala (Big5)",charsetGR:"Grekoa",charsetJP:"Japoniarra",charsetKR:"Korearra",charsetOther:"Beste Karaktere Multzoko Kodeketa",charsetTR:"Turkiarra",charsetUN:"Unicode (UTF-8)",charsetWE:"Mendebaldeko Europakoa",chooseColor:"Choose", -design:"Diseinua",docTitle:"Orriaren Izenburua",docType:"Document Type Goiburua",docTypeOther:"Beste Document Type Goiburua",label:"Dokumentuaren Ezarpenak",margin:"Orrialdearen marjinak",marginBottom:"Behean",marginLeft:"Ezkerrean",marginRight:"Eskuman",marginTop:"Goian",meta:"Meta Informazioa",metaAuthor:"Egilea",metaCopyright:"Copyright",metaDescription:"Dokumentuaren Deskribapena",metaKeywords:"Dokumentuaren Gako-hitzak (komarekin bananduta)",other:"<other>",previewHtml:'<p>Hau <strong>adibideko testua</strong> da. <a href="javascript:void(0)">CKEditor</a> erabiltzen ari zara.</p>', -title:"Dokumentuaren Ezarpenak",txtColor:"Testu Kolorea",xhtmlDec:"XHTML Ezarpenak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fa.js deleted file mode 100644 index 078e3838..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fa",{bgColor:"رنگ پس​زمینه",bgFixed:"پس​زمینهٴ ثابت (بدون حرکت)",bgImage:"URL تصویر پسزمینه",charset:"رمزگذاری نویسه​گان",charsetASCII:"اسکی",charsetCE:"اروپای مرکزی",charsetCR:"سیریلیک",charsetCT:"چینی رسمی (Big5)",charsetGR:"یونانی",charsetJP:"ژاپنی",charsetKR:"کره​ای",charsetOther:"رمزگذاری نویسه​گان دیگر",charsetTR:"ترکی",charsetUN:"یونیکد (UTF-8)",charsetWE:"اروپای غربی",chooseColor:"انتخاب",design:"طراحی",docTitle:"عنوان صفحه",docType:"عنوان نوع سند",docTypeOther:"عنوان نوع سند دیگر", -label:"ویژگی​های سند",margin:"حاشیه​های صفحه",marginBottom:"پایین",marginLeft:"چپ",marginRight:"راست",marginTop:"بالا",meta:"فراداده",metaAuthor:"نویسنده",metaCopyright:"حق انتشار",metaDescription:"توصیف سند",metaKeywords:"کلیدواژگان نمایه​گذاری سند (با کاما جدا شوند)",other:"<سایر>",previewHtml:'<p>این یک <strong>متن نمونه</strong> است. شما در حال استفاده از <a href="javascript:void(0)">CKEditor</a> هستید.</p>',title:"ویژگی​های سند",txtColor:"رنگ متن",xhtmlDec:"شامل تعاریف XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fi.js deleted file mode 100644 index 22a9740a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fi",{bgColor:"Taustaväri",bgFixed:"Paikallaanpysyvä tausta",bgImage:"Taustakuva",charset:"Merkistökoodaus",charsetASCII:"ASCII",charsetCE:"Keskieurooppalainen",charsetCR:"Kyrillinen",charsetCT:"Kiina, perinteinen (Big5)",charsetGR:"Kreikka",charsetJP:"Japani",charsetKR:"Korealainen",charsetOther:"Muu merkistökoodaus",charsetTR:"Turkkilainen",charsetUN:"Unicode (UTF-8)",charsetWE:"Länsieurooppalainen",chooseColor:"Valitse",design:"Sommittelu",docTitle:"Sivun nimi", -docType:"Dokumentin tyyppi",docTypeOther:"Muu dokumentin tyyppi",label:"Dokumentin ominaisuudet",margin:"Sivun marginaalit",marginBottom:"Ala",marginLeft:"Vasen",marginRight:"Oikea",marginTop:"Ylä",meta:"Metatieto",metaAuthor:"Tekijä",metaCopyright:"Tekijänoikeudet",metaDescription:"Kuvaus",metaKeywords:"Hakusanat (pilkulla erotettuna)",other:"<muu>",previewHtml:'<p>Tämä on <strong>esimerkkitekstiä</strong>. Käytät juuri <a href="javascript:void(0)">CKEditoria</a>.</p>',title:"Dokumentin ominaisuudet", -txtColor:"Tekstiväri",xhtmlDec:"Lisää XHTML julistukset"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fo.js deleted file mode 100644 index ef352698..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fo",{bgColor:"Bakgrundslitur",bgFixed:"Læst bakgrund (rullar ikki)",bgImage:"Leið til bakgrundsmynd (URL)",charset:"Teknsett koda",charsetASCII:"ASCII",charsetCE:"Miðeuropa",charsetCR:"Cyrilliskt",charsetCT:"Kinesiskt traditionelt (Big5)",charsetGR:"Grikst",charsetJP:"Japanskt",charsetKR:"Koreanskt",charsetOther:"Onnur teknsett koda",charsetTR:"Turkiskt",charsetUN:"Unicode (UTF-8)",charsetWE:"Vestureuropa",chooseColor:"Vel",design:"Design",docTitle:"Síðuheiti", -docType:"Dokumentslag yvirskrift",docTypeOther:"Annað dokumentslag yvirskrift",label:"Eginleikar fyri dokument",margin:"Síðubreddar",marginBottom:"Niðast",marginLeft:"Vinstra",marginRight:"Høgra",marginTop:"Ovast",meta:"META-upplýsingar",metaAuthor:"Høvundur",metaCopyright:"Upphavsrættindi",metaDescription:"Dokumentlýsing",metaKeywords:"Dokument index lyklaorð (sundurbýtt við komma)",other:"<annað>",previewHtml:'<p>Hetta er ein <strong>royndartekstur</strong>. Tygum brúka <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Eginleikar fyri dokument",txtColor:"Tekstlitur",xhtmlDec:"Viðfest XHTML deklaratiónir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js deleted file mode 100644 index 31a809e8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fr-ca",{bgColor:"Couleur de fond",bgFixed:"Image fixe sans défilement",bgImage:"Image de fond",charset:"Encodage",charsetASCII:"ACSII",charsetCE:"Europe Centrale",charsetCR:"Cyrillique",charsetCT:"Chinois Traditionnel (Big5)",charsetGR:"Grecque",charsetJP:"Japonais",charsetKR:"Coréen",charsetOther:"Autre encodage",charsetTR:"Turque",charsetUN:"Unicode (UTF-8)",charsetWE:"Occidental",chooseColor:"Sélectionner",design:"Design",docTitle:"Titre de la page",docType:"Type de document", -docTypeOther:"Autre type de document",label:"Propriétés du document",margin:"Marges",marginBottom:"Bas",marginLeft:"Gauche",marginRight:"Droite",marginTop:"Haut",meta:"Méta-données",metaAuthor:"Auteur",metaCopyright:"Copyright",metaDescription:"Description",metaKeywords:"Mots-clés (séparés par des virgules)",other:"Autre...",previewHtml:'<p>Voici un <strong>example de texte</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Propriétés du document",txtColor:"Couleur de caractère", -xhtmlDec:"Inclure les déclarations XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr.js deleted file mode 100644 index f22e2493..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fr",{bgColor:"Couleur de fond",bgFixed:"Image fixe sans défilement",bgImage:"Image de fond",charset:"Encodage de caractère",charsetASCII:"ASCII",charsetCE:"Europe Centrale",charsetCR:"Cyrillique",charsetCT:"Chinois Traditionnel (Big5)",charsetGR:"Grec",charsetJP:"Japonais",charsetKR:"Coréen",charsetOther:"Autre encodage de caractère",charsetTR:"Turc",charsetUN:"Unicode (UTF-8)",charsetWE:"Occidental",chooseColor:"Choisissez",design:"Design",docTitle:"Titre de la page", -docType:"Type de document",docTypeOther:"Autre type de document",label:"Propriétés du document",margin:"Marges",marginBottom:"Bas",marginLeft:"Gauche",marginRight:"Droite",marginTop:"Haut",meta:"Métadonnées",metaAuthor:"Auteur",metaCopyright:"Copyright",metaDescription:"Description",metaKeywords:"Mots-clés (séparés par des virgules)",other:"<autre>",previewHtml:'<p>Ceci est un <strong>texte d\'exemple</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Propriétés du document", -txtColor:"Couleur de texte",xhtmlDec:"Inclure les déclarations XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gl.js deleted file mode 100644 index f8b0c21d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","gl",{bgColor:"Cor do fondo",bgFixed:"Fondo fixo (non se despraza)",bgImage:"URL da imaxe do fondo",charset:"Codificación de caracteres",charsetASCII:"ASCII",charsetCE:"Centro europeo",charsetCR:"Cirílico",charsetCT:"Chinés tradicional (Big5)",charsetGR:"Grego",charsetJP:"Xaponés",charsetKR:"Coreano",charsetOther:"Outra codificación de caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeo occidental",chooseColor:"Escoller",design:"Deseño", -docTitle:"Título da páxina",docType:"Cabeceira do tipo de documento",docTypeOther:"Outra cabeceira do tipo de documento",label:"Propiedades do documento",margin:"Marxes da páxina",marginBottom:"Abaixo",marginLeft:"Esquerda",marginRight:"Dereita",marginTop:"Arriba",meta:"Meta etiquetas",metaAuthor:"Autor",metaCopyright:"Dereito de autoría",metaDescription:"Descrición do documento",metaKeywords:"Palabras clave de indexación do documento (separadas por comas)",other:"Outro...",previewHtml:'<p>Este é un <strong>texto de exemplo</strong>. Vostede esta a empregar o <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propiedades do documento",txtColor:"Cor do texto",xhtmlDec:"Incluír as declaracións XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gu.js deleted file mode 100644 index 7458ffe6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/gu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","gu",{bgColor:"બૅકગ્રાઉન્ડ રંગ",bgFixed:"સ્ક્રોલ ન થાય તેવું બૅકગ્રાઉન્ડ",bgImage:"બૅકગ્રાઉન્ડ ચિત્ર URL",charset:"કેરેક્ટર સેટ એન્કોડિંગ",charsetASCII:"ASCII",charsetCE:"મધ્ય યુરોપિઅન (Central European)",charsetCR:"સિરીલિક (Cyrillic)",charsetCT:"ચાઇનીઝ (Chinese Traditional Big5)",charsetGR:"ગ્રીક (Greek)",charsetJP:"જાપાનિઝ (Japanese)",charsetKR:"કોરીયન (Korean)",charsetOther:"અન્ય કેરેક્ટર સેટ એન્કોડિંગ",charsetTR:"ટર્કિ (Turkish)",charsetUN:"યૂનિકોડ (UTF-8)", -charsetWE:"પશ્ચિમ યુરોપિઅન (Western European)",chooseColor:"વિકલ્પ",design:"ડીસા",docTitle:"પેજ મથાળું/ટાઇટલ",docType:"ડૉક્યુમન્ટ પ્રકાર શીર્ષક",docTypeOther:"અન્ય ડૉક્યુમન્ટ પ્રકાર શીર્ષક",label:"ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ",margin:"પેજ માર્જિન",marginBottom:"નીચે",marginLeft:"ડાબી",marginRight:"જમણી",marginTop:"ઉપર",meta:"મેટાડૅટા",metaAuthor:"લેખક",metaCopyright:"કૉપિરાઇટ",metaDescription:"ડૉક્યુમન્ટ વર્ણન",metaKeywords:"ડૉક્યુમન્ટ ઇન્ડેક્સ સંકેતશબ્દ (અલ્પવિરામ (,) થી અલગ કરો)",other:"<other>",previewHtml:'<p>આ એક <strong>સેમ્પલ ટેક્ષ્ત્</strong> છે. તમે <a href="javascript:void(0)">CKEditor</a> વાપરો છો.</p>', -title:"ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ",txtColor:"શબ્દનો રંગ",xhtmlDec:"XHTML સૂચના સમાવિષ્ટ કરવી"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/he.js deleted file mode 100644 index d71d1586..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","he",{bgColor:"צבע רקע",bgFixed:"רקע לא נגלל (צמוד)",bgImage:"כתובת של תמונת רקע",charset:"קידוד תווים",charsetASCII:"ASCII",charsetCE:"מרכז אירופאי",charsetCR:"קירילי",charsetCT:"סיני מסורתי (Big5)",charsetGR:"יווני",charsetJP:"יפני",charsetKR:"קוריאני",charsetOther:"קידוד תווים אחר",charsetTR:"טורקי",charsetUN:"יוניקוד (UTF-8)",charsetWE:"מערב אירופאי",chooseColor:"בחירה",design:"עיצוב",docTitle:"כותרת עמוד",docType:"כותר סוג מסמך",docTypeOther:"כותר סוג מסמך אחר", -label:"מאפייני מסמך",margin:"מרווחי עמוד",marginBottom:"תחתון",marginLeft:"שמאלי",marginRight:"ימני",marginTop:"עליון",meta:"תגי Meta",metaAuthor:"מחבר/ת",metaCopyright:"זכויות יוצרים",metaDescription:"תיאור המסמך",metaKeywords:"מילות מפתח של המסמך (מופרדות בפסיק)",other:"אחר...",previewHtml:'<p>זהו <strong>טקסט הדגמה</strong>. את/ה משתמש/ת ב<a href="javascript:void(0)">CKEditor</a>.</p>',title:"מאפייני מסמך",txtColor:"צבע טקסט",xhtmlDec:"כלול הכרזות XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hi.js deleted file mode 100644 index 68266186..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hi",{bgColor:"बैक्ग्राउन्ड रंग",bgFixed:"स्क्रॉल न करने वाला बैक्ग्राउन्ड",bgImage:"बैक्ग्राउन्ड तस्वीर URL",charset:"करेक्टर सॅट ऍन्कोडिंग",charsetASCII:"ASCII",charsetCE:"मध्य यूरोपीय (Central European)",charsetCR:"सिरीलिक (Cyrillic)",charsetCT:"चीनी (Chinese Traditional Big5)",charsetGR:"यवन (Greek)",charsetJP:"जापानी (Japanese)",charsetKR:"कोरीयन (Korean)",charsetOther:"अन्य करेक्टर सॅट ऍन्कोडिंग",charsetTR:"तुर्की (Turkish)",charsetUN:"यूनीकोड (UTF-8)",charsetWE:"पश्चिम यूरोपीय (Western European)", -chooseColor:"Choose",design:"Design",docTitle:"पेज शीर्षक",docType:"डॉक्यूमॅन्ट प्रकार शीर्षक",docTypeOther:"अन्य डॉक्यूमॅन्ट प्रकार शीर्षक",label:"डॉक्यूमॅन्ट प्रॉपर्टीज़",margin:"पेज मार्जिन",marginBottom:"नीचे",marginLeft:"बायें",marginRight:"दायें",marginTop:"ऊपर",meta:"मॅटाडेटा",metaAuthor:"लेखक",metaCopyright:"कॉपीराइट",metaDescription:"डॉक्यूमॅन्ट करॅक्टरन",metaKeywords:"डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)",other:"<अन्य>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"डॉक्यूमॅन्ट प्रॉपर्टीज़",txtColor:"टेक्स्ट रंग",xhtmlDec:"XHTML सूचना सम्मिलित करें"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hr.js deleted file mode 100644 index 3477c6f0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hr",{bgColor:"Boja pozadine",bgFixed:"Pozadine se ne pomiče",bgImage:"URL slike pozadine",charset:"Enkodiranje znakova",charsetASCII:"ASCII",charsetCE:"Središnja Europa",charsetCR:"Ćirilica",charsetCT:"Tradicionalna kineska (Big5)",charsetGR:"Grčka",charsetJP:"Japanska",charsetKR:"Koreanska",charsetOther:"Ostalo enkodiranje znakova",charsetTR:"Turska",charsetUN:"Unicode (UTF-8)",charsetWE:"Zapadna Europa",chooseColor:"Odaberi",design:"Dizajn",docTitle:"Naslov stranice", -docType:"Zaglavlje vrste dokumenta",docTypeOther:"Ostalo zaglavlje vrste dokumenta",label:"Svojstva dokumenta",margin:"Margine stranice",marginBottom:"Dolje",marginLeft:"Lijevo",marginRight:"Desno",marginTop:"Vrh",meta:"Meta Data",metaAuthor:"Autor",metaCopyright:"Autorska prava",metaDescription:"Opis dokumenta",metaKeywords:"Ključne riječi dokumenta (odvojene zarezom)",other:"<drugi>",previewHtml:'<p>Ovo je neki <strong>primjer teksta</strong>. Vi koristite <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Svojstva dokumenta",txtColor:"Boja teksta",xhtmlDec:"Ubaci XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hu.js deleted file mode 100644 index beeed2b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hu",{bgColor:"Háttérszín",bgFixed:"Nem gördíthető háttér",bgImage:"Háttérkép cím",charset:"Karakterkódolás",charsetASCII:"ASCII",charsetCE:"Közép-Európai",charsetCR:"Cyrill",charsetCT:"Kínai Tradicionális (Big5)",charsetGR:"Görög",charsetJP:"Japán",charsetKR:"Koreai",charsetOther:"Más karakterkódolás",charsetTR:"Török",charsetUN:"Unicode (UTF-8)",charsetWE:"Nyugat-Európai",chooseColor:"Válasszon",design:"Design",docTitle:"Oldalcím",docType:"Dokumentum típus fejléc", -docTypeOther:"Más dokumentum típus fejléc",label:"Dokumentum tulajdonságai",margin:"Oldal margók",marginBottom:"Alsó",marginLeft:"Bal",marginRight:"Jobb",marginTop:"Felső",meta:"Meta adatok",metaAuthor:"Szerző",metaCopyright:"Szerzői jog",metaDescription:"Dokumentum leírás",metaKeywords:"Dokumentum keresőszavak (vesszővel elválasztva)",other:"<más>",previewHtml:'<p>Ez itt egy <strong>példa</strong>. A <a href="javascript:void(0)">CKEditor</a>-t használod.</p>',title:"Dokumentum tulajdonságai",txtColor:"Betűszín", -xhtmlDec:"XHTML deklarációk beillesztése"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/id.js deleted file mode 100644 index 9716026d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/id.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","id",{bgColor:"Warna Latar Belakang",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Pilih",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bawah",marginLeft:"Kiri",marginRight:"Kanan",marginTop:"Atas",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/is.js deleted file mode 100644 index 9085a4f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/is.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","is",{bgColor:"Bakgrunnslitur",bgFixed:"Læstur bakgrunnur",bgImage:"Slóð bakgrunnsmyndar",charset:"Letursett",charsetASCII:"ASCII",charsetCE:"Mið-evrópskt",charsetCR:"Kýrilskt",charsetCT:"Kínverskt, hefðbundið (Big5)",charsetGR:"Grískt",charsetJP:"Japanskt",charsetKR:"Kóreskt",charsetOther:"Annað letursett",charsetTR:"Tyrkneskt",charsetUN:"Unicode (UTF-8)",charsetWE:"Vestur-evrópst",chooseColor:"Choose",design:"Design",docTitle:"Titill síðu",docType:"Flokkur skjalategunda", -docTypeOther:"Annar flokkur skjalategunda",label:"Eigindi skjals",margin:"Hliðarspássía",marginBottom:"Neðst",marginLeft:"Vinstri",marginRight:"Hægri",marginTop:"Efst",meta:"Lýsigögn",metaAuthor:"Höfundur",metaCopyright:"Höfundarréttur",metaDescription:"Lýsing skjals",metaKeywords:"Lykilorð efnisorðaskrár (aðgreind með kommum)",other:"<annar>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Eigindi skjals",txtColor:"Litur texta", -xhtmlDec:"Fella inn XHTML lýsingu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/it.js deleted file mode 100644 index 56edb3af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","it",{bgColor:"Colore di sfondo",bgFixed:"Sfondo fissato",bgImage:"Immagine di sfondo",charset:"Set di caretteri",charsetASCII:"ASCII",charsetCE:"Europa Centrale",charsetCR:"Cirillico",charsetCT:"Cinese Tradizionale (Big5)",charsetGR:"Greco",charsetJP:"Giapponese",charsetKR:"Coreano",charsetOther:"Altro set di caretteri",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Occidentale",chooseColor:"Scegli",design:"Disegna",docTitle:"Titolo pagina",docType:"Intestazione DocType", -docTypeOther:"Altra intestazione DocType",label:"Proprietà del Documento",margin:"Margini",marginBottom:"In Basso",marginLeft:"A Sinistra",marginRight:"A Destra",marginTop:"In Alto",meta:"Meta Data",metaAuthor:"Autore",metaCopyright:"Copyright",metaDescription:"Descrizione documento",metaKeywords:"Chiavi di indicizzazione documento (separate da virgola)",other:"<altro>",previewHtml:'<p>Questo è un <strong>testo di esempio</strong>. State usando <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Proprietà del Documento", -txtColor:"Colore testo",xhtmlDec:"Includi dichiarazione XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ja.js deleted file mode 100644 index 34f57912..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ja",{bgColor:"背景色",bgFixed:"スクロールしない背景",bgImage:"背景画像 URL",charset:"文字コード",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"日本語",charsetKR:"Korean",charsetOther:"他の文字セット符号化",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"色の選択",design:"デザイン",docTitle:"ページタイトル",docType:"文書タイプヘッダー",docTypeOther:"その他文書タイプヘッダー",label:"文書 プロパティ",margin:"ページ・マージン", -marginBottom:"下部",marginLeft:"左",marginRight:"右",marginTop:"上部",meta:"メタデータ",metaAuthor:"文書の作者",metaCopyright:"文書の著作権",metaDescription:"文書の概要",metaKeywords:"文書のキーワード(カンマ区切り)",other:"<その他の>",previewHtml:'<p>これは<strong>テキストサンプル</strong>です。 あなたは、<a href="javascript:void(0)">CKEditor</a>を使っています。</p>',title:"文書 プロパティ",txtColor:"テキスト色",xhtmlDec:"XHTML宣言をインクルード"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ka.js deleted file mode 100644 index 50f71dee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ka",{bgColor:"ფონის ფერი",bgFixed:"უმოძრაო (ფიქსირებული) ფონი",bgImage:"ფონური სურათის URL",charset:"კოდირება",charsetASCII:"ამერიკული (ASCII)",charsetCE:"ცენტრალურ ევროპული",charsetCR:"კირილური",charsetCT:"ტრადიციული ჩინური (Big5)",charsetGR:"ბერძნული",charsetJP:"იაპონური",charsetKR:"კორეული",charsetOther:"სხვა კოდირებები",charsetTR:"თურქული",charsetUN:"უნიკოდი (UTF-8)",charsetWE:"დასავლეთ ევროპული",chooseColor:"არჩევა",design:"დიზაინი",docTitle:"გვერდის სათაური", -docType:"დოკუმენტის ტიპი",docTypeOther:"სხვა ტიპის დოკუმენტი",label:"დოკუმენტის პარამეტრები",margin:"გვერდის კიდეები",marginBottom:"ქვედა",marginLeft:"მარცხენა",marginRight:"მარჯვენა",marginTop:"ზედა",meta:"მეტაTag-ები",metaAuthor:"ავტორი",metaCopyright:"Copyright",metaDescription:"დოკუმენტის აღწერა",metaKeywords:"დოკუმენტის საკვანძო სიტყვები (მძიმით გამოყოფილი)",other:"სხვა...",previewHtml:'<p>ეს არის <strong>საცდელი ტექსტი</strong>. თქვენ <a href="javascript:void(0)">CKEditor</a>-ით სარგებლობთ.</p>', -title:"დოკუმენტის პარამეტრები",txtColor:"ტექსტის ფერი",xhtmlDec:"XHTML დეკლარაციების ჩართვა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/km.js deleted file mode 100644 index 34272904..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/km.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","km",{bgColor:"ពណ៌​ផ្ទៃ​ក្រោយ",bgFixed:"ផ្ទៃ​ក្រោយ​គ្មាន​ការ​រំកិល (នឹង​ថ្កល់)",bgImage:"URL រូបភាព​ផ្ទៃ​ក្រោយ",charset:"ការ​អ៊ិនកូដ​តួ​អក្សរ",charsetASCII:"ASCII",charsetCE:"អឺរ៉ុប​កណ្ដាល",charsetCR:"Cyrillic",charsetCT:"ចិន​បុរាណ (Big5)",charsetGR:"ក្រិក",charsetJP:"ជប៉ុន",charsetKR:"កូរ៉េ",charsetOther:"កំណត់លេខកូតភាសាផ្សេងទៀត",charsetTR:"ទួរគី",charsetUN:"យូនីកូដ (UTF-8)",charsetWE:"អឺរ៉ុប​ខាង​លិច",chooseColor:"រើស",design:"រចនា",docTitle:"ចំណងជើងទំព័រ",docType:"ប្រភេទក្បាលទំព័រ​ឯកសារ", -docTypeOther:"ប្រភេទក្បាលទំព័រឯកសារ​ផ្សេងទៀត",label:"លក្ខណៈ​សម្បត្តិ​ឯកសារ",margin:"រឹម​ទំព័រ",marginBottom:"បាត​ក្រោម",marginLeft:"ឆ្វេង",marginRight:"ស្ដាំ",marginTop:"លើ",meta:"ស្លាក​មេតា",metaAuthor:"អ្នកនិពន្ធ",metaCopyright:"រក្សាសិទ្ធិ",metaDescription:"សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ",metaKeywords:"ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)",other:"ដទៃ​ទៀត...",previewHtml:'<p>នេះ​គឺ​ជា<strong>អក្សរ​គំរូ</strong>​ខ្លះៗ។ អ្នក​កំពុង​ប្រើ <a href="javascript:void(0)">CKEditor</a>។</p>',title:"ការកំណត់ ឯកសារ", -txtColor:"ពណ៌អក្សរ",xhtmlDec:"បញ្ជូល XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ko.js deleted file mode 100644 index 168e9b17..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ko",{bgColor:"배경색상",bgFixed:"스크롤되지 않는 배경",bgImage:"배경 이미지 URL",charset:"캐릭터셋 인코딩",charsetASCII:"ASCII",charsetCE:"중앙 유럽",charsetCR:"키릴 문자",charsetCT:"중국어 (Big5)",charsetGR:"그리스어",charsetJP:"일본어",charsetKR:"한국어",charsetOther:"다른 캐릭터셋 인코딩",charsetTR:"터키어",charsetUN:"유니코드 (UTF-8)",charsetWE:"서유럽",chooseColor:"선택하기",design:"디자인",docTitle:"페이지명",docType:"문서 헤드",docTypeOther:"다른 문서헤드",label:"문서 속성",margin:"페이지 여백",marginBottom:"아래",marginLeft:"왼쪽",marginRight:"오른쪽", -marginTop:"위",meta:"메타데이터",metaAuthor:"작성자",metaCopyright:"저작권",metaDescription:"문서 설명",metaKeywords:"문서 키워드 (콤마로 구분)",other:"<기타>",previewHtml:'<p>이것은 <strong>예문</strong>입니다. 여러분은 지금 <a href="javascript:void(0)">CKEditor</a>를 사용하고 있습니다.</p>',title:"문서 속성",txtColor:"글자 색상",xhtmlDec:"XHTML 문서정의 포함"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ku.js deleted file mode 100644 index f2dd2844..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ku",{bgColor:"ڕەنگی پاشبنەما",bgFixed:"بێ هاتووچوپێکردنی (چەسپاو) پاشبنەمای وێنه",bgImage:"ناونیشانی بەستەری وێنەی پاشبنەما",charset:"دەستەی نووسەی بەکۆدکەر",charsetASCII:"ASCII",charsetCE:"ناوەڕاستی ئەوروپا",charsetCR:"سیریلیك",charsetCT:"چینی(Big5)",charsetGR:"یۆنانی",charsetJP:"ژاپۆنی",charsetKR:"کۆریا",charsetOther:"دەستەی نووسەی بەکۆدکەری تر",charsetTR:"تورکی",charsetUN:"Unicode (UTF-8)",charsetWE:"ڕۆژئاوای ئەوروپا",chooseColor:"هەڵبژێرە",design:"شێوەکار", -docTitle:"سەردێڕی پەڕه",docType:"سەرپەڕەی جۆری پەڕه",docTypeOther:"سەرپەڕەی جۆری پەڕەی تر",label:"خاسییەتی پەڕه",margin:"تەنیشت پەڕه",marginBottom:"ژێرەوه",marginLeft:"چەپ",marginRight:"ڕاست",marginTop:"سەرەوه",meta:"زانیاری مێتا",metaAuthor:"نووسەر",metaCopyright:"مافی بڵاوکردنەوەی",metaDescription:"پێناسەی لاپەڕه",metaKeywords:"بەڵگەنامەی وشەی کاریگەر(به کۆما لێکیان جیابکەوه)",other:"هیتر...",previewHtml:'<p>ئەمە وەك نموونەی <strong>دەقه</strong>. تۆ بەکاردەهێنیت <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"خاسییەتی پەڕه",txtColor:"ڕەنگی دەق",xhtmlDec:"بەیاننامەکانی XHTML لەگەڵدابێت"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lt.js deleted file mode 100644 index b2e1ba95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","lt",{bgColor:"Fono spalva",bgFixed:"Neslenkantis fonas",bgImage:"Fono paveikslėlio nuoroda (URL)",charset:"Simbolių kodavimo lentelė",charsetASCII:"ASCII",charsetCE:"Centrinės Europos",charsetCR:"Kirilica",charsetCT:"Tradicinės kinų (Big5)",charsetGR:"Graikų",charsetJP:"Japonų",charsetKR:"Korėjiečių",charsetOther:"Kita simbolių kodavimo lentelė",charsetTR:"Turkų",charsetUN:"Unikodas (UTF-8)",charsetWE:"Vakarų Europos",chooseColor:"Pasirinkite",design:"Išdėstymas", -docTitle:"Puslapio antraštė",docType:"Dokumento tipo antraštė",docTypeOther:"Kita dokumento tipo antraštė",label:"Dokumento savybės",margin:"Puslapio kraštinės",marginBottom:"Apačioje",marginLeft:"Kairėje",marginRight:"Dešinėje",marginTop:"Viršuje",meta:"Meta duomenys",metaAuthor:"Autorius",metaCopyright:"Autorinės teisės",metaDescription:"Dokumento apibūdinimas",metaKeywords:"Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",other:"<kitas>",previewHtml:'<p>Tai yra <strong>pavyzdinis tekstas</strong>. Jūs naudojate <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Dokumento savybės",txtColor:"Teksto spalva",xhtmlDec:"Įtraukti XHTML deklaracijas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lv.js deleted file mode 100644 index 61014944..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","lv",{bgColor:"Fona krāsa",bgFixed:"Fona attēls ir fiksēts",bgImage:"Fona attēla hipersaite",charset:"Simbolu kodējums",charsetASCII:"ASCII",charsetCE:"Centrāleiropas",charsetCR:"Kirilica",charsetCT:"Ķīniešu tradicionālā (Big5)",charsetGR:"Grieķu",charsetJP:"Japāņu",charsetKR:"Korejiešu",charsetOther:"Cits simbolu kodējums",charsetTR:"Turku",charsetUN:"Unikods (UTF-8)",charsetWE:"Rietumeiropas",chooseColor:"Izvēlēties",design:"Dizains",docTitle:"Dokumenta virsraksts <Title>", -docType:"Dokumenta tips",docTypeOther:"Cits dokumenta tips",label:"Dokumenta īpašības",margin:"Lapas robežas",marginBottom:"Apakšā",marginLeft:"Pa kreisi",marginRight:"Pa labi",marginTop:"Augšā",meta:"META dati",metaAuthor:"Autors",metaCopyright:"Autortiesības",metaDescription:"Dokumenta apraksts",metaKeywords:"Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)",other:"<cits>",previewHtml:'<p>Šis ir <strong>parauga teksts</strong>. Jūs izmantojiet <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Dokumenta īpašības",txtColor:"Teksta krāsa",xhtmlDec:"Ietvert XHTML deklarācijas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mk.js deleted file mode 100644 index 7f48e61c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","mk",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mn.js deleted file mode 100644 index 8907ba39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/mn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","mn",{bgColor:"Фоно өнгө",bgFixed:"Гүйдэггүй фоно",bgImage:"Фоно зурагны URL",charset:"Encoding тэмдэгт",charsetASCII:"ASCII",charsetCE:"Төв европ",charsetCR:"Крил",charsetCT:"Хятадын уламжлалт (Big5)",charsetGR:"Гред",charsetJP:"Япон",charsetKR:"Солонгос",charsetOther:"Encoding-д өөр тэмдэгт оноох",charsetTR:"Tурк",charsetUN:"Юникод (UTF-8)",charsetWE:"Баруун европ",chooseColor:"Сонгох",design:"Design",docTitle:"Хуудасны гарчиг",docType:"Баримт бичгийн төрөл Heading", -docTypeOther:"Бусад баримт бичгийн төрөл Heading",label:"Баримт бичиг шинж чанар",margin:"Хуудасны захын зай",marginBottom:"Доод тал",marginLeft:"Зүүн тал",marginRight:"Баруун тал",marginTop:"Дээд тал",meta:"Meta өгөгдөл",metaAuthor:"Зохиогч",metaCopyright:"Зохиогчийн эрх",metaDescription:"Баримт бичгийн тайлбар",metaKeywords:"Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Баримт бичиг шинж чанар",txtColor:"Фонтны өнгө",xhtmlDec:"XHTML-ийн мэдээллийг агуулах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ms.js deleted file mode 100644 index fe51ef5a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ms.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ms",{bgColor:"Warna Latarbelakang",bgFixed:"Imej Latarbelakang tanpa Skrol",bgImage:"URL Gambar Latarbelakang",charset:"Enkod Set Huruf",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Enkod Set Huruf yang Lain",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Tajuk Muka Surat", -docType:"Jenis Kepala Dokumen",docTypeOther:"Jenis Kepala Dokumen yang Lain",label:"Ciri-ciri dokumen",margin:"Margin Muka Surat",marginBottom:"Bawah",marginLeft:"Kiri",marginRight:"Kanan",marginTop:"Atas",meta:"Data Meta",metaAuthor:"Penulis",metaCopyright:"Hakcipta",metaDescription:"Keterangan Dokumen",metaKeywords:"Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",other:"<lain>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Ciri-ciri dokumen",txtColor:"Warna Text",xhtmlDec:"Masukkan pemula kod XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nb.js deleted file mode 100644 index 87926ab8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","nb",{bgColor:"Bakgrunnsfarge",bgFixed:"Lås bakgrunnsbilde",bgImage:"URL for bakgrunnsbilde",charset:"Tegnsett",charsetASCII:"ASCII",charsetCE:"Sentraleuropeisk",charsetCR:"Kyrillisk",charsetCT:"Tradisonell kinesisk(Big5)",charsetGR:"Gresk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Annet tegnsett",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropeisk",chooseColor:"Velg",design:"Design",docTitle:"Sidetittel",docType:"Dokumenttype header", -docTypeOther:"Annet dokumenttype header",label:"Dokumentegenskaper",margin:"Sidemargin",marginBottom:"Bunn",marginLeft:"Venstre",marginRight:"Høyre",marginTop:"Topp",meta:"Meta-data",metaAuthor:"Forfatter",metaCopyright:"Kopirett",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument nøkkelord (kommaseparert)",other:"<annen>",previewHtml:'<p>Dette er en <strong>eksempeltekst</strong>. Du bruker <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Tekstfarge", -xhtmlDec:"Inkluder XHTML-deklarasjon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nl.js deleted file mode 100644 index 7425a0aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","nl",{bgColor:"Achtergrondkleur",bgFixed:"Niet-scrollend (gefixeerde) achtergrond",bgImage:"Achtergrondafbeelding URL",charset:"Tekencodering",charsetASCII:"ASCII",charsetCE:"Centraal Europees",charsetCR:"Cyrillisch",charsetCT:"Traditioneel Chinees (Big5)",charsetGR:"Grieks",charsetJP:"Japans",charsetKR:"Koreaans",charsetOther:"Andere tekencodering",charsetTR:"Turks",charsetUN:"Unicode (UTF-8)",charsetWE:"West Europees",chooseColor:"Kies",design:"Ontwerp",docTitle:"Paginatitel", -docType:"Documenttype-definitie",docTypeOther:"Andere documenttype-definitie",label:"Documenteigenschappen",margin:"Pagina marges",marginBottom:"Onder",marginLeft:"Links",marginRight:"Rechts",marginTop:"Boven",meta:"Meta tags",metaAuthor:"Auteur",metaCopyright:"Auteursrechten",metaDescription:"Documentbeschrijving",metaKeywords:"Trefwoorden voor indexering (komma-gescheiden)",other:"Anders...",previewHtml:'<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Documenteigenschappen",txtColor:"Tekstkleur",xhtmlDec:"XHTML declaratie invoegen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/no.js deleted file mode 100644 index 11dddcff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/no.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","no",{bgColor:"Bakgrunnsfarge",bgFixed:"Lås bakgrunnsbilde",bgImage:"URL for bakgrunnsbilde",charset:"Tegnsett",charsetASCII:"ASCII",charsetCE:"Sentraleuropeisk",charsetCR:"Kyrillisk",charsetCT:"Tradisonell kinesisk(Big5)",charsetGR:"Gresk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Annet tegnsett",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropeisk",chooseColor:"Velg",design:"Design",docTitle:"Sidetittel",docType:"Dokumenttype header", -docTypeOther:"Annet dokumenttype header",label:"Dokumentegenskaper",margin:"Sidemargin",marginBottom:"Bunn",marginLeft:"Venstre",marginRight:"Høyre",marginTop:"Topp",meta:"Meta-data",metaAuthor:"Forfatter",metaCopyright:"Kopirett",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument nøkkelord (kommaseparert)",other:"<annen>",previewHtml:'<p>Dette er en <strong>eksempeltekst</strong>. Du bruker <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Tekstfarge", -xhtmlDec:"Inkluder XHTML-deklarasjon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pl.js deleted file mode 100644 index 4fb43438..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pl",{bgColor:"Kolor tła",bgFixed:"Tło nieruchome (nieprzewijające się)",bgImage:"Adres URL obrazka tła",charset:"Kodowanie znaków",charsetASCII:"ASCII",charsetCE:"Środkowoeuropejskie",charsetCR:"Cyrylica",charsetCT:"Chińskie tradycyjne (Big5)",charsetGR:"Greckie",charsetJP:"Japońskie",charsetKR:"Koreańskie",charsetOther:"Inne kodowanie znaków",charsetTR:"Tureckie",charsetUN:"Unicode (UTF-8)",charsetWE:"Zachodnioeuropejskie",chooseColor:"Wybierz",design:"Projekt strony", -docTitle:"Tytuł strony",docType:"Definicja typu dokumentu",docTypeOther:"Inna definicja typu dokumentu",label:"Właściwości dokumentu",margin:"Marginesy strony",marginBottom:"Dolny",marginLeft:"Lewy",marginRight:"Prawy",marginTop:"Górny",meta:"Znaczniki meta",metaAuthor:"Autor",metaCopyright:"Prawa autorskie",metaDescription:"Opis dokumentu",metaKeywords:"Słowa kluczowe dokumentu (oddzielone przecinkami)",other:"Inne",previewHtml:'<p>To jest <strong>przykładowy tekst</strong>. Korzystasz z programu <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Właściwości dokumentu",txtColor:"Kolor tekstu",xhtmlDec:"Uwzględnij deklaracje XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt-br.js deleted file mode 100644 index c671fed0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pt-br",{bgColor:"Cor do Plano de Fundo",bgFixed:"Plano de Fundo Fixo",bgImage:"URL da Imagem de Plano de Fundo",charset:"Codificação de Caracteres",charsetASCII:"ASCII",charsetCE:"Europa Central",charsetCR:"Cirílico",charsetCT:"Chinês Tradicional (Big5)",charsetGR:"Grego",charsetJP:"Japonês",charsetKR:"Coreano",charsetOther:"Outra Codificação de Caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Ocidental",chooseColor:"Escolher",design:"Design", -docTitle:"Título da Página",docType:"Cabeçalho Tipo de Documento",docTypeOther:"Outro Tipo de Documento",label:"Propriedades Documento",margin:"Margens da Página",marginBottom:"Inferior",marginLeft:"Inferior",marginRight:"Direita",marginTop:"Superior",meta:"Meta Dados",metaAuthor:"Autor",metaCopyright:"Direitos Autorais",metaDescription:"Descrição do Documento",metaKeywords:"Palavras-chave de Indexação do Documento (separadas por vírgula)",other:"<outro>",previewHtml:'<p>Este é um <strong>texto de exemplo</strong>. Você está usando <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propriedades Documento",txtColor:"Cor do Texto",xhtmlDec:"Incluir Declarações XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt.js deleted file mode 100644 index ec1514d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pt",{bgColor:"Cor de Fundo",bgFixed:"Fundo Fixo",bgImage:"Caminho para a Imagem de Fundo",charset:"Codificação de Caracteres",charsetASCII:"ASCII",charsetCE:"Europa Central",charsetCR:"Cirílico",charsetCT:"Chinês Traditional (Big5)",charsetGR:"Grego",charsetJP:"Japonês",charsetKR:"Coreano",charsetOther:"Outra Codificação de Caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Ocidental",chooseColor:"Choose",design:"Desenho",docTitle:"Título da Página", -docType:"Tipo de Cabeçalho do Documento",docTypeOther:"Outro Tipo de Cabeçalho do Documento",label:"Propriedades do Documento",margin:"Margem das Páginas",marginBottom:"Fundo",marginLeft:"Esquerda",marginRight:"Direita",marginTop:"Topo",meta:"Meta Data",metaAuthor:"Autor",metaCopyright:"Direitos de Autor",metaDescription:"Descrição do Documento",metaKeywords:"Palavras de Indexação do Documento (separadas por virgula)",other:"<outro>",previewHtml:'<p>Isto é algum <strong>texto amostra</strong>. Está a usar o <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propriedades do Documento",txtColor:"Cor do Texto",xhtmlDec:"Incluir Declarações XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ro.js deleted file mode 100644 index 9aa0e6d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ro",{bgColor:"Culoarea fundalului (Background Color)",bgFixed:"Fundal neflotant, fix (Non-scrolling Background)",bgImage:"URL-ul imaginii din fundal (Background Image URL)",charset:"Encoding setului de caractere",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Chirilic",charsetCT:"Chinezesc tradiţional (Big5)",charsetGR:"Grecesc",charsetJP:"Japonez",charsetKR:"Corean",charsetOther:"Alt encoding al setului de caractere",charsetTR:"Turcesc",charsetUN:"Unicode (UTF-8)", -charsetWE:"Vest european",chooseColor:"Alege",design:"Design",docTitle:"Titlul paginii",docType:"Document Type Heading",docTypeOther:"Alt Document Type Heading",label:"Proprietăţile documentului",margin:"Marginile paginii",marginBottom:"Jos",marginLeft:"Stânga",marginRight:"Dreapta",marginTop:"Sus",meta:"Meta Tags",metaAuthor:"Autor",metaCopyright:"Drepturi de autor",metaDescription:"Descrierea documentului",metaKeywords:"Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",other:"<alt>", -previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Proprietăţile documentului",txtColor:"Culoarea textului",xhtmlDec:"Include declaraţii XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ru.js deleted file mode 100644 index 01d585f6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ru",{bgColor:"Цвет фона",bgFixed:"Фон прикреплён (не проматывается)",bgImage:"Ссылка на фоновое изображение",charset:"Кодировка набора символов",charsetASCII:"ASCII",charsetCE:"Центрально-европейская",charsetCR:"Кириллица",charsetCT:"Китайская традиционная (Big5)",charsetGR:"Греческая",charsetJP:"Японская",charsetKR:"Корейская",charsetOther:"Другая кодировка набора символов",charsetTR:"Турецкая",charsetUN:"Юникод (UTF-8)",charsetWE:"Западно-европейская",chooseColor:"Выберите", -design:"Дизайн",docTitle:"Заголовок страницы",docType:"Заголовок типа документа",docTypeOther:"Другой заголовок типа документа",label:"Свойства документа",margin:"Отступы страницы",marginBottom:"Нижний",marginLeft:"Левый",marginRight:"Правый",marginTop:"Верхний",meta:"Метаданные",metaAuthor:"Автор",metaCopyright:"Авторские права",metaDescription:"Описание документа",metaKeywords:"Ключевые слова документа (через запятую)",other:"Другой ...",previewHtml:'<p>Это <strong>пример</strong> текста, написанного с помощью <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Свойства документа",txtColor:"Цвет текста",xhtmlDec:"Включить объявления XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/si.js deleted file mode 100644 index 19a7d6fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","si",{bgColor:"පසුබිම් වර්ණය",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"පසුබිම් ",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"මාධ්‍ය ",charsetCR:"සිරිලික් හෝඩිය",charsetCT:"චීන සම්ප්‍රදාය",charsetGR:"ග්‍රීක",charsetJP:"ජපාන",charsetKR:"Korean",charsetOther:"අනෙකුත් අක්ෂර කොටස්",charsetTR:"තුර්කි",charsetUN:"Unicode (UTF-8)",charsetWE:"බස්නාහිර ",chooseColor:"තෝරන්න",design:"Design",docTitle:"පිටු මාතෘකාව",docType:"ලිපිගොනු වර්ගයේ මාතෘකාව", -docTypeOther:"අනෙකුත් ලිපිගොනු වර්ගයේ මාතෘකා",label:"ලිපිගොනු ",margin:"පිටු සීමාවන්",marginBottom:"පහල",marginLeft:"වම",marginRight:"දකුණ",marginTop:"ඉ",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"ප්‍රකාශන ",metaDescription:"ලිපිගොනු ",metaKeywords:"ලිපිගොනු පෙලගේසමේ විශේෂ වචන (කොමා වලින් වෙන්කරන ලද)",other:"අනෙකුත්",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"පෝරමයේ ගුණ/",txtColor:"අක්ෂර වර්ණ",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sk.js deleted file mode 100644 index b347ab05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sk",{bgColor:"Farba pozadia",bgFixed:"Fixné pozadie",bgImage:"URL obrázka na pozadí",charset:"Znaková sada",charsetASCII:"ASCII",charsetCE:"Stredoeurópska",charsetCR:"Cyrillika",charsetCT:"Čínština tradičná (Big5)",charsetGR:"Gréčtina",charsetJP:"Japončina",charsetKR:"Korejčina",charsetOther:"Iná znaková sada",charsetTR:"Turečtina",charsetUN:"Unicode (UTF-8)",charsetWE:"Západná európa",chooseColor:"Vybrať",design:"Design",docTitle:"Titulok stránky",docType:"Typ záhlavia dokumentu", -docTypeOther:"Iný typ záhlavia dokumentu",label:"Vlastnosti dokumentu",margin:"Okraje stránky (margins)",marginBottom:"Dolný",marginLeft:"Ľavý",marginRight:"Pravý",marginTop:"Horný",meta:"Meta značky",metaAuthor:"Autor",metaCopyright:"Autorské práva (copyright)",metaDescription:"Popis dokumentu",metaKeywords:"Indexované kľúčové slová dokumentu (oddelené čiarkou)",other:"Iný...",previewHtml:'<p>Toto je nejaký <strong>ukážkový text</strong>. Používate <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Vlastnosti dokumentu",txtColor:"Farba textu",xhtmlDec:"Vložiť deklarácie XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sl.js deleted file mode 100644 index 7017e1bd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sl",{bgColor:"Barva ozadja",bgFixed:"Nepremično ozadje",bgImage:"URL slike za ozadje",charset:"Kodna tabela",charsetASCII:"ASCII",charsetCE:"Srednjeevropsko",charsetCR:"Cirilica",charsetCT:"Tradicionalno Kitajsko (Big5)",charsetGR:"Grško",charsetJP:"Japonsko",charsetKR:"Korejsko",charsetOther:"Druga kodna tabela",charsetTR:"Turško",charsetUN:"Unicode (UTF-8)",charsetWE:"Zahodnoevropsko",chooseColor:"Izberi",design:"Oblika",docTitle:"Naslov strani",docType:"Glava tipa dokumenta", -docTypeOther:"Druga glava tipa dokumenta",label:"Lastnosti dokumenta",margin:"Zamiki strani",marginBottom:"Spodaj",marginLeft:"Levo",marginRight:"Desno",marginTop:"Na vrhu",meta:"Meta podatki",metaAuthor:"Avtor",metaCopyright:"Avtorske pravice",metaDescription:"Opis strani",metaKeywords:"Ključne besede (ločene z vejicami)",other:"<drug>",previewHtml:'<p>Tole je<strong>primer besedila</strong>. Uporabljate <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Lastnosti dokumenta",txtColor:"Barva besedila", -xhtmlDec:"Vstavi XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sq.js deleted file mode 100644 index 373c7293..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sq",{bgColor:"Ngjyra e Prapavijës",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"URL e Fotografisë së Prapavijës",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Evropës Qendrore",charsetCR:"Sllave",charsetCT:"Kinezisht Tradicional (Big5)",charsetGR:"Greke",charsetJP:"Japoneze",charsetKR:"Koreane",charsetOther:"Other Character Set Encoding",charsetTR:"Turke",charsetUN:"Unicode (UTF-8)",charsetWE:"Evropiano Perëndimor",chooseColor:"Përzgjidh", -design:"Dizajni",docTitle:"Titulli i Faqes",docType:"Document Type Heading",docTypeOther:"Koka e Llojit Tjetër të Dokumentit",label:"Karakteristikat e Dokumentit",margin:"Kufijtë e Faqes",marginBottom:"Poshtë",marginLeft:"Majtas",marginRight:"Djathtas",marginTop:"Lart",meta:"Meta Tags",metaAuthor:"Autori",metaCopyright:"Të drejtat e kopjimit",metaDescription:"Përshkrimi i Dokumentit",metaKeywords:"Fjalët kyçe të indeksimit të dokumentit (të ndarë me presje)",other:"Tjera...",previewHtml:'<p>Ky është nje <strong>tekst shembull</strong>. Ju jeni duke shfrytëzuar <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Karakteristikat e Dokumentit",txtColor:"Ngjyra e Tekstit",xhtmlDec:"Përfshij XHTML Deklarimet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js deleted file mode 100644 index 77312ffb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sr-latn",{bgColor:"Boja pozadine",bgFixed:"Fiksirana pozadina",bgImage:"URL pozadinske slike",charset:"Kodiranje skupa karaktera",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Ostala kodiranja skupa karaktera",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Naslov stranice", -docType:"Zaglavlje tipa dokumenta",docTypeOther:"Ostala zaglavlja tipa dokumenta",label:"Osobine dokumenta",margin:"Margine stranice",marginBottom:"Donja",marginLeft:"Leva",marginRight:"Desna",marginTop:"Gornja",meta:"Metapodaci",metaAuthor:"Autor",metaCopyright:"Autorska prava",metaDescription:"Opis dokumenta",metaKeywords:"Ključne reci za indeksiranje dokumenta (razdvojene zarezima)",other:"<остало>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Osobine dokumenta",txtColor:"Boja teksta",xhtmlDec:"Ukljuci XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr.js deleted file mode 100644 index f50c3e4a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sr",{bgColor:"Боја позадине",bgFixed:"Фиксирана позадина",bgImage:"УРЛ позадинске слике",charset:"Кодирање скупа карактера",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Остала кодирања скупа карактера",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Наслов странице", -docType:"Заглавље типа документа",docTypeOther:"Остала заглавља типа документа",label:"Особине документа",margin:"Маргине странице",marginBottom:"Доња",marginLeft:"Лева",marginRight:"Десна",marginTop:"Горња",meta:"Метаподаци",metaAuthor:"Аутор",metaCopyright:"Ауторска права",metaDescription:"Опис документа",metaKeywords:"Кључне речи за индексирање документа (раздвојене зарезом)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Особине документа",txtColor:"Боја текста",xhtmlDec:"Улључи XHTML декларације"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sv.js deleted file mode 100644 index 363de9bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sv",{bgColor:"Bakgrundsfärg",bgFixed:"Fast bakgrund",bgImage:"Bakgrundsbildens URL",charset:"Teckenuppsättningar",charsetASCII:"ASCII",charsetCE:"Central Europa",charsetCR:"Kyrillisk",charsetCT:"Traditionell Kinesisk (Big5)",charsetGR:"Grekiska",charsetJP:"Japanska",charsetKR:"Koreanska",charsetOther:"Övriga teckenuppsättningar",charsetTR:"Turkiska",charsetUN:"Unicode (UTF-8)",charsetWE:"Väst Europa",chooseColor:"Välj",design:"Design",docTitle:"Sidtitel",docType:"Sidhuvud", -docTypeOther:"Övriga sidhuvuden",label:"Dokumentegenskaper",margin:"Sidmarginal",marginBottom:"Botten",marginLeft:"Vänster",marginRight:"Höger",marginTop:"Topp",meta:"Metadata",metaAuthor:"Författare",metaCopyright:"Upphovsrätt",metaDescription:"Sidans beskrivning",metaKeywords:"Sidans nyckelord (kommaseparerade)",other:"Annan...",previewHtml:'<p>Detta är en <strong>exempel text</strong>. Du använder <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Textfärg",xhtmlDec:"Inkludera XHTML deklaration"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/th.js deleted file mode 100644 index 2befc7f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","th",{bgColor:"สีพื้นหลัง",bgFixed:"พื้นหลังแบบไม่มีแถบเลื่อน",bgImage:"ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",charset:"ชุดตัวอักษร",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"ชุดตัวอักษรอื่นๆ",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"ออกแบบ",docTitle:"ชื่อไตเติ้ล", -docType:"ประเภทของเอกสาร",docTypeOther:"ประเภทเอกสารอื่นๆ",label:"คุณสมบัติของเอกสาร",margin:"ระยะขอบของหน้าเอกสาร",marginBottom:"ด้านล่าง",marginLeft:"ด้านซ้าย",marginRight:"ด้านขวา",marginTop:"ด้านบน",meta:"ข้อมูลสำหรับเสิร์ชเอนจิ้น",metaAuthor:"ผู้สร้างเอกสาร",metaCopyright:"สงวนลิขสิทธิ์",metaDescription:"ประโยคอธิบายเกี่ยวกับเอกสาร",metaKeywords:"คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)",other:"<อื่น ๆ>",previewHtml:'<p>นี่เป็น <strong>ข้อความตัวอย่าง</strong>. คุณกำลังใช้งาน <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"คุณสมบัติของเอกสาร",txtColor:"สีตัวอักษร",xhtmlDec:"รวมเอา XHTML Declarations ไว้ด้วย"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tr.js deleted file mode 100644 index 00a35d43..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","tr",{bgColor:"Arka Plan Rengi",bgFixed:"Sabit Arka Plan",bgImage:"Arka Plan Resim URLsi",charset:"Karakter Kümesi Kodlaması",charsetASCII:"ASCII",charsetCE:"Orta Avrupa",charsetCR:"Kiril",charsetCT:"Geleneksel Çince (Big5)",charsetGR:"Yunanca",charsetJP:"Japonca",charsetKR:"Korece",charsetOther:"Diğer Karakter Kümesi Kodlaması",charsetTR:"Türkçe",charsetUN:"Evrensel Kod (UTF-8)",charsetWE:"Batı Avrupa",chooseColor:"Seçiniz",design:"Dizayn",docTitle:"Sayfa Başlığı", -docType:"Belge Türü Başlığı",docTypeOther:"Diğer Belge Türü Başlığı",label:"Belge Özellikleri",margin:"Kenar Boşlukları",marginBottom:"Alt",marginLeft:"Sol",marginRight:"Sağ",marginTop:"Tepe",meta:"Tanım Bilgisi (Meta)",metaAuthor:"Yazar",metaCopyright:"Telif",metaDescription:"Belge Tanımı",metaKeywords:"Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)",other:"<diğer>",previewHtml:'<p>Bu bir <strong>örnek metindir</strong>. <a href="javascript:void(0)">CKEditor</a> kullanıyorsunuz.</p>',title:"Belge Özellikleri", -txtColor:"Yazı Rengi",xhtmlDec:"XHTML Bildirimlerini Dahil Et"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tt.js deleted file mode 100644 index c1c6ce14..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/tt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","tt",{bgColor:"Фон төсе",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Урта Ауропа",charsetCR:"Кириллик",charsetCT:"Гадәти кытай (Big5)",charsetGR:"Грек",charsetJP:"Япон",charsetKR:"Корей",charsetOther:"Other Character Set Encoding",charsetTR:"Төрек",charsetUN:"Юникод (UTF-8)",charsetWE:"Көнбатыш Ауропа",chooseColor:"Сайлау",design:"Дизайн",docTitle:"Page Title",docType:"Document Type Heading", -docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Аска",marginLeft:"Сул",marginRight:"Right",marginTop:"Өскә",meta:"Meta Tags",metaAuthor:"Автор",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Башка...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Document Properties",txtColor:"Текст төсе", -xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ug.js deleted file mode 100644 index 424d13a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ug",{bgColor:"تەگلىك رەڭگى",bgFixed:"تەگلىك سۈرەتنى دومىلاتما",bgImage:"تەگلىك سۈرەت",charset:"ھەرپ كودلىنىشى",charsetASCII:"ASCII",charsetCE:"ئوتتۇرا ياۋرۇپا",charsetCR:"سىلاۋيانچە",charsetCT:"مۇرەككەپ خەنزۇچە (Big5)",charsetGR:"گىرېكچە",charsetJP:"ياپونچە",charsetKR:"كۆرىيەچە",charsetOther:"باشقا ھەرپ كودلىنىشى",charsetTR:"تۈركچە",charsetUN:"يۇنىكود (UTF-8)",charsetWE:"غەربىي ياۋرۇپا",chooseColor:"تاللاڭ",design:"لايىھە",docTitle:"بەت ماۋزۇسى",docType:"پۈتۈك تىپى", -docTypeOther:"باشقا پۈتۈك تىپى",label:"بەت خاسلىقى",margin:"بەت گىرۋەك",marginBottom:"ئاستى",marginLeft:"سول",marginRight:"ئوڭ",marginTop:"ئۈستى",meta:"مېتا سانلىق مەلۇمات",metaAuthor:"يازغۇچى",metaCopyright:"نەشر ھوقۇقى",metaDescription:"بەت يۈزى چۈشەندۈرۈشى",metaKeywords:"بەت يۈزى ئىندېكىس ھالقىلىق سۆزى (ئىنگلىزچە پەش [,] بىلەن ئايرىلىدۇ)",other:"باشقا",previewHtml:'<p>بۇ بىر قىسىم <strong>كۆرسەتمىگە ئىشلىتىدىغان تېكىست </strong>سىز نۆۋەتتە <a href="javascript:void(0)">CKEditor</a>.نى ئىشلىتىۋاتىسىز.</p>', -title:"بەت خاسلىقى",txtColor:"تېكىست رەڭگى",xhtmlDec:"XHTML ئېنىقلىمىسىنى ئۆز ئىچىگە ئالىدۇ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/uk.js deleted file mode 100644 index c1027967..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","uk",{bgColor:"Колір тла",bgFixed:"Тло без прокрутки",bgImage:"URL зображення тла",charset:"Кодування набору символів",charsetASCII:"ASCII",charsetCE:"Центрально-європейська",charsetCR:"Кирилиця",charsetCT:"Китайська традиційна (Big5)",charsetGR:"Грецька",charsetJP:"Японська",charsetKR:"Корейська",charsetOther:"Інше кодування набору символів",charsetTR:"Турецька",charsetUN:"Юнікод (UTF-8)",charsetWE:"Західно-европейская",chooseColor:"Обрати",design:"Дизайн",docTitle:"Заголовок сторінки", -docType:"Заголовок типу документу",docTypeOther:"Інший заголовок типу документу",label:"Властивості документа",margin:"Відступи сторінки",marginBottom:"Нижній",marginLeft:"Лівий",marginRight:"Правий",marginTop:"Верхній",meta:"Мета дані",metaAuthor:"Автор",metaCopyright:"Авторські права",metaDescription:"Опис документа",metaKeywords:"Ключові слова документа (розділені комами)",other:"<інший>",previewHtml:'<p>Це приклад<strong>тексту</strong>. Ви використовуєте<a href="javascript:void(0)"> CKEditor </a>.</p>', -title:"Властивості документа",txtColor:"Колір тексту",xhtmlDec:"Ввімкнути XHTML оголошення"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/vi.js deleted file mode 100644 index b4583767..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","vi",{bgColor:"Màu nền",bgFixed:"Không cuộn nền",bgImage:"URL của Hình ảnh nền",charset:"Bảng mã ký tự",charsetASCII:"ASCII",charsetCE:"Trung Âu",charsetCR:"Tiếng Kirin",charsetCT:"Tiếng Trung Quốc (Big5)",charsetGR:"Tiếng Hy Lạp",charsetJP:"Tiếng Nhật",charsetKR:"Tiếng Hàn",charsetOther:"Bảng mã ký tự khác",charsetTR:"Tiếng Thổ Nhĩ Kỳ",charsetUN:"Unicode (UTF-8)",charsetWE:"Tây Âu",chooseColor:"Chọn màu",design:"Thiết kế",docTitle:"Tiêu đề Trang",docType:"Kiểu Đề mục Tài liệu", -docTypeOther:"Kiểu Đề mục Tài liệu khác",label:"Thuộc tính Tài liệu",margin:"Đường biên của Trang",marginBottom:"Dưới",marginLeft:"Trái",marginRight:"Phải",marginTop:"Trên",meta:"Siêu dữ liệu",metaAuthor:"Tác giả",metaCopyright:"Bản quyền",metaDescription:"Mô tả tài liệu",metaKeywords:"Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)",other:"<khác>",previewHtml:'<p>Đây là một số <strong>văn bản mẫu</strong>. Bạn đang sử dụng <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Thuộc tính Tài liệu", -txtColor:"Màu chữ",xhtmlDec:"Bao gồm cả định nghĩa XHTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js deleted file mode 100644 index d8c87e71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","zh-cn",{bgColor:"背景颜色",bgFixed:"不滚动背景图像",bgImage:"背景图像",charset:"字符编码",charsetASCII:"ASCII",charsetCE:"中欧",charsetCR:"西里尔文",charsetCT:"繁体中文 (Big5)",charsetGR:"希腊文",charsetJP:"日文",charsetKR:"韩文",charsetOther:"其它字符编码",charsetTR:"土耳其文",charsetUN:"Unicode (UTF-8)",charsetWE:"西欧",chooseColor:"选择",design:"设计",docTitle:"页面标题",docType:"文档类型",docTypeOther:"其它文档类型",label:"页面属性",margin:"页面边距",marginBottom:"下",marginLeft:"左",marginRight:"右",marginTop:"上",meta:"Meta 数据",metaAuthor:"作者", -metaCopyright:"版权",metaDescription:"页面说明",metaKeywords:"页面索引关键字 (用半角逗号[,]分隔)",other:"<其他>",previewHtml:'<p>这是一些<strong>演示用文字</strong>。您当前正在使用<a href="javascript:void(0)">CKEditor</a>。</p>',title:"页面属性",txtColor:"文本颜色",xhtmlDec:"包含 XHTML 声明"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh.js deleted file mode 100644 index 193a57da..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","zh",{bgColor:"背景顏色",bgFixed:"非捲動 (固定) 背景",bgImage:"背景圖像 URL",charset:"字元集編碼",charsetASCII:"ASCII",charsetCE:"中歐語系",charsetCR:"斯拉夫文",charsetCT:"正體中文 (Big5)",charsetGR:"希臘文",charsetJP:"日文",charsetKR:"韓文",charsetOther:"其他字元集編碼",charsetTR:"土耳其文",charsetUN:"Unicode (UTF-8)",charsetWE:"西歐語系",chooseColor:"選擇",design:"設計模式",docTitle:"頁面標題",docType:"文件類型標題",docTypeOther:"其他文件類型標題",label:"文件屬性",margin:"頁面邊界",marginBottom:"底端",marginLeft:"左",marginRight:"右",marginTop:"頂端", -meta:"Meta 標籤",metaAuthor:"作者",metaCopyright:"版權資訊",metaDescription:"文件描述",metaKeywords:"文件索引關鍵字 (以逗號分隔)",other:"其他…",previewHtml:'<p>此為簡短的<strong>範例文字</strong>。您正在使用 <a href="javascript:void(0)">CKEditor</a>。</p>',title:"文件屬性",txtColor:"文字顏色",xhtmlDec:"包含 XHTML 宣告"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/docprops/plugin.js deleted file mode 100644 index efbe090f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/docprops/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("docprops",{requires:"wysiwygarea,dialog,colordialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"docprops,docprops-rtl",hidpi:!0,init:function(a){var b=new CKEDITOR.dialogCommand("docProps");b.modes={wysiwyg:a.config.fullPage};b.allowedContent={body:{styles:"*",attributes:"dir"},html:{attributes:"lang,xml:lang"}}; -b.requiredContent="body";a.addCommand("docProps",b);CKEDITOR.dialog.add("docProps",this.path+"dialogs/docprops.js");a.ui.addButton&&a.ui.addButton("DocProps",{label:a.lang.docprops.label,command:"docProps",toolbar:"document,30"})}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/dialogs/find.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/dialogs/find.js deleted file mode 100644 index 0ad6a589..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/dialogs/find.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function y(c){return c.type==CKEDITOR.NODE_TEXT&&0<c.getLength()&&(!o||!c.isReadOnly())}function s(c){return!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)))}var o,t=function(){return{textNode:this.textNode,offset:this.offset,character:this.textNode?this.textNode.getText().charAt(this.offset):null,hitMatchBoundary:this._.matchBoundary}},u=["find","replace"],p=[["txtFindFind","txtFindReplace"],["txtFindCaseChk", -"txtReplaceCaseChk"],["txtFindWordChk","txtReplaceWordChk"],["txtFindCyclic","txtReplaceCyclic"]],n=function(c,g){function n(a,b){var d=c.createRange();d.setStart(a.textNode,b?a.offset:a.offset+1);d.setEndAt(c.editable(),CKEDITOR.POSITION_BEFORE_END);return d}function q(a){var b=c.getSelection(),d=c.editable();b&&!a?(a=b.getRanges()[0].clone(),a.collapse(!0)):(a=c.createRange(),a.setStartAt(d,CKEDITOR.POSITION_AFTER_START));a.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);return a}var v=new CKEDITOR.style(CKEDITOR.tools.extend({attributes:{"data-cke-highlight":1}, -fullMatch:1,ignoreReadonly:1,childRule:function(){return 0}},c.config.find_highlight,!0)),l=function(a,b){var d=this,c=new CKEDITOR.dom.walker(a);c.guard=b?s:function(a){!s(a)&&(d._.matchBoundary=!0)};c.evaluator=y;c.breakOnFalse=1;a.startContainer.type==CKEDITOR.NODE_TEXT&&(this.textNode=a.startContainer,this.offset=a.startOffset-1);this._={matchWord:b,walker:c,matchBoundary:!1}};l.prototype={next:function(){return this.move()},back:function(){return this.move(!0)},move:function(a){var b=this.textNode; -if(null===b)return t.call(this);this._.matchBoundary=!1;if(b&&a&&0<this.offset)this.offset--;else if(b&&this.offset<b.getLength()-1)this.offset++;else{for(b=null;!b&&!(b=this._.walker[a?"previous":"next"].call(this._.walker),this._.matchWord&&!b||this._.walker._.end););this.offset=(this.textNode=b)?a?b.getLength()-1:0:0}return t.call(this)}};var r=function(a,b){this._={walker:a,cursors:[],rangeLength:b,highlightRange:null,isMatched:0}};r.prototype={toDomRange:function(){var a=c.createRange(),b=this._.cursors; -if(1>b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new l(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a);while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1> -this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();v.applyToRange(a,c);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}},removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();v.removeFromRange(this._.highlightRange,c);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange); -this._.highlightRange=null}},isReadOnly:function(){return!this._.highlightRange?0:this._.highlightRange.startContainer.isReadOnly()},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&&b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors; -return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new l(n(b)):this._.walker;return new r(d,a)},getCursors:function(){return this._.cursors}};var w=function(a,b){var d=[-1];b&&(a=a.toLowerCase());for(var c=0;c<a.length;c++)for(d.push(d[c]+1);0<d[c+1]&&a.charAt(c)!=a.charAt(d[c+1]-1);)d[c+1]=d[d[c+1]-1]+1;this._={overlap:d,state:0,ignoreCase:!!b,pattern:a}};w.prototype={feedCharacter:function(a){for(this._.ignoreCase&& -(a=a.toLowerCase());;){if(a==this._.pattern.charAt(this._.state))return this._.state++,this._.state==this._.pattern.length?(this._.state=0,2):1;if(this._.state)this._.state=this._.overlap[this._.state];else return 0}return null},reset:function(){this._.state=0}};var z=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,x=function(a){if(!a)return!0;var b=a.charCodeAt(0);return 9<=b&&13>=b||8192<=b&&8202>=b||z.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,A){this.matchRange? -(this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new r(new l(this.searchRange),a.length);for(var i=new w(a,!b),j=0,k="%";null!==k;){for(this.matchRange.moveNext();k=this.matchRange.getEndCharacter();){j=i.feedCharacter(k);if(2==j)break;this.matchRange.moveNext().hitMatchBoundary&&i.reset()}if(2==j){if(d){var h=this.matchRange.getCursors(),m=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START); -g.setEnd(h.textNode,h.offset);h=g;m=n(m);h.trim();m.trim();h=new l(h,!0);m=new l(m,!0);if(!x(h.back().character)||!x(m.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!A?(this.searchRange=q(1),this.matchRange=null,arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,i){o=1;a=0;if(this.matchRange&& -this.matchRange.isMatched()&&!this.matchRange._.isReplaced&&!this.matchRange.isReadOnly()){this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);if(!i){var j=c.getSelection();j.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);i||(j.selectRanges([b]),c.fire("saveSnapshot"));this.matchRange.updateFromDomRange(b);i||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}else a=this.find(b,f,e,g,!i);o=0;return a}}, -f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton(c,{label:c.lang.common.close})],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog(); -e.find(a.getValueOf("find","txtFindFind"),a.getValueOf("find","txtFindCaseChk"),a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0, -label:f.matchCyclic}]}]}]},{id:"replace",label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a=this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace", -"txtReplaceWordChk"),a.getValueOf("replace","txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1,onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=q(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a, -a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk", -isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a,e);var g=a._.tabs[e],i;i="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,i);g.initialized||(CKEDITOR.document.getById(b._.inputId), -g.initialized=!0);if(c){var j,e="find"===e?1:0,g=1-e,k,h=p.length;for(k=0;k<h;k++)i=this.getContentElement(u[e],p[k][e]),j=this.getContentElement(u[g],p[k][g]),j.setValue(i.getValue())}}})},onShow:function(){e.searchRange=q();var a=this.getParentEditor().getSelection().getSelectedText(),b=this.getContentElement(g,"find"==g?"txtFindFind":"txtFindReplace");b.setValue(a);b.select();this.selectPage(g);this[("find"==g&&this._.editor.readOnly?"hide":"show")+"Page"]("replace")},onHide:function(){var a;e.matchRange&& -e.matchRange.isMatched()&&(e.matchRange.removeHighlight(),c.focus(),(a=e.matchRange.toDomRange())&&c.getSelection().selectRanges([a]));delete e.matchRange},onFocus:function(){return"replace"==g?this.getContentElement("replace","txtFindReplace"):this.getContentElement("find","txtFindFind")}}};CKEDITOR.dialog.add("find",function(c){return n(c,"find")});CKEDITOR.dialog.add("replace",function(c){return n(c,"replace")})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find-rtl.png deleted file mode 100644 index 02f40cb2f990851a50592926ffb3802ecc3d7617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_2p$#}JFtrIQYNE3=Cn+iz}Mc<kgE1J5}*ExeO<Ewr2>*Ye6$ z#fxvLT(bVWs@F>|)Gye?we<O2+tN(!dtBdQs$`<XVm9rTn-%u*MUPowtaYc=tUzYT z=Wi2B%Q9a!A8$ThZNKmP#}l7zJSMTkUQe8*_D{b_!D0P%XA#$gXG`>fqL)p8q8%FU zF8m!YECs*jy<%26b@v=lLdlDvq^hcFw+-)u<(-|KP0KPpmS5hnV~2x8+l@PSY?wZ1 z8ryR=F{G!b@7TAm&Uweg$-$vtL-)o#&)RzHL+$>PXO8cCZ@&6!*5bJJpFe!~pv_>J z=C=E8+v{BgvEqk%CoPRy8}_2a>U_>^xrk|BIS#a>M)K$0mMgKEo4z$_Ekgn)1B;`_ zIROTTz$q_Ruhw3(ZrwlTgkyzs-f!E!{ePLv^J<2xTeoh_+kd}(k;di!X5kDCP76QO ziMUG0%l}v8XnGx@#Tq$np$69>1DPpaOY;|NG^Iv<zi0Vd*FogyUZA8>Rpu-;p2H36 zUY~gW`GN_r%ay6Al5L59KFYKHt&?|lcCL2~WMMeXFyZvmgh(+FS4P2!t5$h$(n(HB zOM8B;nWdnvu5azywfDb&`}W6c=_gLXzdkPVf`QXI?1WuEZeO`_W&cdc<HwJeGdNr? zy`#ZaIj=ovrOBlXle(CQh#vu=SN}YGsL0mL=;r1Ypd&W%WQv1JhS}_ltx?)%_Q<p; zHYqd+95=K%|Ju*bukLczR==*Ji{_q8+2-c%e%{2l+R)zqzjnjlyzSjyOPe-s-1ysN z%bHB7O*eHi%FD&i@T9rzjM>MWz<R)>;X8v3>j!Rz#Js$B-3lD<(l$q0^fj05-h1YZ z_LE(COdXFcDkl`}^s%<K*6|d&^wQ+h&p*#MZ{8d~cg~zUroO`So<Dr>-~lt^0cqn7 zg{~x~0-1J3g}&sNxVS^#{~q6#TfcVItJ8n~)=IQ}{KkK;m7|FvP-L>oB9@|(k}nm> z$&dg2`c;)*SoqO9?cZlp&m3F-xG2kDU~W(?ag8WRNi0dVN-jzTQVd20hQ_)E=DG$Z zA%^Bw2F5_7ZD3?&VBouCH!!ClX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpi gnR(g8$%zH2dih1^v)|cB0TnTLy85}Sb4q9e05#pH-v9sr diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/find.png deleted file mode 100644 index 02f40cb2f990851a50592926ffb3802ecc3d7617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_2p$#}JFtrIQYNE3=Cn+iz}Mc<kgE1J5}*ExeO<Ewr2>*Ye6$ z#fxvLT(bVWs@F>|)Gye?we<O2+tN(!dtBdQs$`<XVm9rTn-%u*MUPowtaYc=tUzYT z=Wi2B%Q9a!A8$ThZNKmP#}l7zJSMTkUQe8*_D{b_!D0P%XA#$gXG`>fqL)p8q8%FU zF8m!YECs*jy<%26b@v=lLdlDvq^hcFw+-)u<(-|KP0KPpmS5hnV~2x8+l@PSY?wZ1 z8ryR=F{G!b@7TAm&Uweg$-$vtL-)o#&)RzHL+$>PXO8cCZ@&6!*5bJJpFe!~pv_>J z=C=E8+v{BgvEqk%CoPRy8}_2a>U_>^xrk|BIS#a>M)K$0mMgKEo4z$_Ekgn)1B;`_ zIROTTz$q_Ruhw3(ZrwlTgkyzs-f!E!{ePLv^J<2xTeoh_+kd}(k;di!X5kDCP76QO ziMUG0%l}v8XnGx@#Tq$np$69>1DPpaOY;|NG^Iv<zi0Vd*FogyUZA8>Rpu-;p2H36 zUY~gW`GN_r%ay6Al5L59KFYKHt&?|lcCL2~WMMeXFyZvmgh(+FS4P2!t5$h$(n(HB zOM8B;nWdnvu5azywfDb&`}W6c=_gLXzdkPVf`QXI?1WuEZeO`_W&cdc<HwJeGdNr? zy`#ZaIj=ovrOBlXle(CQh#vu=SN}YGsL0mL=;r1Ypd&W%WQv1JhS}_ltx?)%_Q<p; zHYqd+95=K%|Ju*bukLczR==*Ji{_q8+2-c%e%{2l+R)zqzjnjlyzSjyOPe-s-1ysN z%bHB7O*eHi%FD&i@T9rzjM>MWz<R)>;X8v3>j!Rz#Js$B-3lD<(l$q0^fj05-h1YZ z_LE(COdXFcDkl`}^s%<K*6|d&^wQ+h&p*#MZ{8d~cg~zUroO`So<Dr>-~lt^0cqn7 zg{~x~0-1J3g}&sNxVS^#{~q6#TfcVItJ8n~)=IQ}{KkK;m7|FvP-L>oB9@|(k}nm> z$&dg2`c;)*SoqO9?cZlp&m3F-xG2kDU~W(?ag8WRNi0dVN-jzTQVd20hQ_)E=DG$Z zA%^Bw2F5_7ZD3?&VBouCH!!ClX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpi gnR(g8$%zH2dih1^v)|cB0TnTLy85}Sb4q9e05#pH-v9sr diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png deleted file mode 100644 index cbf9ced23a075b392c55bbea9835dd39eb18971d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2417 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/find.png deleted file mode 100644 index cbf9ced23a075b392c55bbea9835dd39eb18971d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2417 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png deleted file mode 100644 index 9efd8bbdd99cc432ca602d5261cdeda318b28950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2761 zcmV;)3O4nLP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy014trL_t(o!?l-tY*g2s$3N%X*W9_| z8Do!4Z1eK+#w1O#*9oCb!zMrjsg~XJK@_EF8$n7owA~dUl{Tv`?W(&Js@j+o6m8Np z)uzd6BLYNJBq~Z9puyN68cfmzrD->gLu_m_@5epo>>o3B4Q18cKYFCmmCoGzyWexZ z=lA`7uQ0v6h|bPWB&Sc`0Wfm$;-jXw_t?9GgA__7j4}K<hmBHTSv%&<o7V|2GBUCQ zrB)bY;LrSW09z?V<LuctMWay(&^UYcO-iZ%R}mouQV1+50Z>|_wdVf<-_}}F6N^cu zln_8oEGG5D%7s7x81ugt6GC8H7BSx^5d>(h8P8<M77A!%{v?IAsT3Cz6H-dySQeh+ zAVg)_7=tzjrPO56iB-FfLp&NK+1QBq_{XmUdJ3<-_PLM7#weD{gj1fmHUPk~EG#LJ zQc@F*!nA43a2%LIMZQ#GES)Bk&l4&&x$0yhfm>IHShD0x()V|^%$il}U3VQbeV<}J zU)ha(o>CZI6NpW9H4|Hzh(-~M7ni5p^8xS+;8D}xKlH(eACk@I34EXC>C+J%9e)Ar zn=xn3$|Z{yAuY=i^XG2_ehvKEoIjs0jgB&M`SK+AsUYkL9)%EK460OO(UK+P@_D2X z*tXrQw7%!Jzx&<oqP@K%^XjWZ<uD}f`-qN?EjZ4<bar$^r#Cc60TLmY-P-!Ye4)U2 zDy77dB?o|iFsDxsesu97<Js&LAZ!CjAwUR}QjCs{^5($6<e4aiq1f{9!{W@@vrX>~ z4L#*r)}0tbxmW}^HMh0(Lut(XY$hWd$3ZE@jOJ#kwKlfnSmT#3|Lq&+&#w~8mTfbq zPyahtfsh!3teydcpin71Ib7Q|J$v_>d_FId_4O;YQiNg1rAwDE#&llz&2O5%uweu5 zzyCgCV`B^t5A*!<&$D^+X0c+$3hCN**m2{HHMI>5KNQQB-QL*PNX+*uiw2~bLV*wh z={Nunp4q+I?(6BX2lnl=T_HA=lp>eUd)gSZ)@1W}fRn)Qzw!02>tn}{YsYoXZ{K^5 zmX;QC-+lL)fBo)vO<!N1vuWeTa8^r8S$N)$M0<NfA_%Z7s{(*26iCa$@qN;V4?h`A zCW$4J)HOB1@#9bWK|nMJFj`mi!ExyA?mh{00J|EJNp<YC*Yth&-*12~0N(<h1ukve zxY0Rr{J1w~=FB?ai;k2?D!p$TV~|o#QV@wo@nbP+w8nK^lF1~Zy}k2Ot5$*QQVv55 zAYB(Pk)Uty-a<K(`R4LR9@!5(xu?5((Wza#UNE*zSSoSLwrz3X8$mSs_lFK03YRWk z{E1vH_kCRzH>s+eDy@-15cocJeLc<1%_L{eM6|beO3&M2l%l=8-Q;sQwAKhIu{;ki z9>=e*=VVvc<Zf887?HX<f`$hA_wG%d+_mf5z?!y2i`;+Pv*+UY_&6#ID@yv&!GrwW z{{4FJ!Ua(i1Q;oK`S9Uz;t)E%&*Fs(34*{raqO6S`zJrKL)*qwbsu9eTBFKkRI!L9 zC0-C<yDmZqj8cTfBIR_N>o;#+4SeOTAOCoR@jQ$W*r`;Co!|SOdH8_`c<aqKh3mR3 zZfg@lN+X3JlTLq7Di+^4d*;k-0J&@yyQT&)0YC^uwTm3jBZx$(i^qxjKGuYkYmF)v z$-nf{%l=(=h12Wm$QnboRKm_=vwSR>>^*egz+YbNGu3NL^#^b&R0?a#pI4hwA{HZl z`|XE;Raf0I1e^hW9&2v?WqSYqaBz4SyQ=nEfnC7WAf}E}z*b?~AjGxrFov+IBiAom zhAjk+;}8S^j^i}t^ZBNck&(4;4h(D%H{Eo1`smRi+m1vy{lpW;O&Bg0Q=D%ij7+HZ zghn{N|A+0rYJ^oKt;*~q%D3NnM{L`+P1Xbfb6Z=P)7pCT(B;e9Z7Da|mg{1>E)mDU z_dH5rNWM_0NaZ!QSybEgT0<K{zEt|7`33Xmo35T7z3G7mq~kcm<8d)wDBNqb-eglT z9Hu1_)U8_edGq?~|9NqAl*_r?6{aDj#GaaXuCi7ENXx>GMmhiV(`$9P3{{N@To=7& z%{^L(XHAu=Y%Uko#$b!;!(K%i|61I9bHw!bKVyxIkjmvKSNk>Uc_d;nq!6TXxht%7 zYAUJ?0wT6Oc_t>nGdTEDKN@{jN{I%h)z)H+skoumnp`f&m%sM4!cU)h<_Xc>K5EXL zdnqwK&R9B4St;t{ar|3veGb@SPM;ng86GB;%TX$q5ke6ALq2E%b^xCOnx|56&%O6z zNr_RaLZdO2JfM_fY;26Dy1Qc+-gx6uUw{99iKR>b1Ne>^7<i9j5u#DrKl#bK`%j#> zRV-V!#S9F*5FZ`oQYuBUT&@I}j*ccQtFNQIy)g&^gb;*bh!BEEBqCH8;&@&~`Yj7X zHIQhn$>wqZzx>(Z!+&$v+O;~BPJi+2xpNytTiYq%ZQ!j3A9~2TVZnliqp!aDoM>x% z0oY>t`i3u!j^f!iiI$e9{%ZO1rg^Qc{PXthChGfFoa5DN*3j6{fRJ)B08RFju3VlD zB9RL}=<2ePb#?jA+<B+Bdd->@%U7)U@{+c;9l{vlxvstL)1MZ1tX_RLa8`75++7oi zfHBOSJ9lL^n-%}~*kgb6a)3giz*PH(svT1`mfr5}EO76QH{4J@a^y&K#VxlOt(1xd zfn2y?fy|`S6!Lj8>9kcpZJKrK%9RFCr9y!)46&s2a=9Fdc-#Q%Uf;RX?(OQb`@6bq zV4a*u+SNpDCIAQ_uv`~69_M6N*BRimz<+Pux>daL$}9HEM~;}sAAg+D(NR*V6hlKp zv@KoAFOD9yj4}4e$OxrkkytE-tOkvNefy3C4Gs9oB++D&O9u`d@qz%`wkrwTvaX~+ zNQv!vc!>ljySfeo*8|_DqTw_(HJQP|LCWPaJ$v@(e|qdO4TONo=JS-wWom0{@qM2V z#H?AfNG6li#9{<BHAG`E+(-mrSrrPZDtm>d3d_RwJR-HV^zYl3>D|5i(O>P{Ig^SR ztzCJ?9p>P{gKFV|1qS#Lu(Y?kd%v+P3dJJx=FKyXZL@y;dJ$i@uCr<OZ05AIFsrEv zzrLQp_bY8!jdfaU#JT65yN0J!Jl<%HE|*b-0xFZC^N~kF;9cOWzuLL;s1u9f_&%27 z;DjLy@4r9%%=-0KCY9p#Q>Vg0CUZsI2OoOK*5xvpT#i^ngZa*Fw@Le2nl7pyPn9ca zS*VJ}{{Z;bi5)v~etkW5)tHRd<SQYSLodFlcK7ti);V*=Y7&WQLI_OdvrZVTDJ#W{ z88gf`w{JJ87hmLm0KYnf#XZyX5C8xGC3HntbYx+4WjbSWWnpw>05UK!Gc7PSEiy1v zF)}(bG&(UkD=;!TFfdgPsT%+Q03~!qSaf7zbY(hiZ)9m^c>ppnF*7YNHZ3wRR53C- zGBi3dIV&(SIxsLKQxT^C000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs P00000NkvXXu0mjfKbA?` diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/replace.png b/platforms/android/assets/www/lib/ckeditor/plugins/find/icons/replace.png deleted file mode 100644 index e68afcbe2049aabc8ce5214222c11c78bfe205fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(^*d!#}JFtp_6R0wbKP!=T~lBeRr$s`(MhFdIec{jFxQRUVLoE zjUVhwc55+dPO{po$P#lb^g!sX2}%-$m!F6);bbh97S&AQjMU4Cee4u<a`pPVSC@R4 zTFB>PK4+%oXAc3ETkpRIhQ2J@?V~0fA}V-L!dY!Hqk?bnv(J_ct4=vxJ9v<Bt{*$Y z?QNZpXPEeI)akCV^A})Y;AwYuTP)}~X@Uyp=btj6M^|XAd(E_A<3>ll>B_UuPCEUR zqlrQArpQG5Pd{yrCQW?%Hn-;f@l84|ET<)!A6s;E)J6FpGDxYclob3a_G4#^9=lQz z>mTMni&hyo81NV>9m+9t4qd*=N>ng5DoV*y=-jz;cK2`H>asbXoSwd1MJfFNyI>>` zC{8}PM`B4PmjFX!2ZMnG&yF2Ceth`w!JuQ&i}hivMbAF}{Nm4_Kgu62XHQtZeEF{J z+n2A}<q^)_4D?fb*y`3*>sGzWzndo>x;5nM@6)GGf8QI|zk9d!k{G>gnd5iv-P4OR z*}H##dHQC_%vnlG74zEP{{|9<Y!6l&@cftIVT<T>OFs2q)JJV{IA4$9j&<I8(=TuL zU8R*dE2(zZ-_W;Z)k(L_j?Hj2^I0Ao^0hQzX;7hy%VP_%)z@G9Ub}W})v73Fjj3KY zw)L(OYEyjtaYl~W>D!Kdk9)MIa!pH3lsUdIKqJKUiM!y(oZD_LS;uCaZ&FAoE}s1L zYpF}h9*y&#H|V@>J@T;N#N)@0_rCuf&n)ly<o)8si^~t}SNi1VA|PmMXIGc1>M7J? zxI*jN=g-DRlRmcB?XM45ef81m)!M$7ryM@)tUJ{!o?*_MIeSuDRXmR=eM(xe%0#L+ zqrCk4j;OVD!E3|z-?@Lk|Mk~jVi)F|O>+rsdH<V1xZ&#6P+<HY;O;yok(ZZuDQ)x5 z?A>?&t&3Z4&)|MG?eq8L%hlJdU%!0aYb7Nur6>)N4Y|?{{}~PzrJR00y|xXQ+Eq(j zBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE%n3*ua`RI%(<*Um zu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$MGT&<elF{r5}E*Z Cz@PO1 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/af.js deleted file mode 100644 index 79e13e84..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","af",{find:"Soek",findOptions:"Find Options",findWhat:"Soek na:",matchCase:"Hoof/kleinletter sensitief",matchCyclic:"Soek deurlopend",matchWord:"Hele woord moet voorkom",notFoundMsg:"Teks nie gevind nie.",replace:"Vervang",replaceAll:"Vervang alles",replaceSuccessMsg:"%1 voorkoms(te) vervang.",replaceWith:"Vervang met:",title:"Soek en vervang"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ar.js deleted file mode 100644 index e995c89d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ar",{find:"بحث",findOptions:"Find Options",findWhat:"البحث بـ:",matchCase:"مطابقة حالة الأحرف",matchCyclic:"مطابقة دورية",matchWord:"مطابقة بالكامل",notFoundMsg:"لم يتم العثور على النص المحدد.",replace:"إستبدال",replaceAll:"إستبدال الكل",replaceSuccessMsg:"تم استبدال 1% من الحالات ",replaceWith:"إستبدال بـ:",title:"بحث واستبدال"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bg.js deleted file mode 100644 index 844a0b27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bg",{find:"Търсене",findOptions:"Find Options",findWhat:"Търси за:",matchCase:"Съвпадение",matchCyclic:"Циклично съвпадение",matchWord:"Съвпадение с дума",notFoundMsg:"Указаният текст не е намерен.",replace:"Препокриване",replaceAll:"Препокрий всички",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Препокрива с:",title:"Търсене и препокриване"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bn.js deleted file mode 100644 index f80be452..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bn",{find:"খোজো",findOptions:"Find Options",findWhat:"যা খুঁজতে হবে:",matchCase:"কেস মিলাও",matchCyclic:"Match cyclic",matchWord:"পুরা শব্দ মেলাও",notFoundMsg:"আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি",replace:"রিপ্লেস",replaceAll:"সব বদলে দাও",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"যার সাথে বদলাতে হবে:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bs.js deleted file mode 100644 index 4941067b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bs",{find:"Naði",findOptions:"Find Options",findWhat:"Naði šta:",matchCase:"Uporeðuj velika/mala slova",matchCyclic:"Match cyclic",matchWord:"Uporeðuj samo cijelu rijeè",notFoundMsg:"Traženi tekst nije pronaðen.",replace:"Zamjeni",replaceAll:"Zamjeni sve",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Zamjeni sa:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ca.js deleted file mode 100644 index 85448cf4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ca",{find:"Cerca",findOptions:"Opcions de Cerca",findWhat:"Cerca el:",matchCase:"Distingeix majúscules/minúscules",matchCyclic:"Coincidència cíclica",matchWord:"Només paraules completes",notFoundMsg:"El text especificat no s'ha trobat.",replace:"Reemplaça",replaceAll:"Reemplaça-ho tot",replaceSuccessMsg:"%1 ocurrència/es reemplaçada/es.",replaceWith:"Reemplaça amb:",title:"Cerca i reemplaça"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cs.js deleted file mode 100644 index a63cd194..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","cs",{find:"Hledat",findOptions:"Možnosti hledání",findWhat:"Co hledat:",matchCase:"Rozlišovat velikost písma",matchCyclic:"Procházet opakovaně",matchWord:"Pouze celá slova",notFoundMsg:"Hledaný text nebyl nalezen.",replace:"Nahradit",replaceAll:"Nahradit vše",replaceSuccessMsg:"%1 nahrazení.",replaceWith:"Čím nahradit:",title:"Najít a nahradit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cy.js deleted file mode 100644 index 3e87336f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","cy",{find:"Chwilio",findOptions:"Opsiynau Chwilio",findWhat:"Chwilio'r term:",matchCase:"Cydweddu'r cas",matchCyclic:"Cydweddu'n gylchol",matchWord:"Cydweddu gair cyfan",notFoundMsg:"Nid oedd y testun wedi'i ddarganfod.",replace:"Amnewid Un",replaceAll:"Amnewid Pob",replaceSuccessMsg:"Amnewidiwyd %1 achlysur.",replaceWith:"Amnewid gyda:",title:"Chwilio ac Amnewid"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/da.js deleted file mode 100644 index 35693e27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","da",{find:"Søg",findOptions:"Find muligheder",findWhat:"Søg efter:",matchCase:"Forskel på store og små bogstaver",matchCyclic:"Match cyklisk",matchWord:"Kun hele ord",notFoundMsg:"Søgeteksten blev ikke fundet",replace:"Erstat",replaceAll:"Erstat alle",replaceSuccessMsg:"%1 forekomst(er) erstattet.",replaceWith:"Erstat med:",title:"Søg og erstat"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/de.js deleted file mode 100644 index 5295d06e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","de",{find:"Suchen",findOptions:"Suchoptionen",findWhat:"Suche nach:",matchCase:"Groß-Kleinschreibung beachten",matchCyclic:"Zyklische Suche",matchWord:"Nur ganze Worte suchen",notFoundMsg:"Der gesuchte Text wurde nicht gefunden.",replace:"Ersetzen",replaceAll:"Alle ersetzen",replaceSuccessMsg:"%1 vorkommen ersetzt.",replaceWith:"Ersetze mit:",title:"Suchen und Ersetzen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/el.js deleted file mode 100644 index f559f2a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","el",{find:"Εύρεση",findOptions:"Επιλογές Εύρεσης",findWhat:"Εύρεση για:",matchCase:"Ταίριασμα πεζών/κεφαλαίων",matchCyclic:"Αναδρομική εύρεση",matchWord:"Εύρεση μόνο πλήρων λέξεων",notFoundMsg:"Το κείμενο δεν βρέθηκε.",replace:"Αντικατάσταση",replaceAll:"Αντικατάσταση Όλων",replaceSuccessMsg:"Ο(ι) όρος(-οι) αντικαταστήθηκε(-αν) %1 φορές.",replaceWith:"Αντικατάσταση με:",title:"Εύρεση και Αντικατάσταση"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-au.js deleted file mode 100644 index ad033791..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-au",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-ca.js deleted file mode 100644 index d217f653..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-ca",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-gb.js deleted file mode 100644 index dfbafb7e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-gb",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en.js deleted file mode 100644 index 6865f0b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eo.js deleted file mode 100644 index 9fde69e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","eo",{find:"Serĉi",findOptions:"Opcioj pri Serĉado",findWhat:"Serĉi:",matchCase:"Kongruigi Usklecon",matchCyclic:"Cikla Serĉado",matchWord:"Tuta Vorto",notFoundMsg:"La celteksto ne estas trovita.",replace:"Anstataŭigi",replaceAll:"Anstataŭigi Ĉion",replaceSuccessMsg:"%1 anstataŭigita(j) apero(j).",replaceWith:"Anstataŭigi per:",title:"Serĉi kaj Anstataŭigi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/es.js deleted file mode 100644 index 2efd39ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","es",{find:"Buscar",findOptions:"Opciones de búsqueda",findWhat:"Texto a buscar:",matchCase:"Coincidir may/min",matchCyclic:"Buscar en todo el contenido",matchWord:"Coincidir toda la palabra",notFoundMsg:"El texto especificado no ha sido encontrado.",replace:"Reemplazar",replaceAll:"Reemplazar Todo",replaceSuccessMsg:"La expresión buscada ha sido reemplazada %1 veces.",replaceWith:"Reemplazar con:",title:"Buscar y Reemplazar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/et.js deleted file mode 100644 index bcc39210..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","et",{find:"Otsi",findOptions:"Otsingu valikud",findWhat:"Otsitav:",matchCase:"Suur- ja väiketähtede eristamine",matchCyclic:"Jätkatakse algusest",matchWord:"Ainult terved sõnad",notFoundMsg:"Otsitud teksti ei leitud.",replace:"Asenda",replaceAll:"Asenda kõik",replaceSuccessMsg:"%1 vastet asendati.",replaceWith:"Asendus:",title:"Otsimine ja asendamine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eu.js deleted file mode 100644 index f082555f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","eu",{find:"Bilatu",findOptions:"Find Options",findWhat:"Zer bilatu:",matchCase:"Maiuskula/minuskula",matchCyclic:"Bilaketa ziklikoa",matchWord:"Esaldi osoa bilatu",notFoundMsg:"Idatzitako testua ez da topatu.",replace:"Ordezkatu",replaceAll:"Ordeztu Guztiak",replaceSuccessMsg:"Zenbat aldiz ordeztua: %1",replaceWith:"Zerekin ordeztu:",title:"Bilatu eta Ordeztu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fa.js deleted file mode 100644 index 2339c6dd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fa",{find:"جستجو",findOptions:"گزینه​های جستجو",findWhat:"چه چیز را مییابید:",matchCase:"همسانی در بزرگی و کوچکی نویسه​ها",matchCyclic:"همسانی با چرخه",matchWord:"همسانی با واژهٴ کامل",notFoundMsg:"متن موردنظر یافت نشد.",replace:"جایگزینی",replaceAll:"جایگزینی همهٴ یافته​ها",replaceSuccessMsg:"%1 رخداد جایگزین شد.",replaceWith:"جایگزینی با:",title:"جستجو و جایگزینی"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fi.js deleted file mode 100644 index 79daf814..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fi",{find:"Etsi",findOptions:"Hakuasetukset",findWhat:"Etsi mitä:",matchCase:"Sama kirjainkoko",matchCyclic:"Kierrä ympäri",matchWord:"Koko sana",notFoundMsg:"Etsittyä tekstiä ei löytynyt.",replace:"Korvaa",replaceAll:"Korvaa kaikki",replaceSuccessMsg:"%1 esiintymä(ä) korvattu.",replaceWith:"Korvaa tällä:",title:"Etsi ja korvaa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fo.js deleted file mode 100644 index 1e3dc043..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fo",{find:"Leita",findOptions:"Finn møguleikar",findWhat:"Finn:",matchCase:"Munur á stórum og smáum bókstavum",matchCyclic:"Match cyclic",matchWord:"Bert heil orð",notFoundMsg:"Leititeksturin varð ikki funnin",replace:"Yvirskriva",replaceAll:"Yvirskriva alt",replaceSuccessMsg:"%1 úrslit broytt.",replaceWith:"Yvirskriva við:",title:"Finn og broyt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr-ca.js deleted file mode 100644 index 59a8e22c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fr-ca",{find:"Rechercher",findOptions:"Options de recherche",findWhat:"Rechercher:",matchCase:"Respecter la casse",matchCyclic:"Recherche cyclique",matchWord:"Mot entier",notFoundMsg:"Le texte indiqué est introuvable.",replace:"Remplacer",replaceAll:"Tout remplacer",replaceSuccessMsg:"%1 remplacements.",replaceWith:"Remplacer par:",title:"Rechercher et remplacer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr.js deleted file mode 100644 index a7b4218e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fr",{find:"Trouver",findOptions:"Options de recherche",findWhat:"Expression à trouver: ",matchCase:"Respecter la casse",matchCyclic:"Boucler",matchWord:"Mot entier uniquement",notFoundMsg:"Le texte spécifié ne peut être trouvé.",replace:"Remplacer",replaceAll:"Remplacer tout",replaceSuccessMsg:"%1 occurrence(s) replacée(s).",replaceWith:"Remplacer par: ",title:"Trouver et remplacer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gl.js deleted file mode 100644 index be892489..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","gl",{find:"Buscar",findOptions:"Buscar opcións",findWhat:"Texto a buscar:",matchCase:"Coincidir Mai./min.",matchCyclic:"Coincidencia cíclica",matchWord:"Coincidencia coa palabra completa",notFoundMsg:"Non se atopou o texto indicado.",replace:"Substituir",replaceAll:"Substituír todo",replaceSuccessMsg:"%1 concorrencia(s) substituída(s).",replaceWith:"Substituír con:",title:"Buscar e substituír"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gu.js deleted file mode 100644 index 572afcfd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","gu",{find:"શોધવું",findOptions:"વીકલ્પ શોધો",findWhat:"આ શોધો",matchCase:"કેસ સરખા રાખો",matchCyclic:"સરખાવવા બધા",matchWord:"બઘા શબ્દ સરખા રાખો",notFoundMsg:"તમે શોધેલી ટેક્સ્ટ નથી મળી",replace:"રિપ્લેસ/બદલવું",replaceAll:"બઘા બદલી ",replaceSuccessMsg:"%1 ફેરફારો બાદલાયા છે.",replaceWith:"આનાથી બદલો",title:"શોધવું અને બદલવું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/he.js deleted file mode 100644 index ea4e4224..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","he",{find:"חיפוש",findOptions:"אפשרויות חיפוש",findWhat:"חיפוש מחרוזת:",matchCase:"הבחנה בין אותיות רשיות לקטנות (Case)",matchCyclic:"התאמה מחזורית",matchWord:"התאמה למילה המלאה",notFoundMsg:"הטקסט המבוקש לא נמצא.",replace:"החלפה",replaceAll:"החלפה בכל העמוד",replaceSuccessMsg:"%1 טקסטים הוחלפו.",replaceWith:"החלפה במחרוזת:",title:"חיפוש והחלפה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hi.js deleted file mode 100644 index d67da0a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hi",{find:"खोजें",findOptions:"Find Options",findWhat:"यह खोजें:",matchCase:"केस मिलायें",matchCyclic:"Match cyclic",matchWord:"पूरा शब्द मिलायें",notFoundMsg:"आपके द्वारा दिया गया टेक्स्ट नहीं मिला",replace:"रीप्लेस",replaceAll:"सभी रिप्लेस करें",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"इससे रिप्लेस करें:",title:"खोजें और बदलें"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hr.js deleted file mode 100644 index bcca21eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hr",{find:"Pronađi",findOptions:"Opcije traženja",findWhat:"Pronađi:",matchCase:"Usporedi mala/velika slova",matchCyclic:"Usporedi kružno",matchWord:"Usporedi cijele riječi",notFoundMsg:"Traženi tekst nije pronađen.",replace:"Zamijeni",replaceAll:"Zamijeni sve",replaceSuccessMsg:"Zamijenjeno %1 pojmova.",replaceWith:"Zamijeni s:",title:"Pronađi i zamijeni"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hu.js deleted file mode 100644 index 6ca2b808..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hu",{find:"Keresés",findOptions:"Find Options",findWhat:"Keresett szöveg:",matchCase:"kis- és nagybetű megkülönböztetése",matchCyclic:"Ciklikus keresés",matchWord:"csak ha ez a teljes szó",notFoundMsg:"A keresett szöveg nem található.",replace:"Csere",replaceAll:"Az összes cseréje",replaceSuccessMsg:"%1 egyezőség cserélve.",replaceWith:"Csere erre:",title:"Keresés és csere"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/id.js deleted file mode 100644 index 4257045a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","id",{find:"Temukan",findOptions:"Opsi menemukan",findWhat:"Temukan apa:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Ganti",replaceAll:"Ganti Semua",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Ganti dengan:",title:"Temukan dan Ganti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/is.js deleted file mode 100644 index d69cba6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","is",{find:"Leita",findOptions:"Find Options",findWhat:"Leita að:",matchCase:"Gera greinarmun á¡ há¡- og lágstöfum",matchCyclic:"Match cyclic",matchWord:"Aðeins heil orð",notFoundMsg:"Leitartexti fannst ekki!",replace:"Skipta út",replaceAll:"Skipta út allsstaðar",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Skipta út fyrir:",title:"Finna og skipta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/it.js deleted file mode 100644 index 2aed2adc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","it",{find:"Trova",findOptions:"Opzioni di ricerca",findWhat:"Trova:",matchCase:"Maiuscole/minuscole",matchCyclic:"Ricerca ciclica",matchWord:"Solo parole intere",notFoundMsg:"L'elemento cercato non è stato trovato.",replace:"Sostituisci",replaceAll:"Sostituisci tutto",replaceSuccessMsg:"%1 occorrenza(e) sostituite.",replaceWith:"Sostituisci con:",title:"Cerca e Sostituisci"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ja.js deleted file mode 100644 index f2043d1f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ja",{find:"検索",findOptions:"検索オプション",findWhat:"検索する文字列:",matchCase:"大文字と小文字を区別する",matchCyclic:"末尾に逹したら先頭に戻る",matchWord:"単語単位で探す",notFoundMsg:"指定された文字列は見つかりませんでした。",replace:"置換",replaceAll:"すべて置換",replaceSuccessMsg:"%1 個置換しました。",replaceWith:"置換後の文字列:",title:"検索と置換"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ka.js deleted file mode 100644 index d5d8dda9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ka",{find:"ძებნა",findOptions:"Find Options",findWhat:"საძიებელი ტექსტი:",matchCase:"დიდი და პატარა ასოების დამთხვევა",matchCyclic:"დოკუმენტის ბოლოში გასვლის მერე თავიდან დაწყება",matchWord:"მთელი სიტყვის დამთხვევა",notFoundMsg:"მითითებული ტექსტი არ მოიძებნა.",replace:"შეცვლა",replaceAll:"ყველას შეცვლა",replaceSuccessMsg:"%1 მოძებნილი შეიცვალა.",replaceWith:"შეცვლის ტექსტი:",title:"ძებნა და შეცვლა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/km.js deleted file mode 100644 index 3815f2ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","km",{find:"ស្វែងរក",findOptions:"ជម្រើស​ស្វែង​រក",findWhat:"ស្វែងរកអ្វី:",matchCase:"ករណី​ដំណូច",matchCyclic:"ត្រូវ​នឹង cyclic",matchWord:"ដូច​នឹង​ពាក្យ​ទាំង​មូល",notFoundMsg:"រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។",replace:"ជំនួស",replaceAll:"ជំនួសទាំងអស់",replaceSuccessMsg:"ការ​ជំនួស​ចំនួន %1 បាន​កើត​ឡើង។",replaceWith:"ជំនួសជាមួយ:",title:"រក​និង​ជំនួស"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ko.js deleted file mode 100644 index e17dce40..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ko",{find:"찾기",findOptions:"Find Options",findWhat:"찾을 문자열:",matchCase:"대소문자 구분",matchCyclic:"Match cyclic",matchWord:"온전한 단어",notFoundMsg:"문자열을 찾을 수 없습니다.",replace:"바꾸기",replaceAll:"모두 바꾸기",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"바꿀 문자열:",title:"찾기 & 바꾸기"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ku.js deleted file mode 100644 index 54cc3c93..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ku",{find:"گەڕان",findOptions:"هەڵبژاردەکانی گەڕان",findWhat:"گەڕان بەدووای:",matchCase:"جیاکردنەوه لەنێوان پیتی گەورەو بچووك",matchCyclic:"گەڕان لەهەموو پەڕەکه",matchWord:"تەنەا هەموو وشەکه",notFoundMsg:"هیچ دەقه گەڕانێك نەدۆزراوه.",replace:"لەبریدانان",replaceAll:"لەبریدانانی هەمووی",replaceSuccessMsg:" پێشهاتە(ی) لەبری دانرا. %1",replaceWith:"لەبریدانان به:",title:"گەڕان و لەبریدانان"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lt.js deleted file mode 100644 index 2c55039e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","lt",{find:"Rasti",findOptions:"Paieškos nustatymai",findWhat:"Surasti tekstą:",matchCase:"Skirti didžiąsias ir mažąsias raides",matchCyclic:"Sutampantis cikliškumas",matchWord:"Atitikti pilną žodį",notFoundMsg:"Nurodytas tekstas nerastas.",replace:"Pakeisti",replaceAll:"Pakeisti viską",replaceSuccessMsg:"%1 sutapimas(ų) buvo pakeisti.",replaceWith:"Pakeisti tekstu:",title:"Surasti ir pakeisti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lv.js deleted file mode 100644 index 12a554cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","lv",{find:"Meklēt",findOptions:"Meklēt uzstādījumi",findWhat:"Meklēt:",matchCase:"Reģistrjūtīgs",matchCyclic:"Sakrist cikliski",matchWord:"Jāsakrīt pilnībā",notFoundMsg:"Norādītā frāze netika atrasta.",replace:"Nomainīt",replaceAll:"Aizvietot visu",replaceSuccessMsg:"%1 gadījums(i) aizvietoti",replaceWith:"Nomainīt uz:",title:"Meklēt un aizvietot"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mk.js deleted file mode 100644 index 8c41cfc1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","mk",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mn.js deleted file mode 100644 index 28498167..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","mn",{find:"Хайх",findOptions:"Хайх сонголтууд",findWhat:"Хайх үг/үсэг:",matchCase:"Тэнцэх төлөв",matchCyclic:"Match cyclic",matchWord:"Тэнцэх бүтэн үг",notFoundMsg:"Хайсан бичвэрийг олсонгүй.",replace:"Орлуулах",replaceAll:"Бүгдийг нь солих",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Солих үг:",title:"Хайж орлуулах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ms.js deleted file mode 100644 index 75f96037..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ms",{find:"Cari",findOptions:"Find Options",findWhat:"Perkataan yang dicari:",matchCase:"Padanan case huruf",matchCyclic:"Match cyclic",matchWord:"Padana Keseluruhan perkataan",notFoundMsg:"Text yang dicari tidak dijumpai.",replace:"Ganti",replaceAll:"Ganti semua",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Diganti dengan:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nb.js deleted file mode 100644 index 6779f499..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","nb",{find:"Søk",findOptions:"Søkealternativer",findWhat:"Søk etter:",matchCase:"Skill mellom store og små bokstaver",matchCyclic:"Søk i hele dokumentet",matchWord:"Bare hele ord",notFoundMsg:"Fant ikke søketeksten.",replace:"Erstatt",replaceAll:"Erstatt alle",replaceSuccessMsg:"%1 tilfelle(r) erstattet.",replaceWith:"Erstatt med:",title:"Søk og erstatt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nl.js deleted file mode 100644 index 156a9da5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","nl",{find:"Zoeken",findOptions:"Zoekopties",findWhat:"Zoeken naar:",matchCase:"Hoofdlettergevoelig",matchCyclic:"Doorlopend zoeken",matchWord:"Hele woord moet voorkomen",notFoundMsg:"De opgegeven tekst is niet gevonden.",replace:"Vervangen",replaceAll:"Alles vervangen",replaceSuccessMsg:"%1 resultaten vervangen.",replaceWith:"Vervangen met:",title:"Zoeken en vervangen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/no.js deleted file mode 100644 index e098a7c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","no",{find:"Søk",findOptions:"Søkealternativer",findWhat:"Søk etter:",matchCase:"Skill mellom store og små bokstaver",matchCyclic:"Søk i hele dokumentet",matchWord:"Bare hele ord",notFoundMsg:"Fant ikke søketeksten.",replace:"Erstatt",replaceAll:"Erstatt alle",replaceSuccessMsg:"%1 tilfelle(r) erstattet.",replaceWith:"Erstatt med:",title:"Søk og erstatt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pl.js deleted file mode 100644 index 1144fd8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pl",{find:"Znajdź",findOptions:"Opcje wyszukiwania",findWhat:"Znajdź:",matchCase:"Uwzględnij wielkość liter",matchCyclic:"Cykliczne dopasowanie",matchWord:"Całe słowa",notFoundMsg:"Nie znaleziono szukanego hasła.",replace:"Zamień",replaceAll:"Zamień wszystko",replaceSuccessMsg:"%1 wystąpień zastąpionych.",replaceWith:"Zastąp przez:",title:"Znajdź i zamień"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt-br.js deleted file mode 100644 index b9e438c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pt-br",{find:"Localizar",findOptions:"Opções",findWhat:"Procurar por:",matchCase:"Coincidir Maiúsculas/Minúsculas",matchCyclic:"Coincidir cíclico",matchWord:"Coincidir a palavra inteira",notFoundMsg:"O texto especificado não foi encontrado.",replace:"Substituir",replaceAll:"Substituir Tudo",replaceSuccessMsg:"%1 ocorrência(s) substituída(s).",replaceWith:"Substituir por:",title:"Localizar e Substituir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt.js deleted file mode 100644 index bb8c1a6a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pt",{find:"Procurar",findOptions:"Find Options",findWhat:"Texto a Procurar:",matchCase:"Maiúsculas/Minúsculas",matchCyclic:"Match cyclic",matchWord:"Coincidir com toda a palavra",notFoundMsg:"O texto especificado não foi encontrado.",replace:"Substituir",replaceAll:"Substituir Tudo",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Substituir por:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ro.js deleted file mode 100644 index 7ec8b9d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ro",{find:"Găseşte",findOptions:"Find Options",findWhat:"Găseşte:",matchCase:"Deosebeşte majuscule de minuscule (Match case)",matchCyclic:"Potrivește ciclic",matchWord:"Doar cuvintele întregi",notFoundMsg:"Textul specificat nu a fost găsit.",replace:"Înlocuieşte",replaceAll:"Înlocuieşte tot",replaceSuccessMsg:"%1 căutări înlocuite.",replaceWith:"Înlocuieşte cu:",title:"Găseşte şi înlocuieşte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ru.js deleted file mode 100644 index b611c271..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ru",{find:"Найти",findOptions:"Опции поиска",findWhat:"Найти:",matchCase:"Учитывать регистр",matchCyclic:"По всему тексту",matchWord:"Только слово целиком",notFoundMsg:"Искомый текст не найден.",replace:"Заменить",replaceAll:"Заменить всё",replaceSuccessMsg:"Успешно заменено %1 раз(а).",replaceWith:"Заменить на:",title:"Поиск и замена"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/si.js deleted file mode 100644 index 1e1d1457..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","si",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"හිලව් කිරීම",replaceAll:"සියල්ලම හිලව් කරන්න",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sk.js deleted file mode 100644 index 11821e7a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sk",{find:"Hľadať",findOptions:"Nájsť možnosti",findWhat:"Čo hľadať:",matchCase:"Rozlišovať malé a veľké písmená",matchCyclic:"Cykliť zhodu",matchWord:"Len celé slová",notFoundMsg:"Hľadaný text nebol nájdený.",replace:"Nahradiť",replaceAll:"Nahradiť všetko",replaceSuccessMsg:"%1 výskyt(ov) nahradených.",replaceWith:"Čím nahradiť:",title:"Nájsť a nahradiť"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sl.js deleted file mode 100644 index 32dea7e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sl",{find:"Najdi",findOptions:"Find Options",findWhat:"Najdi:",matchCase:"Razlikuj velike in male črke",matchCyclic:"Primerjaj znake v cirilici",matchWord:"Samo cele besede",notFoundMsg:"Navedeno besedilo ni bilo najdeno.",replace:"Zamenjaj",replaceAll:"Zamenjaj vse",replaceSuccessMsg:"%1 pojavitev je bilo zamenjano.",replaceWith:"Zamenjaj z:",title:"Najdi in zamenjaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sq.js deleted file mode 100644 index ae034f6d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sq",{find:"Gjej",findOptions:"Gjejë Alternativat",findWhat:"Gjej çka:",matchCase:"Rasti i përputhjes",matchCyclic:"Përputh ciklikun",matchWord:"Përputh fjalën e tërë",notFoundMsg:"Teksti i caktuar nuk mundej të gjendet.",replace:"Zëvendëso",replaceAll:"Zëvendëso të gjitha",replaceSuccessMsg:"%1 rast(e) u zëvendësua(n).",replaceWith:"Zëvendëso me:",title:"Gjej dhe Zëvendëso"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr-latn.js deleted file mode 100644 index 40a40064..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sr-latn",{find:"Pretraga",findOptions:"Find Options",findWhat:"Pronadi:",matchCase:"Razlikuj mala i velika slova",matchCyclic:"Match cyclic",matchWord:"Uporedi cele reci",notFoundMsg:"Traženi tekst nije pronađen.",replace:"Zamena",replaceAll:"Zameni sve",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Zameni sa:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr.js deleted file mode 100644 index 57ca6296..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sr",{find:"Претрага",findOptions:"Find Options",findWhat:"Пронађи:",matchCase:"Разликуј велика и мала слова",matchCyclic:"Match cyclic",matchWord:"Упореди целе речи",notFoundMsg:"Тражени текст није пронађен.",replace:"Замена",replaceAll:"Замени све",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Замени са:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sv.js deleted file mode 100644 index f86c7d28..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sv",{find:"Sök",findOptions:"Sökalternativ",findWhat:"Sök efter:",matchCase:"Skiftläge",matchCyclic:"Matcha cykliska",matchWord:"Inkludera hela ord",notFoundMsg:"Angiven text kunde ej hittas.",replace:"Ersätt",replaceAll:"Ersätt alla",replaceSuccessMsg:"%1 förekomst(er) ersatta.",replaceWith:"Ersätt med:",title:"Sök och ersätt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/th.js deleted file mode 100644 index 877ab909..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","th",{find:"ค้นหา",findOptions:"Find Options",findWhat:"ค้นหาคำว่า:",matchCase:"ตัวโหญ่-เล็ก ต้องตรงกัน",matchCyclic:"Match cyclic",matchWord:"ต้องตรงกันทุกคำ",notFoundMsg:"ไม่พบคำที่ค้นหา.",replace:"ค้นหาและแทนที่",replaceAll:"แทนที่ทั้งหมดที่พบ",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"แทนที่ด้วย:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tr.js deleted file mode 100644 index a0fc4f0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","tr",{find:"Bul",findOptions:"Seçenekleri Bul",findWhat:"Aranan:",matchCase:"Büyük/küçük harf duyarlı",matchCyclic:"Eşleşen döngü",matchWord:"Kelimenin tamamı uysun",notFoundMsg:"Belirtilen yazı bulunamadı.",replace:"Değiştir",replaceAll:"Tümünü Değiştir",replaceSuccessMsg:"%1 bulunanlardan değiştirildi.",replaceWith:"Bununla değiştir:",title:"Bul ve Değiştir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tt.js deleted file mode 100644 index 90a66914..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","tt",{find:"Эзләү",findOptions:"Эзләү көйләүләре",findWhat:"Нәрсә эзләргә:",matchCase:"Баш һәм юл хәрефләрен исәпкә алу",matchCyclic:"Кабатлап эзләргә",matchWord:"Сүзләрне тулысынча гына эзләү",notFoundMsg:"Эзләнгән текст табылмады.",replace:"Алмаштыру",replaceAll:"Барысын да алмаштыру",replaceSuccessMsg:"%1 урында(ларда) алмаштырылган.",replaceWith:"Нәрсәгә алмаштыру:",title:"Эзләп табу һәм алмаштыру"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ug.js deleted file mode 100644 index 9a3e7542..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ug",{find:"ئىزدە",findOptions:"ئىزدەش تاللانمىسى",findWhat:"ئىزدە:",matchCase:"چوڭ كىچىك ھەرپنى پەرقلەندۈر",matchCyclic:"ئايلانما ماسلىشىش",matchWord:"پۈتۈن سۆز ماسلىشىش",notFoundMsg:"بەلگىلەنگەن تېكىستنى تاپالمىدى",replace:"ئالماشتۇر",replaceAll:"ھەممىنى ئالماشتۇر",replaceSuccessMsg:"جەمئى %1 جايدىكى ئالماشتۇرۇش تاماملاندى",replaceWith:"ئالماشتۇر:",title:"ئىزدەپ ئالماشتۇر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/uk.js deleted file mode 100644 index 12bf2eb6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","uk",{find:"Пошук",findOptions:"Параметри Пошуку",findWhat:"Шукати:",matchCase:"Враховувати регістр",matchCyclic:"Циклічна заміна",matchWord:"Збіг цілих слів",notFoundMsg:"Вказаний текст не знайдено.",replace:"Заміна",replaceAll:"Замінити все",replaceSuccessMsg:"%1 співпадінь(ня) замінено.",replaceWith:"Замінити на:",title:"Знайти і замінити"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/vi.js deleted file mode 100644 index 07936d94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","vi",{find:"Tìm kiếm",findOptions:"Tìm tùy chọn",findWhat:"Tìm chuỗi:",matchCase:"Phân biệt chữ hoa/thường",matchCyclic:"Giống một phần",matchWord:"Giống toàn bộ từ",notFoundMsg:"Không tìm thấy chuỗi cần tìm.",replace:"Thay thế",replaceAll:"Thay thế tất cả",replaceSuccessMsg:"%1 vị trí đã được thay thế.",replaceWith:"Thay bằng:",title:"Tìm kiếm và thay thế"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh-cn.js deleted file mode 100644 index 746626af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","zh-cn",{find:"查找",findOptions:"查找选项",findWhat:"查找:",matchCase:"区分大小写",matchCyclic:"循环匹配",matchWord:"全字匹配",notFoundMsg:"指定的文本没有找到。",replace:"替换",replaceAll:"全部替换",replaceSuccessMsg:"共完成 %1 处替换。",replaceWith:"替换:",title:"查找和替换"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh.js deleted file mode 100644 index 4d6656ae..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","zh",{find:"尋找",findOptions:"尋找選項",findWhat:"尋找目標:",matchCase:"大小寫須相符",matchCyclic:"循環搜尋",matchWord:"全字拼寫須相符",notFoundMsg:"找不到指定的文字。",replace:"取代",replaceAll:"全部取代",replaceSuccessMsg:"已取代 %1 個指定項目。",replaceWith:"取代成:",title:"尋找及取代"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/find/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/find/plugin.js deleted file mode 100644 index 103b530d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/find/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("find",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"find,find-rtl,replace",hidpi:!0,init:function(a){var b=a.addCommand("find",new CKEDITOR.dialogCommand("find"));b.canUndo=!1;b.readOnly=1;a.addCommand("replace",new CKEDITOR.dialogCommand("replace")).canUndo=!1;a.ui.addButton&& -(a.ui.addButton("Find",{label:a.lang.find.find,command:"find",toolbar:"find,10"}),a.ui.addButton("Replace",{label:a.lang.find.replace,command:"replace",toolbar:"find,20"}));CKEDITOR.dialog.add("find",this.path+"dialogs/find.js");CKEDITOR.dialog.add("replace",this.path+"dialogs/find.js")}});CKEDITOR.config.find_highlight={element:"span",styles:{"background-color":"#004",color:"#fff"}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/dialogs/flash.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/dialogs/flash.js deleted file mode 100644 index 6592f8e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/dialogs/flash.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function b(a,b,c){var k=n[this.id];if(k)for(var f=this instanceof CKEDITOR.ui.dialog.checkbox,e=0;e<k.length;e++){var d=k[e];switch(d.type){case g:if(!a)continue;if(null!==a.getAttribute(d.name)){a=a.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case o:if(!a)continue;if(d.name in c){a=c[d.name];f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case i:if(!b)continue; -if(b.getAttribute(d.name)){a=b.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"])}}}function c(a,b,c){var k=n[this.id];if(k)for(var f=""===this.getValue(),e=this instanceof CKEDITOR.ui.dialog.checkbox,d=0;d<k.length;d++){var h=k[d];switch(h.type){case g:if(!a||"data"==h.name&&b&&!a.hasAttribute("data"))continue;var l=this.getValue();f||e&&l===h["default"]?a.removeAttribute(h.name):a.setAttribute(h.name,l);break;case o:if(!a)continue; -l=this.getValue();if(f||e&&l===h["default"])h.name in c&&c[h.name].remove();else if(h.name in c)c[h.name].setAttribute("value",l);else{var p=CKEDITOR.dom.element.createFromHtml("<cke:param></cke:param>",a.getDocument());p.setAttributes({name:h.name,value:l});1>a.getChildCount()?p.appendTo(a):p.insertBefore(a.getFirst())}break;case i:if(!b)continue;l=this.getValue();f||e&&l===h["default"]?b.removeAttribute(h.name):b.setAttribute(h.name,l)}}}for(var g=1,o=2,i=4,n={id:[{type:g,name:"id"}],classid:[{type:g, -name:"classid"}],codebase:[{type:g,name:"codebase"}],pluginspage:[{type:i,name:"pluginspage"}],src:[{type:o,name:"movie"},{type:i,name:"src"},{type:g,name:"data"}],name:[{type:i,name:"name"}],align:[{type:g,name:"align"}],"class":[{type:g,name:"class"},{type:i,name:"class"}],width:[{type:g,name:"width"},{type:i,name:"width"}],height:[{type:g,name:"height"},{type:i,name:"height"}],hSpace:[{type:g,name:"hSpace"},{type:i,name:"hSpace"}],vSpace:[{type:g,name:"vSpace"},{type:i,name:"vSpace"}],style:[{type:g, -name:"style"},{type:i,name:"style"}],type:[{type:i,name:"type"}]},m="play loop menu quality scale salign wmode bgcolor base flashvars allowScriptAccess allowFullScreen".split(" "),j=0;j<m.length;j++)n[m[j]]=[{type:i,name:m[j]},{type:o,name:m[j]}];m=["play","loop","menu"];for(j=0;j<m.length;j++)n[m[j]][0]["default"]=n[m[j]][1]["default"]=!0;CKEDITOR.dialog.add("flash",function(a){var g=!a.config.flashEmbedTagOnly,i=a.config.flashAddEmbedTag||a.config.flashEmbedTagOnly,k,f="<div>"+CKEDITOR.tools.htmlEncode(a.lang.common.preview)+ -'<br><div id="cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style="display:none"><div class="loading">&nbsp;</div></div><div id="cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class="FlashPreviewBox"></div></div>';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;k=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();if(e&&e.data("cke-real-element-type")&&"flash"==e.data("cke-real-element-type")){this.fakeImage= -e;var d=a.restoreRealElement(e),h=null,b=null,c={};if("cke:object"==d.getName()){h=d;d=h.getElementsByTag("embed","cke");0<d.count()&&(b=d.getItem(0));for(var d=h.getElementsByTag("param","cke"),g=0,i=d.count();g<i;g++){var f=d.getItem(g),j=f.getAttribute("name"),f=f.getAttribute("value");c[j]=f}}else"cke:embed"==d.getName()&&(b=d);this.objectNode=h;this.embedNode=b;this.setupContent(h,b,c,e)}},onOk:function(){var e=null,d=null,b=null;if(this.fakeImage)e=this.objectNode,d=this.embedNode;else if(g&& -(e=CKEDITOR.dom.element.createFromHtml("<cke:object></cke:object>",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"})),i)d=CKEDITOR.dom.element.createFromHtml("<cke:embed></cke:embed>",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),e&&d.appendTo(e);if(e)for(var b={},c=e.getElementsByTag("param", -"cke"),f=0,j=c.count();f<j;f++)b[c.getItem(f).getAttribute("name")]=c.getItem(f);c={};f={};this.commitContent(e,d,b,c,f);e=a.createFakeElement(e||d,"cke_flash","flash",!0);e.setAttributes(f);e.setStyles(c);this.fakeImage?(e.replace(this.fakeImage),a.getSelection().selectElement(e)):a.insertElement(e)},onHide:function(){this.preview&&this.preview.setHtml("")},contents:[{id:"info",label:a.lang.common.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"], -align:"right",children:[{id:"src",type:"text",label:a.lang.common.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(a.lang.flash.validateSrc),setup:b,commit:c,onLoad:function(){var a=this.getDialog(),b=function(b){k.setAttribute("src",b);a.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(k.getAttribute("src"))+'" type="application/x-shockwave-flash"></embed>')};a.preview=a.getContentElement("info","preview").getElement().getChild(3);this.on("change",function(a){a.data&& -a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:14px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",requiredContent:"embed[width]",style:"width:95px",label:a.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1", -a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",requiredContent:"embed[height]",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",requiredContent:"embed[hspace]",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),setup:b,commit:c},{type:"text",id:"vSpace",requiredContent:"embed[vspace]", -style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace),setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties", -label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",requiredContent:"embed[scale]",label:a.lang.flash.scale,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",requiredContent:"embed[allowscriptaccess]",label:a.lang.flash.access,"default":"",style:"width : 100%;", -items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode",type:"select",requiredContent:"embed[wmode]",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]], -setup:b,commit:c},{id:"quality",type:"select",requiredContent:"embed[quality]",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"],[a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"align",type:"select",requiredContent:"object[align]", -label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle,"middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],setup:b,commit:function(a,b,f,g,i){var j=this.getValue();c.apply(this,arguments); -j&&(i.align=j)}},{type:"html",html:"<div></div>"}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay,"default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0, -setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",requiredContent:"object[id]",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",requiredContent:"embed[bgcolor]",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class",requiredContent:"embed(cke-xyz)",label:a.lang.common.cssClass,setup:b,commit:c}]},{type:"text",id:"style",requiredContent:"embed{cke-xyz}", -validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/flash.png b/platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/flash.png deleted file mode 100644 index df7b1c60bc2918382a345902493059908219a157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iv%05?V~EA++R5G?$>k#L`-_Vw`(3f=`53rVmM1o1LX*^P37u(| zvP4>%RzF(y)-7>?2#a}Zn05r0p4ZY6<wxs8FW%I2l4M^dGRH24XDeTF&oTCt$up`a z-%&CD{%?0i$<59G>z>c)FIJi9qoh=^H;$>1VPQbW|J5~i{h70FZ0il;`YXoQe%Qp+ zR8gt-fb#=JgNWyK>~+j_0bZiEa{T7z=0HVDE@#e~Jv;wldBfKV8@bnS-lzz5KCs}M z>C<-lw0B=$pI>AD)F6NER;HaXe6|ui_YPjn_;T{dk(O&WZgk|{4$%_TIeqB$SG(w# z7@eG)oIAJg-n}b4F>vXX;NyiCoEHixU6SBnxu&kJZhE{>Lxk(bHeb8>%eQX*dh*$` zG`SmZU%je|cDYqnR(8$xiSE*nz}4@67)<myl4l*JCCb&x^s?kvPHyg7$qx%VVtDxZ z>!b9h-<Ob<?!Icf@H(^Hj~csGSGCr?4qAQHfTwxo%9Z;Y^j)6FZ7{O4>%0Hn-DQQh z8*_)-;^wDClDD^Q%$=RI@x;-iu0?ry?<Qu>GF>`FV`-MNvva@h=|h`z7F~StAlAV^ zLge<g!dUU!+YEV{XU?2y-#8x_s1Bu-m6bV}nJ;}CqSm?@NKDx+YT{cRs5d>nG<JH> zN*A@sKhw*~z6n0)IN^RE+#w?+Wr?$<>(U^{%Ui@5cBMwTC{3K+mbmBkg$oXP)00zE zpN2n37pz>mbm`OC6*hJEUw>Wn`q$l-i5^durbfPKODrfT_^@a3V&%Knu04y4i1=YW z(W54M`tQdF4jic6f4~2+#gx;jK9`@od81QXTl?2$^2r5Ly;K{%zJ2?4@#oK<Km7T# zM`$9yOUm}`+rJCPUf-zGowU)zY_{rDubt7+(e4MTR)#qF`T1Qi>3#R^-FH5I{{8RX zzpp?0{PSM9?xPv``NvCRfuXuAv#7Lm>b?8-_rG}k`nS<kFWa)%@B0~+ip*Lj*nRXK z`@Z?}=Iy(6`*!w;w9SS~MIILXC@Cq~vSrt<TdXx@RaL*bU+?PRnB=1t==E@yUf<&j zmoE#m*sYiM+Vk#F|1a~p@|v0)U~)6@b$0n79$VM@KBqzTJun}smbgZgq$HN4S|t~y z0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKyGkkTm4xr(~v8;?`jEllcfxgCxj? t;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RS@W)hPe~ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png b/platforms/android/assets/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png deleted file mode 100644 index 7ad0e3889242436ed911aee6dd1c7a524bac3981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2532 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/images/placeholder.png b/platforms/android/assets/www/lib/ckeditor/plugins/flash/images/placeholder.png deleted file mode 100644 index 0bc6caa7a6abca57d3f1e1376fbd5067d5cd66d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmV+b0ssDqP)<h;3K|Lk000e1NJLTq0027x000{Z0{{R3^;ZYC0000pP)t-s|1&fH z0093YBL5K)|3pOph=~8Hs{h^H|95x)|NsB)?*F^H|CyQpRaO6KY5&a3|7K?7O*3i$ z004+dL_t(|UhS1h3d1lA05y`=to{FMYthhL3R!xL=OW8^BpD2rg}W?5y$g?VySw5@ zHQR&&rG*^8rux|zhTrb&VRu!<+Q~qwO1|Vy#7J~Ec>4p_Nnh8Sn%0^H2yKmXs_)2F ztJy_}S7x3Wy+9bua($h3aU$x8vL^9#zi)q&hjjO!f8h;)*e}{WeFK#M0000<MNUMn GLSTaQZFZ3W diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/af.js deleted file mode 100644 index 9ee64f1f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","af",{access:"Skrip toegang",accessAlways:"Altyd",accessNever:"Nooit",accessSameDomain:"Selfde domeinnaam",alignAbsBottom:"Absoluut-onder",alignAbsMiddle:"Absoluut-middel",alignBaseline:"Basislyn",alignTextTop:"Teks bo",bgcolor:"Agtergrondkleur",chkFull:"Laat volledige skerm toe",chkLoop:"Herhaal",chkMenu:"Flash spyskaart aan",chkPlay:"Speel outomaties",flashvars:"Veranderlikes vir Flash",hSpace:"HSpasie",properties:"Flash eienskappe",propertiesTab:"Eienskappe",quality:"Kwaliteit", -qualityAutoHigh:"Outomaties hoog",qualityAutoLow:"Outomaties laag",qualityBest:"Beste",qualityHigh:"Hoog",qualityLow:"Laag",qualityMedium:"Gemiddeld",scale:"Skaal",scaleAll:"Wys alles",scaleFit:"Presiese pas",scaleNoBorder:"Geen rand",title:"Flash eienskappe",vSpace:"VSpasie",validateHSpace:"HSpasie moet 'n heelgetal wees.",validateSrc:"Voeg die URL in",validateVSpace:"VSpasie moet 'n heelgetal wees.",windowMode:"Venster modus",windowModeOpaque:"Ondeursigtig",windowModeTransparent:"Deursigtig",windowModeWindow:"Venster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ar.js deleted file mode 100644 index 5b89e5b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ar",{access:"دخول النص البرمجي",accessAlways:"دائماً",accessNever:"مطلقاً",accessSameDomain:"نفس النطاق",alignAbsBottom:"أسفل النص",alignAbsMiddle:"وسط السطر",alignBaseline:"على السطر",alignTextTop:"أعلى النص",bgcolor:"لون الخلفية",chkFull:"ملء الشاشة",chkLoop:"تكرار",chkMenu:"تمكين قائمة فيلم الفلاش",chkPlay:"تشغيل تلقائي",flashvars:"متغيرات الفلاش",hSpace:"تباعد أفقي",properties:"خصائص الفلاش",propertiesTab:"الخصائص",quality:"جودة",qualityAutoHigh:"عالية تلقائياً", -qualityAutoLow:"منخفضة تلقائياً",qualityBest:"أفضل",qualityHigh:"عالية",qualityLow:"منخفضة",qualityMedium:"متوسطة",scale:"الحجم",scaleAll:"إظهار الكل",scaleFit:"ضبط تام",scaleNoBorder:"بلا حدود",title:"خصائص فيلم الفلاش",vSpace:"تباعد عمودي",validateHSpace:"HSpace يجب أن يكون عدداً.",validateSrc:"فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",validateVSpace:"VSpace يجب أن يكون عدداً.",windowMode:"وضع النافذة",windowModeOpaque:"غير شفاف",windowModeTransparent:"شفاف",windowModeWindow:"نافذة"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bg.js deleted file mode 100644 index a60e86c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bg",{access:"Достъп до скрипт",accessAlways:"Винаги",accessNever:"Никога",accessSameDomain:"Същият домейн",alignAbsBottom:"Най-долу",alignAbsMiddle:"Точно по средата",alignBaseline:"Базова линия",alignTextTop:"Върху текста",bgcolor:"Цвят на фона",chkFull:"Включи на цял екран",chkLoop:"Цикъл",chkMenu:"Разрешено Flash меню",chkPlay:"Авто. пускане",flashvars:"Променливи за Флаш",hSpace:"Хоризонтален отстъп",properties:"Настройки за флаш",propertiesTab:"Настройки",quality:"Качество", -qualityAutoHigh:"Авто. високо",qualityAutoLow:"Авто. ниско",qualityBest:"Отлично",qualityHigh:"Високо",qualityLow:"Ниско",qualityMedium:"Средно",scale:"Оразмеряване",scaleAll:"Показва всичко",scaleFit:"Според мястото",scaleNoBorder:"Без рамка",title:"Настройки за флаш",vSpace:"Вертикален отстъп",validateHSpace:"HSpace трябва да е число.",validateSrc:"Уеб адреса не трябва да е празен.",validateVSpace:"VSpace трябва да е число.",windowMode:"Режим на прозореца",windowModeOpaque:"Плътност",windowModeTransparent:"Прозрачност", -windowModeWindow:"Прозорец"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bn.js deleted file mode 100644 index 2eed56b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bn",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs নীচে",alignAbsMiddle:"Abs উপর",alignBaseline:"মূল রেখা",alignTextTop:"টেক্সট উপর",bgcolor:"বেকগ্রাউন্ড রং",chkFull:"Allow Fullscreen",chkLoop:"লূপ",chkMenu:"ফ্ল্যাশ মেনু এনাবল কর",chkPlay:"অটো প্লে",flashvars:"Variables for Flash",hSpace:"হরাইজন্টাল স্পেস",properties:"ফ্লাশ প্রোপার্টি",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"স্কেল",scaleAll:"সব দেখাও",scaleFit:"নিখুঁত ফিট",scaleNoBorder:"কোনো বর্ডার নেই",title:"ফ্ল্যাশ প্রোপার্টি",vSpace:"ভার্টিকেল স্পেস",validateHSpace:"HSpace must be a number.",validateSrc:"অনুগ্রহ করে URL লিংক টাইপ করুন",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bs.js deleted file mode 100644 index 4d5f4b4b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bs",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs dole",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Molimo ukucajte URL link",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ca.js deleted file mode 100644 index c1e16027..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ca",{access:"Accés a scripts",accessAlways:"Sempre",accessNever:"Mai",accessSameDomain:"El mateix domini",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Superior",bgcolor:"Color de Fons",chkFull:"Permetre la pantalla completa",chkLoop:"Bucle",chkMenu:"Habilita menú Flash",chkPlay:"Reprodució automàtica",flashvars:"Variables de Flash",hSpace:"Espaiat horitzontal",properties:"Propietats del Flash",propertiesTab:"Propietats", -quality:"Qualitat",qualityAutoHigh:"Alta automàtica",qualityAutoLow:"Baixa automàtica",qualityBest:"La millor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Mitjana",scale:"Escala",scaleAll:"Mostra-ho tot",scaleFit:"Mida exacta",scaleNoBorder:"Sense vores",title:"Propietats del Flash",vSpace:"Espaiat vertical",validateHSpace:"L'espaiat horitzontal ha de ser un número.",validateSrc:"La URL no pot estar buida.",validateVSpace:"L'espaiat vertical ha de ser un número.",windowMode:"Mode de la finestra", -windowModeOpaque:"Opaca",windowModeTransparent:"Transparent",windowModeWindow:"Finestra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cs.js deleted file mode 100644 index 51087ed4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","cs",{access:"Přístup ke skriptu",accessAlways:"Vždy",accessNever:"Nikdy",accessSameDomain:"Ve stejné doméně",alignAbsBottom:"Zcela dolů",alignAbsMiddle:"Doprostřed",alignBaseline:"Na účaří",alignTextTop:"Na horní okraj textu",bgcolor:"Barva pozadí",chkFull:"Povolit celoobrazovkový režim",chkLoop:"Opakování",chkMenu:"Nabídka Flash",chkPlay:"Automatické spuštění",flashvars:"Proměnné pro Flash",hSpace:"Horizontální mezera",properties:"Vlastnosti Flashe",propertiesTab:"Vlastnosti", -quality:"Kvalita",qualityAutoHigh:"Vysoká - auto",qualityAutoLow:"Nízká - auto",qualityBest:"Nejlepší",qualityHigh:"Vysoká",qualityLow:"Nejnižší",qualityMedium:"Střední",scale:"Zobrazit",scaleAll:"Zobrazit vše",scaleFit:"Přizpůsobit",scaleNoBorder:"Bez okraje",title:"Vlastnosti Flashe",vSpace:"Vertikální mezera",validateHSpace:"Zadaná horizontální mezera musí být číslo.",validateSrc:"Zadejte prosím URL odkazu",validateVSpace:"Zadaná vertikální mezera musí být číslo.",windowMode:"Režim okna",windowModeOpaque:"Neprůhledné", -windowModeTransparent:"Průhledné",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cy.js deleted file mode 100644 index b6ae1ef3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","cy",{access:"Mynediad Sgript",accessAlways:"Pob amser",accessNever:"Byth",accessSameDomain:"R'un parth",alignAbsBottom:"Gwaelod Abs",alignAbsMiddle:"Canol Abs",alignBaseline:"Baslinell",alignTextTop:"Testun Top",bgcolor:"Lliw cefndir",chkFull:"Caniatàu Sgrin Llawn",chkLoop:"Lwpio",chkMenu:"Galluogi Dewislen Flash",chkPlay:"AwtoChwarae",flashvars:"Newidynnau ar gyfer Flash",hSpace:"BwlchLl",properties:"Priodweddau Flash",propertiesTab:"Priodweddau",quality:"Ansawdd", -qualityAutoHigh:"Uchel Awto",qualityAutoLow:"Isel Awto",qualityBest:"Gorau",qualityHigh:"Uchel",qualityLow:"Isel",qualityMedium:"Canolig",scale:"Graddfa",scaleAll:"Dangos pob",scaleFit:"Ffit Union",scaleNoBorder:"Dim Ymyl",title:"Priodweddau Flash",vSpace:"BwlchF",validateHSpace:"Rhaid i'r BwlchLl fod yn rhif.",validateSrc:"Ni all yr URL fod yn wag.",validateVSpace:"Rhaid i'r BwlchF fod yn rhif.",windowMode:"Modd ffenestr",windowModeOpaque:"Afloyw",windowModeTransparent:"Tryloyw",windowModeWindow:"Ffenestr"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/da.js deleted file mode 100644 index a55294d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","da",{access:"Scriptadgang",accessAlways:"Altid",accessNever:"Aldrig",accessSameDomain:"Samme domæne",alignAbsBottom:"Absolut nederst",alignAbsMiddle:"Absolut centreret",alignBaseline:"Grundlinje",alignTextTop:"Toppen af teksten",bgcolor:"Baggrundsfarve",chkFull:"Tillad fuldskærm",chkLoop:"Gentagelse",chkMenu:"Vis Flash-menu",chkPlay:"Automatisk afspilning",flashvars:"Variabler for Flash",hSpace:"Vandret margen",properties:"Egenskaber for Flash",propertiesTab:"Egenskaber", -quality:"Kvalitet",qualityAutoHigh:"Auto høj",qualityAutoLow:"Auto lav",qualityBest:"Bedste",qualityHigh:"Høj",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skalér",scaleAll:"Vis alt",scaleFit:"Tilpas størrelse",scaleNoBorder:"Ingen ramme",title:"Egenskaber for Flash",vSpace:"Lodret margen",validateHSpace:"Vandret margen skal være et tal.",validateSrc:"Indtast hyperlink URL!",validateVSpace:"Lodret margen skal være et tal.",windowMode:"Vinduestilstand",windowModeOpaque:"Gennemsigtig (opaque)",windowModeTransparent:"Transparent", -windowModeWindow:"Vindue"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/de.js deleted file mode 100644 index 44d7237a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","de",{access:"Skript Zugang",accessAlways:"Immer",accessNever:"Nie",accessSameDomain:"Gleiche Domain",alignAbsBottom:"Abs Unten",alignAbsMiddle:"Abs Mitte",alignBaseline:"Baseline",alignTextTop:"Text Oben",bgcolor:"Hintergrundfarbe",chkFull:"Vollbildmodus erlauben",chkLoop:"Endlosschleife",chkMenu:"Flash-Menü aktivieren",chkPlay:"Automatisch Abspielen",flashvars:"Variablen für Flash",hSpace:"Horizontal-Abstand",properties:"Flash-Eigenschaften",propertiesTab:"Eigenschaften", -quality:"Qualität",qualityAutoHigh:"Auto Hoch",qualityAutoLow:"Auto Niedrig",qualityBest:"Beste",qualityHigh:"Hoch",qualityLow:"Niedrig",qualityMedium:"Medium",scale:"Skalierung",scaleAll:"Alles anzeigen",scaleFit:"Passgenau",scaleNoBorder:"Ohne Rand",title:"Flash-Eigenschaften",vSpace:"Vertikal-Abstand",validateHSpace:"HSpace muss eine Zahl sein.",validateSrc:"Bitte geben Sie die Link-URL an",validateVSpace:"VSpace muss eine Zahl sein.",windowMode:"Fenster Modus",windowModeOpaque:"Deckend",windowModeTransparent:"Transparent", -windowModeWindow:"Fenster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/el.js deleted file mode 100644 index 4904d1b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","el",{access:"Πρόσβαση Script",accessAlways:"Πάντα",accessNever:"Ποτέ",accessSameDomain:"Ίδιο όνομα τομέα",alignAbsBottom:"Απόλυτα Κάτω",alignAbsMiddle:"Απόλυτα στη Μέση",alignBaseline:"Γραμμή Βάσης",alignTextTop:"Κορυφή Κειμένου",bgcolor:"Χρώμα Υποβάθρου",chkFull:"Να Επιτρέπεται η Προβολή σε Πλήρη Οθόνη",chkLoop:"Επανάληψη",chkMenu:"Ενεργοποίηση Flash Menu",chkPlay:"Αυτόματη Εκτέλεση",flashvars:"Μεταβλητές για Flash",hSpace:"Οριζόντιο Διάστημα",properties:"Ιδιότητες Flash", -propertiesTab:"Ιδιότητες",quality:"Ποιότητα",qualityAutoHigh:"Αυτόματη Υψηλή",qualityAutoLow:"Αυτόματη Χαμηλή",qualityBest:"Καλύτερη",qualityHigh:"Υψηλή",qualityLow:"Χαμηλή",qualityMedium:"Μεσαία",scale:"Μεγέθυνση",scaleAll:"Εμφάνιση όλων",scaleFit:"Ακριβές Μέγεθος",scaleNoBorder:"Χωρίς Περίγραμμα",title:"Ιδιότητες Flash",vSpace:"Κάθετο Διάστημα",validateHSpace:"Το HSpace πρέπει να είναι αριθμός.",validateSrc:"Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)",validateVSpace:"Το VSpace πρέπει να είναι αριθμός.", -windowMode:"Τρόπος λειτουργίας παραθύρου",windowModeOpaque:"Συμπαγές",windowModeTransparent:"Διάφανο",windowModeWindow:"Παράθυρο"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-au.js deleted file mode 100644 index e066c740..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-au",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-ca.js deleted file mode 100644 index 9c6fdc4a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-ca",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-gb.js deleted file mode 100644 index ccbc28af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-gb",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en.js deleted file mode 100644 index 13380310..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background color",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eo.js deleted file mode 100644 index 30218bc1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","eo",{access:"Atingi skriptojn",accessAlways:"Ĉiam",accessNever:"Neniam",accessSameDomain:"Sama domajno",alignAbsBottom:"Absoluta Malsupro",alignAbsMiddle:"Absoluta Centro",alignBaseline:"TekstoMalsupro",alignTextTop:"TekstoSupro",bgcolor:"Fona Koloro",chkFull:"Permesi tutekranon",chkLoop:"Iteracio",chkMenu:"Ebligi flaŝmenuon",chkPlay:"Aŭtomata legado",flashvars:"Variabloj por Flaŝo",hSpace:"Horizontala Spaco",properties:"Flaŝatributoj",propertiesTab:"Atributoj",quality:"Kvalito", -qualityAutoHigh:"Aŭtomate alta",qualityAutoLow:"Aŭtomate malalta",qualityBest:"Plej bona",qualityHigh:"Alta",qualityLow:"Malalta",qualityMedium:"Meza",scale:"Skalo",scaleAll:"Montri ĉion",scaleFit:"Origina grando",scaleNoBorder:"Neniu bordero",title:"Flaŝatributoj",vSpace:"Vertikala Spaco",validateHSpace:"Horizontala Spaco devas esti nombro.",validateSrc:"Bonvolu entajpi la retadreson (URL)",validateVSpace:"Vertikala Spaco devas esti nombro.",windowMode:"Fenestra reĝimo",windowModeOpaque:"Opaka", -windowModeTransparent:"Travidebla",windowModeWindow:"Fenestro"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/es.js deleted file mode 100644 index 296239e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","es",{access:"Acceso de scripts",accessAlways:"Siempre",accessNever:"Nunca",accessSameDomain:"Mismo dominio",alignAbsBottom:"Abs inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Línea de base",alignTextTop:"Tope del texto",bgcolor:"Color de Fondo",chkFull:"Permitir pantalla completa",chkLoop:"Repetir",chkMenu:"Activar Menú Flash",chkPlay:"Autoejecución",flashvars:"Opciones",hSpace:"Esp.Horiz",properties:"Propiedades de Flash",propertiesTab:"Propiedades",quality:"Calidad", -qualityAutoHigh:"Auto Alta",qualityAutoLow:"Auto Baja",qualityBest:"La mejor",qualityHigh:"Alta",qualityLow:"Baja",qualityMedium:"Media",scale:"Escala",scaleAll:"Mostrar todo",scaleFit:"Ajustado",scaleNoBorder:"Sin Borde",title:"Propiedades de Flash",vSpace:"Esp.Vert",validateHSpace:"Esp.Horiz debe ser un número.",validateSrc:"Por favor escriba el vínculo URL",validateVSpace:"Esp.Vert debe ser un número.",windowMode:"WindowMode",windowModeOpaque:"Opaco",windowModeTransparent:"Transparente",windowModeWindow:"Ventana"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/et.js deleted file mode 100644 index 9ac2b3cd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","et",{access:"Skriptide ligipääs",accessAlways:"Kõigile",accessNever:"Mitte ühelegi",accessSameDomain:"Samalt domeenilt",alignAbsBottom:"Abs alla",alignAbsMiddle:"Abs keskele",alignBaseline:"Baasjoonele",alignTextTop:"Tekstist üles",bgcolor:"Tausta värv",chkFull:"Täisekraan lubatud",chkLoop:"Korduv",chkMenu:"Flashi menüü lubatud",chkPlay:"Automaatne start ",flashvars:"Flashi muutujad",hSpace:"H. vaheruum",properties:"Flashi omadused",propertiesTab:"Omadused",quality:"Kvaliteet", -qualityAutoHigh:"Automaatne kõrge",qualityAutoLow:"Automaatne madal",qualityBest:"Parim",qualityHigh:"Kõrge",qualityLow:"Madal",qualityMedium:"Keskmine",scale:"Mastaap",scaleAll:"Näidatakse kõike",scaleFit:"Täpne sobivus",scaleNoBorder:"Äärist ei ole",title:"Flashi omadused",vSpace:"V. vaheruum",validateHSpace:"H. vaheruum peab olema number.",validateSrc:"Palun kirjuta lingi URL",validateVSpace:"V. vaheruum peab olema number.",windowMode:"Akna režiim",windowModeOpaque:"Läbipaistmatu",windowModeTransparent:"Läbipaistev", -windowModeWindow:"Aken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eu.js deleted file mode 100644 index 5cf12025..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","eu",{access:"Scriptak baimendu",accessAlways:"Beti",accessNever:"Inoiz ere ez",accessSameDomain:"Domeinu berdinekoak",alignAbsBottom:"Abs Behean",alignAbsMiddle:"Abs Erdian",alignBaseline:"Oinan",alignTextTop:"Testua Goian",bgcolor:"Atzeko kolorea",chkFull:"Onartu Pantaila osoa",chkLoop:"Begizta",chkMenu:"Flasharen Menua Gaitu",chkPlay:"Automatikoki Erreproduzitu",flashvars:"Flash Aldagaiak",hSpace:"HSpace",properties:"Flasharen Ezaugarriak",propertiesTab:"Ezaugarriak", -quality:"Kalitatea",qualityAutoHigh:"Auto Altua",qualityAutoLow:"Auto Baxua",qualityBest:"Hoberena",qualityHigh:"Altua",qualityLow:"Baxua",qualityMedium:"Ertaina",scale:"Eskalatu",scaleAll:"Dena erakutsi",scaleFit:"Doitu",scaleNoBorder:"Ertzik gabe",title:"Flasharen Ezaugarriak",vSpace:"VSpace",validateHSpace:"HSpace zenbaki bat izan behar da.",validateSrc:"Mesedez URL esteka idatzi",validateVSpace:"VSpace zenbaki bat izan behar da.",windowMode:"Leihoaren modua",windowModeOpaque:"Opakoa",windowModeTransparent:"Gardena", -windowModeWindow:"Leihoa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fa.js deleted file mode 100644 index ac4a6092..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fa",{access:"دسترسی به اسکریپت",accessAlways:"همیشه",accessNever:"هرگز",accessSameDomain:"همان دامنه",alignAbsBottom:"پائین مطلق",alignAbsMiddle:"وسط مطلق",alignBaseline:"خط پایه",alignTextTop:"متن بالا",bgcolor:"رنگ پس​زمینه",chkFull:"اجازه تمام صفحه",chkLoop:"اجرای پیاپی",chkMenu:"در دسترس بودن منوی فلش",chkPlay:"آغاز خودکار",flashvars:"مقادیر برای فلش",hSpace:"فاصلهٴ افقی",properties:"ویژگی​های فلش",propertiesTab:"ویژگی​ها",quality:"کیفیت",qualityAutoHigh:"بالا - خودکار", -qualityAutoLow:"پایین - خودکار",qualityBest:"بهترین",qualityHigh:"بالا",qualityLow:"پایین",qualityMedium:"متوسط",scale:"مقیاس",scaleAll:"نمایش همه",scaleFit:"جایگیری کامل",scaleNoBorder:"بدون کران",title:"ویژگی​های فلش",vSpace:"فاصلهٴ عمودی",validateHSpace:"مقدار فاصله گذاری افقی باید یک عدد باشد.",validateSrc:"لطفا URL پیوند را بنویسید",validateVSpace:"مقدار فاصله گذاری عمودی باید یک عدد باشد.",windowMode:"حالت پنجره",windowModeOpaque:"مات",windowModeTransparent:"شفاف",windowModeWindow:"پنجره"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fi.js deleted file mode 100644 index c40fe43d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fi",{access:"Skriptien pääsy",accessAlways:"Aina",accessNever:"Ei koskaan",accessSameDomain:"Sama verkkotunnus",alignAbsBottom:"Aivan alas",alignAbsMiddle:"Aivan keskelle",alignBaseline:"Alas (teksti)",alignTextTop:"Ylös (teksti)",bgcolor:"Taustaväri",chkFull:"Salli kokoruututila",chkLoop:"Toisto",chkMenu:"Näytä Flash-valikko",chkPlay:"Automaattinen käynnistys",flashvars:"Muuttujat Flash:lle",hSpace:"Vaakatila",properties:"Flash-ominaisuudet",propertiesTab:"Ominaisuudet", -quality:"Laatu",qualityAutoHigh:"Automaattinen korkea",qualityAutoLow:"Automaattinen matala",qualityBest:"Paras",qualityHigh:"Korkea",qualityLow:"Matala",qualityMedium:"Keskitaso",scale:"Levitä",scaleAll:"Näytä kaikki",scaleFit:"Tarkka koko",scaleNoBorder:"Ei rajaa",title:"Flash ominaisuudet",vSpace:"Pystytila",validateHSpace:"Vaakatilan täytyy olla numero.",validateSrc:"Linkille on kirjoitettava URL",validateVSpace:"Pystytilan täytyy olla numero.",windowMode:"Ikkuna tila",windowModeOpaque:"Läpinäkyvyys", -windowModeTransparent:"Läpinäkyvä",windowModeWindow:"Ikkuna"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fo.js deleted file mode 100644 index d02410a1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fo",{access:"Script atgongd",accessAlways:"Altíð",accessNever:"Ongantíð",accessSameDomain:"Sama navnaøki",alignAbsBottom:"Abs botnur",alignAbsMiddle:"Abs miðja",alignBaseline:"Basislinja",alignTextTop:"Tekst toppur",bgcolor:"Bakgrundslitur",chkFull:"Loyv fullan skerm",chkLoop:"Endurspæl",chkMenu:"Ger Flash skrá virkna",chkPlay:"Avspælingin byrjar sjálv",flashvars:"Variablar fyri Flash",hSpace:"Høgri breddi",properties:"Flash eginleikar",propertiesTab:"Eginleikar", -quality:"Góðska",qualityAutoHigh:"Auto høg",qualityAutoLow:"Auto Lág",qualityBest:"Besta",qualityHigh:"Høg",qualityLow:"Lág",qualityMedium:"Meðal",scale:"Skalering",scaleAll:"Vís alt",scaleFit:"Neyv skalering",scaleNoBorder:"Eingin bordi",title:"Flash eginleikar",vSpace:"Vinstri breddi",validateHSpace:"HSpace má vera eitt tal.",validateSrc:"Vinarliga skriva tilknýti (URL)",validateVSpace:"VSpace má vera eitt tal.",windowMode:"Slag av rúti",windowModeOpaque:"Ikki transparent",windowModeTransparent:"Transparent", -windowModeWindow:"Rútur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr-ca.js deleted file mode 100644 index 8218f119..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fr-ca",{access:"Accès au script",accessAlways:"Toujours",accessNever:"Jamais",accessSameDomain:"Même domaine",alignAbsBottom:"Bas absolu",alignAbsMiddle:"Milieu absolu",alignBaseline:"Bas du texte",alignTextTop:"Haut du texte",bgcolor:"Couleur de fond",chkFull:"Permettre le plein-écran",chkLoop:"Boucle",chkMenu:"Activer le menu Flash",chkPlay:"Lecture automatique",flashvars:"Variables pour Flash",hSpace:"Espacement horizontal",properties:"Propriétés de l'animation Flash", -propertiesTab:"Propriétés",quality:"Qualité",qualityAutoHigh:"Haute auto",qualityAutoLow:"Basse auto",qualityBest:"Meilleur",qualityHigh:"Haute",qualityLow:"Basse",qualityMedium:"Moyenne",scale:"Échelle",scaleAll:"Afficher tout",scaleFit:"Ajuster aux dimensions",scaleNoBorder:"Sans bordure",title:"Propriétés de l'animation Flash",vSpace:"Espacement vertical",validateHSpace:"L'espacement horizontal doit être un entier.",validateSrc:"Veuillez saisir l'URL",validateVSpace:"L'espacement vertical doit être un entier.", -windowMode:"Mode de fenêtre",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Fenêtre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr.js deleted file mode 100644 index fdc543c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fr",{access:"Accès aux scripts",accessAlways:"Toujours",accessNever:"Jamais",accessSameDomain:"Même domaine",alignAbsBottom:"Bas absolu",alignAbsMiddle:"Milieu absolu",alignBaseline:"Bas du texte",alignTextTop:"Haut du texte",bgcolor:"Couleur d'arrière-plan",chkFull:"Permettre le plein écran",chkLoop:"Boucle",chkMenu:"Activer le menu Flash",chkPlay:"Jouer automatiquement",flashvars:"Variables du Flash",hSpace:"Espacement horizontal",properties:"Propriétés du Flash", -propertiesTab:"Propriétés",quality:"Qualité",qualityAutoHigh:"Haute Auto",qualityAutoLow:"Basse Auto",qualityBest:"Meilleure",qualityHigh:"Haute",qualityLow:"Basse",qualityMedium:"Moyenne",scale:"Echelle",scaleAll:"Afficher tout",scaleFit:"Taille d'origine",scaleNoBorder:"Pas de bordure",title:"Propriétés du Flash",vSpace:"Espacement vertical",validateHSpace:"L'espacement horizontal doit être un nombre.",validateSrc:"L'adresse ne doit pas être vide.",validateVSpace:"L'espacement vertical doit être un nombre.", -windowMode:"Mode fenêtre",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Fenêtre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gl.js deleted file mode 100644 index 38e85081..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","gl",{access:"Acceso de scripts",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Mesmo dominio",alignAbsBottom:"Abs Inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Liña de base",alignTextTop:"Tope do texto",bgcolor:"Cor do fondo",chkFull:"Permitir pantalla completa",chkLoop:"Repetir",chkMenu:"Activar o menú do «Flash»",chkPlay:"Reprodución auomática",flashvars:"Opcións do «Flash»",hSpace:"Esp. Horiz.",properties:"Propiedades do «Flash»",propertiesTab:"Propiedades", -quality:"Calidade",qualityAutoHigh:"Alta, automática",qualityAutoLow:"Baixa, automática",qualityBest:"A mellor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Media",scale:"Escalar",scaleAll:"Amosar todo",scaleFit:"Encaixar axustando",scaleNoBorder:"Sen bordo",title:"Propiedades do «Flash»",vSpace:"Esp.Vert.",validateHSpace:"O espazado horizontal debe ser un número.",validateSrc:"O URL non pode estar baleiro.",validateVSpace:"O espazado vertical debe ser un número.",windowMode:"Modo da xanela", -windowModeOpaque:"Opaca",windowModeTransparent:"Transparente",windowModeWindow:"Xanela"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gu.js deleted file mode 100644 index 601bb61c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","gu",{access:"સ્ક્રીપ્ટ એક્સેસ",accessAlways:"હમેશાં",accessNever:"નહી",accessSameDomain:"એજ ડોમેન",alignAbsBottom:"Abs નીચે",alignAbsMiddle:"Abs ઉપર",alignBaseline:"આધાર લીટી",alignTextTop:"ટેક્સ્ટ ઉપર",bgcolor:"બૅકગ્રાઉન્ડ રંગ,",chkFull:"ફૂલ સ્ક્રીન કરવું",chkLoop:"લૂપ",chkMenu:"ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો",chkPlay:"ઑટો/સ્વયં પ્લે",flashvars:"ફલેશ ના વિકલ્પો",hSpace:"સમસ્તરીય જગ્યા",properties:"ફ્લૅશના ગુણ",propertiesTab:"ગુણ",quality:"ગુણધર્મ",qualityAutoHigh:"ઓટો ઊંચું", -qualityAutoLow:"ઓટો નીચું",qualityBest:"શ્રેષ્ઠ",qualityHigh:"ઊંચું",qualityLow:"નીચું",qualityMedium:"મધ્યમ",scale:"સ્કેલ",scaleAll:"સ્કેલ ઓલ/બધુ બતાવો",scaleFit:"સ્કેલ એકદમ ફીટ",scaleNoBorder:"સ્કેલ બોર્ડર વગર",title:"ફ્લૅશ ગુણ",vSpace:"લંબરૂપ જગ્યા",validateHSpace:"HSpace આંકડો હોવો જોઈએ.",validateSrc:"લિંક URL ટાઇપ કરો",validateVSpace:"VSpace આંકડો હોવો જોઈએ.",windowMode:"વિન્ડો મોડ",windowModeOpaque:"અપારદર્શક",windowModeTransparent:"પારદર્શક",windowModeWindow:"વિન્ડો"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/he.js deleted file mode 100644 index 6870ea2a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","he",{access:"גישת סקריפט",accessAlways:"תמיד",accessNever:"אף פעם",accessSameDomain:"דומיין זהה",alignAbsBottom:"לתחתית האבסולוטית",alignAbsMiddle:"מרכוז אבסולוטי",alignBaseline:"לקו התחתית",alignTextTop:"לראש הטקסט",bgcolor:"צבע רקע",chkFull:"אפשר חלון מלא",chkLoop:"לולאה",chkMenu:"אפשר תפריט פלאש",chkPlay:"ניגון אוטומטי",flashvars:"משתנים לפלאש",hSpace:"מרווח אופקי",properties:"מאפייני פלאש",propertiesTab:"מאפיינים",quality:"איכות",qualityAutoHigh:"גבוהה אוטומטית", -qualityAutoLow:"נמוכה אוטומטית",qualityBest:"מעולה",qualityHigh:"גבוהה",qualityLow:"נמוכה",qualityMedium:"ממוצעת",scale:"גודל",scaleAll:"הצג הכל",scaleFit:"התאמה מושלמת",scaleNoBorder:"ללא גבולות",title:"מאפיני פלאש",vSpace:"מרווח אנכי",validateHSpace:"המרווח האופקי חייב להיות מספר.",validateSrc:"יש להקליד את כתובת סרטון הפלאש (URL)",validateVSpace:"המרווח האנכי חייב להיות מספר.",windowMode:"מצב חלון",windowModeOpaque:"אטום",windowModeTransparent:"שקוף",windowModeWindow:"חלון"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hi.js deleted file mode 100644 index 2f3b6e99..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hi",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs नीचे",alignAbsMiddle:"Abs ऊपर",alignBaseline:"मूल रेखा",alignTextTop:"टेक्स्ट ऊपर",bgcolor:"बैक्ग्राउन्ड रंग",chkFull:"Allow Fullscreen",chkLoop:"लूप",chkMenu:"फ़्लैश मॅन्यू का प्रयोग करें",chkPlay:"ऑटो प्ले",flashvars:"Variables for Flash",hSpace:"हॉरिज़ॉन्टल स्पेस",properties:"फ़्लैश प्रॉपर्टीज़",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"स्केल",scaleAll:"सभी दिखायें",scaleFit:"बिल्कुल फ़िट",scaleNoBorder:"कोई बॉर्डर नहीं",title:"फ़्लैश प्रॉपर्टीज़",vSpace:"वर्टिकल स्पेस",validateHSpace:"HSpace must be a number.",validateSrc:"लिंक URL टाइप करें",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hr.js deleted file mode 100644 index ae7c82f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hr",{access:"Script Access",accessAlways:"Uvijek",accessNever:"Nikad",accessSameDomain:"Ista domena",alignAbsBottom:"Abs dolje",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Omogući Fullscreen",chkLoop:"Ponavljaj",chkMenu:"Omogući Flash izbornik",chkPlay:"Auto Play",flashvars:"Varijable za Flash",hSpace:"HSpace",properties:"Flash svojstva",propertiesTab:"Svojstva",quality:"Kvaliteta",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Omjer",scaleAll:"Prikaži sve",scaleFit:"Točna veličina",scaleNoBorder:"Bez okvira",title:"Flash svojstva",vSpace:"VSpace",validateHSpace:"HSpace mora biti broj.",validateSrc:"Molimo upišite URL link",validateVSpace:"VSpace mora biti broj.",windowMode:"Vrsta prozora",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hu.js deleted file mode 100644 index 92620909..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hu",{access:"Szkript hozzáférés",accessAlways:"Mindig",accessNever:"Soha",accessSameDomain:"Azonos domainről",alignAbsBottom:"Legaljára",alignAbsMiddle:"Közepére",alignBaseline:"Alapvonalhoz",alignTextTop:"Szöveg tetejére",bgcolor:"Háttérszín",chkFull:"Teljes képernyő engedélyezése",chkLoop:"Folyamatosan",chkMenu:"Flash menü engedélyezése",chkPlay:"Automata lejátszás",flashvars:"Flash változók",hSpace:"Vízsz. táv",properties:"Flash tulajdonságai",propertiesTab:"Tulajdonságok", -quality:"Minőség",qualityAutoHigh:"Automata jó",qualityAutoLow:"Automata gyenge",qualityBest:"Legjobb",qualityHigh:"Jó",qualityLow:"Gyenge",qualityMedium:"Közepes",scale:"Méretezés",scaleAll:"Mindent mutat",scaleFit:"Teljes kitöltés",scaleNoBorder:"Keret nélkül",title:"Flash tulajdonságai",vSpace:"Függ. táv",validateHSpace:"A vízszintes távolsűág mezőbe csak számokat írhat.",validateSrc:"Adja meg a hivatkozás webcímét",validateVSpace:"A függőleges távolsűág mezőbe csak számokat írhat.",windowMode:"Ablak mód", -windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/id.js deleted file mode 100644 index 9272c08d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","id",{access:"Script Access",accessAlways:"Selalu",accessNever:"Tidak Pernah",accessSameDomain:"Domain yang sama",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Dasar",alignTextTop:"Text Top",bgcolor:"Warna Latar Belakang",chkFull:"Izinkan Layar Penuh",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Mainkan Otomatis",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properti",quality:"Kualitas", -qualityAutoHigh:"Tinggi Otomatis",qualityAutoLow:"Rendah Otomatis",qualityBest:"Terbaik",qualityHigh:"Tinggi",qualityLow:"Rendah",qualityMedium:"Sedang",scale:"Scale",scaleAll:"Perlihatkan semua",scaleFit:"Exact Fit",scaleNoBorder:"Tanpa Batas",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace harus sebuah angka",validateSrc:"URL tidak boleh kosong",validateVSpace:"VSpace harus sebuah angka",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparan",windowModeWindow:"Jendela"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/is.js deleted file mode 100644 index 0b0d71b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","is",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs neðst",alignAbsMiddle:"Abs miðjuð",alignBaseline:"Grunnlína",alignTextTop:"Efri brún texta",bgcolor:"Bakgrunnslitur",chkFull:"Allow Fullscreen",chkLoop:"Endurtekning",chkMenu:"Sýna Flash-valmynd",chkPlay:"Sjálfvirk spilun",flashvars:"Variables for Flash",hSpace:"Vinstri bil",properties:"Eigindi Flash",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Skali",scaleAll:"Sýna allt",scaleFit:"Fella skala að stærð",scaleNoBorder:"Án ramma",title:"Eigindi Flash",vSpace:"Hægri bil",validateHSpace:"HSpace must be a number.",validateSrc:"Sláðu inn veffang stiklunnar!",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/it.js deleted file mode 100644 index 7c5e09f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","it",{access:"Accesso Script",accessAlways:"Sempre",accessNever:"Mai",accessSameDomain:"Solo stesso dominio",alignAbsBottom:"In basso assoluto",alignAbsMiddle:"Centrato assoluto",alignBaseline:"Linea base",alignTextTop:"In alto al testo",bgcolor:"Colore sfondo",chkFull:"Permetti la modalità tutto schermo",chkLoop:"Riavvio automatico",chkMenu:"Abilita Menu di Flash",chkPlay:"Avvio Automatico",flashvars:"Variabili per Flash",hSpace:"HSpace",properties:"Proprietà Oggetto Flash", -propertiesTab:"Proprietà",quality:"Qualità",qualityAutoHigh:"Alta Automatica",qualityAutoLow:"Bassa Automatica",qualityBest:"Massima",qualityHigh:"Alta",qualityLow:"Bassa",qualityMedium:"Intermedia",scale:"Ridimensiona",scaleAll:"Mostra Tutto",scaleFit:"Dimensione Esatta",scaleNoBorder:"Senza Bordo",title:"Proprietà Oggetto Flash",vSpace:"VSpace",validateHSpace:"L'HSpace dev'essere un numero.",validateSrc:"Devi inserire l'URL del collegamento",validateVSpace:"Il VSpace dev'essere un numero.",windowMode:"Modalità finestra", -windowModeOpaque:"Opaca",windowModeTransparent:"Trasparente",windowModeWindow:"Finestra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ja.js deleted file mode 100644 index 8a2238b4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ja",{access:"スプリクトアクセス(AllowScriptAccess)",accessAlways:"すべての場合に通信可能(Always)",accessNever:"すべての場合に通信不可能(Never)",accessSameDomain:"同一ドメインのみに通信可能(Same domain)",alignAbsBottom:"下部(絶対的)",alignAbsMiddle:"中央(絶対的)",alignBaseline:"ベースライン",alignTextTop:"テキスト上部",bgcolor:"背景色",chkFull:"フルスクリーン許可",chkLoop:"ループ再生",chkMenu:"Flashメニュー可能",chkPlay:"再生",flashvars:"フラッシュに渡す変数(FlashVars)",hSpace:"横間隔",properties:"Flash プロパティ",propertiesTab:"プロパティ",quality:"画質",qualityAutoHigh:"自動/高", -qualityAutoLow:"自動/低",qualityBest:"品質優先",qualityHigh:"高",qualityLow:"低",qualityMedium:"中",scale:"拡大縮小設定",scaleAll:"すべて表示",scaleFit:"上下左右にフィット",scaleNoBorder:"外が見えない様に拡大",title:"Flash プロパティ",vSpace:"縦間隔",validateHSpace:"横間隔は数値で入力してください。",validateSrc:"リンクURLを入力してください。",validateVSpace:"縦間隔は数値で入力してください。",windowMode:"ウィンドウモード",windowModeOpaque:"背景を不透明設定",windowModeTransparent:"背景を透過設定",windowModeWindow:"標準"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ka.js deleted file mode 100644 index fb482eca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ka",{access:"სკრიპტის წვდომა",accessAlways:"ყოველთვის",accessNever:"არასდროს",accessSameDomain:"იგივე დომენი",alignAbsBottom:"ჩარჩოს ქვემოთა ნაწილის სწორება ტექსტისთვის",alignAbsMiddle:"ჩარჩოს შუა ნაწილის სწორება ტექსტისთვის",alignBaseline:"საბაზისო ხაზის სწორება",alignTextTop:"ტექსტი ზემოდან",bgcolor:"ფონის ფერი",chkFull:"მთელი ეკრანის დაშვება",chkLoop:"ჩაციკლვა",chkMenu:"Flash-ის მენიუს დაშვება",chkPlay:"ავტო გაშვება",flashvars:"ცვლადები Flash-ისთვის",hSpace:"ჰორიზ. სივრცე", -properties:"Flash-ის პარამეტრები",propertiesTab:"პარამეტრები",quality:"ხარისხი",qualityAutoHigh:"მაღალი (ავტომატური)",qualityAutoLow:"ძალიან დაბალი",qualityBest:"საუკეთესო",qualityHigh:"მაღალი",qualityLow:"დაბალი",qualityMedium:"საშუალო",scale:"მასშტაბირება",scaleAll:"ყველაფრის ჩვენება",scaleFit:"ზუსტი ჩასმა",scaleNoBorder:"ჩარჩოს გარეშე",title:"Flash-ის პარამეტრები",vSpace:"ვერტ. სივრცე",validateHSpace:"ჰორიზონტალური სივრცე არ უნდა იყოს ცარიელი.",validateSrc:"URL არ უნდა იყოს ცარიელი.",validateVSpace:"ვერტიკალური სივრცე არ უნდა იყოს ცარიელი.", -windowMode:"ფანჯრის რეჟიმი",windowModeOpaque:"გაუმჭვირვალე",windowModeTransparent:"გამჭვირვალე",windowModeWindow:"ფანჯარა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/km.js deleted file mode 100644 index a4babe9e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","km",{access:"Script Access",accessAlways:"ជានិច្ច",accessNever:"កុំ",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"បន្ទាត់ជាមូលដ្ឋាន",alignTextTop:"លើអត្ថបទ",bgcolor:"ពណ៌ផ្ទៃខាងក្រោយ",chkFull:"អនុញ្ញាត​ឲ្យ​ពេញ​អេក្រង់",chkLoop:"ចំនួនដង",chkMenu:"បង្ហាញ មឺនុយរបស់ Flash",chkPlay:"លេងដោយស្វ័យប្រវត្ត",flashvars:"អថេរ Flash",hSpace:"គំលាតទទឹង",properties:"ការកំណត់ Flash",propertiesTab:"លក្ខណៈ​សម្បត្តិ",quality:"គុណភាព", -qualityAutoHigh:"ខ្ពស់​ស្វ័យ​ប្រវត្តិ",qualityAutoLow:"ទាប​ស្វ័យ​ប្រវត្តិ",qualityBest:"ល្អ​បំផុត",qualityHigh:"ខ្ពស់",qualityLow:"ទាប",qualityMedium:"មធ្យម",scale:"ទំហំ",scaleAll:"បង្ហាញទាំងអស់",scaleFit:"ត្រូវល្មម",scaleNoBorder:"មិនបង្ហាញស៊ុម",title:"ការកំណត់ Flash",vSpace:"គំលាតបណ្តោយ",validateHSpace:"HSpace must be a number.",validateSrc:"សូមសរសេរ អាស័យដ្ឋាន URL",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"ភាព​ថ្លា",windowModeWindow:"វីនដូ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ko.js deleted file mode 100644 index 514c74a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ko",{access:"스크립트 허용",accessAlways:"항상 허용",accessNever:"허용 안함",accessSameDomain:"Same domain",alignAbsBottom:"줄아래(Abs Bottom)",alignAbsMiddle:"줄중간(Abs Middle)",alignBaseline:"기준선",alignTextTop:"글자상단",bgcolor:"배경 색상",chkFull:"전체화면 ",chkLoop:"반복",chkMenu:"플래쉬메뉴 가능",chkPlay:"자동재생",flashvars:"Variables for Flash",hSpace:"수평여백",properties:"플래쉬 속성",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High", -qualityLow:"Low",qualityMedium:"Medium",scale:"영역",scaleAll:"모두보기",scaleFit:"영역자동조절",scaleNoBorder:"경계선없음",title:"플래쉬 등록정보",vSpace:"수직여백",validateHSpace:"HSpace must be a number.",validateSrc:"링크 URL을 입력하십시요.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ku.js deleted file mode 100644 index e9618955..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ku",{access:"دەستپێگەیشتنی نووسراو",accessAlways:"هەمیشه",accessNever:"هەرگیز",accessSameDomain:"هەمان دۆمەین",alignAbsBottom:"له ژێرەوه",alignAbsMiddle:"لەناوەند",alignBaseline:"هێڵەبنەڕەت",alignTextTop:"دەق لەسەرەوه",bgcolor:"ڕەنگی پاشبنەما",chkFull:"ڕێپێدان بە پڕی شاشه",chkLoop:"گرێ",chkMenu:"چالاککردنی لیستەی فلاش",chkPlay:"پێکردنی یان لێدانی خۆکار",flashvars:"گۆڕاوەکان بۆ فلاش",hSpace:"بۆشایی ئاسۆیی",properties:"خاسیەتی فلاش",propertiesTab:"خاسیەت",quality:"جۆرایەتی", -qualityAutoHigh:"بەرزی خۆکار",qualityAutoLow:"نزمی خۆکار",qualityBest:"باشترین",qualityHigh:"بەرزی",qualityLow:"نزم",qualityMedium:"مامناوەند",scale:"پێوانه",scaleAll:"نیشاندانی هەموو",scaleFit:"بەوردی بگونجێت",scaleNoBorder:"بێ پەراوێز",title:"خاسیەتی فلاش",vSpace:"بۆشایی ئەستونی",validateHSpace:"بۆشایی ئاسۆیی دەبێت ژمارە بێت.",validateSrc:"ناونیشانی بەستەر نابێت خاڵی بێت",validateVSpace:"بۆشایی ئەستونی دەبێت ژماره بێت.",windowMode:"شێوازی پەنجەره",windowModeOpaque:"ناڕوون",windowModeTransparent:"ڕۆشن", -windowModeWindow:"پەنجەره"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lt.js deleted file mode 100644 index 8e013f24..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","lt",{access:"Skripto priėjimas",accessAlways:"Visada",accessNever:"Niekada",accessSameDomain:"Tas pats domenas",alignAbsBottom:"Absoliučią apačią",alignAbsMiddle:"Absoliutų vidurį",alignBaseline:"Apatinę liniją",alignTextTop:"Teksto viršūnę",bgcolor:"Fono spalva",chkFull:"Leisti per visą ekraną",chkLoop:"Ciklas",chkMenu:"Leisti Flash meniu",chkPlay:"Automatinis paleidimas",flashvars:"Flash kintamieji",hSpace:"Hor.Erdvė",properties:"Flash savybės",propertiesTab:"Nustatymai", -quality:"Kokybė",qualityAutoHigh:"Automatiškai Gera",qualityAutoLow:"Automatiškai Žema",qualityBest:"Geriausia",qualityHigh:"Gera",qualityLow:"Žema",qualityMedium:"Vidutinė",scale:"Mastelis",scaleAll:"Rodyti visą",scaleFit:"Tikslus atitikimas",scaleNoBorder:"Be rėmelio",title:"Flash savybės",vSpace:"Vert.Erdvė",validateHSpace:"HSpace turi būti skaičius.",validateSrc:"Prašome įvesti nuorodos URL",validateVSpace:"VSpace turi būti skaičius.",windowMode:"Lango režimas",windowModeOpaque:"Nepermatomas", -windowModeTransparent:"Permatomas",windowModeWindow:"Langas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lv.js deleted file mode 100644 index 30edb939..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","lv",{access:"Skripta pieeja",accessAlways:"Vienmēr",accessNever:"Nekad",accessSameDomain:"Tas pats domēns",alignAbsBottom:"Absolūti apakšā",alignAbsMiddle:"Absolūti vertikāli centrēts",alignBaseline:"Pamatrindā",alignTextTop:"Teksta augšā",bgcolor:"Fona krāsa",chkFull:"Pilnekrāns",chkLoop:"Nepārtraukti",chkMenu:"Atļaut Flash izvēlni",chkPlay:"Automātiska atskaņošana",flashvars:"Flash mainīgie",hSpace:"Horizontālā telpa",properties:"Flash īpašības",propertiesTab:"Uzstādījumi", -quality:"Kvalitāte",qualityAutoHigh:"Automātiski Augsta",qualityAutoLow:"Automātiski Zema",qualityBest:"Labākā",qualityHigh:"Augsta",qualityLow:"Zema",qualityMedium:"Vidēja",scale:"Mainīt izmēru",scaleAll:"Rādīt visu",scaleFit:"Precīzs izmērs",scaleNoBorder:"Bez rāmja",title:"Flash īpašības",vSpace:"Vertikālā telpa",validateHSpace:"Hspace jābūt skaitlim",validateSrc:"Lūdzu norādi hipersaiti",validateVSpace:"Vspace jābūt skaitlim",windowMode:"Loga režīms",windowModeOpaque:"Necaurspīdīgs",windowModeTransparent:"Caurspīdīgs", -windowModeWindow:"Logs"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mk.js deleted file mode 100644 index ae22f2a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","mk",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background color",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mn.js deleted file mode 100644 index 6759d77d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","mn",{access:"Script Access",accessAlways:"Онцлогууд",accessNever:"Хэзээ ч үгүй",accessSameDomain:"Байнга",alignAbsBottom:"Abs доод талд",alignAbsMiddle:"Abs Дунд талд",alignBaseline:"Baseline",alignTextTop:"Текст дээр",bgcolor:"Дэвсгэр өнгө",chkFull:"Allow Fullscreen",chkLoop:"Давтах",chkMenu:"Флаш цэс идвэхжүүлэх",chkPlay:"Автоматаар тоглох",flashvars:"Variables for Flash",hSpace:"Хөндлөн зай",properties:"Флаш шинж чанар",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Өргөгтгөх",scaleAll:"Бүгдийг харуулах",scaleFit:"Яг тааруулах",scaleNoBorder:"Хүрээгүй",title:"Флаш шинж чанар",vSpace:"Босоо зай",validateHSpace:"HSpace must be a number.",validateSrc:"Линк URL-ээ төрөлжүүлнэ үү",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ms.js deleted file mode 100644 index 9012a684..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ms",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Bawah Mutlak",alignAbsMiddle:"Pertengahan Mutlak",alignBaseline:"Garis Dasar",alignTextTop:"Atas Text",bgcolor:"Warna Latarbelakang",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"Ruang Melintang",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"Ruang Menegak",validateHSpace:"HSpace must be a number.",validateSrc:"Sila taip sambungan URL",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nb.js deleted file mode 100644 index c03f61f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","nb",{access:"Scripttilgang",accessAlways:"Alltid",accessNever:"Aldri",accessSameDomain:"Samme domene",alignAbsBottom:"Abs bunn",alignAbsMiddle:"Abs midten",alignBaseline:"Bunnlinje",alignTextTop:"Tekst topp",bgcolor:"Bakgrunnsfarge",chkFull:"Tillat fullskjerm",chkLoop:"Loop",chkMenu:"Slå på Flash-meny",chkPlay:"Autospill",flashvars:"Variabler for flash",hSpace:"HMarg",properties:"Egenskaper for Flash-objekt",propertiesTab:"Egenskaper",quality:"Kvalitet",qualityAutoHigh:"Auto høy", -qualityAutoLow:"Auto lav",qualityBest:"Best",qualityHigh:"Høy",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skaler",scaleAll:"Vis alt",scaleFit:"Skaler til å passe",scaleNoBorder:"Ingen ramme",title:"Flash-egenskaper",vSpace:"VMarg",validateHSpace:"HMarg må være et tall.",validateSrc:"Vennligst skriv inn lenkens url.",validateVSpace:"VMarg må være et tall.",windowMode:"Vindumodus",windowModeOpaque:"Opaque",windowModeTransparent:"Gjennomsiktig",windowModeWindow:"Vindu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nl.js deleted file mode 100644 index 193591ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","nl",{access:"Script toegang",accessAlways:"Altijd",accessNever:"Nooit",accessSameDomain:"Zelfde domeinnaam",alignAbsBottom:"Absoluut-onder",alignAbsMiddle:"Absoluut-midden",alignBaseline:"Basislijn",alignTextTop:"Boven tekst",bgcolor:"Achtergrondkleur",chkFull:"Schermvullend toestaan",chkLoop:"Herhalen",chkMenu:"Flashmenu's inschakelen",chkPlay:"Automatisch afspelen",flashvars:"Variabelen voor Flash",hSpace:"HSpace",properties:"Eigenschappen Flash",propertiesTab:"Eigenschappen", -quality:"Kwaliteit",qualityAutoHigh:"Automatisch hoog",qualityAutoLow:"Automatisch laag",qualityBest:"Beste",qualityHigh:"Hoog",qualityLow:"Laag",qualityMedium:"Gemiddeld",scale:"Schaal",scaleAll:"Alles tonen",scaleFit:"Precies passend",scaleNoBorder:"Geen rand",title:"Eigenschappen Flash",vSpace:"VSpace",validateHSpace:"De HSpace moet een getal zijn.",validateSrc:"De URL mag niet leeg zijn.",validateVSpace:"De VSpace moet een getal zijn.",windowMode:"Venster modus",windowModeOpaque:"Ondoorzichtig", -windowModeTransparent:"Doorzichtig",windowModeWindow:"Venster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/no.js deleted file mode 100644 index 4f660ce4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","no",{access:"Scripttilgang",accessAlways:"Alltid",accessNever:"Aldri",accessSameDomain:"Samme domene",alignAbsBottom:"Abs bunn",alignAbsMiddle:"Abs midten",alignBaseline:"Bunnlinje",alignTextTop:"Tekst topp",bgcolor:"Bakgrunnsfarge",chkFull:"Tillat fullskjerm",chkLoop:"Loop",chkMenu:"Slå på Flash-meny",chkPlay:"Autospill",flashvars:"Variabler for flash",hSpace:"HMarg",properties:"Egenskaper for Flash-objekt",propertiesTab:"Egenskaper",quality:"Kvalitet",qualityAutoHigh:"Auto høy", -qualityAutoLow:"Auto lav",qualityBest:"Best",qualityHigh:"Høy",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skaler",scaleAll:"Vis alt",scaleFit:"Skaler til å passe",scaleNoBorder:"Ingen ramme",title:"Flash-egenskaper",vSpace:"VMarg",validateHSpace:"HMarg må være et tall.",validateSrc:"Vennligst skriv inn lenkens url.",validateVSpace:"VMarg må være et tall.",windowMode:"Vindumodus",windowModeOpaque:"Opaque",windowModeTransparent:"Gjennomsiktig",windowModeWindow:"Vindu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pl.js deleted file mode 100644 index aa3da87e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pl",{access:"Dostęp skryptów",accessAlways:"Zawsze",accessNever:"Nigdy",accessSameDomain:"Ta sama domena",alignAbsBottom:"Do dołu",alignAbsMiddle:"Do środka w pionie",alignBaseline:"Do linii bazowej",alignTextTop:"Do góry tekstu",bgcolor:"Kolor tła",chkFull:"Zezwól na pełny ekran",chkLoop:"Pętla",chkMenu:"Włącz menu",chkPlay:"Autoodtwarzanie",flashvars:"Zmienne obiektu Flash",hSpace:"Odstęp poziomy",properties:"Właściwości obiektu Flash",propertiesTab:"Właściwości", -quality:"Jakość",qualityAutoHigh:"Auto wysoka",qualityAutoLow:"Auto niska",qualityBest:"Najlepsza",qualityHigh:"Wysoka",qualityLow:"Niska",qualityMedium:"Średnia",scale:"Skaluj",scaleAll:"Pokaż wszystko",scaleFit:"Dokładne dopasowanie",scaleNoBorder:"Bez obramowania",title:"Właściwości obiektu Flash",vSpace:"Odstęp pionowy",validateHSpace:"Odstęp poziomy musi być liczbą.",validateSrc:"Podaj adres URL",validateVSpace:"Odstęp pionowy musi być liczbą.",windowMode:"Tryb okna",windowModeOpaque:"Nieprzezroczyste", -windowModeTransparent:"Przezroczyste",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt-br.js deleted file mode 100644 index 4be3e143..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pt-br",{access:"Acesso ao script",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Acessar Mesmo Domínio",alignAbsBottom:"Inferior Absoluto",alignAbsMiddle:"Centralizado Absoluto",alignBaseline:"Baseline",alignTextTop:"Superior Absoluto",bgcolor:"Cor do Plano de Fundo",chkFull:"Permitir tela cheia",chkLoop:"Tocar Infinitamente",chkMenu:"Habilita Menu Flash",chkPlay:"Tocar Automaticamente",flashvars:"Variáveis do Flash",hSpace:"HSpace",properties:"Propriedades do Flash", -propertiesTab:"Propriedades",quality:"Qualidade",qualityAutoHigh:"Qualidade Alta Automática",qualityAutoLow:"Qualidade Baixa Automática",qualityBest:"Qualidade Melhor",qualityHigh:"Qualidade Alta",qualityLow:"Qualidade Baixa",qualityMedium:"Qualidade Média",scale:"Escala",scaleAll:"Mostrar tudo",scaleFit:"Escala Exata",scaleNoBorder:"Sem Borda",title:"Propriedades do Flash",vSpace:"VSpace",validateHSpace:"O HSpace tem que ser um número",validateSrc:"Por favor, digite o endereço do link",validateVSpace:"O VSpace tem que ser um número.", -windowMode:"Modo da janela",windowModeOpaque:"Opaca",windowModeTransparent:"Transparente",windowModeWindow:"Janela"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt.js deleted file mode 100644 index 374ffae8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pt",{access:"Acesso ao Script",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Mesmo dominio",alignAbsBottom:"Abs inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Linha de base",alignTextTop:"Topo do texto",bgcolor:"Cor de Fundo",chkFull:"Permitir Ecrã inteiro",chkLoop:"Loop",chkMenu:"Permitir Menu do Flash",chkPlay:"Reproduzir automaticamente",flashvars:"Variaveis para o Flash",hSpace:"Esp.Horiz",properties:"Propriedades do Flash",propertiesTab:"Propriedades", -quality:"Qualidade",qualityAutoHigh:"Alta Automaticamente",qualityAutoLow:"Baixa Automaticamente",qualityBest:"Melhor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Média",scale:"Escala",scaleAll:"Mostrar tudo",scaleFit:"Tamanho Exacto",scaleNoBorder:"Sem Limites",title:"Propriedades do Flash",vSpace:"Esp.Vert",validateHSpace:"HSpace tem de ser um numero.",validateSrc:"Por favor introduza a hiperligação URL",validateVSpace:"VSpace tem de ser um numero.",windowMode:"Modo de janela",windowModeOpaque:"Opaco", -windowModeTransparent:"Transparente",windowModeWindow:"Janela"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ro.js deleted file mode 100644 index 8be6b18f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ro",{access:"Acces script",accessAlways:"Întotdeauna",accessNever:"Niciodată",accessSameDomain:"Același domeniu",alignAbsBottom:"Jos absolut (Abs Bottom)",alignAbsMiddle:"Mijloc absolut (Abs Middle)",alignBaseline:"Linia de jos (Baseline)",alignTextTop:"Text sus",bgcolor:"Coloarea fundalului",chkFull:"Permite pe tot ecranul",chkLoop:"Repetă (Loop)",chkMenu:"Activează meniul flash",chkPlay:"Rulează automat",flashvars:"Variabile pentru flash",hSpace:"HSpace",properties:"Proprietăţile flashului", -propertiesTab:"Proprietăți",quality:"Calitate",qualityAutoHigh:"Auto înaltă",qualityAutoLow:"Auto Joasă",qualityBest:"Cea mai bună",qualityHigh:"Înaltă",qualityLow:"Joasă",qualityMedium:"Medie",scale:"Scală",scaleAll:"Arată tot",scaleFit:"Potriveşte",scaleNoBorder:"Fără bordură (No border)",title:"Proprietăţile flashului",vSpace:"VSpace",validateHSpace:"Hspace trebuie să fie un număr.",validateSrc:"Vă rugăm să scrieţi URL-ul",validateVSpace:"VSpace trebuie să fie un număr",windowMode:"Mod fereastră", -windowModeOpaque:"Opacă",windowModeTransparent:"Transparentă",windowModeWindow:"Fereastră"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ru.js deleted file mode 100644 index d4f39fb5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ru",{access:"Доступ к скриптам",accessAlways:"Всегда",accessNever:"Никогда",accessSameDomain:"В том же домене",alignAbsBottom:"По низу текста",alignAbsMiddle:"По середине текста",alignBaseline:"По базовой линии",alignTextTop:"По верху текста",bgcolor:"Цвет фона",chkFull:"Разрешить полноэкранный режим",chkLoop:"Повторять",chkMenu:"Включить меню Flash",chkPlay:"Автоматическое воспроизведение",flashvars:"Переменные для Flash",hSpace:"Гориз. отступ",properties:"Свойства Flash", -propertiesTab:"Свойства",quality:"Качество",qualityAutoHigh:"Запуск на высоком",qualityAutoLow:"Запуск на низком",qualityBest:"Лучшее",qualityHigh:"Высокое",qualityLow:"Низкое",qualityMedium:"Среднее",scale:"Масштабировать",scaleAll:"Пропорционально",scaleFit:"Заполнять",scaleNoBorder:"Заходить за границы",title:"Свойства Flash",vSpace:"Вертик. отступ",validateHSpace:"Горизонтальный отступ задается числом.",validateSrc:"Вы должны ввести ссылку",validateVSpace:"Вертикальный отступ задается числом.", -windowMode:"Взаимодействие с окном",windowModeOpaque:"Непрозрачный",windowModeTransparent:"Прозрачный",windowModeWindow:"Обычный"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/si.js deleted file mode 100644 index 6184682d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","si",{access:"පිටපත් ප්‍රවේශය",accessAlways:"හැමවිටම",accessNever:"කිසිදා නොවේ",accessSameDomain:"එකම වසමේ",alignAbsBottom:"පතුල",alignAbsMiddle:"Abs ",alignBaseline:"පාද රේඛාව",alignTextTop:"වගන්තිය ඉහල",bgcolor:"පසුබිම් වර්ණය",chkFull:"පුර්ණ තිරය සදහා අවසර",chkLoop:"පුඩුව",chkMenu:"සක්‍රිය බබලන මෙනුව",chkPlay:"ස්‌වයංක්‍රිය ක්‍රියාත්මක වීම",flashvars:"වෙනස්වන දත්ත",hSpace:"HSpace",properties:"බබලන ගුණ",propertiesTab:"ගුණ",quality:"තත්වය",qualityAutoHigh:"ස්‌වයංක්‍රිය ", -qualityAutoLow:" ස්‌වයංක්‍රිය ",qualityBest:"වඩාත් ගැලපෙන",qualityHigh:"ඉහළ",qualityLow:"පහළ",qualityMedium:"මධ්‍ය",scale:"පරිමාණ",scaleAll:"සියල්ල ",scaleFit:"හරියටම ගැලපෙන",scaleNoBorder:"මාඉම් නොමැති",title:"බබලන ",vSpace:"VSpace",validateHSpace:"HSpace සංක්‍යාවක් විය යුතුය.",validateSrc:"URL හිස් නොවිය ",validateVSpace:"VSpace සංක්‍යාවක් විය යුතුය",windowMode:"ජනෙල ක්‍රමය",windowModeOpaque:"විනිවිද පෙනෙන",windowModeTransparent:"විනිවිද පෙනෙන",windowModeWindow:"ජනෙල"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sk.js deleted file mode 100644 index e959ca02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sk",{access:"Prístup skriptu",accessAlways:"Vždy",accessNever:"Nikdy",accessSameDomain:"Rovnaká doména",alignAbsBottom:"Úplne dole",alignAbsMiddle:"Do stredu",alignBaseline:"Na základnú čiaru",alignTextTop:"Na horný okraj textu",bgcolor:"Farba pozadia",chkFull:"Povoliť zobrazenie na celú obrazovku (fullscreen)",chkLoop:"Opakovanie",chkMenu:"Povoliť Flash Menu",chkPlay:"Automatické prehrávanie",flashvars:"Premenné pre Flash",hSpace:"H-medzera",properties:"Vlastnosti Flashu", -propertiesTab:"Vlastnosti",quality:"Kvalita",qualityAutoHigh:"Automaticky vysoká",qualityAutoLow:"Automaticky nízka",qualityBest:"Najlepšia",qualityHigh:"Vysoká",qualityLow:"Nízka",qualityMedium:"Stredná",scale:"Mierka",scaleAll:"Zobraziť všetko",scaleFit:"Roztiahnuť, aby sedelo presne",scaleNoBorder:"Bez okrajov",title:"Vlastnosti Flashu",vSpace:"V-medzera",validateHSpace:"H-medzera musí byť číslo.",validateSrc:"URL nesmie byť prázdne.",validateVSpace:"V-medzera musí byť číslo",windowMode:"Mód okna", -windowModeOpaque:"Nepriehľadný",windowModeTransparent:"Priehľadný",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sl.js deleted file mode 100644 index 3de6413e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sl",{access:"Dostop skript",accessAlways:"Vedno",accessNever:"Nikoli",accessSameDomain:"Samo ista domena",alignAbsBottom:"Popolnoma na dno",alignAbsMiddle:"Popolnoma v sredino",alignBaseline:"Na osnovno črto",alignTextTop:"Besedilo na vrh",bgcolor:"Barva ozadja",chkFull:"Dovoli celozaslonski način",chkLoop:"Ponavljanje",chkMenu:"Omogoči Flash Meni",chkPlay:"Samodejno predvajaj",flashvars:"Spremenljivke za Flash",hSpace:"Vodoravni razmik",properties:"Lastnosti Flash", -propertiesTab:"Lastnosti",quality:"Kakovost",qualityAutoHigh:"Samodejno visoka",qualityAutoLow:"Samodejno nizka",qualityBest:"Najvišja",qualityHigh:"Visoka",qualityLow:"Nizka",qualityMedium:"Srednja",scale:"Povečava",scaleAll:"Pokaži vse",scaleFit:"Natančno prileganje",scaleNoBorder:"Brez obrobe",title:"Lastnosti Flash",vSpace:"Navpični razmik",validateHSpace:"Vodoravni razmik mora biti število.",validateSrc:"Vnesite URL povezave",validateVSpace:"Navpični razmik mora biti število.",windowMode:"Vrsta okna", -windowModeOpaque:"Motno",windowModeTransparent:"Prosojno",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sq.js deleted file mode 100644 index bded5272..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sq",{access:"Qasja në Skriptë",accessAlways:"Gjithnjë",accessNever:"Asnjëherë",accessSameDomain:"Fusha e Njëjtë",alignAbsBottom:"Abs në Fund",alignAbsMiddle:"Abs në Mes",alignBaseline:"Baza",alignTextTop:"Koka e Tekstit",bgcolor:"Ngjyra e Prapavijës",chkFull:"Lejo Ekran të Plotë",chkLoop:"Përsëritje",chkMenu:"Lejo Menynë për Flash",chkPlay:"Auto Play",flashvars:"Variablat për Flash",hSpace:"Hapësira Horizontale",properties:"Karakteristikat për Flash",propertiesTab:"Karakteristikat", -quality:"Kualiteti",qualityAutoHigh:"Automatikisht i Lartë",qualityAutoLow:"Automatikisht i Ulët",qualityBest:"Më i Miri",qualityHigh:"I Lartë",qualityLow:"Më i Ulti",qualityMedium:"I Mesëm",scale:"Shkalla",scaleAll:"Shfaq të Gjitha",scaleFit:"Përputhje të Plotë",scaleNoBorder:"Pa Kornizë",title:"Rekuizitat për Flash",vSpace:"Hapësira Vertikale",validateHSpace:"Hapësira Horizontale duhet të është numër.",validateSrc:"URL nuk duhet mbetur zbrazur.",validateVSpace:"Hapësira Vertikale duhet të është numër.", -windowMode:"Window mode",windowModeOpaque:"Errët",windowModeTransparent:"Tejdukshëm",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr-latn.js deleted file mode 100644 index 641140c3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sr-latn",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs dole",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Allow Fullscreen",chkLoop:"Ponavljaj",chkMenu:"Uključi fleš meni",chkPlay:"Automatski start",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Osobine fleša",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Skaliraj",scaleAll:"Prikaži sve",scaleFit:"Popuni površinu",scaleNoBorder:"Bez ivice",title:"Osobine fleša",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Unesite URL linka",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr.js deleted file mode 100644 index c62614dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sr",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs доле",alignAbsMiddle:"Abs средина",alignBaseline:"Базно",alignTextTop:"Врх текста",bgcolor:"Боја позадине",chkFull:"Allow Fullscreen",chkLoop:"Понављај",chkMenu:"Укључи флеш мени",chkPlay:"Аутоматски старт",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Особине Флеша",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Скалирај",scaleAll:"Прикажи све",scaleFit:"Попуни површину",scaleNoBorder:"Без ивице",title:"Особине флеша",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Унесите УРЛ линка",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sv.js deleted file mode 100644 index 7c6edcc4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sv",{access:"Script-tillgång",accessAlways:"Alltid",accessNever:"Aldrig",accessSameDomain:"Samma domän",alignAbsBottom:"Absolut nederkant",alignAbsMiddle:"Absolut centrering",alignBaseline:"Baslinje",alignTextTop:"Text överkant",bgcolor:"Bakgrundsfärg",chkFull:"Tillåt helskärm",chkLoop:"Upprepa/Loopa",chkMenu:"Aktivera Flashmeny",chkPlay:"Automatisk uppspelning",flashvars:"Variabler för Flash",hSpace:"Horis. marginal",properties:"Flashegenskaper",propertiesTab:"Egenskaper", -quality:"Kvalitet",qualityAutoHigh:"Auto Hög",qualityAutoLow:"Auto Låg",qualityBest:"Bäst",qualityHigh:"Hög",qualityLow:"Låg",qualityMedium:"Medium",scale:"Skala",scaleAll:"Visa allt",scaleFit:"Exakt passning",scaleNoBorder:"Ingen ram",title:"Flashegenskaper",vSpace:"Vert. marginal",validateHSpace:"HSpace måste vara ett nummer.",validateSrc:"Var god ange länkens URL",validateVSpace:"VSpace måste vara ett nummer.",windowMode:"Fönsterläge",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent", -windowModeWindow:"Fönster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/th.js deleted file mode 100644 index 49932348..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","th",{access:"การเข้าถึงสคริปต์",accessAlways:"ตลอดไป",accessNever:"ไม่เลย",accessSameDomain:"โดเมนเดียวกัน",alignAbsBottom:"ชิดด้านล่างสุด",alignAbsMiddle:"กึ่งกลาง",alignBaseline:"ชิดบรรทัด",alignTextTop:"ใต้ตัวอักษร",bgcolor:"สีพื้นหลัง",chkFull:"อนุญาตให้แสดงเต็มหน้าจอได้",chkLoop:"เล่นวนรอบ Loop",chkMenu:"ให้ใช้งานเมนูของ Flash",chkPlay:"เล่นอัตโนมัติ Auto Play",flashvars:"ตัวแปรสำหรับ Flas",hSpace:"ระยะแนวนอน",properties:"คุณสมบัติของไฟล์ Flash",propertiesTab:"คุณสมบัติ", -quality:"คุณภาพ",qualityAutoHigh:"ปรับคุณภาพสูงอัตโนมัติ",qualityAutoLow:"ปรับคุณภาพต่ำอัตโนมัติ",qualityBest:"ดีที่สุด",qualityHigh:"สูง",qualityLow:"ต่ำ",qualityMedium:"ปานกลาง",scale:"อัตราส่วน Scale",scaleAll:"แสดงให้เห็นทั้งหมด Show all",scaleFit:"แสดงให้พอดีกับพื้นที่ Exact Fit",scaleNoBorder:"ไม่แสดงเส้นขอบ No Border",title:"คุณสมบัติของไฟล์ Flash",vSpace:"ระยะแนวตั้ง",validateHSpace:"HSpace ต้องเป็นจำนวนตัวเลข",validateSrc:"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)",validateVSpace:"VSpace ต้องเป็นจำนวนตัวเลข", -windowMode:"โหมดหน้าต่าง",windowModeOpaque:"ความทึบแสง",windowModeTransparent:"ความโปรงแสง",windowModeWindow:"หน้าต่าง"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tr.js deleted file mode 100644 index 8d76aa2b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","tr",{access:"Kod İzni",accessAlways:"Herzaman",accessNever:"Asla",accessSameDomain:"Aynı domain",alignAbsBottom:"Tam Altı",alignAbsMiddle:"Tam Ortası",alignBaseline:"Taban Çizgisi",alignTextTop:"Yazı Tepeye",bgcolor:"Arka Renk",chkFull:"Tam ekrana İzinver",chkLoop:"Döngü",chkMenu:"Flash Menüsünü Kullan",chkPlay:"Otomatik Oynat",flashvars:"Flash Değerleri",hSpace:"Yatay Boşluk",properties:"Flash Özellikleri",propertiesTab:"Özellikler",quality:"Kalite",qualityAutoHigh:"Otomatik Yükseklik", -qualityAutoLow:"Otomatik Düşüklük",qualityBest:"En iyi",qualityHigh:"Yüksek",qualityLow:"Düşük",qualityMedium:"Orta",scale:"Boyutlandır",scaleAll:"Hepsini Göster",scaleFit:"Tam Sığdır",scaleNoBorder:"Kenar Yok",title:"Flash Özellikleri",vSpace:"Dikey Boşluk",validateHSpace:"HSpace sayı olmalıdır.",validateSrc:"Lütfen köprü URL'sini yazın",validateVSpace:"VSpace sayı olmalıdır.",windowMode:"Pencere modu",windowModeOpaque:"Opak",windowModeTransparent:"Şeffaf",windowModeWindow:"Pencere"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tt.js deleted file mode 100644 index db937890..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","tt",{access:"Script Access",accessAlways:"Һəрвакыт",accessNever:"Беркайчан да",accessSameDomain:"Same domain",alignAbsBottom:"Иң аска",alignAbsMiddle:"Төгәл уртада",alignBaseline:"Таяныч сызыгы",alignTextTop:"Text Top",bgcolor:"Фон төсе",chkFull:"Allow Fullscreen",chkLoop:"Әйләнеш",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Флеш үзлекләре",propertiesTab:"Үзлекләр",quality:"Сыйфат",qualityAutoHigh:"Авто югары сыйфат", -qualityAutoLow:"Авто түбән сыйфат",qualityBest:"Иң югары сыйфат",qualityHigh:"Югары",qualityLow:"Түбəн",qualityMedium:"Уртача",scale:"Scale",scaleAll:"Барысын күрсәтү",scaleFit:"Exact Fit",scaleNoBorder:"Чиксез",title:"Флеш үзлекләре",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Тəрəзə тәртибе",windowModeOpaque:"Үтә күренмәле",windowModeTransparent:"Үтə күренмəле",windowModeWindow:"Тəрəзə"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ug.js deleted file mode 100644 index 36bdb424..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ug",{access:"قوليازما زىيارەتكە يول قوي",accessAlways:"ھەمىشە",accessNever:"ھەرگىز",accessSameDomain:"ئوخشاش دائىرىدە",alignAbsBottom:"مۇتلەق ئاستى",alignAbsMiddle:"مۇتلەق ئوتتۇرا",alignBaseline:"ئاساسىي سىزىق",alignTextTop:"تېكىست ئۈستىدە",bgcolor:"تەگلىك رەڭگى",chkFull:"پۈتۈن ئېكراننى قوزغات",chkLoop:"دەۋرىي",chkMenu:"Flash تىزىملىكنى قوزغات",chkPlay:"ئۆزلۈكىدىن چال",flashvars:"Flash ئۆزگەرگۈچى",hSpace:"توغرىسىغا ئارىلىق",properties:"Flash خاسلىق",propertiesTab:"خاسلىق", -quality:"سۈپەت",qualityAutoHigh:"يۇقىرى (ئاپتوماتىك)",qualityAutoLow:"تۆۋەن (ئاپتوماتىك)",qualityBest:"ئەڭ ياخشى",qualityHigh:"يۇقىرى",qualityLow:"تۆۋەن",qualityMedium:"ئوتتۇرا (ئاپتوماتىك)",scale:"نىسبىتى",scaleAll:"ھەممىنى كۆرسەت",scaleFit:"قەتئىي ماسلىشىش",scaleNoBorder:"گىرۋەك يوق",title:"ماۋزۇ",vSpace:"بويىغا ئارىلىق",validateHSpace:"توغرىسىغا ئارىلىق چوقۇم سان بولىدۇ",validateSrc:"ئەسلى ھۆججەت ئادرېسىنى كىرگۈزۈڭ",validateVSpace:"بويىغا ئارىلىق چوقۇم سان بولىدۇ",windowMode:"كۆزنەك ھالىتى",windowModeOpaque:"خىرە", -windowModeTransparent:"سۈزۈك",windowModeWindow:"كۆزنەك گەۋدىسى"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/uk.js deleted file mode 100644 index cc458daf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","uk",{access:"Доступ до скрипта",accessAlways:"Завжди",accessNever:"Ніколи",accessSameDomain:"З того ж домена",alignAbsBottom:"По нижньому краю (abs)",alignAbsMiddle:"По середині (abs)",alignBaseline:"По базовій лінії",alignTextTop:"Текст по верхньому краю",bgcolor:"Колір фону",chkFull:"Дозволити повноекранний перегляд",chkLoop:"Циклічно",chkMenu:"Дозволити меню Flash",chkPlay:"Автопрогравання",flashvars:"Змінні Flash",hSpace:"Гориз. відступ",properties:"Властивості Flash", -propertiesTab:"Властивості",quality:"Якість",qualityAutoHigh:"Автом. відмінна",qualityAutoLow:"Автом. низька",qualityBest:"Відмінна",qualityHigh:"Висока",qualityLow:"Низька",qualityMedium:"Середня",scale:"Масштаб",scaleAll:"Показати все",scaleFit:"Поч. розмір",scaleNoBorder:"Без рамки",title:"Властивості Flash",vSpace:"Верт. відступ",validateHSpace:"Гориз. відступ повинен бути цілим числом.",validateSrc:"Будь ласка, вкажіть URL посилання",validateVSpace:"Верт. відступ повинен бути цілим числом.", -windowMode:"Віконний режим",windowModeOpaque:"Непрозорість",windowModeTransparent:"Прозорість",windowModeWindow:"Вікно"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/vi.js deleted file mode 100644 index 17a0c1b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","vi",{access:"Truy cập mã",accessAlways:"Luôn luôn",accessNever:"Không bao giờ",accessSameDomain:"Cùng tên miền",alignAbsBottom:"Dưới tuyệt đối",alignAbsMiddle:"Giữa tuyệt đối",alignBaseline:"Đường cơ sở",alignTextTop:"Phía trên chữ",bgcolor:"Màu nền",chkFull:"Cho phép toàn màn hình",chkLoop:"Lặp",chkMenu:"Cho phép bật menu của Flash",chkPlay:"Tự động chạy",flashvars:"Các biến số dành cho Flash",hSpace:"Khoảng đệm ngang",properties:"Thuộc tính Flash",propertiesTab:"Thuộc tính", -quality:"Chất lượng",qualityAutoHigh:"Cao tự động",qualityAutoLow:"Thấp tự động",qualityBest:"Tốt nhất",qualityHigh:"Cao",qualityLow:"Thấp",qualityMedium:"Trung bình",scale:"Tỷ lệ",scaleAll:"Hiển thị tất cả",scaleFit:"Vừa vặn",scaleNoBorder:"Không đường viền",title:"Thuộc tính Flash",vSpace:"Khoảng đệm dọc",validateHSpace:"Khoảng đệm ngang phải là số nguyên.",validateSrc:"Hãy đưa vào đường dẫn liên kết",validateVSpace:"Khoảng đệm dọc phải là số nguyên.",windowMode:"Chế độ cửa sổ",windowModeOpaque:"Mờ đục", -windowModeTransparent:"Trong suốt",windowModeWindow:"Cửa sổ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh-cn.js deleted file mode 100644 index d7be33ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","zh-cn",{access:"允许脚本访问",accessAlways:"总是",accessNever:"从不",accessSameDomain:"同域",alignAbsBottom:"绝对底部",alignAbsMiddle:"绝对居中",alignBaseline:"基线",alignTextTop:"文本上方",bgcolor:"背景颜色",chkFull:"启用全屏",chkLoop:"循环",chkMenu:"启用 Flash 菜单",chkPlay:"自动播放",flashvars:"Flash 变量",hSpace:"水平间距",properties:"Flash 属性",propertiesTab:"属性",quality:"质量",qualityAutoHigh:"高(自动)",qualityAutoLow:"低(自动)",qualityBest:"最好",qualityHigh:"高",qualityLow:"低",qualityMedium:"中(自动)",scale:"缩放",scaleAll:"全部显示", -scaleFit:"严格匹配",scaleNoBorder:"无边框",title:"标题",vSpace:"垂直间距",validateHSpace:"水平间距必须为数字格式",validateSrc:"请输入源文件地址",validateVSpace:"垂直间距必须为数字格式",windowMode:"窗体模式",windowModeOpaque:"不透明",windowModeTransparent:"透明",windowModeWindow:"窗体"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh.js deleted file mode 100644 index 83af6820..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","zh",{access:"腳本存取",accessAlways:"永遠",accessNever:"從不",accessSameDomain:"相同網域",alignAbsBottom:"絕對下方",alignAbsMiddle:"絕對置中",alignBaseline:"基準線",alignTextTop:"上層文字",bgcolor:"背景顏色",chkFull:"允許全螢幕",chkLoop:"重複播放",chkMenu:"啟用 Flash 選單",chkPlay:"自動播放",flashvars:"Flash 變數",hSpace:"HSpace",properties:"Flash 屬性​​",propertiesTab:"屬性",quality:"品質",qualityAutoHigh:"自動高",qualityAutoLow:"自動低",qualityBest:"最佳",qualityHigh:"高",qualityLow:"低",qualityMedium:"中",scale:"縮放比例",scaleAll:"全部顯示", -scaleFit:"最適化",scaleNoBorder:"無框線",title:"Flash 屬性​​",vSpace:"VSpace",validateHSpace:"HSpace 必須為數字。",validateSrc:"URL 不可為空白。",validateVSpace:"VSpace 必須為數字。",windowMode:"視窗模式",windowModeOpaque:"不透明",windowModeTransparent:"透明",windowModeWindow:"視窗"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/flash/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/flash/plugin.js deleted file mode 100644 index a2a786ac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/flash/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){a=a.attributes;return"application/x-shockwave-flash"==a.type||f.test(a.src||"")}function e(a,b){return a.createFakeParserElement(b,"cke_flash","flash",!0)}var f=/\.swf(?:$|\?)/i;CKEDITOR.plugins.add("flash",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"flash", -hidpi:!0,onLoad:function(){CKEDITOR.addCss("img.cke_flash{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},init:function(a){var b="object[classid,codebase,height,hspace,vspace,width];param[name,value];embed[height,hspace,pluginspage,src,type,vspace,width]";CKEDITOR.dialog.isTabEnabled(a,"flash","properties")&&(b+=";object[align]; embed[allowscriptaccess,quality,scale,wmode]"); -CKEDITOR.dialog.isTabEnabled(a,"flash","advanced")&&(b+=";object[id]{*}; embed[bgcolor]{*}(*)");a.addCommand("flash",new CKEDITOR.dialogCommand("flash",{allowedContent:b,requiredContent:"embed"}));a.ui.addButton&&a.ui.addButton("Flash",{label:a.lang.common.flash,command:"flash",toolbar:"insert,20"});CKEDITOR.dialog.add("flash",this.path+"dialogs/flash.js");a.addMenuItems&&a.addMenuItems({flash:{label:a.lang.flash.properties,command:"flash",group:"flash"}});a.on("doubleclick",function(a){var b=a.data.element; -b.is("img")&&"flash"==b.data("cke-real-element-type")&&(a.data.dialog="flash")});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&!a.isReadOnly()&&"flash"==a.data("cke-real-element-type"))return{flash:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{"cke:object":function(b){var c=b.attributes;if((!c.classid||!(""+c.classid).toLowerCase())&&!d(b)){for(c=0;c<b.children.length;c++)if("cke:embed"==b.children[c].name){if(!d(b.children[c]))break; -return e(a,b)}return null}return e(a,b)},"cke:embed":function(b){return!d(b)?null:e(a,b)}}},5)}})})();CKEDITOR.tools.extend(CKEDITOR.config,{flashEmbedTagOnly:!1,flashAddEmbedTag:!0,flashConvertOnEdit:!1}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/af.js deleted file mode 100644 index 0473fe90..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","af",{fontSize:{label:"Grootte",voiceLabel:"Fontgrootte",panelTitle:"Fontgrootte"},label:"Font",panelTitle:"Fontnaam",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ar.js deleted file mode 100644 index cf81e27a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ar",{fontSize:{label:"حجم الخط",voiceLabel:"حجم الخط",panelTitle:"حجم الخط"},label:"خط",panelTitle:"حجم الخط",voiceLabel:"حجم الخط"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bg.js deleted file mode 100644 index 62e05fe6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bg",{fontSize:{label:"Размер",voiceLabel:"Размер на шрифт",panelTitle:"Размер на шрифт"},label:"Шрифт",panelTitle:"Име на шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bn.js deleted file mode 100644 index 98cd2702..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bn",{fontSize:{label:"সাইজ",voiceLabel:"Font Size",panelTitle:"সাইজ"},label:"ফন্ট",panelTitle:"ফন্ট",voiceLabel:"ফন্ট"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bs.js deleted file mode 100644 index 171cdc18..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bs",{fontSize:{label:"Velièina",voiceLabel:"Font Size",panelTitle:"Velièina"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ca.js deleted file mode 100644 index b710fa74..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ca",{fontSize:{label:"Mida",voiceLabel:"Mida de la lletra",panelTitle:"Mida de la lletra"},label:"Tipus de lletra",panelTitle:"Tipus de lletra",voiceLabel:"Tipus de lletra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cs.js deleted file mode 100644 index 31c3d385..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","cs",{fontSize:{label:"Velikost",voiceLabel:"Velikost písma",panelTitle:"Velikost"},label:"Písmo",panelTitle:"Písmo",voiceLabel:"Písmo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cy.js deleted file mode 100644 index d85cdff4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","cy",{fontSize:{label:"Maint",voiceLabel:"Maint y Ffont",panelTitle:"Maint y Ffont"},label:"Ffont",panelTitle:"Enw'r Ffont",voiceLabel:"Ffont"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/da.js deleted file mode 100644 index 24b02926..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","da",{fontSize:{label:"Skriftstørrelse",voiceLabel:"Skriftstørrelse",panelTitle:"Skriftstørrelse"},label:"Skrifttype",panelTitle:"Skrifttype",voiceLabel:"Skrifttype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/de.js deleted file mode 100644 index 71bd88de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","de",{fontSize:{label:"Größe",voiceLabel:"Schrifgröße",panelTitle:"Größe"},label:"Schriftart",panelTitle:"Schriftart",voiceLabel:"Schriftart"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/el.js deleted file mode 100644 index ecb9a8b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","el",{fontSize:{label:"Μέγεθος",voiceLabel:"Μέγεθος Γραμματοσειράς",panelTitle:"Μέγεθος Γραμματοσειράς"},label:"Γραμματοσειρά",panelTitle:"Όνομα Γραμματοσειράς",voiceLabel:"Γραμματοσειρά"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-au.js deleted file mode 100644 index 8b19ae02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-au",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-ca.js deleted file mode 100644 index a41715d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-ca",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-gb.js deleted file mode 100644 index aa7fd0d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-gb",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en.js deleted file mode 100644 index c332c074..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eo.js deleted file mode 100644 index bf6f5123..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","eo",{fontSize:{label:"Grado",voiceLabel:"Tipara grado",panelTitle:"Tipara grado"},label:"Tiparo",panelTitle:"Tipara nomo",voiceLabel:"Tiparo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/es.js deleted file mode 100644 index c452c865..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","es",{fontSize:{label:"Tamaño",voiceLabel:"Tamaño de fuente",panelTitle:"Tamaño"},label:"Fuente",panelTitle:"Fuente",voiceLabel:"Fuente"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/et.js deleted file mode 100644 index 76f2b072..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","et",{fontSize:{label:"Suurus",voiceLabel:"Kirja suurus",panelTitle:"Suurus"},label:"Kiri",panelTitle:"Kiri",voiceLabel:"Kiri"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eu.js deleted file mode 100644 index 941c541f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","eu",{fontSize:{label:"Tamaina",voiceLabel:"Tamaina",panelTitle:"Tamaina"},label:"Letra-tipoa",panelTitle:"Letra-tipoa",voiceLabel:"Letra-tipoa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fa.js deleted file mode 100644 index b4b4cfca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fa",{fontSize:{label:"اندازه",voiceLabel:"اندازه قلم",panelTitle:"اندازه قلم"},label:"قلم",panelTitle:"نام قلم",voiceLabel:"قلم"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fi.js deleted file mode 100644 index 59de601f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fi",{fontSize:{label:"Koko",voiceLabel:"Kirjaisimen koko",panelTitle:"Koko"},label:"Kirjaisinlaji",panelTitle:"Kirjaisinlaji",voiceLabel:"Kirjaisinlaji"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fo.js deleted file mode 100644 index 2080e025..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fo",{fontSize:{label:"Skriftstødd",voiceLabel:"Skriftstødd",panelTitle:"Skriftstødd"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Skrift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr-ca.js deleted file mode 100644 index bcf3fc12..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fr-ca",{fontSize:{label:"Taille",voiceLabel:"Taille",panelTitle:"Taille"},label:"Police",panelTitle:"Police",voiceLabel:"Police"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr.js deleted file mode 100644 index 32486dc7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fr",{fontSize:{label:"Taille",voiceLabel:"Taille de police",panelTitle:"Taille de police"},label:"Police",panelTitle:"Style de police",voiceLabel:"Police"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gl.js deleted file mode 100644 index 74fdf0d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","gl",{fontSize:{label:"Tamaño",voiceLabel:"Tamaño da letra",panelTitle:"Tamaño da letra"},label:"Tipo de letra",panelTitle:"Nome do tipo de letra",voiceLabel:"Tipo de letra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gu.js deleted file mode 100644 index 7c1a2670..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","gu",{fontSize:{label:"ફૉન્ટ સાઇઝ/કદ",voiceLabel:"ફોન્ટ સાઈઝ",panelTitle:"ફૉન્ટ સાઇઝ/કદ"},label:"ફૉન્ટ",panelTitle:"ફૉન્ટ",voiceLabel:"ફોન્ટ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/he.js deleted file mode 100644 index a712a5a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","he",{fontSize:{label:"גודל",voiceLabel:"גודל",panelTitle:"גודל"},label:"גופן",panelTitle:"גופן",voiceLabel:"גופן"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hi.js deleted file mode 100644 index 2c66d5f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hi",{fontSize:{label:"साइज़",voiceLabel:"Font Size",panelTitle:"साइज़"},label:"फ़ॉन्ट",panelTitle:"फ़ॉन्ट",voiceLabel:"फ़ॉन्ट"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hr.js deleted file mode 100644 index 4cb480d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hr",{fontSize:{label:"Veličina",voiceLabel:"Veličina slova",panelTitle:"Veličina"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hu.js deleted file mode 100644 index e9edbdb1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hu",{fontSize:{label:"Méret",voiceLabel:"Betűméret",panelTitle:"Méret"},label:"Betűtípus",panelTitle:"Betűtípus",voiceLabel:"Betűtípus"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/id.js deleted file mode 100644 index 22b03078..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","id",{fontSize:{label:"Ukuran",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/is.js deleted file mode 100644 index 9fbd17d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","is",{fontSize:{label:"Leturstærð ",voiceLabel:"Font Size",panelTitle:"Leturstærð "},label:"Leturgerð ",panelTitle:"Leturgerð ",voiceLabel:"Leturgerð "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/it.js deleted file mode 100644 index 146a8fb5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","it",{fontSize:{label:"Dimensione",voiceLabel:"Dimensione Carattere",panelTitle:"Dimensione"},label:"Carattere",panelTitle:"Carattere",voiceLabel:"Carattere"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ja.js deleted file mode 100644 index c7e579ed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ja",{fontSize:{label:"サイズ",voiceLabel:"フォントサイズ",panelTitle:"フォントサイズ"},label:"フォント",panelTitle:"フォント",voiceLabel:"フォント"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ka.js deleted file mode 100644 index a45a4b5c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ka",{fontSize:{label:"ზომა",voiceLabel:"ტექსტის ზომა",panelTitle:"ტექსტის ზომა"},label:"ფონტი",panelTitle:"ფონტის სახელი",voiceLabel:"ფონტი"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/km.js deleted file mode 100644 index b817819b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","km",{fontSize:{label:"ទំហំ",voiceLabel:"ទំហំ​អក្សរ",panelTitle:"ទំហំ​អក្សរ"},label:"ពុម្ព​អក្សរ",panelTitle:"ឈ្មោះ​ពុម្ព​អក្សរ",voiceLabel:"ពុម្ព​អក្សរ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ko.js deleted file mode 100644 index b6b66210..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ko",{fontSize:{label:"글자 크기",voiceLabel:"Font Size",panelTitle:"글자 크기"},label:"폰트",panelTitle:"폰트",voiceLabel:"폰트"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ku.js deleted file mode 100644 index 9e2d5582..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ku",{fontSize:{label:"گەورەیی",voiceLabel:"گەورەیی فۆنت",panelTitle:"گەورەیی فۆنت"},label:"فۆنت",panelTitle:"ناوی فۆنت",voiceLabel:"فۆنت"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lt.js deleted file mode 100644 index c613a9d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","lt",{fontSize:{label:"Šrifto dydis",voiceLabel:"Šrifto dydis",panelTitle:"Šrifto dydis"},label:"Šriftas",panelTitle:"Šriftas",voiceLabel:"Šriftas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lv.js deleted file mode 100644 index 023b054f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","lv",{fontSize:{label:"Izmērs",voiceLabel:"Fonta izmeŗs",panelTitle:"Izmērs"},label:"Šrifts",panelTitle:"Šrifts",voiceLabel:"Fonts"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mk.js deleted file mode 100644 index c47889e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","mk",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mn.js deleted file mode 100644 index 855b36e8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","mn",{fontSize:{label:"Хэмжээ",voiceLabel:"Үсгийн хэмжээ",panelTitle:"Үсгийн хэмжээ"},label:"Үсгийн хэлбэр",panelTitle:"Үгсийн хэлбэрийн нэр",voiceLabel:"Үгсийн хэлбэр"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ms.js deleted file mode 100644 index bf2cac96..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ms",{fontSize:{label:"Saiz",voiceLabel:"Font Size",panelTitle:"Saiz"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nb.js deleted file mode 100644 index 3e85a266..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","nb",{fontSize:{label:"Størrelse",voiceLabel:"Skriftstørrelse",panelTitle:"Skriftstørrelse"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nl.js deleted file mode 100644 index 301a9424..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","nl",{fontSize:{label:"Lettergrootte",voiceLabel:"Lettergrootte",panelTitle:"Lettergrootte"},label:"Lettertype",panelTitle:"Lettertype",voiceLabel:"Lettertype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/no.js deleted file mode 100644 index 2e45e27c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","no",{fontSize:{label:"Størrelse",voiceLabel:"Font Størrelse",panelTitle:"Størrelse"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pl.js deleted file mode 100644 index f15dd769..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pl",{fontSize:{label:"Rozmiar",voiceLabel:"Rozmiar czcionki",panelTitle:"Rozmiar"},label:"Czcionka",panelTitle:"Czcionka",voiceLabel:"Czcionka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt-br.js deleted file mode 100644 index bfe0147b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pt-br",{fontSize:{label:"Tamanho",voiceLabel:"Tamanho da fonte",panelTitle:"Tamanho"},label:"Fonte",panelTitle:"Fonte",voiceLabel:"Fonte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt.js deleted file mode 100644 index 06de8cd0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pt",{fontSize:{label:"Tamanho",voiceLabel:"Tamanho da Letra",panelTitle:"Tamanho da Letra"},label:"Tipo de Letra",panelTitle:"Nome do Tipo de Letra",voiceLabel:"Tipo de Letra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ro.js deleted file mode 100644 index 2b101811..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ro",{fontSize:{label:"Mărime",voiceLabel:"Font Size",panelTitle:"Mărime"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ru.js deleted file mode 100644 index c5407217..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ru",{fontSize:{label:"Размер",voiceLabel:"Размер шрифта",panelTitle:"Размер шрифта"},label:"Шрифт",panelTitle:"Шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/si.js deleted file mode 100644 index c6246daf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","si",{fontSize:{label:"විශාලත්වය",voiceLabel:"අක්ෂර විශාලත්වය",panelTitle:"අක්ෂර විශාලත්වය"},label:"අක්ෂරය",panelTitle:"අක්ෂර නාමය",voiceLabel:"අක්ෂර"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sk.js deleted file mode 100644 index e09e8d4c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sk",{fontSize:{label:"Veľkosť",voiceLabel:"Veľkosť písma",panelTitle:"Veľkosť písma"},label:"Font",panelTitle:"Názov fontu",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sl.js deleted file mode 100644 index 061fea48..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sl",{fontSize:{label:"Velikost",voiceLabel:"Velikost",panelTitle:"Velikost"},label:"Pisava",panelTitle:"Pisava",voiceLabel:"Pisava"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sq.js deleted file mode 100644 index c7c95938..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sq",{fontSize:{label:"Madhësia",voiceLabel:"Madhësia e Shkronjës",panelTitle:"Madhësia e Shkronjës"},label:"Shkronja",panelTitle:"Emri i Shkronjës",voiceLabel:"Shkronja"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr-latn.js deleted file mode 100644 index 87604c2f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sr-latn",{fontSize:{label:"Veličina fonta",voiceLabel:"Font Size",panelTitle:"Veličina fonta"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr.js deleted file mode 100644 index 5e2276d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sr",{fontSize:{label:"Величина фонта",voiceLabel:"Font Size",panelTitle:"Величина фонта"},label:"Фонт",panelTitle:"Фонт",voiceLabel:"Фонт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sv.js deleted file mode 100644 index 6eb9e8e0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sv",{fontSize:{label:"Storlek",voiceLabel:"Teckenstorlek",panelTitle:"Teckenstorlek"},label:"Typsnitt",panelTitle:"Typsnitt",voiceLabel:"Typsnitt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/th.js deleted file mode 100644 index 464cab1f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","th",{fontSize:{label:"ขนาด",voiceLabel:"Font Size",panelTitle:"ขนาด"},label:"แบบอักษร",panelTitle:"แบบอักษร",voiceLabel:"แบบอักษร"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tr.js deleted file mode 100644 index 424f6652..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","tr",{fontSize:{label:"Boyut",voiceLabel:"Font Size",panelTitle:"Boyut"},label:"Yazı Türü",panelTitle:"Yazı Türü",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tt.js deleted file mode 100644 index 623cbcb4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","tt",{fontSize:{label:"Зурлык",voiceLabel:"Шрифт зурлыклары",panelTitle:"Шрифт зурлыклары"},label:"Шрифт",panelTitle:"Шрифт исеме",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ug.js deleted file mode 100644 index 235c677f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ug",{fontSize:{label:"چوڭلۇقى",voiceLabel:"خەت چوڭلۇقى",panelTitle:"چوڭلۇقى"},label:"خەت نۇسخا",panelTitle:"خەت نۇسخا",voiceLabel:"خەت نۇسخا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/uk.js deleted file mode 100644 index 8a2387fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","uk",{fontSize:{label:"Розмір",voiceLabel:"Розмір шрифту",panelTitle:"Розмір"},label:"Шрифт",panelTitle:"Шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/vi.js deleted file mode 100644 index e082b7b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","vi",{fontSize:{label:"Cỡ chữ",voiceLabel:"Kích cỡ phông",panelTitle:"Cỡ chữ"},label:"Phông",panelTitle:"Phông",voiceLabel:"Phông"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh-cn.js deleted file mode 100644 index 370710a5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","zh-cn",{fontSize:{label:"大小",voiceLabel:"文字大小",panelTitle:"大小"},label:"字体",panelTitle:"字体",voiceLabel:"字体"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh.js deleted file mode 100644 index a2716813..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","zh",{fontSize:{label:"大小",voiceLabel:"字型大小",panelTitle:"字型大小"},label:"字型",panelTitle:"字型名稱",voiceLabel:"字型"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/font/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/font/plugin.js deleted file mode 100644 index dba4cae1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/font/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function e(b,a,e,h,j,n,l,o){for(var p=b.config,k=new CKEDITOR.style(l),c=j.split(";"),j=[],g={},d=0;d<c.length;d++){var f=c[d];if(f){var f=f.split("/"),m={},i=c[d]=f[0];m[e]=j[d]=f[1]||i;g[i]=new CKEDITOR.style(l,m);g[i]._.definition.name=i}else c.splice(d--,1)}b.ui.addRichCombo(a,{label:h.label,title:h.panelTitle,toolbar:"styles,"+o,allowedContent:k,requiredContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(p.contentsCss),multiSelect:!1,attributes:{"aria-label":h.panelTitle}}, -init:function(){this.startGroup(h.panelTitle);for(var b=0;b<c.length;b++){var a=c[b];this.add(a,g[a].buildPreview(),a)}},onClick:function(a){b.focus();b.fire("saveSnapshot");var c=g[a];b[this.getValue()==a?"removeStyle":"applyStyle"](c);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){for(var c=this.getValue(),a=a.data.path.elements,d=0,f;d<a.length;d++){f=a[d];for(var e in g)if(g[e].checkElementMatch(f,!0,b)){e!=c&&this.setValue(e);return}}this.setValue("",n)},this)}, -refresh:function(){b.activeFilter.check(k)||this.setState(CKEDITOR.TRISTATE_DISABLED)}})}CKEDITOR.plugins.add("font",{requires:"richcombo",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(b){var a=b.config;e(b,"Font","family",b.lang.font,a.font_names,a.font_defaultLabel,a.font_style,30);e(b,"FontSize","size", -b.lang.font.fontSize,a.fontSize_sizes,a.fontSize_defaultLabel,a.fontSize_style,40)}})})();CKEDITOR.config.font_names="Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif"; -CKEDITOR.config.font_defaultLabel="";CKEDITOR.config.font_style={element:"span",styles:{"font-family":"#(family)"},overrides:[{element:"font",attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes="8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";CKEDITOR.config.fontSize_defaultLabel="";CKEDITOR.config.fontSize_style={element:"span",styles:{"font-size":"#(size)"},overrides:[{element:"font",attributes:{size:null}}]}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/button.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/button.js deleted file mode 100644 index 56a4efdd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/button.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button= -a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name", -type:"text",label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst, -"reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js deleted file mode 100644 index 65f1be60..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info", -label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value, -"default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();c&&!(CKEDITOR.env.ie&&"on"==c)?b.setAttribute("value",c):CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value")}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"", -accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':"")+"/>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/form.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/form.js deleted file mode 100644 index 86267185..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/form.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)|| -"")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name", -!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",type:"select", -label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js deleted file mode 100644 index f4699b7d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&(c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type"))&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"); -this.getValueOf("info","value");var b=this.getParentEditor(),a=CKEDITOR.env.ie&&!(8<=CKEDITOR.document.$.documentMode)?b.document.createElement('<input name="'+CKEDITOR.tools.htmlEncode(a)+'">'):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title, -elements:[{id:"_cke_saved_name",type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()): -a.removeAttribute("value")}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/radio.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/radio.js deleted file mode 100644 index 1af693e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/radio.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("radio",function(d){return{title:d.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&("input"==a.getName()&&"radio"==a.getAttribute("type"))&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,b=this.radioButton,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","radio"));c&&a.insertElement(b);this.commitContent({element:b})}, -contents:[{id:"info",label:d.lang.forms.checkboxAndRadio.radioTitle,title:d.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:d.lang.forms.checkboxAndRadio.value,"default":"", -accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+ -(e?' checked="checked"':"")+"></input>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/select.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/select.js deleted file mode 100644 index a6c50e20..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/select.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0<b.length?b:"",d.$.value=e):(null!==c&&c<a.getChildCount()?a.getChild(0>c?0:c).insertBeforeMe(d):a.append(d),d.setText(0<b.length?b:""),d.setValue(e));else return!1;return d}function m(a){for(var a=f(a),b=g(a),e=a.getChildren().count()-1;0<= -e;e--)a.getChild(e).$.selected&&a.getChild(e).remove();i(a,b)}function n(a,b,e,d){a=f(a);if(0>b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function k(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function j(a,b,e){var a=f(a),d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),o=d.getValue();d.remove();d=h(a,c,o,!e?null:e,b);i(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1} -function i(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function l(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox= -a;this.setupContent(a.getName(),a);for(var a=l(a),b=0;b<a.count();b++)this.setupContent("option",a.getItem(b))}},onOk:function(){var a=this.getParentEditor(),b=this.selectBox,e=!b;e&&(b=a.document.createElement("select"));this.commitContent(b);if(e&&(a.insertElement(b),CKEDITOR.env.ie)){var d=a.getSelection(),c=d.createBookmarks();setTimeout(function(){d.selectBookmarks(c)},0)}},contents:[{id:"info",label:c.lang.forms.select.selectInfo,title:c.lang.forms.select.selectInfo,accessKey:"",elements:[{id:"txtName", -type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.common.name,"default":"",accessKey:"N",style:"width:350px",setup:function(a,b){"clear"==a?this.setValue(this["default"]||""):"select"==a&&this.setValue(b.data("cke-saved-name")||b.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.forms.select.value, -style:"width:350px","default":"",className:"cke_disabled",onLoad:function(){this.getInputElement().setAttribute("readOnly",!0)},setup:function(a,b){"clear"==a?this.setValue(""):"option"==a&&b.getAttribute("selected")&&this.setValue(b.$.value)}},{type:"hbox",widths:["175px","170px"],children:[{id:"txtSize",type:"text",labelLayout:"horizontal",label:c.lang.forms.select.size,"default":"",accessKey:"S",style:"width:175px",validate:function(){var a=CKEDITOR.dialog.validate.integer(c.lang.common.validateNumberFailed); -return""===this.getValue()||a.apply(this)},setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("size")||"");CKEDITOR.env.webkit&&this.getInputElement().setStyle("width","86px")},commit:function(a){this.getValue()?a.setAttribute("size",this.getValue()):a.removeAttribute("size")}},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+"</span>"}]},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+"</span>"},{type:"hbox",widths:["115px", -"115px","100px"],children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(this.getValue());a.setValue(b.getValue())}, -setup:function(a,b){"clear"==a?k(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=l(this),d=l(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();k(a);for(var f=0;f<e.count();f++){var g=h(a,e.getItem(f).getValue(),d.getItem(f).getValue(),b.getParentEditor().document);d.getItem(f).getValue()==c&&(g.setAttribute("selected","selected"),g.selected=!0)}}}]},{type:"vbox",children:[{id:"txtOptValue", -type:"text",label:c.lang.forms.select.opValue,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbValue",label:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(b.getValue());a.setValue(this.getValue())},setup:function(a,b){if("clear"==a)k(this);else if("option"== -a){var e=b.getValue();h(this,e,e,this.getDialog().getParentEditor().document);"selected"==b.getAttribute("selected")&&this.getDialog().getContentElement("info","txtValue").setValue(e)}}}]},{type:"vbox",padding:5,children:[{type:"button",id:"btnAdd",style:"",label:c.lang.forms.select.btnAdd,title:c.lang.forms.select.btnAdd,style:"width:100%;",onClick:function(){var a=this.getDialog();a.getParentEditor();var b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info", -"cmbName"),c=a.getContentElement("info","cmbValue");h(d,b.getValue(),b.getValue(),a.getParentEditor().document);h(c,e.getValue(),e.getValue(),a.getParentEditor().document);b.setValue("");e.setValue("")}},{type:"button",id:"btnModify",label:c.lang.forms.select.btnModify,title:c.lang.forms.select.btnModify,style:"width:100%;",onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info","cmbName"),a=a.getContentElement("info", -"cmbValue"),c=g(d);0<=c&&(n(d,c,b.getValue(),b.getValue()),n(a,c,e.getValue(),e.getValue()))}},{type:"button",id:"btnUp",style:"width:100%;",label:c.lang.forms.select.btnUp,title:c.lang.forms.select.btnUp,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,-1,a.getParentEditor().document);j(c,-1,a.getParentEditor().document)}},{type:"button",id:"btnDown",style:"width:100%;",label:c.lang.forms.select.btnDown,title:c.lang.forms.select.btnDown, -onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,1,a.getParentEditor().document);j(c,1,a.getParentEditor().document)}}]}]},{type:"hbox",widths:["40%","20%","40%"],children:[{type:"button",id:"btnSetValue",label:c.lang.forms.select.btnSetValue,title:c.lang.forms.select.btnSetValue,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue");a.getContentElement("info","txtValue").setValue(b.getValue())}}, -{type:"button",id:"btnDelete",label:c.lang.forms.select.btnDelete,title:c.lang.forms.select.btnDelete,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue"),d=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue");m(b);m(c);d.setValue("");a.setValue("")}},{id:"chkMulti",type:"checkbox",label:c.lang.forms.select.chkMulti,"default":"",accessKey:"M",value:"checked",setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("multiple")); -CKEDITOR.env.webkit&&this.getElement().getParent().setStyle("vertical-align","middle")},commit:function(a){this.getValue()?a.setAttribute("multiple",this.getValue()):a.removeAttribute("multiple")}}]}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textarea.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textarea.js deleted file mode 100644 index de8b3187..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textarea.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("textarea",function(b){return{title:b.lang.forms.textarea.title,minWidth:350,minHeight:220,onShow:function(){delete this.textarea;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"textarea"==a.getName()&&(this.textarea=a,this.setupContent(a))},onOk:function(){var a,b=this.textarea,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("textarea"));this.commitContent(b);c&&a.insertElement(b)},contents:[{id:"info",label:b.lang.forms.textarea.title,title:b.lang.forms.textarea.title, -elements:[{id:"_cke_saved_name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{type:"hbox",widths:["50%","50%"],children:[{id:"cols",type:"text",label:b.lang.forms.textarea.cols,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed), -setup:function(a){this.setValue(a.hasAttribute("cols")&&a.getAttribute("cols")||"")},commit:function(a){this.getValue()?a.setAttribute("cols",this.getValue()):a.removeAttribute("cols")}},{id:"rows",type:"text",label:b.lang.forms.textarea.rows,"default":"",accessKey:"R",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),setup:function(a){this.setValue(a.hasAttribute("rows")&&a.getAttribute("rows")||"")},commit:function(a){this.getValue()?a.setAttribute("rows", -this.getValue()):a.removeAttribute("rows")}}]},{id:"value",type:"textarea",label:b.lang.forms.textfield.value,"default":"",setup:function(a){this.setValue(a.$.defaultValue)},commit:function(a){a.$.value=a.$.defaultValue=this.getValue()}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textfield.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textfield.js deleted file mode 100644 index 46b006e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/dialogs/textfield.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("textfield",function(b){function e(a){var a=a.element,c=this.getValue();c?a.setAttribute(this.id,c):a.removeAttribute(this.id)}function f(a){this.setValue(a.hasAttribute(this.id)&&a.getAttribute(this.id)||"")}var g={email:1,password:1,search:1,tel:1,text:1,url:1};return{title:b.lang.forms.textfield.title,minWidth:350,minHeight:150,onShow:function(){delete this.textField;var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"input"==a.getName()&&(g[a.getAttribute("type")]|| -!a.getAttribute("type")))this.textField=a,this.setupContent(a)},onOk:function(){var a=this.getParentEditor(),c=this.textField,b=!c;b&&(c=a.document.createElement("input"),c.setAttribute("type","text"));c={element:c};b&&a.insertElement(c.element);this.commitContent(c);b||a.getSelection().selectElement(c.element)},onLoad:function(){this.foreach(function(a){if(a.getValue&&(a.setup||(a.setup=f),!a.commit))a.commit=e})},contents:[{id:"info",label:b.lang.forms.textfield.title,title:b.lang.forms.textfield.title, -elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"_cke_saved_name",type:"text",label:b.lang.forms.textfield.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.textfield.value,"default":"",accessKey:"V",commit:function(a){if(CKEDITOR.env.ie&& -!this.getValue()){var c=a.element,d=new CKEDITOR.dom.element("input",b.document);c.copyAttributes(d,{value:1});d.replace(c);a.element=d}else e.call(this,a)}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"size",type:"text",label:b.lang.forms.textfield.charWidth,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)},{id:"maxLength",type:"text",label:b.lang.forms.textfield.maxChars,"default":"",accessKey:"M",style:"width:50px", -validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)}],onLoad:function(){CKEDITOR.env.ie7Compat&&this.getElement().setStyle("zoom","100%")}},{id:"type",type:"select",label:b.lang.forms.textfield.type,"default":"text",accessKey:"M",items:[[b.lang.forms.textfield.typeEmail,"email"],[b.lang.forms.textfield.typePass,"password"],[b.lang.forms.textfield.typeSearch,"search"],[b.lang.forms.textfield.typeTel,"tel"],[b.lang.forms.textfield.typeText,"text"],[b.lang.forms.textfield.typeUrl, -"url"]],setup:function(a){this.setValue(a.getAttribute("type"))},commit:function(a){var c=a.element;if(CKEDITOR.env.ie){var d=c.getAttribute("type"),e=this.getValue();d!=e&&(d=CKEDITOR.dom.element.createFromHtml('<input type="'+e+'"></input>',b.document),c.copyAttributes(d,{type:1}),d.replace(c),a.element=d)}else c.setAttribute("type",this.getValue())}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/button.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/button.png deleted file mode 100644 index 0bf68caaa5c7a0643aede89877140f0501b680d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqo${eV~EA+rIT&54hIOdq~GVC<TzDv>!lxD>#pp$YS|R}TWnno zSG?Ow9zC8-zL(fprgf*M>^IL;nyeLc;lQTbXSN%>IrX#Vn1rODBzwo>3K0j7J|+eS zwgoH)>ccn{Cci9+S{JsuQpB~{Tx;otZMtT&&+dLwdG2UZ<KH^|=Q1uVwFkR6)@<Do zqh}B(qS(@~YhB{n)}U4P7J?P;4QKi!%qhMQ_4s3jg9{sD-D!*G1$*NP_urrYMUhMK zKsEo#O>Y)w&bn^Vm)P@?b%F~AWA1Gw&q@BlB1g;i#)-Ede(0KQo3Z=5T;{Ag-RY-w zJ)$P%tCXwcGiQH)yfG+L)P+UGaQ0cYyI((6>?xJAoa?8+IqAba<(3c2BQ;sqe*GNh zV?LoJh^u!0#nwAt^Swg%%+w40X$}lY)e_f;l9a@fRIB8oR3OD*WMF8lYhbQxU=m_z zZe?H$MA`;MRt5&XOLhZ88A(HKeoAIqC2kEiKbemJHAsSN2+mI{DNig)WhgH%*UQYy dE>2D?NY%?PN}v7CMhd8i!PC{xWt~$(699*%$Jqb? diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/checkbox.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/checkbox.png deleted file mode 100644 index 2f4eb2f40f50d5ccbee3c1664163cca325b77fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i6R)R>V~EA+sgrHJV;n`=<{KN=HJo~PcZ0$Sr!JG*EUyy;Hwa2g zbML<LlQ;7b|AuJ|sbac1c@s}LZRw8S$lNxe_3G}cV&Q@<cXt|pUvlCetMdspb~y>Q zbJcC1_bKm<<7W_jSnn0eSfJEo$d;{pY{pEdRbG+Pj!0;p7E13)%*^am@!W9j-{mh7 z%KZHNHum<(Yqnl_T{@>&TB%4?$*NiV`5m{taqHu93(hgh%$YN%B=qa2{5kXHl{GRy zmpLXO!Nb-f5D^&}7<xDS>i7CbA3l6I{A5r3>Z>L#2NDb#bWTh3x~*BaZq=$=4+}iz zJ?Ck6mXnuXo%^1N^+RN6?&_<TK34clOPz7*kN}fIj@fJzsotv1H<yI1R#e*UIY}lz zKi@h*u;cN^id_NUtJz$h$bRs3vGZf;zkdDt-0%AquUgNz=es_uR<_#Ly5eHvoqPBG zm2z5eH*dFq)AK)nY9w!bz85TVv}A>#pi9cCRjbzb7|z|g)%1GS);N><_wV<w**YcF z^J+RnkKyGErupa2otx&&F;^n_`J+ckk~dCo$_Z&*>!ttUH0yiY&!0b=ADFgk(W>rM zv-~1@42^cO--wEc*zxh+<W$KoziU6)sQX@4ejs&0GG=*Z)s*L!f9vGMlb^hN**SOa z-1n<?vBsSH!Ij^jUtV5*L}FsxdiTg_BCd|R@8&V&r*r&yQMUW%ojbtLtYfO57G%A5 zhx%<`YEdn5jVMV;EJ?LWE=mPb3`Pcq#<~XPx&|g8hUQiV#z3TPU}R-r;JaiuFeM>r z$jwj5OsmAL!R9CP5ugT1kPX54X(i=}MX3xxx9Mf(WfvzW7NqLs7p2dBXCnnv#Ng@b K=d#Wzp$P!8LO@jj diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/form.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/form.png deleted file mode 100644 index 08416674e1f840fe697b8c1615083e44c24fbf2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW4fn{V~EA+xswf7KMD|N-EVkZYXXbt(L=|M<yEh)-B6!Xe@%Pq zru*ldS~$d%CUP_$u|Ape(0IqY=o@>OFW=cI^US(<{hKmtmzMP>&J;Kbd|08k>h-K$ z>k1Pkj3jtoe65<xGi#aRX`>JKnD;PW+jwv9_l}txBXn|h#ypyneRJN|Srb=nx|wq$ zZ~G&lGEbpPCV#v64_JP8w@Yj5n4rSxd-*}g)XOiA)a{QiKbc@Rzdk%v<MgDD6*+0& zzMaWP%U_><e(%eYtklRyE-deD)3zCHF6(;yaYxspj+;5hQj8Yff4_KDjGlPI)KyAK z<;}a+$vgh7k+9iu+2pUt+r$HJ%anPXe|zkcH9lV)GPPboz;$Bf`}e{%F;65F&lfi- zBv{B8N%a<-TevD_{q?e7rKake#oYqO4H=$){u#_-y!(Ias#O}Ni*%Ka{XgAM8XCGo z=d{6Qi5Fk^8h#X5Jm^})@Po1Db;gI)8eDbEY-ul6R=wkt1;&GFiEBhjN@7W>RdP`( zkYX@0Ff`URFxNFO2{AOcGB5@rZ381K0|VbByMb|pq#-vyB{QuOw+5S^%twG4BtbR= s=ckpFCl;kLl$V$5W#(lUCnpx9>g5-u&wghk1ysb~>FVdQ&MBb@09<_c_5c6? diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png deleted file mode 100644 index fce4fcccc6e0c16b57c44e043465227962362468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ-G(7V~EA+sgurnOGir_tAC#IX`v$XO^!#WruKBFsCI<N1Z8xw z{8s-FzvIQJy$`O1zI1zWD^>j7E$+BX^SMDSXMSunk=QSK#=`g6%R?$#z8!jN`#~q} zT=l*0HuBG&JZZ7FY;|fZ+Sy}xjNOhwUiGKPuXu*CY15}~-M#zwviQ$DKUiM)8<?A` z-~X=q(lX$1)bE!+e*BR4{8+#6Vg}3Cs@UJZf6u>c;(EzAEiFyurRaz7`qTF(arrau zSrMYODr|MU%GLMp-!mTh^Jfp+AFZifDi^c1W|+-xNj&lL<;w}xYr`&IyLRpN>(|+N z`S}w?Zd>%Vdu_j+d&y+!_16>6rfG_G_w@EA_IzA@_0^%DKPxwE*|O#4%Mu2IV^8MB ztv8nuIBwW{t5C*k>7@r*S4(5V!or$PpFaIIZ@YJVGyCjiFZJuJ`<&G#D^5TCaF^aO ziTbLls)vsrDP@>Q&7SMmZsKcrETQLQbn=-Gg?96gOB_CN;za)K>({O|tzNwvXo&Tj z>0c6zXP#*|?^pk+@AWQ`Zr2{eea|bo&CSgZK6>;hZIVhvcA*S=_S?m5o|E24C&zjH z;<I5`Y;PE)JN@*U_3POWe0%Xi<7bUrw(iXwF;D(CZ{O}^-uE~9)v{&Fo>b10tJh}u z8XG)Gg+YJf6YpQYOiDLz-rV@S(#po>kB(;E_S+s^(QCyfJ*u<IatU;iXtVLX`{TzB zH8r(;9;>{yc&cWdRhz`c&dx3)EBlZqhU2ioxu-=wett}Q^rm{{<m9lFmzTdkf9@PZ z$07~0V*;*$Icr^o>>0!yck`e7cFqQv;8aUoBT7;dOH!?pi&B9UgOP!uv95u+u7OF2 zp}CcTF%W4R7+Dz@_%7KEOpHhxa`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7Qw_L3){a e*~Q6;1*v-ZMd`EO*+>BuF?hQAxvX<aXaWGQG;rep diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png deleted file mode 100644 index bd92b16549028cbc49be2f93cd30dff4c8163c46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%X`iQyV@Sl|x6>W7rQIdk=Fhwt>G?W#rq??~#^XQKzbv^Tz-4Jx z{$1SUCwJ?->hfA{TXhx7*>TRCGiI?=WjIR2^Z3a+x8C%6ef81Jnd{plR!P5D8MU*0 zkHH4+(|gX>ystUk^Xu(R<Gi3>Zg=gO{>U>dy4lPWkY%|}=>*S#j9x>wwIW%b3`$M{ z2dn+Rcuu?MD|D;yk9ot1`r;qvv1j#_LZ(meIW3f8!E%FP9#cN!{SOt@Pq!)_R^+<z zqGb2}n!@+@UM<hg-f}zFiQ`1m>IGArvVB8C{}@Vryu3QR-tYM1^C9)QZ(n}<_AUI~ zr%5KhFTYl)cy9V|NqfO6txq=U=Zn{DwW<I3Xy;CAiJJLok<&`7)~sK@c#2Ys!Sc8# z$9f*mh+FR-Ic-X+r*_}(!2S34hx(}H+}Y_Id%c6>`Sa&<=FSZiIqJli#+|h_Dr4=- z@4vS%(&(Duw>%}Xt+?-E#*vE`1+PUtvWP1XdN2NXue-~JYeJUK3(hen^gMj>gk|kl zn=aR|2fvQZJ1WyE@XReL8|Wm@Nk5NwziZ<cy;|xUd;N3Gp6?a!rA_~`H*^R%Ib`>C zoH@S6rI)$lJ*Q%T2<z(At1I5Gd@YrHrifuqG1r90kCWM&85LWODbIMjTA-<G%eB_; zb*UCIN=hYGbB`$t2+k=!QW)bhd-m+dfB*h9@eQ`Lv2n?^%|EQxlm2Y-NtfDvTTR3E z&!1OkEWxucdwZ1DX`_wT7L^*aFMa*&@~TPA&CU5!J2Vphzjp6`_ixAc^1{Nxi5Y99 zGye%RMR{KSbef$%tghnEkMx9Yb8G946S;zwnx`*&3-0`zmd>8LD>m-^yLn9C8`}@a zeOTAXv}gCM---qQzrK67@?}}ze!I%1^1fZGIL?`t%gpxF+_Kf>t=X|CrBoib>@8c* z&W>*m2%jsqw?2G@>ffJsS9;@p?3n(r_NHH*z2&1>7%+LOmbgZgq$HN4S|t~y0x1R~ z14Cn712bJCgAhYQD+6;Y0~2inBP#=gZ;zIFqG-s?PsvQH#I2!yzuZ@#21$?&!TD(= p<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cwc)I$ztaD0e0syqfqj&%S diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png deleted file mode 100644 index 36be4aa0bc6ed0ebd846bb081fd8b92e5c6c9fad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 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 WZ*pgw?mQX*0000<MNUMnLSTZuurjj% diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png deleted file mode 100644 index 4a02649cda796b8aa01fa0030e80c4bf60a4cc46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1348 zcmV-K1-tr*P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00do0L_t(o!_Ah<ZWKophQF$=zRY-R zGY(mB*+lXp5&{v)SVRi8oF&^Vc#?<(5(_p6@c_I6UgQao5J;>Lo80!<01JW<Gj?}% zSJ$a5x_dn1Tdcr{l+^0!o>HIx{OA8q9refK$9&19zi9OT0{}Dqpa7JbZ^RG?(*P8p zwI+%pv{I-!0|+4?A>h47L@-)w7P5@t;v)StMQaTqe0rp#mQsiad0FydJZ8^YOr$ku z1_KtiwtfH}0_$_70A2z=kDfk#VXF$Glp-|-lzRBnty}9C&YdHOG<1Eg#JjuJyng$3 z{g>_Shp92&E2SC{dhfZmxw*cwyiA$rggKQ!DaFe2GS@aY*S+@un9vI1%y5Xc7Nd2O z`R4|q6bh(CI5QmLy(fgwFwlXh>l%#F^JJi|Yw3c+R3C88u~(M3Jg2PdW6N;x?P*Qh zX)TT-oO6@+ru&E&VO$hEy?a+xdEQXg($)nQ5xfY}id1V&q%~UW6M;ww5CTcR&yV-+ zc`q{AKViU&V4b5X3dU8%pw}ZwQ_yX<7NNA3QJ#~RB>??2Ww^LVoMrp_4n-F#YuPOd z21;R_YXHpvP^#%nZKhe0kZo)nS%aM?Pt>?50O+MD*~W%HO$mx;&mw@juA4Hp9e2V& z=z4Sri1&PZ;|5<XE@GkxfZBWBkH?7j1VAfA97Wu?d6Nq(D<sAo8MvxzUhnJ>M-d{j zA7@4bEdyP>Mn%DkJ9ktT$LJQRgn)I9QBmMUP+BA2W3APBp5u%;q=Nvsy2e_I_kI#5 zv@s7c(A{n82t7p=-67IuA#FY1jYi#}awG$_2s^vGSm(&%c&7gQ48WxQb`3)-)nq>f zAcTNwDU=Y{D@%U8e_!>}bawB4R!9isRYh(si7`#0AsldlQuxkVO3}|U7P5?fmJzid z^&ya3%ZKrJ;({oONYWH@f(x_=DNs5$Q|gHbCq5SerHG=4rCyJPt*v8SP_~U^so$q} zS{FQj9z{w`80eVaFTvCw5&{>lUghl4(u@oK9*qbh6Bi^=#CIDTTs(W0<QNfFb<OMd z?;HAC{Ty9_&IKZj@|@ouJWyGZ%(|ee809%4g4P-lp)5;nivoXw3(B%Y+V1DQZxWrj zp#3p%0br|&J!=n*XA%M;(%hkO!N-q?2yx5Q!R5SfTu@bHNixGU-8?{xOlwVI3`rd0 zx{ft1s784cu~v1>UymN`_lsj(V4cG{$3Sbs)L8=UJkVY`HAeJs$i*}Te+q3W)u{i3 zK~~e88GWUo*CRECyexGW*Mtyo&at|>y8G_Un}ND?X-*Sqv#wsh&g$ywu5+#dAR&;K zC70LMZvX!3)q`)YTp5@+KJ__&+7*D>IlexBe)sa)+U>k7kq}USZf}!B5erGeLY9%l zG5Q!med-eLshnfaTK1}n%KN4SmG{)vGA_%b#q`-|Xhhjvvom1`cuqfJ{bvjZp3T2) znD_bz5cjN?h=RYh0000bbVXQnWMOn=I%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXV zFfuwYF!ti6NdN!<C3HntbYx+4WjbwdWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!T zFffO|9`yhK02y>eSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMn GLSTX*m|1)P diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png deleted file mode 100644 index cd5f31868bb4d5833d89256e1eed60690ace40c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2166 zcmV-+2#NQJP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00)mrL_t(o!?l;~k5ttez<=l5bMKv< z_Z?t%XSZ0zWMNr$7b07wtqco_X^8P9B>o4)5B5{zM_q{D=qE#(HJX^>3*si$7>g2# zEAoLxY$yz+skLfFkk^@=_qliH-h29CUf6{NZA(vblX>psoagyHujh)t9z4kZV+kP$ z+ctL(4k9Kdve9^aR!NE5Y|^OJJ`Ii^-}?2XOQ`OK)~-8dfFUIz%L2<nhQm|8e&!i` z&!g68@VkBc_Eahr0^dg&QeqeeQV7HyG{97fR4j%VAJ6W1{PAqLRH9O?@~?B}a$4&> z=VoTM1c2&|#fV2DgiNz#fY#{$)%^fUK`aKAHTBb#D{<;|=H}*@e(5Cv?6#D`Filk7 z-FG8~hcm!lU<)vC$J_wyc<eF!W)s(SDOW129U3ZLo0&P9dFrWt{rTsYlo%e)Sdqxd ziTmzLN5WwMn$2d*3;I9zg%ASUwu!}JL?aOl!@y}YC|4@vi$#FlT1tSA#l*xm6^+OD zKKaBG>F>^+JM-3?Z>m%(HF77&%jNRvUAuOTT9!ql(ct`r3%N5VPp<#_E3X_?mW9@O zTmAj_FUbw#<6BC_B5xf$c*m3j^!4{^DJ7ogQ7o1C{p+s_fTj@8^1vtIM<4B1D^{!+ zxK=38mrl<C_X{ER0NZak@1qL`4*cp$u}IVNZc5Tl35QIR!R5<YwsU9pmzy`wDy67a zt6aWvB{#ZeO({1$EmSm0BAG-8F$7#t$~2kxJb>R^otZfSe7<An&WB^6kN~JS4u?Ma z2s@c1Bm{=<FG*}jNg@&<H8==TPTjj|6|UnjS1hvsjW-0aTPuZ7iXaHMcWjKLZKJf- z2+N{;=+FsQDauEVJReIYpMUs;7kq#t&pl^Uo_?A_wThM!xkRrJfNfbUOC}K;H)bcd zZ_ft4PrY8}T0WoKux?!`H$8n+gu?_{Q!1DF=jqcDKxsf22GX{1U6*{dim4RUMgst+ zS|wkp;53^Ax2Os!C6Q2wP$B`AHMMeJ0H@KQSSs=QfdgH7Ln(xm7z@r(y4`q$5NNIO zf&kz5X|}?G@B4VZPY?u4Di=avDn&9HMXX<+%|7%{)^9ec*J@nL=X2{vM!NLEFfa^* zcr=O-A^=c+TVZz&XbnQ37bw*2XGwY?uG8E0)L?%<PNP9#ZjJ+Qzul#mN_BMvLBQb9 zP%8(}8m%=qM%M2n+im7UhrTx&MU0PUADo=b`kqIvRwG|1<i^*oT}0nGw_GZ5{);ap zfYfaR5Tg4Cp!<GdsojF!ZpVHglVRR<DV9piyz|bY%<l|3(axFf8CvT_?(R_gL4Y3w zh_*pLME~<mo3cTh{#v1s8yg-j=BB5Q3d`!!14zRlkw_qf2!s%U@_oOhXaQ-*16}eZ z!mx<mwx=?Eecjl<^X|KgVt?b94}yTyU3bxI+pRLxK>$KvNQogOrfGHuk!hNkN_8ti zFG2sngAcao>vf8yQf_Q`_@>w|%&k(nO#a(%<@GYu8beCLp%95k1eHt@vF%o!CX@69 z0ar^UYL0^+1lQ@4NwBP`OghcH<4~NN;}7q>cUyYV_FmVMXpIm8%QWeYMCjSP`9m=} z>f45aZ5W8rQNJgfosISMAf;SPKQ@+~*tjtp_&&9IoqVyF8(p(z$=G+6VHllR(8>WF z1XxNzB!X3~0&v$o_wd~}-vF?(_1pF5=MimBb?I$;sz05^bsP$X0)PDAgBHDMVsvg; zH_+>L4usQbQlSvaX*4cJZM#p5kN-@6_Sp%owE*M|hWp>m%%DsY(==J0NFc_>viCjk zKvw%cj^og9oZPzAt4n`-`Q@Xkrw7xr5bbJ$*02Hy+I^sQ`En}<Y}@|2R<HLd+y1S% z|Ndw7(*0g#QYlm<0+t1d1oZSwWzuN^&%^h9PMta>fZdUJ9NE)DJQ@WdsMPBK#M-y5 zO0|l&pzMX#`gA6f=}#n+%fI~cOM+XB+Z)%!rcI=mEyHUzX*3!fJ9Z3!^5MgVFim3H zw)p^+*;xZ1wsmVu{`g}f@H`TaJaQJ;rhqdSFJ9~$85#Lgs<(HQX<2=`U2Y5efMFQe zp%95=l4K%*ZJM}_L#0xoP$-bjWXRWQc)kxo0P#2gO~+{+)RsNh?J#U>9zJ|Y0nY-b z&YnH{iyuSoy6)-8$;nX>4pXnyxN`Ms?(46<THpEqAN%(Mpi3pWr2N`zoyq$NFe#7k z-Fp#O54;I{|3e1!rczo;NppUle4)Uh4?kR#>NVG;cAfHO*>R|~yfXRcefutnzr6Y? zzUvZr-jdgFAq2K*@{@F$)RRwUhgPqi9mr&;R;ygNcro|=`SYbyFTS|NlM-p$80`k; z&(F8A-?DC!g%AY3kB}0jLZQ~CTikXGDM?17^sZb9hA}lTFo4%=k}niEGCM1P-SqTe zg+hy_o?)6Df}3R_knIVqgp}Owi_lbxWIT@8upzs4d^`(Kuh(&0H#aggR5~*~eN=|S zNYg|}$&X%b!*08yGrL1Aw@$5Cwv52{snu#6J9bO}yFFTW%K!Gm_TMgjV!XQY`NjYM z03~!qSaf7zbY(hYa%Ew3WdJfTF*7YNHZ3wRR539+FgH3dG%GMNIxsNy;-*Oe001R) zMObuXVRU6WZEs|0W_bWIFflVNFg7hRFjO%yIxsgnFf=PLGCD9Yhrb^60000PbVXQn sQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$Q07*qoM6N<$g5rV+tN;K2 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png deleted file mode 100644 index d27379639b7c9e91825eb2031bb5d4ea4fd75bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1398 zcmV-+1&R8JP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00fUoL_t(o!|j(%XjE4ihM#lKxp#iN zGnvePBJDy%>LUIH2ZVw+LN=A`(v4l&R>{ttt8T2AQ5V?=5+R~cAtDTPY$cl{h$9$; zO0;NKQKsa_k=TiePG&Oqo-WKxqfxtXQoHb5-3#x1-}n2@`Of*S_<d-Ij~T{CRsUq* z|6oAX9|V99|Bb5F=(+(R1cqUt3<JY3)&QFlZzSfrE;ZN1bzPLH6al}Va3FwXn*TU# zmUzR1Xc(z3FY|0+frXbZQPGwbS`!IGM~48u1-gM<KwDECzzpykkOKzw{rlSU<OxDg zP9ipKYR52s`eN(Wy{(}TKA#Vz6prIGMOjKotyZI4F7sEZ#2*hI-oSOg(UX(Y0K#kA zqX)XXopd@~$Y!&7t@XTae#~dH*?c;kE*$9YcD%Md3J4KuZT)WFzI_9wQfX>*WJIk) z>DMepdjI}fC=}W_Ha2!dCF1dJpVv!QPtV4C_wF$_H|JKXRb1C?+D5E*nq^r;B9X+` zJw4pKd6Psu-mQ|!<gQYwL@Je{R;yu}CQ{0EN!>6EYPA}vRElfYu8~Y8cd0-i(6+F! zKs+92c6JuSFkZFH2V`6SUcb@KLI_;fC7Dd};>8OBfk2xwO_S9n|B$jvDX}aI%d&7? zmrA9=^73+nv(E3jF4bxk(=;(0$H8%&hU+)87eXMVL@D*&>PRW^dc8!WQBIyb$@S~k z2?m2GrPgo@A*kyb^~~Q!UMFp7X(1E}v0=l8hLLxP_x1HLJUmP$lfiKu{C@vy`1*#d zSHf6aTr6s>DHe;ErrB7-I%zBx<Mip%96Wds(=-W(!+5=3q?8Su&*vi+i_zEDM>d;f z&z?PO+qR9~-d;kX5SC>%5;RSdVzG$Un#IM%qT%s)3R-LO`8>95V_6nTsRn5#lOdPO z@%;I7IyyQS85tpwNDv4F@OV7<{r*PTuU@@MXJ;pdVPM-fg+hT`E=MpJ#57GT%fhy8 z^7%YkYdjuLL7X{rCU@b&g|Fu3=D2g`PGf@vgF#N5IKh=GSLp2QL`q4yTxNWHoKz~s z`Sa)T`~6s!#qs0E85$aD;ObGSRJeQhF1K&rMoNjXa^vpay_-lR!l6Tleid5lpWE8n zKJ$1y+n+vtN`HSpU0q$AJ$sgm7ca7N=T4Mrj19Q1%j3t7dGzQJmo8mmVq${9!9jNH z*zp>!j-8*MCmaqlFfhRI@GwV@9wiowQK?iWW@cvo6k6-=fgj`X__UOA`|Rv20Fg+9 zEnBv%*+BJnDlaYZ@WBIY+h+6T&1+|gRVJpUrYIB&03?%19LJd`7K`n`4?=4#fKg!Y zsZ*!&=gyt;%sqSdxn)`L6}7jWHmvR!{Vv=pe6?CFM#AAjZ*Onq*s)_@0yls(w=x;D z*6mvBv30ls-xXt8>-Jlj42CZnWxT(C8b||&fnRtvJTyCIR=5uX>GA&lX<syoxPSRF zPPIyHX$iMhYu+6Ap5-u<LV3MN%R&h$kzOx`Wv##XDidPmU{bH%1!A49;D3vc{$ujV zz~2EDn&DxPf8+oF03~!qSaf7zbY(hYa%Ew3WdJfTF*7YNHZ3wRR539+FgH3dG%GMN zIxsNy;-*Oe001R)MObuXVRU6WZEs|0W_bWIFflVNFg7hRFjO%yIxsgnFf=PLGCD9Y zhrb^60000PbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$Q07*qoM6N<$ Ef=$DQ_y7O^ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png deleted file mode 100644 index 2f0c72d6344de0ce787f192ce37988ea2174caf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2435 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png deleted file mode 100644 index 42452e19de38a60c485e5c5d696f7448bcd2e383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmV;c1yuTpP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00hKIL_t(o!_AjZY!qb}#(&>8-^}jp z?oev#76>)bctJTxBUEB29>BX0u15X^r3Vg#GoB$Pv<J8$k(iixlY<vXOu*J`8w-K7 zp+GlMf^?u+*0!^M=X*WutdMwU3l@BmH<`=K^Ssad=le$8`r!v&C-iG&|33&Y?FR** z)T?0?LD~Wwt#KR&trSWr5P7L@FA1d(5v&Mt9Ai3zfHm1HY1c&ot4#k7N43%5uf;`> z$w`3qz(rsNh*vpg60Y?!If(++d)e&o+xz<RK`w_Cp;50tbK+%7lJu1VT-ODqSeTz@ zq)-SOQPfLr&6<k`4jhQL_4WNab?45{vdWkZ!&|#|@4o)U{{3+-2rkm!-#@cw@80;2 z`}eP{HhCM5W@m4Gwr5YgqrZQ~<h#2!%+1a5R!@%reZQSPUC^o2e?OAeV(WE2I&orK zcRv43>FHCt^Z5<NHHKQV32^+zxpM`-s|%gfYAFdT=?<|L+h}n8+_}OBUww7F-fWJz zu8XlEXwT#6rAr0BvlAQ#$Czc2TWg7vSXzOgjloH$DP6i$(4L1CX$cUm@iH0KI1WK3 zgP%^LmneZ1A*xm>&Cjz~tu8GhS#-v6FzGa+bxVLGV`hwDt?T0N-1#l=`7)jTu6*Un z{%XCxJQornT5ALl5sbB#IF4IcH5vc|TeoljuxI1O_xyAkt@X2p6v0|crCMd?!Gnp> zk&yx0Xdo-y6-r^_7;7zBL=X|;W|O(OIYi`aVR+cTUo2MU%Vp}d8qFl?wHou~GWUzc zN?~}|7m>41=H_U&ns`NM^XfQpz>2UCMF2;E+QCDI#=|hA5=Ar`4H}IGl_(+%Lk=D~ zG!E2&ql;05U7-UCh~t>pS~Q6gr4-6_85<gkfPG&cInwJGGh8m0{}E6wmvM|4{_@C? zUSQwo&`?A&vdblImq0{XlhIa!)@aYe4Fbl7h9-c4Yge!KP8W;QrBaDfsl;@#IDPHv z)m~s=Y-ni04FVj`YaQb&$X)?$=XJXtN-31qIO#Mdmt*YAnG3*=x2LAm-Fx>cckkV+ z+@6|Jz>i~R&Rj6L943`Q=@+<EwH*LV9LLx=ZYgVvNTrC=X@H}CDm8le@ZoU)Kb3j| zII7ZVoR=V1fQ{qUg@lCIJa;Qnj)U=iMh6F@t;de-`}*X`(d6~5ql1Hyw{~rde5L1w zQs{)MT{bNuc#eY!0)k8i*KyEVV>}P9ql3}G!3kgh7#JNKobWn2a6AvKbxZ6D!c8`< z2?9LFX_bCQfB!?r^SXbze0jT!j~AXie#}A?VXZ~1C9c<L)@rSKrBbb?dx7k=Qsgoj zy54*fwPnk;Pj>AZiR<-Qlk&Xj#Y&~y&1O%lEn7~=<Yb|1VF8luhzOFb*%z|C4ab38 z4z+31HaD9+U8_{c`u?;MksJAZe%;#6&aUFj49!aA#R!%O<NLhb)5FtJ=}8!dj|^}# z48!jCH*X#ZeE*$PXJ_|{cl$D-l%iIx&bqEU9fsk%z)dA0>w)V)epOTdH$vb8=hIAP zq37d|zX#R<T|ltP#1Da=fW5<~PW`FI&z~o*)v(Rx>i-qBp;YU3luBVtvejN0`Ew$a zQv40$-y^~XO0K{F001R)MObuXVRU6WV{&C-bY%cCFflVNFg7hRFjO%yIxsgnFf=PL zGCD9Y_Tr{V0000bbVXQnWMOn=I&E)cX=Zr<GB7bSEig7MGB8vzF*-0eIxsXVFfuwY zFo(Y$^#A|>8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1002ovPDHLk FV1i^lrY8UZ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png deleted file mode 100644 index da2b066bea54874ce51ea03d4585992f0d25b2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 zcmZ`(c{JMz5dJwf?v*;W$kJf7sS3X&u64AUO@t6Mb;J^_v!s+t2%)GWWUZo<HZ*lK zly&ylu2{6rT6IRHsuoqtR%y4?Q7s#P?jQT+ee=zmneWYe^X3i5&4r*OuO$xvfRdvF zjx1*QK4c+cPiL{##RLg(BH)0%eJg9LE)Zwrq8z;GVuffQ5?Dk@8~{l7IO0yaQ@RF= zU7g*%)OwRQ+dI}4Iqszg^hqxmf#=7thJ_lAr29Lxm*yTQgpsd?C>9yk*_3zF%#7sx z@*3X4nASA%G_PXR4(Crs)!W=uJUy#~S^Kk<3Z|Jybfw^T3@qaN2NPzPL$;gNi<})% z<Jw`}8N|-s$rQf?D1iN4$CK}7Cc!NX<+9Zzb)^v>i8Fo&v1NsN?mxk0M_}5S5zQLE z`omL@RcGcYHSSx1@tWh~YIc|?rR!3uNI$wqLx`DK2EZMpye%HOawT0gSJe>D_f5*@ zc-da1QRN<iiqKSk559LS?BT2Ui0+3Gt+5|o_m{O*&R74PshsTQ^K-nYE&276eCsnj z%LCooi&|7Fl}^ajR!F+^d27S7K=huGw7a`V$c4zX3jSKhp<Aqr2mXn5%9gZBT7Bp0 zB$VDh<b%^tDH=$Op2H@f^S7)zn(WZ|&+B0Vm;OzOp&3mr;*@nPTuG`~LSnfkvvz_^ zsfl8SBEHN`-dh}KKM|q<Vck(1GwoMauC8Z8Qn`o5{fXk0koEX=PPo|}D5nXuDJ`mU zyfa=47#Ij5DvOEfC*8cpxrN=~CH8%~w5caC(wW3lzTW<$Yamj=V4)W9cz{2;z^<bd zTxC-f7e~q?Q%v3@u1vkE_c;>uk#>wf(gphFu+lEsc?_#9P0dVhUmW1sz9WS1G+svF zHP~uip4SsT1fenJ69+vF9jHfSB|AZ!A>XY8gw1Tm^9ITb1*JOLIW|Kf+1VMA3uL(t z!5@4TahQ8=GJwS}tq|7-7Gx7|X*DW#=D}qrkQK>R!r)=4rLTz9g4QFxBK}gmyP>+_ zHF^ASR}9r9hUp3zlrj6)CbUjL*$y<#xPJ6<D)g*I5JbjycIyU@XHF6k6f!!wDcJIq zs^!XaEY^#Z`T4Xo9;k?WpkJYOw+a`Y{w)++cH=O69z1SoDYrhYqZw8*7;<iH+h#kF zHyIwgvGK$KHew+zhFN}XR`5%(--J93)0LH{GJSVs{$j5Tq(Ra`$JsTTfWh?aLq;f+ z{0(&+jPl6s8x4o)E@UeLEU0w)1Fh$`We4xdhQrD%0=#bst6g0IoY69}%<H*1H@H4u z0j`+(?DFj*mo_W)=Fu95tY^+Ry&&?@$h{VNUxy$Lb$WXGmLuPWz7v~XrJHW&*@82p z)D(7(n=<+ybL>&IB`|L?(Nx$S9ttlYk|ZzLojH7sYYNjEA*miUU{}rIDwnRL)r2AV zQ1M+R37s+9^MfTfX#sj)K2Kt3Uco=O$*Z%a7tl#H_gU>l86n&(T1OV4(sbn|Cp02r zZ~gsTbD1wsgcO!ijlU_dH<~c{(Z}RYO$|dhrZPUMx=V7XKR)q>D1_?}-cC<l=nnY8 z56Gu{hdx$FW~y?!8&-01NRut!e-5}v?~cLd;^M0L85xPYEz1Jem|5PkpkH}o1xDA) zXV&-jz7DBt(UH|f)Ym<Qu~Ex{)r3d3<%KlJD!@T1eR&skIrsi>#VEf>N~T>ZR)Umr zucy01Vn(XZ-h}#z>g?Nsbu&EhX?J2z{TW=EEE+XZpf(D|&+8{UrbAOtNIb5B=_4Qo zN#ZYOz`#=&LH>+jtH9`BF#%{0g+YSmNHpk<LRo<pR-oxI5N!p58?UMy|09Tq3<?X0 z|9?Sdht5Z_Ky!b>>BtZU(?2>GU^1D;VHeKR1O20djU%Jam8{xmiJJgNybG=Ydp7l7 Do<4_T diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png deleted file mode 100644 index 60618a5b5986a204907ce86bb39e949ab7ea92a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1732 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 aVQ^(GZ*pgw?mQX*0000<MNUMnLSTZBt2C1U diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png deleted file mode 100644 index 87073d220159c797fc8adaf8d7bf26d7872c8f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 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 aVQ^(GZ*pgw?mQX*0000<MNUMnLSTYS>nE82 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png deleted file mode 100644 index d3c13582d92512a755f918505c527765401b8622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmV+{1=IS8P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00c!zL_t(o!_Ah@YgAVh$3N%Y`{vD$ z_jDTa9HU6FbR#ujx`-C(1fvLD71FhfEM1HLgi>5)r;8wn8=+YUQo68EG0++@5V}!H zsx>oFC%<Rr&AqpaH<RWEwvI`(UwFLB<8i*{e9yV(9GSj#i;oHKqq6@W9MGME0Em1T zR_AaX2bAZbl)@81M8LTn+5S(6;GDxchcO2INffcKP$2932(ZWW>m2nYVR2;z+{_F> zA21Hg0%nh&*)~_7o0&m?K0lxT?W>a~4}@U|&XKfQZ%xIfukVtsc3lbJ`#y-Uyu8eV zhYu^s>gtz-Q8Yd}I%>`g4^PciD${O{F;}TfpBWyW8XX-qVHAy1E|+IVMn=rb4?y0* z%SvT>WMssY%jH=e$MK>0SFb3=@f+aeuh*_kmg1Nr7cSfd&TkR)-k&#bep6joAZfL_ zD_Co>%_gTVUmh&Q@%OJ@zb203Lpl=#Bxx=$JsumI%=Yx)hao^?_}saqr&#m>YKx2f zc<&y%P#_RNS=&|hJ8Q8?!qnK<<cW(HFD1@B$OHkpWejM|n~90ZVBbEB2(`sUoO4+q z__|!S06*Wq?*R{gA0NkQji+^24&WS~)~IZjHxm<+XidwQv=fR__}MI8qd}|Lq@E-I z4Io)wTT>g%oT@jQD5dDSXSN%iZgYuB&1!2c)>_2#5Rvqq$uNE6#<z!xMV#*&fY*2K z$ctJH$z;IW!3b${ba=IM4(HrIb3g>;`}jeCABK3o4}c$rWRir$+MUmgb~|>?p^dc| zYd1?Of+&Tj6t-P#o>Hl7yD%#R=<sT`D6lm)w~NDR-F906))g>j8@T`?f@v!tBI!4F zHn2Jz#+c0tY)t`e!j1yFxi75Sbq>!MgEeMT5qcu{TBpOK{iE;u_*&z6UiVjUn+Jk5 zCfx^Ud((-~6QPjJ67S!SE*2>S0RXyKq+~7Cg#}jX_4U-e5BWxAJ!@@x9h5?O9$G1) zT#nq(&|T^8H-S<FN+JFICO0(nQ<Tf$y>B0A2dI@ww<2p(1+tk8I*JHaS6N<L!={~( zBS()i`|R1qbHg;7;9R=CbqQZ7qI@15MPxIXRN0lKrMW^7lw@FF&^>xI>CMftwzPzE zPT0ORXJ>EU#@8C%<t*?-2=jS*;}{tj7#uo#mX)QYIi1Vpp02E}mNJFHRT&t#?53wD zU8V9iJB_}c9(1A5eLGeP!Vo!jY%o(OTuthA3i<p~an3#NjpKvGVzKv+=g(=at-W7< z-w`^O<I}^3snu%p^VRB04Lq5zR!d(TKmH)f<vt6F#gcUnXYHo_y>m;%^VTc5TZjma zdVMYkf~WJ<>gT`{anAJtQ^0{e4ShQ*zzKCepI<(5`t(iUAkYg$drbTS_yPFtmn&EP zl1JCCV;T+YzpUcB4v};_3IepwW>G=#;m9{QAtL+@!*Q}2;@&4w0000bbVXQnWMOn= zI%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!<C3HntbYx+4Wjbwd zWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>eSaefwW^{L9a%BK_ icXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTXj2w2Ae diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png deleted file mode 100644 index d3c13582d92512a755f918505c527765401b8622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmV+{1=IS8P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00c!zL_t(o!_Ah@YgAVh$3N%Y`{vD$ z_jDTa9HU6FbR#ujx`-C(1fvLD71FhfEM1HLgi>5)r;8wn8=+YUQo68EG0++@5V}!H zsx>oFC%<Rr&AqpaH<RWEwvI`(UwFLB<8i*{e9yV(9GSj#i;oHKqq6@W9MGME0Em1T zR_AaX2bAZbl)@81M8LTn+5S(6;GDxchcO2INffcKP$2932(ZWW>m2nYVR2;z+{_F> zA21Hg0%nh&*)~_7o0&m?K0lxT?W>a~4}@U|&XKfQZ%xIfukVtsc3lbJ`#y-Uyu8eV zhYu^s>gtz-Q8Yd}I%>`g4^PciD${O{F;}TfpBWyW8XX-qVHAy1E|+IVMn=rb4?y0* z%SvT>WMssY%jH=e$MK>0SFb3=@f+aeuh*_kmg1Nr7cSfd&TkR)-k&#bep6joAZfL_ zD_Co>%_gTVUmh&Q@%OJ@zb203Lpl=#Bxx=$JsumI%=Yx)hao^?_}saqr&#m>YKx2f zc<&y%P#_RNS=&|hJ8Q8?!qnK<<cW(HFD1@B$OHkpWejM|n~90ZVBbEB2(`sUoO4+q z__|!S06*Wq?*R{gA0NkQji+^24&WS~)~IZjHxm<+XidwQv=fR__}MI8qd}|Lq@E-I z4Io)wTT>g%oT@jQD5dDSXSN%iZgYuB&1!2c)>_2#5Rvqq$uNE6#<z!xMV#*&fY*2K z$ctJH$z;IW!3b${ba=IM4(HrIb3g>;`}jeCABK3o4}c$rWRir$+MUmgb~|>?p^dc| zYd1?Of+&Tj6t-P#o>Hl7yD%#R=<sT`D6lm)w~NDR-F906))g>j8@T`?f@v!tBI!4F zHn2Jz#+c0tY)t`e!j1yFxi75Sbq>!MgEeMT5qcu{TBpOK{iE;u_*&z6UiVjUn+Jk5 zCfx^Ud((-~6QPjJ67S!SE*2>S0RXyKq+~7Cg#}jX_4U-e5BWxAJ!@@x9h5?O9$G1) zT#nq(&|T^8H-S<FN+JFICO0(nQ<Tf$y>B0A2dI@ww<2p(1+tk8I*JHaS6N<L!={~( zBS()i`|R1qbHg;7;9R=CbqQZ7qI@15MPxIXRN0lKrMW^7lw@FF&^>xI>CMftwzPzE zPT0ORXJ>EU#@8C%<t*?-2=jS*;}{tj7#uo#mX)QYIi1Vpp02E}mNJFHRT&t#?53wD zU8V9iJB_}c9(1A5eLGeP!Vo!jY%o(OTuthA3i<p~an3#NjpKvGVzKv+=g(=at-W7< z-w`^O<I}^3snu%p^VRB04Lq5zR!d(TKmH)f<vt6F#gcUnXYHo_y>m;%^VTc5TZjma zdVMYkf~WJ<>gT`{anAJtQ^0{e4ShQ*zzKCepI<(5`t(iUAkYg$drbTS_yPFtmn&EP zl1JCCV;T+YzpUcB4v};_3IepwW>G=#;m9{QAtL+@!*Q}2;@&4w0000bbVXQnWMOn= zI%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!<C3HntbYx+4Wjbwd zWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>eSaefwW^{L9a%BK_ icXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTXj2w2Ae diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/imagebutton.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/imagebutton.png deleted file mode 100644 index 162df9a38bc902c0fe4f471ee6de0673bba03d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<3Uds#}JFtOD7w4KMD|OJzwqF!@_e+i6uT?P=w{}nm^oSWn96T ziBk{Vx}Rv;x>l^|?G?SlV#X{=MjahDZdhfVxtU}x7X5}RZbyv8o@%}KweP#WR`sSk zi96Y(PdJ-4-$+1ZzEMNwEVc%{22}>T8Qu)BmrZy%6nA;8{BF^=-=ofcQlU(}=F)qu z0<jM(?-d!%ykdL)@W+ZHU#pJZzb@qD;PvzO#S+<8C&u4@<=&S4ZeKTL)%4S;IoqQd z8WJTK7$zxjYO3-a2HK#|dHQM7<(Dl*J9(Cd#GX$v@|eUjYuUj~Iy065m7IHSyzaVo zNo@OL3kkmV6(L#~TcdWw=mFKt^kMr@`@h&~ZqeqO1^e%BzWj1S*lI%_=e+IFa(wLH zs%&p<^S!-I(p9j0w`}@m$=dt>T?AOxuX|l&H-Gc}_m?;6h;_R%J*cpGmSB*eH$8dr z#e}U<she*;N!qyJ^)8;K2cjz0i!Z+5J;2WJ>~p0U7i-kC(&N*z`W`R2bv(nQO8F+E zXY&*8lk@wN{uF;}U7~o%V2`raR4@L&uQj^%F)DZpbzIFVJzlo^?gW*S_Oq8xxnRQk zQs~voFH?U0FH_F-d96QP%UH<V@g@&2hE+>kBT7;dOH!?pi&B9UgOP!uv95u+u7OF2 zp}CcTF%W4R7+Dz@_%7KEjC~{xx%nxXX_dG&*!*NZ0@NT0vLQG>t)x7$D3zhSyj(9c eFS|H7u^?41zbJk7I~ysWA_h-aKbLh*2~7YgR}?n@ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/radio.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/radio.png deleted file mode 100644 index aaad523fa50f7bdee0499a2d2b963594ce8ff41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ?sXwV~EA++R2XHQRxz`^S{UCCkg7GSQ_c#a!QAdsVPD8MgN4z zFZ?_f1};pF0xgmJj<f17tZUMKndI?p@&l#rl4Vm$%!J*oyI->^Drmeo^kZ(`9$)dL z`g5)xudLW#T#;)ulOZAP$G-mezbob)ukS7HyPJ1BZ@aS)!^|r(ER2Z~LT!rw%}+m_ z^t9+?*=|>%nO9;oL{2;{nlY16cLC>>Z~L+zn11M1`MK|W(#C|{cOU)S=P%K=@~2@z zq}J4V{celhClyU9T72<E;L4CHzL;4zAIIpqOSJvi$6qM3{J-IY+~t>dPWcjdY2uPk zaqg4um0QjAexRE$spGN4Bo$9a^{ZK57cZGU)$1u^0neXp*9(^hRVutp-5T|mV~&TC zr_hYEX_^ntCKyzxo@DMj{dCi;v&(?!)YDB3$)5Ls!mN8H9?3C#Jbz!4!U|KVUhV^o z{;$7U{j8Z+W9Pp&j=h3whuh*pK^8|Ty|`QHBCcPm_DVM-ZJZIgHY~?X+H5xO>Z@Hq zF5`=@Rpx;rj0!Kc6=t8Ulj3XlXSntD+u0hs^o<c4B6Mb)f4=4RTj_>}1wT}P@?MOR z&t+bJofWnA+w;GFYp<V)^R5cl5ZPyIZ?DfZXYSmye*XUVXU=3V$=-VF{p+t%&t-g; zU*6IgCgOViK(|GoyjPazujKV%GROHF#RElRy|Yw350zLQefRDigN22K!Gmz)-+VV1 z>>1_1MgC<dY0Ovo%lgM+rVq=5nUa$v`j0cs^Za$^{rCMdBE@$wtvj>kHjwS{i^oQ~ z|M;YqnTeB6vUplNFF03NQIT<gvw)>$|NRGCI~eNr?cF=|d1b}C@1hgbUd>Tf{r`K- zWn;hlLB<E}fAdWHaxt(}2be}xOI#yLQW8s2t&)pUffR$0fuXUkfw``MNr<7jm4Pu3 zX&V?>85sC3*$qs;NE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKio Ys$PCk`s{Z$Qb0uvp00i_>zopr0QMk!Q2+n{ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select-rtl.png deleted file mode 100644 index 029a0d2298467788266dc0a231cfe0b874fa626a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW0R+gV~EA+rIR=2NjVC%?U&uLSNO%cMH?<T2)-21?KsuyUH-0; z|2L<`<MM*%N|}GSI9{e$C3`nKDNv1ZZQf8EQx+64VaJ{gm(+7N-`~I4ID6V@)#Yol z1X$ELdsfX;VX$DAW7IvVT%e~^WG&Zk9Qrr3?PbZYXqUW~U#nKF3ST8P<;kksZ?m?> zt!K7*^S#>Uy!ExEt8%tSo6Y9keV6a~o#Troo8SL7nSHiBYHgc{D`UgfZ|5Wyv%9z~ z*4Wj(s6&C{L#=$a?zJeJ^Uf|OKF`UT_q_eccE9DHZ)I)W$FwB#m(}dE_crNRt4Sv_ z2nhBVinx9ZXNc){TP**#?mzc|6r-P<G4IQ)|K)ylWUArd+q(Ap>$f*=-aMON@Pq9_ zhDqKfle<>W?UqU>uL#j%uz0?ri-RFiVp8hO5(}9+_K3A%!P#$@H@ClTPpr5jeEcJK z!OB%r7<cqM{?V%9`L6N#{~1S~0~vu=xkGD%u700nv+`AIq>h-y^Nj7cm+pI7V^=RO z_>Vz!Z9;cZi}Ma(6seZDMwFx^mZVxG7o`Fz1|tJQV_gGtT?3O4Lvt$wV<6HtFtRc* z@LjSS7=1_@a`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}D ScQ#T$MGT&<elF{r5}E)<&-^9; diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/select.png deleted file mode 100644 index 44b02b9d91ba70927c0baaa85dafa30aeb2ccb5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW22{wV~EA+rIUB(-AWK?*#EzwcW0zilEYn{P@^|u!EHS^H+_~n zDQsZ&euA#^?kAECn+}NyDNYE|6W-viBJp`XpYAlHT{17D_ZORg{yC?3(TmD^kxYwM zrE@aqHK;oje`1O0=(xk%et7Mwcb^U9`umlN+(leht-8MI)zc?dT}rysPN()AfBZOW zYtsJv#j`p)0#=4(m`Gj8GVL*pJl}qp@pz%!>Z@9lR5+EI9$V~K*Zq3e6faeq^M}9J z*4*DOE@*lzWyiW|{t3%8kDB-z9#c?~NZyz7EBvDS^2?RnO%JRO6z!~;?V~2o;5q4! zXo|I|TK2)H(|OyOcS!QE?ca6xoq5B>j4#qVPO@B!V&G~$H2ux0uC3FKCViA+Ihect z`ftVyIcE9hv(HwqzIrIiJJ5yUL#=!=kNU%vLZPX9<NAO9{pa8Cw#<6n_18BSa3203 zx+5s`6GKdE;twyG<NOCs*T+2a1~OK>TDr<^^{aHhd7)n~ok=rZvvteuw=wyabN%dH zTkQGebG`>n7d8XNkZOr*L`h0wNvc(HQ7VvPFfuSS)-^EKH82S=G`BJ^1|n?(BP#;~ z-zB?&v4^A~H$NpatrE8eo1e@_fEpx0HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dB SXCnnv#Ng@b=d#Wzp$P!;&HMcT diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png deleted file mode 100644 index 8a15d68804ba021c3b0c1ee551fcc547a194afee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<84nD#}JFtOD7v<2M3BAuYdmS?svI<@hD-bO;dDsaVQ3FR0#2v zy))+zQ(mLe55q@ld^cn7Dz!ce@^W>`Xy*xKS<WLF)RM+gd2iqB#|c8KM7Ml7)L(6J z`2U~tmNJrj?RTDZuDa*J@IdYZ=Y{MdCL0rNZSD2D?yd{J`o^lqO<CUcV)nM}+l@nO zm#zA^pTX|T>iWQ|>e12BkpU}11SWnzw=>5;;=!E9=XXjZdt4R?E&W>c*M0x}`3%3W zMfDi6F=Xo&$_TeT6m3#CP|g3r<g}5Qxw$;UlS)5>*=MIsU9+{mbVI?yRdzhief|Bm z2Xf2~pJAQHyd<-0tC--=+UrUzjtw0NYh#~<PCa0G{MfN$+=79jxz+C_`;W)O#OTbG zNbXp~k#Lc#TkK4U)zZr^YxJj|-mP>=M}%w5x^;1dNj;7(-`Wo+vdA!`M7Ev$JjZQu zVS0Z4`#+mb+`4ru$R%{9kJ^f?qO!7SE3^0>%sFiFJY#Fr{PME0ymG6#pTB<n8Y`H& zEYoXago>xoA%hgV)$Rw@{``MBac!8jrU+N$?z?s#lTu1bO1^9i(VENT8~W7f-tSZ% zn{{EU<6nNQ%3rMUidpLTMy9N_f9FSA*xK0CsIRJ$uVB8j_nBZFbKF0c+ATJUY0K*V z0pnh^#5JNMC9x#cD!C{XNHG{07#iyunClvtgczDz85jeRwt<nAfr0Om-N1B#q#-vy zB{QuOw+5S^%twG4BtbR==ckpFCl;kLl$V$5W#(lUCnpx9>g5-u&wghk1ysb~>FVdQ I&MBb@03z`pzW@LL diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textarea.png deleted file mode 100644 index 58e0fa020306a7eae99e4335e5fa52ae1e64dfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<33Lp#}JFtODFBkl6Dkn-9K~gRgX=3#BT2hQM|I##Dh^f=GfHx z2j4HyI-hXoHEYc7ki|C|Z>*TSQIWA(x>1VN)G53BuVto^x}s9&hXaXh?`odk+gW}l z#pt2#X^*POj0YGEShg%|JJ48qZmzAZ?bAuqW@ng4J-v3z*lKQ{%3OxU^5^EOO#Sby z{`>duqI=a1-k$PNYsLEe`%izY__HZON2BY}`DK#L-{-k4E{t3mQs6mhP15^imowR9 z#9bSU^KuWb**fKPYLkM3Z*a`K=L{mQ6VoG)eg0gW)^jjww^_ABn@b>zgGAen(3#hw z<`h@FFFcpn6UqJl&6|MLR}GHMaSQx%nc+Zn|JHA%@$C8e`N=(&ckkYP%jVc{c2iF2 z%PhP3$vr!{njWk#kU4($_3PI+i*_DamdVwy#Kd#b(j_GuBNSeWuDkwv|H0;i3D@$r z&yJjySg-k2V#WGp0a{a6gsnbO_~+L%i@x1|>*~uYDsEWW+y9@nOw(lcS@s8eRa7QE zw_N?%>p-T6Ykb?`hw1PCZjW34y)Zjl`{wQ2)eoLMd&acm|MmO&Q@xl%)`qca@Erbq z`}S>a6<N<+lfP_Q_)bN(mi==_xN?Nb|5L!|RV{IiC`m~yNwrEYN(E93Mh1q)x(4RD z1|}hf=2iyAK%{M8WMyFByJR;o>X9_$=BH$)RpQoQ^ON}qP=h4MhT#0PlJdl&REF~M ia=pyF?Be9af>gcyqV(DCY@~pS7(8A5T-G@yGywn!^Crsx diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png deleted file mode 100644 index 054aab56e1c03766a98d8b639effea3aa1b089fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2&c%V~EA+rIQV_l>$Xt_gB}ZrLkxqyyo?R-Df82>71$Y)9z2S zx;rgVnl~qrhtYMzMiK9inQ8ZKrkU<mIsK^Wp~?G0$9J}W&e<7Lbh5?fygt*6CEW}R z*AECUF#gICvwQb_-{qI1F8!17RhxY4?t6{XL6h=SpC0Is|MGs)r}`J$bi7*^X-xRC z;bzVRk>7vqx{oI9k6QbvY`5ytFX<U+DUojLuUBhyH3=jiIkRFF*Mrkld;JbvpCY8# z(!X-{#T>It6R9H-oTahz#SGm-LyzWdUwwwB{J+W9$JMdde_TxBXk5Ko+ld2c3<sm} z?<)rjgS_51gspDfJvmkKo!`9YJFL^bIrh3eX0ecs6k$#KcH?D<!RF%<k2kE+>Qn!h zxBqV5{_vj#7JFvh>|K&S>0X2F2eu1u%l^kDZk~NG;lrs4n|<tY{}y-ZFTVIf&ePfR z{G>-StEQQ3`B~%V)p;<X;M(>%XVWg;{mHq?NMF*olgAYp3#uiq5hW>!C8<`)MX5lF z!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7#t@Q*-29Zxv`X9>Y<@By0cwy0*$|wc qR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosASw5re0zpUXO@geCx_;r7%3 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield.png b/platforms/android/assets/www/lib/ckeditor/plugins/forms/icons/textfield.png deleted file mode 100644 index 054aab56e1c03766a98d8b639effea3aa1b089fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2&c%V~EA+rIQV_l>$Xt_gB}ZrLkxqyyo?R-Df82>71$Y)9z2S zx;rgVnl~qrhtYMzMiK9inQ8ZKrkU<mIsK^Wp~?G0$9J}W&e<7Lbh5?fygt*6CEW}R z*AECUF#gICvwQb_-{qI1F8!17RhxY4?t6{XL6h=SpC0Is|MGs)r}`J$bi7*^X-xRC z;bzVRk>7vqx{oI9k6QbvY`5ytFX<U+DUojLuUBhyH3=jiIkRFF*Mrkld;JbvpCY8# z(!X-{#T>It6R9H-oTahz#SGm-LyzWdUwwwB{J+W9$JMdde_TxBXk5Ko+ld2c3<sm} z?<)rjgS_51gspDfJvmkKo!`9YJFL^bIrh3eX0ecs6k$#KcH?D<!RF%<k2kE+>Qn!h zxBqV5{_vj#7JFvh>|K&S>0X2F2eu1u%l^kDZk~NG;lrs4n|<tY{}y-ZFTVIf&ePfR z{G>-StEQQ3`B~%V)p;<X;M(>%XVWg;{mHq?NMF*olgAYp3#uiq5hW>!C8<`)MX5lF z!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7#t@Q*-29Zxv`X9>Y<@By0cwy0*$|wc qR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosASw5re0zpUXO@geCx_;r7%3 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif b/platforms/android/assets/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif deleted file mode 100644 index 953f643b60032c36ac92590950577c336f133512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmZ?wbhEHb6lM@&n8?8JABg_{Z)j*>U|`SzVg`^n1Cx_W&+?fM`5zlEy44+e;LbT+ zkH8h7N-kQ@I;_|<mfqfeZR_h9DLc;ZID7hMoK>Q}>&=&Wsxvt_U!{00zr0#2QD@sN HCI)K&$9F25 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/af.js deleted file mode 100644 index 27ed76df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/af.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","af",{button:{title:"Knop eienskappe",text:"Teks (Waarde)",type:"Soort",typeBtn:"Knop",typeSbm:"Stuur",typeRst:"Maak leeg"},checkboxAndRadio:{checkboxTitle:"Merkhokkie eienskappe",radioTitle:"Radioknoppie eienskappe",value:"Waarde",selected:"Geselekteer"},form:{title:"Vorm eienskappe",menu:"Vorm eienskappe",action:"Aksie",method:"Metode",encoding:"Kodering"},hidden:{title:"Verborge veld eienskappe",name:"Naam",value:"Waarde"},select:{title:"Keuseveld eienskappe",selectInfo:"Info", -opAvail:"Beskikbare opsies",value:"Waarde",size:"Grootte",lines:"Lyne",chkMulti:"Laat meer as een keuse toe",opText:"Teks",opValue:"Waarde",btnAdd:"Byvoeg",btnModify:"Wysig",btnUp:"Op",btnDown:"Af",btnSetValue:"Stel as geselekteerde waarde",btnDelete:"Verwyder"},textarea:{title:"Teks-area eienskappe",cols:"Kolomme",rows:"Rye"},textfield:{title:"Teksveld eienskappe",name:"Naam",value:"Waarde",charWidth:"Breedte (karakters)",maxChars:"Maksimum karakters",type:"Soort",typeText:"Teks",typePass:"Wagwoord", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ar.js deleted file mode 100644 index 537ca014..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ar.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ar",{button:{title:"خصائص زر الضغط",text:"القيمة/التسمية",type:"نوع الزر",typeBtn:"زر",typeSbm:"إرسال",typeRst:"إعادة تعيين"},checkboxAndRadio:{checkboxTitle:"خصائص خانة الإختيار",radioTitle:"خصائص زر الخيار",value:"القيمة",selected:"محدد"},form:{title:"خصائص النموذج",menu:"خصائص النموذج",action:"اسم الملف",method:"الأسلوب",encoding:"تشفير"},hidden:{title:"خصائص الحقل المخفي",name:"الاسم",value:"القيمة"},select:{title:"خصائص اختيار الحقل",selectInfo:"اختار معلومات", -opAvail:"الخيارات المتاحة",value:"القيمة",size:"الحجم",lines:"الأسطر",chkMulti:"السماح بتحديدات متعددة",opText:"النص",opValue:"القيمة",btnAdd:"إضافة",btnModify:"تعديل",btnUp:"أعلى",btnDown:"أسفل",btnSetValue:"إجعلها محددة",btnDelete:"إزالة"},textarea:{title:"خصائص مساحة النص",cols:"الأعمدة",rows:"الصفوف"},textfield:{title:"خصائص مربع النص",name:"الاسم",value:"القيمة",charWidth:"عرض السمات",maxChars:"اقصى عدد للسمات",type:"نوع المحتوى",typeText:"نص",typePass:"كلمة مرور",typeEmail:"بريد إلكتروني",typeSearch:"بحث", -typeTel:"رقم الهاتف",typeUrl:"الرابط"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bg.js deleted file mode 100644 index 6761facd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bg",{button:{title:"Настройки на бутона",text:"Текст (стойност)",type:"Тип",typeBtn:"Бутон",typeSbm:"Добави",typeRst:"Нулиране"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Настройки на радиобутон",value:"Стойност",selected:"Избрано"},form:{title:"Настройки на формата",menu:"Настройки на формата",action:"Действие",method:"Метод",encoding:"Кодиране"},hidden:{title:"Настройки за скрито поле",name:"Име",value:"Стойност"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Налични опции",value:"Стойност",size:"Размер",lines:"линии",chkMulti:"Allow multiple selections",opText:"Текст",opValue:"Стойност",btnAdd:"Добави",btnModify:"Промени",btnUp:"На горе",btnDown:"На долу",btnSetValue:"Set as selected value",btnDelete:"Изтриване"},textarea:{title:"Опции за текстовата зона",cols:"Колони",rows:"Редове"},textfield:{title:"Настройки за текстово поле",name:"Име",value:"Стойност",charWidth:"Ширина на знаците",maxChars:"Макс. знаци",type:"Тип", -typeText:"Текст",typePass:"Парола",typeEmail:"Email",typeSearch:"Търсене",typeTel:"Телефонен номер",typeUrl:"Уеб адрес"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bn.js deleted file mode 100644 index 63773289..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bn",{button:{title:"বাটন প্রোপার্টি",text:"টেক্সট (ভ্যালু)",type:"প্রকার",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"চেক বক্স প্রোপার্টি",radioTitle:"রেডিও বাটন প্রোপার্টি",value:"ভ্যালু",selected:"সিলেক্টেড"},form:{title:"ফর্ম প্রোপার্টি",menu:"ফর্ম প্রোপার্টি",action:"একশ্যন",method:"পদ্ধতি",encoding:"Encoding"},hidden:{title:"গুপ্ত ফীল্ড প্রোপার্টি",name:"নাম",value:"ভ্যালু"},select:{title:"বাছাই ফীল্ড প্রোপার্টি",selectInfo:"তথ্য", -opAvail:"অন্যান্য বিকল্প",value:"ভ্যালু",size:"সাইজ",lines:"লাইন সমূহ",chkMulti:"একাধিক সিলেকশন এলাউ কর",opText:"টেক্সট",opValue:"ভ্যালু",btnAdd:"যুক্ত",btnModify:"বদলে দাও",btnUp:"উপর",btnDown:"নীচে",btnSetValue:"বাছাই করা ভ্যালু হিসেবে সেট কর",btnDelete:"ডিলীট"},textarea:{title:"টেক্সট এরিয়া প্রোপার্টি",cols:"কলাম",rows:"রো"},textfield:{title:"টেক্সট ফীল্ড প্রোপার্টি",name:"নাম",value:"ভ্যালু",charWidth:"ক্যারেক্টার প্রশস্ততা",maxChars:"সর্বাধিক ক্যারেক্টার",type:"টাইপ",typeText:"টেক্সট",typePass:"পাসওয়ার্ড", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bs.js deleted file mode 100644 index cac69a36..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/bs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bs",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ca.js deleted file mode 100644 index 55da8f9b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ca",{button:{title:"Propietats del botó",text:"Text (Valor)",type:"Tipus",typeBtn:"Botó",typeSbm:"Transmet formulari",typeRst:"Reinicia formulari"},checkboxAndRadio:{checkboxTitle:"Propietats de la casella de verificació",radioTitle:"Propietats del botó d'opció",value:"Valor",selected:"Seleccionat"},form:{title:"Propietats del formulari",menu:"Propietats del formulari",action:"Acció",method:"Mètode",encoding:"Codificació"},hidden:{title:"Propietats del camp ocult", -name:"Nom",value:"Valor"},select:{title:"Propietats del camp de selecció",selectInfo:"Info",opAvail:"Opcions disponibles",value:"Valor",size:"Mida",lines:"Línies",chkMulti:"Permet múltiples seleccions",opText:"Text",opValue:"Valor",btnAdd:"Afegeix",btnModify:"Modifica",btnUp:"Amunt",btnDown:"Avall",btnSetValue:"Selecciona per defecte",btnDelete:"Elimina"},textarea:{title:"Propietats de l'àrea de text",cols:"Columnes",rows:"Files"},textfield:{title:"Propietats del camp de text",name:"Nom",value:"Valor", -charWidth:"Amplada",maxChars:"Nombre màxim de caràcters",type:"Tipus",typeText:"Text",typePass:"Contrasenya",typeEmail:"Correu electrònic",typeSearch:"Cercar",typeTel:"Número de telèfon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cs.js deleted file mode 100644 index 5691de93..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","cs",{button:{title:"Vlastnosti tlačítka",text:"Popisek",type:"Typ",typeBtn:"Tlačítko",typeSbm:"Odeslat",typeRst:"Obnovit"},checkboxAndRadio:{checkboxTitle:"Vlastnosti zaškrtávacího políčka",radioTitle:"Vlastnosti přepínače",value:"Hodnota",selected:"Zaškrtnuto"},form:{title:"Vlastnosti formuláře",menu:"Vlastnosti formuláře",action:"Akce",method:"Metoda",encoding:"Kódování"},hidden:{title:"Vlastnosti skrytého pole",name:"Název",value:"Hodnota"},select:{title:"Vlastnosti seznamu", -selectInfo:"Info",opAvail:"Dostupná nastavení",value:"Hodnota",size:"Velikost",lines:"Řádků",chkMulti:"Povolit mnohonásobné výběry",opText:"Text",opValue:"Hodnota",btnAdd:"Přidat",btnModify:"Změnit",btnUp:"Nahoru",btnDown:"Dolů",btnSetValue:"Nastavit jako vybranou hodnotu",btnDelete:"Smazat"},textarea:{title:"Vlastnosti textové oblasti",cols:"Sloupců",rows:"Řádků"},textfield:{title:"Vlastnosti textového pole",name:"Název",value:"Hodnota",charWidth:"Šířka ve znacích",maxChars:"Maximální počet znaků", -type:"Typ",typeText:"Text",typePass:"Heslo",typeEmail:"Email",typeSearch:"Hledat",typeTel:"Telefonní číslo",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cy.js deleted file mode 100644 index 332c861f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/cy.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","cy",{button:{title:"Priodweddau Botymau",text:"Testun (Gwerth)",type:"Math",typeBtn:"Botwm",typeSbm:"Anfon",typeRst:"Ailosod"},checkboxAndRadio:{checkboxTitle:"Priodweddau Blwch Ticio",radioTitle:"Priodweddau Botwm Radio",value:"Gwerth",selected:"Dewiswyd"},form:{title:"Priodweddau Ffurflen",menu:"Priodweddau Ffurflen",action:"Gweithred",method:"Dull",encoding:"Amgodio"},hidden:{title:"Priodweddau Maes Cudd",name:"Enw",value:"Gwerth"},select:{title:"Priodweddau Maes Dewis", -selectInfo:"Gwyb Dewis",opAvail:"Opsiynau ar Gael",value:"Gwerth",size:"Maint",lines:"llinellau",chkMulti:"Caniatàu aml-ddewisiadau",opText:"Testun",opValue:"Gwerth",btnAdd:"Ychwanegu",btnModify:"Newid",btnUp:"Lan",btnDown:"Lawr",btnSetValue:"Gosod fel gwerth a ddewiswyd",btnDelete:"Dileu"},textarea:{title:"Priodweddau Ardal Testun",cols:"Colofnau",rows:"Rhesi"},textfield:{title:"Priodweddau Maes Testun",name:"Enw",value:"Gwerth",charWidth:"Lled Nod",maxChars:"Uchafswm y Nodau",type:"Math",typeText:"Testun", -typePass:"Cyfrinair",typeEmail:"Ebost",typeSearch:"Chwilio",typeTel:"Rhif Ffôn",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/da.js deleted file mode 100644 index cf4a1934..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","da",{button:{title:"Egenskaber for knap",text:"Tekst",type:"Type",typeBtn:"Knap",typeSbm:"Send",typeRst:"Nulstil"},checkboxAndRadio:{checkboxTitle:"Egenskaber for afkrydsningsfelt",radioTitle:"Egenskaber for alternativknap",value:"Værdi",selected:"Valgt"},form:{title:"Egenskaber for formular",menu:"Egenskaber for formular",action:"Handling",method:"Metode",encoding:"Kodning (encoding)"},hidden:{title:"Egenskaber for skjult felt",name:"Navn",value:"Værdi"},select:{title:"Egenskaber for liste", -selectInfo:"Generelt",opAvail:"Valgmuligheder",value:"Værdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillad flere valg",opText:"Tekst",opValue:"Værdi",btnAdd:"Tilføj",btnModify:"Redigér",btnUp:"Op",btnDown:"Ned",btnSetValue:"Sæt som valgt",btnDelete:"Slet"},textarea:{title:"Egenskaber for tekstboks",cols:"Kolonner",rows:"Rækker"},textfield:{title:"Egenskaber for tekstfelt",name:"Navn",value:"Værdi",charWidth:"Bredde (tegn)",maxChars:"Max. antal tegn",type:"Type",typeText:"Tekst",typePass:"Adgangskode", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/de.js deleted file mode 100644 index 483c7f9d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","de",{button:{title:"Button-Eigenschaften",text:"Text (Wert)",type:"Typ",typeBtn:"Button",typeSbm:"Absenden",typeRst:"Zurücksetzen"},checkboxAndRadio:{checkboxTitle:"Checkbox-Eigenschaften",radioTitle:"Optionsfeld-Eigenschaften",value:"Wert",selected:"ausgewählt"},form:{title:"Formular-Eigenschaften",menu:"Formular-Eigenschaften",action:"Action",method:"Method",encoding:"Zeichenkodierung"},hidden:{title:"Verstecktes Feld-Eigenschaften",name:"Name",value:"Wert"},select:{title:"Auswahlfeld-Eigenschaften", -selectInfo:"Info",opAvail:"Mögliche Optionen",value:"Wert",size:"Größe",lines:"Linien",chkMulti:"Erlaube Mehrfachauswahl",opText:"Text",opValue:"Wert",btnAdd:"Hinzufügen",btnModify:"Ändern",btnUp:"Hoch",btnDown:"Runter",btnSetValue:"Setze als Standardwert",btnDelete:"Entfernen"},textarea:{title:"Textfeld (mehrzeilig) Eigenschaften",cols:"Spalten",rows:"Reihen"},textfield:{title:"Textfeld (einzeilig) Eigenschaften",name:"Name",value:"Wert",charWidth:"Zeichenbreite",maxChars:"Max. Zeichen",type:"Typ", -typeText:"Text",typePass:"Passwort",typeEmail:"E-mail",typeSearch:"Suche",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/el.js deleted file mode 100644 index 2f42eff3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","el",{button:{title:"Ιδιότητες Κουμπιού",text:"Κείμενο (Τιμή)",type:"Τύπος",typeBtn:"Κουμπί",typeSbm:"Υποβολή",typeRst:"Επαναφορά"},checkboxAndRadio:{checkboxTitle:"Ιδιότητες Κουτιού Επιλογής",radioTitle:"Ιδιότητες Κουμπιού Επιλογής",value:"Τιμή",selected:"Επιλεγμένο"},form:{title:"Ιδιότητες Φόρμας",menu:"Ιδιότητες Φόρμας",action:"Ενέργεια",method:"Μέθοδος",encoding:"Κωδικοποίηση"},hidden:{title:"Ιδιότητες Κρυφού Πεδίου",name:"Όνομα",value:"Τιμή"},select:{title:"Ιδιότητες Πεδίου Επιλογής", -selectInfo:"Πληροφορίες Πεδίου Επιλογής",opAvail:"Διαθέσιμες Επιλογές",value:"Τιμή",size:"Μέγεθος",lines:"γραμμές",chkMulti:"Να επιτρέπονται οι πολλαπλές επιλογές",opText:"Κείμενο",opValue:"Τιμή",btnAdd:"Προσθήκη",btnModify:"Τροποποίηση",btnUp:"Πάνω",btnDown:"Κάτω",btnSetValue:"Θέση ως προεπιλογή",btnDelete:"Διαγραφή"},textarea:{title:"Ιδιότητες Περιοχής Κειμένου",cols:"Στήλες",rows:"Σειρές"},textfield:{title:"Ιδιότητες Πεδίου Κειμένου",name:"Όνομα",value:"Τιμή",charWidth:"Πλάτος Χαρακτήρων",maxChars:"Μέγιστοι χαρακτήρες", -type:"Τύπος",typeText:"Κείμενο",typePass:"Κωδικός",typeEmail:"Email",typeSearch:"Αναζήτηση",typeTel:"Αριθμός Τηλεφώνου",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-au.js deleted file mode 100644 index e144ec74..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-au.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-au",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-ca.js deleted file mode 100644 index 8adf26e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-ca",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-gb.js deleted file mode 100644 index d72b16c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en-gb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-gb",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"E-mail",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en.js deleted file mode 100644 index 95cf7753..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/en.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eo.js deleted file mode 100644 index 26744b66..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","eo",{button:{title:"Butonaj atributoj",text:"Teksto (Valoro)",type:"Tipo",typeBtn:"Butono",typeSbm:"Validigi (submit)",typeRst:"Remeti en la originstaton (Reset)"},checkboxAndRadio:{checkboxTitle:"Markobutonaj Atributoj",radioTitle:"Radiobutonaj Atributoj",value:"Valoro",selected:"Selektita"},form:{title:"Formularaj Atributoj",menu:"Formularaj Atributoj",action:"Ago",method:"Metodo",encoding:"Kodoprezento"},hidden:{title:"Atributoj de Kaŝita Kampo",name:"Nomo",value:"Valoro"}, -select:{title:"Atributoj de Elekta Kampo",selectInfo:"Informoj pri la rulummenuo",opAvail:"Elektoj Disponeblaj",value:"Valoro",size:"Grando",lines:"Linioj",chkMulti:"Permesi Plurajn Elektojn",opText:"Teksto",opValue:"Valoro",btnAdd:"Aldoni",btnModify:"Modifi",btnUp:"Supren",btnDown:"Malsupren",btnSetValue:"Agordi kiel Elektitan Valoron",btnDelete:"Forigi"},textarea:{title:"Atributoj de Teksta Areo",cols:"Kolumnoj",rows:"Linioj"},textfield:{title:"Atributoj de Teksta Kampo",name:"Nomo",value:"Valoro", -charWidth:"Signolarĝo",maxChars:"Maksimuma Nombro da Signoj",type:"Tipo",typeText:"Teksto",typePass:"Pasvorto",typeEmail:"retpoŝtadreso",typeSearch:"Serĉi",typeTel:"Telefonnumero",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/es.js deleted file mode 100644 index e275cf88..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/es.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","es",{button:{title:"Propiedades de Botón",text:"Texto (Valor)",type:"Tipo",typeBtn:"Boton",typeSbm:"Enviar",typeRst:"Reestablecer"},checkboxAndRadio:{checkboxTitle:"Propiedades de Casilla",radioTitle:"Propiedades de Botón de Radio",value:"Valor",selected:"Seleccionado"},form:{title:"Propiedades de Formulario",menu:"Propiedades de Formulario",action:"Acción",method:"Método",encoding:"Codificación"},hidden:{title:"Propiedades de Campo Oculto",name:"Nombre",value:"Valor"}, -select:{title:"Propiedades de Campo de Selección",selectInfo:"Información",opAvail:"Opciones disponibles",value:"Valor",size:"Tamaño",lines:"Lineas",chkMulti:"Permitir múltiple selección",opText:"Texto",opValue:"Valor",btnAdd:"Agregar",btnModify:"Modificar",btnUp:"Subir",btnDown:"Bajar",btnSetValue:"Establecer como predeterminado",btnDelete:"Eliminar"},textarea:{title:"Propiedades de Area de Texto",cols:"Columnas",rows:"Filas"},textfield:{title:"Propiedades de Campo de Texto",name:"Nombre",value:"Valor", -charWidth:"Caracteres de ancho",maxChars:"Máximo caracteres",type:"Tipo",typeText:"Texto",typePass:"Contraseña",typeEmail:"Correo electrónico",typeSearch:"Buscar",typeTel:"Número de teléfono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/et.js deleted file mode 100644 index 0e1d62e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","et",{button:{title:"Nupu omadused",text:"Tekst (väärtus)",type:"Liik",typeBtn:"Nupp",typeSbm:"Saada",typeRst:"Lähtesta"},checkboxAndRadio:{checkboxTitle:"Märkeruudu omadused",radioTitle:"Raadionupu omadused",value:"Väärtus",selected:"Märgitud"},form:{title:"Vormi omadused",menu:"Vormi omadused",action:"Toiming",method:"Meetod",encoding:"Kodeering"},hidden:{title:"Varjatud lahtri omadused",name:"Nimi",value:"Väärtus"},select:{title:"Valiklahtri omadused",selectInfo:"Info", -opAvail:"Võimalikud valikud:",value:"Väärtus",size:"Suurus",lines:"ridu",chkMulti:"Võimalik mitu valikut",opText:"Tekst",opValue:"Väärtus",btnAdd:"Lisa",btnModify:"Muuda",btnUp:"Üles",btnDown:"Alla",btnSetValue:"Määra vaikimisi",btnDelete:"Kustuta"},textarea:{title:"Tekstiala omadused",cols:"Veerge",rows:"Ridu"},textfield:{title:"Tekstilahtri omadused",name:"Nimi",value:"Väärtus",charWidth:"Laius (tähemärkides)",maxChars:"Maksimaalselt tähemärke",type:"Liik",typeText:"Tekst",typePass:"Parool",typeEmail:"E-mail", -typeSearch:"Otsi",typeTel:"Telefon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eu.js deleted file mode 100644 index cfb5e9a5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","eu",{button:{title:"Botoiaren Ezaugarriak",text:"Testua (Balorea)",type:"Mota",typeBtn:"Botoia",typeSbm:"Bidali",typeRst:"Garbitu"},checkboxAndRadio:{checkboxTitle:"Kontrol-laukiko Ezaugarriak",radioTitle:"Aukera-botoiaren Ezaugarriak",value:"Balorea",selected:"Hautatuta"},form:{title:"Formularioaren Ezaugarriak",menu:"Formularioaren Ezaugarriak",action:"Ekintza",method:"Metodoa",encoding:"Kodeketa"},hidden:{title:"Ezkutuko Eremuaren Ezaugarriak",name:"Izena",value:"Balorea"}, -select:{title:"Hautespen Eremuaren Ezaugarriak",selectInfo:"Informazioa",opAvail:"Aukera Eskuragarriak",value:"Balorea",size:"Tamaina",lines:"lerro kopurura",chkMulti:"Hautaketa anitzak baimendu",opText:"Testua",opValue:"Balorea",btnAdd:"Gehitu",btnModify:"Aldatu",btnUp:"Gora",btnDown:"Behera",btnSetValue:"Aukeratutako balorea ezarri",btnDelete:"Ezabatu"},textarea:{title:"Testu-arearen Ezaugarriak",cols:"Zutabeak",rows:"Lerroak"},textfield:{title:"Testu Eremuaren Ezaugarriak",name:"Izena",value:"Balorea", -charWidth:"Zabalera",maxChars:"Zenbat karaktere gehienez",type:"Mota",typeText:"Testua",typePass:"Pasahitza",typeEmail:"E-posta",typeSearch:"Bilatu",typeTel:"Telefono Zenbakia",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fa.js deleted file mode 100644 index 326ada0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fa.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fa",{button:{title:"ویژگی​های دکمه",text:"متن (مقدار)",type:"نوع",typeBtn:"دکمه",typeSbm:"ثبت",typeRst:"بازنشانی (Reset)"},checkboxAndRadio:{checkboxTitle:"ویژگی​های خانهٴ گزینه​ای",radioTitle:"ویژگی​های دکمهٴ رادیویی",value:"مقدار",selected:"برگزیده"},form:{title:"ویژگی​های فرم",menu:"ویژگی​های فرم",action:"رویداد",method:"متد",encoding:"رمزنگاری"},hidden:{title:"ویژگی​های فیلد پنهان",name:"نام",value:"مقدار"},select:{title:"ویژگی​های فیلد چندگزینه​ای",selectInfo:"اطلاعات", -opAvail:"گزینه​های دردسترس",value:"مقدار",size:"اندازه",lines:"خطوط",chkMulti:"گزینش چندگانه فراهم باشد",opText:"متن",opValue:"مقدار",btnAdd:"افزودن",btnModify:"ویرایش",btnUp:"بالا",btnDown:"پائین",btnSetValue:"تنظیم به عنوان مقدار برگزیده",btnDelete:"پاککردن"},textarea:{title:"ویژگی​های ناحیهٴ متنی",cols:"ستون​ها",rows:"سطرها"},textfield:{title:"ویژگی​های فیلد متنی",name:"نام",value:"مقدار",charWidth:"پهنای نویسه",maxChars:"بیشینهٴ نویسه​ها",type:"نوع",typeText:"متن",typePass:"گذرواژه",typeEmail:"ایمیل", -typeSearch:"جستجو",typeTel:"شماره تلفن",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fi.js deleted file mode 100644 index 31cf6d05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fi",{button:{title:"Painikkeen ominaisuudet",text:"Teksti (arvo)",type:"Tyyppi",typeBtn:"Painike",typeSbm:"Lähetä",typeRst:"Tyhjennä"},checkboxAndRadio:{checkboxTitle:"Valintaruudun ominaisuudet",radioTitle:"Radiopainikkeen ominaisuudet",value:"Arvo",selected:"Valittu"},form:{title:"Lomakkeen ominaisuudet",menu:"Lomakkeen ominaisuudet",action:"Toiminto",method:"Tapa",encoding:"Enkoodaus"},hidden:{title:"Piilokentän ominaisuudet",name:"Nimi",value:"Arvo"},select:{title:"Valintakentän ominaisuudet", -selectInfo:"Info",opAvail:"Ominaisuudet",value:"Arvo",size:"Koko",lines:"Rivit",chkMulti:"Salli usea valinta",opText:"Teksti",opValue:"Arvo",btnAdd:"Lisää",btnModify:"Muuta",btnUp:"Ylös",btnDown:"Alas",btnSetValue:"Aseta valituksi",btnDelete:"Poista"},textarea:{title:"Tekstilaatikon ominaisuudet",cols:"Sarakkeita",rows:"Rivejä"},textfield:{title:"Tekstikentän ominaisuudet",name:"Nimi",value:"Arvo",charWidth:"Leveys",maxChars:"Maksimi merkkimäärä",type:"Tyyppi",typeText:"Teksti",typePass:"Salasana", -typeEmail:"Sähköposti",typeSearch:"Haku",typeTel:"Puhelinnumero",typeUrl:"Osoite"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fo.js deleted file mode 100644 index 3ff4950e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fo",{button:{title:"Eginleikar fyri knøtt",text:"Tekstur",type:"Slag",typeBtn:"Knøttur",typeSbm:"Send",typeRst:"Nullstilla"},checkboxAndRadio:{checkboxTitle:"Eginleikar fyri flugubein",radioTitle:"Eginleikar fyri radioknøtt",value:"Virði",selected:"Valt"},form:{title:"Eginleikar fyri Form",menu:"Eginleikar fyri Form",action:"Hending",method:"Háttur",encoding:"Encoding"},hidden:{title:"Eginleikar fyri fjaldan teig",name:"Navn",value:"Virði"},select:{title:"Eginleikar fyri valskrá", -selectInfo:"Upplýsingar",opAvail:"Tøkir møguleikar",value:"Virði",size:"Stødd",lines:"Linjur",chkMulti:"Loyv fleiri valmøguleikum samstundis",opText:"Tekstur",opValue:"Virði",btnAdd:"Legg afturat",btnModify:"Broyt",btnUp:"Upp",btnDown:"Niður",btnSetValue:"Set sum valt virði",btnDelete:"Strika"},textarea:{title:"Eginleikar fyri tekstumráði",cols:"kolonnur",rows:"røðir"},textfield:{title:"Eginleikar fyri tekstteig",name:"Navn",value:"Virði",charWidth:"Breidd (sjónlig tekn)",maxChars:"Mest loyvdu tekn", -type:"Slag",typeText:"Tekstur",typePass:"Loyniorð",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr-ca.js deleted file mode 100644 index f44c8d63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fr-ca",{button:{title:"Propriétés du bouton",text:"Texte (Valeur)",type:"Type",typeBtn:"Bouton",typeSbm:"Soumettre",typeRst:"Réinitialiser"},checkboxAndRadio:{checkboxTitle:"Propriétés de la case à cocher",radioTitle:"Propriétés du bouton radio",value:"Valeur",selected:"Sélectionné"},form:{title:"Propriétés du formulaire",menu:"Propriétés du formulaire",action:"Action",method:"Méthode",encoding:"Encodage"},hidden:{title:"Propriétés du champ caché",name:"Nom",value:"Valeur"}, -select:{title:"Propriétés du champ de sélection",selectInfo:"Info",opAvail:"Options disponibles",value:"Valeur",size:"Taille",lines:"lignes",chkMulti:"Permettre les sélections multiples",opText:"Texte",opValue:"Valeur",btnAdd:"Ajouter",btnModify:"Modifier",btnUp:"Monter",btnDown:"Descendre",btnSetValue:"Valeur sélectionnée",btnDelete:"Supprimer"},textarea:{title:"Propriétés de la zone de texte",cols:"Colonnes",rows:"Lignes"},textfield:{title:"Propriétés du champ texte",name:"Nom",value:"Valeur",charWidth:"Largeur de caractères", -maxChars:"Nombre maximum de caractères",type:"Type",typeText:"Texte",typePass:"Mot de passe",typeEmail:"Courriel",typeSearch:"Recherche",typeTel:"Numéro de téléphone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr.js deleted file mode 100644 index eff0fd02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fr",{button:{title:"Propriétés du bouton",text:"Texte (Value)",type:"Type",typeBtn:"Bouton",typeSbm:"Validation (submit)",typeRst:"Remise à zéro"},checkboxAndRadio:{checkboxTitle:"Propriétés de la case à cocher",radioTitle:"Propriétés du bouton Radio",value:"Valeur",selected:"Sélectionné"},form:{title:"Propriétés du formulaire",menu:"Propriétés du formulaire",action:"Action",method:"Méthode",encoding:"Encodage"},hidden:{title:"Propriétés du champ caché",name:"Nom", -value:"Valeur"},select:{title:"Propriétés du menu déroulant",selectInfo:"Informations sur le menu déroulant",opAvail:"Options disponibles",value:"Valeur",size:"Taille",lines:"Lignes",chkMulti:"Permettre les sélections multiples",opText:"Texte",opValue:"Valeur",btnAdd:"Ajouter",btnModify:"Modifier",btnUp:"Haut",btnDown:"Bas",btnSetValue:"Définir comme valeur sélectionnée",btnDelete:"Supprimer"},textarea:{title:"Propriétés de la zone de texte",cols:"Colonnes",rows:"Lignes"},textfield:{title:"Propriétés du champ texte", -name:"Nom",value:"Valeur",charWidth:"Taille des caractères",maxChars:"Nombre maximum de caractères",type:"Type",typeText:"Texte",typePass:"Mot de passe",typeEmail:"E-mail",typeSearch:"Rechercher",typeTel:"Numéro de téléphone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gl.js deleted file mode 100644 index 792ee3f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","gl",{button:{title:"Propiedades do botón",text:"Texto (Valor)",type:"Tipo",typeBtn:"Botón",typeSbm:"Enviar",typeRst:"Restabelever"},checkboxAndRadio:{checkboxTitle:"Propiedades da caixa de selección",radioTitle:"Propiedades do botón de opción",value:"Valor",selected:"Seleccionado"},form:{title:"Propiedades do formulario",menu:"Propiedades do formulario",action:"Acción",method:"Método",encoding:"Codificación"},hidden:{title:"Propiedades do campo agochado",name:"Nome", -value:"Valor"},select:{title:"Propiedades do campo de selección",selectInfo:"Información",opAvail:"Opcións dispoñíbeis",value:"Valor",size:"Tamaño",lines:"liñas",chkMulti:"Permitir múltiplas seleccións",opText:"Texto",opValue:"Valor",btnAdd:"Engadir",btnModify:"Modificar",btnUp:"Subir",btnDown:"Baixar",btnSetValue:"Estabelecer como valor seleccionado",btnDelete:"Eliminar"},textarea:{title:"Propiedades da área de texto",cols:"Columnas",rows:"Filas"},textfield:{title:"Propiedades do campo de texto", -name:"Nome",value:"Valor",charWidth:"Largo do carácter",maxChars:"Núm. máximo de caracteres",type:"Tipo",typeText:"Texto",typePass:"Contrasinal",typeEmail:"Correo",typeSearch:"Buscar",typeTel:"Número de teléfono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gu.js deleted file mode 100644 index 976d136a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/gu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","gu",{button:{title:"બટનના ગુણ",text:"ટેક્સ્ટ (વૅલ્યૂ)",type:"પ્રકાર",typeBtn:"બટન",typeSbm:"સબ્મિટ",typeRst:"રિસેટ"},checkboxAndRadio:{checkboxTitle:"ચેક બોક્સ ગુણ",radioTitle:"રેડિઓ બટનના ગુણ",value:"વૅલ્યૂ",selected:"સિલેક્ટેડ"},form:{title:"ફૉર્મ/પત્રકના ગુણ",menu:"ફૉર્મ/પત્રકના ગુણ",action:"ક્રિયા",method:"પદ્ધતિ",encoding:"અન્કોડીન્ગ"},hidden:{title:"ગુપ્ત ક્ષેત્રના ગુણ",name:"નામ",value:"વૅલ્યૂ"},select:{title:"પસંદગી ક્ષેત્રના ગુણ",selectInfo:"સૂચના",opAvail:"ઉપલબ્ધ વિકલ્પ", -value:"વૅલ્યૂ",size:"સાઇઝ",lines:"લીટીઓ",chkMulti:"એકથી વધારે પસંદ કરી શકો",opText:"ટેક્સ્ટ",opValue:"વૅલ્યૂ",btnAdd:"ઉમેરવું",btnModify:"બદલવું",btnUp:"ઉપર",btnDown:"નીચે",btnSetValue:"પસંદ કરલી વૅલ્યૂ સેટ કરો",btnDelete:"રદ કરવું"},textarea:{title:"ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ",cols:"કૉલમ/ઊભી કટાર",rows:"પંક્તિઓ"},textfield:{title:"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ",name:"નામ",value:"વૅલ્યૂ",charWidth:"કેરેક્ટરની પહોળાઈ",maxChars:"અધિકતમ કેરેક્ટર",type:"ટાઇપ",typeText:"ટેક્સ્ટ",typePass:"પાસવર્ડ", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/he.js deleted file mode 100644 index 102ba4c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","he",{button:{title:"מאפייני כפתור",text:"טקסט (ערך)",type:"סוג",typeBtn:"כפתור",typeSbm:"שליחה",typeRst:"איפוס"},checkboxAndRadio:{checkboxTitle:"מאפייני תיבת סימון",radioTitle:"מאפייני לחצן אפשרויות",value:"ערך",selected:"מסומן"},form:{title:"מאפיני טופס",menu:"מאפיני טופס",action:"שלח אל",method:"סוג שליחה",encoding:"קידוד"},hidden:{title:"מאפיני שדה חבוי",name:"שם",value:"ערך"},select:{title:"מאפייני שדה בחירה",selectInfo:"מידע",opAvail:"אפשרויות זמינות",value:"ערך", -size:"גודל",lines:"שורות",chkMulti:"איפשור בחירות מרובות",opText:"טקסט",opValue:"ערך",btnAdd:"הוספה",btnModify:"שינוי",btnUp:"למעלה",btnDown:"למטה",btnSetValue:"קביעה כברירת מחדל",btnDelete:"מחיקה"},textarea:{title:"מאפייני איזור טקסט",cols:"עמודות",rows:"שורות"},textfield:{title:"מאפייני שדה טקסט",name:"שם",value:"ערך",charWidth:"רוחב לפי תווים",maxChars:"מקסימום תווים",type:"סוג",typeText:"טקסט",typePass:"סיסמה",typeEmail:'דוא"ל',typeSearch:"חיפוש",typeTel:"מספר טלפון",typeUrl:"כתובת (URL)"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hi.js deleted file mode 100644 index 28f074e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hi",{button:{title:"बटन प्रॉपर्टीज़",text:"टेक्स्ट (वैल्यू)",type:"प्रकार",typeBtn:"बटन",typeSbm:"सब्मिट",typeRst:"रिसेट"},checkboxAndRadio:{checkboxTitle:"चॅक बॉक्स प्रॉपर्टीज़",radioTitle:"रेडिओ बटन प्रॉपर्टीज़",value:"वैल्यू",selected:"सॅलॅक्टॅड"},form:{title:"फ़ॉर्म प्रॉपर्टीज़",menu:"फ़ॉर्म प्रॉपर्टीज़",action:"क्रिया",method:"तरीका",encoding:"Encoding"},hidden:{title:"गुप्त फ़ील्ड प्रॉपर्टीज़",name:"नाम",value:"वैल्यू"},select:{title:"चुनाव फ़ील्ड प्रॉपर्टीज़",selectInfo:"सूचना", -opAvail:"उपलब्ध विकल्प",value:"वैल्यू",size:"साइज़",lines:"पंक्तियाँ",chkMulti:"एक से ज्यादा विकल्प चुनने दें",opText:"टेक्स्ट",opValue:"वैल्यू",btnAdd:"जोड़ें",btnModify:"बदलें",btnUp:"ऊपर",btnDown:"नीचे",btnSetValue:"चुनी गई वैल्यू सॅट करें",btnDelete:"डिलीट"},textarea:{title:"टेक्स्त एरिया प्रॉपर्टीज़",cols:"कालम",rows:"पंक्तियां"},textfield:{title:"टेक्स्ट फ़ील्ड प्रॉपर्टीज़",name:"नाम",value:"वैल्यू",charWidth:"करॅक्टर की चौढ़ाई",maxChars:"अधिकतम करॅक्टर",type:"टाइप",typeText:"टेक्स्ट",typePass:"पास्वर्ड", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hr.js deleted file mode 100644 index 9965827c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hr",{button:{title:"Button svojstva",text:"Tekst (vrijednost)",type:"Vrsta",typeBtn:"Gumb",typeSbm:"Pošalji",typeRst:"Poništi"},checkboxAndRadio:{checkboxTitle:"Checkbox svojstva",radioTitle:"Radio Button svojstva",value:"Vrijednost",selected:"Odabrano"},form:{title:"Form svojstva",menu:"Form svojstva",action:"Akcija",method:"Metoda",encoding:"Encoding"},hidden:{title:"Hidden Field svojstva",name:"Ime",value:"Vrijednost"},select:{title:"Selection svojstva",selectInfo:"Info", -opAvail:"Dostupne opcije",value:"Vrijednost",size:"Veličina",lines:"linija",chkMulti:"Dozvoli višestruki odabir",opText:"Tekst",opValue:"Vrijednost",btnAdd:"Dodaj",btnModify:"Promijeni",btnUp:"Gore",btnDown:"Dolje",btnSetValue:"Postavi kao odabranu vrijednost",btnDelete:"Obriši"},textarea:{title:"Textarea svojstva",cols:"Kolona",rows:"Redova"},textfield:{title:"Text Field svojstva",name:"Ime",value:"Vrijednost",charWidth:"Širina",maxChars:"Najviše karaktera",type:"Vrsta",typeText:"Tekst",typePass:"Šifra", -typeEmail:"Email",typeSearch:"Traži",typeTel:"Broj telefona",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hu.js deleted file mode 100644 index 962606d8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hu",{button:{title:"Gomb tulajdonságai",text:"Szöveg (Érték)",type:"Típus",typeBtn:"Gomb",typeSbm:"Küldés",typeRst:"Alaphelyzet"},checkboxAndRadio:{checkboxTitle:"Jelölőnégyzet tulajdonságai",radioTitle:"Választógomb tulajdonságai",value:"Érték",selected:"Kiválasztott"},form:{title:"Űrlap tulajdonságai",menu:"Űrlap tulajdonságai",action:"Adatfeldolgozást végző hivatkozás",method:"Adatküldés módja",encoding:"Kódolás"},hidden:{title:"Rejtett mező tulajdonságai",name:"Név", -value:"Érték"},select:{title:"Legördülő lista tulajdonságai",selectInfo:"Alaptulajdonságok",opAvail:"Elérhető opciók",value:"Érték",size:"Méret",lines:"sor",chkMulti:"több sor is kiválasztható",opText:"Szöveg",opValue:"Érték",btnAdd:"Hozzáad",btnModify:"Módosít",btnUp:"Fel",btnDown:"Le",btnSetValue:"Legyen az alapértelmezett érték",btnDelete:"Töröl"},textarea:{title:"Szövegterület tulajdonságai",cols:"Karakterek száma egy sorban",rows:"Sorok száma"},textfield:{title:"Szövegmező tulajdonságai",name:"Név", -value:"Érték",charWidth:"Megjelenített karakterek száma",maxChars:"Maximális karakterszám",type:"Típus",typeText:"Szöveg",typePass:"Jelszó",typeEmail:"Ímél",typeSearch:"Keresés",typeTel:"Telefonszám",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/id.js deleted file mode 100644 index 7fdc87fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/id.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","id",{button:{title:"Button Properties",text:"Teks (Nilai)",type:"Tipe",typeBtn:"Tombol",typeSbm:"Menyerahkan",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Nilai",selected:"Terpilih"},form:{title:"Form Properties",menu:"Form Properties",action:"Aksi",method:"Metode",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Nama",value:"Nilai"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Nilai",size:"Ukuran",lines:"garis",chkMulti:"Izinkan pemilihan ganda",opText:"Teks",opValue:"Nilai",btnAdd:"Tambah",btnModify:"Modifikasi",btnUp:"Atas",btnDown:"Bawah",btnSetValue:"Set as selected value",btnDelete:"Hapus"},textarea:{title:"Textarea Properties",cols:"Kolom",rows:"Baris"},textfield:{title:"Text Field Properties",name:"Name",value:"Nilai",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Tipe",typeText:"Teks", -typePass:"Kata kunci",typeEmail:"Surel",typeSearch:"Cari",typeTel:"Nomor Telepon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/is.js deleted file mode 100644 index 7ca735ec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/is.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","is",{button:{title:"Eigindi hnapps",text:"Texti",type:"Gerð",typeBtn:"Hnappur",typeSbm:"Staðfesta",typeRst:"Hreinsa"},checkboxAndRadio:{checkboxTitle:"Eigindi markreits",radioTitle:"Eigindi valhnapps",value:"Gildi",selected:"Valið"},form:{title:"Eigindi innsláttarforms",menu:"Eigindi innsláttarforms",action:"Aðgerð",method:"Aðferð",encoding:"Encoding"},hidden:{title:"Eigindi falins svæðis",name:"Nafn",value:"Gildi"},select:{title:"Eigindi lista",selectInfo:"Upplýsingar", -opAvail:"Kostir",value:"Gildi",size:"Stærð",lines:"línur",chkMulti:"Leyfa fleiri kosti",opText:"Texti",opValue:"Gildi",btnAdd:"Bæta við",btnModify:"Breyta",btnUp:"Upp",btnDown:"Niður",btnSetValue:"Merkja sem valið",btnDelete:"Eyða"},textarea:{title:"Eigindi textasvæðis",cols:"Dálkar",rows:"Línur"},textfield:{title:"Eigindi textareits",name:"Nafn",value:"Gildi",charWidth:"Breidd (leturtákn)",maxChars:"Hámarksfjöldi leturtákna",type:"Gerð",typeText:"Texti",typePass:"Lykilorð",typeEmail:"Email",typeSearch:"Search", -typeTel:"Telephone Number",typeUrl:"Vefslóð"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/it.js deleted file mode 100644 index 90f4f584..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","it",{button:{title:"Proprietà bottone",text:"Testo (Valore)",type:"Tipo",typeBtn:"Bottone",typeSbm:"Invio",typeRst:"Annulla"},checkboxAndRadio:{checkboxTitle:"Proprietà checkbox",radioTitle:"Proprietà radio button",value:"Valore",selected:"Selezionato"},form:{title:"Proprietà modulo",menu:"Proprietà modulo",action:"Azione",method:"Metodo",encoding:"Codifica"},hidden:{title:"Proprietà campo nascosto",name:"Nome",value:"Valore"},select:{title:"Proprietà menu di selezione", -selectInfo:"Info",opAvail:"Opzioni disponibili",value:"Valore",size:"Dimensione",lines:"righe",chkMulti:"Permetti selezione multipla",opText:"Testo",opValue:"Valore",btnAdd:"Aggiungi",btnModify:"Modifica",btnUp:"Su",btnDown:"Gi",btnSetValue:"Imposta come predefinito",btnDelete:"Rimuovi"},textarea:{title:"Proprietà area di testo",cols:"Colonne",rows:"Righe"},textfield:{title:"Proprietà campo di testo",name:"Nome",value:"Valore",charWidth:"Larghezza",maxChars:"Numero massimo di caratteri",type:"Tipo", -typeText:"Testo",typePass:"Password",typeEmail:"Email",typeSearch:"Cerca",typeTel:"Numero di telefono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ja.js deleted file mode 100644 index 8e615cfd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ja",{button:{title:"ボタン プロパティ",text:"テキスト (値)",type:"タイプ",typeBtn:"ボタン",typeSbm:"送信",typeRst:"リセット"},checkboxAndRadio:{checkboxTitle:"チェックボックスのプロパティ",radioTitle:"ラジオボタンのプロパティ",value:"値",selected:"選択済み"},form:{title:"フォームのプロパティ",menu:"フォームのプロパティ",action:"アクション (action)",method:"メソッド (method)",encoding:"エンコード方式 (encoding)"},hidden:{title:"不可視フィールド プロパティ",name:"名前 (name)",value:"値 (value)"},select:{title:"選択フィールドのプロパティ",selectInfo:"情報",opAvail:"利用可能なオプション",value:"選択項目値", -size:"サイズ",lines:"行",chkMulti:"複数選択を許可",opText:"選択項目名",opValue:"値",btnAdd:"追加",btnModify:"編集",btnUp:"上へ",btnDown:"下へ",btnSetValue:"選択した値を設定",btnDelete:"削除"},textarea:{title:"テキストエリア プロパティ",cols:"列",rows:"行"},textfield:{title:"1行テキスト プロパティ",name:"名前",value:"値",charWidth:"サイズ",maxChars:"最大長",type:"タイプ",typeText:"テキスト",typePass:"パスワード入力",typeEmail:"メール",typeSearch:"検索",typeTel:"電話番号",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ka.js deleted file mode 100644 index 06b8131d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ka",{button:{title:"ღილაკის პარამეტრები",text:"ტექსტი",type:"ტიპი",typeBtn:"ღილაკი",typeSbm:"გაგზავნა",typeRst:"გასუფთავება"},checkboxAndRadio:{checkboxTitle:"მონიშვნის ღილაკის (Checkbox) პარამეტრები",radioTitle:"ასარჩევი ღილაკის (Radio) პარამეტრები",value:"ტექსტი",selected:"არჩეული"},form:{title:"ფორმის პარამეტრები",menu:"ფორმის პარამეტრები",action:"ქმედება",method:"მეთოდი",encoding:"კოდირება"},hidden:{title:"მალული ველის პარამეტრები",name:"სახელი",value:"მნიშვნელობა"}, -select:{title:"არჩევის ველის პარამეტრები",selectInfo:"ინფორმაცია",opAvail:"შესაძლებელი ვარიანტები",value:"მნიშვნელობა",size:"ზომა",lines:"ხაზები",chkMulti:"მრავლობითი არჩევანის საშუალება",opText:"ტექსტი",opValue:"მნიშვნელობა",btnAdd:"დამატება",btnModify:"შეცვლა",btnUp:"ზემოთ",btnDown:"ქვემოთ",btnSetValue:"ამორჩეულ მნიშვნელოვნად დაყენება",btnDelete:"წაშლა"},textarea:{title:"ტექსტური არის პარამეტრები",cols:"სვეტები",rows:"სტრიქონები"},textfield:{title:"ტექსტური ველის პარამეტრები",name:"სახელი",value:"მნიშვნელობა", -charWidth:"სიმბოლოს ზომა",maxChars:"ასოების მაქსიმალური ოდენობა",type:"ტიპი",typeText:"ტექსტი",typePass:"პაროლი",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/km.js deleted file mode 100644 index e9c1269d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/km.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","km",{button:{title:"លក្ខណៈ​ប៊ូតុង",text:"អត្ថបទ (តម្លៃ)",type:"ប្រភេទ",typeBtn:"ប៊ូតុង",typeSbm:"ដាក់ស្នើ",typeRst:"កំណត់​ឡើង​វិញ"},checkboxAndRadio:{checkboxTitle:"លក្ខណៈ​ប្រអប់​ធីក",radioTitle:"លក្ខនៈ​ប៊ូតុង​មូល",value:"តម្លៃ",selected:"បាន​ជ្រើស"},form:{title:"លក្ខណៈ​បែបបទ",menu:"លក្ខណៈ​បែបបទ",action:"សកម្មភាព",method:"វិធីសាស្ត្រ",encoding:"ការ​អ៊ិនកូដ"},hidden:{title:"លក្ខណៈ​វាល​កំបាំង",name:"ឈ្មោះ",value:"តម្លៃ"},select:{title:"លក្ខណៈ​វាល​ជម្រើស",selectInfo:"ព័ត៌មាន​ជម្រើស", -opAvail:"ជម្រើស​ដែល​មាន",value:"តម្លៃ",size:"ទំហំ",lines:"បន្ទាត់",chkMulti:"អនុញ្ញាត​ពហុ​ជម្រើស",opText:"អត្ថបទ",opValue:"តម្លៃ",btnAdd:"បន្ថែម",btnModify:"ផ្លាស់ប្តូរ",btnUp:"លើ",btnDown:"ក្រោម",btnSetValue:"កំណត់​ជា​តម្លៃ​ដែល​បាន​ជ្រើស",btnDelete:"លុប"},textarea:{title:"លក្ខណៈ​ប្រអប់​អត្ថបទ",cols:"ជួរឈរ",rows:"ជួរដេក"},textfield:{title:"លក្ខណៈ​វាល​អត្ថបទ",name:"ឈ្មោះ",value:"តម្លៃ",charWidth:"ទទឹង​តួ​អក្សរ",maxChars:"អក្សរអតិបរិមា",type:"ប្រភេទ",typeText:"អត្ថបទ",typePass:"ពាក្យសម្ងាត់",typeEmail:"អ៊ីមែល", -typeSearch:"ស្វែង​រក",typeTel:"លេខ​ទូរសព្ទ",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ko.js deleted file mode 100644 index 7e7ea054..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ko",{button:{title:"버튼 속성",text:"버튼글자(값)",type:"버튼종류",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"체크박스 속성",radioTitle:"라디오버튼 속성",value:"값",selected:"선택됨"},form:{title:"폼 속성",menu:"폼 속성",action:"실행경로(Action)",method:"방법(Method)",encoding:"Encoding"},hidden:{title:"숨김필드 속성",name:"이름",value:"값"},select:{title:"펼침목록 속성",selectInfo:"정보",opAvail:"선택옵션",value:"값",size:"세로크기",lines:"줄",chkMulti:"여러항목 선택 허용",opText:"이름",opValue:"값", -btnAdd:"추가",btnModify:"변경",btnUp:"위로",btnDown:"아래로",btnSetValue:"선택된것으로 설정",btnDelete:"삭제"},textarea:{title:"입력영역 속성",cols:"칸수",rows:"줄수"},textfield:{title:"입력필드 속성",name:"이름",value:"값",charWidth:"글자 너비",maxChars:"최대 글자수",type:"종류",typeText:"문자열",typePass:"비밀번호",typeEmail:"이메일",typeSearch:"검색",typeTel:"전화번호",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ku.js deleted file mode 100644 index 75599890..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ku",{button:{title:"خاسیەتی دوگمە",text:"(نرخی) دەق",type:"جۆر",typeBtn:"دوگمە",typeSbm:"بنێرە",typeRst:"ڕێکخستنەوە"},checkboxAndRadio:{checkboxTitle:"خاسیەتی چووارگۆشی پشکنین",radioTitle:"خاسیەتی جێگرەوەی دوگمە",value:"نرخ",selected:"هەڵبژاردرا"},form:{title:"خاسیەتی داڕشتە",menu:"خاسیەتی داڕشتە",action:"کردار",method:"ڕێگە",encoding:"بەکۆدکەر"},hidden:{title:"خاسیەتی خانەی شاردراوە",name:"ناو",value:"نرخ"},select:{title:"هەڵبژاردەی خاسیەتی خانە",selectInfo:"زانیاری", -opAvail:"هەڵبژاردەی لەبەردەستدابوون",value:"نرخ",size:"گەورەیی",lines:"هێڵەکان",chkMulti:"ڕێدان بەفره هەڵبژارده",opText:"دەق",opValue:"نرخ",btnAdd:"زیادکردن",btnModify:"گۆڕانکاری",btnUp:"سەرەوه",btnDown:"خوارەوە",btnSetValue:"دابنێ وەك نرخێکی هەڵبژێردراو",btnDelete:"سڕینەوه"},textarea:{title:"خاسیەتی ڕووبەری دەق",cols:"ستوونەکان",rows:"ڕیزەکان"},textfield:{title:"خاسیەتی خانەی دەق",name:"ناو",value:"نرخ",charWidth:"پانی نووسە",maxChars:"ئەوپەڕی نووسە",type:"جۆر",typeText:"دەق",typePass:"پێپەڕەوشە", -typeEmail:"ئیمەیل",typeSearch:"گەڕان",typeTel:"ژمارەی تەلەفۆن",typeUrl:"ناونیشانی بەستەر"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lt.js deleted file mode 100644 index 743b8307..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","lt",{button:{title:"Mygtuko savybės",text:"Tekstas (Reikšmė)",type:"Tipas",typeBtn:"Mygtukas",typeSbm:"Siųsti",typeRst:"Išvalyti"},checkboxAndRadio:{checkboxTitle:"Žymimojo langelio savybės",radioTitle:"Žymimosios akutės savybės",value:"Reikšmė",selected:"Pažymėtas"},form:{title:"Formos savybės",menu:"Formos savybės",action:"Veiksmas",method:"Metodas",encoding:"Kodavimas"},hidden:{title:"Nerodomo lauko savybės",name:"Vardas",value:"Reikšmė"},select:{title:"Atrankos lauko savybės", -selectInfo:"Informacija",opAvail:"Galimos parinktys",value:"Reikšmė",size:"Dydis",lines:"eilučių",chkMulti:"Leisti daugeriopą atranką",opText:"Tekstas",opValue:"Reikšmė",btnAdd:"Įtraukti",btnModify:"Modifikuoti",btnUp:"Aukštyn",btnDown:"Žemyn",btnSetValue:"Laikyti pažymėta reikšme",btnDelete:"Trinti"},textarea:{title:"Teksto srities savybės",cols:"Ilgis",rows:"Plotis"},textfield:{title:"Teksto lauko savybės",name:"Vardas",value:"Reikšmė",charWidth:"Ilgis simboliais",maxChars:"Maksimalus simbolių skaičius", -type:"Tipas",typeText:"Tekstas",typePass:"Slaptažodis",typeEmail:"El. paštas",typeSearch:"Paieška",typeTel:"Telefono numeris",typeUrl:"Nuoroda"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lv.js deleted file mode 100644 index 289cd6a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","lv",{button:{title:"Pogas īpašības",text:"Teksts (vērtība)",type:"Tips",typeBtn:"Poga",typeSbm:"Nosūtīt",typeRst:"Atcelt"},checkboxAndRadio:{checkboxTitle:"Atzīmēšanas kastītes īpašības",radioTitle:"Izvēles poga īpašības",value:"Vērtība",selected:"Iezīmēts"},form:{title:"Formas īpašības",menu:"Formas īpašības",action:"Darbība",method:"Metode",encoding:"Kodējums"},hidden:{title:"Paslēptās teksta rindas īpašības",name:"Nosaukums",value:"Vērtība"},select:{title:"Iezīmēšanas lauka īpašības", -selectInfo:"Informācija",opAvail:"Pieejamās iespējas",value:"Vērtība",size:"Izmērs",lines:"rindas",chkMulti:"Atļaut vairākus iezīmējumus",opText:"Teksts",opValue:"Vērtība",btnAdd:"Pievienot",btnModify:"Veikt izmaiņas",btnUp:"Augšup",btnDown:"Lejup",btnSetValue:"Noteikt kā iezīmēto vērtību",btnDelete:"Dzēst"},textarea:{title:"Teksta laukuma īpašības",cols:"Kolonnas",rows:"Rindas"},textfield:{title:"Teksta rindas īpašības",name:"Nosaukums",value:"Vērtība",charWidth:"Simbolu platums",maxChars:"Simbolu maksimālais daudzums", -type:"Tips",typeText:"Teksts",typePass:"Parole",typeEmail:"Epasts",typeSearch:"Meklēt",typeTel:"Tālruņa numurs",typeUrl:"Adrese"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mk.js deleted file mode 100644 index 84837f53..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","mk",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mn.js deleted file mode 100644 index 747b5eb6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/mn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","mn",{button:{title:"Товчны шинж чанар",text:"Тэкст (Утга)",type:"Төрөл",typeBtn:"Товч",typeSbm:"Submit",typeRst:"Болих"},checkboxAndRadio:{checkboxTitle:"Чекбоксны шинж чанар",radioTitle:"Радио товчны шинж чанар",value:"Утга",selected:"Сонгогдсон"},form:{title:"Форм шинж чанар",menu:"Форм шинж чанар",action:"Үйлдэл",method:"Арга",encoding:"Encoding"},hidden:{title:"Нууц талбарын шинж чанар",name:"Нэр",value:"Утга"},select:{title:"Согогч талбарын шинж чанар",selectInfo:"Мэдээлэл", -opAvail:"Идвэхтэй сонголт",value:"Утга",size:"Хэмжээ",lines:"Мөр",chkMulti:"Олон зүйл зэрэг сонгохыг зөвшөөрөх",opText:"Тэкст",opValue:"Утга",btnAdd:"Нэмэх",btnModify:"Өөрчлөх",btnUp:"Дээш",btnDown:"Доош",btnSetValue:"Сонгогдсан утга оноох",btnDelete:"Устгах"},textarea:{title:"Текст орчны шинж чанар",cols:"Багана",rows:"Мөр"},textfield:{title:"Текст талбарын шинж чанар",name:"Нэр",value:"Утга",charWidth:"Тэмдэгтын өргөн",maxChars:"Хамгийн их тэмдэгт",type:"Төрөл",typeText:"Текст",typePass:"Нууц үг", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"цахим хуудасны хаяг (URL)"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ms.js deleted file mode 100644 index fbf6b9f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ms.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ms",{button:{title:"Ciri-ciri Butang",text:"Teks (Nilai)",type:"Jenis",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Ciri-ciri Checkbox",radioTitle:"Ciri-ciri Butang Radio",value:"Nilai",selected:"Dipilih"},form:{title:"Ciri-ciri Borang",menu:"Ciri-ciri Borang",action:"Tindakan borang",method:"Cara borang dihantar",encoding:"Encoding"},hidden:{title:"Ciri-ciri Field Tersembunyi",name:"Nama",value:"Nilai"},select:{title:"Ciri-ciri Selection Field", -selectInfo:"Select Info",opAvail:"Pilihan sediada",value:"Nilai",size:"Saiz",lines:"garisan",chkMulti:"Benarkan pilihan pelbagai",opText:"Teks",opValue:"Nilai",btnAdd:"Tambah Pilihan",btnModify:"Ubah Pilihan",btnUp:"Naik ke atas",btnDown:"Turun ke bawah",btnSetValue:"Set sebagai nilai terpilih",btnDelete:"Padam"},textarea:{title:"Ciri-ciri Textarea",cols:"Lajur",rows:"Baris"},textfield:{title:"Ciri-ciri Text Field",name:"Nama",value:"Nilai",charWidth:"Lebar isian",maxChars:"Isian Maksimum",type:"Jenis", -typeText:"Teks",typePass:"Kata Laluan",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nb.js deleted file mode 100644 index 5874510b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","nb",{button:{title:"Egenskaper for knapp",text:"Tekst (verdi)",type:"Type",typeBtn:"Knapp",typeSbm:"Send",typeRst:"Nullstill"},checkboxAndRadio:{checkboxTitle:"Egenskaper for avmerkingsboks",radioTitle:"Egenskaper for alternativknapp",value:"Verdi",selected:"Valgt"},form:{title:"Egenskaper for skjema",menu:"Egenskaper for skjema",action:"Handling",method:"Metode",encoding:"Encoding"},hidden:{title:"Egenskaper for skjult felt",name:"Navn",value:"Verdi"},select:{title:"Egenskaper for rullegardinliste", -selectInfo:"Info",opAvail:"Tilgjenglige alternativer",value:"Verdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillat flervalg",opText:"Tekst",opValue:"Verdi",btnAdd:"Legg til",btnModify:"Endre",btnUp:"Opp",btnDown:"Ned",btnSetValue:"Sett som valgt",btnDelete:"Slett"},textarea:{title:"Egenskaper for tekstområde",cols:"Kolonner",rows:"Rader"},textfield:{title:"Egenskaper for tekstfelt",name:"Navn",value:"Verdi",charWidth:"Tegnbredde",maxChars:"Maks antall tegn",type:"Type",typeText:"Tekst",typePass:"Passord", -typeEmail:"Epost",typeSearch:"Søk",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nl.js deleted file mode 100644 index 5bff8285..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","nl",{button:{title:"Eigenschappen knop",text:"Tekst (waarde)",type:"Soort",typeBtn:"Knop",typeSbm:"Versturen",typeRst:"Leegmaken"},checkboxAndRadio:{checkboxTitle:"Eigenschappen aanvinkvakje",radioTitle:"Eigenschappen selectievakje",value:"Waarde",selected:"Geselecteerd"},form:{title:"Eigenschappen formulier",menu:"Eigenschappen formulier",action:"Actie",method:"Methode",encoding:"Codering"},hidden:{title:"Eigenschappen verborgen veld",name:"Naam",value:"Waarde"}, -select:{title:"Eigenschappen selectieveld",selectInfo:"Informatie",opAvail:"Beschikbare opties",value:"Waarde",size:"Grootte",lines:"Regels",chkMulti:"Gecombineerde selecties toestaan",opText:"Tekst",opValue:"Waarde",btnAdd:"Toevoegen",btnModify:"Wijzigen",btnUp:"Omhoog",btnDown:"Omlaag",btnSetValue:"Als geselecteerde waarde instellen",btnDelete:"Verwijderen"},textarea:{title:"Eigenschappen tekstvak",cols:"Kolommen",rows:"Rijen"},textfield:{title:"Eigenschappen tekstveld",name:"Naam",value:"Waarde", -charWidth:"Breedte (tekens)",maxChars:"Maximum aantal tekens",type:"Soort",typeText:"Tekst",typePass:"Wachtwoord",typeEmail:"E-mail",typeSearch:"Zoeken",typeTel:"Telefoonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/no.js deleted file mode 100644 index 07e20c4f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/no.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","no",{button:{title:"Egenskaper for knapp",text:"Tekst (verdi)",type:"Type",typeBtn:"Knapp",typeSbm:"Send",typeRst:"Nullstill"},checkboxAndRadio:{checkboxTitle:"Egenskaper for avmerkingsboks",radioTitle:"Egenskaper for alternativknapp",value:"Verdi",selected:"Valgt"},form:{title:"Egenskaper for skjema",menu:"Egenskaper for skjema",action:"Handling",method:"Metode",encoding:"Encoding"},hidden:{title:"Egenskaper for skjult felt",name:"Navn",value:"Verdi"},select:{title:"Egenskaper for rullegardinliste", -selectInfo:"Info",opAvail:"Tilgjenglige alternativer",value:"Verdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillat flervalg",opText:"Tekst",opValue:"Verdi",btnAdd:"Legg til",btnModify:"Endre",btnUp:"Opp",btnDown:"Ned",btnSetValue:"Sett som valgt",btnDelete:"Slett"},textarea:{title:"Egenskaper for tekstområde",cols:"Kolonner",rows:"Rader"},textfield:{title:"Egenskaper for tekstfelt",name:"Navn",value:"Verdi",charWidth:"Tegnbredde",maxChars:"Maks antall tegn",type:"Type",typeText:"Tekst",typePass:"Passord", -typeEmail:"Epost",typeSearch:"Søk",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pl.js deleted file mode 100644 index 8577d620..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pl",{button:{title:"Właściwości przycisku",text:"Tekst (Wartość)",type:"Typ",typeBtn:"Przycisk",typeSbm:"Wyślij",typeRst:"Wyczyść"},checkboxAndRadio:{checkboxTitle:"Właściwości pola wyboru (checkbox)",radioTitle:"Właściwości przycisku opcji (radio)",value:"Wartość",selected:"Zaznaczone"},form:{title:"Właściwości formularza",menu:"Właściwości formularza",action:"Akcja",method:"Metoda",encoding:"Kodowanie"},hidden:{title:"Właściwości pola ukrytego",name:"Nazwa",value:"Wartość"}, -select:{title:"Właściwości listy wyboru",selectInfo:"Informacje",opAvail:"Dostępne opcje",value:"Wartość",size:"Rozmiar",lines:"wierszy",chkMulti:"Wielokrotny wybór",opText:"Tekst",opValue:"Wartość",btnAdd:"Dodaj",btnModify:"Zmień",btnUp:"Do góry",btnDown:"Do dołu",btnSetValue:"Ustaw jako zaznaczoną",btnDelete:"Usuń"},textarea:{title:"Właściwości obszaru tekstowego",cols:"Liczba kolumn",rows:"Liczba wierszy"},textfield:{title:"Właściwości pola tekstowego",name:"Nazwa",value:"Wartość",charWidth:"Szerokość w znakach", -maxChars:"Szerokość maksymalna",type:"Typ",typeText:"Tekst",typePass:"Hasło",typeEmail:"Email",typeSearch:"Szukaj",typeTel:"Numer telefonu",typeUrl:"Adres URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt-br.js deleted file mode 100644 index 1fe748a5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pt-br",{button:{title:"Formatar Botão",text:"Texto (Valor)",type:"Tipo",typeBtn:"Botão",typeSbm:"Enviar",typeRst:"Limpar"},checkboxAndRadio:{checkboxTitle:"Formatar Caixa de Seleção",radioTitle:"Formatar Botão de Opção",value:"Valor",selected:"Selecionado"},form:{title:"Formatar Formulário",menu:"Formatar Formulário",action:"Ação",method:"Método",encoding:"Codificação"},hidden:{title:"Formatar Campo Oculto",name:"Nome",value:"Valor"},select:{title:"Formatar Caixa de Listagem", -selectInfo:"Informações",opAvail:"Opções disponíveis",value:"Valor",size:"Tamanho",lines:"linhas",chkMulti:"Permitir múltiplas seleções",opText:"Texto",opValue:"Valor",btnAdd:"Adicionar",btnModify:"Modificar",btnUp:"Para cima",btnDown:"Para baixo",btnSetValue:"Definir como selecionado",btnDelete:"Remover"},textarea:{title:"Formatar Área de Texto",cols:"Colunas",rows:"Linhas"},textfield:{title:"Formatar Caixa de Texto",name:"Nome",value:"Valor",charWidth:"Comprimento (em caracteres)",maxChars:"Número Máximo de Caracteres", -type:"Tipo",typeText:"Texto",typePass:"Senha",typeEmail:"Email",typeSearch:"Busca",typeTel:"Número de Telefone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt.js deleted file mode 100644 index 7958d629..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pt",{button:{title:"Propriedades do Botão",text:"Texto (Valor)",type:"Tipo",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Propriedades da Caixa de Verificação",radioTitle:"Propriedades do Botão de Opção",value:"Valor",selected:"Seleccionado"},form:{title:"Propriedades do Formulário",menu:"Propriedades do Formulário",action:"Acção",method:"Método",encoding:"Encoding"},hidden:{title:"Propriedades do Campo Escondido",name:"Nome", -value:"Valor"},select:{title:"Propriedades da Caixa de Combinação",selectInfo:"Informação",opAvail:"Opções Possíveis",value:"Valor",size:"Tamanho",lines:"linhas",chkMulti:"Permitir selecções múltiplas",opText:"Texto",opValue:"Valor",btnAdd:"Adicionar",btnModify:"Modificar",btnUp:"Para cima",btnDown:"Para baixo",btnSetValue:"Definir um valor por defeito",btnDelete:"Apagar"},textarea:{title:"Propriedades da Área de Texto",cols:"Colunas",rows:"Linhas"},textfield:{title:"Propriedades do Campo de Texto", -name:"Nome",value:"Valor",charWidth:"Tamanho do caracter",maxChars:"Nr. Máximo de Caracteres",type:"Tipo",typeText:"Texto",typePass:"Palavra-chave",typeEmail:"Email",typeSearch:"Pesquisar",typeTel:"Numero de telefone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ro.js deleted file mode 100644 index 0db618b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ro",{button:{title:"Proprietăţi buton",text:"Text (Valoare)",type:"Tip",typeBtn:"Buton",typeSbm:"Trimite",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Proprietăţi bifă (Checkbox)",radioTitle:"Proprietăţi buton radio (Radio Button)",value:"Valoare",selected:"Selectat"},form:{title:"Proprietăţi formular (Form)",menu:"Proprietăţi formular (Form)",action:"Acţiune",method:"Metodă",encoding:"Encodare"},hidden:{title:"Proprietăţi câmp ascuns (Hidden Field)",name:"Nume", -value:"Valoare"},select:{title:"Proprietăţi câmp selecţie (Selection Field)",selectInfo:"Informaţii",opAvail:"Opţiuni disponibile",value:"Valoare",size:"Mărime",lines:"linii",chkMulti:"Permite selecţii multiple",opText:"Text",opValue:"Valoare",btnAdd:"Adaugă",btnModify:"Modifică",btnUp:"Sus",btnDown:"Jos",btnSetValue:"Setează ca valoare selectată",btnDelete:"Şterge"},textarea:{title:"Proprietăţi suprafaţă text (Textarea)",cols:"Coloane",rows:"Linii"},textfield:{title:"Proprietăţi câmp text (Text Field)", -name:"Nume",value:"Valoare",charWidth:"Lărgimea caracterului",maxChars:"Caractere maxime",type:"Tip",typeText:"Text",typePass:"Parolă",typeEmail:"Email",typeSearch:"Cauta",typeTel:"Numar de telefon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ru.js deleted file mode 100644 index 534eb497..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ru",{button:{title:"Свойства кнопки",text:"Текст (Значение)",type:"Тип",typeBtn:"Кнопка",typeSbm:"Отправка",typeRst:"Сброс"},checkboxAndRadio:{checkboxTitle:"Свойства флаговой кнопки",radioTitle:"Свойства кнопки выбора",value:"Значение",selected:"Выбрано"},form:{title:"Свойства формы",menu:"Свойства формы",action:"Действие",method:"Метод",encoding:"Кодировка"},hidden:{title:"Свойства скрытого поля",name:"Имя",value:"Значение"},select:{title:"Свойства списка выбора", -selectInfo:"Информация о списке выбора",opAvail:"Доступные варианты",value:"Значение",size:"Размер",lines:"строк(и)",chkMulti:"Разрешить выбор нескольких вариантов",opText:"Текст",opValue:"Значение",btnAdd:"Добавить",btnModify:"Изменить",btnUp:"Поднять",btnDown:"Опустить",btnSetValue:"Пометить как выбранное",btnDelete:"Удалить"},textarea:{title:"Свойства многострочного текстового поля",cols:"Колонок",rows:"Строк"},textfield:{title:"Свойства текстового поля",name:"Имя",value:"Значение",charWidth:"Ширина поля (в символах)", -maxChars:"Макс. количество символов",type:"Тип содержимого",typeText:"Текст",typePass:"Пароль",typeEmail:"Email",typeSearch:"Поиск",typeTel:"Номер телефона",typeUrl:"Ссылка"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/si.js deleted file mode 100644 index ab61582f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/si.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","si",{button:{title:"බොත්තම් ගුණ",text:"වගන්තිය(වටිනාකම)",type:"වර්ගය",typeBtn:"බොත්තම",typeSbm:"යොමුකරනවා",typeRst:"නැවත ආරම්භකතත්වයට පත් කරනවා"},checkboxAndRadio:{checkboxTitle:"ලකුණු කිරීමේ කොටුවේ ලක්ෂණ",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"පෝරමයේ ",menu:"පෝරමයේ ගුණ/",action:"ගන්නා පියවර",method:"ක්‍රමය",encoding:"කේතීකරණය"},hidden:{title:"සැඟවුණු ප්‍රදේශයේ ",name:"නම",value:"Value"},select:{title:"තේරීම් ප්‍රදේශයේ ", -selectInfo:"විස්තර තෝරන්න",opAvail:"ඉතුරුවී ඇති වීකල්ප",value:"Value",size:"විශාලත්වය",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"මකා දැම්ම"},textarea:{title:"Textarea Properties",cols:"සිරස් ",rows:"Rows"},textfield:{title:"Text Field Properties",name:"නම",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"වර්ගය",typeText:"Text", -typePass:"Password",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sk.js deleted file mode 100644 index 218b6274..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sk",{button:{title:"Vlastnosti tlačidla",text:"Text (Hodnota)",type:"Typ",typeBtn:"Tlačidlo",typeSbm:"Odoslať",typeRst:"Resetovať"},checkboxAndRadio:{checkboxTitle:"Vlastnosti zaškrtávacieho políčka",radioTitle:"Vlastnosti prepínača (radio button)",value:"Hodnota",selected:"Vybrané (selected)"},form:{title:"Vlastnosti formulára",menu:"Vlastnosti formulára",action:"Akcia (action)",method:"Metóda (method)",encoding:"Kódovanie (encoding)"},hidden:{title:"Vlastnosti skrytého poľa", -name:"Názov (name)",value:"Hodnota"},select:{title:"Vlastnosti rozbaľovacieho zoznamu",selectInfo:"Informácie o výbere",opAvail:"Dostupné možnosti",value:"Hodnota",size:"Veľkosť",lines:"riadkov",chkMulti:"Povoliť viacnásobný výber",opText:"Text",opValue:"Hodnota",btnAdd:"Pridať",btnModify:"Upraviť",btnUp:"Hore",btnDown:"Dole",btnSetValue:"Nastaviť ako vybranú hodnotu",btnDelete:"Vymazať"},textarea:{title:"Vlastnosti textovej oblasti (textarea)",cols:"Stĺpcov",rows:"Riadkov"},textfield:{title:"Vlastnosti textového poľa", -name:"Názov (name)",value:"Hodnota",charWidth:"Šírka poľa (podľa znakov)",maxChars:"Maximálny počet znakov",type:"Typ",typeText:"Text",typePass:"Heslo",typeEmail:"Email",typeSearch:"Hľadať",typeTel:"Telefónne číslo",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sl.js deleted file mode 100644 index ad3bc43f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sl",{button:{title:"Lastnosti gumba",text:"Besedilo (Vrednost)",type:"Tip",typeBtn:"Gumb",typeSbm:"Potrdi",typeRst:"Ponastavi"},checkboxAndRadio:{checkboxTitle:"Lastnosti potrditvenega polja",radioTitle:"Lastnosti izbirnega polja",value:"Vrednost",selected:"Izbrano"},form:{title:"Lastnosti obrazca",menu:"Lastnosti obrazca",action:"Akcija",method:"Metoda",encoding:"Kodiranje znakov"},hidden:{title:"Lastnosti skritega polja",name:"Ime",value:"Vrednost"},select:{title:"Lastnosti spustnega seznama", -selectInfo:"Podatki",opAvail:"Razpoložljive izbire",value:"Vrednost",size:"Velikost",lines:"vrstic",chkMulti:"Dovoli izbor večih vrstic",opText:"Besedilo",opValue:"Vrednost",btnAdd:"Dodaj",btnModify:"Spremeni",btnUp:"Gor",btnDown:"Dol",btnSetValue:"Postavi kot privzeto izbiro",btnDelete:"Izbriši"},textarea:{title:"Lastnosti vnosnega območja",cols:"Stolpcev",rows:"Vrstic"},textfield:{title:"Lastnosti vnosnega polja",name:"Ime",value:"Vrednost",charWidth:"Dolžina",maxChars:"Največje število znakov", -type:"Tip",typeText:"Besedilo",typePass:"Geslo",typeEmail:"E-pošta",typeSearch:"Iskanje",typeTel:"Telefonska Številka",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sq.js deleted file mode 100644 index a8c45b47..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sq",{button:{title:"Rekuizitat e Pullës",text:"Teskti (Vlera)",type:"LLoji",typeBtn:"Buton",typeSbm:"Dërgo",typeRst:"Rikthe"},checkboxAndRadio:{checkboxTitle:"Rekuizitat e Kutizë Përzgjedhëse",radioTitle:"Rekuizitat e Pullës",value:"Vlera",selected:"Përzgjedhur"},form:{title:"Rekuizitat e Formës",menu:"Rekuizitat e Formës",action:"Veprim",method:"Metoda",encoding:"Kodimi"},hidden:{title:"Rekuizitat e Fushës së Fshehur",name:"Emër",value:"Vlera"},select:{title:"Rekuizitat e Fushës së Përzgjedhur", -selectInfo:"Përzgjidh Informacionin",opAvail:"Opsionet e Mundshme",value:"Vlera",size:"Madhësia",lines:"rreshtat",chkMulti:"Lejo përzgjidhje të shumëfishta",opText:"Teksti",opValue:"Vlera",btnAdd:"Vendos",btnModify:"Ndrysho",btnUp:"Sipër",btnDown:"Poshtë",btnSetValue:"Bëje si vlerë të përzgjedhur",btnDelete:"Grise"},textarea:{title:"Rekuzitat e Fushës së Tekstit",cols:"Kolonat",rows:"Rreshtat"},textfield:{title:"Rekuizitat e Fushës së Tekstit",name:"Emër",value:"Vlera",charWidth:"Gjerësia e Karakterit", -maxChars:"Numri maksimal i karaktereve",type:"LLoji",typeText:"Teksti",typePass:"Fjalëkalimi",typeEmail:"Posta Elektronike",typeSearch:"Kërko",typeTel:"Numri i Telefonit",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr-latn.js deleted file mode 100644 index af31d088..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr-latn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sr-latn",{button:{title:"Osobine dugmeta",text:"Tekst (vrednost)",type:"Tip",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Osobine polja za potvrdu",radioTitle:"Osobine radio-dugmeta",value:"Vrednost",selected:"Označeno"},form:{title:"Osobine forme",menu:"Osobine forme",action:"Akcija",method:"Metoda",encoding:"Encoding"},hidden:{title:"Osobine skrivenog polja",name:"Naziv",value:"Vrednost"},select:{title:"Osobine izbornog polja", -selectInfo:"Info",opAvail:"Dostupne opcije",value:"Vrednost",size:"Veličina",lines:"linija",chkMulti:"Dozvoli višestruku selekciju",opText:"Tekst",opValue:"Vrednost",btnAdd:"Dodaj",btnModify:"Izmeni",btnUp:"Gore",btnDown:"Dole",btnSetValue:"Podesi kao označenu vrednost",btnDelete:"Obriši"},textarea:{title:"Osobine zone teksta",cols:"Broj kolona",rows:"Broj redova"},textfield:{title:"Osobine tekstualnog polja",name:"Naziv",value:"Vrednost",charWidth:"Širina (karaktera)",maxChars:"Maksimalno karaktera", -type:"Tip",typeText:"Tekst",typePass:"Lozinka",typeEmail:"Email",typeSearch:"Pretraži",typeTel:"Broj telefona",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr.js deleted file mode 100644 index 74d46b2d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sr",{button:{title:"Особине дугмета",text:"Текст (вредност)",type:"Tип",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Особине поља за потврду",radioTitle:"Особине радио-дугмета",value:"Вредност",selected:"Означено"},form:{title:"Особине форме",menu:"Особине форме",action:"Aкција",method:"Mетода",encoding:"Encoding"},hidden:{title:"Особине скривеног поља",name:"Назив",value:"Вредност"},select:{title:"Особине изборног поља",selectInfo:"Инфо", -opAvail:"Доступне опције",value:"Вредност",size:"Величина",lines:"линија",chkMulti:"Дозволи вишеструку селекцију",opText:"Текст",opValue:"Вредност",btnAdd:"Додај",btnModify:"Измени",btnUp:"Горе",btnDown:"Доле",btnSetValue:"Подеси као означену вредност",btnDelete:"Обриши"},textarea:{title:"Особине зоне текста",cols:"Број колона",rows:"Број редова"},textfield:{title:"Особине текстуалног поља",name:"Назив",value:"Вредност",charWidth:"Ширина (карактера)",maxChars:"Максимално карактера",type:"Тип",typeText:"Текст", -typePass:"Лозинка",typeEmail:"Е-пошта",typeSearch:"Претрага",typeTel:"Број телефона",typeUrl:"УРЛ"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sv.js deleted file mode 100644 index b03b381d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sv",{button:{title:"Egenskaper för knapp",text:"Text (värde)",type:"Typ",typeBtn:"Knapp",typeSbm:"Skicka",typeRst:"Återställ"},checkboxAndRadio:{checkboxTitle:"Egenskaper för kryssruta",radioTitle:"Egenskaper för alternativknapp",value:"Värde",selected:"Vald"},form:{title:"Egenskaper för formulär",menu:"Egenskaper för formulär",action:"Funktion",method:"Metod",encoding:"Kodning"},hidden:{title:"Egenskaper för dolt fält",name:"Namn",value:"Värde"},select:{title:"Egenskaper för flervalslista", -selectInfo:"Information",opAvail:"Befintliga val",value:"Värde",size:"Storlek",lines:"Linjer",chkMulti:"Tillåt flerval",opText:"Text",opValue:"Värde",btnAdd:"Lägg till",btnModify:"Redigera",btnUp:"Upp",btnDown:"Ner",btnSetValue:"Markera som valt värde",btnDelete:"Radera"},textarea:{title:"Egenskaper för textruta",cols:"Kolumner",rows:"Rader"},textfield:{title:"Egenskaper för textfält",name:"Namn",value:"Värde",charWidth:"Teckenbredd",maxChars:"Max antal tecken",type:"Typ",typeText:"Text",typePass:"Lösenord", -typeEmail:"E-post",typeSearch:"Sök",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/th.js deleted file mode 100644 index e9337498..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","th",{button:{title:"รายละเอียดของ ปุ่ม",text:"ข้อความ (ค่าตัวแปร)",type:"ข้อความ",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"คุณสมบัติของ เช็คบ๊อก",radioTitle:"คุณสมบัติของ เรดิโอบัตตอน",value:"ค่าตัวแปร",selected:"เลือกเป็นค่าเริ่มต้น"},form:{title:"คุณสมบัติของ แบบฟอร์ม",menu:"คุณสมบัติของ แบบฟอร์ม",action:"แอคชั่น",method:"เมธอด",encoding:"Encoding"},hidden:{title:"คุณสมบัติของ ฮิดเดนฟิลด์",name:"ชื่อ",value:"ค่าตัวแปร"}, -select:{title:"คุณสมบัติของ แถบตัวเลือก",selectInfo:"อินโฟ",opAvail:"รายการตัวเลือก",value:"ค่าตัวแปร",size:"ขนาด",lines:"บรรทัด",chkMulti:"เลือกหลายค่าได้",opText:"ข้อความ",opValue:"ค่าตัวแปร",btnAdd:"เพิ่ม",btnModify:"แก้ไข",btnUp:"บน",btnDown:"ล่าง",btnSetValue:"เลือกเป็นค่าเริ่มต้น",btnDelete:"ลบ"},textarea:{title:"คุณสมบัติของ เท็กแอเรีย",cols:"สดมภ์",rows:"แถว"},textfield:{title:"คุณสมบัติของ เท็กซ์ฟิลด์",name:"ชื่อ",value:"ค่าตัวแปร",charWidth:"ความกว้าง",maxChars:"จำนวนตัวอักษรสูงสุด",type:"ชนิด", -typeText:"ข้อความ",typePass:"รหัสผ่าน",typeEmail:"อีเมล",typeSearch:"ค้นหาก",typeTel:"หมายเลขโทรศัพท์",typeUrl:"ที่อยู่อ้างอิง URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tr.js deleted file mode 100644 index 3710d318..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","tr",{button:{title:"Düğme Özellikleri",text:"Metin (Değer)",type:"Tip",typeBtn:"Düğme",typeSbm:"Gönder",typeRst:"Sıfırla"},checkboxAndRadio:{checkboxTitle:"Onay Kutusu Özellikleri",radioTitle:"Seçenek Düğmesi Özellikleri",value:"Değer",selected:"Seçili"},form:{title:"Form Özellikleri",menu:"Form Özellikleri",action:"İşlem",method:"Yöntem",encoding:"Kodlama"},hidden:{title:"Gizli Veri Özellikleri",name:"Ad",value:"Değer"},select:{title:"Seçim Menüsü Özellikleri",selectInfo:"Bilgi", -opAvail:"Mevcut Seçenekler",value:"Değer",size:"Boyut",lines:"satır",chkMulti:"Çoklu seçime izin ver",opText:"Metin",opValue:"Değer",btnAdd:"Ekle",btnModify:"Düzenle",btnUp:"Yukarı",btnDown:"Aşağı",btnSetValue:"Seçili değer olarak ata",btnDelete:"Sil"},textarea:{title:"Çok Satırlı Metin Özellikleri",cols:"Sütunlar",rows:"Satırlar"},textfield:{title:"Metin Girişi Özellikleri",name:"Ad",value:"Değer",charWidth:"Karakter Genişliği",maxChars:"En Fazla Karakter",type:"Tür",typeText:"Metin",typePass:"Şifre", -typeEmail:"E-posta",typeSearch:"Ara",typeTel:"Telefon Numarası",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tt.js deleted file mode 100644 index 2242a407..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/tt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","tt",{button:{title:"Төймә үзлекләре",text:"Text (Value)",type:"Төр",typeBtn:"Төймә",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Сайланган"},form:{title:"Форма үзлекләре",menu:"Форма үзлекләре",action:"Гамәл",method:"Ысул",encoding:"Кодировка"},hidden:{title:"Яшерен кыр үзлекләре",name:"Исем",value:"Күләм"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Күләм",size:"Зурлык",lines:"юллар",chkMulti:"Allow multiple selections",opText:"Текст",opValue:"Күләм",btnAdd:"Кушу",btnModify:"Үзгәртү",btnUp:"Өскә",btnDown:"Аска",btnSetValue:"Set as selected value",btnDelete:"Бетерү"},textarea:{title:"Текст мәйданы үзлекләре",cols:"Баганалар",rows:"Юллар"},textfield:{title:"Текст кыры үзлекләре",name:"Исем",value:"Күләм",charWidth:"Символлар киңлеге",maxChars:"Maximum Characters",type:"Төр",typeText:"Текст",typePass:"Сер сүз", -typeEmail:"Эл. почта",typeSearch:"Эзләү",typeTel:"Телефон номеры",typeUrl:"Сылталама"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ug.js deleted file mode 100644 index 9ff3eeeb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ug",{button:{title:"توپچا خاسلىقى",text:"بەلگە (قىممەت)",type:"تىپى",typeBtn:"توپچا",typeSbm:"تاپشۇر",typeRst:"ئەسلىگە قايتۇر"},checkboxAndRadio:{checkboxTitle:"كۆپ تاللاش خاسلىقى",radioTitle:"تاق تاللاش توپچا خاسلىقى",value:"تاللىغان قىممەت",selected:"تاللانغان"},form:{title:"جەدۋەل خاسلىقى",menu:"جەدۋەل خاسلىقى",action:"مەشغۇلات",method:"ئۇسۇل",encoding:"جەدۋەل كودلىنىشى"},hidden:{title:"يوشۇرۇن دائىرە خاسلىقى",name:"ئات",value:"دەسلەپكى قىممىتى"},select:{title:"جەدۋەل/تىزىم خاسلىقى", -selectInfo:"ئۇچۇر تاللاڭ",opAvail:"تاللاش تۈرلىرى",value:"قىممەت",size:"ئېگىزلىكى",lines:"قۇر",chkMulti:"كۆپ تاللاشچان",opText:"تاللانما تېكىستى",opValue:"تاللانما قىممىتى",btnAdd:"قوش",btnModify:"ئۆزگەرت",btnUp:"ئۈستىگە",btnDown:"ئاستىغا",btnSetValue:"دەسلەپكى تاللانما قىممىتىگە تەڭشە",btnDelete:"ئۆچۈر"},textarea:{title:" كۆپ قۇرلۇق تېكىست خاسلىقى",cols:"ھەرپ كەڭلىكى",rows:"قۇر سانى"},textfield:{title:"تاق قۇرلۇق تېكىست خاسلىقى",name:"ئات",value:"دەسلەپكى قىممىتى",charWidth:"ھەرپ كەڭلىكى",maxChars:"ئەڭ كۆپ ھەرپ سانى", -type:"تىپى",typeText:"تېكىست",typePass:"ئىم",typeEmail:"تورخەت",typeSearch:"ئىزدە",typeTel:"تېلېفون نومۇر",typeUrl:"ئادرېس"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/uk.js deleted file mode 100644 index 317d57f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","uk",{button:{title:"Властивості кнопки",text:"Значення",type:"Тип",typeBtn:"Кнопка (button)",typeSbm:"Надіслати (submit)",typeRst:"Очистити (reset)"},checkboxAndRadio:{checkboxTitle:"Властивості галочки",radioTitle:"Властивості кнопки вибору",value:"Значення",selected:"Обрана"},form:{title:"Властивості форми",menu:"Властивості форми",action:"Дія",method:"Метод",encoding:"Кодування"},hidden:{title:"Властивості прихованого поля",name:"Ім'я",value:"Значення"},select:{title:"Властивості списку", -selectInfo:"Інфо",opAvail:"Доступні варіанти",value:"Значення",size:"Кількість",lines:"видимих позицій у списку",chkMulti:"Список з мультивибором",opText:"Текст",opValue:"Значення",btnAdd:"Добавити",btnModify:"Змінити",btnUp:"Вгору",btnDown:"Вниз",btnSetValue:"Встановити як обране значення",btnDelete:"Видалити"},textarea:{title:"Властивості текстової області",cols:"Стовбці",rows:"Рядки"},textfield:{title:"Властивості текстового поля",name:"Ім'я",value:"Значення",charWidth:"Ширина",maxChars:"Макс. к-ть символів", -type:"Тип",typeText:"Текст",typePass:"Пароль",typeEmail:"Пошта",typeSearch:"Пошук",typeTel:"Мобільний",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/vi.js deleted file mode 100644 index a02d09c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","vi",{button:{title:"Thuộc tính của nút",text:"Chuỗi hiển thị (giá trị)",type:"Kiểu",typeBtn:"Nút bấm",typeSbm:"Nút gửi",typeRst:"Nút nhập lại"},checkboxAndRadio:{checkboxTitle:"Thuộc tính nút kiểm",radioTitle:"Thuộc tính nút chọn",value:"Giá trị",selected:"Được chọn"},form:{title:"Thuộc tính biểu mẫu",menu:"Thuộc tính biểu mẫu",action:"Hành động",method:"Phương thức",encoding:"Bảng mã"},hidden:{title:"Thuộc tính trường ẩn",name:"Tên",value:"Giá trị"},select:{title:"Thuộc tính ô chọn", -selectInfo:"Thông tin",opAvail:"Các tùy chọn có thể sử dụng",value:"Giá trị",size:"Kích cỡ",lines:"dòng",chkMulti:"Cho phép chọn nhiều",opText:"Văn bản",opValue:"Giá trị",btnAdd:"Thêm",btnModify:"Thay đổi",btnUp:"Lên",btnDown:"Xuống",btnSetValue:"Giá trị được chọn",btnDelete:"Nút xoá"},textarea:{title:"Thuộc tính vùng văn bản",cols:"Số cột",rows:"Số hàng"},textfield:{title:"Thuộc tính trường văn bản",name:"Tên",value:"Giá trị",charWidth:"Độ rộng của ký tự",maxChars:"Số ký tự tối đa",type:"Kiểu",typeText:"Ký tự", -typePass:"Mật khẩu",typeEmail:"Email",typeSearch:"Tìm kiếm",typeTel:"Số điện thoại",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh-cn.js deleted file mode 100644 index 3c7ea105..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","zh-cn",{button:{title:"按钮属性",text:"标签(值)",type:"类型",typeBtn:"按钮",typeSbm:"提交",typeRst:"重设"},checkboxAndRadio:{checkboxTitle:"复选框属性",radioTitle:"单选按钮属性",value:"选定值",selected:"已勾选"},form:{title:"表单属性",menu:"表单属性",action:"动作",method:"方法",encoding:"表单编码"},hidden:{title:"隐藏域属性",name:"名称",value:"初始值"},select:{title:"菜单/列表属性",selectInfo:"选择信息",opAvail:"可选项",value:"值",size:"高度",lines:"行",chkMulti:"允许多选",opText:"选项文本",opValue:"选项值",btnAdd:"添加",btnModify:"修改",btnUp:"上移",btnDown:"下移", -btnSetValue:"设为初始选定",btnDelete:"删除"},textarea:{title:"多行文本属性",cols:"字符宽度",rows:"行数"},textfield:{title:"单行文本属性",name:"名称",value:"初始值",charWidth:"字符宽度",maxChars:"最多字符数",type:"类型",typeText:"文本",typePass:"密码",typeEmail:"Email",typeSearch:"搜索",typeTel:"电话号码",typeUrl:"地址"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh.js deleted file mode 100644 index 4eec674e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","zh",{button:{title:"按鈕內容",text:"顯示文字 (值)",type:"類型",typeBtn:"按鈕",typeSbm:"送出",typeRst:"重設"},checkboxAndRadio:{checkboxTitle:"核取方塊內容",radioTitle:"選項按鈕內容",value:"數值",selected:"已選"},form:{title:"表單內容",menu:"表單內容",action:"動作",method:"方式",encoding:"編碼"},hidden:{title:"隱藏欄位內容",name:"名稱",value:"數值"},select:{title:"選取欄位內容",selectInfo:"選擇資訊",opAvail:"可用選項",value:"數值",size:"大小",lines:"行數",chkMulti:"允許多選",opText:"文字",opValue:"數值",btnAdd:"新增",btnModify:"修改",btnUp:"向上",btnDown:"向下", -btnSetValue:"設為已選",btnDelete:"刪除"},textarea:{title:"文字區域內容",cols:"列",rows:"行"},textfield:{title:"文字欄位內容",name:"名字",value:"數值",charWidth:"字元寬度",maxChars:"最大字元數",type:"類型",typeText:"文字",typePass:"密碼",typeEmail:"電子郵件",typeSearch:"搜尋",typeTel:"電話號碼",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/forms/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/forms/plugin.js deleted file mode 100644 index 5a1ffae7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/forms/plugin.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("forms",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"button,checkbox,form,hiddenfield,imagebutton,radio,select,select-rtl,textarea,textarea-rtl,textfield",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_editable form{border: 1px dotted #FF0000;padding: 2px;}\n"); -CKEDITOR.addCss("img.cke_hidden{background-image: url("+CKEDITOR.getUrl(this.path+"images/hiddenfield.gif")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 16px !important;height: 16px !important;}")},init:function(a){var b=a.lang,g=0,h={email:1,password:1,search:1,tel:1,text:1,url:1},j={checkbox:"input[type,name,checked]",radio:"input[type,name,checked]",textfield:"input[type,name,value,size,maxlength]",textarea:"textarea[cols,rows,name]",select:"select[name,size,multiple]; option[value,selected]", -button:"input[type,name,value]",form:"form[action,name,id,enctype,target,method]",hiddenfield:"input[type,name,value]",imagebutton:"input[type,alt,src]{width,height,border,border-width,border-style,margin,float}"},k={checkbox:"input",radio:"input",textfield:"input",textarea:"textarea",select:"select",button:"input",form:"form",hiddenfield:"input",imagebutton:"input"},e=function(d,c,e){var h={allowedContent:j[c],requiredContent:k[c]};"form"==c&&(h.context="form");a.addCommand(c,new CKEDITOR.dialogCommand(c, -h));a.ui.addButton&&a.ui.addButton(d,{label:b.common[d.charAt(0).toLowerCase()+d.slice(1)],command:c,toolbar:"forms,"+(g+=10)});CKEDITOR.dialog.add(c,e)},f=this.path+"dialogs/";!a.blockless&&e("Form","form",f+"form.js");e("Checkbox","checkbox",f+"checkbox.js");e("Radio","radio",f+"radio.js");e("TextField","textfield",f+"textfield.js");e("Textarea","textarea",f+"textarea.js");e("Select","select",f+"select.js");e("Button","button",f+"button.js");var i=a.plugins.image;i&&!a.plugins.image2&&e("ImageButton", -"imagebutton",CKEDITOR.plugins.getPath("image")+"dialogs/image.js");e("HiddenField","hiddenfield",f+"hiddenfield.js");a.addMenuItems&&(e={checkbox:{label:b.forms.checkboxAndRadio.checkboxTitle,command:"checkbox",group:"checkbox"},radio:{label:b.forms.checkboxAndRadio.radioTitle,command:"radio",group:"radio"},textfield:{label:b.forms.textfield.title,command:"textfield",group:"textfield"},hiddenfield:{label:b.forms.hidden.title,command:"hiddenfield",group:"hiddenfield"},button:{label:b.forms.button.title, -command:"button",group:"button"},select:{label:b.forms.select.title,command:"select",group:"select"},textarea:{label:b.forms.textarea.title,command:"textarea",group:"textarea"}},i&&(e.imagebutton={label:b.image.titleButton,command:"imagebutton",group:"imagebutton"}),!a.blockless&&(e.form={label:b.forms.form.menu,command:"form",group:"form"}),a.addMenuItems(e));a.contextMenu&&(!a.blockless&&a.contextMenu.addListener(function(d,c,a){if((d=a.contains("form",1))&&!d.isReadOnly())return{form:CKEDITOR.TRISTATE_OFF}}), -a.contextMenu.addListener(function(d){if(d&&!d.isReadOnly()){var c=d.getName();if(c=="select")return{select:CKEDITOR.TRISTATE_OFF};if(c=="textarea")return{textarea:CKEDITOR.TRISTATE_OFF};if(c=="input"){var a=d.getAttribute("type")||"text";switch(a){case "button":case "submit":case "reset":return{button:CKEDITOR.TRISTATE_OFF};case "checkbox":return{checkbox:CKEDITOR.TRISTATE_OFF};case "radio":return{radio:CKEDITOR.TRISTATE_OFF};case "image":return i?{imagebutton:CKEDITOR.TRISTATE_OFF}:null}if(h[a])return{textfield:CKEDITOR.TRISTATE_OFF}}if(c== -"img"&&d.data("cke-real-element-type")=="hiddenfield")return{hiddenfield:CKEDITOR.TRISTATE_OFF}}}));a.on("doubleclick",function(d){var c=d.data.element;if(!a.blockless&&c.is("form"))d.data.dialog="form";else if(c.is("select"))d.data.dialog="select";else if(c.is("textarea"))d.data.dialog="textarea";else if(c.is("img")&&c.data("cke-real-element-type")=="hiddenfield")d.data.dialog="hiddenfield";else if(c.is("input")){c=c.getAttribute("type")||"text";switch(c){case "button":case "submit":case "reset":d.data.dialog= -"button";break;case "checkbox":d.data.dialog="checkbox";break;case "radio":d.data.dialog="radio";break;case "image":d.data.dialog="imagebutton"}if(h[c])d.data.dialog="textfield"}})},afterInit:function(a){var b=a.dataProcessor,g=b&&b.htmlFilter,b=b&&b.dataFilter;CKEDITOR.env.ie&&g&&g.addRules({elements:{input:function(a){var a=a.attributes,b=a.type;b||(a.type="text");("checkbox"==b||"radio"==b)&&"on"==a.value&&delete a.value}}},{applyToAll:!0});b&&b.addRules({elements:{input:function(b){if("hidden"== -b.attributes.type)return a.createFakeParserElement(b,"cke_hidden","hiddenfield")}}},{applyToAll:!0})}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/icons.png b/platforms/android/assets/www/lib/ckeditor/plugins/icons.png deleted file mode 100644 index 163fd0def2d8c4d6a17c203e923dcff3ac512ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18271 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/icons_hidpi.png b/platforms/android/assets/www/lib/ckeditor/plugins/icons_hidpi.png deleted file mode 100644 index c181faa9e06422f5c4cb1468f6e99201e0291ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62881 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 P0zS&}>T(q_7D4|9<nUw{ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js deleted file mode 100644 index dba1e930..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}}; -CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&(a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type"))&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d= -{};this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]", -style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight, -"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder", -type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png deleted file mode 100644 index ff17604da22bf1ecb420fa142dc5fd35d6c1356b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3091 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/iframe.png b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/icons/iframe.png deleted file mode 100644 index f72d191553f382efc7cab78ad1ec4eb13c4b446d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(>G5S#}JFtwUcdqUYClr&A-22*YHa-pMXzZkdSavrizKL?2fa( z3pIU?EaaQQC(-Pq=f`v8$iahWXUy1r=U~Y$J}&NZ;XR_A9bHKtoD=ID8o6FNX(njq z#<xdzOir(#SA1@Ev5(#S;}Xq>A0BvHcKPz<!~a9KMm_!XX;RwePL(&`H(Y;x^l4FI zPa%^$Q-9-j>pSZY_#X)NylytTx4WDB-Me=i-jw~Wf2e-I&qPXg_0=pn&-I?0rcIx| z*V)<mJyX3@^1K}}dVAvZ%XZ72e*DqqK;Cw1V`JlDVGfq6rh^I74WGGch*bUm@#DwQ zd-v|eS<TgBT>V|B|2Xp`hB?P(G+(`Xb!&#nuW}WkKpVMmqnR~)Q|{z_x1J<3>E7)- zcVgJTF)m-ie$dHi<{6J)3PPPzmMvdC)kEb;(ayYU*RIt~5wW(idi3N8i|5Azi$BsE z6gXE4UwYix+4;4xvGHxx+HWg@Rt9KIy>aW-t<IxK^O<M5Eq2^|bIHYwHNR^1-M3cU zKkLAzHJ3MU-mK}FfA-wDy6qb_eE9U{&6{-3$7{p7y_Oz&_)u|aP-oTNbEi&uU3yqB z$8ODq>(|5mmImc}IbB-b>GEiE(N3B7Z{L1p+&gK-)vP)5=U>j-?g^Cs^8NdCc^13* z@2eA5DH}{$HhtQ(IQFaqat2DBw{PG6eddwf{Cr=bE3Zr4+}!3domVL=Ej{}6tLegk z7l9Ts|I%w}Vq#-sndX&CG1Q21u<ToN{dL6Etf_P7&Sg$GBw_rl#Omd{cWKGVkJAbY z3@+!GNy^Hm78PycP3VziJ+|rQ8^^6ttxgLYRLa#R|76o(OrGmk<~g5-pMQJv!34)k z#}7yZoJ=vg?^Ptu#d_jtkw~|z%F(j&^6d>wA9!YXEx+uz|9<_39XodL)$snAdN!?o zqKLLwH!#q{n_~3J?LA{Ief#t0kJSeu3)WN9QvVv5n{U_4j1JlppkY&>HvhbGXW4Gw z)mIO_|6bkDZ`Cfu#Pa9j&tv-EzJJ%xHItr}n%MI&zSw^gXJLYyCoo&6mbgZgq$HN4 zS|t~y0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKyFXkTm4xr(~v8;?`jEllcfx xgCxj?;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RXAwzk>h( diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/images/placeholder.png b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/images/placeholder.png deleted file mode 100644 index 4af09565523acc4a8416b138be66ecca52a4782b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmV+k0rvihP)<h;3K|Lk000e1NJLTq0027x000{V0{{R3FsJIa0000mP)t-s{{R60 z5fT3)BL6cp|3pOpRaO6HX8&nv|95x)h=~80ng6P)|IEz)-QEB0?*IS);XU_p0001# zNkl<ZD9>XkV88<k82JC=0SqHr`a!$_1M_DF2Alt%8SejPSbu;M$l*bfHvIqpv;04i z{|6lUe>3J!<oqm;q8lvzSM-0wA^qRX`p)Rm1`Iqv^YZ>H|K$G7!NmbG+#X$bL;o)Z z2G-x)N-|gt|HAb}?!Vz{?gSsK(*G1M`2U|Un|r|=kl~yoK0@(G<Ig1kmB??zED8`H P00000NkvXXu0mjfEk=Ep diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/af.js deleted file mode 100644 index 71eb910a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","af",{border:"Wys rand van raam",noUrl:"Gee die iframe URL",scrolling:"Skuifbalke aan",title:"IFrame Eienskappe",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ar.js deleted file mode 100644 index 8b90f6c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ar",{border:"إظهار حدود الإطار",noUrl:"فضلا أكتب رابط الـ iframe",scrolling:"تفعيل أشرطة الإنتقال",title:"خصائص iframe",toolbar:"iframe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bg.js deleted file mode 100644 index 23b9a7bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bg",{border:"Показва рамка на карето",noUrl:"Моля въведете URL за iFrame",scrolling:"Вкл. скролбаровете",title:"IFrame настройки",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bn.js deleted file mode 100644 index a7a9ee05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bs.js deleted file mode 100644 index f37043c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bs",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ca.js deleted file mode 100644 index 18bddf5b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ca",{border:"Mostra la vora del marc",noUrl:"Si us plau, introdueixi la URL de l'iframe",scrolling:"Activa les barres de desplaçament",title:"Propietats de l'IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cs.js deleted file mode 100644 index 37b25fb6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","cs",{border:"Zobrazit okraj",noUrl:"Zadejte prosím URL obsahu pro IFrame",scrolling:"Zapnout posuvníky",title:"Vlastnosti IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cy.js deleted file mode 100644 index f8db6041..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","cy",{border:"Dangos ymyl y ffrâm",noUrl:"Rhowch URL yr iframe",scrolling:"Galluogi bariau sgrolio",title:"Priodweddau IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/da.js deleted file mode 100644 index 54115330..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","da",{border:"Vis kant på rammen",noUrl:"Venligst indsæt URL på iframen",scrolling:"Aktiver scrollbars",title:"Iframe egenskaber",toolbar:"Iframe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/de.js deleted file mode 100644 index 2556d571..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","de",{border:"Rahmen anzeigen",noUrl:"Bitte geben Sie die IFrame-URL an",scrolling:"Rollbalken anzeigen",title:"IFrame-Eigenschaften",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/el.js deleted file mode 100644 index cecba9bd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","el",{border:"Προβολή περιγράμματος πλαισίου",noUrl:"Παρακαλούμε εισάγεται το URL του iframe",scrolling:"Ενεργοποίηση μπαρών κύλισης",title:"Ιδιότητες IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-au.js deleted file mode 100644 index 8e2821f8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-au",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-ca.js deleted file mode 100644 index c25669ed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-ca",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-gb.js deleted file mode 100644 index 214388d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-gb",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en.js deleted file mode 100644 index 8d1407e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eo.js deleted file mode 100644 index a1855070..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","eo",{border:"Montri borderon de kadro (frame)",noUrl:"Bonvolu entajpi la retadreson de la ligilo al la enlinia kadro (IFrame)",scrolling:"Ebligi rulumskalon",title:"Atributoj de la enlinia kadro (IFrame)",toolbar:"Enlinia kadro (IFrame)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/es.js deleted file mode 100644 index 89e38510..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","es",{border:"Mostrar borde del marco",noUrl:"Por favor, escriba la dirección del iframe",scrolling:"Activar barras de desplazamiento",title:"Propiedades de iframe",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/et.js deleted file mode 100644 index 7cd5ec0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","et",{border:"Raami äärise näitamine",noUrl:"Vali iframe URLi liik",scrolling:"Kerimisribade lubamine",title:"IFrame omadused",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eu.js deleted file mode 100644 index f8b1cff1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","eu",{border:"Markoaren ertza ikusi",noUrl:"iframe-aren URLa idatzi, mesedez.",scrolling:"Korritze barrak gaitu",title:"IFrame-aren Propietateak",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fa.js deleted file mode 100644 index a6bd7ee6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fa",{border:"نمایش خطوط frame",noUrl:"لطفا مسیر URL iframe را درج کنید",scrolling:"نمایش خطکشها",title:"ویژگیهای IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fi.js deleted file mode 100644 index 2813efb0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fi",{border:"Näytä kehyksen reunat",noUrl:"Anna IFrame-kehykselle lähdeosoite (src)",scrolling:"Näytä vierityspalkit",title:"IFrame-kehyksen ominaisuudet",toolbar:"IFrame-kehys"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fo.js deleted file mode 100644 index 3ec97a07..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fo",{border:"Vís frame kant",noUrl:"Vinarliga skriva URL til iframe",scrolling:"Loyv scrollbars",title:"Møguleikar fyri IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js deleted file mode 100644 index 1a43ea6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fr-ca",{border:"Afficher la bordure du cadre",noUrl:"Veuillez entre l'URL du IFrame",scrolling:"Activer les barres de défilement",title:"Propriétés du IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr.js deleted file mode 100644 index c5bc58cb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fr",{border:"Afficher une bordure de la IFrame",noUrl:"Veuillez entrer l'adresse du lien de la IFrame",scrolling:"Permettre à la barre de défilement",title:"Propriétés de la IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gl.js deleted file mode 100644 index 5326e33f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","gl",{border:"Amosar o bordo do marco",noUrl:"Escriba o enderezo do iframe",scrolling:"Activar as barras de desprazamento",title:"Propiedades do iFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gu.js deleted file mode 100644 index 0c6aed93..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","gu",{border:"ફ્રેમ બોર્ડેર બતાવવી",noUrl:"iframe URL ટાઈપ્ કરો",scrolling:"સ્ક્રોલબાર ચાલુ કરવા",title:"IFrame વિકલ્પો",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/he.js deleted file mode 100644 index 4c227775..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","he",{border:"הראה מסגרת לחלון",noUrl:"יש להכניס כתובת לחלון.",scrolling:"אפשר פסי גלילה",title:"מאפייני חלון פנימי (iframe)",toolbar:"חלון פנימי (iframe)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hi.js deleted file mode 100644 index 8699b826..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hi",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hr.js deleted file mode 100644 index 6cf8b838..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hr",{border:"Prikaži okvir IFrame-a",noUrl:"Unesite URL iframe-a",scrolling:"Omogući trake za skrolanje",title:"IFrame svojstva",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hu.js deleted file mode 100644 index 94bdf85e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hu",{border:"Legyen keret",noUrl:"Kérem írja be a iframe URL-t",scrolling:"Gördítősáv bekapcsolása",title:"IFrame Tulajdonságok",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/id.js deleted file mode 100644 index 0db9a8ee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","id",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/is.js deleted file mode 100644 index bb669e8a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","is",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/it.js deleted file mode 100644 index 54f33bec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","it",{border:"Mostra il bordo",noUrl:"Inserire l'URL del campo IFrame",scrolling:"Abilita scrollbar",title:"Proprietà IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ja.js deleted file mode 100644 index 039c5788..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ja",{border:"フレームの枠を表示",noUrl:"iframeのURLを入力してください。",scrolling:"スクロールバーの表示を許可",title:"iFrameのプロパティ",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ka.js deleted file mode 100644 index e8388990..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ka",{border:"ჩარჩოს გამოჩენა",noUrl:"აკრიფეთ iframe-ის URL",scrolling:"გადახვევის ზოლების დაშვება",title:"IFrame-ის პარამეტრები",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/km.js deleted file mode 100644 index 629c7831..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","km",{border:"បង្ហាញ​បន្ទាត់​ស៊ុម",noUrl:"សូម​បញ្ចូល URL របស់ iframe",scrolling:"ប្រើ​របារ​រំកិល",title:"លក្ខណៈ​សម្បត្តិ IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ko.js deleted file mode 100644 index fa6bc741..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ko",{border:"프레임 테두리 표시",noUrl:"iframe 대응 URL을 입력해주세요.",scrolling:"스크롤바 사용",title:"IFrame 속성",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ku.js deleted file mode 100644 index bc1ae360..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ku",{border:"نیشاندانی لاکێشه بە چوواردەوری چووارچێوە",noUrl:"تکایه ناونیشانی بەستەر بنووسه بۆ چووارچێوه",scrolling:"چالاککردنی هاتووچۆپێکردن",title:"دیالۆگی چووارچێوه",toolbar:"چووارچێوه"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lt.js deleted file mode 100644 index 20dee016..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","lt",{border:"Rodyti rėmelį",noUrl:"Nurodykite iframe nuorodą",scrolling:"Įjungti slankiklius",title:"IFrame nustatymai",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lv.js deleted file mode 100644 index b9db9432..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","lv",{border:"Rādīt rāmi",noUrl:"Norādiet iframe adresi",scrolling:"Atļaut ritjoslas",title:"IFrame uzstādījumi",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mk.js deleted file mode 100644 index a4dbb236..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","mk",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mn.js deleted file mode 100644 index f45cf054..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","mn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ms.js deleted file mode 100644 index 8ff5bc1b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ms",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nb.js deleted file mode 100644 index ec65e337..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","nb",{border:"Viss ramme rundt iframe",noUrl:"Vennligst skriv inn URL for iframe",scrolling:"Aktiver scrollefelt",title:"Egenskaper for IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nl.js deleted file mode 100644 index 348ee0ec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","nl",{border:"Framerand tonen",noUrl:"Vul de IFrame URL in",scrolling:"Scrollbalken inschakelen",title:"IFrame-eigenschappen",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/no.js deleted file mode 100644 index 04a9241d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","no",{border:"Viss ramme rundt iframe",noUrl:"Vennligst skriv inn URL for iframe",scrolling:"Aktiver scrollefelt",title:"Egenskaper for IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pl.js deleted file mode 100644 index d0859990..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pl",{border:"Pokaż obramowanie obiektu IFrame",noUrl:"Podaj adres URL elementu IFrame",scrolling:"Włącz paski przewijania",title:"Właściwości elementu IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt-br.js deleted file mode 100644 index 67100264..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pt-br",{border:"Mostra borda do iframe",noUrl:"Insira a URL do iframe",scrolling:"Abilita scrollbars",title:"Propriedade do IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt.js deleted file mode 100644 index 4ac51c5b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pt",{border:"Mostrar a borda da Frame",noUrl:"Por favor, digite o URL da iframe",scrolling:"Ativar barras de deslocamento",title:"Propriedades da IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ro.js deleted file mode 100644 index d2ca21fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ro",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ru.js deleted file mode 100644 index 8691613d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ru",{border:"Показать границы фрейма",noUrl:"Пожалуйста, введите ссылку фрейма",scrolling:"Отображать полосы прокрутки",title:"Свойства iFrame",toolbar:"iFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/si.js deleted file mode 100644 index a0b2c1e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","si",{border:"සැකිල්ලේ කඩයිම් ",noUrl:"කරුණාකර රුපයේ URL ලියන්න",scrolling:"සක්ක්‍රිය කරන්න",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sk.js deleted file mode 100644 index 7685e8bf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sk",{border:"Zobraziť rám frame-u",noUrl:"Prosím, vložte URL iframe",scrolling:"Povoliť skrolovanie",title:"Vlastnosti IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sl.js deleted file mode 100644 index 7b79a792..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sl",{border:"Pokaži mejo okvira",noUrl:"Prosimo, vnesite iframe URL",scrolling:"Omogoči scrollbars",title:"IFrame Lastnosti",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sq.js deleted file mode 100644 index 4c66e350..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sq",{border:"Shfaq kufirin e kornizës",noUrl:"Ju lutemi shkruani URL-në e iframe-it",scrolling:"Lejo shiritët zvarritës",title:"Karakteristikat e IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js deleted file mode 100644 index 3d279456..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sr-latn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr.js deleted file mode 100644 index e7d1c535..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sr",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sv.js deleted file mode 100644 index c8adee27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sv",{border:"Visa ramkant",noUrl:"Skriv in URL för iFrame",scrolling:"Aktivera rullningslister",title:"iFrame Egenskaper",toolbar:"iFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/th.js deleted file mode 100644 index 6d876edf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","th",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tr.js deleted file mode 100644 index 9096f663..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","tr",{border:"Çerceve sınırlarını göster",noUrl:"Lütfen IFrame köprü (URL) bağlantısını yazın",scrolling:"Kaydırma çubuklarını aktif et",title:"IFrame Özellikleri",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tt.js deleted file mode 100644 index 586d3ae3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","tt",{border:"Frame чикләрен күрсәтү",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame үзлекләре",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ug.js deleted file mode 100644 index 156b972a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ug",{border:"كاندۇك گىرۋەكلىرىنى كۆرسەت",noUrl:"كاندۇكنىڭ ئادرېسى(Url)نى كىرگۈزۈڭ",scrolling:"دومىلىما سۈرگۈچكە يول قوي",title:"IFrame خاسلىق",toolbar:"IFrame "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/uk.js deleted file mode 100644 index fe6660c3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","uk",{border:"Показати рамки фрейму",noUrl:"Будь ласка введіть посилання для IFrame",scrolling:"Увімкнути прокрутку",title:"Налаштування для IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/vi.js deleted file mode 100644 index 70340226..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","vi",{border:"Hiển thị viền khung",noUrl:"Vui lòng nhập địa chỉ iframe",scrolling:"Kích hoạt thanh cuộn",title:"Thuộc tính iframe",toolbar:"Iframe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js deleted file mode 100644 index 876c196b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","zh-cn",{border:"显示框架边框",noUrl:"请输入框架的 URL",scrolling:"允许滚动条",title:"IFrame 属性",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh.js deleted file mode 100644 index 5fdd10fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","zh",{border:"顯示框架框線",noUrl:"請輸入 iframe URL",scrolling:"啟用捲軸列",title:"IFrame 屬性",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframe/plugin.js deleted file mode 100644 index eefa85c4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframe/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("iframe",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"iframe",hidpi:!0,onLoad:function(){CKEDITOR.addCss("img.cke_iframe{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")}, -init:function(a){var b=a.lang.iframe,c="iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]";a.plugins.dialogadvtab&&(c+=";iframe"+a.plugins.dialogadvtab.allowedContent({id:1,classes:1,styles:1}));CKEDITOR.dialog.add("iframe",this.path+"dialogs/iframe.js");a.addCommand("iframe",new CKEDITOR.dialogCommand("iframe",{allowedContent:c,requiredContent:"iframe"}));a.ui.addButton&&a.ui.addButton("Iframe",{label:b.toolbar,command:"iframe",toolbar:"insert,80"});a.on("doubleclick",function(a){var b= -a.data.element;b.is("img")&&"iframe"==b.data("cke-real-element-type")&&(a.data.dialog="iframe")});a.addMenuItems&&a.addMenuItems({iframe:{label:b.title,command:"iframe",group:"image"}});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&"iframe"==a.data("cke-real-element-type"))return{iframe:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{iframe:function(b){return a.createFakeParserElement(b,"cke_iframe","iframe", -!0)}}})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/iframedialog/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/iframedialog/plugin.js deleted file mode 100644 index 1d6addbd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/iframedialog/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("iframedialog",{requires:"dialog",onLoad:function(){CKEDITOR.dialog.addIframe=function(e,d,a,j,f,l,g){a={type:"iframe",src:a,width:"100%",height:"100%"};a.onContentLoad="function"==typeof l?l:function(){var a=this.getElement().$.contentWindow;if(a.onDialogEvent){var b=this.getDialog(),c=function(b){return a.onDialogEvent(b)};b.on("ok",c);b.on("cancel",c);b.on("resize",c);b.on("hide",function(a){b.removeListener("ok",c);b.removeListener("cancel",c);b.removeListener("resize",c); -a.removeListener()});a.onDialogEvent({name:"load",sender:this,editor:b._.editor})}};var h={title:d,minWidth:j,minHeight:f,contents:[{id:"iframe",label:d,expand:!0,elements:[a],style:"width:"+a.width+";height:"+a.height}]},i;for(i in g)h[i]=g[i];this.add(e,function(){return h})};(function(){var e=function(d,a,j){if(!(3>arguments.length)){var f=this._||(this._={}),e=a.onContentLoad&&CKEDITOR.tools.bind(a.onContentLoad,this),g=CKEDITOR.tools.cssLength(a.width),h=CKEDITOR.tools.cssLength(a.height);f.frameId= -CKEDITOR.tools.getNextId()+"_iframe";d.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().setStyles({width:g,height:h})});var i={src:"%2",id:f.frameId,frameborder:0,allowtransparency:!0},k=[];"function"==typeof a.onContentLoad&&(i.onload="CKEDITOR.tools.callFunction(%1);");CKEDITOR.ui.dialog.uiElement.call(this,d,a,k,"iframe",{width:g,height:h},i,"");j.push('<div style="width:'+g+";height:"+h+';" id="'+this.domId+'"></div>');k=k.join("");d.on("show",function(){var b=CKEDITOR.document.getById(f.frameId).getParent(), -c=CKEDITOR.tools.addFunction(e),c=k.replace("%1",c).replace("%2",CKEDITOR.tools.htmlEncode(a.src));b.setHtml(c)})}};e.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.dialog.addUIElement("iframe",{build:function(d,a,j){return new e(d,a,j)}})})()}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image/dialogs/image.js b/platforms/android/assets/www/lib/ckeditor/plugins/image/dialogs/image.js deleted file mode 100644 index c84ecdc3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image/dialogs/image.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var r=function(c,j){function r(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function i(a){if(!s){s=1;var b=this.getDialog(),d=b.imageElement;if(d){this.commit(f,d);for(var a=[].concat(a),e=a.length,c,g=0;g<e;g++)(c=b.getContentElement.apply(b,a[g].split(":")))&&c.setup(f,d)}s=0}}var f=1,k=/^\s*(\d+)((px)|\%)?\s*$/i,v=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,o=/^\d+px$/, -w=function(){var a=this.getValue(),b=this.getDialog(),d=a.match(k);d&&("%"==d[2]&&l(b,!1),a=d[1]);b.lockRatio&&(d=b.originalElement,"true"==d.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(d.$.width*(a/d.$.height))),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(d.$.height*(a/d.$.width))),isNaN(a)||b.setValueOf("info","txtHeight",a))));g(b)},g=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},s,l=function(a, -b){if(!a.getContentElement("info","ratioLock"))return null;var d=a.originalElement;if(!d)return null;if("check"==b){if(!a.userlockRatio&&"true"==d.getCustomData("isReady")){var e=a.getValueOf("info","txtWidth"),c=a.getValueOf("info","txtHeight"),d=1E3*d.$.width/d.$.height,f=1E3*e/c;a.lockRatio=!1;!e&&!c?a.lockRatio=!0:!isNaN(d)&&!isNaN(f)&&Math.round(d)==Math.round(f)&&(a.lockRatio=!0)}}else void 0!=b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);e=CKEDITOR.document.getById(p);a.lockRatio? -e.removeClass("cke_btn_unlocked"):e.addClass("cke_btn_unlocked");e.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&e.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢");return a.lockRatio},x=function(a){var b=a.originalElement;if("true"==b.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),e=a.getContentElement("info","txtHeight");d&&d.setValue(b.$.width);e&&e.setValue(b.$.height)}g(a)},y=function(a,b){function d(a,b){var d=a.match(k);return d? -("%"==d[2]&&(d[1]+="%",l(e,!1)),d[1]):b}if(a==f){var e=this.getDialog(),c="",g="txtWidth"==this.id?"width":"height",h=b.getAttribute(g);h&&(c=d(h,c));c=d(b.getStyle(g),c);this.setValue(c)}},t,q=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.setCustomData("isReady","true");a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);b&&b.setStyle("display","none");this.dontResetSize||x(this);this.firstLoad&&CKEDITOR.tools.setTimeout(function(){l(this,"check")}, -0,this);this.dontResetSize=this.firstLoad=!1},h=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);b&&b.setStyle("display","none");l(this,!1)},n=function(a){return CKEDITOR.tools.getNextId()+"_"+a},p=n("btnLockSizes"),u=n("btnResetSize"),m=n("ImagePreviewLoader"),A=n("previewLink"), -z=n("previewImage");return{title:c.lang.image["image"==j?"title":"titleButton"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),d=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",1),c=CKEDITOR.document.getById(m);c&&c.setStyle("display","none");t=new CKEDITOR.dom.element("img", -a.document);this.preview=CKEDITOR.document.getById(z);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");if(d){this.linkElement=d;this.linkEditMode=!0;c=d.getChildren();if(1==c.count()){var g=c.getItem(0).getName();if("img"==g||"input"==g)this.imageElement=c.getItem(0),"img"==this.imageElement.getName()?this.imageEditMode="img":"input"==this.imageElement.getName()&&(this.imageEditMode="input")}"image"== -j&&this.setupContent(2,d)}if(this.customImageElement)this.imageEditMode="img",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode?(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(f,this.imageElement)):this.imageElement=a.document.createElement("img"); -l(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display","none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==j&&"input"==a&&confirm(c.lang.image.button2Img)?(this.imageElement=c.document.createElement("img"),this.imageElement.setAttribute("alt",""),c.insertElement(this.imageElement)):"image"!=j&&"img"==a&&confirm(c.lang.image.img2Button)?(this.imageElement=c.document.createElement("input"), -this.imageElement.setAttributes({type:"image",alt:""}),c.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==j?this.imageElement=c.document.createElement("img"):(this.imageElement=c.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=c.document.createElement("a"));this.commitContent(f,this.imageElement);this.commitContent(2,this.linkElement); -this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(c.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(c.getSelection().selectElement(this.linkElement),c.insertElement(this.imageElement)):this.addLink?this.linkEditMode?c.insertElement(this.imageElement):(c.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):c.insertElement(this.imageElement)}, -onLoad:function(){"image"!=j&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(u),5),this.addFocusable(a.getById(p),5));this.commitContent=r},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener("load",q),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement= -!1);delete this.imageElement},contents:[{id:"info",label:c.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",children:[{id:"txtUrl",type:"text",label:c.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),d=a.originalElement;a.preview&&a.preview.removeStyle("display");d.setCustomData("isReady","false");var c=CKEDITOR.document.getById(m);c&&c.setStyle("display", -"");d.on("load",q,a);d.on("error",h,a);d.on("abort",h,a);d.setAttribute("src",b);a.preview&&(t.setAttribute("src",b),a.preview.setAttribute("src",t.$.src),g(a))}else a.preview&&(a.preview.removeAttribute("src"),a.preview.setStyle("display","none"))},setup:function(a,b){if(a==f){var d=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(d);this.setInitValue()}},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()), -b.setAttribute("src",this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(c.lang.image.urlMissing)},{type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",align:"center",label:c.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:c.lang.image.alt,accessKey:"T","default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("alt"))}, -commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",requiredContent:"img{width,height}",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"45px",id:"txtWidth",label:c.lang.common.width,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a= -this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidWidth);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("width",CKEDITOR.tools.cssLength(e)):b.removeStyle("width"),!d&&b.removeAttribute("width")):4==a?e.match(k)?b.setStyle("width",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("width",a.$.width+"px")):8==a&&(b.removeAttribute("width"), -b.removeStyle("width"))}},{type:"text",id:"txtHeight",width:"45px",label:c.lang.common.height,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidHeight);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("height",CKEDITOR.tools.cssLength(e)):b.removeStyle("height"),!d&&b.removeAttribute("height")): -4==a?e.match(k)?b.setStyle("height",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("height",a.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",type:"html",style:"margin-top:30px;width:40px;height:40px;",onLoad:function(){var a=CKEDITOR.document.getById(u),b=CKEDITOR.document.getById(p);a&&(a.on("click",function(a){x(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover", -function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")},a));b&&(b.on("click",function(a){l(this);var b=this.originalElement,c=this.getValueOf("info","txtWidth");if(b.getCustomData("isReady")=="true"&&c){b=b.$.height/b.$.width*c;if(!isNaN(b)){this.setValueOf("info","txtHeight",Math.round(b));g(this)}}a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")}, -b))},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.lockRatio+'" class="cke_btn_locked" id="'+p+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+c.lang.image.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.resetSize+'" class="cke_btn_reset" id="'+u+'" role="button"><span class="cke_label">'+c.lang.image.resetSize+"</span></a></div>"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}", -width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&& -this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this, -"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")): -(b.setStyle("margin-left",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(c))),!d&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace), -setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))), -!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float"); -switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"<div>"+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+ -'<br><div id="'+m+'" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div><div class="ImagePreviewBox"><table><tr><td><a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'"><img id="'+z+'" alt="" /></a>'+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ -"</td></tr></table></div></div>"}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=this.getValue();b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= -!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| -"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], -children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))}, -commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))}, -commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle, -"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a, -b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}}; -CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image/images/noimage.png b/platforms/android/assets/www/lib/ckeditor/plugins/image/images/noimage.png deleted file mode 100644 index 159811305af7fc78662a53949f9c62bd702785af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2115 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/dialogs/image2.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/dialogs/image2.js deleted file mode 100644 index 9b9b9028..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/dialogs/image2.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("image2",function(j){function z(){var a=this.getValue().match(A);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c["invalid"+CKEDITOR.tools.capitalize(this.id)]);return a}function K(){function a(a,b){d.push(i.once(a,function(a){for(var i;i=d.pop();)i.removeListener();b(a)}))}var i=p.createElement("img"),d=[];return function(d,b,c){a("load",function(){var a=B(i);b.call(c,i,a.width,a.height)});a("error",function(){b(null)});a("abort",function(){b(null)});i.setAttribute("src",(t.baseHref|| -"")+d+"?"+Math.random().toString(16).substring(2))}}function C(){var a=this.getValue();q(!1);a!==u.data.src?(D(a,function(a,d,b){q(!0);if(!a)return k(!1);g.setValue(d);h.setValue(b);r=d;s=b;k(E.checkHasNaturalRatio(a))}),l=!0):l?(q(!0),g.setValue(m),h.setValue(n),l=!1):q(!0)}function F(){if(e){var a=this.getValue();if(a&&(a.match(A)||k(!1),"0"!==a)){var b="width"==this.id,d=m||r,c=n||s,a=b?Math.round(c*(a/d)):Math.round(d*(a/c));isNaN(a)||(b?h:g).setValue(a)}}}function k(a){if(f){if("boolean"==typeof a){if(v)return; -e=a}else if(a=g.getValue(),v=!0,(e=!e)&&a)a*=n/m,isNaN(a)||h.setValue(Math.round(a));f[e?"removeClass":"addClass"]("cke_btn_unlocked");f.setAttribute("aria-checked",e);CKEDITOR.env.hc&&f.getChild(0).setHtml(e?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢")}}function q(a){a=a?"enable":"disable";g[a]();h[a]()}var A=/(^\s*(\d+)(px)?\s*$)|^$/i,G=CKEDITOR.tools.getNextId(),H=CKEDITOR.tools.getNextId(),b=j.lang.image2,c=j.lang.common,L=(new CKEDITOR.template('<div><a href="javascript:void(0)" tabindex="-1" title="'+ -b.lockRatio+'" class="cke_btn_locked" id="{lockButtonId}" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+b.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+b.resetSize+'" class="cke_btn_reset" id="{resetButtonId}" role="button"><span class="cke_label">'+b.resetSize+"</span></a></div>")).output({lockButtonId:G,resetButtonId:H}),E=CKEDITOR.plugins.image2,t=j.config,w=j.widgets.registered.image.features,B=E.getNatural,p,u,I,D,m,n,r,s,l,e,v,f,o,g,h,x, -y=!(!t.filebrowserImageBrowseUrl&&!t.filebrowserBrowseUrl),J=[{id:"src",type:"text",label:c.url,onKeyup:C,onChange:C,setup:function(a){this.setValue(a.data.src)},commit:function(a){a.setData("src",this.getValue())},validate:CKEDITOR.dialog.validate.notEmpty(b.urlMissing)}];y&&J.push({type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",align:"center",label:j.lang.common.browseServer,hidden:!0,filebrowser:"info:src"});return{title:b.title,minWidth:250,minHeight:100,onLoad:function(){p= -this._.element.getDocument();D=K()},onShow:function(){u=this.widget;I=u.parts.image;l=v=e=!1;x=B(I);r=m=x.width;s=n=x.height},contents:[{id:"info",label:b.infoTab,elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["100%"],children:J}]},{id:"alt",type:"text",label:b.alt,setup:function(a){this.setValue(a.data.alt)},commit:function(a){a.setData("alt",this.getValue())}},{type:"hbox",widths:["25%","25%","50%"],requiredContent:w.dimension.requiredContent,children:[{type:"text",width:"45px", -id:"width",label:c.width,validate:z,onKeyUp:F,onLoad:function(){g=this},setup:function(a){this.setValue(a.data.width)},commit:function(a){a.setData("width",this.getValue())}},{type:"text",id:"height",width:"45px",label:c.height,validate:z,onKeyUp:F,onLoad:function(){h=this},setup:function(a){this.setValue(a.data.height)},commit:function(a){a.setData("height",this.getValue())}},{id:"lock",type:"html",style:"margin-top:18px;width:40px;height:20px;",onLoad:function(){function a(a){a.on("mouseover",function(){this.addClass("cke_btn_over")}, -a);a.on("mouseout",function(){this.removeClass("cke_btn_over")},a)}var b=this.getDialog();f=p.getById(G);o=p.getById(H);f&&(b.addFocusable(f,4+y),f.on("click",function(a){k();a.data&&a.data.preventDefault()},this.getDialog()),a(f));o&&(b.addFocusable(o,5+y),o.on("click",function(a){if(l){g.setValue(r);h.setValue(s)}else{g.setValue(m);h.setValue(n)}a.data&&a.data.preventDefault()},this),a(o))},setup:function(a){k(a.data.lock)},commit:function(a){a.setData("lock",e)},html:L}]},{type:"hbox",id:"alignment", -requiredContent:w.align.requiredContent,children:[{id:"align",type:"radio",items:[[c.alignNone,"none"],[c.alignLeft,"left"],[c.alignCenter,"center"],[c.alignRight,"right"]],label:c.align,setup:function(a){this.setValue(a.data.align)},commit:function(a){a.setData("align",this.getValue())}}]},{id:"hasCaption",type:"checkbox",label:b.captioned,requiredContent:w.caption.requiredContent,setup:function(a){this.setValue(a.data.hasCaption)},commit:function(a){a.setData("hasCaption",this.getValue())}}]},{id:"Upload", -hidden:!0,filebrowser:"uploadButton",label:b.uploadTab,elements:[{type:"file",id:"upload",label:b.btnUpload,style:"height:40px"},{type:"fileButton",id:"uploadButton",filebrowser:"info:src",label:b.btnUpload,"for":["Upload","upload"]}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png b/platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png deleted file mode 100644 index b3c7ade53ce7653aa0351e7fb014abf2af6a326a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/image.png b/platforms/android/assets/www/lib/ckeditor/plugins/image2/icons/image.png deleted file mode 100644 index fcf61b5f2b3a81f75b39d204faad07b05145b5e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i6R)R>V~EA+xswh3Zx;w0t^dB=S4y4LTZKvAL7dH7QcGotjs|mb zyPl5EPd1%1H4W!-?H!JL$?iJbcV(wj5|f~!prV(K`i*n<|G#z!+PJ03?q%-#cO~EN zojiJ!b>8#D9!Hl7z7WypGNGXl+Y>!RTv;4Hta)U)?6T(f@82gpw`};w|JmlaMDmLg zs})%vh15Ko4A~yfNw$$=c2O!)Q7Ts|VsZJOG;3MEIm3o)OivCReD^M|1_%PCJ#AmT zTKm+dBNENeD?2#mJ-?W>b%x*a4vu{t0V1pnf9w8#dGch*?*04gqeNI81q4_a&!$b* z=whg-s8|rUK6!0z$yyDrY15{Kga%%94wYT?>S2M!lV87P>6{J-Z74r*(Z_xD)k~Xn z7V3D<I=gI@*5i*ec0SN-G=E$6`}(tI%b4%2*2>P#jtUihmRWJgz{Ta4(x*_DTMSB{ zR)wvuef_oS;<anjjuifJb(!S0_~VPF=apBoOw%5z^gZ^!n^(R*ZvB6eiF;dHTl@FM zz0VB|eNuVu+qZA84S4pSXYXFMY2(I))2C1GJ$m%0ytTD;=lkCg*_PJU$(5BeuU-vZ zvvq~mF$uTDg68JtbLP+Qwm)z7Vdv$SDw9vLJeN^A^y`-uL*}eUbAE4LwY6-XY)V=; z)0#DF0z$9uc^EH$GRk|_G9NYJkNNrefma{7&Nn%nU~u64rk+Tf_#U0pKY0H%*q;(i zI$8xxEvhB15hW>!C8<`)MX5lF!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7rX(Z{ zx%nxXX_dG&*!*NZ0@NT0vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWA_h-a KKbLh*2~7a{_eSsl diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/af.js deleted file mode 100644 index d5ef4619..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","af",{alt:"Alternatiewe teks",btnUpload:"Stuur na bediener",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Afbeelding informasie",lockRatio:"Vaste proporsie",menu:"Afbeelding eienskappe",pathName:"image",pathNameCaption:"caption",resetSize:"Herstel grootte",resizer:"Click and drag to resize",title:"Afbeelding eienskappe",uploadTab:"Oplaai",urlMissing:"Die URL na die afbeelding ontbreek."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ar.js deleted file mode 100644 index 435544b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ar",{alt:"عنوان الصورة",btnUpload:"أرسلها للخادم",captioned:"صورة ذات اسم",captionPlaceholder:"تسمية",infoTab:"معلومات الصورة",lockRatio:"تناسق الحجم",menu:"خصائص الصورة",pathName:"صورة",pathNameCaption:"تسمية",resetSize:"إستعادة الحجم الأصلي",resizer:"انقر ثم اسحب للتحجيم",title:"خصائص الصورة",uploadTab:"رفع",urlMissing:"عنوان مصدر الصورة مفقود"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bg.js deleted file mode 100644 index a97a26e6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bg",{alt:"Алтернативен текст",btnUpload:"Изпрати я на сървъра",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Инфо за снимка",lockRatio:"Заключване на съотношението",menu:"Настройки за снимка",pathName:"image",pathNameCaption:"caption",resetSize:"Нулиране на размер",resizer:"Click and drag to resize",title:"Настройки за снимка",uploadTab:"Качване",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bn.js deleted file mode 100644 index 93618a02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bn",{alt:"বিকল্প টেক্সট",btnUpload:"ইহাকে সার্ভারে প্রেরন কর",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ছবির তথ্য",lockRatio:"অনুপাত লক কর",menu:"ছবির প্রোপার্টি",pathName:"image",pathNameCaption:"caption",resetSize:"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও",resizer:"Click and drag to resize",title:"ছবির প্রোপার্টি",uploadTab:"আপলোড",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bs.js deleted file mode 100644 index ff4ae297..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bs",{alt:"Tekst na slici",btnUpload:"Šalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zakljuèaj odnos",menu:"Svojstva slike",pathName:"image",pathNameCaption:"caption",resetSize:"Resetuj dimenzije",resizer:"Click and drag to resize",title:"Svojstva slike",uploadTab:"Šalji",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ca.js deleted file mode 100644 index 6e73ef35..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ca",{alt:"Text alternatiu",btnUpload:"Envia-la al servidor",captioned:"Imatge amb subtítol",captionPlaceholder:"Títol",infoTab:"Informació de la imatge",lockRatio:"Bloqueja les proporcions",menu:"Propietats de la imatge",pathName:"imatge",pathNameCaption:"subtítol",resetSize:"Restaura la mida",resizer:"Clicar i arrossegar per redimensionar",title:"Propietats de la imatge",uploadTab:"Puja",urlMissing:"Falta la URL de la imatge."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cs.js deleted file mode 100644 index d148641d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","cs",{alt:"Alternativní text",btnUpload:"Odeslat na server",captioned:"Obrázek s popisem",captionPlaceholder:"Popis",infoTab:"Informace o obrázku",lockRatio:"Zámek",menu:"Vlastnosti obrázku",pathName:"Obrázek",pathNameCaption:"Popis",resetSize:"Původní velikost",resizer:"Klepněte a táhněte pro změnu velikosti",title:"Vlastnosti obrázku",uploadTab:"Odeslat",urlMissing:"Zadané URL zdroje obrázku nebylo nalezeno."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cy.js deleted file mode 100644 index 031ba7ef..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","cy",{alt:"Testun Amgen",btnUpload:"Anfon i'r Gweinydd",captioned:"Delwedd â phennawd",captionPlaceholder:"Caption",infoTab:"Gwyb Delwedd",lockRatio:"Cloi Cymhareb",menu:"Priodweddau Delwedd",pathName:"delwedd",pathNameCaption:"pennawd",resetSize:"Ailosod Maint",resizer:"Clicio a llusgo i ail-meintio",title:"Priodweddau Delwedd",uploadTab:"Lanlwytho",urlMissing:"URL gwreiddiol y ddelwedd ar goll."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/da.js deleted file mode 100644 index b5412c41..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","da",{alt:"Alternativ tekst",btnUpload:"Upload fil til serveren",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Generelt",lockRatio:"Lås størrelsesforhold",menu:"Egenskaber for billede",pathName:"image",pathNameCaption:"caption",resetSize:"Nulstil størrelse",resizer:"Click and drag to resize",title:"Egenskaber for billede",uploadTab:"Upload",urlMissing:"Kilde på billed-URL mangler"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/de.js deleted file mode 100644 index de90c18d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","de",{alt:"Alternativer Text",btnUpload:"Zum Server senden",captioned:"Bild mit Überschrift",captionPlaceholder:"Überschrift",infoTab:"Bild-Info",lockRatio:"Größenverhältnis beibehalten",menu:"Bild-Eigenschaften",pathName:"Bild",pathNameCaption:"Überschrift",resetSize:"Größe zurücksetzen",resizer:"Zum vergrößern anwählen und ziehen",title:"Bild-Eigenschaften",uploadTab:"Hochladen",urlMissing:"Imagequelle URL fehlt."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/el.js deleted file mode 100644 index 65307e3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","el",{alt:"Εναλλακτικό Κείμενο",btnUpload:"Αποστολή στον Διακομιστή",captioned:"Εικόνα με λεζάντα",captionPlaceholder:"Λεζάντα",infoTab:"Πληροφορίες Εικόνας",lockRatio:"Κλείδωμα Αναλογίας",menu:"Ιδιότητες Εικόνας",pathName:"εικόνα",pathNameCaption:"λεζάντα",resetSize:"Επαναφορά Αρχικού Μεγέθους",resizer:"Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος",title:"Ιδιότητες Εικόνας",uploadTab:"Αποστολή",urlMissing:"Λείπει το πηγαίο URL της εικόνας."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-au.js deleted file mode 100644 index caab219c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-au",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-ca.js deleted file mode 100644 index ec19b8f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-ca",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-gb.js deleted file mode 100644 index d5a9406a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-gb",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en.js deleted file mode 100644 index 524e0a2a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eo.js deleted file mode 100644 index 26587e03..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","eo",{alt:"Anstataŭiga Teksto",btnUpload:"Sendu al Servilo",captioned:"Bildo kun apudskribo",captionPlaceholder:"Apudskribo",infoTab:"Informoj pri Bildo",lockRatio:"Konservi Proporcion",menu:"Atributoj de Bildo",pathName:"bildo",pathNameCaption:"apudskribo",resetSize:"Origina Grando",resizer:"Kliki kaj treni por ŝanĝi la grandon",title:"Atributoj de Bildo",uploadTab:"Alŝuti",urlMissing:"La fontretadreso de la bildo mankas."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/es.js deleted file mode 100644 index c68c9162..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","es",{alt:"Texto Alternativo",btnUpload:"Enviar al Servidor",captioned:"Imagen subtitulada",captionPlaceholder:"Caption",infoTab:"Información de Imagen",lockRatio:"Proporcional",menu:"Propiedades de Imagen",pathName:"image",pathNameCaption:"subtítulo",resetSize:"Tamaño Original",resizer:"Dar clic y arrastrar para cambiar tamaño",title:"Propiedades de Imagen",uploadTab:"Cargar",urlMissing:"Debe indicar la URL de la imagen."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/et.js deleted file mode 100644 index b8571dbf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","et",{alt:"Alternatiivne tekst",btnUpload:"Saada serverisse",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Pildi info",lockRatio:"Lukusta kuvasuhe",menu:"Pildi omadused",pathName:"image",pathNameCaption:"caption",resetSize:"Lähtesta suurus",resizer:"Click and drag to resize",title:"Pildi omadused",uploadTab:"Lae üles",urlMissing:"Pildi lähte-URL on puudu."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eu.js deleted file mode 100644 index dadf5a3a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","eu",{alt:"Ordezko Testua",btnUpload:"Zerbitzarira bidalia",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Irudi informazioa",lockRatio:"Erlazioa Blokeatu",menu:"Irudi Ezaugarriak",pathName:"image",pathNameCaption:"caption",resetSize:"Tamaina Berrezarri",resizer:"Click and drag to resize",title:"Irudi Ezaugarriak",uploadTab:"Gora kargatu",urlMissing:"Irudiaren iturburu URL-a falta da."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fa.js deleted file mode 100644 index 6600e16e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fa",{alt:"متن جایگزین",btnUpload:"به سرور بفرست",captioned:"تصویر زیرنویس شده",captionPlaceholder:"عنوان",infoTab:"اطلاعات تصویر",lockRatio:"قفل کردن نسبت",menu:"ویژگی​های تصویر",pathName:"تصویر",pathNameCaption:"عنوان",resetSize:"بازنشانی اندازه",resizer:"کلیک و کشیدن برای تغییر اندازه",title:"ویژگی​های تصویر",uploadTab:"بالاگذاری",urlMissing:"آدرس URL اصلی تصویر یافت نشد."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fi.js deleted file mode 100644 index e4a104e8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fi",{alt:"Vaihtoehtoinen teksti",btnUpload:"Lähetä palvelimelle",captioned:"Kuva kuvatekstillä",captionPlaceholder:"Kuvateksti",infoTab:"Kuvan tiedot",lockRatio:"Lukitse suhteet",menu:"Kuvan ominaisuudet",pathName:"kuva",pathNameCaption:"kuvateksti",resetSize:"Alkuperäinen koko",resizer:"Klikkaa ja raahaa muuttaaksesi kokoa",title:"Kuvan ominaisuudet",uploadTab:"Lisää tiedosto",urlMissing:"Kuvan lähdeosoite puuttuu."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fo.js deleted file mode 100644 index a2bbfae9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fo",{alt:"Alternativur tekstur",btnUpload:"Send til ambætaran",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Myndaupplýsingar",lockRatio:"Læs lutfallið",menu:"Myndaeginleikar",pathName:"image",pathNameCaption:"caption",resetSize:"Upprunastødd",resizer:"Click and drag to resize",title:"Myndaeginleikar",uploadTab:"Send til ambætaran",urlMissing:"URL til mynd manglar."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr-ca.js deleted file mode 100644 index 30cd9e98..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fr-ca",{alt:"Texte alternatif",btnUpload:"Envoyer sur le serveur",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informations sur l'image2",lockRatio:"Verrouiller les proportions",menu:"Propriétés de l'image2",pathName:"image",pathNameCaption:"caption",resetSize:"Taille originale",resizer:"Click and drag to resize",title:"Propriétés de l'image2",uploadTab:"Téléverser",urlMissing:"L'URL de la source de l'image est manquant."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr.js deleted file mode 100644 index 2c7ed973..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fr",{alt:"Texte de remplacement",btnUpload:"Envoyer sur le serveur",captioned:"Image légendée",captionPlaceholder:"Légende",infoTab:"Informations sur l'image2",lockRatio:"Conserver les proportions",menu:"Propriétés de l'image2",pathName:"image",pathNameCaption:"légende",resetSize:"Taille d'origine",resizer:"Cliquer et glisser pour redimensionner",title:"Propriétés de l'image2",uploadTab:"Envoyer",urlMissing:"L'adresse source de l'image est manquante."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gl.js deleted file mode 100644 index f030c9e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","gl",{alt:"Texto alternativo",btnUpload:"Enviar ao servidor",captioned:"Imaxe subtitulada ",captionPlaceholder:"Caption",infoTab:"Información da imaxe",lockRatio:"Proporcional",menu:"Propiedades da imaxe",pathName:"Imaxe",pathNameCaption:"subtítulo",resetSize:"Tamaño orixinal",resizer:"Prema e arrastre para axustar o tamaño",title:"Propiedades da imaxe",uploadTab:"Cargar",urlMissing:"Non se atopa o URL da imaxe."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gu.js deleted file mode 100644 index 4e83249d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","gu",{alt:"ઑલ્ટર્નટ ટેક્સ્ટ",btnUpload:"આ સર્વરને મોકલવું",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ચિત્ર ની જાણકારી",lockRatio:"લૉક ગુણોત્તર",menu:"ચિત્રના ગુણ",pathName:"image",pathNameCaption:"caption",resetSize:"રીસેટ સાઇઝ",resizer:"Click and drag to resize",title:"ચિત્રના ગુણ",uploadTab:"અપલોડ",urlMissing:"ઈમેજની મૂળ URL છે નહી."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/he.js deleted file mode 100644 index 4787142e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","he",{alt:"טקסט חלופי",btnUpload:"שליחה לשרת",captioned:"כותרת תמונה",captionPlaceholder:"Caption",infoTab:"מידע על התמונה",lockRatio:"נעילת היחס",menu:"תכונות התמונה",pathName:"תמונה",pathNameCaption:"כותרת",resetSize:"איפוס הגודל",resizer:"לחץ וגרור לשינוי הגודל",title:"מאפייני התמונה",uploadTab:"העלאה",urlMissing:"כתובת התמונה חסרה."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hi.js deleted file mode 100644 index ec9225d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hi",{alt:"वैकल्पिक टेक्स्ट",btnUpload:"इसे सर्वर को भेजें",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"तस्वीर की जानकारी",lockRatio:"लॉक अनुपात",menu:"तस्वीर प्रॉपर्टीज़",pathName:"image",pathNameCaption:"caption",resetSize:"रीसॅट साइज़",resizer:"Click and drag to resize",title:"तस्वीर प्रॉपर्टीज़",uploadTab:"अपलोड",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hr.js deleted file mode 100644 index 812813c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hr",{alt:"Alternativni tekst",btnUpload:"Pošalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zaključaj odnos",menu:"Svojstva slika",pathName:"image",pathNameCaption:"caption",resetSize:"Obriši veličinu",resizer:"Click and drag to resize",title:"Svojstva slika",uploadTab:"Pošalji",urlMissing:"Nedostaje URL slike."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hu.js deleted file mode 100644 index bffa8b81..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hu",{alt:"Buborék szöveg",btnUpload:"Küldés a szerverre",captioned:"Feliratozott kép",captionPlaceholder:"Képfelirat",infoTab:"Alaptulajdonságok",lockRatio:"Arány megtartása",menu:"Kép tulajdonságai",pathName:"kép",pathNameCaption:"felirat",resetSize:"Eredeti méret",resizer:"Kattints és húzz az átméretezéshez",title:"Kép tulajdonságai",uploadTab:"Feltöltés",urlMissing:"Hiányzik a kép URL-je"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/id.js deleted file mode 100644 index a238cab5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","id",{alt:"Teks alternatif",btnUpload:"Kirim ke Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info Gambar",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Unggah",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/is.js deleted file mode 100644 index 196c68dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","is",{alt:"Baklægur texti",btnUpload:"Hlaða upp",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Almennt",lockRatio:"Festa stærðarhlutfall",menu:"Eigindi myndar",pathName:"image",pathNameCaption:"caption",resetSize:"Reikna stærð",resizer:"Click and drag to resize",title:"Eigindi myndar",uploadTab:"Senda upp",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/it.js deleted file mode 100644 index d65b4549..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","it",{alt:"Testo alternativo",btnUpload:"Invia al server",captioned:"Immagine con didascalia",captionPlaceholder:"Didascalia",infoTab:"Informazioni immagine",lockRatio:"Blocca rapporto",menu:"Proprietà immagine",pathName:"immagine",pathNameCaption:"didascalia",resetSize:"Reimposta dimensione",resizer:"Fare clic e trascinare per ridimensionare",title:"Proprietà immagine",uploadTab:"Carica",urlMissing:"Manca l'URL dell'immagine."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ja.js deleted file mode 100644 index b4457fd7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ja",{alt:"代替テキスト",btnUpload:"サーバーに送信",captioned:"キャプションを付ける",captionPlaceholder:"キャプション",infoTab:"画像情報",lockRatio:"比率を固定",menu:"画像のプロパティ",pathName:"image",pathNameCaption:"caption",resetSize:"サイズをリセット",resizer:"ドラッグしてリサイズ",title:"画像のプロパティ",uploadTab:"アップロード",urlMissing:"画像のURLを入力してください。"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ka.js deleted file mode 100644 index 88407289..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ka",{alt:"სანაცვლო ტექსტი",btnUpload:"სერვერისთვის გაგზავნა",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"სურათის ინფორმცია",lockRatio:"პროპორციის შენარჩუნება",menu:"სურათის პარამეტრები",pathName:"image",pathNameCaption:"caption",resetSize:"ზომის დაბრუნება",resizer:"Click and drag to resize",title:"სურათის პარამეტრები",uploadTab:"აქაჩვა",urlMissing:"სურათის URL არაა შევსებული."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/km.js deleted file mode 100644 index 993429cd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","km",{alt:"អត្ថបទជំនួស",btnUpload:"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា",captioned:"រូប​ដែល​មាន​ចំណង​ជើង",captionPlaceholder:"Caption",infoTab:"ពត៌មានអំពីរូបភាព",lockRatio:"ចាក់​សោ​ផល​ធៀប",menu:"លក្ខណៈ​សម្បត្តិ​រូប​ភាព",pathName:"រូបភាព",pathNameCaption:"ចំណងជើង",resetSize:"កំណត់ទំហំឡើងវិញ",resizer:"ចុច​ហើយ​ទាញ​ដើម្បី​ប្ដូរ​ទំហំ",title:"លក្ខណៈ​សម្បត្តិ​រូប​ភាប",uploadTab:"ផ្ទុក​ឡើង",urlMissing:"ខ្វះ URL ប្រភព​រូប​ភាព។"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ko.js deleted file mode 100644 index 90726a2a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ko",{alt:"이미지 설명",btnUpload:"서버로 전송",captioned:"이미지 설명 넣기",captionPlaceholder:"Caption",infoTab:"이미지 정보",lockRatio:"비율 유지",menu:"이미지 설정",pathName:"이미지",pathNameCaption:"이미지 설명",resetSize:"원래 크기로",resizer:"크기를 조절하려면 클릭 후 드래그 하세요",title:"이미지 설정",uploadTab:"업로드",urlMissing:"이미지 소스 URL이 없습니다."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ku.js deleted file mode 100644 index 6ec1c93f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ku",{alt:"جێگرەوەی دەق",btnUpload:"ناردنی بۆ ڕاژه",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"زانیاری وێنه",lockRatio:"داخستنی ڕێژه",menu:"خاسیەتی وێنه",pathName:"image",pathNameCaption:"caption",resetSize:"ڕێکخستنەوەی قەباره",resizer:"Click and drag to resize",title:"خاسیەتی وێنه",uploadTab:"بارکردن",urlMissing:"سەرچاوەی بەستەری وێنه بزره"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lt.js deleted file mode 100644 index 47b883d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","lt",{alt:"Alternatyvus Tekstas",btnUpload:"Siųsti į serverį",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Vaizdo informacija",lockRatio:"Išlaikyti proporciją",menu:"Vaizdo savybės",pathName:"image",pathNameCaption:"caption",resetSize:"Atstatyti dydį",resizer:"Click and drag to resize",title:"Vaizdo savybės",uploadTab:"Siųsti",urlMissing:"Paveiksliuko nuorodos nėra."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lv.js deleted file mode 100644 index 069595db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","lv",{alt:"Alternatīvais teksts",btnUpload:"Nosūtīt serverim",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informācija par attēlu",lockRatio:"Nemainīga Augstuma/Platuma attiecība",menu:"Attēla īpašības",pathName:"image",pathNameCaption:"caption",resetSize:"Atjaunot sākotnējo izmēru",resizer:"Click and drag to resize",title:"Attēla īpašības",uploadTab:"Augšupielādēt",urlMissing:"Trūkst attēla atrašanās adrese."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mk.js deleted file mode 100644 index 0d5b35e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","mk",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mn.js deleted file mode 100644 index f2d437f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","mn",{alt:"Зургийг орлох бичвэр",btnUpload:"Үүнийг сервэррүү илгээ",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Зурагны мэдээлэл",lockRatio:"Радио түгжих",menu:"Зураг",pathName:"image",pathNameCaption:"caption",resetSize:"хэмжээ дахин оноох",resizer:"Click and drag to resize",title:"Зураг",uploadTab:"Илгээж ачаалах",urlMissing:"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ms.js deleted file mode 100644 index 8d1d6652..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ms",{alt:"Text Alternatif",btnUpload:"Hantar ke Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info Imej",lockRatio:"Tetapkan Nisbah",menu:"Ciri-ciri Imej",pathName:"image",pathNameCaption:"caption",resetSize:"Saiz Set Semula",resizer:"Click and drag to resize",title:"Ciri-ciri Imej",uploadTab:"Muat Naik",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nb.js deleted file mode 100644 index 2f237a60..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","nb",{alt:"Alternativ tekst",btnUpload:"Send det til serveren",captioned:"Bilde med bildetekst",captionPlaceholder:"Bildetekst",infoTab:"Bildeinformasjon",lockRatio:"Lås forhold",menu:"Bildeegenskaper",pathName:"bilde",pathNameCaption:"bildetekst",resetSize:"Tilbakestill størrelse",resizer:"Klikk og dra for å endre størrelse",title:"Bildeegenskaper",uploadTab:"Last opp",urlMissing:"Bildets adresse mangler."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nl.js deleted file mode 100644 index f032d845..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","nl",{alt:"Alternatieve tekst",btnUpload:"Naar server verzenden",captioned:"Afbeelding met onderschrift",captionPlaceholder:"Onderschrift",infoTab:"Afbeeldingsinformatie",lockRatio:"Verhouding vergrendelen",menu:"Eigenschappen afbeelding",pathName:"afbeelding",pathNameCaption:"onderschrift",resetSize:"Afmetingen herstellen",resizer:"Klik en sleep om te herschalen",title:"Afbeeldingseigenschappen",uploadTab:"Uploaden",urlMissing:"De URL naar de afbeelding ontbreekt."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/no.js deleted file mode 100644 index 11bffbbc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","no",{alt:"Alternativ tekst",btnUpload:"Send det til serveren",captioned:"Bilde med bildetekst",captionPlaceholder:"Caption",infoTab:"Bildeinformasjon",lockRatio:"Lås forhold",menu:"Bildeegenskaper",pathName:"bilde",pathNameCaption:"bildetekst",resetSize:"Tilbakestill størrelse",resizer:"Klikk og dra for å endre størrelse",title:"Bildeegenskaper",uploadTab:"Last opp",urlMissing:"Bildets adresse mangler."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pl.js deleted file mode 100644 index 09e19e37..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pl",{alt:"Tekst zastępczy",btnUpload:"Wyślij",captioned:"Obrazek z podpisem",captionPlaceholder:"Podpis",infoTab:"Informacje o obrazku",lockRatio:"Zablokuj proporcje",menu:"Właściwości obrazka",pathName:"obrazek",pathNameCaption:"podpis",resetSize:"Przywróć rozmiar",resizer:"Kliknij i przeciągnij, by zmienić rozmiar.",title:"Właściwości obrazka",uploadTab:"Wyślij",urlMissing:"Podaj adres URL obrazka."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt-br.js deleted file mode 100644 index 82c42e85..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pt-br",{alt:"Texto Alternativo",btnUpload:"Enviar para o Servidor",captioned:"Legenda da Imagem",captionPlaceholder:"Legenda",infoTab:"Informações da Imagem",lockRatio:"Travar Proporções",menu:"Formatar Imagem",pathName:"Imagem",pathNameCaption:"Legenda",resetSize:"Redefinir para o Tamanho Original",resizer:"Click e arraste para redimensionar",title:"Formatar Imagem",uploadTab:"Enviar ao Servidor",urlMissing:"URL da imagem está faltando."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt.js deleted file mode 100644 index d46507bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pt",{alt:"Texto Alternativo",btnUpload:"Enviar para o Servidor",captioned:"Imagem Legendada",captionPlaceholder:"Caption",infoTab:"Informação da Imagem",lockRatio:"Proporcional",menu:"Propriedades da Imagem",pathName:"imagem",pathNameCaption:"legenda",resetSize:"Tamanho Original",resizer:"Clique e arraste para redimensionar",title:"Propriedades da Imagem",uploadTab:"Enviar",urlMissing:"O URL da fonte da imagem está em falta."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ro.js deleted file mode 100644 index 8f860894..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ro",{alt:"Text alternativ",btnUpload:"Trimite la server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informaţii despre imagine",lockRatio:"Păstrează proporţiile",menu:"Proprietăţile imaginii",pathName:"image",pathNameCaption:"caption",resetSize:"Resetează mărimea",resizer:"Click and drag to resize",title:"Proprietăţile imaginii",uploadTab:"Încarcă",urlMissing:"Sursa URL a imaginii lipsește."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ru.js deleted file mode 100644 index eda93cb0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ru",{alt:"Альтернативный текст",btnUpload:"Загрузить на сервер",captioned:"Захваченное изображение",captionPlaceholder:"Название",infoTab:"Данные об изображении",lockRatio:"Сохранять пропорции",menu:"Свойства изображения",pathName:"изображение",pathNameCaption:"захват",resetSize:"Вернуть обычные размеры",resizer:"Нажмите и растяните",title:"Свойства изображения",uploadTab:"Загрузка файла",urlMissing:"Не указана ссылка на изображение."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/si.js deleted file mode 100644 index 5ab518c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","si",{alt:"විකල්ප ",btnUpload:"සේවාදායකය වෙත යොමුකිරිම",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"රුපයේ තොරතුරු",lockRatio:"නවතන අනුපාතය ",menu:"රුපයේ ගුණ",pathName:"image",pathNameCaption:"caption",resetSize:"නැවතත් විශාලත්වය වෙනස් කිරීම",resizer:"Click and drag to resize",title:"රුපයේ ",uploadTab:"උඩුගතකිරීම",urlMissing:"රුප මුලාශ්‍ර URL නැත."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sk.js deleted file mode 100644 index 18778843..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sk",{alt:"Alternatívny text",btnUpload:"Odoslať to na server",captioned:"Opísaný obrázok",captionPlaceholder:"Popis",infoTab:"Informácie o obrázku",lockRatio:"Pomer zámky",menu:"Vlastnosti obrázka",pathName:"obrázok",pathNameCaption:"popis",resetSize:"Pôvodná veľkosť",resizer:"Kliknite a potiahnite pre zmenu veľkosti",title:"Vlastnosti obrázka",uploadTab:"Nahrať",urlMissing:"Chýba URL zdroja obrázka."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sl.js deleted file mode 100644 index aced917a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sl",{alt:"Nadomestno besedilo",btnUpload:"Pošlji na strežnik",captioned:"Podnaslovljena slika",captionPlaceholder:"Napis",infoTab:"Podatki o sliki",lockRatio:"Zakleni razmerje",menu:"Lastnosti slike",pathName:"slika",pathNameCaption:"napis",resetSize:"Ponastavi velikost",resizer:"Kliknite in povlecite, da spremeniti velikost",title:"Lastnosti slike",uploadTab:"Naloži",urlMissing:"Manjka vir (URL) slike."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sq.js deleted file mode 100644 index 8232aef2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sq",{alt:"Tekst Alternativ",btnUpload:"Dërgo në server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informacione mbi Fotografinë",lockRatio:"Mbyll Racionin",menu:"Karakteristikat e Fotografisë",pathName:"image",pathNameCaption:"caption",resetSize:"Rikthe Madhësinë",resizer:"Click and drag to resize",title:"Karakteristikat e Fotografisë",uploadTab:"Ngarko",urlMissing:"Mungon URL e burimit të fotografisë."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr-latn.js deleted file mode 100644 index 287f0265..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sr-latn",{alt:"Alternativni tekst",btnUpload:"Pošalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zaključaj odnos",menu:"Osobine slika",pathName:"image",pathNameCaption:"caption",resetSize:"Resetuj veličinu",resizer:"Click and drag to resize",title:"Osobine slika",uploadTab:"Pošalji",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr.js deleted file mode 100644 index 18857fb7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sr",{alt:"Алтернативни текст",btnUpload:"Пошаљи на сервер",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Инфо слике",lockRatio:"Закључај однос",menu:"Особине слика",pathName:"image",pathNameCaption:"caption",resetSize:"Ресетуј величину",resizer:"Click and drag to resize",title:"Особине слика",uploadTab:"Пошаљи",urlMissing:"Недостаје УРЛ слике."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sv.js deleted file mode 100644 index 2c5ed3f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sv",{alt:"Alternativ text",btnUpload:"Skicka till server",captioned:"Rubricerad bild",captionPlaceholder:"Bildtext",infoTab:"Bildinformation",lockRatio:"Lås höjd/bredd förhållanden",menu:"Bildegenskaper",pathName:"bild",pathNameCaption:"rubrik",resetSize:"Återställ storlek",resizer:"Klicka och drag för att ändra storlek",title:"Bildegenskaper",uploadTab:"Ladda upp",urlMissing:"Bildkällans URL saknas."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/th.js deleted file mode 100644 index 636814d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","th",{alt:"คำประกอบรูปภาพ",btnUpload:"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ข้อมูลของรูปภาพ",lockRatio:"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",menu:"คุณสมบัติของ รูปภาพ",pathName:"image",pathNameCaption:"caption",resetSize:"กำหนดรูปเท่าขนาดจริง",resizer:"Click and drag to resize",title:"คุณสมบัติของ รูปภาพ",uploadTab:"อัพโหลดไฟล์",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tr.js deleted file mode 100644 index 305d1b39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","tr",{alt:"Alternatif Yazı",btnUpload:"Sunucuya Yolla",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Resim Bilgisi",lockRatio:"Oranı Kilitle",menu:"Resim Özellikleri",pathName:"Resim",pathNameCaption:"caption",resetSize:"Boyutu Başa Döndür",resizer:"Boyutlandırmak için, tıklayın ve sürükleyin",title:"Resim Özellikleri",uploadTab:"Karşıya Yükle",urlMissing:"Resmin URL kaynağı bulunamadı."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tt.js deleted file mode 100644 index 2133d73b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","tt",{alt:"Альтернатив текст",btnUpload:"Серверга җибәрү",captioned:"Исеме куелган рәсем",captionPlaceholder:"Исем",infoTab:"Рәсем тасвирламасы",lockRatio:"Lock Ratio",menu:"Рәсем үзлекләре",pathName:"рәсем",pathNameCaption:"исем",resetSize:"Баштагы зурлык",resizer:"Күчереп куер өчен басып шудырыгыз",title:"Рәсем үзлекләре",uploadTab:"Йөкләү",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ug.js deleted file mode 100644 index 7913ee9f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ug",{alt:"تېكىست ئالماشتۇر",btnUpload:"مۇلازىمېتىرغا يۈكلە",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"سۈرەت",lockRatio:"نىسبەتنى قۇلۇپلا",menu:"سۈرەت خاسلىقى",pathName:"image",pathNameCaption:"caption",resetSize:"ئەسلى چوڭلۇق",resizer:"Click and drag to resize",title:"سۈرەت خاسلىقى",uploadTab:"يۈكلە",urlMissing:"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/uk.js deleted file mode 100644 index 989eb551..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","uk",{alt:"Альтернативний текст",btnUpload:"Надіслати на сервер",captioned:"Підписане зображення",captionPlaceholder:"Caption",infoTab:"Інформація про зображення",lockRatio:"Зберегти пропорції",menu:"Властивості зображення",pathName:"Зображення",pathNameCaption:"заголовок",resetSize:"Очистити поля розмірів",resizer:"Клікніть та потягніть для зміни розмірів",title:"Властивості зображення",uploadTab:"Надіслати",urlMissing:"Вкажіть URL зображення."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/vi.js deleted file mode 100644 index 863c40d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","vi",{alt:"Chú thích ảnh",btnUpload:"Tải lên máy chủ",captioned:"Ảnh có chú thích",captionPlaceholder:"Nhãn",infoTab:"Thông tin của ảnh",lockRatio:"Giữ nguyên tỷ lệ",menu:"Thuộc tính của ảnh",pathName:"ảnh",pathNameCaption:"chú thích",resetSize:"Kích thước gốc",resizer:"Kéo rê để thay đổi kích cỡ",title:"Thuộc tính của ảnh",uploadTab:"Tải lên",urlMissing:"Thiếu đường dẫn hình ảnh"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh-cn.js deleted file mode 100644 index 3209b92f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","zh-cn",{alt:"替换文本",btnUpload:"上传到服务器",captioned:"带标题图像",captionPlaceholder:"标题",infoTab:"图像信息",lockRatio:"锁定比例",menu:"图像属性",pathName:"图像",pathNameCaption:"标题",resetSize:"原始尺寸",resizer:"点击并拖拽以改变尺寸",title:"图像属性",uploadTab:"上传",urlMissing:"缺少图像源文件地址"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh.js deleted file mode 100644 index f9489af4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","zh",{alt:"替代文字",btnUpload:"傳送至伺服器",captioned:"已加標題之圖片",captionPlaceholder:"Caption",infoTab:"影像資訊",lockRatio:"固定比例",menu:"影像屬性",pathName:"圖片",pathNameCaption:"標題",resetSize:"重設大小",resizer:"拖曳以改變大小",title:"影像屬性",uploadTab:"上傳",urlMissing:"遺失圖片來源之 URL "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/image2/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/image2/plugin.js deleted file mode 100644 index 37195045..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/image2/plugin.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function A(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function e(){var d=a.editable(),c=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,d)).block&&(d=c.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),d.replace(this.widget.wrapper),this.widget.wrapper.move(d)),this.focused&& -(this.widget.focus(),delete this.focused),delete this.deflated;else{var b=this.widget,d=f,c=b.wrapper,e=b.data.align,b=b.data.hasCaption;if(d){for(var j=3;j--;)c.removeClass(d[j]);"center"==e?b&&c.addClass(d[1]):"none"!=e&&c.addClass(d[n[e]])}else"center"==e?(b?c.setStyle("text-align","center"):c.removeStyle("text-align"),c.removeStyle("float")):("none"==e?c.removeStyle("float"):c.setStyle("float",e),c.removeStyle("text-align"))}}var f=a.config.image2_alignClasses,g=a.config.image2_captionedClass; -return{allowedContent:B(a),requiredContent:"img[src,alt]",features:C(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:z,data:function(){var d=this.features;this.data.hasCaption&&!a.filter.checkFeature(d.caption)&&(this.data.hasCaption=!1);"none"!=this.data.align&&!a.filter.checkFeature(d.align)&& -(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,inflate:e});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var c in this.data.classes)this.parts.image.removeClass(c);if(a.filter.checkFeature(d.dimension)){d= -this.data;d={width:d.width,height:d.height};c=this.parts.image;for(var f in d)d[f]?c.setAttribute(f,d[f]):c.removeAttribute(f)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,c=this.parts.image,e={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},g=c.getAscendant("a");g&&this.wrapper.contains(g)&&(this.parts.link= -g);e.align||(f?(this.element.hasClass(f[0])?e.align="left":this.element.hasClass(f[2])&&(e.align="right"),e.align?this.element.removeClass(f[n[e.align]]):e.align="none"):(e.align=this.element.getStyle("float")||c.getStyle("float")||"none",this.element.removeStyle("float"),c.removeStyle("float")));if(a.plugins.link&&this.parts.link&&(e.link=CKEDITOR.plugins.link.parseLinkAttributes(a,this.parts.link),(c=e.link.advanced)&&c.advCSSClasses))c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/, -""));this.wrapper[(e.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(e);a.filter.checkFeature(this.features.dimension)&&D(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF});this.on("dialog",function(a){a.data.widget=this},this)},addClass:function(a){k(this).addClass(a)},hasClass:function(a){return k(this).hasClass(a)}, -removeClass:function(a){k(this).removeClass(a)},getClasses:function(){var a=RegExp("^("+[].concat(g,f).join("|")+")$");return function(){var b=this.repository.parseElementClasses(k(this).getAttribute("class")),e;for(e in b)a.test(e)&&delete b[e];return b}}(),upcast:E(a),downcast:F(a)}}function E(a){var b=l(a),e=a.config.image2_captionedClass;return function(a,g){var d={width:1,height:1},c=a.name,h;if(!a.attributes["data-cke-realelement"]){if(b(a)){if("div"==c&&(h=a.getFirst("figure")))a.replaceWith(h), -a=h;g.align="center";h=a.getFirst("img")||a.getFirst("a").getFirst("img")}else"figure"==c&&a.hasClass(e)?h=a.getFirst("img")||a.getFirst("a").getFirst("img"):o(a)&&(h="a"==a.name?a.children[0]:a);if(h){for(var y in d)(c=h.attributes[y])&&c.match(G)&&delete h.attributes[y];return a}}}}function F(a){var b=a.config.image2_alignClasses;return function(a){var f="a"==a.name?a.getFirst():a,g=f.attributes,d=this.data.align;if(!this.inline){var c=a.getFirst("span");c&&c.replaceWith(c.getFirst({img:1,a:1}))}d&& -"none"!=d&&(c=CKEDITOR.tools.parseCssText(g.style||""),"center"==d&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):d in{left:1,right:1}&&(b?f.addClass(b[n[d]]):c["float"]=d),!b&&!CKEDITOR.tools.isEmpty(c)&&(g.style=CKEDITOR.tools.writeCssText(c)));return a}}function l(a){var b=a.config.image2_captionedClass,e=a.config.image2_alignClasses,f={figure:1,a:1,img:1};return function(g){if(!(g.name in{div:1,p:1}))return!1;var d=g.children; -if(1!==d.length)return!1;d=d[0];if(!(d.name in f))return!1;if("p"==g.name){if(!o(d))return!1}else if("figure"==d.name){if(!d.hasClass(b))return!1}else if(a.enterMode==CKEDITOR.ENTER_P||!o(d))return!1;return(e?g.hasClass(e[1]):"center"==CKEDITOR.tools.parseCssText(g.attributes.style||"",!0)["text-align"])?!0:!1}}function o(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function D(a){var b=a.editor,e=b.editable(),f=b.document,g=a.resizer=f.createElement("span");g.addClass("cke_image_resizer"); -g.setAttribute("title",b.lang.image2.resizer);g.append(new CKEDITOR.dom.text("​",f));if(a.inline)a.wrapper.append(g);else{var d=a.parts.link||a.parts.image,c=d.getParent(),h=f.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(d);h.append(g);a.element.append(h,!0);c.is("span")&&c.remove()}g.on("mousedown",function(c){function j(a,b,c){var d=CKEDITOR.document,j=[];f.equals(d)||j.push(d.on(a,b));j.push(f.on(a,b));if(c)for(a=j.length;a--;)c.push(j.pop())}function d(){p=k+w*t;q=Math.round(p/ -r)}function s(){q=n-m;p=Math.round(q*r)}var h=a.parts.image,w="right"==a.data.align?-1:1,i=c.data.$.screenX,H=c.data.$.screenY,k=h.$.clientWidth,n=h.$.clientHeight,r=k/n,l=[],o="cke_image_s"+(!~w?"w":"e"),x,p,q,v,t,m,u;b.fire("saveSnapshot");j("mousemove",function(a){x=a.data.$;t=x.screenX-i;m=H-x.screenY;u=Math.abs(t/m);1==w?0>=t?0>=m?d():u>=r?d():s():0>=m?u>=r?s():d():s():0>=t?0>=m?u>=r?s():d():s():0>=m?d():u>=r?d():s();15<=p&&15<=q?(h.setAttributes({width:p,height:q}),v=!0):v=!1},l);j("mouseup", -function(){for(var c;c=l.pop();)c.removeListener();e.removeClass(o);g.removeClass("cke_image_resizing");v&&(a.setData({width:p,height:q}),b.fire("saveSnapshot"));v=!1},l);e.addClass(o);g.addClass("cke_image_resizing")});a.on("data",function(){g["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function I(a){var b=[],e;return function(f){var g=a.getCommand("justify"+f);if(g){b.push(function(){g.refresh(a,a.elementPath())});if(f in{right:1,left:1,center:1})g.on("exec",function(d){var c= -i(a);if(c){c.setData("align",f);for(c=b.length;c--;)b[c]();d.cancel()}});g.on("refresh",function(b){var c=i(a),g={right:1,left:1,center:1};c&&(void 0==e&&(e=a.filter.checkFeature(a.widgets.registered.image.features.align)),e?this.setState(c.data.align==f?CKEDITOR.TRISTATE_ON:f in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function J(a){a.plugins.link&&(CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){var b=b.definition, -e=b.onShow,f=b.onOk;b.onShow=function(){var b=i(a);b&&(b.inline?!b.wrapper.getAscendant("a"):1)?this.setupContent(b.data.link||{}):e.apply(this,arguments)};b.onOk=function(){var b=i(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",d)}else f.apply(this,arguments)}}}),a.getCommand("unlink").on("exec",function(b){var e=i(a);e&&e.parts.link&&(e.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())}),a.getCommand("unlink").on("refresh",function(b){var e= -i(a);e&&(this.setState(e.data.link||e.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())}))}function i(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function B(a){var b=a.config.image2_alignClasses,a={div:{match:l(a)},p:{match:l(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles= -"text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function C(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function k(a){return a.data.hasCaption?a.element:a.parts.image}var z='<img alt="" src="" />',K=new CKEDITOR.template('<figure class="{captionedClass}">'+z+"<figcaption>{captionPlaceholder}</figcaption></figure>"), -n={left:0,center:1,right:2},G=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_widget_wrapper>a{display:inline-block}")}, -init:function(a){var b=a.config,e=a.lang.image2,f=A(a);b.filebrowserImage2BrowseUrl=b.filebrowserImageBrowseUrl;b.filebrowserImage2UploadUrl=b.filebrowserImageUploadUrl;f.pathName=e.pathName;f.editables.caption.pathName=e.pathNameCaption;a.widgets.add("image",f);a.ui.addButton&&a.ui.addButton("Image",{label:a.lang.common.image,command:"image",toolbar:"insert,10"});a.contextMenu&&(a.addMenuGroup("image",10),a.addMenuItem("image",{label:e.menu,command:"image",group:"image"}));CKEDITOR.dialog.add("image2", -this.path+"dialogs/image2.js")},afterInit:function(a){var b={left:1,right:1,center:1,block:1},e=I(a),f;for(f in b)e(f);J(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,b){var c={};g?c.attributes={"class":g[1]}:c.styles={"text-align":"center"};c=f.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",c);e(c,b);b.move(c);return c}function e(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();c.insertElementIntoRange(b, -e)}else b.replace(d)}var f=a.document,g=a.config.image2_alignClasses,d=a.config.image2_captionedClass,c=a.editable(),h=["hasCaption","align","link"],i={align:function(c,d,e){var f=c.element;if(c.changed.align){if(!c.newData.hasCaption&&("center"==e&&(c.deflate(),c.element=b(a,f)),!c.changed.hasCaption&&"center"==d&&"center"!=e))c.deflate(),d=f.findOne("a,img"),d.replace(f),c.element=d}else"center"==e&&(c.changed.hasCaption&&!c.newData.hasCaption)&&(c.deflate(),c.element=b(a,f));!g&&f.is("figure")&& -("center"==e?f.setStyle("display","inline-block"):f.removeStyle("display"))},hasCaption:function(b,c,g){b.changed.hasCaption&&(c=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(K.output({captionedClass:d,captionPlaceholder:a.lang.image2.captionPlaceholder}),f),e(g,b.element),c.replace(g.findOne("img")),b.element=g):(c.replace(b.element),b.element=c))},link:function(b,c,d){if(b.changed.link){var e=b.element.is("img")?b.element:b.element.findOne("img"), -g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!d||b.element.is("img")&&d,i;h&&b.deflate();d?(c||(i=f.createElement("a",{attributes:{href:b.newData.link.url}}),i.replace(e),e.move(i)),d=CKEDITOR.plugins.link.getLinkAttributes(a,d),CKEDITOR.tools.isEmpty(d.set)||(i||g).setAttributes(d.set),d.removed.length&&(i||g).removeAttributes(d.removed)):(d=g.findOne("img"),d.replace(g),i=d);h&&(b.element=i)}}};return function(a){var b,c;a.changed={};for(c=0;c<h.length;c++)b=h[c],a.changed[b]= -a.oldData?a.oldData[b]!==a.newData[b]:!1;for(c=0;c<h.length;c++)b=h[c],i[b](a,a.oldData?a.oldData[b]:null,a.newData[b]);a.inflate()}},checkHasNaturalRatio:function(a){var b=a.$,a=this.getNatural(a);return Math.round(b.clientWidth/a.width*a.height)==b.clientHeight||Math.round(b.clientHeight/a.height*a.width)==b.clientWidth},getNatural:function(a){if(a.$.naturalWidth)a={width:a.$.naturalWidth,height:a.$.naturalHeight};else{var b=new Image;b.src=a.getAttribute("src");a={width:b.width,height:b.height}}return a}}})(); -CKEDITOR.config.image2_captionedClass="image"; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/indentblock/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/indentblock/plugin.js deleted file mode 100644 index ab69d14c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/indentblock/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(b,c,a){if(!b.getCustomData("indent_processed")){var d=this.editor,f=this.isIndent;if(c){d=b.$.className.match(this.classNameRegex);a=0;d&&(d=d[1],a=CKEDITOR.tools.indexOf(c,d)+1);if(0>(a+=f?1:-1))return;a=Math.min(a,c.length);a=Math.max(a,0);b.$.className=CKEDITOR.tools.ltrim(b.$.className.replace(this.classNameRegex,""));0<a&&b.addClass(c[a-1])}else{var c=i(b,a),a=parseInt(b.getStyle(c),10),g=d.config.indentOffset||40;isNaN(a)&&(a=0);a+=(f?1:-1)*g;if(0>a)return;a=Math.max(a, -0);a=Math.ceil(a/g)*g;b.setStyle(c,a?a+(d.config.indentUnit||"px"):"");""===b.getAttribute("style")&&b.removeAttribute("style")}CKEDITOR.dom.element.setMarker(this.database,b,"indent_processed",1)}}function i(b,c){return"ltr"==(c||b.getComputedStyle("direction"))?"margin-left":"margin-right"}var j=CKEDITOR.dtd.$listItem,l=CKEDITOR.dtd.$list,f=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentblock",{requires:"indent",init:function(b){function c(b,c){a.specificDefinition.apply(this, -arguments);this.allowedContent={"div h1 h2 h3 h4 h5 h6 ol p pre ul":{propertiesOnly:!0,styles:!d?"margin-left,margin-right":null,classes:d||null}};this.enterBr&&(this.allowedContent.div=!0);this.requiredContent=(this.enterBr?"div":"p")+(d?"("+d.join(",")+")":"{margin-left}");this.jobs={20:{refresh:function(a,b){var e=b.block||b.blockLimit;if(e.is(j))e=e.getParent();else if(e.getAscendant(j))return f;if(!this.enterBr&&!this.getContext(b))return f;if(d){var c;c=d;var e=e.$.className.match(this.classNameRegex), -g=this.isIndent;c=e?g?e[1]!=c.slice(-1):true:g;return c?k:f}return this.isIndent?k:e?CKEDITOR[(parseInt(e.getStyle(i(e)),10)||0)<=0?"TRISTATE_DISABLED":"TRISTATE_OFF"]:f},exec:function(a){var b=a.getSelection(),b=b&&b.getRanges()[0],c;if(c=a.elementPath().contains(l))h.call(this,c,d);else{b=b.createIterator();a=a.config.enterMode;b.enforceRealBlocks=true;for(b.enlargeBr=a!=CKEDITOR.ENTER_BR;c=b.getNextParagraph(a==CKEDITOR.ENTER_P?"p":"div");)c.isReadOnly()||h.call(this,c,d)}return true}}}}var a= -CKEDITOR.plugins.indent,d=b.config.indentClasses;a.registerCommands(b,{indentblock:new c(b,"indentblock",!0),outdentblock:new c(b,"outdentblock")});CKEDITOR.tools.extend(c.prototype,a.specificDefinition.prototype,{context:{div:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,p:1,pre:1,table:1},classNameRegex:d?RegExp("(?:^|\\s+)("+d.join("|")+")(?=$|\\s)"):null})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png deleted file mode 100644 index 7209fd41435c8876203672722c09dd7f7cac8b98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%soT@VF(l&f+3CCe?l_3F?Uy_+wO&<VTZWKoP}LF}h9D`eS$i1z z*+up+zjv6b<`TlKxFB}g-XC_;MRps$VdYA3cH5K^Iql#5^mFCUw*M%sI#sRrbKR@| z&5T>$Eo2Z_6sh{WKwnazVT#cC&l8+XvXk`k<{p-4-nz{!Sb9Q`P+pEeZk`YuW87g; zgL4y~Ssp&wvPHw-+B&HlT+Z9RefM2_$~(KF?Ag=MtyvBXUS9j;<vt}=OUJLgp0y@+ z>9spHHVc+K$;{0beJ<mcz3j1}@`A^eCR;iAR`euV$t7<&w)1$|8s3O(&&e&TUuUb8 zm#_VDV8tqr$t>3T|GOGLrW`u@vvT$3htDqxUi+SXNbJaz=UZ3q4O?usV2V<gQj5U0 zv)WxsS0=O7FLB^#Qh0FtAfx=^6{1{q{Ov4`4JS5*GBX^Dx}>B0vG!Ek_QghRCa1Ih zh4Wky`BLTcT%@DTqu^ZPoW~0_<}E)UaX7=~+4-lbt3_gD<dd!DhH|ky*vrUz?^45R z-U=_l{fw-IA`f+g6&N&G9JimozSq|7sNue#-fs>oO~b!`XSu6q<STf_ZA((!;~Az& z^HP^&cI7c1wmJPuXTv1+HCt6aZ&r}x3E&N0FgJO|a~1s{1F4C3?rrlrxPG#5Pta@4 z37h`*XifigK#8^RjvZ^^A0E~qp*F?%vhtsMHaFjYX(HuuYSp6a?}ghQ_An*OX|9Oh zGHsE@iBB@COBXNI-?B`D>&~vt2Mn_hWlk!%{CeV--z(aFJ4T<jI6Xs+Gwt8kt&Gpu z*qRyj&PV&Zq{S+2x;ANQ>g-z#DXBXR*pKYrpZr{Ao6g0`K27g}cUz@iPZy}z*U!bY z<o$K$JVimz`^y)L%w2YL{tSU2J)ax<uk2mqYpS5<3{0!4C9V-ADTyViR>?)FK#IZ0 zz|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMbFZUIwK@wy`aDG}z od16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr0F||L(f|Me diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png deleted file mode 100644 index 365e3205c42d772df280efa9a266a57fa8d58960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%x!=>pF(l&f+3DW-!r>Ba^NS_#3r+SG)tn-BrBroQmv4CJVY634 zEQxdFkMf08oLr_Y@Rv1KbmgiLS5rZyAiaI(jv7C|bkw3RH|J4j=L_x1<lghY=j8AE zy!ZH{+{Fi{Px-Ux-G6q5y(gTR96FM;tNY{G92kPUrUZE?b~*B#o%=l^yYSrE)|uQ2 zOP7S{Z4O)?ygDR+RXbs?x|dMYUb%}24W;WW4)jL#N`HTU+v!|z*50b6lXSHC6c}_> z_rH5vSX?`IQrwDIH?Q7@&bxc3P4d5*_ioiaOP^VnUYD$>^j~1wy^n=I<=Un9WgCw@ z`1_}94)257yn9)NH*zkm4!gMNM(5Uhm(Ln4(l}JzFOZ~mf+OL|*C3@fhWmDvpHAEN z%j+9!Tm9cx;TWK|xOGOQmK)INSyQ>BSFa9fW{^Ja{Uh$hwQFL#!VYsg&QRI%t9Fr! zr0G+Z1GnC+D|h8t9>T76Eqj06+DRsVB^($Ur~KKo`}EqgzD!F$H9oTa;hJ`9N{a)J zJ%?i!&-?S|IHox9{QYCm@Lg_lYRg_Z+oeSeitEzs_zYvLH&5Ge|G3oT-@Nh{oy*T8 zIDCK8^Xwqw-KnBqCYZ!8PvGmxeHC-e@>ZsoMB9#y3zsO`f6f&7c=q4FcOMtK?_Hh$ zv*_>FH<IgO+8%Da_I!z%FC$aJTPwyz8jD0&P82e<I6PVW%{(Fb54%&x<y4-%-{XC2 z7G61`eU-t<t0`-${XDy~G1Ip0{XV6+!TR>?n)>&0+qZAmWIuRl?}NSR6H@nBTP^zg zDRp;ciAxrb5eLVrtARiDfrd`=s(ipBy?lwtswh>{HjBQEkzpCnR~jz4wkSMoMNW=F z?@4oor^iJt+6BDk<}*H*+3VMSIBoKaFDCY)tXc_smQPhV;@LDoXzAB8-Y4JaFyx4Q z{Ce-6|Hs4a?cQ4)w%^QH;H^64T6gNfw7quoSVbS46JnVAQpe);*R=G;Nt3=_4Si*8 zeSH?|UGw}a30B-JmHZ)Fp6%XUzH{%^spd<H=kM`}QB!1b^4cS?B=Xqq$H}Lnp5Hf~ z#yYP?Dk{0-@PrLfM@9BD#V)%dF-hal&67;=DUP!)*;zh(@u1<u6BYi&=QSS7+_hMC z|9$e>xj9bnWjrN{itFo-+gE&eo?bfd(*5)Elf9SjjNHKXr(iC_UyW106a2*f@cpTn z%iv-8k>7hyuE~dck1tKp=_`yZ`x<@0hBx2sd8C5((u*N~`Qwu>hj4YoegfuK)e_f; zl9a@fRIB8oR3OD*WMF8lYhb2pWDsI#Xk}n-WniLhU}R-r@a@quPZSNg`6-!cmAEyu z@0a@u)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8!4b722WQ%mvv4FO#p=i B155w_ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png deleted file mode 100644 index 75308c126e285865d4d2fd68058c39ddeb5bb0fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%S=-aaF(l&f+39EVZo7%J?w91#bn~2ZqeJ{J^Dh1i>>L+-!)|_I z{Zw}HSY10yWy_jf8Qd%xuXn5zKD|j}qSPeg;@uNmW>3oT-qiDjA<ARIJKJ5w=WLz7 zzJ90}FZ^qD*?)ThgVS~)3|?!)99eF%F|uZ??OepM_DYt@va`(`_o|&ZvL|P9WUPHz zX7$Fd#>3pVGi*+S_`(g-{uOuxPWvHXroQ3w+fASU?7W{c<*#|ZQuOuN!T}8zXT`_u zdoufYzh_V6N{6R1^Us|(jM}^?Ynrft;GW{1O+AbP?iYJmSy${$pORYfTp%*OkGD~P z$#vf6k3VKSe11MVQ(<*>*CGd(fY1APA5_(4x>;~S{{8*@Ez<vNEEL|AbWF|K>F%<w z)bsTMUy<BP(hcvweK)+Tm$lA~qw!AEuf>9`Te+2TIV6&A+`Z|jxpiKTe!<%6bNBc4 z=7h%jI%vAiTK4D9Bi8%x-mQDXG{wm`{!FjDpw@E>JL_zhwF^pl*6P`@bbXv*<GJFR zW#7$bbDBE>s{QSx9?qRzWA=TntGJA;;jCQ_YiF^0OPzn<A~8j^a-Q%sot143-{(0_ z`}n?{zkJe!{d=oiJ%ld2{dCrv)n$9ZLEjCfz7d;N%;I!8wxRt0zucG$hwRzeFM96p z=Vp{WKEovT$9G;}=r8qnfA{h7^z%RJ^81g>*lMZ}e6`-j_UXlccFs#z%$aTB{CeqE z9-k?iJ}nu?le-ojSetd&GUQz1X`w)_)HA)6mx>(i&Nl72emLg=li<P53)`nDou4S6 zmlZRSGgq94?TNa2bm77H_Vy#5O*7~H4xPE7K=rm*+RX!3B8|?rY<{?5Do~kC#RgOH z0#~z?_xD_%F7??_(0Hw6cWhnFuPO5LY!o{m_vTp`oD^MJsx5wM*R%Kf@h^Ptnx1Z% zc14xt)TWdi-NaqH^IN@{*33C9#(Ho&`{f%Ks?Tej|5;MvQdf1WBR#r6aYFC$o=-CG z|1RR#`~6Fm?U7s7wNbzRe$B3#WO6xkR;z$S_|@2NYzZ-;YePadFHaU!3=usSRTFxU z&HPUGLXp5p3716Xs+?`gy4z7QNkH0p&)a9yJyz`W`N3bfa|i3)JL{Ezc}cazHKHUX zu_V<hxhNG#F&G&b8tWRE=^7b?7#dm`m|Gc`Xd4(=85n$fw9FGlLvDUbW?Cg~4ek5o zz5+E!f@}!RPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw=TsEEPS)z4*}Q$iB}%>2(5 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png deleted file mode 100644 index de7c3d45402b537203c5314c0500d66f7ff9edfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%+0fI)F(l&f+3BbAu0#m5?Js^)<};biip#0^qQ_^Z$jwrm+cM-B z<n%W@U~OQ1f1t}Z?Z~RjhXpRZypSt@|D2_1_r4>woI7Us&6uQ9`S9`o@~iRnQ?LG> zuK#o5!g`Hg{~H~C*tUx{1f7)=b1ZXoV2sLcQgG0|+H*wYPWOX3hpX+?HybjpHGR9+ zcGq0Kw-#y{GZ@vIP8PR4He9Ara4+Bgf#2@4bC37mU6#(+mVckEGBnrUfpOurKR@3{ z+TY#nE@D>gnyD+Vug|%4*}ToYoE;qJq9$GJ(09=0_z@<^vSN<1WN*PWr6Sei>xClJ z4FnHLIPbroUQ@PhBHO+YQ8nL>m%pr6-LUABRRc#yK#HXL`+K=h71fU)|DiFf{stGw zVHV4F??3<6!tJ%IOd((P8M7P02NV{pySJ6)omueC^lphgRY!LkhMZd~6mWU9D9fLZ zPdN9>$oPcpTgGFwS0IxmChD~PVZ}n3#hY?!+0xb*U7MuF`B-7bikjXFDQ?RWL(U~` z%DMOd`m_Vp{<D_N`Bv3){v1d4gH<cv>rWOv*jW%Ma{nDuy6*I2AKtg~n;U8Vulgr* zJ?rf0T}+Q$Ppp2Wwt<mjT93DGzKc?mzIV>N$E&*nvgJy4|M~OfW!Sy_GUDsw+2>y_ zsTDu4<eXKP+ADEIF6Vc0az$T0DDIb&6KZ{UEJ{GoE8BAK4uyTC+_^kmofED{Z4BaS zN+^<V>j-+{+GxmjyWoe8d!}yXw6o=n>)$bdl~lNwd}+$%y7?sr3NhQBw@GeL;`u!1 z%Pzegd2A~*8^2s$KDXrPef_uxS<lSW4Q4a4&*j_xSi*ER<NcR^PcK~l`+yfG)7qEs z-e0c#^1^Cs{?osw3qL;Noj;i+{yo!Cmx}7d6Yt&K|CIf=t6qEUs;1zP->t4mlLZ#6 z(W-j>e9P^(p5hkUZ?WF9EJ`-;Gz$FflM~H!ees5Ai!>&bZgyaJF5@}t)5hz{w)W~* zc9$l-wq2~F>=}IL%j@SXGlV2~*gWRle{uiP$&ZHXwh5j+xaWIHYUSh`3@NEQA25H8 z44BWjPNzKRduu?KLKnwl30c?T`8$mkz2wPgRa_g}eBDE1t@xZT_IGvGXGp1?`3lTY zswJ)wB`Jv|saDBFsX&Us$iUE8*T78I$RNbf(8|Ev%D_b1z{twL;M=2Ro+uh}^HVa@ zDsgLQ-!BKUK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr E05QnV?EnA( diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyblock.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyblock.png deleted file mode 100644 index a507be1bceeb57cd729a01afa948bf8edd1fd482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iBd4c}V~EA+r56uo9dZyj_VIs?84JtOu4iwwfBbv@K-xpkQgv1{ z=cE}Y{rJ5#mu}hd_D=eby89=d7BM=wct{#EAL!;dXSqp7`Shmg)262;Mv6IcR6Lhi zeYNXu-t>|MudU?z-EB79%=vIHnk!MpUGlgfzkt(&6042(-+#RK|3>@Fg{xxLhdXg> zWHwHomwxW~=P8pO)a_4B+jwM=hQLIni47etO*0E^<Sb?Q^aXEi`&;vvec`HADo*#m z|5x_8{AKEfyLp<YC)u2@kDc>;=CaIv!n@XaEAbo_;5@g}UU1%d^>aICID|4rtiP^b zyYPK=h^bmYXx?_|v}rCYUQ2}@Z5NPeV|<{ywb|x;CHr5&byoYQMdkoQO0~o_q9i4; zB-JXpC>2OC7#SEE>l&Er8kmF_np+td1Ch3Yk(Ggg?~>iXP(;#@o1c=IR*74K%}?ed yKn;>08-nxGO3D+9QW?t2%k?tzvWt@w3sUv+i_&MmvylQSV(@hJb6Mw<&;$S(M!*yR diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifycenter.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifycenter.png deleted file mode 100644 index f758bc42209dfa65f0f3aa7d8cbfceb39e1c0418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW0j|iV~EA+sgn+NJ#r9nJ->R2q$87%it-K#@x2+}-z~8}R6p;$ zgs6(ZqBO&a4oRV_(iRrxw0k~o+^%_Vb=CHFQ_rR~cPyCVl-(P|CHPSAy)DBz%Qagq zp1(_%a?o@YaXnIaCVY;c`l?lna&Nz8Rcg96%c5`M>&y46p6xAOxAOI`eMf7XrR}E# z?N;FUH!)!?Ylch8j|=_pwv?~A{@Q<+^_s0qGPxWCSTvRvoLlI=Sa9;mCDNZ9E-No& z^O)4KNMpq+t{y{%_YL(+U+qfUe}D1ZVg{Y*r~lu&;aPMp@VaUH;f242O9DkI-phXY z?aeRmaakl=chxGbhWG<DTcc__PHb4tGK2Z^Ij@^}+glPnCaJU}TEy#!S+D)7E_tuI z$1o-GnoR%k#CgvplGj;wEP8RX)%pB0-UB&iyLT%blVEE;DE;B{wIwf(Gsfsm&z$%C zMRdZK3Y&lTR6kg{oNv@R{V9Kne2hnYq2g(yTiaZxr=Bday2~iPKBmBKK4(*d{h2in z^kg=q{sl&jYKdz^NlIc#s#S7PDv)9@GB7mOH89sTFbOd<w=ysWB5eaBD+2@HCA)#q zhNK}kKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>I{`yl`T diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyleft.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyleft.png deleted file mode 100644 index 542ddee31336717de530041a87cc093cd6424754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqr0bzV~EA+sS{6ky>bw74d2@lZm?nnv-`iM|NnKBnl@+fs?6&8 zx{KK}<F?;qyTwhbZq3;`-9m<sfkRPZ)|}4|=88EfEOpUr4SMz1v1g)$vgT6x<}Fhu zy(~FZv{Qy>!?jNpHXVllWCEtCM!i00JGXdIZgh~ByoZ#+(j#^I)3-(~-1_eKhkMCu zk4hX)F>=)W+Nk2UT=?_PIh%B34;#Pa(^Orv_0Ie9q@MLc-HRMJ0{;koXnQ_K*!S`t zCaYz4^Nv^Tt#kenx2(8t)hZ6fFSak{7~iYzJDz;{gysD6dnaz>i2ePaVb-#jQ@?X` zA8k6D)@=Cf@#63ER;{YAoByt8XMl)n{zCT+*ZQ1p<ZaJa+cKrd<WRVD?rpB;ce0xW zm>4$S%(>uXuE>(NUE1)NxD!X?>#tttDz~(rbKzi|8?<O$cEitjrdPX;NgS@<eEQbk zViOK6U^uImxJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4HZZa>Fz{Wn8yE*j z8glbfGSez?Yq0srd<3XL5@bVgep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&9m Lu6{1-oD!M<<zC`p diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyright.png b/platforms/android/assets/www/lib/ckeditor/plugins/justify/icons/justifyright.png deleted file mode 100644 index 71a983c9194a7c429e8656f0bba4a8d0d37da804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqqC=rV~EA+sgr#34jBlv+TY&T;;`V9lJvTRfAbHB-eBZbP!Q}^ zc`#q^lFHKFP%CZkZ#Mh$?{&N_^Ip{=aB{bVGDGC5K(EdquBBJjSHHKtSM9{{m?_9> z*=5aRGnO29TJ*4P|9-BLX;XuA#JD%<bZfTkTIU*jeeD7N(^1)5uC2MA-D8-swmR>* z%=6DP1r8Z7YpQO($&<_zbn4&qvuT%?$lS>@PwHttP-Ew=IdzLoQ-i=F(HCphhG~DY zNjI9=!?(V=+-h!I@|SzXd*g1t|9*Bi->FS90!cj~p{yT1nqGOO-?%I@ibc_-`h*c* zyYt={J;P%Yo>$ucegCz_&Qh+Q`A`ItYv7;Gq_w$%yO#d+XJY6-4s=3fkKlV-hwZf| zm+7@`(kVQ*m2Xb5h^u4I$G0pDWxHk1S#A<wx^~O1vHWyY_qAF62g29tZk?;G4Gd$| z64!{5l*E!$tK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)Mb_2s7NkeXaN@iLm zZVfg+nU4T9NP=t#&QB{TPb^AhC@(M9%goCzPEIUH)ypqRpZ(583aE&|)78&qol`;+ E0AvN%)Bpeg diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/af.js deleted file mode 100644 index b3bd6aeb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","af",{block:"Uitvul",center:"Sentreer",left:"Links oplyn",right:"Regs oplyn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ar.js deleted file mode 100644 index 39f7a34f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ar",{block:"ضبط",center:"توسيط",left:"محاذاة إلى اليسار",right:"محاذاة إلى اليمين"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bg.js deleted file mode 100644 index d4a30cba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bg",{block:"Двустранно подравняване",center:"Център",left:"Подравни в ляво",right:"Подравни в дясно"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bn.js deleted file mode 100644 index c58ead92..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bn",{block:"ব্লক জাস্টিফাই",center:"মাঝ বরাবর ঘেষা",left:"বা দিকে ঘেঁষা",right:"ডান দিকে ঘেঁষা"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bs.js deleted file mode 100644 index 9b8553c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bs",{block:"Puno poravnanje",center:"Centralno poravnanje",left:"Lijevo poravnanje",right:"Desno poravnanje"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ca.js deleted file mode 100644 index b97f2a6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ca",{block:"Justificat",center:"Centrat",left:"Alinea a l'esquerra",right:"Alinea a la dreta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cs.js deleted file mode 100644 index 4c9bbb0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","cs",{block:"Zarovnat do bloku",center:"Zarovnat na střed",left:"Zarovnat vlevo",right:"Zarovnat vpravo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cy.js deleted file mode 100644 index 0a6b4ff7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","cy",{block:"Unioni",center:"Alinio i'r Canol",left:"Alinio i'r Chwith",right:"Alinio i'r Dde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/da.js deleted file mode 100644 index 0da8f69e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","da",{block:"Lige margener",center:"Centreret",left:"Venstrestillet",right:"Højrestillet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/de.js deleted file mode 100644 index 97fe58cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","de",{block:"Blocksatz",center:"Zentriert",left:"Linksbündig",right:"Rechtsbündig"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/el.js deleted file mode 100644 index 9941eb60..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","el",{block:"Πλήρης Στοίχιση",center:"Στο Κέντρο",left:"Στοίχιση Αριστερά",right:"Στοίχιση Δεξιά"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-au.js deleted file mode 100644 index bb4e7c5c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-au",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-ca.js deleted file mode 100644 index 46a2d72d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-ca",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-gb.js deleted file mode 100644 index 9ebe888b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-gb",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en.js deleted file mode 100644 index 20b7ff5e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en",{block:"Justify",center:"Center",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eo.js deleted file mode 100644 index 17c15c0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","eo",{block:"Ĝisrandigi Ambaŭflanke",center:"Centrigi",left:"Ĝisrandigi maldekstren",right:"Ĝisrandigi dekstren"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/es.js deleted file mode 100644 index 287fa690..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","es",{block:"Justificado",center:"Centrar",left:"Alinear a Izquierda",right:"Alinear a Derecha"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/et.js deleted file mode 100644 index 5e2eeecc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","et",{block:"Rööpjoondus",center:"Keskjoondus",left:"Vasakjoondus",right:"Paremjoondus"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eu.js deleted file mode 100644 index 3f4f3493..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","eu",{block:"Justifikatu",center:"Lerrokatu Erdian",left:"Lerrokatu Ezkerrean",right:"Lerrokatu Eskuman"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fa.js deleted file mode 100644 index 6a027abe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fa",{block:"بلوک چین",center:"میان چین",left:"چپ چین",right:"راست چین"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fi.js deleted file mode 100644 index c309b712..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fi",{block:"Tasaa molemmat reunat",center:"Keskitä",left:"Tasaa vasemmat reunat",right:"Tasaa oikeat reunat"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fo.js deleted file mode 100644 index cd960d1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fo",{block:"Javnir tekstkantar",center:"Miðsett",left:"Vinstrasett",right:"Høgrasett"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr-ca.js deleted file mode 100644 index 6abd477d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fr-ca",{block:"Justifié",center:"Centré",left:"Aligner à gauche",right:"Aligner à Droite"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr.js deleted file mode 100644 index 41d84c06..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fr",{block:"Justifier",center:"Centrer",left:"Aligner à gauche",right:"Aligner à droite"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gl.js deleted file mode 100644 index 1d06021e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","gl",{block:"Xustificado",center:"Centrado",left:"Aliñar á esquerda",right:"Aliñar á dereita"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gu.js deleted file mode 100644 index 10ec3045..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","gu",{block:"બ્લૉક, અંતરાય જસ્ટિફાઇ",center:"સંકેંદ્રણ/સેંટરિંગ",left:"ડાબી બાજુએ/બાજુ તરફ",right:"જમણી બાજુએ/બાજુ તરફ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/he.js deleted file mode 100644 index 93e075d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","he",{block:"יישור לשוליים",center:"מרכוז",left:"יישור לשמאל",right:"יישור לימין"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hi.js deleted file mode 100644 index 5e7f955e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hi",{block:"ब्लॉक जस्टीफ़ाई",center:"बीच में",left:"बायीं तरफ",right:"दायीं तरफ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hr.js deleted file mode 100644 index a9100975..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hr",{block:"Blok poravnanje",center:"Središnje poravnanje",left:"Lijevo poravnanje",right:"Desno poravnanje"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hu.js deleted file mode 100644 index 00069c6f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hu",{block:"Sorkizárt",center:"Középre",left:"Balra",right:"Jobbra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/id.js deleted file mode 100644 index f1aa2e86..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","id",{block:"Rata kiri-kanan",center:"Pusat",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/is.js deleted file mode 100644 index f5f891e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","is",{block:"Jafna báðum megin",center:"Miðja texta",left:"Vinstrijöfnun",right:"Hægrijöfnun"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/it.js deleted file mode 100644 index 188a0f81..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","it",{block:"Giustifica",center:"Centra",left:"Allinea a sinistra",right:"Allinea a destra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ja.js deleted file mode 100644 index 24552e0f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ja",{block:"両端揃え",center:"中央揃え",left:"左揃え",right:"右揃え"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ka.js deleted file mode 100644 index 8ddd27e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ka",{block:"გადასწორება",center:"შუაში სწორება",left:"მარცხნივ სწორება",right:"მარჯვნივ სწორება"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/km.js deleted file mode 100644 index 62a049bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","km",{block:"តម្រឹម​ពេញ",center:"កណ្ដាល",left:"តម្រឹម​ឆ្វេង",right:"តម្រឹម​ស្ដាំ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ko.js deleted file mode 100644 index bfcbaf02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ko",{block:"양쪽 맞춤",center:"가운데 정렬",left:"왼쪽 정렬",right:"오른쪽 정렬"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ku.js deleted file mode 100644 index a27e9e13..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ku",{block:"هاوستوونی",center:"ناوەڕاست",left:"بەهێڵ کردنی چەپ",right:"بەهێڵ کردنی ڕاست"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lt.js deleted file mode 100644 index d9731e46..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","lt",{block:"Lygiuoti abi puses",center:"Centruoti",left:"Lygiuoti kairę",right:"Lygiuoti dešinę"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lv.js deleted file mode 100644 index 7a49b357..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","lv",{block:"Izlīdzināt malas",center:"Izlīdzināt pret centru",left:"Izlīdzināt pa kreisi",right:"Izlīdzināt pa labi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mk.js deleted file mode 100644 index aabf8ca2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","mk",{block:"Justify",center:"Center",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mn.js deleted file mode 100644 index 2eb717ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","mn",{block:"Тэгшлэх",center:"Голлуулах",left:"Зүүн талд тулгах",right:"Баруун талд тулгах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ms.js deleted file mode 100644 index fb6d5ea1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ms",{block:"Jajaran Blok",center:"Jajaran Tengah",left:"Jajaran Kiri",right:"Jajaran Kanan"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nb.js deleted file mode 100644 index 9b8ed082..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","nb",{block:"Blokkjuster",center:"Midtstill",left:"Venstrejuster",right:"Høyrejuster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nl.js deleted file mode 100644 index 1b0f8ae3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","nl",{block:"Uitvullen",center:"Centreren",left:"Links uitlijnen",right:"Rechts uitlijnen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/no.js deleted file mode 100644 index 49f6c800..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","no",{block:"Blokkjuster",center:"Midtstill",left:"Venstrejuster",right:"Høyrejuster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pl.js deleted file mode 100644 index 104c04f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pl",{block:"Wyjustuj",center:"Wyśrodkuj",left:"Wyrównaj do lewej",right:"Wyrównaj do prawej"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt-br.js deleted file mode 100644 index 05e293e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pt-br",{block:"Justificado",center:"Centralizar",left:"Alinhar Esquerda",right:"Alinhar Direita"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt.js deleted file mode 100644 index e641019f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pt",{block:"Justificado",center:"Alinhar ao Centro",left:"Alinhar à Esquerda",right:"Alinhar à Direita"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ro.js deleted file mode 100644 index d1da4cc9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ro",{block:"Aliniere în bloc (Block Justify)",center:"Aliniere centrală",left:"Aliniere la stânga",right:"Aliniere la dreapta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ru.js deleted file mode 100644 index 4dfc2e40..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ru",{block:"По ширине",center:"По центру",left:"По левому краю",right:"По правому краю"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/si.js deleted file mode 100644 index 8d85db57..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","si",{block:"Justify",center:"මධ්‍ය",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sk.js deleted file mode 100644 index 6d4de70f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sk",{block:"Zarovnať do bloku",center:"Zarovnať na stred",left:"Zarovnať vľavo",right:"Zarovnať vpravo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sl.js deleted file mode 100644 index cda22d1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sl",{block:"Obojestranska poravnava",center:"Sredinska poravnava",left:"Leva poravnava",right:"Desna poravnava"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sq.js deleted file mode 100644 index 5ec58c62..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sq",{block:"Zgjero",center:"Qendër",left:"Rreshto majtas",right:"Rreshto Djathtas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr-latn.js deleted file mode 100644 index 320d6972..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sr-latn",{block:"Obostrano ravnanje",center:"Centriran tekst",left:"Levo ravnanje",right:"Desno ravnanje"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr.js deleted file mode 100644 index f6654964..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sr",{block:"Обострано равнање",center:"Центриран текст",left:"Лево равнање",right:"Десно равнање"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sv.js deleted file mode 100644 index 9054d4f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sv",{block:"Justera till marginaler",center:"Centrera",left:"Vänsterjustera",right:"Högerjustera"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/th.js deleted file mode 100644 index fb1d15f9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","th",{block:"จัดพอดีหน้ากระดาษ",center:"จัดกึ่งกลาง",left:"จัดชิดซ้าย",right:"จัดชิดขวา"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tr.js deleted file mode 100644 index 177d9add..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","tr",{block:"İki Kenara Yaslanmış",center:"Ortalanmış",left:"Sola Dayalı",right:"Sağa Dayalı"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tt.js deleted file mode 100644 index b0999da7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","tt",{block:"Киңлеккә карап тигезләү",center:"Үзәккә тигезләү",left:"Сул як кырыйдан тигезләү",right:"Уң як кырыйдан тигезләү"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ug.js deleted file mode 100644 index a1112522..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ug",{block:"ئىككى تەرەپتىن توغرىلا",center:"ئوتتۇرىغا توغرىلا",left:"سولغا توغرىلا",right:"ئوڭغا توغرىلا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/uk.js deleted file mode 100644 index ba2baba0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","uk",{block:"По ширині",center:"По центру",left:"По лівому краю",right:"По правому краю"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/vi.js deleted file mode 100644 index 30395d21..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","vi",{block:"Canh đều",center:"Canh giữa",left:"Canh trái",right:"Canh phải"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh-cn.js deleted file mode 100644 index 9132cf5e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","zh-cn",{block:"两端对齐",center:"居中",left:"左对齐",right:"右对齐"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh.js deleted file mode 100644 index 405907b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","zh",{block:"左右對齊",center:"置中",left:"靠左對齊",right:"靠右對齊"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/justify/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/justify/plugin.js deleted file mode 100644 index 82fe3301..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/justify/plugin.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function l(a,c){var c=void 0===c||c,b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function g(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";var c=a.config.justifyClasses,h=a.config.enterMode== -CKEDITOR.ENTER_P?"p":"div";if(c){switch(b){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;case "justify":this.cssClassName=c[3]}this.cssClassRegex=RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?=$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName|| -null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function j(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),d.addClass(e[0]))); -e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}g.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(),e=this.cssClassName,g,f,i=a.config.useComputedState,i=void 0===i||i,k=d.length-1;0<=k;k--){g=d[k].createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;f=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)if(!f.isReadOnly()){f.removeAttribute("align");f.removeStyle("text-align"); -var j=e&&(f.$.className=CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex,""))),m=this.state==CKEDITOR.TRISTATE_OFF&&(!i||l(f,!0)!=this.value);e?m?f.addClass(e):j||f.removeAttribute("class"):m&&f.setStyle("text-align",this.value)}}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&l(b,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify", -{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"justifyblock,justifycenter,justifyleft,justifyright",hidpi:!0,init:function(a){if(!a.blockless){var c=new g(a,"justifyleft","left"),b=new g(a,"justifycenter","center"),h=new g(a,"justifyright","right"),d=new g(a,"justifyblock","justify");a.addCommand("justifyleft", -c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock", -toolbar:"align,40"}));a.on("dirChanged",j)}}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/icons/hidpi/language.png b/platforms/android/assets/www/lib/ckeditor/plugins/language/icons/hidpi/language.png deleted file mode 100644 index 3908a6ae1ee7c13976b80bd93e26f10de1771c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1678 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 YWiD@WXPfRk8UO$Q07*qoM6N<$f<N&d{Qv*} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/icons/language.png b/platforms/android/assets/www/lib/ckeditor/plugins/language/icons/language.png deleted file mode 100644 index eb680d42a6395d3676227ecb9e3544349f19a5d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<5o`>#}JFty^|eJJ#r9e-T&%H#sQ5*?gG#5?<!n;eCFf|zI@~2 zrklKrI#L!|EDq%KbbmXm)$K}r{j-CMcUAa?e_x$7^ZfIQdF_U5f{YHKh35+G<}-e< z>GxXdB++If#mg|KILA!-j{#4n+3b+jq3;scJ}t0NP%@eATXUb?!NuwT`-jA}vXfIK z8}=>QI&F~#!?6SY5BNWXyVRBLzAK+OD=BNM)T&>T90e4VdfXQ0ufDp<P=e>ys#WK9 z{!KCZIah@<fA#b;pJhV-u3L3DZvFCAr>gd<^(8<1Y`JgMCwU3xE3Zo#tmg7n&f9$Z ztwH-?N0*lHJr!zEMqNs$N+sH)SQw94e!tedNJH+^+p^yi(j(jI!`}*DGEwyu`e@T1 zw%T>pvR88^zb)(DI_>et3d;xD@`nueh;}UENalH4Hv92Mk4Y*sHihQf9FQpf{J?6h zmXZ`pqgx=0Yv6_V-@i&8ei#rsHTzFX-Tw8ifibr#Y7aFFF2C$~dS?AKufH{R@w*E4 zZn|fD{`2i;>1(g7-TEVP+Qzu`@lrFFX`X)iY3<2EnaA(HSEp^3>^|yrYUYmBXG*O0 zW<Cwy-~XRs{obsEQ+q4hfw8Ju;u=wsl30>zm0Xkxq!^4042^XSEOiadLktbAOiir} z%(M-RtPBi(D*sbJ(U6;;l9^VCTSG^k+Z><<NstY}`DrEPiAAXl<>lpinR(g8$%zH2 Ydih1^v)|cB0TnTLy85}Sb4q9e029+3x&QzG diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ar.js deleted file mode 100644 index 781a80b4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ar",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ca.js deleted file mode 100644 index b954027f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ca",{button:"Definir l'idioma",remove:"Eliminar idioma"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cs.js deleted file mode 100644 index 672a1a68..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","cs",{button:"Nastavit jazyk",remove:"Odstranit jazyk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cy.js deleted file mode 100644 index 79d8d0e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","cy",{button:"Gosod iaith",remove:"Tynnu iaith"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/de.js deleted file mode 100644 index 5adda832..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","de",{button:"Sprache stellen",remove:"Sprache entfernen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/el.js deleted file mode 100644 index 2b0c17aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","el",{button:"Θέση γλώσσας",remove:"Αφαίρεση γλώσσας"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en-gb.js deleted file mode 100644 index 73cd1a5d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","en-gb",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en.js deleted file mode 100644 index acb83453..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","en",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/eo.js deleted file mode 100644 index 49335695..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","eo",{button:"Instali lingvon",remove:"Forigi lingvon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/es.js deleted file mode 100644 index cd91eff8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","es",{button:"Fijar lenguaje",remove:"Quitar lenguaje"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fa.js deleted file mode 100644 index 572f4c64..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fa",{button:"تعیین زبان",remove:"حذف زبان"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fi.js deleted file mode 100644 index f0276d16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fi",{button:"Aseta kieli",remove:"Poista kieli"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fr.js deleted file mode 100644 index 0b8602a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fr",{button:"Définir la langue",remove:"Supprimer la langue"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/gl.js deleted file mode 100644 index 58ce1323..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","gl",{button:"Estabelezer o idioma",remove:"Retirar o idioma"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/he.js deleted file mode 100644 index 334788e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","he",{button:"צור שפה",remove:"הסר שפה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hr.js deleted file mode 100644 index 911103dd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","hr",{button:"Namjesti jezik",remove:"Makni jezik"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hu.js deleted file mode 100644 index 92cc653c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","hu",{button:"Nyelv beállítása",remove:"Nyelv eltávolítása"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/it.js deleted file mode 100644 index 32e54319..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","it",{button:"Imposta lingua",remove:"Rimuovi lingua"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ja.js deleted file mode 100644 index e00999d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ja",{button:"言語を設定",remove:"言語を削除"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/km.js deleted file mode 100644 index f146a6fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","km",{button:"កំណត់​ភាសា",remove:"លុប​ភាសា"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nb.js deleted file mode 100644 index a0ed5b12..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","nb",{button:"Sett språk",remove:"Fjern språk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nl.js deleted file mode 100644 index 49c7d1ae..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","nl",{button:"Taal instellen",remove:"Taal verwijderen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/no.js deleted file mode 100644 index 87b4e066..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","no",{button:"Sett språk",remove:"Fjern språk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pl.js deleted file mode 100644 index 6de4bc48..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pl",{button:"Ustaw język",remove:"Usuń język"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt-br.js deleted file mode 100644 index fbb3df1e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pt-br",{button:"Configure o Idioma",remove:"Remover Idioma"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt.js deleted file mode 100644 index d63076b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pt",{button:"Definir Idioma",remove:"Remover Idioma"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ru.js deleted file mode 100644 index 60316fe7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ru",{button:"Установка языка",remove:"Удалить язык"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sk.js deleted file mode 100644 index 2a6896ae..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sk",{button:"Nastaviť jazyk",remove:"Odstrániť jazyk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sl.js deleted file mode 100644 index 3d0c585e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sl",{button:"Nastavi jezik",remove:"Odstrani jezik"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sv.js deleted file mode 100644 index 061b5b75..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sv",{button:"Sätt språk",remove:"Ta bort språk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tr.js deleted file mode 100644 index ae38d58c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","tr",{button:"Dili seç",remove:"Dili kaldır"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tt.js deleted file mode 100644 index a651f7bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","tt",{button:"Тел сайлау",remove:"Телне бетерү"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/uk.js deleted file mode 100644 index 15a7cf06..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","uk",{button:"Установити мову",remove:"Вилучити мову"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/vi.js deleted file mode 100644 index 631df086..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","vi",{button:"Thiết lập ngôn ngữ",remove:"Loại bỏ ngôn ngữ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh-cn.js deleted file mode 100644 index a03c73a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","zh-cn",{button:"设置语言",remove:"移除语言"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh.js deleted file mode 100644 index 6676d954..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","zh",{button:"設定語言",remove:"移除語言"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/language/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/language/plugin.js deleted file mode 100644 index fe302883..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/language/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",icons:"language",hidpi:!0,init:function(a){var b=a.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,d=a.lang.language,e={},g,h,i,f;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,b){var c=e["language_"+b];if(c)a[c.style.checkActive(a.elementPath(), -a)?"removeStyle":"applyStyle"](c.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(f=0;f<b.length;f++)g=b[f].split(":"),h=g[0],i="language_"+h,e[i]={label:g[1],langId:h,group:"language",order:f,ltr:"rtl"!=(""+g[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},e[i].style=new CKEDITOR.style({element:"span",attributes:{lang:h,dir:e[i].ltr?"ltr":"rtl"}});e.language_remove={label:d.remove, -group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:e.length,onClick:function(){var b=c.getCurrentLangElement(a);b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(e);a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:d.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),f;for(f in e)b[f]=CKEDITOR.TRISTATE_OFF; -b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var b=a.elementPath(),a=b&&b.elements,c;if(b)for(var d=0;d<a.length;d++)b=a[d],!c&&("span"==b.getName()&&b.hasAttribute("dir")&&b.hasAttribute("lang"))&&(c=b);return c}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/lineutils/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/lineutils/plugin.js deleted file mode 100644 index aa93527f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/lineutils/plugin.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function k(a,d){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),doc:a.document,win:a.window},d,!0);this.frame=this.win.getFrame();this.inline=this.editable.isInline();this.target=this[this.inline?"editable":"doc"]}function l(a,d){CKEDITOR.tools.extend(this,d,{editor:a},!0)}function m(a,d){var b=a.editable();CKEDITOR.tools.extend(this,{editor:a,editable:b,doc:a.document,win:a.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()},d,!0);this.hidden= -{};this.visible={};this.inline=b.isInline();this.inline||(this.frame=this.win.getFrame());this.queryViewport();var c=CKEDITOR.tools.bind(this.queryViewport,this),e=CKEDITOR.tools.bind(this.hideVisible,this),g=CKEDITOR.tools.bind(this.removeAll,this);b.attachListener(this.winTop,"resize",c);b.attachListener(this.winTop,"scroll",c);b.attachListener(this.winTop,"resize",e);b.attachListener(this.win,"scroll",e);b.attachListener(this.inline?b:this.frame,"mouseout",function(a){var c=a.data.$.clientX,a= -a.data.$.clientY;this.queryViewport();(c<=this.rect.left||c>=this.rect.right||a<=this.rect.top||a>=this.rect.bottom)&&this.hideVisible();(c<=0||c>=this.winTopPane.width||a<=0||a>=this.winTopPane.height)&&this.hideVisible()},this);b.attachListener(a,"resize",c);b.attachListener(a,"mode",g);a.on("destroy",g);this.lineTpl=(new CKEDITOR.template(p)).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},q,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({}, -n,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},n,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function i(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&!(o[a.getComputedStyle("float")]||o[a.getAttribute("align")])&&!r[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1; -CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;k.prototype={start:function(a){var d=this,b=this.editor,c=this.doc,e,g,f,h=CKEDITOR.tools.eventsBuffer(50,function(){b.readOnly||"wysiwyg"!=b.mode||(d.relations={},e=new CKEDITOR.dom.element(c.$.elementFromPoint(g,f)),d.traverseSearch(e),isNaN(g+f)||d.pixelSearch(e,g,f),a&&a(d.relations,g,f))});this.listener=this.editable.attachListener(this.target,"mousemove",function(a){g=a.data.$.clientX;f=a.data.$.clientY;h.input()});this.editable.attachListener(this.inline? -this.editable:this.frame,"mouseout",function(){h.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(d){var b=this.editor.createRange();b.moveToPosition(this.relations[d.uid].element,a[d.type]);return b}}(),store:function(){function a(a,b,c){var e=a.getUniqueId(); -e in c?c[e].type|=b:c[e]={element:a,type:b}}return function(d,b){var c;if(b&CKEDITOR.LINEUTILS_AFTER&&i(c=d.getNext())&&c.isVisible())a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_AFTER;if(b&CKEDITOR.LINEUTILS_INSIDE&&i(c=d.getFirst())&&c.isVisible())a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_INSIDE;a(d,b,this.relations)}}(),traverseSearch:function(a){var d,b,c;do if(c=a.$["data-cke-expando"],!(c&&c in this.relations)){if(a.equals(this.editable))break; -if(i(a))for(d in this.lookups)(b=this.lookups[d](a))&&this.store(a,b)}while(!(a&&a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(a,c,e,g,f){for(var h=0,j;f(e);){e+=g;if(25==++h)break;if(j=this.doc.$.elementFromPoint(c,e))if(j==a)h=0;else if(d(a,j)&&(h=0,i(j=new CKEDITOR.dom.element(j))))return j}}var d=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,c){return a.contains(c)}:function(a,c){return!!(a.compareDocumentPosition(c)& -16)};return function(b,c,d){var g=this.win.getViewPaneSize().height,f=a.call(this,b.$,c,d,-1,function(a){return 0<a}),c=a.call(this,b.$,c,d,1,function(a){return a<g});if(f)for(this.traverseSearch(f);!f.getParent().equals(b);)f=f.getParent();if(c)for(this.traverseSearch(c);!c.getParent().equals(b);)c=c.getParent();for(;f||c;){f&&(f=f.getNext(i));if(!f||f.equals(c))break;this.traverseSearch(f);c&&(c=c.getPrevious(i));if(!c||c.equals(f))break;this.traverseSearch(c)}}}(),greedySearch:function(){this.relations= -{};for(var a=this.editable.getElementsByTag("*"),d=0,b,c,e;b=a.getItem(d++);)if(!b.equals(this.editable)&&(b.hasAttribute("contenteditable")||!b.isReadOnly())&&i(b)&&b.isVisible())for(e in this.lookups)(c=this.lookups[e](b))&&this.store(b,c);return this.relations}};l.prototype={locate:function(){function a(a,b){var d=a.element[b===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return d&&i(d)?(a.siblingRect=d.getClientRect(),b==CKEDITOR.LINEUTILS_BEFORE?(a.siblingRect.bottom+a.elementRect.top)/ -2:(a.elementRect.bottom+a.siblingRect.top)/2):b==CKEDITOR.LINEUTILS_BEFORE?a.elementRect.top:a.elementRect.bottom}var d,b;return function(c){this.locations={};for(b in c)d=c[b],d.elementRect=d.element.getClientRect(),d.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(b,CKEDITOR.LINEUTILS_BEFORE,a(d,CKEDITOR.LINEUTILS_BEFORE)),d.type&CKEDITOR.LINEUTILS_AFTER&&this.store(b,CKEDITOR.LINEUTILS_AFTER,a(d,CKEDITOR.LINEUTILS_AFTER)),d.type&CKEDITOR.LINEUTILS_INSIDE&&this.store(b,CKEDITOR.LINEUTILS_INSIDE,(d.elementRect.top+ -d.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,d,b,c,e,g;return function(f,h){a=this.locations;d=[];for(c in a)for(e in a[c])if(b=Math.abs(f-a[c][e]),d.length){for(g=0;g<d.length;g++)if(b<d[g].dist){d.splice(g,0,{uid:+c,type:e,dist:b});break}g==d.length&&d.push({uid:+c,type:e,dist:b})}else d.push({uid:+c,type:e,dist:b});return"undefined"!=typeof h?d.slice(0,h):d}}(),store:function(a,d,b){this.locations[a]||(this.locations[a]={});this.locations[a][d]=b}};var n={display:"block", -width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},q={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999},p='<div data-cke-lineutils-line="1" class="cke_reset_all" style="{lineStyle}"><span style="{tipLeftStyle}">&nbsp;</span><span style="{tipRightStyle}">&nbsp;</span></div>';m.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(), -delete this.visible[a]},hideLine:function(a){var d=a.getUniqueId();a.hide();this.hidden[d]=a;delete this.visible[d]},showLine:function(a){var d=a.getUniqueId();a.show();this.visible[d]=a;delete this.hidden[d]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,d){var b,c,e;if(b=this.getStyle(a.uid,a.type)){for(e in this.visible)if(this.visible[e].getCustomData("hash")!==this.hash){c=this.visible[e];break}if(!c)for(e in this.hidden)if(this.hidden[e].getCustomData("hash")!== -this.hash){this.showLine(c=this.hidden[e]);break}c||this.showLine(c=this.addLine());c.setCustomData("hash",this.hash);this.visible[c.getUniqueId()]=c;c.setStyles(b);d&&d(c)}},getStyle:function(a,d){var b=this.relations[a],c=this.locations[a][d],e={};e.width=b.siblingRect?Math.max(b.siblingRect.width,b.elementRect.width):b.elementRect.width;e.top=this.inline?c+this.winTopScroll.y:this.rect.top+this.winTopScroll.y+c;if(e.top-this.winTopScroll.y<this.rect.top||e.top-this.winTopScroll.y>this.rect.bottom)return!1; -if(this.inline)e.left=b.elementRect.left;else if(0<b.elementRect.left?e.left=this.rect.left+b.elementRect.left:(e.width+=b.elementRect.left,e.left=this.rect.left),0<(b=e.left+e.width-(this.rect.left+this.winPane.width)))e.width-=b;e.left+=this.winTopScroll.x;for(var g in e)e[g]=CKEDITOR.tools.cssLength(e[g]);return e},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,d){this.relations=a;this.locations=d;this.hash=Math.random()}, -cleanup:function(){var a,d;for(d in this.visible)a=this.visible[d],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.inline?this.editable.getClientRect():this.frame.getClientRect()}};var o={left:1,right:1,center:1},r={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:k,locator:l,liner:m}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/anchor.js b/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/anchor.js deleted file mode 100644 index e0192b27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/anchor.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)): -this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c); -e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/link.js b/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/link.js deleted file mode 100644 index 312fb7bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/link/dialogs/link.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}}, -f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"], -[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e<b.length;e++){var c=a.getContentElement("info",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==k+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type|| -"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange= -!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),k=/^((javascript:)|[#\/\.\?])/i,c=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):k.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")? -!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button", -id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){d=l.getEditorAnchors(g);this.getElement()[d&&d.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b= -0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor|| -(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress", -label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject, -setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target, -elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName", -label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox", -children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox", -children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0, -filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir, -"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text", -label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)", -"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a= -this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!= -f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab|| -this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/link/images/anchor.png b/platforms/android/assets/www/lib/ckeditor/plugins/link/images/anchor.png deleted file mode 100644 index 6d861a0e7a5cbd98d5cd3264c5fdb6009d43362b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0<!&yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006MNkl<ZILmdC z&uUXa6vlsNZrX}XV=02I;G!vlDDGO+or^v|AD~a*EBG2NU362ytyn5j1iP>lYbi8H zxR;v-p;YW5F+`<FW<D2p(l-A2;J`3*=Epa4KFhL<AOR47zH{7PShx?|19of8=27B3 z76Jxfh5(aD%pgruB)wLlO-XNBySw_hvZBuZz9bz;dMfEg?f4i;x8vSMJ<A}=G9(F* zB)yxP(>iD!^a8X7`mnql`D%A}cEXd`ThDV!W(L6Y>?{CNCnwyhR5<K(r~u_8;rrGW zYi11K+I65uAxjcUaZTTQ02XIvsK<9QKF(OV%tE=$;^ZXLQ&W6BI%4zmG!pC*pjU7u z5x7t=V_-(lIc#Er!4Mwhh6^7Z5GQheAQjM9g8u;e{piX_%t(L)aAr8OVub(DIe>6s z{71LTH{e&V$AtHc17l_+&XK?f?EDXi4&Js}yaHx`L*Pog&7*dkht(>CK)2hyxGhn_ zM$KiwGpPma0S~s9mMWk2_SkAPuttM3;7-x{Ufx5V=OaOqv@Pjot=U9UNz!9UFD3O4 zR#zqIOww~n)AcmP@;s+nt;)=hM4IOoyvG2UfpY}sxH~_86{rGVKIeHS34z3nlBAI* zIKVl_Frfl87*J2spMshJW6t56D}oe47y&4R5r6@5?$Wr1AuP^a4A4e&vf;hwPgiF4 bR}J+WGDARE%D;pG00000NkvXXu0mjftM3S` diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png b/platforms/android/assets/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png deleted file mode 100644 index f5048430d57dcf0170a2df9e48ba25a58ba18ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1379 zcmV-p1)TbcP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FlNkl<ZSi`+n zU2IfE6h8N7|0u96ORFeE14$`rTT+4vHPJ*9A-<CMVq(OAU@69jf+R+ttf}Fprhx(> zF-A!GKzLMwM$<qy*wU0VB??(np-C&d?qa38-M_on@668Ky?eXMu0WaO+nqZz_ndFe zoHOTKWol@MOw%MYmm_q@-grEh$&issk&(?VnI}adP1i~Dct~@*Nl{e{DPp`t4rH^e z!uy!F*6Kn@I!&3yMWM{JDd87cdFPQMDjr`2UITUjIxqo@0>i;$$HMNqI?{bUQeCbh z5laT-vz#1n0*%+WcrBBjJa>-L_wUoT{rg|RTp!RW^<M`*0`3CmfmSNtGIIWF5E;{9 z4Hm2e+_K3eWfBS6(bMxD9=`zQfKSFxo%-3mY8BDs*|Rh{Fu*$>2Mh<MfC%>&LLuXq zmKI}(NZ@jNyAd58cCHTsdw{wteSO40-w%B0SU1W#S+~MJi?JBJeCUvoKOUuU{#Kjn z>Z0+%LGnu5^NO6@dK%cUZXLZoJ8QQ}68H=F2iO95c<=+rJ}u>ffaY7XM#v+(%XD;f zlsM53Fl89NQIEbK4wu7R0?!(oR}zTK&Cz!l_p^gsyhx2ZcQV)KEg7@NkJCVRHyLHl zPY|&CwqY101g4>^1^+G0%@kW$peU?mV$AFHk_Y5mnnsCuoc@NRC9v+&u3bWrM{bNs zt^n!)UnK(emSs=15!epA)Ye83L`fFpavZW&h_X51@qx8#=~;O8Je>J12(sM`Nq`ju zY=o*3D2Z1l(9l5l5JIfnEO$>J%y=#fOE8fQ>(`Tx4J2U^p5yp6(I1(fE*nCsb0BB! z%yuM(b&*tPJjZL;dMS>1Jo{I#CcocLCdgzkZaR*-!~%-r*0LXgDNSBWvn*nf$;k~o zNJjZ1c+|!US&kLb4_LZ{fHMj#fwd|wQCP!!Rh_U>V^cqlrj|WNCjnKZ<!XAlC~!8# z4$gG8=f_S!_<%#X3ZHO6v4??v3S+K(E+-BDJYSBC@-PIPVW>f=4>=%)w0diPp6=jA z<Q71@KaI<$3G+Ij0tGU%C{Y|1e7G>geg8)|Oy5Q#A^~Yq7#9gQK*k5OqPS>pY9cR) zsvxCHQtZs)zk-EoBJdLwpO?wx8DJx4KolKeT+jca9|J}}V(j*9YDI$D(%4ANOa^@s zO|aZ=NLDGCAO80}a0Yk-cz0rgJX^Oe5peV1LHhB;3A%&+7?fR`nIQ$($UcJIM<DN> zRKB_RTF|OH%7&q7i*YUj_hC#bzXWsxUBGEB1vVqscVqsmP>5c@K!dCiLKyoU%ERb$ zaq#xuz4US3x@?TkR2&y?v}zcBn1ALCbfM-u!xb=_mJ7|!!-u(Md`lENn>M}qzG;dL zEnK)jS9b3f^}#k&QqLVYV2PUn-ubn^f5cl~pATs+$&$$7+hs`>2n58+Xf$fQbOShg zwZH#+4>FvFyf26%*@$u-#YvVc=bj#}fc61<fTtY$Vncib^g>SDi!8~-tHKUj%?U5} z_O>xwA7It~;_T%203R2Z^VbFk|4hf@pMuEen0}FqC>b=o>#ML{*1d9NQI4k7b`f#C z&*ifw>;2+4i3}~i10alr>hS#WlP3*WXA&EkwAL}%6)08;A1^jJRV~0wRmV%tuOr3! z(&5WU`becU)pLO(%PCSoEzQakkCY2isT4iQwxlf2%I~+rkt{O-`=JC27g6yHuhSDD lkXLxrp)e>uPR-@D!G9=+u`hgA@I?Rs002ovPDHLkV1h$SfwKSr diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js deleted file mode 100644 index 2b130e71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){this.setValue(a.getStyle("list-style-type")|| -h[a.getAttribute("type")]||a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,"lower-alpha"],[b.upperAlpha,"upper-alpha"], -[b.decimal,"decimal"]];(!CKEDITOR.env.ie||7<CKEDITOR.env.version)&&g.concat([[b.armenian,"armenian"],[b.decimalLeadingZero,"decimal-leading-zero"],[b.georgian,"georgian"],[b.lowerGreek,"lower-greek"]]);return{title:b.numberedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"hbox",widths:["25%","75%"],children:[{label:b.start,type:"text",id:"start",validate:CKEDITOR.dialog.validate.integer(b.validateStartNumber),setup:function(a){this.setValue(a.getFirst(f).getAttribute("value")|| -a.getAttribute("start")||1)},commit:function(a){var b=a.getFirst(f),c=b.getAttribute("value")||a.getAttribute("start")||1;a.getFirst(f).removeAttribute("value");var d=parseInt(this.getValue(),10);isNaN(d)?a.removeAttribute("start"):a.setAttribute("start",d);a=b;b=c;for(d=isNaN(d)?1:d;(a=a.getNext(f))&&b++;)a.getAttribute("value")==b&&a.setAttribute("value",d+b-c)}},{type:"select",label:b.type,id:"type",style:"width: 100%;",items:g,setup:function(a){this.setValue(a.getStyle("list-style-type")||h[a.getAttribute("type")]|| -a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.commitContent(a)}}}}var f=function(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")},h={a:"lower-alpha",A:"upper-alpha",i:"lower-roman",I:"upper-roman",1:"decimal",disc:"disc",circle:"circle",square:"square"}; -CKEDITOR.dialog.add("numberedListStyle",function(c){return e(c,"numberedListStyle")});CKEDITOR.dialog.add("bulletedListStyle",function(c){return e(c,"bulletedListStyle")})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/af.js deleted file mode 100644 index 972e936b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","af",{armenian:"Armeense nommering",bulletedTitle:"Eienskappe van ongenommerde lys",circle:"Sirkel",decimal:"Desimale syfers (1, 2, 3, ens.)",decimalLeadingZero:"Desimale syfers met voorloopnul (01, 02, 03, ens.)",disc:"Skyf",georgian:"Georgiese nommering (an, ban, gan, ens.)",lowerAlpha:"Kleinletters (a, b, c, d, e, ens.)",lowerGreek:"Griekse kleinletters (alpha, beta, gamma, ens.)",lowerRoman:"Romeinse kleinletters (i, ii, iii, iv, v, ens.)",none:"Geen",notset:"<nie ingestel nie>", -numberedTitle:"Eienskappe van genommerde lys",square:"Vierkant",start:"Begin",type:"Tipe",upperAlpha:"Hoofletters (A, B, C, D, E, ens.)",upperRoman:"Romeinse hoofletters (I, II, III, IV, V, ens.)",validateStartNumber:"Beginnommer van lys moet 'n heelgetal wees."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ar.js deleted file mode 100644 index 72b9f52a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ar",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bg.js deleted file mode 100644 index 5cc312a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bg.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bg",{armenian:"Арменско номериране",bulletedTitle:"Bulleted List Properties",circle:"Кръг",decimal:"Числа (1, 2, 3 и др.)",decimalLeadingZero:"Числа с водеща нула (01, 02, 03 и т.н.)",disc:"Диск",georgian:"Грузинско номериране (an, ban, gan, и т.н.)",lowerAlpha:"Малки букви (а, б, в, г, д и т.н.)",lowerGreek:"Малки гръцки букви (алфа, бета, гама и т.н.)",lowerRoman:"Малки римски числа (i, ii, iii, iv, v и т.н.)",none:"Няма",notset:"<не е указано>",numberedTitle:"Numbered List Properties", -square:"Квадрат",start:"Старт",type:"Тип",upperAlpha:"Големи букви (А, Б, В, Г, Д и т.н.)",upperRoman:"Големи римски числа (I, II, III, IV, V и т.н.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bn.js deleted file mode 100644 index d002bafc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bs.js deleted file mode 100644 index af72e359..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bs",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ca.js deleted file mode 100644 index 42455a34..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ca",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cs.js deleted file mode 100644 index d3abb5c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","cs",{armenian:"Arménské",bulletedTitle:"Vlastnosti odrážek",circle:"Kroužky",decimal:"Arabská čísla (1, 2, 3, atd.)",decimalLeadingZero:"Arabská čísla uvozená nulou (01, 02, 03, atd.)",disc:"Kolečka",georgian:"Gruzínské (an, ban, gan, atd.)",lowerAlpha:"Malá latinka (a, b, c, d, e, atd.)",lowerGreek:"Malé řecké (alpha, beta, gamma, atd.)",lowerRoman:"Malé římské (i, ii, iii, iv, v, atd.)",none:"Nic",notset:"<nenastaveno>",numberedTitle:"Vlastnosti číslování", -square:"Čtverce",start:"Počátek",type:"Typ",upperAlpha:"Velká latinka (A, B, C, D, E, atd.)",upperRoman:"Velké římské (I, II, III, IV, V, atd.)",validateStartNumber:"Číslování musí začínat celým číslem."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cy.js deleted file mode 100644 index a5d6cc5f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","cy",{armenian:"Rhifo Armeneg",bulletedTitle:"Priodweddau Rhestr Fwled",circle:"Cylch",decimal:"Degol (1, 2, 3, ayyb.)",decimalLeadingZero:"Degol â sero arweiniol (01, 02, 03, ayyb.)",disc:"Disg",georgian:"Rhifau Sioraidd (an, ban, gan, ayyb.)",lowerAlpha:"Alffa Is (a, b, c, d, e, ayyb.)",lowerGreek:"Groeg Is (alpha, beta, gamma, ayyb.)",lowerRoman:"Rhufeinig Is (i, ii, iii, iv, v, ayyb.)",none:"Dim",notset:"<heb osod>",numberedTitle:"Priodweddau Rhestr Rifol", -square:"Sgwâr",start:"Dechrau",type:"Math",upperAlpha:"Alffa Uwch (A, B, C, D, E, ayyb.)",upperRoman:"Rhufeinig Uwch (I, II, III, IV, V, ayyb.)",validateStartNumber:"Rhaid bod y rhif cychwynnol yn gyfanrif."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/da.js deleted file mode 100644 index d09c455e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/da.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","da",{armenian:"Armensk nummering",bulletedTitle:"Værdier for cirkelpunktopstilling",circle:"Cirkel",decimal:"Decimal (1, 2, 3, osv.)",decimalLeadingZero:"Decimaler med 0 først (01, 02, 03, etc.)",disc:"Værdier for diskpunktopstilling",georgian:"Georgiansk nummering (an, ban, gan, etc.)",lowerAlpha:"Små alfabet (a, b, c, d, e, etc.)",lowerGreek:"Små græsk (alpha, beta, gamma, etc.)",lowerRoman:"Små romerske (i, ii, iii, iv, v, etc.)",none:"Ingen",notset:"<ikke defineret>", -numberedTitle:"Egenskaber for nummereret liste",square:"Firkant",start:"Start",type:"Type",upperAlpha:"Store alfabet (A, B, C, D, E, etc.)",upperRoman:"Store romerske (I, II, III, IV, V, etc.)",validateStartNumber:"Den nummererede liste skal starte med et rundt nummer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/de.js deleted file mode 100644 index 30038e82..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/de.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","de",{armenian:"Armenisch Nummerierung",bulletedTitle:"Listen-Eigenschaften",circle:"Ring",decimal:"Dezimal (1, 2, 3, etc.)",decimalLeadingZero:"Dezimal mit führende Null (01, 02, 03, etc.)",disc:"Kreis",georgian:"Georgisch Nummerierung (an, ban, gan, etc.)",lowerAlpha:"Klein alpha (a, b, c, d, e, etc.)",lowerGreek:"Klein griechisch (alpha, beta, gamma, etc.)",lowerRoman:"Klein römisch (i, ii, iii, iv, v, etc.)",none:"Keine",notset:"<nicht gesetzt>",numberedTitle:"Nummerierte Listen-Eigenschaften", -square:"Quadrat",start:"Start",type:"Typ",upperAlpha:"Groß alpha (A, B, C, D, E, etc.)",upperRoman:"Groß römisch (I, II, III, IV, V, etc.)",validateStartNumber:"List Startnummer muss eine ganze Zahl sein."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/el.js deleted file mode 100644 index d077c8e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/el.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","el",{armenian:"Αρμενική αρίθμηση",bulletedTitle:"Ιδιότητες Λίστας Σημείων",circle:"Κύκλος",decimal:"Δεκαδική (1, 2, 3, κτλ)",decimalLeadingZero:"Δεκαδική με αρχικό μηδεν (01, 02, 03, κτλ)",disc:"Δίσκος",georgian:"Γεωργιανή αρίθμηση (ა, ბ, გ, κτλ)",lowerAlpha:"Μικρά Λατινικά (a, b, c, d, e, κτλ.)",lowerGreek:"Μικρά Ελληνικά (α, β, γ, κτλ)",lowerRoman:"Μικρά Ρωμαϊκά (i, ii, iii, iv, v, κτλ)",none:"Καμία",notset:"<δεν έχει οριστεί>",numberedTitle:"Ιδιότητες Αριθμημένης Λίστας ", -square:"Τετράγωνο",start:"Εκκίνηση",type:"Τύπος",upperAlpha:"Κεφαλαία Λατινικά (A, B, C, D, E, κτλ)",upperRoman:"Κεφαλαία Ρωμαϊκά (I, II, III, IV, V, κτλ)",validateStartNumber:"Ο αριθμός εκκίνησης της αρίθμησης πρέπει να είναι ακέραιος αριθμός."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-au.js deleted file mode 100644 index 41e685fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-au",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js deleted file mode 100644 index 633ecd9b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-ca",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js deleted file mode 100644 index 6f1ca2a5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-gb",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en.js deleted file mode 100644 index 6bba5a29..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eo.js deleted file mode 100644 index 6ef97acc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","eo",{armenian:"Armena nombrado",bulletedTitle:"Atributoj de Bula Listo",circle:"Cirklo",decimal:"Dekumaj Nombroj (1, 2, 3, ktp.)",decimalLeadingZero:"Dekumaj Nombroj malantaŭ nulo (01, 02, 03, ktp.)",disc:"Disko",georgian:"Gruza nombrado (an, ban, gan, ktp.)",lowerAlpha:"Minusklaj Literoj (a, b, c, d, e, ktp.)",lowerGreek:"Grekaj Minusklaj Literoj (alpha, beta, gamma, ktp.)",lowerRoman:"Minusklaj Romanaj Nombroj (i, ii, iii, iv, v, ktp.)",none:"Neniu",notset:"<Defaŭlta>", -numberedTitle:"Atributoj de Numera Listo",square:"kvadrato",start:"Komenco",type:"Tipo",upperAlpha:"Majusklaj Literoj (A, B, C, D, E, ktp.)",upperRoman:"Majusklaj Romanaj Nombroj (I, II, III, IV, V, ktp.)",validateStartNumber:"La unua listero devas esti entjera nombro."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/es.js deleted file mode 100644 index 06ed01a5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","es",{armenian:"Numeración armenia",bulletedTitle:"Propiedades de viñetas",circle:"Círculo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal con cero inicial (01, 02, 03, etc.)",disc:"Disco",georgian:"Numeración georgiana (an, ban, gan, etc.)",lowerAlpha:"Alfabeto en minúsculas (a, b, c, d, e, etc.)",lowerGreek:"Letras griegas (alpha, beta, gamma, etc.)",lowerRoman:"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)",none:"Ninguno",notset:"<sin establecer>", -numberedTitle:"Propiedades de lista numerada",square:"Cuadrado",start:"Inicio",type:"Tipo",upperAlpha:"Alfabeto en mayúsculas (A, B, C, D, E, etc.)",upperRoman:"Números romanos en mayúsculas (I, II, III, IV, V, etc.)",validateStartNumber:"El Inicio debe ser un número entero."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/et.js deleted file mode 100644 index 9212207b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/et.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","et",{armenian:"Armeenia numbrid",bulletedTitle:"Punktloendi omadused",circle:"Ring",decimal:"Numbrid (1, 2, 3, jne)",decimalLeadingZero:"Numbrid algusnulliga (01, 02, 03, jne)",disc:"Täpp",georgian:"Gruusia numbrid (an, ban, gan, jne)",lowerAlpha:"Väiketähed (a, b, c, d, e, jne)",lowerGreek:"Kreeka väiketähed (alpha, beta, gamma, jne)",lowerRoman:"Väiksed rooma numbrid (i, ii, iii, iv, v, jne)",none:"Puudub",notset:"<pole määratud>",numberedTitle:"Numberloendi omadused", -square:"Ruut",start:"Algus",type:"Liik",upperAlpha:"Suurtähed (A, B, C, D, E, jne)",upperRoman:"Suured rooma numbrid (I, II, III, IV, V, jne)",validateStartNumber:"Loendi algusnumber peab olema täisarv."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eu.js deleted file mode 100644 index dc0d63a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/eu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","eu",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fa.js deleted file mode 100644 index 5a588c04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fa",{armenian:"شماره‌گذاری ارمنی",bulletedTitle:"خصوصیات فهرست نقطه‌ای",circle:"دایره",decimal:"ده‌دهی (۱، ۲، ۳، ...)",decimalLeadingZero:"دهدهی همراه با صفر (۰۱، ۰۲، ۰۳، ...)",disc:"صفحه گرد",georgian:"شمارهگذاری گریگورین (an, ban, gan, etc.)",lowerAlpha:"پانویس الفبایی (a, b, c, d, e, etc.)",lowerGreek:"پانویس یونانی (alpha, beta, gamma, etc.)",lowerRoman:"پانویس رومی (i, ii, iii, iv, v, etc.)",none:"هیچ",notset:"<تنظیم نشده>",numberedTitle:"ویژگیهای فهرست شمارهدار", -square:"چهارگوش",start:"شروع",type:"نوع",upperAlpha:"بالانویس الفبایی (A, B, C, D, E, etc.)",upperRoman:"بالانویس رومی (I, II, III, IV, V, etc.)",validateStartNumber:"فهرست شماره شروع باید یک عدد صحیح باشد."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fi.js deleted file mode 100644 index 2e55ab99..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fi",{armenian:"Armeenialainen numerointi",bulletedTitle:"Numeroimattoman listan ominaisuudet",circle:"Ympyrä",decimal:"Desimaalit (1, 2, 3, jne.)",decimalLeadingZero:"Desimaalit, alussa nolla (01, 02, 03, jne.)",disc:"Levy",georgian:"Georgialainen numerointi (an, ban, gan, etc.)",lowerAlpha:"Pienet aakkoset (a, b, c, d, e, jne.)",lowerGreek:"Pienet kreikkalaiset (alpha, beta, gamma, jne.)",lowerRoman:"Pienet roomalaiset (i, ii, iii, iv, v, jne.)",none:"Ei mikään", -notset:"<ei asetettu>",numberedTitle:"Numeroidun listan ominaisuudet",square:"Neliö",start:"Alku",type:"Tyyppi",upperAlpha:"Isot aakkoset (A, B, C, D, E, jne.)",upperRoman:"Isot roomalaiset (I, II, III, IV, V, jne.)",validateStartNumber:"Listan ensimmäisen numeron tulee olla kokonaisluku."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fo.js deleted file mode 100644 index c7861be7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fo",{armenian:"Armensk talskipan",bulletedTitle:"Eginleikar fyri lista við prikkum",circle:"Sirkul",decimal:"Vanlig tøl (1, 2, 3, etc.)",decimalLeadingZero:"Tøl við null frammanfyri (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgisk talskipan (an, ban, gan, osv.)",lowerAlpha:"Lítlir bókstavir (a, b, c, d, e, etc.)",lowerGreek:"Grikskt við lítlum (alpha, beta, gamma, etc.)",lowerRoman:"Lítil rómaratøl (i, ii, iii, iv, v, etc.)",none:"Einki",notset:"<ikki sett>", -numberedTitle:"Eginleikar fyri lista við tølum",square:"Fýrkantur",start:"Byrjan",type:"Slag",upperAlpha:"Stórir bókstavir (A, B, C, D, E, etc.)",upperRoman:"Stór rómaratøl (I, II, III, IV, V, etc.)",validateStartNumber:"Byrjunartalið fyri lista má vera eitt heiltal."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js deleted file mode 100644 index 1c2925a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fr-ca",{armenian:"Numération arménienne",bulletedTitle:"Propriété de liste à puce",circle:"Cercle",decimal:"Décimal (1, 2, 3, etc.)",decimalLeadingZero:"Décimal avec zéro (01, 02, 03, etc.)",disc:"Disque",georgian:"Numération géorgienne (an, ban, gan, etc.)",lowerAlpha:"Alphabétique minuscule (a, b, c, d, e, etc.)",lowerGreek:"Grecque minuscule (alpha, beta, gamma, etc.)",lowerRoman:"Romain minuscule (i, ii, iii, iv, v, etc.)",none:"Aucun",notset:"<non défini>", -numberedTitle:"Propriété de la liste numérotée",square:"Carré",start:"Début",type:"Type",upperAlpha:"Alphabétique majuscule (A, B, C, D, E, etc.)",upperRoman:"Romain Majuscule (I, II, III, IV, V, etc.)",validateStartNumber:"Le numéro de début de liste doit être un entier."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr.js deleted file mode 100644 index a787f638..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/fr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fr",{armenian:"Numération arménienne",bulletedTitle:"Propriétés de la liste à puces",circle:"Cercle",decimal:"Décimal (1, 2, 3, etc.)",decimalLeadingZero:"Décimal précédé par un 0 (01, 02, 03, etc.)",disc:"Disque",georgian:"Numération géorgienne (an, ban, gan, etc.)",lowerAlpha:"Alphabétique minuscules (a, b, c, d, e, etc.)",lowerGreek:"Grec minuscule (alpha, beta, gamma, etc.)",lowerRoman:"Nombres romains minuscules (i, ii, iii, iv, v, etc.)",none:"Aucun",notset:"<Non défini>", -numberedTitle:"Propriétés de la liste numérotée",square:"Carré",start:"Début",type:"Type",upperAlpha:"Alphabétique majuscules (A, B, C, D, E, etc.)",upperRoman:"Nombres romains majuscules (I, II, III, IV, V, etc.)",validateStartNumber:"Le premier élément de la liste doit être un nombre entier."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gl.js deleted file mode 100644 index f4e986fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","gl",{armenian:"Numeración armenia",bulletedTitle:"Propiedades da lista viñeteada",circle:"Circulo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal con cero á esquerda (01, 02, 03, etc.)",disc:"Disc",georgian:"Numeración xeorxiana (an, ban, gan, etc.)",lowerAlpha:"Alfabeto en minúsculas (a, b, c, d, e, etc.)",lowerGreek:"Grego en minúsculas (alpha, beta, gamma, etc.)",lowerRoman:"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)",none:"Ningún", -notset:"<sen estabelecer>",numberedTitle:"Propiedades da lista numerada",square:"Cadrado",start:"Inicio",type:"Tipo",upperAlpha:"Alfabeto en maiúsculas (A, B, C, D, E, etc.)",upperRoman:"Números romanos en maiúsculas (I, II, III, IV, V, etc.)",validateStartNumber:"O número de inicio da lista debe ser un número enteiro."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gu.js deleted file mode 100644 index 48995fbc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","gu",{armenian:"અરમેનિયન આંકડા પદ્ધતિ",bulletedTitle:"બુલેટેડ લીસ્ટના ગુણ",circle:"વર્તુળ",decimal:"આંકડા (1, 2, 3, etc.)",decimalLeadingZero:"સુન્ય આગળ આંકડા (01, 02, 03, etc.)",disc:"ડિસ્ક",georgian:"ગેઓર્ગિયન આંકડા પદ્ધતિ (an, ban, gan, etc.)",lowerAlpha:"આલ્ફા નાના (a, b, c, d, e, etc.)",lowerGreek:"ગ્રીક નાના (alpha, beta, gamma, etc.)",lowerRoman:"રોમન નાના (i, ii, iii, iv, v, etc.)",none:"કસુ ",notset:"<સેટ નથી>",numberedTitle:"આંકડાના લીસ્ટના ગુણ",square:"ચોરસ", -start:"શરુ કરવું",type:"પ્રકાર",upperAlpha:"આલ્ફા મોટા (A, B, C, D, E, etc.)",upperRoman:"રોમન મોટા (I, II, III, IV, V, etc.)",validateStartNumber:"લીસ્ટના સરુઆતનો આંકડો પુરો હોવો જોઈએ."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/he.js deleted file mode 100644 index ba746516..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","he",{armenian:"ספרות ארמניות",bulletedTitle:"תכונות רשימת תבליטים",circle:"עיגול ריק",decimal:"ספרות (1, 2, 3 וכו')",decimalLeadingZero:"ספרות עם 0 בהתחלה (01, 02, 03 וכו')",disc:"עיגול מלא",georgian:"ספרות גיאורגיות (an, ban, gan וכו')",lowerAlpha:"אותיות אנגליות קטנות (a, b, c, d, e וכו')",lowerGreek:"אותיות יווניות קטנות (alpha, beta, gamma וכו')",lowerRoman:"ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו')",none:"ללא",notset:"<לא נקבע>",numberedTitle:"תכונות רשימה ממוספרת", -square:"ריבוע",start:"תחילת מספור",type:"סוג",upperAlpha:"אותיות אנגליות גדולות (A, B, C, D, E וכו')",upperRoman:"ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו')",validateStartNumber:"שדה תחילת המספור חייב להכיל מספר שלם."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hi.js deleted file mode 100644 index 23e5affe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hi",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hr.js deleted file mode 100644 index 66a47962..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hr",{armenian:"Armenijska numeracija",bulletedTitle:"Svojstva liste",circle:"Krug",decimal:"Decimalna numeracija (1, 2, 3, itd.)",decimalLeadingZero:"Decimalna s vodećom nulom (01, 02, 03, itd)",disc:"Disk",georgian:"Gruzijska numeracija(an, ban, gan, etc.)",lowerAlpha:"Znakovi mala slova (a, b, c, d, e, itd.)",lowerGreek:"Grčka numeracija mala slova (alfa, beta, gama, itd).",lowerRoman:"Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)",none:"Bez",notset:"<nije određen>", -numberedTitle:"Svojstva brojčane liste",square:"Kvadrat",start:"Početak",type:"Vrsta",upperAlpha:"Znakovi velika slova (A, B, C, D, E, itd.)",upperRoman:"Romanska numeracija velika slova (I, II, III, IV, V, itd.)",validateStartNumber:"Početak brojčane liste mora biti cijeli broj."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hu.js deleted file mode 100644 index d37d441f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/hu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hu",{armenian:"Örmény számozás",bulletedTitle:"Pontozott lista tulajdonságai",circle:"Kör",decimal:"Arab számozás (1, 2, 3, stb.)",decimalLeadingZero:"Számozás bevezető nullákkal (01, 02, 03, stb.)",disc:"Korong",georgian:"Grúz számozás (an, ban, gan, stb.)",lowerAlpha:"Kisbetűs (a, b, c, d, e, stb.)",lowerGreek:"Görög (alpha, beta, gamma, stb.)",lowerRoman:"Római kisbetűs (i, ii, iii, iv, v, stb.)",none:"Nincs",notset:"<Nincs beállítva>",numberedTitle:"Sorszámozott lista tulajdonságai", -square:"Négyzet",start:"Kezdőszám",type:"Típus",upperAlpha:"Nagybetűs (A, B, C, D, E, stb.)",upperRoman:"Római nagybetűs (I, II, III, IV, V, stb.)",validateStartNumber:"A kezdőszám nem lehet tört érték."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/id.js deleted file mode 100644 index 65d48510..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","id",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Lingkaran",decimal:"Desimal (1, 2, 3, dst.)",decimalLeadingZero:"Desimal diawali angka nol (01, 02, 03, dst.)",disc:"Cakram",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Huruf Kecil (a, b, c, d, e, dst.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Angka Romawi (i, ii, iii, iv, v, dst.)",none:"Tidak ada",notset:"<tidak diatur>",numberedTitle:"Numbered List Properties", -square:"Persegi",start:"Mulai",type:"Tipe",upperAlpha:"Huruf Besar (A, B, C, D, E, dst.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/is.js deleted file mode 100644 index 3f8cd1a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","is",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/it.js deleted file mode 100644 index 674c5e1b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/it.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","it",{armenian:"Numerazione Armena",bulletedTitle:"Proprietà liste puntate",circle:"Cerchio",decimal:"Decimale (1, 2, 3, ecc.)",decimalLeadingZero:"Decimale preceduto da 0 (01, 02, 03, ecc.)",disc:"Disco",georgian:"Numerazione Georgiana (an, ban, gan, ecc.)",lowerAlpha:"Alfabetico minuscolo (a, b, c, d, e, ecc.)",lowerGreek:"Greco minuscolo (alpha, beta, gamma, ecc.)",lowerRoman:"Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)",none:"Nessuno",notset:"<non impostato>", -numberedTitle:"Proprietà liste numerate",square:"Quadrato",start:"Inizio",type:"Tipo",upperAlpha:"Alfabetico maiuscolo (A, B, C, D, E, ecc.)",upperRoman:"Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)",validateStartNumber:"Il numero di inizio di una lista numerata deve essere un numero intero."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ja.js deleted file mode 100644 index 934cc98c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ja",{armenian:"アルメニア数字",bulletedTitle:"箇条書きのプロパティ",circle:"白丸",decimal:"数字 (1, 2, 3, etc.)",decimalLeadingZero:"0付きの数字 (01, 02, 03, etc.)",disc:"黒丸",georgian:"グルジア数字 (an, ban, gan, etc.)",lowerAlpha:"小文字アルファベット (a, b, c, d, e, etc.)",lowerGreek:"小文字ギリシャ文字 (alpha, beta, gamma, etc.)",lowerRoman:"小文字ローマ数字 (i, ii, iii, iv, v, etc.)",none:"なし",notset:"<なし>",numberedTitle:"番号付きリストのプロパティ",square:"四角",start:"開始",type:"種類",upperAlpha:"大文字アルファベット (A, B, C, D, E, etc.)", -upperRoman:"大文字ローマ数字 (I, II, III, IV, V, etc.)",validateStartNumber:"リストの開始番号は数値で入力してください。"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ka.js deleted file mode 100644 index f820e66a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ka.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ka",{armenian:"სომხური გადანომრვა",bulletedTitle:"ღილებიანი სიის პარამეტრები",circle:"წრეწირი",decimal:"რიცხვებით (1, 2, 3, ..)",decimalLeadingZero:"ნულით დაწყებული რიცხვებით (01, 02, 03, ..)",disc:"წრე",georgian:"ქართული გადანომრვა (ან, ბან, გან, ..)",lowerAlpha:"პატარა ლათინური ასოებით (a, b, c, d, e, ..)",lowerGreek:"პატარა ბერძნული ასოებით (ალფა, ბეტა, გამა, ..)",lowerRoman:"რომაული გადანომრვცა პატარა ციფრებით (i, ii, iii, iv, v, ..)",none:"არაფერი",notset:"<არაფერი>", -numberedTitle:"გადანომრილი სიის პარამეტრები",square:"კვადრატი",start:"საწყისი",type:"ტიპი",upperAlpha:"დიდი ლათინური ასოებით (A, B, C, D, E, ..)",upperRoman:"რომაული გადანომრვა დიდი ციფრებით (I, II, III, IV, V, etc.)",validateStartNumber:"სიის საწყისი მთელი რიცხვი უნდა იყოს."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/km.js deleted file mode 100644 index 181efe3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","km",{armenian:"លេខ​អារមេនី",bulletedTitle:"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​ចំណុច",circle:"រង្វង់​មូល",decimal:"លេខ​ទសភាគ (1, 2, 3, ...)",decimalLeadingZero:"ទសភាគ​ចាប់​ផ្ដើម​ពី​សូន្យ (01, 02, 03, ...)",disc:"ថាស",georgian:"លេខ​ចចជា (an, ban, gan, ...)",lowerAlpha:"ព្យញ្ជនៈ​តូច (a, b, c, d, e, ...)",lowerGreek:"លេខ​ក្រិក​តូច (alpha, beta, gamma, ...)",lowerRoman:"លេខ​រ៉ូម៉ាំង​តូច (i, ii, iii, iv, v, ...)",none:"គ្មាន",notset:"<not set>",numberedTitle:"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​លេខ", -square:"ការេ",start:"ចាប់​ផ្ដើម",type:"ប្រភេទ",upperAlpha:"អក្សរ​ធំ (A, B, C, D, E, ...)",upperRoman:"លេខ​រ៉ូម៉ាំង​ធំ (I, II, III, IV, V, ...)",validateStartNumber:"លេខ​ចាប់​ផ្ដើម​បញ្ជី ត្រូវ​តែ​ជា​តួ​លេខ​ពិត​ប្រាកដ។"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ko.js deleted file mode 100644 index 1be0697f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ko",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ku.js deleted file mode 100644 index ccb7e195..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ku.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ku",{armenian:"ئاراستەی ژمارەی ئەرمەنی",bulletedTitle:"خاسیەتی لیستی خاڵی",circle:"بازنه",decimal:"ژمارە (1, 2, 3, وە هیتر.)",decimalLeadingZero:"ژمارە سفڕی لەپێشەوه (01, 02, 03, وە هیتر.)",disc:"پەپکە",georgian:"ئاراستەی ژمارەی جۆڕجی (an, ban, gan, وە هیتر.)",lowerAlpha:"ئەلفابێی بچووك (a, b, c, d, e, وە هیتر.)",lowerGreek:"یۆنانی بچووك (alpha, beta, gamma, وە هیتر.)",lowerRoman:"ژمارەی ڕۆمی بچووك (i, ii, iii, iv, v, وە هیتر.)",none:"هیچ",notset:"<دانەندراوه>", -numberedTitle:"خاسیەتی لیستی ژمارەیی",square:"چووراگۆشە",start:"دەستپێکردن",type:"جۆر",upperAlpha:"ئەلفابێی گەوره (A, B, C, D, E, وە هیتر.)",upperRoman:"ژمارەی ڕۆمی گەوره (I, II, III, IV, V, وە هیتر.)",validateStartNumber:"دەستپێکەری لیستی ژمارەیی دەبێت تەنها ژمارە بێت."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lt.js deleted file mode 100644 index c563c96d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","lt",{armenian:"Armėniški skaitmenys",bulletedTitle:"Ženklelinio sąrašo nustatymai",circle:"Apskritimas",decimal:"Dešimtainis (1, 2, 3, t.t)",decimalLeadingZero:"Dešimtainis su nuliu priekyje (01, 02, 03, t.t)",disc:"Diskas",georgian:"Gruziniški skaitmenys (an, ban, gan, t.t)",lowerAlpha:"Mažosios Alpha (a, b, c, d, e, t.t)",lowerGreek:"Mažosios Graikų (alpha, beta, gamma, t.t)",lowerRoman:"Mažosios Romėnų (i, ii, iii, iv, v, t.t)",none:"Niekas",notset:"<nenurodytas>", -numberedTitle:"Skaitmeninio sąrašo nustatymai",square:"Kvadratas",start:"Pradžia",type:"Rūšis",upperAlpha:"Didžiosios Alpha (A, B, C, D, E, t.t)",upperRoman:"Didžiosios Romėnų (I, II, III, IV, V, t.t)",validateStartNumber:"Sąrašo pradžios skaitmuo turi būti sveikas skaičius."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lv.js deleted file mode 100644 index 94c41888..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/lv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","lv",{armenian:"Armēņu skaitļi",bulletedTitle:"Vienkārša saraksta uzstādījumi",circle:"Aplis",decimal:"Decimālie (1, 2, 3, utt)",decimalLeadingZero:"Decimālie ar nulli (01, 02, 03, utt)",disc:"Disks",georgian:"Gruzīņu skaitļi (an, ban, gan, utt)",lowerAlpha:"Mazie alfabēta (a, b, c, d, e, utt)",lowerGreek:"Mazie grieķu (alfa, beta, gamma, utt)",lowerRoman:"Mazie romāņu (i, ii, iii, iv, v, utt)",none:"Nekas",notset:"<nav norādīts>",numberedTitle:"Numurēta saraksta uzstādījumi", -square:"Kvadrāts",start:"Sākt",type:"Tips",upperAlpha:"Lielie alfabēta (A, B, C, D, E, utt)",upperRoman:"Lielie romāņu (I, II, III, IV, V, utt)",validateStartNumber:"Saraksta sākuma numuram jābūt veselam skaitlim"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mk.js deleted file mode 100644 index 36966219..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","mk",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mn.js deleted file mode 100644 index 895d754e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","mn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Төрөл",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ms.js deleted file mode 100644 index ffe91b8b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ms",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nb.js deleted file mode 100644 index cd9b38db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","nb",{armenian:"Armensk nummerering",bulletedTitle:"Egenskaper for punktmerket liste",circle:"Sirkel",decimal:"Tall (1, 2, 3, osv.)",decimalLeadingZero:"Tall, med førstesiffer null (01, 02, 03, osv.)",disc:"Disk",georgian:"Georgisk nummerering (an, ban, gan, osv.)",lowerAlpha:"Alfabetisk, små (a, b, c, d, e, osv.)",lowerGreek:"Gresk, små (alpha, beta, gamma, osv.)",lowerRoman:"Romertall, små (i, ii, iii, iv, v, osv.)",none:"Ingen",notset:"<ikke satt>",numberedTitle:"Egenskaper for nummerert liste", -square:"Firkant",start:"Start",type:"Type",upperAlpha:"Alfabetisk, store (A, B, C, D, E, osv.)",upperRoman:"Romertall, store (I, II, III, IV, V, osv.)",validateStartNumber:"Starten på listen må være et heltall."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nl.js deleted file mode 100644 index 4fc950ab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/nl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","nl",{armenian:"Armeense nummering",bulletedTitle:"Eigenschappen lijst met opsommingstekens",circle:"Cirkel",decimal:"Cijfers (1, 2, 3, etc.)",decimalLeadingZero:"Cijfers beginnen met nul (01, 02, 03, etc.)",disc:"Schijf",georgian:"Georgische nummering (an, ban, gan, etc.)",lowerAlpha:"Kleine letters (a, b, c, d, e, etc.)",lowerGreek:"Grieks kleine letters (alpha, beta, gamma, etc.)",lowerRoman:"Romeins kleine letters (i, ii, iii, iv, v, etc.)",none:"Geen",notset:"<niet gezet>", -numberedTitle:"Eigenschappen genummerde lijst",square:"Vierkant",start:"Start",type:"Type",upperAlpha:"Hoofdletters (A, B, C, D, E, etc.)",upperRoman:"Romeinse hoofdletters (I, II, III, IV, V, etc.)",validateStartNumber:"Startnummer van de lijst moet een heel nummer zijn."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/no.js deleted file mode 100644 index f753bd6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","no",{armenian:"Armensk nummerering",bulletedTitle:"Egenskaper for punktmerket liste",circle:"Sirkel",decimal:"Tall (1, 2, 3, osv.)",decimalLeadingZero:"Tall, med førstesiffer null (01, 02, 03, osv.)",disc:"Disk",georgian:"Georgisk nummerering (an, ban, gan, osv.)",lowerAlpha:"Alfabetisk, små (a, b, c, d, e, osv.)",lowerGreek:"Gresk, små (alpha, beta, gamma, osv.)",lowerRoman:"Romertall, små (i, ii, iii, iv, v, osv.)",none:"Ingen",notset:"<ikke satt>",numberedTitle:"Egenskaper for nummerert liste", -square:"Firkant",start:"Start",type:"Type",upperAlpha:"Alfabetisk, store (A, B, C, D, E, osv.)",upperRoman:"Romertall, store (I, II, III, IV, V, osv.)",validateStartNumber:"Starten på listen må være et heltall."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pl.js deleted file mode 100644 index 85da585d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pl",{armenian:"Numerowanie armeńskie",bulletedTitle:"Właściwości list wypunktowanych",circle:"Koło",decimal:"Liczby (1, 2, 3 itd.)",decimalLeadingZero:"Liczby z początkowym zerem (01, 02, 03 itd.)",disc:"Okrąg",georgian:"Numerowanie gruzińskie (an, ban, gan itd.)",lowerAlpha:"Małe litery (a, b, c, d, e itd.)",lowerGreek:"Małe litery greckie (alpha, beta, gamma itd.)",lowerRoman:"Małe cyfry rzymskie (i, ii, iii, iv, v itd.)",none:"Brak",notset:"<nie ustawiono>", -numberedTitle:"Właściwości list numerowanych",square:"Kwadrat",start:"Początek",type:"Typ punktora",upperAlpha:"Duże litery (A, B, C, D, E itd.)",upperRoman:"Duże cyfry rzymskie (I, II, III, IV, V itd.)",validateStartNumber:"Listę musi rozpoczynać liczba całkowita."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js deleted file mode 100644 index 190c8937..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pt-br",{armenian:"Numeração Armêna",bulletedTitle:"Propriedades da Lista sem Numeros",circle:"Círculo",decimal:"Numeração Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Numeração Decimal com zeros (01, 02, 03, etc.)",disc:"Disco",georgian:"Numeração da Geórgia (an, ban, gan, etc.)",lowerAlpha:"Numeração Alfabética minúscula (a, b, c, d, e, etc.)",lowerGreek:"Numeração Grega minúscula (alpha, beta, gamma, etc.)",lowerRoman:"Numeração Romana minúscula (i, ii, iii, iv, v, etc.)", -none:"Nenhum",notset:"<não definido>",numberedTitle:"Propriedades da Lista Numerada",square:"Quadrado",start:"Início",type:"Tipo",upperAlpha:"Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)",upperRoman:"Numeração Romana maiúscula (I, II, III, IV, V, etc.)",validateStartNumber:"O número inicial da lista deve ser um número inteiro."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt.js deleted file mode 100644 index 2b0f85a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/pt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pt",{armenian:"Numeração armênia",bulletedTitle:"Bulleted List Properties",circle:"Círculo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disco",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"Nenhum",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Quadrado",start:"Iniciar",type:"Tipo",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ro.js deleted file mode 100644 index d76923bf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ro.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ro",{armenian:"Numerotare armeniană",bulletedTitle:"Proprietățile listei cu simboluri",circle:"Cerc",decimal:"Decimale (1, 2, 3, etc.)",decimalLeadingZero:"Decimale cu zero în față (01, 02, 03, etc.)",disc:"Disc",georgian:"Numerotare georgiană (an, ban, gan, etc.)",lowerAlpha:"Litere mici (a, b, c, d, e, etc.)",lowerGreek:"Litere grecești mici (alpha, beta, gamma, etc.)",lowerRoman:"Cifre romane mici (i, ii, iii, iv, v, etc.)",none:"Nimic",notset:"<nesetat>", -numberedTitle:"Proprietățile listei numerotate",square:"Pătrat",start:"Start",type:"Tip",upperAlpha:"Litere mari (A, B, C, D, E, etc.)",upperRoman:"Cifre romane mari (I, II, III, IV, V, etc.)",validateStartNumber:"Începutul listei trebuie să fie un număr întreg."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ru.js deleted file mode 100644 index 421fd606..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ru.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ru",{armenian:"Армянская нумерация",bulletedTitle:"Свойства маркированного списка",circle:"Круг",decimal:"Десятичные (1, 2, 3, и т.д.)",decimalLeadingZero:"Десятичные с ведущим нулём (01, 02, 03, и т.д.)",disc:"Окружность",georgian:"Грузинская нумерация (ани, бани, гани, и т.д.)",lowerAlpha:"Строчные латинские (a, b, c, d, e, и т.д.)",lowerGreek:"Строчные греческие (альфа, бета, гамма, и т.д.)",lowerRoman:"Строчные римские (i, ii, iii, iv, v, и т.д.)",none:"Нет", -notset:"<не указано>",numberedTitle:"Свойства нумерованного списка",square:"Квадрат",start:"Начиная с",type:"Тип",upperAlpha:"Заглавные латинские (A, B, C, D, E, и т.д.)",upperRoman:"Заглавные римские (I, II, III, IV, V, и т.д.)",validateStartNumber:"Первый номер списка должен быть задан обычным целым числом."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/si.js deleted file mode 100644 index c2253a52..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","si",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"කිසිවක්ම නොවේ",notset:"<යොදා >",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"වර්ගය",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sk.js deleted file mode 100644 index 817dab04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sk",{armenian:"Arménske číslovanie",bulletedTitle:"Vlastnosti odrážkového zoznamu",circle:"Kruh",decimal:"Číselné (1, 2, 3, atď.)",decimalLeadingZero:"Číselné s nulou (01, 02, 03, atď.)",disc:"Disk",georgian:"Gregoriánske číslovanie (an, ban, gan, atď.)",lowerAlpha:"Malé latinské (a, b, c, d, e, atď.)",lowerGreek:"Malé grécke (alfa, beta, gama, atď.)",lowerRoman:"Malé rímske (i, ii, iii, iv, v, atď.)",none:"Nič",notset:"<nenastavené>",numberedTitle:"Vlastnosti číselného zoznamu", -square:"Štvorec",start:"Začiatok",type:"Typ",upperAlpha:"Veľké latinské (A, B, C, D, E, atď.)",upperRoman:"Veľké rímske (I, II, III, IV, V, atď.)",validateStartNumber:"Začiatočné číslo číselného zoznamu musí byť celé číslo."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sl.js deleted file mode 100644 index f147fe2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sl",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sq.js deleted file mode 100644 index 586b7d40..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sq.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sq",{armenian:"Numërim armenian",bulletedTitle:"Karakteristikat e Listës me Pulla",circle:"Rreth",decimal:"Decimal (1, 2, 3, etj.)",decimalLeadingZero:"Decimal me zerro udhëheqëse (01, 02, 03, etj.)",disc:"Disk",georgian:"Numërim gjeorgjian (an, ban, gan, etj.)",lowerAlpha:"Të vogla alfa (a, b, c, d, e, etj.)",lowerGreek:"Të vogla greke (alpha, beta, gamma, etj.)",lowerRoman:"Të vogla romake (i, ii, iii, iv, v, etj.)",none:"Asnjë",notset:"<e pazgjedhur>",numberedTitle:"Karakteristikat e Listës me Numra", -square:"Katror",start:"Fillimi",type:"LLoji",upperAlpha:"Të mëdha alfa (A, B, C, D, E, etj.)",upperRoman:"Të mëdha romake (I, II, III, IV, V, etj.)",validateStartNumber:"Numri i fillimit të listës duhet të është numër i plotë."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js deleted file mode 100644 index df10d830..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sr-latn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr.js deleted file mode 100644 index 1864935a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sr",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sv.js deleted file mode 100644 index 8a5f9392..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sv",{armenian:"Armenisk numrering",bulletedTitle:"Egenskaper för punktlista",circle:"Cirkel",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal nolla (01, 02, 03, etc.)",disc:"Disk",georgian:"Georgisk numrering (an, ban, gan, etc.)",lowerAlpha:"Alpha gemener (a, b, c, d, e, etc.)",lowerGreek:"Grekiska gemener (alpha, beta, gamma, etc.)",lowerRoman:"Romerska gemener (i, ii, iii, iv, v, etc.)",none:"Ingen",notset:"<ej angiven>",numberedTitle:"Egenskaper för punktlista", -square:"Fyrkant",start:"Start",type:"Typ",upperAlpha:"Alpha versaler (A, B, C, D, E, etc.)",upperRoman:"Romerska versaler (I, II, III, IV, V, etc.)",validateStartNumber:"Listans startnummer måste vara ett heltal."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/th.js deleted file mode 100644 index 7ffb3ebd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/th.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","th",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tr.js deleted file mode 100644 index a19f7c73..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","tr",{armenian:"Ermenice sayılandırma",bulletedTitle:"Simgeli Liste Özellikleri",circle:"Daire",decimal:"Ondalık (1, 2, 3, vs.)",decimalLeadingZero:"Başı sıfırlı ondalık (01, 02, 03, vs.)",disc:"Disk",georgian:"Gürcüce numaralandırma (an, ban, gan, vs.)",lowerAlpha:"Küçük Alpha (a, b, c, d, e, vs.)",lowerGreek:"Küçük Greek (alpha, beta, gamma, vs.)",lowerRoman:"Küçük Roman (i, ii, iii, iv, v, vs.)",none:"Yok",notset:"<ayarlanmamış>",numberedTitle:"Sayılandırılmış Liste Özellikleri", -square:"Kare",start:"Başla",type:"Tipi",upperAlpha:"Büyük Alpha (A, B, C, D, E, vs.)",upperRoman:"Büyük Roman (I, II, III, IV, V, vs.)",validateStartNumber:"Liste başlangıcı tam sayı olmalıdır."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tt.js deleted file mode 100644 index 07fadad3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","tt",{armenian:"Armenian numbering",bulletedTitle:"Маркерлы тезмә үзлекләре",circle:"Түгәрәк",decimal:"Унарлы (1, 2, 3, ...)",decimalLeadingZero:"Ноль белән башланган унарлы (01, 02, 03, ...)",disc:"Диск",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"Һичбер",notset:"<билгеләнмәгән>",numberedTitle:"Numbered List Properties", -square:"Шакмак",start:"Башлау",type:"Төр",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ug.js deleted file mode 100644 index d278f60d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/ug.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ug",{armenian:"قەدىمكى ئەرمىنىيە تەرتىپ نومۇرى شەكلى",bulletedTitle:"تۈر بەلگە تىزىم خاسلىقى",circle:"بوش چەمبەر",decimal:"سان (1, 2, 3 قاتارلىق)",decimalLeadingZero:"نۆلدىن باشلانغان سان بەلگە (01, 02, 03 قاتارلىق)",disc:"تولدۇرۇلغان چەمبەر",georgian:"قەدىمكى جورجىيە تەرتىپ نومۇرى شەكلى (an, ban, gan قاتارلىق)",lowerAlpha:"ئىنگلىزچە كىچىك ھەرپ (a, b, c, d, e قاتارلىق)",lowerGreek:"گرېكچە كىچىك ھەرپ (alpha, beta, gamma قاتارلىق)",lowerRoman:"كىچىك ھەرپلىك رىم رەقىمى (i, ii, iii, iv, v قاتارلىق)", -none:"بەلگە يوق",notset:"‹تەڭشەلمىگەن›",numberedTitle:"تەرتىپ نومۇر تىزىم خاسلىقى",square:"تولدۇرۇلغان تۆت چاسا",start:"باشلىنىش نومۇرى",type:"بەلگە تىپى",upperAlpha:"ئىنگلىزچە چوڭ ھەرپ (A, B, C, D, E قاتارلىق)",upperRoman:"چوڭ ھەرپلىك رىم رەقىمى (I, II, III, IV, V قاتارلىق)",validateStartNumber:"تىزىم باشلىنىش تەرتىپ نومۇرى چوقۇم پۈتۈن سان پىچىمىدا بولۇشى لازىم"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/uk.js deleted file mode 100644 index de577116..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/uk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","uk",{armenian:"Вірменська нумерація",bulletedTitle:"Опції маркованого списку",circle:"Кільце",decimal:"Десяткові (1, 2, 3 і т.д.)",decimalLeadingZero:"Десяткові з нулем (01, 02, 03 і т.д.)",disc:"Кружечок",georgian:"Грузинська нумерація (an, ban, gan і т.д.)",lowerAlpha:"Малі лат. букви (a, b, c, d, e і т.д.)",lowerGreek:"Малі гр. букви (альфа, бета, гамма і т.д.)",lowerRoman:"Малі римські (i, ii, iii, iv, v і т.д.)",none:"Нема",notset:"<не вказано>",numberedTitle:"Опції нумерованого списку", -square:"Квадратик",start:"Почати з...",type:"Тип",upperAlpha:"Великі лат. букви (A, B, C, D, E і т.д.)",upperRoman:"Великі римські (I, II, III, IV, V і т.д.)",validateStartNumber:"Початковий номер списку повинен бути цілим числом."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/vi.js deleted file mode 100644 index bd56db2b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/vi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","vi",{armenian:"Số theo kiểu Armenian",bulletedTitle:"Thuộc tính danh sách không thứ tự",circle:"Khuyên tròn",decimal:"Kiểu số (1, 2, 3 ...)",decimalLeadingZero:"Kiểu số (01, 02, 03...)",disc:"Hình đĩa",georgian:"Số theo kiểu Georgian (an, ban, gan...)",lowerAlpha:"Kiểu abc thường (a, b, c, d, e...)",lowerGreek:"Kiểu Hy Lạp (alpha, beta, gamma...)",lowerRoman:"Số La Mã kiểu thường (i, ii, iii, iv, v...)",none:"Không gì cả",notset:"<không thiết lập>",numberedTitle:"Thuộc tính danh sách có thứ tự", -square:"Hình vuông",start:"Bắt đầu",type:"Kiểu loại",upperAlpha:"Kiểu ABC HOA (A, B, C, D, E...)",upperRoman:"Số La Mã kiểu HOA (I, II, III, IV, V...)",validateStartNumber:"Số bắt đầu danh sách phải là một số nguyên."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js deleted file mode 100644 index a27132cf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","zh-cn",{armenian:"传统的亚美尼亚编号方式",bulletedTitle:"项目列表属性",circle:"空心圆",decimal:"数字 (1, 2, 3, 等)",decimalLeadingZero:"0开头的数字标记(01, 02, 03, 等)",disc:"实心圆",georgian:"传统的乔治亚编号方式(an, ban, gan, 等)",lowerAlpha:"小写英文字母(a, b, c, d, e, 等)",lowerGreek:"小写希腊字母(alpha, beta, gamma, 等)",lowerRoman:"小写罗马数字(i, ii, iii, iv, v, 等)",none:"无标记",notset:"<没有设置>",numberedTitle:"编号列表属性",square:"实心方块",start:"开始序号",type:"标记类型",upperAlpha:"大写英文字母(A, B, C, D, E, 等)",upperRoman:"大写罗马数字(I, II, III, IV, V, 等)", -validateStartNumber:"列表开始序号必须为整数格式"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh.js deleted file mode 100644 index 566f075e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","zh",{armenian:"亞美尼亞數字",bulletedTitle:"項目符號清單屬性",circle:"圓圈",decimal:"小數點 (1, 2, 3, etc.)",decimalLeadingZero:"前綴 0 十位數字 (01, 02, 03, 等)",disc:"圓點",georgian:"喬治王時代數字 (an, ban, gan, 等)",lowerAlpha:"小寫字母 (a, b, c, d, e 等)",lowerGreek:"小寫希臘字母 (alpha, beta, gamma, 等)",lowerRoman:"小寫羅馬數字 (i, ii, iii, iv, v 等)",none:"無",notset:"<未設定>",numberedTitle:"編號清單屬性",square:"方塊",start:"開始",type:"類型",upperAlpha:"大寫字母 (A, B, C, D, E 等)",upperRoman:"大寫羅馬數字 (I, II, III, IV, V 等)", -validateStartNumber:"清單起始號碼須為一完整數字。"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/plugin.js deleted file mode 100644 index 22087218..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/liststyle/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.liststyle={requires:"dialog,contextmenu",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(a){if(!a.blockless){var b;b=new CKEDITOR.dialogCommand("numberedListStyle",{requiredContent:"ol",allowedContent:"ol{list-style-type}[start]"});b=a.addCommand("numberedListStyle",b);a.addFeature(b); -CKEDITOR.dialog.add("numberedListStyle",this.path+"dialogs/liststyle.js");b=new CKEDITOR.dialogCommand("bulletedListStyle",{requiredContent:"ul",allowedContent:"ul{list-style-type}"});b=a.addCommand("bulletedListStyle",b);a.addFeature(b);CKEDITOR.dialog.add("bulletedListStyle",this.path+"dialogs/liststyle.js");a.addMenuGroup("list",108);a.addMenuItems({numberedlist:{label:a.lang.liststyle.numberedTitle,group:"list",command:"numberedListStyle"},bulletedlist:{label:a.lang.liststyle.bulletedTitle,group:"list", -command:"bulletedListStyle"}});a.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;for(;a;){var b=a.getName();if("ol"==b)return{numberedlist:CKEDITOR.TRISTATE_OFF};if("ul"==b)return{bulletedlist:CKEDITOR.TRISTATE_OFF};a=a.getParent()}return null})}}};CKEDITOR.plugins.add("liststyle",CKEDITOR.plugins.liststyle)})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png deleted file mode 100644 index 4a8d2bfdabcc7271dde74ba441d11deb5adc5663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDbWC*5LY1m9|L%t&t(Bhu$2V) z1v7m9_51I?Q~B(yKoJ*D7sn8e>&XFui49F#OeC~TM2>NBAD(jbywmmB4AXs^Hw!g3 zrKK6vW(G_+FkzM$n~Q^*56=n#HEv_kCE{7?J&c=}8RCPb`s%g^=>g4S@O1TaS?83{ F1OV9DKgIw6 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png b/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png deleted file mode 100644 index b981bb5c6c40ef143fbd1dbd92e17c3471a6e635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDTx4|5LY1m9~)4vn;Q?5V=oEv z3ua*W{OkAMe;?PrIs+66_jGX#;kaJgvr+JX0T0vtsZoZl?5FrnGTCjc<BHaFJ}fW8 z;LLgbsN(LI`xM)SR!Q7kyF^}!b51Tp2xHq{nawBJBDy~aZaeM&Q!y>QM%Pf)^OZeA b(rxbAsq!4pRQ+B7tzhtU^>bP0l+XkKZctCS diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png deleted file mode 100644 index 55b5b5f949a60c8fabc63867fd7827fe33d0ab71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ!3HGLSWET+sX$K`#}En0)_zAW1_cfl(^voJ zzZIFXGf`1QjpGte_M{Gzw|<VPsj3gS9VgA7;`6|x<%`Id`RRxKs@QTTzTFhSCL>n- mC^o0`vu%>-E46n=xrM(kReto&c<T<J;S8RxelF{r5}E)?!Y+9L diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon.png b/platforms/android/assets/www/lib/ckeditor/plugins/magicline/images/icon.png deleted file mode 100644 index e063433632af33f66b95443d81e2548322a280c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ!3HGLSWET+DIZT4#}J9jtrHCS4j6DSpAY@_ z|JIt$-BVULU8qX3IKvruq^yTK;#VV&!H+)1bxFTvWnVDf+2Y9=P@1=-ZB=gj<u^+j iWiOQ_&#S-eWUjwP{mzbQn_mIVW$<+Mb6Mw<&;$Uo<uLgG diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js deleted file mode 100644 index 25c3dff2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("mathjax",function(d){var c,b=d.lang.mathjax;return{title:b.title,minWidth:350,minHeight:100,contents:[{id:"info",elements:[{id:"equation",type:"textarea",label:b.dialogInput,onLoad:function(){var a=this;if(!(CKEDITOR.env.ie&&8==CKEDITOR.env.version))this.getInputElement().on("keyup",function(){c.setValue("\\("+a.getInputElement().getValue()+"\\)")})},setup:function(a){this.setValue(CKEDITOR.plugins.mathjax.trim(a.data.math))},commit:function(a){a.setData("math","\\("+this.getValue()+ -"\\)")}},{id:"documentation",type:"html",html:'<div style="width:100%;text-align:right;margin:-8px 0 10px"><a class="cke_mathjax_doc" href="'+b.docUrl+'" target="_black" style="cursor:pointer;color:#00B2CE;text-decoration:underline">'+b.docLabel+"</a></div>"},!(CKEDITOR.env.ie&&8==CKEDITOR.env.version)&&{id:"preview",type:"html",html:'<div style="width:100%;text-align:center;"><iframe style="border:0;width:0;height:0;font-size:20px" scrolling="no" frameborder="0" allowTransparency="true" src="'+CKEDITOR.plugins.mathjax.fixSrc+ -'"></iframe></div>',onLoad:function(){var a=CKEDITOR.document.getById(this.domId).getChild(0);c=new CKEDITOR.plugins.mathjax.frameWrapper(a,d)},setup:function(a){c.setValue(a.data.math)}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png deleted file mode 100644 index 85b8e11df627e14ff43d101faa8c3b610c9bf615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmV;O1!DS%P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS00009a7bBm000|!000|!0iRgzQvd(}8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11sX|2K~z|U#g<=eQ&k+tzvrH{Ww-ZsEF~jNb-90rE}~<WWC-a% z*IQu0HKVdEB%;U?NtVci2441HVt68HFvC4mGg@9IiWc3FI64+Hg$EtYAOR$%$Hch| zH`C}w>u_za4{S|Wwys4dzqkAQ-TuCx^F8PE{zx<$#p4X_v8n?o$xXQ3?i&CqR!MI# z91g#l7XZLo0P9x?;JMtyLjY&aoS8d$@}!<jCP{XlQVLDe;({Qgm+OB2{(X{2BuFe4 zqZ1PoC6kkrCAzL>>T`2*)hhxxola^n7>Lj3Ln@V8RJ(KMj`{fU;}Au0Ifg|sGBN_c z-;Y=<wg6!CcsxR1U*EljcS!CnP!we=fJ;}dToJmux{ypJGqt;S??M#Cp96tFm(6CI z&Cw$OL;&RgD)GSXXUE6K$+2U{FgrVoR4Rqh(a~pyhK6o03os8+58&(J;bH#NsZ&U& zAGn@KBoK{8kxHe$i^t=;uU@?x&*y-mC@%u&85$Z=y1Tmp08>*_&B0*s%Y}EAyoQXi zZvixI-@g5?j*bpcN&x^o&qGlZa2)64dH%wV9Xm?%0WikC0pMzAX!xVPz8(NzwOSV) z#3dcbTER{Lec^D}<oElraG>JxI2dC{rBZ|Gbh_#C<;%I-k=w^RH#hfrG#bV9^mOaG zb?eUMbs%d6mjJxtcDw&>Z*R}!&1N%XSq8^(8X@HTu3fuKEA$B&42BP?tE*90S7*tt zt@uyK82bu9TVrEm^5DUPAmqXA6a)dXEQ3<IJDpB{*4o-?SfSNB0G<cXmz~VJ1=*n} zN(+FGL!l7u?d{EM$IQ$O7-P_N{d{F*Wou7QPcna}#ZmCLfH8Isz-wNwH{I6OmdT5v z2w9dv2-!O}HrA`EDqR(Td5B&B?JX@W`o4YpGI@)|0!fmf>w1f#D85w#n1=`gIJ|%V ze!aQ5Ig>9dD??RPRZ0+q!BqvAhxiD<TL%stz?Lmr005<>r8sfo1igO!`tD+SE%h}l z6ry`@aIhv4iM%O_B04)ev0=l8833XG1whlZ7DC7y8#iv8_W67kyWRdffJVmHNHKjL zX$v$>YbS)9wb^WAfk0r5-ERK{fU{U};1L{fyWMXSLVT*K{ul~{ssus!3BXRq*sq2B z-sABY6N$v@l+rH-1_q{zazN9x_W<~6YHDuu_xC?72touveWBt2FgrVYm=N-zuIo;q zKnGM+C9*8PPY5~UbUGuaPoH*BO2YuWjInzwHkc2W%Oz1t->s;qNFF_UGy)WG22@q0 zvMdJ(AxD~;ntlidgAPjRIRGygBfe+P9xKOjeO9a0+R)HY;`MqRzzPm{JRYN>C}#oe zJ#^^M_nn=cbpZSTIv8Wi&W73Ha=F$}N?+1--ETA+pS0O*a5x-E0GILtY}>ZYY&M(E z6GGgQB&8-MCh9yM&u=$x-h2T-q`-w!j^m!vb=^oQg`y~+lw$Md&BKhb__6>lmuoH0 z^A`yrTO~<CSy>sqcI_G_CnwjV$dR4nIGD|5R905PU@*XLw?mSoPZ?ua5<t_m^&H0y zP)avRk_1r{kxr*kUS5v!^73M|K?s4#WXjAC08m?7s{^>O@ca+}A><;Zbd##8;CVi? ziqg`&<6ps1TU&dZF*d#|fXQU4P*qjud7k9f{%u$+7C0P^PZsQ765!UYTQLAn{MX`H rv1lY)>JY90@aHOtk2A(bvlIUSmP*Mm4Sl`b00000NkvXXu0mjfAQg@n diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png deleted file mode 100644 index d25081be998163c28c17c6802c1a0246ca1534a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10z64XK~y-6rIS5q6JZ#~|96+RsYksbAb~_ua+BiJ1hE?OA(sou zP^br%l43=qb#f9y7e^PRqJsvkBnSpgF_3^@+QBJ0bqawDeP1YIQE5A5FeG=$<C1=* zQ3^iOJN%v>|L1vl1;!Zur)>L=Xf(PF;LK^71VPwdTU)z$Ot8GXd^VHG$N=DUI%#2H z!IC5i0MO}lu(!8|N~I!It5vbpYALF!ij1)?7-L|JfrxGui^Z;C7?emPC=!XRHyVwr zM0ACSt`X4<B6?RYm)q0R)8zB{&NIdi6L8MoOifJ<nWp(Fm&*ywW>cG(nE0`|xjD}m z>-MmMuIo2<cX!`!ZEc+c@a;g*le{(zW7x8+7x{c1L^MZ4ma3|E7-Q69^0TwEE&x9{ z=Qt+l0WW7}W`-=wdR8bD0N^$NQ&rW)Ba){luFxlWo=hf(Ez5dbDwP1>uFYo40{GI; zihny5=ln?^5O}003YM0ZP_Nf%5H~OZ0L0^Qmn2DvbUOVj7!2O$oPRyFAQp?MBO@b) zY&JXO_xtBK=j;89rfCnl-R|2HBj~z*NtWdgtE;P`-|wFv)EtY&!XA(3VWm>B9ZR5T z+U2pau}{fl@^>ngTB+4)J^;QWh(JUa6h*lg4u>t5%k^E@|4h2BM`T(4I6gi;y0fzb z(=<<vCI|xTb~_vn2MojbJUKae{UCv&C<U+AJ1UAI+-~=v)f|*0NeG2PEA4jsaETim l8*Kose|8>L3qXl;jz6ZS`h+Mt59|N{002ovPDHLkV1m^WEA{{Y diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/images/loader.gif b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/images/loader.gif deleted file mode 100644 index 3ffb1811f7c06f2b5da7cac82cda97839c10e177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmZ?wbhEHb<YC}p_{zY*!o<?j)N<t5kvFg2%$YaG$Is`^tvg@7ebLd<>FMh^bMDNS zPhWEKa-KYT^5@?l6El-H@7^p~wB*jcJAZ!tS+j1<l}lGj%1UgkY+Bk{Lc&6>T)QG8 zCo^Tzlr5XKq@<<P)Ya_SwP(t-DQ8ZdVW16A{Lk&@8WQa67~pE8XTZz|v_<hJ3nveQ z1cMI9MvylhSi=<5k|wM8F7`0&RQ3~3NbF`>`iN0>MoI|#<%jAA1C&H!&L<quU=lg> z)NzA?(xTQBgCCA;lUi5Y_L#}$w&YTJM2OV7i%Se2uuAlJEmUA&5U}8_PE}TfTE&QD z6<h3q1_OhM9%{}Dm6)8^WahEAb6BdhO7*BI7-sMtYYsnTI$^!^fwtR$B@#RW>dZoV zD$R|@CQR39sp9qItzk?KXUvpl7vT1D;$xCvW0VyX6q1*h;^&tPXP(9E>4?q77@&;_ zH*$EKA0D_M;pZUen!seKvYag-IO#%0Pt$Q_;Rjyp8u=d!M|iMJ&~v$Hx&6Kb1B39X zhAC3MPQr5hGA>eOo>}tjq2a>33e2feY<WTgf`YQ)>_WU@&R8vs2YK;F4V&{rhsz#j zJRZz$2A+Nj6Py)3S7h`|@>n8#gTc&m;gJLm9TjGdYJ&+nEem{B98PEukri^1;g<_# z6jl)AN=?sX%+8UJ>St#T&6Z*p5@MH<YVw>d)b0eclL<LkBODq7HY^Abb6&_=Fq22M zt#N_iN{h+tCmaP545ZvVjw%R>$h9sJ$P#c75bIF1nxMei#jsRp<+b-BJe=XdfoU08 dOgSM+El%vr(Hsm6LetobQ$2-KqJbW?1^`cR-){f_ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ar.js deleted file mode 100644 index 64212f69..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ar",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write your TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"تحميل",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ca.js deleted file mode 100644 index 33a353dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ca",{title:"Matemàtiques a TeX",button:"Matemàtiques",dialogInput:"Escriu el TeX aquí",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentació TeX",loading:"carregant...",pathName:"matemàtiques"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cs.js deleted file mode 100644 index e2e0b510..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","cs",{title:"Matematika v TeXu",button:"Matematika",dialogInput:"Zde napište TeXový kód",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentace k TeXu",loading:"Nahrává se...",pathName:"Matematika"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cy.js deleted file mode 100644 index bd919ba0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","cy",{title:"Mathemateg mewn TeX",button:"Math",dialogInput:"Ysgrifennwch eich TeX yma",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dogfennaeth TeX",loading:"llwytho...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/de.js deleted file mode 100644 index 5cf71687..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","de",{title:"Mathematik in Tex",button:"Rechnung",dialogInput:"Schreiben Sie hier in Tex",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Tex Dokumentation",loading:"lädt...",pathName:"rechnen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/el.js deleted file mode 100644 index affcd0e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","el",{title:"Μαθηματικά με τη γλώσσα TeX",button:"Μαθηματικά",dialogInput:"Γράψτε κώδικα TeX εδώ",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Τεκμηρίωση TeX",loading:"γίνεται φόρτωση...",pathName:"μαθηματικά"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js deleted file mode 100644 index d9f0cbde..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","en-gb",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write you TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"loading...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en.js deleted file mode 100644 index 9e66c845..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","en",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write your TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"loading...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/eo.js deleted file mode 100644 index 4aa7cb49..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","eo",{title:"Matematiko en TeX",button:"Matematiko",dialogInput:"Skribu vian TeX tien",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentado",loading:"estas ŝarganta",pathName:"matematiko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/es.js deleted file mode 100644 index 6ec9e4dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","es",{title:"Matemáticas en TeX",button:"Matemáticas",dialogInput:"Escribe tu TeX aquí",docUrl:"http://es.wikipedia.org/wiki/TeX",docLabel:"Documentación de TeX",loading:"cargando...",pathName:"matemáticas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fa.js deleted file mode 100644 index d638a840..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fa",{title:"ریاضیات در تک",button:"ریاضی",dialogInput:"فرمول خود را اینجا بنویسید",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"مستندسازی فرمول نویسی",loading:"بارگیری",pathName:"ریاضی"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fi.js deleted file mode 100644 index bd5140c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fi",{title:"Matematiikkaa TeX:llä",button:"Matematiikka",dialogInput:"Kirjoita TeX:iä tähän",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentaatio",loading:"lataa...",pathName:"matematiikka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fr.js deleted file mode 100644 index bf1cb479..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fr",{title:"Mathématiques au format TeX",button:"Math",dialogInput:"Saisir la formule TeX ici",docUrl:"http://fr.wikibooks.org/wiki/LaTeX/Math%C3%A9matiques",docLabel:"Documentation du format TeX",loading:"chargement...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/gl.js deleted file mode 100644 index 0657f1f9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","gl",{title:"Matemáticas en TeX",button:"Matemáticas",dialogInput:"Escriba o seu TeX aquí",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentación de TeX",loading:"cargando...",pathName:"matemáticas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/he.js deleted file mode 100644 index 9e5c21dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","he",{title:"מתמטיקה בTeX",button:"מתמטיקה",dialogInput:"כתוב את הTeX שלך כאן",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"תיעוד TeX",loading:"טוען...",pathName:"מתמטיקה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hr.js deleted file mode 100644 index 6e90bd5b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","hr",{title:"Matematika u TeXu",button:"Matematika",dialogInput:"Napiši svoj TeX ovdje",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentacija",loading:"učitavanje...",pathName:"matematika"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hu.js deleted file mode 100644 index 3ab4b748..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","hu",{title:"Matematika a TeX-ben",button:"Matek",dialogInput:"Írd a TeX-ed ide",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentáció",loading:"töltés...",pathName:"matek"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/it.js deleted file mode 100644 index a91094a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","it",{title:"Formule in TeX",button:"Formule",dialogInput:"Scrivere qui il proprio TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentazione TeX",loading:"caricamento…",pathName:"formula"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ja.js deleted file mode 100644 index 0141ecd7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ja",{title:"TeX形式の数式",button:"数式",dialogInput:"TeX形式の数式を入力してください",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeXの解説",loading:"読み込み中…",pathName:"math"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/km.js deleted file mode 100644 index d68d998f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","km",{title:"គណិត​វិទ្យា​ក្នុង TeX",button:"គណិត",dialogInput:"សរសេរ TeX របស់​អ្នក​នៅ​ទីនេះ",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"ឯកសារ​អត្ថបទ​ពី ​TeX",loading:"កំពុង​ផ្ទុក..",pathName:"គណិត"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nb.js deleted file mode 100644 index 7b3588e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","nb",{title:"Matematikk i TeX",button:"Matte",dialogInput:"Skriv TeX-koden her",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX-dokumentasjon",loading:"laster...",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nl.js deleted file mode 100644 index fe9cf316..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","nl",{title:"Wiskunde in TeX",button:"Wiskunde",dialogInput:"Typ hier uw TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentatie",loading:"laden...",pathName:"wiskunde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/no.js deleted file mode 100644 index 33e87aba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","no",{title:"Matematikk i TeX",button:"Matte",dialogInput:"Skriv TeX-koden her",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX-dokumentasjon",loading:"laster...",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pl.js deleted file mode 100644 index 70f2be53..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pl",{title:"Wzory matematyczne w TeX",button:"Wzory matematyczne",dialogInput:"Wpisz wyrażenie w TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentacja TeX",loading:"ładowanie...",pathName:"matematyka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js deleted file mode 100644 index 6b9620d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pt-br",{title:"Matemática em TeX",button:"Matemática",dialogInput:"Escreva seu TeX aqui",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentação TeX",loading:"carregando...",pathName:"Matemática"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt.js deleted file mode 100644 index 1f83fefa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pt",{title:"Matemáticas em TeX",button:"Matemática",dialogInput:"Escreva aqui o seu Tex",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentação TeX",loading:"a carregar ...",pathName:"matemática"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ro.js deleted file mode 100644 index 72c606cb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ro",{title:"Matematici in TeX",button:"Matematici",dialogInput:"Scrie TeX-ul aici",docUrl:"http://ro.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentatie TeX",loading:"încarcă...",pathName:"matematici"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ru.js deleted file mode 100644 index a48da75f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ru",{title:"Математика в TeX-системе",button:"Математика",dialogInput:"Введите здесь TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX документация",loading:"загрузка...",pathName:"мат."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sk.js deleted file mode 100644 index 1a54159d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sk",{title:"Matematika v TeX",button:"Matika",dialogInput:"Napíšte svoj TeX sem",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentácia TeX",loading:"načítavanie...",pathName:"matika"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sl.js deleted file mode 100644 index c8df95b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sl",{title:"Matematika v TeX",button:"Matematika",dialogInput:"Napišite svoj TeX tukaj",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentacija",loading:"nalaganje...",pathName:"matematika"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sv.js deleted file mode 100644 index 7508fef7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sv",{title:"Mattematik i TeX",button:"Matte",dialogInput:"Skriv din TeX här",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentation",loading:"laddar",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tr.js deleted file mode 100644 index a2925f17..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","tr",{title:"TeX ile Matematik",button:"Matematik",dialogInput:"TeX kodunuzu buraya yazın",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX yardım dökümanı",loading:"yükleniyor...",pathName:"matematik"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tt.js deleted file mode 100644 index 44003bdc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","tt",{title:"TeX'та математика",button:"Математика",dialogInput:"Биредә TeX форматында аңлатмагызны языгыз",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX турыдна документлар",loading:"йөкләнә...",pathName:"математика"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/uk.js deleted file mode 100644 index 77875f4e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","uk",{title:"Математика у TeX",button:"Математика",dialogInput:"Наберіть тут на TeX'у",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Документація про TeX",loading:"завантажується…",pathName:"математика"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/vi.js deleted file mode 100644 index 66961038..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","vi",{title:"Toán học bằng TeX",button:"Toán",dialogInput:"Nhập mã TeX ở đây",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Tài liệu TeX",loading:"đang nạp...",pathName:"toán"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js deleted file mode 100644 index ea9ad35e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","zh-cn",{title:"TeX 语法的数学公式编辑器",button:"数学公式",dialogInput:"在此编写您的 TeX 指令",docUrl:"http://zh.wikipedia.org/wiki/TeX",docLabel:"TeX 语法(可以参考维基百科自身关于数学公式显示方式的帮助)",loading:"正在加载...",pathName:"数字公式"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh.js deleted file mode 100644 index 84cdab1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","zh",{title:"以 TeX 表示數學",button:"數學",dialogInput:"請輸入 TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX 說明文件",loading:"載入中…",pathName:"數學"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/plugin.js deleted file mode 100644 index 44964b88..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/mathjax/plugin.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var h="http://cdn.mathjax.org/mathjax/2.2-latest/MathJax.js?config=TeX-AMS_HTML";CKEDITOR.plugins.add("mathjax",{lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,nb,nl,no,pl,pt,pt-br,ro,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",requires:"widget,dialog",icons:"mathjax",hidpi:!0,init:function(b){var c=b.config.mathJaxClass||"math-tex";b.widgets.add("mathjax",{inline:!0,dialog:"mathjax",button:b.lang.mathjax.button,mask:!0,allowedContent:"span(!"+c+")",styleToAllowedContentRules:function(a){a= -a.getClassesArray();if(!a)return null;a.push("!"+c);return"span("+a.join(",")+")"},pathName:b.lang.mathjax.pathName,template:'<span class="'+c+'" style="display:inline-block" data-cke-survive=1></span>',parts:{span:"span"},defaults:{math:"\\(x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}\\)"},init:function(){var a=this.parts.span.getChild(0);if(!a||a.type!=CKEDITOR.NODE_ELEMENT||!a.is("iframe"))a=new CKEDITOR.dom.element("iframe"),a.setAttributes({style:"border:0;width:0;height:0",scrolling:"no",frameborder:0, -allowTransparency:!0,src:CKEDITOR.plugins.mathjax.fixSrc}),this.parts.span.append(a);this.once("ready",function(){CKEDITOR.env.ie&&a.setAttribute("src",CKEDITOR.plugins.mathjax.fixSrc);this.frameWrapper=new CKEDITOR.plugins.mathjax.frameWrapper(a,b);this.frameWrapper.setValue(this.data.math)})},data:function(){this.frameWrapper&&this.frameWrapper.setValue(this.data.math)},upcast:function(a,b){if("span"==a.name&&a.hasClass(c)&&!(1<a.children.length||a.children[0].type!=CKEDITOR.NODE_TEXT)){b.math= -CKEDITOR.tools.htmlDecode(a.children[0].value);var d=a.attributes;d.style=d.style?d.style+";display:inline-block":"display:inline-block";d["data-cke-survive"]=1;a.children[0].remove();return a}},downcast:function(a){a.children[0].replaceWith(new CKEDITOR.htmlParser.text(CKEDITOR.tools.htmlEncode(this.data.math)));var b=a.attributes;b.style=b.style.replace(/display:\s?inline-block;?\s?/,"");""===b.style&&delete b.style;return a}});CKEDITOR.dialog.add("mathjax",this.path+"dialogs/mathjax.js");b.on("contentPreview", -function(a){a.data.dataValue=a.data.dataValue.replace(/<\/head>/,'<script src="'+(b.config.mathJaxLib?CKEDITOR.getUrl(b.config.mathJaxLib):h)+'"><\/script></head>')});b.on("paste",function(a){a.data.dataValue=a.data.dataValue.replace(RegExp("<span[^>]*?"+c+".*?</span>","ig"),function(a){return a.replace(/(<iframe.*?\/iframe>)/i,"")})})}});CKEDITOR.plugins.mathjax={};CKEDITOR.plugins.mathjax.fixSrc=CKEDITOR.env.gecko?"javascript:true":CKEDITOR.env.ie?"javascript:void((function(){"+encodeURIComponent("document.open();("+ -CKEDITOR.tools.fixDomain+")();document.close();")+"})())":"javascript:void(0)";CKEDITOR.plugins.mathjax.loadingIcon=CKEDITOR.plugins.get("mathjax").path+"images/loader.gif";CKEDITOR.plugins.mathjax.copyStyles=function(b,c){for(var a="color font-family font-style font-weight font-variant font-size".split(" "),e=0;e<a.length;e++){var d=a[e],g=b.getComputedStyle(d);g&&c.setStyle(d,g)}};CKEDITOR.plugins.mathjax.trim=function(b){var c=b.indexOf("\\(")+2,a=b.lastIndexOf("\\)");return b.substring(c,a)}; -CKEDITOR.plugins.mathjax.frameWrapper=CKEDITOR.env.ie&&8==CKEDITOR.env.version?function(b,c){b.getFrameDocument().write('<!DOCTYPE html><html><head><meta charset="utf-8"></head><body style="padding:0;margin:0;background:transparent;overflow:hidden"><span style="white-space:nowrap;" id="tex"></span></body></html>');return{setValue:function(a){var e=b.getFrameDocument(),d=e.getById("tex");d.setHtml(CKEDITOR.plugins.mathjax.trim(CKEDITOR.tools.htmlEncode(a)));CKEDITOR.plugins.mathjax.copyStyles(b,d); -c.fire("lockSnapshot");b.setStyles({width:Math.min(250,d.$.offsetWidth)+"px",height:e.$.body.offsetHeight+"px",display:"inline","vertical-align":"middle"});c.fire("unlockSnapshot")}}}:function(b,c){function a(){f=b.getFrameDocument();f.getById("preview")||(CKEDITOR.env.ie&&b.removeAttribute("src"),f.write('<!DOCTYPE html><html><head><meta charset="utf-8"><script type="text/x-mathjax-config">MathJax.Hub.Config( {showMathMenu: false,messageStyle: "none"} );function getCKE() {if ( typeof window.parent.CKEDITOR == \'object\' ) {return window.parent.CKEDITOR;} else {return window.parent.parent.CKEDITOR;}}function update() {MathJax.Hub.Queue([ \'Typeset\', MathJax.Hub, this.buffer ],function() {getCKE().tools.callFunction( '+ -m+" );});}MathJax.Hub.Queue( function() {getCKE().tools.callFunction("+n+');} );<\/script><script src="'+(c.config.mathJaxLib||h)+'"><\/script></head><body style="padding:0;margin:0;background:transparent;overflow:hidden"><span id="preview"></span><span id="buffer" style="display:none"></span></body></html>'))}function e(){k=!0;i=j;c.fire("lockSnapshot");d.setHtml(i);g.setHtml("<img src="+CKEDITOR.plugins.mathjax.loadingIcon+" alt="+c.lang.mathjax.loading+">");b.setStyles({height:"16px",width:"16px", -display:"inline","vertical-align":"middle"});c.fire("unlockSnapshot");f.getWindow().$.update(i)}var d,g,i,j,f=b.getFrameDocument(),l=!1,k=!1,n=CKEDITOR.tools.addFunction(function(){g=f.getById("preview");d=f.getById("buffer");l=!0;j&&e();CKEDITOR.fire("mathJaxLoaded",b)}),m=CKEDITOR.tools.addFunction(function(){CKEDITOR.plugins.mathjax.copyStyles(b,g);g.setHtml(d.getHtml());c.fire("lockSnapshot");b.setStyles({height:0,width:0});var a=Math.max(f.$.body.offsetHeight,f.$.documentElement.offsetHeight), -h=Math.max(g.$.offsetWidth,f.$.body.scrollWidth);b.setStyles({height:a+"px",width:h+"px"});c.fire("unlockSnapshot");CKEDITOR.fire("mathJaxUpdateDone",b);i!=j?e():k=!1});b.on("load",a);a();return{setValue:function(a){j=CKEDITOR.tools.htmlEncode(a);l&&!k&&e()}}}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png deleted file mode 100644 index 1a7551c2a88559a73da6980d1c92af98804a5059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%+1=B{F(l&f+VH!6!j2;U&Yd~;g?&ZKlvxtaE4BpqbR1*yPe^j| zF;EmV5OAE|Abw*XgZK&2?e~5%-22I-7B{ov;oQ!P-cc>vww070>wc@3^S|uYFV(#_ z-_Ch&{oFb|t$knZj|L3^K?y;N=Ls$gPKcUcV3=~PAXeN<^F`nHX`DNcTB-?i`uO`O z=&5#`QPo%)kZ%^abC=WJn=PxS>|~h#=iCvNcgrp>*t%7Sp}K>KWkt=eBhqW9?Q9VE z`9>$BbnBGr9~bIAy%1cdr+;zJzP4*p7j|7wGB`HDM`gmCS%+K~Gaiiaf2|YziM_RH z@0|0OKlk$9x_{gF+@F`5(*rh2gt$MeWo<cOEE%vd;*_4=t=5>nxSYISPwIVGuSoS; zHx;js3S_F9q_2CkwUzbOty_!C+1VKizWn_0qs5c+OQsu>LhFIOB~mIa*WRWxvwl&U zfByN~KYwaE{+!-juKsbRq=BMC&)2gtQDRBK!3@vi9)A^-=16dv(Q|xnp1zoO@y<DO zPp7?n`ps;wtqso!S1nd;vCk*idz2r`9NB69z4ny6&;dzjt(h!q*G_#_WLa%Ed+FV| zvQ?M6=X}oid|P^2p80(T?ibToPx>6wd-C~9R{8X}_wW1N>bzYp)C7t-WNTbMdg>I{ zRPCwKpDtg%c;a>d^C@|b3;+Bzx5%{19A|7;ygof$-DoP)^dglaeSK!ex!fLJF*ScG zguItN5a50Dt&vY*7yF@!oeLNRo^N<msQ+2;<lhRf?DK6W<T4JI#^&c9nKAQF|8@R@ zA}p%e)nZj<Iggx=Y<B9lI+ix)kMHAB^TheV*&!}RUkeGCZa;h|L;l0X)0+zug!E$= z7tNmZx1H0VGyU#A;|m*$dzB9v#7$>CXlGFO&+X$b-42VrZEKr;X5MJqb=BmbPQTL8 zc>7Bt1;-Rx9ddd$J4A^s5lC<;m}<0Tfv%DsOGX;o_oXaK-#+boATwi*OAN=A*}lzO z8N5qH=7e!?OcC0$$404GqW}8!!kbx@-<#yhSmagK1+BQ2_2chr@qg1!d!!pV-({?J z%<i3UU$-D;{o<(A2W3kvOJ&)gKYxDV>Z<=4J^YP%HTD1Hyu21HUY^II(Yjx5=f}0_ z5?5A*o_LwLfsgS&!}KL?B56sjKEQmYTH+c}l9E`GYL#4+3Zxi}3=EBR4a{_n3_=VI ztqjbq3{12QjI0a{zCBvziJ~DlKP5A*61Rr-{c>M{8YDqB1m~xflqVLYGL)B>>t*I; d7bhncr0V4trO$q6BL!5%;OXk;vd$@?2>@n}*7N`X diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png deleted file mode 100644 index 8cbe223059bd225aa00e2c14a376a4e8ec559a18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%xzN+aF(l&f+UaMrq{Bsy*FV4a(<vg@T%tUfi*dOLxAVck7gn?P zIb;NF$XsIQkagnL!P>?Xk*U&?Tnl`{ZnFGh^J8k$*~L9&%Y~3KA$R$0Y0vKIsob38 zwkb_TUcf{A?9Tng=WPEQhu^cQWNKjW(%f=QL$Kvd8e_7q=cI%+N26x{j9mWRRnzt0 z_n(_0mOS{av2+u2#Oc7@XOFuzSFLuPqcT&Gjp2|}<A+;YRop-P{kHq=-MfFbhdmBn zJW=uyivvTrX5F5;xjz*a{QPNrHjF!&r>97zspCPl+);xkU+>*(o8on2y1sei83Dil z{K-6TA18-e+dSzP*Eeea_u^x6)Y)aG$8t_g)!wPV#;|7VkwTx65|$5|+6QjEdL<qx z;`!-~<Tmz?udb@Szwh57!60Cz9u+hFe_7eH|0}O%xC<u#TzhoO?LP(2&*e`o`YETh z>GK!Oj+_&xywo}v8C*Pi7}tL6c5PB|Jo@p*iM56^G?L1*S4ZutoqcL;^!GJ}oA&O# zd(wriBV>JKwsqtMsimf;3Xj!odHslmF;8OC?yaG$*Xq}X{CIhcH*!}+;J(PHTN9>E z-5sy1V<66=;ko)WLqo~pO~*=FJk(B1<XB|d_nzNr%IQBfpO@9#Zq}IkuC0}+s%6`X z#P)5=Qzo0eug_s|SsIg8n(Mo7cZnxgceixkwG$kzzKW9BhL%f8RF3@p9h&fW`c_ju zyP644pQajm8U^{g&2Q9X_@%hVAm#nRW~~kP`jQt}h-LGL1<96vlbj*s^xLjZ;?u{U zpI24Hl_@$sG5KqG&Vg%@b?96Lhb`}1Y>&-1-ZMev^0`HcT#i#-y*MTLj6waSn1$!{ z15x+(7XOf*(YDvjrZZt0OUjq&T8(ojY}#XXGM+0zir3<_+D~u)!wYAfO^W=p^wtNJ zRO2m)a`k@y=f6~*C#ke}e+XxlRY9EUj3@fBO~nC+Z2lc9Yb>~R`tpJ=^X9MO-V#)? zuKRtZM<2J>{>r}Q=et(C%Z}S7RHDdq-BmB<LH7CP%=G4K2IlS$cA50|8>bwI>M=YL z*b=XyFkOHC>5yOlUWM{4&UnLmyzyLtN6*5086UpyF5kk(7ZDNTl4jF!E$Uy@?`h3x zldBdxUaHlUoY|<-ck}-J<JVsAUHY=i{@A~o9|Dgn4N8{zG4?FHdei1}uSUP=tI|C` ze_mPpyS{kq8Gn2Bq?y1RsaoP1QIe8al4_M)lnSI6j0_Bobq&mPjSNBz4Xq5!tqe@G z4UDV|48A>D=82*qH$NpatrE9}_Wg2Sff^)1HU#IVm6RtIr81P4m+NKbWfvzW7NqLs W7p2dBXCnnv#Ng@b=d#Wzp$Pyn?D$mx diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png deleted file mode 100644 index 2c8ef7fe6fc11399bdf90e5077965af2633799ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iV}z%RV~EA+-pPS|j|>D{;%`qp>Mqp$K&0j@qlJih1RvL={0SVc z8cG|h?bBpu&fH);Ez0lqx_7HKDQ~~c%OJRLmDa0W$Ey1c+qN3|3fJEMTw&8;nB=wL z`@Fk(?OVSoDeV$FXPJAuEHlBY;P$qT6RErJ&I_Ho)k3acB3WSK`D4c<UhRrIaPN2V z^-|^!f=(Q(x;h@rd0b#&z|*{J3PV7sR<^G1Wd)__%QDZ^-seB?vTARej=xKX;iRCX zS<A%zdpZ)<vi>OEe?R=-)AC3M7dzh`!%g?!Gx{mEgci(8?(yaeSgEC{I`6#tV+*$A zGq<(RoQ+d?a!OORj_G-^D)Z#YmGi`JJ#7@4BOf$VpJ!iI_3;O@*_UoBdMw+$UM{54 zIdtQ-O*eDGY75RKu2r>Plh5<%(f-$e*7u0BX{sJ8JTrA_d{3c_r{=;{Gb-o3+|^fZ ze?F=t_PEV?hCi$dW>-Fh{d;2!40zQN*NBpo#FA92<f2p{#b9J$Xsl~su4`ZtVrXt< zU<^ds21Zr}2EI#n10w}VLvDUbW?Cg~4K_cSj{r4Df@}!RPb(=;EJ|f4FE7{2%*!rL bPAo{(%P&fw{mw=TsEEPS)z4*}Q$iB}dJy8a diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage.png b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/icons/newpage.png deleted file mode 100644 index 8e18c8a2dcc3510f9fe6b6e33f8dd05620c846e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2~o(V~EA+-pPS^%?3Pe_0}SxQx}B9EI4m_m~X4}n)cg<za}t; zcy(8FI3>ML^k&n&`ptWq)0;mv8ynYbz45l}#V)?tXW6oa1n;~r?|IxIp&YXH$&8s7 zx9Psx6{Zx$n|$VHfkndp`-@j;30z#yDA+i&&}#02RjV(S-nAB-dwW~0(MqF77JVFw z7rs`xaxkvqQabdp!p7>kUA@nORnMmgwIw=uan1=`mf6&yu#`oxu|wfl$LXg@jC=0p zZQqzVt6a&-+?P4|%y-deY%U=ep1sa7;yKLm;IKsSr#aohUfqZL)viTxKUn*|ddU<o z;njO)<ev+@cZBEtUS359ms1+tjU772K5L}08QWhitedecvvI$hqf3XO-m9?c4_?`& z-EwDy*L%oShdymtbx5N5Z5el3omI?r(;ma8%+*RKX4l^TU)jsr*m0nG{#?=j6Ta{3 znUvg9aBlCPiPsKUhA;cb8guWh$@hlbIAG|jmbgZgq$HN4S|t~y0x1R~14Cn719M#i zlMq95D+6O7(l#)%GBEI6vKtsPNE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|* gUS?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr0N&W?+W-In diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/af.js deleted file mode 100644 index 2fd4a604..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","af",{toolbar:"Nuwe bladsy"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ar.js deleted file mode 100644 index 04f45c5c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ar",{toolbar:"صفحة جديدة"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bg.js deleted file mode 100644 index b40fbf54..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bg",{toolbar:"Нова страница"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bn.js deleted file mode 100644 index aaedacbe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bn",{toolbar:"নতুন পেজ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bs.js deleted file mode 100644 index f8a0c44e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bs",{toolbar:"Novi dokument"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ca.js deleted file mode 100644 index 4efb6079..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ca",{toolbar:"Nova pàgina"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cs.js deleted file mode 100644 index 02960680..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","cs",{toolbar:"Nová stránka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cy.js deleted file mode 100644 index 09e8b6fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","cy",{toolbar:"Tudalen Newydd"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/da.js deleted file mode 100644 index 22d0d6b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","da",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/de.js deleted file mode 100644 index 8d323f87..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","de",{toolbar:"Neue Seite"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/el.js deleted file mode 100644 index 7f989b1a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","el",{toolbar:"Νέα Σελίδα"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-au.js deleted file mode 100644 index 6e38a28b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-au",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-ca.js deleted file mode 100644 index 327aa5d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-ca",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-gb.js deleted file mode 100644 index 3f7ab3e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-gb",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en.js deleted file mode 100644 index 4402b73d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eo.js deleted file mode 100644 index 671a107d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","eo",{toolbar:"Nova Paĝo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/es.js deleted file mode 100644 index ca54ae0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","es",{toolbar:"Nueva Página"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/et.js deleted file mode 100644 index 59a58061..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","et",{toolbar:"Uus leht"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eu.js deleted file mode 100644 index 82808efd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","eu",{toolbar:"Orrialde Berria"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fa.js deleted file mode 100644 index 6986ba6d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fa",{toolbar:"برگهٴ تازه"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fi.js deleted file mode 100644 index cc1e63df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fi",{toolbar:"Tyhjennä"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fo.js deleted file mode 100644 index 778091e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fo",{toolbar:"Nýggj síða"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js deleted file mode 100644 index de7bb951..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fr-ca",{toolbar:"Nouvelle page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr.js deleted file mode 100644 index 2de51702..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fr",{toolbar:"Nouvelle page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gl.js deleted file mode 100644 index 96b7ea77..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","gl",{toolbar:"Páxina nova"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gu.js deleted file mode 100644 index f4c3306c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","gu",{toolbar:"નવુ પાનું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/he.js deleted file mode 100644 index 460262b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","he",{toolbar:"דף חדש"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hi.js deleted file mode 100644 index afed2e28..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hi",{toolbar:"नया पेज"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hr.js deleted file mode 100644 index fc09d5af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hr",{toolbar:"Nova stranica"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hu.js deleted file mode 100644 index 6053528b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hu",{toolbar:"Új oldal"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/id.js deleted file mode 100644 index 391bdad6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","id",{toolbar:"Halaman Baru"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/is.js deleted file mode 100644 index cee7f357..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","is",{toolbar:"Ný síða"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/it.js deleted file mode 100644 index d484977e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","it",{toolbar:"Nuova pagina"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ja.js deleted file mode 100644 index 3954e55b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ja",{toolbar:"新しいページ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ka.js deleted file mode 100644 index ee1bd799..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ka",{toolbar:"ახალი გვერდი"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/km.js deleted file mode 100644 index 0dcae481..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","km",{toolbar:"ទំព័រ​ថ្មី"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ko.js deleted file mode 100644 index 3ac6b6b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ko",{toolbar:"새 문서"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ku.js deleted file mode 100644 index b5d99596..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ku",{toolbar:"پەڕەیەکی نوێ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lt.js deleted file mode 100644 index a9572d6f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","lt",{toolbar:"Naujas puslapis"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lv.js deleted file mode 100644 index d05d3900..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","lv",{toolbar:"Jauna lapa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mk.js deleted file mode 100644 index 0b4261c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","mk",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mn.js deleted file mode 100644 index 7ea8f845..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","mn",{toolbar:"Шинэ хуудас"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ms.js deleted file mode 100644 index a6544940..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ms",{toolbar:"Helaian Baru"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nb.js deleted file mode 100644 index 7d8addd9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","nb",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nl.js deleted file mode 100644 index 20ab5057..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","nl",{toolbar:"Nieuwe pagina"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/no.js deleted file mode 100644 index 551cb365..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","no",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pl.js deleted file mode 100644 index c2dd7686..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pl",{toolbar:"Nowa strona"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt-br.js deleted file mode 100644 index 31120f06..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pt-br",{toolbar:"Novo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt.js deleted file mode 100644 index 556a89b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pt",{toolbar:"Nova Página"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ro.js deleted file mode 100644 index 87336458..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ro",{toolbar:"Pagină nouă"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ru.js deleted file mode 100644 index bdac86ef..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ru",{toolbar:"Новая страница"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/si.js deleted file mode 100644 index 166e5505..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","si",{toolbar:"නව පිටුවක්"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sk.js deleted file mode 100644 index 2ff850fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sk",{toolbar:"Nová stránka"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sl.js deleted file mode 100644 index b8bdbdb3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sl",{toolbar:"Nova stran"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sq.js deleted file mode 100644 index eb508027..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sq",{toolbar:"Faqe e Re"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js deleted file mode 100644 index 1758d5c4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sr-latn",{toolbar:"Nova stranica"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr.js deleted file mode 100644 index 9289d01f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sr",{toolbar:"Нова страница"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sv.js deleted file mode 100644 index ce4099d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sv",{toolbar:"Ny sida"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/th.js deleted file mode 100644 index f1647f27..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","th",{toolbar:"สร้างหน้าเอกสารใหม่"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tr.js deleted file mode 100644 index afba1bd6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","tr",{toolbar:"Yeni Sayfa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tt.js deleted file mode 100644 index 2c9e06ab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","tt",{toolbar:"Яңа бит"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ug.js deleted file mode 100644 index 739429ab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ug",{toolbar:"يېڭى بەت"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/uk.js deleted file mode 100644 index 518a63ac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","uk",{toolbar:"Нова сторінка"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/vi.js deleted file mode 100644 index 16dffe6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","vi",{toolbar:"Trang mới"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js deleted file mode 100644 index 9868d6b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","zh-cn",{toolbar:"新建"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh.js deleted file mode 100644 index cd365f40..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","zh",{toolbar:"新增網頁"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/newpage/plugin.js deleted file mode 100644 index c5d88b96..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/newpage/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("newpage",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"newpage,newpage-rtl",hidpi:!0,init:function(a){a.addCommand("newpage",{modes:{wysiwyg:1,source:1},exec:function(b){var a=this;b.setData(b.config.newpage_html||"",function(){b.focus();setTimeout(function(){b.fire("afterCommandExec",{name:"newpage", -command:a});b.selectionChange()},200)})},async:!0});a.ui.addButton&&a.ui.addButton("NewPage",{label:a.lang.newpage.toolbar,command:"newpage",toolbar:"document,20"})}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png deleted file mode 100644 index 4a5418cbfc805cbcca559085cb20cee329128e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmV+>1=;$EP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00citL_t(o!_Ak^YgAVh$3OSJ`{pH? z)Jy`6$w-U3X^j;Vk~XWLAT?OEE(-l43N;F@q|4&Mf)QPrjnQtbU9<~n7m`4W8{4>O zYH1V$_Lqo4CNq;a@8^BDi+M8|e`RVO*aMeYoHzG;?>XP|z2}OXmoD)tO}^6T{|5j{ z2$9WB#$a9sKwB=CS@6UdwALg^(lQvewXZLe1ZZQZ`97s;m0A#>lcc5p2|#CpAhpuf ztJZ^ZnJA81%fP1-6YCCYfGCc+S1Msk$%|Me((ju9{8}wD0D<q5JSX)+2&9xKDKXIG ziVDMU-2eb0t%;%t%+vG}LZB>*4f#A>`8+yFC{-%BzK`;KKQjPf5Re#yc??7&c%ieC z-u`~X&Yc4IqB1*s%nw7<ojZ3jDS=KB%27nER>P!aSQWgl4>3HP11@aZw(Vm_sbfM2 z)ZE-$rfT^6^fZa%AS~-q@QoW0gM(ez_BVU>?%ieO^CVh>G1*ITkhb5d;6p>3L@xKk zq5b=J6^ljul&l6&zfMinyT+KNk^xwjg%koBQoWX62!v%}x3^>4Hidk?5q!YT=fC@K z-@Z3GJ3Fa)9#IrETTyKv7=W~fwIHDEx&U<L^K>{4mXxjejll~7DxQZ@ir(H{#L&=K zN1^cTf${M|E|(+leWEBL*1D+`${HJ6rG(X)84KXGJ$s(1kZby9XDww}h~eRnI(vG) zJTN})NGXZJu%7ltm!z3f13PvA5GM&G&m&CR^7XA->27aFr6+9FA9)_wHo)lc;GpBW zF1At#Auz_ElcZTj0jS^R=T{N&*7P(04;B}nNzk?Yw=Y~kDTOiSr_WEEnECqh<=q>5 zd##R+4y2Uzo70$P37*=-3q!mYsN-6GHwdWIc{2Lh@#F8GI(2GpadB~Fd3l*I4C@lC zb+ZIw{@l5g!~$vCsJ6CxN`0RsikhmnmcP*j*fv^gqDqC4!-qcs&McKmx8K>meZ!V5 zTl(8NI=EjhbK~Sm>+hu{L~`xgqYa*DJ7dfvZC}Hm7=s%GlvY-7Q!WIR3hzx!>;t|6 zR{D#@<^E#vt!f-IKRIdrv$T}`JW!sQvF?{jgkebR`vm1OqeqVH1g-$xZ*Javvl2z` z{&D`i^`KfseQ@yL`lA{{5Xb!W@F9+EBZWXniE<q1>f-w3<S(N~kB$OY{=9p4<n57> zAFI_WT5BX)v)*MMTcW`ksNV;UgHtGQeRA?1Fa~_TFgLfmTrSrEL{Y?gR~*O0>F<-a z3dHHtE^r7q6Kahy2IZ#Gx?T(77|-+S!{`%3NdtuF?&ikSR3e0!P>usqq81hwG64`L z2^G)7bzSr`#&Tg<SW;ruRT88`2!Sxhyv%#zxpwQ~MWJ&!Op6bm%;y0wy>wbN_4C=Y z*}Tn!z{=(7N-0}Emul<j$?o`R|Nocw=D&`sn@HS6*$Dsu03~!qSaf7zbY(hYa%Ew3 zWdJfTF*7YNHZ3wRR539+FgH3dG%GMNIxsNy;-*Oe001R)MObuXVRU6WZEs|0W_bWI zFflVNFg7hRFjO%yIxsgnFf=PLGCD9Yhrb^60000PbVXQnQ*UN;cVTj60C#tHE@^IS cb7Ns}WiD@WXPfRk8UO$Q07*qoM6N<$f>rcl9RL6T diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png deleted file mode 100644 index 8d3930bbeb58bc2dd4cbb6a2735c06f094a33ac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcmV+u1?>8XP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00b;aL_t(o!_Ak^YZPZ3#y{^n?__q9 z>}FT6YSfE|K(U2{2)(o@ksho+S__pTl>P_eLHsXDqJ<tB5HEs<=28U7A!?8wV%J8i zDN3<9#BQu1Br!X)vorI)Zx6G(O%v0^xM<(&Gc(_3p6~O0<~!oy)vLVCBj0NE{{sQF zm74^B5O0=%0Hl;Sj)N4UWh6FDKuSrw=TXe%XwPJD-n0TzO7iXP<Oc?HODeyNfB@_| z7Ye|YlH;dO(_Jj$Dn%<aP%C>YfW#P#F<85niZO;-7!n2nx>W?Elyqb=6!Uo;DOvJ; zUidzV)@w;vOB~0<aSX<^pgbr?N(!Bw<PIJB1~_N$-Lvx9GZrhAf03}(Vyq>q)d<57 z?KrI=AcVkEioN^ypPiYS>J|qMd~Hjmh*c!4F$6)tpXD-@xj7suThjup#c0jDJw5d7 z-hFE9=FJ_VxA&x-oLmB$BoeJzTwG-O!Go5jr?jNz3d4}@?ruIkdi0=ZYa17ReY@Y; zv4cWqC#o)YElFBgyRHD~=*4kNSgleh6!`qaiT8iJe*GuW*Y}B?ocs-IS+o|iSsq@x zB&^oZFlgNyTBq^QNXlkPZh$LDXFSoGIF6|aK{lJ^<gsIWuZ@o07JYr6*}Hdd8*52C zk9;;u*7KT4sEr}0)mZX<0J=IlX!krEDK~|uK_o<Kv^rC3ElMd)963_BHaa>g`uo4C zj*pKdT9aER375yl9Dv;6!>@#^hLg3{Xk*Y?V~k1XJxS>A?e)fQ-1s1=)kfktX8XQ< z6th`W{S6XhSg2Ns!Vut<@n#FGwXi~kAPD&D`E&insZ+OZjg8&;<H{A1B;om!Coi3X z$CobyyfWTwfzdjZUu!Cr3Nte^mG6g#rw$Jcd<@)w;rl<V_niQ!M$vz|eLY<KJ~G0d zZQJNSe_rqG>LLsRrl+T8A5KlZ*j6m|0B1@UFMj9d^Ei$Jam>mo5JDhb7nRARl7}HC zj++U(5w04tM^VJW!UD79^5fZZxd7||j^DX(;kuX4<7P5+WU~}IJL&Mebd>7qiB)6Q zXy;~dWq~M;nVXxV=DI)6mdoz}3&2McLqqqyt}dKR2IaaGb2+-!arst{(ps~;yv)vB zyKX-!l|BT11&&P&4wk(_0p)oJDUm|pxh_5Z{p{Vo9Z#v&tYlhimMRq<l}ZPJYrvNi zgM)svczsU*5Y}SrMzsxTUzdQjmN<>cZ-KKDLqld|@zp0u5|TKkH6LS8NQvWl{4zXz z##&3JSj2JNwZ*MP8$-2P#Sa1!wWW=IEde0}vaOA_#sj5XBdsOPbl>-R_Vg*i{CqRX zUS9#yS!II_M{CXe{5&=cTe=TyT1R6H(FSR^l_NI$cWkZ2L=j0CqNC`apm|dYG`!*} zh1;Uy0Dl8L4M|MY_Z2Y!001R)MObuXVRU6WV{&C-bY%cCFflVNFg7hRFjO%yIxsgn zFf=PLGCD9Y_Tr{V0000bbVXQnWMOn=I&E)cX=Zr<GB7bSEig7MGB8vzF*-0eIxsXV zFfuwYFo(Y$^#A|>8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1002ov JPDHLkV1kGjN)!M9 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png deleted file mode 100644 index b5b342b09ff2db88762d15ae357535ee7e4bdc80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW1pvsV~EA+-buE3N{#}p@dq1brHCmqF>OhSY2<jaTHr0?H>ugb zc*<U+9QG~GKai%t+Yx_|BeUwxWuNcG49ydI-fFH~vMT87^{eZ>mtEF8C2?~1R|n0n zPZOWZ%qjkGZ$I-%_b1Vx?>#QCaLDF;F5~jVDpWx!UYH>w`=|u7pySpkR!@uP0zJnc z``^!9do*jSlK{(#>#qa66nUH{9I4yyZZOkl-PxlV+ZS0r7dURXNyk~DEx^n1T<`ul z#rBSurhGK<<<5{jP`v!Iq9+T(tW=W>6Dfg-`3!Mxi!V9{uJ1Upx?_)2vX9{X)B1n? zn-4x%cs0v0yOwRj8IQDUQ6eAr#$@wO+Wofdcm3WtWzR{gBVIk){&9EB=9>*q$|u$D zzWZ)}+UAos=g;>T<@FrQF=IYC;mP~B_21R|l1~&^{3)5ZN#}5l-SMKGQ#85~dK~xP z=V!2S3;g1I>+QF8hDj$r%N&0!m^tfI-uC9LV)v>;v_v~NT9#;j?(IJ6G}li(W(y-j zhsRG_k4Y?Bqu$oMK6`8*qh)qj%68Y)oxtc)Epd$~Nl7e8wMs5Z1yT$~28PDE2Ijg3 zCLxCARtCmEq-|hiWnkdDWH&G>ku>Dyr(~v8;?`jEllcfxgCxj?;QX|b^2DN4hVt@q hz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RYi=0#pD1 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png deleted file mode 100644 index 5280a6e97a8b7b01684a309160b06ac0631ba83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW3i`;V~EA+-bwzeq#PxV)Zeu|)4?n$TWGj|@w(iBr61XLx=-8b zzHVZS!fEz{u0<^kKhjsTP2@3N);x1%&b&^2o3k|m-HTqXTEF`AnlSBo(#br&Y8CGm zZ54Yib8crEleoEOM0V%n8796Pul<XE@F=Bc;VP{)TU9)piv4=$2^=@v8^@o_Q#tSP zUUd$pw9S%{(*)Zd-nH=w4YhcFk1=2MWHtYR3Y)O)xBpH)ytQM={urUiX`DY8S|(Y{ z_4D}To1kJi*N@d;{&{=G^{Tb(QNBhS7*ZoAEz_KQ@`>n&e}zxw#Vg+b)s<rqaXnbJ zJ9Yp4`l(;m>UgXC-LvCKW!>!g=hLm`_OUe|6!)C3y7$i8GLNj-hicC&Y>cFO<y2~? zd`a4T^TQ9}tR{u?#n)bc6{^@Ap;NatN_UZl(rKf%!-|0-cX==BO!rm^yl#3e>X5;b z`|mI3ZJ(;b=_qhVH>kjJ&$`bK3o3+e-PQVkd(*CUnq5o_F1tK1Kk}OKh=sr08DN~K zmbgZgq$HN4S|t~y0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKts*NE&kUQ!>*k zaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr E07sJW9{>OV diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif deleted file mode 100644 index 8d1cffd64af72709b1180b3b0a51bbfe30bcb8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54 zcmZ?wbhEHb<Y!=IXkcWRIdkU!|Nj+#vM@3*Ff!;c00Bsbfr;0puk*m${3$UTHfcIC HGFSrukc<xG diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/af.js deleted file mode 100644 index 3db5e2e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","af",{alt:"Bladsy-einde",toolbar:"Bladsy-einde invoeg"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ar.js deleted file mode 100644 index 6c795815..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ar",{alt:"فاصل الصفحة",toolbar:"إدخال صفحة جديدة"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bg.js deleted file mode 100644 index 32ea86b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bg",{alt:"Разделяне на страници",toolbar:"Вмъкване на нова страница при печат"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bn.js deleted file mode 100644 index 69bcc5d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bn",{alt:"Page Break",toolbar:"পেজ ব্রেক"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bs.js deleted file mode 100644 index e33eb612..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bs",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ca.js deleted file mode 100644 index 8d1732ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ca",{alt:"Salt de pàgina",toolbar:"Insereix salt de pàgina"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cs.js deleted file mode 100644 index c2753103..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","cs",{alt:"Konec stránky",toolbar:"Vložit konec stránky"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cy.js deleted file mode 100644 index b3f86a44..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","cy",{alt:"Toriad Tudalen",toolbar:"Mewnosod Toriad Tudalen i Argraffu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/da.js deleted file mode 100644 index 206f3a63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","da",{alt:"Sideskift",toolbar:"Indsæt sideskift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/de.js deleted file mode 100644 index 06449421..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","de",{alt:"Seitenumbruch einfügen",toolbar:"Seitenumbruch einfügen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/el.js deleted file mode 100644 index 1b9c8728..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","el",{alt:"Αλλαγή Σελίδας",toolbar:"Εισαγωγή Τέλους Σελίδας για Εκτύπωση"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js deleted file mode 100644 index ca24e8e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-au",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js deleted file mode 100644 index d4731567..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-ca",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js deleted file mode 100644 index d17f8b0f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-gb",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en.js deleted file mode 100644 index 4b680ef1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eo.js deleted file mode 100644 index cb664749..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","eo",{alt:"Paĝavanco",toolbar:"Enmeti Paĝavancon por Presado"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/es.js deleted file mode 100644 index 17379550..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","es",{alt:"Salto de página",toolbar:"Insertar Salto de Página"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/et.js deleted file mode 100644 index 463b200d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","et",{alt:"Lehevahetuskoht",toolbar:"Lehevahetuskoha sisestamine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eu.js deleted file mode 100644 index 42c24112..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","eu",{alt:"Orrialde-jauzia",toolbar:"Txertatu Orrialde-jauzia Inprimatzean"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fa.js deleted file mode 100644 index c8b8e186..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fa",{alt:"شکستن صفحه",toolbar:"گنجاندن شکستگی پایان برگه"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fi.js deleted file mode 100644 index 5dc52bd6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fi",{alt:"Sivunvaihto",toolbar:"Lisää sivunvaihto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fo.js deleted file mode 100644 index ba9b9dca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fo",{alt:"Síðuskift",toolbar:"Ger síðuskift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js deleted file mode 100644 index e5ec2329..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fr-ca",{alt:"Saut de page",toolbar:"Insérer un saut de page à l'impression"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr.js deleted file mode 100644 index 941c0b16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fr",{alt:"Saut de page",toolbar:"Saut de page"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gl.js deleted file mode 100644 index fd239f3f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","gl",{alt:"Quebra de páxina",toolbar:"Inserir quebra de páxina"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gu.js deleted file mode 100644 index cd6a24e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","gu",{alt:"નવું પાનું",toolbar:"ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/he.js deleted file mode 100644 index e5b8124e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","he",{alt:"שבירת דף",toolbar:"הוספת שבירת דף"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hi.js deleted file mode 100644 index 940a28fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hi",{alt:"पेज ब्रेक",toolbar:"पेज ब्रेक इन्सर्ट् करें"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hr.js deleted file mode 100644 index 6f86601d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hr",{alt:"Prijelom stranice",toolbar:"Ubaci prijelom stranice"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hu.js deleted file mode 100644 index 6b9fd0e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hu",{alt:"Oldaltörés",toolbar:"Oldaltörés beillesztése"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/id.js deleted file mode 100644 index 71865adb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","id",{alt:"Halaman Istirahat",toolbar:"Sisip Halaman Istirahat untuk Pencetakan "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/is.js deleted file mode 100644 index 27f20878..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","is",{alt:"Page Break",toolbar:"Setja inn síðuskil"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/it.js deleted file mode 100644 index 1308ec6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","it",{alt:"Interruzione di pagina",toolbar:"Inserisci interruzione di pagina per la stampa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ja.js deleted file mode 100644 index cc1574f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ja",{alt:"改ページ",toolbar:"印刷の為に改ページ挿入"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ka.js deleted file mode 100644 index 6c999ff4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ka",{alt:"გვერდის წყვეტა",toolbar:"გვერდის წყვეტა ბეჭდვისთვის"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/km.js deleted file mode 100644 index ab157e3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","km",{alt:"បំបែក​ទំព័រ",toolbar:"បន្ថែម​ការ​បំបែក​ទំព័រ​មុន​បោះពុម្ព"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ko.js deleted file mode 100644 index c83c5e63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ko",{alt:"패이지 나누기",toolbar:"인쇄시 페이지 나누기 삽입"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ku.js deleted file mode 100644 index d9897842..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ku",{alt:"پشووی پەڕە",toolbar:"دانانی پشووی پەڕە بۆ چاپکردن"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lt.js deleted file mode 100644 index 5879e3ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","lt",{alt:"Puslapio skirtukas",toolbar:"Įterpti puslapių skirtuką"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lv.js deleted file mode 100644 index d594489b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","lv",{alt:"Lapas pārnesums",toolbar:"Ievietot lapas pārtraukumu drukai"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mk.js deleted file mode 100644 index 5fdce2f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","mk",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mn.js deleted file mode 100644 index 272ffaf7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","mn",{alt:"Page Break",toolbar:"Хуудас тусгаарлагч оруулах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ms.js deleted file mode 100644 index e0988eec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ms",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nb.js deleted file mode 100644 index 15f45eeb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","nb",{alt:"Sideskift",toolbar:"Sett inn sideskift for utskrift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nl.js deleted file mode 100644 index 5c05b168..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","nl",{alt:"Pagina-einde",toolbar:"Pagina-einde invoegen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/no.js deleted file mode 100644 index ec64c6bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","no",{alt:"Sideskift",toolbar:"Sett inn sideskift for utskrift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pl.js deleted file mode 100644 index 79861f98..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pl",{alt:"Wstaw podział strony",toolbar:"Wstaw podział strony"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js deleted file mode 100644 index 31d256d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pt-br",{alt:"Quebra de Página",toolbar:"Inserir Quebra de Página"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt.js deleted file mode 100644 index 17ed211a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pt",{alt:"Quebra de página",toolbar:"Inserir Quebra de Página"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ro.js deleted file mode 100644 index 91833bac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ro",{alt:"Page Break",toolbar:"Inserează separator de pagină (Page Break)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ru.js deleted file mode 100644 index 621682c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ru",{alt:"Разрыв страницы",toolbar:"Вставить разрыв страницы для печати"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/si.js deleted file mode 100644 index a232df64..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","si",{alt:"පිටු බිදුම",toolbar:"මුද්‍රණය සඳහා පිටු බිදුමක් ඇතුලත් කරන්න"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sk.js deleted file mode 100644 index b465e98f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sk",{alt:"Zalomenie strany",toolbar:"Vložiť oddeľovač stránky pre tlač"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sl.js deleted file mode 100644 index d07e9040..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sl",{alt:"Prelom Strani",toolbar:"Vstavi prelom strani"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sq.js deleted file mode 100644 index 3b570e03..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sq",{alt:"Thyerja e Faqes",toolbar:"Vendos Thyerje Faqeje për Shtyp"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js deleted file mode 100644 index 55877bac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sr-latn",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr.js deleted file mode 100644 index 9c6d9aff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sr",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sv.js deleted file mode 100644 index a2210ceb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sv",{alt:"Sidbrytning",toolbar:"Infoga sidbrytning för utskrift"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/th.js deleted file mode 100644 index 55a25317..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","th",{alt:"ตัวแบ่งหน้า",toolbar:"แทรกตัวแบ่งหน้า Page Break"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tr.js deleted file mode 100644 index d5e64a52..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","tr",{alt:"Sayfa Sonu",toolbar:"Sayfa Sonu Ekle"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tt.js deleted file mode 100644 index df0ae8fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","tt",{alt:"Бит бүлгече",toolbar:"Бастыру өчен бит бүлгечен өстәү"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ug.js deleted file mode 100644 index 10404349..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ug",{alt:"بەت ئايرىغۇچ",toolbar:"بەت ئايرىغۇچ قىستۇر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/uk.js deleted file mode 100644 index 0abba674..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","uk",{alt:"Розрив Сторінки",toolbar:"Вставити розрив сторінки"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/vi.js deleted file mode 100644 index 5787cb65..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","vi",{alt:"Ngắt trang",toolbar:"Chèn ngắt trang"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js deleted file mode 100644 index 39ec7add..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","zh-cn",{alt:"分页符",toolbar:"插入打印分页符"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh.js deleted file mode 100644 index 9b5a14c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","zh",{alt:"換頁",toolbar:"插入換頁符號以便列印"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/plugin.js deleted file mode 100644 index f9a7c3df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pagebreak/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function e(a){return{"aria-label":a,"class":"cke_pagebreak",contenteditable:"false","data-cke-display-name":"pagebreak","data-cke-pagebreak":1,style:"page-break-after: always",title:a}}CKEDITOR.plugins.add("pagebreak",{requires:"fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"pagebreak,pagebreak-rtl", -hidpi:!0,onLoad:function(){var a=("background:url("+CKEDITOR.getUrl(this.path+"images/pagebreak.gif")+") no-repeat center center;clear:both;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;padding:0;height:5px;cursor:default;").replace(/;/g," !important;");CKEDITOR.addCss("div.cke_pagebreak{"+a+"}")},init:function(a){a.blockless||(a.addCommand("pagebreak",CKEDITOR.plugins.pagebreakCmd),a.ui.addButton&&a.ui.addButton("PageBreak",{label:a.lang.pagebreak.toolbar,command:"pagebreak", -toolbar:"insert,70"}),CKEDITOR.env.webkit&&a.on("contentDom",function(){a.document.on("click",function(b){b=b.data.getTarget();b.is("div")&&b.hasClass("cke_pagebreak")&&a.getSelection().selectElement(b)})}))},afterInit:function(a){function b(f){CKEDITOR.tools.extend(f.attributes,e(a.lang.pagebreak.alt),!0);f.children.length=0}var c=a.dataProcessor,g=c&&c.dataFilter,c=c&&c.htmlFilter,h=/page-break-after\s*:\s*always/i,i=/display\s*:\s*none/i;c&&c.addRules({attributes:{"class":function(a,b){var c=a.replace("cke_pagebreak", -"");if(c!=a){var d=CKEDITOR.htmlParser.fragment.fromHtml('<span style="display: none;">&nbsp;</span>').children[0];b.children.length=0;b.add(d);d=b.attributes;delete d["aria-label"];delete d.contenteditable;delete d.title}return c}}},{applyToAll:!0,priority:5});g&&g.addRules({elements:{div:function(a){if(a.attributes["data-cke-pagebreak"])b(a);else if(h.test(a.attributes.style)){var c=a.children[0];c&&("span"==c.name&&i.test(c.attributes.style))&&b(a)}}}})}});CKEDITOR.plugins.pagebreakCmd={exec:function(a){var b= -a.document.createElement("div",{attributes:e(a.lang.pagebreak.alt)});a.insertElement(b)},context:"div",allowedContent:{div:{styles:"!page-break-after"},span:{match:function(a){return(a=a.parent)&&"div"==a.name&&a.styles&&a.styles["page-break-after"]},styles:"display"}},requiredContent:"div{page-break-after}"}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/panelbutton/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/panelbutton/plugin.js deleted file mode 100644 index 18adde8c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/panelbutton/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("panelbutton",{requires:"button",onLoad:function(){function e(c){var a=this._;a.state!=CKEDITOR.TRISTATE_DISABLED&&(this.createPanel(c),a.on?a.panel.hide():a.panel.showBlock(this._.id,this.document.getById(this._.id),4))}CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){var a=c.panel||{};delete c.panel;this.base(c);this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.block={attributes:a.attributes};this.hasArrow=a.toolbarRelated= -!0;this.click=e;this._={panelDefinition:a}},statics:{handler:{create:function(c){return new CKEDITOR.ui.panelButton(c)}}},proto:{createPanel:function(c){var a=this._;if(!a.panel){var f=this._.panelDefinition,e=this._.panelDefinition.block,g=f.parent||CKEDITOR.document.getBody(),d=this._.panel=new CKEDITOR.ui.floatPanel(c,g,f),f=d.addBlock(a.id,e),b=this;d.onShow=function(){b.className&&this.element.addClass(b.className+"_panel");b.setState(CKEDITOR.TRISTATE_ON);a.on=1;b.editorFocus&&c.focus();if(b.onOpen)b.onOpen()}; -d.onHide=function(d){b.className&&this.element.getFirst().removeClass(b.className+"_panel");b.setState(b.modes&&b.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);a.on=0;if(!d&&b.onClose)b.onClose()};d.onEscape=function(){d.hide(1);b.document.getById(a.id).focus()};if(this.onBlock)this.onBlock(d,f);f.onHide=function(){a.on=0;b.setState(CKEDITOR.TRISTATE_OFF)}}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler)}}); -CKEDITOR.UI_PANELBUTTON="panelbutton"; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/pastefromword/filter/default.js b/platforms/android/assets/www/lib/ckeditor/plugins/pastefromword/filter/default.js deleted file mode 100644 index 899ed21b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/pastefromword/filter/default.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function y(a){for(var a=a.toUpperCase(),c=z.length,b=0,f=0;f<c;++f)for(var d=z[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function A(a){for(var a=a.toUpperCase(),c=B.length,b=1,f=1;0<a.length;f*=c)b+=B.indexOf(a.charAt(a.length-1))*f,a=a.substr(0,a.length-1);return b}var C=CKEDITOR.htmlParser.fragment.prototype,o=CKEDITOR.htmlParser.element.prototype;C.onlyChild=o.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};o.removeAnyChildWithName= -function(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};o.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};C.firstChild=o.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};o.addStyle=function(a,c,b){var f="";if("string"==typeof c)f+=a+":"+c+";";else{if("object"== -typeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+":"+a[d]+";");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(b?[f,a]:[a,f]).join(";");this.attributes.style=a.replace(/^;+|;(?=;)/g,"")};o.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf("$")&&this[b][a]&&(c[b]=1);return c};var H=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i, -D=/^(?:\b0[^\s]*\s*){1,4}$/,x={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},z=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],B="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=0,t=null,w,E=CKEDITOR.plugins.pastefromword= -{utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element("cke:listbullet");b.attributes={"cke:listsymbol":a[0]};b.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName("cke:listbullet"))&&b.length&& -(b=b[0]))return a.name="cke:li",c.style&&(c.style=E.filters.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!s&&(null!==t&&a>t)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]= -1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,c){var c="number"==typeof c?c:1,b=a.attributes,f;switch(b.type){case "a":f= -"lower-alpha";break;case "1":f="decimal"}for(var d=a.children,e,h=0;h<d.length;h++)if(e=d[h],e.name in CKEDITOR.dtd.$listItem){var j=e.attributes,g=e.children,m=g[g.length-1];m.name in CKEDITOR.dtd.$list&&(a.add(m,h+1),--g.length||d.splice(h--,1));e.name="cke:li";b.start&&!h&&(j.value=b.start);E.filters.stylesFilter([["tab-stops",null,function(a){(a=a.split(" ")[1].match(H))&&(t=CKEDITOR.tools.convertToPx(a[0]))}],1==c?["mso-list",null,function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==w&& -(j["cke:reset"]=1);w=a}]:null])(j.style);j["cke:indent"]=c;j["cke:listtype"]=a.name;j["cke:list-style-type"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,h).concat(e.children).concat(d.slice(h+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b["cke:list"]=1},assembleList:function(a){for(var c=a.children,b,f,d,e,h,j,a=[],g,m,i,l,k,p,n=0;n<c.length;n++)if(b=c[n],"cke:li"==b.name)if(b.name="li",f=b.attributes,i=(i=f["cke:listsymbol"])&& -i.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),l=k=p=null,f["cke:ignored"])c.splice(n--,1);else{f["cke:reset"]&&(j=e=h=null);d=Number(f["cke:indent"]);d!=e&&(m=g=null);if(i){if(m&&x[m][g].test(i[1]))l=m,k=g;else for(var q in x)for(var u in x[q])if(x[q][u].test(i[1]))if("ol"==q&&/alpha|roman/.test(u)){if(g=/roman/.test(u)?y(i[1]):A(i[1]),!p||g<p)p=g,l=q,k=u}else{l=q;k=u;break}!l&&(l=i[2]?"ol":"ul")}else l=f["cke:listtype"]||"ol",k=f["cke:list-style-type"];m=l;g=k||("ol"==l?"decimal":"disc");k&&k!=("ol"==l? -"decimal":"disc")&&b.addStyle("list-style-type",k);if("ol"==l&&i){switch(k){case "decimal":p=Number(i[1]);break;case "lower-roman":case "upper-roman":p=y(i[1]);break;case "lower-alpha":case "upper-alpha":p=A(i[1])}b.attributes.value=p}if(j){if(d>e)a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),h.add(j);else{if(d<e){e-=d;for(var r;e--&&(r=j.parent);)j=r.parent}j.add(b)}c.splice(n--,1)}else a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),c[n]=j;h=b;e=d}else j&&(j=e=h=null);for(n=0;n<a.length;n++)if(j= -a[n],q=j.children,g=g=void 0,u=j.children.length,r=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=j.attributes,!c.exec(g.style)){for(h=0;h<u;h++)if(g=q[h],g.attributes.value&&Number(g.attributes.value)==h+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]==r||!r)r=g[1];else{r=null;break}if(r){for(h=0;h<u;h++)g=q[h].attributes,g.style&&(g.style=e([["list-style-type"]])(g.style)||"");j.addStyle("list-style-type",r)}}w=t=s=null},falsyFilter:function(){return!1}, -stylesFilter:function(a,c){return function(b,f){var d=[];(b||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();"font-family"==e&&(g=g.replace(/["']/g,""));for(var m,i,l,k=0;k<a.length;k++)if(a[k]&&(b=a[k][0],m=a[k][1],i=a[k][2],l=a[k][3],e.match(b)&&(!m||g.match(m)))){e=l||e;c&&(i=i||g);"function"==typeof i&&(i=i(g,f,e));i&&i.push&&(e=i[0],i=i[1]);"string"==typeof i&&d.push([e,i]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]= -d[e].join(":");return d.length?d.join(";")+";":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f))}:function(){}},styleMigrateFilter:function(a,c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),h={};h[c]=f;b(a,h)(e);e.children=d.children;d.children=[e];e.filter= -function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,h=e.falsyFilter,j=e.stylesFilter,g=e.elementMigrateFilter,m=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),i=this.utils.createListBulletMarker,l=e.flattenList,k=e.assembleList,p=this.utils.isListBulletIndicator,n=this.utils.isContainingOnlySpaces, -q=this.utils.resolveList,u=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},r=this.utils.getStyleComponents,t=this.utils.listDtdParents,o=!1!==d.pasteFromWordRemoveFontStyles,s=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren(c);k(a)},elements:{"^":function(a){var c;CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var v=a.name||"",e=a.attributes;v in f&&e.style&&(e.style=j([[/^(:?width|height)$/,null, -u]])(e.style)||"");if(v.match(/h\d/)){a.filterChildren(c);if(q(a))return;g(d["format_"+v])(a)}else if(v in b.$inline)a.filterChildren(c),n(a)&&delete a.name;else if(-1!=v.indexOf(":")&&-1==v.indexOf("cke")){a.filterChildren(c);if("v:imagedata"==v){if(v=a.attributes["o:href"])a.attributes.src=v;a.name="img";return}delete a.name}v in t&&(a.filterChildren(c),k(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],c={};a&& -(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,b,F){for(var b=b.split(","),a=b.length,d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,b,d){b=b||"*";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=F:c[b]=F)})}),e.applyStyleFilter=function(a){var b=c["*"]?"*":a.name,d=a.attributes&&a.attributes["class"];b in c&&(b=c[b],"object"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])|| -a.getStyle("mso-list")){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!n(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren(c);q(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):g(d["format_"+(d.enterMode==CKEDITOR.ENTER_P?"p":"div")])(a))},div:function(a){var c=a.onlyChild();if(c&&"table"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,b);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element("div"); -c.addStyle("clear","both");a.add(c);delete a.name}},td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:l,ul:l,dl:l,font:function(a){if(p(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;"font"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes),d&&e.addStyle(d),delete a.name):(d=(d||"").split(";"),b.color&&("#000000"!=b.color&&d.push("color:"+b.color),delete b.color),b.face&&(d.push("font-family:"+b.face),delete b.face),b.size&&(d.push("font-size:"+ -(3<b.size?"large":3>b.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=i(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style= -j([["line-height"],[/^font-family$/,null,!o?m(d.font_style,"family"):null],[/^font-size$/,null,!o?m(d.fontSize_style,"size"):null],[/^color$/,null,!o?m(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?m(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript), -a:function(a){a=a.attributes;a.href&&a.href.match(/^file:\/\/\/[\S]+#/i)&&(a.href=a.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left": -"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"], -["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":h,bgcolor:h,valign:s?h:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),i(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0], -(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:h}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&& -(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi,"$1<span>$2</span>$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){alert(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js deleted file mode 100644 index f41e86d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("placeholder",function(a){var b=a.lang.placeholder,a=a.lang.common.generalTab;return{title:b.title,minWidth:300,minHeight:80,contents:[{id:"info",label:a,title:a,elements:[{id:"name",type:"text",style:"width: 100%;",label:b.name,"default":"",required:!0,validate:CKEDITOR.dialog.validate.regex(/^[^\[\]\<\>]+$/,b.invalidName),setup:function(a){this.setValue(a.data.name)},commit:function(a){a.setData("name",this.getValue())}}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png deleted file mode 100644 index 0b7abcec8aec3fc61ed2038fb90bc74b8bde31e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1775 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 RJQ@H1002ovPDHLkV1oC?Fk%1z diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png deleted file mode 100644 index cb12b481452f7a2e84747fc8a17122aaf00c975d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<6}=3#}JFtt&{g=y><|2-9J@CCp_y;#}d!vX5OsJ5|7jkRs}zm z{KQr{ZOY3}EXOi=HdU)nIOWOmuhU@K237Cf+jrjbxUN{9kSLjU&ayf!Ok*j7$K@$+ z%T7NmSa9aAbX($u43h$xcDKch4XP~{t_F&9PM<E$nlS4bXM;df+<Nt#+yBx&)W&Nr zEm|5P*QWSt`i%3>vv$S=UHiRneb3!I_5@bPgnfJWuAH>8YS&#oet!NEE7@(g*K#!- zU|DlFuYGFj%xUQoYz%+v=7+6reO|fddiJr$hTFGqx3RVT_~VC%0Lv|N?eoQ})-ZTZ zQds)r-#@tq1D>5bcP1Lmykeu-#pLZ(nG`l_*;daT>%1qa#KgtTV~{xhI8a-|*{d`6 zc8-~J+Gfe-gAF>TCHUI6-m*Dg9~L0OIxY2L)>a0fue!Ur-@SYH<IkTf3_+*z`BxR% z$aOxRaWTV1#C6BI(^s#GGISqp+Pr!5ebG1HtGgCG`1Na+&3T}T>(|2<X&f@>`LEsa zI6~Zad9dxHO+VfFeJ)=)r|!Av;FKWKYp-T`Yi>NX<auS%)~LU415F!V?Y*1FeY~*b z+^-)$7W@f_kB@)!^XJZMDYMjqyp~M4`ZbK<Y?|=GDVNmt?B5^l8ko`Ws(N+9^XJcZ zJ?FRKG2#n1Rrdp?0o4-Mh?11Vl2ohYqEsNoU}RuutZQJdYhV&$Xl`X-3`E)nMpgy} zzDsrk(+84<-29Zxv`X9>Y<@By0cwy0*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%k SosASw5re0zpUXO@geCwotTW^Q diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ar.js deleted file mode 100644 index 2ca7673e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ar",{title:"خصائص الربط الموضعي",toolbar:"الربط الموضعي",name:"اسم الربط الموضعي",invalidName:"لا يمكن ترك الربط الموضعي فارغا و لا أن يحتوي على الرموز التالية [, ], <, >",pathName:"الربط الموضعي"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/bg.js deleted file mode 100644 index 78bd6649..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","bg",{title:"Настройки на контейнера",toolbar:"Нов контейнер",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ca.js deleted file mode 100644 index f4115f16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ca",{title:"Propietats del marcador de posició",toolbar:"Marcador de posició",name:"Nom del marcador de posició",invalidName:"El marcador de posició no pot estar en blanc ni pot contenir cap dels caràcters següents: [,],<,>",pathName:"marcador de posició"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cs.js deleted file mode 100644 index 3c24a677..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","cs",{title:"Vlastnosti vyhrazeného prostoru",toolbar:"Vytvořit vyhrazený prostor",name:"Název vyhrazeného prostoru",invalidName:"Vyhrazený prostor nesmí být prázdný či obsahovat následující znaky: [, ], <, >",pathName:"Vyhrazený prostor"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cy.js deleted file mode 100644 index 55022779..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","cy",{title:"Priodweddau'r Daliwr Geiriau",toolbar:"Daliwr Geiriau",name:"Enw'r Daliwr Geiriau",invalidName:"Dyw'r daliwr geiriau methu â bod yn wag ac na all gynnyws y nodau [, ], <, > ",pathName:"daliwr geiriau"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/da.js deleted file mode 100644 index dcbee5b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","da",{title:"Egenskaber for pladsholder",toolbar:"Opret pladsholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/de.js deleted file mode 100644 index be828cda..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","de",{title:"Platzhalter Einstellungen",toolbar:"Platzhalter erstellen",name:"Platzhalter Name",invalidName:"Der Platzhalter darf nicht leer sein und folgende Zeichen nicht enthalten: [, ], <, >",pathName:"Platzhalter"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/el.js deleted file mode 100644 index af6b7526..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","el",{title:"Ιδιότητες Υποκαθιστόμενου Κειμένου",toolbar:"Δημιουργία Υποκαθιστόμενου Κειμένου",name:"Όνομα Υποκαθιστόμενου Κειμένου",invalidName:"Το υποκαθιστόμενου κειμένο πρέπει να μην είναι κενό και να μην έχει κανέναν από τους ακόλουθους χαρακτήρες: [, ], <, >",pathName:"υποκαθιστόμενο κείμενο"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js deleted file mode 100644 index 38006937..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","en-gb",{title:"Placeholder Properties",toolbar:"Placeholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of the following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en.js deleted file mode 100644 index d91d35e0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","en",{title:"Placeholder Properties",toolbar:"Placeholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eo.js deleted file mode 100644 index 7027a1ed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","eo",{title:"Atributoj de la rezervita spaco",toolbar:"Rezervita Spaco",name:"Nomo de la rezervita spaco",invalidName:"La rezervita spaco ne povas esti malplena kaj ne povas enteni la sekvajn signojn : [, ], <, >",pathName:"rezervita spaco"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/es.js deleted file mode 100644 index 1a9162d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","es",{title:"Propiedades del Marcador de Posición",toolbar:"Crear Marcador de Posición",name:"Nombre del Marcador de Posición",invalidName:"El marcador de posición no puede estar vacío y no puede contener ninguno de los siguientes caracteres: [, ], <, >",pathName:"marcador de posición"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/et.js deleted file mode 100644 index f6f3dac6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","et",{title:"Kohahoidja omadused",toolbar:"Kohahoidja loomine",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eu.js deleted file mode 100644 index 663ac7a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","eu",{title:"Leku-marka Aukerak",toolbar:"Leku-marka sortu",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fa.js deleted file mode 100644 index 967e55d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fa",{title:"ویژگی‌های محل نگهداری",toolbar:"ایجاد یک محل نگهداری",name:"نام مکان نگهداری",invalidName:"مکان نگهداری نمی‌تواند خالی باشد و همچنین نمی‌تواند محتوی نویسه‌های مقابل باشد: [, ], <, >",pathName:"مکان نگهداری"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fi.js deleted file mode 100644 index 5c3e1562..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fi",{title:"Paikkamerkin ominaisuudet",toolbar:"Luo paikkamerkki",name:"Paikkamerkin nimi",invalidName:"Paikkamerkki ei voi olla tyhjä eikä sisältää seuraavia merkkejä: [, ], <, >",pathName:"paikkamerkki"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js deleted file mode 100644 index e803e71a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fr-ca",{title:"Propriétés de l'espace réservé",toolbar:"Créer un espace réservé",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr.js deleted file mode 100644 index b4c39c95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fr",{title:"Propriétés de l'Espace réservé",toolbar:"Créer l'Espace réservé",name:"Nom de l'espace réservé",invalidName:"L'espace réservé ne peut pas être vide ni contenir l'un de ses caractères : [, ], <, >",pathName:"espace réservé"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/gl.js deleted file mode 100644 index e4fff775..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","gl",{title:"Propiedades do marcador de posición",toolbar:"Crear un marcador de posición",name:"Nome do marcador de posición",invalidName:"O marcador de posición non pode estar baleiro e non pode conter ningún dos caracteres seguintes: [, ], <, >",pathName:"marcador de posición"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/he.js deleted file mode 100644 index 5202f509..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","he",{title:"מאפייני שומר מקום",toolbar:"צור שומר מקום",name:"שם שומר מקום",invalidName:"שומר מקום לא יכול להיות ריק ולא יכול להכיל את הסימנים: [, ], <, >",pathName:"שומר מקום"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hr.js deleted file mode 100644 index 866a110e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","hr",{title:"Svojstva rezerviranog mjesta",toolbar:"Napravi rezervirano mjesto",name:"Ime rezerviranog mjesta",invalidName:"Rezervirano mjesto ne može biti prazno niti može sadržavati ijedan od sljedećih znakova: [, ], <, >",pathName:"rezervirano mjesto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hu.js deleted file mode 100644 index a8e58e71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","hu",{title:"Helytartó beállítások",toolbar:"Helytartó készítése",name:"Helytartó neve",invalidName:"A helytartó nem lehet üres, és nem tartalmazhatja a következő karaktereket:[, ], <, > ",pathName:"helytartó"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/id.js deleted file mode 100644 index c22f138e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","id",{title:"Properti isian sementara",toolbar:"Buat isian sementara",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/it.js deleted file mode 100644 index c4ade199..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","it",{title:"Proprietà segnaposto",toolbar:"Crea segnaposto",name:"Nome segnaposto",invalidName:"Il segnaposto non può essere vuoto e non può contenere nessuno dei seguenti caratteri: [, ], <, >",pathName:"segnaposto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ja.js deleted file mode 100644 index c1ed5b5f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ja",{title:"プレースホルダのプロパティ",toolbar:"プレースホルダを作成",name:"プレースホルダ名",invalidName:"プレースホルダは空欄にできません。また、[, ], <, > の文字は使用できません。",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/km.js deleted file mode 100644 index 0ae3e81b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","km",{title:"លក្ខណៈ Placeholder",toolbar:"បង្កើត Placeholder",name:"ឈ្មោះ Placeholder",invalidName:"Placeholder មិន​អាច​ទទេរ ហើយក៏​មិន​អាច​មាន​តួ​អក្សរ​ទាំង​នេះ​ទេ៖ [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ko.js deleted file mode 100644 index 2974ee2c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ko",{title:"플레이스홀도 속성",toolbar:"플레이스홀더 생성",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ku.js deleted file mode 100644 index 8f62811f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ku",{title:"خاسیەتی شوێن هەڵگر",toolbar:"درووستکردنی شوێن هەڵگر",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/lv.js deleted file mode 100644 index b2ba800e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","lv",{title:"Viettura uzstādījumi",toolbar:"Izveidot vietturi",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nb.js deleted file mode 100644 index b379e52a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","nb",{title:"Egenskaper for plassholder",toolbar:"Opprett plassholder",name:"Navn på plassholder",invalidName:"Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >",pathName:"plassholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nl.js deleted file mode 100644 index 2c743ed6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","nl",{title:"Eigenschappen placeholder",toolbar:"Placeholder aanmaken",name:"Naam placeholder",invalidName:"De placeholder mag niet leeg zijn, en mag niet een van de volgende tekens bevatten: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/no.js deleted file mode 100644 index e2192cd8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","no",{title:"Egenskaper for plassholder",toolbar:"Opprett plassholder",name:"Navn på plassholder",invalidName:"Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >",pathName:"plassholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pl.js deleted file mode 100644 index df0c3aee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pl",{title:"Właściwości wypełniacza",toolbar:"Utwórz wypełniacz",name:"Nazwa wypełniacza",invalidName:"Wypełniacz nie może być pusty ani nie może zawierać żadnego z następujących znaków: [, ], < oraz >",pathName:"wypełniacz"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js deleted file mode 100644 index e438cc16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pt-br",{title:"Propriedades do Espaço Reservado",toolbar:"Criar Espaço Reservado",name:"Nome do Espaço Reservado",invalidName:"O espaço reservado não pode estar vazio e não pode conter nenhum dos seguintes caracteres: [, ], <, >",pathName:"Espaço Reservado"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt.js deleted file mode 100644 index b6dc1150..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pt",{title:"Propriedades dos Símbolos",toolbar:"Símbolo",name:"Nome do Símbolo",invalidName:"O símbolo não pode estar em branco e não pode conter qualquer dos seguintes carateres: [, ], <, >",pathName:"símbolo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ru.js deleted file mode 100644 index 11572b14..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ru",{title:"Свойства плейсхолдера",toolbar:"Создать плейсхолдер",name:"Имя плейсхолдера",invalidName:'Плейсхолдер не может быть пустым и содержать один из следующих символов: "[, ], <, >"',pathName:"плейсхолдер"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/si.js deleted file mode 100644 index 3fe4e3d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","si",{title:"ස්ථාන හීම්කරුගේ ",toolbar:"ස්ථාන හීම්කරු නිර්මාණය කිරීම",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sk.js deleted file mode 100644 index 88800a99..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sk",{title:"Vlastnosti placeholdera",toolbar:"Vytvoriť placeholder",name:"Názov placeholdera",invalidName:"Placeholder nemôže byť prázdny a nemôže obsahovať žiadny z nasledujúcich znakov: [,],<,>",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sl.js deleted file mode 100644 index 60114c35..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sl",{title:"Lastnosti Ograde",toolbar:"Ustvari Ogrado",name:"Placeholder Ime",invalidName:"Placeholder ne more biti prazen in ne sme vsebovati katerega od naslednjih znakov: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sq.js deleted file mode 100644 index 6f54e135..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sq",{title:"Karakteristikat e Mbajtësit të Vendit",toolbar:"Krijo Mabjtës Vendi",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sv.js deleted file mode 100644 index 66a19562..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sv",{title:"Innehållsrutans egenskaper",toolbar:"Skapa innehållsruta",name:"Innehållsrutans namn",invalidName:"Innehållsrutan får inte vara tom och får inte innehålla någon av följande tecken: [,],<,>",pathName:"innehållsruta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/th.js deleted file mode 100644 index 41198f94..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","th",{title:"คุณสมบัติเกี่ยวกับตัวยึด",toolbar:"สร้างตัวยึด",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tr.js deleted file mode 100644 index fc0d27dd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","tr",{title:"Yer tutucu özellikleri",toolbar:"Yer tutucu oluşturun",name:"Yer Tutucu Adı",invalidName:"Yer tutucu adı boş bırakılamaz ve şu karakterleri içeremez: [, ], <, >",pathName:"yertutucu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tt.js deleted file mode 100644 index d636866f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","tt",{title:"Тутырма үзлекләре",toolbar:"Тутырма",name:"Тутырма исеме",invalidName:"Тутырма буш булмаска тиеш һәм эчендә алдагы символлар булмаска тиеш: [, ], <, >",pathName:"тутырма"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ug.js deleted file mode 100644 index db0ad2ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ug",{title:"ئورۇن بەلگە خاسلىقى",toolbar:"ئورۇن بەلگە قۇر",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/uk.js deleted file mode 100644 index 015a82a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","uk",{title:"Налаштування Заповнювача",toolbar:"Створити Заповнювач",name:"Назва заповнювача",invalidName:"Заповнювач не може бути порожнім і не може містити наступні символи: [, ], <, >",pathName:"заповнювач"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/vi.js deleted file mode 100644 index 5875e467..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","vi",{title:"Thuộc tính đặt chỗ",toolbar:"Tạo đặt chỗ",name:"Tên giữ chỗ",invalidName:"Giữ chỗ không thể để trống và không thể chứa bất kỳ ký tự sau: [,], <, >",pathName:"giữ chỗ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js deleted file mode 100644 index bd67dfa8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","zh-cn",{title:"占位符属性",toolbar:"占位符",name:"占位符名称",invalidName:"占位符名称不能为空,并且不能包含以下字符:[、]、<、>",pathName:"占位符"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh.js deleted file mode 100644 index c400c26d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","zh",{title:"預留位置屬性",toolbar:"建立預留位置",name:"Placeholder 名稱",invalidName:"「預留位置」不可為空白且不可包含以下字元:[, ], <, >",pathName:"預留位置"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/plugin.js deleted file mode 100644 index 39dfb472..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/placeholder/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("placeholder",{requires:"widget,dialog",lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"placeholder",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_placeholder{background-color:#ff0}")},init:function(a){var b=a.lang.placeholder;CKEDITOR.dialog.add("placeholder",this.path+"dialogs/placeholder.js");a.widgets.add("placeholder",{dialog:"placeholder", -pathName:b.pathName,template:'<span class="cke_placeholder">[[]]</span>',downcast:function(){return new CKEDITOR.htmlParser.text("[["+this.data.name+"]]")},init:function(){this.setData("name",this.element.getText().slice(2,-2))},data:function(){this.element.setText("[["+this.data.name+"]]")}});a.ui.addButton&&a.ui.addButton("CreatePlaceholder",{label:b.toolbar,command:"placeholder",toolbar:"insert,5",icon:"placeholder"})},afterInit:function(a){var b=/\[\[([^\[\]])+\]\]/g;a.dataProcessor.dataFilter.addRules({text:function(f, -d){var e=d.parent&&CKEDITOR.dtd[d.parent.name];if(!e||e.span)return f.replace(b,function(b){var c=null,c=new CKEDITOR.htmlParser.element("span",{"class":"cke_placeholder"});c.add(new CKEDITOR.htmlParser.text(b));c=a.widgets.wrapElement(c,"placeholder");return c.getOuterHtml()})}})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png deleted file mode 100644 index cd64e19a87a150e7b05f6b682953e45251f21b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2145 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 XE^l&Yo9;Xs00000NkvXXu0mjfTFvbC diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png b/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png deleted file mode 100644 index 402db20e2776fdfd7f70a0a23edec0ffdc46c28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2204 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 Y(+!L8XRa6@;}rqc=Pux?u%1c(1w(J?%m4rY diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png deleted file mode 100644 index 1c9d97874cae75a185e975ba4af676c4162ec78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ?{pzV~EA+(#d=Mqyq(7_wT$Om7e(VmXK571Oe6vLEecmZR`$H zrd$aLP|2Slf6K;U7l)=-OVCeVjfKk@nwmF?GX`E**PMFrpD&jIpP=QX7h%uuSQ@7< zxtU|s&=H^^^1+7x{&&M;A0#HJD0V6R`fK+re$)HkAzGqqw&uIK$ZH=j+!CUd*t1jg z$LtubsR9$XKP~#Xb=9YcvuDo&MV~TCB!94ZKkv=&f3FRAst<Heo;-QlDy9b(e2*VL z{!(Ro_Or}`ZOqxa$;rvz?cD>fFpK&5`$u1kTC=r-qjKKjRVtoE_WeyA3Q7^#jQ3g+ zE4XwR)}B1+$q+I%Z~N)9XL*%AIUL}rQT06Z<%`LIrVbnNiL!z}b(O4-%{W@Lv*&qb zME1$gGJ=v(CqB<n@r;O%Kkxd)@<VEN_UoCeZn-TEWHob5DJ&@w$<~dW##??X$1HPe zR7>KChYue<cUo9*A;V<Xs$I)gg@(r7y?5^)s|?SsuQvXVEtXw=$-}xxW6|xm`{vA= z<+Xm@x_j~Q@x_IOj{EPshhDF_@6XP3G%4`0g&GIb83pEbuOI#1w|&o^HO9uqBHgZP zYH9_s;(`m~)*DB}PD?#3DUmE8DS5C^Mo(Y=?%ut7Z<O8*SK6ee6e<|WdM`I8N9Jzn z=K{95e(ff{jPsc8KY#vwYux(RZ{Fl^?^qS0W&iE__xe?@k|f&hw0d1OQRQID*nay+ zA<u`EQERi-hF#vgd2>i;dC1rAcX$6NpW>RLQBYHJ=I2k#Rlf=|Gd;`8%P&uzI+fpn z>Baw5*I!@E+dgseV&zRbi^EpiGVWuXUH)$0p|@*o+7vicJca%-=pD@zdc5%D7GPRb zEpd$~Nl7e8wMs5Z1yT$~28PDE2Ijg3CLxCARtCmEq-|hiWnkdDWH&IKB5BCYPsvQH z#I3>RC-V`Y21$?&!TD(=<%vb93_zFaW#(lUCnpx9>g5-u&wghk1ysb~>FVdQ&MBb@ E02sM!6951J diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview.png b/platforms/android/assets/www/lib/ckeditor/plugins/preview/icons/preview.png deleted file mode 100644 index 162b44b845ae7e4ab3c0206a167c0a05aeda2b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ-P<8V~EA++Q}RJq#Z?E&)?qIo6}RS8+b(UP@Y3a+o9AS3@-DT zW|@QpsLXe8n$7Pa?%Jgk_={g7$ibh{&tO_^OQ%Ej?5U~i%bzc0xXrb|=4F<f)Y*%B z-=Fo^8>c?`<bz7NlPQy?pNjI{ep{7;X_1CgsCs(eV~Zz6mO(40be-rnI`-!I=gOGt zsuMjFl!6;N9$4_LUcGw7tL{%W@0&Z`JTKarKH<oXBmtI|M2+p+x3?s6G;{>$h<WdO z|G%bX!K&YdGM8U}?RYGao|9@KwQyBLwxD2-p+xeIUAtB>zn<%-E@3@$_UywFp9?nL z%rTPSnK6I<^@jx>yYC+RUb|+i|KcejTUl3Zoffv*b!}L6fr3&*w&Ae}XVX5~@E<QU zb9oZsQq}*OYeSsYRJFX&QYpp0<Q~H_=gui9NgvqmwKOOow78<;htv;6CGG0!>M|3l z#I<wXI1W$9F<YIiRZv$_QnGrL^{S|Vt9QMYUh-8DdVV$Q>+bizue>hR)6-jUHA}Ef z(b(8nxZ(A#iL2gy`(2xtmnXr)cIW>6`ly(go?Um}&GuVv%&2nAw&QWdr&p(*8ucqH z&-G&l`v2ywTS3=LHy?gDL4jk#wSTvnLzmuvUtCb|LHdV=lC@Hhz{I;HR)7C}`C_tX z_ipdyL7GN0dHNpPxO6Pya0nH>|2^<(@8->$?SIznW4oiTt9$kI(@pEvuGRd&T_Nf! zcs8w=OF*#J=sRzyZP?X$tK{P2<K0i6J{_eYBJxA3O|jRFS*n-KQGnq^y~(Y6_x{xs z6$$0$<*iy(m%06ROkAAO)~MbTqmzdY9s1I5x1Qrh)t&v!_rg|RZ8U7#Kec$yww&}g z*1!a*TH+c}l9E`GYL#4+3Zxi}3=EBR4a{{7OhOFJtqhETNZY{3%D}*P$!=g`MbeO) zpOTqYiCcrsPv#>)4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe1W@O1Ta JS?83{1OV;eZD;@h diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/af.js deleted file mode 100644 index 97a16944..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","af",{preview:"Voorbeeld"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ar.js deleted file mode 100644 index a128ad1b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ar",{preview:"معاينة الصفحة"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bg.js deleted file mode 100644 index 5b88c365..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bg",{preview:"Преглед"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bn.js deleted file mode 100644 index b95a1b55..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bn",{preview:"প্রিভিউ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bs.js deleted file mode 100644 index 1418f764..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bs",{preview:"Prikaži"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ca.js deleted file mode 100644 index 73458dd2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ca",{preview:"Visualització prèvia"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cs.js deleted file mode 100644 index f00d6eee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","cs",{preview:"Náhled"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cy.js deleted file mode 100644 index 071c8d8d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","cy",{preview:"Rhagolwg"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/da.js deleted file mode 100644 index 01f18bc8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","da",{preview:"Vis eksempel"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/de.js deleted file mode 100644 index 7c57cba3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","de",{preview:"Vorschau"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/el.js deleted file mode 100644 index 4aaeeb4b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","el",{preview:"Προεπισκόπιση"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-au.js deleted file mode 100644 index f10aa05e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-au",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-ca.js deleted file mode 100644 index 3a7244b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-ca",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-gb.js deleted file mode 100644 index 78d19abd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-gb",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en.js deleted file mode 100644 index c1901ef8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eo.js deleted file mode 100644 index 5fa3dd6b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","eo",{preview:"Vidigi Aspekton"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/es.js deleted file mode 100644 index d507847e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","es",{preview:"Vista Previa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/et.js deleted file mode 100644 index a47ea46c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","et",{preview:"Eelvaade"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eu.js deleted file mode 100644 index ac83687c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","eu",{preview:"Aurrebista"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fa.js deleted file mode 100644 index ad85c381..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fa",{preview:"پیشنمایش"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fi.js deleted file mode 100644 index 6785c5b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fi",{preview:"Esikatsele"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fo.js deleted file mode 100644 index 779ef877..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fo",{preview:"Frumsýning"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr-ca.js deleted file mode 100644 index 3731a101..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fr-ca",{preview:"Prévisualiser"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr.js deleted file mode 100644 index ca8852b4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fr",{preview:"Aperçu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gl.js deleted file mode 100644 index ab8a82a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","gl",{preview:"Vista previa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gu.js deleted file mode 100644 index e7b298b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","gu",{preview:"પૂર્વદર્શન"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/he.js deleted file mode 100644 index 420a9340..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","he",{preview:"תצוגה מקדימה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hi.js deleted file mode 100644 index 397d2786..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hi",{preview:"प्रीव्यू"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hr.js deleted file mode 100644 index 5a85fc9c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hr",{preview:"Pregledaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hu.js deleted file mode 100644 index b96a4360..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hu",{preview:"Előnézet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/id.js deleted file mode 100644 index 8c7819d2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","id",{preview:"Pratinjau"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/is.js deleted file mode 100644 index 5fac3cd4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","is",{preview:"Forskoða"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/it.js deleted file mode 100644 index a9453f97..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","it",{preview:"Anteprima"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ja.js deleted file mode 100644 index 6b7cd82f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ja",{preview:"プレビュー"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ka.js deleted file mode 100644 index bc1590db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ka",{preview:"გადახედვა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/km.js deleted file mode 100644 index 68ab55fa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","km",{preview:"មើល​ជា​មុន"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ko.js deleted file mode 100644 index ac824da1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ko",{preview:"미리보기"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ku.js deleted file mode 100644 index 19594b66..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ku",{preview:"پێشبینین"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lt.js deleted file mode 100644 index 814a9213..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","lt",{preview:"Peržiūra"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lv.js deleted file mode 100644 index 7a27eb2b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","lv",{preview:"Priekšskatīt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mk.js deleted file mode 100644 index b0beed9c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","mk",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mn.js deleted file mode 100644 index 6f2448c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","mn",{preview:"Уридчлан харах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ms.js deleted file mode 100644 index f3c596ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ms",{preview:"Prebiu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nb.js deleted file mode 100644 index ea20b380..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","nb",{preview:"Forhåndsvis"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nl.js deleted file mode 100644 index ed67f978..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","nl",{preview:"Voorbeeld"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/no.js deleted file mode 100644 index 0c13be89..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","no",{preview:"Forhåndsvis"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pl.js deleted file mode 100644 index 11f306e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pl",{preview:"Podgląd"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt-br.js deleted file mode 100644 index e7f58261..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pt-br",{preview:"Visualizar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt.js deleted file mode 100644 index 92e354db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pt",{preview:"Pré-visualizar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ro.js deleted file mode 100644 index 646e2319..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ro",{preview:"Previzualizare"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ru.js deleted file mode 100644 index 11c59a41..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ru",{preview:"Предварительный просмотр"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/si.js deleted file mode 100644 index a205a154..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","si",{preview:"නැවත "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sk.js deleted file mode 100644 index abee94b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sk",{preview:"Náhľad"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sl.js deleted file mode 100644 index a5ba8ba7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sl",{preview:"Predogled"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sq.js deleted file mode 100644 index ef5e65b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sq",{preview:"Parashiko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr-latn.js deleted file mode 100644 index 8c50b69d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sr-latn",{preview:"Izgled stranice"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr.js deleted file mode 100644 index c01f9362..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sr",{preview:"Изглед странице"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sv.js deleted file mode 100644 index f5a3f5aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sv",{preview:"Förhandsgranska"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/th.js deleted file mode 100644 index 047e25f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","th",{preview:"ดูหน้าเอกสารตัวอย่าง"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tr.js deleted file mode 100644 index dd331bd1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","tr",{preview:"Ön İzleme"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tt.js deleted file mode 100644 index 9b5e62ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","tt",{preview:"Карап алу"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ug.js deleted file mode 100644 index 06549fd1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ug",{preview:"ئالدىن كۆزەت"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/uk.js deleted file mode 100644 index 8d45b877..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","uk",{preview:"Попередній перегляд"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/vi.js deleted file mode 100644 index ba28bcc9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","vi",{preview:"Xem trước"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh-cn.js deleted file mode 100644 index 69445d04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","zh-cn",{preview:"预览"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh.js deleted file mode 100644 index 2ebf415a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","zh",{preview:"預覽"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/preview/plugin.js deleted file mode 100644 index a21212c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var h,i={modes:{wysiwyg:1,source:1},canUndo:!1,readOnly:1,exec:function(a){var g,b=a.config,f=b.baseHref?'<base href="'+b.baseHref+'"/>':"";if(b.fullPage)g=a.getData().replace(/<head>/,"$&"+f).replace(/[^>]*(?=<\/title>)/,"$& &mdash; "+a.lang.preview.preview);else{var b="<body ",d=a.document&&a.document.getBody();d&&(d.getAttribute("id")&&(b+='id="'+d.getAttribute("id")+'" '),d.getAttribute("class")&&(b+='class="'+d.getAttribute("class")+'" '));g=a.config.docType+'<html dir="'+a.config.contentsLangDirection+ -'"><head>'+f+"<title>"+a.lang.preview.preview+"</title>"+CKEDITOR.tools.buildStyleHtml(a.config.contentsCss)+"</head>"+(b+">")+a.getData()+"</body></html>"}f=640;b=420;d=80;try{var c=window.screen,f=Math.round(0.8*c.width),b=Math.round(0.7*c.height),d=Math.round(0.1*c.width)}catch(i){}if(!1===a.fire("contentPreview",a={dataValue:g}))return!1;var c="",e;CKEDITOR.env.ie&&(window._cke_htmlToLoad=a.dataValue,e="javascript:void( (function(){document.open();"+("("+CKEDITOR.tools.fixDomain+")();").replace(/\/\/.*?\n/g, -"").replace(/parent\./g,"window.opener.")+"document.write( window.opener._cke_htmlToLoad );document.close();window.opener._cke_htmlToLoad = null;})() )",c="");CKEDITOR.env.gecko&&(window._cke_htmlToLoad=a.dataValue,c=CKEDITOR.getUrl(h+"preview.html"));c=window.open(c,null,"toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width="+f+",height="+b+",left="+d);CKEDITOR.env.ie&&c&&(c.location=e);!CKEDITOR.env.ie&&!CKEDITOR.env.gecko&&(e=c.document,e.open(),e.write(a.dataValue), -e.close());return!0}};CKEDITOR.plugins.add("preview",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"preview,preview-rtl",hidpi:!0,init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(h=this.path,a.addCommand("preview",i),a.ui.addButton&&a.ui.addButton("Preview",{label:a.lang.preview.preview,command:"preview", -toolbar:"document,40"}))}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/preview/preview.html b/platforms/android/assets/www/lib/ckeditor/plugins/preview/preview.html deleted file mode 100644 index 8c028262..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/preview/preview.html +++ /dev/null @@ -1,13 +0,0 @@ -<script> - -// Prevent from DOM clobbering. -if ( typeof window.opener._cke_htmlToLoad == 'string' ) { - var doc = document; - doc.open(); - doc.write( window.opener._cke_htmlToLoad ); - doc.close(); - - delete window.opener._cke_htmlToLoad; -} - -</script> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/icons/hidpi/print.png b/platforms/android/assets/www/lib/ckeditor/plugins/print/icons/hidpi/print.png deleted file mode 100644 index 4b72460dd4f1239d5aad15f2c78a959642eac9a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmV-$29NoPP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00oIjL_t(o!^M}uYb4hZ#((wRo7Rj* zGhV?&76D^+Ll9b91UW0MlkCkPa`456fWgEE-;(S82fq5Az=DJAI9QN{y%;QH#9k8C zh}cWmL<EI+H#iHzk#=@^rl)7R`@NULbhl?mvr=RcQc%!z_pAD<>Z^M1$zL`%`G1Nz z>7xLMoX>;z__G4gN}-iPDTSO9fcGBf95&Ze0Vt)Iota_2(V$+fqLexp0OuUhU_iUu zB^nNK6CjQOFiJ7sXwZD+l?vX!0sI2E@-6-U3HUW4zYBME(qWpCoCH7sB|<d_!2378 zfBEveKUi7eJFV6+<fn;Jihmy-UitIAd++{zZ;xsayr)DEc!CqhGT?zMO}VtP^7hLw zy#&tDdHnbrGI@Wp=iCV*)PjJQ*VeFFzn!J&d(&2$$;HlEy4^0FFnn%*f8Tp+y+6(A zQ?Ur5wRFPpxo)?Mvv$-~WA=>X>C#%GL=f+Zqlm)?58eWPlUL@v^432$H!(qg7QuOs zwHD_bMkz(TT4lb`V76LCyeEqyfDiM<zvO%*{1x!wcUvt?y^a^5Uv$M_0Q)y@(!G5f z;2LlTu>WJd16=FgzRmv4n;0d+j4=T3{PfjV*B2KSaL(bK8xikY)_<G_h#>i3JNWwR z^{tOTerLv*A1M)xXEZF9*VfiAG@GQuVd>Q80IaoGYs+`1Is~-VXst&?%-@L!7n)6$ z*VfjZb9lhuJ<eJ#Jo5}ml2FmQG-j=(-|rKKAyE{OW!ZlPz!*clUZ>e?GCMnq9<!O| zzMQq-{U`%|jFmngz0NtJDB|GY;NJH3wrRCmFPtUyhlhuM-PqX378e&+>h*d#(w%cy zYe(4yR1O=Lr@PQB%jk4Ee6qE5X6FE{R_ldNwzf>C(<w7osPn$uWmVDSMV$*xvy5)9 z$FmCyZQ!bixU(p5_1T4mcDL6f&9Y<mVKiV&@ld3s7`NVg+z93M-mP1^FJ8IA;`}^= zI3^53(ljmi2c;C1N`+>#Nwrqvpxvf->(=hvYp-2*B6o_&5uqq~5x6Nz;GHW|REP=! zhTGe_L9+=;5%v50_Ja@Ze(%zyA5KgAKfe6(^Pj)@<|;}NG@A^!w|7+#jJjtmFz;Mh zf^shyuTil;w8m7cC2|0pWlybp@y!Ezw4)+gmr;-VDTAB_pj1HeQ;~>Jt<_jsT3UTt z-Itb@R;#sI`M)StI-k@+OtF2sJT;R@C6C@YhqIRT^>w=4E=iI+!GRzMXfztQyqycX z$1>|2uHb;kSP3RLF#argm-M2D-*0Z-y?F8BR1Vy~fB*BJz5e>DwYDVLF#rVz$_$M4 zy|osfPp#rGSpv*~WG8SS%d%r99#;gG+p^YvGf}<AIPVz_hjhYluUV;FPHQ!k2uYR^ z$1%>i(G>HZTCK+N^75*+cIx>|YrXp8Yu5<Fuyh{BF;Nte8iVtmejL*Y!@c2fi1Qv} zt)<iHu(Pw{ezLl{R}F&8N+~k$X%7ZOQAB-i4i8i+6*e|D$_$N5vEdBUbi^6&iK2*q zJ$y)Xbc7MXImaML_WpSHuIqgE85TwW!hWBX=bs-ue)MR4GO7n3eMGfZdx9h5JKVVV zu|Buf@~GV=ZMP@S^)CXu_dfj;nVlWAVK$29I<PxwG|t&Ru9IW6(8>SeB$-yJUEq4| z6N6IdnHj#gapMm*Nv@U$MiF!nFxzNQ@Fb37Y??mxw&cAh$uf%iN)YhHjT>T<gh{)m zS_P#rB7zD6D#lQmQdiNMsNd(|S6>kw9%4?pDP_*_IF5<>eMD=5xw+$Kh<r#%F$W4q z)5KcK(a{mU-#^nG?QieDj|&1s>l2UFry8}+5%qd!@eM%K>rK6kPRf4({A%Fv6b#8* z0000bbVXQnWMOn=I%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!< zC3HntbYx+4WjbwdWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>e uSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTXsRT-!N diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/icons/print.png b/platforms/android/assets/www/lib/ckeditor/plugins/print/icons/print.png deleted file mode 100644 index 06f797dc7285d97c7113e66cf9680b3a15f3ca2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbENAV~EA+sguuoDF+I)?%#F&!rZ>K3&jgxE^A%mE|C8C@ec+g z{fF8=M0ORwO>-#xmc+u`<>8S0`t81r^;u#Yn~fJA5}9*%=kixqR%(Zbhj(xslUTDg zBKzm6SG$(2%bvB&F*K6N;Mj%NUp*$VB%hhi<a_zUhYt<KeY@5fDm87LcJ*rLnyuAJ zlR7)<n$AS+{(j8WWy0&%*@p~La&vhFHOtD%4jJ$SUbVOC=D1hw=jXR)RoVOZ??2u< zoMPk{8vQ5Ws(R?x`43+9Hm@?8>9at`yCK=(zwq(YNTpS$e*M~&mz#UhgjZi*U&Pfh z_Byxp+j+b0>YYA)S|ZuP);85f?zGT>1cL+B{l$IF&CT;OXVv}IXuO#5CA+-*d-eM3 z$p#V(XOeYJPr80Rd`|I_%w76Q?ed%}UhOM>x8d^3E!Pa+_b*<h)v)+sfycb(&sSLm zUyTIPhaU<&Sg~pqYrSGX=vAh*2_mkum4rGx1Y9qs{eF<Yj!~nl$>#j?o%>>=Lqoec zSFN(jpT)-T-nMdHu*lIn(~J8o`p!>Mxv0?<66$&R%lsRcOhQ9dyOew<xjeS8D?YdJ z%a0!((^7*IuIZhwKL72TnWF%M!R)g;cJ9oS-nQrE+qb$#QoR|o+Io9?1s?qTd2{`m zH5vQwFTecq!ZMS&ekV8iJhI?p)YI4BYnUddeBkKOR&l{51&2`a%X`*;tT=P`?%eRJ zN7w)5RhFt#mg?TU2bgSBOI#yLQW8s2t&)pUffR$0fuXUkfw``MNr<7jm4Pu3X&V?> z85sC3*$qrmNE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKios$PCk U`s{Z$Qb0uvp00i_>zopr0P|i^5dZ)H diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/af.js deleted file mode 100644 index 61185ef1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","af",{toolbar:"Druk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ar.js deleted file mode 100644 index b61c0946..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ar",{toolbar:"طباعة"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bg.js deleted file mode 100644 index 6d929a8f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bg",{toolbar:"Печат"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bn.js deleted file mode 100644 index 005dfd28..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bn",{toolbar:"প্রিন্ট"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bs.js deleted file mode 100644 index a6399186..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bs",{toolbar:"Štampaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ca.js deleted file mode 100644 index 76f7145f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ca",{toolbar:"Imprimeix"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cs.js deleted file mode 100644 index 8927afb8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","cs",{toolbar:"Tisk"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cy.js deleted file mode 100644 index 173df74e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","cy",{toolbar:"Argraffu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/da.js deleted file mode 100644 index d816585f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","da",{toolbar:"Udskriv"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/de.js deleted file mode 100644 index a429f6cd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","de",{toolbar:"Drucken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/el.js deleted file mode 100644 index d5623ebd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","el",{toolbar:"Εκτύπωση"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-au.js deleted file mode 100644 index 191384e6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-au",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-ca.js deleted file mode 100644 index aff5850e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-ca",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-gb.js deleted file mode 100644 index 84a26bdf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-gb",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en.js deleted file mode 100644 index 17461f29..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eo.js deleted file mode 100644 index b0580c1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","eo",{toolbar:"Presi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/es.js deleted file mode 100644 index 5549ced6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","es",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/et.js deleted file mode 100644 index cd192d60..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","et",{toolbar:"Printimine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eu.js deleted file mode 100644 index 6690c535..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","eu",{toolbar:"Inprimatu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fa.js deleted file mode 100644 index 2445e39e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fa",{toolbar:"چاپ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fi.js deleted file mode 100644 index 2547e349..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fi",{toolbar:"Tulosta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fo.js deleted file mode 100644 index 1c93841a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fo",{toolbar:"Prenta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr-ca.js deleted file mode 100644 index ecedc161..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fr-ca",{toolbar:"Imprimer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr.js deleted file mode 100644 index 1ae9a1d2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fr",{toolbar:"Imprimer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gl.js deleted file mode 100644 index 47ef182c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","gl",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gu.js deleted file mode 100644 index a6c1366f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","gu",{toolbar:"પ્રિન્ટ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/he.js deleted file mode 100644 index a9e047af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","he",{toolbar:"הדפסה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hi.js deleted file mode 100644 index 06ae5981..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hi",{toolbar:"प्रिन्ट"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hr.js deleted file mode 100644 index ffbd7f74..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hr",{toolbar:"Ispiši"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hu.js deleted file mode 100644 index 1b1fb4e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hu",{toolbar:"Nyomtatás"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/id.js deleted file mode 100644 index 4df05eb7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","id",{toolbar:"Cetak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/is.js deleted file mode 100644 index 0fb61680..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","is",{toolbar:"Prenta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/it.js deleted file mode 100644 index f8a79668..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","it",{toolbar:"Stampa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ja.js deleted file mode 100644 index dbfd00bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ja",{toolbar:"印刷"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ka.js deleted file mode 100644 index 86dc40f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ka",{toolbar:"ბეჭდვა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/km.js deleted file mode 100644 index 35450b4c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","km",{toolbar:"បោះពុម្ព"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ko.js deleted file mode 100644 index 9657b437..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ko",{toolbar:"인쇄하기"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ku.js deleted file mode 100644 index fce60ec7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ku",{toolbar:"چاپکردن"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lt.js deleted file mode 100644 index 1829455b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","lt",{toolbar:"Spausdinti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lv.js deleted file mode 100644 index e03d0b5d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","lv",{toolbar:"Drukāt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mk.js deleted file mode 100644 index 63fd4d06..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","mk",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mn.js deleted file mode 100644 index 8df85cf9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","mn",{toolbar:"Хэвлэх"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ms.js deleted file mode 100644 index ca8734bd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ms",{toolbar:"Cetak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nb.js deleted file mode 100644 index e65fcfd9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","nb",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nl.js deleted file mode 100644 index 41ecffd4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","nl",{toolbar:"Afdrukken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/no.js deleted file mode 100644 index afb031f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","no",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pl.js deleted file mode 100644 index 1bdbdebb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pl",{toolbar:"Drukuj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt-br.js deleted file mode 100644 index 9246c27d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pt-br",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt.js deleted file mode 100644 index a72195ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pt",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ro.js deleted file mode 100644 index 2f331d22..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ro",{toolbar:"Printează"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ru.js deleted file mode 100644 index 458a9c14..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ru",{toolbar:"Печать"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/si.js deleted file mode 100644 index 68d3f56d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","si",{toolbar:"මුද්‍රණය කරන්න"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sk.js deleted file mode 100644 index 7762bb2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sk",{toolbar:"Tlač"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sl.js deleted file mode 100644 index 9f401ddb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sl",{toolbar:"Natisni"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sq.js deleted file mode 100644 index bfb05a47..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sq",{toolbar:"Shtype"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr-latn.js deleted file mode 100644 index 62cdc718..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sr-latn",{toolbar:"Štampa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr.js deleted file mode 100644 index 74f6430e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sr",{toolbar:"Штампа"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sv.js deleted file mode 100644 index 14181ba8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sv",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/th.js deleted file mode 100644 index e87d3ac2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","th",{toolbar:"สั่งพิมพ์"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tr.js deleted file mode 100644 index 82f81f05..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","tr",{toolbar:"Yazdır"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tt.js deleted file mode 100644 index db8ff025..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","tt",{toolbar:"Бастыру"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ug.js deleted file mode 100644 index 6c270318..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ug",{toolbar:"باس "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/uk.js deleted file mode 100644 index dfde34dc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","uk",{toolbar:"Друк"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/vi.js deleted file mode 100644 index 56573948..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","vi",{toolbar:"In"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh-cn.js deleted file mode 100644 index d7c2643d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","zh-cn",{toolbar:"打印"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh.js deleted file mode 100644 index 65b8840d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","zh",{toolbar:"列印"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/print/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/print/plugin.js deleted file mode 100644 index 0b802e39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/print/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("print",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"print,",hidpi:!0,init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(a.addCommand("print",CKEDITOR.plugins.print),a.ui.addButton&&a.ui.addButton("Print",{label:a.lang.print.toolbar,command:"print",toolbar:"document,50"}))}}); -CKEDITOR.plugins.print={exec:function(a){CKEDITOR.env.gecko?a.window.$.print():a.document.$.execCommand("Print")},canUndo:!1,readOnly:1,modes:{wysiwyg:1}}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/icons/hidpi/save.png b/platforms/android/assets/www/lib/ckeditor/plugins/save/icons/hidpi/save.png deleted file mode 100644 index fc59f677aa3cb94f888a1c922f126cc8d06d18a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/icons/save.png b/platforms/android/assets/www/lib/ckeditor/plugins/save/icons/save.png deleted file mode 100644 index 51b8f6ee11e7878b5c56836c1b40b689e7823a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<5N!;#}JFtQz!4wR&o?MZf_iUGgPowfP+ytmsxCOP)y<6-q!y? z@Ax;IuTMy?y&lcAvq+F-Z?mf6zZ<1t>EB`#%WS*3?=^?>oT<6@{r5fTMH+`J+dKY* zTRrbs#4)Fsq5lBO1ny!c8>{CIE(~gS^TJ(@#7qKG4V@hi7)z|?wkvQjNW};^3cRtJ zdyct)#YBpC&DNC2v}d0!kIjgQ6!g+;Qdn>|FL~|Kix$^DF>KOV9JF%5)@RS2wVh3K zo|c-<u-0^I6z^J7M}Y|{Cpi_Au4I``3EHmoX?N7xf5H2LUTwSnTJZQsPKF1+?V?`C zd#&{Uo4xj9?S6~u0-2@7eFqa7wwlT7?%cJ9Jv=<TVxIe~Wk=^SO<1N`DD(N>zjJxp zmBT+>jM;K6WOeAe_3J;{yqDQ<|GnX{58u8WE3xvm-&{~%|K5DIFJJp%!3n97o|7i1 zaLzuv>;~)7EAI|F{meg5w)^hY*I$#otoo9F{r&g-`t|TjCaeYxnOmc_MCmeYj?p_? zw9}*^&?|ARt!Bjf>pbm;<qKs_XPEq&6|Oba%k}E+-Mcrp-pbp)=KAaT*P{0PtvjEz z@yEA6e`2~8aV(v}5TZ5p&%v8s(@v+(Db|1d@ki>`C`XC5mc$b|X3j42^!@|{3;q;p zQ><rLdAh9D#r)MVU@A~8ag8WRNi0dVN-jzTQVd20hQ_)E=DG$ZA%^Bw2F5_7ZD3?& zVBouCH!y`DX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpinR(g8$%zH2dih1^ Uv)|cB0TnTLy85}Sb4q9e06jA>YXATM diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/af.js deleted file mode 100644 index aa5b37e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","af",{toolbar:"Bewaar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ar.js deleted file mode 100644 index eb09ee54..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ar",{toolbar:"حفظ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bg.js deleted file mode 100644 index ecdf23c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bg",{toolbar:"Запис"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bn.js deleted file mode 100644 index b4e2d6c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bn",{toolbar:"সংরক্ষন কর"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bs.js deleted file mode 100644 index d94efe89..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bs",{toolbar:"Snimi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ca.js deleted file mode 100644 index 8704f585..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ca",{toolbar:"Desa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cs.js deleted file mode 100644 index e337b9e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","cs",{toolbar:"Uložit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cy.js deleted file mode 100644 index 1f8eb814..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","cy",{toolbar:"Cadw"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/da.js deleted file mode 100644 index 1ff06c69..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","da",{toolbar:"Gem"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/de.js deleted file mode 100644 index 603359ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","de",{toolbar:"Speichern"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/el.js deleted file mode 100644 index 1aaf9ef2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","el",{toolbar:"Αποθήκευση"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-au.js deleted file mode 100644 index 0ace64e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-au",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-ca.js deleted file mode 100644 index 993a86e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-ca",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-gb.js deleted file mode 100644 index 19c382db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-gb",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en.js deleted file mode 100644 index 1ee67693..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eo.js deleted file mode 100644 index dd7a1940..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","eo",{toolbar:"Konservi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/es.js deleted file mode 100644 index b07eea63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","es",{toolbar:"Guardar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/et.js deleted file mode 100644 index 5bfb76ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","et",{toolbar:"Salvestamine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eu.js deleted file mode 100644 index fec1f853..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","eu",{toolbar:"Gorde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fa.js deleted file mode 100644 index fb3f2a39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fa",{toolbar:"ذخیره"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fi.js deleted file mode 100644 index 93d4db54..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fi",{toolbar:"Tallenna"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fo.js deleted file mode 100644 index 4b452683..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fo",{toolbar:"Goym"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr-ca.js deleted file mode 100644 index eacb6ea5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fr-ca",{toolbar:"Sauvegarder"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr.js deleted file mode 100644 index 8df018d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fr",{toolbar:"Enregistrer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gl.js deleted file mode 100644 index 1bd43328..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","gl",{toolbar:"Gardar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gu.js deleted file mode 100644 index 683842a8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","gu",{toolbar:"સેવ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/he.js deleted file mode 100644 index de52496b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","he",{toolbar:"שמירה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hi.js deleted file mode 100644 index 36e3a750..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hi",{toolbar:"सेव"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hr.js deleted file mode 100644 index cd0d6f42..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hr",{toolbar:"Snimi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hu.js deleted file mode 100644 index e2de2005..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hu",{toolbar:"Mentés"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/id.js deleted file mode 100644 index 7f1760b6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","id",{toolbar:"Simpan"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/is.js deleted file mode 100644 index 5f985898..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","is",{toolbar:"Vista"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/it.js deleted file mode 100644 index fdfe51a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","it",{toolbar:"Salva"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ja.js deleted file mode 100644 index 41801c4e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ja",{toolbar:"保存"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ka.js deleted file mode 100644 index d3d0456c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ka",{toolbar:"ჩაწერა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/km.js deleted file mode 100644 index 82f44957..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","km",{toolbar:"រក្សាទុក"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ko.js deleted file mode 100644 index f1a4191c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ko",{toolbar:"저장하기"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ku.js deleted file mode 100644 index 649a8cc1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ku",{toolbar:"پاشکەوتکردن"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lt.js deleted file mode 100644 index ea89ceee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","lt",{toolbar:"Išsaugoti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lv.js deleted file mode 100644 index 6d8c0c83..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","lv",{toolbar:"Saglabāt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mk.js deleted file mode 100644 index 0405ba87..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","mk",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mn.js deleted file mode 100644 index ed1d40aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","mn",{toolbar:"Хадгалах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ms.js deleted file mode 100644 index 8b557e7a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ms",{toolbar:"Simpan"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nb.js deleted file mode 100644 index 0bce93de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","nb",{toolbar:"Lagre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nl.js deleted file mode 100644 index 46110539..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","nl",{toolbar:"Opslaan"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/no.js deleted file mode 100644 index d58f02e4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","no",{toolbar:"Lagre"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pl.js deleted file mode 100644 index 8214669e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pl",{toolbar:"Zapisz"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt-br.js deleted file mode 100644 index 64c537a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pt-br",{toolbar:"Salvar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt.js deleted file mode 100644 index a30393be..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pt",{toolbar:"Guardar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ro.js deleted file mode 100644 index 05329bcd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ro",{toolbar:"Salvează"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ru.js deleted file mode 100644 index 9c755418..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ru",{toolbar:"Сохранить"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/si.js deleted file mode 100644 index 6305fe65..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","si",{toolbar:"ආරක්ෂා කරන්න"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sk.js deleted file mode 100644 index f3ea59bd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sk",{toolbar:"Uložiť"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sl.js deleted file mode 100644 index e8ff1758..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sl",{toolbar:"Shrani"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sq.js deleted file mode 100644 index 493dca31..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sq",{toolbar:"Ruaje"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr-latn.js deleted file mode 100644 index fe27f2b8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sr-latn",{toolbar:"Sačuvaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr.js deleted file mode 100644 index 3fa9e1ca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sr",{toolbar:"Сачувај"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sv.js deleted file mode 100644 index a2e40dda..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sv",{toolbar:"Spara"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/th.js deleted file mode 100644 index 8e1c28dd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","th",{toolbar:"บันทึก"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tr.js deleted file mode 100644 index bb638ac3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","tr",{toolbar:"Kaydet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tt.js deleted file mode 100644 index 757f3f71..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","tt",{toolbar:"Саклау"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ug.js deleted file mode 100644 index 27dbe124..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ug",{toolbar:"ساقلا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/uk.js deleted file mode 100644 index c1abf921..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","uk",{toolbar:"Зберегти"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/vi.js deleted file mode 100644 index 986883b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","vi",{toolbar:"Lưu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh-cn.js deleted file mode 100644 index a2de754d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","zh-cn",{toolbar:"保存"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh.js deleted file mode 100644 index 6e810611..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","zh",{toolbar:"儲存"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/save/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/save/plugin.js deleted file mode 100644 index 75f29058..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/save/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var b={readOnly:1,exec:function(a){if(a.fire("save")&&(a=a.element.$.form))try{a.submit()}catch(b){a.submit.click&&a.submit.click()}}};CKEDITOR.plugins.add("save",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"save",hidpi:!0,init:function(a){a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.addCommand("save", -b).modes={wysiwyg:!!a.element.$.form},a.ui.addButton&&a.ui.addButton("Save",{label:a.lang.save.toolbar,command:"save",toolbar:"document,10"}))}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/LICENSE.md b/platforms/android/assets/www/lib/ckeditor/plugins/scayt/LICENSE.md deleted file mode 100644 index 844ab4de..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor SCAYT Plugin** -Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/options.js b/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/options.js deleted file mode 100644 index aec9a1c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/options.js +++ /dev/null @@ -1,17 +0,0 @@ -CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='<p><img src="'+g.getLogo()+'" /></p><p>'+g.getLocal("version")+g.getVersion()+"</p><p>"+g.getLocal("text_copyrights")+"</p>",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", -id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e<this.getChild().length;e++)this.getChild()[e].setValue(a.getApplicationConfig()[this.getChild()[e].id])}}]}, -{id:"langs",label:g.getLocal("tab_languages"),elements:[{id:"leftLangColumn",type:"vbox",align:"left",widths:["100"],children:[{type:"html",id:"langBox",style:"overflow: hidden; white-space: normal;",html:'<form><div style="float:left;width:45%;margin-left:5px;" id="left-col-'+f.name+'"></div><div style="float:left;width:45%;margin-left:15px;" id="right-col-'+f.name+'"></div></form>',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), -elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox", -id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create"; -c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError", -c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog= -a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]}, -{type:"html",id:"dicInfo",html:'<div id="dic_info_editor1" style="margin:5px auto; width:95%;white-space:normal;">'+g.getLocal("text_descriptionDic")+"</div>"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'<div><div id="scayt_about_">'+k+"</div></div>"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+ -a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))}); -f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()): -e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, -onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""), -d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", -"scaytOptions").getChild(),b=0;b<e.length;b++)e[b].isChanged()&&(a[e[b].id]=e[b].getValue());i.isChanged()&&(a[i.id]=f.config.scayt_sLang=i.currentLang=i.newLang);return a},buildRadioInputs:function(a,e){var b=new CKEDITOR.dom.element("div");CKEDITOR.document.createElement("div");var d="scaytLang_"+e,c=CKEDITOR.dom.element.createFromHtml('<input id="'+d+'" type="radio" value="'+e+'" name="scayt_lang" />'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"}); -c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]? -c=1:a[1]<b[1]&&(c=-1);return c});d={};for(b=0;b<c.length;b++)d[c[b][0]]=c[b][1];c=Math.round(c.length/2);for(h in d)i++,this.buildRadioInputs(d[h],h).appendTo(i<=c?e:a)},getLangBoxes:function(){return this.getContentElement("langs","langBox").getElement()},contents:function(a,e){var b=[],d=e.config.scayt_uiTabs;if(d){for(var c in d)1==d[c]&&b.push(a[c]);b.push(a[a.length-1])}else return a;return b}(k,f)};return j}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css b/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css deleted file mode 100644 index ecabdac9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css +++ /dev/null @@ -1,71 +0,0 @@ -a -{ - text-decoration:none; - padding: 2px 4px 4px 6px; - display : block; - border-width: 1px; - border-style: solid; - margin : 0px; -} - -a.cke_scayt_toogle:hover, -a.cke_scayt_toogle:focus, -a.cke_scayt_toogle:active -{ - border-color: #316ac5; - background-color: #dff1ff; - color : #000; - cursor: pointer; - margin : 0px; -} -a.cke_scayt_toogle { - color : #316ac5; - border-color: #fff; -} -.scayt_enabled a.cke_scayt_item { - color : #316ac5; - border-color: #fff; - margin : 0px; -} -.scayt_disabled a.cke_scayt_item { - color : gray; - border-color : #fff; -} -.scayt_enabled a.cke_scayt_item:hover, -.scayt_enabled a.cke_scayt_item:focus, -.scayt_enabled a.cke_scayt_item:active -{ - border-color: #316ac5; - background-color: #dff1ff; - color : #000; - cursor: pointer; -} -.scayt_disabled a.cke_scayt_item:hover, -.scayt_disabled a.cke_scayt_item:focus, -.scayt_disabled a.cke_scayt_item:active -{ - border-color: gray; - background-color: #dff1ff; - color : gray; - cursor: no-drop; -} -.cke_scayt_set_on, .cke_scayt_set_off -{ - display: none; -} -.scayt_enabled .cke_scayt_set_on -{ - display: none; -} -.scayt_disabled .cke_scayt_set_on -{ - display: inline; -} -.scayt_disabled .cke_scayt_set_off -{ - display: none; -} -.scayt_enabled .cke_scayt_set_off -{ - display: inline; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png deleted file mode 100644 index c67f64ddebbb427841df12e95e00bddc3ed8affe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%InL9?F(l&f+v#WXZo3H_um7!>>8UN$vOvBqR^f%O(Sz+Lv{_zc zKgs2JGVRHn)&6zOhuRvWN`t?ID3&$4^eIdhIeGW3qmb^YO)figFEGhAFr2*k^vs{< z_Qu|YH8nXun;x|)gm&G#I@N2cQ=R8yhPs!L+=?m<0!)f5UYbjEem|Xa*pj_r%BOjC zlP#Waxc2Dpl|2zR);~9Q;%HJ>a5XEjN3+M`xyPiIj}<%)n{Vp8TrJ^0spVpZi_Gx{ zf4@YPIcU1BzWV6H2Z3asDF4vPd6QK*#l^)d-dkE&%*ea4YZ7ziJm!M3vSTW~8#h0n z#O%beWQs(x!Lbe7x4Z9+V^{DEW@~126qummnYmdYsdnGq^vP2WO$b`Fby?hcaXuY4 zX;;C&b@L5)wtG2>xbn0gZgN+hJ$2tFelJeO=Q2RsmSuj_^S!LppD1zZZ5emSswD{% znF}W+Ob@v5xwUwkn&+Veg9Tx$87HJheykI1sh4KD7Ip0L$GtN8(;q&4`t(}rjy~q^ zS(!6;ettD$@+ZUI6+%p2nuiRQTz~B=>TRjF>qgriefHo^=Fk-B!~ISNqJFQiy07wo zuARa217@ZBJXaMwxZix>zf8pO#>&<AOyZs=*B0K7f5+S{zjD(x%l4ow)5dU?4HKEK zS?1;EzbxH7)$jcB<;%4=nl9;dKAtgqw)7>P!&UvliyVrTna)`*S~~fH)z6=Qt6xPa ziwn$<_nP}%f#saUC!NFErO$yeB**^Xolp7acXQ8e>RBJRC!+Jn`}}(=Ucb(+tN6Jo zXy3WMz6-r>Un2u<-*nU|Sa>yy(Lkz~Yj2*Jw(`?74pBaf=Mw$L=ggl!{n_5H^8%+C zzWUzzSi;_W-lZtUiubw)^w-BLOYzp(SY6UPEw@HOk!4fZVlftl)SHbKeV&)M{P1Kf zIN;)C73g9z^Nwr6>6smuMN)abs{4m+sy)elWKGQ1q)tx76Pwm-xyJ3d%=BD!$l`<R z^Y6cUUtaE*&Hup9?@PYC-Gbi6_EY)2FDm)uMKnJidoXA5&AiX0%bV}qRn6JH{MFyu zZ&M%jpP#>TuFp0*bFTNbs@MK~c{TOlyPL+h&d-m&{PM%w%gcoxyn5_Dou|FW&+p3B z<^D@VXNL*KUu``Xb;ymmsUhD=c9x?<ahbos24m%S+nE3OKW%3T*d3H73Cw<~C9V-A zDTyViR>?)FK#IZ0z|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMb zFZUIwK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr074Mz A6#xJL diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/selectall.png b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/icons/selectall.png deleted file mode 100644 index 0d1e8160e422f8cc3615c2787a26fe0af53dcf06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<0elR#}JFtb0?qedgLI|dVcLGe#Z{!Rx|F_9}Ic5CGrlgn?A4} zX;4U0p3$}F+JBw2Ns`NNFPzDIw6)3V>)qnj85<)ij!9TNS5T^W|8Ot6U}MLJ?Q@C^ zjy?ETkzhAJ_<)4-Bo&X#B84)}*}R&n7SA~jZ!pg4T{<OW7Tfvf!VCfh=O!-GOxqk; ze)?g-ffS>I)@!e48yu^X5)gc3!N$PT?i`~huHxCWYSjc4PKjjM#;sz$mlv#Bbx!BQ zJ)nsU0!{}cn4inIExs7tbT;jCmcr5_FH4+eEi*Xg;MMv0XOBi#T+^0oP8=V-E~w2; zmE5=5pCz~8Z=L*{&)eDet7HiNpZaS%=OvT39Jl_4xqSI5@~=H%Yt%tY_V<6a9oJuP zo+1=Et+wj0YhVS#grG(1vOP2t*Z#F_wdbt++q#Z@t?AQBzjKybPD?PaHJxF|_Wif4 zYhc3eyGc7^wy9mY_WEnr!Gr}Z0zZEI2-tp`_wmPw$ZSClMFAGZSG(Rd1$ilUE$Zti z?%SlJ%y8pvnV?|l)IHy`_TP8E{4!)}s^rtkb$h-GCZB0f<XCIE=X;5b+`=hUGx-D` zvP*L)Cd<?aW&op9wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxNy85(ID7+Dz@ zDEB1fqiD#@PsvQH#H}Id;*HBd4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Rkpe1W@O1TaS?83{1ONfb43+=@ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/af.js deleted file mode 100644 index 3d9b5cbb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","af",{toolbar:"Selekteer alles"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ar.js deleted file mode 100644 index 076b910c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ar",{toolbar:"تحديد الكل"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bg.js deleted file mode 100644 index 5e776748..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bg",{toolbar:"Избери всичко"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bn.js deleted file mode 100644 index 4c7aaab6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bn",{toolbar:"সব সিলেক্ট কর"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bs.js deleted file mode 100644 index 0deb72ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bs",{toolbar:"Selektuj sve"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ca.js deleted file mode 100644 index a573f9ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ca",{toolbar:"Selecciona-ho tot"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cs.js deleted file mode 100644 index 76a56f6e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","cs",{toolbar:"Vybrat vše"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cy.js deleted file mode 100644 index e258fc79..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","cy",{toolbar:"Dewis Popeth"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/da.js deleted file mode 100644 index 978f67eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","da",{toolbar:"Vælg alt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/de.js deleted file mode 100644 index 2480c37b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","de",{toolbar:"Alles auswählen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/el.js deleted file mode 100644 index cd6289d4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","el",{toolbar:"Επιλογή όλων"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-au.js deleted file mode 100644 index 8aaa34a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-au",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-ca.js deleted file mode 100644 index 6cabe918..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-ca",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-gb.js deleted file mode 100644 index f60eec16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-gb",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en.js deleted file mode 100644 index 02b4c755..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eo.js deleted file mode 100644 index 96f1f9a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","eo",{toolbar:"Elekti ĉion"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/es.js deleted file mode 100644 index 06ba9825..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","es",{toolbar:"Seleccionar Todo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/et.js deleted file mode 100644 index 57f14c9f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","et",{toolbar:"Kõige valimine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eu.js deleted file mode 100644 index 565c55fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","eu",{toolbar:"Hautatu dena"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fa.js deleted file mode 100644 index 60e13da7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fa",{toolbar:"گزینش همه"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fi.js deleted file mode 100644 index 321333df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fi",{toolbar:"Valitse kaikki"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fo.js deleted file mode 100644 index e622ef95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fo",{toolbar:"Markera alt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js deleted file mode 100644 index 01b42a4a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fr-ca",{toolbar:"Sélectionner tout"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr.js deleted file mode 100644 index c9f76af2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fr",{toolbar:"Tout sélectionner"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gl.js deleted file mode 100644 index 358664fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","gl",{toolbar:"Seleccionar todo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gu.js deleted file mode 100644 index 706e9b66..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","gu",{toolbar:"બઘું પસંદ કરવું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/he.js deleted file mode 100644 index 2724c2f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","he",{toolbar:"בחירת הכל"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hi.js deleted file mode 100644 index ecbfee9b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hi",{toolbar:"सब सॅलॅक्ट करें"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hr.js deleted file mode 100644 index 6ab1881f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hr",{toolbar:"Odaberi sve"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hu.js deleted file mode 100644 index 974e4c97..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hu",{toolbar:"Mindent kijelöl"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/id.js deleted file mode 100644 index e2100e09..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","id",{toolbar:"Pilih Semua"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/is.js deleted file mode 100644 index 6c3f1da8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","is",{toolbar:"Velja allt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/it.js deleted file mode 100644 index b7d1fef1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","it",{toolbar:"Seleziona tutto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ja.js deleted file mode 100644 index b1412bd8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ja",{toolbar:"すべて選択"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ka.js deleted file mode 100644 index 6cabf825..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ka",{toolbar:"ყველაფრის მონიშნვა"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/km.js deleted file mode 100644 index 66d61a0b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","km",{toolbar:"រើស​ទាំង​អស់"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ko.js deleted file mode 100644 index a2266087..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ko",{toolbar:"전체선택"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ku.js deleted file mode 100644 index 3ee967ee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ku",{toolbar:"دیاریکردنی هەمووی"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lt.js deleted file mode 100644 index 3cdae278..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","lt",{toolbar:"Pažymėti viską"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lv.js deleted file mode 100644 index c2b56418..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","lv",{toolbar:"Iezīmēt visu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mk.js deleted file mode 100644 index 5554a70e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","mk",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mn.js deleted file mode 100644 index b4d8c5d7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","mn",{toolbar:"Бүгдийг нь сонгох"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ms.js deleted file mode 100644 index ffb407e2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ms",{toolbar:"Pilih Semua"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nb.js deleted file mode 100644 index 3ed5bb79..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","nb",{toolbar:"Merk alt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nl.js deleted file mode 100644 index 3e1f78d1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","nl",{toolbar:"Alles selecteren"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/no.js deleted file mode 100644 index 3891eb16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","no",{toolbar:"Merk alt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pl.js deleted file mode 100644 index 56401f6c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pl",{toolbar:"Zaznacz wszystko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt-br.js deleted file mode 100644 index 75ef18c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pt-br",{toolbar:"Selecionar Tudo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt.js deleted file mode 100644 index 4c40e123..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pt",{toolbar:"Selecionar Tudo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ro.js deleted file mode 100644 index 0c6248dd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ro",{toolbar:"Selectează tot"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ru.js deleted file mode 100644 index f59e8f68..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ru",{toolbar:"Выделить все"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/si.js deleted file mode 100644 index 81a7dfe2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","si",{toolbar:"සියල්ලම "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sk.js deleted file mode 100644 index 7620a61b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sk",{toolbar:"Vybrať všetko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sl.js deleted file mode 100644 index c95244f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sl",{toolbar:"Izberi vse"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sq.js deleted file mode 100644 index 7641363b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sq",{toolbar:"Përzgjidh të Gjitha"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js deleted file mode 100644 index 5a138647..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sr-latn",{toolbar:"Označi sve"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr.js deleted file mode 100644 index 8f9a8b79..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sr",{toolbar:"Означи све"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sv.js deleted file mode 100644 index ef0fdc2b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sv",{toolbar:"Markera allt"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/th.js deleted file mode 100644 index 04e0757c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","th",{toolbar:"เลือกทั้งหมด"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tr.js deleted file mode 100644 index 296f3d78..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","tr",{toolbar:"Tümünü Seç"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tt.js deleted file mode 100644 index c1ff772b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","tt",{toolbar:"Барысын сайлау"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ug.js deleted file mode 100644 index a9a57e95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ug",{toolbar:"ھەممىنى تاللا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/uk.js deleted file mode 100644 index debd35bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","uk",{toolbar:"Виділити все"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/vi.js deleted file mode 100644 index 4a364aaa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","vi",{toolbar:"Chọn tất cả"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js deleted file mode 100644 index 905c2db4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","zh-cn",{toolbar:"全选"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh.js deleted file mode 100644 index 6d2db4e9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","zh",{toolbar:"全選"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/selectall/plugin.js deleted file mode 100644 index e5ca1512..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/selectall/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("selectall",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"selectall",hidpi:!0,init:function(b){b.addCommand("selectAll",{modes:{wysiwyg:1,source:1},exec:function(a){var b=a.editable();if(b.is("textarea"))a=b.$,CKEDITOR.env.ie?a.createTextRange().execCommand("SelectAll"):(a.selectionStart= -0,a.selectionEnd=a.value.length),a.focus();else{if(b.is("body"))a.document.$.execCommand("SelectAll",!1,null);else{var c=a.createRange();c.selectNodeContents(b);c.select()}a.forceNextSelectionCheck();a.selectionChange()}},canUndo:!1});b.ui.addButton&&b.ui.addButton("SelectAll",{label:b.lang.selectall.toolbar,command:"selectAll",toolbar:"selection,10"})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sharedspace/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/sharedspace/plugin.js deleted file mode 100644 index 66cd775f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sharedspace/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function f(a,b,c){var e=CKEDITOR.document.getById(c),d;if(e&&(c=a.fire("uiSpace",{space:b,html:""}).html))a.on("uiSpace",function(a){a.data.space==b&&a.cancel()},null,null,1),d=e.append(CKEDITOR.dom.element.createFromHtml(g.output({id:a.id,name:a.name,langDir:a.lang.dir,langCode:a.langCode,space:b,spaceId:a.ui.spaceId(b),content:c}))),e.getCustomData("cke_hasshared")?d.hide():e.setCustomData("cke_hasshared",1),d.unselectable(),d.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a", -1)||a.preventDefault()}),a.focusManager.add(d,1),a.on("focus",function(){for(var a=0,b,c=e.getChildren();b=c.getItem(a);a++)b.type==CKEDITOR.NODE_ELEMENT&&(!b.equals(d)&&b.hasClass("cke_shared"))&&b.hide();d.show()}),a.on("destroy",function(){d.remove()})}var g=CKEDITOR.addTemplate("sharedcontainer",'<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko?" ":"")+'" lang="{langCode}" role="presentation"><div class="cke_inner"><div id="{spaceId}" class="cke_{space}" role="presentation">{content}</div></div></div>'); -CKEDITOR.plugins.add("sharedspace",{init:function(a){a.on("loaded",function(){var b=a.config.sharedSpaces;if(b)for(var c in b)f(a,c,b[c])},null,null,9)}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png deleted file mode 100644 index c88abcb6dbe1362cb3be93c109f0f3ecd9fd9a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1853 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png deleted file mode 100644 index a776fcc139f14c017dff59998bf3d9b3d5ca9832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png deleted file mode 100644 index cd87d3e258e38e656379acb146f4c8744906752c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;~7sE#}JFtwUd1FlpJ|l?Zd;p73!o^^d@qj>0&*t^W39=flq*M zLXJB35|4>D(mNL&=!#L$5_567%d$P)F`U~YO~-ccq*y)s-8%B}@?U<}PEuh!aOTGQ z?<=&@!hX9vX*%0ubN=D$*W3vldqO0_Iv+p&$YG$@^{8p}oI(!9=X=>_tP9hQT^q*b zvwGFE=ay+{yYIeh>RxnUl~!En%db`Y^YZfQn0eTm?HQDmZoi!-aL6U}=bt}w7~XvU z?YaE&!n=9i9E{6XZMmHr@^z!m>EmImMSpL*@!Is%rZu7##*Ygu9?WredE_%;vZB(Q z=r5k41xikl(@Gse^+k>>Defy|VE^jR5a25(I8nv(!@YXvrC|(zDnlPQInH}-@jR<F zt*w~vy=_|B?YG}{H+_~gk>cHT_npOQqfI)}>5*>RZ_Ap`K3nDXm1oh>;x`}b-|V&j z`ex4R{cCRK9J4O8e#^dx;qc>+6+r>H$_$yajy*2f8@GC<==F&8*SUNqt61s=&03bP zRHUu6{oe2GKd$AN&1T-4edq4ovyCC4iY*5|fBww;foqSRST}p<)0Zz_%0>KJ-1@Y} zZa=@`fwavB&$y*+TVqgFUvK~YseM9b+TycmhvN<1`X{_fS-%(<*{UV35hW>!C8<`) zMX5lF!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7CIlo6x%nxXX_dG&*!*NZ0@NT0 uvLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWA_h-aKbLh*2~7Z2s30u> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png deleted file mode 100644 index 41b5f3466d295c381a785f9a68c65a1f2f45576a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<26qg#}JFtt&=zUJ$4XrJ>PR&Nb#WG#Q7)qb6g!gcg~+u<6y^N z$8hVeQjm&D)hUjNA)cP;6CAh<zkR-|v~BW+HQzkLugjgUe!tH;`TL(gXHK5vJZCwl z*uyG`;kitpNMTjgt#vac*RNkcAyx9g3JtD?z<JNzW2UJd@DMs+`61x(9t|#=29>9k zeJXqR?v?#mw%fJT%pg)nY+Hm5&x{rUj;$`=KYenVmYQt*`0w9Zo((s1j-{ukf2p!n z?>w0BA=yIaAIppHzxSWX33r&ZNyk~}ciNWsy-j)By+cFyt6qHl)nM~ojy&<Tj=m<@ z>;46Zu%5Hr^S!37PAT*K!Ng07@>&L)w`GKe?oR4udT*=PvR}Y8aP<N^K`GM%_nQ0r z`4?$qX?q{4_Ln*C&NVCJ%8#^Te#@OFsVp|}^}Jj%Wtpbuq@Gva&-ixB+5Hx9y8W;| zCNwm9LEx=3SMM0qHnTs75t{4ge)eM3`_O5sc3nyhCyREPc>WC6neNT3#!x7;oy&>C znm;S~(dyN!H81?{dj0yfroeSi|8qONpWjK9Iqsjf?f1-OmtXQ4{6Eg|`DRX8a@w8y z_wO_HA9#HC?%mvJsT-o!PAE~#)XV(M`)rclwbx%C?%TPf`)bxv`9Ohk3#limi-6It zTH+c}l9E`GYL#4+3Zxi}3=EBR4a{{7OhOFJtqhETNZY{3%D}*P$!=hhK+=$#pOTqY ziCcrsPv#>)4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe1W@O1TaS?83{ F1OVJ@CKLbw diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_address.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_address.png deleted file mode 100644 index 5abdae127953d052a36ca481023730baf8e10461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^IzY_N$P6Tx7VW<Uq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMIndrud~5RU7~KlqvCB?4CNuN7<8ZM?GWcHwn9gFm;vTD`OGs4A4v z_>p{l_3!U?1~ulpOZhdv&pm(ZrckW485hHzLf=y^Oa(`QMlpE0`njxgN@xNAlu9>b diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png deleted file mode 100644 index a8f497353cc5abb02cb78b7eba55772e1f5db540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?p$P6U=5BZe>DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11})Y(bL5-gyVYh4}L~=2?I&_?;_8ie6x^G__3`z_sgwKzZH&EWg9$J zo>3^H!!)^R)z2HjbAs=bOXQrh-_iK(#@Yr$22;7jhW_~%%z%b5c)I$ztaD0e0sySo BH~atq diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_div.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_div.png deleted file mode 100644 index 87b3c17146e79e8dcced15939f24a0f16ad50c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g$P6S6r-*3)DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?&C|s(gyVYhkN^MKnR)8>#2x&=+p)i$x$p|V!M`$YjXLp#Y@Eyt Y)8}f)Oi$*s1L|P#boFyt=akR{0Dd1P761SM diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h1.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h1.png deleted file mode 100644 index 3933325c08f3f4eacec46c97600f7cba01ead54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA;PZ!4!j_b)k{_k&OY}>z={n2NEUx%wT<XifcuP7ukc%-SMS-AdN Q2UN=7>FVdQ&MBb@0O>s@^8f$< diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h2.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h2.png deleted file mode 100644 index c99894c2650ae1745e0e4156d775fe84d00efff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA4PZ!4!j_b)k{_k&OY}-GV{n1;8KYJS=G7HpK^B?)%xI=a!8z(b^ X<u&DZ{25UKKphO8u6{1-oD!M<Atou6 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h3.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h3.png deleted file mode 100644 index cb73d679eb840b9728569b27d8b1933af47aa689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9<PZ!4!j_b)k{_k&OY}-GV{n1;8KYJS=9<JozeKy~Hh2tRx^J&WO U_J-v4097-1y85}Sb4q9e0HQJ~U;qFB diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h4.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h4.png deleted file mode 100644 index 7af6bb4984d8448881d5461a33db46165416381d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V$P6Sed+-JVDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$<xI#gyVYhkN^J}n0e}}`Hoyy{BgKU;V#dS`-&2gvLeh3i~Q6V U{nM`54OGqG>FVdQ&MBb@02`Vnr2qf` diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h5.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h5.png deleted file mode 100644 index ce5bec16cfa84d461672f8b0721911d90a06e445..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsAaPZ!4!j_b)k{_k&OY}>z;`D2~JyZnS78)QA|*^>ln<rcDWGBZeq WDeL7Kzjp&_VDNPHb6Mw<&;$UjttQd{ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h6.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_h6.png deleted file mode 100644 index e67b982985ca30ae46dae8049c0f99a35dfc2930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9<PZ!4!j_b)k{_k&OY}-GV{n1;8J^LFUI@?d#E34GEhOdiJ-c8wT T>#|GfK-CPMu6{1-oD!M<c8e&f diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_p.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_p.png deleted file mode 100644 index 63a582024687b942afac422016a0ac37e3e9d827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm`3?y0KUN-?!YymzYt_=+h|NsAgeyw*6P=u)@ z$S?Rm!_(~sUO=9dr;B3<$MxhN|C<?`?EWPDh+}k8VB`7g?#NJdT*jnn@n&V9Dh5wi KKbLh*2~7a>|04nb diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_pre.png b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/images/block_pre.png deleted file mode 100644 index 955a8689a13a394a9e715673d23750a6847eb617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^VnEE#$P6TJEnce)q}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMInbx#+^5RU7~KmPycXXdGYvoZ0<wy*pW^>0=t{@C}8pCx}|qC*(_ aQHD7O)qh-UDHQ^0VeoYIb6Mw<&;$Unq%6+> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/af.js deleted file mode 100644 index f54ef175..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","af",{toolbar:"Toon blokke"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ar.js deleted file mode 100644 index a3b135a9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ar",{toolbar:"مخطط تفصيلي"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bg.js deleted file mode 100644 index ec8b4f9c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bg",{toolbar:"Показва блокове"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bn.js deleted file mode 100644 index 8f38cf2c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bn",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bs.js deleted file mode 100644 index 91d8620a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bs",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ca.js deleted file mode 100644 index 4a23bd67..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ca",{toolbar:"Mostra els blocs"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cs.js deleted file mode 100644 index e935394c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","cs",{toolbar:"Ukázat bloky"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cy.js deleted file mode 100644 index 4fea60e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","cy",{toolbar:"Dangos Blociau"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/da.js deleted file mode 100644 index 1c077f17..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","da",{toolbar:"Vis afsnitsmærker"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/de.js deleted file mode 100644 index 730add99..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","de",{toolbar:"Blöcke anzeigen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/el.js deleted file mode 100644 index 67fc843d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","el",{toolbar:"Προβολή Τμημάτων"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-au.js deleted file mode 100644 index 02fd8d37..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-au",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js deleted file mode 100644 index 2ddff41c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-ca",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js deleted file mode 100644 index 6398feaa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-gb",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en.js deleted file mode 100644 index 2457fa4b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eo.js deleted file mode 100644 index 42775ae7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","eo",{toolbar:"Montri la blokojn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/es.js deleted file mode 100644 index eae41486..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","es",{toolbar:"Mostrar bloques"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/et.js deleted file mode 100644 index 18f1c0d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","et",{toolbar:"Blokkide näitamine"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eu.js deleted file mode 100644 index 0efa1bea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","eu",{toolbar:"Blokeak erakutsi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fa.js deleted file mode 100644 index e290b63d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fa",{toolbar:"نمایش بلوک‌ها"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fi.js deleted file mode 100644 index a2e20e26..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fi",{toolbar:"Näytä elementit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fo.js deleted file mode 100644 index cea7058d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fo",{toolbar:"Vís blokkar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js deleted file mode 100644 index be37ca35..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fr-ca",{toolbar:"Afficher les blocs"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr.js deleted file mode 100644 index 49bf9394..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fr",{toolbar:"Afficher les blocs"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gl.js deleted file mode 100644 index b9f240c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","gl",{toolbar:"Amosar os bloques"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gu.js deleted file mode 100644 index a8e7fd6c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","gu",{toolbar:"બ્લૉક બતાવવું"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/he.js deleted file mode 100644 index 7d128462..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","he",{toolbar:"הצגת בלוקים"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hi.js deleted file mode 100644 index 68904f2d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hi",{toolbar:"ब्लॉक दिखायें"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hr.js deleted file mode 100644 index d6af592d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hr",{toolbar:"Prikaži blokove"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hu.js deleted file mode 100644 index cda541b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hu",{toolbar:"Blokkok megjelenítése"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/id.js deleted file mode 100644 index 96c293cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","id",{toolbar:"Perlihatkan Blok"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/is.js deleted file mode 100644 index 88a3ff5a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","is",{toolbar:"Sýna blokkir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/it.js deleted file mode 100644 index 38e578fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","it",{toolbar:"Visualizza Blocchi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ja.js deleted file mode 100644 index a9c9736a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ja",{toolbar:"ブロック表示"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ka.js deleted file mode 100644 index 908e8002..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ka",{toolbar:"არეების ჩვენება"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/km.js deleted file mode 100644 index d6ca8298..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","km",{toolbar:"បង្ហាញ​ប្លក់"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ko.js deleted file mode 100644 index 67187345..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ko",{toolbar:"블록 보기"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ku.js deleted file mode 100644 index 2a3a1282..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ku",{toolbar:"نیشاندانی بەربەستەکان"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lt.js deleted file mode 100644 index 66368a41..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","lt",{toolbar:"Rodyti blokus"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lv.js deleted file mode 100644 index 12c328c1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","lv",{toolbar:"Parādīt blokus"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mk.js deleted file mode 100644 index a34e8a23..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","mk",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mn.js deleted file mode 100644 index 778ad5d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","mn",{toolbar:"Хавтангуудыг харуулах"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ms.js deleted file mode 100644 index c6ab5f2d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ms",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nb.js deleted file mode 100644 index 8bfdf0e1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","nb",{toolbar:"Vis blokker"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nl.js deleted file mode 100644 index 22190dbd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","nl",{toolbar:"Toon blokken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/no.js deleted file mode 100644 index 75702788..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","no",{toolbar:"Vis blokker"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pl.js deleted file mode 100644 index 3168b3c5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pl",{toolbar:"Pokaż bloki"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js deleted file mode 100644 index 3ac0ef74..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pt-br",{toolbar:"Mostrar blocos de código"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt.js deleted file mode 100644 index 5afaf8e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pt",{toolbar:"Exibir blocos"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ro.js deleted file mode 100644 index e4dadf0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ro",{toolbar:"Arată blocurile"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ru.js deleted file mode 100644 index 9620b9d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ru",{toolbar:"Отображать блоки"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/si.js deleted file mode 100644 index f67dff30..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","si",{toolbar:"කොටස පෙන්නන්න"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sk.js deleted file mode 100644 index dee77c9a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sk",{toolbar:"Ukázať bloky"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sl.js deleted file mode 100644 index 52fca0bb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sl",{toolbar:"Prikaži ograde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sq.js deleted file mode 100644 index 88405f28..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sq",{toolbar:"Shfaq Blloqet"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js deleted file mode 100644 index 3c1551b9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sr-latn",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr.js deleted file mode 100644 index 127878d5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sr",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sv.js deleted file mode 100644 index a05b6ccb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sv",{toolbar:"Visa block"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/th.js deleted file mode 100644 index 9b3951cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","th",{toolbar:"แสดงบล็อคข้อมูล"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tr.js deleted file mode 100644 index 060da3aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","tr",{toolbar:"Blokları Göster"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tt.js deleted file mode 100644 index 519e6f7b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","tt",{toolbar:"Блокларны күрсәтү"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ug.js deleted file mode 100644 index c44b6605..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ug",{toolbar:"بۆلەكنى كۆرسەت"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/uk.js deleted file mode 100644 index ca9f51c4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","uk",{toolbar:"Показувати блоки"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/vi.js deleted file mode 100644 index 43566240..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","vi",{toolbar:"Hiển thị các khối"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js deleted file mode 100644 index abee734d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","zh-cn",{toolbar:"显示区块"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh.js deleted file mode 100644 index 84c1e7eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","zh",{toolbar:"顯示區塊"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/plugin.js deleted file mode 100644 index 48060bcb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/showblocks/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var i={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state==CKEDITOR.TRISTATE_ON&&(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE||a.focusManager.hasFocus)?"attachClass":"removeClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn", -icons:"showblocks,showblocks-rtl",hidpi:!0,onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),c,b,e,f,i=CKEDITOR.getUrl(this.path),j=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),g=j?":not([contenteditable=false]):not(.cke_show_blocks_off)":"",d,h;for(c=b=e=f="";d=a.pop();)h=a.length?",":"",c+=".cke_show_blocks "+d+g+h,e+=".cke_show_blocks.cke_contents_ltr "+d+g+h,f+=".cke_show_blocks.cke_contents_rtl "+d+g+h,b+=".cke_show_blocks "+d+g+"{background-image:url("+CKEDITOR.getUrl(i+ -"images/block_"+d+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(b,e+"{background-position:top left;padding-left:8px}",f+"{background-position:top right;padding-right:8px}"));j||CKEDITOR.addCss(".cke_show_blocks [contenteditable=false],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable=false],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable=false],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")}, -init:function(a){function c(){b.refresh(a)}if(!a.blockless){var b=a.addCommand("showblocks",i);b.canUndo=!1;a.config.startupOutlineBlocks&&b.setState(CKEDITOR.TRISTATE_ON);a.ui.addButton&&a.ui.addButton("ShowBlocks",{label:a.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(a.on("focus",c),a.on("blur",c));a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&& -b.refresh(a)})}}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js deleted file mode 100644 index b202d3ee..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,i,k=function(j){var c=j.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);i.hide();j.data.preventDefault()},n=CKEDITOR.tools.addFunction(function(a,c){var a= -new CKEDITOR.dom.event(a),c=new CKEDITOR.dom.element(c),b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:if(b=c.getParent().getParent().getNext())(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:k({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0); -else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['<div><span id="'+d+'" class="cke_voice_label">'+a.options+"</span>",'<table role="listbox" aria-labelledby="'+d+'" style="width:100%;height:100%;border-collapse:separate;" cellspacing="2" cellpadding="2"', -CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':"","><tbody>"],l=h.length,a=0;a<l;a++){0===a%g&&d.push('<tr role="presentation">');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('<td class="cke_dark_background cke_centered" style="vertical-align: middle;" role="presentation"><a href="javascript:void(0)" role="option"',' aria-posinset="'+(a+1)+'"',' aria-setsize="'+l+'"',' aria-labelledby="'+m+'"',' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', -n,', event, this );">','<img class="cke_hand" title="',e.smiley_descriptions[a],'" cke_src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'" alt="',e.smiley_descriptions[a],'"',' src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":"",'><span id="'+m+'" class="cke_voice_label">'+e.smiley_descriptions[a]+"</span></a>","</td>");a%g==g-1&&d.push("</tr>")}if(a<g-1){for(;a<g-1;a++)d.push("<td></td>");d.push("</tr>")}d.push("</tbody></table></div>"); -e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png deleted file mode 100644 index bad62eed46816b7754cdf8aada26635a638438b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3073 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 C>)n3< diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/smiley.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/icons/smiley.png deleted file mode 100644 index 9fafa28a81a520e1662cb1662f19af8b64ae1e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(^^j##}JFtwUhUE3unq4v(Gom6neg?C6g&r#ruZVqVfrQuO<a@ zb1Sy`ZrHfdtJJq^a`vUjywaB6+&ax1*Ox>x-@2jU!fq7&#?hwqbGG`<y_}P0KIc+z zk15o*Is5tP&zkxJ*){i%OEjlO-q?2b-aWbh->02cU46CdZCSU9PBPEVn7*Wq9l5t9 zlJ_y!G4(abU%DgxK(s(f^F-R_n3xy=S3$|soA&YEXLUQ9_W59e#Tt)Oo~L-*4|{FC zS;NrNV_2Shds&1|Ql!|K=fx_Fci5Jle)=iqQs)xuNnR`8d00j2O@DqsWQT6&&l<i$ z8Ri=YmMd`Bd09<4QnowQY_{R-v;XdfUrH2Uk#DqTwC+nTySw{tp813lmOISn8kT2r zJji@?cXG*<w`I%=v|nm3h+4bv{rBJcDuG&4{iJ)_WR7<>$V@1fQO`1w(wgeEe9{Y` z<f^N$sy$O4S)^@@h*^96^?4OT2_C)EPd8QVjoUMO!S&ZipB6<nAAArb^tI~m&7_Sx zq>dZ91iGvZyIp2AH+%M3HqYy-fAwB|EU`+pnyd7(@Kx;n9J3Oj)Yhn6X;;CPM32>1 zca_LIpQtiPg>lEG*Z<DSu2b=BQjs}cc_nMB-eCh3;WovoUPrg<yjE;5WP5N$;`3(1 zXBQ+s?=^fT{vb8#@TN8GKxzKN0&0^vC(V2E`KM@sPAAYU3!~P~V^sX`{olWT@~^+% z@>RDy_x!WAr$12HkA3}1{$!X~F`o-Q!RvWmwbt`%%q89j5*G5kZt0Ug?R($+ywduF z@AcC31L+UUAJ_%>mD+!`+r7?ua>?cIwKnH}b4m0cw?3ik8MpgxUATtGJtppiKp?g4 z_S^DFHlEvS?x)+xJ+72f<DI0!StwInP!Pay>p=hipS|lF<72P?)t-HJ(#aHqV;}e* z7hm<A7PsOAFg2@|xJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4HZZa>Fz{Wn z8<^6OH00)|WTsW()?o9K`3O*hB*=!~{Irtt#G+J&^73-M%)IR4<ivthz5Jr|+3#$m QfQlGAUHx3vIVCg!0FHZ-4gdfE diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif deleted file mode 100644 index 21f81a2fab5b772bf1dcef0fe0a5f1965a08927d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 zcmeH`{ZrBh9Du(lA_^p;f{GZh*>#>vg-WcpVe_qxHdcBkoV$~DTj}X$YrA=EDa>g& z&*{`%<>ta9P8XRelEYV&Qp))T8!O927}m5CoeM?2-_Nc;VZZPB{rTm&dom8C3zB6F zgn_sb<Xj$dPKLDP`>2b2H6P=zl~MZ2{D;a2Jzo;_r2&>&;$%H}zL_%76gqX0@u-<J zuM2=yU%2cGt^T0#gEl|7Oj^?h!Ouj{lHeK%x`RL$v^KQu;U(&Vmf`GRKsybtFwv_l zM?cNcAL8tabn2LkJyFgZEVw~iAEbgI1p2~YkO6w8yDuDu!eM}gb#c(HIOyhsZa3DK z2z`5@M*#YLV0aZBcztD<ymFJeHXiCWMZ<77j7EZqiH=6WSoFF%0>-14#&){LIjEU~ z{`wM3?SSc*!4~Ve7Z3Mdf&1~x6Z=q8qI-&m&LnNkC4f}`c0OuIfq}PSP>kJr(`yuC z4|2V?3tiScn0tS9uFz{cwed$W*h;{12D6ody#O4iVet%1%fWIM?pA=c3g#|ge>QvP zFJkjQtvf0)XEiL;V#~Ger$2(@61Jq;c&70#x5Hl@n5z{W-LTN(eXIwk0hW3_t}f4N zH~P;Y_WYLDZARU9yc=e8;|{D?QO_*qv0xq>tlov^53sF=nAZ-Qi<tK@c%A^d4A|d* zZ32cO|MMRUa5nKc1ZhIzUU)B_5E22|6A+czsWK|ccv-Sp^`UwMCr5BpB%RFQv7fp4 z)P@>LTo&>ABenv;5hD-eD`W%;^8#U8LFm)N%ET{bOMdwzM#Rc2N$sz)D(i+t+^<6; zMzWL^_O4tV(X1G)7I2TzCUkA-_`t9PaUGR&uqI7P;vKVQ(lo+Cy^?yp;xJp3%1n$U z5~|K8e@={%UP+o!?LTE=<M;^;bVdeuyX1&UUeEo$N|bH%o1|a;ke5p78ZIZ%IoWL` zs=PM{(URW_KMRqS7g2ioPddbkgZQNUpn}_}{k^X8Z+A)zjRBUJw;Ce@-cgSSYci6H z8}0n|devUZrw0rp3(A=m#gX;Sw5+yT)}9m7>XwEvaqHG;_3p{Uif_K#{+dwiL(8l~ zQi51oVP#aZx~DQw6vvSTQk(O95Jb)nBOO1_nJea!Ig;SC)ZmJvV&TcAf_S9<w_>Ss z!Fu%FBF$Gt%=@kix^y$en7>OUl;g;`#W-JovP<#Nd&=P%VRcTYq98WTj;H4cPMQd^ qnmi+y@WBWnC*p*PN$AgJ8}Wts<J29c+LoKSQmy^$4?cc)WdFZHf$Ek3 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angel_smile.png deleted file mode 100644 index 559e5e71a3415ea24f23cedb9b88cc1862a569df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1172 zcmV;F1Z(?=P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DANkl<ZNXNC6 zSxlWp6vqjat?Y|sD-EbI+Gwz9v}s}*pKMIDeelJ^hZ-NWrbZKAjFF-bYSf1&#>BW_ zEeI{UvbD07r3Ffnvgoy?Q1G%SU|8D=m;24nGxOaGTuK^WeE28d%$)O^Gv}OdCcrtf z6!3q^ZvelAur~NC?*7*-x8pPAnW)2>y@6U<gf(TPzhzFZX&Y^8e8hKKI1KEv-2GoF z_rSCW<rxFD3X^rv{}D7Dfs!;^`diQGHL=mQ#z%au)&5VRH`WjCS?QX#R=UN&aS653 z#=<qIJplDjg5zD7E{D}AaQ_7}=i!>b8xGnw+E#qTx6NAZ!{h22^MkwRD=oA8+NhhM zuc0Vjc^vQHnJvO{zK0rqSx&tl21P@!!uUzJJq*q~C{9w^N3D&oYKD8E#^VQ{y>j64 z%0Gp^<6*hFv2Hb?=JQdr0-DN(u{Yr6F#*bElb@qzen8!pgRb_k`)P(|`KM*c@zVU@ zQD!<GWMSwy%g&E+{r#OpQ6(F7t~+mR-f7mfjkeW3GaV118Je{Y2co4aQ`GFoYTt*e z_c4~cQdsOvWbR@tBh}$J8xok7jkTN&@iG_2+=WOMo1<B7ie=@Gw^289(G0^9rVoCI z@fs+N!0LNSiv0jwz2C^ynaNkL1Q@y6_uy(x-x${?!v#^}E>Sw%8iBf}F)U&F;Mw$j zD3y<c9)b4UyROM|0y`RDG+CX-WM%5cxI9VPQq*t{{E~ojoRE%|+Gv(Aeej=Ye8G<3 za)zI*p8KfCi88XfGO;={HpXqcZE#%zoQp?YdJZ-6J%%MrAAEx1RA@`J=-30DUg_@+ zIqq;4+{n`F(2@ezAF;IwOie7D&%iTLs|-t+{_vJ$i;EJCPwi>8G_*Cv&Tn&)eZqP> z73<)t7)fgyo{>{`z$Goui=pJaHFZNe%9brq6K$eInPA%+aI_GjQ1$!pTt1FrZAwcv zS3iKCA_bD{RT95`5y@y?tUuHjtrY*y+z19vhKXMkluM^I9>l792E*D^&_g(@;7o`O z@oK7OH-&HQpgt#*k=!U2%VJq9jbZfL2%2+3`0>pk#!Hh7n6d~wEk{r#a$?Qe)Qa*G ztxZw=gdM$(PD{FBZRk;YPbE=%BAnC50y+J9AT{rYapjvt+}E@0KuW?<mC{L-4`Udb z<@<^3E0@E}4MIV<7{pkn=XE}HUb{2pX50&-kIVfc`hBn6sudDQaTuy-CstXyMS+|^ zGlX@=V<D6I49ay}utOKfGKH$Ni)Bt!A<pGH<xiFXN+j1sp>Q@t+gs!XVSI(L?MoyJ zaVTqyfltIloQp%fK%LWVpl5=`E>I+6?W28#ahGQfX$1<I8;};06y!@pg~4{Qi$WA< zgB1lq_IzHTZKG|qkNDp84c)ZKi&B^wQ+eH5x_9-@p{2j|oL<v5V*8&S=q($>nL>lU miK<1DUR8VN4sT7vR{aZh|2Vqsev4870000<MNUMnLSTZNH$#X3 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif deleted file mode 100644 index c912d99ba7840cdc66459fc8186b8ed643967875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmZ?wbhEHb6lV};_|CwfZ(<g2V;t{b5$EN+PmlGmF7rtP)^o<}=S?^-7&2csVZCY0 za?zaUt~tjcOQE~Af=?{DU)l0~He>v5$^6lp{j(L@cWd@v)@&bbIe*!4{<q_JXfHI~ z!+5%v`B5j?e-7L~9eDpc@jY-5eeW#%+D+=CgTQA;f$uKDpIk&fyNmyK7WnTf^wUlB zznjQE53!G)lApY!zI)01@s|1JEC1g|=B&T|>2R~Nk+whll|Kio{Rvd~AE5XvNcDG+ z>i=Ms|G{d%Lbd*fY5$AR{t>13KT_{~gu&-n<Nwiy|6`2*$C>_*H+!FG`#I74bCTuP zB&%;}cK;Kt{-#*|O11x=Vmmd`V`{YLg$%EY*?w0_qyDEmeam$Enc?_9!})Kn^WSWj z|Jm;Uvpv2P`g|?&{aWJxx5)p0ap1r5;6IhYe`>@3RY(7+kNR5^d#x(rMnn3E&cb_> z>%R77|L@5B*_;1$V*bCrqL;I4e@!g^Ke6=3^t#`(>wnE`_%W;D$Lz+xGaG-*YyGjH z{r94-zl(c+EbD)|YUZzHlm4%t{bI|~7u#0+*|PA@wncxpFa5i7`I`e<ejnca=kV6w zN4EYwvhC0D9luZP`g?lcpSxGSJ-YMv!HvHUZ+?IJ;QzA+KVLoj|LV#Acd!2c`ThUj zKZa32C<GLLvM@3*%xBO6DFo#S2af*?_M9>n7bZLUvj}rN5l-fsqRGU-@L~cBCwnJj z-5Z7}?);8k5-BGv91b-1YUkeLNorZz$j389s7h!`bAY^2{EmXc87!w3`TDacioDP~ z!=vQU$`aYte1w^Wm8Yjb(6w*ILQZSbOTui&x(%wON`o{$PZCzIQYd_6!Z~4@+Vl-# zDVtJ#r|HCO@_E?Fk~zVpYX;9(mS&Ghhl}rA33OKBm}Qms;Kc$(6``Jmy&8XBG#+M< zcAm;7btEL=sH8-1%D<Hii;i}QYB{z1Sdi${YM*@a)xEX1C#%>eCmfJ?>^>=`)j04$ zp-6|{OrvtH)Tk*=E1bO4-YjAKth(G;!?RCdLFZ=8R@J6{p9wp)pB@v^2$-Uv8N}?t zuQYR>jgnSd`=lSt9wDqk?g5Gy8LTfPuqlPtI!Oq)yL7aOdzy$H;dgSGxPaSErD&!@ z^&9~ge(|mY4vc&eAK8>=NhBTMip|(~++nW7!9#q~5sI@i+BGg57I1swCZZs^BjE|B sstbc7GndMS1FXUfMKXa?Bmx^*C2Kw~P7#uDJUJ!hEypqkMn(o}0F!L1cmMzZ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/angry_smile.png deleted file mode 100644 index c05d2be3a7972ec4f2d9f5354a9c1dae719d1805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmV;#1UvhQP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DwNkl<ZNXM;} zX>3$g6vq)-cAK&zV!#CqTMKRJ22-XBFbvCp1xi~f6p+QnASfX&h4R5DCScGI0!>sv zs_~1dwxE7MBPC)83Q80bAgxls*4UJ1JJXr>-p_O1Oq*6(gNZNs=e^u}&hMUk&w1ze z`mNFE)t!JCkw;W2sua~nR2do5xtN~(RXu@ySk~>(xi1O4`x-4T`nc;I<4C`COy|@_ zZSM;%hC@Wht-7li>(Xdhmrn3-8CK0n__G0;8nMowCUopgTDN35HfpOr>f0mS0o!(6 zpyDm=<_xz3hjw9}sm40K4}1T1cww1nDIC}VpOnL`TC6WV#F#(IRv-2K=K`JK#{(z! zW8_XGSn;-P9o_@a`=De#Y|ep=nXthH#p$pn1=h>^)CbUTlh#ccsIM~af$O<hwO6>C z8EXd*?6mDy3I*y3gSX6uO<C~F99TCS)}}(yOejo%{5W`Hi!4x&;Tdf!qjL_zRbiR8 zjp7vAHfLhJx>_R54o9nRjab3!1zemaQ76OGiBK>dR!xHylc4%2)~ORHLs{)rq;OBD zrWzwN7HhjN0&^1-;Dvk_O~tNo#O>hKi8QU6&IMmQ!4;EX`IEB9R3`_m8#7RrGTY&$ zf$}~0y<@{?svwDSjXRaNq-5enhrAL|Q8?m5o<wI%=hn=Y9XvGwmOh64o|I?#Zj`0W zc6epW_QeF%NE4-JDk@r-6Nb-B;b7qc0Vg;|aWLQGjOkpFH`@WTWE}R+T+FJYC`*~` z@cQNj4`JuWTdYo!ZO?QP)^cDg=k{*n_wrKA-38&~$@b0CJZDVjTK1PXU>3=)^Cn?_ z`?;+wWp;(<O|>YTL5Cz#t0V_oD?<~va!NRPQmXc<DOejM2TLCfgS`UGeFF33v3uZ^ ze{EYtaPhb>q(hRVJOQqp>_7v)$7!55hU=~&{E#$&Gt>I;-SlXhvWH3fMq;l|rET9< zl-2oIO8rN6<Ifo$jx3^(<e=6)f=elbsfml?o3x=^-00!PJG=Pf>nhqBZgHpT1n1(T zVBRpS=d$rXn@QkES(k)*LT5h1nBCvmGPx6IT|Az%64lQyujNj41+Bkcqr1mnUrWuj z-jFjC^QBx2X>7{sT#7N6q1%SkZ`-^P&N<f2ktjENwO{aW&z+MW@nb?X_R5I_3gS?P zvO0dE_TS&Uewk+10PKYiTjs*Ce4p5l({a(9&3c6MdC6QVS;CdFP24zGM*YW!Y5eL_ zF7GIyHl;u2vhh}P#z2(O<@fK>xQ^|`Nbig78EN4ijpZ37xfn*XJC+7l3^&sTaa~}) zBt>&^Mjx&wMiFxLvy9Z<sBgE8tE1&wR$buz*J+;Bk2d#%k|;^?+@W%&(&n>cAxkc& z%)#Iu2pRopOOK*if>9s!?Xl%X77!8@=Cz;X{1Pxyqwvc@!3;Sr_aNJzGr$hc>We?E z4@U9>j*Z%?kNV#4HMd+6)2Nx(($d=1pF^eJTDneEh>hC*r#rOMl_zZy?L<|gTM<=7 i#(dpfZTAKLKlC@^jn9nmDT4q20000<MNUMnLSTZFien!D diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif deleted file mode 100644 index 4162a7b24df8e235ea5485073003b702562c3122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmZ?wbhEHb6lV};_{PAnl!<8t8{0Y-mUZmxD>*pUa&T;8X5PrcvW10Z2NTmi28K-> z99w~ihiA2bz$!t(wPIpxB_-F($*q@{-zzA%K}l(guI>(V^PM&}yX@_c@bO(>WxdSF zd7Y2%pn$+p0fFN}LWe{}kBEt#78gG&BXdzu@QR4YO+mriLPB@M#O{lWUz3);C@+6g zTKb-(<SiMQ$I{Ywm6YzPsy<Utc%ZKSN=4;?rsgvs($#&gr}s`%^R2%A2OXVHdU{`t zj6R#1elauqX>R`4+WMcZ?SDJFJx)%0-Q4zhcpMB0Ivf^uI3nUmWaP29xRaTgr}OeI zR8?K9tGm?DaJjYhYFF3wzP{`I{kNu1zcXjf-TCwHFIn<n#fnF3*FM?2`RVrU&v);B zb@=f6ix)p!yY}tbv+plo{&@ZR=ll1+K7RcD`SZWuzyJUL&p<Iy{K>+|z>vkD12PE| zCl2iY8?u_3TUy(iGWo3SdV1~Tg89w+daU^}TQj}cW#`V5<?x&_(_O`RxdUrhW&*3_ z@(n6(i?d=F^^AA!<dHYnwNIZpw!I}Y%qw!sk*tg`S23@^#O5R)QGVBuEtwuBPRpH~ z?3qJTSsWicbTaYC%=DMD`t(_wf&23hE4hH%K}=c<jMD-bncKQVn11L67e8}q;uR2% zvDmy}k*mwQDJxIDICnvUM<nOZ2E|8B*7^bwe>j?&nb-`Qx0y&dJ-O1)8hR;%({Z!f zSw-G0Ide8BcU)X-%~fNm^jIT^^PRzw7mi!m`&TpS^*ng^Sc`v^p;3a7@I%+$&FS$B z42|1zyE#NG1rs?ZEJ|<`mU<%=V)&rzSg#-790$iAEs2M@XZ=xaIo83*H$hQaqv_cq VDI+l!4S|Hlo~KE&(^;7qtO2)m5uX46 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/broken_heart.png deleted file mode 100644 index a711c0d8d8505409f0285fd92257eda1ba3a42cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmV-(1dRKMP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C!Nkl<ZNQt$S zT}%{L6o9{-{b7r<$Pz#;G$5!zmaPG`BuMztG|`l%t!dQ6#E@7Mn?9Jn5tAmGKC};w zCVkjMO?<Oz4cN5B)B?6m@h?`9ElN{=&@yZbJ1)o$>@G9Ar!Qd8U24;$Cpiyu=eyrI zbMEBYM#544uW&4UD9%?4f!)A6KoO7xt^!|Zy3w_OYX<fMHGmhm4)g(^Yq}A6DjW$% z83{)bk<BU79REEKknfwC<XgXAe%`)af(H-E<efVrA|Hx~A|fBnghJNk-Mi(hvNHKH zH&=Q#ZIYqGhb3iMqayP9ymMaM7#kb2E;KYqkJl?&b+t^cUoQ`<s-&;5P`<0H6A`&C zB47X6-7Ou3g)&f5BGC;SBvD^4A-`XGy<WLcUoSJEP*OxTjfA7vL?jCs_+jhTilu{t z)RvV!{i^ABobF%{-;pD%-nZ}eWH9KvSXW2=nl&uX%}tx}t>IxFS5&aMyZavCSAh3N zIy)<3eSOrdT$%A;lJPh|`IDg`3Ot^SVt}=!rI^>Q@#xH%Rlo-hplSHzNqj{`NGgRa zfM0St*<4*sZ+km{yR5B^YtbmCX<}EDj0LKSig<MTG$lKBG%7$%<i-s=Za0=?rDc}g zPIFZiL+$N6862dbxtS4N&&XPqg(oYE$jzGoH4Y%hoSK5194yn!*o{k3@MdQdzH)`f zSFcjJV#T5?sT8JR04#9;x0m{S4U?e|1**CTpJHr!nnY(OrCC|1PA5sr%E(R{2Dv^T zz@P&3FKcW>i$t(YGh>D(CP-Qqv$t-s((7H6vrLmeA`zCgv;g$mL}ZmYHTCN^m6dM4 z-A=CCoz~4nEXMWGQOfi3D9_8wJdQc;w#~+yLqjo#s`?a7H|{xeaz3d$c8r1XaiXzU z`XM=;c-?MNsnnte8I8pVhQrhyKaN9HKh|_(c>aI-w5YYUr}pSk`p3qYiN{Hr<}+EM zsz@r8ww^Ri;)w+PV`J0=0=&FsOAqiFfC8ZD#w_qwSzB9Q#i2t4b)ER^>@%G$vD@+3 z?P(n+Op}3dnAHakP`+o+O<<d*8zz8l;gwsQujT?j{jz`mtD!)EN{<J{W?OW|DG`2) zMp?dhFRujxcYy{?H^%4R+n&GAi}TeLh+Mw3Ygg&S*|V(5&dw+n;K9rcOSf%f<Ec|2 zo1$#gbmQSdCQUw9V0FqgFa6lsT9D}N<rSAJjTxDp#nsY6OIO!~;&L@=x-s}XlktMk zbmOk#bZ%|z=$N*xTgPZ3LDI6G=4c{;t+tk?bLV1;%hj4myr_Jxzzv70zTMK*HJe<! zmSNK*VwyZKO_F{;E$7c$4pn_u(~ZlEIWmrAVHD@9Z%8tE>i&rnp1&?$q`0+}lASvZ zo88`~=|;yt?R}wquD}}LJ-`nP0LL}mxc{Pk|4RN}<8SCtmNuhtj6nbZ002ovPDHLk FV1m;NClUYv diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif deleted file mode 100644 index 0e420cba4af510c616dbfcad2b48acddc94da29f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeH`{ZrEg0EfSuV{dG-$zU%q+QtG-5g|_*LB}>d*gWYlIj^$rT$8esy7S7e<F49Z zKuV6T>@XDDiyjSv78BwnbPCKBc7Y5TDa4v^_I9rBav}SEKb`+XKlS_r&)swPR2nNZ zB_=T;CgKFqeu!u{5#6uT`i{}Re2?#ai*d!0bk)iXG_xj8@#a6_{?y5z>JUwJrmu8z z=bWOY9_cSG9^4ynaRb~ebTRQc6K*yxa?rIAJ#6%F(94CFhk=w8PwHx)IQE4Ao=xbM zp(lgvm9O^8R=<|VeVgDDkOM*tr(z@(qiMJ-#$ZN#RDvrKjLE5fC3Q)OAqCl=58rlb zv<Ra+F`&WVljK-AzA2AilgB5r;FsW<4C69#JQLTm5X_2As^dZB-#2n`Ly7NI`1W!9 zkb`M8=JF8Uf*-fy&Ngb|338^GTr5IJLq)bDx`Q0iVXO+5tEs>q^44xDtV>+2#_WsK z;tPrI>Tuh<zEGQ(e*^PxWA+_t{$29tIx<?1X$x*PVWA136PUB(R$F4}GivGldZZC| z+Ys%*%2_Ns5p^Yg_u$t)M18nBkXRYS>Ii-t!u?s?58=-+9xNgr#lw4`)&Yw6pZ}_W za*aVFh!!IMk?_$IS~iFjPNru1L)|V$D!0bnaN?tuT!JVx=~ZlT!GUu{=4OS0C$CWt z|D`szZj@_|c)iZu&E*{auv5vZ66HSKk!O77u(4BDvZN3l$!k5SFj(^@gD*{T(}bCC z`h_`D(`V{KhowcTR@qZcq5$twcIBsKHujon)?Df6Njh$b+*H5P$Sjo>YGsXfxqKJ@ z6kC7c{fKIxi_M|07z159{`o-C-PMqsF5Q=}Ewm5}^#PY4vRrFBf97aG-Lk)9oSB@y z+2HUp`@*+}%nzP(H!(O{k3J0B*D4s&vRC~z9@WcsM`^ZgGw-x%ulQWa@f@XI9c<TS z(}it!d?xP4IaPKBJ2rm3UZQ<IC<vKTX7US8#`d~wg!K=KKhv=P;Dl*T*+A3T1jz-> zq6(?Up=WLL7cJ=JjITttEjEXRMpwsZtg=JSfVSzL-@2bAidlp;&qi#5Ebq=nezCvS qkdbCPP2badOmMdDHD1f|W5tGQU6Qv-VPzC2Oc(Slx$U5qDE$}COQpd8 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/confused_smile.png deleted file mode 100644 index e0b8e5c6f11467dbe09785ebf3aafcdc9c581e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmV-T1hV^yP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CONkl<ZNQteL zU1(cn7=WMeYtpVR{Y_dk8{ClUSUZPXe`It1;4Y@S*oF*5o#MPwkcl#f;GL6Qcq9J6 zymR2d8!slpbb^SpvuaOuV|H_6Fv((@HYZJ*CQX{0^Sxf2(<YfM?!p&d-t%$bdH=sp z-Av81lEfmRR$vD(1PuBLVEH-*{FJcsxfKC`S_vMDg!Uok6O!LWvB$t3gY=m9Gdu(l zU!%K{DE)H6&VTuz@K_|&0endA+Ck1Af}jJj$00lnZQDU9n7aV8<8bp^C|BU2Poed` zQ^4VbozJWY_rP+2D<9m=rDNi5Ii%<sMinoj%5hZbItb9z56zpQb1$UN!|0pB=C>4^ zUW<czpw>Yx{4*}Ue^73GgnR!>qSdt0#UH_41XsWqa81?H2(hEkxf@2Fg}a`DzSmDB z?ELd}@K_|YkKEPMoEa8p+tW12b)`%aL_9TSWe3JU`!47`4qpulyMIu$Zrs1r10^D@ zh<lZ<cSfbHjC6LQoj52!z#7Yfz~I&p7=!hD0T2fJnyOBF-vPG?CQiVUBS}=l#)O^E zX<!GFXQLD^AuU1lVthHW(n1AmWCrW}45gw&spw*jrm#kBN<|lppUt&n(Dg6`gD`nE z>W?rQ7$R-K9gS!w4aV_Ob`6<~<26wrlXb~t-RgN>Jh%ur3rPGVta}X77XEG!00yzg zp(zNiQ#Yq~b~h4T-{O6DHG)XZIS7l3UgSm~V<FK4s2iujUpNn*wqRYr;2Mqc$pYGS z+5f^lUbIswFv9-lHhBNz$+||X+-2PLQE5n9suu2v@w>kyBA%U0`4i)p;O2C-*0oku zU~#%Ga}8L82Vh}QFV*^X)HsHjRGG<S8H_=K-C&O^!UN#lJp_FCUjF(X)-+XXA~hNK zk<aBErl!jzQx#IP4n6DFvLV(CZVAz?sO$uEKUxPLBRl|C$`EpE$^xa5OLC^N3=Fk3 z(%av`@Pn;1cZE=n1JkoGRYC$C=-FRk(;ML3m`h9KT;<I6D9)eI>_va>=Xo*(!@d3O z^z^pV5^X^TG~@~}mxsA|C{@4+(iBBli`Hvk&u9`A*qE^Mx$637Cr)!_2-+GAT5G4X zoj^|n3JX540ELoYrln>IA{q&VjV{e<_WT0v{nhoaySOIaJIKYiA=GRLG-wQ9+-lux zr)J5z#^8!(+i~bWT6b~jn#nm#-;p?5jzO-XDHOq}tUfWuK*a&mpxOE^^c{%<higai z*2kg~_?YY;&oJ^LWG_I2_8tk1_>n4%KSdo|VdqI`-~2i7YQoOXt_rVlasY8o@b@<n z(&H>EKzN|4Jx|!Ez$*zm|HZ!`tHFH-9l#^NHekTF0KWm_zCCyA({@|%|3m%(uJ36& TLW+k600000NkvXXu0mjf7P}Gl diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif deleted file mode 100644 index b51334278289b1429515bdc44d559c768e7de4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmV+$1LXWiNk%w1VHW@w0QLX?mtX*!WCEXR1fy*Pr*j9bdI`6B1-N|&v3?7-h!MSu z5XXrK$&3ohnikWb71gU8|D*)}sRsY03;wJM|FRDMsulmM8|Sqf{<aeTyA}Vw8r-)e z+_)tEvmySnEC0JM>%2Grvors@HvhIc|GYl;#2){`8vn^3@4z7M&MW`SBLC7R{?#e} z+AjXYGXKgm|I0o7(Kr9qIQ`-^|GiEBzEJqdP5stH{@6kP&`tcoQ2*0i{@q;r&2IkM zWdG4<`Ok9w)^zdPbpPIT|JHo{;%xondKah59H+}0tIr#((I2+lA*swUvCl29&^Wc# zJ-XK=zU4!@)k3}5Cd2D7#_V0g+<npKe%R!8)#-oQ@S@Vb+SHK$(u48bg#X!v|J9A- z*OdR<oBQE||KyMV<eS;tx8>Tb|Kg(l>#Y9dwEyP1|LeGx(7~6|%B$4Jj@|H{<o3Gf z^2pxG{p-g6@6-SD+QjSd|M%nn`RD)o=;HPJ^Zfq*|NZ~~00000A^8LW004dfEC2ui z02crk000O6fPR95goTEOg?);Bh=_e_T{RXKI$djwjedP~A|ga-dU|X`G$VGHhJ9ca zL1{)jGBQ47c4!q~sDr8<V?`}2D=R9)DrI;ixP^5UJ~u4Dz{4jdCOdc*c7%N+E;qp| z4-G0O7YfuSWnv?!Y7;TSD<uH{B_{{~4kj5Icq3|qT`&++(EtE|3nc~sAfO>b1|med z2<oFF!wVlngb)CbKt+iM^FVO<5kyQ4Mtv-p*n%X9n++*gn9!ht#ReNtk~E=X0j0_| zQLw-`r_W&q3}LEFQPWcs4Gb^5<Tz*aD2A&*fb^h&NsO5n8fH3VFkrxfs}v|qAaUlO zCM$VTU>tRLz~DRs6Vy)7@y5v>KTnio`Ed1U0RaXDAeb;ALI)3XmLT!NB#IUfSFg61 z!Ffgt3K1q)kRXT3WI1s7fPp{(L)z9D8b^o#0RpZ#SG0A35J9i(*|odm(pD!#ZQjQr Zgs3w-m6|RzCea|Grg@`9ix33@06R_ikOlw% diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/cry_smile.png deleted file mode 100644 index a1891a3428126f340fec3df988921ff98e60b36b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmV;v1VQ_WP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DqNkl<ZNXNC6 zTWnQD6o#8#xU^EG2!%p{VnK-zL?aLb5-%~lASC)IiH0;Wikb)-LsHZzQKCT~j1Vx0 zCA9PgoZcxMpi-f<K<|`O+D3X>svZ)kglo^9&wutlMWAZX#D_n7@0qo}S+myKGf~0N z<*5Hl|2PRGN=u|n$tU$j<co~ixx{}Bm(wzg)5rNrXj%^kmqY$UPxjr8**R+?+k1k` zaJ008{s5Fc1^eeg+XwL5Znz=N&0io?0Rh1eEcR@yt@V-b-@-kxImhX*AUDZ`+g204 zkc$&si|Kp?S{Fczbao~5$mVJ%1hXJ7*|<K|_qGM@hVP(tBc>#cfpec2r+bwmoCBvH zf#!#yaXOrO2u`HI@hOtNd$+>1ZtZX(*4HwIz}+18pMji2GZ4ry=FBsK&Xj||Edn<Q zRG$tfr$OyhsF@5uO@bpST6l#P2zooPj7Sas><Sa^qjUkL`f;4o&kHs~PBYwRn~GTX z-8c_iH<iAUiTJ;G0IF5oA1A<}@k-AY`1uDc!)1v%2wy@^DHJ5&G|pFqf;ObPx_Edh zTQj2B^jZ|xswcbY*t;%)O|M4LynQSj7TB+a{i$%J3n~}kvcw#OXVUnwDzAE;jBGuk zn$2TfkX2u)B0ZYQ_BUhQ@0``c)t1TX8ZEMK45n?JcB}TcEHMY+KKw6w5uBO}?HSOu zhW@i_T!00YeLfmfH_c5&b6zT2Rz|zyp#$@2Z~0ol*D)>cVY;^Avcw#O_mY=li{oT9 z9V8{Ej!F3qY-*~dqg<&u^{5Iv(<@%p1h=5qTW8Zzk<RtwOIcLe#>D)3=KAV!LPw3u z67x=Y)p+OIhAO7}dsug-M`>B;70p6z;cR{nC3`#E@1=tBB!X?<F!$&Mp7jTCdP|4E zm6oM4RL*N2qrc-*6?3T<Wz}6!o8QU@p<;|@U#hMtOXg<%JKU&$mvF8A4a>SMEtv#1 z6X+-xe7@IO7Ix5+vws}Nzl<mQ?HID(is9IX5jZ6Rm)s9UI@|V+g5Byg|6+RE3kU~` z?kMQ`6-PRFuCi6|r@iQ`v~@>OR%8yp)iHxAUmJ(BN6@|ZxnK$t2v;p9zvURS_cYLb zWuU-<UszDudNZZ4iT7K76>yH1ODk>tdT|nkYe(|^8?m>*+gHWm%Z%qnzJ<o?q#TJU zO2a9dMNL;NQ_4C>&8amO{!&`*36p;4JRi1SQl@6w?K*DH+k93eL8lh%ou~8WNmq1B zfmvSEc_T2n@i>L44m%U54qal#kr2u1I17)j?EAfNW9Oxw%VE<%%LdpPt3^gR6eoH) z^=bP)J@;uLJ614K(T>o`sh?=qFl+CS6@%-ma&GIn+MU_h7aV%z8s{9%pXqFqbDo^{ zBt&u=KNOl1C%b4#-`2<adiQ}QiT$g~LgA6k#b!nMgd7!7wjepO&mCsi6=&EP<BexU zdp6eA`pEZQuep~o10jON>iLhn-nBo6m3_BkcFx+!_P<=vqup~J>`7E2osXy_GPdmQ ctL=9E0q?RJ6Dta$D*ylh07*qoM6N<$g2RVY9smFU diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif deleted file mode 100644 index 9b2a10055beadd67b13405cafb86829f57fffb2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1239 zcma*m`%hB`7{>7fltL|qLuo0r6uDI^K~PYv!&{ZmO~v3Ak*P$`Y372{4cTyWA|Qhq z7lb*@s7@{7L<=%*BDKiHsR-5r<ti{J7q5c|3PXC%v*UlTH=lfedVYOXA4MpZ$BPIN zF+D-FIyrTa<P$!>m(L%TN~c_1XWiT^QfZf$u-nV?A0MAFxqM0{qh+#}At7VI!4`$$ zY#ebmp1Ab6^`(8*m-pLTIl#J+!qcVL-AQ3r9I>xF%9-2}h`n+g4wzP{#<xY#Tel){ zGro^TQc_#Cy&>13|2(fLPtcSnY-W1SwduU;;|rnzHP?Kei!(yxilMPazBM#9$hScO zQ#%x}aK#pXFxa?ii>quDGVE~84*B*d;Glpzp>@JFdt7I5=)yVBa!|ySiy|(H=b)I2 z8w>}OFnIWrhf+tBF`Q8DG@v1ewW85t(L@o6YhwDk7}q6Kk#w|FJX$V!TH!HzQ;G@_ zmCm@y;G@a~w_H%o5I`ryZ6Wlos1f0g2$hm)og41BK`*6Cy;0>wl?I?Jgf0t3`4U>U z7`jkYet_zglzugCub!@#PT%!JtsCkX?x<&o(ICcM3Dw{M#$O(|FU5UNJn%&0-0272 z)B`W7(HjrF(8TaYvp4m~7ms{k@I|8xkNohMF%L#Rw8+rPn1?pTe3<5=U5*aM0(AJJ z)Bjyh5PBA(I|#i&=nJA+md!p{1d{^o3Jio`FoddBLLUkJCe%dH_tsM#;dGbMQWu4` zSh{bA<zd3R_Puzr+tQhc&SbRxKzAOc%n8)ccQbi;Gio*TdKizPB^9k1Xv>`KPe*qK zOg~xrFVOwJV>lZ_c^FZnBOgN=%d0}XD8^73hAS*1l^CtY%PQ2?!el~wJG#0s-iC1# zUUy@v4{!TnHdEtfOqntB6z`sao&{|IO#vYO-+9lltO#O~2zWn#{}Y5gO^h_ERV5ee z(rs-Gzno1NP^QkA8@l6a+>ZJKhOZC5PHXC3mN`+s(oLRCu#zSWZwJ>UY!CZ(Kx6eH zaZ|s7?f79JX^dl?jPE%`<;ph1EIrh{D@#ER*ff%a^}%D`Xxj@vxws@Yt^Bz-j3n5n z4pwQ2w7A>FY1?!{zHfL<hiuWB!1&A+x{kD6b>>`|Ku&spv74v1%bcuUm|C!JzaNLs z;+!CrhI65Zj8-qAOFngv+!pk6ssr0$Bp|V?WO20CU3s{wCnj(I^VSUR8Na@0Q$(bD ztm$CRo3yMPS;UvIxA@H`wu}ewd6hgFd?d;z;-p{!e?=8f^0#rQVq<;{xz&9vD{yBt zZ`JzKD{GItB)IM|#JR-uB-=p~E|8~meY{cG`|9FO$?lkAb)4<w;99ouvrEVM`s6xy z<@ht_3~_=Ne*;$%wI-GAuWh~OoYb3hKaBmG@7*7bv6}S@E6(lW2v&K#&LBruylHkE zvt2&utopa4!Eu=)J!Y+e^;NjQ#Xn~#XQ|(<%gTw<=_;PebKg4N(t*u}U+wh`k&CMm Vj&nnLOR|h=u2RsVwz49^{sZ6^jFbQX diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/devil_smile.png deleted file mode 100644 index 53247a8835b09d1ef67dba3a11f18fafc9551fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmV;#1UvhQP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DwNkl<ZNXMm> zYfM~46vqjaS1GU*S&)}YUt*)8t*MQPX*9+*O|&&pn;1=eB#j!4ADSk<C>mo-{nDf# zGy$;|gqF8FTcInDR!d7;3cD<?g0Q?A(GqC{VfWs@|8wVF*kbD!Km2p=%$)hnnRCv} z1Ocd|PE(O%(>H_ukI1l7oz!7zONVbEH<urLx56-n+C^nk)zpNkYO_zqVgl?#DCa_6 zp0EZj`0O9+)&V^|()qS&xCgp6g~>*s`*Yx@y+B!tlKe}bjEN0x%{gD9r3E*(Y!Obk z1;0L?mInX!?SR)S0|WT8A82?CXxaw!z7PDy$SshwcpaE#1p5g;vqRa4EiekV8*>{s zVtVUVX}4SOUvFe)VsPzR=p4jHF9KgBz~6fS{@+WWjeQ7x=w<GVi@T}8H-PaYz}yfp zRsbAL1`a$2KOOYgY?$A<Q{c@O{AYdNK6J;%8iO}qco4qf&!BnVp@&(3Clhep3v_Ye zE9-$v8Nh{mD7GgU-#IU4UV7S?e~k{};6Z^GS@754bYjkKN1r1Bi#_|H_dP-Aee{-K zH^JQmb#4GIGdC9<+;lo!N(Ii+Yu78#X1wTkq{Ek#1oZU@{7DOLhwk@be<t+WZO}YV z5w?kwHW}ZJd^<Y6u`6(g10A^u)Lp<iCb#Ww27tgZR-2~~_~3pf+5fjyML|YMjn@O^ zQP8>`rH6!G-C$_GJp*6A7G!AtTsr34(w5szgtkylF6>ML{u%}vABVvr(}HKC>r-Yv zj^3GDH#K>Ruvdc&P1dDgvL<=CU75(Tq|PJ&KgL7vJ;dFz{DnoP1+RwlS>=JmGeFwq z^{C2;Hl$t1fY$C<Zl6t6;Kq316f5nQ-Oz`>g~1}zf={3{S(2mSe7Z`ONdC`ryF;v) zYgsCJt&H)&14;p4)Z2K0IN+aX&<z%ux58VKG@}A6Ny0<|mBdMWn-kRzn^Y*4z_qaq zYYP0s$NmLpSe~IFW8Rj$Eb+2+1=R4Cm2x^>*&AS9LDkXFn;wS$BF~1f0>YAwtDgWr ztWjmvtYBA;uE9uw?N+GeEtBufkAmw+1m{KbUS*{@cR*|8`4Cn>LU&=T7B~^6Af~43 zQ&IfhDm3MUV>mw=vlTYXmd9cwFAB{$Vfg;t5R8{68emjJ!QZ+UdKq^ttbkICf$p0^ z-6P6-@lM2Q@C`nM&SQyaI24KFZw2G{o5866I0Bb=h!zL3lp|%4&}&#pH9SDV5SDd_ zmaf<tH*bVU8pLWw%}YEbt{uEfdN%_jyzNFQ&t_GsRdl2@0(!}6XccK1ins$|m{;%; z++3g#?!#PQl_W?r5>=y;W$dVmlPg#AB-4R1#=0aNI2k7P8VdMM$Xqf4ADlpV954S- zxW1qXCzpnsK#A#XpeI6U7fi7&b7U?Vw}qPvuoO^?85c{8At<Cr#i1(MC1E;FhUzE^ zQT+wM%0_Hu4(G0XQ}6W9KF`EV8=05VlG>HSA(DUTlQFTO?VTR%|9Z*ej6?%+6V*|Z irs~YTJuAboQvU$jo*OjDtdS-F0000<MNUMnLSTY-g+Fxw diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif deleted file mode 100644 index 8d39f252bb7fa7ec9fdef6d88624e1a08bcecb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmZ?wbhEHb6lV};_{P96D~@q`BEza2hV}KlyX)9CSMdL=75iBwb*)e6^lZ^TQ~3YQ z<9ym9_NztoSGUN|7MWi?QqSi|{hloHXO{4<DKfw3Nc~^J@_!}U|Ha(@*K+;e#P?>k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}<B|XF#{4>) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%<zu5f$X6yeey?^h`|NXG}|C9dzPiOyswCLaK zHUFP%`TuO!|JOVIzrXzd)2;vC9{&IJ;{X4D3^V|WKUo+V7*ZH?KxTvD#DV>PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%<sH<zrtEyP2oRJgeV`ta)aXYX+CfH3;(JeUUTGzq7CIQh&NpT^r zW(f}tni{)W+uCt*?);{vsu&t(dLY>;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39<e&Jg9#B$N3QA0+Y~)Dn5g2zVbHQ8Wd>trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2<r=FYh P(RIZl=k`1{CI)K&y=6%? diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif deleted file mode 100644 index 8d39f252bb7fa7ec9fdef6d88624e1a08bcecb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmZ?wbhEHb6lV};_{P96D~@q`BEza2hV}KlyX)9CSMdL=75iBwb*)e6^lZ^TQ~3YQ z<9ym9_NztoSGUN|7MWi?QqSi|{hloHXO{4<DKfw3Nc~^J@_!}U|Ha(@*K+;e#P?>k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}<B|XF#{4>) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%<zu5f$X6yeey?^h`|NXG}|C9dzPiOyswCLaK zHUFP%`TuO!|JOVIzrXzd)2;vC9{&IJ;{X4D3^V|WKUo+V7*ZH?KxTvD#DV>PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%<sH<zrtEyP2oRJgeV`ta)aXYX+CfH3;(JeUUTGzq7CIQh&NpT^r zW(f}tni{)W+uCt*?);{vsu&t(dLY>;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39<e&Jg9#B$N3QA0+Y~)Dn5g2zVbHQ8Wd>trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2<r=FYh P(RIZl=k`1{CI)K&y=6%? diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png deleted file mode 100644 index 34904b666773b70bb2bee3839d83a29debcd6933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C)Nkl<ZNXMm> zO=w(I7>1wk%p@~O(=^FU+p!JSA82S(qcK0&Sc)k4(}fM{Mq9<YQjm&L#g#7V!kxcR z!G(eWH!d2XY6TZ+W00A&5t~ZHT1lp9(z%mNlbOuinYrh4ac|P3rdsg8%i(f4&pEv3 zJ>MsjnFX#lTH_6kKp)TpbO!=R1xf-xrJelzTI=O{@YZ<4e$;-%^mhrIBsfXPCjFnW z9*74@JTQ%z=hIGp@IT?L@rGvLedd2Z$j~9EsY2`h5bK2vyFmo5jKb^)OnwXH3f%h% zG;SXN4yT>`+?sG7tfTz)-p%}aRK1Qv!p2^t_zO~=KuUjr0+Dv8+XXF;LUss-UsZO! zF6?+|0_3ix4X%ZM#<_P6>YpFrbv&m=X2cYK1kVLe!CLU_)tOpoeGQr)grNhl<uTa# z@<7_jKfMax8gJOo{P=NB^lGK;aYCUBVrpkV)t9wvZlFblb$gMHx8X#u^3eA}V_SdP z$q&k8X2DN|dgFY(Ct-21^-UPLh^zyNKq{F7h3?J<u$I)B0-$u=9!2vO%7Sb^f^2Ak zv19Pasc9tCW&%h0m^zuDa2Br;LguE>MTLS=Tqu(|b(z%AWlF^=rJ_e_IK#-0gPXHx zQP6^7&%6uGeNa;aQzsKZ-x9osYzk{5urQA;cxXY<q9vEH{v|5R<viwc9w>yYAvXtF z1iL8Md>L=-W4P%)$ff{#!U4P+X9O)qpyUCd7Bpnp6ssYzZ9M>+H`anGiEZl%yM|ap z7@hTCQNe=#bsD|rDdfU&fbOgCYznQ0RSPNrViY2ZDOTuz<~INImoi|L{sXt5b70Ro zSQm6rKtZw>u#tp@vME^!4^FF4QvV~OXvLxxi%eyL#01HioIz&=tqN2GTtEf13hvA@ z&n(x9SQk<)3pRi(D~R5;vVoSPs%WGMoDm_`1&~?=H{mkWSYO6N@EAW|BAapl0e4-G z%L{;52w4bwNPPp68)FH+WJ{7*7p86ziPZc4hWv#aceHS3c!Igv@~RrNxv`ErI<~^a z91;<~mLy_GE(JSY0Z6WRMAdP=+MTdd=kdx>B%+vli)@J^x5lBiW))m>W%TR}_EHgb z1=G@uY^uYUDC`@aM#62YpMP%bIA8YSxpkIWV@%XT)>)9iSLN!ZdKS$a?4m)dg4x_? zO?B3=?`LRg?@v4V!6na0JNZGH+6U-*lTh@EF|`#-jpqk`*=rB1=g(>(<YA%}!c7Hh z+$qDIZ$MM~z*22D*VOmJ>^w3-=TW3uGUAndkhgYXBwR(pE=b7G`4;RvG65X^w`S1- zd`Rx>lbm`Ma-$G3ev>e0V2NPy?P>0WJ)c6;uFruN(@uW&M%vsHX!RHuzloC_VOiiu zZAn`nc98H3X(#{14foI$EpIPyH_#Q#0H=YGVE$ocYrA3i{~dn=Ck15*vEe9t00000 LNkvXXu0mjfxmX{o diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.gif deleted file mode 100644 index 5294ec488dbe44117f3ae6836b932fd3b6a27b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmZ?wbhEHb6lV};_{zYre8tk$>z1uszh>j64O_Qu*|u}z_8nVy?%cj>@3vjLcI@7> zbI<-A2M+8zcKqn^lZTI=ICkRHkyB@mpFMZx-1)QTFPy!0{qogoSMJ`ubMOA0hmY<* ze)90ilgCe<K7RK6>9ZG4U%q<&^7YHtZ(hB9`}*DcH}BuSegFR5`w#CvetiGw)2Gj0 zK79e9&)>d%{r>&i&!69a{QU9z_wPS{fauTv|Nj|?0E$0Z7#SE$7<52tL4I;z`|mKT zz(Yr>ee>xC(`>8x`qR2icbv&EcF5r_niBEApqoW7H@QK(@L0teuLXS1jk9%9j=l*C zakTxfDVmlMF3v5fs;aE2(%aXsBFQc8Zlcf5FmooC{!}MpAx^^pEj0xdLr&qW2qp!e z`i*{?3QWFH=^CsYI{Ny-9IP7YEme9_N*d~?G|ryUP?XVY@z`{2&D2fvT=iGgi*Op; zF6Hsn*HBTAQz+%VF<*>Df0MqZinczBSeCIgQ{DABKb#a34zCqgu{y*3V-Yi_WagI~ zL&k&7EesNdZZ8-P9+}y(V_QN*Lz8RwWZeKCCAOk&E=R4TO&XHHt{q%j+gxlIm|8o; eg&mr?cz+2WY1B5-lelnX%Stt7@ejaYvIYP(9Oujc diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/envelope.png deleted file mode 100644 index 44398ad137f1d9591692ef073059d709bac99762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmbu+>rYZ)90%}|sHtfs)0IYVDqC(=uKA*+wKS|OBd=S%NS)@IT29m1T$$Q(D)Z7T zEnbwh%*#~NMDPHnP=GPO6olp!Cs(;0<N(6qW{1C_XP@W$y!&mx@6(<|xDgQ+8wLPC zM8-{g4*DMP-w+I%GTW&h0N7WUm6?~WG+6ik?|3{Obb#0EMbqteI}zv5@V8O&AbDbJ zVsd=y`{WFjLItO2vojz_1L-t6eU?5)WiUVn6J*XYnDes>3qM%wc`lE`TjcV7|6Jt% zTI6&10-jJL5G@Ip{s<+~l~t)^Rkk9Pi8nUZ<?;>r=K7XmQ>ofgsgx?ULZw!!H7bo( zt=U#<wQ8MStJ81m3_86YrPmvD2BY5SXE2%!CKP0Z{7jJ92$@Z0KghfTSuAFY#R9`S zFpMS)TVX582HX6sHoML4XW!kmI~==CrvpJyP6R<*F2v<_q3e4*ZnO%o&+GH~&_WKS ziGtC_akV*wTp%zk5*vLy{$d6px30dM%9G0En+lEA1l!$Y?)6smOA<2hsd;CX8U$s@ z0og}eE#d-7`SJxy+48NHq~5kHB0K6y5An1nQR^<mjgab<FOlay8D?Q`oP2V9jrb<N z>udnclx4YJ<}iC9hqo?{7gljfL_J5iE1FkCjux|?)+F#xxO5Oa=8EYgscZUTb5h&- z1;LV4O!#1Uj-a?<?eaCNyj4=AAs9G7TkSwaM_&Vz+4*3A5J(Anbj(unfja#;h$`f_ zMdSWvmx_ZAvyzD6jfIaB16|c229mGGO}g~D@!$wP9&EndhmBI<c2k-|?}*<v4eduh z9e7qyy;0R=p82SGSWrRZB372YYFW5dv?cyp{(iJBg;NRlCeyk-P;zO1=<xKH7rFPY syvxV5x7e_3=0JKtQ)UUC-4Pq(4895y&(~n%D$#y{jC2B?oL2Pe9}J85k^lez diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.gif deleted file mode 100644 index 160be8eff867260e6639fc13185db595098fddd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692 zcmZ?wbhEHb6lV};_{PAno`GRC3(I;Imerh`t9f`<^7C(JV%o&Yx{HZv9|OY<7M9Ii zTwA!gckuD;;p1B)Cbm{ma=o0~21UgU%F0`Gb+;KAZ8tUDX=8JNmGufI=QTdQ>wJ8N z1O-n?Nu80Fz9}epTS(}(sOWuh@$1skcO)e4NlM<9m3=HNeMM36mV&}vRn`0I>dzDu zUa6`+)YN>Uqw`Kv^Odgd2YvlddV22+489r}eKs@uYHt41-28{7<zH*-f3~*&?d<kA zIqh|G+vnl2-`DqmzyG1o(8CcCM`L4;CnlcE%sf|CcD|zGVr}i^mX>S1y*DOJx;b^~ z?U^(0E?jtj$&v>vS3X+1_R;$FFZS(wd*;lCYuCQNeEH+`>!0u6|Nivp&$n-XfByXc z?;itQfZ|UUMh1pB1|5)Xpg3`0|KAYT)ZEhA))dQPWZKi)*WY6(5ZfB-#4a^cdbSk1 z>y)W>a@I?hm~q>4n=iGomUUbZ7sRNhvu*p1?JCS6?JY6B;{F@=#l`wL2#UFdO^FS4 z5oWdZ-5BejZDnnB=kDDl_qCm4V?AUHUc7wu`URiYHBTm`&tH_(KPxhMA8Csc<B(vI z+Oc8jjDyWnPkanM;eTPOJa5d61&vJy4AhtdZk+gd=pesN^CANc*Gq2Ap=&+1Mj0H9 zV3D#YdN9LtbJ|%ML$wLJ7bLZvpYPE8%jaS9q-pGGQ5vzQw!GxvWEC_N40zOXb#;XQ z1P+F!iQ>xab`2807v|h#c9;71X`w=M^maDEh84CgtxOFp3|c9U86FD{IxtuR08VrG Am;e9( diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/heart.png deleted file mode 100644 index df409e62f55f9915efc6b88d3543786ada9c2897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmV<D0~q{?P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000B7Nkl<ZNQt$S z+fP(S9LGOrcR>y=EE0+jENy_ca@j?ofHzuh@e-|#F+P|WlD;$zCVk-#;IW1m6Vq6W z5q+R(qBeCC64H7>h>&Olkt!=1O9|{r5IHP#_qgDm<^1{rhRcdX(r@y6n3?Z<zB7}V zQ36w8{x3O}H{2OcC-5y$0h9qcFaY>8-MF*NcLMkd*b8I=eZW27CrvkkZ-9ZRFoCHs zBC<;?>-qE6R=IohsQi|lEuCd$@}RL%W}iF}5&2O>wu{Km)BXL@*U%uoyga$;a>?zw zI(c^fyohCui^#qu<`TGOZgSG>I&?^WPfeAvf&vLwR*GI)DnmIra^2~akt<h3L}E|R zos;XTDo^wB<lpjgncuTVG>=FANKKVH2M);m%a<_``64hCMiG%j;IFQO2lHKiKV`YO zD2lS;>_U+U-F`nQH8s5I>7mBs!I_k_!XqN|kBkthsG!>Cdjgc$fbYhxUCW>A>x&Bp zNKH<r&g&)G+e@9-y9NxPC<>qD<q^Jhi-6Bp2sGM&n$h-lirj9*val8w;#P7(0{e@L zNpd*e>cO%o%*tZy>Q#Vh2T(lw=n<~;bYijC1}@n8N=Zs$=HWvCuLDRmLm_P2wh=SU zO~Vxt%uoox=>UdY9#7Tm#02SEw{99fV;H1)JOGbvz+h%o730AmG1J_1jR%8dR#yWI zDkAc6bar;AW5<pyJGX4X73U^wRMU|N&k_^)((gCys#;*vbmQ;Dw6yOlFI-@7VuJA8 z+<UD!6p1jT>+Ei8!>+2$nr>*e#n6`Q<HvivXV3ER#S7+Nzh=QSH(ZhVc?KsZDQ|0I zdu?qe@B@Id^eehEoGzf}QFHUof6ko2o1Tt6&VyR5m}T*JW`_Kh77Ci0?gRCjZbVkV z7Xv;3djC9q`qRlvm&i{^VLiMh!f-guhfPhCwzLcbpKH1?y)>?@{?FYR&X2^h`g%{E z%nJE@<f>}i00BlK5i%MY*nRnO0NAJLMqs&T4SX@6(27Ry-92(7J=WcgJ0W3>XDk{e z`S4+?Z`=qfc6*hk8^fzTap8*ryJF#R*X{cHWc$DXnRfe|v5AERY<u@ofAeO<uB!E# zZrqQ@u*K^H&~)R0BPHcnZD(gRT2#cSX%aL|MobeaDWRsL!?dgFiMN5*UHP&d9Fth= zm**ERs-x}geA3uR&Z$$c6ubRvO*ejBZ|*zcivcCTH-H!D2U<1Vc=oP&8-l;D{sRff VSf%JUq4EF#002ovPDHLkV1jhu=wbi> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.gif deleted file mode 100644 index ffb23db05a76e7e530ce7a26d658152a37028ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmZ?wbhEHb6lV};_{PAnjFE92GxKUTwsq|6E4jGVaB!^R=ikiEzMYkIFFX4N4vtMc zJllbYmv;vT$39NZwc_IIq@_0~DeW*f-(_cah?DauKmSQCt~1=+S9y642n!z)6+I&$ za6(M%l$h87Ny(#fa;K%G&&kMK6coHIB643|{(+?ABRRPz^75yZm2c_kJylS6tgik{ zP3@(!@=G<f$68viG&EjlYroahe5tShR#*3fw)SUz{Z|GC?~II|T3bK1xBqNl@WsI3 zyNSsUGqWES7C)`5e%jjpx3k;h?7ZLG`$$yOV+V)lUS9v5o&USK{`d0w<Ky!zEbK*a z@bmciKjGm&qoPivrk={qK3iOTwxr~IW#xscs*81XFETQIrKY|rDfwGk`nRIu#>9y? zCQZ6Ib?WWev;WSV`FHm0e{<*FU%K?+nl=9xF8sHA`QwcnpKRLnY{!m&yLZ1iefr(` z^B=BW{dn`{*T;{)J$?G)&6_{pzWx3A^Z)<<47h>fPZmZ7hH?fSkP=XwII#b3C~s<R zX>DsNi*seQi3)VEpJ;D4#m?5=hS?>)tgWmlAxM~&MI<z9ZhLcCNq#}u+zt7;g)3Xj z!r3*n_vjj#80qfS5ECg~b>ify)8%EMTozuQmWs?umd@UeQX(ZS+044;#%6}n+)NBi z+|v5S@Aa9}ww0H<F)FKC`$k6lyQ|1~6dYc&;9xU{u-vA}Y)wq8LL0WMR7!MUW(@1Q z`|FSchoo8hE(5_uE!`3($qPzmOgiP)!e?6XWyZ<JZfB(}itlwibaYx{z#O)xV7U@& z2fsqlijIeiRx)dSc_UGn@Q8(5!XV|qg@-JioP2^$R%{AB#?ZtiVU)6Cf&#-tOID7= OlS`LxShvZ6!5RS1a28Pj diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/kiss.png deleted file mode 100644 index a4f2f36382bf1c00264b5514d9b00d1a70f720af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmV<H0~Gv;P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000BBNkl<ZNQu>z zPfS!-6o<e2=FOu6&w;^#8E`N(Qag<eh=G(g*id5|OKe%y6=~d%MqL@pqPi+;-5@bt zVBIt}7($6Fv`B3ekwB^xFfvJj(s_ka9vw#BFfeasZWsIsjNpz%f5}a5?#cOnxhLn` zE5h?j?3I)~Bkwg_-7OIC>bZaqZ~!60w9*;zw}97x7lvs~?8Fe6H4k|81Hjj*c>Hr~ zYRV~875Cx8e*>MskHAO3r!U6GOKi)+<@b{v2n+$uhH3r0D?H%U4*`9~-Ma?|o0`xp zi&Q!d#l^hd*vNs?r<uNUhd(<zk+ZY7G!1KYm9k5hsAy@ig{ppHnAW|Q-~q3m4-7tO zZax%lYva9Okb;5&NT-QJB23K95jIUq3koPLEX1Shpz9<S7kL~CkvMXM6Fogk4wtKP zqfA0dxesUrnnKsFS595N%!$fMoM+F%!Gka}gM9uRIW`872;}4-Dk`9?4B>VoEeqM( z%RpZr+L<#{x3z_UZ-I6prTiw;+WN)p{rfCDc)-bEknHMeWGsf9oP=~5q}(js=5EUw zfSpRw`|KIHb#)Y<Iz{l}#qWib@|Pb1f#b!t%^N-+S*p4%c^e`Fm}!(qCYdx%W^|o~ ziHRW<xL0%Y=JEc921;^sacJ6RlATI1zOcYzJkDw&fo<D3oldeejXal&H$5Jl4#%cZ zGMOYCiBNUp20)LHQYt{#@9pgkqZcmlPDu%xvNl^nRr%NHBpQp6u<bRts-kHcxj8xH zB@#&6-n_~1>@41M=QwutYCljX!t+Z6ym~h9@V6^hs>9c=QR(-i2(jKz0!7mhstT%# zOeT@GO*)ZS3u_wbl@+F=QDWugob2oSN2uyC!?ga|+KN7;9C*~&SZZ~35%hRaoKA$x z1**DMS1CbJQ1bF{`2EOuoYj#LOv_?AD~pexK25obias<<>nGSU{)TDI1-yFwySHxj zKZd+tJ31(HyKxJFT3U+3=R?WQN6~ds^Yhr#)2xh*5st-(78deBcQ>x0qOUf<+lFXE z0k8fx@ZBG`Z&wVRKhM79WpY%NY(*hkQILR@N@1l^M3YI}b#>Hsbl6$@_kU@aR_j*Q zOYn6A4QPqa%ru9)yOqfBFpDE2L`O#f@Kjadt*N1~wwB`hdP6uIpBbh#kjdE*zQrU6 zybl}&jv{5blu{9jG6+0cUk?q_THY!DmGB+R1Rye>-`%w9d%lwl(~@Ki?W^?v{pR)* Z{vUNCpEyW^ic0_h002ovPDHLkV1jyk-jo0U diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif deleted file mode 100644 index ceb6e2d9ea3a6496e3df43e6f815567f0d840bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmZ?wbhEHb6lV};_{P96J%M3XD#yGmftA%dYn#lkbuixUW4_bNc%z^1_C)@h69jKh z6}dZI`uQ~G7c*GDEMWb=lKsOXj*m;Z|F7lxznTC47XCM@1io(-`LkKz|8~JY+lBw{ z6#l<g{QrK5yR#MV%u>HM-|*f7<NFKE?k~1{v{?1+Hq9S9RNrqk`+rF4{}JgQ2W9>r zmHB@{{@X#N|ECoGpI82WR_*^O-T#-={$JMme?|ZQ3A6v#?RQKL+%+|H-|YBj8=N1n z3p~6y=g89h6RXNkuBm#qHSyVwwC6iB{@-x?f79*%Eua5)!hc=L_;V}c%caWykBa|4 zsXxE9^YWg_HxAE#eXQlpiO#pD`@dXmd3SEw_d7HGKArUc<>Y@)XZ(IL_x6cpA1*KW zbaU;a%R3)m-TmeMu0OB0JimSP<=vCto*euB;@rEZSAV{}`S0tse_wBZdh_7x`)9vC zJ^uIO@&BJszkPc3|Nnmm(t+Yn7Dfh!d<GqmR#2QcuzzgGZ)$GNYin!iY{`>%H`LbF z(b3b>*VB^E>*{Q8&q$dyyCsz;&CO`V3NsJR)J3h<f+CwmM1`yuu5YzvVzErzxhp@< zUoIp)C*G6W|6o_1QiSu$E5^D?=N5CR$=tmwt0B&@?obvRzrag=_M}6tkrwuT3As1l zeV?6|?5Mz@;F$cTuxU|p?^Gp|4vm#gOkD>OotEe<oR;O$slaqsVF%OWR`-5`fP)Sb z1W$BIX#^|@;LL1gRp7syW7(kCe3n<*MCQh)fC;lTdDR?dI9zd@GOu+{kH!I$7O^F* dJAUjiRA69G3*cV*@=^<XSWT<dUM>~}YXBE>LOcKf diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/lightbulb.png deleted file mode 100644 index 0c4a92400d0bb454a1f32a54b0ae0bf6a782a960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmV;I18Dq-P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000ACNkl<ZNQtGC zU1(cn7{`C7Y14e#CC%tgnn@=%F2hQTirs|KO;jvcWkRpiD=!oW>WvN&!5cw07<wgs zP<kbL<BgllF{jg_o3$O-*^g+0=49!|$w`)-)11%5i-xVle1Xr+dC&8{|KIa}AKv#B z(wjGF7O_a+Vc>D#C~!Zp0GtE9mSpvpW?G>UJQfM~fDiQb`4{q6KSIy`ikVO14h`ZF zA0#yVBA&jHkAYVtS=HNy$0C6+RDP0wem7CP_8HM5Z_q71g3#&1DbAy3XUP8e3A;vK zC35i1-$59YWL2r<bTrt}sodq032Wmb`<}amCukvLUW4Q~F6Be~yG-tS`fW;oO_RHP zatJupmh)I7FlH(%7o{(cvhVrx2-$aFYyQ8=E)mC-Aob1X-1+Pk+~N2UNmjpa<$O|^ zJx$-?mk{z_)CU7tSzP61!h=zi+0y`%wM**3NA$Hhx_d-WFVzR%DzJ{%Z=kQu0gTj6 zch->%8Ojna!2&G<*xOk_00BU_J+9bv2Rbm6C4ixJ;F(Up7`Jm*>2kWk(RV<rMRpXk zG>cBZ2#~1-)oaVFum2EQdJf87FfA}`u&Q6v0?WRYSJzd1{f7W%+ks!`9X-KDGKo>h zgI%sd?JD&4SkITpWy<u9o&dPe4t&}jjxUH$d`kL{Rh%uOu4|`cAuZ<-$ER?I;|sua zOSmMf4sbjeKUVP!OrYlVnzn4a))XDjzy!hgF@Tq=x|Yt7Wc3H&EC0ZwlvJyxE!+R4 zn<l=!hXKw?a{V*g==uYk3*7xATV@BEW`k1(+X34_E1Ia9jaPgK;Cv%MGx%>^!5Do{ zonh1U0E;P;#gxHf%4CE4h&(ohxBnnO!)LeIlj{ajKy+umQYoV<X>3Cy6g^-9cSy2o z)MM1UL;y&#YQ`b~CB5)%^!nm=6xLU`v6ke<#-BKr&gkU(grWzoGy*q;SK}W;%iUYt zTqPtX7#N<QXHT4-zCpaf-3IVhGjYSV0K_7J1TeEz$cB{b*C=F{C}fujg!eK${(4rD z)o4R;E9a7|F2*7OY5wecp_Q3wdiLByNZe0!{}{lTX4;m{tL~qvl$|M|!xaP^;BR0C tI4;R*@qfXq1$G0yz^WvxW=lae{slbFowx5EC9VJf002ovPDHLkV1hLczo7sC diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif deleted file mode 100644 index 3177355fe8a5e46fce327ebba5b1484af2584de9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmV-41IzqJNk%w1VHW@w0QLX?mtX*`a|Eq)1+97tuYV1>e+RmP3CWNT%b66*oEFTT z71E&>)uk8bp$zAw5C5VA|Dyx{r33$_1^=lB|Dy>1r3?S34*#kM|Emc9tPB6I3;(kY z|FaMOv=8R37yqde|Ee1Qs~i2T9p<qa<+L3Cw-Wcd7yr2v|GO0bx)uMu7XP*z_rDwe zzZn0$9p}9w=e{HUvLXJoA^ox}|Fbjyv^4&^G5@<Z|Ft;(x;_29Kli~L_r@Rp!y5m@ z8~eu}{ly;t$sgyyCGW^5|H~o&&LjWNCjZeT|I;V_*D3$nE&tsw{=_o<(Kq?qG5p*y z|J6A9(?0*<Gv~KM{klQ_y-xqWP~p93{>DoE)<o&YRQ$nE{@q;s%54AJWBb`<{MU2; z*LeTaeg4;e{o{K7(18EbhyU4y|I~^9)sFwxkNn=B{@$MZ;e-F=kN@ME|KOqj<D&fR zssHM(|Kqd&<hB3iy8r9A|L@cP@6`YC*#Gw3|M%nn`sn}u`~Uv@A^8LW004jhEC2ui z02crk06+-;009XcNbrxrKLisB6jP#z!y-HY0NBAoq6rl$PK*&#hG3ow9ZHnoz+r&I z0U0u2xFEtpo`iqY$Y`TwfdLXniu@>W;EJ9cX%GthW2Hooqdi*mz?dS%i4q&4+UQb6 zD9k!#s)Ptpr3@Xb3Ww^!aU;x}K7H<-p@KsX*r7O>WI-ZjNs^pI@*Yt_<P97gLjQp1 z5hMr@AVdfd0P=%?fgMjvtf&J*C>;qZP^f5n!a;xl4We#HxkUsWm}n?W(4ZlO5+x-j zNO&N@%-gWIa~HH@#!3hgR?OJBT~N&jFmlLnfda*gn>}$rsJX4j!j~utgg8m!kjRrE z45sjr0ilOroeWKk95G@<L4v{v5F}OMVowe`L#wDLT$qH!5hF<Cfm0`7!A4bp2-brS zJ^*pl5=t!fS_&d@u)-RZ2~@@gOJU@pQzD6$feuu3B#<99XmG+)D+(Y{0HbAaK@2n0 y;737dNT7jeFc2`n3l~f<K?D$>LEImB&;Wr15?sLK0}s%E2XP7=bP#R<0RTHW+Mxab diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/omg_smile.png deleted file mode 100644 index abc4e2d0fd657fdb681356a836a798f6b97255c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1122 zcmV-o1fBbdP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CjNkl<ZNQtGD zTWB0r9L9fVvYSiYrpfL$-E@=2AX;kDi@AYGm0|@`A8ZgoiY?eaMG(b;B0fl^Z@!2Z zsBZ=g_~L^>&{j}T+buSenpo44P)$uX$!0s7P4<#xcW2J=VP-a)CRM=$-wgk`{LVMu zoQs&bo92G4A?T|Hx`9rh!x4b)Xc&k@jZA8*_r?9-4ME>=l>C&~_aTg7Foq#9Y~KuY zLeNp@XbhqCM~%$Tzrq`WzFOcTQj;gSavHoQG&}`?F4*xn2m#BZus8xU-$A|rJ)c4K zBZI(eQ6rPw5^jUlD7QY`!;SOGI&fOBvkS30hR9DN)^39WDq5hb75vXZ;tE`SQ_=di zVBhQ0AP%`5+zbDln;)E1Qy*jPKcg1s#>B$p&&2*p(b5)RcViV;5;JG=!^IdiwUvbS zpCH_Mma<>Y!0zYa(KiO8M&{H8ctg;4oYcfueAA`Owii+P3Gv&tTZA8~!5{YFHP;Yp z1&|V?!m6zyZLBc&#}a;jE1@F;@O6jcnI8q!d;6kBW=PE3P1~bFSrdGFIHY#uQGP#~ zH3QW?Fipr6AfE?I7U5_bRF*?!1te2Y{|;CcFn$4!U5+8j_G(Td-OODIv3diw-HVo+ z2FrrvGNiKT5d&RM6~X#g7X5k}l4+QYLwW@!&%@3q!0Uy%OCg}!<G?#f=&-FE%}fBY z_#f7C7W$Pq0Id%<*zl`{T{rKd(gP?3)(UER08xJg5;}yR?R1@YV2nV87cA5Md`HPe z(;guTlFO20O0L&woUd`BO6sTwn!y+W=<pQb2_5P^5=&|b=c<BTb>)Pbwga$hrx&DJ zuY(@Qt%0RLN<``=R#QloC3H~=x0~z2ZAzh87Ja9hZMU;=P>Q~n9<-ylGjBU~or?nG z7K*RCvFHTaVI`-PMp9HX4$+16`p!H|&6h-COL^<S7!d^80rZXVT%iPNZSJI0vb0uU zNt9NNSQ^KLyRi%tXop*Q@L46XI0pr>c!9{TS$o_bs3hbsvpZ1Ajzod-)S@k3gMDWK zhF#|o!o4xJAArp27EUc9W2?jyCh>$x<VJ3jd*!V|EZ;^{?S^n~42Wm|Q6rN=c>3uX zfUE@tQ*MgJTk`MAy&%``DJf6|Q)=lc=otXv>5m$jl<S<Rkr|?<WsrmCU^%N%FlDK; z?x*XiYxGgq=%f2+XhZhG%u6jhr*ZIIsA(B=*Y?dzu9BmSzrTmk_n<=AjuqhB22COR z!9QnVIb-K-T7VZ0or9LQrV-lKORm#_ANYi&-%oJ)Wmp=8GR@v3G?YEnr9j&AfZE64 z@Bq}begV81H8P7X>z}r{7f|K}W-kUwj8GKVL(NsV*Fbn)i5i(N?`7N<UW^Hz1loXh o=L~Qi7;(-&m2PeS8UBCU->dy$hvS~s0{{R307*qoM6N<$f*}_dBLDyZ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif deleted file mode 100644 index fdcf5c33e3973c6fd0bf87b615ba4bbdc3b7e38b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeH`{ZrF*0LMT3GPk)0SsSu7wzZuPkcY8=Y@XxXkYJc`vj^-hEJ-UX(mJTq4h7@} zjUQyoJ9$VW2By-gAwv-k-DKK8PKQ$-N{I24m7O=PYbE=B-<|(NKlS<tUU#p%S6+Uu zeq*tW$VilshFzqgn6&Pt+CPZ<dO!R73Q=DL_i_cNyPOxQ=iT^RICWBVy*c6fiNu>N zvYC?tv{5(}hc+%wb8u!EI=DC`!08o>u6T6t;1a+sM5hQ{@$ke?JH>M@8O}=3Aw!1( z-z3rBsuny+3l~(l@ECfe=uJR>BF-m8`{cMRN56_Wr)4}^`dliyGT_N%`kqGL26XGu zn??6;j$Tnk{c3pS7*N2UL=Px&Rf&KagHJ>QS~{S?kOntaVQ>v@u0?P)LTeF9#%K!0 z);;_&4R_Npna23j>5*q~M~`p@-D^UB0WMjXYg_5j9A?}U^H~tu$xIf-hDz|$?xl&h zVq>KkJAlw3X6!IMQ$o*vieM#1st~HhgcY}KxN{Vv^|7fIX6nnOa5d)YG24v!FEHJT zS!eA2S^V}LX1g%g9h*Oog<kyLg9jlzxQ)m-{+dK|1`qFnSppLy|MTA#(Eh__5n?5& zkF<}TF!DeI%avxk-IUFi@(tCL%~6|75nVAwi1?|(c1;FHWZIm#q21`nHcQvN+{m7= zYqu;H9F|Dllg1S^C2u{RdQd(WIAPR}YZA=&_;qTtV{y7O+gj&P8$LV}zB*)SIv9La zYr4W$7<R0b(4_-4jhl|JBimn^zt-Z;*`G7$EX}Xx<ksnSO}EtwHkR!ZuE}(A?HXep zsiKzsdMvqMd)a~3cl;KEv@kQv<n>ZQd7@HIva4&>uUZTg?QT8tZfND3d6gQisHn52 zRCf2+0^cUtaqIrYo$ePt(|s~r)|5W~ywdn_uID2C3ngE_tuZBk#%;D=Dxz%1|K6gj z=R9e)uYO#j@vcz)@!Fnp7VihOv#^jIdEIZWqMj2+evWq(M`~WNir<!tjeiCk-e}Hx z<`yTlr?|<ux5Pfe=a-Aa<`jdSa20bFYhKQX=0$#%K1?WzS4rXuTwk$-=|P>@^!_%t qkE1T}vTO=}p^q(bnUvZ?!^Fpy?lJmG#KS@EM|@S8cpr;JHvJ1$jidMg diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/regular_smile.png deleted file mode 100644 index 0f2649b78af3e4e11df8026e70531a9e0c81b117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jGA@P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C7Nkl<ZNQtGD zUuau(6vscmUz^s<tbfxjb8!<L4%=GX+733S4EHeIgBvmswTkmeK`O!=f^Sy#;EVVN z=9_~JeDPsJm`)UQb}J*du4C=AWl)-CZMWPkS(7zMbMNo?aBteAv^em<my?^z?{m)Y z{LZ;QHJ!||mPNy%24D}+3-tH`uzbaU%LzL-zuJ1W7Cagb9YV~v%>5R@j)5J6RLpzX z+6!S{k^OTh{cgg}o%>ICG#qLMzG8l&k4r}(;6U^RXx#;kyFn?qHv)HuVfq(XEWxwi zLBo@0fc}J?ORoy|z%s($UvA<0fVf>p6>Ymv`D>`fII3_H1gP(TU?;S^45>>n^pVi{ zvEr!@;-H=>2UrO|&5bYmWb$j=r{58+ZY!Pt6Wk)W0>*%AmOXV4Jq|4gVDNQ#<P~WD z@Jzzay;%j1hC_##A3w|aUE=I~l^VIJl$iq&PsXesz!+%S58F<_k3GVHKNJny4=3#0 zIW?WkdR-yzI6v);NaG^X(t>v4pa20YmH~mD9U(9V>*{?#=xMKC4!Z4AaO+|0B)l{@ zhpO4G{fg{i=0b%0b!2@2U5qbfR#+%u4c@`JbcaITp^$g6hLTuAHif(k#^24v0JJ>^ zfdI^0hyZ)a@Lp0DtgAyiDKL(=W!I2SJKiA*q%$t*jJy1t6%Q@~&H@rY1)KIk$^z)E z_2E6(!%!ap*QsjFjT`ESY+djDZmR>4ist|ni(ckNAZ;O$BdE!<06oj_lm(k=4X)8B z|6c*^x*UG%aWC81BpBiF8;^PK<8xI9t>$mwZjDGy%2JhZ&y0WiWfSrIOw#WdzXa2_ zmup?=RSAl>mzI}nZqeEe3q@V7^#jRNO9C6f9#*t=16bAYVyR-W%hhXHrl#_1f~RK| z8J#G2WpNFn8&H`sR>EVnc0+y<T-TRj(-Tcx9?tRW#d}On706~CvRQ|zM3LXG+~?v* zf#ydWz03uqwi$JAybO<343RU=`P~tme;`=zg<KcJiG&#)oMm=$o@BBJ0^x8S8@Gh$ z+P9fNd<N1vq&|Z1Fj_wZ2Z!cRwcD%5KQnfg^S#hmXV6+B0$M@12|_^#2ED1hpNHH6 z+_ItMAfl1lR-+4dH3zRiQ^)f7mn|9&oo4LwKCXQNp`bx4?G21n%dGIOF}R}Hc>+3) zFMYT))z(k@u{d1=FkjN-i%a!ivs+3Im>SKF&!GKS9Oy5@R=X@(fN#i*zQ*9&kQsp* z?OhTY@iSEze@D$bVDBkt>iiyfKVj$Yt_iOQas+Wsa_i?XsbQ7`UN@Ar`9&L5`(DD% z{jid;CfpCu3_K6)1iF0>@E0)b`-_!V+XKV@ul)-&_G~mzY8N8_0000<MNUMnLSTZY C!Ud)P diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif deleted file mode 100644 index cca0729dd5f9178e362b83e70523ce33cbdc38b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmV+p1M&PvNk%w1VHW@w0QLX?mtX*wVF00M0-<RFq-p}Me+{*H1-5(!yM+wQj0w+@ z4AYYf%bFC+ofhPq3Er<8|Dpo_qXYk=2mhxA|EdT7r3wG14*#nO|EvlBuM7XL4EnJS z|FRDMvk(8Y59g*3=B^k2sS^LH8vm;s{jDA5vKr>M9sjoy|GE?Vx)%St75~2%|F#?V zyBPn!82`N;;I|>-x+4CxA^ox}|FbjxyD|T}HvhFa|F$~)y+8lFKlj2N_rxCm!y5m@ z8~wu^|HdBw$RGE}A^*%F|IH%*$tC~KCi2ZH|Ij4=)hPemFaE?b{n0o7)HwgWP5-`7 z{>DoE)<pi;LHxl`|I=Om-CX?2Z2#M1``Kmu*K_~Zc>mLV{?~r};%xondjHUX|IvZ} z(uM!oh5yuv|J9EF){p$&pZ?yS`{9HC<d6U3n*ZgS|KOqj<D&fRssHM(|Kqd&<hA_e zw*Th3|LeH_@6-S9)c^6=|MuPg_v8Qi=>Puv|Ns5~0000000000A^8LW004aeEC2ui z02crk06+)-fPI34gM5a3go%P+CqzU;L?!?LB_)#}E-ETqTVI5B6&#H~9Hkr?7%M;* zBo=jvd}K0cT}nwwNRL59Yk4+hh=P1hCq2eJE-ou8Dkvu>9;G!_PQkEnU``?;PGE3* zim-P$Hd=3bdURqsICs{CH%n1SxD5@D3=GCDYHT;bd_?pBLXe;mCB_amJJErK91+3b zOwgp_0|5jNjvRS_V1NTuQ$)al6{Z3OR2VQ^puiG>gfQ>I$(#vmPM9YnMmz~KCnl^i zA+osfQl&|gD{1hw5dlom9Sc~b+`^S>2*Dmy@`$)YD9!~YMvx#85+DGN9c5cEdx1ws z9AQptRs<PBmq>vER`34MbOOqmYJCFs@Zkf<F=WgZGGt)};vx;nmZeZ|K!5-P2{xF@ zp##jIJv2C=K%oGJk|D}~B#E&A1Bn?oz!e%Z!Bi=f7${7b0AY;Jz;$Ru*sVK41PC<h M{8n`6(9A#pI}DMAIsgCw diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/sad_smile.png deleted file mode 100644 index f20f3bf3c09d5f95f64deb2b0779bd1cf1a20acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1115 zcmV-h1f=_kP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CcNkl<ZNQteL zO>9(E6o9{bJJSIi`ZF^v4{5+CinJ9hZAm~>q6?G-5JO^AG~!AVgVCUIWsDfN#-9Xt zlGwz=xPX|Tm>8lK8|_puP@sf}PKPpW-*l$aY3J{~dtAKN&J;^z;Z07?yLriX{?ApT zlQS%J+G61bU^~zY^!Nf0_hk_HC28k#O9BA36ud1K-iw&eNc~`84}v`i=|S&jv=?H& zSdXVr`sJjZKk=XNwph3s_?X<41DrVsK?m9%gXmUh+y+X)^f{Osg3<4xT!Du^hlcz5 zfI~?;pIH*_f#n>RK3dE9BjRp4sA$=WD*S;eCs4(!AV8=CmUlvA52Vk)z?(wn+lq~^ zB|tq`YoHeX1s6X&AlE*@ec&b0YFz2U&)}B86)*-|Q`OW%+glLX1^v&$olimg>wQT( z|NJ6&TP(bn+{kfGZWU+C)6~gTrA!J$JTYcz1I9qp<FNh%_@+nL^`oL;!@l_%C=qEu z+!4OrVM${diA2y&0u&$+AIyS4PgfX>A%1oi5PI4}Rio?Q12+W2N8!o-6sm4R($42J zu${3}7KQW3${@OwSn#YkS0Ua%LHx`F#ezez;1VC0BtBqMEVy9&Xs#TAmWLr2gt1eW z-@<61mvkIf)T5m=7{?3QHDof5S44qK)+Lj5tM?i4;3DA6A&FzKdMBjg__IL(=)oR> zP!L>aQJ=1At;bro()(_y2a%e45K1M_b0d(6Bi4S@wd3FqoCi<GVRgXZ8jbSF0@`)i z_rl$tw>Kui2>YJ9%ln^5Eh@CiUBq2yNnJXwYT@27e)Z>%h^NOU{f_ZdFgjk%b*)wv zD2*?QTmx~U-7r_u^SQn)F^ffltzZu+qTS%_9s)jm4}YD8Wua<L1RO`WaCwd!6J;jT zUU6g1b*zd8*mQ4@pkl#$(G95VFtk3p2tG)(8!nY0>@I|qny7GkV1^cJIrsOpvSV!n z2-t~f{v6Ko)u}u?yF#pqYR{KIGkWSb*!Tu`8*_e$oDoiLvv4lMa?ks-SIR`z$5?ky z7_u`kTlCVgVi`28WHeb|dSskV%OD{O;SRK32D=ARsKAD#ozGRrKRbM!lfBSbZ_rv} zMZK+OXZ<xmwWwks(g>k?Br%BuqDB{|G`oL=rjCX2*8oX7e}bltJ~qD#)3ch2W4Jy6 z6PcPKx?o&Sy9UOm;O`qKr)>1>m}c`k(A3dayW4e5=NzK_aDq)oAXm{8N>$LUx~1ZP zsnc}55ABB&z@ge!y!o++0H2b*@C^MgLiQZgY44HH2qNGbh4JU0xeIn2gQm_efmf4u ze(IL+8YBA==P1{|i;*5;K>(uNRax_djS9SywDVv83vw&CZ=e}?1lR&}`x@YPV93`$ h-TbuO7X1G>{{Vo&VsT>6tr7qL002ovPDHLkV1nEx7S8|x diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif deleted file mode 100644 index 7d93474c32aa7d066bde566fdd746483f5dd0aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmd^;{ZrBh9Du*Rqo#-COCgz}<X)UF3Hk*#K?#F0#jQALu0cXd!+gWUuIqd^yJhCM zmD5edbZF`nbu&>9k}mLE)5)f;Ya`Ll)G~LSHB&!Zf5)C5p5LDzp2OUDlq&K;e2`ZN zauAKC(kU^FC~6EE!$9ebkLXO4!J;zbqFL-{_MxbxqvWJxlsGoZj;FEMA0{6o%TK*u zm=T&Oj?5C$awXx4%*YG!=<_+~`CNJmpLvoWo01ZDQos^^&K3&eMW;DwX&iC-QIR-7 zB2AEHCKY6H#8STW+;K&ryhDa)FF95gMwBTcM~j^Xl)=+C+*cZKOW)!_Wd|*G(E6X9 zpv?i)j?jXER@aSAH|W4Xw=4YM3cYUgE!fp|EVSdG0}r=-x4ZViPdK=<8?;_9;=Q0f zuyV(LM-#BqAF!<nS!hL<zDJ=i68g!Yje;L(FwEH0`GS5gjNxDF{lGwgdjv4;U(p9X zzZ<wT_U`g{*t7A_XA@yC?hii`!9;>75=;lfTp0Wjx;+-NHbYsPiCUkbtj|*5&j>K1 zU^xg@3OtFfE=pBaoKRNqm0t=PYSS8T3LEQ1b@h^_`qOQV8O`5hshZEIROzag4DIc7 zZP!_?CR24QZ+j>fMiOC^XX=rd`ZJ6JXN`k0(~!(Kn!TmxJ)Qbw=TWN3kZ-z|Z@OP# zG!||>5W~Z?t(iQSQEbo4wyhUnsu-p#VXhp^Rq$Ii{C@4t<5F0-28;DzRc)=d!*VxR z`(R-Jo(#dtAgq~TeHJzz!K-=LT!Ni9u(O5yKM458-UdPXkdU{zZ=Yad07-WyaC(~b z#qGozwb_Z+iral^Sj{Z?wJ}D?<1s1WUn}=>stHduaphdE(Ban>y`joe;2<f-m6*(J zoNP-fezC)h<%K(q<B9P$mGlBy5RymY?s32`&(0Mgxa&=E0&a7T)zO_0DVw}}*JVX7 z&>YW?J5+{IC3Z}B%e=<QN*%pN8zNX|CUDL!ez$6-j=ZCCyhwPgw{m_d3gP1xME#2E zjdqnKxtqPDs|2dFC&)t@WU8a)K2S#(s+u~JD3^@Sr^YHX{m^q0H`lq{u>xIb<GyM> zn$z5+PB6(`ygN^Pw<}q?==*{CfQsBq?YpsSZ>WSb(%E5arg+*0ZmfEUnB2cewoEl6 z+2YJk#MpYMSd~0~#Ac6Bx4-m7FekuXPMqZVT%5#^z9Qpn9aB<sik+?`5V=Huakzbg z#=o}AH-xEUx_)uF!r+yu9Avu6Qflj%YD<mbDo2Mkc*MUPw8JtcH;h<<o8gK(<E5HS y$Rktl`*L6CSRS;VzdsG8S%eRd#3;&HZdCclpB+|bml&}uLap<Ay#!AzLjM=G_~pR> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/shades_smile.png deleted file mode 100644 index fdaa28b786cef4fdbd48a3f1fbf7c7aafc456d97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 zcmV;l1WWsgP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DgNkl<ZNXNC6 zdrXyO9LJdkUPwYrE$QN=(z5Wv<s8Jg3S(15moag!Kp@dUl$Qh>O_$|bO}9oX#bzD? z1cc;fz$uc@1Tu?2Nt-RX2#Mxgo0W3jPrv7V&(VX*W^MiP-QM?kzrWA(Jip)b{9c!? z{y$v)FAezt@DN3dvPI>h9=pozW9pm7zlKXtESjyC^L6m!TTs6QO1urJXEmn2DUW#X z3NFU6qCBpghC}nf8UP)caG?zT7S6Rk=&ym(0{<e!@F=f}k=P;O23R}Cshv>dr44kf zXW(KHwyw=+XIH{WGqj6-PJ(XnTs;e27AT&m=`kwymI<8Ud7RvVRyBp|=ibz8ooTYd zS#W9wv`vTB$Kk{@I6eiM9~H@aPcHn~DLb5xidBr;;Cha){6zmAFKtssG?7vBh=??i zneIzp<CBtO0e$}%d^Z(ZCevR#nXFVFA{PXRZ$6n>8|eFZlBO8WH84(vHqhHwXeKzs zOk(mPcI{4KS8fW)s}~X!96-1A2?PA?Wcq5SiZ6h~Rng*0*1gGV;s^?PmhOB>o3I?G z$VER=-PLS(VJ0bS7SYs{MZw-wT}@4ytVxe0J=vG)4`xuEGo5uQvkl*|%$vS%#P{+t zG7_Y~!ct5JJe$_7goc~2SXN`LNN2~EmAb4IX;|`7nQJx?800T2_9H0NjAh?TSWDO5 z^p&i}^67f!hX$fpis^ut^W|c~Bh7r0yNagzSJ?A@k}mbUH#d>MU^9O;Ji@iZ-h_#7 z??(wV)ui3@Rj*~=?hHaA1THMabijKkp2X%2CK3{&Xtt))d~B1Ux-^oKqIvCA$z|gt zXn4@@y%<SzRVvL#H`07WbTEaaMDeW)La`Kc5d6~dS=xfA0G2NgC+FRGa^8z)MSKKd z3rt*Skt2Ed0r+Ynms)(#eQ}}Wyd5Wco)vLnghiP6t@XLv;F6XYxz-cpB>A)bbzhb) z_9r&RpKY1GT<-9PqYue;C&;ZFuTOGC#<pk8VQGvXu?zj!wsE%j0vI@vjLvdOOEy1j zfrIxNkTcK7&GR>O#z)fOZ9wbphuU%QxtB3f$4uz7`%XTEtuYu|T^Kscsi4txRYIYg z0ddGWp0*D?xLD+AKx+hgNIFEdCsz-Qp)=3ZSWuZel)5v}umr6{QleN+M^P@(^<Jv{ z46_31uyOP^OvCzy8^viZgH*qD1iybRt)O(Ybjnd^6;rTPJdMs!EXO6fas4m1L;ff+ z+-GyFkRy_&U*}4DH4WA;b7W_dn&OdYMWeBmK5QdjcAyx}*MCssYJW#2xJSw{#zv+5 zD=IwHv$3PkB)CjgdO#LXGEzF{2-xqY{5CAZ(PQt_xNfvu&32Bq?P8JO;t_VByRrRS zp@pvE8zz!>6{BK@YPt3aq-qp!xeY3PB~VsW;A#}R$W3Fvt498CW85;#@F=f}k=VQa z%`KC{^y`&ZM@yYubvcyOvl>(1lt;Y(<p(`hFEpr5R3$oZSCxG%_D;VxXZ-^Yh~-he Sx$P_f0000<MNUMnLSTZa22Vl& diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif deleted file mode 100644 index 44c3799690ede200f70487c344508416bcae2a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmeH`|5K6&9LFEwK~PV8kQ5PhJ|48w!K~aZ+}b6miL{z^Tbp<L;<r}2b30x8A$M(4 z#Bc3XBIlfz=C><tGfQM1N~fenx}7KqQtBX-Sh9&tho10!w*H3wy7#?)e*N&eduL=G z5+>)e5EkM=kneMl8{Y(*&Xdix=zRUZP!^Sxr3T8vcT~$o+Co#{RP(N>%i&Mj0vv6D zzg?k22N}A^(2c@X3Utz-I{>cI-Mw`9F$nsC;ASwWLhM}(M;~kLItD$V(943}NVv}N z{S@s`aU4HK|31KWX<zWDcWtSepk{!E37Rk%2?I69GaNx^*`SSn^uvn_mjsLLLPCYZ zP^|A3A5^ap!+T-)RTvb4`Zb^SAdDRJ=%PL2F`#3^ILCJ<3MQgJAG3as=h5RZ84JJQ zaGwX$yJ3b0#@*Y-1Te)D=9l2104#~Hm`IH8^UdssIU(4Rd>RpGkJ@jXu;0vH9{3P$ zXE`*V5_hG<yvRG21;!7E#rM6Fh43hU$8yqZJ_F{nVEl?Of9-o*=(B&hs{a;d%3!tv zj8$N%fCn`&R|lqg*OcPV>1OXz8?n^7V=IT{dRS?3o34Si9qb)mR}Vbx1N#6h4|-SB z8`j(4(7@`@=HoGsa~jr+TdQ-h_5jxBVci0oOW?7?_LH5>r(Vw=zU{w&*a0Ar|MwpX z;M=Glf;1xh=Z@!}NTC5D2#6B)E61cLGw_Sfyi8>k4?$u@;yh}E;Ka2|d!@A_kW<O+ zKjV&N(f1sBPtwpodnvNSBq^Dd*W8Jd{(a!tUTXWOH2ZCoeO^~iCX)&ZKS_0Bq~K(I z!MbIiqJ@u(3yPW5N?l{^S!W8F7RpU6KIcB2HfW_M<TU9|j#_Opidd$aH=e4Rmf~_O z{&<1AAwIP;?f#IsqE>{T^KUlDD1Pa@!w+o={LShVfi25`t;l60a!f>7T)VDC{ZanZ zXW7mpEJmDWBpw~+T@E=#^t1CPr0h59yrs?_#RW=IPOG8t8J3xg=f#xeq-9~135Of^ z)FsC;^dU8g8+VJAQw`I6fkK~gi<^RQ(_A6BGh0EeJ&i~>%0TH1IabnLBqCF3hEo5R z7Z?_C<R~WhODZ~c55L$TuO_iKO4Bn)$7JRH{3dJq$JAeuaoT>D^&QdYk}EQ1!0BQM nSLqg&lireGWl>tn5RD#+GA6>_JupT>h1}y^V*X?}hP?g{8;sL8 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png deleted file mode 100644 index 5e63785e42152e16329c5156f444b06f411f1c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmV;Q1YrA#P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DLNkl<ZNQteL zU5M0G6u^J?zw@!X&dj>=u{*lMB(f;3ChP1fr1n8RxV@-_5S4w{Ll{JnkVH?VP|!=1 zfr1Y$WJJ(|m81p{)~-S`n-iPLs<b(d>*)SxXPued|9t%a_xA9g{g@c7hYlRhy<GU6 zbMCq4TybNvKqH9+Jw9MFuo395DL|s8ao}89FXkHp0MQ5@33_&-<WVv|hSB4o#~~ZH z4+9$^Skv&f3_{zN){Ec#D?AePv;&`zzp{tnz2Gz<@;C%GLEA$h1l&!+)Ck=80V-A4 z@)`J69S2@d>&09{xD8fGE`J<l^pLXF?-hhLA&lP<l@y|M4HV#B3oYxwzXP(vaQ-dD zy0-;u-bjJyUF={n{BtgSv`38}#(MB&rHR`@GkyW943+{Z!IBFW7eo$#e>)643(KE^ zo;Q!D_2Tn&@JP_Jll<5TzTc$G*wZwrYeL8jC}pdZjU7k{OSeJy`|w@AV*6QvZ}qOZ z8VIG74`q#UYHL`vRZxCEnwbItC`iPoK|%ip4@gPk!VIA3?{P0U?LG*W8!jG!Cx$YJ zrqyY^nAd>KOq>a0jH0|wv~p@bveImo#LyiQ!*?hdCMClnaek7-d7YABfvjb7<q(7( z2B#Ay&V*}E7!BA+HUX_JG&2j*v{SYuxtwViQ9*9nA~$U<><h|<D+T5(Dm4hp9)oOx zT5sS0`q4+g?F7rLd#9ZpF2WCZ?RCfnN-f$up<K2jmkM$TRCqUH`~=h*&W2|bu*@N` zq=u-G6=;^lt`}C?(cYQ_so3@03i~{jsVlU|U&4AIteUb3u^4WPtW|$bl(Ox_q`kHj zWur<dc^zY>N~vg4E?M}4E<!;!h$@tC*JbVi5(N5oFgv8NM4RW9XDXCtOpIcM(oB`o zti;*YO>;O#b2LUM+y_FCIXOT`N>p<P=p%waAK0^J5&W;8pxF(;_-Gc{x|){G7|knU zv~|X4?%aUp^3+9Ex}5|~152VbA7c6<bUa!Ij}z#F%N6ig08}l-ik)BK4)$<AF>b|i zdz(R3P>y!Asb68uey}Gd8gP!TfehaDP&B}jw0DP?x^VQqV5KakMh?>+^`V>{h`ZMi zEz6;6AOoBO(9(J_k8tc`%OK2HP&K7L;HEHkj9l{AJ;66mzKFw_qP1E<RZXcC#$n4K z2*<v;8Q--3z&qq;D`P%?q#Mn-p6jQDrlj=tM#aS0FEDP6;#ks&aJHhXGKH((GI8n^ zlrc=SzYFcpv=rsM#)g9see!r(FMco=ME%HBGRegcqa@!0uLIe$lH85EOkbVEG^!}6 zXbCQ%eN_kEr7lGB3YZ%7z6)y)q!3!;ky~@%2R>!`k7pQq2@0do6@+C$yMqN#FyQ7S z+?j&5Uf4PaOV@n~yq4CBQ;V<fUf<kqlzD`kr-Niim{)*6--31x=m^KFX}$P$quMlt x&tDTf0>ps6ng#d`7^&Hx|M|83C;0y%e*?UTJd8_R+}i*E002ovPDHLkV1fcuF<k%v diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif deleted file mode 100644 index 5c8bee300d7fa70e68e5219a92da9f1bd3933f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmZ?wbhEHb6lV};_{P9+u!8w;CG){bmP6GXhikcy)p8xJ<2l;Ef2=|9WUJ`$R+-c7 zk|#TqPIarD?$y4~r+j6K?%9ck*QOiZm~DPxhW)L%mbd5IURmgWbxG*8<x$sH#ywc> z@pzT*({({l*N42=81Z6L?8_}NH&!Lw-&Oy5d%~OTiEno%z1@}i=}`Wc!^K~Y08z=8 zqa|ODReU{ByL`pcRVx;(TCs4=+EtGZbUr@Z_w7`}x6{p^PqltK)AIdX`}gx*KQ8n< zIXd~-$yv`&&;4;};?K*Ie_oyb>-y|p*XRDaG5^Jx1+Oo!{e5%c@7v4%++F$S{@S-U zwqL(>`R1K#_wV2PaPQ#V2e&^yIQHq$sn1W(J$iEg>&t78A3uEd{K@kdPhY=z_3qu9 zUteDR{{H^Qk01a4|7V~*Q2fcl$iNWKpaZfB6ekYs{~O|)np;}in&R}M!Xu*ewI*om znp!((urkhM4eE%SH{X?0V}i6~TzhAfk5Au(by|A5I$CmE(akHPcJ*uN=vml1dpNJt zl#y88-ekui#9?<T&d*3+-^edWS)7lV;T{vO_sNc~fPl3VbToA>EY@jo8!z9vd!5dd zgO=-sOyc8=Vr@!06Bjslc?h#qFe@BjXw^E!;_3N->%fi<3FW$9Px2QZcly8P#U>_Y z$5uX7x07BUA07~PS~<(aF?~H72g6Jz7msOOT%xmdYM$Qsc#4Hl@1IEKNv18XeezCG zd#VytR<5g>5Ow2*;FA-*bMEO?1a*~8;!|*$q!Cys(8?+}Ph(l=ZZTFyP7h6mFCQu{ hP7vo6<(n69!F;hen_@^yLcom=B67h}^_(mW)&Q&yJ3RmZ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png deleted file mode 100644 index 1823481f2f05404a08fcc9357ec930911ff28ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmV;~119{5P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000A^Nkl<ZNQt$T zU1%It6vuz}&dhE$Gn*xwwKm&Lo3w@~0qZ8U(VALRw6?W~eNid24<aI1)Q1+dpwL%+ z2_m9YsAwZq)FPzCQWZ)<L0uE6C85p7#*B??Cvi<?H`&keVK*VOAxTj@kLRBAyXXAR znLA?Q<}Cl03CD461G<0%fVb?=0AB%TfSo`qum#uzXcY_-_!u~DTDDUO|0EtCI~e=< zCvv$Q0Gg)J9&M*ionmUJht%W%bJj3((<3;A+>&g8FSwa4`@0CXJpO@c*)LSW(_eh~ zxvyh;2fD5UkV>Vv-1j}3MvhXu{tooodc3{>9=!%BRfN=VoIDgA?CIYb=|4~Fp|1%v zJ@}?+*(Vm@67c16IdokoVNH^-Ced}B0vfHm4iRqIL10}IRsJASs^u&dAyg1x)NP<~ z>!S>QdXQY|<{Oca@z4TXUD}3}$}LPuK}eOEKgYR#x!ZMg<-^@d+mYDmNXUqqmYs0H zRaFCAGg;1-DoB-@a0}6WuPpkVVu7K)GfZ51tG;2^v6H}lxinEzRW!A78C+<DR1i`@ zs#O)2Dr|1s!}zx+$j>LAh=h!F?#dMnA;cP0YbDK9AH_nBUoW1dkk2f}NJV4L8o?iF zZ*;*unrC%U%2h91qImt>z57L1$nXzm$t1_|N7@@)vPdaWq|3GRw7emuO%Xyts`|1h zk1xP{avY#RU3R*H38|FiC=XOfm3+}*;9M6t?tY8D2$9ZLZyk=*TwtVzw<b(<@5`>R zziwP(ChG-Qzmf(OV5MAnS#P11HpW}yt~j4%K9xlA=m3riq%}>euC6xldQ0zCCX+!S z&o39=r*Z3J1a5Dln4N{}ECs+E>?JW8TPBC%F)+gS(7gAU19S_=aZbhKV~3YLTy5J3 zia)q|Y9GxVPvY~}Ekfc07YN>ag!=8zSN1ps3<B?&mfbBJ#|Z*&15X3h<)AdB=Qfat zeRN>_o1@&>`7DZ3`oOG-tE35X*E6TjnwI_4N@|MLeio6C;Rj+vpB-*i?CXSEc9djG z&v5O>^W69P#FS~-p_TGi9jIy9v%qs3?th8t$>Bx6x4MSx>?A<lO1W#o%hv0UY#S4* zpHwmdKq{G_s<sJA`u=;kY1s}!ytDC<<BZ07`0dJfjK+G{`0#50@2-}+s^$w82^j`( z&c4yV^Y3^cfyM_g!qH2>9@DbZ{|Ub2k|@v#^qQ94zgGM|?gu;u<Vccu00000NkvXX Hu0mjf@p0U> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif deleted file mode 100644 index 9cc37029a9dc201ab9e0bd3a7cba4083cf56b874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmZ?wbhEHb6lV};_{P9+u!8w;CG){bmP6GXN9%Zw)bSr};6L6dc%nu0c&p6mcFB{S z$|pNjPWNhG=u^HjMfdDP!)wzGZ_GBoFvI@VT+7?@ZLciwySgOw+VZIDE8`w4_jtU@ z_vzZ87aJp9Y>IukCFaJeg!{YdUvE!%vpw<c&ZM`yQa>Kd`*OJW%aP(Q$I8AQuljnT z=G)2o<tvu1TCrf&iiK;|u6lH!^YP)nZ>Ji*oo@birsezD*6(NAzn|;;e!lDbh3+30 zdY>Gf{Oshc=cniXxHR$Sm8n0kPXBd%_OBcBUz}O+`tsV}Hy8fCz3k83m4EK9eS2g3 z^;?&3-nn-F{=E<P4&Hrm>*IrCpB|n1{Pf(TC-=X;y!QC<!)MQ*Jb&@@^_y33-n@GE z?#-_+uYP}j|KrDx|Ns9p&>krMWMO1rh-c6NSp|v{2loFB@lDMwt!>RA!mJEE3`|1m z8k1yL^kd`VVh!Tr;|#gfG}YBjO|>RY($J0a_m9$@(-z0Dk|VIa*+_7uhMBX2g^uRR z)ltVbw8VMwF!eI?iYW&A8tCd8_-<^oV;5w%+wm|?LTZv4hs%stGv<m*?{Ri_vNzW` za_sn=Ko$l@Mi#Y(7YhvE+!NJaza`i6fMZaXs5+Nd)YcTwLj@AXWs?p$cbWAz?J@Y# z@aS+;ztmn84aH6;wkfUG5?_5(nA*V{up;ts8>b7a@XARFl0qu&8#;doRc(B5UY<e9 zt?7+I1;6|zCBBN40-FvW(+pX?A!X-@RtC;Et5+X`mZqMX(mhvQ!G!lgVw*<X>KO)& i+9x_2`2^c%N*rutViFJS3B4&2{A`z>(S8;t25SHSpFQOO diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png deleted file mode 100644 index d4e8b22a3cc95d0d6e7e2de697e9e7fe910ce9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmV;w13>(VP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000AqNkl<ZNQtGD zUuauZ9LGO5xmnUCGqJrRi{7ni+KTNQZtax$uT(2OY#?(Y!-~RiDtj6}>{U?kWlzfV zL6}8_flmtBt?C|RR2^u$tg<SjZjB}_ZI?#d-h12ho}A-D(spUPq|hH+xcB_-`JC_h zo*%!XrEkwuEleY{A9xb@DU-F5RVS1}uL7+F`mKp%=WOa{!tp0C@7q5B9Li)Zs~X%> zC4YQ!u($L2xo+lu@8$ZrZYBqNp90?4jB>4#Ev6Cr<JU7St?@kv2}YvW|4oq^xx%BT zN5{~#rcBmSTT$M+`0p6ONECozB#Lt9n9mG0Qapo-Q4Kz`ZF`KoGq*BO7i(tx%0~d7 znnq~*R^S8SL?`nz>6L+K^CQgt)z8$>=PkfzrV;8jjgV~`Ays<p(pa4iU>czw;3Uur z)Za;uB)Z7`b{1pT9ss;vABpzEjP|`vjq$+IoZ89I)j?d>1;FR?)poQWI3ABTdNiff zA!qu}zR|BwYSzRx3QKD$Ow))aIxt(yEuNhkBQ^X3<82@F{E=h${eA%Q`8<6WzTw5A zFF88UlfHaL3;HFAXI{gjZ(9Kb?tdJlK)Mb}I7rt<xeih|grki-{M=jolhJV;3&&X% zRoX?Z2ha*jHi2NI3=AOib0}E=B~Vg;EEK<Gp~_JeLkA|6$dekmNGf@;%#M9W-X#z= zOW@@N+)aU(;puQw7oLR-yZ1g_mh^hGHDFOxzRB<a=|H4`rG?pbNhxfUDxj1oTB8IY zHv|==M9T7<4y65&2JGB8$qOH>s@DBH^y~?A>7teuS5Pg4i&Bb!KTrlw)fi1k%}ZNX z5B}i2Ws{UxfRfirio3#Hu~d3ng?lntYg!LP`Wm|5;nvmub)HJGh+3`^?%t<d;o^$& z#h3f}iCvwiledSzj9u$LTlPcCV?Ernv#FwL03p`rb%0FPnlg>hD|=u6{?gEg?cUvO z2MO<J06_EjieOc_O5_ITvC_CQS?fn%aL0SCFP|qhd<ko292CV0DXErHusEM%c6yA7 z8^17e`3t<b*tSj7h!Hhn*tU(&=L1++cUhQ5=#$)y@7}!m?I{*=w?M7>ta*LZ)HP9K zG!u;NqyE9e%!qo1l0$bkE;`x|5RW&W-w3V&?*p#_=9-<lz~8`4U<4QdjsY(K{?b2r h;49!%#cOV>@jut)pI&@VyM6!w002ovPDHLkV1lw`)rbH9 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif deleted file mode 100644 index 81e05b0f6adccdc330a951fbc4f7f109da3d2ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeH`ZBJ8o96<ljTWEV*T1#15`>@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-s<G*)k(ny z#&i>V@hs<7i{RD|FD!kJhtJ|uozmME<j_uoj$}BGL01xVCqoAV&g0OP@~4YSIa%Ps z;W8WC9Pn^gTtaa2p?fP_l#oBkq8>@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}d<Irt^ym=tcv;D#Im@>oC#Hx)4b5=>^m zZ57O<Lr?|5Oqkui@rwo)G;m)-`LoG8xtj}GxR(dfTyj7ULnas|sEK{#Y!MaG$43bW zzD+$a$8T1`!h4(ZC*pG-!Q3eben!oGPKGPV$fqz<13??i*TdZ};ofPOZHO<nQj6y{ zm+N4q0U|B1<bX(f{IL@rU4qC}Sm}l60Q_+co&@2^U04gj`U8lCAr^s+RiHM3ilhJe zZwn~@!4eRvN9yO==TGPufN-X?q_I(Nz*1TJcN>^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG<mxFJVDXXWI4Q7x9fXIl}m)0V<@SWTGN zU_U9?t}oSD!oKl<_!ARjyhGXXbs9^gd-gQJP={q0tgB6l2lwYlbF89wch?|E_73w% zTeK>)a1DQS=v%t+EA{(-hhAHq@QZep4<B*zi>F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==<mx+Vw9XDWj+W diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png deleted file mode 100644 index 56553fbe115199b50ad06acb77c781dbe0cc4561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmV-y1e5!TP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CtNkl<ZNQtGD zUuauZ9LGQBv`O8TwM~<)nZ{0ZY}n4#u76;4inxdA9$b-us8gKypdb@rice0Q_$umP zzB#bqiw`TpbfTcMe;B!O9b2ajgRN;+)8(c~n{@ei?>Ro)n>H;i4*bEF-~Ge+{LcNJ z-#J%Ir*f<p;h?V(=m&a%9#;T{s|YZfF!Kv*jTh^|!$IF+wECLluOZ9`m=Q=voR@)K z2)YU#NFwB02{S+RpYU+d=Lf!IA$F9JW8kqM{0s#8plKfn0rTT97lrAcp<IC{zJbP_ zgTV2Gna`{Vcffj_zrJYW>M3pSIVRZBhbUY@l;eov4bVVC2W;34Ezd)G1jgRi?EX;j z=(}+ck5>z<hJVZT&yVVxUtvG?hL&Ph$ig3Bm%!Gb6xeDx<Av}C&~gxlUxxc%fcEzW z6K4L^74UG-cbJ9AbDZzf*4`JX(>H`rNzmGnQfn7b3YrhVj?dtS9?iku1&zA~5@vo# zOs8^AS7>{ZANPlJQyJaTg0$iw01ZYY3mSU5e4rG@<wZc#)84RLbjK%PH^9Uhcy2g} zsM{r7NBWt$5TbAuz1f2-#g}GQyj#H-zJoDxhho8^Sg<k1QW#?<#exmW{hHV**zzQJ zJTP-11oT(oy`&A;=tWv-P?qz_wjz_UoJG`-$=YPH_VRsBJ8-SRx{HpVg>6qm+5qUS zci}ylQE2dhZLMg{)~#Mb+c!JcTfCrk&AkUoC1>VJL&iXdjv#KH1L#?Xrw!OvudtOw zxKA}m+h*Xkhn?B}lLDm~c;zAIeLT5hp~b>=?Cl|4mo`K#+zI8bel@gq@=VI@7}tX7 z*=4V5v#3C6c4>IkbAv!P+%3tf*Y_l~Qrfc>%%~vH4PdN<mnt=bZ7yHQF*Q|K7d$;v z=31=i*kUWRY(!)ySPhR5=!QZWY}=J$+at}4M)Uk~ah{t~MRGZdT+U)DQR25ti(DKp z;(xHonYjjC??=o}R^gGFO=L}SeqRXdZ`jb_l-#%hD-`5fbdKcd6lQA~Eg)ceX?-)m zp1uH{_zYz7=!OuQO-Okk92!d^>UXW&{@IChobQDuuR=<R)*uCR?j+eii^uB)pi(Xq z8f}G36Hu|xTB7R%N*3oNhb}>L$3Vi&4^?d;VdjTu?ii%=W0+r*R4j#3P_bdLNY-z1 zD;DEcEJoIELcZV}w@M+bvXYB4lFpByxnr<;wlBfmI8OVCID1aPLPb(2IsPZpgip4y zsmsTvE+65OZE!o~cwMnT)k(TOh4vG1;CL0b*3Y5^I8FB2OANmb*>UjH!PWqTgU)73 z+<|1;=^B3*>^}?5yT1e8NtpS$b>THdj-ahG-2N#@I?9s3>4vHvc-BPJznw7i->+t@ y3wI0nfv14IK)0I#{sf|KzF7NfyJz_Sjeh|_A8f6S!_bca0000<MNUMnLSTYXFfW<_ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif deleted file mode 100644 index 81e05b0f6adccdc330a951fbc4f7f109da3d2ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeH`ZBJ8o96<ljTWEV*T1#15`>@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-s<G*)k(ny z#&i>V@hs<7i{RD|FD!kJhtJ|uozmME<j_uoj$}BGL01xVCqoAV&g0OP@~4YSIa%Ps z;W8WC9Pn^gTtaa2p?fP_l#oBkq8>@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}d<Irt^ym=tcv;D#Im@>oC#Hx)4b5=>^m zZ57O<Lr?|5Oqkui@rwo)G;m)-`LoG8xtj}GxR(dfTyj7ULnas|sEK{#Y!MaG$43bW zzD+$a$8T1`!h4(ZC*pG-!Q3eben!oGPKGPV$fqz<13??i*TdZ};ofPOZHO<nQj6y{ zm+N4q0U|B1<bX(f{IL@rU4qC}Sm}l60Q_+co&@2^U04gj`U8lCAr^s+RiHM3ilhJe zZwn~@!4eRvN9yO==TGPufN-X?q_I(Nz*1TJcN>^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG<mxFJVDXXWI4Q7x9fXIl}m)0V<@SWTGN zU_U9?t}oSD!oKl<_!ARjyhGXXbs9^gd-gQJP={q0tgB6l2lwYlbF89wch?|E_73w% zTeK>)a1DQS=v%t+EA{(-hhAHq@QZep4<B*zi>F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==<mx+Vw9XDWj+W diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif deleted file mode 100644 index eef4fc00ab286211a8e33bf5762d3424c8c4eff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcma*k|5M9x0LSrnN!xByQ_H@ztwy;pVVtIv<+8-(rgHgun#5t;Sm)A_Y0a7L)VZU{ zA$46}d}%kNFG{A{N+SA-IIMOKcerzQw9n_|{0E*tKYn|rrm2-Hw0y!RzX++wAr)HE zs3T1$XLKH))>$;YuaehyWfrRaQ8NuS4Acdpk%3wk>Vj~Cg_|rivC+hVJqUM$J-7L2 z2tlI=H^Qk~5|3Tvxi3NUOtglgJq(?EG>3cJ1$ZbxhlIAv=({qsL{fG+?kuI-m!N$) z?kUk6Pj#%qgH>LK#M>=JmjDhC9*d~QVz{K}k$QV%cq*g%=b(Q!dZY1tE(W479D~;j zF}{fIR!}eEFr<Vhj%rIrM>;w+v~wLbl0uIq`yOd9xPyMX-S<R?H@Q=<@_eHPj22+< z1U*_rebiCzLJS!3(u`MT3|TOI4kKm0ch~55SEoLhFi{3~B_=Q9{dKsjeP0{!`8M2l zFmcZ}*$ht`zO>-mAifRZ#~6OSh1ZQgpFmFmH2IHYzXSXT$tUuE_TLi~1IGMflgV(} zP+}?07O#vi3nxS*Iv*AhA<4?jEIBwMRLtXr)`oItayY@lAf3gqEqdoBRZ>!7ymEQM zF8%!NXNnDKvBKrDMo1+RvAA~L2DQVsH(Sl;tF!kWIcqy4pP#Yk@ZkenV&#X1%?py# z5?dIIw!lEwY;EoWhk?ImOrYd4%Y}*}U(e5{DV1!;Gx_)O2BWc5uqebBsqHl{wb_>C zaQ*yC7{OT!RaK-kLBBZHkztx-269qu^~YGHrRJEto6CfX36?c(cWglBgwu}~eP2K6 z*jRI#GglwmA}jHn;z|<>$C+H>WZPxC3Iso#(<`;=-ASDB3%OmS@#wyS?_GWt{{DR8 ztY2bUtPonQiI+(=yL(Lt*QL4Gd#OHyyOr0fSQ~Vf)o<hq(+htFGov<C>ElxS{4=fV gS8FUP_VX^CCTg=ywW&COsj;=*`ZRFedWw*QzjS1D6#xJL diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png deleted file mode 100644 index f9714d1b3ba5e9324a1a1663549ba28b45af9638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcmV+q1n~QbP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000BlNkl<ZNQteL zU1(fI6vuxv+08aJO*YA<Zf&rl#n2?S<`Y`0sC}sR!3HUaTE+ULAQ7dCPa;Nq6+fW9 zSuo&>4=F;lf`~OS)ZA#arZuHf*sO8W+|6z`n`}0F?;IcQ-DJ0{X&*drm^%#jcjlb` zoEbH{utX(miPY8s2Y_Cn$9DkB_X*&qxSh>Z1OTcMyd_e56fvKY_%4b)0rmtWC%na` zUWoV}J(NJ{m*RHz%uV4fk=h2}BQlqdGj;-k4zxT9O?^<mAC!XYQ?NJ*v){s60Ur1a z>h2u^2I6)$RT1uiWr|B5-pPeQard53H20x$zoFJ*sMRYVK&TyRI-v0hNRGky8$!oh ziaoE!K;2&&pcMW&7e6>IS3kzR??usSUg_MA;O4;<Fa}(+F;WdJZ$jf?7<~rrcoN!P z8;aZ6=gQzMk=mnVW`-H*6Q}Dbs^p4NCIKRz8&f%eF%UikyWfYedW6G2DC%1Kiy9~q zsYBcuzCIY0`Zc7n5$(i40Rq-U8U%VeYrz<-UzY))r!BM*boaa9hG6;>JU*I0Rkg<L zY(@hIm^&LKcLCWJMCW7cJ6l~TV2xhG8oS17&S5p@VvR3gjoYl|Trhq%mj|KwK?nw6 z?rhXQ!f2qEqy<~6(M}SK<E88xQYpt1Q6QCeNu}M5`I2~W5pY(J*lF1DFeEMf-XH+< zU{69Q2(D9hPH*2{O?1~b@4LAgL`vpC$mhMC8-bLCM314a4ujut9z1Emj)1{68s(D( zwCmFU{N3Je|5*Sd^gnx-w;oHB39T|0ad$<fDru=wxM#*!zi1-fIJe-R7{3Iw^Bc7; z9aRDH^JST9z@n)eR`R-7>sxYD?h@P%_N1bz8@#)x1fDOH{OsNwygnCj4WjE%>1j&g z0bqirZn(4tweEUK-=9lkFBaI$BH=0?>DmGU5@<j#{tSCw2k*u#Hjy*K$o?qKpHLI> z{=8==Y^~W8&eAgc{udI8BHV`7Tj0oe0u^YD+u6)U`=_Ue8R>=kYJ=8#UC`ncAZ&;# zMKJ{tjRcyEUR~52IS=9X_4d~QaXWj4aQhJZ-hu1Onu24>>+0)Z+;TmPK{;ziFVAWA zy$#{^q0+lumn1nr+sPPv2O(3?<no&fYYY?|Fjbn)_n_@$3>YY_+KrDzBk&37Kb~gv z1xQapmG&M9jUWQ9Q5e5m4V`fCG=w|80A7jP*~R~amjpS6IH&mgn+VBC)*ZZ~R`i{Z z*{HzFaXb5ECA}-c{QwQXLqHeM?T-Mz0F(ZB?#8F>mf-(~{R;@jTLnf*<W2wp002ov JPDHLkV1iO2>B0a2 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif deleted file mode 100644 index 6d3d64bd126a56382452a47faa20e3e0e8185a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeH`drwmb07q|2ffgD%3r#Ptv=s!@suUKf%GMUUQ4Mni<F@RP&>_oAx}+P+B#W9t zc`384uRy9(c??$YRj7s02u08!1_wiIJA=Vix``y#Y!e&W`&;}H`)lV5oa7{@c-Onq zZ5lqoCsqierJVS&lGb*B-mYa_Js8{b9n*0r)_#aN(#-L+ut&{nMo;tZT9W)0=1i{u z9dxuup(6_2F|fv<gNdJ5=uUXq!$vO)SL1Ol9{n8HISZG_zb?N4D;GU{^rWCSHF7!K z*Pj~bO9?vo7~sAd;9)2cP98@1aHRg@OkQ!4!Qu3flf*EI5fV4j1H+k=T@>jPqd%W= zO5ogz>ryzjW9Y4wo9P%!!L2mh5d>~;h)f7^SA;1M?ySSFS(wfY&The64%}jR#Q1#^ zyj!U8yvR(!>ciYu^ZAkaT+B)FI4?4!z>Pf^R#UfkM;<6Ck0Ly(#_VU*{HNhbEgn{^ zdMm^3D!8jLdzf+`iTJb;|M!^IW2Oeb)x%ql`$sWn!~;|K(FN+!`PIh;JTbv<!Qxpg zw87sVUbbTC3jF<eay`80Kwt>Z2Jw6r&+p@f2QTNb;zQ^UP^$n%{Lg<|Konxo2%?@4 zzt+BfLe2yc&q|Y;&59yMVw|$7wrMO{VU|{x(g}Tn<bzIOet@lz@wV#7PzCEuPMLAP zORrEy%UCR%mDXKyDsz{S6wx~;&dCcs!X(wiBunu2cDCNuZatQiy+_-6Y^?cAo8-ks z8+UCT@6GC%^*@9fixVUV87yB%*Q8PQQT&qb<f7_cMsX8c<63Am@xJ+UncSUIXA;O7 z!i3M=$j&M`-?gCL`F>Mdb>`1%8$FIrV-+gD(uoXDH;IDdB|9~>2iP04OUyz2P0L_K z)idKS*;BkVYp-;A4LiO#%h4>iKFzC~Y?11h>b~3?Hbv)ttP6b0tg~@8*T`L_wAR?M z#EfE95~(LtoaW7zd&GDKr*z|n1~#qlRMQDTkx=d8<jU)BrGCgO^JrxDa(bC+TlAbt zJovS@DEX4mz>OpIwfjrot4!hSyC|6!7HG{yai$rao}e-0@~E!k<%WdMdG-dz-lMHG mG1sQDXpDj5@2CU?g~HL3TxHM|Rq%J|xf8L;ou9~w9sdH=NT%Qb diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.png b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/images/wink_smile.png deleted file mode 100644 index 7c99c3fc54c753dcfe19ff73e225733a2ad7261e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 zcmV-g1f~0lP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CbNkl<ZNQteL zUu;uV9LGQBtX&;$-PRT?S{(r*aYG_(BjJz4$ODQA5JO^AOvD#8F&GmhCccT`!58D7 z1QQ=5fy5YnK#d4SjOcJN>kxuNha}UkKykNhbfsO}d(O{?d$--fh(36dZ+^M==6-(X zoZt6%jv5`CWUi4)G)IB8Krhha3n1-l0Qf2E6bo|#05umpm1y3I*bm4ZPvQ)KGXVJk z?_<0d626ifb13~n)+v7eukci&xgB_y!ucJX+zDY9QV&CXHMFh)rQq6WxH<@<-$1nn z>pp_$y@!BZS*JKYC)@+eX?}a>9?tF+vtp-W{%TbD462$zO<e#1B3;n59AaA_e-ip% z6_&rIxbNi*s0V@xg7AZ!dwYkByob5}InnBh(&Zn)RKN&W3&zey8X>g@Vw<4vDY)}- z=zQf+)+s(y2TvuMw^A5B%#qdNu6lw7xuBHIfruw-=T2ZPv~7f?`{2tSVbcjkblJA) z8YmHoB4(Jc*C(a5io{}QHv<Z98$`hRU~5VLavczQIwP}5m%afe0z>=Z(Y_q2VOiEG z7BsMyOUIIw&mt{hbR`4UGWzFrK0TD-;D;l8|LqvIW|%4)(*0wk`yHmrW;W^hy)gel z2#4X)v7~QdG|)>v4f7h&ZXT=)#xn9(mG#>ev*r0NVvE|CELp}UjK3NfpY&HG0&WS( z9Ds!nK|YP&8-#!!oI!|$!MHOv+OVz_Y#FA?tXL9;N|ly*jU+o-0Jvj*7%CNiy9CD5 zNOC)B<S_UR=fU%7SQxSxt5H6Es_IQq1S&NUi?+hHrx$tOGr77#tHL=<M^YN{X%&Qf z!!H;>sbr|tEUnQ{z%hOty%H#JAgUTvuGDp?2GYd4p;XZr&thZOgs+a~sg@1X?{1Q< zmxLF9GpLAngLn1>;Fa3Uj~!hJQj1$Seqx-;TnTLOS-@CCM^O_)+z1~a-VNm{7~|>k z7;7KvU|w5<Prk@A{70GMq~{{HX2|_rqg*nxGZ&ChJL=l-G<+b?MD8$0)+BL%ho*?P zVc{^`y@1Q3B~E>pC7-Y2x&lBf)=1A1MJler3KB^o+>X|_!RG!PDzq%?6brNMKQVNe zBfZetXwh0D9*9^J+N03aNX1ozG3a6$MlM3tMMNW^xYbivHJg8iwyxRsuRFMg-rB*L z*P*$|qLrR$|7j_}we{{X)?!4nY9Dm%sXMrIz&X3<+?`>?UMSQw<%(Z}K=Ep(zNj@9 zY=dUyo6xyC1MCV~@y5#{2E5P2uTRqVEKHn+2JKxE8u4eUu>OkLSHk)O(6;<z;H9in zyn0J`Ajx*b-Ot6N3G#!?2s}4T>#j!}ROrR5Q~c~E$gSXhf_7j7unOq*Bfu$O(2qad gc(wf}`2R8f0lW)%aFGbSlmGw#07*qoM6N<$f??$muK)l5 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/af.js deleted file mode 100644 index dd63a1c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","af",{options:"Lagbekkie opsies",title:"Voeg lagbekkie by",toolbar:"Lagbekkie"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ar.js deleted file mode 100644 index 83a8dfa1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ar",{options:"خصائص الإبتسامات",title:"إدراج ابتسامات",toolbar:"ابتسامات"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bg.js deleted file mode 100644 index f8bf7119..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bg",{options:"Опции за усмивката",title:"Вмъкване на усмивка",toolbar:"Усмивка"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bn.js deleted file mode 100644 index 61de3df3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bn",{options:"Smiley Options",title:"স্মাইলী যুক্ত কর",toolbar:"স্মাইলী"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bs.js deleted file mode 100644 index 422fb8b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bs",{options:"Smiley Options",title:"Ubaci smješka",toolbar:"Smješko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ca.js deleted file mode 100644 index 5164077f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ca",{options:"Opcions d'emoticones",title:"Insereix una icona",toolbar:"Icona"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cs.js deleted file mode 100644 index aa0d7fa2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","cs",{options:"Nastavení smajlíků",title:"Vkládání smajlíků",toolbar:"Smajlíci"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cy.js deleted file mode 100644 index 79164f5c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","cy",{options:"Opsiynau Gwenogluniau",title:"Mewnosod Gwenoglun",toolbar:"Gwenoglun"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/da.js deleted file mode 100644 index cfc0db19..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","da",{options:"Smileymuligheder",title:"Vælg smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/de.js deleted file mode 100644 index 573e4946..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","de",{options:"Smiley Optionen",title:"Smiley auswählen",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/el.js deleted file mode 100644 index af8f2605..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","el",{options:"Επιλογές Φατσούλων",title:"Εισάγετε μια Φατσούλα",toolbar:"Φατσούλα"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-au.js deleted file mode 100644 index 8dd27c36..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-au",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-ca.js deleted file mode 100644 index 01b27019..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-ca",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-gb.js deleted file mode 100644 index 9967ebfc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-gb",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en.js deleted file mode 100644 index aa2b1e29..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eo.js deleted file mode 100644 index b84cd509..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","eo",{options:"Opcioj pri mienvinjetoj",title:"Enmeti Mienvinjeton",toolbar:"Mienvinjeto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/es.js deleted file mode 100644 index 0a64de63..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","es",{options:"Opciones de emoticonos",title:"Insertar un Emoticon",toolbar:"Emoticonos"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/et.js deleted file mode 100644 index b3acbc88..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","et",{options:"Emotikonide valikud",title:"Sisesta emotikon",toolbar:"Emotikon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eu.js deleted file mode 100644 index d5eb0d03..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","eu",{options:"Aurpegiera Aukerak",title:"Aurpegiera Sartu",toolbar:"Aurpegierak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fa.js deleted file mode 100644 index 536b9343..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fa",{options:"گزینه​های خندانک",title:"گنجاندن خندانک",toolbar:"خندانک"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fi.js deleted file mode 100644 index cdc06b98..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fi",{options:"Hymiön ominaisuudet",title:"Lisää hymiö",toolbar:"Hymiö"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fo.js deleted file mode 100644 index 1758e873..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fo",{options:"Møguleikar fyri Smiley",title:"Vel Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js deleted file mode 100644 index efef5640..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fr-ca",{options:"Options d'émoticônes",title:"Insérer un émoticône",toolbar:"Émoticône"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr.js deleted file mode 100644 index 56b9c488..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fr",{options:"Options des émoticones",title:"Insérer un émoticone",toolbar:"Émoticones"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gl.js deleted file mode 100644 index 47060596..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","gl",{options:"Opcións de emoticonas",title:"Inserir unha emoticona",toolbar:"Emoticona"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gu.js deleted file mode 100644 index 15a08c68..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","gu",{options:"સમ્ય્લી વિકલ્પો",title:"સ્માઇલી પસંદ કરો",toolbar:"સ્માઇલી"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/he.js deleted file mode 100644 index db6c4acd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","he",{options:"אפשרויות סמיילים",title:"הוספת סמיילי",toolbar:"סמיילי"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hi.js deleted file mode 100644 index 2aaa0813..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hi",{options:"Smiley Options",title:"स्माइली इन्सर्ट करें",toolbar:"स्माइली"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hr.js deleted file mode 100644 index 65116ab7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hr",{options:"Opcije smješka",title:"Ubaci smješka",toolbar:"Smješko"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hu.js deleted file mode 100644 index 823e1d53..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hu",{options:"Hangulatjel opciók",title:"Hangulatjel beszúrása",toolbar:"Hangulatjelek"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/id.js deleted file mode 100644 index 07b5be16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","id",{options:"Opsi Smiley",title:"Sisip sebuah Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/is.js deleted file mode 100644 index dbb52568..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","is",{options:"Smiley Options",title:"Velja svip",toolbar:"Svipur"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/it.js deleted file mode 100644 index df131f8e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","it",{options:"Opzioni Smiley",title:"Inserisci emoticon",toolbar:"Emoticon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ja.js deleted file mode 100644 index dab5662f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ja",{options:"絵文字オプション",title:"顔文字挿入",toolbar:"絵文字"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ka.js deleted file mode 100644 index 78218e0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ka",{options:"სიცილაკის პარამეტრები",title:"სიცილაკის ჩასმა",toolbar:"სიცილაკები"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/km.js deleted file mode 100644 index 2b603406..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","km",{options:"ជម្រើស​រូប​សញ្ញា​អារម្មណ៍",title:"បញ្ចូល​រូប​សញ្ញា​អារម្មណ៍",toolbar:"រូប​សញ្ញ​អារម្មណ៍"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ko.js deleted file mode 100644 index cb3986a0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ko",{options:"이모티콘 옵션",title:"아이콘 삽입",toolbar:"아이콘"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ku.js deleted file mode 100644 index 9d1b8bd2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ku",{options:"هەڵبژاردەی زەردەخەنه",title:"دانانی زەردەخەنەیەك",toolbar:"زەردەخەنه"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lt.js deleted file mode 100644 index 49573bec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","lt",{options:"Šypsenėlių nustatymai",title:"Įterpti veidelį",toolbar:"Veideliai"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lv.js deleted file mode 100644 index b8299e52..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","lv",{options:"Smaidiņu uzstādījumi",title:"Ievietot smaidiņu",toolbar:"Smaidiņi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mk.js deleted file mode 100644 index e7e241b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","mk",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mn.js deleted file mode 100644 index 6f8cd095..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","mn",{options:"Smiley Options",title:"Тодорхойлолт оруулах",toolbar:"Тодорхойлолт"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ms.js deleted file mode 100644 index 0df42a59..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ms",{options:"Smiley Options",title:"Masukkan Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nb.js deleted file mode 100644 index db957dcb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","nb",{options:"Alternativer for smil",title:"Sett inn smil",toolbar:"Smil"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nl.js deleted file mode 100644 index 1b3ac44e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","nl",{options:"Smiley opties",title:"Smiley invoegen",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/no.js deleted file mode 100644 index 87f8534d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","no",{options:"Alternativer for smil",title:"Sett inn smil",toolbar:"Smil"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pl.js deleted file mode 100644 index eb1938ab..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pl",{options:"Opcje emotikonów",title:"Wstaw emotikona",toolbar:"Emotikony"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt-br.js deleted file mode 100644 index e41f5442..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pt-br",{options:"Opções de Emoticons",title:"Inserir Emoticon",toolbar:"Emoticon"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt.js deleted file mode 100644 index c9103e76..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pt",{options:"Opções de Emoticons",title:"Inserir um Emoticon",toolbar:"Emoticons"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ro.js deleted file mode 100644 index 1f6b89af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ro",{options:"Opțiuni figuri expresive",title:"Inserează o figură expresivă (Emoticon)",toolbar:"Figură expresivă (Emoticon)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ru.js deleted file mode 100644 index b8f1d619..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ru",{options:"Выбор смайла",title:"Вставить смайл",toolbar:"Смайлы"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/si.js deleted file mode 100644 index da884cf6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","si",{options:"හාස්‍ය විකල්ප",title:"හාස්‍යන් ඇතුලත් කිරීම",toolbar:"හාස්‍යන්"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sk.js deleted file mode 100644 index c1ce5970..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sk",{options:"Možnosti smajlíkov",title:"Vložiť smajlíka",toolbar:"Smajlíky"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sl.js deleted file mode 100644 index ef64a7a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sl",{options:"Možnosti Smeška",title:"Vstavi smeška",toolbar:"Smeško"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sq.js deleted file mode 100644 index d870960e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sq",{options:"Opsionet e Ikonave",title:"Vendos Ikonë",toolbar:"Ikona"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js deleted file mode 100644 index 4e46a4d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sr-latn",{options:"Smiley Options",title:"Unesi smajlija",toolbar:"Smajli"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr.js deleted file mode 100644 index d321eba3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sr",{options:"Smiley Options",title:"Унеси смајлија",toolbar:"Смајли"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sv.js deleted file mode 100644 index 29e4c575..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sv",{options:"Smileyinställningar",title:"Infoga smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/th.js deleted file mode 100644 index e4e12770..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","th",{options:"ตัวเลือกไอคอนแสดงอารมณ์",title:"แทรกสัญลักษณ์สื่ออารมณ์",toolbar:"รูปสื่ออารมณ์"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tr.js deleted file mode 100644 index 90481db7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","tr",{options:"İfade Seçenekleri",title:"İfade Ekle",toolbar:"İfade"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tt.js deleted file mode 100644 index 7f1c8d3e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","tt",{options:"Смайл көйләүләре",title:"Смайл өстәү",toolbar:"Смайл"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ug.js deleted file mode 100644 index 5d8ec4eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ug",{options:"چىراي ئىپادە سىنبەلگە تاللانمىسى",title:"چىراي ئىپادە سىنبەلگە قىستۇر",toolbar:"چىراي ئىپادە"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/uk.js deleted file mode 100644 index f6c59ee1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","uk",{options:"Опції смайликів",title:"Вставити смайлик",toolbar:"Смайлик"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/vi.js deleted file mode 100644 index f5d1a665..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","vi",{options:"Tùy chọn hình biểu lộ cảm xúc",title:"Chèn hình biểu lộ cảm xúc (mặt cười)",toolbar:"Hình biểu lộ cảm xúc (mặt cười)"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js deleted file mode 100644 index daea8579..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","zh-cn",{options:"表情图标选项",title:"插入表情图标",toolbar:"表情符"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh.js deleted file mode 100644 index dffc3f0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","zh",{options:"表情符號選項",title:"插入表情符號",toolbar:"表情符號"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/smiley/plugin.js deleted file mode 100644 index 426cb09b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/smiley/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("smiley",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"smiley",hidpi:!0,init:function(a){a.config.smiley_path=a.config.smiley_path||this.path+"images/";a.addCommand("smiley",new CKEDITOR.dialogCommand("smiley",{allowedContent:"img[alt,height,!src,title,width]",requiredContent:"img"})); -a.ui.addButton&&a.ui.addButton("Smiley",{label:a.lang.smiley.toolbar,command:"smiley",toolbar:"insert,50"});CKEDITOR.dialog.add("smiley",this.path+"dialogs/smiley.js")}});CKEDITOR.config.smiley_images="regular_smile.png sad_smile.png wink_smile.png teeth_smile.png confused_smile.png tongue_smile.png embarrassed_smile.png omg_smile.png whatchutalkingabout_smile.png angry_smile.png angel_smile.png shades_smile.png devil_smile.png cry_smile.png lightbulb.png thumbs_down.png thumbs_up.png heart.png broken_heart.png kiss.png envelope.png".split(" "); -CKEDITOR.config.smiley_descriptions="smiley;sad;wink;laugh;frown;cheeky;blush;surprise;indecision;angry;angel;cool;devil;crying;enlightened;no;yes;heart;broken heart;kiss;mail".split(";"); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js deleted file mode 100644 index d0728c38..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("sourcedialog",function(a){var b=CKEDITOR.document.getWindow().getViewPaneSize(),e=Math.min(b.width-70,800),b=b.height/1.5,d;return{title:a.lang.sourcedialog.title,minWidth:100,minHeight:100,onShow:function(){this.setValueOf("main","data",d=a.getData())},onOk:function(){function b(f,c){a.focus();a.setData(c,function(){f.hide();var b=a.createRange();b.moveToElementEditStart(a.editable());b.select()})}return function(){var a=this.getValueOf("main","data").replace(/\r/g,""),c=this; -if(a===d)return!0;setTimeout(function(){b(c,a)});return!1}}(),contents:[{id:"main",label:a.lang.sourcedialog.title,elements:[{type:"textarea",id:"data",dir:"ltr",inputStyle:"cursor:auto;width:"+e+"px;height:"+b+"px;tab-size:4;text-align:left;","class":"cke_source"}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png deleted file mode 100644 index adf4af3c984eb6549af7e35b4abcbe40275e9d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1968 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 CZIM9$ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png deleted file mode 100644 index b4d0a15a4d8804205f51ea3e2313e31913264c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1999 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 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png deleted file mode 100644 index 27d1ba8819842924df2d3e40fd5484ac1e9e8c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ildz|YV~EA+-pOaPL>xt0_eWp7a>UdBdyA)&f+GKfsVxQqGr|oN zUYu&}&~trsXzR^a#w++2D6M0;Zr2#CnCMg`wr<x;o`vecvDc6OdD6~V@i3@+*YkpR zD}#$_YR;^2Y0>EFcs#?z*YMbe6~`VMx&{^$7B=qW^}9S}>QvD+Tiulwb>FgF?l~!; zXQn_5ySisnhs@U7Z=FL^1K+=S0~CC~&|`R{(1v|^X4Q=6KLvKwS5@5#4`rBByk^}x zBN;x^76yaBgtberW+^JUuMK;>L8D9Yg0;2v>+>Q^Edl|d#~y#Y)9>LTAh>2LL;mSa zG7Pp0_HW&KG{Z!x<-pUYs->~Qu7dY|TfV$=WY@ZzH*O@bi3u7W+Y=uZl~h^zGj{jg zWtU$jteyM5zWIQJ^WuvPFY@#A-4853d-m*ghPi&vdpl|b1i3Hdm~FhKq-4&yOzoaD z58M5!z4tC}(wXmjb?=?~_v_!y`K_eXYti>ya_7V;D=qzZ-F?@bw)yApKY#uhI|Pcz zUpD!>dH3$$0v0>+l+@MLQzG3s8oz!m4GrxvT>tIcx2y-pzi{p^-+lL%#Am0_$mr<H z0!)$9Vg)PS7oK~mqjO-fil<hns^=uZ4;5w4=LEmEjhyD&RFcig5b||(#~)UW)1Mqd z>-A<u|A}7bQRjPpe)(CKRbCv8t5yYsy14x8U$v@B;E+q>_jxwwcfS6t^UCJ@$9tdo zgBz4y7fUq11*RF*64!{5l*E!$tK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)M zb_3HBl7`&;l+3hB+!}0tG9LkIkObKfoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G Q6i^X^r>mdKI;Vst0J0`XJOBUy diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png deleted file mode 100644 index e44db37985a9161f30484ad1df82dc3b3245ca3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilc=YQV~EA+-pL!YLL5cf_8S))n^#YsyEoC3gGK1|6h$4DZCgVG zwrmo(7^EV0EpPSt1$GUL8-><P7T>UyLwwUqrt;#=M|aJ%KCZMoa?+Yd{Oy|OX7<<r zn>lfj#)(ZmHs>QFA`<2$^~{++-&lr^Q*ptn>$b@~2dn#w{ajP>BD1TtwY9fI=}uB{ zbV*|nJScJa+c&dSR@*<>+!voX@B2SKm6=g8eC<8QlP#^SlWpXf6_j#vbMI=O{*=Mw z7+PH#8yqTH8k@W<Oiy1wFf^&>`fNr&KR>Po))G8zXVZ$~U8>He31`1O)7T;4q~Iwe z)ysA*YEH34vd3kS1q{1FLuETpSZC+@y9i9wX1^@6X6u&Qxu0y(Gc#ZQee_7_*bM%n z)a4AjUcY{QrL@-AC0jRgn(x|Z!Jjwsw%=#U$;sKnXqTUtr{*wmndY$>k_koAb@cU> zl~xwNOUTcE?;3l3J;SP1RrlVO&7V7OUY+Q~w(tM+5~P$q6r`s=4_tlqm#GAg9b-&P zOwGwnZ_<}vu4J&8d*<ww_uo4WH|^TBYE_rvv()96S2pHP7XMybUcTMz*q*S^YuB!s z9P`+J|M`y}Kez;(4p=U~+|F$C@!tQi&^_OkAAH>Me9mQoL#7HlOIa8~zB;(9@?`rS z`nBNRonD?i@6dXmYtH``svJ9!Vd4}jDEQRgM5?#LaM7w60!*oq|Gp}pUA;+%Q<32V z`>`s`C%^Jj9e}AuwZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4Sip zlHI@*g`^=jKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6 RBL!5%;OXk;vd$@?2>=OlH)j9< diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/af.js deleted file mode 100644 index f1491d1f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","af",{toolbar:"Bron",title:"Bron"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js deleted file mode 100644 index b755d750..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ar",{toolbar:"المصدر",title:"المصدر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js deleted file mode 100644 index 1d8c6dca..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bg",{toolbar:"Източник",title:"Източник"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js deleted file mode 100644 index fd41806f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bn",{toolbar:"সোর্স",title:"সোর্স"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js deleted file mode 100644 index 9cd03930..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bs",{toolbar:"HTML kôd",title:"HTML kôd"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js deleted file mode 100644 index 24193350..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ca",{toolbar:"Codi font",title:"Codi font"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js deleted file mode 100644 index acd14e8d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","cs",{toolbar:"Zdroj",title:"Zdroj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js deleted file mode 100644 index d61bd35e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","cy",{toolbar:"HTML",title:"HTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/da.js deleted file mode 100644 index 7c21ca42..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","da",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/de.js deleted file mode 100644 index 49f7c610..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","de",{toolbar:"Quellcode",title:"Quellcode"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/el.js deleted file mode 100644 index 58f9dd6c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","el",{toolbar:"Κώδικας",title:"Κώδικας"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js deleted file mode 100644 index 9dede838..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-au",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js deleted file mode 100644 index 244ef5ff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-ca",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js deleted file mode 100644 index 9381cd0e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-gb",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en.js deleted file mode 100644 index 20b116ed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js deleted file mode 100644 index 902480da..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","eo",{toolbar:"Fonto",title:"Fonto"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/es.js deleted file mode 100644 index e7f85510..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","es",{toolbar:"Fuente HTML",title:"Fuente HTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/et.js deleted file mode 100644 index 9c3848b2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","et",{toolbar:"Lähtekood",title:"Lähtekood"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js deleted file mode 100644 index dc75afe0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","eu",{toolbar:"HTML Iturburua",title:"HTML Iturburua"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js deleted file mode 100644 index 65b63062..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fa",{toolbar:"منبع",title:"منبع"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js deleted file mode 100644 index b7630ff0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fi",{toolbar:"Koodi",title:"Koodi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js deleted file mode 100644 index ab4e5570..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fo",{toolbar:"Kelda",title:"Kelda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js deleted file mode 100644 index 23148f8e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fr-ca",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js deleted file mode 100644 index 8bc19780..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fr",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js deleted file mode 100644 index 8a3bcbcd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","gl",{toolbar:"Orixe",title:"Orixe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js deleted file mode 100644 index 2241ec60..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","gu",{toolbar:"મૂળ કે પ્રાથમિક દસ્તાવેજ",title:"મૂળ કે પ્રાથમિક દસ્તાવેજ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/he.js deleted file mode 100644 index 4f255502..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","he",{toolbar:"מקור",title:"מקור"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js deleted file mode 100644 index 41ebe9b1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hi",{toolbar:"सोर्स",title:"सोर्स"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js deleted file mode 100644 index 51d2d4db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hr",{toolbar:"Kôd",title:"Kôd"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js deleted file mode 100644 index 5e80c1e7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hu",{toolbar:"Forráskód",title:"Forráskód"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/id.js deleted file mode 100644 index e5af768e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","id",{toolbar:"Sumber",title:"Sumber"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/is.js deleted file mode 100644 index fa21def4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","is",{toolbar:"Kóði",title:"Kóði"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/it.js deleted file mode 100644 index 0a6c8c04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","it",{toolbar:"Sorgente",title:"Sorgente"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js deleted file mode 100644 index 81832591..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ja",{toolbar:"ソース",title:"ソース"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js deleted file mode 100644 index 201586a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ka",{toolbar:"კოდები",title:"კოდები"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/km.js deleted file mode 100644 index 421b42c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","km",{toolbar:"អក្សរ​កូដ",title:"អក្សរ​កូដ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js deleted file mode 100644 index 64aa7004..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ko",{toolbar:"소스",title:"소스"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js deleted file mode 100644 index 61faf97b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ku",{toolbar:"سەرچاوە",title:"سەرچاوە"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js deleted file mode 100644 index 4b297dd3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","lt",{toolbar:"Šaltinis",title:"Šaltinis"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js deleted file mode 100644 index 1f454578..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","lv",{toolbar:"HTML kods",title:"HTML kods"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js deleted file mode 100644 index d1d2b635..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","mn",{toolbar:"Код",title:"Код"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js deleted file mode 100644 index 69e7e9fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ms",{toolbar:"Sumber",title:"Sumber"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js deleted file mode 100644 index 224b0855..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","nb",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js deleted file mode 100644 index 47d692d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","nl",{toolbar:"Broncode",title:"Broncode"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/no.js deleted file mode 100644 index 02cadbac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","no",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js deleted file mode 100644 index 80d4f44b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pl",{toolbar:"Źródło dokumentu",title:"Źródło dokumentu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js deleted file mode 100644 index 358cfd18..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pt-br",{toolbar:"Código-Fonte",title:"Código-Fonte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js deleted file mode 100644 index f924ce8d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pt",{toolbar:"Fonte",title:"Fonte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js deleted file mode 100644 index cc82c71d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ro",{toolbar:"Sursa",title:"Sursa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js deleted file mode 100644 index fbf6efb7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ru",{toolbar:"Исходник",title:"Источник"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/si.js deleted file mode 100644 index f869386e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","si",{toolbar:"මුලාශ්‍රය",title:"මුලාශ්‍රය"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js deleted file mode 100644 index 18dcae92..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sk",{toolbar:"Zdroj",title:"Zdroj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js deleted file mode 100644 index 85cfe161..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sl",{toolbar:"Izvorna koda",title:"Izvorna koda"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js deleted file mode 100644 index 1266a7fd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sq",{toolbar:"Burimi",title:"Burimi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js deleted file mode 100644 index 4f0736c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sr-latn",{toolbar:"Kôd",title:"Kôd"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js deleted file mode 100644 index 84073825..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sr",{toolbar:"Kôд",title:"Kôд"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js deleted file mode 100644 index 2fec89c7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sv",{toolbar:"Källa",title:"Källa"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/th.js deleted file mode 100644 index 03e48901..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","th",{toolbar:"ดูรหัส HTML",title:"ดูรหัส HTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js deleted file mode 100644 index 31ac46b5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","tr",{toolbar:"Kaynak",title:"Kaynak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js deleted file mode 100644 index a4c7d5eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","tt",{toolbar:"Чыганак",title:"Чыганак"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js deleted file mode 100644 index efcc9d79..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ug",{toolbar:"مەنبە",title:"مەنبە"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js deleted file mode 100644 index ca9afc2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","uk",{toolbar:"Джерело",title:"Джерело"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js deleted file mode 100644 index 65c47d61..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","vi",{toolbar:"Mã HTML",title:"Mã HTML"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js deleted file mode 100644 index fc5bb0d8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","zh-cn",{toolbar:"源码",title:"源码"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js deleted file mode 100644 index c49aa82e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","zh",{toolbar:"原始碼",title:"原始碼"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/plugin.js deleted file mode 100644 index b7cc6875..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/sourcedialog/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("sourcedialog",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"sourcedialog,sourcedialog-rtl",hidpi:!0,init:function(a){a.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js");a.ui.addButton&&a.ui.addButton("Sourcedialog", -{label:a.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt deleted file mode 100644 index baadd2b7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -cs.js Found: 118 Missing: 0 -cy.js Found: 118 Missing: 0 -de.js Found: 118 Missing: 0 -el.js Found: 16 Missing: 102 -eo.js Found: 118 Missing: 0 -et.js Found: 31 Missing: 87 -fa.js Found: 24 Missing: 94 -fi.js Found: 23 Missing: 95 -fr.js Found: 118 Missing: 0 -hr.js Found: 23 Missing: 95 -it.js Found: 118 Missing: 0 -nb.js Found: 118 Missing: 0 -nl.js Found: 118 Missing: 0 -no.js Found: 118 Missing: 0 -tr.js Found: 118 Missing: 0 -ug.js Found: 39 Missing: 79 -zh-cn.js Found: 118 Missing: 0 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js deleted file mode 100644 index acb6c923..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js deleted file mode 100644 index 0bf8749e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js deleted file mode 100644 index e6504372..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", -laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", -Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", -Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", -Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", -aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", -igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", -divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", -374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", -asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js deleted file mode 100644 index c2b38f0f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", -not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", -Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", -Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", -Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", -acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", -icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", -uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", -8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js deleted file mode 100644 index 77f59f61..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", -reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", -Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", -Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", -Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", -aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", -euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", -otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", -OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", -diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js deleted file mode 100644 index 6b3ce87e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", -reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", -Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", -Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", -Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", -aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", -eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", -ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", -sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js deleted file mode 100644 index e7c2a219..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", -ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Not sign",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", -iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", -Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", -Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", -acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", -icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", -uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", -sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js deleted file mode 100644 index 5a147863..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js deleted file mode 100644 index 26f61c2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js deleted file mode 100644 index d44b0d2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", -sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", -Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", -Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", -szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", -igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", -uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", -bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js deleted file mode 100644 index 79d437f9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", -not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", -Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", -Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", -times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", -acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", -iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", -ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", -373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js deleted file mode 100644 index 22c90561..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", -bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js deleted file mode 100644 index e0b27c59..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", -macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", -Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", -Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", -aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", -iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", -thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", -asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js deleted file mode 100644 index 6d701e3c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js deleted file mode 100644 index d19e2e42..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", -Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", -Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", -eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", -373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js deleted file mode 100644 index 2d1ad096..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", -Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", -Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", -auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", -ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", -373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js deleted file mode 100644 index f16d3667..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", -not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", -Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", -Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", -times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", -acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", -iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", -ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", -373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js deleted file mode 100644 index dcfc50f0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", -macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", -Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", -ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", -Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", -ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", -divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", -373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js deleted file mode 100644 index af10255d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", -reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js deleted file mode 100644 index 79483051..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", -reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", -Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", -Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", -agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", -icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", -uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", -9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js deleted file mode 100644 index 4928f400..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js deleted file mode 100644 index 894b56ce..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", -not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", -Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", -Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", -Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", -agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", -ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", -ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", -yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", -trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js deleted file mode 100644 index 84fb8fa2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", -frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", -times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", -ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", -rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js deleted file mode 100644 index 65a7518d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js deleted file mode 100644 index 4917d4ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", -ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", -Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", -Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", -times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", -atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", -icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", -uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", -375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js deleted file mode 100644 index 50a77d36..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", -laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", -Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", -Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", -times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", -acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", -icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", -uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", -sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js deleted file mode 100644 index 0cdcde20..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js deleted file mode 100644 index 68edf37f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", -reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", -Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", -Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", -Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", -aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", -iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", -uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", -375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js deleted file mode 100644 index eecc56c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js deleted file mode 100644 index f21a09db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", -laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", -Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", -Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", -Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", -eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", -divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", -375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js deleted file mode 100644 index e3f78319..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", -macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", -Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", -Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", -aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", -otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", -373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js deleted file mode 100644 index 11ef746a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", -laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", -Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", -Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", -times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", -atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", -icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", -uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", -sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js deleted file mode 100644 index 866e8659..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", -not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", -Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", -Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", -Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", -aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", -ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", -uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", -bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js deleted file mode 100644 index 1255a350..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", -macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js deleted file mode 100644 index 2d226d06..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", -reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", -Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", -Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", -Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", -aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", -oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", -OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", -hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js deleted file mode 100644 index 84759b62..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", -macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", -Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", -ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", -Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", -ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", -divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", -373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js deleted file mode 100644 index c7098005..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", -Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", -Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", -times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", -acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", -iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", -ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", -373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js deleted file mode 100644 index 8f741b93..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", -not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", -Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", -Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", -ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", -ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", -trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js deleted file mode 100644 index ae0b00e5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js deleted file mode 100644 index 3dd220a3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", -not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", -Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", -ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", -THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", -igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", -uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", -bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js deleted file mode 100644 index 2eadb9f7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", -not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", -Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", -Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", -Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", -ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", -ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", -oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", -diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js deleted file mode 100644 index 51f4c1d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", -deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", -Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", -ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", -oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", -yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js deleted file mode 100644 index 845e7524..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", -not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", -Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", -Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", -Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", -igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", -ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", -hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js deleted file mode 100644 index d4e4d37a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", -reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", -Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", -Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", -times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", -atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", -iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", -divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", -372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", -asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js deleted file mode 100644 index 6896e912..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", -Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", -Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", -iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", -373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js deleted file mode 100644 index 7bc2b556..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", -frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", -Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", -times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", -auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", -eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", -uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", -hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js b/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js deleted file mode 100644 index c4d1696b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); -var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"), -j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); -break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): -d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++, -d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+ -', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, -title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", -align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", -html:"<div>&nbsp;</div>"}]}]}]}]}]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/stylesheetparser/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/stylesheetparser/plugin.js deleted file mode 100644 index 25ddd8f6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/stylesheetparser/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(b,e,c){var i=[],g=[],a;for(a=0;a<b.styleSheets.length;a++){var d=b.styleSheets[a];if(!(d.ownerNode||d.owningElement).getAttribute("data-cke-temp")&&!(d.href&&"chrome://"==d.href.substr(0,9)))try{for(var f=d.cssRules||d.rules,d=0;d<f.length;d++)g.push(f[d].selectorText)}catch(h){}}a=g.join(" ");a=a.replace(/(,|>|\+|~)/g," ");a=a.replace(/\[[^\]]*/g,"");a=a.replace(/#[^\s]*/g,"");a=a.replace(/\:{1,2}[^\s]*/g,"");a=a.replace(/\s+/g," ");a=a.split(" ");b=[];for(g=0;g<a.length;g++)f= -a[g],c.test(f)&&!e.test(f)&&-1==CKEDITOR.tools.indexOf(b,f)&&b.push(f);for(a=0;a<b.length;a++)c=b[a].split("."),e=c[0].toLowerCase(),c=c[1],i.push({name:e+"."+c,element:e,attributes:{"class":c}});return i}CKEDITOR.plugins.add("stylesheetparser",{init:function(b){b.filter.disable();var e;b.once("stylesSet",function(c){c.cancel();b.once("contentDom",function(){b.getStylesSet(function(c){e=c.concat(h(b.document.$,b.config.stylesheetParser_skipSelectors||/(^body\.|^\.)/i,b.config.stylesheetParser_validSelectors|| -/\w+\.\w+/));b.getStylesSet=function(b){if(e)return b(e)};b.fire("stylesSet",{styles:e})})})},null,null,1)}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/table/dialogs/table.js b/platforms/android/assets/www/lib/ckeditor/plugins/table/dialogs/table.js deleted file mode 100644 index 6f656817..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/table/dialogs/table.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;k<g;k++){m=a.$.rows[k];for(var d=e=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],e+=c.colSpan;e>l&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0<e);e||(alert(a),this.select());return e}}function n(a,e){var l=function(g){return new CKEDITOR.dom.element(g,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie? -310:280,onLoad:function(){var g=this,a=g.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=g.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=g.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var g=a.getSelection(),d=g.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),f=this.getContentElement("info", -"txtHeight");"tableProperties"==e&&((g=g.getSelectedElement())&&g.is("table")?c=g:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();f&&f.onChange()},onOk:function(){var g=a.getSelection(),d=this._.selectedElement&&g.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b, -c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),e=parseInt(b.txtRows,10)||0,f=parseInt(b.txtCols,10)||0,i=0;i<e;i++)for(var j=h.append(l("tr")),k=0;k<f;k++)j.append(l("td")).appendBogus();e=b.selHeaders;if(!c.$.tHead&&("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&!f.data("cke-bookmark")&& -(f.renameNode("th"),f.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&(f.renameNode("td"),f.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==e||"both"==e))for(j=0;j<c.$.rows.length;j++)f=new CKEDITOR.dom.element(c.$.rows[j].cells[0]), -f.renameNode("th"),f.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==e||"both"==e))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(f=new CKEDITOR.dom.element(j.$.cells[0]),f.renameNode("td"),f.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{g.selectBookmarks(d)}catch(m){}else a.insertElement(c), -setTimeout(function(){var g=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(a){this.setValue(a.$.rows.length)}, -commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(a){this.setValue(r(a))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(a){var d=this.getDialog();d.hasColumnHeaders= -!0;for(var c=0;c<a.$.rows.length;c++){var b=a.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){d.hasColumnHeaders=!1;break}}null!==a.$.tHead?this.setValue(d.hasColumnHeaders?"both":"row"):this.setValue(d.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")|| -"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]}, -{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& -a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); -a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", -this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", -html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption"); -if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()): -d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a,null,"table")]}}var q=CKEDITOR.tools.cssLength,k=function(a){var e=this.id;a.info||(a.info={});a.info[e]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/tableresize/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/tableresize/plugin.js deleted file mode 100644 index 097326c0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/tableresize/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function t(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function n(a,h){var b=a.getComputedStyle("border-"+h+"-width"),j={thin:"0px",medium:"1px",thick:"2px"};0>b.indexOf("px")&&(b=b in j&&"none"!=a.getComputedStyle("border-style")?j[b]:0);return parseInt(b,10)}function w(a){var h=[],b=-1,j="rtl"==a.getComputedStyle("direction"),c;c=a.$.rows;for(var p=0,g,d,e,i=0,o=c.length;i<o;i++)e=c[i],g=e.cells.length,g>p&&(p=g,d=e);c=d;p=new CKEDITOR.dom.element(a.$.tBodies[0]); -g=p.getDocumentPosition();d=0;for(e=c.cells.length;d<e;d++){var i=new CKEDITOR.dom.element(c.cells[d]),o=c.cells[d+1]&&new CKEDITOR.dom.element(c.cells[d+1]),b=b+(i.$.colSpan||1),k,f,l=i.getDocumentPosition().x;j?f=l+n(i,"left"):k=l+i.$.offsetWidth-n(i,"right");o?(l=o.getDocumentPosition().x,j?k=l+o.$.offsetWidth-n(o,"right"):f=l+n(o,"left")):(l=a.getDocumentPosition().x,j?k=l:f=l+a.$.offsetWidth);i=Math.max(f-k,3);h.push({table:a,index:b,x:k,y:g.y,width:i,height:p.$.offsetHeight,rtl:j})}return h} -function u(a){(a.data||a).preventDefault()}function A(a){function h(){i=0;e.setOpacity(0);k&&b();var v=g.table;setTimeout(function(){v.removeCustomData("_cke_table_pillars")},0);d.removeListener("dragstart",u)}function b(){for(var v=g.rtl,a=v?l.length:x.length,c=0;c<a;c++){var b=x[c],d=l[c],e=g.table;CKEDITOR.tools.setTimeout(function(a,c,b,d,g,j){a&&a.setStyle("width",f(Math.max(c+j,1)));b&&b.setStyle("width",f(Math.max(d-j,1)));g&&e.setStyle("width",f(g+j*(v?-1:1)))},0,this,[b,b&&t(b),d,d&&t(d), -(!b||!d)&&t(e)+n(e,"left")+n(e,"right"),k])}}function j(a){u(a);for(var a=g.index,b=CKEDITOR.tools.buildTableMap(g.table),j=[],h=[],f=Number.MAX_VALUE,n=f,s=g.rtl,r=0,w=b.length;r<w;r++){var m=b[r],q=m[a+(s?1:0)],m=m[a+(s?0:1)],q=q&&new CKEDITOR.dom.element(q),m=m&&new CKEDITOR.dom.element(m);if(!q||!m||!q.equals(m))q&&(f=Math.min(f,t(q))),m&&(n=Math.min(n,t(m))),j.push(q),h.push(m)}x=j;l=h;y=g.x-f;z=g.x+n;e.setOpacity(0.5);o=parseInt(e.getStyle("left"),10);k=0;i=1;e.on("mousemove",p);d.on("dragstart", -u);d.on("mouseup",c,this)}function c(a){a.removeListener();h()}function p(a){r(a.data.getPageOffset().x)}var g,d,e,i,o,k,x,l,y,z;d=a.document;e=CKEDITOR.dom.element.createFromHtml('<div data-cke-temp=1 contenteditable=false unselectable=on style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>',d);a.on("destroy",function(){e.remove()});s||d.getDocumentElement().append(e);this.attachTo=function(a){i|| -(s&&(d.getBody().append(e),k=0),g=a,e.setStyles({width:f(a.width),height:f(a.height),left:f(a.x),top:f(a.y)}),s&&e.setOpacity(0.25),e.on("mousedown",j,this),d.getBody().setStyle("cursor","col-resize"),e.show())};var r=this.move=function(a){if(!g)return 0;if(!i&&(a<g.x||a>g.x+g.width))return g=null,i=k=0,d.removeListener("mouseup",c),e.removeListener("mousedown",j),e.removeListener("mousemove",p),d.getBody().setStyle("cursor","auto"),s?e.remove():e.hide(),0;a-=Math.round(e.$.offsetWidth/2);if(i){if(a== -y||a==z)return 1;a=Math.max(a,y);a=Math.min(a,z);k=a-o}e.setStyle("left",f(a));return 1}}function r(a){var h=a.data.getTarget();if("mouseout"==a.name){if(!h.is("table"))return;for(var b=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);b&&b.$&&!b.equals(h)&&!b.is("body");)b=b.getParent();if(!b||b.equals(h))return}h.getAscendant("table",1).removeCustomData("_cke_table_pillars");a.removeListener()}var f=CKEDITOR.tools.cssLength,s=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks); -CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(a){a.on("contentDom",function(){var h,b=a.editable();b.attachListener(b.isInline()?b:a.document,"mousemove",function(b){var b=b.data,c=b.getTarget();if(c.type==CKEDITOR.NODE_ELEMENT){var f=b.getPageOffset().x;if(h&&h.move(f))u(b);else if(c.is("table")||c.getAscendant("tbody",1)){c=c.getAscendant("table",1);if(!(b=c.getCustomData("_cke_table_pillars")))c.setCustomData("_cke_table_pillars",b=w(c)),c.on("mouseout",r),c.on("mousedown", -r);a:{for(var c=0,g=b.length;c<g;c++){var d=b[c];if(f>=d.x&&f<=d.x+d.width){f=d;break a}}f=null}f&&(!h&&(h=new A(a)),h.attachTo(f))}}})})}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js b/platforms/android/assets/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js deleted file mode 100644 index fb8e99ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&("select"==this.type&&!c)&&(this.getInputElement().$.selectedIndex=-1))}}function j(a){if(a=l.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,i=CKEDITOR.dialog.validate,l=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"&nbsp;"},m="rtl"== -g.lang.dir,k=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:i.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info", -"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||j(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType", -label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(j)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:i.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b= -parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| -b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); -a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, -f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): -a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); -return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, -{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", -"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()}, -onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.css b/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.css deleted file mode 100644 index 66bc388e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.css +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -.cke_tpl_list -{ - border: #dcdcdc 2px solid; - background-color: #ffffff; - overflow-y: auto; - overflow-x: hidden; - width: 100%; - height: 220px; -} - -.cke_tpl_item -{ - margin: 5px; - padding: 7px; - border: #eeeeee 1px solid; - *width: 88%; -} - -.cke_tpl_preview -{ - border-collapse: separate; - text-indent:0; - width: 100%; -} -.cke_tpl_preview td -{ - padding: 2px; - vertical-align: middle; -} -.cke_tpl_preview .cke_tpl_preview_img -{ - width: 100px; -} -.cke_tpl_preview span -{ - white-space: normal; -} - -.cke_tpl_title -{ - font-weight: bold; -} - -.cke_tpl_list a:hover .cke_tpl_item, -.cke_tpl_list a:focus .cke_tpl_item, -.cke_tpl_list a:active .cke_tpl_item -{ - border: #ff9933 1px solid; - background-color: #fffacd; -} - -.cke_tpl_list a:hover *, -.cke_tpl_list a:focus *, -.cke_tpl_list a:active * -{ - cursor: pointer; -} - -/* IE Quirks contextual selectors children will not get :hover transition until - the hover style of the link itself contains certain CSS declarations. */ -.cke_browser_quirks .cke_tpl_list a:active, -.cke_browser_quirks .cke_tpl_list a:hover, -.cke_browser_quirks .cke_tpl_list a:focus -{ - background-position: 0 0; -} - -.cke_hc .cke_tpl_list a:hover .cke_tpl_item, -.cke_hc .cke_tpl_list a:focus .cke_tpl_item, -.cke_hc .cke_tpl_list a:active .cke_tpl_item -{ - border-width: 3px; -} - -.cke_tpl_empty, .cke_tpl_loading -{ - text-align: center; - padding: 5px; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.js deleted file mode 100644 index bd7832d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/dialogs/templates.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("templates",function(c){function o(a,b){var k=CKEDITOR.dom.element.createFromHtml('<a href="javascript:void(0)" tabIndex="-1" role="option" ><div class="cke_tpl_item"></div></a>'),d='<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>';a.image&&b&&(d+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(b+a.image)+'"'+(CKEDITOR.env.ie6Compat?' onload="this.width=this.width"':"")+' alt="" title=""></td>');d+='<td style="white-space:normal;"><span class="cke_tpl_title">'+ -a.title+"</span><br/>";a.description&&(d+="<span>"+a.description+"</span>");k.getFirst().setHtml(d+"</td></tr></table>");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), -c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, -minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:"<span>"+f.selectPromptMsg+"</span>"},{id:"templatesList",type:"html",focus:!0,html:'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="'+h+'"><div class="cke_tpl_loading"><span></span></div></div><span class="cke_voice_label" id="'+h+'">'+f.options+"</span>"},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, -"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d<h;d++)for(var e=CKEDITOR.getTemplates(b[d]),i=e.imagesPath,e=e.templates,n=e.length,j=0;j<n;j++){var m=o(e[j],i);m.setAttribute("aria-posinset",j+1);m.setAttribute("aria-setsize", -n);c.append(m)}a.focus()}else g.setHtml('<div class="cke_tpl_empty"><span>'+f.emptyListMsg+"</span></div>")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png deleted file mode 100644 index 9a263404144c32c03ea1effa04c9c9454fb6b639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 zcmZ`(eK^wz9RH13j4(N7)Fw?RZ05WjH8X5ePOQ9Kj+qr(3md1@E{4VBH4-P0NIIEB zU3yX?uS4RD7V=th*5$o0H-FwA_k5qv_wzj8=ks|!&-eSsH`UA2eJ2zF1pr_tnMCxK zGin>k5P9du#VyGR65`=b1h%%T<XJ_Ie4-Lb^5@DO;%$HkCWYq!0Gvc7I#d0c@B8+$ z^xd^(qoTj1q`}VG38a%Y#e;3MtDnCc$!#y+!prztVHrndz~!YpA1wk3(pDW|Kb7xM zvjr|R_}%5!Ydl#sosG_`zgjiI>u;96JrFJ)%|8Us5)|2vt&gsbie5`}E#-lDWsoTv z3{!s94FuCQ1%^X#I2|fH-l1U#?#xJ35xWjYp^{A0U%;2X@h&bn);$db)BNBqKs@tF z+NX5=@zdbqM?oT~bo0{cYSh&EWak?SC?HRBZG7hFK%Lu%HF(ikU6ER-{a(JNLI5i* zGn2mBU3fg;XTh-KX{H7en&>rqSd=E~NVN;AuUY&SGyeKg15ba<{2(0ukmBJ{tQ3Ok zYlVZI0ijqi{&p#Sei%nRdA-^OVg0nGMlM)Ab*BP*$OeK&r!1hIUI2#P*8VyxL5)?L z+{pOG&qlh>v3SkkY3WF@?VuPbJ2$5j$hHPbFuM}H_Y>OHNGfeHxAq&C%*Et#1l3}i zm^pM|VG0)igZ|uHWZ-oKm%GHieJn)<i^xs&%hDoHl*>7nsZa{*E@fJ~WpKvWnE5?Z z)bqx6aS@i%L8jIT{!|7)7!gKv%&1iLEeuAYklOTsFLN`-pM0ym=w~w;Zx#oYv&7Ql zU5xg$QLC#8InlLOY<{%tQh4wnVYbqgDeCSU5{Z~s`81(X)(||Ba&T4&O!O4ED-c*F zVyFI=#SeC8Y{H|WvhCDx>*Pm}H%KjKC`eNKe#j<zFw!7QBA`oZ>IBmbYi#zse3fUv zA{#&F&;%eiGiIGy!H&JUL=#qeDn*GN@Zly*q$U(Mw@uQ|5mA!X3SZ%#rrJFV_UT~& zkka!pv+^3@h50pTF|2!@J-o=v%Jm9JEK4ix>B~jjRBmqK9T9c<c6H@fow!vdiq=jt zR1dh1gQVgKMBcQ4Pk4jrAU-ampijE|&q|Y`e@`U?r4>;jc6m4g!MP}B&sxqtGE&<Y z6X9)2I-(3>_-p1VO@-kxF3IC1Zh{SlGm@M@_R;ahyRvetgDlGuG9{AQ3mgt2-c)`a zvmL-IZqPxCkb42i-e&#BG{Hj=^`!^=9g>T=$o9YRkFOlwb2yKlq1Z`Ipb26*{FyIN zWgt`BW>GKDr^iTzOcZ8%LqjD`5G8dGZ<hPUv;v7^LoC=wD5siLClnQt6jg98fy*zo z_wi6)2U^1KcK3wT1|*}W?;6qHxAEd9^E~Wj7M@LBdRDlAB6ZotZ`8aq>+epyn_rC@ zn7zS739A-C?~l}z!5u|o8hp{@Qf|_kBulR~zkm7qJ^s?HyAskw1*7+v`IG5To)Ro* z@wal+FJ<PcRN<tD1oG0O(WeY-_FY&PVL!U_BG4LN09!kBgQGVPc5)@zI(ST2RWiN) zM8iOd_*J!_Z^dzAQ|8prZERdo(fh1d7fV-@#jUD$d+uQOURla+!^6RLj*dy;k8>&~ zg#8LD>w`LWx3h~t!EUy1H$HB?v%?BU1c85~=YF~LQbhDQE!*89e^TgZSHI{`S~SCf z&SA(2u)<(*<`^4uD-0Ejb->s<V5|>dtQ;_ym5Dp#{}|X2q2Z^_|G(k#^F7OQgWh(6 qPsFL{SQ>``#Ky*2gr8+`>9k0OMFi(`q0|u}7Xf5fPhvG8nEx+9;Avq1 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png b/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png deleted file mode 100644 index 9a263404144c32c03ea1effa04c9c9454fb6b639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 zcmZ`(eK^wz9RH13j4(N7)Fw?RZ05WjH8X5ePOQ9Kj+qr(3md1@E{4VBH4-P0NIIEB zU3yX?uS4RD7V=th*5$o0H-FwA_k5qv_wzj8=ks|!&-eSsH`UA2eJ2zF1pr_tnMCxK zGin>k5P9du#VyGR65`=b1h%%T<XJ_Ie4-Lb^5@DO;%$HkCWYq!0Gvc7I#d0c@B8+$ z^xd^(qoTj1q`}VG38a%Y#e;3MtDnCc$!#y+!prztVHrndz~!YpA1wk3(pDW|Kb7xM zvjr|R_}%5!Ydl#sosG_`zgjiI>u;96JrFJ)%|8Us5)|2vt&gsbie5`}E#-lDWsoTv z3{!s94FuCQ1%^X#I2|fH-l1U#?#xJ35xWjYp^{A0U%;2X@h&bn);$db)BNBqKs@tF z+NX5=@zdbqM?oT~bo0{cYSh&EWak?SC?HRBZG7hFK%Lu%HF(ikU6ER-{a(JNLI5i* zGn2mBU3fg;XTh-KX{H7en&>rqSd=E~NVN;AuUY&SGyeKg15ba<{2(0ukmBJ{tQ3Ok zYlVZI0ijqi{&p#Sei%nRdA-^OVg0nGMlM)Ab*BP*$OeK&r!1hIUI2#P*8VyxL5)?L z+{pOG&qlh>v3SkkY3WF@?VuPbJ2$5j$hHPbFuM}H_Y>OHNGfeHxAq&C%*Et#1l3}i zm^pM|VG0)igZ|uHWZ-oKm%GHieJn)<i^xs&%hDoHl*>7nsZa{*E@fJ~WpKvWnE5?Z z)bqx6aS@i%L8jIT{!|7)7!gKv%&1iLEeuAYklOTsFLN`-pM0ym=w~w;Zx#oYv&7Ql zU5xg$QLC#8InlLOY<{%tQh4wnVYbqgDeCSU5{Z~s`81(X)(||Ba&T4&O!O4ED-c*F zVyFI=#SeC8Y{H|WvhCDx>*Pm}H%KjKC`eNKe#j<zFw!7QBA`oZ>IBmbYi#zse3fUv zA{#&F&;%eiGiIGy!H&JUL=#qeDn*GN@Zly*q$U(Mw@uQ|5mA!X3SZ%#rrJFV_UT~& zkka!pv+^3@h50pTF|2!@J-o=v%Jm9JEK4ix>B~jjRBmqK9T9c<c6H@fow!vdiq=jt zR1dh1gQVgKMBcQ4Pk4jrAU-ampijE|&q|Y`e@`U?r4>;jc6m4g!MP}B&sxqtGE&<Y z6X9)2I-(3>_-p1VO@-kxF3IC1Zh{SlGm@M@_R;ahyRvetgDlGuG9{AQ3mgt2-c)`a zvmL-IZqPxCkb42i-e&#BG{Hj=^`!^=9g>T=$o9YRkFOlwb2yKlq1Z`Ipb26*{FyIN zWgt`BW>GKDr^iTzOcZ8%LqjD`5G8dGZ<hPUv;v7^LoC=wD5siLClnQt6jg98fy*zo z_wi6)2U^1KcK3wT1|*}W?;6qHxAEd9^E~Wj7M@LBdRDlAB6ZotZ`8aq>+epyn_rC@ zn7zS739A-C?~l}z!5u|o8hp{@Qf|_kBulR~zkm7qJ^s?HyAskw1*7+v`IG5To)Ro* z@wal+FJ<PcRN<tD1oG0O(WeY-_FY&PVL!U_BG4LN09!kBgQGVPc5)@zI(ST2RWiN) zM8iOd_*J!_Z^dzAQ|8prZERdo(fh1d7fV-@#jUD$d+uQOURla+!^6RLj*dy;k8>&~ zg#8LD>w`LWx3h~t!EUy1H$HB?v%?BU1c85~=YF~LQbhDQE!*89e^TgZSHI{`S~SCf z&SA(2u)<(*<`^4uD-0Ejb->s<V5|>dtQ;_ym5Dp#{}|X2q2Z^_|G(k#^F7OQgWh(6 qPsFL{SQ>``#Ky*2gr8+`>9k0OMFi(`q0|u}7Xf5fPhvG8nEx+9;Avq1 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png b/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png deleted file mode 100644 index 202b6045fc70e78d2acdb18dea6547fdeb652148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;|xz1#}JFty_0?W9vKL<#@{^l({Vw=roObZygMS_x7|Lgo58IZ z*1;jtDRBE~q)A!3nzFB_s%qJ%SF6L#B$ETCsjgaeD97w@h=K9C>)N~4H5c<Kwro*v z5s1*6ej$ooX_k-X)4Z)w3s-4rEOl_X&*Z|Q$YM5|*NG!PbM4U@yZ;J{?j~)l5DpaF z_}Yr+u*37ul7|gkY)pJVpO*N%JaZPmk`qVb^Erp#mNkEuQ(6>}eeleOd(ATsp4o6M zY5)D%yVh-QKfLhlXPb#0n)|zYSX%@Fyd1N8ZO#XZux`0#A=kfb-Rrk6OR^aMObcr2 zaBzv&6%d>u>BJ%8+PFz);Z{GlueJTBpC(;<{dL>A*Z%KoZv}rmSk14gdTNu)wAA~> zRmc9;sXw11*~WNgj@wL*MXLmu6j^?0KA6)yMd-{QBRA3bHCtEeD{%=kxwve&rX)63 zrQ%%uB!z9iiY6SBb7@?8S)y7_`iGN%eTCE)w+|II$5`)iK1!OFI$2z6U4K0r!_hM@ ze%md4Y`^IJZxgSFbDVE)n=Jk^{^qt^qp$kGXC>FRcyw$5Mx1JiYeY#(Vo9o1a#1Rf zVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~1K%aPfsu-&AvZrIGp!Q02AiMEM}Qh6K{f>E rr<If^7Ns(jmzV2h=4BTrCl;jY<rk&TerF>ERK(!v>gTe~DWM4fT3G<T diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates.png b/platforms/android/assets/www/lib/ckeditor/plugins/templates/icons/templates.png deleted file mode 100644 index 202b6045fc70e78d2acdb18dea6547fdeb652148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;|xz1#}JFty_0?W9vKL<#@{^l({Vw=roObZygMS_x7|Lgo58IZ z*1;jtDRBE~q)A!3nzFB_s%qJ%SF6L#B$ETCsjgaeD97w@h=K9C>)N~4H5c<Kwro*v z5s1*6ej$ooX_k-X)4Z)w3s-4rEOl_X&*Z|Q$YM5|*NG!PbM4U@yZ;J{?j~)l5DpaF z_}Yr+u*37ul7|gkY)pJVpO*N%JaZPmk`qVb^Erp#mNkEuQ(6>}eeleOd(ATsp4o6M zY5)D%yVh-QKfLhlXPb#0n)|zYSX%@Fyd1N8ZO#XZux`0#A=kfb-Rrk6OR^aMObcr2 zaBzv&6%d>u>BJ%8+PFz);Z{GlueJTBpC(;<{dL>A*Z%KoZv}rmSk14gdTNu)wAA~> zRmc9;sXw11*~WNgj@wL*MXLmu6j^?0KA6)yMd-{QBRA3bHCtEeD{%=kxwve&rX)63 zrQ%%uB!z9iiY6SBb7@?8S)y7_`iGN%eTCE)w+|II$5`)iK1!OFI$2z6U4K0r!_hM@ ze%md4Y`^IJZxgSFbDVE)n=Jk^{^qt^qp$kGXC>FRcyw$5Mx1JiYeY#(Vo9o1a#1Rf zVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~1K%aPfsu-&AvZrIGp!Q02AiMEM}Qh6K{f>E rr<If^7Ns(jmzV2h=4BTrCl;jY<rk&TerF>ERK(!v>gTe~DWM4fT3G<T diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/af.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/af.js deleted file mode 100644 index 3d31c9f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","af",{button:"Sjablone",emptyListMsg:"(Geen sjablone gedefineer nie)",insertOption:"Vervang huidige inhoud",options:"Sjabloon opsies",selectPromptMsg:"Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):",title:"Inhoud Sjablone"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ar.js deleted file mode 100644 index b4d6e742..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ar",{button:"القوالب",emptyListMsg:"(لم يتم تعريف أي قالب)",insertOption:"استبدال المحتوى",options:"خصائص القوالب",selectPromptMsg:"اختر القالب الذي تود وضعه في المحرر",title:"قوالب المحتوى"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bg.js deleted file mode 100644 index 766b87ac..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bg",{button:"Шаблони",emptyListMsg:"(Няма дефинирани шаблони)",insertOption:"Препокрива актуалното съдържание",options:"Опции за шаблона",selectPromptMsg:"Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):",title:"Шаблони"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bn.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bn.js deleted file mode 100644 index d8faf6f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bn",{button:"টেমপ্লেট",emptyListMsg:"(কোন টেমপ্লেট ডিফাইন করা নেই)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):",title:"কনটেন্ট টেমপ্লেট"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bs.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bs.js deleted file mode 100644 index 09cfcd7e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bs",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ca.js deleted file mode 100644 index 5aec5ba9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ca",{button:"Plantilles",emptyListMsg:"(No hi ha plantilles definides)",insertOption:"Reemplaça el contingut actual",options:"Opcions de plantilla",selectPromptMsg:"Seleccioneu una plantilla per usar a l'editor<br>(per defecte s'elimina el contingut actual):",title:"Plantilles de contingut"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cs.js deleted file mode 100644 index 0ceb5a01..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","cs",{button:"Šablony",emptyListMsg:"(Není definována žádná šablona)",insertOption:"Nahradit aktuální obsah",options:"Nastavení šablon",selectPromptMsg:"Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):",title:"Šablony obsahu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cy.js deleted file mode 100644 index 86896b0e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","cy",{button:"Templedi",emptyListMsg:"(Dim templedi wedi'u diffinio)",insertOption:"Amnewid y cynnwys go iawn",options:"Opsiynau Templedi",selectPromptMsg:"Dewiswch dempled i'w agor yn y golygydd",title:"Templedi Cynnwys"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/da.js deleted file mode 100644 index a7505cc7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","da",{button:"Skabeloner",emptyListMsg:"(Der er ikke defineret nogen skabelon)",insertOption:"Erstat det faktiske indhold",options:"Skabelon muligheder",selectPromptMsg:"Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):",title:"Indholdsskabeloner"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/de.js deleted file mode 100644 index de5a7619..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","de",{button:"Vorlagen",emptyListMsg:"(keine Vorlagen definiert)",insertOption:"Aktuellen Inhalt ersetzen",options:"Vorlagen Optionen",selectPromptMsg:"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):",title:"Vorlagen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/el.js deleted file mode 100644 index ca7464d9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","el",{button:"Πρότυπα",emptyListMsg:"(Δεν έχουν καθοριστεί πρότυπα)",insertOption:"Αντικατάσταση υπάρχοντων περιεχομένων",options:"Επιλογές Προτύπου",selectPromptMsg:"Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα",title:"Πρότυπα Περιεχομένου"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-au.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-au.js deleted file mode 100644 index 65e54336..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-au",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-ca.js deleted file mode 100644 index 5472454f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-ca",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-gb.js deleted file mode 100644 index ec9a7fd7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-gb",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en.js deleted file mode 100644 index c5fef88d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eo.js deleted file mode 100644 index 5d5afe6c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","eo",{button:"Ŝablonoj",emptyListMsg:"(Neniu ŝablono difinita)",insertOption:"Anstataŭigi la nunan enhavon",options:"Opcioj pri ŝablonoj",selectPromptMsg:"Bonvolu selekti la ŝablonon por malfermi ĝin en la redaktilo",title:"Enhavo de ŝablonoj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/es.js deleted file mode 100644 index c541e307..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","es",{button:"Plantillas",emptyListMsg:"(No hay plantillas definidas)",insertOption:"Reemplazar el contenido actual",options:"Opciones de plantillas",selectPromptMsg:"Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",title:"Contenido de Plantillas"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/et.js deleted file mode 100644 index 7e5e5855..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","et",{button:"Mall",emptyListMsg:"(Ühtegi malli ei ole defineeritud)",insertOption:"Praegune sisu asendatakse",options:"Malli valikud",selectPromptMsg:"Palun vali mall, mis avada redaktoris<br />(praegune sisu läheb kaotsi):",title:"Sisumallid"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eu.js deleted file mode 100644 index 25b36ae1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","eu",{button:"Txantiloiak",emptyListMsg:"(Ez dago definitutako txantiloirik)",insertOption:"Ordeztu oraingo edukiak",options:"Txantiloi Aukerak",selectPromptMsg:"Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",title:"Eduki Txantiloiak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fa.js deleted file mode 100644 index b7a94ba4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fa",{button:"الگوها",emptyListMsg:"(الگوئی تعریف نشده است)",insertOption:"محتویات کنونی جایگزین شوند",options:"گزینه‌های الگو",selectPromptMsg:"لطفاً الگوی مورد نظر را برای بازکردن در ویرایشگر انتخاب کنید",title:"الگوهای محتویات"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fi.js deleted file mode 100644 index e58e9e46..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fi",{button:"Pohjat",emptyListMsg:"(Ei määriteltyjä pohjia)",insertOption:"Korvaa koko sisältö",options:"Sisältöpohjan ominaisuudet",selectPromptMsg:"Valitse editoriin avattava pohja",title:"Sisältöpohjat"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fo.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fo.js deleted file mode 100644 index 9ef42b39..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fo",{button:"Skabelónir",emptyListMsg:"(Ongar skabelónir tøkar)",insertOption:"Yvirskriva núverandi innihald",options:"Møguleikar fyri Template",selectPromptMsg:"Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):",title:"Innihaldsskabelónir"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr-ca.js deleted file mode 100644 index 91003fc7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fr-ca",{button:"Modèles",emptyListMsg:"(Aucun modèle disponible)",insertOption:"Remplacer tout le contenu actuel",options:"Options de modèles",selectPromptMsg:"Sélectionner le modèle à ouvrir dans l'éditeur",title:"Modèles de contenu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr.js deleted file mode 100644 index 48cb6d3d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fr",{button:"Modèles",emptyListMsg:"(Aucun modèle disponible)",insertOption:"Remplacer le contenu actuel",options:"Options des modèles",selectPromptMsg:"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur",title:"Contenu des modèles"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gl.js deleted file mode 100644 index 24483d1a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","gl",{button:"Modelos",emptyListMsg:"(Non hai modelos definidos)",insertOption:"Substituír o contido actual",options:"Opcións de modelos",selectPromptMsg:"Seleccione o modelo a abrir no editor",title:"Modelos de contido"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gu.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gu.js deleted file mode 100644 index ae121968..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","gu",{button:"ટેમ્પ્લેટ",emptyListMsg:"(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)",insertOption:"મૂળ શબ્દને બદલો",options:"ટેમ્પ્લેટના વિકલ્પો",selectPromptMsg:"એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):",title:"કન્ટેન્ટ ટેમ્પ્લેટ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/he.js deleted file mode 100644 index 0e970ca5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","he",{button:"תבניות",emptyListMsg:"(לא הוגדרו תבניות)",insertOption:"החלפת תוכן ממשי",options:"אפשרויות התבניות",selectPromptMsg:"יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:",title:"תביות תוכן"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hi.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hi.js deleted file mode 100644 index 246bfe04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hi",{button:"टॅम्प्लेट",emptyListMsg:"(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)",insertOption:"मूल शब्दों को बदलें",options:"Template Options",selectPromptMsg:"ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):",title:"कन्टेन्ट टॅम्प्लेट"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hr.js deleted file mode 100644 index 3bc52ea0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hr",{button:"Predlošci",emptyListMsg:"(Nema definiranih predložaka)",insertOption:"Zamijeni trenutne sadržaje",options:"Opcije predložaka",selectPromptMsg:"Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",title:"Predlošci sadržaja"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hu.js deleted file mode 100644 index 90ccbb66..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hu",{button:"Sablonok",emptyListMsg:"(Nincs sablon megadva)",insertOption:"Kicseréli a jelenlegi tartalmat",options:"Sablon opciók",selectPromptMsg:"Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",title:"Elérhető sablonok"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/id.js deleted file mode 100644 index 8dc86b0b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","id",{button:"Contoh",emptyListMsg:"(Tidak ada contoh didefinisikan)",insertOption:"Ganti konten sebenarnya",options:"Opsi Contoh",selectPromptMsg:"Mohon pilih contoh untuk dibuka di editor",title:"Contoh Konten"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/is.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/is.js deleted file mode 100644 index 13e0736d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","is",{button:"Sniðmát",emptyListMsg:"(Ekkert sniðmát er skilgreint!)",insertOption:"Skipta út raunverulegu innihaldi",options:"Template Options",selectPromptMsg:"Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):",title:"Innihaldssniðmát"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/it.js deleted file mode 100644 index c3303ce1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","it",{button:"Modelli",emptyListMsg:"(Nessun modello definito)",insertOption:"Cancella il contenuto corrente",options:"Opzioni del Modello",selectPromptMsg:"Seleziona il modello da aprire nell'editor",title:"Contenuto dei modelli"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ja.js deleted file mode 100644 index dbf519c3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ja",{button:"テンプレート",emptyListMsg:"(テンプレートが定義されていません)",insertOption:"現在のエディタの内容と置き換えます",options:"テンプレートオプション",selectPromptMsg:"エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):",title:"内容テンプレート"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ka.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ka.js deleted file mode 100644 index 5864b757..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ka",{button:"თარგები",emptyListMsg:"(თარგი არაა განსაზღვრული)",insertOption:"მიმდინარე შეგთავსის შეცვლა",options:"თარგების პარამეტრები",selectPromptMsg:"აირჩიეთ თარგი რედაქტორისთვის",title:"თარგები"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/km.js deleted file mode 100644 index 14a0cf02..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","km",{button:"ពុម្ព​គំរូ",emptyListMsg:"(មិន​មាន​ពុម្ព​គំរូ​ត្រូវ​បាន​កំណត់)",insertOption:"ជំនួស​ក្នុង​មាតិកា​បច្ចុប្បន្ន",options:"ជម្រើស​ពុម្ព​គំរូ",selectPromptMsg:"សូម​រើស​ពុម្ព​គំរូ​ដើម្បី​បើក​ក្នុង​កម្មវិធី​សរសេរ​អត្ថបទ",title:"ពុម្ព​គំរូ​មាតិកា"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ko.js deleted file mode 100644 index 99c4f608..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ko",{button:"템플릿",emptyListMsg:"(템플릿이 없습니다.)",insertOption:"현재 내용 바꾸기",options:"템플릿 옵션",selectPromptMsg:"에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):",title:"내용 템플릿"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ku.js deleted file mode 100644 index a5bda7d0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ku",{button:"ڕووکار",emptyListMsg:"(هیچ ڕووکارێك دیارینەکراوە)",insertOption:"لە شوێن دانانی ئەم پێکهاتانەی ئێستا",options:"هەڵبژاردەکانی ڕووکار",selectPromptMsg:"ڕووکارێك هەڵبژێره بۆ کردنەوەی له سەرنووسەر:",title:"پێکهاتەی ڕووکار"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lt.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lt.js deleted file mode 100644 index ebbf213c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","lt",{button:"Šablonai",emptyListMsg:"(Šablonų sąrašas tuščias)",insertOption:"Pakeisti dabartinį turinį pasirinktu šablonu",options:"Template Options",selectPromptMsg:"Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):",title:"Turinio šablonai"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lv.js deleted file mode 100644 index a08ad5b4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","lv",{button:"Sagataves",emptyListMsg:"(Nav norādītas sagataves)",insertOption:"Aizvietot pašreizējo saturu",options:"Sagataves uzstādījumi",selectPromptMsg:"Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):",title:"Satura sagataves"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mk.js deleted file mode 100644 index ade20ea2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","mk",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mn.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mn.js deleted file mode 100644 index 768bce5a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","mn",{button:"Загварууд",emptyListMsg:"(Загвар тодорхойлогдоогүй байна)",insertOption:"Одоогийн агууллагыг дарж бичих",options:"Template Options",selectPromptMsg:"Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):",title:"Загварын агуулга"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ms.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ms.js deleted file mode 100644 index 5bf40cdf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ms",{button:"Templat",emptyListMsg:"(Tiada Templat Disimpan)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",title:"Templat Kandungan"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nb.js deleted file mode 100644 index 5260dc85..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","nb",{button:"Maler",emptyListMsg:"(Ingen maler definert)",insertOption:"Erstatt gjeldende innhold",options:"Alternativer for mal",selectPromptMsg:"Velg malen du vil åpne i redigeringsverktøyet:",title:"Innholdsmaler"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nl.js deleted file mode 100644 index a752e4bc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","nl",{button:"Sjablonen",emptyListMsg:"(Geen sjablonen gedefinieerd)",insertOption:"Vervang de huidige inhoud",options:"Template opties",selectPromptMsg:"Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):",title:"Inhoud sjablonen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/no.js deleted file mode 100644 index cf5948b3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","no",{button:"Maler",emptyListMsg:"(Ingen maler definert)",insertOption:"Erstatt gjeldende innhold",options:"Alternativer for mal",selectPromptMsg:"Velg malen du vil åpne i redigeringsverktøyet:",title:"Innholdsmaler"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pl.js deleted file mode 100644 index 537d93c6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pl",{button:"Szablony",emptyListMsg:"(Brak zdefiniowanych szablonów)",insertOption:"Zastąp obecną zawartość",options:"Opcje szablonów",selectPromptMsg:"Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):",title:"Szablony zawartości"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt-br.js deleted file mode 100644 index 65949501..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pt-br",{button:"Modelos de layout",emptyListMsg:"(Não foram definidos modelos de layout)",insertOption:"Substituir o conteúdo atual",options:"Opções de Template",selectPromptMsg:"Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",title:"Modelo de layout de conteúdo"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt.js deleted file mode 100644 index 829299eb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pt",{button:"Modelos",emptyListMsg:"(Sem modelos definidos)",insertOption:"Substituir conteúdos actuais",options:"Opções do Modelo",selectPromptMsg:"Por favor, selecione o modelo para abrir no editor",title:"Conteúdo dos Modelos"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ro.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ro.js deleted file mode 100644 index 8ef5d355..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ro",{button:"Template-uri (şabloane)",emptyListMsg:"(Niciun template (şablon) definit)",insertOption:"Înlocuieşte cuprinsul actual",options:"Opțiuni șabloane",selectPromptMsg:"Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",title:"Template-uri (şabloane) de conţinut"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ru.js deleted file mode 100644 index 201fa65b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ru",{button:"Шаблоны",emptyListMsg:"(не определено ни одного шаблона)",insertOption:"Заменить текущее содержимое",options:"Параметры шаблона",selectPromptMsg:"Пожалуйста, выберите, какой шаблон следует открыть в редакторе",title:"Шаблоны содержимого"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/si.js deleted file mode 100644 index dc4ea690..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","si",{button:"අච්චුව",emptyListMsg:"කිසිම අච්චුවක් කලින් තීරණය කර ",insertOption:"සත්‍ය අන්තර්ගතයන් ප්‍රතිස්ථාපනය කරන්න",options:"අච්චු ",selectPromptMsg:"කරුණාකර සංස්කරණය සදහා අච්චුවක් ",title:"අන්තර්ගත් අච්චුන්"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sk.js deleted file mode 100644 index 60f33664..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sk",{button:"Šablóny",emptyListMsg:"(Žiadne šablóny nedefinované)",insertOption:"Nahradiť aktuálny obsah",options:"Možnosti šablóny",selectPromptMsg:"Prosím vyberte šablónu na otvorenie v editore",title:"Šablóny obsahu"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sl.js deleted file mode 100644 index db33ea9a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sl",{button:"Predloge",emptyListMsg:"(Ni pripravljenih predlog)",insertOption:"Zamenjaj trenutno vsebino",options:"Možnosti Predloge",selectPromptMsg:"Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",title:"Vsebinske predloge"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sq.js deleted file mode 100644 index f10c387e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sq",{button:"Shabllonet",emptyListMsg:"(Asnjë shabllon nuk është paradefinuar)",insertOption:"Zëvendëso përmbajtjen aktuale",options:"Opsionet e Shabllonit",selectPromptMsg:"Përzgjidhni shabllonin për të hapur tek redaktuesi",title:"Përmbajtja e Shabllonit"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr-latn.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr-latn.js deleted file mode 100644 index 96498838..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sr-latn",{button:"Obrasci",emptyListMsg:"(Nema definisanih obrazaca)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",title:"Obrasci za sadržaj"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr.js deleted file mode 100644 index fea8b5ea..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sr",{button:"Обрасци",emptyListMsg:"(Нема дефинисаних образаца)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):",title:"Обрасци за садржај"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sv.js deleted file mode 100644 index 78e82de7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sv",{button:"Sidmallar",emptyListMsg:"(Ingen mall är vald)",insertOption:"Ersätt aktuellt innehåll",options:"Inställningar för mall",selectPromptMsg:"Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",title:"Sidmallar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/th.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/th.js deleted file mode 100644 index e9d8e6b0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","th",{button:"เทมเพลต",emptyListMsg:"(ยังไม่มีการกำหนดเทมเพลต)",insertOption:"แทนที่เนื้อหาเว็บไซต์ที่เลือก",options:"ตัวเลือกเกี่ยวกับเทมเพลท",selectPromptMsg:"กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):",title:"เทมเพลตของส่วนเนื้อหาเว็บไซต์"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tr.js deleted file mode 100644 index bd550faa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","tr",{button:"Şablonlar",emptyListMsg:"(Belirli bir şablon seçilmedi)",insertOption:"Mevcut içerik ile değiştir",options:"Şablon Seçenekleri",selectPromptMsg:"Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",title:"İçerik Şablonları"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tt.js deleted file mode 100644 index 04f0c93c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","tt",{button:"Шаблоннар",emptyListMsg:"(Шаблоннар билгеләнмәгән)",insertOption:"Әлеге эчтәлекне алмаштыру",options:"Шаблон үзлекләре",selectPromptMsg:"Please select the template to open in the editor",title:"Эчтәлек шаблоннары"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ug.js deleted file mode 100644 index bb66471e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ug",{button:"قېلىپ",emptyListMsg:"(قېلىپ يوق)",insertOption:"نۆۋەتتىكى مەزمۇننى ئالماشتۇر",options:"قېلىپ تاللانمىسى",selectPromptMsg:"تەھرىرلىگۈچنىڭ مەزمۇن قېلىپىنى تاللاڭ:",title:"مەزمۇن قېلىپى"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/uk.js deleted file mode 100644 index 9e543981..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","uk",{button:"Шаблони",emptyListMsg:"(Не знайдено жодного шаблону)",insertOption:"Замінити поточний вміст",options:"Опції шаблону",selectPromptMsg:"Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):",title:"Шаблони змісту"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/vi.js deleted file mode 100644 index 3c182f47..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","vi",{button:"Mẫu dựng sẵn",emptyListMsg:"(Không có mẫu dựng sẵn nào được định nghĩa)",insertOption:"Thay thế nội dung hiện tại",options:"Tùy chọn mẫu dựng sẵn",selectPromptMsg:"Hãy chọn mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):",title:"Nội dung Mẫu dựng sẵn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh-cn.js deleted file mode 100644 index f0216481..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","zh-cn",{button:"模板",emptyListMsg:"(没有模板)",insertOption:"替换当前内容",options:"模板选项",selectPromptMsg:"请选择要在编辑器中使用的模板:",title:"内容模板"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh.js deleted file mode 100644 index dd974dff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","zh",{button:"範本",emptyListMsg:"(尚未定義任何範本)",insertOption:"替代實際內容",options:"範本選項",selectPromptMsg:"請選擇要在編輯器中開啟的範本。",title:"內容範本"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/plugin.js deleted file mode 100644 index a5f6d642..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("templates",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"templates,templates-rtl",hidpi:!0,init:function(a){CKEDITOR.dialog.add("templates",CKEDITOR.getUrl(this.path+"dialogs/templates.js"));a.addCommand("templates",new CKEDITOR.dialogCommand("templates"));a.ui.addButton&& -a.ui.addButton("Templates",{label:a.lang.templates.button,command:"templates",toolbar:"doctools,10"})}});var c={},f={};CKEDITOR.addTemplates=function(a,d){c[a]=d};CKEDITOR.getTemplates=function(a){return c[a]};CKEDITOR.loadTemplates=function(a,d){for(var e=[],b=0,c=a.length;b<c;b++)f[a[b]]||(e.push(a[b]),f[a[b]]=1);e.length?CKEDITOR.scriptLoader.load(e,d):setTimeout(d,0)}})();CKEDITOR.config.templates_files=[CKEDITOR.getUrl("plugins/templates/templates/default.js")]; -CKEDITOR.config.templates_replaceContent=!0; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/default.js b/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/default.js deleted file mode 100644 index d8c172e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/default.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'<h3><img src=" " alt="" style="margin-right: 10px" height="100" width="100" align="left" />Type the title here</h3><p>Type the text here</p>'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", -html:'<table cellspacing="0" cellpadding="0" style="width:100%" border="0"><tr><td style="width:50%"><h3>Title 1</h3></td><td></td><td style="width:50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'<div style="width: 80%"><h3>Title goes here</h3><table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table><p>Type the text here</p></div>'}]}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template1.gif b/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template1.gif deleted file mode 100644 index efdabbebd4503ceb55c948fa73b9b83cbd373e57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_!bNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB95pDD3{Ep z^T{;k4xj+g%7JRP+$IPq!1Bb&uKB$DQa@x|8x8NO4b`hO25#T<cT?Wp$MV<17dSFF z))BV|H3v{fXt;v7Qz+>OnRw~9=3yE0xyeE4CQ8$(2)Mz>8udZCXX=BRr7DZbW_#-a zYZEHlJM(KAEc4dditDMnJ4(CC+&uK06fIp0D*Z|wX5EYpGb{?;a*WKVoEoWp!Y!`y zeo4*}FFC(bZ<u%9$nH#MiXXad0R3$OV^9jhghduI4C3%%k9`6wT1+QVA-9Z3Kq7Ly z;ql{)kRtK8vxt%(#*z~^va~_+<s_FfO%|-VgJQ~^i&o+sN%QB-n?ivSEo$=-QkX%P V&N}LJD2Az2t6IH^HS2={06Vn%v1I@N diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template2.gif b/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template2.gif deleted file mode 100644 index d1cebb3aed88265add0a1d87d40de566f86a9619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZx_Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l)5 z^9hYgr_{iwip@$vOs!XY{ff7r?)dx+qsQEX@;zh1=Oa1&?y=+d0`r>f@duda#%D-q zaHzPUxA@lRm;@PF<R|E*cA3?dNXa+p2?QF-GfH|?csggPiIv$(#R;HFXG)usdMlZ$ zTglrSWDC5)3On^`93?w!B+P8${Ot29eG^?BQk)EhyzR7%T}mCkG)~@fea?}tJ~ZwP zF9_a_+eu$;e~)giKb_z2;$6IfgHG@RnC&3KG71+O{O7Pv!-(!6Y9NRa6GMw06gST5 f=<g#)5$xKPRCn@RN^%%lx_k*Urp%cV3IG5*5PY8V diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template3.gif b/platforms/android/assets/www/lib/ckeditor/plugins/templates/templates/images/template3.gif deleted file mode 100644 index db41cb4fb8fc7eafac8f382810e87147e791ad6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^Y>Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l%g z^9hYgr_`$T`us4l+^+W<)gC_JviY3#AeC&_xD98m<8-m1jvsB&<_@0<GMBdz090rP zFgS9^!+7$h2y*z>q~XXRsCap^IRqK$(K#c!N9pBf82AawVH$?WN){q&IjedXiz+EX zOS+od%WDgp+d909toAG5`lTy-9D18rOxWx+T}>D*o&1Qa9n5V^96nACtqfi*?*05t zZSMX~zfpQ^<%jRPUfiDEO<g>8=eEuB)DKv}S_cJW8uTxqL`=(AMXYB~Aenu4SM=e_ zrj6M`kqsZ_xrlC}y^5evW>krApudqWP2zFM5Fo{b%sA$2wGU)SI5vkKVQCad(WEn$ zGF`IFr&KONpB8ayRSwduHn4I{;q@zxs8h=VDkqjl*t8<nvaR~I>(;n#c+zd*_U=jy QeEa(S3plV~2n7HDJNoX*`2YX_ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js deleted file mode 100644 index adc1cfb3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("uicolor",function(b){function f(a){/^#/.test(a)&&(a=window.YAHOO.util.Color.hex2rgb(a.substr(1)));c.setValue(a,!0);c.refresh(e)}function g(a){b.setUiColor(a);d._.contents.tab1.configBox.setValue('config.uiColor = "#'+c.get("hex")+'"')}var d,c,h=b.getUiColor(),e="cke_uicolor_picker"+CKEDITOR.tools.getNextNumber();return{title:b.lang.uicolor.title,minWidth:360,minHeight:320,onLoad:function(){d=this;this.setupContent();CKEDITOR.env.ie7Compat&&d.parts.contents.setStyle("overflow", -"hidden")},contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{id:"yuiColorPicker",type:"html",html:"<div id='"+e+"' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",onLoad:function(){var a=CKEDITOR.getUrl("plugins/uicolor/yui/");this.picker=c=new window.YAHOO.widget.ColorPicker(e,{showhsvcontrols:!0,showhexcontrols:!0,images:{PICKER_THUMB:a+"assets/picker_thumb.png",HUE_THUMB:a+"assets/hue_thumb.png"}});h&&f(h);c.on("rgbChange",function(){d._.contents.tab1.predefined.setValue(""); -g("#"+c.get("hex"))});for(var a=new CKEDITOR.dom.nodeList(c.getElementsByTagName("input")),b=0;b<a.count();b++)a.getItem(b).addClass("cke_dialog_ui_input_text")}},{id:"tab1",type:"vbox",children:[{type:"hbox",children:[{id:"predefined",type:"select","default":"",label:b.lang.uicolor.predefined,items:[[""],["Light blue","#9AB8F3"],["Sand","#D2B48C"],["Metallic","#949AAA"],["Purple","#C2A3C7"],["Olive","#A2C980"],["Happy green","#9BD446"],["Jezebel Blue","#14B8C4"],["Burn","#FF893A"],["Easy red","#FF6969"], -["Pisces 3","#48B4F2"],["Aquarius 5","#487ED4"],["Absinthe","#A8CF76"],["Scrambled Egg","#C7A622"],["Hello monday","#8E8D80"],["Lovely sunshine","#F1E8B1"],["Recycled air","#B3C593"],["Down","#BCBCA4"],["Mark Twain","#CFE91D"],["Specks of dust","#D1B596"],["Lollipop","#F6CE23"]],onChange:function(){var a=this.getValue();a?(f(a),g(a),CKEDITOR.document.getById("predefinedPreview").setStyle("background",a)):CKEDITOR.document.getById("predefinedPreview").setStyle("background","")},onShow:function(){var a= -b.getUiColor();a&&this.setValue(a)}},{id:"predefinedPreview",type:"html",html:'<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;"><div id="predefinedPreview" style="width: 30px; height: 30px;">&nbsp;</div></div>'}]},{id:"configBox",type:"text",label:b.lang.uicolor.config,onShow:function(){var a=b.getUiColor();a&&this.setValue('config.uiColor = "'+a+'"')}}]}]}],buttons:[CKEDITOR.dialog.okButton]}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png deleted file mode 100644 index e6efa4a30fe2fc09920420fb582a9f5b6c9860d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2287 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 Hf7*WmBBC{v diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png deleted file mode 100644 index d5739dffeafb242fe19d1ea330f27e25ae9c695d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(>+fY#}JFtwUhUID_2S!vwxqWre)-pBlb~YLl#%BYuDjNvv#B( zICSjT+VvZE9&0{ouei3n^+r`}*v9b0_gikMse3pGojB9AsY$RiS*_D}ru=>FJl>ei z`g`tvKJff$Wn7^QyP)IsQlHBzlTUuwTNo>T{&UA7j-?{IIuaz<rlls%Qd2Tw{KNK# z<<F0^-}ygC{&3d3da+dYdMW2&ft`Ezs!l$+XO{PY`AdUdw&$32XU@`C%F)y?d$zQn zpWnNN_$fj2ZO$Jqja_m#&)Cwkv*VAB()?9dSA}Sa-g;~HvP8=F@&yy#!v+Cfg#`r* z-o1bC?X_}$>~+`8I^2SWrLpVh%%AVAH$Azyc=Gb)>P-p?eaVY74t=kkq>`AN?7VE* zGA*T~sA;XsGNlf*zkU1GoSU0_OO)=h<Ht`vE&8#~U*@>RQjbY320V-!V%_--{7Ox1 z2Il79_eJP@`t#?^>C@cvo^RZ`we@)=4;%9%3%N-^isx`bX68%V1~FGbet!P^;+=N_ zWZD!HB{pr_=C=Iu!rN~zz5o95YgNha*h2<SK7RbD+b~asb6Tq8y4OZ#W^4vW=FXg% zSX(={#HzPLL1{^lX3hQQuU?(%c>Ke@$!Vd$y}Nf8zP6gRY@*jvh80({SR5Vp-<Mza z{`ZY-zIOBZ4;#2}H#Ov#{Z6f~pMUXU;H8%)%F4=f=Fa`wui+`g;L>vXwD+>*%lH4- z*MIH(_nUX`{*720w(|OGA0HnB37!{ayCvET-#BVbJ!HTmb9~{&j18MNf8Kcg^+I+> zh7Z3lUc9*e^y$;V?d|QrATpZCb6-jBUfyl9>gsA4dHMUy){X)SXVZiQ6U)lJ#jXwe zon2ZQy6L7)t5f6Aqpm!MAN=|?tGk<9s+Vo~^5t6d&#$-WD_%B*>Grlvv)LxIeWwJe zF1>QSXy+QQrIU<&gJ&*V85R~6vNI;kYvp>cm6ulE+m?Hza8BaoMH)$Ub^mtXk63@* zdVOXm$A6{;kEVX)+I;IGF!`&NxJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4 zHZZa>Fz{Wn8<;haH00)|WTsW()?o9K`3O*hB*=!~{Irtt#G+J&^73-M%)IR4<ivth Yz5Jr|+3#$mfQlGAUHx3vIVCg!0LM124gdfE diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt deleted file mode 100644 index 2af2d324..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -bg.js Found: 4 Missing: 0 -cs.js Found: 4 Missing: 0 -cy.js Found: 4 Missing: 0 -da.js Found: 4 Missing: 0 -de.js Found: 4 Missing: 0 -el.js Found: 4 Missing: 0 -eo.js Found: 4 Missing: 0 -et.js Found: 4 Missing: 0 -fa.js Found: 4 Missing: 0 -fi.js Found: 4 Missing: 0 -fr.js Found: 4 Missing: 0 -he.js Found: 4 Missing: 0 -hr.js Found: 4 Missing: 0 -it.js Found: 4 Missing: 0 -mk.js Found: 4 Missing: 0 -nb.js Found: 4 Missing: 0 -nl.js Found: 4 Missing: 0 -no.js Found: 4 Missing: 0 -pl.js Found: 4 Missing: 0 -tr.js Found: 4 Missing: 0 -ug.js Found: 4 Missing: 0 -uk.js Found: 4 Missing: 0 -vi.js Found: 4 Missing: 0 -zh-cn.js Found: 4 Missing: 0 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ar.js deleted file mode 100644 index 6dcf6470..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ar",{title:"منتقي الألوان",preview:"معاينة مباشرة",config:"قص السطر إلى الملف config.js",predefined:"مجموعات ألوان معرفة مسبقا"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/bg.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/bg.js deleted file mode 100644 index 6c58885a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","bg",{title:"ПИ избор на цвят",preview:"Преглед",config:"Вмъкнете този низ във Вашия config.js fajl",predefined:"Предефинирани цветови палитри"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ca.js deleted file mode 100644 index 6f97e2a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ca",{title:"UI Color Picker",preview:"Vista prèvia",config:"Enganxa aquest text dins el fitxer config.js",predefined:"Conjunts de colors predefinits"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cs.js deleted file mode 100644 index ef0e2e0b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","cs",{title:"Výběr barvy rozhraní",preview:"Živý náhled",config:"Vložte tento řetězec do vašeho souboru config.js",predefined:"Přednastavené sady barev"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cy.js deleted file mode 100644 index 45634661..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","cy",{title:"Dewisydd Lliwiau'r UI",preview:"Rhagolwg Byw",config:"Gludwch y llinyn hwn i'ch ffeil config.js",predefined:"Setiau lliw wedi'u cyn-ddiffinio"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/da.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/da.js deleted file mode 100644 index d05bbe87..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","da",{title:"Brugerflade på farvevælger",preview:"Vis liveeksempel",config:"Indsæt denne streng i din config.js fil",predefined:"Prædefinerede farveskemaer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/de.js deleted file mode 100644 index dfb3f1a4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","de",{title:"UI Pipette",preview:"Live-Vorschau",config:"Fügen Sie diese Zeichenfolge in die 'config.js' Datei.",predefined:"Vordefinierte Farbsätze"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/el.js deleted file mode 100644 index 3cb51681..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","el",{title:"Διεπαφή Επιλογής Χρωμάτων",preview:"Ζωντανή Προεπισκόπηση",config:"Επικολλήστε αυτό το κείμενο στο αρχείο config.js",predefined:"Προκαθορισμένα σύνολα χρωμάτων"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js deleted file mode 100644 index ce29dcdd..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","en-gb",{title:"UI Colour Picker",preview:"Live preview",config:"Paste this string into your config.js file",predefined:"Predefined colour sets"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en.js deleted file mode 100644 index b43a201d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","en",{title:"UI Color Picker",preview:"Live preview",config:"Paste this string into your config.js file",predefined:"Predefined color sets"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eo.js deleted file mode 100644 index 2498f670..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","eo",{title:"UI Kolorselektilo",preview:"Vidigi la aspekton",config:"Gluu tiun signoĉenon en vian dosieron config.js",predefined:"Antaŭdifinita koloraro"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/es.js deleted file mode 100644 index ef68b1d4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","es",{title:"Recolector de Color de Interfaz de Usuario",preview:"Vista previa en vivo",config:"Pega esta cadena en tu archivo config.js",predefined:"Conjuntos predefinidos de colores"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/et.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/et.js deleted file mode 100644 index 7ebe8364..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","et",{title:"Värvivalija kasutajaliides",preview:"Automaatne eelvaade",config:"Aseta see sõne oma config.js faili.",predefined:"Eelmääratud värvikomplektid"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eu.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eu.js deleted file mode 100644 index 52e479f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","eu",{title:"EI Kolore Hautatzailea",preview:"Zuzeneko aurreikuspena",config:"Itsatsi karaktere kate hau zure config.js fitxategian.",predefined:"Aurredefinitutako kolore multzoak"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fa.js deleted file mode 100644 index 7d62b4cc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fa",{title:"انتخاب رنگ رابط کاربری",preview:"پیش‌نمایش زنده",config:"این رشته را در پروندهٔ config.js خود رونوشت کنید.",predefined:"مجموعه رنگ از پیش تعریف شده"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fi.js deleted file mode 100644 index 724ff5ad..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fi",{title:"Käyttöliittymän väripaletti",preview:"Esikatsele heti",config:"Liitä tämä merkkijono config.js tiedostoosi",predefined:"Esimääritellyt värijoukot"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js deleted file mode 100644 index 75791374..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fr-ca",{title:"Sélecteur de couleur",preview:"Aperçu",config:"Insérez cette ligne dans votre fichier config.js",predefined:"Ensemble de couleur prédéfinies"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr.js deleted file mode 100644 index 457a953d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fr",{title:"UI Sélecteur de couleur",preview:"Aperçu",config:"Collez cette chaîne de caractères dans votre fichier config.js",predefined:"Palettes de couleurs prédéfinies"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/gl.js deleted file mode 100644 index 6151989e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","gl",{title:"Recolledor de cor da interface de usuario",preview:"Vista previa en vivo",config:"Pegue esta cadea no seu ficheiro config.js",predefined:"Conxuntos predefinidos de cores"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/he.js deleted file mode 100644 index e210e039..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","he",{title:"בחירת צבע ממשק משתמש",preview:"תצוגה מקדימה",config:"הדבק את הטקסט הבא לתוך הקובץ config.js",predefined:"קבוצות צבעים מוגדרות מראש"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hr.js deleted file mode 100644 index 1495ab04..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","hr",{title:"UI odabir boja",preview:"Pregled uživo",config:"Zalijepite ovaj tekst u Vašu config.js datoteku.",predefined:"Već postavljeni setovi boja"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hu.js deleted file mode 100644 index 2c4a5e55..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","hu",{title:"UI Színválasztó",preview:"Élő előnézet",config:"Illessze be ezt a szöveget a config.js fájlba",predefined:"Előre definiált színbeállítások"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/id.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/id.js deleted file mode 100644 index b2af0502..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","id",{title:"Pengambil Warna UI",preview:"Pratinjau",config:"Tempel string ini ke arsip config.js anda.",predefined:"Set warna belum terdefinisi."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/it.js deleted file mode 100644 index 3c294a76..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","it",{title:"Selettore Colore UI",preview:"Anteprima Live",config:"Incolla questa stringa nel tuo file config.js",predefined:"Set di colori predefiniti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ja.js deleted file mode 100644 index 55b1f9c2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ja",{title:"UIカラーピッカー",preview:"ライブプレビュー",config:"この文字列を config.js ファイルへ貼り付け",predefined:"既定カラーセット"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/km.js deleted file mode 100644 index c38c5be9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","km",{title:"ប្រដាប់​រើស​ពណ៌",preview:"មើល​ជាមុន​ផ្ទាល់",config:"បិទ​ភ្ជាប់​ខ្សែ​អក្សរ​នេះ​ទៅ​ក្នុង​ឯកសារ config.js របស់​អ្នក",predefined:"ឈុត​ពណ៌​កំណត់​រួច​ស្រេច"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ko.js deleted file mode 100644 index af9199f4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ko",{title:"UI 색상 선택기",preview:"미리보기",config:"이 문자열을 config.js 에 붙여넣으세요",predefined:"미리 정의된 색깔들"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ku.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ku.js deleted file mode 100644 index 11b7fd1c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ku",{title:"هەڵگری ڕەنگ بۆ ڕووکاری بەکارهێنەر",preview:"پێشبینین بە زیندوویی",config:"ئەم دەقانە بلکێنە بە پەڕگەی config.js-fil",predefined:"کۆمەڵە ڕەنگە دیاریکراوەکانی پێشوو"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/lv.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/lv.js deleted file mode 100644 index 5655b659..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","lv",{title:"UI krāsas izvēle",preview:"Priekšskatījums",config:"Ielīmējiet šo rindu jūsu config.js failā",predefined:"Predefinēti krāsu komplekti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/mk.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/mk.js deleted file mode 100644 index b219d766..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/mk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","mk",{title:"Палета со бои",preview:"Преглед",config:"Залепи го овој текст во config.js датотеката",predefined:"Предефинирани множества на бои"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nb.js deleted file mode 100644 index 84ae603b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","nb",{title:"Fargevelger for brukergrensesnitt",preview:"Forhåndsvisning i sanntid",config:"Lim inn følgende tekst i din config.js-fil",predefined:"Forhåndsdefinerte fargesett"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nl.js deleted file mode 100644 index 8a62e469..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","nl",{title:"UI Kleurenkiezer",preview:"Live voorbeeld",config:"Plak deze tekst in jouw config.js bestand",predefined:"Voorgedefinieerde kleurensets"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/no.js deleted file mode 100644 index b51a6994..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","no",{title:"Fargevelger for brukergrensesnitt",preview:"Forhåndsvisning i sanntid",config:"Lim inn følgende tekst i din config.js-fil",predefined:"Forhåndsdefinerte fargesett"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pl.js deleted file mode 100644 index 38b0c2aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pl",{title:"Wybór koloru interfejsu",preview:"Podgląd na żywo",config:"Wklej poniższy łańcuch znaków do pliku config.js:",predefined:"Predefiniowane zestawy kolorów"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js deleted file mode 100644 index be6aa759..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pt-br",{title:"Paleta de Cores",preview:"Visualização ao vivo",config:"Cole o texto no seu arquivo config.js",predefined:"Conjuntos de cores predefinidos"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt.js deleted file mode 100644 index f96f758b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pt",{title:"Seleção da Cor da IU",preview:"Pré-visualização Live ",config:"Colar este item no seu ficheiro config.js",predefined:"Conjuntos de cor predefinidos"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ru.js deleted file mode 100644 index 133e6dd4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ru",{title:"Выбор цвета интерфейса",preview:"Предпросмотр в реальном времени",config:"Вставьте эту строку в файл config.js",predefined:"Предопределенные цветовые схемы"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/si.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/si.js deleted file mode 100644 index 2c9755a1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","si",{title:"වර්ණ ",preview:"සජීව නැවත නරභීම",config:"මෙම අක්ෂර පේලිය ගෙන config.js ලිපිගොනුව මතින් තබන්න",predefined:"කලින් වෙන්කරගත් පරිදි ඇති වර්ණ"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sk.js deleted file mode 100644 index 2456d281..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sk",{title:"UI výber farby",preview:"Živý náhľad",config:"Vložte tento reťazec do vášho config.js súboru",predefined:"Preddefinované sady farieb"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sl.js deleted file mode 100644 index 62dda984..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sl",{title:"UI Izbiralec Barve",preview:"Živi predogled",config:"Prilepite ta niz v vašo config.js datoteko",predefined:"Vnaprej določeni barvni kompleti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sq.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sq.js deleted file mode 100644 index 56ebe486..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sq",{title:"UI Mbledhës i Ngjyrave",preview:"Parapamje direkte",config:"Hidhni këtë varg në skedën tuaj config.js",predefined:"Setet e paradefinuara të ngjyrave"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sv.js deleted file mode 100644 index 9b3e7231..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sv",{title:"UI Färgväljare",preview:"Live förhandsgranskning",config:"Klistra in den här strängen i din config.js-fil",predefined:"Fördefinierade färguppsättningar"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tr.js deleted file mode 100644 index ec553d0d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","tr",{title:"UI Renk Seçici",preview:"Canlı ön izleme",config:"Bu yazıyı config.js dosyasının içine yapıştırın",predefined:"Önceden tanımlı renk seti"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tt.js deleted file mode 100644 index 66990c45..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","tt",{title:"Интерфейс төсләрен сайлау",preview:"Тере карап алу",config:"Бу юлны config.js файлына языгыз",predefined:"Баштан билгеләнгән төсләр җыелмасы"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ug.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ug.js deleted file mode 100644 index 4cadfee2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ug",{title:"ئىشلەتكۈچى ئارايۈزى رەڭ تاللىغۇچ",preview:"شۇئان ئالدىن كۆزىتىش",config:"بۇ ھەرپ تىزىقىنى config.js ھۆججەتكە چاپلايدۇ",predefined:"ئالدىن بەلگىلەنگەن رەڭلەر"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/uk.js deleted file mode 100644 index acd28a19..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","uk",{title:"Color Picker Інтерфейс",preview:"Перегляд наживо",config:"Вставте цей рядок у файл config.js",predefined:"Стандартний набір кольорів"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/vi.js deleted file mode 100644 index bd02f062..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","vi",{title:"Giao diện người dùng Color Picker",preview:"Xem trước trực tiếp",config:"Dán chuỗi này vào tập tin config.js của bạn",predefined:"Tập màu định nghĩa sẵn"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js deleted file mode 100644 index 552dc689..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","zh-cn",{title:"用户界面颜色选择器",preview:"即时预览",config:"粘贴此字符串到您的 config.js 文件",predefined:"预定义颜色集"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh.js deleted file mode 100644 index cff7a9a9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","zh",{title:"UI 色彩選擇器",preview:"即時預覽",config:"請將此段字串複製到您的 config.js 檔案中。",predefined:"設定預先定義的色彩"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/plugin.js deleted file mode 100644 index fc402d0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("uicolor",{requires:"dialog",lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,mk,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn",icons:"uicolor",hidpi:!0,init:function(a){CKEDITOR.env.ie6Compat||(a.addCommand("uicolor",new CKEDITOR.dialogCommand("uicolor")),a.ui.addButton&&a.ui.addButton("UIColor",{label:a.lang.uicolor.title,command:"uicolor",toolbar:"tools,1"}),CKEDITOR.dialog.add("uicolor",this.path+"dialogs/uicolor.js"), -CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("plugins/uicolor/yui/yui.js")),CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl("plugins/uicolor/yui/assets/yui.css")))}}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png deleted file mode 100644 index d9bcdeb5c49910d5c32c9ebbb134200bf138b7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmWkuZA?>V6h6*nD|EKy_G>T#efd;-TcIEZRG=3KG$^eF2Q{FAMV4*KY}f{qh`QSV zerz}DmTbC_Y|fEr#w0P0=t#CW_qsTZ+oCcxM!nmzgkYx0y)F9Qv+IxZJb6w|&dGC5 zaz;Z<^@~z7QUPF5prJObvq_J$hJ`xXo5wcl^n8zhtsmg}%|C)|K3%8x)wT6C_ipWb zw=>oa{%CJkw=1x%v!^@U-5DL&ajAP1z;mggH7#{nz-rJ$faL=7qA45La$rShQh@N! zu%sTCvXE1t{K=eCf%*<$g}~m_lTbYf%#DuhOcn)}oyL+UY!^T)N0SIlg&q}p70^Bg z#v`A*ftBD@6%H#L*N*0!pas#aR&fdVH33r!@M?%V4H}RB^=Q5i+Cy}fVbYD}B4EjH z?P{0x>Acg883%O<vmR{oU`T=1rJu3nQQIh{?ZLD|n6?b}C#URvz)qpni|<XN&2wJ& z^7$>a|AzJ?B#N%FVmw`fKNY;g=C3&BXB;Z@Kam~dpydSE;!)<o*L-Ly#&HE+cCFAo z+TF<c@SMxbNEK7^xk@y-f%$G}D(p$X1djzpc%<ZSEibCutVj&ocx;#jt?a2*xSJ(* zS(hAU>KoPs+}MGZ#35TL&dgu1t8ZJCOzunMR5)=3wB`6<04>Wd>f<uA7wWiCfdV(W zmgC&mvrX=E<uf&6<xjIMXi@7q4{m-PEuSK{4EHJ!Ou&UEV1J<_f16%>EGNt=fUO7S z2UdorB;0d<%}W2%DB8|}rj&7Bd@G600GiIAl}DfA(T~fGjEtPSpMM-+!R<h;zoq}r z<JVhPIsmHgnHPnBX{Z?w)h@jz9oScT{Hrf4o~5O6<xrkIV?##Ek3+NVSs$LvdUz-K zVqsBnU~^YH-9S#p2Xmt1(pB-YCH8^zSUli}O-sG;%g)JW+E1+FDa)jvI)wsbavgml zl%;;+l~<A*hJi-fD{Qwu+AWO=8||_8CB2VJ4wK>dW!t0gq&tGw>1(Ck!bL+QCwfHM zFSfg6C%J1(_sXrL%2?h=Gs#tB`jY5~^n-B4=5yiEV7#4=o|0Az*Nu@}Ih_Oz$pHOG zC`&0{EO(L#V`PcEmKepS-spt1Gd{>irzEF%o|nyJB4uhF{YR*@P1evnVor$^%6<|| znF`WIVUCMc(=ZuIiR8<#kjLU}uWTnbQf7F06KORJtfO9XHgzgQe;2kI(+lL6NRM$K zObK})t}2X5(vY~u9{XN8DGugG$E0mSB^Mi(>V!Gl<R-dPm~+Hh=xRZ;O|GF#*k$oG z(!0X;G@n4X2wC<=BhuM8?}#0i8b#hV*+Cto*Dz2|UnMJy$uK=5OgnsQX&U)iT;-NK mNV9m%-8>YlD8E#--~|}G|8JkdYdiH90fD-v+HZu-d;bSJ8}W_+ diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png deleted file mode 100644 index 14d5db4862403a43231ac4766301552afa79e8ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6z30X`wF|Ns97GJ#~>`+k2Qi@7Ao zFBm9x{S+_IKn6ok7srr_TS*Cr7<jgbC%G^QD7vw!9N-X2N^uBd6=CLFC~>4CR#a^B hhMOMV_Dn1i4C!Z>gq7E&G66L+c)I$ztaD0e0ssu{I5q$P diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png deleted file mode 100644 index f8d91932b376af76ccfac030c12eb9fec7ee4c63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12174 zcmV;9FLBU`P)<h;3K|Lk000e1NJLTq006cC006cK1^@s6bntfs00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBVMAW1|)RCwC# zUE7x9IC4zr>_6|b&%Dfjpyv}j54LBIXFZqhE-_t{2r7|?ya1%Cs>h{sswI&ir4|Fh z$jAgxe*E!Arq9Rc<1hC3+xpMn|Ni&&sREphKX2dqw+!rCg4f<Q^c-!Qd7XLxUfaC) zv#-5v*=ysy9>vHA{v>|sAOH9VUq1Wx=i{&V_yqRn;}h7QkI%<<rLmbm<HtAn4GQ?9 zXxr=eLhZcw@b&ip^V$&jy!{z$@3x80K(BA@#q0ff{aco$Y|r&QE!XAt{POa0Yr8&w z`SOMS{PR!x*T4Qn|Mj2$ML+%fPq%$P{M!%v5B<ZBKYX9SPJG|=1$SO&-ph*~wc|58 zR@C0wueM7-6Zk)Mz!uxPZS@@WGgh!l@K#{&f6L?bD`?9N%&&jf>-7fW_4(VkZ}j!+ z*W3A4Q2+7AAN1S*{zm`&=RfJ^|M;1H`st@nDf0RFlp-IAiA&;HZ{w3b`^>wEDMb|H zcWo7$YKZ}V2ee&$PJPY#JEPa?S+a1^5~E@1g&W3xW#A&D$3t?w{=G7DSsA*r_4-%Y z`s<fFW3LkAx8Hud$&g?E`xpB8=bvwK<ih~lxE&(UPJ#4f(0TwHktaOzy&Ne4C6WZK z26pmwvkg6OpkxWw^?$X$Zrkm;SpvHPxq^BH^7{M=;G#kO^6jCi*T+qUyaM~z|M``E z`Q?|J99cpBZon4je+qCX09+CQmdpN`&jKB|WI77c>|z_E&o@}NSYWQ_Q@Xg&3d|Ou zW&0J1V(Gn21@Ok$tl7ApUjkd|>Gf{~b_Mkc=*rd-*uVe&`%Pc}`s=SZK(DV?u$Q+4 zw*GP77{rl7z$bi8N=|4%dgnzQK{K@X9=v7^ctch^o|!a57b!8M)R5bd+^DZB*f)2h zXi(pP{pA7dU4m@DUcq}~?BDN<UH{hYHL!dtumLll2Iefl&}U}<f0kq5G3S62Q6d{p zZDULOYF5`W0x|Ogtm|v849viK>ws-MON*}ARvB9}^yYkUl^^T(x&iy;x&pXVP)oMH zG4>x1DYCNm`n+yi_f;$KX~32?&=bL&3KR!`?Ad)hXq&kbL*FF~DPi6Lgmfs6L(D+0 zND0vbo2}RNnI*FeDS>21aabAxyE61@^}W7lp{p^l|7<n(`g;AVjBWw@)9(9xeA<1_ zw#poqCUTM-$%GBE!A98L3-&VSDM~&dt<09yrjG9!yk%y#tUAruT7GCPy|FT*B#V?H zQhrp%mPwb}`)~L6Qd{o<Bhc5Y%~$2f`lzqhzjgoGcFj&c3)uC7^ND~CWz9(N7zK-- z<UyL+3H-c(($mZkv<ir<e~n&0n~n#z>WGkjF52;svSZcA8su7jAYiZ3LweO3*sn5! zSD>!n=?3mEUmKmhK6d%BxhCszn^Za-*h3D(8SY6kiNgaaXQX90(eY3K$c_zH0Bie! zBHJ2UyB-p(7Bef5YbLIag?2iM6)3&}lecGR>8-$C0bN;o1$K2uG_Y5@@20Q6ep|mt z*;#x0tH7=ryq?1awzczFEUg2jL1spUI~;shFFVJMWT3#Y2!p-uSjIu7V%f`fjs-Ap z^O>)I7X@&(g2WB97X@e*&x;21dj4(4t<5d)+aC4x2CzHGU+%zOzu(5F>;Cn4UV*tj zZ$V@8yjpp$fL&R8ZO0o+m)B>04HkLJJo2A^{CRu7ZvXb}emug@Fk>GfXvJPL@_-^q z01_^oksZ=)$m(QUUX;~R(;!CYEsBZDLoIZEb1~!wBOR^fg#bCy%lortW+6TF_FY@w z<j2w#Gp%4Ql~uJXQW;n1>&6w46@B~bZ!ZnoFU!@$z>E}`k{^oUMnFB{O&3px81f^O z51QS()3a{J?CEH!+pUC&YHNa5>Eykw2XY`qJYY8f?~*Z#9Wbu!EB)#UYzgYy^IbES z3h4T`vT|kq^`Z574Oq_r_AIDJ0c{44L7>OU1PLbsz#Hu@vK`wj512a*;t0UHoeBa? zk6L-sMY|p{s1$`s7O*7~*BX(c{b~v9`g)Thw{{({Us@kq|5b2nV9S~lBm$l;MJBR- zSsN}46ctdtgi9+$xa(0`+j0;b5@@3(htB#Thl4>@u&CE;xE$KTV_CN$*;#_wksf7p zH>9;!8MRBwYyjM)2y#PKP>c6P+kZ7HSsw`0kDr;x8GBY&%c%cEP&e$K0;+W$c6Ga3 z-f4l|(a#9Tgjm>eL6n{@$mNioz>^;m<O;l4TVMMu;|6FJY;G}jEp%d;MwdWd&nxw_ zWOfbgU4|@tSc;UChc*xDOnN*8X!t!jmMwsJBUWaV0MX~SfUeH(f>>!~orEy~tWx3~ zOIPqpfCGkR(H?r%tE(Zjv@CMcj9p#<%|dfa05{ue+I>B?x*{YBs9Lr@sIdpzjet7C z(j3YXHqYbA7G>{gy$rQE(#f8iq4wzn3QC-$G_@y1j3806bjQvT*z2!Z!CPeq$}$Qt zKiFGHksaJG`+EfLE_ox5tq+;W^uV3*u}1^OjK^IhVL9wdjz0DhDyAkTJeq`!B#Pcg zhP)_7_7G+P^?uQ&deV!Q8k_%Iz3u(DO+Od8Pl9$mZo9rWlUfCjjYrK(<6~b$ZT0S1 zS3O;Ux%tu+)a&a-3?R6yAif2U*Sn8h->)oR%UIXfo6X1d@8#Re{rTQ*_p!In<@$MS zi0rd9cH9YgPHQJ6i50k+-%kgas7Aw(CeRhp9m<d*mds$o(vyjl0)WlBc3L?et`yno zuy-j^*;ndsAweo*v-Gj0{E#DKZqL`9Ws7Fw4YWnFy9^K|W6NvfS$$^%yC5kr0)9)H zAix{R6Sp&f{gy<rth~<E2rRpd6oFF0@uSgpQ*vl6-Pm}`-Vs>n<Idib5=42{%{~qC znjV)LTZ4X+Ax!{UwY40HBb9{&^<3~cXoh5h&^HFP<y%_`ml8M}mb1aCRs(|5a6k&M z_jItx+QySrcOVfXtv$)oe8(x5&9;+zn`K+6pDQ~n!0+~;-X<8gNIk8CNj*f&doO{l z>RTLOFML>EN7Z(g?zUW!g!Hg9HcE;V1EAh^ef|OhyG~Aswq6=s?q4)8Rd863y;SWj zSY7I8OIMc~2-fXFMwH5^wNOOZdAr8m>OGbX*q5qptG2GXdan<;-u3UQn|F<U2kWKQ zhX|d$|E-#ObxmXqNqt@KEHz=Xxi#||J1axH4iKE*V(Carqp1UsdlI%q%p9<_xeYNd za6V9-2h`J+#zu@S0z+=v3CW?7F-2-{DMbX+HcVYXswBw66}fhd-pCG%k-vWV%F@o0 zt_P@K3~_Z9u%iNf9@*!Boh)eqf<{k2>kfk?i04PcV*!JYNDjCSSa=A`)xBsyFVf!o zcEj3Z<YOBW<h7%`0(0vm4S=tW?(T+$t&FU}D?nVdou@55t*t}5?;x;Cl)G`VgQ*cL z0fVFSc-3?v_#K9pKyT!ZW^xcH@+81@HC_|&DPNkmxjq_?+DO2#PMdG_)!nuVJk7!) zxGT!}=z_|+4}rJttH76_l^Pq2viBL=@Ub)c+5@$ht@M~$Ywbv5bCQkgc2ua35+=GG zN`YIWSIlij!4f%oTKd?FnEs%Bf0rB8mzG-mvc2!T>$<&e+vLHr0ak9iY3#aPde)nR zA-C1eupV=%_1K$crutm{Xra05zTK<7Zd!fooV!<E-InbdjBD(pGGuUjb|g2_%~>f@ zjN&Brbhe|X^)|DOW?&^TSXp<hN3_TR1bdr>b-J8|rPncYZ6g>MN)cr9$&910<@S`i zkQl{a<mMbwT5O%8NNex@eQ|a%qqE)2V`5w(kH`#*Wu0m`$i5y}t-wxa5miu!iu{|p z4THf8@Sja*BXB=7qc<+d=4dQ+Mke8KETV&4gf1=uY>Qy;-2thth!_d8NT%MNOLaRo zCuFG|O0c<n-dXxpS}b+gSlusK`gV?&Ys1)^n<7~I+A%h_7wS2TZPab>z;<ggn2fv8 zf!wIq;2`+(7<=fwQKZy)(Ne1i+PX>&U9i--BvN-HZ`yK2WHwUjV^zvpBugv*x@U8x z({-K67HqPx8;i~;!e{od_khhIU{6k}7<LRV7|eniFt8Oox}aCVA}Ijt{U$)84qyU& zX*+-l8j<{9os>aYNF7KD;K_3|HlOG;X68|WyQts~R_Ey{93p$q#vLD)BBQJf!D<A5 z9I&_6&c%=;T6PeU6jpKtyyqZzWL30;k}UfDo@i-g2RH98wSY;zFH(NUf~YDpL}0jx zETRlBJJ}(&wZY<buimT2?-E1?kE{G>rZ2nhQiG*TS=m|!i=sNPks~sAWNwo((+QeE z#&&JLOxr|<K+NqqC9do+f<jgfhWXwCyAA*oQe?O3bf73MYWIHks|DLu{qF^jqJ2|q zEuJ4T;-!@)LRMITVpqc2S$Ev}(9&k~k}^>mJq#Wvwe^U!h^q1|mxGNOYb!WJG9t^^ z7DMZKI!Lj#PN|b)?X9WqMFoppm0nG~SG!I#I0zVZ`DqtCYId&sD^t_0?Sst)+mcAN zUvx@c>}O&7-Gj-m-xe7Z%Keh9Wq_!IMZnTSjO}I%4>EJ4jWgw@5p#Q)LYiP`6fiQd z^$<J5c6GK>Ve27n-UX6~u~jBf+k#TtGMMS9dA;lIYZHi)4l30jO7QF&T(%QhouWT^ zynfVSX2S`ZnZPko&ykt#z}4MKa~F_k(OQ~~<ckJ1gE|nH+Ez&x)?k$EycO)2iJ5BS z39Zd&4n4uVJ1Z;3UL>0%y}dDP!_F!}v#hlq(gM^>trIkoxdHpiniE-2)#zvMuOXYZ z@JTauPGdhoUrzx&2nsFzYz-P9uOq1X=#HU5Icmr1+m7`=TI)3+i)$@z)KfDUFrb|e zMgs?s-Dk1u&Z5gh$7`mpZ50a_t)I09Z_Y2;>j48bSd6fih|8uJJL^RwJv?I9MOj1S zdLU4vQqm5rNLt8_pn<5I7Sa+!IUbUAt>rFsNh$%|eUVd;2@Sq8wo0jAKq5vm`3kt3 z=3N~Rsk>_m9Wl3@TSRJXnS>Dm>Ye59TAeks*WX>pFw%@&JCaPu7;eaM#?H163Yxqm ziO1X{Y;1uY1)XquF~r!S{e#6HD+K5cU}@)0U+V%VRlwA-9$@K^y(J@8pB$}LpzaKz z#@63&zauQRhE`R2<!J8Yu*S{=gPGe#6679OJ5U;$8Oaw<Y7{+6M*Gv-FgWCjkW<{$ zP17qF{Zg$3hn>6msV$Z^{OZT{Yqz~|MKp5@rfxL0c0%O-=ufe>>^uw{kcP3JqOoTg z+bjHcEIkgV+Xd`yFtrAF15DLXpaVjTJA-wc7@{Rz2CcE1z_Vdg<2a#%A@fTHRary$ zx^qPy{_{TkOX+1&?B6kR^}s#nLpfB<^+cJ+!)2=@cHV%N&a^i{jchr@!b(pU4J^^d zO17|ADFAxZ`eGm^1_e)qtT@Ery0EFfmaLv(=|+cN8%<tn7E!XZ&OFvOLPvKRT4fBE zI&@35-S;8ZuKv0RPPeGIVdB#nJ3CL_2s?Xiv#Z7yBSB*=b>Rh$tyRdxLGaieqrB*@ zL#S!P*wWof-%8)Qb4e_g_L$k4z#SDq0S(+`G&PH>PTX|r+7{K~Ti3eID{{XsPtw=} z0bxo@dr1_)!UUvA#=f(B>9TP$k}MsN5fF`Yl1{Sda#ZD%T;wD<f^ioyA<m++h;>_* zrR(uRL+il<i>L+JnOY9wm9-+$udbbEn?0(LOj>$r_hai=7gPtL*qQi|ZPXQR$29gp zkeHn=VZ^I8vx(Xr3C^*P2@HVj>St<aJ1wXah>Oa=0bwJ{*liQX>WaLOu?0&v$0Jsj zZGj8Z3^mjKv_3!Zt()Tzw)7pqx@$jMW2a1WYelRebzTA;ZOaH?<q=cF-cWidT@PIn z?Ng%>FNSYztt>#^x{9&}1iB)CrBSv~c-4}XJO4VNu`kuHu8xMR`H+r@WMy3&f@(oD zV-IQUBfyT>ItFjOyTqV&0>y3{a4&QaiC7u|8A%bSB@^2+!6JcGyO0!VK!4kJZHk>1 znNk-3?ybKKaCMsmp|tx{qUMoqf7#pY9YA&lk%ZZwrPU|5J9327sG0NZzDc%Dr%025 zqCIwz@d$Rqv$k9j0=G{sMPM7F99180rOMfIOX{5lSZj~hBGDq+p)@>{DBd>D(nB2@ zz1GjEM9YEo=n!M0*-1Ij*Dw%_*w@JncJ0>&i~KC^eP`rF2U)|W{@J)VA!A!|1Qar* z*jjIw0i|Z_ef0$;GbCeMEUibRZ?mK78J{kaZ6ym=Hg~jl6AQ>=HEZjAwYpG94|(1j zW6N|q-Bz=DfN-cDdxU)xSwru&TsGqlj#fXTK+$96&LKfghSJ8J%i;Ld466Ic7^EwK zuHB7AWfjo^qGj`m7f~6w&sVL%jGPcDOR5_pYDq3q8i?$oc2L&4#06v<<?$EoipXGE zNe;3`$sh*=YVSyj90(jorckgu1=C1Ik&MB+)?!7BTn*jE=l~4l2WgpM$d0D|LtS8) zRn(GZ-@YY{fb$?L^I#iGmZ(nqu<yh<8X3W4PK{t>775i>3x}i}tq++VK{F93+C@%G zValBBMTkrmmI0*)W{`~}Bamck?hjo=AIT2H;zr=Ov-i5ctc-b|dO^D>y);olB4TMB zC|XiP28;VR$Cqm(8I)rp<q7Mcv7S?ojFHz@2b7wz6?1oteH7T<VneMqXLGVi2w-)7 ztG2_M;>>kC5c^snH_B6o0E;X<Pj@Sa;{o^u%9tW&cS7<*xEbAcVC{ACL=4!y?Yo1w zG;+ey*cE(QH%qVs@L$Aw@i)*4Hb==ARv_wuP0ZRToU;0K6g%K@Sfgbu*%1xWHRXq9 zcYP<&rK;#XkRq-NqGbn?C-SZ#<%2qofP>OGDq4mJAaYlw*nfA;o{!0X+V9n+`Q<ih z7n*V%5liA`lQE_gxkij_pVwPmi=BFqTxJlDPlWX$1F{3vdLV{285~Iw#lk*|uWXFl z?Gj@f<Qp+`_g=dqT9!yA*F{ih+J*gjd8E9xv_Q;TUu${sXnPatMGqd>=20nuSDlk0 zdgAwJ=+@w{od%FmxoH4qYj6Ry<_6@487vZ>V-HCY_L4Ek;gHVAHhozyMcV2<0vW}W z{7{x50y!yd{Q&F2azst1q4hSTulr-+Tp`h%A*?MwAJ_+zEJ?ObOB4spn(@)R)X>2& zf=kQ!usm=ppk%N<3>mc_`qq7y4os*fgh3{fE%yV-ALNecQ9724spY3iR-n%;mLmd6 zE873Ja6=*qeEPg1Cyb7X=BtLlGg9Z#Gl5!Z*j^VXfzjv;q(@hx2?D~5Jdw7U_P2|X zXdzX>N67uq%&cTd!^|?#(m5pyv#$2jQbRr?MwiJL*{)@0>KMC94OKA3K#t72B8eGQ zho%5VV9w47VpMu*-A$wNL!A%GiU-iw7fW|M05Jh}mf1p5fbI&HM3Gac!<DWkrJ13Y zM)IT6)0@^s(n11P*LQdzCp8GSO}yNuP+KY{0=e;YV2_M?(K5wzM6#Jg_JD6Oy-~eq zF|w8(<P_1n+cY~vYtPtb0oh=56XdAysq>nzy#;7ldzS7-AeZ2l+khNtzzZzBJg{dp zb~=mbyw7Y0_M9bK!fawT<A{<%O1{A2D6`$tbu2QhKDX{#XXik%lLURI*MW-zv!ULz z8tI}v{$YL0{nCPm7b18DV|!`#5tjB`kkG46u(8_)$PjBEk|2+5Ok`vuQRdNVhw7?b z#+HRmz!f1RLAHSx7d9TKW;&y>={_?Rk|qSC2C5A~wb;**BF6L!W`$oc0wS#Y$YvKE zd17j5OQIOlnsscaN0*DLL$AtD>*~b_1WCz@B5FbwppQe4OMr?AbDH21$qb#P1Oo$h z`Jrt*5Px-YL<g1*c%Q1VM~j`1_Kt>qh0lp<J~Ae+A!B?a3LYVY8%04){ffoTDo`Y& z*4bldb3X#G;fhdoKICzh<I%CZ19HUB67=1eMefHjDs4{ixT6}I>~&%y-E2w<M@~et zW9GT@t2OHaO-*V{A_2M4jMgza0HM!Cfv6tGs5P}Q_L7WLIss3-SgGpFZ)x0ZyE+k# z8yy!IZB5Br;}x$0@U-f_fr%u&f~AP1#psyZD_z-VWgH3g_--_fBT)!=-J}?rQMo6| zPU@tEmJ~>y05*1A5Qnk%V<damVPv2PO0EM_<mUl)?pWM&MRYb1c-qJfv5K9hrAT@P z)pV(9z|w|&II5weX%tY0Agfa}pl|(Ww|o^0D1f%0B~Oew@+_}=_oV~tuah4Vm~sjP zOOnW$txzf)$rG))!JU#pLdFCzXfv*{2iZH7YzazH-TDy5i;Q~Zs+xTXfR>HvfhCyH zC=hpY#SvhGb9KOVK)%&Y^RnGaB(p=7)*V4_v-Gn7YcXoCFRC_(RZ!S6b8Cfqwbxbv zIj6A?%91d9Xt1|+Of<oyx9UJQIKi57LCiUVylm2)M|jq-ow@^%9>}XTw3;!B44<0% znWwtB|2&P4+P1NSp^2?K9QLkzeJ!ClT9SHNtqA8<27~p{mMh}O4{Na_#LV9CBRDWv z0#Jih47q~#9>@&J3tPNlQHDPawRfPgO~%%`y0s}74Z!7ym6a4BPiw1+ygEt-x+0)F zb#IHD5sR_Ifd)sVNL0&_vGT}Xc+?%csAYn*+Q^s#o56yZ9IR5MSuC&vo8!1&Bi#ab zqlFVvgjB+%|65pFi}1B2Pjo6A6*5T>N(ltKX>(B|m0NHnM|lj~Jr~#sRwic<K_pd* z%=TD7=KSgeZ5t*Oly<L`ofZPw0k$=SEHfE8^sOc1YT)m$mu4#CCGom4YKp0Kpr{ix z1m@VY0>^FJ1-T`NnK`Sm1G_Iw#v}#|WQK-WlSrb8+AYnEC!}nrHzOofG;mq1M+5E# zF0gem)7`OLLSQ3s1BPWaokAx|WSl1)5O_Z6ba(|#QZlH~GNb{nI{^wDZ8k5vpDICX zWG18F@zH)Vr5-va5qopI{6+-mtjzF^x9ma0=x8jY25H&De=xXL-ukp$GA4EJ?nEl- zQ?{Ut(U?OkHjw~DK_d!wv%y_+E+_VTv|H%t<BVF7^pp$0n|2568h|EKdmAzXTujK` zGRwtat#hM<)nsvNo3rntM$L4L?7b%@i=`VquBD3+J6;sn*<xgA0V+LC$dg8L#2N~g zd_G(&l1aL_K(;JCLz0-=9Cl*hco4Ft0KjyBsngKIARYv^=X}`jm*zdG33L|qTcbg@ zCfG%L0un`ozHv7?;4Tp8P^JL6Lgdeh&Cg`)OeT>Hi!TN=lLhqd)(n^$wIw5XbX}6n z`wVcC!1m9<6ftn4w>5(+5MMNCf!6LiiE4Whw^Y6wQ<}v(+fAE42iREv2fEtS=E3Z# z5uh!P+mj_oiZsVqH6tECPhe|8cAs!~*a#jwEAVkGN;B?DgH<vv0<x4H+PBtHWobou zyU$Lm6Ot<iQ$KB#dU`~9dh#55-aax?>?WY8pQ;Rv=0J-zk#a?d`U!O06|i&_pC0~% zs`H#tCai{-F-YNecP#Zgvjn-m4!WXHOEei+>hHL2yn0o89qjDD)2se_dhnP@n|qag zq7K&uG4;zpyE+``=ZwZifMAQ|GqM9DW;}m7&*Dql$%OnMBsqMELWGhrj(%q3(o|;F zm3fVvSr`q@)mGl(=<h&^l+&b0v<OlwQ`q&q$<f#p0J<2XVaQ=$kKxc9A~RBiy|g^Y z`h`+tO^XY_qLexTNrAj?FOY2Rpq3P|0Nh%R*yR8d;uM{r83#5$71$cUFzuc3ye+Sp z@UqdJM{O}SvimGYMBgbu`yqWj6I?1U{-V;`miw`%=e75(oi*fuSiz%Y@Jt<bUENEv zwd?@u`a08@6>b*|dsgt6oOp6bR~u`cPXan(Y?Gy<!Y4HP#dA`!4vXnhw85cSBVq-Q zz#$>ewo|O!dC`^>(LOeEI&2wo%g8#w=7X*X=dws6C9Z=RM)P&R>XeWcW*}*S9|dBO z#E4vw6hn)0PQ$k*rB~U=N_Ki%gBgJqonHde7}<hHk29I0VnpGpvo9+}3}B;-ozlzF zATLH68rav>bdbG3X-bM%8BGh!5%`glVkCChN}~g3BW$M}kFK2>ONsVtFvIPh8-j|! zP`X_o->~@7R1I1~_EP)g01;!(lkT_dq{zVuDO3BhOrBuw4xoebW0<k60MZ)#nw2Dq zrOC1x4ZRH6)?#6#z3Vn5OGxWzAStpe9%yNIwcRXhzb&v6wIqi$wo?oh$`8~bEa`xl z7l1zq6scDEA=zQoZn)<MQX?HOf=b6GNdnsU4#)$<MFxxpP(ASSK<fP6fZe3ZBUdB} zE<Jz)Pd&rfkd47MvXUv5ZjP8+4vES-B~~D)EI#6RMFyz7wS{K^T4x?zjjb|`+hMP- zuM84n5u3jourq1&As^eT40OP%FQye-veyQH%&QjcSRHl*CSrT(j|>}oV0S%e1I!G@ zS(<=GAhvWhk}V>&+|*Y)b=L0-?9AW-BY4bAxj;rqE3At~Ky}WW0=SHa2iUo(K{h79 zoT?DC0FAa;NfwZ-@hm`!>^_u$QRi@h3rq?mNydOZGE=G{H&Tn{xCKvROl{R@LvI^( zB**_YItF)xh#kMXDH{M%hCO)$0MF=nR&EvuhTU2b<g}16dz0zn2seiYW@@q?Xja)% zYDJPWt-|4AhQ8(un3G^fQpDBWhF?uit%xaQvO3!c3RAwfv8`l-KV7J${c2KU5H0<T z5;Qs$Zs}vq(5OsRGqf`d?Cqq8r?Z3ckp)b?SuEKBx7|rF18}5~AxIE#z4Uox*&PJ& zaC+X#1R{{C@t7T;YYnvpXvN&k00IPf0MP6>Ml1Q!wJQMKqreW=pfU8fHKC=;%8?Wy zW7a2QbPj5(!N<S~bXmJi{yqi7=6aJ>Ijz>u$oivp7#D1d0NoTZEjF9$;1MK(IMCCG zx#4mA491Rzkwx{-qhlU*CEw$JHpIZDM;^H+`-KBjpLq;>6vPe?U29I&lkB=&7dC0T zkL-zu_B9&G9&wIzIR`R>lTzb(!J|=U9R-`&X&KV;#bWceXp7Ay_biXxa!>Y)!Gw|^ zRzPXZRpL4+;23w5y4e9ilxJLLJ(vJZZMK~=hmp~M@T|Zw#n?zU2c03D=h^@)oM4jt zsnM*VVdlh?mfl95dUI}PN`okEK2kL0v3MjOvN9u+K?D|Fd;ZM@K@!6VE-4WpdRjVS z`e9&)&ImiJgbn!Hp)7H-n8gVs%>dH{es0F7IG{|}g8|!fpqD#of!gVkQq&1hX3_GZ z_3_C-5c<`Ii&6%I$Pr){sa<DucDM`&wJYU%ZIP^jEE@q5eSZ`PI+;fk=)rLX*^wC_ zYrVWmtR*U}dR*HSW9#jm{$Aj<L!)8Pb<VJIG}+`?z)m|O*4)=<o<9U)%PzF$ympg0 z3HENk7n`!gW7samZe<~(?Z$|D&a_(v?_#hm@|7*dcB=ErwrCX09(!3uHNF&$N=N4* zgSp3not%VnwoR1GAw%zS0DL(AwI@ULk1VE#>-I;}6YGm*O`nF^QD6H`R=aiQ0s=u4 zTza2}Kqg;X`>lWu)lt7?a43FWI*YMWGq5^yjaX|lW+X^@MFS{LxLd9dEvFY2K><K2 zHocdoW^{LkwJiom`dDjX%f17(9)_kaP2m!_D|Fh}m@O49t>Mgp?OA;_w>u?86cFL0 zl^u|i`zRqxP>`3><7&bkb1pweD>LXk79h=KJ3K9)2o~)&cO%)=<GKSNAa`;D%M!h^ zu$yGbOiAVyJUOZK==i5Hc9d2}y`0DyQs(R@RI;kAIV4BWE!;`sSmmlbTizOJ>1g}F zezt&oXXmE4tL+eryM}%D`&caP0o?<5GC3n&x1^uY*oC}O)4&Ny&lDB0x4RvToOh&) zr$x!r&{le0YierKcvjGr`MhwQN2@c|(vL0gU66c2WH&Pd(};GS(b>6m9(kOx2U$5v z@|0jSjm6$YCkMz`nb*JIW&u`KPe-hr@wz*AM^1+0bSRGYKYlwV;Do^T4dXIFHa6J1 z)5oZS&(qlha)lDCehAo6iE0Y?R>0YuTY#ACrKQ=>*;xRyl>~C^y1g2X{k0@ro$W{? zwvM-s$pDz_i65J#OcG%Bz!;8vLC%YD?so%r2z*0VV~N1-I_u_z2H-X|cn0LCMglSM zk_53Mlgw>~!{KUf$8{>kWIt>;QEu|Y(%7QI@3#!A20N#nd+-LJ&->U1fju>|lm~u` zMVtiAa2v1VIPJr2mh<AcF;HS<_ZgsSk6$?TyN>ANV{@gxO%YTY*rpumms_z`G6*Nz z@vOfDix06fV0>$B$utX(vNk(w-AuBv%gzxK2aX60xFRL6_ufZ}bZ!6>Cu>P8z_~%E zH<=FdoV||Vfm~{K063R%M}Vz=BS&@=XYTJbm>oS$PO`<-#+Jr*?h<A#NRaJ(F0eI# z2N)cdz9!iu1f}JDp8#?%Ky^Xe7FMxbvoZzxgtT$BwDtdc{8wzxIU_}qa)m8vl-1Wp zUHQ1ij>J)Bt`PObM)kSZ8H|g?k<=*@;I^`DUND+wP){p6|2G-|G5*}WiV*^B=KId- z;G@Tf8k-jmEBQtPM31$T_1&(cVlBrp3fd&t$w|wntNq&V-IN5&It_E4@Imd|Kl?!< zfuUTc3zAHObCRvo`Z^&~rld%Ai4Mrxfz*f=J2kV1&iOMk#tIN2lVt<S_<2bOiZky! zoy+m>AiQla>BXSp(9++bG|?7bP^y}FKW_JBeC3hEjw3ZfkQ=ooGj?Ibj8S#saVB*- z(a3wWYzYE&Mi#gdr2U=EcHfQNhXCmfHXuAzgA3lI-REUKqmoum9Ai$?F!CHEmD0~z zqF9XWl^>uxWn#1olpsOM+>$6(x}0oQrzmhdPl^o4kuac)((nmM5;-1}WlGssZT7om z&`$%t(;*_@Mk^abP-k3?V4{ACM!F=WN2VN=j44B&BSj(rM^iD32B1+VaO%L_i|*Y4 zY*t?&sLqff4*OA7!ZgPku1D6@utwCJ{WyPAO_H%kf$k=8h&W*C==PQYs~c!Wj2#U! zFn*)-F<uN1C8N+Wd$7l0Zh)eW<Yfsn*DD%+mIw|rZ0xjoKn$%KW)94CY(P&^q`|%I z%*vDEfGVBrL5{~P&@;=9%(SJtZX)W~>|TRRDm+6Dq3p;2+49V@!K-(?{xPPPoF1to z$x0H=yC}mJp~L3**vIz?8MOj$Qro8;i>#|LTTB(5kG`YF^a7^fmu>C|j@F))CsXdp z2*c0Hi~~%Z-PZrVI2D6HRvrQW5r+0;$An*<4jfMfb~H<CCa9F{%43c0v?hN5o$92C zqfAB_5PNqi<nKB_9R|BmxI|#J+mhACXxn<y>xr6qu(0VIU{6XB%fdUt+7GKM$ZQ7d z+*G-q^3AhAkG6UGeKe43wk=Z~@{qi^8g4~a7kh3;^x0=fpYx<ha?<w<xHD_lNM^Ps zs6q830gIn<%l24%sH5R|P)0jsioJux3z1WXIuaxzrcKC_=P)+macH3&i6lst#WQmO zsw6^`BtnwsETA7fCxPS&9bs&X0aXVi8mQQt4K8QcI5$dtg0Ta@ht^=y3iJx8ELH~R z_w}_2r2ey_bJ+TNL^EUkoXO6Xk^dhEA~WZpOh-}IFm352((9uPKFru)d!g*S6a#^z zS#RPU=Q01$M9}E@W<iK%ts3o|s19T>@Ed05BU<|1?Y@y9GNH9cw6|*ydMtC~bu#Ur zW^%V9`U#e%tuqzfu>F?#-9|w@YT*rZk~0~*#cRn2ktxkSAW3Ed%?xnei<~%b>YUvy zQB0iuZb_Yd#{V~D+^D7_lR5mbj7|2~MWfx0!AN^YIy$^?2|Zp0fzVvE@~A_$*cnVA zMw#g)ypC<gCxeVV^t&Wo4x)i{coO(LC}+;m*q$80faj>q2vdiFXhx6E0)LqSNUxhI zVW-W=i}3ha-8{;~vjY#ZReptXbC!%U_7TS<<#h*49XcddFz8&+VQpzLHIvtFG}ukc ztmOZTJf~!aiH*rPc@pR;9nD7=JCGdVDq<116>`I1b5xT@tC-Dp5?2cO>`Zi$Oc?Cc z(=Nq~W}cBGvz~W!9>~};tnKM?az?r*E|O;jW_03+7UVQwICongNlHz~C-}PvCLZYw zR_qcowKa`$hP?y!^;8FkQe+UQgE~86O1M%&)(VWI%!rlfG4Y`wbreh^=ZP%0M8brg z;dU5oO-Jt}hg^{e*c8v~l#?WMUt?_~z?@+B^hF06nQ2~sj#!{Wam0bn8hwA4g(GPp zre)|l%aSOn8U*|Kj6IRW895IgvD0rHxqx+pbT_1PaWqhU>-R^eY8dPASqqQe_aWKy zbYM@gdG;KmUU;{SlVCmuz<nh9n*x3Y<Y$6<#>zWeg767aWXd_QWP{P+&9)h)*5Dlk z!wjP}|BcZa_lfvoG{C0G|7UodwcV@AJHfqqjue^oy9ceoY@nI}^Q?wH6;v~TLW`Kr zXy79tKO?#FmJgG$lhVOuZE*2ZjE(?$gwY2R3`cIyVJA+KNNfEK$gcDqZHkf0VMdOe zm>Iv^1hyK8I~oYO9l-Us@yB|M4gsFj<5}h%0z<ZA4Kn3$Cmm(pK`p(VGhGBX#o%XZ z?mJ^2bT~#Pi$5XIEC<;82q1@Ki3dt*P5c>Yagcd)ZD(q&^V&IE^>F~$_5al^!k4%1 zJn&9?;+~W-ewCt^;T`NeM?jwi+M(lXmEnk#nsGM*Cu2AujAFmD9g=3^cRpazg{)2P zn8^slCiA+?NR(!+NuZ1{S-MkuZF%6gv9{}!d*XLgzfH?4N!?6zAmK9F0seNx-8fs1 zXDviP*JZL(3;|+<;j`Pb3|s~}q7~H5vaL6j*f~=voG(jG12zp0Lhxjb*#NQD5r-zc z8>nBrJig*G4d%vKNVex5w1@9RM?K}U<_D?ky?<0-r@?(R`7<F~j_Ua-DRkEMB-_q1 z@$fm%)WpvkLgx9{!#X<&F7INFwDI;^pqK^5?8P6qK<7GbdE?(Hqo*ms<}?E8kxmdW zcC)h8=)>p`ot`?H2s#>^rZ4^=FlN|z7;uANn-1>IN}N2Cr3Zk`BP^T*Bp+h=GXQ?n zq4@~xH~`i&0DT(!&VYJ`-9wFiKyS}TnG}0}0I747b%*zVRH^Xn>CK)NJe~mTrv#t_ zcabwXLIlFM0P-}L$AMa&#=dX$_}d`x3eTZ?RLY=?o8@$7*!k>srvp9PW)jSU?U;_9 z^Qe?K+IdESZGby%u+M1qd$#NeEItDAvw?m9$ftmLQX9{>7*l{gdPf)rHlFHin8at8 zf231nfja`;X`qjQ{TPtT2$-J+=#L;%GCuZM%zFe-GoTq|EqXG0J-rjFA!)<E$4KYP z|BmD7@}o>YD@D%G+(%jVtWGl1QAU{d2%u&<<*Zbo86f4@e+txxnf@rS&tmU0L4FkI zvtVzu0H1hQIRnIJ0C_feJe#F6_kc5iO=q3M`0__VKFhGvjLYYO_Y5XJ1jJ{7c^Yep zHW&J!52nA`qtNH$?S3o4*oSLk&tTSPNrW?X?<5;9naK^$U}fVxx$Ap|<T-vP;4^{E zPXXW)LH;bT9|_#%I?>$u2f@bg3gWkxHK%Fp4+8RMf$}i0&g=*$e&(C#qxaD0ZvpHl zv+I<EDo+IDQ$cjLM0zHOXC&753hXDaE5Gaa`~Et}u~=%TT;Y^Y{C<Ib`i10=`5*cq zwg?~noyured5?>6`Mm!BUmxWOUFGBaUp^pXA9e5eL-vl3cNcl?@AS6vgTG5D@?CMq zTi=Sx2mN33JO2+a9~-FUJu&myl|RHap8Fr(82g7GfB2M~pO3%P<NpL009r=Zt$joe QQ~&?~07*qoM6N<$f&<h~%m4rY diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png deleted file mode 100644 index 78445a2fe060047216b3692980ebabfb0683c3c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s3?%0jwTl2LmUKs7M+Sy#H?H_c7y<c`C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeh61AIbUf%JbcD6UwV4CFAE1o;L3 z|Icv!6fe*~20c#~$B>F!NeM|wNi2*CXBkqA8W@y2&T>3yVv%g*IK)!uk)}MmImzx& dTmu6$gLVMJ@>Lg{{{wY0c)I$ztaD0e0szdFI<Ei# diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css deleted file mode 100644 index 2e10cb69..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 2009, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.net/yui/license.txt -version: 2.7.0 -*/ -.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/yui.js b/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/yui.js deleted file mode 100644 index cb187ddc..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/uicolor/yui/yui.js +++ /dev/null @@ -1,225 +0,0 @@ -if("undefined"==typeof YAHOO||!YAHOO)var YAHOO={};YAHOO.namespace=function(){var c=arguments,e=null,b,d,a;for(b=0;b<c.length;b+=1){a=(""+c[b]).split(".");e=YAHOO;for(d="YAHOO"==a[0]?1:0;d<a.length;d+=1)e[a[d]]=e[a[d]]||{},e=e[a[d]]}return e};YAHOO.log=function(c,e,b){var d=YAHOO.widget.Logger;return d&&d.log?d.log(c,e,b):!1}; -YAHOO.register=function(c,e,b){var d=YAHOO.env.modules,a,f,g;d[c]||(d[c]={versions:[],builds:[]});d=d[c];a=b.version;b=b.build;f=YAHOO.env.listeners;d.name=c;d.version=a;d.build=b;d.versions.push(a);d.builds.push(b);d.mainClass=e;for(g=0;g<f.length;g+=1)f[g](d);e?(e.VERSION=a,e.BUILD=b):YAHOO.log("mainClass is undefined for module "+c,"warn")};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(c){return YAHOO.env.modules[c]||null}; -YAHOO.env.ua=function(){var c={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},e=navigator.userAgent,b;/KHTML/.test(e)&&(c.webkit=1);if((b=e.match(/AppleWebKit\/([^\s]*)/))&&b[1]){c.webkit=parseFloat(b[1]);if(/ Mobile\//.test(e))c.mobile="Apple";else if(b=e.match(/NokiaN[^\/]*/))c.mobile=b[0];if(b=e.match(/AdobeAIR\/([^\s]*)/))c.air=b[0]}if(!c.webkit)if((b=e.match(/Opera[\s\/]([^\s]*)/))&&b[1]){if(c.opera=parseFloat(b[1]),b=e.match(/Opera Mini[^;]*/))c.mobile=b[0]}else if((b=e.match(/MSIE\s([^;]*)/))&& -b[1])c.ie=parseFloat(b[1]);else if(b=e.match(/Gecko\/([^\s]*)/))if(c.gecko=1,(b=e.match(/rv:([^\s\)]*)/))&&b[1])c.gecko=parseFloat(b[1]);if((b=e.match(/Caja\/([^\s]*)/))&&b[1])c.caja=parseFloat(b[1]);return c}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var c=YAHOO_config.listener,e=YAHOO.env.listeners,b=!0,d;if(c){for(d=0;d<e.length;d+=1)if(e[d]==c){b=!1;break}b&&e.push(c)}}})();YAHOO.lang=YAHOO.lang||{}; -(function(){var c=YAHOO.lang,e=Object.prototype,b=["toString","valueOf"],d={isArray:function(a){return"[object Array]"===e.toString.apply(a)},isBoolean:function(a){return"boolean"===typeof a},isFunction:function(a){return"[object Function]"===e.toString.apply(a)},isNull:function(a){return null===a},isNumber:function(a){return"number"===typeof a&&isFinite(a)},isObject:function(a){return a&&("object"===typeof a||c.isFunction(a))||!1},isString:function(a){return"string"===typeof a},isUndefined:function(a){return"undefined"=== -typeof a},_IEEnumFix:YAHOO.env.ua.ie?function(a,d){var g,h,i;for(g=0;g<b.length;g+=1)h=b[g],i=d[h],c.isFunction(i)&&i!=e[h]&&(a[h]=i)}:function(){},extend:function(a,b,d){if(!b||!a)throw Error("extend failed, please check that all dependencies are included.");var h=function(){},i;h.prototype=b.prototype;a.prototype=new h;a.prototype.constructor=a;a.superclass=b.prototype;b.prototype.constructor==e.constructor&&(b.prototype.constructor=b);if(d){for(i in d)c.hasOwnProperty(d,i)&&(a.prototype[i]=d[i]); -c._IEEnumFix(a.prototype,d)}},augmentObject:function(a,b){if(!b||!a)throw Error("Absorb failed, verify dependencies.");var d=arguments,e,i=d[2];if(i&&!0!==i)for(e=2;e<d.length;e+=1)a[d[e]]=b[d[e]];else{for(e in b)if(i||!(e in a))a[e]=b[e];c._IEEnumFix(a,b)}},augmentProto:function(a,b){if(!b||!a)throw Error("Augment failed, verify dependencies.");var d=[a.prototype,b.prototype],e;for(e=2;e<arguments.length;e+=1)d.push(arguments[e]);c.augmentObject.apply(this,d)},dump:function(a,b){var d,e,i=[];if(c.isObject(a)){if(a instanceof -Date||"nodeType"in a&&"tagName"in a)return a;if(c.isFunction(a))return"f(){...}"}else return a+"";b=c.isNumber(b)?b:3;if(c.isArray(a)){i.push("[");d=0;for(e=a.length;d<e;d+=1)c.isObject(a[d])?i.push(0<b?c.dump(a[d],b-1):"{...}"):i.push(a[d]),i.push(", ");1<i.length&&i.pop();i.push("]")}else{i.push("{");for(d in a)c.hasOwnProperty(a,d)&&(i.push(d+" => "),c.isObject(a[d])?i.push(0<b?c.dump(a[d],b-1):"{...}"):i.push(a[d]),i.push(", "));1<i.length&&i.pop();i.push("}")}return i.join("")},substitute:function(a, -b,d){for(var h,i,j,k,l,m=[],n;;){h=a.lastIndexOf("{");if(0>h)break;i=a.indexOf("}",h);if(h+1>=i)break;k=n=a.substring(h+1,i);l=null;j=k.indexOf(" ");-1<j&&(l=k.substring(j+1),k=k.substring(0,j));j=b[k];d&&(j=d(k,j,l));c.isObject(j)?c.isArray(j)?j=c.dump(j,parseInt(l,10)):(l=l||"",k=l.indexOf("dump"),-1<k&&(l=l.substring(4)),j=j.toString===e.toString||-1<k?c.dump(j,parseInt(l,10)):j.toString()):!c.isString(j)&&!c.isNumber(j)&&(j="~-"+m.length+"-~",m[m.length]=n);a=a.substring(0,h)+j+a.substring(i+ -1)}for(h=m.length-1;0<=h;h-=1)a=a.replace(RegExp("~-"+h+"-~"),"{"+m[h]+"}","g");return a},trim:function(a){try{return a.replace(/^\s+|\s+$/g,"")}catch(b){return a}},merge:function(){var a={},b=arguments,d=b.length,e;for(e=0;e<d;e+=1)c.augmentObject(a,b[e],!0);return a},later:function(a,b,d,e,i){var a=a||0,b=b||{},j=d,k=e,l;c.isString(d)&&(j=b[d]);if(!j)throw new TypeError("method undefined");c.isArray(k)||(k=[e]);d=function(){j.apply(b,k)};l=i?setInterval(d,a):setTimeout(d,a);return{interval:i,cancel:function(){this.interval? -clearInterval(l):clearTimeout(l)}}},isValue:function(a){return c.isObject(a)||c.isString(a)||c.isNumber(a)||c.isBoolean(a)}};c.hasOwnProperty=e.hasOwnProperty?function(a,b){return a&&a.hasOwnProperty(b)}:function(a,b){return!c.isUndefined(a[b])&&a.constructor.prototype[b]!==a[b]};d.augmentObject(c,d,!0);YAHOO.util.Lang=c;c.augment=c.augmentProto;YAHOO.augment=c.augmentProto;YAHOO.extend=c.extend})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"}); -(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var c=YAHOO.util,e=YAHOO.lang,b=YAHOO.env.ua,d=YAHOO.lang.trim,a={},f={},g=/^t(?:able|d|h)$/i,h=/color$/i,i=window.document,j=i.documentElement,k=b.opera,l=b.webkit,m=b.gecko,n=b.ie;c.Dom={CUSTOM_ATTRIBUTES:!j.hasAttribute?{"for":"htmlFor","class":"className"}:{htmlFor:"for",className:"class"},get:function(a){var b,d,f,e;if(a){if(a.nodeType||a.item)return a;if("string"===typeof a){b=a;a=i.getElementById(a);if(!(a&&a.id===b)&&a&&i.all){a=null; -d=i.all[b];f=0;for(e=d.length;f<e;++f)if(d[f].id===b)return d[f]}return a}a.DOM_EVENTS&&(a=a.get("element"));if("length"in a){b=[];f=0;for(e=a.length;f<e;++f)b[b.length]=c.Dom.get(a[f]);return b}return a}return null},getComputedStyle:function(a,b){if(window.getComputedStyle)return a.ownerDocument.defaultView.getComputedStyle(a,null)[b];if(a.currentStyle)return c.Dom.IE_ComputedStyle.get(a,b)},getStyle:function(a,b){return c.Dom.batch(a,c.Dom._getStyle,b)},_getStyle:function(){if(window.getComputedStyle)return function(a, -b){var b="float"===b?b="cssFloat":c.Dom._toCamel(b),d=a.style[b],f;d||(f=a.ownerDocument.defaultView.getComputedStyle(a,null))&&(d=f[b]);return d};if(j.currentStyle)return function(a,b){var d;switch(b){case "opacity":d=100;try{d=a.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(f){try{d=a.filters("alpha").opacity}catch(e){}}return d/100;case "float":b="styleFloat";default:return b=c.Dom._toCamel(b),d=a.currentStyle?a.currentStyle[b]:null,a.style[b]||d}}}(),setStyle:function(a,b,d){c.Dom.batch(a, -c.Dom._setStyle,{prop:b,val:d})},_setStyle:function(){return n?function(a,b){var d=c.Dom._toCamel(b.prop),f=b.val;if(a)switch(d){case "opacity":if(e.isString(a.style.filter)&&(a.style.filter="alpha(opacity="+100*f+")",!a.currentStyle||!a.currentStyle.hasLayout))a.style.zoom=1;break;case "float":d="styleFloat";default:a.style[d]=f}}:function(a,b){var d=c.Dom._toCamel(b.prop),f=b.val;a&&("float"==d&&(d="cssFloat"),a.style[d]=f)}}(),getXY:function(a){return c.Dom.batch(a,c.Dom._getXY)},_canPosition:function(a){return"none"!== -c.Dom._getStyle(a,"display")&&c.Dom._inDoc(a)},_getXY:function(){return i.documentElement.getBoundingClientRect?function(a){var d,f,e,g,j,h,m,k=Math.floor;f=!1;if(c.Dom._canPosition(a)){f=a.getBoundingClientRect();e=a.ownerDocument;a=c.Dom.getDocumentScrollLeft(e);d=c.Dom.getDocumentScrollTop(e);f=[k(f.left),k(f.top)];n&&8>b.ie&&(j=g=2,h=e.compatMode,m=o(e.documentElement,"borderLeftWidth"),e=o(e.documentElement,"borderTopWidth"),6===b.ie&&"BackCompat"!==h&&(j=g=0),"BackCompat"==h&&("medium"!==m&& -(g=parseInt(m,10)),"medium"!==e&&(j=parseInt(e,10))),f[0]-=g,f[1]-=j);if(d||a)f[0]+=a,f[1]+=d;f[0]=k(f[0]);f[1]=k(f[1])}return f}:function(a){var d,f,e,g=!1,j=a;if(c.Dom._canPosition(a)){g=[a.offsetLeft,a.offsetTop];d=c.Dom.getDocumentScrollLeft(a.ownerDocument);f=c.Dom.getDocumentScrollTop(a.ownerDocument);for(e=m||519<b.webkit?!0:!1;j=j.offsetParent;)g[0]+=j.offsetLeft,g[1]+=j.offsetTop,e&&(g=c.Dom._calcBorders(j,g));if("fixed"!==c.Dom._getStyle(a,"position")){for(j=a;(j=j.parentNode)&&j.tagName;)if(a= -j.scrollTop,e=j.scrollLeft,m&&"visible"!==c.Dom._getStyle(j,"overflow")&&(g=c.Dom._calcBorders(j,g)),a||e)g[0]-=e,g[1]-=a;g[0]+=d;g[1]+=f}else if(k)g[0]-=d,g[1]-=f;else if(l||m)g[0]+=d,g[1]+=f;g[0]=Math.floor(g[0]);g[1]=Math.floor(g[1])}return g}}(),getX:function(a){return c.Dom.batch(a,function(a){return c.Dom.getXY(a)[0]},c.Dom,!0)},getY:function(a){return c.Dom.batch(a,function(a){return c.Dom.getXY(a)[1]},c.Dom,!0)},setXY:function(a,b,d){c.Dom.batch(a,c.Dom._setXY,{pos:b,noRetry:d})},_setXY:function(a, -b){var d=c.Dom._getStyle(a,"position"),f=c.Dom.setStyle,e=b.pos,g=b.noRetry,j=[parseInt(c.Dom.getComputedStyle(a,"left"),10),parseInt(c.Dom.getComputedStyle(a,"top"),10)],h;"static"==d&&(d="relative",f(a,"position",d));h=c.Dom._getXY(a);if(!e||!1===h)return!1;isNaN(j[0])&&(j[0]="relative"==d?0:a.offsetLeft);isNaN(j[1])&&(j[1]="relative"==d?0:a.offsetTop);null!==e[0]&&f(a,"left",e[0]-h[0]+j[0]+"px");null!==e[1]&&f(a,"top",e[1]-h[1]+j[1]+"px");g||(d=c.Dom._getXY(a),(null!==e[0]&&d[0]!=e[0]||null!== -e[1]&&d[1]!=e[1])&&c.Dom._setXY(a,{pos:e,noRetry:!0}))},setX:function(a,b){c.Dom.setXY(a,[b,null])},setY:function(a,b){c.Dom.setXY(a,[null,b])},getRegion:function(a){return c.Dom.batch(a,function(a){var b=!1;c.Dom._canPosition(a)&&(b=c.Region.getRegion(a));return b},c.Dom,!0)},getClientWidth:function(){return c.Dom.getViewportWidth()},getClientHeight:function(){return c.Dom.getViewportHeight()},getElementsByClassName:function(a,b,d,f,g,j){a=e.trim(a);b=b||"*";d=d?c.Dom.get(d):i;if(!d)return[];for(var h= -[],b=d.getElementsByTagName(b),d=c.Dom.hasClass,m=0,k=b.length;m<k;++m)d(b[m],a)&&(h[h.length]=b[m]);f&&c.Dom.batch(h,f,g,j);return h},hasClass:function(a,b){return c.Dom.batch(a,c.Dom._hasClass,b)},_hasClass:function(a,b){var d=!1;a&&b&&(d=c.Dom.getAttribute(a,"className")||"",d=b.exec?b.test(d):b&&-1<(" "+d+" ").indexOf(" "+b+" "));return d},addClass:function(a,b){return c.Dom.batch(a,c.Dom._addClass,b)},_addClass:function(a,b){var f=!1,e;a&&b&&(e=c.Dom.getAttribute(a,"className")||"",c.Dom._hasClass(a, -b)||(c.Dom.setAttribute(a,"className",d(e+" "+b)),f=!0));return f},removeClass:function(a,b){return c.Dom.batch(a,c.Dom._removeClass,b)},_removeClass:function(a,b){var f=!1,e,g;a&&b&&(e=c.Dom.getAttribute(a,"className")||"",c.Dom.setAttribute(a,"className",e.replace(c.Dom._getClassRegex(b),"")),g=c.Dom.getAttribute(a,"className"),e!==g&&(c.Dom.setAttribute(a,"className",d(g)),f=!0,""===c.Dom.getAttribute(a,"className")&&(e=a.hasAttribute&&a.hasAttribute("class")?"class":"className",a.removeAttribute(e)))); -return f},replaceClass:function(a,b,d){return c.Dom.batch(a,c.Dom._replaceClass,{from:b,to:d})},_replaceClass:function(a,b){var f,e,g=!1;a&&b&&(f=b.from,(e=b.to)?f?f!==e&&(g=c.Dom.getAttribute(a,"className")||"",f=(" "+g.replace(c.Dom._getClassRegex(f)," "+e)).split(c.Dom._getClassRegex(e)),f.splice(1,0," "+e),c.Dom.setAttribute(a,"className",d(f.join(""))),g=!0):g=c.Dom._addClass(a,b.to):g=!1);return g},generateId:function(a,b){var b=b||"yui-gen",d=function(a){if(a&&a.id)return a.id;var d=b+YAHOO.env._id_counter++; -if(a){if(a.ownerDocument.getElementById(d))return c.Dom.generateId(a,d+b);a.id=d}return d};return c.Dom.batch(a,d,c.Dom,!0)||d.apply(c.Dom,arguments)},isAncestor:function(a,b){var a=c.Dom.get(a),b=c.Dom.get(b),d=!1;a&&b&&(a.nodeType&&b.nodeType)&&(a.contains&&a!==b?d=a.contains(b):a.compareDocumentPosition&&(d=!!(a.compareDocumentPosition(b)&16)));return d},inDocument:function(a,b){return c.Dom._inDoc(c.Dom.get(a),b)},_inDoc:function(a,b){var d=!1;a&&a.tagName&&(b=b||a.ownerDocument,d=c.Dom.isAncestor(b.documentElement, -a));return d},getElementsBy:function(a,b,d,f,e,g,j){b=b||"*";d=d?c.Dom.get(d):i;if(!d)return[];for(var h=[],b=d.getElementsByTagName(b),d=0,m=b.length;d<m;++d)if(a(b[d]))if(j){h=b[d];break}else h[h.length]=b[d];f&&c.Dom.batch(h,f,e,g);return h},getElementBy:function(a,b,d){return c.Dom.getElementsBy(a,b,d,null,null,null,!0)},batch:function(a,b,d,f){var e=[],f=f?d:window;if((a=a&&(a.tagName||a.item)?a:c.Dom.get(a))&&b){if(a.tagName||void 0===a.length)return b.call(f,a,d);for(var g=0;g<a.length;++g)e[e.length]= -b.call(f,a[g],d)}else return!1;return e},getDocumentHeight:function(){return Math.max("CSS1Compat"!=i.compatMode||l?i.body.scrollHeight:j.scrollHeight,c.Dom.getViewportHeight())},getDocumentWidth:function(){return Math.max("CSS1Compat"!=i.compatMode||l?i.body.scrollWidth:j.scrollWidth,c.Dom.getViewportWidth())},getViewportHeight:function(){var a=self.innerHeight,b=i.compatMode;if((b||n)&&!k)a="CSS1Compat"==b?j.clientHeight:i.body.clientHeight;return a},getViewportWidth:function(){var a=self.innerWidth, -b=i.compatMode;if(b||n)a="CSS1Compat"==b?j.clientWidth:i.body.clientWidth;return a},getAncestorBy:function(a,b){for(;a=a.parentNode;)if(c.Dom._testElement(a,b))return a;return null},getAncestorByClassName:function(a,b){a=c.Dom.get(a);return!a?null:c.Dom.getAncestorBy(a,function(a){return c.Dom.hasClass(a,b)})},getAncestorByTagName:function(a,b){a=c.Dom.get(a);return!a?null:c.Dom.getAncestorBy(a,function(a){return a.tagName&&a.tagName.toUpperCase()==b.toUpperCase()})},getPreviousSiblingBy:function(a, -b){for(;a;)if(a=a.previousSibling,c.Dom._testElement(a,b))return a;return null},getPreviousSibling:function(a){a=c.Dom.get(a);return!a?null:c.Dom.getPreviousSiblingBy(a)},getNextSiblingBy:function(a,b){for(;a;)if(a=a.nextSibling,c.Dom._testElement(a,b))return a;return null},getNextSibling:function(a){a=c.Dom.get(a);return!a?null:c.Dom.getNextSiblingBy(a)},getFirstChildBy:function(a,b){return(c.Dom._testElement(a.firstChild,b)?a.firstChild:null)||c.Dom.getNextSiblingBy(a.firstChild,b)},getFirstChild:function(a){a= -c.Dom.get(a);return!a?null:c.Dom.getFirstChildBy(a)},getLastChildBy:function(a,b){return!a?null:(c.Dom._testElement(a.lastChild,b)?a.lastChild:null)||c.Dom.getPreviousSiblingBy(a.lastChild,b)},getLastChild:function(a){a=c.Dom.get(a);return c.Dom.getLastChildBy(a)},getChildrenBy:function(a,b){var d=c.Dom.getFirstChildBy(a,b),f=d?[d]:[];c.Dom.getNextSiblingBy(d,function(a){if(!b||b(a))f[f.length]=a;return!1});return f},getChildren:function(a){a=c.Dom.get(a);return c.Dom.getChildrenBy(a)},getDocumentScrollLeft:function(a){a= -a||i;return Math.max(a.documentElement.scrollLeft,a.body.scrollLeft)},getDocumentScrollTop:function(a){a=a||i;return Math.max(a.documentElement.scrollTop,a.body.scrollTop)},insertBefore:function(a,b){a=c.Dom.get(a);b=c.Dom.get(b);return!a||!b||!b.parentNode?null:b.parentNode.insertBefore(a,b)},insertAfter:function(a,b){a=c.Dom.get(a);b=c.Dom.get(b);return!a||!b||!b.parentNode?null:b.nextSibling?b.parentNode.insertBefore(a,b.nextSibling):b.parentNode.appendChild(a)},getClientRegion:function(){var a= -c.Dom.getDocumentScrollTop(),b=c.Dom.getDocumentScrollLeft(),d=c.Dom.getViewportWidth()+b,f=c.Dom.getViewportHeight()+a;return new c.Region(a,d,f,b)},setAttribute:function(a,b,d){b=c.Dom.CUSTOM_ATTRIBUTES[b]||b;a.setAttribute(b,d)},getAttribute:function(a,b){b=c.Dom.CUSTOM_ATTRIBUTES[b]||b;return a.getAttribute(b)},_toCamel:function(b){function d(a,b){return b.toUpperCase()}return a[b]||(a[b]=-1===b.indexOf("-")?b:b.replace(/-([a-z])/gi,d))},_getClassRegex:function(a){var b;void 0!==a&&(a.exec?b= -a:(b=f[a],b||(a=a.replace(c.Dom._patterns.CLASS_RE_TOKENS,"\\$1"),b=f[a]=RegExp("(?:^|\\s)"+a+"(?= |$)","g"))));return b},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(a,b){return a&&1==a.nodeType&&(!b||b(a))},_calcBorders:function(a,b){var d=parseInt(c.Dom.getComputedStyle(a,"borderTopWidth"),10)||0,f=parseInt(c.Dom.getComputedStyle(a,"borderLeftWidth"),10)||0;m&&g.test(a.tagName)&&(f=d=0);b[0]+=f;b[1]+=d;return b}};var o=c.Dom.getComputedStyle; -b.opera&&(c.Dom.getComputedStyle=function(a,b){var d=o(a,b);h.test(b)&&(d=c.Dom.Color.toRGB(d));return d});b.webkit&&(c.Dom.getComputedStyle=function(a,b){var d=o(a,b);"rgba(0, 0, 0, 0)"===d&&(d="transparent");return d})})();YAHOO.util.Region=function(c,e,b,d){this.y=this.top=c;this[1]=c;this.right=e;this.bottom=b;this.x=this.left=d;this[0]=d;this.width=this.right-this.left;this.height=this.bottom-this.top}; -YAHOO.util.Region.prototype.contains=function(c){return c.left>=this.left&&c.right<=this.right&&c.top>=this.top&&c.bottom<=this.bottom};YAHOO.util.Region.prototype.getArea=function(){return(this.bottom-this.top)*(this.right-this.left)};YAHOO.util.Region.prototype.intersect=function(c){var e=Math.max(this.top,c.top),b=Math.min(this.right,c.right),d=Math.min(this.bottom,c.bottom),c=Math.max(this.left,c.left);return d>=e&&b>=c?new YAHOO.util.Region(e,b,d,c):null}; -YAHOO.util.Region.prototype.union=function(c){var e=Math.min(this.top,c.top),b=Math.max(this.right,c.right),d=Math.max(this.bottom,c.bottom),c=Math.min(this.left,c.left);return new YAHOO.util.Region(e,b,d,c)};YAHOO.util.Region.prototype.toString=function(){return"Region {top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}"}; -YAHOO.util.Region.getRegion=function(c){var e=YAHOO.util.Dom.getXY(c);return new YAHOO.util.Region(e[1],e[0]+c.offsetWidth,e[1]+c.offsetHeight,e[0])};YAHOO.util.Point=function(c,e){YAHOO.lang.isArray(c)&&(e=c[1],c=c[0]);YAHOO.util.Point.superclass.constructor.call(this,e,c,e,c)};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region); -(function(){var c=YAHOO.util,e=/^width|height$/,b=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,d={get:function(a,d){var e="",e=a.currentStyle[d];return e="opacity"===d?c.Dom.getStyle(a,"opacity"):!e||e.indexOf&&-1<e.indexOf("px")?e:c.Dom.IE_COMPUTED[d]?c.Dom.IE_COMPUTED[d](a,d):b.test(e)?c.Dom.IE.ComputedStyle.getPixel(a,d):e},getOffset:function(a,b){var d=a.currentStyle[b],c=b.charAt(0).toUpperCase()+b.substr(1),j="offset"+c,k="pixel"+c,c="";"auto"==d?(c= -d=a[j],e.test(b)&&(a.style[b]=d,a[j]>d&&(c=d-(a[j]-d)),a.style[b]="auto")):(!a.style[k]&&!a.style[b]&&(a.style[b]=d),c=a.style[k]);return c+"px"},getBorderWidth:function(a,b){var d=null;a.currentStyle.hasLayout||(a.style.zoom=1);switch(b){case "borderTopWidth":d=a.clientTop;break;case "borderBottomWidth":d=a.offsetHeight-a.clientHeight-a.clientTop;break;case "borderLeftWidth":d=a.clientLeft;break;case "borderRightWidth":d=a.offsetWidth-a.clientWidth-a.clientLeft}return d+"px"},getPixel:function(a, -b){var d=null,c=a.currentStyle.right;a.style.right=a.currentStyle[b];d=a.style.pixelRight;a.style.right=c;return d+"px"},getMargin:function(a,b){return"auto"==a.currentStyle[b]?"0px":c.Dom.IE.ComputedStyle.getPixel(a,b)},getVisibility:function(a,b){for(var d;(d=a.currentStyle)&&"inherit"==d[b];)a=a.parentNode;return d?d[b]:"visible"},getColor:function(a,b){return c.Dom.Color.toRGB(a.currentStyle[b])||"transparent"},getBorderColor:function(a,b){var d=a.currentStyle;return c.Dom.Color.toRGB(c.Dom.Color.toHex(d[b]|| -d.color))}},a={};a.top=a.right=a.bottom=a.left=a.width=a.height=d.getOffset;a.color=d.getColor;a.borderTopWidth=a.borderRightWidth=a.borderBottomWidth=a.borderLeftWidth=d.getBorderWidth;a.marginTop=a.marginRight=a.marginBottom=a.marginLeft=d.getMargin;a.visibility=d.getVisibility;a.borderColor=a.borderTopColor=a.borderRightColor=a.borderBottomColor=a.borderLeftColor=d.getBorderColor;c.Dom.IE_COMPUTED=a;c.Dom.IE_ComputedStyle=d})(); -(function(){var c=parseInt,e=RegExp,b=YAHOO.util;b.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(d){b.Dom.Color.re_RGB.test(d)||(d=b.Dom.Color.toHex(d));b.Dom.Color.re_hex.exec(d)&& -(d="rgb("+[c(e.$1,16),c(e.$2,16),c(e.$3,16)].join(", ")+")");return d},toHex:function(d){d=b.Dom.Color.KEYWORDS[d]||d;if(b.Dom.Color.re_RGB.exec(d))var d=1===e.$2.length?"0"+e.$2:Number(e.$2),a=1===e.$3.length?"0"+e.$3:Number(e.$3),d=[(1===e.$1.length?"0"+e.$1:Number(e.$1)).toString(16),d.toString(16),a.toString(16)].join("");6>d.length&&(d=d.replace(b.Dom.Color.re_hex3,"$1$1"));"transparent"!==d&&0>d.indexOf("#")&&(d="#"+d);return d.toLowerCase()}}})(); -YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(c,e,b,d){this.type=c;this.scope=e||window;this.silent=b;this.signature=d||YAHOO.util.CustomEvent.LIST;this.subscribers=[];"_YUICEOnSubscribe"!==c&&(this.subscribeEvent=new YAHOO.util.CustomEvent("_YUICEOnSubscribe",this,!0));this.lastError=null};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1; -YAHOO.util.CustomEvent.prototype={subscribe:function(c,e,b){if(!c)throw Error("Invalid callback for subscriber to '"+this.type+"'");this.subscribeEvent&&this.subscribeEvent.fire(c,e,b);this.subscribers.push(new YAHOO.util.Subscriber(c,e,b))},unsubscribe:function(c,e){if(!c)return this.unsubscribeAll();for(var b=!1,d=0,a=this.subscribers.length;d<a;++d){var f=this.subscribers[d];f&&f.contains(c,e)&&(this._delete(d),b=!0)}return b},fire:function(){this.lastError=null;var c=this.subscribers.length;if(!c&& -this.silent)return!0;var e=[].slice.call(arguments,0),b=!0,d,a=this.subscribers.slice(),f=YAHOO.util.Event.throwErrors;for(d=0;d<c;++d){var g=a[d];if(g){var h=g.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var i=null;0<e.length&&(i=e[0]);try{b=g.fn.call(h,i,g.obj)}catch(j){if(this.lastError=j,f)throw j;}}else try{b=g.fn.call(h,this.type,e,g.obj)}catch(k){if(this.lastError=k,f)throw k;}if(!1===b)break}}return!1!==b},unsubscribeAll:function(){var c=this.subscribers.length,e; -for(e=c-1;-1<e;e--)this._delete(e);this.subscribers=[];return c},_delete:function(c){var e=this.subscribers[c];e&&(delete e.fn,delete e.obj);this.subscribers.splice(c,1)},toString:function(){return"CustomEvent: '"+this.type+"', context: "+this.scope}};YAHOO.util.Subscriber=function(c,e,b){this.fn=c;this.obj=YAHOO.lang.isUndefined(e)?null:e;this.overrideContext=b}; -YAHOO.util.Subscriber.prototype.getScope=function(c){return this.overrideContext?!0===this.overrideContext?this.obj:this.overrideContext:c};YAHOO.util.Subscriber.prototype.contains=function(c,e){return e?this.fn==c&&this.obj==e:this.fn==c};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }"}; -YAHOO.util.Event||(YAHOO.util.Event=function(){var c=!1,e=[],b=[],d=[],a=[],f=0,g=[],h=[],i=0,j={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},k=YAHOO.env.ua.ie?"focusin":"focus",l=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2E3,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:!1,throwErrors:!1,startInterval:function(){if(!this._interval){var a= -this;this._interval=setInterval(function(){a._tryPreloadAttach()},this.POLL_INTERVAL)}},onAvailable:function(a,b,d,c,e){for(var a=YAHOO.lang.isString(a)?[a]:a,j=0;j<a.length;j+=1)g.push({id:a[j],fn:b,obj:d,overrideContext:c,checkReady:e});f=this.POLL_RETRYS;this.startInterval()},onContentReady:function(a,b,d,c){this.onAvailable(a,b,d,c,!0)},onDOMReady:function(a,b,d){this.DOMReady?setTimeout(function(){var c=window;d&&(c=!0===d?b:d);a.call(c,"DOMReady",[],b)},0):this.DOMReadyEvent.subscribe(a,b,d)}, -_addListener:function(c,f,g,j,k,i){if(!g||!g.call)return!1;if(this._isValidCollection(c)){for(var i=!0,l=0,s=c.length;l<s;++l)i=this.on(c[l],f,g,j,k)&&i;return i}if(YAHOO.lang.isString(c))if(l=this.getEl(c))c=l;else return this.onAvailable(c,function(){YAHOO.util.Event.on(c,f,g,j,k)}),!0;if(!c)return!1;if("unload"==f&&j!==this)return b[b.length]=[c,f,g,j,k],!0;var t=c;k&&(t=!0===k?j:k);l=function(a){return g.call(t,YAHOO.util.Event.getEvent(a,c),j)};s=[c,f,g,l,t,j,k];e[e.length]=s;if(this.useLegacyEvent(c, -f)){var p=this.getLegacyIndex(c,f);if(-1==p||c!=d[p][0])p=d.length,h[c.id+f]=p,d[p]=[c,f,c["on"+f]],a[p]=[],c["on"+f]=function(a){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(a),p)};a[p].push(s)}else try{this._simpleAdd(c,f,l,i)}catch(u){return this.lastError=u,this.removeListener(c,f,g),!1}return!0},addListener:function(a,b,d,c,f){return this._addListener(a,b,d,c,f,!1)},addFocusListener:function(a,b,d,c){return this._addListener(a,k,b,d,c,!0)},removeFocusListener:function(a,b){return this.removeListener(a, -k,b)},addBlurListener:function(a,b,d,c){return this._addListener(a,l,b,d,c,!0)},removeBlurListener:function(a,b){return this.removeListener(a,l,b)},fireLegacyEvent:function(b,c){var f=!0,e,g,j;e=a[c].slice();for(var h=0,k=e.length;h<k;++h)if((g=e[h])&&g[this.WFN])j=g[this.ADJ_SCOPE],g=g[this.WFN].call(j,b),f=f&&g;if((e=d[c])&&e[2])e[2](b);return f},getLegacyIndex:function(a,b){var d=this.generateId(a)+b;return"undefined"==typeof h[d]?-1:h[d]},useLegacyEvent:function(a,b){return this.webkit&&419>this.webkit&& -("click"==b||"dblclick"==b)},removeListener:function(d,c,f,g){var j,h,k;if("string"==typeof d)d=this.getEl(d);else if(this._isValidCollection(d)){g=!0;for(j=d.length-1;-1<j;j--)g=this.removeListener(d[j],c,f)&&g;return g}if(!f||!f.call)return this.purgeElement(d,!1,c);if("unload"==c){for(j=b.length-1;-1<j;j--)if((k=b[j])&&k[0]==d&&k[1]==c&&k[2]==f)return b.splice(j,1),!0;return!1}j=null;"undefined"===typeof g&&(g=this._getCacheIndex(d,c,f));0<=g&&(j=e[g]);if(!d||!j)return!1;if(this.useLegacyEvent(d, -c)){j=this.getLegacyIndex(d,c);var i=a[j];if(i){j=0;for(h=i.length;j<h;++j)if((k=i[j])&&k[this.EL]==d&&k[this.TYPE]==c&&k[this.FN]==f){i.splice(j,1);break}}}else try{this._simpleRemove(d,c,j[this.WFN],!1)}catch(l){return this.lastError=l,!1}delete e[g][this.WFN];delete e[g][this.FN];e.splice(g,1);return!0},getTarget:function(a){return this.resolveTextNode(a.target||a.srcElement)},resolveTextNode:function(a){try{if(a&&3==a.nodeType)return a.parentNode}catch(b){}return a},getPageX:function(a){var b= -a.pageX;!b&&0!==b&&(b=a.clientX||0,this.isIE&&(b+=this._getScrollLeft()));return b},getPageY:function(a){var b=a.pageY;!b&&0!==b&&(b=a.clientY||0,this.isIE&&(b+=this._getScrollTop()));return b},getXY:function(a){return[this.getPageX(a),this.getPageY(a)]},getRelatedTarget:function(a){var b=a.relatedTarget;b||("mouseout"==a.type?b=a.toElement:"mouseover"==a.type&&(b=a.fromElement));return this.resolveTextNode(b)},getTime:function(a){if(!a.time){var b=(new Date).getTime();try{a.time=b}catch(d){return this.lastError= -d,b}}return a.time},stopEvent:function(a){this.stopPropagation(a);this.preventDefault(a)},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},getEvent:function(a){a=a||window.event;if(!a)for(var b=this.getEvent.caller;b&&!((a=b.arguments[0])&&Event==a.constructor);)b=b.caller;return a},getCharCode:function(a){a=a.keyCode||a.charCode||0;YAHOO.env.ua.webkit&&a in j&&(a=j[a]);return a},_getCacheIndex:function(a, -b,d){for(var c=0,f=e.length;c<f;c+=1){var g=e[c];if(g&&g[this.FN]==d&&g[this.EL]==a&&g[this.TYPE]==b)return c}return-1},generateId:function(a){var b=a.id;b||(b="yuievtautoid-"+i,++i,a.id=b);return b},_isValidCollection:function(a){try{return a&&"string"!==typeof a&&a.length&&!a.tagName&&!a.alert&&"undefined"!==typeof a[0]}catch(b){return!1}},elCache:{},getEl:function(a){return"string"===typeof a?document.getElementById(a):a},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady", -this),_load:function(){if(!c){c=!0;var a=YAHOO.util.Event;a._ready();a._tryPreloadAttach()}},_ready:function(){var a=YAHOO.util.Event;a.DOMReady||(a.DOMReady=!0,a.DOMReadyEvent.fire(),a._simpleRemove(document,"DOMContentLoaded",a._ready))},_tryPreloadAttach:function(){if(0===g.length)f=0,this._interval&&(clearInterval(this._interval),this._interval=null);else if(!this.locked)if(this.isIE&&!this.DOMReady)this.startInterval();else{this.locked=!0;var a=!c;a||(a=0<f&&0<g.length);var b=[],d=function(a, -b){var d=a;b.overrideContext&&(d=!0===b.overrideContext?b.obj:b.overrideContext);b.fn.call(d,b.obj)},e,j,h,k,i=[];e=0;for(j=g.length;e<j;e+=1)if(h=g[e])if(k=this.getEl(h.id))if(h.checkReady){if(c||k.nextSibling||!a)i.push(h),g[e]=null}else d(k,h),g[e]=null;else b.push(h);e=0;for(j=i.length;e<j;e+=1)h=i[e],d(this.getEl(h.id),h);f--;if(a){for(e=g.length-1;-1<e;e--)h=g[e],(!h||!h.id)&&g.splice(e,1);this.startInterval()}else this._interval&&(clearInterval(this._interval),this._interval=null);this.locked= -!1}},purgeElement:function(a,b,d){var a=YAHOO.lang.isString(a)?this.getEl(a):a,c=this.getListeners(a,d),f;if(c)for(f=c.length-1;-1<f;f--){var e=c[f];this.removeListener(a,e.type,e.fn)}if(b&&a&&a.childNodes){f=0;for(c=a.childNodes.length;f<c;++f)this.purgeElement(a.childNodes[f],b,d)}},getListeners:function(a,d){var c=[],f;f=d?"unload"===d?[b]:[e]:[e,b];for(var g=YAHOO.lang.isString(a)?this.getEl(a):a,j=0;j<f.length;j+=1){var h=f[j];if(h)for(var k=0,i=h.length;k<i;++k){var l=h[k];l&&(l[this.EL]=== -g&&(!d||d===l[this.TYPE]))&&c.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.OVERRIDE],scope:l[this.ADJ_SCOPE],index:k})}}return c.length?c:null},_unload:function(a){var c=YAHOO.util.Event,f,g,j,h=b.slice(),k;f=0;for(j=b.length;f<j;++f)if(g=h[f])k=window,g[c.ADJ_SCOPE]&&(k=!0===g[c.ADJ_SCOPE]?g[c.UNLOAD_OBJ]:g[c.ADJ_SCOPE]),g[c.FN].call(k,c.getEvent(a,g[c.EL]),g[c.UNLOAD_OBJ]),h[f]=null;b=null;if(e)for(a=e.length-1;-1<a;a--)(g=e[a])&&c.removeListener(g[c.EL],g[c.TYPE],g[c.FN], -a);d=null;c._simpleRemove(window,"unload",c._unload)},_getScrollLeft:function(){return this._getScroll()[1]},_getScrollTop:function(){return this._getScroll()[0]},_getScroll:function(){var a=document.documentElement,b=document.body;return a&&(a.scrollTop||a.scrollLeft)?[a.scrollTop,a.scrollLeft]:b?[b.scrollTop,b.scrollLeft]:[0,0]},regCE:function(){},_simpleAdd:function(){return window.addEventListener?function(a,b,d,c){a.addEventListener(b,d,c)}:window.attachEvent?function(a,b,d){a.attachEvent("on"+ -b,d)}:function(){}}(),_simpleRemove:function(){return window.removeEventListener?function(a,b,d,c){a.removeEventListener(b,d,c)}:window.detachEvent?function(a,b,d){a.detachEvent("on"+b,d)}:function(){}}()}}(),function(){var c=YAHOO.util.Event;c.on=c.addListener;c.onFocus=c.addFocusListener;c.onBlur=c.addBlurListener;if(c.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,!0);var e=document.createElement("p");c._dri=setInterval(function(){try{e.doScroll("left"),clearInterval(c._dri), -c._dri=null,c._ready(),e=null}catch(b){}},c.POLL_INTERVAL)}else c.webkit&&525>c.webkit?c._dri=setInterval(function(){var b=document.readyState;if("loaded"==b||"complete"==b)clearInterval(c._dri),c._dri=null,c._ready()},c.POLL_INTERVAL):c._simpleAdd(document,"DOMContentLoaded",c._ready);c._simpleAdd(window,"load",c._load);c._simpleAdd(window,"unload",c._unload);c._tryPreloadAttach()}());YAHOO.util.EventProvider=function(){}; -YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(c,e,b,d){this.__yui_events=this.__yui_events||{};var a=this.__yui_events[c];if(a)a.subscribe(e,b,d);else{a=this.__yui_subscribers=this.__yui_subscribers||{};a[c]||(a[c]=[]);a[c].push({fn:e,obj:b,overrideContext:d})}},unsubscribe:function(c,e,b){var d=this.__yui_events=this.__yui_events||{};if(c){if(d=d[c])return d.unsubscribe(e,b)}else{var c=true,a;for(a in d)YAHOO.lang.hasOwnProperty(d,a)&&(c=c&&d[a].unsubscribe(e, -b));return c}return false},unsubscribeAll:function(c){return this.unsubscribe(c)},createEvent:function(c,e){this.__yui_events=this.__yui_events||{};var b=e||{},d=this.__yui_events;if(!d[c]){var a=new YAHOO.util.CustomEvent(c,b.scope||this,b.silent,YAHOO.util.CustomEvent.FLAT);d[c]=a;b.onSubscribeCallback&&a.subscribeEvent.subscribe(b.onSubscribeCallback);this.__yui_subscribers=this.__yui_subscribers||{};if(b=this.__yui_subscribers[c])for(var f=0;f<b.length;++f)a.subscribe(b[f].fn,b[f].obj,b[f].overrideContext)}return d[c]}, -fireEvent:function(c,e,b,d){this.__yui_events=this.__yui_events||{};var a=this.__yui_events[c];if(!a)return null;for(var f=[],g=1;g<arguments.length;++g)f.push(arguments[g]);return a.fire.apply(a,f)},hasEvent:function(c){return this.__yui_events&&this.__yui_events[c]?true:false}}; -(function(){var c=YAHOO.util.Event,e=YAHOO.lang;YAHOO.util.KeyListener=function(b,a,f,g){function h(b){if(!a.shift)a.shift=false;if(!a.alt)a.alt=false;if(!a.ctrl)a.ctrl=false;if(b.shiftKey==a.shift&&b.altKey==a.alt&&b.ctrlKey==a.ctrl){var d,f=a.keys,e;if(YAHOO.lang.isArray(f))for(var g=0;g<f.length;g++){d=f[g];e=c.getCharCode(b);if(d==e){i.fire(e,b);break}}else{e=c.getCharCode(b);f==e&&i.fire(e,b)}}}if(!g)g=YAHOO.util.KeyListener.KEYDOWN;var i=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent= -new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");e.isString(b)&&(b=document.getElementById(b));e.isFunction(f)?i.subscribe(f):i.subscribe(f.fn,f.scope,f.correctScope);this.enable=function(){if(!this.enabled){c.on(b,g,h);this.enabledEvent.fire(a)}this.enabled=true};this.disable=function(){if(this.enabled){c.removeListener(b,g,h);this.disabledEvent.fire(a)}this.enabled=false};this.toString=function(){return"KeyListener ["+a.keys+"] "+b.tagName+(b.id?"["+ -b.id+"]":"")}};var b=YAHOO.util.KeyListener;b.KEYDOWN="keydown";b.KEYUP="keyup";b.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38}})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event",YAHOO,{version:"2.7.0",build:"1796"}); -YAHOO.util.DragDropMgr||(YAHOO.util.DragDropMgr=function(){var c=YAHOO.util.Event,e=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var b=document.createElement("div");b.id="yui-ddm-shim";document.body.firstChild?document.body.insertBefore(b,document.body.firstChild):document.body.appendChild(b);b.style.display="none";b.style.backgroundColor="red";b.style.position="absolute";b.style.zIndex="99999";e.setStyle(b,"opacity","0");this._shim= -b;c.on(b,"mouseup",this.handleMouseUp,this,true);c.on(b,"mousemove",this.handleMouseMove,this,true);c.on(window,"scroll",this._sizeShim,this,true)},_sizeShim:function(){if(this._shimActive){var b=this._shim;b.style.height=e.getDocumentHeight()+"px";b.style.width=e.getDocumentWidth()+"px";b.style.top="0";b.style.left="0"}},_activateShim:function(){if(this.useShim){this._shim||this._createShim();this._shimActive=true;var b=this._shim,d="0";this._debugShim&&(d=".5");e.setStyle(b,"opacity",d);this._sizeShim(); -b.style.display="block"}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(b,d){for(var a in this.ids)for(var c in this.ids[a]){var e=this.ids[a][c];this.isTypeOfDD(e)&&e[b].apply(e,d)}},_onLoad:function(){this.init(); -c.on(document,"mouseup",this.handleMouseUp,this,true);c.on(document,"mousemove",this.handleMouseMove,this,true);c.on(window,"unload",this._onUnload,this,true);c.on(window,"resize",this._onResize,this,true)},_onResize:function(){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1E3,dragThreshMet:false,clickTimeout:null,startX:0,startY:0, -fromTimeout:false,regDragDrop:function(b,d){this.initialized||this.init();this.ids[d]||(this.ids[d]={});this.ids[d][b.id]=b},removeDDFromGroup:function(b,d){this.ids[d]||(this.ids[d]={});var a=this.ids[d];a&&a[b.id]&&delete a[b.id]},_remove:function(b){for(var d in b.groups)if(d){var a=this.ids[d];a&&a[b.id]&&delete a[b.id]}delete this.handleIds[b.id]},regHandle:function(b,d){this.handleIds[b]||(this.handleIds[b]={});this.handleIds[b][d]=d},isDragDrop:function(b){return this.getDDById(b)?true:false}, -getRelated:function(b,d){var a=[],c;for(c in b.groups)for(var e in this.ids[c]){var h=this.ids[c][e];if(this.isTypeOfDD(h)&&(!d||h.isTarget))a[a.length]=h}return a},isLegalTarget:function(b,d){for(var a=this.getRelated(b,true),c=0,e=a.length;c<e;++c)if(a[c].id==d.id)return true;return false},isTypeOfDD:function(b){return b&&b.__ygDragDrop},isHandle:function(b,d){return this.handleIds[b]&&this.handleIds[b][d]},getDDById:function(b){for(var d in this.ids)if(this.ids[d][b])return this.ids[d][b];return null}, -handleMouseDown:function(b,d){this.currentTarget=YAHOO.util.Event.getTarget(b);this.dragCurrent=d;var a=d.getEl();this.startX=YAHOO.util.Event.getPageX(b);this.startY=YAHOO.util.Event.getPageY(b);this.deltaX=this.startX-a.offsetLeft;this.deltaY=this.startY-a.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var a=YAHOO.util.DDM;a.startDrag(a.startX,a.startY);a.fromTimeout=true},this.clickTimeThresh)},startDrag:function(b,d){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState= -this.useShim;this.useShim=true}this._activateShim();clearTimeout(this.clickTimeout);var a=this.dragCurrent;if(a&&a.events.b4StartDrag){a.b4StartDrag(b,d);a.fireEvent("b4StartDragEvent",{x:b,y:d})}if(a&&a.events.startDrag){a.startDrag(b,d);a.fireEvent("startDragEvent",{x:b,y:d})}this.dragThreshMet=true},handleMouseUp:function(b){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(b)}this.fromTimeout=false;this.fireEvents(b, -true)}this.stopDrag(b);this.stopEvent(b)}},stopEvent:function(b){this.stopPropagation&&YAHOO.util.Event.stopPropagation(b);this.preventDefault&&YAHOO.util.Event.preventDefault(b)},stopDrag:function(b,d){var a=this.dragCurrent;if(a&&!d){if(this.dragThreshMet){if(a.events.b4EndDrag){a.b4EndDrag(b);a.fireEvent("b4EndDragEvent",{e:b})}if(a.events.endDrag){a.endDrag(b);a.fireEvent("endDragEvent",{e:b})}}if(a.events.mouseUp){a.onMouseUp(b);a.fireEvent("mouseUpEvent",{e:b})}}if(this._shimActive){this._deactivateShim(); -if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false}}this.dragCurrent=null;this.dragOvers={}},handleMouseMove:function(b){var d=this.dragCurrent;if(d){if(YAHOO.util.Event.isIE&&!b.button){this.stopEvent(b);return this.handleMouseUp(b)}if(!this.dragThreshMet){var a=Math.abs(this.startX-YAHOO.util.Event.getPageX(b)),c=Math.abs(this.startY-YAHOO.util.Event.getPageY(b));(a>this.clickPixelThresh||c>this.clickPixelThresh)&&this.startDrag(this.startX,this.startY)}if(this.dragThreshMet){if(d&& -d.events.b4Drag){d.b4Drag(b);d.fireEvent("b4DragEvent",{e:b})}if(d&&d.events.drag){d.onDrag(b);d.fireEvent("dragEvent",{e:b})}d&&this.fireEvents(b,false)}this.stopEvent(b)}},fireEvents:function(b,d){var a=this.dragCurrent;if(a&&!a.isLocked()&&!a.dragOnly){var c=YAHOO.util.Event.getPageX(b),e=YAHOO.util.Event.getPageY(b),h=new YAHOO.util.Point(c,e),e=a.getTargetCoord(h.x,h.y),i=a.getDragEl(),c=["out","over","drop","enter"],j=new YAHOO.util.Region(e.y,e.x+i.offsetWidth,e.y+i.offsetHeight,e.x),k=[], -l={},e=[],i={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]},m;for(m in this.dragOvers){var n=this.dragOvers[m];if(this.isTypeOfDD(n)){this.isOverTarget(h,n,this.mode,j)||i.outEvts.push(n);k[m]=true;delete this.dragOvers[m]}}for(var o in a.groups)if("string"==typeof o)for(m in this.ids[o]){n=this.ids[o][m];if(this.isTypeOfDD(n)&&n.isTarget&&(!n.isLocked()&&n!=a)&&this.isOverTarget(h,n,this.mode,j)){l[o]=true;if(d)i.dropEvts.push(n);else{k[n.id]?i.overEvts.push(n):i.enterEvts.push(n);this.dragOvers[n.id]= -n}}}this.interactionInfo={out:i.outEvts,enter:i.enterEvts,over:i.overEvts,drop:i.dropEvts,point:h,draggedRegion:j,sourceRegion:this.locationCache[a.id],validDrop:d};for(var r in l)e.push(r);if(d&&!i.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(b);a.fireEvent("invalidDropEvent",{e:b})}}for(m=0;m<c.length;m++){o=null;i[c[m]+"Evts"]&&(o=i[c[m]+"Evts"]);if(o&&o.length){k=c[m].charAt(0).toUpperCase()+c[m].substr(1);r="onDrag"+k;h="b4Drag"+k;j="drag"+k+ -"Event";k="drag"+k;if(this.mode){if(a.events[h]){a[h](b,o,e);a.fireEvent(h+"Event",{event:b,info:o,group:e})}if(a.events[k]){a[r](b,o,e);a.fireEvent(j,{event:b,info:o,group:e})}}else{l=0;for(n=o.length;l<n;++l){if(a.events[h]){a[h](b,o[l].id,e[0]);a.fireEvent(h+"Event",{event:b,info:o[l].id,group:e[0]})}if(a.events[k]){a[r](b,o[l].id,e[0]);a.fireEvent(j,{event:b,info:o[l].id,group:e[0]})}}}}}}},getBestMatch:function(b){var d=null,a=b.length;if(a==1)d=b[0];else for(var c=0;c<a;++c){var e=b[c];if(this.mode== -this.INTERSECT&&e.cursorIsOver){d=e;break}else if(!d||!d.overlap||e.overlap&&d.overlap.getArea()<e.overlap.getArea())d=e}return d},refreshCache:function(b){var b=b||this.ids,d;for(d in b)if("string"==typeof d)for(var a in this.ids[d]){var c=this.ids[d][a];if(this.isTypeOfDD(c)){var e=this.getLocation(c);e?this.locationCache[c.id]=e:delete this.locationCache[c.id]}}},verifyEl:function(b){try{if(b&&b.offsetParent)return true}catch(d){}return false},getLocation:function(b){if(!this.isTypeOfDD(b))return null; -var d=b.getEl(),a,c,e;try{a=YAHOO.util.Dom.getXY(d)}catch(h){}if(!a)return null;c=a[0];e=c+d.offsetWidth;a=a[1];return new YAHOO.util.Region(a-b.padding[0],e+b.padding[1],a+d.offsetHeight+b.padding[2],c-b.padding[3])},isOverTarget:function(b,d,a,c){var e=this.locationCache[d.id];if(!e||!this.useCache){e=this.getLocation(d);this.locationCache[d.id]=e}if(!e)return false;d.cursorIsOver=e.contains(b);var h=this.dragCurrent;if(!h||!a&&!h.constrainX&&!h.constrainY)return d.cursorIsOver;d.overlap=null;if(!c){b= -h.getTargetCoord(b.x,b.y);h=h.getDragEl();c=new YAHOO.util.Region(b.y,b.x+h.offsetWidth,b.y+h.offsetHeight,b.x)}if(e=c.intersect(e)){d.overlap=e;return a?true:d.cursorIsOver}return false},_onUnload:function(){this.unregAll()},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null}this._execOnAll("unreg",[]);this.ids={}},elementCache:{},getElWrapper:function(b){var d=this.elementCache[b];if(!d||!d.el)d=this.elementCache[b]=new this.ElementWrapper(YAHOO.util.Dom.get(b));return d}, -getElement:function(b){return YAHOO.util.Dom.get(b)},getCss:function(b){return(b=YAHOO.util.Dom.get(b))?b.style:null},ElementWrapper:function(b){this.id=(this.el=b||null)&&b.id;this.css=this.el&&b.style},getPosX:function(b){return YAHOO.util.Dom.getX(b)},getPosY:function(b){return YAHOO.util.Dom.getY(b)},swapNode:function(b,d){if(b.swapNode)b.swapNode(d);else{var a=d.parentNode,c=d.nextSibling;if(c==b)a.insertBefore(b,d);else if(d==b.nextSibling)a.insertBefore(d,b);else{b.parentNode.replaceChild(d, -b);a.insertBefore(b,c)}}},getScroll:function(){var b,d,a=document.documentElement,c=document.body;if(a&&(a.scrollTop||a.scrollLeft)){b=a.scrollTop;d=a.scrollLeft}else if(c){b=c.scrollTop;d=c.scrollLeft}return{top:b,left:d}},getStyle:function(b,d){return YAHOO.util.Dom.getStyle(b,d)},getScrollTop:function(){return this.getScroll().top},getScrollLeft:function(){return this.getScroll().left},moveToEl:function(b,d){var a=YAHOO.util.Dom.getXY(d);YAHOO.util.Dom.setXY(b,a)},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight()}, -getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth()},numericSort:function(b,d){return b-d},_timeoutCount:0,_addListeners:function(){var b=YAHOO.util.DDM;if(YAHOO.util.Event&&document)b._onLoad();else if(!(b._timeoutCount>2E3)){setTimeout(b._addListeners,10);if(document&&document.body)b._timeoutCount=b._timeoutCount+1}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id))return true;for(var a=b.parentNode;a;){if(this.isHandle(d,a.id))return true;a=a.parentNode}return false}}}(), -YAHOO.util.DDM=YAHOO.util.DragDropMgr,YAHOO.util.DDM._addListeners()); -(function(){var c=YAHOO.util.Event,e=YAHOO.util.Dom;YAHOO.util.DragDrop=function(b,d,a){b&&this.init(b,d,a)};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments)},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},unlock:function(){this.locked=false},isTarget:true,padding:null,dragOnly:false,useShim:false, -_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(){},startDrag:function(){},b4Drag:function(){},onDrag:function(){},onDragEnter:function(){},b4DragOver:function(){},onDragOver:function(){},b4DragOut:function(){},onDragOut:function(){},b4DragDrop:function(){},onDragDrop:function(){}, -onInvalidDrop:function(){},b4EndDrag:function(){},endDrag:function(){},b4MouseDown:function(){},onMouseDown:function(){},onMouseUp:function(){},onAvailable:function(){},getEl:function(){if(!this._domRef)this._domRef=e.get(this.id);return this._domRef},getDragEl:function(){return e.get(this.dragElId)},init:function(b,d,a){this.initTarget(b,d,a);c.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var e in this.events)this.createEvent(e+"Event")},initTarget:function(b,d,a){this.config= -a||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof b!=="string"){this._domRef=b;b=e.generateId(b)}this.id=b;this.addToGroup(d?d:"default");this.handleElId=b;c.onAvailable(b,this.handleOnAvailable,this,true);this.setDragElId(b);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig()},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true, -b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events)for(var b in this.config.events)this.config.events[b]===false&&(this.events[b]=false);this.padding=this.config.padding||[0,0,0,0];this.isTarget=this.config.isTarget!==false;this.maintainOffset=this.config.maintainOffset;this.primaryButtonOnly=this.config.primaryButtonOnly!==false;this.dragOnly=this.config.dragOnly===true?true:false;this.useShim= -this.config.useShim===true?true:false},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(b,d,a,c){this.padding=!d&&0!==d?[b,b,b,b]:!a&&0!==a?[b,d,b,d]:[b,d,a,c]},setInitPosition:function(b,d){var a=this.getEl();if(this.DDM.verifyEl(a)){var c=b||0,g=d||0,a=e.getXY(a);this.initPageX=a[0]-c;this.initPageY=a[1]-g;this.lastPageX=a[0];this.lastPageY=a[1];this.setStartPosition(a)}},setStartPosition:function(b){b=b||e.getXY(this.getEl());this.deltaSetXY= -null;this.startPageX=b[0];this.startPageY=b[1]},addToGroup:function(b){this.groups[b]=true;this.DDM.regDragDrop(this,b)},removeFromGroup:function(b){this.groups[b]&&delete this.groups[b];this.DDM.removeDDFromGroup(this,b)},setDragElId:function(b){this.dragElId=b},setHandleElId:function(b){typeof b!=="string"&&(b=e.generateId(b));this.handleElId=b;this.DDM.regHandle(this.id,b)},setOuterHandleElId:function(b){typeof b!=="string"&&(b=e.generateId(b));c.on(b,"mousedown",this.handleMouseDown,this,true); -this.setHandleElId(b);this.hasOuterHandles=true},unreg:function(){c.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},isLocked:function(){return this.DDM.isLocked()||this.locked},handleMouseDown:function(b){var d=b.which||b.button;if(!(this.primaryButtonOnly&&d>1)&&!this.isLocked()){var d=this.b4MouseDown(b),a=true;this.events.b4MouseDown&&(a=this.fireEvent("b4MouseDownEvent",b));var e=this.onMouseDown(b),g=true;this.events.mouseDown&&(g=this.fireEvent("mouseDownEvent", -b));if(!(d===false||e===false||a===false||g===false)){this.DDM.refreshCache(this.groups);d=new YAHOO.util.Point(c.getPageX(b),c.getPageY(b));if((this.hasOuterHandles||this.DDM.isOverTarget(d,this))&&this.clickValidator(b)){this.setStartPosition();this.DDM.handleMouseDown(b,this);this.DDM.stopEvent(b)}}}},clickValidator:function(b){b=YAHOO.util.Event.getTarget(b);return this.isValidHandleChild(b)&&(this.id==this.handleElId||this.DDM.handleWasClicked(b,this.id))},getTargetCoord:function(b,d){var a= -b-this.deltaX,c=d-this.deltaY;if(this.constrainX){if(a<this.minX)a=this.minX;if(a>this.maxX)a=this.maxX}if(this.constrainY){if(c<this.minY)c=this.minY;if(c>this.maxY)c=this.maxY}a=this.getTick(a,this.xTicks);c=this.getTick(c,this.yTicks);return{x:a,y:c}},addInvalidHandleType:function(b){b=b.toUpperCase();this.invalidHandleTypes[b]=b},addInvalidHandleId:function(b){typeof b!=="string"&&(b=e.generateId(b));this.invalidHandleIds[b]=b},addInvalidHandleClass:function(b){this.invalidHandleClasses.push(b)}, -removeInvalidHandleType:function(b){delete this.invalidHandleTypes[b.toUpperCase()]},removeInvalidHandleId:function(b){typeof b!=="string"&&(b=e.generateId(b));delete this.invalidHandleIds[b]},removeInvalidHandleClass:function(b){for(var d=0,a=this.invalidHandleClasses.length;d<a;++d)this.invalidHandleClasses[d]==b&&delete this.invalidHandleClasses[d]},isValidHandleChild:function(b){var d=true,a;try{a=b.nodeName.toUpperCase()}catch(c){a=b.nodeName}d=(d=d&&!this.invalidHandleTypes[a])&&!this.invalidHandleIds[b.id]; -a=0;for(var g=this.invalidHandleClasses.length;d&&a<g;++a)d=!e.hasClass(b,this.invalidHandleClasses[a]);return d},setXTicks:function(b,d){this.xTicks=[];this.xTickSize=d;for(var a={},c=this.initPageX;c>=this.minX;c=c-d)if(!a[c]){this.xTicks[this.xTicks.length]=c;a[c]=true}for(c=this.initPageX;c<=this.maxX;c=c+d)if(!a[c]){this.xTicks[this.xTicks.length]=c;a[c]=true}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(b,d){this.yTicks=[];this.yTickSize=d;for(var a={},c=this.initPageY;c>=this.minY;c= -c-d)if(!a[c]){this.yTicks[this.yTicks.length]=c;a[c]=true}for(c=this.initPageY;c<=this.maxY;c=c+d)if(!a[c]){this.yTicks[this.yTicks.length]=c;a[c]=true}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(b,d,a){this.leftConstraint=parseInt(b,10);this.rightConstraint=parseInt(d,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;a&&this.setXTicks(this.initPageX,a);this.constrainX=true},clearConstraints:function(){this.constrainY=this.constrainX= -false;this.clearTicks()},clearTicks:function(){this.yTicks=this.xTicks=null;this.yTickSize=this.xTickSize=0},setYConstraint:function(b,d,a){this.topConstraint=parseInt(b,10);this.bottomConstraint=parseInt(d,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;a&&this.setYTicks(this.initPageY,a);this.constrainY=true},resetConstraints:function(){this.initPageX||this.initPageX===0?this.setInitPosition(this.maintainOffset?this.lastPageX-this.initPageX:0,this.maintainOffset? -this.lastPageY-this.initPageY:0):this.setInitPosition();this.constrainX&&this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);this.constrainY&&this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)},getTick:function(b,d){if(d){if(d[0]>=b)return d[0];for(var a=0,c=d.length;a<c;++a){var e=a+1;if(d[e]&&d[e]>=b)return d[e]-b>b-d[a]?d[a]:d[e]}return d[d.length-1]}return b},toString:function(){return"DragDrop "+this.id}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider)})(); -YAHOO.util.DD=function(c,e,b){c&&this.init(c,e,b)}; -YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:!0,autoOffset:function(c,e){this.setDelta(c-this.startPageX,e-this.startPageY)},setDelta:function(c,e){this.deltaX=c;this.deltaY=e},setDragElPos:function(c,e){this.alignElWithMouse(this.getDragEl(),c,e)},alignElWithMouse:function(c,e,b){var d=this.getTargetCoord(e,b);if(this.deltaSetXY){YAHOO.util.Dom.setStyle(c,"left",d.x+this.deltaSetXY[0]+"px");YAHOO.util.Dom.setStyle(c,"top",d.y+this.deltaSetXY[1]+"px")}else{YAHOO.util.Dom.setXY(c,[d.x,d.y]); -e=parseInt(YAHOO.util.Dom.getStyle(c,"left"),10);b=parseInt(YAHOO.util.Dom.getStyle(c,"top"),10);this.deltaSetXY=[e-d.x,b-d.y]}this.cachePosition(d.x,d.y);var a=this;setTimeout(function(){a.autoScroll.call(a,d.x,d.y,c.offsetHeight,c.offsetWidth)},0)},cachePosition:function(c,e){if(c){this.lastPageX=c;this.lastPageY=e}else{var b=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=b[0];this.lastPageY=b[1]}},autoScroll:function(c,e,b,d){if(this.scroll){var a=this.DDM.getClientHeight(),f=this.DDM.getClientWidth(), -g=this.DDM.getScrollTop(),h=this.DDM.getScrollLeft(),d=d+c,i=a+g-e-this.deltaY,j=f+h-c-this.deltaX,k=document.all?80:30;b+e>a&&i<40&&window.scrollTo(h,g+k);e<g&&(g>0&&e-g<40)&&window.scrollTo(h,g-k);d>f&&j<40&&window.scrollTo(h+k,g);c<h&&(h>0&&c-h<40)&&window.scrollTo(h-k,g)}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=this.config.scroll!==false},b4MouseDown:function(c){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(c),YAHOO.util.Event.getPageY(c))}, -b4Drag:function(c){this.setDragElPos(YAHOO.util.Event.getPageX(c),YAHOO.util.Event.getPageY(c))},toString:function(){return"DD "+this.id}});YAHOO.util.DDProxy=function(c,e,b){if(c){this.init(c,e,b);this.initFrame()}};YAHOO.util.DDProxy.dragElId="ygddfdiv"; -YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:!0,centerFrame:!1,createFrame:function(){var c=this,e=document.body;if(!e||!e.firstChild)setTimeout(function(){c.createFrame()},50);else{var b=this.getDragEl(),d=YAHOO.util.Dom;if(!b){b=document.createElement("div");b.id=this.dragElId;var a=b.style;a.position="absolute";a.visibility="hidden";a.cursor="move";a.border="2px solid #aaa";a.zIndex=999;a.height="25px";a.width="25px";a=document.createElement("div");d.setStyle(a,"height","100%");d.setStyle(a, -"width","100%");d.setStyle(a,"background-color","#ccc");d.setStyle(a,"opacity","0");b.appendChild(a);e.insertBefore(b,e.firstChild)}}},initFrame:function(){this.createFrame()},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=this.config.resizeFrame!==false;this.centerFrame=this.config.centerFrame;this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId)},showFrame:function(c,e){this.getEl();var b=this.getDragEl(),d=b.style;this._resizeProxy(); -this.centerFrame&&this.setDelta(Math.round(parseInt(d.width,10)/2),Math.round(parseInt(d.height,10)/2));this.setDragElPos(c,e);YAHOO.util.Dom.setStyle(b,"visibility","visible")},_resizeProxy:function(){if(this.resizeFrame){var c=YAHOO.util.Dom,e=this.getEl(),b=this.getDragEl(),d=parseInt(c.getStyle(b,"borderTopWidth"),10),a=parseInt(c.getStyle(b,"borderRightWidth"),10),f=parseInt(c.getStyle(b,"borderBottomWidth"),10),g=parseInt(c.getStyle(b,"borderLeftWidth"),10);isNaN(d)&&(d=0);isNaN(a)&&(a=0);isNaN(f)&& -(f=0);isNaN(g)&&(g=0);a=Math.max(0,e.offsetWidth-a-g);e=Math.max(0,e.offsetHeight-d-f);c.setStyle(b,"width",a+"px");c.setStyle(b,"height",e+"px")}},b4MouseDown:function(c){this.setStartPosition();var e=YAHOO.util.Event.getPageX(c),c=YAHOO.util.Event.getPageY(c);this.autoOffset(e,c)},b4StartDrag:function(c,e){this.showFrame(c,e)},b4EndDrag:function(){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden")},endDrag:function(){var c=YAHOO.util.Dom,e=this.getEl(),b=this.getDragEl();c.setStyle(b, -"visibility","");c.setStyle(e,"visibility","hidden");YAHOO.util.DDM.moveToEl(e,b);c.setStyle(b,"visibility","hidden");c.setStyle(e,"visibility","")},toString:function(){return"DDProxy "+this.id}});YAHOO.util.DDTarget=function(c,e,b){c&&this.initTarget(c,e,b)};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return"DDTarget "+this.id}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"}); -(function(){function c(a,b,d,e){c.ANIM_AVAIL=!YAHOO.lang.isUndefined(YAHOO.util.Anim);if(a){this.init(a,b,true);this.initSlider(e);this.initThumb(d)}}var e=YAHOO.util.Dom.getXY,b=YAHOO.util.Event,d=Array.prototype.slice;YAHOO.lang.augmentObject(c,{getHorizSlider:function(a,b,d,e,i){return new c(a,a,new YAHOO.widget.SliderThumb(b,a,d,e,0,0,i),"horiz")},getVertSlider:function(a,b,d,e,i){return new c(a,a,new YAHOO.widget.SliderThumb(b,a,0,0,d,e,i),"vert")},getSliderRegion:function(a,b,d,e,i,j,k){return new c(a, -a,new YAHOO.widget.SliderThumb(b,a,d,e,i,j,k),"region")},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(c,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(a){this.type=a;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=c.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration= -0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0]},initThumb:function(a){var b=this;this.thumb=a;a.cacheBetweenDrags=true;if(a._isHoriz&&a.xTicks&&a.xTicks.length)this.tickPause=Math.round(360/a.xTicks.length);else if(a.yTicks&&a.yTicks.length)this.tickPause=Math.round(360/a.yTicks.length);a.onAvailable=function(){return b.setStartSliderState()};a.onMouseDown=function(){b._mouseDown=true;return b.focus()};a.startDrag=function(){b._slideStart()}; -a.onDrag=function(){b.fireEvents(true)};a.onMouseUp=function(){b.thumbMouseUp()}},onAvailable:function(){this._bindKeyEvents()},_bindKeyEvents:function(){b.on(this.id,"keydown",this.handleKeyDown,this,true);b.on(this.id,"keypress",this.handleKeyPress,this,true)},handleKeyPress:function(a){if(this.enableKeys)switch(b.getCharCode(a)){case 37:case 38:case 39:case 40:case 36:case 35:b.preventDefault(a)}},handleKeyDown:function(a){if(this.enableKeys){var d=b.getCharCode(a),e=this.thumb,h=this.getXValue(), -i=this.getYValue(),j=true;switch(d){case 37:h=h-this.keyIncrement;break;case 38:i=i-this.keyIncrement;break;case 39:h=h+this.keyIncrement;break;case 40:i=i+this.keyIncrement;break;case 36:h=e.leftConstraint;i=e.topConstraint;break;case 35:h=e.rightConstraint;i=e.bottomConstraint;break;default:j=false}if(j){e._isRegion?this._setRegionValue(c.SOURCE_KEY_EVENT,h,i,true):this._setValue(c.SOURCE_KEY_EVENT,e._isHoriz?h:i,true);b.stopEvent(a)}}},setStartSliderState:function(){this.setThumbCenterPoint(); -this.baselinePos=e(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion)if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null}else this.setRegionValue(0,0,true,true,true);else if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null}else this.setValue(0,true,true,true)},setThumbCenterPoint:function(){var a=this.thumb.getEl(); -if(a)this.thumbCenterPoint={x:parseInt(a.offsetWidth/2,10),y:parseInt(a.offsetHeight/2,10)}},lock:function(){this.thumb.lock();this.locked=true},unlock:function(){this.thumb.unlock();this.locked=false},thumbMouseUp:function(){this._mouseDown=false;!this.isLocked()&&!this.moveComplete&&this.endMove()},onMouseUp:function(){this._mouseDown=false;this.backgroundEnabled&&(!this.isLocked()&&!this.moveComplete)&&this.endMove()},getThumb:function(){return this.thumb},focus:function(){this.valueChangeSource= -c.SOURCE_UI_EVENT;var a=this.getEl();if(a.focus)try{a.focus()}catch(b){}this.verifyOffset();return!this.isLocked()},onChange:function(){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue()},getXValue:function(){return this.thumb.getXValue()},getYValue:function(){return this.thumb.getYValue()},setValue:function(){var a=d.call(arguments);a.unshift(c.SOURCE_SET_VALUE);return this._setValue.apply(this,a)},_setValue:function(a,b,d,e,i){var j=this.thumb,k; -if(!j.available){this.deferredSetValue=arguments;return false}if(this.isLocked()&&!e||isNaN(b)||j._isRegion)return false;this._silent=i;this.valueChangeSource=a||c.SOURCE_SET_VALUE;j.lastOffset=[b,b];this.verifyOffset(true);this._slideStart();if(j._isHoriz){k=j.initPageX+b+this.thumbCenterPoint.x;this.moveThumb(k,j.initPageY,d)}else{k=j.initPageY+b+this.thumbCenterPoint.y;this.moveThumb(j.initPageX,k,d)}return true},setRegionValue:function(){var a=d.call(arguments);a.unshift(c.SOURCE_SET_VALUE);return this._setRegionValue.apply(this, -a)},_setRegionValue:function(a,b,d,e,i,j){var k=this.thumb;if(!k.available){this.deferredSetRegionValue=arguments;return false}if(this.isLocked()&&!i||isNaN(b)||!k._isRegion)return false;this._silent=j;this.valueChangeSource=a||c.SOURCE_SET_VALUE;k.lastOffset=[b,d];this.verifyOffset(true);this._slideStart();this.moveThumb(k.initPageX+b+this.thumbCenterPoint.x,k.initPageY+d+this.thumbCenterPoint.y,e);return true},verifyOffset:function(){var a=e(this.getEl()),b=this.thumb;(!this.thumbCenterPoint||!this.thumbCenterPoint.x)&& -this.setThumbCenterPoint();if(a&&(a[0]!=this.baselinePos[0]||a[1]!=this.baselinePos[1])){this.setInitPosition();this.baselinePos=a;b.initPageX=this.initPageX+b.startOffset[0];b.initPageY=this.initPageY+b.startOffset[1];b.deltaSetXY=null;this.resetThumbConstraints();return false}return true},moveThumb:function(a,b,d,h){var i=this.thumb,j=this,k,l;if(i.available){i.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);l=i.getTargetCoord(a,b);k=[Math.round(l.x),Math.round(l.y)];if(this.animate&& -i._graduated&&!d){this.lock();this.curCoord=e(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){j.moveOneTick(k)},this.tickPause)}else if(this.animate&&c.ANIM_AVAIL&&!d){this.lock();a=new YAHOO.util.Motion(i.id,{points:{to:k}},this.animationDuration,YAHOO.util.Easing.easeOut);a.onComplete.subscribe(function(){j.unlock();j._mouseDown||j.endMove()});a.animate()}else{i.setDragElPos(a,b);!h&&!this._mouseDown&&this.endMove()}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart(); -this.fireEvent("slideStart")}this._sliding=true}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var a=this._silent;this.moveComplete=this._silent=this._sliding=false;if(!a){this.onSlideEnd();this.fireEvent("slideEnd")}}},moveOneTick:function(a){var b=this.thumb,d=this,c=null,e;if(b._isRegion){c=this._getNextX(this.curCoord,a);e=c!==null?c[0]:this.curCoord[0];c=this._getNextY(this.curCoord,a);c=c!==null?c[1]:this.curCoord[1];c=e!==this.curCoord[0]||c!==this.curCoord[1]?[e,c]:null}else c= -b._isHoriz?this._getNextX(this.curCoord,a):this._getNextY(this.curCoord,a);if(c){this.curCoord=c;this.thumb.alignElWithMouse(b.getEl(),c[0]+this.thumbCenterPoint.x,c[1]+this.thumbCenterPoint.y);if(c[0]==a[0]&&c[1]==a[1]){this.unlock();this._mouseDown||this.endMove()}else setTimeout(function(){d.moveOneTick(a)},this.tickPause)}else{this.unlock();this._mouseDown||this.endMove()}},_getNextX:function(a,b){var d=this.thumb,c;c=[];c=null;if(a[0]>b[0]){c=d.tickSize-this.thumbCenterPoint.x;c=d.getTargetCoord(a[0]- -c,a[1]);c=[c.x,c.y]}else if(a[0]<b[0]){c=d.tickSize+this.thumbCenterPoint.x;c=d.getTargetCoord(a[0]+c,a[1]);c=[c.x,c.y]}return c},_getNextY:function(a,b){var d=this.thumb,c;c=[];c=null;if(a[1]>b[1]){c=d.tickSize-this.thumbCenterPoint.y;c=d.getTargetCoord(a[0],a[1]-c);c=[c.x,c.y]}else if(a[1]<b[1]){c=d.tickSize+this.thumbCenterPoint.y;c=d.getTargetCoord(a[0],a[1]+c);c=[c.x,c.y]}return c},b4MouseDown:function(){if(!this.backgroundEnabled)return false;this.thumb.autoOffset();this.resetThumbConstraints()}, -onMouseDown:function(a){if(!this.backgroundEnabled||this.isLocked())return false;this._mouseDown=true;var d=b.getPageX(a),a=b.getPageY(a);this.focus();this._slideStart();this.moveThumb(d,a)},onDrag:function(a){if(this.backgroundEnabled&&!this.isLocked()){var d=b.getPageX(a),a=b.getPageY(a);this.moveThumb(d,a,true,true);this.fireEvents()}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd()},resetThumbConstraints:function(){var a=this.thumb;a.setXConstraint(a.leftConstraint, -a.rightConstraint,a.xTickSize);a.setYConstraint(a.topConstraint,a.bottomConstraint,a.xTickSize)},fireEvents:function(a){var b=this.thumb;a||b.cachePosition();if(!this.isLocked())if(b._isRegion){a=b.getXValue();b=b.getYValue();if((a!=this.previousX||b!=this.previousY)&&!this._silent){this.onChange(a,b);this.fireEvent("change",{x:a,y:b})}this.previousX=a;this.previousY=b}else{b=b.getValue();if(b!=this.previousVal&&!this._silent){this.onChange(b);this.fireEvent("change",b)}this.previousVal=b}},toString:function(){return"Slider ("+ -this.type+") "+this.id}});YAHOO.lang.augmentProto(c,YAHOO.util.EventProvider);YAHOO.widget.Slider=c})();YAHOO.widget.SliderThumb=function(c,e,b,d,a,f,g){if(c){YAHOO.widget.SliderThumb.superclass.constructor.call(this,c,e);this.parentElId=e}this.isTarget=false;this.tickSize=g;this.maintainOffset=true;this.initSlider(b,d,a,f,g);this.scroll=false}; -YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:!0,_isHoriz:!1,_prevVal:0,_graduated:!1,getOffsetFromParent0:function(c){var e=YAHOO.util.Dom.getXY(this.getEl()),c=c||YAHOO.util.Dom.getXY(this.parentElId);return[e[0]-c[0],e[1]-c[1]]},getOffsetFromParent:function(c){var e=this.getEl(),b;if(this.deltaOffset){b=parseInt(YAHOO.util.Dom.getStyle(e,"left"),10);e=parseInt(YAHOO.util.Dom.getStyle(e,"top"),10);b=[b+this.deltaOffset[0],e+this.deltaOffset[1]]}else{b=YAHOO.util.Dom.getXY(e); -c=c||YAHOO.util.Dom.getXY(this.parentElId);b=[b[0]-c[0],b[1]-c[1]];c=parseInt(YAHOO.util.Dom.getStyle(e,"left"),10);e=parseInt(YAHOO.util.Dom.getStyle(e,"top"),10);c=c-b[0];e=e-b[1];if(!isNaN(c)&&!isNaN(e))this.deltaOffset=[c,e]}return b},initSlider:function(c,e,b,d,a){this.initLeft=c;this.initRight=e;this.initUp=b;this.initDown=d;this.setXConstraint(c,e,a);this.setYConstraint(b,d,a);if(a&&a>1)this._graduated=true;this._isHoriz=c||e;this._isVert=b||d;this._isRegion=this._isHoriz&&this._isVert},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this); -this.tickSize=0;this._graduated=false},getValue:function(){return this._isHoriz?this.getXValue():this.getYValue()},getXValue:function(){if(!this.available)return 0;var c=this.getOffsetFromParent();if(YAHOO.lang.isNumber(c[0])){this.lastOffset=c;return c[0]-this.startOffset[0]}return this.lastOffset[0]-this.startOffset[0]},getYValue:function(){if(!this.available)return 0;var c=this.getOffsetFromParent();if(YAHOO.lang.isNumber(c[1])){this.lastOffset=c;return c[1]-this.startOffset[1]}return this.lastOffset[1]- -this.startOffset[1]},toString:function(){return"SliderThumb "+this.id},onChange:function(){}}); -(function(){function c(b,a,c,e){var h=this,i=false,j=false,k,l;this.minSlider=b;this.maxSlider=a;this.activeSlider=b;this.isHoriz=b.thumb._isHoriz;k=this.minSlider.thumb.onMouseDown;l=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){h.activeSlider=h.minSlider;k.apply(this,arguments)};this.maxSlider.thumb.onMouseDown=function(){h.activeSlider=h.maxSlider;l.apply(this,arguments)};this.minSlider.thumb.onAvailable=function(){b.setStartSliderState();i=true;j&&h.fireEvent("ready", -h)};this.maxSlider.thumb.onAvailable=function(){a.setStartSliderState();j=true;i&&h.fireEvent("ready",h)};b.onMouseDown=a.onMouseDown=function(a){return this.backgroundEnabled&&h._handleMouseDown(a)};b.onDrag=a.onDrag=function(a){h._handleDrag(a)};b.onMouseUp=a.onMouseUp=function(a){h._handleMouseUp(a)};b._bindKeyEvents=function(){h._bindKeyEvents(this)};a._bindKeyEvents=function(){};b.subscribe("change",this._handleMinChange,b,this);b.subscribe("slideStart",this._handleSlideStart,b,this);b.subscribe("slideEnd", -this._handleSlideEnd,b,this);a.subscribe("change",this._handleMaxChange,a,this);a.subscribe("slideStart",this._handleSlideStart,a,this);a.subscribe("slideEnd",this._handleSlideEnd,a,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);e=YAHOO.lang.isArray(e)?e:[0,c];e[0]=Math.min(Math.max(parseInt(e[0],10)|0,0),c);e[1]=Math.max(Math.min(parseInt(e[1],10)|0,c),0);e[0]>e[1]&&e.splice(0,2,e[1],e[0]);this.minVal=e[0]; -this.maxVal=e[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true)}var e=YAHOO.util.Event,b=YAHOO.widget;c.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(b,a){this.fireEvent("slideStart",a)},_handleSlideEnd:function(b,a){this.fireEvent("slideEnd",a)},_handleDrag:function(d){b.Slider.prototype.onDrag.call(this.activeSlider,d)},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue()},_handleMaxChange:function(){this.activeSlider= -this.maxSlider;this.updateValue()},_bindKeyEvents:function(b){e.on(b.id,"keydown",this._handleKeyDown,this,true);e.on(b.id,"keypress",this._handleKeyPress,this,true)},_handleKeyDown:function(b){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments)},_handleKeyPress:function(b){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments)},setValues:function(b,a,c,e,h){var i=this.minSlider,j=this.maxSlider,k=i.thumb,l=j.thumb,m=this,n=false,o=false;if(k._isHoriz){k.setXConstraint(k.leftConstraint, -l.rightConstraint,k.tickSize);l.setXConstraint(k.leftConstraint,l.rightConstraint,l.tickSize)}else{k.setYConstraint(k.topConstraint,l.bottomConstraint,k.tickSize);l.setYConstraint(k.topConstraint,l.bottomConstraint,l.tickSize)}this._oneTimeCallback(i,"slideEnd",function(){n=true;if(o){m.updateValue(h);setTimeout(function(){m._cleanEvent(i,"slideEnd");m._cleanEvent(j,"slideEnd")},0)}});this._oneTimeCallback(j,"slideEnd",function(){o=true;if(n){m.updateValue(h);setTimeout(function(){m._cleanEvent(i, -"slideEnd");m._cleanEvent(j,"slideEnd")},0)}});i.setValue(b,c,e,false);j.setValue(a,c,e,false)},setMinValue:function(b,a,c,e){var h=this.minSlider,i=this;this.activeSlider=h;i=this;this._oneTimeCallback(h,"slideEnd",function(){i.updateValue(e);setTimeout(function(){i._cleanEvent(h,"slideEnd")},0)});h.setValue(b,a,c)},setMaxValue:function(b,a,c,e){var h=this.maxSlider,i=this;this.activeSlider=h;this._oneTimeCallback(h,"slideEnd",function(){i.updateValue(e);setTimeout(function(){i._cleanEvent(h,"slideEnd")}, -0)});h.setValue(b,a,c)},updateValue:function(b){var a=this.minSlider.getValue(),c=this.maxSlider.getValue(),e=false,h,i,j,k;if(a!=this.minVal||c!=this.maxVal){e=true;h=this.minSlider.thumb;i=this.maxSlider.thumb;j=this.isHoriz?"x":"y";k=this.minSlider.thumbCenterPoint[j]+this.maxSlider.thumbCenterPoint[j];j=Math.max(c-k-this.minRange,0);k=Math.min(-a-k-this.minRange,0);if(this.isHoriz){j=Math.min(j,i.rightConstraint);h.setXConstraint(h.leftConstraint,j,h.tickSize);i.setXConstraint(k,i.rightConstraint, -i.tickSize)}else{j=Math.min(j,i.bottomConstraint);h.setYConstraint(h.leftConstraint,j,h.tickSize);i.setYConstraint(k,i.bottomConstraint,i.tickSize)}}this.minVal=a;this.maxVal=c;e&&!b&&this.fireEvent("change",this)},selectActiveSlider:function(b){var a=this.minSlider,c=this.maxSlider,e=a.isLocked()||!a.backgroundEnabled,h=c.isLocked()||!a.backgroundEnabled,i=YAHOO.util.Event;if(e||h)this.activeSlider=e?c:a;else{b=this.isHoriz?i.getPageX(b)-a.thumb.initPageX-a.thumbCenterPoint.x:i.getPageY(b)-a.thumb.initPageY- -a.thumbCenterPoint.y;this.activeSlider=b*2>c.getValue()+a.getValue()?c:a}},_handleMouseDown:function(d){if(d._handled)return false;d._handled=true;this.selectActiveSlider(d);return b.Slider.prototype.onMouseDown.call(this.activeSlider,d)},_handleMouseUp:function(d){b.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments)},_oneTimeCallback:function(b,a,c){b.subscribe(a,function(){b.unsubscribe(a,arguments.callee);c.apply({},[].slice.apply(arguments))})},_cleanEvent:function(b,a){var c,e,h,i, -j,k;if(b.__yui_events&&b.events[a]){for(e=b.__yui_events.length;e>=0;--e)if(b.__yui_events[e].type===a){c=b.__yui_events[e];break}if(c){j=c.subscribers;k=[];e=i=0;for(h=j.length;e<h;++e)j[e]&&(k[i++]=j[e]);c.subscribers=k}}}};YAHOO.lang.augmentProto(c,YAHOO.util.EventProvider);b.Slider.getHorizDualSlider=function(d,a,e,g,h,i){a=new b.SliderThumb(a,d,0,g,0,0,h);e=new b.SliderThumb(e,d,0,g,0,0,h);return new c(new b.Slider(d,d,a,"horiz"),new b.Slider(d,d,e,"horiz"),g,i)};b.Slider.getVertDualSlider=function(c, -a,e,g,h,i){a=new b.SliderThumb(a,c,0,0,0,g,h);e=new b.SliderThumb(e,c,0,0,0,g,h);return new b.DualSlider(new b.Slider(c,c,a,"vert"),new b.Slider(c,c,e,"vert"),g,i)};YAHOO.widget.DualSlider=c})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});YAHOO.util.Attribute=function(c,e){if(e){this.owner=e;this.configure(c,true)}}; -YAHOO.util.Attribute.prototype={name:void 0,value:null,owner:null,readOnly:!1,writeOnce:!1,_initialConfig:null,_written:!1,method:null,setter:null,getter:null,validator:null,getValue:function(){var c=this.value;this.getter&&(c=this.getter.call(this.owner,this.name));return c},setValue:function(c,e){var b,d=this.owner,a=this.name,f={type:a,prevValue:this.getValue(),newValue:c};if(this.readOnly||this.writeOnce&&this._written||this.validator&&!this.validator.call(d,c))return false;if(!e){b=d.fireBeforeChangeEvent(f); -if(b===false)return false}this.setter&&(c=this.setter.call(d,c,this.name));this.method&&this.method.call(d,c,this.name);this.value=c;this._written=true;f.type=a;e||this.owner.fireChangeEvent(f);return true},configure:function(c,e){c=c||{};if(e)this._written=false;this._initialConfig=this._initialConfig||{};for(var b in c)if(c.hasOwnProperty(b)){this[b]=c[b];e&&(this._initialConfig[b]=c[b])}},resetValue:function(){return this.setValue(this._initialConfig.value)},resetConfig:function(){this.configure(this._initialConfig, -true)},refresh:function(c){this.setValue(this.value,c)}}; -(function(){var c=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(c){this._configs=this._configs||{};var b=this._configs[c];return!b||!this._configs.hasOwnProperty(c)?null:b.getValue()},set:function(c,b,d){this._configs=this._configs||{};c=this._configs[c];return!c?false:c.setValue(b,d)},getAttributeKeys:function(){this._configs=this._configs;var e=[],b;for(b in this._configs)c.hasOwnProperty(this._configs,b)&&!c.isUndefined(this._configs[b])&& -(e[e.length]=b);return e},setAttributes:function(e,b){for(var d in e)c.hasOwnProperty(e,d)&&this.set(d,e[d],b)},resetValue:function(c,b){this._configs=this._configs||{};if(this._configs[c]){this.set(c,this._configs[c]._initialConfig.value,b);return true}return false},refresh:function(e,b){for(var d=this._configs=this._configs||{},e=(c.isString(e)?[e]:e)||this.getAttributeKeys(),a=0,f=e.length;a<f;++a)d.hasOwnProperty(e[a])&&this._configs[e[a]].refresh(b)},register:function(c,b){this.setAttributeConfig(c, -b)},getAttributeConfig:function(e){this._configs=this._configs||{};var b=this._configs[e]||{},d={};for(e in b)c.hasOwnProperty(b,e)&&(d[e]=b[e]);return d},setAttributeConfig:function(c,b,d){this._configs=this._configs||{};b=b||{};if(this._configs[c])this._configs[c].configure(b,d);else{b.name=c;this._configs[c]=this.createAttribute(b)}},configureAttribute:function(c,b,d){this.setAttributeConfig(c,b,d)},resetAttributeConfig:function(c){this._configs=this._configs||{};this._configs[c].resetConfig()}, -subscribe:function(c,b){this._events=this._events||{};c in this._events||(this._events[c]=this.createEvent(c));YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){this.subscribe.apply(this,arguments)},addListener:function(){this.subscribe.apply(this,arguments)},fireBeforeChangeEvent:function(c){var b;b="before"+(c.type.charAt(0).toUpperCase()+c.type.substr(1)+"Change");c.type=b;return this.fireEvent(c.type,c)},fireChangeEvent:function(c){c.type=c.type+"Change";return this.fireEvent(c.type, -c)},createAttribute:function(c){return new YAHOO.util.Attribute(c,this)}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider)})(); -(function(){var c=YAHOO.util.Dom,e=YAHOO.util.AttributeProvider,b=function(b,a){this.init.apply(this,arguments)};b.DOM_EVENTS={click:true,dblclick:true,keydown:true,keypress:true,keyup:true,mousedown:true,mousemove:true,mouseout:true,mouseover:true,mouseup:true,focus:true,blur:true,submit:true,change:true};b.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(b,a){var c=this.get("element");c&&(c[a]=b)},DEFAULT_HTML_GETTER:function(b){var a=this.get("element"),c;a&&(c=a[b]);return c},appendChild:function(b){b= -b.get?b.get("element"):b;return this.get("element").appendChild(b)},getElementsByTagName:function(b){return this.get("element").getElementsByTagName(b)},hasChildNodes:function(){return this.get("element").hasChildNodes()},insertBefore:function(b,a){b=b.get?b.get("element"):b;a=a&&a.get?a.get("element"):a;return this.get("element").insertBefore(b,a)},removeChild:function(b){b=b.get?b.get("element"):b;return this.get("element").removeChild(b)},replaceChild:function(b,a){b=b.get?b.get("element"):b;a= -a.get?a.get("element"):a;return this.get("element").replaceChild(b,a)},initAttributes:function(){},addListener:function(b,a,c,e){var h=this.get("element")||this.get("id"),e=e||this,i=this;if(!this._events[b]){h&&this.DOM_EVENTS[b]&&YAHOO.util.Event.addListener(h,b,function(a){if(a.srcElement&&!a.target)a.target=a.srcElement;i.fireEvent(b,a)},c,e);this.createEvent(b,this)}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){return this.addListener.apply(this,arguments)}, -subscribe:function(){return this.addListener.apply(this,arguments)},removeListener:function(b,a){return this.unsubscribe.apply(this,arguments)},addClass:function(b){c.addClass(this.get("element"),b)},getElementsByClassName:function(b,a){return c.getElementsByClassName(b,a,this.get("element"))},hasClass:function(b){return c.hasClass(this.get("element"),b)},removeClass:function(b){return c.removeClass(this.get("element"),b)},replaceClass:function(b,a){return c.replaceClass(this.get("element"),b,a)}, -setStyle:function(b,a){return c.setStyle(this.get("element"),b,a)},getStyle:function(b){return c.getStyle(this.get("element"),b)},fireQueue:function(){for(var b=this._queue,a=0,c=b.length;a<c;++a)this[b[a][0]].apply(this,b[a][1])},appendTo:function(b,a){b=b.get?b.get("element"):c.get(b);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:b});var a=a&&a.get?a.get("element"):c.get(a),e=this.get("element");if(!e||!b)return false;e.parent!=b&&(a?b.insertBefore(e,a):b.appendChild(e));this.fireEvent("appendTo", -{type:"appendTo",target:b});return e},get:function(b){var a=this._configs||{},c=a.element;c&&(!a[b]&&!YAHOO.lang.isUndefined(c.value[b]))&&this._setHTMLAttrConfig(b);return e.prototype.get.call(this,b)},setAttributes:function(b,a){for(var c={},e=this._configOrder,h=0,i=e.length;h<i;++h)if(b[e[h]]!==void 0){c[e[h]]=true;this.set(e[h],b[e[h]],a)}for(var j in b)b.hasOwnProperty(j)&&!c[j]&&this.set(j,b[j],a)},set:function(b,a,c){var g=this.get("element");if(g){!this._configs[b]&&!YAHOO.lang.isUndefined(g[b])&& -this._setHTMLAttrConfig(b);return e.prototype.set.apply(this,arguments)}this._queue[this._queue.length]=["set",arguments];if(this._configs[b])this._configs[b].value=a},setAttributeConfig:function(b,a,c){this._configOrder.push(b);e.prototype.setAttributeConfig.apply(this,arguments)},createEvent:function(b,a){this._events[b]=true;return e.prototype.createEvent.apply(this,arguments)},init:function(b,a){this._initElement(b,a)},destroy:function(){var b=this.get("element");YAHOO.util.Event.purgeElement(b, -true);this.unsubscribeAll();b&&b.parentNode&&b.parentNode.removeChild(b);this._queue=[];this._events={};this._configs={};this._configOrder=[]},_initElement:function(d,a){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];a=a||{};a.element=a.element||d||null;var e=false,g=b.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var h in g)g.hasOwnProperty(h)&&(this.DOM_EVENTS[h]=g[h]);typeof a.element==="string"&&this._setHTMLAttrConfig("id", -{value:a.element});if(c.get(a.element)){e=true;this._initHTMLElement(a);this._initContent(a)}YAHOO.util.Event.onAvailable(a.element,function(){e||this._initHTMLElement(a);this.fireEvent("available",{type:"available",target:c.get(a.element)})},this,true);YAHOO.util.Event.onContentReady(a.element,function(){e||this._initContent(a);this.fireEvent("contentReady",{type:"contentReady",target:c.get(a.element)})},this,true)},_initHTMLElement:function(b){this.setAttributeConfig("element",{value:c.get(b.element), -readOnly:true})},_initContent:function(b){this.initAttributes(b);this.setAttributes(b,true);this.fireQueue()},_setHTMLAttrConfig:function(b,a){var c=this.get("element"),a=a||{};a.name=b;a.setter=a.setter||this.DEFAULT_HTML_SETTER;a.getter=a.getter||this.DEFAULT_HTML_GETTER;a.value=a.value||c[b];this._configs[b]=new YAHOO.util.Attribute(a,this)}};YAHOO.augment(b,e);YAHOO.util.Element=b})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"}); -YAHOO.util.Color=function(){var c=YAHOO.lang.isArray,e=YAHOO.lang.isNumber;return{real2dec:function(b){return Math.min(255,Math.round(b*256))},hsv2rgb:function(b,d,a){if(c(b))return this.hsv2rgb.call(this,b[0],b[1],b[2]);var e,g,h,i=Math.floor(b/60%6),j=b/60-i,b=a*(1-d),k=a*(1-j*d),d=a*(1-(1-j)*d);switch(i){case 0:e=a;g=d;h=b;break;case 1:e=k;g=a;h=b;break;case 2:e=b;g=a;h=d;break;case 3:e=b;g=k;h=a;break;case 4:e=d;g=b;h=a;break;case 5:e=a;g=b;h=k}a=this.real2dec;return[a(e),a(g),a(h)]},rgb2hsv:function(b, -d,a){if(c(b))return this.rgb2hsv.apply(this,b);var b=b/255,d=d/255,a=a/255,e,g=Math.min(Math.min(b,d),a),h=Math.max(Math.max(b,d),a),i=h-g;switch(h){case g:e=0;break;case b:e=60*(d-a)/i;d<a&&(e=e+360);break;case d:e=60*(a-b)/i+120;break;case a:e=60*(b-d)/i+240}return[Math.round(e),h===0?0:1-g/h,h]},rgb2hex:function(b,d,a){if(c(b))return this.rgb2hex.apply(this,b);var e=this.dec2hex;return e(b)+e(d)+e(a)},dec2hex:function(b){b=parseInt(b,10)|0;return("0"+(b>255||b<0?0:b).toString(16)).slice(-2).toUpperCase()}, -hex2dec:function(b){return parseInt(b,16)},hex2rgb:function(b){var c=this.hex2dec;return[c(b.slice(0,2)),c(b.slice(2,4)),c(b.slice(4,6))]},websafe:function(b,d,a){if(c(b))return this.websafe.apply(this,b);var f=function(a){if(e(a)){var a=Math.min(Math.max(0,a),255),b,c;for(b=0;b<256;b=b+51){c=b+51;if(a>=b&&a<=c)return a-b>25?c:b}}return a};return[f(b),f(d),f(a)]}}}(); -(function(){function c(a,b){e=e+1;b=b||{};if(arguments.length===1&&!YAHOO.lang.isString(a)&&!a.nodeName){b=a;a=b.element||null}!a&&!b.element&&(a=this._createHostElement(b));c.superclass.constructor.call(this,a,b);this.initPicker()}var e=0,b=YAHOO.util,d=YAHOO.lang,a=YAHOO.widget.Slider,f=b.Color,g=b.Dom,h=b.Event,i=d.substitute;YAHOO.extend(c,YAHOO.util.Element,{ID:{R:"yui-picker-r",R_HEX:"yui-picker-rhex",G:"yui-picker-g",G_HEX:"yui-picker-ghex",B:"yui-picker-b",B_HEX:"yui-picker-bhex",H:"yui-picker-h", -S:"yui-picker-s",V:"yui-picker-v",PICKER_BG:"yui-picker-bg",PICKER_THUMB:"yui-picker-thumb",HUE_BG:"yui-picker-hue-bg",HUE_THUMB:"yui-picker-hue-thumb",HEX:"yui-picker-hex",SWATCH:"yui-picker-swatch",WEBSAFE_SWATCH:"yui-picker-websafe-swatch",CONTROLS:"yui-picker-controls",RGB_CONTROLS:"yui-picker-rgb-controls",HSV_CONTROLS:"yui-picker-hsv-controls",HEX_CONTROLS:"yui-picker-hex-controls",HEX_SUMMARY:"yui-picker-hex-summary",CONTROLS_LABEL:"yui-picker-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered", -SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"°",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv", -RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var a=document.createElement("div");if(this.CSS.BASE)a.className=this.CSS.BASE;return a},_updateHueSlider:function(){var a= -this.get(this.OPT.PICKER_SIZE),b=this.get(this.OPT.HUE),b=a-Math.round(b/360*a);b===a&&(b=0);this.hueSlider.setValue(b,this.skipAnim)},_updatePickerSlider:function(){var a=this.get(this.OPT.PICKER_SIZE),b=this.get(this.OPT.SATURATION),c=this.get(this.OPT.VALUE),b=Math.round(b*a/100),c=Math.round(a-c*a/100);this.pickerSlider.setRegionValue(b,c,this.skipAnim)},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider()},setValue:function(a,b){this.set(this.OPT.RGB,a,b||false);this._updateSliders()}, -hueSlider:null,pickerSlider:null,_getH:function(){var a=this.get(this.OPT.PICKER_SIZE),a=(a-this.hueSlider.getValue())/a,a=Math.round(a*360);return a===360?0:a},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE)},_getV:function(){var a=this.get(this.OPT.PICKER_SIZE);return(a-this.pickerSlider.getYValue())/a},_updateSwatch:function(){var a=this.get(this.OPT.RGB),b=this.get(this.OPT.WEBSAFE),c=this.getElement(this.ID.SWATCH),a=a.join(","),d=this.get(this.OPT.TXT);g.setStyle(c, -"background-color","rgb("+a+")");c.title=i(d.CURRENT_COLOR,{rgb:"#"+this.get(this.OPT.HEX)});c=this.getElement(this.ID.WEBSAFE_SWATCH);a=b.join(",");g.setStyle(c,"background-color","rgb("+a+")");c.title=i(d.CLOSEST_WEBSAFE,{rgb:"#"+f.rgb2hex(b)})},_getValuesFromSliders:function(){this.set(this.OPT.RGB,f.hsv2rgb(this._getH(),this._getS(),this._getV()))},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION); -this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=f.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=f.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=f.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX)}, -_onHueSliderChange:function(){var b=this._getH(),c="rgb("+f.hsv2rgb(b,1,1).join(",")+")";this.set(this.OPT.HUE,b,true);g.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",c);this.hueSlider.valueChangeSource!==a.SOURCE_SET_VALUE&&this._getValuesFromSliders();this._updateFormFields();this._updateSwatch()},_onPickerSliderChange:function(){var b=this._getS(),c=this._getV();this.set(this.OPT.SATURATION,Math.round(b*100),true);this.set(this.OPT.VALUE,Math.round(c*100),true);this.pickerSlider.valueChangeSource!== -a.SOURCE_SET_VALUE&&this._getValuesFromSliders();this._updateFormFields();this._updateSwatch()},_getCommand:function(a){var b=h.getCharCode(a);return b===38?3:b===13?6:b===40?4:b>=48&&b<=57?1:b>=97&&b<=102?2:b>=65&&b<=70?2:"8, 9, 13, 27, 37, 39".indexOf(b)>-1||a.ctrlKey||a.metaKey?5:0},_useFieldValue:function(a,b,c){a=b.value;c!==this.OPT.HEX&&(a=parseInt(a,10));a!==this.get(c)&&this.set(c,a)},_rgbFieldKeypress:function(a,b,c){var d=this._getCommand(a),e=a.shiftKey?10:1;switch(d){case 6:this._useFieldValue.apply(this, -arguments);break;case 3:this.set(c,Math.min(this.get(c)+e,255));this._updateFormFields();break;case 4:this.set(c,Math.max(this.get(c)-e,0));this._updateFormFields()}},_hexFieldKeypress:function(a,b,c){this._getCommand(a)===6&&this._useFieldValue.apply(this,arguments)},_hexOnly:function(a,b){switch(this._getCommand(a)){case 6:case 5:case 1:break;case 2:if(b!==true)break;default:h.stopEvent(a);return false}},_numbersOnly:function(a){return this._hexOnly(a,true)},getElement:function(a){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[a]]}, -_createElements:function(){var a,b,c,e,f=this.get(this.OPT.IDS),g=this.get(this.OPT.TXT),h=this.get(this.OPT.IMAGES),i=function(a,b){var c=document.createElement(a);b&&d.augmentObject(c,b,true);return c},q=function(a,b){var c=d.merge({autocomplete:"off",value:"0",size:3,maxlength:3},b);c.name=c.id;return new i(a,c)};e=this.get("element");a=new i("div",{id:f[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});b=new i("div",{id:f[this.ID.PICKER_THUMB],className:"yui-picker-thumb"}); -c=new i("img",{src:h.PICKER_THUMB});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});b=new i("div",{id:f[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});c=new i("img",{src:h.HUE_THUMB});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.CONTROLS],className:"yui-picker-controls"});e.appendChild(a);e=a;a=new i("div",{className:"hd"});b=new i("a",{id:f[this.ID.CONTROLS_LABEL], -href:"#"});a.appendChild(b);e.appendChild(a);a=new i("div",{className:"bd"});e.appendChild(a);e=a;a=new i("ul",{id:f[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});b=new i("li");b.appendChild(document.createTextNode(g.R+" "));c=new q("input",{id:f[this.ID.R],className:"yui-picker-r"});b.appendChild(c);a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.G+" "));c=new q("input",{id:f[this.ID.G],className:"yui-picker-g"});b.appendChild(c);a.appendChild(b);b=new i("li"); -b.appendChild(document.createTextNode(g.B+" "));c=new q("input",{id:f[this.ID.B],className:"yui-picker-b"});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("ul",{id:f[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});b=new i("li");b.appendChild(document.createTextNode(g.H+" "));c=new q("input",{id:f[this.ID.H],className:"yui-picker-h"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.DEG));a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.S+" ")); -c=new q("input",{id:f[this.ID.S],className:"yui-picker-s"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.PERCENT));a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.V+" "));c=new q("input",{id:f[this.ID.V],className:"yui-picker-v"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.PERCENT));a.appendChild(b);e.appendChild(a);a=new i("ul",{id:f[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});b=new i("li",{id:f[this.ID.R_HEX]});a.appendChild(b); -b=new i("li",{id:f[this.ID.G_HEX]});a.appendChild(b);b=new i("li",{id:f[this.ID.B_HEX]});a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});a.appendChild(document.createTextNode(g.HEX+" "));b=new q("input",{id:f[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});a.appendChild(b);e.appendChild(a);e=this.get("element");a=new i("div",{id:f[this.ID.SWATCH],className:"yui-picker-swatch"});e.appendChild(a);a=new i("div",{id:f[this.ID.WEBSAFE_SWATCH], -className:"yui-picker-websafe-swatch"});e.appendChild(a)},_attachRGBHSV:function(a,b){h.on(this.getElement(a),"keydown",function(a,c){c._rgbFieldKeypress(a,this,b)},this);h.on(this.getElement(a),"keypress",this._numbersOnly,this,true);h.on(this.getElement(a),"blur",function(a,c){c._useFieldValue(a,this,b)},this)},_updateRGB:function(){this.set(this.OPT.RGB,[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)]);this._updateSliders()},_initElements:function(){var a=this.OPT,b=this.get(a.IDS), -a=this.get(a.ELEMENTS),c,e,f;for(c in this.ID)d.hasOwnProperty(this.ID,c)&&(b[this.ID[c]]=b[c]);(e=g.get(b[this.ID.PICKER_BG]))||this._createElements();for(c in b)if(d.hasOwnProperty(b,c)){e=g.get(b[c]);f=g.generateId(e);b[c]=f;b[b[c]]=f;a[f]=e}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true)},_initSliders:function(){var b=this.ID,c=this.get(this.OPT.PICKER_SIZE);this.hueSlider=a.getVertSlider(this.getElement(b.HUE_BG),this.getElement(b.HUE_THUMB),0,c);this.pickerSlider= -a.getSliderRegion(this.getElement(b.PICKER_BG),this.getElement(b.PICKER_THUMB),0,c,0,c);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE))},_bindUI:function(){var a=this.ID,b=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);h.on(this.getElement(a.WEBSAFE_SWATCH),"click",function(){this.setValue(this.get(b.WEBSAFE))},this,true);h.on(this.getElement(a.CONTROLS_LABEL),"click",function(a){this.set(b.SHOW_CONTROLS, -!this.get(b.SHOW_CONTROLS));h.preventDefault(a)},this,true);this._attachRGBHSV(a.R,b.RED);this._attachRGBHSV(a.G,b.GREEN);this._attachRGBHSV(a.B,b.BLUE);this._attachRGBHSV(a.H,b.HUE);this._attachRGBHSV(a.S,b.SATURATION);this._attachRGBHSV(a.V,b.VALUE);h.on(this.getElement(a.HEX),"keydown",function(a,c){c._hexFieldKeypress(a,this,b.HEX)},this);h.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);h.on(this.getElement(this.ID.HEX),"blur",function(a,c){c._useFieldValue(a,this,b.HEX)}, -this)},syncUI:function(a){this.skipAnim=a;this._updateRGB();this.skipAnim=false},_updateRGBFromHSV:function(){var a=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100];this.set(this.OPT.RGB,f.hsv2rgb(a));this._updateSliders()},_updateHex:function(){var a=this.get(this.OPT.HEX),b=a.length,c;if(b===3){a=a.split("");for(c=0;c<b;c=c+1)a[c]=a[c]+a[c];a=a.join("")}if(a.length!==6)return false;this.setValue(f.hex2rgb(a))},_hideShowEl:function(a,b){var c=d.isString(a)? -this.getElement(a):a;g.setStyle(c,"display",b?"":"none")},initAttributes:function(a){a=a||{};c.superclass.initAttributes.call(this,a);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:a.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:a.hue||0,validator:d.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:a.saturation||0,validator:d.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:d.isNumber(a.value)?a.value:100,validator:d.isNumber});this.setAttributeConfig(this.OPT.RED, -{value:d.isNumber(a.red)?a.red:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:d.isNumber(a.green)?a.green:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:d.isNumber(a.blue)?a.blue:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:a.hex||"FFFFFF",validator:d.isString});this.setAttributeConfig(this.OPT.RGB,{value:a.rgb||[255,255,255],method:function(a){this.set(this.OPT.RED,a[0],true);this.set(this.OPT.GREEN,a[1],true);this.set(this.OPT.BLUE, -a[2],true);var b=f.websafe(a),c=f.rgb2hex(a),a=f.rgb2hsv(a);this.set(this.OPT.WEBSAFE,b,true);this.set(this.OPT.HEX,c,true);a[1]&&this.set(this.OPT.HUE,a[0],true);this.set(this.OPT.SATURATION,Math.round(a[1]*100),true);this.set(this.OPT.VALUE,Math.round(a[2]*100),true)},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(a){a&&a.showEvent.subscribe(function(){this.pickerSlider.focus()},this,true)}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:a.websafe||[255, -255,255]});var b=a.ids||d.merge({},this.ID),h;if(!a.ids&&e>1)for(h in b)d.hasOwnProperty(b,h)&&(b[h]=b[h]+e);this.setAttributeConfig(this.OPT.IDS,{value:b,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:a.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:a.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:d.isBoolean(a.showcontrols)?a.showcontrols:true, -method:function(a){this._hideShowEl(g.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0],a);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=a?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:d.isBoolean(a.showrgbcontrols)?a.showrgbcontrols:true,method:function(a){this._hideShowEl(this.ID.RGB_CONTROLS,a)}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:d.isBoolean(a.showhsvcontrols)? -a.showhsvcontrols:false,method:function(a){this._hideShowEl(this.ID.HSV_CONTROLS,a);a&&this.get(this.OPT.SHOW_HEX_SUMMARY)&&this.set(this.OPT.SHOW_HEX_SUMMARY,false)}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:d.isBoolean(a.showhexcontrols)?a.showhexcontrols:false,method:function(a){this._hideShowEl(this.ID.HEX_CONTROLS,a)}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:d.isBoolean(a.showwebsafe)?a.showwebsafe:true,method:function(a){this._hideShowEl(this.ID.WEBSAFE_SWATCH, -a)}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:d.isBoolean(a.showhexsummary)?a.showhexsummary:true,method:function(a){this._hideShowEl(this.ID.HEX_SUMMARY,a);a&&this.get(this.OPT.SHOW_HSV_CONTROLS)&&this.set(this.OPT.SHOW_HSV_CONTROLS,false)}});this.setAttributeConfig(this.OPT.ANIMATE,{value:d.isBoolean(a.animate)?a.animate:true,method:function(a){if(this.pickerSlider){this.pickerSlider.animate=a;this.hueSlider.animate=a}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this, -true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements()}});YAHOO.widget.ColorPicker=c})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"}); -(function(){var c=YAHOO.util,e=function(b,c,a,e){this.init(b,c,a,e)};e.NAME="Anim";e.prototype={toString:function(){var b=this.getEl()||{};return this.constructor.NAME+": "+(b.id||b.tagName)},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(b,c,a){return this.method(this.currentFrame,c,a-c,this.totalFrames)},setAttribute:function(b, -d,a){var e=this.getEl();this.patterns.noNegatives.test(b)&&(d=d>0?d:0);"style"in e?c.Dom.setStyle(e,b,d+a):b in e&&(e[b]=d)},getAttribute:function(b){var d=this.getEl(),a=c.Dom.getStyle(d,b);if(a!=="auto"&&!this.patterns.offsetUnit.test(a))return parseFloat(a);var e=this.patterns.offsetAttribute.exec(b)||[],g=!!e[3],h=!!e[2];"style"in d?a=h||c.Dom.getStyle(d,"position")=="absolute"&&g?d["offset"+e[0].charAt(0).toUpperCase()+e[0].substr(1)]:0:b in d&&(a=d[b]);return a},getDefaultUnit:function(b){return this.patterns.defaultUnit.test(b)? -"px":""},setRuntimeAttribute:function(b){var c,a,e=this.attributes;this.runtimeAttributes[b]={};var g=function(a){return typeof a!=="undefined"};if(!g(e[b].to)&&!g(e[b].by))return false;c=g(e[b].from)?e[b].from:this.getAttribute(b);if(g(e[b].to))a=e[b].to;else if(g(e[b].by))if(c.constructor==Array){a=[];for(var h=0,i=c.length;h<i;++h)a[h]=c[h]+e[b].by[h]*1}else a=c+e[b].by*1;this.runtimeAttributes[b].start=c;this.runtimeAttributes[b].end=a;this.runtimeAttributes[b].unit=g(e[b].unit)?e[b].unit:this.getDefaultUnit(b); -return true},init:function(b,d,a,e){var g=false,h=null,i=0,b=c.Dom.get(b);this.attributes=d||{};this.duration=!YAHOO.lang.isUndefined(a)?a:1;this.method=e||c.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=c.AnimMgr.fps;this.setEl=function(a){b=c.Dom.get(a)};this.getEl=function(){return b};this.isAnimated=function(){return g};this.getStartTime=function(){return h};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated())return false;this.currentFrame=0;this.totalFrames= -this.useSeconds?Math.ceil(c.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds)this.totalFrames=1;c.AnimMgr.registerElement(this);return true};this.stop=function(a){if(!this.isAnimated())return false;if(a){this.currentFrame=this.totalFrames;this._onTween.fire()}c.AnimMgr.stop(this)};this._onStart=new c.CustomEvent("_start",this,true);this.onStart=new c.CustomEvent("start",this);this.onTween=new c.CustomEvent("tween",this);this._onTween=new c.CustomEvent("_tween",this,true); -this.onComplete=new c.CustomEvent("complete",this);this._onComplete=new c.CustomEvent("_complete",this,true);this._onStart.subscribe(function(){this.onStart.fire();this.runtimeAttributes={};for(var a in this.attributes)this.setRuntimeAttribute(a);g=true;i=0;h=new Date});this._onTween.subscribe(function(){var a={duration:new Date-this.getStartTime(),currentFrame:this.currentFrame,toString:function(){return"duration: "+a.duration+", currentFrame: "+a.currentFrame}};this.onTween.fire(a);var b=this.runtimeAttributes, -c;for(c in b)this.setAttribute(c,this.doMethod(c,b[c].start,b[c].end),b[c].unit);i=i+1});this._onComplete.subscribe(function(){var a=(new Date-h)/1E3,b={duration:a,frames:i,fps:i/a,toString:function(){return"duration: "+b.duration+", frames: "+b.frames+", fps: "+b.fps}};g=false;i=0;this.onComplete.fire(b)})}};c.Anim=e})(); -YAHOO.util.AnimMgr=new function(){var c=null,e=[],b=0;this.fps=1E3;this.delay=1;this.registerElement=function(c){e[e.length]=c;b=b+1;c._onStart.fire();this.start()};this.unRegister=function(c,a){var f;if(!(f=a))a:{f=0;for(var g=e.length;f<g;++f)if(e[f]==c)break a;f=-1}a=f;if(!c.isAnimated()||a==-1)return false;c._onComplete.fire();e.splice(a,1);b=b-1;b<=0&&this.stop();return true};this.start=function(){c===null&&(c=setInterval(this.run,this.delay))};this.stop=function(d){if(d)this.unRegister(d);else{clearInterval(c); -for(var d=0,a=e.length;d<a;++d)this.unRegister(e[0],0);e=[];c=null;b=0}};this.run=function(){for(var b=0,a=e.length;b<a;++b){var c=e[b];if(c&&c.isAnimated())if(c.currentFrame<c.totalFrames||c.totalFrames===null){c.currentFrame=c.currentFrame+1;if(c.useSeconds){var g=c,h=g.totalFrames,i=g.currentFrame,j=g.currentFrame*g.duration*1E3/g.totalFrames,k=new Date-g.getStartTime(),l=0,l=k<g.duration*1E3?Math.round((k/j-1)*g.currentFrame):h-(i+1);if(l>0&&isFinite(l)){g.currentFrame+l>=h&&(l=h-(i+1));g.currentFrame= -g.currentFrame+l}}c._onTween.fire()}else YAHOO.util.AnimMgr.stop(c,b)}}};YAHOO.util.Bezier=new function(){this.getPosition=function(c,e){for(var b=c.length,d=[],a=0;a<b;++a)d[a]=[c[a][0],c[a][1]];for(var f=1;f<b;++f)for(a=0;a<b-f;++a){d[a][0]=(1-e)*d[a][0]+e*d[parseInt(a+1,10)][0];d[a][1]=(1-e)*d[a][1]+e*d[parseInt(a+1,10)][1]}return[d[0][0],d[0][1]]}}; -(function(){var c=function(a,b,d,e){c.superclass.constructor.call(this,a,b,d,e)};c.NAME="ColorAnim";c.DEFAULT_BGCOLOR="#fff";var e=YAHOO.util;YAHOO.extend(c,e.Anim);var b=c.superclass,d=c.prototype;d.patterns.color=/color$/i;d.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;d.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;d.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;d.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;d.parseColor=function(a){if(a.length== -3)return a;var b=this.patterns.hex.exec(a);if(b&&b.length==4)return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)];if((b=this.patterns.rgb.exec(a))&&b.length==4)return[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10)];return(b=this.patterns.hex3.exec(a))&&b.length==4?[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]:null};d.getAttribute=function(a){var d=this.getEl();if(this.patterns.color.test(a)){var g=YAHOO.util.Dom.getStyle(d,a),h=this;if(this.patterns.transparent.test(g))g= -(d=YAHOO.util.Dom.getAncestorBy(d,function(){return!h.patterns.transparent.test(g)}))?e.Dom.getStyle(d,a):c.DEFAULT_BGCOLOR}else g=b.getAttribute.call(this,a);return g};d.doMethod=function(a,c,d){var e;if(this.patterns.color.test(a)){e=[];for(var i=0,j=c.length;i<j;++i)e[i]=b.doMethod.call(this,a,c[i],d[i]);e="rgb("+Math.floor(e[0])+","+Math.floor(e[1])+","+Math.floor(e[2])+")"}else e=b.doMethod.call(this,a,c,d);return e};d.setRuntimeAttribute=function(a){b.setRuntimeAttribute.call(this,a);if(this.patterns.color.test(a)){var c= -this.attributes,d=this.parseColor(this.runtimeAttributes[a].start),e=this.parseColor(this.runtimeAttributes[a].end);if(typeof c[a].to==="undefined"&&typeof c[a].by!=="undefined")for(var e=this.parseColor(c[a].by),c=0,i=d.length;c<i;++c)e[c]=d[c]+e[c];this.runtimeAttributes[a].start=d;this.runtimeAttributes[a].end=e}};e.ColorAnim=c})(); -YAHOO.util.Easing={easeNone:function(c,e,b,d){return b*c/d+e},easeIn:function(c,e,b,d){return b*(c=c/d)*c+e},easeOut:function(c,e,b,d){return-b*(c=c/d)*(c-2)+e},easeBoth:function(c,e,b,d){return(c=c/(d/2))<1?b/2*c*c+e:-b/2*(--c*(c-2)-1)+e},easeInStrong:function(c,e,b,d){return b*(c=c/d)*c*c*c+e},easeOutStrong:function(c,e,b,d){return-b*((c=c/d-1)*c*c*c-1)+e},easeBothStrong:function(c,e,b,d){return(c=c/(d/2))<1?b/2*c*c*c*c+e:-b/2*((c=c-2)*c*c*c-2)+e},elasticIn:function(c,e,b,d,a,f){if(c==0)return e; -if((c=c/d)==1)return e+b;f||(f=d*0.3);if(!a||a<Math.abs(b)){a=b;b=f/4}else b=f/(2*Math.PI)*Math.asin(b/a);return-(a*Math.pow(2,10*(c=c-1))*Math.sin((c*d-b)*2*Math.PI/f))+e},elasticOut:function(c,e,b,d,a,f){if(c==0)return e;if((c=c/d)==1)return e+b;f||(f=d*0.3);if(!a||a<Math.abs(b))var a=b,g=f/4;else g=f/(2*Math.PI)*Math.asin(b/a);return a*Math.pow(2,-10*c)*Math.sin((c*d-g)*2*Math.PI/f)+b+e},elasticBoth:function(c,e,b,d,a,f){if(c==0)return e;if((c=c/(d/2))==2)return e+b;f||(f=d*0.3*1.5);if(!a||a<Math.abs(b))var a= -b,g=f/4;else g=f/(2*Math.PI)*Math.asin(b/a);return c<1?-0.5*a*Math.pow(2,10*(c=c-1))*Math.sin((c*d-g)*2*Math.PI/f)+e:a*Math.pow(2,-10*(c=c-1))*Math.sin((c*d-g)*2*Math.PI/f)*0.5+b+e},backIn:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return b*(c=c/d)*c*((a+1)*c-a)+e},backOut:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return b*((c=c/d-1)*c*((a+1)*c+a)+1)+e},backBoth:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return(c=c/(d/2))<1?b/2*c*c*(((a=a*1.525)+1)*c-a)+e:b/2* -((c=c-2)*c*(((a=a*1.525)+1)*c+a)+2)+e},bounceIn:function(c,e,b,d){return b-YAHOO.util.Easing.bounceOut(d-c,0,b,d)+e},bounceOut:function(c,e,b,d){return(c=c/d)<1/2.75?b*7.5625*c*c+e:c<2/2.75?b*(7.5625*(c=c-1.5/2.75)*c+0.75)+e:c<2.5/2.75?b*(7.5625*(c=c-2.25/2.75)*c+0.9375)+e:b*(7.5625*(c=c-2.625/2.75)*c+0.984375)+e},bounceBoth:function(c,e,b,d){return c<d/2?YAHOO.util.Easing.bounceIn(c*2,0,b,d)*0.5+e:YAHOO.util.Easing.bounceOut(c*2-d,0,b,d)*0.5+b*0.5+e}}; -(function(){var c=function(a,b,d,e){a&&c.superclass.constructor.call(this,a,b,d,e)};c.NAME="Motion";var e=YAHOO.util;YAHOO.extend(c,e.ColorAnim);var b=c.superclass,d=c.prototype;d.patterns.points=/^points$/i;d.setAttribute=function(a,c,d){if(this.patterns.points.test(a)){d=d||"px";b.setAttribute.call(this,"left",c[0],d);b.setAttribute.call(this,"top",c[1],d)}else b.setAttribute.call(this,a,c,d)};d.getAttribute=function(a){return this.patterns.points.test(a)?[b.getAttribute.call(this,"left"),b.getAttribute.call(this, -"top")]:b.getAttribute.call(this,a)};d.doMethod=function(a,c,d){var f=null;if(this.patterns.points.test(a)){c=this.method(this.currentFrame,0,100,this.totalFrames)/100;f=e.Bezier.getPosition(this.runtimeAttributes[a],c)}else f=b.doMethod.call(this,a,c,d);return f};d.setRuntimeAttribute=function(c){if(this.patterns.points.test(c)){var d=this.getEl(),i=this.attributes,j=i.points.control||[],k,l,m;if(j.length>0&&!(j[0]instanceof Array))j=[j];else{var n=[];l=0;for(m=j.length;l<m;++l)n[l]=j[l];j=n}e.Dom.getStyle(d, -"position")=="static"&&e.Dom.setStyle(d,"position","relative");f(i.points.from)?e.Dom.setXY(d,i.points.from):e.Dom.setXY(d,e.Dom.getXY(d));d=this.getAttribute("points");if(f(i.points.to)){k=a.call(this,i.points.to,d);e.Dom.getXY(this.getEl());l=0;for(m=j.length;l<m;++l)j[l]=a.call(this,j[l],d)}else if(f(i.points.by)){k=[d[0]+i.points.by[0],d[1]+i.points.by[1]];l=0;for(m=j.length;l<m;++l)j[l]=[d[0]+j[l][0],d[1]+j[l][1]]}this.runtimeAttributes[c]=[d];j.length>0&&(this.runtimeAttributes[c]=this.runtimeAttributes[c].concat(j)); -this.runtimeAttributes[c][this.runtimeAttributes[c].length]=k}else b.setRuntimeAttribute.call(this,c)};var a=function(a,b){var c=e.Dom.getXY(this.getEl());return a=[a[0]-c[0]+b[0],a[1]-c[1]+b[1]]},f=function(a){return typeof a!=="undefined"};e.Motion=c})(); -(function(){var c=function(a,b,d,e){a&&c.superclass.constructor.call(this,a,b,d,e)};c.NAME="Scroll";var e=YAHOO.util;YAHOO.extend(c,e.ColorAnim);var b=c.superclass,d=c.prototype;d.doMethod=function(a,c,d){var e=null;return e=a=="scroll"?[this.method(this.currentFrame,c[0],d[0]-c[0],this.totalFrames),this.method(this.currentFrame,c[1],d[1]-c[1],this.totalFrames)]:b.doMethod.call(this,a,c,d)};d.getAttribute=function(a){var c=null,c=this.getEl();return c=a=="scroll"?[c.scrollLeft,c.scrollTop]:b.getAttribute.call(this, -a)};d.setAttribute=function(a,c,d){var e=this.getEl();if(a=="scroll"){e.scrollLeft=c[0];e.scrollTop=c[1]}else b.setAttribute.call(this,a,c,d)};e.Scroll=c})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/images/handle.png b/platforms/android/assets/www/lib/ckeditor/plugins/widget/images/handle.png deleted file mode 100644 index ba8cda5b30650babdd9e9b439bf92dd78e7e3425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^{2<K23?xtf=%@rzS^+*GuK)l4S5Z+>Q&R(y%F4>B zs;Uq!kbwq_7Top+>f$X4@(X6LuyOG4sc+bE;L!1t|K@(+14@K=x;Tb#Tu;8Rb9cks z#J94nZHsw$wz2W7VVBS|FgP>!0K<|7o;WsvWX2Z8B?>%jY}0rZj)}3g-PxTm;lP0# v3__VH4l5d8H_c`?|H*MfZyGa?!EHvRt#Zd+?pApQG@rrK)z4*}Q$iB}(WFB8 diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ar.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ar.js deleted file mode 100644 index 02901ca4..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ar",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ca.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ca.js deleted file mode 100644 index bcee2d0a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ca",{move:"Clicar i arrossegar per moure"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cs.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cs.js deleted file mode 100644 index 2f2ab938..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","cs",{move:"Klepněte a táhněte pro přesunutí"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cy.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cy.js deleted file mode 100644 index 19bc34b0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","cy",{move:"Clcio a llusgo i symud"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/de.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/de.js deleted file mode 100644 index 0de3212c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","de",{move:"Zum verschieben anwählen und ziehen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/el.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/el.js deleted file mode 100644 index 9200420f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","el",{move:"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en-gb.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en-gb.js deleted file mode 100644 index af267ba8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","en-gb",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en.js deleted file mode 100644 index 5b1d70a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","en",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/eo.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/eo.js deleted file mode 100644 index eb556143..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","eo",{move:"klaki kaj treni por movi"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/es.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/es.js deleted file mode 100644 index d59696db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","es",{move:"Dar clic y arrastrar para mover"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fa.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fa.js deleted file mode 100644 index cd7b4e08..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fa",{move:"کلیک و کشیدن برای جابجایی"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fi.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fi.js deleted file mode 100644 index cd2fccef..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fi",{move:"Siirrä klikkaamalla ja raahaamalla"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fr.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fr.js deleted file mode 100644 index 4a07790c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fr",{move:"Cliquer et glisser pour déplacer"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/gl.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/gl.js deleted file mode 100644 index 4213bd7a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","gl",{move:"Prema e arrastre para mover"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/he.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/he.js deleted file mode 100644 index aa9754ae..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","he",{move:"לחץ וגרור להזזה"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hr.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hr.js deleted file mode 100644 index c58da39d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","hr",{move:"Klikni i povuci da pomakneš"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hu.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hu.js deleted file mode 100644 index 03305f3b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","hu",{move:"Kattints és húzd a mozgatáshoz"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/it.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/it.js deleted file mode 100644 index d1a714e3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","it",{move:"Fare clic e trascinare per spostare"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ja.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ja.js deleted file mode 100644 index 33cdb9ef..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ja",{move:"ドラッグして移動"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/km.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/km.js deleted file mode 100644 index bc46a96e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","km",{move:"ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ko.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ko.js deleted file mode 100644 index 4bf733aa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ko",{move:"움직이려면 클릭 후 드래그 하세요"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nb.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nb.js deleted file mode 100644 index b5bfd46d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","nb",{move:"Klikk og dra for å flytte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nl.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nl.js deleted file mode 100644 index a5bfea95..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","nl",{move:"Klik en sleep om te verplaatsen"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/no.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/no.js deleted file mode 100644 index 92db9080..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","no",{move:"Klikk og dra for å flytte"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pl.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pl.js deleted file mode 100644 index a51890f2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pl",{move:"Kliknij i przeciągnij, by przenieść."}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt-br.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt-br.js deleted file mode 100644 index e6387da3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pt-br",{move:"Click e arraste para mover"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt.js deleted file mode 100644 index 0a7f1171..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pt",{move:"Clique e arraste para mover"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ru.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ru.js deleted file mode 100644 index e3d4e3e6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ru",{move:"Нажмите и перетащите"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sk.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sk.js deleted file mode 100644 index d26dab0c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sk",{move:"Kliknite a potiahnite pre presunutie"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sl.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sl.js deleted file mode 100644 index f99d4e74..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sl",{move:"Kliknite in povlecite, da premaknete"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sv.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sv.js deleted file mode 100644 index 33f6f126..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sv",{move:"Klicka och drag för att flytta"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tr.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tr.js deleted file mode 100644 index 5f2ca8f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","tr",{move:"Taşımak için, tıklayın ve sürükleyin"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tt.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tt.js deleted file mode 100644 index 1b158207..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","tt",{move:"Күчереп куер өчен басып шудырыгыз"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/uk.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/uk.js deleted file mode 100644 index a07313c8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","uk",{move:"Клікніть і потягніть для переміщення"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/vi.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/vi.js deleted file mode 100644 index 785a5323..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","vi",{move:"Nhấp chuột và kéo để di chuyển"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh-cn.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh-cn.js deleted file mode 100644 index 690512a2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","zh-cn",{move:"点击并拖拽以移动"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh.js deleted file mode 100644 index e683c06c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","zh",{move:"拖曳以移動"}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/widget/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/widget/plugin.js deleted file mode 100644 index a9cc00fb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/widget/plugin.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function o(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};I(this);J(this);this.on("checkWidgets",K);this.editor.on("contentDomInvalidated",this.checkWidgets,this);L(this);M(this);N(this);O(this);P(this)}function k(a,b,c,d,e){var f=a.editor;CKEDITOR.tools.extend(this,d,{editor:f,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({}, -"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:k.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);Q(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes", -this.getClasses());this.dataReady=!0;s(this);this.fire("data",this.data);this.isInited()&&f.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function q(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function R(a,b){a.addCommand(b.name, -{exec:function(){function c(){a.widgets.finalizeCreation(g)}var d=a.widgets.focused;if(d&&d.name==b.name)d.edit();else if(b.insert)b.insert();else if(b.template){var d="function"==typeof b.defaults?b.defaults():b.defaults,d=CKEDITOR.dom.element.createFromHtml(b.template.output(d)),e,f=a.widgets.wrapElement(d,b.name),g=new CKEDITOR.dom.documentFragment(f.getDocument());g.append(f);(e=a.widgets.initOn(d,b))?(d=e.once("edit",function(b){if(b.data.dialog)e.once("dialog",function(b){var b=b.data,d,f;d= -b.once("ok",c,null,null,20);f=b.once("cancel",function(){a.widgets.destroy(e,!0)});b.once("hide",function(){d.removeListener();f.removeListener()})});else c()},null,null,999),e.edit(),d.removeListener()):c()}},refresh:function(a,b){this.setState(l(a.editable(),b.blockLimit)?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF)},context:"div",allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function t(a,b){a.focused= -null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function K(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,e;if(b){for(d in c)b.contains(c[d].wrapper)||this.destroy(c[d],!0);if(a&&a.initOnlyNew)b=this.initOnAll();else{var f=b.find(".cke_widget_wrapper"),b=[];d=0;for(c=f.count();d<c;d++){e=f.getItem(d);var g;if(g=!this.getByElement(e,!0)){a:{g=S;for(var i=e;i=i.getParent();)if(g(i)){g= -!0;break a}g=!1}g=!g}g&&(e.addClass("cke_widget_new"),b.push(this.initOn(e.getFirst(p))))}}a&&(a.focusInited&&1==b.length)&&b[0].focus()}}}function u(a,b,c){if(!c.allowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});(a=d[b])||(d[b]=a=new CKEDITOR.filter(c.allowedContent));return a}function T(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,g,i,h,j;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(v))&&b.push([a]), -!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(j=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;h=0;for(f=d.length;h<f;++h)if(!1===d[h](a))return;for(h=0;h<j;++h)if(f=c[h],i={},g=f[0](a,i))return g instanceof CKEDITOR.htmlParser.element&&(a=g),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(i)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,f[1]]),!1}}}}function l(a,b){return!b||b.equals(a)?null:w(b)?b:l(a,b.getParent())}function x(a){return{tabindex:-1, -contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")}}function y(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),e=a.parent,b=d.getIndex();a.children.length||(b-=1,a.remove());d.children.length||d.remove();return y(e,b,c)}}a.add(c,b)}function v(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]}function p(a){return a.type==CKEDITOR.NODE_ELEMENT&& -a.hasAttribute("data-widget")}function z(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function r(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")}function w(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")}function S(a){return a.hasAttribute("data-cke-temp")}function U(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")}function A(a,b,c){b.focus();a.fire("saveSnapshot"); -a.fire("lockSnapshot",{dontUpdate:!0});c.select();c=b.wrapper.getOuterHtml();b.wrapper.remove();a.widgets.destroy(b,!0);a.execCommand("paste",c);a.fire("unlockSnapshot")}function n(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"), -b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function V(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function W(a,b){return CKEDITOR.tools.trim(b)}function O(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("contentDom",function(){var d=b.editable(),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version||d.isInline()?d:b.document;d.attachListener(e, -"drop",function(c){var d=c.data.$.dataTransfer.getData("text"),e,h;if(d){try{e=JSON.parse(d)}catch(j){return}if("cke-widget"==e.type&&(c.data.preventDefault(),e.editor==b.name&&(h=a.instances[e.id]))){a:if(e=c.data.$,d=b.createRange(),c.data.testRange)d=c.data.testRange;else if(document.caretRangeFromPoint)c=b.document.$.caretRangeFromPoint(e.clientX,e.clientY),d.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),d.collapse(!0);else if(e.rangeParent)d.setStart(CKEDITOR.dom.node(e.rangeParent), -e.rangeOffset),d.collapse(!0);else if(document.body.createTextRange)c=b.document.getBody().$.createTextRange(),c.moveToPoint(e.clientX,e.clientY),e="cke-temp-"+(new Date).getTime(),c.pasteHTML('<span id="'+e+'">​</span>'),c=b.document.getById(e),d.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START),c.remove();else{d=null;break a}d&&(CKEDITOR.env.gecko?setTimeout(A,0,b,h,d):A(b,h,d))}}});CKEDITOR.tools.extend(a,{finder:new c.finder(b,{lookups:{"default":function(a){if(!a.is(CKEDITOR.dtd.$listItem)&&a.is(CKEDITOR.dtd.$block)){for(;a;){if(w(a))return; -a=a.getParent()}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function M(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,e,f;c.attachListener(d,"mousedown",function(c){var b=c.data.getTarget();if(!b.type)return!1;e=a.getByElement(b);f= -0;e&&(e.inline&&b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("data-cke-widget-drag-handler")?f=1:l(e.wrapper,b)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});c.attachListener(d,"mouseup",function(){e&&f&&(f=0,e.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){e&&setTimeout(function(){e.focus();e=null})})});b.on("doubleclick",function(c){var b=a.getByElement(c.data.element);if(b&&!l(b.wrapper,c.data.element))return b.fire("doubleclick",{element:c.data.element})}, -null,null,1)}function N(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e}, -null,null,1)}function P(a){function b(c){a.focused&&B(a.focused,"cut"==c.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function L(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=l(b.editable(),c.data.selection.getStartElement()))&&a.getByElement(c),e=a.widgetHoldingFocusedEditable;if(e){if(e!==d||!e.focusedEditable.equals(c))n(a, -e,null),d&&c&&n(a,d,c)}else d&&c&&n(a,d,c)});b.on("dataReady",function(){C(a).commit()});b.on("blur",function(){var c;(c=a.focused)&&t(a,c);(c=a.widgetHoldingFocusedEditable)&&n(a,c,null)})}function J(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var e=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=e;c[e]=f;b.data.dataValue.forEach(function(c){var b=c.attributes,d;if("data-cke-widget-id"in b){if(b=a.instances[b["data-cke-widget-id"]])d=c.getFirst(v),f.push({wrapper:c,element:d, -widget:b,editables:{}}),"1"!=d.attributes["data-cke-widget-keep-attr"]&&delete d.attributes["data-widget"]}else if("data-cke-widget-editable"in b)return f[f.length-1].editables[b["data-cke-widget-editable"]]=c,!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var a=c[a.data.downcastingSessionId],b,f,g,i,h,j;b=a.shift();){f=b.widget;g=b.element;i=f._.downcastFn&&f._.downcastFn.call(f,g);for(j in b.editables)h=b.editables[j],delete h.attributes.contenteditable, -h.setHtml(f.editables[j].getData());i||(i=g);b.wrapper.replaceWith(i)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function I(a){function b(){c.fire("lockSnapshot");a.checkWidgets({initOnlyNew:!0,focusInited:d});c.fire("unlockSnapshot")}var c=a.editor,d,e;c.on("toHtml",function(c){var b=T(a),e;for(c.data.dataValue.forEach(b.iterator,CKEDITOR.NODE_ELEMENT,!0);e=b.toBeWrapped.pop();){var h=e[0],j=h.parent;j.type==CKEDITOR.NODE_ELEMENT&&j.attributes["data-cke-widget-wrapper"]&& -j.replaceWith(h);a.wrapElement(e[0],e[1])}d=1==c.data.dataValue.children.length&&c.data.dataValue.children[0].type==CKEDITOR.NODE_ELEMENT&&c.data.dataValue.children[0].attributes["data-cke-widget-wrapper"]},null,null,8);c.on("dataReady",function(){if(e)for(var b=a,d=c.editable().find(".cke_widget_wrapper"),i,h,j=0,k=d.count();j<k;++j)i=d.getItem(j),h=i.getFirst(p),h.type==CKEDITOR.NODE_ELEMENT&&h.data("widget")?(h.replace(i),b.wrapElement(h)):i.remove();e=0;a.destroyAll(!0);a.initOnAll()});c.on("loadSnapshot", -function(c){/data-cke-widget/.test(c.data)&&(e=1);a.destroyAll(!0)},null,null,9);c.on("paste",function(a){a.data.dataValue=a.data.dataValue.replace(X,W)});c.on("insertText",b,null,null,999);c.on("insertHtml",b,null,null,999)}function C(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,i;a.editor.fire("lockSnapshot"); -for(f&&(g=a.focused)&&t(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(i=g.editor.checkDirty(),g.setSelected(!1),!i&&g.editor.resetDirty());f&&e&&(i=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!i&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function D(a,b,c){var d=0,b=E(b),e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f], -d=1);d&&a.setData("classes",e)}}function F(a){a.cancel()}function B(a,b){var c=a.editor,d=c.document;if(!d.getById("cke_copybin")){var e=c.blockless||CKEDITOR.env.ie?"span":"div",f=d.createElement(e),g=d.createElement(e),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version;g.setAttributes({id:"cke_copybin","data-cke-temp":"1"});f.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});f.setStyle("ltr"==c.config.contentsLangDirection?"left":"right","-5000px");f.setHtml('<span data-cke-copybin-start="1">​</span>'+ -a.wrapper.getOuterHtml()+'<span data-cke-copybin-end="1">​</span>');c.fire("saveSnapshot");c.fire("lockSnapshot");g.append(f);c.editable().append(g);var i=c.on("selectionChange",F,null,null,0),h=a.repository.on("checkSelection",F,null,null,0);if(e)var j=d.getDocumentElement().$,k=j.scrollTop;d=c.createRange();d.selectNodeContents(f);d.select();e&&(j.scrollTop=k);setTimeout(function(){b||a.focus();g.remove();i.removeListener();h.removeListener();c.fire("unlockSnapshot");if(b){a.repository.del(a);c.fire("saveSnapshot")}}, -100)}}function E(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function G(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function H(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function Y(a){var b=null;a.on("data",function(){var a=this.data.classes,d;if(b!=a){for(d in b)(!a|| -!a[d])&&this.removeClass(d);for(d in a)this.addClass(d);b=a}})}function Z(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(U),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png)"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1", -src:CKEDITOR.tools.transparentImageData,width:m,title:b.lang.widget.move,height:m}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(a.inline)d.on("dragstart",function(c){c.data.$.dataTransfer.setData("text",JSON.stringify({type:"cke-widget",editor:b.name,id:a.id}))});else d.on("mousedown",$,a);a.dragHandlerContainer=c}}function $(){function a(){var a; -for(j.reset();a=g.pop();)a.removeListener();var c=i,b=this.repository.finder;a=this.repository.liner;var d=this.editor,e=this.editor.editable();CKEDITOR.tools.isEmpty(a.visible)||(c=b.getRange(c[0]),this.focus(),d.fire("saveSnapshot"),d.fire("lockSnapshot",{dontUpdate:1}),d.getSelection().reset(),e.insertElementIntoRange(this.wrapper,c),this.focus(),d.fire("unlockSnapshot"),d.fire("saveSnapshot"));e.removeClass("cke_widget_dragging");a.hideVisible()}var b=this.repository.finder,c=this.repository.locator, -d=this.repository.liner,e=this.editor,f=e.editable(),g=[],i=[],h=b.greedySearch(),j=CKEDITOR.tools.eventsBuffer(50,function(){k=c.locate(h);i=c.sort(l,1);i.length&&(d.prepare(h,k),d.placeLine(i[0]),d.cleanup())}),k,l;f.addClass("cke_widget_dragging");g.push(f.on("mousemove",function(a){l=a.data.$.clientY;j.input()}));g.push(e.document.once("mouseup",a,this));g.push(CKEDITOR.document.once("mouseup",a,this))}function aa(a){var b,c,d=a.editables;a.editables={};if(a.editables)for(b in d)c=d[b],a.initEditable(b, -"string"==typeof c?{selector:c}:c)}function ba(a){if(a.mask){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}}function ca(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function Q(a,b){da(a);ca(a);aa(a);ba(a);Z(a);Y(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart", -function(c){var b=c.data.getTarget();!l(a,b)&&(!a.inline||!(b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("data-cke-widget-drag-handler")))&&c.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){B(a,b==CKEDITOR.CTRL+88);return}if(b in ea||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&& -b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function da(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function s(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}var m=15;CKEDITOR.plugins.add("widget",{lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,ko,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",requires:"lineutils,clipboard",onLoad:function(){CKEDITOR.addCss(".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover>.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused>.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:"+ -m+"px;height:0;left:-9999px;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover>.cke_widget_drag_handler_container{height:"+m+"px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:"+m+"px;height:"+m+"px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}")},beforeInit:function(a){a.widgets= -new o(a)},afterInit:function(a){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});V(a)}});o.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(a,b){b=CKEDITOR.tools.prototypedCopy(b);b.name=a;b._=b._||{};this.editor.fire("widgetDefinition",b);b.template&&(b.template=new CKEDITOR.template(b.template));R(this.editor,b);var c=b,d=c.upcast;if(d)if("string"==typeof d)for(d= -d.split(",");d.length;)this._.upcasts.push([c.upcasts[d.pop()],c.name]);else this._.upcasts.push([d,c.name]);return this.registered[a]=b},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=C(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=r;b=a.next();)c.select(this.getByElement(b)); -c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,c=b.createRange(),d;if(!(d=c.moveToClosestEditablePosition(a.wrapper,!0)))d=c.moveToClosestEditablePosition(a.wrapper,!1);d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&n(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a){var b= -this.instances,c,d;for(d in b)c=b[d],this.destroy(c,a)},finalizeCreation:function(a){if((a=a.getFirst())&&r(a))this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus()},getByElement:function(){var a={div:1,span:1};return function(b,c){if(!b)return null;var d=b.is(a)&&b.data("cke-widget-id");if(!c&&!d){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(d=b.is(a)&&b.data("cke-widget-id")))}return this.instances[d]||null}}(),initOn:function(a,b,c){b? -"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new k(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){for(var a=(a||this.editor.editable()).find(".cke_widget_new"),b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(p)))&&b.push(c);return b},parseElementClasses:function(a){if(!a)return null;for(var a= -CKEDITOR.tools.trim(a).split(/\s+/),b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,e;if(a instanceof CKEDITOR.dom.element){d=this.registered[b||a.data("widget")];if(!d)return null;if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);b&&a.data("widget",b);e=z(d,a.getName());c=new CKEDITOR.dom.element(e? -"span":"div");c.setAttributes(x(e));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){d=this.registered[b||a.attributes["data-widget"]];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&&c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]= -b);e=z(d,a.name);c=new CKEDITOR.htmlParser.element(e?"span":"div",x(e));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var f;d&&(f=a.getIndex(),a.remove());c.add(a);d&&y(d,f,c)}return c},_tests_getNestedEditable:l,_tests_createEditableFilter:u};CKEDITOR.event.implementOn(o.prototype);k.prototype={addClass:function(a){this.element.addClass(a)},applyStyle:function(a){D(this,a,1)},checkStyleActive:function(a){var a=E(a),b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1; -return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a];c.removeListener("focus",H);c.removeListener("blur", -G);this.editor.focusManager.remove(c);b||(c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable","data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var d,e;!1!==b.fire("dialog",a)&&(d=a.on("show",function(){a.setupContent(b)}),e=a.on("ok",function(){var d,e=b.on("data", -function(a){d=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);e.removeListener();d&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){d.removeListener();e.removeListener()}))});return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var c=this.wrapper.findOne(b.selector);return c&&c.is(CKEDITOR.dtd.$editable)? -(c=new q(this.editor,c,{filter:u.call(this.repository,this.name,a,b)}),this.editables[a]=c,c.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":c.enterMode}),c.filter&&c.data("cke-filter",c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name",b.pathName),this.editor.focusManager.add(c),c.on("focus",H,this),CKEDITOR.env.ie&&c.on("blur",G,this),c.setData(c.getHtml()),!0):!1},isInited:function(){return!(!this.wrapper|| -!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a)},removeStyle:function(a){D(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=e[a])}d&&this.dataReady&&(s(this),this.fire("data", -c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-m};if(!c||!(b.x==c.x&&b.y==c.y))c=a.checkDirty(),a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+ -"px",left:b.x+"px"}),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b}};CKEDITOR.event.implementOn(k.prototype);q.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(), -filter:this.filter,enterMode:this.enterMode})}});var X=RegExp('^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?</span>([\\s\\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?</span>(?:</(?:div|span)>)?(?:</(?:div|span)>)?$'),ea={37:1,38:1,39:1,40:1,8:1,46:1};(function(){function a(){}function b(a,b,e){return!e||!this.checkElement(a)?!1:(a=e.widgets.getByElement(a,!0))&&a.checkStyleActive(this)} -CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget},apply:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.applyStyle(this)},remove:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return!(b instanceof CKEDITOR.editor)?!1:this.checkElement(a.lastElement)}, -checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return!r(a)?!1:(a=a.getFirst(p))&&a.data("widget")==this.widget},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;var a=a.widgets.registered[this.widget],b,e={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;e[a.styleableElements]={classes:b,propertiesOnly:!0};return e}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this): -null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})})();CKEDITOR.plugins.widget=k;k.repository=o;k.nestedEditable=q})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/LICENSE.md b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/LICENSE.md deleted file mode 100644 index 6096de23..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor WSC Plugin** -Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html deleted file mode 100644 index 8e0a10df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html +++ /dev/null @@ -1,66 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license ---> -<html> -<head> - <title></title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <script type="text/javascript"> - -function gup( name ) -{ - name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; - var regexS = '[\\?&]' + name + '=([^&#]*)' ; - var regex = new RegExp( regexS ) ; - var results = regex.exec( window.location.href ) ; - - if ( results ) - return results[ 1 ] ; - else - return '' ; -} - -var interval; - -function sendData2Master() -{ - var destination = window.parent.parent ; - try - { - if ( destination.XDTMaster ) - { - var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; - window.clearInterval( interval ) ; - } - } - catch (e) {} -} - -function OnMessage (event) { - var message = event.data; - var destination = window.parent.parent; - destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ; -} - -function listenPostMessage() { - if (window.addEventListener) { // all browsers except IE before version 9 - window.addEventListener ("message", OnMessage, false); - }else { - if (window.attachEvent) { // IE before version 9 - window.attachEvent("onmessage", OnMessage); - } - } -} - -function onLoad() -{ - interval = window.setInterval( sendData2Master, 100 ); - listenPostMessage(); -} - -</script> -</head> -<body onload="onLoad()"><p></p></body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html deleted file mode 100644 index 61203e03..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +++ /dev/null @@ -1,52 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license ---> -<html> -<head> - <title></title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <script type="text/javascript"> - -function doLoadScript( url ) -{ - if ( !url ) - return false ; - - var s = document.createElement( "script" ) ; - s.type = "text/javascript" ; - s.src = url ; - document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; - - return true ; -} - -var opener; -function tryLoad() -{ - opener = window.parent; - - // get access to global parameters - var oParams = window.opener.oldFramesetPageParams; - - // make frameset rows string prepare - var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; - document.getElementById( 'itFrameset' ).rows = sFramesetRows ; - - // dynamic including init frames and crossdomain transport code - // from config sproxy_js_frameset url - var addScriptUrl = oParams.sproxy_js_frameset ; - doLoadScript( addScriptUrl ) ; -} - - </script> -</head> - -<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> - <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> -</frameset> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css deleted file mode 100644 index da2f1743..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ - -html, body -{ - background-color: transparent; - margin: 0px; - padding: 0px; -} - -body -{ - padding: 10px; -} - -body, td, input, select, textarea -{ - font-size: 11px; - font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; -} - -.midtext -{ - padding:0px; - margin:10px; -} - -.midtext p -{ - padding:0px; - margin:10px; -} - -.Button -{ - border: #737357 1px solid; - color: #3b3b1f; - background-color: #c7c78f; -} - -.PopupTabArea -{ - color: #737357; - background-color: #e3e3c7; -} - -.PopupTitleBorder -{ - border-bottom: #d5d59d 1px solid; -} -.PopupTabEmptyArea -{ - padding-left: 10px; - border-bottom: #d5d59d 1px solid; -} - -.PopupTab, .PopupTabSelected -{ - border-right: #d5d59d 1px solid; - border-top: #d5d59d 1px solid; - border-left: #d5d59d 1px solid; - padding: 3px 5px 3px 5px; - color: #737357; -} - -.PopupTab -{ - margin-top: 1px; - border-bottom: #d5d59d 1px solid; - cursor: pointer; -} - -.PopupTabSelected -{ - font-weight: bold; - cursor: default; - padding-top: 4px; - border-bottom: #f1f1e3 1px solid; - background-color: #f1f1e3; -} diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js deleted file mode 100644 index 443145c9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; -if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"== -b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}, -misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(), -a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null, -text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()|| -b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"<iframe id="+a.iframeNumber+"_"+b+' frameborder="0" allowtransparency="1" style="width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"></iframe>'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d); -d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('<!DOCTYPE html><html><head><meta charset="UTF-8"><title>iframe</title><style>html,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}</style></head><body><div id="content" class="main-box"></div><iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe><script>(function(window) {var ManagerPostMessage = function() {var _init = function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd = function(o) {var str,type = Object.prototype.toString,fn = o.fn || null,id = o.id || "",target = o.target || window,message = o.message || { "id": id };if (o.message && type.call(o.message) == "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] = id;message = o.message;};str = JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp = new ManagerPostMessage;var appString = (function(){var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag = document.createElement("script");scriptTag.type = "text/javascript";callback ? callback : callback = function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange = function() {if (scriptTag.readyState == "loaded" ||scriptTag.readyState == "complete") {scriptTag.onreadystatechange = null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload = function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src = src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload = function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);<\/script></body></html>'); -d.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height= -"240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,f,g;a.setIframe(d,c);var e=function(e){e=e||window.event;e.data.getTarget().is("a")&&c!=b._.currentTabId&&(c=b._.currentTabId,d=b._.contents[c].Content,f=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?u(a.targetFromFrame[f],a.cmd[c]):(a.setIframe(d,c),g=document.getElementById(f),a.targetFromFrame[f]=g.contentWindow))};b.parts.tabs.removeListener("click",e);b.parts.tabs.on("click",e)};a.buildSelectLang= -function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select"),a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang=function(b,c){var d=document.getElementById("wscLang"+c),f=document.createDocumentFragment(), -g,e,i=[];if(0===d.options.length){for(g in b)i.push([g,b[g]]);i.sort();for(var k=0;k<i.length;k++)g=document.createElement("option"),g.setAttribute("value",i[k][1]),e=document.createTextNode(i[k][0]),g.appendChild(e),i[k][1]==a.selectingLang&&g.setAttribute("selected","selected"),f.appendChild(g);d.appendChild(f)}};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];a.selectNode.synonyms.clear();for(var c=0;c<b.length;c++)a.selectNode.synonyms.add(b[c],b[c]);a.selectNode.synonyms.getInputElement().$.firstChild.selected= -!0;a.textNode.Thesaurus.setValue(a.selectNode.synonyms.getInputElement().getValue())};var r=function(a){var c=document,d=a.target||c.body,f=a.id||"overlayBlock",e=a.opacity||"0.9",a=a.background||"#f1f1f1",h=c.getElementById(f),i=h||c.createElement("div");i.style.cssText="position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:"+a+";opacity: "+e+";filter: alpha(opacity="+100*e+");display: none;";i.id=f;h||d.appendChild(i);return{setDisable:function(){i.style.display= -"none"},setEnable:function(){i.style.display="block"}}},B=function(b,c,d){var f=new CKEDITOR.dom.element("div"),e=new CKEDITOR.dom.element("input"),h=new CKEDITOR.dom.element("label"),i="wscGrammerSuggest"+b+"_"+c;f.addClass("cke_dialog_ui_input_radio");f.setAttribute("role","presentation");f.setStyles({width:"97%",padding:"5px","white-space":"normal"});e.setAttributes({type:"radio",value:c,name:"wscGrammerSuggest",id:i});e.setStyles({"float":"left"});e.on("click",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())}); -d&&e.setAttribute("checked",!0);e.addClass("cke_dialog_ui_radio_input");h.appendText(b);h.setAttribute("for",i);h.setStyles({display:"block","line-height":"16px","margin-left":"18px","white-space":"normal"});f.append(e);f.append(h);return f},v=function(a){a=a||"true";null!==a&&"false"==a&&m()},n=function(b){var c=new y(b),b="wscLang"+a.dialog.getParentEditor().name,b=document.getElementById(b),d=a.iframeNumber+"_"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name); -w[c.getCurrentLangGroup(a.selectingLang)]();v(a.show_grammar);b.onchange=function(){w[c.getCurrentLangGroup(this.value)]();v(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;e.postMessage.send({message:{changeLang:a.selectingLang,text:a.dataTemp},target:a.targetFromFrame[d],id:"selectionLang_outer__page"})}},C=function(b){if("no_any_suggestions"==b){b="No suggestions";a.LocalizationButton.ChangeTo.instance.disable();a.LocalizationButton.ChangeAll.instance.disable();var c=function(b){b= -a.LocalizationButton[b].instance;b.getElement().hasClass("cke_disabled")?b.getElement().setStyle("color","#a0a0a0"):b.disable()};c("ChangeTo");c("ChangeAll")}else a.LocalizationButton.ChangeTo.instance.enable(),a.LocalizationButton.ChangeAll.instance.enable(),a.LocalizationButton.ChangeTo.instance.getElement().setStyle("color","#333"),a.LocalizationButton.ChangeAll.instance.getElement().setStyle("color","#333");return b},E={iframeOnload:function(){a.div_overlay.setEnable();var b=a.dialog._.currentTabId; -u(a.targetFromFrame[a.iframeNumber+"_"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();s();n(a.langList);var c=C(b.word),d="";c instanceof Array&&(c=b.word[0]);d=c=c.split(",");q.clear();a.textNode.SpellTab.setValue(d[0]);for(b=0;b<d.length;b++)q.add(d[b],d[b]);l();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml("");a.textNode.GrammTab.reset(); -a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml("");a.textNodeInfo.GrammTab.getElement().setText(b.info);for(var b=b.grammSuggest,c=b.length,d=!0,f=0;f<c;f++)a.grammerSuggest.getElement().append(B(b[f],b[f],d)),d=!1;l();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();a.selectNode.categories.clear();for(var c in b)a.selectNode.categories.add(c,c);b=a.selectNode.categories.getInputElement().getChildren().$[0].value; -a.selectNode.categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(b);l();a.div_overlay.setDisable()},finish:function(b){delete b.id;D();b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show();a.div_overlay.setDisable()},settext:function(b){delete b.id;a.dialog.getParentEditor().getCommand("checkspell");var c=a.dialog.getParentEditor();try{c.focus()}catch(d){}c.setData(b.text, -function(){a.dataTemp="";c.unlockSelection();c.fire("saveSnapshot");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=b.currentLang;window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);z(a.LocalizationButton);A(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+ -"_"+a.dialog._.currentTabId],id:"options_outer__page"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=b.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;if(a.bnr=b.bannerId){a.setHeightBannerFrame();var d=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,"banner").getElement().setHtml(d)}else a.setHeightFrame();"undefined"==c&&(a.userDictionaryName?(c=a.userDictionaryName,d={osp:e.cookie.get("osp"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids, -id:"options_dic_send",udnCmd:"create"},e.postMessage.send({message:d,target:a.targetFromFrame[void 0]})):c="");e.cookie.set("osp",b.DefOptions.osp);e.cookie.set("udn",c);e.cookie.set("cust_dic_ids",b.DefOptions.cust_dic_ids);e.postMessage.send({id:"giveOptions"})},options_dic_send:function(){var b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:e.cookie.get("udnCmd")};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+ -a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},setOptionsConfirmF:function(){},setOptionsConfirmT:function(){j.setValue("")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){n(a.langList)}},x=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)E[a.id](a)},u=function(b,c,d,f){c=c||CKEDITOR.config.wsc_cmd;d=d||a.dataTemp;e.postMessage.send({message:{customerId:a.wsc_customerId, -text:d,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,udn:a.userDictionaryName,slang:a.selectingLang,reset_suggest:f||!1},target:b,id:"data_outer__page"});a.div_overlay.setEnable()},w={superset:function(){a.dialog.showPage("Thesaurus");a.dialog.showPage("GrammTab");o()},usual:function(){t();m();o()},rtl:function(){t();m();o()}},F=function(b){var c=new function(a){var b={};return{getCmdByTab:function(c){for(var e in a)b[a[e]]=e;return b[c]}}}(a.cmd);b.selectPage(c.getCmdByTab(CKEDITOR.config.wsc_cmd)); -a.sendData(b)},t=function(){a.dialog.hidePage("Thesaurus")},m=function(){a.dialog.hidePage("GrammTab")},o=function(){a.dialog.showPage("SpellTab")},l=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show()},D=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute", -left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h=d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)},s=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId, -"BlockFinishChecking").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h= -d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)};CKEDITOR.dialog.add("checkspell",function(b){var c=function(){this.getElement().focus();a.div_overlay.setEnable();var c=a.dialog._.currentTabId,f=a.iframeNumber+"_"+c,g=a.textNode[c].getValue(),h=this.getElement().getAttribute("title-cmd");e.postMessage.send({message:{cmd:h,tabId:c,new_word:g},target:a.targetFromFrame[f],id:"cmd_outer__page"});("ChangeTo"==h||"ChangeAll"==h)&&b.fire("saveSnapshot");"FinishChecking"==h&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())}; -return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:560,minHeight:444,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;t();m();o()},onShow:function(){b.lockSelection(b.getSelection());a.TextAreaNumber="cke_textarea_"+CKEDITOR.currentInstance.name;e.postMessage.init(x);a.dataTemp=CKEDITOR.currentInstance.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds; -a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var c="file:"==document.location.protocol?"http:":document.location.protocol;CKEDITOR.scriptLoader.load(b.config.wsc_customLoaderScript||c+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.wsc_customerId+"&cmd=script&doc=wsc&schema=22",function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost, -a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path); -a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+"dialogs/tmp.html";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode);a.selectingLang=a.currentLang;a.div_overlay=new r({opacity:"1",background:"#fff url("+a.loadIcon+") no-repeat 50% 50%",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle("width","97%");d.getElementsByTag("DIV").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name)); -a.div_overlay_no_check=new r({opacity:"1",id:"no_check_over",background:"#fff url("+a.loadIconEmptyEditor+") no-repeat 50% 50%",target:a.OverlayPlace});c&&(F(a.dialog),a.dialog.setupContent(a.dialog))})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,f=b.scayt;b.unlockSelection();c&&(f&&c.state[b.name]&&f.setMarkupPaused)&&f.setMarkupPaused(!1);a.dataTemp="";e.postMessage.unbindHandler(x)},contents:[{id:"SpellTab",label:"SpellChecker",accessKey:"S",elements:[{type:"html",id:"banner", -label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+ -":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance=this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:"block", -position:"absolute",left:"-9999px"})}},{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){q= -this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"],children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button", -id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord",label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, -title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right",widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this}, -onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus(); -"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src= -a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab", -label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal", -labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"<div style='min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'></div>",onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox", -children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%", -children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking", -title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;", -children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}},{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms= -this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}, -{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox", -id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking", -style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});var p=null;CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udnCmd",g?g:"ignore"); -"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", -html:"<div></div>",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", -labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", -id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= -!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, -onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove", -title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"<div>"+a.LocalizationComing.OptionsTextIntro+"</div>",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}], -buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers= -b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords=b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){e.postMessage.init(i);var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked", -!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked",!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()? -0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){e.postMessage.unbindHandler(i);if(p)try{p.focus()}catch(a){}}}}); -CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&&d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){if("checkspell"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new r({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame()); -a.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js b/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js deleted file mode 100644 index 10487d16..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| -f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", -"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='<textarea style="display: none" id="'+g+'" rows="10" cols="40"> </textarea><div id="'+h+'" style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;"></div><iframe src="" style="width:100%;background-color:#f1f1e3;" frameborder="0" name="'+d+'" id="'+d+'" allowtransparency="1"></iframe>', -l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"</p>");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", -"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", -{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); -CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/plugins/xml/plugin.js b/platforms/android/assets/www/lib/ckeditor/plugins/xml/plugin.js deleted file mode 100644 index 239acc28..00000000 --- a/platforms/android/assets/www/lib/ckeditor/plugins/xml/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("xml",{});CKEDITOR.xml=function(c){var a=null;if("object"==typeof c)a=c;else if(c=(c||"").replace(/&nbsp;/g," "),"ActiveXObject"in window){try{a=new ActiveXObject("MSXML2.DOMDocument")}catch(b){try{a=new ActiveXObject("Microsoft.XmlDom")}catch(d){}}a&&(a.async=!1,a.resolveExternals=!1,a.validateOnParse=!1,a.loadXML(c))}else window.DOMParser&&(a=(new DOMParser).parseFromString(c,"text/xml"));this.baseXml=a};CKEDITOR.xml.prototype={selectSingleNode:function(c,a){var b= -this.baseXml;if(a||(a=b)){if("selectSingleNode"in a)return a.selectSingleNode(c);if(b.evaluate)return(b=b.evaluate(c,a,null,9,null))&&b.singleNodeValue||null}return null},selectNodes:function(c,a){var b=this.baseXml,d=[];if(a||(a=b)){if("selectNodes"in a)return a.selectNodes(c);if(b.evaluate&&(b=b.evaluate(c,a,null,5,null)))for(var e;e=b.iterateNext();)d.push(e)}return d},getInnerXml:function(c,a){var b=this.selectSingleNode(c,a),d=[];if(b)for(b=b.firstChild;b;)b.xml?d.push(b.xml):window.XMLSerializer&& -d.push((new XMLSerializer).serializeToString(b)),b=b.nextSibling;return d.length?d.join(""):null}}})(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/samples/ajax.html b/platforms/android/assets/www/lib/ckeditor/samples/ajax.html deleted file mode 100644 index 59333eb1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/ajax.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Ajax &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - - var editor, html = ''; - - function createEditor() { - if ( editor ) - return; - - // Create a new editor inside the <div id="editor">, setting its value to html - var config = {}; - editor = CKEDITOR.appendTo( 'editor', config, html ); - } - - function removeEditor() { - if ( !editor ) - return; - - // Retrieve the editor contents. In an Ajax application, this data would be - // sent to the server or used in any other way. - document.getElementById( 'editorcontents' ).innerHTML = html = editor.getData(); - document.getElementById( 'contents' ).style.display = ''; - - // Destroy the editor. - editor.destroy(); - editor = null; - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Create and Destroy Editor Instances for Ajax Applications - </h1> - <div class="description"> - <p> - This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing - area will be displayed in a <code>&lt;div&gt;</code> element. - </p> - <p> - For details of how to create this setup check the source code of this sample page - for JavaScript code responsible for the creation and destruction of a CKEditor instance. - </p> - </div> - <p>Click the buttons to create and remove a CKEditor instance.</p> - <p> - <input onclick="createEditor();" type="button" value="Create Editor"> - <input onclick="removeEditor();" type="button" value="Remove Editor"> - </p> - <!-- This div will hold the editor. --> - <div id="editor"> - </div> - <div id="contents" style="display: none"> - <p> - Edited Contents: - </p> - <!-- This div will be used to display the editor contents. --> - <div id="editorcontents"> - </div> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/api.html b/platforms/android/assets/www/lib/ckeditor/samples/api.html deleted file mode 100644 index a957eed0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/api.html +++ /dev/null @@ -1,207 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>API Usage &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <script> - -// The instanceReady event is fired, when an instance of CKEditor has finished -// its initialization. -CKEDITOR.on( 'instanceReady', function( ev ) { - // Show the editor name and description in the browser status bar. - document.getElementById( 'eMessage' ).innerHTML = 'Instance <code>' + ev.editor.name + '<\/code> loaded.'; - - // Show this sample buttons. - document.getElementById( 'eButtons' ).style.display = 'block'; -}); - -function InsertHTML() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'htmlArea' ).value; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Insert HTML code. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml - editor.insertHtml( value ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function InsertText() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'txtArea' ).value; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Insert as plain text. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText - editor.insertText( value ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function SetContents() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'htmlArea' ).value; - - // Set editor contents (replace current contents). - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData - editor.setData( value ); -} - -function GetContents() { - // Get the editor instance that you want to interact with. - var editor = CKEDITOR.instances.editor1; - - // Get editor contents - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData - alert( editor.getData() ); -} - -function ExecuteCommand( commandName ) { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Execute the command. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand - editor.execCommand( commandName ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function CheckDirty() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - // Checks whether the current editor contents present changes when compared - // to the contents loaded into the editor at startup - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty - alert( editor.checkDirty() ); -} - -function ResetDirty() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - // Resets the "dirty state" of the editor (see CheckDirty()) - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-resetDirty - editor.resetDirty(); - alert( 'The "IsDirty" status has been reset' ); -} - -function Focus() { - CKEDITOR.instances.editor1.focus(); -} - -function onFocus() { - document.getElementById( 'eMessage' ).innerHTML = '<b>' + this.name + ' is focused </b>'; -} - -function onBlur() { - document.getElementById( 'eMessage' ).innerHTML = this.name + ' lost focus'; -} - - </script> - -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Using CKEditor JavaScript API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor">CKEditor JavaScript API</a> - to interact with the editor at runtime. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - - <!-- This <div> holds alert messages to be display in the sample page. --> - <div id="alerts"> - <noscript> - <p> - <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript - support, like yours, you should still see the contents (HTML data) and you should - be able to edit it normally, without a rich editor interface. - </p> - </noscript> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <textarea cols="100" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - - <script> - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor1', { - on: { - focus: onFocus, - blur: onBlur, - - // Check for availability of corresponding plugins. - pluginsLoaded: function( evt ) { - var doc = CKEDITOR.document, ed = evt.editor; - if ( !ed.getCommand( 'bold' ) ) - doc.getById( 'exec-bold' ).hide(); - if ( !ed.getCommand( 'link' ) ) - doc.getById( 'exec-link' ).hide(); - } - } - }); - </script> - - <p id="eMessage"> - </p> - - <div id="eButtons" style="display: none"> - <input id="exec-bold" onclick="ExecuteCommand('bold');" type="button" value="Execute &quot;bold&quot; Command"> - <input id="exec-link" onclick="ExecuteCommand('link');" type="button" value="Execute &quot;link&quot; Command"> - <input onclick="Focus();" type="button" value="Focus"> - <br><br> - <input onclick="InsertHTML();" type="button" value="Insert HTML"> - <input onclick="SetContents();" type="button" value="Set Editor Contents"> - <input onclick="GetContents();" type="button" value="Get Editor Contents (HTML)"> - <br> - <textarea cols="100" id="htmlArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML code.&lt;/p&gt;</textarea> - <br> - <br> - <input onclick="InsertText();" type="button" value="Insert Text"> - <br> - <textarea cols="100" id="txtArea" rows="3"> First line with some leading whitespaces. - -Second line of text preceded by two line breaks.</textarea> - <br> - <br> - <input onclick="CheckDirty();" type="button" value="checkDirty()"> - <input onclick="ResetDirty();" type="button" value="resetDirty()"> - </div> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/appendto.html b/platforms/android/assets/www/lib/ckeditor/samples/appendto.html deleted file mode 100644 index b8467702..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/appendto.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Append To Page Element Using JavaScript Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Append To Page Element Using JavaScript Code - </h1> - <div id="section1"> - <div class="description"> - <p> - The <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-appendTo">CKEDITOR.appendTo()</a></code> method serves to to place editors inside existing DOM elements. Unlike <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-replace">CKEDITOR.replace()</a></code>, - a target container to be replaced is no longer necessary. A new editor - instance is inserted directly wherever it is desired. - </p> -<pre class="samples">CKEDITOR.appendTo( '<em>container_id</em>', - { /* Configuration options to be used. */ } - 'Editor content to be used.' -);</pre> - </div> - <script> - - // This call can be placed at any point after the - // DOM element to append CKEditor to or inside the <head><script> - // in a window.onload event handler. - - // Append a CKEditor instance using the default configuration and the - // provided content to the <div> element of ID "section1". - CKEDITOR.appendTo( 'section1', - null, - '<p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>' - ); - - </script> - </div> - <br> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/assets/inlineall/logo.png b/platforms/android/assets/www/lib/ckeditor/samples/assets/inlineall/logo.png deleted file mode 100644 index b4d5979e3451d76d72e8b9337ee208d7275abb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4283 zcmV;s5Jc~ZP)<h;3K|Lk000e1NJLTq006cC002J-1^@s6O;0iu000nzNkl<Zc-rlq z33O9c8pp#XOMz0^WRYr7P*5sH#RaTr0T;9=Mvtg~qgHW*IO0s*up*9jV6ZBqV_i<q znK^nK&KWB(tQ9&4l&u&_7rLcs)4gf(nl5QtV7~e8%YEt1>w9gs(u{NOIseln@4dWe ze(%rsefPUB8UWC6asArF|0i&9u(`N6*j!v3Y%Z=|2D>lD?0g|oo87SDhHOjXEYx*| zdcCjj!M{wdJ_lQCw1v;h6XI^mwItu1V=>%x#sW8HTi}M%^)Sm&57+%t2iIoRrE##i zLLTfzg+lbgLLo7>z?LyT-wJc{tS~3H0dCG|04;(&8^Ml7u&+m`XPzQp*TPjNEHNBx zu8;!z{?fKcozbpeS|X%9Tr3E2#RA-4D8PcVR)|5cZ%3$aL8z77dIo}h4T3%GWL+W$ zo2yU3*4ZHZ8FOpgN^?`{Gv!St6g*{Wg2zf5;gOO?SX?B)!a^I&N3iE2)N>H(n-OX) zLOmOyjy8C@^|X`3v1>9o*jyJK>{T^wF|SrTl3%H6G3YCsVKwSSb2B`PP%lTQpFpS| zMW~5e--m7;i%{Q*ZhfnQTVIc0&m^%mf;}C<z8b-vdZGq6*j&91_Bx>>dV|%ef6wAb zd%Mm7>rk)Pw!&-GEugPzftM<p;dum`xb>5zc6iL#2pERI0|@oP0xO8IHRIOmA&BVK z5Our;t~gc|$HC?bD%kG}5c!GFu_D>pp1RTM6gFF(kkrry@7K3MB0~LUtpom0(+a;s zs9Cpun!5E;bnAzTTyA|2y7jz#SHd_S6UTUj{yE(KEP}r%uc6be5$dZE>Zu6zmB*@K zN@jI32b(J>V8>&;{J!8!{-UuR{)*Znv_rDZ2?#fQU}=N(2)5|f2=!WonuH<5t)D}v zSC&z?MrfDNgz>2o0Y0p1hOg^dVKch>+A=%H#~UWQf?E@?s|*}$uAqROV09*cWAA_z zg!(gt`V)lu&(y6qFmC<(YL{ETj9|ZjZv7jYFg{b(2uTR=HaxDR?OYd#zpZz;6UN)K z>mjYdA-;YSy0+xjBGgB#;quHXm~f;zl7r0^Fxcx6$gdFW&xu>(<Bt&PjR^H0iCZJo zZzI$R)UDSb)T_{~H)5>)gW!ZbhbPFVTRUJ&4aVOXn!JeGZfk>+%^e=G^&EUm#*-L_ zlZ5d~1Ur&~JsH8CbhvT_2b(Kkus=YUzo2gYF+SdeV1H=obn7<|;*ZdEe`s{VX#~0T z!hhT#o1EuiI|BYXI=E88_^QbjhTMm7HJdO#g!{}sRofYYP`93Zq!K0`Hm7p1xdH|| zvB4>Pj!=J!P?Lo5Pc&hC7opyO%4NcfhI1F-FgozZ`1-SD-Iw>s4C6ff+jRZ{oW%>` zGYnV$g4%-d_ot|3xIal4BN?dCtzp7pvx$Sv6)@PV>mA8b!nlbhjPKEekwEQ0hu+=P z4sRor&zF;!TD`odG{dOFZI$TkO5^!LtA|@pI$Qx04w+%xp~`3uHdjDkFRyKl+h}bA zrScvbX&8d6rU|3Gy!T*{0QVx;ccc625c02RB}A<sL@Mts!;657wIzZF)Dscv2|t@* z{K0ZP2b(J(u*vlJTNX!Wd5<QHq`XJQ7L2di^4>CZYaI<iq<)aQ5Y&VAcDEB3VCXRy z;Z~cBAqgWHTkBh038NTWyWIM+pUYv~zsu4%*jxcm(5$U>WGI#QDm%`@P6Rfd&M=bl z-s7|%gt+yhLYwH;Bw;+&(gEM$1ws-=5?2$rNqJA!58_T3Gwn_=W2nQrHGvx4nt%-) zY_5R8US8FjC@=55TGax(5NdP#dC{#&KgcqsAB64RyA8qq62lMzGl{Jq!?@Z`lE&7K zF8v@<dGB3Qqv+ZT40RrEJ^o-Bf^C8^2TU;>Y_5R7e!Q|Jnz-~jTHYgWP5MDTu6M=R zFPYJ;nS^n%LO;lBbcRt1K~@&o#OJRgz+Gk-F=1SEx=!5wj!|HscDeP~3<P_>F*#7M zZ=E}jl@67FvY|kxEV?a0b_`KE-6vgP8><xA`)SGRNt-{?p}<RNQ5rv_rN<{QuSKBJ z>0eD>tIv8x)>O3!Z!vBy^@EVQ^_Li8NC_ib-jn)4$O3{G{7c5Va=W{G?|4(YSP{AL zRIR%oge~upP~-?ErzBw%V{3HlvBa%2O5xH2MnjOmCO{h%VD3(_K7ySjgE~Um)`wuH z)7O$@`;vW9E;86rvj5Jl^mD|bY`qG0d{t{2Nf=*a`awu}?-Yg;2N6)ot;G<ez?Cq{ z%X<e9(n<_nq=a!vo(uL*@crbIF(hI9M{SF^oee=mw?2Si?>9n3x-mRJuvy@2)RDC^ zD5L1>>3)Kpz#M0!@261!Ti1)=D1jYC;nv7pTmq{voEw;n&L&-ay$be{@)kYYy(g9T z{%&o9`i=|kgi$K*c`Wy$3kXQ}9vL5E=pvQ(QfplB-hr^oYu5Tg7x*jl>OI_g^Z_G+ zT>_(iDp}zx*eanxN)KTK3weqUV0R03AA_x=Py##sqJaHKbz3BHX+7-+AqnG(vL;xA zkdpBVK4;5&YRkR$3r?_~y8t&~Qb-cU8!!wZ&-da5;_e5b<-O^d72<oRRM@Fo6R4?M z|3ttpO7#=$cm}uxFQHbG8rbo&e+{CPj^|*jf*mV;o?c&Qu+rRQ`YnPjFYnc%V}FT> z<e~x_+?}t!+>3-Du{jnI<bPsZE+vfX%Ul%@U9QDrhLMCIInC{&y1I2Sgzqaf`3bhs z%Y@Hgu;ox|)s7DW*ikf2w#nkuB)Uxv>;&0)le&rR6BI5KrTxhT5wG$&rTwL3mF$-# z`wUUCzvAOw2U}-qN+k)Syu7#H-VT|~9im&`Ny~e;$XA>*%e_cH2pNkJaw%cVZRrq` zMbZz#miLHTlQH|K*$uVm*69T7A_&`480{n2@hY)$u)vO$C7Rmqjt>y*Brg)q_#lJr z%{i5-EiBk6%)Z7xt%``N%}q^l&z0H5eh{|2x1rJ%CzJBt9bT+B*W%*}=Xp4a7lf2B z61VPJ-YbJ82G=a)%lY-5Zk=8PBli^|*adnY!QRSLCp19@JGPtZNwC3AQE_J$BqOuE zC$PN<MSMADmI~Mj4E)+YFZYoVYlQG+CcArauDIL_!CqSI3MEz}^gZ1lMCu25q0rW) zA7pof0~#?*nSP|gqr6APchybQt&81mJ#ud$4Bu0b<|Eiy6uPZJ23uY-)OmBf59L0# z)ECdd6V<~7kgnpqzJl$~Ia3tCwkebt`+hO+Qe&e*>IYfEl=q4;jQAeG?D_s6o&6w3 z$+Wri9LzXgEhdb&oU9hX{=T-EDeslS&iWQ;>^M&o#!j~$v9|!hJ_|mAZS=7c;w{+n ziJgRA1UriY66K}4X9WRlf6o~u1KSu<6EyB{#Ar`s`$44g-ZyovQ0O@4&HX{#HS2q` zU8`j_o9*s?kWDm^oPV;)oiM&x<O);f9V-{z+6A@f))2P)EDYIoHYNldJ6#sPdj+>2 zp-7a18}_950KpFAobd{wNa%sRpje0@akac3WO<3JM*Sc@@9F*^>~gQKXd+46n#9)A zj+n(H^03h6F7HJjDRb4ojaGLEBDr<g?tB=s`)r~QV5jtAjIHq%Za=_|l>y^#xz87{ z{W)ip?3@zVu^|aI8H<Z-g4n%RVDsn)Azgd#n47$~KS<{c<BVffV)(JUq1D|FvOK4* zOTt+0=zv4E)-G;6Y*#)E-I-_b0c@SO6^kI1`?`hu{}60#$b!AF(3U2-^*p-VizJL0 zjZWBRZR=9rliwdizTAscLdbYHyVjjB9u^!T%vT&N6=UmftL$Q&J(7hQ-FoP*JQ%Vw z4>Zj5dI;39y@or)LJ<v(qkA(Hi3nM+?<^4XQa=b=-Xm^JT-#f>W)~2UNf;7>Nc|vp zov3u(W2Dd`CX7=uO5l#nG8%$(x;24%@V|0l!1gn7K7g$YVCGRLt9W!brQRdlewO=s zD|u7{+uw8A7?49B?A!B&NCGw6y+;zp`)O0tqv+)F^4?U173b`7FXGl>_;J?ao?$#> zbBL0a_t+2w!Olgnb70W+GpRoIim(k(NnQXQ!NlkBJ~Tmf3%8$O>w2l&r=e8~W0207 z(#_0c=z%S|cAnLw)DJ?s_mV1_M7LH;7?qZLk@6myWn7+9>+T0}#nleQgmEb2)|c!+ zu(xHKg4Ep?rQpy>GC1RXY+F@@JH#evSSS;EX@VxS!A7W4mHI*cR@W-_S$7wL$ooOu z3kaBg5E6oru`0JlEn$Qq64X1+z`*TiK(jMH(vN=ZSU>u)wSFu#P=wpZer%=Q>0nK% z%bi*6ya_>=QV(6Q=j1iSDfNS_riq}3TPq}ta<`s(s2rX~w<a@;#Hq#GpJBqty0tuE zbh|Y|J#bq#^xu}P@1+$qTj@4k04r#e;7$n;?4FvSB7Cfhu!*0soAauj)0ZZw&;*<O zc8t;tqjZb1RmDP&Zhg<GYS>gJh&5|zkXc6J)(>P=%4Qf<+?ql?VB2W|b|PQ%$QAI7 z-?iEG2Bm(GbXyzjL&?i~w`SGAD@9hZW=(3>WRPme7Z_VVEymVHwSEwpTe}iQ3G4yH zt$#cXnlyu+gUuB%*yz^DN|P~96}WDAvlrn`#zgY#>K3srl?+!eNDHhfz@+n7g~|eg zuKgg22_xgy{n8AAW@}bB2b(KkuxFpK#HjUyJdtk|o1Dn~K{6YiVn4_NLv5G)gUA;U zNN%l~FfwjEkh*ohA5Uj!e)uJt-+qBBXum<@O+ScQ!szMNo(l-NEAOFG3kY=@LcKz& zgz)={a0M0Y>rU0B^)$n%THd28&XpDr$lV%~#f-r_a`c0C<VN$mt#b7`*w-3r_1^S@ zh;FTLe-NeRUc{}#_7oVxcI77z+mq+j4=Qo6xq=Gzv|s9?z3m54y+4R+#kpzZzM@og z>J=K5`-O0@xi0GOJWe}NYw)HYgmvrD8KuJL{UvFmelqGu9Vm^~1aa^$lPf4-Uv;uJ z&YOM^jH?af4w@3XyP+fpn=7P#nK$Z0b+W?m#hB2klgIyTj*G~$g=;R-;9n+J(7+~R z(($_J$(c1VMBe;t9S581e*)}K8T`xS;$U-eu<7WB>W><T8icw8H3T&jH4GJo8jc!4 zH4+t0HA+F!wvkjL=<#7xL+SeurspE(9Y8+=2b;?;u=_Cp52lcXF~AZqFGY<;jYW+| zU51)KLT=P#)a9rtRFNv0Lid|YkDEx}gS_83)EIi62zn8Wpr2zHg<b-_KL?x38?Xmb zaE4JAWnmse!IL1qoI-jfDUzVBMomXugPK8R-$`o;Y8EP*Y8HKMCYi*f`;+6Q()YN6 zLO+QCeJs6@<d6@g7hiw=Wpecd_5cN^R&r@2xTjJ`r%_<9rGU?5G=si=O*c?arVf6Y z%)Lj^3vIZ}xjEQeUd7n`Dd224GK`6%!>M~pE<Tn5$c7~oDfnuVLXQdb7|EH(Fz!5x ziNV>}+anC&p$J!?Rgr!S^aCkimr(fGWO5jj2ug|Na9M&F#>C7+6%xil-Xx72Y%Z_B d=HmJ_=)X(C<$1VVe}Vu2002ovPDHLkV1n>sNh$yU diff --git a/platforms/android/assets/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/platforms/android/assets/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css deleted file mode 100644 index fa0ff379..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - * - * Styles used by the XHTML 1.1 sample page (xhtml.html). - */ - -/** - * Basic definitions for the editing area. - */ -body -{ - font-family: Arial, Verdana, sans-serif; - font-size: 80%; - color: #000000; - background-color: #ffffff; - padding: 5px; - margin: 0px; -} - -/** - * Core styles. - */ - -.Bold -{ - font-weight: bold; -} - -.Italic -{ - font-style: italic; -} - -.Underline -{ - text-decoration: underline; -} - -.StrikeThrough -{ - text-decoration: line-through; -} - -.Subscript -{ - vertical-align: sub; - font-size: smaller; -} - -.Superscript -{ - vertical-align: super; - font-size: smaller; -} - -/** - * Font faces. - */ - -.FontComic -{ - font-family: 'Comic Sans MS'; -} - -.FontCourier -{ - font-family: 'Courier New'; -} - -.FontTimes -{ - font-family: 'Times New Roman'; -} - -/** - * Font sizes. - */ - -.FontSmaller -{ - font-size: smaller; -} - -.FontLarger -{ - font-size: larger; -} - -.FontSmall -{ - font-size: 8pt; -} - -.FontBig -{ - font-size: 14pt; -} - -.FontDouble -{ - font-size: 200%; -} - -/** - * Font colors. - */ -.FontColor1 -{ - color: #ff9900; -} - -.FontColor2 -{ - color: #0066cc; -} - -.FontColor3 -{ - color: #ff0000; -} - -.FontColor1BG -{ - background-color: #ff9900; -} - -.FontColor2BG -{ - background-color: #0066cc; -} - -.FontColor3BG -{ - background-color: #ff0000; -} - -/** - * Indentation. - */ - -.Indent1 -{ - margin-left: 40px; -} - -.Indent2 -{ - margin-left: 80px; -} - -.Indent3 -{ - margin-left: 120px; -} - -/** - * Alignment. - */ - -.JustifyLeft -{ - text-align: left; -} - -.JustifyRight -{ - text-align: right; -} - -.JustifyCenter -{ - text-align: center; -} - -.JustifyFull -{ - text-align: justify; -} - -/** - * Other. - */ - -code -{ - font-family: courier, monospace; - background-color: #eeeeee; - padding-left: 1px; - padding-right: 1px; - border: #c0c0c0 1px solid; -} - -kbd -{ - padding: 0px 1px 0px 1px; - border-width: 1px 2px 2px 1px; - border-style: solid; -} - -blockquote -{ - color: #808080; -} diff --git a/platforms/android/assets/www/lib/ckeditor/samples/assets/posteddata.php b/platforms/android/assets/www/lib/ckeditor/samples/assets/posteddata.php deleted file mode 100644 index 6b26aae3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/assets/posteddata.php +++ /dev/null @@ -1,59 +0,0 @@ -<!DOCTYPE html> -<?php -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -?> -<html> -<head> - <meta charset="utf-8"> - <title>Sample &mdash; CKEditor</title> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - CKEditor &mdash; Posted Data - </h1> - <table border="1" cellspacing="0" id="outputSample"> - <colgroup><col width="120"></colgroup> - <thead> - <tr> - <th>Field&nbsp;Name</th> - <th>Value</th> - </tr> - </thead> -<?php - -if (!empty($_POST)) -{ - foreach ( $_POST as $key => $value ) - { - if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) - continue; - - if ( get_magic_quotes_gpc() ) - $value = htmlspecialchars( stripslashes((string)$value) ); - else - $value = htmlspecialchars( (string)$value ); -?> - <tr> - <th style="vertical-align: top"><?php echo htmlspecialchars( (string)$key ); ?></th> - <td><pre class="samples"><?php echo $value; ?></pre></td> - </tr> - <?php - } -} -?> - </table> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/assets/sample.jpg b/platforms/android/assets/www/lib/ckeditor/samples/assets/sample.jpg deleted file mode 100644 index 9498271c6032eafda487c0428ad5b26eff35985a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14449 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 diff --git a/platforms/android/assets/www/lib/ckeditor/samples/assets/uilanguages/languages.js b/platforms/android/assets/www/lib/ckeditor/samples/assets/uilanguages/languages.js deleted file mode 100644 index 3f7ff624..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/assets/uilanguages/languages.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", -is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", -zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name<b.name?-1:1});return b}(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/samples/datafiltering.html b/platforms/android/assets/www/lib/ckeditor/samples/datafiltering.html deleted file mode 100644 index 7f2f2a73..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/datafiltering.html +++ /dev/null @@ -1,401 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Data Filtering &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - // Remove advanced tabs for all editors. - CKEDITOR.config.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;creatediv:advanced;editdiv:advanced'; - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Data Filtering and Features Activation - </h1> - <div class="description"> - <p> - This sample page demonstrates the idea of Advanced Content Filter - (<abbr title="Advanced Content Filter">ACF</abbr>), a sophisticated - tool that takes control over what kind of data is accepted by the editor and what - kind of output is produced. - </p> - <h2>When and what is being filtered?</h2> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> controls - <strong>every single source of data</strong> that comes to the editor. - It process both HTML that is inserted manually (i.e. pasted by the user) - and programmatically like: - </p> -<pre class="samples"> -editor.setData( '&lt;p&gt;Hello world!&lt;/p&gt;' ); -</pre> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> discards invalid, - useless HTML tags and attributes so the editor remains "clean" during - runtime. <abbr title="Advanced Content Filter">ACF</abbr> behaviour - can be configured and adjusted for a particular case to prevent the - output HTML (i.e. in CMS systems) from being polluted. - - This kind of filtering is a first, client-side line of defense - against "<a href="http://en.wikipedia.org/wiki/Tag_soup">tag soups</a>", - the tool that precisely restricts which tags, attributes and styles - are allowed (desired). When properly configured, <abbr title="Advanced Content Filter">ACF</abbr> - is an easy and fast way to produce a high-quality, intentionally filtered HTML. - </p> - - <h3>How to configure or disable ACF?</h3> - <p> - Advanced Content Filter is enabled by default, working in "automatic mode", yet - it provides a set of easy rules that allow adjusting filtering rules - and disabling the entire feature when necessary. The config property - responsible for this feature is <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">config.allowedContent</a></code>. - </p> - <p> - By "automatic mode" is meant that loaded plugins decide which kind - of content is enabled and which is not. For example, if the link - plugin is loaded it implies that <code>&lt;a&gt;</code> tag is - automatically allowed. Each plugin is given a set - of predefined <abbr title="Advanced Content Filter">ACF</abbr> rules - that control the editor until <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> - is defined manually. - </p> - <p> - Let's assume our intention is to restrict the editor to accept (produce) <strong>paragraphs - only: no attributes, no styles, no other tags</strong>. - With <abbr title="Advanced Content Filter">ACF</abbr> - this is very simple. Basically set <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> to <code>'p'</code>: - </p> -<pre class="samples"> -var editor = CKEDITOR.replace( <em>textarea_id</em>, { - <strong>allowedContent: 'p'</strong> -} ); -</pre> - <p> - Now try to play with allowed content: - </p> -<pre class="samples"> -// Trying to insert disallowed tag and attribute. -editor.setData( '&lt;p <strong>style="color: red"</strong>&gt;Hello <strong>&lt;em&gt;world&lt;/em&gt;</strong>!&lt;/p&gt;' ); -alert( editor.getData() ); - -// Filtered data is returned. -"&lt;p&gt;Hello world!&lt;/p&gt;" -</pre> - <p> - What happened? Since <code>config.allowedContent: 'p'</code> is set the editor assumes - that only plain <code>&lt;p&gt;</code> are accepted. Nothing more. This is why - <code>style</code> attribute and <code>&lt;em&gt;</code> tag are gone. The same - filtering would happen if we pasted disallowed HTML into this editor. - </p> - <p> - This is just a small sample of what <abbr title="Advanced Content Filter">ACF</abbr> - can do. To know more, please refer to the sample section below and - <a href="http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter">the official Advanced Content Filter guide</a>. - </p> - <p> - You may, of course, want CKEditor to avoid filtering of any kind. - To get rid of <abbr title="Advanced Content Filter">ACF</abbr>, - basically set <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> to <code>true</code> like this: - </p> -<pre class="samples"> -CKEDITOR.replace( <em>textarea_id</em>, { - <strong>allowedContent: true</strong> -} ); -</pre> - - <h2>Beyond data flow: Features activation</h2> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> is far more than - <abbr title="Input/Output">I/O</abbr> control: the entire - <abbr title="User Interface">UI</abbr> of the editor is adjusted to what - filters restrict. For example: if <code>&lt;a&gt;</code> tag is - <strong>disallowed</strong> - by <abbr title="Advanced Content Filter">ACF</abbr>, - then accordingly <code>link</code> command, toolbar button and link dialog - are also disabled. Editor is smart: it knows which features must be - removed from the interface to match filtering rules. - </p> - <p> - CKEditor can be far more specific. If <code>&lt;a&gt;</code> tag is - <strong>allowed</strong> by filtering rules to be used but it is restricted - to have only one attribute (<code>href</code>) - <code>config.allowedContent = 'a[!href]'</code>, then - "Target" tab of the link dialog is automatically disabled as <code>target</code> - attribute isn't included in <abbr title="Advanced Content Filter">ACF</abbr> rules - for <code>&lt;a&gt;</code>. This behaviour applies to dialog fields, context - menus and toolbar buttons. - </p> - - <h2>Sample configurations</h2> - <p> - There are several editor instances below that present different - <abbr title="Advanced Content Filter">ACF</abbr> setups. <strong>All of them, - except the last inline instance, share the same HTML content</strong> to visualize - how different filtering rules affect the same input data. - </p> - </div> - - <div> - <label for="editor1"> - Editor 1: - </label> - <div class="description"> - <p> - This editor is using default configuration ("automatic mode"). It means that - <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> is defined by loaded plugins. - Each plugin extends filtering rules to make it's own associated content - available for the user. - </p> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <script> - - CKEDITOR.replace( 'editor1' ); - - </script> - </div> - - <br> - - <div> - <label for="editor2"> - Editor 2: - </label> - <div class="description"> - <p> - This editor is using a custom configuration for - <abbr title="Advanced Content Filter">ACF</abbr>: - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor2', { - allowedContent: - 'h1 h2 h3 p blockquote strong em;' + - 'a[!href];' + - 'img(left,right)[!src,alt,width,height];' + - 'table tr th td caption;' + - 'span{!font-family};' +' - 'span{!color};' + - 'span(!marker);' + - 'del ins' -} ); -</pre> - <p> - The following rules may require additional explanation: - </p> - <ul> - <li> - <code>h1 h2 h3 p blockquote strong em</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - <li> - <code>a[!href]</code> - <code>href</code> attribute is obligatory - for <code>&lt;a&gt;</code> tag. Tags without this attribute - are disarded. No other attribute will be accepted. - </li> - <li> - <code>img(left,right)[!src,alt,width,height]</code> - <code>src</code> - attribute is obligatory for <code>&lt;img&gt;</code> tag. - <code>alt</code>, <code>width</code>, <code>height</code> - and <code>class</code> attributes are accepted but - <code>class</code> must be either <code>class="left"</code> - or <code>class="right"</code> - </li> - <li> - <code>table tr th td caption</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - <li> - <code>span{!font-family}</code>, <code>span{!color}</code>, - <code>span(!marker)</code> - <code>&lt;span&gt;</code> tags - will be accepted if either <code>font-family</code> or - <code>color</code> style is set or <code>class="marker"</code> - is present. - </li> - <li> - <code>del ins</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - </ul> - <p> - Please note that <strong><abbr title="User Interface">UI</abbr> of the - editor is different</strong>. It's a response to what happened to the filters. - Since <code>text-align</code> isn't allowed, the align toolbar is gone. - The same thing happened to subscript/superscript, strike, underline - (<code>&lt;u&gt;</code>, <code>&lt;sub&gt;</code>, <code>&lt;sup&gt;</code> - are disallowed by <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code>) and many other buttons. - </p> - </div> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor2', { - allowedContent: - 'h1 h2 h3 p blockquote strong em;' + - 'a[!href];' + - 'img(left,right)[!src,alt,width,height];' + - 'table tr th td caption;' + - 'span{!font-family};' + - 'span{!color};' + - 'span(!marker);' + - 'del ins' - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor3"> - Editor 3: - </label> - <div class="description"> - <p> - This editor is using a custom configuration for - <abbr title="Advanced Content Filter">ACF</abbr>. - Note that filters can be configured as an object literal - as an alternative to a string-based definition. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor3', { - allowedContent: { - 'b i ul ol big small': true, - 'h1 h2 h3 p blockquote li': { - styles: 'text-align' - }, - a: { attributes: '!href,target' }, - img: { - attributes: '!src,alt', - styles: 'width,height', - classes: 'left,right' - } - } -} ); -</pre> - </div> - <textarea cols="80" id="editor3" name="editor3" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor3', { - allowedContent: { - 'b i ul ol big small': true, - 'h1 h2 h3 p blockquote li': { - styles: 'text-align' - }, - a: { attributes: '!href,target' }, - img: { - attributes: '!src,alt', - styles: 'width,height', - classes: 'left,right' - } - } - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor4"> - Editor 4: - </label> - <div class="description"> - <p> - This editor is using a custom set of plugins and buttons. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor4', { - removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley', - removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image', - format_tags: 'p;h1;h2;h3;pre;address' -} ); -</pre> - <p> - As you can see, removing plugins and buttons implies filtering. - Several tags are not allowed in the editor because there's no - plugin/button that is responsible for creating and editing this - kind of content (for example: the image is missing because - of <code>removeButtons: 'Image'</code>). The conclusion is that - <abbr title="Advanced Content Filter">ACF</abbr> works "backwards" - as well: <strong>modifying <abbr title="User Interface">UI</abbr> - elements is changing allowed content rules</strong>. - </p> - </div> - <textarea cols="80" id="editor4" name="editor4" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor4', { - removePlugins: 'bidi,div,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley', - removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image', - format_tags: 'p;h1;h2;h3;pre;address' - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor5"> - Editor 5: - </label> - <div class="description"> - <p> - This editor is built on editable <code>&lt;h1&gt;</code> element. - <abbr title="Advanced Content Filter">ACF</abbr> takes care of - what can be included in <code>&lt;h1&gt;</code>. Note that there - are no block styles in Styles combo. Also why lists, indentation, - blockquote, div, form and other buttons are missing. - </p> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> makes sure that - no disallowed tags will come to <code>&lt;h1&gt;</code> so the final - markup is valid. If the user tried to paste some invalid HTML - into this editor (let's say a list), it would be automatically - converted into plain text. - </p> - </div> - <h1 id="editor5" contenteditable="true"> - <em>Apollo 11</em> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. - </h1> - </div> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/divreplace.html b/platforms/android/assets/www/lib/ckeditor/samples/divreplace.html deleted file mode 100644 index 873c8c2e..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/divreplace.html +++ /dev/null @@ -1,141 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace DIV &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - div.editable - { - border: solid 2px transparent; - padding-left: 15px; - padding-right: 15px; - } - - div.editable:hover - { - border-color: black; - } - - </style> - <script> - - // Uncomment the following code to test the "Timeout Loading Method". - // CKEDITOR.loadFullCoreTimeout = 5; - - window.onload = function() { - // Listen to the double click event. - if ( window.addEventListener ) - document.body.addEventListener( 'dblclick', onDoubleClick, false ); - else if ( window.attachEvent ) - document.body.attachEvent( 'ondblclick', onDoubleClick ); - - }; - - function onDoubleClick( ev ) { - // Get the element which fired the event. This is not necessarily the - // element to which the event has been attached. - var element = ev.target || ev.srcElement; - - // Find out the div that holds this element. - var name; - - do { - element = element.parentNode; - } - while ( element && ( name = element.nodeName.toLowerCase() ) && - ( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' ); - - if ( name == 'div' && element.className.indexOf( 'editable' ) != -1 ) - replaceDiv( element ); - } - - var editor; - - function replaceDiv( div ) { - if ( editor ) - editor.destroy(); - - editor = CKEDITOR.replace( div ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace DIV with CKEditor on the Fly - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;div&gt;</code> elements - with a CKEditor instance on the fly, following user's doubleclick. The content - that was previously placed inside the <code>&lt;div&gt;</code> element will now - be moved into CKEditor editing area. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p> - Double-click any of the following <code>&lt;div&gt;</code> elements to transform them into - editor instances. - </p> - <div class="editable"> - <h3> - Part 1 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - </div> - <div class="editable"> - <h3> - Part 2 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - <p> - Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus - sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum - vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. - </p> - </div> - <div class="editable"> - <h3> - Part 3 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/index.html b/platforms/android/assets/www/lib/ckeditor/samples/index.html deleted file mode 100644 index 5ae467f8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/index.html +++ /dev/null @@ -1,170 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>CKEditor Samples</title> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - CKEditor Samples - </h1> - <div class="twoColumns"> - <div class="twoColumnsLeft"> - <h2 class="samples"> - Basic Samples - </h2> - <dl class="samples"> - <dt><a class="samples" href="replacebyclass.html">Replace textarea elements by class name</a></dt> - <dd>Automatic replacement of all textarea elements of a given class with a CKEditor instance.</dd> - - <dt><a class="samples" href="replacebycode.html">Replace textarea elements by code</a></dt> - <dd>Replacement of textarea elements with CKEditor instances by using a JavaScript call.</dd> - - <dt><a class="samples" href="jquery.html">Create editors with jQuery</a></dt> - <dd>Creating standard and inline CKEditor instances with jQuery adapter.</dd> - </dl> - - <h2 class="samples"> - Basic Customization - </h2> - <dl class="samples"> - <dt><a class="samples" href="uicolor.html">User Interface color</a></dt> - <dd>Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.</dd> - - <dt><a class="samples" href="uilanguages.html">User Interface languages</a></dt> - <dd>Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.</dd> - </dl> - - - <h2 class="samples">Plugins</h2> -<dl class="samples"> -<dt><a class="samples" href="plugins/codesnippet/codesnippet.html">Code Snippet plugin</a> <span class="new">New!</span></dt> -<dd>View and modify code using the Code Snippet plugin.</dd> - -<dt><a class="samples" href="plugins/image2/image2.html">New Image plugin</a> <span class="new">New!</span></dt> -<dd>Using the new Image plugin to insert captioned images and adjust their dimensions.</dd> - -<dt><a class="samples" href="plugins/mathjax/mathjax.html">Mathematics plugin</a> <span class="new">New!</span></dt> -<dd>Create mathematical equations in TeX and display them in visual form.</dd> - -<dt><a class="samples" href="plugins/sourcedialog/sourcedialog.html">Editing source code in a dialog</a> <span class="new">New!</span></dt> -<dd>Editing HTML content of both inline and classic editor instances.</dd> - -<dt><a class="samples" href="plugins/autogrow/autogrow.html">AutoGrow plugin</a></dt> -<dd>Using the AutoGrow plugin in order to make the editor grow to fit the size of its content.</dd> - -<dt><a class="samples" href="plugins/bbcode/bbcode.html">Output for BBCode</a></dt> -<dd>Configuring CKEditor to produce BBCode tags instead of HTML.</dd> - -<dt><a class="samples" href="plugins/devtools/devtools.html">Developer Tools plugin</a></dt> -<dd>Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization.</dd> - -<dt><a class="samples" href="plugins/docprops/docprops.html">Document Properties plugin</a></dt> -<dd>Manage various page meta data with a dialog.</dd> - -<dt><a class="samples" href="plugins/magicline/magicline.html">Magicline plugin</a></dt> -<dd>Using the Magicline plugin to access difficult focus spaces.</dd> - -<dt><a class="samples" href="plugins/placeholder/placeholder.html">Placeholder plugin</a></dt> -<dd>Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window.</dd> - -<dt><a class="samples" href="plugins/sharedspace/sharedspace.html">Shared-Space plugin</a></dt> -<dd>Having the toolbar and the bottom bar spaces shared by different editor instances.</dd> - -<dt><a class="samples" href="plugins/stylesheetparser/stylesheetparser.html">Stylesheet Parser plugin</a></dt> -<dd>Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet.</dd> - -<dt><a class="samples" href="plugins/tableresize/tableresize.html">TableResize plugin</a></dt> -<dd>Using the TableResize plugin to enable table column resizing.</dd> - -<dt><a class="samples" href="plugins/uicolor/uicolor.html">UIColor plugin</a></dt> -<dd>Using the UIColor plugin to pick up skin color.</dd> - -<dt><a class="samples" href="plugins/wysiwygarea/fullpage.html">Full page support</a></dt> -<dd>CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.</dd> -</dl> - </div> - <div class="twoColumnsRight"> - <h2 class="samples"> - Inline Editing - </h2> - <dl class="samples"> - <dt><a class="samples" href="inlineall.html">Massive inline editor creation</a></dt> - <dd>Turn all elements with <code>contentEditable = true</code> attribute into inline editors.</dd> - - <dt><a class="samples" href="inlinebycode.html">Convert element into an inline editor by code</a></dt> - <dd>Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.</dd> - - <dt><a class="samples" href="inlinetextarea.html">Replace textarea with inline editor</a> <span class="new">New!</span></dt> - <dd>A form with a textarea that is replaced by an inline editor at runtime.</dd> - - - </dl> - - <h2 class="samples"> - Advanced Samples - </h2> - <dl class="samples"> - <dt><a class="samples" href="datafiltering.html">Data filtering and features activation</a> <span class="new">New!</span></dt> - <dd>Data filtering and automatic features activation basing on configuration.</dd> - - <dt><a class="samples" href="divreplace.html">Replace DIV elements on the fly</a></dt> - <dd>Transforming a <code>div</code> element into an instance of CKEditor with a mouse click.</dd> - - <dt><a class="samples" href="appendto.html">Append editor instances</a></dt> - <dd>Appending editor instances to existing DOM elements.</dd> - - <dt><a class="samples" href="ajax.html">Create and destroy editor instances for Ajax applications</a></dt> - <dd>Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.</dd> - - <dt><a class="samples" href="api.html">Basic usage of the API</a></dt> - <dd>Using the CKEditor JavaScript API to interact with the editor at runtime.</dd> - - <dt><a class="samples" href="xhtmlstyle.html">XHTML-compliant style</a></dt> - <dd>Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.</dd> - - <dt><a class="samples" href="readonly.html">Read-only mode</a></dt> - <dd>Using the readOnly API to block introducing changes to the editor contents.</dd> - - <dt><a class="samples" href="tabindex.html">"Tab" key-based navigation</a></dt> - <dd>Navigating among editor instances with tab key.</dd> - - - -<dt><a class="samples" href="plugins/dialog/dialog.html">Using the JavaScript API to customize dialog windows</a></dt> -<dd>Using the dialog windows API to customize dialog windows without changing the original editor code.</dd> - -<dt><a class="samples" href="plugins/divarea/divarea.html">Replace Textarea with a &quot;DIV-based&quot; editor</a></dt> -<dd>Using <code>div</code> instead of <code>iframe</code> for rich editing.</dd> - -<dt><a class="samples" href="plugins/enterkey/enterkey.html">Using the &quot;Enter&quot; key in CKEditor</a></dt> -<dd>Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys.</dd> - -<dt><a class="samples" href="plugins/htmlwriter/outputforflash.html">Output for Flash</a></dt> -<dd>Configuring CKEditor to produce HTML code that can be used with Adobe Flash.</dd> - -<dt><a class="samples" href="plugins/htmlwriter/outputhtml.html">Output HTML</a></dt> -<dd>Configuring CKEditor to produce legacy HTML 4 code.</dd> - -<dt><a class="samples" href="plugins/toolbar/toolbar.html">Toolbar Configurations</a></dt> -<dd>Configuring CKEditor to display full or custom toolbar layout.</dd> - - </dl> - </div> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/inlineall.html b/platforms/android/assets/www/lib/ckeditor/samples/inlineall.html deleted file mode 100644 index f82af1db..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/inlineall.html +++ /dev/null @@ -1,311 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Massive inline editing &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <script> - - // This code is generally not necessary, but it is here to demonstrate - // how to customize specific editor instances on the fly. This fits well - // this demo because we have editable elements (like headers) that - // require less features. - - // The "instanceCreated" event is fired for every editor instance created. - CKEDITOR.on( 'instanceCreated', function( event ) { - var editor = event.editor, - element = editor.element; - - // Customize editors for headers and tag list. - // These editors don't need features like smileys, templates, iframes etc. - if ( element.is( 'h1', 'h2', 'h3' ) || element.getAttribute( 'id' ) == 'taglist' ) { - // Customize the editor configurations on "configLoaded" event, - // which is fired after the configuration file loading and - // execution. This makes it possible to change the - // configurations before the editor initialization takes place. - editor.on( 'configLoaded', function() { - - // Remove unnecessary plugins to make the editor simpler. - editor.config.removePlugins = 'colorbutton,find,flash,font,' + - 'forms,iframe,image,newpage,removeformat,' + - 'smiley,specialchar,stylescombo,templates'; - - // Rearrange the layout of the toolbar. - editor.config.toolbarGroups = [ - { name: 'editing', groups: [ 'basicstyles', 'links' ] }, - { name: 'undo' }, - { name: 'clipboard', groups: [ 'selection', 'clipboard' ] }, - { name: 'about' } - ]; - }); - } - }); - - </script> - <link href="sample.css" rel="stylesheet"> - <style> - - /* The following styles are just to make the page look nice. */ - - /* Workaround to show Arial Black in Firefox. */ - @font-face - { - font-family: 'arial-black'; - src: local('Arial Black'); - } - - *[contenteditable="true"] - { - padding: 10px; - } - - #container - { - width: 960px; - margin: 30px auto 0; - } - - #header - { - overflow: hidden; - padding: 0 0 30px; - border-bottom: 5px solid #05B2D2; - position: relative; - } - - #headerLeft, - #headerRight - { - width: 49%; - overflow: hidden; - } - - #headerLeft - { - float: left; - padding: 10px 1px 1px; - } - - #headerLeft h2, - #headerLeft h3 - { - text-align: right; - margin: 0; - overflow: hidden; - font-weight: normal; - } - - #headerLeft h2 - { - font-family: "Arial Black",arial-black; - font-size: 4.6em; - line-height: 1.1; - text-transform: uppercase; - } - - #headerLeft h3 - { - font-size: 2.3em; - line-height: 1.1; - margin: .2em 0 0; - color: #666; - } - - #headerRight - { - float: right; - padding: 1px; - } - - #headerRight p - { - line-height: 1.8; - text-align: justify; - margin: 0; - } - - #headerRight p + p - { - margin-top: 20px; - } - - #headerRight > div - { - padding: 20px; - margin: 0 0 0 30px; - font-size: 1.4em; - color: #666; - } - - #columns - { - color: #333; - overflow: hidden; - padding: 20px 0; - } - - #columns > div - { - float: left; - width: 33.3%; - } - - #columns #column1 > div - { - margin-left: 1px; - } - - #columns #column3 > div - { - margin-right: 1px; - } - - #columns > div > div - { - margin: 0px 10px; - padding: 10px 20px; - } - - #columns blockquote - { - margin-left: 15px; - } - - #tagLine - { - border-top: 5px solid #05B2D2; - padding-top: 20px; - } - - #taglist { - display: inline-block; - margin-left: 20px; - font-weight: bold; - margin: 0 0 0 20px; - } - - </style> -</head> -<body> -<div> - <h1 class="samples"><a href="index.html">CKEditor Samples</a> &raquo; Massive inline editing</h1> - <div class="description"> - <p>This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with <strong>contentEditable</strong> attribute set to value <strong>true</strong>:</p> - <pre class="samples">&lt;div <strong>contenteditable="true</strong>" &gt; ... &lt;/div&gt;</pre> - <p>Click inside of any element below to start editing.</p> - </div> -</div> -<div id="container"> - <div id="header"> - <div id="headerLeft"> - <h2 id="sampleTitle" contenteditable="true"> - CKEditor<br> Goes Inline! - </h2> - <h3 contenteditable="true"> - Lorem ipsum dolor sit amet dolor duis blandit vestibulum faucibus a, tortor. - </h3> - </div> - <div id="headerRight"> - <div contenteditable="true"> - <p> - Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. - </p> - <p> - Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac. - </p> - </div> - </div> - </div> - <div id="columns"> - <div id="column1"> - <div contenteditable="true"> - <h3> - Fusce vitae porttitor - </h3> - <p> - <strong> - Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. - </strong> - </p> - <p> - Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum <a href="http://ckeditor.com/">nisl nulla sem in</a> metus. Maecenas wisi. Donec nec erat volutpat. - </p> - <blockquote> - <p> - Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. - Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum - </p> - </blockquote> - <blockquote> - <p> - Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. - </p> - </blockquote> - <p>Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.</p> - <p><s>Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.</s></p> - </div> - </div> - <div id="column2"> - <div contenteditable="true"> - <h3> - Integer condimentum sit amet - </h3> - <p> - <strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong> - Praesent <a href="http://ckeditor.com/">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p> - <p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p> - <p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p> - </div> - <div contenteditable="true"> - <h3> - Praesent wisi accumsan sit amet nibh - </h3> - <p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p> - <p style="margin-left: 40px; ">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href="http://ckeditor.com/">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p> - <p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p> - </div> - </div> - <div id="column3"> - <div contenteditable="true"> - <p> - <img src="assets/inlineall/logo.png" alt="CKEditor logo" style="float:left"> - </p> - <p>Quisque justo neque, mattis sed, fermentum ultrices <strong>posuere cubilia Curae</strong>, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.</p> - <h3> - Nullam laoreet vel consectetuer tellus suscipit - </h3> - <ul> - <li>Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.</li> - <li>Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.</li> - <li>Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</li> - </ul> - <p>Quisque justo neque, mattis sed, <a href="http://ckeditor.com/">fermentum ultrices posuere cubilia</a> Curae, Vestibulum elit metus, quis placerat ut, lectus.</p> - <p>Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.</p> - <p>Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</p> - </div> - </div> - </div> - <div id="tagLine"> - Tags of this article: - <p id="taglist" contenteditable="true"> - inline, editing, floating, CKEditor - </p> - </div> -</div> -<div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> -</div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/inlinebycode.html b/platforms/android/assets/www/lib/ckeditor/samples/inlinebycode.html deleted file mode 100644 index 4e475367..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/inlinebycode.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Inline Editing by Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Inline Editing by Code - </h1> - <div class="description"> - <p> - This sample shows how to create an inline editor instance of CKEditor. It is created - with a JavaScript call using the following code: - </p> -<pre class="samples"> -// This property tells CKEditor to not activate every element with contenteditable=true element. -CKEDITOR.disableAutoInline = true; - -var editor = CKEDITOR.inline( document.getElementById( 'editable' ) ); -</pre> - <p> - Note that <code>editable</code> in the code above is the <code>id</code> - attribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance. - </p> - </div> - <div id="editable" contenteditable="true"> - <h1><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg" /> Apollo 11</h1> - - <p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> - - <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p> - - <h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2> - - <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p> - - <blockquote> - <p>One small step for [a] man, one giant leap for mankind.</p> - </blockquote> - - <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> - - <blockquote> - <p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p> - </blockquote> - - <h2>Technical details <a id="tech-details" name="tech-details"></a></h2> - - <table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"> - <caption><strong>Mission crew</strong></caption> - <thead> - <tr> - <th scope="col">Position</th> - <th scope="col">Astronaut</th> - </tr> - </thead> - <tbody> - <tr> - <td>Commander</td> - <td>Neil A. Armstrong</td> - </tr> - <tr> - <td>Command Module Pilot</td> - <td>Michael Collins</td> - </tr> - <tr> - <td>Lunar Module Pilot</td> - <td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td> - </tr> - </tbody> - </table> - - <p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p> - - <ol> - <li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li> - <li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li> - <li><strong>Lunar Module</strong> for landing on the Moon.</li> - </ol> - - <p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p> - - <hr /> - <p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p> - </div> - - <script> - // We need to turn off the automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - var editor = CKEDITOR.inline( 'editable' ); - </script> - <div id="footer"> - <hr> - <p contenteditable="true"> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/inlinetextarea.html b/platforms/android/assets/www/lib/ckeditor/samples/inlinetextarea.html deleted file mode 100644 index fd27c0f1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/inlinetextarea.html +++ /dev/null @@ -1,110 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea with Inline Editor &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - /* Style the CKEditor element to look like a textfield */ - .cke_textarea_inline - { - padding: 10px; - height: 200px; - overflow: auto; - - border: 1px solid gray; - -webkit-appearance: textfield; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea with Inline Editor - </h1> - <div class="description"> - <p> - You can also create an inline editor from a <code>textarea</code> - element. In this case the <code>textarea</code> will be replaced - by a <code>div</code> element with inline editing enabled. - </p> -<pre class="samples"> -// "article-body" is the name of a textarea element. -var editor = CKEDITOR.inline( 'article-body' ); -</pre> - </div> - <form action="sample_posteddata.php" method="post"> - <h2>This is a sample form with some fields</h2> - <p> - Title:<br> - <input type="text" name="title" value="Sample Form"></p> - <p> - Article Body (Textarea converted to CKEditor):<br> - <textarea name="article-body" style="height: 200px"> - &lt;h2&gt;Technical details &lt;a id="tech-details" name="tech-details"&gt;&lt;/a&gt;&lt;/h2&gt; - - &lt;table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"&gt; - &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; - &lt;thead&gt; - &lt;tr&gt; - &lt;th scope="col"&gt;Position&lt;/th&gt; - &lt;th scope="col"&gt;Astronaut&lt;/th&gt; - &lt;/tr&gt; - &lt;/thead&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;Commander&lt;/td&gt; - &lt;td&gt;Neil A. Armstrong&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;Command Module Pilot&lt;/td&gt; - &lt;td&gt;Michael Collins&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;Lunar Module Pilot&lt;/td&gt; - &lt;td&gt;Edwin &quot;Buzz&quot; E. Aldrin, Jr.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center"&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href="http://en.wikipedia.org/wiki/NASA" title="NASA"&gt;NASA&lt;/a&gt;&#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; - - &lt;ol&gt; - &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; - &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; - &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; - &lt;/ol&gt; - - &lt;p&gt;After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis"&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean"&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; - - &lt;hr /&gt; - &lt;p style="text-align: right;"&gt;&lt;small&gt;Source: &lt;a href="http://en.wikipedia.org/wiki/Apollo_11"&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - - <script> - CKEDITOR.inline( 'article-body' ); - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/jquery.html b/platforms/android/assets/www/lib/ckeditor/samples/jquery.html deleted file mode 100644 index 380b8284..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/jquery.html +++ /dev/null @@ -1,100 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>jQuery Adapter &mdash; CKEditor Sample</title> - <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> - <script src="../ckeditor.js"></script> - <script src="../adapters/jquery.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> - <script> - - CKEDITOR.disableAutoInline = true; - - $( document ).ready( function() { - $( '#editor1' ).ckeditor(); // Use CKEDITOR.replace() if element is <textarea>. - $( '#editable' ).ckeditor(); // Use CKEDITOR.inline(). - } ); - - function setValue() { - $( '#editor1' ).val( $( 'input#val' ).val() ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html" id="a-test">CKEditor Samples</a> &raquo; Create Editors with jQuery - </h1> - <form action="sample_posteddata.php" method="post"> - <div class="description"> - <p> - This sample shows how to use the <a href="http://docs.ckeditor.com/#!/guide/dev_jquery">jQuery adapter</a>. - Note that you have to include both CKEditor and jQuery scripts before including the adapter. - </p> - -<pre class="samples"> -&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt; -&lt;script src="/ckeditor/ckeditor.js"&gt;&lt;/script&gt; -&lt;script src="/ckeditor/adapters/jquery.js"&gt;&lt;/script&gt; -</pre> - - <p>Then you can replace HTML elements with a CKEditor instance using the <code>ckeditor()</code> method.</p> - -<pre class="samples"> -$( document ).ready( function() { - $( 'textarea#editor1' ).ckeditor(); -} ); -</pre> - </div> - - <h2 class="samples">Inline Example</h2> - - <div id="editable" contenteditable="true"> - <p><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg"/><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> - <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. - <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p> - <blockquote><p>One small step for [a] man, one giant leap for mankind.</p></blockquote> <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> <blockquote><p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p></blockquote> - </div> - - <br style="clear: both"> - - <h2 class="samples">Classic (iframe-based) Example</h2> - - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <p style="overflow: hidden"> - <input style="float: left" type="submit" value="Submit"> - <span style="float: right"> - <input type="text" id="val" value="I'm using jQuery val()!" size="30"> - <input onclick="setValue();" type="button" value="Set value"> - </span> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html deleted file mode 100644 index 39434152..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html +++ /dev/null @@ -1,99 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>AutoGrow Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="AutoGrow plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the AutoGrow plugin in order to make the editor grow to fit the size of its content."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using AutoGrow Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>AutoGrow</strong> (<code>autogrow</code>) plugin that lets the editor window expand - and shrink depending on the amount and size of content entered in the editing area. - </p> - <p> - In its default implementation the <strong>AutoGrow feature</strong> can expand the - CKEditor window infinitely in order to avoid introducing scrollbars to the editing area. - </p> - <p> - It is also possible to set a maximum height for the editor window. Once CKEditor - editing area reaches the value in pixels specified in the - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_maxHeight">autoGrow_maxHeight</a></code> - configuration setting, scrollbars will be added and the editor window will no longer expand. - </p> - <p> - To add a CKEditor instance using the <code>autogrow</code> plugin and its - <code>autoGrow_maxHeight</code> attribute, insert the following JavaScript call to your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'autogrow',</strong> - autoGrow_maxHeight: 800, - - // Remove the Resize plugin as it does not make sense to use it in conjunction with the AutoGrow plugin. - removePlugins: 'resize' -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. The maximum height should - be given in pixels. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>autogrow</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'autogrow', - removePlugins: 'resize' - }); - - </script> - </p> - <p> - <label for="editor2"> - CKEditor using the <code>autogrow</code> plugin with maximum height set to 400 pixels: - </label> - <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor2', { - extraPlugins: 'autogrow', - autoGrow_maxHeight: 400, - removePlugins: 'resize' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html deleted file mode 100644 index 940d12c0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html +++ /dev/null @@ -1,111 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>BBCode Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output for BBCode"> - <meta name="ckeditor-sample-group" content="Additional Plugins"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce BBCode tags instead of HTML."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; BBCode Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output <a href="http://en.wikipedia.org/wiki/BBCode">BBCode</a> format instead of HTML. - Please note that the editor configuration was modified to reflect what is needed in a BBCode editing environment. - Smiley images, for example, were stripped to the emoticons that are commonly used in some BBCode dialects. - </p> - <p> - Please note that currently there is no standard for the BBCode markup language, so its implementation - for different platforms (message boards, blogs etc.) can vary. This means that before using CKEditor to - output BBCode you may need to adjust the implementation to your own environment. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - a full definition: - </p> - <pre class="samples"> -CKEDITOR.replace( 'editor1', { - <strong>extraPlugins: 'bbcode',</strong> - toolbar: [ - [ 'Source', '-', 'Save', 'NewPage', '-', 'Undo', 'Redo' ], - [ 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat' ], - [ 'Link', 'Unlink', 'Image' ], - '/', - [ 'FontSize', 'Bold', 'Italic', 'Underline' ], - [ 'NumberedList', 'BulletedList', '-', 'Blockquote' ], - [ 'TextColor', '-', 'Smiley', 'SpecialChar', '-', 'Maximize' ] - ], - ... <i>some other configurations omitted here</i> -}); </pre> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">This is some [b]sample text[/b]. You are using [url=http://ckeditor.com/]CKEditor[/url].</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using the "bbcode" plugin, shaping some of the - // editor configuration to fit BBCode environment. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'bbcode', - // Remove unused plugins. - removePlugins: 'bidi,dialogadvtab,div,filebrowser,flash,format,forms,horizontalrule,iframe,justify,liststyle,pagebreak,showborders,stylescombo,table,tabletools,templates', - // Width and height are not supported in the BBCode format, so object resizing is disabled. - disableObjectResizing: true, - // Define font sizes in percent values. - fontSize_sizes: "30/30%;50/50%;100/100%;120/120%;150/150%;200/200%;300/300%", - toolbar: [ - [ 'Source', '-', 'Save', 'NewPage', '-', 'Undo', 'Redo' ], - [ 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat' ], - [ 'Link', 'Unlink', 'Image', 'Smiley', 'SpecialChar' ], - '/', - [ 'Bold', 'Italic', 'Underline' ], - [ 'FontSize' ], - [ 'TextColor' ], - [ 'NumberedList', 'BulletedList', '-', 'Blockquote' ], - [ 'Maximize' ] - ], - // Strip CKEditor smileys to those commonly used in BBCode. - smiley_images: [ - 'regular_smile.png', 'sad_smile.png', 'wink_smile.png', 'teeth_smile.png', 'tongue_smile.png', - 'embarrassed_smile.png', 'omg_smile.png', 'whatchutalkingabout_smile.png', 'angel_smile.png', - 'shades_smile.png', 'cry_smile.png', 'kiss.png' - ], - smiley_descriptions: [ - 'smiley', 'sad', 'wink', 'laugh', 'cheeky', 'blush', 'surprise', - 'indecision', 'angel', 'cool', 'crying', 'kiss' - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html deleted file mode 100644 index 52588cf0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html +++ /dev/null @@ -1,233 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Code Snippet &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <link href="../../../plugins/codesnippet/lib/highlight/styles/monokai_sublime.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Code Snippet plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="View and modify code using the Code Snippet plugin."> - <meta name="ckeditor-sample-isnew" content="1"> - <style> - - #editable - { - padding: 10px 20px; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Code Snippet Plugin - </h1> - - <div class="description"> - <p> - This editor is using the <strong><a href="http://ckeditor.com/addon/codesnippet">Code Snippet</a></strong> plugin which introduces beautiful code snippets. - By default the <code>codesnippet</code> plugin depends on the built-in client-side syntax highlighting - library <a href="http://highlightjs.org">highlight.js</a>. - </p> - <p> - You can adjust the appearance of code snippets using the <code><a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-codeSnippet_theme">codeSnippet_theme</a></code> configuration variable - (see <a href="http://highlightjs.org/static/test.html">available themes</a>). - </p> - <p> - Select theme: <select id="select"></select> - </p> - <p> - The CKEditor instance below was created by using the following configuration settings: - </p> - -<pre class="samples" id="sampleConfig"> -CKEDITOR.replace( 'editor1', { - <strong>extraPlugins: 'codesnippet',</strong> - codeSnippet_theme: 'monokai_sublime' -} ); -</pre> - - <p id="ie8-warning"> - Please note that this plugin is not compatible with Internet Explorer 8. - </p> - </div> - - <textarea id="editor1"> -&lt;p&gt;JavaScript code:&lt;/p&gt; - -&lt;pre&gt; -&lt;code class="language-javascript"&gt;function isEmpty( object ) { - for ( var i in object ) { - if ( object.hasOwnProperty( i ) ) - return false; - } - return true; -}&lt;/code&gt;&lt;/pre&gt; - -&lt;p&gt;SQL query:&lt;/p&gt; - -&lt;pre&gt; -&lt;code class="language-sql"&gt;SELECT cust.id FROM cust LEFT JOIN loc ON ( cust.loc_id = loc.id ) WHERE cust.type IN ( 1, 2 );&lt;/code&gt;&lt;/pre&gt; - -&lt;p&gt;Unknown markup:&lt;/p&gt; - -&lt;pre&gt; -&lt;code&gt; ________________ -/ \ -| How about moo? | ^__^ -\________________/ (oo)\_______ - \ (__)\ )\/\ - ||----w | - || || -&lt;/code&gt;&lt;/pre&gt; - </textarea> - - <h2>Inline editor</h2> - - <div class="description"> - <p> - The following sample shows the <strong>Code Snippet</strong> plugin running inside - an inline CKEditor instance. The CKEditor instance below was created by using the following configuration settings: - </p> - -<pre class="samples"> -CKEDITOR.inline( 'editable', { - <strong>extraPlugins: 'codesnippet'</strong> -} ); -</pre> - - <p> - <strong>Note</strong>: The <a href="http://highlightjs.org/static/test.html">highlight.js themes</a> - must be loaded manually to be applied inside an inline editor instance, as the - <code>codeSnippet_theme</code> setting will not work in that case. - You need to include the stylesheet in the <code>&lt;head&gt;</code> section of the page, for example: - </p> - -<pre class="samples"> -&lt;head&gt; - ... - &lt;link href="path/to/highlight.js/styles/monokai_sublime.css" rel="stylesheet"&gt; -&lt;/head&gt; -</pre> - - </div> - - <div id="editable" contenteditable="true"> - -<p>JavaScript code:</p> - -<pre><code class="language-javascript">function isEmpty( object ) { - for ( var i in object ) { - if ( object.hasOwnProperty( i ) ) - return false; - } - return true; -}</code></pre> - -<p>SQL query:</p> - -<pre><code class="language-sql">SELECT cust.id, cust.name, loc.city FROM cust LEFT JOIN loc ON ( cust.loc_id = loc.id ) WHERE cust.type IN ( 1, 2 );</code></pre> - -<p>Unknown markup:</p> - -<pre><code> ________________ -/ \ -| How about moo? | ^__^ -\________________/ (oo)\_______ - \ (__)\ )\/\ - ||----w | - || || -</code></pre> - </div> - - <h2>Server-side Highlighting and Custom Highlighting Engines</h2> - - <p> - The <a href="http://ckeditor.com/addon/codesnippetgeshi"><strong>Code Snippet GeSHi</strong></a> plugin is an - extension of the <strong>Code Snippet</strong> plugin which uses a server-side highligter. - </p> - - <p> - It also is possible to replace the default highlighter with any library using - the <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet.highlighter">Highlighter API</a> - and the <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet-method-setHighlighter"><code>editor.plugins.codesnippet.setHighlighter()</code></a> method. - </p> - - <script> - ( function() { - CKEDITOR.disableAutoInline = true; - - var config = { - extraPlugins: 'codesnippet', - toolbar: [ - [ 'Source' ], [ 'Undo', 'Redo' ], [ 'Bold', 'Italic', 'Underline' ], [ 'CodeSnippet' ] - ], - codeSnippet_theme: 'monokai_sublime', - height: 400 - }; - - CKEDITOR.replace( 'editor1', config ); - - CKEDITOR.inline( 'editable', CKEDITOR.tools.extend( {}, config, { - extraPlugins: 'codesnippet' - }, true ) ); - - initThemeChange(); - - function initThemeChange() { - var templates = [ - 'monokai_sublime', 'default', 'arta', 'ascetic', 'atelier-dune.dark', 'atelier-dune.light', 'atelier-forest.dark', 'atelier-forest.light', 'atelier-heath.dark', 'atelier-heath.light', 'atelier-lakeside.dark', 'atelier-lakeside.light', 'atelier-seaside.dark', 'atelier-seaside.light', 'brown_paper', 'dark', 'docco', 'far', 'foundation', 'github', 'googlecode', 'idea', 'ir_black', 'magula', 'mono-blue', 'monokai', 'obsidian', 'paraiso.dark', 'paraiso.light', 'pojoaque', 'railscasts', 'rainbow', 'school_book', 'solarized_dark', 'solarized_light', 'sunburst', 'tomorrow-night-blue', 'tomorrow-night-bright', 'tomorrow-night-eighties', 'tomorrow-night', 'tomorrow', 'vs', 'xcode', 'zenburn' - ], - pre = CKEDITOR.document.getById( 'sampleConfig' ), - select = CKEDITOR.document.getById( 'select' ), - codeTemplate = 'CKEDITOR.replace( \'editor1\', {\n' + - ' <strong>extraPlugins: \'codesnippet\',</strong>\n' + - ' codeSnippet_theme: \'{tpl}\'\n' + - '} );', - name, option; - - while ( ( name = templates.shift() ) ) { - option = CKEDITOR.document.createElement( 'option', { - attributes: { - value: name - } - } ); - - option.setText( name ); - select.append( option ); - } - - select.$.onchange = function() { - if ( CKEDITOR.instances.editor1 ) - CKEDITOR.instances.editor1.destroy(); - - CKEDITOR.replace( 'editor1', CKEDITOR.tools.extend( {}, config, { - codeSnippet_theme: this.value - }, true ) ); - - pre.setHtml( codeTemplate.replace( '{tpl}', this.value ) ); - }; - } - - if ( CKEDITOR.env.ie && CKEDITOR.env.version == 8 ) - CKEDITOR.document.getById( 'ie8-warning' ).addClass( 'warning' ); - }() ); - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/devtools/devtools.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/devtools/devtools.html deleted file mode 100644 index da3552ff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/devtools/devtools.html +++ /dev/null @@ -1,83 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using DevTools Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Developer Tools plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Developer Tools Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Developer Tools</strong> (<code>devtools</code>) plugin that displays - information about dialog window elements, including the name of the dialog window, - tab, and UI element. Please note that the tooltip also contains a link to the - <a href="http://docs.ckeditor.com/#!/api">CKEditor JavaScript API</a> - documentation for each of the selected elements. - </p> - <p> - This plugin is aimed at developers who would like to customize their CKEditor - instances and create their own plugins. By default it is turned off; it is - usually useful to only turn it on in the development phase. Note that it works with - all CKEditor dialog windows, including the ones that were created by custom plugins. - </p> - <p> - To add a CKEditor instance using the <strong>devtools</strong> plugin, insert - the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'devtools'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'devtools' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js deleted file mode 100644 index 3edd0728..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -CKEDITOR.dialog.add( 'myDialog', function( editor ) { - return { - title: 'My Dialog', - minWidth: 400, - minHeight: 200, - contents: [ - { - id: 'tab1', - label: 'First Tab', - title: 'First Tab', - elements: [ - { - id: 'input1', - type: 'text', - label: 'Text Field' - }, - { - id: 'select1', - type: 'select', - label: 'Select Field', - items: [ - [ 'option1', 'value1' ], - [ 'option2', 'value2' ] - ] - } - ] - }, - { - id: 'tab2', - label: 'Second Tab', - title: 'Second Tab', - elements: [ - { - id: 'button1', - type: 'button', - label: 'Button Field' - } - ] - } - ] - }; -} ); - diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/dialog.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/dialog.html deleted file mode 100644 index df09d25b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/dialog/dialog.html +++ /dev/null @@ -1,187 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code."> - <style> - - .cke_button__mybutton_icon - { - display: none !important; - } - - .cke_button__mybutton_label - { - display: inline !important; - } - - </style> - <script> - - CKEDITOR.on( 'instanceCreated', function( ev ){ - var editor = ev.editor; - - // Listen for the "pluginsLoaded" event, so we are sure that the - // "dialog" plugin has been loaded and we are able to do our - // customizations. - editor.on( 'pluginsLoaded', function() { - - // If our custom dialog has not been registered, do that now. - if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) { - // We need to do the following trick to find out the dialog - // definition file URL path. In the real world, you would simply - // point to an absolute path directly, like "/mydir/mydialog.js". - var href = document.location.href.split( '/' ); - href.pop(); - href.push( 'assets/my_dialog.js' ); - href = href.join( '/' ); - - // Finally, register the dialog. - CKEDITOR.dialog.add( 'myDialog', href ); - } - - // Register the command used to open the dialog. - editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) ); - - // Add the a custom toolbar buttons, which fires the above - // command.. - editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, { - label: 'My Dialog', - command: 'myDialogCmd' - }); - }); - }); - - // When opening a dialog, its "definition" is created for it, for - // each editor instance. The "dialogDefinition" event is then - // fired. We should use this event to make customizations to the - // definition of existing dialogs. - CKEDITOR.on( 'dialogDefinition', function( ev ) { - // Take the dialog name and its definition from the event data. - var dialogName = ev.data.name; - var dialogDefinition = ev.data.definition; - - // Check if the definition is from the dialog we're - // interested on (the "Link" dialog). - if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) { - // Get a reference to the "Link Info" tab. - var infoTab = dialogDefinition.getContents( 'tab1' ); - - // Add a new text field to the "tab1" tab page. - infoTab.add( { - type: 'text', - label: 'My Custom Field', - id: 'customField', - 'default': 'Sample!', - validate: function() { - if ( ( /\d/ ).test( this.getValue() ) ) - return 'My Custom Field must not contain digits'; - } - }); - - // Remove the "select1" field from the "tab1" tab. - infoTab.remove( 'select1' ); - - // Set the default value for "input1" field. - var input1 = infoTab.get( 'input1' ); - input1[ 'default' ] = 'www.example.com'; - - // Remove the "tab2" tab page. - dialogDefinition.removeContents( 'tab2' ); - - // Add a new tab to the "Link" dialog. - dialogDefinition.addContents( { - id: 'customTab', - label: 'My Tab', - accessKey: 'M', - elements: [ - { - id: 'myField1', - type: 'text', - label: 'My Text Field' - }, - { - id: 'myField2', - type: 'text', - label: 'Another Text Field' - } - ] - }); - - // Provide the focus handler to start initial focus in "customField" field. - dialogDefinition.onFocus = function() { - var urlField = this.getContentElement( 'tab1', 'customField' ); - urlField.select(); - }; - } - }); - - var config = { - extraPlugins: 'dialog', - toolbar: [ [ 'MyButton' ] ] - }; - - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using CKEditor Dialog API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a> - to customize CKEditor dialog windows without changing the original editor code. - The following customizations are being done in the example below: - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p> - <ol> - <li><strong>Creating a custom dialog window</strong> &ndash; "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li> - <li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with "My Dialog" toolbar button.</li> - </ol> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor1', config ); - </script> - <p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p> - <ol> - <li><strong>Adding dialog tab</strong> &ndash; Add new tab "My Tab" to dialog window.</li> - <li><strong>Removing a dialog window tab</strong> &ndash; Remove "Second Tab" page from the dialog window.</li> - <li><strong>Adding dialog window fields</strong> &ndash; Add "My Custom Field" to the dialog window.</li> - <li><strong>Removing dialog window field</strong> &ndash; Remove "Select Field" selection field from the dialog window.</li> - <li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of "Text Field" text field. </li> - <li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on "My Custom Field" text field. </li> - </ol> - <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor2', config ); - - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/divarea/divarea.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/divarea/divarea.html deleted file mode 100644 index d2880bd2..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/divarea/divarea.html +++ /dev/null @@ -1,61 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea with a "DIV-based" editor &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Replace Textarea with a &quot;DIV-based&quot; editor"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Using &lt;code&gt;div&lt;/code&gt; instead of &lt;code&gt;iframe&lt;/code&gt; for rich editing."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Replace Textarea with a "DIV-based" editor - </h1> - <form action="../../../samples/sample_posteddata.php" method="post"> - <div class="description"> - <p> - This editor is using a <code>&lt;div&gt;</code> element-based editing area, provided by the <strong>Divarea</strong> plugin. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - extraPlugins: 'divarea' -});</pre> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'divarea' - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/docprops/docprops.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/docprops/docprops.html deleted file mode 100644 index fcea6468..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/docprops/docprops.html +++ /dev/null @@ -1,78 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Document Properties &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Document Properties plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Manage various page meta data with a dialog."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Document Properties Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to use the <strong>Document Properties</strong> plugin. - This plugin allows you to set the metadata of the page, including the page encoding, margins, - meta tags, or background. - </p> - <p><strong>Note: </strong> This plugin is to be used along with the <code>fullPage</code> configuration.</p> - <p> - The CKEditor instance below is inserted with a JavaScript call using the following code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>fullPage: true</strong>, - <strong>extraPlugins: 'docprops'</strong>, - <strong>allowedContent: true</strong> -}); -</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering. - Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <label for="editor1"> - CKEditor output the entire page including content outside of - <code>&lt;body&gt;</code> element, so content like meta and title can be changed: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; align=&quot;right&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - fullPage: true, - extraPlugins: 'docprops', - allowedContent: true - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html deleted file mode 100644 index 2d515012..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>ENTER Key Configuration &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Using the &quot;Enter&quot; key in CKEditor"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys."> - <script> - - var editor; - - function changeEnter() { - // If we already have an editor, let's destroy it first. - if ( editor ) - editor.destroy( true ); - - // Create the editor again, with the appropriate settings. - editor = CKEDITOR.replace( 'editor1', { - extraPlugins: 'enterkey', - enterMode: Number( document.getElementById( 'xEnter' ).value ), - shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value ) - }); - } - - window.onload = changeEnter; - - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; ENTER Key Configuration - </h1> - <div class="description"> - <p> - This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys - to perform actions specified in the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a> - and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a> - parameters, respectively. - You can choose from the following options: - </p> - <ul class="samples"> - <li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li> - <li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li> - <li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li> - </ul> - <p> - The sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>enterMode: CKEDITOR.ENTER_DIV</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - </div> - <div style="float: left; margin-right: 20px"> - When <em>Enter</em> is pressed:<br> - <select id="xEnter" onchange="changeEnter();"> - <option selected="selected" value="1">Create a new &lt;P&gt; (recommended)</option> - <option value="3">Create a new &lt;DIV&gt;</option> - <option value="2">Break the line with a &lt;BR&gt;</option> - </select> - </div> - <div style="float: left"> - When <em>Shift+Enter</em> is pressed:<br> - <select id="xShiftEnter" onchange="changeEnter();"> - <option value="1">Create a new &lt;P&gt;</option> - <option value="3">Create a new &lt;DIV&gt;</option> - <option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option> - </select> - </div> - <br style="clear: both"> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <br> - <textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.</textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla deleted file mode 100644 index 27e68ccd1cb7192c8bda2418d198d90f1aff10a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85504 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 diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf deleted file mode 100644 index dbe17b6bce5b9311776f43c2b527f5d696181e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15571 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 diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js deleted file mode 100644 index 95fdf0a7..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js +++ /dev/null @@ -1,18 +0,0 @@ -var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;c<a;c++)x[c]()}}function L(a){s?a():x[x.length]=a}function M(a){if(typeof m.addEventListener!=i)m.addEventListener("load",a,!1);else if(typeof d.addEventListener!=i)d.addEventListener("load",a,!1);else if(typeof m.attachEvent!=i)U(m,"onload",a);else if("function"==typeof m.onload){var b=m.onload;m.onload= -function(){b();a()}}else m.onload=a}function V(){var a=d.getElementsByTagName("body")[0],b=d.createElement(r);b.setAttribute("type",y);var c=a.appendChild(b);if(c){var f=0;(function(){if(typeof c.GetVariable!=i){var g=c.GetVariable("$version");g&&(g=g.split(" ")[1].split(","),e.pv=[parseInt(g[0],10),parseInt(g[1],10),parseInt(g[2],10)])}else if(10>f){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0<a)for(var b=0;b<a;b++){var c=p[b].id, -f=p[b].callbackFn,g={success:!1,id:c};if(0<e.pv[0]){var d=n(c);if(d)if(z(p[b].swfVersion)&&!(e.wk&&312>e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;k<j;k++)"movie"!=d[k].getAttribute("name").toLowerCase()&& -(h[d[k].getAttribute("name")]=d[k].getAttribute("value"));G(g,h,c,f)}else W(d),f&&f(g)}else if(t(c,!0),f){if((c=E(c))&&typeof c.SetVariable!=i)g.success=!0,g.ref=c;f(g)}}}function E(a){var b=null;if((a=n(a))&&"OBJECT"==a.nodeName)typeof a.SetVariable!=i?b=a:(a=a.getElementsByTagName(r)[0])&&(b=a);return b}function F(){return!A&&z("6.0.65")&&(e.win||e.mac)&&!(e.wk&&312>e.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= -O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", -c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& -e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;f<c;f++)!(1==a[f].nodeType&&"PARAM"==a[f].nodeName)&&8!=a[f].nodeType&&b.appendChild(a[f].cloneNode(!0));return b}function J(a,b,c){var f,g=n(c);if(e.wk&&312>e.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ -h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='<param name="'+j+'" value="'+b[j]+'" />');g.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+o+">"+h+"</object>";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& -(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} -function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), -e.ie&&(e.win&&typeof d.styleSheets!=i&&0<d.styleSheets.length)&&(l=d.styleSheets[d.styleSheets.length-1]),K=c;e.ie&&e.win?l&&typeof l.addRule==r&&l.addRule(a,b):l&&typeof d.createTextNode!=i&&l.appendChild(d.createTextNode(a+" {"+b+"}"))}}}function t(a,b){if(R){var c=b?"visible":"hidden";s&&n(a)?n(a).style.visibility=c:Q("#"+a,"visibility:"+c)}}function S(a){return null!=/[\\\"<>\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", -O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== -r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), -e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, -0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;b<a;b++)v[b][0].detachEvent(v[b][1],v[b][2]);a=C.length;for(b=0;b<a;b++)P(C[b]);for(var c in e)e[c]=null;e=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})})();return{registerObject:function(a,b,c,f){if(e.w3&&a&&b){var d={};d.id=a;d.swfVersion=b;d.expressInstall=c;d.callbackFn= -f;p[p.length]=d;t(a,!1)}else f&&f({success:!1,id:a})},getObjectById:function(a){if(e.w3)return E(a)},embedSWF:function(a,b,c,d,g,o,h,j,k,m){var n={success:!1,id:b};e.w3&&!(e.wk&&312>e.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== -b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= -d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c<b.length;c++)if(b[c].substring(0,b[c].indexOf("="))==a)return S(b[c].substring(b[c].indexOf("=")+1))}return""},expressInstallCallback:function(){if(A){var a=n(O);a&&w&&(a.parentNode.replaceChild(w,a),B&&(t(B,!0),e.ie&&e.win&&(w.style.display="block")),H&&H(N));A=!1}}}}(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html deleted file mode 100644 index 738ad667..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html +++ /dev/null @@ -1,280 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Output for Flash &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <script src="assets/outputforflash/swfobject.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output for Flash"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash."> - <style> - - .alert - { - background: #ffa84c; - padding: 10px 15px; - font-weight: bold; - display: block; - margin-bottom: 20px; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output - HTML code that can be used with - <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html"> - Adobe Flash</a>. - The code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>, - <code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes. - </p> - <p> - To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard - JavaScript call, and define CKEditor features to use HTML elements and attributes. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p> - To see how it works, create some content in the editing area of CKEditor on the left - and send it to the Flash object on the right side of the page by using the - <strong>Send to Flash</strong> button. - </p> - <table style="width: 100%; border-spacing: 0; border-collapse:collapse;"> - <tr> - <td style="width: 100%"> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea> - <script> - - if ( document.location.protocol == 'file:' ) - alert( 'Warning: This samples does not work when loaded from local filesystem' + - 'due to security restrictions implemented in Flash.' + - '\n\nPlease load the sample from a web server instead.' ); - - var editor = CKEDITOR.replace( 'editor1', { - /* - * Ensure that htmlwriter plugin, which is required for this sample, is loaded. - */ - extraPlugins: 'htmlwriter', - - height: 290, - width: '100%', - toolbar: [ - [ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], - '/', - [ 'Font', 'FontSize' ], - [ 'TextColor', '-', 'About' ] - ], - - /* - * Style sheet for the contents - */ - contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}', - - /* - * Quirks doctype - */ - docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', - - /* - * Core styles. - */ - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - coreStyles_underline: { element: 'u' }, - - /* - * Font face. - */ - - // Define the way font elements will be applied to the document. The "font" - // element will be used. - font_style: { - element: 'font', - attributes: { 'face': '#(family)' } - }, - - /* - * Font sizes. - */ - - // The CSS part of the font sizes isn't used by Flash, it is there to get the - // font rendered correctly in CKEditor. - fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72', - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' }, - styles: { 'font-size': '#(size)px' } - } , - - /* - * Font colors. - */ - colorButton_enableMore: true, - - colorButton_foreStyle: { - element: 'font', - attributes: { 'color': '#(color)' } - }, - - colorButton_backStyle: { - element: 'font', - styles: { 'background-color': '#(color)' } - }, - - on: { 'instanceReady': configureFlashOutput } - }); - - /* - * Adjust the behavior of the dataProcessor to match the - * requirements of Flash - */ - function configureFlashOutput( ev ) { - var editor = ev.editor, - dataProcessor = editor.dataProcessor, - htmlFilter = dataProcessor && dataProcessor.htmlFilter; - - // Out self closing tags the HTML4 way, like <br>. - dataProcessor.writer.selfClosingEnd = '>'; - - // Make output formatting match Flash expectations - var dtd = CKEDITOR.dtd; - for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { - dataProcessor.writer.setRules( e, { - indent: false, - breakBeforeOpen: false, - breakAfterOpen: false, - breakBeforeClose: false, - breakAfterClose: false - }); - } - dataProcessor.writer.setRules( 'br', { - indent: false, - breakBeforeOpen: false, - breakAfterOpen: false, - breakBeforeClose: false, - breakAfterClose: false - }); - - // Output properties as attributes, not styles. - htmlFilter.addRules( { - elements: { - $: function( element ) { - var style, match, width, height, align; - - // Output dimensions of images as width and height - if ( element.name == 'img' ) { - style = element.attributes.style; - - if ( style ) { - // Get the width from the style. - match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style ); - width = match && match[1]; - - // Get the height from the style. - match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style ); - height = match && match[1]; - - if ( width ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); - element.attributes.width = width; - } - - if ( height ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); - element.attributes.height = height; - } - } - } - - // Output alignment of paragraphs using align - if ( element.name == 'p' ) { - style = element.attributes.style; - - if ( style ) { - // Get the align from the style. - match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style ); - align = match && match[1]; - - if ( align ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); - element.attributes.align = align; - } - } - } - - if ( element.attributes.style === '' ) - delete element.attributes.style; - - return element; - } - } - }); - } - - function sendToFlash() { - var html = CKEDITOR.instances.editor1.getData() ; - - // Quick fix for link color. - html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' ) - html = html.replace( /<\/a>/g, '</a></u></font>' ) - - var flash = document.getElementById( 'ckFlashContainer' ) ; - flash.setData( html ) ; - } - - CKEDITOR.domReady( function() { - if ( !swfobject.hasFlashPlayerVersion( '8' ) ) { - CKEDITOR.dom.element.createFromHtml( '<span class="alert">' + - 'At least Adobe Flash Player 8 is required to run this sample. ' + - 'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' + - '</span>' ).insertBefore( editor.element ); - } - - swfobject.embedSWF( - 'assets/outputforflash/outputforflash.swf', - 'ckFlashContainer', - '550', - '400', - '8', - { wmode: 'transparent' } - ); - }); - - </script> - <p> - <input type="button" value="Send to Flash" onclick="sendToFlash();"> - </p> - </td> - <td style="vertical-align: top; padding-left: 20px"> - <div id="ckFlashContainer"></div> - </td> - </tr> - </table> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html deleted file mode 100644 index f25697df..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html +++ /dev/null @@ -1,221 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>HTML Compliant Output &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output HTML"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing HTML Compliant Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output valid - <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code. - Traditional HTML elements like <code>&lt;b&gt;</code>, - <code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of - <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles. - </p> - <p> - To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard - JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - full definition: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' } - } - - ... -});</pre> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - /* - * Ensure that htmlwriter plugin, which is required for this sample, is loaded. - */ - extraPlugins: 'htmlwriter', - - /* - * Style sheet for the contents - */ - contentsCss: 'body {color:#000; background-color#:FFF;}', - - /* - * Simple HTML5 doctype - */ - docType: '<!DOCTYPE HTML>', - - /* - * Allowed content rules which beside limiting allowed HTML - * will also take care of transforming styles to attributes - * (currently only for img - see transformation rules defined below). - * - * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter - */ - allowedContent: - 'h1 h2 h3 p pre[align]; ' + - 'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' + - 'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]', - - /* - * Core styles. - */ - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - coreStyles_underline: { element: 'u' }, - coreStyles_strike: { element: 'strike' }, - - /* - * Font face. - */ - - // Define the way font elements will be applied to the document. - // The "font" element will be used. - font_style: { - element: 'font', - attributes: { 'face': '#(family)' } - }, - - /* - * Font sizes. - */ - fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' } - }, - - /* - * Font colors. - */ - - colorButton_foreStyle: { - element: 'font', - attributes: { 'color': '#(color)' } - }, - - colorButton_backStyle: { - element: 'font', - styles: { 'background-color': '#(color)' } - }, - - /* - * Styles combo. - */ - stylesSet: [ - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' } - ], - - on: { - pluginsLoaded: configureTransformations, - loaded: configureHtmlWriter - } - }); - - /* - * Add missing content transformations. - */ - function configureTransformations( evt ) { - var editor = evt.editor; - - editor.dataProcessor.htmlFilter.addRules( { - attributes: { - style: function( value, element ) { - // Return #RGB for background and border colors - return CKEDITOR.tools.convertRgbToHex( value ); - } - } - } ); - - // Default automatic content transformations do not yet take care of - // align attributes on blocks, so we need to add our own transformation rules. - function alignToAttribute( element ) { - if ( element.styles[ 'text-align' ] ) { - element.attributes.align = element.styles[ 'text-align' ]; - delete element.styles[ 'text-align' ]; - } - } - editor.filter.addTransformations( [ - [ { element: 'p', right: alignToAttribute } ], - [ { element: 'h1', right: alignToAttribute } ], - [ { element: 'h2', right: alignToAttribute } ], - [ { element: 'h3', right: alignToAttribute } ], - [ { element: 'pre', right: alignToAttribute } ] - ] ); - } - - /* - * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor. - */ - function configureHtmlWriter( evt ) { - var editor = evt.editor, - dataProcessor = editor.dataProcessor; - - // Out self closing tags the HTML4 way, like <br>. - dataProcessor.writer.selfClosingEnd = '>'; - - // Make output formatting behave similar to FCKeditor. - var dtd = CKEDITOR.dtd; - for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { - dataProcessor.writer.setRules( e, { - indent: true, - breakBeforeOpen: true, - breakAfterOpen: false, - breakBeforeClose: !dtd[ e ][ '#' ], - breakAfterClose: true - }); - } - } - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg b/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg deleted file mode 100644 index ca491e39d439c88a7b35f5dada84c7a267b10585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33171 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%0Aadqtfg91 z*NzIklfl7kV=)9Uhd8RcQ3;`#Xj=dEA@M7stSAe(Ci`>%7;Cd?79^KjOVJ}@@<l=A zQYa3|n%xNhn6C{$A1jWx4Lw3P`CQ%PBWwXe!JK>5g$rMybdp-Mw;ra!>e?)#rbVz$ zWh7udt?4>zK+GQQaS?*Q<{eW@jA@ExYUA@595-Nk>I1P@Rlim3(*(OoAGrdI4nc#9 zhkbEfyzZxI;x@pWk6e+v)IV+((jWUHNC~BFJhe7SzCzJsF3dQP{lyekyd6Lq`PIBO z=GRsEDD5YJiHgS5yh?xb*etl=S+VdiSrd=<hwyjYiVof%inIG}Hq?46sX_n_#G@dg cJugyAZ=E{!F^WBOUpU;_A#(M}_21V21D0IIssI20 diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg b/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg deleted file mode 100644 index 3dd6d61fce2e3f8e4e6cf18d1e02080bb1c533b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26238 zcmb@tV|ZmvvjDnd+t$RkolI<76Wg|J+qP}nlVswF%?T#S&CL6L-#O>!eeUhG_I`SG zmzt|qRrSaBj~xJ_<X4HW03aYBfZOK<_}Bml1HeJSz`;Pl!NI^GAiyD^5uu@>prBFV z5nvH9P%$wvP|?w`@kj}<aY%5{(Fth?Nyx}4sVK1sXc=fJ7)U87DgF=vf`EX4hJ;3e zhDM>lM#rZ3f1N%C07#HPJHY55K*RuGBp?tZppPK{E&vDs4Dv_Z|0W<%V31EqAwO%e zJ}dsD|JDHjK)@iNU?1xMSddRdL=eQ!l4tS%sRv>p1)&_)kR{=1mb}`QqxQt`y7b8D z`4!seczOAx8$H|H`jg)9rIOEZi@vb_=sbHmEBj=AB4?>?F}^vdDmZKc7OU{Kt?7R# z0sx?WNwD9iO*t@ZG?}WOS29kWytXuFn~vRJ)c6IPcev0!Gjr(PP3xO~)|z-&cTu}L zHy&O}ttqazkgLjA8R|^}Tm5fx0Dv@98nQogM57^_Y<qS4aYm<SWJ+n}+3)w6yL-!C zp40lvOSjIaoJQM>*3`o7zGl2sPJ%4Z%l}K{Q!Fyj874_^aaE<D6(zrooT$?efLLJ4 zQQe6fj^^k*z1OdD=1Y9@^xK=sw*TS+_v<kH`v6)Xvj64t$C~0%(qdX->GR^KW6Ies zZkP8D02!AUs|EBb-2=vy(_09#1C>XPsCyT+6LoSU--<0s;i*@aeWtU;UtlP|BxC>z zunAg{NIIh`2;n~zNNuYW?^h2smVGib=36mWD@l8~N2?_#rs}w`SuS*v>5g>}nf?I< zB#?pnL4p586rcG36!YX<i7m%wy%I>w#d3Z>av-huOpVE2f8L8sa>>|Z;$U;NTudCh zU#YGvR3o9ysIs(3>10j&ml$Y}G!)=-ZhWS!hv@h1eoszY2a;5sA3V#BYnONUVKb?z z{amS>4+xG%N8XD|D(>8#xSAbP7v{C(a=KbIO)A~_6r--8>A-$}iI4$+MgC?0z~0+I zn>ckFbFIOAt>MP>qJ3faI%&zVK=%Zw=BjP!`^&pEs+KPBDrTzQIplIO@2#PEM-I$` z{|F-utPhC)hY$d0{^*-G`Lr0Zw&jq8%~IGSF9GMgZY+83h-@$~`_xULTVrkEaI3fV zw4@rv#q{e|ZM@#p#@>7W9rW;@Aq4t@0z?6j_?H@h45I#y`()BF+u<S0ZAu?fI)1LQ zzS^751zmkJnBwGOv7kkHnTUZwBw@0^vG(L1r8FU@l<JNQSVUS}Buv~dElwovKcWF! zsZI5Y70%AejuODV9_g_bPqfzUntFv@sU?Jb4i1}+#_drFn{mGSl=SC{X|YWAruF4y za(!6ewR?QEWuAQDd-^^7eg9zxR9XTBAc2es^yO1dWWvusa1rB%-GZO07A)Ua9a~Ms zmY+M9ZhOV{)<#!DFfUdPHb+b+4RUn1d1#hMaO=gHrAa6ldgZ!DTePLJ+E>_4op0Z$ zhg4r6=(bs%+PmEVz+Z?(z7XqwQvQ>`GFISpVr+ujWk(_;6<6o^jP4QGZ3Pdy#S$ad zw%aFr=?=KDv#8%T@A$Yg&%1mJvClRePxmME7SRe0f{z|7ojD$M6pxqM7qLd#jT{Qu zkNLRu<~Sdo6NY`d1OVXx0PsJIKukKpW`401ZS&D9uh?akOnDRJo;jXeb*&a0+%|E; z@#%>;*36%Hs4uzhuiy5p4CS)SZmB#z|8DsJi1z4$&z9YDTJERx6dtzSA89sD#G<uY zzke^boYG$5-IRlxIjXhY?c{ye@q%&575mH5@9#f+EA#gw9e&PQeBB<En&g?ZyTmh> zv(UJ+ADwEyu8!=Mu`V}`R>zc1&F_uE*IEnR@4akzG>&UlAKGW8d2596O=9bAu`U`X zZ%-aaO*1QLSuAFC$v6(M;u)B-zCFB~$~ElQBKLm(aR<}f%o+iJ6#s|s)cGT|GsmwR zckA-)+~RqyW&3-@dibo2?p*p(ym()=Ol=Dte&ORBva5>YyVabVp1|luOb;9K*7hS0 zNpy}*uWjBtTFc`t-*L+m;*>X+V_8lsiv+uI%n=2s$OAo@vzkd)xs2;B`l4G*Zh<8r zWFq1}?FGvHTJG$@dFe!MEXQxlE$3Q#F;nW1qRsU}pm0cevs{fq<vepGmuzK!pXG@= zE4?~**R^Rfn%*f~HM``_jiP(9*JSVVZo051o5;bQ-DZTAfP|F7h#Zy#6^<Zx@H5M5 z1@Jkle+CtbY||%M=fuH-mo&PwUOa!Lbh7%*M>fF4FelSz_^y|;k?DOR`|`)-D?aZB zAh#Ctfy<kDO5^9%!`>l_Wi~BOM0+=#OSapJr={jmM}3lZKd`<KQUYk7Bmmvg6edgn z0D$~t1A4wh>&&4=y>M~6sr3Dk$2Vzrqjmad)`yuRI+Mj%x8N#jZRV|Fd$9G;TdZHP zbit^W*Q0HQ1D$c6wSk0*&NEjpb;N^T@43p&i+LcP5i%|<&JO^$?usn{g#71CiGuvO zAOy&l+<oOHOW`ZH3`i4#k&u%1S((FnHJ7ohESDN-jO9g)Q-CjO1TJnLb{c~cpu*w; z#M2Uh7*GsbOaMV)X>p&@0zeBSCgGBU)Q_`rRVD|q55%fUtFBSP84#g>^_`x(@qMg_ zok5ZPDFDV`A_HWIl3$QT`aV}+AJFH!=@T7TUsip5?$-x^`Bduhl6<^r{K5<V0!Ktz z05R^1pXvO;{hfPRwm1M(TpCJ)T7XzYT%3pqnfP<30R6=N9D4>*V0q>&K*Hy~AwXU} z*_kQJJSZ>7NKEzxC<lF_zEc5^CV_$s03`!J`2m0N`-AhDK>Zm&kpX}cM-x(!s?P<B zXbea~0i+=hNrL8m-hltSBR=;dzfbTqWFXKyX#kWzp}^<U|L@87Q;nfV1ONjAfdGSn zfPw%({;>E|c|ZYRNXRHeh^T}D^27{`;Ame2Ntl?0_2WL38^}+U2M7%K$@({Y|F;pa z@V-XB-x&JbVBcx`ZD1HQ;@lzPG<s}rGY_A81b2FjfM@7NK(2KHexUC(f~CWb@dV8L zsn$At?hSb&XY_lH(#e9sMCkW{snhX0NB@a0_zm4Q^Y8;e+8guS14G83#~5e}JOdU5 zvC|3koo>uT@F%*%7|r&<ud$qgwI~>F!)n9xuOM|g0q5vPN?>W^aT=3{>|@z=x(boa zpI7}S(SJDeXNHf_*6A>Q7B>1D0X@<7+s@hsC}Gm4^)>z}Ir??I4f@#c^tvmN<c0p+ zBl22?l#$nHLgzn2Dv7(yRlxGiqgG7%8X~C})`l$??RNn-R-cO>@+{$W1yuupo%9+j z`%V$x8G}dTn_r{;zQmFu#gbW{1)g}rbh}rc2tG+|D<mlZVE8)nU8mtI>=&1NEpaLp zO#8%*pB0rgFDy{8KuCBECZy`+djl^fUUadt^It|x$Y8#d81Uy#WqDb_lj^8$RkG3w zOdVLW;fSi3EhjL02~Mn`fPuUx#xbd1Uo^Q{BK4@fRGcE=fqmJ?ur}jZj%VHGp7kFY zzEM_8#av!=2|f`>Sfs*{kJEnR;krgV;!JNP4T{@?i5vgwxXlSfKXB|=uE{17^z1Jl z5dAC6x+_NR1Ay_k9R(am&ZKFXg0|OksGbStr`?woT$A{<&z6MS55*ZQhUrY!(t-&y z1;&V5R@$od2Oy-gLc6CDArr0^uaJyEpL}0_OXVD4NqWG1>@Z79opK#h(KJxDAGT^A zv`7LwXv97EK4*~)!@ok%UDv+;hrK0<Nx3{#>hKb_Z{zoGi6AFx0g-|9DNofbB<O%F zvj^2L!f|^u!kq7Xr1f9d6!2WvY;~UTO1=FZM_HWFvW1l-=WX{^r%GliebQ=Vd@}sW zRZjNATzL~#q3#f121mB2Ix$%l)QdbNTt>u_7rQJ|iA34z(n17NU%k{Bg;NeIa;Bxi zaiWgAkk`ps_79W><twK;!c|#A_8Q-bIyXB!@~2uBns(G<`1rbNdE_LW87gOr2j66b zs5PG2F4#`0tlQK^Jl%XXikW~lJUVVN5=&vjj;Ka4)6>&mPGE<>p?ph&z#I>$CFxOi z%46ZyRlOKlZ3>Sr-FrZW!Pb-uVnmc2yW*=<0>NY6C|P$HH;%*?ozG^8At|JB6^ECO zV4wN!d$GsZHEed9i=eqw4D`cqO|`#>#&1_d#O=aQ8ybIXgdv?tYgeP52;_?nqAcf6 zqYZ9b{OHc!5<8e2l~c;|ZqfV5-T4oIY3Vm0<k_&T>CSIoxjN;=_KI=74e0xU8|saa zSn;;pyX=#Uf~dt!Vy8DykF#mNqoY`>WtS^(**qEKkRmdNAcMU%jR!~UGutRYi;{Jx zI4xFnCWllyRa~I2<I~)K0JL1jHV|%h33iow3AIgvo7r0O1@B{bBh!%NRJ8k;B)=u4 zTe+)+XjJky2!~r$uGEbNM_iSbF<Yzq#<y5!e)Z;jy4jwWXSeie^LlfGAlCFgSS$5O zEbHAVU{A-yRm7&+ALIa?1>GIkV@bI&spK|4TERo`(*-Ex*Wr}Ze~;v<cnRCG<3Ap@ zpKjnWYK=P3-wEU0^PCO9qe@=W=}0Z-isS>+2_ZA0W}!AN%PEa^3~m@A&2Ux-SX3>H z*lX!I31UZG2(MoB1}tj3MKkDI)s|$PoGaly9brXnw11`H#9P>FaX}E$wVariIaNDp zNqh&=i@|Y2a?s1~zR!jSy;pR^r8K!UJ6i=gpxUu*=4A{Ip9$5)L@p6IG8|C&YMsT+ zSHJ3DTC!K{@Pk(xm^5x?%g^Mgm0rHm;7h3IO?uSgS#o7ZP8`ddvXKWt>GW_3$80pG zz*x5qv5Jexuc38iT3O`&Fp4?`+TDQeYhoipphPZDznDx=@NgIc>1;guefZq3(9h2y z@JXTsO)j;?v{umHmO5o`lVX(0)GVe&ui}K@Di<;Q)k1h9IPO*AZnsNvyH%m0SGW^i z2FIt^qa%i!RNt9W7dRA%21{g0azftqn#bUH*=USCsBM%zVld}$S^B@`e{DM8rRDTV zW09>!!@(=4>7+qWq*GR9SFCe~qq7^cw|^U`RFyRC&X+&$)hweRTMbd$Fb_tO-R%2v z5RsfMf{SsI&#6)|f7qAQ6&gz`>^#0{ASVA<G`#3;nebh<*g)f`mZLIy1xKu;qWpH( zc^^J9+J#-`n~~MSA@-6K9&;l1&zC}AUni9yruNtRaAJ;~Gc|3YlD_fEv&G5y)4VSo z<48C}d=~Pwx^YP{noyAhtq&UWC0G_wiE0v_z|t~ZXb^QfEc#e(qE2b$)u1zMW^6M) z6FDh0@fGF2CG;DN$isieeg`I`aCi_Al|nWu><m;`@B|ll>q*5`@3^RfkIpFckBiB3 zHfGABET9dmMetW~#ZDC!=~PvxHeZJ_n2t;^yS@7zMpSN=@^Ui`iIrsb0Z>b*DzDi} zQ10jHEGH|<DMKgQjz4CG8BK9{=$qPWTJ3L@tW$85QzlWch6h(Py(nNGQZq3BR-J6F zm}*R4<4md=+-Ikj5+cO1ZlRVQKN=CMu!Pp3P|7*fO_a@1tMJv{sMG}^$t5{ufk!g! z>raJYk4*J$)>x)=8>HKDnylPL+3}@%HI0Q}(`q&CwKwUzNH#6~?l#b*fC9p$`5a-| zR;CRFoCD`z(aM4j{z;Eh1u)`eC~lfsDjg)udZ6*UVf_uypXzk^Is2|wxnm|dGlEFW z3{S*MtW<R&OtOw%+n4?M8BULn*UTIhuR9eGL|#+T!S2O~2Nkkr1B&V8bjb~^g2j_K zWg2H_`z6_I#Lqv}fdx85CLhGGDpzrBYUxl~Nux}jIXOzkP<zoIq3pxPADMAS*G2TH zy%Y-=44I559-G1`mD)Kh`DKKxEwe?Kj+m;=BfSg7gr_HdgJqf|4P?5S8be#9VB>ZP z^N%xU&e$R)sEfAX#YGuKUBe4(;}Fz|IOLjfK(q+ki}tvz!xSsaazWQFDyXs58HyiR z;pQO4bAOYi`qog4(m+wHA@YkBi}(yu2dkz?8s#OAnN65%1m&}>xmYjp=OAw-Y`Nwr z0qTJp(4&Tp^R=aZYfH^+r8K%~%q<Jo+av>xBj!}Ww_IHA(%-!$(`|JmZ{PD?gP9X| zCpo`8T?AAm-6fgZ^5o8L*}lG-(KbkV)fgK@_@)?b(7Bd+Z4*8nsn;W{wM<6GEGFXP zycn@;V!5Qgvg-Qxlw@nEu4vgSJ-?3r@E%FyA8OLxe)F#6z73yoXYP?JAqN`bM4w^W zOt+u<`SvKD+g{TsL(um0&c1QQcusP2zRz}p`BU@Eg}<%0CUqm$NH0`r-8Q~yudKNk zDjBDpv$;tsg;}jC!{$}fYcwrw-REo75W8%?&v>J35yM%A3R3S&!la?8Zwo20W~`?k z31+p>M2c#f<8oGZB>B0VuW(^Df6Is?Ld5o^Qf}eJsBdbC9XhOAYV5;l#iNR+x{U3l zu6FhI3+l|>2VijaQ(GlR0{qcc!GQizRX?@WPfHsT2r?oe5u*Sx1CyXUih{n~UoG|1 zaK{g{C+SzMMLAA&z%wS_tmHqSTz)82FE;2`t#G{`j60b1mLK#8%yah!Db^)1L7DKy zKDSoBkAmFTK(vmz!+g;%(pSOJEib+VC@)-j$rtKXU*ucCnp4FUx}SfLhFg0VZ~Q>| zyyB0%Fu`gSh%W!R?<z7gi{Ndo@>%q!xWogj9F5N6546k0SP&}mld2WVP;schStNjC z(bUMyJ|i23BDW;7k?@PA0h^O-`ep1st6s6*ArhI_cBJD1z`%8ha$(}QP|O9w7dhqH z6`|@AK{26Boa7gzy=;}4O%UF^qVmheuZe!<*h!j_bT}kIyO>BIF-~SM)(Y;AHS)?7 zm=^g$IAWM!^6D2%vi2iIT!~TXQ=Wqz%-KDN8@q7tSWLbnAArw}rTo*epXt-S`R`}O zKOM`6NF;zlNX#H8ufSx$Y-j(sYk~iE?GKfHEsA=f7^_oU<$!7k$a<uiY~hGD+)BX# zT7{WpE^U>*1Fie2qls)f9zt(-r5lH0!3)UW<gNXnVuS?3W(%BfNT;bl_51ABF%39L zR4lu!w|m^{^iH+=dvWkDeC3uGa$cq|+xO*z7G?;>!oVmv*fODBc6-h>JQ*qiYKqV# zKgd<eR4~SZKzGrgrf(DcHiXD2+^h$ZSSr|5fVnGd9v$Ee%!7q6pVe5grw3RUD=^TU zzUAFq6c-)nEq=eo)hB}hqAsV6OFP@3e3HAvr%=i&Su7ceoH%8MlQF~bt8ra|!=C-N z(wrvG#O+%8PW%|mSFKHN{0&XaJ=qbSUB-Kcpy>#x5y^}{<un;_bD+#x^dv`|1<thY zjV^V;()zwH36vZr3%F0T|NAB+6F>$bT=w@b0dHzav!EM09pnrWiCxIKT}V1o0SX4t z34LQ{Y~ZTvUja)K!((VfdiRmxdOZ{jSwCkPdyR|mQspkdL-w2E&=zB8ZHIw?xief2 z+H(YcMdc_B?E*Y!On0(l1A#$(W&RGS*yooW01OBe3=$F)6cpmmS^)-tAR!Ymf)WcV zAfhlC*b|Zn2+1q@$D=YBI^@^)&wpXo-vtv^3Q#t(OK^-!EZDog`S*(toFDj6wm$cz zw)P&sckbl_AZ+;o5MsT531++7y?E4TU+#tcp}2)~1Sv=`IDV$JWi{{++Pn>>qY?<u zxUPvC6WE1;Hl>0X$I(|cZe&jWOyc)g{vvMfM~lJr^~V1F`=$x`<*);UTi|N<%znM( zJCYV`)4^LI@l`k8oKJrh<&~cxqRdDa81eHfvs}9FxCOK@%Z~2l%uJ=3T$FUm!b_fJ zw~nPasdDhuY_pPG;t)LJS~4jQGk8(f0y`=V*B#o)Hy%+EJ|Smmb%q+lI<ck|4gKVY zSjft9?`%uQn)pLM6`l_4c>&sErEO4$lgubS1AEP|{M9^QJ1&IA74>5EMTP~9`LVr> zuV4nYf|O_7jAxpzkmqki?<?^}IL0{uL8ZQX>1#Ype`Z(D-dO4M-17+gBBElrc?k<? z*_1O$u9kG{n{cJnW_Guy;py5&@pZQN#<D%-jFHQ&MeH;fGHQ;CY-45ta3j-{Y~w=> zN6Iv1c(fwWWJ=?AGK^|gwQ8u{v{F36O}6Eqxm}b`Ux_Y9&TVRk^K?hP+tjpF8Wx61 z&lq_?c%%u&8(VHe588tuOptja9pj)y$j}F#Vc!Ry_f43IXb<J0sIQaPv!v59%Lsxz zMllt88x1hWZ-NEe17%knE#nfK4`{@3_LpM9YK|4Cd;lo=>s*DQ26jZLh#S_sQMr)t zG=?E|QIqIOC#dE%kFs=_vg!z9{M;Qw+LCd>d#2Z3i`V4>eQyJG$B{(0c<0R>Z9BLq zub>6V1;JwRBZEqcjO8Y%N<t_(Ew>0e>I^`qSoarc!!LfqUq(A{I0lNZKsz#|$R)B} zB4;!`8gE)J7IS!LMYKYCUu-mm^2lCEwvwnzNLA)AYBa*&ONHH0l<(Hg;K@~yIK^WX zdhcST^g?#XJYa`J#P}7>gWu&yjbNP!p2i4=%HRRfP+(&!xYoymdp%c5Imlt#g-S4k z4nZiK&s0Ngvy^i9)T`*YiYrVa-X4)>8VE_gYZnAKl5b5JI<-6<qOv7VVLS`<c2O@f z`B7XRcce`I+5pDH3fkLh6fIwX<OTAbT4&E}=Rk;!UmhkcWV}Q&P;yBMJRc|fQC=x5 zV;)vq9xWF|P#D8nDOhPaC&nlT@5j3+o6}tKC0}~W!3)&A=nQ8o{Z-V2(Fle}&WKjd z^Hm^?C5`^=1Auv#J1*#$bKDlyVm?8&#;EHJxDEH#y5i@xBoJ3S!&U;O(SbMv_KN)} zJ5~yEzF7`J1v;^ceTY)-aF~v+7%xX`*a-%zT4e-Ql5-Au=Q2THs+XlQZZvhza`&!h z+TA89TgN$R+c(smU3cg8bLLX`A%w)GK8-D~GbhRii8DQ#(i-RpzFQx15Y{PVZRo^> z@4owT(jmf=*)*5Fss?Ga0uuFkP#=@I$VB}Dp7Mc`)G4*r)85aTg##QyJ7Bd~KHJbB z-#y9=^3G3^;12uyU8Xqi!b-h_qRG^eqg_Ztlp9c9%=~pU#000P`!g+PDRF!Oo?HW4 zI9o_6r<oWr3oq!Tfx|u)IJV6MtwCzyWS6TGC7fn#Y69evm}L*u`IP4r;0N(m{eS~z z1VDoEx0Finf{YJ&kUB-e+wfvZeBc5dc$`l-<%;5CI6FZUkd&MkmozDei`FK86A&*2 ze5n7U(16UZX1_7Xy1B5bIuwh&K#3f@w>irI4ySlV%4bpg93Ad}`b`WOyUIJG>wpG~ z3SFQ28$LZ>3Z=fE0x-lXT*WE2TZ^%eehwxe@^Z%RnjOM38N-L|;|yIY@FG}R8f3yz z1a?otuuU2BCU$(I5J?OVZf}V*&~;<SJq9#K;l~2@-Br>+bSYON-q25X0pT*#>g|V< zD}K<2_)@$xs06VTUBv}yHV_@S-!y#@=oRMEKv=NVO1lt73p@D2Td&0JRSxTqkg9l7 z9{JTf9D|u#;kd<CV%eJc?tJD|Ss4$f^^%yoN}z*O>+n}=Z3n>U<ym+{q|9e(NHc%c zqnKJ#(0R;1Akir#yYRqj^BR=KZ(~M1t8me1jB1N=8s#CuHCT6^NV|%u@t7o|?w@l( zmQ-&JfG>!C(J>x@feH(4lx0-Sq24ii9(^DC;bOGa6e-gAJtO)>WRJPThmpxxtw9v9 z3;WAGS<sc+FQ&ZJ<Xfd<biPS@4UOdf2v<wqQPhCkRjJUb<f!+sSC%^(k0b0FtXH5c z!v@*+=Fv=RD+XjYEHqH;z;nvbXcEL|Gxt%>F}W)Y6vZ|2G1v)AcyR34<#9rss>NMs zEwe8jm&HrhNHkW5bH5R=qgFu6Yk${Uv>w1wS#u4s4ABnGN(s|=SM;ylt&|mlU^N>y zu9t=(78%gl<_eJT$?KX>u$mFjlO=Cnhpd^<>PgV8S79lIxJM(@nRsuna6db_2L9|- z-8}&952&W$l|k^Ln<%%SEY#T?V8_%9{QxutG>{@1e;TLyrW@4=!%*)W*PHWx=W!6C z9wdUobKYD9w8H4lKJvwlt(Q05n^2b>S2;U^VFJvd#l|q1MJh*0iF+vu3n_mN#CH|h z&nD7}Hk?HEy1mfN!JcGD*$Y_0(V3dd@cM@(6T!h`s3o!AWO9~P>g-?Nwsi2aGlfQ> zB>~CXyYeZp8ACU%e%aY0+ln^F6;a2FFwY1?FVtXGA*)k0IRlY{q_i$vX|mi#P1X`K z-2DKwfUZeaGvd7OPLTPf8R=Yz$r7i`PbvJInstJTiZ;ItHvcKEW3f3GO}CVoDTSN0 z0xXk;8^8Pzlf_-(D_+)XR&R%UnK(f&ldKpJg(5lZ6W>sg71Ll13w_c1N&aPyOlG}> zip+cky$UNL6LigrTQ$vnv7>sED_{6&pk|qYgla*H@b}(Ygz~Q!kEWqBREy?f1Cs`R zWy>HBq?=f-M0E#Ph!f~9<4h+*-OIP8U;3IKWFB*`AWV}(fcHko7>fpKELt^r%+aVB zCC@f*5UVYFaR;^}_kP$1vs-Y4VdQtT84Ql#NuWoCROya0yD6g;7cIc7FNAc?`xUtj zVl~nl@0y2@S?9T0q9xto@vZ}WF_Bl7hj9-9Mndj=ojHU}qmVOZaArgUvh>8KYYJ&l zTu$XKD2d$n!DnpgHqBd*5-iUm{Z!g(QJ(B@gnY9!5}Gc8wfp#%-_A0(a+ZG+ejkv` zR+T;Wo3hET(Qlcm>J+p+pr}{}rD=ikX4mX+6_kjygcB>3L?u>Yg;@kfcFJB#Km8TP ze2}r&#IHVOLv5~r>Q_N!xU$-|f`t_Tu3e56-eVsJZ9cjW->8}2pbm{$xa|I^2kTr= zqko#<wW_uIP_>~&=~;rkOLU&9bGw)p%TfEK(>5~(M;Rn}RzNiM1$xb$LF6^-t?JC& z22yNQTi#3fQXAQiy5>x#K^NK0K+)DLEYGILpT)9VAiDObN^+2L>5-!KNs?c5{b#6% z$19Xy^i|NvfkFL~Q@YhlQO*dmq>}CGv9B;c04du+T4rRq986?O6Bp3e3`H(yH$^r9 zvQQ&+A-Z>2n)Tc>lAD+%euGOo5s^_)it45`?!ru^YUCG9;6SBz1!lzGhEI#e$sLYX z2O!kRrH%4r=I?@$jir)Zg02YCLmm!$(Cbe9aV`*4X^Y+Q<-eUD12=9h{m#R(Jfh4D zf%RzS3DUe1lG+28avN^#9Sx$JsY*mY>sjb$OuLK`I~67>gbl>gz9qeYiTknFPda`b zpfisn-?d-qiux<Be91#(y6_FH;_VX2>PDiVN^lpJ3XV}>ggsdK3|ND(^;u@N0|weT z!!(GIGn<`rDNHMDZ0^(PcS0YMKITBsC6h`DR3kyHp0wyHvP^4_#Co2}y*$Fl_?vG6 z;hnPgdVy!3*?&-!ph(Ji3vL}3mLg%qs>5cLCDgP<&{`^6f0IL+JmLhkt~Gp!)=Ehe zpV9jK>QTg&GyUZ&YowNYJEY}fYFt;cuR1MlsdSnhUEVBz^$_42S4Pkbdx83kN=4J| z2&8xY>ZO00mg4hi%WnNXSlV)o#C_zqeAi5N(Ul1PE++J*vJ$s`Ma$8=!YO4L3pe~@ z6RnQvt@%Pc17-LIOMPNHT!T_u@kBeEwbBvTqx2Q6Y&*m0c&;RJLe}Nzw6f||os7ZT zitC68oUR!{5@{7(mY5n%zPbHid(6|Hu`asxM|hb-_v5WyJ~!EfLn|o<l8dtPTmw$S z?oMhTA$;{Flldfpu$Z7@=2kLO6=_vaBig@8_3h9iB$ZR2hE1kS?yKV@+d<1+F))kQ z7>!7!T;w{p;op)SBW|MvGMlvVM)u&$uYBfA$Ko2(rncd2TF?}=qmu}lEis{=Nt#jP ziY?sINVC9eZi5y`c_p~l!*p4RIUx(;3e(YI7B_y;;$h!+^=J(~9G?aTNX(g#OKzFu z%P^|f=AnUg^!Xv0SG&1>^(Ntkq45~`zCQ5*pqF&ShIGhV{xY|^<p<t<J!8Dx6xfDS zkI-}>OC=-4SnNe~Eip%R`2l#vA^0sJ39QzbBmXUYJhgbDi57(~o~32(E#3LtHSL|w zMTwRCi$gfC3|Mu95VQQ;8CFK=AY)r`FQmD*I&jur@@O0u9D<WA%3X*~j(*A_SaNuS ze~*u-@)CP!J_dHoYLQXFT~RarE#fM&B?=OIj*)7qBC(RpTDW1)HR}<cb~zNS<p6Ft zvTO6wdtEKXmzFsN{Wo%Rb7p}h{rc-j7hCqnH^*0}$pa^x@@<@kb<C+|p<n$Fn|xm> zaYm1DI_Jk65UV-@)knYm^nf9C#!qgV!p<~~oxS%nS47?iF<;*-w%V_Quras{p`<RC zQ;~>NM*b0G8_6R>LhBkTdj;85r(8`9yf+lhUQh*exiqTRIPddVw;}cvG~Gwlxketu z&0V3Nb#sZdu5c4=c^y4}7qdFS{1d?)jt@V8FjiuXU0C<f03s#uHt0oU+(dm0TUWnl zzG*@ix}ufqm#e_(w-k^!N7r5O1=7F)_15u}RC>)sc9r^C?BRxk`V_ey$e2b;Ep~Hj z1K6H|n@DE{k#zPPTePf)l0d(g>Rs_oJwHU9Vy+48gzr^GXR|)uq$&r6L8*cR0T||m z?iEo=peG27&5o{1Hv0oiLr-a1O@U)aryaxVYLy3P2$=dKCrQOWPf!(`6$(y`DhO#h zR&l+7I2RX8>z02J{r0J+9)?)fUtk!a-x148QHJD1km!2U-jqYAUfXV~UBSN+<covg zNG9bb0ux)AmT#sIUhR~VxeJMuRk^ncyEF6QDAJ24KkqleVvue(+;(e02qK%MtW67? zX<a{faA~Gwlr-(3aK>L4reCHm)@NBXRBbi`w}q!!A8z;=UaAfKPDZ=t7uUVUm|F?U ziWQPZDUsud_rBPmeWdaeR^@vx<`Hh}%2@j4ipJ>Z8IqM~osyH~{)KyvwTYHQk~M$c zQnwX{g`m<Pfofw>hO`c&x_Kg;PPD{hx43~FT=yG<(gz^^>eH%3gZODh0tWhYE`$9W zDhC8WB4QL&FhI2TkI$E{?<Zssn7`h=`5(_RKhX>A6F36uG&&-<^rf(S_S%o^lONgR zo7v;rH^AcUzSYFu#0LYA1W0bzF+GG`lbqQnn{UX!y1W8DEAw9rc2EOO)iWUaLw-RW zI%&8vXlBm>+Kk_+BtW%$OSO9elPMu0QZSS?-$$@)8SwRaMz#Z4r#eR^8W5S@a~%#Q zQ_J|2q=y(xDiuyVQ<N!wV5DzlKQUar0Rm4=qr3Hgg}~}yO-Z_j+cKzQr2j}eavd1# zt<dfT%CcS1lUM<pDRBG%+%gIkEvDJYm=I`B5h(XAPhmM3w7UnDhd5ZszMHxL+n!~l z(&UU=aT%J6<J+!2Z@HG@U*+iq4?te}VxgEG3!#c$@;4qb%Hb3*Sv<#BrzPPfBX|jB zv$|C58AYS|@(7ev3SGv~_k}H}_E^Sp+BW|{P}e?&fZIG<_yA<P1^%{lGjr!J(^Obf z<-4gUGn>7FInVbXFfRl1oP>6F#IBHmL<l`3=D@cNQ$L>{a=id~G_@kWG7loM81HYb znhQo-w;s6)o90gc^6Nz`%$?Pa`GBUI2L?g!Q2R$u?`X{mmel!G7yv%`DXeTAzAa6@ z6AePO_|U}ofWcjcicMkCa7yLq-X=9)p7W=Po_fIAOT1sov3%DshNwxO&5PU@pjvmU zMC>B>_7-M|eR^`cirex;C^b0L#u}gNMUlN5FW&uXY4T9uq6>6#DzhIQXwuV<FBYs@ zTycUP%*%Vqh}N~l6p%Tvlj-BSBM27(=FVWR2(Q$4D8Sw1f`*3pb1OEI4<CTWU3%ai z5o0q3iy5q>bMJ$a9^$o1TJPDZ8TT>Yu3~MZjG5kZTVV47y~Z+&Vmq!Wa^RZA)+=x` zB?~-5lUfpou^08TNIvK^Ei>6A*7Pu%C7*#0z%qJcc>ktf@d*-ovz6%nFODkwgiL5V z5><|wT=mhKftAaWsN!RPFFnbb8D1h?ImXA;EzgPDboZm<Piu;}i6P>P>EgTgD(-&s zfI4>am6uEa2#dpPEn_{0i|bI&C^#yTt&mD)C@1UeB06%FEM`5*mgh9g@pm9EUkSNh zV><synq?SGf&M^J0YA%*HwDxk65|u-D0uDHz8(z8hAHJEg;*VeD|o#~s4XSIXI|3% zH1sQwvoMjakq1!ma`gdh{AL+1VHlYZfIoF`xC0X#qJBdnLXmR8g_}V*5jgPV{l;rB zy>sOrt951hphCtjrM+h(@|nn;{j(1_{+Y?L%EZ*POeLjPc=<I}U{Nw!H_fY5fG*s& zWOQ)_al1T@x;v-J%h9?rC?f$h;FNh?<9-mPZ~xH1rc(IqQ#Y)FnxpF3xBw1mN*NL@ ziO*qsQZ9cgXz<e*h&(h(a16dY+Vfn5`Nhm0uejAE6YywZR=2FdcgK=O2F`-g<6UB1 zUWC2M3ztlV<A%?JAO!lIR7AUJ{zvUpzJU}wd8#<_q;NDsurx}avNv<kLaOD^mlFYy z4*--%yMO{^ku|shE^LPY^;{H(J?*s@iKF_(J+36>{M9wK%`Whb!RGE^m|ku!G19a; z1&y$cS2MjU!Bi=fhGElBzJ0#XQ08ynbd5)s(3bEpRO$)LSLj^cm}<=Rs`;1tV3T)_ zml`h`<Ii*z1gq`CcE!3J0@H6Z70O+$-?*a|Da0T#$LCtSylzfvyJxV7yj<W(*3vC) zfAj8u&ArLpGcBAXw_UqB<D0-?b0G+1s46QH(lcbQY8Q7yUfhfE9xLDDEGPx8<AyHc zQNgjxF$E6KV6v}~K2UU07jM{UXtD2b8Er7-#6g?M(|iEd?CdRm&-jprDa`vE8m8n( zdC@kb-C=vt7kx`<=+;OWA$Y#zyJ_m{4COB!i<)C0VxnsQVb|Hw_5o1Fa*pU%RTFa! z)alm`9l{=|ot58-$uK%PyB-p)uPtGN-6n+}Uov^YE3Wl#H}lMydF$W<%e!VIKvagU zMZ&>bOuSw#LJnww#+ZTF)|VEMYicF0u{8w7uR;h+&q7*NTP_cTV1WP0;8D*Q-#>hK z@e~vZUv6JQEo+fY+{E3?ab5ls=?uHt!&h7!l%x%T!VWE`;hxB%bbKC5(RIwDqdSxA zYykjfh+92+v^wa}2wy}B)70=X0bRjj)_IrXMQDhwKQ9lCC#<vwzMxNQa)&^E&nI0D zV#RgGQ|rQufe(VWr%NM*;4kejCoNDn>(Sx|*)@N*DiOnhZpM~XEt+3=wDcleAvOJV zGaT>Eel)uvK1?Ulf9v>}<Aesm-bT3@xN$Oo0a~$C89`tsFPR!9nO<C<!;l?v*v92| zmS8h--1akz0&iFj_w`Ps``M16tqo$GrDZ1TFLK@AY(66|WSihk?r6?7#sZ;MYN21Q z%IVw#2mQ{oD3rarePVXXDuZ)SzW(-KR}iF33CNI*_ZhpjXT(9zEZ#H8cQ;QDZW{=$ zNYx&gDqT<#{X)_5uJ~Q0GWUg4vBW4-`jWnC$qRVZT)G=Fd7Og}RMxbG2Y8O1N^r0+ znd_p)nTl>}#CQ5mx+;;&oTFoL<9L}yiAIe~dcqHm69Uf03*2@?u4}e<MRl<8_b3bM zZnyg=HShOn4;$6whV%;apk{&ng}0J`t_xW%$-|oa{H0(8m&$JohEqb8-AMWB<|)ne zwhcOI^i>@@Luy77S}JZi4vmbfB;bT)i`F+ZPPI^RBKB}+l-l&Ma!uv->#7L(^}sa& zK&d0|i*^}SI^U|>l3dN9^c03#bga8yCEI`ZULtxJy(+=n`qk=O((AWe#P;HW8D3H) zx7oc4U0PNP7Ak<j)ivnwElj~-*Ky#dQsARQV4ynuc#My<lq6Z87z{6PQ_~sR9PFwZ zvAgxJ7X958RGDW}=M*to8;yvl>UJCIo<^xZ;vrP9w7=vN9B`u4+{_HcF~s+H5O(gP zna-w#+hN<6H5?j{9X>S_iEiMHmA-#Jq#728s-;KR7DB?P3m4O9fW(Rajm<U5L$02# zb(*?q%gnrGf!u%-mEeaUo4uWHd8i5B!guJ)5;1Wt(HAj&gTfUj6|el>2&Vf(0$Z<` zM9^~{KsD}D7`~Unk0u?zakti@zTIj$rDIN{R`@3=DhJW8ma~17B@^!a&-)QUsHgO7 zT$6;sWKM@Be5Sm4LuLt4DFmrQRTl0Uy^e@s?;8Y5u=@?kPwcB<SCV!hDfuiJ3V6s2 zo!(u;k3Xs`@7WB>wT6UfwiWe^mxvDTGLzjM@ij+QRW&djJIu6O?0Y1(?fi4B>C@Cj zDP_4Pos#a8H~JmFMyF<v@N!zY>3jeZ!21nkay|e8&D|PG5xS|edS*G=I`azyN3F3* zl0VvVh3wYw30@*5xMhQcjooQ*rws9_;G1L3xY6=}j%eNo`gJ1rh(7={Hq~!mIY<D~ z1!Wdn;GFLX86BGj^=i38bEM|SG90;c$&y}qspg{Q1}JSHvq^*UidEAL<YQbvhSN*n z?`ga4@O1$yiI$A(bTY&4TN%8hUxna)uDuDXm;l%8I^z&g)ZP|Owg5g2SW<>h`MHE` zw!u}+?_Qpgz}ZmVplWkSzpn!-RW7m8O!sc7<)LOT<gC`eJ=4NmlS;<8`J)d>$%W;N zg<?Yux4q{V0n{+f+SZ!jBT4&U0-Jrr9f-15=oa??FV-dSvA=*uSQLbA4Kmk|k^{`Q z3?%Y22OWlFF@HLaW_6x`qM)I$^EuyPtgX}@M?X-*Tv!dupd?Gp6YVyHsj&T|81)*6 zoba^9^e(Zyt}!T?7DZ-(R6N7jw*O@nabD49@8e(T7CI8%(Bo0e^~XmOiJV`aym_3W zQs(N2Jg!YweR<t?UM!<qeS~9p!k<;nxPp7AA`59h4kwc;YOwn#OA-l9qw{6L`HJof zvE5M73zQfv1o%8>GZbqTmyfCV7MZSXQysQn!jxW_pk2uZ602EvWJF#dOv?GI*c>F| z3RtVXJ+Nvejx+pyZ1T-QKEPPT_ZvkCZMcu(p_TL2TS*hC<!BbkE`?i_)efNtu4%lC zo*B`WvH!Cta;bK0otcPrNrUlXkxwsE4c+<?mZ1%Qo<g&ndOR+;Rf;WcS)<PP&`vI| z-n3&h!AYq6#2=}0&tc2PfU%N0t;x;pBBDkoTm04)`DzryYNuo{DN_r{r$Y1PvU8rs zjZ5bXtc-THUD1x8twqL;Wbhw=wAlm6GERE_L%pz#Y3&!@JtD>uhpRlE?*{t@-X!iJ zJ9GH2^i8_RU0)vg$j~B9F7Cbu+%dYiH<pF(N@_O08*)M0ab#;-<#UZLwNwMqCTIc2 zRNml#ZK0XQh2#+5n&Xq?+Xqg6MifU<(CXYXTHKNlnC(9hFzT{}jPMaU!PM4@7pWD- z@WR0LR7=X^S4Nz%^{mSM)B{{Lb$M;vr}b@sz4S6bQ5|y^f_&v)$`jJO{+;JM=;8S~ z7!zpxjt2i`U}>w=)C!ck-!$?iW^z<Gx-S-$Ua?8qJlNLnaJeVmFxvWLJ3@&O$yOXw z@>Y|8!K`6~;r>1#oP`Vz--JI^Yuw%tCz_;dkcFDLqVr^NOLwy-fO^`5k(#MhHZG;P zL8?4tWeItw^$Nc{;!X&^=8B@KvfvKgEp>-*MtuE?fm%u|VoP2cz49J^hb(DTzaO&n zVj`Ts@<J0)8GQn(`mei4&K6GJn04tq-AEns+ySIAHq}bdPY;5VzH_p48Pk#8=l=Y= zpxNA^ZdAr41#CRWZ@X(SNnF7us~NAJOX-z#-c^0DbI8$;Ou0EvTTomzzNuYt-sv|r zHMrek@Lf>hZg8x6Q~r@G_<rP+#a;^52Y@3P7}^AGQiZZg%8#g7r~GyD=Q1I<ZXP(O zM%z%}y<V`}-6%RpAqD=R@48CGy1ZsftC@$`<20Ebqi1U6?`ZS#gK+gbH7W;p1)jb| zNIB)=boA!@$8;^%w1auc>iYcyBn%VK-Onk6d}}e3-%-<SUv`qwW1)AH<(1hS)O4Jk zypB>fB7i-5XuO1)r9Y+Fe~rSoF`?sJE)He22Z8U9(jIdOvu;w4#<1b|<~z8K2&7S% z&04zvfzP4&=3%HOvt65y(S<wX?#9S(l5Fy-I=DPo1ucyN`2oPoLR#*}EO2z{o)TO5 zWlFvi97XrsOB-+d9<Ci(8tPiPZk}ZC0@oANKpmmsH0msKx;iYT!dN{i8+s!!wOET- zzqYupSapW{0pL9#fM!28;MlqkPl3&DKu?`{K(~C28t*F91wUO9M-bl=lU>B4o?#y| zQaKyV!uS4BZ0$9b9_DrxyTLUz<~#pRn}~e`k|x9`g#PxMfEC%J-ImeIkOAyPn&XL0 zIB}7K&Y%n4X;pUqmUr2sMk(Y+m7Y{=-f<q0>({FpWnmin%eT-j#)OTqaB)n8aVG1a z!IBa*e78_WD($-k=Ux#|g>oC`%^``&1ByAm+v4<<g_4Mi04zz5FJ7k&pAFFRLIAhm z^KA)I{8UcIynNA)7-EQY$>?Rb@au_rHoSyrF|bdXLqpl&dmFC>cDt=`u_ocy)@hU4 zW92pp2p?bTQDoJNB$$fZ^LUMExxw{>h}AR<P4L3F_+b&z)iXc6VqC*^JKmZZ37eO{ zbL{(Fu^J91o0!Wkiw^~lW9_fn=vAy-eV`X|c6u*fhh~^x^iUo#SWRk71WT$`Z@>$l zu%%!x!!XLaZKonL+c%=%mf)P{P@wpZS7%z|9;zXxN-nr!!>2n>2Mg%kz4z68mZWol z_8F%q6p~J(jDkTUygmcN^{siPJthM%iV%{Jck^QjBc{^&aT_f&WN%A6NXNZ-N!GWl z1K?Cta03Rkg#F+4Y>lM3KV8E{gI7#7Do#ynN7xT}9q3r!7b$X1Ybt&4b=k|0Ls*AQ z-FcB5k$&jYz&)GMW1O@B(M1=Abm4i9VDLe7;W-B-+o%XM9djhDb+G?X04zkie4dSH z456`|xAG?F3DVrLeOr8HElj(`^zAh_+sQwnoQ&xqkDg539jaHU?3MVMA7ff}?YPH} zTrmYgaXwK^_G^lPf!^KZ$n*-+qhAUtTi`+MnKTJ!dGvkw^O%txGD&Jgk?kFQpYfi% z+w+rln>k%-V7Qg9_x{;$xghHV^1#?8M8tqTht@Zr6R#??#!Fw85S@G}*3s+N$sivE zWXKUcw?5m}>_lrl9x*}mI-Vm2LPIs^-2;xdLR;g$VggpIfrP|gcyFjFgmsPMQ{o+Z zeA%uCl*()QM}}uwV*EE{8&$oIqeY_TYN?NF>vp^cb`c<osk*;@lRW=I#G0h^yGNSH zsaVTy$v&tOQ2hWHP;Ji(X<0+Cygu2#;O*;GBG5$WK1{ws%-QHPcJjB8o|iiZ!iDAz z`Pz&DKaDQ`a-*|LM)9&e)=l!MXUvF~R!#SbI7>Y}WRX@f&wYohLHj%u`Q-T-Ve|LE z=--ew#JgFZ|J*bVur~K7-PqLj<NG^x^#3jYlc^tJy73dc-<O=?0s0U8zW@!yT^hXR z@n~-hAAtXZ^9koL(J}~^n3;R`zi?Ro%@0seM>3`I|BJG(M^LL6_)k@XIAR8P!@ppC zjCkCoIH$P(K1P1o_$%3N>JF5rckL~U|MtHW0)`p>!oW_nWnSIsM|hRn{?oQmp22@I zefLSfaA~cNcOks~Ku)sUA^eN`u;t^RVl?I(n<)2L0%|u4`Y*dlyhG#GIgIWJh#q1Y zhP)75fvA5`ZoUz1pwsh1#KLz>BSO>cA#i-6?0%A+LD+PSj_1cBnK$hk3<H27_Wz;z z=YF?AF%>Lc^hzgbzQ2ed1o!~}f6MPCDeoRA3QJTm@lc8NcArH4gv9-Wa<sxdsO@b| zcnqRAY0+1SSw{$h@RwQ`2hj{--rVVy%)mfviy1`@p~yeY$Bs_vclfDQE5T$WRg!rT zt{Vgia`h<{MCBT^Q|^YfacGBYOkjTwcPzzcfYv9M+x=afxQgtT{-|J($f6vItFFTW z$j=_T4Q04NI4!WCsPzF2Q;a*Mt9XVuAMpRfojC;G!=y`dZ(aSYC*h#y)V6LEh-dM$ zEt6!2jOd;41uT_4MpikmI}H+{d;)*lcsq-$RTV}u`aM2^t-Lm)jIiZZAM&3z-pwM0 z%K+quSR83n(yL<X24QdiqWq~H{A5StCyaYLh5H}izs>(I!2h?*r_GoO>95Tg6bK0N z-%!NAHe*Bv0YL@AYk7k|hU5BvyZPP!MtLHh*T5FGH5oB@PWE6KB7$qTdpA#}A`fRo zlNMh$1ro7bA&)N5>?2@Zt;AMo(Dn2esFf?WlS-<&h3;hG1WaDcm?isSX9P)ldKKdv zfg4UuCbJF%?5SC?%rdpRv8T(@6-Q}#8k8$Ox3{-xE{PaaB>$jY?W2ROW@JR##z24a zQPU|~Dh9##C3qc~;}#D&pr+G91BIliko4(ochF!XST&bdHs2Yo>L@#u2h~PDfJyf# z9Q!_>wu9yPEaD<iJDb=*SaG;ww?f<xhUJF{2r)6FtLrDjv|yX<04+;yrY?Q@0JPT( zp$Ow!g;7lb8jS47fDg*3Is+IL*wjm+M0X9x#Id()hTzUNjn1C*yXtOCn~J&QtRkuJ zi=+9Ys2WOY=`TPS2SpWLM}+TCj&@ek^wSEx6<W($@DI~__n-%tXnCa1^n)Ih9NHq8 z&On*IZX@o!Lotc1p<b2MhJ65}18TP^?F51>cF{zw;|;})+Z0lCje*UN;Y4b(C95Z= zdh4dZJ4CF}_GnX32Qf*77vMI4#Vqf<z1@yGPOVCG=RrsqRa#Rv_PYCGsT!4dLF7~i z?KRw=4JV&qd*)1$=8lfyJO*VRAka{b68Hvg#0U(u`FDH&Gb29F)_=~2|2-oF5d{<o z8UD_P>-zp(dAs@l2B#waw9#&3Sp!~ysmg00!syqgQvMuqt-TvU)+yHSnMLA7rO}dy zbVv?6>_Kn?l-Lu8m)aa4c2Er>9mVZup#Trz+RZH6D*QN_n6!vy^{d(*@Q8rv-Iy<& z_H+esM%JV;hT5Rf*V|xKmE*XM@ahVsMvBUegX)*bB1kj`2?t9zshCU$_o-o$9HA;* z6$b+aRqb9*!C;f>QW07i4i`Z^gPwL}MiLHf-KJEQG%2%Z&!wQmQjWki@9(>bO*I4D zB3%q<X>+fiF(nIFvlMwPI}U9YDnRa%v?_&bF6DyiJy}3B$y8rPn(c8Wkta+N#{%6s zky+GG?vNkwj00|7(%<BIux9~0L~Bd4T}VKzq$OmbmntU8%tAz)BR^6sP>4^9r5I0r zj9uyuSEq;*^)w%1vAW3&oDve%MJLxS1i#nj_S%CwLktiWyxqmfm<SZa7v2hXWxq9o zU#-^go!|tQ?vcR>c49zBRFaKT2udFzI_kdoeitg)3(n`=K~o%AQ_~IYnp5}+d4*4# z;>$l?RtKMbHopQME~!J%%RTbV7BSC{N(EtB2E3<ZskpR4!%t5<9cj(LQXvy9#zbO2 znkgR%ZZmXtn*%uJf<<sVXYYN_N<WCS?68T4SQ_Z=j7lr;YAb%Hy^e505{+SD*9NJK zwG?bL_}X(SJ%Ef%oJ8z^o%6v@UK+A(vl<b{REUS&uRT_kaGo`ULl#_*#9=rgVG~M! z4Hi`@<?F7&sjs**k&^}T!S$-To)OXkn-~otj$ON*ai7Dvws~6QI2t01wx~k>#t^U1 ztK%1Gf2dG#RF^uw7@LE~>TjV>WMJ=^|MhtR1Azkl$LaNdd|reC^$ha;e|=tl|Hjq= z@gu(X+j#_fIu2n|i*&wbb=rev=(S53-64Flj2?zS*+b_8*T3xJ*(*V>yrSn^>ulF2 zvqP+IW_}FHCJ(jKonob;f$g_so~C6O)E=PID>)EJnec7UM#-8S>M<(O%}<Nr5o0L8 z%LpsE;RJse!9-O0x{);e0oeL~0_P$a-DLrmRNJ_QF~PWF9~GI-o?uhuEOrFTz4_c5 z+3(aAu(%I1L3xGTvI7E;v=U#S@hdq$v)mXwe-KvdQHu@;Wp(!`P^Y)?9bQ@PDBT;l zov7b`;yw+vsws~)gvva?hhAIe1^``QhfRD;A*od%?ydn=kp{+A+}8oc{mc2D%m<ho z+#<+h`$;Zlt;e(#Ya50JW>~?PG-pQ00ZR<;n4+AqY`$8o)T8*FoyV=gbo1gcS|@Pn zUUwWZet3X$?r{$hO1B<ii+*5cB|v$Co0TQ7@FBd+Fvp+mR(fAB<ETD<Cka)-Ueksy zp_6%DrGsYn+|876a7qJSWwMQHh`6jb5)F21Q0&QeEC8}b2i$O74?B$R+{M+k0oA&I z^ZA19fbEqo{{H~AjX{~Ia^bmk2j(pEm?!>A!t+^gFb@ZLlv?ck%EqsP+KXQ&5R)YH z8JB6#5Gd6>;HA^M;v<4XPX6<h{{ZaQr_8#o{L8ZWe{dR>e8b*i{CS#a#IiY;SX-V2 zz20TopglDBn3-2FN=M|oniYvgz+q_@{{Ue{l)T$fv?D787Ipl_Ru=|F3A@~8Y4V0x zexL4l6z*MwwvXam68A(hEoNSvR13*|7z}{=%o%H@Fcb!dyMhe-ZyS{ZptS!0sxeuM zw=f)HQOwFu!~NRj=3jEsaW5E`@?oRDd1VVmvc=n$!>AW0lK!QJR-Iy^h2rlSfzgmU ze)_AFT5uc782!f{hp)W8;Nz$(wal`dugnD@aH@v}HT+Bs99wvnnRe&))D{+5X3x=| zAYUrJm+2gmF5Mlqq7noz0Dq6nSjTH!*iieVV;5yF!%nan9Agj(ZN(;Wvfe~tcT6Vk zX;R1I%uGQCgn&ZnLza#&X#%TCiuaZX^y{?QJ9E23Yh>Ng`xd=lOP<#VWtT4Y5XNg< zF5#1M%vtQ`_RFz=X~1Um-D(n~3JRXue-KMH7ZcSAEFb3AtgZ%#77U@7w_{_T;aIt! zkxFb}ctU2fG#<wvcKMYe^fgDoVpcm40N4JP2~+}A)m~*SvhNp%UhxE^7NESUarDYM zj~&HTXCcC~E+5Kinhk6n<1wBSt9%x1(#`!q!qvSF1OUGW?r+lOLHL)2x`x*Ms4k$R zWH(_dBAZ5wd0B`APR&>3erjSJow%(7XFS7l&aZs)0)qZPpTgoS-%oi#$QTEifQQuO z5d73g3M)|>M4!ZQ$pq)_P>bmm-$tX82t=<JcksYkVQ}6&eqz!80N3tD%<=h-=B6qc za)-a|PaC(EEs=~%T{tWX2o}}Vl7qJlk8_pxW)wp0TH6aS<kf{yIalh4vri`sJ1PJd z!Ec5Dbi22asm?~6+!$3XM9oIUn<GV1bwMM+EFO<kKs3jgW7D8UliCH{7cdMQIxW8N zuBk*=tHJjRE4sn@eDN(v+rJ~9+a9Ag>9QMm_Wgki-CiS0YZFykU}tdjz2@LhP|0-p znhS8*_$9XO(4wiVn_={_G_K**UKT6lZAg3y16m>{LKQHVi#?^QnVtSl;Rr5DF6f^S z06@K&Vq=TJ^2)e@jWJp{zI@I}v7x0rGmzW7A@-IU%@{v2nmUZ#Ers|(SYcFD7T<)j zw3XUd7w7#zz$B<yJ)%&%#L<DNwICD&Oc;#WI0BV^-Tlhaum(0?{>tA&kKTVj*9s6w ztE2;p-dM8PU?@N@7&(^z0JaRxMR>F1#1WpLC_?4rxh*OfrB(oYbT#Ff-fD`>2Ph66 zU?Nc|ix`({)U=N#Z?MFoloVyq+Vk%cE5ow<OtXlKG;Mv^iHz)j06&x}ij>`=)ZqUB zP+WXyqf1>;D2r(Ca+gg^=uK&6c|PAs#X(x2ujl!IxoFhj!`RF9FH*+D;yr`iV;Z3e z6;-w|N{5Ja^COUYP}$88mRq~qU&IhBntaDE<wn+z?f2__`d_pCajih}=jjb3qWooa z23A)agRBvW*`QKO-3$XDuK|1#nQ#bE4n*UhnP<C=bZYAxf(<Igbc|n%B?Q_lVzJf} zKJh?s5uYmZ@iBX*1vqf;3oP!C{{Sh<d`AK<8f(hTYlOp9h>bN~Hp)GjLHHesKv7Ly zHE_y_9c&8xEJcpGCAH4;nBK7l^&($kS|SLsPg3j!qw^>bz_VI&-9dS>I4rkIYFoAu zx{eGjN>+iB1?d7-VB7ZW;xll#GHBonGTtu(`&0J=Wk)C?j`Kkjs7c1WkMVypns^bA z2JPyOCssrX^Jrn?d4)v+Q+sTPMa4gEpPGEec8X(w%to^**N7wltAII}&sFj&Ql3Iz z;qhwzX60H@7-<8F!1vMks1`+(u7$C2wwx|A(bxKgrKg{0!3a7G1rNe0^6F`rrqHNb zCjr%G-XIr^TetX>!Jy%5j=rv3(Hm8739K1&)yJDOgq2rLZywL?2>#8usa0bH3ZkmZ zxmN~eF}b{Wfif@(BDJotA2PaOk}V`l?oy5iGcn&KFpF?qXTuA^fayn7D;*Db6{2J6 znLj8AlU2%#vh#H;8%A%-;sgLn0G@J6h=sdv^=bH+cV8e{0ILPq=Zb*U8>f!Op?WoE zO!3K+KZAp{BLq0r0*|l~!^b`)uQFSAE#&vTyVWXTAwxI`DBZoQHgSn{vR4@p5{qTk z#c|Bxd7$xijAQ#_0vA=yN?kc|dbrQ93}{6dysb9d4ML|?j>*ApDMxXb%F^}1zs*2- z)>T#IZtv(>R^r)U$hxW-c#(m6w3?v#VUzC2v~zdMsFVenJasC%cGQ4uzV7;-ZY?C5 zq+YMKc^?t#^-82yZPjQAtVKzy5ycE7pt)I`#x(Z9t-3<~J7<N|EXezfgU>mHK<@|w z@<xEwf`@+5mT>`U_T;OsWq`m%6u##l+Yi{*HfX*YV;O-)RTRqbDlvwwjLIxn@#4W? z$F$FrDN_C=)r-4tm&dfbl7;OTr&d|)##t;VJ(G7Ycgr8;i)Jf<mIIo3{{Ry8E&vF? zuvZl_ha!U2s!?BJy^wB;RfB+FcmRu3E_w*F4PjpMv_b*J=U4nVNuJ<kWp<s2e6TYO zQmlJ00Wu?S91piK!&Zh=!xgCCeZoP}v}ebTh-QZej8=Pytg46A@_|>YYfxIgOt$@( zXU|{P+~d^!$%de`QPTkdEl|_~y)SBJh-`-z%J+k)<O?YckgG4`mSeEl$$omo&9~GE zbYPO4`94)Ey!l_Y{XS7|JxX-h^r^9}Exp!aio3kb!DoQla6A@#d65J)Luxjx!V5Nz zP_ybFHobZ(PjZg>BBtvCiZFb`tb}KF@OKhT1ceQ!1=d`p8GE=~Bh42d;xHXY-HbLR z6ID*)ktv5~Wza1iViuYj=FSX((k~1u>4>|@{jmexDtWMo7#0~}iEeakL8SIah{U`K zw`<M&JT&j#>I7V)mMWS4Vi4893BUaGF$EPA11r@-2+A%UuabfBeq*cJQ?01{%WG0) zRg0lPX9{x|w(zfRXw7I22$k;FA1CpS7|)X^rTL8e_{qosJkzOu6#+M$*wxirmr>wW zFQemzEMYN`{vZ+*Sw*-+0MJl8RI-I<nRza?3td4$x(d;7socDtYB$Z@1!c+U$LqW> ztIw_D^q;oIjzv_h+FWTAjBFBxv94uhK5L3krf`rUs&xUIdGGrsN)4(P?;M7VMxxiY zgA7pSJVOdN{vetHy%N-+?Qi&vQag+TO@G>zR7A8D+lAg`xvq1)<%{8WC>+<^Z3|$i zV<iRh#-7x&d>dFEq2Ny1&+Hz-0FR1&!TCb<Mj;hnHBZC=6=*8{;z9vHvz{|DI5s$c z_5=pUs%{zPJ#leGmh4=7>KENRB7swo1D;+R6dJKc*UG6W^AgfqTE@?iM(mq$@&Vv; z;m@Uhv-I97zegXnCA|}huXxwY8PHNuxezsqJ;-%H&@CcIg761)b>F7caxOY@32UVA zkg;$OB~_F!YZfk0T?LstCIiS&pl?;gvRRMjAS}64<ptZAYdg*r2Az5CTGu_stFi7L z?M+PqFX2P~074L#RCMu}BFzkEi0!D|hb3$N@fduJ47L~M3mf8jPVQc)SfvHZv9l5E z5@c=GW-`E1`^+=~%@>LeT2@PZN?M(O3cS3(Kpn)9nQ3Lj@r-y#K_=HWQy?*6e8Ij` z1?s>U!)Jz91=p_M(4V5ebZ!731ZmuSo5^O%wauaG{i9-Zp5l=aVzl^$*u~kYwld() zGQpi~W7IaL27=c#aW6sG)k9{^OO1_^>-?Va>*k1Rz|%hS37$@&a@>aAA>m*kYie<Z z6G_Z0ryK;9C$iJ;EGV^eYnB&wO7R6;_Y$kdCmzzld7~^DOIwLAHmzu5x+-D3-<XR9 zl%bYVz2!$Dsh~Mv8dD6a@BaWkAWX%rXuezdgS7&bCz0Wnt-o%>T^fD0eJM1yTq|6O zC^KvHtZzMjyngW9EP~MD{{YOe2GvSn54gBZN6FgXkVs<6Jk2WHQp=tP%pzg3wR(hX zM{uF8mheK<Cao-CoE&Q6!Jrh_UKtb_TtLCCi9qFW)~VUJ#)}j&q@hX$;=t<SA=(B= zgUzc~Od0*Elv=P=Roddqk13^-1~bRvBG!NzE@E0B@LiF1lw&NOWgbHzHs#~~A~W66 zfUmikW$-3J2wU7DrcF>cG!GmX_=}g8o0wC~Bd~ur5reTIFavG)@hp<EHmhCS@%fj3 z5*kJwmDJiUDwZ0jmhlS{LtWA*vU*~@A5K47e%UEC0@aOIaCh0BUfA-=YSrbPviTZ5 zVoZPmt|-E}rqZH?#e-icnN{v5`4Ln$nh@^qe$@$11SAD2!3DL{BCxeIDLBI$JA&ES zEaY#FB|JhFC=HkkD|(le9zfiJ@S78xWoHr536ZQ{uv>ymmF#QOrLe`^BqG-6xEu23 zWG)(T<IG{Q#f~Y*`MB_Cfk||)vi_xj*vps{HEpFFnI%}!jtFOmkZ}}!jA-NLWw1TV zjlY%+uGi@wvt<oeXT`HSu?!4R<%p=-rB-?Lb-FZXovokb!!HNsjE^j3LwLxYIr5D3 zqi4LX=N_DTap*>3Keuj|klh5I3Vg&>sby9kC0?wNXG5iRcYvxbu!Ek+wf7cV?>Nq8 z)c#_vovv{+RI^1wyQNQQzmo(qoXbkbcc}GB7D}n7-((jmR26200_e0V4$>{EOG_MY zvkL}x*{x&P);NSP05LET+90~RaLU;)3V~bgoN*mZsz5f-djaQ&Ag0sX)~!(9tIShJ zGld#HD*VL83dLMtfCb90Kjt7H7HHiUuQ8rv6^l0-!mZh{@h=H7<o^K78xM%j%%_qI zG%~N+9Oxk6{{Ygy*?kC6e~DONkX29}%FRYlI>E3CT3<Yu&$~1z54Hhz6<Xb0ok6>8 zk-)nUz5G6$$|`DepV80gcMaxi&+LP4paW}32B{%fLjM5x`;IQ4N*N(Q3|pOu;_>Yb z;SM3>wa#%;mqO<bIAumG#v&|E+v18MyatL5FsmU{UNJ2w{ep@b#>U)0wSZLE@-1QJ z2)k%0>{zwhX7pw=%M-Gz7iAM~JLXV9eBs5JU|VWv6z*L2L9;5$ma|M!07zCN?Y}<c z8g9zi%A;Zc`;jT6mJ2FPmSQScio1Y-MhF`}osmmL$&(zLm9<N*k+V$<+b!n0#56P@ zq=Bw!E?}W3D0V2_IG7WRG~7)l#|d-{AgT7Qfo2#H<6>GY9xE~LN~yJ7YF~t&(8kO@ zAdkImn`}3Abz!Q;A&X*~17xVJ3()2yGE*XSF#JywIE;TuH9h|TYW?MPH(%pYml(K$ z)y)O2W8#KxqR=W?+8$sDSOHm;PahEC@Ogon0Po^t0{;NaHPAq`VV>-8<2=iUSXK}K zlq}233Jj7lB7kz{s9`WgRD%lmw%(OezLe~N!pifwEYZDAvMT(8e8G}@iSi<5)*sBK zlphdKw%aU4=Wub#tVqr!tY^xI0TD}Iv}~XYFv52M-s*>puecGS#kj3GiYr;e0WHgm zX%dM^Wm?B-@e|`<RwK1a81bB54=qC)mw=@p*%Re};guW~N5FEUq8Kj&8a2xehRfD& zKPO(m2y+fFu&Z@YuXtw4*xX|r3iB(um;D-5-WQLEDM$ckZfiF?nVzyl%>ox?>rCa> zF7zQ~pv7(G7Ouj()mdn1p?GV>l2oJ@2)lc;o?+L$OaB0Vr0v9ip<lAE{{Y6C(}D2; z4uNM>7HW~s>br)ltyp}AmX8yXDtPL|C@(~D-JIM_8ybSeU_e@-vc4nkflyHpKm;(Q zy~awL1;sRV-+n4+w7Codz}|1SFwr7Zpovhr#iUV?7qT=p$@As7+{mo0nHE+kQ4#up z;FegqKk(||xldv`P{EQ8HO5*B2xuKo7|m0?L)8=jrJ5E6l~;7!f0DMuG}+Cq^$vFi zlvfy1QfmtPTLJ~3aE|Yu4X*20s(Qo}5VtGr0>xtM@d}<Ps1}Y(t+!IVXhJp@@rF_a zRvWlhcBgm7BL_e%2#tVRxEL|Hd3s^p?9Y~QOU%zstQ1%R7<O|7b_iJ5z&u*iygRAe zz}hU^S?jo-O&B^=7^91{&gQ-dL+x0uGRN}DgY{&~R4+73oby>%Zu^&MxCj;vi-NS{ zGXdoL%nmootaZ#=S0<7F0A6{W%Z#l4o<D1OzY2vt17Dh%8>ClhV5%_D1q4G5$`7l+ z+rtzwRy;!iFd3~=fq2BGDr_k`vT36Z)&Bswf!$<CX^KpE_l2Px2vCJtt{aqgtZazb zIxFQ7n-WJB7+i;umy{f(X6*TS<`jSkrPUfZ&wHIqcAFw(95=CtHxrkTu9sK8d`1tR zH8|k*Bh;9bm0s2c+S!XZfowpbg>9hSpz#bi%LERA{C6vqYJ5?24tcqD6--&t8dgeo z0mn%sa-x_os3ndFIlQ3p3D6rj>?W$gtYV%>OPoBz8m);zf0<H91U=HPk!2|L2C-(3 zEu=tmi?8&F$9r$)HQHCDm<G-w@ki)1fNTvT6}7ZVMA9;dT;)JPpuRPp;KD0h4%U)X z#d(}YaqC{3e#q<`ETceqwhBQV{0QMlFG|!<NR5sKy`g8zIRfq))bhpnr(`|mR;NdY zvmEm_3Z5GVTMLvLaSGC{1%>&csegeet*dA?kS>QXvY@gk*inRAdRv@9>{1QZ7Q6yP zZMzr~f_A<ESQS;^48{Kd=caUo0nvynCB;va6xeAAxq+iA8d@lCFS{9Vtp+sJQrkE; zODbsvq$&*wDC8QKe*O2U!UfWwFl<x0)lk7>ZU~Y80A;XH6Jh1=1Ys!@YD)P9k63tt z;z&~k3KvyNuD2En#*OG(RasN$g2Mz*?`6y5UBSeFK=Ug6QjaWaP}mw4@GWoRS=18Q z3MPZqULjoZqn!ui@Rk{X=iU|xwVXVW!h>@E0CAc&=)~<$mQa|9UZW{o^nxcS&^Z}K z0;^6_P8=+5gw$R=NZ|8zRpws}ASX09d$lkLC@ZZ~bz*!l#6-ItJUN>E7=imMkQA6B zTDZhLc#Oh0_c8K_24d!}3Jp8dC*$Nb+TkJE(uL){aO3NO2jQb@YQBpb{{T|6J6Jw; z=mOCJQ5;Q?B^g9IQ{k1l_)_>twRpT5!9xUvY0Pa<P`hWTY&?WO$Sk(!9FfR!pm_tr zp|w+6xnZ+!S?OYn+AIM2P^h(H0?PQ5kmhQL(S2r~<IGD7w>;5Z+YPl9H7%GOz~}g1 z?-f;EfvJp^GE4<%9&p*2L*=VfPKFv5JS7Htx&Ymv_*lVlz!CwkS(wzYj`ZDT0LefH z8!hwV^(#x7Ux;>Ssy+;iQ%zCHt3i&L+`!$&&8vX=BN-{x>fx2^H`E`B%&w{)clRij z)^Bo$r-&Th;Xv*hy7UfW0IOxdF#uSWfqcYi^LAUWu)e9x4qzjIslbOGG0e;@c6Qww zTH=bk+*$01(IE`&8N4~T*usWUwPWeT#N+l#;GwzANY*_JrTUBcoqM=8rOQA};RvCj zXW@!l5iv{`MTO$<mW>o+l>#ekIRK?|AXiEpEm+002D@&Js4n}rDJq+sC=?o6@rj8? z;EJ#pA>&Xv+T!wUESbTI<|-2k5o{DU#g8!w5(YU6^Q8KYNGLV}KYWdM2zuz)Hs>Ad z6NU*xxZod{eyXZj=Ae8)dWy7Pn1F5z3N!Z#h=-CKxCGf<7gb`elc{LI*fIwP=MwXP zSg~5Z;*z^^LJDOg9E@$i&|ev1fac4_Dm?+{sG|1r=PM0fE$obvudnwLHrhm|UkulO zGplQuW3QOfV?HCLoJu=}AOQUs-pS!Q&rmrP!5a-U3$q4uh=(VB?758&z@Qs#l$v#( zTt5*bMsKf!Q-(ZxKAb+BPCu?=++qW3OTRI~b=`#)Gi)7ZE-JHpLRow)uG^G8?jSt7 zsu3NQEmK8z7dB4Ca1yu<*6|G|Ua`Sg@?Ee*b|esVE6DsDMyNDbN+@IbtCv8b=~9q5 zC<QczSP>LB?cG+X%^JA4PG~`m<#T4(KoyxRD?!<)iQ#{Q1hhdxAnjp8s@%<SH3cXs zZLF<Ex7%b}B{|xo6lLe$Q@4($Dqw12nlsp_L*rCETllsXp+!^d;F!@RL6NgyZFQa_ zC3Y$Ry0bylW{eCrGay<yrZ$T}ykpvE$)v~_i-f((H200}QHv#U#^cOA$T4#N05X~~ zXNk<#=4rq(g-U43@Vz*JQtAps+3WoJUj=$F&okO%`n3jNY$uWprV3{kJf0)?VlC<5 z03+D9RW7_UZLy&C8u8{6!4%$r8CR%HGsz4Nb8?zsWz;cN2C2{(0I0S}RDy(p_cGQs zb1RNQPJpgdp_2SWgh^|tSTEstnF>qj*dR>~OYLn~%1~@(&HzisNVcD2T(lX@wBLwr z!x==u4FPM+@FCXULQCFuunKFp@iK<%wghW}2sq)3=^EPGb<_xPbm~wC13VJI6lM!5 zx?^dKgDLNCn1qI&64|aJu#{Z7TqUN5nox_%MPj#oLXI<i5M3>6nR-0x;H7!y;+CL$ zvo({RaZ>8St(Cn@{4;;%4L7O8yR6Kbcb`OvCF;&z-Jo6VLG$k)&+8d?K7Xc<5!&yb zpg0JXDpR^5tu?}8Qk{tFCSNEbatl2#mv;eVoAr!@<xmFJ;>bX7=rOt;!N)4p;9p72 zfNW5vdYe-O<C+jhyc@v~=)o1KZ{AcSLdY5&C<IrFU=3%YN!eXr_N~s~vfkI0`GE@S zHIgc#;@$x)rw(c;6rMuR<;`1u;VYkH8rwB_ah~cmtsEY>X5Ki%8PmbGM65z0GnI`5 z16p5On?rG-`HrrKl`Wo@6MKE1UmZYb-k+Jv^${SwYu}gVRM0)+{6g~EUyjeMd`7Pg z@i3~696njKn(;3xt70&NJ35O@xIUd~K3S}D9kq(@(z}ghzOjq<5ix!|Pj}Y4{RG!P z(jW$xo?zP-SKX19q8}3o+we+B=B2+n*IJ*W=4(U{7Suw@64$Ah>rJvS@M`%xR%S~q z1jsge<>#pI4F+Cp19GTfX-EyxZ{n}SQ(K%|z7OJ3M`qXE+;GMn-mwG6GpH5K4t?W- z*-frA6`i<_0jge=&}Qqrq&1BdF*Stdo%J&h_YFl23u)dW$l@xvj8dxCo`_Xf5ZE$n zY*;Zf0MNsClK%h^IW@{7_fqQE+LP#xjh!Pu9sR>wNR+0~fbtgN&-Vf@&M%q9^Z0|V z4U4j#^gf6K7T8A>D!Hs*V;rSCP7Wo-YkU0$?moJM=|b-w0mBGFw<%ncuTuREXESBy z<NY*PV4b?H#xC3W{{X9V3XQd&%&Xn_5$#37sO`GjeqitcN|Lf@VR)ffs2@@c2ALw+ z8?99exM)C)yDO*VE@7I57U|hMD-~UeZ(_s_pUlDn_$}O`(cq4t)ZfwhU<53eTooHq z=;4;GpQeux4~h~4b{Xpz*HD!OP>Y(f+};kknr^9v_+_t&djzI`2z8d<Ga#Tlx5rY5 z23}ah$R&<0V(>UKvISTIZ&N`*Pan*C1!}Kce~C)LZ(e1_XBs9~I18~`f9_?FS_RGJ z%4wE}UdiA9@!NP9N42izILu7y?@VXJeF8l^N6Ay;)$~Y+(qxAe6~e{?kGSzXdVfBL zrFMT>jZCqbOeT*pb(yj1+TD$_g>$%IqAtx`D*!2w_^>b*=pk3!JpIAV;oQ6>pYDIe zYzix|%qhZnvQQJljwOW<%9mddbs4&#_*kulTUrp)gqmidKShF!*z=Pc^A?a^FCTEq z3SVlLR;){0EH!0ShM;MT)D%+3h?)f3hcfY9TY?}q+m;>{8zI|}SAiVCId#!lR2l){ zw~Lsdk$^zDZFymqY@NZ#avPu^DZuLPEt;HjE^bsXj4$Ds<JX2>Cpnn75wuppOF{IQ zjNT_7qmBOnO21L!JwSyT$&<wmJS9roI_nS3Tu3pyLNRjrgXSWdYVoO6oP0&k#P?1W zDM9?fw7X)y*IA7i2$jYe`j1s3QCcPU2nz19U~h4|du5A)_RGFzBG-WtEe<+hEW+sv z>1&b%a6^?*zT<zE7PL%_z0CSyy5|uClT5mm>EdK6{o$#^d`<J|?;f2Vhy^HY?ocl( zUZ**PIormkG5rMRAJZe{mCUbFC36-*VQJG?%(k}7*74M=GU?!%x-!SZA3=}&Og6!m zqXDYq+~DWpIAQyjZMo(kjpWpB3(s*aXtCe<nuhkT66#yIp4MVaSm4sy_>EO_CQ;nx z6PbJTs=L(ZbMYSiGcGYep;2t<zej(dV*db4?;g{0YHz@b5x{0p_>}-VDtTIrAK(pz zomE~`rXmBZ%e=~ty-oTsyHgN}tmAsl_P-Hx+#Dy|e+1Oc<MAzL8=cg?BQNeOr($n& zjZ}O>s+iU2sQPg^%uk;_op(5!+^Nrqxx`U&-jM|?F6$~zC-X1%0M-p%ToIThRoT}u zFi_sF{cI_yFaUREeBva6foZV?zArG5Lt3c70^I@i1#W=6%!%@1WUltGx-NjxWjW4B zx2Akc#N2&J*B*hL!Fd5RMN2hMO~^B1VIiJ999>R-)VxdY(e!?x(mhXe(z=hS>AARi zbuL`EYC8Q~AJsDsMb_p*H2`EGd{+0(OY@>0O05i*+gfu55D1I0Ym0GRL`ZKyKNH&s zrD&Ves}=BHnEkA(TCP=`bsf#Wr`ma(&l9O2+5AJ{pMx(1LGnu7MYi1WmVYyd>Mp%_ z)lPj8p?#sAJuAnkxMo%NJ)=4O2d7?~MThmsEQGdF;~BUKxFvVvG4S_y>|&M(WXcdN zqbDB`+EVTga@2gzeWHCzhoXhG%EiA=sK_)-1X)ek_nb_5xL0fMiuJgQQmup2nY+El z-A(G_^Av`)+;Ue`81&v>Mx{gksl;DC^QzP)JVuMutJJAg9Qt3+?8c#y^td7p#)Wt# z(zR+ioN79siKu>_AeD|LjVKhWw3z7<t3jK=k5A$*XC9=w<`H1H?E#nl#72^<6QX;1 z1&rI7r@5Fp+~Q+em71?g_=e@~{U1v7<MxA7iQ?h9W39$y^r-sU;_((!LZMv0pTykd zJ;tNs*W{OVpIV&Cmw33N<s2m}38jp_i~`lI7&6S-+`m4RmSc!bCUH3b05Qc(XEiSo z)OEP;c$ld9^{?DA>t3rYsg`rUUV5DQ+_qN&*BcL)^B>Sa%u4igD{|&j(x<t(tvK`} zTyM~6`OL6vmoNG}e%*TXxVGP+`X3VU79i~veqTq_E_-_OJbsRNo4CuDFZ((dhW`Mi Ta;`JS^llSJ{{VtN{;B`jG`d)0 diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/image2.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/image2.html deleted file mode 100644 index 34a5339a..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/image2/image2.html +++ /dev/null @@ -1,65 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>New Image plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script> - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) - CKEDITOR.tools.enableHtml5Elements( document ); - </script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="New Image plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the new Image plugin to insert captioned images and adjust their dimensions."> - <meta name="ckeditor-sample-isnew" content="1"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; New Image plugin - </h1> - - <div class="description"> - <p> - This editor is using the new <strong>Image</strong> (<code>image2</code>) plugin, which implements a dynamic <em>click-and-drag</em> resizing - and easy captioning of the images. - </p> - <p> - To use the new plugin, extend <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code>: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'image2'</strong> -} ); -</pre> - </div> - - <textarea id="editor1" cols="10" rows="10"> - &lt;h1&gt;Apollo 11&lt;/h1&gt;&lt;figure class=&quot;image&quot; style=&quot;float: right&quot;&gt;&lt;img alt=&quot;Saturn V&quot; src=&quot;assets/image1.jpg&quot; width=&quot;200&quot; /&gt;&lt;figcaption&gt;Roll out of Saturn V on launch pad&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Apollo 11&lt;/strong&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt;&lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt;&lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt;&lt;figure class=&quot;image&quot; style=&quot;float: right&quot;&gt;&lt;img alt=&quot;The Eagle&quot; src=&quot;assets/image2.jpg&quot; style=&quot;width: 200px&quot; /&gt;&lt;figcaption&gt;The Eagle in lunar orbit&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;text-align:right&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'image2', - height: 450 - } ); - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/magicline/magicline.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/magicline/magicline.html deleted file mode 100644 index 800fbb3b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/magicline/magicline.html +++ /dev/null @@ -1,206 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using Magicline plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Magicline plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using Magicline plugin - </h1> - <div class="description"> - <p> - This sample shows the advantages of <strong>Magicline</strong> plugin - which is to enhance the editing process. Thanks to this plugin, - a number of difficult focus spaces which are inaccessible due to - browser issues can now be focused. - </p> - <p> - <strong>Magicline</strong> plugin shows a red line with a handler - which, when clicked, inserts a paragraph and allows typing. To see this, - focus an editor and move your mouse above the focus space you want - to access. The plugin is enabled by default so no additional - configuration is necessary. - </p> - </div> - <div> - <label for="editor1"> - Editor 1: - </label> - <div class="description"> - <p> - This editor uses a default <strong>Magicline</strong> setup. - </p> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table&lt;/td&gt; - &lt;td&gt;is the&lt;/td&gt; - &lt;td&gt;very first&lt;/td&gt; - &lt;td&gt;element of the document.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We are still&lt;/td&gt; - &lt;td&gt;able to acces&lt;/td&gt; - &lt;td&gt;the space before it.&lt;/td&gt; - &lt;td&gt; - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - &lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; - - &lt;hr /&gt; - &lt;hr /&gt; - &lt;ol&gt; - &lt;li&gt;This numbered list...&lt;/li&gt; - &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; - &lt;li&gt;...and another list.&lt;/li&gt; - &lt;/ol&gt; - - &lt;ul&gt; - &lt;li&gt;We can type between the lists...&lt;/li&gt; - &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; - &lt;/ul&gt; - - &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; - - &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; - - &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; - - &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; - &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; - &lt;/div&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. - allowedContent: true // Switch off the ACF, so very complex content created to - // show magicline's power isn't filtered. - } ); - - </script> - </div> - <br> - <div> - <label for="editor2"> - Editor 2: - </label> - <div class="description"> - <p> - This editor is using a blue line. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor2', { - magicline_color: 'blue' -});</pre> - </div> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table&lt;/td&gt; - &lt;td&gt;is the&lt;/td&gt; - &lt;td&gt;very first&lt;/td&gt; - &lt;td&gt;element of the document.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We are still&lt;/td&gt; - &lt;td&gt;able to acces&lt;/td&gt; - &lt;td&gt;the space before it.&lt;/td&gt; - &lt;td&gt; - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - &lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; - - &lt;hr /&gt; - &lt;hr /&gt; - &lt;ol&gt; - &lt;li&gt;This numbered list...&lt;/li&gt; - &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; - &lt;li&gt;...and another list.&lt;/li&gt; - &lt;/ol&gt; - - &lt;ul&gt; - &lt;li&gt;We can type between the lists...&lt;/li&gt; - &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; - &lt;/ul&gt; - - &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; - - &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; - - &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; - - &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; - &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; - &lt;/div&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - CKEDITOR.replace( 'editor2', { - extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. - magicline_color: 'blue', // Blue line - allowedContent: true // Switch off the ACF, so very complex content created to - // show magicline's power isn't filtered. - }); - - </script> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html deleted file mode 100644 index bdccc158..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Mathematical Formulas &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Mathematics plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Create mathematical equations in TeX and display them in visual form."> - <meta name="ckeditor-sample-isnew" content="1"> - <script> - CKEDITOR.disableAutoInline = true; - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Mathematical Formulas - </h1> - - <div class="description"> - <p> - This sample shows the usage of the CKEditor mathematical plugin that introduces a MathJax widget. You can now use it to create or modify equations using TeX. - </p> - <p> - TeX content will be automatically replaced by a widget when you put it in a <code>&lt;span class="math-tex"&gt;</code> element. You can also add new equations by using the <strong>Math</strong> toolbar button and entering TeX content in the plugin dialog window. After you click <strong>OK</strong>, a widget will be inserted into the editor content. - </p> - <p> - The output of the editor will be plain TeX with <a href="http://www.mathjax.org/">MathJax</a> delimiters: <code>\(</code> and <code>\)</code>, as in the code below: - </p> -<pre class="samples"> -&lt;span class="math-tex"&gt;\( \sqrt{1} + (1)^2 = 2 \)&lt;/span&gt; -</pre> - <p> - To transform TeX into a visual equation, a page must include the <a href="http://docs.mathjax.org/en/latest/start.html">MathJax script</a>. - </p> - <p> - In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'mathjax'</strong> -} ); -</pre> - <p id="ie8-warning"> - Please note that this plugin is not compatible with Internet Explorer 8. - </p> - </div> - - <textarea id="editor1" cols="10" rows="10"> - - &lt;p&gt;The following equations are represented in the HTML source code as LaTeX expressions.&lt;/p&gt;&lt;h1&gt;The Cauchy-Schwarz Inequality&lt;/h1&gt;&lt;p&gt;&lt;span class=&quot;math-tex&quot;&gt;\( \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \)&lt;/span&gt;&lt;/p&gt;&lt;h1&gt;The probability of getting &lt;span class=&quot;math-tex&quot;&gt;\(k\)&lt;/span&gt; heads when flipping &lt;span class=&quot;math-tex&quot;&gt;\(n\)&lt;/span&gt; coins is&lt;/h1&gt;&lt;p&gt;&lt;span class=&quot;math-tex&quot;&gt;\(P(E) = {n \choose k} p^k (1-p)^{ n-k} \)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Finally, while displaying equations is useful for demonstration purposes, the ability to mix math and text in a paragraph is also important. This expression &lt;span class=&quot;math-tex&quot;&gt;\(\sqrt{3x-1}+(1+x)^2\)&lt;/span&gt; is an example of an inline equation. As you see, MathJax equations can be used this way as well, without disturbing the spacing between the lines.&lt;/p&gt; - - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'mathjax', - height: 350 - } ); - - if ( CKEDITOR.env.ie && CKEDITOR.env.version == 8 ) - document.getElementById( 'ie8-warning' ).className = 'warning'; - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html deleted file mode 100644 index 5a09a8ef..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html +++ /dev/null @@ -1,72 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Placeholder Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Placeholder plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Placeholder Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Placeholder</strong> plugin that lets you insert read-only elements - into your content. To enter and modify read-only text, use the - <strong>Create Placeholder</strong> <span class="button_icon" data-icon="placeholder">&nbsp;</span> button and its matching dialog window. - </p> - <p> - To add a CKEditor instance that uses the <code>placeholder</code> plugin and a related - <strong>Create Placeholder</strong> <span class="button_icon" data-icon="placeholder">&nbsp;</span> toolbar button, insert the following JavaScript - call to your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'placeholder',</strong> - toolbar: [ [ 'Source', 'Bold' ], [<strong>'CreatePlaceholder'</strong>] ] -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>placeholder</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is a [[sample placeholder]]. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. &lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'placeholder' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html deleted file mode 100644 index 30ac7fcf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html +++ /dev/null @@ -1,119 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Shared-Space Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Shared-Space plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Having the toolbar and the bottom bar spaces shared by different editor instances."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Sharing Toolbar and Bottom-bar Spaces - </h1> - <div class="description"> - <p> - This sample shows several editor instances that share the very same spaces for both the toolbar and the bottom bar. - </p> - </div> - <div id="top"> - <!-- This div will handle all toolbars --> - </div> - - <div style="height: 300px; overflow: auto; border: 1px solid #afafaf; padding: 20px; margin: 20px;"> - - <div id="framed1" style="width: 49%; float: left; margin-bottom: 20px;"></div> - <div id="framed2" style="width: 49%; float: right; margin-bottom: 20px;"></div> - - <hr style="clear: both; margin: 20px 0;"> - - <div contenteditable="true" id="inline1" style="width: 49%; float: left;"> - <h3> - Integer condimentum sit amet - </h3> - <p> - <strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong> - Praesent <a href="http://ckeditor.com/">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p> - <p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p> - <p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p> - </div> - <div contenteditable="true" id="inline2" style="width: 49%; float: right;"> - <h3> - Praesent wisi accumsan sit amet nibh - </h3> - <p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p> - <p style="margin-left: 40px; ">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href="http://ckeditor.com/">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p> - <p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p> - </div> - - </div> - - <div id="bottom"> - <!-- This div will handle all toolbars --> - </div> - - <script> - - // Turn off automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - CKEDITOR.inline( 'inline1', { - extraPlugins: 'sharedspace', - removePlugins: 'floatingspace,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }); - - CKEDITOR.inline( 'inline2', { - extraPlugins: 'sharedspace', - removePlugins: 'floatingspace,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }); - - CKEDITOR.appendTo( 'framed1', { - extraPlugins: 'sharedspace', - removePlugins: 'maximize,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }, - document.getElementById( 'inline1' ).innerHTML - ); - - CKEDITOR.appendTo( 'framed2', { - extraPlugins: 'sharedspace', - removePlugins: 'maximize,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }, - document.getElementById( 'inline2' ).innerHTML - ); - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2012, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html deleted file mode 100644 index 2b920dff..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html +++ /dev/null @@ -1,118 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Editing source code in a dialog &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Editing source code in a dialog"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Editing HTML content of both inline and classic editor instances."> - <meta name="ckeditor-sample-isnew" content="1"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Editing source code in a dialog - </h1> - <div class="description"> - <p> - <strong>Sourcedialog</strong> plugin provides an easy way to edit raw HTML content - of an editor, similarly to what is possible with <strong>Sourcearea</strong> - plugin for classic (<code>iframe</code>-based) instances but using dialogs. Thanks to that, it's also possible - to manipulate raw content of inline editor instances. - </p> - <p> - This plugin extends the toolbar with a button, - which opens a dialog window with a source code editor. It works with both classic - and inline instances. To enable this - plugin, basically add <code>extraPlugins: 'sourcedialog'</code> to editor's - config: - </p> -<pre class="samples"> -// Inline editor. -CKEDITOR.inline( 'editable', { - <strong>extraPlugins: 'sourcedialog'</strong> -}); - -// Classic (iframe-based) editor. -CKEDITOR.replace( 'textarea_id', { - <strong>extraPlugins: 'sourcedialog'</strong>, - removePlugins: 'sourcearea' -}); -</pre> - <p> - Note that you may want to include <code>removePlugins: 'sourcearea'</code> - in your config when using <strong>Sourcedialog</strong> in classic editor instances. - This prevents feature redundancy. - </p> - <p> - Note that <code>editable</code> in the code above is the <code>id</code> - attribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance. - </p> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <div> - <label for="editor1"> - Inline editor: - </label> - <div id="editor1" contenteditable="true" style="padding: 5px 20px;"> - <p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p> - </div> - </div> - <br> - <div> - <label for="editor2"> - Classic editor: - </label> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. - </textarea> - </div> - <script> - - // We need to turn off the automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - var config = { - toolbarGroups: [ - { name: 'mode' }, - { name: 'basicstyles' }, - { name: 'links' } - ], - extraPlugins: 'sourcedialog', - removePlugins: 'sourcearea' - } - - CKEDITOR.inline( 'editor1', config ); - CKEDITOR.replace( 'editor2', config ); - - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css b/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css deleted file mode 100644 index ce545eec..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css +++ /dev/null @@ -1,70 +0,0 @@ -body -{ - font-family: Arial, Verdana, sans-serif; - font-size: 12px; - color: #222; - background-color: #fff; -} - -/* preserved spaces for rtl list item bullets. (#6249)*/ -ol,ul,dl -{ - padding-right:40px; -} - -h1,h2,h3,h4 -{ - font-family: Georgia, Times, serif; -} - -h1.lightBlue -{ - color: #00A6C7; - font-size: 1.8em; - font-weight:normal; -} - -h3.green -{ - color: #739E39; - font-weight:normal; -} - -span.markYellow { background-color: yellow; } -span.markGreen { background-color: lime; } - -img.left -{ - padding: 5px; - margin-right: 5px; - float:left; - border:2px solid #DDD; -} - -img.right -{ - padding: 5px; - margin-right: 5px; - float:right; - border:2px solid #DDD; -} - -a.green -{ - color:#739E39; -} - -table.grey -{ - background-color : #F5F5F5; -} - -table.grey th -{ - background-color : #DDD; -} - -ul.square -{ - list-style-type : square; -} diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html deleted file mode 100644 index 450bc11f..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using Stylesheet Parser Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="stylescombo"> - <meta name="ckeditor-sample-name" content="Stylesheet Parser plugin"> - <meta name="ckeditor-sample-description" content="Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet."> - <meta name="ckeditor-sample-group" content="Plugins"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Stylesheet Parser Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Stylesheet Parser</strong> (<code>stylesheetparser</code>) plugin that fills - the <strong>Styles</strong> drop-down list based on the CSS rules available in the document stylesheet. - </p> - <p> - To add a CKEditor instance using the <code>stylesheetparser</code> plugin, insert - the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'stylesheetparser'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>stylesheetparser</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1' , { - extraPlugins: 'stylesheetparser', - - // Stylesheet for the contents. - contentsCss: 'assets/sample.css', - - // Do not load the default Styles configuration. - stylesSet: [] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html deleted file mode 100644 index 6dec40d6..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html +++ /dev/null @@ -1,104 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using TableResize Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="TableResize plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the TableResize plugin to enable table column resizing."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the TableResize Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>TableResize</strong> (<code>tableresize</code>) plugin that allows - the user to edit table columns by using the mouse. - </p> - <p> - The TableResize plugin makes it possible to modify table column width. Hover - your mouse over the column border to see the cursor change to indicate that - the column can be resized. Click and drag your mouse to set the desired width. - </p> - <p> - By default the plugin is turned off. To add a CKEditor instance using the - TableResize plugin, insert the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'tableresize'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>tableresize</code> plugin: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;table style="width: 500px;" border="1"&gt; - &lt;caption&gt; - A sample table&lt;/caption&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt; - Column 1&lt;/td&gt; - &lt;td&gt; - Column 2&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt; - You can resize a table column.&lt;/td&gt; - &lt;td&gt; - Hover your mouse over its border.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt; - Watch the cursor change.&lt;/td&gt; - &lt;td&gt; - Now click and drag to resize.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'tableresize' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html deleted file mode 100644 index 6cf2ddf1..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html +++ /dev/null @@ -1,232 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Toolbar Configuration &mdash; CKEditor Sample</title> - <meta name="ckeditor-sample-name" content="Toolbar Configurations"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout."> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Toolbar Configuration - </h1> - <div class="description"> - <p> - This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if - current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>. - </p> - - <p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p> - - <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2> - - <p> - You can explicitly define which buttons are displayed in which groups and in which order. - This is the more precise setting, but less flexible. If newly added plugin adds its - own button you'll have to add it manually to your <code>config.toolbar</code> setting as well. - </p> - - <p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p> - - <pre class="samples"> -CKEDITOR.replace( <em>'textarea_id'</em>, { - <strong>toolbar:</strong> [ - { name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups. - [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name. - '/', // Line break - next group will be placed in new line. - { name: 'basicstyles', items: [ 'Bold', 'Italic' ] } - ] -});</pre> - - <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2> - - <p> - You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code> - and <code>forms</code>) are displayed and in which order. Registered buttons are associated - with toolbar groups by <code>toolbar</code> property in their definition. - This setting's advantage is that you don't have to modify toolbar configuration - when adding/removing plugins which register their own buttons. - </p> - - <p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p> - - <pre class="samples"> -CKEDITOR.replace( <em>'textarea_id'</em>, { - <strong>toolbarGroups:</strong> [ - { name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups. - { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label. - '/', // Line break - next group will be placed in new line. - { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - { name: 'links' } - ] - - // NOTE: Remember to leave 'toolbar' property with the default value (null). -});</pre> - </div> - - <div id="currentToolbar" style="display: none"> - <h2 class="samples">Current toolbar configuration</h2> - <p>Below you can see editor with current toolbar definition.</p> - <textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <pre id="editorCurrentCfg" class="samples"></pre> - </div> - - <div id="fullToolbar"> - <h2 class="samples">Full toolbar configuration</h2> - <p>Below you can see editor with full toolbar, generated automatically by the editor.</p> - <p> - <strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything. - Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values. - </p> - <textarea cols="80" id="editorFull" name="editorFull" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <pre id="editorFullCfg" class="samples"></pre> - </div> - - <script> - -(function() { - 'use strict'; - - var buttonsNames; - - CKEDITOR.config.extraPlugins = 'toolbar'; - - CKEDITOR.on( 'instanceReady', function( evt ) { - var editor = evt.editor, - editorCurrent = editor.name == 'editorCurrent', - defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ), - pre = CKEDITOR.document.getById( editor.name + 'Cfg' ), - output = ''; - - if ( editorCurrent ) { - // If default toolbar configuration has been modified, show "current toolbar" section. - if ( !defaultToolbar ) - CKEDITOR.document.getById( 'currentToolbar' ).show(); - else - return; - } - - if ( !buttonsNames ) - buttonsNames = createButtonsNamesHash( editor.ui.items ); - - // Toolbar isn't set explicitly, so it was created automatically from toolbarGroups. - if ( !editor.config.toolbar ) { - output += - '// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' + - dumpToolbarConfiguration( editor ) + - '\n\n' + - '// Toolbar groups configuration.\n' + - dumpToolbarConfiguration( editor, true ) - } - // Toolbar groups doesn't count in this case - print only toolbar. - else { - output += '// Toolbar configuration.\n' + - dumpToolbarConfiguration( editor ); - } - - // Recreate to avoid old IE from loosing whitespaces on filling <pre> content. - var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output ); - CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre ); - } ); - - CKEDITOR.replace( 'editorCurrent', { height: 100 } ); - CKEDITOR.replace( 'editorFull', { - // Reset toolbar settings, so full toolbar will be generated automatically. - toolbar: null, - toolbarGroups: null, - removeButtons: null, - height: 100 - } ); - - function dumpToolbarConfiguration( editor, printGroups ) { - var output = [], - toolbar = editor.toolbar; - - for ( var i = 0; i < toolbar.length; ++i ) { - var group = dumpToolbarGroup( toolbar[ i ], printGroups ); - if ( group ) - output.push( group ); - } - - return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];'; - } - - function dumpToolbarGroup( group, printGroups ) { - var output = []; - - if ( typeof group == 'string' ) - return '\'' + group + '\''; - if ( CKEDITOR.tools.isArray( group ) ) - return dumpToolbarItems( group ); - // Skip group when printing entire toolbar configuration and there are no items in this group. - if ( !printGroups && !group.items ) - return; - - if ( group.name ) - output.push( 'name: \'' + group.name + '\'' ); - - if ( group.groups ) - output.push( 'groups: ' + dumpToolbarItems( group.groups ) ); - - if ( !printGroups ) - output.push( 'items: ' + dumpToolbarItems( group.items ) ); - - return '{ ' + output.join( ', ' ) + ' }'; - } - - function dumpToolbarItems( items ) { - if ( typeof items == 'string' ) - return '\'' + items + '\''; - - var names = [], - i, item; - - for ( var i = 0; i < items.length; ++i ) { - item = items[ i ]; - if ( typeof item == 'string' ) - names.push( item ); - else { - if ( item.type == CKEDITOR.UI_SEPARATOR ) - names.push( '-' ); - else - names.push( buttonsNames[ item.name ] ); - } - } - - return '[ \'' + names.join( '\', \'' ) + '\' ]'; - } - - // Creates { 'lowercased': 'LowerCased' } buttons names hash. - function createButtonsNamesHash( items ) { - var hash = {}, - name; - - for ( name in items ) { - hash[ items[ name ].name ] = name; - } - - return hash; - } - -})(); - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html deleted file mode 100644 index a6309be0..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>UI Color Picker &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="UIColor plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the UIColor plugin to pick up skin color."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; UI Color Plugin - </h1> - <div class="description"> - <p> - This sample shows how to use the UI Color picker toolbar button to preview the skin color of the editor. - <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin - compatibility. The Moono and Kama skins are examples of skins that work with it. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <div id="ui-color-plugin"> - <p> - If the <strong>uicolor</strong> plugin along with the dedicated <strong>UIColor</strong> - toolbar button is added to CKEditor, the user will also be able to pick the color of the - UI from the color palette available in the <strong>UI Color Picker</strong> dialog window. - </p> - <p> - To insert a CKEditor instance with the <strong>uicolor</strong> plugin enabled, - use the following JavaScript call: - </p> - <pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'uicolor',</strong> - toolbar: [ [ 'Bold', 'Italic' ], [ <strong>'UIColor'</strong> ] ] -});</pre> - <h2>Used in themed instance</h2> - <p> - Click the <strong>UI Color Picker</strong> toolbar button to open up a color picker dialog. - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'uicolor', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ], - [ 'UIColor' ] - ] - }); - - </script> - </p> - <h2>Used in inline instance</h2> - <p> - Click the below editable region to display floating toolbar, then click <strong>UI Color Picker</strong> button. - </p> - <div id="editor2" contenteditable="true"> - <p>This is some <strong>sample text</strong>. You are using <a data-cke-saved-href="http://ckeditor.com/" href="http://ckeditor.com/">CKEditor</a>.</p> - </div> - <script> - - // Disable automatic creation of inline instances. - CKEDITOR.disableAutoInline = true; - - // Replace the <div id="editor3"> with an inline CKEditor instance. - CKEDITOR.inline( 'editor2', { - extraPlugins: 'uicolor', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ], - [ 'UIColor' ] - ] - }); - - </script> - </div> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/platforms/android/assets/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html deleted file mode 100644 index 174a25f3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html +++ /dev/null @@ -1,77 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Full Page Editing &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Full page support"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Full Page Editing - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to edit entire HTML pages, from the - <code>&lt;html&gt;</code> tag to the <code>&lt;/html&gt;</code> tag. - </p> - <p> - The CKEditor instance below is inserted with a JavaScript call using the following code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>fullPage: true</strong>, - <strong>allowedContent: true</strong> -}); -</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering. - Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <label for="editor1"> - CKEditor output the entire page including content outside of - <code>&lt;body&gt;</code> element, so content like meta and title can be changed: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img align=&quot;right&quot; alt=&quot;Saturn V carrying Apollo 11&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - fullPage: true, - allowedContent: true, - extraPlugins: 'wysiwygarea' - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/readonly.html b/platforms/android/assets/www/lib/ckeditor/samples/readonly.html deleted file mode 100644 index 58f97069..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/readonly.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using the CKEditor Read-Only API &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - - var editor; - - // The instanceReady event is fired, when an instance of CKEditor has finished - // its initialization. - CKEDITOR.on( 'instanceReady', function( ev ) { - editor = ev.editor; - - // Show this "on" button. - document.getElementById( 'readOnlyOn' ).style.display = ''; - - // Event fired when the readOnly property changes. - editor.on( 'readOnly', function() { - document.getElementById( 'readOnlyOn' ).style.display = this.readOnly ? 'none' : ''; - document.getElementById( 'readOnlyOff' ).style.display = this.readOnly ? '' : 'none'; - }); - }); - - function toggleReadOnly( isReadOnly ) { - // Change the read-only state of the editor. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly - editor.setReadOnly( isReadOnly ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Using the CKEditor Read-Only API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly">setReadOnly</a></code> - API to put editor into the read-only state that makes it impossible for users to change the editor contents. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - </p> - <p> - <input id="readOnlyOn" onclick="toggleReadOnly();" type="button" value="Make it read-only" style="display:none"> - <input id="readOnlyOff" onclick="toggleReadOnly( false );" type="button" value="Make it editable again" style="display:none"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/replacebyclass.html b/platforms/android/assets/www/lib/ckeditor/samples/replacebyclass.html deleted file mode 100644 index 6fc3e6fe..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/replacebyclass.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textareas by Class Name &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements by Class Name - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace all <code>&lt;textarea&gt;</code> elements - of a given class with a CKEditor instance. - </p> - <p> - To replace a <code>&lt;textarea&gt;</code> element, simply assign it the <code>ckeditor</code> - class, as in the code below: - </p> -<pre class="samples"> -&lt;textarea <strong>class="ckeditor</strong>" name="editor1"&gt;&lt;/textarea&gt; -</pre> - <p> - Note that other <code>&lt;textarea&gt;</code> attributes (like <code>id</code> or <code>name</code>) need to be adjusted to your document. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/replacebycode.html b/platforms/android/assets/www/lib/ckeditor/samples/replacebycode.html deleted file mode 100644 index e5a4c5ba..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/replacebycode.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea by Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements Using JavaScript Code - </h1> - <form action="sample_posteddata.php" method="post"> - <div class="description"> - <p> - This editor is using an <code>&lt;iframe&gt;</code> element-based editing area, provided by the <strong>Wysiwygarea</strong> plugin. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>' ) -</pre> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - - CKEDITOR.replace( 'editor1' ); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/sample.css b/platforms/android/assets/www/lib/ckeditor/samples/sample.css deleted file mode 100644 index 8fd71aaa..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/sample.css +++ /dev/null @@ -1,365 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre -{ - line-height: 1.5; -} - -body -{ - padding: 10px 30px; -} - -input, textarea, select, option, optgroup, button, td, th -{ - font-size: 100%; -} - -pre -{ - -moz-tab-size: 4; - -o-tab-size: 4; - -webkit-tab-size: 4; - tab-size: 4; -} - -pre, code, kbd, samp, tt -{ - font-family: monospace,monospace; - font-size: 1em; -} - -body { - width: 960px; - margin: 0 auto; -} - -code -{ - background: #f3f3f3; - border: 1px solid #ddd; - padding: 1px 4px; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -abbr -{ - border-bottom: 1px dotted #555; - cursor: pointer; -} - -.new, .beta -{ - text-transform: uppercase; - font-size: 10px; - font-weight: bold; - padding: 1px 4px; - margin: 0 0 0 5px; - color: #fff; - float: right; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -.new -{ - background: #FF7E00; - border: 1px solid #DA8028; - text-shadow: 0 1px 0 #C97626; - - -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; - -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; - box-shadow: 0 2px 3px 0 #FFA54E inset; -} - -.beta -{ - background: #18C0DF; - border: 1px solid #19AAD8; - text-shadow: 0 1px 0 #048CAD; - font-style: italic; - - -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; - -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; - box-shadow: 0 2px 3px 0 #50D4FD inset; -} - -h1.samples -{ - color: #0782C1; - font-size: 200%; - font-weight: normal; - margin: 0; - padding: 0; -} - -h1.samples a -{ - color: #0782C1; - text-decoration: none; - border-bottom: 1px dotted #0782C1; -} - -.samples a:hover -{ - border-bottom: 1px dotted #0782C1; -} - -h2.samples -{ - color: #000000; - font-size: 130%; - margin: 15px 0 0 0; - padding: 0; -} - -p, blockquote, address, form, pre, dl, h1.samples, h2.samples -{ - margin-bottom: 15px; -} - -ul.samples -{ - margin-bottom: 15px; -} - -.clear -{ - clear: both; -} - -fieldset -{ - margin: 0; - padding: 10px; -} - -body, input, textarea -{ - color: #333333; - font-family: Arial, Helvetica, sans-serif; -} - -body -{ - font-size: 75%; -} - -a.samples -{ - color: #189DE1; - text-decoration: none; -} - -form -{ - margin: 0; - padding: 0; -} - -pre.samples -{ - background-color: #F7F7F7; - border: 1px solid #D7D7D7; - overflow: auto; - padding: 0.25em; - white-space: pre-wrap; /* CSS 2.1 */ - word-wrap: break-word; /* IE7 */ -} - -#footer -{ - clear: both; - padding-top: 10px; -} - -#footer hr -{ - margin: 10px 0 15px 0; - height: 1px; - border: solid 1px gray; - border-bottom: none; -} - -#footer p -{ - margin: 0 10px 10px 10px; - float: left; -} - -#footer #copy -{ - float: right; -} - -#outputSample -{ - width: 100%; - table-layout: fixed; -} - -#outputSample thead th -{ - color: #dddddd; - background-color: #999999; - padding: 4px; - white-space: nowrap; -} - -#outputSample tbody th -{ - vertical-align: top; - text-align: left; -} - -#outputSample pre -{ - margin: 0; - padding: 0; -} - -.description -{ - border: 1px dotted #B7B7B7; - margin-bottom: 10px; - padding: 10px 10px 0; - overflow: hidden; -} - -label -{ - display: block; - margin-bottom: 6px; -} - -/** - * CKEditor editables are automatically set with the "cke_editable" class - * plus cke_editable_(inline|themed) depending on the editor type. - */ - -/* Style a bit the inline editables. */ -.cke_editable.cke_editable_inline -{ - cursor: pointer; -} - -/* Once an editable element gets focused, the "cke_focus" class is - added to it, so we can style it differently. */ -.cke_editable.cke_editable_inline.cke_focus -{ - box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; - outline: none; - background: #eee; - cursor: text; -} - -/* Avoid pre-formatted overflows inline editable. */ -.cke_editable_inline pre -{ - white-space: pre-wrap; - word-wrap: break-word; -} - -/** - * Samples index styles. - */ - -.twoColumns, -.twoColumnsLeft, -.twoColumnsRight -{ - overflow: hidden; -} - -.twoColumnsLeft, -.twoColumnsRight -{ - width: 45%; -} - -.twoColumnsLeft -{ - float: left; -} - -.twoColumnsRight -{ - float: right; -} - -dl.samples -{ - padding: 0 0 0 40px; -} -dl.samples > dt -{ - display: list-item; - list-style-type: disc; - list-style-position: outside; - margin: 0 0 3px; -} -dl.samples > dd -{ - margin: 0 0 3px; -} -.warning -{ - color: #ff0000; - background-color: #FFCCBA; - border: 2px dotted #ff0000; - padding: 15px 10px; - margin: 10px 0; -} - -/* Used on inline samples */ - -blockquote -{ - font-style: italic; - font-family: Georgia, Times, "Times New Roman", serif; - padding: 2px 0; - border-style: solid; - border-color: #ccc; - border-width: 0; -} - -.cke_contents_ltr blockquote -{ - padding-left: 20px; - padding-right: 8px; - border-left-width: 5px; -} - -.cke_contents_rtl blockquote -{ - padding-left: 8px; - padding-right: 20px; - border-right-width: 5px; -} - -img.right { - border: 1px solid #ccc; - float: right; - margin-left: 15px; - padding: 5px; -} - -img.left { - border: 1px solid #ccc; - float: left; - margin-right: 15px; - padding: 5px; -} - -.marker -{ - background-color: Yellow; -} diff --git a/platforms/android/assets/www/lib/ckeditor/samples/sample.js b/platforms/android/assets/www/lib/ckeditor/samples/sample.js deleted file mode 100644 index b25482d3..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/sample.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// Tool scripts for the sample pages. -// This file can be ignored and is not required to make use of CKEditor. - -( function() { - CKEDITOR.on( 'instanceReady', function( ev ) { - // Check for sample compliance. - var editor = ev.editor, - meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), - requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], - missing = [], - i; - - if ( requires.length ) { - for ( i = 0; i < requires.length; i++ ) { - if ( !editor.plugins[ requires[ i ] ] ) - missing.push( '<code>' + requires[ i ] + '</code>' ); - } - - if ( missing.length ) { - var warn = CKEDITOR.dom.element.createFromHtml( - '<div class="warning">' + - '<span>To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.</span>' + - '</div>' - ); - warn.insertBefore( editor.container ); - } - } - - // Set icons. - var doc = new CKEDITOR.dom.document( document ), - icons = doc.find( '.button_icon' ); - - for ( i = 0; i < icons.count(); i++ ) { - var icon = icons.getItem( i ), - name = icon.getAttribute( 'data-icon' ), - style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); - - icon.addClass( 'cke_button_icon' ); - icon.addClass( 'cke_button__' + name + '_icon' ); - icon.setAttribute( 'style', style ); - icon.setStyle( 'float', 'none' ); - - } - } ); -} )(); diff --git a/platforms/android/assets/www/lib/ckeditor/samples/sample_posteddata.php b/platforms/android/assets/www/lib/ckeditor/samples/sample_posteddata.php deleted file mode 100644 index e4869b7c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/sample_posteddata.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php /* <body><pre> - -------------------------------------------------------------------------------------------- - CKEditor - Posted Data - - We are sorry, but your Web server does not support the PHP language used in this script. - - Please note that CKEditor can be used with any other server-side language than just PHP. - To save the content created with CKEditor you need to read the POST data on the server - side and write it to a file or the database. - - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or <a href="http://ckeditor.com/license">http://ckeditor.com/license</a> -------------------------------------------------------------------------------------------- - -</pre><div style="display:none"></body> */ include "assets/posteddata.php"; ?> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/tabindex.html b/platforms/android/assets/www/lib/ckeditor/samples/tabindex.html deleted file mode 100644 index 89521668..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/tabindex.html +++ /dev/null @@ -1,75 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>TAB Key-Based Navigation &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - .cke_focused, - .cke_editable.cke_focused - { - outline: 3px dotted blue !important; - *border: 3px dotted blue !important; /* For IE7 */ - } - - </style> - <script> - - CKEDITOR.on( 'instanceReady', function( evt ) { - var editor = evt.editor; - editor.setData( 'This editor has it\'s tabIndex set to <strong>' + editor.tabIndex + '</strong>' ); - - // Apply focus class name. - editor.on( 'focus', function() { - editor.container.addClass( 'cke_focused' ); - }); - editor.on( 'blur', function() { - editor.container.removeClass( 'cke_focused' ); - }); - - // Put startup focus on the first editor in tab order. - if ( editor.tabIndex == 1 ) - editor.focus(); - }); - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; TAB Key-Based Navigation - </h1> - <div class="description"> - <p> - This sample shows how tab key navigation among editor instances is - affected by the <code>tabIndex</code> attribute from - the original page element. Use TAB key to move between the editors. - </p> - </div> - <p> - <textarea class="ckeditor" cols="80" id="editor4" rows="10" tabindex="1"></textarea> - </p> - <div class="ckeditor" contenteditable="true" id="editor1" tabindex="4"></div> - <p> - <textarea class="ckeditor" cols="80" id="editor2" rows="10" tabindex="2"></textarea> - </p> - <p> - <textarea class="ckeditor" cols="80" id="editor3" rows="10" tabindex="3"></textarea> - </p> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/uicolor.html b/platforms/android/assets/www/lib/ckeditor/samples/uicolor.html deleted file mode 100644 index ce4b2a26..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/uicolor.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>UI Color Picker &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; UI Color - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements - with a CKEditor instance with an option to change the color of its user interface.<br> - <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin - compatibility. The Moono and Kama skins are examples of skins that work with it. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - This editor instance has a UI color value defined in configuration to change the skin color, - To specify the color of the user interface, set the <code>uiColor</code> property: - </p> - <pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>uiColor: '#14B8C4'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - uiColor: '#14B8C4', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ] - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/uilanguages.html b/platforms/android/assets/www/lib/ckeditor/samples/uilanguages.html deleted file mode 100644 index 66acca43..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/uilanguages.html +++ /dev/null @@ -1,119 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>User Interface Globalization &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <script src="assets/uilanguages/languages.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; User Interface Languages - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements - with a CKEditor instance with an option to change the language of its user interface. - </p> - <p> - It pulls the language list from CKEditor <code>_languages.js</code> file that contains the list of supported languages and creates - a drop-down list that lets the user change the UI language. - </p> - <p> - By default, CKEditor automatically localizes the editor to the language of the user. - The UI language can be controlled with two configuration options: - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-language">language</a></code> and - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-defaultLanguage"> - defaultLanguage</a></code>. The <code>defaultLanguage</code> setting specifies the - default CKEditor language to be used when a localization suitable for user's settings is not available. - </p> - <p> - To specify the user interface language that will be used no matter what language is - specified in user's browser or operating system, set the <code>language</code> property: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - // Load the German interface. - <strong>language: 'de'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - Available languages (<span id="count"> </span> languages!):<br> - <script> - - document.write( '<select disabled="disabled" id="languages" onchange="createEditor( this.value );">' ); - - // Get the language list from the _languages.js file. - for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ ) { - document.write( - '<option value="' + window.CKEDITOR_LANGS[i].code + '">' + - window.CKEDITOR_LANGS[i].name + - '</option>' ); - } - - document.write( '</select>' ); - - </script> - <br> - <span style="color: #888888"> - (You may see strange characters if your system does not support the selected language) - </span> - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Set the number of languages. - document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length; - - var editor; - - function createEditor( languageCode ) { - if ( editor ) - editor.destroy(); - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - editor = CKEDITOR.replace( 'editor1', { - language: languageCode, - - on: { - instanceReady: function() { - // Wait for the editor to be ready to set - // the language combo. - var languages = document.getElementById( 'languages' ); - languages.value = this.langCode; - languages.disabled = false; - } - } - }); - } - - // At page startup, load the default language: - createEditor( '' ); - - </script> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/samples/xhtmlstyle.html b/platforms/android/assets/www/lib/ckeditor/samples/xhtmlstyle.html deleted file mode 100644 index f219d11d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/samples/xhtmlstyle.html +++ /dev/null @@ -1,231 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>XHTML Compliant Output &mdash; CKEditor Sample</title> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <script src="../ckeditor.js"></script> - <script src="../samples/sample.js"></script> - <link href="sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Producing XHTML Compliant Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output valid - <a class="samples" href="http://www.w3.org/TR/xhtml11/">XHTML 1.1</a> code. - Deprecated elements (<code>&lt;font&gt;</code>, <code>&lt;u&gt;</code>) or attributes - (<code>size</code>, <code>face</code>) will be replaced with XHTML compliant code. - </p> - <p> - To add a CKEditor instance outputting valid XHTML code, load the editor using a standard - JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - full definition: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - contentsCss: 'assets/outputxhtml.css', - - coreStyles_bold: { - element: 'span', - attributes: { 'class': 'Bold' } - }, - coreStyles_italic: { - element: 'span', - attributes: { 'class': 'Italic' } - }, - - ... -});</pre> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;span class="Bold"&gt;sample text&lt;/span&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - /* - * Style sheet for the contents - */ - contentsCss: 'assets/outputxhtml/outputxhtml.css', - - /* - * Special allowed content rules for spans used by - * font face, size, and color buttons. - * - * Note: all rules have been written separately so - * it was possible to specify required classes. - */ - extraAllowedContent: 'span(!FontColor1);span(!FontColor2);span(!FontColor3);' + - 'span(!FontColor1BG);span(!FontColor2BG);span(!FontColor3BG);' + - 'span(!FontComic);span(!FontCourier);span(!FontTimes);' + - 'span(!FontSmaller);span(!FontLarger);span(!FontSmall);span(!FontBig);span(!FontDouble)', - - /* - * Core styles. - */ - coreStyles_bold: { - element: 'span', - attributes: { 'class': 'Bold' } - }, - coreStyles_italic: { - element: 'span', - attributes: { 'class': 'Italic' } - }, - coreStyles_underline: { - element: 'span', - attributes: { 'class': 'Underline' } - }, - coreStyles_strike: { - element: 'span', - attributes: { 'class': 'StrikeThrough' }, - overrides: 'strike' - }, - coreStyles_subscript: { - element: 'span', - attributes: { 'class': 'Subscript' }, - overrides: 'sub' - }, - coreStyles_superscript: { - element: 'span', - attributes: { 'class': 'Superscript' }, - overrides: 'sup' - }, - - /* - * Font face. - */ - - // List of fonts available in the toolbar combo. Each font definition is - // separated by a semi-colon (;). We are using class names here, so each font - // is defined by {Combo Label}/{Class Name}. - font_names: 'Comic Sans MS/FontComic;Courier New/FontCourier;Times New Roman/FontTimes', - - // Define the way font elements will be applied to the document. The "span" - // element will be used. When a font is selected, the font name defined in the - // above list is passed to this definition with the name "Font", being it - // injected in the "class" attribute. - // We must also instruct the editor to replace span elements that are used to - // set the font (Overrides). - font_style: { - element: 'span', - attributes: { 'class': '#(family)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^Font(?:Comic|Courier|Times)$/ - } - } - ] - }, - - /* - * Font sizes. - */ - fontSize_sizes: 'Smaller/FontSmaller;Larger/FontLarger;8pt/FontSmall;14pt/FontBig;Double Size/FontDouble', - fontSize_style: { - element: 'span', - attributes: { 'class': '#(size)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^Font(?:Smaller|Larger|Small|Big|Double)$/ - } - } - ] - } , - - /* - * Font colors. - */ - colorButton_enableMore: false, - - colorButton_colors: 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00', - colorButton_foreStyle: { - element: 'span', - attributes: { 'class': '#(color)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^FontColor(?:1|2|3)$/ - } - } - ] - }, - - colorButton_backStyle: { - element: 'span', - attributes: { 'class': '#(color)BG' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^FontColor(?:1|2|3)BG$/ - } - } - ] - }, - - /* - * Indentation. - */ - indentClasses: [ 'Indent1', 'Indent2', 'Indent3' ], - - /* - * Paragraph justification. - */ - justifyClasses: [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ], - - /* - * Styles combo. - */ - stylesSet: [ - { name: 'Strong Emphasis', element: 'strong' }, - { name: 'Emphasis', element: 'em' }, - - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' } - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog.css deleted file mode 100644 index 31152d4c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie.css deleted file mode 100644 index 359d4574..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie7.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie7.css deleted file mode 100644 index 3973bd10..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_dialog_title{margin-bottom:22px}.cke_single_page .cke_dialog_title{margin-bottom:10px}.cke_single_page .cke_dialog_footer{margin-top:22px}.cke_dialog_footer .cke_resizer{margin-top:27px}.cke_dialog_tabs{top:33px}.cke_dialog_footer_buttons{position:static;margin-top:7px;margin-right:24px}.cke_rtl .cke_dialog_footer_buttons{margin-right:0;margin-left:24px}.cke_rtl .cke_dialog_close_button{margin-top:0;position:absolute;left:10px;top:5px}span.cke_dialog_ui_buttonm{margin:2px 0}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{position:absolute}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{height:14px;position:relative} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie8.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie8.css deleted file mode 100644 index ddbd6012..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_rtl .cke_dialog_footer_buttons td{padding-left:2px}.cke_rtl .cke_dialog_close_button{left:8px} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_iequirks.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_iequirks.css deleted file mode 100644 index 04ba2ee5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/dialog_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_dialog_title{margin-bottom:22px}.cke_dialog_page_contents{position:absolute}.cke_single_page .cke_dialog_title{margin-bottom:10px}.cke_dialog_close_button{top:27px;background-image:url(images/sprites_ie6.png)}.cke_dialog_footer .cke_resizer{margin-top:27px}.cke_dialog_tabs{display:block;top:33px;margin-top:33px}.cke_rtl .cke_dialog_ui_labeled_content{_width:95%}a.cke_dialog_ui_button{background:0;padding:0}a.cke_dialog_ui_button span{width:70px;padding:5px 15px;text-align:center;color:#3b3b1f;background:#53d9f0 none;display:inline-block;cursor:default}a.cke_dialog_ui_button_ok span{background-image:none;background-color:#b8e834;margin-right:0}a.cke_dialog_ui_button_cancel span{background-image:none;background-color:#f65d20;margin-right:0}a.cke_dialog_ui_button:hover span,a.cke_dialog_ui_button:focus span,a.cke_dialog_ui_button:active span{background-image:none;background:#f7a922}div.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{width:99%}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid red!important;filter:chroma(color=red)}.cke_dialog_ui_focused,.cke_btn_over{border:1px dotted #696969!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/editor.css deleted file mode 100644 index 8ac84cbf..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie.css deleted file mode 100644 index f9059430..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie7.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie7.css deleted file mode 100644 index e47ea631..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:22px}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle;padding-bottom:8px}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:3px;height:5px;padding:0;position:absolute;right:8px;top:11px;background-position:0 -1411px}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -1390px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie8.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie8.css deleted file mode 100644 index 926a9ceb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_iequirks.css b/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_iequirks.css deleted file mode 100644 index 809e90f5..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/editor_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *{float:none}.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_button_arrow{vertical-align:top;display:inline-block}.cke_toolgroup,.cke_combo_button,.cke_combo_arrow,.cke_button_arrow,.cke_toolbox_collapser,.cke_resizer{background-image:url(images/sprites_ie6.png)}.cke_toolgroup{background-color:#fff;display:inline-block;padding:2px}.cke_inner{padding-top:2px;background-color:#d3d3d3;background-image:none}.cke_toolbar{margin:2px 0}.cke_rtl .cke_toolbar{margin-bottom:-1px;margin-top:-1px}.cke_toolbar_separator{vertical-align:top}.cke_toolbox{width:100%;float:left;padding-bottom:4px}.cke_rtl .cke_toolbox{margin-top:2px;margin-bottom:-4px}.cke_combo_button{background-color:#fff}.cke_rtl .cke_combo_button{padding-right:6px;padding-left:0}.cke_combo_text{line-height:21px}.cke_ltr .cke_combo_open{margin-left:-3px}.cke_combo_arrow{background-position:2px -1467px;margin:2px 0 0;border:0;width:8px;height:13px}.cke_rtl .cke_button_arrow{background-position-x:0}.cke_toolbox_collapser .cke_arrow{display:block;visibility:hidden;font-size:0;color:transparent;border:0}.cke_button_arrow{background-position:2px -1467px;margin:0;border:0;width:8px;height:15px}.cke_ltr .cke_button_arrow{background-position:0 -1467px;margin-left:-3px}.cke_toolbox_collapser{background-position:3px -1367px}.cke_toolbox_collapser_min{background-position:4px -1387px;margin:2px 0 0}.cke_rtl .cke_toolbox_collapser_min{background-position:4px -1408px}.cke_resizer{background-position:0 -1427px;width:12px;height:12px;border:0;margin:9px 0 0;vertical-align:baseline}.cke_dialog_tabs{position:absolute;top:38px;left:0}.cke_dialog_body{clear:both;margin-top:20px}a.cke_dialog_ui_button{background:url(images/sprites.png) repeat_x 0 _ 1069px}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1179px}a.cke_dialog_ui_button_ok{background:url(images/sprites.png) repeat_x 0 _ 1144px}a.cke_dialog_ui_button_cancel{background:url(images/sprites.png) repeat_x 0 _ 1105px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{background-image:none}.cke_menubutton_label{height:25px}.cke_menuarrow{background-image:url(images/sprites_ie6.png)}.cke_menuitem .cke_icon,.cke_button_icon,.cke_menuitem .cke_disabled .cke_icon,.cke_button_disabled .cke_button_icon{filter:""}.cke_menuseparator{font-size:0}.cke_colorbox{font-size:0}.cke_source{white-space:normal} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/icons.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/icons.png deleted file mode 100644 index a041850a923cdc8fd9cf1d34b563ae883e592261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9633 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 diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/icons_hidpi.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/icons_hidpi.png deleted file mode 100644 index 1581f600b050d577e7aa725befb4618526fda659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15510 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 diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.gif b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.gif deleted file mode 100644 index b5d9a532742be3b80fe8fa49dc0508a929554519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47 ycmZ?wbhEHbRA69a_`tw$_3GUJ|NkrgWMO0g3g|EZ0Z7JyiLIxfgZpJTgEat4Jq%m` diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides.png deleted file mode 100644 index 2df7a15be31234ff8dbf372be25d82aefa9e14e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQZAk@jv*DdlK%YvZ_jMFV2MhT zq{l`kLu-Lzb=94=uG8k5=U>-V_{!LEpZR09LLKLk^9#RZudwj=$1PCL`e?qxA8CaH Z40anton)%nwgSy#@O1TaS?83{1OUR^C|>{o diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png deleted file mode 100644 index b179935fa33237cb367cf6c75146a0a93412b745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQtqBEjv*Ddl63U=($f+W5?GVU z6rQmq$tj32BsnUGu_hHNOl!HcD4?)$iHf-?n~FjHJ-tkYuc96GOdsFRn<rW?*#R_> ajbYw?uK!Q}nw|g}$>8bg=d#Wzp$P!)D<w|= diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/mini.gif b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/mini.gif deleted file mode 100644 index babc31a5d7076bac05f3bc810da079bc2bc24a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHb6ksr5_{6|4bLJTahKBO;@&yZ)Ff=rzrOjku_zwh%KUo+V7}yzf7=Qqz z)`7XIV%HtN2{T@<N)5bpdb(zFa*J3>iH7@<xsf8lg(uEQ^Q)|`T2;a#Ez7mYI@V|Z zf`XkB9*9izPfk#nz|bmMeEO<f&(fYvf}TzClfTS7omLf?-D7c2h3RF$*BxiqGsG~6 h)hqbx@yc7WGYB*B8gw>_8OTS5bp~7b$8a)O0|4X<LRtU- diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites.png deleted file mode 100644 index 5fc409d141ff1e445a064e02069a3de6bc7f2f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6117 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 diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites_ie6.png b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/sprites_ie6.png deleted file mode 100644 index 070a8cee1a9330870e9ac8eca43f997ef1cb35ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2658 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 KuqZly@$SC{8hw!f diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/images/toolbar_start.gif b/platforms/android/assets/www/lib/ckeditor/skins/kama/images/toolbar_start.gif deleted file mode 100644 index 94aa4abc1be94b1a11ea88ce2c875542ab424e76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmZ?wbhEHbWM&Xx_{_ktYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(zScEq)EV;3&yH|wo;EV|pzM1nfvfLP~0kBOY A-T(jq diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/readme.md b/platforms/android/assets/www/lib/ckeditor/skins/kama/readme.md deleted file mode 100644 index ac304db8..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -"Kama" Skin -==================== - -"Kama" is the default skin of CKEditor 3.x. -It's been ported to CKEditor 4 and fully featured. - -For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) -documentation. - -Directory Structure -------------------- - -CSS parts: -- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, -- **mainui.css**: the file contains styles of entire editor outline structures, -- **toolbar.css**: the file contains styles of the editor toolbar space (top), -- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, -- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded -until the first panel open up, -- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), -- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, -it's not loaded until the first menu open up, -- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, -- **reset.css**: the file defines the basis of style resets among all editor UI spaces, -- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, -- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - -Other parts: -- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, -- **icons/**: contains all skin defined icons, -- **images/**: contains a fill general used images. - -License -------- - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. diff --git a/platforms/android/assets/www/lib/ckeditor/skins/kama/skin.js b/platforms/android/assets/www/lib/ckeditor/skins/kama/skin.js deleted file mode 100644 index 5d2c0959..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/kama/skin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.skin.name="kama";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; -CKEDITOR.skin.chameleon=function(e,d){function b(a){return"background:-moz-linear-gradient("+a+");background:-webkit-linear-gradient("+a+");background:-o-linear-gradient("+a+");background:-ms-linear-gradient("+a+");background:linear-gradient("+a+");"}var c,a="."+e.id;"editor"==d?c=a+" .cke_inner,"+a+" .cke_dialog_tab{background-color:$color;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to($color));"+b("top,#fff -15px,$color 40px")+"}"+a+" .cke_toolgroup{background:-webkit-gradient(linear,0 0,0 100,from(#fff),to($color));"+ -b("top,#fff,$color 100px")+"}"+a+" .cke_combo_button{background:-webkit-gradient(linear, left bottom, left -100, from(#fff), to($color));"+b("bottom,#fff,$color 100px")+"}"+a+" .cke_dialog_contents,"+a+" .cke_dialog_footer{background-color:$color !important;}"+a+" .cke_dialog_tab:hover,"+a+" .cke_dialog_tab:active,"+a+" .cke_dialog_tab:focus,"+a+" .cke_dialog_tab_selected{background-color:$color;background-image:none;}":"panel"==d&&(c=".cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton:hover .cke_menubutton_label,.cke_menubutton:focus .cke_menubutton_label,.cke_menubutton:active .cke_menubutton_label{background-color:$color !important;}.cke_menubutton_disabled:hover .cke_menubutton_label,.cke_menubutton_disabled:focus .cke_menubutton_label,.cke_menubutton_disabled:active .cke_menubutton_label{background-color: transparent !important;}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton_disabled .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menuseparator{background-color:$color !important;}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:$color !important;}"); -return c}; \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog.css deleted file mode 100644 index 1504938d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie.css deleted file mode 100644 index 93cf7aed..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie7.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie7.css deleted file mode 100644 index 4b98ae57..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie8.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie8.css deleted file mode 100644 index 4f2edca9..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_iequirks.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_iequirks.css deleted file mode 100644 index bb36a95d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/dialog_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor.css deleted file mode 100644 index c21d8f8d..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_gecko.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_gecko.css deleted file mode 100644 index 7aa2f32c..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_gecko.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie.css deleted file mode 100644 index 9afe7e92..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie7.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie7.css deleted file mode 100644 index ba856696..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie8.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie8.css deleted file mode 100644 index c4f4a1af..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_iequirks.css b/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_iequirks.css deleted file mode 100644 index 3de6bfdb..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/editor_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/icons.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/icons.png deleted file mode 100644 index 163fd0def2d8c4d6a17c203e923dcff3ac512ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18271 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 diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/icons_hidpi.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/icons_hidpi.png deleted file mode 100644 index c181faa9e06422f5c4cb1468f6e99201e0291ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62881 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 P0zS&}>T(q_7D4|9<nUw{ diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/arrow.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/arrow.png deleted file mode 100644 index d72b5f3b8808bd89996ef62f845164d459957a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol>!VDz;rWf@BDXjpX5LX~=X=(ZY|9>EfAH1#& z-3wIBTN30K45T@Ev~-ix<}bSOt=nC)A1Gk%>Eal|aXtBhiAd6gyIe=gyBc<MI+o8C zXr8uMpm~u(nU7JzyaNXWY8xB>zF}qKQ%F0(mNbo(!7G$6ystm-3eX4!Pgg&ebxsLQ E09R-@$^ZZW diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/close.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/close.png deleted file mode 100644 index 6a04ab5275b321ce911c4e1416df7e0184d05f51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf(g2?j*SmM`-n)12!Gi~n9zA;e z`0<k`Po6$~`ug?jw{PFRd-v}B`}dzdefs+K>$h*;zJLGz<HwIbfByXa`}g0!fB*mg z2bzHi*xA_`85#Nb_>iSUMMc%s)kQ=^Bqb$fWn~o<6oA~|;9y%@TNf7>e}Dgoh=|C@ z$mr;3CnqOwZ|}gsz|hdpn3$O4<mA-U)X=KuJwW3ON`m}A4#xmY;Stes@kvRk>67O? zeE#wc(2+oA0v!ni`CC}e12wGkba4!kkc>STSk!F5<8V;@q(cnT$uIxXbDYwnHXI20 zznl9%hr)yghbDzZvup(?cbsYBkw5jWXX+2z%?nB|&bJCE>3b9CvZkg_ddl%%sY-2p zciuhvRkQ7^EzhNOM%l6b;kVbDIBe=KwTZ9(?7(=`_OdK1&)j93&fUu|^7>}-Chzs5 z_sJ{fJWC8(mio1P_ql~`)`ur#?%8+Odfr~yz>Zjzezy%z<s@7#M5XZ0Qm=n|D(&yy S_2)n?XYh3Ob6Mw<&;$Vd#K%nl diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/close.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/close.png deleted file mode 100644 index e406c2c35ba11a410291fe484d5bb406657b62eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V0;tc6XJSh#fqyyv~uOORjaPA zT6JUf>YG5cX3Z@iTD$i4+O>Dqt-HH^{liV09&Ot6c=P5bK(uAc)2&;dZQc4Dh_-Ee zxqbV~9Xnp{-1%nb&bPaFzuUe0^S*tb_wWC5;K0{|2frOS@a^EiABPYBJAV8>5S=*j z|K!R4r%wGpefs~|v;WVX`+xrY{|guXU%veR%9a1uum8V!6X-&s03#y{4-coHAOjN< zF7?84azG>`D=R214OAv9D+@&WmX<*ETmk|DqM|?~A|b&mEX*e&!Vg415fKq-S=pfA zU_(nwIW;wHV`EcmYfF238%IZ5CnqO&cOO5$fY8vu(9p2(@W8OJkjTiem>7E}CkJO| zM^{%T7Z+D|F!1zr_ww=p0#8pbAn@_=1_B=+A73!=^Yilug8&c+3=9kcf?yB`0fJBv z2n!2~0D?#`h>nf|f@lzk0fM-=*x1;(xVU&ANC1Px#3Ud{PEJZmNls2q0fMx&bRfvc z$jZvf&dtrq$yq#0?-bDIOG<+Lf^mfyPH|QlH7z4^3rj0&8(Wb7JUqR8rcR%~VBw0D zt5&bwymi~F_wPS^_y_@CzJ7y)@87@wB@djAYS_oXz$E7B;uvCa`s(Dn{=$I*N1xw& zmuH{2J$}UvvF664p8t)Uot^w@YX3e<Efw+=kX|z7(zLwt@^@!GF7(#4`SEVgojKO~ z?|7b@>HS4MMA5#twxCv@S8$@{k82K*Q#(4=#CkFcR=T*fdPzi-erDAcjNHHLY2?{u z8&A962-^K~k93eA&xEgw=dQTCQgSj^(SkcSY^&H+_8IlaZ_V2K&rrQ^&eMkQ)$jKo z-Tcq>QD?>Nw^8pe2fz6zd3@zMhG31h-+n9WXI3n`bLUlUNZF@U3*XP;JztqFmn8A) zU0x9Ny6(c2hoAc|9(u~aV3B*^;^~i<-tU_p^7Zw}pDGir7cZD)cvUg2KF)rcPiaAs zS>%pt^@k?OCJU~-)L1=_r!MxqtQmua!EBF+7&QyoKl9Ga%}ZnKFx)8aDEj5|?FysE zq4lX>wd7837f{l=vuW$Iz**P$qi^fSbuwKrJ02!+gJF&Q)<t{Gr}WoOQVT0ywBcQO zytZ@uX0Dd9OK<u<badowmHhha(18qx4C#;kJdNqQ`gV)Hlg&~qGTq@RwscWf<|n3; zR`0wPmuE;w@Vi~#sH2@KB(3(@;&4_AZ<AGb!mnDBd6Si`IC`^eIo8}c8mpJ*oVI-N z$DX5_le+lJ>q<8ZnjeXq6B~Ozf^oT&wN%`lJ4T<@emnIwOEc2%aZRRn;?5~LYTo7h wzq#6<u$Vfvl0W6$PSdc3uj@a1{M-DGX;O1gaCJP-eNc+^boFyt=akR{0APJM!2kdN diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png deleted file mode 100644 index edbd12f3bdc10a969f350a8c482f92c224d1c466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1329 zcmV-11<v}3P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000E|Nkl<ZSi_xG zO>7fa5dP-v+ibkXKVZe+7Bwiq5s(474n?R34pjx@h*VlBB~_$|Yjdd7L)9LtD(5Ov z)dL4Ww3l9cKsgjjQ3S1!I3S^@QYDnc5QyV{@4h!Zc-L&4wX<d<AN<yy`R4m(zJ2uM z_HDdPP@i)iGLIa#s1O2%5Fqj(uvgOi&dg9+Lu(xgOk@B=1StgKu^3XejS(rqT0?0K z03A?5pzXRS*XyV?8gR7+^I#Z}01yBv1QNE5TqXl577s&+sm#HH#iK`$zE46J&z?Pd z^z!-hhj5%*{NTaL>c$2t_4=+LA^{LWAU-<k7ys<jt5<(a+ICzi)n(xLks}v`VO-d% z)#j;K{F3kA{|U^f?81bI0>JRPr(*G&FRop?p0w>aD+Msa0AK)s*3hntJ(d-po}FEc zO-<d(?c0ZhZ9@vtcW5I42*eLRU%&osrO{|;B9LLgFijYy2_Yqj2&^?s0GFqxF4LJa zv$;$L@mLH(gqNZyYiM{9WRgkPsT3%me{Xbb?Ca*{=D%>9-vE>Wocs9FrSIR(<;Gbl zFcB(^M(x)dH}aLGrIpoJuh4egx0?a2HEPW!+O7+`RzqcJ=|9UfXN3?D-t@z^f1zW? ze*fs=#eWVSI4}-oBy2klDL=7H^E*KV!cL!v1b~6gZaWSf*G09_=u+x?L&CPfj~|!m z#EGvypP9MEN<jli@85r#2YA9zM#Riep3!uN%Ii#Pjksk2z#olv8zvEy))*fjKc%#O zV^}>ga0m(Emb>kY84SQt3a_hG@bdENX0-~(b)l3(I-Sn3x2nEd4rE}5-FgLf3nGH+ zx=_s~>dhwhm?i)~DFwqYFk+f-qzp*11Aq_$wq+p|kHeA@%nXj;>jXd=28>t?W?=6v zDPbiNc*ihMYqe0W)lhG>x(2pm4M(IzHl0TL{Q0wE6B7$Z4j(S)0UGv#x1>ZO7Q?9Q z^wx4+)Y@%4dHQsDePv~S^Uj@nrOnOmN^WC-JSr_IF*Y%=@WIKG1p?63FhU5T&T4vk zk4OnqN=)YSg+G}WEGZ``u#%x$z|5F9bf^GkNFe~jhzuZ@quUe!<>l;sC&-Y00?cq6 z2g-FJ4CBqa|1E==p_GE-INkjH0eGRAq5Tc$qkk{3es4Su<m-)a07RW+-iLQQrp|AO zx*)p6nZtqj=RKhNGN6>|d;&#+0GsW$^Vh?NH@8ZqMF2=<vvZTDPhS}w88Leq^CeJ9 zMPR_6&_L(Gj(ji=9zD8QzI%5DTU(t6$>dD>+&O$WIXN9B2YYAa)!0=6trT<!14IM} zf%5wLA}STEmP!DC91+Uv>x-Is8a+24X71*TBmto_G~90p2bhvSJKF&GAbbX*%mDjI zLWYpFMlze7Ln<|s^AA%gB(vE$tu-iQ5V_BA4wgV`D5XM&@YM0+SN0T(sBLU40zf>I znJeV;SG0Fm>@BXf9!`QF;xObRQkrKAg=qlOL20<hXnGllBmoh1jU#Mzd=`3>4Kgi1 zA4T#3BCM{hEg#ssx6rSnp@Imm)>vIzTOKHZKdnv2LG#6n`M;SL_Ghz&pv#3N-|ZO@ zVZBsZZoPat-*lX99<zf1r8QnxtJqpvx;JW?lYNs9$p8Q}9S5(g)$U~^6oA$m^=1>T nb{o{^Dm`@l0K5K`%#Z&8E@ID3`%|n)00000NkvXXu0mjf=}%$% diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/lock.png deleted file mode 100644 index 1b87bbb7a14ceac0e259d75bdbc03365f01e9acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcmcK2YfO_@7zgl|J7XgE`xuonh01Nvjr*nTTY7<(-l(*+SfqVRg|f}S7??s;78ztp zX0k1txJ4X+B9|7(76PTE8=#;ILmd?4R;B^j!~z2x+8z9CvQPWvf6jSwzMPXM&u0ue z$=S)@34$PJ3K?dB6Lqj0ZNLuSs2_nKYbQn)hj_2G^*%^j+k>{Y-&LyV_V$_fcH_;P zvmhNEa~&NIJ3AM;yO-4JC5>iTtzPNveFW0ix8C2sF)(1(YB#mot---<5UuuakfEU+ z5S?yEuiw?_cJ=x_oo)~8!^6)(42FLUhW+7T%gBgjY|L`|wq<<WGBIJfbH_3{X_=a` z%*<G3XTc|5!`2qEvwPFS<FL24i;s_^mzQfmfF}y&;OPl!ui#)GG@4AKQR(!k#KZ(5 zkt-176%^oLm_(%phK2@)g}sfz9EpfPM@EK3MIDWaITjlmhQ%I_iwlpBk4j34PEL+V zNr}Vb6H-$XU^tmXN=ZvgNl#D3;ZiA-G%7V6k54C)aRdT^NF-!t!T^y7XJilo(ko;# zi9!L-kpT*Y3<@Tb3S?$dv$8S)8ZDDf&jRRl8jzh$V>0OglbH=L7z`GR!Dcf!945ee zh0SJhIBXy%hXcap<^bFSCwRPEK0j9|<O>AC{QP{8=%iRI0uZF2u&_`pE|f?L5kw3~ zBx0#lf*=y96hROvP*fz9$%<q$S#hzfq~x?*{-jjt2b$hl#-g)d)BOLqa`8iBlTRQD zMN?B#i&{Mj%+If^n9aMpFaB@Sp@FD_d8WWPPW-t1%CDtU>ApWdo)va&{wTvRRW0uB zs>XO!=Uk-==9!?5@ZAN6#Syn!*AzSWhcB_^{#}C$haF~V#>Iw??d;fVlers<?hsT# zH%g109dWEbY9Nz+^;^e3smOcyORtS@Tvg(h_M%3`t*O8C;kP>m!!7;Uj>SJmi_hG5 zZ#pk-HW(_<uFCJ@hX%q=TPx*OammKCCkDQhcu%{(hDT5Ga?`FNn4r?&xs|LQ+1C4| zVRbbzsm&=vDuQ_LMS0csJ6<2<om;!G6m!?cJforaebD}s13pT9sX=4w!;4=3)IM4m zSarQh9f{Fk9{8w^8AHnCqr7~Qpe@m+x#~SalawQ|nXayGbU8GTl<V<Z#k{EdtCJVY zOT^}9n}buPH(uTyx7BSS?798t>ix=qMW}A|^1`E2(SBSAdU|Li>Y8G$tCm(@1~=H6 z6ag5$lC;o&ImGX(B0jJPRk>h;_7e6O1LgJZU)YLj?I~aT3umymFustv(yj67&=Dm^ z?g_V&m3kVp*&AiWs4odWC9^_H_CGgi5Nm8H&$p$wuM4(gUDumDCrs~Z2E6SyLW!%& zP!I0Lm2aTnAU?{vkv)U$mKU^^qb1M{1k-Ofb_PyW@s~9{B7WB6vn4NitEC!2g!?Sd p*{oO(6}kOo)YtW8d<-4USq^e@@n6;8y}(pJ5QRvGJMp6P{{r75P22zg diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png deleted file mode 100644 index c6c2b86e6d1cd21bd352a54321ae13100b78e581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1842 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 diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock-open.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock-open.png deleted file mode 100644 index 04769877aa6d074e476f9560638d06cb158aaf1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0003bNkl<ZD9>Hc z&n^Q25XbTF&7uB8h{F<*UK$c{6bF(DX-V5yq<8{P)2DIiBX|hAR<{~TY$9<em9Imq zS@OHhd@?f`B1VZx=+dJ{k1h%ExISrj$Z(R3&X|lr!Yjf7H)PyWm5d}09(acx?l@*~ z;d-`1RZ`;ogg#%B1@qV3%HuB>o%h5mZ)AKROqT}ICn1K2gcrVZ2a4<}@<IX;DMM)g z6(=I?At}Ukk!4T4^lF?-FAQB)y1!t{nrEKdv}x0GPp!F?2kTaB7`oY-3N~Az4J)qa zLCHhwh86-T1fg{gE#*PcvPU+YX%Wn{8Xj4;m<NH|?z!)Vb8firp4$c^5Ro!~_L6}s vuDa%`D+Vq}dq4^i_dN6Y?@=P3Jaf+vlmhmmbAk*n00000NkvXXu0mjfJj9ZI diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/lock.png deleted file mode 100644 index c5a14400d5ddfe1c564c7c93799c24d03f0e9618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf;Q*fy*SmM`-n)12{{8z89z1yT z=+WcHkDokw^7QG`XV0F!eEIU#t5>gIzkdJz{m-92fBpLP=g*)2|NjHELI68EJ2y8s zkS!=EC?q7r%gd{)s|%6h<KqJ|)Ya92BtJjDn3$N9l$5lzw2X|5oSdA3f`XEg5>QrC zQ&USzOJ85#+}zyO*4EC>&e74)$;rvp)z#hI-P6<4$H&Ll*VoU_FCZWwFfcGEC@3T( zBrGf}JUl!iA|f&}GAb%c^3n-Mpfw65L4F`_p#mOBpv4~P>Ak%>PCWYb^I+EhUqA)R zJzX3_BqUi68WtTk;Bh_3F0dqH=?3-5S9bp27<4=JnDRuWx-#Aadn}%KH8O@(F~l4f zV%6B5u|000zF>k}?(D_64^}eFG4tcw`tZRF@ly(tt&g5n<lkvsY`wPn!N<Vw><9kM zsLu=gzW%*|vFG*AU-=fqr?FkSs@QPm>HfukQ`A@#Ix8h7DKMl)rKBuVXo%cucmMZ^ rIRclgQu1>9uIx<t5hlx^@cbvg318?Ii9lH$ke@tV{an^LB{Ts5+fc4+ diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/images/refresh.png b/platforms/android/assets/www/lib/ckeditor/skins/moono/images/refresh.png deleted file mode 100644 index 1ff63c3090ab7dc443a74be76c1d7b52fabb71d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0004PNkl<Z7#Rh@ zy-QUA00+=xW|)-}gt=)ER1g`p^dU)VLqd^M7!n}_IYiLV)<4h`NK=at&Q6Uj(H1QZ z(GvG^eSSpw^!YRpHT-psLZMJ7lqz+5A{uH+g@Qt%P^v7d3n#qQ7Mm873JRslvZjd8 zJrrN{#)g`bLZvQ3pXc7UPru4|4m6C$s*2LG&~ED3-o*@OIFp&oL^@;muX!p>;p5dj z%lP`u&v$=J<Vo&t8jHG$CE;m*#?$l8!O;CUL*Jc=rkaw5*!OKL=RZY+?o%^5V#jau zN_MsFzq0i(9><2z5)lzAD*kbFD5EhFb!&D-m^J6co(0xLU+qr3iEV3kgyVg?12G;; z{1S&}Zs+utOA*o9X7*lg?dXjK7KQHXD<kRLHsz6*t#j8hk|VF9siM*l1~2~^&V`)J zx%B5ox;|))WhJGW4WaAM^x2<-djrj$FCIj!suUDTH4PD=LrX-{vP!A&AMRM*Bw=>U Qp#T5?07*qoM6N<$g14l=!T<mO diff --git a/platforms/android/assets/www/lib/ckeditor/skins/moono/readme.md b/platforms/android/assets/www/lib/ckeditor/skins/moono/readme.md deleted file mode 100644 index d086fe9b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/skins/moono/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -"Moono" Skin -==================== - -This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor -[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by -the CKEditor team. "Moono" is maintained by the core developers. - -For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) -documentation. - -Features -------------------- -"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. -It comes with the following features: - -- Chameleon feature with brightness, -- high-contrast compatibility, -- graphics source provided in SVG. - -Directory Structure -------------------- - -CSS parts: -- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, -- **mainui.css**: the file contains styles of entire editor outline structures, -- **toolbar.css**: the file contains styles of the editor toolbar space (top), -- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, -- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded -until the first panel open up, -- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), -- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, -it's not loaded until the first menu open up, -- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, -- **reset.css**: the file defines the basis of style resets among all editor UI spaces, -- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, -- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - -Other parts: -- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, -- **icons/**: contains all skin defined icons, -- **images/**: contains a fill general used images, -- **dev/**: contains SVG source of the skin icons. - -License -------- - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. diff --git a/platforms/android/assets/www/lib/ckeditor/styles.js b/platforms/android/assets/www/lib/ckeditor/styles.js deleted file mode 100644 index 18e4316b..00000000 --- a/platforms/android/assets/www/lib/ckeditor/styles.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// This file contains style definitions that can be used by CKEditor plugins. -// -// The most common use for it is the "stylescombo" plugin, which shows a combo -// in the editor toolbar, containing all styles. Other plugins instead, like -// the div plugin, use a subset of the styles on their feature. -// -// If you don't have plugins that depend on this file, you can simply ignore it. -// Otherwise it is strongly recommended to customize this file to match your -// website requirements and design properly. - -CKEDITOR.stylesSet.add( 'default', [ - /* Block Styles */ - - // These styles are already available in the "Format" combo ("format" plugin), - // so they are not needed here by default. You may enable them to avoid - // placing the "Format" combo in the toolbar, maintaining the same features. - /* - { name: 'Paragraph', element: 'p' }, - { name: 'Heading 1', element: 'h1' }, - { name: 'Heading 2', element: 'h2' }, - { name: 'Heading 3', element: 'h3' }, - { name: 'Heading 4', element: 'h4' }, - { name: 'Heading 5', element: 'h5' }, - { name: 'Heading 6', element: 'h6' }, - { name: 'Preformatted Text',element: 'pre' }, - { name: 'Address', element: 'address' }, - */ - - { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, - { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, - { - name: 'Special Container', - element: 'div', - styles: { - padding: '5px 10px', - background: '#eee', - border: '1px solid #ccc' - } - }, - - /* Inline Styles */ - - // These are core styles available as toolbar buttons. You may opt enabling - // some of them in the Styles combo, removing them from the toolbar. - // (This requires the "stylescombo" plugin) - /* - { name: 'Strong', element: 'strong', overrides: 'b' }, - { name: 'Emphasis', element: 'em' , overrides: 'i' }, - { name: 'Underline', element: 'u' }, - { name: 'Strikethrough', element: 'strike' }, - { name: 'Subscript', element: 'sub' }, - { name: 'Superscript', element: 'sup' }, - */ - - { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, - - { name: 'Big', element: 'big' }, - { name: 'Small', element: 'small' }, - { name: 'Typewriter', element: 'tt' }, - - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' }, - - { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, - { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, - - /* Object Styles */ - - { - name: 'Styled image (left)', - element: 'img', - attributes: { 'class': 'left' } - }, - - { - name: 'Styled image (right)', - element: 'img', - attributes: { 'class': 'right' } - }, - - { - name: 'Compact table', - element: 'table', - attributes: { - cellpadding: '5', - cellspacing: '0', - border: '1', - bordercolor: '#ccc' - }, - styles: { - 'border-collapse': 'collapse' - } - }, - - { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, - { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } -] ); - diff --git a/platforms/android/assets/www/lib/d3/.bower.json b/platforms/android/assets/www/lib/d3/.bower.json deleted file mode 100644 index 5c7a0fde..00000000 --- a/platforms/android/assets/www/lib/d3/.bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "d3", - "version": "3.4.11", - "main": "d3.js", - "scripts": [ - "d3.js" - ], - "ignore": [ - ".DS_Store", - ".git", - ".gitignore", - ".npmignore", - ".travis.yml", - "Makefile", - "bin", - "component.json", - "index.js", - "lib", - "node_modules", - "package.json", - "src", - "test" - ], - "homepage": "https://github.com/mbostock/d3", - "_release": "3.4.11", - "_resolution": { - "type": "version", - "tag": "v3.4.11", - "commit": "9dbb2266543a6c998c3552074240efb36e4c7cab" - }, - "_source": "git://github.com/mbostock/d3.git", - "_target": "~3.4.11", - "_originalSource": "d3", - "_direct": true -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/d3/.spmignore b/platforms/android/assets/www/lib/d3/.spmignore deleted file mode 100644 index 0a673041..00000000 --- a/platforms/android/assets/www/lib/d3/.spmignore +++ /dev/null @@ -1,4 +0,0 @@ -bin -lib -src -test diff --git a/platforms/android/assets/www/lib/d3/CONTRIBUTING.md b/platforms/android/assets/www/lib/d3/CONTRIBUTING.md deleted file mode 100644 index 76126d5f..00000000 --- a/platforms/android/assets/www/lib/d3/CONTRIBUTING.md +++ /dev/null @@ -1,25 +0,0 @@ -# Contributing - -If you’re looking for ways to contribute, please [peruse open issues](https://github.com/mbostock/d3/issues?milestone=&page=1&state=open). The icebox is a good place to find ideas that are not currently in development. If you already have an idea, please check past issues to see whether your idea or a similar one was previously discussed. - -Before submitting a pull request, consider implementing a live example first, say using [bl.ocks.org](http://bl.ocks.org). Real-world use cases go a long way to demonstrating the usefulness of a proposed feature. The more complex a feature’s implementation, the more usefulness it should provide. Share your demo using the #d3js tag on Twitter or by sending it to the d3-js Google group. - -If your proposed feature does not involve changing core functionality, consider submitting it instead as a [D3 plugin](https://github.com/d3/d3-plugins). New core features should be for general use, whereas plugins are suitable for more specialized use cases. When in doubt, it’s easier to start with a plugin before “graduating” to core. - -To contribute new documentation or add examples to the gallery, just [edit the Wiki](https://github.com/mbostock/d3/wiki)! - -## How to Submit a Pull Request - -1. Click the “Fork” button to create your personal fork of the D3 repository. - -2. After cloning your fork of the D3 repository in the terminal, run `npm install` to install D3’s dependencies. - -3. Create a new branch for your new feature. For example: `git checkout -b my-awesome-feature`. A dedicated branch for your pull request means you can develop multiple features at the same time, and ensures that your pull request is stable even if you later decide to develop an unrelated feature. - -4. The `d3.js` and `d3.min.js` files are built from source files in the `src` directory. _Do not edit `d3.js` directly._ Instead, edit the source files, and then run `make` to build the generated files. - -5. Use `make test` to run tests and verify your changes. If you are adding a new feature, you should add new tests! If you are changing existing functionality, make sure the existing tests run, or update them as appropriate. - -6. Sign D3’s [Individual Contributor License Agreement](https://docs.google.com/forms/d/1CzjdBKtDuA8WeuFJinadx956xLQ4Xriv7-oDvXnZMaI/viewform). Unless you are submitting a trivial patch (such as fixing a typo), this form is needed to verify that you are able to contribute. - -7. Submit your pull request, and good luck! diff --git a/platforms/android/assets/www/lib/d3/LICENSE b/platforms/android/assets/www/lib/d3/LICENSE deleted file mode 100644 index 83013469..00000000 --- a/platforms/android/assets/www/lib/d3/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2010-2014, Michael Bostock -All rights reserved. - -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. - -* The name Michael Bostock may not 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 MICHAEL BOSTOCK 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. diff --git a/platforms/android/assets/www/lib/d3/README.md b/platforms/android/assets/www/lib/d3/README.md deleted file mode 100644 index eb334e27..00000000 --- a/platforms/android/assets/www/lib/d3/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Data-Driven Documents - -<a href="http://d3js.org"><img src="http://d3js.org/logo.svg" align="left" hspace="10" vspace="6"></a> - -**D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation. - -Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki) - -For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock). diff --git a/platforms/android/assets/www/lib/d3/bower.json b/platforms/android/assets/www/lib/d3/bower.json deleted file mode 100644 index 9f5968d2..00000000 --- a/platforms/android/assets/www/lib/d3/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "d3", - "version": "3.4.11", - "main": "d3.js", - "scripts": [ - "d3.js" - ], - "ignore": [ - ".DS_Store", - ".git", - ".gitignore", - ".npmignore", - ".travis.yml", - "Makefile", - "bin", - "component.json", - "index.js", - "lib", - "node_modules", - "package.json", - "src", - "test" - ] -} diff --git a/platforms/android/assets/www/lib/d3/composer.json b/platforms/android/assets/www/lib/d3/composer.json deleted file mode 100644 index bfc5b7b5..00000000 --- a/platforms/android/assets/www/lib/d3/composer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "mbostock/d3", - "description": "A small, free JavaScript library for manipulating documents based on data.", - "keywords": ["dom", "svg", "visualization", "js", "canvas"], - "homepage": "http://d3js.org/", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Mike Bostock", - "homepage": "http://bost.ocks.org/mike" - } - ], - "support": { - "issues": "https://github.com/mbostock/d3/issues", - "wiki": "https://github.com/mbostock/d3/wiki", - "API": "https://github.com/mbostock/d3/wiki/API-Reference", - "source": "https://github.com/mbostock/d3" - } -} diff --git a/platforms/android/assets/www/lib/d3/d3.js b/platforms/android/assets/www/lib/d3/d3.js deleted file mode 100644 index 82287776..00000000 --- a/platforms/android/assets/www/lib/d3/d3.js +++ /dev/null @@ -1,9233 +0,0 @@ -!function() { - var d3 = { - version: "3.4.11" - }; - if (!Date.now) Date.now = function() { - return +new Date(); - }; - var d3_arraySlice = [].slice, d3_array = function(list) { - return d3_arraySlice.call(list); - }; - var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window; - try { - d3_array(d3_documentElement.childNodes)[0].nodeType; - } catch (e) { - d3_array = function(list) { - var i = list.length, array = new Array(i); - while (i--) array[i] = list[i]; - return array; - }; - } - try { - d3_document.createElement("div").style.setProperty("opacity", 0, ""); - } catch (error) { - var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; - d3_element_prototype.setAttribute = function(name, value) { - d3_element_setAttribute.call(this, name, value + ""); - }; - d3_element_prototype.setAttributeNS = function(space, local, value) { - d3_element_setAttributeNS.call(this, space, local, value + ""); - }; - d3_style_prototype.setProperty = function(name, value, priority) { - d3_style_setProperty.call(this, name, value + "", priority); - }; - } - d3.ascending = d3_ascending; - function d3_ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined; - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } - return [ a, c ]; - }; - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (!isNaN(a = +array[i])) s += a; - } else { - while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - function d3_number(x) { - return x != null && !isNaN(x); - } - d3.mean = function(array, f) { - var s = 0, n = array.length, a, i = -1, j = n; - if (arguments.length === 1) { - while (++i < n) if (d3_number(a = array[i])) s += a; else --j; - } else { - while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j; - } - return j ? s / j : undefined; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.median = function(array, f) { - if (arguments.length > 1) array = array.map(f); - array = array.filter(d3_number); - return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined; - }; - function d3_bisector(compare) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - } - var d3_bisect = d3_bisector(d3_ascending); - d3.bisectLeft = d3_bisect.left; - d3.bisect = d3.bisectRight = d3_bisect.right; - d3.bisector = function(f) { - return d3_bisector(f.length === 1 ? function(d, x) { - return d3_ascending(f(d), x); - } : f); - }; - d3.shuffle = function(array) { - var m = array.length, t, i; - while (m) { - i = Math.random() * m-- | 0; - t = array[m], array[m] = array[i], array[i] = t; - } - return array; - }; - d3.permute = function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.pairs = function(array) { - var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; - return pairs; - }; - d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { - zip[j] = arguments[j][i]; - } - } - return zips; - }; - function d3_zipLength(d) { - return d.length; - } - d3.transpose = function(matrix) { - return d3.zip.apply(d3, matrix); - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.merge = function(arrays) { - var n = arrays.length, m, i = -1, j = 0, merged, array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - return merged; - }; - var abs = Math.abs; - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - function d3_class(ctor, properties) { - try { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } catch (e) { - ctor.prototype = properties; - } - } - d3.map = function(object) { - var map = new d3_Map(); - if (object instanceof d3_Map) object.forEach(function(key, value) { - map.set(key, value); - }); else for (var key in object) map.set(key, object[key]); - return map; - }; - function d3_Map() {} - d3_class(d3_Map, { - has: d3_map_has, - get: function(key) { - return this[d3_map_prefix + key]; - }, - set: function(key, value) { - return this[d3_map_prefix + key] = value; - }, - remove: d3_map_remove, - keys: d3_map_keys, - values: function() { - var values = []; - this.forEach(function(key, value) { - values.push(value); - }); - return values; - }, - entries: function() { - var entries = []; - this.forEach(function(key, value) { - entries.push({ - key: key, - value: value - }); - }); - return entries; - }, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]); - } - }); - var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); - function d3_map_has(key) { - return d3_map_prefix + key in this; - } - function d3_map_remove(key) { - key = d3_map_prefix + key; - return key in this && delete this[key]; - } - function d3_map_keys() { - var keys = []; - this.forEach(function(key) { - keys.push(key); - }); - return keys; - } - function d3_map_size() { - var size = 0; - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size; - return size; - } - function d3_map_empty() { - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false; - return true; - } - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(mapType, array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); - } - } - if (mapType) { - object = mapType(); - setter = function(keyValue, values) { - object.set(keyValue, map(mapType, values, depth)); - }; - } else { - object = {}; - setter = function(keyValue, values) { - object[keyValue] = map(mapType, values, depth); - }; - } - valuesByKey.forEach(setter); - return object; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var array = [], sortKey = sortKeys[depth++]; - map.forEach(function(key, keyMap) { - array.push({ - key: key, - values: entries(keyMap, depth) - }); - }); - return sortKey ? array.sort(function(a, b) { - return sortKey(a.key, b.key); - }) : array; - } - nest.map = function(array, mapType) { - return map(mapType, array, 0); - }; - nest.entries = function(array) { - return entries(map(d3.map, array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.set = function(array) { - var set = new d3_Set(); - if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); - return set; - }; - function d3_Set() {} - d3_class(d3_Set, { - has: d3_map_has, - add: function(value) { - this[d3_map_prefix + value] = true; - return value; - }, - remove: function(value) { - value = d3_map_prefix + value; - return value in this && delete this[value]; - }, - values: d3_map_keys, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1)); - } - }); - d3.behavior = {}; - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; - } - function d3_vendorSymbol(object, name) { - if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.substring(1); - for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { - var prefixName = d3_vendorPrefixes[i] + name; - if (prefixName in object) return prefixName; - } - } - var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; - function d3_noop() {} - d3.dispatch = function() { - var dispatch = new d3_dispatch(), i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i >= 0) { - name = type.substring(i + 1); - type = type.substring(0, i); - } - if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - if (arguments.length === 2) { - if (listener == null) for (type in this) { - if (this.hasOwnProperty(type)) this[type].on(name, null); - } - return this; - } - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map(); - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.event = null; - function d3_eventPreventDefault() { - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch(), i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - return dispatch; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - var d3_subclass = {}.__proto__ ? function(object, prototype) { - object.__proto__ = prototype; - } : function(object, prototype) { - for (var property in prototype) object[property] = prototype[property]; - }; - function d3_selection(groups) { - d3_subclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = Sizzle; - d3_selectMatches = Sizzle.matchesSelector; - } - d3.selection = function() { - return d3_selectionRoot; - }; - var d3_selectionPrototype = d3.selection.prototype = []; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i, j)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return typeof selector === "function" ? selector : function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); - subgroup.parentNode = node; - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return typeof selector === "function" ? selector : function() { - return d3_selectAll(selector, this); - }; - } - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0) { - prefix = name.substring(0, i); - name = name.substring(i + 1); - } - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; - } else { - value = node.getAttribute("class"); - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; - } - return true; - } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classes(name) { - return (name + "").trim().split(/^|\s+/); - } - function d3_selection_classed(name, value) { - name = d3_selection_classes(name).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.getAttribute("class") || ""; - if (value) { - re.lastIndex = 0; - if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); - } else { - node.setAttribute("class", d3_collapse(c.replace(re, " "))); - } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name); - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }) : this.node().textContent; - }; - d3_selectionPrototype.html = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }) : this.node().innerHTML; - }; - d3_selectionPrototype.append = function(name) { - name = d3_selection_creator(name); - return this.select(function() { - return this.appendChild(name.apply(this, arguments)); - }); - }; - function d3_selection_creator(name) { - return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() { - return this.ownerDocument.createElementNS(name.space, name.local); - } : function() { - return this.ownerDocument.createElementNS(this.namespaceURI, name); - }; - } - d3_selectionPrototype.insert = function(name, before) { - name = d3_selection_creator(name); - before = d3_selection_selector(before); - return this.select(function() { - return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); - }); - }; - d3_selectionPrototype.remove = function() { - return this.each(function() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - }); - }; - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; - } - } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue; - for (i = -1; ++i < n; ) { - keyValue = key.call(node = group[i], node.__data__, i); - if (nodeByKeyValue.has(keyValue)) { - exitNodes[i] = node; - } else { - nodeByKeyValue.set(keyValue, node); - } - keyValues.push(keyValue); - } - for (i = -1; ++i < m; ) { - keyValue = key.call(groupData, nodeData = groupData[i], i); - if (node = nodeByKeyValue.get(keyValue)) { - updateNodes[i] = node; - node.__data__ = nodeData; - } else if (!dataByKeyValue.has(keyValue)) { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - dataByKeyValue.set(keyValue, nodeData); - nodeByKeyValue.remove(keyValue); - } - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.has(keyValues[i])) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - } - for (;i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - } - for (;i < n; ++i) { - exitNodes[i] = group[i]; - } - } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], value); - } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = function(value) { - return arguments.length ? this.property("__data__", value) : this.property("__data__"); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3_ascending; - return function(a, b) { - return a && b ? comparator(a.__data__, b.__data__) : !a - !b; - }; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); - } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - var args = d3_array(arguments); - callback.apply(args[0] = this, args); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function() { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; - }; - d3_selectionPrototype.size = function() { - var n = 0; - this.each(function() { - ++n; - }); - return n; - }; - function d3_selection_enter(selection) { - d3_subclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.call = d3_selectionPrototype.call; - d3_selection_enterPrototype.size = d3_selectionPrototype.size; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - d3_selection_enterPrototype.insert = function(name, before) { - if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); - return d3_selectionPrototype.insert.call(this, name, before); - }; - function d3_selection_enterInsertBefore(enter) { - var i0, j0; - return function(d, i, j) { - var group = enter[j].update, n = group.length, node; - if (j != j0) j0 = j, i0 = 0; - if (i >= i0) i0 = i + 1; - while (!(node = group[i0]) && ++i0 < n) ; - return node; - }; - } - d3_selectionPrototype.transition = function() { - var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || { - time: Date.now(), - ease: d3_ease_cubicInOut, - delay: 0, - duration: 250 - }; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) d3_transitionNode(node, i, id, transition); - subgroup.push(node); - } - } - return d3_transition(subgroups, id); - }; - d3_selectionPrototype.interrupt = function() { - return this.each(d3_selection_interrupt); - }; - function d3_selection_interrupt() { - var lock = this.__transition__; - if (lock) ++lock.active; - } - d3.select = function(node) { - var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ]; - group.parentNode = d3_documentElement; - return d3_selection([ group ]); - }; - d3.selectAll = function(nodes) { - var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes); - group.parentNode = d3_documentElement; - return d3_selection([ group ]); - }; - var d3_selectionRoot = d3.select(d3_documentElement); - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.substring(0, i); - var filter = d3_selection_onFilters.get(type); - if (filter) type = filter, wrap = d3_selection_onFilter; - function onRemove() { - var l = this[name]; - if (l) { - this.removeEventListener(type, l, l.$); - delete this[name]; - } - } - function onAdd() { - var l = wrap(listener, d3_array(arguments)); - onRemove.call(this); - this.addEventListener(type, this[name] = l, l.$ = capture); - l._ = listener; - } - function removeAll() { - var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; - for (var name in this) { - if (match = name.match(re)) { - var l = this[name]; - this.removeEventListener(match[1], l, l.$); - delete this[name]; - } - } - } - return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; - } - var d3_selection_onFilters = d3.map({ - mouseenter: "mouseover", - mouseleave: "mouseout" - }); - d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); - }); - function d3_selection_onListener(listener, argumentz) { - return function(e) { - var o = d3.event; - d3.event = e; - argumentz[0] = this.__data__; - try { - listener.apply(this, argumentz); - } finally { - d3.event = o; - } - }; - } - function d3_selection_onFilter(listener, argumentz) { - var l = d3_selection_onListener(listener, argumentz); - return function(e) { - var target = this, related = e.relatedTarget; - if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { - l.call(target, e); - } - }; - } - var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0; - function d3_event_dragSuppress() { - var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); - if (d3_event_dragSelect) { - var style = d3_documentElement.style, select = style[d3_event_dragSelect]; - style[d3_event_dragSelect] = "none"; - } - return function(suppressClick) { - w.on(name, null); - if (d3_event_dragSelect) style[d3_event_dragSelect] = select; - if (suppressClick) { - function off() { - w.on(click, null); - } - w.on(click, function() { - d3_eventPreventDefault(); - off(); - }, true); - setTimeout(off, 0); - } - }; - } - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - if (e.changedTouches) e = e.changedTouches[0]; - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, - point.y = e.clientY; - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend"); - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); - } - function dragstart(id, position, subject, move, end) { - return function() { - var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId); - if (origin) { - dragOffset = origin.apply(that, arguments); - dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; - } else { - dragOffset = [ 0, 0 ]; - } - dispatch({ - type: "dragstart" - }); - function moved() { - var position1 = position(parent, dragId), dx, dy; - if (!position1) return; - dx = position1[0] - position0[0]; - dy = position1[1] - position0[1]; - dragged |= dx | dy; - position0 = position1; - dispatch({ - type: "drag", - x: position1[0] + dragOffset[0], - y: position1[1] + dragOffset[1], - dx: dx, - dy: dy - }); - } - function ended() { - if (!position(parent, dragId)) return; - dragSubject.on(move + dragName, null).on(end + dragName, null); - dragRestore(dragged && d3.event.target === target); - dispatch({ - type: "dragend" - }); - } - }; - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - function d3_behavior_dragTouchId() { - return d3.event.changedTouches[0].identifier; - } - function d3_behavior_dragTouchSubject() { - return d3.event.target; - } - function d3_behavior_dragMouseSubject() { - return d3_window; - } - var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π; - function d3_sgn(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - function d3_cross2d(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); - } - function d3_acos(x) { - return x > 1 ? 0 : x < -1 ? π : Math.acos(x); - } - function d3_asin(x) { - return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); - } - function d3_sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - function d3_cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - function d3_tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - function d3_haversin(x) { - return (x = Math.sin(x / 2)) * x; - } - var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; - d3.interpolateZoom = function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; - var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ; - function interpolate(t) { - var s = t * S; - if (dr) { - var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); - return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; - } - return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ]; - } - interpolate.duration = S * 1e3; - return interpolate; - }; - d3.behavior.zoom = function() { - var view = { - x: 0, - y: 0, - k: 1 - }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; - function zoom(g) { - g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); - } - zoom.event = function(g) { - g.each(function() { - var dispatch = event.of(this, arguments), view1 = view; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.zoom", function() { - view = this.__chart__ || { - x: 0, - y: 0, - k: 1 - }; - zoomstarted(dispatch); - }).tween("zoom:zoom", function() { - var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = { - x: cx - l[0] * k, - y: cy - l[1] * k, - k: k - }; - zoomed(dispatch); - }; - }).each("end.zoom", function() { - zoomended(dispatch); - }); - } else { - this.__chart__ = view; - zoomstarted(dispatch); - zoomed(dispatch); - zoomended(dispatch); - } - }); - }; - zoom.translate = function(_) { - if (!arguments.length) return [ view.x, view.y ]; - view = { - x: +_[0], - y: +_[1], - k: view.k - }; - rescale(); - return zoom; - }; - zoom.scale = function(_) { - if (!arguments.length) return view.k; - view = { - x: view.x, - y: view.y, - k: +_ - }; - rescale(); - return zoom; - }; - zoom.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; - return zoom; - }; - zoom.center = function(_) { - if (!arguments.length) return center; - center = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.size = function(_) { - if (!arguments.length) return size; - size = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - function location(p) { - return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; - } - function point(l) { - return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; - } - function scaleTo(s) { - view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - view.x += p[0] - l[0]; - view.y += p[1] - l[1]; - } - function rescale() { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - view.x) / view.k; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - view.y) / view.k; - }).map(y0.invert)); - } - function zoomstarted(dispatch) { - dispatch({ - type: "zoomstart" - }); - } - function zoomed(dispatch) { - rescale(); - dispatch({ - type: "zoom", - scale: view.k, - translate: [ view.x, view.y ] - }); - } - function zoomended(dispatch) { - dispatch({ - type: "zoomend" - }); - } - function mousedowned() { - var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(); - d3_selection_interrupt.call(that); - zoomstarted(dispatch); - function moved() { - dragged = 1; - translateTo(d3.mouse(that), location0); - zoomed(dispatch); - } - function ended() { - subject.on(mousemove, null).on(mouseup, null); - dragRestore(dragged && d3.event.target === target); - zoomended(dispatch); - } - } - function touchstarted() { - var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress(); - d3_selection_interrupt.call(that); - started(); - zoomstarted(dispatch); - function relocate() { - var touches = d3.touches(that); - scale0 = view.k; - touches.forEach(function(t) { - if (t.identifier in locations0) locations0[t.identifier] = location(t); - }); - return touches; - } - function started() { - var target = d3.event.target; - d3.select(target).on(touchmove, moved).on(touchend, ended); - targets.push(target); - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - locations0[changed[i].identifier] = null; - } - var touches = relocate(), now = Date.now(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0], l = locations0[p.identifier]; - scaleTo(view.k * 2); - translateTo(p, l); - d3_eventPreventDefault(); - zoomed(dispatch); - } - touchtime = now; - } else if (touches.length > 1) { - var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; - distance0 = dx * dx + dy * dy; - } - } - function moved() { - var touches = d3.touches(that), p0, l0, p1, l1; - for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { - p1 = touches[i]; - if (l1 = locations0[p1.identifier]) { - if (l0) break; - p0 = p1, l0 = l1; - } - } - if (l1) { - var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(scale1 * scale0); - } - touchtime = null; - translateTo(p0, l0); - zoomed(dispatch); - } - function ended() { - if (d3.event.touches.length) { - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - delete locations0[changed[i].identifier]; - } - for (var identifier in locations0) { - return void relocate(); - } - } - d3.selectAll(targets).on(zoomName, null); - subject.on(mousedown, mousedowned).on(touchstart, touchstarted); - dragRestore(); - zoomended(dispatch); - } - } - function mousewheeled() { - var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), - d3_selection_interrupt.call(this), zoomstarted(dispatch); - mousewheelTimer = setTimeout(function() { - mousewheelTimer = null; - zoomended(dispatch); - }, 50); - d3_eventPreventDefault(); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(center0, translate0); - zoomed(dispatch); - } - function dblclicked() { - var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2; - zoomstarted(dispatch); - scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1)); - translateTo(p, l); - zoomed(dispatch); - zoomended(dispatch); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomInfinity = [ 0, Infinity ]; - var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); - }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return d3.event.wheelDelta; - }, "mousewheel") : (d3_behavior_zoomDelta = function() { - return -d3.event.detail; - }, "MozMousePixelScroll"); - d3.color = d3_color; - function d3_color() {} - d3_color.prototype.toString = function() { - return this.rgb() + ""; - }; - d3.hsl = d3_hsl; - function d3_hsl(h, s, l) { - return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); - } - var d3_hslPrototype = d3_hsl.prototype = new d3_color(); - d3_hslPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, this.l / k); - }; - d3_hslPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, k * this.l); - }; - d3_hslPrototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; - s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = d3_hcl; - function d3_hcl(h, c, l) { - return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); - } - var d3_hclPrototype = d3_hcl.prototype = new d3_color(); - d3_hclPrototype.brighter = function(k) { - return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.darker = function(k) { - return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - function d3_hcl_lab(h, c, l) { - if (isNaN(h)) h = 0; - if (isNaN(c)) c = 0; - return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); - } - d3.lab = d3_lab; - function d3_lab(l, a, b) { - return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - var d3_labPrototype = d3_lab.prototype = new d3_color(); - d3_labPrototype.brighter = function(k) { - return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.darker = function(k) { - return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - d3.rgb = d3_rgb; - function d3_rgb(r, g, b) { - return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); - } - function d3_rgbNumber(value) { - return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); - } - function d3_rgbString(value) { - return d3_rgbNumber(value) + ""; - } - var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); - d3_rgbPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return new d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); - }; - d3_rgbPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_rgb(k * this.r, k * this.g, k * this.b); - }; - d3_rgbPrototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_rgbPrototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - var r = 0, g = 0, b = 0, m1, m2, color; - m1 = /([a-z]+)\((.*)\)/i.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); - } - - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); - } - } - } - if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b); - if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.substring(1), 16))) { - if (format.length === 4) { - r = (color & 3840) >> 4; - r = r >> 4 | r; - g = color & 240; - g = g >> 4 | g; - b = color & 15; - b = b << 4 | b; - } else if (format.length === 7) { - r = (color & 16711680) >> 16; - g = (color & 65280) >> 8; - b = color & 255; - } - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - h = NaN; - s = l > 0 && l < 1 ? 0 : h; - } - return new d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgbNumber(value)); - }); - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - function d3_identity(d) { - return d; - } - d3.xhr = d3_xhrType(d3_identity); - function d3_xhrType(response) { - return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, - mimeType = null; - return d3_xhr(url, mimeType, response, callback); - }; - } - function d3_xhr(url, mimeType, response, callback) { - var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; - if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { - request.readyState > 3 && respond(); - }; - function respond() { - var status = request.status, result; - if (!status && request.responseText || status >= 200 && status < 300 || status === 304) { - try { - result = response.call(xhr, request); - } catch (e) { - dispatch.error.call(xhr, e); - return; - } - dispatch.load.call(xhr, result); - } else { - dispatch.error.call(xhr, request); - } - } - request.onprogress = function(event) { - var o = d3.event; - d3.event = event; - try { - dispatch.progress.call(xhr, request); - } finally { - d3.event = o; - } - }; - xhr.header = function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers[name]; - if (value == null) delete headers[name]; else headers[name] = value + ""; - return xhr; - }; - xhr.mimeType = function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return xhr; - }; - xhr.responseType = function(value) { - if (!arguments.length) return responseType; - responseType = value; - return xhr; - }; - xhr.response = function(value) { - response = value; - return xhr; - }; - [ "get", "post" ].forEach(function(method) { - xhr[method] = function() { - return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); - }; - }); - xhr.send = function(method, data, callback) { - if (arguments.length === 2 && typeof data === "function") callback = data, data = null; - request.open(method, url, true); - if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; - if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); - if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); - if (responseType != null) request.responseType = responseType; - if (callback != null) xhr.on("error", callback).on("load", function(request) { - callback(null, request); - }); - dispatch.beforesend.call(xhr, request); - request.send(data == null ? null : data); - return xhr; - }; - xhr.abort = function() { - request.abort(); - return xhr; - }; - d3.rebind(xhr, dispatch, "on"); - return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); - } - function d3_xhr_fixCallback(callback) { - return callback.length === 1 ? function(error, request) { - callback(error == null ? request : null); - } : callback; - } - d3.dsv = function(delimiter, mimeType) { - var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); - xhr.row = function(_) { - return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; - }; - return xhr; - } - function response(request) { - return dsv.parse(request.responseText); - } - function typedResponse(f) { - return function(request) { - return dsv.parse(request.responseText, f); - }; - } - dsv.parse = function(text, f) { - var o; - return dsv.parseRows(text, function(row, i) { - if (o) return o(row, i - 1); - var a = new Function("d", "return {" + row.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); - o = f ? function(row, i) { - return f(a(row), i); - } : a; - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; - function token() { - if (I >= N) return EOF; - if (eol) return eol = false, EOL; - var j = I; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.substring(j + 1, i).replace(/""/g, '"'); - } - while (I < N) { - var c = text.charCodeAt(I++), k = 1; - if (c === 10) eol = true; else if (c === 13) { - eol = true; - if (text.charCodeAt(I) === 10) ++I, ++k; - } else if (c !== delimiterCode) continue; - return text.substring(j, I - k); - } - return text.substring(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && !(a = f(a, n++))) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - if (Array.isArray(rows[0])) return dsv.formatRows(rows); - var fieldSet = new d3_Set(), fields = []; - rows.forEach(function(row) { - for (var field in row) { - if (!fieldSet.has(field)) { - fields.push(fieldSet.add(field)); - } - } - }); - return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { - return fields.map(function(field) { - return formatValue(row[field]); - }).join(delimiter); - })).join("\n"); - }; - dsv.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - }; - d3.csv = d3.dsv(",", "text/csv"); - d3.tsv = d3.dsv(" ", "text/tab-separated-values"); - d3.touch = function(container, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; - if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return d3_mousePoint(container, touch); - } - } - }; - var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) { - setTimeout(callback, 17); - }; - d3.timer = function(callback, delay, then) { - var n = arguments.length; - if (n < 2) delay = 0; - if (n < 3) then = Date.now(); - var time = then + delay, timer = { - c: callback, - t: time, - f: false, - n: null - }; - if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; - d3_timer_queueTail = timer; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - }; - function d3_timer_step() { - var now = d3_timer_mark(), delay = d3_timer_sweep() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - d3_timer_mark(); - d3_timer_sweep(); - }; - function d3_timer_mark() { - var now = Date.now(); - d3_timer_active = d3_timer_queueHead; - while (d3_timer_active) { - if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t); - d3_timer_active = d3_timer_active.n; - } - return now; - } - function d3_timer_sweep() { - var t0, t1 = d3_timer_queueHead, time = Infinity; - while (t1) { - if (t1.f) { - t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; - } else { - if (t1.t < time) time = t1.t; - t1 = (t0 = t1).n; - } - } - d3_timer_queueTail = t0; - return time; - } - function d3_format_precision(x, p) { - return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); - } - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - function d3_locale_numberFormat(locale) { - var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) { - var i = value.length, t = [], j = 0, g = locale_grouping[0]; - while (i > 0 && g > 0) { - t.push(value.substring(i -= g, i + g)); - g = locale_grouping[j = (j + 1) % locale_grouping.length]; - } - return t.reverse().join(locale_thousands); - } : d3_identity; - return function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false; - if (precision) precision = +precision.substring(1); - if (zfill || fill === "0" && align === "=") { - zfill = fill = "0"; - align = "="; - if (comma) width -= Math.floor((width - 1) / 4); - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - - case "b": - case "o": - case "x": - case "X": - if (symbol === "#") prefix = "0" + type.toLowerCase(); - - case "c": - case "d": - integer = true; - precision = 0; - break; - - case "s": - scale = -1; - type = "r"; - break; - } - if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; - if (type == "r" && !precision) type = "g"; - if (precision != null) { - if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); - } - type = d3_format_types.get(type) || d3_format_typeDefault; - var zcomma = zfill && comma; - return function(value) { - var fullSuffix = suffix; - if (integer && value % 1) return ""; - var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign; - if (scale < 0) { - var unit = d3.formatPrefix(value, precision); - value = unit.scale(value); - fullSuffix = unit.symbol + suffix; - } else { - value *= scale; - } - value = type(value, precision); - var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1); - if (!zfill && comma) before = formatGroup(before); - var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; - if (zcomma) before = formatGroup(padding + before); - negative += prefix; - value = before + after; - return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; - }; - }; - } - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; - var d3_format_types = d3.map({ - b: function(x) { - return x.toString(2); - }, - c: function(x) { - return String.fromCharCode(x); - }, - o: function(x) { - return x.toString(8); - }, - x: function(x) { - return x.toString(16); - }, - X: function(x) { - return x.toString(16).toUpperCase(); - }, - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); - } - }); - function d3_format_typeDefault(x) { - return x + ""; - } - var d3_time = d3.time = {}, d3_date = Date; - function d3_date_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_date_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_date(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_date(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); - } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); - } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_date = Date; - } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = date; - return method(utc, k)._; - } finally { - d3_date = Date; - } - }; - } - d3_time.year = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3_time.years = d3_time.year.range; - d3_time.years.utc = d3_time.year.utc.range; - d3_time.day = d3_time_interval(function(date) { - var day = new d3_date(2e3, 0); - day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3_time.days = d3_time.day.range; - d3_time.days.utc = d3_time.day.utc.range; - d3_time.dayOfYear = function(date) { - var year = d3_time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { - i = 7 - i; - var interval = d3_time[day] = d3_time_interval(function(date) { - (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3_time[day + "s"] = interval.range; - d3_time[day + "s"].utc = interval.utc.range; - d3_time[day + "OfYear"] = function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3_time.week = d3_time.sunday; - d3_time.weeks = d3_time.sunday.range; - d3_time.weeks.utc = d3_time.sunday.utc.range; - d3_time.weekOfYear = d3_time.sundayOfYear; - function d3_locale_timeFormat(locale) { - var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; - function d3_time_format(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, p, f; - while (++i < n) { - if (template.charCodeAt(i) === 37) { - string.push(template.substring(j, i)); - if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); - if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); - string.push(c); - j = i + 1; - } - } - string.push(template.substring(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0, - Z: null - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); - if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) { - date.setFullYear(d.y, 0, 1); - date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); - } else date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L); - return localZ ? date._ : date; - }; - format.toString = function() { - return template; - }; - return format; - } - function d3_time_parse(date, template, string, j) { - var c, p, t, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c === 37) { - t = template.charAt(i++); - p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - d3_time_format.utc = function(template) { - var local = d3_time_format(template); - function format(date) { - try { - d3_date = d3_date_utc; - var utc = new d3_date(); - utc._ = date; - return local(utc); - } finally { - d3_date = Date; - } - } - format.parse = function(string) { - try { - d3_date = d3_date_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_date = Date; - } - }; - format.toString = local.toString; - return format; - }; - d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; - var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); - locale_periods.forEach(function(p, i) { - d3_time_periodLookup.set(p.toLowerCase(), i); - }); - var d3_time_formats = { - a: function(d) { - return locale_shortDays[d.getDay()]; - }, - A: function(d) { - return locale_days[d.getDay()]; - }, - b: function(d) { - return locale_shortMonths[d.getMonth()]; - }, - B: function(d) { - return locale_months[d.getMonth()]; - }, - c: d3_time_format(locale_dateTime), - d: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - e: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - H: function(d, p) { - return d3_time_formatPad(d.getHours(), p, 2); - }, - I: function(d, p) { - return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); - }, - j: function(d, p) { - return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); - }, - L: function(d, p) { - return d3_time_formatPad(d.getMilliseconds(), p, 3); - }, - m: function(d, p) { - return d3_time_formatPad(d.getMonth() + 1, p, 2); - }, - M: function(d, p) { - return d3_time_formatPad(d.getMinutes(), p, 2); - }, - p: function(d) { - return locale_periods[+(d.getHours() >= 12)]; - }, - S: function(d, p) { - return d3_time_formatPad(d.getSeconds(), p, 2); - }, - U: function(d, p) { - return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d, p) { - return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); - }, - x: d3_time_format(locale_date), - X: d3_time_format(locale_time), - y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 100, p, 2); - }, - Y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); - }, - Z: d3_time_zone, - "%": function() { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - j: d3_time_parseDayOfYear, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - U: d3_time_parseWeekNumberSunday, - w: d3_time_parseWeekdayNumber, - W: d3_time_parseWeekNumberMonday, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear, - Z: d3_time_parseZone, - "%": d3_time_parseLiteralPercent - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.substring(i)); - return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.substring(i)); - return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_periodLookup.get(string.substring(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - return d3_time_format; - } - var d3_time_formatPads = { - "-": "", - _: " ", - "0": "0" - }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; - function d3_time_formatPad(value, fill, width) { - var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map(), i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - function d3_time_parseWeekdayNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 1)); - return n ? (date.w = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberSunday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i)); - return n ? (date.U = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberMonday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i)); - return n ? (date.W = +n[0], i + n[0].length) : -1; - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 4)); - return n ? (date.y = +n[0], i + n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; - } - function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = -string, - i + 5) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.m = n[0] - 1, i + n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.d = +n[0], i + n[0].length) : -1; - } - function d3_time_parseDayOfYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 3)); - return n ? (date.j = +n[0], i + n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.H = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.M = +n[0], i + n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.S = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 3)); - return n ? (date.L = +n[0], i + n[0].length) : -1; - } - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(abs(z) / 60), zm = abs(z) % 60; - return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); - } - function d3_time_parseLiteralPercent(date, string, i) { - d3_time_percentRe.lastIndex = 0; - var n = d3_time_percentRe.exec(string.substring(i, i + 1)); - return n ? i + n[0].length : -1; - } - function d3_time_formatMulti(formats) { - var n = formats.length, i = -1; - while (++i < n) formats[i][0] = this(formats[i][0]); - return function(date) { - var i = 0, f = formats[i]; - while (!f[1](date)) f = formats[++i]; - return f[0](date); - }; - } - d3.locale = function(locale) { - return { - numberFormat: d3_locale_numberFormat(locale), - timeFormat: d3_locale_timeFormat(locale) - }; - }; - var d3_locale_enUS = d3.locale({ - decimal: ".", - thousands: ",", - grouping: [ 3 ], - currency: [ "$", "" ], - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: [ "AM", "PM" ], - days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], - shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] - }); - d3.format = d3_locale_enUS.numberFormat; - d3.geo = {}; - function d3_adder() {} - d3_adder.prototype = { - s: 0, - t: 0, - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } - }; - var d3_adderTemp = new d3_adder(); - function d3_adderSum(a, b, o) { - var x = o.s = a + b, bv = x - a, av = x - bv; - o.t = a - av + (b - bv); - } - d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); - } else { - d3_geo_streamGeometry(object, listener); - } - }; - function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); - } - } - var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } - }; - var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } - }; - function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); - } - function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); - } - d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; - }; - var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); - var d3_geo_area = { - sphere: function() { - d3_geo_areaSum += 4 * π; - }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } - }; - function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), - sinφ0 = Math.sin(φ); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; - var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; - } - function d3_geo_cartesian(spherical) { - var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); - return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; - } - function d3_geo_cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - } - function d3_geo_cartesianCross(a, b) { - return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; - } - function d3_geo_cartesianAdd(a, b) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - } - function d3_geo_cartesianScale(vector, k) { - return [ vector[0] * k, vector[1] * k, vector[2] * k ]; - } - function d3_geo_cartesianNormalize(d) { - var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l; - d[1] /= l; - d[2] /= l; - } - function d3_geo_spherical(cartesian) { - return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; - } - function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; - } - d3.geo.bounds = function() { - var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; - var bound = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - bound.point = ringPoint; - bound.lineStart = ringStart; - bound.lineEnd = ringEnd; - dλSum = 0; - d3_geo_area.polygonStart(); - }, - polygonEnd: function() { - d3_geo_area.polygonEnd(); - bound.point = point; - bound.lineStart = lineStart; - bound.lineEnd = lineEnd; - if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; - range[0] = λ0, range[1] = λ1; - } - }; - function point(λ, φ) { - ranges.push(range = [ λ0 = λ, λ1 = λ ]); - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - function linePoint(λ, φ) { - var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); - if (p0) { - var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); - d3_geo_cartesianNormalize(inflection); - inflection = d3_geo_spherical(inflection); - var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; - if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = inflection[1] * d3_degrees; - if (φi > φ1) φ1 = φi; - } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = -inflection[1] * d3_degrees; - if (φi < φ0) φ0 = φi; - } else { - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - if (antimeridian) { - if (λ < λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } else { - if (λ1 >= λ0) { - if (λ < λ0) λ0 = λ; - if (λ > λ1) λ1 = λ; - } else { - if (λ > λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } - } - } else { - point(λ, φ); - } - p0 = p, λ_ = λ; - } - function lineStart() { - bound.point = linePoint; - } - function lineEnd() { - range[0] = λ0, range[1] = λ1; - bound.point = point; - p0 = null; - } - function ringPoint(λ, φ) { - if (p0) { - var dλ = λ - λ_; - dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; - } else λ__ = λ, φ__ = φ; - d3_geo_area.point(λ, φ); - linePoint(λ, φ); - } - function ringStart() { - d3_geo_area.lineStart(); - } - function ringEnd() { - ringPoint(λ__, φ__); - d3_geo_area.lineEnd(); - if (abs(dλSum) > ε) λ0 = -(λ1 = 180); - range[0] = λ0, range[1] = λ1; - p0 = null; - } - function angle(λ0, λ1) { - return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; - } - function compareRanges(a, b) { - return a[0] - b[0]; - } - function withinRange(x, range) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; - } - return function(feature) { - φ1 = λ1 = -(λ0 = φ0 = Infinity); - ranges = []; - d3.geo.stream(feature, bound); - var n = ranges.length; - if (n) { - ranges.sort(compareRanges); - for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { - b = ranges[i]; - if (withinRange(b[0], a) || withinRange(b[1], a)) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - var best = -Infinity, dλ; - for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { - b = merged[i]; - if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; - } - } - ranges = range = null; - return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; - }; - }(); - d3.geo.centroid = function(object) { - d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, d3_geo_centroid); - var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; - if (m < ε2) { - x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; - if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; - m = x * x + y * y + z * z; - if (m < ε2) return [ NaN, NaN ]; - } - return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; - }; - var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; - var d3_geo_centroid = { - sphere: d3_noop, - point: d3_geo_centroidPoint, - lineStart: d3_geo_centroidLineStart, - lineEnd: d3_geo_centroidLineEnd, - polygonStart: function() { - d3_geo_centroid.lineStart = d3_geo_centroidRingStart; - }, - polygonEnd: function() { - d3_geo_centroid.lineStart = d3_geo_centroidLineStart; - } - }; - function d3_geo_centroidPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); - } - function d3_geo_centroidPointXYZ(x, y, z) { - ++d3_geo_centroidW0; - d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; - d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; - d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; - } - function d3_geo_centroidLineStart() { - var x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroid.point = nextPoint; - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_centroidLineEnd() { - d3_geo_centroid.point = d3_geo_centroidPoint; - } - function d3_geo_centroidRingStart() { - var λ00, φ00, x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ00 = λ, φ00 = φ; - d3_geo_centroid.point = nextPoint; - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - d3_geo_centroid.lineEnd = function() { - nextPoint(λ00, φ00); - d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; - d3_geo_centroid.point = d3_geo_centroidPoint; - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); - d3_geo_centroidX2 += v * cx; - d3_geo_centroidY2 += v * cy; - d3_geo_centroidZ2 += v * cz; - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_true() { - return true; - } - function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], clip = []; - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; - } - var start = subject[0], points, point; - while (1) { - var current = start, isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - listener.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, listener); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, listener); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - listener.lineEnd(); - } - } - function d3_geo_clipPolygonLinkCircular(array) { - if (!(n = array.length)) return; - var n, i = 0, a = array[0], b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; - } - function d3_geo_clipPolygonIntersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; - this.e = entry; - this.v = false; - this.n = this.p = null; - } - function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { - return function(rotate, listener) { - var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = d3.merge(segments); - var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); - if (segments.length) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); - } else if (clipStartInside) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (polygonStarted) listener.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - listener.polygonStart(); - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - listener.polygonEnd(); - } - }; - function point(λ, φ) { - var point = rotate(λ, φ); - if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); - } - function pointLine(λ, φ) { - var point = rotate(λ, φ); - line.point(point[0], point[1]); - } - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - var segments; - var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; - function pointRing(λ, φ) { - ring.push([ λ, φ ]); - var point = rotate(λ, φ); - ringListener.point(point[0], point[1]); - } - function ringStart() { - ringListener.lineStart(); - ring = []; - } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringListener.lineEnd(); - var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; - ring.pop(); - polygon.push(ring); - ring = null; - if (!n) return; - if (clean & 1) { - segment = ringSegments[0]; - var n = segment.length - 1, i = -1, point; - if (n > 0) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); - } - return; - } - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); - } - return clip; - }; - } - function d3_geo_clipSegmentLength1(segment) { - return segment.length > 1; - } - function d3_geo_clipBufferListener() { - var lines = [], line; - return { - lineStart: function() { - lines.push(line = []); - }, - point: function(λ, φ) { - line.push([ λ, φ ]); - }, - lineEnd: d3_noop, - buffer: function() { - var buffer = lines; - lines = []; - line = null; - return buffer; - }, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - } - }; - } - function d3_geo_clipSort(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); - } - function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; - d3_geo_areaRingSum.reset(); - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], m = ring.length; - if (!m) continue; - var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); - polarAngle += antimeridian ? dλ + sdλ * τ : dλ; - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1; - } - var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); - function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - clean: function() { - return 2 - clean; - } - }; - } - function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; - } - function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point(0, φ); - listener.point(π, φ); - listener.point(π, 0); - listener.point(π, -φ); - listener.point(0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point(0, φ); - listener.point(s, φ); - } else { - listener.point(to[0], to[1]); - } - } - function d3_geo_clipCircle(radius) { - var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); - return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); - function visible(λ, φ) { - return Math.cos(λ) * Math.cos(φ) > cr; - } - function clipLine(listener) { - var point0, c0, v0, v00, clean; - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(λ, φ) { - var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; - if (!point0 && (v00 = v0 = v)) listener.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { - point1[0] += ε; - point1[1] += ε; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - listener.lineStart(); - point2 = intersect(point1, point0); - listener.point(point2[0], point2[1]); - } else { - point2 = intersect(point0, point1); - listener.point(point2[0], point2[1]); - listener.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - } else { - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { - listener.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) listener.lineEnd(); - point0 = null; - }, - clean: function() { - return clean | (v00 && v0) << 1; - } - }; - } - function intersect(a, b, two) { - var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); - var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; - if (!determinant) return !two && a; - var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); - d3_geo_cartesianAdd(A, B); - var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); - if (t2 < 0) return; - var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); - d3_geo_cartesianAdd(q, A); - q = d3_geo_spherical(q); - if (!two) return q; - var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; - if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; - var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; - if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; - if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { - var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); - d3_geo_cartesianAdd(q1, A); - return [ q, d3_geo_spherical(q1) ]; - } - } - function code(λ, φ) { - var r = smallRadius ? radius : π - radius, code = 0; - if (λ < -r) code |= 1; else if (λ > r) code |= 2; - if (φ < -r) code |= 4; else if (φ > r) code |= 8; - return code; - } - } - function d3_geom_clipLine(x0, y0, x1, y1) { - return function(line) { - var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - if (t0 > 0) line.a = { - x: ax + t0 * dx, - y: ay + t0 * dy - }; - if (t1 < 1) line.b = { - x: ax + t1 * dx, - y: ay + t1 * dy - }; - return line; - }; - } - var d3_geo_clipExtentMAX = 1e9; - d3.geo.clipExtent = function() { - var x0, y0, x1, y1, stream, clip, clipExtent = { - stream: function(output) { - if (stream) stream.valid = false; - stream = clip(output); - stream.valid = true; - return stream; - }, - extent: function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); - if (stream) stream.valid = false, stream = null; - return clipExtent; - } - }; - return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); - }; - function d3_geo_clipExtent(x0, y0, x1, y1) { - return function(listener) { - var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - listener = bufferListener; - segments = []; - polygon = []; - clean = true; - }, - polygonEnd: function() { - listener = listener_; - segments = d3.merge(segments); - var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; - if (inside || visible) { - listener.polygonStart(); - if (inside) { - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (visible) { - d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); - } - listener.polygonEnd(); - } - segments = polygon = ring = null; - } - }; - function insidePolygon(p) { - var wn = 0, n = polygon.length, y = p[1]; - for (var i = 0; i < n; ++i) { - for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { - b = v[j]; - if (a[1] <= y) { - if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; - } else { - if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; - } - a = b; - } - } - return wn !== 0; - } - function interpolate(from, to, direction, listener) { - var a = 0, a1 = 0; - if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { - do { - listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - } while ((a = (a + direction + 4) % 4) !== a1); - } else { - listener.point(to[0], to[1]); - } - } - function pointVisible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - function point(x, y) { - if (pointVisible(x, y)) listener.point(x, y); - } - var x__, y__, v__, x_, y_, v_, first, clean; - function lineStart() { - clip.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferListener.rejoin(); - segments.push(bufferListener.buffer()); - } - clip.point = point; - if (v_) listener.lineEnd(); - } - function linePoint(x, y) { - x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); - y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); - var v = pointVisible(x, y); - if (polygon) ring.push([ x, y ]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - listener.lineStart(); - listener.point(x, y); - } - } else { - if (v && v_) listener.point(x, y); else { - var l = { - a: { - x: x_, - y: y_ - }, - b: { - x: x, - y: y - } - }; - if (clipLine(l)) { - if (!v_) { - listener.lineStart(); - listener.point(l.a.x, l.a.y); - } - listener.point(l.b.x, l.b.y); - if (!v) listener.lineEnd(); - clean = false; - } else if (v) { - listener.lineStart(); - listener.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - return clip; - }; - function corner(p, direction) { - return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; - } - function compare(a, b) { - return comparePoints(a.x, b.x); - } - function comparePoints(a, b) { - var ca = corner(a, 1), cb = corner(b, 1); - return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; - } - } - function d3_geo_compose(a, b) { - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - return compose; - } - function d3_geo_conic(projectAt) { - var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); - p.parallels = function(_) { - if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; - return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); - }; - return p; - } - function d3_geo_conicEqualArea(φ0, φ1) { - var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; - function forward(λ, φ) { - var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; - return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = ρ0 - y; - return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; - }; - return forward; - } - (d3.geo.conicEqualArea = function() { - return d3_geo_conic(d3_geo_conicEqualArea); - }).raw = d3_geo_conicEqualArea; - d3.geo.albers = function() { - return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); - var point, pointStream = { - point: function(x, y) { - point = [ x, y ]; - } - }, lower48Point, alaskaPoint, hawaiiPoint; - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - point = null; - (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); - return point; - } - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; - return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); - }; - albersUsa.stream = function(stream) { - var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); - return { - point: function(x, y) { - lower48Stream.point(x, y); - alaskaStream.point(x, y); - hawaiiStream.point(x, y); - }, - sphere: function() { - lower48Stream.sphere(); - alaskaStream.sphere(); - hawaiiStream.sphere(); - }, - lineStart: function() { - lower48Stream.lineStart(); - alaskaStream.lineStart(); - hawaiiStream.lineStart(); - }, - lineEnd: function() { - lower48Stream.lineEnd(); - alaskaStream.lineEnd(); - hawaiiStream.lineEnd(); - }, - polygonStart: function() { - lower48Stream.polygonStart(); - alaskaStream.polygonStart(); - hawaiiStream.polygonStart(); - }, - polygonEnd: function() { - lower48Stream.polygonEnd(); - alaskaStream.polygonEnd(); - hawaiiStream.polygonEnd(); - } - }; - }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_); - alaska.precision(_); - hawaii.precision(_); - return albersUsa; - }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_); - alaska.scale(_ * .35); - hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; - alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - return albersUsa; - }; - return albersUsa.scale(1070); - }; - var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_pathAreaPolygon = 0; - d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; - }, - polygonEnd: function() { - d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; - d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); - } - }; - function d3_geo_pathAreaRingStart() { - var x00, y00, x0, y0; - d3_geo_pathArea.point = function(x, y) { - d3_geo_pathArea.point = nextPoint; - x00 = x0 = x, y00 = y0 = y; - }; - function nextPoint(x, y) { - d3_geo_pathAreaPolygon += y0 * x - x0 * y; - x0 = x, y0 = y; - } - d3_geo_pathArea.lineEnd = function() { - nextPoint(x00, y00); - }; - } - var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; - var d3_geo_pathBounds = { - point: d3_geo_pathBoundsPoint, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_pathBoundsPoint(x, y) { - if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; - if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; - if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; - if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; - } - function d3_geo_pathBuffer() { - var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointCircle = d3_geo_pathBufferCircle(_); - return stream; - }, - result: function() { - if (buffer.length) { - var result = buffer.join(""); - buffer = []; - return result; - } - } - }; - function point(x, y) { - buffer.push("M", x, ",", y, pointCircle); - } - function pointLineStart(x, y) { - buffer.push("M", x, ",", y); - stream.point = pointLine; - } - function pointLine(x, y) { - buffer.push("L", x, ",", y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - buffer.push("Z"); - } - return stream; - } - function d3_geo_pathBufferCircle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; - } - var d3_geo_pathCentroid = { - point: d3_geo_pathCentroidPoint, - lineStart: d3_geo_pathCentroidLineStart, - lineEnd: d3_geo_pathCentroidLineEnd, - polygonStart: function() { - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; - }, - polygonEnd: function() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; - d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; - } - }; - function d3_geo_pathCentroidPoint(x, y) { - d3_geo_centroidX0 += x; - d3_geo_centroidY0 += y; - ++d3_geo_centroidZ0; - } - function d3_geo_pathCentroidLineStart() { - var x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - } - function d3_geo_pathCentroidLineEnd() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - } - function d3_geo_pathCentroidRingStart() { - var x00, y00, x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - z = y0 * x - x0 * y; - d3_geo_centroidX2 += z * (x0 + x); - d3_geo_centroidY2 += z * (y0 + y); - d3_geo_centroidZ2 += z * 3; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - d3_geo_pathCentroid.lineEnd = function() { - nextPoint(x00, y00); - }; - } - function d3_geo_pathContext(context) { - var pointRadius = 4.5; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointRadius = _; - return stream; - }, - result: d3_noop - }; - function point(x, y) { - context.moveTo(x, y); - context.arc(x, y, pointRadius, 0, τ); - } - function pointLineStart(x, y) { - context.moveTo(x, y); - stream.point = pointLine; - } - function pointLine(x, y) { - context.lineTo(x, y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - context.closePath(); - } - return stream; - } - function d3_geo_resample(project) { - var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; - function resample(stream) { - return (maxDepth ? resampleRecursive : resampleNone)(stream); - } - function resampleNone(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - }); - } - function resampleRecursive(stream) { - var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; - var resample = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - stream.polygonStart(); - resample.lineStart = ringStart; - }, - polygonEnd: function() { - stream.polygonEnd(); - resample.lineStart = lineStart; - } - }; - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - function lineStart() { - x0 = NaN; - resample.point = linePoint; - stream.lineStart(); - } - function linePoint(λ, φ) { - var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); - resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - function lineEnd() { - resample.point = point; - stream.lineEnd(); - } - function ringStart() { - lineStart(); - resample.point = ringPoint; - resample.lineEnd = ringEnd; - } - function ringPoint(λ, φ) { - linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resample.point = linePoint; - } - function ringEnd() { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); - resample.lineEnd = lineEnd; - lineEnd(); - } - return resample; - } - function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; - if (d2 > 4 * δ2 && depth--) { - var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); - } - } - } - resample.precision = function(_) { - if (!arguments.length) return Math.sqrt(δ2); - maxDepth = (δ2 = _ * _) > 0 && 16; - return resample; - }; - return resample; - } - d3.geo.path = function() { - var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); - d3.geo.stream(object, cacheStream); - } - return contextStream.result(); - } - path.area = function(object) { - d3_geo_pathAreaSum = 0; - d3.geo.stream(object, projectStream(d3_geo_pathArea)); - return d3_geo_pathAreaSum; - }; - path.centroid = function(object) { - d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); - return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; - }; - path.bounds = function(object) { - d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); - d3.geo.stream(object, projectStream(d3_geo_pathBounds)); - return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; - }; - path.projection = function(_) { - if (!arguments.length) return projection; - projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; - return reset(); - }; - path.context = function(_) { - if (!arguments.length) return context; - contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return reset(); - }; - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - function reset() { - cacheStream = null; - return path; - } - return path.projection(d3.geo.albersUsa()).context(null); - }; - function d3_geo_pathProjectStream(project) { - var resample = d3_geo_resample(function(x, y) { - return project([ x * d3_degrees, y * d3_degrees ]); - }); - return function(stream) { - return d3_geo_projectionRadians(resample(stream)); - }; - } - d3.geo.transform = function(methods) { - return { - stream: function(stream) { - var transform = new d3_geo_transform(stream); - for (var k in methods) transform[k] = methods[k]; - return transform; - } - }; - }; - function d3_geo_transform(stream) { - this.stream = stream; - } - d3_geo_transform.prototype = { - point: function(x, y) { - this.stream.point(x, y); - }, - sphere: function() { - this.stream.sphere(); - }, - lineStart: function() { - this.stream.lineStart(); - }, - lineEnd: function() { - this.stream.lineEnd(); - }, - polygonStart: function() { - this.stream.polygonStart(); - }, - polygonEnd: function() { - this.stream.polygonEnd(); - } - }; - function d3_geo_transformPoint(stream, point) { - return { - point: point, - sphere: function() { - stream.sphere(); - }, - lineStart: function() { - stream.lineStart(); - }, - lineEnd: function() { - stream.lineEnd(); - }, - polygonStart: function() { - stream.polygonStart(); - }, - polygonEnd: function() { - stream.polygonEnd(); - } - }; - } - d3.geo.projection = d3_geo_projection; - d3.geo.projectionMutator = d3_geo_projectionMutator; - function d3_geo_projection(project) { - return d3_geo_projectionMutator(function() { - return project; - })(); - } - function d3_geo_projectionMutator(projectAt) { - var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { - x = project(x, y); - return [ x[0] * k + δx, δy - x[1] * k ]; - }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; - function projection(point) { - point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); - return [ point[0] * k + δx, δy - point[1] * k ]; - } - function invert(point) { - point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); - return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; - } - projection.stream = function(output) { - if (stream) stream.valid = false; - stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); - stream.valid = true; - return stream; - }; - projection.clipAngle = function(_) { - if (!arguments.length) return clipAngle; - preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); - return invalidate(); - }; - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; - return invalidate(); - }; - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return reset(); - }; - projection.translate = function(_) { - if (!arguments.length) return [ x, y ]; - x = +_[0]; - y = +_[1]; - return reset(); - }; - projection.center = function(_) { - if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; - λ = _[0] % 360 * d3_radians; - φ = _[1] % 360 * d3_radians; - return reset(); - }; - projection.rotate = function(_) { - if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; - δλ = _[0] % 360 * d3_radians; - δφ = _[1] % 360 * d3_radians; - δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; - return reset(); - }; - d3.rebind(projection, projectResample, "precision"); - function reset() { - projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); - var center = project(λ, φ); - δx = x - center[0] * k; - δy = y + center[1] * k; - return invalidate(); - } - function invalidate() { - if (stream) stream.valid = false, stream = null; - return projection; - } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return reset(); - }; - } - function d3_geo_projectionRadians(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - stream.point(x * d3_radians, y * d3_radians); - }); - } - function d3_geo_equirectangular(λ, φ) { - return [ λ, φ ]; - } - (d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); - }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - return forward; - }; - function d3_geo_identityRotation(λ, φ) { - return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - } - d3_geo_identityRotation.invert = d3_geo_equirectangular; - function d3_geo_rotation(δλ, δφ, δγ) { - return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; - } - function d3_geo_forwardRotationλ(δλ) { - return function(λ, φ) { - return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - }; - } - function d3_geo_rotationλ(δλ) { - var rotation = d3_geo_forwardRotationλ(δλ); - rotation.invert = d3_geo_forwardRotationλ(-δλ); - return rotation; - } - function d3_geo_rotationφγ(δφ, δγ) { - var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); - function rotation(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; - return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; - } - rotation.invert = function(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; - return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; - }; - return rotation; - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], angle, precision = 6, interpolate; - function circle() { - var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; - interpolate(null, null, 1, { - point: function(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= d3_degrees, x[1] *= d3_degrees; - } - }); - return { - type: "Polygon", - coordinates: [ ring ] - }; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return angle; - interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); - return circle; - }; - circle.precision = function(_) { - if (!arguments.length) return precision; - interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); - return circle; - }; - return circle.angle(90); - }; - function d3_geo_circleInterpolate(radius, precision) { - var cr = Math.cos(radius), sr = Math.sin(radius); - return function(from, to, direction, listener) { - var step = direction * precision; - if (from != null) { - from = d3_geo_circleAngle(cr, from); - to = d3_geo_circleAngle(cr, to); - if (direction > 0 ? from < to : from > to) from += direction * τ; - } else { - from = radius + direction * τ; - to = radius - .5 * step; - } - for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { - listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); - } - }; - } - function d3_geo_circleAngle(cr, point) { - var a = d3_geo_cartesian(point); - a[0] -= cr; - d3_geo_cartesianNormalize(a); - var angle = d3_acos(-a[1]); - return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); - } - d3.geo.distance = function(a, b) { - var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; - return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); - }; - d3.geo.graticule = function() { - var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; - function graticule() { - return { - type: "MultiLineString", - coordinates: lines() - }; - } - function lines() { - return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { - return abs(x % DX) > ε; - }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { - return abs(y % DY) > ε; - }).map(y)); - } - graticule.lines = function() { - return lines().map(function(coordinates) { - return { - type: "LineString", - coordinates: coordinates - }; - }); - }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] - }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.minorExtent(); - return graticule.majorExtent(_).minorExtent(_); - }; - graticule.majorExtent = function(_) { - if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - graticule.minorExtent = function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - graticule.step = function(_) { - if (!arguments.length) return graticule.minorStep(); - return graticule.majorStep(_).minorStep(_); - }; - graticule.majorStep = function(_) { - if (!arguments.length) return [ DX, DY ]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - graticule.minorStep = function(_) { - if (!arguments.length) return [ dx, dy ]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = d3_geo_graticuleX(y0, y1, 90); - y = d3_geo_graticuleY(x0, x1, precision); - X = d3_geo_graticuleX(Y0, Y1, 90); - Y = d3_geo_graticuleY(X0, X1, precision); - return graticule; - }; - return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); - }; - function d3_geo_graticuleX(y0, y1, dy) { - var y = d3.range(y0, y1 - ε, dy).concat(y1); - return function(x) { - return y.map(function(y) { - return [ x, y ]; - }); - }; - } - function d3_geo_graticuleY(x0, x1, dx) { - var x = d3.range(x0, x1 - ε, dx).concat(x1); - return function(y) { - return x.map(function(x) { - return [ x, y ]; - }); - }; - } - function d3_source(d) { - return d.source; - } - function d3_target(d) { - return d.target; - } - d3.geo.greatArc = function() { - var source = d3_source, source_, target = d3_target, target_; - function greatArc() { - return { - type: "LineString", - coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] - }; - } - greatArc.distance = function() { - return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _, source_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _, target_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.precision = function() { - return arguments.length ? greatArc : 0; - }; - return greatArc; - }; - d3.geo.interpolate = function(source, target) { - return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); - }; - function d3_geo_interpolate(x0, y0, x1, y1) { - var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); - var interpolate = d ? function(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; - } : function() { - return [ x0 * d3_degrees, y0 * d3_degrees ]; - }; - interpolate.distance = d; - return interpolate; - } - d3.geo.length = function(object) { - d3_geo_lengthSum = 0; - d3.geo.stream(object, d3_geo_length); - return d3_geo_lengthSum; - }; - var d3_geo_lengthSum; - var d3_geo_length = { - sphere: d3_noop, - point: d3_noop, - lineStart: d3_geo_lengthLineStart, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_lengthLineStart() { - var λ0, sinφ0, cosφ0; - d3_geo_length.point = function(λ, φ) { - λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); - d3_geo_length.point = nextPoint; - }; - d3_geo_length.lineEnd = function() { - d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; - }; - function nextPoint(λ, φ) { - var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); - d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; - } - } - function d3_geo_azimuthal(scale, angle) { - function azimuthal(λ, φ) { - var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); - return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; - } - azimuthal.invert = function(x, y) { - var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); - return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; - }; - return azimuthal; - } - var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { - return Math.sqrt(2 / (1 + cosλcosφ)); - }, function(ρ) { - return 2 * Math.asin(ρ / 2); - }); - (d3.geo.azimuthalEqualArea = function() { - return d3_geo_projection(d3_geo_azimuthalEqualArea); - }).raw = d3_geo_azimuthalEqualArea; - var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { - var c = Math.acos(cosλcosφ); - return c && c / Math.sin(c); - }, d3_identity); - (d3.geo.azimuthalEquidistant = function() { - return d3_geo_projection(d3_geo_azimuthalEquidistant); - }).raw = d3_geo_azimuthalEquidistant; - function d3_geo_conicConformal(φ0, φ1) { - var cosφ0 = Math.cos(φ0), t = function(φ) { - return Math.tan(π / 4 + φ / 2); - }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; - if (!n) return d3_geo_mercator; - function forward(λ, φ) { - if (F > 0) { - if (φ < -halfπ + ε) φ = -halfπ + ε; - } else { - if (φ > halfπ - ε) φ = halfπ - ε; - } - var ρ = F / Math.pow(t(φ), n); - return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); - return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; - }; - return forward; - } - (d3.geo.conicConformal = function() { - return d3_geo_conic(d3_geo_conicConformal); - }).raw = d3_geo_conicConformal; - function d3_geo_conicEquidistant(φ0, φ1) { - var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; - if (abs(n) < ε) return d3_geo_equirectangular; - function forward(λ, φ) { - var ρ = G - φ; - return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = G - y; - return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; - }; - return forward; - } - (d3.geo.conicEquidistant = function() { - return d3_geo_conic(d3_geo_conicEquidistant); - }).raw = d3_geo_conicEquidistant; - var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / cosλcosφ; - }, Math.atan); - (d3.geo.gnomonic = function() { - return d3_geo_projection(d3_geo_gnomonic); - }).raw = d3_geo_gnomonic; - function d3_geo_mercator(λ, φ) { - return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; - } - d3_geo_mercator.invert = function(x, y) { - return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; - }; - function d3_geo_mercatorProjection(project) { - var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; - m.scale = function() { - var v = scale.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.translate = function() { - var v = translate.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.clipExtent = function(_) { - var v = clipExtent.apply(m, arguments); - if (v === m) { - if (clipAuto = _ == null) { - var k = π * scale(), t = translate(); - clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); - } - } else if (clipAuto) { - v = null; - } - return v; - }; - return m.clipExtent(null); - } - (d3.geo.mercator = function() { - return d3_geo_mercatorProjection(d3_geo_mercator); - }).raw = d3_geo_mercator; - var d3_geo_orthographic = d3_geo_azimuthal(function() { - return 1; - }, Math.asin); - (d3.geo.orthographic = function() { - return d3_geo_projection(d3_geo_orthographic); - }).raw = d3_geo_orthographic; - var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / (1 + cosλcosφ); - }, function(ρ) { - return 2 * Math.atan(ρ); - }); - (d3.geo.stereographic = function() { - return d3_geo_projection(d3_geo_stereographic); - }).raw = d3_geo_stereographic; - function d3_geo_transverseMercator(λ, φ) { - return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; - } - d3_geo_transverseMercator.invert = function(x, y) { - return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; - }; - (d3.geo.transverseMercator = function() { - var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; - projection.center = function(_) { - return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); - }; - projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), - [ _[0], _[1], _[2] - 90 ]); - }; - return rotate([ 0, 0, 90 ]); - }).raw = d3_geo_transverseMercator; - d3.geom = {}; - function d3_geom_pointX(d) { - return d[0]; - } - function d3_geom_pointY(d) { - return d[1]; - } - d3.geom.hull = function(vertices) { - var x = d3_geom_pointX, y = d3_geom_pointY; - if (arguments.length) return hull(vertices); - function hull(data) { - if (data.length < 3) return []; - var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; - for (i = 0; i < n; i++) { - points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); - } - points.sort(d3_geom_hullOrder); - for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); - var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); - var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; - for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); - for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); - return polygon; - } - hull.x = function(_) { - return arguments.length ? (x = _, hull) : x; - }; - hull.y = function(_) { - return arguments.length ? (y = _, hull) : y; - }; - return hull; - }; - function d3_geom_hullUpper(points) { - var n = points.length, hull = [ 0, 1 ], hs = 2; - for (var i = 2; i < n; i++) { - while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; - hull[hs++] = i; - } - return hull.slice(0, hs); - } - function d3_geom_hullOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; - } - d3.geom.polygon = function(coordinates) { - d3_subclass(coordinates, d3_geom_polygonPrototype); - return coordinates; - }; - var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; - d3_geom_polygonPrototype.area = function() { - var i = -1, n = this.length, a, b = this[n - 1], area = 0; - while (++i < n) { - a = b; - b = this[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - return area * .5; - }; - d3_geom_polygonPrototype.centroid = function(k) { - var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; - if (!arguments.length) k = -1 / (6 * this.area()); - while (++i < n) { - a = b; - b = this[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - d3_geom_polygonPrototype.clip = function(subject) { - var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = this[i]; - c = input[(m = input.length - closed) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - if (closed) subject.push(subject[0]); - a = b; - } - return subject; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - function d3_geom_polygonClosed(coordinates) { - var a = coordinates[0], b = coordinates[coordinates.length - 1]; - return !(a[0] - b[0] || a[1] - b[1]); - } - var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; - function d3_geom_voronoiBeach() { - d3_geom_voronoiRedBlackNode(this); - this.edge = this.site = this.circle = null; - } - function d3_geom_voronoiCreateBeach(site) { - var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); - beach.site = site; - return beach; - } - function d3_geom_voronoiDetachBeach(beach) { - d3_geom_voronoiDetachCircle(beach); - d3_geom_voronoiBeaches.remove(beach); - d3_geom_voronoiBeachPool.push(beach); - d3_geom_voronoiRedBlackNode(beach); - } - function d3_geom_voronoiRemoveBeach(beach) { - var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { - x: x, - y: y - }, previous = beach.P, next = beach.N, disappearing = [ beach ]; - d3_geom_voronoiDetachBeach(beach); - var lArc = previous; - while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { - previous = lArc.P; - disappearing.unshift(lArc); - d3_geom_voronoiDetachBeach(lArc); - lArc = previous; - } - disappearing.unshift(lArc); - d3_geom_voronoiDetachCircle(lArc); - var rArc = next; - while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { - next = rArc.N; - disappearing.push(rArc); - d3_geom_voronoiDetachBeach(rArc); - rArc = next; - } - disappearing.push(rArc); - d3_geom_voronoiDetachCircle(rArc); - var nArcs = disappearing.length, iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiAddBeach(site) { - var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; - while (node) { - dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; - if (dxl > ε) node = node.L; else { - dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); - if (dxr > ε) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -ε) { - lArc = node.P; - rArc = node; - } else if (dxr > -ε) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - var newArc = d3_geom_voronoiCreateBeach(site); - d3_geom_voronoiBeaches.insert(lArc, newArc); - if (!lArc && !rArc) return; - if (lArc === rArc) { - d3_geom_voronoiDetachCircle(lArc); - rArc = d3_geom_voronoiCreateBeach(lArc.site); - d3_geom_voronoiBeaches.insert(newArc, rArc); - newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - return; - } - if (!rArc) { - newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - return; - } - d3_geom_voronoiDetachCircle(lArc); - d3_geom_voronoiDetachCircle(rArc); - var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { - x: (cy * hb - by * hc) / d + ax, - y: (bx * hc - cx * hb) / d + ay - }; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); - rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiLeftBreakPoint(arc, directrix) { - var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; - if (!pby2) return rfocx; - var lArc = arc.P; - if (!lArc) return -Infinity; - site = lArc.site; - var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; - if (!plby2) return lfocx; - var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - return (rfocx + lfocx) / 2; - } - function d3_geom_voronoiRightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); - var site = arc.site; - return site.y === directrix ? site.x : Infinity; - } - function d3_geom_voronoiCell(site) { - this.site = site; - this.edges = []; - } - d3_geom_voronoiCell.prototype.prepare = function() { - var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; - while (iHalfEdge--) { - edge = halfEdges[iHalfEdge].edge; - if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); - } - halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); - return halfEdges.length; - }; - function d3_geom_voronoiCloseCells(extent) { - var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; - while (iCell--) { - cell = cells[iCell]; - if (!cell || !cell.prepare()) continue; - halfEdges = cell.edges; - nHalfEdges = halfEdges.length; - iHalfEdge = 0; - while (iHalfEdge < nHalfEdges) { - end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; - start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; - if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { - halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { - x: x0, - y: abs(x2 - x0) < ε ? y2 : y1 - } : abs(y3 - y1) < ε && x1 - x3 > ε ? { - x: abs(y2 - y1) < ε ? x2 : x1, - y: y1 - } : abs(x3 - x1) < ε && y3 - y0 > ε ? { - x: x1, - y: abs(x2 - x1) < ε ? y2 : y0 - } : abs(y3 - y0) < ε && x3 - x0 > ε ? { - x: abs(y2 - y0) < ε ? x2 : x0, - y: y0 - } : null), cell.site, null)); - ++nHalfEdges; - } - } - } - } - function d3_geom_voronoiHalfEdgeOrder(a, b) { - return b.angle - a.angle; - } - function d3_geom_voronoiCircle() { - d3_geom_voronoiRedBlackNode(this); - this.x = this.y = this.arc = this.site = this.cy = null; - } - function d3_geom_voronoiAttachCircle(arc) { - var lArc = arc.P, rArc = arc.N; - if (!lArc || !rArc) return; - var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; - if (lSite === rSite) return; - var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; - var d = 2 * (ax * cy - ay * cx); - if (d >= -ε2) return; - var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; - var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = cy + Math.sqrt(x * x + y * y); - circle.cy = cy; - arc.circle = circle; - var before = null, node = d3_geom_voronoiCircles._; - while (node) { - if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { - if (node.L) node = node.L; else { - before = node.P; - break; - } - } else { - if (node.R) node = node.R; else { - before = node; - break; - } - } - } - d3_geom_voronoiCircles.insert(before, circle); - if (!before) d3_geom_voronoiFirstCircle = circle; - } - function d3_geom_voronoiDetachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; - d3_geom_voronoiCircles.remove(circle); - d3_geom_voronoiCirclePool.push(circle); - d3_geom_voronoiRedBlackNode(circle); - arc.circle = null; - } - } - function d3_geom_voronoiClipEdges(extent) { - var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; - while (i--) { - e = edges[i]; - if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { - e.a = e.b = null; - edges.splice(i, 1); - } - } - } - function d3_geom_voronoiConnectEdge(edge, extent) { - var vb = edge.b; - if (vb) return true; - var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!va) va = { - x: fx, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: fx, - y: y1 - }; - } else { - if (!va) va = { - x: fx, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: fx, - y: y0 - }; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!va) va = { - x: (y0 - fb) / fm, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: (y1 - fb) / fm, - y: y1 - }; - } else { - if (!va) va = { - x: (y1 - fb) / fm, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: (y0 - fb) / fm, - y: y0 - }; - } - } else { - if (ly < ry) { - if (!va) va = { - x: x0, - y: fm * x0 + fb - }; else if (va.x >= x1) return; - vb = { - x: x1, - y: fm * x1 + fb - }; - } else { - if (!va) va = { - x: x1, - y: fm * x1 + fb - }; else if (va.x < x0) return; - vb = { - x: x0, - y: fm * x0 + fb - }; - } - } - } - edge.a = va; - edge.b = vb; - return true; - } - function d3_geom_voronoiEdge(lSite, rSite) { - this.l = lSite; - this.r = rSite; - this.a = this.b = null; - } - function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, rSite); - d3_geom_voronoiEdges.push(edge); - if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); - if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); - d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); - d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); - return edge; - } - function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, null); - edge.a = va; - edge.b = vb; - d3_geom_voronoiEdges.push(edge); - return edge; - } - function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { - if (!edge.a && !edge.b) { - edge.a = vertex; - edge.l = lSite; - edge.r = rSite; - } else if (edge.l === rSite) { - edge.b = vertex; - } else { - edge.a = vertex; - } - } - function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { - var va = edge.a, vb = edge.b; - this.edge = edge; - this.site = lSite; - this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); - } - d3_geom_voronoiHalfEdge.prototype = { - start: function() { - return this.edge.l === this.site ? this.edge.a : this.edge.b; - }, - end: function() { - return this.edge.l === this.site ? this.edge.b : this.edge.a; - } - }; - function d3_geom_voronoiRedBlackTree() { - this._ = null; - } - function d3_geom_voronoiRedBlackNode(node) { - node.U = node.C = node.L = node.R = node.P = node.N = null; - } - d3_geom_voronoiRedBlackTree.prototype = { - insert: function(after, node) { - var parent, grandpa, uncle; - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = d3_geom_voronoiRedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - d3_geom_voronoiRedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - d3_geom_voronoiRedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - var parent = node.U, sibling, left = node.L, right = node.R, next, red; - if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); - if (parent) { - if (parent.L === node) parent.L = next; else parent.R = next; - } else { - this._ = next; - } - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - if (node) node.U = parent; - if (red) return; - if (node && node.C) { - node.C = false; - return; - } - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateRight(this, parent); - sibling = parent.L; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - d3_geom_voronoiRedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - if (node) node.C = false; - } - }; - function d3_geom_voronoiRedBlackRotateLeft(tree, node) { - var p = node, q = node.R, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; - } - function d3_geom_voronoiRedBlackRotateRight(tree, node) { - var p = node, q = node.L, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; - } - function d3_geom_voronoiRedBlackFirst(node) { - while (node.L) node = node.L; - return node; - } - function d3_geom_voronoi(sites, bbox) { - var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; - d3_geom_voronoiEdges = []; - d3_geom_voronoiCells = new Array(sites.length); - d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); - d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); - while (true) { - circle = d3_geom_voronoiFirstCircle; - if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { - if (site.x !== x0 || site.y !== y0) { - d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); - d3_geom_voronoiAddBeach(site); - x0 = site.x, y0 = site.y; - } - site = sites.pop(); - } else if (circle) { - d3_geom_voronoiRemoveBeach(circle.arc); - } else { - break; - } - } - if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); - var diagram = { - cells: d3_geom_voronoiCells, - edges: d3_geom_voronoiEdges - }; - d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; - return diagram; - } - function d3_geom_voronoiVertexOrder(a, b) { - return b.y - a.y || b.x - a.x; - } - d3.geom.voronoi = function(points) { - var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; - if (points) return voronoi(points); - function voronoi(data) { - var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; - d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { - var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { - var s = e.start(); - return [ s.x, s.y ]; - }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; - polygon.point = data[i]; - }); - return polygons; - } - function sites(data) { - return data.map(function(d, i) { - return { - x: Math.round(fx(d, i) / ε) * ε, - y: Math.round(fy(d, i) / ε) * ε, - i: i - }; - }); - } - voronoi.links = function(data) { - return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { - return edge.l && edge.r; - }).map(function(edge) { - return { - source: data[edge.l.i], - target: data[edge.r.i] - }; - }); - }; - voronoi.triangles = function(data) { - var triangles = []; - d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { - var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; - while (++j < m) { - e0 = e1; - s0 = s1; - e1 = edges[j].edge; - s1 = e1.l === site ? e1.r : e1.l; - if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { - triangles.push([ data[i], data[s0.i], data[s1.i] ]); - } - } - }); - return triangles; - }; - voronoi.x = function(_) { - return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; - }; - voronoi.y = function(_) { - return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; - }; - voronoi.clipExtent = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; - clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; - return voronoi; - }; - voronoi.size = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; - return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); - }; - return voronoi; - }; - var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; - function d3_geom_voronoiTriangleArea(a, b, c) { - return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); - } - d3.geom.delaunay = function(vertices) { - return d3.geom.voronoi().triangles(vertices); - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var x = d3_geom_pointX, y = d3_geom_pointY, compat; - if (compat = arguments.length) { - x = d3_geom_quadtreeCompatX; - y = d3_geom_quadtreeCompatY; - if (compat === 3) { - y2 = y1; - x2 = x1; - y1 = x1 = 0; - } - return quadtree(points); - } - function quadtree(data) { - var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; - if (x1 != null) { - x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; - } else { - x2_ = y2_ = -(x1_ = y1_ = Infinity); - xs = [], ys = []; - n = data.length; - if (compat) for (i = 0; i < n; ++i) { - d = data[i]; - if (d.x < x1_) x1_ = d.x; - if (d.y < y1_) y1_ = d.y; - if (d.x > x2_) x2_ = d.x; - if (d.y > y2_) y2_ = d.y; - xs.push(d.x); - ys.push(d.y); - } else for (i = 0; i < n; ++i) { - var x_ = +fx(d = data[i], i), y_ = +fy(d, i); - if (x_ < x1_) x1_ = x_; - if (y_ < y1_) y1_ = y_; - if (x_ > x2_) x2_ = x_; - if (y_ > y2_) y2_ = y_; - xs.push(x_); - ys.push(y_); - } - } - var dx = x2_ - x1_, dy = y2_ - y1_; - if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; - function insert(n, d, x, y, x1, y1, x2, y2) { - if (isNaN(x) || isNaN(y)) return; - if (n.leaf) { - var nx = n.x, ny = n.y; - if (nx != null) { - if (abs(nx - x) + abs(ny - y) < .01) { - insertChild(n, d, x, y, x1, y1, x2, y2); - } else { - var nPoint = n.point; - n.x = n.y = n.point = null; - insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } else { - n.x = x, n.y = y, n.point = d; - } - } else { - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } - function insertChild(n, d, x, y, x1, y1, x2, y2) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = sx; else x2 = sx; - if (bottom) y1 = sy; else y2 = sy; - insert(n, d, x, y, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(d) { - insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); - }; - i = -1; - if (x1 == null) { - while (++i < n) { - insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); - } - --i; - } else data.forEach(root.add); - xs = ys = data = d = null; - return root; - } - quadtree.x = function(_) { - return arguments.length ? (x = _, quadtree) : x; - }; - quadtree.y = function(_) { - return arguments.length ? (y = _, quadtree) : y; - }; - quadtree.extent = function(_) { - if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], - y2 = +_[1][1]; - return quadtree; - }; - quadtree.size = function(_) { - if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; - return quadtree; - }; - return quadtree; - }; - function d3_geom_quadtreeCompatX(d) { - return d.x; - } - function d3_geom_quadtreeCompatY(d) { - return d.y; - } - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null, - x: null, - y: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - d3.interpolateRgb = d3_interpolateRgb; - function d3_interpolateRgb(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - } - d3.interpolateObject = d3_interpolateObject; - function d3_interpolateObject(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - d3.interpolateNumber = d3_interpolateNumber; - function d3_interpolateNumber(a, b) { - b -= a = +a; - return function(t) { - return a + b * t; - }; - } - d3.interpolateString = d3_interpolateString; - function d3_interpolateString(a, b) { - var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; - a = a + "", b = b + ""; - while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { - if ((bs = bm.index) > bi) { - bs = b.substring(bi, bs); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s[i]) s[i] += bm; else s[++i] = bm; - } else { - s[++i] = null; - q.push({ - i: i, - x: d3_interpolateNumber(am, bm) - }); - } - bi = d3_interpolate_numberB.lastIndex; - } - if (bi < b.length) { - bs = b.substring(bi); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { - return b(t) + ""; - }) : function() { - return b; - } : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); - d3.interpolate = d3_interpolate; - function d3_interpolate(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - } - d3.interpolators = [ function(a, b) { - var t = typeof b; - return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); - } ]; - d3.interpolateArray = d3_interpolateArray; - function d3_interpolateArray(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); - for (;i < na; ++i) c[i] = a[i]; - for (;i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - } - var d3_ease_default = function() { - return d3_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_quad(t) { - return t * t; - } - function d3_ease_cubic(t) { - return t * t * t; - } - function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.interpolateHcl = d3_interpolateHcl; - function d3_interpolateHcl(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - } - d3.interpolateHsl = d3_interpolateHsl; - function d3_interpolateHsl(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; - if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; - }; - } - d3.interpolateLab = d3_interpolateLab; - function d3_interpolateLab(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - } - d3.interpolateRound = d3_interpolateRound; - function d3_interpolateRound(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - } - d3.transform = function(string) { - var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - if (string != null) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - } - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolateTransform = d3_interpolateTransform; - function d3_interpolateTransform(a, b) { - var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; - if (ta[0] != tb[0] || ta[1] != tb[1]) { - s.push("translate(", null, ",", null, ")"); - q.push({ - i: 1, - x: d3_interpolateNumber(ta[0], tb[0]) - }, { - i: 3, - x: d3_interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } else { - s.push(""); - } - if (ra != rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(s.pop() + "rotate(", null, ")") - 2, - x: d3_interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(s.pop() + "rotate(" + rb + ")"); - } - if (wa != wb) { - q.push({ - i: s.push(s.pop() + "skewX(", null, ")") - 2, - x: d3_interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(s.pop() + "skewX(" + wb + ")"); - } - if (ka[0] != kb[0] || ka[1] != kb[1]) { - n = s.push(s.pop() + "scale(", null, ",", null, ")"); - q.push({ - i: n - 4, - x: d3_interpolateNumber(ka[0], kb[0]) - }, { - i: n - 2, - x: d3_interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] != 1 || kb[1] != 1) { - s.push(s.pop() + "scale(" + kb + ")"); - } - n = q.length; - return function(t) { - var i = -1, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - } - function d3_uninterpolateNumber(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return (x - a) * b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return Math.max(0, Math.min(1, (x - a) * b)); - }; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (τ - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: (x - x0) / k - }; - x += padding; - } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } - } - } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, _, x2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; - if (dw * dw / theta2 < dn) { - if (dn < chargeDistance2) { - var k = quad.charge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - return true; - } - if (quad.point && dn && dn < chargeDistance2) { - var k = quad.pointCharge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight / (t.weight + s.weight)); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } - } - } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; - } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; - } - } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = typeof x === "function" ? x : +x; - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = typeof x === "function" ? x : +x; - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = +x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.chargeDistance = function(x) { - if (!arguments.length) return Math.sqrt(chargeDistance2); - chargeDistance2 = x * x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = +x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return Math.sqrt(theta2); - theta2 = x * x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - x = +x; - if (alpha) { - if (x > 0) alpha = x; else alpha = 0; - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - d3.timer(force.tick); - } - return force; - }; - force.start = function() { - var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - distances = []; - if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; - strengths = []; - if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; - charges = []; - if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; - function position(dimension, size) { - if (!neighbors) { - neighbors = new Array(n); - for (j = 0; j < n; ++j) { - neighbors[j] = []; - } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - var candidates = neighbors[i], j = -1, m = candidates.length, x; - while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x; - return Math.random() * size; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); - if (!arguments.length) return drag; - this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); - }; - function dragmove(d) { - d.px = d3.event.x, d.py = d3.event.y; - force.resume(); - } - return d3.rebind(force, event, "on"); - }; - function d3_layout_forceDragstart(d) { - d.fixed |= 2; - } - function d3_layout_forceDragend(d) { - d.fixed &= ~6; - } - function d3_layout_forceMouseover(d) { - d.fixed |= 4; - d.px = d.x, d.py = d.y; - } - function d3_layout_forceMouseout(d) { - d.fixed &= ~4; - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function hierarchy(root) { - var stack = [ root ], nodes = [], node; - root.depth = 0; - while ((node = stack.pop()) != null) { - nodes.push(node); - if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { - var n, childs, child; - while (--n >= 0) { - stack.push(child = childs[n]); - child.parent = node; - child.depth = node.depth + 1; - } - if (value) node.value = 0; - node.children = childs; - } else { - if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; - delete node.children; - } - } - d3_layout_hierarchyVisitAfter(root, function(node) { - var childs, parent; - if (sort && (childs = node.children)) childs.sort(sort); - if (value && (parent = node.parent)) parent.value += node.value; - }); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - if (value) { - d3_layout_hierarchyVisitBefore(root, function(node) { - if (node.children) node.value = 0; - }); - d3_layout_hierarchyVisitAfter(root, function(node) { - var parent; - if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; - if (parent = node.parent) parent.value += node.value; - }); - } - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.nodes = object; - object.links = d3_layout_hierarchyLinks; - return object; - } - function d3_layout_hierarchyVisitBefore(node, callback) { - var nodes = [ node ]; - while ((node = nodes.pop()) != null) { - callback(node); - if ((children = node.children) && (n = children.length)) { - var n, children; - while (--n >= 0) nodes.push(children[n]); - } - } - } - function d3_layout_hierarchyVisitAfter(node, callback) { - var nodes = [ node ], nodes2 = []; - while ((node = nodes.pop()) != null) { - nodes2.push(node); - if ((children = node.children) && (n = children.length)) { - var i = -1, n, children; - while (++i < n) nodes.push(children[i]); - } - } - while ((node = nodes2.pop()) != null) { - callback(node); - } - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; - } - } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); - } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ; - function pie(data) { - var values = data.map(function(d, i) { - return +value.call(pie, d, i); - }); - var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); - var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values); - var index = d3.range(data.length); - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - var arcs = []; - index.forEach(function(i) { - var d; - arcs[i] = { - data: data[i], - value: d = values[i], - startAngle: a, - endAngle: a += d * k - }; - }); - return arcs; - } - pie.value = function(x) { - if (!arguments.length) return value; - value = x; - return pie; - }; - pie.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return pie; - }; - pie.startAngle = function(x) { - if (!arguments.length) return startAngle; - startAngle = x; - return pie; - }; - pie.endAngle = function(x) { - if (!arguments.length) return endAngle; - endAngle = x; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var n = series.length, m = series[0].length, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (;i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; - } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } - } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { - return radius; - }; - root.x = root.y = 0; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r = +r(d.value); - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - if (padding) { - var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r -= dr; - }); - } - d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); - return nodes; - } - pack.size = function(_) { - if (!arguments.length) return size; - size = _; - return pack; - }; - pack.radius = function(_) { - if (!arguments.length) return radius; - radius = _ == null || typeof _ === "function" ? _ : +_; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return .999 * dr * dr > dx * dx + dy * dy; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); - } - } - } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); - d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; - d3_layout_hierarchyVisitBefore(root1, secondWalk); - if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { - var left = root0, right = root0, bottom = root0; - d3_layout_hierarchyVisitBefore(root0, function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); - d3_layout_hierarchyVisitBefore(root0, function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return nodes; - } - function wrapTree(root0) { - var root1 = { - A: null, - children: [ root0 ] - }, queue = [ root1 ], node1; - while ((node1 = queue.pop()) != null) { - for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { - queue.push((children[i] = child = { - _: children[i], - parent: node1, - children: (child = children[i].children) && child.slice() || [], - A: null, - a: null, - z: 0, - m: 0, - c: 0, - s: 0, - t: null, - i: i - }).a = child); - } - } - return root1.children[0]; - } - function firstWalk(v) { - var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; - if (children.length) { - d3_layout_treeShift(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - function apportion(v, w, ancestor) { - if (w) { - var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !d3_layout_treeRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= size[0]; - node.y = node.depth * size[1]; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null ? sizeNode : null; - return tree; - }; - tree.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) == null ? null : sizeNode; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(v) { - var children = v.children; - return children.length ? children[0] : v.t; - } - function d3_layout_treeRight(v) { - var children = v.children, n; - return (n = children.length) ? children[n - 1] : v.t; - } - function d3_layout_treeMove(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; - } - function d3_layout_treeShift(v) { - var shift = 0, change = 0, children = v.children, i = children.length, w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } - } - function d3_layout_treeAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; - d3_layout_hierarchyVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { - node.x = (node.x - root.x) * size[0]; - node.y = (root.y - node.y) * size[1]; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null; - return cluster; - }; - cluster.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) != null; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; - } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if (mode !== "squarify" || (score = worst(row, u)) <= best) { - remaining.pop(); - best = score; - } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; - } - } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; - } - children.forEach(squarify); - } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); - } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; - } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = 0; - root.y = 0; - root.dx = size[0]; - root.dy = size[1]; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], - padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - treemap.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function() { - var random = d3.random.normal.apply(d3, arguments); - return function() { - return Math.exp(random()); - }; - }, - bates: function(m) { - var random = d3.random.irwinHall(m); - return function() { - return random() / m; - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s; - }; - } - }; - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - return domain; - } - function d3_scale_niceStep(step) { - return step ? { - floor: function(x) { - return Math.floor(x / step) * step; - }, - ceil: function(x) { - return Math.ceil(x / step) * step; - } - } : d3_scale_niceIdentity; - } - var d3_scale_niceIdentity = { - floor: d3_identity, - ceil: d3_identity - }; - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3_interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3_interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - d3_scale_linearNice(domain, m); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(domain, m) { - return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - } - function d3_scale_linearTickRange(domain, m) { - if (m == null) m = 10; - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m, format) { - var range = d3_scale_linearTickRange(domain, m); - if (format) { - var match = d3_format_re.exec(format); - match.shift(); - if (match[8] === "s") { - var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); - if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); - match[8] = "f"; - format = d3.format(match.join("")); - return function(d) { - return format(prefix.scale(d)) + prefix.symbol; - }; - } - if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); - format = match.join(""); - } else { - format = ",." + d3_scale_linearPrecision(range[2]) + "f"; - } - return d3.format(format); - } - var d3_scale_linearFormatSignificant = { - s: 1, - g: 1, - p: 1, - r: 1, - e: 1 - }; - function d3_scale_linearPrecision(value) { - return -Math.floor(Math.log(value) / Math.LN10 + .01); - } - function d3_scale_linearFormatPrecision(type, range) { - var p = d3_scale_linearPrecision(range[2]); - return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); - }; - function d3_scale_log(linear, base, positive, domain) { - function log(x) { - return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); - } - function pow(x) { - return positive ? Math.pow(base, x) : -Math.pow(base, -x); - } - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - positive = x[0] >= 0; - linear.domain((domain = x.map(Number)).map(log)); - return scale; - }; - scale.base = function(_) { - if (!arguments.length) return base; - base = +_; - linear.domain(domain.map(log)); - return scale; - }; - scale.nice = function() { - var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); - linear.domain(niced); - domain = niced.map(pow); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; - if (isFinite(j - i)) { - if (positive) { - for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } else { - ticks.push(pow(i)); - for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (!arguments.length) return d3_scale_logFormat; - if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); - var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, - Math.floor), e; - return function(d) { - return d / pow(f(log(d) + e)) <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), base, positive, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { - floor: function(x) { - return -Math.ceil(-x); - }, - ceil: function(x) { - return -Math.floor(-x); - } - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); - }; - function d3_scale_pow(linear, exponent, domain) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - linear.domain((domain = x.map(Number)).map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - return scale.domain(d3_scale_linearNice(domain, m)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - linear.domain(domain.map(powp)); - return scale; - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map(); - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding); - range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; - range = steps(start + Math.round(error / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); - var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); - var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); - var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.filter(d3_number).sort(d3_ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - y = y < 0 ? NaN : y / kx + x0; - return [ y, y + 1 / kx ]; - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - if (x <= x) return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return [ domain[y - 1], domain[y] ]; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function arc() { - var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, - a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); - return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_line(projection) { - var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - step: d3_svg_lineStep, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.join("L"); - } - function d3_svg_lineLinearClosed(points) { - return d3_svg_lineLinear(points) + "Z"; - } - function d3_svg_lineStep(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); - if (n > 1) path.push("H", p[0]); - return path.join(""); - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), - points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - points.push(points[n - 1]); - while (++i <= n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - points.pop(); - path.push("L", pi); - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (abs(d) < ε) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] + d3_svg_arcOffset; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordRadius(d) { - return d.radius; - } - d3.svg.diagonal = function() { - var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / π); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); - function d3_transition(groups, id) { - d3_subclass(groups, d3_transitionPrototype); - groups.id = id; - return groups; - } - var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3_transitionPrototype.empty = d3_selectionPrototype.empty; - d3_transitionPrototype.node = d3_selectionPrototype.node; - d3_transitionPrototype.size = d3_selectionPrototype.size; - d3.transition = function(selection) { - return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition(); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var id = this.id, subgroups = [], subgroup, subnode, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, id, node.__transition__[id]); - subgroup.push(subnode); - } else { - subgroup.push(null); - } - } - } - return d3_transition(subgroups, id); - }; - d3_transitionPrototype.selectAll = function(selector) { - var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - transition = node.__transition__[id]; - subnodes = selector.call(node, node.__data__, i, j); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition); - subgroup.push(subnode); - } - } - } - } - return d3_transition(subgroups, id); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_transition(subgroups, this.id); - }; - d3_transitionPrototype.tween = function(name, tween) { - var id = this.id; - if (arguments.length < 2) return this.node().__transition__[id].tween.get(name); - return d3_selection_each(this, tween == null ? function(node) { - node.__transition__[id].tween.remove(name); - } : function(node) { - node.__transition__[id].tween.set(name, tween); - }); - }; - function d3_transition_tween(groups, name, value, tween) { - var id = groups.id; - return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j))); - } : (value = tween(value), function(node) { - node.__transition__[id].tween.set(name, value); - })); - } - d3_transitionPrototype.attr = function(nameNS, value) { - if (arguments.length < 2) { - for (value in nameNS) this.attr(value, nameNS[value]); - return this; - } - var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrTween(b) { - return b == null ? attrNull : (b += "", function() { - var a = this.getAttribute(name), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttribute(name, i(t)); - }); - }); - } - function attrTweenNS(b) { - return b == null ? attrNullNS : (b += "", function() { - var a = this.getAttributeNS(name.space, name.local), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttributeNS(name.space, name.local, i(t)); - }); - }); - } - return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.style(priority, name[priority], value); - return this; - } - priority = ""; - } - function styleNull() { - this.style.removeProperty(name); - } - function styleString(b) { - return b == null ? styleNull : (b += "", function() { - var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i; - return a !== b && (i = d3_interpolate(a, b), function(t) { - this.style.setProperty(name, i(t), priority); - }); - }); - } - return d3_transition_tween(this, "style." + name, value, styleString); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name)); - return f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - } - return this.tween("style." + name, styleTween); - }; - d3_transitionPrototype.text = function(value) { - return d3_transition_tween(this, "text", value, d3_transition_text); - }; - function d3_transition_text(b) { - if (b == null) b = ""; - return function() { - this.textContent = b; - }; - } - d3_transitionPrototype.remove = function() { - return this.each("end.transition", function() { - var p; - if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.ease = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].ease; - if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { - node.__transition__[id].ease = value; - }); - }; - d3_transitionPrototype.delay = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].delay; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].delay = +value.call(node, node.__data__, i, j); - } : (value = +value, function(node) { - node.__transition__[id].delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].duration; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); - } : (value = Math.max(1, value), function(node) { - node.__transition__[id].duration = value; - })); - }; - d3_transitionPrototype.each = function(type, listener) { - var id = this.id; - if (arguments.length < 2) { - var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node.__transition__[id]; - type.call(node, node.__data__, i, j); - }); - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; - } else { - d3_selection_each(this, function(node) { - var transition = node.__transition__[id]; - (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener); - }); - } - return this; - }; - d3_transitionPrototype.transition = function() { - var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition; - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if (node = group[i]) { - transition = Object.create(node.__transition__[id0]); - transition.delay += transition.duration; - d3_transitionNode(node, i, id1, transition); - } - subgroup.push(node); - } - } - return d3_transition(subgroups, id1); - }; - function d3_transitionNode(node, i, id, inherit) { - var lock = node.__transition__ || (node.__transition__ = { - active: 0, - count: 0 - }), transition = lock[id]; - if (!transition) { - var time = inherit.time; - transition = lock[id] = { - tween: new d3_Map(), - time: time, - ease: inherit.ease, - delay: inherit.delay, - duration: inherit.duration - }; - ++lock.count; - d3.timer(function(elapsed) { - var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = []; - timer.t = delay + time; - if (delay <= elapsed) return start(elapsed - delay); - timer.c = start; - function start(elapsed) { - if (lock.active > id) return stop(); - lock.active = id; - transition.event && transition.event.start.call(node, d, i); - transition.tween.forEach(function(key, value) { - if (value = value.call(node, d, i)) { - tweened.push(value); - } - }); - d3.timer(function() { - timer.c = tick(elapsed || 1) ? d3_true : tick; - return 1; - }, 0, time); - } - function tick(elapsed) { - if (lock.active !== id) return stop(); - var t = elapsed / duration, e = ease(t), n = tweened.length; - while (n > 0) { - tweened[--n].call(node, e); - } - if (t >= 1) { - transition.event && transition.event.end.call(node, d, i); - return stop(); - } - } - function stop() { - if (--lock.count) delete lock[id]; else delete node.__transition__; - return 1; - } - }, 0, time); - } - } - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); - var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), - d3.transition(path)); - tickEnter.append("line"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); - switch (orient) { - case "bottom": - { - tickTransform = d3_svg_axisX; - lineEnter.attr("y2", innerTickSize); - textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding); - lineUpdate.attr("x2", 0).attr("y2", innerTickSize); - textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding); - text.attr("dy", ".71em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize); - break; - } - - case "top": - { - tickTransform = d3_svg_axisX; - lineEnter.attr("y2", -innerTickSize); - textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); - lineUpdate.attr("x2", 0).attr("y2", -innerTickSize); - textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); - text.attr("dy", "0em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize); - break; - } - - case "left": - { - tickTransform = d3_svg_axisY; - lineEnter.attr("x2", -innerTickSize); - textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)); - lineUpdate.attr("x2", -innerTickSize).attr("y2", 0); - textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0); - text.attr("dy", ".32em").style("text-anchor", "end"); - pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize); - break; - } - - case "right": - { - tickTransform = d3_svg_axisY; - lineEnter.attr("x2", innerTickSize); - textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding); - lineUpdate.attr("x2", innerTickSize).attr("y2", 0); - textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0); - text.attr("dy", ".32em").style("text-anchor", "start"); - pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize); - break; - } - } - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function(d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1); - } - tickEnter.call(tickTransform, scale0); - tickUpdate.call(tickTransform, scale1); - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x) { - var n = arguments.length; - if (!n) return innerTickSize; - innerTickSize = +x; - outerTickSize = +arguments[n - 1]; - return axis; - }; - axis.innerTickSize = function(x) { - if (!arguments.length) return innerTickSize; - innerTickSize = +x; - return axis; - }; - axis.outerTickSize = function(x) { - if (!arguments.length) return outerTickSize; - outerTickSize = +x; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function() { - return arguments.length && axis; - }; - return axis; - }; - var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { - top: 1, - right: 1, - bottom: 1, - left: 1 - }; - function d3_svg_axisX(selection, x) { - selection.attr("transform", function(d) { - return "translate(" + x(d) + ",0)"; - }); - } - function d3_svg_axisY(selection, y) { - selection.attr("transform", function(d) { - return "translate(0," + y(d) + ")"; - }); - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; - function brush(g) { - g.each(function() { - var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - var background = g.selectAll(".background").data([ 0 ]); - background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); - var resize = g.selectAll(".resize").data(resizes, d3_identity); - resize.exit().remove(); - resize.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - resize.style("display", brush.empty() ? "none" : null); - var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; - if (x) { - range = d3_scaleRange(x); - backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); - redrawX(gUpdate); - } - if (y) { - range = d3_scaleRange(y); - backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); - redrawY(gUpdate); - } - redraw(gUpdate); - }); - } - brush.event = function(g) { - g.each(function() { - var event_ = event.of(this, arguments), extent1 = { - x: xExtent, - y: yExtent, - i: xExtentDomain, - j: yExtentDomain - }, extent0 = this.__chart__ || extent1; - this.__chart__ = extent1; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.brush", function() { - xExtentDomain = extent0.i; - yExtentDomain = extent0.j; - xExtent = extent0.x; - yExtent = extent0.y; - event_({ - type: "brushstart" - }); - }).tween("brush:brush", function() { - var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); - xExtentDomain = yExtentDomain = null; - return function(t) { - xExtent = extent1.x = xi(t); - yExtent = extent1.y = yi(t); - event_({ - type: "brush", - mode: "resize" - }); - }; - }).each("end.brush", function() { - xExtentDomain = extent1.i; - yExtentDomain = extent1.j; - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - }); - } else { - event_({ - type: "brushstart" - }); - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - } - }); - }; - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", xExtent[0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); - } - function redrawY(g) { - g.select(".extent").attr("y", yExtent[0]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset; - var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (d3.event.changedTouches) { - w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); - } else { - w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); - } - g.interrupt().selectAll("*").interrupt(); - if (dragging) { - origin[0] = xExtent[0] - origin[0]; - origin[1] = yExtent[0] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; - origin[0] = xExtent[ex]; - origin[1] = yExtent[ey]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= xExtent[1]; - origin[1] -= yExtent[1]; - dragging = 2; - } - d3_eventPreventDefault(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += xExtent[1]; - origin[1] += yExtent[1]; - dragging = 0; - d3_eventPreventDefault(); - } - } - function brushmove() { - var point = d3.mouse(target), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; - origin[0] = xExtent[+(point[0] < center[0])]; - origin[1] = yExtent[+(point[1] < center[1])]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); - } - } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; - } - min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; - if (dragging) { - max = (min += position) + size; - } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; - } - } - if (extent[0] != min || extent[1] != max) { - if (i) yExtentDomain = null; else xExtentDomain = null; - extent[0] = min; - extent[1] = max; - return true; - } - } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - dragRestore(); - event_({ - type: "brushend" - }); - } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.clamp = function(z) { - if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; - if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - if (x) { - if (xExtentDomain) { - x0 = xExtentDomain[0], x1 = xExtentDomain[1]; - } else { - x0 = xExtent[0], x1 = xExtent[1]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - } - } - if (y) { - if (yExtentDomain) { - y0 = yExtentDomain[0], y1 = yExtentDomain[1]; - } else { - y0 = yExtent[0], y1 = yExtent[1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - xExtentDomain = [ x0, x1 ]; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - yExtentDomain = [ y0, y1 ]; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; - } - return brush; - }; - brush.clear = function() { - if (!brush.empty()) { - xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; - xExtentDomain = yExtentDomain = null; - } - return brush; - }; - brush.empty = function() { - return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; - var d3_time_formatUtc = d3_time_format.utc; - var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - d3_time.second = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3_time.seconds = d3_time.second.range; - d3_time.seconds.utc = d3_time.second.utc.range; - d3_time.minute = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3_time.minutes = d3_time.minute.range; - d3_time.minutes.utc = d3_time.minute.utc.range; - d3_time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3_time.hours = d3_time.hour.range; - d3_time.hours.utc = d3_time.hour.utc.range; - d3_time.month = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3_time.months = d3_time.month.range; - d3_time.months.utc = d3_time.month.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - function tickMethod(extent, count) { - var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); - return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { - return d / 31536e6; - }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; - } - scale.nice = function(interval, skip) { - var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); - if (method) interval = method[0], skip = method[1]; - function skipped(date) { - return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; - } - return scale.domain(d3_scale_nice(domain, skip > 1 ? { - floor: function(date) { - while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); - return date; - }, - ceil: function(date) { - while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); - return date; - } - } : interval)); - }; - scale.ticks = function(interval, skip) { - var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { - range: interval - }, skip ]; - if (method) interval = method[0], skip = method[1]; - return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_time_scaleDate(t) { - return new Date(t); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; - var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { - return d.getMilliseconds(); - } ], [ ":%S", function(d) { - return d.getSeconds(); - } ], [ "%I:%M", function(d) { - return d.getMinutes(); - } ], [ "%I %p", function(d) { - return d.getHours(); - } ], [ "%a %d", function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ "%b %d", function(d) { - return d.getDate() != 1; - } ], [ "%B", function(d) { - return d.getMonth(); - } ], [ "%Y", d3_true ] ]); - var d3_time_scaleMilliseconds = { - range: function(start, stop, step) { - return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); - }, - floor: d3_identity, - ceil: d3_identity - }; - d3_time_scaleLocalMethods.year = d3_time.year; - d3_time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { - return d.getUTCMilliseconds(); - } ], [ ":%S", function(d) { - return d.getUTCSeconds(); - } ], [ "%I:%M", function(d) { - return d.getUTCMinutes(); - } ], [ "%I %p", function(d) { - return d.getUTCHours(); - } ], [ "%a %d", function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ "%b %d", function(d) { - return d.getUTCDate() != 1; - } ], [ "%B", function(d) { - return d.getUTCMonth(); - } ], [ "%Y", d3_true ] ]); - d3_time_scaleUtcMethods.year = d3_time.year.utc; - d3_time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); - }; - d3.text = d3_xhrType(function(request) { - return request.responseText; - }); - d3.json = function(url, callback) { - return d3_xhr(url, "application/json", d3_json, callback); - }; - function d3_json(request) { - return JSON.parse(request.responseText); - } - d3.html = function(url, callback) { - return d3_xhr(url, "text/html", d3_html, callback); - }; - function d3_html(request) { - var range = d3_document.createRange(); - range.selectNode(d3_document.body); - return range.createContextualFragment(request.responseText); - } - d3.xml = d3_xhrType(function(request) { - return request.responseXML; - }); - if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; - this.d3 = d3; -}(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/d3/d3.min.js b/platforms/android/assets/www/lib/d3/d3.min.js deleted file mode 100644 index 88550ae5..00000000 --- a/platforms/android/assets/www/lib/d3/d3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ia+n in this}function c(n){return n=ia+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===oa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===oa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=aa.length;r>e;++e){var u=aa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Zo.event.preventDefault()}function x(){for(var n,t=Zo.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Zo.event;u.target=n,Zo.event=u,t[u.type].apply(e,r)}finally{Zo.event=i}}},t}function _(n){return sa(n,pa),n}function b(n){return"function"==typeof n?n:function(){return la(n,this)}}function w(n){return"function"==typeof n?n:function(){return fa(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Zo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Zo.requote(n)+"(?:\\s+|$)","g")}function A(n){return(n+"").trim().split(/^|\s+/)}function C(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=A(n).map(N);var u=n.length;return"function"==typeof t?r:e}function N(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function z(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function L(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function T(n){return"function"==typeof n?n:(n=Zo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function q(n){return{__data__:n}}function R(n){return function(){return ga(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,da),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Xo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Zo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.substring(0,a));var s=ya.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Zo.event;Zo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Zo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Ma,t="click"+n,e=Zo.select(Wo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(xa){var r=Bo.style,u=r[xa];r[xa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),xa&&(r[xa]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>_a&&(Wo.scrollX||Wo.scrollY)){e=Zo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();_a=!(u.f||u.e),e.remove()}return _a?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Zo.event.changedTouches[0].identifier}function X(){return Zo.event.target}function $(){return Wo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?ba:Math.acos(n)}function G(n){return n>1?Sa:-1>n?-Sa:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?st(n.l,n.a,n.b):st((n=xt((n=Zo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Aa)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=lt(u)*ja,r=lt(r)*Ha,i=lt(i)*Fa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function st(n,t,e){return n>0?new it(Math.atan2(e,t)*Ca,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function lt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Ia.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/ja),u=ft((.2126729*n+.7151522*t+.072175*e)/Ha),i=ft((.0193339*n+.119192*t+.9503041*e)/Fa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Zo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Wo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Zo.event;Zo.event=n;try{o.progress.call(i,c)}finally{Zo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Xo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Zo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(){var n=Ct(),t=Nt()-n;t>24?(isFinite(t)&&(clearTimeout($a),$a=setTimeout(At,t)),Xa=0):(Xa=1,Wa(At))}function Ct(){var n=Date.now();for(Ba=Za;Ba;)n>=Ba.t&&(Ba.f=Ba.c(n-Ba.t)),Ba=Ba.n;return n}function Nt(){for(var n,t=Za,e=1/0;t;)t.f?t=n?n.n=t.n:Za=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Va=n,e}function zt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Lt(n,t){var e=Math.pow(10,3*ua(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ga.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Ka.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Zo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function Rt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Dt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new nc(e-1)),1),e}function i(n,e){return t(n=new nc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{nc=Rt;var r=new Rt;return r._=n,o(r,t,e)}finally{nc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Pt(n);return c.floor=c,c.round=Pt(r),c.ceil=Pt(u),c.offset=Pt(i),c.range=a,n}function Pt(n){return function(t,e){try{nc=Rt;var r=new Rt;return r._=t,n(r,e)._}finally{nc=Date}}}function Ut(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=ec[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&nc!==Rt,o=new(i?Rt:nc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in ec?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{nc=Rt;var t=new nc;return t._=n,r(t)}finally{nc=Date}}var r=t(n);return e.parse=function(n){try{nc=Rt;var t=r.parse(n);return t&&t._}finally{nc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=re;var x=Zo.map(),M=Ht(v),_=Ft(v),b=Ht(d),w=Ft(d),S=Ht(m),k=Ft(m),E=Ht(y),A=Ft(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return jt(n.getDate(),t,2)},e:function(n,t){return jt(n.getDate(),t,2)},H:function(n,t){return jt(n.getHours(),t,2)},I:function(n,t){return jt(n.getHours()%12||12,t,2)},j:function(n,t){return jt(1+Qa.dayOfYear(n),t,3)},L:function(n,t){return jt(n.getMilliseconds(),t,3)},m:function(n,t){return jt(n.getMonth()+1,t,2)},M:function(n,t){return jt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return jt(n.getSeconds(),t,2)},U:function(n,t){return jt(Qa.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return jt(Qa.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return jt(n.getFullYear()%100,t,2)},Y:function(n,t){return jt(n.getFullYear()%1e4,t,4)},Z:te,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Wt,e:Wt,H:Gt,I:Gt,j:Jt,L:ne,m:Bt,M:Kt,p:l,S:Qt,U:Yt,w:Ot,W:It,x:c,X:s,y:Vt,Y:Zt,Z:Xt,"%":ee};return t}function jt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ht(n){return new RegExp("^(?:"+n.map(Zo.requote).join("|")+")","i")}function Ft(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Ot(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Yt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function It(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Zt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Vt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.y=$t(+r[0]),e+r[0].length):-1}function Xt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=-t,e+5):-1}function $t(n){return n+(n>68?1900:2e3)}function Bt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Wt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Jt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Gt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Kt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Qt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ne(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function te(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(ua(t)/60),u=ua(t)%60;return e+jt(r,"0",2)+jt(u,"0",2)}function ee(n,t,e){uc.lastIndex=0;var r=uc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function re(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ue(){}function ie(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function oe(n,t){n&&cc.hasOwnProperty(n.type)&&cc[n.type](n,t)}function ae(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ce(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)ae(n[e],t,1);t.polygonEnd()}function se(){function n(n,t){n*=Aa,t=t*Aa/2+ba/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);lc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;fc.point=function(o,a){fc.point=n,r=(t=o)*Aa,u=Math.cos(a=(e=a)*Aa/2+ba/4),i=Math.sin(a)},fc.lineEnd=function(){n(t,e)}}function le(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function fe(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function he(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ge(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function pe(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function ve(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function de(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function me(n,t){return ua(n[0]-t[0])<ka&&ua(n[1]-t[1])<ka}function ye(n,t){n*=Aa;var e=Math.cos(t*=Aa);xe(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function xe(n,t,e){++hc,pc+=(n-pc)/hc,vc+=(t-vc)/hc,dc+=(e-dc)/hc}function Me(){function n(n,u){n*=Aa;var i=Math.cos(u*=Aa),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);gc+=s,mc+=s*(t+(t=o)),yc+=s*(e+(e=a)),xc+=s*(r+(r=c)),xe(t,e,r)}var t,e,r;wc.point=function(u,i){u*=Aa;var o=Math.cos(i*=Aa);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),wc.point=n,xe(t,e,r)}}function _e(){wc.point=ye}function be(){function n(n,t){n*=Aa;var e=Math.cos(t*=Aa),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-J(g)/h,v=Math.atan2(h,g);Mc+=p*s,_c+=p*l,bc+=p*f,gc+=v,mc+=v*(r+(r=o)),yc+=v*(u+(u=a)),xc+=v*(i+(i=c)),xe(r,u,i)}var t,e,r,u,i;wc.point=function(o,a){t=o,e=a,wc.point=n,o*=Aa;var c=Math.cos(a*=Aa);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),xe(r,u,i)},wc.lineEnd=function(){n(t,e),wc.lineEnd=_e,wc.point=ye}}function we(){return!0}function Se(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(me(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ee(e,n,null,!0),s=new Ee(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Ee(r,n,null,!1),s=new Ee(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),ke(i),ke(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ke(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Ee(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ae(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ce))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Zo.merge(g);var n=Le(m,p);g.length?(_||(i.polygonStart(),_=!0),Se(g,ze,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ne(),M=t(x),_=!1;return y}}function Ce(n){return n.length>1}function Ne(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function ze(n,t){return((n=n.x)[0]<0?n[1]-Sa-ka:Sa-n[1])-((t=t.x)[0]<0?t[1]-Sa-ka:Sa-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;lc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+ba/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+ba/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>ba,k=p*x;if(lc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*wa:_,S^h>=e^m>=e){var E=he(le(f),le(n));ve(E);var A=he(u,E);ve(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-ka>i||ka>i&&0>lc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?ba:-ba,c=ua(i-e);ua(c-ba)<ka?(n.point(e,r=(r+o)/2>0?Sa:-Sa),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=ba&&(ua(e-u)<ka&&(e-=u*ka),ua(i-a)<ka&&(i-=a*ka),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return ua(o)>ka?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*Sa,r.point(-ba,u),r.point(0,u),r.point(ba,u),r.point(ba,0),r.point(ba,-u),r.point(0,-u),r.point(-ba,-u),r.point(-ba,0),r.point(-ba,u);else if(ua(n[0]-t[0])>ka){var i=n[0]<t[0]?ba:-ba;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function De(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?ba:-ba),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(me(e,g)||me(p,g))&&(p[0]+=ka,p[1]+=ka,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&me(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=le(n),u=le(t),o=[1,0,0],a=he(r,u),c=fe(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=he(o,a),p=pe(o,f),v=pe(a,h);ge(p,v);var d=g,m=fe(p,d),y=fe(d,d),x=m*m-y*(fe(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=pe(d,(-m-M)/y);if(ge(_,p),_=de(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ua(A-ba)<ka,N=C||ka>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ua(_[0]-w)<ka?k:E):k<=_[1]&&_[1]<=E:A>ba^(w<=_[0]&&_[0]<=S)){var z=pe(d,(-m+M)/y);return ge(z,p),[_,de(z)]}}}function u(t,e){var r=o?n:ba-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ua(i)>ka,c=sr(n,6*Aa);return Ae(t,e,c,o?[0,-n]:[-ba,n-ba])}function Pe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Ue(n,t,e,r){function u(r,u){return ua(r[0]-n)<ka?u>0?0:3:ua(r[0]-e)<ka?u>0?2:1:ua(r[1]-t)<ka?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&W(s,i,n)>0&&++t:i[1]<=r&&W(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-kc,Math.min(kc,n)),t=Math.max(-kc,Math.min(kc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ne(),C=Pe(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Zo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Se(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function je(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function He(n){var t=0,e=ba/3,r=tr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*ba/180,e=n[1]*ba/180):[180*(t/ba),180*(e/ba)]},u}function Fe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Oe(){function n(n,t){Ac+=u*n-r*t,r=n,u=t}var t,e,r,u;Tc.point=function(i,o){Tc.point=n,t=r=i,e=u=o},Tc.lineEnd=function(){n(t,e)}}function Ye(n,t){Cc>n&&(Cc=n),n>zc&&(zc=n),Nc>t&&(Nc=t),t>Lc&&(Lc=t)}function Ie(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ze(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ze(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ze(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ve(n,t){pc+=n,vc+=t,++dc}function Xe(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);mc+=o*(t+n)/2,yc+=o*(e+r)/2,xc+=o,Ve(t=n,e=r)}var t,e;Rc.point=function(r,u){Rc.point=n,Ve(t=r,e=u)}}function $e(){Rc.point=Ve}function Be(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);mc+=o*(r+n)/2,yc+=o*(u+t)/2,xc+=o,o=u*n-r*t,Mc+=o*(r+n),_c+=o*(u+t),bc+=3*o,Ve(r=n,u=t)}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,Ve(t=r=i,e=u=o)},Rc.lineEnd=function(){n(t,e)}}function We(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,wa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Je(n){function t(n){return(a?r:e)(n)}function e(t){return Qe(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=le([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ua(ua(w)-1)<ka||ua(r-h)<ka?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;(T*T/M>i||ua((y*z+x*L)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Aa),a=16; -return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Ge(n){var t=Je(function(t,e){return n([t*Ca,e*Ca])});return function(n){return er(t(n))}}function Ke(n){this.stream=n}function Qe(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function nr(n){return tr(function(){return n})()}function tr(n){function t(n){return n=a(n[0]*Aa,n[1]*Aa),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ca,n[1]*Ca]}function r(){a=je(o=ir(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=Je(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Sc,_=wt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=er(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Sc):De((b=+n)*Aa),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Ue(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Aa,d=n[1]%360*Aa,r()):[v*Ca,d*Ca]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Aa,y=n[1]%360*Aa,x=n.length>2?n[2]%360*Aa:0,r()):[m*Ca,y*Ca,x*Ca]},Zo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function er(n){return Qe(n,function(t,e){n.point(t*Aa,e*Aa)})}function rr(n,t){return[n,t]}function ur(n,t){return[n>ba?n-wa:-ba>n?n+wa:n,t]}function ir(n,t,e){return n?t||e?je(ar(n),cr(t,e)):ar(n):t||e?cr(t,e):ur}function or(n){return function(t,e){return t+=n,[t>ba?t-wa:-ba>t?t+wa:t,e]}}function ar(n){var t=or(n);return t.invert=or(-n),t}function cr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=lr(e,u),i=lr(e,i),(o>0?i>u:u>i)&&(u+=o*wa)):(u=n+o*wa,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=de([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function lr(n,t){var e=le(t);e[0]-=n,ve(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-ka)%(2*Math.PI)}function fr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function hr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function gr(n){return n.source}function pr(n){return n.target}function vr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ca,Math.atan2(o,Math.sqrt(r*r+u*u))*Ca]}:function(){return[n*Ca,t*Ca]};return p.distance=h,p}function dr(){function n(n,u){var i=Math.sin(u*=Aa),o=Math.cos(u),a=ua((n*=Aa)-t),c=Math.cos(a);Dc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Pc.point=function(u,i){t=u*Aa,e=Math.sin(i*=Aa),r=Math.cos(i),Pc.point=n},Pc.lineEnd=function(){Pc.point=Pc.lineEnd=v}}function mr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function yr(n,t){function e(n,t){o>0?-Sa+ka>t&&(t=-Sa+ka):t>Sa-ka&&(t=Sa-ka);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(ba/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Sa]},e):Mr}function xr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ua(u)<ka?rr:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function Mr(n,t){return[n,Math.log(Math.tan(ba/4+t/2))]}function _r(n){var t,e=nr(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=ba*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function br(n,t){return[Math.log(Math.tan(ba/4+t/2)),-n]}function wr(n){return n[0]}function Sr(n){return n[1]}function kr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Er(n,t){return n[0]-t[0]||n[1]-t[1]}function Ar(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Cr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Nr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function zr(){Gr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Bc.pop()||new zr;return t.site=n,t}function Tr(n){Yr(n),Vc.remove(n),Bc.push(n),Gr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&ua(e-c.circle.x)<ka&&ua(r-c.circle.cy)<ka;)i=c.P,a.unshift(c),Tr(c),c=i;a.unshift(c),Yr(c);for(var s=o;s.circle&&ua(e-s.circle.x)<ka&&ua(r-s.circle.cy)<ka;)o=s.N,a.push(s),Tr(s),s=o;a.push(s),Yr(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],Br(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Xr(c.site,s.site,null,u),Or(c),Or(s)}function Rr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Vc._;a;)if(r=Dr(a,o)-i,r>ka)a=a.L;else{if(u=i-Pr(a,o),!(u>ka)){r>-ka?(t=a.P,e=a):u>-ka?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if(Vc.insert(t,c),t||e){if(t===e)return Yr(t),e=Lr(t.site),Vc.insert(c,e),c.edge=e.edge=Xr(t.site,c.site),Or(t),Or(e),void 0;if(!e)return c.edge=Xr(t.site,c.site),void 0;Yr(t),Yr(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Br(e.edge,s,p,M),c.edge=Xr(s,n,null,M),e.edge=Xr(n,p,null,M),Or(t),Or(e)}}function Dr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Pr(n,t){var e=n.N;if(e)return Dr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ur(n){this.site=n,this.edges=[]}function jr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Zc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(ua(r-t)>ka||ua(u-e)>ka)&&(a.splice(o,0,new Wr($r(i.site,l,ua(r-f)<ka&&p-u>ka?{x:f,y:ua(t-f)<ka?e:p}:ua(u-p)<ka&&h-r>ka?{x:ua(e-p)<ka?t:h,y:p}:ua(r-h)<ka&&u-g>ka?{x:h,y:ua(t-h)<ka?e:g}:ua(u-g)<ka&&r-f>ka?{x:ua(e-g)<ka?t:f,y:g}:null),i.site,null)),++c)}function Hr(n,t){return t.angle-n.angle}function Fr(){Gr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Or(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-Ea)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Wc.pop()||new Fr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=$c._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}$c.insert(y,m),y||(Xc=m)}}}}function Yr(n){var t=n.circle;t&&(t.P||(Xc=t.N),$c.remove(t),Wc.push(t),Gr(t),n.circle=null)}function Ir(n){for(var t,e=Ic,r=Pe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Zr(t,n)||!r(t)||ua(t.a.x-t.b.x)<ka&&ua(t.a.y-t.b.y)<ka)&&(t.a=t.b=null,e.splice(u,1))}function Zr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Vr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Xr(n,t,e,r){var u=new Vr(n,t);return Ic.push(u),e&&Br(u,n,t,e),r&&Br(u,t,n,r),Zc[n.i].edges.push(new Wr(u,n,t)),Zc[t.i].edges.push(new Wr(u,t,n)),u}function $r(n,t,e){var r=new Vr(n,null);return r.a=t,r.b=e,Ic.push(r),r}function Br(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Wr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Jr(){this._=null}function Gr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Kr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Qr(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function nu(n){for(;n.L;)n=n.L;return n}function tu(n,t){var e,r,u,i=n.sort(eu).pop();for(Ic=[],Zc=new Array(n.length),Vc=new Jr,$c=new Jr;;)if(u=Xc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Zc[i.i]=new Ur(i),Rr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;qr(u.arc)}t&&(Ir(t),jr(t));var o={cells:Zc,edges:Ic};return Vc=$c=Ic=Zc=null,o}function eu(n,t){return t.y-n.y||t.x-n.x}function ru(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function uu(n){return n.x}function iu(n){return n.y}function ou(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function au(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&au(n,c[0],e,r,o,a),c[1]&&au(n,c[1],o,r,u,a),c[2]&&au(n,c[2],e,a,o,i),c[3]&&au(n,c[3],o,a,u,i)}}function cu(n,t){n=Zo.rgb(n),t=Zo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+dt(Math.round(e+i*n))+dt(Math.round(r+o*n))+dt(Math.round(u+a*n))}}function su(n,t){var e,r={},u={};for(e in n)e in t?r[e]=hu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function lu(n,t){return t-=n=+n,function(e){return n+t*e}}function fu(n,t){var e,r,u,i=Gc.lastIndex=Kc.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=Gc.exec(n))&&(r=Kc.exec(t));)(u=r.index)>i&&(u=t.substring(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:lu(e,r)})),i=Kc.lastIndex;return i<t.length&&(u=t.substring(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function hu(n,t){for(var e,r=Zo.interpolators.length;--r>=0&&!(e=Zo.interpolators[r](n,t)););return e}function gu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(hu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function pu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function vu(n){return function(t){return 1-n(1-t)}}function du(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function mu(n){return n*n}function yu(n){return n*n*n}function xu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Mu(n){return function(t){return Math.pow(t,n)}}function _u(n){return 1-Math.cos(n*Sa)}function bu(n){return Math.pow(2,10*(n-1))}function wu(n){return 1-Math.sqrt(1-n*n)}function Su(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/wa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*wa/t)}}function ku(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Eu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Au(n,t){n=Zo.hcl(n),t=Zo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Zo.hsl(n),t=Zo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Zo.lab(n),t=Zo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(Ru(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ca,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ca:0}function Tu(n,t){return n[0]*t[0]+n[1]*t[1]}function qu(n){var t=Math.sqrt(Tu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ru(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Du(n,t){var e,r=[],u=[],i=Zo.transform(n),o=Zo.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:lu(a[0],c[0])},{i:3,x:lu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:lu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:lu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:lu(g[0],p[0])},{i:e-2,x:lu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Pu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Uu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function ju(n){for(var t=n.source,e=n.target,r=Fu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Hu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Fu(n,t){if(n===t)return n;for(var e=Hu(n),r=Hu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Ou(n){n.fixed|=2}function Yu(n){n.fixed&=-7}function Iu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Zu(n){n.fixed&=-5}function Vu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Vu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Xu(n,t){return Zo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Ku,n}function $u(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Bu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Wu(n){return n.children}function Ju(n){return n.value}function Gu(n,t){return t.value-n.value}function Ku(n){return Zo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function Qu(n){return n.x}function ni(n){return n.y}function ti(n,t,e){n.y0=t,n.y=e}function ei(n){return Zo.range(n.length)}function ri(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ui(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ii(n){return n.reduce(oi,0)}function oi(n,t){return n+t[1]}function ai(n,t){return ci(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ci(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Zo.min(n),Zo.max(n)]}function li(n,t){return n.value-t.value}function fi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function hi(n,t){n._pack_next=t,t._pack_prev=n}function gi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function pi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(vi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],yi(r,u,i),t(i),fi(r,i),r._pack_prev=i,fi(i,u),u=r._pack_next,o=3;s>o;o++){yi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(gi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!gi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?hi(r,u=a):hi(r=c,u),o--):(fi(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(di)}}function vi(n){n._pack_next=n._pack_prev=n}function di(n){delete n._pack_next,delete n._pack_prev}function mi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)mi(u[i],t,e,r)}function yi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function xi(n,t){return n.parent==t.parent?1:2}function Mi(n){var t=n.children;return t.length?t[0]:n.t}function _i(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function bi(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function wi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Si(n,t,e){return n.a.parent===t.parent?n.a:e}function ki(n){return 1+Zo.max(n,function(n){return n.y})}function Ei(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ai(n){var t=n.children;return t&&t.length?Ai(t[0]):n}function Ci(n){var t,e=n.children;return e&&(t=e.length)?Ci(e[t-1]):n}function Ni(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function zi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Li(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ti(n){return n.rangeExtent?n.rangeExtent():Li(n.range())}function qi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ri(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Di(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ss}function Pi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Zo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ui(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Pi:qi,c=r?Uu:Pu;return o=u(n,t,c,e),a=u(t,n,c,hu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(zu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Oi(n,t)},i.tickFormat=function(t,e){return Yi(n,t,e)},i.nice=function(t){return Hi(n,t),u()},i.copy=function(){return Ui(n,t,e,r)},u()}function ji(n,t){return Zo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Hi(n,t){return Ri(n,Di(Fi(n,t)[2]))}function Fi(n,t){null==t&&(t=10);var e=Li(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Oi(n,t){return Zo.range.apply(Zo,Fi(n,t))}function Yi(n,t,e){var r=Fi(n,t);if(e){var u=Ga.exec(e);if(u.shift(),"s"===u[8]){var i=Zo.formatPrefix(Math.max(ua(r[0]),ua(r[1])));return u[7]||(u[7]="."+Ii(i.scale(r[2]))),u[8]="f",e=Zo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Zi(u[8],r)),e=u.join("")}else e=",."+Ii(r[2])+"f";return Zo.format(e)}function Ii(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Zi(n,t){var e=Ii(t[2]);return n in ls?Math.abs(e-Ii(Math.max(ua(t[0]),ua(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Vi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ri(r.map(u),e?Math:hs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Li(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return fs;arguments.length<2?t=fs:"function"!=typeof t&&(t=Zo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Vi(n.copy(),t,e,r)},ji(o,n)}function Xi(n,t,e){function r(t){return n(u(t))}var u=$i(t),i=$i(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Oi(e,n)},r.tickFormat=function(n,t){return Yi(e,n,t)},r.nice=function(n){return r.domain(Hi(e,n))},r.exponent=function(o){return arguments.length?(u=$i(t=o),i=$i(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Xi(n.copy(),t,e)},ji(r,n)}function $i(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Bi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Zo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+s)/2:c+l*o/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-o+2*c);return i=r(l+h*c,h),s&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-o+2*c)),g=f-l-(n.length-o)*h;return i=r(l+Math.round(g/2),h),s&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return Li(t.a[0])},e.copy=function(){return Bi(n,t)},e.domain(n)}function Wi(e,r){function u(){var n=0,t=r.length;for(o=[];++n<t;)o[n-1]=Zo.quantile(e,n/t);return i}function i(n){return isNaN(n=+n)?void 0:r[Zo.bisect(o,n)]}var o;return i.domain=function(r){return arguments.length?(e=r.filter(t).sort(n),u()):e},i.range=function(n){return arguments.length?(r=n,u()):r},i.quantiles=function(){return o},i.invertExtent=function(n){return n=r.indexOf(n),0>n?[0/0,0/0]:[n>0?o[n-1]:e[0],n<o.length?o[n]:e[e.length-1]]},i.copy=function(){return Wi(e,r)},u()}function Ji(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ji(n,t,e)},u()}function Gi(n,t){function e(e){return e>=e?t[Zo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Gi(n,t)},e}function Ki(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Oi(n,t)},t.tickFormat=function(t,e){return Yi(n,t,e)},t.copy=function(){return Ki(n)},t}function Qi(n){return n.innerRadius}function no(n){return n.outerRadius}function to(n){return n.startAngle}function eo(n){return n.endAngle}function ro(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=wr,r=Sr,u=we,i=uo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=xs.get(n)||uo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function uo(n){return n.join("L")}function io(n){return uo(n)+"Z"}function oo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function so(n,t){return n.length<4?uo(n):n[1]+ho(n.slice(1,n.length-1),go(n,t))}function lo(n,t){return n.length<3?uo(n):n[0]+ho((n.push(n[0]),n),go([n[n.length-2]].concat(n,[n[1]]),t))}function fo(n,t){return n.length<3?uo(n):n[0]+ho(n,go(n,t))}function ho(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return uo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function go(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function po(n){if(n.length<3)return uo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",xo(bs,o),",",xo(bs,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Mo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function vo(n){if(n.length<4)return uo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(xo(bs,i)+","+xo(bs,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),Mo(e,i,o);return e.join("")}function mo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[xo(bs,o),",",xo(bs,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Mo(t,o,a);return t.join("")}function yo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return po(n)}function xo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Mo(n,t,e){n.push("C",xo(Ms,t),",",xo(Ms,e),",",xo(_s,t),",",xo(_s,e),",",xo(bs,t),",",xo(bs,e))}function _o(n,t){return(t[1]-n[1])/(t[0]-n[0])}function bo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=_o(u,i);++t<e;)r[t]=(o+(o=_o(u=i,i=n[t+1])))/2;return r[t]=o,r}function wo(n){for(var t,e,r,u,i=[],o=bo(n),a=-1,c=n.length-1;++a<c;)t=_o(n[a],n[a+1]),ua(t)<ka?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function So(n){return n.length<3?uo(n):n[0]+ho(n,wo(n))}function ko(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+ms,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Eo(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=bt(e),_=bt(u),b=e===r?function(){return g}:bt(r),w=u===i?function(){return p}:bt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=wr,r=wr,u=0,i=Sr,o=we,a=uo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=xs.get(n)||uo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Ao(n){return n.radius}function Co(n){return[n.x,n.y]}function No(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+ms;return[e*Math.cos(r),e*Math.sin(r)]}}function zo(){return 64}function Lo(){return"circle"}function To(n){var t=Math.sqrt(n/ba);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function qo(n,t){return sa(n,Cs),n.id=t,n}function Ro(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Do(n){return null==n&&(n=""),function(){this.textContent=n}}function Po(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Zo.timer(function(r){function o(r){return u.active>e?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Zo.timer(function(){return p.c=c(r||1)?we:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a); -return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ba,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function Uo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function jo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Ho(n){return n.toISOString()}function Fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Zo.bisect(Us,u);return i==Us.length?[t.year,Fi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Us[i-1]<Us[i]/u?i-1:i]:[Fs,Fi(n,e)[2]]}return r.invert=function(t){return Oo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Oo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Oo(+e+1),t).length}var i=r.domain(),o=Li(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Ri(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Oo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Oo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Li(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Oo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Fo(n.copy(),t,e)},ji(r,n)}function Oo(n){return new Date(n)}function Yo(n){return JSON.parse(n.responseText)}function Io(n){var t=$o.createRange();return t.selectNode($o.body),t.createContextualFragment(n.responseText)}var Zo={version:"3.4.11"};Date.now||(Date.now=function(){return+new Date});var Vo=[].slice,Xo=function(n){return Vo.call(n)},$o=document,Bo=$o.documentElement,Wo=window;try{Xo(Bo.childNodes)[0].nodeType}catch(Jo){Xo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{$o.createElement("div").style.setProperty("opacity",0,"")}catch(Go){var Ko=Wo.Element.prototype,Qo=Ko.setAttribute,na=Ko.setAttributeNS,ta=Wo.CSSStyleDeclaration.prototype,ea=ta.setProperty;Ko.setAttribute=function(n,t){Qo.call(this,n,t+"")},Ko.setAttributeNS=function(n,t,e){na.call(this,n,t,e+"")},ta.setProperty=function(n,t,e){ea.call(this,n,t+"",e)}}Zo.ascending=n,Zo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Zo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Zo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Zo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Zo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Zo.mean=function(n,e){var r,u=0,i=n.length,o=-1,a=i;if(1===arguments.length)for(;++o<i;)t(r=n[o])?u+=r:--a;else for(;++o<i;)t(r=e.call(n,n[o],o))?u+=r:--a;return a?u/a:void 0},Zo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Zo.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Zo.quantile(e.sort(n),.5):void 0};var ra=e(n);Zo.bisectLeft=ra.left,Zo.bisect=Zo.bisectRight=ra.right,Zo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Zo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Zo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Zo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Zo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Zo.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Zo.transpose=function(n){return Zo.zip.apply(Zo,n)},Zo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Zo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Zo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Zo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ua=Math.abs;Zo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ua(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Zo.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[ia+n]},set:function(n,t){return this[ia+n]=t},remove:c,keys:s,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1),this[t])}});var ia="\x00",oa=ia.charCodeAt(0);Zo.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Zo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Zo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ia+n]=!0,n},remove:function(n){return n=ia+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1))}}),Zo.behavior={},Zo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var aa=["webkit","ms","moz","Moz","o","O"];Zo.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Zo.event=null,Zo.requote=function(n){return n.replace(ca,"\\$&")};var ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},la=function(n,t){return t.querySelector(n)},fa=function(n,t){return t.querySelectorAll(n)},ha=Bo.matches||Bo[p(Bo,"matchesSelector")],ga=function(n,t){return ha.call(n,t)};"function"==typeof Sizzle&&(la=function(n,t){return Sizzle(n,t)[0]||null},fa=Sizzle,ga=Sizzle.matchesSelector),Zo.selection=function(){return ma};var pa=Zo.selection.prototype=[];pa.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},pa.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Xo(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var va={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Zo.ns={prefix:va,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),va.hasOwnProperty(e)?{space:va[e],local:n}:n}},pa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Zo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},pa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(C(t,n[t]));return this}return this.each(C(n,t))},pa.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Wo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},pa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},pa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},pa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},pa.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},pa.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},pa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},pa.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=q(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=q(i);for(;f>r;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),s=_([]),l=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return s.enter=function(){return c},s.exit=function(){return l},s},pa.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},pa.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},pa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},pa.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},pa.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},pa.call=function(n){var t=Xo(arguments);return n.apply(t[0]=this,t),this},pa.empty=function(){return!this.node()},pa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},pa.size=function(){var n=0;return this.each(function(){++n}),n};var da=[];Zo.selection.enter=U,Zo.selection.enter.prototype=da,da.append=pa.append,da.empty=pa.empty,da.node=pa.node,da.call=pa.call,da.size=pa.size,da.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return _(o)},da.insert=function(n,t){return arguments.length<2&&(t=j(this)),pa.insert.call(this,n,t)},pa.transition=function(){for(var n,t,e=Ss||++Ns,r=[],u=ks||{time:Date.now(),ease:xu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&Po(t,c,e,u),n.push(t)}return qo(r,e)},pa.interrupt=function(){return this.each(H)},Zo.select=function(n){var t=["string"==typeof n?la(n,$o):n];return t.parentNode=Bo,_([t])},Zo.selectAll=function(n){var t=Xo("string"==typeof n?fa(n,$o):n);return t.parentNode=Bo,_([t])};var ma=Zo.select(Bo);pa.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ya=Zo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ya.forEach(function(n){"on"+n in $o&&ya.remove(n)});var xa="onselectstart"in $o?null:p(Bo.style,"userSelect"),Ma=0;Zo.mouse=function(n){return Z(n,x())};var _a=/WebKit/.test(Wo.navigator.userAgent)?-1:0;Zo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Xo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Zo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Zo.event.target===f),g({type:"dragend"}))}var s,l=this,f=Zo.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Zo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Zo.mouse,$,"mousemove","mouseup"),i=t(V,Zo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Zo.rebind(n,e,"on")};var ba=Math.PI,wa=2*ba,Sa=ba/2,ka=1e-6,Ea=ka*ka,Aa=ba/180,Ca=180/ba,Na=Math.SQRT2,za=2,La=4;Zo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(za*h)*(e*nt(Na*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Na*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Na*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+La*f)/(2*i*za*h),p=(c*c-i*i-La*f)/(2*c*za*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Na;return e.duration=1e3*y,e},Zo.behavior.zoom=function(){function n(n){n.on(A,s).on(Ra+".zoom",f).on("dblclick.zoom",h).on(z,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Zo.mouse(r),h),a(s)}function e(){f.on(C,null).on(N,null),g(l&&Zo.event.target===i),c(s)}var r=this,i=Zo.event.target,s=L.of(r,arguments),l=0,f=Zo.select(Wo).on(C,n).on(N,e),h=t(Zo.mouse(r)),g=I();H.call(r),o(s)}function l(){function n(){var n=Zo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Zo.event.target;Zo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Zo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var s=n(),l=Date.now();if(1===s.length){if(500>l-m){var h=s[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=l}else if(s.length>1){var h=s[0],x=s[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Zo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Zo.event.touches.length){for(var t=Zo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Zo.selectAll(b).on(x,null),w.on(A,s).on(z,l),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Zo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Zo.select(g).on(A,null).on(z,e),k=I();H.call(g),e(),o(p)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Zo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*Ta())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Zo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Zo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=qa,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Ss?Zo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Zo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?qa:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Zo.rebind(n,L,"on")};var Ta,qa=[0,1/0],Ra="onwheel"in $o?(Ta=function(){return-Zo.event.deltaY*(Zo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in $o?(Ta=function(){return Zo.event.wheelDelta},"mousewheel"):(Ta=function(){return-Zo.event.detail},"MozMousePixelScroll");Zo.color=et,et.prototype.toString=function(){return this.rgb()+""},Zo.hsl=rt;var Da=rt.prototype=new et;Da.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Da.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Da.rgb=function(){return ut(this.h,this.s,this.l)},Zo.hcl=it;var Pa=it.prototype=new et;Pa.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+Ua*(arguments.length?n:1)))},Pa.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-Ua*(arguments.length?n:1)))},Pa.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Zo.lab=at;var Ua=18,ja=.95047,Ha=1,Fa=1.08883,Oa=at.prototype=new et;Oa.brighter=function(n){return new at(Math.min(100,this.l+Ua*(arguments.length?n:1)),this.a,this.b)},Oa.darker=function(n){return new at(Math.max(0,this.l-Ua*(arguments.length?n:1)),this.a,this.b)},Oa.rgb=function(){return ct(this.l,this.a,this.b)},Zo.rgb=gt;var Ya=gt.prototype=new et;Ya.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ya.hsl=function(){return yt(this.r,this.g,this.b)},Ya.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Ia=Zo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ia.forEach(function(n,t){Ia.set(n,pt(t))}),Zo.functor=bt,Zo.xhr=St(wt),Zo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Zo.csv=Zo.dsv(",","text/csv"),Zo.tsv=Zo.dsv(" ","text/tab-separated-values"),Zo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Za,Va,Xa,$a,Ba,Wa=Wo[p(Wo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Zo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Va?Va.n=i:Za=i,Va=i,Xa||($a=clearTimeout($a),Xa=1,Wa(At))},Zo.timer.flush=function(){Ct(),Nt()},Zo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ja=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Zo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Zo.round(n,zt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ja[8+e/3]};var Ga=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Ka=Zo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Zo.round(n,zt(n,t))).toFixed(Math.max(0,Math.min(20,zt(n*(1+1e-15),t))))}}),Qa=Zo.time={},nc=Date;Rt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){tc.setUTCDate.apply(this._,arguments)},setDay:function(){tc.setUTCDay.apply(this._,arguments)},setFullYear:function(){tc.setUTCFullYear.apply(this._,arguments)},setHours:function(){tc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){tc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){tc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){tc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){tc.setUTCSeconds.apply(this._,arguments)},setTime:function(){tc.setTime.apply(this._,arguments)}};var tc=Date.prototype;Qa.year=Dt(function(n){return n=Qa.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Qa.years=Qa.year.range,Qa.years.utc=Qa.year.utc.range,Qa.day=Dt(function(n){var t=new nc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Qa.days=Qa.day.range,Qa.days.utc=Qa.day.utc.range,Qa.dayOfYear=function(n){var t=Qa.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=Qa[n]=Dt(function(n){return(n=Qa.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Qa[n+"s"]=e.range,Qa[n+"s"].utc=e.utc.range,Qa[n+"OfYear"]=function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)}}),Qa.week=Qa.sunday,Qa.weeks=Qa.sunday.range,Qa.weeks.utc=Qa.sunday.utc.range,Qa.weekOfYear=Qa.sundayOfYear;var ec={"-":"",_:" ",0:"0"},rc=/^\s*\d+/,uc=/^%/;Zo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Ut(n)}};var ic=Zo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Zo.format=ic.numberFormat,Zo.geo={},ue.prototype={s:0,t:0,add:function(n){ie(n,this.t,oc),ie(oc.s,this.s,this),this.s?this.t+=oc.t:this.s=oc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var oc=new ue;Zo.geo.stream=function(n,t){n&&ac.hasOwnProperty(n.type)?ac[n.type](n,t):oe(n,t)};var ac={Feature:function(n,t){oe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)oe(e[r].geometry,t)}},cc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){ae(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ae(e[r],t,0)},Polygon:function(n,t){ce(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ce(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)oe(e[r],t)}};Zo.geo.area=function(n){return sc=0,Zo.geo.stream(n,fc),sc};var sc,lc=new ue,fc={sphere:function(){sc+=4*ba},point:v,lineStart:v,lineEnd:v,polygonStart:function(){lc.reset(),fc.lineStart=se},polygonEnd:function(){var n=2*lc;sc+=0>n?4*ba+n:n,fc.lineStart=fc.lineEnd=fc.point=v}};Zo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=le([t*Aa,e*Aa]);if(m){var u=he(m,r),i=[u[1],-u[0],0],o=he(i,u);ve(o),o=de(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ca*s,d=ua(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ca;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ca;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ua(r)>180?r+(r>0?360:-360):r}else v=n,d=e;fc.point(n,e),t(n,e)}function i(){fc.lineStart()}function o(){u(v,d),fc.lineEnd(),ua(y)>ka&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,fc.polygonStart()},polygonEnd:function(){fc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>lc?(l=-(h=180),f=-(g=90)):y>ka?g=90:-ka>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Zo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e); -for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Zo.geo.centroid=function(n){hc=gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,wc);var t=Mc,e=_c,r=bc,u=t*t+e*e+r*r;return Ea>u&&(t=mc,e=yc,r=xc,ka>gc&&(t=pc,e=vc,r=dc),u=t*t+e*e+r*r,Ea>u)?[0/0,0/0]:[Math.atan2(e,t)*Ca,G(r/Math.sqrt(u))*Ca]};var hc,gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc={sphere:v,point:ye,lineStart:Me,lineEnd:_e,polygonStart:function(){wc.lineStart=be},polygonEnd:function(){wc.lineStart=Me}},Sc=Ae(we,Te,Re,[-ba,-ba/2]),kc=1e9;Zo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ue(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Zo.geo.conicEqualArea=function(){return He(Fe)}).raw=Fe,Zo.geo.albers=function(){return Zo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Zo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Zo.geo.albers(),o=Zo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Zo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+ka,f+.12*s+ka],[l-.214*s-ka,f+.234*s-ka]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+ka,f+.166*s+ka],[l-.115*s-ka,f+.234*s-ka]]).stream(c).point,n},n.scale(1070)};var Ec,Ac,Cc,Nc,zc,Lc,Tc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Ac=0,Tc.lineStart=Oe},polygonEnd:function(){Tc.lineStart=Tc.lineEnd=Tc.point=v,Ec+=ua(Ac/2)}},qc={point:Ye,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Rc={point:Ve,lineStart:Xe,lineEnd:$e,polygonStart:function(){Rc.lineStart=Be},polygonEnd:function(){Rc.point=Ve,Rc.lineStart=Xe,Rc.lineEnd=$e}};Zo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Zo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ec=0,Zo.geo.stream(n,u(Tc)),Ec},n.centroid=function(n){return pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,u(Rc)),bc?[Mc/bc,_c/bc]:xc?[mc/xc,yc/xc]:dc?[pc/dc,vc/dc]:[0/0,0/0]},n.bounds=function(n){return zc=Lc=-(Cc=Nc=1/0),Zo.geo.stream(n,u(qc)),[[Cc,Nc],[zc,Lc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ge(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ie:new We(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Zo.geo.albersUsa()).context(null)},Zo.geo.transform=function(n){return{stream:function(t){var e=new Ke(t);for(var r in n)e[r]=n[r];return e}}},Ke.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Zo.geo.projection=nr,Zo.geo.projectionMutator=tr,(Zo.geo.equirectangular=function(){return nr(rr)}).raw=rr.invert=rr,Zo.geo.rotation=function(n){function t(t){return t=n(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t}return n=ir(n[0]%360*Aa,n[1]*Aa,n.length>2?n[2]*Aa:0),t.invert=function(t){return t=n.invert(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t},t},ur.invert=rr,Zo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ir(-n[0]*Aa,-n[1]*Aa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ca,n[1]*=Ca}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Aa,u*Aa),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Aa,(u=+r)*Aa),n):u},n.angle(90)},Zo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Aa,u=n[1]*Aa,i=t[1]*Aa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Zo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Zo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Zo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Zo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ua(n%d)>ka}).map(l)).concat(Zo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ua(n%m)>ka}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=fr(a,o,90),f=hr(r,e,y),h=fr(s,c,90),g=hr(i,u,y),n):y},n.majorExtent([[-180,-90+ka],[180,90-ka]]).minorExtent([[-180,-80-ka],[180,80+ka]])},Zo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=gr,u=pr;return n.distance=function(){return Zo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Zo.geo.interpolate=function(n,t){return vr(n[0]*Aa,n[1]*Aa,t[0]*Aa,t[1]*Aa)},Zo.geo.length=function(n){return Dc=0,Zo.geo.stream(n,Pc),Dc};var Dc,Pc={sphere:v,point:v,lineStart:dr,lineEnd:v,polygonStart:v,polygonEnd:v},Uc=mr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Zo.geo.azimuthalEqualArea=function(){return nr(Uc)}).raw=Uc;var jc=mr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Zo.geo.azimuthalEquidistant=function(){return nr(jc)}).raw=jc,(Zo.geo.conicConformal=function(){return He(yr)}).raw=yr,(Zo.geo.conicEquidistant=function(){return He(xr)}).raw=xr;var Hc=mr(function(n){return 1/n},Math.atan);(Zo.geo.gnomonic=function(){return nr(Hc)}).raw=Hc,Mr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Sa]},(Zo.geo.mercator=function(){return _r(Mr)}).raw=Mr;var Fc=mr(function(){return 1},Math.asin);(Zo.geo.orthographic=function(){return nr(Fc)}).raw=Fc;var Oc=mr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Zo.geo.stereographic=function(){return nr(Oc)}).raw=Oc,br.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Sa]},(Zo.geo.transverseMercator=function(){var n=_r(br),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=br,Zo.geom={},Zo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Er),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=kr(a),l=kr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=wr,r=Sr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Zo.geom.polygon=function(n){return sa(n,Yc),n};var Yc=Zo.geom.polygon.prototype=[];Yc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Yc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Yc.clip=function(n){for(var t,e,r,u,i,o,a=Nr(n),c=-1,s=this.length-Nr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Ar(o,l,u)?(Ar(i,l,u)||n.push(Cr(i,o,l,u)),n.push(o)):Ar(i,l,u)&&n.push(Cr(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Ic,Zc,Vc,Xc,$c,Bc=[],Wc=[];Ur.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Hr),t.length},Wr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Jr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=nu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Kr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Qr(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(Qr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Kr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?nu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Kr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,Qr(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Kr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,Qr(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Kr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,Qr(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Zo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return tu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/ka)*ka,y:Math.round(o(n,t)/ka)*ka,i:t}})}var r=wr,u=Sr,i=r,o=u,a=Jc;return n?t(n):(t.links=function(n){return tu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return tu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Hr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&ru(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=bt(r=n),t):r},t.y=function(n){return arguments.length?(o=bt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Jc:n,t):a===Jc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Jc?null:a&&a[1]},t)};var Jc=[[-1e6,-1e6],[1e6,1e6]];Zo.geom.delaunay=function(n){return Zo.geom.voronoi().triangles(n)},Zo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(ua(c-e)+ua(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=ou()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=ou();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){au(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=wr,c=Sr;return(o=arguments.length)?(a=uu,c=iu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Zo.interpolateRgb=cu,Zo.interpolateObject=su,Zo.interpolateNumber=lu,Zo.interpolateString=fu;var Gc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kc=new RegExp(Gc.source,"g");Zo.interpolate=hu,Zo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ia.has(t)||/^(#|rgb\(|hsl\()/.test(t)?cu:fu:t instanceof et?cu:Array.isArray(t)?gu:"object"===e&&isNaN(t)?su:lu)(n,t)}],Zo.interpolateArray=gu;var Qc=function(){return wt},ns=Zo.map({linear:Qc,poly:Mu,quad:function(){return mu},cubic:function(){return yu},sin:function(){return _u},exp:function(){return bu},circle:function(){return wu},elastic:Su,back:ku,bounce:function(){return Eu}}),ts=Zo.map({"in":wt,out:vu,"in-out":du,"out-in":function(n){return du(vu(n))}});Zo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ns.get(e)||Qc,r=ts.get(r)||wt,pu(r(e.apply(null,Vo.call(arguments,1))))},Zo.interpolateHcl=Au,Zo.interpolateHsl=Cu,Zo.interpolateLab=Nu,Zo.interpolateRound=zu,Zo.transform=function(n){var t=$o.createElementNS(Zo.ns.prefix.svg,"g");return(Zo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:es)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var es={a:1,b:0,c:0,d:1,e:0,f:0};Zo.interpolateTransform=Du,Zo.layout={},Zo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(ju(n[e]));return t}},Zo.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Zo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Zo.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(wa-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Zo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Zo.event.x,n.py=Zo.event.y,a.resume()}var e,r,u,i,o,a={},c=Zo.dispatch("start","tick","end"),s=[1,1],l=.9,f=rs,h=us,g=-30,p=is,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Vu(t=Zo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Zo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Zo.behavior.drag().origin(wt).on("dragstart.force",Ou).on("drag.force",t).on("dragend.force",Yu)),arguments.length?(this.on("mouseover.force",Iu).on("mouseout.force",Zu).call(e),void 0):e},Zo.rebind(a,c,"on")};var rs=20,us=1,is=1/0;Zo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(s=e.call(n,i,i.depth))&&(c=s.length)){for(var c,s,l;--c>=0;)o.push(l=s[c]),l.parent=i,l.depth=i.depth+1;r&&(i.value=0),i.children=s}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Bu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Gu,e=Wu,r=Ju;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&($u(t,function(n){n.children&&(n.value=0)}),Bu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Zo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Zo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Xu(e,r)},Zo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Zo.sum(o),s=Zo.range(i.length);null!=e&&s.sort(e===os?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=os,r=0,u=wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var os={};Zo.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Zo.permute(s,f),l=Zo.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=wt,e=ei,r=ri,u=ti,i=Qu,o=ni;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:as.get(t)||ei,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:cs.get(t)||ri,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var as=Zo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ui),i=n.map(ii),o=Zo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Zo.range(n.length).reverse()},"default":ei}),cs=Zo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ri});Zo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Zo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ai;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ci(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Zo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Bu(a,function(n){n.r=+l(n.value)}),Bu(a,pi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;Bu(a,function(n){n.r+=f}),Bu(a,pi),Bu(a,function(n){n.r-=f})}return mi(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Zo.layout.hierarchy().sort(li),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Xu(n,e)},Zo.layout.tree=function(){function n(n,u){var l=o.call(this,n,u),f=l[0],h=t(f);if(Bu(h,e),h.parent.m=-h.z,$u(h,r),s)$u(f,i);else{var g=f,p=f,v=f;$u(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);$u(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return l}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){wi(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],s=u.m,l=i.m,f=o.m,h=c.m;o=_i(o),u=Mi(u),o&&u;)c=Mi(c),i=_i(i),i.a=n,r=o.z+f-u.z-s+a(o._,u._),r>0&&(bi(Si(o,n,e),n,r),s+=r,l+=r),f+=o.m,s+=u.m,h+=c.m,l+=i.m;o&&!_i(i)&&(i.t=o,i.m+=f-l),u&&!Mi(c)&&(c.t=u,c.m+=s-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Zo.layout.hierarchy().sort(null).value(null),a=xi,c=[1,1],s=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(s=null==(c=t)?i:null,n):s?null:c},n.nodeSize=function(t){return arguments.length?(s=null==(c=t)?null:i,n):s?c:null},Xu(n,o)},Zo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;Bu(c,function(n){var t=n.children;t&&t.length?(n.x=Ei(t),n.y=ki(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ai(c),f=Ci(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return Bu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Zo.layout.hierarchy().sort(null).value(null),e=xi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Xu(n,t)},Zo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Zo.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Ni,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ni(t):zi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return zi(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Ni:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Xu(i,a)},Zo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Zo.random.normal.apply(Zo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Zo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Zo.scale={};var ss={floor:wt,ceil:wt};Zo.scale.linear=function(){return Ui([0,1],[0,1],hu,!1)};var ls={s:1,g:1,p:1,r:1,e:1};Zo.scale.log=function(){return Vi(Zo.scale.linear().domain([0,1]),10,!0,[1,10])};var fs=Zo.format(".0e"),hs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Zo.scale.pow=function(){return Xi(Zo.scale.linear(),1,[0,1])},Zo.scale.sqrt=function(){return Zo.scale.pow().exponent(.5)},Zo.scale.ordinal=function(){return Bi([],{t:"range",a:[[]]})},Zo.scale.category10=function(){return Zo.scale.ordinal().range(gs)},Zo.scale.category20=function(){return Zo.scale.ordinal().range(ps)},Zo.scale.category20b=function(){return Zo.scale.ordinal().range(vs)},Zo.scale.category20c=function(){return Zo.scale.ordinal().range(ds)};var gs=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),ps=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),vs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Zo.scale.quantile=function(){return Wi([],[])},Zo.scale.quantize=function(){return Ji(0,1,[0,1])},Zo.scale.threshold=function(){return Gi([.5],[0,1])},Zo.scale.identity=function(){return Ki([0,1])},Zo.svg={},Zo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ms,a=u.apply(this,arguments)+ms,c=(o>a&&(c=o,o=a,a=c),a-o),s=ba>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a); -return c>=ys?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=Qi,e=no,r=to,u=eo;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ms;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ms=-Sa,ys=wa-ka;Zo.svg.line=function(){return ro(wt)};var xs=Zo.map({linear:uo,"linear-closed":io,step:oo,"step-before":ao,"step-after":co,basis:po,"basis-open":vo,"basis-closed":mo,bundle:yo,cardinal:fo,"cardinal-open":so,"cardinal-closed":lo,monotone:So});xs.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Ms=[0,2/3,1/3,0],_s=[0,1/3,2/3,0],bs=[0,1/6,2/3,1/6];Zo.svg.line.radial=function(){var n=ro(ko);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},ao.reverse=co,co.reverse=ao,Zo.svg.area=function(){return Eo(wt)},Zo.svg.area.radial=function(){var n=Eo(ko);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Zo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ms,l=s.call(n,u,r)+ms;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>ba)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=gr,o=pr,a=Ao,c=to,s=eo;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(s=bt(t),n):s},n},Zo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=gr,e=pr,r=Co;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Zo.svg.diagonal.radial=function(){var n=Zo.svg.diagonal(),t=Co,e=n.projection;return n.projection=function(n){return arguments.length?e(No(t=n)):t},n},Zo.svg.symbol=function(){function n(n,r){return(ws.get(t.call(this,n,r))||To)(e.call(this,n,r))}var t=Lo,e=zo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var ws=Zo.map({circle:To,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*As)),e=t*As;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Zo.svg.symbolTypes=ws.keys();var Ss,ks,Es=Math.sqrt(3),As=Math.tan(30*Aa),Cs=[],Ns=0;Cs.call=pa.call,Cs.empty=pa.empty,Cs.node=pa.node,Cs.size=pa.size,Zo.transition=function(n){return arguments.length?Ss?n.transition():n:ma.transition()},Zo.transition.prototype=Cs,Cs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),Po(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return qo(i,u)},Cs.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Po(u,g,o,i),t.push(u)}return qo(a,o)},Cs.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return qo(u,this.id)},Cs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Cs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Du:hu,a=Zo.ns.qualify(n);return Ro(this,"attr."+n,t,a.local?i:u)},Cs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Zo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Cs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Wo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=hu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Ro(this,"style."+n,t,u)},Cs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Wo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Cs.text=function(n){return Ro(this,"text",n,Do)},Cs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Cs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Zo.ease.apply(Zo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Cs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Cs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Cs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=ks,u=Ss;Ss=e,P(this,function(t,r,u){ks=t.__transition__[e],n.call(t,t.__data__,r,u)}),ks=r,Ss=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Zo.dispatch("start","end"))).on(n,t)});return this},Cs.transition=function(){for(var n,t,e,r,u=this.id,i=++Ns,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Po(e,s,i,r)),n.push(e)}return qo(o,i)},Zo.svg.axis=function(){function n(n){n.each(function(){var n,s=Zo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",ka),d=Zo.transition(p.exit()).style("opacity",ka).remove(),m=Zo.transition(p.order()).style("opacity",1),y=Ti(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Zo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Uo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Uo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=jo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=jo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Zo.scale.linear(),r=zs,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ls?t+"":zs,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var zs="bottom",Ls={top:1,right:1,bottom:1,left:1};Zo.svg.brush=function(){function n(i){i.each(function(){var i=Zo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Ts[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Zo.transition(i),h=Zo.transition(o);c&&(l=Ti(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ti(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Zo.event.keyCode&&(C||(x=null,z[0]-=l[1],z[1]-=f[1],C=2),y())}function p(){32==Zo.event.keyCode&&2==C&&(z[0]+=l[1],z[1]+=f[1],C=0,y())}function v(){var n=Zo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Zo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),z[0]=l[+(n[0]<x[0])],z[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=Ti(t),c=a[0],s=a[1],p=z[e],v=e?f:l,d=v[1]-v[0];return C&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Zo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Zo.select(Zo.event.target),w=a.of(_,arguments),S=Zo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=I(),z=Zo.mouse(_),L=Zo.select(Wo).on("keydown.brush",u).on("keyup.brush",p);if(Zo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=l[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[l[1-T]-z[0],f[1-q]-z[1]],z[0]=l[T],z[1]=f[q]}else Zo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Zo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=qs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ss?Zo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=gu(l,t.x),r=gu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=qs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=qs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Zo.rebind(n,a,"on")};var Ts={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},qs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Rs=Qa.format=ic.timeFormat,Ds=Rs.utc,Ps=Ds("%Y-%m-%dT%H:%M:%S.%LZ");Rs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ho:Ps,Ho.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Ho.toString=Ps.toString,Qa.second=Dt(function(n){return new nc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Qa.seconds=Qa.second.range,Qa.seconds.utc=Qa.second.utc.range,Qa.minute=Dt(function(n){return new nc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Qa.minutes=Qa.minute.range,Qa.minutes.utc=Qa.minute.utc.range,Qa.hour=Dt(function(n){var t=n.getTimezoneOffset()/60;return new nc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Qa.hours=Qa.hour.range,Qa.hours.utc=Qa.hour.utc.range,Qa.month=Dt(function(n){return n=Qa.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Qa.months=Qa.month.range,Qa.months.utc=Qa.month.utc.range;var Us=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],js=[[Qa.second,1],[Qa.second,5],[Qa.second,15],[Qa.second,30],[Qa.minute,1],[Qa.minute,5],[Qa.minute,15],[Qa.minute,30],[Qa.hour,1],[Qa.hour,3],[Qa.hour,6],[Qa.hour,12],[Qa.day,1],[Qa.day,2],[Qa.week,1],[Qa.month,1],[Qa.month,3],[Qa.year,1]],Hs=Rs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",we]]),Fs={range:function(n,t,e){return Zo.range(Math.ceil(n/e)*e,+t,e).map(Oo)},floor:wt,ceil:wt};js.year=Qa.year,Qa.scale=function(){return Fo(Zo.scale.linear(),js,Hs)};var Os=js.map(function(n){return[n[0].utc,n[1]]}),Ys=Ds.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",we]]);Os.year=Qa.year.utc,Qa.scale.utc=function(){return Fo(Zo.scale.linear(),Os,Ys)},Zo.text=St(function(n){return n.responseText}),Zo.json=function(n,t){return kt(n,"application/json",Yo,t)},Zo.html=function(n,t){return kt(n,"text/html",Io,t)},Zo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Zo):"object"==typeof module&&module.exports&&(module.exports=Zo),this.d3=Zo}(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/.bower.json b/platforms/android/assets/www/lib/es5-shim/.bower.json deleted file mode 100644 index 2841e33b..00000000 --- a/platforms/android/assets/www/lib/es5-shim/.bower.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/es5-shim" - }, - "homepage": "https://github.com/es-shims/es5-shim", - "authors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "tests" - ], - "_release": "3.1.1", - "_resolution": { - "type": "version", - "tag": "v3.1.1", - "commit": "f5ca40f6f49b7eb0abef39bb1c3a5b4f7ca176d5" - }, - "_source": "git://github.com/es-shims/es5-shim.git", - "_target": "~3.1.0", - "_originalSource": "es5-shim" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/CHANGES b/platforms/android/assets/www/lib/es5-shim/CHANGES deleted file mode 100644 index 2447cfc9..00000000 --- a/platforms/android/assets/www/lib/es5-shim/CHANGES +++ /dev/null @@ -1,124 +0,0 @@ -3.1.1 - - Update minified files (#231) - -3.1.0 - - Fix String#replace in Firefox up through 29 (#228) - -3.0.2 - - Fix `Function#bind` in IE 7 and 8 (#224, #225, #226) - -3.0.1 - - Version bump to ensure npm has newest minified assets - -3.0.0 - - es5-sham: fix `Object.getPrototypeOf` and `Object.getOwnPropertyDescriptor` for Opera Mini - - Better override noncompliant native ES5 methods: `Array#forEach`, `Array#map`, `Array#filter`, `Array#every`, `Array#some`, `Array#reduce`, `Date.parse`, `String#trim` - - Added spec-compliant shim for `parseInt` - - Ensure `Object.keys` handles more edge cases with `arguments` objects and boxed primitives - - Improve minification of builds - -2.3.0 - - parseInt is now properly shimmed in ES3 browsers to default the radix - - update URLs to point to the new organization - -2.2.0 - - Function.prototype.bind shim now reports correct length on a bound function - - fix node 0.6.x v8 bug in Array#forEach - - test improvements - -2.1.0 - - Object.create fixes - - tweaks to the Object.defineProperties shim - -2.0.0 - - Separate reliable shims from dubious shims (shams). - -1.2.10 - - Group-effort Style Cleanup - - Took a stab at fixing Object.defineProperty on IE8 without - bad side-effects. (@hax) - - Object.isExtensible no longer fakes it. (@xavierm) - - Date.prototype.toISOString no longer deals with partial - ISO dates, per spec (@kitcambridge) - - More (mostly from @bryanforbes) - -1.2.9 - - Corrections to toISOString by @kitcambridge - - Fixed three bugs in array methods revealed by Jasmine tests. - - Cleaned up Function.prototype.bind with more fixes and tests from - @bryanforbes. - -1.2.8 - - Actually fixed problems with Function.prototype.bind, and regressions - from 1.2.7 (@bryanforbes, @jdalton #36) - -1.2.7 - REGRESSED - - Fixed problems with Function.prototype.bind when called as a constructor. - (@jdalton #36) - -1.2.6 - - Revised Date.parse to match ES 5.1 (kitcambridge) - -1.2.5 - - Fixed a bug for padding it Date..toISOString (tadfisher issue #33) - -1.2.4 - - Fixed a descriptor bug in Object.defineProperty (raynos) - -1.2.3 - - Cleaned up RequireJS and <script> boilerplate - -1.2.2 - - Changed reduce to follow the letter of the spec with regard to having and - owning properties. - - Fixed a bug where RegExps pass as Functions in some engines in reduce. - -1.2.1 - - Adding few fixes to make jshint happy. - - Fix for issue #12, function expressions can cause scoping issues in IE. - - NPM will minify on install or when `npm run-script install` is executed. - - Adding .gitignore to avoid publishing dev dependencies. - -1.2.0 - - Making script loadable as AMD module. - - Adding `indexOf` to the list of safe shims. - -1.1.0 - - Added support for accessor properties where possible (which is all browsers - except IE). - - Stop exposing bound function's (that are returned by - `Function.prototype.bind`) internal properties (`bound, boundTo, boundArgs`) - as in some cases (when using facade objects for example) capabilities of the - enclosed functions will be leaked. - - `Object.create` now explicitly sets `__proto__` property to guarantee - correct behavior of `Object.getPrototypeOf`'s on all objects created using - `Object.create`. - - Switched to `===` from `==` where possible as it's slightly faster on older - browsers that are target of this lib. - - Added names to all anonymous functions to have a better stack traces. - -1.0.0 - - fixed Date.toISODate, using UTC accessors, as in - http://code.google.com/p/v8/source/browse/trunk/src/date.js?r=6120#986 - (arian) - -0.0.4 - - Revised Object.getPrototypeOf to work in more cases - in response to http://ejohn.org/blog/objectgetprototypeof/ - [issue #2] (fschaefer) - -0.0.3 - - Fixed typos in Object.keys (samsonjs) - -0.0.2 - Per kangax's recommendations: - - faster Object.create(null) - - fixed a function-scope function declaration statement in Object.create - -0.0.1 - - fixed Object.create(null), in so far as that's possible - - reworked Rhino Object.freeze(Function) bug detector and patcher - -0.0.0 - - forked from narwhal-lib - diff --git a/platforms/android/assets/www/lib/es5-shim/CONTRIBUTORS.md b/platforms/android/assets/www/lib/es5-shim/CONTRIBUTORS.md deleted file mode 100644 index 43ebf770..00000000 --- a/platforms/android/assets/www/lib/es5-shim/CONTRIBUTORS.md +++ /dev/null @@ -1,27 +0,0 @@ - -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal - Project) -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License -- kossnocorp Sasha Koss XXX TODO License or CLA -- bryanforbes Bryan Forbes XXX TODO License or CLA -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD - License -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain) -- iwyg XXX TODO License or CLA -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License -- xavierm02 Montillet Xavier Copyright (C) 2011 MIT License -- Raynos Jake Verbaten Copyright (C) 2011 MIT Licence -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License -- rwldrn Rick Waldron Copyright (C) 2011 MIT License -- lexer Alexey Zakharov XXX TODO License or CLA -- 280 North Inc. (Now Motorola LLC, a subsidiary of Google Inc.) - Copyright (C) 2009 MIT License -- Steven Levithan Copyright (C) 2012 MIT License -- Jordan Harband (C) 2013 MIT License - diff --git a/platforms/android/assets/www/lib/es5-shim/LICENSE b/platforms/android/assets/www/lib/es5-shim/LICENSE deleted file mode 100644 index 3dbd7de3..00000000 --- a/platforms/android/assets/www/lib/es5-shim/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2009-2014 Kristopher Michael Kowal and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/platforms/android/assets/www/lib/es5-shim/README.md b/platforms/android/assets/www/lib/es5-shim/README.md deleted file mode 100644 index 40ec70b1..00000000 --- a/platforms/android/assets/www/lib/es5-shim/README.md +++ /dev/null @@ -1,168 +0,0 @@ -#es5-shim <sup>[![Version Badge][2]][1]</sup> - -[![npm badge][9]][1] - -[![Build Status][3]][4] [![dependency status][5]][6] [![dev dependency status][7]][8] - -`es5-shim.js` and `es5-shim.min.js` monkey-patch a JavaScript context to -contain all EcmaScript 5 methods that can be faithfully emulated with a -legacy JavaScript engine. - -`es5-sham.js` and `es5-sham.min.js` monkey-patch other ES5 methods as -closely as possible. For these methods, as closely as possible to ES5 -is not very close. Many of these shams are intended only to allow code -to be written to ES5 without causing run-time errors in older engines. -In many cases, this means that these shams cause many ES5 methods to -silently fail. Decide carefully whether this is what you want. - - -## Tests - -The tests are written with the Jasmine BDD test framework. -To run the tests, navigate to <root-folder>/tests/. - -## Shims - -### Complete tests ### - -* Array.prototype.every -* Array.prototype.filter -* Array.prototype.forEach -* Array.prototype.indexOf -* Array.prototype.lastIndexOf -* Array.prototype.map -* Array.prototype.some -* Array.prototype.reduce -* Array.prototype.reduceRight -* Array.isArray -* Date.now -* Date.prototype.toJSON -* Function.prototype.bind - * :warning: Caveat: the bound function has a prototype property. - * :warning: Caveat: bound functions do not try too hard to keep you - from manipulating their ``arguments`` and ``caller`` properties. - * :warning: Caveat: bound functions don't have checks in ``call`` and - ``apply`` to avoid executing as a constructor. -* Number.prototype.toFixed -* Object.keys -* String.prototype.split -* String.prototype.trim -* String.prototype.replace - * Firefox (through v29) natively handles capturing groups incorrectly. -* Date.parse (for ISO parsing) -* Date.prototype.toISOString -* parseInt - -## Shams - -* :warning: Object.create - - For the case of simply "begetting" an object that inherits - prototypically from another, this should work fine across legacy - engines. - - :warning: Object.create(null) will work only in browsers that - support prototype assignment. This creates an object that does not - have any properties inherited from Object.prototype. It will - silently fail otherwise. - - :warning: The second argument is passed to Object.defineProperties - which will probably fail either silently or with extreme predudice. - -* :warning: Object.getPrototypeOf - - This will return "undefined" in some cases. It uses `__proto__` if - it's available. Failing that, it uses constructor.prototype, which - depends on the constructor property of the object's prototype having - not been replaced. If your object was created like this, it won't - work: - - function Foo() { - } - Foo.prototype = {}; - - Because the prototype reassignment destroys the constructor - property. - - This will work for all objects that were created using - `Object.create` implemented with this library. - -* :warning: Object.getOwnPropertyNames - - This method uses Object.keys, so it will not be accurate on legacy - engines. - -* Object.isSealed - - Returns "false" in all legacy engines for all objects, which is - conveniently guaranteed to be accurate. - -* Object.isFrozen - - Returns "false" in all legacy engines for all objects, which is - conveniently guaranteed to be accurate. - -* Object.isExtensible - - Works like a charm, by trying very hard to extend the object then - redacting the extension. - -### May fail - -* :warning: Object.getOwnPropertyDescriptor - - The behavior of this shim does not conform to ES5. It should - probably not be used at this time, until its behavior has been - reviewed and been confirmed to be useful in legacy engines. - -* :warning: Object.defineProperty - - In the worst of circumstances, IE 8 provides a version of this - method that only works on DOM objects. This sham will not be - installed. The given version of `defineProperty` will throw an - exception if used on non-DOM objects. - - In slightly better circumstances, this method will silently fail to - set "writable", "enumerable", and "configurable" properties. - - Providing a getter or setter with "get" or "set" on a descriptor - will silently fail on engines that lack "__defineGetter__" and - "__defineSetter__", which include all versions of IE. - - https://github.com/es-shims/es5-shim/issues#issue/5 - -* :warning: Object.defineProperties - - This uses the Object.defineProperty shim - -* Object.seal - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -* Object.freeze - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -* Object.preventExtensions - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -[1]: https://npmjs.org/package/es5-shim -[2]: http://vb.teelaun.ch/es-shims/es5-shim.svg -[3]: https://travis-ci.org/es-shims/es5-shim.png -[4]: https://travis-ci.org/es-shims/es5-shim -[5]: https://david-dm.org/es-shims/es5-shim.png -[6]: https://david-dm.org/es-shims/es5-shim -[7]: https://david-dm.org/es-shims/es5-shim/dev-status.png -[8]: https://david-dm.org/es-shims/es5-shim#info=devDependencies -[9]: https://nodei.co/npm/es5-shim.png?downloads=true&stars=true - diff --git a/platforms/android/assets/www/lib/es5-shim/bower.json b/platforms/android/assets/www/lib/es5-shim/bower.json deleted file mode 100644 index 5e16f67b..00000000 --- a/platforms/android/assets/www/lib/es5-shim/bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/es5-shim" - }, - "homepage": "https://github.com/es-shims/es5-shim", - "authors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "tests" - ] -} diff --git a/platforms/android/assets/www/lib/es5-shim/component.json b/platforms/android/assets/www/lib/es5-shim/component.json deleted file mode 100644 index bf10edea..00000000 --- a/platforms/android/assets/www/lib/es5-shim/component.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "es5-shim", - "repo": "es-shims/es5-shim", - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "version": "v3.1.1", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "main": "es5-shim.js", - "scripts": [ - "es5-shim.js" - ] -} diff --git a/platforms/android/assets/www/lib/es5-shim/es5-sham.js b/platforms/android/assets/www/lib/es5-shim/es5-sham.js deleted file mode 100644 index f2970566..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-sham.js +++ /dev/null @@ -1,466 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ - -// vim: ts=4 sts=4 sw=4 expandtab - -//Add semicolon to prevent IIFE from being passed as argument to concated code. -; -// Module systems magic dance -(function (definition) { - // RequireJS - if (typeof define === "function") { - define(definition); - // YUI3 - } else if (typeof YUI === "function") { - YUI.add("es5-sham", definition); - // CommonJS and <script> - } else { - definition(); - } -})(function () { - - -var call = Function.prototype.call; -var prototypeOfObject = Object.prototype; -var owns = call.bind(prototypeOfObject.hasOwnProperty); - -// If JS engine supports accessors creating shortcuts. -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} - -// ES5 15.2.3.2 -// http://es5.github.com/#x15.2.3.2 -if (!Object.getPrototypeOf) { - // https://github.com/es-shims/es5-shim/issues#issue/2 - // http://ejohn.org/blog/objectgetprototypeof/ - // recommended by fschaefer on github - // - // sure, and webreflection says ^_^ - // ... this will nerever possibly return null - // ... Opera Mini breaks here with infinite loops - Object.getPrototypeOf = function getPrototypeOf(object) { - var proto = object.__proto__; - if (proto || proto === null) { - return proto; - } else if (object.constructor) { - return object.constructor.prototype; - } else { - return prototypeOfObject; - } - }; -} - -//ES5 15.2.3.3 -//http://es5.github.com/#x15.2.3.3 - -function doesGetOwnPropertyDescriptorWork(object) { - try { - object.sentinel = 0; - return Object.getOwnPropertyDescriptor( - object, - "sentinel" - ).value === 0; - } catch (exception) { - // returns falsy - } -} - -//check whether getOwnPropertyDescriptor works if it's given. Otherwise, -//shim partially. -if (Object.defineProperty) { - var getOwnPropertyDescriptorWorksOnObject = doesGetOwnPropertyDescriptorWork({}); - var getOwnPropertyDescriptorWorksOnDom = typeof document === "undefined" || - doesGetOwnPropertyDescriptorWork(document.createElement("div")); - if (!getOwnPropertyDescriptorWorksOnDom || !getOwnPropertyDescriptorWorksOnObject) { - var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor; - } -} - -if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) { - var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a non-object: "; - - Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { - if ((typeof object !== "object" && typeof object !== "function") || object === null) { - throw new TypeError(ERR_NON_OBJECT + object); - } - - // make a valiant attempt to use the real getOwnPropertyDescriptor - // for I8's DOM elements. - if (getOwnPropertyDescriptorFallback) { - try { - return getOwnPropertyDescriptorFallback.call(Object, object, property); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - // If object does not owns property return undefined immediately. - if (!owns(object, property)) { - return; - } - - // If object has a property then it's for sure both `enumerable` and - // `configurable`. - var descriptor = { enumerable: true, configurable: true }; - - // If JS engine supports accessor properties then property may be a - // getter or setter. - if (supportsAccessors) { - // Unfortunately `__lookupGetter__` will return a getter even - // if object has own non getter property along with a same named - // inherited getter. To avoid misbehavior we temporary remove - // `__proto__` so that `__lookupGetter__` will return getter only - // if it's owned by an object. - var prototype = object.__proto__; - var notPrototypeOfObject = object !== prototypeOfObject; - // avoid recursion problem, breaking in Opera Mini when - // Object.getOwnPropertyDescriptor(Object.prototype, 'toString') - // or any other Object.prototype accessor - if (notPrototypeOfObject) { - object.__proto__ = prototypeOfObject; - } - - var getter = lookupGetter(object, property); - var setter = lookupSetter(object, property); - - if (notPrototypeOfObject) { - // Once we have getter and setter we can put values back. - object.__proto__ = prototype; - } - - if (getter || setter) { - if (getter) { - descriptor.get = getter; - } - if (setter) { - descriptor.set = setter; - } - // If it was accessor property we're done and return here - // in order to avoid adding `value` to the descriptor. - return descriptor; - } - } - - // If we got this far we know that object has an own property that is - // not an accessor so we set it as a value and return descriptor. - descriptor.value = object[property]; - descriptor.writable = true; - return descriptor; - }; -} - -// ES5 15.2.3.4 -// http://es5.github.com/#x15.2.3.4 -if (!Object.getOwnPropertyNames) { - Object.getOwnPropertyNames = function getOwnPropertyNames(object) { - return Object.keys(object); - }; -} - -// ES5 15.2.3.5 -// http://es5.github.com/#x15.2.3.5 -if (!Object.create) { - - // Contributed by Brandon Benvie, October, 2012 - var createEmpty; - var supportsProto = !({__proto__:null} instanceof Object); - // the following produces false positives - // in Opera Mini => not a reliable check - // Object.prototype.__proto__ === null - if (supportsProto || typeof document === 'undefined') { - createEmpty = function () { - return { "__proto__": null }; - }; - } else { - // In old IE __proto__ can't be used to manually set `null`, nor does - // any other method exist to make an object that inherits from nothing, - // aside from Object.prototype itself. Instead, create a new global - // object and *steal* its Object.prototype and strip it bare. This is - // used as the prototype to create nullary objects. - createEmpty = function () { - var iframe = document.createElement('iframe'); - var parent = document.body || document.documentElement; - iframe.style.display = 'none'; - parent.appendChild(iframe); - iframe.src = 'javascript:'; - var empty = iframe.contentWindow.Object.prototype; - parent.removeChild(iframe); - iframe = null; - delete empty.constructor; - delete empty.hasOwnProperty; - delete empty.propertyIsEnumerable; - delete empty.isPrototypeOf; - delete empty.toLocaleString; - delete empty.toString; - delete empty.valueOf; - empty.__proto__ = null; - - function Empty() {} - Empty.prototype = empty; - // short-circuit future calls - createEmpty = function () { - return new Empty(); - }; - return new Empty(); - }; - } - - Object.create = function create(prototype, properties) { - - var object; - function Type() {} // An empty constructor. - - if (prototype === null) { - object = createEmpty(); - } else { - if (typeof prototype !== "object" && typeof prototype !== "function") { - // In the native implementation `parent` can be `null` - // OR *any* `instanceof Object` (Object|Function|Array|RegExp|etc) - // Use `typeof` tho, b/c in old IE, DOM elements are not `instanceof Object` - // like they are in modern browsers. Using `Object.create` on DOM elements - // is...err...probably inappropriate, but the native version allows for it. - throw new TypeError("Object prototype may only be an Object or null"); // same msg as Chrome - } - Type.prototype = prototype; - object = new Type(); - // IE has no built-in implementation of `Object.getPrototypeOf` - // neither `__proto__`, but this manually setting `__proto__` will - // guarantee that `Object.getPrototypeOf` will work as expected with - // objects created using `Object.create` - object.__proto__ = prototype; - } - - if (properties !== void 0) { - Object.defineProperties(object, properties); - } - - return object; - }; -} - -// ES5 15.2.3.6 -// http://es5.github.com/#x15.2.3.6 - -// Patch for WebKit and IE8 standard mode -// Designed by hax <hax.github.com> -// related issue: https://github.com/es-shims/es5-shim/issues#issue/5 -// IE8 Reference: -// http://msdn.microsoft.com/en-us/library/dd282900.aspx -// http://msdn.microsoft.com/en-us/library/dd229916.aspx -// WebKit Bugs: -// https://bugs.webkit.org/show_bug.cgi?id=36423 - -function doesDefinePropertyWork(object) { - try { - Object.defineProperty(object, "sentinel", {}); - return "sentinel" in object; - } catch (exception) { - // returns falsy - } -} - -// check whether defineProperty works if it's given. Otherwise, -// shim partially. -if (Object.defineProperty) { - var definePropertyWorksOnObject = doesDefinePropertyWork({}); - var definePropertyWorksOnDom = typeof document === "undefined" || - doesDefinePropertyWork(document.createElement("div")); - if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { - var definePropertyFallback = Object.defineProperty, - definePropertiesFallback = Object.defineProperties; - } -} - -if (!Object.defineProperty || definePropertyFallback) { - var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; - var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " - var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + - "on this javascript engine"; - - Object.defineProperty = function defineProperty(object, property, descriptor) { - if ((typeof object !== "object" && typeof object !== "function") || object === null) { - throw new TypeError(ERR_NON_OBJECT_TARGET + object); - } - if ((typeof descriptor !== "object" && typeof descriptor !== "function") || descriptor === null) { - throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); - } - // make a valiant attempt to use the real defineProperty - // for I8's DOM elements. - if (definePropertyFallback) { - try { - return definePropertyFallback.call(Object, object, property, descriptor); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - // If it's a data property. - if (owns(descriptor, "value")) { - // fail silently if "writable", "enumerable", or "configurable" - // are requested but not supported - /* - // alternate approach: - if ( // can't implement these features; allow false but not true - !(owns(descriptor, "writable") ? descriptor.writable : true) || - !(owns(descriptor, "enumerable") ? descriptor.enumerable : true) || - !(owns(descriptor, "configurable") ? descriptor.configurable : true) - ) - throw new RangeError( - "This implementation of Object.defineProperty does not " + - "support configurable, enumerable, or writable." - ); - */ - - if (supportsAccessors && (lookupGetter(object, property) || - lookupSetter(object, property))) - { - // As accessors are supported only on engines implementing - // `__proto__` we can safely override `__proto__` while defining - // a property to make sure that we don't hit an inherited - // accessor. - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - // Deleting a property anyway since getter / setter may be - // defined on object itself. - delete object[property]; - object[property] = descriptor.value; - // Setting original `__proto__` back now. - object.__proto__ = prototype; - } else { - object[property] = descriptor.value; - } - } else { - if (!supportsAccessors) { - throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); - } - // If we got that far then getters and setters can be defined !! - if (owns(descriptor, "get")) { - defineGetter(object, property, descriptor.get); - } - if (owns(descriptor, "set")) { - defineSetter(object, property, descriptor.set); - } - } - return object; - }; -} - -// ES5 15.2.3.7 -// http://es5.github.com/#x15.2.3.7 -if (!Object.defineProperties || definePropertiesFallback) { - Object.defineProperties = function defineProperties(object, properties) { - // make a valiant attempt to use the real defineProperties - if (definePropertiesFallback) { - try { - return definePropertiesFallback.call(Object, object, properties); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - for (var property in properties) { - if (owns(properties, property) && property !== "__proto__") { - Object.defineProperty(object, property, properties[property]); - } - } - return object; - }; -} - -// ES5 15.2.3.8 -// http://es5.github.com/#x15.2.3.8 -if (!Object.seal) { - Object.seal = function seal(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// ES5 15.2.3.9 -// http://es5.github.com/#x15.2.3.9 -if (!Object.freeze) { - Object.freeze = function freeze(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// detect a Rhino bug and patch it -try { - Object.freeze(function () {}); -} catch (exception) { - Object.freeze = (function freeze(freezeObject) { - return function freeze(object) { - if (typeof object === "function") { - return object; - } else { - return freezeObject(object); - } - }; - })(Object.freeze); -} - -// ES5 15.2.3.10 -// http://es5.github.com/#x15.2.3.10 -if (!Object.preventExtensions) { - Object.preventExtensions = function preventExtensions(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// ES5 15.2.3.11 -// http://es5.github.com/#x15.2.3.11 -if (!Object.isSealed) { - Object.isSealed = function isSealed(object) { - return false; - }; -} - -// ES5 15.2.3.12 -// http://es5.github.com/#x15.2.3.12 -if (!Object.isFrozen) { - Object.isFrozen = function isFrozen(object) { - return false; - }; -} - -// ES5 15.2.3.13 -// http://es5.github.com/#x15.2.3.13 -if (!Object.isExtensible) { - Object.isExtensible = function isExtensible(object) { - // 1. If Type(O) is not Object throw a TypeError exception. - if (Object(object) !== object) { - throw new TypeError(); // TODO message - } - // 2. Return the Boolean value of the [[Extensible]] internal property of O. - var name = ''; - while (owns(object, name)) { - name += '?'; - } - object[name] = true; - var returnValue = owns(object, name); - delete object[name]; - return returnValue; - }; -} - -}); diff --git a/platforms/android/assets/www/lib/es5-shim/es5-sham.map b/platforms/android/assets/www/lib/es5-shim/es5-sham.map deleted file mode 100644 index be9b6158..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-sham.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["es5-sham.js"],"names":["definition","define","YUI","add","call","Function","prototype","prototypeOfObject","Object","owns","bind","hasOwnProperty","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","getPrototypeOf","object","proto","__proto__","constructor","doesGetOwnPropertyDescriptorWork","sentinel","getOwnPropertyDescriptor","value","exception","defineProperty","getOwnPropertyDescriptorWorksOnObject","getOwnPropertyDescriptorWorksOnDom","document","createElement","getOwnPropertyDescriptorFallback","ERR_NON_OBJECT","property","TypeError","descriptor","enumerable","configurable","notPrototypeOfObject","getter","setter","get","set","writable","getOwnPropertyNames","keys","create","createEmpty","supportsProto","iframe","parent","body","documentElement","style","display","appendChild","src","empty","contentWindow","removeChild","propertyIsEnumerable","isPrototypeOf","toLocaleString","toString","valueOf","Empty","properties","Type","defineProperties","doesDefinePropertyWork","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","definePropertiesFallback","ERR_NON_OBJECT_DESCRIPTOR","ERR_NON_OBJECT_TARGET","ERR_ACCESSORS_NOT_SUPPORTED","seal","freeze","freezeObject","preventExtensions","isSealed","isFrozen","isExtensible","name","returnValue"],"mappings":"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"} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/es5-sham.min.js b/platforms/android/assets/www/lib/es5-shim/es5-sham.min.js deleted file mode 100644 index 70f8f0ca..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-sham.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ -(function(e){if(typeof define==="function"){define(e)}else if(typeof YUI==="function"){YUI.add("es5-sham",e)}else{e()}})(function(){var e=Function.prototype.call;var t=Object.prototype;var r=e.bind(t.hasOwnProperty);var n;var o;var i;var c;var f;if(f=r(t,"__defineGetter__")){n=e.bind(t.__defineGetter__);o=e.bind(t.__defineSetter__);i=e.bind(t.__lookupGetter__);c=e.bind(t.__lookupSetter__)}if(!Object.getPrototypeOf){Object.getPrototypeOf=function g(e){var r=e.__proto__;if(r||r===null){return r}else if(e.constructor){return e.constructor.prototype}else{return t}}}function u(e){try{e.sentinel=0;return Object.getOwnPropertyDescriptor(e,"sentinel").value===0}catch(t){}}if(Object.defineProperty){var p=u({});var a=typeof document==="undefined"||u(document.createElement("div"));if(!a||!p){var l=Object.getOwnPropertyDescriptor}}if(!Object.getOwnPropertyDescriptor||l){var b="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function E(e,n){if(typeof e!=="object"&&typeof e!=="function"||e===null){throw new TypeError(b+e)}if(l){try{return l.call(Object,e,n)}catch(o){}}if(!r(e,n)){return}var u={enumerable:true,configurable:true};if(f){var p=e.__proto__;var a=e!==t;if(a){e.__proto__=t}var _=i(e,n);var s=c(e,n);if(a){e.__proto__=p}if(_||s){if(_){u.get=_}if(s){u.set=s}return u}}u.value=e[n];u.writable=true;return u}}if(!Object.getOwnPropertyNames){Object.getOwnPropertyNames=function z(e){return Object.keys(e)}}if(!Object.create){var _;var s=!({__proto__:null}instanceof Object);if(s||typeof document==="undefined"){_=function(){return{__proto__:null}}}else{_=function(){var e=document.createElement("iframe");var t=document.body||document.documentElement;e.style.display="none";t.appendChild(e);e.src="javascript:";var r=e.contentWindow.Object.prototype;t.removeChild(e);e=null;delete r.constructor;delete r.hasOwnProperty;delete r.propertyIsEnumerable;delete r.isPrototypeOf;delete r.toLocaleString;delete r.toString;delete r.valueOf;r.__proto__=null;function n(){}n.prototype=r;_=function(){return new n};return new n}}Object.create=function S(e,t){var r;function n(){}if(e===null){r=_()}else{if(typeof e!=="object"&&typeof e!=="function"){throw new TypeError("Object prototype may only be an Object or null")}n.prototype=e;r=new n;r.__proto__=e}if(t!==void 0){Object.defineProperties(r,t)}return r}}function d(e){try{Object.defineProperty(e,"sentinel",{});return"sentinel"in e}catch(t){}}if(Object.defineProperty){var y=d({});var O=typeof document==="undefined"||d(document.createElement("div"));if(!y||!O){var j=Object.defineProperty,v=Object.defineProperties}}if(!Object.defineProperty||j){var w="Property description must be an object: ";var P="Object.defineProperty called on non-object: ";var m="getters & setters can not be defined "+"on this javascript engine";Object.defineProperty=function T(e,u,p){if(typeof e!=="object"&&typeof e!=="function"||e===null){throw new TypeError(P+e)}if(typeof p!=="object"&&typeof p!=="function"||p===null){throw new TypeError(w+p)}if(j){try{return j.call(Object,e,u,p)}catch(a){}}if(r(p,"value")){if(f&&(i(e,u)||c(e,u))){var l=e.__proto__;e.__proto__=t;delete e[u];e[u]=p.value;e.__proto__=l}else{e[u]=p.value}}else{if(!f){throw new TypeError(m)}if(r(p,"get")){n(e,u,p.get)}if(r(p,"set")){o(e,u,p.set)}}return e}}if(!Object.defineProperties||v){Object.defineProperties=function D(e,t){if(v){try{return v.call(Object,e,t)}catch(n){}}for(var o in t){if(r(t,o)&&o!=="__proto__"){Object.defineProperty(e,o,t[o])}}return e}}if(!Object.seal){Object.seal=function x(e){return e}}if(!Object.freeze){Object.freeze=function k(e){return e}}try{Object.freeze(function(){})}catch(h){Object.freeze=function F(e){return function t(r){if(typeof r==="function"){return r}else{return e(r)}}}(Object.freeze)}if(!Object.preventExtensions){Object.preventExtensions=function G(e){return e}}if(!Object.isSealed){Object.isSealed=function I(e){return false}}if(!Object.isFrozen){Object.isFrozen=function C(e){return false}}if(!Object.isExtensible){Object.isExtensible=function N(e){if(Object(e)!==e){throw new TypeError}var t="";while(r(e,t)){t+="?"}e[t]=true;var n=r(e,t);delete e[t];return n}}}); -//# sourceMappingURL=es5-sham.map \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/es5-shim.js b/platforms/android/assets/www/lib/es5-shim/es5-shim.js deleted file mode 100644 index aed02900..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-shim.js +++ /dev/null @@ -1,1434 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ - -// vim: ts=4 sts=4 sw=4 expandtab - -//Add semicolon to prevent IIFE from being passed as argument to concated code. -; - -// UMD (Universal Module Definition) -// see https://github.com/umdjs/umd/blob/master/returnExports.js -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like enviroments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.returnExports = factory(); - } -}(this, function () { - -/** - * Brings an environment as close to ECMAScript 5 compliance - * as is possible with the facilities of erstwhile engines. - * - * Annotated ES5: http://es5.github.com/ (specific links below) - * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/ - */ - -// Shortcut to an often accessed properties, in order to avoid multiple -// dereference that costs universally. -var call = Function.prototype.call; -var prototypeOfArray = Array.prototype; -var prototypeOfObject = Object.prototype; -var _Array_slice_ = prototypeOfArray.slice; -var array_splice = Array.prototype.splice; -var array_push = Array.prototype.push; -var array_unshift = Array.prototype.unshift; - -var isFunction = function (val) { - return prototypeOfObject.toString.call(val) === '[object Function]'; -}; -var isRegex = function (val) { - return prototypeOfObject.toString.call(val) === '[object RegExp]'; -}; - -// -// Function -// ======== -// - -// ES-5 15.3.4.5 -// http://es5.github.com/#x15.3.4.5 - -function Empty() {} - -if (!Function.prototype.bind) { - Function.prototype.bind = function bind(that) { // .length is 1 - // 1. Let Target be the this value. - var target = this; - // 2. If IsCallable(Target) is false, throw a TypeError exception. - if (!isFunction(target)) { - throw new TypeError("Function.prototype.bind called on incompatible " + target); - } - // 3. Let A be a new (possibly empty) internal list of all of the - // argument values provided after thisArg (arg1, arg2 etc), in order. - // XXX slicedArgs will stand in for "A" if used - var args = _Array_slice_.call(arguments, 1); // for normal call - // 4. Let F be a new native ECMAScript object. - // 11. Set the [[Prototype]] internal property of F to the standard - // built-in Function prototype object as specified in 15.3.3.1. - // 12. Set the [[Call]] internal property of F as described in - // 15.3.4.5.1. - // 13. Set the [[Construct]] internal property of F as described in - // 15.3.4.5.2. - // 14. Set the [[HasInstance]] internal property of F as described in - // 15.3.4.5.3. - var binder = function () { - - if (this instanceof bound) { - // 15.3.4.5.2 [[Construct]] - // When the [[Construct]] internal method of a function object, - // F that was created using the bind function is called with a - // list of arguments ExtraArgs, the following steps are taken: - // 1. Let target be the value of F's [[TargetFunction]] - // internal property. - // 2. If target has no [[Construct]] internal method, a - // TypeError exception is thrown. - // 3. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Construct]] internal - // method of target providing args as the arguments. - - var result = target.apply( - this, - args.concat(_Array_slice_.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - - } else { - // 15.3.4.5.1 [[Call]] - // When the [[Call]] internal method of a function object, F, - // which was created using the bind function is called with a - // this value and a list of arguments ExtraArgs, the following - // steps are taken: - // 1. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 2. Let boundThis be the value of F's [[BoundThis]] internal - // property. - // 3. Let target be the value of F's [[TargetFunction]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Call]] internal method - // of target providing boundThis as the this value and - // providing args as the arguments. - - // equiv: target.call(this, ...boundArgs, ...args) - return target.apply( - that, - args.concat(_Array_slice_.call(arguments)) - ); - - } - - }; - - // 15. If the [[Class]] internal property of Target is "Function", then - // a. Let L be the length property of Target minus the length of A. - // b. Set the length own property of F to either 0 or L, whichever is - // larger. - // 16. Else set the length own property of F to 0. - - var boundLength = Math.max(0, target.length - args.length); - - // 17. Set the attributes of the length own property of F to the values - // specified in 15.3.5.1. - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs.push("$" + i); - } - - // XXX Build a dynamic function with desired amount of arguments is the only - // way to set the length property of a function. - // In environments where Content Security Policies enabled (Chrome extensions, - // for ex.) all use of eval or Function costructor throws an exception. - // However in all of these environments Function.prototype.bind exists - // and so this code will never be executed. - var bound = Function("binder", "return function(" + boundArgs.join(",") + "){return binder.apply(this,arguments)}")(binder); - - if (target.prototype) { - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - // Clean up dangling references. - Empty.prototype = null; - } - - // TODO - // 18. Set the [[Extensible]] internal property of F to true. - - // TODO - // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3). - // 20. Call the [[DefineOwnProperty]] internal method of F with - // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]: - // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and - // false. - // 21. Call the [[DefineOwnProperty]] internal method of F with - // arguments "arguments", PropertyDescriptor {[[Get]]: thrower, - // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}, - // and false. - - // TODO - // NOTE Function objects created using Function.prototype.bind do not - // have a prototype property or the [[Code]], [[FormalParameters]], and - // [[Scope]] internal properties. - // XXX can't delete prototype in pure-js. - - // 22. Return F. - return bound; - }; -} - -// _Please note: Shortcuts are defined after `Function.prototype.bind` as we -// us it in defining shortcuts. -var owns = call.bind(prototypeOfObject.hasOwnProperty); -// Having a toString local variable name breaks in Opera so use _toString. -var _toString = call.bind(prototypeOfObject.toString); - -// If JS engine supports accessors creating shortcuts. -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} - -// -// Array -// ===== -// - -// ES5 15.4.4.12 -// http://es5.github.com/#x15.4.4.12 -// Default value for second param -// [bugfix, ielt9, old browsers] -// IE < 9 bug: [1,2].splice(0).join("") === "" but should be "12" -if ([1, 2].splice(0).length !== 2) { - if (function () { // test IE < 9 to splice bug - see issue #138 - function makeArray(l) { - var a = []; - while (l--) { - a.unshift(l); - } - return a; - } - - var array = []; - var lengthBefore; - - array.splice.bind(array, 0, 0).apply(null, makeArray(20)); - array.splice.bind(array, 0, 0).apply(null, makeArray(26)); - - lengthBefore = array.length; //20 - array.splice(5, 0, "XXX"); // add one element - - if (lengthBefore + 1 === array.length) { - return true;// has right splice implementation without bugs - } - // else { - // IE8 bug - // } - }()) { // IE 6/7 - Array.prototype.splice = function(start, deleteCount) { - if (!arguments.length) { - return []; - } else { - return array_splice.apply(this, [ - start === void 0 ? 0 : start, - deleteCount === void 0 ? (this.length - start) : deleteCount - ].concat(_Array_slice_.call(arguments, 2))); - } - }; - } else { // IE8 - Array.prototype.splice = function(start, deleteCount) { - var result; - var args = _Array_slice_.call(arguments, 2); - var addElementsCount = args.length; - - if (!arguments.length) { - return []; - } - - if (start === void 0) { // default - start = 0; - } - if (deleteCount === void 0) { // default - deleteCount = this.length - start; - } - - if (addElementsCount > 0) { - if (deleteCount <= 0) { - if (start === this.length) { // tiny optimisation #1 - array_push.apply(this, args); - return []; - } - - if (start === 0) { // tiny optimisation #2 - array_unshift.apply(this, args); - return []; - } - } - - // Array.prototype.splice implementation - result = _Array_slice_.call(this, start, start + deleteCount);// delete part - args.push.apply(args, _Array_slice_.call(this, start + deleteCount, this.length));// right part - args.unshift.apply(args, _Array_slice_.call(this, 0, start));// left part - - // delete all items from this array and replace it to 'left part' + _Array_slice_.call(arguments, 2) + 'right part' - args.unshift(0, this.length); - - array_splice.apply(this, args); - - return result; - } - - return array_splice.call(this, start, deleteCount); - }; - - } -} - -// ES5 15.4.4.12 -// http://es5.github.com/#x15.4.4.13 -// Return len+argCount. -// [bugfix, ielt8] -// IE < 8 bug: [].unshift(0) === undefined but should be "1" -if ([].unshift(0) !== 1) { - Array.prototype.unshift = function() { - array_unshift.apply(this, arguments); - return this.length; - }; -} - -// ES5 15.4.3.2 -// http://es5.github.com/#x15.4.3.2 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray -if (!Array.isArray) { - Array.isArray = function isArray(obj) { - return _toString(obj) === "[object Array]"; - }; -} - -// The IsCallable() check in the Array functions -// has been replaced with a strict check on the -// internal class of the object to trap cases where -// the provided function was actually a regular -// expression literal, which in V8 and -// JavaScriptCore is a typeof "function". Only in -// V8 are regular expression literals permitted as -// reduce parameters, so it is desirable in the -// general case for the shim to match the more -// strict and common behavior of rejecting regular -// expressions. - -// ES5 15.4.4.18 -// http://es5.github.com/#x15.4.4.18 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach - - -// Check failure of by-index access of string characters (IE < 9) -// and failure of `0 in boxedString` (Rhino) -var boxedString = Object("a"); -var splitString = boxedString[0] !== "a" || !(0 in boxedString); - -var properlyBoxesContext = function properlyBoxed(method) { - // Check node 0.6.21 bug where third parameter is not boxed - var properlyBoxes = true; - if (method) { - method.call('foo', function (_, __, context) { - if (typeof context !== 'object') { properlyBoxes = false; } - }); - } - return !!method && properlyBoxes; -}; - -if (!Array.prototype.forEach || !properlyBoxesContext(Array.prototype.forEach)) { - Array.prototype.forEach = function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(); // TODO message - } - - while (++i < length) { - if (i in self) { - // Invoke the callback function with call, passing arguments: - // context, property value, property key, thisArg object - // context - fun.call(thisp, self[i], i, object); - } - } - }; -} - -// ES5 15.4.4.19 -// http://es5.github.com/#x15.4.4.19 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map -if (!Array.prototype.map || !properlyBoxesContext(Array.prototype.map)) { - Array.prototype.map = function map(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = Array(length), - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) - result[i] = fun.call(thisp, self[i], i, object); - } - return result; - }; -} - -// ES5 15.4.4.20 -// http://es5.github.com/#x15.4.4.20 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter -if (!Array.prototype.filter || !properlyBoxesContext(Array.prototype.filter)) { - Array.prototype.filter = function filter(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = [], - value, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) { - value = self[i]; - if (fun.call(thisp, value, i, object)) { - result.push(value); - } - } - } - return result; - }; -} - -// ES5 15.4.4.16 -// http://es5.github.com/#x15.4.4.16 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every -if (!Array.prototype.every || !properlyBoxesContext(Array.prototype.every)) { - Array.prototype.every = function every(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && !fun.call(thisp, self[i], i, object)) { - return false; - } - } - return true; - }; -} - -// ES5 15.4.4.17 -// http://es5.github.com/#x15.4.4.17 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some -if (!Array.prototype.some || !properlyBoxesContext(Array.prototype.some)) { - Array.prototype.some = function some(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && fun.call(thisp, self[i], i, object)) { - return true; - } - } - return false; - }; -} - -// ES5 15.4.4.21 -// http://es5.github.com/#x15.4.4.21 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce -var reduceCoercesToObject = false; -if (Array.prototype.reduce) { - reduceCoercesToObject = typeof Array.prototype.reduce.call('a', function (_, __, ___, list) { return list; }) === 'object'; -} -if (!Array.prototype.reduce || !reduceCoercesToObject) { - Array.prototype.reduce = function reduce(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - // no value to return if no initial value and an empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduce of empty array with no initial value"); - } - - var i = 0; - var result; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i++]; - break; - } - - // if array contains no values, no initial value to return - if (++i >= length) { - throw new TypeError("reduce of empty array with no initial value"); - } - } while (true); - } - - for (; i < length; i++) { - if (i in self) { - result = fun.call(void 0, result, self[i], i, object); - } - } - - return result; - }; -} - -// ES5 15.4.4.22 -// http://es5.github.com/#x15.4.4.22 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight -if (!Array.prototype.reduceRight) { - Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - // no value to return if no initial value, empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - - var result, i = length - 1; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i--]; - break; - } - - // if array contains no values, no initial value to return - if (--i < 0) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - } while (true); - } - - if (i < 0) { - return result; - } - - do { - if (i in this) { - result = fun.call(void 0, result, self[i], i, object); - } - } while (i--); - - return result; - }; -} - -// ES5 15.4.4.14 -// http://es5.github.com/#x15.4.4.14 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf -if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) !== -1)) { - Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { - var self = splitString && _toString(this) === "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - - var i = 0; - if (arguments.length > 1) { - i = toInteger(arguments[1]); - } - - // handle negative indices - i = i >= 0 ? i : Math.max(0, length + i); - for (; i < length; i++) { - if (i in self && self[i] === sought) { - return i; - } - } - return -1; - }; -} - -// ES5 15.4.4.15 -// http://es5.github.com/#x15.4.4.15 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf -if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) !== -1)) { - Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { - var self = splitString && _toString(this) === "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - var i = length - 1; - if (arguments.length > 1) { - i = Math.min(i, toInteger(arguments[1])); - } - // handle negative indices - i = i >= 0 ? i : length - Math.abs(i); - for (; i >= 0; i--) { - if (i in self && sought === self[i]) { - return i; - } - } - return -1; - }; -} - -// -// Object -// ====== -// - -// ES5 15.2.3.14 -// http://es5.github.com/#x15.2.3.14 -if (!Object.keys) { - // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), - hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - dontEnumsLength = dontEnums.length, - isArguments = function isArguments(value) { - var str = _toString(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = !Array.isArray(str) - && value !== null - && typeof value === 'object' - && typeof value.length === 'number' - && value.length >= 0 - && isFunction(value.callee); - } - return isArgs; - }; - - Object.keys = function keys(object) { - var isFn = isFunction(object), - isArgs = isArguments(object), - isObject = object !== null && typeof object === 'object', - isString = isObject && _toString(object) === '[object String]'; - - if (!isObject && !isFn && !isArgs) { - throw new TypeError("Object.keys called on a non-object"); - } - - var theKeys = []; - var skipProto = hasProtoEnumBug && isFn; - if (isString || isArgs) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && owns(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var ctor = object.constructor, - skipConstructor = ctor && ctor.prototype === object; - for (var j = 0; j < dontEnumsLength; j++) { - var dontEnum = dontEnums[j]; - if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) { - theKeys.push(dontEnum); - } - } - } - return theKeys; - }; - -} - -// -// Date -// ==== -// - -// ES5 15.9.5.43 -// http://es5.github.com/#x15.9.5.43 -// This function returns a String value represent the instance in time -// represented by this Date object. The format of the String is the Date Time -// string format defined in 15.9.1.15. All fields are present in the String. -// The time zone is always UTC, denoted by the suffix Z. If the time value of -// this object is not a finite Number a RangeError exception is thrown. -var negativeDate = -62198755200000, - negativeYearString = "-000001"; -if ( - !Date.prototype.toISOString || - (new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1) -) { - Date.prototype.toISOString = function toISOString() { - var result, length, value, year, month; - if (!isFinite(this)) { - throw new RangeError("Date.prototype.toISOString called on non-finite value."); - } - - year = this.getUTCFullYear(); - - month = this.getUTCMonth(); - // see https://github.com/es-shims/es5-shim/issues/111 - year += Math.floor(month / 12); - month = (month % 12 + 12) % 12; - - // the date time string format is specified in 15.9.1.15. - result = [month + 1, this.getUTCDate(), - this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()]; - year = ( - (year < 0 ? "-" : (year > 9999 ? "+" : "")) + - ("00000" + Math.abs(year)) - .slice(0 <= year && year <= 9999 ? -4 : -6) - ); - - length = result.length; - while (length--) { - value = result[length]; - // pad months, days, hours, minutes, and seconds to have two - // digits. - if (value < 10) { - result[length] = "0" + value; - } - } - // pad milliseconds to have three digits. - return ( - year + "-" + result.slice(0, 2).join("-") + - "T" + result.slice(2).join(":") + "." + - ("000" + this.getUTCMilliseconds()).slice(-3) + "Z" - ); - }; -} - - -// ES5 15.9.5.44 -// http://es5.github.com/#x15.9.5.44 -// This function provides a String representation of a Date object for use by -// JSON.stringify (15.12.3). -var dateToJSONIsSupported = false; -try { - dateToJSONIsSupported = ( - Date.prototype.toJSON && - new Date(NaN).toJSON() === null && - new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 && - Date.prototype.toJSON.call({ // generic - toISOString: function () { - return true; - } - }) - ); -} catch (e) { -} -if (!dateToJSONIsSupported) { - Date.prototype.toJSON = function toJSON(key) { - // When the toJSON method is called with argument key, the following - // steps are taken: - - // 1. Let O be the result of calling ToObject, giving it the this - // value as its argument. - // 2. Let tv be toPrimitive(O, hint Number). - var o = Object(this), - tv = toPrimitive(o), - toISO; - // 3. If tv is a Number and is not finite, return null. - if (typeof tv === "number" && !isFinite(tv)) { - return null; - } - // 4. Let toISO be the result of calling the [[Get]] internal method of - // O with argument "toISOString". - toISO = o.toISOString; - // 5. If IsCallable(toISO) is false, throw a TypeError exception. - if (typeof toISO !== "function") { - throw new TypeError("toISOString property is not callable"); - } - // 6. Return the result of calling the [[Call]] internal method of - // toISO with O as the this value and an empty argument list. - return toISO.call(o); - - // NOTE 1 The argument is ignored. - - // NOTE 2 The toJSON function is intentionally generic; it does not - // require that its this value be a Date object. Therefore, it can be - // transferred to other kinds of objects for use as a method. However, - // it does require that any such object have a toISOString method. An - // object is free to use the argument key to filter its - // stringification. - }; -} - -// ES5 15.9.4.2 -// http://es5.github.com/#x15.9.4.2 -// based on work shared by Daniel Friesen (dantman) -// http://gist.github.com/303249 -var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15; -var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')); -var doesNotParseY2KNewYear = isNaN(Date.parse("2000-01-01T00:00:00.000Z")); -if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) { - // XXX global assignment won't work in embeddings that use - // an alternate object for the context. - Date = (function(NativeDate) { - - // Date.length === 7 - function Date(Y, M, D, h, m, s, ms) { - var length = arguments.length; - if (this instanceof NativeDate) { - var date = length === 1 && String(Y) === Y ? // isString(Y) - // We explicitly pass it through parse: - new NativeDate(Date.parse(Y)) : - // We have to manually make calls depending on argument - // length here - length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) : - length >= 6 ? new NativeDate(Y, M, D, h, m, s) : - length >= 5 ? new NativeDate(Y, M, D, h, m) : - length >= 4 ? new NativeDate(Y, M, D, h) : - length >= 3 ? new NativeDate(Y, M, D) : - length >= 2 ? new NativeDate(Y, M) : - length >= 1 ? new NativeDate(Y) : - new NativeDate(); - // Prevent mixups with unfixed Date object - date.constructor = Date; - return date; - } - return NativeDate.apply(this, arguments); - } - - // 15.9.1.15 Date Time String Format. - var isoDateExpression = new RegExp("^" + - "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + - // 6-digit extended year - "(?:-(\\d{2})" + // optional month capture - "(?:-(\\d{2})" + // optional day capture - "(?:" + // capture hours:minutes:seconds.milliseconds - "T(\\d{2})" + // hours capture - ":(\\d{2})" + // minutes capture - "(?:" + // optional :seconds.milliseconds - ":(\\d{2})" + // seconds capture - "(?:(\\.\\d{1,}))?" + // milliseconds capture - ")?" + - "(" + // capture UTC offset component - "Z|" + // UTC capture - "(?:" + // offset specifier +/-hours:minutes - "([-+])" + // sign capture - "(\\d{2})" + // hours offset capture - ":(\\d{2})" + // minutes offset capture - ")" + - ")?)?)?)?" + - "$"); - - var months = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 - ]; - - function dayFromMonth(year, month) { - var t = month > 1 ? 1 : 0; - return ( - months[month] + - Math.floor((year - 1969 + t) / 4) - - Math.floor((year - 1901 + t) / 100) + - Math.floor((year - 1601 + t) / 400) + - 365 * (year - 1970) - ); - } - - function toUTC(t) { - return Number(new NativeDate(1970, 0, 1, 0, 0, 0, t)); - } - - // Copy any custom methods a 3rd party library may have added - for (var key in NativeDate) { - Date[key] = NativeDate[key]; - } - - // Copy "native" methods explicitly; they may be non-enumerable - Date.now = NativeDate.now; - Date.UTC = NativeDate.UTC; - Date.prototype = NativeDate.prototype; - Date.prototype.constructor = Date; - - // Upgrade Date.parse to handle simplified ISO 8601 strings - Date.parse = function parse(string) { - var match = isoDateExpression.exec(string); - if (match) { - // parse months, days, hours, minutes, seconds, and milliseconds - // provide default values if necessary - // parse the UTC offset component - var year = Number(match[1]), - month = Number(match[2] || 1) - 1, - day = Number(match[3] || 1) - 1, - hour = Number(match[4] || 0), - minute = Number(match[5] || 0), - second = Number(match[6] || 0), - millisecond = Math.floor(Number(match[7] || 0) * 1000), - // When time zone is missed, local offset should be used - // (ES 5.1 bug) - // see https://bugs.ecmascript.org/show_bug.cgi?id=112 - isLocalTime = Boolean(match[4] && !match[8]), - signOffset = match[9] === "-" ? 1 : -1, - hourOffset = Number(match[10] || 0), - minuteOffset = Number(match[11] || 0), - result; - if ( - hour < ( - minute > 0 || second > 0 || millisecond > 0 ? - 24 : 25 - ) && - minute < 60 && second < 60 && millisecond < 1000 && - month > -1 && month < 12 && hourOffset < 24 && - minuteOffset < 60 && // detect invalid offsets - day > -1 && - day < ( - dayFromMonth(year, month + 1) - - dayFromMonth(year, month) - ) - ) { - result = ( - (dayFromMonth(year, month) + day) * 24 + - hour + - hourOffset * signOffset - ) * 60; - result = ( - (result + minute + minuteOffset * signOffset) * 60 + - second - ) * 1000 + millisecond; - if (isLocalTime) { - result = toUTC(result); - } - if (-8.64e15 <= result && result <= 8.64e15) { - return result; - } - } - return NaN; - } - return NativeDate.parse.apply(this, arguments); - }; - - return Date; - })(Date); -} - -// ES5 15.9.4.4 -// http://es5.github.com/#x15.9.4.4 -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} - - -// -// Number -// ====== -// - -// ES5.1 15.7.4.5 -// http://es5.github.com/#x15.7.4.5 -if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' || (0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' || (1000000000000000128).toFixed(0) !== "1000000000000000128") { - // Hide these variables and functions - (function () { - var base, size, data, i; - - base = 1e7; - size = 6; - data = [0, 0, 0, 0, 0, 0]; - - function multiply(n, c) { - var i = -1; - while (++i < size) { - c += n * data[i]; - data[i] = c % base; - c = Math.floor(c / base); - } - } - - function divide(n) { - var i = size, c = 0; - while (--i >= 0) { - c += data[i]; - data[i] = Math.floor(c / n); - c = (c % n) * base; - } - } - - function toString() { - var i = size; - var s = ''; - while (--i >= 0) { - if (s !== '' || i === 0 || data[i] !== 0) { - var t = String(data[i]); - if (s === '') { - s = t; - } else { - s += '0000000'.slice(0, 7 - t.length) + t; - } - } - } - return s; - } - - function pow(x, n, acc) { - return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc))); - } - - function log(x) { - var n = 0; - while (x >= 4096) { - n += 12; - x /= 4096; - } - while (x >= 2) { - n += 1; - x /= 2; - } - return n; - } - - Number.prototype.toFixed = function toFixed(fractionDigits) { - var f, x, s, m, e, z, j, k; - - // Test for NaN and round fractionDigits down - f = Number(fractionDigits); - f = f !== f ? 0 : Math.floor(f); - - if (f < 0 || f > 20) { - throw new RangeError("Number.toFixed called with invalid number of decimals"); - } - - x = Number(this); - - // Test for NaN - if (x !== x) { - return "NaN"; - } - - // If it is too big or small, return the string value of the number - if (x <= -1e21 || x >= 1e21) { - return String(x); - } - - s = ""; - - if (x < 0) { - s = "-"; - x = -x; - } - - m = "0"; - - if (x > 1e-21) { - // 1e-21 < x < 1e21 - // -70 < log2(x) < 70 - e = log(x * pow(2, 69, 1)) - 69; - z = (e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1)); - z *= 0x10000000000000; // Math.pow(2, 52); - e = 52 - e; - - // -18 < e < 122 - // x = z / 2 ^ e - if (e > 0) { - multiply(0, z); - j = f; - - while (j >= 7) { - multiply(1e7, 0); - j -= 7; - } - - multiply(pow(10, j, 1), 0); - j = e - 1; - - while (j >= 23) { - divide(1 << 23); - j -= 23; - } - - divide(1 << j); - multiply(1, 1); - divide(2); - m = toString(); - } else { - multiply(0, z); - multiply(1 << (-e), 0); - m = toString() + '0.00000000000000000000'.slice(2, 2 + f); - } - } - - if (f > 0) { - k = m.length; - - if (k <= f) { - m = s + '0.0000000000000000000'.slice(0, f - k + 2) + m; - } else { - m = s + m.slice(0, k - f) + '.' + m.slice(k - f); - } - } else { - m = s + m; - } - - return m; - }; - }()); -} - - -// -// String -// ====== -// - - -// ES5 15.5.4.14 -// http://es5.github.com/#x15.5.4.14 - -// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers] -// Many browsers do not split properly with regular expressions or they -// do not perform the split correctly under obscure conditions. -// See http://blog.stevenlevithan.com/archives/cross-browser-split -// I've tested in many browsers and this seems to cover the deviant ones: -// 'ab'.split(/(?:ab)*/) should be ["", ""], not [""] -// '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""] -// 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not -// [undefined, "t", undefined, "e", ...] -// ''.split(/.?/) should be [], not [""] -// '.'.split(/()()/) should be ["."], not ["", "", "."] - -var string_split = String.prototype.split; -if ( - 'ab'.split(/(?:ab)*/).length !== 2 || - '.'.split(/(.?)(.?)/).length !== 4 || - 'tesst'.split(/(s)*/)[1] === "t" || - ''.split(/.?/).length || - '.'.split(/()()/).length > 1 -) { - (function () { - var compliantExecNpcg = /()??/.exec("")[1] === void 0; // NPCG: nonparticipating capturing group - - String.prototype.split = function (separator, limit) { - var string = this; - if (separator === void 0 && limit === 0) - return []; - - // If `separator` is not a regex, use native split - if (Object.prototype.toString.call(separator) !== "[object RegExp]") { - return string_split.apply(this, arguments); - } - - var output = [], - flags = (separator.ignoreCase ? "i" : "") + - (separator.multiline ? "m" : "") + - (separator.extended ? "x" : "") + // Proposed for ES6 - (separator.sticky ? "y" : ""), // Firefox 3+ - lastLastIndex = 0, - // Make `global` and avoid `lastIndex` issues by working with a copy - separator2, match, lastIndex, lastLength; - separator = new RegExp(separator.source, flags + "g"); - string += ""; // Type-convert - if (!compliantExecNpcg) { - // Doesn't need flags gy, but they don't hurt - separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); - } - /* Values for `limit`, per the spec: - * If undefined: 4294967295 // Math.pow(2, 32) - 1 - * If 0, Infinity, or NaN: 0 - * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; - * If negative number: 4294967296 - Math.floor(Math.abs(limit)) - * If other: Type-convert, then use the above rules - */ - limit = limit === void 0 ? - -1 >>> 0 : // Math.pow(2, 32) - 1 - limit >>> 0; // ToUint32(limit) - while (match = separator.exec(string)) { - // `separator.lastIndex` is not reliable cross-browser - lastIndex = match.index + match[0].length; - if (lastIndex > lastLastIndex) { - output.push(string.slice(lastLastIndex, match.index)); - // Fix browsers whose `exec` methods don't consistently return `undefined` for - // nonparticipating capturing groups - if (!compliantExecNpcg && match.length > 1) { - match[0].replace(separator2, function () { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === void 0) { - match[i] = void 0; - } - } - }); - } - if (match.length > 1 && match.index < string.length) { - Array.prototype.push.apply(output, match.slice(1)); - } - lastLength = match[0].length; - lastLastIndex = lastIndex; - if (output.length >= limit) { - break; - } - } - if (separator.lastIndex === match.index) { - separator.lastIndex++; // Avoid an infinite loop - } - } - if (lastLastIndex === string.length) { - if (lastLength || !separator.test("")) { - output.push(""); - } - } else { - output.push(string.slice(lastLastIndex)); - } - return output.length > limit ? output.slice(0, limit) : output; - }; - }()); - -// [bugfix, chrome] -// If separator is undefined, then the result array contains just one String, -// which is the this value (converted to a String). If limit is not undefined, -// then the output array is truncated so that it contains no more than limit -// elements. -// "0".split(undefined, 0) -> [] -} else if ("0".split(void 0, 0).length) { - String.prototype.split = function split(separator, limit) { - if (separator === void 0 && limit === 0) return []; - return string_split.apply(this, arguments); - }; -} - -var str_replace = String.prototype.replace; -var replaceReportsGroupsCorrectly = (function () { - var groups = []; - 'x'.replace(/x(.)?/g, function (match, group) { - groups.push(group); - }); - return groups.length === 1 && typeof groups[0] === 'undefined'; -}()); - -if (!replaceReportsGroupsCorrectly) { - String.prototype.replace = function replace(searchValue, replaceValue) { - var isFn = isFunction(replaceValue); - var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source); - if (!isFn || !hasCapturingGroups) { - return str_replace.apply(this, arguments); - } else { - var wrappedReplaceValue = function (match) { - var length = arguments.length; - var originalLastIndex = searchValue.lastIndex; - searchValue.lastIndex = 0; - var args = searchValue.exec(match); - searchValue.lastIndex = originalLastIndex; - args.push(arguments[length - 2], arguments[length - 1]); - return replaceValue.apply(this, args); - }; - return str_replace.call(this, searchValue, wrappedReplaceValue); - } - }; -} - -// ECMA-262, 3rd B.2.3 -// Note an ECMAScript standart, although ECMAScript 3rd Edition has a -// non-normative section suggesting uniform semantics and it should be -// normalized across all browsers -// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE -if ("".substr && "0b".substr(-1) !== "b") { - var string_substr = String.prototype.substr; - /** - * Get the substring of a string - * @param {integer} start where to start the substring - * @param {integer} length how many characters to return - * @return {string} - */ - String.prototype.substr = function substr(start, length) { - return string_substr.call( - this, - start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start, - length - ); - }; -} - -// ES5 15.5.4.20 -// whitespace from: http://es5.github.io/#x15.5.4.20 -var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + - "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + - "\u2029\uFEFF"; -var zeroWidth = '\u200b'; -if (!String.prototype.trim || ws.trim() || !zeroWidth.trim()) { - // http://blog.stevenlevithan.com/archives/faster-trim-javascript - // http://perfectionkills.com/whitespace-deviations/ - ws = "[" + ws + "]"; - var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), - trimEndRegexp = new RegExp(ws + ws + "*$"); - String.prototype.trim = function trim() { - if (this === void 0 || this === null) { - throw new TypeError("can't convert "+this+" to object"); - } - return String(this) - .replace(trimBeginRegexp, "") - .replace(trimEndRegexp, ""); - }; -} - -// ES-5 15.1.2.2 -if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) { - parseInt = (function (origParseInt) { - var hexRegex = /^0[xX]/; - return function parseIntES5(str, radix) { - str = String(str).trim(); - if (!Number(radix)) { - radix = hexRegex.test(str) ? 16 : 10; - } - return origParseInt(str, radix); - }; - }(parseInt)); -} - -// -// Util -// ====== -// - -// ES5 9.4 -// http://es5.github.com/#x9.4 -// http://jsperf.com/to-integer - -function toInteger(n) { - n = +n; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function isPrimitive(input) { - var type = typeof input; - return ( - input === null || - type === "undefined" || - type === "boolean" || - type === "number" || - type === "string" - ); -} - -function toPrimitive(input) { - var val, valueOf, toStr; - if (isPrimitive(input)) { - return input; - } - valueOf = input.valueOf; - if (isFunction(valueOf)) { - val = valueOf.call(input); - if (isPrimitive(val)) { - return val; - } - } - toStr = input.toString; - if (isFunction(toStr)) { - val = toStr.call(input); - if (isPrimitive(val)) { - return val; - } - } - throw new TypeError(); -} - -// ES5 9.9 -// http://es5.github.com/#x9.9 -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert "+o+" to object"); - } - return Object(o); -}; - -})); diff --git a/platforms/android/assets/www/lib/es5-shim/es5-shim.map b/platforms/android/assets/www/lib/es5-shim/es5-shim.map deleted file mode 100644 index 905b4266..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-shim.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["es5-shim.js"],"names":["root","factory","define","amd","exports","module","returnExports","this","call","Function","prototype","prototypeOfArray","Array","prototypeOfObject","Object","_Array_slice_","slice","array_splice","splice","array_push","push","array_unshift","unshift","isFunction","val","toString","isRegex","Empty","bind","that","target","TypeError","args","arguments","binder","bound","result","apply","concat","boundLength","Math","max","length","boundArgs","i","join","owns","hasOwnProperty","_toString","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","l","a","array","lengthBefore","start","deleteCount","addElementsCount","isArray","obj","boxedString","splitString","properlyBoxesContext","properlyBoxed","method","properlyBoxes","_","__","context","forEach","fun","object","toObject","self","split","thisp","map","filter","value","every","some","reduceCoercesToObject","reduce","___","list","reduceRight","indexOf","sought","toInteger","lastIndexOf","min","abs","keys","hasDontEnumBug","propertyIsEnumerable","hasProtoEnumBug","dontEnums","dontEnumsLength","isArguments","str","isArgs","callee","isFn","isObject","isString","theKeys","skipProto","String","name","ctor","constructor","skipConstructor","j","dontEnum","negativeDate","negativeYearString","Date","toISOString","year","month","isFinite","RangeError","getUTCFullYear","getUTCMonth","floor","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","dateToJSONIsSupported","toJSON","NaN","e","key","o","tv","toPrimitive","toISO","supportsExtendedYears","parse","acceptsInvalidDates","isNaN","doesNotParseY2KNewYear","NativeDate","Y","M","D","h","m","s","ms","date","isoDateExpression","RegExp","months","dayFromMonth","t","toUTC","Number","now","UTC","string","match","exec","day","hour","minute","second","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","getTime","toFixed","base","size","data","multiply","n","c","divide","pow","x","acc","log","fractionDigits","f","z","k","string_split","compliantExecNpcg","separator","limit","output","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","separator2","lastIndex","lastLength","source","index","replace","test","str_replace","replaceReportsGroupsCorrectly","groups","group","searchValue","replaceValue","hasCapturingGroups","wrappedReplaceValue","originalLastIndex","substr","string_substr","ws","zeroWidth","trim","trimBeginRegexp","trimEndRegexp","parseInt","origParseInt","hexRegex","parseIntES5","radix","isPrimitive","input","type","valueOf","toStr"],"mappings":"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"} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/es5-shim.min.js b/platforms/android/assets/www/lib/es5-shim/es5-shim.min.js deleted file mode 100644 index b2be2f50..00000000 --- a/platforms/android/assets/www/lib/es5-shim/es5-shim.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ -(function(t,r){if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Function.prototype.call;var r=Array.prototype;var e=Object.prototype;var n=r.slice;var i=Array.prototype.splice;var o=Array.prototype.push;var a=Array.prototype.unshift;var l=function(t){return e.toString.call(t)==="[object Function]"};var u=function(t){return e.toString.call(t)==="[object RegExp]"};function p(){}if(!Function.prototype.bind){Function.prototype.bind=function H(t){var r=this;if(!l(r)){throw new TypeError("Function.prototype.bind called on incompatible "+r)}var e=n.call(arguments,1);var i=function(){if(this instanceof s){var i=r.apply(this,e.concat(n.call(arguments)));if(Object(i)===i){return i}return this}else{return r.apply(t,e.concat(n.call(arguments)))}};var o=Math.max(0,r.length-e.length);var a=[];for(var u=0;u<o;u++){a.push("$"+u)}var s=Function("binder","return function("+a.join(",")+"){return binder.apply(this,arguments)}")(i);if(r.prototype){p.prototype=r.prototype;s.prototype=new p;p.prototype=null}return s}}var s=t.bind(e.hasOwnProperty);var f=t.bind(e.toString);var c;var h;var y;var g;var v;if(v=s(e,"__defineGetter__")){c=t.bind(e.__defineGetter__);h=t.bind(e.__defineSetter__);y=t.bind(e.__lookupGetter__);g=t.bind(e.__lookupSetter__)}if([1,2].splice(0).length!==2){if(function(){function t(t){var r=[];while(t--){r.unshift(t)}return r}var r=[];var e;r.splice.bind(r,0,0).apply(null,t(20));r.splice.bind(r,0,0).apply(null,t(26));e=r.length;r.splice(5,0,"XXX");if(e+1===r.length){return true}}()){Array.prototype.splice=function(t,r){if(!arguments.length){return[]}else{return i.apply(this,[t===void 0?0:t,r===void 0?this.length-t:r].concat(n.call(arguments,2)))}}}else{Array.prototype.splice=function(t,r){var e;var l=n.call(arguments,2);var u=l.length;if(!arguments.length){return[]}if(t===void 0){t=0}if(r===void 0){r=this.length-t}if(u>0){if(r<=0){if(t===this.length){o.apply(this,l);return[]}if(t===0){a.apply(this,l);return[]}}e=n.call(this,t,t+r);l.push.apply(l,n.call(this,t+r,this.length));l.unshift.apply(l,n.call(this,0,t));l.unshift(0,this.length);i.apply(this,l);return e}return i.call(this,t,r)}}}if([].unshift(0)!==1){Array.prototype.unshift=function(){a.apply(this,arguments);return this.length}}if(!Array.isArray){Array.isArray=function L(t){return f(t)==="[object Array]"}}var d=Object("a");var b=d[0]!=="a"||!(0 in d);var m=function Y(t){var r=true;if(t){t.call("foo",function(t,e,n){if(typeof n!=="object"){r=false}})}return!!t&&r};if(!Array.prototype.forEach||!m(Array.prototype.forEach)){Array.prototype.forEach=function q(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=arguments[1],i=-1,o=e.length>>>0;if(!l(t)){throw new TypeError}while(++i<o){if(i in e){t.call(n,e[i],i,r)}}}}if(!Array.prototype.map||!m(Array.prototype.map)){Array.prototype.map=function z(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=Array(n),o=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var a=0;a<n;a++){if(a in e)i[a]=t.call(o,e[a],a,r)}return i}}if(!Array.prototype.filter||!m(Array.prototype.filter)){Array.prototype.filter=function K(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=[],o,a=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var u=0;u<n;u++){if(u in e){o=e[u];if(t.call(a,o,u,r)){i.push(o)}}}return i}}if(!Array.prototype.every||!m(Array.prototype.every)){Array.prototype.every=function Q(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var o=0;o<n;o++){if(o in e&&!t.call(i,e[o],o,r)){return false}}return true}}if(!Array.prototype.some||!m(Array.prototype.some)){Array.prototype.some=function V(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var o=0;o<n;o++){if(o in e&&t.call(i,e[o],o,r)){return true}}return false}}var w=false;if(Array.prototype.reduce){w=typeof Array.prototype.reduce.call("a",function(t,r,e,n){return n})==="object"}if(!Array.prototype.reduce||!w){Array.prototype.reduce=function W(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0;if(!l(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var i=0;var o;if(arguments.length>=2){o=arguments[1]}else{do{if(i in e){o=e[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i<n;i++){if(i in e){o=t.call(void 0,o,e[i],i,r)}}return o}}if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function tr(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0;if(!l(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var i,o=n-1;if(arguments.length>=2){i=arguments[1]}else{do{if(o in e){i=e[o--];break}if(--o<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(o<0){return i}do{if(o in this){i=t.call(void 0,i,e[o],o,r)}}while(o--);return i}}if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!==-1){Array.prototype.indexOf=function rr(t){var r=b&&f(this)==="[object String]"?this.split(""):B(this),e=r.length>>>0;if(!e){return-1}var n=0;if(arguments.length>1){n=$(arguments[1])}n=n>=0?n:Math.max(0,e+n);for(;n<e;n++){if(n in r&&r[n]===t){return n}}return-1}}if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!==-1){Array.prototype.lastIndexOf=function er(t){var r=b&&f(this)==="[object String]"?this.split(""):B(this),e=r.length>>>0;if(!e){return-1}var n=e-1;if(arguments.length>1){n=Math.min(n,$(arguments[1]))}n=n>=0?n:e-Math.abs(n);for(;n>=0;n--){if(n in r&&t===r[n]){return n}}return-1}}if(!Object.keys){var S=!{toString:null}.propertyIsEnumerable("toString"),x=function(){}.propertyIsEnumerable("prototype"),A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=A.length,O=function nr(t){var r=f(t);var e=r==="[object Arguments]";if(!e){e=!Array.isArray(r)&&t!==null&&typeof t==="object"&&typeof t.length==="number"&&t.length>=0&&l(t.callee)}return e};Object.keys=function ir(t){var r=l(t),e=O(t),n=t!==null&&typeof t==="object",i=n&&f(t)==="[object String]";if(!n&&!r&&!e){throw new TypeError("Object.keys called on a non-object")}var o=[];var a=x&&r;if(i||e){for(var u=0;u<t.length;++u){o.push(String(u))}}else{for(var p in t){if(!(a&&p==="prototype")&&s(t,p)){o.push(String(p))}}}if(S){var c=t.constructor,h=c&&c.prototype===t;for(var y=0;y<j;y++){var g=A[y];if(!(h&&g==="constructor")&&s(t,g)){o.push(g)}}}return o}}var E=-621987552e5,N="-000001";if(!Date.prototype.toISOString||new Date(E).toISOString().indexOf(N)===-1){Date.prototype.toISOString=function or(){var t,r,e,n,i;if(!isFinite(this)){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}n=this.getUTCFullYear();i=this.getUTCMonth();n+=Math.floor(i/12);i=(i%12+12)%12;t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()];n=(n<0?"-":n>9999?"+":"")+("00000"+Math.abs(n)).slice(0<=n&&n<=9999?-4:-6);r=t.length;while(r--){e=t[r];if(e<10){t[r]="0"+e}}return n+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}}var T=false;try{T=Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(E).toJSON().indexOf(N)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(I){}if(!T){Date.prototype.toJSON=function ar(t){var r=Object(this),e=P(r),n;if(typeof e==="number"&&!isFinite(e)){return null}n=r.toISOString;if(typeof n!=="function"){throw new TypeError("toISOString property is not callable")}return n.call(r)}}var D=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var _=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"));var M=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||M||_||!D){Date=function(t){function r(e,n,i,o,a,l,u){var p=arguments.length;if(this instanceof t){var s=p===1&&String(e)===e?new t(r.parse(e)):p>=7?new t(e,n,i,o,a,l,u):p>=6?new t(e,n,i,o,a,l):p>=5?new t(e,n,i,o,a):p>=4?new t(e,n,i,o):p>=3?new t(e,n,i):p>=2?new t(e,n):p>=1?new t(e):new t;s.constructor=r;return s}return t.apply(this,arguments)}var e=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];function i(t,r){var e=r>1?1:0;return n[r]+Math.floor((t-1969+e)/4)-Math.floor((t-1901+e)/100)+Math.floor((t-1601+e)/400)+365*(t-1970)}function o(r){return Number(new t(1970,0,1,0,0,0,r))}for(var a in t){r[a]=t[a]}r.now=t.now;r.UTC=t.UTC;r.prototype=t.prototype;r.prototype.constructor=r;r.parse=function l(r){var n=e.exec(r);if(n){var a=Number(n[1]),l=Number(n[2]||1)-1,u=Number(n[3]||1)-1,p=Number(n[4]||0),s=Number(n[5]||0),f=Number(n[6]||0),c=Math.floor(Number(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),y=n[9]==="-"?1:-1,g=Number(n[10]||0),v=Number(n[11]||0),d;if(p<(s>0||f>0||c>0?24:25)&&s<60&&f<60&&c<1e3&&l>-1&&l<12&&g<24&&v<60&&u>-1&&u<i(a,l+1)-i(a,l)){d=((i(a,l)+u)*24+p+g*y)*60;d=((d+s+v*y)*60+f)*1e3+c;if(h){d=o(d)}if(-864e13<=d&&d<=864e13){return d}}return NaN}return t.parse.apply(this,arguments)};return r}(Date)}if(!Date.now){Date.now=function lr(){return(new Date).getTime()}}if(!Number.prototype.toFixed||8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)==="0"||1.255.toFixed(2)!=="1.25"||0xde0b6b3a7640080.toFixed(0)!=="1000000000000000128"){(function(){var t,r,e,n;t=1e7;r=6;e=[0,0,0,0,0,0];function i(n,i){var o=-1;while(++o<r){i+=n*e[o];e[o]=i%t;i=Math.floor(i/t)}}function o(n){var i=r,o=0;while(--i>=0){o+=e[i];e[i]=Math.floor(o/n);o=o%n*t}}function a(){var t=r;var n="";while(--t>=0){if(n!==""||t===0||e[t]!==0){var i=String(e[t]);if(n===""){n=i}else{n+="0000000".slice(0,7-i.length)+i}}}return n}function l(t,r,e){return r===0?e:r%2===1?l(t,r-1,e*t):l(t*t,r/2,e)}function u(t){var r=0;while(t>=4096){r+=12;t/=4096}while(t>=2){r+=1;t/=2}return r}Number.prototype.toFixed=function p(t){var r,e,n,p,s,f,c,h;r=Number(t);r=r!==r?0:Math.floor(r);if(r<0||r>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}e=Number(this);if(e!==e){return"NaN"}if(e<=-1e21||e>=1e21){return String(e)}n="";if(e<0){n="-";e=-e}p="0";if(e>1e-21){s=u(e*l(2,69,1))-69;f=s<0?e*l(2,-s,1):e/l(2,s,1);f*=4503599627370496;s=52-s;if(s>0){i(0,f);c=r;while(c>=7){i(1e7,0);c-=7}i(l(10,c,1),0);c=s-1;while(c>=23){o(1<<23);c-=23}o(1<<c);i(1,1);o(2);p=a()}else{i(0,f);i(1<<-s,0);p=a()+"0.00000000000000000000".slice(2,2+r)}}if(r>0){h=p.length;if(h<=r){p=n+"0.0000000000000000000".slice(0,r-h+2)+p}else{p=n+p.slice(0,h-r)+"."+p.slice(h-r)}}else{p=n+p}return p}})()}var F=String.prototype.split;if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=/()??/.exec("")[1]===void 0;String.prototype.split=function(r,e){var n=this;if(r===void 0&&e===0)return[];if(Object.prototype.toString.call(r)!=="[object RegExp]"){return F.apply(this,arguments)}var i=[],o=(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.extended?"x":"")+(r.sticky?"y":""),a=0,l,u,p,s;r=new RegExp(r.source,o+"g");n+="";if(!t){l=new RegExp("^"+r.source+"$(?!\\s)",o)}e=e===void 0?-1>>>0:e>>>0;while(u=r.exec(n)){p=u.index+u[0].length;if(p>a){i.push(n.slice(a,u.index));if(!t&&u.length>1){u[0].replace(l,function(){for(var t=1;t<arguments.length-2;t++){if(arguments[t]===void 0){u[t]=void 0}}})}if(u.length>1&&u.index<n.length){Array.prototype.push.apply(i,u.slice(1))}s=u[0].length;a=p;if(i.length>=e){break}}if(r.lastIndex===u.index){r.lastIndex++}}if(a===n.length){if(s||!r.test("")){i.push("")}}else{i.push(n.slice(a))}return i.length>e?i.slice(0,e):i}})()}else if("0".split(void 0,0).length){String.prototype.split=function ur(t,r){if(t===void 0&&r===0)return[];return F.apply(this,arguments)}}var R=String.prototype.replace;var C=function(){var t=[];"x".replace(/x(.)?/g,function(r,e){t.push(e)});return t.length===1&&typeof t[0]==="undefined"}();if(!C){String.prototype.replace=function pr(t,r){var e=l(r);var n=u(t)&&/\)[*?]/.test(t.source);if(!e||!n){return R.apply(this,arguments)}else{var i=function(e){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var o=t.exec(e);t.lastIndex=i;o.push(arguments[n-2],arguments[n-1]);return r.apply(this,o)};return R.call(this,t,i)}}}if("".substr&&"0b".substr(-1)!=="b"){var k=String.prototype.substr;String.prototype.substr=function sr(t,r){return k.call(this,t<0?(t=this.length+t)<0?0:t:t,r)}}var U=" \n \f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var Z="\u200b";if(!String.prototype.trim||U.trim()||!Z.trim()){U="["+U+"]";var J=new RegExp("^"+U+U+"*"),X=new RegExp(U+U+"*$");String.prototype.trim=function fr(){if(this===void 0||this===null){throw new TypeError("can't convert "+this+" to object")}return String(this).replace(J,"").replace(X,"")}}if(parseInt(U+"08")!==8||parseInt(U+"0x16")!==22){parseInt=function(t){var r=/^0[xX]/;return function e(n,i){n=String(n).trim();if(!Number(i)){i=r.test(n)?16:10}return t(n,i)}}(parseInt)}function $(t){t=+t;if(t!==t){t=0}else if(t!==0&&t!==1/0&&t!==-(1/0)){t=(t>0||-1)*Math.floor(Math.abs(t))}return t}function G(t){var r=typeof t;return t===null||r==="undefined"||r==="boolean"||r==="number"||r==="string"}function P(t){var r,e,n;if(G(t)){return t}e=t.valueOf;if(l(e)){r=e.call(t);if(G(r)){return r}}n=t.toString;if(l(n)){r=n.call(t);if(G(r)){return r}}throw new TypeError}var B=function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return Object(t)}}); -//# sourceMappingURL=es5-shim.map \ No newline at end of file diff --git a/platforms/android/assets/www/lib/es5-shim/package.json b/platforms/android/assets/www/lib/es5-shim/package.json deleted file mode 100644 index a93a894a..00000000 --- a/platforms/android/assets/www/lib/es5-shim/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "homepage": "http://github.com/es-shims/es5-shim/", - "contributors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "bugs": { - "mail": "ljharb@gmail.com", - "url": "http://github.com/es-shims/es5-shim/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/es-shims/es5-shim/raw/master/LICENSE" - } - ], - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "http://github.com/es-shims/es5-shim.git" - }, - "scripts": { - "minify": "npm run minify-shim && npm run minify-sham", - "minify-shim": "uglifyjs es5-shim.js --comments --source-map=es5-shim.map -m -b ascii_only=true,beautify=false > es5-shim.min.js", - "minify-sham": "uglifyjs es5-sham.js --comments --source-map=es5-sham.map -m -b ascii_only=true,beautify=false > es5-sham.min.js", - "test": "jasmine-node --matchall tests/spec/" - }, - "devDependencies": { - "jasmine-node": "~1.14.2", - "uglify-js": "~2.4.12" - }, - "engines": { - "node": ">=0.4.0" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/18.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/25.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - } -} - diff --git a/platforms/android/assets/www/lib/es5-shim/shims.json b/platforms/android/assets/www/lib/es5-shim/shims.json deleted file mode 100644 index 1136162c..00000000 --- a/platforms/android/assets/www/lib/es5-shim/shims.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Object": { - "prototype": {} - "keys": "object-keys" - } -} - diff --git a/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.js b/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.js deleted file mode 100755 index 94567e05..00000000 --- a/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.js +++ /dev/null @@ -1,498 +0,0 @@ -if (typeof module !== 'undefined' && typeof exports !== 'undefined' && module.exports === exports){ - module.exports = 'highcharts-ng'; -} - -(function () { - 'use strict'; - /*global angular: false, Highcharts: false */ - - - angular.module('highcharts-ng', []) - .provider('highchartsNG', highchartsNGProvider) - .directive('highchart', ['highchartsNG', '$timeout', highchart]); - - function highchartsNGProvider(){ - var modules = []; - var basePath = false; - var lazyLoad = false; - return { - HIGHCHART: 'highcharts.js', - HIGHSTOCK: 'stock/highstock.js', - basePath: function (p) { - basePath = p; - }, - lazyLoad: function (list) { - if (list === undefined) { - modules = [this.HIGHCHART]; - } else { - modules = list; - } - lazyLoad = true; - }, - $get: ['$window', '$rootScope', function ($window, $rootScope) { - if (!basePath) { - basePath = (window.location.protocol === 'https:' ? 'https' : 'http') + '://code.highcharts.com/'; - } - return highchartsNG($window, $rootScope, lazyLoad, basePath, modules); - }] - }; - } - function highchartsNG($window, $rootScope, lazyload, basePath, modules) { - var readyQueue = []; - var loading = false; - return { - lazyLoad:lazyload, - ready: function (callback, thisArg) { - if (typeof $window.Highcharts !== 'undefined' || !lazyload) { - callback(); - } else { - readyQueue.push([callback, thisArg]); - if (loading) { - return; - } - loading = true; - var self = this; - if (typeof jQuery === 'undefined') { - modules.unshift('adapters/standalone-framework.js'); - } - var doWork = function () { - if (modules.length === 0) { - loading = false; - $rootScope.$apply(function () { - angular.forEach(readyQueue, function (e) { - // invoke callback passing 'thisArg' - e[0].apply(e[1], []); - }); - }); - } else { - var s = modules.shift(); - self.loadScript(s, doWork); - } - }; - doWork(); - } - }, - loadScript: function (path, callback) { - var s = document.createElement('script'); - s.type = 'text/javascript'; - s.src = basePath + path; - s.onload = callback; - document.getElementsByTagName('body')[0].appendChild(s); - }, - //IE8 support - indexOf: function (arr, find, i /*opt*/) { - if (i === undefined) i = 0; - if (i < 0) i += arr.length; - if (i < 0) i = 0; - for (var n = arr.length; i < n; i++) - if (i in arr && arr[i] === find) - return i; - return -1; - }, - - prependMethod: function (obj, method, func) { - var original = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - func.apply(this, args); - if (original) { - return original.apply(this, args); - } else { - return; - } - - }; - }, - - deepExtend: function deepExtend(destination, source) { - //Slightly strange behaviour in edge cases (e.g. passing in non objects) - //But does the job for current use cases. - if (angular.isArray(source)) { - destination = angular.isArray(destination) ? destination : []; - for (var i = 0; i < source.length; i++) { - destination[i] = deepExtend(destination[i] || {}, source[i]); - } - } else if (angular.isObject(source)) { - destination = angular.isObject(destination) ? destination : {}; - for (var property in source) { - destination[property] = deepExtend(destination[property] || {}, source[property]); - } - } else { - destination = source; - } - return destination; - } - }; - } - - function highchart(highchartsNGUtils, $timeout) { - - // acceptable shared state - var seriesId = 0; - var ensureIds = function (series) { - var changed = false; - angular.forEach(series, function(s) { - if (!angular.isDefined(s.id)) { - s.id = 'series-' + seriesId++; - changed = true; - } - }); - return changed; - }; - - // immutable - var axisNames = [ 'xAxis', 'yAxis' ]; - var chartTypeMap = { - 'stock': 'StockChart', - 'map': 'Map', - 'chart': 'Chart' - }; - - var getMergedOptions = function (scope, element, config) { - var mergedOptions = {}; - - var defaultOptions = { - chart: { - events: {} - }, - title: {}, - subtitle: {}, - series: [], - credits: {}, - plotOptions: {}, - navigator: {enabled: false}, - xAxis: { - events: {} - }, - yAxis: { - events: {} - } - }; - - if (config.options) { - mergedOptions = highchartsNGUtils.deepExtend(defaultOptions, config.options); - } else { - mergedOptions = defaultOptions; - } - mergedOptions.chart.renderTo = element[0]; - - angular.forEach(axisNames, function(axisName) { - if(angular.isDefined(config[axisName])) { - mergedOptions[axisName] = highchartsNGUtils.deepExtend(mergedOptions[axisName] || {}, config[axisName]); - - if(angular.isDefined(config[axisName].currentMin) || - angular.isDefined(config[axisName].currentMax)) { - - highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'selection', function(e){ - var thisChart = this; - if (e[axisName]) { - scope.$apply(function () { - scope.config[axisName].currentMin = e[axisName][0].min; - scope.config[axisName].currentMax = e[axisName][0].max; - }); - } else { - //handle reset button - zoom out to all - scope.$apply(function () { - scope.config[axisName].currentMin = thisChart[axisName][0].dataMin; - scope.config[axisName].currentMax = thisChart[axisName][0].dataMax; - }); - } - }); - - highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'addSeries', function(e){ - scope.config[axisName].currentMin = this[axisName][0].min || scope.config[axisName].currentMin; - scope.config[axisName].currentMax = this[axisName][0].max || scope.config[axisName].currentMax; - }); - highchartsNGUtils.prependMethod(mergedOptions[axisName].events, 'setExtremes', function (e) { - if (e.trigger && e.trigger !== 'zoom') { // zoom trigger is handled by selection event - $timeout(function () { - scope.config[axisName].currentMin = e.min; - scope.config[axisName].currentMax = e.max; - scope.config[axisName].min = e.min; // set min and max to adjust scrollbar/navigator - scope.config[axisName].max = e.max; - }, 0); - } - }); - } - } - }); - - if(config.title) { - mergedOptions.title = config.title; - } - if (config.subtitle) { - mergedOptions.subtitle = config.subtitle; - } - if (config.credits) { - mergedOptions.credits = config.credits; - } - if(config.size) { - if (config.size.width) { - mergedOptions.chart.width = config.size.width; - } - if (config.size.height) { - mergedOptions.chart.height = config.size.height; - } - } - return mergedOptions; - }; - - var updateZoom = function (axis, modelAxis) { - var extremes = axis.getExtremes(); - if(modelAxis.currentMin !== extremes.dataMin || modelAxis.currentMax !== extremes.dataMax) { - if (axis.setExtremes) { - axis.setExtremes(modelAxis.currentMin, modelAxis.currentMax, false); - } else { - axis.detachedsetExtremes(modelAxis.currentMin, modelAxis.currentMax, false); - } - } - }; - - var processExtremes = function(chart, axis, axisName) { - if(axis.currentMin || axis.currentMax) { - chart[axisName][0].setExtremes(axis.currentMin, axis.currentMax, true); - } - }; - - var chartOptionsWithoutEasyOptions = function (options) { - return angular.extend( - highchartsNGUtils.deepExtend({}, options), - { data: null, visible: null } - ); - }; - - var getChartType = function(scope) { - if (scope.config === undefined) return 'Chart'; - return chartTypeMap[('' + scope.config.chartType).toLowerCase()] || - (scope.config.useHighStocks ? 'StockChart' : 'Chart'); - }; - - var res = { - restrict: 'EAC', - replace: true, - template: '<div></div>', - scope: { - config: '=', - disableDataWatch: '=' - }, - link: function (scope, element, attrs) { - // We keep some chart-specific variables here as a closure - // instead of storing them on 'scope'. - - // prevSeriesOptions is maintained by processSeries - var prevSeriesOptions = {}; - - var processSeries = function(series) { - var i; - var ids = []; - - if(series) { - var setIds = ensureIds(series); - if(setIds && !scope.disableDataWatch) { - //If we have set some ids this will trigger another digest cycle. - //In this scenario just return early and let the next cycle take care of changes - return false; - } - - //Find series to add or update - angular.forEach(series, function(s) { - ids.push(s.id); - var chartSeries = chart.get(s.id); - if (chartSeries) { - if (!angular.equals(prevSeriesOptions[s.id], chartOptionsWithoutEasyOptions(s))) { - chartSeries.update(angular.copy(s), false); - } else { - if (s.visible !== undefined && chartSeries.visible !== s.visible) { - chartSeries.setVisible(s.visible, false); - } - chartSeries.setData(angular.copy(s.data), false); - } - } else { - chart.addSeries(angular.copy(s), false); - } - prevSeriesOptions[s.id] = chartOptionsWithoutEasyOptions(s); - }); - - // Shows no data text if all series are empty - if(scope.config.noData) { - var chartContainsData = false; - - for(i = 0; i < series.length; i++) { - if (series[i].data && series[i].data.length > 0) { - chartContainsData = true; - - break; - } - } - - if (!chartContainsData) { - chart.showLoading(scope.config.noData); - } else { - chart.hideLoading(); - } - } - } - - //Now remove any missing series - for(i = chart.series.length - 1; i >= 0; i--) { - var s = chart.series[i]; - if (s.options.id !== 'highcharts-navigator-series' && highchartsNGUtils.indexOf(ids, s.options.id) < 0) { - s.remove(false); - } - } - - return true; - }; - - // chart is maintained by initChart - var chart = false; - var initChart = function() { - if (chart) chart.destroy(); - prevSeriesOptions = {}; - var config = scope.config || {}; - var mergedOptions = getMergedOptions(scope, element, config); - var func = config.func || undefined; - var chartType = getChartType(scope); - - chart = new Highcharts[chartType](mergedOptions, func); - - for (var i = 0; i < axisNames.length; i++) { - if (config[axisNames[i]]) { - processExtremes(chart, config[axisNames[i]], axisNames[i]); - } - } - if(config.loading) { - chart.showLoading(); - } - config.getHighcharts = function() { - return chart; - }; - - }; - initChart(); - - - if(scope.disableDataWatch){ - scope.$watchCollection('config.series', function (newSeries, oldSeries) { - processSeries(newSeries); - chart.redraw(); - }); - } else { - scope.$watch('config.series', function (newSeries, oldSeries) { - var needsRedraw = processSeries(newSeries); - if(needsRedraw) { - chart.redraw(); - } - }, true); - } - - scope.$watch('config.title', function (newTitle) { - chart.setTitle(newTitle, true); - }, true); - - scope.$watch('config.subtitle', function (newSubtitle) { - chart.setTitle(true, newSubtitle); - }, true); - - scope.$watch('config.loading', function (loading) { - if(loading) { - chart.showLoading(loading === true ? null : loading); - } else { - chart.hideLoading(); - } - }); - scope.$watch('config.noData', function (noData) { - if(scope.config && scope.config.loading) { - chart.showLoading(noData); - } - }, true); - - scope.$watch('config.credits.enabled', function (enabled) { - if (enabled) { - chart.credits.show(); - } else if (chart.credits) { - chart.credits.hide(); - } - }); - - scope.$watch(getChartType, function (chartType, oldChartType) { - if (chartType === oldChartType) return; - initChart(); - }); - - angular.forEach(axisNames, function(axisName) { - scope.$watch('config.' + axisName, function(newAxes, oldAxes) { - if (newAxes === oldAxes || !newAxes) { - return; - } - - if (angular.isArray(newAxes)) { - - for (var axisIndex = 0; axisIndex < newAxes.length; axisIndex++) { - var axis = newAxes[axisIndex]; - - if (axisIndex < chart[axisName].length) { - chart[axisName][axisIndex].update(axis, false); - updateZoom(chart[axisName][axisIndex], angular.copy(axis)); - } - - } - - } else { - // update single axis - chart[axisName][0].update(newAxes, false); - updateZoom(chart[axisName][0], angular.copy(newAxes)); - } - - chart.redraw(); - }, true); - }); - scope.$watch('config.options', function (newOptions, oldOptions, scope) { - //do nothing when called on registration - if (newOptions === oldOptions) return; - initChart(); - processSeries(scope.config.series); - chart.redraw(); - }, true); - - scope.$watch('config.size', function (newSize, oldSize) { - if(newSize === oldSize) return; - if(newSize) { - chart.setSize(newSize.width || chart.chartWidth, newSize.height || chart.chartHeight); - } - }, true); - - scope.$on('highchartsng.reflow', function () { - chart.reflow(); - }); - - scope.$on('$destroy', function() { - if (chart) { - try{ - chart.destroy(); - }catch(ex){ - // fail silently as highcharts will throw exception if element doesn't exist - } - - $timeout(function(){ - element.remove(); - }, 0); - } - }); - - } - }; - - // override link fn if lazy loading is enabled - if(highchartsNGUtils.lazyLoad){ - var oldLink = res.link; - res.link = function(){ - var args = arguments; - highchartsNGUtils.ready(function(){ - oldLink.apply(this, args); - }, this); - }; - } - return res; - } -}()); diff --git a/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.min.js b/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.min.js deleted file mode 100755 index 0edccb1f..00000000 --- a/platforms/android/assets/www/lib/highcharts-ng/highcharts-ng.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * highcharts-ng - * @version v0.0.12-dev - 2015-09-12 - * @link https://github.com/pablojim/highcharts-ng - * @author Barry Fitzgerald <> - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="highcharts-ng"),function(){"use strict";function a(){var a=[],c=!1,d=!1;return{HIGHCHART:"highcharts.js",HIGHSTOCK:"stock/highstock.js",basePath:function(a){c=a},lazyLoad:function(b){a=void 0===b?[this.HIGHCHART]:b,d=!0},$get:["$window","$rootScope",function(e,f){return c||(c=("https:"===window.location.protocol?"https":"http")+"://code.highcharts.com/"),b(e,f,d,c,a)}]}}function b(a,b,c,d,e){var f=[],g=!1;return{lazyLoad:c,ready:function(d,h){if("undefined"==typeof a.Highcharts&&c){if(f.push([d,h]),g)return;g=!0;var i=this;"undefined"==typeof jQuery&&e.unshift("adapters/standalone-framework.js");var j=function(){if(0===e.length)g=!1,b.$apply(function(){angular.forEach(f,function(a){a[0].apply(a[1],[])})});else{var a=e.shift();i.loadScript(a,j)}};j()}else d()},loadScript:function(a,b){var c=document.createElement("script");c.type="text/javascript",c.src=d+a,c.onload=b,document.getElementsByTagName("body")[0].appendChild(c)},indexOf:function(a,b,c){void 0===c&&(c=0),0>c&&(c+=a.length),0>c&&(c=0);for(var d=a.length;d>c;c++)if(c in a&&a[c]===b)return c;return-1},prependMethod:function(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);return c.apply(this,a),d?d.apply(this,a):void 0}},deepExtend:function h(a,b){if(angular.isArray(b)){a=angular.isArray(a)?a:[];for(var c=0;c<b.length;c++)a[c]=h(a[c]||{},b[c])}else if(angular.isObject(b)){a=angular.isObject(a)?a:{};for(var d in b)a[d]=h(a[d]||{},b[d])}else a=b;return a}}}function c(a,b){var c=0,d=function(a){var b=!1;return angular.forEach(a,function(a){angular.isDefined(a.id)||(a.id="series-"+c++,b=!0)}),b},e=["xAxis","yAxis"],f={stock:"StockChart",map:"Map",chart:"Chart"},g=function(c,d,f){var g={},h={chart:{events:{}},title:{},subtitle:{},series:[],credits:{},plotOptions:{},navigator:{enabled:!1},xAxis:{events:{}},yAxis:{events:{}}};return g=f.options?a.deepExtend(h,f.options):h,g.chart.renderTo=d[0],angular.forEach(e,function(d){angular.isDefined(f[d])&&(g[d]=a.deepExtend(g[d]||{},f[d]),(angular.isDefined(f[d].currentMin)||angular.isDefined(f[d].currentMax))&&(a.prependMethod(g.chart.events,"selection",function(a){var b=this;a[d]?c.$apply(function(){c.config[d].currentMin=a[d][0].min,c.config[d].currentMax=a[d][0].max}):c.$apply(function(){c.config[d].currentMin=b[d][0].dataMin,c.config[d].currentMax=b[d][0].dataMax})}),a.prependMethod(g.chart.events,"addSeries",function(a){c.config[d].currentMin=this[d][0].min||c.config[d].currentMin,c.config[d].currentMax=this[d][0].max||c.config[d].currentMax}),a.prependMethod(g[d].events,"setExtremes",function(a){a.trigger&&"zoom"!==a.trigger&&b(function(){c.config[d].currentMin=a.min,c.config[d].currentMax=a.max,c.config[d].min=a.min,c.config[d].max=a.max},0)})))}),f.title&&(g.title=f.title),f.subtitle&&(g.subtitle=f.subtitle),f.credits&&(g.credits=f.credits),f.size&&(f.size.width&&(g.chart.width=f.size.width),f.size.height&&(g.chart.height=f.size.height)),g},h=function(a,b){var c=a.getExtremes();(b.currentMin!==c.dataMin||b.currentMax!==c.dataMax)&&(a.setExtremes?a.setExtremes(b.currentMin,b.currentMax,!1):a.detachedsetExtremes(b.currentMin,b.currentMax,!1))},i=function(a,b,c){(b.currentMin||b.currentMax)&&a[c][0].setExtremes(b.currentMin,b.currentMax,!0)},j=function(b){return angular.extend(a.deepExtend({},b),{data:null,visible:null})},k=function(a){return void 0===a.config?"Chart":f[(""+a.config.chartType).toLowerCase()]||(a.config.useHighStocks?"StockChart":"Chart")},l={restrict:"EAC",replace:!0,template:"<div></div>",scope:{config:"=",disableDataWatch:"="},link:function(c,f,l){var m={},n=function(b){var e,f=[];if(b){var g=d(b);if(g&&!c.disableDataWatch)return!1;if(angular.forEach(b,function(a){f.push(a.id);var b=o.get(a.id);b?angular.equals(m[a.id],j(a))?(void 0!==a.visible&&b.visible!==a.visible&&b.setVisible(a.visible,!1),b.setData(angular.copy(a.data),!1)):b.update(angular.copy(a),!1):o.addSeries(angular.copy(a),!1),m[a.id]=j(a)}),c.config.noData){var h=!1;for(e=0;e<b.length;e++)if(b[e].data&&b[e].data.length>0){h=!0;break}h?o.hideLoading():o.showLoading(c.config.noData)}}for(e=o.series.length-1;e>=0;e--){var i=o.series[e];"highcharts-navigator-series"!==i.options.id&&a.indexOf(f,i.options.id)<0&&i.remove(!1)}return!0},o=!1,p=function(){o&&o.destroy(),m={};var a=c.config||{},b=g(c,f,a),d=a.func||void 0,h=k(c);o=new Highcharts[h](b,d);for(var j=0;j<e.length;j++)a[e[j]]&&i(o,a[e[j]],e[j]);a.loading&&o.showLoading(),a.getHighcharts=function(){return o}};p(),c.disableDataWatch?c.$watchCollection("config.series",function(a,b){n(a),o.redraw()}):c.$watch("config.series",function(a,b){var c=n(a);c&&o.redraw()},!0),c.$watch("config.title",function(a){o.setTitle(a,!0)},!0),c.$watch("config.subtitle",function(a){o.setTitle(!0,a)},!0),c.$watch("config.loading",function(a){a?o.showLoading(a===!0?null:a):o.hideLoading()}),c.$watch("config.noData",function(a){c.config&&c.config.loading&&o.showLoading(a)},!0),c.$watch("config.credits.enabled",function(a){a?o.credits.show():o.credits&&o.credits.hide()}),c.$watch(k,function(a,b){a!==b&&p()}),angular.forEach(e,function(a){c.$watch("config."+a,function(b,c){if(b!==c&&b){if(angular.isArray(b))for(var d=0;d<b.length;d++){var e=b[d];d<o[a].length&&(o[a][d].update(e,!1),h(o[a][d],angular.copy(e)))}else o[a][0].update(b,!1),h(o[a][0],angular.copy(b));o.redraw()}},!0)}),c.$watch("config.options",function(a,b,c){a!==b&&(p(),n(c.config.series),o.redraw())},!0),c.$watch("config.size",function(a,b){a!==b&&a&&o.setSize(a.width||o.chartWidth,a.height||o.chartHeight)},!0),c.$on("highchartsng.reflow",function(){o.reflow()}),c.$on("$destroy",function(){if(o){try{o.destroy()}catch(a){}b(function(){f.remove()},0)}})}};if(a.lazyLoad){var m=l.link;l.link=function(){var b=arguments;a.ready(function(){m.apply(this,b)},this)}}return l}angular.module("highcharts-ng",[]).provider("highchartsNG",a).directive("highchart",["highchartsNG","$timeout",c])}(); \ No newline at end of file diff --git a/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.js b/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.js deleted file mode 100644 index 8b137891..00000000 --- a/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.src.js b/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.src.js deleted file mode 100644 index 8b137891..00000000 --- a/platforms/android/assets/www/lib/highcharts/adapters/standalone-framework.src.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/platforms/android/assets/www/lib/highcharts/highcharts-3d.js b/platforms/android/assets/www/lib/highcharts/highcharts-3d.js deleted file mode 100644 index 8c095f01..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts-3d.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - 3D features for Highcharts JS - - @license: www.highcharts.com/license -*/ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){function r(c,b,a){var e,f,g=b.options.chart.options3d,d=!1;a?(d=b.inverted,a=b.plotWidth/2,b=b.plotHeight/2,e=g.depth/2,f=u(g.depth,1)*u(g.viewDistance,0)):(a=b.plotLeft+b.plotWidth/2,b=b.plotTop+b.plotHeight/2,e=g.depth/2,f=u(g.depth,1)*u(g.viewDistance,0));var j=[],k=a,i=b,l=e,w=f,a=A*(d?g.beta:-g.beta),g=A*(d?-g.alpha:g.alpha),o=p(a),q=m(a),n=p(g),y=m(g),x,s,z,t,v,C;B(c,function(a){x=(d?a.y:a.x)- -k;s=(d?a.x:a.y)-i;z=(a.z||0)-l;t=q*x-o*z;v=-o*n*x+y*s-q*n*z;C=o*y*x+n*s+q*y*z;w>0&&w<Number.POSITIVE_INFINITY&&(t*=w/(C+l+w),v*=w/(C+l+w));t+=k;v+=i;C+=l;j.push({x:d?v:t,y:d?t:v,z:C})});return j}function D(c){return c!==void 0&&c!==null}function I(c){var b=0,a,e;for(a=0;a<c.length;a++)e=(a+1)%c.length,b+=c[a].x*c[e].y-c[e].x*c[a].y;return b/2}function E(c){var b=0,a;for(a=0;a<c.length;a++)b+=c[a].z;return c.length?b/c.length:0}function q(c,b,a,e,f,g,d,j){var k=[];g>f&&g-f>o/2+1.0E-4?(k=k.concat(q(c, -b,a,e,f,f+o/2,d,j)),k=k.concat(q(c,b,a,e,f+o/2,g,d,j))):g<f&&f-g>o/2+1.0E-4?(k=k.concat(q(c,b,a,e,f,f-o/2,d,j)),k=k.concat(q(c,b,a,e,f-o/2,g,d,j))):(k=g-f,k=["C",c+a*m(f)-a*F*k*p(f)+d,b+e*p(f)+e*F*k*m(f)+j,c+a*m(g)+a*F*k*p(g)+d,b+e*p(g)-e*F*k*m(g)+j,c+a*m(g)+d,b+e*p(g)+j]);return k}function J(c){if(this.chart.is3d()){var b=this.chart.options.plotOptions.column.grouping;if(b!==void 0&&!b&&this.group.zIndex!==void 0&&!this.zIndexSet)this.group.attr({zIndex:this.group.zIndex*10}),this.zIndexSet=!0;var a= -this.options,e=this.options.states;this.borderWidth=a.borderWidth=D(a.edgeWidth)?a.edgeWidth:1;d.each(this.data,function(b){if(b.y!==null)b=b.pointAttr,this.borderColor=d.pick(a.edgeColor,b[""].fill),b[""].stroke=this.borderColor,b.hover.stroke=d.pick(e.hover.edgeColor,this.borderColor),b.select.stroke=d.pick(e.select.edgeColor,this.borderColor)})}c.apply(this,[].slice.call(arguments,1))}var B=d.each,M=d.extend,N=d.inArray,G=d.merge,u=d.pick,K=d.wrap,o=Math.PI,A=o/180,p=Math.sin,m=Math.cos,L=Math.round; -d.perspective=r;var F=4*(Math.sqrt(2)-1)/3/(o/2);d.SVGRenderer.prototype.toLinePath=function(c,b){var a=[];d.each(c,function(b){a.push("L",b.x,b.y)});c.length&&(a[0]="M",b&&a.push("Z"));return a};d.SVGRenderer.prototype.cuboid=function(c){var b=this.g(),c=this.cuboidPath(c);b.front=this.path(c[0]).attr({zIndex:c[3],"stroke-linejoin":"round"}).add(b);b.top=this.path(c[1]).attr({zIndex:c[4],"stroke-linejoin":"round"}).add(b);b.side=this.path(c[2]).attr({zIndex:c[5],"stroke-linejoin":"round"}).add(b); -b.fillSetter=function(a){var b=d.Color(a).brighten(0.1).get(),c=d.Color(a).brighten(-0.1).get();this.front.attr({fill:a});this.top.attr({fill:b});this.side.attr({fill:c});this.color=a;return this};b.opacitySetter=function(a){this.front.attr({opacity:a});this.top.attr({opacity:a});this.side.attr({opacity:a});return this};b.attr=function(a){if(a.shapeArgs||D(a.x))a=this.renderer.cuboidPath(a.shapeArgs||a),this.front.attr({d:a[0],zIndex:a[3]}),this.top.attr({d:a[1],zIndex:a[4]}),this.side.attr({d:a[2], -zIndex:a[5]});else return d.SVGElement.prototype.attr.call(this,a);return this};b.animate=function(a,b,c){D(a.x)&&D(a.y)?(a=this.renderer.cuboidPath(a),this.front.attr({zIndex:a[3]}).animate({d:a[0]},b,c),this.top.attr({zIndex:a[4]}).animate({d:a[1]},b,c),this.side.attr({zIndex:a[5]}).animate({d:a[2]},b,c),this.attr({zIndex:-a[6]})):a.opacity?(this.front.animate(a,b,c),this.top.animate(a,b,c),this.side.animate(a,b,c)):d.SVGElement.prototype.animate.call(this,a,b,c);return this};b.destroy=function(){this.front.destroy(); -this.top.destroy();this.side.destroy();return null};b.attr({zIndex:-c[6]});return b};d.SVGRenderer.prototype.cuboidPath=function(c){function b(a){return i[a]}var a=c.x,e=c.y,f=c.z,g=c.height,h=c.width,j=c.depth,k=d.map,i=[{x:a,y:e,z:f},{x:a+h,y:e,z:f},{x:a+h,y:e+g,z:f},{x:a,y:e+g,z:f},{x:a,y:e+g,z:f+j},{x:a+h,y:e+g,z:f+j},{x:a+h,y:e,z:f+j},{x:a,y:e,z:f+j}],i=r(i,d.charts[this.chartIndex],c.insidePlotArea),f=function(a,c){var e=[],a=k(a,b),c=k(c,b);I(a)<0?e=a:I(c)<0&&(e=c);return e},c=f([3,2,1,0], -[7,6,5,4]),a=[4,5,2,3],e=f([1,6,7,0],a),f=f([1,2,5,6],[0,7,4,3]);return[this.toLinePath(c,!0),this.toLinePath(e,!0),this.toLinePath(f,!0),E(c),E(e),E(f),E(k(a,b))*9E9]};d.SVGRenderer.prototype.arc3d=function(c){function b(a){var b=!1,c={},e;for(e in a)N(e,f)!==-1&&(c[e]=a[e],delete a[e],b=!0);return b?c:!1}var a=this.g(),e=a.renderer,f="x,y,r,innerR,start,end".split(","),c=G(c);c.alpha*=A;c.beta*=A;a.top=e.path();a.side1=e.path();a.side2=e.path();a.inn=e.path();a.out=e.path();a.onAdd=function(){var b= -a.parentGroup;a.top.add(a);a.out.add(b);a.inn.add(b);a.side1.add(b);a.side2.add(b)};a.setPaths=function(b){var c=a.renderer.arc3dPath(b),e=c.zTop*100;a.attribs=b;a.top.attr({d:c.top,zIndex:c.zTop});a.inn.attr({d:c.inn,zIndex:c.zInn});a.out.attr({d:c.out,zIndex:c.zOut});a.side1.attr({d:c.side1,zIndex:c.zSide1});a.side2.attr({d:c.side2,zIndex:c.zSide2});a.zIndex=e;a.attr({zIndex:e});b.center&&(a.top.setRadialReference(b.center),delete b.center)};a.setPaths(c);a.fillSetter=function(a){var b=d.Color(a).brighten(-0.1).get(); -this.fill=a;this.side1.attr({fill:b});this.side2.attr({fill:b});this.inn.attr({fill:b});this.out.attr({fill:b});this.top.attr({fill:a});return this};B(["opacity","translateX","translateY","visibility"],function(b){a[b+"Setter"]=function(b,c){a[c]=b;B(["out","inn","side1","side2","top"],function(e){a[e].attr(c,b)})}});K(a,"attr",function(c,e,d){var f;if(typeof e==="object"&&(f=b(e)))M(a.attribs,f),a.setPaths(a.attribs);return c.call(this,e,d)});K(a,"animate",function(a,c,e,d){var f,l=this.attribs, -m;delete c.center;delete c.z;delete c.depth;delete c.alpha;delete c.beta;if(e=u(e,this.renderer.globalAnimation))if(typeof e!=="object"&&(e={}),c=G(c),f=b(c))m=f,e.step=function(a,b){function c(a){return l[a]+(u(m[a],l[a])-l[a])*b.pos}b.elem.setPaths(G(l,{x:c("x"),y:c("y"),r:c("r"),innerR:c("innerR"),start:c("start"),end:c("end")}))};return a.call(this,c,e,d)});a.destroy=function(){this.top.destroy();this.out.destroy();this.inn.destroy();this.side1.destroy();this.side2.destroy();d.SVGElement.prototype.destroy.call(this)}; -a.hide=function(){this.top.hide();this.out.hide();this.inn.hide();this.side1.hide();this.side2.hide()};a.show=function(){this.top.show();this.out.show();this.inn.show();this.side1.show();this.side2.show()};return a};d.SVGRenderer.prototype.arc3dPath=function(c){function b(a){a%=2*o;a>o&&(a=2*o-a);return a}var a=c.x,e=c.y,d=c.start,g=c.end-1.0E-5,h=c.r,j=c.innerR,k=c.depth,i=c.alpha,l=c.beta,w=m(d),u=p(d),c=m(g),r=p(g),n=h*m(l);h*=m(i);var y=j*m(l),x=j*m(i),j=k*p(l),s=k*p(i),k=["M",a+n*w,e+h*u],k= -k.concat(q(a,e,n,h,d,g,0,0)),k=k.concat(["L",a+y*c,e+x*r]),k=k.concat(q(a,e,y,x,g,d,0,0)),k=k.concat(["Z"]),z=l>0?o/2:0,l=i>0?0:o/2,z=d>-z?d:g>-z?-z:d,t=g<o-l?g:d<o-l?o-l:g,v=2*o-l,i=["M",a+n*m(z),e+h*p(z)],i=i.concat(q(a,e,n,h,z,t,0,0));g>v&&d<v?(i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]),i=i.concat(q(a,e,n,h,t,v,j,s)),i=i.concat(["L",a+n*m(v),e+h*p(v)]),i=i.concat(q(a,e,n,h,v,g,0,0)),i=i.concat(["L",a+n*m(g)+j,e+h*p(g)+s]),i=i.concat(q(a,e,n,h,g,v,j,s)),i=i.concat(["L",a+n*m(v),e+h*p(v)]),i=i.concat(q(a, -e,n,h,v,t,0,0))):g>o-l&&d<o-l&&(i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]),i=i.concat(q(a,e,n,h,t,g,j,s)),i=i.concat(["L",a+n*m(g),e+h*p(g)]),i=i.concat(q(a,e,n,h,g,t,0,0)));i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]);i=i.concat(q(a,e,n,h,t,z,j,s));i=i.concat(["Z"]);l=["M",a+y*w,e+x*u];l=l.concat(q(a,e,y,x,d,g,0,0));l=l.concat(["L",a+y*m(g)+j,e+x*p(g)+s]);l=l.concat(q(a,e,y,x,g,d,j,s));l=l.concat(["Z"]);w=["M",a+n*w,e+h*u,"L",a+n*w+j,e+h*u+s,"L",a+y*w+j,e+x*u+s,"L",a+y*w,e+x*u,"Z"];a=["M",a+n*c,e+h*r,"L", -a+n*c+j,e+h*r+s,"L",a+y*c+j,e+x*r+s,"L",a+y*c,e+x*r,"Z"];r=Math.atan2(s,-j);e=Math.abs(g+r);c=Math.abs(d+r);d=Math.abs((d+g)/2+r);e=b(e);c=b(c);d=b(d);d*=1E5;g=c*1E5;e*=1E5;return{top:k,zTop:o*1E5+1,out:i,zOut:Math.max(d,g,e),inn:l,zInn:Math.max(d,g,e),side1:w,zSide1:e*0.99,side2:a,zSide2:g*0.99}};d.Chart.prototype.is3d=function(){return this.options.chart.options3d&&this.options.chart.options3d.enabled};d.wrap(d.Chart.prototype,"isInsidePlot",function(c){return this.is3d()||c.apply(this,[].slice.call(arguments, -1))});d.getOptions().chart.options3d={enabled:!1,alpha:0,beta:0,depth:100,viewDistance:25,frame:{bottom:{size:1,color:"rgba(255,255,255,0)"},side:{size:1,color:"rgba(255,255,255,0)"},back:{size:1,color:"rgba(255,255,255,0)"}}};d.wrap(d.Chart.prototype,"init",function(c){var b=[].slice.call(arguments,1),a;if(b[0].chart&&b[0].chart.options3d&&b[0].chart.options3d.enabled)b[0].chart.options3d.alpha=(b[0].chart.options3d.alpha||0)%360,b[0].chart.options3d.beta=(b[0].chart.options3d.beta||0)%360,a=b[0].plotOptions|| -{},a=a.pie||{},a.borderColor=d.pick(a.borderColor,void 0);c.apply(this,b)});d.wrap(d.Chart.prototype,"setChartSize",function(c){c.apply(this,[].slice.call(arguments,1));if(this.is3d()){var b=this.inverted,a=this.clipBox,e=this.margin;a[b?"y":"x"]=-(e[3]||0);a[b?"x":"y"]=-(e[0]||0);a[b?"height":"width"]=this.chartWidth+(e[3]||0)+(e[1]||0);a[b?"width":"height"]=this.chartHeight+(e[0]||0)+(e[2]||0)}});d.wrap(d.Chart.prototype,"redraw",function(c){if(this.is3d())this.isDirtyBox=!0;c.apply(this,[].slice.call(arguments, -1))});d.wrap(d.Chart.prototype,"renderSeries",function(c){var b=this.series.length;if(this.is3d())for(;b--;)c=this.series[b],c.translate(),c.render();else c.call(this)});d.Chart.prototype.retrieveStacks=function(c){var b=this.series,a={},e,f=1;d.each(this.series,function(d){e=u(d.options.stack,c?0:b.length-1-d.index);a[e]?a[e].series.push(d):(a[e]={series:[d],position:f},f++)});a.totalStacks=f+1;return a};d.wrap(d.Axis.prototype,"setOptions",function(c,b){var a;c.call(this,b);if(this.chart.is3d())a= -this.options,a.tickWidth=d.pick(a.tickWidth,0),a.gridLineWidth=d.pick(a.gridLineWidth,1)});d.wrap(d.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=b.renderer,e=b.options.chart.options3d,d=e.frame,g=d.bottom,h=d.back,d=d.side,j=e.depth,k=this.height,i=this.width,l=this.left,m=this.top;if(!this.isZAxis)this.horiz?(h={x:l,y:m+(b.xAxis[0].opposite?-g.size:k),z:0,width:i,height:g.size,depth:j,insidePlotArea:!1},this.bottomFrame?this.bottomFrame.animate(h): -this.bottomFrame=a.cuboid(h).attr({fill:g.color,zIndex:b.yAxis[0].reversed&&e.alpha>0?4:-1}).css({stroke:g.color}).add()):(e={x:l+(b.yAxis[0].opposite?0:-d.size),y:m+(b.xAxis[0].opposite?-g.size:0),z:j,width:i+d.size,height:k+g.size,depth:h.size,insidePlotArea:!1},this.backFrame?this.backFrame.animate(e):this.backFrame=a.cuboid(e).attr({fill:h.color,zIndex:-3}).css({stroke:h.color}).add(),b={x:l+(b.yAxis[0].opposite?i:-d.size),y:m+(b.xAxis[0].opposite?-g.size:0),z:0,width:d.size,height:k+g.size,depth:j, -insidePlotArea:!1},this.sideFrame?this.sideFrame.animate(b):this.sideFrame=a.cuboid(b).attr({fill:d.color,zIndex:-2}).css({stroke:d.color}).add())}});d.wrap(d.Axis.prototype,"getPlotLinePath",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.chart.is3d())return b;if(b===null)return b;var a=this.chart,d=a.options.chart.options3d,a=this.isZAxis?a.plotWidth:d.depth,d=this.opposite;this.horiz&&(d=!d);b=[this.swapZ({x:b[1],y:b[2],z:d?a:0}),this.swapZ({x:b[1],y:b[2],z:a}),this.swapZ({x:b[4], -y:b[5],z:a}),this.swapZ({x:b[4],y:b[5],z:d?0:a})];b=r(b,this.chart,!1);return b=this.chart.renderer.toLinePath(b,!1)});d.wrap(d.Axis.prototype,"getLinePath",function(c){return this.chart.is3d()?[]:c.apply(this,[].slice.call(arguments,1))});d.wrap(d.Axis.prototype,"getPlotBandPath",function(c){if(!this.chart.is3d())return c.apply(this,[].slice.call(arguments,1));var b=arguments,a=b[1],b=this.getPlotLinePath(b[2]);(a=this.getPlotLinePath(a))&&b?a.push("L",b[10],b[11],"L",b[7],b[8],"L",b[4],b[5],"L", -b[1],b[2]):a=null;return a});d.wrap(d.Tick.prototype,"getMarkPath",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return b;b=[this.axis.swapZ({x:b[1],y:b[2],z:0}),this.axis.swapZ({x:b[4],y:b[5],z:0})];b=r(b,this.axis.chart,!1);return b=["M",b[0].x,b[0].y,"L",b[1].x,b[1].y]});d.wrap(d.Tick.prototype,"getLabelPosition",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return b;var a=r([this.axis.swapZ({x:b.x,y:b.y,z:0})],this.axis.chart, -!1)[0];a.x-=!this.axis.horiz&&this.axis.opposite?this.axis.transA:0;a.old=b;return a});d.wrap(d.Tick.prototype,"handleOverflow",function(c,b){if(this.axis.chart.is3d())b=b.old;return c.call(this,b)});d.wrap(d.Axis.prototype,"getTitlePosition",function(c){var b=this.chart.is3d(),a,d;if(b)d=this.axisTitleMargin,this.axisTitleMargin=0;a=c.apply(this,[].slice.call(arguments,1));if(b)a=r([this.swapZ({x:a.x,y:a.y,z:0})],this.chart,!1)[0],a[this.horiz?"y":"x"]+=(this.horiz?1:-1)*(this.opposite?-1:1)*d,this.axisTitleMargin= -d;return a});d.wrap(d.Axis.prototype,"drawCrosshair",function(c){var b=arguments;this.chart.is3d()&&b[2]&&(b[2]={plotX:b[2].plotXold||b[2].plotX,plotY:b[2].plotYold||b[2].plotY});c.apply(this,[].slice.call(b,1))});d.Axis.prototype.swapZ=function(c,b){if(this.isZAxis){var a=b?0:this.chart.plotLeft,d=this.chart;return{x:a+(d.yAxis[0].opposite?c.z:d.xAxis[0].width-c.z),y:c.y,z:c.x-a}}return c};var H=d.ZAxis=function(){this.isZAxis=!0;this.init.apply(this,arguments)};d.extend(H.prototype,d.Axis.prototype); -d.extend(H.prototype,{setOptions:function(c){c=d.merge({offset:0,lineWidth:0},c);d.Axis.prototype.setOptions.call(this,c);this.coll="zAxis"},setAxisSize:function(){d.Axis.prototype.setAxisSize.call(this);this.width=this.len=this.chart.options.chart.options3d.depth;this.right=this.chart.chartWidth-this.width-this.left},getSeriesExtremes:function(){var c=this,b=c.chart;c.hasVisibleSeries=!1;c.dataMin=c.dataMax=c.ignoreMinPadding=c.ignoreMaxPadding=null;c.buildStacks&&c.buildStacks();d.each(c.series, -function(a){if(a.visible||!b.options.chart.ignoreHiddenSeries)if(c.hasVisibleSeries=!0,a=a.zData,a.length)c.dataMin=Math.min(u(c.dataMin,a[0]),Math.min.apply(null,a)),c.dataMax=Math.max(u(c.dataMax,a[0]),Math.max.apply(null,a))})}});d.wrap(d.Chart.prototype,"getAxes",function(c){var b=this,a=this.options,a=a.zAxis=d.splat(a.zAxis||{});c.call(this);if(b.is3d())this.zAxis=[],d.each(a,function(a,c){a.index=c;a.isX=!0;(new H(b,a)).setScale()})});d.wrap(d.seriesTypes.column.prototype,"translate",function(c){c.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=this.options,e=a.depth||25,f=(a.stacking?a.stack||0:this._i)*(e+(a.groupZPadding||1));a.grouping!==!1&&(f=0);f+=a.groupZPadding||1;d.each(this.data,function(a){if(a.y!==null){var c=a.shapeArgs,d=a.tooltipPos;a.shapeType="cuboid";c.z=f;c.depth=e;c.insidePlotArea=!0;d=r([{x:d[0],y:d[1],z:f}],b,!1)[0];a.tooltipPos=[d.x,d.y]}});this.z=f}});d.wrap(d.seriesTypes.column.prototype,"animate",function(c){if(this.chart.is3d()){var b=arguments[1], -a=this.yAxis,e=this,f=this.yAxis.reversed;if(d.svg)b?d.each(e.data,function(b){if(b.y!==null&&(b.height=b.shapeArgs.height,b.shapey=b.shapeArgs.y,b.shapeArgs.height=1,!f))b.shapeArgs.y=b.stackY?b.plotY+a.translate(b.stackY):b.plotY+(b.negative?-b.height:b.height)}):(d.each(e.data,function(a){if(a.y!==null)a.shapeArgs.height=a.height,a.shapeArgs.y=a.shapey,a.graphic&&a.graphic.animate(a.shapeArgs,e.options.animation)}),this.drawDataLabels(),e.animate=null)}else c.apply(this,[].slice.call(arguments, -1))});d.wrap(d.seriesTypes.column.prototype,"init",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.options,a=b.grouping,d=b.stacking,f=u(this.yAxis.options.reversedStacks,!0),g=0;if(a===void 0||a){a=this.chart.retrieveStacks(d);g=b.stack||0;for(d=0;d<a[g].series.length;d++)if(a[g].series[d]===this)break;g=10*(a.totalStacks-a[g].position)+(f?d:-d);this.xAxis.reversed||(g=a.totalStacks*10-g)}b.zIndex=g}});d.wrap(d.Series.prototype,"alignDataLabel",function(c){if(this.chart.is3d()&& -(this.type==="column"||this.type==="columnrange")){var b=arguments[4],a={x:b.x,y:b.y,z:this.z},a=r([a],this.chart,!0)[0];b.x=a.x;b.y=a.y}c.apply(this,[].slice.call(arguments,1))});d.seriesTypes.columnrange&&d.wrap(d.seriesTypes.columnrange.prototype,"drawPoints",J);d.wrap(d.seriesTypes.column.prototype,"drawPoints",J);d.wrap(d.seriesTypes.pie.prototype,"translate",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this,a=b.options,d=a.depth||0,f=b.chart.options.chart.options3d, -g=f.alpha,h=f.beta,j=a.stacking?(a.stack||0)*d:b._i*d;j+=d/2;a.grouping!==!1&&(j=0);B(b.data,function(c){var f=c.shapeArgs;c.shapeType="arc3d";f.z=j;f.depth=d*0.75;f.alpha=g;f.beta=h;f.center=b.center;f=(f.end+f.start)/2;c.slicedTranslation={translateX:L(m(f)*a.slicedOffset*m(g*A)),translateY:L(p(f)*a.slicedOffset*m(g*A))}})}});d.wrap(d.seriesTypes.pie.prototype.pointClass.prototype,"haloPath",function(c){var b=arguments;return this.series.chart.is3d()?[]:c.call(this,b[1])});d.wrap(d.seriesTypes.pie.prototype, -"drawPoints",function(c){var b=this.options,a=b.states;if(this.chart.is3d())this.borderWidth=b.borderWidth=b.edgeWidth||1,this.borderColor=b.edgeColor=d.pick(b.edgeColor,b.borderColor,void 0),a.hover.borderColor=d.pick(a.hover.edgeColor,this.borderColor),a.hover.borderWidth=d.pick(a.hover.edgeWidth,this.borderWidth),a.select.borderColor=d.pick(a.select.edgeColor,this.borderColor),a.select.borderWidth=d.pick(a.select.edgeWidth,this.borderWidth),B(this.data,function(b){var c=b.pointAttr;c[""].stroke= -b.series.borderColor||b.color;c[""]["stroke-width"]=b.series.borderWidth;c.hover.stroke=a.hover.borderColor;c.hover["stroke-width"]=a.hover.borderWidth;c.select.stroke=a.select.borderColor;c.select["stroke-width"]=a.select.borderWidth});c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&B(this.points,function(a){var b=a.graphic;if(b)b[a.y?"show":"hide"]()})});d.wrap(d.seriesTypes.pie.prototype,"drawDataLabels",function(c){if(this.chart.is3d()){var b=this.chart.options.chart.options3d;B(this.data, -function(a){var c=a.shapeArgs,d=c.r,g=(c.beta||b.beta)*A,h=(c.start+c.end)/2,j=a.labelPos,k=-d*(1-m((c.alpha||b.alpha)*A))*p(h),i=d*(m(g)-1)*m(h);B([0,2,4],function(a){j[a]+=i;j[a+1]+=k})})}c.apply(this,[].slice.call(arguments,1))});d.wrap(d.seriesTypes.pie.prototype,"addPoint",function(c){c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&this.update(this.userOptions,!0)});d.wrap(d.seriesTypes.pie.prototype,"animate",function(c){if(this.chart.is3d()){var b=arguments[1],a=this.options.animation, -e=this.center,f=this.group,g=this.markerGroup;if(d.svg)if(a===!0&&(a={}),b){if(f.oldtranslateX=f.translateX,f.oldtranslateY=f.translateY,b={translateX:e[0],translateY:e[1],scaleX:0.001,scaleY:0.001},f.attr(b),g)g.attrSetters=f.attrSetters,g.attr(b)}else b={translateX:f.oldtranslateX,translateY:f.oldtranslateY,scaleX:1,scaleY:1},f.animate(b,a),g&&g.animate(b,a),this.animate=null}else c.apply(this,[].slice.call(arguments,1))});d.wrap(d.seriesTypes.scatter.prototype,"translate",function(c){c.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=d.pick(this.zAxis,b.options.zAxis[0]),e=[],f,g,h;for(h=0;h<this.data.length;h++)f=this.data[h],g=a.isLog&&a.val2lin?a.val2lin(f.z):f.z,f.plotZ=a.translate(g),f.isInside=f.isInside?g>=a.min&&g<=a.max:!1,e.push({x:f.plotX,y:f.plotY,z:f.plotZ});b=r(e,b,!0);for(h=0;h<this.data.length;h++)f=this.data[h],a=b[h],f.plotXold=f.plotX,f.plotYold=f.plotY,f.plotX=a.x,f.plotY=a.y,f.plotZ=a.z}});d.wrap(d.seriesTypes.scatter.prototype,"init",function(c, -b,a){if(b.is3d())this.axisTypes=["xAxis","yAxis","zAxis"],this.pointArrayMap=["x","y","z"],this.parallelArrays=["x","y","z"];c=c.apply(this,[b,a]);if(this.chart.is3d())this.tooltipOptions.pointFormat=this.userOptions.tooltip?this.userOptions.tooltip.pointFormat||"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>":"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>";return c});if(d.VMLRenderer)d.setOptions({animate:!1}),d.VMLRenderer.prototype.cuboid=d.SVGRenderer.prototype.cuboid, -d.VMLRenderer.prototype.cuboidPath=d.SVGRenderer.prototype.cuboidPath,d.VMLRenderer.prototype.toLinePath=d.SVGRenderer.prototype.toLinePath,d.VMLRenderer.prototype.createElement3D=d.SVGRenderer.prototype.createElement3D,d.VMLRenderer.prototype.arc3d=function(c){c=d.SVGRenderer.prototype.arc3d.call(this,c);c.css({zIndex:c.zIndex});return c},d.VMLRenderer.prototype.arc3dPath=d.SVGRenderer.prototype.arc3dPath,d.wrap(d.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));this.sideFrame&& -(this.sideFrame.css({zIndex:0}),this.sideFrame.front.attr({fill:this.sideFrame.color}));this.bottomFrame&&(this.bottomFrame.css({zIndex:1}),this.bottomFrame.front.attr({fill:this.bottomFrame.color}));this.backFrame&&(this.backFrame.css({zIndex:0}),this.backFrame.front.attr({fill:this.backFrame.color}))})}); diff --git a/platforms/android/assets/www/lib/highcharts/highcharts-3d.src.js b/platforms/android/assets/www/lib/highcharts/highcharts-3d.src.js deleted file mode 100644 index 679b98dd..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts-3d.src.js +++ /dev/null @@ -1,1712 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * 3D features for Highcharts JS - * - * @license: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { -/** - Shorthands for often used function - */ - var each = Highcharts.each, - extend = Highcharts.extend, - inArray = Highcharts.inArray, - merge = Highcharts.merge, - pick = Highcharts.pick, - wrap = Highcharts.wrap; - /** - * Mathematical Functionility - */ - var PI = Math.PI, - deg2rad = (PI / 180), // degrees to radians - sin = Math.sin, - cos = Math.cos, - round = Math.round; - - /** - * Transforms a given array of points according to the angles in chart.options. - * Parameters: - * - points: the array of points - * - chart: the chart - * - insidePlotArea: wether to verifiy the points are inside the plotArea - * Returns: - * - an array of transformed points - */ - function perspective(points, chart, insidePlotArea) { - var options3d = chart.options.chart.options3d, - inverted = false, - origin; - - if (insidePlotArea) { - inverted = chart.inverted; - origin = { - x: chart.plotWidth / 2, - y: chart.plotHeight / 2, - z: options3d.depth / 2, - vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0) - }; - } else { - origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: options3d.depth / 2, - vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0) - }; - } - - var result = [], - xe = origin.x, - ye = origin.y, - ze = origin.z, - vd = origin.vd, - angle1 = deg2rad * (inverted ? options3d.beta : -options3d.beta), - angle2 = deg2rad * (inverted ? -options3d.alpha : options3d.alpha), - s1 = sin(angle1), - c1 = cos(angle1), - s2 = sin(angle2), - c2 = cos(angle2); - - var x, y, z, px, py, pz; - - // Transform each point - each(points, function (point) { - x = (inverted ? point.y : point.x) - xe; - y = (inverted ? point.x : point.y) - ye; - z = (point.z || 0) - ze; - - // Apply 3-D rotation - // Euler Angles (XYZ): cosA = cos(Alfa|Roll), cosB = cos(Beta|Pitch), cosG = cos(Gamma|Yaw) - // - // Composite rotation: - // | cosB * cosG | cosB * sinG | -sinB | - // | sinA * sinB * cosG - cosA * sinG | sinA * sinB * sinG + cosA * cosG | sinA * cosB | - // | cosA * sinB * cosG + sinA * sinG | cosA * sinB * sinG - sinA * cosG | cosA * cosB | - // - // Now, Gamma/Yaw is not used (angle=0), so we assume cosG = 1 and sinG = 0, so we get: - // | cosB | 0 | - sinB | - // | sinA * sinB | cosA | sinA * cosB | - // | cosA * sinB | - sinA | cosA * cosB | - // - // But in browsers, y is reversed, so we get sinA => -sinA. The general result is: - // | cosB | 0 | - sinB | | x | | px | - // | - sinA * sinB | cosA | - sinA * cosB | x | y | = | py | - // | cosA * sinB | sinA | cosA * cosB | | z | | pz | - // - // Result: - px = c1 * x - s1 * z; - py = -s1 * s2 * x + c2 * y - c1 * s2 * z; - pz = s1 * c2 * x + s2 * y + c1 * c2 * z; - - - // Apply perspective - if ((vd > 0) && (vd < Number.POSITIVE_INFINITY)) { - px = px * (vd / (pz + ze + vd)); - py = py * (vd / (pz + ze + vd)); - } - - //Apply translation - px = px + xe; - py = py + ye; - pz = pz + ze; - - result.push({ - x: (inverted ? py : px), - y: (inverted ? px : py), - z: pz - }); - }); - return result; - } - // Make function acessible to plugins - Highcharts.perspective = perspective; - /*** - EXTENSION TO THE SVG-RENDERER TO ENABLE 3D SHAPES - ***/ - ////// HELPER METHODS ////// - - var dFactor = (4 * (Math.sqrt(2) - 1) / 3) / (PI / 2); - - function defined(obj) { - return obj !== undefined && obj !== null; - } - - //Shoelace algorithm -- http://en.wikipedia.org/wiki/Shoelace_formula - function shapeArea(vertexes) { - var area = 0, - i, - j; - for (i = 0; i < vertexes.length; i++) { - j = (i + 1) % vertexes.length; - area += vertexes[i].x * vertexes[j].y - vertexes[j].x * vertexes[i].y; - } - return area / 2; - } - - function averageZ(vertexes) { - var z = 0, - i; - for (i = 0; i < vertexes.length; i++) { - z += vertexes[i].z; - } - return vertexes.length ? z / vertexes.length : 0; - } - - /** Method to construct a curved path - * Can 'wrap' around more then 180 degrees - */ - function curveTo(cx, cy, rx, ry, start, end, dx, dy) { - var result = []; - if ((end > start) && (end - start > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start + (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start + (PI / 2), end, dx, dy)); - } else if ((end < start) && (start - end > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start - (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start - (PI / 2), end, dx, dy)); - } else { - var arcAngle = end - start; - result = [ - 'C', - cx + (rx * cos(start)) - ((rx * dFactor * arcAngle) * sin(start)) + dx, - cy + (ry * sin(start)) + ((ry * dFactor * arcAngle) * cos(start)) + dy, - cx + (rx * cos(end)) + ((rx * dFactor * arcAngle) * sin(end)) + dx, - cy + (ry * sin(end)) - ((ry * dFactor * arcAngle) * cos(end)) + dy, - - cx + (rx * cos(end)) + dx, - cy + (ry * sin(end)) + dy - ]; - } - return result; - } - - Highcharts.SVGRenderer.prototype.toLinePath = function (points, closed) { - var result = []; - - // Put "L x y" for each point - Highcharts.each(points, function (point) { - result.push('L', point.x, point.y); - }); - - if (points.length) { - // Set the first element to M - result[0] = 'M'; - - // If it is a closed line, add Z - if (closed) { - result.push('Z'); - } - } - - return result; - }; - - ////// CUBOIDS ////// - Highcharts.SVGRenderer.prototype.cuboid = function (shapeArgs) { - - var result = this.g(), - paths = this.cuboidPath(shapeArgs); - - // create the 3 sides - result.front = this.path(paths[0]).attr({ zIndex: paths[3], 'stroke-linejoin': 'round' }).add(result); - result.top = this.path(paths[1]).attr({ zIndex: paths[4], 'stroke-linejoin': 'round' }).add(result); - result.side = this.path(paths[2]).attr({ zIndex: paths[5], 'stroke-linejoin': 'round' }).add(result); - - // apply the fill everywhere, the top a bit brighter, the side a bit darker - result.fillSetter = function (color) { - var c0 = color, - c1 = Highcharts.Color(color).brighten(0.1).get(), - c2 = Highcharts.Color(color).brighten(-0.1).get(); - - this.front.attr({ fill: c0 }); - this.top.attr({ fill: c1 }); - this.side.attr({ fill: c2 }); - - this.color = color; - return this; - }; - - // apply opacaity everywhere - result.opacitySetter = function (opacity) { - this.front.attr({ opacity: opacity }); - this.top.attr({ opacity: opacity }); - this.side.attr({ opacity: opacity }); - return this; - }; - - result.attr = function (args) { - if (args.shapeArgs || defined(args.x)) { - var shapeArgs = args.shapeArgs || args; - var paths = this.renderer.cuboidPath(shapeArgs); - this.front.attr({ d: paths[0], zIndex: paths[3] }); - this.top.attr({ d: paths[1], zIndex: paths[4] }); - this.side.attr({ d: paths[2], zIndex: paths[5] }); - } else { - return Highcharts.SVGElement.prototype.attr.call(this, args); // getter returns value - } - - return this; - }; - - result.animate = function (args, duration, complete) { - if (defined(args.x) && defined(args.y)) { - var paths = this.renderer.cuboidPath(args); - this.front.attr({ zIndex: paths[3] }).animate({ d: paths[0] }, duration, complete); - this.top.attr({ zIndex: paths[4] }).animate({ d: paths[1] }, duration, complete); - this.side.attr({ zIndex: paths[5] }).animate({ d: paths[2] }, duration, complete); - this.attr({ - zIndex: -paths[6] // #4774 - }); - } else if (args.opacity) { - this.front.animate(args, duration, complete); - this.top.animate(args, duration, complete); - this.side.animate(args, duration, complete); - } else { - Highcharts.SVGElement.prototype.animate.call(this, args, duration, complete); - } - return this; - }; - - // destroy all children - result.destroy = function () { - this.front.destroy(); - this.top.destroy(); - this.side.destroy(); - - return null; - }; - - // Apply the Z index to the cuboid group - result.attr({ zIndex: -paths[6] }); - - return result; - }; - - /** - * Generates a cuboid - */ - Highcharts.SVGRenderer.prototype.cuboidPath = function (shapeArgs) { - var x = shapeArgs.x, - y = shapeArgs.y, - z = shapeArgs.z, - h = shapeArgs.height, - w = shapeArgs.width, - d = shapeArgs.depth, - chart = Highcharts.charts[this.chartIndex], - map = Highcharts.map; - - // The 8 corners of the cube - var pArr = [ - { x: x, y: y, z: z }, - { x: x + w, y: y, z: z }, - { x: x + w, y: y + h, z: z }, - { x: x, y: y + h, z: z }, - { x: x, y: y + h, z: z + d }, - { x: x + w, y: y + h, z: z + d }, - { x: x + w, y: y, z: z + d }, - { x: x, y: y, z: z + d } - ]; - - // apply perspective - pArr = perspective(pArr, chart, shapeArgs.insidePlotArea); - - // helper method to decide which side is visible - function mapPath(i) { - return pArr[i]; - } - var pickShape = function (path1, path2) { - var ret = []; - path1 = map(path1, mapPath); - path2 = map(path2, mapPath); - if (shapeArea(path1) < 0) { - ret = path1; - } else if (shapeArea(path2) < 0) { - ret = path2; - } - return ret; - }; - - // front or back - var front = [3, 2, 1, 0]; - var back = [7, 6, 5, 4]; - var path1 = pickShape(front, back); - - // top or bottom - var top = [1, 6, 7, 0]; - var bottom = [4, 5, 2, 3]; - var path2 = pickShape(top, bottom); - - // side - var right = [1, 2, 5, 6]; - var left = [0, 7, 4, 3]; - var path3 = pickShape(right, left); - - return [this.toLinePath(path1, true), this.toLinePath(path2, true), this.toLinePath(path3, true), averageZ(path1), averageZ(path2), averageZ(path3), averageZ(map(bottom, mapPath)) * 9e9]; // #4774 - }; - - ////// SECTORS ////// - Highcharts.SVGRenderer.prototype.arc3d = function (attribs) { - - var wrapper = this.g(), - renderer = wrapper.renderer, - customAttribs = ['x', 'y', 'r', 'innerR', 'start', 'end']; - - /** - * Get custom attributes. Mutate the original object and return an object with only custom attr. - */ - function suckOutCustom(params) { - var hasCA = false, - ca = {}; - for (var key in params) { - if (inArray(key, customAttribs) !== -1) { - ca[key] = params[key]; - delete params[key]; - hasCA = true; - } - } - return hasCA ? ca : false; - } - - attribs = merge(attribs); - - attribs.alpha *= deg2rad; - attribs.beta *= deg2rad; - - // Create the different sub sections of the shape - wrapper.top = renderer.path(); - wrapper.side1 = renderer.path(); - wrapper.side2 = renderer.path(); - wrapper.inn = renderer.path(); - wrapper.out = renderer.path(); - - /** - * Add all faces - */ - wrapper.onAdd = function () { - var parent = wrapper.parentGroup; - wrapper.top.add(wrapper); - wrapper.out.add(parent); - wrapper.inn.add(parent); - wrapper.side1.add(parent); - wrapper.side2.add(parent); - }; - - /** - * Compute the transformed paths and set them to the composite shapes - */ - wrapper.setPaths = function (attribs) { - - var paths = wrapper.renderer.arc3dPath(attribs), - zIndex = paths.zTop * 100; - - wrapper.attribs = attribs; - - wrapper.top.attr({ d: paths.top, zIndex: paths.zTop }); - wrapper.inn.attr({ d: paths.inn, zIndex: paths.zInn }); - wrapper.out.attr({ d: paths.out, zIndex: paths.zOut }); - wrapper.side1.attr({ d: paths.side1, zIndex: paths.zSide1 }); - wrapper.side2.attr({ d: paths.side2, zIndex: paths.zSide2 }); - - - // show all children - wrapper.zIndex = zIndex; - wrapper.attr({ zIndex: zIndex }); - - // Set the radial gradient center the first time - if (attribs.center) { - wrapper.top.setRadialReference(attribs.center); - delete attribs.center; - } - }; - wrapper.setPaths(attribs); - - // Apply the fill to the top and a darker shade to the sides - wrapper.fillSetter = function (value) { - var darker = Highcharts.Color(value).brighten(-0.1).get(); - - this.fill = value; - - this.side1.attr({ fill: darker }); - this.side2.attr({ fill: darker }); - this.inn.attr({ fill: darker }); - this.out.attr({ fill: darker }); - this.top.attr({ fill: value }); - return this; - }; - - // Apply the same value to all. These properties cascade down to the children - // when set to the composite arc3d. - each(['opacity', 'translateX', 'translateY', 'visibility'], function (setter) { - wrapper[setter + 'Setter'] = function (value, key) { - wrapper[key] = value; - each(['out', 'inn', 'side1', 'side2', 'top'], function (el) { - wrapper[el].attr(key, value); - }); - }; - }); - - /** - * Override attr to remove shape attributes and use those to set child paths - */ - wrap(wrapper, 'attr', function (proceed, params, val) { - var ca; - if (typeof params === 'object') { - ca = suckOutCustom(params); - if (ca) { - extend(wrapper.attribs, ca); - wrapper.setPaths(wrapper.attribs); - } - } - return proceed.call(this, params, val); - }); - - /** - * Override the animate function by sucking out custom parameters related to the shapes directly, - * and update the shapes from the animation step. - */ - wrap(wrapper, 'animate', function (proceed, params, animation, complete) { - var ca, - from = this.attribs, - to; - - // Attribute-line properties connected to 3D. These shouldn't have been in the - // attribs collection in the first place. - delete params.center; - delete params.z; - delete params.depth; - delete params.alpha; - delete params.beta; - - animation = pick(animation, this.renderer.globalAnimation); - - if (animation) { - if (typeof animation !== 'object') { - animation = {}; - } - - params = merge(params); // Don't mutate the original object - ca = suckOutCustom(params); - - if (ca) { - to = ca; - animation.step = function (a, fx) { - function interpolate(key) { - return from[key] + (pick(to[key], from[key]) - from[key]) * fx.pos; - } - fx.elem.setPaths(merge(from, { - x: interpolate('x'), - y: interpolate('y'), - r: interpolate('r'), - innerR: interpolate('innerR'), - start: interpolate('start'), - end: interpolate('end') - })); - }; - } - } - return proceed.call(this, params, animation, complete); - }); - - // destroy all children - wrapper.destroy = function () { - this.top.destroy(); - this.out.destroy(); - this.inn.destroy(); - this.side1.destroy(); - this.side2.destroy(); - - Highcharts.SVGElement.prototype.destroy.call(this); - }; - // hide all children - wrapper.hide = function () { - this.top.hide(); - this.out.hide(); - this.inn.hide(); - this.side1.hide(); - this.side2.hide(); - }; - wrapper.show = function () { - this.top.show(); - this.out.show(); - this.inn.show(); - this.side1.show(); - this.side2.show(); - }; - return wrapper; - }; - - /** - * Generate the paths required to draw a 3D arc - */ - Highcharts.SVGRenderer.prototype.arc3dPath = function (shapeArgs) { - var cx = shapeArgs.x, // x coordinate of the center - cy = shapeArgs.y, // y coordinate of the center - start = shapeArgs.start, // start angle - end = shapeArgs.end - 0.00001, // end angle - r = shapeArgs.r, // radius - ir = shapeArgs.innerR, // inner radius - d = shapeArgs.depth, // depth - alpha = shapeArgs.alpha, // alpha rotation of the chart - beta = shapeArgs.beta; // beta rotation of the chart - - // Derived Variables - var cs = cos(start), // cosinus of the start angle - ss = sin(start), // sinus of the start angle - ce = cos(end), // cosinus of the end angle - se = sin(end), // sinus of the end angle - rx = r * cos(beta), // x-radius - ry = r * cos(alpha), // y-radius - irx = ir * cos(beta), // x-radius (inner) - iry = ir * cos(alpha), // y-radius (inner) - dx = d * sin(beta), // distance between top and bottom in x - dy = d * sin(alpha); // distance between top and bottom in y - - // TOP - var top = ['M', cx + (rx * cs), cy + (ry * ss)]; - top = top.concat(curveTo(cx, cy, rx, ry, start, end, 0, 0)); - top = top.concat([ - 'L', cx + (irx * ce), cy + (iry * se) - ]); - top = top.concat(curveTo(cx, cy, irx, iry, end, start, 0, 0)); - top = top.concat(['Z']); - // OUTSIDE - var b = (beta > 0 ? PI / 2 : 0), - a = (alpha > 0 ? 0 : PI / 2); - - var start2 = start > -b ? start : (end > -b ? -b : start), - end2 = end < PI - a ? end : (start < PI - a ? PI - a : end), - midEnd = 2 * PI - a; - - // When slice goes over bottom middle, need to add both, left and right outer side. - // Additionally, when we cross right hand edge, create sharp edge. Outer shape/wall: - // - // ------- - // / ^ \ - // 4) / / \ \ 1) - // / / \ \ - // / / \ \ - // (c)=> ==== ==== <=(d) - // \ \ / / - // \ \<=(a)/ / - // \ \ / / <=(b) - // 3) \ v / 2) - // ------- - // - // (a) - inner side - // (b) - outer side - // (c) - left edge (sharp) - // (d) - right edge (sharp) - // 1..n - rendering order for startAngle = 0, when set to e.g 90, order changes clockwise (1->2, 2->3, n->1) and counterclockwise for negative startAngle - - var out = ['M', cx + (rx * cos(start2)), cy + (ry * sin(start2))]; - out = out.concat(curveTo(cx, cy, rx, ry, start2, end2, 0, 0)); - - if (end > midEnd && start < midEnd) { // When shape is wide, it can cross both, (c) and (d) edges, when using startAngle - // Go to outer side - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - // Curve to the right edge of the slice (d) - out = out.concat(curveTo(cx, cy, rx, ry, end2, midEnd, dx, dy)); - // Go to the inner side - out = out.concat([ - 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd)) - ]); - // Curve to the true end of the slice - out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end, 0, 0)); - // Go to the outer side - out = out.concat([ - 'L', cx + (rx * cos(end)) + dx, cy + (ry * sin(end)) + dy - ]); - // Go back to middle (d) - out = out.concat(curveTo(cx, cy, rx, ry, end, midEnd, dx, dy)); - out = out.concat([ - 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd)) - ]); - // Go back to the left edge - out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end2, 0, 0)); - } else if (end > PI - a && start < PI - a) { // But shape can cross also only (c) edge: - // Go to outer side - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - // Curve to the true end of the slice - out = out.concat(curveTo(cx, cy, rx, ry, end2, end, dx, dy)); - // Go to the inner side - out = out.concat([ - 'L', cx + (rx * cos(end)), cy + (ry * sin(end)) - ]); - // Go back to the artifical end2 - out = out.concat(curveTo(cx, cy, rx, ry, end, end2, 0, 0)); - } - - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - out = out.concat(curveTo(cx, cy, rx, ry, end2, start2, dx, dy)); - out = out.concat(['Z']); - - // INSIDE - var inn = ['M', cx + (irx * cs), cy + (iry * ss)]; - inn = inn.concat(curveTo(cx, cy, irx, iry, start, end, 0, 0)); - inn = inn.concat([ - 'L', cx + (irx * cos(end)) + dx, cy + (iry * sin(end)) + dy - ]); - inn = inn.concat(curveTo(cx, cy, irx, iry, end, start, dx, dy)); - inn = inn.concat(['Z']); - - // SIDES - var side1 = [ - 'M', cx + (rx * cs), cy + (ry * ss), - 'L', cx + (rx * cs) + dx, cy + (ry * ss) + dy, - 'L', cx + (irx * cs) + dx, cy + (iry * ss) + dy, - 'L', cx + (irx * cs), cy + (iry * ss), - 'Z' - ]; - var side2 = [ - 'M', cx + (rx * ce), cy + (ry * se), - 'L', cx + (rx * ce) + dx, cy + (ry * se) + dy, - 'L', cx + (irx * ce) + dx, cy + (iry * se) + dy, - 'L', cx + (irx * ce), cy + (iry * se), - 'Z' - ]; - - // correction for changed position of vanishing point caused by alpha and beta rotations - var angleCorr = Math.atan2(dy, -dx), - angleEnd = Math.abs(end + angleCorr), - angleStart = Math.abs(start + angleCorr), - angleMid = Math.abs((start + end) / 2 + angleCorr); - - // set to 0-PI range - function toZeroPIRange(angle) { - angle = angle % (2 * PI); - if (angle > PI) { - angle = 2 * PI - angle; - } - return angle; - } - angleEnd = toZeroPIRange(angleEnd); - angleStart = toZeroPIRange(angleStart); - angleMid = toZeroPIRange(angleMid); - - // *1e5 is to compensate pInt in zIndexSetter - var incPrecision = 1e5, - a1 = angleMid * incPrecision, - a2 = angleStart * incPrecision, - a3 = angleEnd * incPrecision; - - return { - top: top, - zTop: PI * incPrecision + 1, // max angle is PI, so this is allways higher - out: out, - zOut: Math.max(a1, a2, a3), - inn: inn, - zInn: Math.max(a1, a2, a3), - side1: side1, - zSide1: a3 * 0.99, // to keep below zOut and zInn in case of same values - side2: side2, - zSide2: a2 * 0.99 - }; - }; - /*** - EXTENSION FOR 3D CHARTS - ***/ - // Shorthand to check the is3d flag - Highcharts.Chart.prototype.is3d = function () { - return this.options.chart.options3d && this.options.chart.options3d.enabled; // #4280 - }; - - Highcharts.wrap(Highcharts.Chart.prototype, 'isInsidePlot', function (proceed) { - return this.is3d() || proceed.apply(this, [].slice.call(arguments, 1)); - }); - - var defaultChartOptions = Highcharts.getOptions(); - defaultChartOptions.chart.options3d = { - enabled: false, - alpha: 0, - beta: 0, - depth: 100, - viewDistance: 25, - frame: { - bottom: { size: 1, color: 'rgba(255,255,255,0)' }, - side: { size: 1, color: 'rgba(255,255,255,0)' }, - back: { size: 1, color: 'rgba(255,255,255,0)' } - } - }; - - Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed) { - var args = [].slice.call(arguments, 1), - plotOptions, - pieOptions; - - if (args[0].chart && args[0].chart.options3d && args[0].chart.options3d.enabled) { - // Normalize alpha and beta to (-360, 360) range - args[0].chart.options3d.alpha = (args[0].chart.options3d.alpha || 0) % 360; - args[0].chart.options3d.beta = (args[0].chart.options3d.beta || 0) % 360; - - plotOptions = args[0].plotOptions || {}; - pieOptions = plotOptions.pie || {}; - - pieOptions.borderColor = Highcharts.pick(pieOptions.borderColor, undefined); - } - proceed.apply(this, args); - }); - - Highcharts.wrap(Highcharts.Chart.prototype, 'setChartSize', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.is3d()) { - var inverted = this.inverted, - clipBox = this.clipBox, - margin = this.margin, - x = inverted ? 'y' : 'x', - y = inverted ? 'x' : 'y', - w = inverted ? 'height' : 'width', - h = inverted ? 'width' : 'height'; - - clipBox[x] = -(margin[3] || 0); - clipBox[y] = -(margin[0] || 0); - clipBox[w] = this.chartWidth + (margin[3] || 0) + (margin[1] || 0); - clipBox[h] = this.chartHeight + (margin[0] || 0) + (margin[2] || 0); - } - }); - - Highcharts.wrap(Highcharts.Chart.prototype, 'redraw', function (proceed) { - if (this.is3d()) { - // Set to force a redraw of all elements - this.isDirtyBox = true; - } - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - // Draw the series in the reverse order (#3803, #3917) - Highcharts.wrap(Highcharts.Chart.prototype, 'renderSeries', function (proceed) { - var series, - i = this.series.length; - - if (this.is3d()) { - while (i--) { - series = this.series[i]; - series.translate(); - series.render(); - } - } else { - proceed.call(this); - } - }); - - Highcharts.Chart.prototype.retrieveStacks = function (stacking) { - var series = this.series, - stacks = {}, - stackNumber, - i = 1; - - Highcharts.each(this.series, function (s) { - stackNumber = pick(s.options.stack, (stacking ? 0 : series.length - 1 - s.index)); // #3841, #4532 - if (!stacks[stackNumber]) { - stacks[stackNumber] = { series: [s], position: i }; - i++; - } else { - stacks[stackNumber].series.push(s); - } - }); - - stacks.totalStacks = i + 1; - return stacks; - }; - - /*** - EXTENSION TO THE AXIS - ***/ - Highcharts.wrap(Highcharts.Axis.prototype, 'setOptions', function (proceed, userOptions) { - var options; - proceed.call(this, userOptions); - if (this.chart.is3d()) { - options = this.options; - options.tickWidth = Highcharts.pick(options.tickWidth, 0); - options.gridLineWidth = Highcharts.pick(options.gridLineWidth, 1); - } - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var chart = this.chart, - renderer = chart.renderer, - options3d = chart.options.chart.options3d, - frame = options3d.frame, - fbottom = frame.bottom, - fback = frame.back, - fside = frame.side, - depth = options3d.depth, - height = this.height, - width = this.width, - left = this.left, - top = this.top; - - if (this.isZAxis) { - return; - } - if (this.horiz) { - var bottomShape = { - x: left, - y: top + (chart.xAxis[0].opposite ? -fbottom.size : height), - z: 0, - width: width, - height: fbottom.size, - depth: depth, - insidePlotArea: false - }; - if (!this.bottomFrame) { - this.bottomFrame = renderer.cuboid(bottomShape).attr({ - fill: fbottom.color, - zIndex: (chart.yAxis[0].reversed && options3d.alpha > 0 ? 4 : -1) - }) - .css({ - stroke: fbottom.color - }).add(); - } else { - this.bottomFrame.animate(bottomShape); - } - } else { - // BACK - var backShape = { - x: left + (chart.yAxis[0].opposite ? 0 : -fside.size), - y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0), - z: depth, - width: width + fside.size, - height: height + fbottom.size, - depth: fback.size, - insidePlotArea: false - }; - if (!this.backFrame) { - this.backFrame = renderer.cuboid(backShape).attr({ - fill: fback.color, - zIndex: -3 - }).css({ - stroke: fback.color - }).add(); - } else { - this.backFrame.animate(backShape); - } - var sideShape = { - x: left + (chart.yAxis[0].opposite ? width : -fside.size), - y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0), - z: 0, - width: fside.size, - height: height + fbottom.size, - depth: depth, - insidePlotArea: false - }; - if (!this.sideFrame) { - this.sideFrame = renderer.cuboid(sideShape).attr({ - fill: fside.color, - zIndex: -2 - }).css({ - stroke: fside.color - }).add(); - } else { - this.sideFrame.animate(sideShape); - } - } - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getPlotLinePath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return path; - } - - if (path === null) { - return path; - } - - var chart = this.chart, - options3d = chart.options.chart.options3d, - d = this.isZAxis ? chart.plotWidth : options3d.depth, - opposite = this.opposite; - if (this.horiz) { - opposite = !opposite; - } - var pArr = [ - this.swapZ({ x: path[1], y: path[2], z: (opposite ? d : 0) }), - this.swapZ({ x: path[1], y: path[2], z: d }), - this.swapZ({ x: path[4], y: path[5], z: d }), - this.swapZ({ x: path[4], y: path[5], z: (opposite ? 0 : d) }) - ]; - - pArr = perspective(pArr, this.chart, false); - path = this.chart.renderer.toLinePath(pArr, false); - - return path; - }); - - // Do not draw axislines in 3D - Highcharts.wrap(Highcharts.Axis.prototype, 'getLinePath', function (proceed) { - return this.chart.is3d() ? [] : proceed.apply(this, [].slice.call(arguments, 1)); - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getPlotBandPath', function (proceed) { - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return proceed.apply(this, [].slice.call(arguments, 1)); - } - - var args = arguments, - from = args[1], - to = args[2], - toPath = this.getPlotLinePath(to), - path = this.getPlotLinePath(from); - - if (path && toPath) { - path.push( - 'L', - toPath[10], // These two do not exist in the regular getPlotLine - toPath[11], // ---- # 3005 - 'L', - toPath[7], - toPath[8], - 'L', - toPath[4], - toPath[5], - 'L', - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }); - - /*** - EXTENSION TO THE TICKS - ***/ - - Highcharts.wrap(Highcharts.Tick.prototype, 'getMarkPath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return path; - } - - var pArr = [ - this.axis.swapZ({ x: path[1], y: path[2], z: 0 }), - this.axis.swapZ({ x: path[4], y: path[5], z: 0 }) - ]; - - pArr = perspective(pArr, this.axis.chart, false); - path = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[1].x, pArr[1].y - ]; - return path; - }); - - Highcharts.wrap(Highcharts.Tick.prototype, 'getLabelPosition', function (proceed) { - var pos = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return pos; - } - - var newPos = perspective([this.axis.swapZ({ x: pos.x, y: pos.y, z: 0 })], this.axis.chart, false)[0]; - newPos.x = newPos.x - (!this.axis.horiz && this.axis.opposite ? this.axis.transA : 0); //#3788 - newPos.old = pos; - return newPos; - }); - - Highcharts.wrap(Highcharts.Tick.prototype, 'handleOverflow', function (proceed, xy) { - if (this.axis.chart.is3d()) { - xy = xy.old; - } - return proceed.call(this, xy); - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getTitlePosition', function (proceed) { - var is3d = this.chart.is3d(), - pos, - axisTitleMargin; - - // Pull out the axis title margin, that is not subject to the perspective - if (is3d) { - axisTitleMargin = this.axisTitleMargin; - this.axisTitleMargin = 0; - } - - pos = proceed.apply(this, [].slice.call(arguments, 1)); - - if (is3d) { - pos = perspective([this.swapZ({ x: pos.x, y: pos.y, z: 0 })], this.chart, false)[0]; - - // Re-apply the axis title margin outside the perspective - pos[this.horiz ? 'y' : 'x'] += (this.horiz ? 1 : -1) * // horizontal axis reverses the margin ... - (this.opposite ? -1 : 1) * // ... so does opposite axes - axisTitleMargin; - this.axisTitleMargin = axisTitleMargin; - } - return pos; - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'drawCrosshair', function (proceed) { - var args = arguments; - if (this.chart.is3d()) { - if (args[2]) { - args[2] = { - plotX: args[2].plotXold || args[2].plotX, - plotY: args[2].plotYold || args[2].plotY - }; - } - } - proceed.apply(this, [].slice.call(args, 1)); - }); - - /*** - Z-AXIS - ***/ - - Highcharts.Axis.prototype.swapZ = function (p, insidePlotArea) { - if (this.isZAxis) { - var plotLeft = insidePlotArea ? 0 : this.chart.plotLeft; - var chart = this.chart; - return { - x: plotLeft + (chart.yAxis[0].opposite ? p.z : chart.xAxis[0].width - p.z), - y: p.y, - z: p.x - plotLeft - }; - } - return p; - }; - - var ZAxis = Highcharts.ZAxis = function () { - this.isZAxis = true; - this.init.apply(this, arguments); - }; - Highcharts.extend(ZAxis.prototype, Highcharts.Axis.prototype); - Highcharts.extend(ZAxis.prototype, { - setOptions: function (userOptions) { - userOptions = Highcharts.merge({ - offset: 0, - lineWidth: 0 - }, userOptions); - Highcharts.Axis.prototype.setOptions.call(this, userOptions); - this.coll = 'zAxis'; - }, - setAxisSize: function () { - Highcharts.Axis.prototype.setAxisSize.call(this); - this.width = this.len = this.chart.options.chart.options3d.depth; - this.right = this.chart.chartWidth - this.width - this.left; - }, - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // Reset properties in case we're redrawing (#3353) - axis.dataMin = axis.dataMax = axis.ignoreMinPadding = axis.ignoreMaxPadding = null; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - Highcharts.each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - zData, - threshold = seriesOptions.threshold; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - zData = series.zData; - if (zData.length) { - axis.dataMin = Math.min(pick(axis.dataMin, zData[0]), Math.min.apply(null, zData)); - axis.dataMax = Math.max(pick(axis.dataMax, zData[0]), Math.max.apply(null, zData)); - } - } - }); - } - }); - - - /** - * Extend the chart getAxes method to also get the color axis - */ - Highcharts.wrap(Highcharts.Chart.prototype, 'getAxes', function (proceed) { - var chart = this, - options = this.options, - zAxisOptions = options.zAxis = Highcharts.splat(options.zAxis || {}); - - proceed.call(this); - - if (!chart.is3d()) { - return; - } - this.zAxis = []; - Highcharts.each(zAxisOptions, function (axisOptions, i) { - axisOptions.index = i; - axisOptions.isX = true; //Z-Axis is shown horizontally, so it's kind of a X-Axis - var zAxis = new ZAxis(chart, axisOptions); - zAxis.setScale(); - }); - }); - /*** - EXTENSION FOR 3D COLUMNS - ***/ - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - seriesOptions = series.options, - depth = seriesOptions.depth || 25; - - var stack = seriesOptions.stacking ? (seriesOptions.stack || 0) : series._i; - var z = stack * (depth + (seriesOptions.groupZPadding || 1)); - - if (seriesOptions.grouping !== false) { - z = 0; - } - - z += (seriesOptions.groupZPadding || 1); - - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - var shapeArgs = point.shapeArgs, - tooltipPos = point.tooltipPos; - - point.shapeType = 'cuboid'; - shapeArgs.z = z; - shapeArgs.depth = depth; - shapeArgs.insidePlotArea = true; - - // Translate the tooltip position in 3d space - tooltipPos = perspective([{ x: tooltipPos[0], y: tooltipPos[1], z: z }], chart, false)[0]; - point.tooltipPos = [tooltipPos.x, tooltipPos.y]; - } - }); - // store for later use #4067 - series.z = z; - }); - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - yAxis = this.yAxis, - series = this, - reversed = this.yAxis.reversed; - - if (Highcharts.svg) { // VML is too slow anyway - if (init) { - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - point.height = point.shapeArgs.height; - point.shapey = point.shapeArgs.y; //#2968 - point.shapeArgs.height = 1; - if (!reversed) { - if (point.stackY) { - point.shapeArgs.y = point.plotY + yAxis.translate(point.stackY); - } else { - point.shapeArgs.y = point.plotY + (point.negative ? -point.height : point.height); - } - } - } - }); - - } else { // run the animation - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - point.shapeArgs.height = point.height; - point.shapeArgs.y = point.shapey; //#2968 - // null value do not have a graphic - if (point.graphic) { - point.graphic.animate(point.shapeArgs, series.options.animation); - } - } - }); - - // redraw datalabels to the correct position - this.drawDataLabels(); - - // delete this function to allow it only once - series.animate = null; - } - } - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'init', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - var seriesOptions = this.options, - grouping = seriesOptions.grouping, - stacking = seriesOptions.stacking, - reversedStacks = pick(this.yAxis.options.reversedStacks, true), - z = 0; - - if (!(grouping !== undefined && !grouping)) { - var stacks = this.chart.retrieveStacks(stacking), - stack = seriesOptions.stack || 0, - i; // position within the stack - for (i = 0; i < stacks[stack].series.length; i++) { - if (stacks[stack].series[i] === this) { - break; - } - } - z = (10 * (stacks.totalStacks - stacks[stack].position)) + (reversedStacks ? i : -i); // #4369 - - // In case when axis is reversed, columns are also reversed inside the group (#3737) - if (!this.xAxis.reversed) { - z = (stacks.totalStacks * 10) - z; - } - } - - seriesOptions.zIndex = z; - } - }); - function draw3DPoints(proceed) { - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - var grouping = this.chart.options.plotOptions.column.grouping; - if (grouping !== undefined && !grouping && this.group.zIndex !== undefined && !this.zIndexSet) { - this.group.attr({ zIndex: this.group.zIndex * 10 }); - this.zIndexSet = true; // #4062 set zindex only once - } - - var options = this.options, - states = this.options.states; - - this.borderWidth = options.borderWidth = defined(options.edgeWidth) ? options.edgeWidth : 1; //#4055 - - Highcharts.each(this.data, function (point) { - if (point.y !== null) { - var pointAttr = point.pointAttr; - - // Set the border color to the fill color to provide a smooth edge - this.borderColor = Highcharts.pick(options.edgeColor, pointAttr[''].fill); - - pointAttr[''].stroke = this.borderColor; - pointAttr.hover.stroke = Highcharts.pick(states.hover.edgeColor, this.borderColor); - pointAttr.select.stroke = Highcharts.pick(states.select.edgeColor, this.borderColor); - } - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - } - - Highcharts.wrap(Highcharts.Series.prototype, 'alignDataLabel', function (proceed) { - - // Only do this for 3D columns and columnranges - if (this.chart.is3d() && (this.type === 'column' || this.type === 'columnrange')) { - var series = this, - chart = series.chart; - - var args = arguments, - alignTo = args[4]; - - var pos = ({ x: alignTo.x, y: alignTo.y, z: series.z }); - pos = perspective([pos], chart, true)[0]; - alignTo.x = pos.x; - alignTo.y = pos.y; - } - - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - if (Highcharts.seriesTypes.columnrange) { - Highcharts.wrap(Highcharts.seriesTypes.columnrange.prototype, 'drawPoints', draw3DPoints); - } - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'drawPoints', draw3DPoints); - - /*** - EXTENSION FOR 3D CYLINDRICAL COLUMNS - Not supported - ***/ - /* - var defaultOptions = Highcharts.getOptions(); - defaultOptions.plotOptions.cylinder = Highcharts.merge(defaultOptions.plotOptions.column); - var CylinderSeries = Highcharts.extendClass(Highcharts.seriesTypes.column, { - type: 'cylinder' - }); - Highcharts.seriesTypes.cylinder = CylinderSeries; - - Highcharts.wrap(Highcharts.seriesTypes.cylinder.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - cylOptions = options.plotOptions.cylinder, - options3d = options.chart.options3d, - depth = cylOptions.depth || 0, - alpha = options3d.alpha; - - var z = cylOptions.stacking ? (this.options.stack || 0) * depth : series._i * depth; - z += depth / 2; - - if (cylOptions.grouping !== false) { z = 0; } - - Highcharts.each(series.data, function (point) { - var shapeArgs = point.shapeArgs; - point.shapeType = 'arc3d'; - shapeArgs.x += depth / 2; - shapeArgs.z = z; - shapeArgs.start = 0; - shapeArgs.end = 2 * PI; - shapeArgs.r = depth * 0.95; - shapeArgs.innerR = 0; - shapeArgs.depth = shapeArgs.height * (1 / sin((90 - alpha) * deg2rad)) - z; - shapeArgs.alpha = 90 - alpha; - shapeArgs.beta = 0; - }); - }); - */ - /*** - EXTENSION FOR 3D PIES - ***/ - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - seriesOptions = series.options, - depth = seriesOptions.depth || 0, - options3d = options.chart.options3d, - alpha = options3d.alpha, - beta = options3d.beta, - z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth; - - z += depth / 2; - - if (seriesOptions.grouping !== false) { - z = 0; - } - - each(series.data, function (point) { - - var shapeArgs = point.shapeArgs, - angle; - - point.shapeType = 'arc3d'; - - shapeArgs.z = z; - shapeArgs.depth = depth * 0.75; - shapeArgs.alpha = alpha; - shapeArgs.beta = beta; - shapeArgs.center = series.center; - - angle = (shapeArgs.end + shapeArgs.start) / 2; - - point.slicedTranslation = { - translateX: round(cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)), - translateY: round(sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)) - }; - }); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype.pointClass.prototype, 'haloPath', function (proceed) { - var args = arguments; - return this.series.chart.is3d() ? [] : proceed.call(this, args[1]); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawPoints', function (proceed) { - - var options = this.options, - states = options.states; - - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - // Set the border color to the fill color to provide a smooth edge - this.borderWidth = options.borderWidth = options.edgeWidth || 1; - this.borderColor = options.edgeColor = Highcharts.pick(options.edgeColor, options.borderColor, undefined); - - states.hover.borderColor = Highcharts.pick(states.hover.edgeColor, this.borderColor); - states.hover.borderWidth = Highcharts.pick(states.hover.edgeWidth, this.borderWidth); - states.select.borderColor = Highcharts.pick(states.select.edgeColor, this.borderColor); - states.select.borderWidth = Highcharts.pick(states.select.edgeWidth, this.borderWidth); - - each(this.data, function (point) { - var pointAttr = point.pointAttr; - pointAttr[''].stroke = point.series.borderColor || point.color; - pointAttr['']['stroke-width'] = point.series.borderWidth; - pointAttr.hover.stroke = states.hover.borderColor; - pointAttr.hover['stroke-width'] = states.hover.borderWidth; - pointAttr.select.stroke = states.select.borderColor; - pointAttr.select['stroke-width'] = states.select.borderWidth; - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - each(this.points, function (point) { - var graphic = point.graphic; - - // #4584 Check if has graphic - null points don't have it - if (graphic) { - // Hide null or 0 points (#3006, 3650) - graphic[point.y ? 'show' : 'hide'](); - } - }); - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawDataLabels', function (proceed) { - if (this.chart.is3d()) { - var series = this, - chart = series.chart, - options3d = chart.options.chart.options3d; - each(series.data, function (point) { - var shapeArgs = point.shapeArgs, - r = shapeArgs.r, - a1 = (shapeArgs.alpha || options3d.alpha) * deg2rad, //#3240 issue with datalabels for 0 and null values - b1 = (shapeArgs.beta || options3d.beta) * deg2rad, - a2 = (shapeArgs.start + shapeArgs.end) / 2, - labelPos = point.labelPos, - labelIndexes = [0, 2, 4], // [x1, y1, x2, y2, x3, y3] - yOffset = (-r * (1 - cos(a1)) * sin(a2)), // + (sin(a2) > 0 ? sin(a1) * d : 0) - xOffset = r * (cos(b1) - 1) * cos(a2); - - // Apply perspective on label positions - each(labelIndexes, function (index) { - labelPos[index] += xOffset; - labelPos[index + 1] += yOffset; - }); - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'addPoint', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - if (this.chart.is3d()) { - // destroy (and rebuild) everything!!! - this.update(this.userOptions, true); // #3845 pass the old options - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - animation = this.options.animation, - attribs, - center = this.center, - group = this.group, - markerGroup = this.markerGroup; - - if (Highcharts.svg) { // VML is too slow anyway - - if (animation === true) { - animation = {}; - } - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - group.oldtranslateX = group.translateX; - group.oldtranslateY = group.translateY; - attribs = { - translateX: center[0], - translateY: center[1], - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: group.oldtranslateX, - translateY: group.oldtranslateY, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - - } - } - }); - /*** - EXTENSION FOR 3D SCATTER CHART - ***/ - - Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'translate', function (proceed) { - //function translate3d(proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - zAxis = Highcharts.pick(series.zAxis, chart.options.zAxis[0]), - rawPoints = [], - rawPoint, - projectedPoints, - projectedPoint, - zValue, - i; - - for (i = 0; i < series.data.length; i++) { - rawPoint = series.data[i]; - zValue = zAxis.isLog && zAxis.val2lin ? zAxis.val2lin(rawPoint.z) : rawPoint.z; // #4562 - rawPoint.plotZ = zAxis.translate(zValue); - - rawPoint.isInside = rawPoint.isInside ? (zValue >= zAxis.min && zValue <= zAxis.max) : false; - - rawPoints.push({ - x: rawPoint.plotX, - y: rawPoint.plotY, - z: rawPoint.plotZ - }); - } - - projectedPoints = perspective(rawPoints, chart, true); - - for (i = 0; i < series.data.length; i++) { - rawPoint = series.data[i]; - projectedPoint = projectedPoints[i]; - - rawPoint.plotXold = rawPoint.plotX; - rawPoint.plotYold = rawPoint.plotY; - - rawPoint.plotX = projectedPoint.x; - rawPoint.plotY = projectedPoint.y; - rawPoint.plotZ = projectedPoint.z; - - - } - - }); - - Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'init', function (proceed, chart, options) { - if (chart.is3d()) { - // add a third coordinate - this.axisTypes = ['xAxis', 'yAxis', 'zAxis']; - this.pointArrayMap = ['x', 'y', 'z']; - this.parallelArrays = ['x', 'y', 'z']; - } - - var result = proceed.apply(this, [chart, options]); - - if (this.chart.is3d()) { - // Set a new default tooltip formatter - var default3dScatterTooltip = 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>'; - if (this.userOptions.tooltip) { - this.tooltipOptions.pointFormat = this.userOptions.tooltip.pointFormat || default3dScatterTooltip; - } else { - this.tooltipOptions.pointFormat = default3dScatterTooltip; - } - } - return result; - }); - /** - * Extension to the VML Renderer - */ - if (Highcharts.VMLRenderer) { - - Highcharts.setOptions({ animate: false }); - - Highcharts.VMLRenderer.prototype.cuboid = Highcharts.SVGRenderer.prototype.cuboid; - Highcharts.VMLRenderer.prototype.cuboidPath = Highcharts.SVGRenderer.prototype.cuboidPath; - - Highcharts.VMLRenderer.prototype.toLinePath = Highcharts.SVGRenderer.prototype.toLinePath; - - Highcharts.VMLRenderer.prototype.createElement3D = Highcharts.SVGRenderer.prototype.createElement3D; - - Highcharts.VMLRenderer.prototype.arc3d = function (shapeArgs) { - var result = Highcharts.SVGRenderer.prototype.arc3d.call(this, shapeArgs); - result.css({ zIndex: result.zIndex }); - return result; - }; - - Highcharts.VMLRenderer.prototype.arc3dPath = Highcharts.SVGRenderer.prototype.arc3dPath; - - Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - // VML doesn't support a negative z-index - if (this.sideFrame) { - this.sideFrame.css({ zIndex: 0 }); - this.sideFrame.front.attr({ fill: this.sideFrame.color }); - } - if (this.bottomFrame) { - this.bottomFrame.css({ zIndex: 1 }); - this.bottomFrame.front.attr({ fill: this.bottomFrame.color }); - } - if (this.backFrame) { - this.backFrame.css({ zIndex: 0 }); - this.backFrame.front.attr({ fill: this.backFrame.color }); - } - }); - - } - -})); diff --git a/platforms/android/assets/www/lib/highcharts/highcharts-more.js b/platforms/android/assets/www/lib/highcharts/highcharts-more.js deleted file mode 100644 index b9438d63..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts-more.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(n){typeof module==="object"&&module.exports?module.exports=n:n(Highcharts)})(function(n){function K(a,b,c){this.init(a,b,c)}var P=n.arrayMin,Q=n.arrayMax,s=n.each,H=n.extend,t=n.merge,R=n.map,o=n.pick,A=n.pInt,p=n.getOptions().plotOptions,i=n.seriesTypes,u=n.extendClass,L=n.splat,r=n.wrap,M=n.Axis,z=n.Tick,I=n.Point,S=n.Pointer,T=n.CenteredSeriesMixin,B=n.TrackerMixin,w=n.Series,y=Math,E=y.round,C=y.floor,N=y.max,U=n.Color,v=function(){};H(K.prototype,{init:function(a,b,c){var f=this,e= -f.defaultOptions;f.chart=b;f.options=a=t(e,b.angular?{background:{}}:void 0,a);(a=a.background)&&s([].concat(L(a)).reverse(),function(a){var b=a.backgroundColor,j=c.userOptions,a=t(f.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a);j.plotBands=j.plotBands||[];j.plotBands!==c.options.plotBands&&j.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver", -backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:-Number.MAX_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}});var G=M.prototype,z=z.prototype,V={getOffset:v,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:v,setCategories:v,setTitle:v},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1, -tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15,x:0,y:null},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){a=this.options=t(this.defaultOptions,this.defaultRadialOptions,a);if(!a.plotBands)a.plotBands=[]},getOffset:function(){G.getOffset.call(this); -this.chart.axisOffset[this.side]=0;this.center=this.pane.center=T.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center,b=o(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min|| -1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset:0},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial){this.center=this.pane.center=n.CenteredSeriesMixin.getCenter.call(this.pane);if(this.isCircular)this.sector=this.endAngleRad-this.startAngleRad;this.len=this.width=this.height=this.center[2]*o(this.sector,1)/2}},getPosition:function(a, -b){return this.postTranslate(this.isCircular?this.translate(a):0,o(this.isCircular?b:this.translate(a),this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart,f=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+f[0]+Math.cos(a)*b,y:c.plotTop+f[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var f=this.center,e=this.startAngleRad,d=f[2]/2,h=[o(c.outerRadius,"100%"),c.innerRadius,o(c.thickness,10)],j=/%$/,m,g=this.isCircular;this.options.gridLineInterpolation==="polygon"? -f=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(a=Math.max(a,this.min),b=Math.min(b,this.max),g||(h[0]=this.translate(a),h[1]=this.translate(b)),h=R(h,function(a){j.test(a)&&(a=A(a,10)*d/100);return a}),c.shape==="circle"||!g?(a=-Math.PI/2,b=Math.PI*1.5,m=!0):(a=e+this.translate(a),b=e+this.translate(b)),f=this.chart.renderer.symbols.arc(this.left+f[0],this.top+f[1],h[0],h[0],{start:Math.min(a,b),end:Math.max(a,b),innerR:o(h[1],h[0]-h[2]),open:m}));return f},getPlotLinePath:function(a, -b){var c=this,f=c.center,e=c.chart,d=c.getPosition(a),h,j,m;c.isCircular?m=["M",f[0]+e.plotLeft,f[1]+e.plotTop,"L",d.x,d.y]:c.options.gridLineInterpolation==="circle"?(a=c.translate(a))&&(m=c.getLinePath(0,a)):(s(e.xAxis,function(a){a.pane===c.pane&&(h=a)}),m=[],a=c.translate(a),f=h.tickPositions,h.autoConnect&&(f=f.concat([f[0]])),b&&(f=[].concat(f).reverse()),s(f,function(d,b){j=h.getPosition(d,a);m.push(b?"L":"M",j.x,j.y)}));return m},getTitlePosition:function(){var a=this.center,b=this.chart, -c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};r(G,"init",function(a,b,c){var k;var f=b.angular,e=b.polar,d=c.isX,h=f&&d,j,m;m=b.options;var g=c.pane||0;if(f){if(H(this,h?V:O),j=!d)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)H(this,O),this.defaultRadialOptions=(j=d)?this.defaultRadialXOptions:t(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!h&&(f||e)){a=this.options;if(!b.panes)b.panes= -[];this.pane=(k=b.panes[g]=b.panes[g]||new K(L(m.pane)[g],b,this),g=k);g=g.options;b.inverted=!1;m.chart.zoomType=null;this.startAngleRad=b=(g.startAngle-90)*Math.PI/180;this.endAngleRad=m=(o(g.endAngle,g.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=j)&&c.max===void 0&&m-b===2*Math.PI)this.autoConnect=!0}});r(z,"getPosition",function(a,b,c,f,e){var d=this.axis;return d.getPosition?d.getPosition(c):a.call(this,b,c,f,e)});r(z,"getLabelPosition",function(a,b,c,f,e,d,h, -j,m){var g=this.axis,l=d.y,k=20,i=d.align,x=(g.translate(this.pos)+g.startAngleRad+Math.PI/2)/Math.PI*180%360;g.isRadial?(a=g.getPosition(this.pos,g.center[2]/2+o(d.distance,-25)),d.rotation==="auto"?f.attr({rotation:x}):l===null&&(l=g.chart.renderer.fontMetrics(f.styles.fontSize).b-f.getBBox().height/2),i===null&&(g.isCircular?(this.label.getBBox().width>g.len*g.tickInterval/(g.max-g.min)&&(k=0),i=x>k&&x<180-k?"left":x>180+k&&x<360-k?"right":"center"):i="center",f.attr({align:i})),a.x+=d.x,a.y+= -l):a=a.call(this,b,c,f,e,d,h,j,m);return a});r(z,"getMarkPath",function(a,b,c,f,e,d,h){var j=this.axis;j.isRadial?(a=j.getPosition(this.pos,j.center[2]/2+f),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,f,e,d,h);return b});p.arearange=t(p.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">\u25cf</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},trackByArea:!0,dataLabels:{align:null,verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}, -states:{hover:{halo:!1}}});i.arearange=u(i.area,{type:"arearange",pointArrayMap:["low","high"],dataLabelCollections:["dataLabel","dataLabelUpper"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",deferTranslatePolar:!0,highToXY:function(a){var b=this.chart,c=this.xAxis.postTranslate(a.rectPlotX,this.yAxis.len-a.plotHigh);a.plotHighX=c.x-b.plotLeft;a.plotHigh=c.y-b.plotTop},getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y= -null;else if(b.low===null&&b.high!==null)b.y=b.high});w.prototype.getSegments.call(this)},translate:function(){var a=this,b=a.yAxis;i.area.prototype.translate.apply(a);s(a.points,function(a){var f=a.low,e=a.high,d=a.plotY;e===null&&f===null?a.y=null:f===null?(a.plotLow=a.plotY=null,a.plotHigh=b.translate(e,0,1,0,1)):e===null?(a.plotLow=d,a.plotHigh=null):(a.plotLow=d,a.plotHigh=b.translate(e,0,1,0,1))});this.chart.polar&&s(this.points,function(b){a.highToXY(b)})},getSegmentPath:function(a){var b, -c=[],f=a.length,e=w.prototype.getSegmentPath,d,h;h=this.options;var j=h.step;for(b=n.grep(a,function(a){return a.plotLow!==null});f--;)d=a[f],d.plotHigh!==null&&c.push({plotX:d.plotHighX||d.plotX,plotY:d.plotHigh});a=e.call(this,b);if(j)j===!0&&(j="left"),h.step={left:"right",center:"center",right:"left"}[j];c=e.call(this,c);h.step=j;h=[].concat(a,c);this.chart.polar||(c[0]="L");this.areaPath=this.areaPath.concat(a,c);return h},drawDataLabels:function(){var a=this.data,b=a.length,c,f=[],e=w.prototype, -d=this.options.dataLabels,h=d.align,j=d.verticalAlign,m=d.inside,g,l,k=this.chart.inverted;if(d.enabled||this._hasPointLabels){for(c=b;c--;)if(g=a[c]){l=m?g.plotHigh<g.plotLow:g.plotHigh>g.plotLow;g.y=g.high;g._plotY=g.plotY;g.plotY=g.plotHigh;f[c]=g.dataLabel;g.dataLabel=g.dataLabelUpper;g.below=l;if(k){if(!h)d.align=l?"right":"left"}else if(!j)d.verticalAlign=l?"top":"bottom";d.x=d.xHigh;d.y=d.yHigh}e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(c=b;c--;)if(g=a[c]){l=m?g.plotHigh< -g.plotLow:g.plotHigh>g.plotLow;g.dataLabelUpper=g.dataLabel;g.dataLabel=f[c];g.y=g.low;g.plotY=g._plotY;g.below=!l;if(k){if(!h)d.align=l?"left":"right"}else if(!j)d.verticalAlign=l?"bottom":"top";d.x=d.xLow;d.y=d.yLow}e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}d.align=h;d.verticalAlign=j},alignDataLabel:function(){i.column.prototype.alignDataLabel.apply(this,arguments)},setStackedPoints:v,getSymbol:v,drawPoints:v});p.areasplinerange=t(p.arearange);i.areasplinerange=u(i.arearange,{type:"areasplinerange", -getPointSpline:i.spline.prototype.getPointSpline});(function(){var a=i.column.prototype;p.columnrange=t(p.column,p.arearange,{lineWidth:1,pointRange:null});i.columnrange=u(i.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,f=b.xAxis,e=b.chart,d;a.translate.apply(b);s(b.points,function(a){var j=a.shapeArgs,m=b.options.minPointLength,g,l;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;l=d;g=a.plotY-d;Math.abs(g)<m?(m-=g,g+=m,l-=m/2):g<0&&(g*=-1,l-=g);j.height=g;j.y= -l;a.tooltipPos=e.inverted?[c.len+c.pos-e.plotLeft-l-g/2,f.len+f.pos-e.plotTop-j.x-j.width/2,g]:[f.left-e.plotLeft+j.x+j.width/2,c.pos-e.plotTop+l+g/2,g]})},directTouch:!0,trackerGroups:["group","dataLabelsGroup"],drawGraph:v,crispCol:a.crispCol,pointAttrToOptions:a.pointAttrToOptions,drawPoints:a.drawPoints,drawTracker:a.drawTracker,animate:a.animate,getColumnMetrics:a.getColumnMetrics})})();p.gauge=t(p.line,{dataLabels:{enabled:!0,defer:!1,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,crop:!1, -verticalAlign:"top",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1});B={type:"gauge",pointClass:u(I,{setState:function(a){this.state=a}}),angular:!0,drawGraph:v,fixedBox:!0,forceDL:!0,trackerGroups:["group","dataLabelsGroup"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(f){var e=t(b.dial,f.dial),d=A(o(e.radius,80))*c[2]/200,h=A(o(e.baseLength,70))*d/100,j=A(o(e.rearLength,10))*d/100,m=e.baseWidth||3,g=e.topWidth|| -1,l=b.overshoot,k=a.startAngleRad+a.translate(f.y,null,null,null,!0);l&&typeof l==="number"?(l=l/180*Math.PI,k=Math.max(a.startAngleRad-l,Math.min(a.endAngleRad+l,k))):b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;f.shapeType="path";f.shapeArgs={d:e.path||["M",-j,-m/2,"L",h,-m/2,d,-g/2,d,g/2,h,m/2,-j,m/2,"z"],translateX:c[0],translateY:c[1],rotation:k};f.plotX=c[0];f.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,f=a.options,e=f.pivot, -d=a.chart.renderer;s(a.points,function(b){var c=b.graphic,e=b.shapeArgs,g=e.d,l=t(f.dial,b.dial);c?(c.animate(e),e.d=g):b.graphic=d[b.shapeType](e).attr({stroke:l.borderColor||"none","stroke-width":l.borderWidth||0,fill:l.backgroundColor||"black",rotation:e.rotation,zIndex:1}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=d.circle(0,0,o(e.radius,5)).attr({"stroke-width":e.borderWidth||0,stroke:e.borderColor||"silver",fill:e.backgroundColor||"black",zIndex:2}).translate(b[0], -b[1]).add(a.group)},animate:function(a){var b=this;if(!a)s(b.points,function(a){var f=a.graphic;f&&(f.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),f.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);w.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(a,b){w.prototype.setData.call(this,a,!1);this.processData(); -this.generatePoints();o(b,!0)&&this.chart.redraw()},drawTracker:B&&B.drawTrackerPoint};i.gauge=u(i.line,B);p.boxplot=t(p.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{point.color}">\u25cf</span> <b> {series.name}</b><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",whiskerWidth:2});i.boxplot= -u(i.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:v,translate:function(){var a=this.yAxis,b=this.pointArrayMap;i.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer, -f,e,d,h,j,m,g,l,k,i,x,n,J,p,t,r,v,u,w,y,B,A,z=a.doQuartiles!==!1,F,D=a.options.whiskerLength;s(a.points,function(q){k=q.graphic;B=q.shapeArgs;x={};p={};r={};A=q.color||a.color;if(q.plotY!==void 0)if(f=q.pointAttr[q.selected?"selected":""],v=B.width,u=C(B.x),w=u+v,y=E(v/2),e=C(z?q.q1Plot:q.lowPlot),d=C(z?q.q3Plot:q.lowPlot),h=C(q.highPlot),j=C(q.lowPlot),x.stroke=q.stemColor||b.stemColor||A,x["stroke-width"]=o(q.stemWidth,b.stemWidth,b.lineWidth),x.dashstyle=q.stemDashStyle||b.stemDashStyle,p.stroke= -q.whiskerColor||b.whiskerColor||A,p["stroke-width"]=o(q.whiskerWidth,b.whiskerWidth,b.lineWidth),r.stroke=q.medianColor||b.medianColor||A,r["stroke-width"]=o(q.medianWidth,b.medianWidth,b.lineWidth),g=x["stroke-width"]%2/2,l=u+y+g,i=["M",l,d,"L",l,h,"M",l,e,"L",l,j],z&&(g=f["stroke-width"]%2/2,l=C(l)+g,e=C(e)+g,d=C(d)+g,u+=g,w+=g,n=["M",u,d,"L",u,e,"L",w,e,"L",w,d,"L",u,d,"z"]),D&&(g=p["stroke-width"]%2/2,h+=g,j+=g,F=/%$/.test(D)?y*parseFloat(D)/100:D/2,J=["M",l-F,h,"L",l+F,h,"M",l-F,j,"L",l+F,j]), -g=r["stroke-width"]%2/2,m=E(q.medianPlot)+g,t=["M",u,m,"L",w,m],k)q.stem.animate({d:i}),D&&q.whiskers.animate({d:J}),z&&q.box.animate({d:n}),q.medianShape.animate({d:t});else{q.graphic=k=c.g().add(a.group);q.stem=c.path(i).attr(x).add(k);if(D)q.whiskers=c.path(J).attr(p).add(k);if(z)q.box=c.path(n).attr(f).add(k);q.medianShape=c.path(t).attr(r).add(k)}})},setStackedPoints:v});p.errorbar=t(p.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -whiskerWidth:null});i.errorbar=u(i.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:i.arearange?i.arearange.prototype.drawDataLabels:v,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||i.column.prototype.getColumnMetrics.call(this)}});p.waterfall=t(p.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333",dataLabels:{inside:!0},states:{hover:{lineWidthPlus:0}}}); -i.waterfall=u(i.column,{type:"waterfall",upColorProp:"fill",pointValKey:"y",translate:function(){var a=this.options,b=this.yAxis,c,f,e,d,h,j,m,g,l,k=o(a.minPointLength,5),n=a.threshold,x=a.stacking;i.column.prototype.translate.apply(this);this.minPointLengthOffset=0;m=g=n;f=this.points;for(c=0,a=f.length;c<a;c++){e=f[c];j=this.processedYData[c];d=e.shapeArgs;l=(h=x&&b.stacks[(this.negStacks&&j<n?"-":"")+this.stackKey])?h[e.x].points[this.index+","+c]:[0,j];if(e.isSum)e.y=j;else if(e.isIntermediateSum)e.y= -j-g;h=N(m,m+e.y)+l[0];d.y=b.translate(h,0,1);if(e.isSum)d.y=b.translate(l[1],0,1),d.height=Math.min(b.translate(l[0],0,1),b.len)-d.y+this.minPointLengthOffset;else if(e.isIntermediateSum)d.y=b.translate(l[1],0,1),d.height=Math.min(b.translate(g,0,1),b.len)-d.y+this.minPointLengthOffset,g=l[1];else{if(m!==0)d.height=j>0?b.translate(m,0,1)-d.y:b.translate(m,0,1)-b.translate(m-j,0,1);m+=j}d.height<0&&(d.y+=d.height,d.height*=-1);e.plotY=d.y=E(d.y)-this.borderWidth%2/2;d.height=N(E(d.height),0.001);e.yBottom= -d.y+d.height;if(d.height<=k)d.height=k,this.minPointLengthOffset+=k;d.y-=this.minPointLengthOffset;d=e.plotY+(e.negative?d.height:0)-this.minPointLengthOffset;this.chart.inverted?e.tooltipPos[0]=b.len-d:e.tooltipPos[1]=d}},processData:function(a){var b=this.yData,c=this.options.data,f,e=b.length,d,h,j,m,g,l;h=d=j=m=this.options.threshold||0;for(l=0;l<e;l++)g=b[l],f=c&&c[l]?c[l]:{},g==="sum"||f.isSum?b[l]=h:g==="intermediateSum"||f.isIntermediateSum?b[l]=d:(h+=g,d+=g),j=Math.min(h,j),m=Math.max(h, -m);w.prototype.processData.call(this,a);this.dataMin=j;this.dataMax=m},toYData:function(a){return a.isSum?a.x===0?null:"sum":a.isIntermediateSum?a.x===0?null:"intermediateSum":a.y},getAttribs:function(){i.column.prototype.getAttribs.apply(this,arguments);var a=this,b=a.options,c=b.states,f=b.upColor||a.color,b=n.Color(f).brighten(0.1).get(),e=t(a.pointAttr),d=a.upColorProp;e[""][d]=f;e.hover[d]=c.hover.upColor||b;e.select[d]=c.select.upColor||f;s(a.points,function(d){if(!d.options.color)d.y>0?(d.pointAttr= -e,d.color=f):d.pointAttr=a.pointAttr})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.borderWidth)%2/2,f=[],e,d,h;for(h=1;h<b;h++)d=a[h].shapeArgs,e=a[h-1].shapeArgs,d=["M",e.x+e.width,e.y+c,"L",d.x,e.y+c],a[h-1].y<0&&(d[2]+=e.height,d[5]+=e.height),f=f.concat(d);return f},getExtremes:v,drawGraph:w.prototype.drawGraph});p.polygon=t(p.scatter,{marker:{enabled:!1}});i.polygon=u(i.scatter,{type:"polygon",fillGraph:!0,getSegmentPath:function(a){return w.prototype.getSegmentPath.call(this, -a).concat("z")},drawGraph:w.prototype.drawGraph,drawLegendSymbol:n.LegendSymbolMixin.drawRectangle});p.bubble=t(p.scatter,{dataLabels:{formatter:function(){return this.point.z},inside:!0,verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"});B=u(I,{haloPath:function(){return I.prototype.haloPath.call(this,this.shapeArgs.r+ -this.series.options.states.hover.halo.size)},ttBelow:!1});i.bubble=u(i.scatter,{type:"bubble",pointClass:B,pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],bubblePadding:!0,zoneAxis:"z",pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=o(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=U(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a= -w.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,f){var e,d,h,j=this.zData,m=[],g=this.options,l=g.sizeBy!=="width",k=g.zThreshold,i=b-a;for(d=0,e=j.length;d<e;d++)h=j[d],g.sizeByAbsoluteValue&&h!==null&&(h=Math.abs(h-k),b=Math.max(b-k,Math.abs(a-k)),a=0),h===null?h=null:h<a?h=c/2-1:(h=i>0?(h-a)/i:0.5,l&&h>=0&&(h=Math.sqrt(h)),h=y.ceil(c+h*(f-c))/2),m.push(h);this.radii=m},animate:function(a){var b=this.options.animation;if(!a)s(this.points, -function(a){var f=a.graphic,a=a.shapeArgs;f&&a&&(f.attr("r",1),f.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,f,e=this.radii;i.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],f=e?e[a]:0,typeof f==="number"&&f>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:f},c.dlBox={x:c.plotX-f,y:c.plotY-f,width:2*f,height:2*f}):c.shapeArgs=c.plotY=c.dlBox=void 0},drawLegendSymbol:function(a,b){var c=this.chart.renderer,f=c.fontMetrics(a.itemStyle.fontSize).f/ -2;b.legendSymbol=c.circle(f,a.baseline-f,f).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:i.column.prototype.drawPoints,alignDataLabel:i.column.prototype.alignDataLabel,buildKDTree:v,applyZones:v});M.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,f=0,e=b,d=this.isXAxis,h=d?"xData":"yData",j=this.min,m={},g=y.min(c.plotWidth,c.plotHeight),l=Number.MAX_VALUE,k=-Number.MAX_VALUE,i=this.max-j,n=b/i,p=[];s(this.series,function(b){var h=b.options;if(b.bubblePadding&& -(b.visible||!c.options.chart.ignoreHiddenSeries))if(a.allowZoomOutside=!0,p.push(b),d)s(["minSize","maxSize"],function(a){var d=h[a],b=/%$/.test(d),d=A(d);m[a]=b?g*d/100:d}),b.minPxSize=m.minSize,b.maxPxSize=m.maxSize,b=b.zData,b.length&&(l=o(h.zMin,y.min(l,y.max(P(b),h.displayNegative===!1?h.zThreshold:-Number.MAX_VALUE))),k=o(h.zMax,y.max(k,Q(b))))});s(p,function(a){var b=a[h],c=b.length,g;d&&a.getRadii(l,k,a.minPxSize,a.maxPxSize);if(i>0)for(;c--;)typeof b[c]==="number"&&(g=a.radii[c],f=Math.min((b[c]- -j)*n-g,f),e=Math.max((b[c]-j)*n+g,e))});p.length&&i>0&&!this.isLog&&(e-=b,n*=(b+f-e)/b,s([["min","userMin",f],["max","userMax",e]],function(d){o(a.options[d[0]],a[d[1]])===void 0&&(a[d[0]]+=d[2]/n)}))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var d=this.xAxis.center;a.push("L",d[0],d[1])},this.closedStacks=!0}function b(a,b){var c=this.chart,f=this.options.animation,g=this.group,e=this.markerGroup,k=this.xAxis.center,i=c.plotLeft,n=c.plotTop; -if(c.polar){if(c.renderer.isSVG)f===!0&&(f={}),b?(c={translateX:k[0]+i,translateY:k[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),e&&e.attr(c)):(c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,f),e&&e.animate(c,f),this.animate=null)}else a.call(this,b)}var c=w.prototype,f=S.prototype,e;c.searchPointByAngle=function(a){var b=this.chart,c=this.xAxis.pane.center;return this.searchKDTree({clientX:180+Math.atan2(a.chartX-c[0]-b.plotLeft,a.chartY-c[1]-b.plotTop)*(-180/Math.PI)})};r(c,"buildKDTree", -function(a){if(this.chart.polar)this.kdByAngle?this.searchPoint=this.searchPointByAngle:this.kdDimensions=2;a.apply(this)});c.toXY=function(a){var b,c=this.chart,f=a.plotX;b=a.plotY;a.rectPlotX=f;a.rectPlotY=b;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-b);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop;this.kdByAngle?(c=(f/Math.PI*180+this.xAxis.pane.options.startAngle)%360,c<0&&(c+=360),a.clientX=c):a.clientX=a.plotX};i.area&&r(i.area.prototype,"init",a);i.areaspline&& -r(i.areaspline.prototype,"init",a);i.spline&&r(i.spline.prototype,"getPointSpline",function(a,b,c,f){var g,e,k,i,n,p,o;if(this.chart.polar){g=c.plotX;e=c.plotY;a=b[f-1];k=b[f+1];this.connectEnds&&(a||(a=b[b.length-2]),k||(k=b[1]));if(a&&k)i=a.plotX,n=a.plotY,b=k.plotX,p=k.plotY,i=(1.5*g+i)/2.5,n=(1.5*e+n)/2.5,k=(1.5*g+b)/2.5,o=(1.5*e+p)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(n-e,2)),p=Math.sqrt(Math.pow(k-g,2)+Math.pow(o-e,2)),i=Math.atan2(n-e,i-g),n=Math.atan2(o-e,k-g),o=Math.PI/2+(i+n)/2,Math.abs(i- -o)>Math.PI/2&&(o-=Math.PI),i=g+Math.cos(o)*b,n=e+Math.sin(o)*b,k=g+Math.cos(Math.PI+o)*p,o=e+Math.sin(Math.PI+o)*p,c.rightContX=k,c.rightContY=o;f?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,n||e,g,e],a.rightContX=a.rightContY=null):c=["M",g,e]}else c=a.call(this,b,c,f);return c});r(c,"translate",function(a){var b=this.chart;a.call(this);if(b.polar&&(this.kdByAngle=b.tooltip&&b.tooltip.shared,!this.preventPostTranslate)){a=this.points;for(b=a.length;b--;)this.toXY(a[b])}});r(c,"getSegmentPath", -function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});r(c,"animate",b);if(i.column)e=i.column.prototype,r(e,"animate",b),r(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,e=b.center,g=b.startAngleRad,f=this.chart.renderer,k,i;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(i=b.length;i--;)k=b[i],a=k.barX+g,k.shapeType="path", -k.shapeArgs={d:f.symbols.arc(e[0],e[1],c-k.plotY,null,{start:a,end:a+k.pointWidth,innerR:c-o(k.yBottom,c)})},this.toXY(k),k.tooltipPos=[k.plotX,k.plotY],k.ttBelow=k.plotY>e[1]}}),r(e,"alignDataLabel",function(a,b,e,f,g,i){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(f.align===null)f.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(f.verticalAlign===null)f.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,e,f,g,i)}else a.call(this,b,e,f,g,i)}); -r(f,"getCoordinates",function(a,b){var c=this.chart,f={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var d=a.isXAxis,e=a.center,i=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;f[d?"xAxis":"yAxis"].push({axis:a,value:a.translate(d?Math.PI-Math.atan2(i,e):Math.sqrt(Math.pow(i,2)+Math.pow(e,2)),!0)})}):f=a.call(this,b);return f})})()}); diff --git a/platforms/android/assets/www/lib/highcharts/highcharts-more.src.js b/platforms/android/assets/www/lib/highcharts/highcharts-more.src.js deleted file mode 100644 index 63529baf..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts-more.src.js +++ /dev/null @@ -1,2687 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { -var arrayMin = Highcharts.arrayMin, - arrayMax = Highcharts.arrayMax, - each = Highcharts.each, - extend = Highcharts.extend, - merge = Highcharts.merge, - map = Highcharts.map, - pick = Highcharts.pick, - pInt = Highcharts.pInt, - defaultPlotOptions = Highcharts.getOptions().plotOptions, - seriesTypes = Highcharts.seriesTypes, - extendClass = Highcharts.extendClass, - splat = Highcharts.splat, - wrap = Highcharts.wrap, - Axis = Highcharts.Axis, - Tick = Highcharts.Tick, - Point = Highcharts.Point, - Pointer = Highcharts.Pointer, - CenteredSeriesMixin = Highcharts.CenteredSeriesMixin, - TrackerMixin = Highcharts.TrackerMixin, - Series = Highcharts.Series, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathMax = math.max, - Color = Highcharts.Color, - noop = function () {}, - UNDEFINED;/** - * The Pane object allows options that are common to a set of X and Y axes. - * - * In the future, this can be extended to basic Highcharts and Highstock. - */ - function Pane(options, chart, firstAxis) { - this.init(options, chart, firstAxis); - } - - // Extend the Pane prototype - extend(Pane.prototype, { - - /** - * Initiate the Pane object - */ - init: function (options, chart, firstAxis) { - var pane = this, - backgroundOption, - defaultOptions = pane.defaultOptions; - - pane.chart = chart; - - // Set options. Angular charts have a default background (#3318) - pane.options = options = merge(defaultOptions, chart.angular ? { background: {} } : undefined, options); - - backgroundOption = options.background; - - // To avoid having weighty logic to place, update and remove the backgrounds, - // push them to the first axis' plot bands and borrow the existing logic there. - if (backgroundOption) { - each([].concat(splat(backgroundOption)).reverse(), function (config) { - var backgroundColor = config.backgroundColor, // if defined, replace the old one (specific for gradients) - axisUserOptions = firstAxis.userOptions; - config = merge(pane.defaultBackgroundOptions, config); - if (backgroundColor) { - config.backgroundColor = backgroundColor; - } - config.color = config.backgroundColor; // due to naming in plotBands - firstAxis.options.plotBands.unshift(config); - axisUserOptions.plotBands = axisUserOptions.plotBands || []; // #3176 - if (axisUserOptions.plotBands !== firstAxis.options.plotBands) { - axisUserOptions.plotBands.unshift(config); - } - }); - } - }, - - /** - * The default options object - */ - defaultOptions: { - // background: {conditional}, - center: ['50%', '50%'], - size: '85%', - startAngle: 0 - //endAngle: startAngle + 360 - }, - - /** - * The default background options - */ - defaultBackgroundOptions: { - shape: 'circle', - borderWidth: 1, - borderColor: 'silver', - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#FFF'], - [1, '#DDD'] - ] - }, - from: -Number.MAX_VALUE, // corrected to axis min - innerRadius: 0, - to: Number.MAX_VALUE, // corrected to axis max - outerRadius: '105%' - } - }); - - var axisProto = Axis.prototype, - tickProto = Tick.prototype; - - /** - * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges - */ - var hiddenAxisMixin = { - getOffset: noop, - redraw: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - render: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - setScale: noop, - setCategories: noop, - setTitle: noop - }; - - /** - * Augmented methods for the value axis - */ - var radialAxisMixin = { - isRadial: true, - - /** - * The default options extend defaultYAxisOptions - */ - defaultRadialGaugeOptions: { - labels: { - align: 'center', - x: 0, - y: null // auto - }, - minorGridLineWidth: 0, - minorTickInterval: 'auto', - minorTickLength: 10, - minorTickPosition: 'inside', - minorTickWidth: 1, - tickLength: 10, - tickPosition: 'inside', - tickWidth: 2, - title: { - rotation: 0 - }, - zIndex: 2 // behind dials, points in the series group - }, - - // Circular axis around the perimeter of a polar chart - defaultRadialXOptions: { - gridLineWidth: 1, // spokes - labels: { - align: null, // auto - distance: 15, - x: 0, - y: null // auto - }, - maxPadding: 0, - minPadding: 0, - showLastLabel: false, - tickLength: 0 - }, - - // Radial axis, like a spoke in a polar chart - defaultRadialYOptions: { - gridLineInterpolation: 'circle', - labels: { - align: 'right', - x: -3, - y: -2 - }, - showLastLabel: false, - title: { - x: 4, - text: null, - rotation: 90 - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - - var options = this.options = merge( - this.defaultOptions, - this.defaultRadialOptions, - userOptions - ); - - // Make sure the plotBands array is instanciated for each Axis (#2649) - if (!options.plotBands) { - options.plotBands = []; - } - - }, - - /** - * Wrap the getOffset method to return zero offset for title or labels in a radial - * axis - */ - getOffset: function () { - // Call the Axis prototype method (the method we're in now is on the instance) - axisProto.getOffset.call(this); - - // Title or label offsets are not counted - this.chart.axisOffset[this.side] = 0; - - // Set the center array - this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane); - }, - - - /** - * Get the path for the axis line. This method is also referenced in the getPlotLinePath - * method. - */ - getLinePath: function (lineWidth, radius) { - var center = this.center; - radius = pick(radius, center[2] / 2 - this.offset); - - return this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radius, - radius, - { - start: this.startAngleRad, - end: this.endAngleRad, - open: true, - innerR: 0 - } - ); - }, - - /** - * Override setAxisTranslation by setting the translation to the difference - * in rotation. This allows the translate method to return angle for - * any given value. - */ - setAxisTranslation: function () { - - // Call uber method - axisProto.setAxisTranslation.call(this); - - // Set transA and minPixelPadding - if (this.center) { // it's not defined the first time - if (this.isCircular) { - - this.transA = (this.endAngleRad - this.startAngleRad) / - ((this.max - this.min) || 1); - - - } else { - this.transA = (this.center[2] / 2) / ((this.max - this.min) || 1); - } - - if (this.isXAxis) { - this.minPixelPadding = this.transA * this.minPointOffset; - } else { - // This is a workaround for regression #2593, but categories still don't position correctly. - this.minPixelPadding = 0; - } - } - }, - - /** - * In case of auto connect, add one closestPointRange to the max value right before - * tickPositions are computed, so that ticks will extend passed the real max. - */ - beforeSetTickPositions: function () { - if (this.autoConnect) { - this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260 - } - }, - - /** - * Override the setAxisSize method to use the arc's circumference as length. This - * allows tickPixelInterval to apply to pixel lengths along the perimeter - */ - setAxisSize: function () { - - axisProto.setAxisSize.call(this); - - if (this.isRadial) { - - // Set the center array - this.center = this.pane.center = Highcharts.CenteredSeriesMixin.getCenter.call(this.pane); - - // The sector is used in Axis.translate to compute the translation of reversed axis points (#2570) - if (this.isCircular) { - this.sector = this.endAngleRad - this.startAngleRad; - } - - // Axis len is used to lay out the ticks - this.len = this.width = this.height = this.center[2] * pick(this.sector, 1) / 2; - - - } - }, - - /** - * Returns the x, y coordinate of a point given by a value and a pixel distance - * from center - */ - getPosition: function (value, length) { - return this.postTranslate( - this.isCircular ? this.translate(value) : 0, // #2848 - pick(this.isCircular ? length : this.translate(value), this.center[2] / 2) - this.offset - ); - }, - - /** - * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. - */ - postTranslate: function (angle, radius) { - - var chart = this.chart, - center = this.center; - - angle = this.startAngleRad + angle; - - return { - x: chart.plotLeft + center[0] + Math.cos(angle) * radius, - y: chart.plotTop + center[1] + Math.sin(angle) * radius - }; - - }, - - /** - * Find the path for plot bands along the radial axis - */ - getPlotBandPath: function (from, to, options) { - var center = this.center, - startAngleRad = this.startAngleRad, - fullRadius = center[2] / 2, - radii = [ - pick(options.outerRadius, '100%'), - options.innerRadius, - pick(options.thickness, 10) - ], - percentRegex = /%$/, - start, - end, - open, - isCircular = this.isCircular, // X axis in a polar chart - ret; - - // Polygonal plot bands - if (this.options.gridLineInterpolation === 'polygon') { - ret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true)); - - // Circular grid bands - } else { - - // Keep within bounds - from = Math.max(from, this.min); - to = Math.min(to, this.max); - - // Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from - if (!isCircular) { - radii[0] = this.translate(from); - radii[1] = this.translate(to); - } - - // Convert percentages to pixel values - radii = map(radii, function (radius) { - if (percentRegex.test(radius)) { - radius = (pInt(radius, 10) * fullRadius) / 100; - } - return radius; - }); - - // Handle full circle - if (options.shape === 'circle' || !isCircular) { - start = -Math.PI / 2; - end = Math.PI * 1.5; - open = true; - } else { - start = startAngleRad + this.translate(from); - end = startAngleRad + this.translate(to); - } - - - ret = this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radii[0], - radii[0], - { - start: Math.min(start, end), // Math is for reversed yAxis (#3606) - end: Math.max(start, end), - innerR: pick(radii[1], radii[0] - radii[2]), - open: open - } - ); - } - - return ret; - }, - - /** - * Find the path for plot lines perpendicular to the radial axis. - */ - getPlotLinePath: function (value, reverse) { - var axis = this, - center = axis.center, - chart = axis.chart, - end = axis.getPosition(value), - xAxis, - xy, - tickPositions, - ret; - - // Spokes - if (axis.isCircular) { - ret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y]; - - // Concentric circles - } else if (axis.options.gridLineInterpolation === 'circle') { - value = axis.translate(value); - if (value) { // a value of 0 is in the center - ret = axis.getLinePath(0, value); - } - // Concentric polygons - } else { - // Find the X axis in the same pane - each(chart.xAxis, function (a) { - if (a.pane === axis.pane) { - xAxis = a; - } - }); - ret = []; - value = axis.translate(value); - tickPositions = xAxis.tickPositions; - if (xAxis.autoConnect) { - tickPositions = tickPositions.concat([tickPositions[0]]); - } - // Reverse the positions for concatenation of polygonal plot bands - if (reverse) { - tickPositions = [].concat(tickPositions).reverse(); - } - - each(tickPositions, function (pos, i) { - xy = xAxis.getPosition(pos, value); - ret.push(i ? 'L' : 'M', xy.x, xy.y); - }); - - } - return ret; - }, - - /** - * Find the position for the axis title, by default inside the gauge - */ - getTitlePosition: function () { - var center = this.center, - chart = this.chart, - titleOptions = this.options.title; - - return { - x: chart.plotLeft + center[0] + (titleOptions.x || 0), - y: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * - center[2]) + (titleOptions.y || 0) - }; - } - - }; - - /** - * Override axisProto.init to mix in special axis instance functions and function overrides - */ - wrap(axisProto, 'init', function (proceed, chart, userOptions) { - var axis = this, - angular = chart.angular, - polar = chart.polar, - isX = userOptions.isX, - isHidden = angular && isX, - isCircular, - startAngleRad, - endAngleRad, - options, - chartOptions = chart.options, - paneIndex = userOptions.pane || 0, - pane, - paneOptions; - - // Before prototype.init - if (angular) { - extend(this, isHidden ? hiddenAxisMixin : radialAxisMixin); - isCircular = !isX; - if (isCircular) { - this.defaultRadialOptions = this.defaultRadialGaugeOptions; - } - - } else if (polar) { - //extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin); - extend(this, radialAxisMixin); - isCircular = isX; - this.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions); - - } - - // Run prototype.init - proceed.call(this, chart, userOptions); - - if (!isHidden && (angular || polar)) { - options = this.options; - - // Create the pane and set the pane options. - if (!chart.panes) { - chart.panes = []; - } - this.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane( - splat(chartOptions.pane)[paneIndex], - chart, - axis - ); - paneOptions = pane.options; - - - // Disable certain features on angular and polar axes - chart.inverted = false; - chartOptions.chart.zoomType = null; - - // Start and end angle options are - // given in degrees relative to top, while internal computations are - // in radians relative to right (like SVG). - this.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180; - this.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360) - 90) * Math.PI / 180; - this.offset = options.offset || 0; - - this.isCircular = isCircular; - - // Automatically connect grid lines? - if (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) { - this.autoConnect = true; - } - } - - }); - - /** - * Add special cases within the Tick class' methods for radial axes. - */ - wrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) { - var axis = this.axis; - - return axis.getPosition ? - axis.getPosition(pos) : - proceed.call(this, horiz, pos, tickmarkOffset, old); - }); - - /** - * Wrap the getLabelPosition function to find the center position of the label - * based on the distance option - */ - wrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - optionsY = labelOptions.y, - ret, - centerSlot = 20, // 20 degrees to each side at the top and bottom - align = labelOptions.align, - angle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360; - - if (axis.isRadial) { - ret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25)); - - // Automatically rotated - if (labelOptions.rotation === 'auto') { - label.attr({ - rotation: angle - }); - - // Vertically centered - } else if (optionsY === null) { - optionsY = axis.chart.renderer.fontMetrics(label.styles.fontSize).b - label.getBBox().height / 2; - } - - // Automatic alignment - if (align === null) { - if (axis.isCircular) { - if (this.label.getBBox().width > axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506 - centerSlot = 0; - } - if (angle > centerSlot && angle < 180 - centerSlot) { - align = 'left'; // right hemisphere - } else if (angle > 180 + centerSlot && angle < 360 - centerSlot) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - } else { - align = 'center'; - } - label.attr({ - align: align - }); - } - - ret.x += labelOptions.x; - ret.y += optionsY; - - } else { - ret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - } - return ret; - }); - - /** - * Wrap the getMarkPath function to return the path of the radial marker - */ - wrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) { - var axis = this.axis, - endPoint, - ret; - - if (axis.isRadial) { - endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength); - ret = [ - 'M', - x, - y, - 'L', - endPoint.x, - endPoint.y - ]; - } else { - ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer); - } - return ret; - });/* - * The AreaRangeSeries class - * - */ - - /** - * Extend the default options with map options - */ - defaultPlotOptions.arearange = merge(defaultPlotOptions.area, { - lineWidth: 1, - marker: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{series.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>' - }, - trackByArea: true, - dataLabels: { - align: null, - verticalAlign: null, - xLow: 0, - xHigh: 0, - yLow: 0, - yHigh: 0 - }, - states: { - hover: { - halo: false - } - } - }); - - /** - * Add the series type - */ - seriesTypes.arearange = extendClass(seriesTypes.area, { - type: 'arearange', - pointArrayMap: ['low', 'high'], - dataLabelCollections: ['dataLabel', 'dataLabelUpper'], - toYData: function (point) { - return [point.low, point.high]; - }, - pointValKey: 'low', - deferTranslatePolar: true, - - /** - * Translate a point's plotHigh from the internal angle and radius measures to - * true plotHigh coordinates. This is an addition of the toXY method found in - * Polar.js, because it runs too early for arearanges to be considered (#3419). - */ - highToXY: function (point) { - // Find the polar plotX and plotY - var chart = this.chart, - xy = this.xAxis.postTranslate(point.rectPlotX, this.yAxis.len - point.plotHigh); - point.plotHighX = xy.x - chart.plotLeft; - point.plotHigh = xy.y - chart.plotTop; - }, - - /** - * Extend getSegments to force null points if the higher value is null. #1703. - */ - getSegments: function () { - var series = this; - - each(series.points, function (point) { - if (!series.options.connectNulls && (point.low === null || point.high === null)) { - point.y = null; - } else if (point.low === null && point.high !== null) { - point.y = point.high; - } - }); - Series.prototype.getSegments.call(this); - }, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis; - - seriesTypes.area.prototype.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - - var low = point.low, - high = point.high, - plotY = point.plotY; - - if (high === null && low === null) { - point.y = null; - } else if (low === null) { - point.plotLow = point.plotY = null; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } else if (high === null) { - point.plotLow = plotY; - point.plotHigh = null; - } else { - point.plotLow = plotY; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } - }); - - // Postprocess plotHigh - if (this.chart.polar) { - each(this.points, function (point) { - series.highToXY(point); - }); - } - }, - - /** - * Extend the line series' getSegmentPath method by applying the segment - * path to both lower and higher values of the range - */ - getSegmentPath: function (segment) { - - var lowSegment, - highSegment = [], - i = segment.length, - baseGetSegmentPath = Series.prototype.getSegmentPath, - point, - linePath, - lowerPath, - options = this.options, - step = options.step, - higherPath; - - // Remove nulls from low segment - lowSegment = Highcharts.grep(segment, function (point) { - return point.plotLow !== null; - }); - - // Make a segment with plotX and plotY for the top values - while (i--) { - point = segment[i]; - if (point.plotHigh !== null) { - highSegment.push({ - plotX: point.plotHighX || point.plotX, // plotHighX is for polar charts - plotY: point.plotHigh - }); - } - } - - // Get the paths - lowerPath = baseGetSegmentPath.call(this, lowSegment); - if (step) { - if (step === true) { - step = 'left'; - } - options.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath - } - higherPath = baseGetSegmentPath.call(this, highSegment); - options.step = step; - - // Create a line on both top and bottom of the range - linePath = [].concat(lowerPath, higherPath); - - // For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo' - if (!this.chart.polar) { - higherPath[0] = 'L'; // this probably doesn't work for spline - } - this.areaPath = this.areaPath.concat(lowerPath, higherPath); - - return linePath; - }, - - /** - * Extend the basic drawDataLabels method by running it for both lower and higher - * values. - */ - drawDataLabels: function () { - - var data = this.data, - length = data.length, - i, - originalDataLabels = [], - seriesProto = Series.prototype, - dataLabelOptions = this.options.dataLabels, - align = dataLabelOptions.align, - verticalAlign = dataLabelOptions.verticalAlign, - inside = dataLabelOptions.inside, - point, - up, - inverted = this.chart.inverted; - - if (dataLabelOptions.enabled || this._hasPointLabels) { - - // Step 1: set preliminary values for plotY and dataLabel and draw the upper labels - i = length; - while (i--) { - point = data[i]; - if (point) { - up = inside ? point.plotHigh < point.plotLow : point.plotHigh > point.plotLow; - - // Set preliminary values - point.y = point.high; - point._plotY = point.plotY; - point.plotY = point.plotHigh; - - // Store original data labels and set preliminary label objects to be picked up - // in the uber method - originalDataLabels[i] = point.dataLabel; - point.dataLabel = point.dataLabelUpper; - - // Set the default offset - point.below = up; - if (inverted) { - if (!align) { - dataLabelOptions.align = up ? 'right' : 'left'; - } - } else { - if (!verticalAlign) { - dataLabelOptions.verticalAlign = up ? 'top' : 'bottom'; - } - } - - dataLabelOptions.x = dataLabelOptions.xHigh; - dataLabelOptions.y = dataLabelOptions.yHigh; - } - } - - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); // #1209 - } - - // Step 2: reorganize and handle data labels for the lower values - i = length; - while (i--) { - point = data[i]; - if (point) { - up = inside ? point.plotHigh < point.plotLow : point.plotHigh > point.plotLow; - - // Move the generated labels from step 1, and reassign the original data labels - point.dataLabelUpper = point.dataLabel; - point.dataLabel = originalDataLabels[i]; - - // Reset values - point.y = point.low; - point.plotY = point._plotY; - - // Set the default offset - point.below = !up; - if (inverted) { - if (!align) { - dataLabelOptions.align = up ? 'left' : 'right'; - } - } else { - if (!verticalAlign) { - dataLabelOptions.verticalAlign = up ? 'bottom' : 'top'; - } - - } - - dataLabelOptions.x = dataLabelOptions.xLow; - dataLabelOptions.y = dataLabelOptions.yLow; - } - } - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); - } - } - - dataLabelOptions.align = align; - dataLabelOptions.verticalAlign = verticalAlign; - }, - - alignDataLabel: function () { - seriesTypes.column.prototype.alignDataLabel.apply(this, arguments); - }, - - setStackedPoints: noop, - - getSymbol: noop, - - drawPoints: noop - }); - /** - * The AreaSplineRangeSeries class - */ - - defaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange); - - /** - * AreaSplineRangeSeries object - */ - seriesTypes.areasplinerange = extendClass(seriesTypes.arearange, { - type: 'areasplinerange', - getPointSpline: seriesTypes.spline.prototype.getPointSpline - }); - - (function () { - - var colProto = seriesTypes.column.prototype; - - /** - * The ColumnRangeSeries class - */ - defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, { - lineWidth: 1, - pointRange: null - }); - - /** - * ColumnRangeSeries object - */ - seriesTypes.columnrange = extendClass(seriesTypes.arearange, { - type: 'columnrange', - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - xAxis = series.xAxis, - chart = series.chart, - plotHigh; - - colProto.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - var shapeArgs = point.shapeArgs, - minPointLength = series.options.minPointLength, - heightDifference, - height, - y; - - point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1); - point.plotLow = point.plotY; - - // adjust shape - y = plotHigh; - height = point.plotY - plotHigh; - - // Adjust for minPointLength - if (Math.abs(height) < minPointLength) { - heightDifference = (minPointLength - height); - height += heightDifference; - y -= heightDifference / 2; - - // Adjust for negative ranges or reversed Y axis (#1457) - } else if (height < 0) { - height *= -1; - y -= height; - } - - shapeArgs.height = height; - shapeArgs.y = y; - - point.tooltipPos = chart.inverted ? - [ - yAxis.len + yAxis.pos - chart.plotLeft - y - height / 2, - xAxis.len + xAxis.pos - chart.plotTop - shapeArgs.x - shapeArgs.width / 2, - height - ] : [ - xAxis.left - chart.plotLeft + shapeArgs.x + shapeArgs.width / 2, - yAxis.pos - chart.plotTop + y + height / 2, - height - ]; // don't inherit from column tooltip position - #3372 - }); - }, - directTouch: true, - trackerGroups: ['group', 'dataLabelsGroup'], - drawGraph: noop, - crispCol: colProto.crispCol, - pointAttrToOptions: colProto.pointAttrToOptions, - drawPoints: colProto.drawPoints, - drawTracker: colProto.drawTracker, - animate: colProto.animate, - getColumnMetrics: colProto.getColumnMetrics - }); - }()); - - /* - * The GaugeSeries class - */ - - - - /** - * Extend the default options - */ - defaultPlotOptions.gauge = merge(defaultPlotOptions.line, { - dataLabels: { - enabled: true, - defer: false, - y: 15, - borderWidth: 1, - borderColor: 'silver', - borderRadius: 3, - crop: false, - verticalAlign: 'top', - zIndex: 2 - }, - dial: { - // radius: '80%', - // backgroundColor: 'black', - // borderColor: 'silver', - // borderWidth: 0, - // baseWidth: 3, - // topWidth: 1, - // baseLength: '70%' // of radius - // rearLength: '10%' - }, - pivot: { - //radius: 5, - //borderWidth: 0 - //borderColor: 'silver', - //backgroundColor: 'black' - }, - tooltip: { - headerFormat: '' - }, - showInLegend: false - }); - - /** - * Extend the point object - */ - var GaugePoint = extendClass(Point, { - /** - * Don't do any hover colors or anything - */ - setState: function (state) { - this.state = state; - } - }); - - - /** - * Add the series type - */ - var GaugeSeries = { - type: 'gauge', - pointClass: GaugePoint, - - // chart.angular will be set to true when a gauge series is present, and this will - // be used on the axes - angular: true, - drawGraph: noop, - fixedBox: true, - forceDL: true, - trackerGroups: ['group', 'dataLabelsGroup'], - - /** - * Calculate paths etc - */ - translate: function () { - - var series = this, - yAxis = series.yAxis, - options = series.options, - center = yAxis.center; - - series.generatePoints(); - - each(series.points, function (point) { - - var dialOptions = merge(options.dial, point.dial), - radius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200, - baseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100, - rearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100, - baseWidth = dialOptions.baseWidth || 3, - topWidth = dialOptions.topWidth || 1, - overshoot = options.overshoot, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true); - - // Handle the wrap and overshoot options - if (overshoot && typeof overshoot === 'number') { - overshoot = overshoot / 180 * Math.PI; - rotation = Math.max(yAxis.startAngleRad - overshoot, Math.min(yAxis.endAngleRad + overshoot, rotation)); - - } else if (options.wrap === false) { - rotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation)); - } - - rotation = rotation * 180 / Math.PI; - - point.shapeType = 'path'; - point.shapeArgs = { - d: dialOptions.path || [ - 'M', - -rearLength, -baseWidth / 2, - 'L', - baseLength, -baseWidth / 2, - radius, -topWidth / 2, - radius, topWidth / 2, - baseLength, baseWidth / 2, - -rearLength, baseWidth / 2, - 'z' - ], - translateX: center[0], - translateY: center[1], - rotation: rotation - }; - - // Positions for data label - point.plotX = center[0]; - point.plotY = center[1]; - }); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - - var series = this, - center = series.yAxis.center, - pivot = series.pivot, - options = series.options, - pivotOptions = options.pivot, - renderer = series.chart.renderer; - - each(series.points, function (point) { - - var graphic = point.graphic, - shapeArgs = point.shapeArgs, - d = shapeArgs.d, - dialOptions = merge(options.dial, point.dial); // #1233 - - if (graphic) { - graphic.animate(shapeArgs); - shapeArgs.d = d; // animate alters it - } else { - point.graphic = renderer[point.shapeType](shapeArgs) - .attr({ - stroke: dialOptions.borderColor || 'none', - 'stroke-width': dialOptions.borderWidth || 0, - fill: dialOptions.backgroundColor || 'black', - rotation: shapeArgs.rotation, // required by VML when animation is false - zIndex: 1 - }) - .add(series.group); - } - }); - - // Add or move the pivot - if (pivot) { - pivot.animate({ // #1235 - translateX: center[0], - translateY: center[1] - }); - } else { - series.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5)) - .attr({ - 'stroke-width': pivotOptions.borderWidth || 0, - stroke: pivotOptions.borderColor || 'silver', - fill: pivotOptions.backgroundColor || 'black', - zIndex: 2 - }) - .translate(center[0], center[1]) - .add(series.group); - } - }, - - /** - * Animate the arrow up from startAngle - */ - animate: function (init) { - var series = this; - - if (!init) { - each(series.points, function (point) { - var graphic = point.graphic; - - if (graphic) { - // start value - graphic.attr({ - rotation: series.yAxis.startAngleRad * 180 / Math.PI - }); - - // animate - graphic.animate({ - rotation: point.shapeArgs.rotation - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - render: function () { - this.group = this.plotGroup( - 'group', - 'series', - this.visible ? 'visible' : 'hidden', - this.options.zIndex, - this.chart.seriesGroup - ); - Series.prototype.render.call(this); - this.group.clip(this.chart.clipRect); - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw) { - Series.prototype.setData.call(this, data, false); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(); - } - }, - - /** - * If the tracking module is loaded, add the point tracker - */ - drawTracker: TrackerMixin && TrackerMixin.drawTrackerPoint - }; - seriesTypes.gauge = extendClass(seriesTypes.line, GaugeSeries); - - /* **************************************************************************** - * Start Box plot series code * - *****************************************************************************/ - - // Set default options - defaultPlotOptions.boxplot = merge(defaultPlotOptions.column, { - fillColor: '#FFFFFF', - lineWidth: 1, - //medianColor: null, - medianWidth: 2, - states: { - hover: { - brightness: -0.3 - } - }, - //stemColor: null, - //stemDashStyle: 'solid' - //stemWidth: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{point.color}">\u25CF</span> <b> {series.name}</b><br/>' + // docs - 'Maximum: {point.high}<br/>' + - 'Upper quartile: {point.q3}<br/>' + - 'Median: {point.median}<br/>' + - 'Lower quartile: {point.q1}<br/>' + - 'Minimum: {point.low}<br/>' - - }, - //whiskerColor: null, - whiskerLength: '50%', - whiskerWidth: 2 - }); - - // Create the series object - seriesTypes.boxplot = extendClass(seriesTypes.column, { - type: 'boxplot', - pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.q1, point.median, point.q3, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - - /** - * One-to-one mapping from options to SVG attributes - */ - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - fill: 'fillColor', - stroke: 'color', - 'stroke-width': 'lineWidth' - }, - - /** - * Disable data labels for box plot - */ - drawDataLabels: noop, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - pointArrayMap = series.pointArrayMap; - - seriesTypes.column.prototype.translate.apply(series); - - // do the translation on each point dimension - each(series.points, function (point) { - each(pointArrayMap, function (key) { - if (point[key] !== null) { - point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1); - } - }); - }); - }, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, //state = series.state, - points = series.points, - options = series.options, - chart = series.chart, - renderer = chart.renderer, - pointAttr, - q1Plot, - q3Plot, - highPlot, - lowPlot, - medianPlot, - crispCorr, - crispX, - graphic, - stemPath, - stemAttr, - boxPath, - whiskersPath, - whiskersAttr, - medianPath, - medianAttr, - width, - left, - right, - halfWidth, - shapeArgs, - color, - doQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles - pointWiskerLength, - whiskerLength = series.options.whiskerLength; - - - each(points, function (point) { - - graphic = point.graphic; - shapeArgs = point.shapeArgs; // the box - stemAttr = {}; - whiskersAttr = {}; - medianAttr = {}; - color = point.color || series.color; - - if (point.plotY !== UNDEFINED) { - - pointAttr = point.pointAttr[point.selected ? 'selected' : '']; - - // crisp vector coordinates - width = shapeArgs.width; - left = mathFloor(shapeArgs.x); - right = left + width; - halfWidth = mathRound(width / 2); - //crispX = mathRound(left + halfWidth) + crispCorr; - q1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr; - q3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr; - highPlot = mathFloor(point.highPlot);// + crispCorr; - lowPlot = mathFloor(point.lowPlot);// + crispCorr; - - // Stem attributes - stemAttr.stroke = point.stemColor || options.stemColor || color; - stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth); - stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle; - - // Whiskers attributes - whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color; - whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth); - - // Median attributes - medianAttr.stroke = point.medianColor || options.medianColor || color; - medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth); - - // The stem - crispCorr = (stemAttr['stroke-width'] % 2) / 2; - crispX = left + halfWidth + crispCorr; - stemPath = [ - // stem up - 'M', - crispX, q3Plot, - 'L', - crispX, highPlot, - - // stem down - 'M', - crispX, q1Plot, - 'L', - crispX, lowPlot - ]; - - // The box - if (doQuartiles) { - crispCorr = (pointAttr['stroke-width'] % 2) / 2; - crispX = mathFloor(crispX) + crispCorr; - q1Plot = mathFloor(q1Plot) + crispCorr; - q3Plot = mathFloor(q3Plot) + crispCorr; - left += crispCorr; - right += crispCorr; - boxPath = [ - 'M', - left, q3Plot, - 'L', - left, q1Plot, - 'L', - right, q1Plot, - 'L', - right, q3Plot, - 'L', - left, q3Plot, - 'z' - ]; - } - - // The whiskers - if (whiskerLength) { - crispCorr = (whiskersAttr['stroke-width'] % 2) / 2; - highPlot = highPlot + crispCorr; - lowPlot = lowPlot + crispCorr; - pointWiskerLength = (/%$/).test(whiskerLength) ? halfWidth * parseFloat(whiskerLength) / 100 : whiskerLength / 2; - whiskersPath = [ - // High whisker - 'M', - crispX - pointWiskerLength, - highPlot, - 'L', - crispX + pointWiskerLength, - highPlot, - - // Low whisker - 'M', - crispX - pointWiskerLength, - lowPlot, - 'L', - crispX + pointWiskerLength, - lowPlot - ]; - } - - // The median - crispCorr = (medianAttr['stroke-width'] % 2) / 2; - medianPlot = mathRound(point.medianPlot) + crispCorr; - medianPath = [ - 'M', - left, - medianPlot, - 'L', - right, - medianPlot - ]; - - // Create or update the graphics - if (graphic) { // update - - point.stem.animate({ d: stemPath }); - if (whiskerLength) { - point.whiskers.animate({ d: whiskersPath }); - } - if (doQuartiles) { - point.box.animate({ d: boxPath }); - } - point.medianShape.animate({ d: medianPath }); - - } else { // create new - point.graphic = graphic = renderer.g() - .add(series.group); - - point.stem = renderer.path(stemPath) - .attr(stemAttr) - .add(graphic); - - if (whiskerLength) { - point.whiskers = renderer.path(whiskersPath) - .attr(whiskersAttr) - .add(graphic); - } - if (doQuartiles) { - point.box = renderer.path(boxPath) - .attr(pointAttr) - .add(graphic); - } - point.medianShape = renderer.path(medianPath) - .attr(medianAttr) - .add(graphic); - } - } - }); - - }, - setStackedPoints: noop // #3890 - - - }); - - /* **************************************************************************** - * End Box plot series code * - *****************************************************************************/ - /* **************************************************************************** - * Start error bar series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, { - color: '#000000', - grouping: false, - linkedTo: ':previous', - tooltip: { - pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>' // docs - }, - whiskerWidth: null - }); - - // 2 - Create the series object - seriesTypes.errorbar = extendClass(seriesTypes.boxplot, { - type: 'errorbar', - pointArrayMap: ['low', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - doQuartiles: false, - drawDataLabels: seriesTypes.arearange ? seriesTypes.arearange.prototype.drawDataLabels : noop, - - /** - * Get the width and X offset, either on top of the linked series column - * or standalone - */ - getColumnMetrics: function () { - return (this.linkedParent && this.linkedParent.columnMetrics) || - seriesTypes.column.prototype.getColumnMetrics.call(this); - } - }); - - /* **************************************************************************** - * End error bar series code * - *****************************************************************************/ - /* **************************************************************************** - * Start Waterfall series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, { - lineWidth: 1, - lineColor: '#333', - dashStyle: 'dot', - borderColor: '#333', - dataLabels: { - inside: true - }, - states: { - hover: { - lineWidthPlus: 0 // #3126 - } - } - }); - - - // 2 - Create the series object - seriesTypes.waterfall = extendClass(seriesTypes.column, { - type: 'waterfall', - - upColorProp: 'fill', - - pointValKey: 'y', - - /** - * Translate data points from raw values - */ - translate: function () { - var series = this, - options = series.options, - yAxis = series.yAxis, - len, - i, - points, - point, - shapeArgs, - stack, - y, - yValue, - previousY, - previousIntermediate, - range, - minPointLength = pick(options.minPointLength, 5), - threshold = options.threshold, - stacking = options.stacking, - tooltipY; - - // run column series translate - seriesTypes.column.prototype.translate.apply(this); - series.minPointLengthOffset = 0; - - previousY = previousIntermediate = threshold; - points = series.points; - - for (i = 0, len = points.length; i < len; i++) { - // cache current point object - point = points[i]; - yValue = this.processedYData[i]; - shapeArgs = point.shapeArgs; - - // get current stack - stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey]; - range = stack ? - stack[point.x].points[series.index + ',' + i] : - [0, yValue]; - - // override point value for sums - // #3710 Update point does not propagate to sum - if (point.isSum) { - point.y = yValue; - } else if (point.isIntermediateSum) { - point.y = yValue - previousIntermediate; // #3840 - } - // up points - y = mathMax(previousY, previousY + point.y) + range[0]; - shapeArgs.y = yAxis.translate(y, 0, 1); - - - // sum points - if (point.isSum) { - shapeArgs.y = yAxis.translate(range[1], 0, 1); - shapeArgs.height = Math.min(yAxis.translate(range[0], 0, 1), yAxis.len) - shapeArgs.y + series.minPointLengthOffset; // #4256 - - } else if (point.isIntermediateSum) { - shapeArgs.y = yAxis.translate(range[1], 0, 1); - shapeArgs.height = Math.min(yAxis.translate(previousIntermediate, 0, 1), yAxis.len) - shapeArgs.y + series.minPointLengthOffset; - previousIntermediate = range[1]; - - // If it's not the sum point, update previous stack end position and get - // shape height (#3886) - } else { - if (previousY !== 0) { // Not the first point - shapeArgs.height = yValue > 0 ? - yAxis.translate(previousY, 0, 1) - shapeArgs.y : - yAxis.translate(previousY, 0, 1) - yAxis.translate(previousY - yValue, 0, 1); - } - previousY += yValue; - } - // #3952 Negative sum or intermediate sum not rendered correctly - if (shapeArgs.height < 0) { - shapeArgs.y += shapeArgs.height; - shapeArgs.height *= -1; - } - - point.plotY = shapeArgs.y = mathRound(shapeArgs.y) - (series.borderWidth % 2) / 2; - shapeArgs.height = mathMax(mathRound(shapeArgs.height), 0.001); // #3151 - point.yBottom = shapeArgs.y + shapeArgs.height; - - if (shapeArgs.height <= minPointLength) { - shapeArgs.height = minPointLength; - series.minPointLengthOffset += minPointLength; - } - - shapeArgs.y -= series.minPointLengthOffset; - - // Correct tooltip placement (#3014) - tooltipY = point.plotY + (point.negative ? shapeArgs.height : 0) - series.minPointLengthOffset; - if (series.chart.inverted) { - point.tooltipPos[0] = yAxis.len - tooltipY; - } else { - point.tooltipPos[1] = tooltipY; - } - - } - }, - - /** - * Call default processData then override yData to reflect waterfall's extremes on yAxis - */ - processData: function (force) { - var series = this, - options = series.options, - yData = series.yData, - points = series.options.data, // #3710 Update point does not propagate to sum - point, - dataLength = yData.length, - threshold = options.threshold || 0, - subSum, - sum, - dataMin, - dataMax, - y, - i; - - sum = subSum = dataMin = dataMax = threshold; - - for (i = 0; i < dataLength; i++) { - y = yData[i]; - point = points && points[i] ? points[i] : {}; - - if (y === 'sum' || point.isSum) { - yData[i] = sum; - } else if (y === 'intermediateSum' || point.isIntermediateSum) { - yData[i] = subSum; - } else { - sum += y; - subSum += y; - } - dataMin = Math.min(sum, dataMin); - dataMax = Math.max(sum, dataMax); - } - - Series.prototype.processData.call(this, force); - - // Record extremes - series.dataMin = dataMin; - series.dataMax = dataMax; - }, - - /** - * Return y value or string if point is sum - */ - toYData: function (pt) { - if (pt.isSum) { - return (pt.x === 0 ? null : 'sum'); //#3245 Error when first element is Sum or Intermediate Sum - } - if (pt.isIntermediateSum) { - return (pt.x === 0 ? null : 'intermediateSum'); //#3245 - } - return pt.y; - }, - - /** - * Postprocess mapping between options and SVG attributes - */ - getAttribs: function () { - seriesTypes.column.prototype.getAttribs.apply(this, arguments); - - var series = this, - options = series.options, - stateOptions = options.states, - upColor = options.upColor || series.color, - hoverColor = Highcharts.Color(upColor).brighten(0.1).get(), - seriesDownPointAttr = merge(series.pointAttr), - upColorProp = series.upColorProp; - - seriesDownPointAttr[''][upColorProp] = upColor; - seriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor; - seriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor; - - each(series.points, function (point) { - if (!point.options.color) { - // Up color - if (point.y > 0) { - point.pointAttr = seriesDownPointAttr; - point.color = upColor; - - // Down color (#3710, update to negative) - } else { - point.pointAttr = series.pointAttr; - } - } - }); - }, - - /** - * Draw columns' connector lines - */ - getGraphPath: function () { - - var data = this.data, - length = data.length, - lineWidth = this.options.lineWidth + this.borderWidth, - normalizer = mathRound(lineWidth) % 2 / 2, - path = [], - M = 'M', - L = 'L', - prevArgs, - pointArgs, - i, - d; - - for (i = 1; i < length; i++) { - pointArgs = data[i].shapeArgs; - prevArgs = data[i - 1].shapeArgs; - - d = [ - M, - prevArgs.x + prevArgs.width, prevArgs.y + normalizer, - L, - pointArgs.x, prevArgs.y + normalizer - ]; - - if (data[i - 1].y < 0) { - d[2] += prevArgs.height; - d[5] += prevArgs.height; - } - - path = path.concat(d); - } - - return path; - }, - - /** - * Extremes are recorded in processData - */ - getExtremes: noop, - - drawGraph: Series.prototype.drawGraph - }); - - /* **************************************************************************** - * End Waterfall series code * - *****************************************************************************/ - /** - * Set the default options for polygon - */ - defaultPlotOptions.polygon = merge(defaultPlotOptions.scatter, { - marker: { - enabled: false - } - }); - - /** - * The polygon series class - */ - seriesTypes.polygon = extendClass(seriesTypes.scatter, { - type: 'polygon', - fillGraph: true, - // Close all segments - getSegmentPath: function (segment) { - return Series.prototype.getSegmentPath.call(this, segment).concat('z'); - }, - drawGraph: Series.prototype.drawGraph, - drawLegendSymbol: Highcharts.LegendSymbolMixin.drawRectangle - }); - /* **************************************************************************** - * Start Bubble series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, { - dataLabels: { - formatter: function () { // #2945 - return this.point.z; - }, - inside: true, - verticalAlign: 'middle' - }, - // displayNegative: true, - marker: { - // fillOpacity: 0.5, - lineColor: null, // inherit from series.color - lineWidth: 1 - }, - minSize: 8, - maxSize: '20%', - // negativeColor: null, - // sizeBy: 'area' - softThreshold: false, - states: { - hover: { - halo: { - size: 5 - } - } - }, - tooltip: { - pointFormat: '({point.x}, {point.y}), Size: {point.z}' - }, - turboThreshold: 0, - zThreshold: 0, - zoneAxis: 'z' - }); - - var BubblePoint = extendClass(Point, { - haloPath: function () { - return Point.prototype.haloPath.call(this, this.shapeArgs.r + this.series.options.states.hover.halo.size); - }, - ttBelow: false - }); - - // 2 - Create the series object - seriesTypes.bubble = extendClass(seriesTypes.scatter, { - type: 'bubble', - pointClass: BubblePoint, - pointArrayMap: ['y', 'z'], - parallelArrays: ['x', 'y', 'z'], - trackerGroups: ['group', 'dataLabelsGroup'], - bubblePadding: true, - zoneAxis: 'z', - - /** - * Mapping between SVG attributes and the corresponding options - */ - pointAttrToOptions: { - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor' - }, - - /** - * Apply the fillOpacity to all fill positions - */ - applyOpacity: function (fill) { - var markerOptions = this.options.marker, - fillOpacity = pick(markerOptions.fillOpacity, 0.5); - - // When called from Legend.colorizeItem, the fill isn't predefined - fill = fill || markerOptions.fillColor || this.color; - - if (fillOpacity !== 1) { - fill = Color(fill).setOpacity(fillOpacity).get('rgba'); - } - return fill; - }, - - /** - * Extend the convertAttribs method by applying opacity to the fill - */ - convertAttribs: function () { - var obj = Series.prototype.convertAttribs.apply(this, arguments); - - obj.fill = this.applyOpacity(obj.fill); - - return obj; - }, - - /** - * Get the radius for each point based on the minSize, maxSize and each point's Z value. This - * must be done prior to Series.translate because the axis needs to add padding in - * accordance with the point sizes. - */ - getRadii: function (zMin, zMax, minSize, maxSize) { - var len, - i, - pos, - zData = this.zData, - radii = [], - options = this.options, - sizeByArea = options.sizeBy !== 'width', - zThreshold = options.zThreshold, - zRange = zMax - zMin, - value, - radius; - - // Set the shape type and arguments to be picked up in drawPoints - for (i = 0, len = zData.length; i < len; i++) { - - value = zData[i]; - - // When sizing by threshold, the absolute value of z determines the size - // of the bubble. - if (options.sizeByAbsoluteValue && value !== null) { - value = Math.abs(value - zThreshold); - zMax = Math.max(zMax - zThreshold, Math.abs(zMin - zThreshold)); - zMin = 0; - } - - if (value === null) { - radius = null; - // Issue #4419 - if value is less than zMin, push a radius that's always smaller than the minimum size - } else if (value < zMin) { - radius = minSize / 2 - 1; - } else { - // Relative size, a number between 0 and 1 - pos = zRange > 0 ? (value - zMin) / zRange : 0.5; - - if (sizeByArea && pos >= 0) { - pos = Math.sqrt(pos); - } - radius = math.ceil(minSize + pos * (maxSize - minSize)) / 2; - } - radii.push(radius); - } - this.radii = radii; - }, - - /** - * Perform animation on the bubbles - */ - animate: function (init) { - var animation = this.options.animation; - - if (!init) { // run the animation - each(this.points, function (point) { - var graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (graphic && shapeArgs) { - // start values - graphic.attr('r', 1); - - // animate - graphic.animate({ - r: shapeArgs.r - }, animation); - } - }); - - // delete this function to allow it only once - this.animate = null; - } - }, - - /** - * Extend the base translate method to handle bubble size - */ - translate: function () { - - var i, - data = this.data, - point, - radius, - radii = this.radii; - - // Run the parent method - seriesTypes.scatter.prototype.translate.call(this); - - // Set the shape type and arguments to be picked up in drawPoints - i = data.length; - - while (i--) { - point = data[i]; - radius = radii ? radii[i] : 0; // #1737 - - if (typeof radius === 'number' && radius >= this.minPxSize / 2) { - // Shape arguments - point.shapeType = 'circle'; - point.shapeArgs = { - x: point.plotX, - y: point.plotY, - r: radius - }; - - // Alignment box for the data label - point.dlBox = { - x: point.plotX - radius, - y: point.plotY - radius, - width: 2 * radius, - height: 2 * radius - }; - } else { // below zThreshold or z = null - point.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691 - } - } - }, - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawLegendSymbol: function (legend, item) { - var renderer = this.chart.renderer, - radius = renderer.fontMetrics(legend.itemStyle.fontSize).f / 2; - - item.legendSymbol = renderer.circle( - radius, - legend.baseline - radius, - radius - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - item.legendSymbol.isMarker = true; - - }, - - drawPoints: seriesTypes.column.prototype.drawPoints, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel, - buildKDTree: noop, - applyZones: noop - }); - - /** - * Add logic to pad each axis with the amount of pixels - * necessary to avoid the bubbles to overflow. - */ - Axis.prototype.beforePadding = function () { - var axis = this, - axisLength = this.len, - chart = this.chart, - pxMin = 0, - pxMax = axisLength, - isXAxis = this.isXAxis, - dataKey = isXAxis ? 'xData' : 'yData', - min = this.min, - extremes = {}, - smallestSize = math.min(chart.plotWidth, chart.plotHeight), - zMin = Number.MAX_VALUE, - zMax = -Number.MAX_VALUE, - range = this.max - min, - transA = axisLength / range, - activeSeries = []; - - // Handle padding on the second pass, or on redraw - each(this.series, function (series) { - - var seriesOptions = series.options, - zData; - - if (series.bubblePadding && (series.visible || !chart.options.chart.ignoreHiddenSeries)) { - - // Correction for #1673 - axis.allowZoomOutside = true; - - // Cache it - activeSeries.push(series); - - if (isXAxis) { // because X axis is evaluated first - - // For each series, translate the size extremes to pixel values - each(['minSize', 'maxSize'], function (prop) { - var length = seriesOptions[prop], - isPercent = /%$/.test(length); - - length = pInt(length); - extremes[prop] = isPercent ? - smallestSize * length / 100 : - length; - - }); - series.minPxSize = extremes.minSize; - series.maxPxSize = extremes.maxSize; - - // Find the min and max Z - zData = series.zData; - if (zData.length) { // #1735 - zMin = pick(seriesOptions.zMin, math.min( - zMin, - math.max( - arrayMin(zData), - seriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE - ) - )); - zMax = pick(seriesOptions.zMax, math.max(zMax, arrayMax(zData))); - } - } - } - }); - - each(activeSeries, function (series) { - - var data = series[dataKey], - i = data.length, - radius; - - if (isXAxis) { - series.getRadii(zMin, zMax, series.minPxSize, series.maxPxSize); - } - - if (range > 0) { - while (i--) { - if (typeof data[i] === 'number') { - radius = series.radii[i]; - pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin); - pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax); - } - } - } - }); - - - if (activeSeries.length && range > 0 && !this.isLog) { - pxMax -= axisLength; - transA *= (axisLength + pxMin - pxMax) / axisLength; - each([['min', 'userMin', pxMin], ['max', 'userMax', pxMax]], function (keys) { - if (pick(axis.options[keys[0]], axis[keys[1]]) === UNDEFINED) { - axis[keys[0]] += keys[2] / transA; - } - }); - } - }; - - /* **************************************************************************** - * End Bubble series code * - *****************************************************************************/ - - (function () { - - /** - * Extensions for polar charts. Additionally, much of the geometry required for polar charts is - * gathered in RadialAxes.js. - * - */ - - var seriesProto = Series.prototype, - pointerProto = Pointer.prototype, - colProto; - - /** - * Search a k-d tree by the point angle, used for shared tooltips in polar charts - */ - seriesProto.searchPointByAngle = function (e) { - var series = this, - chart = series.chart, - xAxis = series.xAxis, - center = xAxis.pane.center, - plotX = e.chartX - center[0] - chart.plotLeft, - plotY = e.chartY - center[1] - chart.plotTop; - - return this.searchKDTree({ - clientX: 180 + (Math.atan2(plotX, plotY) * (-180 / Math.PI)) - }); - - }; - - /** - * Wrap the buildKDTree function so that it searches by angle (clientX) in case of shared tooltip, - * and by two dimensional distance in case of non-shared. - */ - wrap(seriesProto, 'buildKDTree', function (proceed) { - if (this.chart.polar) { - if (this.kdByAngle) { - this.searchPoint = this.searchPointByAngle; - } else { - this.kdDimensions = 2; - } - } - proceed.apply(this); - }); - - /** - * Translate a point's plotX and plotY from the internal angle and radius measures to - * true plotX, plotY coordinates - */ - seriesProto.toXY = function (point) { - var xy, - chart = this.chart, - plotX = point.plotX, - plotY = point.plotY, - clientX; - - // Save rectangular plotX, plotY for later computation - point.rectPlotX = plotX; - point.rectPlotY = plotY; - - // Find the polar plotX and plotY - xy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY); - point.plotX = point.polarPlotX = xy.x - chart.plotLeft; - point.plotY = point.polarPlotY = xy.y - chart.plotTop; - - // If shared tooltip, record the angle in degrees in order to align X points. Otherwise, - // use a standard k-d tree to get the nearest point in two dimensions. - if (this.kdByAngle) { - clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360; - if (clientX < 0) { // #2665 - clientX += 360; - } - point.clientX = clientX; - } else { - point.clientX = point.plotX; - } - }; - - /** - * Add some special init logic to areas and areasplines - */ - function initArea(proceed, chart, options) { - proceed.call(this, chart, options); - if (this.chart.polar) { - - /** - * Overridden method to close a segment path. While in a cartesian plane the area - * goes down to the threshold, in the polar chart it goes to the center. - */ - this.closeSegment = function (path) { - var center = this.xAxis.center; - path.push( - 'L', - center[0], - center[1] - ); - }; - - // Instead of complicated logic to draw an area around the inner area in a stack, - // just draw it behind - this.closedStacks = true; - } - } - - - if (seriesTypes.area) { - wrap(seriesTypes.area.prototype, 'init', initArea); - } - if (seriesTypes.areaspline) { - wrap(seriesTypes.areaspline.prototype, 'init', initArea); - } - - if (seriesTypes.spline) { - /** - * Overridden method for calculating a spline from one point to the next - */ - wrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) { - - var ret, - smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc; - denom = smoothing + 1, - plotX, - plotY, - lastPoint, - nextPoint, - lastX, - lastY, - nextX, - nextY, - leftContX, - leftContY, - rightContX, - rightContY, - distanceLeftControlPoint, - distanceRightControlPoint, - leftContAngle, - rightContAngle, - jointAngle; - - - if (this.chart.polar) { - - plotX = point.plotX; - plotY = point.plotY; - lastPoint = segment[i - 1]; - nextPoint = segment[i + 1]; - - // Connect ends - if (this.connectEnds) { - if (!lastPoint) { - lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected - } - if (!nextPoint) { - nextPoint = segment[1]; - } - } - - // find control points - if (lastPoint && nextPoint) { - - lastX = lastPoint.plotX; - lastY = lastPoint.plotY; - nextX = nextPoint.plotX; - nextY = nextPoint.plotY; - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)); - distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)); - leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX); - rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX); - jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2); - - - // Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle - if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) { - jointAngle -= Math.PI; - } - - // Find the corrected control points for a spline straight through the point - leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint; - leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint; - rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint; - rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint; - - // Record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - - // moveTo or lineTo - if (!i) { - ret = ['M', plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - - - } else { - ret = proceed.call(this, segment, point, i); - } - return ret; - }); - } - - /** - * Extend translate. The plotX and plotY values are computed as if the polar chart were a - * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from - * center. - */ - wrap(seriesProto, 'translate', function (proceed) { - var chart = this.chart, - points, - i; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (chart.polar) { - this.kdByAngle = chart.tooltip && chart.tooltip.shared; - - if (!this.preventPostTranslate) { - points = this.points; - i = points.length; - - while (i--) { - // Translate plotX, plotY from angle and radius to true plot coordinates - this.toXY(points[i]); - } - } - } - }); - - /** - * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in - * line-like series. - */ - wrap(seriesProto, 'getSegmentPath', function (proceed, segment) { - - var points = this.points; - - // Connect the path - if (this.chart.polar && this.options.connectEnds !== false && - segment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) { - this.connectEnds = true; // re-used in splines - segment = [].concat(segment, [points[0]]); - } - - // Run uber method - return proceed.call(this, segment); - - }); - - - function polarAnimate(proceed, init) { - var chart = this.chart, - animation = this.options.animation, - group = this.group, - markerGroup = this.markerGroup, - center = this.xAxis.center, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - attribs; - - // Specific animation for polar charts - if (chart.polar) { - - // Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation - // would be so slow it would't matter. - if (chart.renderer.isSVG) { - - if (animation === true) { - animation = {}; - } - - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - attribs = { - translateX: center[0] + plotLeft, - translateY: center[1] + plotTop, - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - //markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: plotLeft, - translateY: plotTop, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - } - - // For non-polar charts, revert to the basic animation - } else { - proceed.call(this, init); - } - } - - // Define the animate method for regular series - wrap(seriesProto, 'animate', polarAnimate); - - - if (seriesTypes.column) { - - colProto = seriesTypes.column.prototype; - /** - * Define the animate method for columnseries - */ - wrap(colProto, 'animate', polarAnimate); - - - /** - * Extend the column prototype's translate method - */ - wrap(colProto, 'translate', function (proceed) { - - var xAxis = this.xAxis, - len = this.yAxis.len, - center = xAxis.center, - startAngleRad = xAxis.startAngleRad, - renderer = this.chart.renderer, - start, - points, - point, - i; - - this.preventPostTranslate = true; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (xAxis.isRadial) { - points = this.points; - i = points.length; - while (i--) { - point = points[i]; - start = point.barX + startAngleRad; - point.shapeType = 'path'; - point.shapeArgs = { - d: renderer.symbols.arc( - center[0], - center[1], - len - point.plotY, - null, - { - start: start, - end: start + point.pointWidth, - innerR: len - pick(point.yBottom, len) - } - ) - }; - // Provide correct plotX, plotY for tooltip - this.toXY(point); - point.tooltipPos = [point.plotX, point.plotY]; - point.ttBelow = point.plotY > center[1]; - } - } - }); - - - /** - * Align column data labels outside the columns. #1199. - */ - wrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) { - - if (this.chart.polar) { - var angle = point.rectPlotX / Math.PI * 180, - align, - verticalAlign; - - // Align nicely outside the perimeter of the columns - if (options.align === null) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - options.align = align; - } - if (options.verticalAlign === null) { - if (angle < 45 || angle > 315) { - verticalAlign = 'bottom'; // top part - } else if (angle > 135 && angle < 225) { - verticalAlign = 'top'; // bottom part - } else { - verticalAlign = 'middle'; // left or right - } - options.verticalAlign = verticalAlign; - } - - seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - } else { - proceed.call(this, point, dataLabel, options, alignTo, isNew); - } - - }); - } - - /** - * Extend getCoordinates to prepare for polar axis values - */ - wrap(pointerProto, 'getCoordinates', function (proceed, e) { - var chart = this.chart, - ret = { - xAxis: [], - yAxis: [] - }; - - if (chart.polar) { - - each(chart.axes, function (axis) { - var isXAxis = axis.isXAxis, - center = axis.center, - x = e.chartX - center[0] - chart.plotLeft, - y = e.chartY - center[1] - chart.plotTop; - - ret[isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.translate( - isXAxis ? - Math.PI - Math.atan2(x, y) : // angle - Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center - true - ) - }); - }); - - } else { - ret = proceed.call(this, e); - } - - return ret; - }); - - }()); - -})); diff --git a/platforms/android/assets/www/lib/highcharts/highcharts.js b/platforms/android/assets/www/lib/highcharts/highcharts.js deleted file mode 100644 index 2ef06f23..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts.js +++ /dev/null @@ -1,337 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(C,Y){typeof module==="object"&&module.exports?module.exports=C.document?Y(C):Y:C.Highcharts=Y(C)})(typeof window!=="undefined"?window:this,function(C){function Y(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw Error(c);C.console&&console.log(c)}function qb(a,b,c){this.options=b;this.elem=a;this.prop=c}function D(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&& -Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function F(a,b){return parseInt(a,b||10)}function ya(a){return typeof a==="string"}function Z(a){return a&&typeof a==="object"}function Ja(a){return Object.prototype.toString.call(a)==="[object Array]"}function ka(a){return typeof a==="number"}function Ca(a){return V.log(a)/ -V.LN10}function la(a){return V.pow(10,a)}function ma(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function q(a){return a!==B&&a!==null}function L(a,b,c){var d,e;if(ya(b))q(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(q(b)&&Z(b))for(d in b)a.setAttribute(d,b[d]);return e}function ta(a){return Ja(a)?a:[a]}function Qa(a,b,c){if(b)return setTimeout(a,b,c);a.call(0,c)}function M(a,b){if(za&&!da&&b&&b.opacity!==B)b.filter="alpha(opacity="+b.opacity*100+")";v(a.style, -b)}function $(a,b,c,d,e){a=z.createElement(a);b&&v(a,b);e&&M(a,{padding:0,border:"none",margin:0});c&&M(a,c);d&&d.appendChild(a);return a}function na(a,b){var c=function(){};c.prototype=new a;v(c.prototype,b);return c}function Ka(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Za(a){return(ib&&ib(a)||rb||0)*6E4}function La(a,b){for(var c="{",d=!1,e,f,g,h,i,k=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]]; -if(f.length)f=f.join(":"),g=/\.([0-9])/,h=O.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=u.numberFormat(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:""))):e=Ra(f,e)}k.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}k.push(a);return k.join("")}function sb(a){return V.pow(10,S(V.log(a)/V.LN10))}function tb(a,b,c,d,e){var f,g=a,c=p(c,1);f=a/c;b||(b=[1,2,2.5,5,10],d===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(g=b[d],e&&g*c>=a||!e&&f<=(b[d]+(b[d+1]||b[d]))/ -2)break;g*=c;return g}function jb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].safeI=e;a.sort(function(a,c){d=b(a,c);return d===0?a.safeI-c.safeI:d});for(e=0;e<c;e++)delete a[e].safeI}function Sa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Da(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ta(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ua(a){kb||(kb=$(Ma));a&&kb.appendChild(a);kb.innerHTML=""}function fa(a,b){return parseFloat(a.toPrecision(b|| -14))}function Va(a,b){b.renderer.globalAnimation=p(a,b.animation)}function Fb(){var a=O.global,b=a.useUTC,c=b?"getUTC":"get",d=b?"setUTC":"set";oa=a.Date||C.Date;rb=b&&a.timezoneOffset;ib=b&&a.getTimezoneOffset;lb=function(a,c,d,h,i,k){var j;b?(j=oa.UTC.apply(0,arguments),j+=Za(j)):j=(new oa(a,c,p(d,1),p(h,0),p(i,0),p(k,0))).getTime();return j};ub=c+"Minutes";vb=c+"Hours";wb=c+"Day";$a=c+"Date";ab=c+"Month";bb=c+"FullYear";Gb=d+"Milliseconds";Hb=d+"Seconds";Ib=d+"Minutes";Jb=d+"Hours";xb=d+"Date"; -yb=d+"Month";zb=d+"FullYear"}function ia(a){if(!(this instanceof ia))return new ia(a);this.init(a)}function Q(){}function Wa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function Kb(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:p(b.y,f?4:c?14:-6), -x:p(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var B,z=C.document,V=Math,A=V.round,S=V.floor,ua=V.ceil,s=V.max,E=V.min,P=V.abs,T=V.cos,aa=V.sin,pa=V.PI,ga=pa*2/360,Aa=C.navigator&&C.navigator.userAgent||"",Lb=C.opera,za=/(msie|trident|edge)/i.test(Aa)&&!Lb,mb=z&&z.documentMode===8,nb=!za&&/AppleWebKit/.test(Aa),Na=/Firefox/.test(Aa),Mb=/(Mobile|Android|Windows Phone)/.test(Aa),Ea="http://www.w3.org/2000/svg",da=z&&z.createElementNS&&!!z.createElementNS(Ea,"svg").createSVGRect, -Qb=Na&&parseInt(Aa.split("Firefox/")[1],10)<4,ha=z&&!da&&!za&&!!z.createElement("canvas").getContext,cb,db,Nb={},Ab=0,kb,O,Ra,G,va=function(){},W=[],eb=0,Ma="div",Rb=/^[0-9]+$/,ob=["plotTop","marginRight","marginBottom","plotLeft"],oa,lb,rb,ib,ub,vb,wb,$a,ab,bb,Gb,Hb,Ib,Jb,xb,yb,zb,I={},u;u=C.Highcharts?Y(16,!0):{win:C};u.seriesTypes=I;var Fa=[],Ga,qa,o,Oa,Bb,Ha,N,U,H,Xa,Pa;qb.prototype={dSetter:function(){var a=this.paths[0],b=this.paths[1],c=[],d=this.now,e=a.length,f;if(d===1)c=this.toD;else if(e=== -b.length&&d<1)for(;e--;)f=parseFloat(a[e]),c[e]=isNaN(f)?a[e]:d*parseFloat(b[e]-f)+f;else c=b;this.elem.attr("d",c)},update:function(){var a=this.elem,b=this.prop,c=this.now,d=this.options.step;if(this[b+"Setter"])this[b+"Setter"]();else a.attr?a.element&&a.attr(b,c):a.style[b]=c+this.unit;d&&d.call(a,c,this)},run:function(a,b,c){var d=this,e=function(a){return e.stopped?!1:d.step(a)},f;this.startTime=+new oa;this.start=a;this.end=b;this.unit=c;this.now=this.start;this.pos=0;e.elem=this.elem;if(e()&& -Fa.push(e)===1)e.timerId=setInterval(function(){for(f=0;f<Fa.length;f++)Fa[f]()||Fa.splice(f--,1);Fa.length||clearInterval(e.timerId)},13)},step:function(a){var b=+new oa,c,d=this.options;c=this.elem;var e=d.complete,f=d.duration,g=d.curAnim,h;if(c.attr&&!c.element)c=!1;else if(a||b>=f+this.startTime){this.now=this.end;this.pos=1;this.update();a=g[this.prop]=!0;for(h in g)g[h]!==!0&&(a=!1);a&&e&&e.call(c);c=!1}else this.pos=d.easing((b-this.startTime)/f),this.now=this.start+(this.end-this.start)* -this.pos,this.update(),c=!0;return c},initPath:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,k=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f- -2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]}};var v=u.extend=function(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a},p=u.pick=function(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],c!==B&&c!==null)return c},fb=u.wrap=function(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}};Ra=function(a,b,c){if(!q(b)||isNaN(b))return O.lang.invalidDate||"";var a=p(a,"%Y-%m-%d %H:%M:%S"),d=new oa(b- -Za(b)),e,f=d[vb](),g=d[wb](),h=d[$a](),i=d[ab](),k=d[bb](),j=O.lang,m=j.weekdays,d=v({a:m[g].substr(0,3),A:m[g],d:Ka(h),e:h,w:g,b:j.shortMonths[i],B:j.months[i],m:Ka(i+1),y:k.toString().substr(2,2),Y:k,H:Ka(f),k:f,I:Ka(f%12||12),l:f%12||12,M:Ka(d[ub]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ka(d.getSeconds()),L:Ka(A(b%1E3),3)},u.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};G={millisecond:1, -second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};u.numberFormat=function(a,b,c,d){var e=O.lang,a=+a||0,f=b===-1?Math.min((a.toString().split(".")[1]||"").length,20):isNaN(b=Math.abs(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(F(a=P(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+P(a-c).toFixed(f).slice(2):"")};Math.easeInOutSine=function(a){return-0.5* -(Math.cos(Math.PI*a)-1)};Ga=function(a,b){var c=C.getComputedStyle(a,void 0);return c&&F(c.getPropertyValue(b))};qa=function(a,b){return b.indexOf?b.indexOf(a):[].indexOf.call(b,a)};Oa=function(a,b){return[].filter.call(a,b)};Ha=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c[d]=b.call(a[d],a[d],d,a);return c};Bb=function(a){var b=z.documentElement,a=a.getBoundingClientRect();return{top:a.top+(C.pageYOffset||b.scrollTop)-(b.clientTop||0),left:a.left+(C.pageXOffset||b.scrollLeft)-(b.clientLeft|| -0)}};Pa=function(a){for(var b=Fa.length;b--;)if(Fa[b].elem===a)Fa[b].stopped=!0};o=function(a,b){return Array.prototype.forEach.call(a,b)};N=function(a,b,c){function d(b){b.target=b.srcElement||C;c.call(a,b)}var e=a.hcEvents=a.hcEvents||{};if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent){if(!a.hcEventsIE)a.hcEventsIE={};a.hcEventsIE[c.toString()]=d;a.attachEvent("on"+b,d)}e[b]||(e[b]=[]);e[b].push(c)};U=function(a,b,c){function d(b,c){a.removeEventListener?a.removeEventListener(b, -c,!1):a.attachEvent&&(c=a.hcEventsIE[c.toString()],a.detachEvent("on"+b,c))}function e(){var c,e,f;if(a.nodeName)for(f in b?(c={},c[b]=!0):c=g,c)if(g[f])for(e=g[f].length;e--;)d(f,g[f][e])}var f,g=a.hcEvents,h;if(g)b?(f=g[b]||[],c?(h=qa(c,f),h>-1&&(f.splice(h,1),g[b]=f),d(b,c)):(e(),g[b]=[])):(e(),a.hcEvents={})};H=function(a,b,c,d){var e;e=a.hcEvents;var f,g,h,i,c=c||{};if(z.createEvent&&(a.dispatchEvent||a.fireEvent))e=z.createEvent("Events"),e.initEvent(b,!0,!0),e.target=a,v(e,c),a.dispatchEvent? -a.dispatchEvent(e):a.fireEvent(b,e);else if(e){e=e[b]||[];f=e.length;h=function(){c.defaultPrevented=!0};for(g=0;g<f;g++){i=e[g];if(c.stopped)return;c.preventDefault=h;c.target=a;if(!c.type)c.type=b;i.call(a,c)===!1&&c.preventDefault()}}d&&!c.defaultPrevented&&d(c)};Xa=function(a,b,c){var d,e="",f,g,h;Z(c)||(d=arguments,c={duration:d[2],easing:d[3],complete:d[4]});if(!ka(c.duration))c.duration=400;c.easing=Math[c.easing]||Math.easeInOutSine;c.curAnim=D(b);for(h in b)g=new qb(a,c,h),f=null,h==="d"? -(g.paths=g.initPath(a,a.d,b.d),g.toD=b.d,d=0,f=1):a.attr?d=a.attr(h):(d=parseFloat(Ga(a,h))||0,h!=="opacity"&&(e="px")),f||(f=b[h]),f.match&&f.match("px")&&(f=f.replace(/px/g,"")),g.run(d,f,e)};if(C.jQuery)C.jQuery.fn.highcharts=function(){var a=[].slice.call(arguments);if(this[0])return a[0]?(new (u[ya(a[0])?a.shift():"Chart"])(this[0],a[0],a[1]),this):W[L(this[0],"data-highcharts-chart")]};z&&!z.defaultView&&(Ga=function(a,b){var c;c={width:"clientWidth",height:"clientHeight"}[b];if(a.style[b])return F(a.style[b]); -b==="opacity"&&(b="filter");if(c)return a.style.zoom=1,a[c]-2*Ga(a,"padding");c=a.currentStyle[b.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()})];b==="filter"&&(c=c.replace(/alpha\(opacity=([0-9]+)\)/,function(a,b){return b/100}));return c===""?1:F(c)});Array.prototype.forEach||(o=function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c});Array.prototype.indexOf||(qa=function(a,b){var c,d=0;if(b)for(c=b.length;d<c;d++)if(b[d]===a)return d;return-1});Array.prototype.filter|| -(Oa=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c});u.Fx=qb;u.inArray=qa;u.each=o;u.grep=Oa;u.offset=Bb;u.map=Ha;u.addEvent=N;u.removeEvent=U;u.fireEvent=H;u.animate=Xa;u.stop=Pa;O={colors:"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#2b908f,#f45b5b,#91e8e1".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","), -shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/4.2.1/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:0, -defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#333333",fontSize:"18px"}},subtitle:{text:"",align:"center",style:{color:"#555555"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0, -lineWidthPlus:1,radiusPlus:2},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return this.y===null?"":u.numberFormat(this.y,-1)},style:{color:"contrast",fontSize:"11px",fontWeight:"bold",textShadow:"0 0 6px contrast, 0 0 3px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{lineWidthPlus:1,marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0, -turboThreshold:1E3}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderColor:"#909090",borderRadius:0,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{color:"#333333",fontSize:"12px",fontWeight:"bold"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolPadding:5,verticalAlign:"bottom", -x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:da,backgroundColor:"rgba(249, 249, 249, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y", -year:"%Y"},footerFormat:"",headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>',shadow:!0,snap:Mb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",pointerEvents:"none",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090", -fontSize:"9px"}}};var ba=O.plotOptions,ea=ba.line;Fb();ia.prototype={parsers:[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(a){return[F(a[1]),F(a[2]),F(a[3]),parseFloat(a[4],10)]}},{regex:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,parse:function(a){return[F(a[1],16),F(a[2],16),F(a[3],16),1]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(a){return[F(a[1]),F(a[2]),F(a[3]),1]}}], -init:function(a){var b,c,d,e;if((this.input=a)&&a.stops)this.stops=Ha(a.stops,function(a){return new ia(a[1])});else for(d=this.parsers.length;d--&&!c;)e=this.parsers[d],(b=e.regex.exec(a))&&(c=e.parse(b));this.rgba=c||[]},get:function(a){var b=this.input,c=this.rgba,d;this.stops?(d=D(b),d.stops=[].concat(d.stops),o(this.stops,function(b,c){d.stops[c]=[d.stops[c][0],b.get(a)]})):d=c&&!isNaN(c[0])?a==="rgb"||!a&&c[3]===1?"rgb("+c[0]+","+c[1]+","+c[2]+")":a==="a"?c[3]:"rgba("+c.join(",")+")":b;return d}, -brighten:function(a){var b,c=this.rgba;if(this.stops)o(this.stops,function(b){b.brighten(a)});else if(ka(a)&&a!==0)for(b=0;b<3;b++)c[b]+=F(a*255),c[b]<0&&(c[b]=0),c[b]>255&&(c[b]=255);return this},setOpacity:function(a){this.rgba[3]=a;return this}};Q.prototype={opacity:1,textProps:"direction,fontSize,fontWeight,fontFamily,fontStyle,color,lineHeight,width,textDecoration,textOverflow,textShadow".split(","),init:function(a,b){this.element=b==="span"?$(b):z.createElementNS(Ea,b);this.renderer=a},animate:function(a, -b,c){b=p(b,this.renderer.globalAnimation,!0);Pa(this);if(b){b=D(b,{});if(c)b.complete=c;Xa(this,a,b)}else this.attr(a,null,c);return this},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,k,j,m,l,n,t,r=[],p;a.linearGradient?f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];i=d.gradients;j=a.stops;n=c.radialReference;Ja(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&n&&!q(g.gradientUnits)&&(h=g,g=D(g,d.getRadialAttr(n, -h),{gradientUnits:"userSpaceOnUse"}));for(t in g)t!=="id"&&r.push(t,g[t]);for(t in j)r.push(j[t]);r=r.join(",");i[r]?n=i[r].attr("id"):(g.id=n="highcharts-"+Ab++,i[r]=k=d.createElement(f).attr(g).add(d.defs),k.radAttr=h,k.stops=[],o(j,function(a){a[1].indexOf("rgba")===0?(e=ia(a[1]),m=e.get("rgb"),l=e.get("a")):(m=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":m,"stop-opacity":l}).add(k);k.stops.push(a)}));p="url("+d.url+"#"+n+")";c.setAttribute(b,p);c.gradient=r;a.toString=function(){return p}}}, -applyTextShadow:function(a){var b=this.element,c,d=a.indexOf("contrast")!==-1,e={},f=this.renderer.forExport,g=f||b.style.textShadow!==B&&!za;if(d)e.textShadow=a=a.replace(/contrast/g,this.renderer.getContrast(b.style.fill));if(nb||f)e.textRendering="geometricPrecision";g?this.css(e):(this.fakeTS=!0,this.ySetter=this.xSetter,c=[].slice.call(b.getElementsByTagName("tspan")),o(a.split(/\s?,\s?/g),function(a){var d=b.firstChild,e,f,a=a.split(" ");e=a[a.length-1];(f=a[a.length-2])&&o(c,function(a,c){var g; -c===0&&(a.setAttribute("x",b.getAttribute("x")),c=b.getAttribute("y"),a.setAttribute("y",c||0),c===null&&b.setAttribute("y",0));g=a.cloneNode(1);L(g,{"class":"highcharts-text-shadow",fill:e,stroke:e,"stroke-opacity":1/s(F(f),3),"stroke-width":f,"stroke-linejoin":"round"});b.insertBefore(g,d)})}))},attr:function(a,b,c){var d,e=this.element,f,g=this,h;typeof a==="string"&&b!==B&&(d=a,a={},a[d]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(d in a){b=a[d]; -h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(d)&&(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(d==="x"||d==="y"))this.doTransform=!0;h||(this[d+"Setter"]||this._defaultSetter).call(this,b,d,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(d)&&this.updateShadows(d,b)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}c&&c();return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a, -a==="height"?Math.max(b-(c[d].cutHeight||0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element,c=L(b,"class")||"";c.indexOf(a)===-1&&L(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;o("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=p(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":"none")},crisp:function(a){var b, -c={},d,e=a.strokeWidth||this.strokeWidth||0;d=A(e)%2/2;a.x=S(a.x||this.x||0)+d;a.y=S(a.y||this.y||0)+d;a.width=S((a.width||this.width||0)-2*d);a.height=S((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&F(a.width)||this.textWidth;b&& -(a=v(b,c));this.styles=a;e&&(ha||!da&&this.renderer.forExport)&&delete a.width;if(za&&!da)M(this.element,a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";L(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;db&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=oa.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(Aa.indexOf("Android")===-1||oa.now()-(c.touchEventFired|| -0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){var b=this.renderer.gradients[this.element.gradient];this.element.radialReference=a;b&&b.radAttr&&b.animate(this.renderer.getRadialAttr(a,b.radAttr));return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted, -f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")");(q(c)||q(d))&&a.push("scale("+p(c,1)+" "+p(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions= -a,this.alignByTranslate=b,!c||ya(c))this.alignTo=d=c||"renderer",ma(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=p(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=A(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=A(g);this[this.placed?"animate":"attr"](h);this.placed= -!0;this.alignAttr=h;return this},getBBox:function(a,b){var c,d=this.renderer,e,f,g,h=this.element,i=this.styles;e=this.textStr;var k,j=h.style,m,l=d.cache,n=d.cacheKeys,t;f=p(b,this.rotation);g=f*ga;e!==B&&(t=["",f||0,i&&i.fontSize,h.style.width].join(","),t=e===""||Rb.test(e)?"num:"+e.toString().length+t:e+t);t&&!a&&(c=l[t]);if(!c){if(h.namespaceURI===Ea||d.forExport){try{m=this.fakeTS&&function(a){o(h.querySelectorAll(".highcharts-text-shadow"),function(b){b.style.display=a})},Na&&j.textShadow? -(k=j.textShadow,j.textShadow=""):m&&m("none"),c=h.getBBox?v({},h.getBBox()):{width:h.offsetWidth,height:h.offsetHeight},k?j.textShadow=k:m&&m("")}catch(r){}if(!c||c.width<0)c={width:0,height:0}}else c=this.htmlGetBBox();if(d.isSVG){d=c.width;e=c.height;if(za&&i&&i.fontSize==="11px"&&e.toPrecision(3)==="16.9")c.height=e=14;if(f)c.width=P(e*aa(g))+P(d*T(g)),c.height=P(e*T(g))+P(d*aa(g))}if(t){for(;n.length>250;)delete l[n.shift()];l[t]||n.push(t);l[t]=c}}return c},show:function(a){return this.attr({visibility:a? -"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.attr({y:-9999})}})},add:function(a){var b=this.renderer,c=this.element,d;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)d=this.zIndexSetter();d||(a?a.element:b.box).appendChild(c);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b= -a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Pa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&o(c,function(b){a.safeRemoveChild(b)});d&&d.div&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div, -d=b;a.alignTo&&ma(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,k,j;if(a){i=p(a.width,3);k=(a.opacity||0.15)/i;j=this.parentInverted?"(-1,-1)":"("+p(a.offsetX,1)+", "+p(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;L(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":k*e,"stroke-width":h,transform:"translate"+j,fill:"none"});if(c)L(f,"height",s(L(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f): -g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName==="circle"&&(a={x:"cx",y:"cy"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=p(this[a],this.element?this.element.getAttribute(a):null,0);/^[\-0-9\.]+$/.test(a)&&(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(" "));/(NaN| {2}|^$)/.test(a)&&(a="M 0 0");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a= -a.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(b=a.length;b--;)a[b]=F(a[b])*this["stroke-width"];a=a.join(",").replace("NaN","none");this.element.setAttribute("stroke-dasharray",a)}},alignSetter:function(a){this.element.setAttribute("text-anchor",{left:"start",center:"middle",right:"end"}[a])},opacitySetter:function(a, -b,c){this[b]=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName("title")[0];b||(b=z.createElementNS(Ea,"title"),this.element.appendChild(b));b.appendChild(z.createTextNode(String(p(a),"").replace(/<[^>]*>/g,"")))},textSetter:function(a){if(a!==this.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a==="string"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},visibilitySetter:function(a,b,c){a=== -"inherit"?c.removeAttribute(b):c.setAttribute(b,a)},zIndexSetter:function(a,b){var c=this.renderer,d=this.parentGroup,c=(d||c).element||c.box,e,f,g=this.element,h;e=this.added;var i;q(a)&&(g.setAttribute(b,a),a=+a,this[b]===a&&(e=!1),this[b]=a);if(e){if((a=this.zIndex)&&d)d.handleZ=!0;d=c.childNodes;for(i=0;i<d.length&&!h;i++)if(e=d[i],f=L(e,"zIndex"),e!==g&&(F(f)>a||!q(a)&&q(f)))c.insertBefore(g,e),h=!0;h||c.appendChild(g)}return h},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};Q.prototype.yGetter= -Q.prototype.xGetter;Q.prototype.translateXSetter=Q.prototype.translateYSetter=Q.prototype.rotationSetter=Q.prototype.verticalAlignSetter=Q.prototype.scaleXSetter=Q.prototype.scaleYSetter=function(a,b){this[b]=a;this.doTransform=!0};Q.prototype["stroke-widthSetter"]=Q.prototype.strokeSetter=function(a,b,c){this[b]=a;if(this.stroke&&this["stroke-width"])this.strokeWidth=this["stroke-width"],Q.prototype.fillSetter.call(this,this.stroke,"stroke",c),c.setAttribute("stroke-width",this["stroke-width"]), -this.hasStroke=!0;else if(b==="stroke-width"&&a===0&&this.hasStroke)c.removeAttribute("stroke"),this.hasStroke=!1};var Ba=function(){this.init.apply(this,arguments)};Ba.prototype={Element:Q,init:function(a,b,c,d,e,f){var g,d=this.createElement("svg").attr({version:"1.1"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&L(g,"xmlns",Ea);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Na||nb)&&z.getElementsByTagName("base").length?C.location.href.replace(/#.*?$/, -"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(z.createTextNode("Created with Highcharts 4.2.1"));this.defs=this.createElement("defs").add();this.allowHTML=f;this.forExport=e;this.gradients={};this.cache={};this.cacheKeys=[];this.setSize(b,c,!1);var h;if(Na&&a.getBoundingClientRect)this.subPixelFix=b=function(){M(a,{left:0,top:0});h=a.getBoundingClientRect();M(a,{left:ua(h.left)-h.left+"px",top:ua(h.top)-h.top+"px"})},b(),N(C,"resize", -b)},getStyle:function(a){return this.style=v({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ta(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&U(C,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element; -b.init(this,a);return b},draw:function(){},getRadialAttr:function(a,b){return{cx:a[0]-a[2]/2+b.cx*a[2],cy:a[1]-a[2]/2+b.cy*a[2],r:b.r*a[2]}},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=p(a.textStr,"").toString(),f=e.indexOf("<")!==-1,g=b.childNodes,h,i,k=L(b,"x"),j=a.styles,m=a.textWidth,l=j&&j.lineHeight,n=j&&j.textShadow,t=j&&j.textOverflow==="ellipsis",r=g.length,X=m&&!a.added&&this.box,y=function(a){return l?F(l):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize: -j&&j.fontSize||c.style.fontSize||12,a).h},x=function(a){return a.replace(/&lt;/g,"<").replace(/&gt;/g,">")};r--;)b.removeChild(g[r]);!f&&!n&&!t&&e.indexOf(" ")===-1?b.appendChild(z.createTextNode(x(e))):(h=/<.*style="([^"]+)".*>/,i=/<.*href="(http[^"]+)".*>/,X&&X.appendChild(b),e=f?e.replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g):[e],e[e.length-1]=== -""&&e.pop(),o(e,function(e,f){var g,l=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");g=e.split("|||");o(g,function(e){if(e!==""||g.length===1){var n={},r=z.createElementNS(Ea,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),L(r,"style",p));i.test(e)&&!d&&(L(r,"onclick",'location.href="'+e.match(i)[1]+'"'),M(r,{cursor:"pointer"}));e=x(e.replace(/<(.|\n)*?>/g,"")||" ");if(e!==" "){r.appendChild(z.createTextNode(e));if(l)n.dx=0;else if(f&&k!==null)n.x= -k;L(r,n);b.appendChild(r);!l&&f&&(!da&&d&&M(r,{display:"block"}),L(r,"dy",y(r)));if(m){for(var n=e.replace(/([^\^])-/g,"$1- ").split(" "),X=g.length>1||f||n.length>1&&j.whiteSpace!=="nowrap",o,w,q,s=[],v=y(r),B=1,A=a.rotation,u=e,D=u.length;(X||t)&&(n.length||s.length);)a.rotation=0,o=a.getBBox(!0),q=o.width,!da&&c.forExport&&(q=c.measureSpanWidth(r.firstChild.data,a.styles)),o=q>m,w===void 0&&(w=o),t&&w?(D/=2,u===""||!o&&D<0.5?n=[]:(o&&(w=!0),u=e.substring(0,u.length+(o?-1:1)*ua(D)),n=[u+(m>3?"\u2026": -"")],r.removeChild(r.firstChild))):!o||n.length===1?(n=s,s=[],n.length&&(B++,r=z.createElementNS(Ea,"tspan"),L(r,{dy:v,x:k}),p&&L(r,"style",p),b.appendChild(r)),q>m&&(m=q)):(r.removeChild(r.firstChild),s.unshift(n.pop())),n.length&&r.appendChild(z.createTextNode(n.join(" ").replace(/- /g,"-")));w&&a.attr("title",a.textStr);a.rotation=A}l++}}})}),X&&X.removeChild(b),n&&a.applyTextShadow&&a.applyTextShadow(n))},getContrast:function(a){a=ia(a).rgba;return a[0]+a[1]+a[2]>384?"#000000":"#FFFFFF"},button:function(a, -b,c,d,e,f,g,h,i){var k=this.label(a,b,c,i,null,null,null,null,"button"),j=0,m,l,n,t,r,p,a={x1:0,y1:0,x2:0,y2:1},e=D({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=D(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);t=f.style;delete f.style;g=D(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);r=g.style;delete g.style;h=D(e,{style:{color:"#CCC"}}, -h);p=h.style;delete h.style;N(k.element,za?"mouseover":"mouseenter",function(){j!==3&&k.attr(f).css(t)});N(k.element,za?"mouseout":"mouseleave",function(){j!==3&&(m=[e,f,g][j],l=[n,t,r][j],k.attr(m).css(l))});k.setState=function(a){(k.state=j=a)?a===2?k.attr(g).css(r):a===3&&k.attr(h).css(p):k.attr(e).css(n)};return k.on("click",function(a){j!==3&&d.call(k,a)}).attr(e).css(v({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=A(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=A(a[2])+b%2/ -2);return a},path:function(a){var b={fill:"none"};Ja(a)?b.d=a:Z(a)&&v(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=Z(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(Z(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a, -b,c,d,e,f){var e=Z(a)?a.r:e,g=this.createElement("rect"),a=Z(a)?a:a===B?{}:{x:a,y:b,width:s(c,0),height:s(d,0)};if(f!==B)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){L(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return q(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a, -b,c,d,e){var f={preserveAspectRatio:"none"};arguments.length>1&&v(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(A(b),A(c),d,e,f),i=/^url\((.*?)\)$/,k,j;if(h)g=this.path(h),v(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&v(g,f);else if(i.test(a))j=function(a,b){a.element&&(a.attr({width:b[0], -height:b[1]}),a.alignByTranslate||a.translate(A((d-b[0])/2),A((e-b[1])/2)))},k=a.match(i)[1],a=Nb[k]||f&&f.width&&f.height&&[f.width,f.height],g=this.image(k).attr({x:b,y:c}),g.isImg=!0,a?j(g,a):(g.attr({width:0,height:0}),$("img",{onload:function(){this.width===0&&(M(this,{position:"absolute",top:"-999em"}),z.body.appendChild(this));j(g,Nb[k]=[this.width,this.height]);this.parentNode&&this.parentNode.removeChild(this)},src:k}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M", -a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=T(f),k=aa(f),j=T(g),g=aa(g),e=e.end-f<pa?0:1; -return["M",a+c*i,b+c*k,"A",c,c,0,e,1,a+c*j,b+c*g,h?"M":"L",a+d*j,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*k,h?"":"Z"]},callout:function(a,b,c,d,e){var f=E(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,e=e&&e.anchorY,i;i=["M",a+f,b,"L",a+c-f,b,"C",a+c,b,a+c,b,a+c,b+f,"L",a+c,b+d-f,"C",a+c,b+d,a+c,b+d,a+c-f,b+d,"L",a+f,b+d,"C",a,b+d,a,b+d,a,b+d-f,"L",a,b+f,"C",a,b,a,b,a+f,b];h&&h>c&&e>b+g&&e<b+d-g?i.splice(13,3,"L",a+c,e-6,a+c+6,e,a+c,e+6,a+c,b+d-f):h&&h<0&&e>b+g&&e<b+d-g?i.splice(33,3,"L",a,e+6,a-6,e,a,e-6,a,b+f):e&&e> -d&&h>a+g&&h<a+c-g?i.splice(23,3,"L",h+6,b+d,h,b+d+6,h-6,b+d,a+f,b+d):e&&e<0&&h>a+g&&h<a+c-g&&i.splice(3,3,"L",h-6,b,h,b-6,h+6,b,c-f,b);return i}},clipRect:function(a,b,c,d){var e="highcharts-"+Ab++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;a.count=0;return a},text:function(a,b,c,d){var e=ha||!da&&this.forExport,f={};if(d&&(this.allowHTML||!this.forExport))return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a|| -a===0)f.text=a;a=this.createElement("text").attr(f);e&&a.css({position:"absolute"});if(!d)a.xSetter=function(a,b,c){var d=c.getElementsByTagName("tspan"),e,f=c.getAttribute(b),l;for(l=0;l<d.length;l++)e=d[l],e.getAttribute(b)===f&&e.setAttribute(b,a);c.setAttribute(b,a)};return a},fontMetrics:function(a,b){var c,d,a=a||this.style.fontSize;!a&&b&&C.getComputedStyle&&(b=b.element||b,a=(c=C.getComputedStyle(b,""))&&c.fontSize);a=/px/.test(a)?F(a):/em/.test(a)?parseFloat(a)*12:12;c=a<24?a+3:A(a*1.2); -d=A(c*0.8);return{h:c,b:d,f:a}},rotCorr:function(a,b,c){var d=a;b&&c&&(d=s(d*T(b*ga),4));return{x:-a/3*aa(b*ga),y:d}},label:function(a,b,c,d,e,f,g,h,i){var k=this,j=k.g(i),m=k.text("",0,0,g).attr({zIndex:1}),l,n,t=0,r=3,p=0,y,x,w,s,ca=0,gb={},u,z,J,E,C;J=function(){var a,b;a=m.element.style;n=(y===void 0||x===void 0||j.styles.textAlign)&&q(m.textStr)&&m.getBBox();j.width=(y||n.width||0)+2*r+p;j.height=(x||n.height||0)+2*r;u=r+k.fontMetrics(a&&a.fontSize,m).b;if(z){if(!l)a=ca,b=(h?-u:0)+ca,j.box=l= -d?k.symbol(d,a,b,j.width,j.height,gb):k.rect(a,b,j.width,j.height,0,gb["stroke-width"]),l.isImg||l.attr("fill","none"),l.add(j);l.isImg||l.attr(v({width:A(j.width),height:A(j.height)},gb));gb=null}};E=function(){var a=j.styles,a=a&&a.textAlign,b=p+r,c;c=h?0:u;if(q(y)&&n&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(y-n.width);if(b!==m.x||c!==m.y)m.attr("x",b),c!==B&&m.attr("y",c);m.x=b;m.y=c};C=function(a,b){l?l.attr(a,b):gb[a]=b};j.onAdd=function(){m.add(j);j.attr({text:a||a===0?a:"", -x:b,y:c});l&&q(e)&&j.attr({anchorX:e,anchorY:f})};j.widthSetter=function(a){y=a};j.heightSetter=function(a){x=a};j.paddingSetter=function(a){if(q(a)&&a!==r)r=j.padding=a,E()};j.paddingLeftSetter=function(a){q(a)&&a!==p&&(p=a,E())};j.alignSetter=function(a){a={left:0,center:0.5,right:1}[a];a!==t&&(t=a,n&&j.attr({x:b}))};j.textSetter=function(a){a!==B&&m.textSetter(a);J();E()};j["stroke-widthSetter"]=function(a,b){a&&(z=!0);ca=a%2/2;C(b,a)};j.strokeSetter=j.fillSetter=j.rSetter=function(a,b){b==="fill"&& -a&&(z=!0);C(b,a)};j.anchorXSetter=function(a,b){e=a;C(b,A(a)-ca-w)};j.anchorYSetter=function(a,b){f=a;C(b,a-s)};j.xSetter=function(a){j.x=a;t&&(a-=t*((y||n.width)+2*r));w=A(a);j.attr("translateX",w)};j.ySetter=function(a){s=j.y=A(a);j.attr("translateY",s)};var F=j.css;return v(j,{css:function(a){if(a){var b={},a=D(a);o(j.textProps,function(c){a[c]!==B&&(b[c]=a[c],delete a[c])});m.css(b)}return F.call(j,a)},getBBox:function(){return{width:n.width+2*r,height:n.height+2*r,x:n.x-r,y:n.y-r}},shadow:function(a){l&& -l.shadow(a);return j},destroy:function(){U(j.element,"mouseenter");U(j.element,"mouseleave");m&&(m=m.destroy());l&&(l=l.destroy());Q.prototype.destroy.call(j);j=k=J=E=C=null}})}};cb=Ba;v(Q.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();if(a&&a.textOverflow==="ellipsis")a.whiteSpace="nowrap",a.overflow="hidden";this.styles=v(this.styles,a);M(this.element,a);return this},htmlGetBBox:function(){var a=this.element; -if(a.nodeName==="text")a.style.position="absolute";return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=this.shadows,k=this.styles;M(b,{marginLeft:c,marginTop:d});i&&o(i,function(a){M(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&o(b.childNodes,function(c){a.invertChild(c, -b)});if(b.tagName==="SPAN"){var j=this.rotation,m,l=F(this.textWidth),n=[j,g,b.innerHTML,this.textWidth,this.textAlign].join(",");if(n!==this.cTT){m=a.fontMetrics(b.style.fontSize).b;q(j)&&this.setSpanRotation(j,h,m);i=p(this.elemWidth,b.offsetWidth);if(i>l&&/[ \-]/.test(b.textContent||b.innerText))M(b,{width:l+"px",display:"block",whiteSpace:k&&k.whiteSpace||"normal"}),i=l;this.getSpanCorrection(i,m,h,j,g)}M(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(nb)m=b.offsetHeight;this.cTT= -n}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=za?"-ms-transform":nb?"-webkit-transform":Na?"MozTransform":Lb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Na?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";M(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});v(Ba.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;e.innerHTML= -this.textStr=a;d.htmlUpdateTransform()};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:A(b),y:A(c)}).css({position:"absolute",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});e.style.whiteSpace="nowrap";d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;o(k.reverse(),function(a){var d,e=L(a.element, -"class");e&&(e={className:e});b=a.div=a.div||$(Ma,e,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;v(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0}});o(["opacity","visibility"],function(b){fb(a,b+"Setter",function(a,b,c,e){a.call(this,b,c,e);d[c]=b})})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var K;if(!da&& -!ha){K={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ma;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=$(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,e=a&&a.inverted,d=a?a.element||a:d;if(a)this.parentGroup=a;e&&b.invertChild(c,d);d.appendChild(c);this.added= -!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:Q.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=T(a*ga),c=aa(a*ga);M(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):"none"})},getSpanCorrection:function(a,b,c,d,e){var f=d?T(d*ga):1,g=d?aa(d*ga):0,h=p(this.elemHeight,this.element.offsetHeight), -i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),M(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ka(a[b]))c[b]=A(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b= -this,c;a?(c=a.members,ma(c,b),c.push(b),b.destroyClip=function(){ma(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:mb?"inherit":"rect(auto)"});return b.css(a)},css:Q.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ua(a)},destroy:function(){this.destroyClip&&this.destroyClip();return Q.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=C.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length; -if(c===9||c===11)a[c-4]=a[c-2]=F(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,k,j=f.path,m,l,n,t;j&&typeof j.value!=="string"&&(j="x");l=j;if(a){n=p(a.width,3);t=(a.opacity||0.15)/n;for(e=1;e<=3;e++){m=n*2+1-2*e;c&&(l=this.cutOffPath(j.value,m+0.5));k=['<shape isShadow="true" strokeweight="',m,'" filled="false" path="',l,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=$(g.prepVML(k),null,{left:F(i.left)+p(a.offsetX,1),top:F(i.top)+ -p(a.offsetY,1)});if(c)h.cutOff=m+1;k=['<stroke color="',a.color||"black",'" opacity="',t*e,'"/>'];$(g.prepVML(k),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:va,setAttr:function(a,b){mb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||$(this.renderer.prepVML(["<stroke/>"]),null,null,c))[b]=a||"solid"; -this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join&&a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!=="none",this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},"fill-opacitySetter":function(a,b,c){$(this.renderer.prepVML(["<",b.split("-")[0],' opacity="',a,'"/>']),null,null, -c)},opacitySetter:va,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-A(aa(a*ga)+1)+"px";c.top=A(T(a*ga))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b,this))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ka(a)&&(a+="px");this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&o(this.shadows,function(c){c.style[b]=a});c.nodeName=== -"DIV"&&(a=a==="hidden"?"-999em":0,mb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};K["stroke-opacitySetter"]=K["fill-opacitySetter"];u.VMLElement=K=na(Q,K);K.prototype.ySetter=K.prototype.widthSetter=K.prototype.heightSetter=K.prototype.xSetter;var Cb={Element:K,isIE8:Aa.indexOf("MSIE 8.0")>-1,init:function(a, -b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ma).css(v(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.gradients={};this.cache={};this.cacheKeys=[];this.setSize(b,c,!1);if(!z.namespaces.hcv){z.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{z.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){z.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=Z(a);return v(e,{members:[],count:0,left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+A(a?e:d)+"px,"+ -A(a?f:b)+"px,"+A(a?b:f)+"px,"+A(a?d:e)+"px)"};!a&&mb&&c==="DIV"&&v(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){o(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,k="none";a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var j,m,l=a.linearGradient||a.radialGradient,n,t,r,p,y,x="",a=a.stops,w,q=[],ca=function(){h=['<fill colors="'+q.join(",")+'" opacity="',r,'" o:opacity2="',t,'" type="',i,'" ', -x,'focus="100%" method="any" />'];$(e.prepVML(h),null,null,b)};n=a[0];w=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);w[0]<1&&a.push([1,w[1]]);o(a,function(a,b){g.test(a[1])?(f=ia(a[1]),j=f.get("rgb"),m=f.get("a")):(j=a[1],m=1);q.push(a[0]*100+"% "+j);b?(r=m,p=j):(t=m,y=j)});if(c==="fill")if(i==="gradient")c=l.x1||l[0]||0,a=l.y1||l[1]||0,n=l.x2||l[2]||0,l=l.y2||l[3]||0,x='angle="'+(90-V.atan((l-a)/(n-c))*180/pa)+'"',ca();else{var k=l.r,s=k*2,v=k*2,B=l.cx,A=l.cy,u=b.radialReference,z,k=function(){u&&(z= -d.getBBox(),B+=(u[0]-z.x)/z.width-0.5,A+=(u[1]-z.y)/z.height-0.5,s*=u[2]/z.width,v*=u[2]/z.height);x='src="'+O.global.VMLRadialGradientURL+'" size="'+s+","+v+'" origin="0.5,0.5" position="'+B+","+A+'" color2="'+y+'" ';ca()};d.added?k():d.onAdd=k;k=p}else k=j}else if(g.test(a)&&b.tagName!=="IMG")f=ia(a),d[c+"-opacitySetter"](f.get("a"),c,b),k=f.get("rgb");else{k=b.getElementsByTagName(c);if(k.length)k[0].opacity=1,k[0].type="solid";k=a}return k},prepVML:function(a){var b=this.isIE8,a=a.join("");b? -(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:Ba.prototype.html,path:function(a){var b={coordsize:"10 10"};Ja(a)?b.d=a:Z(a)&&v(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(Z(a))c=a.r,b=a.y,a=a.x;d.isCircle= -!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ma).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):Ba.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;M(a,{flip:"x",left:F(d.width)-(e?F(e.top): -1),top:F(d.height)-(e?F(e.left):1),rotation:-90});o(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=T(f),i=aa(f),k=T(g),j=aa(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*k,b+h*j];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*k,b+c*j,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ -c,b+d/2,"e"]},rect:function(a,b,c,d,e){return Ba.prototype.symbols[!q(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};u.VMLRenderer=K=function(){this.init.apply(this,arguments)};K.prototype=D(Ba.prototype,Cb);cb=K}Ba.prototype.measureSpanWidth=function(a,b){var c=z.createElement("span"),d;d=z.createTextNode(a);c.appendChild(d);M(c,b);this.box.appendChild(c);d=c.offsetWidth;Ua(c);return d};var Ob;if(ha)u.CanVGRenderer=K=function(){Ea="http://www.w3.org/1999/xhtml"},K.prototype.symbols={},Ob=function(){function a(){var a= -b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){if(b.length===0){var e=z.getElementsByTagName("head")[0],f=z.createElement("script");f.type="text/javascript";f.src=d;f.onload=a;e.appendChild(f)}b.push(c)}}}(),cb=K;Wa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.categories,e=a.names,f=this.pos,g=b.labels,h=a.tickPositions,i=f===h[0],k=f===h[h.length-1],e=d?p(d[f],e[f],f):f,d=this.label,h=h.info,j;a.isDatetimeAxis&&h&&(j=b.dateTimeLabelFormats[h.higherRanks[f]|| -h.unitName]);this.isFirst=i;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:i,isLast:k,dateTimeLabelFormat:j,value:a.isLog?fa(la(e)):e});q(d)?d&&d.attr({text:b}):(this.labelLength=(this.label=d=q(b)&&g.enabled?c.renderer.text(b,0,0,g.useHTML).css(D(g.style)).add(a.labelGroup):null)&&d.getBBox().width,this.rotation=0)},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0},handleOverflow:function(a){var b=this.axis,c=a.x,d=b.chart.chartWidth, -e=b.chart.spacing,f=p(b.labelLeft,E(b.pos,e[3])),e=p(b.labelRight,s(b.pos+b.len,d-e[1])),g=this.label,h=this.rotation,i={left:0,center:0.5,right:1}[b.labelAlign],k=g.getBBox().width,j=b.slotWidth,m=1,l,n={};if(h)h<0&&c-i*k<f?l=A(c/T(h*ga)-f):h>0&&c+i*k>e&&(l=A((d-c)/T(h*ga)));else if(d=c+(1-i)*k,c-i*k<f?j=a.x+j*(1-i)-f:d>e&&(j=e-a.x+j*i,m=-1),j=E(b.slotWidth,j),j<b.slotWidth&&b.labelAlign==="center"&&(a.x+=m*(b.slotWidth-j-i*(b.slotWidth-E(k,j)))),k>j||b.autoRotation&&g.styles.width)l=j;if(l){n.width= -l;if(!b.options.labels.style.textOverflow)n.textOverflow="ellipsis";g.css(n)}},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,k=i.transA,j=i.reversed,m=i.staggerLines,l=i.tickRotCorr|| -{x:0,y:0},n=e.y;q(n)||(n=i.side===2?l.y+8:n=T(c.rotation*ga)*(l.y-c.getBBox(!1,0).height/2));a=a+e.x+l.x-(f&&d?f*k*(j?-1:1):0);b=b+n-(f&&!d?f*k*(j?1:-1):0);m&&(c=g/(h||1)%m,i.opposite&&(c=m-c-1),b+=c*(i.labelOffset/m));return{x:a,y:A(b)}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,k=this.pos,j=e.labels,m=this.gridLine,l=h?h+"Grid":"grid",n=h?h+"Tick": -"tick",t=e[l+"LineWidth"],r=e[l+"LineColor"],o=e[l+"LineDashStyle"],y=e[n+"Length"],l=p(e[n+"Width"],!h&&d.isXAxis?1:0),x=e[n+"Color"],w=e[n+"Position"],n=this.mark,q=j.step,ca=!0,s=d.tickmarkOffset,v=this.getPosition(g,k,s,b),u=v.x,v=v.y,A=g&&u===d.pos+d.len||!g&&v===d.pos?-1:1,c=p(c,1);this.isActive=!0;if(t){k=d.getPlotLinePath(k+s,t*A,b,!0);if(m===B){m={stroke:r,"stroke-width":t};if(o)m.dashstyle=o;if(!h)m.zIndex=1;if(b)m.opacity=0;this.gridLine=m=t?f.path(k).attr(m).add(d.gridGroup):null}if(!b&& -m&&k)m[this.isNew?"attr":"animate"]({d:k,opacity:c})}if(l&&y)w==="inside"&&(y=-y),d.opposite&&(y=-y),h=this.getMarkPath(u,v,y,l*A,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:x,"stroke-width":l,opacity:c}).add(d.axisGroup);if(i&&!isNaN(u))i.xy=v=this.getLabelPosition(u,v,i,g,j,s,a,q),this.isFirst&&!this.isLast&&!p(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!p(e.showLastLabel,1)?ca=!1:g&&!d.isRadial&&!j.step&&!j.rotation&&!b&&c!==0&&this.handleOverflow(v),q&&a%q&&(ca=!1), -ca&&!isNaN(v.y)?(v.opacity=c,i[this.isNew?"attr":"animate"](v),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Ta(this,this.axis)}};u.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};u.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=a.options,e=d.label,f=a.label,g=d.width,h=d.to,i=d.from,k=q(i)&&q(h),j=d.value,m=d.dashStyle,l=a.svgElem,n=[],t,r=d.color,p=d.zIndex,o=d.events,x={},w=b.chart.renderer;b.isLog&&(i=Ca(i),h=Ca(h),j=Ca(j));if(g){if(n= -b.getPlotLinePath(j,g),x={stroke:r,"stroke-width":g},m)x.dashstyle=m}else if(k){n=b.getPlotBandPath(i,h,d);if(r)x.fill=r;if(d.borderWidth)x.stroke=d.borderColor,x["stroke-width"]=d.borderWidth}else return;if(q(p))x.zIndex=p;if(l)if(n)l.show(),l.animate({d:n});else{if(l.hide(),f)a.label=f=f.destroy()}else if(n&&n.length&&(a.svgElem=l=w.path(n).attr(x).add(),o))for(t in d=function(b){l.on(b,function(c){o[b].apply(a,[c])})},o)d(t);if(e&&q(e.text)&&n&&n.length&&b.width>0&&b.height>0&&!n.flat){e=D({align:c&& -k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},e);if(!f){x={align:e.textAlign||e.align,rotation:e.rotation};if(q(p))x.zIndex=p;a.label=f=w.text(e.text,0,0,e.useHTML).attr(x).css(e.style).add()}b=[n[1],n[4],k?n[6]:n[1]];k=[n[2],n[5],k?n[7]:n[2]];n=Sa(b);c=Sa(k);f.align(e,!1,{x:n,y:c,width:Da(b)-n,height:Da(k)-c});f.show()}else f&&f.hide();return a},destroy:function(){ma(this.axis.plotLinesAndBands,this);delete this.axis;Ta(this)}};var ja=u.Axis=function(){this.init.apply(this, -arguments)};ja.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#D8D8D8",labels:{enabled:!0,style:{color:"#606060",cursor:"default",fontSize:"11px"},x:0,y:15},lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1, -startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return u.numberFormat(this.total,-1)},style:D(ba.line.dataLabels.style,{color:"#000000"})}}, -defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0,y:null},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.chart=a;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite? -1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.reversed=d.reversed;this.visible=d.visible!==!1;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=this.names||[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=q(d.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands= -{};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stacksTouched=0;this.min=this.max=null;this.crosshair=p(d.crosshair,ta(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;qa(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===B)this.reversed=!0;this.removePlotLine= -this.removePlotBand=this.removePlotBandOrLine;for(f in d)N(this,f,d[f]);if(this.isLog)this.val2lin=Ca,this.lin2val=la},setOptions:function(a){this.options=D(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],D(O[this.coll],a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=O.lang.numericSymbols,f=e&&e.length, -g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=La(h,this);else if(c)g=b;else if(d)g=Ra(d,b);else if(f&&a>=1E3)for(;f--&&g===B;)c=Math.pow(1E3,f+1),a>=c&&b*10%c===0&&e[f]!==null&&(g=u.numberFormat(b/c,-1)+e[f]);g===B&&(g=P(b)>=1E4?u.numberFormat(b,-1):u.numberFormat(b,-1,B,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();o(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d=c.options,e=d.threshold,f;a.hasVisibleSeries=!0;a.isLog&&e<=0&&(e=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=E(p(a.dataMin,d[0]),Sa(d)),a.dataMax=s(p(a.dataMax,d[0]),Da(d))}else{c.getExtremes();f=c.dataMax;c=c.dataMin;if(q(c)&&q(f))a.dataMin=E(p(a.dataMin,c),c),a.dataMax=s(p(a.dataMax,f),f);if(q(e))a.threshold=e;if(!d.softThreshold||a.isLog)a.softThreshold=!1}}})},translate:function(a,b,c,d,e,f){var g=this.linkedParent||this,h=1,i=0,k=d?g.oldTransA: -g.transA,d=d?g.oldMin:g.min,j=g.minPixelPadding,e=(g.doPostTranslate||g.isLog&&e)&&g.lin2val;if(!k)k=g.transA;if(c)h*=-1,i=g.len;g.reversed&&(h*=-1,i-=h*(g.sector||g.len));b?(a=a*h+i,a-=j,a=a/k+d,e&&(a=g.lin2val(a))):(e&&(a=g.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*k+i+h*j+(ka(f)?k*f*g.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a, -b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,k,j=c&&f.oldChartHeight||f.chartHeight,m=c&&f.oldChartWidth||f.chartWidth,l;i=this.transB;var n=function(a,b,c){if(a<b||a>c)d?a=E(s(b,a),c):l=!0;return a},e=p(e,this.translate(a,null,null,c)),a=c=A(e+i);i=k=A(j-e-i);isNaN(e)?l=!0:this.horiz?(i=h,k=j-this.bottom,a=c=n(a,g,g+this.width)):(a=g,c=m-this.right,i=k=n(i,h,h+this.height));return l&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,k],b||1)},getLinearTickPositions:function(a,b,c){var d,e=fa(S(b/ -a)*a),f=fa(ua(c/a)*a),g=[];if(b===c&&ka(b))return[b];for(b=e;b<=f;){g.push(b);b=fa(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e,f=this.pointRangePadding||0;e=this.min-f;var f=this.max+f,g=f-e;if(g&&g/c<this.len/3)if(this.isLog){f=b.length;for(e=1;e<f;e++)d=d.concat(this.getLogTickPositions(c,b[e-1],b[e],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c), -e,f,a.startOfWeek));else for(b=e+(b[0]-e)%c;b<=f;b+=c)d.push(b);d.length!==0&&this.trimTicks(d,a.startOnTick,a.endOnTick);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,k,j;if(this.isXAxis&&this.minRange===B&&!this.isLog)q(a.min)||q(a.max)?this.minRange=null:(o(this.series,function(a){i=a.xData;for(g=k=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===B||h<f)f=h}),this.minRange=E(f*5,this.dataMax-this.dataMin)); -if(c-b<this.minRange){j=this.minRange;d=(j-c+b)/2;d=[b-d,p(a.min,b-d)];if(e)d[2]=this.dataMin;b=Da(d);c=[b+j,p(a.max,b+j)];if(e)c[2]=this.dataMax;c=Sa(c);c-b<j&&(d[0]=c-j,d[1]=p(a.min,c-j),b=Da(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,k=b.transA,j=b.isXAxis;if(j||i||d)if(h?(f=h.minPointOffset,g=h.pointRangePadding):(o(b.series,function(a){var b=a.closestPointRange;!a.noSharedTooltip&&q(b)&& -(e=q(e)?E(e,b):b)}),o(b.series,function(a){var c=i?1:j?p(a.options.pointRange,e,0):b.axisPointRange||0,a=a.options.pointPlacement;d=s(d,c);b.single||(f=s(f,ya(a)?0:c/2),g=s(g,a==="on"?0:c))})),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=E(d,c),j)b.closestPointRange=e;if(a)b.oldTransA=k;b.translationSlope=b.transA=k=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=k*f},minFromRange:function(){return this.max-this.range},setTickInterval:function(a){var b= -this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=d.maxPadding,k=d.minPadding,j=d.tickInterval,m=d.tickPixelInterval,l=b.categories,n=b.threshold,t=b.softThreshold,r,X,y,x;!f&&!l&&!h&&this.getTickAmount();y=p(b.userMin,d.min);x=p(b.userMax,d.max);h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=p(c.min,c.dataMin),b.max=p(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&Y(11,1)):(!t&&q(n)&&(b.dataMin>=n?(r=n,k=0):b.dataMax<=n&&(X=n, -i=0)),b.min=p(y,r,b.dataMin),b.max=p(x,X,b.dataMax));if(e)!a&&E(b.min,p(b.dataMin,b.min))<=0&&Y(10,1),b.min=fa(Ca(b.min),15),b.max=fa(Ca(b.max),15);if(b.range&&q(b.max))b.userMin=b.min=y=s(b.min,b.minFromRange()),b.userMax=x=b.max,b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!l&&!b.axisPointRange&&!b.usePercentage&&!h&&q(b.min)&&q(b.max)&&(c=b.max-b.min))!q(y)&&k&&(b.min-=c*k),!q(x)&&i&&(b.max+=c*i);if(ka(d.floor))b.min=s(b.min,d.floor);if(ka(d.ceiling))b.max=E(b.max,d.ceiling); -if(t&&q(b.dataMin))if(n=n||0,!q(y)&&b.min<n&&b.dataMin>=n)b.min=n;else if(!q(x)&&b.max>n&&b.dataMax<=n)b.max=n;b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:h&&!j&&m===b.linkedParent.options.tickPixelInterval?j=b.linkedParent.tickInterval:p(j,this.tickAmount?(b.max-b.min)/s(this.tickAmount-1,1):void 0,l?1:(b.max-b.min)*m/s(b.len,m));g&&!a&&o(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions(); -if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange&&!j)b.tickInterval=s(b.pointRange,b.tickInterval);a=p(d.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);if(!j&&b.tickInterval<a)b.tickInterval=a;if(!f&&!e&&!j)b.tickInterval=tb(b.tickInterval,null,sb(b.tickInterval),p(d.allowDecimals,!(b.tickInterval>0.5&&b.tickInterval<5&&b.max>1E3&&b.max<9999)),!!this.tickAmount);if(!this.tickAmount&&this.len)b.tickInterval=b.unsquish();this.setTickPositions()}, -setTickPositions:function(){var a=this.options,b,c=a.tickPositions,d=a.tickPositioner,e=a.startOnTick,f=a.endOnTick,g;this.tickmarkOffset=this.categories&&a.tickmarkPlacement==="between"&&this.tickInterval===1?0.5:0;this.minorTickInterval=a.minorTickInterval==="auto"&&this.tickInterval?this.tickInterval/5:a.minorTickInterval;this.tickPositions=b=c&&c.slice();if(!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions, -this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b=[b[0],b.pop()]),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max]))))this.tickPositions=b=d;if(!this.isLinked)this.trimTicks(b,e,f),this.min===this.max&&q(this.min)&&!this.tickAmount&&(g=!0,this.min-=0.5,this.max+=0.5),this.single=g,!c&&!d&&this.adjustTickAmount()},trimTicks:function(a,b,c){var d=a[0],e= -a[a.length-1],f=this.minPointOffset||0;b?this.min=d:this.min-f>d&&a.shift();c?this.max=e:this.max+f<e&&a.pop();a.length===0&&q(d)&&a.push((e+d)/2)},alignToOthers:function(){var a={},b,c=this.options;this.chart.options.chart.alignTicks!==!1&&c.alignTicks!==!1&&o(this.chart[this.coll],function(c){var e=c.options,e=[c.horiz?e.left:e.top,e.width,e.height,e.pane].join(",");c.series.length&&(a[e]?b=!0:a[e]=1)});return b},getTickAmount:function(){var a=this.options,b=a.tickAmount,c=a.tickPixelInterval;!q(a.tickInterval)&& -this.len<c&&!this.isRadial&&!this.isLog&&a.startOnTick&&a.endOnTick&&(b=2);!b&&this.alignToOthers()&&(b=ua(this.len/c)+1);if(b<4)this.finalTickAmt=b,b=5;this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,e=b&&b.length;if(e<c){for(;b.length<c;)b.push(fa(b[b.length-1]+a));this.transA*=(e-1)/(c-1);this.max=b[b.length-1]}else e>c&&(this.tickInterval*=2,this.setTickPositions());if(q(d)){for(a=c=b.length;a--;)(d===3&&a%2===1|| -d<=2&&a>0&&a<c-1)&&b.splice(a,1);this.finalTickAmt=B}},setScale:function(){var a,b;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();b=this.len!==this.oldAxisLength;o(this.series,function(b){if(b.isDirtyData||b.isDirty||b.xAxis.isDirty)a=!0});if(b||a||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax||this.alignToOthers()){if(this.resetStacks&&this.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(), -this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,!this.isDirty)this.isDirty=b||this.min!==this.oldMin||this.max!==this.oldMax}else this.cleanStacks&&this.cleanStacks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=p(c,!0);o(f.series,function(a){delete a.kdTree});e=v(e,{min:a,max:b});H(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,e=this.options,f=E(c,p(e.min,c)),e=s(d,p(e.max,d));this.allowZoomOutside|| -(q(c)&&a<=f&&(a=f),q(d)&&b>=e&&(b=e));this.displayBtn=a!==B||b!==B;this.setExtremes(a,b,!1,B,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=p(b.width,a.plotWidth-c+(b.offsetRight||0)),f=p(b.height,a.plotHeight),g=p(b.top,a.plotTop),b=p(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseFloat(f)/100*a.plotHeight);c.test(g)&&(g=parseFloat(g)/100*a.plotHeight+a.plotTop);this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight- -f-g;this.right=a.chartWidth-e-b;this.len=s(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?fa(la(this.min)):this.min,max:a?fa(la(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?la(this.min):this.min,b=b?la(this.max):this.max;a===null?a=b<0?b:c:c>a?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(p(a,0)-this.side*90+720)%360;return a>15&& -a<165?"right":a>195&&a<345?"left":"center"},unsquish:function(){var a=this.ticks,b=this.options.labels,c=this.horiz,d=this.tickInterval,e=d,f=this.len/(((this.categories?1:0)+this.max-this.min)/d),g,h=b.rotation,i=this.chart.renderer.fontMetrics(b.style.fontSize,a[0]&&a[0].label),k,j=Number.MAX_VALUE,m,l=function(a){a/=f||1;a=a>1?ua(a):1;return a*d};c?(m=!b.staggerLines&&!b.step&&(q(h)?[h]:f<p(b.autoRotationLimit,80)&&b.autoRotation))&&o(m,function(a){var b;if(a===h||a&&a>=-90&&a<=90)k=l(P(i.h/aa(ga* -a))),b=k+P(a/360),b<j&&(j=b,g=a,e=k)}):b.step||(e=l(i.h));this.autoRotation=m;this.labelRotation=p(g,h);return e},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,e=this.options.labels,f=this.horiz,g=a.margin,h=this.categories?c.length:c.length-1,g=this.slotWidth=f&&(e.step||0)<2&&!e.rotation&&(this.staggerLines||1)*a.plotWidth/h||!f&&(g[3]&&g[3]-a.spacing[3]||a.chartWidth*0.33),i=s(1,A(g-2*(e.padding||5))),k={},h=b.fontMetrics(e.style.fontSize,d[0]&&d[0].label), -j=e.style.textOverflow,m,l=0,n,t;if(!ya(e.rotation))k.rotation=e.rotation||0;if(this.autoRotation)o(c,function(a){if((a=d[a])&&a.labelLength>l)l=a.labelLength}),l>i&&l>h.h?k.rotation=this.labelRotation:this.labelRotation=0;else if(g&&(m={width:i+"px"},!j)){m.textOverflow="clip";for(n=c.length;!f&&n--;)if(t=c[n],i=d[t].label)if(i.styles.textOverflow==="ellipsis"&&i.css({textOverflow:"clip"}),i.getBBox().height>this.len/c.length-(h.h-h.f)||d[t].labelLength>g)i.specCss={textOverflow:"ellipsis"}}if(k.rotation&& -(m={width:(l>a.chartHeight*0.5?a.chartHeight*0.33:a.chartHeight)+"px"},!j))m.textOverflow="ellipsis";this.labelAlign=k.align=e.align||this.autoLabelAlign(this.labelRotation);o(c,function(a){var b=(a=d[a])&&a.label;if(b)b.attr(k),m&&b.css(D(m,b.specCss)),delete b.specCss,a.rotation=k.rotation});this.tickRotCorr=b.rotCorr(h.b,this.labelRotation||0,this.side!==0)},hasData:function(){return this.hasVisibleSeries||q(this.min)&&q(this.max)&&!!this.tickPositions},getOffset:function(){var a=this,b=a.chart, -c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,k,j,m=0,l,n=0,t=d.title,r=d.labels,X=0,y=a.opposite,x=b.axisOffset,b=b.clipOffset,w=[-1,1,1,-1][h],v,ca=a.axisParent;k=a.hasData();a.showAxis=j=k||p(d.showEmpty,!0);a.staggerLines=a.horiz&&r.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(ca),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(ca),a.labelGroup=c.g("axis-labels").attr({zIndex:r.zIndex||7}).addClass("highcharts-"+ -a.coll.toLowerCase()+"-labels").add(ca);if(k||a.isLinked){if(o(e,function(b){f[b]?f[b].addLabel():f[b]=new Wa(a,b)}),a.renderUnsquish(),r.reserveSpace!==!1&&(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign||a.labelAlign==="center")&&o(e,function(a){X=s(f[a].getLabelSize(),X)}),a.staggerLines)X*=a.staggerLines,a.labelOffset=X*(a.opposite?-1:1)}else for(v in f)f[v].destroy(),delete f[v];if(t&&t.text&&t.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(t.text,0,0,t.useHTML).attr({zIndex:7,rotation:t.rotation|| -0,align:t.textAlign||{low:y?"right":"left",middle:"center",high:y?"left":"right"}[t.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(t.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(j)m=a.axisTitle.getBBox()[g?"height":"width"],l=t.offset,n=q(l)?0:p(t.margin,g?5:10);a.axisTitle[j?"show":"hide"](!0)}a.offset=w*p(d.offset,x[h]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};c=h===2?a.tickRotCorr.y:0;g=Math.abs(X)+n+(X&&w*(g?p(r.y,a.tickRotCorr.y+8):r.x)-c);a.axisTitleMargin=p(l,g);x[h]= -s(x[h],a.axisTitleMargin+m+w*a.offset,g);d=d.offset?0:S(d.lineWidth/2)*2;b[i]=s(b[i],d)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite, -h=this.offset,i=e.x||0,k=e.y||0,j=F(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?j:0);return{x:a?d+i:b+(g?this.width:0)+h+i,y:a?b+k-(g?this.height:0)+h:d+k}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.ticks,k=a.minorTicks,j=a.alternateBands,m=d.stackLabels,l=d.alternateGridColor,n=a.tickmarkOffset,t=d.lineWidth, -r,p=b.hasRendered&&q(a.oldMin)&&!isNaN(a.oldMin),y=a.showAxis,x=c.globalAnimation,w,s;a.labelEdge.length=0;a.overlap=!1;o([i,k,j],function(a){for(var b in a)a[b].isActive=!1});if(a.hasData()||f){a.minorTickInterval&&!a.categories&&o(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Wa(a,b,"minor"));p&&k[b].isNew&&k[b].render(null,!0);k[b].render(null,!1,1)});if(g.length&&(o(g,function(b,c){if(!f||b>=a.min&&b<=a.max)i[b]||(i[b]=new Wa(a,b)),p&&i[b].isNew&&i[b].render(c,!0,0.1),i[b].render(c)}), -n&&(a.min===0||a.single)))i[-1]||(i[-1]=new Wa(a,-1,null,!0)),i[-1].render(-1);l&&o(g,function(c,d){s=g[d+1]!==B?g[d+1]+n:a.max-n;if(d%2===0&&c<a.max&&s<=a.max+(b.polar?-n:n))j[c]||(j[c]=new u.PlotLineOrBand(a)),w=c+n,j[c].options={from:e?la(w):w,to:e?la(s):s,color:l},j[c].render(),j[c].isActive=!0});if(!a._addedPlotLB)o((d.plotLines||[]).concat(d.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0}o([i,k,j],function(a){var c,d,e=[],f=x?x.duration||500:0;for(c in a)if(!a[c].isActive)a[c].render(c, -!1,0),a[c].isActive=!1,e.push(c);Qa(function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])},a===j||!b.hasRendered||!f?0:f)});if(t)r=a.getLinePath(t),a.axisLine?a.axisLine.animate({d:r}):a.axisLine=c.path(r).attr({stroke:d.lineColor,"stroke-width":t,zIndex:7}).add(a.axisGroup),a.axisLine[y?"show":"hide"](!0);if(h&&y)h[h.isNew?"attr":"animate"](a.getTitlePosition()),h.isNew=!1;m&&m.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){this.visible&&(this.render(), -o(this.plotLinesAndBands,function(a){a.render()}));o(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||U(b);for(d in c)Ta(c[d]),c[d]=null;o([b.ticks,b.minorTicks,b.alternateBands],function(a){Ta(a)});for(a=e.length;a--;)e[a].destroy();o("stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup".split(","),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},drawCrosshair:function(a,b){var c,d=this.crosshair, -e,f;if(!this.crosshair||(q(b)||!p(d.snap,!0))===!1||b&&b.series&&b.series[this.coll]!==this)this.hideCrosshair();else if(p(d.snap,!0)?q(b)&&(c=this.isXAxis?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos,c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:p(b.stackY,b.y))||null:this.getPlotLinePath(null,null,null,null,c)||null,c===null)this.hideCrosshair();else if(e=this.categories&&!this.isRadial,f=p(d.width,e?this.transA:1),this.cross)this.cross.attr({d:c,visibility:"visible", -"stroke-width":f});else{e={"stroke-width":f,stroke:d.color||(e?"rgba(155,200,255,0.2)":"#C0C0C0"),zIndex:p(d.zIndex,2)};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}},hideCrosshair:function(){this.cross&&this.cross.hide()}};v(ja.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b,null,null,!0),d=this.getPlotLinePath(a,null,null,!0);d&&c?(d.flat=d.toString()===c.toString(),d.push(c[4],c[5],c[1],c[2])):d=null;return d},addPlotBand:function(a){return this.addPlotBandOrLine(a, -"plotBands")},addPlotLine:function(a){return this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new u.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();o([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id=== -a&&ma(b,b[e])})}});ja.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=O.global.useUTC,h,i=new oa(b-Za(b)),k=a.unitRange,j=a.count;if(q(b)){i[Gb](k>=G.second?0:j*S(i.getMilliseconds()/j));if(k>=G.second)i[Hb](k>=G.minute?0:j*S(i.getSeconds()/j));if(k>=G.minute)i[Ib](k>=G.hour?0:j*S(i[ub]()/j));if(k>=G.hour)i[Jb](k>=G.day?0:j*S(i[vb]()/j));if(k>=G.day)i[xb](k>=G.month?1:j*S(i[$a]()/j));k>=G.month&&(i[yb](k>=G.year?0:j*S(i[ab]()/j)),h=i[bb]());k>=G.year&&(h-=h%j,i[zb](h));if(k===G.week)i[xb](i[$a]()- -i[wb]()+p(d,1));b=1;if(rb||ib)i=i.getTime(),i=new oa(i+Za(i));h=i[bb]();for(var d=i.getTime(),m=i[ab](),l=i[$a](),n=(G.day+(g?Za(i):i.getTimezoneOffset()*6E4))%G.day;d<c;)e.push(d),k===G.year?d=lb(h+b*j,0):k===G.month?d=lb(h,m+b*j):!g&&(k===G.day||k===G.week)?d=lb(h,m,l+b*j*(k===G.day?1:7)):d+=k*j,b++;e.push(d);o(Oa(e,function(a){return k<=G.hour&&a%G.day===n}),function(a){f[a]="day"})}e.info=v(a,{higherRanks:f,totalRange:k*j});return e};ja.prototype.normalizeTimeTickInterval=function(a,b){var c= -b||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],d=c[c.length-1],e=G[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=G[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+G[c[g+1][0]])/2)break;e===G.year&&a<5*e&&(f=[1,2,5]);c=tb(a/e,f,d[0]==="year"?s(sb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};ja.prototype.getLogTickPositions=function(a,b,c,d){var e= -this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=A(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=S(b),h,i,k,j,m,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!m;f++){i=e.length;for(h=0;h<i&&!m;h++)k=Ca(la(f)*e[h]),k>b&&(!d||j<=c)&&j!==B&&g.push(j),j>c&&(m=!0),j=k}else if(b=la(b),c=la(c),a=e[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length: -f)||1)),a=tb(a,null,sb(a)),g=Ha(this.getLinearTickPositions(a,b,c),Ca),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g};var Pb=u.Tooltip=function(){this.init.apply(this,arguments)};Pb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=F(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c, -r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});ha||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden&&(P(a-f.x)>1||P(b-f.y)>1),h=e.followPointer||e.len>1;v(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?B:g?(2*f.anchorX+c)/3:c,anchorY:h?B:g?(f.anchorY+d)/2:d});e.label.attr(f); -if(g)clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(a){var b=this;clearTimeout(this.hideTimer);a=p(a,this.options.hideDelay,500);if(!this.isHidden)this.hideTimer=Qa(function(){b.label[a?"fadeOut":"hide"]();b.isHidden=!0},a)},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=d.plotLeft,h=0,i=0,k,j,a=ta(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===B&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY- -f]);c||(o(a,function(a){k=a.series.yAxis;j=a.series.xAxis;h+=a.plotX+(!e&&j?j.left-g:0);i+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&k?k.top-f:0)}),h/=a.length,i/=a.length,c=[e?d.plotWidth-i:h,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-h:i]);return Ha(c,A)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g=c.h||0,h,i=["y",d.chartHeight,b,c.plotY+d.plotTop,d.plotTop,d.plotTop+d.plotHeight],k=["x",d.chartWidth,a,c.plotX+d.plotLeft,d.plotLeft,d.plotLeft+d.plotWidth], -j=p(c.ttBelow,d.inverted&&!c.negative||!d.inverted&&c.negative),m=function(a,b,c,d,h,i){var k=c<d-e,l=d+e+c<b,m=d-e-c;d+=e;if(j&&l)f[a]=d;else if(!j&&k)f[a]=m;else if(k)f[a]=E(i-c,m-g<0?m:m-g);else if(l)f[a]=s(h,d+g+c>b?d:d+g);else return!1},l=function(a,b,c,d){var g;d<e||d>b-e?g=!1:f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2;return g},n=function(a){var b=i;i=k;k=b;h=a},t=function(){m.apply(0,i)!==!1?l.apply(0,k)===!1&&!h&&(n(!0),t()):h?f.x=f.y=0:(n(!0),t())};(d.inverted||this.len>1)&&n();t();return f},defaultFormatter:function(a){var b= -this.points||ta(this),c;c=[a.tooltipFooterHeaderFormatter(b[0])];c=c.concat(a.bodyFormatter(b));c.push(a.tooltipFooterHeaderFormatter(b[0],!0));return c.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h,i={},k,j=[];k=e.formatter||this.defaultFormatter;var i=c.hoverPoints,m,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=ta(a)[0].series.tooltipOptions.followPointer;h=this.getAnchor(a,b);f=h[0];g=h[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints= -a,i&&o(i,function(a){a.setState()}),o(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),i={x:a[0].category,y:a[0].y},i.points=j,this.len=j.length,a=a[0]):i=a.getLabelConfig();k=k.call(i,this);i=a.series;this.distance=p(i.tooltipOptions.distance,16);k===!1?this.hide():(this.isHidden&&(Pa(d),d.attr("opacity",1).show()),d.attr({text:k}),m=e.borderColor||a.color||i.color||"#606060",d.attr({stroke:m}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow,h:h[2]||0}),this.isHidden= -!1);H(c,"tooltipRefresh",{text:k,x:f+c.plotLeft,y:g+c.plotTop,borderColor:m})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(A(c.x),A(c.y||0),a.plotX+b.plotLeft,a.plotY+b.plotTop)},getXDateFormat:function(a,b,c){var d,b=b.dateTimeLabelFormats,e=c&&c.closestPointRange,f,g={millisecond:15,second:12,minute:9,hour:6,day:3},h,i="millisecond";if(e){h=Ra("%m-%d %H:%M:%S.%L",a.x);for(f in G){if(e===G.week&&+Ra("%w", -a.x)===c.options.startOfWeek&&h.substr(6)==="00:00:00.000"){f="week";break}if(G[f]>e){f=i;break}if(g[f]&&h.substr(g[f])!=="01-01 00:00:00.000".substr(g[f]))break;f!=="week"&&(i=f)}f&&(d=b[f])}else d=b.day;return d||b.year},tooltipFooterHeaderFormatter:function(a,b){var c=b?"footer":"header",d=a.series,e=d.tooltipOptions,f=e.xDateFormat,g=d.xAxis,h=g&&g.options.type==="datetime"&&ka(a.key),c=e[c+"Format"];h&&!f&&(f=this.getXDateFormat(a,e,g));h&&f&&(c=c.replace("{point.key}","{point.key:"+f+"}")); -return La(c,{point:a,series:d})},bodyFormatter:function(a){return Ha(a,function(a){var c=a.series.tooltipOptions;return(c.pointFormatter||a.point.tooltipFormatter).call(a.point,c.pointFormat)})}};var ra;db=z&&z.documentElement.ontouchstart!==B;var Ya=u.Pointer=function(a,b){this.init(a,b)};Ya.prototype={init:function(a,b){var c=b.chart,d=c.events,e=ha?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&& -!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(u.Tooltip&&b.tooltip.enabled)a.tooltip=new Pb(a,b.tooltip),this.followTouchMove=p(b.tooltip.followTouchMove,!0);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||C.event;if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Bb(this.chart.container);d.pageX===B?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left, -d=d.pageY-b.top);return v(a,{chartX:A(c),chartY:A(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};o(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e=d?d.shared:!1,f=b.hoverPoint,g=b.hoverSeries,h,i=Number.MAX_VALUE,k,j,m,l=[],n,t;if(!e&&!g)for(h=0;h<c.length;h++)if(c[h].directTouch||!c[h].options.stickyTracking)c=[];g&&(e?g.noSharedTooltip: -g.directTouch)&&f?n=f:(o(c,function(b){k=b.noSharedTooltip&&e;j=!e&&b.directTouch;b.visible&&!k&&!j&&p(b.options.enableMouseTracking,!0)&&(t=b.searchPoint(a,!k&&b.kdDimensions===1))&&l.push(t)}),o(l,function(a){m=!e&&a.series.kdDimensions===1?a.dist:a.distX;a&&typeof m==="number"&&m<i&&(i=m,n=a)}));if(n&&(n!==this.prevKDPoint||d&&d.isHidden)){if(e&&!n.series.noSharedTooltip){for(h=l.length;h--;)(l[h].clientX!==n.clientX||l[h].series.noSharedTooltip)&&l.splice(h,1);l.length&&d&&d.refresh(l,a);o(l, -function(b){b.onMouseOver(a,b!==(g&&g.directTouch&&f||n))})}else if(d&&d.refresh(n,a),!g||!g.directTouch)n.onMouseOver(a);this.prevKDPoint=n}else c=g&&g.tooltipOptions.followPointer,d&&c&&!d.isHidden&&(c=d.getAnchor([{}],a),d.updatePosition({plotX:c[0],plotY:c[1]}));if(!this._onDocumentMouseMove)this._onDocumentMouseMove=function(a){if(W[ra])W[ra].pointer.onDocumentMouseMove(a)},N(z,"mousemove",this._onDocumentMouseMove);o(b.axes,function(b){b.drawCrosshair(a,p(n,f))})},reset:function(a,b){var c= -this.chart,d=c.hoverSeries,e=c.hoverPoint,f=c.hoverPoints,g=c.tooltip,h=g&&g.shared?f:e;(a=a&&g&&h)&&o(ta(h),function(b){b.plotX===void 0&&(a=!1)});if(a)g.refresh(h),e&&(e.setState(e.state,!0),o(c.axes,function(a){p(a.options.crosshair&&a.options.crosshair.snap,!0)?a.drawCrosshair(null,e):a.hideCrosshair()}));else{if(e)e.onMouseOut();f&&o(f,function(a){a.setState()});if(d)d.onMouseOut();g&&g.hide(b);if(this._onDocumentMouseMove)U(z,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove= -null;o(c.axes,function(a){a.hideCrosshair()});this.hoverX=c.hoverPoints=c.hoverPoint=null}},scaleGroups:function(a,b){var c=this.chart,d;o(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY= -this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,k=b.plotWidth,j=b.plotHeight,m,l=this.selectionMarker,n=this.mouseDownX,t=this.mouseDownY,r=c.panKey&&a[c.panKey+"Key"];if(!l||!l.touch)if(d<h?d=h:d>h+k&&(d=h+k),e<i?e=i:e>i+j&&(e=i+j),this.hasDragged=Math.sqrt(Math.pow(n-d,2)+Math.pow(t-e,2)),this.hasDragged>10){m=b.isInsidePlot(n-h,t-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&m&&!r&& -!l)this.selectionMarker=l=b.renderer.rect(h,i,f?1:k,g?1:j,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();l&&f&&(d-=n,l.attr({width:P(d),x:(d>0?0:d)+n}));l&&g&&(d=e-t,l.attr({height:P(d),y:(d>0?0:d)+t}));m&&!l&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this,c=this.chart,d=this.hasPinched;if(this.selectionMarker){var e={xAxis:[],yAxis:[]},f=this.selectionMarker,g=f.attr?f.attr("x"):f.x,h=f.attr?f.attr("y"):f.y,i=f.attr?f.attr("width"):f.width,k=f.attr?f.attr("height"): -f.height,j;if(this.hasDragged||d)o(c.axes,function(c){if(c.zoomEnabled&&q(c.min)&&(d||b[{xAxis:"zoomX",yAxis:"zoomY"}[c.coll]])){var f=c.horiz,n=a.type==="touchend"?c.minPixelPadding:0,t=c.toValue((f?g:h)+n),f=c.toValue((f?g+i:h+k)-n);e[c.coll].push({axis:c,min:E(t,f),max:s(t,f)});j=!0}}),j&&H(c,"selection",e,function(a){c.zoom(v(a,d?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();d&&this.scaleGroups()}if(c)M(c.container,{cursor:c._cursor}),c.cancelClick=this.hasDragged> -10,c.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){W[ra]&&W[ra].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,a=this.normalize(a,c);c&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=W[ra];if(a)a.pointer.reset(), -a.pointer.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart;ra=b.index;a=this.normalize(a);a.returnValue=!1;b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=L(a,"class")){if(c.indexOf(b)!==-1)return!0;if(c.indexOf("highcharts-container")!==-1)return!1}a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries, -a=a.relatedTarget||a.toElement;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&!this.inClass(a,"highcharts-series-"+b.index))b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(H(c.series,"click",v(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(v(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&H(b,"click",a)))},setDOMEvents:function(){var a= -this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};N(b,"mouseleave",a.onContainerMouseLeave);eb===1&&N(z,"mouseup",a.onDocumentMouseUp);if(db)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},eb===1&&N(z,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;U(this.chart.container,"mouseleave",this.onContainerMouseLeave); -eb||(U(z,"mouseup",this.onDocumentMouseUp),U(z,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};v(u.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,k=a?"x":"y",j=a?"X":"Y",m="chart"+j,l=a?"width":"height",n=i["plot"+(a? -"Left":"Top")],t,r,p=h||1,o=i.inverted,x=i.bounds[a?"h":"v"],w=b.length===1,q=b[0][m],s=c[0][m],v=!w&&b[1][m],u=!w&&c[1][m],A,c=function(){!w&&P(q-v)>20&&(p=h||P(s-u)/P(q-v));r=(n-s)/p+q;t=i["plot"+(a?"Width":"Height")]/p};c();b=r;b<x.min?(b=x.min,A=!0):b+t>x.max&&(b=x.max-t,A=!0);A?(s-=0.8*(s-g[k][0]),w||(u-=0.8*(u-g[k][1])),c()):g[k]=[s,u];o||(f[k]=r-n,f[l]=t);f=o?1/p:p;e[l]=t;e[k]=b;d[o?a?"scaleY":"scaleX":"scale"+j]=p;d["translate"+j]=f*n+(s-f*q)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown, -e=a.touches,f=e.length,g=b.lastValidTouch,h=b.hasZoom,i=b.selectionMarker,k={},j=f===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||b.runChartClick),m={};if(f>1)b.initiated=!0;h&&b.initiated&&!j&&a.preventDefault();Ha(e,function(a){return b.normalize(a)});if(a.type==="touchstart")o(e,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),g.x=[d[0].chartX,d[1]&&d[1].chartX],g.y=[d[0].chartY,d[1]&&d[1].chartY],o(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"], -d=a.minPixelPadding,e=a.toPixels(p(a.options.min,a.dataMin)),f=a.toPixels(p(a.options.max,a.dataMax)),g=E(e,f),e=s(e,f);b.min=E(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}}),b.res=!0;else if(d.length){if(!i)b.selectionMarker=i=v({destroy:va,touch:!0},c.plotBox);b.pinchTranslate(d,e,k,i,m,g);b.hasPinched=h;b.scaleGroups(k,m);if(!h&&b.followTouchMove&&f===1)this.runPointActions(b.normalize(a));else if(b.res)b.res=!1,this.reset(!1,0)}},touch:function(a,b){var c=this.chart;ra=c.index;a.touches.length===1?(a= -this.normalize(a),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY-c.plotTop)&&!c.openMenu?(b&&this.runPointActions(a),this.pinch(a)):b&&this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchStart:function(a){this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(a){W[ra]&&W[ra].pointer.drop(a)}});if(C.PointerEvent||C.MSPointerEvent){var wa={},Db=!!C.PointerEvent,Sb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in wa)wa.hasOwnProperty(a)&& -b.push({pageX:wa[a].pageX,pageY:wa[a].pageY,target:wa[a].target});return b},Eb=function(a,b,c,d){if((a.pointerType==="touch"||a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&W[ra])d(a),d=W[ra].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:va,touches:Sb()})};v(Ya.prototype,{onContainerPointerDown:function(a){Eb(a,"onContainerTouchStart","touchstart",function(a){wa[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Eb(a,"onContainerTouchMove", -"touchmove",function(a){wa[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!wa[a.pointerId].target)wa[a.pointerId].target=a.currentTarget})},onDocumentPointerUp:function(a){Eb(a,"onDocumentTouchEnd","touchend",function(a){delete wa[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,Db?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,Db?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(z,Db?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}}); -fb(Ya.prototype,"init",function(a,b,c){a.call(this,b,c);this.hasZoom&&M(b.container,{"-ms-touch-action":"none","touch-action":"none"})});fb(Ya.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(N)});fb(Ya.prototype,"destroy",function(a){this.batchMSEvents(U);a.call(this)})}var pb=u.Legend=function(a,b){this.init(a,b)};pb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=b.itemMarginTop||0;this.options=b;if(b.enabled)c.itemStyle=d,c.itemHiddenStyle= -D(d,b.itemHiddenStyle),c.itemMarginTop=e,c.padding=d=p(b.padding,8),c.initialItemX=d,c.initialItemY=d-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.symbolWidth=p(b.symbolWidth,16),c.pages=[],c.render(),N(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},k;d&&d.css({fill:c, -color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(k in i.stroke=h,g=a.convertAttribs(g),g)d=g[k],d!==B&&(i[k]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ua(a.checkbox)}, -destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight,e=this.titleHeight;if(b)c=b.translateY,o(this.allItems,function(f){var g=f.checkbox,h;g&&(h=c+e+g.y+(a||0)+3,M(g,{left:b.translateX+f.checkboxOffset+g.x-20+"px",top:h+"px",display:h>c-6&&h<c+d-6?"":"none"}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title= -this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},setText:function(a){var b=this.options;a.legendItem.attr({text:b.labelFormat?La(b.labelFormat,a):b.labelFormatter.call(a)})},renderItem:function(a){var b=this.chart,c=b.renderer,d=this.options,e=d.layout==="horizontal",f=this.symbolWidth,g=d.symbolPadding, -h=this.itemStyle,i=this.itemHiddenStyle,k=this.padding,j=e?p(d.itemDistance,20):0,m=!d.rtl,l=d.width,n=d.itemMarginBottom||0,t=this.itemMarginTop,r=this.initialItemX,o=a.legendItem,y=a.series&&a.series.drawLegendSymbol?a.series:a,x=y.options,x=this.createCheckboxForItem&&x&&x.showCheckbox,q=d.useHTML;if(!o){a.legendGroup=c.g("legend-item").attr({zIndex:1}).add(this.scrollGroup);a.legendItem=o=c.text("",m?f+g:-g,this.baseline||0,q).css(D(a.visible?h:i)).attr({align:m?"left":"right",zIndex:2}).add(a.legendGroup); -if(!this.baseline)this.fontMetrics=c.fontMetrics(h.fontSize,o),this.baseline=this.fontMetrics.f+3+t,o.attr("y",this.baseline);y.drawLegendSymbol(this,a);this.setItemEvents&&this.setItemEvents(a,o,q,h,i);this.colorizeItem(a,a.visible);x&&this.createCheckboxForItem(a)}this.setText(a);c=o.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||f+g+c.width+j+(x?20:0);this.itemHeight=g=A(a.legendItemHeight||c.height);if(e&&this.itemX-r+f>(l||b.chartWidth-2*k-r-d.x))this.itemX=r,this.itemY+=t+this.lastLineHeight+ -n,this.lastLineHeight=0;this.maxItemWidth=s(this.maxItemWidth,f);this.lastItemY=t+this.itemY+n;this.lastLineHeight=s(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=t+g+n,this.lastLineHeight=g);this.offsetWidth=l||s((e?this.itemX-r-j:f)+k,this.offsetWidth)},getAllItems:function(){var a=[];o(this.chart.series,function(b){var c=b.options;if(p(c.showInLegend,!q(c.linkedTo)?B:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},adjustMargins:function(a, -b){var c=this.chart,d=this.options,e=d.align.charAt(0)+d.verticalAlign.charAt(0)+d.layout.charAt(0);this.display&&!d.floating&&o([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(f,g){f.test(e)&&!q(a[g])&&(c[ob[g]]=s(c[ob[g]],c.legend[(g+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][g]*d[g%2?"x":"y"]+p(d.margin,12)+b[g]))})},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,k=a.options,j=a.padding,m=k.borderWidth,l=k.backgroundColor;a.itemX=a.initialItemX; -a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();jb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});k.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;a.lastLineHeight=0;o(e,function(b){a.renderItem(b)});g=(k.width||a.offsetWidth)+j;h=a.lastItemY+a.lastLineHeight+ -a.titleHeight;h=a.handleOverflow(h);h+=j;if(m||l){if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,k.borderRadius,m||0).attr({stroke:k.borderColor,"stroke-width":m||0,fill:l||"none"}).add(d).shadow(k.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;o(e,function(b){a.positionItem(b)});f&&d.align(v({width:g,height:h},k),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this, -c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,k=e.navigation,j=p(k.animation,!0),m=k.arrowSize||12,l=this.nav,n=this.pages,t=this.padding,r,q=this.allItems,y=function(a){i.attr({height:a});if(b.contentGroup.div)b.contentGroup.div.style.clip="rect("+t+"px,9999px,"+(t+a)+"px,0)"};e.layout==="horizontal"&&(f/=2);g&&(f=E(f,g));n.length=0;if(a>f){this.clipHeight=h=s(f-20-this.titleHeight-t,0);this.currentPage= -p(this.currentPage,1);this.fullHeight=a;o(q,function(a,b){var c=a._legendItemPos[1],d=A(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(r||c)!==n[e-1])n.push(r||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==r&&(r=c)});if(!i)i=b.clipRect=d.clipRect(0,t,9999,0),b.contentGroup.clip(i);y(h);if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,m,m).on("click",function(){b.scroll(-1,j)}).add(l),this.pager=d.text("",15,10).css(k.style).add(l),this.down= -d.symbol("triangle-down",0,0,m,m).on("click",function(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)y(c.chartHeight),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,k=this.padding;e>d&&(e=d);if(e>0)b!==B&&Va(b,this.chart),this.nav.attr({translateX:k,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}), -this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};K=u.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||a.fontMetrics.f;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-c+1,a.symbolWidth,c,a.options.symbolRadius|| -0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d=a.symbolWidth,e=this.chart.renderer,f=this.legendGroup,a=a.baseline-A(a.fontMetrics.b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=c=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b,c).add(f),c.isMarker=!0}};(/Trident\/7\.0/.test(Aa)||Na)&&fb(pb.prototype,"positionItem", -function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});var hb=u.Chart=function(){this.getArgs.apply(this,arguments)};u.chart=function(a,b,c){return new hb(a,b,c)};hb.prototype={callbacks:[],getArgs:function(){var a=[].slice.call(arguments);if(ya(a[0])||a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(a,b){var c,d=a.series;a.series=null;c=D(O,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing= -this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=W.length;W.push(f);eb++;d.reflow!==!1&&N(f,"load",function(){f.initReflow()});if(e)for(g in e)N(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=ha?!1:p(d.animation,!0);f.pointCount=f.colorCounter=f.symbolCounter=0;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=I[a.type||b.type||b.defaultSeriesType])|| -Y(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.hasCartesianSeries,k=this.isDirtyBox,j=c.length,m=j,l=this.renderer,n=l.isHidden(),p=[];Va(a,this);n&&this.cloneRenderTo();for(this.layOutTitles();m--;)if(a=c[m],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(m=j;m--;)if(a=c[m],a.options.stacking)a.isDirty= -!0;o(c,function(a){a.isDirty&&a.options.legendType==="point"&&(a.updateTotals&&a.updateTotals(),f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(i&&!this.isResizing)this.maxTicks=null,o(b,function(a){a.setScale()});this.getMargins();i&&(o(b,function(a){a.isDirty&&(k=!0)}),o(b,function(a){var b=a.min+","+a.max;if(a.extKey!==b)a.extKey=b,p.push(function(){H(a,"afterSetExtremes",v(a.eventArgs,a.getExtremes()));delete a.eventArgs});(k||g)&&a.redraw()}));k&&this.drawChartBox(); -o(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();H(this,"redraw");n&&this.cloneRenderTo(!0);o(p,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ta(b.xAxis|| -{}),b=b.yAxis=ta(b.yAxis||{});o(c,function(a,b){a.index=b;a.isX=!0});o(b,function(a,b){a.index=b});c=c.concat(b);o(c,function(b){new ja(a,b)})},getSelectedPoints:function(){var a=[];o(this.series,function(b){a=a.concat(Oa(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return Oa(this.series,function(a){return a.selected})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=D(e.title,a);g=e.subtitle=D(e.subtitle,b),e=g;o([["title",a,f],["subtitle", -b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,f=e.title,e=e.subtitle,g=this.renderer,h=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||h)+"px"}).align(v({y:g.fontMetrics(f.style.fontSize,c).b-3},f),!1,"spacingBox"),!f.floating&& -!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||h)+"px"}).align(v({y:b+(f.margin-13)+g.fontMetrics(e.style.fontSize,c).b},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign&&(b=ua(b+d.getBBox().height)));c=this.titleOffset!==b;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&p(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!q(b))this.containerWidth=Ga(c, -"width");if(!q(a))this.containerHeight=Ga(c,"height");this.chartWidth=s(0,b||this.containerWidth||600);this.chartHeight=s(0,p(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ua(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),M(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&& -b.style.setProperty("display","block","important"),z.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options,c=b.chart,d,e;a=this.renderTo;var f="highcharts-"+Ab++;if(!a)this.renderTo=a=c.renderTo;if(ya(a))this.renderTo=a=z.getElementById(a);a||Y(13,!0);d=F(L(a,"data-highcharts-chart"));!isNaN(d)&&W[d]&&W[d].hasRendered&&W[d].destroy();L(a,"data-highcharts-chart",this.index);a.innerHTML="";!c.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();d=this.chartWidth; -e=this.chartHeight;this.container=a=$(Ma,{className:"highcharts-container"+(c.className?" "+c.className:""),id:f},v({position:"relative",overflow:"hidden",width:d+"px",height:e+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},c.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=new (u[c.renderer]||cb)(a,d,e,c.style,c.forExport,b.exporting&&b.exporting.allowHTML);ha&&this.renderer.create(this,a,d,e);this.renderer.chartIndex=this.index}, -getMargins:function(a){var b=this.spacing,c=this.margin,d=this.titleOffset;this.resetMargins();if(d&&!q(c[0]))this.plotTop=s(this.plotTop,d+this.options.title.margin+b[0]);this.legend.adjustMargins(c,b);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],c=a.margin;a.hasCartesianSeries&&o(a.axes,function(a){a.visible&&a.getOffset()});o(ob, -function(d,e){q(c[e])||(a[d]+=b[e])});a.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||Ga(d,"width"),f=c.height||Ga(d,"height"),c=a?a.target:C;if(!b.hasUserSize&&!b.isPrinting&&e&&f&&(c===C||c===z)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),b.reflowTimeout=Qa(function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null},a?100:0);b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)}; -N(C,"resize",b);N(a,"destroy",function(){U(C,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g=d.renderer;d.isResizing+=1;Va(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(q(a))d.chartWidth=e=s(0,A(a)),d.hasUserSize=!!e;if(q(b))d.chartHeight=f=s(0,A(b));a=g.globalAnimation;(a?Xa:M)(d.container,{width:e+"px",height:f+"px"},a);d.setChartSize(!0);g.setSize(e,f,c);d.maxTicks=null;o(d.axes,function(a){a.isDirty=!0;a.setScale()});o(d.series,function(a){a.isDirty=!0});d.isDirtyLegend= -!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;H(d,"resize");a=g.globalAnimation;Qa(function(){d&&H(d,"endResize",null,function(){d.isResizing-=1})},a===!1?0:a&&a.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,k,j,m;this.plotLeft=i=A(this.plotLeft);this.plotTop=k=A(this.plotTop);this.plotWidth=j=s(0,A(d-i-this.marginRight));this.plotHeight= -m=s(0,A(e-k-this.marginBottom));this.plotSizeX=b?m:j;this.plotSizeY=b?j:m;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:k,width:j,height:m};d=2*S(this.plotBorderWidth/2);b=ua(s(d,h[3])/2);c=ua(s(d,h[0])/2);this.clipBox={x:b,y:c,width:S(this.plotSizeX-s(d,h[1])/2-b),height:s(0,S(this.plotSizeY-s(d,h[2])/2-c))};a||o(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a= -this;o(ob,function(b,c){a[b]=p(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,k=a.backgroundColor,j=a.plotBackgroundColor,m=a.plotBackgroundImage,l=a.plotBorderWidth||0,n,p=this.plotLeft,o=this.plotTop,q=this.plotWidth,y=this.plotHeight,x=this.plotBox,s=this.clipRect,v= -this.clipBox;n=i+(a.shadow?8:0);if(i||k)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:k||"none"};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(j)f?f.animate(x):this.plotBackground=b.rect(p,o,q,y,0).attr({fill:j}).add().shadow(a.plotShadow);if(m)h?h.animate(x):this.plotBGImage=b.image(m,p,o,q,y).add();s?s.animate({width:v.width,height:v.height}):this.clipRect= -b.clipRect(v);if(l)g?g.animate(g.crisp({x:p,y:o,width:q,height:y,strokeWidth:-l})):this.plotBorder=b.rect(p,o,q,y,0,-l).attr({stroke:a.plotBorderColor,"stroke-width":l,fill:"none",zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;o(["inverted","angular","polar"],function(g){c=I[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=I[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a= -this,b=a.series;o(b,function(a){a.linkedSeries.length=0});o(b,function(b){var d=b.options.linkedTo;if(ya(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d,b.visible=p(b.options.visible,d.options.visible,b.visible)})},renderSeries:function(){o(this.series,function(a){a.translate();a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&o(b.items,function(c){var d=v(b.style,c.style),e=F(d.left)+a.plotLeft,f=F(d.top)+a.plotTop+12;delete d.left; -delete d.top;a.renderer.text(c.html,e,f).attr({zIndex:2}).css(d).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,d,e,f,g;this.setTitle();this.legend=new pb(this,c.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();d=this.plotWidth;e=this.plotHeight-=21;o(a,function(a){a.setScale()});this.getAxisMargins();f=d/this.plotWidth>1.1;g=e/this.plotHeight>1.05;if(f||g)this.maxTicks=null,o(a,function(a){(a.horiz&&f||!a.horiz&&g)&&a.setTickInterval(!0)}), -this.getMargins();this.drawChartBox();this.hasCartesianSeries&&o(a,function(a){a.visible&&a.render()});if(!this.seriesGroup)this.seriesGroup=b.g("series-group").attr({zIndex:3}).add();this.renderSeries();this.renderLabels();this.showCredits(c.credits);this.hasRendered=!0},showCredits:function(a){if(a.enabled&&!this.credits)this.credits=this.renderer.text(a.text,0,0).on("click",function(){if(a.href)C.location.href=a.href}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position)}, -destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;H(a,"destroy");W[a.index]=B;eb--;a.renderTo.removeAttribute("data-highcharts-chart");U(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();o("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML= -"",U(d),f&&Ua(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!da&&C==C.top&&z.readyState!=="complete"||ha&&!C.canvg?(ha?Ob.push(function(){a.firstRender()},a.options.global.canvasToolsURL):z.attachEvent("onreadystatechange",function(){z.detachEvent("onreadystatechange",a.firstRender);z.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();H(a,"init");a.resetMargins();a.setChartSize(); -a.propFromSeries();a.getAxes();o(b.series||[],function(b){a.initSeries(b)});a.linkSeries();H(a,"beforeRender");if(u.Pointer)a.pointer=new Ya(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);o(a.callbacks,function(b){a.index!==B&&b.apply(a,[a])});H(a,"load");a.cloneRenderTo(!0)}},splashArray:function(a,b){var c=b[a],c=Z(c)?c:[c,c,c,c];return[p(b[a+"Top"],c[0]),p(b[a+"Right"],c[1]),p(b[a+"Bottom"],c[2]),p(b[a+"Left"],c[3])]}};var Cb=u.CenteredSeriesMixin={getCenter:function(){var a=this.options, -b=this.chart,c=2*(a.slicedOffset||0),d=b.plotWidth-2*c,b=b.plotHeight-2*c,e=a.center,e=[p(e[0],"50%"),p(e[1],"50%"),a.size||"100%",a.innerSize||0],f=E(d,b),g,h;for(g=0;g<4;++g)h=e[g],a=g<2||g===2&&/%$/.test(h),e[g]=(/%$/.test(h)?[d,b,f,e[2]][g]*parseFloat(h)/100:parseFloat(h))+(a?c:0);e[3]>e[2]&&(e[3]=e[2]);return e}},Ia=function(){};Ia.prototype={init:function(a,b,c){this.series=a;this.color=a.color;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors, -this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.options.pointValKey||c.pointValKey,a=Ia.prototype.optionsToObject.call(this,a);v(this,a);this.options=this.options?v(this.options,a):a;if(d)this.y=this[d];if(this.x===B&&c)this.x=b===B?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.options.keys,e=d||c.pointArrayMap||["y"],f=e.length,g=0,h= -0;if(typeof a==="number"||a===null)b[e[0]]=a;else if(Ja(a)){if(!d&&a.length>f){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];g++}for(;h<f;){if(!d||a[g]!==void 0)b[e[h]]=a[g];g++;h++}}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ma(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut(); -if(this.graphic||this.dataLabel)U(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=["graphic","dataLabel","dataLabelUpper","connector","shadowGroup"],b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b= -this.series,c=b.tooltipOptions,d=p(c.valueDecimals,""),e=c.valuePrefix||"",f=c.valueSuffix||"";o(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return La(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select&&d.select(null,a.ctrlKey|| -a.metaKey||a.shiftKey)});H(this,a,b,c)},visible:!0};var R=u.Series=function(){};R.prototype={isCartesian:!0,type:"line",pointClass:Ia,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return p(a.options.index,a._i)-p(b.options.index,b._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries= -[];c.bindAxes();v(c,{name:b.name,state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(ha)b.animation=!1;e=b.events;for(d in e)N(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();o(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;jb(f,g);this.yAxis&&jb(this.yAxis.series,g);o(f,function(a,b){a.index=b;a.name= -a.name||"Series "+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;o(a.axisTypes||[],function(e){o(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==B&&b[e]===d.id||b[e]===B&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&Y(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;o(c.parallelArrays,typeof b==="number"?function(d){var f=d==="y"&&c.toYData?c.toYData(a):a[d];c[d+"Data"][b]=f}:function(a){Array.prototype[b].apply(c[a+"Data"], -Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,c,d=a.pointIntervalUnit,b=p(b,a.pointStart,0);this.pointInterval=c=p(this.pointInterval,a.pointInterval,1);if(d==="month"||d==="year")a=new oa(b),a=d==="month"?+a[yb](a[ab]()+c):+a[zb](a[bb]()+c),c=a-b;this.xIncrement=b+c;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else o(d,function(c, -g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=D(e,c.series,a);this.tooltipOptions=D(O.tooltip,O.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;this.zoneAxis=c.zoneAxis;a=this.zones=(c.zones||[]).slice();if((c.negativeColor|| -c.negativeFillColor)&&!c.zones)a.push({value:c[this.zoneAxis+"Threshold"]||c.threshold||0,color:c.negativeColor,fillColor:c.negativeFillColor});a.length&&q(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return c},getCyclic:function(a,b,c){var d=this.userOptions,e="_"+a+"Index",f=a+"Counter";b||(q(d[e])?b=d[e]:(d[e]=b=this.chart[f]%c.length,this.chart[f]+=1),b=c[b]);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color|| -ba[this.type].color,this.chart.options.colors)},getSymbol:function(){var a=this.options.marker;this.getCyclic("symbol",a.symbol,this.chart.options.symbols);if(/^url/.test(this.symbol))a.radius=0},drawLegendSymbol:K.drawLineMarker,setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,k=e.chart,j=null,m=e.xAxis,l=m&&!!m.categories,n=i.turboThreshold,t=this.xData,r=this.yData,s=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=p(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData&& -e.visible)o(a,function(a,b){f[b].update&&a!==i.data[b]&&f[b].update(a,!1,null,!1)});else{e.xIncrement=null;e.colorCounter=0;o(this.parallelArrays,function(a){e[a+"Data"].length=0});if(n&&h>n){for(c=0;j===null&&c<h;)j=a[c],c++;if(ka(j)){l=p(i.pointStart,0);j=p(i.pointInterval,1);for(c=0;c<h;c++)t[c]=l,r[c]=a[c],l+=j;e.xIncrement=l}else if(Ja(j))if(s)for(c=0;c<h;c++)j=a[c],t[c]=j[0],r[c]=j.slice(1,s+1);else for(c=0;c<h;c++)j=a[c],t[c]=j[0],r[c]=j[1];else Y(12)}else for(c=0;c<h;c++)if(a[c]!==B&&(j={series:e}, -e.pointClass.prototype.applyOptions.apply(j,[a[c]]),e.updateParallelArrays(j,c),l&&q(j.name)))m.names[j.x]=j.name;ya(r[0])&&Y(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();if(m)m.minRange=m.userMinRange;e.isDirty=e.isDirtyData=k.isDirtyBox=!0;c=!1}i.legendType==="point"&&(this.processData(),this.generatePoints());b&&k.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i,k=this.options;i=k.cropThreshold;var k=this.getExtremesFromAll|| -k.getExtremesFromAll,j=this.isCartesian,m,l;if(j&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(h)a=h.getExtremes(),m=a.min,l=a.max;if(j&&this.sorted&&!k&&(!i||d>i||this.forceCrop))if(b[d-1]<m||b[0]>l)b=[],c=[];else if(b[0]<m||b[d-1]>l)e=this.cropData(this.xData,this.yData,m,l),b=e.xData,c=e.yData,e=e.start,f=!0;for(i=b.length-1;i>=0;i--)d=b[i]-b[i-1],d>0&&(g===B||d<g)?g=d:d<0&&this.requireSorting&&Y(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c; -this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=p(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(c=i;c<e;c++)if(a[c]>d){g=c+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,k=this.hasGroupedData,j,m=[],l;if(!b&&!k)b=[],b.length=a.length,b=this.data=b;for(l=0;l<g;l++)i= -h+l,k?m[l]=(new f).init(this,[d[l]].concat(ta(e[l]))):(b[i]?j=b[i]:a[i]!==B&&(b[i]=j=(new f).init(this,a[i],d[l])),m[l]=j),m[l].index=i;if(b&&(g!==(c=b.length)||k))for(l=0;l<c;l++)if(l===h&&!k&&(l+=g),b[l])b[l].destroyElements(),b[l].plotX=B;this.data=b;this.points=m},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,k,j,m,a=a||this.stackedYData||this.processedYData;d=a.length;for(m=0;m<d;m++)if(k=c[m],j=a[m],i=j!==null&&j!== -B&&(!b.isLog||j.length||j>0),k=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(c[m+1]||k)>=g&&(c[m-1]||k)<=h,i&&k)if(i=j.length)for(;i--;)j[i]!==null&&(e[f++]=j[i]);else e[f++]=j;this.dataMin=Sa(e);this.dataMax=Da(e)},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,k=i==="between"||ka(i),j=a.threshold, -m=a.startFromThreshold?j:0,l,n,t,o,v=Number.MAX_VALUE,a=0;a<g;a++){var y=f[a],x=y.x,w=y.y;n=y.low;var u=b&&e.stacks[(this.negStacks&&w<(m?0:j)?"-":"")+this.stackKey];if(e.isLog&&w!==null&&w<=0)y.y=w=null,Y(10);y.plotX=l=E(s(-1E5,c.translate(x,0,0,0,1,i,this.type==="flags")),1E5);if(b&&this.visible&&u&&u[x])o=this.getStackIndicator(o,x,this.index),u=u[x],w=u.points[o.key],n=w[0],w=w[1],n===m&&(n=p(j,e.min)),e.isLog&&n<=0&&(n=null),y.total=y.stackTotal=u.total,y.percentage=u.total&&y.y/u.total*100, -y.stackY=w,u.setOffset(this.pointXOffset||0,this.barW||0);y.yBottom=q(n)?e.translate(n,0,1,0,1):null;h&&(w=this.modifyValue(w,y));y.plotY=n=typeof w==="number"&&w!==Infinity?E(s(-1E5,e.translate(w,0,1,0,1)),1E5):B;y.isInside=n!==B&&n>=0&&n<=e.len&&l>=0&&l<=c.len;y.clientX=k?c.translate(x,0,0,0,1):l;y.negative=y.y<(j||0);y.category=d&&d[y.x]!==B?d[y.x]:y.x;a&&(v=E(v,P(l-t)));t=l}this.closestPointRangePx=v;this.getSegments()},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,e=b.inverted, -f=this.clipBox,g=f||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,g.height,c.xAxis,c.yAxis].join(","),i=b[h],k=b[h+"m"];if(!i){if(a)g.width=0,b[h+"m"]=k=d.clipRect(-99,e?-b.plotLeft:-b.plotTop,99,e?b.chartWidth:b.chartHeight);b[h]=i=d.clipRect(g)}a&&(i.count+=1);if(c.clip!==!1)this.group.clip(a||f?i:b.clipRect),this.markerGroup.clip(k),this.sharedClipKey=h;a||(i.count-=1,i.count<=0&&h&&b[h]&&(f||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b= -this.chart,c=this.options.animation,d;if(c&&!Z(c))c=ba[this.type].animation;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99},c),this.animate=null)},afterAnimate:function(){this.setClip();H(this,"afterAnimate")},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,k,j,m=this.options.marker,l=this.pointAttr[""],n,o,r,q=this.markerGroup,s=p(m.enabled,this.xAxis.isRadial,this.closestPointRangePx>2*m.radius); -if(m.enabled!==!1||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=S(g.plotX),e=g.plotY,j=g.graphic,n=g.marker||{},o=!!g.marker,a=s&&n.enabled===B||n.enabled,r=g.isInside,a&&e!==B&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""]||l,h=a.r,i=p(n.symbol,this.symbol),k=i.indexOf("url")===0,j)j[r?"show":"hide"](!0).animate(v({x:d-h,y:e-h},j.symbolName?{width:2*h,height:2*h}:{}));else{if(r&&(h>0||k))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h,o?n:m).attr(a).add(q)}else if(j)g.graphic= -j.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h=a.options.negativeColor;f={stroke:g,fill:g};var i=a.points||[],k,j,m=[],l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var n=c.lineColor,t=c.fillColor;j=b.turboThreshold;var r=a.zones,s=a.zoneAxis||"y",y;b.marker? -(e.radius=e.radius||c.radius+e.radiusPlus,e.lineWidth=e.lineWidth||c.lineWidth+e.lineWidthPlus):(e.color=e.color||ia(e.color||g).brighten(e.brightness).get(),e.negativeColor=e.negativeColor||ia(e.negativeColor||h).brighten(e.brightness).get());m[""]=a.convertAttribs(c,f);o(["hover","select"],function(b){m[b]=a.convertAttribs(d[b],m[""])});a.pointAttr=m;g=i.length;if(!j||g<j||k)for(;g--;){j=i[g];if((c=j.options&&j.options.marker||j.options)&&c.enabled===!1)c.radius=0;if(r.length){k=0;for(f=r[k];j[s]>= -f.value;)f=r[++k];j.color=j.fillColor=p(f.color,a.color)}k=b.colorByPoint||j.color;if(j.options)for(y in l)q(c[l[y]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker||j.negative&&!f.fillColor&&!e.fillColor)f[a.pointAttrToOptions.fill]=f.color||!j.options.color&&e[j.negative&&h?"negativeColor":"color"]||ia(j.color).brighten(f.brightness||e.brightness).get();f={color:j.color};if(!t)f.fillColor=j.color;if(!n)f.lineColor=j.color;c.hasOwnProperty("color")&&!c.color&&delete c.color; -k[""]=a.convertAttribs(v(f,c),m[""]);k.hover=a.convertAttribs(d.hover,m.hover,k[""]);k.select=a.convertAttribs(d.select,m.select,k[""])}else k=m;j.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(Aa),d,e=a.data||[],f,g,h;H(a,"destroy");U(a);o(a.axisTypes||[],function(b){if(h=a[b])ma(h.series,a),h.isDirty=h.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(d=e.length;d--;)(f=e[d])&&f.destroy&&f.destroy();a.points=null;clearTimeout(a.animationTimeout);for(g in a)a[g]instanceof -Q&&!a[g].survive&&(d=c&&g==="group"?"hide":"destroy",a[g][d]());if(b.hoverSeries===a)b.hoverSeries=null;ma(b.series,a);for(g in a)delete a[g]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;o(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h,"L"):d==="center"?c.push((i.plotX+g)/2,i.plotY,"L",(i.plotX+g)/2,h,"L"):c.push(g,i.plotY,"L")),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a= -this,b=[],c,d=[];o(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color,b.dashStyle]],d=b.lineWidth,e=b.linecap!=="square",f=this.getGraphPath(),g=this.fillGraph&&this.color||"none";o(this.zones,function(d,e){c.push(["zoneGraph"+e,d.color||a.color,d.dashStyle||b.dashStyle])});o(c,function(c,i){var k=c[0],j=a[k];if(j)j.animate({d:f});else if((d|| -g)&&f.length)j={stroke:c[1],"stroke-width":d,fill:g,zIndex:1},c[2]?j.dashstyle=c[2]:e&&(j["stroke-linecap"]=j["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(f).attr(j).add(a.group).shadow(i<2&&b.shadow)})},applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,f,g=this.clips||[],h,i=this.graph,k=this.area,j=s(b.chartWidth,b.chartHeight),m=this[(this.zoneAxis||"y")+"Axis"],l,n=m.reversed,t=b.inverted,r=m.horiz,q,y,x,v=!1;if(d.length&&(i||k)&&m.min!==B)i&&i.hide(),k&&k.hide(), -l=m.getExtremes(),o(d,function(d,o){e=n?r?b.plotWidth:0:r?0:m.toPixels(l.min);e=E(s(p(f,e),0),j);f=E(s(A(m.toPixels(p(d.value,l.max),!0)),0),j);v&&(e=f=m.toPixels(l.max));q=Math.abs(e-f);y=E(e,f);x=s(e,f);if(m.isXAxis){if(h={x:t?x:y,y:0,width:q,height:j},!r)h.x=b.plotHeight-h.x}else if(h={x:0,y:t?x:y,width:j,height:q},r)h.y=b.plotWidth-h.y;b.inverted&&c.isVML&&(h=m.isXAxis?{x:0,y:n?y:x,height:h.width,width:b.chartWidth}:{x:h.y-b.plotLeft-b.spacingBox.x,y:0,width:h.height,height:b.chartHeight});g[o]? -g[o].animate(h):(g[o]=c.clipRect(h),i&&a["zoneGraph"+o].clip(g[o]),k&&a["zoneArea"+o].clip(g[o]));v=d.value>l.max}),this.clips=g},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};o(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)N(c,"resize",a),N(b,"destroy",function(){U(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({zIndex:d||0.1}).add(e), -f.addClass("highcharts-series-"+this.index));f.attr({visibility:c})[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&p(c.duration,500)||0,f=a.visible?"inherit":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group", -"series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());o(a.points,function(a){a.redraw&&a.redraw()});a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)a.animationTimeout=Qa(function(){a.afterAnimate()}, -e);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.isDirty,d=this.group,e=this.xAxis,f=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),d.animate({translateX:p(e&&e.left,a.plotLeft),translateY:p(f&&f.top,a.plotTop)}));this.translate();this.render();b&&H(this,"updatedData");(c||b)&&delete this.kdTree},kdDimensions:1,kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted; -return this.searchKDTree({clientX:e?c.len-a.chartY+c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,e,f){var g,h;if(h=c&&c.length)return g=b.kdAxisArray[e%f],c.sort(function(a,b){return a[g]-b[g]}),h=Math.floor(h/2),{point:c[h],left:a(c.slice(0,h),e+1,f),right:a(c.slice(h+1),e+1,f)}}var b=this,c=b.kdDimensions;delete b.kdTree;Qa(function(){var d=Oa(b.points||[],function(a){return a.y!==null});b.kdTree=a(d,c,c)},b.options.kdNow?0:1)},searchKDTree:function(a, -b){function c(a,b,k,j){var m=b.point,l=d.kdAxisArray[k%j],n,p,o=m;p=q(a[e])&&q(m[e])?Math.pow(a[e]-m[e],2):null;n=q(a[f])&&q(m[f])?Math.pow(a[f]-m[f],2):null;n=(p||0)+(n||0);m.dist=q(n)?Math.sqrt(n):Number.MAX_VALUE;m.distX=q(p)?Math.sqrt(p):Number.MAX_VALUE;l=a[l]-m[l];n=l<0?"left":"right";p=l<0?"right":"left";b[n]&&(n=c(a,b[n],k+1,j),o=n[g]<o[g]?n:m);b[p]&&Math.sqrt(l*l)<o[g]&&(a=c(a,b[p],k+1,j),o=a[g]<o[g]?a:o);return o}var d=this,e=this.kdAxisArray[0],f=this.kdAxisArray[1],g=b?"distX":"dist"; -this.kdTree||this.buildKDTree();if(this.kdTree)return c(a,this.kdTree,this.kdDimensions,this.kdDimensions)}};Kb.prototype={destroy:function(){Ta(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?La(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d= -c.chart,e=d.inverted,f=c.reversed,f=this.isNegative&&!f||!this.isNegative&&f,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=P(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};hb.prototype.getStacks=function(){var a=this;o(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks= -a.stacks});o(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+p(b.options.stack,"")})};ja.prototype.buildStacks=function(){var a=this.series,b=p(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};ja.prototype.renderStackTotals=function(){var a=this.chart,b=a.renderer,c=this.stacks, -d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};ja.prototype.resetStacks=function(){var a=this.stacks,b,c;if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].touched<this.stacksTouched?(a[b][c].destroy(),delete a[b][c]):(a[b][c].total=null,a[b][c].cum=0)};ja.prototype.cleanStacks=function(){var a,b,c;if(!this.isXAxis){if(this.oldStacks)a=this.stacks= -this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}};R.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.startFromThreshold?f:0,h=e.stack,e=e.stacking,i=this.stackKey,k="-"+i,j=this.negStacks,m=this.yAxis,l=m.stacks,n=m.oldStacks,o,r,q,y,v,w,u;m.stacksTouched+=1;for(v=0;v<d;v++){w=a[v];u=b[v];o=this.getStackIndicator(o, -w,this.index);y=o.key;q=(r=j&&u<(g?0:f))?k:i;l[q]||(l[q]={});if(!l[q][w])n[q]&&n[q][w]?(l[q][w]=n[q][w],l[q][w].total=null):l[q][w]=new Kb(m,m.options.stackLabels,r,w,h);q=l[q][w];q.points[y]=[p(q.cum,g)];q.touched=m.stacksTouched;o.index>0&&this.singleStacks===!1&&(q.points[y][0]=q.points[this.index+","+w+",0"][0]);e==="percent"?(r=r?i:k,j&&l[r]&&l[r][w]?(r=l[r][w],q.total=r.total=s(r.total,q.total)+P(u)||0):q.total=fa(q.total+(P(u)||0))):q.total=fa(q.total+(u||0));q.cum=p(q.cum,g)+(u||0);q.points[y].push(q.cum); -c[v]=q.cum}if(e==="percent")m.usePercentage=!0;this.stackedYData=c;m.oldStacks={}}};R.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData,e;o([b,"-"+b],function(b){var f;for(var g=d.length,h,i;g--;)if(h=d[g],e=a.getStackIndicator(e,h,a.index),f=(i=c[b]&&c[b][h])&&i.points[e.key],h=f)i=i.total?100/i.total:0,h[0]=fa(h[0]*i),h[1]=fa(h[1]*i),a.stackedYData[g]=h[1]})};R.prototype.getStackIndicator=function(a,b,c){!q(a)||a.x!==b?a={x:b,index:0}:a.index++;a.key= -[c,b,a.index].join(",");return a};v(hb.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=p(b,!0),H(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new ja(this,D(a,{index:this[e].length,isX:b}));f[e]=ta(f[e]||{});f[e].push(a);p(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this,c=b.options,d=b.loadingDiv,e=c.loading,f=function(){d&&M(d,{left:b.plotLeft+ -"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};if(!d)b.loadingDiv=d=$(Ma,{className:"highcharts-loading"},v(e.style,{zIndex:10,display:"none"}),b.container),b.loadingSpan=$("span",null,e.labelStyle,d),N(b,"redraw",f);b.loadingSpan.innerHTML=a||c.lang.loading;if(!b.loadingShown)M(d,{opacity:0,display:""}),Xa(d,{opacity:e.style.opacity},{duration:e.showDuration||0}),b.loadingShown=!0;f()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Xa(b,{opacity:0},{duration:a.loading.hideDuration|| -100,complete:function(){M(b,{display:"none"})}});this.loadingShown=!1}});v(Ia.prototype,{update:function(a,b,c,d){function e(){f.applyOptions(a);if(f.y===null&&h)f.graphic=h.destroy();if(Z(a)&&!Ja(a))f.redraw=function(){if(h&&h.element&&a&&a.marker&&a.marker.symbol)f.graphic=h.destroy();if(a&&a.dataLabels&&f.dataLabel)f.dataLabel=f.dataLabel.destroy();f.redraw=null};i=f.index;g.updateParallelArrays(f,i);if(m&&f.name)m[f.x]=f.name;j.data[i]=Z(j.data[i])?f.options:a;g.isDirty=g.isDirtyData=!0;if(!g.fixedBox&& -g.hasCartesianSeries)k.isDirtyBox=!0;if(j.legendType==="point")k.isDirtyLegend=!0;b&&k.redraw(c)}var f=this,g=f.series,h=f.graphic,i,k=g.chart,j=g.options,m=g.xAxis&&g.xAxis.names,b=p(b,!0);d===!1?e():f.firePointEvent("update",{options:a},e)},remove:function(a,b){this.series.removePoint(qa(this,this.series.data),a,b)}});v(R.prototype,{addPoint:function(a,b,c,d){var e=this,f=e.options,g=e.data,h=e.graph,i=e.area,k=e.chart,j=e.xAxis&&e.xAxis.names,m=h&&h.shift||0,l=["graph","area"],h=f.data,n,t=e.xData; -Va(d,k);if(c){for(d=e.zones.length;d--;)l.push("zoneGraph"+d,"zoneArea"+d);o(l,function(a){if(e[a])e[a].shift=m+(f.step?2:1)})}if(i)i.isArea=!0;b=p(b,!0);i={series:e};e.pointClass.prototype.applyOptions.apply(i,[a]);l=i.x;d=t.length;if(e.requireSorting&&l<t[d-1])for(n=!0;d&&t[d-1]>l;)d--;e.updateParallelArrays(i,"splice",d,0,0);e.updateParallelArrays(i,d);if(j&&i.name)j[l]=i.name;h.splice(d,0,a);n&&(e.data.splice(d,0,null),e.processData());f.legendType==="point"&&e.generatePoints();c&&(g[0]&&g[0].remove? -g[0].remove(!1):(g.shift(),e.updateParallelArrays(i,"shift"),h.shift()));e.isDirty=!0;e.isDirtyData=!0;b&&(e.getAttribs(),k.redraw())},removePoint:function(a,b,c){var d=this,e=d.data,f=e[a],g=d.points,h=d.chart,i=function(){e.length===g.length&&g.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(f||{series:d},"splice",a,1);f&&f.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&h.redraw()};Va(c,h);b=p(b,!0);f?f.firePointEvent("remove",null,i):i()},remove:function(a,b){var c=this, -d=c.chart;H(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();p(a,!0)&&d.redraw(b)})},update:function(a,b){var c=this,d=this.chart,e=this.userOptions,f=this.type,g=I[f].prototype,h=["group","markerGroup","dataLabelsGroup"],i;if(a.type&&a.type!==f||a.zIndex!==void 0)h.length=0;o(h,function(a){h[a]=c[a];delete c[a]});a=D(e,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(i in g)this[i]=B;v(this,I[a.type||f].prototype); -o(h,function(a){c[a]=h[a]});this.init(d,a);d.linkSeries();p(b,!0)&&d.redraw(!1)}});v(ja.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=D(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.chart._labelPanes=B;this.init(c,v(a,{events:B}));c.isDirtyBox=!0;p(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ma(b.axes,this);ma(b[c],this);b.options[c].splice(this.options.index, -1);o(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;p(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var xa=na(R);I.line=xa;ba.area=D(ea,{softThreshold:!1,threshold:0});var sa=na(R,{type:"area",singleStacks:!1,getSegments:function(){var a=this,b=[],c=[],d=[],e=this.xAxis,f=this.yAxis,g=f.stacks[this.stackKey],h={},i,k,j=this.points,m=this.options.connectNulls,l,n,p;if(this.options.stacking&&!this.cropped){for(n= -0;n<j.length;n++)h[j[n].x]=j[n];for(p in g)g[p].total!==null&&d.push(+p);d.sort(function(a,b){return a-b});o(d,function(b){var d=null,j;if(!m||h[b]&&h[b].y!==null)if(h[b])c.push(h[b]);else{for(n=a.index;n<=f.series.length;n++)if(l=a.getStackIndicator(null,b,n),j=g[b].points[l.key]){d=j[1];break}i=e.translate(b);k=f.getThreshold(d);c.push({y:null,plotX:i,clientX:i,plotY:k,yBottom:k,onMouseOver:va})}});c.length&&b.push(c)}else R.prototype.getSegments.call(this),b=this.segments;this.segments=b},getSegmentPath:function(a){var b= -R.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=p(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];R.prototype.drawGraph.apply(this); -var a=this,b=this.areaPath,c=this.options,d=[["area",this.color,c.fillColor]];o(this.zones,function(b,f){d.push(["zoneArea"+f,b.color||a.color,b.fillColor||c.fillColor])});o(d,function(d){var f=d[0],g=a[f];g?g.animate({d:b}):(g={fill:d[2]||d[1],zIndex:0},d[2]||(g["fill-opacity"]=c.fillOpacity||0.75),a[f]=a.chart.renderer.path(b).attr(g).add(a.group))})},drawLegendSymbol:K.drawRectangle});I.area=sa;ba.spline=D(ea);xa=na(R,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c- -1],g=a[c+1],h,i,k,j;if(f&&g){a=f.plotY;k=g.plotX;var g=g.plotY,m;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;k=(1.5*d+k)/2.5;j=(1.5*e+g)/2.5;m=(j-i)*(k-d)/(k-h)+e-j;i+=m;j+=m;i>a&&i>e?(i=s(a,e),j=2*e-i):i<a&&i<e&&(i=E(a,e),j=2*e-i);j>g&&j>e?(j=s(g,e),i=2*e-j):j<g&&j<e&&(j=E(g,e),i=2*e-j);b.rightContX=k;b.rightContY=j}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});I.spline=xa;ba.areaspline=D(ba.area);sa=sa.prototype;xa=na(xa,{type:"areaspline", -closedStacks:!0,getSegmentPath:sa.getSegmentPath,closeSegment:sa.closeSegment,drawGraph:sa.drawGraph,drawLegendSymbol:K.drawRectangle});I.areaspline=xa;ba.column=D(ea,{borderColor:"#FFFFFF",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},softThreshold:!1,startFromThreshold:!0,stickyTracking:!1, -tooltip:{distance:6},threshold:0});xa=na(R,{type:"column",pointAttrToOptions:{stroke:"borderColor",fill:"color",r:"borderRadius"},cropShoulder:0,directTouch:!0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){R.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h=0;b.grouping===!1?h=1:o(a.chart.series,function(b){var c= -b.options,e=b.yAxis,i;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===B&&(g[f]=h++),i=g[f]):c.grouping!==!1&&(i=h++),b.columnIndex=i});var i=E(P(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),k=i*b.groupPadding,j=(i-2*k)/h,b=E(b.maxPointWidth||c.len,p(b.pointWidth,j*(1-2*b.pointPadding)));a.columnMetrics={width:b,offset:(j-b)/2+(k+((a.columnIndex||0)+(e?1:0))*j-i/2)*(e?-1:1)};return a.columnMetrics},crispCol:function(a, -b,c,d){var e=this.chart,f=this.borderWidth,g=-(f%2?0.5:0),f=f%2?0.5:1;e.inverted&&e.renderer.isVML&&(f+=1);c=Math.round(a+c)+g;a=Math.round(a)+g;c-=a;d=Math.round(b+d)+f;g=P(b)<=0.5&&d>0.5;b=Math.round(b)+f;d-=b;g&&(b-=1,d+=1);return{x:a,y:b,width:c,height:d}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=p(c.borderWidth,a.closestPointRange*a.xAxis.transA<2?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=p(c.minPointLength,5),h=a.getColumnMetrics(),i=h.width, -k=a.barW=s(i,1+2*d),j=a.pointXOffset=h.offset;b.inverted&&(f-=0.5);c.pointPadding&&(k=ua(k));R.prototype.translate.apply(a);o(a.points,function(c){var d=E(p(c.yBottom,f),9E4),h=999+P(d),h=E(s(-h,c.plotY),e.len+h),o=c.plotX+j,q=k,v=E(h,d),y,u=s(h,d)-v;P(u)<g&&g&&(u=g,y=!e.reversed&&!c.negative||e.reversed&&c.negative,v=P(v-f)>g?d-g:f-(y?g:0));c.barX=o;c.pointWidth=i;c.tooltipPos=b.inverted?[e.len+e.pos-b.plotLeft-h,a.xAxis.len-o-q/2,u]:[o+q/2,h+e.pos-b.plotTop,u];c.shapeType="rect";c.shapeArgs=a.crispCol(o, -v,q,u)})},getSymbol:va,drawLegendSymbol:K.drawRectangle,drawGraph:va,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||250,f,g;o(a.points,function(h){var i=h.plotY,k=h.graphic;if(i!==B&&!isNaN(i)&&h.y!==null)f=h.shapeArgs,i=q(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=h.pointAttr[h.selected?"select":""]||a.pointAttr[""],k?(Pa(k),k.attr(i).attr(g)[b.pointCount<e?"animate":"attr"](D(f))):h.graphic=d[h.shapeType](f).attr(i).attr(g).add(h.group||a.group).shadow(c.shadow, -null,c.stacking&&!c.borderRadius);else if(k)h.graphic=k.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(da)a?(e.scaleY=0.001,a=E(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0}); -R.prototype.remove.apply(a,arguments)}});I.column=xa;ba.bar=D(ba.column);sa=na(xa,{type:"bar",inverted:!0});I.bar=sa;ba.scatter=D(ea,{lineWidth:0,marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px;"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}});sa=na(R,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1, -kdDimensions:2,drawGraph:function(){this.options.lineWidth&&R.prototype.drawGraph.call(this)}});I.scatter=sa;ba.pie=D(ea,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.y===null?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});ea={type:"pie", -isCartesian:!1,pointClass:na(Ia,{init:function(){Ia.prototype.init.apply(this,arguments);var a=this,b;a.name=p(a.name,"Slice");b=function(b){a.slice(b.type==="select")};N(a,"select",b);N(a,"unselect",b);return a},setVisible:function(a,b){var c=this,d=c.series,e=d.chart,f=d.options.ignoreHiddenPoint,b=p(b,f);if(a!==c.visible){c.visible=c.options.visible=a=a===B?!c.visible:a;d.options.data[qa(c,d.data)]=c.options;o(["graphic","dataLabel","connector","shadowGroup"],function(b){if(c[b])c[b][a?"show": -"hide"](!0)});c.legendItem&&e.legend.colorizeItem(c,a);!a&&c.state==="hover"&&c.setState("");if(f)d.isDirty=!0;b&&e.redraw()}},slice:function(a,b,c){var d=this.series;Va(c,d.chart);p(b,!0);this.sliced=this.options.sliced=a=q(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.sliced||!this.visible? -[]:this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)o(c,function(a){var c=a.graphic,g=a.shapeArgs;c&&(c.attr({r:a.startR||b.center[3]/2,start:d,end:d}),c.animate({r:g.r, -start:g.start,end:g.end},b.options.animation))}),b.animate=null},updateTotals:function(){var a,b=0,c=this.points,d=c.length,e,f=this.options.ignoreHiddenPoint;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0&&(e.visible||!f)?e.y/b*100:0,e.total=b},generatePoints:function(){R.prototype.generatePoints.call(this);this.updateTotals()},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle|| -0,k=this.startAngleRad=pa/180*(i-90),i=(this.endAngleRad=pa/180*(p(c.endAngle,i+360)-90))-k,j=this.points,m=c.dataLabels.distance,c=c.ignoreHiddenPoint,l,n=j.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=V.asin(E((b-a[1])/(a[2]/2+m),1));return a[0]+(c?-1:1)*T(h)*(a[2]/2+m)};for(l=0;l<n;l++){o=j[l];f=k+b*i;if(!c||o.visible)b+=o.percentage/100;g=k+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:A(f*1E3)/1E3,end:A(g*1E3)/1E3};h=(g+f)/2;h>1.5*pa? -h-=2*pa:h<-pa/2&&(h+=2*pa);o.slicedTranslation={translateX:A(T(h)*d),translateY:A(aa(h)*d)};f=T(h)*a[2]/2;g=aa(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-pa/2||h>pa/2?1:0;o.angle=h;e=E(e,m/2);o.labelPos=[a[0]+f+T(h)*m,a[1]+g+aa(h)*m,a[0]+f+T(h)*e,a[1]+g+aa(h)*e,a[0]+f,a[1]+g,m<0?"center":o.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g,h,i;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);o(a.points, -function(k){if(k.y!==null){d=k.graphic;h=k.shapeArgs;f=k.shadowGroup;g=k.pointAttr[k.selected?"select":""];if(!g.stroke)g.stroke=g.fill;if(e&&!f)f=k.shadowGroup=b.g("shadow").add(a.shadowGroup);c=k.sliced?k.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);if(d)d.setRadialReference(a.center).attr(g).animate(v(h,c));else{i={"stroke-linejoin":"round"};if(!k.visible)i.visibility="hidden";k.graphic=d=b[k.shapeType](h).setRadialReference(a.center).attr(g).attr(i).attr(c).add(a.group).shadow(e, -f)}}})},searchPoint:va,sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:K.drawRectangle,getCenter:Cb.getCenter,getSymbol:va};ea=na(R,ea);I.pie=ea;R.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h=a.hasRendered||0,i,k,j=a.chart.renderer;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),k=a.plotGroup("dataLabelsGroup","data-labels",d.defer?"hidden":"visible",d.zIndex|| -6),p(d.defer,!0)&&(k.attr({opacity:+h}),h||N(a,"afterAnimate",function(){a.visible&&k.show();k[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,o(e,function(e){var h,n=e.dataLabel,o,r,s=e.connector,u=!0,x,w={};f=e.dlOptions||e.options&&e.options.dataLabels;h=p(f&&f.enabled,g.enabled)&&e.y!==null;if(n&&!h)e.dataLabel=n.destroy();else if(h){d=D(g,f);x=d.style;h=d.rotation;o=e.getLabelConfig();i=d.format?La(d.format,o):d.formatter.call(o,d);x.color=p(d.color,x.color,a.color,"black"); -if(n)if(q(i))n.attr({text:i}),u=!1;else{if(e.dataLabel=n=n.destroy(),s)e.connector=s.destroy()}else if(q(i)){n={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:h,padding:d.padding,zIndex:1};if(x.color==="contrast")w.color=d.inside||d.distance<0||b.stacking?j.getContrast(e.color||a.color):"#000000";if(c)w.cursor=c;for(r in n)n[r]===B&&delete n[r];n=e.dataLabel=j[h?"text":"label"](i,0,-9999,d.shape,null,null,d.useHTML).attr(n).css(v(x,w)).add(k).shadow(d.shadow)}n&& -a.alignDataLabel(e,n,d,null,u)}})};R.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=p(a.plotX,-9999),i=p(a.plotY,-9999),k=b.getBBox(),j=f.renderer.fontMetrics(c.style.fontSize).b,m=this.visible&&(a.series.forceDL||f.isInsidePlot(h,A(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g));if(m)d=v({x:g?f.plotWidth-i:h,y:A(g?f.plotHeight-h:i),width:0,height:0},d),v(c,{width:k.width,height:k.height}),c.rotation?(a=f.renderer.rotCorr(j,c.rotation),b[e?"attr":"animate"]({x:d.x+ -c.x+d.width/2+a.x,y:d.y+c.y+d.height/2}).attr({align:c.align})):(b.align(c,null,d),g=b.alignAttr,p(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,k,d,e):p(c.crop,!0)&&(m=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+k.width,g.y+k.height)),c.shape&&b.attr({anchorX:a.plotX,anchorY:a.plotY}));if(!m)Pa(b),b.attr({y:-9999}),b.placed=!1};R.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,k,j,m=a.box?0:a.padding||0;k=c.x+m;if(k<0)h==="right"?b.align= -"left":b.x=-k,j=!0;k=c.x+d.width-m;if(k>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-k,j=!0;k=c.y+m;if(k<0)i==="bottom"?b.verticalAlign="top":b.y=-k,j=!0;k=c.y+d.height-m;if(k>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-k,j=!0;if(j)a.placed=!f,a.align(b,null,e)};if(I.pie)I.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=p(e.connectorPadding,10),g=p(e.connectorWidth,1),h=d.plotWidth,i=d.plotHeight,k,j,m=p(e.softConnector, -!0),l=e.distance,n=a.center,q=n[2]/2,r=n[1],v=l>0,u,x,w,B=[[],[]],z,C,D,F,J,G=[0,0,0,0],M=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){R.prototype.drawDataLabels.apply(a);o(b,function(a){a.dataLabel&&a.visible&&B[a.half].push(a)});for(F=2;F--;){var H=[],N=[],I=B[F],L=I.length,K;if(L){a.sortByAngle(I,F-0.5);for(J=b=0;!b&&I[J];)b=I[J]&&I[J].dataLabel&&(I[J].dataLabel.getBBox().height||21),J++;if(l>0){x=E(r+q+l,d.plotHeight);for(J=s(0,r-q-l);J<=x;J+=b)H.push(J);x=H.length; -if(L>x){c=[].concat(I);c.sort(M);for(J=L;J--;)c[J].rank=J;for(J=L;J--;)I[J].rank>=x&&I.splice(J,1);L=I.length}for(J=0;J<L;J++){c=I[J];w=c.labelPos;c=9999;var Q,O;for(O=0;O<x;O++)Q=P(H[O]-w[1]),Q<c&&(c=Q,K=O);if(K<J&&H[J]!==null)K=J;else for(x<L-J+K&&H[J]!==null&&(K=x-L+J);H[K]===null;)K++;N.push({i:K,y:H[K]});H[K]=null}N.sort(M)}for(J=0;J<L;J++){c=I[J];w=c.labelPos;u=c.dataLabel;D=c.visible===!1?"hidden":"inherit";c=w[1];if(l>0){if(x=N.pop(),K=x.i,C=x.y,c>C&&H[K+1]!==null||c<C&&H[K-1]!==null)C=E(s(0, -c),d.plotHeight)}else C=c;z=e.justify?n[0]+(F?-1:1)*(q+l):a.getX(C===r-q-l||C===r+q+l?c:C,F);u._attr={visibility:D,align:w[6]};u._pos={x:z+e.x+({left:f,right:-f}[w[6]]||0),y:C+e.y-10};u.connX=z;u.connY=C;if(this.options.size===null)x=u.width,z-x<f?G[3]=s(A(x-z+f),G[3]):z+x>h-f&&(G[1]=s(A(z+x-h+f),G[1])),C-b/2<0?G[0]=s(A(-C+b/2),G[0]):C+b/2>i&&(G[2]=s(A(C+b/2-i),G[2]))}}}if(Da(G)===0||this.verifyDataLabelOverflow(G))this.placeDataLabels(),v&&g&&o(this.points,function(b){k=b.connector;w=b.labelPos; -if((u=b.dataLabel)&&u._pos&&b.visible)D=u._attr.visibility,z=u.connX,C=u.connY,j=m?["M",z+(w[6]==="left"?5:-5),C,"C",z,C,2*w[2]-w[4],2*w[3]-w[5],w[2],w[3],"L",w[4],w[5]]:["M",z+(w[6]==="left"?5:-5),C,"L",w[2],w[3],"L",w[4],w[5]],k?(k.animate({d:j}),k.attr("visibility",D)):b.connector=k=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:D}).add(a.dataLabelsGroup);else if(k)b.connector=k.destroy()})}},I.pie.prototype.placeDataLabels=function(){o(this.points, -function(a){var b=a.dataLabel;if(b&&a.visible)(a=b._pos)?(b.attr(b._attr),b[b.moved?"animate":"attr"](a),b.moved=!0):b&&b.attr({y:-9999})})},I.pie.prototype.alignDataLabel=va,I.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c.minSize||80,f=e,g;d[0]!==null?f=s(b[2]-s(a[1],a[3]),e):(f=s(b[2]-a[1]-a[3],e),b[0]+=(a[3]-a[1])/2);d[1]!==null?f=s(E(f,b[2]-s(a[0],a[2])),e):(f=s(E(f,b[2]-a[0]-a[2]),e),b[1]+=(a[0]-a[2])/2);f<b[2]?(b[2]=f,b[3]=Math.min(/%$/.test(c.innerSize|| -0)?f*parseFloat(c.innerSize||0)/100:parseFloat(c.innerSize||0),f),this.translate(b),o(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):g=!0;return g};if(I.column)I.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart.inverted,g=a.series,h=a.dlBox||a.shapeArgs,i=p(a.below,a.plotY>p(this.translatedThreshold,g.yAxis.len)),k=p(c.inside,!!this.options.stacking);if(h){d=D(h);if(d.y<0)d.height+=d.y,d.y=0;h=d.y+d.height-g.yAxis.len; -h>0&&(d.height-=h);f&&(d={x:g.yAxis.len-d.y-d.height,y:g.xAxis.len-d.x-d.width,width:d.height,height:d.width});if(!k)f?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0)}c.align=p(c.align,!f||k?"center":i?"right":"left");c.verticalAlign=p(c.verticalAlign,f||k?"middle":i?"top":"bottom");R.prototype.alignDataLabel.call(this,a,b,c,d,e)};(function(a){var b=a.Chart,c=a.each,d=a.pick,e=a.addEvent;b.prototype.callbacks.push(function(a){function b(){var e=[];c(a.series,function(a){var b=a.options.dataLabels, -f=a.dataLabelCollections||["dataLabel"];(b.enabled||a._hasPointLabels)&&!b.allowOverlap&&a.visible&&c(f,function(b){c(a.points,function(a){if(a[b])a[b].labelrank=d(a.labelrank,a.shapeArgs&&a.shapeArgs.height),e.push(a[b])})})});a.hideOverlappingLabels(e)}b();e(a,"redraw",b)});b.prototype.hideOverlappingLabels=function(a){var b=a.length,d,e,k,j,m,l,n;for(e=0;e<b;e++)if(d=a[e])d.oldOpacity=d.opacity,d.newOpacity=1;a.sort(function(a,b){return(b.labelrank||0)-(a.labelrank||0)});for(e=0;e<b;e++){k=a[e]; -for(d=e+1;d<b;++d)if(j=a[d],k&&j&&k.placed&&j.placed&&k.newOpacity!==0&&j.newOpacity!==0&&(m=k.alignAttr,l=j.alignAttr,n=2*(k.box?0:k.padding),m=!(l.x>m.x+(k.width-n)||l.x+(j.width-n)<m.x||l.y>m.y+(k.height-n)||l.y+(j.height-n)<m.y)))(k.labelrank<j.labelrank?k:j).newOpacity=0}c(a,function(a){var b,c;if(a){c=a.newOpacity;if(a.oldOpacity!==c&&a.placed)c?a.show(!0):b=function(){a.hide()},a.alignAttr.opacity=c,a[a.isOld?"animate":"attr"](a.alignAttr,null,b);a.isOld=!0}})}})(u);ea=u.TrackerMixin={drawTrackerPoint:function(){var a= -this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(a){for(var c=a.target,d;c&&!d;)d=c.point,c=c.parentNode;if(d!==B&&d!==b.hoverPoint)d.onMouseOver(a)};o(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)o(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),db))a[b].on("touchstart",f)}),a._hasTracking=!0}, -drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,k=a.tracker,j=b.cursor,m=j&&{cursor:j},j=a.singlePoints,l,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},p="rgba(192,192,192,"+(da?1.0E-4:0.002)+")";if(e&&!c)for(l=e+1;l--;)d[l]==="M"&&d.splice(l+1,0,d[l+1]-i,d[l+2],"L"),(l&&d[l]==="M"||l===e)&&d.splice(l,0,"L",d[l-2]+i,d[l-1]);for(l=0;l<j.length;l++)e=j[l],d.push("M",e.plotX- -i,e.plotY,"L",e.plotX+i,e.plotY);k?k.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:p,fill:c?p:"none","stroke-width":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),o([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",n).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(m);if(db)a.on("touchstart",n)}))}};if(I.column)xa.prototype.drawTracker=ea.drawTrackerPoint;if(I.pie)I.pie.prototype.drawTracker= -ea.drawTrackerPoint;if(I.scatter)sa.prototype.drawTracker=ea.drawTrackerPoint;v(pb.prototype,{setItemEvents:function(a,b,c,d,e){var f=this;(c?b:a.legendGroup).on("mouseover",function(){a.setState("hover");b.css(f.options.itemHoverStyle)}).on("mouseout",function(){b.css(a.visible?d:e);a.setState()}).on("click",function(b){var c=function(){a.setVisible&&a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):H(a,"legendItemClick",b,c)})},createCheckboxForItem:function(a){a.checkbox= -$("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);N(a.checkbox,"click",function(b){H(a.series||a,"checkboxClick",{checked:b.target.checked,item:a},function(){a.select()})})}});O.legend.itemStyle.cursor="pointer";v(hb.prototype,{showResetZoom:function(){var a=this,b=O.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo==="chart"?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null, -function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;H(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?o(this.axes,function(a){b=a.zoom()}):o(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b=e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom(); -else if(!d&&Z(e))this.resetZoomButton=e.destroy();b&&this.redraw(p(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&o(d,function(a){a.setState()});o(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],k=(h.pointRange||0)/2,j=h.getExtremes(),m=h.toValue(i-d,!0)+k,k=h.toValue(i+c[b?"plotWidth":"plotHeight"]-d,!0)-k,i=i>d;if(h.series.length&&(i||m>E(j.dataMin,j.min))&& -(!i||k<s(j.dataMax,j.max)))h.setExtremes(m,k,!1,!1,{trigger:"pan"}),e=!0;c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);M(c.container,{cursor:"move"})}});v(Ia.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=p(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]=c.options;c.setState(a&&"select");b||o(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a, -d.data)]=a.options,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(a,b){var c=this.series,d=c.chart,e=d.tooltip,f=d.hoverPoint;if(d.hoverSeries!==c)c.onMouseOver();if(f&&f!==this)f.onMouseOut();if(this.series&&(this.firePointEvent("mouseOver"),e&&(!e.shared||c.noSharedTooltip)&&e.refresh(this,a),this.setState("hover"),!b))d.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;this.firePointEvent("mouseOut");if(!b||qa(this,b)===-1)this.setState(),a.hoverPoint= -null},importEvents:function(){if(!this.hasImportedEvents){var a=D(this.series.options.point,this.options).events,b;this.events=a;for(b in a)N(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=S(this.plotX),d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],k=i&&i.enabled===!1,j=e.stateMarkerGraphic,m=this.marker||{},l=e.chart,n=e.halo,o,a=a||"";o=this.pointAttr[a]||e.pointAttr[a];if(!(a===this.state&&!b||this.selected&& -a!=="select"||f[a]&&f[a].enabled===!1||a&&(k||h&&i.enabled===!1)||a&&m.states&&m.states[a]&&m.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&o.r,this.graphic.attr(D(o,g?{x:c-g,y:d-g,width:2*g,height:2*g}:{})),j&&j.hide();else{if(a&&i)if(g=i.radius,m=m.symbol||e.symbol,j&&j.currentSymbol!==m&&(j=j.destroy()),j)j[b?"animate":"attr"]({x:c-g,y:d-g});else if(m)e.stateMarkerGraphic=j=l.renderer.symbol(m,c-g,d-g,2*g,2*g).attr(o).add(e.markerGroup),j.currentSymbol=m;if(j)j[a&&l.isInsidePlot(c, -d,l.inverted)?"show":"hide"](),j.element.point=this}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=l.renderer.path().add(l.seriesGroup);n.attr(v({fill:this.color||e.color,"fill-opacity":c.opacity},c.attributes))[b?"animate":"attr"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted,f=Math.floor(this.plotX);return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:f)-a,d.translateY+(e?b.xAxis.len- -f:this.plotY)-a,a*2,a*2)}});v(R.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&H(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;b.hoverSeries=null;if(d)d.onMouseOut();this&&a.events.mouseOut&&H(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState()},setState:function(a){var b=this.options, -c=this.graph,d=b.states,e=b.lineWidth,b=0,a=a||"";if(this.state!==a&&(this.state=a,!(d[a]&&d[a].enabled===!1)&&(a&&(e=d[a].lineWidth||e+(d[a].lineWidthPlus||0)),c&&!c.dashstyle))){a={"stroke-width":e};for(c.attr(a);this["zoneGraph"+b];)this["zoneGraph"+b].attr(a),b+=1}},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===B?!h:a)?"show":"hide";o(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()}); -if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&o(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});o(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();H(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===B?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;H(this,a?"select":"unselect")}, -drawTracker:ea.drawTrackerGraph});v(u,{Color:ia,Point:Ia,Tick:Wa,Renderer:cb,SVGElement:Q,SVGRenderer:Ba,arrayMin:Sa,arrayMax:Da,charts:W,dateFormat:Ra,error:Y,format:La,pathAnim:void 0,getOptions:function(){return O},hasBidiBug:Qb,isTouchDevice:Mb,setOptions:function(a){O=D(!0,O,a);Fb();return O},addEvent:N,removeEvent:U,createElement:$,discardElement:Ua,css:M,each:o,map:Ha,merge:D,splat:ta,stableSort:jb,extendClass:na,pInt:F,svg:da,canvas:ha,vml:!da&&!ha,product:"Highcharts",version:"4.2.1"});return u}); diff --git a/platforms/android/assets/www/lib/highcharts/highcharts.src.js b/platforms/android/assets/www/lib/highcharts/highcharts.src.js deleted file mode 100644 index 3bd4bf81..00000000 --- a/platforms/android/assets/www/lib/highcharts/highcharts.src.js +++ /dev/null @@ -1,19265 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (root, factory) { - if (typeof module === 'object' && module.exports) { - module.exports = root.document ? - factory(root) : - factory; - } else { - root.Highcharts = factory(root); - } -}(typeof window !== 'undefined' ? window : this, function (win) { // eslint-disable-line no-undef -// encapsulated variables - var UNDEFINED, - doc = win.document, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathCeil = math.ceil, - mathMax = math.max, - mathMin = math.min, - mathAbs = math.abs, - mathCos = math.cos, - mathSin = math.sin, - mathPI = math.PI, - deg2rad = mathPI * 2 / 360, - - - // some variables - userAgent = (win.navigator && win.navigator.userAgent) || '', - isOpera = win.opera, - isMS = /(msie|trident|edge)/i.test(userAgent) && !isOpera, - docMode8 = doc && doc.documentMode === 8, - isWebKit = !isMS && /AppleWebKit/.test(userAgent), - isFirefox = /Firefox/.test(userAgent), - isTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent), - SVG_NS = 'http://www.w3.org/2000/svg', - hasSVG = doc && doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, - hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38 - useCanVG = doc && !hasSVG && !isMS && !!doc.createElement('canvas').getContext, - Renderer, - hasTouch, - symbolSizes = {}, - idCounter = 0, - garbageBin, - defaultOptions, - dateFormat, // function - pathAnim, - timeUnits, - noop = function () {}, - charts = [], - chartCount = 0, - PRODUCT = 'Highcharts', - VERSION = '4.2.1', - - // some constants for frequently used strings - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - PREFIX = 'highcharts-', - VISIBLE = 'visible', - PX = 'px', - NONE = 'none', - M = 'M', - L = 'L', - numRegex = /^[0-9]+$/, - NORMAL_STATE = '', - HOVER_STATE = 'hover', - SELECT_STATE = 'select', - marginNames = ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - - // Object for extending Axis - AxisPlotLineOrBandExtension, - - // constants for attributes - STROKE_WIDTH = 'stroke-width', - - // time methods, changed based on whether or not UTC is used - Date, // Allow using a different Date class - makeTime, - timezoneOffset, - getTimezoneOffset, - getMinutes, - getHours, - getDay, - getDate, - getMonth, - getFullYear, - setMilliseconds, - setSeconds, - setMinutes, - setHours, - setDate, - setMonth, - setFullYear, - - - // lookup over the types and the associated classes - seriesTypes = {}, - Highcharts; - - /** - * Provide error messages for debugging, with links to online explanation - */ - function error(code, stop) { - var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; - if (stop) { - throw new Error(msg); - } - // else ... - if (win.console) { - console.log(msg); // eslint-disable-line no-console - } - } - - // The Highcharts namespace - Highcharts = win.Highcharts ? error(16, true) : { win: win }; - - Highcharts.seriesTypes = seriesTypes; - var timers = [], - getStyle, - - // Previous adapter functions - inArray, - each, - grep, - offset, - map, - addEvent, - removeEvent, - fireEvent, - animate, - stop; - - /** - * An animator object. One instance applies to one property (attribute or style prop) - * on one element. - * - * @param {object} elem The element to animate. May be a DOM element or a Highcharts SVGElement wrapper. - * @param {object} options Animation options, including duration, easing, step and complete. - * @param {object} prop The property to animate. - */ - function Fx(elem, options, prop) { - this.options = options; - this.elem = elem; - this.prop = prop; - } - Fx.prototype = { - - /** - * Animating a path definition on SVGElement - * @returns {undefined} - */ - dSetter: function () { - var start = this.paths[0], - end = this.paths[1], - ret = [], - now = this.now, - i = start.length, - startVal; - - if (now === 1) { // land on the final path without adjustment points appended in the ends - ret = this.toD; - - } else if (i === end.length && now < 1) { - while (i--) { - startVal = parseFloat(start[i]); - ret[i] = - isNaN(startVal) ? // a letter instruction like M or L - start[i] : - now * (parseFloat(end[i] - startVal)) + startVal; - - } - } else { // if animation is finished or length not matching, land on right value - ret = end; - } - this.elem.attr('d', ret); - }, - - /** - * Update the element with the current animation step - * @returns {undefined} - */ - update: function () { - var elem = this.elem, - prop = this.prop, // if destroyed, it is null - now = this.now, - step = this.options.step; - - // Animation setter defined from outside - if (this[prop + 'Setter']) { - this[prop + 'Setter'](); - - // Other animations on SVGElement - } else if (elem.attr) { - if (elem.element) { - elem.attr(prop, now); - } - - // HTML styles, raw HTML content like container size - } else { - elem.style[prop] = now + this.unit; - } - - if (step) { - step.call(elem, now, this); - } - - }, - - /** - * Run an animation - */ - run: function (from, to, unit) { - var self = this, - timer = function (gotoEnd) { - return timer.stopped ? false : self.step(gotoEnd); - }, - i; - - this.startTime = +new Date(); - this.start = from; - this.end = to; - this.unit = unit; - this.now = this.start; - this.pos = 0; - - timer.elem = this.elem; - - if (timer() && timers.push(timer) === 1) { - timer.timerId = setInterval(function () { - - for (i = 0; i < timers.length; i++) { - if (!timers[i]()) { - timers.splice(i--, 1); - } - } - - if (!timers.length) { - clearInterval(timer.timerId); - } - }, 13); - } - }, - - /** - * Run a single step in the animation - * @param {Boolean} gotoEnd Whether to go to then endpoint of the animation after abort - * @returns {Boolean} True if animation continues - */ - step: function (gotoEnd) { - var t = +new Date(), - ret, - done, - options = this.options, - elem = this.elem, - complete = options.complete, - duration = options.duration, - curAnim = options.curAnim, - i; - - if (elem.attr && !elem.element) { // #2616, element including flag is destroyed - ret = false; - - } else if (gotoEnd || t >= duration + this.startTime) { - this.now = this.end; - this.pos = 1; - this.update(); - - curAnim[this.prop] = true; - - done = true; - for (i in curAnim) { - if (curAnim[i] !== true) { - done = false; - } - } - - if (done && complete) { - complete.call(elem); - } - ret = false; - - } else { - this.pos = options.easing((t - this.startTime) / duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - ret = true; - } - return ret; - }, - - /** - * Prepare start and end values so that the path can be animated one to one - */ - initPath: function (elem, fromD, toD) { - fromD = fromD || ''; - var shift = elem.shift, - bezier = fromD.indexOf('C') > -1, - numParams = bezier ? 7 : 3, - endLength, - slice, - i, - start = fromD.split(' '), - end = [].concat(toD), // copy - startBaseLine, - endBaseLine, - sixify = function (arr) { // in splines make move points have six parameters like bezier curves - i = arr.length; - while (i--) { - if (arr[i] === M) { - arr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]); - } - } - }; - - if (bezier) { - sixify(start); - sixify(end); - } - - // pull out the base lines before padding - if (elem.isArea) { - startBaseLine = start.splice(start.length - 6, 6); - endBaseLine = end.splice(end.length - 6, 6); - } - - // if shifting points, prepend a dummy point to the end path - if (shift <= end.length / numParams && start.length === end.length) { - while (shift--) { - end = [].concat(end).splice(0, numParams).concat(end); - } - } - elem.shift = 0; // reset for following animations - - // copy and append last point until the length matches the end length - if (start.length) { - endLength = end.length; - while (start.length < endLength) { - - //bezier && sixify(start); - slice = [].concat(start).splice(start.length - numParams, numParams); - if (bezier) { // disable first control point - slice[numParams - 6] = slice[numParams - 2]; - slice[numParams - 5] = slice[numParams - 1]; - } - start = start.concat(slice); - } - } - - if (startBaseLine) { // append the base lines for areas - start = start.concat(startBaseLine); - end = end.concat(endBaseLine); - } - return [start, end]; - } - }; // End of Fx prototype - - - /** - * Extend an object with the members of another - * @param {Object} a The object to be extended - * @param {Object} b The object to add to the first one - */ - var extend = Highcharts.extend = function (a, b) { - var n; - if (!a) { - a = {}; - } - for (n in b) { - a[n] = b[n]; - } - return a; - }; - - /** - * Deep merge two or more objects and return a third object. If the first argument is - * true, the contents of the second object is copied into the first object. - * Previously this function redirected to jQuery.extend(true), but this had two limitations. - * First, it deep merged arrays, which lead to workarounds in Highcharts. Second, - * it copied properties from extended prototypes. - */ - function merge() { - var i, - args = arguments, - len, - ret = {}, - doCopy = function (copy, original) { - var value, key; - - // An object is replacing a primitive - if (typeof copy !== 'object') { - copy = {}; - } - - for (key in original) { - if (original.hasOwnProperty(key)) { - value = original[key]; - - // Copy the contents of objects, but not arrays or DOM nodes - if (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]' && - key !== 'renderTo' && typeof value.nodeType !== 'number') { - copy[key] = doCopy(copy[key] || {}, value); - - // Primitives and arrays are copied over directly - } else { - copy[key] = original[key]; - } - } - } - return copy; - }; - - // If first argument is true, copy into the existing object. Used in setOptions. - if (args[0] === true) { - ret = args[1]; - args = Array.prototype.slice.call(args, 2); - } - - // For each argument, extend the return - len = args.length; - for (i = 0; i < len; i++) { - ret = doCopy(ret, args[i]); - } - - return ret; - } - - /** - * Shortcut for parseInt - * @param {Object} s - * @param {Number} mag Magnitude - */ - function pInt(s, mag) { - return parseInt(s, mag || 10); - } - - /** - * Check for string - * @param {Object} s - */ - function isString(s) { - return typeof s === 'string'; - } - - /** - * Check for object - * @param {Object} obj - */ - function isObject(obj) { - return obj && typeof obj === 'object'; - } - - /** - * Check for array - * @param {Object} obj - */ - function isArray(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - } - - /** - * Check for number - * @param {Object} n - */ - function isNumber(n) { - return typeof n === 'number'; - } - - function log2lin(num) { - return math.log(num) / math.LN10; - } - function lin2log(num) { - return math.pow(10, num); - } - - /** - * Remove last occurence of an item from an array - * @param {Array} arr - * @param {Mixed} item - */ - function erase(arr, item) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - arr.splice(i, 1); - break; - } - } - //return arr; - } - - /** - * Returns true if the object is not null or undefined. - * @param {Object} obj - */ - function defined(obj) { - return obj !== UNDEFINED && obj !== null; - } - - /** - * Set or get an attribute or an object of attributes. Can't use jQuery attr because - * it attempts to set expando properties on the SVG element, which is not allowed. - * - * @param {Object} elem The DOM element to receive the attribute(s) - * @param {String|Object} prop The property or an abject of key-value pairs - * @param {String} value The value if a single property is set - */ - function attr(elem, prop, value) { - var key, - ret; - - // if the prop is a string - if (isString(prop)) { - // set the value - if (defined(value)) { - elem.setAttribute(prop, value); - - // get the value - } else if (elem && elem.getAttribute) { // elem not defined when printing pie demo... - ret = elem.getAttribute(prop); - } - - // else if prop is defined, it is a hash of key/value pairs - } else if (defined(prop) && isObject(prop)) { - for (key in prop) { - elem.setAttribute(key, prop[key]); - } - } - return ret; - } - /** - * Check if an element is an array, and if not, make it into an array. - */ - function splat(obj) { - return isArray(obj) ? obj : [obj]; - } - - /** - * Set a timeout if the delay is given, otherwise perform the function synchronously - * @param {Function} fn The function to perform - * @param {Number} delay Delay in milliseconds - * @param {Ojbect} context The context - * @returns {Nubmer} An identifier for the timeout - */ - function syncTimeout(fn, delay, context) { - if (delay) { - return setTimeout(fn, delay, context); - } - fn.call(0, context); - } - - - /** - * Return the first value that is defined. - */ - var pick = Highcharts.pick = function () { - var args = arguments, - i, - arg, - length = args.length; - for (i = 0; i < length; i++) { - arg = args[i]; - if (arg !== UNDEFINED && arg !== null) { - return arg; - } - } - }; - - /** - * Set CSS on a given element - * @param {Object} el - * @param {Object} styles Style object with camel case property names - */ - function css(el, styles) { - if (isMS && !hasSVG) { // #2686 - if (styles && styles.opacity !== UNDEFINED) { - styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; - } - } - extend(el.style, styles); - } - - /** - * Utility function to create element with attributes and styles - * @param {Object} tag - * @param {Object} attribs - * @param {Object} styles - * @param {Object} parent - * @param {Object} nopad - */ - function createElement(tag, attribs, styles, parent, nopad) { - var el = doc.createElement(tag); - if (attribs) { - extend(el, attribs); - } - if (nopad) { - css(el, { padding: 0, border: 'none', margin: 0 }); - } - if (styles) { - css(el, styles); - } - if (parent) { - parent.appendChild(el); - } - return el; - } - - /** - * Extend a prototyped class by new members - * @param {Object} parent - * @param {Object} members - */ - function extendClass(Parent, members) { - var object = function () { - }; - object.prototype = new Parent(); - extend(object.prototype, members); - return object; - } - - /** - * Pad a string to a given length by adding 0 to the beginning - * @param {Number} number - * @param {Number} length - */ - function pad(number, length) { - return new Array((length || 2) + 1 - String(number).length).join(0) + number; - } - - /** - * Return a length based on either the integer value, or a percentage of a base. - */ - function relativeLength(value, base) { - return (/%$/).test(value) ? base * parseFloat(value) / 100 : parseFloat(value); - } - - /** - * Wrap a method with extended functionality, preserving the original function - * @param {Object} obj The context object that the method belongs to - * @param {String} method The name of the method to extend - * @param {Function} func A wrapper function callback. This function is called with the same arguments - * as the original function, except that the original function is unshifted and passed as the first - * argument. - */ - var wrap = Highcharts.wrap = function (obj, method, func) { - var proceed = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - args.unshift(proceed); - return func.apply(this, args); - }; - }; - - - function getTZOffset(timestamp) { - return ((getTimezoneOffset && getTimezoneOffset(timestamp)) || timezoneOffset || 0) * 60000; - } - - /** - * Based on http://www.php.net/manual/en/function.strftime.php - * @param {String} format - * @param {Number} timestamp - * @param {Boolean} capitalize - */ - dateFormat = function (format, timestamp, capitalize) { - if (!defined(timestamp) || isNaN(timestamp)) { - return defaultOptions.lang.invalidDate || ''; - } - format = pick(format, '%Y-%m-%d %H:%M:%S'); - - var date = new Date(timestamp - getTZOffset(timestamp)), - key, // used in for constuct below - // get the basic time values - hours = date[getHours](), - day = date[getDay](), - dayOfMonth = date[getDate](), - month = date[getMonth](), - fullYear = date[getFullYear](), - lang = defaultOptions.lang, - langWeekdays = lang.weekdays, - - // List all format keys. Custom formats can be added from the outside. - replacements = extend({ - - // Day - 'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon' - 'A': langWeekdays[day], // Long weekday, like 'Monday' - 'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31 - 'e': dayOfMonth, // Day of the month, 1 through 31 - 'w': day, - - // Week (none implemented) - //'W': weekNumber(), - - // Month - 'b': lang.shortMonths[month], // Short month, like 'Jan' - 'B': lang.months[month], // Long month, like 'January' - 'm': pad(month + 1), // Two digit month number, 01 through 12 - - // Year - 'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009 - 'Y': fullYear, // Four digits year, like 2009 - - // Time - 'H': pad(hours), // Two digits hours in 24h format, 00 through 23 - 'k': hours, // Hours in 24h format, 0 through 23 - 'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11 - 'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12 - 'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59 - 'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM - 'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM - 'S': pad(date.getSeconds()), // Two digits seconds, 00 through 59 - 'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby) - }, Highcharts.dateFormats); - - - // do the replaces - for (key in replacements) { - while (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster - format = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]); - } - } - - // Optionally capitalize the string and return - return capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format; - }; - - /** - * Format a single variable. Similar to sprintf, without the % prefix. - */ - function formatSingle(format, val) { - var floatRegex = /f$/, - decRegex = /\.([0-9])/, - lang = defaultOptions.lang, - decimals; - - if (floatRegex.test(format)) { // float - decimals = format.match(decRegex); - decimals = decimals ? decimals[1] : -1; - if (val !== null) { - val = Highcharts.numberFormat( - val, - decimals, - lang.decimalPoint, - format.indexOf(',') > -1 ? lang.thousandsSep : '' - ); - } - } else { - val = dateFormat(format, val); - } - return val; - } - - /** - * Format a string according to a subset of the rules of Python's String.format method. - */ - function format(str, ctx) { - var splitter = '{', - isInside = false, - segment, - valueAndFormat, - path, - i, - len, - ret = [], - val, - index; - - while ((index = str.indexOf(splitter)) !== -1) { - - segment = str.slice(0, index); - if (isInside) { // we're on the closing bracket looking back - - valueAndFormat = segment.split(':'); - path = valueAndFormat.shift().split('.'); // get first and leave format - len = path.length; - val = ctx; - - // Assign deeper paths - for (i = 0; i < len; i++) { - val = val[path[i]]; - } - - // Format the replacement - if (valueAndFormat.length) { - val = formatSingle(valueAndFormat.join(':'), val); - } - - // Push the result and advance the cursor - ret.push(val); - - } else { - ret.push(segment); - - } - str = str.slice(index + 1); // the rest - isInside = !isInside; // toggle - splitter = isInside ? '}' : '{'; // now look for next matching bracket - } - ret.push(str); - return ret.join(''); - } - - /** - * Get the magnitude of a number - */ - function getMagnitude(num) { - return math.pow(10, mathFloor(math.log(num) / math.LN10)); - } - - /** - * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5 - * @param {Number} interval - * @param {Array} multiples - * @param {Number} magnitude - * @param {Object} options - */ - function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, preventExceed) { - var normalized, - i, - retInterval = interval; - - // round to a tenfold of 1, 2, 2.5 or 5 - magnitude = pick(magnitude, 1); - normalized = interval / magnitude; - - // multiples for a linear scale - if (!multiples) { - multiples = [1, 2, 2.5, 5, 10]; - - // the allowDecimals option - if (allowDecimals === false) { - if (magnitude === 1) { - multiples = [1, 2, 5, 10]; - } else if (magnitude <= 0.1) { - multiples = [1 / magnitude]; - } - } - } - - // normalize the interval to the nearest multiple - for (i = 0; i < multiples.length; i++) { - retInterval = multiples[i]; - if ((preventExceed && retInterval * magnitude >= interval) || // only allow tick amounts smaller than natural - (!preventExceed && (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2))) { - break; - } - } - - // multiply back to the correct magnitude - retInterval *= magnitude; - - return retInterval; - } - - - /** - * Utility method that sorts an object array and keeping the order of equal items. - * ECMA script standard does not specify the behaviour when items are equal. - */ - function stableSort(arr, sortFunction) { - var length = arr.length, - sortValue, - i; - - // Add index to each item - for (i = 0; i < length; i++) { - arr[i].safeI = i; // stable sort index - } - - arr.sort(function (a, b) { - sortValue = sortFunction(a, b); - return sortValue === 0 ? a.safeI - b.safeI : sortValue; - }); - - // Remove index from items - for (i = 0; i < length; i++) { - delete arr[i].safeI; // stable sort index - } - } - - /** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ - function arrayMin(data) { - var i = data.length, - min = data[0]; - - while (i--) { - if (data[i] < min) { - min = data[i]; - } - } - return min; - } - - /** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ - function arrayMax(data) { - var i = data.length, - max = data[0]; - - while (i--) { - if (data[i] > max) { - max = data[i]; - } - } - return max; - } - - /** - * Utility method that destroys any SVGElement or VMLElement that are properties on the given object. - * It loops all properties and invokes destroy if there is a destroy method. The property is - * then delete'ed. - * @param {Object} The object to destroy properties on - * @param {Object} Exception, do not destroy this property, only delete it. - */ - function destroyObjectProperties(obj, except) { - var n; - for (n in obj) { - // If the object is non-null and destroy is defined - if (obj[n] && obj[n] !== except && obj[n].destroy) { - // Invoke the destroy - obj[n].destroy(); - } - - // Delete the property from the object. - delete obj[n]; - } - } - - - /** - * Discard an element by moving it to the bin and delete - * @param {Object} The HTML node to discard - */ - function discardElement(element) { - // create a garbage bin element, not part of the DOM - if (!garbageBin) { - garbageBin = createElement(DIV); - } - - // move the node and empty bin - if (element) { - garbageBin.appendChild(element); - } - garbageBin.innerHTML = ''; - } - - /** - * Fix JS round off float errors - * @param {Number} num - */ - function correctFloat(num, prec) { - return parseFloat( - num.toPrecision(prec || 14) - ); - } - - /** - * Set the global animation to either a given value, or fall back to the - * given chart's animation option - * @param {Object} animation - * @param {Object} chart - */ - function setAnimation(animation, chart) { - chart.renderer.globalAnimation = pick(animation, chart.animation); - } - - /** - * The time unit lookup - */ - timeUnits = { - millisecond: 1, - second: 1000, - minute: 60000, - hour: 3600000, - day: 24 * 3600000, - week: 7 * 24 * 3600000, - month: 28 * 24 * 3600000, - year: 364 * 24 * 3600000 - }; - - - /** - * Format a number and return a string based on input settings - * @param {Number} number The input number to format - * @param {Number} decimals The amount of decimals - * @param {String} decPoint The decimal point, defaults to the one given in the lang options - * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options - */ - Highcharts.numberFormat = function (number, decimals, decPoint, thousandsSep) { - var lang = defaultOptions.lang, - // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/ - n = +number || 0, - c = decimals === -1 ? - Math.min((n.toString().split('.')[1] || '').length, 20) : // Preserve decimals. Not huge numbers (#3793). - (isNaN(decimals = Math.abs(decimals)) ? 2 : decimals), - d = decPoint === undefined ? lang.decimalPoint : decPoint, - t = thousandsSep === undefined ? lang.thousandsSep : thousandsSep, - s = n < 0 ? '-' : '', - i = String(pInt(n = mathAbs(n).toFixed(c))), - j = i.length > 3 ? i.length % 3 : 0; - - return (s + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + t) + - (c ? d + mathAbs(n - i).toFixed(c).slice(2) : '')); - }; - - /** - * Easing definition - * @param {Number} pos Current position, ranging from 0 to 1 - */ - Math.easeInOutSine = function (pos) { - return -0.5 * (Math.cos(Math.PI * pos) - 1); - }; - - /** - * Internal method to return CSS value for given element and property - */ - getStyle = function (el, prop) { - var style = win.getComputedStyle(el, undefined); - return style && pInt(style.getPropertyValue(prop)); - }; - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray = function (item, arr) { - return arr.indexOf ? arr.indexOf(item) : [].indexOf.call(arr, item); - }; - - /** - * Filter an array - */ - grep = function (elements, callback) { - return [].filter.call(elements, callback); - }; - - /** - * Map an array - */ - map = function (arr, fn) { - var results = [], i = 0, len = arr.length; - - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - - return results; - }; - - /** - * Get the element's offset position, corrected by overflow:auto. - */ - offset = function (el) { - var docElem = doc.documentElement, - box = el.getBoundingClientRect(); - - return { - top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - }; - - /** - * Stop running animation. - * A possible extension to this would be to stop a single property, when - * we want to continue animating others. Then assign the prop to the timer - * in the Fx.run method, and check for the prop here. This would be an improvement - * in all cases where we stop the animation from .attr. Instead of stopping - * everything, we can just stop the actual attributes we're setting. - */ - stop = function (el) { - - var i = timers.length; - - // Remove timers related to this element (#4519) - while (i--) { - if (timers[i].elem === el) { - timers[i].stopped = true; // #4667 - } - } - }; - - /** - * Utility for iterating over an array. - * @param {Array} arr - * @param {Function} fn - */ - each = function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - }; - - /** - * Add an event listener - */ - addEvent = function (el, type, fn) { - - var events = el.hcEvents = el.hcEvents || {}; - - function wrappedFn(e) { - e.target = e.srcElement || win; // #2820 - fn.call(el, e); - } - - // Handle DOM events in modern browsers - if (el.addEventListener) { - el.addEventListener(type, fn, false); - - // Handle old IE implementation - } else if (el.attachEvent) { - - if (!el.hcEventsIE) { - el.hcEventsIE = {}; - } - - // Link wrapped fn with original fn, so we can get this in removeEvent - el.hcEventsIE[fn.toString()] = wrappedFn; - - el.attachEvent('on' + type, wrappedFn); - } - - if (!events[type]) { - events[type] = []; - } - - events[type].push(fn); - }; - - /** - * Remove event added with addEvent - */ - removeEvent = function (el, type, fn) { - - var events, - hcEvents = el.hcEvents, - index; - - function removeOneEvent(type, fn) { - if (el.removeEventListener) { - el.removeEventListener(type, fn, false); - } else if (el.attachEvent) { - fn = el.hcEventsIE[fn.toString()]; - el.detachEvent('on' + type, fn); - } - } - - function removeAllEvents() { - var types, - len, - n; - - if (!el.nodeName) { - return; // break on non-DOM events - } - - if (type) { - types = {}; - types[type] = true; - } else { - types = hcEvents; - } - - for (n in types) { - if (hcEvents[n]) { - len = hcEvents[n].length; - while (len--) { - removeOneEvent(n, hcEvents[n][len]); - } - } - } - } - - if (hcEvents) { - if (type) { - events = hcEvents[type] || []; - if (fn) { - index = inArray(fn, events); - if (index > -1) { - events.splice(index, 1); - hcEvents[type] = events; - } - removeOneEvent(type, fn); - - } else { - removeAllEvents(); - hcEvents[type] = []; - } - } else { - removeAllEvents(); - el.hcEvents = {}; - } - } - }; - - /** - * Fire an event on a custom object - */ - fireEvent = function (el, type, eventArguments, defaultFunction) { - var e, - hcEvents = el.hcEvents, - events, - len, - i, - preventDefault, - fn; - - eventArguments = eventArguments || {}; - - if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { - e = doc.createEvent('Events'); - e.initEvent(type, true, true); - e.target = el; - - extend(e, eventArguments); - - if (el.dispatchEvent) { - el.dispatchEvent(e); - } else { - el.fireEvent(type, e); - } - - } else if (hcEvents) { - - events = hcEvents[type] || []; - len = events.length; - - // Attach a simple preventDefault function to skip default handler if called - preventDefault = function () { - eventArguments.defaultPrevented = true; - }; - - for (i = 0; i < len; i++) { - fn = events[i]; - - // eventArguments is never null here - if (eventArguments.stopped) { - return; - } - - eventArguments.preventDefault = preventDefault; - eventArguments.target = el; - - // If the type is not set, we're running a custom event (#2297). If it is set, - // we're running a browser event, and setting it will cause en error in - // IE8 (#2465). - if (!eventArguments.type) { - eventArguments.type = type; - } - - // If the event handler return false, prevent the default handler from executing - if (fn.call(el, eventArguments) === false) { - eventArguments.preventDefault(); - } - } - } - - // Run the default if not prevented - if (defaultFunction && !eventArguments.defaultPrevented) { - defaultFunction(eventArguments); - } - }; - - /** - * The global animate method, which uses Fx to create individual animators. - */ - animate = function (el, params, opt) { - var start, - unit = '', - end, - fx, - args, - prop; - - if (!isObject(opt)) { // Number or undefined/null - args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (!isNumber(opt.duration)) { - opt.duration = 400; - } - opt.easing = Math[opt.easing] || Math.easeInOutSine; - opt.curAnim = merge(params); - - for (prop in params) { - fx = new Fx(el, opt, prop); - end = null; - - if (prop === 'd') { - fx.paths = fx.initPath( - el, - el.d, - params.d - ); - fx.toD = params.d; - start = 0; - end = 1; - } else if (el.attr) { - start = el.attr(prop); - } else { - start = parseFloat(getStyle(el, prop)) || 0; - if (prop !== 'opacity') { - unit = 'px'; - } - } - - if (!end) { - end = params[prop]; - } - if (end.match && end.match('px')) { - end = end.replace(/px/g, ''); // #4351 - } - fx.run(start, end, unit); - } - }; - - /** - * Register Highcharts as a plugin in jQuery - */ - if (win.jQuery) { - win.jQuery.fn.highcharts = function () { - var args = [].slice.call(arguments); - - if (this[0]) { // this[0] is the renderTo div - - // Create the chart - if (args[0]) { - new Highcharts[ // eslint-disable-line no-new - isString(args[0]) ? args.shift() : 'Chart' // Constructor defaults to Chart - ](this[0], args[0], args[1]); - return this; - } - - // When called without parameters or with the return argument, return an existing chart - return charts[attr(this[0], 'data-highcharts-chart')]; - } - }; - } - - - /** - * Compatibility section to add support for legacy IE. This can be removed if old IE - * support is not needed. - */ - if (doc && !doc.defaultView) { - getStyle = function (el, prop) { - var val, - alias = { width: 'clientWidth', height: 'clientHeight' }[prop]; - - if (el.style[prop]) { - return pInt(el.style[prop]); - } - if (prop === 'opacity') { - prop = 'filter'; - } - - // Getting the rendered width and height - if (alias) { - el.style.zoom = 1; - return el[alias] - 2 * getStyle(el, 'padding'); - } - - val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { - return b.toUpperCase(); - })]; - if (prop === 'filter') { - val = val.replace( - /alpha\(opacity=([0-9]+)\)/, - function (a, b) { - return b / 100; - } - ); - } - - return val === '' ? 1 : pInt(val); - }; - } - - if (!Array.prototype.forEach) { - each = function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - } - - if (!Array.prototype.indexOf) { - inArray = function (item, arr) { - var len, - i = 0; - - if (arr) { - len = arr.length; - - for (; i < len; i++) { - if (arr[i] === item) { - return i; - } - } - } - - return -1; - }; - } - - if (!Array.prototype.filter) { - grep = function (elements, fn) { - var ret = [], - i = 0, - length = elements.length; - - for (; i < length; i++) { - if (fn(elements[i], i)) { - ret.push(elements[i]); - } - } - - return ret; - }; - } - - //--- End compatibility section --- - - // Expose utilities - Highcharts.Fx = Fx; - Highcharts.inArray = inArray; - Highcharts.each = each; - Highcharts.grep = grep; - Highcharts.offset = offset; - Highcharts.map = map; - Highcharts.addEvent = addEvent; - Highcharts.removeEvent = removeEvent; - Highcharts.fireEvent = fireEvent; - Highcharts.animate = animate; - Highcharts.stop = stop; - - /* **************************************************************************** - * Handle the options * - *****************************************************************************/ - defaultOptions = { - colors: ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', - '#8085e9', '#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1'], - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December'], - shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - // invalidDate: '', - decimalPoint: '.', - numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ' ' - }, - global: { - useUTC: true, - //timezoneOffset: 0, - canvasToolsURL: 'http://code.highcharts.com/modules/canvas-tools.js', - VMLRadialGradientURL: 'http://code.highcharts.com/4.2.1/gfx/vml-radial-gradient.png' - }, - chart: { - //animation: true, - //alignTicks: false, - //reflow: true, - //className: null, - //events: { load, selection }, - //margin: [null], - //marginTop: null, - //marginRight: null, - //marginBottom: null, - //marginLeft: null, - borderColor: '#4572A7', - //borderWidth: 0, - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: true, - //inverted: false, - //shadow: false, - spacing: [10, 10, 15, 10], - //spacingTop: 10, - //spacingRight: 10, - //spacingBottom: 15, - //spacingLeft: 10, - //style: { - // fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // default font - // fontSize: '12px' - //}, - backgroundColor: '#FFFFFF', - //plotBackgroundColor: null, - plotBorderColor: '#C0C0C0', - //plotBorderWidth: 0, - //plotShadow: false, - //zoomType: '' - resetZoomButton: { - theme: { - zIndex: 20 - }, - position: { - align: 'right', - x: -10, - //verticalAlign: 'top', - y: 10 - } - // relativeTo: 'plot' - } - }, - title: { - text: 'Chart title', - align: 'center', - // floating: false, - margin: 15, - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#333333', - fontSize: '18px' - } - - }, - subtitle: { - text: '', - align: 'center', - // floating: false - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#555555' - } - }, - - plotOptions: { - line: { // base series options - allowPointSelect: false, - showCheckbox: false, - animation: { - duration: 1000 - }, - //connectNulls: false, - //cursor: 'default', - //clip: true, - //dashStyle: null, - //enableMouseTracking: true, - events: {}, - //legendIndex: 0, - //linecap: 'round', - lineWidth: 2, - //shadow: false, - // stacking: null, - marker: { - //enabled: true, - //symbol: null, - lineWidth: 0, - radius: 4, - lineColor: '#FFFFFF', - //fillColor: null, - states: { // states for a single point - hover: { - enabled: true, - lineWidthPlus: 1, - radiusPlus: 2 - }, - select: { - fillColor: '#FFFFFF', - lineColor: '#000000', - lineWidth: 2 - } - } - }, - point: { - events: {} - }, - dataLabels: { - align: 'center', - // defer: true, - // enabled: false, - formatter: function () { - return this.y === null ? '' : Highcharts.numberFormat(this.y, -1); - }, - style: { - color: 'contrast', - fontSize: '11px', - fontWeight: 'bold', - textShadow: '0 0 6px contrast, 0 0 3px contrast' - }, - verticalAlign: 'bottom', // above singular point - x: 0, - y: 0, - // backgroundColor: undefined, - // borderColor: undefined, - // borderRadius: undefined, - // borderWidth: undefined, - padding: 5 - // shadow: false - }, - cropThreshold: 300, // draw points outside the plot area when the number of points is less than this - pointRange: 0, - //pointStart: 0, - //pointInterval: 1, - //showInLegend: null, // auto: true for standalone series, false for linked series - softThreshold: true, - states: { // states for the entire series - hover: { - //enabled: false, - lineWidthPlus: 1, - marker: { - // lineWidth: base + 1, - // radius: base + 1 - }, - halo: { - size: 10, - opacity: 0.25 - } - }, - select: { - marker: {} - } - }, - stickyTracking: true, - //tooltip: { - //pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.y}</b>' - //valueDecimals: null, - //xDateFormat: '%A, %b %e, %Y', - //valuePrefix: '', - //ySuffix: '' - //} - turboThreshold: 1000 - // zIndex: null - } - }, - labels: { - //items: [], - style: { - //font: defaultFont, - position: ABSOLUTE, - color: '#3E576F' - } - }, - legend: { - enabled: true, - align: 'center', - //floating: false, - layout: 'horizontal', - labelFormatter: function () { - return this.name; - }, - //borderWidth: 0, - borderColor: '#909090', - borderRadius: 0, - navigation: { - // animation: true, - activeColor: '#274b6d', - // arrowSize: 12 - inactiveColor: '#CCC' - // style: {} // text styles - }, - // margin: 20, - // reversed: false, - shadow: false, - // backgroundColor: null, - /*style: { - padding: '5px' - },*/ - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold' - }, - itemHoverStyle: { - //cursor: 'pointer', removed as of #601 - color: '#000' - }, - itemHiddenStyle: { - color: '#CCC' - }, - itemCheckboxStyle: { - position: ABSOLUTE, - width: '13px', // for IE precision - height: '13px' - }, - // itemWidth: undefined, - // symbolRadius: 0, - // symbolWidth: 16, - symbolPadding: 5, - verticalAlign: 'bottom', - // width: undefined, - x: 0, - y: 0, - title: { - //text: null, - style: { - fontWeight: 'bold' - } - } - }, - - loading: { - // hideDuration: 100, - labelStyle: { - fontWeight: 'bold', - position: RELATIVE, - top: '45%' - }, - // showDuration: 0, - style: { - position: ABSOLUTE, - backgroundColor: 'white', - opacity: 0.5, - textAlign: 'center' - } - }, - - tooltip: { - enabled: true, - animation: hasSVG, - //crosshairs: null, - backgroundColor: 'rgba(249, 249, 249, .85)', - borderWidth: 1, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y' - }, - footerFormat: '', - //formatter: defaultFormatter, - headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>', - pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.y}</b><br/>', - shadow: true, - //shape: 'callout', - //shared: false, - snap: isTouchDevice ? 25 : 10, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - padding: '8px', - pointerEvents: 'none', // #1686 http://caniuse.com/#feat=pointer-events - whiteSpace: 'nowrap' - } - //xDateFormat: '%A, %b %e, %Y', - //valueDecimals: null, - //valuePrefix: '', - //valueSuffix: '' - }, - - credits: { - enabled: true, - text: 'Highcharts.com', - href: 'http://www.highcharts.com', - position: { - align: 'right', - x: -10, - verticalAlign: 'bottom', - y: -5 - }, - style: { - cursor: 'pointer', - color: '#909090', - fontSize: '9px' - } - } - }; - - - - /** - * Set the time methods globally based on the useUTC option. Time method can be either - * local time or UTC (default). - */ - function setTimeMethods() { - var globalOptions = defaultOptions.global, - useUTC = globalOptions.useUTC, - GET = useUTC ? 'getUTC' : 'get', - SET = useUTC ? 'setUTC' : 'set'; - - - Date = globalOptions.Date || win.Date; - timezoneOffset = useUTC && globalOptions.timezoneOffset; - getTimezoneOffset = useUTC && globalOptions.getTimezoneOffset; - makeTime = function (year, month, date, hours, minutes, seconds) { - var d; - if (useUTC) { - d = Date.UTC.apply(0, arguments); - d += getTZOffset(d); - } else { - d = new Date( - year, - month, - pick(date, 1), - pick(hours, 0), - pick(minutes, 0), - pick(seconds, 0) - ).getTime(); - } - return d; - }; - getMinutes = GET + 'Minutes'; - getHours = GET + 'Hours'; - getDay = GET + 'Day'; - getDate = GET + 'Date'; - getMonth = GET + 'Month'; - getFullYear = GET + 'FullYear'; - setMilliseconds = SET + 'Milliseconds'; - setSeconds = SET + 'Seconds'; - setMinutes = SET + 'Minutes'; - setHours = SET + 'Hours'; - setDate = SET + 'Date'; - setMonth = SET + 'Month'; - setFullYear = SET + 'FullYear'; - - } - - /** - * Merge the default options with custom options and return the new options structure - * @param {Object} options The new custom options - */ - function setOptions(options) { - - // Copy in the default options - defaultOptions = merge(true, defaultOptions, options); - - // Apply UTC - setTimeMethods(); - - return defaultOptions; - } - - /** - * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules - * wasn't enough because the setOptions method created a new object. - */ - function getOptions() { - return defaultOptions; - } - - - - - - - // Series defaults - var defaultPlotOptions = defaultOptions.plotOptions, - defaultSeriesOptions = defaultPlotOptions.line; - - // set the default time methods - setTimeMethods(); - - - /** - * Handle color operations. The object methods are chainable. - * @param {String} input The input color in either rbga or hex format - */ - function Color(input) { - // Backwards compatibility, allow instanciation without new - if (!(this instanceof Color)) { - return new Color(input); - } - // Initialize - this.init(input); - } - Color.prototype = { - - // Collection of parsers. This can be extended from the outside by pushing parsers - // to Highcharts.Colors.prototype.parsers. - parsers: [{ - // RGBA color - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function (result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; - } - }, { - // HEX color - regex: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, - parse: function (result) { - return [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1]; - } - }, { - // RGB color - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function (result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; - } - }], - - /** - * Parse the input color to rgba array - * @param {String} input - */ - init: function (input) { - var result, - rgba, - i, - parser; - - this.input = input; - - // Gradients - if (input && input.stops) { - this.stops = map(input.stops, function (stop) { - return new Color(stop[1]); - }); - - // Solid colors - } else { - i = this.parsers.length; - while (i-- && !rgba) { - parser = this.parsers[i]; - result = parser.regex.exec(input); - if (result) { - rgba = parser.parse(result); - } - } - } - this.rgba = rgba || []; - }, - - /** - * Return the color a specified format - * @param {String} format - */ - get: function (format) { - var input = this.input, - rgba = this.rgba, - ret; - - if (this.stops) { - ret = merge(input); - ret.stops = [].concat(ret.stops); - each(this.stops, function (stop, i) { - ret.stops[i] = [ret.stops[i][0], stop.get(format)]; - }); - - // it's NaN if gradient colors on a column chart - } else if (rgba && !isNaN(rgba[0])) { - if (format === 'rgb' || (!format && rgba[3] === 1)) { - ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; - } else if (format === 'a') { - ret = rgba[3]; - } else { - ret = 'rgba(' + rgba.join(',') + ')'; - } - } else { - ret = input; - } - return ret; - }, - - /** - * Brighten the color - * @param {Number} alpha - */ - brighten: function (alpha) { - var i, - rgba = this.rgba; - - if (this.stops) { - each(this.stops, function (stop) { - stop.brighten(alpha); - }); - - } else if (isNumber(alpha) && alpha !== 0) { - for (i = 0; i < 3; i++) { - rgba[i] += pInt(alpha * 255); - - if (rgba[i] < 0) { - rgba[i] = 0; - } - if (rgba[i] > 255) { - rgba[i] = 255; - } - } - } - return this; - }, - - /** - * Set the color's opacity to a given alpha value - * @param {Number} alpha - */ - setOpacity: function (alpha) { - this.rgba[3] = alpha; - return this; - } - }; - - - /** - * A wrapper object for SVG elements - */ - function SVGElement() {} - - SVGElement.prototype = { - - // Default base for animation - opacity: 1, - // For labels, these CSS properties are applied to the <text> node directly - textProps: ['direction', 'fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'color', - 'lineHeight', 'width', 'textDecoration', 'textOverflow', 'textShadow'], - - /** - * Initialize the SVG renderer - * @param {Object} renderer - * @param {String} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this; - wrapper.element = nodeName === 'span' ? - createElement(nodeName) : - doc.createElementNS(SVG_NS, nodeName); - wrapper.renderer = renderer; - }, - - /** - * Animate a given attribute - * @param {Object} params - * @param {Number} options Options include duration, easing, step and complete - * @param {Function} complete Function to perform at the end of animation - */ - animate: function (params, options, complete) { - var animOptions = pick(options, this.renderer.globalAnimation, true); - stop(this); // stop regardless of animation actually running, or reverting to .attr (#607) - if (animOptions) { - animOptions = merge(animOptions, {}); //#2625 - if (complete) { // allows using a callback with the global animation without overwriting it - animOptions.complete = complete; - } - animate(this, params, animOptions); - } else { - this.attr(params, null, complete); - } - return this; - }, - - /** - * Build an SVG gradient out of a common JavaScript configuration object - */ - colorGradient: function (color, prop, elem) { - var renderer = this.renderer, - colorObject, - gradName, - gradAttr, - radAttr, - gradients, - gradientObject, - stops, - stopColor, - stopOpacity, - radialReference, - n, - id, - key = [], - value; - - // Apply linear or radial gradients - if (color.linearGradient) { - gradName = 'linearGradient'; - } else if (color.radialGradient) { - gradName = 'radialGradient'; - } - - if (gradName) { - gradAttr = color[gradName]; - gradients = renderer.gradients; - stops = color.stops; - radialReference = elem.radialReference; - - // Keep < 2.2 kompatibility - if (isArray(gradAttr)) { - color[gradName] = gradAttr = { - x1: gradAttr[0], - y1: gradAttr[1], - x2: gradAttr[2], - y2: gradAttr[3], - gradientUnits: 'userSpaceOnUse' - }; - } - - // Correct the radial gradient for the radial reference system - if (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) { - radAttr = gradAttr; // Save the radial attributes for updating - gradAttr = merge(gradAttr, - renderer.getRadialAttr(radialReference, radAttr), - { gradientUnits: 'userSpaceOnUse' } - ); - } - - // Build the unique key to detect whether we need to create a new element (#1282) - for (n in gradAttr) { - if (n !== 'id') { - key.push(n, gradAttr[n]); - } - } - for (n in stops) { - key.push(stops[n]); - } - key = key.join(','); - - // Check if a gradient object with the same config object is created within this renderer - if (gradients[key]) { - id = gradients[key].attr('id'); - - } else { - - // Set the id and create the element - gradAttr.id = id = PREFIX + idCounter++; - gradients[key] = gradientObject = renderer.createElement(gradName) - .attr(gradAttr) - .add(renderer.defs); - - gradientObject.radAttr = radAttr; - - // The gradient needs to keep a list of stops to be able to destroy them - gradientObject.stops = []; - each(stops, function (stop) { - var stopObject; - if (stop[1].indexOf('rgba') === 0) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - stopObject = renderer.createElement('stop').attr({ - offset: stop[0], - 'stop-color': stopColor, - 'stop-opacity': stopOpacity - }).add(gradientObject); - - // Add the stop element to the gradient - gradientObject.stops.push(stopObject); - }); - } - - // Set the reference to the gradient object - value = 'url(' + renderer.url + '#' + id + ')'; - elem.setAttribute(prop, value); - elem.gradient = key; - - // Allow the color to be concatenated into tooltips formatters etc. (#2995) - color.toString = function () { - return value; - }; - } - }, - - /** - * Apply a polyfill to the text-stroke CSS property, by copying the text element - * and apply strokes to the copy. - * - * Contrast checks at http://jsfiddle.net/highcharts/43soe9m1/2/ - * - * docs: update default, document the polyfill and the limitations on hex colors and pixel values, document contrast pseudo-color - */ - applyTextShadow: function (textShadow) { - var elem = this.element, - tspans, - hasContrast = textShadow.indexOf('contrast') !== -1, - styles = {}, - forExport = this.renderer.forExport, - // IE10 and IE11 report textShadow in elem.style even though it doesn't work. Check - // this again with new IE release. In exports, the rendering is passed to PhantomJS. - supports = forExport || (elem.style.textShadow !== UNDEFINED && !isMS); - - // When the text shadow is set to contrast, use dark stroke for light text and vice versa - if (hasContrast) { - styles.textShadow = textShadow = textShadow.replace(/contrast/g, this.renderer.getContrast(elem.style.fill)); - } - - // Safari with retina displays as well as PhantomJS bug (#3974). Firefox does not tolerate this, - // it removes the text shadows. - if (isWebKit || forExport) { - styles.textRendering = 'geometricPrecision'; - } - - /* Selective side-by-side testing in supported browser (http://jsfiddle.net/highcharts/73L1ptrh/) - if (elem.textContent.indexOf('2.') === 0) { - elem.style['text-shadow'] = 'none'; - supports = false; - } - // */ - - // No reason to polyfill, we've got native support - if (supports) { - this.css(styles); // Apply altered textShadow or textRendering workaround - } else { - - this.fakeTS = true; // Fake text shadow - - // In order to get the right y position of the clones, - // copy over the y setter - this.ySetter = this.xSetter; - - tspans = [].slice.call(elem.getElementsByTagName('tspan')); - each(textShadow.split(/\s?,\s?/g), function (textShadow) { - var firstChild = elem.firstChild, - color, - strokeWidth; - - textShadow = textShadow.split(' '); - color = textShadow[textShadow.length - 1]; - - // Approximately tune the settings to the text-shadow behaviour - strokeWidth = textShadow[textShadow.length - 2]; - - if (strokeWidth) { - each(tspans, function (tspan, y) { - var clone; - - // Let the first line start at the correct X position - if (y === 0) { - tspan.setAttribute('x', elem.getAttribute('x')); - y = elem.getAttribute('y'); - tspan.setAttribute('y', y || 0); - if (y === null) { - elem.setAttribute('y', 0); - } - } - - // Create the clone and apply shadow properties - clone = tspan.cloneNode(1); - attr(clone, { - 'class': PREFIX + 'text-shadow', - 'fill': color, - 'stroke': color, - 'stroke-opacity': 1 / mathMax(pInt(strokeWidth), 3), - 'stroke-width': strokeWidth, - 'stroke-linejoin': 'round' - }); - elem.insertBefore(clone, firstChild); - }); - } - }); - } - }, - - /** - * Set or get a given attribute - * @param {Object|String} hash - * @param {Mixed|Undefined} val - */ - attr: function (hash, val, complete) { - var key, - value, - element = this.element, - hasSetSymbolSize, - ret = this, - skipAttr; - - // single key-value pair - if (typeof hash === 'string' && val !== UNDEFINED) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter: first argument is a string, second is undefined - if (typeof hash === 'string') { - ret = (this[hash + 'Getter'] || this._defaultGetter).call(this, hash, element); - - // setter - } else { - - for (key in hash) { - value = hash[key]; - skipAttr = false; - - - - if (this.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) { - if (!hasSetSymbolSize) { - this.symbolAttr(hash); - hasSetSymbolSize = true; - } - skipAttr = true; - } - - if (this.rotation && (key === 'x' || key === 'y')) { - this.doTransform = true; - } - - if (!skipAttr) { - (this[key + 'Setter'] || this._defaultSetter).call(this, value, key, element); - } - - // Let the shadow follow the main element - if (this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) { - this.updateShadows(key, value); - } - } - - // Update transform. Do this outside the loop to prevent redundant updating for batch setting - // of attributes. - if (this.doTransform) { - this.updateTransform(); - this.doTransform = false; - } - - } - - // In accordance with animate, run a complete callback - if (complete) { - complete(); - } - - return ret; - }, - - updateShadows: function (key, value) { - var shadows = this.shadows, - i = shadows.length; - while (i--) { - shadows[i].setAttribute( - key, - key === 'height' ? - Math.max(value - (shadows[i].cutHeight || 0), 0) : - key === 'd' ? this.d : value - ); - } - }, - - /** - * Add a class name to an element - */ - addClass: function (className) { - var element = this.element, - currentClassName = attr(element, 'class') || ''; - - if (currentClassName.indexOf(className) === -1) { - attr(element, 'class', currentClassName + ' ' + className); - } - return this; - }, - /* hasClass and removeClass are not (yet) needed - hasClass: function (className) { - return attr(this.element, 'class').indexOf(className) !== -1; - }, - removeClass: function (className) { - attr(this.element, 'class', attr(this.element, 'class').replace(className, '')); - return this; - }, - */ - - /** - * If one of the symbol size affecting parameters are changed, - * check all the others only once for each call to an element's - * .attr() method - * @param {Object} hash - */ - symbolAttr: function (hash) { - var wrapper = this; - - each(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) { - wrapper[key] = pick(hash[key], wrapper[key]); - }); - - wrapper.attr({ - d: wrapper.renderer.symbols[wrapper.symbolName]( - wrapper.x, - wrapper.y, - wrapper.width, - wrapper.height, - wrapper - ) - }); - }, - - /** - * Apply a clipping path to this object - * @param {String} id - */ - clip: function (clipRect) { - return this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE); - }, - - /** - * Calculate the coordinates needed for drawing a rectangle crisply and return the - * calculated attributes - * @param {Number} strokeWidth - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - crisp: function (rect) { - - var wrapper = this, - key, - attribs = {}, - normalizer, - strokeWidth = rect.strokeWidth || wrapper.strokeWidth || 0; - - normalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors - - // normalize for crisp edges - rect.x = mathFloor(rect.x || wrapper.x || 0) + normalizer; - rect.y = mathFloor(rect.y || wrapper.y || 0) + normalizer; - rect.width = mathFloor((rect.width || wrapper.width || 0) - 2 * normalizer); - rect.height = mathFloor((rect.height || wrapper.height || 0) - 2 * normalizer); - rect.strokeWidth = strokeWidth; - - for (key in rect) { - if (wrapper[key] !== rect[key]) { // only set attribute if changed - wrapper[key] = attribs[key] = rect[key]; - } - } - - return attribs; - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: function (styles) { - var elemWrapper = this, - oldStyles = elemWrapper.styles, - newStyles = {}, - elem = elemWrapper.element, - textWidth, - n, - serializedCss = '', - hyphenate, - hasNew = !oldStyles; - - // convert legacy - if (styles && styles.color) { - styles.fill = styles.color; - } - - // Filter out existing styles to increase performance (#2640) - if (oldStyles) { - for (n in styles) { - if (styles[n] !== oldStyles[n]) { - newStyles[n] = styles[n]; - hasNew = true; - } - } - } - if (hasNew) { - textWidth = elemWrapper.textWidth = - (styles && styles.width && elem.nodeName.toLowerCase() === 'text' && pInt(styles.width)) || - elemWrapper.textWidth; // #3501 - - // Merge the new styles with the old ones - if (oldStyles) { - styles = extend( - oldStyles, - newStyles - ); - } - - // store object - elemWrapper.styles = styles; - - if (textWidth && (useCanVG || (!hasSVG && elemWrapper.renderer.forExport))) { - delete styles.width; - } - - // serialize and set style attribute - if (isMS && !hasSVG) { - css(elemWrapper.element, styles); - } else { - hyphenate = function (a, b) { - return '-' + b.toLowerCase(); - }; - for (n in styles) { - serializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';'; - } - attr(elem, 'style', serializedCss); // #1881 - } - - - // re-build text - if (textWidth && elemWrapper.added) { - elemWrapper.renderer.buildText(elemWrapper); - } - } - - return elemWrapper; - }, - - /** - * Add an event listener - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - var svgElement = this, - element = svgElement.element; - - // touch - if (hasTouch && eventType === 'click') { - element.ontouchstart = function (e) { - svgElement.touchEventFired = Date.now(); - e.preventDefault(); - handler.call(element, e); - }; - element.onclick = function (e) { - if (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269 - handler.call(element, e); - } - }; - } else { - // simplest possible event model for internal use - element['on' + eventType] = handler; - } - return this; - }, - - /** - * Set the coordinates needed to draw a consistent radial gradient across - * pie slices regardless of positioning inside the chart. The format is - * [centerX, centerY, diameter] in pixels. - */ - setRadialReference: function (coordinates) { - var existingGradient = this.renderer.gradients[this.element.gradient]; - - this.element.radialReference = coordinates; - - // On redrawing objects with an existing gradient, the gradient needs - // to be repositioned (#3801) - if (existingGradient && existingGradient.radAttr) { - existingGradient.animate( - this.renderer.getRadialAttr( - coordinates, - existingGradient.radAttr - ) - ); - } - - return this; - }, - - /** - * Move an object and its children by x and y values - * @param {Number} x - * @param {Number} y - */ - translate: function (x, y) { - return this.attr({ - translateX: x, - translateY: y - }); - }, - - /** - * Invert a group, rotate and flip - */ - invert: function () { - var wrapper = this; - wrapper.inverted = true; - wrapper.updateTransform(); - return wrapper; - }, - - /** - * Private method to update the transform attribute based on internal - * properties - */ - updateTransform: function () { - var wrapper = this, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - scaleX = wrapper.scaleX, - scaleY = wrapper.scaleY, - inverted = wrapper.inverted, - rotation = wrapper.rotation, - element = wrapper.element, - transform; - - // flipping affects translate as adjustment for flipping around the group's axis - if (inverted) { - translateX += wrapper.attr('width'); - translateY += wrapper.attr('height'); - } - - // Apply translate. Nearly all transformed elements have translation, so instead - // of checking for translate = 0, do it always (#1767, #1846). - transform = ['translate(' + translateX + ',' + translateY + ')']; - - // apply rotation - if (inverted) { - transform.push('rotate(90) scale(-1,1)'); - } else if (rotation) { // text rotation - transform.push('rotate(' + rotation + ' ' + (element.getAttribute('x') || 0) + ' ' + (element.getAttribute('y') || 0) + ')'); - - // Delete bBox memo when the rotation changes - //delete wrapper.bBox; - } - - // apply scale - if (defined(scaleX) || defined(scaleY)) { - transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')'); - } - - if (transform.length) { - element.setAttribute('transform', transform.join(' ')); - } - }, - /** - * Bring the element to the front - */ - toFront: function () { - var element = this.element; - element.parentNode.appendChild(element); - return this; - }, - - - /** - * Break down alignment options like align, verticalAlign, x and y - * to x and y relative to the chart. - * - * @param {Object} alignOptions - * @param {Boolean} alignByTranslate - * @param {String[Object} box The box to align to, needs a width and height. When the - * box is a string, it refers to an object in the Renderer. For example, when - * box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height - * x and y properties. - * - */ - align: function (alignOptions, alignByTranslate, box) { - var align, - vAlign, - x, - y, - attribs = {}, - alignTo, - renderer = this.renderer, - alignedObjects = renderer.alignedObjects; - - // First call on instanciate - if (alignOptions) { - this.alignOptions = alignOptions; - this.alignByTranslate = alignByTranslate; - if (!box || isString(box)) { // boxes other than renderer handle this internally - this.alignTo = alignTo = box || 'renderer'; - erase(alignedObjects, this); // prevent duplicates, like legendGroup after resize - alignedObjects.push(this); - box = null; // reassign it below - } - - // When called on resize, no arguments are supplied - } else { - alignOptions = this.alignOptions; - alignByTranslate = this.alignByTranslate; - alignTo = this.alignTo; - } - - box = pick(box, renderer[alignTo], renderer); - - // Assign variables - align = alignOptions.align; - vAlign = alignOptions.verticalAlign; - x = (box.x || 0) + (alignOptions.x || 0); // default: left align - y = (box.y || 0) + (alignOptions.y || 0); // default: top align - - // Align - if (align === 'right' || align === 'center') { - x += (box.width - (alignOptions.width || 0)) / - { right: 1, center: 2 }[align]; - } - attribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x); - - - // Vertical align - if (vAlign === 'bottom' || vAlign === 'middle') { - y += (box.height - (alignOptions.height || 0)) / - ({ bottom: 1, middle: 2 }[vAlign] || 1); - - } - attribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y); - - // Animate only if already placed - this[this.placed ? 'animate' : 'attr'](attribs); - this.placed = true; - this.alignAttr = attribs; - - return this; - }, - - /** - * Get the bounding box (width, height, x and y) for the element - */ - getBBox: function (reload, rot) { - var wrapper = this, - bBox,// = wrapper.bBox, - renderer = wrapper.renderer, - width, - height, - rotation, - rad, - element = wrapper.element, - styles = wrapper.styles, - textStr = wrapper.textStr, - textShadow, - elemStyle = element.style, - toggleTextShadowShim, - cache = renderer.cache, - cacheKeys = renderer.cacheKeys, - cacheKey; - - rotation = pick(rot, wrapper.rotation); - rad = rotation * deg2rad; - - if (textStr !== UNDEFINED) { - - // Properties that affect bounding box - cacheKey = ['', rotation || 0, styles && styles.fontSize, element.style.width].join(','); - - // Since numbers are monospaced, and numerical labels appear a lot in a chart, - // we assume that a label of n characters has the same bounding box as others - // of the same length. - if (textStr === '' || numRegex.test(textStr)) { - cacheKey = 'num:' + textStr.toString().length + cacheKey; - - // Caching all strings reduces rendering time by 4-5%. - } else { - cacheKey = textStr + cacheKey; - } - } - - if (cacheKey && !reload) { - bBox = cache[cacheKey]; - } - - // No cache found - if (!bBox) { - - // SVG elements - if (element.namespaceURI === SVG_NS || renderer.forExport) { - try { // Fails in Firefox if the container has display: none. - - // When the text shadow shim is used, we need to hide the fake shadows - // to get the correct bounding box (#3872) - toggleTextShadowShim = this.fakeTS && function (display) { - each(element.querySelectorAll('.' + PREFIX + 'text-shadow'), function (tspan) { - tspan.style.display = display; - }); - }; - - // Workaround for #3842, Firefox reporting wrong bounding box for shadows - if (isFirefox && elemStyle.textShadow) { - textShadow = elemStyle.textShadow; - elemStyle.textShadow = ''; - } else if (toggleTextShadowShim) { - toggleTextShadowShim(NONE); - } - - bBox = element.getBBox ? - // SVG: use extend because IE9 is not allowed to change width and height in case - // of rotation (below) - extend({}, element.getBBox()) : - // Canvas renderer and legacy IE in export mode - { - width: element.offsetWidth, - height: element.offsetHeight - }; - - // #3842 - if (textShadow) { - elemStyle.textShadow = textShadow; - } else if (toggleTextShadowShim) { - toggleTextShadowShim(''); - } - } catch (e) {} - - // If the bBox is not set, the try-catch block above failed. The other condition - // is for Opera that returns a width of -Infinity on hidden elements. - if (!bBox || bBox.width < 0) { - bBox = { width: 0, height: 0 }; - } - - - // VML Renderer or useHTML within SVG - } else { - - bBox = wrapper.htmlGetBBox(); - - } - - // True SVG elements as well as HTML elements in modern browsers using the .useHTML option - // need to compensated for rotation - if (renderer.isSVG) { - width = bBox.width; - height = bBox.height; - - // Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669, #2568) - if (isMS && styles && styles.fontSize === '11px' && height.toPrecision(3) === '16.9') { - bBox.height = height = 14; - } - - // Adjust for rotated text - if (rotation) { - bBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad)); - bBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad)); - } - } - - // Cache it - if (cacheKey) { - - // Rotate (#4681) - while (cacheKeys.length > 250) { - delete cache[cacheKeys.shift()]; - } - - if (!cache[cacheKey]) { - cacheKeys.push(cacheKey); - } - cache[cacheKey] = bBox; - } - } - return bBox; - }, - - /** - * Show the element - */ - show: function (inherit) { - return this.attr({ visibility: inherit ? 'inherit' : VISIBLE }); - }, - - /** - * Hide the element - */ - hide: function () { - return this.attr({ visibility: HIDDEN }); - }, - - fadeOut: function (duration) { - var elemWrapper = this; - elemWrapper.animate({ - opacity: 0 - }, { - duration: duration || 150, - complete: function () { - elemWrapper.attr({ y: -9999 }); // #3088, assuming we're only using this for tooltips - } - }); - }, - - /** - * Add the element - * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined - * to append the element to the renderer.box. - */ - add: function (parent) { - - var renderer = this.renderer, - element = this.element, - inserted; - - if (parent) { - this.parentGroup = parent; - } - - // mark as inverted - this.parentInverted = parent && parent.inverted; - - // build formatted text - if (this.textStr !== undefined) { - renderer.buildText(this); - } - - // Mark as added - this.added = true; - - // If we're adding to renderer root, or other elements in the group - // have a z index, we need to handle it - if (!parent || parent.handleZ || this.zIndex) { - inserted = this.zIndexSetter(); - } - - // If zIndex is not handled, append at the end - if (!inserted) { - (parent ? parent.element : renderer.box).appendChild(element); - } - - // fire an event for internal hooks - if (this.onAdd) { - this.onAdd(); - } - - return this; - }, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - var parentNode = element.parentNode; - if (parentNode) { - parentNode.removeChild(element); - } - }, - - /** - * Destroy the element and element wrapper - */ - destroy: function () { - var wrapper = this, - element = wrapper.element || {}, - shadows = wrapper.shadows, - parentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && wrapper.parentGroup, - grandParent, - key, - i; - - // remove events - element.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null; - stop(wrapper); // stop running animations - - if (wrapper.clipPath) { - wrapper.clipPath = wrapper.clipPath.destroy(); - } - - // Destroy stops in case this is a gradient object - if (wrapper.stops) { - for (i = 0; i < wrapper.stops.length; i++) { - wrapper.stops[i] = wrapper.stops[i].destroy(); - } - wrapper.stops = null; - } - - // remove element - wrapper.safeRemoveChild(element); - - // destroy shadows - if (shadows) { - each(shadows, function (shadow) { - wrapper.safeRemoveChild(shadow); - }); - } - - // In case of useHTML, clean up empty containers emulating SVG groups (#1960, #2393, #2697). - while (parentToClean && parentToClean.div && parentToClean.div.childNodes.length === 0) { - grandParent = parentToClean.parentGroup; - wrapper.safeRemoveChild(parentToClean.div); - delete parentToClean.div; - parentToClean = grandParent; - } - - // remove from alignObjects - if (wrapper.alignTo) { - erase(wrapper.renderer.alignedObjects, wrapper); - } - - for (key in wrapper) { - delete wrapper[key]; - } - - return null; - }, - - /** - * Add a shadow to the element. Must be done after the element is added to the DOM - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - shadow, - element = this.element, - strokeWidth, - shadowWidth, - shadowElementOpacity, - - // compensate for inverted plot area - transform; - - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - transform = this.parentInverted ? - '(-1,-1)' : - '(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')'; - for (i = 1; i <= shadowWidth; i++) { - shadow = element.cloneNode(0); - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - attr(shadow, { - 'isShadow': 'true', - 'stroke': shadowOptions.color || 'black', - 'stroke-opacity': shadowElementOpacity * i, - 'stroke-width': strokeWidth, - 'transform': 'translate' + transform, - 'fill': NONE - }); - if (cutOff) { - attr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0)); - shadow.cutHeight = strokeWidth; - } - - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - shadows.push(shadow); - } - - this.shadows = shadows; - } - return this; - - }, - - xGetter: function (key) { - if (this.element.nodeName === 'circle') { - key = { x: 'cx', y: 'cy' }[key] || key; - } - return this._defaultGetter(key); - }, - - /** - * Get the current value of an attribute or pseudo attribute, used mainly - * for animation. - */ - _defaultGetter: function (key) { - var ret = pick(this[key], this.element ? this.element.getAttribute(key) : null, 0); - - if (/^[\-0-9\.]+$/.test(ret)) { // is numerical - ret = parseFloat(ret); - } - return ret; - }, - - - dSetter: function (value, key, element) { - if (value && value.join) { // join path - value = value.join(' '); - } - if (/(NaN| {2}|^$)/.test(value)) { - value = 'M 0 0'; - } - element.setAttribute(key, value); - - this[key] = value; - }, - dashstyleSetter: function (value) { - var i; - value = value && value.toLowerCase(); - if (value) { - value = value - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); // ending comma - - i = value.length; - while (i--) { - value[i] = pInt(value[i]) * this['stroke-width']; - } - value = value.join(',') - .replace('NaN', 'none'); // #3226 - this.element.setAttribute('stroke-dasharray', value); - } - }, - alignSetter: function (value) { - this.element.setAttribute('text-anchor', { left: 'start', center: 'middle', right: 'end' }[value]); - }, - opacitySetter: function (value, key, element) { - this[key] = value; - element.setAttribute(key, value); - }, - titleSetter: function (value) { - var titleNode = this.element.getElementsByTagName('title')[0]; - if (!titleNode) { - titleNode = doc.createElementNS(SVG_NS, 'title'); - this.element.appendChild(titleNode); - } - titleNode.appendChild( - doc.createTextNode( - (String(pick(value), '')).replace(/<[^>]*>/g, '') // #3276, #3895 - ) - ); - }, - textSetter: function (value) { - if (value !== this.textStr) { - // Delete bBox memo when the text changes - delete this.bBox; - - this.textStr = value; - if (this.added) { - this.renderer.buildText(this); - } - } - }, - fillSetter: function (value, key, element) { - if (typeof value === 'string') { - element.setAttribute(key, value); - } else if (value) { - this.colorGradient(value, key, element); - } - }, - visibilitySetter: function (value, key, element) { - // IE9-11 doesn't handle visibilty:inherit well, so we remove the attribute instead (#2881, #3909) - if (value === 'inherit') { - element.removeAttribute(key); - } else { - element.setAttribute(key, value); - } - }, - zIndexSetter: function (value, key) { - var renderer = this.renderer, - parentGroup = this.parentGroup, - parentWrapper = parentGroup || renderer, - parentNode = parentWrapper.element || renderer.box, - childNodes, - otherElement, - otherZIndex, - element = this.element, - inserted, - run = this.added, - i; - - if (defined(value)) { - element.setAttribute(key, value); // So we can read it for other elements in the group - value = +value; - if (this[key] === value) { // Only update when needed (#3865) - run = false; - } - this[key] = value; - } - - // Insert according to this and other elements' zIndex. Before .add() is called, - // nothing is done. Then on add, or by later calls to zIndexSetter, the node - // is placed on the right place in the DOM. - if (run) { - value = this.zIndex; - - if (value && parentGroup) { - parentGroup.handleZ = true; - } - - childNodes = parentNode.childNodes; - for (i = 0; i < childNodes.length && !inserted; i++) { - otherElement = childNodes[i]; - otherZIndex = attr(otherElement, 'zIndex'); - if (otherElement !== element && ( - // Insert before the first element with a higher zIndex - pInt(otherZIndex) > value || - // If no zIndex given, insert before the first element with a zIndex - (!defined(value) && defined(otherZIndex)) - - )) { - parentNode.insertBefore(element, otherElement); - inserted = true; - } - } - if (!inserted) { - parentNode.appendChild(element); - } - } - return inserted; - }, - _defaultSetter: function (value, key, element) { - element.setAttribute(key, value); - } - }; - - // Some shared setters and getters - SVGElement.prototype.yGetter = SVGElement.prototype.xGetter; - SVGElement.prototype.translateXSetter = SVGElement.prototype.translateYSetter = - SVGElement.prototype.rotationSetter = SVGElement.prototype.verticalAlignSetter = - SVGElement.prototype.scaleXSetter = SVGElement.prototype.scaleYSetter = function (value, key) { - this[key] = value; - this.doTransform = true; - }; - - // WebKit and Batik have problems with a stroke-width of zero, so in this case we remove the - // stroke attribute altogether. #1270, #1369, #3065, #3072. - SVGElement.prototype['stroke-widthSetter'] = SVGElement.prototype.strokeSetter = function (value, key, element) { - this[key] = value; - // Only apply the stroke attribute if the stroke width is defined and larger than 0 - if (this.stroke && this['stroke-width']) { - this.strokeWidth = this['stroke-width']; - SVGElement.prototype.fillSetter.call(this, this.stroke, 'stroke', element); // use prototype as instance may be overridden - element.setAttribute('stroke-width', this['stroke-width']); - this.hasStroke = true; - } else if (key === 'stroke-width' && value === 0 && this.hasStroke) { - element.removeAttribute('stroke'); - this.hasStroke = false; - } - }; - - - /** - * The default SVG renderer - */ - var SVGRenderer = function () { - this.init.apply(this, arguments); - }; - SVGRenderer.prototype = { - Element: SVGElement, - - /** - * Initialize the SVGRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - * @param {Boolean} forExport - */ - init: function (container, width, height, style, forExport, allowHTML) { - var renderer = this, - boxWrapper, - element, - desc; - - boxWrapper = renderer.createElement('svg') - .attr({ - version: '1.1' - }) - .css(this.getStyle(style)); - element = boxWrapper.element; - container.appendChild(element); - - // For browsers other than IE, add the namespace attribute (#1978) - if (container.innerHTML.indexOf('xmlns') === -1) { - attr(element, 'xmlns', SVG_NS); - } - - // object properties - renderer.isSVG = true; - renderer.box = element; - renderer.boxWrapper = boxWrapper; - renderer.alignedObjects = []; - - // Page url used for internal references. #24, #672, #1070 - renderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ? - win.location.href - .replace(/#.*?$/, '') // remove the hash - .replace(/([\('\)])/g, '\\$1') // escape parantheses and quotes - .replace(/ /g, '%20') : // replace spaces (needed for Safari only) - ''; - - // Add description - desc = this.createElement('desc').add(); - desc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION)); - - - renderer.defs = this.createElement('defs').add(); - renderer.allowHTML = allowHTML; - renderer.forExport = forExport; - renderer.gradients = {}; // Object where gradient SvgElements are stored - renderer.cache = {}; // Cache for numerical bounding boxes - renderer.cacheKeys = []; - - renderer.setSize(width, height, false); - - - - // Issue 110 workaround: - // In Firefox, if a div is positioned by percentage, its pixel position may land - // between pixels. The container itself doesn't display this, but an SVG element - // inside this container will be drawn at subpixel precision. In order to draw - // sharp lines, this must be compensated for. This doesn't seem to work inside - // iframes though (like in jsFiddle). - var subPixelFix, rect; - if (isFirefox && container.getBoundingClientRect) { - renderer.subPixelFix = subPixelFix = function () { - css(container, { left: 0, top: 0 }); - rect = container.getBoundingClientRect(); - css(container, { - left: (mathCeil(rect.left) - rect.left) + PX, - top: (mathCeil(rect.top) - rect.top) + PX - }); - }; - - // run the fix now - subPixelFix(); - - // run it on resize - addEvent(win, 'resize', subPixelFix); - } - }, - - getStyle: function (style) { - this.style = extend({ - fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', // default font - fontSize: '12px' - }, style); - return this.style; - }, - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none. #608. - */ - isHidden: function () { - return !this.boxWrapper.getBBox().width; - }, - - /** - * Destroys the renderer and its allocated members. - */ - destroy: function () { - var renderer = this, - rendererDefs = renderer.defs; - renderer.box = null; - renderer.boxWrapper = renderer.boxWrapper.destroy(); - - // Call destroy on all gradient elements - destroyObjectProperties(renderer.gradients || {}); - renderer.gradients = null; - - // Defs are null in VMLRenderer - // Otherwise, destroy them here. - if (rendererDefs) { - renderer.defs = rendererDefs.destroy(); - } - - // Remove sub pixel fix handler - // We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed - // See issue #982 - if (renderer.subPixelFix) { - removeEvent(win, 'resize', renderer.subPixelFix); - } - - renderer.alignedObjects = null; - - return null; - }, - - /** - * Create a wrapper for an SVG element - * @param {Object} nodeName - */ - createElement: function (nodeName) { - var wrapper = new this.Element(); - wrapper.init(this, nodeName); - return wrapper; - }, - - /** - * Dummy function for use in canvas renderer - */ - draw: function () {}, - - /** - * Get converted radial gradient attributes - */ - getRadialAttr: function (radialReference, gradAttr) { - return { - cx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2], - cy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2], - r: gradAttr.r * radialReference[2] - }; - }, - - /** - * Parse a simple HTML string into SVG tspans - * - * @param {Object} textNode The parent text SVG node - */ - buildText: function (wrapper) { - var textNode = wrapper.element, - renderer = this, - forExport = renderer.forExport, - textStr = pick(wrapper.textStr, '').toString(), - hasMarkup = textStr.indexOf('<') !== -1, - lines, - childNodes = textNode.childNodes, - styleRegex, - hrefRegex, - parentX = attr(textNode, 'x'), - textStyles = wrapper.styles, - width = wrapper.textWidth, - textLineHeight = textStyles && textStyles.lineHeight, - textShadow = textStyles && textStyles.textShadow, - ellipsis = textStyles && textStyles.textOverflow === 'ellipsis', - i = childNodes.length, - tempParent = width && !wrapper.added && this.box, - getLineHeight = function (tspan) { - return textLineHeight ? - pInt(textLineHeight) : - renderer.fontMetrics( - /(px|em)$/.test(tspan && tspan.style.fontSize) ? - tspan.style.fontSize : - ((textStyles && textStyles.fontSize) || renderer.style.fontSize || 12), - tspan - ).h; - }, - unescapeAngleBrackets = function (inputStr) { - return inputStr.replace(/&lt;/g, '<').replace(/&gt;/g, '>'); - }; - - /// remove old text - while (i--) { - textNode.removeChild(childNodes[i]); - } - - // Skip tspans, add text directly to text node. The forceTSpan is a hook - // used in text outline hack. - if (!hasMarkup && !textShadow && !ellipsis && textStr.indexOf(' ') === -1) { - textNode.appendChild(doc.createTextNode(unescapeAngleBrackets(textStr))); - - // Complex strings, add more logic - } else { - - styleRegex = /<.*style="([^"]+)".*>/; - hrefRegex = /<.*href="(http[^"]+)".*>/; - - if (tempParent) { - tempParent.appendChild(textNode); // attach it to the DOM to read offset width - } - - if (hasMarkup) { - lines = textStr - .replace(/<(b|strong)>/g, '<span style="font-weight:bold">') - .replace(/<(i|em)>/g, '<span style="font-style:italic">') - .replace(/<a/g, '<span') - .replace(/<\/(b|strong|i|em|a)>/g, '</span>') - .split(/<br.*?>/g); - - } else { - lines = [textStr]; - } - - - // remove empty line at end - if (lines[lines.length - 1] === '') { - lines.pop(); - } - - - // build the lines - each(lines, function (line, lineNo) { - var spans, spanNo = 0; - - line = line.replace(/<span/g, '|||<span').replace(/<\/span>/g, '</span>|||'); - spans = line.split('|||'); - - each(spans, function (span) { - if (span !== '' || spans.length === 1) { - var attributes = {}, - tspan = doc.createElementNS(SVG_NS, 'tspan'), - spanStyle; // #390 - if (styleRegex.test(span)) { - spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2'); - attr(tspan, 'style', spanStyle); - } - if (hrefRegex.test(span) && !forExport) { // Not for export - #1529 - attr(tspan, 'onclick', 'location.href=\"' + span.match(hrefRegex)[1] + '\"'); - css(tspan, { cursor: 'pointer' }); - } - - span = unescapeAngleBrackets(span.replace(/<(.|\n)*?>/g, '') || ' '); - - // Nested tags aren't supported, and cause crash in Safari (#1596) - if (span !== ' ') { - - // add the text node - tspan.appendChild(doc.createTextNode(span)); - - if (!spanNo) { // first span in a line, align it to the left - if (lineNo && parentX !== null) { - attributes.x = parentX; - } - } else { - attributes.dx = 0; // #16 - } - - // add attributes - attr(tspan, attributes); - - // Append it - textNode.appendChild(tspan); - - // first span on subsequent line, add the line height - if (!spanNo && lineNo) { - - // allow getting the right offset height in exporting in IE - if (!hasSVG && forExport) { - css(tspan, { display: 'block' }); - } - - // Set the line height based on the font size of either - // the text element or the tspan element - attr( - tspan, - 'dy', - getLineHeight(tspan) - ); - } - - /*if (width) { - renderer.breakText(wrapper, width); - }*/ - - // Check width and apply soft breaks or ellipsis - if (width) { - var words = span.replace(/([^\^])-/g, '$1- ').split(' '), // #1273 - hasWhiteSpace = spans.length > 1 || lineNo || (words.length > 1 && textStyles.whiteSpace !== 'nowrap'), - tooLong, - wasTooLong, - actualWidth, - rest = [], - dy = getLineHeight(tspan), - softLineNo = 1, - rotation = wrapper.rotation, - wordStr = span, // for ellipsis - cursor = wordStr.length, // binary search cursor - bBox; - - while ((hasWhiteSpace || ellipsis) && (words.length || rest.length)) { - wrapper.rotation = 0; // discard rotation when computing box - bBox = wrapper.getBBox(true); - actualWidth = bBox.width; - - // Old IE cannot measure the actualWidth for SVG elements (#2314) - if (!hasSVG && renderer.forExport) { - actualWidth = renderer.measureSpanWidth(tspan.firstChild.data, wrapper.styles); - } - - tooLong = actualWidth > width; - - // For ellipsis, do a binary search for the correct string length - if (wasTooLong === undefined) { - wasTooLong = tooLong; // First time - } - if (ellipsis && wasTooLong) { - cursor /= 2; - - if (wordStr === '' || (!tooLong && cursor < 0.5)) { - words = []; // All ok, break out - } else { - if (tooLong) { - wasTooLong = true; - } - wordStr = span.substring(0, wordStr.length + (tooLong ? -1 : 1) * mathCeil(cursor)); - words = [wordStr + (width > 3 ? '\u2026' : '')]; - tspan.removeChild(tspan.firstChild); - } - - // Looping down, this is the first word sequence that is not too long, - // so we can move on to build the next line. - } else if (!tooLong || words.length === 1) { - words = rest; - rest = []; - - if (words.length) { - softLineNo++; - - tspan = doc.createElementNS(SVG_NS, 'tspan'); - attr(tspan, { - dy: dy, - x: parentX - }); - if (spanStyle) { // #390 - attr(tspan, 'style', spanStyle); - } - textNode.appendChild(tspan); - } - if (actualWidth > width) { // a single word is pressing it out - width = actualWidth; - } - } else { // append to existing line tspan - tspan.removeChild(tspan.firstChild); - rest.unshift(words.pop()); - } - if (words.length) { - tspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-'))); - } - } - if (wasTooLong) { - wrapper.attr('title', wrapper.textStr); - } - wrapper.rotation = rotation; - } - - spanNo++; - } - } - }); - }); - if (tempParent) { - tempParent.removeChild(textNode); // attach it to the DOM to read offset width - } - - // Apply the text shadow - if (textShadow && wrapper.applyTextShadow) { - wrapper.applyTextShadow(textShadow); - } - } - }, - - - - /* - breakText: function (wrapper, width) { - var bBox = wrapper.getBBox(), - node = wrapper.element, - textLength = node.textContent.length, - pos = mathRound(width * textLength / bBox.width), // try this position first, based on average character width - increment = 0, - finalPos; - - if (bBox.width > width) { - while (finalPos === undefined) { - textLength = node.getSubStringLength(0, pos); - - if (textLength <= width) { - if (increment === -1) { - finalPos = pos; - } else { - increment = 1; - } - } else { - if (increment === 1) { - finalPos = pos - 1; - } else { - increment = -1; - } - } - pos += increment; - } - } - console.log(finalPos, node.getSubStringLength(0, finalPos)) - }, - */ - - /** - * Returns white for dark colors and black for bright colors - */ - getContrast: function (color) { - color = Color(color).rgba; - return color[0] + color[1] + color[2] > 384 ? '#000000' : '#FFFFFF'; - }, - - /** - * Create a button with preset states - * @param {String} text - * @param {Number} x - * @param {Number} y - * @param {Function} callback - * @param {Object} normalState - * @param {Object} hoverState - * @param {Object} pressedState - */ - button: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState, shape) { - var label = this.label(text, x, y, shape, null, null, null, null, 'button'), - curState = 0, - stateOptions, - stateStyle, - normalStyle, - hoverStyle, - pressedStyle, - disabledStyle, - verticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 }; - - // Normal state - prepare the attributes - normalState = merge({ - 'stroke-width': 1, - stroke: '#CCCCCC', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FEFEFE'], - [1, '#F6F6F6'] - ] - }, - r: 2, - padding: 5, - style: { - color: 'black' - } - }, normalState); - normalStyle = normalState.style; - delete normalState.style; - - // Hover state - hoverState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FFF'], - [1, '#ACF'] - ] - } - }, hoverState); - hoverStyle = hoverState.style; - delete hoverState.style; - - // Pressed state - pressedState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#9BD'], - [1, '#CDF'] - ] - } - }, pressedState); - pressedStyle = pressedState.style; - delete pressedState.style; - - // Disabled state - disabledState = merge(normalState, { - style: { - color: '#CCC' - } - }, disabledState); - disabledStyle = disabledState.style; - delete disabledState.style; - - // Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667). - addEvent(label.element, isMS ? 'mouseover' : 'mouseenter', function () { - if (curState !== 3) { - label.attr(hoverState) - .css(hoverStyle); - } - }); - addEvent(label.element, isMS ? 'mouseout' : 'mouseleave', function () { - if (curState !== 3) { - stateOptions = [normalState, hoverState, pressedState][curState]; - stateStyle = [normalStyle, hoverStyle, pressedStyle][curState]; - label.attr(stateOptions) - .css(stateStyle); - } - }); - - label.setState = function (state) { - label.state = curState = state; - if (!state) { - label.attr(normalState) - .css(normalStyle); - } else if (state === 2) { - label.attr(pressedState) - .css(pressedStyle); - } else if (state === 3) { - label.attr(disabledState) - .css(disabledStyle); - } - }; - - return label - .on('click', function (e) { - if (curState !== 3) { - callback.call(label, e); - } - }) - .attr(normalState) - .css(extend({ cursor: 'default' }, normalStyle)); - }, - - /** - * Make a straight line crisper by not spilling out to neighbour pixels - * @param {Array} points - * @param {Number} width - */ - crispLine: function (points, width) { - // points format: [M, 0, 0, L, 100, 0] - // normalize to a crisp line - if (points[1] === points[4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave the same. - points[1] = points[4] = mathRound(points[1]) - (width % 2 / 2); - } - if (points[2] === points[5]) { - points[2] = points[5] = mathRound(points[2]) + (width % 2 / 2); - } - return points; - }, - - - /** - * Draw a path - * @param {Array} path An SVG path in array form - */ - path: function (path) { - var attr = { - fill: NONE - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - return this.createElement('path').attr(attr); - }, - - /** - * Draw and return an SVG circle - * @param {Number} x The x position - * @param {Number} y The y position - * @param {Number} r The radius - */ - circle: function (x, y, r) { - var attr = isObject(x) ? x : { x: x, y: y, r: r }, - wrapper = this.createElement('circle'); - - wrapper.xSetter = function (value) { - this.element.setAttribute('cx', value); - }; - wrapper.ySetter = function (value) { - this.element.setAttribute('cy', value); - }; - return wrapper.attr(attr); - }, - - /** - * Draw and return an arc - * @param {Number} x X position - * @param {Number} y Y position - * @param {Number} r Radius - * @param {Number} innerR Inner radius like used in donut charts - * @param {Number} start Starting angle - * @param {Number} end Ending angle - */ - arc: function (x, y, r, innerR, start, end) { - var arc; - - if (isObject(x)) { - y = x.y; - r = x.r; - innerR = x.innerR; - start = x.start; - end = x.end; - x = x.x; - } - - // Arcs are defined as symbols for the ability to set - // attributes in attr and animate - arc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, { - innerR: innerR || 0, - start: start || 0, - end: end || 0 - }); - arc.r = r; // #959 - return arc; - }, - - /** - * Draw and return a rectangle - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Number} width - * @param {Number} height - * @param {Number} r Border corner radius - * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing - */ - rect: function (x, y, width, height, r, strokeWidth) { - - r = isObject(x) ? x.r : r; - - var wrapper = this.createElement('rect'), - attribs = isObject(x) ? x : x === UNDEFINED ? {} : { - x: x, - y: y, - width: mathMax(width, 0), - height: mathMax(height, 0) - }; - - if (strokeWidth !== UNDEFINED) { - attribs.strokeWidth = strokeWidth; - attribs = wrapper.crisp(attribs); - } - - if (r) { - attribs.r = r; - } - - wrapper.rSetter = function (value) { - attr(this.element, { - rx: value, - ry: value - }); - }; - - return wrapper.attr(attribs); - }, - - /** - * Resize the box and re-align all aligned elements - * @param {Object} width - * @param {Object} height - * @param {Boolean} animate - * - */ - setSize: function (width, height, animate) { - var renderer = this, - alignedObjects = renderer.alignedObjects, - i = alignedObjects.length; - - renderer.width = width; - renderer.height = height; - - renderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({ - width: width, - height: height - }); - - while (i--) { - alignedObjects[i].align(); - } - }, - - /** - * Create a group - * @param {String} name The group will be given a class name of 'highcharts-{name}'. - * This can be used for styling and scripting. - */ - g: function (name) { - var elem = this.createElement('g'); - return defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem; - }, - - /** - * Display an image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var attribs = { - preserveAspectRatio: NONE - }, - elemWrapper; - - // optional properties - if (arguments.length > 1) { - extend(attribs, { - x: x, - y: y, - width: width, - height: height - }); - } - - elemWrapper = this.createElement('image').attr(attribs); - - // set the href in the xlink namespace - if (elemWrapper.element.setAttributeNS) { - elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', - 'href', src); - } else { - // could be exporting in IE - // using href throws "not supported" in ie7 and under, requries regex shim to fix later - elemWrapper.element.setAttribute('hc-svg-href', src); - } - return elemWrapper; - }, - - /** - * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object. - * - * @param {Object} symbol - * @param {Object} x - * @param {Object} y - * @param {Object} radius - * @param {Object} options - */ - symbol: function (symbol, x, y, width, height, options) { - - var obj, - - // get the symbol definition function - symbolFn = this.symbols[symbol], - - // check if there's a path defined for this symbol - path = symbolFn && symbolFn( - mathRound(x), - mathRound(y), - width, - height, - options - ), - - imageRegex = /^url\((.*?)\)$/, - imageSrc, - imageSize, - centerImage; - - if (path) { - - obj = this.path(path); - // expando properties for use in animate and attr - extend(obj, { - symbolName: symbol, - x: x, - y: y, - width: width, - height: height - }); - if (options) { - extend(obj, options); - } - - - // image symbols - } else if (imageRegex.test(symbol)) { - - // On image load, set the size and position - centerImage = function (img, size) { - if (img.element) { // it may be destroyed in the meantime (#1390) - img.attr({ - width: size[0], - height: size[1] - }); - - if (!img.alignByTranslate) { // #185 - img.translate( - mathRound((width - size[0]) / 2), // #1378 - mathRound((height - size[1]) / 2) - ); - } - } - }; - - imageSrc = symbol.match(imageRegex)[1]; - imageSize = symbolSizes[imageSrc] || (options && options.width && options.height && [options.width, options.height]); - - // Ireate the image synchronously, add attribs async - obj = this.image(imageSrc) - .attr({ - x: x, - y: y - }); - obj.isImg = true; - - if (imageSize) { - centerImage(obj, imageSize); - } else { - // Initialize image to be 0 size so export will still function if there's no cached sizes. - obj.attr({ width: 0, height: 0 }); - - // Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8, - // the created element must be assigned to a variable in order to load (#292). - createElement('img', { - onload: function () { - - // Special case for SVGs on IE11, the width is not accessible until the image is - // part of the DOM (#2854). - if (this.width === 0) { - css(this, { - position: ABSOLUTE, - top: '-999em' - }); - doc.body.appendChild(this); - } - - // Center the image - centerImage(obj, symbolSizes[imageSrc] = [this.width, this.height]); - - // Clean up after #2854 workaround. - if (this.parentNode) { - this.parentNode.removeChild(this); - } - }, - src: imageSrc - }); - } - } - - return obj; - }, - - /** - * An extendable collection of functions for defining symbol paths. - */ - symbols: { - 'circle': function (x, y, w, h) { - var cpw = 0.166 * w; - return [ - M, x + w / 2, y, - 'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h, - 'C', x - cpw, y + h, x - cpw, y, x + w / 2, y, - 'Z' - ]; - }, - - 'square': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle-down': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w / 2, y + h, - 'Z' - ]; - }, - 'diamond': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h / 2, - x + w / 2, y + h, - x, y + h / 2, - 'Z' - ]; - }, - 'arc': function (x, y, w, h, options) { - var start = options.start, - radius = options.r || w || h, - end = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561) - innerRadius = options.innerR, - open = options.open, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - longArc = options.end - start < mathPI ? 0 : 1; - - return [ - M, - x + radius * cosStart, - y + radius * sinStart, - 'A', // arcTo - radius, // x radius - radius, // y radius - 0, // slanting - longArc, // long or short arc - 1, // clockwise - x + radius * cosEnd, - y + radius * sinEnd, - open ? M : L, - x + innerRadius * cosEnd, - y + innerRadius * sinEnd, - 'A', // arcTo - innerRadius, // x radius - innerRadius, // y radius - 0, // slanting - longArc, // long or short arc - 0, // clockwise - x + innerRadius * cosStart, - y + innerRadius * sinStart, - - open ? '' : 'Z' // close - ]; - }, - - /** - * Callout shape used for default tooltips, also used for rounded rectangles in VML - */ - callout: function (x, y, w, h, options) { - var arrowLength = 6, - halfDistance = 6, - r = mathMin((options && options.r) || 0, w, h), - safeDistance = r + halfDistance, - anchorX = options && options.anchorX, - anchorY = options && options.anchorY, - path; - - path = [ - 'M', x + r, y, - 'L', x + w - r, y, // top side - 'C', x + w, y, x + w, y, x + w, y + r, // top-right corner - 'L', x + w, y + h - r, // right side - 'C', x + w, y + h, x + w, y + h, x + w - r, y + h, // bottom-right corner - 'L', x + r, y + h, // bottom side - 'C', x, y + h, x, y + h, x, y + h - r, // bottom-left corner - 'L', x, y + r, // left side - 'C', x, y, x, y, x + r, y // top-right corner - ]; - - if (anchorX && anchorX > w && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace right side - path.splice(13, 3, - 'L', x + w, anchorY - halfDistance, - x + w + arrowLength, anchorY, - x + w, anchorY + halfDistance, - x + w, y + h - r - ); - } else if (anchorX && anchorX < 0 && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace left side - path.splice(33, 3, - 'L', x, anchorY + halfDistance, - x - arrowLength, anchorY, - x, anchorY - halfDistance, - x, y + r - ); - } else if (anchorY && anchorY > h && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace bottom - path.splice(23, 3, - 'L', anchorX + halfDistance, y + h, - anchorX, y + h + arrowLength, - anchorX - halfDistance, y + h, - x + r, y + h - ); - } else if (anchorY && anchorY < 0 && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace top - path.splice(3, 3, - 'L', anchorX - halfDistance, y, - anchorX, y - arrowLength, - anchorX + halfDistance, y, - w - r, y - ); - } - return path; - } - }, - - /** - * Define a clipping rectangle - * @param {String} id - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - var wrapper, - id = PREFIX + idCounter++, - - clipPath = this.createElement('clipPath').attr({ - id: id - }).add(this.defs); - - wrapper = this.rect(x, y, width, height, 0).add(clipPath); - wrapper.id = id; - wrapper.clipPath = clipPath; - wrapper.count = 0; - - return wrapper; - }, - - - - - - /** - * Add text to the SVG object - * @param {String} str - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Boolean} useHTML Use HTML to render the text - */ - text: function (str, x, y, useHTML) { - - // declare variables - var renderer = this, - fakeSVG = useCanVG || (!hasSVG && renderer.forExport), - wrapper, - attr = {}; - - if (useHTML && (renderer.allowHTML || !renderer.forExport)) { - return renderer.html(str, x, y); - } - - attr.x = Math.round(x || 0); // X is always needed for line-wrap logic - if (y) { - attr.y = Math.round(y); - } - if (str || str === 0) { - attr.text = str; - } - - wrapper = renderer.createElement('text') - .attr(attr); - - // Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063) - if (fakeSVG) { - wrapper.css({ - position: ABSOLUTE - }); - } - - if (!useHTML) { - wrapper.xSetter = function (value, key, element) { - var tspans = element.getElementsByTagName('tspan'), - tspan, - parentVal = element.getAttribute(key), - i; - for (i = 0; i < tspans.length; i++) { - tspan = tspans[i]; - // If the x values are equal, the tspan represents a linebreak - if (tspan.getAttribute(key) === parentVal) { - tspan.setAttribute(key, value); - } - } - element.setAttribute(key, value); - }; - } - - return wrapper; - }, - - /** - * Utility to return the baseline offset and total line height from the font size - */ - fontMetrics: function (fontSize, elem) { - var lineHeight, - baseline, - style; - - fontSize = fontSize || this.style.fontSize; - if (!fontSize && elem && win.getComputedStyle) { - elem = elem.element || elem; // SVGElement - style = win.getComputedStyle(elem, ''); - fontSize = style && style.fontSize; // #4309, the style doesn't exist inside a hidden iframe in Firefox - } - fontSize = /px/.test(fontSize) ? pInt(fontSize) : /em/.test(fontSize) ? parseFloat(fontSize) * 12 : 12; - - // Empirical values found by comparing font size and bounding box height. - // Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/ - lineHeight = fontSize < 24 ? fontSize + 3 : mathRound(fontSize * 1.2); - baseline = mathRound(lineHeight * 0.8); - - return { - h: lineHeight, - b: baseline, - f: fontSize - }; - }, - - /** - * Correct X and Y positioning of a label for rotation (#1764) - */ - rotCorr: function (baseline, rotation, alterY) { - var y = baseline; - if (rotation && alterY) { - y = mathMax(y * mathCos(rotation * deg2rad), 4); - } - return { - x: (-baseline / 3) * mathSin(rotation * deg2rad), - y: y - }; - }, - - /** - * Add a label, a text item that can hold a colored or gradient background - * as well as a border and shadow. - * @param {string} str - * @param {Number} x - * @param {Number} y - * @param {String} shape - * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the - * coordinates it should be pinned to - * @param {Number} anchorY - * @param {Boolean} baseline Whether to position the label relative to the text baseline, - * like renderer.text, or to the upper border of the rectangle. - * @param {String} className Class name for the group - */ - label: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) { - - var renderer = this, - wrapper = renderer.g(className), - text = renderer.text('', 0, 0, useHTML) - .attr({ - zIndex: 1 - }), - //.add(wrapper), - box, - bBox, - alignFactor = 0, - padding = 3, - paddingLeft = 0, - width, - height, - wrapperX, - wrapperY, - crispAdjust = 0, - deferredAttr = {}, - baselineOffset, - needsBox, - updateBoxSize, - updateTextPadding, - boxAttr; - - /** - * This function runs after the label is added to the DOM (when the bounding box is - * available), and after the text of the label is updated to detect the new bounding - * box and reflect it in the border box. - */ - updateBoxSize = function () { - var boxX, - boxY, - style = text.element.style; - - bBox = (width === undefined || height === undefined || wrapper.styles.textAlign) && defined(text.textStr) && - text.getBBox(); //#3295 && 3514 box failure when string equals 0 - wrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft; - wrapper.height = (height || bBox.height || 0) + 2 * padding; - - // update the label-scoped y offset - baselineOffset = padding + renderer.fontMetrics(style && style.fontSize, text).b; - - - if (needsBox) { - - if (!box) { - // create the border box if it is not already present - boxX = crispAdjust; - boxY = (baseline ? -baselineOffset : 0) + crispAdjust; - - wrapper.box = box = shape ? - renderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height, deferredAttr) : - renderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]); - - if (!box.isImg) { // #4324, fill "none" causes it to be ignored by mouse events in IE - box.attr('fill', NONE); - } - box.add(wrapper); - } - - // apply the box attributes - if (!box.isImg) { // #1630 - box.attr(extend({ - width: mathRound(wrapper.width), - height: mathRound(wrapper.height) - }, deferredAttr)); - } - deferredAttr = null; - } - }; - - /** - * This function runs after setting text or padding, but only if padding is changed - */ - updateTextPadding = function () { - var styles = wrapper.styles, - textAlign = styles && styles.textAlign, - x = paddingLeft + padding, - y; - - // determin y based on the baseline - y = baseline ? 0 : baselineOffset; - - // compensate for alignment - if (defined(width) && bBox && (textAlign === 'center' || textAlign === 'right')) { - x += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width); - } - - // update if anything changed - if (x !== text.x || y !== text.y) { - text.attr('x', x); - if (y !== UNDEFINED) { - text.attr('y', y); - } - } - - // record current values - text.x = x; - text.y = y; - }; - - /** - * Set a box attribute, or defer it if the box is not yet created - * @param {Object} key - * @param {Object} value - */ - boxAttr = function (key, value) { - if (box) { - box.attr(key, value); - } else { - deferredAttr[key] = value; - } - }; - - /** - * After the text element is added, get the desired size of the border box - * and add it before the text in the DOM. - */ - wrapper.onAdd = function () { - text.add(wrapper); - wrapper.attr({ - text: (str || str === 0) ? str : '', // alignment is available now // #3295: 0 not rendered if given as a value - x: x, - y: y - }); - - if (box && defined(anchorX)) { - wrapper.attr({ - anchorX: anchorX, - anchorY: anchorY - }); - } - }; - - /* - * Add specific attribute setters. - */ - - // only change local variables - wrapper.widthSetter = function (value) { - width = value; - }; - wrapper.heightSetter = function (value) { - height = value; - }; - wrapper.paddingSetter = function (value) { - if (defined(value) && value !== padding) { - padding = wrapper.padding = value; - updateTextPadding(); - } - }; - wrapper.paddingLeftSetter = function (value) { - if (defined(value) && value !== paddingLeft) { - paddingLeft = value; - updateTextPadding(); - } - }; - - - // change local variable and prevent setting attribute on the group - wrapper.alignSetter = function (value) { - value = { left: 0, center: 0.5, right: 1 }[value]; - if (value !== alignFactor) { - alignFactor = value; - if (bBox) { // Bounding box exists, means we're dynamically changing - wrapper.attr({ x: x }); - } - } - }; - - // apply these to the box and the text alike - wrapper.textSetter = function (value) { - if (value !== UNDEFINED) { - text.textSetter(value); - } - updateBoxSize(); - updateTextPadding(); - }; - - // apply these to the box but not to the text - wrapper['stroke-widthSetter'] = function (value, key) { - if (value) { - needsBox = true; - } - crispAdjust = value % 2 / 2; - boxAttr(key, value); - }; - wrapper.strokeSetter = wrapper.fillSetter = wrapper.rSetter = function (value, key) { - if (key === 'fill' && value) { - needsBox = true; - } - boxAttr(key, value); - }; - wrapper.anchorXSetter = function (value, key) { - anchorX = value; - boxAttr(key, mathRound(value) - crispAdjust - wrapperX); - }; - wrapper.anchorYSetter = function (value, key) { - anchorY = value; - boxAttr(key, value - wrapperY); - }; - - // rename attributes - wrapper.xSetter = function (value) { - wrapper.x = value; // for animation getter - if (alignFactor) { - value -= alignFactor * ((width || bBox.width) + 2 * padding); - } - wrapperX = mathRound(value); - wrapper.attr('translateX', wrapperX); - }; - wrapper.ySetter = function (value) { - wrapperY = wrapper.y = mathRound(value); - wrapper.attr('translateY', wrapperY); - }; - - // Redirect certain methods to either the box or the text - var baseCss = wrapper.css; - return extend(wrapper, { - /** - * Pick up some properties and apply them to the text instead of the wrapper - */ - css: function (styles) { - if (styles) { - var textStyles = {}; - styles = merge(styles); // create a copy to avoid altering the original object (#537) - each(wrapper.textProps, function (prop) { - if (styles[prop] !== UNDEFINED) { - textStyles[prop] = styles[prop]; - delete styles[prop]; - } - }); - text.css(textStyles); - } - return baseCss.call(wrapper, styles); - }, - /** - * Return the bounding box of the box, not the group - */ - getBBox: function () { - return { - width: bBox.width + 2 * padding, - height: bBox.height + 2 * padding, - x: bBox.x - padding, - y: bBox.y - padding - }; - }, - /** - * Apply the shadow to the box - */ - shadow: function (b) { - if (box) { - box.shadow(b); - } - return wrapper; - }, - /** - * Destroy and release memory. - */ - destroy: function () { - - // Added by button implementation - removeEvent(wrapper.element, 'mouseenter'); - removeEvent(wrapper.element, 'mouseleave'); - - if (text) { - text = text.destroy(); - } - if (box) { - box = box.destroy(); - } - // Call base implementation to destroy the rest - SVGElement.prototype.destroy.call(wrapper); - - // Release local pointers (#1298) - wrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = null; - } - }); - } - }; // end SVGRenderer - - - // general renderer - Renderer = SVGRenderer; - // extend SvgElement for useHTML option - extend(SVGElement.prototype, { - /** - * Apply CSS to HTML elements. This is used in text within SVG rendering and - * by the VML renderer - */ - htmlCss: function (styles) { - var wrapper = this, - element = wrapper.element, - textWidth = styles && element.tagName === 'SPAN' && styles.width; - - if (textWidth) { - delete styles.width; - wrapper.textWidth = textWidth; - wrapper.updateTransform(); - } - if (styles && styles.textOverflow === 'ellipsis') { - styles.whiteSpace = 'nowrap'; - styles.overflow = 'hidden'; - } - wrapper.styles = extend(wrapper.styles, styles); - css(wrapper.element, styles); - - return wrapper; - }, - - /** - * VML and useHTML method for calculating the bounding box based on offsets - * @param {Boolean} refresh Whether to force a fresh value from the DOM or to - * use the cached value - * - * @return {Object} A hash containing values for x, y, width and height - */ - - htmlGetBBox: function () { - var wrapper = this, - element = wrapper.element; - - // faking getBBox in exported SVG in legacy IE - // faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?) - if (element.nodeName === 'text') { - element.style.position = ABSOLUTE; - } - - return { - x: element.offsetLeft, - y: element.offsetTop, - width: element.offsetWidth, - height: element.offsetHeight - }; - }, - - /** - * VML override private method to update elements based on internal - * properties based on SVG transform - */ - htmlUpdateTransform: function () { - // aligning non added elements is expensive - if (!this.added) { - this.alignOnAdd = true; - return; - } - - var wrapper = this, - renderer = wrapper.renderer, - elem = wrapper.element, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - x = wrapper.x || 0, - y = wrapper.y || 0, - align = wrapper.textAlign || 'left', - alignCorrection = { left: 0, center: 0.5, right: 1 }[align], - shadows = wrapper.shadows, - styles = wrapper.styles; - - // apply translate - css(elem, { - marginLeft: translateX, - marginTop: translateY - }); - if (shadows) { // used in labels/tooltip - each(shadows, function (shadow) { - css(shadow, { - marginLeft: translateX + 1, - marginTop: translateY + 1 - }); - }); - } - - // apply inversion - if (wrapper.inverted) { // wrapper is a group - each(elem.childNodes, function (child) { - renderer.invertChild(child, elem); - }); - } - - if (elem.tagName === 'SPAN') { - - var width, - rotation = wrapper.rotation, - baseline, - textWidth = pInt(wrapper.textWidth), - currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth, wrapper.textAlign].join(','); - - if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed - - - baseline = renderer.fontMetrics(elem.style.fontSize).b; - - // Renderer specific handling of span rotation - if (defined(rotation)) { - wrapper.setSpanRotation(rotation, alignCorrection, baseline); - } - - width = pick(wrapper.elemWidth, elem.offsetWidth); - - // Update textWidth - if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254 - css(elem, { - width: textWidth + PX, - display: 'block', - whiteSpace: (styles && styles.whiteSpace) || 'normal' // #3331 - }); - width = textWidth; - } - - wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align); - } - - // apply position with correction - css(elem, { - left: (x + (wrapper.xCorr || 0)) + PX, - top: (y + (wrapper.yCorr || 0)) + PX - }); - - // force reflow in webkit to apply the left and top on useHTML element (#1249) - if (isWebKit) { - baseline = elem.offsetHeight; // assigned to baseline for lint purpose - } - - // record current text transform - wrapper.cTT = currentTextTransform; - } - }, - - /** - * Set the rotation of an individual HTML span - */ - setSpanRotation: function (rotation, alignCorrection, baseline) { - var rotationStyle = {}, - cssTransformKey = isMS ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : ''; - - rotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)'; - rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin = (alignCorrection * 100) + '% ' + baseline + 'px'; - css(this.element, rotationStyle); - }, - - /** - * Get the correction in X and Y positioning as the element is rotated. - */ - getSpanCorrection: function (width, baseline, alignCorrection) { - this.xCorr = -width * alignCorrection; - this.yCorr = -baseline; - } - }); - - // Extend SvgRenderer for useHTML option. - extend(SVGRenderer.prototype, { - /** - * Create HTML text node. This is used by the VML renderer as well as the SVG - * renderer through the useHTML option. - * - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - html: function (str, x, y) { - var wrapper = this.createElement('span'), - element = wrapper.element, - renderer = wrapper.renderer; - - // Text setter - wrapper.textSetter = function (value) { - if (value !== element.innerHTML) { - delete this.bBox; - } - element.innerHTML = this.textStr = value; - wrapper.htmlUpdateTransform(); - }; - - // Various setters which rely on update transform - wrapper.xSetter = wrapper.ySetter = wrapper.alignSetter = wrapper.rotationSetter = function (value, key) { - if (key === 'align') { - key = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML. - } - wrapper[key] = value; - wrapper.htmlUpdateTransform(); - }; - - // Set the default attributes - wrapper - .attr({ - text: str, - x: mathRound(x), - y: mathRound(y) - }) - .css({ - position: ABSOLUTE, - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize - }); - - // Keep the whiteSpace style outside the wrapper.styles collection - element.style.whiteSpace = 'nowrap'; - - // Use the HTML specific .css method - wrapper.css = wrapper.htmlCss; - - // This is specific for HTML within SVG - if (renderer.isSVG) { - wrapper.add = function (svgGroupWrapper) { - - var htmlGroup, - container = renderer.box.parentNode, - parentGroup, - parents = []; - - this.parentGroup = svgGroupWrapper; - - // Create a mock group to hold the HTML elements - if (svgGroupWrapper) { - htmlGroup = svgGroupWrapper.div; - if (!htmlGroup) { - - // Read the parent chain into an array and read from top down - parentGroup = svgGroupWrapper; - while (parentGroup) { - - parents.push(parentGroup); - - // Move up to the next parent group - parentGroup = parentGroup.parentGroup; - } - - // Ensure dynamically updating position when any parent is translated - each(parents.reverse(), function (parentGroup) { - var htmlGroupStyle, - cls = attr(parentGroup.element, 'class'); - - if (cls) { - cls = { className: cls }; - } // else null - - // Create a HTML div and append it to the parent div to emulate - // the SVG group structure - htmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, cls, { - position: ABSOLUTE, - left: (parentGroup.translateX || 0) + PX, - top: (parentGroup.translateY || 0) + PX - }, htmlGroup || container); // the top group is appended to container - - // Shortcut - htmlGroupStyle = htmlGroup.style; - - // Set listeners to update the HTML div's position whenever the SVG group - // position is changed - extend(parentGroup, { - translateXSetter: function (value, key) { - htmlGroupStyle.left = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - }, - translateYSetter: function (value, key) { - htmlGroupStyle.top = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - } - }); - - // These properties are set as attributes on the SVG group, and as - // identical CSS properties on the div. (#3542) - each(['opacity', 'visibility'], function (prop) { - wrap(parentGroup, prop + 'Setter', function (proceed, value, key, elem) { - proceed.call(this, value, key, elem); - htmlGroupStyle[key] = value; - }); - }); - }); - - } - } else { - htmlGroup = container; - } - - htmlGroup.appendChild(element); - - // Shared with VML: - wrapper.added = true; - if (wrapper.alignOnAdd) { - wrapper.htmlUpdateTransform(); - } - - return wrapper; - }; - } - return wrapper; - } - }); - - - /* **************************************************************************** - * * - * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - * For applications and websites that don't need IE support, like platform * - * targeted mobile apps and web apps, this code can be removed. * - * * - *****************************************************************************/ - - /** - * @constructor - */ - var VMLRenderer, VMLElement; - if (!hasSVG && !useCanVG) { - - /** - * The VML element wrapper. - */ - VMLElement = { - - /** - * Initialize a new VML element wrapper. It builds the markup as a string - * to minimize DOM traffic. - * @param {Object} renderer - * @param {Object} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this, - markup = ['<', nodeName, ' filled="f" stroked="f"'], - style = ['position: ', ABSOLUTE, ';'], - isDiv = nodeName === DIV; - - // divs and shapes need size - if (nodeName === 'shape' || isDiv) { - style.push('left:0;top:0;width:1px;height:1px;'); - } - style.push('visibility: ', isDiv ? HIDDEN : VISIBLE); - - markup.push(' style="', style.join(''), '"/>'); - - // create element with default attributes and style - if (nodeName) { - markup = isDiv || nodeName === 'span' || nodeName === 'img' ? - markup.join('') : - renderer.prepVML(markup); - wrapper.element = createElement(markup); - } - - wrapper.renderer = renderer; - }, - - /** - * Add the node to the given parent - * @param {Object} parent - */ - add: function (parent) { - var wrapper = this, - renderer = wrapper.renderer, - element = wrapper.element, - box = renderer.box, - inverted = parent && parent.inverted, - - // get the parent node - parentNode = parent ? - parent.element || parent : - box; - - if (parent) { - this.parentGroup = parent; - } - - // if the parent group is inverted, apply inversion on all children - if (inverted) { // only on groups - renderer.invertChild(element, parentNode); - } - - // append it - parentNode.appendChild(element); - - // align text after adding to be able to read offset - wrapper.added = true; - if (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) { - wrapper.updateTransform(); - } - - // fire an event for internal hooks - if (wrapper.onAdd) { - wrapper.onAdd(); - } - - return wrapper; - }, - - /** - * VML always uses htmlUpdateTransform - */ - updateTransform: SVGElement.prototype.htmlUpdateTransform, - - /** - * Set the rotation of a span with oldIE's filter - */ - setSpanRotation: function () { - // Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented - // but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+ - // has support for CSS3 transform. The getBBox method also needs to be updated - // to compensate for the rotation, like it currently does for SVG. - // Test case: http://jsfiddle.net/highcharts/Ybt44/ - - var rotation = this.rotation, - costheta = mathCos(rotation * deg2rad), - sintheta = mathSin(rotation * deg2rad); - - css(this.element, { - filter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta, - ', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta, - ', sizingMethod=\'auto expand\')'].join('') : NONE - }); - }, - - /** - * Get the positioning correction for the span after rotating. - */ - getSpanCorrection: function (width, baseline, alignCorrection, rotation, align) { - - var costheta = rotation ? mathCos(rotation * deg2rad) : 1, - sintheta = rotation ? mathSin(rotation * deg2rad) : 0, - height = pick(this.elemHeight, this.element.offsetHeight), - quad, - nonLeft = align && align !== 'left'; - - // correct x and y - this.xCorr = costheta < 0 && -width; - this.yCorr = sintheta < 0 && -height; - - // correct for baseline and corners spilling out after rotation - quad = costheta * sintheta < 0; - this.xCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection); - this.yCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1); - // correct for the length/height of the text - if (nonLeft) { - this.xCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1); - if (rotation) { - this.yCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1); - } - css(this.element, { - textAlign: align - }); - } - }, - - /** - * Converts a subset of an SVG path definition to its VML counterpart. Takes an array - * as the parameter and returns a string. - */ - pathToVML: function (value) { - // convert paths - var i = value.length, - path = []; - - while (i--) { - - // Multiply by 10 to allow subpixel precision. - // Substracting half a pixel seems to make the coordinates - // align with SVG, but this hasn't been tested thoroughly - if (isNumber(value[i])) { - path[i] = mathRound(value[i] * 10) - 5; - } else if (value[i] === 'Z') { // close the path - path[i] = 'x'; - } else { - path[i] = value[i]; - - // When the start X and end X coordinates of an arc are too close, - // they are rounded to the same value above. In this case, substract or - // add 1 from the end X and Y positions. #186, #760, #1371, #1410. - if (value.isArc && (value[i] === 'wa' || value[i] === 'at')) { - // Start and end X - if (path[i + 5] === path[i + 7]) { - path[i + 7] += value[i + 7] > value[i + 5] ? 1 : -1; - } - // Start and end Y - if (path[i + 6] === path[i + 8]) { - path[i + 8] += value[i + 8] > value[i + 6] ? 1 : -1; - } - } - } - } - - - // Loop up again to handle path shortcuts (#2132) - /*while (i++ < path.length) { - if (path[i] === 'H') { // horizontal line to - path[i] = 'L'; - path.splice(i + 2, 0, path[i - 1]); - } else if (path[i] === 'V') { // vertical line to - path[i] = 'L'; - path.splice(i + 1, 0, path[i - 2]); - } - }*/ - return path.join(' ') || 'x'; - }, - - /** - * Set the element's clipping to a predefined rectangle - * - * @param {String} id The id of the clip rectangle - */ - clip: function (clipRect) { - var wrapper = this, - clipMembers, - cssRet; - - if (clipRect) { - clipMembers = clipRect.members; - erase(clipMembers, wrapper); // Ensure unique list of elements (#1258) - clipMembers.push(wrapper); - wrapper.destroyClip = function () { - erase(clipMembers, wrapper); - }; - cssRet = clipRect.getCSS(wrapper); - - } else { - if (wrapper.destroyClip) { - wrapper.destroyClip(); - } - cssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214 - } - - return wrapper.css(cssRet); - - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: SVGElement.prototype.htmlCss, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - // discardElement will detach the node from its parent before attaching it - // to the garbage bin. Therefore it is important that the node is attached and have parent. - if (element.parentNode) { - discardElement(element); - } - }, - - /** - * Extend element.destroy by removing it from the clip members array - */ - destroy: function () { - if (this.destroyClip) { - this.destroyClip(); - } - - return SVGElement.prototype.destroy.apply(this); - }, - - /** - * Add an event listener. VML override for normalizing event parameters. - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - // simplest possible event model for internal use - this.element['on' + eventType] = function () { - var evt = win.event; - evt.target = evt.srcElement; - handler(evt); - }; - return this; - }, - - /** - * In stacked columns, cut off the shadows so that they don't overlap - */ - cutOffPath: function (path, length) { - - var len; - - path = path.split(/[ ,]/); - len = path.length; - - if (len === 9 || len === 11) { - path[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length; - } - return path.join(' '); - }, - - /** - * Apply a drop shadow by copying elements and giving them different strokes - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - element = this.element, - renderer = this.renderer, - shadow, - elemStyle = element.style, - markup, - path = element.path, - strokeWidth, - modifiedPath, - shadowWidth, - shadowElementOpacity; - - // some times empty paths are not strings - if (path && typeof path.value !== 'string') { - path = 'x'; - } - modifiedPath = path; - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - for (i = 1; i <= 3; i++) { - - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - - // Cut off shadows for stacked column items - if (cutOff) { - modifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5); - } - - markup = ['<shape isShadow="true" strokeweight="', strokeWidth, - '" filled="false" path="', modifiedPath, - '" coordsize="10 10" style="', element.style.cssText, '" />']; - - shadow = createElement(renderer.prepVML(markup), - null, { - left: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1), - top: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1) - } - ); - if (cutOff) { - shadow.cutOff = strokeWidth + 1; - } - - // apply the opacity - markup = ['<stroke color="', shadowOptions.color || 'black', '" opacity="', shadowElementOpacity * i, '"/>']; - createElement(renderer.prepVML(markup), null, null, shadow); - - - // insert it - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - // record it - shadows.push(shadow); - - } - - this.shadows = shadows; - } - return this; - }, - updateShadows: noop, // Used in SVG only - - setAttr: function (key, value) { - if (docMode8) { // IE8 setAttribute bug - this.element[key] = value; - } else { - this.element.setAttribute(key, value); - } - }, - classSetter: function (value) { - // IE8 Standards mode has problems retrieving the className unless set like this - this.element.className = value; - }, - dashstyleSetter: function (value, key, element) { - var strokeElem = element.getElementsByTagName('stroke')[0] || - createElement(this.renderer.prepVML(['<stroke/>']), null, null, element); - strokeElem[key] = value || 'solid'; - this[key] = value; /* because changing stroke-width will change the dash length - and cause an epileptic effect */ - }, - dSetter: function (value, key, element) { - var i, - shadows = this.shadows; - value = value || []; - this.d = value.join && value.join(' '); // used in getter for animation - - element.path = value = this.pathToVML(value); - - // update shadows - if (shadows) { - i = shadows.length; - while (i--) { - shadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value; - } - } - this.setAttr(key, value); - }, - fillSetter: function (value, key, element) { - var nodeName = element.nodeName; - if (nodeName === 'SPAN') { // text color - element.style.color = value; - } else if (nodeName !== 'IMG') { // #1336 - element.filled = value !== NONE; - this.setAttr('fillcolor', this.renderer.color(value, element, key, this)); - } - }, - 'fill-opacitySetter': function (value, key, element) { - createElement( - this.renderer.prepVML(['<', key.split('-')[0], ' opacity="', value, '"/>']), - null, - null, - element - ); - }, - opacitySetter: noop, // Don't bother - animation is too slow and filters introduce artifacts - rotationSetter: function (value, key, element) { - var style = element.style; - this[key] = style[key] = value; // style is for #1873 - - // Correction for the 1x1 size of the shape container. Used in gauge needles. - style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX; - style.top = mathRound(mathCos(value * deg2rad)) + PX; - }, - strokeSetter: function (value, key, element) { - this.setAttr('strokecolor', this.renderer.color(value, element, key, this)); - }, - 'stroke-widthSetter': function (value, key, element) { - element.stroked = !!value; // VML "stroked" attribute - this[key] = value; // used in getter, issue #113 - if (isNumber(value)) { - value += PX; - } - this.setAttr('strokeweight', value); - }, - titleSetter: function (value, key) { - this.setAttr(key, value); - }, - visibilitySetter: function (value, key, element) { - - // Handle inherited visibility - if (value === 'inherit') { - value = VISIBLE; - } - - // Let the shadow follow the main element - if (this.shadows) { - each(this.shadows, function (shadow) { - shadow.style[key] = value; - }); - } - - // Instead of toggling the visibility CSS property, move the div out of the viewport. - // This works around #61 and #586 - if (element.nodeName === 'DIV') { - value = value === HIDDEN ? '-999em' : 0; - - // In order to redraw, IE7 needs the div to be visible when tucked away - // outside the viewport. So the visibility is actually opposite of - // the expected value. This applies to the tooltip only. - if (!docMode8) { - element.style[key] = value ? VISIBLE : HIDDEN; - } - key = 'top'; - } - element.style[key] = value; - }, - xSetter: function (value, key, element) { - this[key] = value; // used in getter - - if (key === 'x') { - key = 'left'; - } else if (key === 'y') { - key = 'top'; - }/* else { - value = mathMax(0, value); // don't set width or height below zero (#311) - }*/ - - // clipping rectangle special - if (this.updateClipping) { - this[key] = value; // the key is now 'left' or 'top' for 'x' and 'y' - this.updateClipping(); - } else { - // normal - element.style[key] = value; - } - }, - zIndexSetter: function (value, key, element) { - element.style[key] = value; - } - }; - VMLElement['stroke-opacitySetter'] = VMLElement['fill-opacitySetter']; - - Highcharts.VMLElement = VMLElement = extendClass(SVGElement, VMLElement); - - // Some shared setters - VMLElement.prototype.ySetter = - VMLElement.prototype.widthSetter = - VMLElement.prototype.heightSetter = - VMLElement.prototype.xSetter; - - - /** - * The VML renderer - */ - var VMLRendererExtension = { // inherit SVGRenderer - - Element: VMLElement, - isIE8: userAgent.indexOf('MSIE 8.0') > -1, - - - /** - * Initialize the VMLRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - */ - init: function (container, width, height, style) { - var renderer = this, - boxWrapper, - box, - css; - - renderer.alignedObjects = []; - - boxWrapper = renderer.createElement(DIV) - .css(extend(this.getStyle(style), { position: 'relative' })); - box = boxWrapper.element; - container.appendChild(boxWrapper.element); - - - // generate the containing box - renderer.isVML = true; - renderer.box = box; - renderer.boxWrapper = boxWrapper; - renderer.gradients = {}; - renderer.cache = {}; // Cache for numerical bounding boxes - renderer.cacheKeys = []; - - - renderer.setSize(width, height, false); - - // The only way to make IE6 and IE7 print is to use a global namespace. However, - // with IE8 the only way to make the dynamic shapes visible in screen and print mode - // seems to be to add the xmlns attribute and the behaviour style inline. - if (!doc.namespaces.hcv) { - - doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'); - - // Setup default CSS (#2153, #2368, #2384) - css = 'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' + - '{ behavior:url(#default#VML); display: inline-block; } '; - try { - doc.createStyleSheet().cssText = css; - } catch (e) { - doc.styleSheets[0].cssText += css; - } - - } - }, - - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none - */ - isHidden: function () { - return !this.box.offsetWidth; - }, - - /** - * Define a clipping rectangle. In VML it is accomplished by storing the values - * for setting the CSS style to all associated members. - * - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - - // create a dummy element - var clipRect = this.createElement(), - isObj = isObject(x); - - // mimic a rectangle with its style object for automatic updating in attr - return extend(clipRect, { - members: [], - count: 0, - left: (isObj ? x.x : x) + 1, - top: (isObj ? x.y : y) + 1, - width: (isObj ? x.width : width) - 1, - height: (isObj ? x.height : height) - 1, - getCSS: function (wrapper) { - var element = wrapper.element, - nodeName = element.nodeName, - isShape = nodeName === 'shape', - inverted = wrapper.inverted, - rect = this, - top = rect.top - (isShape ? element.offsetTop : 0), - left = rect.left, - right = left + rect.width, - bottom = top + rect.height, - ret = { - clip: 'rect(' + - mathRound(inverted ? left : top) + 'px,' + - mathRound(inverted ? bottom : right) + 'px,' + - mathRound(inverted ? right : bottom) + 'px,' + - mathRound(inverted ? top : left) + 'px)' - }; - - // issue 74 workaround - if (!inverted && docMode8 && nodeName === 'DIV') { - extend(ret, { - width: right + PX, - height: bottom + PX - }); - } - return ret; - }, - - // used in attr and animation to update the clipping of all members - updateClipping: function () { - each(clipRect.members, function (member) { - if (member.element) { // Deleted series, like in stock/members/series-remove demo. Should be removed from members, but this will do. - member.css(clipRect.getCSS(member)); - } - }); - } - }); - - }, - - - /** - * Take a color and return it if it's a string, make it a gradient if it's a - * gradient configuration object, and apply opacity. - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop, wrapper) { - var renderer = this, - colorObject, - regexRgba = /^rgba/, - markup, - fillType, - ret = NONE; - - // Check for linear or radial gradient - if (color && color.linearGradient) { - fillType = 'gradient'; - } else if (color && color.radialGradient) { - fillType = 'pattern'; - } - - - if (fillType) { - - var stopColor, - stopOpacity, - gradient = color.linearGradient || color.radialGradient, - x1, - y1, - x2, - y2, - opacity1, - opacity2, - color1, - color2, - fillAttr = '', - stops = color.stops, - firstStop, - lastStop, - colors = [], - addFillNode = function () { - // Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - markup = ['<fill colors="' + colors.join(',') + '" opacity="', opacity2, '" o:opacity2="', opacity1, - '" type="', fillType, '" ', fillAttr, 'focus="100%" method="any" />']; - createElement(renderer.prepVML(markup), null, null, elem); - }; - - // Extend from 0 to 1 - firstStop = stops[0]; - lastStop = stops[stops.length - 1]; - if (firstStop[0] > 0) { - stops.unshift([ - 0, - firstStop[1] - ]); - } - if (lastStop[0] < 1) { - stops.push([ - 1, - lastStop[1] - ]); - } - - // Compute the stops - each(stops, function (stop, i) { - if (regexRgba.test(stop[1])) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - - // Build the color attribute - colors.push((stop[0] * 100) + '% ' + stopColor); - - // Only start and end opacities are allowed, so we use the first and the last - if (!i) { - opacity1 = stopOpacity; - color2 = stopColor; - } else { - opacity2 = stopOpacity; - color1 = stopColor; - } - }); - - // Apply the gradient to fills only. - if (prop === 'fill') { - - // Handle linear gradient angle - if (fillType === 'gradient') { - x1 = gradient.x1 || gradient[0] || 0; - y1 = gradient.y1 || gradient[1] || 0; - x2 = gradient.x2 || gradient[2] || 0; - y2 = gradient.y2 || gradient[3] || 0; - fillAttr = 'angle="' + (90 - math.atan( - (y2 - y1) / // y vector - (x2 - x1) // x vector - ) * 180 / mathPI) + '"'; - - addFillNode(); - - // Radial (circular) gradient - } else { - - var r = gradient.r, - sizex = r * 2, - sizey = r * 2, - cx = gradient.cx, - cy = gradient.cy, - radialReference = elem.radialReference, - bBox, - applyRadialGradient = function () { - if (radialReference) { - bBox = wrapper.getBBox(); - cx += (radialReference[0] - bBox.x) / bBox.width - 0.5; - cy += (radialReference[1] - bBox.y) / bBox.height - 0.5; - sizex *= radialReference[2] / bBox.width; - sizey *= radialReference[2] / bBox.height; - } - fillAttr = 'src="' + defaultOptions.global.VMLRadialGradientURL + '" ' + - 'size="' + sizex + ',' + sizey + '" ' + - 'origin="0.5,0.5" ' + - 'position="' + cx + ',' + cy + '" ' + - 'color2="' + color2 + '" '; - - addFillNode(); - }; - - // Apply radial gradient - if (wrapper.added) { - applyRadialGradient(); - } else { - // We need to know the bounding box to get the size and position right - wrapper.onAdd = applyRadialGradient; - } - - // The fill element's color attribute is broken in IE8 standards mode, so we - // need to set the parent shape's fillcolor attribute instead. - ret = color1; - } - - // Gradients are not supported for VML stroke, return the first color. #722. - } else { - ret = stopColor; - } - - // If the color is an rgba color, split it and add a fill node - // to hold the opacity component - } else if (regexRgba.test(color) && elem.tagName !== 'IMG') { - - colorObject = Color(color); - - wrapper[prop + '-opacitySetter'](colorObject.get('a'), prop, elem); - - ret = colorObject.get('rgb'); - - - } else { - var propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node - if (propNodes.length) { - propNodes[0].opacity = 1; - propNodes[0].type = 'solid'; - } - ret = color; - } - - return ret; - }, - - /** - * Take a VML string and prepare it for either IE8 or IE6/IE7. - * @param {Array} markup A string array of the VML markup to prepare - */ - prepVML: function (markup) { - var vmlStyle = 'display:inline-block;behavior:url(#default#VML);', - isIE8 = this.isIE8; - - markup = markup.join(''); - - if (isIE8) { // add xmlns and style inline - markup = markup.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />'); - if (markup.indexOf('style="') === -1) { - markup = markup.replace('/>', ' style="' + vmlStyle + '" />'); - } else { - markup = markup.replace('style="', 'style="' + vmlStyle); - } - - } else { // add namespace - markup = markup.replace('<', '<hcv:'); - } - - return markup; - }, - - /** - * Create rotated and aligned text - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - text: SVGRenderer.prototype.html, - - /** - * Create and return a path element - * @param {Array} path - */ - path: function (path) { - var attr = { - // subpixel precision down to 0.1 (width and height = 1px) - coordsize: '10 10' - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - // create the shape - return this.createElement('shape').attr(attr); - }, - - /** - * Create and return a circle element. In VML circles are implemented as - * shapes, which is faster than v:oval - * @param {Number} x - * @param {Number} y - * @param {Number} r - */ - circle: function (x, y, r) { - var circle = this.symbol('circle'); - if (isObject(x)) { - r = x.r; - y = x.y; - x = x.x; - } - circle.isCircle = true; // Causes x and y to mean center (#1682) - circle.r = r; - return circle.attr({ x: x, y: y }); - }, - - /** - * Create a group using an outer div and an inner v:group to allow rotating - * and flipping. A simple v:group would have problems with positioning - * child HTML elements and CSS clip. - * - * @param {String} name The name of the group - */ - g: function (name) { - var wrapper, - attribs; - - // set the class name - if (name) { - attribs = { 'className': PREFIX + name, 'class': PREFIX + name }; - } - - // the div to hold HTML and clipping - wrapper = this.createElement(DIV).attr(attribs); - - return wrapper; - }, - - /** - * VML override to create a regular HTML image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var obj = this.createElement('img') - .attr({ src: src }); - - if (arguments.length > 1) { - obj.attr({ - x: x, - y: y, - width: width, - height: height - }); - } - return obj; - }, - - /** - * For rectangles, VML uses a shape for rect to overcome bugs and rotation problems - */ - createElement: function (nodeName) { - return nodeName === 'rect' ? this.symbol(nodeName) : SVGRenderer.prototype.createElement.call(this, nodeName); - }, - - /** - * In the VML renderer, each child of an inverted div (group) is inverted - * @param {Object} element - * @param {Object} parentNode - */ - invertChild: function (element, parentNode) { - var ren = this, - parentStyle = parentNode.style, - imgStyle = element.tagName === 'IMG' && element.style; // #1111 - - css(element, { - flip: 'x', - left: pInt(parentStyle.width) - (imgStyle ? pInt(imgStyle.top) : 1), - top: pInt(parentStyle.height) - (imgStyle ? pInt(imgStyle.left) : 1), - rotation: -90 - }); - - // Recursively invert child elements, needed for nested composite shapes like box plots and error bars. #1680, #1806. - each(element.childNodes, function (child) { - ren.invertChild(child, element); - }); - }, - - /** - * Symbol definitions that override the parent SVG renderer's symbols - * - */ - symbols: { - // VML specific arc function - arc: function (x, y, w, h, options) { - var start = options.start, - end = options.end, - radius = options.r || w || h, - innerRadius = options.innerR, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - ret; - - if (end - start === 0) { // no angle, don't show it. - return ['x']; - } - - ret = [ - 'wa', // clockwise arc to - x - radius, // left - y - radius, // top - x + radius, // right - y + radius, // bottom - x + radius * cosStart, // start x - y + radius * sinStart, // start y - x + radius * cosEnd, // end x - y + radius * sinEnd // end y - ]; - - if (options.open && !innerRadius) { - ret.push( - 'e', - M, - x,// - innerRadius, - y// - innerRadius - ); - } - - ret.push( - 'at', // anti clockwise arc to - x - innerRadius, // left - y - innerRadius, // top - x + innerRadius, // right - y + innerRadius, // bottom - x + innerRadius * cosEnd, // start x - y + innerRadius * sinEnd, // start y - x + innerRadius * cosStart, // end x - y + innerRadius * sinStart, // end y - 'x', // finish path - 'e' // close - ); - - ret.isArc = true; - return ret; - - }, - // Add circle symbol path. This performs significantly faster than v:oval. - circle: function (x, y, w, h, wrapper) { - - if (wrapper) { - w = h = 2 * wrapper.r; - } - - // Center correction, #1682 - if (wrapper && wrapper.isCircle) { - x -= w / 2; - y -= h / 2; - } - - // Return the path - return [ - 'wa', // clockwisearcto - x, // left - y, // top - x + w, // right - y + h, // bottom - x + w, // start x - y + h / 2, // start y - x + w, // end x - y + h / 2, // end y - //'x', // finish path - 'e' // close - ]; - }, - /** - * Add rectangle symbol path which eases rotation and omits arcsize problems - * compared to the built-in VML roundrect shape. When borders are not rounded, - * use the simpler square path, else use the callout path without the arrow. - */ - rect: function (x, y, w, h, options) { - return SVGRenderer.prototype.symbols[ - !defined(options) || !options.r ? 'square' : 'callout' - ].call(0, x, y, w, h, options); - } - } - }; - Highcharts.VMLRenderer = VMLRenderer = function () { - this.init.apply(this, arguments); - }; - VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension); - - // general renderer - Renderer = VMLRenderer; - } - - // This method is used with exporting in old IE, when emulating SVG (see #2314) - SVGRenderer.prototype.measureSpanWidth = function (text, styles) { - var measuringSpan = doc.createElement('span'), - offsetWidth, - textNode = doc.createTextNode(text); - - measuringSpan.appendChild(textNode); - css(measuringSpan, styles); - this.box.appendChild(measuringSpan); - offsetWidth = measuringSpan.offsetWidth; - discardElement(measuringSpan); // #2463 - return offsetWidth; - }; - - - /* **************************************************************************** - * * - * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - *****************************************************************************/ - /* **************************************************************************** - * * - * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT * - * TARGETING THAT SYSTEM. * - * * - *****************************************************************************/ - var CanVGRenderer, - CanVGController; - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - function getScript(scriptLocation, callback) { - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - } - - if (useCanVG) { - /** - * The CanVGRenderer is empty from start to keep the source footprint small. - * When requested, the CanVGController downloads the rest of the source packaged - * together with the canvg library. - */ - Highcharts.CanVGRenderer = CanVGRenderer = function () { - // Override the global SVG namespace to fake SVG/HTML that accepts CSS - SVG_NS = 'http://www.w3.org/1999/xhtml'; - }; - - /** - * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but - * the implementation from SvgRenderer will not be merged in until first render. - */ - CanVGRenderer.prototype.symbols = {}; - - /** - * Handles on demand download of canvg rendering support. - */ - CanVGController = (function () { - // List of renderering calls - var deferredRenderCalls = []; - - /** - * When downloaded, we are ready to draw deferred charts. - */ - function drawDeferred() { - var callLength = deferredRenderCalls.length, - callIndex; - - // Draw all pending render calls - for (callIndex = 0; callIndex < callLength; callIndex++) { - deferredRenderCalls[callIndex](); - } - // Clear the list - deferredRenderCalls = []; - } - - return { - push: function (func, scriptLocation) { - // Only get the script once - if (deferredRenderCalls.length === 0) { - getScript(scriptLocation, drawDeferred); - } - // Register render call - deferredRenderCalls.push(func); - } - }; - }()); - - Renderer = CanVGRenderer; - } // end CanVGRenderer - - /* **************************************************************************** - * * - * END OF ANDROID < 3 SPECIFIC CODE * - * * - *****************************************************************************/ - - /** - * The Tick class - */ - function Tick(axis, pos, type, noLabel) { - this.axis = axis; - this.pos = pos; - this.type = type || ''; - this.isNew = true; - - if (!type && !noLabel) { - this.addLabel(); - } - } - - Tick.prototype = { - /** - * Write the tick label - */ - addLabel: function () { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - categories = axis.categories, - names = axis.names, - pos = tick.pos, - labelOptions = options.labels, - str, - tickPositions = axis.tickPositions, - isFirst = pos === tickPositions[0], - isLast = pos === tickPositions[tickPositions.length - 1], - value = categories ? - pick(categories[pos], names[pos], pos) : - pos, - label = tick.label, - tickPositionInfo = tickPositions.info, - dateTimeLabelFormat; - - // Set the datetime label format. If a higher rank is set for this position, use that. If not, - // use the general format. - if (axis.isDatetimeAxis && tickPositionInfo) { - dateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName]; - } - // set properties for access in render method - tick.isFirst = isFirst; - tick.isLast = isLast; - - // get the string - str = axis.labelFormatter.call({ - axis: axis, - chart: chart, - isFirst: isFirst, - isLast: isLast, - dateTimeLabelFormat: dateTimeLabelFormat, - value: axis.isLog ? correctFloat(lin2log(value)) : value - }); - - // prepare CSS - //css = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX }; - - // first call - if (!defined(label)) { - - tick.label = label = - defined(str) && labelOptions.enabled ? - chart.renderer.text( - str, - 0, - 0, - labelOptions.useHTML - ) - //.attr(attr) - // without position absolute, IE export sometimes is wrong - .css(merge(labelOptions.style)) - .add(axis.labelGroup) : - null; - tick.labelLength = label && label.getBBox().width; // Un-rotated length - tick.rotation = 0; // Base value to detect change for new calls to getBBox - - // update - } else if (label) { - label.attr({ text: str }); - } - }, - - /** - * Get the offset height or width of the label - */ - getLabelSize: function () { - return this.label ? - this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] : - 0; - }, - - /** - * Handle the label overflow by adjusting the labels to the left and right edge, or - * hide them if they collide into the neighbour label. - */ - handleOverflow: function (xy) { - var axis = this.axis, - pxPos = xy.x, - chartWidth = axis.chart.chartWidth, - spacing = axis.chart.spacing, - leftBound = pick(axis.labelLeft, mathMin(axis.pos, spacing[3])), - rightBound = pick(axis.labelRight, mathMax(axis.pos + axis.len, chartWidth - spacing[1])), - label = this.label, - rotation = this.rotation, - factor = { left: 0, center: 0.5, right: 1 }[axis.labelAlign], - labelWidth = label.getBBox().width, - slotWidth = axis.slotWidth, - xCorrection = factor, - goRight = 1, - leftPos, - rightPos, - textWidth, - css = {}; - - // Check if the label overshoots the chart spacing box. If it does, move it. - // If it now overshoots the slotWidth, add ellipsis. - if (!rotation) { - leftPos = pxPos - factor * labelWidth; - rightPos = pxPos + (1 - factor) * labelWidth; - - if (leftPos < leftBound) { - slotWidth = xy.x + slotWidth * (1 - factor) - leftBound; - } else if (rightPos > rightBound) { - slotWidth = rightBound - xy.x + slotWidth * factor; - goRight = -1; - } - - slotWidth = mathMin(axis.slotWidth, slotWidth); // #4177 - if (slotWidth < axis.slotWidth && axis.labelAlign === 'center') { - xy.x += goRight * (axis.slotWidth - slotWidth - xCorrection * (axis.slotWidth - mathMin(labelWidth, slotWidth))); - } - // If the label width exceeds the available space, set a text width to be - // picked up below. Also, if a width has been set before, we need to set a new - // one because the reported labelWidth will be limited by the box (#3938). - if (labelWidth > slotWidth || (axis.autoRotation && label.styles.width)) { - textWidth = slotWidth; - } - - // Add ellipsis to prevent rotated labels to be clipped against the edge of the chart - } else if (rotation < 0 && pxPos - factor * labelWidth < leftBound) { - textWidth = mathRound(pxPos / mathCos(rotation * deg2rad) - leftBound); - } else if (rotation > 0 && pxPos + factor * labelWidth > rightBound) { - textWidth = mathRound((chartWidth - pxPos) / mathCos(rotation * deg2rad)); - } - - if (textWidth) { - css.width = textWidth; - if (!axis.options.labels.style.textOverflow) { - css.textOverflow = 'ellipsis'; - } - label.css(css); - } - }, - - /** - * Get the x and y position for ticks and labels - */ - getPosition: function (horiz, pos, tickmarkOffset, old) { - var axis = this.axis, - chart = axis.chart, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight; - - return { - x: horiz ? - axis.translate(pos + tickmarkOffset, null, null, old) + axis.transB : - axis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0), - - y: horiz ? - cHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) : - cHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB - }; - - }, - - /** - * Get the x, y position of the tick label - */ - getLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - transA = axis.transA, - reversed = axis.reversed, - staggerLines = axis.staggerLines, - rotCorr = axis.tickRotCorr || { x: 0, y: 0 }, - yOffset = labelOptions.y, - line; - - if (!defined(yOffset)) { - yOffset = axis.side === 2 ? - rotCorr.y + 8 : - // #3140, #3140 - yOffset = mathCos(label.rotation * deg2rad) * (rotCorr.y - label.getBBox(false, 0).height / 2); - } - - x = x + labelOptions.x + rotCorr.x - (tickmarkOffset && horiz ? - tickmarkOffset * transA * (reversed ? -1 : 1) : 0); - y = y + yOffset - (tickmarkOffset && !horiz ? - tickmarkOffset * transA * (reversed ? 1 : -1) : 0); - - // Correct for staggered labels - if (staggerLines) { - line = (index / (step || 1) % staggerLines); - if (axis.opposite) { - line = staggerLines - line - 1; - } - y += line * (axis.labelOffset / staggerLines); - } - - return { - x: x, - y: mathRound(y) - }; - }, - - /** - * Extendible method to return the path of the marker - */ - getMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) { - return renderer.crispLine([ - M, - x, - y, - L, - x + (horiz ? 0 : -tickLength), - y + (horiz ? tickLength : 0) - ], tickWidth); - }, - - /** - * Put everything in place - * - * @param index {Number} - * @param old {Boolean} Use old coordinates to prepare an animation into new position - */ - render: function (index, old, opacity) { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - renderer = chart.renderer, - horiz = axis.horiz, - type = tick.type, - label = tick.label, - pos = tick.pos, - labelOptions = options.labels, - gridLine = tick.gridLine, - gridPrefix = type ? type + 'Grid' : 'grid', - tickPrefix = type ? type + 'Tick' : 'tick', - gridLineWidth = options[gridPrefix + 'LineWidth'], - gridLineColor = options[gridPrefix + 'LineColor'], - dashStyle = options[gridPrefix + 'LineDashStyle'], - tickLength = options[tickPrefix + 'Length'], - tickWidth = pick(options[tickPrefix + 'Width'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1 - tickColor = options[tickPrefix + 'Color'], - tickPosition = options[tickPrefix + 'Position'], - gridLinePath, - mark = tick.mark, - markPath, - step = /*axis.labelStep || */labelOptions.step, - attribs, - show = true, - tickmarkOffset = axis.tickmarkOffset, - xy = tick.getPosition(horiz, pos, tickmarkOffset, old), - x = xy.x, - y = xy.y, - reverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 - - opacity = pick(opacity, 1); - this.isActive = true; - - // create the grid line - if (gridLineWidth) { - gridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true); - - if (gridLine === UNDEFINED) { - attribs = { - stroke: gridLineColor, - 'stroke-width': gridLineWidth - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - if (!type) { - attribs.zIndex = 1; - } - if (old) { - attribs.opacity = 0; - } - tick.gridLine = gridLine = - gridLineWidth ? - renderer.path(gridLinePath) - .attr(attribs).add(axis.gridGroup) : - null; - } - - // If the parameter 'old' is set, the current call will be followed - // by another call, therefore do not do any animations this time - if (!old && gridLine && gridLinePath) { - gridLine[tick.isNew ? 'attr' : 'animate']({ - d: gridLinePath, - opacity: opacity - }); - } - } - - // create the tick mark - if (tickWidth && tickLength) { - - // negate the length - if (tickPosition === 'inside') { - tickLength = -tickLength; - } - if (axis.opposite) { - tickLength = -tickLength; - } - - markPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer); - if (mark) { // updating - mark.animate({ - d: markPath, - opacity: opacity - }); - } else { // first time - tick.mark = renderer.path( - markPath - ).attr({ - stroke: tickColor, - 'stroke-width': tickWidth, - opacity: opacity - }).add(axis.axisGroup); - } - } - - // the label is created on init - now move it into place - if (label && !isNaN(x)) { - label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - - // Apply show first and show last. If the tick is both first and last, it is - // a single centered tick, in which case we show the label anyway (#2100). - if ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) || - (tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) { - show = false; - - // Handle label overflow and show or hide accordingly - } else if (horiz && !axis.isRadial && !labelOptions.step && !labelOptions.rotation && !old && opacity !== 0) { - tick.handleOverflow(xy); - } - - // apply step - if (step && index % step) { - // show those indices dividable by step - show = false; - } - - // Set the new position, and show or hide - if (show && !isNaN(xy.y)) { - xy.opacity = opacity; - label[tick.isNew ? 'attr' : 'animate'](xy); - tick.isNew = false; - } else { - label.attr('y', -9999); // #1338 - } - } - }, - - /** - * Destructor for the tick prototype - */ - destroy: function () { - destroyObjectProperties(this, this.axis); - } - }; - - /** - * The object wrapper for plot lines and plot bands - * @param {Object} options - */ - Highcharts.PlotLineOrBand = function (axis, options) { - this.axis = axis; - - if (options) { - this.options = options; - this.id = options.id; - } - }; - - Highcharts.PlotLineOrBand.prototype = { - - /** - * Render the plot line or plot band. If it is already existing, - * move it. - */ - render: function () { - var plotLine = this, - axis = plotLine.axis, - horiz = axis.horiz, - options = plotLine.options, - optionsLabel = options.label, - label = plotLine.label, - width = options.width, - to = options.to, - from = options.from, - isBand = defined(from) && defined(to), - value = options.value, - dashStyle = options.dashStyle, - svgElem = plotLine.svgElem, - path = [], - addEvent, - eventType, - xs, - ys, - x, - y, - color = options.color, - zIndex = options.zIndex, - events = options.events, - attribs = {}, - renderer = axis.chart.renderer; - - // logarithmic conversion - if (axis.isLog) { - from = log2lin(from); - to = log2lin(to); - value = log2lin(value); - } - - // plot line - if (width) { - path = axis.getPlotLinePath(value, width); - attribs = { - stroke: color, - 'stroke-width': width - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - } else if (isBand) { // plot band - - path = axis.getPlotBandPath(from, to, options); - if (color) { - attribs.fill = color; - } - if (options.borderWidth) { - attribs.stroke = options.borderColor; - attribs['stroke-width'] = options.borderWidth; - } - } else { - return; - } - // zIndex - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - - // common for lines and bands - if (svgElem) { - if (path) { - svgElem.show(); - svgElem.animate({ d: path }); - } else { - svgElem.hide(); - if (label) { - plotLine.label = label = label.destroy(); - } - } - } else if (path && path.length) { - plotLine.svgElem = svgElem = renderer.path(path) - .attr(attribs).add(); - - // events - if (events) { - addEvent = function (eventType) { - svgElem.on(eventType, function (e) { - events[eventType].apply(plotLine, [e]); - }); - }; - for (eventType in events) { - addEvent(eventType); - } - } - } - - // the plot band/line label - if (optionsLabel && defined(optionsLabel.text) && path && path.length && - axis.width > 0 && axis.height > 0 && !path.flat) { - // apply defaults - optionsLabel = merge({ - align: horiz && isBand && 'center', - x: horiz ? !isBand && 4 : 10, - verticalAlign: !horiz && isBand && 'middle', - y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, - rotation: horiz && !isBand && 90 - }, optionsLabel); - - // add the SVG element - if (!label) { - attribs = { - align: optionsLabel.textAlign || optionsLabel.align, - rotation: optionsLabel.rotation - }; - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - plotLine.label = label = renderer.text( - optionsLabel.text, - 0, - 0, - optionsLabel.useHTML - ) - .attr(attribs) - .css(optionsLabel.style) - .add(); - } - - // get the bounding box and align the label - // #3000 changed to better handle choice between plotband or plotline - xs = [path[1], path[4], (isBand ? path[6] : path[1])]; - ys = [path[2], path[5], (isBand ? path[7] : path[2])]; - x = arrayMin(xs); - y = arrayMin(ys); - - label.align(optionsLabel, false, { - x: x, - y: y, - width: arrayMax(xs) - x, - height: arrayMax(ys) - y - }); - label.show(); - - } else if (label) { // move out of sight - label.hide(); - } - - // chainable - return plotLine; - }, - - /** - * Remove the plot line or band - */ - destroy: function () { - // remove it from the lookup - erase(this.axis.plotLinesAndBands, this); - - delete this.axis; - destroyObjectProperties(this); - } - }; - - /** - * Object with members for extending the Axis prototype - */ - - AxisPlotLineOrBandExtension = { - - /** - * Create the path for a plot band - */ - getPlotBandPath: function (from, to) { - var toPath = this.getPlotLinePath(to, null, null, true), - path = this.getPlotLinePath(from, null, null, true); - - if (path && toPath) { - - // Flat paths don't need labels (#3836) - path.flat = path.toString() === toPath.toString(); - - path.push( - toPath[4], - toPath[5], - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }, - - addPlotBand: function (options) { - return this.addPlotBandOrLine(options, 'plotBands'); - }, - - addPlotLine: function (options) { - return this.addPlotBandOrLine(options, 'plotLines'); - }, - - /** - * Add a plot band or plot line after render time - * - * @param options {Object} The plotBand or plotLine configuration object - */ - addPlotBandOrLine: function (options, coll) { - var obj = new Highcharts.PlotLineOrBand(this, options).render(), - userOptions = this.userOptions; - - if (obj) { // #2189 - // Add it to the user options for exporting and Axis.update - if (coll) { - userOptions[coll] = userOptions[coll] || []; - userOptions[coll].push(options); - } - this.plotLinesAndBands.push(obj); - } - - return obj; - }, - - /** - * Remove a plot band or plot line from the chart by id - * @param {Object} id - */ - removePlotBandOrLine: function (id) { - var plotLinesAndBands = this.plotLinesAndBands, - options = this.options, - userOptions = this.userOptions, - i = plotLinesAndBands.length; - while (i--) { - if (plotLinesAndBands[i].id === id) { - plotLinesAndBands[i].destroy(); - } - } - each([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) { - i = arr.length; - while (i--) { - if (arr[i].id === id) { - erase(arr, arr[i]); - } - } - }); - } - }; - - /** - * Create a new axis object - * @param {Object} chart - * @param {Object} options - */ - var Axis = Highcharts.Axis = function () { - this.init.apply(this, arguments); - }; - - Axis.prototype = { - - /** - * Default options for the X axis - the Y axis has extended defaults - */ - defaultOptions: { - // allowDecimals: null, - // alternateGridColor: null, - // categories: [], - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: '%b \'%y', - year: '%Y' - }, - endOnTick: false, - gridLineColor: '#D8D8D8', - // gridLineDashStyle: 'solid', - // gridLineWidth: 0, - // reversed: false, - - labels: { - enabled: true, - // rotation: 0, - // align: 'center', - // step: null, - style: { - color: '#606060', - cursor: 'default', - fontSize: '11px' - }, - x: 0, - y: 15 - /*formatter: function () { - return this.value; - },*/ - }, - lineColor: '#C0D0E0', - lineWidth: 1, - //linkedTo: null, - //max: undefined, - //min: undefined, - minPadding: 0.01, - maxPadding: 0.01, - //minRange: null, - minorGridLineColor: '#E0E0E0', - // minorGridLineDashStyle: null, - minorGridLineWidth: 1, - minorTickColor: '#A0A0A0', - //minorTickInterval: null, - minorTickLength: 2, - minorTickPosition: 'outside', // inside or outside - //minorTickWidth: 0, - //opposite: false, - //offset: 0, - //plotBands: [{ - // events: {}, - // zIndex: 1, - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //plotLines: [{ - // events: {} - // dashStyle: {} - // zIndex: - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //reversed: false, - // showFirstLabel: true, - // showLastLabel: true, - startOfWeek: 1, - startOnTick: false, - tickColor: '#C0D0E0', - //tickInterval: null, - tickLength: 10, - tickmarkPlacement: 'between', // on or between - tickPixelInterval: 100, - tickPosition: 'outside', - //tickWidth: 1, - title: { - //text: null, - align: 'middle', // low, middle or high - //margin: 0 for horizontal, 10 for vertical axes, - //rotation: 0, - //side: 'outside', - style: { - color: '#707070' - } - //x: 0, - //y: 0 - }, - type: 'linear' // linear, logarithmic or datetime - //visible: true - }, - - /** - * This options set extends the defaultOptions for Y axes - */ - defaultYAxisOptions: { - endOnTick: true, - gridLineWidth: 1, - tickPixelInterval: 72, - showLastLabel: true, - labels: { - x: -8, - y: 3 - }, - lineWidth: 0, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: true, - //tickWidth: 0, - title: { - rotation: 270, - text: 'Values' - }, - stackLabels: { - enabled: false, - //align: dynamic, - //y: dynamic, - //x: dynamic, - //verticalAlign: dynamic, - //textAlign: dynamic, - //rotation: 0, - formatter: function () { - return Highcharts.numberFormat(this.total, -1); - }, - style: merge(defaultPlotOptions.line.dataLabels.style, { color: '#000000' }) - } - }, - - /** - * These options extend the defaultOptions for left axes - */ - defaultLeftAxisOptions: { - labels: { - x: -15, - y: null - }, - title: { - rotation: 270 - } - }, - - /** - * These options extend the defaultOptions for right axes - */ - defaultRightAxisOptions: { - labels: { - x: 15, - y: null - }, - title: { - rotation: 90 - } - }, - - /** - * These options extend the defaultOptions for bottom axes - */ - defaultBottomAxisOptions: { - labels: { - autoRotation: [-45], - x: 0, - y: null // based on font size - // overflow: undefined, - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - /** - * These options extend the defaultOptions for top axes - */ - defaultTopAxisOptions: { - labels: { - autoRotation: [-45], - x: 0, - y: -15 - // overflow: undefined - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - - /** - * Initialize the axis - */ - init: function (chart, userOptions) { - - - var isXAxis = userOptions.isX, - axis = this; - - axis.chart = chart; - - // Flag, is the axis horizontal - axis.horiz = chart.inverted ? !isXAxis : isXAxis; - - // Flag, isXAxis - axis.isXAxis = isXAxis; - axis.coll = isXAxis ? 'xAxis' : 'yAxis'; - - axis.opposite = userOptions.opposite; // needed in setOptions - axis.side = userOptions.side || (axis.horiz ? - (axis.opposite ? 0 : 2) : // top : bottom - (axis.opposite ? 1 : 3)); // right : left - - axis.setOptions(userOptions); - - - var options = this.options, - type = options.type, - isDatetimeAxis = type === 'datetime'; - - axis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format - - - // Flag, stagger lines or not - axis.userOptions = userOptions; - - //axis.axisTitleMargin = UNDEFINED,// = options.title.margin, - axis.minPixelPadding = 0; - - axis.reversed = options.reversed; - axis.visible = options.visible !== false; - axis.zoomEnabled = options.zoomEnabled !== false; - - // Initial categories - axis.categories = options.categories || type === 'category'; - axis.names = axis.names || []; // Preserve on update (#3830) - - // Elements - //axis.axisGroup = UNDEFINED; - //axis.gridGroup = UNDEFINED; - //axis.axisTitle = UNDEFINED; - //axis.axisLine = UNDEFINED; - - // Shorthand types - axis.isLog = type === 'logarithmic'; - axis.isDatetimeAxis = isDatetimeAxis; - - // Flag, if axis is linked to another axis - axis.isLinked = defined(options.linkedTo); - // Linked axis. - //axis.linkedParent = UNDEFINED; - - // Tick positions - //axis.tickPositions = UNDEFINED; // array containing predefined positions - // Tick intervals - //axis.tickInterval = UNDEFINED; - //axis.minorTickInterval = UNDEFINED; - - - // Major ticks - axis.ticks = {}; - axis.labelEdge = []; - // Minor ticks - axis.minorTicks = {}; - - // List of plotLines/Bands - axis.plotLinesAndBands = []; - - // Alternate bands - axis.alternateBands = {}; - - // Axis metrics - //axis.left = UNDEFINED; - //axis.top = UNDEFINED; - //axis.width = UNDEFINED; - //axis.height = UNDEFINED; - //axis.bottom = UNDEFINED; - //axis.right = UNDEFINED; - //axis.transA = UNDEFINED; - //axis.transB = UNDEFINED; - //axis.oldTransA = UNDEFINED; - axis.len = 0; - //axis.oldMin = UNDEFINED; - //axis.oldMax = UNDEFINED; - //axis.oldUserMin = UNDEFINED; - //axis.oldUserMax = UNDEFINED; - //axis.oldAxisLength = UNDEFINED; - axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; - axis.range = options.range; - axis.offset = options.offset || 0; - - - // Dictionary for stacks - axis.stacks = {}; - axis.oldStacks = {}; - axis.stacksTouched = 0; - - // Min and max in the data - //axis.dataMin = UNDEFINED, - //axis.dataMax = UNDEFINED, - - // The axis range - axis.max = null; - axis.min = null; - - // User set min and max - //axis.userMin = UNDEFINED, - //axis.userMax = UNDEFINED, - - // Crosshair options - axis.crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], false); - // Run Axis - - var eventType, - events = axis.options.events; - - // Register - if (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update() - if (isXAxis && !this.isColorAxis) { // #2713 - chart.axes.splice(chart.xAxis.length, 0, axis); - } else { - chart.axes.push(axis); - } - - chart[axis.coll].push(axis); - } - - axis.series = axis.series || []; // populated by Series - - // inverted charts have reversed xAxes as default - if (chart.inverted && isXAxis && axis.reversed === UNDEFINED) { - axis.reversed = true; - } - - axis.removePlotBand = axis.removePlotBandOrLine; - axis.removePlotLine = axis.removePlotBandOrLine; - - - // register event listeners - for (eventType in events) { - addEvent(axis, eventType, events[eventType]); - } - - // extend logarithmic axis - if (axis.isLog) { - axis.val2lin = log2lin; - axis.lin2val = lin2log; - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - this.options = merge( - this.defaultOptions, - this.isXAxis ? {} : this.defaultYAxisOptions, - [this.defaultTopAxisOptions, this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], - merge( - defaultOptions[this.coll], // if set in setOptions (#1053) - userOptions - ) - ); - }, - - /** - * The default label formatter. The context is a special config object for the label. - */ - defaultLabelFormatter: function () { - var axis = this.axis, - value = this.value, - categories = axis.categories, - dateTimeLabelFormat = this.dateTimeLabelFormat, - numericSymbols = defaultOptions.lang.numericSymbols, - i = numericSymbols && numericSymbols.length, - multi, - ret, - formatOption = axis.options.labels.format, - - // make sure the same symbol is added for all labels on a linear axis - numericSymbolDetector = axis.isLog ? value : axis.tickInterval; - - if (formatOption) { - ret = format(formatOption, this); - - } else if (categories) { - ret = value; - - } else if (dateTimeLabelFormat) { // datetime axis - ret = dateFormat(dateTimeLabelFormat, value); - - } else if (i && numericSymbolDetector >= 1000) { - // Decide whether we should add a numeric symbol like k (thousands) or M (millions). - // If we are to enable this in tooltip or other places as well, we can move this - // logic to the numberFormatter and enable it by a parameter. - while (i-- && ret === UNDEFINED) { - multi = Math.pow(1000, i + 1); - if (numericSymbolDetector >= multi && (value * 10) % multi === 0 && numericSymbols[i] !== null) { - ret = Highcharts.numberFormat(value / multi, -1) + numericSymbols[i]; - } - } - } - - if (ret === UNDEFINED) { - if (mathAbs(value) >= 10000) { // add thousands separators - ret = Highcharts.numberFormat(value, -1); - - } else { // small numbers - ret = Highcharts.numberFormat(value, -1, UNDEFINED, ''); // #2466 - } - } - - return ret; - }, - - /** - * Get the minimum and maximum for the series of each axis - */ - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // Reset properties in case we're redrawing (#3353) - axis.dataMin = axis.dataMax = axis.threshold = null; - axis.softThreshold = !axis.isXAxis; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - xData, - threshold = seriesOptions.threshold, - seriesDataMin, - seriesDataMax; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - // Get dataMin and dataMax for X axes - if (axis.isXAxis) { - xData = series.xData; - if (xData.length) { - axis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData)); - axis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData)); - } - - // Get dataMin and dataMax for Y axes, as well as handle stacking and processed data - } else { - - // Get this particular series extremes - series.getExtremes(); - seriesDataMax = series.dataMax; - seriesDataMin = series.dataMin; - - // Get the dataMin and dataMax so far. If percentage is used, the min and max are - // always 0 and 100. If seriesDataMin and seriesDataMax is null, then series - // doesn't have active y data, we continue with nulls - if (defined(seriesDataMin) && defined(seriesDataMax)) { - axis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin); - axis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax); - } - - // Adjust to threshold - if (defined(threshold)) { - axis.threshold = threshold; - } - // If any series has a hard threshold, it takes precedence - if (!seriesOptions.softThreshold || axis.isLog) { - axis.softThreshold = false; - } - } - } - }); - }, - - /** - * Translate from axis value to pixel position on the chart, or back - * - */ - translate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) { - var axis = this.linkedParent || this, // #1417 - sign = 1, - cvsOffset = 0, - localA = old ? axis.oldTransA : axis.transA, - localMin = old ? axis.oldMin : axis.min, - returnValue, - minPixelPadding = axis.minPixelPadding, - doPostTranslate = (axis.doPostTranslate || (axis.isLog && handleLog)) && axis.lin2val; - - if (!localA) { - localA = axis.transA; - } - - // In vertical axes, the canvas coordinates start from 0 at the top like in - // SVG. - if (cvsCoord) { - sign *= -1; // canvas coordinates inverts the value - cvsOffset = axis.len; - } - - // Handle reversed axis - if (axis.reversed) { - sign *= -1; - cvsOffset -= sign * (axis.sector || axis.len); - } - - // From pixels to value - if (backwards) { // reverse translation - - val = val * sign + cvsOffset; - val -= minPixelPadding; - returnValue = val / localA + localMin; // from chart pixel to value - if (doPostTranslate) { // log and ordinal axes - returnValue = axis.lin2val(returnValue); - } - - // From value to pixels - } else { - if (doPostTranslate) { // log and ordinal axes - val = axis.val2lin(val); - } - if (pointPlacement === 'between') { - pointPlacement = 0.5; - } - returnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) + - (isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0); - } - - return returnValue; - }, - - /** - * Utility method to translate an axis value to pixel position. - * @param {Number} value A value in terms of axis units - * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart - * or just the axis/pane itself. - */ - toPixels: function (value, paneCoordinates) { - return this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos); - }, - - /* - * Utility method to translate a pixel position in to an axis value - * @param {Number} pixel The pixel value coordinate - * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the - * axis/pane itself. - */ - toValue: function (pixel, paneCoordinates) { - return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true); - }, - - /** - * Create the path for a plot line that goes from the given value on - * this axis, across the plot to the opposite side - * @param {Number} value - * @param {Number} lineWidth Used for calculation crisp line - * @param {Number] old Use old coordinates (for resizing and rescaling) - */ - getPlotLinePath: function (value, lineWidth, old, force, translatedValue) { - var axis = this, - chart = axis.chart, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight, - cWidth = (old && chart.oldChartWidth) || chart.chartWidth, - skip, - transB = axis.transB, - /** - * Check if x is between a and b. If not, either move to a/b or skip, - * depending on the force parameter. - */ - between = function (x, a, b) { - if (x < a || x > b) { - if (force) { - x = mathMin(mathMax(a, x), b); - } else { - skip = true; - } - } - return x; - }; - - translatedValue = pick(translatedValue, axis.translate(value, null, null, old)); - x1 = x2 = mathRound(translatedValue + transB); - y1 = y2 = mathRound(cHeight - translatedValue - transB); - - if (isNaN(translatedValue)) { // no min or max - skip = true; - - } else if (axis.horiz) { - y1 = axisTop; - y2 = cHeight - axis.bottom; - x1 = x2 = between(x1, axisLeft, axisLeft + axis.width); - } else { - x1 = axisLeft; - x2 = cWidth - axis.right; - y1 = y2 = between(y1, axisTop, axisTop + axis.height); - } - return skip && !force ? - null : - chart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 1); - }, - - /** - * Set the tick positions of a linear axis to round values like whole tens or every five. - */ - getLinearTickPositions: function (tickInterval, min, max) { - var pos, - lastPos, - roundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval), - roundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval), - tickPositions = []; - - // For single points, add a tick regardless of the relative position (#2662) - if (min === max && isNumber(min)) { - return [min]; - } - - // Populate the intermediate values - pos = roundedMin; - while (pos <= roundedMax) { - - // Place the tick on the rounded value - tickPositions.push(pos); - - // Always add the raw tickInterval, not the corrected one. - pos = correctFloat(pos + tickInterval); - - // If the interval is not big enough in the current min - max range to actually increase - // the loop variable, we need to break out to prevent endless loop. Issue #619 - if (pos === lastPos) { - break; - } - - // Record the last value - lastPos = pos; - } - return tickPositions; - }, - - /** - * Return the minor tick positions. For logarithmic axes, reuse the same logic - * as for major ticks. - */ - getMinorTickPositions: function () { - var axis = this, - options = axis.options, - tickPositions = axis.tickPositions, - minorTickInterval = axis.minorTickInterval, - minorTickPositions = [], - pos, - i, - pointRangePadding = axis.pointRangePadding || 0, - min = axis.min - pointRangePadding, // #1498 - max = axis.max + pointRangePadding, // #1498 - range = max - min, - len; - - // If minor ticks get too dense, they are hard to read, and may cause long running script. So we don't draw them. - if (range && range / minorTickInterval < axis.len / 3) { // #3875 - - if (axis.isLog) { - len = tickPositions.length; - for (i = 1; i < len; i++) { - minorTickPositions = minorTickPositions.concat( - axis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true) - ); - } - } else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314 - minorTickPositions = minorTickPositions.concat( - axis.getTimeTicks( - axis.normalizeTimeTickInterval(minorTickInterval), - min, - max, - options.startOfWeek - ) - ); - } else { - for (pos = min + (tickPositions[0] - min) % minorTickInterval; pos <= max; pos += minorTickInterval) { - minorTickPositions.push(pos); - } - } - } - - if (minorTickPositions.length !== 0) { // don't change the extremes, when there is no minor ticks - axis.trimTicks(minorTickPositions, options.startOnTick, options.endOnTick); // #3652 #3743 #1498 - } - return minorTickPositions; - }, - - /** - * Adjust the min and max for the minimum range. Keep in mind that the series data is - * not yet processed, so we don't have information on data cropping and grouping, or - * updated axis.pointRange or series.pointRange. The data can't be processed until - * we have finally established min and max. - */ - adjustForMinRange: function () { - var axis = this, - options = axis.options, - min = axis.min, - max = axis.max, - zoomOffset, - spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange, - closestDataRange, - i, - distance, - xData, - loopLength, - minArgs, - maxArgs, - minRange; - - // Set the automatic minimum range based on the closest point distance - if (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) { - - if (defined(options.min) || defined(options.max)) { - axis.minRange = null; // don't do this again - - } else { - - // Find the closest distance between raw data points, as opposed to - // closestPointRange that applies to processed points (cropped and grouped) - each(axis.series, function (series) { - xData = series.xData; - loopLength = series.xIncrement ? 1 : xData.length - 1; - for (i = loopLength; i > 0; i--) { - distance = xData[i] - xData[i - 1]; - if (closestDataRange === UNDEFINED || distance < closestDataRange) { - closestDataRange = distance; - } - } - }); - axis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin); - } - } - - // if minRange is exceeded, adjust - if (max - min < axis.minRange) { - minRange = axis.minRange; - zoomOffset = (minRange - max + min) / 2; - - // if min and max options have been set, don't go beyond it - minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; - if (spaceAvailable) { // if space is available, stay within the data range - minArgs[2] = axis.dataMin; - } - min = arrayMax(minArgs); - - maxArgs = [min + minRange, pick(options.max, min + minRange)]; - if (spaceAvailable) { // if space is availabe, stay within the data range - maxArgs[2] = axis.dataMax; - } - - max = arrayMin(maxArgs); - - // now if the max is adjusted, adjust the min back - if (max - min < minRange) { - minArgs[0] = max - minRange; - minArgs[1] = pick(options.min, max - minRange); - min = arrayMax(minArgs); - } - } - - // Record modified extremes - axis.min = min; - axis.max = max; - }, - - /** - * Update translation information - */ - setAxisTranslation: function (saveOld) { - var axis = this, - range = axis.max - axis.min, - pointRange = axis.axisPointRange || 0, - closestPointRange, - minPointOffset = 0, - pointRangePadding = 0, - linkedParent = axis.linkedParent, - ordinalCorrection, - hasCategories = !!axis.categories, - transA = axis.transA, - isXAxis = axis.isXAxis; - - // Adjust translation for padding. Y axis with categories need to go through the same (#1784). - if (isXAxis || hasCategories || pointRange) { - if (linkedParent) { - minPointOffset = linkedParent.minPointOffset; - pointRangePadding = linkedParent.pointRangePadding; - - } else { - // Find the closestPointRange across all series - each(axis.series, function (series) { - var seriesClosest = series.closestPointRange; - if (!series.noSharedTooltip && defined(seriesClosest)) { - closestPointRange = defined(closestPointRange) ? - mathMin(closestPointRange, seriesClosest) : - seriesClosest; - } - }); - - each(axis.series, function (series) { - var seriesPointRange = hasCategories ? - 1 : - (isXAxis ? - pick(series.options.pointRange, closestPointRange, 0) : - (axis.axisPointRange || 0)), // #2806 - pointPlacement = series.options.pointPlacement; - - pointRange = mathMax(pointRange, seriesPointRange); - - if (!axis.single) { - // minPointOffset is the value padding to the left of the axis in order to make - // room for points with a pointRange, typically columns. When the pointPlacement option - // is 'between' or 'on', this padding does not apply. - minPointOffset = mathMax( - minPointOffset, - isString(pointPlacement) ? 0 : seriesPointRange / 2 - ); - - // Determine the total padding needed to the length of the axis to make room for the - // pointRange. If the series' pointPlacement is 'on', no padding is added. - pointRangePadding = mathMax( - pointRangePadding, - pointPlacement === 'on' ? 0 : seriesPointRange - ); - } - }); - } - - // Record minPointOffset and pointRangePadding - ordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853 - axis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection; - axis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection; - - // pointRange means the width reserved for each point, like in a column chart - axis.pointRange = mathMin(pointRange, range); - - // closestPointRange means the closest distance between points. In columns - // it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange - // is some other value - if (isXAxis) { - axis.closestPointRange = closestPointRange; - } - } - - // Secondary values - if (saveOld) { - axis.oldTransA = transA; - } - axis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1); - axis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend - axis.minPixelPadding = transA * minPointOffset; - }, - - minFromRange: function () { - return this.max - this.range; - }, - - /** - * Set the tick positions to round values and optionally extend the extremes - * to the nearest tick - */ - setTickInterval: function (secondPass) { - var axis = this, - chart = axis.chart, - options = axis.options, - isLog = axis.isLog, - isDatetimeAxis = axis.isDatetimeAxis, - isXAxis = axis.isXAxis, - isLinked = axis.isLinked, - maxPadding = options.maxPadding, - minPadding = options.minPadding, - length, - linkedParentExtremes, - tickIntervalOption = options.tickInterval, - minTickInterval, - tickPixelIntervalOption = options.tickPixelInterval, - categories = axis.categories, - threshold = axis.threshold, - softThreshold = axis.softThreshold, - thresholdMin, - thresholdMax, - hardMin, - hardMax; - - if (!isDatetimeAxis && !categories && !isLinked) { - this.getTickAmount(); - } - - // Min or max set either by zooming/setExtremes or initial options - hardMin = pick(axis.userMin, options.min); - hardMax = pick(axis.userMax, options.max); - - // Linked axis gets the extremes from the parent axis - if (isLinked) { - axis.linkedParent = chart[axis.coll][options.linkedTo]; - linkedParentExtremes = axis.linkedParent.getExtremes(); - axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin); - axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax); - if (options.type !== axis.linkedParent.options.type) { - error(11, 1); // Can't link axes of different type - } - - // Initial min and max from the extreme data values - } else { - - // Adjust to hard threshold - if (!softThreshold && defined(threshold)) { - if (axis.dataMin >= threshold) { - thresholdMin = threshold; - minPadding = 0; - } else if (axis.dataMax <= threshold) { - thresholdMax = threshold; - maxPadding = 0; - } - } - - axis.min = pick(hardMin, thresholdMin, axis.dataMin); - axis.max = pick(hardMax, thresholdMax, axis.dataMax); - - } - - if (isLog) { - if (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978 - error(10, 1); // Can't plot negative values on log axis - } - // The correctFloat cures #934, float errors on full tens. But it - // was too aggressive for #4360 because of conversion back to lin, - // therefore use precision 15. - axis.min = correctFloat(log2lin(axis.min), 15); - axis.max = correctFloat(log2lin(axis.max), 15); - } - - // handle zoomed range - if (axis.range && defined(axis.max)) { - axis.userMin = axis.min = hardMin = mathMax(axis.min, axis.minFromRange()); // #618 - axis.userMax = hardMax = axis.max; - - axis.range = null; // don't use it when running setExtremes - } - - // Hook for adjusting this.min and this.max. Used by bubble series. - if (axis.beforePadding) { - axis.beforePadding(); - } - - // adjust min and max for the minimum range - axis.adjustForMinRange(); - - // Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding - // into account, we do this after computing tick interval (#1337). - if (!categories && !axis.axisPointRange && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) { - length = axis.max - axis.min; - if (length) { - if (!defined(hardMin) && minPadding) { - axis.min -= length * minPadding; - } - if (!defined(hardMax) && maxPadding) { - axis.max += length * maxPadding; - } - } - } - - // Stay within floor and ceiling - if (isNumber(options.floor)) { - axis.min = mathMax(axis.min, options.floor); - } - if (isNumber(options.ceiling)) { - axis.max = mathMin(axis.max, options.ceiling); - } - - // When the threshold is soft, adjust the extreme value only if - // the data extreme and the padded extreme land on either side of the threshold. For example, - // a series of [0, 1, 2, 3] would make the yAxis add a tick for -1 because of the - // default minPadding and startOnTick options. This is prevented by the softThreshold - // option. - if (softThreshold && defined(axis.dataMin)) { - threshold = threshold || 0; - if (!defined(hardMin) && axis.min < threshold && axis.dataMin >= threshold) { - axis.min = threshold; - } else if (!defined(hardMax) && axis.max > threshold && axis.dataMax <= threshold) { - axis.max = threshold; - } - } - - - // get tickInterval - if (axis.min === axis.max || axis.min === undefined || axis.max === undefined) { - axis.tickInterval = 1; - } else if (isLinked && !tickIntervalOption && - tickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) { - axis.tickInterval = tickIntervalOption = axis.linkedParent.tickInterval; - } else { - axis.tickInterval = pick( - tickIntervalOption, - this.tickAmount ? ((axis.max - axis.min) / mathMax(this.tickAmount - 1, 1)) : undefined, - categories ? // for categoried axis, 1 is default, for linear axis use tickPix - 1 : - // don't let it be more than the data range - (axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption) - ); - } - - // Now we're finished detecting min and max, crop and group series data. This - // is in turn needed in order to find tick positions in ordinal axes. - if (isXAxis && !secondPass) { - each(axis.series, function (series) { - series.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax); - }); - } - - // set the translation factor used in translate function - axis.setAxisTranslation(true); - - // hook for ordinal axes and radial axes - if (axis.beforeSetTickPositions) { - axis.beforeSetTickPositions(); - } - - // hook for extensions, used in Highstock ordinal axes - if (axis.postProcessTickInterval) { - axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); - } - - // In column-like charts, don't cramp in more ticks than there are points (#1943, #4184) - if (axis.pointRange && !tickIntervalOption) { - axis.tickInterval = mathMax(axis.pointRange, axis.tickInterval); - } - - // Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined. - minTickInterval = pick(options.minTickInterval, axis.isDatetimeAxis && axis.closestPointRange); - if (!tickIntervalOption && axis.tickInterval < minTickInterval) { - axis.tickInterval = minTickInterval; - } - - // for linear axes, get magnitude and normalize the interval - if (!isDatetimeAxis && !isLog && !tickIntervalOption) { - axis.tickInterval = normalizeTickInterval( - axis.tickInterval, - null, - getMagnitude(axis.tickInterval), - // If the tick interval is between 0.5 and 5 and the axis max is in the order of - // thousands, chances are we are dealing with years. Don't allow decimals. #3363. - pick(options.allowDecimals, !(axis.tickInterval > 0.5 && axis.tickInterval < 5 && axis.max > 1000 && axis.max < 9999)), - !!this.tickAmount - ); - } - - // Prevent ticks from getting so close that we can't draw the labels - if (!this.tickAmount && this.len) { // Color axis with disabled legend has no length - axis.tickInterval = axis.unsquish(); - } - - this.setTickPositions(); - }, - - /** - * Now we have computed the normalized tickInterval, get the tick positions - */ - setTickPositions: function () { - - var options = this.options, - tickPositions, - tickPositionsOption = options.tickPositions, - tickPositioner = options.tickPositioner, - startOnTick = options.startOnTick, - endOnTick = options.endOnTick, - single; - - // Set the tickmarkOffset - this.tickmarkOffset = (this.categories && options.tickmarkPlacement === 'between' && - this.tickInterval === 1) ? 0.5 : 0; // #3202 - - - // get minorTickInterval - this.minorTickInterval = options.minorTickInterval === 'auto' && this.tickInterval ? - this.tickInterval / 5 : options.minorTickInterval; - - // Find the tick positions - this.tickPositions = tickPositions = tickPositionsOption && tickPositionsOption.slice(); // Work on a copy (#1565) - if (!tickPositions) { - - if (this.isDatetimeAxis) { - tickPositions = this.getTimeTicks( - this.normalizeTimeTickInterval(this.tickInterval, options.units), - this.min, - this.max, - options.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - true - ); - } else if (this.isLog) { - tickPositions = this.getLogTickPositions(this.tickInterval, this.min, this.max); - } else { - tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max); - } - - // Too dense ticks, keep only the first and last (#4477) - if (tickPositions.length > this.len) { - tickPositions = [tickPositions[0], tickPositions.pop()]; - } - - this.tickPositions = tickPositions; - - // Run the tick positioner callback, that allows modifying auto tick positions. - if (tickPositioner) { - tickPositioner = tickPositioner.apply(this, [this.min, this.max]); - if (tickPositioner) { - this.tickPositions = tickPositions = tickPositioner; - } - } - - } - - if (!this.isLinked) { - - // reset min/max or remove extremes based on start/end on tick - this.trimTicks(tickPositions, startOnTick, endOnTick); - - // When there is only one point, or all points have the same value on this axis, then min - // and max are equal and tickPositions.length is 0 or 1. In this case, add some padding - // in order to center the point, but leave it with one tick. #1337. - if (this.min === this.max && defined(this.min) && !this.tickAmount) { - // Substract half a unit (#2619, #2846, #2515, #3390) - single = true; - this.min -= 0.5; - this.max += 0.5; - } - this.single = single; - - if (!tickPositionsOption && !tickPositioner) { - this.adjustTickAmount(); - } - } - }, - - /** - * Handle startOnTick and endOnTick by either adapting to padding min/max or rounded min/max - */ - trimTicks: function (tickPositions, startOnTick, endOnTick) { - var roundedMin = tickPositions[0], - roundedMax = tickPositions[tickPositions.length - 1], - minPointOffset = this.minPointOffset || 0; - - if (startOnTick) { - this.min = roundedMin; - } else if (this.min - minPointOffset > roundedMin) { - tickPositions.shift(); - } - - if (endOnTick) { - this.max = roundedMax; - } else if (this.max + minPointOffset < roundedMax) { - tickPositions.pop(); - } - - // If no tick are left, set one tick in the middle (#3195) - if (tickPositions.length === 0 && defined(roundedMin)) { - tickPositions.push((roundedMax + roundedMin) / 2); - } - }, - - /** - * Check if there are multiple axes in the same pane - * @returns {Boolean} There are other axes - */ - alignToOthers: function () { - var others = {}, // Whether there is another axis to pair with this one - hasOther, - options = this.options; - - if (this.chart.options.chart.alignTicks !== false && options.alignTicks !== false) { - each(this.chart[this.coll], function (axis) { - var otherOptions = axis.options, - horiz = axis.horiz, - key = [ - horiz ? otherOptions.left : otherOptions.top, - otherOptions.width, - otherOptions.height, - otherOptions.pane - ].join(','); - - - if (axis.series.length) { // #4442 - if (others[key]) { - hasOther = true; // #4201 - } else { - others[key] = 1; - } - } - }); - } - return hasOther; - }, - - /** - * Set the max ticks of either the x and y axis collection - */ - getTickAmount: function () { - var options = this.options, - tickAmount = options.tickAmount, - tickPixelInterval = options.tickPixelInterval; - - if (!defined(options.tickInterval) && this.len < tickPixelInterval && !this.isRadial && - !this.isLog && options.startOnTick && options.endOnTick) { - tickAmount = 2; - } - - if (!tickAmount && this.alignToOthers()) { - // Add 1 because 4 tick intervals require 5 ticks (including first and last) - tickAmount = mathCeil(this.len / tickPixelInterval) + 1; - } - - // For tick amounts of 2 and 3, compute five ticks and remove the intermediate ones. This - // prevents the axis from adding ticks that are too far away from the data extremes. - if (tickAmount < 4) { - this.finalTickAmt = tickAmount; - tickAmount = 5; - } - - this.tickAmount = tickAmount; - }, - - /** - * When using multiple axes, adjust the number of ticks to match the highest - * number of ticks in that group - */ - adjustTickAmount: function () { - var tickInterval = this.tickInterval, - tickPositions = this.tickPositions, - tickAmount = this.tickAmount, - finalTickAmt = this.finalTickAmt, - currentTickAmount = tickPositions && tickPositions.length, - i, - len; - - if (currentTickAmount < tickAmount) { - while (tickPositions.length < tickAmount) { - tickPositions.push(correctFloat( - tickPositions[tickPositions.length - 1] + tickInterval - )); - } - this.transA *= (currentTickAmount - 1) / (tickAmount - 1); - this.max = tickPositions[tickPositions.length - 1]; - - // We have too many ticks, run second pass to try to reduce ticks - } else if (currentTickAmount > tickAmount) { - this.tickInterval *= 2; - this.setTickPositions(); - } - - // The finalTickAmt property is set in getTickAmount - if (defined(finalTickAmt)) { - i = len = tickPositions.length; - while (i--) { - if ( - (finalTickAmt === 3 && i % 2 === 1) || // Remove every other tick - (finalTickAmt <= 2 && i > 0 && i < len - 1) // Remove all but first and last - ) { - tickPositions.splice(i, 1); - } - } - this.finalTickAmt = UNDEFINED; - } - }, - - /** - * Set the scale based on data min and max, user set min and max or options - * - */ - setScale: function () { - var axis = this, - isDirtyData, - isDirtyAxisLength; - - axis.oldMin = axis.min; - axis.oldMax = axis.max; - axis.oldAxisLength = axis.len; - - // set the new axisLength - axis.setAxisSize(); - //axisLength = horiz ? axisWidth : axisHeight; - isDirtyAxisLength = axis.len !== axis.oldAxisLength; - - // is there new data? - each(axis.series, function (series) { - if (series.isDirtyData || series.isDirty || - series.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well - isDirtyData = true; - } - }); - - // do we really need to go through all this? - if (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw || - axis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax || axis.alignToOthers()) { - - if (axis.resetStacks) { - axis.resetStacks(); - } - - axis.forceRedraw = false; - - // get data extremes if needed - axis.getSeriesExtremes(); - - // get fixed positions based on tickInterval - axis.setTickInterval(); - - // record old values to decide whether a rescale is necessary later on (#540) - axis.oldUserMin = axis.userMin; - axis.oldUserMax = axis.userMax; - - // Mark as dirty if it is not already set to dirty and extremes have changed. #595. - if (!axis.isDirty) { - axis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax; - } - } else if (axis.cleanStacks) { - axis.cleanStacks(); - } - }, - - /** - * Set the extremes and optionally redraw - * @param {Number} newMin - * @param {Number} newMax - * @param {Boolean} redraw - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * @param {Object} eventArguments - * - */ - setExtremes: function (newMin, newMax, redraw, animation, eventArguments) { - var axis = this, - chart = axis.chart; - - redraw = pick(redraw, true); // defaults to true - - each(axis.series, function (serie) { - delete serie.kdTree; - }); - - // Extend the arguments with min and max - eventArguments = extend(eventArguments, { - min: newMin, - max: newMax - }); - - // Fire the event - fireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler - - axis.userMin = newMin; - axis.userMax = newMax; - axis.eventArgs = eventArguments; - - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Overridable method for zooming chart. Pulled out in a separate method to allow overriding - * in stock charts. - */ - zoom: function (newMin, newMax) { - var dataMin = this.dataMin, - dataMax = this.dataMax, - options = this.options, - min = mathMin(dataMin, pick(options.min, dataMin)), - max = mathMax(dataMax, pick(options.max, dataMax)); - - // Prevent pinch zooming out of range. Check for defined is for #1946. #1734. - if (!this.allowZoomOutside) { - if (defined(dataMin) && newMin <= min) { - newMin = min; - } - if (defined(dataMax) && newMax >= max) { - newMax = max; - } - } - - // In full view, displaying the reset zoom button is not required - this.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED; - - // Do it - this.setExtremes( - newMin, - newMax, - false, - UNDEFINED, - { trigger: 'zoom' } - ); - return true; - }, - - /** - * Update the axis metrics - */ - setAxisSize: function () { - var chart = this.chart, - options = this.options, - offsetLeft = options.offsetLeft || 0, - offsetRight = options.offsetRight || 0, - horiz = this.horiz, - width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight), - height = pick(options.height, chart.plotHeight), - top = pick(options.top, chart.plotTop), - left = pick(options.left, chart.plotLeft + offsetLeft), - percentRegex = /%$/; - - // Check for percentage based input values - if (percentRegex.test(height)) { - height = parseFloat(height) / 100 * chart.plotHeight; - } - if (percentRegex.test(top)) { - top = parseFloat(top) / 100 * chart.plotHeight + chart.plotTop; - } - - // Expose basic values to use in Series object and navigator - this.left = left; - this.top = top; - this.width = width; - this.height = height; - this.bottom = chart.chartHeight - height - top; - this.right = chart.chartWidth - width - left; - - // Direction agnostic properties - this.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905 - this.pos = horiz ? left : top; // distance from SVG origin - }, - - /** - * Get the actual axis extremes - */ - getExtremes: function () { - var axis = this, - isLog = axis.isLog; - - return { - min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, - max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, - dataMin: axis.dataMin, - dataMax: axis.dataMax, - userMin: axis.userMin, - userMax: axis.userMax - }; - }, - - /** - * Get the zero plane either based on zero or on the min or max value. - * Used in bar and area plots - */ - getThreshold: function (threshold) { - var axis = this, - isLog = axis.isLog, - realMin = isLog ? lin2log(axis.min) : axis.min, - realMax = isLog ? lin2log(axis.max) : axis.max; - - // With a threshold of null, make the columns/areas rise from the top or bottom - // depending on the value, assuming an actual threshold of 0 (#4233). - if (threshold === null) { - threshold = realMax < 0 ? realMax : realMin; - } else if (realMin > threshold) { - threshold = realMin; - } else if (realMax < threshold) { - threshold = realMax; - } - - return axis.translate(threshold, 0, 1, 0, 1); - }, - - /** - * Compute auto alignment for the axis label based on which side the axis is on - * and the given rotation for the label - */ - autoLabelAlign: function (rotation) { - var ret, - angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; - - if (angle > 15 && angle < 165) { - ret = 'right'; - } else if (angle > 195 && angle < 345) { - ret = 'left'; - } else { - ret = 'center'; - } - return ret; - }, - - /** - * Prevent the ticks from getting so close we can't draw the labels. On a horizontal - * axis, this is handled by rotating the labels, removing ticks and adding ellipsis. - * On a vertical axis remove ticks and add ellipsis. - */ - unsquish: function () { - var chart = this.chart, - ticks = this.ticks, - labelOptions = this.options.labels, - horiz = this.horiz, - tickInterval = this.tickInterval, - newTickInterval = tickInterval, - slotSize = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / tickInterval), - rotation, - rotationOption = labelOptions.rotation, - labelMetrics = chart.renderer.fontMetrics(labelOptions.style.fontSize, ticks[0] && ticks[0].label), - step, - bestScore = Number.MAX_VALUE, - autoRotation, - // Return the multiple of tickInterval that is needed to avoid collision - getStep = function (spaceNeeded) { - var step = spaceNeeded / (slotSize || 1); - step = step > 1 ? mathCeil(step) : 1; - return step * tickInterval; - }; - - if (horiz) { - autoRotation = !labelOptions.staggerLines && !labelOptions.step && ( // #3971 - defined(rotationOption) ? - [rotationOption] : - slotSize < pick(labelOptions.autoRotationLimit, 80) && labelOptions.autoRotation - ); - - if (autoRotation) { - - // Loop over the given autoRotation options, and determine which gives the best score. The - // best score is that with the lowest number of steps and a rotation closest to horizontal. - each(autoRotation, function (rot) { - var score; - - if (rot === rotationOption || (rot && rot >= -90 && rot <= 90)) { // #3891 - - step = getStep(mathAbs(labelMetrics.h / mathSin(deg2rad * rot))); - - score = step + mathAbs(rot / 360); - - if (score < bestScore) { - bestScore = score; - rotation = rot; - newTickInterval = step; - } - } - }); - } - - } else if (!labelOptions.step) { // #4411 - newTickInterval = getStep(labelMetrics.h); - } - - this.autoRotation = autoRotation; - this.labelRotation = pick(rotation, rotationOption); - - return newTickInterval; - }, - - renderUnsquish: function () { - var chart = this.chart, - renderer = chart.renderer, - tickPositions = this.tickPositions, - ticks = this.ticks, - labelOptions = this.options.labels, - horiz = this.horiz, - margin = chart.margin, - slotCount = this.categories ? tickPositions.length : tickPositions.length - 1, - slotWidth = this.slotWidth = (horiz && (labelOptions.step || 0) < 2 && !labelOptions.rotation && // #4415 - ((this.staggerLines || 1) * chart.plotWidth) / slotCount) || - (!horiz && ((margin[3] && (margin[3] - chart.spacing[3])) || chart.chartWidth * 0.33)), // #1580, #1931, - innerWidth = mathMax(1, mathRound(slotWidth - 2 * (labelOptions.padding || 5))), - attr = {}, - labelMetrics = renderer.fontMetrics(labelOptions.style.fontSize, ticks[0] && ticks[0].label), - textOverflowOption = labelOptions.style.textOverflow, - css, - labelLength = 0, - label, - i, - pos; - - // Set rotation option unless it is "auto", like in gauges - if (!isString(labelOptions.rotation)) { - attr.rotation = labelOptions.rotation || 0; // #4443 - } - - // Handle auto rotation on horizontal axis - if (this.autoRotation) { - - // Get the longest label length - each(tickPositions, function (tick) { - tick = ticks[tick]; - if (tick && tick.labelLength > labelLength) { - labelLength = tick.labelLength; - } - }); - - // Apply rotation only if the label is too wide for the slot, and - // the label is wider than its height. - if (labelLength > innerWidth && labelLength > labelMetrics.h) { - attr.rotation = this.labelRotation; - } else { - this.labelRotation = 0; - } - - // Handle word-wrap or ellipsis on vertical axis - } else if (slotWidth) { - // For word-wrap or ellipsis - css = { width: innerWidth + PX }; - - if (!textOverflowOption) { - css.textOverflow = 'clip'; - - // On vertical axis, only allow word wrap if there is room for more lines. - i = tickPositions.length; - while (!horiz && i--) { - pos = tickPositions[i]; - label = ticks[pos].label; - if (label) { - // Reset ellipsis in order to get the correct bounding box (#4070) - if (label.styles.textOverflow === 'ellipsis') { - label.css({ textOverflow: 'clip' }); - } - if (label.getBBox().height > this.len / tickPositions.length - (labelMetrics.h - labelMetrics.f) || - ticks[pos].labelLength > slotWidth) { // #4678 - label.specCss = { textOverflow: 'ellipsis' }; - } - } - } - } - } - - - // Add ellipsis if the label length is significantly longer than ideal - if (attr.rotation) { - css = { - width: (labelLength > chart.chartHeight * 0.5 ? chart.chartHeight * 0.33 : chart.chartHeight) + PX - }; - if (!textOverflowOption) { - css.textOverflow = 'ellipsis'; - } - } - - // Set the explicit or automatic label alignment - this.labelAlign = attr.align = labelOptions.align || this.autoLabelAlign(this.labelRotation); - - // Apply general and specific CSS - each(tickPositions, function (pos) { - var tick = ticks[pos], - label = tick && tick.label; - if (label) { - label.attr(attr); // This needs to go before the CSS in old IE (#4502) - if (css) { - label.css(merge(css, label.specCss)); - } - delete label.specCss; - tick.rotation = attr.rotation; - } - }); - - // Note: Why is this not part of getLabelPosition? - this.tickRotCorr = renderer.rotCorr(labelMetrics.b, this.labelRotation || 0, this.side !== 0); - }, - - /** - * Return true if the axis has associated data - */ - hasData: function () { - return this.hasVisibleSeries || (defined(this.min) && defined(this.max) && !!this.tickPositions); - }, - - /** - * Render the tick labels to a preliminary position to get their sizes - */ - getOffset: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - tickPositions = axis.tickPositions, - ticks = axis.ticks, - horiz = axis.horiz, - side = axis.side, - invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side, - hasData, - showAxis, - titleOffset = 0, - titleOffsetOption, - titleMargin = 0, - axisTitleOptions = options.title, - labelOptions = options.labels, - labelOffset = 0, // reset - labelOffsetPadded, - opposite = axis.opposite, - axisOffset = chart.axisOffset, - clipOffset = chart.clipOffset, - clip, - directionFactor = [-1, 1, 1, -1][side], - n, - axisParent = axis.axisParent, // Used in color axis - lineHeightCorrection; - - // For reuse in Axis.render - hasData = axis.hasData(); - axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); - - // Set/reset staggerLines - axis.staggerLines = axis.horiz && labelOptions.staggerLines; - - // Create the axisGroup and gridGroup elements on first iteration - if (!axis.axisGroup) { - axis.gridGroup = renderer.g('grid') - .attr({ zIndex: options.gridZIndex || 1 }) - .add(axisParent); - axis.axisGroup = renderer.g('axis') - .attr({ zIndex: options.zIndex || 2 }) - .add(axisParent); - axis.labelGroup = renderer.g('axis-labels') - .attr({ zIndex: labelOptions.zIndex || 7 }) - .addClass(PREFIX + axis.coll.toLowerCase() + '-labels') - .add(axisParent); - } - - if (hasData || axis.isLinked) { - - // Generate ticks - each(tickPositions, function (pos) { - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } else { - ticks[pos].addLabel(); // update labels depending on tick interval - } - }); - - axis.renderUnsquish(); - - - // Left side must be align: right and right side must have align: left for labels - if (labelOptions.reserveSpace !== false && (side === 0 || side === 2 || - { 1: 'left', 3: 'right' }[side] === axis.labelAlign || axis.labelAlign === 'center')) { - each(tickPositions, function (pos) { - - // get the highest offset - labelOffset = mathMax( - ticks[pos].getLabelSize(), - labelOffset - ); - }); - } - - if (axis.staggerLines) { - labelOffset *= axis.staggerLines; - axis.labelOffset = labelOffset * (axis.opposite ? -1 : 1); - } - - - } else { // doesn't have data - for (n in ticks) { - ticks[n].destroy(); - delete ticks[n]; - } - } - - if (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { - if (!axis.axisTitle) { - axis.axisTitle = renderer.text( - axisTitleOptions.text, - 0, - 0, - axisTitleOptions.useHTML - ) - .attr({ - zIndex: 7, - rotation: axisTitleOptions.rotation || 0, - align: - axisTitleOptions.textAlign || - { - low: opposite ? 'right' : 'left', - middle: 'center', - high: opposite ? 'left' : 'right' - }[axisTitleOptions.align] - }) - .addClass(PREFIX + this.coll.toLowerCase() + '-title') - .css(axisTitleOptions.style) - .add(axis.axisGroup); - axis.axisTitle.isNew = true; - } - - if (showAxis) { - titleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; - titleOffsetOption = axisTitleOptions.offset; - titleMargin = defined(titleOffsetOption) ? 0 : pick(axisTitleOptions.margin, horiz ? 5 : 10); - } - - // hide or show the title depending on whether showEmpty is set - axis.axisTitle[showAxis ? 'show' : 'hide'](true); - } - - // handle automatic or user set offset - axis.offset = directionFactor * pick(options.offset, axisOffset[side]); - - axis.tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }; // polar - lineHeightCorrection = side === 2 ? axis.tickRotCorr.y : 0; - labelOffsetPadded = Math.abs(labelOffset) + titleMargin + - (labelOffset && (directionFactor * (horiz ? pick(labelOptions.y, axis.tickRotCorr.y + 8) : labelOptions.x) - lineHeightCorrection)); - axis.axisTitleMargin = pick(titleOffsetOption, labelOffsetPadded); - - axisOffset[side] = mathMax( - axisOffset[side], - axis.axisTitleMargin + titleOffset + directionFactor * axis.offset, - labelOffsetPadded // #3027 - ); - - // Decide the clipping needed to keep the graph inside the plot area and axis lines - clip = options.offset ? 0 : mathFloor(options.lineWidth / 2) * 2; // #4308, #4371 - clipOffset[invertedSide] = mathMax(clipOffset[invertedSide], clip); - }, - - /** - * Get the path for the axis line - */ - getLinePath: function (lineWidth) { - var chart = this.chart, - opposite = this.opposite, - offset = this.offset, - horiz = this.horiz, - lineLeft = this.left + (opposite ? this.width : 0) + offset, - lineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset; - - if (opposite) { - lineWidth *= -1; // crispify the other way - #1480, #1687 - } - - return chart.renderer - .crispLine([ - M, - horiz ? - this.left : - lineLeft, - horiz ? - lineTop : - this.top, - L, - horiz ? - chart.chartWidth - this.right : - lineLeft, - horiz ? - lineTop : - chart.chartHeight - this.bottom - ], lineWidth); - }, - - /** - * Position the title - */ - getTitlePosition: function () { - // compute anchor points for each of the title align options - var horiz = this.horiz, - axisLeft = this.left, - axisTop = this.top, - axisLength = this.len, - axisTitleOptions = this.options.title, - margin = horiz ? axisLeft : axisTop, - opposite = this.opposite, - offset = this.offset, - xOption = axisTitleOptions.x || 0, - yOption = axisTitleOptions.y || 0, - fontSize = pInt(axisTitleOptions.style.fontSize || 12), - - // the position in the length direction of the axis - alongAxis = { - low: margin + (horiz ? 0 : axisLength), - middle: margin + axisLength / 2, - high: margin + (horiz ? axisLength : 0) - }[axisTitleOptions.align], - - // the position in the perpendicular direction of the axis - offAxis = (horiz ? axisTop + this.height : axisLeft) + - (horiz ? 1 : -1) * // horizontal axis reverses the margin - (opposite ? -1 : 1) * // so does opposite axes - this.axisTitleMargin + - (this.side === 2 ? fontSize : 0); - - return { - x: horiz ? - alongAxis + xOption : - offAxis + (opposite ? this.width : 0) + offset + xOption, - y: horiz ? - offAxis + yOption - (opposite ? this.height : 0) + offset : - alongAxis + yOption - }; - }, - - /** - * Render the axis - */ - render: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - isLog = axis.isLog, - isLinked = axis.isLinked, - tickPositions = axis.tickPositions, - axisTitle = axis.axisTitle, - ticks = axis.ticks, - minorTicks = axis.minorTicks, - alternateBands = axis.alternateBands, - stackLabelOptions = options.stackLabels, - alternateGridColor = options.alternateGridColor, - tickmarkOffset = axis.tickmarkOffset, - lineWidth = options.lineWidth, - linePath, - hasRendered = chart.hasRendered, - slideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin), - showAxis = axis.showAxis, - globalAnimation = renderer.globalAnimation, - from, - to; - - // Reset - axis.labelEdge.length = 0; - //axis.justifyToPlot = overflow === 'justify'; - axis.overlap = false; - - // Mark all elements inActive before we go over and mark the active ones - each([ticks, minorTicks, alternateBands], function (coll) { - var pos; - for (pos in coll) { - coll[pos].isActive = false; - } - }); - - // If the series has data draw the ticks. Else only the line and title - if (axis.hasData() || isLinked) { - - // minor ticks - if (axis.minorTickInterval && !axis.categories) { - each(axis.getMinorTickPositions(), function (pos) { - if (!minorTicks[pos]) { - minorTicks[pos] = new Tick(axis, pos, 'minor'); - } - - // render new ticks in old position - if (slideInTicks && minorTicks[pos].isNew) { - minorTicks[pos].render(null, true); - } - - minorTicks[pos].render(null, false, 1); - }); - } - - // Major ticks. Pull out the first item and render it last so that - // we can get the position of the neighbour label. #808. - if (tickPositions.length) { // #1300 - each(tickPositions, function (pos, i) { - - // linked axes need an extra check to find out if - if (!isLinked || (pos >= axis.min && pos <= axis.max)) { - - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } - - // render new ticks in old position - if (slideInTicks && ticks[pos].isNew) { - ticks[pos].render(i, true, 0.1); - } - - ticks[pos].render(i); - } - - }); - // In a categorized axis, the tick marks are displayed between labels. So - // we need to add a tick mark and grid line at the left edge of the X axis. - if (tickmarkOffset && (axis.min === 0 || axis.single)) { - if (!ticks[-1]) { - ticks[-1] = new Tick(axis, -1, null, true); - } - ticks[-1].render(-1); - } - - } - - // alternate grid color - if (alternateGridColor) { - each(tickPositions, function (pos, i) { - to = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max - tickmarkOffset; - if (i % 2 === 0 && pos < axis.max && to <= axis.max + (chart.polar ? -tickmarkOffset : tickmarkOffset)) { // #2248, #4660 - if (!alternateBands[pos]) { - alternateBands[pos] = new Highcharts.PlotLineOrBand(axis); - } - from = pos + tickmarkOffset; // #949 - alternateBands[pos].options = { - from: isLog ? lin2log(from) : from, - to: isLog ? lin2log(to) : to, - color: alternateGridColor - }; - alternateBands[pos].render(); - alternateBands[pos].isActive = true; - } - }); - } - - // custom plot lines and bands - if (!axis._addedPlotLB) { // only first time - each((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) { - axis.addPlotBandOrLine(plotLineOptions); - }); - axis._addedPlotLB = true; - } - - } // end if hasData - - // Remove inactive ticks - each([ticks, minorTicks, alternateBands], function (coll) { - var pos, - i, - forDestruction = [], - delay = globalAnimation ? globalAnimation.duration || 500 : 0, - destroyInactiveItems = function () { - i = forDestruction.length; - while (i--) { - // When resizing rapidly, the same items may be destroyed in different timeouts, - // or the may be reactivated - if (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) { - coll[forDestruction[i]].destroy(); - delete coll[forDestruction[i]]; - } - } - - }; - - for (pos in coll) { - - if (!coll[pos].isActive) { - // Render to zero opacity - coll[pos].render(pos, false, 0); - coll[pos].isActive = false; - forDestruction.push(pos); - } - } - - // When the objects are finished fading out, destroy them - syncTimeout( - destroyInactiveItems, - coll === alternateBands || !chart.hasRendered || !delay ? 0 : delay - ); - }); - - // Static items. As the axis group is cleared on subsequent calls - // to render, these items are added outside the group. - // axis line - if (lineWidth) { - linePath = axis.getLinePath(lineWidth); - if (!axis.axisLine) { - axis.axisLine = renderer.path(linePath) - .attr({ - stroke: options.lineColor, - 'stroke-width': lineWidth, - zIndex: 7 - }) - .add(axis.axisGroup); - } else { - axis.axisLine.animate({ d: linePath }); - } - - // show or hide the line depending on options.showEmpty - axis.axisLine[showAxis ? 'show' : 'hide'](true); - } - - if (axisTitle && showAxis) { - - axisTitle[axisTitle.isNew ? 'attr' : 'animate']( - axis.getTitlePosition() - ); - axisTitle.isNew = false; - } - - // Stacked totals: - if (stackLabelOptions && stackLabelOptions.enabled) { - axis.renderStackTotals(); - } - // End stacked totals - - axis.isDirty = false; - }, - - /** - * Redraw the axis to reflect changes in the data or axis extremes - */ - redraw: function () { - - if (this.visible) { - // render the axis - this.render(); - - // move plot lines and bands - each(this.plotLinesAndBands, function (plotLine) { - plotLine.render(); - }); - } - - // mark associated series as dirty and ready for redraw - each(this.series, function (series) { - series.isDirty = true; - }); - - }, - - /** - * Destroys an Axis instance. - */ - destroy: function (keepEvents) { - var axis = this, - stacks = axis.stacks, - stackKey, - plotLinesAndBands = axis.plotLinesAndBands, - i; - - // Remove the events - if (!keepEvents) { - removeEvent(axis); - } - - // Destroy each stack total - for (stackKey in stacks) { - destroyObjectProperties(stacks[stackKey]); - - stacks[stackKey] = null; - } - - // Destroy collections - each([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) { - destroyObjectProperties(coll); - }); - i = plotLinesAndBands.length; - while (i--) { // #1975 - plotLinesAndBands[i].destroy(); - } - - // Destroy local variables - each(['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', 'cross', 'gridGroup', 'labelGroup'], function (prop) { - if (axis[prop]) { - axis[prop] = axis[prop].destroy(); - } - }); - - // Destroy crosshair - if (this.cross) { - this.cross.destroy(); - } - }, - - /** - * Draw the crosshair - * - * @param {Object} e The event arguments from the modified pointer event - * @param {Object} point The Point object - */ - drawCrosshair: function (e, point) { - - var path, - options = this.crosshair, - pos, - attribs, - categorized, - strokeWidth; - - if ( - // Disabled in options - !this.crosshair || - // Snap - ((defined(point) || !pick(options.snap, true)) === false) || - // Not on this axis (#4095, #2888) - (point && point.series && point.series[this.coll] !== this) - ) { - this.hideCrosshair(); - - } else { - - // Get the path - if (!pick(options.snap, true)) { - pos = (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); - } else if (defined(point)) { - pos = this.isXAxis ? point.plotX : this.len - point.plotY; // #3834 - } - - if (this.isRadial) { - path = this.getPlotLinePath(this.isXAxis ? point.x : pick(point.stackY, point.y)) || null; // #3189 - } else { - path = this.getPlotLinePath(null, null, null, null, pos) || null; // #3189 - } - - if (path === null) { - this.hideCrosshair(); - return; - } - - categorized = this.categories && !this.isRadial; - strokeWidth = pick(options.width, (categorized ? this.transA : 1)); - - // Draw the cross - if (this.cross) { - this.cross - .attr({ - d: path, - visibility: 'visible', - 'stroke-width': strokeWidth // #4737 - }); - } else { - attribs = { - 'stroke-width': strokeWidth, - stroke: options.color || (categorized ? 'rgba(155,200,255,0.2)' : '#C0C0C0'), - zIndex: pick(options.zIndex, 2) - }; - if (options.dashStyle) { - attribs.dashstyle = options.dashStyle; - } - this.cross = this.chart.renderer.path(path).attr(attribs).add(); - } - - } - - }, - - /** - * Hide the crosshair. - */ - hideCrosshair: function () { - if (this.cross) { - this.cross.hide(); - } - } - }; // end Axis - - extend(Axis.prototype, AxisPlotLineOrBandExtension); - - /** - * Set the tick positions to a time unit that makes sense, for example - * on the first of each month or on every Monday. Return an array - * with the time positions. Used in datetime axes as well as for grouping - * data on a datetime axis. - * - * @param {Object} normalizedInterval The interval in axis values (ms) and the count - * @param {Number} min The minimum in axis values - * @param {Number} max The maximum in axis values - * @param {Number} startOfWeek - */ - Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) { - var tickPositions = [], - i, - higherRanks = {}, - useUTC = defaultOptions.global.useUTC, - minYear, // used in months and years as a basis for Date.UTC() - minDate = new Date(min - getTZOffset(min)), - interval = normalizedInterval.unitRange, - count = normalizedInterval.count; - - if (defined(min)) { // #1300 - minDate[setMilliseconds](interval >= timeUnits.second ? 0 : // #3935 - count * mathFloor(minDate.getMilliseconds() / count)); // #3652, #3654 - - if (interval >= timeUnits.second) { // second - minDate[setSeconds](interval >= timeUnits.minute ? 0 : // #3935 - count * mathFloor(minDate.getSeconds() / count)); - } - - if (interval >= timeUnits.minute) { // minute - minDate[setMinutes](interval >= timeUnits.hour ? 0 : - count * mathFloor(minDate[getMinutes]() / count)); - } - - if (interval >= timeUnits.hour) { // hour - minDate[setHours](interval >= timeUnits.day ? 0 : - count * mathFloor(minDate[getHours]() / count)); - } - - if (interval >= timeUnits.day) { // day - minDate[setDate](interval >= timeUnits.month ? 1 : - count * mathFloor(minDate[getDate]() / count)); - } - - if (interval >= timeUnits.month) { // month - minDate[setMonth](interval >= timeUnits.year ? 0 : - count * mathFloor(minDate[getMonth]() / count)); - minYear = minDate[getFullYear](); - } - - if (interval >= timeUnits.year) { // year - minYear -= minYear % count; - minDate[setFullYear](minYear); - } - - // week is a special case that runs outside the hierarchy - if (interval === timeUnits.week) { - // get start of current week, independent of count - minDate[setDate](minDate[getDate]() - minDate[getDay]() + - pick(startOfWeek, 1)); - } - - - // get tick positions - i = 1; - if (timezoneOffset || getTimezoneOffset) { - minDate = minDate.getTime(); - minDate = new Date(minDate + getTZOffset(minDate)); - } - minYear = minDate[getFullYear](); - var time = minDate.getTime(), - minMonth = minDate[getMonth](), - minDateDate = minDate[getDate](), - localTimezoneOffset = (timeUnits.day + - (useUTC ? getTZOffset(minDate) : minDate.getTimezoneOffset() * 60 * 1000) - ) % timeUnits.day; // #950, #3359 - - // iterate and add tick positions at appropriate values - while (time < max) { - tickPositions.push(time); - - // if the interval is years, use Date.UTC to increase years - if (interval === timeUnits.year) { - time = makeTime(minYear + i * count, 0); - - // if the interval is months, use Date.UTC to increase months - } else if (interval === timeUnits.month) { - time = makeTime(minYear, minMonth + i * count); - - // if we're using global time, the interval is not fixed as it jumps - // one hour at the DST crossover - } else if (!useUTC && (interval === timeUnits.day || interval === timeUnits.week)) { - time = makeTime(minYear, minMonth, minDateDate + - i * count * (interval === timeUnits.day ? 1 : 7)); - - // else, the interval is fixed and we use simple addition - } else { - time += interval * count; - } - - i++; - } - - // push the last time - tickPositions.push(time); - - - // mark new days if the time is dividible by day (#1649, #1760) - each(grep(tickPositions, function (time) { - return interval <= timeUnits.hour && time % timeUnits.day === localTimezoneOffset; - }), function (time) { - higherRanks[time] = 'day'; - }); - } - - - // record information on the chosen unit - for dynamic label formatter - tickPositions.info = extend(normalizedInterval, { - higherRanks: higherRanks, - totalRange: interval * count - }); - - return tickPositions; - }; - - /** - * Get a normalized tick interval for dates. Returns a configuration object with - * unit range (interval), count and name. Used to prepare data for getTimeTicks. - * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs - * of segments in stock charts, the normalizing logic was extracted in order to - * prevent it for running over again for each segment having the same interval. - * #662, #697. - */ - Axis.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) { - var units = unitsOption || [[ - 'millisecond', // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], [ - 'second', - [1, 2, 5, 10, 15, 30] - ], [ - 'minute', - [1, 2, 5, 10, 15, 30] - ], [ - 'hour', - [1, 2, 3, 4, 6, 8, 12] - ], [ - 'day', - [1, 2] - ], [ - 'week', - [1, 2] - ], [ - 'month', - [1, 2, 3, 4, 6] - ], [ - 'year', - null - ]], - unit = units[units.length - 1], // default unit is years - interval = timeUnits[unit[0]], - multiples = unit[1], - count, - i; - - // loop through the units to find the one that best fits the tickInterval - for (i = 0; i < units.length; i++) { - unit = units[i]; - interval = timeUnits[unit[0]]; - multiples = unit[1]; - - - if (units[i + 1]) { - // lessThan is in the middle between the highest multiple and the next unit. - var lessThan = (interval * multiples[multiples.length - 1] + - timeUnits[units[i + 1][0]]) / 2; - - // break and keep the current unit - if (tickInterval <= lessThan) { - break; - } - } - } - - // prevent 2.5 years intervals, though 25, 250 etc. are allowed - if (interval === timeUnits.year && tickInterval < 5 * interval) { - multiples = [1, 2, 5]; - } - - // get the count - count = normalizeTickInterval( - tickInterval / interval, - multiples, - unit[0] === 'year' ? mathMax(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 - ); - - return { - unitRange: interval, - count: count, - unitName: unit[0] - }; - }; - /** - * Methods defined on the Axis prototype - */ - - /** - * Set the tick positions of a logarithmic axis - */ - Axis.prototype.getLogTickPositions = function (interval, min, max, minor) { - var axis = this, - options = axis.options, - axisLength = axis.len, - // Since we use this method for both major and minor ticks, - // use a local variable and return the result - positions = []; - - // Reset - if (!minor) { - axis._minorAutoInterval = null; - } - - // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. - if (interval >= 0.5) { - interval = mathRound(interval); - positions = axis.getLinearTickPositions(interval, min, max); - - // Second case: We need intermediary ticks. For example - // 1, 2, 4, 6, 8, 10, 20, 40 etc. - } else if (interval >= 0.08) { - var roundedMin = mathFloor(min), - intermediate, - i, - j, - len, - pos, - lastPos, - break2; - - if (interval > 0.3) { - intermediate = [1, 2, 4]; - } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 4, 6, 8]; - } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - } - - for (i = roundedMin; i < max + 1 && !break2; i++) { - len = intermediate.length; - for (j = 0; j < len && !break2; j++) { - pos = log2lin(lin2log(i) * intermediate[j]); - if (pos > min && (!minor || lastPos <= max) && lastPos !== UNDEFINED) { // #1670, lastPos is #3113 - positions.push(lastPos); - } - - if (lastPos > max) { - break2 = true; - } - lastPos = pos; - } - } - - // Third case: We are so deep in between whole logarithmic values that - // we might as well handle the tick positions like a linear axis. For - // example 1.01, 1.02, 1.03, 1.04. - } else { - var realMin = lin2log(min), - realMax = lin2log(max), - tickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'], - filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, - tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), - totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; - - interval = pick( - filteredTickIntervalOption, - axis._minorAutoInterval, - (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) - ); - - interval = normalizeTickInterval( - interval, - null, - getMagnitude(interval) - ); - - positions = map(axis.getLinearTickPositions( - interval, - realMin, - realMax - ), log2lin); - - if (!minor) { - axis._minorAutoInterval = interval / 5; - } - } - - // Set the axis-level tickInterval variable - if (!minor) { - axis.tickInterval = interval; - } - return positions; - };/** - * The tooltip object - * @param {Object} chart The chart instance - * @param {Object} options Tooltip options - */ - var Tooltip = Highcharts.Tooltip = function () { - this.init.apply(this, arguments); - }; - - Tooltip.prototype = { - - init: function (chart, options) { - - var borderWidth = options.borderWidth, - style = options.style, - padding = pInt(style.padding); - - // Save the chart and options - this.chart = chart; - this.options = options; - - // Keep track of the current series - //this.currentSeries = UNDEFINED; - - // List of crosshairs - this.crosshairs = []; - - // Current values of x and y when animating - this.now = { x: 0, y: 0 }; - - // The tooltip is initially hidden - this.isHidden = true; - - - // create the label - this.label = chart.renderer.label('', 0, 0, options.shape || 'callout', null, null, options.useHTML, null, 'tooltip') - .attr({ - padding: padding, - fill: options.backgroundColor, - 'stroke-width': borderWidth, - r: options.borderRadius, - zIndex: 8 - }) - .css(style) - .css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117) - .add() - .attr({ y: -9999 }); // #2301, #2657 - - // When using canVG the shadow shows up as a gray circle - // even if the tooltip is hidden. - if (!useCanVG) { - this.label.shadow(options.shadow); - } - - // Public property for getting the shared state. - this.shared = options.shared; - }, - - /** - * Destroy the tooltip and its elements. - */ - destroy: function () { - // Destroy and clear local variables - if (this.label) { - this.label = this.label.destroy(); - } - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - - /** - * Provide a soft movement for the tooltip - * - * @param {Number} x - * @param {Number} y - * @private - */ - move: function (x, y, anchorX, anchorY) { - var tooltip = this, - now = tooltip.now, - animate = tooltip.options.animation !== false && !tooltip.isHidden && - // When we get close to the target position, abort animation and land on the right place (#3056) - (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1), - skipAnchor = tooltip.followPointer || tooltip.len > 1; - - // Get intermediate values for animation - extend(now, { - x: animate ? (2 * now.x + x) / 3 : x, - y: animate ? (now.y + y) / 2 : y, - anchorX: skipAnchor ? UNDEFINED : animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, - anchorY: skipAnchor ? UNDEFINED : animate ? (now.anchorY + anchorY) / 2 : anchorY - }); - - // Move to the intermediate value - tooltip.label.attr(now); - - - // Run on next tick of the mouse tracker - if (animate) { - - // Never allow two timeouts - clearTimeout(this.tooltipTimeout); - - // Set the fixed interval ticking for the smooth tooltip - this.tooltipTimeout = setTimeout(function () { - // The interval function may still be running during destroy, so check that the chart is really there before calling. - if (tooltip) { - tooltip.move(x, y, anchorX, anchorY); - } - }, 32); - - } - }, - - /** - * Hide the tooltip - */ - hide: function (delay) { - var tooltip = this; - clearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766) - delay = pick(delay, this.options.hideDelay, 500); - if (!this.isHidden) { - this.hideTimer = syncTimeout(function () { - tooltip.label[delay ? 'fadeOut' : 'hide'](); - tooltip.isHidden = true; - }, delay); - } - }, - - /** - * Extendable method to get the anchor position of the tooltip - * from a point or set of points - */ - getAnchor: function (points, mouseEvent) { - var ret, - chart = this.chart, - inverted = chart.inverted, - plotTop = chart.plotTop, - plotLeft = chart.plotLeft, - plotX = 0, - plotY = 0, - yAxis, - xAxis; - - points = splat(points); - - // Pie uses a special tooltipPos - ret = points[0].tooltipPos; - - // When tooltip follows mouse, relate the position to the mouse - if (this.followPointer && mouseEvent) { - if (mouseEvent.chartX === UNDEFINED) { - mouseEvent = chart.pointer.normalize(mouseEvent); - } - ret = [ - mouseEvent.chartX - chart.plotLeft, - mouseEvent.chartY - plotTop - ]; - } - // When shared, use the average position - if (!ret) { - each(points, function (point) { - yAxis = point.series.yAxis; - xAxis = point.series.xAxis; - plotX += point.plotX + (!inverted && xAxis ? xAxis.left - plotLeft : 0); - plotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) + - (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 - }); - - plotX /= points.length; - plotY /= points.length; - - ret = [ - inverted ? chart.plotWidth - plotY : plotX, - this.shared && !inverted && points.length > 1 && mouseEvent ? - mouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424) - inverted ? chart.plotHeight - plotX : plotY - ]; - } - - return map(ret, mathRound); - }, - - /** - * Place the tooltip in a chart without spilling over - * and not covering the point it self. - */ - getPosition: function (boxWidth, boxHeight, point) { - - var chart = this.chart, - distance = this.distance, - ret = {}, - h = point.h || 0, // #4117 - swapped, - first = ['y', chart.chartHeight, boxHeight, point.plotY + chart.plotTop, chart.plotTop, chart.plotTop + chart.plotHeight], - second = ['x', chart.chartWidth, boxWidth, point.plotX + chart.plotLeft, chart.plotLeft, chart.plotLeft + chart.plotWidth], - // The far side is right or bottom - preferFarSide = pick(point.ttBelow, (chart.inverted && !point.negative) || (!chart.inverted && point.negative)), - /** - * Handle the preferred dimension. When the preferred dimension is tooltip - * on top or bottom of the point, it will look for space there. - */ - firstDimension = function (dim, outerSize, innerSize, point, min, max) { - var roomLeft = innerSize < point - distance, - roomRight = point + distance + innerSize < outerSize, - alignedLeft = point - distance - innerSize, - alignedRight = point + distance; - - if (preferFarSide && roomRight) { - ret[dim] = alignedRight; - } else if (!preferFarSide && roomLeft) { - ret[dim] = alignedLeft; - } else if (roomLeft) { - ret[dim] = mathMin(max - innerSize, alignedLeft - h < 0 ? alignedLeft : alignedLeft - h); - } else if (roomRight) { - ret[dim] = mathMax(min, alignedRight + h + innerSize > outerSize ? alignedRight : alignedRight + h); - } else { - return false; - } - }, - /** - * Handle the secondary dimension. If the preferred dimension is tooltip - * on top or bottom of the point, the second dimension is to align the tooltip - * above the point, trying to align center but allowing left or right - * align within the chart box. - */ - secondDimension = function (dim, outerSize, innerSize, point) { - var retVal; - - // Too close to the edge, return false and swap dimensions - if (point < distance || point > outerSize - distance) { - retVal = false; - // Align left/top - } else if (point < innerSize / 2) { - ret[dim] = 1; - // Align right/bottom - } else if (point > outerSize - innerSize / 2) { - ret[dim] = outerSize - innerSize - 2; - // Align center - } else { - ret[dim] = point - innerSize / 2; - } - return retVal; - }, - /** - * Swap the dimensions - */ - swap = function (count) { - var temp = first; - first = second; - second = temp; - swapped = count; - }, - run = function () { - if (firstDimension.apply(0, first) !== false) { - if (secondDimension.apply(0, second) === false && !swapped) { - swap(true); - run(); - } - } else if (!swapped) { - swap(true); - run(); - } else { - ret.x = ret.y = 0; - } - }; - - // Under these conditions, prefer the tooltip on the side of the point - if (chart.inverted || this.len > 1) { - swap(); - } - run(); - - return ret; - - }, - - /** - * In case no user defined formatter is given, this will be used. Note that the context - * here is an object holding point, series, x, y etc. - */ - defaultFormatter: function (tooltip) { - var items = this.points || splat(this), - s; - - // build the header - s = [tooltip.tooltipFooterHeaderFormatter(items[0])]; //#3397: abstraction to enable formatting of footer and header - - // build the values - s = s.concat(tooltip.bodyFormatter(items)); - - // footer - s.push(tooltip.tooltipFooterHeaderFormatter(items[0], true)); //#3397: abstraction to enable formatting of footer and header - - return s.join(''); - }, - - /** - * Refresh the tooltip's text and position. - * @param {Object} point - */ - refresh: function (point, mouseEvent) { - var tooltip = this, - chart = tooltip.chart, - label = tooltip.label, - options = tooltip.options, - x, - y, - anchor, - textConfig = {}, - text, - pointConfig = [], - formatter = options.formatter || tooltip.defaultFormatter, - hoverPoints = chart.hoverPoints, - borderColor, - shared = tooltip.shared, - currentSeries; - - clearTimeout(this.hideTimer); - - // get the reference point coordinates (pie charts use tooltipPos) - tooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer; - anchor = tooltip.getAnchor(point, mouseEvent); - x = anchor[0]; - y = anchor[1]; - - // shared tooltip, array is sent over - if (shared && !(point.series && point.series.noSharedTooltip)) { - - // hide previous hoverPoints and set new - - chart.hoverPoints = point; - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(point, function (item) { - item.setState(HOVER_STATE); - - pointConfig.push(item.getLabelConfig()); - }); - - textConfig = { - x: point[0].category, - y: point[0].y - }; - textConfig.points = pointConfig; - this.len = pointConfig.length; - point = point[0]; - - // single point tooltip - } else { - textConfig = point.getLabelConfig(); - } - text = formatter.call(textConfig, tooltip); - - // register the current series - currentSeries = point.series; - this.distance = pick(currentSeries.tooltipOptions.distance, 16); - - // update the inner HTML - if (text === false) { - this.hide(); - } else { - - // show it - if (tooltip.isHidden) { - stop(label); - label.attr('opacity', 1).show(); - } - - // update text - label.attr({ - text: text - }); - - // set the stroke color of the box - borderColor = options.borderColor || point.color || currentSeries.color || '#606060'; - label.attr({ - stroke: borderColor - }); - tooltip.updatePosition({ - plotX: x, - plotY: y, - negative: point.negative, - ttBelow: point.ttBelow, - h: anchor[2] || 0 - }); - - this.isHidden = false; - } - fireEvent(chart, 'tooltipRefresh', { - text: text, - x: x + chart.plotLeft, - y: y + chart.plotTop, - borderColor: borderColor - }); - }, - - /** - * Find the new position and perform the move - */ - updatePosition: function (point) { - var chart = this.chart, - label = this.label, - pos = (this.options.positioner || this.getPosition).call( - this, - label.width, - label.height, - point - ); - - // do the move - this.move( - mathRound(pos.x), - mathRound(pos.y || 0), // can be undefined (#3977) - point.plotX + chart.plotLeft, - point.plotY + chart.plotTop - ); - }, - - /** - * Get the best X date format based on the closest point range on the axis. - */ - getXDateFormat: function (point, options, xAxis) { - var xDateFormat, - dateTimeLabelFormats = options.dateTimeLabelFormats, - closestPointRange = xAxis && xAxis.closestPointRange, - n, - blank = '01-01 00:00:00.000', - strpos = { - millisecond: 15, - second: 12, - minute: 9, - hour: 6, - day: 3 - }, - date, - lastN = 'millisecond'; // for sub-millisecond data, #4223 - - if (closestPointRange) { - date = dateFormat('%m-%d %H:%M:%S.%L', point.x); - for (n in timeUnits) { - - // If the range is exactly one week and we're looking at a Sunday/Monday, go for the week format - if (closestPointRange === timeUnits.week && +dateFormat('%w', point.x) === xAxis.options.startOfWeek && - date.substr(6) === blank.substr(6)) { - n = 'week'; - break; - } - - // The first format that is too great for the range - if (timeUnits[n] > closestPointRange) { - n = lastN; - break; - } - - // If the point is placed every day at 23:59, we need to show - // the minutes as well. #2637. - if (strpos[n] && date.substr(strpos[n]) !== blank.substr(strpos[n])) { - break; - } - - // Weeks are outside the hierarchy, only apply them on Mondays/Sundays like in the first condition - if (n !== 'week') { - lastN = n; - } - } - - if (n) { - xDateFormat = dateTimeLabelFormats[n]; - } - } else { - xDateFormat = dateTimeLabelFormats.day; - } - - return xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 - }, - - /** - * Format the footer/header of the tooltip - * #3397: abstraction to enable formatting of footer and header - */ - tooltipFooterHeaderFormatter: function (point, isFooter) { - var footOrHead = isFooter ? 'footer' : 'header', - series = point.series, - tooltipOptions = series.tooltipOptions, - xDateFormat = tooltipOptions.xDateFormat, - xAxis = series.xAxis, - isDateTime = xAxis && xAxis.options.type === 'datetime' && isNumber(point.key), - formatString = tooltipOptions[footOrHead + 'Format']; - - // Guess the best date format based on the closest point distance (#568, #3418) - if (isDateTime && !xDateFormat) { - xDateFormat = this.getXDateFormat(point, tooltipOptions, xAxis); - } - - // Insert the footer date format if any - if (isDateTime && xDateFormat) { - formatString = formatString.replace('{point.key}', '{point.key:' + xDateFormat + '}'); - } - - return format(formatString, { - point: point, - series: series - }); - }, - - /** - * Build the body (lines) of the tooltip by iterating over the items and returning one entry for each item, - * abstracting this functionality allows to easily overwrite and extend it. - */ - bodyFormatter: function (items) { - return map(items, function (item) { - var tooltipOptions = item.series.tooltipOptions; - return (tooltipOptions.pointFormatter || item.point.tooltipFormatter).call(item.point, tooltipOptions.pointFormat); - }); - } - - }; - - var hoverChartIndex; - - // Global flag for touch support - hasTouch = doc && doc.documentElement.ontouchstart !== UNDEFINED; - - /** - * The mouse tracker object. All methods starting with "on" are primary DOM event handlers. - * Subsequent methods should be named differently from what they are doing. - * @param {Object} chart The Chart instance - * @param {Object} options The root options object - */ - var Pointer = Highcharts.Pointer = function (chart, options) { - this.init(chart, options); - }; - - Pointer.prototype = { - /** - * Initialize Pointer - */ - init: function (chart, options) { - - var chartOptions = options.chart, - chartEvents = chartOptions.events, - zoomType = useCanVG ? '' : chartOptions.zoomType, - inverted = chart.inverted, - zoomX, - zoomY; - - // Store references - this.options = options; - this.chart = chart; - - // Zoom status - this.zoomX = zoomX = /x/.test(zoomType); - this.zoomY = zoomY = /y/.test(zoomType); - this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); - this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); - this.hasZoom = zoomX || zoomY; - - // Do we need to handle click on a touch device? - this.runChartClick = chartEvents && !!chartEvents.click; - - this.pinchDown = []; - this.lastValidTouch = {}; - - if (Highcharts.Tooltip && options.tooltip.enabled) { - chart.tooltip = new Tooltip(chart, options.tooltip); - this.followTouchMove = pick(options.tooltip.followTouchMove, true); - } - - this.setDOMEvents(); - }, - - /** - * Add crossbrowser support for chartX and chartY - * @param {Object} e The event object in standard browsers - */ - normalize: function (e, chartPosition) { - var chartX, - chartY, - ePos; - - // IE normalizing - e = e || win.event; - if (!e.target) { - e.target = e.srcElement; - } - - // iOS (#2757) - ePos = e.touches ? (e.touches.length ? e.touches.item(0) : e.changedTouches[0]) : e; - - // Get mouse position - if (!chartPosition) { - this.chartPosition = chartPosition = offset(this.chart.container); - } - - // chartX and chartY - if (ePos.pageX === UNDEFINED) { // IE < 9. #886. - chartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is - // for IE10 quirks mode within framesets - chartY = e.y; - } else { - chartX = ePos.pageX - chartPosition.left; - chartY = ePos.pageY - chartPosition.top; - } - - return extend(e, { - chartX: mathRound(chartX), - chartY: mathRound(chartY) - }); - }, - - /** - * Get the click position in terms of axis values. - * - * @param {Object} e A pointer event - */ - getCoordinates: function (e) { - var coordinates = { - xAxis: [], - yAxis: [] - }; - - each(this.chart.axes, function (axis) { - coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) - }); - }); - return coordinates; - }, - - /** - * With line type charts with a single tracker, get the point closest to the mouse. - * Run Point.onMouseOver and display tooltip for the point or points. - */ - runPointActions: function (e) { - - var pointer = this, - chart = pointer.chart, - series = chart.series, - tooltip = chart.tooltip, - shared = tooltip ? tooltip.shared : false, - followPointer, - hoverPoint = chart.hoverPoint, - hoverSeries = chart.hoverSeries, - i, - distance = Number.MAX_VALUE, // #4511 - anchor, - noSharedTooltip, - stickToHoverSeries, - directTouch, - pointDistance, - kdpoints = [], - kdpoint, - kdpointT; - - // For hovering over the empty parts of the plot area (hoverSeries is undefined). - // If there is one series with point tracking (combo chart), don't go to nearest neighbour. - if (!shared && !hoverSeries) { - for (i = 0; i < series.length; i++) { - if (series[i].directTouch || !series[i].options.stickyTracking) { - series = []; - } - } - } - - // If it has a hoverPoint and that series requires direct touch (like columns, #3899), or we're on - // a noSharedTooltip series among shared tooltip series (#4546), use the hoverPoint . Otherwise, - // search the k-d tree. - stickToHoverSeries = hoverSeries && (shared ? hoverSeries.noSharedTooltip : hoverSeries.directTouch); - if (stickToHoverSeries && hoverPoint) { - kdpoint = hoverPoint; - - // Handle shared tooltip or cases where a series is not yet hovered - } else { - // Find nearest points on all series - each(series, function (s) { - // Skip hidden series - noSharedTooltip = s.noSharedTooltip && shared; - directTouch = !shared && s.directTouch; - if (s.visible && !noSharedTooltip && !directTouch && pick(s.options.enableMouseTracking, true)) { // #3821 - kdpointT = s.searchPoint(e, !noSharedTooltip && s.kdDimensions === 1); // #3828 - if (kdpointT) { - kdpoints.push(kdpointT); - } - } - }); - // Find absolute nearest point - each(kdpoints, function (p) { - pointDistance = !shared && p.series.kdDimensions === 1 ? p.dist : p.distX; // #4645 - - if (p && typeof pointDistance === 'number' && pointDistance < distance) { - distance = pointDistance; - kdpoint = p; - } - }); - } - - // Refresh tooltip for kdpoint if new hover point or tooltip was hidden // #3926, #4200 - if (kdpoint && (kdpoint !== this.prevKDPoint || (tooltip && tooltip.isHidden))) { - // Draw tooltip if necessary - if (shared && !kdpoint.series.noSharedTooltip) { - i = kdpoints.length; - while (i--) { - if (kdpoints[i].clientX !== kdpoint.clientX || kdpoints[i].series.noSharedTooltip) { - kdpoints.splice(i, 1); - } - } - if (kdpoints.length && tooltip) { - tooltip.refresh(kdpoints, e); - } - - // Do mouseover on all points (#3919, #3985, #4410) - each(kdpoints, function (point) { - point.onMouseOver(e, point !== ((hoverSeries && hoverSeries.directTouch && hoverPoint) || kdpoint)); - }); - } else { - if (tooltip) { - tooltip.refresh(kdpoint, e); - } - if (!hoverSeries || !hoverSeries.directTouch) { // #4448 - kdpoint.onMouseOver(e); - } - } - this.prevKDPoint = kdpoint; - - // Update positions (regardless of kdpoint or hoverPoint) - } else { - followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer; - if (tooltip && followPointer && !tooltip.isHidden) { - anchor = tooltip.getAnchor([{}], e); - tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] }); - } - } - - // Start the event listener to pick up the tooltip and crosshairs - if (!pointer._onDocumentMouseMove) { - pointer._onDocumentMouseMove = function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.onDocumentMouseMove(e); - } - }; - addEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - } - - // Crosshair - each(chart.axes, function (axis) { - axis.drawCrosshair(e, pick(kdpoint, hoverPoint)); - }); - - - }, - - - - /** - * Reset the tracking by hiding the tooltip, the hover series state and the hover point - * - * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible - */ - reset: function (allowMove, delay) { - var pointer = this, - chart = pointer.chart, - hoverSeries = chart.hoverSeries, - hoverPoint = chart.hoverPoint, - hoverPoints = chart.hoverPoints, - tooltip = chart.tooltip, - tooltipPoints = tooltip && tooltip.shared ? hoverPoints : hoverPoint; - - // Narrow in allowMove - allowMove = allowMove && tooltip && tooltipPoints; - - // Check if the points have moved outside the plot area (#1003, #4736) - if (allowMove) { - each(splat(tooltipPoints), function (point) { - if (point.plotX === undefined) { - allowMove = false; - } - }); - } - - // Just move the tooltip, #349 - if (allowMove) { - tooltip.refresh(tooltipPoints); - if (hoverPoint) { // #2500 - hoverPoint.setState(hoverPoint.state, true); - each(chart.axes, function (axis) { - if (pick(axis.options.crosshair && axis.options.crosshair.snap, true)) { - axis.drawCrosshair(null, hoverPoint); - } else { - axis.hideCrosshair(); - } - }); - - } - - // Full reset - } else { - - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - if (hoverSeries) { - hoverSeries.onMouseOut(); - } - - if (tooltip) { - tooltip.hide(delay); - } - - if (pointer._onDocumentMouseMove) { - removeEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - pointer._onDocumentMouseMove = null; - } - - // Remove crosshairs - each(chart.axes, function (axis) { - axis.hideCrosshair(); - }); - - pointer.hoverX = chart.hoverPoints = chart.hoverPoint = null; - - } - }, - - /** - * Scale series groups to a certain scale and translation - */ - scaleGroups: function (attribs, clip) { - - var chart = this.chart, - seriesAttribs; - - // Scale each series - each(chart.series, function (series) { - seriesAttribs = attribs || series.getPlotBox(); // #1701 - if (series.xAxis && series.xAxis.zoomEnabled) { - series.group.attr(seriesAttribs); - if (series.markerGroup) { - series.markerGroup.attr(seriesAttribs); - series.markerGroup.clip(clip ? chart.clipRect : null); - } - if (series.dataLabelsGroup) { - series.dataLabelsGroup.attr(seriesAttribs); - } - } - }); - - // Clip - chart.clipRect.attr(clip || chart.clipBox); - }, - - /** - * Start a drag operation - */ - dragStart: function (e) { - var chart = this.chart; - - // Record the start position - chart.mouseIsDown = e.type; - chart.cancelClick = false; - chart.mouseDownX = this.mouseDownX = e.chartX; - chart.mouseDownY = this.mouseDownY = e.chartY; - }, - - /** - * Perform a drag operation in response to a mousemove event while the mouse is down - */ - drag: function (e) { - - var chart = this.chart, - chartOptions = chart.options.chart, - chartX = e.chartX, - chartY = e.chartY, - zoomHor = this.zoomHor, - zoomVert = this.zoomVert, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - clickedInside, - size, - selectionMarker = this.selectionMarker, - mouseDownX = this.mouseDownX, - mouseDownY = this.mouseDownY, - panKey = chartOptions.panKey && e[chartOptions.panKey + 'Key']; - - // If the device supports both touch and mouse (like IE11), and we are touch-dragging - // inside the plot area, don't handle the mouse event. #4339. - if (selectionMarker && selectionMarker.touch) { - return; - } - - // If the mouse is outside the plot area, adjust to cooordinates - // inside to prevent the selection marker from going outside - if (chartX < plotLeft) { - chartX = plotLeft; - } else if (chartX > plotLeft + plotWidth) { - chartX = plotLeft + plotWidth; - } - - if (chartY < plotTop) { - chartY = plotTop; - } else if (chartY > plotTop + plotHeight) { - chartY = plotTop + plotHeight; - } - - // determine if the mouse has moved more than 10px - this.hasDragged = Math.sqrt( - Math.pow(mouseDownX - chartX, 2) + - Math.pow(mouseDownY - chartY, 2) - ); - - if (this.hasDragged > 10) { - clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); - - // make a selection - if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside && !panKey) { - if (!selectionMarker) { - this.selectionMarker = selectionMarker = chart.renderer.rect( - plotLeft, - plotTop, - zoomHor ? 1 : plotWidth, - zoomVert ? 1 : plotHeight, - 0 - ) - .attr({ - fill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)', - zIndex: 7 - }) - .add(); - } - } - - // adjust the width of the selection marker - if (selectionMarker && zoomHor) { - size = chartX - mouseDownX; - selectionMarker.attr({ - width: mathAbs(size), - x: (size > 0 ? 0 : size) + mouseDownX - }); - } - // adjust the height of the selection marker - if (selectionMarker && zoomVert) { - size = chartY - mouseDownY; - selectionMarker.attr({ - height: mathAbs(size), - y: (size > 0 ? 0 : size) + mouseDownY - }); - } - - // panning - if (clickedInside && !selectionMarker && chartOptions.panning) { - chart.pan(e, chartOptions.panning); - } - } - }, - - /** - * On mouse up or touch end across the entire document, drop the selection. - */ - drop: function (e) { - var pointer = this, - chart = this.chart, - hasPinched = this.hasPinched; - - if (this.selectionMarker) { - var selectionData = { - xAxis: [], - yAxis: [] - }, - selectionBox = this.selectionMarker, - selectionLeft = selectionBox.attr ? selectionBox.attr('x') : selectionBox.x, - selectionTop = selectionBox.attr ? selectionBox.attr('y') : selectionBox.y, - selectionWidth = selectionBox.attr ? selectionBox.attr('width') : selectionBox.width, - selectionHeight = selectionBox.attr ? selectionBox.attr('height') : selectionBox.height, - runZoom; - - // a selection has been made - if (this.hasDragged || hasPinched) { - - // record each axis' min and max - each(chart.axes, function (axis) { - if (axis.zoomEnabled && defined(axis.min) && (hasPinched || pointer[{ xAxis: 'zoomX', yAxis: 'zoomY' }[axis.coll]])) { // #859, #3569 - var horiz = axis.horiz, - minPixelPadding = e.type === 'touchend' ? axis.minPixelPadding : 0, // #1207, #3075 - selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop) + minPixelPadding), - selectionMax = axis.toValue((horiz ? selectionLeft + selectionWidth : selectionTop + selectionHeight) - minPixelPadding); - - selectionData[axis.coll].push({ - axis: axis, - min: mathMin(selectionMin, selectionMax), // for reversed axes - max: mathMax(selectionMin, selectionMax) - }); - runZoom = true; - } - }); - if (runZoom) { - fireEvent(chart, 'selection', selectionData, function (args) { - chart.zoom(extend(args, hasPinched ? { animation: false } : null)); - }); - } - - } - this.selectionMarker = this.selectionMarker.destroy(); - - // Reset scaling preview - if (hasPinched) { - this.scaleGroups(); - } - } - - // Reset all - if (chart) { // it may be destroyed on mouse up - #877 - css(chart.container, { cursor: chart._cursor }); - chart.cancelClick = this.hasDragged > 10; // #370 - chart.mouseIsDown = this.hasDragged = this.hasPinched = false; - this.pinchDown = []; - } - }, - - onContainerMouseDown: function (e) { - - e = this.normalize(e); - - // issue #295, dragging not always working in Firefox - if (e.preventDefault) { - e.preventDefault(); - } - - this.dragStart(e); - }, - - - - onDocumentMouseUp: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - }, - - /** - * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea. - * Issue #149 workaround. The mouseleave event does not always fire. - */ - onDocumentMouseMove: function (e) { - var chart = this.chart, - chartPosition = this.chartPosition; - - e = this.normalize(e, chartPosition); - - // If we're outside, hide the tooltip - if (chartPosition && !this.inClass(e.target, 'highcharts-tracker') && - !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - this.reset(); - } - }, - - /** - * When mouse leaves the container, hide the tooltip. - */ - onContainerMouseLeave: function () { - var chart = charts[hoverChartIndex]; - if (chart) { - chart.pointer.reset(); - chart.pointer.chartPosition = null; // also reset the chart position, used in #149 fix - } - }, - - // The mousemove, touchmove and touchstart event handler - onContainerMouseMove: function (e) { - - var chart = this.chart; - - hoverChartIndex = chart.index; - - e = this.normalize(e); - e.returnValue = false; // #2251, #3224 - - if (chart.mouseIsDown === 'mousedown') { - this.drag(e); - } - - // Show the tooltip and run mouse over events (#977) - if ((this.inClass(e.target, 'highcharts-tracker') || - chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { - this.runPointActions(e); - } - }, - - /** - * Utility to detect whether an element has, or has a parent with, a specific - * class name. Used on detection of tracker objects and on deciding whether - * hovering the tooltip should cause the active series to mouse out. - */ - inClass: function (element, className) { - var elemClassName; - while (element) { - elemClassName = attr(element, 'class'); - if (elemClassName) { - if (elemClassName.indexOf(className) !== -1) { - return true; - } - if (elemClassName.indexOf(PREFIX + 'container') !== -1) { - return false; - } - } - element = element.parentNode; - } - }, - - onTrackerMouseOut: function (e) { - var series = this.chart.hoverSeries, - relatedTarget = e.relatedTarget || e.toElement; - - if (series && !series.options.stickyTracking && - !this.inClass(relatedTarget, PREFIX + 'tooltip') && - !this.inClass(relatedTarget, PREFIX + 'series-' + series.index)) { // #2499, #4465 - series.onMouseOut(); - } - }, - - onContainerClick: function (e) { - var chart = this.chart, - hoverPoint = chart.hoverPoint, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop; - - e = this.normalize(e); - - if (!chart.cancelClick) { - - // On tracker click, fire the series and point events. #783, #1583 - if (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) { - - // the series click event - fireEvent(hoverPoint.series, 'click', extend(e, { - point: hoverPoint - })); - - // the point click event - if (chart.hoverPoint) { // it may be destroyed (#1844) - hoverPoint.firePointEvent('click', e); - } - - // When clicking outside a tracker, fire a chart event - } else { - extend(e, this.getCoordinates(e)); - - // fire a click event in the chart - if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { - fireEvent(chart, 'click', e); - } - } - - - } - }, - - /** - * Set the JS DOM events on the container and document. This method should contain - * a one-to-one assignment between methods and their handlers. Any advanced logic should - * be moved to the handler reflecting the event's name. - */ - setDOMEvents: function () { - - var pointer = this, - container = pointer.chart.container; - - container.onmousedown = function (e) { - pointer.onContainerMouseDown(e); - }; - container.onmousemove = function (e) { - pointer.onContainerMouseMove(e); - }; - container.onclick = function (e) { - pointer.onContainerClick(e); - }; - addEvent(container, 'mouseleave', pointer.onContainerMouseLeave); - if (chartCount === 1) { - addEvent(doc, 'mouseup', pointer.onDocumentMouseUp); - } - if (hasTouch) { - container.ontouchstart = function (e) { - pointer.onContainerTouchStart(e); - }; - container.ontouchmove = function (e) { - pointer.onContainerTouchMove(e); - }; - if (chartCount === 1) { - addEvent(doc, 'touchend', pointer.onDocumentTouchEnd); - } - } - - }, - - /** - * Destroys the Pointer object and disconnects DOM events. - */ - destroy: function () { - var prop; - - removeEvent(this.chart.container, 'mouseleave', this.onContainerMouseLeave); - if (!chartCount) { - removeEvent(doc, 'mouseup', this.onDocumentMouseUp); - removeEvent(doc, 'touchend', this.onDocumentTouchEnd); - } - - // memory and CPU leak - clearInterval(this.tooltipTimeout); - - for (prop in this) { - this[prop] = null; - } - } - }; - - - /* Support for touch devices */ - extend(Highcharts.Pointer.prototype, { - - /** - * Run translation operations - */ - pinchTranslate: function (pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { - if (this.zoomHor || this.pinchHor) { - this.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - if (this.zoomVert || this.pinchVert) { - this.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - }, - - /** - * Run translation operations for each direction (horizontal and vertical) independently - */ - pinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, forcedScale) { - var chart = this.chart, - xy = horiz ? 'x' : 'y', - XY = horiz ? 'X' : 'Y', - sChartXY = 'chart' + XY, - wh = horiz ? 'width' : 'height', - plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], - selectionWH, - selectionXY, - clipXY, - scale = forcedScale || 1, - inverted = chart.inverted, - bounds = chart.bounds[horiz ? 'h' : 'v'], - singleTouch = pinchDown.length === 1, - touch0Start = pinchDown[0][sChartXY], - touch0Now = touches[0][sChartXY], - touch1Start = !singleTouch && pinchDown[1][sChartXY], - touch1Now = !singleTouch && touches[1][sChartXY], - outOfBounds, - transformScale, - scaleKey, - setScale = function () { - if (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis - scale = forcedScale || mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start); - } - - clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; - selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale; - }; - - // Set the scale, first pass - setScale(); - - selectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not - - // Out of bounds - if (selectionXY < bounds.min) { - selectionXY = bounds.min; - outOfBounds = true; - } else if (selectionXY + selectionWH > bounds.max) { - selectionXY = bounds.max - selectionWH; - outOfBounds = true; - } - - // Is the chart dragged off its bounds, determined by dataMin and dataMax? - if (outOfBounds) { - - // Modify the touchNow position in order to create an elastic drag movement. This indicates - // to the user that the chart is responsive but can't be dragged further. - touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); - if (!singleTouch) { - touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); - } - - // Set the scale, second pass to adapt to the modified touchNow positions - setScale(); - - } else { - lastValidTouch[xy] = [touch0Now, touch1Now]; - } - - // Set geometry for clipping, selection and transformation - if (!inverted) { - clip[xy] = clipXY - plotLeftTop; - clip[wh] = selectionWH; - } - scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; - transformScale = inverted ? 1 / scale : scale; - - selectionMarker[wh] = selectionWH; - selectionMarker[xy] = selectionXY; - transform[scaleKey] = scale; - transform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start)); - }, - - /** - * Handle touch events with two touches - */ - pinch: function (e) { - - var self = this, - chart = self.chart, - pinchDown = self.pinchDown, - touches = e.touches, - touchesLength = touches.length, - lastValidTouch = self.lastValidTouch, - hasZoom = self.hasZoom, - selectionMarker = self.selectionMarker, - transform = {}, - fireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && - chart.runTrackerClick) || self.runChartClick), - clip = {}; - - // Don't initiate panning until the user has pinched. This prevents us from - // blocking page scrolling as users scroll down a long page (#4210). - if (touchesLength > 1) { - self.initiated = true; - } - - // On touch devices, only proceed to trigger click if a handler is defined - if (hasZoom && self.initiated && !fireClickEvent) { - e.preventDefault(); - } - - // Normalize each touch - map(touches, function (e) { - return self.normalize(e); - }); - - // Register the touch start position - if (e.type === 'touchstart') { - each(touches, function (e, i) { - pinchDown[i] = { chartX: e.chartX, chartY: e.chartY }; - }); - lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX]; - lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY]; - - // Identify the data bounds in pixels - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], - minPixelPadding = axis.minPixelPadding, - min = axis.toPixels(pick(axis.options.min, axis.dataMin)), - max = axis.toPixels(pick(axis.options.max, axis.dataMax)), - absMin = mathMin(min, max), - absMax = mathMax(min, max); - - // Store the bounds for use in the touchmove handler - bounds.min = mathMin(axis.pos, absMin - minPixelPadding); - bounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding); - } - }); - self.res = true; // reset on next move - - // Event type is touchmove, handle panning and pinching - } else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first - - - // Set the marker - if (!selectionMarker) { - self.selectionMarker = selectionMarker = extend({ - destroy: noop, - touch: true - }, chart.plotBox); - } - - self.pinchTranslate(pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - - self.hasPinched = hasZoom; - - // Scale and translate the groups to provide visual feedback during pinching - self.scaleGroups(transform, clip); - - // Optionally move the tooltip on touchmove - if (!hasZoom && self.followTouchMove && touchesLength === 1) { - this.runPointActions(self.normalize(e)); - } else if (self.res) { - self.res = false; - this.reset(false, 0); - } - } - }, - - /** - * General touch handler shared by touchstart and touchmove. - */ - touch: function (e, start) { - var chart = this.chart; - - hoverChartIndex = chart.index; - - if (e.touches.length === 1) { - - e = this.normalize(e); - - if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop) && !chart.openMenu) { - - // Run mouse events and display tooltip etc - if (start) { - this.runPointActions(e); - } - - this.pinch(e); - - } else if (start) { - // Hide the tooltip on touching outside the plot area (#1203) - this.reset(); - } - - } else if (e.touches.length === 2) { - this.pinch(e); - } - }, - - onContainerTouchStart: function (e) { - this.touch(e, true); - }, - - onContainerTouchMove: function (e) { - this.touch(e); - }, - - onDocumentTouchEnd: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - } - - }); - if (win.PointerEvent || win.MSPointerEvent) { - - // The touches object keeps track of the points being touched at all times - var touches = {}, - hasPointerEvent = !!win.PointerEvent, - getWebkitTouches = function () { - var key, fake = []; - fake.item = function (i) { - return this[i]; - }; - for (key in touches) { - if (touches.hasOwnProperty(key)) { - fake.push({ - pageX: touches[key].pageX, - pageY: touches[key].pageY, - target: touches[key].target - }); - } - } - return fake; - }, - translateMSPointer = function (e, method, wktype, func) { - var p; - if ((e.pointerType === 'touch' || e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[hoverChartIndex]) { - func(e); - p = charts[hoverChartIndex].pointer; - p[method]({ - type: wktype, - target: e.currentTarget, - preventDefault: noop, - touches: getWebkitTouches() - }); - } - }; - - /** - * Extend the Pointer prototype with methods for each event handler and more - */ - extend(Pointer.prototype, { - onContainerPointerDown: function (e) { - translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY, target: e.currentTarget }; - }); - }, - onContainerPointerMove: function (e) { - translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY }; - if (!touches[e.pointerId].target) { - touches[e.pointerId].target = e.currentTarget; - } - }); - }, - onDocumentPointerUp: function (e) { - translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function (e) { - delete touches[e.pointerId]; - }); - }, - - /** - * Add or remove the MS Pointer specific events - */ - batchMSEvents: function (fn) { - fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); - fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); - fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - } - }); - - // Disable default IE actions for pinch and such on chart element - wrap(Pointer.prototype, 'init', function (proceed, chart, options) { - proceed.call(this, chart, options); - if (this.hasZoom) { // #4014 - css(chart.container, { - '-ms-touch-action': NONE, - 'touch-action': NONE - }); - } - }); - - // Add IE specific touch events to chart - wrap(Pointer.prototype, 'setDOMEvents', function (proceed) { - proceed.apply(this); - if (this.hasZoom || this.followTouchMove) { - this.batchMSEvents(addEvent); - } - }); - // Destroy MS events also - wrap(Pointer.prototype, 'destroy', function (proceed) { - this.batchMSEvents(removeEvent); - proceed.call(this); - }); - } - /** - * The overview of the chart's series - */ - var Legend = Highcharts.Legend = function (chart, options) { - this.init(chart, options); - }; - - Legend.prototype = { - - /** - * Initialize the legend - */ - init: function (chart, options) { - - var legend = this, - itemStyle = options.itemStyle, - padding, - itemMarginTop = options.itemMarginTop || 0; - - this.options = options; - - if (!options.enabled) { - return; - } - - legend.itemStyle = itemStyle; - legend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle); - legend.itemMarginTop = itemMarginTop; - legend.padding = padding = pick(options.padding, 8); - legend.initialItemX = padding; - legend.initialItemY = padding - 5; // 5 is the number of pixels above the text - legend.maxItemWidth = 0; - legend.chart = chart; - legend.itemHeight = 0; - legend.symbolWidth = pick(options.symbolWidth, 16); - legend.pages = []; - - - // Render it - legend.render(); - - // move checkboxes - addEvent(legend.chart, 'endResize', function () { - legend.positionCheckboxes(); - }); - - }, - - /** - * Set the colors for the legend item - * @param {Object} item A Series or Point instance - * @param {Object} visible Dimmed or colored - */ - colorizeItem: function (item, visible) { - var legend = this, - options = legend.options, - legendItem = item.legendItem, - legendLine = item.legendLine, - legendSymbol = item.legendSymbol, - hiddenColor = legend.itemHiddenStyle.color, - textColor = visible ? options.itemStyle.color : hiddenColor, - symbolColor = visible ? (item.legendColor || item.color || '#CCC') : hiddenColor, - markerOptions = item.options && item.options.marker, - symbolAttr = { fill: symbolColor }, - key, - val; - - if (legendItem) { - legendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE - } - if (legendLine) { - legendLine.attr({ stroke: symbolColor }); - } - - if (legendSymbol) { - - // Apply marker options - if (markerOptions && legendSymbol.isMarker) { // #585 - symbolAttr.stroke = symbolColor; - markerOptions = item.convertAttribs(markerOptions); - for (key in markerOptions) { - val = markerOptions[key]; - if (val !== UNDEFINED) { - symbolAttr[key] = val; - } - } - } - - legendSymbol.attr(symbolAttr); - } - }, - - /** - * Position the legend item - * @param {Object} item A Series or Point instance - */ - positionItem: function (item) { - var legend = this, - options = legend.options, - symbolPadding = options.symbolPadding, - ltr = !options.rtl, - legendItemPos = item._legendItemPos, - itemX = legendItemPos[0], - itemY = legendItemPos[1], - checkbox = item.checkbox, - legendGroup = item.legendGroup; - - if (legendGroup && legendGroup.element) { - legendGroup.translate( - ltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4, - itemY - ); - } - - if (checkbox) { - checkbox.x = itemX; - checkbox.y = itemY; - } - }, - - /** - * Destroy a single legend item - * @param {Object} item The series or point - */ - destroyItem: function (item) { - var checkbox = item.checkbox; - - // destroy SVG elements - each(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) { - if (item[key]) { - item[key] = item[key].destroy(); - } - }); - - if (checkbox) { - discardElement(item.checkbox); - } - }, - - /** - * Destroys the legend. - */ - destroy: function () { - var legend = this, - legendGroup = legend.group, - box = legend.box; - - if (box) { - legend.box = box.destroy(); - } - - if (legendGroup) { - legend.group = legendGroup.destroy(); - } - }, - - /** - * Position the checkboxes after the width is determined - */ - positionCheckboxes: function (scrollOffset) { - var alignAttr = this.group.alignAttr, - translateY, - clipHeight = this.clipHeight || this.legendHeight, - titleHeight = this.titleHeight; - - if (alignAttr) { - translateY = alignAttr.translateY; - each(this.allItems, function (item) { - var checkbox = item.checkbox, - top; - - if (checkbox) { - top = translateY + titleHeight + checkbox.y + (scrollOffset || 0) + 3; - css(checkbox, { - left: (alignAttr.translateX + item.checkboxOffset + checkbox.x - 20) + PX, - top: top + PX, - display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE - }); - } - }); - } - }, - - /** - * Render the legend title on top of the legend - */ - renderTitle: function () { - var options = this.options, - padding = this.padding, - titleOptions = options.title, - titleHeight = 0, - bBox; - - if (titleOptions.text) { - if (!this.title) { - this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title') - .attr({ zIndex: 1 }) - .css(titleOptions.style) - .add(this.group); - } - bBox = this.title.getBBox(); - titleHeight = bBox.height; - this.offsetWidth = bBox.width; // #1717 - this.contentGroup.attr({ translateY: titleHeight }); - } - this.titleHeight = titleHeight; - }, - - /** - * Set the legend item text - */ - setText: function (item) { - var options = this.options; - item.legendItem.attr({ - text: options.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item) - }); - }, - - /** - * Render a single specific legend item - * @param {Object} item A series or point - */ - renderItem: function (item) { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - options = legend.options, - horizontal = options.layout === 'horizontal', - symbolWidth = legend.symbolWidth, - symbolPadding = options.symbolPadding, - itemStyle = legend.itemStyle, - itemHiddenStyle = legend.itemHiddenStyle, - padding = legend.padding, - itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, - ltr = !options.rtl, - itemHeight, - widthOption = options.width, - itemMarginBottom = options.itemMarginBottom || 0, - itemMarginTop = legend.itemMarginTop, - initialItemX = legend.initialItemX, - bBox, - itemWidth, - li = item.legendItem, - series = item.series && item.series.drawLegendSymbol ? item.series : item, - seriesOptions = series.options, - showCheckbox = legend.createCheckboxForItem && seriesOptions && seriesOptions.showCheckbox, - useHTML = options.useHTML; - - if (!li) { // generate it once, later move it - - // Generate the group box - // A group to hold the symbol and text. Text is to be appended in Legend class. - item.legendGroup = renderer.g('legend-item') - .attr({ zIndex: 1 }) - .add(legend.scrollGroup); - - // Generate the list item text and add it to the group - item.legendItem = li = renderer.text( - '', - ltr ? symbolWidth + symbolPadding : -symbolPadding, - legend.baseline || 0, - useHTML - ) - .css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021) - .attr({ - align: ltr ? 'left' : 'right', - zIndex: 2 - }) - .add(item.legendGroup); - - // Get the baseline for the first item - the font size is equal for all - if (!legend.baseline) { - legend.fontMetrics = renderer.fontMetrics(itemStyle.fontSize, li); - legend.baseline = legend.fontMetrics.f + 3 + itemMarginTop; - li.attr('y', legend.baseline); - } - - // Draw the legend symbol inside the group box - series.drawLegendSymbol(legend, item); - - if (legend.setItemEvents) { - legend.setItemEvents(item, li, useHTML, itemStyle, itemHiddenStyle); - } - - // Colorize the items - legend.colorizeItem(item, item.visible); - - // add the HTML checkbox on top - if (showCheckbox) { - legend.createCheckboxForItem(item); - } - } - - // Always update the text - legend.setText(item); - - // calculate the positions for the next line - bBox = li.getBBox(); - - itemWidth = item.checkboxOffset = - options.itemWidth || - item.legendItemWidth || - symbolWidth + symbolPadding + bBox.width + itemDistance + (showCheckbox ? 20 : 0); - legend.itemHeight = itemHeight = mathRound(item.legendItemHeight || bBox.height); - - // if the item exceeds the width, start a new line - if (horizontal && legend.itemX - initialItemX + itemWidth > - (widthOption || (chart.chartWidth - 2 * padding - initialItemX - options.x))) { - legend.itemX = initialItemX; - legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom; - legend.lastLineHeight = 0; // reset for next line (#915, #3976) - } - - // If the item exceeds the height, start a new column - /*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) { - legend.itemY = legend.initialItemY; - legend.itemX += legend.maxItemWidth; - legend.maxItemWidth = 0; - }*/ - - // Set the edge positions - legend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth); - legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; - legend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915 - - // cache the position of the newly generated or reordered items - item._legendItemPos = [legend.itemX, legend.itemY]; - - // advance - if (horizontal) { - legend.itemX += itemWidth; - - } else { - legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; - legend.lastLineHeight = itemHeight; - } - - // the width of the widest item - legend.offsetWidth = widthOption || mathMax( - (horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding, - legend.offsetWidth - ); - }, - - /** - * Get all items, which is one item per series for normal series and one item per point - * for pie series. - */ - getAllItems: function () { - var allItems = []; - each(this.chart.series, function (series) { - var seriesOptions = series.options; - - // Handle showInLegend. If the series is linked to another series, defaults to false. - if (!pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? UNDEFINED : false, true)) { - return; - } - - // use points or series for the legend item depending on legendType - allItems = allItems.concat( - series.legendItems || - (seriesOptions.legendType === 'point' ? - series.data : - series) - ); - }); - return allItems; - }, - - /** - * Adjust the chart margins by reserving space for the legend on only one side - * of the chart. If the position is set to a corner, top or bottom is reserved - * for horizontal legends and left or right for vertical ones. - */ - adjustMargins: function (margin, spacing) { - var chart = this.chart, - options = this.options, - // Use the first letter of each alignment option in order to detect the side - alignment = options.align.charAt(0) + options.verticalAlign.charAt(0) + options.layout.charAt(0); // #4189 - use charAt(x) notation instead of [x] for IE7 - - if (this.display && !options.floating) { - - each([ - /(lth|ct|rth)/, - /(rtv|rm|rbv)/, - /(rbh|cb|lbh)/, - /(lbv|lm|ltv)/ - ], function (alignments, side) { - if (alignments.test(alignment) && !defined(margin[side])) { - // Now we have detected on which side of the chart we should reserve space for the legend - chart[marginNames[side]] = mathMax( - chart[marginNames[side]], - chart.legend[(side + 1) % 2 ? 'legendHeight' : 'legendWidth'] + - [1, -1, -1, 1][side] * options[(side % 2) ? 'x' : 'y'] + - pick(options.margin, 12) + - spacing[side] - ); - } - }); - } - }, - - /** - * Render the legend. This method can be called both before and after - * chart.render. If called after, it will only rearrange items instead - * of creating new ones. - */ - render: function () { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - legendGroup = legend.group, - allItems, - display, - legendWidth, - legendHeight, - box = legend.box, - options = legend.options, - padding = legend.padding, - legendBorderWidth = options.borderWidth, - legendBackgroundColor = options.backgroundColor; - - legend.itemX = legend.initialItemX; - legend.itemY = legend.initialItemY; - legend.offsetWidth = 0; - legend.lastItemY = 0; - - if (!legendGroup) { - legend.group = legendGroup = renderer.g('legend') - .attr({ zIndex: 7 }) - .add(); - legend.contentGroup = renderer.g() - .attr({ zIndex: 1 }) // above background - .add(legendGroup); - legend.scrollGroup = renderer.g() - .add(legend.contentGroup); - } - - legend.renderTitle(); - - // add each series or point - allItems = legend.getAllItems(); - - // sort by legendIndex - stableSort(allItems, function (a, b) { - return ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0); - }); - - // reversed legend - if (options.reversed) { - allItems.reverse(); - } - - legend.allItems = allItems; - legend.display = display = !!allItems.length; - - // render the items - legend.lastLineHeight = 0; - each(allItems, function (item) { - legend.renderItem(item); - }); - - // Get the box - legendWidth = (options.width || legend.offsetWidth) + padding; - legendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight; - legendHeight = legend.handleOverflow(legendHeight); - legendHeight += padding; - - // Draw the border and/or background - if (legendBorderWidth || legendBackgroundColor) { - - if (!box) { - legend.box = box = renderer.rect( - 0, - 0, - legendWidth, - legendHeight, - options.borderRadius, - legendBorderWidth || 0 - ).attr({ - stroke: options.borderColor, - 'stroke-width': legendBorderWidth || 0, - fill: legendBackgroundColor || NONE - }) - .add(legendGroup) - .shadow(options.shadow); - box.isNew = true; - - } else if (legendWidth > 0 && legendHeight > 0) { - box[box.isNew ? 'attr' : 'animate']( - box.crisp({ width: legendWidth, height: legendHeight }) - ); - box.isNew = false; - } - - // hide the border if no items - box[display ? 'show' : 'hide'](); - } - - legend.legendWidth = legendWidth; - legend.legendHeight = legendHeight; - - // Now that the legend width and height are established, put the items in the - // final position - each(allItems, function (item) { - legend.positionItem(item); - }); - - // 1.x compatibility: positioning based on style - /*var props = ['left', 'right', 'top', 'bottom'], - prop, - i = 4; - while (i--) { - prop = props[i]; - if (options.style[prop] && options.style[prop] !== 'auto') { - options[i < 2 ? 'align' : 'verticalAlign'] = prop; - options[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1); - } - }*/ - - if (display) { - legendGroup.align(extend({ - width: legendWidth, - height: legendHeight - }, options), true, 'spacingBox'); - } - - if (!chart.isResizing) { - this.positionCheckboxes(); - } - }, - - /** - * Set up the overflow handling by adding navigation with up and down arrows below the - * legend. - */ - handleOverflow: function (legendHeight) { - var legend = this, - chart = this.chart, - renderer = chart.renderer, - options = this.options, - optionsY = options.y, - alignTop = options.verticalAlign === 'top', - spaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding, - maxHeight = options.maxHeight, - clipHeight, - clipRect = this.clipRect, - navOptions = options.navigation, - animation = pick(navOptions.animation, true), - arrowSize = navOptions.arrowSize || 12, - nav = this.nav, - pages = this.pages, - padding = this.padding, - lastY, - allItems = this.allItems, - clipToHeight = function (height) { - clipRect.attr({ - height: height - }); - - // useHTML - if (legend.contentGroup.div) { - legend.contentGroup.div.style.clip = 'rect(' + padding + 'px,9999px,' + (padding + height) + 'px,0)'; - } - }; - - - // Adjust the height - if (options.layout === 'horizontal') { - spaceHeight /= 2; - } - if (maxHeight) { - spaceHeight = mathMin(spaceHeight, maxHeight); - } - - // Reset the legend height and adjust the clipping rectangle - pages.length = 0; - if (legendHeight > spaceHeight) { - - this.clipHeight = clipHeight = mathMax(spaceHeight - 20 - this.titleHeight - padding, 0); - this.currentPage = pick(this.currentPage, 1); - this.fullHeight = legendHeight; - - // Fill pages with Y positions so that the top of each a legend item defines - // the scroll top for each page (#2098) - each(allItems, function (item, i) { - var y = item._legendItemPos[1], - h = mathRound(item.legendItem.getBBox().height), - len = pages.length; - - if (!len || (y - pages[len - 1] > clipHeight && (lastY || y) !== pages[len - 1])) { - pages.push(lastY || y); - len++; - } - - if (i === allItems.length - 1 && y + h - pages[len - 1] > clipHeight) { - pages.push(y); - } - if (y !== lastY) { - lastY = y; - } - }); - - // Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787) - if (!clipRect) { - clipRect = legend.clipRect = renderer.clipRect(0, padding, 9999, 0); - legend.contentGroup.clip(clipRect); - } - - clipToHeight(clipHeight); - - // Add navigation elements - if (!nav) { - this.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group); - this.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(-1, animation); - }) - .add(nav); - this.pager = renderer.text('', 15, 10) - .css(navOptions.style) - .add(nav); - this.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(1, animation); - }) - .add(nav); - } - - // Set initial position - legend.scroll(0); - - legendHeight = spaceHeight; - - } else if (nav) { - clipToHeight(chart.chartHeight); - nav.hide(); - this.scrollGroup.attr({ - translateY: 1 - }); - this.clipHeight = 0; // #1379 - } - - return legendHeight; - }, - - /** - * Scroll the legend by a number of pages - * @param {Object} scrollBy - * @param {Object} animation - */ - scroll: function (scrollBy, animation) { - var pages = this.pages, - pageCount = pages.length, - currentPage = this.currentPage + scrollBy, - clipHeight = this.clipHeight, - navOptions = this.options.navigation, - activeColor = navOptions.activeColor, - inactiveColor = navOptions.inactiveColor, - pager = this.pager, - padding = this.padding, - scrollOffset; - - // When resizing while looking at the last page - if (currentPage > pageCount) { - currentPage = pageCount; - } - - if (currentPage > 0) { - - if (animation !== UNDEFINED) { - setAnimation(animation, this.chart); - } - - this.nav.attr({ - translateX: padding, - translateY: clipHeight + this.padding + 7 + this.titleHeight, - visibility: VISIBLE - }); - this.up.attr({ - fill: currentPage === 1 ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === 1 ? 'default' : 'pointer' - }); - pager.attr({ - text: currentPage + '/' + pageCount - }); - this.down.attr({ - x: 18 + this.pager.getBBox().width, // adjust to text width - fill: currentPage === pageCount ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === pageCount ? 'default' : 'pointer' - }); - - scrollOffset = -pages[currentPage - 1] + this.initialItemY; - - this.scrollGroup.animate({ - translateY: scrollOffset - }); - - this.currentPage = currentPage; - this.positionCheckboxes(scrollOffset); - } - - } - - }; - - /* - * LegendSymbolMixin - */ - - var LegendSymbolMixin = Highcharts.LegendSymbolMixin = { - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawRectangle: function (legend, item) { - var symbolHeight = legend.options.symbolHeight || legend.fontMetrics.f; - - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - symbolHeight + 1, // #3988 - legend.symbolWidth, - symbolHeight, - legend.options.symbolRadius || 0 - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - - }, - - /** - * Get the series' symbol in the legend. This method should be overridable to create custom - * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols. - * - * @param {Object} legend The legend object - */ - drawLineMarker: function (legend) { - - var options = this.options, - markerOptions = options.marker, - radius, - legendSymbol, - symbolWidth = legend.symbolWidth, - renderer = this.chart.renderer, - legendItemGroup = this.legendGroup, - verticalCenter = legend.baseline - mathRound(legend.fontMetrics.b * 0.3), - attr; - - // Draw the line - if (options.lineWidth) { - attr = { - 'stroke-width': options.lineWidth - }; - if (options.dashStyle) { - attr.dashstyle = options.dashStyle; - } - this.legendLine = renderer.path([ - M, - 0, - verticalCenter, - L, - symbolWidth, - verticalCenter - ]) - .attr(attr) - .add(legendItemGroup); - } - - // Draw the marker - if (markerOptions && markerOptions.enabled !== false) { - radius = markerOptions.radius; - this.legendSymbol = legendSymbol = renderer.symbol( - this.symbol, - (symbolWidth / 2) - radius, - verticalCenter - radius, - 2 * radius, - 2 * radius, - markerOptions - ) - .add(legendItemGroup); - legendSymbol.isMarker = true; - } - } - }; - - // Workaround for #2030, horizontal legend items not displaying in IE11 Preview, - // and for #2580, a similar drawing flaw in Firefox 26. - // Explore if there's a general cause for this. The problem may be related - // to nested group elements, as the legend item texts are within 4 group elements. - if (/Trident\/7\.0/.test(userAgent) || isFirefox) { - wrap(Legend.prototype, 'positionItem', function (proceed, item) { - var legend = this, - runPositionItem = function () { // If chart destroyed in sync, this is undefined (#2030) - if (item._legendItemPos) { - proceed.call(legend, item); - } - }; - - // Do it now, for export and to get checkbox placement - runPositionItem(); - - // Do it after to work around the core issue - setTimeout(runPositionItem); - }); - } - /** - * The Chart class - * @param {String|Object} renderTo The DOM element to render to, or its id - * @param {Object} options - * @param {Function} callback Function to run when the chart has loaded - */ - var Chart = Highcharts.Chart = function () { - this.getArgs.apply(this, arguments); - }; - - Highcharts.chart = function (a, b, c) { - return new Chart(a, b, c); - }; - - Chart.prototype = { - - /** - * Hook for modules - */ - callbacks: [], - - /** - * Handle the arguments passed to the constructor - * @returns {Array} Arguments without renderTo - */ - getArgs: function () { - var args = [].slice.call(arguments); - - // Remove the optional first argument, renderTo, and - // set it on this. - if (isString(args[0]) || args[0].nodeName) { - this.renderTo = args.shift(); - } - this.init(args[0], args[1]); - }, - - /** - * Initialize the chart - */ - init: function (userOptions, callback) { - - // Handle regular options - var options, - seriesOptions = userOptions.series; // skip merging data points to increase performance - - userOptions.series = null; - options = merge(defaultOptions, userOptions); // do the merge - options.series = userOptions.series = seriesOptions; // set back the series data - this.userOptions = userOptions; - - var optionsChart = options.chart; - - // Create margin & spacing array - this.margin = this.splashArray('margin', optionsChart); - this.spacing = this.splashArray('spacing', optionsChart); - - var chartEvents = optionsChart.events; - - //this.runChartClick = chartEvents && !!chartEvents.click; - this.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom - - this.callback = callback; - this.isResizing = 0; - this.options = options; - //chartTitleOptions = UNDEFINED; - //chartSubtitleOptions = UNDEFINED; - - this.axes = []; - this.series = []; - this.hasCartesianSeries = optionsChart.showAxes; - //this.axisOffset = UNDEFINED; - //this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes - //this.inverted = UNDEFINED; - //this.loadingShown = UNDEFINED; - //this.container = UNDEFINED; - //this.chartWidth = UNDEFINED; - //this.chartHeight = UNDEFINED; - //this.marginRight = UNDEFINED; - //this.marginBottom = UNDEFINED; - //this.containerWidth = UNDEFINED; - //this.containerHeight = UNDEFINED; - //this.oldChartWidth = UNDEFINED; - //this.oldChartHeight = UNDEFINED; - - //this.renderTo = UNDEFINED; - //this.renderToClone = UNDEFINED; - - //this.spacingBox = UNDEFINED - - //this.legend = UNDEFINED; - - // Elements - //this.chartBackground = UNDEFINED; - //this.plotBackground = UNDEFINED; - //this.plotBGImage = UNDEFINED; - //this.plotBorder = UNDEFINED; - //this.loadingDiv = UNDEFINED; - //this.loadingSpan = UNDEFINED; - - var chart = this, - eventType; - - // Add the chart to the global lookup - chart.index = charts.length; - charts.push(chart); - chartCount++; - - // Set up auto resize - if (optionsChart.reflow !== false) { - addEvent(chart, 'load', function () { - chart.initReflow(); - }); - } - - // Chart event handlers - if (chartEvents) { - for (eventType in chartEvents) { - addEvent(chart, eventType, chartEvents[eventType]); - } - } - - chart.xAxis = []; - chart.yAxis = []; - - // Expose methods and variables - chart.animation = useCanVG ? false : pick(optionsChart.animation, true); - chart.pointCount = chart.colorCounter = chart.symbolCounter = 0; - - chart.firstRender(); - }, - - /** - * Initialize an individual series, called internally before render time - */ - initSeries: function (options) { - var chart = this, - optionsChart = chart.options.chart, - type = options.type || optionsChart.type || optionsChart.defaultSeriesType, - series, - constr = seriesTypes[type]; - - // No such series type - if (!constr) { - error(17, true); - } - - series = new constr(); - series.init(this, options); - return series; - }, - - /** - * Check whether a given point is within the plot area - * - * @param {Number} plotX Pixel x relative to the plot area - * @param {Number} plotY Pixel y relative to the plot area - * @param {Boolean} inverted Whether the chart is inverted - */ - isInsidePlot: function (plotX, plotY, inverted) { - var x = inverted ? plotY : plotX, - y = inverted ? plotX : plotY; - - return x >= 0 && - x <= this.plotWidth && - y >= 0 && - y <= this.plotHeight; - }, - - /** - * Redraw legend, axes or series based on updated data - * - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - redraw: function (animation) { - var chart = this, - axes = chart.axes, - series = chart.series, - pointer = chart.pointer, - legend = chart.legend, - redrawLegend = chart.isDirtyLegend, - hasStackedSeries, - hasDirtyStacks, - hasCartesianSeries = chart.hasCartesianSeries, - isDirtyBox = chart.isDirtyBox, - seriesLength = series.length, - i = seriesLength, - serie, - renderer = chart.renderer, - isHiddenChart = renderer.isHidden(), - afterRedraw = []; - - setAnimation(animation, chart); - - if (isHiddenChart) { - chart.cloneRenderTo(); - } - - // Adjust title layout (reflow multiline text) - chart.layOutTitles(); - - // link stacked series - while (i--) { - serie = series[i]; - - if (serie.options.stacking) { - hasStackedSeries = true; - - if (serie.isDirty) { - hasDirtyStacks = true; - break; - } - } - } - if (hasDirtyStacks) { // mark others as dirty - i = seriesLength; - while (i--) { - serie = series[i]; - if (serie.options.stacking) { - serie.isDirty = true; - } - } - } - - // Handle updated data in the series - each(series, function (serie) { - if (serie.isDirty) { - if (serie.options.legendType === 'point') { - if (serie.updateTotals) { - serie.updateTotals(); - } - redrawLegend = true; - } - } - }); - - // handle added or removed series - if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed - // draw legend graphics - legend.render(); - - chart.isDirtyLegend = false; - } - - // reset stacks - if (hasStackedSeries) { - chart.getStacks(); - } - - - if (hasCartesianSeries) { - if (!chart.isResizing) { - - // reset maxTicks - chart.maxTicks = null; - - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - } - } - - chart.getMargins(); // #3098 - - if (hasCartesianSeries) { - // If one axis is dirty, all axes must be redrawn (#792, #2169) - each(axes, function (axis) { - if (axis.isDirty) { - isDirtyBox = true; - } - }); - - // redraw axes - each(axes, function (axis) { - - // Fire 'afterSetExtremes' only if extremes are set - var key = axis.min + ',' + axis.max; - if (axis.extKey !== key) { // #821, #4452 - axis.extKey = key; - afterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119) - fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 - delete axis.eventArgs; - }); - } - if (isDirtyBox || hasStackedSeries) { - axis.redraw(); - } - }); - } - - // the plot areas size has changed - if (isDirtyBox) { - chart.drawChartBox(); - } - - - // redraw affected series - each(series, function (serie) { - if (serie.isDirty && serie.visible && - (!serie.isCartesian || serie.xAxis)) { // issue #153 - serie.redraw(); - } - }); - - // move tooltip or reset - if (pointer) { - pointer.reset(true); - } - - // redraw if canvas - renderer.draw(); - - // fire the event - fireEvent(chart, 'redraw'); - - if (isHiddenChart) { - chart.cloneRenderTo(true); - } - - // Fire callbacks that are put on hold until after the redraw - each(afterRedraw, function (callback) { - callback.call(); - }); - }, - - /** - * Get an axis, series or point object by id. - * @param id {String} The id as given in the configuration options - */ - get: function (id) { - var chart = this, - axes = chart.axes, - series = chart.series; - - var i, - j, - points; - - // search axes - for (i = 0; i < axes.length; i++) { - if (axes[i].options.id === id) { - return axes[i]; - } - } - - // search series - for (i = 0; i < series.length; i++) { - if (series[i].options.id === id) { - return series[i]; - } - } - - // search points - for (i = 0; i < series.length; i++) { - points = series[i].points || []; - for (j = 0; j < points.length; j++) { - if (points[j].id === id) { - return points[j]; - } - } - } - return null; - }, - - /** - * Create the Axis instances based on the config options - */ - getAxes: function () { - var chart = this, - options = this.options, - xAxisOptions = options.xAxis = splat(options.xAxis || {}), - yAxisOptions = options.yAxis = splat(options.yAxis || {}), - optionsArray; - - // make sure the options are arrays and add some members - each(xAxisOptions, function (axis, i) { - axis.index = i; - axis.isX = true; - }); - - each(yAxisOptions, function (axis, i) { - axis.index = i; - }); - - // concatenate all axis options into one array - optionsArray = xAxisOptions.concat(yAxisOptions); - - each(optionsArray, function (axisOptions) { - new Axis(chart, axisOptions); // eslint-disable-line no-new - }); - }, - - - /** - * Get the currently selected points from all series - */ - getSelectedPoints: function () { - var points = []; - each(this.series, function (serie) { - points = points.concat(grep(serie.points || [], function (point) { - return point.selected; - })); - }); - return points; - }, - - /** - * Get the currently selected series - */ - getSelectedSeries: function () { - return grep(this.series, function (serie) { - return serie.selected; - }); - }, - - /** - * Show the title and subtitle of the chart - * - * @param titleOptions {Object} New title options - * @param subtitleOptions {Object} New subtitle options - * - */ - setTitle: function (titleOptions, subtitleOptions, redraw) { - var chart = this, - options = chart.options, - chartTitleOptions, - chartSubtitleOptions; - - chartTitleOptions = options.title = merge(options.title, titleOptions); - chartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions); - - // add title and subtitle - each([ - ['title', titleOptions, chartTitleOptions], - ['subtitle', subtitleOptions, chartSubtitleOptions] - ], function (arr) { - var name = arr[0], - title = chart[name], - titleOptions = arr[1], - chartTitleOptions = arr[2]; - - if (title && titleOptions) { - chart[name] = title = title.destroy(); // remove old - } - - if (chartTitleOptions && chartTitleOptions.text && !title) { - chart[name] = chart.renderer.text( - chartTitleOptions.text, - 0, - 0, - chartTitleOptions.useHTML - ) - .attr({ - align: chartTitleOptions.align, - 'class': PREFIX + name, - zIndex: chartTitleOptions.zIndex || 4 - }) - .css(chartTitleOptions.style) - .add(); - } - }); - chart.layOutTitles(redraw); - }, - - /** - * Lay out the chart titles and cache the full offset height for use in getMargins - */ - layOutTitles: function (redraw) { - var titleOffset = 0, - title = this.title, - subtitle = this.subtitle, - options = this.options, - titleOptions = options.title, - subtitleOptions = options.subtitle, - requiresDirtyBox, - renderer = this.renderer, - autoWidth = this.spacingBox.width - 44; // 44 makes room for default context button - - if (title) { - title - .css({ width: (titleOptions.width || autoWidth) + PX }) - .align(extend({ - y: renderer.fontMetrics(titleOptions.style.fontSize, title).b - 3 - }, titleOptions), false, 'spacingBox'); - - if (!titleOptions.floating && !titleOptions.verticalAlign) { - titleOffset = title.getBBox().height; - } - } - if (subtitle) { - subtitle - .css({ width: (subtitleOptions.width || autoWidth) + PX }) - .align(extend({ - y: titleOffset + (titleOptions.margin - 13) + renderer.fontMetrics(subtitleOptions.style.fontSize, title).b - }, subtitleOptions), false, 'spacingBox'); - - if (!subtitleOptions.floating && !subtitleOptions.verticalAlign) { - titleOffset = mathCeil(titleOffset + subtitle.getBBox().height); - } - } - - requiresDirtyBox = this.titleOffset !== titleOffset; - this.titleOffset = titleOffset; // used in getMargins - - if (!this.isDirtyBox && requiresDirtyBox) { - this.isDirtyBox = requiresDirtyBox; - // Redraw if necessary (#2719, #2744) - if (this.hasRendered && pick(redraw, true) && this.isDirtyBox) { - this.redraw(); - } - } - }, - - /** - * Get chart width and height according to options and container size - */ - getChartSize: function () { - var chart = this, - optionsChart = chart.options.chart, - widthOption = optionsChart.width, - heightOption = optionsChart.height, - renderTo = chart.renderToClone || chart.renderTo; - - // Get inner width and height - if (!defined(widthOption)) { - chart.containerWidth = getStyle(renderTo, 'width'); - } - if (!defined(heightOption)) { - chart.containerHeight = getStyle(renderTo, 'height'); - } - - chart.chartWidth = mathMax(0, widthOption || chart.containerWidth || 600); // #1393, 1460 - chart.chartHeight = mathMax(0, pick(heightOption, - // the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7: - chart.containerHeight > 19 ? chart.containerHeight : 400)); - }, - - /** - * Create a clone of the chart's renderTo div and place it outside the viewport to allow - * size computation on chart.render and chart.redraw - */ - cloneRenderTo: function (revert) { - var clone = this.renderToClone, - container = this.container; - - // Destroy the clone and bring the container back to the real renderTo div - if (revert) { - if (clone) { - this.renderTo.appendChild(container); - discardElement(clone); - delete this.renderToClone; - } - - // Set up the clone - } else { - if (container && container.parentNode === this.renderTo) { - this.renderTo.removeChild(container); // do not clone this - } - this.renderToClone = clone = this.renderTo.cloneNode(0); - css(clone, { - position: ABSOLUTE, - top: '-9999px', - display: 'block' // #833 - }); - if (clone.style.setProperty) { // #2631 - clone.style.setProperty('display', 'block', 'important'); - } - doc.body.appendChild(clone); - if (container) { - clone.appendChild(container); - } - } - }, - - /** - * Get the containing element, determine the size and create the inner container - * div to hold the chart - */ - getContainer: function () { - var chart = this, - container, - options = chart.options, - optionsChart = options.chart, - chartWidth, - chartHeight, - renderTo = chart.renderTo, - indexAttrName = 'data-highcharts-chart', - oldChartIndex, - Ren, - containerId = 'highcharts-' + idCounter++; - - if (!renderTo) { - chart.renderTo = renderTo = optionsChart.renderTo; - } - - if (isString(renderTo)) { - chart.renderTo = renderTo = doc.getElementById(renderTo); - } - - // Display an error if the renderTo is wrong - if (!renderTo) { - error(13, true); - } - - // If the container already holds a chart, destroy it. The check for hasRendered is there - // because web pages that are saved to disk from the browser, will preserve the data-highcharts-chart - // attribute and the SVG contents, but not an interactive chart. So in this case, - // charts[oldChartIndex] will point to the wrong chart if any (#2609). - oldChartIndex = pInt(attr(renderTo, indexAttrName)); - if (!isNaN(oldChartIndex) && charts[oldChartIndex] && charts[oldChartIndex].hasRendered) { - charts[oldChartIndex].destroy(); - } - - // Make a reference to the chart from the div - attr(renderTo, indexAttrName, chart.index); - - // remove previous chart - renderTo.innerHTML = ''; - - // If the container doesn't have an offsetWidth, it has or is a child of a node - // that has display:none. We need to temporarily move it out to a visible - // state to determine the size, else the legend and tooltips won't render - // properly. The allowClone option is used in sparklines as a micro optimization, - // saving about 1-2 ms each chart. - if (!optionsChart.skipClone && !renderTo.offsetWidth) { - chart.cloneRenderTo(); - } - - // get the width and height - chart.getChartSize(); - chartWidth = chart.chartWidth; - chartHeight = chart.chartHeight; - - // create the inner container - chart.container = container = createElement(DIV, { - className: PREFIX + 'container' + - (optionsChart.className ? ' ' + optionsChart.className : ''), - id: containerId - }, extend({ - position: RELATIVE, - overflow: HIDDEN, // needed for context menu (avoid scrollbars) and - // content overflow in IE - width: chartWidth + PX, - height: chartHeight + PX, - textAlign: 'left', - lineHeight: 'normal', // #427 - zIndex: 0, // #1072 - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' - }, optionsChart.style), - chart.renderToClone || renderTo - ); - - // cache the cursor (#1650) - chart._cursor = container.style.cursor; - - // Initialize the renderer - Ren = Highcharts[optionsChart.renderer] || Renderer; - chart.renderer = new Ren( - container, - chartWidth, - chartHeight, - optionsChart.style, - optionsChart.forExport, - options.exporting && options.exporting.allowHTML - ); - - if (useCanVG) { - // If we need canvg library, extend and configure the renderer - // to get the tracker for translating mouse events - chart.renderer.create(chart, container, chartWidth, chartHeight); - } - // Add a reference to the charts index - chart.renderer.chartIndex = chart.index; - }, - - /** - * Calculate margins by rendering axis labels in a preliminary position. Title, - * subtitle and legend have already been rendered at this stage, but will be - * moved into their final positions - */ - getMargins: function (skipAxes) { - var chart = this, - spacing = chart.spacing, - margin = chart.margin, - titleOffset = chart.titleOffset; - - chart.resetMargins(); - - // Adjust for title and subtitle - if (titleOffset && !defined(margin[0])) { - chart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]); - } - - // Adjust for legend - chart.legend.adjustMargins(margin, spacing); - - // adjust for scroller - if (chart.extraBottomMargin) { - chart.marginBottom += chart.extraBottomMargin; - } - if (chart.extraTopMargin) { - chart.plotTop += chart.extraTopMargin; - } - if (!skipAxes) { - this.getAxisMargins(); - } - }, - - getAxisMargins: function () { - - var chart = this, - axisOffset = chart.axisOffset = [0, 0, 0, 0], // top, right, bottom, left - margin = chart.margin; - - // pre-render axes to get labels offset width - if (chart.hasCartesianSeries) { - each(chart.axes, function (axis) { - if (axis.visible) { - axis.getOffset(); - } - }); - } - - // Add the axis offsets - each(marginNames, function (m, side) { - if (!defined(margin[side])) { - chart[m] += axisOffset[side]; - } - }); - - chart.setChartSize(); - - }, - - /** - * Resize the chart to its container if size is not explicitly set - */ - reflow: function (e) { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderTo, - width = optionsChart.width || getStyle(renderTo, 'width'), - height = optionsChart.height || getStyle(renderTo, 'height'), - target = e ? e.target : win; - - // Width and height checks for display:none. Target is doc in IE8 and Opera, - // win in Firefox, Chrome and IE9. - if (!chart.hasUserSize && !chart.isPrinting && width && height && (target === win || target === doc)) { // #1093 - if (width !== chart.containerWidth || height !== chart.containerHeight) { - clearTimeout(chart.reflowTimeout); - // When called from window.resize, e is set, else it's called directly (#2224) - chart.reflowTimeout = syncTimeout(function () { - if (chart.container) { // It may have been destroyed in the meantime (#1257) - chart.setSize(width, height, false); - chart.hasUserSize = null; - } - }, e ? 100 : 0); - } - chart.containerWidth = width; - chart.containerHeight = height; - } - }, - - /** - * Add the event handlers necessary for auto resizing - */ - initReflow: function () { - var chart = this, - reflow = function (e) { - chart.reflow(e); - }; - - - addEvent(win, 'resize', reflow); - addEvent(chart, 'destroy', function () { - removeEvent(win, 'resize', reflow); - }); - }, - - /** - * Resize the chart to a given width and height - * @param {Number} width - * @param {Number} height - * @param {Object|Boolean} animation - */ - setSize: function (width, height, animation) { - var chart = this, - chartWidth, - chartHeight, - renderer = chart.renderer, - globalAnimation; - - // Handle the isResizing counter - chart.isResizing += 1; - - // set the animation for the current process - setAnimation(animation, chart); - - chart.oldChartHeight = chart.chartHeight; - chart.oldChartWidth = chart.chartWidth; - if (defined(width)) { - chart.chartWidth = chartWidth = mathMax(0, mathRound(width)); - chart.hasUserSize = !!chartWidth; - } - if (defined(height)) { - chart.chartHeight = chartHeight = mathMax(0, mathRound(height)); - } - - // Resize the container with the global animation applied if enabled (#2503) - globalAnimation = renderer.globalAnimation; - (globalAnimation ? animate : css)(chart.container, { - width: chartWidth + PX, - height: chartHeight + PX - }, globalAnimation); - - chart.setChartSize(true); - renderer.setSize(chartWidth, chartHeight, animation); - - // handle axes - chart.maxTicks = null; - each(chart.axes, function (axis) { - axis.isDirty = true; - axis.setScale(); - }); - - // make sure non-cartesian series are also handled - each(chart.series, function (serie) { - serie.isDirty = true; - }); - - chart.isDirtyLegend = true; // force legend redraw - chart.isDirtyBox = true; // force redraw of plot and chart border - - chart.layOutTitles(); // #2857 - chart.getMargins(); - - chart.redraw(animation); - - - chart.oldChartHeight = null; - fireEvent(chart, 'resize'); - - // Fire endResize and set isResizing back. If animation is disabled, fire without delay - globalAnimation = renderer.globalAnimation; // Reassign it before using it, it may have changed since the top of this function. - syncTimeout(function () { - if (chart) { - fireEvent(chart, 'endResize', null, function () { - chart.isResizing -= 1; - }); - } - }, globalAnimation === false ? 0 : ((globalAnimation && globalAnimation.duration) || 500)); - }, - - /** - * Set the public chart properties. This is done before and after the pre-render - * to determine margin sizes - */ - setChartSize: function (skipAxes) { - var chart = this, - inverted = chart.inverted, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - optionsChart = chart.options.chart, - spacing = chart.spacing, - clipOffset = chart.clipOffset, - clipX, - clipY, - plotLeft, - plotTop, - plotWidth, - plotHeight, - plotBorderWidth; - - chart.plotLeft = plotLeft = mathRound(chart.plotLeft); - chart.plotTop = plotTop = mathRound(chart.plotTop); - chart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight)); - chart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom)); - - chart.plotSizeX = inverted ? plotHeight : plotWidth; - chart.plotSizeY = inverted ? plotWidth : plotHeight; - - chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; - - // Set boxes used for alignment - chart.spacingBox = renderer.spacingBox = { - x: spacing[3], - y: spacing[0], - width: chartWidth - spacing[3] - spacing[1], - height: chartHeight - spacing[0] - spacing[2] - }; - chart.plotBox = renderer.plotBox = { - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }; - - plotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2); - clipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2); - clipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2); - chart.clipBox = { - x: clipX, - y: clipY, - width: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), - height: mathMax(0, mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY)) - }; - - if (!skipAxes) { - each(chart.axes, function (axis) { - axis.setAxisSize(); - axis.setAxisTranslation(); - }); - } - }, - - /** - * Initial margins before auto size margins are applied - */ - resetMargins: function () { - var chart = this; - - each(marginNames, function (m, side) { - chart[m] = pick(chart.margin[side], chart.spacing[side]); - }); - chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left - chart.clipOffset = [0, 0, 0, 0]; - }, - - /** - * Draw the borders and backgrounds for chart and plot area - */ - drawChartBox: function () { - var chart = this, - optionsChart = chart.options.chart, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartBackground = chart.chartBackground, - plotBackground = chart.plotBackground, - plotBorder = chart.plotBorder, - plotBGImage = chart.plotBGImage, - chartBorderWidth = optionsChart.borderWidth || 0, - chartBackgroundColor = optionsChart.backgroundColor, - plotBackgroundColor = optionsChart.plotBackgroundColor, - plotBackgroundImage = optionsChart.plotBackgroundImage, - plotBorderWidth = optionsChart.plotBorderWidth || 0, - mgn, - bgAttr, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - plotBox = chart.plotBox, - clipRect = chart.clipRect, - clipBox = chart.clipBox; - - // Chart area - mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); - - if (chartBorderWidth || chartBackgroundColor) { - if (!chartBackground) { - - bgAttr = { - fill: chartBackgroundColor || NONE - }; - if (chartBorderWidth) { // #980 - bgAttr.stroke = optionsChart.borderColor; - bgAttr['stroke-width'] = chartBorderWidth; - } - chart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn, - optionsChart.borderRadius, chartBorderWidth) - .attr(bgAttr) - .addClass(PREFIX + 'background') - .add() - .shadow(optionsChart.shadow); - - } else { // resize - chartBackground.animate( - chartBackground.crisp({ width: chartWidth - mgn, height: chartHeight - mgn }) - ); - } - } - - - // Plot background - if (plotBackgroundColor) { - if (!plotBackground) { - chart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0) - .attr({ - fill: plotBackgroundColor - }) - .add() - .shadow(optionsChart.plotShadow); - } else { - plotBackground.animate(plotBox); - } - } - if (plotBackgroundImage) { - if (!plotBGImage) { - chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight) - .add(); - } else { - plotBGImage.animate(plotBox); - } - } - - // Plot clip - if (!clipRect) { - chart.clipRect = renderer.clipRect(clipBox); - } else { - clipRect.animate({ - width: clipBox.width, - height: clipBox.height - }); - } - - // Plot area border - if (plotBorderWidth) { - if (!plotBorder) { - chart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth) - .attr({ - stroke: optionsChart.plotBorderColor, - 'stroke-width': plotBorderWidth, - fill: NONE, - zIndex: 1 - }) - .add(); - } else { - plotBorder.animate( - plotBorder.crisp({ x: plotLeft, y: plotTop, width: plotWidth, height: plotHeight, strokeWidth: -plotBorderWidth }) //#3282 plotBorder should be negative - ); - } - } - - // reset - chart.isDirtyBox = false; - }, - - /** - * Detect whether a certain chart property is needed based on inspecting its options - * and series. This mainly applies to the chart.invert property, and in extensions to - * the chart.angular and chart.polar properties. - */ - propFromSeries: function () { - var chart = this, - optionsChart = chart.options.chart, - klass, - seriesOptions = chart.options.series, - i, - value; - - - each(['inverted', 'angular', 'polar'], function (key) { - - // The default series type's class - klass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType]; - - // Get the value from available chart-wide properties - value = ( - chart[key] || // 1. it is set before - optionsChart[key] || // 2. it is set in the options - (klass && klass.prototype[key]) // 3. it's default series class requires it - ); - - // 4. Check if any the chart's series require it - i = seriesOptions && seriesOptions.length; - while (!value && i--) { - klass = seriesTypes[seriesOptions[i].type]; - if (klass && klass.prototype[key]) { - value = true; - } - } - - // Set the chart property - chart[key] = value; - }); - - }, - - /** - * Link two or more series together. This is done initially from Chart.render, - * and after Chart.addSeries and Series.remove. - */ - linkSeries: function () { - var chart = this, - chartSeries = chart.series; - - // Reset links - each(chartSeries, function (series) { - series.linkedSeries.length = 0; - }); - - // Apply new links - each(chartSeries, function (series) { - var linkedTo = series.options.linkedTo; - if (isString(linkedTo)) { - if (linkedTo === ':previous') { - linkedTo = chart.series[series.index - 1]; - } else { - linkedTo = chart.get(linkedTo); - } - if (linkedTo) { - linkedTo.linkedSeries.push(series); - series.linkedParent = linkedTo; - series.visible = pick(series.options.visible, linkedTo.options.visible, series.visible); // #3879 - } - } - }); - }, - - /** - * Render series for the chart - */ - renderSeries: function () { - each(this.series, function (serie) { - serie.translate(); - serie.render(); - }); - }, - - /** - * Render labels for the chart - */ - renderLabels: function () { - var chart = this, - labels = chart.options.labels; - if (labels.items) { - each(labels.items, function (label) { - var style = extend(labels.style, label.style), - x = pInt(style.left) + chart.plotLeft, - y = pInt(style.top) + chart.plotTop + 12; - - // delete to prevent rewriting in IE - delete style.left; - delete style.top; - - chart.renderer.text( - label.html, - x, - y - ) - .attr({ zIndex: 2 }) - .css(style) - .add(); - - }); - } - }, - - /** - * Render all graphics for the chart - */ - render: function () { - var chart = this, - axes = chart.axes, - renderer = chart.renderer, - options = chart.options, - tempWidth, - tempHeight, - redoHorizontal, - redoVertical; - - // Title - chart.setTitle(); - - - // Legend - chart.legend = new Legend(chart, options.legend); - - // Get stacks - if (chart.getStacks) { - chart.getStacks(); - } - - // Get chart margins - chart.getMargins(true); - chart.setChartSize(); - - // Record preliminary dimensions for later comparison - tempWidth = chart.plotWidth; - tempHeight = chart.plotHeight = chart.plotHeight - 21; // 21 is the most common correction for X axis labels - - // Get margins by pre-rendering axes - each(axes, function (axis) { - axis.setScale(); - }); - chart.getAxisMargins(); - - // If the plot area size has changed significantly, calculate tick positions again - redoHorizontal = tempWidth / chart.plotWidth > 1.1; - redoVertical = tempHeight / chart.plotHeight > 1.05; // Height is more sensitive - - if (redoHorizontal || redoVertical) { - - chart.maxTicks = null; // reset for second pass - each(axes, function (axis) { - if ((axis.horiz && redoHorizontal) || (!axis.horiz && redoVertical)) { - axis.setTickInterval(true); // update to reflect the new margins - } - }); - chart.getMargins(); // second pass to check for new labels - } - - // Draw the borders and backgrounds - chart.drawChartBox(); - - - // Axes - if (chart.hasCartesianSeries) { - each(axes, function (axis) { - if (axis.visible) { - axis.render(); - } - }); - } - - // The series - if (!chart.seriesGroup) { - chart.seriesGroup = renderer.g('series-group') - .attr({ zIndex: 3 }) - .add(); - } - chart.renderSeries(); - - // Labels - chart.renderLabels(); - - // Credits - chart.showCredits(options.credits); - - // Set flag - chart.hasRendered = true; - - }, - - /** - * Show chart credits based on config options - */ - showCredits: function (credits) { - if (credits.enabled && !this.credits) { - this.credits = this.renderer.text( - credits.text, - 0, - 0 - ) - .on('click', function () { - if (credits.href) { - win.location.href = credits.href; - } - }) - .attr({ - align: credits.position.align, - zIndex: 8 - }) - .css(credits.style) - .add() - .align(credits.position); - } - }, - - /** - * Clean up memory usage - */ - destroy: function () { - var chart = this, - axes = chart.axes, - series = chart.series, - container = chart.container, - i, - parentNode = container && container.parentNode; - - // fire the chart.destoy event - fireEvent(chart, 'destroy'); - - // Delete the chart from charts lookup array - charts[chart.index] = UNDEFINED; - chartCount--; - chart.renderTo.removeAttribute('data-highcharts-chart'); - - // remove events - removeEvent(chart); - - // ==== Destroy collections: - // Destroy axes - i = axes.length; - while (i--) { - axes[i] = axes[i].destroy(); - } - - // Destroy each series - i = series.length; - while (i--) { - series[i] = series[i].destroy(); - } - - // ==== Destroy chart properties: - each(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', - 'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', - 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) { - var prop = chart[name]; - - if (prop && prop.destroy) { - chart[name] = prop.destroy(); - } - }); - - // remove container and all SVG - if (container) { // can break in IE when destroyed before finished loading - container.innerHTML = ''; - removeEvent(container); - if (parentNode) { - discardElement(container); - } - - } - - // clean it all up - for (i in chart) { - delete chart[i]; - } - - }, - - - /** - * VML namespaces can't be added until after complete. Listening - * for Perini's doScroll hack is not enough. - */ - isReadyToRender: function () { - var chart = this; - - // Note: win == win.top is required - if ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) { // eslint-disable-line eqeqeq - if (useCanVG) { - // Delay rendering until canvg library is downloaded and ready - CanVGController.push(function () { - chart.firstRender(); - }, chart.options.global.canvasToolsURL); - } else { - doc.attachEvent('onreadystatechange', function () { - doc.detachEvent('onreadystatechange', chart.firstRender); - if (doc.readyState === 'complete') { - chart.firstRender(); - } - }); - } - return false; - } - return true; - }, - - /** - * Prepare for first rendering after all data are loaded - */ - firstRender: function () { - var chart = this, - options = chart.options, - callback = chart.callback; - - // Check whether the chart is ready to render - if (!chart.isReadyToRender()) { - return; - } - - // Create the container - chart.getContainer(); - - // Run an early event after the container and renderer are established - fireEvent(chart, 'init'); - - - chart.resetMargins(); - chart.setChartSize(); - - // Set the common chart properties (mainly invert) from the given series - chart.propFromSeries(); - - // get axes - chart.getAxes(); - - // Initialize the series - each(options.series || [], function (serieOptions) { - chart.initSeries(serieOptions); - }); - - chart.linkSeries(); - - // Run an event after axes and series are initialized, but before render. At this stage, - // the series data is indexed and cached in the xData and yData arrays, so we can access - // those before rendering. Used in Highstock. - fireEvent(chart, 'beforeRender'); - - // depends on inverted and on margins being set - if (Highcharts.Pointer) { - chart.pointer = new Pointer(chart, options); - } - - chart.render(); - - // add canvas - chart.renderer.draw(); - // run callbacks - if (callback) { - callback.apply(chart, [chart]); - } - each(chart.callbacks, function (fn) { - if (chart.index !== UNDEFINED) { // Chart destroyed in its own callback (#3600) - fn.apply(chart, [chart]); - } - }); - - // Fire the load event - fireEvent(chart, 'load'); - - // If the chart was rendered outside the top container, put it back in (#3679) - chart.cloneRenderTo(true); - - }, - - /** - * Creates arrays for spacing and margin from given options. - */ - splashArray: function (target, options) { - var oVar = options[target], - tArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar]; - - return [pick(options[target + 'Top'], tArray[0]), - pick(options[target + 'Right'], tArray[1]), - pick(options[target + 'Bottom'], tArray[2]), - pick(options[target + 'Left'], tArray[3])]; - } - }; // end Chart - - var CenteredSeriesMixin = Highcharts.CenteredSeriesMixin = { - /** - * Get the center of the pie based on the size and center options relative to the - * plot area. Borrowed by the polar and gauge series types. - */ - getCenter: function () { - - var options = this.options, - chart = this.chart, - slicingRoom = 2 * (options.slicedOffset || 0), - handleSlicingRoom, - plotWidth = chart.plotWidth - 2 * slicingRoom, - plotHeight = chart.plotHeight - 2 * slicingRoom, - centerOption = options.center, - positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], - smallestSize = mathMin(plotWidth, plotHeight), - i, - value; - - for (i = 0; i < 4; ++i) { - value = positions[i]; - handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value)); - - // i == 0: centerX, relative to width - // i == 1: centerY, relative to height - // i == 2: size, relative to smallestSize - // i == 3: innerSize, relative to size - positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + - (handleSlicingRoom ? slicingRoom : 0); - - } - // innerSize cannot be larger than size (#3632) - if (positions[3] > positions[2]) { - positions[3] = positions[2]; - } - return positions; - } - }; - - /** - * The Point object and prototype. Inheritable and used as base for PiePoint - */ - var Point = function () {}; - Point.prototype = { - - /** - * Initialize the point - * @param {Object} series The series object containing this point - * @param {Object} options The data in either number, array or object format - */ - init: function (series, options, x) { - - var point = this, - colors; - point.series = series; - point.color = series.color; // #3445 - point.applyOptions(options, x); - point.pointAttr = {}; - - if (series.options.colorByPoint) { - colors = series.options.colors || series.chart.options.colors; - point.color = point.color || colors[series.colorCounter++]; - // loop back to zero - if (series.colorCounter === colors.length) { - series.colorCounter = 0; - } - } - - series.chart.pointCount++; - return point; - }, - /** - * Apply the options containing the x and y data and possible some extra properties. - * This is called on point init or from point.update. - * - * @param {Object} options - */ - applyOptions: function (options, x) { - var point = this, - series = point.series, - pointValKey = series.options.pointValKey || series.pointValKey; - - options = Point.prototype.optionsToObject.call(this, options); - - // copy options directly to point - extend(point, options); - point.options = point.options ? extend(point.options, options) : options; - - // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. - if (pointValKey) { - point.y = point[pointValKey]; - } - - // If no x is set by now, get auto incremented value. All points must have an - // x value, however the y value can be null to create a gap in the series - if (point.x === UNDEFINED && series) { - point.x = x === UNDEFINED ? series.autoIncrement() : x; - } - - return point; - }, - - /** - * Transform number or array configs into objects - */ - optionsToObject: function (options) { - var ret = {}, - series = this.series, - keys = series.options.keys, - pointArrayMap = keys || series.pointArrayMap || ['y'], - valueCount = pointArrayMap.length, - firstItemType, - i = 0, - j = 0; - - if (typeof options === 'number' || options === null) { - ret[pointArrayMap[0]] = options; - - } else if (isArray(options)) { - // with leading x value - if (!keys && options.length > valueCount) { - firstItemType = typeof options[0]; - if (firstItemType === 'string') { - ret.name = options[0]; - } else if (firstItemType === 'number') { - ret.x = options[0]; - } - i++; - } - while (j < valueCount) { - if (!keys || options[i] !== undefined) { // Skip undefined positions for keys - ret[pointArrayMap[j]] = options[i]; - } - i++; - j++; - } - } else if (typeof options === 'object') { - ret = options; - - // This is the fastest way to detect if there are individual point dataLabels that need - // to be considered in drawDataLabels. These can only occur in object configs. - if (options.dataLabels) { - series._hasPointLabels = true; - } - - // Same approach as above for markers - if (options.marker) { - series._hasPointMarkers = true; - } - } - return ret; - }, - - /** - * Destroy a point to clear memory. Its reference still stays in series.data. - */ - destroy: function () { - var point = this, - series = point.series, - chart = series.chart, - hoverPoints = chart.hoverPoints, - prop; - - chart.pointCount--; - - if (hoverPoints) { - point.setState(); - erase(hoverPoints, point); - if (!hoverPoints.length) { - chart.hoverPoints = null; - } - - } - if (point === chart.hoverPoint) { - point.onMouseOut(); - } - - // remove all events - if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive - removeEvent(point); - point.destroyElements(); - } - - if (point.legendItem) { // pies have legend items - chart.legend.destroyItem(point); - } - - for (prop in point) { - point[prop] = null; - } - - - }, - - /** - * Destroy SVG elements associated with the point - */ - destroyElements: function () { - var point = this, - props = ['graphic', 'dataLabel', 'dataLabelUpper', 'connector', 'shadowGroup'], - prop, - i = 6; - while (i--) { - prop = props[i]; - if (point[prop]) { - point[prop] = point[prop].destroy(); - } - } - }, - - /** - * Return the configuration hash needed for the data label and tooltip formatters - */ - getLabelConfig: function () { - return { - x: this.category, - y: this.y, - color: this.color, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal - }; - }, - - /** - * Extendable method for formatting each point's tooltip line - * - * @return {String} A string to be concatenated in to the common tooltip text - */ - tooltipFormatter: function (pointFormat) { - - // Insert options for valueDecimals, valuePrefix, and valueSuffix - var series = this.series, - seriesTooltipOptions = series.tooltipOptions, - valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), - valuePrefix = seriesTooltipOptions.valuePrefix || '', - valueSuffix = seriesTooltipOptions.valueSuffix || ''; - - // Loop over the point array map and replace unformatted values with sprintf formatting markup - each(series.pointArrayMap || ['y'], function (key) { - key = '{point.' + key; // without the closing bracket - if (valuePrefix || valueSuffix) { - pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); - } - pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); - }); - - return format(pointFormat, { - point: this, - series: this.series - }); - }, - - /** - * Fire an event on the Point object. - * @param {String} eventType - * @param {Object} eventArgs Additional event arguments - * @param {Function} defaultFunction Default event handler - */ - firePointEvent: function (eventType, eventArgs, defaultFunction) { - var point = this, - series = this.series, - seriesOptions = series.options; - - // load event handlers on demand to save time on mouseover/out - if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { - this.importEvents(); - } - - // add default handler if in selection mode - if (eventType === 'click' && seriesOptions.allowPointSelect) { - defaultFunction = function (event) { - // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera - if (point.select) { // Could be destroyed by prior event handlers (#2911) - point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); - } - }; - } - - fireEvent(this, eventType, eventArgs, defaultFunction); - }, - visible: true - };/** - * @classDescription The base function which all other series types inherit from. The data in the series is stored - * in various arrays. - * - * - First, series.options.data contains all the original config options for - * each point whether added by options or methods like series.addPoint. - * - Next, series.data contains those values converted to points, but in case the series data length - * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It - * only contains the points that have been created on demand. - * - Then there's series.points that contains all currently visible point objects. In case of cropping, - * the cropped-away points are not part of this array. The series.points array starts at series.cropStart - * compared to series.data and series.options.data. If however the series data is grouped, these can't - * be correlated one to one. - * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points. - * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points. - * - * @param {Object} chart - * @param {Object} options - */ - var Series = Highcharts.Series = function () {}; - - Series.prototype = { - - isCartesian: true, - type: 'line', - pointClass: Point, - sorted: true, // requires the data to be sorted - requireSorting: true, - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor', - r: 'radius' - }, - directTouch: false, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], // each point's x and y values are stored in this.xData and this.yData - init: function (chart, options) { - var series = this, - eventType, - events, - chartSeries = chart.series, - sortByIndex = function (a, b) { - return pick(a.options.index, a._i) - pick(b.options.index, b._i); - }; - - series.chart = chart; - series.options = options = series.setOptions(options); // merge with plotOptions - series.linkedSeries = []; - - // bind the axes - series.bindAxes(); - - // set some variables - extend(series, { - name: options.name, - state: NORMAL_STATE, - pointAttr: {}, - visible: options.visible !== false, // true by default - selected: options.selected === true // false by default - }); - - // special - if (useCanVG) { - options.animation = false; - } - - // register event listeners - events = options.events; - for (eventType in events) { - addEvent(series, eventType, events[eventType]); - } - if ( - (events && events.click) || - (options.point && options.point.events && options.point.events.click) || - options.allowPointSelect - ) { - chart.runTrackerClick = true; - } - - series.getColor(); - series.getSymbol(); - - // Set the data - each(series.parallelArrays, function (key) { - series[key + 'Data'] = []; - }); - series.setData(options.data, false); - - // Mark cartesian - if (series.isCartesian) { - chart.hasCartesianSeries = true; - } - - // Register it in the chart - chartSeries.push(series); - series._i = chartSeries.length - 1; - - // Sort series according to index option (#248, #1123, #2456) - stableSort(chartSeries, sortByIndex); - if (this.yAxis) { - stableSort(this.yAxis.series, sortByIndex); - } - - each(chartSeries, function (series, i) { - series.index = i; - series.name = series.name || 'Series ' + (i + 1); - }); - - }, - - /** - * Set the xAxis and yAxis properties of cartesian series, and register the series - * in the axis.series array - */ - bindAxes: function () { - var series = this, - seriesOptions = series.options, - chart = series.chart, - axisOptions; - - each(series.axisTypes || [], function (AXIS) { // repeat for xAxis and yAxis - - each(chart[AXIS], function (axis) { // loop through the chart's axis objects - axisOptions = axis.options; - - // apply if the series xAxis or yAxis option mathches the number of the - // axis, or if undefined, use the first axis - if ((seriesOptions[AXIS] === axisOptions.index) || - (seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) || - (seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) { - - // register this series in the axis.series lookup - axis.series.push(series); - - // set this series.xAxis or series.yAxis reference - series[AXIS] = axis; - - // mark dirty for redraw - axis.isDirty = true; - } - }); - - // The series needs an X and an Y axis - if (!series[AXIS] && series.optionalAxis !== AXIS) { - error(18, true); - } - - }); - }, - - /** - * For simple series types like line and column, the data values are held in arrays like - * xData and yData for quick lookup to find extremes and more. For multidimensional series - * like bubble and map, this can be extended with arrays like zData and valueData by - * adding to the series.parallelArrays array. - */ - updateParallelArrays: function (point, i) { - var series = point.series, - args = arguments, - fn = typeof i === 'number' ? - // Insert the value in the given position - function (key) { - var val = key === 'y' && series.toYData ? series.toYData(point) : point[key]; - series[key + 'Data'][i] = val; - } : - // Apply the method specified in i with the following arguments as arguments - function (key) { - Array.prototype[i].apply(series[key + 'Data'], Array.prototype.slice.call(args, 2)); - }; - - each(series.parallelArrays, fn); - }, - - /** - * Return an auto incremented x value based on the pointStart and pointInterval options. - * This is only used if an x value is not given for the point that calls autoIncrement. - */ - autoIncrement: function () { - - var options = this.options, - xIncrement = this.xIncrement, - date, - pointInterval, - pointIntervalUnit = options.pointIntervalUnit; - - xIncrement = pick(xIncrement, options.pointStart, 0); - - this.pointInterval = pointInterval = pick(this.pointInterval, options.pointInterval, 1); - - // Added code for pointInterval strings - if (pointIntervalUnit === 'month' || pointIntervalUnit === 'year') { - date = new Date(xIncrement); - date = (pointIntervalUnit === 'month') ? - +date[setMonth](date[getMonth]() + pointInterval) : - +date[setFullYear](date[getFullYear]() + pointInterval); - pointInterval = date - xIncrement; - } - - this.xIncrement = xIncrement + pointInterval; - return xIncrement; - }, - - /** - * Divide the series data into segments divided by null values. - */ - getSegments: function () { - var series = this, - lastNull = -1, - segments = [], - i, - points = series.points, - pointsLength = points.length; - - if (pointsLength) { // no action required for [] - - // if connect nulls, just remove null points - if (series.options.connectNulls) { - i = pointsLength; - while (i--) { - if (points[i].y === null) { - points.splice(i, 1); - } - } - if (points.length) { - segments = [points]; - } - - // else, split on null points - } else { - each(points, function (point, i) { - if (point.y === null) { - if (i > lastNull + 1) { - segments.push(points.slice(lastNull + 1, i)); - } - lastNull = i; - } else if (i === pointsLength - 1) { // last value - segments.push(points.slice(lastNull + 1, i + 1)); - } - }); - } - } - - // register it - series.segments = segments; - }, - - /** - * Set the series options by merging from the options tree - * @param {Object} itemOptions - */ - setOptions: function (itemOptions) { - var chart = this.chart, - chartOptions = chart.options, - plotOptions = chartOptions.plotOptions, - userOptions = chart.userOptions || {}, - userPlotOptions = userOptions.plotOptions || {}, - typeOptions = plotOptions[this.type], - options, - zones; - - this.userOptions = itemOptions; - - // General series options take precedence over type options because otherwise, default - // type options like column.animation would be overwritten by the general option. - // But issues have been raised here (#3881), and the solution may be to distinguish - // between default option and userOptions like in the tooltip below. - options = merge( - typeOptions, - plotOptions.series, - itemOptions - ); - - // The tooltip options are merged between global and series specific options - this.tooltipOptions = merge( - defaultOptions.tooltip, - defaultOptions.plotOptions[this.type].tooltip, - userOptions.tooltip, - userPlotOptions.series && userPlotOptions.series.tooltip, - userPlotOptions[this.type] && userPlotOptions[this.type].tooltip, - itemOptions.tooltip - ); - - // Delete marker object if not allowed (#1125) - if (typeOptions.marker === null) { - delete options.marker; - } - - // Handle color zones - this.zoneAxis = options.zoneAxis; - zones = this.zones = (options.zones || []).slice(); - if ((options.negativeColor || options.negativeFillColor) && !options.zones) { - zones.push({ - value: options[this.zoneAxis + 'Threshold'] || options.threshold || 0, - color: options.negativeColor, - fillColor: options.negativeFillColor - }); - } - if (zones.length) { // Push one extra zone for the rest - if (defined(zones[zones.length - 1].value)) { - zones.push({ - color: this.color, - fillColor: this.fillColor - }); - } - } - return options; - }, - - getCyclic: function (prop, value, defaults) { - var i, - userOptions = this.userOptions, - indexName = '_' + prop + 'Index', - counterName = prop + 'Counter'; - - if (!value) { - if (defined(userOptions[indexName])) { // after Series.update() - i = userOptions[indexName]; - } else { - userOptions[indexName] = i = this.chart[counterName] % defaults.length; - this.chart[counterName] += 1; - } - value = defaults[i]; - } - this[prop] = value; - }, - - /** - * Get the series' color - */ - getColor: function () { - if (this.options.colorByPoint) { - this.options.color = null; // #4359, selected slice got series.color even when colorByPoint was set. - } else { - this.getCyclic('color', this.options.color || defaultPlotOptions[this.type].color, this.chart.options.colors); - } - }, - /** - * Get the series' symbol - */ - getSymbol: function () { - var seriesMarkerOption = this.options.marker; - - this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols); - - // don't substract radius in image symbols (#604) - if (/^url/.test(this.symbol)) { - seriesMarkerOption.radius = 0; - } - }, - - drawLegendSymbol: LegendSymbolMixin.drawLineMarker, - - /** - * Replace the series data with a new set of data - * @param {Object} data - * @param {Object} redraw - */ - setData: function (data, redraw, animation, updatePoints) { - var series = this, - oldData = series.points, - oldDataLength = (oldData && oldData.length) || 0, - dataLength, - options = series.options, - chart = series.chart, - firstPoint = null, - xAxis = series.xAxis, - hasCategories = xAxis && !!xAxis.categories, - i, - turboThreshold = options.turboThreshold, - pt, - xData = this.xData, - yData = this.yData, - pointArrayMap = series.pointArrayMap, - valueCount = pointArrayMap && pointArrayMap.length; - - data = data || []; - dataLength = data.length; - redraw = pick(redraw, true); - - // If the point count is the same as is was, just run Point.update which is - // cheaper, allows animation, and keeps references to points. - if (updatePoints !== false && dataLength && oldDataLength === dataLength && !series.cropped && !series.hasGroupedData && series.visible) { - each(data, function (point, i) { - // .update doesn't exist on a linked, hidden series (#3709) - if (oldData[i].update && point !== options.data[i]) { - oldData[i].update(point, false, null, false); - } - }); - - } else { - - // Reset properties - series.xIncrement = null; - - series.colorCounter = 0; // for series with colorByPoint (#1547) - - // Update parallel arrays - each(this.parallelArrays, function (key) { - series[key + 'Data'].length = 0; - }); - - // In turbo mode, only one- or twodimensional arrays of numbers are allowed. The - // first value is tested, and we assume that all the rest are defined the same - // way. Although the 'for' loops are similar, they are repeated inside each - // if-else conditional for max performance. - if (turboThreshold && dataLength > turboThreshold) { - - // find the first non-null point - i = 0; - while (firstPoint === null && i < dataLength) { - firstPoint = data[i]; - i++; - } - - - if (isNumber(firstPoint)) { // assume all points are numbers - var x = pick(options.pointStart, 0), - pointInterval = pick(options.pointInterval, 1); - - for (i = 0; i < dataLength; i++) { - xData[i] = x; - yData[i] = data[i]; - x += pointInterval; - } - series.xIncrement = x; - } else if (isArray(firstPoint)) { // assume all points are arrays - if (valueCount) { // [x, low, high] or [x, o, h, l, c] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt.slice(1, valueCount + 1); - } - } else { // [x, y] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt[1]; - } - } - } else { - error(12); // Highcharts expects configs to be numbers or arrays in turbo mode - } - } else { - for (i = 0; i < dataLength; i++) { - if (data[i] !== UNDEFINED) { // stray commas in oldIE - pt = { series: series }; - series.pointClass.prototype.applyOptions.apply(pt, [data[i]]); - series.updateParallelArrays(pt, i); - if (hasCategories && defined(pt.name)) { // #4401 - xAxis.names[pt.x] = pt.name; // #2046 - } - } - } - } - - // Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON - if (isString(yData[0])) { - error(14, true); - } - - series.data = []; - series.options.data = data; - //series.zData = zData; - - // destroy old points - i = oldDataLength; - while (i--) { - if (oldData[i] && oldData[i].destroy) { - oldData[i].destroy(); - } - } - - // reset minRange (#878) - if (xAxis) { - xAxis.minRange = xAxis.userMinRange; - } - - // redraw - series.isDirty = series.isDirtyData = chart.isDirtyBox = true; - animation = false; - } - - // Typically for pie series, points need to be processed and generated - // prior to rendering the legend - if (options.legendType === 'point') { // docs: legendType now supported on more series types (at least column and pie) - this.processData(); - this.generatePoints(); - } - - if (redraw) { - chart.redraw(animation); - } - }, - - /** - * Process the data by cropping away unused data points if the series is longer - * than the crop threshold. This saves computing time for lage series. - */ - processData: function (force) { - var series = this, - processedXData = series.xData, // copied during slice operation below - processedYData = series.yData, - dataLength = processedXData.length, - croppedData, - cropStart = 0, - cropped, - distance, - closestPointRange, - xAxis = series.xAxis, - i, // loop variable - options = series.options, - cropThreshold = options.cropThreshold, - getExtremesFromAll = series.getExtremesFromAll || options.getExtremesFromAll, // #4599 - isCartesian = series.isCartesian, - xExtremes, - min, - max; - - // If the series data or axes haven't changed, don't go through this. Return false to pass - // the message on to override methods like in data grouping. - if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { - return false; - } - - if (xAxis) { - xExtremes = xAxis.getExtremes(); // corrected for log axis (#3053) - min = xExtremes.min; - max = xExtremes.max; - } - - // optionally filter out points outside the plot area - if (isCartesian && series.sorted && !getExtremesFromAll && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) { - - // it's outside current extremes - if (processedXData[dataLength - 1] < min || processedXData[0] > max) { - processedXData = []; - processedYData = []; - - // only crop if it's actually spilling out - } else if (processedXData[0] < min || processedXData[dataLength - 1] > max) { - croppedData = this.cropData(series.xData, series.yData, min, max); - processedXData = croppedData.xData; - processedYData = croppedData.yData; - cropStart = croppedData.start; - cropped = true; - } - } - - - // Find the closest distance between processed points - for (i = processedXData.length - 1; i >= 0; i--) { - distance = processedXData[i] - processedXData[i - 1]; - - if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { - closestPointRange = distance; - - // Unsorted data is not supported by the line tooltip, as well as data grouping and - // navigation in Stock charts (#725) and width calculation of columns (#1900) - } else if (distance < 0 && series.requireSorting) { - error(15); - } - } - - // Record the properties - series.cropped = cropped; // undefined or true - series.cropStart = cropStart; - series.processedXData = processedXData; - series.processedYData = processedYData; - - series.closestPointRange = closestPointRange; - - }, - - /** - * Iterate over xData and crop values between min and max. Returns object containing crop start/end - * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range - */ - cropData: function (xData, yData, min, max) { - var dataLength = xData.length, - cropStart = 0, - cropEnd = dataLength, - cropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside - i, - j; - - // iterate up to find slice start - for (i = 0; i < dataLength; i++) { - if (xData[i] >= min) { - cropStart = mathMax(0, i - cropShoulder); - break; - } - } - - // proceed to find slice end - for (j = i; j < dataLength; j++) { - if (xData[j] > max) { - cropEnd = j + cropShoulder; - break; - } - } - - return { - xData: xData.slice(cropStart, cropEnd), - yData: yData.slice(cropStart, cropEnd), - start: cropStart, - end: cropEnd - }; - }, - - - /** - * Generate the data point after the data has been processed by cropping away - * unused points and optionally grouped in Highcharts Stock. - */ - generatePoints: function () { - var series = this, - options = series.options, - dataOptions = options.data, - data = series.data, - dataLength, - processedXData = series.processedXData, - processedYData = series.processedYData, - pointClass = series.pointClass, - processedDataLength = processedXData.length, - cropStart = series.cropStart || 0, - cursor, - hasGroupedData = series.hasGroupedData, - point, - points = [], - i; - - if (!data && !hasGroupedData) { - var arr = []; - arr.length = dataOptions.length; - data = series.data = arr; - } - - for (i = 0; i < processedDataLength; i++) { - cursor = cropStart + i; - if (!hasGroupedData) { - if (data[cursor]) { - point = data[cursor]; - } else if (dataOptions[cursor] !== UNDEFINED) { // #970 - data[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]); - } - points[i] = point; - } else { - // splat the y data in case of ohlc data array - points[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i]))); - } - points[i].index = cursor; // For faster access in Point.update - } - - // Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when - // swithching view from non-grouped data to grouped data (#637) - if (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) { - for (i = 0; i < dataLength; i++) { - if (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points - i += processedDataLength; - } - if (data[i]) { - data[i].destroyElements(); - data[i].plotX = UNDEFINED; // #1003 - } - } - } - - series.data = data; - series.points = points; - }, - - /** - * Calculate Y extremes for visible data - */ - getExtremes: function (yData) { - var xAxis = this.xAxis, - yAxis = this.yAxis, - xData = this.processedXData, - yDataLength, - activeYData = [], - activeCounter = 0, - xExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis - xMin = xExtremes.min, - xMax = xExtremes.max, - validValue, - withinRange, - x, - y, - i, - j; - - yData = yData || this.stackedYData || this.processedYData; - yDataLength = yData.length; - - for (i = 0; i < yDataLength; i++) { - - x = xData[i]; - y = yData[i]; - - // For points within the visible range, including the first point outside the - // visible range, consider y extremes - validValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0)); - withinRange = this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || - ((xData[i + 1] || x) >= xMin && (xData[i - 1] || x) <= xMax); - - if (validValue && withinRange) { - - j = y.length; - if (j) { // array, like ohlc or range data - while (j--) { - if (y[j] !== null) { - activeYData[activeCounter++] = y[j]; - } - } - } else { - activeYData[activeCounter++] = y; - } - } - } - this.dataMin = arrayMin(activeYData); - this.dataMax = arrayMax(activeYData); - }, - - /** - * Translate data points from raw data values to chart specific positioning data - * needed later in drawPoints, drawGraph and drawTracker. - */ - translate: function () { - if (!this.processedXData) { // hidden series - this.processData(); - } - this.generatePoints(); - var series = this, - options = series.options, - stacking = options.stacking, - xAxis = series.xAxis, - categories = xAxis.categories, - yAxis = series.yAxis, - points = series.points, - dataLength = points.length, - hasModifyValue = !!series.modifyValue, - i, - pointPlacement = options.pointPlacement, - dynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement), - threshold = options.threshold, - stackThreshold = options.startFromThreshold ? threshold : 0, - plotX, - plotY, - lastPlotX, - stackIndicator, - closestPointRangePx = Number.MAX_VALUE; - - // Translate each point - for (i = 0; i < dataLength; i++) { - var point = points[i], - xValue = point.x, - yValue = point.y, - yBottom = point.low, - stack = stacking && yAxis.stacks[(series.negStacks && yValue < (stackThreshold ? 0 : threshold) ? '-' : '') + series.stackKey], - pointStack, - stackValues; - - // Discard disallowed y values for log axes (#3434) - if (yAxis.isLog && yValue !== null && yValue <= 0) { - point.y = yValue = null; - error(10); - } - - // Get the plotX translation - point.plotX = plotX = mathMin(mathMax(-1e5, xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags')), 1e5); // #3923 - - - // Calculate the bottom y value for stacked series - if (stacking && series.visible && stack && stack[xValue]) { - stackIndicator = series.getStackIndicator(stackIndicator, xValue, series.index); - pointStack = stack[xValue]; - stackValues = pointStack.points[stackIndicator.key]; - yBottom = stackValues[0]; - yValue = stackValues[1]; - - if (yBottom === stackThreshold) { - yBottom = pick(threshold, yAxis.min); - } - if (yAxis.isLog && yBottom <= 0) { // #1200, #1232 - yBottom = null; - } - - point.total = point.stackTotal = pointStack.total; - point.percentage = pointStack.total && (point.y / pointStack.total * 100); - point.stackY = yValue; - - // Place the stack label - pointStack.setOffset(series.pointXOffset || 0, series.barW || 0); - - } - - // Set translated yBottom or remove it - point.yBottom = defined(yBottom) ? - yAxis.translate(yBottom, 0, 1, 0, 1) : - null; - - // general hook, used for Highstock compare mode - if (hasModifyValue) { - yValue = series.modifyValue(yValue, point); - } - - // Set the the plotY value, reset it for redraws - point.plotY = plotY = (typeof yValue === 'number' && yValue !== Infinity) ? - mathMin(mathMax(-1e5, yAxis.translate(yValue, 0, 1, 0, 1)), 1e5) : // #3201 - UNDEFINED; - point.isInside = plotY !== UNDEFINED && plotY >= 0 && plotY <= yAxis.len && // #3519 - plotX >= 0 && plotX <= xAxis.len; - - - // Set client related positions for mouse tracking - point.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : plotX; // #1514 - - point.negative = point.y < (threshold || 0); - - // some API data - point.category = categories && categories[point.x] !== UNDEFINED ? - categories[point.x] : point.x; - - // Determine auto enabling of markers (#3635) - if (i) { - closestPointRangePx = mathMin(closestPointRangePx, mathAbs(plotX - lastPlotX)); - } - lastPlotX = plotX; - - } - - series.closestPointRangePx = closestPointRangePx; - - // now that we have the cropped data, build the segments - series.getSegments(); - }, - - /** - * Set the clipping for the series. For animated series it is called twice, first to initiate - * animating the clip then the second time without the animation to set the final clip. - */ - setClip: function (animation) { - var chart = this.chart, - options = this.options, - renderer = chart.renderer, - inverted = chart.inverted, - seriesClipBox = this.clipBox, - clipBox = seriesClipBox || chart.clipBox, - sharedClipKey = this.sharedClipKey || ['_sharedClip', animation && animation.duration, animation && animation.easing, clipBox.height, options.xAxis, options.yAxis].join(','), // #4526 - clipRect = chart[sharedClipKey], - markerClipRect = chart[sharedClipKey + 'm']; - - // If a clipping rectangle with the same properties is currently present in the chart, use that. - if (!clipRect) { - - // When animation is set, prepare the initial positions - if (animation) { - clipBox.width = 0; - - chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( - -99, // include the width of the first marker - inverted ? -chart.plotLeft : -chart.plotTop, - 99, - inverted ? chart.chartWidth : chart.chartHeight - ); - } - chart[sharedClipKey] = clipRect = renderer.clipRect(clipBox); - - } - if (animation) { - clipRect.count += 1; - } - - if (options.clip !== false) { - this.group.clip(animation || seriesClipBox ? clipRect : chart.clipRect); - this.markerGroup.clip(markerClipRect); - this.sharedClipKey = sharedClipKey; - } - - // Remove the shared clipping rectangle when all series are shown - if (!animation) { - clipRect.count -= 1; - if (clipRect.count <= 0 && sharedClipKey && chart[sharedClipKey]) { - if (!seriesClipBox) { - chart[sharedClipKey] = chart[sharedClipKey].destroy(); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); - } - } - } - }, - - /** - * Animate in the series - */ - animate: function (init) { - var series = this, - chart = series.chart, - clipRect, - animation = series.options.animation, - sharedClipKey; - - // Animation option is set to true - if (animation && !isObject(animation)) { - animation = defaultPlotOptions[series.type].animation; - } - - // Initialize the animation. Set up the clipping rectangle. - if (init) { - - series.setClip(animation); - - // Run the animation - } else { - sharedClipKey = this.sharedClipKey; - clipRect = chart[sharedClipKey]; - if (clipRect) { - clipRect.animate({ - width: chart.plotSizeX - }, animation); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'].animate({ - width: chart.plotSizeX + 99 - }, animation); - } - - // Delete this function to allow it only once - series.animate = null; - - } - }, - - /** - * This runs after animation to land on the final plot clipping - */ - afterAnimate: function () { - this.setClip(); - fireEvent(this, 'afterAnimate'); - }, - - /** - * Draw the markers - */ - drawPoints: function () { - var series = this, - pointAttr, - points = series.points, - chart = series.chart, - plotX, - plotY, - i, - point, - radius, - symbol, - isImage, - graphic, - options = series.options, - seriesMarkerOptions = options.marker, - seriesPointAttr = series.pointAttr[''], - pointMarkerOptions, - hasPointMarker, - enabled, - isInside, - markerGroup = series.markerGroup, - xAxis = series.xAxis, - globallyEnabled = pick( - seriesMarkerOptions.enabled, - xAxis.isRadial, - series.closestPointRangePx > 2 * seriesMarkerOptions.radius - ); - - if (seriesMarkerOptions.enabled !== false || series._hasPointMarkers) { - - i = points.length; - while (i--) { - point = points[i]; - plotX = mathFloor(point.plotX); // #1843 - plotY = point.plotY; - graphic = point.graphic; - pointMarkerOptions = point.marker || {}; - hasPointMarker = !!point.marker; - enabled = (globallyEnabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled; - isInside = point.isInside; - - // only draw the point if y is defined - if (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - - // shortcuts - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || seriesPointAttr; - radius = pointAttr.r; - symbol = pick(pointMarkerOptions.symbol, series.symbol); - isImage = symbol.indexOf('url') === 0; - - if (graphic) { // update - graphic[isInside ? 'show' : 'hide'](true) // Since the marker group isn't clipped, each individual marker must be toggled - .animate(extend({ - x: plotX - radius, - y: plotY - radius - }, graphic.symbolName ? { // don't apply to image symbols #507 - width: 2 * radius, - height: 2 * radius - } : {})); - } else if (isInside && (radius > 0 || isImage)) { - point.graphic = graphic = chart.renderer.symbol( - symbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius, - hasPointMarker ? pointMarkerOptions : seriesMarkerOptions - ) - .attr(pointAttr) - .add(markerGroup); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - } - } - - }, - - /** - * Convert state properties from API naming conventions to SVG attributes - * - * @param {Object} options API options object - * @param {Object} base1 SVG attribute object to inherit from - * @param {Object} base2 Second level SVG attribute object to inherit from - */ - convertAttribs: function (options, base1, base2, base3) { - var conversion = this.pointAttrToOptions, - attr, - option, - obj = {}; - - options = options || {}; - base1 = base1 || {}; - base2 = base2 || {}; - base3 = base3 || {}; - - for (attr in conversion) { - option = conversion[attr]; - obj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]); - } - return obj; - }, - - /** - * Get the state attributes. Each series type has its own set of attributes - * that are allowed to change on a point's state change. Series wide attributes are stored for - * all series, and additionally point specific attributes are stored for all - * points with individual marker options. If such options are not defined for the point, - * a reference to the series wide attributes is stored in point.pointAttr. - */ - getAttribs: function () { - var series = this, - seriesOptions = series.options, - normalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions, - stateOptions = normalOptions.states, - stateOptionsHover = stateOptions[HOVER_STATE], - pointStateOptionsHover, - seriesColor = series.color, - seriesNegativeColor = series.options.negativeColor, - normalDefaults = { - stroke: seriesColor, - fill: seriesColor - }, - points = series.points || [], // #927 - i, - j, - threshold, - point, - seriesPointAttr = [], - pointAttr, - pointAttrToOptions = series.pointAttrToOptions, - hasPointSpecificOptions = series.hasPointSpecificOptions, - defaultLineColor = normalOptions.lineColor, - defaultFillColor = normalOptions.fillColor, - turboThreshold = seriesOptions.turboThreshold, - zones = series.zones, - zoneAxis = series.zoneAxis || 'y', - attr, - key; - - // series type specific modifications - if (seriesOptions.marker) { // line, spline, area, areaspline, scatter - - // if no hover radius is given, default to normal radius + 2 - stateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + stateOptionsHover.radiusPlus; - stateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + stateOptionsHover.lineWidthPlus; - - } else { // column, bar, pie - - // if no hover color is given, brighten the normal color - stateOptionsHover.color = stateOptionsHover.color || - Color(stateOptionsHover.color || seriesColor) - .brighten(stateOptionsHover.brightness).get(); - - // if no hover negativeColor is given, brighten the normal negativeColor - stateOptionsHover.negativeColor = stateOptionsHover.negativeColor || - Color(stateOptionsHover.negativeColor || seriesNegativeColor) - .brighten(stateOptionsHover.brightness).get(); - } - - // general point attributes for the series normal state - seriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults); - - // HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius - each([HOVER_STATE, SELECT_STATE], function (state) { - seriesPointAttr[state] = - series.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]); - }); - - // set it - series.pointAttr = seriesPointAttr; - - - // Generate the point-specific attribute collections if specific point - // options are given. If not, create a referance to the series wide point - // attributes - i = points.length; - if (!turboThreshold || i < turboThreshold || hasPointSpecificOptions) { - while (i--) { - point = points[i]; - normalOptions = (point.options && point.options.marker) || point.options; - if (normalOptions && normalOptions.enabled === false) { - normalOptions.radius = 0; - } - - if (zones.length) { - j = 0; - threshold = zones[j]; - while (point[zoneAxis] >= threshold.value) { - threshold = zones[++j]; - } - - point.color = point.fillColor = pick(threshold.color, series.color); // #3636, #4267, #4430 - inherit color from series, when color is undefined - - } - - hasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868 - - // check if the point has specific visual options - if (point.options) { - for (key in pointAttrToOptions) { - if (defined(normalOptions[pointAttrToOptions[key]])) { - hasPointSpecificOptions = true; - } - } - } - - // a specific marker config object is defined for the individual point: - // create it's own attribute collection - if (hasPointSpecificOptions) { - normalOptions = normalOptions || {}; - pointAttr = []; - stateOptions = normalOptions.states || {}; // reassign for individual point - pointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {}; - - // Handle colors for column and pies - if (!seriesOptions.marker || (point.negative && !pointStateOptionsHover.fillColor && !stateOptionsHover.fillColor)) { // column, bar, point or negative threshold for series with markers (#3636) - // If no hover color is given, brighten the normal color. #1619, #2579 - pointStateOptionsHover[series.pointAttrToOptions.fill] = pointStateOptionsHover.color || (!point.options.color && stateOptionsHover[(point.negative && seriesNegativeColor ? 'negativeColor' : 'color')]) || - Color(point.color) - .brighten(pointStateOptionsHover.brightness || stateOptionsHover.brightness) - .get(); - } - - // normal point state inherits series wide normal state - attr = { color: point.color }; // #868 - if (!defaultFillColor) { // Individual point color or negative color markers (#2219) - attr.fillColor = point.color; - } - if (!defaultLineColor) { - attr.lineColor = point.color; // Bubbles take point color, line markers use white - } - // Color is explicitly set to null or undefined (#1288, #4068) - if (normalOptions.hasOwnProperty('color') && !normalOptions.color) { - delete normalOptions.color; - } - pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]); - - // inherit from point normal and series hover - pointAttr[HOVER_STATE] = series.convertAttribs( - stateOptions[HOVER_STATE], - seriesPointAttr[HOVER_STATE], - pointAttr[NORMAL_STATE] - ); - - // inherit from point normal and series hover - pointAttr[SELECT_STATE] = series.convertAttribs( - stateOptions[SELECT_STATE], - seriesPointAttr[SELECT_STATE], - pointAttr[NORMAL_STATE] - ); - - - // no marker config object is created: copy a reference to the series-wide - // attribute collection - } else { - pointAttr = seriesPointAttr; - } - - point.pointAttr = pointAttr; - } - } - }, - - /** - * Clear DOM objects and free up memory - */ - destroy: function () { - var series = this, - chart = series.chart, - issue134 = /AppleWebKit\/533/.test(userAgent), - destroy, - i, - data = series.data || [], - point, - prop, - axis; - - // add event hook - fireEvent(series, 'destroy'); - - // remove all events - removeEvent(series); - - // erase from axes - each(series.axisTypes || [], function (AXIS) { - axis = series[AXIS]; - if (axis) { - erase(axis.series, series); - axis.isDirty = axis.forceRedraw = true; - } - }); - - // remove legend items - if (series.legendItem) { - series.chart.legend.destroyItem(series); - } - - // destroy all points with their elements - i = data.length; - while (i--) { - point = data[i]; - if (point && point.destroy) { - point.destroy(); - } - } - series.points = null; - - // Clear the animation timeout if we are destroying the series during initial animation - clearTimeout(series.animationTimeout); - - // Destroy all SVGElements associated to the series - for (prop in series) { - if (series[prop] instanceof SVGElement && !series[prop].survive) { // Survive provides a hook for not destroying - - // issue 134 workaround - destroy = issue134 && prop === 'group' ? - 'hide' : - 'destroy'; - - series[prop][destroy](); - } - } - - // remove from hoverSeries - if (chart.hoverSeries === series) { - chart.hoverSeries = null; - } - erase(chart.series, series); - - // clear all members - for (prop in series) { - delete series[prop]; - } - }, - - /** - * Return the graph path of a segment - */ - getSegmentPath: function (segment) { - var series = this, - segmentPath = [], - step = series.options.step; - - // build the segment line - each(segment, function (point, i) { - - var plotX = point.plotX, - plotY = point.plotY, - lastPoint; - - if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object - segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); - - } else { - - // moveTo or lineTo - segmentPath.push(i ? L : M); - - // step line? - if (step && i) { - lastPoint = segment[i - 1]; - if (step === 'right') { - segmentPath.push( - lastPoint.plotX, - plotY, - L - ); - - } else if (step === 'center') { - segmentPath.push( - (lastPoint.plotX + plotX) / 2, - lastPoint.plotY, - L, - (lastPoint.plotX + plotX) / 2, - plotY, - L - ); - - } else { - segmentPath.push( - plotX, - lastPoint.plotY, - L - ); - } - } - - // normal line to next point - segmentPath.push( - point.plotX, - point.plotY - ); - } - }); - - return segmentPath; - }, - - /** - * Get the graph path - */ - getGraphPath: function () { - var series = this, - graphPath = [], - segmentPath, - singlePoints = []; // used in drawTracker - - // Divide into segments and build graph and area paths - each(series.segments, function (segment) { - - segmentPath = series.getSegmentPath(segment); - - // add the segment to the graph, or a single point for tracking - if (segment.length > 1) { - graphPath = graphPath.concat(segmentPath); - } else { - singlePoints.push(segment[0]); - } - }); - - // Record it for use in drawGraph and drawTracker, and return graphPath - series.singlePoints = singlePoints; - series.graphPath = graphPath; - - return graphPath; - - }, - - /** - * Draw the actual graph - */ - drawGraph: function () { - var series = this, - options = this.options, - props = [['graph', options.lineColor || this.color, options.dashStyle]], - lineWidth = options.lineWidth, - roundCap = options.linecap !== 'square', - graphPath = this.getGraphPath(), - fillColor = (this.fillGraph && this.color) || NONE, // polygon series use filled graph - zones = this.zones; - - each(zones, function (threshold, i) { - props.push(['zoneGraph' + i, threshold.color || series.color, threshold.dashStyle || options.dashStyle]); - }); - - // Draw the graph - each(props, function (prop, i) { - var graphKey = prop[0], - graph = series[graphKey], - attribs; - - if (graph) { - graph.animate({ d: graphPath }); - - } else if ((lineWidth || fillColor) && graphPath.length) { // #1487 - attribs = { - stroke: prop[1], - 'stroke-width': lineWidth, - fill: fillColor, - zIndex: 1 // #1069 - }; - if (prop[2]) { - attribs.dashstyle = prop[2]; - } else if (roundCap) { - attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; - } - - series[graphKey] = series.chart.renderer.path(graphPath) - .attr(attribs) - .add(series.group) - .shadow((i < 2) && options.shadow); // add shadow to normal series (0) or to first zone (1) #3932 - } - }); - }, - - /** - * Clip the graphs into the positive and negative coloured graphs - */ - applyZones: function () { - var series = this, - chart = this.chart, - renderer = chart.renderer, - zones = this.zones, - translatedFrom, - translatedTo, - clips = this.clips || [], - clipAttr, - graph = this.graph, - area = this.area, - chartSizeMax = mathMax(chart.chartWidth, chart.chartHeight), - axis = this[(this.zoneAxis || 'y') + 'Axis'], - extremes, - reversed = axis.reversed, - inverted = chart.inverted, - horiz = axis.horiz, - pxRange, - pxPosMin, - pxPosMax, - ignoreZones = false; - - if (zones.length && (graph || area) && axis.min !== UNDEFINED) { - // The use of the Color Threshold assumes there are no gaps - // so it is safe to hide the original graph and area - if (graph) { - graph.hide(); - } - if (area) { - area.hide(); - } - - // Create the clips - extremes = axis.getExtremes(); - each(zones, function (threshold, i) { - - translatedFrom = reversed ? - (horiz ? chart.plotWidth : 0) : - (horiz ? 0 : axis.toPixels(extremes.min)); - translatedFrom = mathMin(mathMax(pick(translatedTo, translatedFrom), 0), chartSizeMax); - translatedTo = mathMin(mathMax(mathRound(axis.toPixels(pick(threshold.value, extremes.max), true)), 0), chartSizeMax); - - if (ignoreZones) { - translatedFrom = translatedTo = axis.toPixels(extremes.max); - } - - pxRange = Math.abs(translatedFrom - translatedTo); - pxPosMin = mathMin(translatedFrom, translatedTo); - pxPosMax = mathMax(translatedFrom, translatedTo); - if (axis.isXAxis) { - clipAttr = { - x: inverted ? pxPosMax : pxPosMin, - y: 0, - width: pxRange, - height: chartSizeMax - }; - if (!horiz) { - clipAttr.x = chart.plotHeight - clipAttr.x; - } - } else { - clipAttr = { - x: 0, - y: inverted ? pxPosMax : pxPosMin, - width: chartSizeMax, - height: pxRange - }; - if (horiz) { - clipAttr.y = chart.plotWidth - clipAttr.y; - } - } - - /// VML SUPPPORT - if (chart.inverted && renderer.isVML) { - if (axis.isXAxis) { - clipAttr = { - x: 0, - y: reversed ? pxPosMin : pxPosMax, - height: clipAttr.width, - width: chart.chartWidth - }; - } else { - clipAttr = { - x: clipAttr.y - chart.plotLeft - chart.spacingBox.x, - y: 0, - width: clipAttr.height, - height: chart.chartHeight - }; - } - } - /// END OF VML SUPPORT - - if (clips[i]) { - clips[i].animate(clipAttr); - } else { - clips[i] = renderer.clipRect(clipAttr); - - if (graph) { - series['zoneGraph' + i].clip(clips[i]); - } - - if (area) { - series['zoneArea' + i].clip(clips[i]); - } - } - // if this zone extends out of the axis, ignore the others - ignoreZones = threshold.value > extremes.max; - }); - this.clips = clips; - } - }, - - /** - * Initialize and perform group inversion on series.group and series.markerGroup - */ - invertGroups: function () { - var series = this, - chart = series.chart; - - // Pie, go away (#1736) - if (!series.xAxis) { - return; - } - - // A fixed size is needed for inversion to work - function setInvert() { - var size = { - width: series.yAxis.len, - height: series.xAxis.len - }; - - each(['group', 'markerGroup'], function (groupName) { - if (series[groupName]) { - series[groupName].attr(size).invert(); - } - }); - } - - addEvent(chart, 'resize', setInvert); // do it on resize - addEvent(series, 'destroy', function () { - removeEvent(chart, 'resize', setInvert); - }); - - // Do it now - setInvert(); // do it now - - // On subsequent render and redraw, just do setInvert without setting up events again - series.invertGroups = setInvert; - }, - - /** - * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and - * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size. - */ - plotGroup: function (prop, name, visibility, zIndex, parent) { - var group = this[prop], - isNew = !group; - - // Generate it on first call - if (isNew) { - this[prop] = group = this.chart.renderer.g(name) - .attr({ - zIndex: zIndex || 0.1 // IE8 needs this - }) - .add(parent); - - group.addClass('highcharts-series-' + this.index); - } - - // Place it on first and subsequent (redraw) calls - group.attr({ visibility: visibility })[isNew ? 'attr' : 'animate'](this.getPlotBox()); - return group; - }, - - /** - * Get the translation and scale for the plot area of this series - */ - getPlotBox: function () { - var chart = this.chart, - xAxis = this.xAxis, - yAxis = this.yAxis; - - // Swap axes for inverted (#2339) - if (chart.inverted) { - xAxis = yAxis; - yAxis = this.xAxis; - } - return { - translateX: xAxis ? xAxis.left : chart.plotLeft, - translateY: yAxis ? yAxis.top : chart.plotTop, - scaleX: 1, // #1623 - scaleY: 1 - }; - }, - - /** - * Render the graph and markers - */ - render: function () { - var series = this, - chart = series.chart, - group, - options = series.options, - animation = options.animation, - // Animation doesn't work in IE8 quirks when the group div is hidden, - // and looks bad in other oldIE - animDuration = (animation && !!series.animate && chart.renderer.isSVG && pick(animation.duration, 500)) || 0, - visibility = series.visible ? 'inherit' : 'hidden', // #2597 - zIndex = options.zIndex, - hasRendered = series.hasRendered, - chartSeriesGroup = chart.seriesGroup; - - // the group - group = series.plotGroup( - 'group', - 'series', - visibility, - zIndex, - chartSeriesGroup - ); - - series.markerGroup = series.plotGroup( - 'markerGroup', - 'markers', - visibility, - zIndex, - chartSeriesGroup - ); - - // initiate the animation - if (animDuration) { - series.animate(true); - } - - // cache attributes for shapes - series.getAttribs(); - - // SVGRenderer needs to know this before drawing elements (#1089, #1795) - group.inverted = series.isCartesian ? chart.inverted : false; - - // draw the graph if any - if (series.drawGraph) { - series.drawGraph(); - series.applyZones(); - } - - each(series.points, function (point) { - if (point.redraw) { - point.redraw(); - } - }); - - // draw the data labels (inn pies they go before the points) - if (series.drawDataLabels) { - series.drawDataLabels(); - } - - // draw the points - if (series.visible) { - series.drawPoints(); - } - - - // draw the mouse tracking area - if (series.drawTracker && series.options.enableMouseTracking !== false) { - series.drawTracker(); - } - - // Handle inverted series and tracker groups - if (chart.inverted) { - series.invertGroups(); - } - - // Initial clipping, must be defined after inverting groups for VML. Applies to columns etc. (#3839). - if (options.clip !== false && !series.sharedClipKey && !hasRendered) { - group.clip(chart.clipRect); - } - - // Run the animation - if (animDuration) { - series.animate(); - } - - // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option - // which should be available to the user). - if (!hasRendered) { - series.animationTimeout = syncTimeout(function () { - series.afterAnimate(); - }, animDuration); - } - - series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - series.hasRendered = true; - }, - - /** - * Redraw the series after an update in the axes. - */ - redraw: function () { - var series = this, - chart = series.chart, - wasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after - wasDirty = series.isDirty, - group = series.group, - xAxis = series.xAxis, - yAxis = series.yAxis; - - // reposition on resize - if (group) { - if (chart.inverted) { - group.attr({ - width: chart.plotWidth, - height: chart.plotHeight - }); - } - - group.animate({ - translateX: pick(xAxis && xAxis.left, chart.plotLeft), - translateY: pick(yAxis && yAxis.top, chart.plotTop) - }); - } - - series.translate(); - series.render(); - if (wasDirtyData) { - fireEvent(series, 'updatedData'); - } - if (wasDirty || wasDirtyData) { // #3945 recalculate the kdtree when dirty - delete this.kdTree; // #3868 recalculate the kdtree with dirty data - } - }, - - /** - * KD Tree && PointSearching Implementation - */ - - kdDimensions: 1, - kdAxisArray: ['clientX', 'plotY'], - - searchPoint: function (e, compareX) { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - inverted = series.chart.inverted; - - return this.searchKDTree({ - clientX: inverted ? xAxis.len - e.chartY + xAxis.pos : e.chartX - xAxis.pos, - plotY: inverted ? yAxis.len - e.chartX + yAxis.pos : e.chartY - yAxis.pos - }, compareX); - }, - - buildKDTree: function () { - var series = this, - dimensions = series.kdDimensions; - - // Internal function - function _kdtree(points, depth, dimensions) { - var axis, median, length = points && points.length; - - if (length) { - - // alternate between the axis - axis = series.kdAxisArray[depth % dimensions]; - - // sort point array - points.sort(function (a, b) { - return a[axis] - b[axis]; - }); - - median = Math.floor(length / 2); - - // build and return nod - return { - point: points[median], - left: _kdtree(points.slice(0, median), depth + 1, dimensions), - right: _kdtree(points.slice(median + 1), depth + 1, dimensions) - }; - - } - } - - // Start the recursive build process with a clone of the points array and null points filtered out (#3873) - function startRecursive() { - var points = grep(series.points || [], function (point) { // #4390 - return point.y !== null; - }); - - series.kdTree = _kdtree(points, dimensions, dimensions); - } - delete series.kdTree; - - // For testing tooltips, don't build async - syncTimeout(startRecursive, series.options.kdNow ? 0 : 1); - }, - - searchKDTree: function (point, compareX) { - var series = this, - kdX = this.kdAxisArray[0], - kdY = this.kdAxisArray[1], - kdComparer = compareX ? 'distX' : 'dist'; - - // Set the one and two dimensional distance on the point object - function setDistance(p1, p2) { - var x = (defined(p1[kdX]) && defined(p2[kdX])) ? Math.pow(p1[kdX] - p2[kdX], 2) : null, - y = (defined(p1[kdY]) && defined(p2[kdY])) ? Math.pow(p1[kdY] - p2[kdY], 2) : null, - r = (x || 0) + (y || 0); - - p2.dist = defined(r) ? Math.sqrt(r) : Number.MAX_VALUE; - p2.distX = defined(x) ? Math.sqrt(x) : Number.MAX_VALUE; - } - function _search(search, tree, depth, dimensions) { - var point = tree.point, - axis = series.kdAxisArray[depth % dimensions], - tdist, - sideA, - sideB, - ret = point, - nPoint1, - nPoint2; - - setDistance(search, point); - - // Pick side based on distance to splitting point - tdist = search[axis] - point[axis]; - sideA = tdist < 0 ? 'left' : 'right'; - sideB = tdist < 0 ? 'right' : 'left'; - - // End of tree - if (tree[sideA]) { - nPoint1 = _search(search, tree[sideA], depth + 1, dimensions); - - ret = (nPoint1[kdComparer] < ret[kdComparer] ? nPoint1 : point); - } - if (tree[sideB]) { - // compare distance to current best to splitting point to decide wether to check side B or not - if (Math.sqrt(tdist * tdist) < ret[kdComparer]) { - nPoint2 = _search(search, tree[sideB], depth + 1, dimensions); - ret = (nPoint2[kdComparer] < ret[kdComparer] ? nPoint2 : ret); - } - } - - return ret; - } - - if (!this.kdTree) { - this.buildKDTree(); - } - - if (this.kdTree) { - return _search(point, - this.kdTree, this.kdDimensions, this.kdDimensions); - } - } - - }; // end Series prototype - - /** - * The class for stack items - */ - function StackItem(axis, options, isNegative, x, stackOption) { - - var inverted = axis.chart.inverted; - - this.axis = axis; - - // Tells if the stack is negative - this.isNegative = isNegative; - - // Save the options to be able to style the label - this.options = options; - - // Save the x value to be able to position the label later - this.x = x; - - // Initialize total value - this.total = null; - - // This will keep each points' extremes stored by series.index and point index - this.points = {}; - - // Save the stack option on the series configuration object, and whether to treat it as percent - this.stack = stackOption; - - // The align options and text align varies on whether the stack is negative and - // if the chart is inverted or not. - // First test the user supplied value, then use the dynamic. - this.alignOptions = { - align: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'), - verticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), - y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), - x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) - }; - - this.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center'); - } - - StackItem.prototype = { - destroy: function () { - destroyObjectProperties(this, this.axis); - }, - - /** - * Renders the stack total label and adds it to the stack label group. - */ - render: function (group) { - var options = this.options, - formatOption = options.format, - str = formatOption ? - format(formatOption, this) : - options.formatter.call(this); // format the text in the label - - // Change the text to reflect the new total and set visibility to hidden in case the serie is hidden - if (this.label) { - this.label.attr({ text: str, visibility: 'hidden' }); - // Create new label - } else { - this.label = - this.axis.chart.renderer.text(str, null, null, options.useHTML) // dummy positions, actual position updated with setOffset method in columnseries - .css(options.style) // apply style - .attr({ - align: this.textAlign, // fix the text-anchor - rotation: options.rotation, // rotation - visibility: HIDDEN // hidden until setOffset is called - }) - .add(group); // add to the labels-group - } - }, - - /** - * Sets the offset that the stack has from the x value and repositions the label. - */ - setOffset: function (xOffset, xWidth) { - var stackItem = this, - axis = stackItem.axis, - chart = axis.chart, - inverted = chart.inverted, - reversed = axis.reversed, - neg = (this.isNegative && !reversed) || (!this.isNegative && reversed), // #4056 - y = axis.translate(axis.usePercentage ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates - yZero = axis.translate(0), // stack origin - h = mathAbs(y - yZero), // stack height - x = chart.xAxis[0].translate(this.x) + xOffset, // stack x position - plotHeight = chart.plotHeight, - stackBox = { // this is the box for the complete stack - x: inverted ? (neg ? y : y - h) : x, - y: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y), - width: inverted ? h : xWidth, - height: inverted ? xWidth : h - }, - label = this.label, - alignAttr; - - if (label) { - label.align(this.alignOptions, null, stackBox); // align the label to the box - - // Set visibility (#678) - alignAttr = label.alignAttr; - label[this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? 'show' : 'hide'](true); - } - } - }; - - /** - * Generate stacks for each series and calculate stacks total values - */ - Chart.prototype.getStacks = function () { - var chart = this; - - // reset stacks for each yAxis - each(chart.yAxis, function (axis) { - if (axis.stacks && axis.hasVisibleSeries) { - axis.oldStacks = axis.stacks; - } - }); - - each(chart.series, function (series) { - if (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) { - series.stackKey = series.type + pick(series.options.stack, ''); - } - }); - }; - - - // Stacking methods defined on the Axis prototype - - /** - * Build the stacks from top down - */ - Axis.prototype.buildStacks = function () { - var series = this.series, - reversedStacks = pick(this.options.reversedStacks, true), - i = series.length; - if (!this.isXAxis) { - this.usePercentage = false; - while (i--) { - series[reversedStacks ? i : series.length - i - 1].setStackedPoints(); - } - // Loop up again to compute percent stack - if (this.usePercentage) { - for (i = 0; i < series.length; i++) { - series[i].setPercentStacks(); - } - } - } - }; - - Axis.prototype.renderStackTotals = function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - stacks = axis.stacks, - stackKey, - oneStack, - stackCategory, - stackTotalGroup = axis.stackTotalGroup; - - // Create a separate group for the stack total labels - if (!stackTotalGroup) { - axis.stackTotalGroup = stackTotalGroup = - renderer.g('stack-labels') - .attr({ - visibility: VISIBLE, - zIndex: 6 - }) - .add(); - } - - // plotLeft/Top will change when y axis gets wider so we need to translate the - // stackTotalGroup at every render call. See bug #506 and #516 - stackTotalGroup.translate(chart.plotLeft, chart.plotTop); - - // Render each stack total - for (stackKey in stacks) { - oneStack = stacks[stackKey]; - for (stackCategory in oneStack) { - oneStack[stackCategory].render(stackTotalGroup); - } - } - }; - - /** - * Set all the stacks to initial states and destroy unused ones. - */ - Axis.prototype.resetStacks = function () { - var stacks = this.stacks, - type, - i; - if (!this.isXAxis) { - for (type in stacks) { - for (i in stacks[type]) { - - // Clean up memory after point deletion (#1044, #4320) - if (stacks[type][i].touched < this.stacksTouched) { - stacks[type][i].destroy(); - delete stacks[type][i]; - - // Reset stacks - } else { - stacks[type][i].total = null; - stacks[type][i].cum = 0; - } - } - } - } - }; - - Axis.prototype.cleanStacks = function () { - var stacks, type, i; - - if (!this.isXAxis) { - if (this.oldStacks) { - stacks = this.stacks = this.oldStacks; - } - - // reset stacks - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].cum = stacks[type][i].total; - } - } - } - }; - - - // Stacking methods defnied for Series prototype - - /** - * Adds series' points value to corresponding stack - */ - Series.prototype.setStackedPoints = function () { - if (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) { - return; - } - - var series = this, - xData = series.processedXData, - yData = series.processedYData, - stackedYData = [], - yDataLength = yData.length, - seriesOptions = series.options, - threshold = seriesOptions.threshold, - stackThreshold = seriesOptions.startFromThreshold ? threshold : 0, - stackOption = seriesOptions.stack, - stacking = seriesOptions.stacking, - stackKey = series.stackKey, - negKey = '-' + stackKey, - negStacks = series.negStacks, - yAxis = series.yAxis, - stacks = yAxis.stacks, - oldStacks = yAxis.oldStacks, - stackIndicator, - isNegative, - stack, - other, - key, - pointKey, - i, - x, - y; - - - yAxis.stacksTouched += 1; - - // loop over the non-null y values and read them into a local array - for (i = 0; i < yDataLength; i++) { - x = xData[i]; - y = yData[i]; - stackIndicator = series.getStackIndicator(stackIndicator, x, series.index); - pointKey = stackIndicator.key; - // Read stacked values into a stack based on the x value, - // the sign of y and the stack key. Stacking is also handled for null values (#739) - isNegative = negStacks && y < (stackThreshold ? 0 : threshold); - key = isNegative ? negKey : stackKey; - - // Create empty object for this stack if it doesn't exist yet - if (!stacks[key]) { - stacks[key] = {}; - } - - // Initialize StackItem for this x - if (!stacks[key][x]) { - if (oldStacks[key] && oldStacks[key][x]) { - stacks[key][x] = oldStacks[key][x]; - stacks[key][x].total = null; - } else { - stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption); - } - } - - // If the StackItem doesn't exist, create it first - stack = stacks[key][x]; - stack.points[pointKey] = [pick(stack.cum, stackThreshold)]; - stack.touched = yAxis.stacksTouched; - - // In area charts, if there are multiple points on the same X value, let the - // area fill the full span of those points - if (stackIndicator.index > 0 && series.singleStacks === false) { - stack.points[pointKey][0] = stack.points[series.index + ',' + x + ',0'][0]; - } - - // Add value to the stack total - if (stacking === 'percent') { - - // Percent stacked column, totals are the same for the positive and negative stacks - other = isNegative ? stackKey : negKey; - if (negStacks && stacks[other] && stacks[other][x]) { - other = stacks[other][x]; - stack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0; - - // Percent stacked areas - } else { - stack.total = correctFloat(stack.total + (mathAbs(y) || 0)); - } - } else { - stack.total = correctFloat(stack.total + (y || 0)); - } - - stack.cum = pick(stack.cum, stackThreshold) + (y || 0); - - stack.points[pointKey].push(stack.cum); - stackedYData[i] = stack.cum; - - } - - if (stacking === 'percent') { - yAxis.usePercentage = true; - } - - this.stackedYData = stackedYData; // To be used in getExtremes - - // Reset old stacks - yAxis.oldStacks = {}; - }; - - /** - * Iterate over all stacks and compute the absolute values to percent - */ - Series.prototype.setPercentStacks = function () { - var series = this, - stackKey = series.stackKey, - stacks = series.yAxis.stacks, - processedXData = series.processedXData, - stackIndicator; - - each([stackKey, '-' + stackKey], function (key) { - var i = processedXData.length, - x, - stack, - pointExtremes, - totalFactor; - - while (i--) { - x = processedXData[i]; - stackIndicator = series.getStackIndicator(stackIndicator, x, series.index); - stack = stacks[key] && stacks[key][x]; - pointExtremes = stack && stack.points[stackIndicator.key]; - if (pointExtremes) { - totalFactor = stack.total ? 100 / stack.total : 0; - pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value - pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value - series.stackedYData[i] = pointExtremes[1]; - } - } - }); - }; - - /** - * Get stack indicator, according to it's x-value, to determine points with the same x-value - */ - Series.prototype.getStackIndicator = function (stackIndicator, x, index) { - if (!defined(stackIndicator) || stackIndicator.x !== x) { - stackIndicator = { - x: x, - index: 0 - }; - } else { - stackIndicator.index++; - } - - stackIndicator.key = [index, x, stackIndicator.index].join(','); - - return stackIndicator; - }; - - // Extend the Chart prototype for dynamic methods - extend(Chart.prototype, { - - /** - * Add a series dynamically after time - * - * @param {Object} options The config options - * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - * @return {Object} series The newly created series object - */ - addSeries: function (options, redraw, animation) { - var series, - chart = this; - - if (options) { - redraw = pick(redraw, true); // defaults to true - - fireEvent(chart, 'addSeries', { options: options }, function () { - series = chart.initSeries(options); - - chart.isDirtyLegend = true; // the series array is out of sync with the display - chart.linkSeries(); - if (redraw) { - chart.redraw(animation); - } - }); - } - - return series; - }, - - /** - * Add an axis to the chart - * @param {Object} options The axis option - * @param {Boolean} isX Whether it is an X axis or a value axis - */ - addAxis: function (options, isX, redraw, animation) { - var key = isX ? 'xAxis' : 'yAxis', - chartOptions = this.options; - - new Axis(this, merge(options, { // eslint-disable-line no-new - index: this[key].length, - isX: isX - })); - - // Push the new axis options to the chart options - chartOptions[key] = splat(chartOptions[key] || {}); - chartOptions[key].push(options); - - if (pick(redraw, true)) { - this.redraw(animation); - } - }, - - /** - * Dim the chart and show a loading text or symbol - * @param {String} str An optional text to show in the loading label instead of the default one - */ - showLoading: function (str) { - var chart = this, - options = chart.options, - loadingDiv = chart.loadingDiv, - loadingOptions = options.loading, - setLoadingSize = function () { - if (loadingDiv) { - css(loadingDiv, { - left: chart.plotLeft + PX, - top: chart.plotTop + PX, - width: chart.plotWidth + PX, - height: chart.plotHeight + PX - }); - } - }; - - // create the layer at the first call - if (!loadingDiv) { - chart.loadingDiv = loadingDiv = createElement(DIV, { - className: PREFIX + 'loading' - }, extend(loadingOptions.style, { - zIndex: 10, - display: NONE - }), chart.container); - - chart.loadingSpan = createElement( - 'span', - null, - loadingOptions.labelStyle, - loadingDiv - ); - addEvent(chart, 'redraw', setLoadingSize); // #1080 - } - - // update text - chart.loadingSpan.innerHTML = str || options.lang.loading; - - // show it - if (!chart.loadingShown) { - css(loadingDiv, { - opacity: 0, - display: '' - }); - animate(loadingDiv, { - opacity: loadingOptions.style.opacity - }, { - duration: loadingOptions.showDuration || 0 - }); - chart.loadingShown = true; - } - setLoadingSize(); - }, - - /** - * Hide the loading layer - */ - hideLoading: function () { - var options = this.options, - loadingDiv = this.loadingDiv; - - if (loadingDiv) { - animate(loadingDiv, { - opacity: 0 - }, { - duration: options.loading.hideDuration || 100, - complete: function () { - css(loadingDiv, { display: NONE }); - } - }); - } - this.loadingShown = false; - } - }); - - // extend the Point prototype for dynamic methods - extend(Point.prototype, { - /** - * Update the point with new options (typically x/y data) and optionally redraw the series. - * - * @param {Object} options Point options as defined in the series.data array - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - */ - update: function (options, redraw, animation, runEvent) { - var point = this, - series = point.series, - graphic = point.graphic, - i, - chart = series.chart, - seriesOptions = series.options, - names = series.xAxis && series.xAxis.names; - - redraw = pick(redraw, true); - - function update() { - - point.applyOptions(options); - - // Update visuals - if (point.y === null && graphic) { // #4146 - point.graphic = graphic.destroy(); - } - if (isObject(options) && !isArray(options)) { - // Defer the actual redraw until getAttribs has been called (#3260) - point.redraw = function () { - if (graphic && graphic.element) { - if (options && options.marker && options.marker.symbol) { - point.graphic = graphic.destroy(); - } - } - if (options && options.dataLabels && point.dataLabel) { // #2468 - point.dataLabel = point.dataLabel.destroy(); - } - point.redraw = null; - }; - } - - // record changes in the parallel arrays - i = point.index; - series.updateParallelArrays(point, i); - if (names && point.name) { - names[point.x] = point.name; - } - - // Record the options to options.data. If there is an object from before, - // use point options, otherwise use raw options. (#4701) - seriesOptions.data[i] = isObject(seriesOptions.data[i]) ? point.options : options; - - // redraw - series.isDirty = series.isDirtyData = true; - if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 - chart.isDirtyBox = true; - } - - if (seriesOptions.legendType === 'point') { // #1831, #1885 - chart.isDirtyLegend = true; - } - if (redraw) { - chart.redraw(animation); - } - } - - // Fire the event with a default handler of doing the update - if (runEvent === false) { // When called from setData - update(); - } else { - point.firePointEvent('update', { options: options }, update); - } - }, - - /** - * Remove a point and optionally redraw the series and if necessary the axes - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - this.series.removePoint(inArray(this, this.series.data), redraw, animation); - } - }); - - // Extend the series prototype for dynamic methods - extend(Series.prototype, { - /** - * Add a point dynamically after chart load time - * @param {Object} options Point options as given in series.data - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean} shift If shift is true, a point is shifted off the start - * of the series as one is appended to the end. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - addPoint: function (options, redraw, shift, animation) { - var series = this, - seriesOptions = series.options, - data = series.data, - graph = series.graph, - area = series.area, - chart = series.chart, - names = series.xAxis && series.xAxis.names, - currentShift = (graph && graph.shift) || 0, - shiftShapes = ['graph', 'area'], - dataOptions = seriesOptions.data, - point, - isInTheMiddle, - xData = series.xData, - i, - x; - - setAnimation(animation, chart); - - // Make graph animate sideways - if (shift) { - i = series.zones.length; - while (i--) { - shiftShapes.push('zoneGraph' + i, 'zoneArea' + i); - } - each(shiftShapes, function (shape) { - if (series[shape]) { - series[shape].shift = currentShift + (seriesOptions.step ? 2 : 1); - } - }); - } - if (area) { - area.isArea = true; // needed in animation, both with and without shift - } - - // Optional redraw, defaults to true - redraw = pick(redraw, true); - - // Get options and push the point to xData, yData and series.options. In series.generatePoints - // the Point instance will be created on demand and pushed to the series.data array. - point = { series: series }; - series.pointClass.prototype.applyOptions.apply(point, [options]); - x = point.x; - - // Get the insertion point - i = xData.length; - if (series.requireSorting && x < xData[i - 1]) { - isInTheMiddle = true; - while (i && xData[i - 1] > x) { - i--; - } - } - - series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item - series.updateParallelArrays(point, i); // update it - - if (names && point.name) { - names[x] = point.name; - } - dataOptions.splice(i, 0, options); - - if (isInTheMiddle) { - series.data.splice(i, 0, null); - series.processData(); - } - - // Generate points to be added to the legend (#1329) - if (seriesOptions.legendType === 'point') { - series.generatePoints(); - } - - // Shift the first point off the parallel arrays - if (shift) { - if (data[0] && data[0].remove) { - data[0].remove(false); - } else { - data.shift(); - series.updateParallelArrays(point, 'shift'); - - dataOptions.shift(); - } - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - series.getAttribs(); // #1937 - chart.redraw(); - } - }, - - /** - * Remove a point (rendered or not), by index - */ - removePoint: function (i, redraw, animation) { - - var series = this, - data = series.data, - point = data[i], - points = series.points, - chart = series.chart, - remove = function () { - - if (data.length === points.length) { - points.splice(i, 1); - } - data.splice(i, 1); - series.options.data.splice(i, 1); - series.updateParallelArrays(point || { series: series }, 'splice', i, 1); - - if (point) { - point.destroy(); - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - chart.redraw(); - } - }; - - setAnimation(animation, chart); - redraw = pick(redraw, true); - - // Fire the event with a default handler of removing the point - if (point) { - point.firePointEvent('remove', null, remove); - } else { - remove(); - } - }, - - /** - * Remove a series and optionally redraw the chart - * - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - var series = this, - chart = series.chart; - - // Fire the event with a default handler of removing the point - fireEvent(series, 'remove', null, function () { - - // Destroy elements - series.destroy(); - - // Redraw - chart.isDirtyLegend = chart.isDirtyBox = true; - chart.linkSeries(); - - if (pick(redraw, true)) { - chart.redraw(animation); - } - }); - }, - - /** - * Update the series with a new set of options - */ - update: function (newOptions, redraw) { - var series = this, - chart = this.chart, - // must use user options when changing type because this.options is merged - // in with type specific plotOptions - oldOptions = this.userOptions, - oldType = this.type, - proto = seriesTypes[oldType].prototype, - preserve = ['group', 'markerGroup', 'dataLabelsGroup'], - n; - - // If we're changing type or zIndex, create new groups (#3380, #3404) - if ((newOptions.type && newOptions.type !== oldType) || newOptions.zIndex !== undefined) { - preserve.length = 0; - } - - // Make sure groups are not destroyed (#3094) - each(preserve, function (prop) { - preserve[prop] = series[prop]; - delete series[prop]; - }); - - // Do the merge, with some forced options - newOptions = merge(oldOptions, { - animation: false, - index: this.index, - pointStart: this.xData[0] // when updating after addPoint - }, { data: this.options.data }, newOptions); - - // Destroy the series and delete all properties. Reinsert all methods - // and properties from the new type prototype (#2270, #3719) - this.remove(false); - for (n in proto) { - this[n] = UNDEFINED; - } - extend(this, seriesTypes[newOptions.type || oldType].prototype); - - // Re-register groups (#3094) - each(preserve, function (prop) { - series[prop] = preserve[prop]; - }); - - this.init(chart, newOptions); - chart.linkSeries(); // Links are lost in this.remove (#3028) - if (pick(redraw, true)) { - chart.redraw(false); - } - } - }); - - // Extend the Axis.prototype for dynamic methods - extend(Axis.prototype, { - - /** - * Update the axis with a new options structure - */ - update: function (newOptions, redraw) { - var chart = this.chart; - - newOptions = chart.options[this.coll][this.options.index] = merge(this.userOptions, newOptions); - - this.destroy(true); - this._addedPlotLB = this.chart._labelPanes = UNDEFINED; // #1611, #2887, #4314 - - this.init(chart, extend(newOptions, { events: UNDEFINED })); - - chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Remove the axis from the chart - */ - remove: function (redraw) { - var chart = this.chart, - key = this.coll, // xAxis or yAxis - axisSeries = this.series, - i = axisSeries.length; - - // Remove associated series (#2687) - while (i--) { - if (axisSeries[i]) { - axisSeries[i].remove(false); - } - } - - // Remove the axis - erase(chart.axes, this); - erase(chart[key], this); - chart.options[key].splice(this.options.index, 1); - each(chart[key], function (axis, i) { // Re-index, #1706 - axis.options.index = i; - }); - this.destroy(); - chart.isDirtyBox = true; - - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Update the axis title by options - */ - setTitle: function (newTitleOptions, redraw) { - this.update({ title: newTitleOptions }, redraw); - }, - - /** - * Set new axis categories and optionally redraw - * @param {Array} categories - * @param {Boolean} redraw - */ - setCategories: function (categories, redraw) { - this.update({ categories: categories }, redraw); - } - - }); - - - /** - * LineSeries object - */ - var LineSeries = extendClass(Series); - seriesTypes.line = LineSeries; - - /** - * Set the default options for area - */ - defaultPlotOptions.area = merge(defaultSeriesOptions, { - softThreshold: false, - threshold: 0 - // trackByArea: false, - // lineColor: null, // overrides color, but lets fillColor be unaltered - // fillOpacity: 0.75, - // fillColor: null - }); - - /** - * AreaSeries object - */ - var AreaSeries = extendClass(Series, { - type: 'area', - singleStacks: false, - /** - * For stacks, don't split segments on null values. Instead, draw null values with - * no marker. Also insert dummy points for any X position that exists in other series - * in the stack. - */ - getSegments: function () { - var series = this, - segments = [], - segment = [], - keys = [], - xAxis = this.xAxis, - yAxis = this.yAxis, - stack = yAxis.stacks[this.stackKey], - pointMap = {}, - plotX, - plotY, - points = this.points, - connectNulls = this.options.connectNulls, - stackIndicator, - i, - x; - - if (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue - // Create a map where we can quickly look up the points by their X value. - for (i = 0; i < points.length; i++) { - pointMap[points[i].x] = points[i]; - } - - // Sort the keys (#1651) - for (x in stack) { - if (stack[x].total !== null) { // nulled after switching between grouping and not (#1651, #2336) - keys.push(+x); - } - } - keys.sort(function (a, b) { - return a - b; - }); - - each(keys, function (x) { - var threshold = null, - stackPoint, - skip = connectNulls && (!pointMap[x] || pointMap[x].y === null); // #1836 - - if (!skip) { - - // The point exists, push it to the segment - if (pointMap[x]) { - segment.push(pointMap[x]); - - // There is no point for this X value in this series, so we - // insert a dummy point in order for the areas to be drawn - // correctly. - } else { - - // Loop down the stack to find the series below this one that has - // a value (#1991) - for (i = series.index; i <= yAxis.series.length; i++) { - stackIndicator = series.getStackIndicator(null, x, i); - stackPoint = stack[x].points[stackIndicator.key]; - if (stackPoint) { - threshold = stackPoint[1]; - break; - } - } - - plotX = xAxis.translate(x); - plotY = yAxis.getThreshold(threshold); - segment.push({ - y: null, - plotX: plotX, - clientX: plotX, - plotY: plotY, - yBottom: plotY, - onMouseOver: noop - }); - } - } - }); - - if (segment.length) { - segments.push(segment); - } - - } else { - Series.prototype.getSegments.call(this); - segments = this.segments; - } - - this.segments = segments; - }, - - /** - * Extend the base Series getSegmentPath method by adding the path for the area. - * This path is pushed to the series.areaPath property. - */ - getSegmentPath: function (segment) { - - var segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method - areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path - i, - options = this.options, - segLength = segmentPath.length, - translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 - yBottom; - - if (segLength === 3) { // for animation from 1 to two points - areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); - } - if (options.stacking && !this.closedStacks) { - - // Follow stack back. Later, implement areaspline. A general solution could be to - // reverse the entire graphPath of the previous series, though may be hard with - // splines and with series with different extremes - for (i = segment.length - 1; i >= 0; i--) { - - yBottom = pick(segment[i].yBottom, translatedThreshold); - - // step line? - if (i < segment.length - 1 && options.step) { - areaSegmentPath.push(segment[i + 1].plotX, yBottom); - } - - areaSegmentPath.push(segment[i].plotX, yBottom); - } - - } else { // follow zero line back - this.closeSegment(areaSegmentPath, segment, translatedThreshold); - } - this.areaPath = this.areaPath.concat(areaSegmentPath); - return segmentPath; - }, - - /** - * Extendable method to close the segment path of an area. This is overridden in polar - * charts. - */ - closeSegment: function (path, segment, translatedThreshold) { - path.push( - L, - segment[segment.length - 1].plotX, - translatedThreshold, - L, - segment[0].plotX, - translatedThreshold - ); - }, - - /** - * Draw the graph and the underlying area. This method calls the Series base - * function and adds the area. The areaPath is calculated in the getSegmentPath - * method called from Series.prototype.drawGraph. - */ - drawGraph: function () { - - // Define or reset areaPath - this.areaPath = []; - - // Call the base method - Series.prototype.drawGraph.apply(this); - - // Define local variables - var series = this, - areaPath = this.areaPath, - options = this.options, - zones = this.zones, - props = [['area', this.color, options.fillColor]]; // area name, main color, fill color - - each(zones, function (threshold, i) { - props.push(['zoneArea' + i, threshold.color || series.color, threshold.fillColor || options.fillColor]); - }); - each(props, function (prop) { - var areaKey = prop[0], - area = series[areaKey], - attr; - - // Create or update the area - if (area) { // update - area.animate({ d: areaPath }); - - } else { // create - attr = { - fill: prop[2] || prop[1], - zIndex: 0 // #1069 - }; - if (!prop[2]) { - attr['fill-opacity'] = options.fillOpacity || 0.75; - } - series[areaKey] = series.chart.renderer.path(areaPath) - .attr(attr) - .add(series.group); - } - }); - }, - - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - - seriesTypes.area = AreaSeries; - /** - * Set the default options for spline - */ - defaultPlotOptions.spline = merge(defaultSeriesOptions); - - /** - * SplineSeries object - */ - var SplineSeries = extendClass(Series, { - type: 'spline', - - /** - * Get the spline segment from a given point's previous neighbour to the given point - */ - getPointSpline: function (segment, point, i) { - var smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc - denom = smoothing + 1, - plotX = point.plotX, - plotY = point.plotY, - lastPoint = segment[i - 1], - nextPoint = segment[i + 1], - leftContX, - leftContY, - rightContX, - rightContY, - ret; - - // find control points - if (lastPoint && nextPoint) { - - var lastX = lastPoint.plotX, - lastY = lastPoint.plotY, - nextX = nextPoint.plotX, - nextY = nextPoint.plotY, - correction; - - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - - // have the two control points make a straight line through main point - correction = ((rightContY - leftContY) * (rightContX - plotX)) / - (rightContX - leftContX) + plotY - rightContY; - - leftContY += correction; - rightContY += correction; - - // to prevent false extremes, check that control points are between - // neighbouring points' y values - if (leftContY > lastY && leftContY > plotY) { - leftContY = mathMax(lastY, plotY); - rightContY = 2 * plotY - leftContY; // mirror of left control point - } else if (leftContY < lastY && leftContY < plotY) { - leftContY = mathMin(lastY, plotY); - rightContY = 2 * plotY - leftContY; - } - if (rightContY > nextY && rightContY > plotY) { - rightContY = mathMax(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } else if (rightContY < nextY && rightContY < plotY) { - rightContY = mathMin(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } - - // record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - // Visualize control points for debugging - /* - if (leftContX) { - this.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2) - .attr({ - stroke: 'red', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'red', - 'stroke-width': 1 - }) - .add(); - this.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2) - .attr({ - stroke: 'green', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'green', - 'stroke-width': 1 - }) - .add(); - } - */ - - // moveTo or lineTo - if (!i) { - ret = [M, plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - return ret; - } - }); - seriesTypes.spline = SplineSeries; - - /** - * Set the default options for areaspline - */ - defaultPlotOptions.areaspline = merge(defaultPlotOptions.area); - - /** - * AreaSplineSeries object - */ - var areaProto = AreaSeries.prototype, - AreaSplineSeries = extendClass(SplineSeries, { - type: 'areaspline', - closedStacks: true, // instead of following the previous graph back, follow the threshold back - - // Mix in methods from the area series - getSegmentPath: areaProto.getSegmentPath, - closeSegment: areaProto.closeSegment, - drawGraph: areaProto.drawGraph, - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - - seriesTypes.areaspline = AreaSplineSeries; - - /** - * Set the default options for column - */ - defaultPlotOptions.column = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - //borderWidth: 1, - borderRadius: 0, - //colorByPoint: undefined, - groupPadding: 0.2, - //grouping: true, - marker: null, // point options are specified in the base options - pointPadding: 0.1, - //pointWidth: null, - minPointLength: 0, - cropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes - pointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories - states: { - hover: { - brightness: 0.1, - shadow: false, - halo: false - }, - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - }, - dataLabels: { - align: null, // auto - verticalAlign: null, // auto - y: null - }, - softThreshold: false, - startFromThreshold: true, // false doesn't work well: http://jsfiddle.net/highcharts/hz8fopan/14/ - stickyTracking: false, - tooltip: { - distance: 6 - }, - threshold: 0 - }); - - /** - * ColumnSeries object - */ - var ColumnSeries = extendClass(Series, { - type: 'column', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - fill: 'color', - r: 'borderRadius' - }, - cropShoulder: 0, - directTouch: true, // When tooltip is not shared, this series (and derivatives) requires direct touch/hover. KD-tree does not apply. - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: true, // use separate negative stacks, unlike area stacks where a negative - // point is substracted from previous (#1910) - - /** - * Initialize the series - */ - init: function () { - Series.prototype.init.apply(this, arguments); - - var series = this, - chart = series.chart; - - // if the series is added dynamically, force redraw of other - // series affected by a new column - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - }, - - /** - * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding, - * pointWidth etc. - */ - getColumnMetrics: function () { - - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - reversedXAxis = xAxis.reversed, - stackKey, - stackGroups = {}, - columnCount = 0; - - // Get the total number of column type series. - // This is called on every series. Consider moving this logic to a - // chart.orderStacks() function and call it on init, addSeries and removeSeries - if (options.grouping === false) { - columnCount = 1; - } else { - each(series.chart.series, function (otherSeries) { - var otherOptions = otherSeries.options, - otherYAxis = otherSeries.yAxis, - columnIndex; - if (otherSeries.type === series.type && otherSeries.visible && - yAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) { // #642, #2086 - if (otherOptions.stacking) { - stackKey = otherSeries.stackKey; - if (stackGroups[stackKey] === UNDEFINED) { - stackGroups[stackKey] = columnCount++; - } - columnIndex = stackGroups[stackKey]; - } else if (otherOptions.grouping !== false) { // #1162 - columnIndex = columnCount++; - } - otherSeries.columnIndex = columnIndex; - } - }); - } - - var categoryWidth = mathMin( - mathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || xAxis.tickInterval || 1), // #2610 - xAxis.len // #1535 - ), - groupPadding = categoryWidth * options.groupPadding, - groupWidth = categoryWidth - 2 * groupPadding, - pointOffsetWidth = groupWidth / columnCount, - pointWidth = mathMin( - options.maxPointWidth || xAxis.len, - pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding)) - ), - pointPadding = (pointOffsetWidth - pointWidth) / 2, - colIndex = (series.columnIndex || 0) + (reversedXAxis ? 1 : 0), // #1251, #3737 - pointXOffset = pointPadding + (groupPadding + colIndex * - pointOffsetWidth - (categoryWidth / 2)) * - (reversedXAxis ? -1 : 1); - - // Save it for reading in linked series (Error bars particularly) - series.columnMetrics = { - width: pointWidth, - offset: pointXOffset - }; - return series.columnMetrics; - - }, - - /** - * Make the columns crisp. The edges are rounded to the nearest full pixel. - */ - crispCol: function (x, y, w, h) { - var chart = this.chart, - borderWidth = this.borderWidth, - xCrisp = -(borderWidth % 2 ? 0.5 : 0), - yCrisp = borderWidth % 2 ? 0.5 : 1, - right, - bottom, - fromTop; - - if (chart.inverted && chart.renderer.isVML) { - yCrisp += 1; - } - - // Horizontal. We need to first compute the exact right edge, then round it - // and compute the width from there. - right = Math.round(x + w) + xCrisp; - x = Math.round(x) + xCrisp; - w = right - x; - - // Vertical - bottom = Math.round(y + h) + yCrisp; - fromTop = mathAbs(y) <= 0.5 && bottom > 0.5; // #4504, #4656 - y = Math.round(y) + yCrisp; - h = bottom - y; - - // Top edges are exceptions - if (fromTop) { - y -= 1; - h += 1; - } - - return { - x: x, - y: y, - width: w, - height: h - }; - }, - - /** - * Translate each point to the plot area coordinate system and find shape positions - */ - translate: function () { - var series = this, - chart = series.chart, - options = series.options, - borderWidth = series.borderWidth = pick( - options.borderWidth, - series.closestPointRange * series.xAxis.transA < 2 ? 0 : 1 // #3635 - ), - yAxis = series.yAxis, - threshold = options.threshold, - translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold), - minPointLength = pick(options.minPointLength, 5), - metrics = series.getColumnMetrics(), - pointWidth = metrics.width, - seriesBarW = series.barW = mathMax(pointWidth, 1 + 2 * borderWidth), // postprocessed for border width - pointXOffset = series.pointXOffset = metrics.offset; - - if (chart.inverted) { - translatedThreshold -= 0.5; // #3355 - } - - // When the pointPadding is 0, we want the columns to be packed tightly, so we allow individual - // columns to have individual sizes. When pointPadding is greater, we strive for equal-width - // columns (#2694). - if (options.pointPadding) { - seriesBarW = mathCeil(seriesBarW); - } - - Series.prototype.translate.apply(series); - - // Record the new values - each(series.points, function (point) { - var yBottom = mathMin(pick(point.yBottom, translatedThreshold), 9e4), // #3575 - safeDistance = 999 + mathAbs(yBottom), - plotY = mathMin(mathMax(-safeDistance, point.plotY), yAxis.len + safeDistance), // Don't draw too far outside plot area (#1303, #2241, #4264) - barX = point.plotX + pointXOffset, - barW = seriesBarW, - barY = mathMin(plotY, yBottom), - up, - barH = mathMax(plotY, yBottom) - barY; - - // Handle options.minPointLength - if (mathAbs(barH) < minPointLength) { - if (minPointLength) { - barH = minPointLength; - up = (!yAxis.reversed && !point.negative) || (yAxis.reversed && point.negative); - barY = mathAbs(barY - translatedThreshold) > minPointLength ? // stacked - yBottom - minPointLength : // keep position - translatedThreshold - (up ? minPointLength : 0); // #1485, #4051 - } - } - - // Cache for access in polar - point.barX = barX; - point.pointWidth = pointWidth; - - // Fix the tooltip on center of grouped columns (#1216, #424, #3648) - point.tooltipPos = chart.inverted ? - [yAxis.len + yAxis.pos - chart.plotLeft - plotY, series.xAxis.len - barX - barW / 2, barH] : - [barX + barW / 2, plotY + yAxis.pos - chart.plotTop, barH]; - - // Register shape type and arguments to be used in drawPoints - point.shapeType = 'rect'; - point.shapeArgs = series.crispCol(barX, barY, barW, barH); - }); - - }, - - getSymbol: noop, - - /** - * Use a solid rectangle like the area series types - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - - /** - * Columns have no graph - */ - drawGraph: noop, - - /** - * Draw the columns. For bars, the series.group is rotated, so the same coordinates - * apply for columns and bars. This method is inherited by scatter series. - * - */ - drawPoints: function () { - var series = this, - chart = this.chart, - options = series.options, - renderer = chart.renderer, - animationLimit = options.animationLimit || 250, - shapeArgs, - pointAttr; - - // draw the columns - each(series.points, function (point) { - var plotY = point.plotY, - graphic = point.graphic, - borderAttr; - - if (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - shapeArgs = point.shapeArgs; - - borderAttr = defined(series.borderWidth) ? { - 'stroke-width': series.borderWidth - } : {}; - - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || series.pointAttr[NORMAL_STATE]; - - if (graphic) { // update - stop(graphic); - graphic.attr(borderAttr).attr(pointAttr)[chart.pointCount < animationLimit ? 'animate' : 'attr'](merge(shapeArgs)); // #4267 - - } else { - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .attr(borderAttr) - .attr(pointAttr) - .add(point.group || series.group) - .shadow(options.shadow, null, options.stacking && !options.borderRadius); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - }); - }, - - /** - * Animate the column heights one by one from zero - * @param {Boolean} init Whether to initialize the animation or run it - */ - animate: function (init) { - var series = this, - yAxis = this.yAxis, - options = series.options, - inverted = this.chart.inverted, - attr = {}, - translatedThreshold; - - if (hasSVG) { // VML is too slow anyway - if (init) { - attr.scaleY = 0.001; - translatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold))); - if (inverted) { - attr.translateX = translatedThreshold - yAxis.len; - } else { - attr.translateY = translatedThreshold; - } - series.group.attr(attr); - - } else { // run the animation - - attr.scaleY = 1; - attr[inverted ? 'translateX' : 'translateY'] = yAxis.pos; - series.group.animate(attr, series.options.animation); - - // delete this function to allow it only once - series.animate = null; - } - } - }, - - /** - * Remove this series from the chart - */ - remove: function () { - var series = this, - chart = series.chart; - - // column and bar series affects other series of the same type - // as they are either stacked or grouped - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - - Series.prototype.remove.apply(series, arguments); - } - }); - seriesTypes.column = ColumnSeries; - /** - * Set the default options for bar - */ - defaultPlotOptions.bar = merge(defaultPlotOptions.column); - /** - * The Bar series class - */ - var BarSeries = extendClass(ColumnSeries, { - type: 'bar', - inverted: true - }); - seriesTypes.bar = BarSeries; - - /** - * Set the default options for scatter - */ - defaultPlotOptions.scatter = merge(defaultSeriesOptions, { - lineWidth: 0, - marker: { - enabled: true // Overrides auto-enabling in line series (#3647) - }, - tooltip: { - headerFormat: '<span style="color:{point.color}">\u25CF</span> <span style="font-size: 10px;"> {series.name}</span><br/>', - pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>' - } - }); - - /** - * The scatter series class - */ - var ScatterSeries = extendClass(Series, { - type: 'scatter', - sorted: false, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: false, // #2342 - kdDimensions: 2, - drawGraph: function () { - if (this.options.lineWidth) { - Series.prototype.drawGraph.call(this); - } - } - }); - - seriesTypes.scatter = ScatterSeries; - - /** - * Set the default options for pie - */ - defaultPlotOptions.pie = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - borderWidth: 1, - center: [null, null], - clip: false, - colorByPoint: true, // always true for pies - dataLabels: { - // align: null, - // connectorWidth: 1, - // connectorColor: point.color, - // connectorPadding: 5, - distance: 30, - enabled: true, - formatter: function () { // #2945 - return this.y === null ? undefined : this.point.name; - }, - // softConnector: true, - x: 0 - // y: 0 - }, - ignoreHiddenPoint: true, - //innerSize: 0, - legendType: 'point', - marker: null, // point options are specified in the base options - size: null, - showInLegend: false, - slicedOffset: 10, - states: { - hover: { - brightness: 0.1, - shadow: false - } - }, - stickyTracking: false, - tooltip: { - followPointer: true - } - }); - - /** - * Extended point object for pies - */ - var PiePoint = extendClass(Point, { - /** - * Initiate the pie slice - */ - init: function () { - - Point.prototype.init.apply(this, arguments); - - var point = this, - toggleSlice; - - point.name = pick(point.name, 'Slice'); - - // add event listener for select - toggleSlice = function (e) { - point.slice(e.type === 'select'); - }; - addEvent(point, 'select', toggleSlice); - addEvent(point, 'unselect', toggleSlice); - - return point; - }, - - /** - * Toggle the visibility of the pie slice - * @param {Boolean} vis Whether to show the slice or not. If undefined, the - * visibility is toggled - */ - setVisible: function (vis, redraw) { - var point = this, - series = point.series, - chart = series.chart, - ignoreHiddenPoint = series.options.ignoreHiddenPoint; - - redraw = pick(redraw, ignoreHiddenPoint); - - if (vis !== point.visible) { - - // If called without an argument, toggle visibility - point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - // Show and hide associated elements. This is performed regardless of redraw or not, - // because chart.redraw only handles full series. - each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) { - if (point[key]) { - point[key][vis ? 'show' : 'hide'](true); - } - }); - - if (point.legendItem) { - chart.legend.colorizeItem(point, vis); - } - - // #4170, hide halo after hiding point - if (!vis && point.state === 'hover') { - point.setState(''); - } - - // Handle ignore hidden slices - if (ignoreHiddenPoint) { - series.isDirty = true; - } - - if (redraw) { - chart.redraw(); - } - } - }, - - /** - * Set or toggle whether the slice is cut out from the pie - * @param {Boolean} sliced When undefined, the slice state is toggled - * @param {Boolean} redraw Whether to redraw the chart. True by default. - */ - slice: function (sliced, redraw, animation) { - var point = this, - series = point.series, - chart = series.chart, - translation; - - setAnimation(animation, chart); - - // redraw is true by default - redraw = pick(redraw, true); - - // if called without an argument, toggle - point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - translation = sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - point.graphic.animate(translation); - - if (point.shadowGroup) { - point.shadowGroup.animate(translation); - } - - }, - - haloPath: function (size) { - var shapeArgs = this.shapeArgs, - chart = this.series.chart; - - return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(chart.plotLeft + shapeArgs.x, chart.plotTop + shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, { - innerR: this.shapeArgs.r, - start: shapeArgs.start, - end: shapeArgs.end - }); - } - }); - - /** - * The Pie series class - */ - var PieSeries = { - type: 'pie', - isCartesian: false, - pointClass: PiePoint, - requireSorting: false, - directTouch: true, - noSharedTooltip: true, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color' - }, - - /** - * Animate the pies in - */ - animate: function (init) { - var series = this, - points = series.points, - startAngleRad = series.startAngleRad; - - if (!init) { - each(points, function (point) { - var graphic = point.graphic, - args = point.shapeArgs; - - if (graphic) { - // start values - graphic.attr({ - r: point.startR || (series.center[3] / 2), // animate from inner radius (#779) - start: startAngleRad, - end: startAngleRad - }); - - // animate - graphic.animate({ - r: args.r, - start: args.start, - end: args.end - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - /** - * Recompute total chart sum and update percentages of points. - */ - updateTotals: function () { - var i, - total = 0, - points = this.points, - len = points.length, - point, - ignoreHiddenPoint = this.options.ignoreHiddenPoint; - - // Get the total sum - for (i = 0; i < len; i++) { - point = points[i]; - total += (ignoreHiddenPoint && !point.visible) ? 0 : point.y; - } - this.total = total; - - // Set each point's properties - for (i = 0; i < len; i++) { - point = points[i]; - point.percentage = (total > 0 && (point.visible || !ignoreHiddenPoint)) ? point.y / total * 100 : 0; - point.total = total; - } - }, - - /** - * Extend the generatePoints method by adding total and percentage properties to each point - */ - generatePoints: function () { - Series.prototype.generatePoints.call(this); - this.updateTotals(); - }, - - /** - * Do translation for pie slices - */ - translate: function (positions) { - this.generatePoints(); - - var series = this, - cumulative = 0, - precision = 1000, // issue #172 - options = series.options, - slicedOffset = options.slicedOffset, - connectorOffset = slicedOffset + options.borderWidth, - start, - end, - angle, - startAngle = options.startAngle || 0, - startAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90), - endAngleRad = series.endAngleRad = mathPI / 180 * ((pick(options.endAngle, startAngle + 360)) - 90), - circ = endAngleRad - startAngleRad, //2 * mathPI, - points = series.points, - radiusX, // the x component of the radius vector for a given point - radiusY, - labelDistance = options.dataLabels.distance, - ignoreHiddenPoint = options.ignoreHiddenPoint, - i, - len = points.length, - point; - - // Get positions - either an integer or a percentage string must be given. - // If positions are passed as a parameter, we're in a recursive loop for adjusting - // space for data labels. - if (!positions) { - series.center = positions = series.getCenter(); - } - - // utility for getting the x value from a given y, used for anticollision logic in data labels - series.getX = function (y, left) { - - angle = math.asin(mathMin((y - positions[1]) / (positions[2] / 2 + labelDistance), 1)); - - return positions[0] + - (left ? -1 : 1) * - (mathCos(angle) * (positions[2] / 2 + labelDistance)); - }; - - // Calculate the geometry for each point - for (i = 0; i < len; i++) { - - point = points[i]; - - // set start and end angle - start = startAngleRad + (cumulative * circ); - if (!ignoreHiddenPoint || point.visible) { - cumulative += point.percentage / 100; - } - end = startAngleRad + (cumulative * circ); - - // set the shape - point.shapeType = 'arc'; - point.shapeArgs = { - x: positions[0], - y: positions[1], - r: positions[2] / 2, - innerR: positions[3] / 2, - start: mathRound(start * precision) / precision, - end: mathRound(end * precision) / precision - }; - - // The angle must stay within -90 and 270 (#2645) - angle = (end + start) / 2; - if (angle > 1.5 * mathPI) { - angle -= 2 * mathPI; - } else if (angle < -mathPI / 2) { - angle += 2 * mathPI; - } - - // Center for the sliced out slice - point.slicedTranslation = { - translateX: mathRound(mathCos(angle) * slicedOffset), - translateY: mathRound(mathSin(angle) * slicedOffset) - }; - - // set the anchor point for tooltips - radiusX = mathCos(angle) * positions[2] / 2; - radiusY = mathSin(angle) * positions[2] / 2; - point.tooltipPos = [ - positions[0] + radiusX * 0.7, - positions[1] + radiusY * 0.7 - ]; - - point.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0; - point.angle = angle; - - // set the anchor point for data labels - connectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678 - point.labelPos = [ - positions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector - positions[1] + radiusY + mathSin(angle) * labelDistance, // a/a - positions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie - positions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a - positions[0] + radiusX, // landing point for connector - positions[1] + radiusY, // a/a - labelDistance < 0 ? // alignment - 'center' : - point.half ? 'right' : 'left', // alignment - angle // center angle - ]; - - } - }, - - drawGraph: null, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, - chart = series.chart, - renderer = chart.renderer, - groupTranslation, - //center, - graphic, - //group, - shadow = series.options.shadow, - shadowGroup, - pointAttr, - shapeArgs, - attr; - - if (shadow && !series.shadowGroup) { - series.shadowGroup = renderer.g('shadow') - .add(series.group); - } - - // draw the slices - each(series.points, function (point) { - if (point.y !== null) { - graphic = point.graphic; - shapeArgs = point.shapeArgs; - shadowGroup = point.shadowGroup; - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]; - if (!pointAttr.stroke) { - pointAttr.stroke = pointAttr.fill; - } - - // put the shadow behind all points - if (shadow && !shadowGroup) { - shadowGroup = point.shadowGroup = renderer.g('shadow') - .add(series.shadowGroup); - } - - // if the point is sliced, use special translation, else use plot area traslation - groupTranslation = point.sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - //group.translate(groupTranslation[0], groupTranslation[1]); - if (shadowGroup) { - shadowGroup.attr(groupTranslation); - } - - // draw the slice - if (graphic) { - graphic - .setRadialReference(series.center) - .attr(pointAttr) - .animate(extend(shapeArgs, groupTranslation)); - } else { - attr = { 'stroke-linejoin': 'round' }; - if (!point.visible) { - attr.visibility = 'hidden'; - } - - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .setRadialReference(series.center) - .attr(pointAttr) - .attr(attr) - .attr(groupTranslation) - .add(series.group) - .shadow(shadow, shadowGroup); - } - } - }); - - }, - - - searchPoint: noop, - - /** - * Utility for sorting data labels - */ - sortByAngle: function (points, sign) { - points.sort(function (a, b) { - return a.angle !== undefined && (b.angle - a.angle) * sign; - }); - }, - - /** - * Use a simple symbol from LegendSymbolMixin - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - /** - * Use the getCenter method from drawLegendSymbol - */ - getCenter: CenteredSeriesMixin.getCenter, - - /** - * Pies don't have point marker symbols - */ - getSymbol: noop - - }; - PieSeries = extendClass(Series, PieSeries); - seriesTypes.pie = PieSeries; - - /** - * Draw the data labels - */ - Series.prototype.drawDataLabels = function () { - - var series = this, - seriesOptions = series.options, - cursor = seriesOptions.cursor, - options = seriesOptions.dataLabels, - points = series.points, - pointOptions, - generalOptions, - hasRendered = series.hasRendered || 0, - str, - dataLabelsGroup, - renderer = series.chart.renderer; - - if (options.enabled || series._hasPointLabels) { - - // Process default alignment of data labels for columns - if (series.dlProcessOptions) { - series.dlProcessOptions(options); - } - - // Create a separate group for the data labels to avoid rotation - dataLabelsGroup = series.plotGroup( - 'dataLabelsGroup', - 'data-labels', - options.defer ? HIDDEN : VISIBLE, - options.zIndex || 6 - ); - - if (pick(options.defer, true)) { - dataLabelsGroup.attr({ opacity: +hasRendered }); // #3300 - if (!hasRendered) { - addEvent(series, 'afterAnimate', function () { - if (series.visible) { // #3023, #3024 - dataLabelsGroup.show(); - } - dataLabelsGroup[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, { duration: 200 }); - }); - } - } - - // Make the labels for each point - generalOptions = options; - each(points, function (point) { - - var enabled, - dataLabel = point.dataLabel, - labelConfig, - attr, - name, - rotation, - connector = point.connector, - isNew = true, - style, - moreStyle = {}; - - // Determine if each data label is enabled - pointOptions = point.dlOptions || (point.options && point.options.dataLabels); // dlOptions is used in treemaps - enabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled) && point.y !== null; // #2282, #4641 - - - // If the point is outside the plot area, destroy it. #678, #820 - if (dataLabel && !enabled) { - point.dataLabel = dataLabel.destroy(); - - // Individual labels are disabled if the are explicitly disabled - // in the point options, or if they fall outside the plot area. - } else if (enabled) { - - // Create individual options structure that can be extended without - // affecting others - options = merge(generalOptions, pointOptions); - style = options.style; - - rotation = options.rotation; - - // Get the string - labelConfig = point.getLabelConfig(); - str = options.format ? - format(options.format, labelConfig) : - options.formatter.call(labelConfig, options); - - // Determine the color - style.color = pick(options.color, style.color, series.color, 'black'); - - - // update existing label - if (dataLabel) { - - if (defined(str)) { - dataLabel - .attr({ - text: str - }); - isNew = false; - - } else { // #1437 - the label is shown conditionally - point.dataLabel = dataLabel = dataLabel.destroy(); - if (connector) { - point.connector = connector.destroy(); - } - } - - // create new label - } else if (defined(str)) { - attr = { - //align: align, - fill: options.backgroundColor, - stroke: options.borderColor, - 'stroke-width': options.borderWidth, - r: options.borderRadius || 0, - rotation: rotation, - padding: options.padding, - zIndex: 1 - }; - - // Get automated contrast color - if (style.color === 'contrast') { - moreStyle.color = options.inside || options.distance < 0 || !!seriesOptions.stacking ? - renderer.getContrast(point.color || series.color) : - '#000000'; - } - if (cursor) { - moreStyle.cursor = cursor; - } - - - // Remove unused attributes (#947) - for (name in attr) { - if (attr[name] === UNDEFINED) { - delete attr[name]; - } - } - - dataLabel = point.dataLabel = renderer[rotation ? 'text' : 'label']( // labels don't support rotation - str, - 0, - -9999, - options.shape, - null, - null, - options.useHTML - ) - .attr(attr) - .css(extend(style, moreStyle)) - .add(dataLabelsGroup) - .shadow(options.shadow); - - } - - if (dataLabel) { - // Now the data label is created and placed at 0,0, so we need to align it - series.alignDataLabel(point, dataLabel, options, null, isNew); - } - } - }); - } - }; - - /** - * Align each individual data label - */ - Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - plotX = pick(point.plotX, -9999), - plotY = pick(point.plotY, -9999), - bBox = dataLabel.getBBox(), - baseline = chart.renderer.fontMetrics(options.style.fontSize).b, - rotCorr, // rotation correction - // Math.round for rounding errors (#2683), alignTo to allow column labels (#2700) - visible = this.visible && (point.series.forceDL || chart.isInsidePlot(plotX, mathRound(plotY), inverted) || - (alignTo && chart.isInsidePlot(plotX, inverted ? alignTo.x + 1 : alignTo.y + alignTo.height - 1, inverted))), - alignAttr; // the final position; - - if (visible) { - - // The alignment box is a singular point - alignTo = extend({ - x: inverted ? chart.plotWidth - plotY : plotX, - y: mathRound(inverted ? chart.plotHeight - plotX : plotY), - width: 0, - height: 0 - }, alignTo); - - // Add the text size for alignment calculation - extend(options, { - width: bBox.width, - height: bBox.height - }); - - // Allow a hook for changing alignment in the last moment, then do the alignment - if (options.rotation) { // Fancy box alignment isn't supported for rotated text - rotCorr = chart.renderer.rotCorr(baseline, options.rotation); // #3723 - dataLabel[isNew ? 'attr' : 'animate']({ - x: alignTo.x + options.x + alignTo.width / 2 + rotCorr.x, - y: alignTo.y + options.y + alignTo.height / 2 - }) - .attr({ // #3003 - align: options.align - }); - } else { - dataLabel.align(options, null, alignTo); - alignAttr = dataLabel.alignAttr; - - // Handle justify or crop - if (pick(options.overflow, 'justify') === 'justify') { - this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew); - - } else if (pick(options.crop, true)) { - // Now check that the data label is within the plot area - visible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height); - - } - - // When we're using a shape, make it possible with a connector or an arrow pointing to thie point - if (options.shape) { - dataLabel.attr({ - anchorX: point.plotX, - anchorY: point.plotY - }); - } - - } - } - - // Show or hide based on the final aligned position - if (!visible) { - stop(dataLabel); - dataLabel.attr({ y: -9999 }); - dataLabel.placed = false; // don't animate back in - } - - }; - - /** - * If data labels fall partly outside the plot area, align them back in, in a way that - * doesn't hide the point. - */ - Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBox, alignTo, isNew) { - var chart = this.chart, - align = options.align, - verticalAlign = options.verticalAlign, - off, - justified, - padding = dataLabel.box ? 0 : (dataLabel.padding || 0); - - // Off left - off = alignAttr.x + padding; - if (off < 0) { - if (align === 'right') { - options.align = 'left'; - } else { - options.x = -off; - } - justified = true; - } - - // Off right - off = alignAttr.x + bBox.width - padding; - if (off > chart.plotWidth) { - if (align === 'left') { - options.align = 'right'; - } else { - options.x = chart.plotWidth - off; - } - justified = true; - } - - // Off top - off = alignAttr.y + padding; - if (off < 0) { - if (verticalAlign === 'bottom') { - options.verticalAlign = 'top'; - } else { - options.y = -off; - } - justified = true; - } - - // Off bottom - off = alignAttr.y + bBox.height - padding; - if (off > chart.plotHeight) { - if (verticalAlign === 'top') { - options.verticalAlign = 'bottom'; - } else { - options.y = chart.plotHeight - off; - } - justified = true; - } - - if (justified) { - dataLabel.placed = !isNew; - dataLabel.align(options, null, alignTo); - } - }; - - /** - * Override the base drawDataLabels method by pie specific functionality - */ - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawDataLabels = function () { - var series = this, - data = series.data, - point, - chart = series.chart, - options = series.options.dataLabels, - connectorPadding = pick(options.connectorPadding, 10), - connectorWidth = pick(options.connectorWidth, 1), - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - connector, - connectorPath, - softConnector = pick(options.softConnector, true), - distanceOption = options.distance, - seriesCenter = series.center, - radius = seriesCenter[2] / 2, - centerY = seriesCenter[1], - outside = distanceOption > 0, - dataLabel, - dataLabelWidth, - labelPos, - labelHeight, - halves = [// divide the points into right and left halves for anti collision - [], // right - [] // left - ], - x, - y, - visibility, - rankArr, - i, - j, - overflow = [0, 0, 0, 0], // top, right, bottom, left - sort = function (a, b) { - return b.y - a.y; - }; - - // get out if not enabled - if (!series.visible || (!options.enabled && !series._hasPointLabels)) { - return; - } - - // run parent method - Series.prototype.drawDataLabels.apply(series); - - // arrange points for detection collision - each(data, function (point) { - if (point.dataLabel && point.visible) { // #407, #2510 - halves[point.half].push(point); - } - }); - - /* Loop over the points in each half, starting from the top and bottom - * of the pie to detect overlapping labels. - */ - i = 2; - while (i--) { - - var slots = [], - slotsLength, - usedSlots = [], - points = halves[i], - pos, - bottom, - length = points.length, - slotIndex; - - if (!length) { - continue; - } - - // Sort by angle - series.sortByAngle(points, i - 0.5); - - // Assume equal label heights on either hemisphere (#2630) - j = labelHeight = 0; - while (!labelHeight && points[j]) { // #1569 - labelHeight = points[j] && points[j].dataLabel && (points[j].dataLabel.getBBox().height || 21); // 21 is for #968 - j++; - } - - // Only do anti-collision when we are outside the pie and have connectors (#856) - if (distanceOption > 0) { - - // Build the slots - bottom = mathMin(centerY + radius + distanceOption, chart.plotHeight); - for (pos = mathMax(0, centerY - radius - distanceOption); pos <= bottom; pos += labelHeight) { - slots.push(pos); - } - slotsLength = slots.length; - - - /* Visualize the slots - if (!series.slotElements) { - series.slotElements = []; - } - if (i === 1) { - series.slotElements.forEach(function (elem) { - elem.destroy(); - }); - series.slotElements.length = 0; - } - - slots.forEach(function (pos, no) { - var slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0), - slotY = pos + chart.plotTop; - - if (!isNaN(slotX)) { - series.slotElements.push(chart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1) - .attr({ - 'stroke-width': 1, - stroke: 'silver', - fill: 'rgba(0,0,255,0.1)' - }) - .add()); - series.slotElements.push(chart.renderer.text('Slot '+ no, slotX, slotY + 4) - .attr({ - fill: 'silver' - }).add()); - } - }); - // */ - - // if there are more values than available slots, remove lowest values - if (length > slotsLength) { - // create an array for sorting and ranking the points within each quarter - rankArr = [].concat(points); - rankArr.sort(sort); - j = length; - while (j--) { - rankArr[j].rank = j; - } - j = length; - while (j--) { - if (points[j].rank >= slotsLength) { - points.splice(j, 1); - } - } - length = points.length; - } - - // The label goes to the nearest open slot, but not closer to the edge than - // the label's index. - for (j = 0; j < length; j++) { - - point = points[j]; - labelPos = point.labelPos; - - var closest = 9999, - distance, - slotI; - - // find the closest slot index - for (slotI = 0; slotI < slotsLength; slotI++) { - distance = mathAbs(slots[slotI] - labelPos[1]); - if (distance < closest) { - closest = distance; - slotIndex = slotI; - } - } - - // if that slot index is closer to the edges of the slots, move it - // to the closest appropriate slot - if (slotIndex < j && slots[j] !== null) { // cluster at the top - slotIndex = j; - } else if (slotsLength < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom - slotIndex = slotsLength - length + j; - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } else { - // Slot is taken, find next free slot below. In the next run, the next slice will find the - // slot above these, because it is the closest one - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } - - usedSlots.push({ i: slotIndex, y: slots[slotIndex] }); - slots[slotIndex] = null; // mark as taken - } - // sort them in order to fill in from the top - usedSlots.sort(sort); - } - - // now the used slots are sorted, fill them up sequentially - for (j = 0; j < length; j++) { - - var slot, naturalY; - - point = points[j]; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - visibility = point.visible === false ? HIDDEN : 'inherit'; - naturalY = labelPos[1]; - - if (distanceOption > 0) { - slot = usedSlots.pop(); - slotIndex = slot.i; - - // if the slot next to currrent slot is free, the y value is allowed - // to fall back to the natural position - y = slot.y; - if ((naturalY > y && slots[slotIndex + 1] !== null) || - (naturalY < y && slots[slotIndex - 1] !== null)) { - y = mathMin(mathMax(0, naturalY), chart.plotHeight); - } - - } else { - y = naturalY; - } - - // get the x - use the natural x position for first and last slot, to prevent the top - // and botton slice connectors from touching each other on either side - x = options.justify ? - seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) : - series.getX(y === centerY - radius - distanceOption || y === centerY + radius + distanceOption ? naturalY : y, i); - - - // Record the placement and visibility - dataLabel._attr = { - visibility: visibility, - align: labelPos[6] - }; - dataLabel._pos = { - x: x + options.x + - ({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0), - y: y + options.y - 10 // 10 is for the baseline (label vs text) - }; - dataLabel.connX = x; - dataLabel.connY = y; - - - // Detect overflowing data labels - if (this.options.size === null) { - dataLabelWidth = dataLabel.width; - // Overflow left - if (x - dataLabelWidth < connectorPadding) { - overflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]); - - // Overflow right - } else if (x + dataLabelWidth > plotWidth - connectorPadding) { - overflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]); - } - - // Overflow top - if (y - labelHeight / 2 < 0) { - overflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]); - - // Overflow left - } else if (y + labelHeight / 2 > plotHeight) { - overflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]); - } - } - } // for each point - } // for each half - - // Do not apply the final placement and draw the connectors until we have verified - // that labels are not spilling over. - if (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) { - - // Place the labels in the final position - this.placeDataLabels(); - - // Draw the connectors - if (outside && connectorWidth) { - each(this.points, function (point) { - connector = point.connector; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - - if (dataLabel && dataLabel._pos && point.visible) { - visibility = dataLabel._attr.visibility; - x = dataLabel.connX; - y = dataLabel.connY; - connectorPath = softConnector ? [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - 'C', - x, y, // first break, next to the label - 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ] : [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - L, - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ]; - - if (connector) { - connector.animate({ d: connectorPath }); - connector.attr('visibility', visibility); - - } else { - point.connector = connector = series.chart.renderer.path(connectorPath).attr({ - 'stroke-width': connectorWidth, - stroke: options.connectorColor || point.color || '#606060', - visibility: visibility - //zIndex: 0 // #2722 (reversed) - }) - .add(series.dataLabelsGroup); - } - } else if (connector) { - point.connector = connector.destroy(); - } - }); - } - } - }; - /** - * Perform the final placement of the data labels after we have verified that they - * fall within the plot area. - */ - seriesTypes.pie.prototype.placeDataLabels = function () { - each(this.points, function (point) { - var dataLabel = point.dataLabel, - _pos; - - if (dataLabel && point.visible) { - _pos = dataLabel._pos; - if (_pos) { - dataLabel.attr(dataLabel._attr); - dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); - dataLabel.moved = true; - } else if (dataLabel) { - dataLabel.attr({ y: -9999 }); - } - } - }); - }; - - seriesTypes.pie.prototype.alignDataLabel = noop; - - /** - * Verify whether the data labels are allowed to draw, or we should run more translation and data - * label positioning to keep them inside the plot area. Returns true when data labels are ready - * to draw. - */ - seriesTypes.pie.prototype.verifyDataLabelOverflow = function (overflow) { - - var center = this.center, - options = this.options, - centerOption = options.center, - minSize = options.minSize || 80, - newSize = minSize, - ret; - - // Handle horizontal size and center - if (centerOption[0] !== null) { // Fixed center - newSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize); - - } else { // Auto center - newSize = mathMax( - center[2] - overflow[1] - overflow[3], // horizontal overflow - minSize - ); - center[0] += (overflow[3] - overflow[1]) / 2; // horizontal center - } - - // Handle vertical size and center - if (centerOption[1] !== null) { // Fixed center - newSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize); - - } else { // Auto center - newSize = mathMax( - mathMin( - newSize, - center[2] - overflow[0] - overflow[2] // vertical overflow - ), - minSize - ); - center[1] += (overflow[0] - overflow[2]) / 2; // vertical center - } - - // If the size must be decreased, we need to run translate and drawDataLabels again - if (newSize < center[2]) { - center[2] = newSize; - center[3] = Math.min(relativeLength(options.innerSize || 0, newSize), newSize); // #3632 - this.translate(center); - each(this.points, function (point) { - if (point.dataLabel) { - point.dataLabel._pos = null; // reset - } - }); - - if (this.drawDataLabels) { - this.drawDataLabels(); - } - // Else, return true to indicate that the pie and its labels is within the plot area - } else { - ret = true; - } - return ret; - }; - } - - if (seriesTypes.column) { - - /** - * Override the basic data label alignment by adjusting for the position of the column - */ - seriesTypes.column.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var inverted = this.chart.inverted, - series = point.series, - dlBox = point.dlBox || point.shapeArgs, // data label box for alignment - below = pick(point.below, point.plotY > pick(this.translatedThreshold, series.yAxis.len)), // point.below is used in range series - inside = pick(options.inside, !!this.options.stacking), // draw it inside the box? - overshoot; - - // Align to the column itself, or the top of it - if (dlBox) { // Area range uses this method but not alignTo - alignTo = merge(dlBox); - - if (alignTo.y < 0) { - alignTo.height += alignTo.y; - alignTo.y = 0; - } - overshoot = alignTo.y + alignTo.height - series.yAxis.len; - if (overshoot > 0) { - alignTo.height -= overshoot; - } - - if (inverted) { - alignTo = { - x: series.yAxis.len - alignTo.y - alignTo.height, - y: series.xAxis.len - alignTo.x - alignTo.width, - width: alignTo.height, - height: alignTo.width - }; - } - - // Compute the alignment box - if (!inside) { - if (inverted) { - alignTo.x += below ? 0 : alignTo.width; - alignTo.width = 0; - } else { - alignTo.y += below ? alignTo.height : 0; - alignTo.height = 0; - } - } - } - - - // When alignment is undefined (typically columns and bars), display the individual - // point below or above the point depending on the threshold - options.align = pick( - options.align, - !inverted || inside ? 'center' : below ? 'right' : 'left' - ); - options.verticalAlign = pick( - options.verticalAlign, - inverted || inside ? 'middle' : below ? 'top' : 'bottom' - ); - - // Call the parent method - Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - }; - } - - - - /** - * Highcharts module to hide overlapping data labels. This module is included in Highcharts. - */ - (function (H) { - var Chart = H.Chart, - each = H.each, - pick = H.pick, - addEvent = H.addEvent; - - // Collect potensial overlapping data labels. Stack labels probably don't need to be - // considered because they are usually accompanied by data labels that lie inside the columns. - Chart.prototype.callbacks.push(function (chart) { - function collectAndHide() { - var labels = []; - - each(chart.series, function (series) { - var dlOptions = series.options.dataLabels, - collections = series.dataLabelCollections || ['dataLabel']; // Range series have two collections - if ((dlOptions.enabled || series._hasPointLabels) && !dlOptions.allowOverlap && series.visible) { // #3866 - each(collections, function (coll) { - each(series.points, function (point) { - if (point[coll]) { - point[coll].labelrank = pick(point.labelrank, point.shapeArgs && point.shapeArgs.height); // #4118 - labels.push(point[coll]); - } - }); - }); - } - }); - chart.hideOverlappingLabels(labels); - } - - // Do it now ... - collectAndHide(); - - // ... and after each chart redraw - addEvent(chart, 'redraw', collectAndHide); - - }); - - /** - * Hide overlapping labels. Labels are moved and faded in and out on zoom to provide a smooth - * visual imression. - */ - Chart.prototype.hideOverlappingLabels = function (labels) { - - var len = labels.length, - label, - i, - j, - label1, - label2, - isIntersecting, - pos1, - pos2, - padding, - intersectRect = function (x1, y1, w1, h1, x2, y2, w2, h2) { - return !( - x2 > x1 + w1 || - x2 + w2 < x1 || - y2 > y1 + h1 || - y2 + h2 < y1 - ); - }; - - // Mark with initial opacity - for (i = 0; i < len; i++) { - label = labels[i]; - if (label) { - label.oldOpacity = label.opacity; - label.newOpacity = 1; - } - } - - // Prevent a situation in a gradually rising slope, that each label - // will hide the previous one because the previous one always has - // lower rank. - labels.sort(function (a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - - // Detect overlapping labels - for (i = 0; i < len; i++) { - label1 = labels[i]; - - for (j = i + 1; j < len; ++j) { - label2 = labels[j]; - if (label1 && label2 && label1.placed && label2.placed && label1.newOpacity !== 0 && label2.newOpacity !== 0) { - pos1 = label1.alignAttr; - pos2 = label2.alignAttr; - padding = 2 * (label1.box ? 0 : label1.padding); // Substract the padding if no background or border (#4333) - isIntersecting = intersectRect( - pos1.x, - pos1.y, - label1.width - padding, - label1.height - padding, - pos2.x, - pos2.y, - label2.width - padding, - label2.height - padding - ); - - if (isIntersecting) { - (label1.labelrank < label2.labelrank ? label1 : label2).newOpacity = 0; - } - } - } - } - - // Hide or show - each(labels, function (label) { - var complete, - newOpacity; - - if (label) { - newOpacity = label.newOpacity; - - if (label.oldOpacity !== newOpacity && label.placed) { - - // Make sure the label is completely hidden to avoid catching clicks (#4362) - if (newOpacity) { - label.show(true); - } else { - complete = function () { - label.hide(); - }; - } - - // Animate or set the opacity - label.alignAttr.opacity = newOpacity; - label[label.isOld ? 'animate' : 'attr'](label.alignAttr, null, complete); - - } - label.isOld = true; - } - }); - }; - }(Highcharts)); - /** - * TrackerMixin for points and graphs - */ - - var TrackerMixin = Highcharts.TrackerMixin = { - - drawTrackerPoint: function () { - var series = this, - chart = series.chart, - pointer = chart.pointer, - cursor = series.options.cursor, - css = cursor && { cursor: cursor }, - onMouseOver = function (e) { - var target = e.target, - point; - - while (target && !point) { - point = target.point; - target = target.parentNode; - } - - if (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart - point.onMouseOver(e); - } - }; - - // Add reference to the point - each(series.points, function (point) { - if (point.graphic) { - point.graphic.element.point = point; - } - if (point.dataLabel) { - point.dataLabel.element.point = point; - } - }); - - // Add the event listeners, we need to do this only once - if (!series._hasTracking) { - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key] - .addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { - pointer.onTrackerMouseOut(e); - }) - .css(css); - if (hasTouch) { - series[key].on('touchstart', onMouseOver); - } - } - }); - series._hasTracking = true; - } - }, - - /** - * Draw the tracker object that sits above all data labels and markers to - * track mouse events on the graph or points. For the line type charts - * the tracker uses the same graphPath, but with a greater stroke width - * for better control. - */ - drawTrackerGraph: function () { - var series = this, - options = series.options, - trackByArea = options.trackByArea, - trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), - trackerPathLength = trackerPath.length, - chart = series.chart, - pointer = chart.pointer, - renderer = chart.renderer, - snap = chart.options.tooltip.snap, - tracker = series.tracker, - cursor = options.cursor, - css = cursor && { cursor: cursor }, - singlePoints = series.singlePoints, - singlePoint, - i, - onMouseOver = function () { - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - }, - /* - * Empirical lowest possible opacities for TRACKER_FILL for an element to stay invisible but clickable - * IE6: 0.002 - * IE7: 0.002 - * IE8: 0.002 - * IE9: 0.00000000001 (unlimited) - * IE10: 0.0001 (exporting only) - * FF: 0.00000000001 (unlimited) - * Chrome: 0.000001 - * Safari: 0.000001 - * Opera: 0.00000000001 (unlimited) - */ - TRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')'; - - // Extend end points. A better way would be to use round linecaps, - // but those are not clickable in VML. - if (trackerPathLength && !trackByArea) { - i = trackerPathLength + 1; - while (i--) { - if (trackerPath[i] === M) { // extend left side - trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); - } - if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side - trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); - } - } - } - - // handle single points - for (i = 0; i < singlePoints.length; i++) { - singlePoint = singlePoints[i]; - trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, - L, singlePoint.plotX + snap, singlePoint.plotY); - } - - // draw the tracker - if (tracker) { - tracker.attr({ d: trackerPath }); - } else { // create - - series.tracker = renderer.path(trackerPath) - .attr({ - 'stroke-linejoin': 'round', // #1225 - visibility: series.visible ? VISIBLE : HIDDEN, - stroke: TRACKER_FILL, - fill: trackByArea ? TRACKER_FILL : NONE, - 'stroke-width': options.lineWidth + (trackByArea ? 0 : 2 * snap), - zIndex: 2 - }) - .add(series.group); - - // The tracker is added to the series group, which is clipped, but is covered - // by the marker group. So the marker group also needs to capture events. - each([series.tracker, series.markerGroup], function (tracker) { - tracker.addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { - pointer.onTrackerMouseOut(e); - }) - .css(css); - - if (hasTouch) { - tracker.on('touchstart', onMouseOver); - } - }); - } - } - }; - /* End TrackerMixin */ - - - /** - * Add tracking event listener to the series group, so the point graphics - * themselves act as trackers - */ - - if (seriesTypes.column) { - ColumnSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.scatter) { - ScatterSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - /* - * Extend Legend for item events - */ - extend(Legend.prototype, { - - setItemEvents: function (item, legendItem, useHTML, itemStyle, itemHiddenStyle) { - var legend = this; - // Set the events on the item group, or in case of useHTML, the item itself (#1249) - (useHTML ? legendItem : item.legendGroup).on('mouseover', function () { - item.setState(HOVER_STATE); - legendItem.css(legend.options.itemHoverStyle); - }) - .on('mouseout', function () { - legendItem.css(item.visible ? itemStyle : itemHiddenStyle); - item.setState(); - }) - .on('click', function (event) { - var strLegendItemClick = 'legendItemClick', - fnLegendItemClick = function () { - if (item.setVisible) { - item.setVisible(); - } - }; - - // Pass over the click/touch event. #4. - event = { - browserEvent: event - }; - - // click the name or symbol - if (item.firePointEvent) { // point - item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); - } else { - fireEvent(item, strLegendItemClick, event, fnLegendItemClick); - } - }); - }, - - createCheckboxForItem: function (item) { - var legend = this; - - item.checkbox = createElement('input', { - type: 'checkbox', - checked: item.selected, - defaultChecked: item.selected // required by IE7 - }, legend.options.itemCheckboxStyle, legend.chart.container); - - addEvent(item.checkbox, 'click', function (event) { - var target = event.target; - fireEvent( - item.series || item, - 'checkboxClick', - { // #3712 - checked: target.checked, - item: item - }, - function () { - item.select(); - } - ); - }); - } - }); - - /* - * Add pointer cursor to legend itemstyle in defaultOptions - */ - defaultOptions.legend.itemStyle.cursor = 'pointer'; - - - /* - * Extend the Chart object with interaction - */ - - extend(Chart.prototype, { - /** - * Display the zoom button - */ - showResetZoom: function () { - var chart = this, - lang = defaultOptions.lang, - btnOptions = chart.options.chart.resetZoomButton, - theme = btnOptions.theme, - states = theme.states, - alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; - - function zoomOut() { - chart.zoomOut(); - } - - this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, zoomOut, theme, states && states.hover) - .attr({ - align: btnOptions.position.align, - title: lang.resetZoomTitle - }) - .add() - .align(btnOptions.position, false, alignTo); - - }, - - /** - * Zoom out to 1:1 - */ - zoomOut: function () { - var chart = this; - fireEvent(chart, 'selection', { resetSelection: true }, function () { - chart.zoom(); - }); - }, - - /** - * Zoom into a given portion of the chart given by axis coordinates - * @param {Object} event - */ - zoom: function (event) { - var chart = this, - hasZoomed, - pointer = chart.pointer, - displayButton = false, - resetZoomButton; - - // If zoom is called with no arguments, reset the axes - if (!event || event.resetSelection) { - each(chart.axes, function (axis) { - hasZoomed = axis.zoom(); - }); - } else { // else, zoom in on all axes - each(event.xAxis.concat(event.yAxis), function (axisData) { - var axis = axisData.axis, - isXAxis = axis.isXAxis; - - // don't zoom more than minRange - if (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) { - hasZoomed = axis.zoom(axisData.min, axisData.max); - if (axis.displayBtn) { - displayButton = true; - } - } - }); - } - - // Show or hide the Reset zoom button - resetZoomButton = chart.resetZoomButton; - if (displayButton && !resetZoomButton) { - chart.showResetZoom(); - } else if (!displayButton && isObject(resetZoomButton)) { - chart.resetZoomButton = resetZoomButton.destroy(); - } - - - // Redraw - if (hasZoomed) { - chart.redraw( - pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation - ); - } - }, - - /** - * Pan the chart by dragging the mouse across the pane. This function is called - * on mouse move, and the distance to pan is computed from chartX compared to - * the first chartX position in the dragging operation. - */ - pan: function (e, panning) { - - var chart = this, - hoverPoints = chart.hoverPoints, - doRedraw; - - // remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps - var mousePos = e[isX ? 'chartX' : 'chartY'], - axis = chart[isX ? 'xAxis' : 'yAxis'][0], - startPos = chart[isX ? 'mouseDownX' : 'mouseDownY'], - halfPointRange = (axis.pointRange || 0) / 2, - extremes = axis.getExtremes(), - newMin = axis.toValue(startPos - mousePos, true) + halfPointRange, - newMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange, - goingLeft = startPos > mousePos; // #3613 - - if (axis.series.length && - (goingLeft || newMin > mathMin(extremes.dataMin, extremes.min)) && - (!goingLeft || newMax < mathMax(extremes.dataMax, extremes.max))) { - axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' }); - doRedraw = true; - } - - chart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run - }); - - if (doRedraw) { - chart.redraw(false); - } - css(chart.container, { cursor: 'move' }); - } - }); - - /* - * Extend the Point object with interaction - */ - extend(Point.prototype, { - /** - * Toggle the selection status of a point - * @param {Boolean} selected Whether to select or unselect the point. - * @param {Boolean} accumulate Whether to add to the previous selection. By default, - * this happens if the control key (Cmd on Mac) was pressed during clicking. - */ - select: function (selected, accumulate) { - var point = this, - series = point.series, - chart = series.chart; - - selected = pick(selected, !point.selected); - - // fire the event with the default handler - point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () { - point.selected = point.options.selected = selected; - series.options.data[inArray(point, series.data)] = point.options; - - point.setState(selected && SELECT_STATE); - - // unselect all other points unless Ctrl or Cmd + click - if (!accumulate) { - each(chart.getSelectedPoints(), function (loopPoint) { - if (loopPoint.selected && loopPoint !== point) { - loopPoint.selected = loopPoint.options.selected = false; - series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; - loopPoint.setState(NORMAL_STATE); - loopPoint.firePointEvent('unselect'); - } - }); - } - }); - }, - - /** - * Runs on mouse over the point - * - * @param {Object} e The event arguments - * @param {Boolean} byProximity Falsy for kd points that are closest to the mouse, or to - * actually hovered points. True for other points in shared tooltip. - */ - onMouseOver: function (e, byProximity) { - var point = this, - series = point.series, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - - // set normal state to previous series - if (hoverPoint && hoverPoint !== point) { - hoverPoint.onMouseOut(); - } - - if (point.series) { // It may have been destroyed, #4130 - - // trigger the event - point.firePointEvent('mouseOver'); - - // update the tooltip - if (tooltip && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.refresh(point, e); - } - - // hover this - point.setState(HOVER_STATE); - if (!byProximity) { - chart.hoverPoint = point; - } - } - }, - - /** - * Runs on mouse out from the point - */ - onMouseOut: function () { - var chart = this.series.chart, - hoverPoints = chart.hoverPoints; - - this.firePointEvent('mouseOut'); - - if (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887, #2240 - this.setState(); - chart.hoverPoint = null; - } - }, - - /** - * Import events from the series' and point's options. Only do it on - * demand, to save processing time on hovering. - */ - importEvents: function () { - if (!this.hasImportedEvents) { - var point = this, - options = merge(point.series.options.point, point.options), - events = options.events, - eventType; - - point.events = events; - - for (eventType in events) { - addEvent(point, eventType, events[eventType]); - } - this.hasImportedEvents = true; - - } - }, - - /** - * Set the point's state - * @param {String} state - */ - setState: function (state, move) { - var point = this, - plotX = mathFloor(point.plotX), // #4586 - plotY = point.plotY, - series = point.series, - stateOptions = series.options.states, - markerOptions = defaultPlotOptions[series.type].marker && series.options.marker, - normalDisabled = markerOptions && !markerOptions.enabled, - markerStateOptions = markerOptions && markerOptions.states[state], - stateDisabled = markerStateOptions && markerStateOptions.enabled === false, - stateMarkerGraphic = series.stateMarkerGraphic, - pointMarker = point.marker || {}, - chart = series.chart, - radius, - halo = series.halo, - haloOptions, - newSymbol, - pointAttr; - - state = state || NORMAL_STATE; // empty string - pointAttr = point.pointAttr[state] || series.pointAttr[state]; - - if ( - // already has this state - (state === point.state && !move) || - // selected points don't respond to hover - (point.selected && state !== SELECT_STATE) || - // series' state options is disabled - (stateOptions[state] && stateOptions[state].enabled === false) || - // general point marker's state options is disabled - (state && (stateDisabled || (normalDisabled && markerStateOptions.enabled === false))) || - // individual point marker's state options is disabled - (state && pointMarker.states && pointMarker.states[state] && pointMarker.states[state].enabled === false) // #1610 - - ) { - return; - } - - // apply hover styles to the existing point - if (point.graphic) { - radius = markerOptions && point.graphic.symbolName && pointAttr.r; - point.graphic.attr(merge( - pointAttr, - radius ? { // new symbol attributes (#507, #612) - x: plotX - radius, - y: plotY - radius, - width: 2 * radius, - height: 2 * radius - } : {} - )); - - // Zooming in from a range with no markers to a range with markers - if (stateMarkerGraphic) { - stateMarkerGraphic.hide(); - } - } else { - // if a graphic is not applied to each point in the normal state, create a shared - // graphic for the hover state - if (state && markerStateOptions) { - radius = markerStateOptions.radius; - newSymbol = pointMarker.symbol || series.symbol; - - // If the point has another symbol than the previous one, throw away the - // state marker graphic and force a new one (#1459) - if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { - stateMarkerGraphic = stateMarkerGraphic.destroy(); - } - - // Add a new state marker graphic - if (!stateMarkerGraphic) { - if (newSymbol) { - series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( - newSymbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr) - .add(series.markerGroup); - stateMarkerGraphic.currentSymbol = newSymbol; - } - - // Move the existing graphic - } else { - stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 - x: plotX - radius, - y: plotY - radius - }); - } - } - - if (stateMarkerGraphic) { - stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 - stateMarkerGraphic.element.point = point; // #4310 - } - } - - // Show me your halo - haloOptions = stateOptions[state] && stateOptions[state].halo; - if (haloOptions && haloOptions.size) { - if (!halo) { - series.halo = halo = chart.renderer.path() - .add(chart.seriesGroup); - } - halo.attr(extend({ - fill: point.color || series.color, - 'fill-opacity': haloOptions.opacity - }, - haloOptions.attributes))[move ? 'animate' : 'attr']({ - d: point.haloPath(haloOptions.size) - }); - } else if (halo) { - halo.attr({ d: [] }); - } - - point.state = state; - }, - - /** - * Get the circular path definition for the halo - * @param {Number} size The radius of the circular halo - * @returns {Array} The path definition - */ - haloPath: function (size) { - var series = this.series, - chart = series.chart, - plotBox = series.getPlotBox(), - inverted = chart.inverted, - plotX = Math.floor(this.plotX); - - return chart.renderer.symbols.circle( - plotBox.translateX + (inverted ? series.yAxis.len - this.plotY : plotX) - size, - plotBox.translateY + (inverted ? series.xAxis.len - plotX : this.plotY) - size, - size * 2, - size * 2 - ); - } - }); - - /* - * Extend the Series object with interaction - */ - - extend(Series.prototype, { - /** - * Series mouse over handler - */ - onMouseOver: function () { - var series = this, - chart = series.chart, - hoverSeries = chart.hoverSeries; - - // set normal state to previous series - if (hoverSeries && hoverSeries !== series) { - hoverSeries.onMouseOut(); - } - - // trigger the event, but to save processing time, - // only if defined - if (series.options.events.mouseOver) { - fireEvent(series, 'mouseOver'); - } - - // hover this - series.setState(HOVER_STATE); - chart.hoverSeries = series; - }, - - /** - * Series mouse out handler - */ - onMouseOut: function () { - // trigger the event only if listeners exist - var series = this, - options = series.options, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - chart.hoverSeries = null; // #182, set to null before the mouseOut event fires - - // trigger mouse out on the point, which must be in this series - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - // fire the mouse out event - if (series && options.events.mouseOut) { - fireEvent(series, 'mouseOut'); - } - - - // hide the tooltip - if (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.hide(); - } - - // set normal state - series.setState(); - }, - - /** - * Set the state of the graph - */ - setState: function (state) { - var series = this, - options = series.options, - graph = series.graph, - stateOptions = options.states, - lineWidth = options.lineWidth, - attribs, - i = 0; - - state = state || NORMAL_STATE; - - if (series.state !== state) { - series.state = state; - - if (stateOptions[state] && stateOptions[state].enabled === false) { - return; - } - - if (state) { - lineWidth = stateOptions[state].lineWidth || lineWidth + (stateOptions[state].lineWidthPlus || 0); // #4035 - } - - if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML - attribs = { - 'stroke-width': lineWidth - }; - // use attr because animate will cause any other animation on the graph to stop - graph.attr(attribs); - while (series['zoneGraph' + i]) { - series['zoneGraph' + i].attr(attribs); - i = i + 1; - } - } - } - }, - - /** - * Set the visibility of the graph - * - * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED, - * the visibility is toggled. - */ - setVisible: function (vis, redraw) { - var series = this, - chart = series.chart, - legendItem = series.legendItem, - showOrHide, - ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, - oldVisibility = series.visible; - - // if called without an argument, toggle visibility - series.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis; - showOrHide = vis ? 'show' : 'hide'; - - // show or hide elements - each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) { - if (series[key]) { - series[key][showOrHide](); - } - }); - - - // hide tooltip (#1361) - if (chart.hoverSeries === series || (chart.hoverPoint && chart.hoverPoint.series) === series) { - series.onMouseOut(); - } - - - if (legendItem) { - chart.legend.colorizeItem(series, vis); - } - - - // rescale or adapt to resized chart - series.isDirty = true; - // in a stack, all other series are affected - if (series.options.stacking) { - each(chart.series, function (otherSeries) { - if (otherSeries.options.stacking && otherSeries.visible) { - otherSeries.isDirty = true; - } - }); - } - - // show or hide linked series - each(series.linkedSeries, function (otherSeries) { - otherSeries.setVisible(vis, false); - }); - - if (ignoreHiddenSeries) { - chart.isDirtyBox = true; - } - if (redraw !== false) { - chart.redraw(); - } - - fireEvent(series, showOrHide); - }, - - /** - * Show the graph - */ - show: function () { - this.setVisible(true); - }, - - /** - * Hide the graph - */ - hide: function () { - this.setVisible(false); - }, - - - /** - * Set the selected state of the graph - * - * @param selected {Boolean} True to select the series, false to unselect. If - * UNDEFINED, the selection state is toggled. - */ - select: function (selected) { - var series = this; - // if called without an argument, toggle - series.selected = selected = (selected === UNDEFINED) ? !series.selected : selected; - - if (series.checkbox) { - series.checkbox.checked = selected; - } - - fireEvent(series, selected ? 'select' : 'unselect'); - }, - - drawTracker: TrackerMixin.drawTrackerGraph - }); - - // global variables - extend(Highcharts, { - - // Constructors - Color: Color, - Point: Point, - Tick: Tick, - Renderer: Renderer, - SVGElement: SVGElement, - SVGRenderer: SVGRenderer, - - // Various - arrayMin: arrayMin, - arrayMax: arrayMax, - charts: charts, - dateFormat: dateFormat, - error: error, - format: format, - pathAnim: pathAnim, - getOptions: getOptions, - hasBidiBug: hasBidiBug, - isTouchDevice: isTouchDevice, - setOptions: setOptions, - addEvent: addEvent, - removeEvent: removeEvent, - createElement: createElement, - discardElement: discardElement, - css: css, - each: each, - map: map, - merge: merge, - splat: splat, - stableSort: stableSort, - extendClass: extendClass, - pInt: pInt, - svg: hasSVG, - canvas: useCanVG, - vml: !hasSVG && !useCanVG, - product: PRODUCT, - version: VERSION - }); - - return Highcharts; -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/boost.js b/platforms/android/assets/www/lib/highcharts/modules/boost.js deleted file mode 100644 index 28e8b662..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/boost.js +++ /dev/null @@ -1,12 +0,0 @@ -(function(c){typeof module==="object"&&module.exports?module.exports=c:c(Highcharts)})(function(c){function v(a,b,d,e,f){f=f||0;e=e||w;k(a.slice(f,f+e),b);f+e<a.length?setTimeout(function(){v(a,b,d,e,f+e)}):d&&d()}var p=c.win.document,M=function(){},N=c.Color,j=c.Series,h=c.seriesTypes,k=c.each,q=c.extend,O=c.addEvent,P=c.fireEvent,Q=c.merge,R=c.pick,g=c.wrap,n=c.getOptions().plotOptions,w=5E4;k(["area","arearange","column","line","scatter"],function(a){if(n[a])n[a].boostThreshold=5E3});k(["translate", -"generatePoints","drawTracker","drawPoints","render"],function(a){function b(b){var e=this.options.stacking&&(a==="translate"||a==="generatePoints");if((this.processedXData||this.options.data).length<(this.options.boostThreshold||Number.MAX_VALUE)||e){if(a==="render"&&this.image)this.image.attr({href:""}),this.animate=null;b.call(this)}else if(this[a+"Canvas"])this[a+"Canvas"]()}g(j.prototype,a,b);a==="translate"&&(h.column&&g(h.column.prototype,a,b),h.arearange&&g(h.arearange.prototype,a,b))});g(j.prototype, -"getExtremes",function(a){this.hasExtremes()||a.apply(this,Array.prototype.slice.call(arguments,1))});g(j.prototype,"setData",function(a){this.hasExtremes(!0)||a.apply(this,Array.prototype.slice.call(arguments,1))});g(j.prototype,"processData",function(a){this.hasExtremes(!0)||a.apply(this,Array.prototype.slice.call(arguments,1))});c.extend(j.prototype,{pointRange:0,hasExtremes:function(a){var b=this.options,d=this.xAxis&&this.xAxis.options,e=this.yAxis&&this.yAxis.options;return b.data.length>(b.boostThreshold|| -Number.MAX_VALUE)&&typeof e.min==="number"&&typeof e.max==="number"&&(!a||typeof d.min==="number"&&typeof d.max==="number")},destroyGraphics:function(){var a=this,b=this.points,d,e;if(b)for(e=0;e<b.length;e+=1)if((d=b[e])&&d.graphic)d.graphic=d.graphic.destroy();k(["graph","area","tracker"],function(b){a[b]&&(a[b]=a[b].destroy())})},getContext:function(){var a=this.chart,b=a.plotWidth,d=a.plotHeight,e=this.ctx,f=function(a,b,d,e,f,c,i){a.call(this,d,b,e,f,c,i)};this.canvas?e.clearRect(0,0,b,d):(this.canvas= -p.createElement("canvas"),this.image=a.renderer.image("",0,0,b,d).add(this.group),this.ctx=e=this.canvas.getContext("2d"),a.inverted&&k(["moveTo","lineTo","rect","arc"],function(a){g(e,a,f)}));this.canvas.setAttribute("width",b);this.canvas.setAttribute("height",d);this.image.attr({width:b,height:d});return e},canvasToSVG:function(){this.image.attr({href:this.canvas.toDataURL("image/png")})},cvsLineTo:function(a,b,d){a.lineTo(b,d)},renderCanvas:function(){var a=this,b=a.options,d=a.chart,e=this.xAxis, -f=this.yAxis,c,h,g=0,j=a.processedXData,k=a.processedYData,n=b.data,i=e.getExtremes(),p=i.min,S=i.max,i=f.getExtremes(),T=i.min,U=i.max,x={},r,V=!!a.sampling,y,z=b.marker&&b.marker.radius,A=this.cvsDrawPoint,B=b.lineWidth?this.cvsLineTo:!1,C=z<=1?this.cvsMarkerSquare:this.cvsMarkerCircle,W=b.enableMouseTracking!==!1,D,i=b.threshold,l=f.getThreshold(i),E=typeof i==="number",F=l,X=this.fill,G=a.pointArrayMap&&a.pointArrayMap.join(",")==="low,high",H=!!b.stacking,Y=a.cropStart||0,i=d.options.loading, -Z=a.requireSorting,I,$=b.connectNulls,J=!j,s,t,m,o,aa=a.fillOpacity?(new N(a.color)).setOpacity(R(b.fillOpacity,0.75)).get():a.color,K=function(){X?(c.fillStyle=aa,c.fill()):(c.strokeStyle=a.color,c.lineWidth=b.lineWidth,c.stroke())},L=function(a,b,d){g===0&&c.beginPath();I?c.moveTo(a,b):A?A(c,a,b,d,D):B?B(c,a,b):C&&C(c,a,b,z);g+=1;g===1E3&&(K(),g=0);D={clientX:a,plotY:b,yBottom:d}},u=function(a,b,c){W&&!x[a+","+b]&&(x[a+","+b]=!0,d.inverted&&(a=e.len-a,b=f.len-b),y.push({clientX:a,plotX:a,plotY:b, -i:Y+c}))};(this.points||this.graph)&&this.destroyGraphics();a.plotGroup("group","series",a.visible?"visible":"hidden",b.zIndex,d.seriesGroup);a.getAttribs();a.markerGroup=a.group;O(a,"destroy",function(){a.markerGroup=null});y=this.points=[];c=this.getContext();a.buildKDTree=M;if(n.length>99999)d.options.loading=Q(i,{labelStyle:{backgroundColor:"rgba(255,255,255,0.75)",padding:"1em",borderRadius:"0.5em"},style:{backgroundColor:"none",opacity:1}}),d.showLoading("Drawing..."),d.options.loading=i,d.loadingShown=== -!0?d.loadingShown=1:d.loadingShown+=1;h=0;v(H?a.data:j||n,function(b){var d,c,g,i=!0;J?(d=b[0],c=b[1]):(d=b,c=k[h]);if(G)J&&(c=b.slice(1,3)),g=c[0],c=c[1];else if(H)d=b.x,c=b.stackY,g=c-b.y;b=c===null;Z||(i=c>=T&&c<=U);if(!b&&d>=p&&d<=S&&i)if(d=Math.round(e.toPixels(d,!0)),V){if(m===void 0||d===r){G||(g=c);if(o===void 0||c>t)t=c,o=h;if(m===void 0||g<s)s=g,m=h}d!==r&&(m!==void 0&&(c=f.toPixels(t,!0),l=f.toPixels(s,!0),L(d,E?Math.min(c,F):c,E?Math.max(l,F):l),u(d,c,o),l!==c&&u(d,l,m)),m=o=void 0,r= -d)}else c=Math.round(f.toPixels(c,!0)),L(d,c,l),u(d,c,h);I=b&&!$;h+=1;h%w===0&&a.canvasToSVG()},function(){var b=d.loadingDiv,c=+d.loadingShown;K();a.canvasToSVG();P(a,"renderedCanvas");if(c===1)q(b.style,{transition:"opacity 250ms",opacity:0}),d.loadingShown=!1,setTimeout(function(){b.parentNode&&b.parentNode.removeChild(b);d.loadingDiv=d.loadingSpan=null},250);if(c)d.loadingShown=c-1;a.directTouch=!1;a.options.stickyTracking=!0;delete a.buildKDTree;a.buildKDTree()},d.renderer.forExport?Number.MAX_VALUE: -void 0)}});h.scatter.prototype.cvsMarkerCircle=function(a,b,d,c){a.moveTo(b,d);a.arc(b,d,c,0,2*Math.PI,!1)};h.scatter.prototype.cvsMarkerSquare=function(a,b,d,c){a.moveTo(b,d);a.rect(b-c,d-c,c*2,c*2)};h.scatter.prototype.fill=!0;q(h.area.prototype,{cvsDrawPoint:function(a,b,c,e,f){f&&b!==f.clientX&&(a.moveTo(f.clientX,f.yBottom),a.lineTo(f.clientX,f.plotY),a.lineTo(b,c),a.lineTo(b,e))},fill:!0,fillOpacity:!0,sampling:!0});q(h.column.prototype,{cvsDrawPoint:function(a,b,c,e){a.rect(b-1,c,1,e-c)},fill:!0, -sampling:!0});j.prototype.getPoint=function(a){var b=a;if(a&&!(a instanceof this.pointClass))b=(new this.pointClass).init(this,this.options.data[a.i]),b.category=b.x,b.dist=a.dist,b.distX=a.distX,b.plotX=a.plotX,b.plotY=a.plotY;return b};g(j.prototype,"searchPoint",function(a){return this.getPoint(a.apply(this,[].slice.call(arguments,1)))})}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/boost.src.js b/platforms/android/assets/www/lib/highcharts/modules/boost.src.js deleted file mode 100644 index 15bb91db..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/boost.src.js +++ /dev/null @@ -1,595 +0,0 @@ -/** - * This is an experimental Highcharts module that draws long data series on a canvas - * in order to increase performance of the initial load time and tooltip responsiveness. - * - * Compatible with HTML5 canvas compatible browsers (not IE < 9). - * - * Author: Torstein Honsi - * - * - * Development plan - * - Column range. - * - Heatmap. - * - Treemap. - * - Check how it works with Highstock and data grouping. - * - Check inverted charts. - * - Check reversed axes. - * - Chart callback should be async after last series is drawn. (But not necessarily, we don't do - that with initial series animation). - * - Cache full-size image so we don't have to redraw on hide/show and zoom up. But k-d-tree still - * needs to be built. - * - Test IE9 and IE10. - * - Stacking is not perhaps not correct since it doesn't use the translation given in - * the translate method. If this gets to complicated, a possible way out would be to - * have a simplified renderCanvas method that simply draws the areaPath on a canvas. - * - * If this module is taken in as part of the core - * - All the loading logic should be merged with core. Update styles in the core. - * - Most of the method wraps should probably be added directly in parent methods. - * - * Notes for boost mode - * - Area lines are not drawn - * - Point markers are not drawn - * - Zones and negativeColor don't work - * - Columns are always one pixel wide. Don't set the threshold too low. - * - * Optimizing tips for users - * - For scatter plots, use a marker.radius of 1 or less. It results in a rectangle being drawn, which is - * considerably faster than a circle. - * - Set extremes (min, max) explicitly on the axes in order for Highcharts to avoid computing extremes. - * - Set enableMouseTracking to false on the series to improve total rendering time. - * - The default threshold is set based on one series. If you have multiple, dense series, the combined - * number of points drawn gets higher, and you may want to set the threshold lower in order to - * use optimizations. - */ - -/* eslint indent: [2, 4] */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - 'use strict'; - - var win = H.win, - doc = win.document, - noop = function () {}, - Color = H.Color, - Series = H.Series, - seriesTypes = H.seriesTypes, - each = H.each, - extend = H.extend, - addEvent = H.addEvent, - fireEvent = H.fireEvent, - merge = H.merge, - pick = H.pick, - wrap = H.wrap, - plotOptions = H.getOptions().plotOptions, - CHUNK_SIZE = 50000; - - function eachAsync(arr, fn, finalFunc, chunkSize, i) { - i = i || 0; - chunkSize = chunkSize || CHUNK_SIZE; - each(arr.slice(i, i + chunkSize), fn); - if (i + chunkSize < arr.length) { - setTimeout(function () { - eachAsync(arr, fn, finalFunc, chunkSize, i + chunkSize); - }); - } else if (finalFunc) { - finalFunc(); - } - } - - // Set default options - each(['area', 'arearange', 'column', 'line', 'scatter'], function (type) { - if (plotOptions[type]) { - plotOptions[type].boostThreshold = 5000; - } - }); - - /** - * Override a bunch of methods the same way. If the number of points is below the threshold, - * run the original method. If not, check for a canvas version or do nothing. - */ - each(['translate', 'generatePoints', 'drawTracker', 'drawPoints', 'render'], function (method) { - function branch(proceed) { - var letItPass = this.options.stacking && (method === 'translate' || method === 'generatePoints'); - if ((this.processedXData || this.options.data).length < (this.options.boostThreshold || Number.MAX_VALUE) || - letItPass) { - - // Clear image - if (method === 'render' && this.image) { - this.image.attr({ href: '' }); - this.animate = null; // We're zooming in, don't run animation - } - - proceed.call(this); - - // If a canvas version of the method exists, like renderCanvas(), run - } else if (this[method + 'Canvas']) { - - this[method + 'Canvas'](); - } - } - wrap(Series.prototype, method, branch); - - // A special case for some types - its translate method is already wrapped - if (method === 'translate') { - if (seriesTypes.column) { - wrap(seriesTypes.column.prototype, method, branch); - } - if (seriesTypes.arearange) { - wrap(seriesTypes.arearange.prototype, method, branch); - } - } - }); - - /** - * Do not compute extremes when min and max are set. - * If we use this in the core, we can add the hook to hasExtremes to the methods directly. - */ - wrap(Series.prototype, 'getExtremes', function (proceed) { - if (!this.hasExtremes()) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - wrap(Series.prototype, 'setData', function (proceed) { - if (!this.hasExtremes(true)) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - wrap(Series.prototype, 'processData', function (proceed) { - if (!this.hasExtremes(true)) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - - - H.extend(Series.prototype, { - pointRange: 0, - - hasExtremes: function (checkX) { - var options = this.options, - data = options.data, - xAxis = this.xAxis && this.xAxis.options, - yAxis = this.yAxis && this.yAxis.options; - return data.length > (options.boostThreshold || Number.MAX_VALUE) && typeof yAxis.min === 'number' && typeof yAxis.max === 'number' && - (!checkX || (typeof xAxis.min === 'number' && typeof xAxis.max === 'number')); - }, - - /** - * If implemented in the core, parts of this can probably be shared with other similar - * methods in Highcharts. - */ - destroyGraphics: function () { - var series = this, - points = this.points, - point, - i; - - if (points) { - for (i = 0; i < points.length; i = i + 1) { - point = points[i]; - if (point && point.graphic) { - point.graphic = point.graphic.destroy(); - } - } - } - - each(['graph', 'area', 'tracker'], function (prop) { - if (series[prop]) { - series[prop] = series[prop].destroy(); - } - }); - }, - - /** - * Create a hidden canvas to draw the graph on. The contents is later copied over - * to an SVG image element. - */ - getContext: function () { - var chart = this.chart, - width = chart.plotWidth, - height = chart.plotHeight, - ctx = this.ctx, - swapXY = function (proceed, x, y, a, b, c, d) { - proceed.call(this, y, x, a, b, c, d); - }; - - if (!this.canvas) { - this.canvas = doc.createElement('canvas'); - this.image = chart.renderer.image('', 0, 0, width, height).add(this.group); - this.ctx = ctx = this.canvas.getContext('2d'); - if (chart.inverted) { - each(['moveTo', 'lineTo', 'rect', 'arc'], function (fn) { - wrap(ctx, fn, swapXY); - }); - } - } else { - ctx.clearRect(0, 0, width, height); - } - - this.canvas.setAttribute('width', width); - this.canvas.setAttribute('height', height); - this.image.attr({ - width: width, - height: height - }); - - return ctx; - }, - - /** - * Draw the canvas image inside an SVG image - */ - canvasToSVG: function () { - this.image.attr({ href: this.canvas.toDataURL('image/png') }); - }, - - cvsLineTo: function (ctx, clientX, plotY) { - ctx.lineTo(clientX, plotY); - }, - - renderCanvas: function () { - var series = this, - options = series.options, - chart = series.chart, - xAxis = this.xAxis, - yAxis = this.yAxis, - ctx, - i, - c = 0, - xData = series.processedXData, - yData = series.processedYData, - rawData = options.data, - xExtremes = xAxis.getExtremes(), - xMin = xExtremes.min, - xMax = xExtremes.max, - yExtremes = yAxis.getExtremes(), - yMin = yExtremes.min, - yMax = yExtremes.max, - pointTaken = {}, - lastClientX, - sampling = !!series.sampling, - points, - r = options.marker && options.marker.radius, - cvsDrawPoint = this.cvsDrawPoint, - cvsLineTo = options.lineWidth ? this.cvsLineTo : false, - cvsMarker = r <= 1 ? this.cvsMarkerSquare : this.cvsMarkerCircle, - enableMouseTracking = options.enableMouseTracking !== false, - lastPoint, - threshold = options.threshold, - yBottom = yAxis.getThreshold(threshold), - hasThreshold = typeof threshold === 'number', - translatedThreshold = yBottom, - doFill = this.fill, - isRange = series.pointArrayMap && series.pointArrayMap.join(',') === 'low,high', - isStacked = !!options.stacking, - cropStart = series.cropStart || 0, - loadingOptions = chart.options.loading, - requireSorting = series.requireSorting, - wasNull, - connectNulls = options.connectNulls, - useRaw = !xData, - minVal, - maxVal, - minI, - maxI, - fillColor = series.fillOpacity ? - new Color(series.color).setOpacity(pick(options.fillOpacity, 0.75)).get() : - series.color, - stroke = function () { - if (doFill) { - ctx.fillStyle = fillColor; - ctx.fill(); - } else { - ctx.strokeStyle = series.color; - ctx.lineWidth = options.lineWidth; - ctx.stroke(); - } - }, - drawPoint = function (clientX, plotY, yBottom) { - if (c === 0) { - ctx.beginPath(); - } - - if (wasNull) { - ctx.moveTo(clientX, plotY); - } else { - if (cvsDrawPoint) { - cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint); - } else if (cvsLineTo) { - cvsLineTo(ctx, clientX, plotY); - } else if (cvsMarker) { - cvsMarker(ctx, clientX, plotY, r); - } - } - - // We need to stroke the line for every 1000 pixels. It will crash the browser - // memory use if we stroke too infrequently. - c = c + 1; - if (c === 1000) { - stroke(); - c = 0; - } - - // Area charts need to keep track of the last point - lastPoint = { - clientX: clientX, - plotY: plotY, - yBottom: yBottom - }; - }, - - addKDPoint = function (clientX, plotY, i) { - - // The k-d tree requires series points. Reduce the amount of points, since the time to build the - // tree increases exponentially. - if (enableMouseTracking && !pointTaken[clientX + ',' + plotY]) { - pointTaken[clientX + ',' + plotY] = true; - - if (chart.inverted) { - clientX = xAxis.len - clientX; - plotY = yAxis.len - plotY; - } - - points.push({ - clientX: clientX, - plotX: clientX, - plotY: plotY, - i: cropStart + i - }); - } - }; - - // If we are zooming out from SVG mode, destroy the graphics - if (this.points || this.graph) { - this.destroyGraphics(); - } - - // The group - series.plotGroup( - 'group', - 'series', - series.visible ? 'visible' : 'hidden', - options.zIndex, - chart.seriesGroup - ); - - series.getAttribs(); - series.markerGroup = series.group; - addEvent(series, 'destroy', function () { - series.markerGroup = null; - }); - - points = this.points = []; - ctx = this.getContext(); - series.buildKDTree = noop; // Do not start building while drawing - - // Display a loading indicator - if (rawData.length > 99999) { - chart.options.loading = merge(loadingOptions, { - labelStyle: { - backgroundColor: 'rgba(255,255,255,0.75)', - padding: '1em', - borderRadius: '0.5em' - }, - style: { - backgroundColor: 'none', - opacity: 1 - } - }); - chart.showLoading('Drawing...'); - chart.options.loading = loadingOptions; // reset - if (chart.loadingShown === true) { - chart.loadingShown = 1; - } else { - chart.loadingShown = chart.loadingShown + 1; - } - } - - // Loop over the points - i = 0; - eachAsync(isStacked ? series.data : (xData || rawData), function (d) { - - var x, - y, - clientX, - plotY, - isNull, - low, - isYInside = true; - - if (useRaw) { - x = d[0]; - y = d[1]; - } else { - x = d; - y = yData[i]; - } - - // Resolve low and high for range series - if (isRange) { - if (useRaw) { - y = d.slice(1, 3); - } - low = y[0]; - y = y[1]; - } else if (isStacked) { - x = d.x; - y = d.stackY; - low = y - d.y; - } - - isNull = y === null; - - // Optimize for scatter zooming - if (!requireSorting) { - isYInside = y >= yMin && y <= yMax; - } - - if (!isNull && x >= xMin && x <= xMax && isYInside) { - - clientX = Math.round(xAxis.toPixels(x, true)); - - if (sampling) { - if (minI === undefined || clientX === lastClientX) { - if (!isRange) { - low = y; - } - if (maxI === undefined || y > maxVal) { - maxVal = y; - maxI = i; - } - if (minI === undefined || low < minVal) { - minVal = low; - minI = i; - } - - } - if (clientX !== lastClientX) { // Add points and reset - if (minI !== undefined) { // then maxI is also a number - plotY = yAxis.toPixels(maxVal, true); - yBottom = yAxis.toPixels(minVal, true); - drawPoint( - clientX, - hasThreshold ? Math.min(plotY, translatedThreshold) : plotY, - hasThreshold ? Math.max(yBottom, translatedThreshold) : yBottom - ); - addKDPoint(clientX, plotY, maxI); - if (yBottom !== plotY) { - addKDPoint(clientX, yBottom, minI); - } - } - - - minI = maxI = undefined; - lastClientX = clientX; - } - } else { - plotY = Math.round(yAxis.toPixels(y, true)); - drawPoint(clientX, plotY, yBottom); - addKDPoint(clientX, plotY, i); - } - } - wasNull = isNull && !connectNulls; - - i = i + 1; - - if (i % CHUNK_SIZE === 0) { - series.canvasToSVG(); - } - - }, function () { - - var loadingDiv = chart.loadingDiv, - loadingShown = +chart.loadingShown; - - stroke(); - series.canvasToSVG(); - - fireEvent(series, 'renderedCanvas'); - - // Do not use chart.hideLoading, as it runs JS animation and will be blocked by buildKDTree. - // CSS animation looks good, but then it must be deleted in timeout. If we add the module to core, - // change hideLoading so we can skip this block. - if (loadingShown === 1) { - extend(loadingDiv.style, { - transition: 'opacity 250ms', - opacity: 0 - }); - - chart.loadingShown = false; - setTimeout(function () { - if (loadingDiv.parentNode) { // In exporting it is falsy - loadingDiv.parentNode.removeChild(loadingDiv); - } - chart.loadingDiv = chart.loadingSpan = null; - }, 250); - } - if (loadingShown) { - chart.loadingShown = loadingShown - 1; - } - - // Pass tests in Pointer. - // Replace this with a single property, and replace when zooming in - // below boostThreshold. - series.directTouch = false; - series.options.stickyTracking = true; - - delete series.buildKDTree; // Go back to prototype, ready to build - series.buildKDTree(); - - // Don't do async on export, the exportChart, getSVGForExport and getSVG methods are not chained for it. - }, chart.renderer.forExport ? Number.MAX_VALUE : undefined); - } - }); - - seriesTypes.scatter.prototype.cvsMarkerCircle = function (ctx, clientX, plotY, r) { - ctx.moveTo(clientX, plotY); - ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false); - }; - - // Rect is twice as fast as arc, should be used for small markers - seriesTypes.scatter.prototype.cvsMarkerSquare = function (ctx, clientX, plotY, r) { - ctx.moveTo(clientX, plotY); - ctx.rect(clientX - r, plotY - r, r * 2, r * 2); - }; - seriesTypes.scatter.prototype.fill = true; - - extend(seriesTypes.area.prototype, { - cvsDrawPoint: function (ctx, clientX, plotY, yBottom, lastPoint) { - if (lastPoint && clientX !== lastPoint.clientX) { - ctx.moveTo(lastPoint.clientX, lastPoint.yBottom); - ctx.lineTo(lastPoint.clientX, lastPoint.plotY); - ctx.lineTo(clientX, plotY); - ctx.lineTo(clientX, yBottom); - } - }, - fill: true, - fillOpacity: true, - sampling: true - }); - - extend(seriesTypes.column.prototype, { - cvsDrawPoint: function (ctx, clientX, plotY, yBottom) { - ctx.rect(clientX - 1, plotY, 1, yBottom - plotY); - }, - fill: true, - sampling: true - }); - - /** - * Return a full Point object based on the index. The boost module uses stripped point objects - * for performance reasons. - * @param {Number} boostPoint A stripped-down point object - * @returns {Object} A Point object as per http://api.highcharts.com/highcharts#Point - */ - Series.prototype.getPoint = function (boostPoint) { - var point = boostPoint; - - if (boostPoint && !(boostPoint instanceof this.pointClass)) { - point = (new this.pointClass()).init(this, this.options.data[boostPoint.i]); - point.category = point.x; - - point.dist = boostPoint.dist; - point.distX = boostPoint.distX; - point.plotX = boostPoint.plotX; - point.plotY = boostPoint.plotY; - } - - return point; - }; - - /** - * Return a point instance from the k-d-tree - */ - wrap(Series.prototype, 'searchPoint', function (proceed) { - return this.getPoint( - proceed.apply(this, [].slice.call(arguments, 1)) - ); - }); -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/broken-axis.js b/platforms/android/assets/www/lib/highcharts/modules/broken-axis.js deleted file mode 100644 index eb970ff3..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/broken-axis.js +++ /dev/null @@ -1,7 +0,0 @@ -(function(e){typeof module==="object"&&module.exports?module.exports=e:e(Highcharts)})(function(e){function u(){return Array.prototype.slice.call(arguments,1)}function s(d){d.apply(this);this.drawBreaks()}var q=e.pick,o=e.wrap,r=e.each,v=e.extend,t=e.fireEvent,p=e.Axis,w=e.Series;v(p.prototype,{isInBreak:function(d,h){var a=d.repeat||Infinity,b=d.from,c=d.to-d.from,a=h>=b?(h-b)%a:a-(b-h)%a;return d.inclusive?a<=c:a<c&&a!==0},isInAnyBreak:function(d,h){var a=this.options.breaks,b=a&&a.length,c,f,j; -if(b){for(;b--;)this.isInBreak(a[b],d)&&(c=!0,f||(f=q(a[b].showPoints,this.isXAxis?!1:!0)));j=c&&h?c&&!f:c}return j}});o(p.prototype,"setTickPositions",function(d){d.apply(this,Array.prototype.slice.call(arguments,1));if(this.options.breaks){var h=this.tickPositions,a=this.tickPositions.info,b=[],c;for(c=0;c<h.length;c++)this.isInAnyBreak(h[c])||b.push(h[c]);this.tickPositions=b;this.tickPositions.info=a}});o(p.prototype,"init",function(d,h,a){if(a.breaks&&a.breaks.length)a.ordinal=!1;d.call(this, -h,a);if(this.options.breaks){var b=this;b.doPostTranslate=!0;this.val2lin=function(c){var f=c,a,d;for(d=0;d<b.breakArray.length;d++)if(a=b.breakArray[d],a.to<=c)f-=a.len;else if(a.from>=c)break;else if(b.isInBreak(a,c)){f-=c-a.from;break}return f};this.lin2val=function(c){var f,a;for(a=0;a<b.breakArray.length;a++)if(f=b.breakArray[a],f.from>=c)break;else f.to<c?c+=f.len:b.isInBreak(f,c)&&(c+=f.len);return c};this.setExtremes=function(c,a,b,d,h){for(;this.isInAnyBreak(c);)c-=this.closestPointRange; -for(;this.isInAnyBreak(a);)a-=this.closestPointRange;p.prototype.setExtremes.call(this,c,a,b,d,h)};this.setAxisTranslation=function(c){p.prototype.setAxisTranslation.call(this,c);var a=b.options.breaks,c=[],d=[],h=0,k,g,e=b.userMin||b.min,l=b.userMax||b.max,i,n;for(n in a)g=a[n],k=g.repeat||Infinity,b.isInBreak(g,e)&&(e+=g.to%k-e%k),b.isInBreak(g,l)&&(l-=l%k-g.from%k);for(n in a){g=a[n];i=g.from;for(k=g.repeat||Infinity;i-k>e;)i-=k;for(;i<e;)i+=k;for(;i<l;i+=k)c.push({value:i,move:"in"}),c.push({value:i+ -(g.to-g.from),move:"out",size:g.breakSize})}c.sort(function(a,c){return a.value===c.value?(a.move==="in"?0:1)-(c.move==="in"?0:1):a.value-c.value});a=0;i=e;for(n in c){g=c[n];a+=g.move==="in"?1:-1;if(a===1&&g.move==="in")i=g.value;a===0&&(d.push({from:i,to:g.value,len:g.value-i-(g.size||0)}),h+=g.value-i-(g.size||0))}b.breakArray=d;t(b,"afterBreaks");b.transA*=(l-b.min)/(l-e-h);b.min=e;b.max=l}}});o(w.prototype,"generatePoints",function(d){d.apply(this,u(arguments));var e=this.xAxis,a=this.yAxis, -b=this.points,c,f=b.length,j=this.options.connectNulls,m;if(e&&a&&(e.options.breaks||a.options.breaks))for(;f--;)if(c=b[f],m=c.y===null&&j===!1,!m&&(e.isInAnyBreak(c.x,!0)||a.isInAnyBreak(c.y,!0)))b.splice(f,1),this.data[f]&&this.data[f].destroyElements()});e.Series.prototype.drawBreaks=function(){var d=this,e=d.points,a,b,c,f,j;r(["y","x"],function(m){a=d[m+"Axis"];b=a.breakArray||[];c=a.isXAxis?a.min:q(d.options.threshold,a.min);r(e,function(d){j=q(d["stack"+m.toUpperCase()],d[m]);r(b,function(b){f= -!1;if(c<b.from&&j>b.to||c>b.from&&j<b.from)f="pointBreak";else if(c<b.from&&j>b.from&&j<b.to||c>b.from&&j>b.to&&j<b.from)f="pointInBreak";f&&t(a,f,{point:d,brk:b})})})})};o(e.seriesTypes.column.prototype,"drawPoints",s);o(e.Series.prototype,"drawPoints",s)}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/broken-axis.src.js b/platforms/android/assets/www/lib/highcharts/modules/broken-axis.src.js deleted file mode 100644 index 8b85f13b..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/broken-axis.src.js +++ /dev/null @@ -1,330 +0,0 @@ -/** - * Highcharts JS v4.2.1 (2015-12-21) - * Highcharts Broken Axis module - * - * License: www.highcharts.com/license - */ - -(function (factory) { - /*= if (!build.assembly) { =*/ - if (typeof module === 'object' && module.exports) { - module.exports = factory; - return; - } - /*= } =*/ - factory(Highcharts); - -}(function (H) { - - 'use strict'; - - var pick = H.pick, - wrap = H.wrap, - each = H.each, - extend = H.extend, - fireEvent = H.fireEvent, - Axis = H.Axis, - Series = H.Series; - - function stripArguments() { - return Array.prototype.slice.call(arguments, 1); - } - - extend(Axis.prototype, { - isInBreak: function (brk, val) { - var ret, - repeat = brk.repeat || Infinity, - from = brk.from, - length = brk.to - brk.from, - test = (val >= from ? (val - from) % repeat : repeat - ((from - val) % repeat)); - - if (!brk.inclusive) { - ret = test < length && test !== 0; - } else { - ret = test <= length; - } - return ret; - }, - - isInAnyBreak: function (val, testKeep) { - - var breaks = this.options.breaks, - i = breaks && breaks.length, - inbrk, - keep, - ret; - - - if (i) { - - while (i--) { - if (this.isInBreak(breaks[i], val)) { - inbrk = true; - if (!keep) { - keep = pick(breaks[i].showPoints, this.isXAxis ? false : true); - } - } - } - - if (inbrk && testKeep) { - ret = inbrk && !keep; - } else { - ret = inbrk; - } - } - return ret; - } - }); - - wrap(Axis.prototype, 'setTickPositions', function (proceed) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - - if (this.options.breaks) { - var axis = this, - tickPositions = this.tickPositions, - info = this.tickPositions.info, - newPositions = [], - i; - - for (i = 0; i < tickPositions.length; i++) { - if (!axis.isInAnyBreak(tickPositions[i])) { - newPositions.push(tickPositions[i]); - } - } - - this.tickPositions = newPositions; - this.tickPositions.info = info; - } - }); - - wrap(Axis.prototype, 'init', function (proceed, chart, userOptions) { - // Force Axis to be not-ordinal when breaks are defined - if (userOptions.breaks && userOptions.breaks.length) { - userOptions.ordinal = false; - } - - proceed.call(this, chart, userOptions); - - if (this.options.breaks) { - - var axis = this; - - axis.doPostTranslate = true; - - this.val2lin = function (val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.to <= val) { - nval -= brk.len; - } else if (brk.from >= val) { - break; - } else if (axis.isInBreak(brk, val)) { - nval -= (val - brk.from); - break; - } - } - - return nval; - }; - - this.lin2val = function (val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.from >= nval) { - break; - } else if (brk.to < nval) { - nval += brk.len; - } else if (axis.isInBreak(brk, nval)) { - nval += brk.len; - } - } - return nval; - }; - - this.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) { - // If trying to set extremes inside a break, extend it to before and after the break ( #3857 ) - while (this.isInAnyBreak(newMin)) { - newMin -= this.closestPointRange; - } - while (this.isInAnyBreak(newMax)) { - newMax -= this.closestPointRange; - } - Axis.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments); - }; - - this.setAxisTranslation = function (saveOld) { - Axis.prototype.setAxisTranslation.call(this, saveOld); - - var breaks = axis.options.breaks, - breakArrayT = [], // Temporary one - breakArray = [], - length = 0, - inBrk, - repeat, - brk, - min = axis.userMin || axis.min, - max = axis.userMax || axis.max, - start, - i, - j; - - // Min & max check (#4247) - for (i in breaks) { - brk = breaks[i]; - repeat = brk.repeat || Infinity; - if (axis.isInBreak(brk, min)) { - min += (brk.to % repeat) - (min % repeat); - } - if (axis.isInBreak(brk, max)) { - max -= (max % repeat) - (brk.from % repeat); - } - } - - // Construct an array holding all breaks in the axis - for (i in breaks) { - brk = breaks[i]; - start = brk.from; - repeat = brk.repeat || Infinity; - - while (start - repeat > min) { - start -= repeat; - } - while (start < min) { - start += repeat; - } - - for (j = start; j < max; j += repeat) { - breakArrayT.push({ - value: j, - move: 'in' - }); - breakArrayT.push({ - value: j + (brk.to - brk.from), - move: 'out', - size: brk.breakSize - }); - } - } - - breakArrayT.sort(function (a, b) { - var ret; - if (a.value === b.value) { - ret = (a.move === 'in' ? 0 : 1) - (b.move === 'in' ? 0 : 1); - } else { - ret = a.value - b.value; - } - return ret; - }); - - // Simplify the breaks - inBrk = 0; - start = min; - - for (i in breakArrayT) { - brk = breakArrayT[i]; - inBrk += (brk.move === 'in' ? 1 : -1); - - if (inBrk === 1 && brk.move === 'in') { - start = brk.value; - } - if (inBrk === 0) { - breakArray.push({ - from: start, - to: brk.value, - len: brk.value - start - (brk.size || 0) - }); - length += brk.value - start - (brk.size || 0); - } - } - - axis.breakArray = breakArray; - - fireEvent(axis, 'afterBreaks'); - - axis.transA *= ((max - axis.min) / (max - min - length)); - - axis.min = min; - axis.max = max; - }; - } - }); - - wrap(Series.prototype, 'generatePoints', function (proceed) { - - proceed.apply(this, stripArguments(arguments)); - - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - points = series.points, - point, - i = points.length, - connectNulls = series.options.connectNulls, - nullGap; - - - if (xAxis && yAxis && (xAxis.options.breaks || yAxis.options.breaks)) { - while (i--) { - point = points[i]; - - nullGap = point.y === null && connectNulls === false; // respect nulls inside the break (#4275) - if (!nullGap && (xAxis.isInAnyBreak(point.x, true) || yAxis.isInAnyBreak(point.y, true))) { - points.splice(i, 1); - if (this.data[i]) { - this.data[i].destroyElements(); // removes the graphics for this point if they exist - } - } - } - } - - }); - - function drawPointsWrapped(proceed) { - proceed.apply(this); - this.drawBreaks(); - } - - H.Series.prototype.drawBreaks = function () { - var series = this, - points = series.points, - axis, - breaks, - threshold, - axisName = 'Axis', - eventName, - y; - - each(['y', 'x'], function (key) { - axis = series[key + axisName]; - breaks = axis.breakArray || []; - threshold = axis.isXAxis ? axis.min : pick(series.options.threshold, axis.min); - each(points, function (point) { - y = pick(point['stack' + key.toUpperCase()], point[key]); - each(breaks, function (brk) { - eventName = false; - - if ((threshold < brk.from && y > brk.to) || (threshold > brk.from && y < brk.from)) { - eventName = 'pointBreak'; - } else if ((threshold < brk.from && y > brk.from && y < brk.to) || (threshold > brk.from && y > brk.to && y < brk.from)) { // point falls inside the break - eventName = 'pointInBreak'; // docs - } - if (eventName) { - fireEvent(axis, eventName, { point: point, brk: brk }); - } - }); - }); - }); - }; - - wrap(H.seriesTypes.column.prototype, 'drawPoints', drawPointsWrapped); - wrap(H.Series.prototype, 'drawPoints', drawPointsWrapped); - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.js b/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.js deleted file mode 100644 index 1b88365a..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - A class to parse color values - @author Stoyan Stefanov <sstoo@gmail.com> - @link http://www.phpied.com/rgb-color-parser-in-javascript/ - Use it if you like it - - canvg.js - Javascript SVG parser and renderer on Canvas - MIT Licensed - Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/ - - Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - - Highcharts JS v4.2.1 (2015-12-21) - CanVGRenderer Extension module - - (c) 2011-2012 Torstein Honsi, Erik Olsson - - License: www.highcharts.com/license -*/ -function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var m=m.replace(/ /g,""),m=m.toLowerCase(),a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b", -darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff", -gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa", -lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080", -oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd", -slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/, -example:["#00ff00","336699"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0: -this.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b="0"+b);a.length==1&&(a="0"+a);d.length==1&&(d="0"+d);return"#"+b+a+d};this.getHelpXML=function(){for(var b=[],c=0;c<d.length;c++)for(var k=d[c].example,h=0;h<k.length;h++)b[b.length]=k[h];for(var j in a)b[b.length]=j;k=document.createElement("ul"); -k.setAttribute("id","rgbcolor-examples");for(c=0;c<b.length;c++)try{var l=document.createElement("li"),o=new RGBColor(b[c]),n=document.createElement("div");n.style.cssText="margin: 3px; border: 1px solid black; background:"+o.toHex()+"; color:"+o.toHex();n.appendChild(document.createTextNode("test"));var q=document.createTextNode(" "+b[c]+" -> "+o.toRGB()+" -> "+o.toHex());l.appendChild(n);l.appendChild(q);k.appendChild(l)}catch(p){}return k}} -if(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1}; -(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height}; -this.ComputeSize=function(a){return a!=null&&typeof a=="number"?a:a=="x"?this.width():a=="y"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\s+|\s+$/g,"")};a.compressSpaces=function(a){return a?a.replace(/[\s\r\t\n]+/gm," "):""};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"))? -(d.open("GET",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,""),d=new ActiveXObject("Microsoft.XMLDOM");d.async="false";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==""};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+"").match(/%$/)&& -(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=""){var f=new RGBColor(b.value);f.ok&&(c="rgba("+f.r+", "+f.g+", "+f.b+", "+d+")")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\()?#([^\)]+)\)?$/,"$2");return a.Definitions[d]},isUrl:function(){return b.value.indexOf("url(")== -0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+"";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)? -b.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+"";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+ -"";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=["normal","italic","oblique","inherit"];this.Variants=["normal","small-caps","inherit"];this.Weights="normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit".split(",");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont("","","","","",a.ctx.font);return{fontFamily:f|| -g.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(" ")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||"")).split(" "),k=!1,e=!1,f=!1,g=!1,h="",j=0;j<d.length;j++)if(!e&&c.Styles.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontStyle=d[j];e=!0}else if(!g&&c.Variants.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontVariant= -d[j];e=g=!0}else if(!f&&c.Weights.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontWeight=d[j];e=g=f=!0}else if(k)d[j]!="inherit"&&(h+=d[j]);else{if(d[j]!="inherit")b.fontSize=d[j].split("/")[0];e=g=f=k=!0}if(h!="")b.fontFamily=h;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||"").replace(/,/g," "))).split(" "),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform= -function(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2- -this.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c- -a);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k= -(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1, -0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property("angle",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x|| -0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle= -new a.Property("angle",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)}; -this.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split("(")[0],e=c[b].split("(")[1].replace(")","");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,h,j,l){var d=a.compressSpaces(d),d=d.replace(/^defer\s/,""),o=d.split(" ")[0]||"xMidYMid",d=d.split(" ")[1]||"meet",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d=="meet"&&(k*= -p,f*=p);d=="slice"&&(k*=m,f*=m);j=new a.Property("refX",j);l=new a.Property("refY",l);j.hasValue()&&l.hasValue()?c.translate(-p*j.Length.toPixels("x"),-p*l.Length.toPixels("y")):(o.match(/^xMid/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e-f));o=="none"?c.scale(n, -q):d=="meet"?c.scale(p,p):d=="slice"&&c.scale(m,m);c.translate(g==null?0:-g,h==null?0:-h)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,"");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c; -c=new a.Property(b,"");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style("display").value!="none"&&this.attribute("visibility").value!="hidden"){b.save();this.setContext(b);if(this.attribute("mask").hasValue()){var a=this.attribute("mask").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style("filter").hasValue()?(a=this.style("filter").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext= -function(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName]; -if(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute("class").hasValue())for(var d=a.compressSpaces(this.attribute("class").value).split(" "),e=0;e<d.length;e++){b=a.Styles["."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+"."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute("style").hasValue()){b=this.attribute("style").value.split(";");for(d=0;d<b.length;d++)a.trim(b[d])!=""&&(c=b[d].split(":"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k, -c))}this.attribute("id").hasValue()&&a.Definitions[this.attribute("id").value]==null&&(a.Definitions[this.attribute("id").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style("fill").Definition.isUrl()){var b=this.style("fill").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style("fill").hasValue())b=this.style("fill"),this.style("fill-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("fill-opacity").value)), -d.fillStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke").Definition.isUrl()){if(b=this.style("stroke").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style("stroke").hasValue())b=this.style("stroke"),this.style("stroke-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("stroke-opacity").value)),d.strokeStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke-width").hasValue())d.lineWidth=this.style("stroke-width").Length.toPixels();if(this.style("stroke-linecap").hasValue())d.lineCap= -this.style("stroke-linecap").value;if(this.style("stroke-linejoin").hasValue())d.lineJoin=this.style("stroke-linejoin").value;if(this.style("stroke-miterlimit").hasValue())d.miterLimit=this.style("stroke-miterlimit").value;if(typeof d.font!="undefined")d.font=a.Font.CreateFont(this.style("font-style").value,this.style("font-variant").value,this.style("font-weight").value,this.style("font-size").hasValue()?this.style("font-size").Length.toPixels()+"px":"",this.style("font-family").value).toString(); -this.attribute("transform").hasValue()&&(new a.Transform(this.attribute("transform").value)).apply(d);this.attribute("clip-path").hasValue()&&(b=this.attribute("clip-path").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style("opacity").hasValue())d.globalAlpha=this.style("opacity").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath(); -return new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=""&&d.fill();d.strokeStyle!=""&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style("marker-start").Definition.isUrl()){var c=this.style("marker-start").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style("marker-mid").Definition.isUrl())for(var c=this.style("marker-mid").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style("marker-end").Definition.isUrl()&& -(c=this.style("marker-end").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext; -this.setContext=function(d){d.strokeStyle="rgba(0,0,0,0)";d.lineCap="butt";d.lineJoin="miter";d.miterLimit=4;this.baseSetContext(d);this.attribute("x").hasValue()&&this.attribute("y").hasValue()&&d.translate(this.attribute("x").Length.toPixels("x"),this.attribute("y").Length.toPixels("y"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root=="undefined"&&this.attribute("width").hasValue()&&this.attribute("height").hasValue()){var b=this.attribute("width").Length.toPixels("x"),c=this.attribute("height").Length.toPixels("y"), -e=0,f=0;this.attribute("refX").hasValue()&&this.attribute("refY").hasValue()&&(e=-this.attribute("refX").Length.toPixels("x"),f=-this.attribute("refY").Length.toPixels("y"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute("viewBox").hasValue()){var e=a.ToNumberArray(this.attribute("viewBox").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute("preserveAspectRatio").value,a.ViewPort.width(),b,a.ViewPort.height(), -c,f,g,this.attribute("refX").value,this.attribute("refY").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("x").Length.toPixels("x"),c=this.attribute("y").Length.toPixels("y"),e=this.attribute("width").Length.toPixels("x"),f=this.attribute("height").Length.toPixels("y"),g=this.attribute("rx").Length.toPixels("x"), -h=this.attribute("ry").Length.toPixels("y");this.attribute("rx").hasValue()&&!this.attribute("ry").hasValue()&&(h=g);this.attribute("ry").hasValue()&&!this.attribute("rx").hasValue()&&(g=h);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+h),d.lineTo(b+e,c+f-h),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-h),d.lineTo(b,c+h),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype= -new a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("cx").Length.toPixels("x"),c=this.attribute("cy").Length.toPixels("y"),e=this.attribute("r").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c); -this.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute("rx").Length.toPixels("x"),e=this.attribute("ry").Length.toPixels("y"),f=this.attribute("cx").Length.toPixels("x"),g=this.attribute("cy").Length.toPixels("y");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype= -new a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute("x1").Length.toPixels("x"),this.attribute("y1").Length.toPixels("y")),new a.Point(this.attribute("x2").Length.toPixels("x"),this.attribute("y2").Length.toPixels("y"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)}; -this.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute("points").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x, -this.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x, -this.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute("d").value;c=c.replace(/,/gm," ");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,"$1 $2");c=c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([0-9])([+\-])/gm, -"$1 $2");c=c.replace(/(\.[0-9]*)(\.)/gm,"$1 $2");c=c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,"$1 $3 $4 ");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(" ");this.reset=function(){this.i=-1;this.previousCommand=this.command="";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()? -!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint(); -return this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!="c"&&this.previousCommand.toLowerCase()!="s"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length- -1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b= -this.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case "M":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case "L":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&& -d.lineTo(e.x,e.y)}break;case "H":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "V":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "C":for(;!b.isCommandOrEnd();){var g= -b.current,f=b.getPoint(),h=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,h,f);c.addBezierCurve(g.x,g.y,f.x,f.y,h.x,h.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,h.x,h.y,e.x,e.y)}break;case "S":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),h=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,h,f),c.addBezierCurve(g.x,g.y,f.x,f.y,h.x,h.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,h.x,h.y,e.x,e.y);break;case "Q":for(;!b.isCommandOrEnd();)g=b.current,h=b.getAsControlPoint(), -e=b.getAsCurrentPoint(),b.addMarker(e,h,h),c.addQuadraticCurve(g.x,g.y,h.x,h.y,e.x,e.y),d!=null&&d.quadraticCurveTo(h.x,h.y,e.x,e.y);break;case "T":for(;!b.isCommandOrEnd();)g=b.current,h=b.getReflectedControlPoint(),b.control=h,e=b.getAsCurrentPoint(),b.addMarker(e,h,h),c.addQuadraticCurve(g.x,g.y,h.x,h.y,e.x,e.y),d!=null&&d.quadraticCurveTo(h.x,h.y,e.x,e.y);break;case "A":for(;!b.isCommandOrEnd();){var g=b.current,j=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),h=b.getScalar(), -e=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(j,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(j*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==h?-1:1)*Math.sqrt((Math.pow(j,2)*Math.pow(l,2)-Math.pow(j,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(j,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*j*n.y/l,o*-l*n.x/j),g=new a.Point((g.x+e.x)/2+Math.cos(f)* -p.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/j,(n.y-p.y)/l]),q=[(n.x-p.x)/j,(n.y-p.y)/l],p=[(-n.x-p.x)/j,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);h==0&&n>0&&(n-=2*Math.PI);h==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-j*Math.cos((o+n)/ -2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(h==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(h==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=j>l?j:l,e=j>l?1:j/l,j=j>l?l/j:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,j),d.arc(0,0,m,o,o+n,1-h),d.scale(1/e,1/j),d.rotate(-f),d.translate(-g.x,-g.y))}break;case "Z":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e], -b[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);b.attributes.x=new a.Property("x",this.attribute("x").value);b.attributes.y=new a.Property("y",this.attribute("y").value);b.attributes.width=new a.Property("width",this.attribute("width").value);b.attributes.height=new a.Property("height", -this.attribute("height").value);b.children=this.children;var c=document.createElement("canvas");c.width=this.attribute("width").Length.toPixels("x");c.height=this.attribute("height").Length.toPixels("y");b.render(c.getContext("2d"));return d.createPattern(c,"repeat")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute("orient").valueOrDefault("auto")== -"auto"&&d.rotate(c);this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);e.attributes.refX=new a.Property("refX",this.attribute("refX").value);e.attributes.refY=new a.Property("refY",this.attribute("refY").value);e.attributes.width=new a.Property("width",this.attribute("markerWidth").value);e.attributes.height=new a.Property("height", -this.attribute("markerHeight").value);e.attributes.fill=new a.Property("fill",this.attribute("fill").valueOrDefault("black"));e.attributes.stroke=new a.Property("stroke",this.attribute("stroke").valueOrDefault("none"));e.children=this.children;e.render(d);d.restore();this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute("orient").valueOrDefault("auto")=="auto"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype= -new a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute("gradientUnits").valueOrDefault("objectBoundingBox");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute("xlink:href").hasValue()&& -(c=this.attribute("xlink:href").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute("gradientTransform").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property("x",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property("y",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property("width",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property("height",a.MAX_VIRTUAL_PIXELS); -var g=new a.Element.g;g.attributes.transform=new a.Property("transform",this.attribute("gradientTransform").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property("x",0);f.attributes.y=new a.Property("y",0);f.attributes.width=new a.Property("width",c.width);f.attributes.height=new a.Property("height",c.height);f.children=[g];g=document.createElement("canvas");g.width=c.width;g.height=c.height;c=g.getContext("2d");c.fillStyle=e;f.render(c);return c.createPattern(g,"no-repeat")}return e}}; -a.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("x1").numValue():this.attribute("x1").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y1").numValue():this.attribute("y1").Length.toPixels("y"),g=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("x2").numValue():this.attribute("x2").Length.toPixels("x"),c=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y2").numValue():this.attribute("y2").Length.toPixels("y");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("cx").numValue():this.attribute("cx").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("cy").numValue():this.attribute("cy").Length.toPixels("y"),g=e,h=f;this.attribute("fx").hasValue()&&(g=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("fx").numValue():this.attribute("fx").Length.toPixels("x"));this.attribute("fy").hasValue()&&(h=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("fy").numValue(): -this.attribute("fy").Length.toPixels("y"));c=this.gradientUnits=="objectBoundingBox"?(c.width()+c.height())/2*this.attribute("r").numValue():this.attribute("r").Length.toPixels();return a.createRadialGradient(g,h,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute("offset").numValue();c=this.style("stop-color");this.style("stop-opacity").hasValue()&&(c=c.Color.addOpacity(this.style("stop-opacity").value)); -this.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute("begin").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute("dur").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute("attributeType").value,b=this.attribute("attributeName").value;return a=="CSS"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue= -null;this.removed=!1;this.calcValue=function(){return""};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute("repeatCount").value=="indefinite")this.duration=0;else return this.attribute("fill").valueOrDefault("remove")=="remove"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute("type").hasValue()&& -(a=this.attribute("type").value+"("+a+")"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute("from").numValue(),b=this.attribute("to").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor= -function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute("from").value),b=new RGBColor(this.attribute("to").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return"rgb("+parseInt(c,10)+","+parseInt(e,10)+","+parseInt(a,10)+")"}return this.attribute("from").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base= -a.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type=="font-face")this.fontFace=d,d.style("font-family").hasValue()&&(a.Definitions[d.style("font-family").value]=this);else if(d.type=="missing-glyph")this.missingGlyph= -d;else if(d.type=="glyph")d.arabicForm!=""?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]=="undefined"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute("ascent").value;this.descent=this.attribute("descent").value;this.unitsPerEm=this.attribute("units-per-em").numValue()};a.Element.fontface.prototype= -new a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.unicode=this.attribute("unicode").value;this.arabicForm=this.attribute("arabic-form").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase; -this.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style("dominant-baseline").hasValue())b.textBaseline=this.style("dominant-baseline").value;if(this.style("alignment-baseline").hasValue())b.textBaseline=this.style("alignment-baseline").value};this.renderChildren= -function(b){for(var a=this.style("text-anchor").valueOrDefault("start"),c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),h=0;h<this.children.length;h++){var j=this.children[h];j.attribute("x").hasValue()?j.x=j.attribute("x").Length.toPixels("x"):(j.attribute("dx").hasValue()&&(c+=j.attribute("dx").Length.toPixels("x")),j.x=c);c=j.measureText?j.measureText(b):0;if(a!="start"&&(h==0||j.attribute("x").hasValue())){for(var l=c,o=h+1;o<this.children.length;o++){var n= -this.children[o];if(n.attribute("x").hasValue())break;l+=n.measureText?n.measureText(b):0}j.x-=a=="end"?l:l/2}c=j.x+c;j.attribute("y").hasValue()?j.y=j.attribute("y").Length.toPixels("y"):(j.attribute("dy").hasValue()&&(d+=j.attribute("dy").Length.toPixels("y")),j.y=d);d=j.y;j.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g= -"isolated";if((c==0||b[c-1]==" ")&&c<b.length-2&&b[c+1]!=" ")g="terminal";c>0&&b[c-1]!=" "&&c<b.length-2&&b[c+1]!=" "&&(g="medial");if(c>0&&b[c-1]!=" "&&(c==b.length-1||b[c+1]==" "))g="initial";typeof a.glyphs[e]!="undefined"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type=="glyph"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var k=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -e=this.parent.style("font-style").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split("").reverse().join(""));for(var g=a.ToNumberArray(this.parent.attribute("dx").value),h=0;h<f.length;h++){var j=this.getGlyph(b,f,h),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e=="italic"&&c.transform(1,0,0.4,1,0,0);j.render(c);e=="italic"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/ -l,-1/l);c.translate(-this.x,-this.y);this.x+=k*(j.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[h]!="undefined"&&!isNaN(g[h])&&(this.x+=g[h])}}else c.strokeStyle!=""&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=""&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var c=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -k=0,e=this.getText();b.isRTL&&(e=e.split("").reverse().join(""));for(var f=a.ToNumberArray(this.parent.attribute("dx").value),g=0;g<e.length;g++){var h=this.getGlyph(b,e,g);k+=(h.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!="undefined"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase; -a.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase; -a.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:"";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x, -this.y-c.Length.toPixels("y"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute("xlink:href").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor="pointer"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement("img");this.loaded=!1;var d=this;this.img.onload= -function(){d.loaded=!0};this.img.src=this.attribute("xlink:href").value;this.renderChildren=function(b){var c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute("preserveAspectRatio").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase; -a.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute("viewBox").hasValue()){var b= -a.ToNumberArray(this.attribute("viewBox").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute("preserveAspectRatio").value,this.attribute("width").Length.toPixels("x"),width,this.attribute("height").Length.toPixels("y"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue: -""),c=c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,""),c=a.compressSpaces(c),c=c.split("}"),d=0;d<c.length;d++)if(a.trim(c[d])!="")for(var b=c[d].split("{"),k=b[0].split(","),b=b[1].split(";"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=""){for(var g={},h=0;h<b.length;h++){var j=b[h].indexOf(":"),l=b[h].substr(0,j),j=b[h].substr(j+1,b[h].length-j);l!=null&&j!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(j)))}a.Styles[f]=g;if(f=="@font-face"){f=g["font-family"].value.replace(/"/g, -"");g=g.src.value.split(",");for(h=0;h<g.length;h++)if(g[h].indexOf('format("svg")')>0){l=g[h].indexOf("url");j=g[h].indexOf(")",l);l=g[h].substr(l+5,j-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName("font");for(j=0;j<l.length;j++){var o=a.CreateElement(l[j]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a); -this.attribute("x").hasValue()&&a.translate(this.attribute("x").Length.toPixels("x"),0);this.attribute("y").hasValue()&&a.translate(0,this.attribute("y").Length.toPixels("y"))};this.getDefinition=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(this.attribute("width").hasValue())a.attribute("width",!0).value=this.attribute("width").value;if(this.attribute("height").hasValue())a.attribute("height",!0).value=this.attribute("height").value;return a};this.path=function(a){var b= -this.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute("x").Length.toPixels("x"),e=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y"),h=b.attribute("mask").value;b.attribute("mask").value= -"";var j=document.createElement("canvas");j.width=c+f;j.height=e+g;var l=j.getContext("2d");this.renderChildren(l);var o=document.createElement("canvas");o.width=c+f;o.height=e+g;var n=o.getContext("2d");b.render(n);n.globalCompositeOperation="destination-in";n.fillStyle=l.createPattern(j,"no-repeat");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,"no-repeat");a.fillRect(0,0,c+f,e+g);b.attribute("mask").value=h};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath= -function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute("x").Length.toPixels("x"),f=this.attribute("y").Length.toPixels("y");if(e==0||f==0)e=c.x1,f=c.y1;var g= -this.attribute("width").Length.toPixels("x"),h=this.attribute("height").Length.toPixels("y");if(g==0||h==0)g=c.width(),h=c.height();c=b.style("filter").value;b.style("filter").value="";var j=0.2*g,l=0.2*h,o=document.createElement("canvas");o.width=g+2*j;o.height=h+2*l;var n=o.getContext("2d");n.translate(-e+j,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*j,h+2*l);a.drawImage(o,0,0,g+2*j,h+2*l,e-j,f-l,g+2*j,h+2*l);b.style("filter",!0).value=c};this.render= -function(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var h=0;h<g;h++)for(var j=0;j<f;j++)for(var l=a[h*f*4+j*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[h*f*4+j*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(j-q,0),m=a[h*f*4+p*4+3]/255,p=Math.min(j+q,f-1),p=a[h*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(j-q,0),r=a[h*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(j+q,f-1),r=a[h*f*4+r*4+o]);n+= -s*(m+r*(p==0||o==3?1:p))}c[j*g*4+h*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute("stdDeviation").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),h=Math.ceil(e*4)+1;mask=[];for(var j=0;j<h;j++)mask[j]=Math.exp(-0.5*(j/e)*(j/e));e=mask;h=0;for(j=1;j<e.length;j++)h+=Math.abs(e[j]);h=2*h+Math.abs(e[0]);for(j=0;j<e.length;j++)e[j]/=h;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype= -new a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log("ERROR: Element '"+a.nodeName+"' not yet implemented.")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,""),d=d.replace(/\-/g,""),b=null,b=typeof a.Element[d]!="undefined"?new a.Element[d](c):new a.Element.MISSING(c); -b.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)}, -c.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style("width").hasValue())c.canvas.width=k.style("width").Length.toPixels("x"),c.canvas.style.width=c.canvas.width+"px";if(k.style("height").hasValue())c.canvas.height= -k.style("height").Length.toPixels("y"),c.canvas.style.height=c.canvas.height+"px"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute("x",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute("y",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute("width").hasValue()&&(f=k.attribute("width").Length.toPixels("x")/ -a.opts.scaleWidth);k.attribute("height").hasValue()&&(g=k.attribute("height").Length.toPixels("y")/a.opts.scaleHeight);k.attribute("width",!0).value=a.opts.scaleWidth;k.attribute("height",!0).value=a.opts.scaleHeight;k.attribute("viewBox",!0).value="0 0 "+b*f+" "+d*g;k.attribute("preserveAspectRatio",!0).value="none"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback=="function"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f()); -a.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw=="function"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!= -0};this.onclick=function(a,d){this.events.push({type:"onclick",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:"onmousemove",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k= -this.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor="";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName("svg"),b=0;b<c.length;b++){a=c[b];d=document.createElement("canvas");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d, -a);a.parentNode.removeChild(a);var k=document.createElement("div");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a=="string"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext("2d"),typeof c.documentElement!="undefined"?b.loadXmlDoc(a,c):c.substr(0,1)=="<"?b.loadXml(a,c):b.load(a,c)}})(); -if(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})}; -(function(m){var a=m.win,c=m.css,d=m.CanVGRenderer,b=m.SVGRenderer,k=m.extend,e=m.merge,f=m.addEvent,g=m.createElement,h=m.discardElement;k(d.prototype,b.prototype);k(d.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,f=d.left,d=d.top,h=a.offsetWidth,k=a.offsetHeight,m={visibility:"hidden",position:"absolute"};this.init(a,b,c);this.canvas=g("canvas",{width:h,height:k},{position:"relative",left:f,top:d},a);this.ttLine= -g("div",null,m,e);this.ttDiv=g("div",null,m,e);this.ttTimer=void 0;this.hiddenSvg=a=g("div",{width:h,height:k},{visibility:"hidden",left:f,top:d},e);a.appendChild(this.box)},configure:function(a){var b=this,d=a.options.tooltip,g=d.borderWidth,h=b.ttDiv,k=d.style,m=b.ttLine,s=parseInt(k.padding,10),k=e(k,{padding:s+"px","background-color":d.backgroundColor,"border-style":"solid","border-width":g+"px","border-radius":d.borderRadius+"px"});d.shadow&&(k=e(k,{"box-shadow":"1px 1px 3px gray","-webkit-box-shadow":"1px 1px 3px gray"})); -c(h,k);c(m,{"border-left":"1px solid darkgray"});f(a,"tooltipRefresh",function(d){var e=a.container,f=e.offsetLeft,e=e.offsetTop,g;h.innerHTML=d.text;g=a.tooltip.getPosition(h.offsetWidth,h.offsetHeight,{plotX:d.x,plotY:d.y});c(h,{visibility:"visible",left:g.x+"px",top:g.y+"px","border-color":d.borderColor});c(m,{visibility:"visible",left:f+d.x+"px",top:e+a.plotTop+"px",height:a.plotHeight+"px"});b.ttTimer!==void 0&&clearTimeout(b.ttTimer);b.ttTimer=setTimeout(function(){c(h,{visibility:"hidden"}); -c(m,{visibility:"hidden"})},3E3)})},destroy:function(){h(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);h(this.ttLine);h(this.ttDiv);h(this.hiddenSvg);return b.prototype.destroy.apply(this)},color:function(a,c,d){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return b.prototype.color.call(this,a,c,d)},draw:function(){a.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts); diff --git a/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.src.js b/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.src.js deleted file mode 100644 index 477dfee9..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/canvas-tools.src.js +++ /dev/null @@ -1,3115 +0,0 @@ -/** - * @license A class to parse color values - * @author Stoyan Stefanov <sstoo@gmail.com> - * @link http://www.phpied.com/rgb-color-parser-in-javascript/ - * Use it if you like it - * - */ -function RGBColor(color_string) -{ - this.ok = false; - - // strip any leading # - if (color_string.charAt(0) == '#') { // remove # if any - color_string = color_string.substr(1,6); - } - - color_string = color_string.replace(/ /g,''); - color_string = color_string.toLowerCase(); - - // before getting into regexps, try simple matches - // and overwrite the input - var simple_colors = { - aliceblue: 'f0f8ff', - antiquewhite: 'faebd7', - aqua: '00ffff', - aquamarine: '7fffd4', - azure: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '000000', - blanchedalmond: 'ffebcd', - blue: '0000ff', - blueviolet: '8a2be2', - brown: 'a52a2a', - burlywood: 'deb887', - cadetblue: '5f9ea0', - chartreuse: '7fff00', - chocolate: 'd2691e', - coral: 'ff7f50', - cornflowerblue: '6495ed', - cornsilk: 'fff8dc', - crimson: 'dc143c', - cyan: '00ffff', - darkblue: '00008b', - darkcyan: '008b8b', - darkgoldenrod: 'b8860b', - darkgray: 'a9a9a9', - darkgreen: '006400', - darkkhaki: 'bdb76b', - darkmagenta: '8b008b', - darkolivegreen: '556b2f', - darkorange: 'ff8c00', - darkorchid: '9932cc', - darkred: '8b0000', - darksalmon: 'e9967a', - darkseagreen: '8fbc8f', - darkslateblue: '483d8b', - darkslategray: '2f4f4f', - darkturquoise: '00ced1', - darkviolet: '9400d3', - deeppink: 'ff1493', - deepskyblue: '00bfff', - dimgray: '696969', - dodgerblue: '1e90ff', - feldspar: 'd19275', - firebrick: 'b22222', - floralwhite: 'fffaf0', - forestgreen: '228b22', - fuchsia: 'ff00ff', - gainsboro: 'dcdcdc', - ghostwhite: 'f8f8ff', - gold: 'ffd700', - goldenrod: 'daa520', - gray: '808080', - green: '008000', - greenyellow: 'adff2f', - honeydew: 'f0fff0', - hotpink: 'ff69b4', - indianred : 'cd5c5c', - indigo : '4b0082', - ivory: 'fffff0', - khaki: 'f0e68c', - lavender: 'e6e6fa', - lavenderblush: 'fff0f5', - lawngreen: '7cfc00', - lemonchiffon: 'fffacd', - lightblue: 'add8e6', - lightcoral: 'f08080', - lightcyan: 'e0ffff', - lightgoldenrodyellow: 'fafad2', - lightgrey: 'd3d3d3', - lightgreen: '90ee90', - lightpink: 'ffb6c1', - lightsalmon: 'ffa07a', - lightseagreen: '20b2aa', - lightskyblue: '87cefa', - lightslateblue: '8470ff', - lightslategray: '778899', - lightsteelblue: 'b0c4de', - lightyellow: 'ffffe0', - lime: '00ff00', - limegreen: '32cd32', - linen: 'faf0e6', - magenta: 'ff00ff', - maroon: '800000', - mediumaquamarine: '66cdaa', - mediumblue: '0000cd', - mediumorchid: 'ba55d3', - mediumpurple: '9370d8', - mediumseagreen: '3cb371', - mediumslateblue: '7b68ee', - mediumspringgreen: '00fa9a', - mediumturquoise: '48d1cc', - mediumvioletred: 'c71585', - midnightblue: '191970', - mintcream: 'f5fffa', - mistyrose: 'ffe4e1', - moccasin: 'ffe4b5', - navajowhite: 'ffdead', - navy: '000080', - oldlace: 'fdf5e6', - olive: '808000', - olivedrab: '6b8e23', - orange: 'ffa500', - orangered: 'ff4500', - orchid: 'da70d6', - palegoldenrod: 'eee8aa', - palegreen: '98fb98', - paleturquoise: 'afeeee', - palevioletred: 'd87093', - papayawhip: 'ffefd5', - peachpuff: 'ffdab9', - peru: 'cd853f', - pink: 'ffc0cb', - plum: 'dda0dd', - powderblue: 'b0e0e6', - purple: '800080', - red: 'ff0000', - rosybrown: 'bc8f8f', - royalblue: '4169e1', - saddlebrown: '8b4513', - salmon: 'fa8072', - sandybrown: 'f4a460', - seagreen: '2e8b57', - seashell: 'fff5ee', - sienna: 'a0522d', - silver: 'c0c0c0', - skyblue: '87ceeb', - slateblue: '6a5acd', - slategray: '708090', - snow: 'fffafa', - springgreen: '00ff7f', - steelblue: '4682b4', - tan: 'd2b48c', - teal: '008080', - thistle: 'd8bfd8', - tomato: 'ff6347', - turquoise: '40e0d0', - violet: 'ee82ee', - violetred: 'd02090', - wheat: 'f5deb3', - white: 'ffffff', - whitesmoke: 'f5f5f5', - yellow: 'ffff00', - yellowgreen: '9acd32' - }; - for (var key in simple_colors) { - if (color_string == key) { - color_string = simple_colors[key]; - } - } - // emd of simple type-in colors - - // array of color definition objects - var color_defs = [ - { - re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, - example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], - process: function (bits){ - return [ - parseInt(bits[1]), - parseInt(bits[2]), - parseInt(bits[3]) - ]; - } - }, - { - re: /^(\w{2})(\w{2})(\w{2})$/, - example: ['#00ff00', '336699'], - process: function (bits){ - return [ - parseInt(bits[1], 16), - parseInt(bits[2], 16), - parseInt(bits[3], 16) - ]; - } - }, - { - re: /^(\w{1})(\w{1})(\w{1})$/, - example: ['#fb0', 'f0f'], - process: function (bits){ - return [ - parseInt(bits[1] + bits[1], 16), - parseInt(bits[2] + bits[2], 16), - parseInt(bits[3] + bits[3], 16) - ]; - } - } - ]; - - // search through the definitions to find a match - for (var i = 0; i < color_defs.length; i++) { - var re = color_defs[i].re; - var processor = color_defs[i].process; - var bits = re.exec(color_string); - if (bits) { - channels = processor(bits); - this.r = channels[0]; - this.g = channels[1]; - this.b = channels[2]; - this.ok = true; - } - - } - - // validate/cleanup values - this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r); - this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g); - this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b); - - // some getters - this.toRGB = function () { - return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; - } - this.toHex = function () { - var r = this.r.toString(16); - var g = this.g.toString(16); - var b = this.b.toString(16); - if (r.length == 1) r = '0' + r; - if (g.length == 1) g = '0' + g; - if (b.length == 1) b = '0' + b; - return '#' + r + g + b; - } - - // help - this.getHelpXML = function () { - - var examples = new Array(); - // add regexps - for (var i = 0; i < color_defs.length; i++) { - var example = color_defs[i].example; - for (var j = 0; j < example.length; j++) { - examples[examples.length] = example[j]; - } - } - // add type-in colors - for (var sc in simple_colors) { - examples[examples.length] = sc; - } - - var xml = document.createElement('ul'); - xml.setAttribute('id', 'rgbcolor-examples'); - for (var i = 0; i < examples.length; i++) { - try { - var list_item = document.createElement('li'); - var list_color = new RGBColor(examples[i]); - var example_div = document.createElement('div'); - example_div.style.cssText = - 'margin: 3px; ' - + 'border: 1px solid black; ' - + 'background:' + list_color.toHex() + '; ' - + 'color:' + list_color.toHex() - ; - example_div.appendChild(document.createTextNode('test')); - var list_item_value = document.createTextNode( - ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex() - ); - list_item.appendChild(example_div); - list_item.appendChild(list_item_value); - xml.appendChild(list_item); - - } catch(e){} - } - return xml; - - } - -} - -/** - * @license canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - * - */ -if(!window.console) { - window.console = {}; - window.console.log = function(str) {}; - window.console.dir = function(str) {}; -} - -if(!Array.prototype.indexOf){ - Array.prototype.indexOf = function(obj){ - for(var i=0; i<this.length; i++){ - if(this[i]==obj){ - return i; - } - } - return -1; - } -} - -(function(){ - // canvg(target, s) - // empty parameters: replace all 'svg' elements on page with 'canvas' elements - // target: canvas element or the id of a canvas element - // s: svg string, url to svg file, or xml document - // opts: optional hash of options - // ignoreMouse: true => ignore mouse events - // ignoreAnimation: true => ignore animations - // ignoreDimensions: true => does not try to resize canvas - // ignoreClear: true => does not clear canvas - // offsetX: int => draws at a x offset - // offsetY: int => draws at a y offset - // scaleWidth: int => scales horizontally to width - // scaleHeight: int => scales vertically to height - // renderCallback: function => will call the function after the first render is completed - // forceRedraw: function => will call the function on every frame, if it returns true, will redraw - this.canvg = function (target, s, opts) { - // no parameters - if (target == null && s == null && opts == null) { - var svgTags = document.getElementsByTagName('svg'); - for (var i=0; i<svgTags.length; i++) { - var svgTag = svgTags[i]; - var c = document.createElement('canvas'); - c.width = svgTag.clientWidth; - c.height = svgTag.clientHeight; - svgTag.parentNode.insertBefore(c, svgTag); - svgTag.parentNode.removeChild(svgTag); - var div = document.createElement('div'); - div.appendChild(svgTag); - canvg(c, div.innerHTML); - } - return; - } - opts = opts || {}; - - if (typeof target == 'string') { - target = document.getElementById(target); - } - - // reuse class per canvas - var svg; - if (target.svg == null) { - svg = build(); - target.svg = svg; - } - else { - svg = target.svg; - svg.stop(); - } - svg.opts = opts; - - var ctx = target.getContext('2d'); - if (typeof(s.documentElement) != 'undefined') { - // load from xml doc - svg.loadXmlDoc(ctx, s); - } - else if (s.substr(0,1) == '<') { - // load from xml string - svg.loadXml(ctx, s); - } - else { - // load from url - svg.load(ctx, s); - } - } - - function build() { - var svg = { }; - - svg.FRAMERATE = 30; - svg.MAX_VIRTUAL_PIXELS = 30000; - - // globals - svg.init = function(ctx) { - svg.Definitions = {}; - svg.Styles = {}; - svg.Animations = []; - svg.Images = []; - svg.ctx = ctx; - svg.ViewPort = new (function () { - this.viewPorts = []; - this.Clear = function() { this.viewPorts = []; } - this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); } - this.RemoveCurrent = function() { this.viewPorts.pop(); } - this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; } - this.width = function() { return this.Current().width; } - this.height = function() { return this.Current().height; } - this.ComputeSize = function(d) { - if (d != null && typeof(d) == 'number') return d; - if (d == 'x') return this.width(); - if (d == 'y') return this.height(); - return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); - } - }); - } - svg.init(); - - // images loaded - svg.ImagesLoaded = function() { - for (var i=0; i<svg.Images.length; i++) { - if (!svg.Images[i].loaded) return false; - } - return true; - } - - // trim - svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); } - - // compress spaces - svg.compressSpaces = function(s) { return s ? s.replace(/[\s\r\t\n]+/gm,' ') : ''; } - - // ajax - svg.ajax = function(url) { - var AJAX; - if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();} - else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');} - if(AJAX){ - AJAX.open('GET',url,false); - AJAX.send(null); - return AJAX.responseText; - } - return null; - } - - // parse xml - svg.parseXml = function(xml) { - if (window.DOMParser) - { - var parser = new DOMParser(); - return parser.parseFromString(xml, 'text/xml'); - } - else - { - xml = xml.replace(/<!DOCTYPE svg[^>]*>/, ''); - var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); - xmlDoc.async = 'false'; - xmlDoc.loadXML(xml); - return xmlDoc; - } - } - - svg.Property = function(name, value) { - this.name = name; - this.value = value; - - this.hasValue = function() { - return (this.value != null && this.value !== ''); - } - - // return the numerical value of the property - this.numValue = function() { - if (!this.hasValue()) return 0; - - var n = parseFloat(this.value); - if ((this.value + '').match(/%$/)) { - n = n / 100.0; - } - return n; - } - - this.valueOrDefault = function(def) { - if (this.hasValue()) return this.value; - return def; - } - - this.numValueOrDefault = function(def) { - if (this.hasValue()) return this.numValue(); - return def; - } - - /* EXTENSIONS */ - var that = this; - - // color extensions - this.Color = { - // augment the current color value with the opacity - addOpacity: function(opacity) { - var newValue = that.value; - if (opacity != null && opacity != '') { - var color = new RGBColor(that.value); - if (color.ok) { - newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')'; - } - } - return new svg.Property(that.name, newValue); - } - } - - // definition extensions - this.Definition = { - // get the definition from the definitions table - getDefinition: function() { - var name = that.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); - return svg.Definitions[name]; - }, - - isUrl: function() { - return that.value.indexOf('url(') == 0 - }, - - getFillStyle: function(e) { - var def = this.getDefinition(); - - // gradient - if (def != null && def.createGradient) { - return def.createGradient(svg.ctx, e); - } - - // pattern - if (def != null && def.createPattern) { - return def.createPattern(svg.ctx, e); - } - - return null; - } - } - - // length extensions - this.Length = { - DPI: function(viewPort) { - return 96.0; // TODO: compute? - }, - - EM: function(viewPort) { - var em = 12; - - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - if (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort); - - return em; - }, - - // get the length as pixels - toPixels: function(viewPort) { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/em$/)) return that.numValue() * this.EM(viewPort); - if (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0; - if (s.match(/px$/)) return that.numValue(); - if (s.match(/pt$/)) return that.numValue() * 1.25; - if (s.match(/pc$/)) return that.numValue() * 15; - if (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54; - if (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4; - if (s.match(/in$/)) return that.numValue() * this.DPI(viewPort); - if (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort); - return that.numValue(); - } - } - - // time extensions - this.Time = { - // get the time as milliseconds - toMilliseconds: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/s$/)) return that.numValue() * 1000; - if (s.match(/ms$/)) return that.numValue(); - return that.numValue(); - } - } - - // angle extensions - this.Angle = { - // get the angle as radians - toRadians: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0); - if (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0); - if (s.match(/rad$/)) return that.numValue(); - return that.numValue() * (Math.PI / 180.0); - } - } - } - - // fonts - svg.Font = new (function() { - this.Styles = ['normal','italic','oblique','inherit']; - this.Variants = ['normal','small-caps','inherit']; - this.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit']; - - this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { - var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font); - return { - fontFamily: fontFamily || f.fontFamily, - fontSize: fontSize || f.fontSize, - fontStyle: fontStyle || f.fontStyle, - fontWeight: fontWeight || f.fontWeight, - fontVariant: fontVariant || f.fontVariant, - toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } - } - } - - var that = this; - this.Parse = function(s) { - var f = {}; - var d = svg.trim(svg.compressSpaces(s || '')).split(' '); - var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false } - var ff = ''; - for (var i=0; i<d.length; i++) { - if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; } - else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; } - else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; } - else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; } - else { if (d[i] != 'inherit') ff += d[i]; } - } if (ff != '') f.fontFamily = ff; - return f; - } - }); - - // points and paths - svg.ToNumberArray = function(s) { - var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' '); - for (var i=0; i<a.length; i++) { - a[i] = parseFloat(a[i]); - } - return a; - } - svg.Point = function(x, y) { - this.x = x; - this.y = y; - - this.angleTo = function(p) { - return Math.atan2(p.y - this.y, p.x - this.x); - } - - this.applyTransform = function(v) { - var xp = this.x * v[0] + this.y * v[2] + v[4]; - var yp = this.x * v[1] + this.y * v[3] + v[5]; - this.x = xp; - this.y = yp; - } - } - svg.CreatePoint = function(s) { - var a = svg.ToNumberArray(s); - return new svg.Point(a[0], a[1]); - } - svg.CreatePath = function(s) { - var a = svg.ToNumberArray(s); - var path = []; - for (var i=0; i<a.length; i+=2) { - path.push(new svg.Point(a[i], a[i+1])); - } - return path; - } - - // bounding box - svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - - this.x = function() { return this.x1; } - this.y = function() { return this.y1; } - this.width = function() { return this.x2 - this.x1; } - this.height = function() { return this.y2 - this.y1; } - - this.addPoint = function(x, y) { - if (x != null) { - if (isNaN(this.x1) || isNaN(this.x2)) { - this.x1 = x; - this.x2 = x; - } - if (x < this.x1) this.x1 = x; - if (x > this.x2) this.x2 = x; - } - - if (y != null) { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - } - this.addX = function(x) { this.addPoint(x, null); } - this.addY = function(y) { this.addPoint(null, y); } - - this.addBoundingBox = function(bb) { - this.addPoint(bb.x1, bb.y1); - this.addPoint(bb.x2, bb.y2); - } - - this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { - var cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0) - var cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0) - this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); - } - - this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - var p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y]; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - - for (i=0; i<=1; i++) { - var f = function(t) { - return Math.pow(1-t, 3) * p0[i] - + 3 * Math.pow(1-t, 2) * t * p1[i] - + 3 * (1-t) * Math.pow(t, 2) * p2[i] - + Math.pow(t, 3) * p3[i]; - } - - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - - if (a == 0) { - if (b == 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i == 0) this.addX(f(t)); - if (i == 1) this.addY(f(t)); - } - continue; - } - - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i == 0) this.addX(f(t1)); - if (i == 1) this.addY(f(t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i == 0) this.addX(f(t2)); - if (i == 1) this.addY(f(t2)); - } - } - } - - this.isPointInBox = function(x, y) { - return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2); - } - - this.addPoint(x1, y1); - this.addPoint(x2, y2); - } - - // transforms - svg.Transform = function(v) { - var that = this; - this.Type = {} - - // translate - this.Type.translate = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.translate(this.p.x || 0.0, this.p.y || 0.0); - } - this.applyToPoint = function(p) { - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - } - } - - // rotate - this.Type.rotate = function(s) { - var a = svg.ToNumberArray(s); - this.angle = new svg.Property('angle', a[0]); - this.cx = a[1] || 0; - this.cy = a[2] || 0; - this.apply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(this.angle.Angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - } - this.applyToPoint = function(p) { - var a = this.angle.Angle.toRadians(); - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); - p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]); - } - } - - this.Type.scale = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0); - } - this.applyToPoint = function(p) { - p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]); - } - } - - this.Type.matrix = function(s) { - this.m = svg.ToNumberArray(s); - this.apply = function(ctx) { - ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); - } - this.applyToPoint = function(p) { - p.applyTransform(this.m); - } - } - - this.Type.SkewBase = function(s) { - this.base = that.Type.matrix; - this.base(s); - this.angle = new svg.Property('angle', s); - } - this.Type.SkewBase.prototype = new this.Type.matrix; - - this.Type.skewX = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0]; - } - this.Type.skewX.prototype = new this.Type.SkewBase; - - this.Type.skewY = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0]; - } - this.Type.skewY.prototype = new this.Type.SkewBase; - - this.transforms = []; - - this.apply = function(ctx) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].apply(ctx); - } - } - - this.applyToPoint = function(p) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].applyToPoint(p); - } - } - - var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/); - for (var i=0; i<data.length; i++) { - var type = data[i].split('(')[0]; - var s = data[i].split('(')[1].replace(')',''); - var transform = new this.Type[type](s); - this.transforms.push(transform); - } - } - - // aspect ratio - svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { - // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute - aspectRatio = svg.compressSpaces(aspectRatio); - aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer - var align = aspectRatio.split(' ')[0] || 'xMidYMid'; - var meetOrSlice = aspectRatio.split(' ')[1] || 'meet'; - - // calculate scale - var scaleX = width / desiredWidth; - var scaleY = height / desiredHeight; - var scaleMin = Math.min(scaleX, scaleY); - var scaleMax = Math.max(scaleX, scaleY); - if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; } - if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; } - - refX = new svg.Property('refX', refX); - refY = new svg.Property('refY', refY); - if (refX.hasValue() && refY.hasValue()) { - ctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y')); - } - else { - // align - if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); - if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); - if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); - if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); - } - - // scale - if (align == 'none') ctx.scale(scaleX, scaleY); - else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); - else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); - - // translate - ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); - } - - // elements - svg.Element = {} - - svg.Element.ElementBase = function(node) { - this.attributes = {}; - this.styles = {}; - this.children = []; - - // get or create attribute - this.attribute = function(name, createIfNotExists) { - var a = this.attributes[name]; - if (a != null) return a; - - a = new svg.Property(name, ''); - if (createIfNotExists == true) this.attributes[name] = a; - return a; - } - - // get or create style, crawls up node tree - this.style = function(name, createIfNotExists) { - var s = this.styles[name]; - if (s != null) return s; - - var a = this.attribute(name); - if (a != null && a.hasValue()) { - return a; - } - - var p = this.parent; - if (p != null) { - var ps = p.style(name); - if (ps != null && ps.hasValue()) { - return ps; - } - } - - s = new svg.Property(name, ''); - if (createIfNotExists == true) this.styles[name] = s; - return s; - } - - // base render - this.render = function(ctx) { - // don't render display=none - if (this.style('display').value == 'none') return; - - // don't render visibility=hidden - if (this.attribute('visibility').value == 'hidden') return; - - ctx.save(); - this.setContext(ctx); - // mask - if (this.attribute('mask').hasValue()) { - var mask = this.attribute('mask').Definition.getDefinition(); - if (mask != null) mask.apply(ctx, this); - } - else if (this.style('filter').hasValue()) { - var filter = this.style('filter').Definition.getDefinition(); - if (filter != null) filter.apply(ctx, this); - } - else this.renderChildren(ctx); - this.clearContext(ctx); - ctx.restore(); - } - - // base set context - this.setContext = function(ctx) { - // OVERRIDE ME! - } - - // base clear context - this.clearContext = function(ctx) { - // OVERRIDE ME! - } - - // base render children - this.renderChildren = function(ctx) { - for (var i=0; i<this.children.length; i++) { - this.children[i].render(ctx); - } - } - - this.addChild = function(childNode, create) { - var child = childNode; - if (create) child = svg.CreateElement(childNode); - child.parent = this; - this.children.push(child); - } - - if (node != null && node.nodeType == 1) { //ELEMENT_NODE - // add children - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE - } - - // add attributes - for (var i=0; i<node.attributes.length; i++) { - var attribute = node.attributes[i]; - this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue); - } - - // add tag styles - var styles = svg.Styles[node.nodeName]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - - // add class styles - if (this.attribute('class').hasValue()) { - var classes = svg.compressSpaces(this.attribute('class').value).split(' '); - for (var j=0; j<classes.length; j++) { - styles = svg.Styles['.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - styles = svg.Styles[node.nodeName+'.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - } - } - - // add inline styles - if (this.attribute('style').hasValue()) { - var styles = this.attribute('style').value.split(';'); - for (var i=0; i<styles.length; i++) { - if (svg.trim(styles[i]) != '') { - var style = styles[i].split(':'); - var name = svg.trim(style[0]); - var value = svg.trim(style[1]); - this.styles[name] = new svg.Property(name, value); - } - } - } - - // add id - if (this.attribute('id').hasValue()) { - if (svg.Definitions[this.attribute('id').value] == null) { - svg.Definitions[this.attribute('id').value] = this; - } - } - } - } - - svg.Element.RenderedElementBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.setContext = function(ctx) { - // fill - if (this.style('fill').Definition.isUrl()) { - var fs = this.style('fill').Definition.getFillStyle(this); - if (fs != null) ctx.fillStyle = fs; - } - else if (this.style('fill').hasValue()) { - var fillStyle = this.style('fill'); - if (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value); - ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value); - } - - // stroke - if (this.style('stroke').Definition.isUrl()) { - var fs = this.style('stroke').Definition.getFillStyle(this); - if (fs != null) ctx.strokeStyle = fs; - } - else if (this.style('stroke').hasValue()) { - var strokeStyle = this.style('stroke'); - if (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value); - ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value); - } - if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels(); - if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value; - if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value; - if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value; - - // font - if (typeof(ctx.font) != 'undefined') { - ctx.font = svg.Font.CreateFont( - this.style('font-style').value, - this.style('font-variant').value, - this.style('font-weight').value, - this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', - this.style('font-family').value).toString(); - } - - // transform - if (this.attribute('transform').hasValue()) { - var transform = new svg.Transform(this.attribute('transform').value); - transform.apply(ctx); - } - - // clip - if (this.attribute('clip-path').hasValue()) { - var clip = this.attribute('clip-path').Definition.getDefinition(); - if (clip != null) clip.apply(ctx); - } - - // opacity - if (this.style('opacity').hasValue()) { - ctx.globalAlpha = this.style('opacity').numValue(); - } - } - } - svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase; - - svg.Element.PathElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.path = function(ctx) { - if (ctx != null) ctx.beginPath(); - return new svg.BoundingBox(); - } - - this.renderChildren = function(ctx) { - this.path(ctx); - svg.Mouse.checkPath(this, ctx); - if (ctx.fillStyle != '') ctx.fill(); - if (ctx.strokeStyle != '') ctx.stroke(); - - var markers = this.getMarkers(); - if (markers != null) { - if (this.style('marker-start').Definition.isUrl()) { - var marker = this.style('marker-start').Definition.getDefinition(); - marker.render(ctx, markers[0][0], markers[0][1]); - } - if (this.style('marker-mid').Definition.isUrl()) { - var marker = this.style('marker-mid').Definition.getDefinition(); - for (var i=1;i<markers.length-1;i++) { - marker.render(ctx, markers[i][0], markers[i][1]); - } - } - if (this.style('marker-end').Definition.isUrl()) { - var marker = this.style('marker-end').Definition.getDefinition(); - marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]); - } - } - } - - this.getBoundingBox = function() { - return this.path(); - } - - this.getMarkers = function() { - return null; - } - } - svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase; - - // svg element - svg.Element.svg = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseClearContext = this.clearContext; - this.clearContext = function(ctx) { - this.baseClearContext(ctx); - svg.ViewPort.RemoveCurrent(); - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - // initial values - ctx.strokeStyle = 'rgba(0,0,0,0)'; - ctx.lineCap = 'butt'; - ctx.lineJoin = 'miter'; - ctx.miterLimit = 4; - - this.baseSetContext(ctx); - - // create new view port - if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) { - ctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y')); - } - - var width = svg.ViewPort.width(); - var height = svg.ViewPort.height(); - if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) { - width = this.attribute('width').Length.toPixels('x'); - height = this.attribute('height').Length.toPixels('y'); - - var x = 0; - var y = 0; - if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) { - x = -this.attribute('refX').Length.toPixels('x'); - y = -this.attribute('refY').Length.toPixels('y'); - } - - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(width, y); - ctx.lineTo(width, height); - ctx.lineTo(x, height); - ctx.closePath(); - ctx.clip(); - } - svg.ViewPort.SetCurrent(width, height); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - svg.ViewPort.width(), - width, - svg.ViewPort.height(), - height, - minX, - minY, - this.attribute('refX').value, - this.attribute('refY').value); - - svg.ViewPort.RemoveCurrent(); - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.svg.prototype = new svg.Element.RenderedElementBase; - - // rect element - svg.Element.rect = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx; - if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry; - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(x + rx, y); - ctx.lineTo(x + width - rx, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + ry) - ctx.lineTo(x + width, y + height - ry); - ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height) - ctx.lineTo(x + rx, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - ry) - ctx.lineTo(x, y + ry); - ctx.quadraticCurveTo(x, y, x + rx, y) - ctx.closePath(); - } - - return new svg.BoundingBox(x, y, x + width, y + height); - } - } - svg.Element.rect.prototype = new svg.Element.PathElementBase; - - // circle element - svg.Element.circle = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - var r = this.attribute('r').Length.toPixels(); - - if (ctx != null) { - ctx.beginPath(); - ctx.arc(cx, cy, r, 0, Math.PI * 2, true); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); - } - } - svg.Element.circle.prototype = new svg.Element.PathElementBase; - - // ellipse element - svg.Element.ellipse = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(cx, cy - ry); - ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy); - ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry); - ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy); - ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); - } - } - svg.Element.ellipse.prototype = new svg.Element.PathElementBase; - - // line element - svg.Element.line = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.getPoints = function() { - return [ - new svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')), - new svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))]; - } - - this.path = function(ctx) { - var points = this.getPoints(); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - ctx.lineTo(points[1].x, points[1].y); - } - - return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); - } - - this.getMarkers = function() { - var points = this.getPoints(); - var a = points[0].angleTo(points[1]); - return [[points[0], a], [points[1], a]]; - } - } - svg.Element.line.prototype = new svg.Element.PathElementBase; - - // polyline element - svg.Element.polyline = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.points = svg.CreatePath(this.attribute('points').value); - this.path = function(ctx) { - var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); - } - for (var i=1; i<this.points.length; i++) { - bb.addPoint(this.points[i].x, this.points[i].y); - if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); - } - return bb; - } - - this.getMarkers = function() { - var markers = []; - for (var i=0; i<this.points.length - 1; i++) { - markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]); - } - markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]); - return markers; - } - } - svg.Element.polyline.prototype = new svg.Element.PathElementBase; - - // polygon element - svg.Element.polygon = function(node) { - this.base = svg.Element.polyline; - this.base(node); - - this.basePath = this.path; - this.path = function(ctx) { - var bb = this.basePath(ctx); - if (ctx != null) { - ctx.lineTo(this.points[0].x, this.points[0].y); - ctx.closePath(); - } - return bb; - } - } - svg.Element.polygon.prototype = new svg.Element.polyline; - - // path element - svg.Element.path = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - var d = this.attribute('d').value; - // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF - d = d.replace(/,/gm,' '); // get rid of all commas - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax - d = svg.compressSpaces(d); // compress multiple spaces - d = svg.trim(d); - this.PathParser = new (function(d) { - this.tokens = d.split(' '); - - this.reset = function() { - this.i = -1; - this.command = ''; - this.previousCommand = ''; - this.start = new svg.Point(0, 0); - this.control = new svg.Point(0, 0); - this.current = new svg.Point(0, 0); - this.points = []; - this.angles = []; - } - - this.isEnd = function() { - return this.i >= this.tokens.length - 1; - } - - this.isCommandOrEnd = function() { - if (this.isEnd()) return true; - return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; - } - - this.isRelativeCommand = function() { - return this.command == this.command.toLowerCase(); - } - - this.getToken = function() { - this.i = this.i + 1; - return this.tokens[this.i]; - } - - this.getScalar = function() { - return parseFloat(this.getToken()); - } - - this.nextCommand = function() { - this.previousCommand = this.command; - this.command = this.getToken(); - } - - this.getPoint = function() { - var p = new svg.Point(this.getScalar(), this.getScalar()); - return this.makeAbsolute(p); - } - - this.getAsControlPoint = function() { - var p = this.getPoint(); - this.control = p; - return p; - } - - this.getAsCurrentPoint = function() { - var p = this.getPoint(); - this.current = p; - return p; - } - - this.getReflectedControlPoint = function() { - if (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') { - return this.current; - } - - // reflect point - var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); - return p; - } - - this.makeAbsolute = function(p) { - if (this.isRelativeCommand()) { - p.x = this.current.x + p.x; - p.y = this.current.y + p.y; - } - return p; - } - - this.addMarker = function(p, from, priorTo) { - // if the last angle isn't filled in because we didn't have this point yet ... - if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) { - this.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo); - } - this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); - } - - this.addMarkerAngle = function(p, a) { - this.points.push(p); - this.angles.push(a); - } - - this.getMarkerPoints = function() { return this.points; } - this.getMarkerAngles = function() { - for (var i=0; i<this.angles.length; i++) { - if (this.angles[i] == null) { - for (var j=i+1; j<this.angles.length; j++) { - if (this.angles[j] != null) { - this.angles[i] = this.angles[j]; - break; - } - } - } - } - return this.angles; - } - })(d); - - this.path = function(ctx) { - var pp = this.PathParser; - pp.reset(); - - var bb = new svg.BoundingBox(); - if (ctx != null) ctx.beginPath(); - while (!pp.isEnd()) { - pp.nextCommand(); - switch (pp.command.toUpperCase()) { - case 'M': - var p = pp.getAsCurrentPoint(); - pp.addMarker(p); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.moveTo(p.x, p.y); - pp.start = pp.current; - while (!pp.isCommandOrEnd()) { - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, pp.start); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'L': - while (!pp.isCommandOrEnd()) { - var c = pp.current; - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, c); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'H': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'V': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'C': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'S': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getReflectedControlPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'Q': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'T': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getReflectedControlPoint(); - pp.control = cntrl; - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'A': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var rx = pp.getScalar(); - var ry = pp.getScalar(); - var xAxisRotation = pp.getScalar() * (Math.PI / 180.0); - var largeArcFlag = pp.getScalar(); - var sweepFlag = pp.getScalar(); - var cp = pp.getAsCurrentPoint(); - - // Conversion from endpoint to center parameterization - // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - // x1', y1' - var currp = new svg.Point( - Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0, - -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0 - ); - // adjust radii - var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2); - if (l > 1) { - rx *= Math.sqrt(l); - ry *= Math.sqrt(l); - } - // cx', cy' - var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( - ((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) / - (Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2)) - ); - if (isNaN(s)) s = 0; - var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); - // cx, cy - var centp = new svg.Point( - (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, - (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y - ); - // vector magnitude - var m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); } - // ratio between two vectors - var r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) } - // angle between two vectors - var a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); } - // initial angle - var a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]); - // angle delta - var u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]; - var v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry]; - var ad = a(u, v); - if (r(u,v) <= -1) ad = Math.PI; - if (r(u,v) >= 1) ad = 0; - - if (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI; - if (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI; - - // for markers - var halfWay = new svg.Point( - centp.x - rx * Math.cos((a1 + ad) / 2), - centp.y - ry * Math.sin((a1 + ad) / 2) - ); - pp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - pp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - - bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better - if (ctx != null) { - var r = rx > ry ? rx : ry; - var sx = rx > ry ? 1 : rx / ry; - var sy = rx > ry ? ry / rx : 1; - - ctx.translate(centp.x, centp.y); - ctx.rotate(xAxisRotation); - ctx.scale(sx, sy); - ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); - ctx.scale(1/sx, 1/sy); - ctx.rotate(-xAxisRotation); - ctx.translate(-centp.x, -centp.y); - } - } - break; - case 'Z': - if (ctx != null) ctx.closePath(); - pp.current = pp.start; - } - } - - return bb; - } - - this.getMarkers = function() { - var points = this.PathParser.getMarkerPoints(); - var angles = this.PathParser.getMarkerAngles(); - - var markers = []; - for (var i=0; i<points.length; i++) { - markers.push([points[i], angles[i]]); - } - return markers; - } - } - svg.Element.path.prototype = new svg.Element.PathElementBase; - - // pattern element - svg.Element.pattern = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.createPattern = function(ctx, element) { - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value); - tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value); - tempSvg.children = this.children; - - var c = document.createElement('canvas'); - c.width = this.attribute('width').Length.toPixels('x'); - c.height = this.attribute('height').Length.toPixels('y'); - tempSvg.render(c.getContext('2d')); - return ctx.createPattern(c, 'repeat'); - } - } - svg.Element.pattern.prototype = new svg.Element.ElementBase; - - // marker element - svg.Element.marker = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.baseRender = this.render; - this.render = function(ctx, point, angle) { - ctx.translate(point.x, point.y); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth); - ctx.save(); - - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value); - tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value); - tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black')); - tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none')); - tempSvg.children = this.children; - tempSvg.render(ctx); - - ctx.restore(); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle); - ctx.translate(-point.x, -point.y); - } - } - svg.Element.marker.prototype = new svg.Element.ElementBase; - - // definitions element - svg.Element.defs = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.render = function(ctx) { - // NOOP - } - } - svg.Element.defs.prototype = new svg.Element.ElementBase; - - // base for gradients - svg.Element.GradientBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); - - this.stops = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - this.stops.push(child); - } - - this.getGradient = function() { - // OVERRIDE ME! - } - - this.createGradient = function(ctx, element) { - var stopsContainer = this; - if (this.attribute('xlink:href').hasValue()) { - stopsContainer = this.attribute('xlink:href').Definition.getDefinition(); - } - - var g = this.getGradient(ctx, element); - for (var i=0; i<stopsContainer.stops.length; i++) { - g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color); - } - - if (this.attribute('gradientTransform').hasValue()) { - // render as transformed pattern on temporary canvas - var rootView = svg.ViewPort.viewPorts[0]; - - var rect = new svg.Element.rect(); - rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS); - rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS); - - var group = new svg.Element.g(); - group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value); - group.children = [ rect ]; - - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['x'] = new svg.Property('x', 0); - tempSvg.attributes['y'] = new svg.Property('y', 0); - tempSvg.attributes['width'] = new svg.Property('width', rootView.width); - tempSvg.attributes['height'] = new svg.Property('height', rootView.height); - tempSvg.children = [ group ]; - - var c = document.createElement('canvas'); - c.width = rootView.width; - c.height = rootView.height; - var tempCtx = c.getContext('2d'); - tempCtx.fillStyle = g; - tempSvg.render(tempCtx); - return tempCtx.createPattern(c, 'no-repeat'); - } - - return g; - } - } - svg.Element.GradientBase.prototype = new svg.Element.ElementBase; - - // linear gradient element - svg.Element.linearGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var x1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x1').numValue() - : this.attribute('x1').Length.toPixels('x')); - var y1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y1').numValue() - : this.attribute('y1').Length.toPixels('y')); - var x2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x2').numValue() - : this.attribute('x2').Length.toPixels('x')); - var y2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y2').numValue() - : this.attribute('y2').Length.toPixels('y')); - - return ctx.createLinearGradient(x1, y1, x2, y2); - } - } - svg.Element.linearGradient.prototype = new svg.Element.GradientBase; - - // radial gradient element - svg.Element.radialGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var cx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('cx').numValue() - : this.attribute('cx').Length.toPixels('x')); - var cy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('cy').numValue() - : this.attribute('cy').Length.toPixels('y')); - - var fx = cx; - var fy = cy; - if (this.attribute('fx').hasValue()) { - fx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('fx').numValue() - : this.attribute('fx').Length.toPixels('x')); - } - if (this.attribute('fy').hasValue()) { - fy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('fy').numValue() - : this.attribute('fy').Length.toPixels('y')); - } - - var r = (this.gradientUnits == 'objectBoundingBox' - ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue() - : this.attribute('r').Length.toPixels()); - - return ctx.createRadialGradient(fx, fy, 0, cx, cy, r); - } - } - svg.Element.radialGradient.prototype = new svg.Element.GradientBase; - - // gradient stop element - svg.Element.stop = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.offset = this.attribute('offset').numValue(); - - var stopColor = this.style('stop-color'); - if (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value); - this.color = stopColor.value; - } - svg.Element.stop.prototype = new svg.Element.ElementBase; - - // animation base element - svg.Element.AnimateBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - svg.Animations.push(this); - - this.duration = 0.0; - this.begin = this.attribute('begin').Time.toMilliseconds(); - this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds(); - - this.getProperty = function() { - var attributeType = this.attribute('attributeType').value; - var attributeName = this.attribute('attributeName').value; - - if (attributeType == 'CSS') { - return this.parent.style(attributeName, true); - } - return this.parent.attribute(attributeName, true); - }; - - this.initialValue = null; - this.removed = false; - - this.calcValue = function() { - // OVERRIDE ME! - return ''; - } - - this.update = function(delta) { - // set initial value - if (this.initialValue == null) { - this.initialValue = this.getProperty().value; - } - - // if we're past the end time - if (this.duration > this.maxDuration) { - // loop for indefinitely repeating animations - if (this.attribute('repeatCount').value == 'indefinite') { - this.duration = 0.0 - } - else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) { - this.removed = true; - this.getProperty().value = this.initialValue; - return true; - } - else { - return false; // no updates made - } - } - this.duration = this.duration + delta; - - // if we're past the begin time - var updated = false; - if (this.begin < this.duration) { - var newValue = this.calcValue(); // tween - - if (this.attribute('type').hasValue()) { - // for transform, etc. - var type = this.attribute('type').value; - newValue = type + '(' + newValue + ')'; - } - - this.getProperty().value = newValue; - updated = true; - } - - return updated; - } - - // fraction of duration we've covered - this.progress = function() { - return ((this.duration - this.begin) / (this.maxDuration - this.begin)); - } - } - svg.Element.AnimateBase.prototype = new svg.Element.ElementBase; - - // animate element - svg.Element.animate = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = this.attribute('from').numValue(); - var to = this.attribute('to').numValue(); - - // tween value linearly - return from + (to - from) * this.progress(); - }; - } - svg.Element.animate.prototype = new svg.Element.AnimateBase; - - // animate color element - svg.Element.animateColor = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = new RGBColor(this.attribute('from').value); - var to = new RGBColor(this.attribute('to').value); - - if (from.ok && to.ok) { - // tween color linearly - var r = from.r + (to.r - from.r) * this.progress(); - var g = from.g + (to.g - from.g) * this.progress(); - var b = from.b + (to.b - from.b) * this.progress(); - return 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')'; - } - return this.attribute('from').value; - }; - } - svg.Element.animateColor.prototype = new svg.Element.AnimateBase; - - // animate transform element - svg.Element.animateTransform = function(node) { - this.base = svg.Element.animate; - this.base(node); - } - svg.Element.animateTransform.prototype = new svg.Element.animate; - - // font element - svg.Element.font = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - - this.isRTL = false; - this.isArabic = false; - this.fontFace = null; - this.missingGlyph = null; - this.glyphs = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - if (child.type == 'font-face') { - this.fontFace = child; - if (child.style('font-family').hasValue()) { - svg.Definitions[child.style('font-family').value] = this; - } - } - else if (child.type == 'missing-glyph') this.missingGlyph = child; - else if (child.type == 'glyph') { - if (child.arabicForm != '') { - this.isRTL = true; - this.isArabic = true; - if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = []; - this.glyphs[child.unicode][child.arabicForm] = child; - } - else { - this.glyphs[child.unicode] = child; - } - } - } - } - svg.Element.font.prototype = new svg.Element.ElementBase; - - // font-face element - svg.Element.fontface = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.ascent = this.attribute('ascent').value; - this.descent = this.attribute('descent').value; - this.unitsPerEm = this.attribute('units-per-em').numValue(); - } - svg.Element.fontface.prototype = new svg.Element.ElementBase; - - // missing-glyph element - svg.Element.missingglyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = 0; - } - svg.Element.missingglyph.prototype = new svg.Element.path; - - // glyph element - svg.Element.glyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - this.unicode = this.attribute('unicode').value; - this.arabicForm = this.attribute('arabic-form').value; - } - svg.Element.glyph.prototype = new svg.Element.path; - - // text element - svg.Element.text = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - if (node != null) { - // add children - this.children = []; - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) { // capture tspan and tref nodes - this.addChild(childNode, true); - } - else if (childNode.nodeType == 3) { // capture text - this.addChild(new svg.Element.tspan(childNode), false); - } - } - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value; - if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value; - } - - this.renderChildren = function(ctx) { - var textAnchor = this.style('text-anchor').valueOrDefault('start'); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - - if (child.attribute('x').hasValue()) { - child.x = child.attribute('x').Length.toPixels('x'); - } - else { - if (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x'); - child.x = x; - } - - var childLength = child.measureText ? child.measureText(ctx) : 0; - if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group? - // loop through rest of children - var groupLength = childLength; - for (var j=i+1; j<this.children.length; j++) { - var childInGroup = this.children[j]; - if (childInGroup.attribute('x').hasValue()) break; // new group - groupLength += childInGroup.measureText ? childInGroup.measureText(ctx) : 0; - } - child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0); - } - x = child.x + childLength; - - if (child.attribute('y').hasValue()) { - child.y = child.attribute('y').Length.toPixels('y'); - } - else { - if (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y'); - child.y = y; - } - y = child.y; - - child.render(ctx); - } - } - } - svg.Element.text.prototype = new svg.Element.RenderedElementBase; - - // text base - svg.Element.TextElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getGlyph = function(font, text, i) { - var c = text[i]; - var glyph = null; - if (font.isArabic) { - var arabicForm = 'isolated'; - if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; - if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial'; - if (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial'; - if (typeof(font.glyphs[c]) != 'undefined') { - glyph = font.glyphs[c][arabicForm]; - if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c]; - } - } - else { - glyph = font.glyphs[c]; - } - if (glyph == null) glyph = font.missingGlyph; - return glyph; - } - - this.renderChildren = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - var scale = fontSize / customFont.fontFace.unitsPerEm; - ctx.translate(this.x, this.y); - ctx.scale(scale, -scale); - var lw = ctx.lineWidth; - ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; - if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0); - glyph.render(ctx); - if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0); - ctx.lineWidth = lw; - ctx.scale(1/scale, -1/scale); - ctx.translate(-this.x, -this.y); - - this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - this.x += dx[i]; - } - } - return; - } - - if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); - if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); - } - - this.getText = function() { - // OVERRIDE ME - } - - this.measureText = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var measure = 0; - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - measure += dx[i]; - } - } - return measure; - } - - var textToMeasure = svg.compressSpaces(this.getText()); - if (!ctx.measureText) return textToMeasure.length * 10; - - ctx.save(); - this.setContext(ctx); - var width = ctx.measureText(textToMeasure).width; - ctx.restore(); - return width; - } - } - svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase; - - // tspan - svg.Element.tspan = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.text = node.nodeType == 3 ? node.nodeValue : // text - node.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element - node.text; - this.getText = function() { - return this.text; - } - } - svg.Element.tspan.prototype = new svg.Element.TextElementBase; - - // tref - svg.Element.tref = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.getText = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (element != null) return element.children[0].getText(); - } - } - svg.Element.tref.prototype = new svg.Element.TextElementBase; - - // a element - svg.Element.a = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.hasText = true; - for (var i=0; i<node.childNodes.length; i++) { - if (node.childNodes[i].nodeType != 3) this.hasText = false; - } - - // this might contain text - this.text = this.hasText ? node.childNodes[0].nodeValue : ''; - this.getText = function() { - return this.text; - } - - this.baseRenderChildren = this.renderChildren; - this.renderChildren = function(ctx) { - if (this.hasText) { - // render as text element - this.baseRenderChildren(ctx); - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y)); - } - else { - // render as temporary group - var g = new svg.Element.g(); - g.children = this.children; - g.parent = this; - g.render(ctx); - } - } - - this.onclick = function() { - window.open(this.attribute('xlink:href').value); - } - - this.onmousemove = function() { - svg.ctx.canvas.style.cursor = 'pointer'; - } - } - svg.Element.a.prototype = new svg.Element.TextElementBase; - - // image element - svg.Element.image = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - svg.Images.push(this); - this.img = document.createElement('img'); - this.loaded = false; - var that = this; - this.img.onload = function() { that.loaded = true; } - this.img.src = this.attribute('xlink:href').value; - - this.renderChildren = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) return; - - ctx.save(); - ctx.translate(x, y); - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - width, - this.img.width, - height, - this.img.height, - 0, - 0); - ctx.drawImage(this.img, 0, 0); - ctx.restore(); - } - } - svg.Element.image.prototype = new svg.Element.RenderedElementBase; - - // group element - svg.Element.g = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getBoundingBox = function() { - var bb = new svg.BoundingBox(); - for (var i=0; i<this.children.length; i++) { - bb.addBoundingBox(this.children[i].getBoundingBox()); - } - return bb; - }; - } - svg.Element.g.prototype = new svg.Element.RenderedElementBase; - - // symbol element - svg.Element.symbol = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - this.attribute('width').Length.toPixels('x'), - width, - this.attribute('height').Length.toPixels('y'), - height, - minX, - minY); - - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.symbol.prototype = new svg.Element.RenderedElementBase; - - // style element - svg.Element.style = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - // text, or spaces then CDATA - var css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : ''); - css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments - css = svg.compressSpaces(css); // replace whitespace - var cssDefs = css.split('}'); - for (var i=0; i<cssDefs.length; i++) { - if (svg.trim(cssDefs[i]) != '') { - var cssDef = cssDefs[i].split('{'); - var cssClasses = cssDef[0].split(','); - var cssProps = cssDef[1].split(';'); - for (var j=0; j<cssClasses.length; j++) { - var cssClass = svg.trim(cssClasses[j]); - if (cssClass != '') { - var props = {}; - for (var k=0; k<cssProps.length; k++) { - var prop = cssProps[k].indexOf(':'); - var name = cssProps[k].substr(0, prop); - var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); - if (name != null && value != null) { - props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); - } - } - svg.Styles[cssClass] = props; - if (cssClass == '@font-face') { - var fontFamily = props['font-family'].value.replace(/"/g,''); - var srcs = props['src'].value.split(','); - for (var s=0; s<srcs.length; s++) { - if (srcs[s].indexOf('format("svg")') > 0) { - var urlStart = srcs[s].indexOf('url'); - var urlEnd = srcs[s].indexOf(')', urlStart); - var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); - var doc = svg.parseXml(svg.ajax(url)); - var fonts = doc.getElementsByTagName('font'); - for (var f=0; f<fonts.length; f++) { - var font = svg.CreateElement(fonts[f]); - svg.Definitions[fontFamily] = font; - } - } - } - } - } - } - } - } - } - svg.Element.style.prototype = new svg.Element.ElementBase; - - // use element - svg.Element.use = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0); - if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y')); - } - - this.getDefinition = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value; - if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value; - return element; - } - - this.path = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.path(ctx); - } - - this.renderChildren = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.render(ctx); - } - } - svg.Element.use.prototype = new svg.Element.RenderedElementBase; - - // mask element - svg.Element.mask = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - - // temporarily remove mask to avoid recursion - var mask = element.attribute('mask').value; - element.attribute('mask').value = ''; - - var cMask = document.createElement('canvas'); - cMask.width = x + width; - cMask.height = y + height; - var maskCtx = cMask.getContext('2d'); - this.renderChildren(maskCtx); - - var c = document.createElement('canvas'); - c.width = x + width; - c.height = y + height; - var tempCtx = c.getContext('2d'); - element.render(tempCtx); - tempCtx.globalCompositeOperation = 'destination-in'; - tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat'); - tempCtx.fillRect(0, 0, x + width, y + height); - - ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat'); - ctx.fillRect(0, 0, x + width, y + height); - - // reassign mask - element.attribute('mask').value = mask; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.mask.prototype = new svg.Element.ElementBase; - - // clip element - svg.Element.clipPath = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx) { - for (var i=0; i<this.children.length; i++) { - if (this.children[i].path) { - this.children[i].path(ctx); - ctx.clip(); - } - } - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.clipPath.prototype = new svg.Element.ElementBase; - - // filters - svg.Element.filter = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var bb = element.getBoundingBox(); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - if (x == 0 || y == 0) { - x = bb.x1; - y = bb.y1; - } - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) { - width = bb.width(); - height = bb.height(); - } - - // temporarily remove filter to avoid recursion - var filter = element.style('filter').value; - element.style('filter').value = ''; - - // max filter distance - var extraPercent = .20; - var px = extraPercent * width; - var py = extraPercent * height; - - var c = document.createElement('canvas'); - c.width = width + 2*px; - c.height = height + 2*py; - var tempCtx = c.getContext('2d'); - tempCtx.translate(-x + px, -y + py); - element.render(tempCtx); - - // apply filters - for (var i=0; i<this.children.length; i++) { - this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py); - } - - // render on me - ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py); - - // reassign filter - element.style('filter', true).value = filter; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.filter.prototype = new svg.Element.ElementBase; - - svg.Element.feGaussianBlur = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - function make_fgauss(sigma) { - sigma = Math.max(sigma, 0.01); - var len = Math.ceil(sigma * 4.0) + 1; - mask = []; - for (var i = 0; i < len; i++) { - mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma)); - } - return mask; - } - - function normalize(mask) { - var sum = 0; - for (var i = 1; i < mask.length; i++) { - sum += Math.abs(mask[i]); - } - sum = 2 * sum + Math.abs(mask[0]); - for (var i = 0; i < mask.length; i++) { - mask[i] /= sum; - } - return mask; - } - - function convolve_even(src, dst, mask, width, height) { - for (var y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - var a = imGet(src, x, y, width, height, 3)/255; - for (var rgba = 0; rgba < 4; rgba++) { - var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a); - for (var i = 1; i < mask.length; i++) { - var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255; - var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255; - sum += mask[i] * - ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + - (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2)); - } - imSet(dst, y, x, height, width, rgba, sum); - } - } - } - } - - function imGet(img, x, y, width, height, rgba) { - return img[y*width*4 + x*4 + rgba]; - } - - function imSet(img, x, y, width, height, rgba, val) { - img[y*width*4 + x*4 + rgba] = val; - } - - function blur(ctx, width, height, sigma) - { - var srcData = ctx.getImageData(0, 0, width, height); - var mask = make_fgauss(sigma); - mask = normalize(mask); - tmp = []; - convolve_even(srcData.data, tmp, mask, width, height); - convolve_even(tmp, srcData.data, mask, height, width); - ctx.clearRect(0, 0, width, height); - ctx.putImageData(srcData, 0, 0); - } - - this.apply = function(ctx, x, y, width, height) { - // assuming x==0 && y==0 for now - blur(ctx, width, height, this.attribute('stdDeviation').numValue()); - } - } - svg.Element.filter.prototype = new svg.Element.feGaussianBlur; - - // title element, do nothing - svg.Element.title = function(node) { - } - svg.Element.title.prototype = new svg.Element.ElementBase; - - // desc element, do nothing - svg.Element.desc = function(node) { - } - svg.Element.desc.prototype = new svg.Element.ElementBase; - - svg.Element.MISSING = function(node) { - console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.'); - } - svg.Element.MISSING.prototype = new svg.Element.ElementBase; - - // element factory - svg.CreateElement = function(node) { - var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace - className = className.replace(/\-/g,''); // remove dashes - var e = null; - if (typeof(svg.Element[className]) != 'undefined') { - e = new svg.Element[className](node); - } - else { - e = new svg.Element.MISSING(node); - } - - e.type = node.nodeName; - return e; - } - - // load from url - svg.load = function(ctx, url) { - svg.loadXml(ctx, svg.ajax(url)); - } - - // load from xml - svg.loadXml = function(ctx, xml) { - svg.loadXmlDoc(ctx, svg.parseXml(xml)); - } - - svg.loadXmlDoc = function(ctx, dom) { - svg.init(ctx); - - var mapXY = function(p) { - var e = ctx.canvas; - while (e) { - p.x -= e.offsetLeft; - p.y -= e.offsetTop; - e = e.offsetParent; - } - if (window.scrollX) p.x += window.scrollX; - if (window.scrollY) p.y += window.scrollY; - return p; - } - - // bind mouse - if (svg.opts['ignoreMouse'] != true) { - ctx.canvas.onclick = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onclick(p.x, p.y); - }; - ctx.canvas.onmousemove = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onmousemove(p.x, p.y); - }; - } - - var e = svg.CreateElement(dom.documentElement); - e.root = true; - - // render loop - var isFirstRender = true; - var draw = function() { - svg.ViewPort.Clear(); - if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); - - if (svg.opts['ignoreDimensions'] != true) { - // set canvas size - if (e.style('width').hasValue()) { - ctx.canvas.width = e.style('width').Length.toPixels('x'); - ctx.canvas.style.width = ctx.canvas.width + 'px'; - } - if (e.style('height').hasValue()) { - ctx.canvas.height = e.style('height').Length.toPixels('y'); - ctx.canvas.style.height = ctx.canvas.height + 'px'; - } - } - var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; - var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; - svg.ViewPort.SetCurrent(cWidth, cHeight); - - if (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX']; - if (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY']; - if (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) { - var xRatio = 1, yRatio = 1; - if (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth']; - if (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight']; - - e.attribute('width', true).value = svg.opts['scaleWidth']; - e.attribute('height', true).value = svg.opts['scaleHeight']; - e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio); - e.attribute('preserveAspectRatio', true).value = 'none'; - } - - // clear and render - if (svg.opts['ignoreClear'] != true) { - ctx.clearRect(0, 0, cWidth, cHeight); - } - e.render(ctx); - if (isFirstRender) { - isFirstRender = false; - if (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback'](); - } - } - - var waitingForImages = true; - if (svg.ImagesLoaded()) { - waitingForImages = false; - draw(); - } - svg.intervalID = setInterval(function() { - var needUpdate = false; - - if (waitingForImages && svg.ImagesLoaded()) { - waitingForImages = false; - needUpdate = true; - } - - // need update from mouse events? - if (svg.opts['ignoreMouse'] != true) { - needUpdate = needUpdate | svg.Mouse.hasEvents(); - } - - // need update from animations? - if (svg.opts['ignoreAnimation'] != true) { - for (var i=0; i<svg.Animations.length; i++) { - needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE); - } - } - - // need update from redraw? - if (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') { - if (svg.opts['forceRedraw']() == true) needUpdate = true; - } - - // render if needed - if (needUpdate) { - draw(); - svg.Mouse.runEvents(); // run and clear our events - } - }, 1000 / svg.FRAMERATE); - } - - svg.stop = function() { - if (svg.intervalID) { - clearInterval(svg.intervalID); - } - } - - svg.Mouse = new (function() { - this.events = []; - this.hasEvents = function() { return this.events.length != 0; } - - this.onclick = function(x, y) { - this.events.push({ type: 'onclick', x: x, y: y, - run: function(e) { if (e.onclick) e.onclick(); } - }); - } - - this.onmousemove = function(x, y) { - this.events.push({ type: 'onmousemove', x: x, y: y, - run: function(e) { if (e.onmousemove) e.onmousemove(); } - }); - } - - this.eventElements = []; - - this.checkPath = function(element, ctx) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.checkBoundingBox = function(element, bb) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.runEvents = function() { - svg.ctx.canvas.style.cursor = ''; - - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - var element = this.eventElements[i]; - while (element) { - e.run(element); - element = element.parent; - } - } - - // done running, clear - this.events = []; - this.eventElements = []; - } - }); - - return svg; - } -})(); - -if (CanvasRenderingContext2D) { - CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) { - canvg(this.canvas, s, { - ignoreMouse: true, - ignoreAnimation: true, - ignoreDimensions: true, - ignoreClear: true, - offsetX: dx, - offsetY: dy, - scaleWidth: dw, - scaleHeight: dh - }); - } -}/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * CanVGRenderer Extension module - * - * (c) 2011-2012 Torstein Honsi, Erik Olsson - * - * License: www.highcharts.com/license - */ - -(function (Highcharts) { - var UNDEFINED, - win = Highcharts.win, - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - VISIBLE = 'visible', - PX = 'px', - css = Highcharts.css, - CanVGRenderer = Highcharts.CanVGRenderer, - SVGRenderer = Highcharts.SVGRenderer, - extend = Highcharts.extend, - merge = Highcharts.merge, - addEvent = Highcharts.addEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement; - - // Extend CanVG renderer on demand, inherit from SVGRenderer - extend(CanVGRenderer.prototype, SVGRenderer.prototype); - - // Add additional functionality: - extend(CanVGRenderer.prototype, { - create: function (chart, container, chartWidth, chartHeight) { - this.setContainer(container, chartWidth, chartHeight); - this.configure(chart); - }, - setContainer: function (container, chartWidth, chartHeight) { - var containerStyle = container.style, - containerParent = container.parentNode, - containerLeft = containerStyle.left, - containerTop = containerStyle.top, - containerOffsetWidth = container.offsetWidth, - containerOffsetHeight = container.offsetHeight, - canvas, - initialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE }; - - this.init(container, chartWidth, chartHeight); - - // add the canvas above it - canvas = createElement('canvas', { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - position: RELATIVE, - left: containerLeft, - top: containerTop - }, container); - this.canvas = canvas; - - // Create the tooltip line and div, they are placed as siblings to - // the container (and as direct childs to the div specified in the html page) - this.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttTimer = UNDEFINED; - - // Move away the svg node to a new div inside the container's parent so we can hide it. - var hiddenSvg = createElement(DIV, { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - visibility: HIDDEN, - left: containerLeft, - top: containerTop - }, containerParent); - this.hiddenSvg = hiddenSvg; - hiddenSvg.appendChild(this.box); - }, - - /** - * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh. - **/ - configure: function (chart) { - var renderer = this, - options = chart.options.tooltip, - borderWidth = options.borderWidth, - tooltipDiv = renderer.ttDiv, - tooltipDivStyle = options.style, - tooltipLine = renderer.ttLine, - padding = parseInt(tooltipDivStyle.padding, 10); - - // Add border styling from options to the style - tooltipDivStyle = merge(tooltipDivStyle, { - padding: padding + PX, - 'background-color': options.backgroundColor, - 'border-style': 'solid', - 'border-width': borderWidth + PX, - 'border-radius': options.borderRadius + PX - }); - - // Optionally add shadow - if (options.shadow) { - tooltipDivStyle = merge(tooltipDivStyle, { - 'box-shadow': '1px 1px 3px gray', // w3c - '-webkit-box-shadow': '1px 1px 3px gray' // webkit - }); - } - css(tooltipDiv, tooltipDivStyle); - - // Set simple style on the line - css(tooltipLine, { - 'border-left': '1px solid darkgray' - }); - - // This event is triggered when a new tooltip should be shown - addEvent(chart, 'tooltipRefresh', function (args) { - var chartContainer = chart.container, - offsetLeft = chartContainer.offsetLeft, - offsetTop = chartContainer.offsetTop, - position; - - // Set the content of the tooltip - tooltipDiv.innerHTML = args.text; - - // Compute the best position for the tooltip based on the divs size and container size. - position = chart.tooltip.getPosition( - tooltipDiv.offsetWidth, - tooltipDiv.offsetHeight, - { plotX: args.x, plotY: args.y } - ); - - css(tooltipDiv, { - visibility: VISIBLE, - left: position.x + PX, - top: position.y + PX, - 'border-color': args.borderColor - }); - - // Position the tooltip line - css(tooltipLine, { - visibility: VISIBLE, - left: offsetLeft + args.x + PX, - top: offsetTop + chart.plotTop + PX, - height: chart.plotHeight + PX - }); - - // This timeout hides the tooltip after 3 seconds - // First clear any existing timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Start a new timer that hides tooltip and line - renderer.ttTimer = setTimeout(function () { - css(tooltipDiv, { visibility: HIDDEN }); - css(tooltipLine, { visibility: HIDDEN }); - }, 3000); - }); - }, - - /** - * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer. - */ - destroy: function () { - var renderer = this; - - // Remove the canvas - discardElement(renderer.canvas); - - // Kill the timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Remove the divs for tooltip and line - discardElement(renderer.ttLine); - discardElement(renderer.ttDiv); - discardElement(renderer.hiddenSvg); - - // Continue with base class - return SVGRenderer.prototype.destroy.apply(renderer); - }, - - /** - * Take a color and return it if it's a string, do not make it a gradient even if it is a - * gradient. Currently canvg cannot render gradients (turns out black), - * see: http://code.google.com/p/canvg/issues/detail?id=104 - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop) { - if (color && color.linearGradient) { - // Pick the end color and forward to base implementation - color = color.stops[color.stops.length - 1][1]; - } - return SVGRenderer.prototype.color.call(this, color, elem, prop); - }, - - /** - * Draws the SVG on the canvas or adds a draw invokation to the deferred list. - */ - draw: function () { - var renderer = this; - win.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML); - } - }); -}(Highcharts)); diff --git a/platforms/android/assets/www/lib/highcharts/modules/data.js b/platforms/android/assets/www/lib/highcharts/modules/data.js deleted file mode 100644 index eafd6748..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/data.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Data module - - (c) 2012-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(g){typeof module==="object"&&module.exports?module.exports=g:g(Highcharts)})(function(g){var t=g.win.document,j=g.each,u=g.pick,r=g.inArray,v=g.splat,k,p=function(b,a){this.init(b,a)};g.extend(p.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.firstRowAsNames=u(b.firstRowAsNames,!0);this.decimalRegex=b.decimalPoint&&RegExp("^(-?[0-9]+)"+b.decimalPoint+"([0-9]+)$");this.rawColumns=[];this.columns.length?this.dataFound(): -(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=this.options,e=[],f=function(b){return(g.seriesTypes[b||"line"].prototype.pointArrayMap||[0]).length},d=b&&b.chart&&b.chart.type,c=[],h=[],q=0,i;j(b&&b.series||[],function(b){c.push(f(b.type||d))});j(a&&a.seriesMapping||[],function(b){e.push(b.x||0)});e.length===0&&e.push(0);j(a&&a.seriesMapping||[],function(a){var e=new k,o,n=c[q]||f(d),m=g.seriesTypes[((b&&b.series||[])[q]|| -{}).type||d||"line"].prototype.pointArrayMap||["y"];e.addColumnReader(a.x,"x");for(o in a)a.hasOwnProperty(o)&&o!=="x"&&e.addColumnReader(a[o],o);for(i=0;i<n;i++)e.hasReader(m[i])||e.addColumnReader(void 0,m[i]);h.push(e);q++});a=g.seriesTypes[d||"line"].prototype.pointArrayMap;a===void 0&&(a=["y"]);this.valueCount={global:f(d),xColumns:e,individual:c,seriesBuilders:h,globalPointArrayMap:a}},dataFound:function(){if(this.options.switchRowsAndColumns)this.columns=this.rowsToColumns(this.columns);this.getColumnDistribution(); -this.parseTypes();this.parsed()!==!1&&this.complete()},parseCSV:function(){var b=this,a=this.options,e=a.csv,f=this.columns,d=a.startRow||0,c=a.endRow||Number.MAX_VALUE,h=a.startColumn||0,q=a.endColumn||Number.MAX_VALUE,i,g,s=0;e&&(g=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),i=a.itemDelimiter||(e.indexOf("\t")!==-1?"\t":","),j(g,function(a,e){var g=b.trim(a),w=g.indexOf("#")===0;e>=d&&e<=c&&!w&&g!==""&&(g=a.split(i),j(g,function(b,a){a>=h&&a<=q&&(f[a-h]||(f[a-h]=[]), -f[a-h][s]=b)}),s+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,e=this.columns,f=b.startRow||0,d=b.endRow||Number.MAX_VALUE,c=b.startColumn||0,h=b.endColumn||Number.MAX_VALUE;a&&(typeof a==="string"&&(a=t.getElementById(a)),j(a.getElementsByTagName("tr"),function(b,a){a>=f&&a<=d&&j(b.children,function(b,d){if((b.tagName==="TD"||b.tagName==="TH")&&d>=c&&d<=h)e[d-c]||(e[d-c]=[]),e[d-c][a-f]=b.innerHTML})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this, -a=this.options,e=a.googleSpreadsheetKey,f=this.columns,d=a.startRow||0,c=a.endRow||Number.MAX_VALUE,h=a.startColumn||0,g=a.endColumn||Number.MAX_VALUE,i,j;e&&jQuery.ajax({dataType:"json",url:"https://spreadsheets.google.com/feeds/cells/"+e+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",error:a.error,success:function(a){var a=a.feed.entry,e,n=a.length,m=0,k=0,l;for(l=0;l<n;l++)e=a[l],m=Math.max(m,e.gs$cell.col),k=Math.max(k,e.gs$cell.row);for(l=0;l<m;l++)if(l>= -h&&l<=g)f[l-h]=[],f[l-h].length=Math.min(k,c-d);for(l=0;l<n;l++)if(e=a[l],i=e.gs$cell.row-1,j=e.gs$cell.col-1,j>=h&&j<=g&&i>=d&&i<=c)f[j-h][i-d]=e.content.$t;b.dataFound()}})},trim:function(b,a){typeof b==="string"&&(b=b.replace(/^\s+|\s+$/g,""),a&&/^[0-9\s]+$/.test(b)&&(b=b.replace(/\s/g,"")),this.decimalRegex&&(b=b.replace(this.decimalRegex,"$1.$2")));return b},parseTypes:function(){for(var b=this.columns,a=b.length;a--;)this.parseColumn(b[a],a)},parseColumn:function(b,a){var e=this.rawColumns, -f=this.columns,d=b.length,c,h,g,i,j=this.firstRowAsNames,k=r(a,this.valueCount.xColumns)!==-1,o=[],n=this.chartOptions,m,p=(this.options.columnTypes||[])[a],n=k&&(n&&n.xAxis&&v(n.xAxis)[0].type==="category"||p==="string");for(e[a]||(e[a]=[]);d--;)if(c=o[d]||b[d],g=this.trim(c),i=this.trim(c,!0),h=parseFloat(i),e[a][d]===void 0&&(e[a][d]=g),n||d===0&&j)b[d]=g;else if(+i===h)b[d]=h,h>31536E6&&p!=="float"?b.isDatetime=!0:b.isNumeric=!0,b[d+1]!==void 0&&(m=h>b[d+1]);else if(h=this.parseDate(c),k&&typeof h=== -"number"&&!isNaN(h)&&p!=="float"){if(o[d]=c,b[d]=h,b.isDatetime=!0,b[d+1]!==void 0){c=h>b[d+1];if(c!==m&&m!==void 0)this.alternativeFormat?(this.dateFormat=this.alternativeFormat,d=b.length,this.alternativeFormat=this.dateFormats[this.dateFormat].alternative):b.unsorted=!0;m=c}}else if(b[d]=g===""?null:g,d!==0&&(b.isDatetime||b.isNumeric))b.mixed=!0;k&&b.mixed&&(f[a]=e[a]);if(k&&m&&this.options.sort)for(a=0;a<f.length;a++)f[a].reverse(),j&&f[a].unshift(f[a].pop())},dateFormats:{"YYYY-mm-dd":{regex:/^([0-9]{4})[\-\/\.]([0-9]{2})[\-\/\.]([0-9]{2})$/, -parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}},"dd/mm/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(b){return Date.UTC(+b[3],b[2]-1,+b[1])},alternative:"mm/dd/YYYY"},"mm/dd/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(b){return Date.UTC(+b[3],b[1]-1,+b[2])}},"dd/mm/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(b){return Date.UTC(+b[3]+2E3,b[2]-1,+b[1])},alternative:"mm/dd/YY"}, -"mm/dd/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(b){return Date.UTC(+b[3]+2E3,b[1]-1,+b[2])}}},parseDate:function(b){var a=this.options.parseDate,e,f,d=this.options.dateFormat||this.dateFormat,c;if(a)e=a(b);else if(typeof b==="string"){if(d)a=this.dateFormats[d],(c=b.match(a.regex))&&(e=a.parser(c));else for(f in this.dateFormats)if(a=this.dateFormats[f],c=b.match(a.regex)){this.dateFormat=f;this.alternativeFormat=a.alternative;e=a.parser(c);break}c||(c=Date.parse(b), -typeof c==="object"&&c!==null&&c.getTime?e=c.getTime()-c.getTimezoneOffset()*6E4:typeof c==="number"&&!isNaN(c)&&(e=c-(new Date(c)).getTimezoneOffset()*6E4))}return e},rowsToColumns:function(b){var a,e,f,d,c;if(b){c=[];e=b.length;for(a=0;a<e;a++){d=b[a].length;for(f=0;f<d;f++)c[f]||(c[f]=[]),c[f][a]=b[a][f]}}return c},parsed:function(){if(this.options.parsed)return this.options.parsed.call(this,this.columns)},getFreeIndexes:function(b,a){var e,f,d=[],c=[],h;for(f=0;f<b;f+=1)d.push(!0);for(e=0;e<a.length;e+= -1){h=a[e].getReferencedColumnIndexes();for(f=0;f<h.length;f+=1)d[h[f]]=!1}for(f=0;f<d.length;f+=1)d[f]&&c.push(f);return c},complete:function(){var b=this.columns,a,e=this.options,f,d,c,h,g=[],i;if(e.complete||e.afterComplete){for(c=0;c<b.length;c++)if(this.firstRowAsNames)b[c].name=b[c].shift();f=[];d=this.getFreeIndexes(b.length,this.valueCount.seriesBuilders);for(c=0;c<this.valueCount.seriesBuilders.length;c++)i=this.valueCount.seriesBuilders[c],i.populateColumns(d)&&g.push(i);for(;d.length>0;){i= -new k;i.addColumnReader(0,"x");c=r(0,d);c!==-1&&d.splice(c,1);for(c=0;c<this.valueCount.global;c++)i.addColumnReader(void 0,this.valueCount.globalPointArrayMap[c]);i.populateColumns(d)&&g.push(i)}g.length>0&&g[0].readers.length>0&&(i=b[g[0].readers[0].columnIndex],i!==void 0&&(i.isDatetime?a="datetime":i.isNumeric||(a="category")));if(a==="category")for(c=0;c<g.length;c++){i=g[c];for(d=0;d<i.readers.length;d++)if(i.readers[d].configName==="x")i.readers[d].configName="name"}for(c=0;c<g.length;c++){i= -g[c];d=[];for(h=0;h<b[0].length;h++)d[h]=i.read(b,h);f[c]={data:d};if(i.name)f[c].name=i.name;if(a==="category")f[c].turboThreshold=0}b={series:f};if(a)b.xAxis={type:a};e.complete&&e.complete(b);e.afterComplete&&e.afterComplete(b)}}});g.Data=p;g.data=function(b,a){return new p(b,a)};g.wrap(g.Chart.prototype,"init",function(b,a,e){var f=this;a&&a.data?g.data(g.extend(a.data,{afterComplete:function(d){var c,h;if(a.hasOwnProperty("series"))if(typeof a.series==="object")for(c=Math.max(a.series.length, -d.series.length);c--;)h=a.series[c]||{},a.series[c]=g.merge(h,d.series[c]);else delete a.series;a=g.merge(d,a);b.call(f,a,e)}}),a):b.call(f,a,e)});k=function(){this.readers=[];this.pointIsArray=!0};k.prototype.populateColumns=function(b){var a=!0;j(this.readers,function(a){if(a.columnIndex===void 0)a.columnIndex=b.shift()});j(this.readers,function(b){b.columnIndex===void 0&&(a=!1)});return a};k.prototype.read=function(b,a){var e=this.pointIsArray,f=e?[]:{},d;j(this.readers,function(c){var d=b[c.columnIndex][a]; -e?f.push(d):f[c.configName]=d});if(this.name===void 0&&this.readers.length>=2&&(d=this.getReferencedColumnIndexes(),d.length>=2))d.shift(),d.sort(),this.name=b[d.shift()].name;return f};k.prototype.addColumnReader=function(b,a){this.readers.push({columnIndex:b,configName:a});if(!(a==="x"||a==="y"||a===void 0))this.pointIsArray=!1};k.prototype.getReferencedColumnIndexes=function(){var b,a=[],e;for(b=0;b<this.readers.length;b+=1)e=this.readers[b],e.columnIndex!==void 0&&a.push(e.columnIndex);return a}; -k.prototype.hasReader=function(b){var a,e;for(a=0;a<this.readers.length;a+=1)if(e=this.readers[a],e.configName===b)return!0}}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/data.src.js b/platforms/android/assets/www/lib/highcharts/modules/data.src.js deleted file mode 100644 index 3601a22a..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/data.src.js +++ /dev/null @@ -1,959 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Data module - * - * (c) 2012-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/*global jQuery */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - // Utilities - var win = Highcharts.win, - doc = win.document, - each = Highcharts.each, - pick = Highcharts.pick, - inArray = Highcharts.inArray, - splat = Highcharts.splat, - SeriesBuilder; - - - // The Data constructor - var Data = function (dataOptions, chartOptions) { - this.init(dataOptions, chartOptions); - }; - - // Set the prototype properties - Highcharts.extend(Data.prototype, { - - /** - * Initialize the Data object with the given options - */ - init: function (options, chartOptions) { - this.options = options; - this.chartOptions = chartOptions; - this.columns = options.columns || this.rowsToColumns(options.rows) || []; - this.firstRowAsNames = pick(options.firstRowAsNames, true); - this.decimalRegex = options.decimalPoint && new RegExp('^(-?[0-9]+)' + options.decimalPoint + '([0-9]+)$'); - - // This is a two-dimensional array holding the raw, trimmed string values - // with the same organisation as the columns array. It makes it possible - // for example to revert from interpreted timestamps to string-based - // categories. - this.rawColumns = []; - - // No need to parse or interpret anything - if (this.columns.length) { - this.dataFound(); - - // Parse and interpret - } else { - - // Parse a CSV string if options.csv is given - this.parseCSV(); - - // Parse a HTML table if options.table is given - this.parseTable(); - - // Parse a Google Spreadsheet - this.parseGoogleSpreadsheet(); - } - - }, - - /** - * Get the column distribution. For example, a line series takes a single column for - * Y values. A range series takes two columns for low and high values respectively, - * and an OHLC series takes four columns. - */ - getColumnDistribution: function () { - var chartOptions = this.chartOptions, - options = this.options, - xColumns = [], - getValueCount = function (type) { - return (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length; - }, - getPointArrayMap = function (type) { - return Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap; - }, - globalType = chartOptions && chartOptions.chart && chartOptions.chart.type, - individualCounts = [], - seriesBuilders = [], - seriesIndex = 0, - i; - - each((chartOptions && chartOptions.series) || [], function (series) { - individualCounts.push(getValueCount(series.type || globalType)); - }); - - // Collect the x-column indexes from seriesMapping - each((options && options.seriesMapping) || [], function (mapping) { - xColumns.push(mapping.x || 0); - }); - - // If there are no defined series with x-columns, use the first column as x column - if (xColumns.length === 0) { - xColumns.push(0); - } - - // Loop all seriesMappings and constructs SeriesBuilders from - // the mapping options. - each((options && options.seriesMapping) || [], function (mapping) { - var builder = new SeriesBuilder(), - name, - numberOfValueColumnsNeeded = individualCounts[seriesIndex] || getValueCount(globalType), - seriesArr = (chartOptions && chartOptions.series) || [], - series = seriesArr[seriesIndex] || {}, - pointArrayMap = getPointArrayMap(series.type || globalType) || ['y']; - - // Add an x reader from the x property or from an undefined column - // if the property is not set. It will then be auto populated later. - builder.addColumnReader(mapping.x, 'x'); - - // Add all column mappings - for (name in mapping) { - if (mapping.hasOwnProperty(name) && name !== 'x') { - builder.addColumnReader(mapping[name], name); - } - } - - // Add missing columns - for (i = 0; i < numberOfValueColumnsNeeded; i++) { - if (!builder.hasReader(pointArrayMap[i])) { - //builder.addNextColumnReader(pointArrayMap[i]); - // Create and add a column reader for the next free column index - builder.addColumnReader(undefined, pointArrayMap[i]); - } - } - - seriesBuilders.push(builder); - seriesIndex++; - }); - - var globalPointArrayMap = getPointArrayMap(globalType); - if (globalPointArrayMap === undefined) { - globalPointArrayMap = ['y']; - } - - this.valueCount = { - global: getValueCount(globalType), - xColumns: xColumns, - individual: individualCounts, - seriesBuilders: seriesBuilders, - globalPointArrayMap: globalPointArrayMap - }; - }, - - /** - * When the data is parsed into columns, either by CSV, table, GS or direct input, - * continue with other operations. - */ - dataFound: function () { - - if (this.options.switchRowsAndColumns) { - this.columns = this.rowsToColumns(this.columns); - } - - // Interpret the info about series and columns - this.getColumnDistribution(); - - // Interpret the values into right types - this.parseTypes(); - - // Handle columns if a handleColumns callback is given - if (this.parsed() !== false) { - - // Complete if a complete callback is given - this.complete(); - } - - }, - - /** - * Parse a CSV input string - */ - parseCSV: function () { - var self = this, - options = this.options, - csv = options.csv, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - itemDelimiter, - lines, - activeRowNo = 0; - - if (csv) { - - lines = csv - .replace(/\r\n/g, '\n') // Unix - .replace(/\r/g, '\n') // Mac - .split(options.lineDelimiter || '\n'); - - itemDelimiter = options.itemDelimiter || (csv.indexOf('\t') !== -1 ? '\t' : ','); - - each(lines, function (line, rowNo) { - var trimmed = self.trim(line), - isComment = trimmed.indexOf('#') === 0, - isBlank = trimmed === '', - items; - - if (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) { - items = line.split(itemDelimiter); - each(items, function (item, colNo) { - if (colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo - startColumn]) { - columns[colNo - startColumn] = []; - } - - columns[colNo - startColumn][activeRowNo] = item; - } - }); - activeRowNo += 1; - } - }); - - this.dataFound(); - } - }, - - /** - * Parse a HTML table - */ - parseTable: function () { - var options = this.options, - table = options.table, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE; - - if (table) { - - if (typeof table === 'string') { - table = doc.getElementById(table); - } - - each(table.getElementsByTagName('tr'), function (tr, rowNo) { - if (rowNo >= startRow && rowNo <= endRow) { - each(tr.children, function (item, colNo) { - if ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo - startColumn]) { - columns[colNo - startColumn] = []; - } - - columns[colNo - startColumn][rowNo - startRow] = item.innerHTML; - } - }); - } - }); - - this.dataFound(); // continue - } - }, - - /** - */ - parseGoogleSpreadsheet: function () { - var self = this, - options = this.options, - googleSpreadsheetKey = options.googleSpreadsheetKey, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - gr, // google row - gc; // google column - - if (googleSpreadsheetKey) { - jQuery.ajax({ - dataType: 'json', - url: 'https://spreadsheets.google.com/feeds/cells/' + - googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') + - '/public/values?alt=json-in-script&callback=?', - error: options.error, - success: function (json) { - // Prepare the data from the spreadsheat - var cells = json.feed.entry, - cell, - cellCount = cells.length, - colCount = 0, - rowCount = 0, - i; - - // First, find the total number of columns and rows that - // are actually filled with data - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - colCount = Math.max(colCount, cell.gs$cell.col); - rowCount = Math.max(rowCount, cell.gs$cell.row); - } - - // Set up arrays containing the column data - for (i = 0; i < colCount; i++) { - if (i >= startColumn && i <= endColumn) { - // Create new columns with the length of either end-start or rowCount - columns[i - startColumn] = []; - - // Setting the length to avoid jslint warning - columns[i - startColumn].length = Math.min(rowCount, endRow - startRow); - } - } - - // Loop over the cells and assign the value to the right - // place in the column arrays - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - gr = cell.gs$cell.row - 1; // rows start at 1 - gc = cell.gs$cell.col - 1; // columns start at 1 - - // If both row and col falls inside start and end - // set the transposed cell value in the newly created columns - if (gc >= startColumn && gc <= endColumn && - gr >= startRow && gr <= endRow) { - columns[gc - startColumn][gr - startRow] = cell.content.$t; - } - } - self.dataFound(); - } - }); - } - }, - - /** - * Trim a string from whitespace - */ - trim: function (str, inside) { - if (typeof str === 'string') { - str = str.replace(/^\s+|\s+$/g, ''); - - // Clear white space insdie the string, like thousands separators - if (inside && /^[0-9\s]+$/.test(str)) { - str = str.replace(/\s/g, ''); - } - - if (this.decimalRegex) { - str = str.replace(this.decimalRegex, '$1.$2'); - } - } - return str; - }, - - /** - * Parse numeric cells in to number types and date types in to true dates. - */ - parseTypes: function () { - var columns = this.columns, - col = columns.length; - - while (col--) { - this.parseColumn(columns[col], col); - } - - }, - - /** - * Parse a single column. Set properties like .isDatetime and .isNumeric. - */ - parseColumn: function (column, col) { - var rawColumns = this.rawColumns, - columns = this.columns, - row = column.length, - val, - floatVal, - trimVal, - trimInsideVal, - firstRowAsNames = this.firstRowAsNames, - isXColumn = inArray(col, this.valueCount.xColumns) !== -1, - dateVal, - backup = [], - diff, - chartOptions = this.chartOptions, - descending, - columnTypes = this.options.columnTypes || [], - columnType = columnTypes[col], - forceCategory = isXColumn && ((chartOptions && chartOptions.xAxis && splat(chartOptions.xAxis)[0].type === 'category') || columnType === 'string'); - - if (!rawColumns[col]) { - rawColumns[col] = []; - } - while (row--) { - val = backup[row] || column[row]; - - trimVal = this.trim(val); - trimInsideVal = this.trim(val, true); - floatVal = parseFloat(trimInsideVal); - - // Set it the first time - if (rawColumns[col][row] === undefined) { - rawColumns[col][row] = trimVal; - } - - // Disable number or date parsing by setting the X axis type to category - if (forceCategory || (row === 0 && firstRowAsNames)) { - column[row] = trimVal; - - } else if (+trimInsideVal === floatVal) { // is numeric - - column[row] = floatVal; - - // If the number is greater than milliseconds in a year, assume datetime - if (floatVal > 365 * 24 * 3600 * 1000 && columnType !== 'float') { - column.isDatetime = true; - } else { - column.isNumeric = true; - } - - if (column[row + 1] !== undefined) { - descending = floatVal > column[row + 1]; - } - - // String, continue to determine if it is a date string or really a string - } else { - dateVal = this.parseDate(val); - // Only allow parsing of dates if this column is an x-column - if (isXColumn && typeof dateVal === 'number' && !isNaN(dateVal) && columnType !== 'float') { // is date - backup[row] = val; - column[row] = dateVal; - column.isDatetime = true; - - // Check if the dates are uniformly descending or ascending. If they - // are not, chances are that they are a different time format, so check - // for alternative. - if (column[row + 1] !== undefined) { - diff = dateVal > column[row + 1]; - if (diff !== descending && descending !== undefined) { - if (this.alternativeFormat) { - this.dateFormat = this.alternativeFormat; - row = column.length; - this.alternativeFormat = this.dateFormats[this.dateFormat].alternative; - } else { - column.unsorted = true; - } - } - descending = diff; - } - - } else { // string - column[row] = trimVal === '' ? null : trimVal; - if (row !== 0 && (column.isDatetime || column.isNumeric)) { - column.mixed = true; - } - } - } - } - - // If strings are intermixed with numbers or dates in a parsed column, it is an indication - // that parsing went wrong or the data was not intended to display as numbers or dates and - // parsing is too aggressive. Fall back to categories. Demonstrated in the - // highcharts/demo/column-drilldown sample. - if (isXColumn && column.mixed) { - columns[col] = rawColumns[col]; - } - - // If the 0 column is date or number and descending, reverse all columns. - if (isXColumn && descending && this.options.sort) { - for (col = 0; col < columns.length; col++) { - columns[col].reverse(); - if (firstRowAsNames) { - columns[col].unshift(columns[col].pop()); - } - } - } - }, - - /** - * A collection of available date formats, extendable from the outside to support - * custom date formats. - */ - dateFormats: { - 'YYYY-mm-dd': { - regex: /^([0-9]{4})[\-\/\.]([0-9]{2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[1], match[2] - 1, +match[3]); - } - }, - 'dd/mm/YYYY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/, - parser: function (match) { - return Date.UTC(+match[3], match[2] - 1, +match[1]); - }, - alternative: 'mm/dd/YYYY' // different format with the same regex - }, - 'mm/dd/YYYY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/, - parser: function (match) { - return Date.UTC(+match[3], match[1] - 1, +match[2]); - } - }, - 'dd/mm/YY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[3] + 2000, match[2] - 1, +match[1]); - }, - alternative: 'mm/dd/YY' // different format with the same regex - }, - 'mm/dd/YY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[3] + 2000, match[1] - 1, +match[2]); - } - } - }, - - /** - * Parse a date and return it as a number. Overridable through options.parseDate. - */ - parseDate: function (val) { - var parseDate = this.options.parseDate, - ret, - key, - format, - dateFormat = this.options.dateFormat || this.dateFormat, - match; - - if (parseDate) { - ret = parseDate(val); - - } else if (typeof val === 'string') { - // Auto-detect the date format the first time - if (!dateFormat) { - for (key in this.dateFormats) { - format = this.dateFormats[key]; - match = val.match(format.regex); - if (match) { - this.dateFormat = dateFormat = key; - this.alternativeFormat = format.alternative; - ret = format.parser(match); - break; - } - } - // Next time, use the one previously found - } else { - format = this.dateFormats[dateFormat]; - match = val.match(format.regex); - if (match) { - ret = format.parser(match); - } - } - // Fall back to Date.parse - if (!match) { - match = Date.parse(val); - // External tools like Date.js and MooTools extend Date object and - // returns a date. - if (typeof match === 'object' && match !== null && match.getTime) { - ret = match.getTime() - match.getTimezoneOffset() * 60000; - - // Timestamp - } else if (typeof match === 'number' && !isNaN(match)) { - ret = match - (new Date(match)).getTimezoneOffset() * 60000; - } - } - } - return ret; - }, - - /** - * Reorganize rows into columns - */ - rowsToColumns: function (rows) { - var row, - rowsLength, - col, - colsLength, - columns; - - if (rows) { - columns = []; - rowsLength = rows.length; - for (row = 0; row < rowsLength; row++) { - colsLength = rows[row].length; - for (col = 0; col < colsLength; col++) { - if (!columns[col]) { - columns[col] = []; - } - columns[col][row] = rows[row][col]; - } - } - } - return columns; - }, - - /** - * A hook for working directly on the parsed columns - */ - parsed: function () { - if (this.options.parsed) { - return this.options.parsed.call(this, this.columns); - } - }, - - getFreeIndexes: function (numberOfColumns, seriesBuilders) { - var s, - i, - freeIndexes = [], - freeIndexValues = [], - referencedIndexes; - - // Add all columns as free - for (i = 0; i < numberOfColumns; i = i + 1) { - freeIndexes.push(true); - } - - // Loop all defined builders and remove their referenced columns - for (s = 0; s < seriesBuilders.length; s = s + 1) { - referencedIndexes = seriesBuilders[s].getReferencedColumnIndexes(); - - for (i = 0; i < referencedIndexes.length; i = i + 1) { - freeIndexes[referencedIndexes[i]] = false; - } - } - - // Collect the values for the free indexes - for (i = 0; i < freeIndexes.length; i = i + 1) { - if (freeIndexes[i]) { - freeIndexValues.push(i); - } - } - - return freeIndexValues; - }, - - /** - * If a complete callback function is provided in the options, interpret the - * columns into a Highcharts options object. - */ - complete: function () { - - var columns = this.columns, - xColumns = [], - type, - options = this.options, - series, - data, - i, - j, - r, - seriesIndex, - chartOptions, - allSeriesBuilders = [], - builder, - freeIndexes, - typeCol, - index; - - xColumns.length = columns.length; - if (options.complete || options.afterComplete) { - - // Get the names and shift the top row - for (i = 0; i < columns.length; i++) { - if (this.firstRowAsNames) { - columns[i].name = columns[i].shift(); - } - } - - // Use the next columns for series - series = []; - freeIndexes = this.getFreeIndexes(columns.length, this.valueCount.seriesBuilders); - - // Populate defined series - for (seriesIndex = 0; seriesIndex < this.valueCount.seriesBuilders.length; seriesIndex++) { - builder = this.valueCount.seriesBuilders[seriesIndex]; - - // If the builder can be populated with remaining columns, then add it to allBuilders - if (builder.populateColumns(freeIndexes)) { - allSeriesBuilders.push(builder); - } - } - - // Populate dynamic series - while (freeIndexes.length > 0) { - builder = new SeriesBuilder(); - builder.addColumnReader(0, 'x'); - - // Mark index as used (not free) - index = inArray(0, freeIndexes); - if (index !== -1) { - freeIndexes.splice(index, 1); - } - - for (i = 0; i < this.valueCount.global; i++) { - // Create and add a column reader for the next free column index - builder.addColumnReader(undefined, this.valueCount.globalPointArrayMap[i]); - } - - // If the builder can be populated with remaining columns, then add it to allBuilders - if (builder.populateColumns(freeIndexes)) { - allSeriesBuilders.push(builder); - } - } - - // Get the data-type from the first series x column - if (allSeriesBuilders.length > 0 && allSeriesBuilders[0].readers.length > 0) { - typeCol = columns[allSeriesBuilders[0].readers[0].columnIndex]; - if (typeCol !== undefined) { - if (typeCol.isDatetime) { - type = 'datetime'; - } else if (!typeCol.isNumeric) { - type = 'category'; - } - } - } - // Axis type is category, then the "x" column should be called "name" - if (type === 'category') { - for (seriesIndex = 0; seriesIndex < allSeriesBuilders.length; seriesIndex++) { - builder = allSeriesBuilders[seriesIndex]; - for (r = 0; r < builder.readers.length; r++) { - if (builder.readers[r].configName === 'x') { - builder.readers[r].configName = 'name'; - } - } - } - } - - // Read data for all builders - for (seriesIndex = 0; seriesIndex < allSeriesBuilders.length; seriesIndex++) { - builder = allSeriesBuilders[seriesIndex]; - - // Iterate down the cells of each column and add data to the series - data = []; - for (j = 0; j < columns[0].length; j++) { - data[j] = builder.read(columns, j); - } - - // Add the series - series[seriesIndex] = { - data: data - }; - if (builder.name) { - series[seriesIndex].name = builder.name; - } - if (type === 'category') { - series[seriesIndex].turboThreshold = 0; - } - } - - - - // Do the callback - chartOptions = { - series: series - }; - if (type) { - chartOptions.xAxis = { - type: type - }; - } - - if (options.complete) { - options.complete(chartOptions); - } - - // The afterComplete hook is used internally to avoid conflict with the externally - // available complete option. - if (options.afterComplete) { - options.afterComplete(chartOptions); - } - } - } - }); - - // Register the Data prototype and data function on Highcharts - Highcharts.Data = Data; - Highcharts.data = function (options, chartOptions) { - return new Data(options, chartOptions); - }; - - // Extend Chart.init so that the Chart constructor accepts a new configuration - // option group, data. - Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) { - var chart = this; - - if (userOptions && userOptions.data) { - Highcharts.data(Highcharts.extend(userOptions.data, { - - afterComplete: function (dataOptions) { - var i, series; - - // Merge series configs - if (userOptions.hasOwnProperty('series')) { - if (typeof userOptions.series === 'object') { - i = Math.max(userOptions.series.length, dataOptions.series.length); - while (i--) { - series = userOptions.series[i] || {}; - userOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]); - } - } else { // Allow merging in dataOptions.series (#2856) - delete userOptions.series; - } - } - - // Do the merge - userOptions = Highcharts.merge(dataOptions, userOptions); - - proceed.call(chart, userOptions, callback); - } - }), userOptions); - } else { - proceed.call(chart, userOptions, callback); - } - }); - - /** - * Creates a new SeriesBuilder. A SeriesBuilder consists of a number - * of ColumnReaders that reads columns and give them a name. - * Ex: A series builder can be constructed to read column 3 as 'x' and - * column 7 and 8 as 'y1' and 'y2'. - * The output would then be points/rows of the form {x: 11, y1: 22, y2: 33} - * - * The name of the builder is taken from the second column. In the above - * example it would be the column with index 7. - * @constructor - */ - SeriesBuilder = function () { - this.readers = []; - this.pointIsArray = true; - }; - - /** - * Populates readers with column indexes. A reader can be added without - * a specific index and for those readers the index is taken sequentially - * from the free columns (this is handled by the ColumnCursor instance). - * @returns {boolean} - */ - SeriesBuilder.prototype.populateColumns = function (freeIndexes) { - var builder = this, - enoughColumns = true; - - // Loop each reader and give it an index if its missing. - // The freeIndexes.shift() will return undefined if there - // are no more columns. - each(builder.readers, function (reader) { - if (reader.columnIndex === undefined) { - reader.columnIndex = freeIndexes.shift(); - } - }); - - // Now, all readers should have columns mapped. If not - // then return false to signal that this series should - // not be added. - each(builder.readers, function (reader) { - if (reader.columnIndex === undefined) { - enoughColumns = false; - } - }); - - return enoughColumns; - }; - - /** - * Reads a row from the dataset and returns a point or array depending - * on the names of the readers. - * @param columns - * @param rowIndex - * @returns {Array | Object} - */ - SeriesBuilder.prototype.read = function (columns, rowIndex) { - var builder = this, - pointIsArray = builder.pointIsArray, - point = pointIsArray ? [] : {}, - columnIndexes; - - // Loop each reader and ask it to read its value. - // Then, build an array or point based on the readers names. - each(builder.readers, function (reader) { - var value = columns[reader.columnIndex][rowIndex]; - if (pointIsArray) { - point.push(value); - } else { - point[reader.configName] = value; - } - }); - - // The name comes from the first column (excluding the x column) - if (this.name === undefined && builder.readers.length >= 2) { - columnIndexes = builder.getReferencedColumnIndexes(); - if (columnIndexes.length >= 2) { - // remove the first one (x col) - columnIndexes.shift(); - - // Sort the remaining - columnIndexes.sort(); - - // Now use the lowest index as name column - this.name = columns[columnIndexes.shift()].name; - } - } - - return point; - }; - - /** - * Creates and adds ColumnReader from the given columnIndex and configName. - * ColumnIndex can be undefined and in that case the reader will be given - * an index when columns are populated. - * @param columnIndex {Number | undefined} - * @param configName - */ - SeriesBuilder.prototype.addColumnReader = function (columnIndex, configName) { - this.readers.push({ - columnIndex: columnIndex, - configName: configName - }); - - if (!(configName === 'x' || configName === 'y' || configName === undefined)) { - this.pointIsArray = false; - } - }; - - /** - * Returns an array of column indexes that the builder will use when - * reading data. - * @returns {Array} - */ - SeriesBuilder.prototype.getReferencedColumnIndexes = function () { - var i, - referencedColumnIndexes = [], - columnReader; - - for (i = 0; i < this.readers.length; i = i + 1) { - columnReader = this.readers[i]; - if (columnReader.columnIndex !== undefined) { - referencedColumnIndexes.push(columnReader.columnIndex); - } - } - - return referencedColumnIndexes; - }; - - /** - * Returns true if the builder has a reader for the given configName. - * @param configName - * @returns {boolean} - */ - SeriesBuilder.prototype.hasReader = function (configName) { - var i, columnReader; - for (i = 0; i < this.readers.length; i = i + 1) { - columnReader = this.readers[i]; - if (columnReader.configName === configName) { - return true; - } - } - // Else return undefined - }; - - - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/drilldown.js b/platforms/android/assets/www/lib/highcharts/modules/drilldown.js deleted file mode 100644 index bdcaae34..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/drilldown.js +++ /dev/null @@ -1,17 +0,0 @@ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){function A(a,b,c){var e;!b.rgba.length||!a.rgba.length?a=b.input||"none":(a=a.rgba,b=b.rgba,e=b[3]!==1||a[3]!==1,a=(e?"rgba(":"rgb(")+Math.round(b[0]+(a[0]-b[0])*(1-c))+","+Math.round(b[1]+(a[1]-b[1])*(1-c))+","+Math.round(b[2]+(a[2]-b[2])*(1-c))+(e?","+(b[3]+(a[3]-b[3])*(1-c)):"")+")");return a}var t=function(){},q=d.getOptions(),h=d.each,l=d.extend,B=d.format,u=d.pick,r=d.wrap,m=d.Chart,p=d.seriesTypes, -v=p.pie,n=p.column,w=d.Tick,x=d.fireEvent,y=d.inArray,z=1;h(["fill","stroke"],function(a){d.Fx.prototype[a+"Setter"]=function(){this.elem.attr(a,A(d.Color(this.start),d.Color(this.end),this.pos))}});l(q.lang,{drillUpText:"\u25c1 Back to {series.name}"});q.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},activeDataLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right", -x:-10,y:10}}};d.SVGRenderer.prototype.Element.prototype.fadeIn=function(a){this.attr({opacity:0.1,visibility:"inherit"}).animate({opacity:u(this.newOpacity,1)},a||{duration:250})};m.prototype.addSeriesAsDrilldown=function(a,b){this.addSingleSeriesAsDrilldown(a,b);this.applyDrilldown()};m.prototype.addSingleSeriesAsDrilldown=function(a,b){var c=a.series,e=c.xAxis,g=c.yAxis,f;f=a.color||c.color;var i,d=[],j=[],k,o;if(!this.drilldownLevels)this.drilldownLevels=[];k=c.options._levelNumber||0;(o=this.drilldownLevels[this.drilldownLevels.length- -1])&&o.levelNumber!==k&&(o=void 0);b=l({color:f,_ddSeriesId:z++},b);i=y(a,c.points);h(c.chart.series,function(a){if(a.xAxis===e&&!a.isDrilling)a.options._ddSeriesId=a.options._ddSeriesId||z++,a.options._colorIndex=a.userOptions._colorIndex,a.options._levelNumber=a.options._levelNumber||k,o?(d=o.levelSeries,j=o.levelSeriesOptions):(d.push(a),j.push(a.options))});f={levelNumber:k,seriesOptions:c.options,levelSeriesOptions:j,levelSeries:d,shapeArgs:a.shapeArgs,bBox:a.graphic?a.graphic.getBBox():{},color:f, -lowerSeriesOptions:b,pointOptions:c.options.data[i],pointIndex:i,oldExtremes:{xMin:e&&e.userMin,xMax:e&&e.userMax,yMin:g&&g.userMin,yMax:g&&g.userMax}};this.drilldownLevels.push(f);f=f.lowerSeries=this.addSeries(b,!1);f.options._levelNumber=k+1;if(e)e.oldPos=e.pos,e.userMin=e.userMax=null,g.userMin=g.userMax=null;if(c.type===f.type)f.animate=f.animateDrilldown||t,f.options.animation=!0};m.prototype.applyDrilldown=function(){var a=this.drilldownLevels,b;if(a&&a.length>0)b=a[a.length-1].levelNumber, -h(this.drilldownLevels,function(a){a.levelNumber===b&&h(a.levelSeries,function(a){a.options&&a.options._levelNumber===b&&a.remove(!1)})});this.redraw();this.showDrillUpButton()};m.prototype.getDrilldownBackText=function(){var a=this.drilldownLevels;if(a&&a.length>0)return a=a[a.length-1],a.series=a.seriesOptions,B(this.options.lang.drillUpText,a)};m.prototype.showDrillUpButton=function(){var a=this,b=this.getDrilldownBackText(),c=a.options.drilldown.drillUpButton,e,g;this.drillUpButton?this.drillUpButton.attr({text:b}).align(): -(g=(e=c.theme)&&e.states,this.drillUpButton=this.renderer.button(b,null,null,function(){a.drillUp()},e,g&&g.hover,g&&g.select).attr({align:c.position.align,zIndex:9}).add().align(c.position,!1,c.relativeTo||"plotBox"))};m.prototype.drillUp=function(){for(var a=this,b=a.drilldownLevels,c=b[b.length-1].levelNumber,e=b.length,g=a.series,f,i,d,j,k=function(b){var c;h(g,function(a){a.options._ddSeriesId===b._ddSeriesId&&(c=a)});c=c||a.addSeries(b,!1);if(c.type===d.type&&c.animateDrillupTo)c.animate=c.animateDrillupTo; -b===i.seriesOptions&&(j=c)};e--;)if(i=b[e],i.levelNumber===c){b.pop();d=i.lowerSeries;if(!d.chart)for(f=g.length;f--;)if(g[f].options.id===i.lowerSeriesOptions.id&&g[f].options._levelNumber===c+1){d=g[f];break}d.xData=[];h(i.levelSeriesOptions,k);x(a,"drillup",{seriesOptions:i.seriesOptions});if(j.type===d.type)j.drilldownLevel=i,j.options.animation=a.options.drilldown.animation,d.animateDrillupFrom&&d.chart&&d.animateDrillupFrom(i);j.options._levelNumber=c;d.remove(!1);if(j.xAxis)f=i.oldExtremes, -j.xAxis.setExtremes(f.xMin,f.xMax,!1),j.yAxis.setExtremes(f.yMin,f.yMax,!1)}this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align();this.ddDupes.length=[]};n.prototype.supportsDrilldown=!0;n.prototype.animateDrillupTo=function(a){if(!a){var b=this,c=b.drilldownLevel;h(this.points,function(a){a.graphic&&a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){b.points&& -h(b.points,function(a,b){var f=b===(c&&c.pointIndex)?"show":"fadeIn",d=f==="show"?!0:void 0;if(a.graphic)a.graphic[f](d);if(a.dataLabel)a.dataLabel[f](d);if(a.connector)a.connector[f](d)})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=t}};n.prototype.animateDrilldown=function(a){var b=this,c=this.chart.drilldownLevels,e,d=this.chart.options.drilldown.animation,f=this.xAxis;if(!a)h(c,function(a){if(b.options._ddSeriesId===a.lowerSeriesOptions._ddSeriesId)e=a.shapeArgs, -e.fill=a.color}),e.x+=u(f.oldPos,f.pos)-f.pos,h(this.points,function(a){a.graphic&&a.graphic.attr(e).animate(l(a.shapeArgs,{fill:a.color}),d);a.dataLabel&&a.dataLabel.fadeIn(d)}),this.animate=null};n.prototype.animateDrillupFrom=function(a){var b=this.chart.options.drilldown.animation,c=this.group,e=this;h(e.trackerGroups,function(a){if(e[a])e[a].on("mouseover")});delete this.group;h(this.points,function(e){var f=e.graphic,i=function(){f.destroy();c&&(c=c.destroy())};f&&(delete e.graphic,b?f.animate(l(a.shapeArgs, -{fill:a.color}),d.merge(b,{complete:i})):(f.attr(a.shapeArgs),i()))})};v&&l(v.prototype,{supportsDrilldown:!0,animateDrillupTo:n.prototype.animateDrillupTo,animateDrillupFrom:n.prototype.animateDrillupFrom,animateDrilldown:function(a){var b=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,e=b.shapeArgs,g=e.start,f=(e.end-g)/this.points.length;if(!a)h(this.points,function(a,h){a.graphic.attr(d.merge(e,{start:g+h*f,end:g+(h+1)*f,fill:b.color}))[c? -"animate":"attr"](l(a.shapeArgs,{fill:a.color}),c)}),this.animate=null}});d.Point.prototype.doDrilldown=function(a,b){var c=this.series.chart,e=c.options.drilldown,d=(e.series||[]).length,f;if(!c.ddDupes)c.ddDupes=[];for(;d--&&!f;)e.series[d].id===this.drilldown&&y(this.drilldown,c.ddDupes)===-1&&(f=e.series[d],c.ddDupes.push(this.drilldown));x(c,"drilldown",{point:this,seriesOptions:f,category:b,points:b!==void 0&&this.series.xAxis.ddPoints[b].slice(0)});f&&(a?c.addSingleSeriesAsDrilldown(this,f): -c.addSeriesAsDrilldown(this,f))};d.Axis.prototype.drilldownCategory=function(a){var b,c,d=this.ddPoints[a];for(b in d)(c=d[b])&&c.series&&c.series.visible&&c.doDrilldown&&c.doDrilldown(!0,a);this.chart.applyDrilldown()};d.Axis.prototype.getDDPoints=function(a,b){var c=this.ddPoints;if(!c)this.ddPoints=c={};c[a]||(c[a]=[]);if(c[a].levelNumber!==b)c[a].length=0;return c[a]};w.prototype.drillable=function(){var a=this.pos,b=this.label,c=this.axis,e=c.ddPoints&&c.ddPoints[a];if(b&&e&&e.length){if(!b.basicStyles)b.basicStyles= -d.merge(b.styles);b.addClass("highcharts-drilldown-axis-label").css(c.chart.options.drilldown.activeAxisLabelStyle).on("click",function(){c.drilldownCategory(a)})}else if(b&&b.basicStyles)b.styles={},b.css(b.basicStyles),b.on("click",null)};r(w.prototype,"addLabel",function(a){a.call(this);this.drillable()});r(d.Point.prototype,"init",function(a,b,c,e){var g=a.call(this,b,c,e),a=(c=b.xAxis)&&c.ticks[e],c=c&&c.getDDPoints(e,b.options._levelNumber);if(g.drilldown&&(d.addEvent(g,"click",function(){b.xAxis&& -b.chart.options.drilldown.allowPointDrilldown===!1?b.xAxis.drilldownCategory(e):g.doDrilldown()}),c))c.push(g),c.levelNumber=b.options._levelNumber;a&&a.drillable();return g});r(d.Series.prototype,"drawDataLabels",function(a){var b=this.chart.options.drilldown.activeDataLabelStyle;a.call(this);h(this.points,function(a){a.drilldown&&a.dataLabel&&a.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(b)})});var s,q=function(a){a.call(this);h(this.points,function(a){a.drilldown&&a.graphic&& -a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(s in p)p[s].prototype.supportsDrilldown&&r(p[s].prototype,"drawTracker",q)}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/drilldown.src.js b/platforms/android/assets/www/lib/highcharts/modules/drilldown.src.js deleted file mode 100644 index b5bfdc76..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/drilldown.src.js +++ /dev/null @@ -1,717 +0,0 @@ -/** - * Highcharts Drilldown module - * - * Author: Torstein Honsi - * License: www.highcharts.com/license - * - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - 'use strict'; - - var noop = function () {}, - defaultOptions = H.getOptions(), - each = H.each, - extend = H.extend, - format = H.format, - pick = H.pick, - wrap = H.wrap, - Chart = H.Chart, - seriesTypes = H.seriesTypes, - PieSeries = seriesTypes.pie, - ColumnSeries = seriesTypes.column, - Tick = H.Tick, - fireEvent = H.fireEvent, - inArray = H.inArray, - ddSeriesId = 1; - - // Utilities - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. This method is copied from ColorAxis.js - * and should always be kept updated, until we get AMD support. - */ - function tweenColors(from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - } - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - H.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, tweenColors(H.Color(this.start), H.Color(this.end), this.pos)); - }; - }); - - // Add language - extend(defaultOptions.lang, { - drillUpText: '◁ Back to {series.name}' - }); - defaultOptions.drilldown = { - activeAxisLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - activeDataLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - animation: { - duration: 500 - }, - drillUpButton: { - position: { - align: 'right', - x: -10, - y: 10 - } - // relativeTo: 'plotBox' - // theme - } - }; - - /** - * A general fadeIn method - */ - H.SVGRenderer.prototype.Element.prototype.fadeIn = function (animation) { - this - .attr({ - opacity: 0.1, - visibility: 'inherit' - }) - .animate({ - opacity: pick(this.newOpacity, 1) // newOpacity used in maps - }, animation || { - duration: 250 - }); - }; - - Chart.prototype.addSeriesAsDrilldown = function (point, ddOptions) { - this.addSingleSeriesAsDrilldown(point, ddOptions); - this.applyDrilldown(); - }; - Chart.prototype.addSingleSeriesAsDrilldown = function (point, ddOptions) { - var oldSeries = point.series, - xAxis = oldSeries.xAxis, - yAxis = oldSeries.yAxis, - newSeries, - color = point.color || oldSeries.color, - pointIndex, - levelSeries = [], - levelSeriesOptions = [], - level, - levelNumber, - last; - - if (!this.drilldownLevels) { - this.drilldownLevels = []; - } - - levelNumber = oldSeries.options._levelNumber || 0; - - // See if we can reuse the registered series from last run - last = this.drilldownLevels[this.drilldownLevels.length - 1]; - if (last && last.levelNumber !== levelNumber) { - last = undefined; - } - - - ddOptions = extend({ - color: color, - _ddSeriesId: ddSeriesId++ - }, ddOptions); - pointIndex = inArray(point, oldSeries.points); - - // Record options for all current series - each(oldSeries.chart.series, function (series) { - if (series.xAxis === xAxis && !series.isDrilling) { - series.options._ddSeriesId = series.options._ddSeriesId || ddSeriesId++; - series.options._colorIndex = series.userOptions._colorIndex; - series.options._levelNumber = series.options._levelNumber || levelNumber; // #3182 - - if (last) { - levelSeries = last.levelSeries; - levelSeriesOptions = last.levelSeriesOptions; - } else { - levelSeries.push(series); - levelSeriesOptions.push(series.options); - } - } - }); - - // Add a record of properties for each drilldown level - level = { - levelNumber: levelNumber, - seriesOptions: oldSeries.options, - levelSeriesOptions: levelSeriesOptions, - levelSeries: levelSeries, - shapeArgs: point.shapeArgs, - bBox: point.graphic ? point.graphic.getBBox() : {}, // no graphic in line series with markers disabled - color: color, - lowerSeriesOptions: ddOptions, - pointOptions: oldSeries.options.data[pointIndex], - pointIndex: pointIndex, - oldExtremes: { - xMin: xAxis && xAxis.userMin, - xMax: xAxis && xAxis.userMax, - yMin: yAxis && yAxis.userMin, - yMax: yAxis && yAxis.userMax - } - }; - - // Push it to the lookup array - this.drilldownLevels.push(level); - - newSeries = level.lowerSeries = this.addSeries(ddOptions, false); - newSeries.options._levelNumber = levelNumber + 1; - if (xAxis) { - xAxis.oldPos = xAxis.pos; - xAxis.userMin = xAxis.userMax = null; - yAxis.userMin = yAxis.userMax = null; - } - - // Run fancy cross-animation on supported and equal types - if (oldSeries.type === newSeries.type) { - newSeries.animate = newSeries.animateDrilldown || noop; - newSeries.options.animation = true; - } - }; - - Chart.prototype.applyDrilldown = function () { - var drilldownLevels = this.drilldownLevels, - levelToRemove; - - if (drilldownLevels && drilldownLevels.length > 0) { // #3352, async loading - levelToRemove = drilldownLevels[drilldownLevels.length - 1].levelNumber; - each(this.drilldownLevels, function (level) { - if (level.levelNumber === levelToRemove) { - each(level.levelSeries, function (series) { - if (series.options && series.options._levelNumber === levelToRemove) { // Not removed, not added as part of a multi-series drilldown - series.remove(false); - } - }); - } - }); - } - - this.redraw(); - this.showDrillUpButton(); - }; - - Chart.prototype.getDrilldownBackText = function () { - var drilldownLevels = this.drilldownLevels, - lastLevel; - if (drilldownLevels && drilldownLevels.length > 0) { // #3352, async loading - lastLevel = drilldownLevels[drilldownLevels.length - 1]; - lastLevel.series = lastLevel.seriesOptions; - return format(this.options.lang.drillUpText, lastLevel); - } - - }; - - Chart.prototype.showDrillUpButton = function () { - var chart = this, - backText = this.getDrilldownBackText(), - buttonOptions = chart.options.drilldown.drillUpButton, - attr, - states; - - - if (!this.drillUpButton) { - attr = buttonOptions.theme; - states = attr && attr.states; - - this.drillUpButton = this.renderer.button( - backText, - null, - null, - function () { - chart.drillUp(); - }, - attr, - states && states.hover, - states && states.select - ) - .attr({ - align: buttonOptions.position.align, - zIndex: 9 - }) - .add() - .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); - } else { - this.drillUpButton.attr({ - text: backText - }) - .align(); - } - }; - - Chart.prototype.drillUp = function () { - var chart = this, - drilldownLevels = chart.drilldownLevels, - levelNumber = drilldownLevels[drilldownLevels.length - 1].levelNumber, - i = drilldownLevels.length, - chartSeries = chart.series, - seriesI, - level, - oldSeries, - newSeries, - oldExtremes, - addSeries = function (seriesOptions) { - var addedSeries; - each(chartSeries, function (series) { - if (series.options._ddSeriesId === seriesOptions._ddSeriesId) { - addedSeries = series; - } - }); - - addedSeries = addedSeries || chart.addSeries(seriesOptions, false); - if (addedSeries.type === oldSeries.type && addedSeries.animateDrillupTo) { - addedSeries.animate = addedSeries.animateDrillupTo; - } - if (seriesOptions === level.seriesOptions) { - newSeries = addedSeries; - } - }; - - while (i--) { - - level = drilldownLevels[i]; - if (level.levelNumber === levelNumber) { - drilldownLevels.pop(); - - // Get the lower series by reference or id - oldSeries = level.lowerSeries; - if (!oldSeries.chart) { // #2786 - seriesI = chartSeries.length; // #2919 - while (seriesI--) { - if (chartSeries[seriesI].options.id === level.lowerSeriesOptions.id && - chartSeries[seriesI].options._levelNumber === levelNumber + 1) { // #3867 - oldSeries = chartSeries[seriesI]; - break; - } - } - } - oldSeries.xData = []; // Overcome problems with minRange (#2898) - - each(level.levelSeriesOptions, addSeries); - - fireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions }); - - if (newSeries.type === oldSeries.type) { - newSeries.drilldownLevel = level; - newSeries.options.animation = chart.options.drilldown.animation; - - if (oldSeries.animateDrillupFrom && oldSeries.chart) { // #2919 - oldSeries.animateDrillupFrom(level); - } - } - newSeries.options._levelNumber = levelNumber; - - oldSeries.remove(false); - - // Reset the zoom level of the upper series - if (newSeries.xAxis) { - oldExtremes = level.oldExtremes; - newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false); - newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false); - } - } - } - - this.redraw(); - - if (this.drilldownLevels.length === 0) { - this.drillUpButton = this.drillUpButton.destroy(); - } else { - this.drillUpButton.attr({ - text: this.getDrilldownBackText() - }) - .align(); - } - - this.ddDupes.length = []; // #3315 - }; - - - ColumnSeries.prototype.supportsDrilldown = true; - - /** - * When drilling up, keep the upper series invisible until the lower series has - * moved into place - */ - ColumnSeries.prototype.animateDrillupTo = function (init) { - if (!init) { - var newSeries = this, - level = newSeries.drilldownLevel; - - each(this.points, function (point) { - if (point.graphic) { // #3407 - point.graphic.hide(); - } - if (point.dataLabel) { - point.dataLabel.hide(); - } - if (point.connector) { - point.connector.hide(); - } - }); - - - // Do dummy animation on first point to get to complete - setTimeout(function () { - if (newSeries.points) { // May be destroyed in the meantime, #3389 - each(newSeries.points, function (point, i) { - // Fade in other points - var verb = i === (level && level.pointIndex) ? 'show' : 'fadeIn', - inherit = verb === 'show' ? true : undefined; - if (point.graphic) { // #3407 - point.graphic[verb](inherit); - } - if (point.dataLabel) { - point.dataLabel[verb](inherit); - } - if (point.connector) { - point.connector[verb](inherit); - } - }); - } - }, Math.max(this.chart.options.drilldown.animation.duration - 50, 0)); - - // Reset - this.animate = noop; - } - - }; - - ColumnSeries.prototype.animateDrilldown = function (init) { - var series = this, - drilldownLevels = this.chart.drilldownLevels, - animateFrom, - animationOptions = this.chart.options.drilldown.animation, - xAxis = this.xAxis; - - if (!init) { - each(drilldownLevels, function (level) { - if (series.options._ddSeriesId === level.lowerSeriesOptions._ddSeriesId) { - animateFrom = level.shapeArgs; - animateFrom.fill = level.color; - } - }); - - animateFrom.x += (pick(xAxis.oldPos, xAxis.pos) - xAxis.pos); - - each(this.points, function (point) { - if (point.graphic) { - point.graphic - .attr(animateFrom) - .animate( - extend(point.shapeArgs, { fill: point.color }), - animationOptions - ); - } - if (point.dataLabel) { - point.dataLabel.fadeIn(animationOptions); - } - }); - this.animate = null; - } - - }; - - /** - * When drilling up, pull out the individual point graphics from the lower series - * and animate them into the origin point in the upper series. - */ - ColumnSeries.prototype.animateDrillupFrom = function (level) { - var animationOptions = this.chart.options.drilldown.animation, - group = this.group, - series = this; - - // Cancel mouse events on the series group (#2787) - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key].on('mouseover'); - } - }); - - - delete this.group; - each(this.points, function (point) { - var graphic = point.graphic, - complete = function () { - graphic.destroy(); - if (group) { - group = group.destroy(); - } - }; - - if (graphic) { - - delete point.graphic; - - if (animationOptions) { - graphic.animate( - extend(level.shapeArgs, { fill: level.color }), - H.merge(animationOptions, { complete: complete }) - ); - } else { - graphic.attr(level.shapeArgs); - complete(); - } - } - }); - }; - - if (PieSeries) { - extend(PieSeries.prototype, { - supportsDrilldown: true, - animateDrillupTo: ColumnSeries.prototype.animateDrillupTo, - animateDrillupFrom: ColumnSeries.prototype.animateDrillupFrom, - - animateDrilldown: function (init) { - var level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1], - animationOptions = this.chart.options.drilldown.animation, - animateFrom = level.shapeArgs, - start = animateFrom.start, - angle = animateFrom.end - start, - startAngle = angle / this.points.length; - - if (!init) { - each(this.points, function (point, i) { - point.graphic - .attr(H.merge(animateFrom, { - start: start + i * startAngle, - end: start + (i + 1) * startAngle, - fill: level.color - }))[animationOptions ? 'animate' : 'attr']( - extend(point.shapeArgs, { fill: point.color }), - animationOptions - ); - }); - this.animate = null; - } - } - }); - } - - H.Point.prototype.doDrilldown = function (_holdRedraw, category) { - var series = this.series, - chart = series.chart, - drilldown = chart.options.drilldown, - i = (drilldown.series || []).length, - seriesOptions; - - if (!chart.ddDupes) { - chart.ddDupes = []; - } - - while (i-- && !seriesOptions) { - if (drilldown.series[i].id === this.drilldown && inArray(this.drilldown, chart.ddDupes) === -1) { - seriesOptions = drilldown.series[i]; - chart.ddDupes.push(this.drilldown); - } - } - - // Fire the event. If seriesOptions is undefined, the implementer can check for - // seriesOptions, and call addSeriesAsDrilldown async if necessary. - fireEvent(chart, 'drilldown', { - point: this, - seriesOptions: seriesOptions, - category: category, - points: category !== undefined && this.series.xAxis.ddPoints[category].slice(0) - }); - - if (seriesOptions) { - if (_holdRedraw) { - chart.addSingleSeriesAsDrilldown(this, seriesOptions); - } else { - chart.addSeriesAsDrilldown(this, seriesOptions); - } - } - }; - - /** - * Drill down to a given category. This is the same as clicking on an axis label. - */ - H.Axis.prototype.drilldownCategory = function (x) { - var key, - point, - ddPointsX = this.ddPoints[x]; - for (key in ddPointsX) { - point = ddPointsX[key]; - if (point && point.series && point.series.visible && point.doDrilldown) { // #3197 - point.doDrilldown(true, x); - } - } - this.chart.applyDrilldown(); - }; - - /** - * Create and return a collection of points associated with the X position. Reset it for each level. - */ - H.Axis.prototype.getDDPoints = function (x, levelNumber) { - var ddPoints = this.ddPoints; - if (!ddPoints) { - this.ddPoints = ddPoints = {}; - } - if (!ddPoints[x]) { - ddPoints[x] = []; - } - if (ddPoints[x].levelNumber !== levelNumber) { - ddPoints[x].length = 0; // reset - } - return ddPoints[x]; - }; - - - /** - * Make a tick label drillable, or remove drilling on update - */ - Tick.prototype.drillable = function () { - var pos = this.pos, - label = this.label, - axis = this.axis, - ddPointsX = axis.ddPoints && axis.ddPoints[pos]; - - if (label && ddPointsX && ddPointsX.length) { - if (!label.basicStyles) { - label.basicStyles = H.merge(label.styles); - } - label - .addClass('highcharts-drilldown-axis-label') - .css(axis.chart.options.drilldown.activeAxisLabelStyle) - .on('click', function () { - axis.drilldownCategory(pos); - }); - - } else if (label && label.basicStyles) { - label.styles = {}; // reset for full overwrite of styles - label.css(label.basicStyles); - label.on('click', null); // #3806 - } - }; - - /** - * Always keep the drillability updated (#3951) - */ - wrap(Tick.prototype, 'addLabel', function (proceed) { - proceed.call(this); - this.drillable(); - }); - - - /** - * On initialization of each point, identify its label and make it clickable. Also, provide a - * list of points associated to that label. - */ - wrap(H.Point.prototype, 'init', function (proceed, series, options, x) { - var point = proceed.call(this, series, options, x), - xAxis = series.xAxis, - tick = xAxis && xAxis.ticks[x], - ddPointsX = xAxis && xAxis.getDDPoints(x, series.options._levelNumber); - - if (point.drilldown) { - - // Add the click event to the point - H.addEvent(point, 'click', function () { - if (series.xAxis && series.chart.options.drilldown.allowPointDrilldown === false) { - series.xAxis.drilldownCategory(x); - } else { - point.doDrilldown(); - } - }); - /*wrap(point, 'importEvents', function (proceed) { // wrapping importEvents makes point.click event work - if (!this.hasImportedEvents) { - proceed.call(this); - H.addEvent(this, 'click', function () { - this.doDrilldown(); - }); - } - });*/ - - - // Register drilldown points on this X value - if (ddPointsX) { - ddPointsX.push(point); - ddPointsX.levelNumber = series.options._levelNumber; - } - - } - - // Add or remove click handler and style on the tick label - if (tick) { - tick.drillable(); - } - - return point; - }); - - wrap(H.Series.prototype, 'drawDataLabels', function (proceed) { - var css = this.chart.options.drilldown.activeDataLabelStyle; - - proceed.call(this); - - each(this.points, function (point) { - if (point.drilldown && point.dataLabel) { - point.dataLabel - .attr({ - 'class': 'highcharts-drilldown-data-label' - }) - .css(css); - } - }); - }); - - // Mark the trackers with a pointer - var type, - drawTrackerWrapper = function (proceed) { - proceed.call(this); - each(this.points, function (point) { - if (point.drilldown && point.graphic) { - point.graphic - .attr({ - 'class': 'highcharts-drilldown-point' - }) - .css({ cursor: 'pointer' }); - } - }); - }; - for (type in seriesTypes) { - if (seriesTypes[type].prototype.supportsDrilldown) { - wrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper); - } - } - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/exporting.js b/platforms/android/assets/www/lib/highcharts/modules/exporting.js deleted file mode 100644 index 36a85056..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/exporting.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Exporting module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(f){typeof module==="object"&&module.exports?module.exports=f:f(Highcharts)})(function(f){var r=f.win,m=r.document,A=f.Chart,t=f.addEvent,B=f.removeEvent,C=f.fireEvent,n=f.createElement,s=f.discardElement,v=f.css,l=f.merge,i=f.each,q=f.extend,F=f.splat,G=Math.max,H=f.isTouchDevice,I=f.Renderer.prototype.symbols,y=f.getOptions(),z;q(y.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image", -contextButtonTitle:"Chart context menu"});y.navigation={menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:H?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}}; -y.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu",symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG", -onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(a,b,e){var c,a=n("form",l({method:"post",action:a,enctype:"multipart/form-data"},e),{display:"none"},m.body);for(c in b)n("input",{type:"hidden",name:c,value:b[c]},null,a);a.submit();s(a)};q(A.prototype,{sanitizeSVG:function(a){return a.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (NS[0-9]+\:)?href=/g, -" xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1="rgb($2)" $1-opacity="$3"').replace(/&nbsp;/g,"\u00a0").replace(/&shy;/g,"\u00ad").replace(/<IMG /g,"<image ").replace(/<(\/?)TITLE>/g,"<$1title>").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/ id=([^" >]+)/g,' id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g, -" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(b){return b.toLowerCase()})},getChartHTML:function(){return this.container.innerHTML},getSVG:function(a){var b=this,e,c,g,j,k,d=l(b.options,a),J=d.exporting.allowHTML;if(!m.createElementNS)m.createElementNS=function(b,a){return m.createElement(a)};c=n("div",null,{position:"absolute",top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},m.body);g=b.renderTo.style.width;k=b.renderTo.style.height;g=d.exporting.sourceWidth|| -d.chart.width||/px$/.test(g)&&parseInt(g,10)||600;k=d.exporting.sourceHeight||d.chart.height||/px$/.test(k)&&parseInt(k,10)||400;q(d.chart,{animation:!1,renderTo:c,forExport:!0,renderer:"SVGRenderer",width:g,height:k});d.exporting.enabled=!1;delete d.data;d.series=[];i(b.series,function(a){j=l(a.options,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:a.visible});j.isInternal||d.series.push(j)});a&&i(["xAxis","yAxis"],function(b){i(F(a[b]),function(a,c){d[b][c]=l(d[b][c],a)})});e=new f.Chart(d, -b.callback);i(["xAxis","yAxis"],function(a){i(b[a],function(b,c){var d=e[a][c],f=b.getExtremes(),g=f.userMin,f=f.userMax;d&&(g!==void 0||f!==void 0)&&d.setExtremes(g,f,!0,!1)})});g=e.getChartHTML();d=null;e.destroy();s(c);if(J&&(c=g.match(/<\/svg>(.*?$)/)))c='<foreignObject x="0" y="0" width="200" height="200"><body xmlns="http://www.w3.org/1999/xhtml">'+c[1]+"</body></foreignObject>",g=g.replace("</svg>",c+"</svg>");g=this.sanitizeSVG(g);return g=g.replace(/(url\(#highcharts-[0-9]+)&quot;/g,"$1").replace(/&quot;/g, -"'")},getSVGForExport:function(a,b){var e=this.options.exporting;return this.getSVG(l({chart:{borderRadius:0}},e.chartOptions,b,{exporting:{sourceWidth:a&&a.sourceWidth||e.sourceWidth,sourceHeight:a&&a.sourceHeight||e.sourceHeight}}))},exportChart:function(a,b){var e=this.getSVGForExport(a,b),a=l(this.options.exporting,a);f.post(a.url,{filename:a.filename||"chart",type:a.type,width:a.width||0,scale:a.scale||2,svg:e},a.formAttributes)},print:function(){var a=this,b=a.container,e=[],c=b.parentNode, -f=m.body,j=f.childNodes;if(!a.isPrinting)a.isPrinting=!0,a.pointer.reset(null,0),C(a,"beforePrint"),i(j,function(a,b){if(a.nodeType===1)e[b]=a.style.display,a.style.display="none"}),f.appendChild(b),r.focus(),r.print(),setTimeout(function(){c.appendChild(b);i(j,function(a,b){if(a.nodeType===1)a.style.display=e[b]});a.isPrinting=!1;C(a,"afterPrint")},1E3)},contextMenu:function(a,b,e,c,f,j,k){var d=this,l=d.options.navigation,D=l.menuItemStyle,o=d.chartWidth,p=d.chartHeight,E="cache-"+a,h=d[E],u=G(f, -j),w,x,r,s=function(b){d.pointer.inClass(b.target,a)||x()};if(!h)d[E]=h=n("div",{className:a},{position:"absolute",zIndex:1E3,padding:u+"px"},d.container),w=n("div",null,q({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},l.menuStyle),h),x=function(){v(h,{display:"none"});k&&k.setState(0);d.openMenu=!1},t(h,"mouseleave",function(){r=setTimeout(x,500)}),t(h,"mouseenter",function(){clearTimeout(r)}),t(m,"mouseup",s),t(d,"destroy",function(){B(m,"mouseup", -s)}),i(b,function(a){if(a){var b=a.separator?n("hr",null,null,w):n("div",{onmouseover:function(){v(this,l.menuItemHoverStyle)},onmouseout:function(){v(this,D)},onclick:function(b){b&&b.stopPropagation();x();a.onclick&&a.onclick.apply(d,arguments)},innerHTML:a.text||d.options.lang[a.textKey]},q({cursor:"pointer"},D),w);d.exportDivElements.push(b)}}),d.exportDivElements.push(w,h),d.exportMenuWidth=h.offsetWidth,d.exportMenuHeight=h.offsetHeight;b={display:"block"};e+d.exportMenuWidth>o?b.right=o-e- -f-u+"px":b.left=e-u+"px";c+j+d.exportMenuHeight>p&&k.alignOptions.verticalAlign!=="top"?b.bottom=p-c-u+"px":b.top=c+j-u+"px";v(h,b);d.openMenu=!0},addButton:function(a){var b=this,e=b.renderer,c=l(b.options.navigation.buttonOptions,a),g=c.onclick,j=c.menuItems,k,d,m={stroke:c.symbolStroke,fill:c.symbolFill},i=c.symbolSize||12;if(!b.btnCount)b.btnCount=0;if(!b.exportDivElements)b.exportDivElements=[],b.exportSVGElements=[];if(c.enabled!==!1){var o=c.theme,p=o.states,n=p&&p.hover,p=p&&p.select,h;delete o.states; -g?h=function(a){a.stopPropagation();g.call(b,a)}:j&&(h=function(){b.contextMenu(d.menuClassName,j,d.translateX,d.translateY,d.width,d.height,d);d.setState(2)});c.text&&c.symbol?o.paddingLeft=f.pick(o.paddingLeft,25):c.text||q(o,{width:c.width,height:c.height,padding:0});d=e.button(c.text,0,0,h,o,n,p).attr({title:b.options.lang[c._titleKey],"stroke-linecap":"round"});d.menuClassName=a.menuClassName||"highcharts-menu-"+b.btnCount++;c.symbol&&(k=e.symbol(c.symbol,c.symbolX-i/2,c.symbolY-i/2,i,i).attr(q(m, -{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(d));d.add().align(q(c,{width:d.width,x:f.pick(c.x,z)}),!0,"spacingBox");z+=(d.width+c.buttonSpacing)*(c.align==="right"?-1:1);b.exportSVGElements.push(d,k)}},destroyExport:function(a){var a=a.target,b,e;for(b=0;b<a.exportSVGElements.length;b++)if(e=a.exportSVGElements[b])e.onclick=e.ontouchstart=null,a.exportSVGElements[b]=e.destroy();for(b=0;b<a.exportDivElements.length;b++)e=a.exportDivElements[b],B(e,"mouseleave"),a.exportDivElements[b]=e.onmouseout= -e.onmouseover=e.ontouchstart=e.onclick=null,s(e)}});I.menu=function(a,b,e,c){return["M",a,b+2.5,"L",a+e,b+2.5,"M",a,b+c/2+0.5,"L",a+e,b+c/2+0.5,"M",a,b+c-1.5,"L",a+e,b+c-1.5]};A.prototype.callbacks.push(function(a){var b,e=a.options.exporting,c=e.buttons;z=0;if(e.enabled!==!1){for(b in c)a.addButton(c[b]);t(a,"destroy",a.destroyExport)}})}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/exporting.src.js b/platforms/android/assets/www/lib/highcharts/modules/exporting.src.js deleted file mode 100644 index 82a01e61..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/exporting.src.js +++ /dev/null @@ -1,780 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Exporting module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/* eslint indent:0 */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - -// create shortcuts -var win = Highcharts.win, - doc = win.document, - Chart = Highcharts.Chart, - addEvent = Highcharts.addEvent, - removeEvent = Highcharts.removeEvent, - fireEvent = Highcharts.fireEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement, - css = Highcharts.css, - merge = Highcharts.merge, - each = Highcharts.each, - extend = Highcharts.extend, - splat = Highcharts.splat, - math = Math, - mathMax = math.max, - isTouchDevice = Highcharts.isTouchDevice, - M = 'M', - L = 'L', - DIV = 'div', - HIDDEN = 'hidden', - NONE = 'none', - PREFIX = 'highcharts-', - ABSOLUTE = 'absolute', - PX = 'px', - UNDEFINED, - symbols = Highcharts.Renderer.prototype.symbols, - defaultOptions = Highcharts.getOptions(), - buttonOffset; - - // Add language - extend(defaultOptions.lang, { - printChart: 'Print chart', - downloadPNG: 'Download PNG image', - downloadJPEG: 'Download JPEG image', - downloadPDF: 'Download PDF document', - downloadSVG: 'Download SVG vector image', - contextButtonTitle: 'Chart context menu' - }); - -// Buttons and menus are collected in a separate config option set called 'navigation'. -// This can be extended later to add control buttons like zoom and pan right click menus. -defaultOptions.navigation = { - menuStyle: { - border: '1px solid #A0A0A0', - background: '#FFFFFF', - padding: '5px 0' - }, - menuItemStyle: { - padding: '0 10px', - background: NONE, - color: '#303030', - fontSize: isTouchDevice ? '14px' : '11px' - }, - menuItemHoverStyle: { - background: '#4572A5', - color: '#FFFFFF' - }, - - buttonOptions: { - symbolFill: '#E0E0E0', - symbolSize: 14, - symbolStroke: '#666', - symbolStrokeWidth: 3, - symbolX: 12.5, - symbolY: 10.5, - align: 'right', - buttonSpacing: 3, - height: 22, - // text: null, - theme: { - fill: 'white', // capture hover - stroke: 'none' - }, - verticalAlign: 'top', - width: 24 - } -}; - - - -// Add the export related options -defaultOptions.exporting = { - //enabled: true, - //filename: 'chart', - type: 'image/png', - url: 'http://export.highcharts.com/', - //width: undefined, - //scale: 2 - buttons: { - contextButton: { - menuClassName: PREFIX + 'contextmenu', - //x: -10, - symbol: 'menu', - _titleKey: 'contextButtonTitle', - menuItems: [{ - textKey: 'printChart', - onclick: function () { - this.print(); - } - }, { - separator: true - }, { - textKey: 'downloadPNG', - onclick: function () { - this.exportChart(); - } - }, { - textKey: 'downloadJPEG', - onclick: function () { - this.exportChart({ - type: 'image/jpeg' - }); - } - }, { - textKey: 'downloadPDF', - onclick: function () { - this.exportChart({ - type: 'application/pdf' - }); - } - }, { - textKey: 'downloadSVG', - onclick: function () { - this.exportChart({ - type: 'image/svg+xml' - }); - } - } - // Enable this block to add "View SVG" to the dropdown menu - /* - ,{ - - text: 'View SVG', - onclick: function () { - var svg = this.getSVG() - .replace(/</g, '\n&lt;') - .replace(/>/g, '&gt;'); - - doc.body.innerHTML = '<pre>' + svg + '</pre>'; - } - } // */ - ] - } - } -}; - -// Add the Highcharts.post utility -Highcharts.post = function (url, data, formAttributes) { - var name, - form; - - // create the form - form = createElement('form', merge({ - method: 'post', - action: url, - enctype: 'multipart/form-data' - }, formAttributes), { - display: NONE - }, doc.body); - - // add the data - for (name in data) { - createElement('input', { - type: HIDDEN, - name: name, - value: data[name] - }, null, form); - } - - // submit - form.submit(); - - // clean up - discardElement(form); -}; - -extend(Chart.prototype, { - - /** - * A collection of regex fixes on the produces SVG to account for expando properties, - * browser bugs, VML problems and other. Returns a cleaned SVG. - */ - sanitizeSVG: function (svg) { - return svg - .replace(/zIndex="[^"]+"/g, '') - .replace(/isShadow="[^"]+"/g, '') - .replace(/symbolName="[^"]+"/g, '') - .replace(/jQuery[0-9]+="[^"]+"/g, '') - .replace(/url\([^#]+#/g, 'url(#') - .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ') - .replace(/ (NS[0-9]+\:)?href=/g, ' xlink:href=') // #3567 - .replace(/\n/, ' ') - // Any HTML added to the container after the SVG (#894) - .replace(/<\/svg>.*?$/, '</svg>') - // Batik doesn't support rgba fills and strokes (#3095) - .replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, '$1="rgb($2)" $1-opacity="$3"') - /* This fails in IE < 8 - .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight - return s2 +'.'+ s3[0]; - })*/ - - // Replace HTML entities, issue #347 - .replace(/&nbsp;/g, '\u00A0') // no-break space - .replace(/&shy;/g, '\u00AD') // soft hyphen - - // IE specific - .replace(/<IMG /g, '<image ') - .replace(/<(\/?)TITLE>/g, '<$1title>') - .replace(/height=([^" ]+)/g, 'height="$1"') - .replace(/width=([^" ]+)/g, 'width="$1"') - .replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>') - .replace(/ id=([^" >]+)/g, ' id="$1"') // #4003 - .replace(/class=([^" >]+)/g, 'class="$1"') - .replace(/ transform /g, ' ') - .replace(/:(path|rect)/g, '$1') - .replace(/style="([^"]+)"/g, function (s) { - return s.toLowerCase(); - }); - }, - - /** - * Return innerHTML of chart. Used as hook for plugins. - */ - getChartHTML: function () { - return this.container.innerHTML; - }, - - /** - * Return an SVG representation of the chart - * - * @param additionalOptions {Object} Additional chart options for the generated SVG representation - */ - getSVG: function (additionalOptions) { - var chart = this, - chartCopy, - sandbox, - svg, - seriesOptions, - sourceWidth, - sourceHeight, - cssWidth, - cssHeight, - html, - options = merge(chart.options, additionalOptions), // copy the options and add extra options - allowHTML = options.exporting.allowHTML; - - - // IE compatibility hack for generating SVG content that it doesn't really understand - if (!doc.createElementNS) { - doc.createElementNS = function (ns, tagName) { - return doc.createElement(tagName); - }; - } - - // create a sandbox where a new chart will be generated - sandbox = createElement(DIV, null, { - position: ABSOLUTE, - top: '-9999em', - width: chart.chartWidth + PX, - height: chart.chartHeight + PX - }, doc.body); - - // get the source size - cssWidth = chart.renderTo.style.width; - cssHeight = chart.renderTo.style.height; - sourceWidth = options.exporting.sourceWidth || - options.chart.width || - (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) || - 600; - sourceHeight = options.exporting.sourceHeight || - options.chart.height || - (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) || - 400; - - // override some options - extend(options.chart, { - animation: false, - renderTo: sandbox, - forExport: true, - renderer: 'SVGRenderer', - width: sourceWidth, - height: sourceHeight - }); - options.exporting.enabled = false; // hide buttons in print - delete options.data; // #3004 - - // prepare for replicating the chart - options.series = []; - each(chart.series, function (serie) { - seriesOptions = merge(serie.options, { - animation: false, // turn off animation - enableMouseTracking: false, - showCheckbox: false, - visible: serie.visible - }); - - if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set - options.series.push(seriesOptions); - } - }); - - // Axis options must be merged in one by one, since it may be an array or an object (#2022, #3900) - if (additionalOptions) { - each(['xAxis', 'yAxis'], function (axisType) { - each(splat(additionalOptions[axisType]), function (axisOptions, i) { - options[axisType][i] = merge(options[axisType][i], axisOptions); - }); - }); - } - - // generate the chart copy - chartCopy = new Highcharts.Chart(options, chart.callback); - - // reflect axis extremes in the export - each(['xAxis', 'yAxis'], function (axisType) { - each(chart[axisType], function (axis, i) { - var axisCopy = chartCopy[axisType][i], - extremes = axis.getExtremes(), - userMin = extremes.userMin, - userMax = extremes.userMax; - - if (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) { - axisCopy.setExtremes(userMin, userMax, true, false); - } - }); - }); - - // get the SVG from the container's innerHTML - svg = chartCopy.getChartHTML(); - - // free up memory - options = null; - chartCopy.destroy(); - discardElement(sandbox); - - // Move HTML into a foreignObject - if (allowHTML) { - html = svg.match(/<\/svg>(.*?$)/); - if (html) { - html = '<foreignObject x="0" y="0" width="200" height="200">' + - '<body xmlns="http://www.w3.org/1999/xhtml">' + - html[1] + - '</body>' + - '</foreignObject>'; - svg = svg.replace('</svg>', html + '</svg>'); - } - } - - // sanitize - svg = this.sanitizeSVG(svg); - - // IE9 beta bugs with innerHTML. Test again with final IE9. - svg = svg.replace(/(url\(#highcharts-[0-9]+)&quot;/g, '$1') - .replace(/&quot;/g, '\''); - - return svg; - }, - - getSVGForExport: function (options, chartOptions) { - var chartExportingOptions = this.options.exporting; - - return this.getSVG(merge( - { chart: { borderRadius: 0 } }, - chartExportingOptions.chartOptions, - chartOptions, - { - exporting: { - sourceWidth: (options && options.sourceWidth) || chartExportingOptions.sourceWidth, - sourceHeight: (options && options.sourceHeight) || chartExportingOptions.sourceHeight - } - } - )); - }, - - /** - * Submit the SVG representation of the chart to the server - * @param {Object} options Exporting options. Possible members are url, type, width and formAttributes. - * @param {Object} chartOptions Additional chart options for the SVG representation of the chart - */ - exportChart: function (options, chartOptions) { - - var svg = this.getSVGForExport(options, chartOptions); - - // merge the options - options = merge(this.options.exporting, options); - - // do the post - Highcharts.post(options.url, { - filename: options.filename || 'chart', - type: options.type, - width: options.width || 0, // IE8 fails to post undefined correctly, so use 0 - scale: options.scale || 2, - svg: svg - }, options.formAttributes); - - }, - - /** - * Print the chart - */ - print: function () { - - var chart = this, - container = chart.container, - origDisplay = [], - origParent = container.parentNode, - body = doc.body, - childNodes = body.childNodes; - - if (chart.isPrinting) { // block the button while in printing mode - return; - } - - chart.isPrinting = true; - chart.pointer.reset(null, 0); - - fireEvent(chart, 'beforePrint'); - - // hide all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - origDisplay[i] = node.style.display; - node.style.display = NONE; - } - }); - - // pull out the chart - body.appendChild(container); - - // print - win.focus(); // #1510 - win.print(); - - // allow the browser to prepare before reverting - setTimeout(function () { - - // put the chart back in - origParent.appendChild(container); - - // restore all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - node.style.display = origDisplay[i]; - } - }); - - chart.isPrinting = false; - - fireEvent(chart, 'afterPrint'); - - }, 1000); - - }, - - /** - * Display a popup menu for choosing the export type - * - * @param {String} className An identifier for the menu - * @param {Array} items A collection with text and onclicks for the items - * @param {Number} x The x position of the opener button - * @param {Number} y The y position of the opener button - * @param {Number} width The width of the opener button - * @param {Number} height The height of the opener button - */ - contextMenu: function (className, items, x, y, width, height, button) { - var chart = this, - navOptions = chart.options.navigation, - menuItemStyle = navOptions.menuItemStyle, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - cacheName = 'cache-' + className, - menu = chart[cacheName], - menuPadding = mathMax(width, height), // for mouse leave detection - boxShadow = '3px 3px 10px #888', - innerMenu, - hide, - hideTimer, - menuStyle, - docMouseUpHandler = function (e) { - if (!chart.pointer.inClass(e.target, className)) { - hide(); - } - }; - - // create the menu only the first time - if (!menu) { - - // create a HTML element above the SVG - chart[cacheName] = menu = createElement(DIV, { - className: className - }, { - position: ABSOLUTE, - zIndex: 1000, - padding: menuPadding + PX - }, chart.container); - - innerMenu = createElement(DIV, null, - extend({ - MozBoxShadow: boxShadow, - WebkitBoxShadow: boxShadow, - boxShadow: boxShadow - }, navOptions.menuStyle), menu); - - // hide on mouse out - hide = function () { - css(menu, { display: NONE }); - if (button) { - button.setState(0); - } - chart.openMenu = false; - }; - - // Hide the menu some time after mouse leave (#1357) - addEvent(menu, 'mouseleave', function () { - hideTimer = setTimeout(hide, 500); - }); - addEvent(menu, 'mouseenter', function () { - clearTimeout(hideTimer); - }); - - - // Hide it on clicking or touching outside the menu (#2258, #2335, #2407) - addEvent(doc, 'mouseup', docMouseUpHandler); - addEvent(chart, 'destroy', function () { - removeEvent(doc, 'mouseup', docMouseUpHandler); - }); - - - // create the items - each(items, function (item) { - if (item) { - var element = item.separator ? - createElement('hr', null, null, innerMenu) : - createElement(DIV, { - onmouseover: function () { - css(this, navOptions.menuItemHoverStyle); - }, - onmouseout: function () { - css(this, menuItemStyle); - }, - onclick: function (e) { - if (e) { // IE7 - e.stopPropagation(); - } - hide(); - if (item.onclick) { - item.onclick.apply(chart, arguments); - } - }, - innerHTML: item.text || chart.options.lang[item.textKey] - }, extend({ - cursor: 'pointer' - }, menuItemStyle), innerMenu); - - - // Keep references to menu divs to be able to destroy them - chart.exportDivElements.push(element); - } - }); - - // Keep references to menu and innerMenu div to be able to destroy them - chart.exportDivElements.push(innerMenu, menu); - - chart.exportMenuWidth = menu.offsetWidth; - chart.exportMenuHeight = menu.offsetHeight; - } - - menuStyle = { display: 'block' }; - - // if outside right, right align it - if (x + chart.exportMenuWidth > chartWidth) { - menuStyle.right = (chartWidth - x - width - menuPadding) + PX; - } else { - menuStyle.left = (x - menuPadding) + PX; - } - // if outside bottom, bottom align it - if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') { - menuStyle.bottom = (chartHeight - y - menuPadding) + PX; - } else { - menuStyle.top = (y + height - menuPadding) + PX; - } - - css(menu, menuStyle); - chart.openMenu = true; - }, - - /** - * Add the export button to the chart - */ - addButton: function (options) { - var chart = this, - renderer = chart.renderer, - btnOptions = merge(chart.options.navigation.buttonOptions, options), - onclick = btnOptions.onclick, - menuItems = btnOptions.menuItems, - symbol, - button, - symbolAttr = { - stroke: btnOptions.symbolStroke, - fill: btnOptions.symbolFill - }, - symbolSize = btnOptions.symbolSize || 12; - if (!chart.btnCount) { - chart.btnCount = 0; - } - - // Keeps references to the button elements - if (!chart.exportDivElements) { - chart.exportDivElements = []; - chart.exportSVGElements = []; - } - - if (btnOptions.enabled === false) { - return; - } - - - var attr = btnOptions.theme, - states = attr.states, - hover = states && states.hover, - select = states && states.select, - callback; - - delete attr.states; - - if (onclick) { - callback = function (e) { - e.stopPropagation(); - onclick.call(chart, e); - }; - - } else if (menuItems) { - callback = function () { - chart.contextMenu( - button.menuClassName, - menuItems, - button.translateX, - button.translateY, - button.width, - button.height, - button - ); - button.setState(2); - }; - } - - - if (btnOptions.text && btnOptions.symbol) { - attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25); - - } else if (!btnOptions.text) { - extend(attr, { - width: btnOptions.width, - height: btnOptions.height, - padding: 0 - }); - } - - button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select) - .attr({ - title: chart.options.lang[btnOptions._titleKey], - 'stroke-linecap': 'round' - }); - button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++; - - if (btnOptions.symbol) { - symbol = renderer.symbol( - btnOptions.symbol, - btnOptions.symbolX - (symbolSize / 2), - btnOptions.symbolY - (symbolSize / 2), - symbolSize, - symbolSize - ) - .attr(extend(symbolAttr, { - 'stroke-width': btnOptions.symbolStrokeWidth || 1, - zIndex: 1 - })).add(button); - } - - button.add() - .align(extend(btnOptions, { - width: button.width, - x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654 - }), true, 'spacingBox'); - - buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1); - - chart.exportSVGElements.push(button, symbol); - - }, - - /** - * Destroy the buttons. - */ - destroyExport: function (e) { - var chart = e.target, - i, - elem; - - // Destroy the extra buttons added - for (i = 0; i < chart.exportSVGElements.length; i++) { - elem = chart.exportSVGElements[i]; - - // Destroy and null the svg/vml elements - if (elem) { // #1822 - elem.onclick = elem.ontouchstart = null; - chart.exportSVGElements[i] = elem.destroy(); - } - } - - // Destroy the divs for the menu - for (i = 0; i < chart.exportDivElements.length; i++) { - elem = chart.exportDivElements[i]; - - // Remove the event handler - removeEvent(elem, 'mouseleave'); - - // Remove inline events - chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null; - - // Destroy the div by moving to garbage bin - discardElement(elem); - } - } -}); - - -symbols.menu = function (x, y, width, height) { - var arr = [ - M, x, y + 2.5, - L, x + width, y + 2.5, - M, x, y + height / 2 + 0.5, - L, x + width, y + height / 2 + 0.5, - M, x, y + height - 1.5, - L, x + width, y + height - 1.5 - ]; - return arr; -}; - -// Add the buttons on chart load -Chart.prototype.callbacks.push(function (chart) { - var n, - exportingOptions = chart.options.exporting, - buttons = exportingOptions.buttons; - - buttonOffset = 0; - - if (exportingOptions.enabled !== false) { - - for (n in buttons) { - chart.addButton(buttons[n]); - } - - // Destroy the export elements at chart destroy - addEvent(chart, 'destroy', chart.destroyExport); - } - -}); - - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/funnel.js b/platforms/android/assets/www/lib/highcharts/modules/funnel.js deleted file mode 100644 index 31dee7f1..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/funnel.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - - Highcharts funnel module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(b){typeof module==="object"&&module.exports?module.exports=b:b(Highcharts)})(function(b){var q=b.getOptions(),w=q.plotOptions,r=b.seriesTypes,G=b.merge,E=function(){},B=b.each,F=b.pick;w.funnel=G(w.pie,{animation:!1,center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",reversed:!1,dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});r.funnel=b.extendClass(r.pie,{type:"funnel",animate:E, -translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},b=0,e=this.chart,c=this.options,f=c.reversed,o=c.ignoreHiddenPoint,g=e.plotWidth,h=e.plotHeight,q=0,e=c.center,i=a(e[0],g),x=a(e[1],h),r=a(c.width,g),l,s,d=a(c.height,h),t=a(c.neckWidth,g),C=a(c.neckHeight,h),u=x-d/2+d-C,a=this.data,y,z,w=c.dataLabels.position==="left"?1:0,A,m,D,p,j,v,n;this.getWidthAt=s=function(k){var a=x-d/2;return k>u||d===C?t:t+(r-t)*(1-(k-a)/(d-C))};this.getX=function(k,a){return i+ -(a?-1:1)*(s(f?h-k:k)/2+c.dataLabels.distance)};this.center=[i,x,d];this.centerX=i;B(a,function(a){if(!o||a.visible!==!1)b+=a.y});B(a,function(a){n=null;z=b?a.y/b:0;m=x-d/2+q*d;j=m+z*d;l=s(m);A=i-l/2;D=A+l;l=s(j);p=i-l/2;v=p+l;m>u?(A=p=i-t/2,D=v=i+t/2):j>u&&(n=j,l=s(u),p=i-l/2,v=p+l,j=u);f&&(m=d-m,j=d-j,n=n?d-n:null);y=["M",A,m,"L",D,m,v,j];n&&y.push(v,n,p,n);y.push(p,j,"Z");a.shapeType="path";a.shapeArgs={d:y};a.percentage=z*100;a.plotX=i;a.plotY=(m+(n||j))/2;a.tooltipPos=[i,a.plotY];a.slice=E;a.half= -w;if(!o||a.visible!==!1)q+=z})},drawPoints:function(){var a=this,b=a.options,e=a.chart.renderer;B(a.data,function(c){var f=c.options,o=c.graphic,g=c.shapeArgs;o?o.animate(g):c.graphic=e.path(g).attr({fill:c.color,stroke:F(f.borderColor,b.borderColor),"stroke-width":F(f.borderWidth,b.borderWidth)}).add(a.group)})},sortByAngle:function(a){a.sort(function(a,b){return a.plotY-b.plotY})},drawDataLabels:function(){var a=this.data,b=this.options.dataLabels.distance,e,c,f,o=a.length,g,h;for(this.center[2]-= -2*b;o--;)f=a[o],c=(e=f.half)?1:-1,h=f.plotY,g=this.getX(h,e),f.labelPos=[0,h,g+(b-5)*c,h,g+b*c,h,e?"right":"left",0];r.pie.prototype.drawDataLabels.call(this)}});q.plotOptions.pyramid=b.merge(q.plotOptions.funnel,{neckWidth:"0%",neckHeight:"0%",reversed:!0});b.seriesTypes.pyramid=b.extendClass(b.seriesTypes.funnel,{type:"pyramid"})}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/funnel.src.js b/platforms/android/assets/www/lib/highcharts/modules/funnel.src.js deleted file mode 100644 index d8a27b65..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/funnel.src.js +++ /dev/null @@ -1,322 +0,0 @@ -/** - * @license - * Highcharts funnel module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ -/* eslint indent:0 */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - -'use strict'; - -// create shortcuts -var defaultOptions = Highcharts.getOptions(), - defaultPlotOptions = defaultOptions.plotOptions, - seriesTypes = Highcharts.seriesTypes, - merge = Highcharts.merge, - noop = function () {}, - each = Highcharts.each, - pick = Highcharts.pick; - -// set default options -defaultPlotOptions.funnel = merge(defaultPlotOptions.pie, { - animation: false, - center: ['50%', '50%'], - width: '90%', - neckWidth: '30%', - height: '100%', - neckHeight: '25%', - reversed: false, - dataLabels: { - //position: 'right', - connectorWidth: 1, - connectorColor: '#606060' - }, - size: true, // to avoid adapting to data label size in Pie.drawDataLabels - states: { - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - } -}); - - -seriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, { - - type: 'funnel', - animate: noop, - - /** - * Overrides the pie translate method - */ - translate: function () { - - var - // Get positions - either an integer or a percentage string must be given - getLength = function (length, relativeTo) { - return (/%$/).test(length) ? - relativeTo * parseInt(length, 10) / 100 : - parseInt(length, 10); - }, - - sum = 0, - series = this, - chart = series.chart, - options = series.options, - reversed = options.reversed, - ignoreHiddenPoint = options.ignoreHiddenPoint, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - cumulative = 0, // start at top - center = options.center, - centerX = getLength(center[0], plotWidth), - centerY = getLength(center[1], plotHeight), - width = getLength(options.width, plotWidth), - tempWidth, - getWidthAt, - height = getLength(options.height, plotHeight), - neckWidth = getLength(options.neckWidth, plotWidth), - neckHeight = getLength(options.neckHeight, plotHeight), - neckY = (centerY - height / 2) + height - neckHeight, - data = series.data, - path, - fraction, - half = options.dataLabels.position === 'left' ? 1 : 0, - - x1, - y1, - x2, - x3, - y3, - x4, - y5; - - // Return the width at a specific y coordinate - series.getWidthAt = getWidthAt = function (y) { - var top = (centerY - height / 2); - - return y > neckY || height === neckHeight ? - neckWidth : - neckWidth + (width - neckWidth) * (1 - (y - top) / (height - neckHeight)); - }; - series.getX = function (y, half) { - return centerX + (half ? -1 : 1) * ((getWidthAt(reversed ? plotHeight - y : y) / 2) + options.dataLabels.distance); - }; - - // Expose - series.center = [centerX, centerY, height]; - series.centerX = centerX; - - /* - * Individual point coordinate naming: - * - * x1,y1 _________________ x2,y1 - * \ / - * \ / - * \ / - * \ / - * \ / - * x3,y3 _________ x4,y3 - * - * Additional for the base of the neck: - * - * | | - * | | - * | | - * x3,y5 _________ x4,y5 - */ - - - - - // get the total sum - each(data, function (point) { - if (!ignoreHiddenPoint || point.visible !== false) { - sum += point.y; - } - }); - - each(data, function (point) { - // set start and end positions - y5 = null; - fraction = sum ? point.y / sum : 0; - y1 = centerY - height / 2 + cumulative * height; - y3 = y1 + fraction * height; - //tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight)); - tempWidth = getWidthAt(y1); - x1 = centerX - tempWidth / 2; - x2 = x1 + tempWidth; - tempWidth = getWidthAt(y3); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - // the entire point is within the neck - if (y1 > neckY) { - x1 = x3 = centerX - neckWidth / 2; - x2 = x4 = centerX + neckWidth / 2; - - // the base of the neck - } else if (y3 > neckY) { - y5 = y3; - - tempWidth = getWidthAt(neckY); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - y3 = neckY; - } - - if (reversed) { - y1 = height - y1; - y3 = height - y3; - y5 = (y5 ? height - y5 : null); - } - // save the path - path = [ - 'M', - x1, y1, - 'L', - x2, y1, - x4, y3 - ]; - if (y5) { - path.push(x4, y5, x3, y5); - } - path.push(x3, y3, 'Z'); - - // prepare for using shared dr - point.shapeType = 'path'; - point.shapeArgs = { d: path }; - - - // for tooltips and data labels - point.percentage = fraction * 100; - point.plotX = centerX; - point.plotY = (y1 + (y5 || y3)) / 2; - - // Placement of tooltips and data labels - point.tooltipPos = [ - centerX, - point.plotY - ]; - - // Slice is a noop on funnel points - point.slice = noop; - - // Mimicking pie data label placement logic - point.half = half; - - if (!ignoreHiddenPoint || point.visible !== false) { - cumulative += fraction; - } - }); - }, - /** - * Draw a single point (wedge) - * @param {Object} point The point object - * @param {Object} color The color of the point - * @param {Number} brightness The brightness relative to the color - */ - drawPoints: function () { - var series = this, - options = series.options, - chart = series.chart, - renderer = chart.renderer; - - each(series.data, function (point) { - var pointOptions = point.options, - graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (!graphic) { // Create the shapes - point.graphic = renderer.path(shapeArgs) - .attr({ - fill: point.color, - stroke: pick(pointOptions.borderColor, options.borderColor), - 'stroke-width': pick(pointOptions.borderWidth, options.borderWidth) - }) - .add(series.group); - - } else { // Update the shapes - graphic.animate(shapeArgs); - } - }); - }, - - /** - * Funnel items don't have angles (#2289) - */ - sortByAngle: function (points) { - points.sort(function (a, b) { - return a.plotY - b.plotY; - }); - }, - - /** - * Extend the pie data label method - */ - drawDataLabels: function () { - var data = this.data, - labelDistance = this.options.dataLabels.distance, - leftSide, - sign, - point, - i = data.length, - x, - y; - - // In the original pie label anticollision logic, the slots are distributed - // from one labelDistance above to one labelDistance below the pie. In funnels - // we don't want this. - this.center[2] -= 2 * labelDistance; - - // Set the label position array for each point. - while (i--) { - point = data[i]; - leftSide = point.half; - sign = leftSide ? 1 : -1; - y = point.plotY; - x = this.getX(y, leftSide); - - // set the anchor point for data labels - point.labelPos = [ - 0, // first break of connector - y, // a/a - x + (labelDistance - 5) * sign, // second break, right outside point shape - y, // a/a - x + labelDistance * sign, // landing point for connector - y, // a/a - leftSide ? 'right' : 'left', // alignment - 0 // center angle - ]; - } - - seriesTypes.pie.prototype.drawDataLabels.call(this); - } - -}); - -/** - * Pyramid series type. - * A pyramid series is a special type of funnel, without neck and reversed by default. - */ -defaultOptions.plotOptions.pyramid = Highcharts.merge(defaultOptions.plotOptions.funnel, { - neckWidth: '0%', - neckHeight: '0%', - reversed: true -}); -Highcharts.seriesTypes.pyramid = Highcharts.extendClass(Highcharts.seriesTypes.funnel, { - type: 'pyramid' -}); - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/heatmap.js b/platforms/android/assets/www/lib/highcharts/modules/heatmap.js deleted file mode 100644 index 7956dac2..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/heatmap.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2011-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){var m=d.Axis,q=d.Chart,i=d.Color,x=d.Legend,s=d.LegendSymbolMixin,t=d.Series,y=d.Point,u=d.getOptions(),h=d.each,r=d.extend,v=d.extendClass,j=d.merge,k=d.pick,o=d.seriesTypes,w=d.wrap,n=function(){},p=d.ColorAxis=function(){this.isColorAxis=!0;this.init.apply(this,arguments)};r(p.prototype,m.prototype);r(p.prototype,{defaultColorAxisOptions:{lineWidth:0,minPadding:0,maxPadding:0,gridLineWidth:1,tickPixelInterval:72, -startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},color:"gray",width:0.01},labels:{overflow:"justify"},minColor:"#EFEFFF",maxColor:"#003875",tickLength:5},init:function(a,b){var c=a.options.legend.layout!=="vertical",f;f=j(this.defaultColorAxisOptions,{side:c?2:1,reversed:!c},b,{opposite:!c,showEmpty:!1,title:null,isColor:!0});m.prototype.init.call(this,a,f);b.dataClasses&&this.initDataClasses(b);this.initStops(b);this.horiz=c;this.zoomEnabled=!1},tweenColors:function(a,b,c){var f; -!b.rgba.length||!a.rgba.length?a=b.input||"none":(a=a.rgba,b=b.rgba,f=b[3]!==1||a[3]!==1,a=(f?"rgba(":"rgb(")+Math.round(b[0]+(a[0]-b[0])*(1-c))+","+Math.round(b[1]+(a[1]-b[1])*(1-c))+","+Math.round(b[2]+(a[2]-b[2])*(1-c))+(f?","+(b[3]+(a[3]-b[3])*(1-c)):"")+")");return a},initDataClasses:function(a){var b=this,c=this.chart,f,e=0,l=this.options,g=a.dataClasses.length;this.dataClasses=f=[];this.legendItems=[];h(a.dataClasses,function(a,d){var h,a=j(a);f.push(a);if(!a.color)l.dataClassColor==="category"? -(h=c.options.colors,a.color=h[e++],e===h.length&&(e=0)):a.color=b.tweenColors(i(l.minColor),i(l.maxColor),g<2?0.5:d/(g-1))})},initStops:function(a){this.stops=a.stops||[[0,this.options.minColor],[1,this.options.maxColor]];h(this.stops,function(a){a.color=i(a[1])})},setOptions:function(a){m.prototype.setOptions.call(this,a);this.options.crosshair=this.options.marker;this.coll="colorAxis"},setAxisSize:function(){var a=this.legendSymbol,b=this.chart,c,f,e;if(a)this.left=c=a.attr("x"),this.top=f=a.attr("y"), -this.width=e=a.attr("width"),this.height=a=a.attr("height"),this.right=b.chartWidth-c-e,this.bottom=b.chartHeight-f-a,this.len=this.horiz?e:a,this.pos=this.horiz?c:f},toColor:function(a,b){var c,f=this.stops,e,l=this.dataClasses,g,d;if(l)for(d=l.length;d--;){if(g=l[d],e=g.from,f=g.to,(e===void 0||a>=e)&&(f===void 0||a<=f)){c=g.color;if(b)b.dataClass=d;break}}else{this.isLog&&(a=this.val2lin(a));c=1-(this.max-a)/(this.max-this.min||1);for(d=f.length;d--;)if(c>f[d][0])break;e=f[d]||f[d+1];f=f[d+1]|| -e;c=1-(f[0]-c)/(f[0]-e[0]||1);c=this.tweenColors(e.color,f.color,c)}return c},getOffset:function(){var a=this.legendGroup,b=this.chart.axisOffset[this.side];if(a){this.axisParent=a;m.prototype.getOffset.call(this);if(!this.added)this.added=!0,this.labelLeft=0,this.labelRight=this.width;this.chart.axisOffset[this.side]=b}},setLegendColor:function(){var a,b=this.options,c=this.reversed;a=c?1:0;c=c?0:1;a=this.horiz?[a,0,c,0]:[0,c,0,a];this.legendColor={linearGradient:{x1:a[0],y1:a[1],x2:a[2],y2:a[3]}, -stops:b.stops||[[0,b.minColor],[1,b.maxColor]]}},drawLegendSymbol:function(a,b){var c=a.padding,f=a.options,e=this.horiz,d=k(f.symbolWidth,e?200:12),g=k(f.symbolHeight,e?12:200),h=k(f.labelPadding,e?16:30),f=k(f.itemDistance,10);this.setLegendColor();b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,d,g).attr({zIndex:1}).add(b.legendGroup);this.legendItemWidth=d+c+(e?f:h);this.legendItemHeight=g+c+(e?h:0)},setState:n,visible:!0,setVisible:n,getSeriesExtremes:function(){var a;if(this.series.length)a= -this.series[0],this.dataMin=a.valueMin,this.dataMax=a.valueMax},drawCrosshair:function(a,b){var c=b&&b.plotX,f=b&&b.plotY,e,d=this.pos,g=this.len;if(b)e=this.toPixels(b[b.series.colorKey]),e<d?e=d-2:e>d+g&&(e=d+g+2),b.plotX=e,b.plotY=this.len-e,m.prototype.drawCrosshair.call(this,a,b),b.plotX=c,b.plotY=f,this.cross&&this.cross.attr({fill:this.crosshair.color}).add(this.legendGroup)},getPlotLinePath:function(a,b,c,f,e){return typeof e==="number"?this.horiz?["M",e-4,this.top-6,"L",e+4,this.top-6,e, -this.top,"Z"]:["M",this.left,e,"L",this.left-6,e+6,this.left-6,e-6,"Z"]:m.prototype.getPlotLinePath.call(this,a,b,c,f)},update:function(a,b){var c=this.chart,f=c.legend;h(this.series,function(a){a.isDirtyData=!0});if(a.dataClasses&&f.allItems)h(f.allItems,function(a){a.isDataClass&&a.legendGroup.destroy()}),c.isDirtyLegend=!0;c.options[this.coll]=j(this.userOptions,a);m.prototype.update.call(this,a,b);this.legendItem&&(this.setLegendColor(),f.colorizeItem(this,!0))},getDataClassLegendSymbols:function(){var a= -this,b=this.chart,c=this.legendItems,f=b.options.legend,e=f.valueDecimals,l=f.valueSuffix||"",g;c.length||h(this.dataClasses,function(f,m){var i=!0,j=f.from,k=f.to;g="";j===void 0?g="< ":k===void 0&&(g="> ");j!==void 0&&(g+=d.numberFormat(j,e)+l);j!==void 0&&k!==void 0&&(g+=" - ");k!==void 0&&(g+=d.numberFormat(k,e)+l);c.push(r({chart:b,name:g,options:{},drawLegendSymbol:s.drawRectangle,visible:!0,setState:n,isDataClass:!0,setVisible:function(){i=this.visible=!i;h(a.series,function(a){h(a.points, -function(a){a.dataClass===m&&a.setVisible(i)})});b.legend.colorizeItem(this,i)}},f))});return c},name:""});h(["fill","stroke"],function(a){d.Fx.prototype[a+"Setter"]=function(){this.elem.attr(a,p.prototype.tweenColors(i(this.start),i(this.end),this.pos))}});w(q.prototype,"getAxes",function(a){var b=this.options.colorAxis;a.call(this);this.colorAxis=[];b&&new p(this,b)});w(x.prototype,"getAllItems",function(a){var b=[],c=this.chart.colorAxis[0];c&&(c.options.dataClasses?b=b.concat(c.getDataClassLegendSymbols()): -b.push(c),h(c.series,function(a){a.options.showInLegend=!1}));return b.concat(a.call(this))});q={pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",dashstyle:"dashStyle"},pointArrayMap:["value"],axisTypes:["xAxis","yAxis","colorAxis"],optionalAxis:"colorAxis",trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:n,parallelArrays:["x","y","value"],colorKey:"value",translateColors:function(){var a=this,b=this.options.nullColor,c=this.colorAxis,f=this.colorKey; -h(this.data,function(e){var d=e[f];if(d=e.options.color||(d===null?b:c&&d!==void 0?c.toColor(d,e):e.color||a.color))e.color=d})}};u.plotOptions.heatmap=j(u.plotOptions.scatter,{animation:!1,borderWidth:0,nullColor:"#F8F8F8",dataLabels:{formatter:function(){return this.point.value},inside:!0,verticalAlign:"middle",crop:!1,overflow:!1,padding:0},marker:null,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}<br/>"},states:{normal:{animation:!0},hover:{halo:!1,brightness:0.2}}}); -o.heatmap=v(o.scatter,j(q,{type:"heatmap",pointArrayMap:["y","value"],hasPointSpecificOptions:!0,pointClass:v(y,{setVisible:function(a){var b=this,c=a?"show":"hide";h(["graphic","dataLabel"],function(a){if(b[a])b[a][c]()})}}),supportsDrilldown:!0,getExtremesFromAll:!0,directTouch:!0,init:function(){var a;o.scatter.prototype.init.apply(this,arguments);a=this.options;a.pointRange=k(a.pointRange,a.colsize||1);this.yAxis.axisPointRange=a.rowsize||1},translate:function(){var a=this.options,b=this.xAxis, -c=this.yAxis,f=function(a,b,c){return Math.min(Math.max(b,a),c)};this.generatePoints();h(this.points,function(e){var d=(a.colsize||1)/2,g=(a.rowsize||1)/2,h=f(Math.round(b.len-b.translate(e.x-d,0,1,0,1)),0,b.len),d=f(Math.round(b.len-b.translate(e.x+d,0,1,0,1)),0,b.len),i=f(Math.round(c.translate(e.y-g,0,1,0,1)),0,c.len),g=f(Math.round(c.translate(e.y+g,0,1,0,1)),0,c.len);e.plotX=e.clientX=(h+d)/2;e.plotY=(i+g)/2;e.shapeType="rect";e.shapeArgs={x:Math.min(h,d),y:Math.min(i,g),width:Math.abs(d-h), -height:Math.abs(g-i)}});this.translateColors();this.chart.hasRendered&&h(this.points,function(a){a.shapeArgs.fill=a.options.color||a.color})},drawPoints:o.column.prototype.drawPoints,animate:n,getBox:n,drawLegendSymbol:s.drawRectangle,getExtremes:function(){t.prototype.getExtremes.call(this,this.valueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;t.prototype.getExtremes.call(this)}}))}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/heatmap.src.js b/platforms/android/assets/www/lib/highcharts/modules/heatmap.src.js deleted file mode 100644 index 195e2b4a..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/heatmap.src.js +++ /dev/null @@ -1,711 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2011-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ -/* eslint indent: [2, 4] */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - - var UNDEFINED, - Axis = Highcharts.Axis, - Chart = Highcharts.Chart, - Color = Highcharts.Color, - Legend = Highcharts.Legend, - LegendSymbolMixin = Highcharts.LegendSymbolMixin, - Series = Highcharts.Series, - Point = Highcharts.Point, - - defaultOptions = Highcharts.getOptions(), - each = Highcharts.each, - extend = Highcharts.extend, - extendClass = Highcharts.extendClass, - merge = Highcharts.merge, - pick = Highcharts.pick, - seriesTypes = Highcharts.seriesTypes, - wrap = Highcharts.wrap, - noop = function () {}; - - - - - /** - * The ColorAxis object for inclusion in gradient legends - */ - var ColorAxis = Highcharts.ColorAxis = function () { - this.isColorAxis = true; - this.init.apply(this, arguments); - }; - extend(ColorAxis.prototype, Axis.prototype); - extend(ColorAxis.prototype, { - defaultColorAxisOptions: { - lineWidth: 0, - minPadding: 0, - maxPadding: 0, - gridLineWidth: 1, - tickPixelInterval: 72, - startOnTick: true, - endOnTick: true, - offset: 0, - marker: { - animation: { - duration: 50 - }, - color: 'gray', - width: 0.01 - }, - labels: { - overflow: 'justify' - }, - minColor: '#EFEFFF', - maxColor: '#003875', - tickLength: 5 - }, - init: function (chart, userOptions) { - var horiz = chart.options.legend.layout !== 'vertical', - options; - - // Build the options - options = merge(this.defaultColorAxisOptions, { - side: horiz ? 2 : 1, - reversed: !horiz - }, userOptions, { - opposite: !horiz, - showEmpty: false, - title: null, - isColor: true - }); - - Axis.prototype.init.call(this, chart, options); - - // Base init() pushes it to the xAxis array, now pop it again - //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop(); - - // Prepare data classes - if (userOptions.dataClasses) { - this.initDataClasses(userOptions); - } - this.initStops(userOptions); - - // Override original axis properties - this.horiz = horiz; - this.zoomEnabled = false; - }, - - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. - * NOTE: Changes here should be copied - * to the same function in drilldown.src.js and solid-gauge-src.js. - */ - tweenColors: function (from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - }, - - initDataClasses: function (userOptions) { - var axis = this, - chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options, - len = userOptions.dataClasses.length; - this.dataClasses = dataClasses = []; - this.legendItems = []; - - each(userOptions.dataClasses, function (dataClass, i) { - var colors; - - dataClass = merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = axis.tweenColors( - Color(options.minColor), - Color(options.maxColor), - len < 2 ? 0.5 : i / (len - 1) // #3219 - ); - } - } - }); - }, - - initStops: function (userOptions) { - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function (stop) { - stop.color = Color(stop[1]); - }); - }, - - /** - * Extend the setOptions method to process extreme colors and color - * stops. - */ - setOptions: function (userOptions) { - Axis.prototype.setOptions.call(this, userOptions); - - this.options.crosshair = this.options.marker; - this.coll = 'colorAxis'; - }, - - setAxisSize: function () { - var symbol = this.legendSymbol, - chart = this.chart, - x, - y, - width, - height; - - if (symbol) { - this.left = x = symbol.attr('x'); - this.top = y = symbol.attr('y'); - this.width = width = symbol.attr('width'); - this.height = height = symbol.attr('height'); - this.right = chart.chartWidth - x - width; - this.bottom = chart.chartHeight - y - height; - - this.len = this.horiz ? width : height; - this.pos = this.horiz ? x : y; - } - }, - - /** - * Translate from a value to a color - */ - toColor: function (value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / ((this.max - this.min) || 1)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = this.tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - - /** - * Override the getOffset method to add the whole axis groups inside the legend. - */ - getOffset: function () { - var group = this.legendGroup, - sideOffset = this.chart.axisOffset[this.side]; - - if (group) { - - // Hook for the getOffset method to add groups to this parent group - this.axisParent = group; - - // Call the base - Axis.prototype.getOffset.call(this); - - // First time only - if (!this.added) { - - this.added = true; - - this.labelLeft = 0; - this.labelRight = this.width; - } - // Reset it to avoid color axis reserving space - this.chart.axisOffset[this.side] = sideOffset; - } - }, - - /** - * Create the color gradient - */ - setLegendColor: function () { - var grad, - horiz = this.horiz, - options = this.options, - reversed = this.reversed, - one = reversed ? 1 : 0, - zero = reversed ? 0 : 1; - - grad = horiz ? [one, 0, zero, 0] : [0, zero, 0, one]; // #3190 - this.legendColor = { - linearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] }, - stops: options.stops || [ - [0, options.minColor], - [1, options.maxColor] - ] - }; - }, - - /** - * The color axis appears inside the legend and has its own legend symbol - */ - drawLegendSymbol: function (legend, item) { - var padding = legend.padding, - legendOptions = legend.options, - horiz = this.horiz, - width = pick(legendOptions.symbolWidth, horiz ? 200 : 12), - height = pick(legendOptions.symbolHeight, horiz ? 12 : 200), - labelPadding = pick(legendOptions.labelPadding, horiz ? 16 : 30), - itemDistance = pick(legendOptions.itemDistance, 10); - - this.setLegendColor(); - - // Create the gradient - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - 11, - width, - height - ).attr({ - zIndex: 1 - }).add(item.legendGroup); - - // Set how much space this legend item takes up - this.legendItemWidth = width + padding + (horiz ? itemDistance : labelPadding); - this.legendItemHeight = height + padding + (horiz ? labelPadding : 0); - }, - /** - * Fool the legend - */ - setState: noop, - visible: true, - setVisible: noop, - getSeriesExtremes: function () { - var series; - if (this.series.length) { - series = this.series[0]; - this.dataMin = series.valueMin; - this.dataMax = series.valueMax; - } - }, - drawCrosshair: function (e, point) { - var plotX = point && point.plotX, - plotY = point && point.plotY, - crossPos, - axisPos = this.pos, - axisLen = this.len; - - if (point) { - crossPos = this.toPixels(point[point.series.colorKey]); - if (crossPos < axisPos) { - crossPos = axisPos - 2; - } else if (crossPos > axisPos + axisLen) { - crossPos = axisPos + axisLen + 2; - } - - point.plotX = crossPos; - point.plotY = this.len - crossPos; - Axis.prototype.drawCrosshair.call(this, e, point); - point.plotX = plotX; - point.plotY = plotY; - - if (this.cross) { - this.cross - .attr({ - fill: this.crosshair.color - }) - .add(this.legendGroup); - } - } - }, - getPlotLinePath: function (a, b, c, d, pos) { - return typeof pos === 'number' ? // crosshairs only // #3969 pos can be 0 !! - (this.horiz ? - ['M', pos - 4, this.top - 6, 'L', pos + 4, this.top - 6, pos, this.top, 'Z'] : - ['M', this.left, pos, 'L', this.left - 6, pos + 6, this.left - 6, pos - 6, 'Z'] - ) : - Axis.prototype.getPlotLinePath.call(this, a, b, c, d); - }, - - update: function (newOptions, redraw) { - var chart = this.chart, - legend = chart.legend; - - each(this.series, function (series) { - series.isDirtyData = true; // Needed for Axis.update when choropleth colors change - }); - - // When updating data classes, destroy old items and make sure new ones are created (#3207) - if (newOptions.dataClasses && legend.allItems) { - each(legend.allItems, function (item) { - if (item.isDataClass) { - item.legendGroup.destroy(); - } - }); - chart.isDirtyLegend = true; - } - - // Keep the options structure updated for export. Unlike xAxis and yAxis, the colorAxis is - // not an array. (#3207) - chart.options[this.coll] = merge(this.userOptions, newOptions); - - Axis.prototype.update.call(this, newOptions, redraw); - if (this.legendItem) { - this.setLegendColor(); - legend.colorizeItem(this, true); - } - }, - - /** - * Get the legend item symbols for data classes - */ - getDataClassLegendSymbols: function () { - var axis = this, - chart = this.chart, - legendItems = this.legendItems, - legendOptions = chart.options.legend, - valueDecimals = legendOptions.valueDecimals, - valueSuffix = legendOptions.valueSuffix || '', - name; - - if (!legendItems.length) { - each(this.dataClasses, function (dataClass, i) { - var vis = true, - from = dataClass.from, - to = dataClass.to; - - // Assemble the default name. This can be overridden by legend.options.labelFormatter - name = ''; - if (from === UNDEFINED) { - name = '< '; - } else if (to === UNDEFINED) { - name = '> '; - } - if (from !== UNDEFINED) { - name += Highcharts.numberFormat(from, valueDecimals) + valueSuffix; - } - if (from !== UNDEFINED && to !== UNDEFINED) { - name += ' - '; - } - if (to !== UNDEFINED) { - name += Highcharts.numberFormat(to, valueDecimals) + valueSuffix; - } - - // Add a mock object to the legend items - legendItems.push(extend({ - chart: chart, - name: name, - options: {}, - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - visible: true, - setState: noop, - isDataClass: true, - setVisible: function () { - vis = this.visible = !vis; - each(axis.series, function (series) { - each(series.points, function (point) { - if (point.dataClass === i) { - point.setVisible(vis); - } - }); - }); - - chart.legend.colorizeItem(this, vis); - } - }, dataClass)); - }); - } - return legendItems; - }, - name: '' // Prevents 'undefined' in legend in IE8 - }); - - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - Highcharts.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, ColorAxis.prototype.tweenColors(Color(this.start), Color(this.end), this.pos)); - }; - }); - - /** - * Extend the chart getAxes method to also get the color axis - */ - wrap(Chart.prototype, 'getAxes', function (proceed) { - - var options = this.options, - colorAxisOptions = options.colorAxis; - - proceed.call(this); - - this.colorAxis = []; - if (colorAxisOptions) { - new ColorAxis(this, colorAxisOptions); // eslint-disable-line no-new - } - }); - - - /** - * Wrap the legend getAllItems method to add the color axis. This also removes the - * axis' own series to prevent them from showing up individually. - */ - wrap(Legend.prototype, 'getAllItems', function (proceed) { - var allItems = [], - colorAxis = this.chart.colorAxis[0]; - - if (colorAxis) { - - // Data classes - if (colorAxis.options.dataClasses) { - allItems = allItems.concat(colorAxis.getDataClassLegendSymbols()); - // Gradient legend - } else { - // Add this axis on top - allItems.push(colorAxis); - } - - // Don't add the color axis' series - each(colorAxis.series, function (series) { - series.options.showInLegend = false; - }); - } - - return allItems.concat(proceed.call(this)); - }); - /** - * Mixin for maps and heatmaps - */ - var colorPointMixin = { - /** - * Set the visibility of a single point - */ - setVisible: function (vis) { - var point = this, - method = vis ? 'show' : 'hide'; - - // Show and hide associated elements - each(['graphic', 'dataLabel'], function (key) { - if (point[key]) { - point[key][method](); - } - }); - } - }; - var colorSeriesMixin = { - - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color', - dashstyle: 'dashStyle' - }, - pointArrayMap: ['value'], - axisTypes: ['xAxis', 'yAxis', 'colorAxis'], - optionalAxis: 'colorAxis', - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - getSymbol: noop, - parallelArrays: ['x', 'y', 'value'], - colorKey: 'value', - - /** - * In choropleth maps, the color is a result of the value, so this needs translation too - */ - translateColors: function () { - var series = this, - nullColor = this.options.nullColor, - colorAxis = this.colorAxis, - colorKey = this.colorKey; - - each(this.data, function (point) { - var value = point[colorKey], - color; - - color = point.options.color || - (value === null ? nullColor : (colorAxis && value !== undefined) ? colorAxis.toColor(value, point) : point.color || series.color); - - if (color) { - point.color = color; - } - }); - } - }; - - /** - * Extend the default options with map options - */ - defaultOptions.plotOptions.heatmap = merge(defaultOptions.plotOptions.scatter, { - animation: false, - borderWidth: 0, - nullColor: '#F8F8F8', - dataLabels: { - formatter: function () { // #2945 - return this.point.value; - }, - inside: true, - verticalAlign: 'middle', - crop: false, - overflow: false, - padding: 0 // #3837 - }, - marker: null, - pointRange: null, // dynamically set to colsize by default - tooltip: { - pointFormat: '{point.x}, {point.y}: {point.value}<br/>' - }, - states: { - normal: { - animation: true - }, - hover: { - halo: false, // #3406, halo is not required on heatmaps - brightness: 0.2 - } - } - }); - - // The Heatmap series type - seriesTypes.heatmap = extendClass(seriesTypes.scatter, merge(colorSeriesMixin, { - type: 'heatmap', - pointArrayMap: ['y', 'value'], - hasPointSpecificOptions: true, - pointClass: extendClass(Point, colorPointMixin), - supportsDrilldown: true, - getExtremesFromAll: true, - directTouch: true, - - /** - * Override the init method to add point ranges on both axes. - */ - init: function () { - var options; - seriesTypes.scatter.prototype.init.apply(this, arguments); - - options = this.options; - options.pointRange = pick(options.pointRange, options.colsize || 1); // #3758, prevent resetting in setData - this.yAxis.axisPointRange = options.rowsize || 1; // general point range - }, - translate: function () { - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - between = function (x, a, b) { - return Math.min(Math.max(a, x), b); - }; - - series.generatePoints(); - - each(series.points, function (point) { - var xPad = (options.colsize || 1) / 2, - yPad = (options.rowsize || 1) / 2, - x1 = between(Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), 0, xAxis.len), - x2 = between(Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), 0, xAxis.len), - y1 = between(Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), 0, yAxis.len), - y2 = between(Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), 0, yAxis.len); - - // Set plotX and plotY for use in K-D-Tree and more - point.plotX = point.clientX = (x1 + x2) / 2; - point.plotY = (y1 + y2) / 2; - - point.shapeType = 'rect'; - point.shapeArgs = { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - width: Math.abs(x2 - x1), - height: Math.abs(y2 - y1) - }; - }); - - series.translateColors(); - - // Make sure colors are updated on colorAxis update (#2893) - if (this.chart.hasRendered) { - each(series.points, function (point) { - point.shapeArgs.fill = point.options.color || point.color; // #3311 - }); - } - }, - drawPoints: seriesTypes.column.prototype.drawPoints, - animate: noop, - getBox: noop, - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - getExtremes: function () { - // Get the extremes from the value data - Series.prototype.getExtremes.call(this, this.valueData); - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Get the extremes from the y data - Series.prototype.getExtremes.call(this); - } - - })); - - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.js b/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.js deleted file mode 100644 index f613d29a..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Plugin for displaying a message when there is no data visible in chart. - - (c) 2010-2014 Highsoft AS - Author: Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(a){typeof module==="object"&&module.exports?module.exports=a:a(Highcharts)})(function(a){function h(){return!!this.points.length}function d(){this.hasData()?this.hideNoData():this.showNoData()}var e=a.seriesTypes,c=a.Chart.prototype,f=a.getOptions(),g=a.extend,i=a.each;g(f.lang,{noData:"No data to display"});f.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};i(["pie","gauge","waterfall","bubble"],function(b){if(e[b])e[b].prototype.hasData= -h});a.Series.prototype.hasData=function(){return this.visible&&this.dataMax!==void 0&&this.dataMin!==void 0};c.showNoData=function(b){var a=this.options,b=b||a.lang.noData,a=a.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(b,0,0,null,null,null,a.useHTML,null,"no-data").attr(a.attr).css(a.style).add(),this.noDataLabel.align(g(this.noDataLabel.getBBox(),a.position),!1,"plotBox")};c.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};c.hasData=function(){for(var a= -this.series,c=a.length;c--;)if(a[c].hasData()&&!a[c].options.isInternal)return!0;return!1};c.callbacks.push(function(b){a.addEvent(b,"load",d);a.addEvent(b,"redraw",d)})}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.src.js b/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.src.js deleted file mode 100644 index 2d071100..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/no-data-to-display.src.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Plugin for displaying a message when there is no data visible in chart. - * - * (c) 2010-2014 Highsoft AS - * Author: Oystein Moseng - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - var seriesTypes = H.seriesTypes, - chartPrototype = H.Chart.prototype, - defaultOptions = H.getOptions(), - extend = H.extend, - each = H.each; - - // Add language option - extend(defaultOptions.lang, { - noData: 'No data to display' - }); - - // Add default display options for message - defaultOptions.noData = { - position: { - x: 0, - y: 0, - align: 'center', - verticalAlign: 'middle' - }, - attr: { - }, - style: { - fontWeight: 'bold', - fontSize: '12px', - color: '#60606a' - } - // useHTML: false - }; - - /** - * Define hasData functions for series. These return true if there are data points on this series within the plot area - */ - function hasDataPie() { - return !!this.points.length; /* != 0 */ - } - - each(['pie', 'gauge', 'waterfall', 'bubble'], function (type) { - if (seriesTypes[type]) { - seriesTypes[type].prototype.hasData = hasDataPie; - } - }); - - H.Series.prototype.hasData = function () { - return this.visible && this.dataMax !== undefined && this.dataMin !== undefined; // #3703 - }; - - /** - * Display a no-data message. - * - * @param {String} str An optional message to show in place of the default one - */ - chartPrototype.showNoData = function (str) { - var chart = this, - options = chart.options, - text = str || options.lang.noData, - noDataOptions = options.noData; - - if (!chart.noDataLabel) { - chart.noDataLabel = chart.renderer - .label( - text, - 0, - 0, - null, - null, - null, - noDataOptions.useHTML, - null, - 'no-data' - ) - .attr(noDataOptions.attr) - .css(noDataOptions.style) - .add(); - chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox'); - } - }; - - /** - * Hide no-data message - */ - chartPrototype.hideNoData = function () { - var chart = this; - if (chart.noDataLabel) { - chart.noDataLabel = chart.noDataLabel.destroy(); - } - }; - - /** - * Returns true if there are data points within the plot area now - */ - chartPrototype.hasData = function () { - var chart = this, - series = chart.series, - i = series.length; - - while (i--) { - if (series[i].hasData() && !series[i].options.isInternal) { - return true; - } - } - - return false; - }; - - /** - * Show no-data message if there is no data in sight. Otherwise, hide it. - */ - function handleNoData() { - var chart = this; - if (chart.hasData()) { - chart.hideNoData(); - } else { - chart.showNoData(); - } - } - - /** - * Add event listener to handle automatic display of no-data message - */ - chartPrototype.callbacks.push(function (chart) { - H.addEvent(chart, 'load', handleNoData); - H.addEvent(chart, 'redraw', handleNoData); - }); - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.js b/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.js deleted file mode 100644 index bc21bb3c..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Client side exporting module - - (c) 2015 Torstein Honsi / Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(c){typeof module==="object"&&module.exports?module.exports=c:c(Highcharts)})(function(c){function z(c,f){var h=l.getElementsByTagName("head")[0],b=l.createElement("script");b.type="text/javascript";b.src=c;b.onload=f;h.appendChild(b)}var f=c.win,i=f.navigator,l=f.document;c.CanVGRenderer={};c.Chart.prototype.exportChartLocal=function(A,B){var h=this,b=c.merge(h.options.exporting,A),s=i.userAgent.indexOf("WebKit")>-1&&i.userAgent.indexOf("Chrome")<0,n=b.scale||2,p,t=f.URL||f.webkitURL||f, -k,u=0,q,o,v,d=function(){if(b.fallbackToExportServer===!1)throw"Fallback to export server disabled";h.exportChart(b)},w=function(a,g,e,c,m,b,d){var j=new f.Image;if(!s)j.crossOrigin="Anonymous";j.onload=function(){var b=l.createElement("canvas"),f=b.getContext&&b.getContext("2d"),h;if(f){b.height=j.height*n;b.width=j.width*n;f.drawImage(j,0,0,b.width,b.height);try{h=b.toDataURL(),e(h,g)}catch(i){if(i.name==="SecurityError"||i.name==="SECURITY_ERR"||i.message==="SecurityError")c(a,g);else throw i; -}}else m(a,g);d&&d(a,g)};j.onerror=function(){b(a,g);d&&d(a,g)};j.src=a},x=function(a){try{if(!s&&i.userAgent.toLowerCase().indexOf("firefox")<0)return t.createObjectURL(new f.Blob([a],{type:"image/svg+xml;charset-utf-16"}))}catch(b){}return"data:image/svg+xml;charset=UTF-8,"+encodeURIComponent(a)},r=function(a,c){var e=l.createElement("a"),d=(b.filename||"chart")+"."+c,m;if(i.msSaveOrOpenBlob)i.msSaveOrOpenBlob(a,d);else if(e.download!==void 0)e.href=a,e.download=d,e.target="_blank",l.body.appendChild(e), -e.click(),l.body.removeChild(e);else try{if(m=f.open(a,"chart"),m===void 0||m===null)throw 1;}catch(h){f.location.href=a}},y=function(){var a,g,e=h.sanitizeSVG(p.innerHTML);if(b&&b.type==="image/svg+xml")try{i.msSaveOrOpenBlob?(g=new MSBlobBuilder,g.append(e),a=g.getBlob("image/svg+xml")):a=x(e),r(a,"svg")}catch(k){d()}else a=x(e),w(a,{},function(a){try{r(a,"png")}catch(b){d()}},function(){var a=l.createElement("canvas"),b=a.getContext("2d"),g=e.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1]* -n,j=e.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1]*n,k=function(){b.drawSvg(e,0,0,g,j);try{r(i.msSaveOrOpenBlob?a.msToBlob():a.toDataURL("image/png"),"png")}catch(c){d()}};a.width=g;a.height=j;f.canvg?k():(h.showLoading(),z(c.getOptions().global.canvasToolsURL,function(){h.hideLoading();k()}))},d,d,function(){try{t.revokeObjectURL(a)}catch(b){}})},C=function(a,b){++u;b.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",a);u===k.length&&y()};c.wrap(c.Chart.prototype,"getChartHTML", -function(a){p=this.container.cloneNode(!0);return a.apply(this,Array.prototype.slice.call(arguments,1))});h.getSVGForExport(b,B);k=p.getElementsByTagName("image");try{k.length||y();for(o=0,v=k.length;o<v;++o)q=k[o],w(q.getAttributeNS("http://www.w3.org/1999/xlink","href"),{imageElement:q},C,d,d,d)}catch(D){d()}};c.getOptions().exporting.buttons.contextButton.menuItems=[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChartLocal()}}, -{textKey:"downloadSVG",onclick:function(){this.exportChartLocal({type:"image/svg+xml"})}}]}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.src.js b/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.src.js deleted file mode 100644 index 093f49f3..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/offline-exporting.src.js +++ /dev/null @@ -1,301 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Client side exporting module - * - * (c) 2015 Torstein Honsi / Oystein Moseng - * - * License: www.highcharts.com/license - */ - -/*global MSBlobBuilder */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - var win = Highcharts.win, - nav = win.navigator, - doc = win.document; - - // Dummy object so we can reuse our canvas-tools.js without errors - Highcharts.CanVGRenderer = {}; - - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - function getScript(scriptLocation, callback) { - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - } - - /** - * Add a new method to the Chart object to perform a local download - */ - Highcharts.Chart.prototype.exportChartLocal = function (exportingOptions, chartOptions) { - var chart = this, - options = Highcharts.merge(chart.options.exporting, exportingOptions), - webKit = nav.userAgent.indexOf('WebKit') > -1 && nav.userAgent.indexOf('Chrome') < 0, // Webkit and not chrome - scale = options.scale || 2, - chartCopyContainer, - domurl = win.URL || win.webkitURL || win, - images, - imagesEmbedded = 0, - el, - i, - l, - fallbackToExportServer = function () { - if (options.fallbackToExportServer === false) { - throw 'Fallback to export server disabled'; - } - chart.exportChart(options); - }, - // Get data:URL from image URL - // Pass in callbacks to handle results. finallyCallback is always called at the end of the process. Supplying this callback is optional. - // All callbacks receive two arguments: imageURL, and callbackArgs. callbackArgs is used only by callbacks and can contain whatever. - imageToDataUrl = function (imageURL, callbackArgs, successCallback, taintedCallback, noCanvasSupportCallback, failedLoadCallback, finallyCallback) { - var img = new win.Image(); - if (!webKit) { - img.crossOrigin = 'Anonymous'; // For some reason Safari chokes on this attribute - } - img.onload = function () { - var canvas = doc.createElement('canvas'), - ctx = canvas.getContext && canvas.getContext('2d'), - dataURL; - - if (!ctx) { - noCanvasSupportCallback(imageURL, callbackArgs); - } else { - canvas.height = img.height * scale; - canvas.width = img.width * scale; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - - // Now we try to get the contents of the canvas. - try { - dataURL = canvas.toDataURL(); - successCallback(dataURL, callbackArgs); - } catch (e) { - // Failed - either tainted canvas or something else went horribly wrong - if (e.name === 'SecurityError' || e.name === 'SECURITY_ERR' || e.message === 'SecurityError') { - taintedCallback(imageURL, callbackArgs); - } else { - throw e; - } - } - } - if (finallyCallback) { - finallyCallback(imageURL, callbackArgs); - } - }; - img.onerror = function () { - failedLoadCallback(imageURL, callbackArgs); - if (finallyCallback) { - finallyCallback(imageURL, callbackArgs); - } - }; - img.src = imageURL; - }, - // Get blob URL from SVG code. Falls back to normal data URI. - svgToDataUrl = function (svg) { - try { - // Safari requires data URI since it doesn't allow navigation to blob URLs - // Firefox has an issue with Blobs and internal references, leading to gradients not working using Blobs (#4550) - if (!webKit && nav.userAgent.toLowerCase().indexOf('firefox') < 0) { - return domurl.createObjectURL(new win.Blob([svg], { type: 'image/svg+xml;charset-utf-16' })); - } - } catch (e) { - // Ignore - } - return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg); - }, - // Download contents by dataURL/blob - download = function (dataURL, extension) { - var a = doc.createElement('a'), - filename = (options.filename || 'chart') + '.' + extension, - windowRef; - - // IE specific blob implementation - if (nav.msSaveOrOpenBlob) { - nav.msSaveOrOpenBlob(dataURL, filename); - return; - } - - // Try HTML5 download attr if supported - if (a.download !== undefined) { - a.href = dataURL; - a.download = filename; // HTML5 download attribute - a.target = '_blank'; - doc.body.appendChild(a); - a.click(); - doc.body.removeChild(a); - } else { - // No download attr, just opening data URI - try { - windowRef = win.open(dataURL, 'chart'); - if (windowRef === undefined || windowRef === null) { - throw 1; - } - } catch (e) { - // window.open failed, trying location.href - win.location.href = dataURL; - } - } - }, - // Get data URL to an image of the chart and call download on it - initiateDownload = function () { - var svgurl, - blob, - svg = chart.sanitizeSVG(chartCopyContainer.innerHTML); // SVG of chart copy - - // Initiate download depending on file type - if (options && options.type === 'image/svg+xml') { - // SVG download. In this case, we want to use Microsoft specific Blob if available - try { - if (nav.msSaveOrOpenBlob) { - blob = new MSBlobBuilder(); - blob.append(svg); - svgurl = blob.getBlob('image/svg+xml'); - } else { - svgurl = svgToDataUrl(svg); - } - download(svgurl, 'svg'); - } catch (e) { - fallbackToExportServer(); - } - } else { - // PNG download - create bitmap from SVG - - // First, try to get PNG by rendering on canvas - svgurl = svgToDataUrl(svg); - imageToDataUrl(svgurl, { /* args */ }, function (imageURL) { - // Success - try { - download(imageURL, 'png'); - } catch (e) { - fallbackToExportServer(); - } - }, function () { - // Failed due to tainted canvas - // Create new and untainted canvas - var canvas = doc.createElement('canvas'), - ctx = canvas.getContext('2d'), - imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, - imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, - downloadWithCanVG = function () { - ctx.drawSvg(svg, 0, 0, imageWidth, imageHeight); - try { - download(nav.msSaveOrOpenBlob ? canvas.msToBlob() : canvas.toDataURL('image/png'), 'png'); - } catch (e) { - fallbackToExportServer(); - } - }; - - canvas.width = imageWidth; - canvas.height = imageHeight; - if (win.canvg) { - // Use preloaded canvg - downloadWithCanVG(); - } else { - // Must load canVG first - chart.showLoading(); - getScript(Highcharts.getOptions().global.canvasToolsURL, function () { - chart.hideLoading(); - downloadWithCanVG(); - }); - } - }, - // No canvas support - fallbackToExportServer, - // Failed to load image - fallbackToExportServer, - // Finally - function () { - try { - domurl.revokeObjectURL(svgurl); - } catch (e) { - // Ignore - } - }); - } - }, - // Success handler, we converted image to base64! - embeddedSuccess = function (imageURL, callbackArgs) { - ++imagesEmbedded; - - // Change image href in chart copy - callbackArgs.imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageURL); - - // Start download when done with the last image - if (imagesEmbedded === images.length) { - initiateDownload(); - } - }; - - // Hook into getSVG to get a copy of the chart copy's container - Highcharts.wrap(Highcharts.Chart.prototype, 'getChartHTML', function (proceed) { - chartCopyContainer = this.container.cloneNode(true); - return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - }); - - // Trigger hook to get chart copy - chart.getSVGForExport(options, chartOptions); - images = chartCopyContainer.getElementsByTagName('image'); - - try { - // If there are no images to embed, just go ahead and start the download process - if (!images.length) { - initiateDownload(); - } - - // Go through the images we want to embed - for (i = 0, l = images.length; i < l; ++i) { - el = images[i]; - imageToDataUrl(el.getAttributeNS('http://www.w3.org/1999/xlink', 'href'), { imageElement: el }, - embeddedSuccess, - // Tainted canvas - fallbackToExportServer, - // No canvas support - fallbackToExportServer, - // Failed to load source - fallbackToExportServer - ); - } - } catch (e) { - fallbackToExportServer(); - } - }; - - // Extend the default options to use the local exporter logic - Highcharts.getOptions().exporting.buttons.contextButton.menuItems = [{ - textKey: 'printChart', - onclick: function () { - this.print(); - } - }, { - separator: true - }, { - textKey: 'downloadPNG', - onclick: function () { - this.exportChartLocal(); - } - }, { - textKey: 'downloadSVG', - onclick: function () { - this.exportChartLocal({ - type: 'image/svg+xml' - }); - } - }]; - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.js b/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.js deleted file mode 100644 index 6ef652e8..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Solid angular gauge module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(a){typeof module==="object"&&module.exports?module.exports=a:a(Highcharts)})(function(a){var q=a.getOptions().plotOptions,r=a.pInt,s=a.pick,k=a.each,l;q.solidgauge=a.merge(q.gauge,{colorByPoint:!0});l={initDataClasses:function(b){var d=this,i=this.chart,c,g=0,e=this.options;this.dataClasses=c=[];k(b.dataClasses,function(f,h){var p,f=a.merge(f);c.push(f);if(!f.color)e.dataClassColor==="category"?(p=i.options.colors,f.color=p[g++],g===p.length&&(g=0)):f.color=d.tweenColors(a.Color(e.minColor), -a.Color(e.maxColor),h/(b.dataClasses.length-1))})},initStops:function(b){this.stops=b.stops||[[0,this.options.minColor],[1,this.options.maxColor]];k(this.stops,function(b){b.color=a.Color(b[1])})},toColor:function(b,d){var a,c=this.stops,g,e=this.dataClasses,f,h;if(e)for(h=e.length;h--;){if(f=e[h],g=f.from,c=f.to,(g===void 0||b>=g)&&(c===void 0||b<=c)){a=f.color;if(d)d.dataClass=h;break}}else{this.isLog&&(b=this.val2lin(b));a=1-(this.max-b)/(this.max-this.min);for(h=c.length;h--;)if(a>c[h][0])break; -g=c[h]||c[h+1];c=c[h+1]||g;a=1-(c[0]-a)/(c[0]-g[0]||1);a=this.tweenColors(g.color,c.color,a)}return a},tweenColors:function(b,a,i){var c;!a.rgba.length||!b.rgba.length?b=a.input||"none":(b=b.rgba,a=a.rgba,c=a[3]!==1||b[3]!==1,b=(c?"rgba(":"rgb(")+Math.round(a[0]+(b[0]-a[0])*(1-i))+","+Math.round(a[1]+(b[1]-a[1])*(1-i))+","+Math.round(a[2]+(b[2]-a[2])*(1-i))+(c?","+(a[3]+(b[3]-a[3])*(1-i)):"")+")");return b}};k(["fill","stroke"],function(b){a.Fx.prototype[b+"Setter"]=function(){this.elem.attr(b,l.tweenColors(a.Color(this.start), -a.Color(this.end),this.pos))}});a.seriesTypes.solidgauge=a.extendClass(a.seriesTypes.gauge,{type:"solidgauge",pointAttrToOptions:{},bindAxes:function(){var b;a.seriesTypes.gauge.prototype.bindAxes.call(this);b=this.yAxis;a.extend(b,l);b.options.dataClasses&&b.initDataClasses(b.options);b.initStops(b.options)},drawPoints:function(){var b=this,d=b.yAxis,i=d.center,c=b.options,g=b.chart.renderer,e=c.overshoot,f=e&&typeof e==="number"?e/180*Math.PI:0;a.each(b.points,function(a){var e=a.graphic,j=d.startAngleRad+ -d.translate(a.y,null,null,null,!0),k=r(s(a.options.radius,c.radius,100))*i[2]/200,m=r(s(a.options.innerRadius,c.innerRadius,60))*i[2]/200,n=d.toColor(a.y,a),o=Math.min(d.startAngleRad,d.endAngleRad),l=Math.max(d.startAngleRad,d.endAngleRad);n==="none"&&(n=a.color||b.color||"none");if(n!=="none")a.color=n;j=Math.max(o-f,Math.min(l+f,j));c.wrap===!1&&(j=Math.max(o,Math.min(l,j)));o=Math.min(j,d.startAngleRad);j=Math.max(j,d.startAngleRad);j-o>2*Math.PI&&(j=o+2*Math.PI);a.shapeArgs=m={x:i[0],y:i[1], -r:k,innerR:m,start:o,end:j,fill:n};a.startR=k;if(e){if(a=m.d,e.animate(m),a)m.d=a}else a.graphic=g.arc(m).attr({stroke:c.borderColor||"none","stroke-width":c.borderWidth||0,fill:n,"sweep-flag":0}).add(b.group)})},animate:function(b){if(!b)this.startAngleRad=this.yAxis.startAngleRad,a.seriesTypes.pie.prototype.animate.call(this,b)}})}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.src.js b/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.src.js deleted file mode 100644 index faa5c661..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/solid-gauge.src.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Solid angular gauge module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - 'use strict'; - - var defaultPlotOptions = H.getOptions().plotOptions, - pInt = H.pInt, - pick = H.pick, - each = H.each, - colorAxisMethods, - UNDEFINED; - - // The default options - defaultPlotOptions.solidgauge = H.merge(defaultPlotOptions.gauge, { - colorByPoint: true - }); - - - // These methods are defined in the ColorAxis object, and copied here. - // If we implement an AMD system we should make ColorAxis a dependency. - colorAxisMethods = { - - - initDataClasses: function (userOptions) { - var axis = this, - chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options; - this.dataClasses = dataClasses = []; - - each(userOptions.dataClasses, function (dataClass, i) { - var colors; - - dataClass = H.merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = axis.tweenColors(H.Color(options.minColor), H.Color(options.maxColor), i / (userOptions.dataClasses.length - 1)); - } - } - }); - }, - - initStops: function (userOptions) { - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function (stop) { - stop.color = H.Color(stop[1]); - }); - }, - /** - * Translate from a value to a color - */ - toColor: function (value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / (this.max - this.min)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = this.tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. - */ - tweenColors: function (from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - } - }; - - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - H.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, colorAxisMethods.tweenColors(H.Color(this.start), H.Color(this.end), this.pos)); - }; - }); - - // The series prototype - H.seriesTypes.solidgauge = H.extendClass(H.seriesTypes.gauge, { - type: 'solidgauge', - pointAttrToOptions: {}, // #4301, don't inherit line marker's attribs - bindAxes: function () { - var axis; - H.seriesTypes.gauge.prototype.bindAxes.call(this); - - axis = this.yAxis; - H.extend(axis, colorAxisMethods); - - // Prepare data classes - if (axis.options.dataClasses) { - axis.initDataClasses(axis.options); - } - axis.initStops(axis.options); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - var series = this, - yAxis = series.yAxis, - center = yAxis.center, - options = series.options, - renderer = series.chart.renderer, - overshoot = options.overshoot, - overshootVal = overshoot && typeof overshoot === 'number' ? overshoot / 180 * Math.PI : 0; - - H.each(series.points, function (point) { - var graphic = point.graphic, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true), - radius = (pInt(pick(point.options.radius, options.radius, 100)) * center[2]) / 200, - innerRadius = (pInt(pick(point.options.innerRadius, options.innerRadius, 60)) * center[2]) / 200, - shapeArgs, - d, - toColor = yAxis.toColor(point.y, point), - axisMinAngle = Math.min(yAxis.startAngleRad, yAxis.endAngleRad), - axisMaxAngle = Math.max(yAxis.startAngleRad, yAxis.endAngleRad), - minAngle, - maxAngle; - - if (toColor === 'none') { // #3708 - toColor = point.color || series.color || 'none'; - } - if (toColor !== 'none') { - point.color = toColor; - } - - // Handle overshoot and clipping to axis max/min - rotation = Math.max(axisMinAngle - overshootVal, Math.min(axisMaxAngle + overshootVal, rotation)); - - // Handle the wrap option - if (options.wrap === false) { - rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation)); - } - - minAngle = Math.min(rotation, yAxis.startAngleRad); - maxAngle = Math.max(rotation, yAxis.startAngleRad); - - if (maxAngle - minAngle > 2 * Math.PI) { - maxAngle = minAngle + 2 * Math.PI; - } - - point.shapeArgs = shapeArgs = { - x: center[0], - y: center[1], - r: radius, - innerR: innerRadius, - start: minAngle, - end: maxAngle, - fill: toColor - }; - point.startR = radius; // For PieSeries.animate - - if (graphic) { - d = shapeArgs.d; - graphic.animate(shapeArgs); - if (d) { - shapeArgs.d = d; // animate alters it - } - } else { - point.graphic = renderer.arc(shapeArgs) - .attr({ - stroke: options.borderColor || 'none', - 'stroke-width': options.borderWidth || 0, - fill: toColor, - 'sweep-flag': 0 - }) - .add(series.group); - } - }); - }, - - /** - * Extend the pie slice animation by animating from start angle and up - */ - animate: function (init) { - - if (!init) { - this.startAngleRad = this.yAxis.startAngleRad; - H.seriesTypes.pie.prototype.animate.call(this, init); - } - } - }); - -})); diff --git a/platforms/android/assets/www/lib/highcharts/modules/treemap.js b/platforms/android/assets/www/lib/highcharts/modules/treemap.js deleted file mode 100644 index f9543544..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/treemap.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2014 Highsoft AS - Authors: Jon Arild Nygard / Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(f){typeof module==="object"&&module.exports?module.exports=f:f(Highcharts)})(function(f){var j=f.seriesTypes,A=f.map,o=f.merge,t=f.extend,u=f.extendClass,v=f.getOptions().plotOptions,w=function(){},k=f.each,s=f.grep,i=f.pick,m=f.Series,B=f.stableSort,x=f.Color,C=function(a,b,c){var d,c=c||this;for(d in a)a.hasOwnProperty(d)&&b.call(c,a[d],d,a)},y=function(a,b,c,d){d=d||this;a=a||[];k(a,function(e,g){c=b.call(d,c,e,g,a)});return c},r=function(a,b,c){c=c||this;a=b.call(c,a);a!==!1&&r(a,b, -c)};v.treemap=o(v.scatter,{showInLegend:!1,marker:!1,borderColor:"#E0E0E0",borderWidth:1,dataLabels:{enabled:!0,defer:!1,verticalAlign:"middle",formatter:function(){return this.point.name||this.point.id},inside:!0},tooltip:{headerFormat:"",pointFormat:"<b>{point.name}</b>: {point.node.val}</b><br/>"},layoutAlgorithm:"sliceAndDice",layoutStartingDirection:"vertical",alternateStartingDirection:!1,levelIsConstant:!0,states:{hover:{borderColor:"#A0A0A0",brightness:j.heatmap?0:0.1,shadow:!1}},drillUpButton:{position:{align:"right", -x:-10,y:10}}});j.treemap=u(j.scatter,o({pointAttrToOptions:{},pointArrayMap:["value"],axisTypes:j.heatmap?["xAxis","yAxis","colorAxis"]:["xAxis","yAxis"],optionalAxis:"colorAxis",getSymbol:w,parallelArrays:["x","y","value","colorValue"],colorKey:"colorValue",translateColors:j.heatmap&&j.heatmap.prototype.translateColors},{type:"treemap",trackerGroups:["group","dataLabelsGroup"],pointClass:u(f.Point,{setVisible:j.pie.prototype.pointClass.prototype.setVisible}),getListOfParents:function(a,b){var c= -y(a,function(a,c,b){c=i(c.parent,"");a[c]===void 0&&(a[c]=[]);a[c].push(b);return a},{});C(c,function(a,c,g){c!==""&&f.inArray(c,b)===-1&&(k(a,function(a){g[""].push(a)}),delete g[c])});return c},getTree:function(){var a,b=this;a=A(this.data,function(a){return a.id});a=b.getListOfParents(this.data,a);b.nodeMap=[];a=b.buildNode("",-1,0,a,null);r(this.nodeMap[this.rootNode],function(a){var d=!1,e=a.parent;a.visible=!0;if(e||e==="")d=b.nodeMap[e];return d});r(this.nodeMap[this.rootNode].children,function(a){var b= -!1;k(a,function(a){a.visible=!0;a.children.length&&(b=(b||[]).concat(a.children))});return b});this.setTreeValues(a);return a},init:function(a,b){m.prototype.init.call(this,a,b);this.options.allowDrillToNode&&this.drillTo()},buildNode:function(a,b,c,d,e){var g=this,h=[],z=g.points[b],q;k(d[a]||[],function(b){q=g.buildNode(g.points[b].id,b,c+1,d,a);h.push(q)});b={id:a,i:b,children:h,level:c,parent:e,visible:!1};g.nodeMap[b.id]=b;if(z)z.node=b;return b},setTreeValues:function(a){var b=this,c=b.options, -d=0,e=[],g,h=b.points[a.i];k(a.children,function(a){a=b.setTreeValues(a);e.push(a);a.ignore?r(a.children,function(a){var c=!1;k(a,function(a){t(a,{ignore:!0,isLeaf:!1,visible:!1});a.children.length&&(c=(c||[]).concat(a.children))});return c}):d+=a.val});B(e,function(a,c){return a.sortIndex-c.sortIndex});g=i(h&&h.value,d);t(a,{children:e,childrenTotal:d,ignore:!(i(h&&h.visible,!0)&&g>0),isLeaf:a.visible&&!d,levelDynamic:c.levelIsConstant?a.level:a.level-b.nodeMap[b.rootNode].level,name:i(h&&h.name, -""),sortIndex:i(h&&h.sortIndex,-g),val:g});return a},calculateChildrenAreas:function(a,b){var c=this,d=c.options,e=this.levelMap[a.levelDynamic+1],g=i(c[e&&e.layoutAlgorithm]&&e.layoutAlgorithm,d.layoutAlgorithm),h=d.alternateStartingDirection,f=[],d=s(a.children,function(a){return!a.ignore});if(e&&e.layoutStartingDirection)b.direction=e.layoutStartingDirection==="vertical"?0:1;f=c[g](b,d);k(d,function(a,d){var e=f[d];a.values=o(e,{val:a.childrenTotal,direction:h?1-b.direction:b.direction});a.pointValues= -o(e,{x:e.x/c.axisRatio,width:e.width/c.axisRatio});a.children.length&&c.calculateChildrenAreas(a,a.values)})},setPointValues:function(){var a=this.xAxis,b=this.yAxis;k(this.points,function(c){var d=c.node.pointValues,e,g,h;d?(e=Math.round(a.translate(d.x,0,0,0,1)),g=Math.round(a.translate(d.x+d.width,0,0,0,1)),h=Math.round(b.translate(d.y,0,0,0,1)),d=Math.round(b.translate(d.y+d.height,0,0,0,1)),c.shapeType="rect",c.shapeArgs={x:Math.min(e,g),y:Math.min(h,d),width:Math.abs(g-e),height:Math.abs(d- -h)},c.plotX=c.shapeArgs.x+c.shapeArgs.width/2,c.plotY=c.shapeArgs.y+c.shapeArgs.height/2):(delete c.plotX,delete c.plotY)})},setColorRecursive:function(a,b){var c=this,d,e;if(a){d=c.points[a.i];e=c.levelMap[a.levelDynamic];b=i(d&&d.options.color,e&&e.color,b);if(d)d.color=b;a.children.length&&k(a.children,function(a){c.setColorRecursive(a,b)})}},algorithmGroup:function(a,b,c,d){this.height=a;this.width=b;this.plot=d;this.startDirection=this.direction=c;this.lH=this.nH=this.lW=this.nW=this.total=0; -this.elArr=[];this.lP={total:0,lH:0,nH:0,lW:0,nW:0,nR:0,lR:0,aspectRatio:function(a,c){return Math.max(a/c,c/a)}};this.addElement=function(a){this.lP.total=this.elArr[this.elArr.length-1];this.total+=a;this.direction===0?(this.lW=this.nW,this.lP.lH=this.lP.total/this.lW,this.lP.lR=this.lP.aspectRatio(this.lW,this.lP.lH),this.nW=this.total/this.height,this.lP.nH=this.lP.total/this.nW,this.lP.nR=this.lP.aspectRatio(this.nW,this.lP.nH)):(this.lH=this.nH,this.lP.lW=this.lP.total/this.lH,this.lP.lR=this.lP.aspectRatio(this.lP.lW, -this.lH),this.nH=this.total/this.width,this.lP.nW=this.lP.total/this.nH,this.lP.nR=this.lP.aspectRatio(this.lP.nW,this.nH));this.elArr.push(a)};this.reset=function(){this.lW=this.nW=0;this.elArr=[];this.total=0}},algorithmCalcPoints:function(a,b,c,d){var e,g,h,f,q=c.lW,n=c.lH,l=c.plot,i,j=0,p=c.elArr.length-1;b?(q=c.nW,n=c.nH):i=c.elArr[c.elArr.length-1];k(c.elArr,function(a){if(b||j<p)c.direction===0?(e=l.x,g=l.y,h=q,f=a/h):(e=l.x,g=l.y,f=n,h=a/f),d.push({x:e,y:g,width:h,height:f}),c.direction=== -0?l.y+=f:l.x+=h;j+=1});c.reset();c.direction===0?c.width-=q:c.height-=n;l.y=l.parent.y+(l.parent.height-c.height);l.x=l.parent.x+(l.parent.width-c.width);if(a)c.direction=1-c.direction;b||c.addElement(i)},algorithmLowAspectRatio:function(a,b,c){var d=[],e=this,g,f={x:b.x,y:b.y,parent:b},i=0,j=c.length-1,n=new this.algorithmGroup(b.height,b.width,b.direction,f);k(c,function(c){g=b.width*b.height*(c.val/b.val);n.addElement(g);n.lP.nR>n.lP.lR&&e.algorithmCalcPoints(a,!1,n,d,f);i===j&&e.algorithmCalcPoints(a, -!0,n,d,f);i+=1});return d},algorithmFill:function(a,b,c){var d=[],e,f=b.direction,h=b.x,i=b.y,j=b.width,n=b.height,l,o,m,p;k(c,function(c){e=b.width*b.height*(c.val/b.val);l=h;o=i;f===0?(p=n,m=e/p,j-=m,h+=m):(m=j,p=e/m,n-=p,i+=p);d.push({x:l,y:o,width:m,height:p});a&&(f=1-f)});return d},strip:function(a,b){return this.algorithmLowAspectRatio(!1,a,b)},squarified:function(a,b){return this.algorithmLowAspectRatio(!0,a,b)},sliceAndDice:function(a,b){return this.algorithmFill(!0,a,b)},stripes:function(a, -b){return this.algorithmFill(!1,a,b)},translate:function(){var a,b;m.prototype.translate.call(this);this.rootNode=i(this.options.rootId,"");this.levelMap=y(this.options.levels,function(a,b){a[b.level]=b;return a},{});b=this.tree=this.getTree();this.axisRatio=this.xAxis.len/this.yAxis.len;this.nodeMap[""].pointValues=a={x:0,y:0,width:100,height:100};this.nodeMap[""].values=a=o(a,{width:a.width*this.axisRatio,direction:this.options.layoutStartingDirection==="vertical"?0:1,val:b.val});this.calculateChildrenAreas(b, -a);this.colorAxis?this.translateColors():this.options.colorByPoint||this.setColorRecursive(this.tree,void 0);b=this.nodeMap[this.rootNode].pointValues;this.xAxis.setExtremes(b.x,b.x+b.width,!1);this.yAxis.setExtremes(b.y,b.y+b.height,!1);this.xAxis.setScale();this.yAxis.setScale();this.setPointValues()},drawDataLabels:function(){var a=this,b=s(a.points,function(a){return a.node.visible}),c,d;k(b,function(b){d=a.levelMap[b.node.levelDynamic];c={style:{}};if(!b.node.isLeaf)c.enabled=!1;if(d&&d.dataLabels)c= -o(c,d.dataLabels),a._hasPointLabels=!0;if(b.shapeArgs)c.style.width=b.shapeArgs.width;b.dlOptions=o(c,b.options.dataLabels)});m.prototype.drawDataLabels.call(this)},alignDataLabel:j.column.prototype.alignDataLabel,pointAttribs:function(a,b){var c=this.levelMap[a.node.levelDynamic]||{},d=this.options,e=b&&d.states[b]||{},c={stroke:a.borderColor||c.borderColor||e.borderColor||d.borderColor,"stroke-width":i(a.borderWidth,c.borderWidth,e.borderWidth,d.borderWidth),dashstyle:a.borderDashStyle||c.borderDashStyle|| -e.borderDashStyle||d.borderDashStyle,fill:a.color||this.color,zIndex:b==="hover"?1:0};if(a.node.level<=this.nodeMap[this.rootNode].level)c.fill="none",c["stroke-width"]=0;else if(a.node.isLeaf){if(b)c.fill=x(c.fill).brighten(e.brightness).get()}else c.fill=i(d.interactByLeaf,!d.allowDrillToNode)?"none":x(c.fill).setOpacity(b==="hover"?0.75:0.15).get();return c},drawPoints:function(){var a=this,b=s(a.points,function(a){return a.node.visible});k(b,function(c){var b="levelGroup-"+c.node.levelDynamic; -a[b]||(a[b]=a.chart.renderer.g(b).attr({zIndex:1E3-c.node.levelDynamic}).add(a.group));c.group=a[b];c.pointAttr={"":a.pointAttribs(c),hover:a.pointAttribs(c,"hover"),select:{}}});j.column.prototype.drawPoints.call(this);a.options.allowDrillToNode&&k(b,function(b){var d;if(b.graphic)d=b.drillId=a.options.interactByLeaf?a.drillToByLeaf(b):a.drillToByGroup(b),b.graphic.css({cursor:d?"pointer":"default"})})},drillTo:function(){var a=this;f.addEvent(a,"click",function(b){var b=b.point,c=b.drillId,d;c&& -(d=a.nodeMap[a.rootNode].name||a.rootNode,b.setState(""),a.drillToNode(c),a.showDrillUpButton(d))})},drillToByGroup:function(a){var b=!1;if(a.node.level-this.nodeMap[this.rootNode].level===1&&!a.node.isLeaf)b=a.id;return b},drillToByLeaf:function(a){var b=!1;if(a.node.parent!==this.rootNode&&a.node.isLeaf)for(a=a.node;!b;)if(a=this.nodeMap[a.parent],a.parent===this.rootNode)b=a.id;return b},drillUp:function(){var a=null;this.rootNode&&(a=this.nodeMap[this.rootNode],a=a.parent!==null?this.nodeMap[a.parent]: -this.nodeMap[""]);if(a!==null)this.drillToNode(a.id),a.id===""?this.drillUpButton=this.drillUpButton.destroy():(a=this.nodeMap[a.parent],this.showDrillUpButton(a.name||a.id))},drillToNode:function(a){this.options.rootId=a;this.isDirty=!0;this.chart.redraw()},showDrillUpButton:function(a){var b=this,a=a||"< Back",c=b.options.drillUpButton,d,e;if(c.text)a=c.text;this.drillUpButton?this.drillUpButton.attr({text:a}).align():(e=(d=c.theme)&&d.states,this.drillUpButton=this.chart.renderer.button(a,null, -null,function(){b.drillUp()},d,e&&e.hover,e&&e.select).attr({align:c.position.align,zIndex:9}).add().align(c.position,!1,c.relativeTo||"plotBox"))},buildKDTree:w,drawLegendSymbol:f.LegendSymbolMixin.drawRectangle,getExtremes:function(){m.prototype.getExtremes.call(this,this.colorValueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;m.prototype.getExtremes.call(this)},getExtremesFromAll:!0,bindAxes:function(){var a={endOnTick:!1,gridLineWidth:0,lineWidth:0,min:0,dataMin:0,minPadding:0,max:100, -dataMax:100,maxPadding:0,startOnTick:!1,title:null,tickPositions:[]};m.prototype.bindAxes.call(this);f.extend(this.yAxis.options,a);f.extend(this.xAxis.options,a)}}))}); diff --git a/platforms/android/assets/www/lib/highcharts/modules/treemap.src.js b/platforms/android/assets/www/lib/highcharts/modules/treemap.src.js deleted file mode 100644 index a93f830c..00000000 --- a/platforms/android/assets/www/lib/highcharts/modules/treemap.src.js +++ /dev/null @@ -1,868 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2014 Highsoft AS - * Authors: Jon Arild Nygard / Oystein Moseng - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - var seriesTypes = H.seriesTypes, - map = H.map, - merge = H.merge, - extend = H.extend, - extendClass = H.extendClass, - defaultOptions = H.getOptions(), - plotOptions = defaultOptions.plotOptions, - noop = function () { - }, - each = H.each, - grep = H.grep, - pick = H.pick, - Series = H.Series, - stableSort = H.stableSort, - Color = H.Color, - eachObject = function (list, func, context) { - var key; - context = context || this; - for (key in list) { - if (list.hasOwnProperty(key)) { - func.call(context, list[key], key, list); - } - } - }, - reduce = function (arr, func, previous, context) { - context = context || this; - arr = arr || []; // @note should each be able to handle empty values automatically? - each(arr, function (current, i) { - previous = func.call(context, previous, current, i, arr); - }); - return previous; - }, - // @todo find correct name for this function. - recursive = function (item, func, context) { - var next; - context = context || this; - next = func.call(context, item); - if (next !== false) { - recursive(next, func, context); - } - }; - - // Define default options - plotOptions.treemap = merge(plotOptions.scatter, { - showInLegend: false, - marker: false, - borderColor: '#E0E0E0', - borderWidth: 1, - dataLabels: { - enabled: true, - defer: false, - verticalAlign: 'middle', - formatter: function () { // #2945 - return this.point.name || this.point.id; - }, - inside: true - }, - tooltip: { - headerFormat: '', - pointFormat: '<b>{point.name}</b>: {point.node.val}</b><br/>' - }, - layoutAlgorithm: 'sliceAndDice', - layoutStartingDirection: 'vertical', - alternateStartingDirection: false, - levelIsConstant: true, - states: { - hover: { - borderColor: '#A0A0A0', - brightness: seriesTypes.heatmap ? 0 : 0.1, - shadow: false - } - }, - drillUpButton: { - position: { - align: 'right', - x: -10, - y: 10 - } - } - }); - - // Stolen from heatmap - var colorSeriesMixin = { - // mapping between SVG attributes and the corresponding options - pointAttrToOptions: {}, - pointArrayMap: ['value'], - axisTypes: seriesTypes.heatmap ? ['xAxis', 'yAxis', 'colorAxis'] : ['xAxis', 'yAxis'], - optionalAxis: 'colorAxis', - getSymbol: noop, - parallelArrays: ['x', 'y', 'value', 'colorValue'], - colorKey: 'colorValue', // Point color option key - translateColors: seriesTypes.heatmap && seriesTypes.heatmap.prototype.translateColors - }; - - // The Treemap series type - seriesTypes.treemap = extendClass(seriesTypes.scatter, merge(colorSeriesMixin, { - type: 'treemap', - trackerGroups: ['group', 'dataLabelsGroup'], - pointClass: extendClass(H.Point, { - setVisible: seriesTypes.pie.prototype.pointClass.prototype.setVisible - }), - /** - * Creates an object map from parent id to childrens index. - * @param {Array} data List of points set in options. - * @param {string} data[].parent Parent id of point. - * @param {Array} ids List of all point ids. - * @return {Object} Map from parent id to children index in data. - */ - getListOfParents: function (data, ids) { - var listOfParents = reduce(data, function (prev, curr, i) { - var parent = pick(curr.parent, ''); - if (prev[parent] === undefined) { - prev[parent] = []; - } - prev[parent].push(i); - return prev; - }, {}); - - // If parent does not exist, hoist parent to root of tree. - eachObject(listOfParents, function (children, parent, list) { - if ((parent !== '') && (H.inArray(parent, ids) === -1)) { - each(children, function (child) { - list[''].push(child); - }); - delete list[parent]; - } - }); - return listOfParents; - }, - /** - * Creates a tree structured object from the series points - */ - getTree: function () { - var tree, - series = this, - allIds = map(this.data, function (d) { - return d.id; - }), - parentList = series.getListOfParents(this.data, allIds); - - series.nodeMap = []; - tree = series.buildNode('', -1, 0, parentList, null); - recursive(this.nodeMap[this.rootNode], function (node) { - var next = false, - p = node.parent; - node.visible = true; - if (p || p === '') { - next = series.nodeMap[p]; - } - return next; - }); - recursive(this.nodeMap[this.rootNode].children, function (children) { - var next = false; - each(children, function (child) { - child.visible = true; - if (child.children.length) { - next = (next || []).concat(child.children); - } - }); - return next; - }); - this.setTreeValues(tree); - return tree; - }, - init: function (chart, options) { - var series = this; - Series.prototype.init.call(series, chart, options); - if (series.options.allowDrillToNode) { - series.drillTo(); - } - }, - buildNode: function (id, i, level, list, parent) { - var series = this, - children = [], - point = series.points[i], - node, - child; - - // Actions - each((list[id] || []), function (i) { - child = series.buildNode(series.points[i].id, i, (level + 1), list, id); - children.push(child); - }); - node = { - id: id, - i: i, - children: children, - level: level, - parent: parent, - visible: false // @todo move this to better location - }; - series.nodeMap[node.id] = node; - if (point) { - point.node = node; - } - return node; - }, - setTreeValues: function (tree) { - var series = this, - options = series.options, - childrenTotal = 0, - children = [], - val, - point = series.points[tree.i]; - - // First give the children some values - each(tree.children, function (child) { - child = series.setTreeValues(child); - children.push(child); - - if (!child.ignore) { - childrenTotal += child.val; - } else { - // @todo Add predicate to avoid looping already ignored children - recursive(child.children, function (children) { - var next = false; - each(children, function (node) { - extend(node, { - ignore: true, - isLeaf: false, - visible: false - }); - if (node.children.length) { - next = (next || []).concat(node.children); - } - }); - return next; - }); - } - }); - // Sort the children - stableSort(children, function (a, b) { - return a.sortIndex - b.sortIndex; - }); - // Set the values - val = pick(point && point.value, childrenTotal); - extend(tree, { - children: children, - childrenTotal: childrenTotal, - // Ignore this node if point is not visible - ignore: !(pick(point && point.visible, true) && (val > 0)), - isLeaf: tree.visible && !childrenTotal, - levelDynamic: (options.levelIsConstant ? tree.level : (tree.level - series.nodeMap[series.rootNode].level)), - name: pick(point && point.name, ''), - sortIndex: pick(point && point.sortIndex, -val), - val: val - }); - return tree; - }, - /** - * Recursive function which calculates the area for all children of a node. - * @param {Object} node The node which is parent to the children. - * @param {Object} area The rectangular area of the parent. - */ - calculateChildrenAreas: function (parent, area) { - var series = this, - options = series.options, - level = this.levelMap[parent.levelDynamic + 1], - algorithm = pick((series[level && level.layoutAlgorithm] && level.layoutAlgorithm), options.layoutAlgorithm), - alternate = options.alternateStartingDirection, - childrenValues = [], - children; - - // Collect all children which should be included - children = grep(parent.children, function (n) { - return !n.ignore; - }); - - if (level && level.layoutStartingDirection) { - area.direction = level.layoutStartingDirection === 'vertical' ? 0 : 1; - } - childrenValues = series[algorithm](area, children); - each(children, function (child, index) { - var values = childrenValues[index]; - child.values = merge(values, { - val: child.childrenTotal, - direction: (alternate ? 1 - area.direction : area.direction) - }); - child.pointValues = merge(values, { - x: (values.x / series.axisRatio), - width: (values.width / series.axisRatio) - }); - // If node has children, then call method recursively - if (child.children.length) { - series.calculateChildrenAreas(child, child.values); - } - }); - }, - setPointValues: function () { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis; - each(series.points, function (point) { - var node = point.node, - values = node.pointValues, - x1, - x2, - y1, - y2; - // Points which is ignored, have no values. - if (values) { - x1 = Math.round(xAxis.translate(values.x, 0, 0, 0, 1)); - x2 = Math.round(xAxis.translate(values.x + values.width, 0, 0, 0, 1)); - y1 = Math.round(yAxis.translate(values.y, 0, 0, 0, 1)); - y2 = Math.round(yAxis.translate(values.y + values.height, 0, 0, 0, 1)); - // Set point values - point.shapeType = 'rect'; - point.shapeArgs = { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - width: Math.abs(x2 - x1), - height: Math.abs(y2 - y1) - }; - point.plotX = point.shapeArgs.x + (point.shapeArgs.width / 2); - point.plotY = point.shapeArgs.y + (point.shapeArgs.height / 2); - } else { - // Reset visibility - delete point.plotX; - delete point.plotY; - } - }); - }, - setColorRecursive: function (node, color) { - var series = this, - point, - level; - if (node) { - point = series.points[node.i]; - level = series.levelMap[node.levelDynamic]; - // Select either point color, level color or inherited color. - color = pick(point && point.options.color, level && level.color, color); - if (point) { - point.color = color; - } - // Do it all again with the children - if (node.children.length) { - each(node.children, function (child) { - series.setColorRecursive(child, color); - }); - } - } - }, - algorithmGroup: function (h, w, d, p) { - this.height = h; - this.width = w; - this.plot = p; - this.direction = d; - this.startDirection = d; - this.total = 0; - this.nW = 0; - this.lW = 0; - this.nH = 0; - this.lH = 0; - this.elArr = []; - this.lP = { - total: 0, - lH: 0, - nH: 0, - lW: 0, - nW: 0, - nR: 0, - lR: 0, - aspectRatio: function (w, h) { - return Math.max((w / h), (h / w)); - } - }; - this.addElement = function (el) { - this.lP.total = this.elArr[this.elArr.length - 1]; - this.total = this.total + el; - if (this.direction === 0) { - // Calculate last point old aspect ratio - this.lW = this.nW; - this.lP.lH = this.lP.total / this.lW; - this.lP.lR = this.lP.aspectRatio(this.lW, this.lP.lH); - // Calculate last point new aspect ratio - this.nW = this.total / this.height; - this.lP.nH = this.lP.total / this.nW; - this.lP.nR = this.lP.aspectRatio(this.nW, this.lP.nH); - } else { - // Calculate last point old aspect ratio - this.lH = this.nH; - this.lP.lW = this.lP.total / this.lH; - this.lP.lR = this.lP.aspectRatio(this.lP.lW, this.lH); - // Calculate last point new aspect ratio - this.nH = this.total / this.width; - this.lP.nW = this.lP.total / this.nH; - this.lP.nR = this.lP.aspectRatio(this.lP.nW, this.nH); - } - this.elArr.push(el); - }; - this.reset = function () { - this.nW = 0; - this.lW = 0; - this.elArr = []; - this.total = 0; - }; - }, - algorithmCalcPoints: function (directionChange, last, group, childrenArea) { - var pX, - pY, - pW, - pH, - gW = group.lW, - gH = group.lH, - plot = group.plot, - keep, - i = 0, - end = group.elArr.length - 1; - if (last) { - gW = group.nW; - gH = group.nH; - } else { - keep = group.elArr[group.elArr.length - 1]; - } - each(group.elArr, function (p) { - if (last || (i < end)) { - if (group.direction === 0) { - pX = plot.x; - pY = plot.y; - pW = gW; - pH = p / pW; - } else { - pX = plot.x; - pY = plot.y; - pH = gH; - pW = p / pH; - } - childrenArea.push({ - x: pX, - y: pY, - width: pW, - height: pH - }); - if (group.direction === 0) { - plot.y = plot.y + pH; - } else { - plot.x = plot.x + pW; - } - } - i = i + 1; - }); - // Reset variables - group.reset(); - if (group.direction === 0) { - group.width = group.width - gW; - } else { - group.height = group.height - gH; - } - plot.y = plot.parent.y + (plot.parent.height - group.height); - plot.x = plot.parent.x + (plot.parent.width - group.width); - if (directionChange) { - group.direction = 1 - group.direction; - } - // If not last, then add uncalculated element - if (!last) { - group.addElement(keep); - } - }, - algorithmLowAspectRatio: function (directionChange, parent, children) { - var childrenArea = [], - series = this, - pTot, - plot = { - x: parent.x, - y: parent.y, - parent: parent - }, - direction = parent.direction, - i = 0, - end = children.length - 1, - group = new this.algorithmGroup(parent.height, parent.width, direction, plot); - // Loop through and calculate all areas - each(children, function (child) { - pTot = (parent.width * parent.height) * (child.val / parent.val); - group.addElement(pTot); - if (group.lP.nR > group.lP.lR) { - series.algorithmCalcPoints(directionChange, false, group, childrenArea, plot); - } - // If last child, then calculate all remaining areas - if (i === end) { - series.algorithmCalcPoints(directionChange, true, group, childrenArea, plot); - } - i = i + 1; - }); - return childrenArea; - }, - algorithmFill: function (directionChange, parent, children) { - var childrenArea = [], - pTot, - direction = parent.direction, - x = parent.x, - y = parent.y, - width = parent.width, - height = parent.height, - pX, - pY, - pW, - pH; - each(children, function (child) { - pTot = (parent.width * parent.height) * (child.val / parent.val); - pX = x; - pY = y; - if (direction === 0) { - pH = height; - pW = pTot / pH; - width = width - pW; - x = x + pW; - } else { - pW = width; - pH = pTot / pW; - height = height - pH; - y = y + pH; - } - childrenArea.push({ - x: pX, - y: pY, - width: pW, - height: pH - }); - if (directionChange) { - direction = 1 - direction; - } - }); - return childrenArea; - }, - strip: function (parent, children) { - return this.algorithmLowAspectRatio(false, parent, children); - }, - squarified: function (parent, children) { - return this.algorithmLowAspectRatio(true, parent, children); - }, - sliceAndDice: function (parent, children) { - return this.algorithmFill(true, parent, children); - }, - stripes: function (parent, children) { - return this.algorithmFill(false, parent, children); - }, - translate: function () { - var pointValues, - seriesArea, - tree, - val; - - // Call prototype function - Series.prototype.translate.call(this); - - // Assign variables - this.rootNode = pick(this.options.rootId, ''); - // Create a object map from level to options - this.levelMap = reduce(this.options.levels, function (arr, item) { - arr[item.level] = item; - return arr; - }, {}); - tree = this.tree = this.getTree(); // @todo Only if series.isDirtyData is true - - // Calculate plotting values. - this.axisRatio = (this.xAxis.len / this.yAxis.len); - this.nodeMap[''].pointValues = pointValues = { x: 0, y: 0, width: 100, height: 100 }; - this.nodeMap[''].values = seriesArea = merge(pointValues, { - width: (pointValues.width * this.axisRatio), - direction: (this.options.layoutStartingDirection === 'vertical' ? 0 : 1), - val: tree.val - }); - this.calculateChildrenAreas(tree, seriesArea); - - // Logic for point colors - if (this.colorAxis) { - this.translateColors(); - } else if (!this.options.colorByPoint) { - this.setColorRecursive(this.tree, undefined); - } - - // Update axis extremes according to the root node. - val = this.nodeMap[this.rootNode].pointValues; - this.xAxis.setExtremes(val.x, val.x + val.width, false); - this.yAxis.setExtremes(val.y, val.y + val.height, false); - this.xAxis.setScale(); - this.yAxis.setScale(); - - // Assign values to points. - this.setPointValues(); - }, - /** - * Extend drawDataLabels with logic to handle custom options related to the treemap series: - * - Points which is not a leaf node, has dataLabels disabled by default. - * - Options set on series.levels is merged in. - * - Width of the dataLabel is set to match the width of the point shape. - */ - drawDataLabels: function () { - var series = this, - points = grep(series.points, function (n) { - return n.node.visible; - }), - options, - level; - each(points, function (point) { - level = series.levelMap[point.node.levelDynamic]; - // Set options to new object to avoid problems with scope - options = { style: {} }; - - // If not a leaf, then label should be disabled as default - if (!point.node.isLeaf) { - options.enabled = false; - } - - // If options for level exists, include them as well - if (level && level.dataLabels) { - options = merge(options, level.dataLabels); - series._hasPointLabels = true; - } - - // Set dataLabel width to the width of the point shape. - if (point.shapeArgs) { - options.style.width = point.shapeArgs.width; - } - - // Merge custom options with point options - point.dlOptions = merge(options, point.options.dataLabels); - }); - Series.prototype.drawDataLabels.call(this); - }, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel, - - /** - * Get presentational attributes - */ - pointAttribs: function (point, state) { - var level = this.levelMap[point.node.levelDynamic] || {}, - options = this.options, - attr, - stateOptions = (state && options.states[state]) || {}; - - // Set attributes by precedence. Point trumps level trumps series. Stroke width uses pick - // because it can be 0. - attr = { - 'stroke': point.borderColor || level.borderColor || stateOptions.borderColor || options.borderColor, - 'stroke-width': pick(point.borderWidth, level.borderWidth, stateOptions.borderWidth, options.borderWidth), - 'dashstyle': point.borderDashStyle || level.borderDashStyle || stateOptions.borderDashStyle || options.borderDashStyle, - 'fill': point.color || this.color, - 'zIndex': state === 'hover' ? 1 : 0 - }; - - if (point.node.level <= this.nodeMap[this.rootNode].level) { - // Hide levels above the current view - attr.fill = 'none'; - attr['stroke-width'] = 0; - } else if (!point.node.isLeaf) { - // If not a leaf, then remove fill - // @todo let users set the opacity - attr.fill = pick(options.interactByLeaf, !options.allowDrillToNode) ? 'none' : Color(attr.fill).setOpacity(state === 'hover' ? 0.75 : 0.15).get(); - } else if (state) { - // Brighten and hoist the hover nodes - attr.fill = Color(attr.fill).brighten(stateOptions.brightness).get(); - } - - return attr; - }, - - /** - * Extending ColumnSeries drawPoints - */ - drawPoints: function () { - var series = this, - points = grep(series.points, function (n) { - return n.node.visible; - }); - - each(points, function (point) { - var groupKey = 'levelGroup-' + point.node.levelDynamic; - if (!series[groupKey]) { - series[groupKey] = series.chart.renderer.g(groupKey) - .attr({ - zIndex: 1000 - point.node.levelDynamic // @todo Set the zIndex based upon the number of levels, instead of using 1000 - }) - .add(series.group); - } - point.group = series[groupKey]; - // Preliminary code in prepraration for HC5 that uses pointAttribs for all series - point.pointAttr = { - '': series.pointAttribs(point), - 'hover': series.pointAttribs(point, 'hover'), - 'select': {} - }; - }); - // Call standard drawPoints - seriesTypes.column.prototype.drawPoints.call(this); - - // If drillToNode is allowed, set a point cursor on clickables & add drillId to point - if (series.options.allowDrillToNode) { - each(points, function (point) { - var cursor, - drillId; - if (point.graphic) { - drillId = point.drillId = series.options.interactByLeaf ? series.drillToByLeaf(point) : series.drillToByGroup(point); - cursor = drillId ? 'pointer' : 'default'; - point.graphic.css({ cursor: cursor }); - } - }); - } - }, - /** - * Add drilling on the suitable points - */ - drillTo: function () { - var series = this; - H.addEvent(series, 'click', function (event) { - var point = event.point, - drillId = point.drillId, - drillName; - // If a drill id is returned, add click event and cursor. - if (drillId) { - drillName = series.nodeMap[series.rootNode].name || series.rootNode; - point.setState(''); // Remove hover - series.drillToNode(drillId); - series.showDrillUpButton(drillName); - } - }); - }, - /** - * Finds the drill id for a parent node. - * Returns false if point should not have a click event - * @param {Object} point - * @return {string || boolean} Drill to id or false when point should not have a click event - */ - drillToByGroup: function (point) { - var series = this, - drillId = false; - if ((point.node.level - series.nodeMap[series.rootNode].level) === 1 && !point.node.isLeaf) { - drillId = point.id; - } - return drillId; - }, - /** - * Finds the drill id for a leaf node. - * Returns false if point should not have a click event - * @param {Object} point - * @return {string || boolean} Drill to id or false when point should not have a click event - */ - drillToByLeaf: function (point) { - var series = this, - drillId = false, - nodeParent; - if ((point.node.parent !== series.rootNode) && (point.node.isLeaf)) { - nodeParent = point.node; - while (!drillId) { - nodeParent = series.nodeMap[nodeParent.parent]; - if (nodeParent.parent === series.rootNode) { - drillId = nodeParent.id; - } - } - } - return drillId; - }, - drillUp: function () { - var drillPoint = null, - node, - parent; - if (this.rootNode) { - node = this.nodeMap[this.rootNode]; - if (node.parent !== null) { - drillPoint = this.nodeMap[node.parent]; - } else { - drillPoint = this.nodeMap['']; - } - } - - if (drillPoint !== null) { - this.drillToNode(drillPoint.id); - if (drillPoint.id === '') { - this.drillUpButton = this.drillUpButton.destroy(); - } else { - parent = this.nodeMap[drillPoint.parent]; - this.showDrillUpButton((parent.name || parent.id)); - } - } - }, - drillToNode: function (id) { - this.options.rootId = id; - this.isDirty = true; // Force redraw - this.chart.redraw(); - }, - showDrillUpButton: function (name) { - var series = this, - backText = (name || '< Back'), - buttonOptions = series.options.drillUpButton, - attr, - states; - - if (buttonOptions.text) { - backText = buttonOptions.text; - } - if (!this.drillUpButton) { - attr = buttonOptions.theme; - states = attr && attr.states; - - this.drillUpButton = this.chart.renderer.button( - backText, - null, - null, - function () { - series.drillUp(); - }, - attr, - states && states.hover, - states && states.select - ) - .attr({ - align: buttonOptions.position.align, - zIndex: 9 - }) - .add() - .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); - } else { - this.drillUpButton.attr({ - text: backText - }) - .align(); - } - }, - buildKDTree: noop, - drawLegendSymbol: H.LegendSymbolMixin.drawRectangle, - getExtremes: function () { - // Get the extremes from the value data - Series.prototype.getExtremes.call(this, this.colorValueData); - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Get the extremes from the y data - Series.prototype.getExtremes.call(this); - }, - getExtremesFromAll: true, - bindAxes: function () { - var treeAxis = { - endOnTick: false, - gridLineWidth: 0, - lineWidth: 0, - min: 0, - dataMin: 0, - minPadding: 0, - max: 100, - dataMax: 100, - maxPadding: 0, - startOnTick: false, - title: null, - tickPositions: [] - }; - Series.prototype.bindAxes.call(this); - H.extend(this.yAxis.options, treeAxis); - H.extend(this.xAxis.options, treeAxis); - } - })); -})); diff --git a/platforms/android/assets/www/lib/highcharts/themes/dark-blue.js b/platforms/android/assets/www/lib/highcharts/themes/dark-blue.js deleted file mode 100644 index 7cf7138a..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/dark-blue.js +++ /dev/null @@ -1,254 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(48, 48, 96)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/dark-green.js b/platforms/android/assets/www/lib/highcharts/themes/dark-green.js deleted file mode 100644 index 4a7ad586..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/dark-green.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgb(48, 96, 48)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/dark-unica.js b/platforms/android/assets/www/lib/highcharts/themes/dark-unica.js deleted file mode 100644 index 598c061c..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/dark-unica.js +++ /dev/null @@ -1,213 +0,0 @@ -/** - * Dark theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Unica+One', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -Highcharts.theme = { - colors: ["#2b908f", "#90ee7e", "#f45b5b", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, '#2a2a2b'], - [1, '#3e3e40'] - ] - }, - style: { - fontFamily: "'Unica One', sans-serif" - }, - plotBorderColor: '#606063' - }, - title: { - style: { - color: '#E0E0E3', - textTransform: 'uppercase', - fontSize: '20px' - } - }, - subtitle: { - style: { - color: '#E0E0E3', - textTransform: 'uppercase' - } - }, - xAxis: { - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: '#707073', - minorGridLineColor: '#505053', - tickColor: '#707073', - title: { - style: { - color: '#A0A0A3' - - } - } - }, - yAxis: { - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: '#707073', - minorGridLineColor: '#505053', - tickColor: '#707073', - tickWidth: 1, - title: { - style: { - color: '#A0A0A3' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.85)', - style: { - color: '#F0F0F0' - } - }, - plotOptions: { - series: { - dataLabels: { - color: '#B0B0B3' - }, - marker: { - lineColor: '#333' - } - }, - boxplot: { - fillColor: '#505053' - }, - candlestick: { - lineColor: 'white' - }, - errorbar: { - color: 'white' - } - }, - legend: { - itemStyle: { - color: '#E0E0E3' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#606063' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#707073' - } - }, - - drilldown: { - activeAxisLabelStyle: { - color: '#F0F0F3' - }, - activeDataLabelStyle: { - color: '#F0F0F3' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - theme: { - fill: '#505053' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: '#505053', - stroke: '#000000', - style: { - color: '#CCC' - }, - states: { - hover: { - fill: '#707073', - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: '#000003', - stroke: '#000000', - style: { - color: 'white' - } - } - } - }, - inputBoxBorderColor: '#505053', - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(255,255,255,0.1)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - }, - xAxis: { - gridLineColor: '#505053' - } - }, - - scrollbar: { - barBackgroundColor: '#808083', - barBorderColor: '#808083', - buttonArrowColor: '#CCC', - buttonBackgroundColor: '#606063', - buttonBorderColor: '#606063', - rifleColor: '#FFF', - trackBackgroundColor: '#404043', - trackBorderColor: '#404043' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: '#505053', - dataLabelsColor: '#B0B0B3', - textColor: '#C0C0C0', - contrastTextColor: '#F0F0F3', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/gray.js b/platforms/android/assets/www/lib/highcharts/themes/gray.js deleted file mode 100644 index d9a40169..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/gray.js +++ /dev/null @@ -1,257 +0,0 @@ -/** - * Gray theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgb(96, 96, 96)'], - [1, 'rgb(16, 16, 16)'] - ] - }, - borderWidth: 0, - borderRadius: 0, - plotBackgroundColor: null, - plotShadow: false, - plotBorderWidth: 0 - }, - title: { - style: { - color: '#FFF', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#DDD', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#999', - tickColor: '#999', - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: null, - minorTickInterval: null, - gridLineColor: 'rgba(255, 255, 255, .1)', - minorGridLineColor: 'rgba(255,255,255,0.07)', - lineWidth: 0, - tickWidth: 0, - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - color: '#CCC' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#333' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - tooltip: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgba(96, 96, 96, .8)'], - [1, 'rgba(16, 16, 16, .8)'] - ] - }, - borderWidth: 0, - style: { - color: '#FFF' - } - }, - - - plotOptions: { - series: { - nullColor: '#444444' - }, - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - - toolbar: { - itemStyle: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the demo examples - legendBackgroundColor: 'rgba(48, 48, 48, 0.8)', - background2: 'rgb(70, 70, 70)', - dataLabelsColor: '#444', - textColor: '#E0E0E0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/grid-light.js b/platforms/android/assets/www/lib/highcharts/themes/grid-light.js deleted file mode 100644 index 8d4ec7fa..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/grid-light.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Grid-light theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Dosis:400,600', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -Highcharts.theme = { - colors: ["#7cb5ec", "#f7a35c", "#90ee7e", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: null, - style: { - fontFamily: "Dosis, sans-serif" - } - }, - title: { - style: { - fontSize: '16px', - fontWeight: 'bold', - textTransform: 'uppercase' - } - }, - tooltip: { - borderWidth: 0, - backgroundColor: 'rgba(219,219,216,0.8)', - shadow: false - }, - legend: { - itemStyle: { - fontWeight: 'bold', - fontSize: '13px' - } - }, - xAxis: { - gridLineWidth: 1, - labels: { - style: { - fontSize: '12px' - } - } - }, - yAxis: { - minorTickInterval: 'auto', - title: { - style: { - textTransform: 'uppercase' - } - }, - labels: { - style: { - fontSize: '12px' - } - } - }, - plotOptions: { - candlestick: { - lineColor: '#404048' - } - }, - - - // General - background2: '#F0F0EA' - -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/grid.js b/platforms/android/assets/www/lib/highcharts/themes/grid.js deleted file mode 100644 index 70342f5e..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/grid.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Grid theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(255, 255, 255)'], - [1, 'rgb(240, 240, 255)'] - ] - }, - borderWidth: 2, - plotBackgroundColor: 'rgba(255, 255, 255, .9)', - plotShadow: true, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#000', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineWidth: 1, - lineColor: '#000', - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - minorTickInterval: 'auto', - lineColor: '#000', - lineWidth: 1, - tickWidth: 1, - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: 'black' - - }, - itemHoverStyle: { - color: '#039' - }, - itemHiddenStyle: { - color: 'gray' - } - }, - labels: { - style: { - color: '#99b' - } - }, - - navigation: { - buttonOptions: { - theme: { - stroke: '#CCCCCC' - } - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/sand-signika.js b/platforms/android/assets/www/lib/highcharts/themes/sand-signika.js deleted file mode 100644 index d17c08e4..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/sand-signika.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Sand-Signika theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Signika:400,700', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -// Add the background image to the container -Highcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) { - proceed.call(this); - this.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)'; -}); - - -Highcharts.theme = { - colors: ["#f45b5b", "#8085e9", "#8d4654", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: null, - style: { - fontFamily: "Signika, serif" - } - }, - title: { - style: { - color: 'black', - fontSize: '16px', - fontWeight: 'bold' - } - }, - subtitle: { - style: { - color: 'black' - } - }, - tooltip: { - borderWidth: 0 - }, - legend: { - itemStyle: { - fontWeight: 'bold', - fontSize: '13px' - } - }, - xAxis: { - labels: { - style: { - color: '#6e6e70' - } - } - }, - yAxis: { - labels: { - style: { - color: '#6e6e70' - } - } - }, - plotOptions: { - series: { - shadow: true - }, - candlestick: { - lineColor: '#404048' - }, - map: { - shadow: false - } - }, - - // Highstock specific - navigator: { - xAxis: { - gridLineColor: '#D0D0D8' - } - }, - rangeSelector: { - buttonTheme: { - fill: 'white', - stroke: '#C0C0C8', - 'stroke-width': 1, - states: { - select: { - fill: '#D0D0D8' - } - } - } - }, - scrollbar: { - trackBorderColor: '#C0C0C8' - }, - - // General - background2: '#E0E0E8' - -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/highcharts/themes/skies.js b/platforms/android/assets/www/lib/highcharts/themes/skies.js deleted file mode 100644 index d58b1f24..00000000 --- a/platforms/android/assets/www/lib/highcharts/themes/skies.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Skies theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], - chart: { - className: 'skies', - borderWidth: 0, - plotShadow: true, - plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', - plotBackgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgba(255, 255, 255, 1)'], - [1, 'rgba(255, 255, 255, 0)'] - ] - }, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#3E576F', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#6D869F', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: 'rgba(255, 255, 255, .5)', - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - tickWidth: 1, - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#3E576F' - }, - itemHoverStyle: { - color: 'black' - }, - itemHiddenStyle: { - color: 'silver' - } - }, - labels: { - style: { - color: '#3E576F' - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/android/assets/www/lib/jquery/.bower.json b/platforms/android/assets/www/lib/jquery/.bower.json deleted file mode 100644 index f6a1ee43..00000000 --- a/platforms/android/assets/www/lib/jquery/.bower.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.1", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ], - "homepage": "https://github.com/jquery/jquery", - "_release": "2.1.1", - "_resolution": { - "type": "version", - "tag": "2.1.1", - "commit": "4dec426aa2a6cbabb1b064319ba7c272d594a688" - }, - "_source": "git://github.com/jquery/jquery.git", - "_target": ">= 1.9.0", - "_originalSource": "jquery" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/jquery/MIT-LICENSE.txt b/platforms/android/assets/www/lib/jquery/MIT-LICENSE.txt deleted file mode 100644 index cdd31b5c..00000000 --- a/platforms/android/assets/www/lib/jquery/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2014 jQuery Foundation and other contributors -http://jquery.com/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/lib/jquery/bower.json b/platforms/android/assets/www/lib/jquery/bower.json deleted file mode 100644 index c66a7506..00000000 --- a/platforms/android/assets/www/lib/jquery/bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.1", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ] -} diff --git a/platforms/android/assets/www/lib/jquery/src/ajax.js b/platforms/android/assets/www/lib/jquery/src/ajax.js deleted file mode 100644 index d39de2a9..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax.js +++ /dev/null @@ -1,806 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./ajax/var/nonce", - "./ajax/var/rquery", - "./core/init", - "./ajax/parseJSON", - "./ajax/parseXML", - "./deferred" -], function( jQuery, rnotwhite, nonce, rquery ) { - -var - // Document location - ajaxLocParts, - ajaxLocation, - - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat("*"); - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/jsonp.js b/platforms/android/assets/www/lib/jquery/src/ajax/jsonp.js deleted file mode 100644 index ff0d5389..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/jsonp.js +++ /dev/null @@ -1,89 +0,0 @@ -define([ - "../core", - "./var/nonce", - "./var/rquery", - "../ajax" -], function( jQuery, nonce, rquery ) { - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/load.js b/platforms/android/assets/www/lib/jquery/src/ajax/load.js deleted file mode 100644 index bff25b1a..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/load.js +++ /dev/null @@ -1,75 +0,0 @@ -define([ - "../core", - "../core/parseHTML", - "../ajax", - "../traversing", - "../manipulation", - "../selector", - // Optional event/alias dependency - "../event/alias" -], function( jQuery ) { - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/parseJSON.js b/platforms/android/assets/www/lib/jquery/src/ajax/parseJSON.js deleted file mode 100644 index 3a96d15b..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/parseJSON.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - -return jQuery.parseJSON; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/parseXML.js b/platforms/android/assets/www/lib/jquery/src/ajax/parseXML.js deleted file mode 100644 index 9eeb625f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/parseXML.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - -return jQuery.parseXML; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/script.js b/platforms/android/assets/www/lib/jquery/src/ajax/script.js deleted file mode 100644 index f44329d4..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/script.js +++ /dev/null @@ -1,64 +0,0 @@ -define([ - "../core", - "../ajax" -], function( jQuery ) { - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/var/nonce.js b/platforms/android/assets/www/lib/jquery/src/ajax/var/nonce.js deleted file mode 100644 index 0871aae8..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/var/nonce.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../core" -], function( jQuery ) { - return jQuery.now(); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/var/rquery.js b/platforms/android/assets/www/lib/jquery/src/ajax/var/rquery.js deleted file mode 100644 index 500a77a0..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/var/rquery.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\?/); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/ajax/xhr.js b/platforms/android/assets/www/lib/jquery/src/ajax/xhr.js deleted file mode 100644 index bdeeee3f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/ajax/xhr.js +++ /dev/null @@ -1,135 +0,0 @@ -define([ - "../core", - "../var/support", - "../ajax" -], function( jQuery, support ) { - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -if ( window.ActiveXObject ) { - jQuery( window ).on( "unload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes.js b/platforms/android/assets/www/lib/jquery/src/attributes.js deleted file mode 100644 index fa2ef1ed..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes.js +++ /dev/null @@ -1,11 +0,0 @@ -define([ - "./core", - "./attributes/attr", - "./attributes/prop", - "./attributes/classes", - "./attributes/val" -], function( jQuery ) { - -// Return jQuery for attributes-only inclusion -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes/attr.js b/platforms/android/assets/www/lib/jquery/src/attributes/attr.js deleted file mode 100644 index 8601cfe1..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes/attr.js +++ /dev/null @@ -1,143 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../core/access", - "./support", - "../selector" -], function( jQuery, rnotwhite, strundefined, access, support ) { - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes/classes.js b/platforms/android/assets/www/lib/jquery/src/attributes/classes.js deleted file mode 100644 index 7d714b8e..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes/classes.js +++ /dev/null @@ -1,158 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../data/var/data_priv", - "../core/init" -], function( jQuery, rnotwhite, strundefined, data_priv ) { - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes/prop.js b/platforms/android/assets/www/lib/jquery/src/attributes/prop.js deleted file mode 100644 index e2b95dca..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes/prop.js +++ /dev/null @@ -1,96 +0,0 @@ -define([ - "../core", - "../core/access", - "./support" -], function( jQuery, access, support ) { - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -// Support: IE9+ -// Selectedness for an option in an optgroup can be inaccurate -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes/support.js b/platforms/android/assets/www/lib/jquery/src/attributes/support.js deleted file mode 100644 index 376b54ad..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes/support.js +++ /dev/null @@ -1,35 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS 5.1, Android 4.x, Android 2.3 - // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere) - support.checkOn = input.value !== ""; - - // Must access the parent to make an option select properly - // Support: IE9, IE10 - support.optSelected = opt.selected; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Check if an input maintains its value after becoming a radio - // Support: IE9, IE10 - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - -return support; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/attributes/val.js b/platforms/android/assets/www/lib/jquery/src/attributes/val.js deleted file mode 100644 index 42ef3234..00000000 --- a/platforms/android/assets/www/lib/jquery/src/attributes/val.js +++ /dev/null @@ -1,163 +0,0 @@ -define([ - "../core", - "./support", - "../core/init" -], function( jQuery, support ) { - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // IE6-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/callbacks.js b/platforms/android/assets/www/lib/jquery/src/callbacks.js deleted file mode 100644 index 17572bb9..00000000 --- a/platforms/android/assets/www/lib/jquery/src/callbacks.js +++ /dev/null @@ -1,205 +0,0 @@ -define([ - "./core", - "./var/rnotwhite" -], function( jQuery, rnotwhite ) { - -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core.js b/platforms/android/assets/www/lib/jquery/src/core.js deleted file mode 100644 index b520b593..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core.js +++ /dev/null @@ -1,498 +0,0 @@ -define([ - "./var/arr", - "./var/slice", - "./var/concat", - "./var/push", - "./var/indexOf", - "./var/class2type", - "./var/toString", - "./var/hasOwn", - "./var/support" -], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "@VERSION", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android < 4.0, iOS < 6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Support: Android<4.1 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core/access.js b/platforms/android/assets/www/lib/jquery/src/core/access.js deleted file mode 100644 index b6110c8f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core/access.js +++ /dev/null @@ -1,60 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - -return access; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core/init.js b/platforms/android/assets/www/lib/jquery/src/core/init.js deleted file mode 100644 index daf5d190..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core/init.js +++ /dev/null @@ -1,123 +0,0 @@ -// Initialize a jQuery object -define([ - "../core", - "./var/rsingleTag", - "../traversing/findFilter" -], function( jQuery, rsingleTag ) { - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - -return init; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core/parseHTML.js b/platforms/android/assets/www/lib/jquery/src/core/parseHTML.js deleted file mode 100644 index 64cf2a18..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core/parseHTML.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "./var/rsingleTag", - "../manipulation" // buildFragment -], function( jQuery, rsingleTag ) { - -// data: string of html -// context (optional): If specified, the fragment will be created in this context, defaults to document -// keepScripts (optional): If true, will include scripts passed in the html string -jQuery.parseHTML = function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - -return jQuery.parseHTML; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core/ready.js b/platforms/android/assets/www/lib/jquery/src/core/ready.js deleted file mode 100644 index 122b1610..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core/ready.js +++ /dev/null @@ -1,97 +0,0 @@ -define([ - "../core", - "../core/init", - "../deferred" -], function( jQuery ) { - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/core/var/rsingleTag.js b/platforms/android/assets/www/lib/jquery/src/core/var/rsingleTag.js deleted file mode 100644 index 7e7090b7..00000000 --- a/platforms/android/assets/www/lib/jquery/src/core/var/rsingleTag.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // Match a standalone tag - return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css.js b/platforms/android/assets/www/lib/jquery/src/css.js deleted file mode 100644 index 6c20b32d..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css.js +++ /dev/null @@ -1,451 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./core/access", - "./css/var/rmargin", - "./css/var/rnumnonpx", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/var/getStyles", - "./css/curCSS", - "./css/defaultDisplay", - "./css/addGetHookIf", - "./css/support", - "./data/var/data_priv", - - "./core/init", - "./css/swap", - "./core/ready", - "./selector" // contains -], function( jQuery, pnum, access, rmargin, rnumnonpx, cssExpand, isHidden, - getStyles, curCSS, defaultDisplay, addGetHookIf, support, data_priv ) { - -var - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name[0].toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = data_priv.get( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set. See: #7116 - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifying setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - style[ name ] = value; - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/addGetHookIf.js b/platforms/android/assets/www/lib/jquery/src/css/addGetHookIf.js deleted file mode 100644 index 81d694cb..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/addGetHookIf.js +++ /dev/null @@ -1,24 +0,0 @@ -define(function() { - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due to missing dependency), - // remove it. - // Since there are no other hooks for marginRight, remove the whole object. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - -return addGetHookIf; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/curCSS.js b/platforms/android/assets/www/lib/jquery/src/css/curCSS.js deleted file mode 100644 index abcc8cb7..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/curCSS.js +++ /dev/null @@ -1,57 +0,0 @@ -define([ - "../core", - "./var/rnumnonpx", - "./var/rmargin", - "./var/getStyles", - "../selector" // contains -], function( jQuery, rnumnonpx, rmargin, getStyles ) { - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - -return curCSS; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/defaultDisplay.js b/platforms/android/assets/www/lib/jquery/src/css/defaultDisplay.js deleted file mode 100644 index 631b9ba8..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/defaultDisplay.js +++ /dev/null @@ -1,70 +0,0 @@ -define([ - "../core", - "../manipulation" // appendTo -], function( jQuery ) { - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} - -return defaultDisplay; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/hiddenVisibleSelectors.js b/platforms/android/assets/www/lib/jquery/src/css/hiddenVisibleSelectors.js deleted file mode 100644 index c7f1c7ee..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/hiddenVisibleSelectors.js +++ /dev/null @@ -1,15 +0,0 @@ -define([ - "../core", - "../selector" -], function( jQuery ) { - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/support.js b/platforms/android/assets/www/lib/jquery/src/css/support.js deleted file mode 100644 index 4a4d75c4..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/support.js +++ /dev/null @@ -1,91 +0,0 @@ -define([ - "../core", - "../var/support" -], function( jQuery, support ) { - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - - return ret; - } - }); - } -})(); - -return support; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/swap.js b/platforms/android/assets/www/lib/jquery/src/css/swap.js deleted file mode 100644 index ce164353..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/swap.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - -return jQuery.swap; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/var/cssExpand.js b/platforms/android/assets/www/lib/jquery/src/css/var/cssExpand.js deleted file mode 100644 index 91e90a88..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/var/cssExpand.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return [ "Top", "Right", "Bottom", "Left" ]; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/var/getStyles.js b/platforms/android/assets/www/lib/jquery/src/css/var/getStyles.js deleted file mode 100644 index 26cc0a25..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/var/getStyles.js +++ /dev/null @@ -1,5 +0,0 @@ -define(function() { - return function( elem ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - }; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/var/isHidden.js b/platforms/android/assets/www/lib/jquery/src/css/var/isHidden.js deleted file mode 100644 index 15ab81a9..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/var/isHidden.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../../core", - "../../selector" - // css is assumed -], function( jQuery ) { - - return function( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); - }; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/var/rmargin.js b/platforms/android/assets/www/lib/jquery/src/css/var/rmargin.js deleted file mode 100644 index da0438db..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/var/rmargin.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^margin/); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/css/var/rnumnonpx.js b/platforms/android/assets/www/lib/jquery/src/css/var/rnumnonpx.js deleted file mode 100644 index c93be285..00000000 --- a/platforms/android/assets/www/lib/jquery/src/css/var/rnumnonpx.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../var/pnum" -], function( pnum ) { - return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/data.js b/platforms/android/assets/www/lib/jquery/src/data.js deleted file mode 100644 index e3f3578f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/data.js +++ /dev/null @@ -1,179 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./core/access", - "./data/var/data_priv", - "./data/var/data_user" -], function( jQuery, rnotwhite, access, data_priv, data_user ) { - -/* - Implementation Summary - - 1. Enforce API surface and semantic compatibility with 1.9.x branch - 2. Improve the module's maintainability by reducing the storage - paths to a single mechanism. - 3. Use the same single mechanism to support "private" and "user" data. - 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) - 5. Avoid exposing implementation details on user objects (eg. expando properties) - 6. Provide a clear path for implementation upgrade to WeakMap in 2014 -*/ -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/data/Data.js b/platforms/android/assets/www/lib/jquery/src/data/Data.js deleted file mode 100644 index d34606bf..00000000 --- a/platforms/android/assets/www/lib/jquery/src/data/Data.js +++ /dev/null @@ -1,181 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "./accepts" -], function( jQuery, rnotwhite ) { - -function Data() { - // Support: Android < 4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Math.random(); -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android < 4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; - -return Data; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/data/accepts.js b/platforms/android/assets/www/lib/jquery/src/data/accepts.js deleted file mode 100644 index 291c7b47..00000000 --- a/platforms/android/assets/www/lib/jquery/src/data/accepts.js +++ /dev/null @@ -1,20 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - -return jQuery.acceptData; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/data/var/data_priv.js b/platforms/android/assets/www/lib/jquery/src/data/var/data_priv.js deleted file mode 100644 index 24399e46..00000000 --- a/platforms/android/assets/www/lib/jquery/src/data/var/data_priv.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/data/var/data_user.js b/platforms/android/assets/www/lib/jquery/src/data/var/data_user.js deleted file mode 100644 index 24399e46..00000000 --- a/platforms/android/assets/www/lib/jquery/src/data/var/data_user.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/deferred.js b/platforms/android/assets/www/lib/jquery/src/deferred.js deleted file mode 100644 index 7fcc214a..00000000 --- a/platforms/android/assets/www/lib/jquery/src/deferred.js +++ /dev/null @@ -1,149 +0,0 @@ -define([ - "./core", - "./var/slice", - "./callbacks" -], function( jQuery, slice ) { - -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/deprecated.js b/platforms/android/assets/www/lib/jquery/src/deprecated.js deleted file mode 100644 index 1b068bc3..00000000 --- a/platforms/android/assets/www/lib/jquery/src/deprecated.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "./core", - "./traversing" -], function( jQuery ) { - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/dimensions.js b/platforms/android/assets/www/lib/jquery/src/dimensions.js deleted file mode 100644 index 9cb0e99f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/dimensions.js +++ /dev/null @@ -1,50 +0,0 @@ -define([ - "./core", - "./core/access", - "./css" -], function( jQuery, access ) { - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/effects.js b/platforms/android/assets/www/lib/jquery/src/effects.js deleted file mode 100644 index 5fafc528..00000000 --- a/platforms/android/assets/www/lib/jquery/src/effects.js +++ /dev/null @@ -1,649 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/defaultDisplay", - "./data/var/data_priv", - - "./core/init", - "./effects/Tween", - "./queue", - "./css", - "./deferred", - "./traversing" -], function( jQuery, pnum, cssExpand, isHidden, defaultDisplay, data_priv ) { - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // we're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // enable finishing flag on private data - data.finish = true; - - // empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/effects/Tween.js b/platforms/android/assets/www/lib/jquery/src/effects/Tween.js deleted file mode 100644 index d1e4dca8..00000000 --- a/platforms/android/assets/www/lib/jquery/src/effects/Tween.js +++ /dev/null @@ -1,114 +0,0 @@ -define([ - "../core", - "../css" -], function( jQuery ) { - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes - -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/effects/animatedSelector.js b/platforms/android/assets/www/lib/jquery/src/effects/animatedSelector.js deleted file mode 100644 index bc5a3d6c..00000000 --- a/platforms/android/assets/www/lib/jquery/src/effects/animatedSelector.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core", - "../selector", - "../effects" -], function( jQuery ) { - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/event.js b/platforms/android/assets/www/lib/jquery/src/event.js deleted file mode 100644 index f38d70a4..00000000 --- a/platforms/android/assets/www/lib/jquery/src/event.js +++ /dev/null @@ -1,868 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./var/rnotwhite", - "./var/hasOwn", - "./var/slice", - "./event/support", - "./data/var/data_priv", - - "./core/init", - "./data/accepts", - "./selector" -], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) { - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome < 28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - // Support: Android < 4.0 - src.returnValue === false ? - returnTrue : - returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// Create "bubbling" focus and blur events -// Support: Firefox, Chrome, Safari -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/event/alias.js b/platforms/android/assets/www/lib/jquery/src/event/alias.js deleted file mode 100644 index 7e791750..00000000 --- a/platforms/android/assets/www/lib/jquery/src/event/alias.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "../event" -], function( jQuery ) { - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/event/support.js b/platforms/android/assets/www/lib/jquery/src/event/support.js deleted file mode 100644 index 85060db7..00000000 --- a/platforms/android/assets/www/lib/jquery/src/event/support.js +++ /dev/null @@ -1,9 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -support.focusinBubbles = "onfocusin" in window; - -return support; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/exports/amd.js b/platforms/android/assets/www/lib/jquery/src/exports/amd.js deleted file mode 100644 index 9a9846f9..00000000 --- a/platforms/android/assets/www/lib/jquery/src/exports/amd.js +++ /dev/null @@ -1,24 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/exports/global.js b/platforms/android/assets/www/lib/jquery/src/exports/global.js deleted file mode 100644 index 8eee5bb7..00000000 --- a/platforms/android/assets/www/lib/jquery/src/exports/global.js +++ /dev/null @@ -1,32 +0,0 @@ -define([ - "../core", - "../var/strundefined" -], function( jQuery, strundefined ) { - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in -// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/intro.js b/platforms/android/assets/www/lib/jquery/src/intro.js deleted file mode 100644 index f7dd78d3..00000000 --- a/platforms/android/assets/www/lib/jquery/src/intro.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * jQuery JavaScript Library v@VERSION - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: @DATE - */ - -(function( global, factory ) { - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -//"use strict"; diff --git a/platforms/android/assets/www/lib/jquery/src/jquery.js b/platforms/android/assets/www/lib/jquery/src/jquery.js deleted file mode 100644 index 46460fa9..00000000 --- a/platforms/android/assets/www/lib/jquery/src/jquery.js +++ /dev/null @@ -1,36 +0,0 @@ -define([ - "./core", - "./selector", - "./traversing", - "./callbacks", - "./deferred", - "./core/ready", - "./data", - "./queue", - "./queue/delay", - "./attributes", - "./event", - "./event/alias", - "./manipulation", - "./manipulation/_evalUrl", - "./wrap", - "./css", - "./css/hiddenVisibleSelectors", - "./serialize", - "./ajax", - "./ajax/xhr", - "./ajax/script", - "./ajax/jsonp", - "./ajax/load", - "./effects", - "./effects/animatedSelector", - "./offset", - "./dimensions", - "./deprecated", - "./exports/amd", - "./exports/global" -], function( jQuery ) { - -return jQuery; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/manipulation.js b/platforms/android/assets/www/lib/jquery/src/manipulation.js deleted file mode 100644 index 31d0c4ed..00000000 --- a/platforms/android/assets/www/lib/jquery/src/manipulation.js +++ /dev/null @@ -1,582 +0,0 @@ -define([ - "./core", - "./var/concat", - "./var/push", - "./core/access", - "./manipulation/var/rcheckableType", - "./manipulation/support", - "./data/var/data_priv", - "./data/var/data_user", - - "./core/init", - "./data/accepts", - "./traversing", - "./selector", - "./event" -], function( jQuery, concat, push, access, rcheckableType, support, data_priv, data_user ) { - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE 9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE 9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute("type"); - } - - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Support: IE >= 9 -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Support: IE >= 9 - // Fix Cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Fixes #12346 - // Support: Webkit, IE - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/manipulation/_evalUrl.js b/platforms/android/assets/www/lib/jquery/src/manipulation/_evalUrl.js deleted file mode 100644 index 6704749a..00000000 --- a/platforms/android/assets/www/lib/jquery/src/manipulation/_evalUrl.js +++ /dev/null @@ -1,18 +0,0 @@ -define([ - "../ajax" -], function( jQuery ) { - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - -return jQuery._evalUrl; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/manipulation/support.js b/platforms/android/assets/www/lib/jquery/src/manipulation/support.js deleted file mode 100644 index fb1e8556..00000000 --- a/platforms/android/assets/www/lib/jquery/src/manipulation/support.js +++ /dev/null @@ -1,31 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // #11217 - WebKit loses check when the name is after the checked attribute - // Support: Windows Web Apps (WWA) - // `name` and `type` need .setAttribute for WWA - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE9-IE11+ - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); - -return support; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/manipulation/var/rcheckableType.js b/platforms/android/assets/www/lib/jquery/src/manipulation/var/rcheckableType.js deleted file mode 100644 index c27a15dc..00000000 --- a/platforms/android/assets/www/lib/jquery/src/manipulation/var/rcheckableType.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^(?:checkbox|radio)$/i); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/offset.js b/platforms/android/assets/www/lib/jquery/src/offset.js deleted file mode 100644 index dc7bb955..00000000 --- a/platforms/android/assets/www/lib/jquery/src/offset.js +++ /dev/null @@ -1,204 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./core/access", - "./css/var/rnumnonpx", - "./css/curCSS", - "./css/addGetHookIf", - "./css/support", - - "./core/init", - "./css", - "./selector" // contains -], function( jQuery, strundefined, access, rnumnonpx, curCSS, addGetHookIf, support ) { - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // We assume that getBoundingClientRect is available when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// getComputedStyle returns percent when specified for top/left/bottom/right -// rather than make the css module depend on the offset module, we just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/outro.js b/platforms/android/assets/www/lib/jquery/src/outro.js deleted file mode 100644 index be4600a5..00000000 --- a/platforms/android/assets/www/lib/jquery/src/outro.js +++ /dev/null @@ -1 +0,0 @@ -})); diff --git a/platforms/android/assets/www/lib/jquery/src/queue.js b/platforms/android/assets/www/lib/jquery/src/queue.js deleted file mode 100644 index fbfaf9ca..00000000 --- a/platforms/android/assets/www/lib/jquery/src/queue.js +++ /dev/null @@ -1,142 +0,0 @@ -define([ - "./core", - "./data/var/data_priv", - "./deferred", - "./callbacks" -], function( jQuery, data_priv ) { - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", key ] ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/queue/delay.js b/platforms/android/assets/www/lib/jquery/src/queue/delay.js deleted file mode 100644 index 4b4498ce..00000000 --- a/platforms/android/assets/www/lib/jquery/src/queue/delay.js +++ /dev/null @@ -1,22 +0,0 @@ -define([ - "../core", - "../queue", - "../effects" // Delay is optional because of this dependency -], function( jQuery ) { - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); -}; - -return jQuery.fn.delay; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/selector-native.js b/platforms/android/assets/www/lib/jquery/src/selector-native.js deleted file mode 100644 index d8163c2f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/selector-native.js +++ /dev/null @@ -1,172 +0,0 @@ -define([ - "./core" -], function( jQuery ) { - -/* - * Optional (non-Sizzle) selector module for custom builds. - * - * Note that this DOES NOT SUPPORT many documented jQuery - * features in exchange for its smaller size: - * - * Attribute not equal selector - * Positional selectors (:first; :eq(n); :odd; etc.) - * Type selectors (:input; :checkbox; :button; etc.) - * State-based selectors (:animated; :visible; :hidden; etc.) - * :has(selector) - * :not(complex selector) - * custom selectors via Sizzle extensions - * Leading combinators (e.g., $collection.find("> *")) - * Reliable functionality on XML fragments - * Requiring all parts of a selector to match elements under context - * (e.g., $div.find("div > *") now matches children of $div) - * Matching against non-elements - * Reliable sorting of disconnected nodes - * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit) - * - * If any of these are unacceptable tradeoffs, either use Sizzle or - * customize this stub for the project's specific needs. - */ - -var docElem = window.document.documentElement, - selector_hasDuplicate, - matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector, - selector_sortOrder = function( a, b ) { - // Flag for duplicate removal - if ( a === b ) { - selector_hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 ) { - - // Choose the first element that is related to our document - if ( a === document || jQuery.contains(document, a) ) { - return -1; - } - if ( b === document || jQuery.contains(document, b) ) { - return 1; - } - - // Maintain original order - return 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - }; - -jQuery.extend({ - find: function( selector, context, results, seed ) { - var elem, nodeType, - i = 0; - - results = results || []; - context = context || document; - - // Same basic safeguard as Sizzle - if ( !selector || typeof selector !== "string" ) { - return results; - } - - // Early return if context is not an element or document - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( seed ) { - while ( (elem = seed[i++]) ) { - if ( jQuery.find.matchesSelector(elem, selector) ) { - results.push( elem ); - } - } - } else { - jQuery.merge( results, context.querySelectorAll(selector) ); - } - - return results; - }, - unique: function( results ) { - var elem, - duplicates = [], - i = 0, - j = 0; - - selector_hasDuplicate = false; - results.sort( selector_sortOrder ); - - if ( selector_hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; - }, - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - return elem.textContent; - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; - }, - contains: function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) ); - }, - isXMLDoc: function( elem ) { - return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML"; - }, - expr: { - attrHandle: {}, - match: { - bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i, - needsContext: /^[\x20\t\r\n\f]*[>+~]/ - } - } -}); - -jQuery.extend( jQuery.find, { - matches: function( expr, elements ) { - return jQuery.find( expr, null, null, elements ); - }, - matchesSelector: function( elem, expr ) { - return matches.call( elem, expr ); - }, - attr: function( elem, name ) { - return elem.getAttribute( name ); - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/selector-sizzle.js b/platforms/android/assets/www/lib/jquery/src/selector-sizzle.js deleted file mode 100644 index 7d3926b1..00000000 --- a/platforms/android/assets/www/lib/jquery/src/selector-sizzle.js +++ /dev/null @@ -1,14 +0,0 @@ -define([ - "./core", - "sizzle" -], function( jQuery, Sizzle ) { - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/selector.js b/platforms/android/assets/www/lib/jquery/src/selector.js deleted file mode 100644 index 01e9733b..00000000 --- a/platforms/android/assets/www/lib/jquery/src/selector.js +++ /dev/null @@ -1 +0,0 @@ -define([ "./selector-sizzle" ]); diff --git a/platforms/android/assets/www/lib/jquery/src/serialize.js b/platforms/android/assets/www/lib/jquery/src/serialize.js deleted file mode 100644 index 0d6dfec6..00000000 --- a/platforms/android/assets/www/lib/jquery/src/serialize.js +++ /dev/null @@ -1,111 +0,0 @@ -define([ - "./core", - "./manipulation/var/rcheckableType", - "./core/init", - "./traversing", // filter - "./attributes/prop" -], function( jQuery, rcheckableType ) { - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/traversing.js b/platforms/android/assets/www/lib/jquery/src/traversing.js deleted file mode 100644 index 943d16cb..00000000 --- a/platforms/android/assets/www/lib/jquery/src/traversing.js +++ /dev/null @@ -1,200 +0,0 @@ -define([ - "./core", - "./var/indexOf", - "./traversing/var/rneedsContext", - "./core/init", - "./traversing/findFilter", - "./selector" -], function( jQuery, indexOf, rneedsContext ) { - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/traversing/findFilter.js b/platforms/android/assets/www/lib/jquery/src/traversing/findFilter.js deleted file mode 100644 index dd70a73f..00000000 --- a/platforms/android/assets/www/lib/jquery/src/traversing/findFilter.js +++ /dev/null @@ -1,100 +0,0 @@ -define([ - "../core", - "../var/indexOf", - "./var/rneedsContext", - "../selector" -], function( jQuery, indexOf, rneedsContext ) { - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - -}); diff --git a/platforms/android/assets/www/lib/jquery/src/traversing/var/rneedsContext.js b/platforms/android/assets/www/lib/jquery/src/traversing/var/rneedsContext.js deleted file mode 100644 index 3d6ae403..00000000 --- a/platforms/android/assets/www/lib/jquery/src/traversing/var/rneedsContext.js +++ /dev/null @@ -1,6 +0,0 @@ -define([ - "../../core", - "../../selector" -], function( jQuery ) { - return jQuery.expr.match.needsContext; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/arr.js b/platforms/android/assets/www/lib/jquery/src/var/arr.js deleted file mode 100644 index b18fc9ce..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/arr.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return []; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/class2type.js b/platforms/android/assets/www/lib/jquery/src/var/class2type.js deleted file mode 100644 index e674c3ba..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/class2type.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // [[Class]] -> type pairs - return {}; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/concat.js b/platforms/android/assets/www/lib/jquery/src/var/concat.js deleted file mode 100644 index 7dcf77e3..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.concat; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/hasOwn.js b/platforms/android/assets/www/lib/jquery/src/var/hasOwn.js deleted file mode 100644 index 32c002af..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/hasOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.hasOwnProperty; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/indexOf.js b/platforms/android/assets/www/lib/jquery/src/var/indexOf.js deleted file mode 100644 index cdbe3c74..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.indexOf; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/pnum.js b/platforms/android/assets/www/lib/jquery/src/var/pnum.js deleted file mode 100644 index 40704472..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/pnum.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/push.js b/platforms/android/assets/www/lib/jquery/src/var/push.js deleted file mode 100644 index ad6f0a17..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/push.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.push; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/rnotwhite.js b/platforms/android/assets/www/lib/jquery/src/var/rnotwhite.js deleted file mode 100644 index 7c69bec5..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/rnotwhite.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\S+/g); -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/slice.js b/platforms/android/assets/www/lib/jquery/src/var/slice.js deleted file mode 100644 index 614d46ca..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.slice; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/strundefined.js b/platforms/android/assets/www/lib/jquery/src/var/strundefined.js deleted file mode 100644 index 04e16b03..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/strundefined.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return typeof undefined; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/support.js b/platforms/android/assets/www/lib/jquery/src/var/support.js deleted file mode 100644 index b25dbc74..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/support.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // All support tests are defined in their respective modules. - return {}; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/var/toString.js b/platforms/android/assets/www/lib/jquery/src/var/toString.js deleted file mode 100644 index ca92d222..00000000 --- a/platforms/android/assets/www/lib/jquery/src/var/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.toString; -}); diff --git a/platforms/android/assets/www/lib/jquery/src/wrap.js b/platforms/android/assets/www/lib/jquery/src/wrap.js deleted file mode 100644 index b6dce72e..00000000 --- a/platforms/android/assets/www/lib/jquery/src/wrap.js +++ /dev/null @@ -1,78 +0,0 @@ -define([ - "./core", - "./core/init", - "./traversing" // parent, contents -], function( jQuery ) { - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapAll( html.call(this, i) ); - }); - } - - if ( this[ 0 ] ) { - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); - -return jQuery; -}); diff --git a/platforms/android/assets/www/lib/json3/.bower.json b/platforms/android/assets/www/lib/json3/.bower.json deleted file mode 100644 index a53d8384..00000000 --- a/platforms/android/assets/www/lib/json3/.bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT", - "_release": "3.3.2", - "_resolution": { - "type": "version", - "tag": "v3.3.2", - "commit": "dec5c2a5dc723ff867caa32a81ed93ab814f7426" - }, - "_source": "git://github.com/bestiejs/json3.git", - "_target": "~3.3.1", - "_originalSource": "json3" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/json3/CHANGELOG.md b/platforms/android/assets/www/lib/json3/CHANGELOG.md deleted file mode 100644 index e93fa399..00000000 --- a/platforms/android/assets/www/lib/json3/CHANGELOG.md +++ /dev/null @@ -1,44 +0,0 @@ -# JSON3 Changelog - -## 3.1.0 - - * Switched to `bestiejs` organisation - * Added support for a list of properties as the `filter` argument for `JSON.stringify` - * Fixed Firefox 4 and 4.0.1 allowing non-standard extensions to `JSON.parse` - -## 3.0.0 - - * Renamed `JSON3` to `JSON` - * Removed `JSON3.Version` - * Added minified version of library - * Created a [GitHub Project Page](http://bestiejs.github.io/json3) - * Preserved alphanumeric order when iterating over shadowed properties on objects - -## 0.8.5 - - * Avoided relying on native functions `Math.abs`, and `isFinite`, and native constructors `String`, `Number`, `Object`, and `Array` - * Fixed AMD export logic - -## 0.8.0 - - * Renamed `Prim` to `JSON3` - * Added `JSON3.Version` - * Added support for AMD lodaers as the `"json"` module - * Added feature tests for native `JSON` implementations - * Added string coercion for the `source` argument in `JSON3.parse` - * Fixed the date serialization routine in `JSON3.stringify` - -## 0.5.0 - - * Fixed `Prim.stringify`'s handling of the `width` argument - * Added Microsoft's ES5 Conformance Tests to the test suite - -## 0.2.0 - - * Added `Prim.stringify` for serializing values - * Renamed `Prim.Escapes` to `Prim.Unescapes` - * Disallowed unescaped tab characters in strings passed to `Prim.parse` - -## 0.1.0 - - * Initial release of Prim diff --git a/platforms/android/assets/www/lib/json3/CONTRIBUTING.md b/platforms/android/assets/www/lib/json3/CONTRIBUTING.md deleted file mode 100644 index b0cb8579..00000000 --- a/platforms/android/assets/www/lib/json3/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# Contributing to JSON3 - -If you'd like to contribute to JSON3, please review our [contributing guidelines](http://bestiejs.github.io/json3/#section_5). Thanks! diff --git a/platforms/android/assets/www/lib/json3/LICENSE b/platforms/android/assets/www/lib/json3/LICENSE deleted file mode 100644 index c0de33a8..00000000 --- a/platforms/android/assets/www/lib/json3/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012-2014 Kit Cambridge. -http://kitcambridge.be/ - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/platforms/android/assets/www/lib/json3/README.md b/platforms/android/assets/www/lib/json3/README.md deleted file mode 100644 index 9aa7935d..00000000 --- a/platforms/android/assets/www/lib/json3/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# JSON 3 # - -![JSON 3 Logo](http://bestiejs.github.io/json3/page/logo.png) - -[![Build Status](https://secure.travis-ci.org/bestiejs/json3.png?branch=gh-pages)](http://travis-ci.org/bestiejs/json3) - -**JSON 3** is a modern JSON implementation compatible with a variety of JavaScript platforms, including Internet Explorer 6, Opera 7, Safari 2, and Netscape 6. The current version is **3.3.2**. - -- [Development Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.js) *(43 KB; uncompressed with comments)* -- [Production Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js) *(3.5 KB; compressed and `gzip`-ped)* - -Special thanks to [cdnjs](http://cdnjs.com/libraries/json3/) and [jsDelivr](http://www.jsdelivr.com/#!json3) for hosting CDN copies of JSON 3. - -[JSON](http://json.org/) is a language-independent data interchange format based on a loose subset of the JavaScript grammar. Originally popularized by [Douglas Crockford](http://www.crockford.com/), the format was standardized in the [fifth edition](http://es5.github.com/) of the ECMAScript specification. The 5.1 edition, ratified in June 2011, incorporates several modifications to the grammar pertaining to the serialization of dates. - -JSON 3 exposes two functions: `stringify()` for [serializing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify) a JavaScript value to JSON, and `parse()` for [producing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/parse) a JavaScript value from a JSON source string. It is a **drop-in replacement** for [JSON 2](http://json.org/js). The functions behave exactly as described in the ECMAScript spec, **except** for the date serialization discrepancy noted below. - -The JSON 3 parser does **not** use `eval` or regular expressions. This provides security and performance benefits in obsolete and mobile environments, where the margin is particularly significant. The complete [benchmark suite](http://jsperf.com/json3) is available on [jsPerf](http://jsperf.com/). - -The project is [hosted on GitHub](http://git.io/json3), along with the [unit tests](http://bestiejs.github.io/json3/test/test_browser.html). It is part of the [BestieJS](https://github.com/bestiejs) family, a collection of best-in-class JavaScript libraries that promote cross-platform support, specification precedents, unit testing, and plenty of documentation. - -# Changes from JSON 2 # - -JSON 3... - -* Correctly serializes primitive wrapper objects. -* Throws a `TypeError` when serializing cyclic structures (JSON 2 recurses until the call stack overflows). -* Utilizes **feature tests** to detect broken or incomplete *native* JSON implementations (JSON 2 only checks for the presence of the native functions). The tests are only executed once at runtime, so there is no additional performance cost when parsing or serializing values. - -**As of v3.2.3**, JSON 3 is compatible with [Prototype](http://prototypejs.org) 1.6.1 and older. - -In contrast to JSON 2, JSON 3 **does not**... - -* Add `toJSON()` methods to the `Boolean`, `Number`, and `String` prototypes. These are not part of any standard, and are made redundant by the design of the `stringify()` implementation. -* Add `toJSON()` or `toISOString()` methods to `Date.prototype`. See the note about date serialization below. - -## Date Serialization - -**JSON 3 deviates from the specification in one important way**: it does not define `Date#toISOString()` or `Date#toJSON()`. This preserves CommonJS compatibility and avoids polluting native prototypes. Instead, date serialization is performed internally by the `stringify()` implementation: if a date object does not define a custom `toJSON()` method, it is serialized as a [simplified ISO 8601 date-time string](http://es5.github.com/#x15.9.1.15). - -**Several native `Date#toJSON()` implementations produce date time strings that do *not* conform to the grammar outlined in the spec**. For instance, all versions of Safari 4, as well as JSON 2, fail to serialize extended years correctly. Furthermore, JSON 2 and older implementations omit the milliseconds from the date-time string (optional in ES 5, but required in 5.1). Finally, in all versions of Safari 4 and 5, serializing an invalid date will produce the string `"Invalid Date"`, rather than `null`. Because these environments exhibit other serialization bugs, however, JSON 3 will override the native `stringify()` implementation. - -Portions of the date serialization code are adapted from the [`date-shim`](https://github.com/Yaffle/date-shim) project. - -# Usage # - -## Web Browsers - - <script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js"></script> - <script> - JSON.stringify({"Hello": 123}); - // => '{"Hello":123}' - JSON.parse("[[1, 2, 3], 1, 2, 3, 4]", function (key, value) { - if (typeof value == "number") { - value = value % 2 ? "Odd" : "Even"; - } - return value; - }); - // => [["Odd", "Even", "Odd"], "Odd", "Even", "Odd", "Even"] - </script> - -**When used in a web browser**, JSON 3 exposes an additional `JSON3` object containing the `noConflict()` and `runInContext()` functions, as well as aliases to the `stringify()` and `parse()` functions. - -### `noConflict` and `runInContext` - -* `JSON3.noConflict()` restores the original value of the global `JSON` object and returns a reference to the `JSON3` object. -* `JSON3.runInContext([context, exports])` initializes JSON 3 using the given `context` object (e.g., `window`, `global`, etc.), or the global object if omitted. If an `exports` object is specified, the `stringify()`, `parse()`, and `runInContext()` functions will be attached to it instead of a new object. - -### Asynchronous Module Loaders - -JSON 3 is defined as an [anonymous module](https://github.com/amdjs/amdjs-api/wiki/AMD#define-function-) for compatibility with [RequireJS](http://requirejs.org/), [`curl.js`](https://github.com/cujojs/curl), and other asynchronous module loaders. - - <script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.js"></script> - <script> - require({ - "paths": { - "json3": "./path/to/json3" - } - }, ["json3"], function (JSON) { - JSON.parse("[1, 2, 3]"); - // => [1, 2, 3] - }); - </script> - -To avoid issues with third-party scripts, **JSON 3 is exported to the global scope even when used with a module loader**. If this behavior is undesired, `JSON3.noConflict()` can be used to restore the global `JSON` object to its original value. - -## CommonJS Environments - - var JSON3 = require("./path/to/json3"); - JSON3.parse("[1, 2, 3]"); - // => [1, 2, 3] - -## JavaScript Engines - - load("path/to/json3.js"); - JSON.stringify({"Hello": 123, "Good-bye": 456}, ["Hello"], "\t"); - // => '{\n\t"Hello": 123\n}' - -# Compatibility # - -JSON 3 has been **tested** with the following web browsers, CommonJS environments, and JavaScript engines. - -## Web Browsers - -- Windows [Internet Explorer](http://www.microsoft.com/windows/internet-explorer), version 6.0 and higher -- Mozilla [Firefox](http://www.mozilla.com/firefox), version 1.0 and higher -- Apple [Safari](http://www.apple.com/safari), version 2.0 and higher -- [Opera](http://www.opera.com) 7.02 and higher -- [Mozilla](http://sillydog.org/narchive/gecko.php) 1.0, [Netscape](http://sillydog.org/narchive/) 6.2.3, and [SeaMonkey](http://www.seamonkey-project.org/) 1.0 and higher - -## CommonJS Environments - -- [Node](http://nodejs.org/) 0.2.6 and higher -- [RingoJS](http://ringojs.org/) 0.4 and higher -- [Narwhal](http://narwhaljs.org/) 0.3.2 and higher - -## JavaScript Engines - -- Mozilla [Rhino](http://www.mozilla.org/rhino) 1.5R5 and higher -- WebKit [JSC](https://trac.webkit.org/wiki/JSC) -- Google [V8](http://code.google.com/p/v8) - -## Known Incompatibilities - -* Attempting to serialize the `arguments` object may produce inconsistent results across environments due to specification version differences. As a workaround, please convert the `arguments` object to an array first: `JSON.stringify([].slice.call(arguments, 0))`. - -## Required Native Methods - -JSON 3 assumes that the following methods exist and function as described in the ECMAScript specification: - -- The `Number`, `String`, `Array`, `Object`, `Date`, `SyntaxError`, and `TypeError` constructors. -- `String.fromCharCode` -- `Object#toString` -- `Function#call` -- `Math.floor` -- `Number#toString` -- `Date#valueOf` -- `String.prototype`: `indexOf`, `charCodeAt`, `charAt`, `slice`. -- `Array.prototype`: `push`, `pop`, `join`. - -# Contribute # - -Check out a working copy of the JSON 3 source code with [Git](http://git-scm.com/): - - $ git clone git://github.com/bestiejs/json3.git - $ cd json3 - -If you'd like to contribute a feature or bug fix, you can [fork](http://help.github.com/fork-a-repo/) JSON 3, commit your changes, and [send a pull request](http://help.github.com/send-pull-requests/). Please make sure to update the unit tests in the `test` directory as well. - -Alternatively, you can use the [GitHub issue tracker](https://github.com/bestiejs/json3/issues) to submit bug reports, feature requests, and questions, or send tweets to [@kitcambridge](http://twitter.com/kitcambridge). - -JSON 3 is released under the [MIT License](http://kit.mit-license.org/). diff --git a/platforms/android/assets/www/lib/json3/bower.json b/platforms/android/assets/www/lib/json3/bower.json deleted file mode 100644 index 7215dada..00000000 --- a/platforms/android/assets/www/lib/json3/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT" -} diff --git a/platforms/android/assets/www/lib/json3/lib/json3.js b/platforms/android/assets/www/lib/json3/lib/json3.js deleted file mode 100644 index 4817c9e7..00000000 --- a/platforms/android/assets/www/lib/json3/lib/json3.js +++ /dev/null @@ -1,902 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = typeof define === "function" && define.amd; - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root["Object"]()); - exports || (exports = root["Object"]()); - - // Native constructor aliases. - var Number = context["Number"] || root["Number"], - String = context["String"] || root["String"], - Object = context["Object"] || root["Object"], - Date = context["Date"] || root["Date"], - SyntaxError = context["SyntaxError"] || root["SyntaxError"], - TypeError = context["TypeError"] || root["TypeError"], - Math = context["Math"] || root["Math"], - nativeJSON = context["JSON"] || root["JSON"]; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty, forEach, undef; - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - try { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - // Safari < 2.0.2 stores the internal millisecond time value correctly, - // but clips the values returned by the date methods to the range of - // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - } catch (exception) {} - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] !== undef) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("json-parse"); - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - try { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undef && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undef) === undef && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undef && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undef]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undef, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - } catch (exception) { - stringifySupported = false; - } - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse; - if (typeof parse == "function") { - try { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - var parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - try { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - } catch (exception) {} - if (parseSupported) { - try { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - } catch (exception) {} - } - if (parseSupported) { - try { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - } catch (exception) {} - } - } - } - } catch (exception) { - parseSupported = false; - } - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - } - - // Internal: Determines if a property is a direct property of the given - // object. Delegates to the native `Object#hasOwnProperty` method. - if (!(isProperty = objectProto.hasOwnProperty)) { - isProperty = function (property) { - var members = {}, constructor; - if ((members.__proto__ = null, members.__proto__ = { - // The *proto* property cannot be set multiple times in recent - // versions of Firefox and SeaMonkey. - "toString": 1 - }, members).toString != getClass) { - // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but - // supports the mutable *proto* property. - isProperty = function (property) { - // Capture and break the object's prototype chain (see section 8.6.2 - // of the ES 5.1 spec). The parenthesized expression prevents an - // unsafe transformation by the Closure Compiler. - var original = this.__proto__, result = property in (this.__proto__ = null, this); - // Restore the original prototype chain. - this.__proto__ = original; - return result; - }; - } else { - // Capture a reference to the top-level `Object` constructor. - constructor = members.constructor; - // Use the `constructor` property to simulate `Object#hasOwnProperty` in - // other environments. - isProperty = function (property) { - var parent = (this.constructor || constructor).prototype; - return property in this && !(property in parent && this[property] === parent[property]); - }; - } - members = null; - return isProperty.call(this, property); - }; - } - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - forEach = function (object, callback) { - var size = 0, Properties, members, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - members = new Properties(); - for (property in members) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(members, property)) { - size++; - } - } - Properties = members = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); - }; - } else if (size == 2) { - // Safari <= 2.0.4 enumerates shadowed properties twice. - forEach = function (object, callback) { - // Create a set of iterated properties. - var members = {}, isFunction = getClass.call(object) == functionClass, property; - for (property in object) { - // Store each property name to prevent double enumeration. The - // `prototype` property of functions is not enumerated due to cross- - // environment inconsistencies. - if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forEach(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var quote = function (value) { - var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; - var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); - for (; index < length; index++) { - var charCode = value.charCodeAt(index); - // If the character is a control character, append its Unicode or - // shorthand escape sequence; otherwise, append the character as-is. - switch (charCode) { - case 8: case 9: case 10: case 12: case 13: case 34: case 92: - result += Escapes[charCode]; - break; - default: - if (charCode < 32) { - result += unicodePrefix + toPaddedString(2, charCode.toString(16)); - break; - } - result += useCharIndex ? symbols[index] : value.charAt(index); - } - } - return result + '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; - try { - // Necessary for host object support. - value = object[property]; - } catch (exception) {} - if (typeof value == "object" && value) { - className = getClass.call(value); - if (className == dateClass && !isProperty.call(value, "toJSON")) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - if (getDay) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - } else { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - } - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - } else { - value = null; - } - } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { - // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the - // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 - // ignores all `toJSON` methods on these objects unless they are - // defined directly on an instance. - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - if (value === null) { - return "null"; - } - className = getClass.call(value); - if (className == booleanClass) { - // Booleans are represented literally. - return "" + value; - } else if (className == numberClass) { - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - } else if (className == stringClass) { - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undef ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forEach(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undef) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - if ((className = getClass.call(filter)) == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); - } - } - if (width) { - if ((className = getClass.call(width)) == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - if (source.slice(Index, Index + 4) == "true") { - Index += 4; - return true; - } else if (source.slice(Index, Index + 5) == "false") { - Index += 5; - return false; - } else if (source.slice(Index, Index + 4) == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undef) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forEach` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(value, length, callback); - } - } else { - forEach(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports["runInContext"] = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root["JSON3"], - isRestored = false; - - var JSON3 = runInContext(root, (root["JSON3"] = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root["JSON3"] = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - define(function () { - return JSON3; - }); - } -}).call(this); diff --git a/platforms/android/assets/www/lib/json3/lib/json3.min.js b/platforms/android/assets/www/lib/json3/lib/json3.min.js deleted file mode 100644 index 5f896fa0..00000000 --- a/platforms/android/assets/www/lib/json3/lib/json3.min.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -(function(){function N(p,r){function q(a){if(q[a]!==w)return q[a];var c;if("bug-string-char-index"==a)c="a"!="a"[0];else if("json"==a)c=q("json-stringify")&&q("json-parse");else{var e;if("json-stringify"==a){c=r.stringify;var b="function"==typeof c&&s;if(b){(e=function(){return 1}).toJSON=e;try{b="0"===c(0)&&"0"===c(new t)&&'""'==c(new A)&&c(u)===w&&c(w)===w&&c()===w&&"1"===c(e)&&"[1]"==c([e])&&"[null]"==c([w])&&"null"==c(null)&&"[null,null,null]"==c([w,u,null])&&'{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'== -c({a:[e,!0,!1,null,"\x00\b\n\f\r\t"]})&&"1"===c(null,e)&&"[\n 1,\n 2\n]"==c([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==c(new C(-864E13))&&'"+275760-09-13T00:00:00.000Z"'==c(new C(864E13))&&'"-000001-01-01T00:00:00.000Z"'==c(new C(-621987552E5))&&'"1969-12-31T23:59:59.999Z"'==c(new C(-1))}catch(f){b=!1}}c=b}if("json-parse"==a){c=r.parse;if("function"==typeof c)try{if(0===c("0")&&!c(!1)){e=c('{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}');var n=5==e.a.length&&1===e.a[0];if(n){try{n=!c('"\t"')}catch(d){}if(n)try{n= -1!==c("01")}catch(g){}if(n)try{n=1!==c("1.")}catch(m){}}}}catch(X){n=!1}c=n}}return q[a]=!!c}p||(p=k.Object());r||(r=k.Object());var t=p.Number||k.Number,A=p.String||k.String,H=p.Object||k.Object,C=p.Date||k.Date,G=p.SyntaxError||k.SyntaxError,K=p.TypeError||k.TypeError,L=p.Math||k.Math,I=p.JSON||k.JSON;"object"==typeof I&&I&&(r.stringify=I.stringify,r.parse=I.parse);var H=H.prototype,u=H.toString,v,B,w,s=new C(-0xc782b5b800cec);try{s=-109252==s.getUTCFullYear()&&0===s.getUTCMonth()&&1===s.getUTCDate()&& -10==s.getUTCHours()&&37==s.getUTCMinutes()&&6==s.getUTCSeconds()&&708==s.getUTCMilliseconds()}catch(Q){}if(!q("json")){var D=q("bug-string-char-index");if(!s)var x=L.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],E=function(a,c){return M[c]+365*(a-1970)+x((a-1969+(c=+(1<c)))/4)-x((a-1901+c)/100)+x((a-1601+c)/400)};(v=H.hasOwnProperty)||(v=function(a){var c={},e;(c.__proto__=null,c.__proto__={toString:1},c).toString!=u?v=function(a){var c=this.__proto__;a=a in(this.__proto__=null,this);this.__proto__= -c;return a}:(e=c.constructor,v=function(a){var c=(this.constructor||e).prototype;return a in this&&!(a in c&&this[a]===c[a])});c=null;return v.call(this,a)});B=function(a,c){var e=0,b,f,n;(b=function(){this.valueOf=0}).prototype.valueOf=0;f=new b;for(n in f)v.call(f,n)&&e++;b=f=null;e?B=2==e?function(a,c){var e={},b="[object Function]"==u.call(a),f;for(f in a)b&&"prototype"==f||v.call(e,f)||!(e[f]=1)||!v.call(a,f)||c(f)}:function(a,c){var e="[object Function]"==u.call(a),b,f;for(b in a)e&&"prototype"== -b||!v.call(a,b)||(f="constructor"===b)||c(b);(f||v.call(a,b="constructor"))&&c(b)}:(f="valueOf toString toLocaleString propertyIsEnumerable isPrototypeOf hasOwnProperty constructor".split(" "),B=function(a,c){var e="[object Function]"==u.call(a),b,h=!e&&"function"!=typeof a.constructor&&F[typeof a.hasOwnProperty]&&a.hasOwnProperty||v;for(b in a)e&&"prototype"==b||!h.call(a,b)||c(b);for(e=f.length;b=f[--e];h.call(a,b)&&c(b));});return B(a,c)};if(!q("json-stringify")){var U={92:"\\\\",34:'\\"',8:"\\b", -12:"\\f",10:"\\n",13:"\\r",9:"\\t"},y=function(a,c){return("000000"+(c||0)).slice(-a)},R=function(a){for(var c='"',b=0,h=a.length,f=!D||10<h,n=f&&(D?a.split(""):a);b<h;b++){var d=a.charCodeAt(b);switch(d){case 8:case 9:case 10:case 12:case 13:case 34:case 92:c+=U[d];break;default:if(32>d){c+="\\u00"+y(2,d.toString(16));break}c+=f?n[b]:a.charAt(b)}}return c+'"'},O=function(a,c,b,h,f,n,d){var g,m,k,l,p,r,s,t,q;try{g=c[a]}catch(z){}if("object"==typeof g&&g)if(m=u.call(g),"[object Date]"!=m||v.call(g, -"toJSON"))"function"==typeof g.toJSON&&("[object Number]"!=m&&"[object String]"!=m&&"[object Array]"!=m||v.call(g,"toJSON"))&&(g=g.toJSON(a));else if(g>-1/0&&g<1/0){if(E){l=x(g/864E5);for(m=x(l/365.2425)+1970-1;E(m+1,0)<=l;m++);for(k=x((l-E(m,0))/30.42);E(m,k+1)<=l;k++);l=1+l-E(m,k);p=(g%864E5+864E5)%864E5;r=x(p/36E5)%24;s=x(p/6E4)%60;t=x(p/1E3)%60;p%=1E3}else m=g.getUTCFullYear(),k=g.getUTCMonth(),l=g.getUTCDate(),r=g.getUTCHours(),s=g.getUTCMinutes(),t=g.getUTCSeconds(),p=g.getUTCMilliseconds(); -g=(0>=m||1E4<=m?(0>m?"-":"+")+y(6,0>m?-m:m):y(4,m))+"-"+y(2,k+1)+"-"+y(2,l)+"T"+y(2,r)+":"+y(2,s)+":"+y(2,t)+"."+y(3,p)+"Z"}else g=null;b&&(g=b.call(c,a,g));if(null===g)return"null";m=u.call(g);if("[object Boolean]"==m)return""+g;if("[object Number]"==m)return g>-1/0&&g<1/0?""+g:"null";if("[object String]"==m)return R(""+g);if("object"==typeof g){for(a=d.length;a--;)if(d[a]===g)throw K();d.push(g);q=[];c=n;n+=f;if("[object Array]"==m){k=0;for(a=g.length;k<a;k++)m=O(k,g,b,h,f,n,d),q.push(m===w?"null": -m);a=q.length?f?"[\n"+n+q.join(",\n"+n)+"\n"+c+"]":"["+q.join(",")+"]":"[]"}else B(h||g,function(a){var c=O(a,g,b,h,f,n,d);c!==w&&q.push(R(a)+":"+(f?" ":"")+c)}),a=q.length?f?"{\n"+n+q.join(",\n"+n)+"\n"+c+"}":"{"+q.join(",")+"}":"{}";d.pop();return a}};r.stringify=function(a,c,b){var h,f,n,d;if(F[typeof c]&&c)if("[object Function]"==(d=u.call(c)))f=c;else if("[object Array]"==d){n={};for(var g=0,k=c.length,l;g<k;l=c[g++],(d=u.call(l),"[object String]"==d||"[object Number]"==d)&&(n[l]=1));}if(b)if("[object Number]"== -(d=u.call(b))){if(0<(b-=b%1))for(h="",10<b&&(b=10);h.length<b;h+=" ");}else"[object String]"==d&&(h=10>=b.length?b:b.slice(0,10));return O("",(l={},l[""]=a,l),f,n,h,"",[])}}if(!q("json-parse")){var V=A.fromCharCode,W={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},b,J,l=function(){b=J=null;throw G();},z=function(){for(var a=J,c=a.length,e,h,f,k,d;b<c;)switch(d=a.charCodeAt(b),d){case 9:case 10:case 13:case 32:b++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e= -D?a.charAt(b):a[b],b++,e;case 34:e="@";for(b++;b<c;)if(d=a.charCodeAt(b),32>d)l();else if(92==d)switch(d=a.charCodeAt(++b),d){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=W[d];b++;break;case 117:h=++b;for(f=b+4;b<f;b++)d=a.charCodeAt(b),48<=d&&57>=d||97<=d&&102>=d||65<=d&&70>=d||l();e+=V("0x"+a.slice(h,b));break;default:l()}else{if(34==d)break;d=a.charCodeAt(b);for(h=b;32<=d&&92!=d&&34!=d;)d=a.charCodeAt(++b);e+=a.slice(h,b)}if(34==a.charCodeAt(b))return b++,e;l();default:h= -b;45==d&&(k=!0,d=a.charCodeAt(++b));if(48<=d&&57>=d){for(48==d&&(d=a.charCodeAt(b+1),48<=d&&57>=d)&&l();b<c&&(d=a.charCodeAt(b),48<=d&&57>=d);b++);if(46==a.charCodeAt(b)){for(f=++b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}d=a.charCodeAt(b);if(101==d||69==d){d=a.charCodeAt(++b);43!=d&&45!=d||b++;for(f=b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}return+a.slice(h,b)}k&&l();if("true"==a.slice(b,b+4))return b+=4,!0;if("false"==a.slice(b,b+5))return b+=5,!1;if("null"==a.slice(b, -b+4))return b+=4,null;l()}return"$"},P=function(a){var c,b;"$"==a&&l();if("string"==typeof a){if("@"==(D?a.charAt(0):a[0]))return a.slice(1);if("["==a){for(c=[];;b||(b=!0)){a=z();if("]"==a)break;b&&(","==a?(a=z(),"]"==a&&l()):l());","==a&&l();c.push(P(a))}return c}if("{"==a){for(c={};;b||(b=!0)){a=z();if("}"==a)break;b&&(","==a?(a=z(),"}"==a&&l()):l());","!=a&&"string"==typeof a&&"@"==(D?a.charAt(0):a[0])&&":"==z()||l();c[a.slice(1)]=P(z())}return c}l()}return a},T=function(a,b,e){e=S(a,b,e);e=== -w?delete a[b]:a[b]=e},S=function(a,b,e){var h=a[b],f;if("object"==typeof h&&h)if("[object Array]"==u.call(h))for(f=h.length;f--;)T(h,f,e);else B(h,function(a){T(h,a,e)});return e.call(a,b,h)};r.parse=function(a,c){var e,h;b=0;J=""+a;e=P(z());"$"!=z()&&l();b=J=null;return c&&"[object Function]"==u.call(c)?S((h={},h[""]=e,h),"",c):e}}}r.runInContext=N;return r}var K=typeof define==="function"&&define.amd,F={"function":!0,object:!0},G=F[typeof exports]&&exports&&!exports.nodeType&&exports,k=F[typeof window]&& -window||this,t=G&&F[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;!t||t.global!==t&&t.window!==t&&t.self!==t||(k=t);if(G&&!K)N(k,G);else{var L=k.JSON,Q=k.JSON3,M=!1,A=N(k,k.JSON3={noConflict:function(){M||(M=!0,k.JSON=L,k.JSON3=Q,L=Q=null);return A}});k.JSON={parse:A.parse,stringify:A.stringify}}K&&define(function(){return A})}).call(this); diff --git a/platforms/android/assets/www/lib/lodash/.bower.json b/platforms/android/assets/www/lib/lodash/.bower.json deleted file mode 100644 index f8119955..00000000 --- a/platforms/android/assets/www/lib/lodash/.bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lodash", - "version": "2.4.1", - "main": "dist/lodash.compat.js", - "ignore": [ - ".*", - "*.custom.*", - "*.template.*", - "*.map", - "*.md", - "/*.min.*", - "/lodash.js", - "index.js", - "component.json", - "package.json", - "doc", - "modularize", - "node_modules", - "perf", - "test", - "vendor" - ], - "homepage": "https://github.com/lodash/lodash", - "_release": "2.4.1", - "_resolution": { - "type": "version", - "tag": "2.4.1", - "commit": "c7aa842eded639d6d90a5714d3195a8802c86687" - }, - "_source": "git://github.com/lodash/lodash.git", - "_target": "~2.4.1", - "_originalSource": "lodash" -} \ No newline at end of file diff --git a/platforms/android/assets/www/lib/lodash/LICENSE.txt b/platforms/android/assets/www/lib/lodash/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/platforms/android/assets/www/lib/lodash/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> -Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/platforms/android/assets/www/lib/lodash/bower.json b/platforms/android/assets/www/lib/lodash/bower.json deleted file mode 100644 index a6f139d7..00000000 --- a/platforms/android/assets/www/lib/lodash/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "lodash", - "version": "2.4.1", - "main": "dist/lodash.compat.js", - "ignore": [ - ".*", - "*.custom.*", - "*.template.*", - "*.map", - "*.md", - "/*.min.*", - "/lodash.js", - "index.js", - "component.json", - "package.json", - "doc", - "modularize", - "node_modules", - "perf", - "test", - "vendor" - ] -} diff --git a/platforms/android/assets/www/lib/moment/moment.js b/platforms/android/assets/www/lib/moment/moment.js deleted file mode 100644 index c003e95f..00000000 --- a/platforms/android/assets/www/lib/moment/moment.js +++ /dev/null @@ -1,3606 +0,0 @@ -//! moment.js -//! version : 2.11.1 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; - - var hookCallback; - - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - m._isValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } - } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } - - return m; - } - - function isUndefined(input) { - return input === void 0; - } - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - var momentProperties = utils_hooks__hooks.momentProperties = []; - - function copyConfig(to, from) { - var i, prop, val; - - if (!isUndefined(from._isAMomentObject)) { - to._isAMomentObject = from._isAMomentObject; - } - if (!isUndefined(from._i)) { - to._i = from._i; - } - if (!isUndefined(from._f)) { - to._f = from._f; - } - if (!isUndefined(from._l)) { - to._l = from._l; - } - if (!isUndefined(from._strict)) { - to._strict = from._strict; - } - if (!isUndefined(from._tzm)) { - to._tzm = from._tzm; - } - if (!isUndefined(from._isUTC)) { - to._isUTC = from._isUTC; - } - if (!isUndefined(from._offset)) { - to._offset = from._offset; - } - if (!isUndefined(from._pf)) { - to._pf = getParsingFlags(from); - } - if (!isUndefined(from._locale)) { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (!isUndefined(val)) { - to[prop] = val; - } - } - } - - return to; - } - - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; - } - } - - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } - - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function Locale() { - } - - // internal storage for locale config files - var locales = {}; - var globalLocale; - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (isUndefined(values)) { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } - - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } - } - - return globalLocale._abbr; - } - - function defineLocale (name, values) { - if (values !== null) { - values.abbr = name; - locales[name] = locales[name] || new Locale(); - locales[name].set(values); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - } - - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return globalLocale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - } - - var aliases = {}; - - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } - - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; - } - - function get_set__get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; - } - - function get_set__set (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - // MOMENTS - - function getSet (units, value) { - var unit; - if (typeof units === 'object') { - for (unit in units) { - this.set(unit, units[unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; - } - - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } - - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var formatTokenFunctions = {}; - - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } - } - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - - // any word (or two) characters or numbers including two/three word month in arabic. - // includes scottish gaelic two word and hyphenated months - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - - - var regexes = {}; - - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } - - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } - - return regexes[token](config._strict, config._locale); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - })); - } - - function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - var tokens = {}; - - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } - - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } - - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } - - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - // FORMATTING - - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); - - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); - - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); - - // ALIASES - - addUnitAlias('month', 'M'); - - // PARSING - - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', function (isStrict, locale) { - return locale.monthsShortRegex(isStrict); - }); - addRegexToken('MMMM', function (isStrict, locale) { - return locale.monthsRegex(isStrict); - }); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); - - // LOCALES - - var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m, format) { - return isArray(this._months) ? this._months[m.month()] : - this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m, format) { - return isArray(this._monthsShort) ? this._monthsShort[m.month()] : - this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - } - - // MOMENTS - - function setMonth (mom, value) { - var dayOfMonth; - - if (!mom.isValid()) { - // No op - return mom; - } - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } - } - - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } - - var defaultMonthsShortRegex = matchWord; - function monthsShortRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsShortStrictRegex; - } else { - return this._monthsShortRegex; - } - } else { - return this._monthsShortStrictRegex && isStrict ? - this._monthsShortStrictRegex : this._monthsShortRegex; - } - } - - var defaultMonthsRegex = matchWord; - function monthsRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsStrictRegex; - } else { - return this._monthsRegex; - } - } else { - return this._monthsStrictRegex && isStrict ? - this._monthsStrictRegex : this._monthsRegex; - } - } - - function computeMonthsParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var shortPieces = [], longPieces = [], mixedPieces = [], - i, mom; - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); - } - // Sorting makes sure if one month (or abbr) is a prefix of another it - // will match the longer piece. - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._monthsShortRegex = this._monthsRegex; - this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')$', 'i'); - this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')$', 'i'); - } - - function checkOverflow (m) { - var overflow; - var a = m._a; - - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - if (getParsingFlags(m)._overflowWeeks && overflow === -1) { - overflow = WEEK; - } - if (getParsingFlags(m)._overflowWeekday && overflow === -1) { - overflow = WEEKDAY; - } - - getParsingFlags(m).overflow = overflow; - } - - return m; - } - - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (firstTime) { - warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], - ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], - ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], - ['GGGG-[W]WW', /\d{4}-W\d\d/, false], - ['YYYY-DDD', /\d{4}-\d{3}/], - ['YYYY-MM', /\d{4}-\d\d/, false], - ['YYYYYYMMDD', /[+-]\d{10}/], - ['YYYYMMDD', /\d{8}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], - ['HH:mm:ss', /\d\d:\d\d:\d\d/], - ['HH:mm', /\d\d:\d\d/], - ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], - ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], - ['HHmmss', /\d\d\d\d\d\d/], - ['HHmm', /\d\d\d\d/], - ['HH', /\d\d/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), - allowTime, dateFormat, timeFormat, tzFormat; - - if (match) { - getParsingFlags(config).iso = true; - - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(match[1])) { - dateFormat = isoDates[i][0]; - allowTime = isoDates[i][2] !== false; - break; - } - } - if (dateFormat == null) { - config._isValid = false; - return; - } - if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(match[3])) { - // match[2] should be 'T' or space - timeFormat = (match[2] || ' ') + isoTimes[i][0]; - break; - } - } - if (timeFormat == null) { - config._isValid = false; - return; - } - } - if (!allowTime && timeFormat != null) { - config._isValid = false; - return; - } - if (match[4]) { - if (tzRegex.exec(match[4])) { - tzFormat = 'Z'; - } else { - config._isValid = false; - return; - } - } - config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); - - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } - - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } - - utils_hooks__hooks.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { - date.setFullYear(y); - } - return date; - } - - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - - //the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { - date.setUTCFullYear(y); - } - return date; - } - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; - }); - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // HOOKS - - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', false); - - function getIsLeapYear () { - return isLeapYear(this.year()); - } - - // start-of-first-week - start-of-year - function firstWeekOffset(year, dow, doy) { - var // first-week day -- which january is always in the first week (4 for iso, 1 for other) - fwd = 7 + dow - doy, - // first-week day local weekday -- which local weekday is fwd - fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; - - return -fwdlw + fwd - 1; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, dow, doy) { - var localWeekday = (7 + weekday - dow) % 7, - weekOffset = firstWeekOffset(year, dow, doy), - dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, - resYear, resDayOfYear; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } - - return { - year: resYear, - dayOfYear: resDayOfYear - }; - } - - function weekOfYear(mom, dow, doy) { - var weekOffset = firstWeekOffset(mom.year(), dow, doy), - week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, - resWeek, resYear; - - if (week < 1) { - resYear = mom.year() - 1; - resWeek = week + weeksInYear(resYear, dow, doy); - } else if (week > weeksInYear(mom.year(), dow, doy)) { - resWeek = week - weeksInYear(mom.year(), dow, doy); - resYear = mom.year() + 1; - } else { - resYear = mom.year(); - resWeek = week; - } - - return { - week: resWeek, - year: resYear - }; - } - - function weeksInYear(year, dow, doy) { - var weekOffset = firstWeekOffset(year, dow, doy), - weekOffsetNext = firstWeekOffset(year + 1, dow, doy); - return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; - } - - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; - } - - function currentDateArray(config) { - // hooks is actually the exported moment object - var nowValue = new Date(utils_hooks__hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; - } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; - } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } - } else { - // default to begining of week - weekday = dow; - } - } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - } - - // constant that refers to the ISO standard - utils_hooks__hooks.ISO_8601 = function () {}; - - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } - - config._a = []; - getParsingFlags(config).empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && - config._a[HOUR] <= 12 && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } - - - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; - - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; - } else { - // this is not supposed to happen - return hour; - } - } - - // date from string and array of format strings - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; - - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - - getParsingFlags(tempConfig).score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { - return obj && parseInt(obj, 10); - }); - - configFromArray(config); - } - - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); - - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; - } else { - configFromInput(config); - } - - if (!valid__isValid(config)) { - config._d = null; - } - - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(utils_hooks__hooks.now()); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } - } - - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } - - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } - - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other < this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other > this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - } - - function max () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - } - - var now = function () { - return Date.now ? Date.now() : +(new Date()); - }; - - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = locale_locales__getLocale(); - - this._bubble(); - } - - function isDuration (obj) { - return obj instanceof Duration; - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } - - offset('Z', ':'); - offset('ZZ', ''); - - // PARSING - - addRegexToken('Z', matchShortOffset); - addRegexToken('ZZ', matchShortOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(matchShortOffset, input); - }); - - // HELPERS - - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - - function offsetFromString(matcher, string) { - var matches = ((string || '').match(matcher) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? minutes : -minutes; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } - - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } - - // HOOKS - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; - - // MOMENTS - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (!this.isValid()) { - return input != null ? this : NaN; - } - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(matchShortOffset, input); - } else if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } - - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - - this.utcOffset(input, keepLocalTime); - - return this; - } else { - return -this.utcOffset(); - } - } - - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } - - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(matchOffset, this._i)); - } - return this; - } - - function hasAlignedHourOffset (input) { - if (!this.isValid()) { - return false; - } - input = input ? local__createLocal(input).utcOffset() : 0; - - return (this.utcOffset() - input) % 60 === 0; - } - - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (!isUndefined(this._isDSTShifted)) { - return this._isDSTShifted; - } - - var c = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } - - return this._isDSTShifted; - } - - function isLocal () { - return this.isValid() ? !this._isUTC : false; - } - - function isUtcOffset () { - return this.isValid() ? this._isUTC : false; - } - - function isUtc () { - return this.isValid() ? this._isUTC && this._offset === 0 : false; - } - - // ASP.NET json date format regex - var aspNetRegex = /(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - var isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; - - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; - - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - d : parseIso(match[4], sign), - h : parseIso(match[5], sign), - m : parseIso(match[6], sign), - s : parseIso(match[7], sign), - w : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - } - - create__createDuration.fn = Duration.prototype; - - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - if (!(base.isValid() && other.isValid())) { - return {milliseconds: 0, months: 0}; - } - - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } - - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - - if (!mom.isValid()) { - // No op - return; - } - - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } - - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); - - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - - var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]); - - return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } - - function isAfter (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return +this > +localInput; - } else { - return +localInput < +this.clone().startOf(units); - } - } - - function isBefore (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return +this < +localInput; - } else { - return +this.clone().endOf(units) < +localInput; - } - } - - function isBetween (from, to, units) { - return this.isAfter(from, units) && this.isBefore(to, units); - } - - function isSame (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input), - inputMs; - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - return +this === +localInput; - } else { - inputMs = +localInput; - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - } - - function isSameOrAfter (input, units) { - return this.isSame(input, units) || this.isAfter(input,units); - } - - function isSameOrBefore (input, units) { - return this.isSame(input, units) || this.isBefore(input,units); - } - - function diff (input, units, asFloat) { - var that, - zoneDelta, - delta, output; - - if (!this.isValid()) { - return NaN; - } - - that = cloneWithOffset(input, this); - - if (!that.isValid()) { - return NaN; - } - - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } - - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } - - return -(wholeMonthDiff + adjust); - } - - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } - - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if (isFunction(Date.prototype.toISOString)) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } - - function format (inputString) { - var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); - return this.localeData().postformat(output); - } - - function from (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } - - function to (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - function locale (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - } - - var lang = deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ); - - function localeData () { - return this._locale; - } - - function startOf (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } - - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } - - function to_type__valueOf () { - return +this._d - ((this._offset || 0) * 60000); - } - - function unix () { - return Math.floor(+this / 1000); - } - - function toDate () { - return this._offset ? new Date(+this) : this._d; - } - - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } - - function toObject () { - var m = this; - return { - years: m.year(), - months: m.month(), - date: m.date(), - hours: m.hours(), - minutes: m.minutes(), - seconds: m.seconds(), - milliseconds: m.milliseconds() - }; - } - - function toJSON () { - // JSON.stringify(new Date(NaN)) === 'null' - return this.isValid() ? this.toISOString() : 'null'; - } - - function moment_valid__isValid () { - return valid__isValid(this); - } - - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } - - function invalidAt () { - return getParsingFlags(this).overflow; - } - - function creationData() { - return { - input: this._i, - format: this._f, - locale: this._locale, - isUTC: this._isUTC, - strict: this._strict - }; - } - - // FORMATTING - - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); - - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); - - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } - - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - - // ALIASES - - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PARSING - - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); - - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // MOMENTS - - function getSetWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, - this.week(), - this.weekday(), - this.localeData()._week.dow, - this.localeData()._week.doy); - } - - function getSetISOWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, this.isoWeek(), this.isoWeekday(), 1, 4); - } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } - - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } - - function getSetWeekYearHelper(input, week, weekday, dow, doy) { - var weeksTarget; - if (input == null) { - return weekOfYear(this, dow, doy).year; - } else { - weeksTarget = weeksInYear(input, dow, doy); - if (week > weeksTarget) { - week = weeksTarget; - } - return setWeekAll.call(this, input, week, weekday, dow, doy); - } - } - - function setWeekAll(weekYear, week, weekday, dow, doy) { - var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), - date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); - - // console.log("got", weekYear, week, weekday, "set", date.toISOString()); - this.year(date.getUTCFullYear()); - this.month(date.getUTCMonth()); - this.date(date.getUTCDate()); - return this; - } - - // FORMATTING - - addFormatToken('Q', 0, 'Qo', 'quarter'); - - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PARSING - - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); - - // MOMENTS - - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } - - // FORMATTING - - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PARSING - - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); - - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); - - // HELPERS - - // LOCALES - - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } - - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; - - function localeFirstDayOfWeek () { - return this._week.dow; - } - - function localeFirstDayOfYear () { - return this._week.doy; - } - - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - // FORMATTING - - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PARSING - - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); - - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); - - // MOMENTS - - var getSetDayOfMonth = makeGetSet('Date', true); - - // FORMATTING - - addFormatToken('d', 0, 'do', 'day'); - - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); - - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); - - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); - - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PARSING - - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', matchWord); - addRegexToken('ddd', matchWord); - addRegexToken('dddd', matchWord); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { - var weekday = config._locale.weekdaysParse(input, token, config._strict); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); - - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); - - // HELPERS - - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } - - if (!isNaN(input)) { - return parseInt(input, 10); - } - - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } - - return null; - } - - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m, format) { - return isArray(this._weekdays) ? this._weekdays[m.day()] : - this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; - } - - function localeWeekdaysParse (weekdayName, format, strict) { - var i, mom, regex; - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._minWeekdaysParse = []; - this._shortWeekdaysParse = []; - this._fullWeekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - - mom = local__createLocal([2000, 1]).day(i); - if (strict && !this._fullWeekdaysParse[i]) { - this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); - this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); - this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); - } - if (!this._weekdaysParse[i]) { - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } - - // MOMENTS - - function getSetDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - } - - function getSetLocaleDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - - function getSetISODayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } - - // FORMATTING - - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PARSING - - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); - - // HELPERS - - // MOMENTS - - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } - - // FORMATTING - - function hFormat() { - return this.hours() % 12 || 12; - } - - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, hFormat); - - addFormatToken('hmm', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); - }); - - addFormatToken('hmmss', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - addFormatToken('Hmm', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2); - }); - - addFormatToken('Hmmss', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } - - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } - - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addRegexToken('hmm', match3to4); - addRegexToken('hmmss', match5to6); - addRegexToken('Hmm', match3to4); - addRegexToken('Hmmss', match5to6); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('Hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - }); - addParseToken('Hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - }); - - // LOCALES - - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); - - // FORMATTING - - addFormatToken('m', ['mm', 2], 0, 'minute'); - - // ALIASES - - addUnitAlias('minute', 'm'); - - // PARSING - - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); - - // MOMENTS - - var getSetMinute = makeGetSet('Minutes', false); - - // FORMATTING - - addFormatToken('s', ['ss', 2], 0, 'second'); - - // ALIASES - - addUnitAlias('second', 's'); - - // PARSING - - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); - - // MOMENTS - - var getSetSecond = makeGetSet('Seconds', false); - - // FORMATTING - - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); - - - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PARSING - - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); - - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } - - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } - - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS - - var getSetMillisecond = makeGetSet('Milliseconds', false); - - // FORMATTING - - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); - - // MOMENTS - - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isSameOrAfter = isSameOrAfter; - momentPrototype__proto.isSameOrBefore = isSameOrBefore; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = toJSON; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - momentPrototype__proto.creationData = creationData; - - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; - - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; - - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; - - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; - - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; - - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); - - var momentPrototype = momentPrototype__proto; - - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } - - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } - - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return isFunction(output) ? output.call(mom, now) : output; - } - - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; - - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; - - if (format || !formatUpper) { - return format; - } - - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; - - function ordinal (number) { - return this._ordinal.replace('%d', number); - } - - function preParsePostFormat (string) { - return string; - } - - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (isFunction(output)) ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return isFunction(format) ? format(output) : format.replace(/%s/i, output); - } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (isFunction(prop)) { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - - var prototype__proto = Locale.prototype; - - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; - - // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - prototype__proto._monthsRegex = defaultMonthsRegex; - prototype__proto.monthsRegex = monthsRegex; - prototype__proto._monthsShortRegex = defaultMonthsShortRegex; - prototype__proto.monthsShortRegex = monthsShortRegex; - - // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } - - function list (format, index, field, count, setter) { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - - if (index != null) { - return lists__get(format, index, field, setter); - } - - var i; - var out = []; - for (i = 0; i < count; i++) { - out[i] = lists__get(format, i, field, setter); - } - return out; - } - - function lists__listMonths (format, index) { - return list(format, index, 'months', 12, 'month'); - } - - function lists__listMonthsShort (format, index) { - return list(format, index, 'monthsShort', 12, 'month'); - } - - function lists__listWeekdays (format, index) { - return list(format, index, 'weekdays', 7, 'day'); - } - - function lists__listWeekdaysShort (format, index) { - return list(format, index, 'weekdaysShort', 7, 'day'); - } - - function lists__listWeekdaysMin (format, index) { - return list(format, index, 'weekdaysMin', 7, 'day'); - } - - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - - var mathAbs = Math.abs; - - function duration_abs__abs () { - var data = this._data; - - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); - - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); - - return this; - } - - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); - - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; - - return duration._bubble(); - } - - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } - - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } - - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } - - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; - - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; - - hours = absFloor(minutes / 60); - data.hours = hours % 24; - - days += absFloor(hours / 24); - - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - - return this; - } - - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } - - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; - } - - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; - - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - } - - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } - - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } - - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } - - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } - - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; - } - - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); - - if (withSuffix) { - output = locale.pastFuture(+this, output); - } - - return locale.postformat(output); - } - - var iso_string__abs = Math.abs; - - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; - - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; - - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; - - // Side effect imports - - // FORMATTING - - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); - - // PARSING - - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - - utils_hooks__hooks.version = '2.11.1'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.now = now; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - utils_hooks__hooks.prototype = momentPrototype; - - var _moment = utils_hooks__hooks; - - return _moment; - -})); \ No newline at end of file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js b/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js deleted file mode 100644 index 977dfc09..00000000 --- a/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js +++ /dev/null @@ -1,86 +0,0 @@ -cordova.define("cordova-plugin-device.device", function(require, exports, module) { -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var argscheck = require('cordova/argscheck'), - channel = require('cordova/channel'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - cordova = require('cordova'); - -channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); - -/** - * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the - * phone, etc. - * @constructor - */ -function Device() { - this.available = false; - this.platform = null; - this.version = null; - this.uuid = null; - this.cordova = null; - this.model = null; - this.manufacturer = null; - this.isVirtual = null; - this.serial = null; - - var me = this; - - channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - //TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - me.uuid = info.uuid; - me.cordova = buildLabel; - me.model = info.model; - me.isVirtual = info.isVirtual; - me.manufacturer = info.manufacturer || 'unknown'; - me.serial = info.serial || 'unknown'; - channel.onCordovaInfoReady.fire(); - },function(e) { - me.available = false; - utils.alert("[ERROR] Error initializing Cordova: " + e); - }); - }); -} - -/** - * Get device info - * - * @param {Function} successCallback The function to call when the heading data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) - */ -Device.prototype.getInfo = function(successCallback, errorCallback) { - argscheck.checkArgs('fF', 'Device.getInfo', arguments); - exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); -}; - -module.exports = new Device(); - -}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js b/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js deleted file mode 100644 index a2ba8a3d..00000000 --- a/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js +++ /dev/null @@ -1,30 +0,0 @@ -cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) { - var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.'; - console.error(msg); - setInterval(function() { - console.warn(msg); - }, 10000); -} - -}); diff --git a/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js b/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js deleted file mode 100644 index 1ec111f1..00000000 --- a/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js +++ /dev/null @@ -1,252 +0,0 @@ -cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/* global cordova:false */ -/* globals window */ - -/*! - * Module dependencies. - */ - -var exec = cordova.require('cordova/exec'); - -/** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - -var PushNotification = function(options) { - this._handlers = { - 'registration': [], - 'notification': [], - 'error': [] - }; - - // require options parameter - if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); - } - - // store the options to this object instance - this.options = options; - - // triggered on registration and notification - var that = this; - var success = function(result) { - if (result && typeof result.registrationId !== 'undefined') { - that.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.callback !== 'undefined') { - var executeFunctionByName = function(functionName, context /*, args */) { - var args = Array.prototype.slice.call(arguments, 2); - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } - return context[func].apply(context, args); - }; - - executeFunctionByName(result.additionalData.callback, window, result); - } else if (result) { - that.emit('notification', result); - } - }; - - // triggered on error - var fail = function(msg) { - var e = (typeof msg === 'string') ? new Error(msg) : msg; - that.emit('error', e); - }; - - // wait at least one process tick to allow event subscriptions - setTimeout(function() { - exec(success, fail, 'PushNotification', 'init', [options]); - }, 10); -}; - -/** - * Unregister from push notifications - */ - -PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.unregister failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.unregister failure: success callback parameter must be a function'); - return; - } - - var that = this; - var cleanHandlersAndPassThrough = function() { - if (!options) { - that._handlers = { - 'registration': [], - 'notification': [], - 'error': [] - }; - } - successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); -}; - -/** - * Call this to set the application icon badge - */ - -PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); -}; - -/** - * Get the application icon badge - */ - -PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); -}; - -/** - * Listen for an event. - * - * The following events are supported: - * - * - registration - * - notification - * - error - * - * @param {String} eventName to subscribe to. - * @param {Function} callback triggered on the event. - */ - -PushNotification.prototype.on = function(eventName, callback) { - if (this._handlers.hasOwnProperty(eventName)) { - this._handlers[eventName].push(callback); - } -}; - -/** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ - -PushNotification.prototype.off = function (eventName, handle) { - if (this._handlers.hasOwnProperty(eventName)) { - var handleIndex = this._handlers[eventName].indexOf(handle); - if (handleIndex >= 0) { - this._handlers[eventName].splice(handleIndex, 1); - } - } -}; - -/** - * Emit an event. - * - * This is intended for internal use only. - * - * @param {String} eventName is the event to trigger. - * @param {*} all arguments are passed to the event listeners. - * - * @return {Boolean} is true when the event is triggered otherwise false. - */ - -PushNotification.prototype.emit = function() { - var args = Array.prototype.slice.call(arguments); - var eventName = args.shift(); - - if (!this._handlers.hasOwnProperty(eventName)) { - return false; - } - - for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { - this._handlers[eventName][i].apply(undefined,args); - } - - return true; -}; - -PushNotification.prototype.finish = function(successCallback, errorCallback, id) { - if (!successCallback) { successCallback = function() {}; } - if (!errorCallback) { errorCallback = function() {}; } - if (!id) { id = 'handler'; } - - if (typeof successCallback !== 'function') { - console.log('finish failure: success callback parameter must be a function'); - return; - } - - if (typeof errorCallback !== 'function') { - console.log('finish failure: failure parameter not a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); -}; - -/*! - * Push Notification Plugin. - */ - -module.exports = { - /** - * Register for Push Notifications. - * - * This method will instantiate a new copy of the PushNotification object - * and start the registration process. - * - * @param {Object} options - * @return {PushNotification} instance - */ - - init: function(options) { - return new PushNotification(options); - }, - - hasPermission: function(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, - - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - - PushNotification: PushNotification -}; - -}); diff --git a/platforms/android/assets/www/robots.txt b/platforms/android/assets/www/robots.txt deleted file mode 100644 index 94174950..00000000 --- a/platforms/android/assets/www/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# robotstxt.org - -User-agent: * diff --git a/platforms/android/assets/www/scripts/app.js b/platforms/android/assets/www/scripts/app.js deleted file mode 100644 index 057cc822..00000000 --- a/platforms/android/assets/www/scripts/app.js +++ /dev/null @@ -1,249 +0,0 @@ -// 'use strict'; - -/** - * @ngdoc overview - * @name livewellApp - * @description - * # livewellApp - * - * Main module of the application. - */ -angular - .module('livewellApp', [ - 'ngAnimate', - 'ngCookies', - 'ngResource', - 'ngRoute', - 'ngSanitize', - 'ngTouch', - 'highcharts-ng', - 'angularMoment' - ]) - .config(function ($routeProvider) { - $routeProvider - .when('/', { - templateUrl: 'views/home.html', - controller: 'HomeCtrl' - }) - .when('/main', { - templateUrl: 'views/main.html', - controller: 'MainCtrl' - }) - .when('/about', { - templateUrl: 'views/about.html', - controller: 'AboutCtrl' - }) - .when('/foundations', { - templateUrl: 'views/foundations.html', - controller: 'FoundationsCtrl' - }) - .when('/checkins', { - templateUrl: 'views/checkins.html', - controller: 'CheckinsCtrl' - }) - .when('/daily_review', { - templateUrl: 'views/daily_review.html', - controller: 'DailyReviewCtrl' - }) - .when('/wellness', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/wellness/:section', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/wellness', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/instructions', { - templateUrl: 'views/instructions.html', - controller: 'InstructionsCtrl' - }) - .when('/daily_review_summary', { - templateUrl: 'views/daily_review_summary.html', - controller: 'DailyReviewSummaryCtrl' - }) - .when('/daily_review_conclusion', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/daily_review_conclusion/:id', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/daily_review_conclusion/:intervention_set/:id', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/medications', { - templateUrl: 'views/medications.html', - controller: 'MedicationsCtrl' - }) - .when('/skills', { - templateUrl: 'views/skills.html', - controller: 'SkillsCtrl' - }) - .when('/team', { - templateUrl: 'views/team.html', - controller: 'TeamCtrl' - }) - .when('/intervention', { - templateUrl: 'views/intervention.html', - controller: 'InterventionCtrl' - }) - .when('/intervention/:code', { - templateUrl: 'views/intervention.html', - controller: 'InterventionCtrl' - }) - .when('/exit', { - templateUrl: 'views/exit.html', - controller: 'ExitCtrl' - }) - .when('/charts', { - templateUrl: 'views/charts.html', - controller: 'ChartsCtrl' - }) - .when('/weekly_check_in', { - templateUrl: 'views/weekly_check_in.html', - controller: 'WeeklyCheckInCtrl' - }) - .when('/weekly_check_in/:questionIndex', { - templateUrl: 'views/weekly_check_in.html', - controller: 'WeeklyCheckInCtrl' - }) - .when('/daily_check_in', { - templateUrl: 'views/daily_check_in.html', - controller: 'DailyCheckInCtrl' - }) - .when('/daily_check_in/:id', { - templateUrl: 'views/daily_check_in.html', - controller: 'DailyCheckInCtrl' - }) - .when('/settings', { - templateUrl: 'views/settings.html', - controller: 'SettingsCtrl' - }) - .when('/localStorageBackupRestore', { - templateUrl: 'views/localstoragebackuprestore.html', - controller: 'LocalstoragebackuprestoreCtrl' - }) - .when('/cms', { - templateUrl: 'views/cms.html', - controller: 'CmsCtrl' - }) - .when('/admin', { - templateUrl: 'views/admin.html', - controller: 'AdminCtrl' - }) - .when('/load_interventions', { - templateUrl: 'views/load_interventions.html', - controller: 'LoadInterventionsCtrl' - }) - .when('/lesson_player/:id', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/lesson_player/', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/lesson_player/:id/:post', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/skills_fundamentals', { - templateUrl: 'views/skills_fundamentals.html', - controller: 'SkillsFundamentalsCtrl' - }) - .when('/skills_awareness', { - templateUrl: 'views/skills_awareness.html', - controller: 'SkillsAwarenessCtrl' - }) - .when('/skills_lifestyle', { - templateUrl: 'views/skills_lifestyle.html', - controller: 'SkillsLifestyleCtrl' - }) - .when('/skills_coping', { - templateUrl: 'views/skills_coping.html', - controller: 'SkillsCopingCtrl' - }) - .when('/skills_team', { - templateUrl: 'views/skills_team.html', - controller: 'SkillsTeamCtrl' - }) - .when('/skills_fundamentals', { - templateUrl: 'views/skills_fundamentals.html', - controller: 'SkillsFundamentalsCtrl' - }) - .when('/ews', { - templateUrl: 'views/ews.html', - controller: 'EwsCtrl' - }) - .when('/ews2', { - templateUrl: 'views/ews2.html', - controller: 'Ews2Ctrl' - }) - .when('/schedule', { - templateUrl: 'views/schedule.html', - controller: 'ScheduleCtrl' - }) - .when('/summary_player', { - templateUrl: 'views/summary_player.html', - controller: 'SummaryPlayerCtrl' - }) - .when('/summary_player/:id/:post', { - templateUrl: 'views/summary_player.html', - controller: 'SummaryPlayerCtrl' - }) - .when('/load_interventions_review', { - templateUrl: 'views/load_interventions_review.html', - controller: 'LoadInterventionsReviewCtrl' - }) - .when('/mySkills', { - templateUrl: 'views/myskills.html', - controller: 'MyskillsCtrl' - }) - .when('/charts', { - templateUrl: 'views/charts.html', - controller: 'ChartsCtrl' - }) - .when('/chartsMedication', { - templateUrl: 'views/chartsmedication.html', - controller: 'ChartsmedicationCtrl' - }) - .when('/chartsSleep', { - templateUrl: 'views/chartssleep.html', - controller: 'ChartssleepCtrl' - }) - .when('/chartsRoutine', { - templateUrl: 'views/chartsroutine.html', - controller: 'ChartsroutineCtrl' - }) - .when('/chartsActivity', { - templateUrl: 'views/chartsactivity.html', - controller: 'ChartsactivityCtrl' - }) - .when('/dailyReviewTester', { - templateUrl: 'views/dailyreviewtester.html', - controller: 'DailyreviewtesterCtrl' - }) - .when('/personalSnapshot', { - templateUrl: 'views/personalsnapshot.html', - controller: 'PersonalsnapshotCtrl' - }) - .when('/home', { - templateUrl: 'views/home.html', - controller: 'HomeCtrl' - }) - .when('/usereditor', { - templateUrl: 'views/usereditor.html', - controller: 'UsereditorCtrl' - }) - .otherwise({ - redirectTo: '/' - }); - }).run(function($rootScope) { - -}); diff --git a/platforms/android/assets/www/scripts/controllers/about.js b/platforms/android/assets/www/scripts/controllers/about.js deleted file mode 100644 index 7e72299c..00000000 --- a/platforms/android/assets/www/scripts/controllers/about.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AboutCtrl - * @description - * # AboutCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AboutCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/admin.js b/platforms/android/assets/www/scripts/controllers/admin.js deleted file mode 100644 index 03b340f1..00000000 --- a/platforms/android/assets/www/scripts/controllers/admin.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AdminCtrl - * @description - * # AdminCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AdminCtrl', function ($scope,Questions) { - - }); diff --git a/platforms/android/assets/www/scripts/controllers/awareness.js b/platforms/android/assets/www/scripts/controllers/awareness.js deleted file mode 100644 index 883f8e80..00000000 --- a/platforms/android/assets/www/scripts/controllers/awareness.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AwarenessCtrl - * @description - * # AwarenessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AwarenessCtrl', function ($scope,UserData) { - - //awareness variables - $scope.awareness = UserData.query('awareness'); - $scope.intervention_anchors = UserData.query('anchors'); - $scope.plan = UserData.query('plan'); - - $scope.showAnchors = false; - $scope.showAction = false; - $scope.showPlan = true; - - $('.awareness-btn').removeClass('btn-active'); - $('#load-plan').addClass('btn-active'); - - $scope.loadAnchors = function(){ - $scope.showAnchors = true; - $scope.showAction = false; - $scope.showPlan = false; - $('.awareness-btn').removeClass('btn-active'); - $('#load-anchors').addClass('btn-active'); - } - - $scope.loadAction = function(){ - $scope.showAnchors = false; - $scope.showAction = true; - $scope.showPlan = false; - $('.awareness-btn').removeClass('btn-active'); - $('#load-action').addClass('btn-active'); - } - - $scope.loadPlan = function(){ - $scope.showAnchors = false; - $scope.showAction = false; - $scope.showPlan = true; - $('.awareness-btn').removeClass('btn-active'); - $('#load-plan').addClass('btn-active'); - } - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/backup b/platforms/android/assets/www/scripts/controllers/backup deleted file mode 100644 index d87a458c..00000000 --- a/platforms/android/assets/www/scripts/controllers/backup +++ /dev/null @@ -1 +0,0 @@ -"{\"awareness\":\"[{\\\"userId\\\":\\\"test\\\",\\\"order\\\":3,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"+2\\\",\\\"name\\\":\\\"Mild Up\\\",\\\"id\\\":\\\"cdd38c91ddf29885\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":4,\\\"value\\\":\\\"+1\\\",\\\"name\\\":\\\"Slight Up\\\",\\\"id\\\":\\\"d612cfee454b4a2a\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":5,\\\"value\\\":\\\"0\\\",\\\"name\\\":\\\"Balanced\\\",\\\"id\\\":\\\"83b912bed2eee8cd\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":6,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-1\\\",\\\"name\\\":\\\"Slight Down\\\",\\\"id\\\":\\\"529da655f43f3853\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":7,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-2\\\",\\\"name\\\":\\\"Mild Down\\\",\\\"id\\\":\\\"186ca99b9fa64874\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":8,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-3\\\",\\\"name\\\":\\\"Moderate Down\\\",\\\"id\\\":\\\"a4737da1b0cb1b0f\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":9,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-4\\\",\\\"name\\\":\\\"Severe Down\\\",\\\"id\\\":\\\"07f10ba389bdf871\\\"},{\\\"name\\\":\\\"Severe Up\\\",\\\"order\\\":1,\\\"response\\\":\\\"Crisis, call 911\\\",\\\"userId\\\":\\\"test\\\",\\\"value\\\":\\\"+4\\\",\\\"id\\\":\\\"bc86889da8728a75\\\"},{\\\"name\\\":\\\"Moderate Up\\\",\\\"order\\\":2,\\\"response\\\":\\\"Work closely with your psychiatrist\\\",\\\"userId\\\":\\\"test\\\",\\\"value\\\":\\\"+3\\\",\\\"id\\\":\\\"bf79863b86ad795f\\\"}]\",\"medications\":\"[{\\\"userId\\\":\\\"test\\\",\\\"name\\\":\\\"Paxil\\\",\\\"dose\\\":\\\"30mg\\\",\\\"when\\\":\\\"twice daily\\\",\\\"id\\\":\\\"1207f5105ded9947\\\"},{\\\"userId\\\":\\\"test\\\",\\\"name\\\":\\\"Havidol\\\",\\\"dose\\\":\\\"100g\\\",\\\"when\\\":\\\"every 5 minutes\\\",\\\"id\\\":\\\"1e3cf5b135943a7d\\\"}]\",\"pound\":\"[\\\"user\\\",\\\"pound\\\"]\",\"questioncriteria\":\"[{\\\"levelOrder\\\":\\\"1\\\",\\\"levelOrderValue\\\":\\\"1\\\",\\\"questionCriteriaId\\\":\\\"a1\\\",\\\"section\\\":\\\"medication\\\",\\\"id\\\":\\\"0b60522013b62834\\\"}]\",\"questionresponses\":\"[{\\\"label\\\":\\\"Not at all\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"6f04febc1dcd9901\\\"},{\\\"label\\\":\\\"Several days\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"06baf3eab84568a9\\\"},{\\\"label\\\":\\\"More than half the days\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"2255a56c9a5d7840\\\"},{\\\"label\\\":\\\"Nearly every day\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"2b8171b28d4a9872\\\"},{\\\"label\\\":\\\" I often feel happier or more cheerful than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"dcbcb90d9073f8b9\\\"},{\\\"label\\\":\\\" I feel happier or more cheerful than usual most of the time.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"e788aab4046c2bcb\\\"},{\\\"label\\\":\\\"I feel happier or more cheerful than usual all of the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"7e6bdf02e6c088d5\\\"},{\\\"label\\\":\\\" I occasionally feel happier or more cheerful than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"8afbd4f2cb39a841\\\"},{\\\"label\\\":\\\" I occasionally feel more self-confident than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"9b55a9e0c9e35a08\\\"},{\\\"label\\\":\\\" I often feel more self-confident than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"3b32f497db74d831\\\"},{\\\"label\\\":\\\" I feel more self-confident than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"b82d2f1d064b39f5\\\"},{\\\"label\\\":\\\" I feel extremely self-confident all of the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\" 3\\\",\\\"id\\\":\\\"e9634a047324d807\\\"},{\\\"label\\\":\\\" I occasionally talk more than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"248dd7f49401b816\\\"},{\\\"label\\\":\\\" I occasionally need less sleep than usual\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"26daf6c957e1d83b\\\"},{\\\"label\\\":\\\" I frequently need less sleep than usual\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"c6b337238dac09cb\\\"},{\\\"label\\\":\\\" I often need less sleep than usual\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"a5938f5841d23a8d\\\"},{\\\"label\\\":\\\" I can go all day and night without any sleep and still not feel tired.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"dd04b42fb498a867\\\"},{\\\"label\\\":\\\" I talk constantly and cannot be interrupted.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"95c03e5561173858\\\"},{\\\"label\\\":\\\" I frequently talk more than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"31d48584769878d1\\\"},{\\\"label\\\":\\\" I often talk more than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"ee97165355d88836\\\"},{\\\"label\\\":\\\" I have occasionally been more active than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"bbfc7642a646194e\\\"},{\\\"label\\\":\\\" I have often been more active than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"d62f39be9109c8fe\\\"},{\\\"label\\\":\\\" I have frequently been more active than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"d1c802de87aefa16\\\"},{\\\"label\\\":\\\" I am constantly active or on the go all the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"b1121bbd24aaf9e7\\\"},{\\\"responseGroupId\\\":\\\"a1\\\",\\\"responseGroupLabel\\\":\\\"a1\\\",\\\"order\\\":\\\"1\\\",\\\"label\\\":\\\"Page 1\\\",\\\"value\\\":\\\"1\\\",\\\"goToCriteria\\\":\\\"\\\",\\\"id\\\":\\\"d5ba075d4538bbac\\\"}]\",\"questions\":\"[{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING DOWN, DEPRESSED, OR HOPELESS?\\\",\\\"order\\\":2,\\\"questionDataLabel\\\":\\\"phq2\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"07189e9eea498a07\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by a POOR APPETITE OR OVEREATING?\\\",\\\"order\\\":5,\\\"questionDataLabel\\\":\\\"phq5\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"d4c04f0d4f0e0bc7\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING BAD ABOUT YOURSELF - OR THAT YOU ARE A FAILURE OR HAVE LET YOURSELF OR YOUR FAMILY DOWN?\\\",\\\"order\\\":6,\\\"questionDataLabel\\\":\\\"phq6\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"a1d7af08b11de878\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by TROUBLE CONCENTRATING ON THINGS, SUCH AS READING THE NEWSPAPER OR WATCHING TELEVISION?\\\",\\\"order\\\":7,\\\"questionDataLabel\\\":\\\"phq7\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"c317fef4e47308d2\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by MOVING OR SPEAKING SO SLOWLY THAT OTHER PEOPLE COULD HAVE NOTICED? OR THE OPPOSITE - BEING SO FIDGETY OR RESTLESS THAT YOU HAVE BEEN MOVING AROUND A LOT MORE THAN USUAL?\\\",\\\"order\\\":8,\\\"questionDataLabel\\\":\\\"phq8\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"3144ed93440c28ec\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by THOUGHTS THAT YOU WOULD BE BETTER OFF DEAD, OR OF HURTING YOURSELF?\\\",\\\"order\\\":9,\\\"questionDataLabel\\\":\\\"phq9\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"decf5d36ced538d0\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by TROUBLE FALLING OR STAYING ASLEEP, OR SLEEPING TOO MUCH?\\\",\\\"order\\\":3,\\\"questionDataLabel\\\":\\\"phq3\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"2bbfc1e863d4b98a\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by LITTLE INTEREST OR PLEASURE IN DOING THINGS?\\\",\\\"order\\\":1,\\\"questionDataLabel\\\":\\\"phq1\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responses\\\":\\\"{}\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"f99a845eea530b2c\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING TIRED OR HAVING LITTLE ENERGY?\\\",\\\"order\\\":4,\\\"questionDataLabel\\\":\\\"phq4\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"4632c4b2ab01d86a\\\"},{\\\"questionGroup\\\":\\\"phq9\\\",\\\"order\\\":0,\\\"type\\\":\\\"html\\\",\\\"content\\\":\\\"<h2>Welcome to the Weekly Check-In!</h2>\\\",\\\"questionDataLabel\\\":\\\"\\\",\\\"responseGroupId\\\":\\\"\\\",\\\"required\\\":\\\"\\\",\\\"id\\\":\\\"d485d4c8d859f8cc\\\"},{\\\"questionGroup\\\":\\\"amrs\\\",\\\"order\\\":1,\\\"type\\\":\\\"radio\\\",\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"questionDataLabel\\\":\\\"amrs1\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"required\\\":\\\"\\\",\\\"id\\\":\\\"90c7b6d682c7187f\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":2,\\\"questionDataLabel\\\":\\\"amrs2\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"430194fe140b18e8\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":3,\\\"questionDataLabel\\\":\\\"amrs4\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"ba2637d288da182f\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":4,\\\"questionDataLabel\\\":\\\"amrs3\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"23fae8ba4842c866\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":5,\\\"questionDataLabel\\\":\\\"amrs5\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"53c964a687dff873\\\"},{\\\"content\\\":\\\"Where should I go next\\\",\\\"hideBackButton\\\":true,\\\"hideNextButton\\\":true,\\\"order\\\":1,\\\"questionCriteriaId\\\":\\\"a1\\\",\\\"questionDataLabel\\\":\\\"a1\\\",\\\"questionGroup\\\":\\\"cyoa\\\",\\\"responseGroupId\\\":\\\"a\\\",\\\"showBackButton\\\":\\\"false\\\",\\\"showNextButton\\\":\\\"false\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"aed39f2a638cbb1c\\\"}]\",\"responsecriteria\":\"[]\",\"smarts\":\"[]\",\"staticcontent\":\"[{\\\"content\\\":\\\"Put in awesome text to teach people about livewell\\\",\\\"dateTimeUpdated\\\":\\\"NOW\\\",\\\"sectionKey\\\":\\\"instructions\\\",\\\"id\\\":\\\"fba0d88650522987\\\"}]\",\"team\":\"[{\\\"name\\\":\\\"Donatella Jackson\\\",\\\"role\\\":\\\"Nurse\\\",\\\"phone\\\":\\\"555.555.5555\\\",\\\"userId\\\":\\\"test\\\",\\\"id\\\":\\\"3e6ac0f8ce202a51\\\"}]\",\"user\":\"[{\\\"id\\\":1,\\\"userID\\\":null,\\\"groupID\\\":null,\\\"loginKey\\\":null,\\\"created_at\\\":\\\"2014-09-18T22:29:39.609Z\\\"}]\",\"userresponses\":\"[]\"}" \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/charts.js b/platforms/android/assets/www/scripts/controllers/charts.js deleted file mode 100644 index b46fb271..00000000 --- a/platforms/android/assets/www/scripts/controllers/charts.js +++ /dev/null @@ -1,192 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ChartsactivityCtrl - * @description - * # ChartsactivityCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ChartsCtrl', function($scope, $timeout,Pound) { - - $scope.pageTitle = 'My Charts'; - - - $timeout(function(){$('td').tooltip()}); - - $scope.dailyCheckInResponseArray = Pound.find('dailyCheckIn'); - $scope.recodedResponses = JSON.parse(localStorage['recodedResponses']); - $scope.timezoneoffset = new Date().getTimezoneOffset() / 60; - - $scope.graph = [] - if ($scope.dailyCheckInResponseArray.length > 7) { - $scope.graph[6] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 1]; - $scope.graph[5] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 2]; - $scope.graph[4] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 3]; - $scope.graph[3] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 4]; - $scope.graph[2] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 5]; - $scope.graph[1] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 6]; - $scope.graph[0] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 7]; - } else { - $scope.graph = $scope.dailyCheckInResponseArray; - } - - console.log($scope.graph); - - $scope.wellness = []; - $scope.dates = []; - - for (var i = 0; i < $scope.graph.length; i++) { - debugger; - $scope.wellness.push(parseInt($scope.graph[i].wellness)); - $scope.dates.push(moment($scope.graph[i].created_at).format('MM-DD')); - } - - - - $scope.routine = { - class: function(value) { - var returnvalue = null; - switch (value) { - case 0: - returnvalue = ['c','missed two']; - break; - case 1: - returnvalue = ['b','missed one']; - break; - case 2: - returnvalue = ['a','in range']; - break; - } - return returnvalue - } - }; - - $scope.medication = { - class: function(value) { - var returnvalue = null; - switch (value) { - case 0: - returnvalue = ['c','took none']; - break; - case 0.5: - returnvalue = ['b','took some']; - break; - case 1: - returnvalue = ['a','took all']; - break; - } - return returnvalue - } - }; - - $scope.sleep = { - class: function(value) { - var returnvalue = null; - - switch (value) { - case -1: - returnvalue = ['c','too little']; - break; - case -0.5: - returnvalue = ['b','too little']; - break; - case 0: - returnvalue = ['a','in range']; - break; - case .5: - returnvalue = ['b','too much']; - break; - case 1: - returnvalue = ['c','too much']; - break; - } - - return returnvalue - } - }; - - - - - Highcharts.theme = { - exporting: { - enabled: false - }, - chart: { - backgroundColor: 'transparent', - style: { - fontFamily: "sans-serif" - }, - plotBorderColor: '#606063' - }, - yAxis: { - max:3, - min:-3, - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: 'white', - minorGridLineColor: '#505053', - minorGridLineWidth: '1.5', - tickColor: '#707073', - }, - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: '#505053', - dataLabelsColor: '#B0B0B3', - textColor: '#C0C0C0', - contrastTextColor: '#F0F0F3', - maskColor: 'rgba(255,255,255,0.3)' - }; - - Highcharts.setOptions(Highcharts.theme); - - $scope.config = { - title: { - text: ' ', - x: -20, //center, - enabled: false - }, - subtitle: { - text: '', - x: -20 - }, - xAxis: { - categories: $scope.dates - }, - yAxis: { - title: { - text: '' - }, - plotLines: [{ - value: 0, - width: 1.5, - color: 'white' - }], - labels: { - enabled: false - } - }, - tooltip: { - valueSuffix: '', - enabled: false - }, - legend: { - layout: 'vertical', - align: 'right', - verticalAlign: 'middle', - borderWidth: 0, - enabled: false - }, - series: [{ - showInLegend: false, - name: 'Wellness', - data: $scope.wellness - }] - }; - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/checkins.js b/platforms/android/assets/www/scripts/controllers/checkins.js deleted file mode 100644 index a65a9f33..00000000 --- a/platforms/android/assets/www/scripts/controllers/checkins.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:CheckinsCtrl - * @description - * # CheckinsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('CheckinsCtrl', function ($scope, $location) { - $scope.pageTitle = 'Check Ins'; - - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/cms.js b/platforms/android/assets/www/scripts/controllers/cms.js deleted file mode 100644 index 48226abc..00000000 --- a/platforms/android/assets/www/scripts/controllers/cms.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:CmsCtrl - * @description - * # CmsCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('CmsCtrl', function ($scope,Questions) { - - - $scope.formFieldTypes = ['checkbox','radio','html','text','textarea','select','email','time','phone','url']; - - $scope.questionGroups = Questions.uniqueQuestionGroups(); - $scope.questions = Questions.questions; - $scope.responses = Questions.responses; - $scope.questionCriteria = Questions.questionCriteria; - $scope.responseCriteria = Questions.responseCriteria; - - console.log(Questions); - - $scope.viewTypes = [{name:'Table', value:'table'},{name:'Map', value:'map'}]; - $scope.viewType = 'table'; - $scope.questionGroup = 'cyoa'; - $scope.selectedQuestions = _.sortBy(Questions.query($scope.questionGroup),'questionGroup'); - - $scope.showGroup = function(){ - $scope.selectedQuestions = _.sortBy(Questions.query($scope.questionGroup),'questionGroup'); - console.log($scope.selectedQuestions); - - } - -$scope.editResponses = function(id){ - $scope.modalTitle = 'Edit Responses'; - $scope.responseGroupId = id; - $scope.showResponses = _.where($scope.responses,{responseGroupId:$scope.responseGroupId}); - $scope.uniqueResponseGroups = _.pluck(_.uniq($scope.responses,'responseGroupId'),'responseGroupId'); - $scope.goesToOptions = $scope.selectedQuestions; - $("#responseModal").modal(); -} - -$scope.saveResponses = function(id){ - $("#responseModal").modal('toggle'); - Questions.save('responses',$scope.responses); - Questions.save('responseCriteria',$scope.responseCriteria); -} - - - -$scope.editQuestion = function(id){ - -} - -$scope.addQuestion = function(id){ - -} -$scope.deleteQuestion = function(id){ - -} - -$scope.editCriteria = function(id){ - -} - - - - -}); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/daily_check_in.js b/platforms/android/assets/www/scripts/controllers/daily_check_in.js deleted file mode 100644 index 3076cfa5..00000000 --- a/platforms/android/assets/www/scripts/controllers/daily_check_in.js +++ /dev/null @@ -1,500 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyCheckInCtrl - * @description - * # DailyCheckInCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyCheckInCtrl', function($scope, $location, $routeParams, Pound, Guid) { - $scope.pageTitle = 'Daily Check In'; - - $scope.dailyCheckIn = { - gotUp: '', - toBed: '', - wellness: '', - medications: '', - startTime: new Date() - }; - - $scope.emergency = false; - - $scope.warningPhoneNumber = null; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0] != undefined) { - $scope.phoneNumber = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].phone; - } else { - $scope.phoneNumber = '312-503-1886'; - } - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachNumber = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].phone; - } else { - $scope.coachNumber = '312-503-1886'; - } - - $scope.responses = [{ - order: 1, - callCoach: true, - response: '-4', - label: '-4', - tailoredMessage: 'some message', - warningMessage: 'You rated yourself as being in a crisis with a -4, if this is correct, close and press submit.' - }, { - order: 2, - callCoach: false, - response: '-3', - label: '-3', - tailoredMessage: 'some message' - }, { - order: 3, - callCoach: false, - response: '-2', - label: '-2', - tailoredMessage: 'some message' - }, { - order: 4, - callCoach: false, - response: '-1', - label: '-1', - tailoredMessage: 'some message' - }, { - order: 5, - callCoach: false, - response: '0', - label: '0', - tailoredMessage: 'some message' - }, { - order: 6, - callCoach: false, - response: '1', - label: '+1', - tailoredMessage: 'some message' - }, { - order: 7, - callCoach: false, - response: '2', - label: '+2', - tailoredMessage: 'some message' - }, { - order: 8, - callCoach: false, - response: '3', - label: '+3', - tailoredMessage: 'some message' - }, { - order: 9, - callCoach: true, - response: '4', - label: '+4', - tailoredMessage: 'some message', - warningMessage: 'You rated yourself as being in a crisis with a +4, if this is correct, close and press submit.' - }]; - - $scope.times = [{ - value: "0000", - label: "12:00AM" - }, { - value: "0030", - label: "12:30AM" - }, { - value: "0100", - label: "1:00AM" - }, { - value: "0130", - label: "1:30AM" - }, { - value: "0200", - label: "2:00AM" - }, { - value: "0230", - label: "2:30AM" - }, { - value: "0300", - label: "3:00AM" - }, { - value: "0330", - label: "3:30AM" - }, { - value: "0400", - label: "4:00AM" - }, { - value: "0430", - label: "4:30AM" - }, { - value: "0500", - label: "5:00AM" - }, { - value: "0530", - label: "5:30AM" - }, { - value: "0600", - label: "6:00AM" - }, { - value: "0630", - label: "6:30AM" - }, { - value: "0700", - label: "7:00AM" - }, { - value: "0730", - label: "7:30AM" - }, { - value: "0800", - label: "8:00AM" - }, { - value: "0830", - label: "8:30AM" - }, { - value: "0900", - label: "9:00AM" - }, { - value: "0930", - label: "9:30AM" - }, { - value: "1000", - label: "10:00AM" - }, { - value: "1030", - label: "10:30AM" - }, { - value: "1100", - label: "11:00AM" - }, { - value: "1130", - label: "11:30AM" - }, { - value: "1200", - label: "12:00PM" - }, { - value: "1230", - label: "12:30PM" - }, { - value: "1300", - label: "1:00PM" - }, { - value: "1330", - label: "1:30PM" - }, { - value: "1400", - label: "2:00PM" - }, { - value: "1430", - label: "2:30PM" - }, { - value: "1500", - label: "3:00PM" - }, { - value: "1530", - label: "3:30PM" - }, { - value: "1600", - label: "4:00PM" - }, { - value: "1630", - label: "4:30PM" - }, { - value: "1700", - label: "5:00PM" - }, { - value: "1730", - label: "5:30PM" - }, { - value: "1800", - label: "6:00PM" - }, { - value: "1830", - label: "6:30PM" - }, { - value: "1900", - label: "7:00PM" - }, { - value: "1930", - label: "7:30PM" - }, { - value: "2000", - label: "8:00PM" - }, { - value: "2030", - label: "8:30PM" - }, { - value: "2100", - label: "9:00PM" - }, { - value: "2130", - label: "9:30PM" - }, { - value: "2200", - label: "10:00PM" - }, { - value: "2230", - label: "10:30PM" - }, { - value: "2300", - label: "11:00PM" - }, { - value: "2330", - label: "11:30PM" - }]; - - $scope.hours = [{ - value: "0", - label: "0 hrs" - }, { - value: "0.5", - label: "0.5 hrs" - }, { - value: "1", - label: "1 hrs" - }, { - value: "1.5", - label: "1.5 hrs" - }, { - value: "2", - label: "2 hrs" - }, { - value: "2.5", - label: "2.5 hrs" - }, { - value: "3", - label: "3 hrs" - }, { - value: "3.5", - label: "3.5 hrs" - }, { - value: "4", - label: "4 hrs" - }, { - value: "4.5", - label: "4.5 hrs" - }, { - value: "5", - label: "5 hrs" - }, { - value: "5.5", - label: "5.5 hrs" - }, { - value: "6", - label: "6 hrs" - }, { - value: "6.5", - label: "6.5 hrs" - }, { - value: "7", - label: "7 hrs" - }, { - value: "7.5", - label: "7.5 hrs" - }, { - value: "8", - label: "8 hrs" - }, { - value: "8.5", - label: "8.5 hrs" - }, { - value: "9", - label: "9 hrs" - }, { - value: "9.5", - label: "9.5 hrs" - }, { - value: "10", - label: "10 hrs" - }, { - value: "10.5", - label: "10.5 hrs" - }, { - value: "11", - label: "11 hrs" - }, { - value: "11.5", - label: "11.5 hrs" - }, { - value: "12", - label: "12 hrs" - }, { - value: "12.5", - label: "12.5 hrs" - }, { - value: "13", - label: "13 hrs" - }, { - value: "13.5", - label: "13.5 hrs" - }, { - value: "14", - label: "14 hrs" - }, { - value: "14.5", - label: "14.5 hrs" - }, { - value: "15", - label: "15 hrs" - }, { - value: "15.5", - label: "15.5 hrs" - }, { - value: "16", - label: "16 hrs" - }, { - value: "16.5", - label: "16.5 hrs" - }, { - value: "17", - label: "17 hrs" - }, { - value: "17.5", - label: "17.5 hrs" - }, { - value: "18", - label: "18 hrs" - }, { - value: "18.5", - label: "18.5 hrs" - }, { - value: "19", - label: "19 hrs" - }, { - value: "19.5", - label: "19.5 hrs" - }, { - value: "20", - label: "20 hrs" - }, { - value: "20.5", - label: "20.5 hrs" - }, { - value: "21", - label: "21 hrs" - }, { - value: "21.5", - label: "21.5 hrs" - }, { - value: "22", - label: "22 hrs" - }, { - value: "22.5", - label: "22.5 hrs" - }, { - value: "23", - label: "23 hrs" - }, { - value: "23.5", - label: "23.5 hrs" - }, { - value: "24", - label: "24 hrs" - }]; - - - $scope.saveCheckIn = function() { - - var allAnswersFinished = $scope.dailyCheckIn.gotUp != '' & $scope.dailyCheckIn.toBed != '' & $scope.dailyCheckIn.medications != '' & $scope.dailyCheckIn.wellness != '' & $scope.dailyCheckIn.sleepDuration != ''; - - if (allAnswersFinished) { - $scope.dailyCheckIn.endTime = new Date(); - if ($scope.dailyCheckIn.wellness == 4 || $scope.dailyCheckIn.wellness == -4) { - $scope.emergency = true; - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - coachEmail: $scope.coachEmail, - message: 'User answered with a ' + $scope.dailyCheckIn.wellness + ' on the daily check in' - }).execute(); - } - - Pound.add('dailyCheckIn', $scope.dailyCheckIn); - $scope.nextId = $routeParams.id; - - var sessionID = Guid.create(); - - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'toBed', - questionValue: $scope.dailyCheckIn.toBed - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'gotUp', - questionValue: $scope.dailyCheckIn.gotUp - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'wellness', - questionValue: $scope.dailyCheckIn.wellness - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'medications', - questionValue: $scope.dailyCheckIn.medications - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'sleepDuration', - questionValue: $scope.dailyCheckIn.sleepDuration - }).execute(); - - $("#continue").modal(); - } else { - $("#warning").modal(); - $scope.selectedWarningMessage = 'You must respond to all questions on this page!'; - } - } - - $scope.highlight = function(id, response) { - - $('label').removeClass('highlight'); - $(id).addClass('highlight'); - $scope.dailyCheckIn.wellness = response; - - } - - $scope.warning = function(response) { - - if (response.warningMessage.length > 0) { - $scope.selectedWarningMessage = response.warningMessage; - if (response.callCoach == true) { - $scope.warningPhoneNumber = $scope.phoneNumber; - } else { - $scope.warningPhoneNumber = null; - } - $("#warning").modal(); - } - - - } - - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/daily_review.js b/platforms/android/assets/www/scripts/controllers/daily_review.js deleted file mode 100644 index b83c2238..00000000 --- a/platforms/android/assets/www/scripts/controllers/daily_review.js +++ /dev/null @@ -1,150 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewCtrl - * @description - * # DailyReviewCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewCtrl', function($scope, $routeParams, $timeout, UserData, Pound, DailyReviewAlgorithm, ClinicalStatusUpdate, Guid) { - $scope.pageTitle = "Daily Review"; - - Pound.add('dailyReviewStarted', { - userStarted: true, - code: $scope.code - }); - - $timeout(function(){$('.add-tooltip').tooltip()}); - - $scope.routineData = UserData.query('sleepRoutineRanges'); - - $scope.cleanTime = function(militaryTime){ - - var time = militaryTime.toString(); - var cleanTime = ''; - - if (time[0] == '0' && time[1] == '0'){ - cleanTime = '12:' + time[2] + time[3]; - } else if( time[0] == '0'){ - cleanTime = time[1] + ":" + time[2] + time[3]; - } else if (parseInt(time[0] + time[1]) > 12 ){ - cleanTime = (parseInt(time[0] + time[1]) - 12) + ":" + time[2] + time[3]; - } else { - cleanTime = time[0] + time[1] + ":" + time[2] + time[3]; - } - - if (parseInt(militaryTime) > 1200){ - return cleanTime + ' PM' - } - else { - return cleanTime + ' AM' - } - - } - - $scope.interventionGroups = UserData.query('dailyReview'); - - $scope.updatedClinicalStatus = {}; - - var runAlgorithm = function(Pound) { - var object = {}; - var sessionID = Guid.create(); - - object.code = DailyReviewAlgorithm.code(); - $scope.updatedClinicalStatus = ClinicalStatusUpdate.execute(); - - (new PurpleRobot()).emitReading('livewell_dailyreviewcode', { - sessionGUID: sessionID, - code: object.code - }).execute(); - (new PurpleRobot()).emitReading('livewell_clinicalstatus', { - sessionGUID: sessionID, - status: $scope.updatedClinicalStatus - }).execute(); - - return object - - } - - $scope.code = runAlgorithm().code; - - //TO REMOVE - $scope.recodedResponses = DailyReviewAlgorithm.recodedResponses(); - $scope.dailyCheckInResponseArray = Pound.find('dailyCheckIn') - $scope.dailyCheckInResponses = ' |today| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 1]) + ' |t-1| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 2]) + ' |t-2| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 3]) + ' |t-3| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 4]) + ' |t-4| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 5]) + ' |t-5| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 6]) + ' |t-6| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 7]); - - //STOP REMOVE - - $scope.percentages = DailyReviewAlgorithm.percentages(); - - $(".modal-backdrop").remove(); - - var latestWarning = Pound.find('clinical_reachout')[Pound.find('clinical_reachout').length - 1]; - - if (latestWarning != undefined) { - if (latestWarning.shownToUser == undefined) { - $scope.warningMessage = Pound.find('clinical_reachout')[Pound.find('clinical_reachout').length - 1].message - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - - $scope.phoneNumber = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].phone; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - coachEmail: $scope.coachEmail, - message: $scope.warningMessage - }).execute(); - - latestWarning.shownToUser = true; - Pound.update('clinical_reachout', latestWarning); - $scope.showWarning = true; - $("#warning").modal(); - } - } - - $scope.dailyReviewCategory = _.where($scope.interventionGroups, { - code: $scope.code - })[0].questionSet; - - $scope.interventionResponse = function() { - - if ($scope.code == 1 || $scope.code == 2) { - return 'Please contact your care provider or hospital'; - } else { - if (_.where($scope.interventionGroups, { - code: $scope.code - })[0] != undefined) { - if (typeof(_.where($scope.interventionGroups, { - code: $scope.code - })[0].response) == 'object') { - return _.where($scope.interventionGroups, { - code: $scope.code - })[0].response[Math.floor((Math.random() * _.where($scope.interventionGroups, { - code: $scope.code - })[0].response.length))] - } else { - return _.where($scope.interventionGroups, { - code: $scope.code - })[0].response - } - } - } - } - - - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/daily_review_conclusion.js b/platforms/android/assets/www/scripts/controllers/daily_review_conclusion.js deleted file mode 100644 index d0c7af3f..00000000 --- a/platforms/android/assets/www/scripts/controllers/daily_review_conclusion.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewConclusionCtrl - * @description - * # DailyReviewConclusionCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewConclusionCtrl', function ($scope, $sanitize) { - $scope.pageTitle = "Daily Review"; - $scope.lastNotification = "Keep up the good work!<br/>Check out your medication plan in Reduce Risk."; - }); diff --git a/platforms/android/assets/www/scripts/controllers/daily_review_summary.js b/platforms/android/assets/www/scripts/controllers/daily_review_summary.js deleted file mode 100644 index 9d9eb9db..00000000 --- a/platforms/android/assets/www/scripts/controllers/daily_review_summary.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewSummaryCtrl - * @description - * # DailyReviewSummaryCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewSummaryCtrl', function ($scope) { - $scope.pageTitle = "Daily Review"; - }); diff --git a/platforms/android/assets/www/scripts/controllers/dailyreviewtester.js b/platforms/android/assets/www/scripts/controllers/dailyreviewtester.js deleted file mode 100644 index 33415dc5..00000000 --- a/platforms/android/assets/www/scripts/controllers/dailyreviewtester.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyreviewtesterCtrl - * @description - * # DailyreviewtesterCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyreviewtesterCtrl', function ($scope,Pound,dailyReview) { - - $scope.collection = Pound.find('dailyCheckIn'); - - $scope.proposedIntervention = dailyReview.getCode(); - - }); diff --git a/platforms/android/assets/www/scripts/controllers/ews.js b/platforms/android/assets/www/scripts/controllers/ews.js deleted file mode 100644 index 15f57db5..00000000 --- a/platforms/android/assets/www/scripts/controllers/ews.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('EwsCtrl', function ($scope,$location,UserData,UserDetails,Guid) { - - $scope.pageTitle = "Weekly Check In"; - - $scope.ews = UserData.query('ews'); - - $scope.onClick=function(){ - - var el = JSON.stringify($('form').serializeArray()) || {name:'ews', value:null}; ; - var sessionID = Guid.create(); - - var payload = { - userId: UserDetails.find, - survey: 'ews', - questionDataLabel: 'ews', - questionValue: el, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading('livewell_survey_data',payload).execute(); - - $location.path('/ews2'); - - - } - - }); diff --git a/platforms/android/assets/www/scripts/controllers/ews2.js b/platforms/android/assets/www/scripts/controllers/ews2.js deleted file mode 100644 index f57c3cf7..00000000 --- a/platforms/android/assets/www/scripts/controllers/ews2.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('Ews2Ctrl', function ($scope,$location,UserData,UserDetails,Guid) { - - $scope.pageTitle = "Weekly Check In"; - - $scope.ews2 = UserData.query('ews2'); - - $scope.onClick=function(){ - - - var el = JSON.stringify($('form').serializeArray()) || {name:'ews', value:null}; ; - var sessionID = Guid.create(); - - var payload = { - userId: UserDetails.find, - survey: 'ews2', - questionDataLabel: 'ews2', - questionValue: el, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading('livewell_survey_data',payload).execute(); - console.log(payload); - - $location.path('/'); - - } - - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/exit.js b/platforms/android/assets/www/scripts/controllers/exit.js deleted file mode 100644 index 064b8b5c..00000000 --- a/platforms/android/assets/www/scripts/controllers/exit.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ExitCtrl - * @description - * # ExitCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ExitCtrl', function ($scope) { - - navigator.app.exitApp(); - - }); diff --git a/platforms/android/assets/www/scripts/controllers/fetch_content.js b/platforms/android/assets/www/scripts/controllers/fetch_content.js deleted file mode 100644 index 6039c3de..00000000 --- a/platforms/android/assets/www/scripts/controllers/fetch_content.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:FetchContentCtrl - * @description - * # FetchContentCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('FetchContentCtrl', function ($scope,$http) { - - var SERVER_LOCATION = 'https://livewell2.firebaseio.com/'; - var SECURE_CONTENT = 'https://mohrlab.northwestern.edu/livewell-dash/content/'; - var APP_COLLECTIONS_ROUTE = 'appcollections'; - var USER_ID = $scope.userID; - var ROUTE_SUFFIX = '.json'; - - $scope.error = ''; - $scope.errorColor = 'white'; - $scope.errorClass = ''; - - var downloadContent = function(app_collections){ - - if($scope.userID != undefined){localStorage['userID'] = $scope.userID; } - - _.each(app_collections,function(el){ - $http.get(SERVER_LOCATION + "users/" + localStorage['userID'] + "/" + el.route + ROUTE_SUFFIX ) - .success(function(response) { - - if(el.route == 'team' && response == null){ - alert('THE USER HAS NOT BEEN CONFIGURED!'); - } - - if (response.length != undefined){ - localStorage[el.route] = JSON.stringify(_.compact(response)); - } - else { - localStorage[el.route] = JSON.stringify(response); - } - }).error(function(err) { - $scope.error = 'Error on: ' + el.label; - $scope.errorColor = 'red'; - }); - }) - } - - $scope.fetchSecureContent = function(){ - - $http.get(SECURE_CONTENT +'?user='+ localStorage['userID'] +'&token=' + localStorage['registrationid']) - .success(function(content) { - localStorage['secureContent'] = JSON.stringify(content); - }).error(function(err) { - $scope.error = 'No internet connection!'; - $scope.errorColor = 'red'; - }); - } - - $scope.fetchContent = function(){ - $scope.errorColor = 'green'; - $scope.fetchSecureContent(); - $http.get(SERVER_LOCATION + APP_COLLECTIONS_ROUTE + ROUTE_SUFFIX) - .success(function(app_collections) { - downloadContent(_.compact(app_collections)); - }).error(function(err) { - $scope.error = 'No internet connection!'; - $scope.errorColor = 'red'; - }); - } - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/foundations.js b/platforms/android/assets/www/scripts/controllers/foundations.js deleted file mode 100644 index 3eb01464..00000000 --- a/platforms/android/assets/www/scripts/controllers/foundations.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:FoundationsCtrl - * @description - * # FoundationsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('FoundationsCtrl', function ($scope) { - - $scope.pageTitle = "Foundations"; - - $scope.mainLinks = [ - {name:"Overview", id:162, post:'foundations', type:'lesson_player'}, - {name:"Basic Facts ", id:183, post:'foundations', type:'lesson_player'}, - {name:"Medications", id:184, post:'foundations', type:'lesson_player'}, - {name:"Lifestyle Skills", id:185, post:'foundations', type:'lesson_player'}, - {name:"Coping Skills", id:186, post:'foundations', type:'lesson_player'}, - {name:"Team", id:187, post:'foundations', type:'lesson_player'}, - {name:"Awareness", id:188, post:'foundations', type:'lesson_player'}, - {name:"Action", id:189, post:'foundations', type:'lesson_player'}, - {name:"Conclusion", id:250, post:'foundations', type:'lesson_player'}] - - }); diff --git a/platforms/android/assets/www/scripts/controllers/home.js b/platforms/android/assets/www/scripts/controllers/home.js deleted file mode 100644 index f4daefec..00000000 --- a/platforms/android/assets/www/scripts/controllers/home.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:HomeCtrl - * @description - * # HomeCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('HomeCtrl', function ($scope, Pound) { - - - var possibleGreetings = ['Welcome back!','Hello!','Greetings!','Good to see you!']; - - $scope.mainLinks = [ - {name:"Foundations", href:"foundations"}, - {name:"Toolbox", href:"skills"}, - {name:"Wellness Plan", href:"wellness/resources"}, - ]; - - var requiredUserCollections = []; - - $scope.appConfigured = localStorage['appConfigured']; - - $scope.verifyUserContent = function(){ - - $scope.errorVerifyUserColor = 'green'; - } - - $scope.startTrial = function(){ - $scope.startDate = new Date().getDay() - localStorage['appConfigured'] = true; - window.location.href = ""; - } - - $scope.dailyCheckInCompleteToday = function(){ - - var collection = Pound.find('dailyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - - function dropTime(dt){ - - var datetime = dt; - - datetime.setHours(0) - datetime.setMinutes(0); - datetime.setSeconds(0); - datetime.setMilliseconds(0); - - return datetime.toString() - - } - - if (dropTime(mostRecentResponseDateTime) == dropTime(new Date()) ){ - return true - } else { - return false - } - - }; - - $scope.weeklyCheckInCompleteThisWeek = function(){ - - var collection = Pound.find('weeklyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - var now = moment(new Date()); - var lastSundayMorning = moment(new Date()).subtract(new Date().getDay(),'d').set({hour:0,minute:0,second:0,millisecond:0}); - - var validResponse = moment(mostRecentResponseDateTime).isAfter(lastSundayMorning) && moment(mostRecentResponseDateTime).isBefore(now); - - if (collection.length == 0){ - return false - } - else if (validResponse){ - return true - } else { - return false - } - - }; - - $scope.dailyReviewCompleteToday = function(){ - var dailyReviewComplete = false; - var thisMorning = moment(new Date()).set({hour:0,minute:0,second:0,millisecond:0}); - - var collection = Pound.find('dailyReviewStarted'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - if(moment(mostRecentResponseDateTime).isAfter(thisMorning)){ - - dailyReviewComplete = true; - } - - return dailyReviewComplete - - - } - - $scope.lastDailyCheckInWasEmergency = function(){ - var collection = Pound.find('dailyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - - if(mostRecentResponse.wellness != '-4' && mostRecentResponse.wellness != '4'){ - return false - } - else{ - return true - } - } - - $scope.greeting = possibleGreetings[Math.floor(Math.random()*possibleGreetings.length)]; - - $(".modal-backdrop").remove(); - - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/instructions.js b/platforms/android/assets/www/scripts/controllers/instructions.js deleted file mode 100644 index aa98396a..00000000 --- a/platforms/android/assets/www/scripts/controllers/instructions.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:InstructionsCtrl - * @description - * # InstructionsCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('InstructionsCtrl', function ($scope, StaticContent) { - $scope.pageTitle = "Instructions"; - - $scope.mainLinks = [ - {id:198,name:"Introduction", post:"instructions"}, - {id:201,name:"Settings", post:"instructions"}, - {id:199,name:"Toolbox", post:"instructions"}, - {id:202,name:"Coach", post:"instructions"}, - {id:203,name:"Psychiatrist", post:"instructions"}, - {id:204,name:"Foundations", post:"instructions"}, - {id:205,name:"Daily Check In", post:"instructions"}, - {id:372,name:"Weekly Check In", post:"instructions"}, - {id:369,name:"Daily Review", post:"instructions"}, - {id:371,name:"Wellness Plan", post:"instructions"}, - {id:370,name:"Charts", post:"instructions"} - ] - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/intervention.js b/platforms/android/assets/www/scripts/controllers/intervention.js deleted file mode 100644 index 466ab0cd..00000000 --- a/platforms/android/assets/www/scripts/controllers/intervention.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:InterventionCtrl - * @description - * # InterventionCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('InterventionCtrl', function ($scope, $routeParams,Questions) { - $scope.pageTitle = "Daily Review"; - - console.log($routeParams); - $scope.questionGroups = Questions.query($routeParams.code); - - $scope.hideProgressBar = true; - - var pr = new PurpleRobot(); - pr.disableTrigger('dailyCheckIn1').disableTrigger('dailyCheckIn2').disableTrigger('dailyCheckIn3').disableTrigger('dailyCheckIn4').disableTrigger('dailyCheckIn5').disableTrigger('dailyCheckIn6').execute(); - - }); diff --git a/platforms/android/assets/www/scripts/controllers/lesson_player.js b/platforms/android/assets/www/scripts/controllers/lesson_player.js deleted file mode 100644 index ca0d839f..00000000 --- a/platforms/android/assets/www/scripts/controllers/lesson_player.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LessonPlayerCtrl - * @description - * # LessonPlayerCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LessonPlayerCtrl', function ($scope, $routeParams, $sce, $location) { - - -$scope.getChapterContents = function (chapter_id, appContent) { - var search_criteria = { - id: parseInt(chapter_id) - }; - - var chapter_contents_list = _.where(appContent, search_criteria)[0].element_list.toString().split(","); - var chapter_contents = []; - - // console.log("Chapter selected:",_.where(appContent, search_criteria)[0]); - // console.log("Chapter contents list:",chapter_contents_list); - - _.each(chapter_contents_list, function (element) { - // console.log(parseInt(element)); - chapter_contents.push(_.where(appContent, { - id: parseInt(element) - })[0]); - }); - return chapter_contents; -}; - -$scope.lessons = JSON.parse(localStorage['lessons']); - -$scope.backButton = '&lt;'; -$scope.backButtonClass = 'btn btn-info'; -$scope.nextButton = '&gt;'; -$scope.nextButtonClass = 'btn btn-primary'; -$scope.currentSlideIndex = 0; - -$scope.pageTitle = _.where($scope.lessons, {id:parseInt($routeParams.id)})[0].pretty_name; - -$scope.currentChapterContents = $scope.getChapterContents($routeParams.id,$scope.lessons); - -$scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - - -$scope.next = function(){ - if ($scope.currentSlideIndex+1 < $scope.currentChapterContents.length){ - $scope.currentSlideIndex++; - $scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - } - else { - if ($routeParams.post == undefined) - { window.location.href = '#/';} - else { - window.location.href = '#/' + $routeParams.post; - } - } - - if ($scope.currentSlideIndex+1 == $scope.currentChapterContents.length){ - $scope.nextButton = '&gt;'; - } - else{ - $scope.nextButton = '&gt;'; - - } -} - -$scope.back = function(){ - if ($scope.currentSlideIndex > 0){ - $scope.currentSlideIndex--; - $scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - } - -} - -}); diff --git a/platforms/android/assets/www/scripts/controllers/load_interventions.js b/platforms/android/assets/www/scripts/controllers/load_interventions.js deleted file mode 100644 index 8bde5f7e..00000000 --- a/platforms/android/assets/www/scripts/controllers/load_interventions.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LoadInterventionsReviewCtrl - * @description - * # LoadInterventionsReviewCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LoadInterventionsCtrl', function ($scope, UserData, $location, $filter) { - - $scope.pageTitle = 'Topics'; - - $scope.hierarchy = UserData.query('interventionLabels'); - $scope.interventionGroups = UserData.query('dailyReview') - - debugger; - - $scope.goToIntervention = function(code){ - - $location.path('intervention/' + $filter('filter')($scope.interventionGroups,{code:code},true)[0].questionSet); - - } - - }); diff --git a/platforms/android/assets/www/scripts/controllers/localstoragebackuprestore.js b/platforms/android/assets/www/scripts/controllers/localstoragebackuprestore.js deleted file mode 100644 index a9764368..00000000 --- a/platforms/android/assets/www/scripts/controllers/localstoragebackuprestore.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LocalstoragebackuprestoreCtrl - * @description - * # LocalstoragebackuprestoreCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LocalstoragebackuprestoreCtrl', function ($scope, $sanitize) { - - - - $scope.initiateLocalBackup = function(){ - $scope.localStorageContents = JSON.stringify(JSON.stringify(localStorage)); - } - - $scope.restoreLocalBackup = function(){ - var restoreContent = JSON.parse(JSON.parse($scope.localStorageContents)); - - _.each(_.keys(restoreContent), function(el){ - - debugger; - localStorage[el] = eval("restoreContent." + el); - - }); - localStorage = JSON.parse($scope.localStorageContents); - //open file or copy and paste string and replace localStorage - - } - - $scope.updateRemoteService = function(serverURL){ - - //use the local app-collections store to iterate over all local collections and post to valid routes - - } - - $scope.wipeLocalStorage = function(){ - localStorage.clear(); - } - - }); diff --git a/platforms/android/assets/www/scripts/controllers/login.js b/platforms/android/assets/www/scripts/controllers/login.js deleted file mode 100644 index 2317e239..00000000 --- a/platforms/android/assets/www/scripts/controllers/login.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LoginCtrl - * @description - * # LoginCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LoginCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/main.js b/platforms/android/assets/www/scripts/controllers/main.js deleted file mode 100644 index 7e11947d..00000000 --- a/platforms/android/assets/www/scripts/controllers/main.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:MainCtrl - * @description - * # MainCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MainCtrl', function ($scope, UserDetails) { - - $scope.pageTitle = 'Main Menu'; - - $scope.mainLinks = [ - {name:"Foundations", href:"foundations"}, - {name:"Toolbox", href:"skills"}, - {name:"Wellness Plan", href:"wellness/resources"}, - ]; - - // $scope.showLogin = function(){ - - // if (UserDetails.find.id == null){ - // return true - // } - // else { - // return false - // } - - // } - - }); diff --git a/platforms/android/assets/www/scripts/controllers/medications.js b/platforms/android/assets/www/scripts/controllers/medications.js deleted file mode 100644 index c67c03e5..00000000 --- a/platforms/android/assets/www/scripts/controllers/medications.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MedicationsCtrl', function ($scope,UserData) { - $scope.pageTitle = "My Medications"; - $scope.medications = UserData.query('medications'); - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/myskills.js b/platforms/android/assets/www/scripts/controllers/myskills.js deleted file mode 100644 index a0c0e3b2..00000000 --- a/platforms/android/assets/www/scripts/controllers/myskills.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:MyskillsCtrl - * @description - * # MyskillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MyskillsCtrl', function ($scope,$location,$filter,$route) { - - $scope.currentSkillId = null; - - $scope.currentSkillContent = null; - - $scope.lessons = JSON.parse(localStorage['lessons']); - - if (JSON.parse(localStorage['mySkills'] != undefined)){ - $scope.mySkills = _.uniq(JSON.parse(localStorage['mySkills'])); - } else { - $scope.mySkills = []; - } - - $scope.skill = function(id){ - return $filter('filter')($scope.lessons,{id:id},true) - }; - - $scope.showSkill = function(id){ - $scope.currentSkillId = id; - $scope.currentSkillContent = $scope.skill(id)[0].main_content; - } - - $scope.removeSkill = function () { - - var id = $scope.currentSkillId; - var array = $scope.mySkills; - var index = array.indexOf(id); - - if (index > -1) { - array.splice(index, 1); - } - - $scope.mySkills = array; - - localStorage['mySkills'] = JSON.stringify($scope.mySkills); - - $route.reload() - - } - - - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/personalsnapshot.js b/platforms/android/assets/www/scripts/controllers/personalsnapshot.js deleted file mode 100644 index c18ce6d2..00000000 --- a/platforms/android/assets/www/scripts/controllers/personalsnapshot.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:PersonalsnapshotCtrl - * @description - * # PersonalsnapshotCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('PersonalsnapshotCtrl', function ($scope, UserData) { - - // var sleepRoutineRanges = {}; - - // sleepRoutineRanges.MoreSevere = 12; - // sleepRoutineRanges.More = 9; - // sleepRoutineRanges.Less = 7; - // sleepRoutineRanges.LessSevere = 4; - - // sleepRoutineRanges.BedTimeStrt_MT = '2300'; - // sleepRoutineRanges.BedtimeStop_MT = '0100'; - - // sleepRoutineRanges.RiseTimeStrt_MT = '0630'; - // sleepRoutineRanges.RiseTimeStop_MT = '0830'; - - $scope.sleepRoutineRanges = UserData.query('sleepRoutineRanges'); - $scope.currentClinicalStatusCode = UserData.query('clinicalStatus').currentCode; - - }); diff --git a/platforms/android/assets/www/scripts/controllers/resources.js b/platforms/android/assets/www/scripts/controllers/resources.js deleted file mode 100644 index 2de3bf3a..00000000 --- a/platforms/android/assets/www/scripts/controllers/resources.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ResourcesCtrl - * @description - * # ResourcesCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ResourcesCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/risks.js b/platforms/android/assets/www/scripts/controllers/risks.js deleted file mode 100644 index ed681bcc..00000000 --- a/platforms/android/assets/www/scripts/controllers/risks.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:RisksCtrl - * @description - * # RisksCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('RisksCtrl', function ($scope,UserData) { - //risk variables - $scope.smarts = UserData.query('smarts'); - - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/schedule.js b/platforms/android/assets/www/scripts/controllers/schedule.js deleted file mode 100644 index b079ad15..00000000 --- a/platforms/android/assets/www/scripts/controllers/schedule.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ScheduleCtrl', function ($scope,UserData) { - $scope.pageTitle = "My Schedule"; - $scope.schedules = UserData.query('schedule'); - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/settings.js b/platforms/android/assets/www/scripts/controllers/settings.js deleted file mode 100644 index 903c8e4c..00000000 --- a/platforms/android/assets/www/scripts/controllers/settings.js +++ /dev/null @@ -1,269 +0,0 @@ -'use strict'; -/** - * @ngdoc function - * @name livewellApp.controller:SettingsCtrl - * @description - * # SettingsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SettingsCtrl', function($scope) { - $scope.pageTitle = 'Settings'; - $scope.times = [{ - value: "00:00", - label: "12:00AM" - }, { - value: "00:30", - label: "12:30AM" - }, { - value: "01:00", - label: "1:00AM" - }, { - value: "01:30", - label: "1:30AM" - }, { - value: "02:00", - label: "2:00AM" - }, { - value: "02:30", - label: "2:30AM" - }, { - value: "03:00", - label: "3:00AM" - }, { - value: "03:30", - label: "3:30AM" - }, { - value: "04:00", - label: "4:00AM" - }, { - value: "04:30", - label: "4:30AM" - }, { - value: "05:00", - label: "5:00AM" - }, { - value: "05:30", - label: "5:30AM" - }, { - value: "06:00", - label: "6:00AM" - }, { - value: "06:30", - label: "6:30AM" - }, { - value: "07:00", - label: "7:00AM" - }, { - value: "07:30", - label: "7:30AM" - }, { - value: "08:00", - label: "8:00AM" - }, { - value: "08:30", - label: "8:30AM" - }, { - value: "09:00", - label: "9:00AM" - }, { - value: "09:30", - label: "9:30AM" - }, { - value: "10:00", - label: "10:00AM" - }, { - value: "10:30", - label: "10:30AM" - }, { - value: "11:00", - label: "11:00AM" - }, { - value: "11:30", - label: "11:30AM" - }, { - value: "12:00", - label: "12:00PM" - }, { - value: "12:30", - label: "12:30PM" - }, { - value: "13:00", - label: "1:00PM" - }, { - value: "13:30", - label: "1:30PM" - }, { - value: "14:00", - label: "2:00PM" - }, { - value: "14:30", - label: "2:30PM" - }, { - value: "15:00", - label: "3:00PM" - }, { - value: "15:30", - label: "3:30PM" - }, { - value: "16:00", - label: "4:00PM" - }, { - value: "16:30", - label: "4:30PM" - }, { - value: "17:00", - label: "5:00PM" - }, { - value: "17:30", - label: "5:30PM" - }, { - value: "18:00", - label: "6:00PM" - }, { - value: "18:30", - label: "6:30PM" - }, { - value: "19:00", - label: "7:00PM" - }, { - value: "19:30", - label: "7:30PM" - }, { - value: "20:00", - label: "8:00PM" - }, { - value: "20:30", - label: "8:30PM" - }, { - value: "21:00", - label: "9:00PM" - }, { - value: "21:30", - label: "9:30PM" - }, { - value: "22:00", - label: "10:00PM" - }, { - value: "22:30", - label: "10:30PM" - }, { - value: "23:00", - label: "11:00PM" - }, { - value: "23:30", - label: "11:30PM" - }]; - - if (localStorage['checkinPrompt'] == undefined) { - $scope.checkinPrompt = { - value: "00:00", - label: "12:00AM" - }; - - } else { - $scope.checkinPrompt = JSON.parse(localStorage['checkinPrompt']); - } - - $scope.savePromptSchedule = function() { - - - (new PurpleRobot()).emitReading('livewell_prompt_registration', { - startTime: $scope.checkinPrompt.value, - registrationId: localStorage.registrationId - }).execute(); - - - var checkInValues = $scope.checkinPrompt.value.split(":"); - localStorage['checkinPrompt'] = JSON.stringify($scope.checkinPrompt); - //new Date(year, month, day, hours, minutes, seconds, milliseconds) - var dailyCheckInDateTime1 = new Date(2016, 0, 1, parseInt(checkInValues[0])-1, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd1 = new Date(2016, 0, 1, parseInt(checkInValues[0])-1, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime2 = new Date(2016, 0, 1, parseInt(checkInValues[0]), parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd2 = new Date(2016, 0, 1, parseInt(checkInValues[0]), parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime3 = new Date(2016, 0, 1, parseInt(checkInValues[0])+1, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd3 = new Date(2016, 0, 1, parseInt(checkInValues[0])+1, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime4 = new Date(2016, 0, 1, parseInt(checkInValues[0])+2, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd4 = new Date(2016, 0, 1, parseInt(checkInValues[0])+2, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime5 = new Date(2016, 0, 1, parseInt(checkInValues[0])+3, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd5 = new Date(2016, 0, 1, parseInt(checkInValues[0])+3, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime6 = new Date(2016, 0, 1, parseInt(checkInValues[0])+4, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd6 = new Date(2016, 0, 1, parseInt(checkInValues[0])+4, parseInt(checkInValues[1]) + 1, 0); - var dailyReviewRenewalDateTime = new Date(2016, 0, 1, 2, 0, 0); - var dailyReviewRenewalDateTimeEnd = new Date(2016, 0, 1, 2, 1, 0); - var pr = new PurpleRobot(); - - - - // var dailyCheckInDialog = - // pr.showScriptNotification({ - // title: "LiveWell", - // message: "Can you complete your LiveWell activities now?", - // isPersistent: true, - // isSticky: false, - // script: pr.launchApplication('edu.northwestern.cbits.livewell') - // }); - - // var dailyReviewRenew = - // pr.enableTrigger('dailyCheckIn1').enableTrigger('dailyCheckIn2').enableTrigger('dailyCheckIn3').enableTrigger('dailyCheckIn4').enableTrigger('dailyCheckIn5').enableTrigger('dailyCheckIn6'); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn1', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime1, - // endAt: dailyCheckinDateTimeEnd1 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn2', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime2, - // endAt: dailyCheckinDateTimeEnd2 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn3', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime3, - // endAt: dailyCheckinDateTimeEnd3 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn4', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime4, - // endAt: dailyCheckinDateTimeEnd4 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn5', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime5, - // endAt: dailyCheckinDateTimeEnd5 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn6', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime6, - // endAt: dailyCheckinDateTimeEnd6 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyReviewReset', - // random: false, - // script: dailyReviewRenew, - // startAt: dailyReviewRenewalDateTime, - // endAt: dailyReviewRenewalDateTimeEnd - // }).execute(); - - $("form").append('<div class="alert alert-success">Your prompt times have been updated.</div>'); - - }; - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/setup.js b/platforms/android/assets/www/scripts/controllers/setup.js deleted file mode 100644 index 2e0ba11b..00000000 --- a/platforms/android/assets/www/scripts/controllers/setup.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SetupCtrl - * @description - * # SetupCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SetupCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/skills.js b/platforms/android/assets/www/scripts/controllers/skills.js deleted file mode 100644 index 2836c901..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsCtrl', function ($scope) { - $scope.pageTitle = "Toolbox"; - - $scope.mainLinks = [ - {id:'fundamentals',name:"Making Changes"}, - {id:'awareness',name:"Self-Assessment"}, - {id:'lifestyle',name:"Lifestyle"}, - {id:'coping',name:"Coping"}, - {id:'team',name:"Team"}, - - ] - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/skills_awareness.js b/platforms/android/assets/www/scripts/controllers/skills_awareness.js deleted file mode 100644 index 1ed61db5..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills_awareness.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsAwarenessCtrl - * @description - * # SkillsAwarenessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsAwarenessCtrl', function ($scope) { - - $scope.pageTitle = "Self-Assessment"; - - $scope.mainLinks = [ - {name:"Symptoms and Triggers", id:194, post:'skills_awareness'}, - {name:"Skills and Strengths", id:196, post:'skills_awareness'}, - {name:"Supports and Environment", id:197, post:'skills_awareness'} - ] - }); - - - - diff --git a/platforms/android/assets/www/scripts/controllers/skills_coping.js b/platforms/android/assets/www/scripts/controllers/skills_coping.js deleted file mode 100644 index 0fd71d97..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills_coping.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCopingCtrl - * @description - * # SkillsCopingCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsCopingCtrl', function ($scope) { - - $scope.pageTitle = "Coping"; - - $scope.mainLinks = [ - {name:"Depression - Dial Up", id:550, post:'skills_coping',type:'summary_player'}, - {name:"Mania - Dial Down", id:551, post:'skills_coping',type:'summary_player'} - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/skills_fundamentals.js b/platforms/android/assets/www/scripts/controllers/skills_fundamentals.js deleted file mode 100644 index f835b891..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills_fundamentals.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsFundamentalsCtrl', function ($scope) { - - $scope.pageTitle = "Making Changes"; - - $scope.mainLinks = [ - {name:"Get Prepared", id:190, post:'skills_fundamentals'}, - {name:"Set Goal", id:193, post:'skills_fundamentals'}, - {name:"Develop Plan",id:191,post:'skills_fundamentals'}, - {name:"Monitor Behavior", id:192, post:'skills_fundamentals'}, - {name:"Evaluate Performance",id:195,post:'skills_fundamentals'} - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/skills_lifestyle.js b/platforms/android/assets/www/scripts/controllers/skills_lifestyle.js deleted file mode 100644 index 9785c8f3..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills_lifestyle.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsLifestyleCtrl - * @description - * # SkillsLifestyleCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsLifestyleCtrl', function ($scope) { - $scope.pageTitle = "Lifestyle"; - - $scope.mainLinks = [ - {name:"Sleep", id:543, post:'skills_lifestyle'}, - {name:"Medications", id:544, post:'skills_lifestyle'}, - {name:"Attend", id:545, post:'skills_lifestyle'}, - {name:"Routine", id:546, post:'skills_lifestyle'}, - {name:"Tranquility", id:547, post:'skills_lifestyle'}, - {name:"Socialization", id:562, post:'skills_lifestyle'} - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/skills_team.js b/platforms/android/assets/www/scripts/controllers/skills_team.js deleted file mode 100644 index 60a6c139..00000000 --- a/platforms/android/assets/www/scripts/controllers/skills_team.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsTeamCtrl - * @description - * # SkillsTeamCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsTeamCtrl', function ($scope) { - $scope.pageTitle = "Team"; - - // $scope.mainLinks = [ - // {name:"Duality", id:553, post:'skills_team'}, - // {name:"Humilty", id:554, post:'skills_team'}, - // {name:"Obligation", id:555, post:'skills_team'}, - // {name:"Sacrifice", id:556, post:'skills_team'}, - // {name:"Asking for Help", id:557, post:'skills_team'}, - // {name:"Giving Back", id:558, post:'skills_team'}, - // {name:"Doctor Checklist", id:559, post:'skills_team'}, - // {name:"Support Checklist", id:560, post:'skills_team'}, - // {name:"Hospital Checklist", id:561, post:'skills_team'} - // ]; - - $scope.mainLinks = [ - {name:"Psychiatrist", id:580, post:'skills_team'}, - {name:"Supports", id:581, post:'skills_team'}, - {name:"Hospital", id:582, post:'skills_team'} - ]; - - - - }); diff --git a/platforms/android/assets/www/scripts/controllers/summary_player.js b/platforms/android/assets/www/scripts/controllers/summary_player.js deleted file mode 100644 index 1bb3471f..00000000 --- a/platforms/android/assets/www/scripts/controllers/summary_player.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SummaryPlayerCtrl - * @description - * # SummaryPlayerCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SummaryPlayerCtrl', function ($scope, $routeParams, $location) { - - $scope.getChapterContents = function (chapter_id, appContent) { - var search_criteria = { - id: parseInt(chapter_id) - }; - - var chapter = _.where(appContent, search_criteria)[0]; - - chapter.element_array = _.where(appContent, search_criteria)[0].element_list.toString().split(","); - - chapter.contents = []; - // console.log("Chapter selected:",_.where(appContent, search_criteria)[0]); - // console.log("Chapter contents list:",chapter_contents_list); - - _.each(chapter.element_array, function (element) { - // console.log(parseInt(element)); - chapter.contents.push(_.where(appContent, { - id: parseInt(element) - })[0]); - }); - - return chapter; - }; - - $scope.showAddSkills = false; - - $scope.lessons = JSON.parse(localStorage['lessons']); - - $scope.chapter = $scope.getChapterContents($routeParams.id,$scope.lessons); - - $scope.pageTitle = $scope.chapter.pretty_name; - - $scope.page = $scope.chapter.contents; - - $scope.addToMySkills = function(){ - - var id = $scope.page.id; - - if (localStorage['mySkills'] == undefined){ - - localStorage['mySkills'] = JSON.stringify([id]); - } - else { - var mySkills = JSON.parse(localStorage['mySkills']); - - mySkills.push(parseInt(id)); - localStorage['mySkills'] = JSON.stringify(mySkills); - } - - $location.path('/mySkills'); - - } - debugger; - - }); diff --git a/platforms/android/assets/www/scripts/controllers/team.js b/platforms/android/assets/www/scripts/controllers/team.js deleted file mode 100644 index bf249f3a..00000000 --- a/platforms/android/assets/www/scripts/controllers/team.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('TeamCtrl', function ($scope, UserData) { - $scope.pageTitle = "My Team"; - - $scope.team = UserData.query('team'); - $scope.secureTeam = UserData.query('secureContent').team; - }); diff --git a/platforms/android/assets/www/scripts/controllers/usereditor.js b/platforms/android/assets/www/scripts/controllers/usereditor.js deleted file mode 100644 index c2f0825d..00000000 --- a/platforms/android/assets/www/scripts/controllers/usereditor.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:UsereditorCtrl - * @description - * # UsereditorCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('UsereditorCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/android/assets/www/scripts/controllers/weekly_check_in.js b/platforms/android/assets/www/scripts/controllers/weekly_check_in.js deleted file mode 100644 index 77259df0..00000000 --- a/platforms/android/assets/www/scripts/controllers/weekly_check_in.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:WeeklyCheckInCtrl - * @description - * # WeeklyCheckInCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('WeeklyCheckInCtrl', function($scope, $location, $routeParams, Questions, Guid, UserDetails, Pound) { - - - $scope.pageTitle = 'Weekly Check In'; - - var phq_questions = Questions.query('phq9'); - var amrs_questions = Questions.query('amrs'); - - //combine questions into one group for the page - $scope.questionGroups = [phq_questions, amrs_questions]; - - //allows you to pass a question index url param into the question group directive - $scope.questionIndex = parseInt($routeParams.questionIndex) - 1 || 0; - - $scope.skippable = false; - - //overrides questiongroup default submit action to send data to PR - $scope.submit = function() { - - var _SAVE_LOCATION = 'livewell_survey_data'; - - $scope.responseArray[$scope.currentIndex] = $('form').serializeArray()[0]; - - var responses = _.flatten($scope.responseArray); - - var sessionID = Guid.create(); - - - - _.each(responses, function(el) { - - var payload = { - userId: UserDetails.find, - survey: $scope.pageTitle, - questionDataLabel: el.name, - questionValue: el.value, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading(_SAVE_LOCATION, payload).execute(); - console.log(payload); - - }); - - var responsePayload = { - sessionID: sessionID, - responses: responses - }; - - Pound.add('weeklyCheckIn', responsePayload); - - var lWR = responses; - var phq8Sum = parseInt(lWR[0].value) + parseInt(lWR[1].value) + parseInt(lWR[2].value) + parseInt(lWR[3].value) + parseInt(lWR[4].value) + parseInt(lWR[5].value) + parseInt(lWR[6].value) + parseInt(lWR[7].value); - var amrsSum = parseInt(lWR[8].value) + parseInt(lWR[9].value) + parseInt(lWR[10].value) + parseInt(lWR[11].value) + parseInt(lWR[12].value); - - if (_.where(JSON.parse(localStorage.team, { - role: 'Psychiatrist' - })[0] != undefined)) { - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - } else { - $scope.psychiatristEmail = ''; - } - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - - if (amrsSum >= 10) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'coach', - message: 'Altman Mania Rating Scale >= 10' - }).execute(); - (new PurpleRobot()).emitReading('livewell_email', { - coachEmail: $scope.coachEmail, - message: 'Altman Mania Rating Scale >= 10' - }).execute(); - } - if (amrsSum >= 16) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'psychiatrist', - message: 'Altman Mania Rating Scale >= 16' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - message: 'Altman Mania Rating Scale >= 16' - }).execute(); - } - if (phq8Sum >= 15) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'coach', - message: 'PHQ8 >= 15' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - coachEmail: $scope.coachEmail, - message: 'PHQ8 >= 15' - }).execute(); - } - if (phq8Sum >= 20) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'psychiatrist', - message: 'PHQ8 >= 20' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - message: 'PHQ8 >= 20' - }).execute(); - } - - $location.path("/ews"); - - } - - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/controllers/wellness.js b/platforms/android/assets/www/scripts/controllers/wellness.js deleted file mode 100644 index 58e18178..00000000 --- a/platforms/android/assets/www/scripts/controllers/wellness.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:WellnessCtrl - * @description - * # WellnessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('WellnessCtrl', function ($scope,$routeParams) { - $scope.pageTitle = 'Wellness Plan'; - - $scope.section = $routeParams.section || ""; - - $scope.showResources = function(){ - $scope.riskVisible = false; - $scope.awarenessVisible = false; - $scope.resourcesVisible = true; - $('button#awareness').removeClass('btn-active'); - $('button#risk').removeClass('btn-active'); - $('button#resources').addClass('btn-active'); - } - - $scope.showRisk = function(){ - $scope.awarenessVisible = false; - $scope.resourcesVisible = false; - $scope.riskVisible = true; - $('button#awareness').removeClass('btn-active'); - $('button#risk').addClass('btn-active'); - $('button#resources').removeClass('btn-active'); - } - - $scope.showAwareness = function(){ - $scope.resourcesVisible = false; - $scope.riskVisible = false; - $scope.awarenessVisible = true; - $('button#resources').removeClass('btn-active'); - $('button#risk').removeClass('btn-active'); - $('button#awareness').addClass('btn-active'); - - } - - - switch($scope.section) { - case "resources": - $scope.showResources(); - break; - case "awareness": - $scope.showAwareness(); - break; - case "risk": - $scope.showRisk(); - break; - default: - $scope.resourcesVisible = false; - $scope.riskVisible = false; - $scope.awarenessVisible = false; - } - - - - - }); diff --git a/platforms/android/assets/www/scripts/questionGroups/questiongroup.js b/platforms/android/assets/www/scripts/questionGroups/questiongroup.js deleted file mode 100644 index c37469b7..00000000 --- a/platforms/android/assets/www/scripts/questionGroups/questiongroup.js +++ /dev/null @@ -1,204 +0,0 @@ -'use strict'; - -/** - * @ngdoc directive - * @name livewellApp.directive:questionGroup - * @description - * # questionGroup - */ -angular.module('livewellApp') - .directive('questionGroup', function ($location) { - return { - templateUrl: 'views/questionGroups/question_group.html', - restrict: 'E', - link: function postLink(scope, element, attrs) { - - scope._LABELS = scope.labels || [ - {name:'back',label:'&lt;'}, - {name:'next',label:'&gt;'}, - {name:'submit', label:'Save'} - ]; - - scope._SURVEY_FAILURE_LABEL = scope.surveyFailureLabel || '<b>Unfortunately, this survey failed to load:</b>'; - - scope.questionGroups = _.flatten(scope.questionGroups); - scope.questionAnswered = []; - - scope.responseArray = []; - - scope.surveyFailure = function(){ - - var error = {}; - //there are no questions - if (scope.questionGroups.length == 0 && _.isArray(scope.questionGroups)) { - error = { error:true, message:"There are no questions available." } - } - //questions are not in an array - else if (_.isArray(scope.questionGroups) == false){ - error = { error:true, message:"Questions are not properly formatted." } - } - else { - error = { error:false } - } - - if (error.error == true){ - console.error(error); - } - - return error - - } - - scope.label = function(labelName){ - return _.where(scope._LABELS, {name:labelName})[0].label - } - - scope.numberOfQuestions = scope.questionGroups.length; - - scope.randomizationScheme = {}; - - scope.currentIndex = scope.questionIndex || 0; - - scope.showQuestion = function(questionPosition){ - - var dataLabelToRandomize = scope.questionGroups[scope.currentIndex].questionDataLabel; - - var numResponsesToRandomize = _.where(scope.questionGroups,{questionDataLabel:dataLabelToRandomize}).length; - - if (numResponsesToRandomize > 1){ - - var questionsToRandomize = _.where(scope.questionGroups,{questionDataLabel:dataLabelToRandomize}); - - if(scope.randomizationScheme[dataLabelToRandomize] == undefined){ - scope.randomizationScheme[dataLabelToRandomize] = Math.floor(Math.random() * (numResponsesToRandomize)); - } - - - var randomQuestionToPick = questionsToRandomize[scope.randomizationScheme[dataLabelToRandomize]]; - - scope.currentIndex = _.findIndex(scope.questionGroups,{id:randomQuestionToPick.id}); - - // console.log(questionPosition, scope.currentIndex,questionPosition == scope.currentIndex,scope.questionGroups,{id:randomQuestionToPick.id}); - - } - - - return questionPosition == scope.currentIndex; - } - - scope.goesToIndex = ""; - - scope.goesTo = function(goesToId,index){ - - scope.skipArray[index] = true; - - for (var index = 0; index < scope.questionGroups.length; index++) { - if (scope.questionGroups[index].questionDataLabel == goesToId){ - scope.goesToIndex = index; - } - } - - // alert(scope.goesToIndex,goesToId ); - - } - - scope.next = function(question,index){ - // console.log(question); - - scope.responseArray[scope.currentIndex] = $('form').serializeArray()[0]; - - if (question.responses.length == 1 && question.responses[0].goesTo != "") - { - scope.goesTo(question.responses[0].goesTo); - } - - if (scope.goesToIndex != "") - { - - scope.currentIndex = scope.goesToIndex; - - } - else { - - if( scope.skipArray[index] == true){ - scope.currentIndex++;} - else{ - alert('You must enter an answer to continue!');//modal - } - - } - scope.goesToIndex = ""; - }; - - scope.back = function(){ - - scope.currentIndex--; - - - }; - - - //is overridden by scope.complete function if different action is desired at the end of survey - scope.submit = scope.submit || function(){ - console.log('OVERRIDE THIS IN YOUR CONTROLLER SCOPE: ',$('form').serializeArray()); - - var _SAVE_LOCATION = 'livewell_survey_data'; - - $scope.responseArray[$scope.currentIndex] = $('form').serializeArray()[0]; - - var responses = _.flatten($scope.responseArray); - - var sessionID = Guid.create(); - - _.each(responses, function(el){ - - var payload = { - userId: UserDetails.find, - survey: 'survey', - questionDataLabel: el.name, - questionValue: el.value, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading(_SAVE_LOCATION,payload).execute(); - console.log(payload); - - }); - - - - $location.path('#/'); - } - - scope.skippable = scope.skippable || true; - scope.skipArray = []; - - - scope.questionViewType = function(questionType){ - - switch (questionType){ - - case "radio" || "checkbox": - return "multiple" - break; - case "text" || "phone" || "email" || "textarea": - return "single" - break; - default: - return "html" - break; - - } - - } - -// scope.showEndNav = function(length,pageTitle) { -// if (length == 0 && pageTitle = 'Daily Review'){ -// return true} -// } -// } - - } - }; - }); diff --git a/platforms/android/assets/www/scripts/services/clinicalstatusupdate.js b/platforms/android/assets/www/scripts/services/clinicalstatusupdate.js deleted file mode 100644 index f6c40c09..00000000 --- a/platforms/android/assets/www/scripts/services/clinicalstatusupdate.js +++ /dev/null @@ -1,147 +0,0 @@ -'use strict'; -/** - * @ngdoc service - * @name livewellApp.clinicalStatusUpdate - * @description - * # clinicalStatusUpdate - * Service in the livewellApp. - */ -angular.module('livewellApp').service('ClinicalStatusUpdate', function(Pound, UserData) { - // AngularJS will instantiate a singleton by calling "new" on this function - var contents = {}; - contents.execute = function() { - var currentClinicalStatusCode = function(){return UserData.query('clinicalStatus').currentCode}; - //"[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - var dailyReviewResponses = Pound.find('dailyCheckIn'); - var weeklyReviewResponses = Pound.find('weeklyCheckIn'); - var newClinicalStatus = currentClinicalStatusCode(); - var sendEmail = false; - var intensityCount = { - 0: 0, - 1: 0, - 2: 0, - 3: 0, - 4: 0 - }; - - for (var i = dailyReviewResponses.length - 1; i > dailyReviewResponses.length - 8; i--) { - var aWV = 0; - if (dailyReviewResponses[i] != undefined) { - var aWV = Math.abs(parseInt(dailyReviewResponses[i].wellness)); - } - console.log(aWV); - if (aWV == 0) { - intensityCount[0] = intensityCount[0] + 1 - } - if (aWV == 1) { - intensityCount[1] = intensityCount[1] + 1 - } - if (aWV == 2) { - intensityCount[2] = intensityCount[2] + 1 - } - if (aWV == 3) { - intensityCount[3] = intensityCount[3] + 1 - } - if (aWV == 4) { - intensityCount[4] = intensityCount[4] + 1 - } - } - - var lastWeeklyResponses = []; - - if (weeklyReviewResponses[weeklyReviewResponses.length - 1] != undefined){ - lastWeeklyResponses = weeklyReviewResponses[weeklyReviewResponses.length - 1].responses; - } - else{ - lastWeeklyResponses = [ - {name:'phq1', value:'0'}, - {name:'phq2', value:'0'}, - {name:'phq3', value:'0'}, - {name:'phq4', value:'0'}, - {name:'phq5', value:'0'}, - {name:'phq6', value:'0'}, - {name:'phq7', value:'0'}, - {name:'phq8', value:'0'}, - {name:'amrs1', value:'0'}, - {name:'amrs2', value:'0'}, - {name:'amrs3', value:'0'}, - {name:'amrs4', value:'0'}, - {name:'amrs5', value:'0'} - ]; - } - var lWR = lastWeeklyResponses; - var phq8Sum = parseInt(lWR[0].value) + parseInt(lWR[1].value) + parseInt(lWR[2].value) + parseInt(lWR[3].value) + parseInt(lWR[4].value) + parseInt(lWR[5].value) + parseInt(lWR[6].value) + parseInt(lWR[7].value); - var amrsSum = parseInt(lWR[8].value) + parseInt(lWR[9].value) + parseInt(lWR[10].value) + parseInt(lWR[11].value) + parseInt(lWR[12].value); - //"[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - switch (parseInt(currentClinicalStatusCode())) { - case 1://well - //Well if abs(wr) ≥ 2 for 4 of last 7 days Prodromal - if ((intensityCount[2] + intensityCount[3] + intensityCount[4]) >= 4) { - newClinicalStatus = 2; - } - // //Well if last ASRM ≥ 6 Well, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - // //Well if last PHQ8 ≥ 10 Well, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 2://prodromal - //Prodromal if abs(wr) ≤ 1 for 5 of last 7 days Well - if ((intensityCount[1] + intensityCount[0]) >= 5) { - newClinicalStatus = 1; - } - //Prodromal if abs(wr) ≥ 3 for 5 of last 7 days Unwell - if ((intensityCount[3] + intensityCount[4]) >= 5) { - newClinicalStatus = 4; - } - //Prodromal if last ASRM ≥ 6 Prodromal, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - //Prodromal if last PHQ8 ≥ 10 Prodromal, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 3://recovering - //Recovering if abs(wr) ≤ 1 for 5 of last 7 days Well - if ((intensityCount[1] + intensityCount[0]) >= 5) { - newClinicalStatus = 1; - } - //Recovering if abs(wr) ≥ 3 for 5 of last 7 days Unwell - if ((intensityCount[3] + intensityCount[4]) >= 5) { - newClinicalStatus = 4; - } - //Recovering if last ASRM ≥ 6 Recovering, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - //Recovering if last PHQ8 ≥ 10 Recovering, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 4://unwell - //Unwell if abs(wr) ≤ 2 for 5 of last 7 days Recovering - if ((intensityCount[0] + intensityCount[1] + intensityCount[2]) >= 5) { - newClinicalStatus = 3; - } - break; - } - - var returnStatus = {}; - returnStatus.amrsSum = amrsSum; - returnStatus.phq8Sum = phq8Sum; - returnStatus.intensityCount = intensityCount; - returnStatus.oldStatus = currentClinicalStatusCode(); - returnStatus.newStatus = newClinicalStatus; - localStorage['clinicalStatus'] = JSON.stringify({ - currentCode: newClinicalStatus - }); - return returnStatus - } - return contents; -}); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/services/dailyreview.js b/platforms/android/assets/www/scripts/services/dailyreview.js deleted file mode 100644 index 18564eb2..00000000 --- a/platforms/android/assets/www/scripts/services/dailyreview.js +++ /dev/null @@ -1,548 +0,0 @@ -'use strict'; -/** - * @ngdoc service - * @name livewellApp.dailyReview - * @description - * # dailyReview - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('DailyReviewAlgorithm', function(Pound, UserData) { - // AngularJS will instantiate a singleton by calling "new" on this function - var contents = {}, - recoder = {}, - history = {}, - dailyCheckInData = {}, - conditions = []; - var sleepRoutineRanges = UserData.query('sleepRoutineRanges'); - var currentClinicalStatusCode = function(){return UserData.query('clinicalStatus').currentCode}; - var dailyReviewResponses = Pound.find('dailyCheckIn'); - recoder.execute = function(sleepRoutineRanges, dailyReviewResponses) { - var historySeed = {}; - historySeed.wellness = [0, 0, 0, 0, 0, 0, 0]; // wellness balanced 7 days - historySeed.medications = [1, 1, 1, 1, 1, 1, 1]; // took all meds 7 days - historySeed.sleep = [0, 0, 0, 0, 0, 0, 0]; // in baseline range 7 days - historySeed.routine = [2, 2, 2, 2, 2, 2, 2]; // in both windows 7 days - for (var i = 0; i < 7; i++) { - var responsePosition = dailyReviewResponses.length + i - 7; - if (dailyReviewResponses[responsePosition] != undefined) { - historySeed.wellness[i] = parseInt(dailyReviewResponses[responsePosition].wellness); - historySeed.medications[i] = recoder.medications(dailyReviewResponses[responsePosition].medications); - historySeed.sleep[i] = recoder.sleep(dailyReviewResponses[responsePosition].sleepDuration,sleepRoutineRanges); - historySeed.routine[i] = recoder.routine(dailyReviewResponses[responsePosition].toBed, dailyReviewResponses[responsePosition].gotUp, sleepRoutineRanges); - } - } - localStorage['recodedResponses'] = JSON.stringify(historySeed); - return historySeed - } - - recoder.medications = function(medications) { - switch (medications) { - case '0': - return 0 - break; - case '1': - return 0.5 - break; - case '2': - return 1 - break; - } - } - - recoder.sleep = function(sleepDuration, sleepRoutineRanges) { - var score = 0; - // duration = gotUp - toBed - // look at ranges defined in sleepRoutineRanges, which range is it in? - - var duration = parseInt(sleepDuration); - - if (duration <= sleepRoutineRanges.LessSevere) { - score = -1; - } - if (duration >= sleepRoutineRanges.MoreSevere) { - score = 1; - } - if (duration >= sleepRoutineRanges.Less && duration <= sleepRoutineRanges.More) { - score = 0; - } - if (duration < sleepRoutineRanges.Less && duration >= sleepRoutineRanges.LessSevere) { - score = -0.5; - } - if (duration > sleepRoutineRanges.More && duration <= sleepRoutineRanges.MoreSevere) { - score = 0.5; - } - return score - } - - recoder.routine = function(toBed, gotUp, sleepRoutineRanges) { - var sum = 0; - var range = sleepRoutineRanges; - var numGotUp = parseInt(gotUp); - var numToBed = parseInt(toBed); - var bedTimeStart = parseInt(sleepRoutineRanges.BedTimeStrt_MT); - var bedTimeStop = parseInt(sleepRoutineRanges.BedTimeStop_MT); - var riseTimeStart = parseInt(sleepRoutineRanges.RiseTimeStrt_MT); - var riseTimeStop = parseInt(sleepRoutineRanges.RiseTimeStop_MT); - if (bedTimeStart > bedTimeStop) { - bedTimeStop = bedTimeStop + 2400; - } - if (riseTimeStart > riseTimeStop) { - riseTimeStop = riseTimeStop + 2400; - } - if (numGotUp < riseTimeStart && numGotUp < riseTimeStop) { - numGotUp = numGotUp + 2400; - } - if (numToBed < bedTimeStart && numToBed < bedTimeStop) { - numToBed = numToBed + 2400; - } - if (numGotUp >= riseTimeStart && numGotUp <= riseTimeStop) { - sum++ - } - if (numToBed >= bedTimeStart && numToBed <= bedTimeStop) { - sum++ - } - return parseInt(sum) - }; - - conditions[26] = function(data, code) { - //well - return true - }; - conditions[25] = function(data, code) { - //at risk routine - //Baseline ≥ 3 of last 4 days mrd ≠ Bedtime Window and/or mrd ≠ Risetime Window, - //Bedtime and Risetime Windows ≤ 5 of last 4 days - var sum1 = data.routine[3] + data.routine[4] + data.routine[5] + data.routine[6]; - - return code == 1 && Math.abs(data.wellness[6]) < 2 && ((data.routine[6] < 2 && sum1 <= 5)) - }; - conditions[24] = function(data, code) { - //at risk sleep erratic - //mrd ≠ Baseline, Baseline ≤ 2 of last 4 days - var sum1 = 0; - if (data.sleep[3] == 0) { - sum1++ - } - if (data.sleep[4] == 0) { - sum1++ - } - if (data.sleep[5] == 0) { - sum1++ - } - if (data.sleep[6] == 0) { - sum1++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] != 0) && sum1 <= 2 - }; - conditions[23] = function(data, code) { - //at risk sleep more - //mrd = More or More-Severe, More or More-Severe ≥ 2 last 4 days, Less or Less-Severe ≤ 1 last 4 days - var sum1 = 0; - if (data.sleep[3] == -1 || data.sleep[3] == -0.5) { - sum1++ - } - if (data.sleep[4] == -1 || data.sleep[4] == -0.5) { - sum1++ - } - if (data.sleep[5] == -1 || data.sleep[5] == -0.5) { - sum1++ - } - if (data.sleep[6] == -1 || data.sleep[6] == -0.5) { - sum1++ - } - var sum2 = 0; - if (data.sleep[3] == 1 || data.sleep[3] == 0.5) { - sum2++ - } - if (data.sleep[4] == 1 || data.sleep[4] == 0.5) { - sum2++ - } - if (data.sleep[5] == 1 || data.sleep[5] == 0.5) { - sum2++ - } - if (data.sleep[6] == 1 || data.sleep[6] == 0.5) { - sum2++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] == 1 || data.sleep[6] == 0.5) && sum1 <= 1 && sum2 >= 2 - }; - conditions[22] = function(data, code) { - //at risk sleep less - //mrd = Less or Less-Severe, Less or Less-Severe ≥ 2 of last 4 days, More or More-Severe ≤ 1 of last 4 days - var sum1 = 0; - if (data.sleep[3] == -1 || data.sleep[3] == -0.5) { - sum1++ - } - if (data.sleep[4] == -1 || data.sleep[4] == -0.5) { - sum1++ - } - if (data.sleep[5] == -1 || data.sleep[5] == -0.5) { - sum1++ - } - if (data.sleep[6] == -1 || data.sleep[6] == -0.5) { - sum1++ - } - var sum2 = 0; - if (data.sleep[3] == 1 || data.sleep[3] == 0.5) { - sum2++ - } - if (data.sleep[4] == 1 || data.sleep[4] == 0.5) { - sum2++ - } - if (data.sleep[5] == 1 || data.sleep[5] == 0.5) { - sum2++ - } - if (data.sleep[6] == 1 || data.sleep[6] == 0.5) { - sum2++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] == -1 || data.sleep[6] == -0.5) && sum1 >= 2 && sum2 <= 1 - }; - conditions[21] = function(data, code) { - //at risk medications - return code == 1 && Math.abs(data.wellness[6]) < 2 && data.medications[6] != 1 - }; - conditions[20] = function(data, code) { - //at risk sleep more severe - //mrd = More-Severe, More-Severe ≥ 3 of last 4 days - var sum = 0; - if (data.sleep[3] == 1) { - sum++ - } - if (data.sleep[4] == 1) { - sum++ - } - if (data.sleep[5] == 1) { - sum++ - } - if (data.sleep[6] == 1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.sleep[6] == 1 && sum >= 3; - - if (dailyReviewIsTrueWhen){ - if (sum == 3){ - - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too much', code:20}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:20}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too much', email:'psychiatrist', code:20}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:20}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[19] = function(data, code) { - //at risk sleep less severe - //mrd = Less-Severe, Less-Severe ≥ 2 of last 4 days - var sum = 0; - if (data.sleep[3] == -1) { - sum++ - } - if (data.sleep[4] == -1) { - sum++ - } - if (data.sleep[5] == -1) { - sum++ - } - if (data.sleep[6] == -1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.sleep[6] == -1 && sum >= 2; - - if (dailyReviewIsTrueWhen){ - if (sum == 2){ - - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too little', code:19}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:19}).execute(); - } - if (sum == 3){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too little', email:'psychiatrist', code:19}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:19}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[18] = function(data, code) { - //at risk medications severe - var sum = 0; - if (data.medications[3] != 1) { - sum++ - } - if (data.medications[4] != 1) { - sum++ - } - if (data.medications[5] != 1) { - sum++ - } - if (data.medications[6] != 1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.medications[6] != 1 && sum >= 3; - - if (dailyReviewIsTrueWhen){ - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about taking your medications', code:18}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'psychiatrist', code:18}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{message:'Call your psychiatrist about taking your medications', call:'psychiatrist', email:'coach', code:18}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:18}).execute(); - } - } - return dailyReviewIsTrueWhen - }; - conditions[17] = function(data, code) { - //mild down well - var dailyReviewIsTrueWhen = data.wellness[6] == -2 && code == 1; - - if (dailyReviewIsTrueWhen){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:17}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:17}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:17}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:17}).execute(); - } - } - - - - return dailyReviewIsTrueWhen; - }; - conditions[16] = function(data, code) { - //mild up well - var dailyReviewIsTrueWhen = data.wellness[6] == 2 && code == 1; - - if (dailyReviewIsTrueWhen){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 2){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:16}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:16}).execute(); - } - if (sum >= 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:16}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:16}).execute(); - } - - } - - return dailyReviewIsTrueWhen - }; - conditions[15] = function(data, code) { - //balanced prodromal - return code == 2 - }; - conditions[14] = function(data, code) { - //balanced recovering - return code == 3 - }; - conditions[13] = function(data, code) { - //mild down prodromal - return data.wellness[6] == -2 && code == 2; - }; - conditions[12] = function(data, code) { - //mild up prodromal - return data.wellness[6] == 2 && code == 2; - }; - conditions[11] = function(data, code) { - //mild down recovering - return data.wellness[6] == -2 && code == 3; - }; - conditions[10] = function(data, code) { - //mild up recovering - return data.wellness[6] == 2 && code == 3; - }; - conditions[9] = function(data, code) { - //moderate down - var dailyReviewIsTrueWhen = data.wellness[6] == -3 && code != 4; - - if (dailyReviewIsTrueWhen && code == 1){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:9}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:9}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:9}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:9}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[8] = function(data, code) { - //moderate up - var dailyReviewIsTrueWhen = data.wellness[6] == 3 && code != 4; - - if (dailyReviewIsTrueWhen && code == 1){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 2){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:8}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:8}).execute(); - } - if (sum >= 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:8}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:8}).execute(); - } - - } - - return dailyReviewIsTrueWhen - }; - conditions[7] = function(data, code) { - //balanced unwell - return code == 4; - }; - conditions[6] = function(data, code) { - //mild down unwell - return data.wellness[6] == -2 && code == 4; - }; - conditions[5] = function(data, code) { - //mild up unwell - return data.wellness[6] == 2 && code == 4; - }; - conditions[4] = function(data, code) { - //moderate down unwell - return data.wellness[6] == -3 && code == 4; - }; - conditions[3] = function(data, code) { - //moderate up unwell - return data.wellness[6] == 3 && code == 4; - }; - conditions[2] = function(data, code) { - //logic for severe down - return data.wellness[6] == -4; - }; - conditions[1] = function(data, code) { - //logic for severe up - return data.wellness[6] == 4; - }; - conditions[0] = function() { - return false - } - // "[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - recoder.wellnessFormatter = function(wellnessRating) { - switch (wellnessRating) { - case -4: - return 0; - break; - case -3: - return .25; - break; - case -2: - return .5; - break - case -1: - return 1; - break; - case 0: - return 1; - break; - case 1: - return 1; - break; - case 2: - return 0.5; - break; - case 3: - return 0.25; - break; - case 4: - return 0; - break; - } - } - contents.getPercentages = function() { - var contents = {}; - var recodedSevenDays = recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')); - var sleepValues = {}; - sleepValues[-1] = 0; - sleepValues[-0.5] = 0.25; - sleepValues[0] = 1; - sleepValues[0.5] = 0.5; - sleepValues[1] = 0.25; - contents.sleep = (sleepValues[recodedSevenDays.sleep[0]] + sleepValues[recodedSevenDays.sleep[1]] + sleepValues[recodedSevenDays.sleep[2]] + sleepValues[recodedSevenDays.sleep[3]] + sleepValues[recodedSevenDays.sleep[4]] + sleepValues[recodedSevenDays.sleep[5]] + sleepValues[recodedSevenDays.sleep[6]]) / 7; - contents.wellness = (recoder.wellnessFormatter(recodedSevenDays.wellness[0]) + recoder.wellnessFormatter(recodedSevenDays.wellness[1]) + recoder.wellnessFormatter(recodedSevenDays.wellness[2]) + recoder.wellnessFormatter(recodedSevenDays.wellness[3]) + recoder.wellnessFormatter(recodedSevenDays.wellness[4]) + recoder.wellnessFormatter(recodedSevenDays.wellness[5]) + recoder.wellnessFormatter(recodedSevenDays.wellness[6])) / 7; - contents.medications = (recodedSevenDays.medications[0] + recodedSevenDays.medications[1] + recodedSevenDays.medications[2] + recodedSevenDays.medications[3] + recodedSevenDays.medications[4] + recodedSevenDays.medications[5] + recodedSevenDays.medications[6]) / 7; - contents.routine = (recodedSevenDays.routine[0] + recodedSevenDays.routine[1] + recodedSevenDays.routine[2] + recodedSevenDays.routine[3] + recodedSevenDays.routine[4] + recodedSevenDays.routine[5] + recodedSevenDays.routine[6]) / 14; - return contents - } - contents.getCode = function() { - //look for the highest TRUE value in the condition set - var recodedSevenDays = recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')); - console.log(recodedSevenDays); - for (var i = 0; i < conditions.length; i++) { - var selection = conditions[i](recodedSevenDays, currentClinicalStatusCode()); - if (selection == true) { - return i - break; - } - } - } - contents.code = function(){return contents.getCode()}; - contents.percentages = function(){return contents.getPercentages()}; - contents.recodedResponses = function() { - return recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')) - }; - return contents - }); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/services/guid.js b/platforms/android/assets/www/scripts/services/guid.js deleted file mode 100644 index 5da4a5f2..00000000 --- a/platforms/android/assets/www/scripts/services/guid.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.Guid - * @description - * # Guid - * provides the capacity to generate a guid as needed, - */ -angular.module('livewellApp') - .service('Guid', function Guid() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var guid = {}; - - // make a string 4 of length 4 with random alphanumerics - guid.S4 = function () { - return (((1+Math.random())*0x10000)|0).toString(16).substring(1); - } - - // concat a bunch together plus stitch in '4' in the third group - guid.create = function() { - return (guid.S4() + guid.S4() + "-" + guid.S4() + "-4" + guid.S4().substr(0,3) + "-" + guid.S4() + "-" + guid.S4() + guid.S4() + guid.S4()).toLowerCase(); - } - - return guid - - }); diff --git a/platforms/android/assets/www/scripts/services/pound.js b/platforms/android/assets/www/scripts/services/pound.js deleted file mode 100644 index d6ef03af..00000000 --- a/platforms/android/assets/www/scripts/services/pound.js +++ /dev/null @@ -1,189 +0,0 @@ - -/** - * @ngdoc service - * @name livewellApp.Pound - * @description - * # Pound - * acts as an interface to localStorage - * TODO, use localForage, but gracefully degrade to localStorage if it doesn't exist - */ -angular.module('livewellApp') - .service('Pound', function Pound() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var pound = {}; - - console.warn('CAUTION: localForage does not exist'); - - //pound.insert(key, object) - //adds to or CREATES a store - //key: name of thing to store - //object: value of thing to store in json form - //pound.add("foo",{"thing":"thing value"}); - //adds {"thing":"thing value"} to a key called "foo" in localStorage - pound.add = function(key,object){ - var collection = []; - - if (localStorage[key]){ - collection = JSON.parse(localStorage[key]); - object.id = collection.length+1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection.push(object); - localStorage[key] = JSON.stringify(collection); - } - else - { - object.id = 1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection = [object]; - localStorage[key] = JSON.stringify(collection); - pound.add("pound",key); - } - - return {added:object}; - }; - - - //pound.save(key, object, id) - //equivalent of upsert - //key: name of thing to store - //object: value of thing to store in json form - // - //pound.save("foo",{thing:"thing value", id:id_value}); - //looks to find a thing called foo that has an array of objects inside - //then looks to find an object in that array that has an id of a particular value, - // if it exists, the object is updated with the keys in the object to replace - ///if it does not exist, it is added - pound.save = function(key,object){ - var collection = []; - - if (localStorage[key]){ - - var exists = false; - collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx){ - if (el.id == object.id){ - exists = true; - object.timestamp = new Date(); - collection[idx] = object; - } - - }); - - if (exists == false){ - object.id = collection.length+1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection.push(object); - } - } - - else - { - object.id = 1; - object.created_at = new Date(); - collection = [object]; - pound.add("pound",key); - } - - localStorage[key] = JSON.stringify(collection); - - return {saved:object}; - }; - - //pound.update(key, object) - //get collection of JSON objects - //iterate through collection and check if passed object matches an element - //merge attributes of objects - //set the collection at the current index to the value of the object - //stringify the collection and set the localStorage key to that value - - pound.update = function(key, object) { - var collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx) { - - if (el.id == object.id) { - - for( var attribute in el) { - el[attribute] = object[attribute] - object.updated_at = new Date(); - } - - collection[idx] = object - } - }); - localStorage[key] = JSON.stringify(collection); - - return {updated:object}; - } - - //pound.find(key,criteria_object) - //key: name of localstorage location - //criteria_object: object that matches the criteria you're looking for - //pound.find("foo") - //returns the ENTIRE contents of the localStorage array - //pound.find("foo",{thing:"thing value"}) - //returns the elements in the array that match that criteria - - pound.find = function(key,criteria_object){ - var collection = []; - if(localStorage[key]){ - collection = JSON.parse(localStorage[key]); - - if (criteria_object){ - return _.where(collection,criteria_object) || [] } - else { return collection || [];} - } - else{ return [];} - }; - - pound.list = function(){ - return pound.find("pound"); - }; - - //pound.delete(key,id) - //removes an item from a collection that matches a specific id criteria - pound.delete = function(key,id){ - - var collection = []; - var object_to_delete; - collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx){ - if (el.id == id){ - object_to_delete = collection[idx]; - collection[idx] = false; - }; - }); - - localStorage[key] = JSON.stringify(_.compact(collection)); - - return {deleted:object_to_delete}; - } - - - //pound.nuke(key) - //completely removes the key from local storage and pound list - pound.nuke = function(key){ - var collection = pound.list; - - localStorage.removeItem(key); - _.each(collection, function(el, idx){ - if (el == key){ - collection[idx] = false; - }; - }); - localStorage["pound"] = JSON.stringify(_.compact(collection)); - - return {cleared:key}; - }; - - - return pound - - -}); diff --git a/platforms/android/assets/www/scripts/services/questions.js b/platforms/android/assets/www/scripts/services/questions.js deleted file mode 100644 index fb116703..00000000 --- a/platforms/android/assets/www/scripts/services/questions.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.Questions - * @description - * # Questions - * accesses locally stored questions that were provided over the questions / question-responses routes - */ -angular.module('livewellApp') - .service('Questions', function Questions($http) { - // AngularJS will instantiate a singleton by calling "new" on this function - - var _CONTENT_SERVER_URL = 'https://livewellnew.firebaseio.com'; - - var content = {}; - var _QUESTIONS_COLLECTION_KEY = 'questions'; - var _RESPONSES_COLLECTION_KEY = 'questionresponses'; - var _QUESTION_CRITERIA_COLLECTION_KEY = 'questioncriteria'; - var _RESPONSE_CRITERIA_COLLECTION_KEY = 'responsecriteria'; - - content.query = function(questionGroup){ - - if (localStorage[_QUESTIONS_COLLECTION_KEY] != undefined){ - //grab from synched local storage - content.items = JSON.parse(localStorage[_QUESTIONS_COLLECTION_KEY]); - //filter to show only one question group - if (questionGroup != undefined){ - content.items = _.where(content.items, {questionGroup:questionGroup}); - } - - //attach response groups to questions - var responses_collection = JSON.parse(localStorage[_RESPONSES_COLLECTION_KEY]); - var question_criteria_collection = JSON.parse(localStorage[_QUESTION_CRITERIA_COLLECTION_KEY]); - var response_criteria_collection = JSON.parse(localStorage[_RESPONSE_CRITERIA_COLLECTION_KEY]); - - _.each(content.items, function(el,idx){ - content.items[idx].responses = _.where(responses_collection, {responseGroupId: el.responseGroupId}); - content.items[idx].criteria = _.where(question_criteria_collection, {questionCriteriaId: el.questionCriteriaId}); - _.each(content.items[idx].responses, function(el2,idx2){ - content.items[idx].responses[idx2].criteria = _.where(response_criteria_collection,{responseId:el2.id}); - }); - - }); - - - - content.responses = responses_collection; - - content.questions = JSON.parse(localStorage[_QUESTIONS_COLLECTION_KEY]); - content.questionCriteria = question_criteria_collection; - content.responseCriteria = response_criteria_collection; - - content.items = _.sortBy(content.items,"order"); - - } - else{ - content.items = []; - } - - return content.items - - } - - content.save = function(collectionToSave,collection){ - debugger; - localStorage[collectionToSave] = JSON.stringify(collection); - $http.put(_CONTENT_SERVER_URL + "/" + collectionToSave).success(alert("Data saved to server")); - } - - content.uniqueQuestionGroups = function(){ - - var uniqueQuestionGroups = []; - _.each(_.uniq(content.query(),"questionGroup"), function(el){ - uniqueQuestionGroups.push({name: el.questionGroup, id: el.questionGroup}); - }); - - return _.uniq(uniqueQuestionGroups,"name") - - } - - return content - }); diff --git a/platforms/android/assets/www/scripts/services/static_content.js b/platforms/android/assets/www/scripts/services/static_content.js deleted file mode 100644 index d32c3dce..00000000 --- a/platforms/android/assets/www/scripts/services/static_content.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.StaticContent - * @description - * # StaticContent - * accesses general purpose locally stored static content - */ -angular.module('livewellApp') - .service('StaticContent', function StaticContent() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var content = {}; - var _COLLECTION_KEY = 'staticContent'; - var _NULL_COLLECTION_MESSAGE = '<div class="alert alert-warning">No content has been provided for this section.</div>'; - - if (localStorage[_COLLECTION_KEY] != undefined){ - content.items = JSON.parse(localStorage[_COLLECTION_KEY]); - } - else{ - content.items = []; - } - - content.query = function(key){ - - var queryResponse = _.where(content.items, {sectionKey:key}); - - if (queryResponse.length > 0){ - return queryResponse[0].content - } - else{ - return _NULL_COLLECTION_MESSAGE; - - }} - - -return content - -}); diff --git a/platforms/android/assets/www/scripts/services/user_data.js b/platforms/android/assets/www/scripts/services/user_data.js deleted file mode 100644 index c53728de..00000000 --- a/platforms/android/assets/www/scripts/services/user_data.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.UserData - * @description - * # UserData - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('UserData', function UserData() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var content = {}; - - content.query = function(collectionKey){ - - console.log(collectionKey); - if (localStorage[collectionKey] != undefined){ - content.items = JSON.parse(localStorage[collectionKey]); - } - else{ - content.items = []; - } - console.log(content.items); - return content.items - - } - - return content - - }); diff --git a/platforms/android/assets/www/scripts/services/user_details.js b/platforms/android/assets/www/scripts/services/user_details.js deleted file mode 100644 index aaf3d55f..00000000 --- a/platforms/android/assets/www/scripts/services/user_details.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.UserDetails - * @description - * # UserDetails - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('UserDetails', function UserDetails(Pound) { - // AngularJS will instantiate a singleton by calling "new" on this function - - var _USER_LOCAL_COLLECTION_KEY = 'user'; - - var userDetails = {}; - - var userDetailsModel = { - uid: 1, - userID: null, - groupID: null, - loginKey: null - } - - //if there is no user, create a dummy user object based on the above model - if (localStorage[_USER_LOCAL_COLLECTION_KEY] == undefined){ - // Pound.save(_USER_LOCAL_COLLECTION_KEY,userDetailsModel); - } - - //return the current user object - userDetails.find = Pound.find(_USER_LOCAL_COLLECTION_KEY,{uid:'1'})[0]; - - //updates the whole user object - userDetails.update = function(userObject){ - Pound.update(_USER_LOCAL_COLLECTION_KEY,userObject); - return userDetails.find - }; - - // updates one key in the whole user object - userDetails.updateKey = function(key, value){ - var userObject = userDetails.find; - userObject[key] = value; - return userDetails.update(userObject); - } - - return userDetails; - - - }); diff --git a/platforms/android/assets/www/scripts/vendor/cordova.android.js b/platforms/android/assets/www/scripts/vendor/cordova.android.js deleted file mode 100644 index 1a9f5d97..00000000 --- a/platforms/android/assets/www/scripts/vendor/cordova.android.js +++ /dev/null @@ -1,1749 +0,0 @@ -// Platform: android -// 3.4.0 -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var CORDOVA_JS_BUILD_LABEL = '3.4.0'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:CORDOVA_JS_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/android/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: src/android/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used only on the 2.3 simulator, where addJavascriptInterface() is broken. - */ - -module.exports = { - exec: function(service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(value) { - prompt(value, 'gap_bridge_mode:'); - }, - retrieveJsMessages: function(fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:'); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/android/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1, - // This mode is currently for benchmarking purposes only. It must be enabled - // on the native side through the ENABLE_LOCATION_CHANGE_EXEC_MODE - // constant within CordovaWebViewClient.java before it will work. - LOCATION_CHANGE: 2 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2, - // Uses reflection to access private APIs of the WebView that can send JS - // to be executed. - // Requires Android 3.2.4 or above. - PRIVATE_API: 3 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - messagesFromNative = []; - -function androidExec(success, fail, service, action, args) { - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - if (jsToNativeBridgeMode == jsToNativeModes.LOCATION_CHANGE) { - window.location = 'http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson; - } else { - var messages = nativeApiProvider.get().exec(service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - return; - } else { - androidExec.processMessages(messages); - } - } -} - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - var msg = nativeApiProvider.get().retrieveJsMessages(!!opt_fromOnlineEvent); - androidExec.processMessages(msg); -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - console.log('Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only.'); - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - nativeApiProvider.get().setNativeToJsBridgeMode(mode); - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - try { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadKind = message.charAt(nextSpaceIdx + 1); - var payload; - if (payloadKind == 's') { - payload = message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 't') { - payload = true; - } else if (payloadKind == 'f') { - payload = false; - } else if (payloadKind == 'N') { - payload = null; - } else if (payloadKind == 'n') { - payload = +message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 'A') { - var data = message.slice(nextSpaceIdx + 2); - var bytes = window.atob(data); - var arraybuffer = new Uint8Array(bytes.length); - for (var i = 0; i < bytes.length; i++) { - arraybuffer[i] = bytes.charCodeAt(i); - } - payload = arraybuffer.buffer; - } else if (payloadKind == 'S') { - payload = window.atob(message.slice(nextSpaceIdx + 2)); - } else { - payload = JSON.parse(message.slice(nextSpaceIdx + 1)); - } - cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback); - } else { - console.log("processMessage failed: invalid message:" + message); - } - } catch (e) { - console.log("processMessage failed: Message: " + message); - console.log("processMessage failed: Error: " + e); - console.log("processMessage failed: Stack: " + e.stack); - } -} - -// This is called from the NativeToJsMessageQueue.java. -androidExec.processMessages = function(messages) { - if (messages) { - messagesFromNative.push(messages); - // Check for the reentrant case, and enqueue the message if that's the case. - if (messagesFromNative.length > 1) { - return; - } - while (messagesFromNative.length) { - // Don't unshift until the end so that reentrancy can be detected. - messages = messagesFromNative[0]; - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (messages == '*') { - messagesFromNative.shift(); - window.setTimeout(pollOnce, 0); - return; - } - - var spaceIdx = messages.indexOf(' '); - var msgLen = +messages.slice(0, spaceIdx); - var message = messages.substr(spaceIdx + 1, msgLen); - messages = messages.slice(spaceIdx + msgLen + 1); - processMessage(message); - if (messages) { - messagesFromNative[0] = messages; - } else { - messagesFromNative.shift(); - } - } - } -}; - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -pluginloader.load(function() { - channel.onPluginsReady.fire(); -}); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/android/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Tell the native code that a page change has occurred. - exec(null, null, 'PluginManager', 'startup', []); - // Tell the JS that the native side is ready. - channel.onNativeReady.fire(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(null, null, "App", "show", []); - }); - } -}; - -}); - -// file: src/android/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, "App", "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, "App", "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, "App", "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, "App", "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, "App", "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, "App", "overrideBackbutton", [override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, "App", "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -function injectScript(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - script.onerror = onerror || onload; - script.src = url; - document.head.appendChild(script); -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module) { - try { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - // This can be skipped if it had any merges or clobbers, though, - // since the mapper will already have required the module. - if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) { - modulemapper.runs(module.id); - } - } - catch(err) { - // error with module, most likely clobbers, should we continue? - } - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectScript(path + moduleList[i].file, scriptLoadedCallback); - } -} - -function injectPluginScript(pathPrefix, finishPluginLoading) { - var pluginPath = pathPrefix + 'cordova_plugins.js'; - - injectScript(pluginPath, function() { - try { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, finishPluginLoading); - } - catch (e) { - // Error loading cordova_plugins.js, file not found or something - // this is an acceptable error, pre-3.0.0, so we just move on. - finishPluginLoading(); - } - }, finishPluginLoading); // also, add script load error handler for file not found -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = 'cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src; - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length); - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectPluginScript(pathPrefix, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/android/assets/www/scripts/vendor/cordova.js b/platforms/android/assets/www/scripts/vendor/cordova.js deleted file mode 100644 index 225d4ab2..00000000 --- a/platforms/android/assets/www/scripts/vendor/cordova.js +++ /dev/null @@ -1,1938 +0,0 @@ -// Platform: android -// 8ca0f3b2b87e0759c5236b91c80f18438544409c -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '3.6.4'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in success callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/android/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: src/android/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/android/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2, - // Uses reflection to access private APIs of the WebView that can send JS - // to be executed. - // Requires Android 3.2.4 or above. - PRIVATE_API: 3 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - messagesFromNative = [], - bridgeSecret = -1; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var messages = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - return; - } else { - androidExec.processMessages(messages, true); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msg = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - androidExec.processMessages(msg); -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - try { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadKind = message.charAt(nextSpaceIdx + 1); - var payload; - if (payloadKind == 's') { - payload = message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 't') { - payload = true; - } else if (payloadKind == 'f') { - payload = false; - } else if (payloadKind == 'N') { - payload = null; - } else if (payloadKind == 'n') { - payload = +message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 'A') { - var data = message.slice(nextSpaceIdx + 2); - var bytes = window.atob(data); - var arraybuffer = new Uint8Array(bytes.length); - for (var i = 0; i < bytes.length; i++) { - arraybuffer[i] = bytes.charCodeAt(i); - } - payload = arraybuffer.buffer; - } else if (payloadKind == 'S') { - payload = window.atob(message.slice(nextSpaceIdx + 2)); - } else { - payload = JSON.parse(message.slice(nextSpaceIdx + 1)); - } - cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } - } catch (e) { - console.log("processMessage failed: Error: " + e); - console.log("processMessage failed: Stack: " + e.stack); - console.log("processMessage failed: Message: " + message); - } -} - -var isProcessing = false; - -// This is called from the NativeToJsMessageQueue.java. -androidExec.processMessages = function(messages, opt_useTimeout) { - if (messages) { - messagesFromNative.push(messages); - } - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (opt_useTimeout) { - window.setTimeout(androidExec.processMessages, 0); - return; - } - isProcessing = true; - try { - // TODO: add setImmediate polyfill and process only one message at a time. - while (messagesFromNative.length) { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - setTimeout(pollOnce, 0); - return; - } - processMessage(msg); - } - } finally { - isProcessing = false; - } -}; - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var platform = require('cordova/platform'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/android/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, "App", "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(null, null, "App", "show", []); - }); - } -}; - -}); - -// file: src/android/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, "App", "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, "App", "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, "App", "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, "App", "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, "App", "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, "App", "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, "App", "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, "App", "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/android/assets/www/styles/bootstrap.min.css b/platforms/android/assets/www/styles/bootstrap.min.css deleted file mode 100644 index 0e39c3bb..00000000 --- a/platforms/android/assets/www/styles/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} - -/* @import url(http://fonts.googleapis.com/css?family=Lato);*/ \ No newline at end of file diff --git a/platforms/android/assets/www/styles/main.css b/platforms/android/assets/www/styles/main.css deleted file mode 100644 index 73276c39..00000000 --- a/platforms/android/assets/www/styles/main.css +++ /dev/null @@ -1,134 +0,0 @@ -html { - min-height:100%; -} - -body { - font-family: 'Lato', sans-serif !important; - font-size:.9em; - min-height:100%; - background-repeat:no-repeat !important; - margin:0; - padding:0; - background: #339999 !important; - color:white !important; -} - -.gly-spin { - -webkit-animation: spin 2s infinite linear; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} - -.row-group-wide { -width:90%; margin-left:5%; -} - - -.btn { - font-size:1.3em; - margin-bottom:10px; - -} - -.btn-lg { - border-radius: 24px; -} - -.btn-sm { - border-radius: 24px; -} -.btn-md { - border-radius: 24px; -} -.btn { - border-radius:24px !important; -} - -.btn-info { - background:transparent !important; - border: 2px solid white !important; - color: white !important; -} - -.btn-primary { - background:white !important; - border: 2px solid white !important; - color: #44aa66 !important; - -} - -.btn-active { - background:#28866f !important; - border: 2px solid #28866f !important; - color: white !important; -} - -.well, .panel { - color: #44aa66 !important; - -} - -.btn-full {width:100%; margin-top:.5em; display:block;} - -.logo {width:50px; float:right; margin-top:1em;} - -.row.header {position:absolute; top:0; left:0; width:100%; background-color: #4E5D6C} - -.wide {width:100%;} - -.bgcolor9 {background-color: #BF5052 !important;} -.bgcolor8 {background-color: #C56564 !important;} -.bgcolor7 {background-color: #D89494 !important;} -.bgcolor6 {background-color: #E4B8B8 !important;} -.bgcolor5 {background-color: #C2D49D !important;} -.bgcolor4 {background-color: #94CDDB !important;} -.bgcolor3 {background-color: #5DA9BA !important;} -.bgcolor2 {background-color: #368498 !important;} -.bgcolor1 {background-color: #145F79 !important;} - -h4{margin-top:.75em !important;} - - -/* QUESTION GROUP STYLES*/ -.btn-group-radio{padding:.25em 0; text-align: center;} -.center-form {text-align: center;} -.question_number {font-size:1.5em;} -.question-content {margin-bottom:.75em; font-size:.8em;} -.question-group {text-align: center; display:block; margin-top:.25em;} -.question-group label {display:block; text-align: left; margin:auto; font-size:1.3em; margin-bottom:.5em;} -.question-group .response-label{font-weight: normal;font-size:1.1em;} -.question-group .content-label{margin-bottom:.5em;} -.question-nav {position:absolute; bottom:0; left:0;width:100%; margin-right:auto; margin-left:auto;} -.nav-left {text-align: left; width:40%; float:left;} -.nav-center {text-align: center; width:20%;float:left;} -.nav-right {text-align: right; width:40%;float:left;} -.question-group-progress {background-color: rgba(40,140,50,0.4); border-radius: .5em} -.response-label {white-space: normal !important;} - -select {color:black !important;} -option {color:black !important;} - -/*.mainContent h1 {font-size:1.9em;margin:0!important;margin-left:1.5em !important; padding:0 !important;} -*/ - -.highlight {background-color:white !important; color:#1e497c !important;} - -body div,p {text-indent: 0 !important;} - -table.rounded-cells{ border-spacing: 10px; border-collapse: separate;} - -.rounded-cells td { border-radius: .25em; background-color: gray;height:20px; display:block; float:left; width:13.08%; margin:.6%} - -td.a{background-color:#50BF52;} - -td.b{background-color:#CCCC00;} - -td.c{background-color:#FF9900} - -input {color:black !important;} - -li { - margin-bottom:.5em; -} - diff --git a/platforms/android/assets/www/views/about.html b/platforms/android/assets/www/views/about.html deleted file mode 100644 index d21bf89f..00000000 --- a/platforms/android/assets/www/views/about.html +++ /dev/null @@ -1 +0,0 @@ -<p>This is the about view.</p> diff --git a/platforms/android/assets/www/views/admin.html b/platforms/android/assets/www/views/admin.html deleted file mode 100644 index 03c5d2fd..00000000 --- a/platforms/android/assets/www/views/admin.html +++ /dev/null @@ -1,10 +0,0 @@ - -<nav class="navbar navbar-default" role="navigation"> - <div class="container-fluid"> - <!-- Brand and toggle get grouped for better mobile display --> - <div class="navbar-header"> - <a ng-href="#/cms" class="btn btn-info">Content Editor</a> - <a class="navbar-brand" href="#">Admin</a> - </div> -</div> -</nav> \ No newline at end of file diff --git a/platforms/android/assets/www/views/charts.html b/platforms/android/assets/www/views/charts.html deleted file mode 100644 index b104852e..00000000 --- a/platforms/android/assets/www/views/charts.html +++ /dev/null @@ -1,22 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<!--<div class="alert alert-warning">--> -<!--Complete your daily check in at least three times to see your feedback charts!--> -<!--</div>--> - <h4>Medication</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.medications track by $index" ng-click="addToolTip()" class="{{medication.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{medication.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - - <h4>Sleep</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.sleep track by $index" ng-click="addToolTip()" class="add-tooltip {{sleep.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{sleep.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - - <h4>Routine</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.routine track by $index" ng-click="addToolTip()" class="add-tooltip {{routine.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{routine.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - -<h4>Wellness</h4> -<highchart id="chart1" config="config" style="width:100%; height:250px;" ></highchart> \ No newline at end of file diff --git a/platforms/android/assets/www/views/checkins.html b/platforms/android/assets/www/views/checkins.html deleted file mode 100644 index b665a0f4..00000000 --- a/platforms/android/assets/www/views/checkins.html +++ /dev/null @@ -1,5 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-href="#/daily_check_in" class="btn btn-info btn-full">Daily Check In</a><br/> - -<a ng-href="#/weekly_check_in" class="btn btn-info btn-full">Weekly Check In</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/cms.html b/platforms/android/assets/www/views/cms.html deleted file mode 100644 index 9f81c9bf..00000000 --- a/platforms/android/assets/www/views/cms.html +++ /dev/null @@ -1,32 +0,0 @@ -<div class="navbar navbar-fixed"> - <form class="navbar-form navbar-left" role="search"> - <div class="form-group"> - <select class="form-control" ng-model="questionGroup" ng-change="showGroup()" ng-options="x.id as x.name for x in questionGroups"> - <option value="">choose a question group</option> - </select> - <select class="form-control" ng-model="viewType" ng-options="x.value as x.name for x in viewTypes"> - <option value="">select a view</option> - </select> - </div> - </form> -</div> - -<div ng-if="viewType == 'table'" > - <div ng-include="'/views/cms/table.html'"></div> -</div> - -<div ng-if="viewType == 'map'" class="row"> - - <h2>Map</h2> - - -<div id="questionGroupmap"></div> - -<!-- <div ng-repeat="question in selectedQuestions" class="row"> - - {{question.content}} - - </div> - --> -</div> - diff --git a/platforms/android/assets/www/views/cms/table.html b/platforms/android/assets/www/views/cms/table.html deleted file mode 100644 index b95da982..00000000 --- a/platforms/android/assets/www/views/cms/table.html +++ /dev/null @@ -1,49 +0,0 @@ -<table style="width:100%;" class="table table-striped"> - <tr ng-repeat="question in selectedQuestions"> - <td class="col-md-1">{{$index}}</td> - <td class="col-md-7"> - <select ng-model="selectedQuestions[$index].type" ng-options="item for item in formFieldTypes"></select> - <label>Data Label: <input type="text" ng-model="selectedQuestions[$index].questionDataLabel"></label> - <textarea ng-bind-html="selectedQuestions[$index].content" class="form-control" ng-model="selectedQuestions[$index].content"></textarea> - </td> - <td class="col-md-4"> - <table class="table table-striped"> - <tr ng-repeat="response in question.responses"> - <td class="col-md-1">{{response.value}}</td> - <td class="col-md-10">{{response.label}}</td> - </tr> - </table> - <button class="btn btn-success" ng-click="editResponses('{{selectedQuestions[$index].responseGroupId}}')"> Edit Responses </button> - </td> - </tr> -</table> -<button ng-if="questionGroup != ''" class="btn btn-primary" ng-click="addQuestion()"> + Add Question</button> - -<div class="modal fade" id="responseModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> - <h4 class="modal-title">{{modalTitle}}</h4> - </div> - <div class="modal-body"> - <table class="table table-striped"> - <select ng-model="responseGroupId" ng-options="item as item for item in uniqueResponseGroups"></select> - - - <tr><th>Order</th><th>Label</th><th>Value</th><th>Goes to:</th></tr> - <tr ng-repeat="response in showResponses"> - <td class="col-md-1"><input type="text" ng-model="showResponses[$index].order"></td> - <td class="col-md-4"><input type="text" ng-model="showResponses[$index].label"></td> - <td class="col-md-4"><input type="text" ng-model="showResponses[$index].value"></td> - <td class="col-md-3"><select ng-model="showResponses[$index].goesTo" ng-options="item.questionDataLabel for item in goesToOptions"><option></option></select></td> - </tr> - </table> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> - <button type="button" class="btn btn-primary" ng-click="saveResponses()">Save changes</button> - </div> - </div> - </div> -</div> diff --git a/platforms/android/assets/www/views/daily_check_in.html b/platforms/android/assets/www/views/daily_check_in.html deleted file mode 100644 index eae5aef3..00000000 --- a/platforms/android/assets/www/views/daily_check_in.html +++ /dev/null @@ -1,95 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div id="warning" class="modal fade"> - <div class="modal-dialog"> - <div class="modal-content"> - - <div class="modal-body alert-danger"> - {{selectedWarningMessage}} - <br/> - <br/> - - <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button> - </div> - - </div> - <!-- /.modal-content --> - </div> - <!-- /.modal-dialog --> -</div> -<!-- /.modal --> - -<div id="continue" class="modal fade"> - <div class="modal-dialog"> - <div class="modal-content"> - - <div class="modal-body alert-warning"> - - <Br/> - <div class="alert alert-danger" ng-show="emergency"> - Looks like you are in a crisis we recommend that you call your psychiatrist, call 9-1-1, or go to the nearest emergency room. - <br/> - - <a ng-show="warningPhoneNumber != null" class="btn btn-primary" href="tel:{{warningPhoneNumber}}">Call Your Psychiatrist Now</a> - - </div> - <a ng-href="#/daily_review/{{nextId}}" class="btn btn-primary btn-full" >Continue to Daily Review</a> - <br/> - <a ng-href="#/" class="btn btn-primary btn-full">Return Home</a> - </div> - - </div> - <!-- /.modal-content --> - </div> - <!-- /.modal-dialog --> -</div> -<!-- /.modal --> - - -<form ng-submit="saveCheckIn()" class="center-form"> - <h4>MEDICATIONS</h4> - - <div class="row-fluid"> - <label class="btn btn-success col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="2"> All</label> - <label class="btn btn-warning col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="1"> Some</label> - <label class="btn btn-danger col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="0"> None</label> - </div> - - <br/> - <br/> - <h4>SLEEP</h4> - <select ng-model="dailyCheckIn.sleepDuration" name="sleepDuration" > - <option ng-repeat="hour in hours" value="{{hour.value}}" style="color:black !important;">{{hour.label}}</option> - </select> - - - <h4>ROUTINE</h4> - <div class="row"> - <div class="col-sm-6"> - <h5>Went To Bed</h5> - <select ng-model="dailyCheckIn.toBed" name="toBed"> - <option ng-repeat="time in times" value="{{time.value}}" style="color:black !important;">{{time.label}}</option> - </select> - </div> - <div class="col-sm-6"> - <h5>Got Up</h5> - <select ng-model="dailyCheckIn.gotUp" name="gotUp"> - <option ng-repeat="time in times" value="{{time.value}}" style="color:black !important;">{{time.label}}</option> - </select> - </div> - </div> - - - - <h4>WELLNESS</h4> - <div class="btn-group btn-group-justified" data-toggle="buttons"> - <label ng-click="highlight('#button{{response.order}}','{{response.response}}');warning({{response}})" id="button{{response.order}}" class="btn bgcolor{{response.order}} btn-group-radio" ng-repeat="response in responses">{{response.label}} - - </div> - - <br/> - <button type="submit" class="btn btn-primary btn-full">Submit</button> -</form> \ No newline at end of file diff --git a/platforms/android/assets/www/views/daily_review.html b/platforms/android/assets/www/views/daily_review.html deleted file mode 100644 index 68731190..00000000 --- a/platforms/android/assets/www/views/daily_review.html +++ /dev/null @@ -1,101 +0,0 @@ -<div id="warning" class="modal fade" ng-show="showWarning"> - <div class="modal-dialog"> - <div class="modal-body alert-danger"> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> - <h4 class="modal-title">Ask for help</h4> - {{warningMessage}}<br/><br/> - <a href="tel:{{phoneNumber}}" class="btn btn-primary">Call Now</a> - </div> - </div> - <!-- /.modal-content --> -</div> -<!-- /.modal-dialog --> -</div><!-- /.modal --> -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group" ng-show='code != 1 && code != 2'> - <div class="row"> - <div class="col-md-3 col-xs-3"></div> - <div class="col-md-6 col-xs-6" style="text-align:center;"> - Last seven days<br/><br/> - </div> - <div class="col-md-3 col-xs-3"></div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Medication</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% medications taken (All)"> - - <div class="progress-bar progress-bar-{{selectedIntervention.medicationsClass}}" role="progressbar" aria-valuenow="{{percentages.medications * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.medications * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.medications * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Sleep</div> - <div class="col-md-6 col-xs-6"> - - <div class="add-tooltip progress" data-toggle="tooltip" title="% within sleep range ({{routineData.Less}}-{{routineData.More}} hrs)"> - <div class="progress-bar progress-bar-{{selectedIntervention.sleepClass}}" role="progressbar" aria-valuenow="{{percentages.sleep * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.sleep * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.sleep * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Routine</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% within routine windows (bedtime {{cleanTime(routineData.BedTimeStrt_MT)}} - {{cleanTime(routineData.BedTimeStop_MT)}}, risetime = {{cleanTime(routineData.RiseTimeStrt_MT)}} - {{cleanTime(routineData.RiseTimeStop_MT)}})"> - <div class="progress-bar progress-bar-{{selectedIntervention.routineClass}}" role="progressbar" aria-valuenow="{{percentages.routine * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.routine * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.routine * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Wellness</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% well (-1 to 1)"> - <div class="progress-bar progress-bar-{{selectedIntervention.wellnessClass}}" role="progressbar" aria-valuenow="{{percentages.wellness * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.wellness * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.wellness * 100 | number: 0}}%</div> - </div> -</div> -<div class="row-group" style="margin-top:2em;"> - <div class="row"> - <div class="col-md-12" style="margin-bottom:1em;" ng-bind-html="interventionResponse()"></div> - </div> -</div> -<div class="row-group" style="margin-top:1em;"> - <div class="row"> - <div class="col-md-12 col-xs-12"> - <a ng-href="#/intervention/{{dailyReviewCategory}}" class="btn btn-primary btn-full">Continue</a> - </div> - - <!-- <div class="col-md-5 col-xs-5"> - <a ng-href="#/exit" class="btn btn-default wide">Exit</a> - </div> --> - </div> -</div> -<!-- <a ng-href="#/daily_check_in" class="btn btn-primary btn-full">Daily Check In</a> - --> -<!-- <h2>{{code}} {{dailyReviewCategory}}</h2> - <h3>Daily Check Ins (last 7)</h3> - <div class="well">{{dailyCheckInResponses}}</div> - - <h3>Recoded Responses</h3> - <div class="well">{{recodedResponses}}</div> - - <h3>Status Update Logic</h3> - - <div class="well"> - Previous Status: {{updatedClinicalStatus.oldStatus}}<br/> - New Status: {{updatedClinicalStatus.newStatus}}<br/> - Last AMRS Score: {{updatedClinicalStatus.amrsSum}}<br/> - Last PHQ Score: {{updatedClinicalStatus.phq8Sum}}<br/><br/> - Wellness Rating Counts:in last 7 days: <br/>{{updatedClinicalStatus.intensityCount}} - - <Br/></div> --> \ No newline at end of file diff --git a/platforms/android/assets/www/views/daily_review_conclusion.html b/platforms/android/assets/www/views/daily_review_conclusion.html deleted file mode 100644 index 4f4b491b..00000000 --- a/platforms/android/assets/www/views/daily_review_conclusion.html +++ /dev/null @@ -1,20 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div class="col-md-10 col-md-offset-1 col-sm-10 col-sm-offset-1" ng-bind-html="lastNotification" style="padding:1em;font-size:1.4em;"> -</div> - <a ng-href="#/wellness/resources" class="btn btn-info btn-full">Resources</a><br/> - <a ng-href="#/wellness/risk" class="btn btn-info btn-full">Reduce Risks</a><br/> - <a ng-href="#/wellness/awareness" class="btn btn-info btn-full">Awareness &amp; Action</a><br/><br/> - <a ng-href="#/charts" class="btn btn-default btn-full">My Charts</a><br/> - -<br/> -<!-- <div class="row-group" style="margin-top:1em;"> -<div class="row"> - <div class="col-md-offset-1 col-xs-offset-1 col-md-5 col-xs-5"> - <a ng-href="#/" class="btn btn-primary wide">Return Home</a> - </div> - <div class="col-md-5 col-xs-5"> - <a ng-href="#/exit" class="btn btn-default wide">Exit</a> - </div> -</div> -</div> --> \ No newline at end of file diff --git a/platforms/android/assets/www/views/daily_review_summary.html b/platforms/android/assets/www/views/daily_review_summary.html deleted file mode 100644 index aae03e9b..00000000 --- a/platforms/android/assets/www/views/daily_review_summary.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/dailyreviewtester.html b/platforms/android/assets/www/views/dailyreviewtester.html deleted file mode 100644 index 65336cd0..00000000 --- a/platforms/android/assets/www/views/dailyreviewtester.html +++ /dev/null @@ -1,15 +0,0 @@ -<h2>Daily Review Tester</h2> - -<table class="table table-striped"> - <tr><th>ID</th><th>Wellness</th><th>Meds</th><th>Got Up</th><th>Went To Bed</th><th>Time</th></tr> - <tr ng-repeat="item in collection"> - <td>{{$index}}</td> - <td>{{item.wellness}}</td> - <td>{{item.medications}}</td> - <td>{{item.gotUp}}</td> - <td>{{item.toBed}}</td> - <td>{{item.timestamp}}</td> - </tr> -</table> - -<h1>Intervention: {{proposedIntervention}}</h1> \ No newline at end of file diff --git a/platforms/android/assets/www/views/ews.html b/platforms/android/assets/www/views/ews.html deleted file mode 100644 index e74d9e11..00000000 --- a/platforms/android/assets/www/views/ews.html +++ /dev/null @@ -1,18 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Check all warning signs of mania you experienced in the past week. If none, then -check none:</h4> -<form> -<div ng-controller="EwsCtrl" class="row-group"> -<br/> - <div ng-repeat="element in ews" > - <label for="{{element.value}}" class="btn btn-info wide" style="text-align:left; margin-bottom:10px;"> - <input name="ews" value="{{element.value}}" type="checkbox" id="{{element.value}}"> - <span ng-bind-html="element.value"></span> - </label> - </div> - -</div> -<br/> -<a ng-click='onClick()' class="wide btn-lg btn btn-primary">Next</a> -</form> diff --git a/platforms/android/assets/www/views/ews2.html b/platforms/android/assets/www/views/ews2.html deleted file mode 100644 index 6b1f71e2..00000000 --- a/platforms/android/assets/www/views/ews2.html +++ /dev/null @@ -1,20 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Check all warning sign of depression you experienced in the past week. If none, then -check none:</h4> - -<form> -<div ng-controller="Ews2Ctrl" class="row-group"> -<br/> - <div ng-repeat="element in ews2" > - <label for="{{element.value}}" class="btn btn-info wide" style="text-align:left; margin-bottom:10px;"> - <input name="ews2" value="{{element.value}}" type="checkbox" id="{{element.value}}"> - <span ng-bind-html="element.value"></span> - </label> - </div> - -</div> -<br/> - -<a ng-click="onClick()" class="wide btn-lg btn btn-primary">Submit</a> -</form> \ No newline at end of file diff --git a/platforms/android/assets/www/views/exit.html b/platforms/android/assets/www/views/exit.html deleted file mode 100644 index 33ac557a..00000000 --- a/platforms/android/assets/www/views/exit.html +++ /dev/null @@ -1 +0,0 @@ -<h3>Logging Off...</h3> \ No newline at end of file diff --git a/platforms/android/assets/www/views/foundations.html b/platforms/android/assets/www/views/foundations.html deleted file mode 100644 index 2405fe46..00000000 --- a/platforms/android/assets/www/views/foundations.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/lesson_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/home.html b/platforms/android/assets/www/views/home.html deleted file mode 100644 index 0939972f..00000000 --- a/platforms/android/assets/www/views/home.html +++ /dev/null @@ -1,47 +0,0 @@ -<div ng-hide="appConfigured"> -<div class="row" style="margin-top:10px; margin-bottom:"> - <div class="col-md-3 col-xs-3 col-sm-3 text-center"><img src="images/logo.png" style="width:100%;" /></div> - <div class="col-md-9 col-xs-9 col-sm-9 text-left"><h3>Set Up</h3> - </div> -</div> -<div class="row"> - <div class="col-md-12 col-xs-12 col-sm-12 text-left"> - <ol ng-controller="FetchContentCtrl"> - <li><h6>User ID</h6> - <input ng-model="userID" placeholder="enter the user id here"/><br/> - </li> - <li> - <a ng-click="fetchContent()" class=" btn btn-primary btn-sm {{errorClass}}" style="background-color:{{errorColor}} !important;" ><i class="glyphicon glyphicon-refresh"></i> Fetch Application Content</a><br/><br/> - </li> - </ol> - <a ng-click="startTrial()" class=" btn btn-primary btn-sm {{errorClass}}" style="background-color:{{errorColor}}" ><i class="glyphicon glyphicon-thumbs-up"></i> Start the Trial!</a><br/><br/> - - </div> -</div> - -</div> -<div ng-show="appConfigured"> -<div class="row" ng-controller="FetchContentCtrl"> - <div class="col-md-2 col-xs-2 col-sm-2 text-center"> - <a ng-href="#/instructions"><i class="glyphicon glyphicon-info-sign" style="font-size:2em; color:white; margin-top:10px;"></i></a> - <a ng-href="#/settings"><i class="glyphicon glyphicon-cog" style="font-size:2em; color:white; margin-top:10px;"></i></a> - </div> - <div class="col-xs-8 col-md-8 col-sm-8 text-center"> - <img src="images/logo.png" style="width:200px; margin-top:50px;" /> - </div> - <div class="col-md-2 col-xs-2 col-sm-2 text-center"><a ng-click="fetchContent()" class="{{errorClass}}" ><i class="glyphicon glyphicon-refresh" style="font-size:2em; color:{{errorColor}}; margin-top:10px;"></i></a></div> -</div> - -<div class="row col-md-12 col-xs-12 col-sm-12 col-lg-12 text-center" style="position:absolute; bottom:25px;" > -<h3>{{greeting}}</h3> - -<a class="btn btn-full btn-primary" ng-href="#/weekly_check_in" ng-hide="weeklyCheckInCompleteThisWeek()">Weekly Check In</a> -<a class="btn btn-full btn-primary" ng-href="#/daily_check_in" ng-hide="dailyCheckInCompleteToday()">Daily Check In</a> -<a class="btn btn-full btn-primary" ng-href="#/daily_review" ng-show="(!dailyReviewCompleteToday() && dailyCheckInCompleteToday()) && !lastDailyCheckInWasEmergency()">Daily Review</a> -<a class="btn btn-full btn-info" ng-href="#/daily_review" ng-show="dailyCheckInCompleteToday() && weeklyCheckInCompleteThisWeek() && dailyReviewCompleteToday() && !lastDailyCheckInWasEmergency()">Daily Review</a> -<a ng-href="#/load_interventions" class="btn btn-info btn-full" ng-show="dailyCheckInCompleteToday() && weeklyCheckInCompleteThisWeek() && dailyReviewCompleteToday() && !lastDailyCheckInWasEmergency()">Review Something Else</a> - -<a ng-repeat="link in mainLinks" ng-href="#/{{link.href}}" class="btn btn-info btn-full">{{link.name}}</a> -<br/> - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/instructions.html b/platforms/android/assets/www/views/instructions.html deleted file mode 100644 index 2405fe46..00000000 --- a/platforms/android/assets/www/views/instructions.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/lesson_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/intervention.html b/platforms/android/assets/www/views/intervention.html deleted file mode 100644 index 4afdb919..00000000 --- a/platforms/android/assets/www/views/intervention.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<question-group></question-group> \ No newline at end of file diff --git a/platforms/android/assets/www/views/lesson_player.html b/platforms/android/assets/www/views/lesson_player.html deleted file mode 100644 index da50134d..00000000 --- a/platforms/android/assets/www/views/lesson_player.html +++ /dev/null @@ -1,18 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<div class="row-fluid mainContainer" style="width:103%; margin-left:-3%; font-size:1.2em;"> - <div class="col-md-12 col-sm-12 col-xs-12 mainContent" ng-bind-html="currentSlideContents" style="margin-bottom:10px; margin-top: 10px;"> </div> -</div> -<div > - <div class="col-md-3 col-sm-3 col-xs-3"> - <button class="{{backButtonClass}}" ng-click="back()" ng-bind-html="backButton" ng-show="currentSlideIndex > 0"></button> - </div> - <div class="col-md-6 col-sm-6 col-xs-6 text-center"> - <div class="currentSlideCount">{{currentSlideIndex+1}} out of {{currentChapterContents.length}}</div> - <div class="progress"> - <div class="progress-bar" role="progressbar" aria-valuenow="{{((currentSlideIndex+1)/currentChapterContents.length)*100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{((currentSlideIndex+1)/currentChapterContents.length)*100}}%;"> </div> - </div> - </div> - <div class="col-md-3 col-sm-3 col-xs-3"> - <button class="{{nextButtonClass}}" ng-click="next()" ng-bind-html="nextButton"></button> - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/load_interventions.html b/platforms/android/assets/www/views/load_interventions.html deleted file mode 100644 index 830c7170..00000000 --- a/platforms/android/assets/www/views/load_interventions.html +++ /dev/null @@ -1,6 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Select a topic you'd like to learn more about:</h4> -<div ng-repeat="intervention in hierarchy | orderBy:'code':true"> - <a class="btn wide btn-info" style="margin-bottom:.5em;" ng-click="goToIntervention({{intervention.code}})" ng-hide="intervention.disabled == 'disabled'">{{intervention.category}}</a> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/localstoragebackuprestore.html b/platforms/android/assets/www/views/localstoragebackuprestore.html deleted file mode 100644 index fde0e255..00000000 --- a/platforms/android/assets/www/views/localstoragebackuprestore.html +++ /dev/null @@ -1,29 +0,0 @@ -<h2>Manage App Data</h2> - -<div class="col-md-12 col-xs-12 col-sm-12"> - -<h2>Local File Backup &amp; Restore</h2> -<textarea ng-model="localStorageContents" class="wide"></textarea><br/> - -<button class="btn btn-success wide" ng-click="initiateLocalBackup()">Backup</button><br/> - -<button class="btn btn-success wide" ng-click="restoreLocalBackup()">Restore</button><br/> - -<h2>Server Management</h2> -<div ng-controller="FetchContentCtrl"> - <button ng-click="fetchContent()" class="btn btn-primary wide">Update Application Content</button> - - <div id="update-summary"> - <div ng-repeat="item in summary">{{item.label}</div> - </div> - -</div> - -<button class="btn btn-warning wide" ng-click="updateRemoteService()" disabled>Update Remote Service</button><br/> - - - -<h2>Utilities</h2> - -<button class="btn btn-danger wide" ng-click="wipeLocalStorage()">Clear All Permanent App Data</button><br/><br/> -</div> diff --git a/platforms/android/assets/www/views/login.html b/platforms/android/assets/www/views/login.html deleted file mode 100644 index b83974e0..00000000 --- a/platforms/android/assets/www/views/login.html +++ /dev/null @@ -1 +0,0 @@ -<p>This is the login view.</p> diff --git a/platforms/android/assets/www/views/main.html b/platforms/android/assets/www/views/main.html deleted file mode 100644 index 130cf91e..00000000 --- a/platforms/android/assets/www/views/main.html +++ /dev/null @@ -1,5 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/{{link.href}}" class="btn btn-info btn-full">{{link.name}}</a> -<br/><br/> -<a ng-href="#/instructions" class="btn btn-info btn-full">Instructions</a> diff --git a/platforms/android/assets/www/views/medications.html b/platforms/android/assets/www/views/medications.html deleted file mode 100644 index 6ca14401..00000000 --- a/platforms/android/assets/www/views/medications.html +++ /dev/null @@ -1,9 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group row-group-wide"> -<div class="row"> -<div class="well" ng-repeat="medication in medications"> -{{medication.name}}, {{medication.dose}} {{medication.when}} -</div></div> - -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/myskills.html b/platforms/android/assets/www/views/myskills.html deleted file mode 100644 index 81412929..00000000 --- a/platforms/android/assets/www/views/myskills.html +++ /dev/null @@ -1,31 +0,0 @@ -<div class="row"> - <div class="col-sm-2 col-xs-2 col-md-2"><br/> - <a ng-href="#/" class="btn-lg" style="color:white;"><span class="glyphicon glyphicon-home"></span></a></div> - - <div class="col-sm-8 col-xs-8 col-md-8 text-center"> - <h3>My Skills</h3> - </div> - <div class="col-sm-2 col-xs-2 col-md-2"> - </div> -</div> - -<div class="well" ng-show="mySkills.length < 1"> - <i>When you have added skills, they will appear here.</i> -</div> - -<div ng-show="mySkills.length > 0 && currentSkillId == null"> - - <div ng-repeat='mySkill in mySkills'> - <button ng-click='showSkill({{mySkill}})' class='btn btn-info wide' style="margin-bottom:10px;">{{skill(mySkill)[0].pretty_name}}</button> -</div> - -</div> - - -<div ng-show="currentSkillId != null" > - - <div ng-bind-html="currentSkillContent.trim()" class="content"></div><br/> - <button ng-click="currentSkillId = null" class="btn btn-default">Return to My Skills</button> - <button ng-click="removeSkill()" class="btn btn-danger">Remove from My Skills</button> - -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/partials/awareness.html b/platforms/android/assets/www/views/partials/awareness.html deleted file mode 100644 index b9272137..00000000 --- a/platforms/android/assets/www/views/partials/awareness.html +++ /dev/null @@ -1,26 +0,0 @@ - -<div ng-controller="AwarenessCtrl"> - - - <button ng-click="loadPlan()" class="btn btn-info col-md-4 col-sm-4 col-xs-4 awareness-btn" id="load-plan">Plan</button> - <button ng-click="loadAnchors()" class="btn btn-info col-md-4 col-sm-4 col-xs-4 awareness-btn" id="load-anchors">Anchors</button> - <button class="btn-info btn col-md-4 col-sm-4 col-xs-4 awareness-btn" ng-click="loadAction()" id="load-action">Definition</button> - -<div ng-show="showAction"> - <table class="col-md-12 col-sm-12 table" > - <tr ng-repeat="element in awareness | orderBy: 'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> - -<div ng-show="showAnchors"> - <table class="col-md-12 col-sm-12 table"> - <tr ng-repeat="element in intervention_anchors | orderBy:'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> - -<div ng-show="showPlan"> - <table class="col-md-12 col-sm-12 table"> - <tr ng-repeat="element in plan | orderBy:'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/partials/navbar.html b/platforms/android/assets/www/views/partials/navbar.html deleted file mode 100644 index a9ed8b8f..00000000 --- a/platforms/android/assets/www/views/partials/navbar.html +++ /dev/null @@ -1,10 +0,0 @@ -<div class="row"> - <div class="col-sm-2 col-xs-2 col-md-2"><br/> - <a ng-href="#/" class="btn-lg" style="color:white;"><span class="glyphicon glyphicon-home"></span></a></div> - - <div class="col-sm-8 col-xs-8 col-md-8 text-center"> - <h3>{{pageTitle}}</h3> - </div> - <div class="col-sm-2 col-xs-2 col-md-2"> - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/partials/resources.html b/platforms/android/assets/www/views/partials/resources.html deleted file mode 100644 index 486c478a..00000000 --- a/platforms/android/assets/www/views/partials/resources.html +++ /dev/null @@ -1,5 +0,0 @@ - <a ng-href="#/medications" class="btn btn-info btn-full">My Medications</a><br/> - <a ng-href="#/team" class="btn btn-info btn-full">My Team</a><br/> - <a ng-href="#/mySkills" class="btn btn-info btn-full">My Skills</a><br/> - <a ng-href="#/charts" class="btn btn-info btn-full">My Charts</a><br/> -<!-- <a ng-href="#/schedule" class="btn btn-info btn-full">My Schedule</a><br/> --> \ No newline at end of file diff --git a/platforms/android/assets/www/views/partials/risks.html b/platforms/android/assets/www/views/partials/risks.html deleted file mode 100644 index 1ecb9fd5..00000000 --- a/platforms/android/assets/www/views/partials/risks.html +++ /dev/null @@ -1,9 +0,0 @@ -<div ng-controller="RisksCtrl" class="row-group"> -<br/><br/><br/> -<table class="table col-md-12 col-xs-12 col-sm-12"> -<tr ng-repeat="element in smarts"><td class="col-xs-4 col-sm-4 col-md-4" style="vertical-align:middle;"> -<a ng-href="#/summary_player/{{element.lesson_id}}/skills_lifestyle" class="btn btn-info btn-full" style="margin:0;">{{element.name}}</a></td> -<td class="col-sm-8 col-xs-8 col-md-8" ng-bind-html="element.value"></td> -</tr> -</table> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/personalsnapshot.html b/platforms/android/assets/www/views/personalsnapshot.html deleted file mode 100644 index c326317a..00000000 --- a/platforms/android/assets/www/views/personalsnapshot.html +++ /dev/null @@ -1,12 +0,0 @@ -<h2>Personal Snapshot</h2> -<table class="table table-striped"> -<tr><th>More Severe:</th><td>{{sleepRoutineRanges.MoreSevere}}</td></tr> -<tr><th>More:</th><td>{{sleepRoutineRanges.More}}</td></tr> -<tr><th>Less:</th><td>{{sleepRoutineRanges.Less}}</td></tr> -<tr><th>Less Severe:</th><td>{{sleepRoutineRanges.LessSevere}}</td></tr> -<tr><th>Bed Time Range Start:</th><td>{{sleepRoutineRanges.BedTimeStrt_MT}}</td></tr> -<tr><th>Bed Time Range Stop:</th><td>{{sleepRoutineRanges.BedTimeStop_MT}}</td></tr> -<tr><th>Rise Time Range Start:</th><td>{{sleepRoutineRanges.RiseTimeStrt_MT}}</td></tr> -<tr><th>Rise Time Range Stop:</th><td>{{sleepRoutineRanges.RiseTimeStop_MT}}</td></tr> -<tr><th>Clinical Status Code:</th><td>{{currentClinicalStatusCode}}</td></tr> -</table> \ No newline at end of file diff --git a/platforms/android/assets/www/views/questionGroups/html.html b/platforms/android/assets/www/views/questionGroups/html.html deleted file mode 100644 index 65bdaac4..00000000 --- a/platforms/android/assets/www/views/questionGroups/html.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/questionGroups/multiple.html b/platforms/android/assets/www/views/questionGroups/multiple.html deleted file mode 100644 index 88270e9c..00000000 --- a/platforms/android/assets/www/views/questionGroups/multiple.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> - -<div ng-hide="question.responses.length == 1"> -<div class="response-group"> - <label ng-repeat="response in question.responses | orderBy : 'order' " class="btn btn-info wide btn-sm response-label" style="font-size:.8em;"> - <input type="{{question.type}}" name="{{question.questionDataLabel}}" id="q{{question.questionDataLabel}}{{response.value}}" value="{{response.value}}" ng-click="goesTo('{{response.goesTo}}',{{$parent.$index}});" data-goto="{{response.goesTo}}"> - {{response.label}} - </label> -</div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/questionGroups/nav.html b/platforms/android/assets/www/views/questionGroups/nav.html deleted file mode 100644 index 4b4e7688..00000000 --- a/platforms/android/assets/www/views/questionGroups/nav.html +++ /dev/null @@ -1,20 +0,0 @@ -<div class="question-nav" style="margin-bottom:5px;"> -{{hideBackButton}} -{{hideNextButton}} - <div class="nav-left">&nbsp; - <button class="btn btn-lg btn-info" ng-click='back()' ng-hide="{{question.hideBackButton}}" ng-if="$index != 0" ng-bind-html="label('back')"></button> - &nbsp; - </div> - <div class="nav-center"> - &nbsp; - <span class="question-group-progress" ng-hide="hideProgressBar"> - &nbsp;{{$index+1}} / {{numberOfQuestions}}&nbsp; - </span> - </div> - <div class="nav-right"> - &nbsp; - <button class="btn btn-lg btn-primary" ng-click='next({{question}},{{$index}})' ng-hide="{{question.hideNextbutton}}" ng-if="$index != numberOfQuestions -1" ng-bind-html="label('next')"></button> - <button type="submit" class="btn btn-lg btn-primary" ng-click='submit()' ng-hide="{{question.hideNextButton}}" ng-if="$index == numberOfQuestions - 1" ng-bind-html="label('submit')"></button> -&nbsp; - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/questionGroups/question_group.html b/platforms/android/assets/www/views/questionGroups/question_group.html deleted file mode 100644 index dc4e95bf..00000000 --- a/platforms/android/assets/www/views/questionGroups/question_group.html +++ /dev/null @@ -1,35 +0,0 @@ -<form> - <div ng-repeat="question in questionGroups" class="question-group" data-idx="{{$index}}" ng-if='showQuestion($index)' > - <label> - <div ng-switch on="questionViewType(question.type)"> - <div ng-switch-when="multiple"> - <div ng-include="'views/questionGroups/multiple.html'"></div> - </div> - <div ng-switch-when="single"> - <div ng-include="'views/questionGroups/single.html'"></div> - </div> - <div ng-switch-default> - <div ng-include="'views/questionGroups/html.html'"></div> - </div> - </div> - </label> - <div ng-show="question.responses.length == 0 && pageTitle == 'Daily Review'"> - <a ng-href="#/wellness/resources" class="btn btn-info btn-full">Wellness Plan</a><br/> - <a ng-href="#/skills" class="btn btn-info btn-full">Toolbox</a><br/> - <a ng-href="#/foundations" class="btn btn-info btn-full">Foundations</a><br/><br/> - <a ng-href="#/load_interventions" class="btn btn-info btn-full">Review Something Else</a> - </div> - - <div ng-hide="question.responses.length == 0 && pageTitle == 'Daily Review'"> - - <div ng-include="'views/questionGroups/nav.html'"></div> - </div> - </div> -</form> -<div ng-show="surveyFailure().error" > - <div class="alert alert-danger"> - <span ng-bind-html="_SURVEY_FAILURE_LABEL"></span><br/> - <span ng-bind-html="surveyFailure().message"></span> - </div> -</div> - diff --git a/platforms/android/assets/www/views/questionGroups/single.html b/platforms/android/assets/www/views/questionGroups/single.html deleted file mode 100644 index 065bfb89..00000000 --- a/platforms/android/assets/www/views/questionGroups/single.html +++ /dev/null @@ -1,14 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> - -<div class="response-group"> - - <div ng-switch on="question.type"> - <div ng-switch-when="textarea"> - <textarea name="{{question.questionDataLabel}}"></textarea> - </div> - <div ng-switch-default> - <input type="{{question.type}}" name="{{question.questionDataLabel}}"> - </div> - - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/questionGroups/title.html b/platforms/android/assets/www/views/questionGroups/title.html deleted file mode 100644 index a9c5091f..00000000 --- a/platforms/android/assets/www/views/questionGroups/title.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-bind-html='question.content' style="font-size:1em !important; font-weight:normal !important; margin-bottom:10px;"></div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/schedule.html b/platforms/android/assets/www/views/schedule.html deleted file mode 100644 index c1eb6ba6..00000000 --- a/platforms/android/assets/www/views/schedule.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group row-group-wide"> -<div class="row"> -<div class="well" ng-repeat="schedule in schedules"> -{{schedule.name}}, -{{schedule.when}} -</div></div> - -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/settings.html b/platforms/android/assets/www/views/settings.html deleted file mode 100644 index 878af616..00000000 --- a/platforms/android/assets/www/views/settings.html +++ /dev/null @@ -1,24 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<div class="col-xs-12 col-sm-12 col-md-12"> - -<form ng-submit="savePromptSchedule()"> - -<h4>Set Your Daily Notification Time</h4> - -<select id="checkinPrompt" name="checkinPrompt" ng-model="checkinPrompt" ng-options="time.label for time in times track by time.value" style="color:black !important;"> -</select> -<br/><Br/> -<button type="submit" class="btn btn-primary">Save</button> -<br/><br/> -<p>This time will determine when you will first be prompted to complete your daily activities.</p> -<p><b>Daily activities</b> are all white buttons on the home screen of the device.</p> -<p>You will be prompted every 1 hour to complete your activities after this time!</p> - - -<br/><br/> - -</form> - -</div> diff --git a/platforms/android/assets/www/views/skills.html b/platforms/android/assets/www/views/skills.html deleted file mode 100644 index c0434e49..00000000 --- a/platforms/android/assets/www/views/skills.html +++ /dev/null @@ -1,4 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/skills_{{link.id}}" class="btn btn-info btn-full">{{link.name}}</a> - diff --git a/platforms/android/assets/www/views/skills_awareness.html b/platforms/android/assets/www/views/skills_awareness.html deleted file mode 100644 index 9bcdc8d3..00000000 --- a/platforms/android/assets/www/views/skills_awareness.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<p><b>Awareness</b> means knowing what to look for and then looking for it!  You can use tools here to build awareness and help you identify your symptoms, early warning signs, and triggers for depression and mania.</p> - -<p><b>Preparedness</b> means identifying skills and supports in advance. You can use the tools here to build your plans for action.</p> - -<p>Take a look!</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/skills_coping.html b/platforms/android/assets/www/views/skills_coping.html deleted file mode 100644 index 362de84d..00000000 --- a/platforms/android/assets/www/views/skills_coping.html +++ /dev/null @@ -1,4 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<p>You can use coping skills to manage early warning signs and early symptoms. This reduces your chances of having a full-blown episode of mania or depression.</p> -<p>You can read learn about specific coping skills here. Practice the skills you like for managing early warning signs and symptoms. </p> -<a ng-repeat="link in mainLinks" ng-href="#/{{link.type}}/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/skills_fundamentals.html b/platforms/android/assets/www/views/skills_fundamentals.html deleted file mode 100644 index 786b91db..00000000 --- a/platforms/android/assets/www/views/skills_fundamentals.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<p>Research suggests that there are 5 crucial steps to making lasting behavior changes in life. This is true no matter what the behavior.<p><p> It could be trying to take medications on a consistent basis, getting a better daily routine, eating better, or exercising more regularly. Check out the sections ​below for more information. Try the suggestions and see if you can’t be more effective in your life!</p> - - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/skills_lifestyle.html b/platforms/android/assets/www/views/skills_lifestyle.html deleted file mode 100644 index 39d9b94d..00000000 --- a/platforms/android/assets/www/views/skills_lifestyle.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<p>There are lifestyle choices that can increase your risk of experiencing symptoms. There are also lifestyle choices that can decrease your risk of experiencing symptoms.</p> -<p>You can learn about specific lifestyle skills here. Practice these skills to reduce risk.</p> -<p>Take a look!</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/skills_team.html b/platforms/android/assets/www/views/skills_team.html deleted file mode 100644 index e9844d03..00000000 --- a/platforms/android/assets/www/views/skills_team.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<p>Managing bipolar disorder requires having a good team in place. At a minimum, your team involves a psychiatrist, personal supports, and a hospital.</p> - -<p>Building a team and using it effectively requires some effort. You can learn more about building your team here.</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/android/assets/www/views/summary_player.html b/platforms/android/assets/www/views/summary_player.html deleted file mode 100644 index 74500366..00000000 --- a/platforms/android/assets/www/views/summary_player.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<select ng-click="showAddSkills = true" ng-model="page" ng-options="item.pretty_name for item in chapter.contents track by item.id" class="wide"> - <option style="display:none" value="">select a skill</option> -</select> - -<div ng-bind-html="page.main_content" class="content" style="font-size:1.2em;"></div> - -<br/> -<button ng-show="showAddSkills == true" ng-click="addToMySkills({{page.id}})" class='btn btn-default'>Add to My Skills</button> \ No newline at end of file diff --git a/platforms/android/assets/www/views/team.html b/platforms/android/assets/www/views/team.html deleted file mode 100644 index 0e311a8a..00000000 --- a/platforms/android/assets/www/views/team.html +++ /dev/null @@ -1,16 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div class="row-group row-group-wide"> - <div class="row"> - <div ng-repeat="person in team"> - <h5>{{person.role}}</h5> - <table class="well col-md-12 col-xs-12 col-sm-1" > - <tr><td class="col-md-6 col-sm-6 col-xs-6">{{person.name}}</td><td class="col-md-6 col-sm-6 col-xs-6"> <a href="tel:{{person.phone}}" class="btn btn-primary btn-sm">{{person.phone}}</a></td></tr></table> - </div> - <div ng-repeat="person in secureTeam"> - <h5>{{person.role}}</h5> - <table class="well col-md-12 col-xs-12 col-sm-1" > - <tr><td class="col-md-6 col-sm-6 col-xs-6">{{person.name}}</td><td class="col-md-6 col-sm-6 col-xs-6"> <a href="tel:{{person.phone}}" class="btn btn-primary btn-sm">{{person.phone}}</a></td></tr></table> - </div> - </div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/usereditor.html b/platforms/android/assets/www/views/usereditor.html deleted file mode 100644 index 46b7ad37..00000000 --- a/platforms/android/assets/www/views/usereditor.html +++ /dev/null @@ -1,160 +0,0 @@ -<h2>User Editor</h2> -<div class="row"> -<div class="col-md-3"> -<label> Select a user: -<select name="" class="form-control wide"> - <option ng-repeat='user in users'>{{user}}</option> -</select> -</label> -<br/> -<input ng-model="userCreate" type="text"> -<button class="btn btn-primary" ng-click='users.push(userCreate)'>Add a user</button> - -<h4>Content Editor</h4> -<h5>User Settings</h4> -<button class="btn btn-info btn-full" ng-click="type='routine'">Sleep Routine Ranges</button><br/> -<button class="btn btn-info btn-full" ng-click="type='routine2'">Sleep Duration Ranges</button><br/> -<button class="btn btn-info btn-full" ng-click="type='status'">Clinical Status <label class="label-success label">Well</label></button><br/> -<h5>Wellness Plan</h5> -<button class="btn btn-info btn-full" ng-click="type='plan'">Plan</button><br/> -<button class="btn btn-info btn-full" ng-click="type='anchors'">Anchors</button><br/> -<button class="btn btn-info btn-full" ng-click="type='risk'">Reduce Risk</button><br/> -<button class="btn btn-info btn-full" ng-click="type='medication'">Medication</button><br/> -<button class="btn btn-info btn-full" ng-click="type='team'">Team</button><br/> -<button class="btn btn-info btn-full" ng-click="type='schedule'">Schedule</button><br/> - -<h5>Weekly Check In &gt; Early Warning Signs</h5> -<button class="btn btn-info btn-full" ng-click="type='mania'">Mania</button><br/> -<button class="btn btn-info btn-full" ng-click="type='depression'">Depression</button><br/> - -</div> -<div class="col-md-9"> -<!-- <button class="btn btn-warning">Add an anchor</button><br/><br/> -<input type="text" class="form-control" placeholder="Enter a value"> -<input type="text" class="form-control" placeholder="Enter a label"> -<button class="btn-primary btn">Save</button> - --> -<div ng-show="type == 'status'"> - <h2>Clinical Status</h2> -<select class="form-control" name="clinical"> - <option>Well</option> - <option>Prodromal</option> - <option>Recovering</option> - <option>Unwell</option> -</select> -</div> - -<div ng-show="type =='routine'"> -<h2>Routine</h2> -<label>Sleep time start <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Sleep time end <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Wake time start <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Wake time end <input type="text" name="sleep_time_start" class="form-control"></label><br/> -</div> - -<div ng-show="type =='routine2'"> -<h2>Routine</h2> -<label>Less <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Less Severe <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>More <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>More Severe <input type="text" name="sleep_time_start" class="form-control"></label><br/> -</div> - -<div ng-show="type =='plan'"> -<h2>Plan</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/></div> -<div ng-show="type =='anchors'"> -<h2>Anchors</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -</div> -<div ng-show="type =='risk'"> -<h2>Reduce Risk</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/></div> -<div ng-show="type =='medication'"> -<h2>Medications</h2> -<label>Medication 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label><br/> -<label>Medication 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 4 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 5 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 6 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 7 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 8 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -</div> - -<div ng-show="type =='team'"> -<h2>Team</h2> -<label>Member 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -<label>Member 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -<label>Member 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -</div> - -<div ng-show="type =='schedule'"> -<h2>Schedule</h2> -<i>Please add phone appointments with the participant here!</i><br/><br/> -<label>Event 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 4 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 5 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 6 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 7 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 8 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -</div> - -<div ng-show="type =='depression'"> -<h2>EWS: Depression</h2> -<label>Item #1<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #2<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #3<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #4<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #5<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #6<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #7<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #8<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #9<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #10<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -</div> - -<div ng-show="type =='mania'"> -<h2>EWS: Mania</h2> -<label>Item #1<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #2<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #3<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #4<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #5<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #6<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #7<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #8<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #9<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #10<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -</div> - - -</div> -<div class="col-md-3"></div> -</div> \ No newline at end of file diff --git a/platforms/android/assets/www/views/weekly_check_in.html b/platforms/android/assets/www/views/weekly_check_in.html deleted file mode 100644 index 4afdb919..00000000 --- a/platforms/android/assets/www/views/weekly_check_in.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<question-group></question-group> \ No newline at end of file diff --git a/platforms/android/assets/www/views/wellness.html b/platforms/android/assets/www/views/wellness.html deleted file mode 100644 index 3294d075..00000000 --- a/platforms/android/assets/www/views/wellness.html +++ /dev/null @@ -1,19 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="resources" ng-click="showResources()">My <br/>Resources</button> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="risk" ng-click="showRisk()">Reduce <Br/>Risk</button> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="awareness" ng-click="showAwareness()">Awareness <br/>&amp; Action</button> - -<div ng-show="awarenessVisible"> - <div ng-include="'views/partials/awareness.html'"></div> -</div> - -<div ng-show="riskVisible"> -<div ng-include="'views/partials/risks.html'"></div> -</div> - -<div ng-show="resourcesVisible"> - <div ng-include="'views/partials/resources.html'"></div> -</div> \ No newline at end of file diff --git a/platforms/android/build.gradle b/platforms/android/build.gradle deleted file mode 100644 index e450d198..00000000 --- a/platforms/android/build.gradle +++ /dev/null @@ -1,307 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -// GENERATED FILE! DO NOT EDIT! - -apply plugin: 'android' - -buildscript { - repositories { - mavenCentral() - } - - // Switch the Android Gradle plugin version requirement depending on the - // installed version of Gradle. This dependency is documented at - // http://tools.android.com/tech-docs/new-build-system/version-compatibility - // and https://issues.apache.org/jira/browse/CB-8143 - dependencies { - classpath 'com.android.tools.build:gradle:1.5.0' - } - } - -// Allow plugins to declare Maven dependencies via build-extras.gradle. -repositories { - mavenCentral() -} - -task wrapper(type: Wrapper) { - gradleVersion = '2.8' -} - -// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties. -// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html -ext { - apply from: 'CordovaLib/cordova.gradle' - // The value for android.compileSdkVersion. - if (!project.hasProperty('cdvCompileSdkVersion')) { - cdvCompileSdkVersion = null; - } - // The value for android.buildToolsVersion. - if (!project.hasProperty('cdvBuildToolsVersion')) { - cdvBuildToolsVersion = null; - } - // Sets the versionCode to the given value. - if (!project.hasProperty('cdvVersionCode')) { - cdvVersionCode = null - } - // Sets the minSdkVersion to the given value. - if (!project.hasProperty('cdvMinSdkVersion')) { - cdvMinSdkVersion = null - } - // Whether to build architecture-specific APKs. - if (!project.hasProperty('cdvBuildMultipleApks')) { - cdvBuildMultipleApks = null - } - // .properties files to use for release signing. - if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) { - cdvReleaseSigningPropertiesFile = null - } - // .properties files to use for debug signing. - if (!project.hasProperty('cdvDebugSigningPropertiesFile')) { - cdvDebugSigningPropertiesFile = null - } - // Set by build.js script. - if (!project.hasProperty('cdvBuildArch')) { - cdvBuildArch = null - } - - // Plugin gradle extensions can append to this to have code run at the end. - cdvPluginPostBuildExtras = [] -} - -// PLUGIN GRADLE EXTENSIONS START -// PLUGIN GRADLE EXTENSIONS END - -def hasBuildExtras = file('build-extras.gradle').exists() -if (hasBuildExtras) { - apply from: 'build-extras.gradle' -} - -// Set property defaults after extension .gradle files. -if (ext.cdvCompileSdkVersion == null) { - ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget() -} -if (ext.cdvBuildToolsVersion == null) { - ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools() -} -if (ext.cdvDebugSigningPropertiesFile == null && file('debug-signing.properties').exists()) { - ext.cdvDebugSigningPropertiesFile = 'debug-signing.properties' -} -if (ext.cdvReleaseSigningPropertiesFile == null && file('release-signing.properties').exists()) { - ext.cdvReleaseSigningPropertiesFile = 'release-signing.properties' -} - -// Cast to appropriate types. -ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean(); -ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : Integer.parseInt('' + cdvMinSdkVersion) -ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode) - -def computeBuildTargetName(debugBuild) { - def ret = 'assemble' - if (cdvBuildMultipleApks && cdvBuildArch) { - def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch - ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1); - } - return ret + (debugBuild ? 'Debug' : 'Release') -} - -// Make cdvBuild a task that depends on the debug/arch-sepecific task. -task cdvBuildDebug -cdvBuildDebug.dependsOn { - return computeBuildTargetName(true) -} - -task cdvBuildRelease -cdvBuildRelease.dependsOn { - return computeBuildTargetName(false) -} - -task cdvPrintProps << { - println('cdvCompileSdkVersion=' + cdvCompileSdkVersion) - println('cdvBuildToolsVersion=' + cdvBuildToolsVersion) - println('cdvVersionCode=' + cdvVersionCode) - println('cdvMinSdkVersion=' + cdvMinSdkVersion) - println('cdvBuildMultipleApks=' + cdvBuildMultipleApks) - println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile) - println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile) - println('cdvBuildArch=' + cdvBuildArch) - println('computedVersionCode=' + android.defaultConfig.versionCode) - android.productFlavors.each { flavor -> - println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode) - } -} - -android { - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - renderscript.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] - jniLibs.srcDirs = ['libs'] - } - } - - defaultConfig { - versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0") - applicationId privateHelpers.extractStringFromManifest("package") - - if (cdvMinSdkVersion != null) { - minSdkVersion cdvMinSdkVersion - } - } - - lintOptions { - abortOnError false; - } - - compileSdkVersion cdvCompileSdkVersion - buildToolsVersion cdvBuildToolsVersion - - if (Boolean.valueOf(cdvBuildMultipleApks)) { - productFlavors { - armv7 { - versionCode defaultConfig.versionCode + 2 - ndk { - abiFilters "armeabi-v7a", "" - } - } - x86 { - versionCode defaultConfig.versionCode + 4 - ndk { - abiFilters "x86", "" - } - } - all { - ndk { - abiFilters "all", "" - } - } - } - } else if (!cdvVersionCode) { - def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion") - // Vary versionCode by the two most common API levels: - // 14 is ICS, which is the lowest API level for many apps. - // 20 is Lollipop, which is the lowest API level for the updatable system webview. - if (minSdkVersion >= 20) { - defaultConfig.versionCode += 9 - } else if (minSdkVersion >= 14) { - defaultConfig.versionCode += 8 - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_6 - targetCompatibility JavaVersion.VERSION_1_6 - } - - if (cdvReleaseSigningPropertiesFile) { - signingConfigs { - release { - // These must be set or Gradle will complain (even if they are overridden). - keyAlias = "" - keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph. - storeFile = null - storePassword = "__unset" - } - } - buildTypes { - release { - signingConfig signingConfigs.release - } - } - addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release) - } - if (cdvDebugSigningPropertiesFile) { - addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug) - } -} - -dependencies { - compile fileTree(dir: 'libs', include: '*.jar') - // SUB-PROJECT DEPENDENCIES START - debugCompile project(path: "CordovaLib", configuration: "debug") - releaseCompile project(path: "CordovaLib", configuration: "release") - compile "com.android.support:support-v13:23+" - compile "com.google.android.gms:play-services-gcm:+" - // SUB-PROJECT DEPENDENCIES END -} - -def promptForReleaseKeyPassword() { - if (!cdvReleaseSigningPropertiesFile) { - return; - } - if ('__unset'.equals(android.signingConfigs.release.storePassword)) { - android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ') - } - if ('__unset'.equals(android.signingConfigs.release.keyPassword)) { - android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: '); - } -} - -gradle.taskGraph.whenReady { taskGraph -> - taskGraph.getAllTasks().each() { task -> - if (task.name == 'validateReleaseSigning') { - promptForReleaseKeyPassword() - } - } -} - -def addSigningProps(propsFilePath, signingConfig) { - def propsFile = file(propsFilePath) - def props = new Properties() - propsFile.withReader { reader -> - props.load(reader) - } - - def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile')) - if (!storeFile.isAbsolute()) { - storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile()) - } - if (!storeFile.exists()) { - throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath()) - } - signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias') - signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword)) - signingConfig.storeFile = storeFile - signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword)) - def storeType = props.get('storeType', props.get('key.store.type', '')) - if (!storeType) { - def filename = storeFile.getName().toLowerCase(); - if (filename.endsWith('.p12') || filename.endsWith('.pfx')) { - storeType = 'pkcs12' - } else { - storeType = signingConfig.storeType // "jks" - } - } - signingConfig.storeType = storeType -} - -for (def func : cdvPluginPostBuildExtras) { - func() -} - -// This can be defined within build-extras.gradle as: -// ext.postBuildExtras = { ... code here ... } -if (hasProperty('postBuildExtras')) { - postBuildExtras() -} diff --git a/platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js b/platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js deleted file mode 100644 index 2e9aa67b..00000000 --- a/platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -*/ - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; diff --git a/platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js b/platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js deleted file mode 100644 index f7fb6bc7..00000000 --- a/platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -*/ - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; diff --git a/platforms/android/platform_www/cordova-js-src/exec.js b/platforms/android/platform_www/cordova-js-src/exec.js deleted file mode 100644 index fa8b41be..00000000 --- a/platforms/android/platform_www/cordova-js-src/exec.js +++ /dev/null @@ -1,283 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - bridgeSecret = -1; - -var messagesFromNative = []; -var isProcessing = false; -var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve(); -var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); }; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } else if (msgs) { - messagesFromNative.push(msgs); - // Always process async to avoid exceptions messing up stack. - nextTick(processMessages); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - if (msgs) { - messagesFromNative.push(msgs); - // Process sync since we know we're already top-of-stack. - processMessages(); - } -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -function buildPayload(payload, message) { - var payloadKind = message.charAt(0); - if (payloadKind == 's') { - payload.push(message.slice(1)); - } else if (payloadKind == 't') { - payload.push(true); - } else if (payloadKind == 'f') { - payload.push(false); - } else if (payloadKind == 'N') { - payload.push(null); - } else if (payloadKind == 'n') { - payload.push(+message.slice(1)); - } else if (payloadKind == 'A') { - var data = message.slice(1); - payload.push(base64.toArrayBuffer(data)); - } else if (payloadKind == 'S') { - payload.push(window.atob(message.slice(1))); - } else if (payloadKind == 'M') { - var multipartMessages = message.slice(1); - while (multipartMessages !== "") { - var spaceIdx = multipartMessages.indexOf(' '); - var msgLen = +multipartMessages.slice(0, spaceIdx); - var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen); - multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1); - buildPayload(payload, multipartMessage); - } - } else { - payload.push(JSON.parse(message)); - } -} - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - // This is deprecated on the .java side. It doesn't work with CSP enabled. - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadMessage = message.slice(nextSpaceIdx + 1); - var payload = []; - buildPayload(payload, payloadMessage); - cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } -} - -function processMessages() { - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (messagesFromNative.length === 0) { - return; - } - isProcessing = true; - try { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - nextTick(pollOnce); - return; - } - processMessage(msg); - } finally { - isProcessing = false; - if (messagesFromNative.length > 0) { - nextTick(processMessages); - } - } -} - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; diff --git a/platforms/android/platform_www/cordova-js-src/platform.js b/platforms/android/platform_www/cordova-js-src/platform.js deleted file mode 100644 index 2bfd0247..00000000 --- a/platforms/android/platform_www/cordova-js-src/platform.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -// The last resume event that was received that had the result of a plugin call. -var lastResumeEvent = null; - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // The resume event is not "sticky", but it is possible that the event - // will contain the result of a plugin call. We need to ensure that the - // plugin result is delivered even after the event is fired (CB-10498) - var cordovaAddEventListener = document.addEventListener; - - document.addEventListener = function(evt, handler, capture) { - cordovaAddEventListener(evt, handler, capture); - - if (evt === 'resume' && lastResumeEvent) { - handler(lastResumeEvent); - } - }; - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []); - exec(null, null, APP_PLUGIN_NAME, "show", []); - }); - } -}; - -function onMessageFromNative(msg) { - var cordova = require('cordova'); - var action = msg.action; - - switch (action) - { - // Button events - case 'backbutton': - case 'menubutton': - case 'searchbutton': - // App life cycle events - case 'pause': - // Volume events - case 'volumedownbutton': - case 'volumeupbutton': - cordova.fireDocumentEvent(action); - break; - case 'resume': - if(arguments.length > 1 && msg.pendingResult) { - if(arguments.length === 2) { - msg.pendingResult.result = arguments[1]; - } else { - // The plugin returned a multipart message - var res = []; - for(var i = 1; i < arguments.length; i++) { - res.push(arguments[i]); - } - msg.pendingResult.result = res; - } - - // Save the plugin result so that it can be delivered to the js - // even if they miss the initial firing of the event - lastResumeEvent = msg; - } - cordova.fireDocumentEvent(action, msg); - break; - default: - throw new Error('Unknown event action ' + action); - } -} diff --git a/platforms/android/platform_www/cordova-js-src/plugin/android/app.js b/platforms/android/platform_www/cordova-js-src/plugin/android/app.js deleted file mode 100644 index 22cf96e8..00000000 --- a/platforms/android/platform_www/cordova-js-src/plugin/android/app.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var exec = require('cordova/exec'); -var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, APP_PLUGIN_NAME, "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, APP_PLUGIN_NAME, "exitApp", []); - } -}; diff --git a/platforms/android/platform_www/cordova.js b/platforms/android/platform_www/cordova.js deleted file mode 100644 index e94e0f7f..00000000 --- a/platforms/android/platform_www/cordova.js +++ /dev/null @@ -1,2167 +0,0 @@ -// Platform: android -// c517ca811b4948b630e0b74dbae6c9637939da24 -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '5.1.1'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - -// Workaround for Windows 10 in hosted environment case -// http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object -if (window.cordova && !(window.cordova instanceof HTMLElement)) { - throw new Error("cordova already defined"); -} - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) { - try { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (isSuccess && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!isSuccess) { - callback.fail && callback.fail.apply(null, args); - } - /* - else - Note, this case is intentionally not caught. - this can happen if isSuccess is true, but callbackStatus is NO_RESULT - which is used to remove a callback from the list without calling the callbacks - typically keepCallback is false in this case - */ - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - } - catch (err) { - var msg = "Error in " + (isSuccess ? "Success" : "Error") + " callbackId: " + callbackId + " : " + err; - console && console.log && console.log(msg); - cordova.fireWindowEvent("cordovacallbackerror", { 'message': msg }); - throw err; - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - var needsProperty = false; - try { - obj[key] = value; - } catch (e) { - needsProperty = true; - } - // Getters can only be overridden by getters. - if (needsProperty || obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - bridgeSecret = -1; - -var messagesFromNative = []; -var isProcessing = false; -var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve(); -var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); }; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } else if (msgs) { - messagesFromNative.push(msgs); - // Always process async to avoid exceptions messing up stack. - nextTick(processMessages); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - if (msgs) { - messagesFromNative.push(msgs); - // Process sync since we know we're already top-of-stack. - processMessages(); - } -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -function buildPayload(payload, message) { - var payloadKind = message.charAt(0); - if (payloadKind == 's') { - payload.push(message.slice(1)); - } else if (payloadKind == 't') { - payload.push(true); - } else if (payloadKind == 'f') { - payload.push(false); - } else if (payloadKind == 'N') { - payload.push(null); - } else if (payloadKind == 'n') { - payload.push(+message.slice(1)); - } else if (payloadKind == 'A') { - var data = message.slice(1); - payload.push(base64.toArrayBuffer(data)); - } else if (payloadKind == 'S') { - payload.push(window.atob(message.slice(1))); - } else if (payloadKind == 'M') { - var multipartMessages = message.slice(1); - while (multipartMessages !== "") { - var spaceIdx = multipartMessages.indexOf(' '); - var msgLen = +multipartMessages.slice(0, spaceIdx); - var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen); - multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1); - buildPayload(payload, multipartMessage); - } - } else { - payload.push(JSON.parse(message)); - } -} - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - // This is deprecated on the .java side. It doesn't work with CSP enabled. - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadMessage = message.slice(nextSpaceIdx + 1); - var payload = []; - buildPayload(payload, payloadMessage); - cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } -} - -function processMessages() { - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (messagesFromNative.length === 0) { - return; - } - isProcessing = true; - try { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - nextTick(pollOnce); - return; - } - processMessage(msg); - } finally { - isProcessing = false; - if (messagesFromNative.length > 0) { - nextTick(processMessages); - } - } -} - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} - -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); -var utils = require('cordova/utils'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - else { - (function(k) { - utils.defineGetterSetter(newNavigator,key,function() { - return origNavigator[k]; - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onActivated = cordova.addDocumentEventHandler('activated'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/common/modulemapper_b.js -define("cordova/modulemapper_b", function(require, exports, module) { - -var builder = require('cordova/builder'), - symbolList = [], - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/platform.js -define("cordova/platform", function(require, exports, module) { - -// The last resume event that was received that had the result of a plugin call. -var lastResumeEvent = null; - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // The resume event is not "sticky", but it is possible that the event - // will contain the result of a plugin call. We need to ensure that the - // plugin result is delivered even after the event is fired (CB-10498) - var cordovaAddEventListener = document.addEventListener; - - document.addEventListener = function(evt, handler, capture) { - cordovaAddEventListener(evt, handler, capture); - - if (evt === 'resume' && lastResumeEvent) { - handler(lastResumeEvent); - } - }; - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []); - exec(null, null, APP_PLUGIN_NAME, "show", []); - }); - } -}; - -function onMessageFromNative(msg) { - var cordova = require('cordova'); - var action = msg.action; - - switch (action) - { - // Button events - case 'backbutton': - case 'menubutton': - case 'searchbutton': - // App life cycle events - case 'pause': - // Volume events - case 'volumedownbutton': - case 'volumeupbutton': - cordova.fireDocumentEvent(action); - break; - case 'resume': - if(arguments.length > 1 && msg.pendingResult) { - if(arguments.length === 2) { - msg.pendingResult.result = arguments[1]; - } else { - // The plugin returned a multipart message - var res = []; - for(var i = 1; i < arguments.length; i++) { - res.push(arguments[i]); - } - msg.pendingResult.result = res; - } - - // Save the plugin result so that it can be delivered to the js - // even if they miss the initial firing of the event - lastResumeEvent = msg; - } - cordova.fireDocumentEvent(action, msg); - break; - default: - throw new Error('Unknown event action ' + action); - } -} - -}); - -// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); -var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App'; - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, APP_PLUGIN_NAME, "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, APP_PLUGIN_NAME, "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, APP_PLUGIN_NAME, "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/pluginloader_b.js -define("cordova/pluginloader_b", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -function handlePluginsObject(moduleList) { - // if moduleList is not defined or empty, we've nothing to do - if (!moduleList || !moduleList.length) { - return; - } - - // Loop through all the modules and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } -} - -// Loads all plugins' js-modules. Plugin loading is syncronous in browserified bundle -// but the method accepts callback to be compatible with non-browserify flow. -// onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are -// no plugins to load, or they are all done. -exports.load = function(callback) { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(moduleList); - - callback(); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = Array.isArray || - function(a) {return utils.typeName(a) == 'Array';}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return (d instanceof Date); -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - return function() { - var args = params || arguments; - return func.apply(context, args); - }; -}; - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - - - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js deleted file mode 100644 index d1a71ef6..00000000 --- a/platforms/android/platform_www/cordova_plugins.js +++ /dev/null @@ -1,31 +0,0 @@ -cordova.define('cordova/plugin_list', function(require, exports, module) { -module.exports = [ - { - "file": "plugins/cordova-plugin-whitelist/whitelist.js", - "id": "cordova-plugin-whitelist.whitelist", - "runs": true - }, - { - "file": "plugins/phonegap-plugin-push/www/push.js", - "id": "phonegap-plugin-push.PushNotification", - "clobbers": [ - "PushNotification" - ] - }, - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "clobbers": [ - "device" - ] - } -]; -module.exports.metadata = -// TOP OF METADATA -{ - "cordova-plugin-whitelist": "1.2.2-dev", - "phonegap-plugin-push": "1.6.2", - "cordova-plugin-device": "1.1.2" -}; -// BOTTOM OF METADATA -}); \ No newline at end of file diff --git a/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js b/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js deleted file mode 100644 index 977dfc09..00000000 --- a/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js +++ /dev/null @@ -1,86 +0,0 @@ -cordova.define("cordova-plugin-device.device", function(require, exports, module) { -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var argscheck = require('cordova/argscheck'), - channel = require('cordova/channel'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - cordova = require('cordova'); - -channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); - -/** - * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the - * phone, etc. - * @constructor - */ -function Device() { - this.available = false; - this.platform = null; - this.version = null; - this.uuid = null; - this.cordova = null; - this.model = null; - this.manufacturer = null; - this.isVirtual = null; - this.serial = null; - - var me = this; - - channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - //TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - me.uuid = info.uuid; - me.cordova = buildLabel; - me.model = info.model; - me.isVirtual = info.isVirtual; - me.manufacturer = info.manufacturer || 'unknown'; - me.serial = info.serial || 'unknown'; - channel.onCordovaInfoReady.fire(); - },function(e) { - me.available = false; - utils.alert("[ERROR] Error initializing Cordova: " + e); - }); - }); -} - -/** - * Get device info - * - * @param {Function} successCallback The function to call when the heading data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) - */ -Device.prototype.getInfo = function(successCallback, errorCallback) { - argscheck.checkArgs('fF', 'Device.getInfo', arguments); - exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); -}; - -module.exports = new Device(); - -}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js b/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js deleted file mode 100644 index a2ba8a3d..00000000 --- a/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js +++ /dev/null @@ -1,30 +0,0 @@ -cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) { - var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.'; - console.error(msg); - setInterval(function() { - console.warn(msg); - }, 10000); -} - -}); diff --git a/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js b/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js deleted file mode 100644 index 1ec111f1..00000000 --- a/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js +++ /dev/null @@ -1,252 +0,0 @@ -cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { -/* global cordova:false */ -/* globals window */ - -/*! - * Module dependencies. - */ - -var exec = cordova.require('cordova/exec'); - -/** - * PushNotification constructor. - * - * @param {Object} options to initiate Push Notifications. - * @return {PushNotification} instance that can be monitored and cancelled. - */ - -var PushNotification = function(options) { - this._handlers = { - 'registration': [], - 'notification': [], - 'error': [] - }; - - // require options parameter - if (typeof options === 'undefined') { - throw new Error('The options argument is required.'); - } - - // store the options to this object instance - this.options = options; - - // triggered on registration and notification - var that = this; - var success = function(result) { - if (result && typeof result.registrationId !== 'undefined') { - that.emit('registration', result); - } else if (result && result.additionalData && typeof result.additionalData.callback !== 'undefined') { - var executeFunctionByName = function(functionName, context /*, args */) { - var args = Array.prototype.slice.call(arguments, 2); - var namespaces = functionName.split('.'); - var func = namespaces.pop(); - for (var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } - return context[func].apply(context, args); - }; - - executeFunctionByName(result.additionalData.callback, window, result); - } else if (result) { - that.emit('notification', result); - } - }; - - // triggered on error - var fail = function(msg) { - var e = (typeof msg === 'string') ? new Error(msg) : msg; - that.emit('error', e); - }; - - // wait at least one process tick to allow event subscriptions - setTimeout(function() { - exec(success, fail, 'PushNotification', 'init', [options]); - }, 10); -}; - -/** - * Unregister from push notifications - */ - -PushNotification.prototype.unregister = function(successCallback, errorCallback, options) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.unregister failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.unregister failure: success callback parameter must be a function'); - return; - } - - var that = this; - var cleanHandlersAndPassThrough = function() { - if (!options) { - that._handlers = { - 'registration': [], - 'notification': [], - 'error': [] - }; - } - successCallback(); - }; - - exec(cleanHandlersAndPassThrough, errorCallback, 'PushNotification', 'unregister', [options]); -}; - -/** - * Call this to set the application icon badge - */ - -PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'setApplicationIconBadgeNumber', [{badge: badge}]); -}; - -/** - * Get the application icon badge - */ - -PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) { - if (!errorCallback) { errorCallback = function() {}; } - - if (typeof errorCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function'); - return; - } - - if (typeof successCallback !== 'function') { - console.log('PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'getApplicationIconBadgeNumber', []); -}; - -/** - * Listen for an event. - * - * The following events are supported: - * - * - registration - * - notification - * - error - * - * @param {String} eventName to subscribe to. - * @param {Function} callback triggered on the event. - */ - -PushNotification.prototype.on = function(eventName, callback) { - if (this._handlers.hasOwnProperty(eventName)) { - this._handlers[eventName].push(callback); - } -}; - -/** - * Remove event listener. - * - * @param {String} eventName to match subscription. - * @param {Function} handle function associated with event. - */ - -PushNotification.prototype.off = function (eventName, handle) { - if (this._handlers.hasOwnProperty(eventName)) { - var handleIndex = this._handlers[eventName].indexOf(handle); - if (handleIndex >= 0) { - this._handlers[eventName].splice(handleIndex, 1); - } - } -}; - -/** - * Emit an event. - * - * This is intended for internal use only. - * - * @param {String} eventName is the event to trigger. - * @param {*} all arguments are passed to the event listeners. - * - * @return {Boolean} is true when the event is triggered otherwise false. - */ - -PushNotification.prototype.emit = function() { - var args = Array.prototype.slice.call(arguments); - var eventName = args.shift(); - - if (!this._handlers.hasOwnProperty(eventName)) { - return false; - } - - for (var i = 0, length = this._handlers[eventName].length; i < length; i++) { - this._handlers[eventName][i].apply(undefined,args); - } - - return true; -}; - -PushNotification.prototype.finish = function(successCallback, errorCallback, id) { - if (!successCallback) { successCallback = function() {}; } - if (!errorCallback) { errorCallback = function() {}; } - if (!id) { id = 'handler'; } - - if (typeof successCallback !== 'function') { - console.log('finish failure: success callback parameter must be a function'); - return; - } - - if (typeof errorCallback !== 'function') { - console.log('finish failure: failure parameter not a function'); - return; - } - - exec(successCallback, errorCallback, 'PushNotification', 'finish', [id]); -}; - -/*! - * Push Notification Plugin. - */ - -module.exports = { - /** - * Register for Push Notifications. - * - * This method will instantiate a new copy of the PushNotification object - * and start the registration process. - * - * @param {Object} options - * @return {PushNotification} instance - */ - - init: function(options) { - return new PushNotification(options); - }, - - hasPermission: function(successCallback, errorCallback) { - exec(successCallback, errorCallback, 'PushNotification', 'hasPermission', []); - }, - - /** - * PushNotification Object. - * - * Expose the PushNotification object for direct use - * and testing. Typically, you should use the - * .init helper method. - */ - - PushNotification: PushNotification -}; - -}); diff --git a/platforms/android/project.properties b/platforms/android/project.properties deleted file mode 100644 index 1030defa..00000000 --- a/platforms/android/project.properties +++ /dev/null @@ -1,16 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt -# Project target. -target=android-23 -android.library.reference.1=CordovaLib -cordova.system.library.1=com.android.support:support-v13:23+ -cordova.system.library.2=com.google.android.gms:play-services-gcm:+ \ No newline at end of file diff --git a/platforms/android/res/drawable-land-hdpi/screen.png b/platforms/android/res/drawable-land-hdpi/screen.png deleted file mode 100644 index a61e2b1a352e55de3d3c7b2fe3174426843db7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218302 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 diff --git a/platforms/android/res/drawable-land-ldpi/screen.png b/platforms/android/res/drawable-land-ldpi/screen.png deleted file mode 100644 index f3934cdcc4acb402a2b61fce60d8bb773c8fa247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42616 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 diff --git a/platforms/android/res/drawable-land-mdpi/screen.png b/platforms/android/res/drawable-land-mdpi/screen.png deleted file mode 100644 index a1b697c537be1b4848f18436686630a13a85b018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92347 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 diff --git a/platforms/android/res/drawable-land-xhdpi/screen.png b/platforms/android/res/drawable-land-xhdpi/screen.png deleted file mode 100644 index 79f2f094573663d4f70cc0344da04dd3883c27df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489604 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%0Diq{Sa0aX zw61D+T5%}fcUBnO#ghgZ=@E<~z;u#i3%0?K;xDN1#HwM#h7Pjjb<^7sER^Vml?RvS zd#e$KZT3UP`t}VE0<j7TihpK{YSIPR<G3(q7s|RKivB2jNwh|eC|=!#;$<#R`WW?2 zs%BJiRe>9+UR~XUCG8@oO;&bVi&f~sjh8takx;+H@W@9us+%27sZ*&<B{-NBQ}v~V ztbI$lpxat=F2KUJX6X5Chk2{KvX+O^s%A6%3eK$1?bP;&*!ScLdr^Y&x*iF-he}U+ zjDW$UygkG)gIm$i(z%FbqL|Hb`d*M>=2#_%P;6)Hn3HVO78Xj^Tu(C_xO1pEf^(GW zy19Es!8LMoF6*+Ux@5}P++LX)u`mbJFzr~#`4j2jInb-YZS?xgqIRsOP(aD84O04o z9lczI2}#f442Ad2L@2N{Ixxpzp>%4FTUtyCNa+MnCLD^MOgm?raIV34)tOEDenXCF z4O18-@^pu+dTbkFG^%kFgly*sDHpSCD^4Jvld2Fm4R3iV5+-ac#~`cx<uRqUdFltl zly`KpC5-EdC^I2<OX;$S4fF3R;k%g#j@7wsjIv3#{XJ}tvOU!{RyUrOL^Wi4V2(>B zq>!T^b7EM5kJIJ}PwFwx2F>y5Sg@U%)j~?}SPsBPPdrALjy|1*TUKL=8p=+$^Qu!J z+s+YN37G^o10TkuglM)sW>}HCamMOJZ7wWzb&Q|P#2C6V%596b5t@s7iBN1r8HU^o z0ccp+D?O6SP<zucJvwa7#|~<43K?9CK}xGUdaYPneyIfHo)G4HZRsobSQZ;4+*sRy z$g^k99zJ|{PciVLhYx@K#nab?UiS0jC%zZE2y3SYcm*SOzrzVrmos3pwe1jh=1T8< z{(=n~amMke_bAJV^7#M57T>;n`SP=${Pc|8)s}a^I<gUyrK33PSeQN>(`>iJ=xD+A z3H9sA7x_>#{I6^NeEi`Dr)#<2S?Ig{nW>j*CZ6dS!(t7Rfy><iq5`1#&}EJ=%ve;B z2hD7Sp6d(4F>*9?EGlcv1m1MTQp%y&I!($MCT|qju6XxmSLT|F&Yg7OYK6lzKVuKK zNefub{*fp{;5fq*1?Bmm7RtvNlVKfI8j`(Gk8M<ekXa3DzSv>omi#8+fhafh;ylg* ztV4#mCYhXmsmzOLXMV_-n3Q#rQ_l*^86DA8n!qs-%-~yRDqW~jG?0?h&X_rEJUzOx zD2t=W7MtlYh6OrQucP@eYZo6zpHvh=rHiD<mYXI#r(Z;g=~be%P^JB%qF+`0T)s>7 zdls}&485I+ml2QYaH{0hydJA>^e||45L@bm2CX)nKT723qgIMKO2Flu%_!5BC7W-W zsbkYJMzFXr_b#fEJ?6ksBAT9`F#7A54&h-X(u3P-8IJw$KIA&B#35p!%1!AvBsK0~ zZ0?mU%fBHbz}&qRLRU#}Y3M@_ScA)E6mOX}sY`BGF?^vJR`V_KiIbKkle{g0<644{ zh{+Hu7b;0}uW)THc$5VdhhaG7Ca++jI8voW^}wn+QY77Or(q^%<)NGL`FJGSCs}Ol z<*1a%$H?S`#7*0j5q3UDHOZCOoaJ5ooRbgQIHN742(UXDc?G;_!Bb@mQx&!ym0)#G z$_s&H;Fal+PrG@)Q7&e3-6=(JCFPAgOtmZwVQQmG7@c_-G$vJo#+?A%G2B~W(uIDr z9d;Nd?91WHq_oD^nQ}HB(-vS6Iib-cl17~qbsYW9mq@+H<1<X?yTu2l6kQ;-lJg!~ zIaG{<)R`?Q5~NTewlL$F5@~q{ewvP}Q@J}6Hm*lH;wZ@GX~cd*6lvQM)3^`S%Xw@l zAs6nuE4cx{j~+d`cWuC%74VZM@%gV*hI*s;ch*ii4S+edM6R(IV_giLEQtg-wa;<K z3Ahz~xmR=ckLM0j!r8vx_9JGE_09$<KKsefUc7i2C-kniDSQ=IcU#5HAMXBri-$AF zy0sNP#MOa^m$&TdV+HtjA|Jkn-W6Uq^c?{B`^yI4?>O`g4_P=;ro&G~QbNqS@9-lp zkXS{+)YLbZ9u-)vWC)m1h^MqMAf*Cbcg#!vQ>xl}^gJAPm2}jxtdDW?7B6kMe;&o3 z8RrrcGKx4jh(dYBDdRd~z%7*WLW0T?!|27RQ<*D}eR8Ve(iDVLgeqkQ1q7fH`f1%$ z+-k?cqk4kMohT)Y61^I~(i8q>Uu;$B>f@XRN`)$7P0C1E0hv7o&Jt)jAH^B7G;w6s zIE{$MUr48!bw4X5d^QT1S0}&%8qB7|uy{4^6aXA$j1m8g=}LDoh6;NlZD3SVTZ!x* zi+Q!Mq@;I^!_$sdMqvqpC=iOQ)Ul|o(}b9*YADksH#9wSP7Qz9D4twamxpp!Q3|nJ zWNz~^bpJXMwW|~wsoE7GgHvOKz%YZV2T*j0VQm|#3t3WvDCS#PN%xfmd9j)tc39eJ z+cU3Gt%IR-N})?bM$6WwoD;0>nN<GE3Xr+Qj$jz>k*(6NJ$8!VW2?^NXv;Tg@5tRz zObjJSlFAFEjgnI$C?Za(YOb}J*QgCSFImi|r$%fe%;ae?wpn;XhK$MvNG0IJi(Di0 zBMkKz%8ex%tCk)KXN9{HU8S#3@T~Uc%T13e`^$7Ki5qZ6_Sj!&z75D5HP`Vd3Ehzx zNi1gG3u!V3JFVU8Xq4npnm&xu!aOIf<3kp=iH>NPI<&h1?jmPZK=Z8&QE1F7uq+5C zi5JlB_!|m(jJM-nwOuK*rZ$uZ#gejBD9&!|pe#pKwhEiPB>|CXtZk_m(+;YxU`dXV zt2A#T#VX^0Dl2B(I~Js$>;Q(L-C|vtCp(k<QN1<2%VhYE(YkY3T2sa;JB;&CebI0J zeglB-WBK=30e<K0$8X37X$>t-VBkFfZ0?L|(wk8#IejkY@~;-=r3KIaquI%KdHHN* z=q1IuwqeauRXiMyzxSh0e|$>sYO4qw(eHzJaPx<oe?Q>W%^$AD9(z~vefg3%K>D^y z{BpaayE^b9iLgjE#Ou|&+N%IJ^m{L$@0PGQ90VC;PdeZQ6*QMZC&Et2QA}~BdeGd1 znFi_wXbkSr*ldr%2fVeXq_@@g6y{>j!q!p#wM=&u`I5rM8@`V2vqxhNL0xJ_(ThAp zo90xO6qtFdtny(yIq1zRgwYGdZH)At6<RHJ;JMG2!<uPj$a*Vkk7Vfqvm89V1G73e zqi|M6`Z@WgBLB+x*V<w;q|vEqc21+1<Ca<kdXI<^CevAK<Yor18sQOeB5QXRER%Rl zG$edO4L~t!Hl)>0qIzRH)C!C89bs9UVw5~gjb{=w79M$4%e@y%8*!F}K)2kK*)_vz zHetl~Q6x?jy}eI!{&9%C!7rFIuYE8Se3rV6W=v?#$=lhR%H0qtYl)+paP)rmBdnX- zs;)3P1|%;rn5alh1eILt?6TUdXS>WlGgRyb<npWs;ynw54CPX?M;pP|A+9;tn<~8* zrgri6L}@pM3M<~MF#vq?%ZxJm&H%C87tDh@Kfo0KtupA2Rdz+p{Am<4t)~TRqb~-Z ztX{NI5w`+rmUiKT6(+vrieFWANjB33`MZ^@RzzeXtK{{RjdFPf6uGcw%<ajYfcpd* zt=MJQtDBgm4l<=;RrJ9~HH&z<E*8yp+po{2<%XfUn1#IUv$!{46X4!nY6i(tb0#X` zkSroI$95vPFB)Me3?+Rd*1fg!$}2u2k#r9{p1q?_4^W2Mt#ZrTL=y-@)9C1iv$PZ_ z)Jxsm0a;`ma_3|+4<PP%(HmDrA(Yhj<^}6UN(l|icQU$x^Eez#|6ye9f!QH2t>Vgv z<R&w2Au{7JA{wGP*5{e2W^Z2sJz1*(IL3!bt*~COj9Kmcc588KxQQVIeNQp)@4WkN z>NCB03iK(sw5X?T38rzTTq$4@6q5wjP_9~(f@5|<n(_Do_0e5dIXMLHptPxx7Uwjd z=`DaR)O^?f`}r?_^_wrgTo-=x8#jY<bu(5E;`#>qKIFsecyRj<Z@}=86n%p#U%reN z&*S<<Jb!+>m%QLet{;|#-~Cei@!H-9-{GUX3UF3A?hEwQ1smG9BmMxPYOqo2$H6U# z35$+G)du0!V|ajGLPV1+gbq1Vd4U&lL`-I(8|&<~7R7SDqPG85Fq!?Zb`m)A7n2YD zq-T*N(so26>DJ0D3-Snt6{M+_CsQD@A%&k*fUnrhEDWuX5&2j&(1TznyLo9EdOVrB zU<u+V<PNBmZ)s^*Wx~ZVOVHs*vK4D;0D!FKI?a3ZXKwdt55zrV3on!j-%8%R@Hw+V z%a40n^zF)&nVz)%vqDCMTxLbm9HAk6=*tAmUej=D8N<pSko$^L(oDs*vU;14X;kHP zz$p*|`-~}8^|i82WL~*+m7f~50EuUmAOKu-YZNEC;3u;}V0Pn@Xa$OAtV$k99ua1@ z0y+v|a?!2i^;Rz;WLay}ORAz;DW1Y2bM(wc_2|~axt4n~y>MyjXx{xcDG~R#4$NM@ zgF*`v3n*fJj<0E)(I~y2zIJRcf|seQD6ngeRSy~Or)@UfQNT|Tls^^{rHEvC#~i{! zwgt6(+0EEd=_<b3`qZzpyW##kGew;eM^ie%t$jAX#Xyr9wwvCuZ58thsG|%!79wff ztuH?Omth;gcE$&*xjMRYHa&x68(_8DnoD|p9Za&@u;YCpg1z$ROBRc|d77cO@1->l z$L31RSPYhLN=3<UvN*3NQFSqAC<8MnUhpKHwbh3uX;gx?gLz5-%&0_|M7VqsB-FWH zdzP`djVPm981hlC*mkAa%Y9)p7geX*mLi;eQJ)C>Mv`m>mrQZK*3k<1-cg`qSOG`8 z5d_Q~8>BVNm;r0tBHl66uI{Gu6_4N9$dW@3`c|JgiUxAkHJ%YH_+Xd(+-tww6TZ3- z{W|0&cN>+lDh-pjb=n_(`q>KodYeUTwC5YRd;N$HAI77{@#rBRJdEpyac2j?!{G+^ z-T+|U5*BXD!ja<CRcmIi7T*fLZzAdQ&fA*_@Zs+39zoyyGcBji$+J`^TBEwPy;ebx zrPX2SN4Oke5hkV|`QU6wOAi%L0vQXj$M)t#OKpFwaI4&{^#3>huyWgBr#<Y<P+`Lq ztcoDC7(z;b)=0U*o?xqoX6C$^K-Ac#M2k^QVAeRZ#0^HFl{p9nFiWRfbnRpU-JE!7 z$6HxgDmJhrxm)C`0&huu(1Lcf>Ur-TL${+z-ks{MQDc~4#$xeJcEKyhgW5SMbksd= z4Qm%oZW<GlEM?+JYC1fs8D(4bfug$#ncY~KT-EY51Bez`vcV<P3F~hgYYbsMq*F|r z{6Nmy&JLhhMVnv&4@*U(y|gBZJYZ148;+uD9981W(q)=!IctqsQnMO^%6d-xLJHES zs7_nxg{+NhP5vgR?}g1NYONt^-8=gq2`uVcWecelo+xN{@?MI?^K7qSw?Cbx`RXmp z<~sqlHcLAaGS+v&4ef4r^}Hk2Ue`GDUv=#wAv4flC%P~TNcCTDg+jM4=yp=5+=+%T z8q<ccG)jk8$kD3T0b=a}KLe<}5w%_stbtGLyLof=1+TM}g{#y~<JIhG$4@^*+XP@u z!h1l3LOwowL*=+bCwJ6Ews19Cy)mcP)P#Sa5;IosSNz)PDrf)~>l0X*gsf)?7G@js zvg*;KTWz$z?Tu+n+iL(N(VJnxeWXB#SpnbRqZdKOo9_WW1tU7<QsVoT#Cr?vc=cdI zzi_7_#><ymIg&4nv&cTbxj6e==IgsBbw%!0N%#7Gmn>*bNr0o-)3c|~e)0L|`}V#^ z7TO)4eei(Sk8W^pJbuE*Z^e@*@#xVl9)56(_T%M?TlD+%tN7}x+aXQi#4UYrO7Dv6 zXZZTlJ)eB?;Wumm{<fg6@&bl(mU%vJ8#GYcS5Aerj<cYwcs-|^`ck3b^=&*{C~Fyf z)Iee#x-9G#=bhBI{=K9LV3gHphhJfF?i^tNd_aT0^|h<eGMb;x912dk@KYa9Pl?){ zR7(r}MD0oJv&PSRu~NY`Yrjg10$b=}Off7U>f&(46r~w))yqm)9mXTX781u4#`lqn zIj}0fh8{XLCozxC3h=>>$rvolPgK;rGBBM#W-eLGKB=6m3)lfTeH_}VSk3a2#z)wT zCUGi|n;%sVZ(CFwG5wvMdBN^XRkT%>Bc=(0)!a~wiQ69FmAmmQdmPd1#O7QGxZ@zk zGs7#rg>&n9-w}$-ZD`Nrxp_io4@mcLZTGaaT=u&JE;GJ9zj>YXoW_o;Y#pJ6!#vQP zx@LHU)7Y|pP&GW>bLd{Y8=3)NHD5<nfSfI@&t2fO#Abc=iyy=~xub4nEJh>N(+%uC z<U3Onv06~r8P^kYZsDnX_TJd04$lwHB?H)(-l9F;Sjwl~&8;|2t(8JesQ*2^@^J38 zY-ksYH@mWtJiNU9x{oaAqZRP=)zz)Q(rc{%zZ!vcq4s<{qwa7W?iyLIu6h07wzc)@ zYBb{9K;Iki_Hz5p!{)1dblQ!bPT=FR+ss-g;j1QrwPy~*nCiF}qu;JC<u%}`a(wgk z>1RJV9Jr=ErzpYA*KNn|gLrryj~?^M+wt~0xBonO^7nu7Km6n`{>8)JeDS^i_@BP_ zm;WKY{35P?bNg9${lK@Q_woU8m@jj$@cTw5<j3Ft-dPW%?<VxsH&J))hPi4e$qV+^ zQo*S)TJ~@Sq#}vA+;QS#u#B)cA6d=pWBx77J4mr7-n|Z8>Q(s|)R+J#qk(>&E^21^ z$E(%3y#2rOn9szb9$a3Xj}5U3&u&RAm;7R*w6O(iSKX|5f&DrCxU#s(GpG78)Id!U z^L*@p*qwAPII<hntv)5&V!3`bCcCD^y_v<%m3d`Pd_u<ZCk_8_KODn}M}^a2%vEs# zUEw?6;$0di*M3|@_t=fy@D_VfW`B-2zAbm_fx98`;xevssmgmUfA5+VS6k!Lv|+e6 zR20KDNmcpJ`&r(0DihvYk9og@;@VX<EiM<LK4_YlG_w`BA<HVe!3a!N89Qkhdg@?4 zDcS~7ZK_;qxcQoy5;124JDJZFe>X3)vDtW&J1{Bzpz7f;S%w#1;xL^FcMT%Dx6gt< zSGJk_h5BUDhS)5B&<t{>2O@i%^&W0d7~#T<4GH>uGmE%xRyR#{)NCN#v#<$@)Kzr) zIAi@olt}`k?MLhCZ_a@^T{aN_wvS>zTg?v`u3-yS7wG9o9Nu8`twz)Xkaa+7L$N;$ zR!d$p<DG7>eb|0@#NzAGcB(oCEOWNbsN&3_5#n7D`0?Y%_pSnbv;uzk@Znd_U%WPK zLr&0eALp)M7LNzpF`;k^eIM|_^)0l!es}}(ZvT39_aqK?wcnR7Z>64Y$-Or(<|b<# zF*v<z410i_=l1lkI%|4{K0D0k(^AxP6Yu;6qfeBF7l+S&`m=rUt7ANYJJXq~+aY@R z=(hHI1AX6pKi+%qr~mW+_~U>1&u?Dz;;py7_+S5*7w^CO(f{>-Zw297O{`l0%oi_i zInsyWeE034-`fiC#~<Eb=sSsk*I;EnCYP84z9H81E0@W8sk4<WD|K_Kx3FQoGU=`N zm+mOUaw`^kTThqiKrOP_Y<2CO)7rC`cJ{eamjHD?xY$jWY@IFe{2Um;?~OaL_cDmg zuzM#=-~D)V8!n#qiD0UPd^N8v%9bUZWlXJs#V8r;5K~S%(V_vAJ#b;*JXJlg2gZvF zO+t~W_l1-1bun&iNXsvh?*Ci?1ik6Ah}<YP=L|wn6e5dJb_N2g7-8`k+~~J}AonSb zh($C*_qayS6Gt(XK1by$X4pLtDrTNxlG#(mt)d5)<Ekja_6U??Wd;u(ZB7uWFt+Iq zX*Mo3l)X+>?%ui{ratcgM`%N)rL@{1yF|3MY^$rRLS?ORsXy~%szcJk#m6<Ier;|z zEM8c;hN661x4z~su06fuLvQi)hao!rq@rp{^uwoEDgjhKc|(K-HrU<4HQ9?xc}k<9 zZN@~&d4yrW^ykePXuj%j$)LJNpiJN4>Q$98Xb{R_zmM-Uxglc>N*lyTithbpuH0$| zsFXmo*<}V=<dWGie0y1%jNSOmyr`orXQm;Qtl3y`ae<mq{O0Gpk4%<`DjsbH?s=)j z6%54;3g%2`yPQ_cyyF^{r0-slKE_OIgjUxu#9I?RkT<hU-Ei&f9!j;-cDs}Ep^_l8 z6dgQykjD)@Bf$n^ON_B!6kmPIr_$4>PoF$_a_`!JH!I*r4-dcjlJQzD-cLVX<m$UZ zz{6_s*w^|X9zMM7Ykm0W<`0L*kH7r=-@AJL?8#?8yT!fFpQTgXoz2hHZ9Vgl?YnDE z^A%kOi>GS8-UM8K)J!<Bi+*F@_qSk|UW+Dw`tzSZfBs@!_*L2XZiucQ+;;pvdJ=Cv ziFe-R`|p4CkN^0yfAQxZAb#iW%06e@{Pn%he)jmU{`xL)@QgP@ck|DK>)XG^fv*UC z-^4`!<fDxOePILeH;29#S`A<FLAl?;5hHtq?=Gxn{xbGTdML{3@hI;bopjr><vtI? zldeM=*^UH{K3sOaCYB=$8m$AC*4jzaoAl(qTyt94MW%HPn$<<&eyHX@=vA5;GjUa| zVod4Znt69;B%)T@hRuy4K-3Q__+RBHs@b%h->K<kidh-;l$>`v6j9v&+}Vc)0$lpD zCQe#VW)6bo((~ALH$s-GaW4ktHS11+f-C*0rW0b39`*$Du>F-6BP-&g<fG*bTWXe^ zus6eem^21%jI5fNq6kbh9wQ#~3WQ=4)ut>=MO09O&YUjLWDZ1HFt@E}+A44>SH-wK z^~{u`4Ht@Mf#%3)z<21E23^HokkLc_c0nPr+64w?TbdS}JIb4C%$N)cuh|(Yo^GI* z9Y+g4&AmlYzY-~yWT5O{-4m{Y@s{5(+&|XSxX0myYDRD7MpLv0((2UQ?aUfJ4YTv4 zq5B$5)^X-QDmkHi%<xsMY-gQcv6qIhd!#Axrzfqe(z|PO8kY)`u~sqtd^HU|$)hrg zlX)&!nn66n1$pVd#4w{KYJQ|vbir2XJw@BSrRvRM&0|fWrG7^#@H-94R=NzRqrx@1 z-czRY%*()pKRE1YUBfJ+4cKN4SK=f&C(!!l#Hi)VGX2X5t(`%>;bv!M)vI!-j>-WY z*%{u~Nk}sf+j!iB2Wf5#3`w<H3Q2;O$BztXIZ*~sD5tAgmaPID(CHuL%<!{X9+0lw zSOwBHqX5VGuq~Dz_P7r;iPf>FK*=LKHs(WOEi19y{O_K&0Uxb^-@buNKmUi<r-Q{6 zhKiHljGEv+lAkv(pSZq3zmMX{<9PJ=#rwbWvw!~Iy?pfO_TvBa*@u7m|2+8RKioA5 z-%ahK&+W^rxaIU7HeU3q%*%s09PIb~?lGU2eZM?e`(>>)#7h6U{pdh``s1H4_QbD_ z|G(Pwv2Tmy599I8K)ubk-;Q_R`|Mx-`9FSuA6&)v?&kY182<(M(f{-pKlu6QcT!kS z<LR?_`ZTVe^Tn-ylI%||Ed0I!1pLWIA6!C#epT#x$&0`F2aW3ni$QCR3DQ269*4O- z@JR8SBV_SnZzV+!w%q&BYl60y4PQc$tD+=Pw-}6-wdKL9!eKVh>594;%;hndNO1V6 zY#^t$I~N;y-9mc&$x=4l-v}%?*ZfjNUP_n0?!arMQMoqi7$2W1=h@75z(O;#my#1I zJULPbjT0U~^_ev@=&Z>o%Q6zmkdCoECP^I(`54+kCd=Vw6*{6TSgs=no5Ff@#xtyf z;YHvhW}%N`3D}}0RalFoS$@d)w$)OJlE#Oza;?;>j7<Jt?#B9V+4WJA8C$GXpH5CM zdiW_xcduqevej4;1(bD0cfj4&pbKFoQY!(iGF8k76BaCCLCB^OEzO8C%W<AhD3g}? z8DJrWP87|`&7=trm21?#W*T`iC9Ce5%7efll`}~-IJcK{oj@knXu_=$fK%>9Ipa4S zBW58S(BYW3OnIZH-kWO~XNyvToNX_Zxz{!j@?$ZRmAsj7LvvWqC9Cw?K)yNe3Y{ed zDryn!Xsew-Ja+~d9TK_=BkESAsC@P;t^TaGJHwLPTfUI+Qoi(bpd96tbnSa+k=jWB zFP*YfeuYF07sA1xCH!O)V|L`j{v|(+DN3bhXa=jWJy5>vVQy^hBkT(IuvMpIU83J@ zPNvr%4Qx{mO2Z6L7HBzb+-|Gyah5_L(PDc!-s-f2E!*^A&R8Mfx^?V|94#2fSY)1& zH)ARbDl9v`;q2j=!Dc+?xwvsfU~AVkp?gZAGts4?LrGp_sNqo=g-5e_4Ymy_3V_aY z%oTzhA0==Vl$5NpJ3??Xgd5uGnscs9X&#qpK@F@Nn~qzH8GVc-=G|o<osjNV1vssM z-+kvT^3Z_CYvDrk0suT$h0}H67L{FJ^ZNQ$%<1uy!&~qC?7#nK&mTQ{eE0Kbj~@N> z&;QxS|NcMRK9QTte|gu``trr?FCOl4HMauMjF`=R41Mgi?Oup}7sAfF=r>B6%R=(1 z0pnl&>Nj`pN3#L20cs5QqX&2V=SNTC$y@Qxdtd#*A3plM5C7yU{`4w7xSOkg&v+2= z#RtFp#UK6ATTj1?ufDuh!+QGFttj->^V=lCv74HgbDm%SR6py1^qqyis++;0q&z8Q zYT|6pJUM6$hv{fJws7GeXZ4!d4U7(D)<;$+w(5dOh77{&D73Nc&ZBQeeJr^<Zy}Q- z1V~^y&%Fpc^kg_k<-KW0P#6`-0m<xUQB{@=Y?!yQsNRrFF|AA9t8W&fj~It;F#xYo z=5bP_yD7Gs>W<ELQy`$4o1JQAj5}b^5y%=2L^0p=imEJR3MI^rKd%gWfo1bzE&(7c zH$F^^!wI{rP3){7%g74S`EUW~ph_?F%AW3y)jM{xaU7WxOn&aQTifDu)nu%mqbjC| zrK&SWII{v##Ft04VPuBf3Rck=M_EGd&y)`%yx<+GYSRk%mJ*_K*qBYdvhk+s9Iakd zlJjXA9&%Y4n!v^Ry;Q)NaiJUtZMCNzG}9c-n?uclbnrE;`h%J%3io^+VWw7k(IX$_ zX4@;}gdA0F?f5CzQH_jUIXqzG;o3Yg<_c3B+(kNy)hH2yUgqDU1VtL`wjOE2Q%DW? zw8tJGuUF2~_uN*yS=|l~>*(_9^zqX6WCGgaK*Nxyvw1vCmfA=qDP-44dh8rtP0lc$ zF22q%x(7rj7FWQC#|YWsx#JKM{m7oF@E%}<9k$kECZ~rZ=_NRlX$~h~j0v9TkTTE9 zlWH^F9(!Q8>aQ%iR8>zEex0bg5y~W4HieXrSyY%z@yn9(5X{txEaf69JvW>$fN*(s z3tUl3%mF_^jMr0WW}B2Ho%oxZ7{R6zK`lSjIL4~=VnCoAX*6o4-+;mgh7fx38q8#Y zH6FMY%IK0Xo$=#aB)fugmZqE-BZDeISQbt|>FqK4+}%6C8Zlumc3VA|N_@i)gW(#Y zDgcbZVi~~WnaPn3qtWz+KeruW;&sQf=l56$`gh-Z_cg!o4rTT%`lWfn#{=A|I^7C8 z-I@A4e)8)-{-dk69{(ZYt-BY0f%w^5kAL;Y|M>m?_TO$DZeKo+=SP*Smv`nt%kEyU z*e+zBX{D%L)ho_-gtN8ZHS%4&M8ojuXFr|vuIjLD`}0*?U)@^%9tY~JxB2!vKl`(P z`cJRo2Y3H`cvm2Q|8UzS{R_r_{*!<5hd=yLJoybDKfYy^Utix^2fy&J_Y(B`M!r70 z6TzBQpuh9b*EoHqPgRi$#Ge_$&IzctkOnN3UqHFkkT@#clSpNlWGk87pWNSypGcsj zzPFIU<Ty$$)~J<m;$}D%t?~u4ijAiF<M#^hJdW@>t_Czw1Rei*Iya+1`e)?tGs8K> z!p<4jt3dM|9_Og!Frl+2{BV`Z1)Rw{($K{imq4@YNPrg(c@vojYO9edKv0OTI*G`) z3C_K!8;uK}6D|9_EC$YkaAt8tNgp_NoUK45Dwi!Xu_-bWpij;scVaXzyC-E7rUfoT z-La6e>2E*{hzSjb=NrsBROq}LY0Z%s+)kT9_VA{2pmdkkt72)dmrjv&w^cf9E_+sc zC3;Z+X&Ek~YAfd^GtnE_251=g8E`HfJ&(be@2$JYsJHe6$b~%j6rdK$<SUNSP*_E; z-7dOl+vl2+`8PxC)Uj(`JH9ngWd2T@J(rck%@cdX;B?DyqS=Tf3?3!p&C!dtT8mn_ zgsNHS+lJ+vBRS|5RV_^0bhAjEX{Ala99fy7EXPWMCuFYcU7+5>nR|NH#_4|1oNcVq z$;J)hnlLV{?YIiqLBk3b)hv6JoO-f24uo$P#N;GUIxVw27S*6fXE5^EHZwowZbr}h zy4bmSt>#G%nzM}gVCOh_b=c1Pm<n@af*aSO2=hC*4D%SLemSiAXV%Ih5Qyeu$^CAB z>F+%9s3yv(P6DFLHl>0~ad#vEbC(b)&gjjal{!v&tGX-Wl1vAu_hVtmP`ue!zEVmj zCAv@SH&RjttzBHidvcp_A<U~T%n}gA&4VSqN#FIYYg}#xp20<6Hg!@xn(AvnbFqL? z4QN|l%N8<|a?hVWyLTqQ`Stkmqpg(ks<*%sb-*>=<vFCmOgi6*Ki`&rA3Tajk8VKS zuRs3iA0a+QymR-G-`tfn|MruQ-u~>Tc>W?DJdcOZ<K?YP^qnox%R4J#F6FK6-X1#| zS&YLu^oxc^YbVvd+3zm;osjVJ=g)t>azA3Dq8$0pcyLs}iYJfx<jLXPcOQK6{Xe*h zKfL?r!@J>nbQNDj{Fw1qAAkSw{(JcKFOOcqx4-z+)#kB$_%_jRngB1S;&&PPRtW4w z$4pquI*q<#L2X;xsb;6G?=UEGo2{17;TrNlc726WyV(v6M)g{iYDjTwMG^xCEz_yW zW3`qDHLGoD$iiZMDprx83?^M;4}^VGnP@XZ?W~Arxao1)sH|E49jbZg*yGXlx7lQE zCcoZ1L{KV9$P!1XQVO`CJ4jhctr{n|-TjsXPQ(FPkh~$cLBwO}R0=m-wyJ3{US**c zMuj9JMQo9q#gHzZlCeitZk<Bu4!_+F*SfCYtWI(Ayx6pT079Z7#cVTL3>u~DO`Px1 z8y31T)O?omEI=*Kn-j9<Tw1@2x0hiyV=iJ{=1U6~JVL>Kb=x^YoiS1)C?9rEU_mlg zkc0Z|fM$qWRlMMlV3tTTcO%d+$p;&EQV0{JW(IgAB(Ym#+gEL~LWvh&b9;!#H@q$n zC5mr1-5STk$<ZMKujiIj9t<#ubyIw;6K-1erL3rGt=zG{sz{I{D0JOnH#7`6i}RGM zp3#zmMliCK;IEa#XSK*i5edw_aS#+>yBfSOPYcT<njtdHvkOIB*J#Nw4^&zcBU(J~ zR;hO4MCS~{NXjcG>2#=er|57|3-K9@T~bJ~R!hvXy(Q|}6q$U%jhdYI$l~xIK1cJg z7k@gLxOU9Y0U~?|t&$$aaXrU~g=Rq%i*mQmfr1~P=wetGtC^~+6~N|oZokt}Pz`?J z1$tX9K0|0H!EBpeOq;cotje0_q#aW=2h%;NZE_UfD|?Y`0qxXd_4SK1)2j)cl@T6F zp2y@mP#%o_GAaavt1@zx@RU(<os`&M$tE1`grFZje0Yy=Z_4x?iO??(2fpI(?{Z-~ zy?5oX6MN3P$LDwl$sSzaGJ7B0Lc3po^2ztFuRcQD{PW)3p#SP_*uS{G`pxfu{LYtO z#-pe4?D|$C`q&n`CF8kPb-sC)2Q>YwH5jH5-dBa--GVO8)_`X~t3Utbr$67kjbov~ zH7@YZ&iBZFzNJ7v=EKMF<gMTQ!S8?k@WIVMeSrA>-9N`E`ir~t!Of3;^#{NA-p_v? zkDtW#<J;2lgWGXC4jL!*so&byCm-EPKwn}4{N01Tk+jJk>@?qbPt{7=VdCK>JqFQ_ zO%G^13=4S;x!rmxJ6W5gN0BCV=uj4x;S_^%D1chll(obGYi6N7)@qI@H68Es%FaH; zw)Ga%MwEUcC`3e*0;i>TtFBMA3=Pi+WYpqXHiiUCjBi||l2Gt-b(}aTzc7g(g&*&* z(wk<LhaU|ei)aVGs(L^pE3B|`1H9kJZ(*Cj7Mf<gmg)jC@@MA8QCCIB{f&t<A$}*R zp#@fDin1B}Mr}|+fxRt%ls{&T7-Z#L+Q%@{)I<(siRuM*3j@!DQ@27LOEd%51ll;3 z$b?Gfp{z4M0i+TW6$Yq&N|cgDU4q7dD6MFyLT50UTx)!`v4M;K*p^blDHSqu0gi;3 zlZ?G)oLo-Clt^fEJfG23;p=vn9J3J~{cUYUIgqDN08uC{<F?^DdbI>av;Sm`R;yJs zs{~#|a};tmN)%0QN{zW=YB5Ph_Olg$S&8IL5nU?JN_n8?Yoba3>fBKW>Do_zVPI~@ z;P9tQfejp^JIgODyy5NGkvmN|HZfK@mb$m_ru{^bqp=nxPc+pQr+bVjMejgy?qVUL zvrTB9vWxegeFrS-xmCk`S1^WkQMxP>G)FsJ)LHA8m?jybr*)HY0JZQJ$Gb2~DMRnY zP@YjwsN@}^7awXEHZI>EayOWd7Mn%4zh;y8?}A(&kXe4bPiUBpOnGQ4e@x@EY5zvB z1a13AXpW5IX9QcEDg{yN_&0v~QRAYluwL9L3*`Cp=K#L@ZonL0+aa-80i*1oXa1pd zLpYi!$_C8-{UI6R|7@3Ge;xIcV{7Z3{qGUiJ$~}^d+&em4$CE|JO1J3o6mmtcVe)4 zIgEnE|2m8}r~b?Vj%Rr+dSREcSvgR5fAG5@xrDTbZJ@T79)>9O_Gc3zOu_0gY6l*E z^7lVI96xgtU7OMGaaP}r()AT@rNXXnMX(+{`PC;M9tY=l5$_}3z5D0=|Bt#i(Q+Hf zfkhFj&0Eh*PcJj?|3B{Db7$$*OD$47iDUu+WRg<Z9=E%W+g+}rBr=)IL?D2ONe+4* z!{2`V;e>uC2Ke~GQwj8L$~bfhr7v3l{N2C=xQDMB)zRAruf4WB5gP|@yu&P8jT%B& zHg3sH-$<FgbkI^WgcPP)k+n?=@|qJ5d_z={6=|hSX--JRQuc`rwj+mZ8GcA@T~e5k zjRSsG7P=gc9cC=cD7z`qlIztV6-Ra#Eg94n){0Dp1GlVzn=gqPPM`#7J;PPE81GW9 zg1)5ntWVtrQ_NG_U}0Ta*<92zvTscfvj#{SwxLh&K(UjPY<;{5l(<0Zi)AGJXY8tm z`XZuMgzdPOV8Y~Sb6<jC6V0XQvg(DMI~Ob&=Ok~<9L2S4RG06na1&O1f{<~DrW%BV z=>uM-Q|j%zy4zPBF|9X`?udO)8F?*<SMMT%9%$Uf8Vxarsu_)RLA!>Jk{=Q!r(~gG zsqhoqZs3;F*i#R1A`0_;Pb_T3Us#J{w@zX7Jdgf?_19S6lH9?J?H{iCQ$q?WM>DFw z6m%z<EXRkSaqtd#be|Jnpf6J07~+jL!3tNl{x;~Ah{Ax5ZzZ?q!~iAtgEG9*jko=j zhz;0$b96KE*`J8PEgVc-tUi6%9)K_!8>LXTCf@KF2P~^%VdGWkwpDJ-1RD${F1#_% zx!vP4+?Dm2Kz|3)-cVK`6xYM@j6FO&yng-q>!*D4AU7-E+ne{ND(=H)c+(U{Z5`J& z0Jo&}T;z5Fz$ay6USIEDy?Xib_OBE7`%PnjkAJ<h6R3Of^7ir7>+5&#PFU_F9K8!Q z^Mi#kq5QAO1=cR%q1071X<8w4xmMO}MZsCl<}etE<F9`D>6gccr&Z$D?c`hndN=j) z9xwmqjxX+ZfBj~LzOP}g%wA1{@tz9|J_6vYzkPEmmcG3`y<~D%=0%I{h{6ASU;o@R z0sg|Kz8~@Funwd2%Mk_v>uAlwc*(=&E^TXJ=T@KtoIMcdK5%vQ#o47ED}g}W&^AsQ z7rZ}K14XRubkExI*TWoOmqJ5)T$TxE?mkxH4s4$Kz_++x2?_>z=6)S7W&iCcG{IVu zVH-NYw|I>6K_djX9Wi%k?%XBX+T<UeKGrZ6E(zD313}KsIN*YHLgJ{k54jM~^f4?} zK#zUYbF%z@*F7SY#_B$wwoWOo#KePe6WEw(+v`n#yRf>zU~MStoF5T|v;my!)=CW4 zD-I+1nw?uo*IWYQFrJuLThiCJlvT)!QA#l1d*q#%IJ+=oypgY7M|TPs<sER@WPdKk z-CkC3S!w}T--C4n$Lig)oH$-fQR!VNm(9zU32Z^vwFhNom}*8WCjdEo1vcX=Yz;py z2+p=<f)se5_)2vth@{#wT#iS9$Sef?)k5F32!6)EFJHV^8pdfC|7i^F_*bU?I&k>X zLp=bqsNU`{i5qiw#jEQhtbPBtzrF!pO>pkz@eigywxGK=hT{Q;NiUicmg9-c#9Tsl zu;uN!s6x*lcbIwH_QOLu$x|J$pY0*8a(Q8URl9_PwKtr9)s8>R-%r0fq@N#rkmg^> zK%OA`zyAH7<c&0-s+$z;G)gD4sH>aFE%|o;>h+sfcYmE&-{bh)!S3wz=f(8T83P{= zczXHzq%L+dq2Ku(c9R*>v+(a{{qxTsf0!MBFJyf$A!$G5wa<SCc6h-`ES>(3LOXV0 z8Z2>2Ti_1opb^$#8gKzd1^S>38>=vD>ClDH`4X1rGJJT+OD<qOaE`LsKr`!!BAf^7 z&ri3*);CU+4NhH*GNpfJIt?~*th}-_N%5+3jENLH_qL~_I1ZOCN*m##sBfDGM4#eV z`Ka|k;nF#b8gzH)_gpgP63|*s73c~wo-sY~oW-D|jPU$P0bIM}UZkK!rYzDU;>;u( z1=Nt(HTA^>IT|=}^e!fC#rm7w2Ck)>78-Txk7g)!F1Z)C8Q3;8wUlO}+FT)ZrJG9m zBu%caY)4gnv(J{EX}rB#kVf4_n4mS4u4J<=-bN`!!J2FV{cY7aC|SxC>vqedwy6ID zVWZrfpVUSdp=wOc7=#lxptc^#pItu6eUEeUk0t%c9(;w|vFZV)D`BawD*uPq4~9Qs zf3HeD2&w@a;^68==BBk2KZWEKAXeg0WL323<8grvY_vOnHGtU#QoIh-M=w;RbSBH> zhX`h-iIblXeHcJhQc!=WWYKJvv@r7hU~XtYHke8&OzQHNd^AyyjLI2zy{hU<A?=cc zZV@h)u58NOL?J?qF>@dyys;wk{{G&??C|S>zS{@PR=}@czHoH9_D17Ku5b74gT7u5 ztM~lLZG)2n)|Fi!0q{u$`r$8cW~}>S`g1qE>hbvfgn?hf{_kJkyt=uaOoJylH(Mxq z?eGXi?hX}Bj;=IJGO`nr4F#XAbLs6Xqu2U@{jYcLKm7Lg-CPLWpJH6V0-tsZ>3wxQ zF~GO)zx(@Nclc%+nd4a9n$3;rw-XqCZFc<CUv~KU`@g^WzyIgtv3%+up4GE=&zoAG zd#<_(aB%EjJ?pDKL~)Q$Q@w_EEu<3NO^?P>K2f#@_0kddL!D+qDKkX$o1|qjvtQQ0 zvVUf^%(Nh?OuD*0rl?Eg^J_4R(qEIqP-uCC*bV3@7q?LjqH4A0IAq8vQMH#v^mLRx z6M3=MB2eirBXbL?$3kM4XcCR<Z4AR<GDjTpkIL$dhLY-&Th`@dQB4oZ=sw0Was0$3 zeAY2xG0SbrDs>~smEIKlU7f$`cBKk4mfh=y++9I3&?d65=VHo%i%k;K%%}DoCR14j zFTIr`IuVKJPpA<%vZZgiX>P_vF|7#aUW=fRwT!&fv{vw=%5_D8xO-?qdrQDmYb1)H zX|CAKb9VI&`&?ayDII_;VzF5s4;1s}5Eo{RI43QT#qnint7yvGK}u1x2S^_n=F05g zJG=)@<O`Oc24hG`%cRavSV}pSxIDsZxUgZAribMcyweNqPNZJ?*6dq!hf>FhM_x#+ zjYz=7!cewdAw-7X)PDx>E){8EMwl$Og1pc-fi})XL;KPVvs~gtYq;I7<OFEZXWx1X zQquyw$&^avvPscH<g(mR$V9>-?l01UGCh{!MT69p)R}Ns3%k;ZjfUl+)^HX!c4i^j zzH|vmA`w=-kf0eXl4^B^+Ji&wLMpUjG_JTJQoC_Urir5aWIh#|K7eaaTIqrIj}&!v zF5-Q;<3%(iRsRF2@CPCvu`~fUhYTm<fnkXZx^A*CAqJaX>7tskH0c24Za0w>-CMd_ z;<EVGW_IdmYI8051*5Al4Eb<K19G?*L4Ew@-u?L@lFLI<%S)r9s**@@tELv*?WTQg zPDq!iI;$1%_Ir&XZtG2D_j6iq?(MpNqv`b!4X_IpI`_5Wh<<k`e)8)2`sMAb3GN=D z?=4P<?q>StL~Krk@Xd?ch5p?&EXQ4U4wJm|(q>ElCbcUc{O1#6>wUZjrH7SEUKreE zxDUb&3s1~LCc+O3PwXtXQqlkV*MB0GY(#p3!Of*^S>BH5cPW8B35LD<_AlSe#n01- z-QeT~ar|?GWvpILHRSKU{VPumz}Kf&%@`O+i^CWH(jMSH59=F0WGCXs68)j>ErA9Q z>&de8F)6`@HIikI1oVZM(8wYTl9D9Ovaex|1E@VAnqX}jC!&gD*<OR8&XZy}RJcYp zSz-ho?p&-Zyh#5<E24Un<}6StHe=uq3%jWl9wOQ?MMX#3veR1Mf-sGQSyB}a1>vU5 z5J3~Ov?ntOS&3z|G50ii)SD|W{86QbUam<5roAkLY?QImARJQaHz!L(;uqHREkf|s z1zlQZIqMfAS@(ogv`OF#XGb7#pM7ayR~?MLLNP3Ub%R^HtryQ<L=flls0dqJIl+># zAu<~n&oh!hu*dH#)^=fp)%INvM&P0PGR4H@ZbmUx>MP$jv_&HflU%k;lD5#QRhEK_ z0DsOP&~IxJRMjj)xN57#cg#a?t%jA+2ng8L4N)X-07!#0q;-W7$TL`_vVdKOUR?8b znv(~pwU$)Z5hmZB(5Mw3u|<%*iDyyd%WEz%UP>f+!BlC?P|>EleujKL1>CrO7z3*` zTj{XSW8#RKMtEd}oWg{A2ZyLV!o!)7sZxH;)z>^dw3v*M!51^7kjy#A<mDVTH;4qV zn|FyXSiD)&OGDVjyJc(>st+LN#$Mqbu89(wNGe9=Fdlp{gr=g<a5iuIDMdjJVVD<g zuQ{IuzZ%o6-9^PCSqabAWvY`Qb#IH)T8LXOpr?paNJ=lt9jsZTQLN(Bu}iG0soDoj zsWpgAZ}{3Tg65i^WT(by$@Yh?Gu(V47MHWg35wFDI7OPcFNVyZTZ1?2H#d397!~S2 zX<>R0Dc_)dEs_`z{=?_FTF$w3p>Xb+FO+k0w}}=}&YhYvQ)%gmT=pA=*Ii4oQUf%G z8!?mjWU4QLWWbjKh-MqXlmQRj>hL??PhVd{74)+xXtx4B9Jq;@Ii|C!gt7o;tb%89 zg>Z$ZZ06S16R3N7_3FiLx1ir?SG#W8+s*XDBX)mrwR?Q^>gxC3CiLquXiHlsDz)YR zW(qhHyG&I~BT{!r+@7~P!g`NzB7mQso__k}mnw{1Nnn5RZlb$)Qwj8m0p|7X{>`Zq zeL=s|pR4K6n`!iB4E)Ay|IKT=o_m0=TmAF&R)5?C{^7g75A~?N80-6q0?`m&D;TIC zVG}th#*b}Ra&uf}f;1LJwJB-@79>~~%k&T{4U<3@G!_+PCO#8tZsUufFZODVAUaE0 zG{scv6sH;%+q9fxY_>UWTtTE@z_%dFC3jxDmYi+GxL&gO?iIfbj972FV_<|h5w=p# zG3{S13+3q1H#-5{;ekmZatHGvJS04h*V0HWcx(|B!xm#fkV;0enh7axXOPo@4>Y8W z>^p-Dr2l$}s+v(|Gp&WVmITY%&JTIAsOE4fdJU|i29ObuG_tN`QYa4A;Y%C-%`uN7 z_GMDQ4L;Z%O}Gfbl|>q<Y*tKJAf#wSdOqXA!YP*`tAi_HS#p!Plp!mNL#&nP**5qM z6TxU9bEz`YLhO+uxfah?II4KHp#*yIfQF89*qJ(f^mZM|{57Yvc4rU;xfW5gR86>j zmu8C=_CrGxEit{e?y*9M_(naYM2X?X!o=Sf0~A$4mOwu;P*O4qM@mv24Jn?iHY%VZ zM5j!{{|BM-?oPBzIuq3<-SJ>J$j9_nW3+jiI*vrx!ca_-p*O-c`eT>?DMxNastvz} z<eIx&L%~{1j-X=~=OV|BUSkwSrvZqx9e^6v`?JH?E*cPuNrre_8LV=fVPXu>OzkAI z5CBtv2&nZ(u=I35%!*j^f)rm{F(P!E+*bZ8R@kw@K&|7DGB8du=XEoz$&(h%lHv30 z!ooQ-41gDMtEIa_H93r?qIyky&pmO=2oFR`IV^iy<ihNJ+>8cOe$Q<OBc<YK-ZhPB z;+nWTHd0E@ly}a?at^1L9gY$|1j;pOvK3c6Sx${YozvGGYUO|Jyl)r3Oo2pmdkKNM zGEzeZ3+4SxZcq!cQOca75DbxvinNS4YAsau!^6Yf-QAxB`s&x+-K{2mFD8N4ik~SK z_ZJjDCtlzrX2Qt?c!FeC_itW*J5@g4PBi9KLv&XYy?HlP_8u|tf8M-#{jY!9)#+7S zfZTivhrY-;@astR>cFuLa3lbWDengQU4C)czG%k{|M}_X!~W3PU&cb!DRwz&eav#% zSG+#K;OiH+uV=Qr4HtB{=H6-8@i1HH-^Q6goBsWrMbNVe@csS$B{oQ38}yA36_Gon z)E;`25-EC1Xw>t;YHAO42uM}H5F>dHx}zC~ru0FwT2CMb#$06`C_>wJ*mRlc<#H73 zS$dF?YJnkJ2DPQfE7{!aNJ8M&ZNu=>Z8l7VXMP)J9R<HsXA4FXpBVH;%opi+1`m== zj>A%Bfm;k?O0m@R=%?*F0T~fk-E+?L4n+A>&krCRp`eKZIu{=hCXbTV)Gu&bZh3RM zHQz$@j1^-doT)519#&5ZdMPo&0)!L`O$m~k4=yZNpyuqW-lLH>MWTo-!a%9XYW1A7 z#LO8jQr%+A?U(_q<?5{(Laic@%FnbREzGOQu<I)ASz^2Bk4u<<#C5tkQ9M%ABJ@@d z5`oBK`fD<fhy;;8MIMt$)vSdnC!_y6qAg~oI#u)w&XVU`wX!2R>^1GZ1W~INn_GBP zsDlH^1V-CtF#Z$^D~e?=J^!%);K-8YK3a;i^)kEMmbLYsc-J8)zS>r@QHtL*xe^Hr z3J5dJ5;^G!uYpt}>E$1Y6#&JY%F{cJPn(Bw_O}Ys&C5LC5pKi!!3njx&Nd>+Ek3;K zrAN%sN;9NqbAD@fstkE{OTNF!S{_mv1#M(7nXhr)F$a^ks+9Ulipj!8mQuOn4X!eR z(&WwXC{xQl-?cO-b0gihj)Ta})#6c@GQrD=9yK=U6xxc`(hcfAmwbe!Lq+O-WQ%4? zeL$)T;srkD%Z9Sxd`S6DG7l_vhshdP5<O<cTg^)UvG#K_r$Y(#Zg4Ob2K13+m&{+@ zvzP`*%Do`=XHqn0QA!<;FOxknQB)3n4`lJ)%Z*)u;FHIjcn(K7f)uBqA@RV%q*_Nw zgcy0$aIg%6OIjBTX3Iri61CXLH1j2%*6OJTyMK6i@#4iF(gyr-pQu*AS692k<9@r> zmzVuevh4M|vd3=jp7pfKQm#H5{9N6?dNFgqH`A7O1ah-f(-jvsc<ydJ9`@>bDx5~R zOSlD5JcgktFowBn?6iJ=7@^+v=HBjtE0NpMKIFgu{om4u&XG;=LX|J0H0xlU&@69m zZeQKKM0EdNH9N#BCxIskvAb7y$AjVZ&ohcfqu;;y1pe{+?}uJQe*)+mTWw&h)a%wb zmR!Fyp&=#b7+Fj&{Au}D4}pc`TDE26#zhJ_<8T&kiRU~8!|Gl4Q2{Y2g&Ho9j?6vC zHf@9TRP>}#9^fZ1uu6C!pdp}T#3oHp0(_!=D?<9<#iXRj%D&!05oehzVH99t4kD<# zg9WE9Phqpv^!#_Y#z!fZcfJ+3dq2ZmP!`2fv2`Q(`s5r%v1%3|C)T;1b1%NYQaa6K z<%Gz4TU3ids=Bfft-II|7D)u>3Nt(J;X{~PLuGCtb%0VF86>iG$W_=aN8Me9PCF4b zG(qrYP7cMS($j&1T7)zTl6DB91r3f`lQ2^7y0CmXpj?9RG7v0m<!&MRu8|nBh=_^c z<f6iEA(I<jf~fP;c0i(XB_7aI+SMq9D?zORdKQ!>>!=I?i;I>^{(xNtvaE-t6e2fX zHb!z@aIPhDQUuDpd>`4JU06g2OA9I7sjZ$AprQJ1$dZVyx&XEF8+9g25)vlNJf+QK zNiC(p(tL*|CZq~m7D{gqkfzGqfPmasZ-fdAL4#~d8CFY0pN-0+nUq$Wq>gAh4v5sS zJW`QJlD#kLd~$I=@^sJ^3bF_rGH-n*Sy%0A74#exxw%0y$|{J`rxPvtYRN8r?w-2P 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%0A4_wVH{<qt%_5$t3KEh-nS-MN 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 M07*qoM6N<$g51`f(EtDd diff --git a/platforms/android/res/drawable-mdpi/icon.png b/platforms/android/res/drawable-mdpi/icon.png deleted file mode 100755 index c1259d5cfe0a93ef0e322a26dd1fbecae5fe8539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54642 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 diff --git a/platforms/android/res/drawable-port-hdpi/screen.png b/platforms/android/res/drawable-port-hdpi/screen.png deleted file mode 100644 index 5d6a28a8231fc0602558a70b6adc5a1411e2e6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222148 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 diff --git a/platforms/android/res/drawable-port-ldpi/screen.png b/platforms/android/res/drawable-port-ldpi/screen.png deleted file mode 100644 index 65ad163abd0be86b0bb5d9ae7e539f4471a95f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42034 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 diff --git a/platforms/android/res/drawable-port-mdpi/screen.png b/platforms/android/res/drawable-port-mdpi/screen.png deleted file mode 100644 index ea1569359d34da244126beb95c2009ddca599ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90555 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 O0000<MNUMnLSTXfq0ch_ diff --git a/platforms/android/res/drawable-port-xhdpi/screen.png b/platforms/android/res/drawable-port-xhdpi/screen.png deleted file mode 100644 index c2e8042175804ccadccdfeb64f39d09a3b23016d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504508 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 Hu0mjfk&5%0 diff --git a/platforms/android/res/values/strings.xml b/platforms/android/res/values/strings.xml deleted file mode 100644 index d216bd89..00000000 --- a/platforms/android/res/values/strings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<resources> - <string name="app_name">LiveWell</string> - <string name="launcher_name">@string/app_name</string> - <string name="activity_name">@string/launcher_name</string> - <string name="google_app_id">334078391843</string> -</resources> diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml deleted file mode 100644 index c4f63073..00000000 --- a/platforms/android/res/xml/config.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget id="edu.northwestern.cbits.livewell" version="3.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <preference name="loglevel" value="DEBUG" /> - <feature name="Whitelist"> - <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" /> - <param name="onload" value="true" /> - </feature> - <feature name="PushNotification"> - <param name="android-package" value="com.adobe.phonegap.push.PushPlugin" /> - </feature> - <feature name="Device"> - <param name="android-package" value="org.apache.cordova.device.Device" /> - </feature> - <name>LiveWell</name> - <description> - An application for bipolar disorder - </description> - <author email="e-goulding@northwestern.edu" href="http://www.cbits.northwestern.edu"> - Evan Goulding - </author> - <content src="index.html" /> - <access origin="*" /> - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - <allow-intent href="tel:*" /> - <allow-navigation href="http://*/*" /> - <allow-navigation href="https://*/*" /> - <allow-navigation href="data:*" /> - <icon src="icon.png" /> -</widget> diff --git a/platforms/android/settings.gradle b/platforms/android/settings.gradle deleted file mode 100644 index 8a39471f..00000000 --- a/platforms/android/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -// GENERATED FILE - DO NOT EDIT -include ":" -include ":CordovaLib" diff --git a/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java b/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java deleted file mode 100644 index f8642e33..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/BackgroundActionButtonHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.adobe.phonegap.push; - -import android.app.NotificationManager; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -public class BackgroundActionButtonHandler extends BroadcastReceiver implements PushConstants { - private static String LOG_TAG = "PushPlugin_BackgroundActionButtonHandler"; - - @Override - public void onReceive(Context context, Intent intent) { - Bundle extras = intent.getExtras(); - Log.d(LOG_TAG, "BackgroundActionButtonHandler = " + extras); - - int notId = intent.getIntExtra(NOT_ID, 0); - Log.d(LOG_TAG, "not id = " + notId); - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(GCMIntentService.getAppName(context), notId); - - if (extras != null) { - Bundle originalExtras = extras.getBundle(PUSH_BUNDLE); - - originalExtras.putBoolean(FOREGROUND, false); - originalExtras.putBoolean(COLDSTART, false); - originalExtras.putString(CALLBACK, extras.getString("callback")); - PushPlugin.sendExtras(originalExtras); - } - } -} diff --git a/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java b/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java deleted file mode 100644 index 36bf5217..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.adobe.phonegap.push; - -import android.annotation.SuppressLint; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.AssetManager; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.NotificationManagerCompat; -import android.support.v4.app.NotificationCompat.WearableExtender; -import android.text.Html; -import android.util.Log; - -import com.google.android.gms.gcm.GcmListenerService; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Random; - -@SuppressLint("NewApi") -public class GCMIntentService extends GcmListenerService implements PushConstants { - - private static final String LOG_TAG = "PushPlugin_GCMIntentService"; - private static HashMap<Integer, ArrayList<String>> messageMap = new HashMap<Integer, ArrayList<String>>(); - - public void setNotification(int notId, String message){ - ArrayList<String> messageList = messageMap.get(notId); - if(messageList == null) { - messageList = new ArrayList<String>(); - messageMap.put(notId, messageList); - } - - if(message.isEmpty()){ - messageList.clear(); - }else{ - messageList.add(message); - } - } - - @Override - public void onMessageReceived(String from, Bundle extras) { - Log.d(LOG_TAG, "onMessage - from: " + from); - - if (extras != null) { - - SharedPreferences prefs = getApplicationContext().getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - boolean forceShow = prefs.getBoolean(FORCE_SHOW, false); - - extras = normalizeExtras(extras); - - // if we are in the foreground and forceShow is `false` only send data - if (!forceShow && PushPlugin.isInForeground()) { - Log.d(LOG_TAG, "foreground"); - extras.putBoolean(FOREGROUND, true); - PushPlugin.sendExtras(extras); - } - // if we are in the foreground and forceShow is `true`, force show the notification if the data has at least a message or title - else if (forceShow && PushPlugin.isInForeground()) { - Log.d(LOG_TAG, "foreground force"); - extras.putBoolean(FOREGROUND, true); - - showNotificationIfPossible(getApplicationContext(), extras); - } - // if we are not in the foreground always send notification if the data has at least a message or title - else { - Log.d(LOG_TAG, "background"); - extras.putBoolean(FOREGROUND, false); - - showNotificationIfPossible(getApplicationContext(), extras); - } - } - } - - /* - * Change a values key in the extras bundle - */ - private void replaceKey(String oldKey, String newKey, Bundle extras, Bundle newExtras) { - Object value = extras.get(oldKey); - if ( value != null ) { - if (value instanceof String) { - newExtras.putString(newKey, (String) value); - } else if (value instanceof Boolean) { - newExtras.putBoolean(newKey, (Boolean) value); - } else if (value instanceof Number) { - newExtras.putDouble(newKey, ((Number) value).doubleValue()); - } else { - newExtras.putString(newKey, String.valueOf(value)); - } - } - } - - /* - * Replace alternate keys with our canonical value - */ - private String normalizeKey(String key) { - if (key.equals(BODY) || key.equals(ALERT) || key.equals(GCM_NOTIFICATION_BODY)) { - return MESSAGE; - } else if (key.equals(MSGCNT) || key.equals(BADGE)) { - return COUNT; - } else if (key.equals(SOUNDNAME)) { - return SOUND; - } else if (key.startsWith(GCM_NOTIFICATION)) { - return key.substring(GCM_NOTIFICATION.length()+1, key.length()); - } else if (key.startsWith(GCM_N)) { - return key.substring(GCM_N.length()+1, key.length()); - } else if (key.startsWith(UA_PREFIX)) { - key = key.substring(UA_PREFIX.length()+1, key.length()); - return key.toLowerCase(); - } else { - return key; - } - } - - /* - * Parse bundle into normalized keys. - */ - private Bundle normalizeExtras(Bundle extras) { - Log.d(LOG_TAG, "normalize extras"); - Iterator<String> it = extras.keySet().iterator(); - Bundle newExtras = new Bundle(); - - while (it.hasNext()) { - String key = it.next(); - - Log.d(LOG_TAG, "key = " + key); - - // If normalizeKeythe key is "data" or "message" and the value is a json object extract - // This is to support parse.com and other services. Issue #147 and pull #218 - if (key.equals(PARSE_COM_DATA) || key.equals(MESSAGE)) { - Object json = extras.get(key); - // Make sure data is json object stringified - if ( json instanceof String && ((String) json).startsWith("{") ) { - Log.d(LOG_TAG, "extracting nested message data from key = " + key); - try { - // If object contains message keys promote each value to the root of the bundle - JSONObject data = new JSONObject((String) json); - if ( data.has(ALERT) || data.has(MESSAGE) || data.has(BODY) || data.has(TITLE) ) { - Iterator<String> jsonIter = data.keys(); - while (jsonIter.hasNext()) { - String jsonKey = jsonIter.next(); - - Log.d(LOG_TAG, "key = data/" + jsonKey); - - String value = data.getString(jsonKey); - jsonKey = normalizeKey(jsonKey); - newExtras.putString(jsonKey, value); - } - } - } catch( JSONException e) { - Log.e(LOG_TAG, "normalizeExtras: JSON exception"); - } - } - } else if (key.equals(("notification"))) { - Bundle value = extras.getBundle(key); - Iterator<String> iterator = value.keySet().iterator(); - while (iterator.hasNext()) { - String notifkey = iterator.next(); - - Log.d(LOG_TAG, "notifkey = " + notifkey); - String newKey = normalizeKey(notifkey); - Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey); - - newExtras.putString(newKey, value.getString(notifkey)); - } - continue; - } - - String newKey = normalizeKey(key); - Log.d(LOG_TAG, "replace key " + key + " with " + newKey); - replaceKey(key, newKey, extras, newExtras); - - } // while - - return newExtras; - } - - private void showNotificationIfPossible (Context context, Bundle extras) { - - // Send a notification if there is a message or title, otherwise just send data - String message = extras.getString(MESSAGE); - String title = extras.getString(TITLE); - String contentAvailable = extras.getString(CONTENT_AVAILABLE); - - Log.d(LOG_TAG, "message =[" + message + "]"); - Log.d(LOG_TAG, "title =[" + title + "]"); - Log.d(LOG_TAG, "contentAvailable =[" + contentAvailable + "]"); - - if ((message != null && message.length() != 0) || - (title != null && title.length() != 0)) { - - Log.d(LOG_TAG, "create notification"); - - createNotification(context, extras); - } - - if ("1".equals(contentAvailable)) { - Log.d(LOG_TAG, "send notification event"); - PushPlugin.sendExtras(extras); - } - } - - public void createNotification(Context context, Bundle extras) { - NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - String appName = getAppName(this); - String packageName = context.getPackageName(); - Resources resources = context.getResources(); - - int notId = parseInt(NOT_ID, extras); - Intent notificationIntent = new Intent(this, PushHandlerActivity.class); - notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); - notificationIntent.putExtra(PUSH_BUNDLE, extras); - notificationIntent.putExtra(NOT_ID, notId); - - int requestCode = new Random().nextInt(); - PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); - - NotificationCompat.Builder mBuilder = - new NotificationCompat.Builder(context) - .setWhen(System.currentTimeMillis()) - .setContentTitle(extras.getString(TITLE)) - .setTicker(extras.getString(TITLE)) - .setContentIntent(contentIntent) - .setAutoCancel(true); - - SharedPreferences prefs = context.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String localIcon = prefs.getString(ICON, null); - String localIconColor = prefs.getString(ICON_COLOR, null); - boolean soundOption = prefs.getBoolean(SOUND, true); - boolean vibrateOption = prefs.getBoolean(VIBRATE, true); - Log.d(LOG_TAG, "stored icon=" + localIcon); - Log.d(LOG_TAG, "stored iconColor=" + localIconColor); - Log.d(LOG_TAG, "stored sound=" + soundOption); - Log.d(LOG_TAG, "stored vibrate=" + vibrateOption); - - /* - * Notification Vibration - */ - - setNotificationVibration(extras, vibrateOption, mBuilder); - - /* - * Notification Icon Color - * - * Sets the small-icon background color of the notification. - * To use, add the `iconColor` key to plugin android options - * - */ - setNotificationIconColor(extras.getString("color"), mBuilder, localIconColor); - - /* - * Notification Icon - * - * Sets the small-icon of the notification. - * - * - checks the plugin options for `icon` key - * - if none, uses the application icon - * - * The icon value must be a string that maps to a drawable resource. - * If no resource is found, falls - * - */ - setNotificationSmallIcon(context, extras, packageName, resources, mBuilder, localIcon); - - /* - * Notification Large-Icon - * - * Sets the large-icon of the notification - * - * - checks the gcm data for the `image` key - * - checks to see if remote image, loads it. - * - checks to see if assets image, Loads It. - * - checks to see if resource image, LOADS IT! - * - if none, we don't set the large icon - * - */ - setNotificationLargeIcon(extras, packageName, resources, mBuilder); - - /* - * Notification Sound - */ - if (soundOption) { - setNotificationSound(context, extras, mBuilder); - } - - /* - * LED Notification - */ - setNotificationLedColor(extras, mBuilder); - - /* - * Priority Notification - */ - setNotificationPriority(extras, mBuilder); - - /* - * Notification message - */ - setNotificationMessage(notId, extras, mBuilder); - - /* - * Notification count - */ - setNotificationCount(extras, mBuilder); - - /* - * Notification add actions - */ - createActions(extras, mBuilder, resources, packageName, notId); - - mNotificationManager.notify(appName, notId, mBuilder.build()); - } - - private void createActions(Bundle extras, NotificationCompat.Builder mBuilder, Resources resources, String packageName, int notId) { - Log.d(LOG_TAG, "create actions"); - String actions = extras.getString(ACTIONS); - if (actions != null) { - try { - JSONArray actionsArray = new JSONArray(actions); - ArrayList<NotificationCompat.Action> wActions = new ArrayList<NotificationCompat.Action>(); - for (int i=0; i < actionsArray.length(); i++) { - Log.d(LOG_TAG, "adding action"); - JSONObject action = actionsArray.getJSONObject(i); - Log.d(LOG_TAG, "adding callback = " + action.getString(CALLBACK)); - boolean foreground = action.optBoolean(FOREGROUND, true); - Intent intent = null; - PendingIntent pIntent = null; - if (foreground) { - intent = new Intent(this, PushHandlerActivity.class); - intent.putExtra(CALLBACK, action.getString(CALLBACK)); - intent.putExtra(PUSH_BUNDLE, extras); - intent.putExtra(FOREGROUND, foreground); - intent.putExtra(NOT_ID, notId); - pIntent = PendingIntent.getActivity(this, i, intent, PendingIntent.FLAG_UPDATE_CURRENT); - } else { - intent = new Intent(this, BackgroundActionButtonHandler.class); - intent.putExtra(CALLBACK, action.getString(CALLBACK)); - intent.putExtra(PUSH_BUNDLE, extras); - intent.putExtra(FOREGROUND, foreground); - intent.putExtra(NOT_ID, notId); - pIntent = PendingIntent.getBroadcast(this, i, intent, PendingIntent.FLAG_UPDATE_CURRENT); - } - NotificationCompat.Action wAction = - new NotificationCompat.Action.Builder(resources.getIdentifier(action.optString(ICON, ""), DRAWABLE, packageName), - action.getString(TITLE), pIntent) - .build(); - wActions.add(wAction); - mBuilder.addAction(resources.getIdentifier(action.optString(ICON, ""), DRAWABLE, packageName), - action.getString(TITLE), pIntent); - wAction = null; - pIntent = null; - } - mBuilder.extend(new WearableExtender().addActions(wActions)); - wActions.clear(); - } catch(JSONException e) { - // nope - } - } - } - - private void setNotificationCount(Bundle extras, NotificationCompat.Builder mBuilder) { - String msgcnt = extras.getString(MSGCNT); - if (msgcnt == null) { - msgcnt = extras.getString(BADGE); - } - if (msgcnt != null) { - mBuilder.setNumber(Integer.parseInt(msgcnt)); - } - } - - private void setNotificationVibration(Bundle extras, Boolean vibrateOption, NotificationCompat.Builder mBuilder) { - String vibrationPattern = extras.getString(VIBRATION_PATTERN); - if (vibrationPattern != null) { - String[] items = vibrationPattern.replaceAll("\\[", "").replaceAll("\\]", "").split(","); - long[] results = new long[items.length]; - for (int i = 0; i < items.length; i++) { - try { - results[i] = Long.parseLong(items[i].trim()); - } catch (NumberFormatException nfe) {} - } - mBuilder.setVibrate(results); - } else { - if (vibrateOption) { - mBuilder.setDefaults(Notification.DEFAULT_VIBRATE); - } - } - } - - private void setNotificationMessage(int notId, Bundle extras, NotificationCompat.Builder mBuilder) { - String message = extras.getString(MESSAGE); - - String style = extras.getString(STYLE, STYLE_TEXT); - if(STYLE_INBOX.equals(style)) { - setNotification(notId, message); - - mBuilder.setContentText(message); - - ArrayList<String> messageList = messageMap.get(notId); - Integer sizeList = messageList.size(); - if (sizeList > 1) { - String sizeListMessage = sizeList.toString(); - String stacking = sizeList + " more"; - if (extras.getString(SUMMARY_TEXT) != null) { - stacking = extras.getString(SUMMARY_TEXT); - stacking = stacking.replace("%n%", sizeListMessage); - } - NotificationCompat.InboxStyle notificationInbox = new NotificationCompat.InboxStyle() - .setBigContentTitle(extras.getString(TITLE)) - .setSummaryText(stacking); - - for (int i = messageList.size() - 1; i >= 0; i--) { - notificationInbox.addLine(Html.fromHtml(messageList.get(i))); - } - - mBuilder.setStyle(notificationInbox); - } else { - NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); - if (message != null) { - bigText.bigText(message); - bigText.setBigContentTitle(extras.getString(TITLE)); - mBuilder.setStyle(bigText); - } - } - } else if (STYLE_PICTURE.equals(style)) { - setNotification(notId, ""); - - NotificationCompat.BigPictureStyle bigPicture = new NotificationCompat.BigPictureStyle(); - bigPicture.bigPicture(getBitmapFromURL(extras.getString(PICTURE))); - bigPicture.setBigContentTitle(extras.getString(TITLE)); - bigPicture.setSummaryText(extras.getString(SUMMARY_TEXT)); - - mBuilder.setContentTitle(extras.getString(TITLE)); - mBuilder.setContentText(message); - - mBuilder.setStyle(bigPicture); - } else { - setNotification(notId, ""); - - NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); - - if (message != null) { - mBuilder.setContentText(Html.fromHtml(message)); - - bigText.bigText(message); - bigText.setBigContentTitle(extras.getString(TITLE)); - - String summaryText = extras.getString(SUMMARY_TEXT); - if (summaryText != null) { - bigText.setSummaryText(summaryText); - } - - mBuilder.setStyle(bigText); - } - /* - else { - mBuilder.setContentText("<missing message content>"); - } - */ - } - } - - private void setNotificationSound(Context context, Bundle extras, NotificationCompat.Builder mBuilder) { - String soundname = extras.getString(SOUNDNAME); - if (soundname == null) { - soundname = extras.getString(SOUND); - } - if (SOUND_RINGTONE.equals(soundname)) { - mBuilder.setSound(android.provider.Settings.System.DEFAULT_RINGTONE_URI); - } else if (soundname != null && !soundname.contentEquals(SOUND_DEFAULT)) { - Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE - + "://" + context.getPackageName() + "/raw/" + soundname); - Log.d(LOG_TAG, sound.toString()); - mBuilder.setSound(sound); - } else { - mBuilder.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI); - } - } - - private void setNotificationLedColor(Bundle extras, NotificationCompat.Builder mBuilder) { - String ledColor = extras.getString(LED_COLOR); - if (ledColor != null) { - // Converts parse Int Array from ledColor - String[] items = ledColor.replaceAll("\\[", "").replaceAll("\\]", "").split(","); - int[] results = new int[items.length]; - for (int i = 0; i < items.length; i++) { - try { - results[i] = Integer.parseInt(items[i].trim()); - } catch (NumberFormatException nfe) {} - } - if (results.length == 4) { - mBuilder.setLights(Color.argb(results[0], results[1], results[2], results[3]), 500, 500); - } else { - Log.e(LOG_TAG, "ledColor parameter must be an array of length == 4 (ARGB)"); - } - } - } - - private void setNotificationPriority(Bundle extras, NotificationCompat.Builder mBuilder) { - String priorityStr = extras.getString(PRIORITY); - if (priorityStr != null) { - try { - Integer priority = Integer.parseInt(priorityStr); - if (priority >= NotificationCompat.PRIORITY_MIN && priority <= NotificationCompat.PRIORITY_MAX) { - mBuilder.setPriority(priority); - } else { - Log.e(LOG_TAG, "Priority parameter must be between -2 and 2"); - } - } catch (NumberFormatException e) { - e.printStackTrace(); - } - } - } - - private void setNotificationLargeIcon(Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder) { - String gcmLargeIcon = extras.getString(IMAGE); // from gcm - if (gcmLargeIcon != null && !"".equals(gcmLargeIcon)) { - if (gcmLargeIcon.startsWith("http://") || gcmLargeIcon.startsWith("https://")) { - mBuilder.setLargeIcon(getBitmapFromURL(gcmLargeIcon)); - Log.d(LOG_TAG, "using remote large-icon from gcm"); - } else { - AssetManager assetManager = getAssets(); - InputStream istr; - try { - istr = assetManager.open(gcmLargeIcon); - Bitmap bitmap = BitmapFactory.decodeStream(istr); - mBuilder.setLargeIcon(bitmap); - Log.d(LOG_TAG, "using assets large-icon from gcm"); - } catch (IOException e) { - int largeIconId = 0; - largeIconId = resources.getIdentifier(gcmLargeIcon, DRAWABLE, packageName); - if (largeIconId != 0) { - Bitmap largeIconBitmap = BitmapFactory.decodeResource(resources, largeIconId); - mBuilder.setLargeIcon(largeIconBitmap); - Log.d(LOG_TAG, "using resources large-icon from gcm"); - } else { - Log.d(LOG_TAG, "Not setting large icon"); - } - } - } - } - } - - private void setNotificationSmallIcon(Context context, Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder, String localIcon) { - int iconId = 0; - String icon = extras.getString(ICON); - if (icon != null && !"".equals(icon)) { - iconId = resources.getIdentifier(icon, DRAWABLE, packageName); - Log.d(LOG_TAG, "using icon from plugin options"); - } - else if (localIcon != null && !"".equals(localIcon)) { - iconId = resources.getIdentifier(localIcon, DRAWABLE, packageName); - Log.d(LOG_TAG, "using icon from plugin options"); - } - if (iconId == 0) { - Log.d(LOG_TAG, "no icon resource found - using application icon"); - iconId = context.getApplicationInfo().icon; - } - mBuilder.setSmallIcon(iconId); - } - - private void setNotificationIconColor(String color, NotificationCompat.Builder mBuilder, String localIconColor) { - int iconColor = 0; - if (color != null && !"".equals(color)) { - try { - iconColor = Color.parseColor(color); - } catch (IllegalArgumentException e) { - Log.e(LOG_TAG, "couldn't parse color from android options"); - } - } - else if (localIconColor != null && !"".equals(localIconColor)) { - try { - iconColor = Color.parseColor(localIconColor); - } catch (IllegalArgumentException e) { - Log.e(LOG_TAG, "couldn't parse color from android options"); - } - } - if (iconColor != 0) { - mBuilder.setColor(iconColor); - } - } - - public Bitmap getBitmapFromURL(String strURL) { - try { - URL url = new URL(strURL); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setDoInput(true); - connection.connect(); - InputStream input = connection.getInputStream(); - return BitmapFactory.decodeStream(input); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - } - - public static String getAppName(Context context) { - CharSequence appName = context.getPackageManager().getApplicationLabel(context.getApplicationInfo()); - return (String)appName; - } - - private int parseInt(String value, Bundle extras) { - int retval = 0; - - try { - retval = Integer.parseInt(extras.getString(value)); - } - catch(NumberFormatException e) { - Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage()); - } - catch(Exception e) { - Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage()); - } - - return retval; - } -} diff --git a/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java b/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java deleted file mode 100644 index 6aa5c9bf..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/PermissionUtils.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.adobe.phonegap.push; - -import android.content.Context; -import android.content.pm.ApplicationInfo; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -public class PermissionUtils { - - private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; - - public static boolean hasPermission(Context appContext, String appOpsServiceId) throws UnknownError { - - ApplicationInfo appInfo = appContext.getApplicationInfo(); - - String pkg = appContext.getPackageName(); - int uid = appInfo.uid; - Class appOpsClass = null; - Object appOps = appContext.getSystemService("appops"); - - try { - - appOpsClass = Class.forName("android.app.AppOpsManager"); - - Method checkOpNoThrowMethod = appOpsClass.getMethod( - CHECK_OP_NO_THROW, - Integer.TYPE, - Integer.TYPE, - String.class - ); - - Field opValue = appOpsClass.getDeclaredField(appOpsServiceId); - - int value = (int) opValue.getInt(Integer.class); - Object result = checkOpNoThrowMethod.invoke(appOps, value, uid, pkg); - - return Integer.parseInt(result.toString()) == 0; // AppOpsManager.MODE_ALLOWED - - } catch (ClassNotFoundException e) { - throw new UnknownError("class not found"); - } catch (NoSuchMethodException e) { - throw new UnknownError("no such method"); - } catch (NoSuchFieldException e) { - throw new UnknownError("no such field"); - } catch (InvocationTargetException e) { - throw new UnknownError("invocation target"); - } catch (IllegalAccessException e) { - throw new UnknownError("illegal access"); - } - - } - -} diff --git a/platforms/android/src/com/adobe/phonegap/push/PushConstants.java b/platforms/android/src/com/adobe/phonegap/push/PushConstants.java deleted file mode 100644 index f2456584..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/PushConstants.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.adobe.phonegap.push; - -public interface PushConstants { - public static final String COM_ADOBE_PHONEGAP_PUSH = "com.adobe.phonegap.push"; - public static final String REGISTRATION_ID = "registrationId"; - public static final String FOREGROUND = "foreground"; - public static final String TITLE = "title"; - public static final String NOT_ID = "notId"; - public static final String PUSH_BUNDLE = "pushBundle"; - public static final String ICON = "icon"; - public static final String ICON_COLOR = "iconColor"; - public static final String SOUND = "sound"; - public static final String SOUND_DEFAULT = "default"; - public static final String SOUND_RINGTONE = "ringtone"; - public static final String VIBRATE = "vibrate"; - public static final String ACTIONS = "actions"; - public static final String CALLBACK = "callback"; - public static final String DRAWABLE = "drawable"; - public static final String MSGCNT = "msgcnt"; - public static final String VIBRATION_PATTERN = "vibrationPattern"; - public static final String STYLE = "style"; - public static final String SUMMARY_TEXT = "summaryText"; - public static final String PICTURE = "picture"; - public static final String GCM_N = "gcm.n."; - public static final String GCM_NOTIFICATION = "gcm.notification"; - public static final String GCM_NOTIFICATION_BODY = "gcm.notification.body"; - public static final String UA_PREFIX = "com.urbanairship.push"; - public static final String PARSE_COM_DATA = "data"; - public static final String ALERT = "alert"; - public static final String MESSAGE = "message"; - public static final String BODY = "body"; - public static final String SOUNDNAME = "soundname"; - public static final String LED_COLOR = "ledColor"; - public static final String PRIORITY = "priority"; - public static final String IMAGE = "image"; - public static final String STYLE_INBOX = "inbox"; - public static final String STYLE_PICTURE = "picture"; - public static final String STYLE_TEXT = "text"; - public static final String BADGE = "badge"; - public static final String INITIALIZE = "init"; - public static final String UNREGISTER = "unregister"; - public static final String EXIT = "exit"; - public static final String FINISH = "finish"; - public static final String HAS_PERMISSION = "hasPermission"; - public static final String ANDROID = "android"; - public static final String SENDER_ID = "senderID"; - public static final String CLEAR_NOTIFICATIONS = "clearNotifications"; - public static final String COLDSTART = "coldstart"; - public static final String ADDITIONAL_DATA = "additionalData"; - public static final String COUNT = "count"; - public static final String FROM = "from"; - public static final String COLLAPSE_KEY = "collapse_key"; - public static final String FORCE_SHOW = "forceShow"; - public static final String GCM = "GCM"; - public static final String CONTENT_AVAILABLE = "content-available"; - public static final String TOPICS = "topics"; -} diff --git a/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java b/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java deleted file mode 100644 index 7993d97a..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.adobe.phonegap.push; - -import android.app.Activity; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Bundle; -import android.util.Log; - -public class PushHandlerActivity extends Activity implements PushConstants { - private static String LOG_TAG = "PushPlugin_PushHandlerActivity"; - - /* - * this activity will be started if the user touches a notification that we own. - * We send it's data off to the push plugin for processing. - * If needed, we boot up the main activity to kickstart the application. - * @see android.app.Activity#onCreate(android.os.Bundle) - */ - @Override - public void onCreate(Bundle savedInstanceState) { - GCMIntentService gcm = new GCMIntentService(); - int notId = getIntent().getExtras().getInt(NOT_ID, 0); - Log.d(LOG_TAG, "not id = " + notId); - gcm.setNotification(notId, ""); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(GCMIntentService.getAppName(this), notId); - super.onCreate(savedInstanceState); - Log.v(LOG_TAG, "onCreate"); - String callback = getIntent().getExtras().getString("callback"); - Log.d(LOG_TAG, "callback = " + callback); - boolean foreground = getIntent().getExtras().getBoolean("foreground", true); - - Log.d(LOG_TAG, "bringToForeground = " + foreground); - - boolean isPushPluginActive = PushPlugin.isActive(); - processPushBundle(isPushPluginActive); - - finish(); - - Log.d(LOG_TAG, "isPushPluginActive = " + isPushPluginActive); - - if (!isPushPluginActive && foreground) { - Log.d(LOG_TAG, "forceMainActivityReload"); - forceMainActivityReload(); - } else { - Log.d(LOG_TAG, "don't want main activity"); - } - } - - /** - * Takes the pushBundle extras from the intent, - * and sends it through to the PushPlugin for processing. - */ - private void processPushBundle(boolean isPushPluginActive) { - Bundle extras = getIntent().getExtras(); - - if (extras != null) { - Bundle originalExtras = extras.getBundle(PUSH_BUNDLE); - - originalExtras.putBoolean(FOREGROUND, false); - originalExtras.putBoolean(COLDSTART, !isPushPluginActive); - originalExtras.putString(CALLBACK, extras.getString("callback")); - - PushPlugin.sendExtras(originalExtras); - } - } - - /** - * Forces the main activity to re-launch if it's unloaded. - */ - private void forceMainActivityReload() { - PackageManager pm = getPackageManager(); - Intent launchIntent = pm.getLaunchIntentForPackage(getApplicationContext().getPackageName()); - startActivity(launchIntent); - } - - @Override - protected void onResume() { - super.onResume(); - final NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancelAll(); - } -} diff --git a/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java b/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java deleted file mode 100644 index eaa39a48..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.adobe.phonegap.push; - -import android.content.Intent; -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Log; - -import com.google.android.gms.iid.InstanceID; -import com.google.android.gms.iid.InstanceIDListenerService; - -import org.json.JSONException; - -import java.io.IOException; - -public class PushInstanceIDListenerService extends InstanceIDListenerService implements PushConstants { - public static final String LOG_TAG = "PushPlugin_PushInstanceIDListenerService"; - - @Override - public void onTokenRefresh() { - SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String senderID = sharedPref.getString(SENDER_ID, ""); - if (!"".equals(senderID)) { - Intent intent = new Intent(this, RegistrationIntentService.class); - startService(intent); - } - } -} diff --git a/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java b/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java deleted file mode 100644 index 2fac9332..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java +++ /dev/null @@ -1,354 +0,0 @@ -package com.adobe.phonegap.push; - -import android.app.NotificationManager; -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.util.Log; - -import com.google.android.gms.gcm.GcmPubSub; -import com.google.android.gms.iid.InstanceID; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.CordovaWebView; -import org.apache.cordova.PluginResult; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; - -public class PushPlugin extends CordovaPlugin implements PushConstants { - - public static final String LOG_TAG = "PushPlugin"; - - private static CallbackContext pushContext; - private static CordovaWebView gWebView; - private static Bundle gCachedExtras = null; - private static boolean gForeground = false; - - /** - * Gets the application context from cordova's main activity. - * @return the application context - */ - private Context getApplicationContext() { - return this.cordova.getActivity().getApplicationContext(); - } - - @Override - public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext) { - Log.v(LOG_TAG, "execute: action=" + action); - gWebView = this.webView; - - if (INITIALIZE.equals(action)) { - cordova.getThreadPool().execute(new Runnable() { - public void run() { - pushContext = callbackContext; - JSONObject jo = null; - - Log.v(LOG_TAG, "execute: data=" + data.toString()); - SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String token = null; - String senderID = null; - - try { - jo = data.getJSONObject(0).getJSONObject(ANDROID); - - Log.v(LOG_TAG, "execute: jo=" + jo.toString()); - - senderID = jo.getString(SENDER_ID); - - Log.v(LOG_TAG, "execute: senderID=" + senderID); - - String savedSenderID = sharedPref.getString(SENDER_ID, ""); - String savedRegID = sharedPref.getString(REGISTRATION_ID, ""); - - // first time run get new token - if ("".equals(savedRegID)) { - token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM); - } - // new sender ID, re-register - else if (!savedSenderID.equals(senderID)) { - token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM); - } - // use the saved one - else { - token = sharedPref.getString(REGISTRATION_ID, ""); - } - - if (!"".equals(token)) { - JSONObject json = new JSONObject().put(REGISTRATION_ID, token); - - Log.v(LOG_TAG, "onRegistered: " + json.toString()); - - JSONArray topics = jo.optJSONArray(TOPICS); - subscribeToTopics(topics, token); - - PushPlugin.sendEvent( json ); - } else { - callbackContext.error("Empty registration ID received from GCM"); - return; - } - } catch (JSONException e) { - Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); - callbackContext.error(e.getMessage()); - } catch (IOException e) { - Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); - callbackContext.error(e.getMessage()); - } - - if (jo != null) { - SharedPreferences.Editor editor = sharedPref.edit(); - try { - editor.putString(ICON, jo.getString(ICON)); - } catch (JSONException e) { - Log.d(LOG_TAG, "no icon option"); - } - try { - editor.putString(ICON_COLOR, jo.getString(ICON_COLOR)); - } catch (JSONException e) { - Log.d(LOG_TAG, "no iconColor option"); - } - editor.putBoolean(SOUND, jo.optBoolean(SOUND, true)); - editor.putBoolean(VIBRATE, jo.optBoolean(VIBRATE, true)); - editor.putBoolean(CLEAR_NOTIFICATIONS, jo.optBoolean(CLEAR_NOTIFICATIONS, true)); - editor.putBoolean(FORCE_SHOW, jo.optBoolean(FORCE_SHOW, false)); - editor.putString(SENDER_ID, senderID); - editor.putString(REGISTRATION_ID, token); - editor.commit(); - } - - if (gCachedExtras != null) { - Log.v(LOG_TAG, "sending cached extras"); - sendExtras(gCachedExtras); - gCachedExtras = null; - } - } - }); - } else if (UNREGISTER.equals(action)) { - cordova.getThreadPool().execute(new Runnable() { - public void run() { - try { - SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - String token = sharedPref.getString(REGISTRATION_ID, ""); - JSONArray topics = data.optJSONArray(0); - if (topics != null && !"".equals(token)) { - unsubscribeFromTopics(topics, token); - } else { - InstanceID.getInstance(getApplicationContext()).deleteInstanceID(); - Log.v(LOG_TAG, "UNREGISTER"); - - // Remove shared prefs - SharedPreferences.Editor editor = sharedPref.edit(); - editor.remove(SOUND); - editor.remove(VIBRATE); - editor.remove(CLEAR_NOTIFICATIONS); - editor.remove(FORCE_SHOW); - editor.remove(SENDER_ID); - editor.remove(REGISTRATION_ID); - editor.commit(); - } - - callbackContext.success(); - } catch (IOException e) { - Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); - callbackContext.error(e.getMessage()); - } - } - }); - } else if (FINISH.equals(action)) { - callbackContext.success(); - } else if (HAS_PERMISSION.equals(action)) { - cordova.getThreadPool().execute(new Runnable() { - public void run() { - JSONObject jo = new JSONObject(); - try { - jo.put("isEnabled", PermissionUtils.hasPermission(getApplicationContext(), "OP_POST_NOTIFICATION")); - PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, jo); - pluginResult.setKeepCallback(true); - callbackContext.sendPluginResult(pluginResult); - } catch (UnknownError e) { - callbackContext.error(e.getMessage()); - } catch (JSONException e) { - callbackContext.error(e.getMessage()); - } - } - }); - } else { - Log.e(LOG_TAG, "Invalid action : " + action); - callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION)); - return false; - } - - return true; - } - - public static void sendEvent(JSONObject _json) { - PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, _json); - pluginResult.setKeepCallback(true); - if (pushContext != null) { - pushContext.sendPluginResult(pluginResult); - } - } - - public static void sendError(String message) { - PluginResult pluginResult = new PluginResult(PluginResult.Status.ERROR, message); - pluginResult.setKeepCallback(true); - if (pushContext != null) { - pushContext.sendPluginResult(pluginResult); - } - } - - /* - * Sends the pushbundle extras to the client application. - * If the client application isn't currently active, it is cached for later processing. - */ - public static void sendExtras(Bundle extras) { - if (extras != null) { - if (gWebView != null) { - sendEvent(convertBundleToJson(extras)); - } else { - Log.v(LOG_TAG, "sendExtras: caching extras to send at a later time."); - gCachedExtras = extras; - } - } - } - - @Override - public void initialize(CordovaInterface cordova, CordovaWebView webView) { - super.initialize(cordova, webView); - gForeground = true; - } - - @Override - public void onPause(boolean multitasking) { - super.onPause(multitasking); - gForeground = false; - - SharedPreferences prefs = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - if (prefs.getBoolean(CLEAR_NOTIFICATIONS, true)) { - final NotificationManager notificationManager = (NotificationManager) cordova.getActivity().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancelAll(); - } - } - - @Override - public void onResume(boolean multitasking) { - super.onResume(multitasking); - gForeground = true; - } - - @Override - public void onDestroy() { - super.onDestroy(); - gForeground = false; - gWebView = null; - } - - private void subscribeToTopics(JSONArray topics, String registrationToken) { - if (topics != null) { - String topic = null; - for (int i=0; i<topics.length(); i++) { - try { - topic = topics.optString(i, null); - if (topic != null) { - Log.d(LOG_TAG, "Subscribing to topic: " + topic); - GcmPubSub.getInstance(getApplicationContext()).subscribe(registrationToken, "/topics/" + topic, null); - } - } catch (IOException e) { - Log.e(LOG_TAG, "Failed to subscribe to topic: " + topic, e); - } - } - } - } - - private void unsubscribeFromTopics(JSONArray topics, String registrationToken) { - if (topics != null) { - String topic = null; - for (int i=0; i<topics.length(); i++) { - try { - topic = topics.optString(i, null); - if (topic != null) { - Log.d(LOG_TAG, "Unsubscribing to topic: " + topic); - GcmPubSub.getInstance(getApplicationContext()).unsubscribe(registrationToken, "/topics/" + topic); - } - } catch (IOException e) { - Log.e(LOG_TAG, "Failed to unsubscribe to topic: " + topic, e); - } - } - } - } - - /* - * serializes a bundle to JSON. - */ - private static JSONObject convertBundleToJson(Bundle extras) { - Log.d(LOG_TAG, "convert extras to json"); - try { - JSONObject json = new JSONObject(); - JSONObject additionalData = new JSONObject(); - - // Add any keys that need to be in top level json to this set - HashSet<String> jsonKeySet = new HashSet(); - Collections.addAll(jsonKeySet, TITLE,MESSAGE,COUNT,SOUND,IMAGE); - - Iterator<String> it = extras.keySet().iterator(); - while (it.hasNext()) { - String key = it.next(); - Object value = extras.get(key); - - Log.d(LOG_TAG, "key = " + key); - - if (jsonKeySet.contains(key)) { - json.put(key, value); - } - else if (key.equals(COLDSTART)) { - additionalData.put(key, extras.getBoolean(COLDSTART)); - } - else if (key.equals(FOREGROUND)) { - additionalData.put(key, extras.getBoolean(FOREGROUND)); - } - else if ( value instanceof String ) { - String strValue = (String)value; - try { - // Try to figure out if the value is another JSON object - if (strValue.startsWith("{")) { - additionalData.put(key, new JSONObject(strValue)); - } - // Try to figure out if the value is another JSON array - else if (strValue.startsWith("[")) { - additionalData.put(key, new JSONArray(strValue)); - } - else { - additionalData.put(key, value); - } - } catch (Exception e) { - additionalData.put(key, value); - } - } - } // while - - json.put(ADDITIONAL_DATA, additionalData); - Log.v(LOG_TAG, "extrasToJSON: " + json.toString()); - - return json; - } - catch( JSONException e) { - Log.e(LOG_TAG, "extrasToJSON: JSON exception"); - } - return null; - } - - public static boolean isInForeground() { - return gForeground; - } - - public static boolean isActive() { - return gWebView != null; - } -} diff --git a/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java b/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java deleted file mode 100644 index c4489fc1..00000000 --- a/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.adobe.phonegap.push; - -import android.content.Context; - -import android.app.IntentService; -import android.content.Intent; -import android.content.SharedPreferences; -import android.util.Log; - -import com.google.android.gms.gcm.GoogleCloudMessaging; -import com.google.android.gms.iid.InstanceID; - -import java.io.IOException; - -public class RegistrationIntentService extends IntentService implements PushConstants { - public static final String LOG_TAG = "PushPlugin_RegistrationIntentService"; - - public RegistrationIntentService() { - super(LOG_TAG); - } - - @Override - protected void onHandleIntent(Intent intent) { - SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); - - try { - InstanceID instanceID = InstanceID.getInstance(this); - String senderID = sharedPreferences.getString(SENDER_ID, ""); - String token = instanceID.getToken(senderID, - GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); - Log.i(LOG_TAG, "new GCM Registration Token: " + token); - - // save new token - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(REGISTRATION_ID, token); - editor.commit(); - - } catch (Exception e) { - Log.d(LOG_TAG, "Failed to complete token refresh", e); - } - } -} \ No newline at end of file diff --git a/platforms/android/src/edu/northwestern/cbits/livewell/MainActivity.java b/platforms/android/src/edu/northwestern/cbits/livewell/MainActivity.java deleted file mode 100644 index 0ea0e640..00000000 --- a/platforms/android/src/edu/northwestern/cbits/livewell/MainActivity.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ - -package edu.northwestern.cbits.livewell; - -import android.os.Bundle; -import org.apache.cordova.*; - -public class MainActivity extends CordovaActivity -{ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - // Set by <content src="index.html" /> in config.xml - loadUrl(launchUrl); - } -} diff --git a/platforms/browser/browser.json b/platforms/browser/browser.json deleted file mode 100644 index df461de5..00000000 --- a/platforms/browser/browser.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "prepare_queue": { - "installed": [], - "uninstalled": [] - }, - "config_munge": { - "files": { - "config.xml": { - "parents": { - "/*": [ - { - "xml": "<feature name=\"Device\"><param name=\"browser-package\" value=\"Device\" /></feature>", - "count": 1 - } - ] - } - } - } - }, - "installed_plugins": { - "cordova-plugin-whitelist": { - "PACKAGE_NAME": "edu.northwestern.cbits.livewell" - }, - "cordova-plugin-device": { - "PACKAGE_NAME": "edu.northwestern.cbits.livewell" - } - }, - "dependent_plugins": {}, - "modules": [ - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "file": "plugins/cordova-plugin-device/src/browser/DeviceProxy.js", - "id": "cordova-plugin-device.DeviceProxy", - "pluginId": "cordova-plugin-device", - "runs": true - } - ], - "plugin_metadata": { - "cordova-plugin-whitelist": "1.2.2-dev", - "cordova-plugin-device": "1.1.2" - } -} \ No newline at end of file diff --git a/platforms/browser/config.xml b/platforms/browser/config.xml deleted file mode 100644 index 260365a5..00000000 --- a/platforms/browser/config.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget id="edu.northwestern.cbits.livewell" version="3.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <feature name="Device"> - <param name="browser-package" value="Device" /> - </feature> - <name>LiveWell</name> - <description> - An application for bipolar disorder - </description> - <author email="e-goulding@northwestern.edu" href="http://www.cbits.northwestern.edu"> - Evan Goulding - </author> - <content src="index.html" /> - <access origin="*" /> - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - <allow-intent href="tel:*" /> - <allow-navigation href="http://*/*" /> - <allow-navigation href="https://*/*" /> - <allow-navigation href="data:*" /> - <icon src="icon.png" /> -</widget> diff --git a/platforms/browser/platform_www/cordova.js b/platforms/browser/platform_www/cordova.js deleted file mode 100644 index d73121b2..00000000 --- a/platforms/browser/platform_www/cordova.js +++ /dev/null @@ -1,1551 +0,0 @@ -// Platform: browser -// 8ca0f3b2b87e0759c5236b91c80f18438544409c -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '3.6.0'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in success callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/browser/exec.js -define("cordova/exec", function(require, exports, module) { - -var cordova = require('cordova'); -var execProxy = require('cordova/exec/proxy'); - -module.exports = function(success, fail, service, action, args) { - - var proxy = execProxy.get(service, action); - - if (proxy) { - var callbackId = service + cordova.callbackId++; - - if (typeof success == "function" || typeof fail == "function") { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - try { - proxy(success, fail, args); - } - catch(e) { - // TODO throw maybe? - var msg = "Exception calling :: " + service + " :: " + action + " ::exception=" + e; - console.log(msg); - } - } - else { - fail && fail("Missing Command Error"); - } -}; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var platform = require('cordova/platform'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/browser/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'browser', - cordovaVersion: '3.4.0', - - bootstrap: function() { - - var modulemapper = require('cordova/modulemapper'); - var channel = require('cordova/channel'); - - modulemapper.clobbers('cordova/exec/proxy', 'cordova.commandProxy'); - - channel.onNativeReady.fire(); - - // FIXME is this the right place to clobber pause/resume? I am guessing not - // FIXME pause/resume should be deprecated IN CORDOVA for pagevisiblity api - document.addEventListener('webkitvisibilitychange', function() { - if (document.webkitHidden) { - channel.onPause.fire(); - } - else { - channel.onResume.fire(); - } - }, false); - - // End of bootstrap - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/browser/platform_www/cordova_plugins.js b/platforms/browser/platform_www/cordova_plugins.js deleted file mode 100644 index e6574b1d..00000000 --- a/platforms/browser/platform_www/cordova_plugins.js +++ /dev/null @@ -1,25 +0,0 @@ -cordova.define('cordova/plugin_list', function(require, exports, module) { -module.exports = [ - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "file": "plugins/cordova-plugin-device/src/browser/DeviceProxy.js", - "id": "cordova-plugin-device.DeviceProxy", - "pluginId": "cordova-plugin-device", - "runs": true - } -]; -module.exports.metadata = -// TOP OF METADATA -{ - "cordova-plugin-whitelist": "1.2.2-dev", - "cordova-plugin-device": "1.1.2" -} -// BOTTOM OF METADATA -}); \ No newline at end of file diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js b/platforms/browser/platform_www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js deleted file mode 100644 index f62801db..00000000 --- a/platforms/browser/platform_www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js +++ /dev/null @@ -1,84 +0,0 @@ -cordova.define("cordova-plugin-device.DeviceProxy", function(require, exports, module) { /* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -var browser = require('cordova/platform'); - -function getPlatform() { - return "browser"; -} - -function getModel() { - return getBrowserInfo(true); -} - -function getVersion() { - return getBrowserInfo(false); -} - -function getBrowserInfo(getModel) { - var userAgent = navigator.userAgent; - var returnVal = ''; - var offset; - - if ((offset = userAgent.indexOf('Chrome')) !== -1) { - returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7); - } else if ((offset = userAgent.indexOf('Safari')) !== -1) { - if (getModel) { - returnVal = 'Safari'; - } else { - returnVal = userAgent.substring(offset + 7); - - if ((offset = userAgent.indexOf('Version')) !== -1) { - returnVal = userAgent.substring(offset + 8); - } - } - } else if ((offset = userAgent.indexOf('Firefox')) !== -1) { - returnVal = (getModel) ? 'Firefox' : userAgent.substring(offset + 8); - } else if ((offset = userAgent.indexOf('MSIE')) !== -1) { - returnVal = (getModel) ? 'MSIE' : userAgent.substring(offset + 5); - } else if ((offset = userAgent.indexOf('Trident')) !== -1) { - returnVal = (getModel) ? 'MSIE' : '11'; - } - - if ((offset = returnVal.indexOf(';')) !== -1 || (offset = returnVal.indexOf(' ')) !== -1) { - returnVal = returnVal.substring(0, offset); - } - - return returnVal; -} - - -module.exports = { - getDeviceInfo: function (success, error) { - setTimeout(function () { - success({ - cordova: browser.cordovaVersion, - platform: getPlatform(), - model: getModel(), - version: getVersion(), - uuid: null - }); - }, 0); - } -}; - -require("cordova/exec/proxy").add("Device", module.exports); - -}); diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-device/www/device.js b/platforms/browser/platform_www/plugins/cordova-plugin-device/www/device.js deleted file mode 100644 index ff0c5b48..00000000 --- a/platforms/browser/platform_www/plugins/cordova-plugin-device/www/device.js +++ /dev/null @@ -1,85 +0,0 @@ -cordova.define("cordova-plugin-device.device", function(require, exports, module) { /* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var argscheck = require('cordova/argscheck'), - channel = require('cordova/channel'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - cordova = require('cordova'); - -channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); - -/** - * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the - * phone, etc. - * @constructor - */ -function Device() { - this.available = false; - this.platform = null; - this.version = null; - this.uuid = null; - this.cordova = null; - this.model = null; - this.manufacturer = null; - this.isVirtual = null; - this.serial = null; - - var me = this; - - channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - //TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - me.uuid = info.uuid; - me.cordova = buildLabel; - me.model = info.model; - me.isVirtual = info.isVirtual; - me.manufacturer = info.manufacturer || 'unknown'; - me.serial = info.serial || 'unknown'; - channel.onCordovaInfoReady.fire(); - },function(e) { - me.available = false; - utils.alert("[ERROR] Error initializing Cordova: " + e); - }); - }); -} - -/** - * Get device info - * - * @param {Function} successCallback The function to call when the heading data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) - */ -Device.prototype.getInfo = function(successCallback, errorCallback) { - argscheck.checkArgs('fF', 'Device.getInfo', arguments); - exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); -}; - -module.exports = new Device(); - -}); diff --git a/platforms/browser/www/404.html b/platforms/browser/www/404.html deleted file mode 100644 index ec98e3c2..00000000 --- a/platforms/browser/www/404.html +++ /dev/null @@ -1,157 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Page Not Found :(</title> - <style> - ::-moz-selection { - background: #b3d4fc; - text-shadow: none; - } - - ::selection { - background: #b3d4fc; - text-shadow: none; - } - - html { - padding: 30px 10px; - font-size: 20px; - line-height: 1.4; - color: #737373; - background: #f0f0f0; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - } - - html, - input { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - } - - body { - max-width: 500px; - _width: 500px; - padding: 30px 20px 50px; - border: 1px solid #b3b3b3; - border-radius: 4px; - margin: 0 auto; - box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; - background: #fcfcfc; - } - - h1 { - margin: 0 10px; - font-size: 50px; - text-align: center; - } - - h1 span { - color: #bbb; - } - - h3 { - margin: 1.5em 0 0.5em; - } - - p { - margin: 1em 0; - } - - ul { - padding: 0 0 0 40px; - margin: 1em 0; - } - - .container { - max-width: 380px; - _width: 380px; - margin: 0 auto; - } - - /* google search */ - - #goog-fixurl ul { - list-style: none; - padding: 0; - margin: 0; - } - - #goog-fixurl form { - margin: 0; - } - - #goog-wm-qt, - #goog-wm-sb { - border: 1px solid #bbb; - font-size: 16px; - line-height: normal; - vertical-align: top; - color: #444; - border-radius: 2px; - } - - #goog-wm-qt { - width: 220px; - height: 20px; - padding: 5px; - margin: 5px 10px 0 0; - box-shadow: inset 0 1px 1px #ccc; - } - - #goog-wm-sb { - display: inline-block; - height: 32px; - padding: 0 10px; - margin: 5px 0 0; - white-space: nowrap; - cursor: pointer; - background-color: #f5f5f5; - background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1); - background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - *overflow: visible; - *display: inline; - *zoom: 1; - } - - #goog-wm-sb:hover, - #goog-wm-sb:focus { - border-color: #aaa; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - background-color: #f8f8f8; - } - - #goog-wm-qt:hover, - #goog-wm-qt:focus { - border-color: #105cb6; - outline: 0; - color: #222; - } - - input::-moz-focus-inner { - padding: 0; - border: 0; - } - </style> - </head> - <body> - <div class="container"> - <h1>Not found <span>:(</span></h1> - <p>Sorry, but the page you were trying to view does not exist.</p> - <p>It looks like this was the result of either:</p> - <ul> - <li>a mistyped address</li> - <li>an out-of-date link</li> - </ul> - <script> - var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; - </script> - <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> - </div> - </body> -</html> diff --git a/platforms/browser/www/config.json b/platforms/browser/www/config.json deleted file mode 100644 index 70789f22..00000000 --- a/platforms/browser/www/config.json +++ /dev/null @@ -1 +0,0 @@ -{"environment":"","server":""} diff --git a/platforms/browser/www/config.xml b/platforms/browser/www/config.xml deleted file mode 100644 index 260365a5..00000000 --- a/platforms/browser/www/config.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget id="edu.northwestern.cbits.livewell" version="3.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <feature name="Device"> - <param name="browser-package" value="Device" /> - </feature> - <name>LiveWell</name> - <description> - An application for bipolar disorder - </description> - <author email="e-goulding@northwestern.edu" href="http://www.cbits.northwestern.edu"> - Evan Goulding - </author> - <content src="index.html" /> - <access origin="*" /> - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - <allow-intent href="tel:*" /> - <allow-navigation href="http://*/*" /> - <allow-navigation href="https://*/*" /> - <allow-navigation href="data:*" /> - <icon src="icon.png" /> -</widget> diff --git a/platforms/browser/www/cordova.js b/platforms/browser/www/cordova.js deleted file mode 100644 index d73121b2..00000000 --- a/platforms/browser/www/cordova.js +++ /dev/null @@ -1,1551 +0,0 @@ -// Platform: browser -// 8ca0f3b2b87e0759c5236b91c80f18438544409c -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '3.6.0'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in success callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/browser/exec.js -define("cordova/exec", function(require, exports, module) { - -var cordova = require('cordova'); -var execProxy = require('cordova/exec/proxy'); - -module.exports = function(success, fail, service, action, args) { - - var proxy = execProxy.get(service, action); - - if (proxy) { - var callbackId = service + cordova.callbackId++; - - if (typeof success == "function" || typeof fail == "function") { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - try { - proxy(success, fail, args); - } - catch(e) { - // TODO throw maybe? - var msg = "Exception calling :: " + service + " :: " + action + " ::exception=" + e; - console.log(msg); - } - } - else { - fail && fail("Missing Command Error"); - } -}; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var platform = require('cordova/platform'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/browser/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'browser', - cordovaVersion: '3.4.0', - - bootstrap: function() { - - var modulemapper = require('cordova/modulemapper'); - var channel = require('cordova/channel'); - - modulemapper.clobbers('cordova/exec/proxy', 'cordova.commandProxy'); - - channel.onNativeReady.fire(); - - // FIXME is this the right place to clobber pause/resume? I am guessing not - // FIXME pause/resume should be deprecated IN CORDOVA for pagevisiblity api - document.addEventListener('webkitvisibilitychange', function() { - if (document.webkitHidden) { - channel.onPause.fire(); - } - else { - channel.onResume.fire(); - } - }, false); - - // End of bootstrap - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/browser/www/cordova_plugins.js b/platforms/browser/www/cordova_plugins.js deleted file mode 100644 index e6574b1d..00000000 --- a/platforms/browser/www/cordova_plugins.js +++ /dev/null @@ -1,25 +0,0 @@ -cordova.define('cordova/plugin_list', function(require, exports, module) { -module.exports = [ - { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "file": "plugins/cordova-plugin-device/src/browser/DeviceProxy.js", - "id": "cordova-plugin-device.DeviceProxy", - "pluginId": "cordova-plugin-device", - "runs": true - } -]; -module.exports.metadata = -// TOP OF METADATA -{ - "cordova-plugin-whitelist": "1.2.2-dev", - "cordova-plugin-device": "1.1.2" -} -// BOTTOM OF METADATA -}); \ No newline at end of file diff --git a/platforms/browser/www/favicon.ico b/platforms/browser/www/favicon.ico deleted file mode 100644 index 6527905307f19ba00762f9241f7eb535fa84a2f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmchaPe@cz6vpqQW1y54B@{_hhFD-kWPgyXjSGVaf);_51TESOlSPOdvy}@W5Q+** zs6~RrtlR}7(V|sCkP&1f7!5{Hixw@4+x@+HXSm*Z^WGalm2d8S=brO@=iGm9MyZ7P zPo)%}YN|=8W~EfSfibDm2H3qnGq$y%h@zqVv#zn@@WvhIGJ8*ECePe@roq(*vwGys z4?Q;bI~MRIM&jXu6Yg@wqQ#8&8x#z55E}ONd3<&rw_h!5AbBx{CcZ%&z736jHxFa0 zsBLqly3+dQ%MZGH{QU}GW6bsq=@$a@sXtac^<8>8uP>*+d!Qdtv&&mnKlvE_T-+SC z*QNCVwcvq%+&DDc+T}Uf(2_FavDN{-&hCpIs?aW=A$mcrzyD+9(025i1~K&uVf&w4 zItQLK9T{7k?s@bnU*&p+<^UI*aHA1aH+Fo^PAzM|xjNK09?2V(Cme7IFB(BP?7#at z(>DB3w`AUFS~=(LUBdZ>v-SG4J~%Mrfj&05Z)oj13l5tbEq4x>8+<xOzx>;FC0Dvr z<Zj`N0l1Ehyw;hSrIHVQY>bJY#7PS$+yE_Cf7gxqQEC@RoZX5J^}71l+`Q~qnOF4D za`lhjUuqZa-sj)EHDleV2i|mc!Ly-@7IwzPM{?pBUt(+@IHi8HTz#Iq9)9h|hrL3) zfOT#@|5$JCxmRjsOj>&kUt(m8*57|W(FoE`CX*8edYv%j=3sR5>!hvglJ#@8K6j$g z&IuUbRC_{)p}sbyx%UD6Fki;t6n<J;-|d_C%AmYkf?71&)LY$}nDJWr*n)g5+n}pc z>Dk0gT5&6Q_at7FbVVOu?4VK{oR#!kyYbCc;<4+LITzoZ8-~O5L+9MiLHL4NyME>! z;Ky7<)UR!gN_~GXhMvPMHNB;EmmIK}eHD&~cRx89jth}IM#tU%ablw0|GxfE9IjRR zl-)b-IvC#UD!IewzPL77SI>R+?}<2ERr|R2o~zCC8rJUR8>DI5*0O$6+k~wZ)Mt;b z(Hul-OFl+F))}lK&&Yi*+S2kJmHDbdBWOQn<D7ZX3~K#6m=AKvMdXt=<DB22sNXrF r^-HP7S*2<Oi{@t_z)m}BjY;3O-!bEVl-g~B*bv}*>aSA6S|#*<GsP;^ diff --git a/platforms/browser/www/icon.png b/platforms/browser/www/icon.png deleted file mode 100755 index c1259d5cfe0a93ef0e322a26dd1fbecae5fe8539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54642 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 diff --git a/platforms/browser/www/images/logo.png b/platforms/browser/www/images/logo.png deleted file mode 100644 index 6ec94bc621469c33c9217f87813d60338436cf03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15656 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 diff --git a/platforms/browser/www/images/yeoman.png b/platforms/browser/www/images/yeoman.png deleted file mode 100644 index 92497addf96c5c009ac24007f55eb989f3bf74c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13501 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 diff --git a/platforms/browser/www/index.html b/platforms/browser/www/index.html deleted file mode 100644 index 03c18235..00000000 --- a/platforms/browser/www/index.html +++ /dev/null @@ -1,144 +0,0 @@ -<!doctype html> -<html class="no-js"> - <head> - <meta charset="utf-8"> - <title></title> - <meta name="description" content=""> - <meta name="viewport" content="width=device-width"> -<!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> - --> - - <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> - - <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> - - <link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css" /> - - <link rel="stylesheet" href="styles/main.css"> - <link rel="stylesheet" href="styles/bootstrap.min.css"> - - <link href='http://fonts.googleapis.com/css?family=Lato' rel='stylesheet' type='text/css'> - </head> - <body ng-app="livewellApp"> - <!--[if lt IE 7]> - <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> - <![endif]--> - - <!-- Add your site or application content here --> - <div class="container"> - <div ng-view></div> - </div> - - <!--[if lt IE 9]> - <script src="lib/es5-shim/es5-shim.js"></script> - <script src="lib/json3/lib/json3.min.js"></script> - <![endif]--> - - <script src="lib/jquery/dist/jquery.js"></script> - <script src="lib/angular/angular.js"></script> - <script src="lib/json3/lib/json3.js"></script> - <script src="lib/bootstrap/dist/js/bootstrap.js"></script> - <script src="lib/angular-resource/angular-resource.js"></script> - <script src="lib/angular-cookies/angular-cookies.js"></script> - <script src="lib/angular-sanitize/angular-sanitize.js"></script> - <script src="lib/angular-animate/angular-animate.js"></script> - <script src="lib/angular-touch/angular-touch.js"></script> - <script src="lib/angular-route/angular-route.js"></script> - <script src="lib/moment/moment.js"></script> - <script src="lib/angular-moment/angular-moment.js"></script> - <script src="lib/lodash/dist/lodash.compat.js"></script> - <script src="lib/highcharts-ng/highcharts-ng.js"></script> - <script src="lib/highcharts/highcharts.js"></script> - <script src="lib/highcharts/highcharts-more.js"></script> - <script src="lib/highcharts/modules/exporting.js"></script> - <script src="lib/PurpleRobotClient/purple-robot.js"></script> - - <script src="scripts/app.js"></script> - <script src="scripts/controllers/main.js"></script> - <script src="scripts/controllers/about.js"></script> - <script src="scripts/controllers/foundations.js"></script> - <script src="scripts/controllers/checkins.js"></script> - <script src="scripts/controllers/daily_review.js"></script> - <script src="scripts/controllers/wellness.js"></script> - <script src="scripts/controllers/instructions.js"></script> - <script src="scripts/controllers/daily_review_summary.js"></script> - <script src="scripts/controllers/daily_review_conclusion.js"></script> - <script src="scripts/controllers/medications.js"></script> - <script src="scripts/controllers/skills.js"></script> - <script src="scripts/controllers/team.js"></script> - <script src="scripts/controllers/intervention.js"></script> - <script src="scripts/controllers/exit.js"></script> - <script src="scripts/controllers/charts.js"></script> - <script src="scripts/controllers/resources.js"></script> - <script src="scripts/controllers/risks.js"></script> - <script src="scripts/controllers/awareness.js"></script> - <script src="scripts/controllers/weekly_check_in.js"></script> - <script src="scripts/controllers/daily_check_in.js"></script> - <script src="scripts/controllers/ews.js"></script> - <script src="scripts/controllers/ews2.js"></script> - <script src="scripts/services/static_content.js"></script> - <script src="scripts/controllers/fetch_content.js"></script> - <script src="scripts/services/user_data.js"></script> - <script src="scripts/services/questions.js"></script> - <script src="scripts/questionGroups/questiongroup.js"></script> - <script src="scripts/controllers/settings.js"></script> - <script src="scripts/services/guid.js"></script> - <script src="scripts/controllers/login.js"></script> - <script src="scripts/services/pound.js"></script> - <script src="scripts/services/user_details.js"></script> - <script src="scripts/controllers/localstoragebackuprestore.js"></script> - <script src="scripts/controllers/cms.js"></script> - <script src="scripts/controllers/admin.js"></script> - <script src="scripts/controllers/lesson_player.js"></script> - <script src="scripts/controllers/load_interventions.js"></script> - <script src="scripts/controllers/skills_fundamentals.js"></script> - <script src="scripts/controllers/skills_awareness.js"></script> - <script src="scripts/controllers/skills_lifestyle.js"></script> - <script src="scripts/controllers/skills_coping.js"></script> - <script src="scripts/controllers/skills_team.js"></script> - <script src="scripts/controllers/schedule.js"></script> - <script src="scripts/controllers/summary_player.js"></script> - <script src="scripts/controllers/myskills.js"></script> - <script src="scripts/controllers/dailyreviewtester.js"></script> - <script src="scripts/controllers/personalsnapshot.js"></script> - <script src="scripts/services/dailyreview.js"></script> - <script src="scripts/controllers/home.js"></script> - <script src="scripts/controllers/setup.js"></script> - <script src="scripts/controllers/usereditor.js"></script> - <script src="scripts/services/clinicalstatusupdate.js"></script> - <script src="cordova.js"></script> - <script src="cordova_plugins.js"></script> - - <script> - document.addEventListener("deviceready", function() { - - document.addEventListener("resume", function() { - window.location.href = "index.html"; - }, false); - - document.addEventListener("click", function(ev){ - var clickTrackPayload = {objectClicked: ev.srcElement.outerHTML, targetPage:ev.currentTarget.URL}; - (new PurpleRobot()).emitReading('livewell_event_tracking', clickTrackPayload).execute(); - }); - - var push = PushNotification.init({ "android": {"senderID": "334078391843"}} ); - - console.log(push); - - push.on('registration', function(data) { - console.log("registration", data); - localStorage['registrationId'] = data.registrationId; - }); - - push.on('notification', function(data) { - console.log("notification", data); - }); - - push.on('error', function(e) { - console.log("error", e); - }); - - }); - </script> -</body> -</html> diff --git a/platforms/browser/www/lib/PurpleRobotClient/.bower.json b/platforms/browser/www/lib/PurpleRobotClient/.bower.json deleted file mode 100644 index 30421c24..00000000 --- a/platforms/browser/www/lib/PurpleRobotClient/.bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "PurpleRobotClient", - "homepage": "https://github.com/cbitstech/PurpleRobotClient", - "authors": [ - "Mark Begale <m-begale@northwestern.edu>", - "Eric Carty-Fickes <ericcf@northwestern.edu>" - ], - "description": "JavaScript client for Purple Robot services", - "main": "purple-robot.js", - "devDependencies": { - "jasmine": "2" - }, - "ignore": [ - "README.md", - "default-triggers.js", - "index.html", - "purple-robot-client.js", - "run_specs", - "test-prompt copy.js", - "docs", - "spec" - ], - "_release": "1.5.10.0", - "_resolution": { - "type": "tag", - "tag": "1.5.10.0", - "commit": "c3f27a19f14a86699d1bc4a19f3df38d8a160a4f" - }, - "_source": "git@github.com:cbitstech/PurpleRobotClient.git", - "_target": "1.5.10.0", - "_originalSource": "git@github.com:cbitstech/PurpleRobotClient.git" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/PurpleRobotClient/.gitignore b/platforms/browser/www/lib/PurpleRobotClient/.gitignore deleted file mode 100644 index 878275d5..00000000 --- a/platforms/browser/www/lib/PurpleRobotClient/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.DS_Store -bower_components diff --git a/platforms/browser/www/lib/PurpleRobotClient/bower.json b/platforms/browser/www/lib/PurpleRobotClient/bower.json deleted file mode 100644 index 4d7a07a4..00000000 --- a/platforms/browser/www/lib/PurpleRobotClient/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PurpleRobotClient", - "version": "1.5.10.0", - "homepage": "https://github.com/cbitstech/PurpleRobotClient", - "authors": [ - "Mark Begale <m-begale@northwestern.edu>", - "Eric Carty-Fickes <ericcf@northwestern.edu>" - ], - "description": "JavaScript client for Purple Robot services", - "main": "purple-robot.js", - "devDependencies": { - "jasmine": "2" - }, - "ignore": [ - "README.md", - "default-triggers.js", - "index.html", - "purple-robot-client.js", - "run_specs", - "test-prompt copy.js", - "docs", - "spec" - ] -} diff --git a/platforms/browser/www/lib/PurpleRobotClient/purple-robot.js b/platforms/browser/www/lib/PurpleRobotClient/purple-robot.js deleted file mode 100644 index 30828543..00000000 --- a/platforms/browser/www/lib/PurpleRobotClient/purple-robot.js +++ /dev/null @@ -1,1039 +0,0 @@ -;(function() { - // ## Example - // - // var pr = new PurpleRobot(); - // pr.playDefaultTone().execute(); - - // __constructor__ - // - // Initialize the client with an options object made up of - // `serverUrl` - the url to which commands are sent - function PurpleRobot(options) { - options = options || {}; - - // __className__ - // - // `@public` - this.className = "PurpleRobot"; - - // ___serverUrl__ - // - // `@private` - this._serverUrl = options.serverUrl || "http://localhost:12345/json/submit"; - // ___script__ - // - // `@private` - this._script = options.script || ""; - } - - var PR = PurpleRobot; - var root = window; - - function PurpleRobotArgumentException(methodName, argument, expectedArgument) { - this.methodName = methodName; - this.argument = argument; - this.expectedArgument = expectedArgument; - this.message = ' received an unexpected argument "'; - - this.toString = function() { - return [ - "PurpleRobot.", - this.methodName, - this.message, - this.argument, - '" expected: ', - this.expectedArgument - ].join(""); - }; - } - - // __apiVersion__ - // - // `@public` - // - // The version of the API, corresponding to the version of Purple Robot. - PR.apiVersion = "1.5.10.0"; - - // __setEnvironment()__ - // - // `@public` - // `@param {string} ['production'|'debug'|'web']` - // - // Set the environment to one of: - // `production`: Make real calls to the Purple Robot HTTP server with minimal - // logging. - // `debug': Make real calls to the Purple Robot HTTP server with extra - // logging. - // `web`: Make fake calls to the Purple Robot HTTP server with extra logging. - PR.setEnvironment = function(env) { - if (env !== 'production' && env !== 'debug' && env !== 'web') { - throw new PurpleRobotArgumentException('setEnvironment', env, '["production", "debug", "web"]'); - } - - this.env = env; - - return this; - }; - - // ___push(nextScript)__ - // - // `@private` - // `@returns {Object}` A new PurpleRobot instance. - // - // Enables chaining of method calls. - PR.prototype._push = function(methodName, argStr) { - var nextScript = ["PurpleRobot.", methodName, "(", argStr, ");"].join(""); - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, nextScript].join(" ").trim() - }); - }; - - // ___stringify(value)__ - // - // `@private` - // `@param {*} value` The value to be stringified. - // `@returns {string}` The stringified representation. - // - // Returns a string representation of the input. If the input is a - // `PurpleRobot` instance, a string expression is returned, otherwise a JSON - // stringified version is returned. - PR.prototype._stringify = function(value) { - var str; - - if (value !== null && - typeof value === "object" && - value.className === this.className) { - str = value.toStringExpression(); - } else { - str = JSON.stringify(value); - } - - return str; - }; - - // __toString()__ - // - // `@returns {string}` The current script as a string. - // - // Returns the string representation of the current script. - PR.prototype.toString = function() { - return this._script; - }; - - // __toStringExpression()__ - // - // `@returns {string}` A string representation of a function that returns the - // value of this script when evaluated. - // - // Example - // - // pr.emitToast("foo").toStringExpression(); - // // "(function() { return PurpleRobot.emitToast('foo'); })()" - PR.prototype.toStringExpression = function () { - return "(function() { return " + this._script + " })()"; - }; - - // __toJson()__ - // - // `@returns {string}` A JSON stringified version of this script. - // - // Returns the escaped string representation of the method call. - PR.prototype.toJson = function() { - return JSON.stringify(this.toString()); - }; - - // __execute(callbacks)__ - // - // Executes the current method (and any previously chained methods) by - // making an HTTP request to the Purple Robot HTTP server. - // - // Example - // - // pr.fetchEncryptedString("foo").execute({ - // done: function(payload) { - // console.log(payload); - // } - // }) - PR.prototype.execute = function(callbacks) { - var json = JSON.stringify({ - command: "execute_script", - script: this.toString() - }); - - if (PR.env !== 'web') { - function onChange() { - if (callbacks && httpRequest.readyState === XMLHttpRequest.DONE) { - if (httpRequest.response === null) { - callbacks.fail && callbacks.fail(); - } else if (callbacks.done) { - callbacks.done(JSON.parse(httpRequest.response).payload); - } - } - } - - var httpRequest = new XMLHttpRequest(); - httpRequest.onreadystatechange = onChange; - var isAsynchronous = true; - httpRequest.open("POST", this._serverUrl, isAsynchronous); - httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - httpRequest.send("json=" + json); - } else { - console.log('PurpleRobot POSTing to "' + this._serverUrl + '": ' + json); - } - }; - - // __save()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Saves a string representation of script(s) to localStorage. - // - // Example - // - // pr.emitReading("foo", "bar").save(); - PR.prototype.save = function() { - localStorage.prQueue = localStorage.prQueue || ""; - localStorage.prQueue += this.toString(); - - return this; - }; - - // __restore()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Restores saved script(s) from localStorage. - // - // Example - // - // pr.restore().execute(); - PR.prototype.restore = function() { - localStorage.prQueue = localStorage.prQueue || ""; - this._script = localStorage.prQueue; - - return this; - }; - - // __destroy()__ - // - // `@returns {Object}` Returns the current object instance. - // - // Deletes saved script(s) from localStorage. - // - // Example - // - // pr.destroy(); - PR.prototype.destroy = function() { - delete localStorage.prQueue; - - return this; - }; - - // __isEqual(valA, valB)__ - // - // `@param {*} valA` The left hand value. - // `@param {*} valB` The right hand value. - // `@returns {Object}` Returns the current object instance. - // - // Generates an equality expression between two values. - // - // Example - // - // pr.isEqual(pr.fetchEncryptedString("a"), null); - PR.prototype.isEqual = function(valA, valB) { - var expr = this._stringify(valA) + " == " + this._stringify(valB); - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, expr].join(" ").trim() - }); - }; - - // __ifThenElse(condition, thenStmt, elseStmt)__ - // - // `@param {Object} condition` A PurpleRobot instance that evaluates to true or - // false. - // `@param {Object} thenStmt` A PurpleRobot instance. - // `@param {Object} elseStmt` A PurpleRobot instance. - // `@returns {Object}` A new PurpleRobot instance. - // - // Generates a conditional expression. - // - // Example - // - // pr.ifThenElse(pr.isEqual(1, 1), pr.emitToast("true"), pr.emitToast("error")); - PR.prototype.ifThenElse = function(condition, thenStmt, elseStmt) { - var expr = "if (" + condition.toString() + ") { " + - thenStmt.toString() + - " } else { " + - elseStmt.toString() + - " }"; - - return new PR({ - serverUrl: this._serverUrl, - script: [this._script, expr].join(" ").trim() - }); - }; - - // __doNothing()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Generates an explicitly empty script. - // - // Example - // - // pr.doNothing(); - PR.prototype.doNothing = function() { - return new PR({ - serverUrl: this._serverUrl, - script: this._script - }); - }; - - // __q(value)__ - // - // `@private` - // `@param {string} value` A string argument. - // `@returns {string}` A string with extra single quotes surrounding it. - function q(value) { - return "'" + value + "'"; - }; - - // ##Purple Robot API - - // __addNamespace(namespace)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds a namespace under which unencrypted values might be stored. - // - // Example - // - // pr.addNamespace("foo"); - PR.prototype.addNamespace = function(namespace) { - return this._push("addNamespace", [q(namespace)].join(", ")); - }; - - // __broadcastIntent(action, options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Broadcasts an Android intent. - // - // Example - // - // pr.broadcastIntent("intent"); - PR.prototype.broadcastIntent = function(action, options) { - return this._push("broadcastIntent", [q(action), - JSON.stringify(options || null)].join(", ")); - }; - - // __cancelScriptNotification()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Removes the tray notification from the task bar. - // - // Example - // - // pr.cancelScriptNotification(); - PR.prototype.cancelScriptNotification = function() { - return this._push("cancelScriptNotification"); - }; - - // __clearNativeDialogs()__ - // __clearNativeDialogs(tag)__ - // - // `@param {string} tag (optional)` An identifier of a specific dialog. - // `@returns {Object}` A new PurpleRobot instance. - // - // Removes all native dialogs from the screen. - // - // Examples - // - // pr.clearNativeDialogs(); - // pr.clearNativeDialogs("my-id"); - PR.prototype.clearNativeDialogs = function(tag) { - if (tag) { - return this._push("clearNativeDialogs", q(tag)); - } else { - return this._push("clearNativeDialogs"); - } - }; - - // __clearTriggers()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Deletes all Purple Robot triggers. - // - // Example - // - // pr.clearTriggers(); - PR.prototype.clearTriggers = function() { - return this._push("clearTriggers"); - }; - - // __dateFromTimestamp(epoch)__ - // - // `@param {number} epoch` The Unix epoch timestamp including milliseconds. - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a Date object given an epoch timestamp. - // - // Example - // - // pr.dateFromTimestamp(1401205124000); - PR.prototype.dateFromTimestamp = function(epoch) { - return this._push("dateFromTimestamp", epoch); - }; - - // __deleteTrigger(id)__ - // - // `@param {string} id` The id of the trigger. - // `@returns {Object}` A new PurpleRobot instance. - // - // Deletes the Purple Robot trigger identified by `id`; - // - // Example - // - // pr.deleteTrigger("MY-TRIGGER"); - PR.prototype.deleteTrigger = function(id) { - return this._push("deleteTrigger", q(id)); - }; - - // __disableTrigger(id)__ - // - // `@param {string} id` The id of the trigger. - // `@returns {Object}` A new PurpleRobot instance. - // - // Disables the Purple Robot trigger identified by `id`; - // - // Example - // - // pr.disableTrigger("MY-TRIGGER"); - PR.prototype.disableTrigger = function(id) { - return this._push("disableTrigger", q(id)); - }; - - // __emitReading(name, value)__ - // - // `@param {string} name` The name of the reading. - // `@param {*} value` The value of the reading. - // `@returns {Object}` A new PurpleRobot instance. - // - // Transmits a name value pair to be stored in Purple Robot Warehouse. The - // table name will be *name*, and the columns and data values will be - // extrapolated from the *value*. - // - // Example - // - // pr.emitReading("sandwich", "pb&j"); - PR.prototype.emitReading = function(name, value) { - return this._push("emitReading", q(name) + ", " + JSON.stringify(value)); - }; - - // __emitToast(message, hasLongDuration)__ - // - // `@param {string} message` The text of the toast. - // `@param {boolean} hasLongDuration` True if the toast should display longer. - // `@returns {Object}` A new PurpleRobot instance. - // - // Displays a native toast message on the phone. - // - // Example - // - // pr.emitToast("howdy", true); - PR.prototype.emitToast = function(message, hasLongDuration) { - hasLongDuration = (typeof hasLongDuration === "boolean") ? hasLongDuration : true; - - return this._push("emitToast", q(message) + ", " + hasLongDuration); - }; - - // __enableTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Enables the trigger. - // - // Example - // - // pr.enableTrigger("my-trigger"); - PR.prototype.enableTrigger = function(id) { - return this._push("enableTrigger", q(id)); - }; - - // __fetchConfig()__ - PR.prototype.fetchConfig = function() { - return this._push("fetchConfig"); - }; - - // __fetchEncryptedString(key, namespace)__ - // __fetchEncryptedString(key)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a value stored for the namespace and key provided. Generally - // paired with `persistEncryptedString`. - // - // Examples - // - // pr.fetchEncryptedString("x", "my stuff"); - // pr.fetchEncryptedString("y"); - PR.prototype.fetchEncryptedString = function(key, namespace) { - if (typeof namespace === "undefined") { - return this._push("fetchEncryptedString", q(key)); - } else { - return this._push("fetchEncryptedString", q(namespace) + ", " + q(key)); - } - }; - - // __fetchNamespace(namespace)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns a hash of the keys and values stored in the namespace. - // - // Examples - // - // pr.fetchNamespace("x").execute({ - // done(function(store) { - // ... - // }); - PR.prototype.fetchNamespace = function(namespace) { - return this._push("fetchNamespace", [q(namespace)].join(", ")); - }; - - // __fetchNamespaces()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns an array of all the namespaces - // - // Examples - // - // pr.fetchNamespaces.execute({ - // done(function(namespaces) { - // ... - // }); - PR.prototype.fetchNamespaces = function() { - return this._push("fetchNamespaces"); - }; - - // __fetchTrigger(id)__ - // - // Example - // - // pr.fetchTrigger("my-trigger").execute({ - // done: function(triggerConfig) { - // ... - // } - // }); - PR.prototype.fetchTrigger = function(id) { - return this._push("fetchTrigger", [q(id)].join(", ")); - }; - - // __fetchTriggerIds()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns an array of Trigger id strings. - // - // Example - // - // pr.fetchTriggerIds().execute({ - // done: function(ids) { - // ... - // } - // }); - PR.prototype.fetchTriggerIds = function() { - return this._push("fetchTriggerIds"); - }; - - // __fetchUserId()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the Purple Robot configured user id string. - // - // Example - // - // pr.fetchUserId().execute().done(function(userId) { - // console.log(userId); - // }); - PR.prototype.fetchUserId = function() { - return this._push("fetchUserId"); - }; - - // __fetchWidget()__ - PR.prototype.fetchWidget = function(id) { - throw new Error("PurpleRobot.prototype.fetchWidget not implemented yet"); - }; - - // __fireTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Fires the trigger immediately. - // - // Example - // - // pr.fireTrigger("my-trigger"); - PR.prototype.fireTrigger = function(id) { - return this._push("fireTrigger", q(id)); - }; - - // __formatDate(date)__ - PR.prototype.formatDate = function(date) { - throw new Error("PurpleRobot.prototype.formatDate not implemented yet"); - }; - - // __launchApplication(name)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Launches the specified Android application as if the user had pressed - // the icon. - // - // Example - // - // pr.launchApplication("edu.northwestern.cbits.awesome_app"); - PR.prototype.launchApplication = function(name) { - return this._push("launchApplication", q(name)); - }; - - // __launchInternalUrl(url)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Launches a URL within the Purple Robot application WebView. - // - // Example - // - // pr.launchInternalUrl("https://www.google.com"); - PR.prototype.launchInternalUrl = function(url) { - return this._push("launchInternalUrl", [q(url)].join(", ")); - }; - - // __launchUrl(url)__ - // - // `@param {string} url` The URL to request. - // `@returns {Object}` A new object instance. - // - // Opens a new browser tab and requests the URL. - // - // Example - // - // pr.launchUrl("https://www.google.com"); - PR.prototype.launchUrl = function(url) { - return this._push("launchUrl", q(url)); - }; - - // __loadLibrary(name)__ - PR.prototype.loadLibrary = function(name) { - throw new Error("PurpleRobot.prototype.loadLibrary not implemented yet"); - }; - - // __log(name, value)__ - // - // `@param {string} name` The prefix to the log message. - // `@param {*} value` The contents of the log message. - // `@returns {Object}` A new PurpleRobot instance. - // - // Logs an event to the PR event capturing service as well as the Android log. - // - // Example - // - // pr.log("zing", { wing: "ding" }); - PR.prototype.log = function(name, value) { - return this._push("log", q(name) + ", " + JSON.stringify(value)); - }; - - // __models()__ - PR.prototype.models = function() { - throw new Error("PurpleRobot.prototype.models not implemented yet"); - }; - - // __now()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Calculates a string representing the current date. - // - // Example - // - // pr.now().execute({ - // done: function(dateStr) { - // ... - // } - // }); - PR.prototype.now = function() { - return this._push("now"); - }; - - // __packageForApplicationName(applicationName)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the package name string for the application. - // - // Example - // - // pr.packageForApplicationName("edu.northwestern.cbits.purple_robot_manager").execute({ - // done: function(package) { - // ... - // } - // }); - PR.prototype.packageForApplicationName = function(applicationName) { - return this._push("packageForApplicationName", [q(applicationName)].join(", ")); - }; - - // __parseDate(dateString)__ - PR.prototype.parseDate = function(dateString) { - throw new Error("PurpleRobot.prototype.parseDate not implemented yet"); - }; - - // __persistEncryptedString(key, value, namespace)__ - // __persistEncryptedString(key, value)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Stores the *value* within the *namespace*, identified by the *key*. - // - // Examples - // - // pr.persistEncryptedString("foo", "bar", "app Q"); - // pr.persistEncryptedString("foo", "bar"); - PR.prototype.persistEncryptedString = function(key, value, namespace) { - if (typeof namespace === "undefined") { - return this._push("persistEncryptedString", q(key) + ", " + q(value)); - } else { - return this._push("persistEncryptedString", q(namespace) + ", " + q(key) + ", " + q(value)); - } - }; - - // __playDefaultTone()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Plays a default Android notification sound. - // - // Example - // - // pr.playDefaultTone(); - PR.prototype.playDefaultTone = function() { - return this._push("playDefaultTone"); - }; - - // __playTone(tone)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Plays an existing notification sound on an Android phone. - // - // Example - // - // pr.playTone("Hojus"); - PR.prototype.playTone = function(tone) { - return this._push("playTone", q(tone)); - }; - - // __predictions()__ - PR.prototype.predictions = function() { - throw new Error("PurpleRobot.prototype.predictions not implemented yet"); - }; - - // __readings()__ - PR.prototype.readings = function() { - throw new Error("PurpleRobot.prototype.readings not implemented yet"); - }; - - // __readUrl(url)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Attempts to GET a URL and return the body as a string. - // - // Example - // - // pr.readUrl("http://www.northwestern.edu"); - PR.prototype.readUrl = function(url) { - return this._push("readUrl", q(url)); - }; - - // __resetTrigger(id)__ - // - // `@param {string} id` The trigger ID. - // - // Resets the trigger. __Note: the default implementation of this method in - // PurpleRobot does nothing.__ - // - // Example - // - // pr.resetTrigger("my-trigger"); - PR.prototype.resetTrigger = function(id) { - return this._push("resetTrigger", q(id)); - }; - - // __runScript(script)__ - // - // `@param {Object} script` A PurpleRobot instance. - // `@returns {Object}` A new PurpleRobot instance. - // - // Runs a script immediately. - // - // Example - // - // pr.runScript(pr.emitToast("toasty")); - PR.prototype.runScript = function(script) { - return this._push("runScript", script.toJson()); - }; - - // __scheduleScript(name, minutes, script)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Schedules a script to run a specified number of minutes in the future - // (calculated from when this script is evaluated). - // - // Example - // - // pr.scheduleScript("fancy script", 5, pr.playDefaultTone()); - PR.prototype.scheduleScript = function(name, minutes, script) { - var timestampStr = "(function() { var now = new Date(); var scheduled = new Date(now.getTime() + " + minutes + " * 60000); var pad = function(n) { return n < 10 ? '0' + n : n; }; return '' + scheduled.getFullYear() + pad(scheduled.getMonth() + 1) + pad(scheduled.getDate()) + 'T' + pad(scheduled.getHours()) + pad(scheduled.getMinutes()) + pad(scheduled.getSeconds()); })()"; - - return this._push("scheduleScript", q(name) + ", " + timestampStr + ", " + script.toJson()); - }; - - // __setUserId(value)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Sets the Purple Robot user id string. - // - // Example - // - // pr.setUserId("Bobbie"); - PR.prototype.setUserId = function(value) { - return this._push("setUserId", q(value)); - }; - - // __showApplicationLaunchNotification(options)__ - PR.prototype.showApplicationLaunchNotification = function(options) { - throw new Error("PurpleRobot.prototype.showApplicationLaunchNotification not implemented yet"); - }; - - // __showNativeDialog(options)__ - // - // `@param {Object} options` Parameterized options for the dialog, including: - // `{string} title` the dialog title, `{string} message` the body text, - // `{string} buttonLabelA` the first button label, `{Object} scriptA` a - // PurpleRobot instance to be run when button A is pressed, `{string} - // buttonLabelB` the second button label, `{Object} scriptB` a PurpleRobot - // instance to be run when button B is pressed, `{string} tag (optional)` an - // id to be associated with the dialog, `{number} priority` an importance - // associated with the dialog that informs stacking where higher means more - // important. - // `@returns {Object}` A new PurpleRobot instance. - // - // Opens an Android dialog with two buttons, *A* and *B*, and associates - // scripts to be run when each is pressed. - // - // Example - // - // pr.showNativeDialog({ - // title: "My Dialog", - // message: "What say you?", - // buttonLabelA: "cheers", - // scriptA: pr.emitToast("cheers!"), - // buttonLabelB: "boo", - // scriptB: pr.emitToast("boo!"), - // tag: "my-dialog", - // priority: 3 - // }); - PR.prototype.showNativeDialog = function(options) { - var tag = options.tag || null; - var priority = options.priority || 0; - - return this._push("showNativeDialog", [q(options.title), - q(options.message), q(options.buttonLabelA), - q(options.buttonLabelB), options.scriptA.toJson(), - options.scriptB.toJson(), JSON.stringify(tag), priority].join(", ")); - }; - - // __showScriptNotification(options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds a notification to the the tray and atttaches a script to be run when - // it is pressed. - // - // Example - // - // pr.showScriptNotification({ - // title: "My app", - // message: "Press here", - // isPersistent: true, - // isSticky: false, - // script: pr.emitToast("You pressed it") - // }); - PR.prototype.showScriptNotification = function(options) { - options = options || {}; - - return this._push("showScriptNotification", [q(options.title), - q(options.message), options.isPersistent, options.isSticky, - options.script.toJson()].join(", ")); - }; - - // __updateConfig(options)__ - // - // `@param {Object} options` The options to configure. Included: - // `config_data_server_uri` - // `config_enable_data_server` - // `config_feature_weather_underground_enabled` - // `config_http_liberal_ssl` - // `config_last_weather_underground_check` - // `config_probe_running_software_enabled` - // `config_probe_running_software_frequency` - // `config_probes_enabled` - // `config_restrict_data_wifi` - // `@returns {Object}` A new PurpleRobot instance. - // - // Example - // - // pr.updateConfig({ - // config_enable_data_server: true, - // config_restrict_data_wifi: false - // }); - PR.prototype.updateConfig = function(options) { - return this._push("updateConfig", [JSON.stringify(options)].join(", ")); - }; - - // __updateTrigger(options)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Adds or updates a Purple Robot trigger to be run at a time and with a - // recurrence rule. - // - // Example - // - // The following would emit a toast daily at the same time: - // - // pr.updateTrigger({ - // script: pr.emitToast("butter"), - // startAt: "20140505T020304", - // endAt: "20140505T020404" - // }); - PR.prototype.updateTrigger = function(options) { - options = options || {}; - - var timestamp = (new Date()).getTime(); - var triggerId = options.triggerId || ("TRIGGER-" + timestamp); - - function formatDate (date){ - function formatYear(date){ - return date.getFullYear(); - } - - function formatMonth(date){ - return ("0" + parseInt(1+date.getMonth())).slice(-2); - } - - function formatDays(date){ - return ("0" + parseInt(date.getDate())).slice(-2); - } - - function formatHours(date){ - return ("0" + date.getHours()).slice(-2); - } - - function formatMinutes(date){ - return ("0" + date.getMinutes()).slice(-2); - } - - function formatSeconds (date){ - return ("0" + date.getSeconds()).slice(-2); - } - - return formatYear(date) + formatMonth(date) + formatDays(date) + "T" + - formatHours(date) + formatMinutes(date) + formatSeconds(date); - - } - - var triggerJson = JSON.stringify({ - type: options.type || "datetime", - name: triggerId, - identifier: triggerId, - action: options.script.toString(), - datetime_start: formatDate(options.startAt), - datetime_end: formatDate(options.endAt), - datetime_repeat: options.repeatRule || "FREQ=DAILY;INTERVAL=1", - datetime_random: (options.random === true) || false, - fire_on_boot: true && (options.fire_on_boot !== false) - }); - - return this._push("updateTrigger", q(triggerId) + ", " + triggerJson); - }; - - // __updateWidget(parameters)__ - PR.prototype.updateWidget = function(parameters) { - throw new Error("PurpleRobot.prototype.updateWidget not implemented yet"); - }; - - // __version()__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Returns the current version string for Purple Robot. - // - // Example - // - // pr.version(); - PR.prototype.version = function() { - return this._push("version"); - }; - - // __vibrate(pattern)__ - // - // `@returns {Object}` A new PurpleRobot instance. - // - // Vibrates the phone with a preset pattern. - // - // Examples - // - // pr.vibrate("buzz"); - // pr.vibrate("blip"); - // pr.vibrate("sos"); - PR.prototype.vibrate = function(pattern) { - pattern = pattern || "buzz"; - - return this._push("vibrate", q(pattern)); - }; - - // __widgets()__ - PR.prototype.widgets = function() { - throw new Error("PurpleRobot.prototype.widgets not implemented yet"); - }; - - // ## More complex examples - // - // Example of nesting - // - // var playTone = pr.playDefaultTone(); - // var toast = pr.emitToast("sorry"); - // var dialog1 = pr.showNativeDialog( - // "dialog 1", "are you happy?", "Yes", "No", playTone, toast - // ); - // pr.scheduleScript("dialog 1", 10, "minutes", dialog1) - // .execute(); - // - // Example of chaining - // - // pr.playDefaultTone().emitToast("hey there").execute(); - - root.PurpleRobot = PurpleRobot; -}.call(this)); diff --git a/platforms/browser/www/lib/PurpleRobotClient/purple-robot.min.js b/platforms/browser/www/lib/PurpleRobotClient/purple-robot.min.js deleted file mode 100644 index e8cd1496..00000000 --- a/platforms/browser/www/lib/PurpleRobotClient/purple-robot.min.js +++ /dev/null @@ -1,15 +0,0 @@ -(function(){function b(a){a=a||{};this.className="PurpleRobot";this._serverUrl=a.serverUrl||"http://localhost:12345/json/submit";this._script=a.script||""}function e(a,b,c){this.methodName=a;this.argument=b;this.expectedArgument=c;this.message=' received an unexpected argument "';this.toString=function(){return["PurpleRobot.",this.methodName,this.message,this.argument,'" expected: ',this.expectedArgument].join("")}}function c(a){return"'"+a+"'"}var f=window;b.apiVersion="1.5.10.0";b.setEnvironment= -function(a){if("production"!==a&&"debug"!==a&&"web"!==a)throw new e("setEnvironment",a,'["production", "debug", "web"]');this.env=a;return this};b.prototype._push=function(a,c){var d=["PurpleRobot.",a,"(",c,");"].join("");return new b({serverUrl:this._serverUrl,script:[this._script,d].join(" ").trim()})};b.prototype._stringify=function(a){return null!==a&&"object"===typeof a&&a.className===this.className?a.toStringExpression():JSON.stringify(a)};b.prototype.toString=function(){return this._script}; -b.prototype.toStringExpression=function(){return"(function() { return "+this._script+" })()"};b.prototype.toJson=function(){return JSON.stringify(this.toString())};b.prototype.execute=function(a){var c=JSON.stringify({command:"execute_script",script:this.toString()});if("web"!==b.env){var d=new XMLHttpRequest;d.onreadystatechange=function(){a&&d.readyState===XMLHttpRequest.DONE&&(null===d.response?a.fail&&a.fail():a.done&&a.done(JSON.parse(d.response).payload))};d.open("POST",this._serverUrl,!0); -d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.send("json="+c)}else console.log('PurpleRobot POSTing to "'+this._serverUrl+'": '+c)};b.prototype.save=function(){localStorage.prQueue=localStorage.prQueue||"";localStorage.prQueue+=this.toString();return this};b.prototype.restore=function(){localStorage.prQueue=localStorage.prQueue||"";this._script=localStorage.prQueue;return this};b.prototype.destroy=function(){delete localStorage.prQueue;return this};b.prototype.isEqual=function(a, -c){var d=this._stringify(a)+" == "+this._stringify(c);return new b({serverUrl:this._serverUrl,script:[this._script,d].join(" ").trim()})};b.prototype.ifThenElse=function(a,c,d){return new b({serverUrl:this._serverUrl,script:[this._script,"if ("+a.toString()+") { "+c.toString()+" } else { "+d.toString()+" }"].join(" ").trim()})};b.prototype.doNothing=function(){return new b({serverUrl:this._serverUrl,script:this._script})};b.prototype.addNamespace=function(a){return this._push("addNamespace",""+c(a))}; -b.prototype.broadcastIntent=function(a,b){return this._push("broadcastIntent",[c(a),JSON.stringify(b||null)].join(", "))};b.prototype.cancelScriptNotification=function(){return this._push("cancelScriptNotification")};b.prototype.clearNativeDialogs=function(a){return a?this._push("clearNativeDialogs",c(a)):this._push("clearNativeDialogs")};b.prototype.clearTriggers=function(){return this._push("clearTriggers")};b.prototype.dateFromTimestamp=function(a){return this._push("dateFromTimestamp",a)};b.prototype.deleteTrigger= -function(a){return this._push("deleteTrigger",c(a))};b.prototype.disableTrigger=function(a){return this._push("disableTrigger",c(a))};b.prototype.emitReading=function(a,b){return this._push("emitReading",c(a)+", "+JSON.stringify(b))};b.prototype.emitToast=function(a,b){b="boolean"===typeof b?b:!0;return this._push("emitToast",c(a)+", "+b)};b.prototype.enableTrigger=function(a){return this._push("enableTrigger",c(a))};b.prototype.fetchConfig=function(){return this._push("fetchConfig")};b.prototype.fetchEncryptedString= -function(a,b){return"undefined"===typeof b?this._push("fetchEncryptedString",c(a)):this._push("fetchEncryptedString",c(b)+", "+c(a))};b.prototype.fetchNamespace=function(a){return this._push("fetchNamespace",""+c(a))};b.prototype.fetchNamespaces=function(){return this._push("fetchNamespaces")};b.prototype.fetchTrigger=function(a){return this._push("fetchTrigger",""+c(a))};b.prototype.fetchTriggerIds=function(){return this._push("fetchTriggerIds")};b.prototype.fetchUserId=function(){return this._push("fetchUserId")}; -b.prototype.fetchWidget=function(a){throw Error("PurpleRobot.prototype.fetchWidget not implemented yet");};b.prototype.fireTrigger=function(a){return this._push("fireTrigger",c(a))};b.prototype.formatDate=function(a){throw Error("PurpleRobot.prototype.formatDate not implemented yet");};b.prototype.launchApplication=function(a){return this._push("launchApplication",c(a))};b.prototype.launchInternalUrl=function(a){return this._push("launchInternalUrl",""+c(a))};b.prototype.launchUrl=function(a){return this._push("launchUrl", -c(a))};b.prototype.loadLibrary=function(a){throw Error("PurpleRobot.prototype.loadLibrary not implemented yet");};b.prototype.log=function(a,b){return this._push("log",c(a)+", "+JSON.stringify(b))};b.prototype.models=function(){throw Error("PurpleRobot.prototype.models not implemented yet");};b.prototype.now=function(){return this._push("now")};b.prototype.packageForApplicationName=function(a){return this._push("packageForApplicationName",""+c(a))};b.prototype.parseDate=function(a){throw Error("PurpleRobot.prototype.parseDate not implemented yet"); -};b.prototype.persistEncryptedString=function(a,b,d){return"undefined"===typeof d?this._push("persistEncryptedString",c(a)+", "+c(b)):this._push("persistEncryptedString",c(d)+", "+c(a)+", "+c(b))};b.prototype.playDefaultTone=function(){return this._push("playDefaultTone")};b.prototype.playTone=function(a){return this._push("playTone",c(a))};b.prototype.predictions=function(){throw Error("PurpleRobot.prototype.predictions not implemented yet");};b.prototype.readings=function(){throw Error("PurpleRobot.prototype.readings not implemented yet"); -};b.prototype.readUrl=function(a){return this._push("readUrl",c(a))};b.prototype.resetTrigger=function(a){return this._push("resetTrigger",c(a))};b.prototype.runScript=function(a){return this._push("runScript",a.toJson())};b.prototype.scheduleScript=function(a,b,d){b="(function() { var now = new Date(); var scheduled = new Date(now.getTime() + "+b+" * 60000); var pad = function(n) { return n < 10 ? '0' + n : n; }; return '' + scheduled.getFullYear() + pad(scheduled.getMonth() + 1) + pad(scheduled.getDate()) + 'T' + pad(scheduled.getHours()) + pad(scheduled.getMinutes()) + pad(scheduled.getSeconds()); })()"; -return this._push("scheduleScript",c(a)+", "+b+", "+d.toJson())};b.prototype.setUserId=function(a){return this._push("setUserId",c(a))};b.prototype.showApplicationLaunchNotification=function(a){throw Error("PurpleRobot.prototype.showApplicationLaunchNotification not implemented yet");};b.prototype.showNativeDialog=function(a){var b=a.tag||null,d=a.priority||0;return this._push("showNativeDialog",[c(a.title),c(a.message),c(a.buttonLabelA),c(a.buttonLabelB),a.scriptA.toJson(),a.scriptB.toJson(),JSON.stringify(b), -d].join(", "))};b.prototype.showScriptNotification=function(a){a=a||{};return this._push("showScriptNotification",[c(a.title),c(a.message),a.isPersistent,a.isSticky,a.script.toJson()].join(", "))};b.prototype.updateConfig=function(a){return this._push("updateConfig",""+JSON.stringify(a))};b.prototype.updateTrigger=function(a){a=a||{};var b=(new Date).getTime(),b=a.triggerId||"TRIGGER-"+b;a=JSON.stringify({type:a.type||"datetime",name:b,identifier:b,action:a.script.toString(),datetime_start:a.startAt, -datetime_end:a.endAt,datetime_repeat:a.repeatRule||"FREQ=DAILY;INTERVAL=1"});return this._push("updateTrigger",c(b)+", "+a)};b.prototype.updateWidget=function(a){throw Error("PurpleRobot.prototype.updateWidget not implemented yet");};b.prototype.version=function(){return this._push("version")};b.prototype.vibrate=function(a){return this._push("vibrate",c(a||"buzz"))};b.prototype.widgets=function(){throw Error("PurpleRobot.prototype.widgets not implemented yet");};f.PurpleRobot=b}).call(this); diff --git a/platforms/browser/www/lib/angular-animate/.bower.json b/platforms/browser/www/lib/angular-animate/.bower.json deleted file mode 100644 index 19570b38..00000000 --- a/platforms/browser/www/lib/angular-animate/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-animate", - "version": "1.2.16", - "main": "./angular-animate.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-animate", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "4eccd8ec8356a33bf3a98958d7a73b71290d3985" - }, - "_source": "git://github.com/angular/bower-angular-animate.git", - "_target": "1.2.16", - "_originalSource": "angular-animate" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-animate/README.md b/platforms/browser/www/lib/angular-animate/README.md deleted file mode 100644 index de4c61b8..00000000 --- a/platforms/browser/www/lib/angular-animate/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-animate - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-animate -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-animate/angular-animate.js"></script> -``` - -And add `ngAnimate` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngAnimate']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-animate/angular-animate.js b/platforms/browser/www/lib/angular-animate/angular-animate.js deleted file mode 100644 index 9a0af80f..00000000 --- a/platforms/browser/www/lib/angular-animate/angular-animate.js +++ /dev/null @@ -1,1616 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/* jshint maxlen: false */ - -/** - * @ngdoc module - * @name ngAnimate - * @description - * - * # ngAnimate - * - * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives. - * - * - * <div doc-module-components="ngAnimate"></div> - * - * # Usage - * - * To see animations in action, all that is required is to define the appropriate CSS classes - * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are: - * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation - * by using the `$animate` service. - * - * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: - * - * | Directive | Supported Animations | - * |---------------------------------------------------------- |----------------------------------------------------| - * | {@link ng.directive:ngRepeat#usage_animations ngRepeat} | enter, leave and move | - * | {@link ngRoute.directive:ngView#usage_animations ngView} | enter and leave | - * | {@link ng.directive:ngInclude#usage_animations ngInclude} | enter and leave | - * | {@link ng.directive:ngSwitch#usage_animations ngSwitch} | enter and leave | - * | {@link ng.directive:ngIf#usage_animations ngIf} | enter and leave | - * | {@link ng.directive:ngClass#usage_animations ngClass} | add and remove | - * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide} | add and remove (the ng-hide class value) | - * | {@link ng.directive:form#usage_animations form} | add and remove (dirty, pristine, valid, invalid & all other validations) | - * | {@link ng.directive:ngModel#usage_animations ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) | - * - * You can find out more information about animations upon visiting each directive page. - * - * Below is an example of how to apply animations to a directive that supports animation hooks: - * - * ```html - * <style type="text/css"> - * .slide.ng-enter, .slide.ng-leave { - * -webkit-transition:0.5s linear all; - * transition:0.5s linear all; - * } - * - * .slide.ng-enter { } /&#42; starting animations for enter &#42;/ - * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/ - * .slide.ng-leave { } /&#42; starting animations for leave &#42;/ - * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/ - * </style> - * - * <!-- - * the animate service will automatically add .ng-enter and .ng-leave to the element - * to trigger the CSS transition/animations - * --> - * <ANY class="slide" ng-include="..."></ANY> - * ``` - * - * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's - * animation has completed. - * - * <h2>CSS-defined Animations</h2> - * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes - * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported - * and can be used to play along with this naming structure. - * - * The following code below demonstrates how to perform animations using **CSS transitions** with Angular: - * - * ```html - * <style type="text/css"> - * /&#42; - * The animate class is apart of the element and the ng-enter class - * is attached to the element once the enter animation event is triggered - * &#42;/ - * .reveal-animation.ng-enter { - * -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/ - * transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/ - * - * /&#42; The animation preparation code &#42;/ - * opacity: 0; - * } - * - * /&#42; - * Keep in mind that you want to combine both CSS - * classes together to avoid any CSS-specificity - * conflicts - * &#42;/ - * .reveal-animation.ng-enter.ng-enter-active { - * /&#42; The animation code itself &#42;/ - * opacity: 1; - * } - * </style> - * - * <div class="view-container"> - * <div ng-view class="reveal-animation"></div> - * </div> - * ``` - * - * The following code below demonstrates how to perform animations using **CSS animations** with Angular: - * - * ```html - * <style type="text/css"> - * .reveal-animation.ng-enter { - * -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/ - * animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/ - * } - * @-webkit-keyframes enter_sequence { - * from { opacity:0; } - * to { opacity:1; } - * } - * @keyframes enter_sequence { - * from { opacity:0; } - * to { opacity:1; } - * } - * </style> - * - * <div class="view-container"> - * <div ng-view class="reveal-animation"></div> - * </div> - * ``` - * - * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing. - * - * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add - * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically - * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be - * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end - * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element - * has no CSS transition/animation classes applied to it. - * - * <h3>CSS Staggering Animations</h3> - * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a - * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be - * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for - * the animation. The style property expected within the stagger class can either be a **transition-delay** or an - * **animation-delay** property (or both if your animation contains both transitions and keyframe animations). - * - * ```css - * .my-animation.ng-enter { - * /&#42; standard transition code &#42;/ - * -webkit-transition: 1s linear all; - * transition: 1s linear all; - * opacity:0; - * } - * .my-animation.ng-enter-stagger { - * /&#42; this will have a 100ms delay between each successive leave animation &#42;/ - * -webkit-transition-delay: 0.1s; - * transition-delay: 0.1s; - * - * /&#42; in case the stagger doesn't work then these two values - * must be set to 0 to avoid an accidental CSS inheritance &#42;/ - * -webkit-transition-duration: 0s; - * transition-duration: 0s; - * } - * .my-animation.ng-enter.ng-enter-active { - * /&#42; standard transition styles &#42;/ - * opacity:1; - * } - * ``` - * - * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations - * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this - * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation - * will also be reset if more than 10ms has passed after the last animation has been fired. - * - * The following code will issue the **ng-leave-stagger** event on the element provided: - * - * ```js - * var kids = parent.children(); - * - * $animate.leave(kids[0]); //stagger index=0 - * $animate.leave(kids[1]); //stagger index=1 - * $animate.leave(kids[2]); //stagger index=2 - * $animate.leave(kids[3]); //stagger index=3 - * $animate.leave(kids[4]); //stagger index=4 - * - * $timeout(function() { - * //stagger has reset itself - * $animate.leave(kids[5]); //stagger index=0 - * $animate.leave(kids[6]); //stagger index=1 - * }, 100, false); - * ``` - * - * Stagger animations are currently only supported within CSS-defined animations. - * - * <h2>JavaScript-defined Animations</h2> - * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not - * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module. - * - * ```js - * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application. - * var ngModule = angular.module('YourApp', ['ngAnimate']); - * ngModule.animation('.my-crazy-animation', function() { - * return { - * enter: function(element, done) { - * //run the animation here and call done when the animation is complete - * return function(cancelled) { - * //this (optional) function will be called when the animation - * //completes or when the animation is cancelled (the cancelled - * //flag will be set to true if cancelled). - * }; - * }, - * leave: function(element, done) { }, - * move: function(element, done) { }, - * - * //animation that can be triggered before the class is added - * beforeAddClass: function(element, className, done) { }, - * - * //animation that can be triggered after the class is added - * addClass: function(element, className, done) { }, - * - * //animation that can be triggered before the class is removed - * beforeRemoveClass: function(element, className, done) { }, - * - * //animation that can be triggered after the class is removed - * removeClass: function(element, className, done) { } - * }; - * }); - * ``` - * - * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run - * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits - * the element's CSS class attribute value and then run the matching animation event function (if found). - * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will - * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported). - * - * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. - * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, - * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation - * or transition code that is defined via a stylesheet). - * - */ - -angular.module('ngAnimate', ['ng']) - - /** - * @ngdoc provider - * @name $animateProvider - * @description - * - * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module. - * When an animation is triggered, the $animate service will query the $animate service to find any animations that match - * the provided name value. - * - * Requires the {@link ngAnimate `ngAnimate`} module to be installed. - * - * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. - * - */ - - //this private service is only used within CSS-enabled animations - //IE8 + IE9 do not support rAF natively, but that is fine since they - //also don't support transitions and keyframes which means that the code - //below will never be used by the two browsers. - .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) { - var bod = $document[0].body; - return function(fn) { - //the returned function acts as the cancellation function - return $$rAF(function() { - //the line below will force the browser to perform a repaint - //so that all the animated elements within the animation frame - //will be properly updated and drawn on screen. This is - //required to perform multi-class CSS based animations with - //Firefox. DO NOT REMOVE THIS LINE. - var a = bod.offsetWidth + 1; - fn(); - }); - }; - }]) - - .config(['$provide', '$animateProvider', function($provide, $animateProvider) { - var noop = angular.noop; - var forEach = angular.forEach; - var selectors = $animateProvider.$$selectors; - - var ELEMENT_NODE = 1; - var NG_ANIMATE_STATE = '$$ngAnimateState'; - var NG_ANIMATE_CLASS_NAME = 'ng-animate'; - var rootAnimateState = {running: true}; - - function extractElementNode(element) { - for(var i = 0; i < element.length; i++) { - var elm = element[i]; - if(elm.nodeType == ELEMENT_NODE) { - return elm; - } - } - } - - function stripCommentsFromElement(element) { - return angular.element(extractElementNode(element)); - } - - function isMatchingElement(elm1, elm2) { - return extractElementNode(elm1) == extractElementNode(elm2); - } - - $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document', - function($delegate, $injector, $sniffer, $rootElement, $$asyncCallback, $rootScope, $document) { - - var globalAnimationCounter = 0; - $rootElement.data(NG_ANIMATE_STATE, rootAnimateState); - - // disable animations during bootstrap, but once we bootstrapped, wait again - // for another digest until enabling animations. The reason why we digest twice - // is because all structural animations (enter, leave and move) all perform a - // post digest operation before animating. If we only wait for a single digest - // to pass then the structural animation would render its animation on page load. - // (which is what we're trying to avoid when the application first boots up.) - $rootScope.$$postDigest(function() { - $rootScope.$$postDigest(function() { - rootAnimateState.running = false; - }); - }); - - var classNameFilter = $animateProvider.classNameFilter(); - var isAnimatableClassName = !classNameFilter - ? function() { return true; } - : function(className) { - return classNameFilter.test(className); - }; - - function lookup(name) { - if (name) { - var matches = [], - flagMap = {}, - classes = name.substr(1).split('.'); - - //the empty string value is the default animation - //operation which performs CSS transition and keyframe - //animations sniffing. This is always included for each - //element animation procedure if the browser supports - //transitions and/or keyframe animations. The default - //animation is added to the top of the list to prevent - //any previous animations from affecting the element styling - //prior to the element being animated. - if ($sniffer.transitions || $sniffer.animations) { - matches.push($injector.get(selectors[''])); - } - - for(var i=0; i < classes.length; i++) { - var klass = classes[i], - selectorFactoryName = selectors[klass]; - if(selectorFactoryName && !flagMap[klass]) { - matches.push($injector.get(selectorFactoryName)); - flagMap[klass] = true; - } - } - return matches; - } - } - - function animationRunner(element, animationEvent, className) { - //transcluded directives may sometimes fire an animation using only comment nodes - //best to catch this early on to prevent any animation operations from occurring - var node = element[0]; - if(!node) { - return; - } - - var isSetClassOperation = animationEvent == 'setClass'; - var isClassBased = isSetClassOperation || - animationEvent == 'addClass' || - animationEvent == 'removeClass'; - - var classNameAdd, classNameRemove; - if(angular.isArray(className)) { - classNameAdd = className[0]; - classNameRemove = className[1]; - className = classNameAdd + ' ' + classNameRemove; - } - - var currentClassName = element.attr('class'); - var classes = currentClassName + ' ' + className; - if(!isAnimatableClassName(classes)) { - return; - } - - var beforeComplete = noop, - beforeCancel = [], - before = [], - afterComplete = noop, - afterCancel = [], - after = []; - - var animationLookup = (' ' + classes).replace(/\s+/g,'.'); - forEach(lookup(animationLookup), function(animationFactory) { - var created = registerAnimation(animationFactory, animationEvent); - if(!created && isSetClassOperation) { - registerAnimation(animationFactory, 'addClass'); - registerAnimation(animationFactory, 'removeClass'); - } - }); - - function registerAnimation(animationFactory, event) { - var afterFn = animationFactory[event]; - var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)]; - if(afterFn || beforeFn) { - if(event == 'leave') { - beforeFn = afterFn; - //when set as null then animation knows to skip this phase - afterFn = null; - } - after.push({ - event : event, fn : afterFn - }); - before.push({ - event : event, fn : beforeFn - }); - return true; - } - } - - function run(fns, cancellations, allCompleteFn) { - var animations = []; - forEach(fns, function(animation) { - animation.fn && animations.push(animation); - }); - - var count = 0; - function afterAnimationComplete(index) { - if(cancellations) { - (cancellations[index] || noop)(); - if(++count < animations.length) return; - cancellations = null; - } - allCompleteFn(); - } - - //The code below adds directly to the array in order to work with - //both sync and async animations. Sync animations are when the done() - //operation is called right away. DO NOT REFACTOR! - forEach(animations, function(animation, index) { - var progress = function() { - afterAnimationComplete(index); - }; - switch(animation.event) { - case 'setClass': - cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress)); - break; - case 'addClass': - cancellations.push(animation.fn(element, classNameAdd || className, progress)); - break; - case 'removeClass': - cancellations.push(animation.fn(element, classNameRemove || className, progress)); - break; - default: - cancellations.push(animation.fn(element, progress)); - break; - } - }); - - if(cancellations && cancellations.length === 0) { - allCompleteFn(); - } - } - - return { - node : node, - event : animationEvent, - className : className, - isClassBased : isClassBased, - isSetClassOperation : isSetClassOperation, - before : function(allCompleteFn) { - beforeComplete = allCompleteFn; - run(before, beforeCancel, function() { - beforeComplete = noop; - allCompleteFn(); - }); - }, - after : function(allCompleteFn) { - afterComplete = allCompleteFn; - run(after, afterCancel, function() { - afterComplete = noop; - allCompleteFn(); - }); - }, - cancel : function() { - if(beforeCancel) { - forEach(beforeCancel, function(cancelFn) { - (cancelFn || noop)(true); - }); - beforeComplete(true); - } - if(afterCancel) { - forEach(afterCancel, function(cancelFn) { - (cancelFn || noop)(true); - }); - afterComplete(true); - } - } - }; - } - - /** - * @ngdoc service - * @name $animate - * @function - * - * @description - * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations. - * When any of these operations are run, the $animate service - * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) - * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run. - * - * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives - * will work out of the box without any extra configuration. - * - * Requires the {@link ngAnimate `ngAnimate`} module to be installed. - * - * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. - * - */ - return { - /** - * @ngdoc method - * @name $animate#enter - * @function - * - * @description - * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once - * the animation is started, the following CSS classes will be present on the element for the duration of the animation: - * - * Below is a breakdown of each step that occurs during enter animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.enter(...) is called | class="my-animation" | - * | 2. element is inserted into the parentElement element or beside the afterElement element | class="my-animation" | - * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 4. the .ng-enter class is added to the element | class="my-animation ng-animate ng-enter" | - * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-enter" | - * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-enter" | - * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" | - * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" | - * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * @param {DOMElement} element the element that will be the focus of the enter animation - * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation - * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - enter : function(element, parentElement, afterElement, doneCallback) { - this.enabled(false, element); - $delegate.enter(element, parentElement, afterElement); - $rootScope.$$postDigest(function() { - element = stripCommentsFromElement(element); - performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#leave - * @function - * - * @description - * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once - * the animation is started, the following CSS classes will be added for the duration of the animation: - * - * Below is a breakdown of each step that occurs during leave animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.leave(...) is called | class="my-animation" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 3. the .ng-leave class is added to the element | class="my-animation ng-animate ng-leave" | - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-leave" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-leave" | - * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 9. The element is removed from the DOM | ... | - * | 10. The doneCallback() callback is fired (if provided) | ... | - * - * @param {DOMElement} element the element that will be the focus of the leave animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - leave : function(element, doneCallback) { - cancelChildAnimations(element); - this.enabled(false, element); - $rootScope.$$postDigest(function() { - performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() { - $delegate.leave(element); - }, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#move - * @function - * - * @description - * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or - * add the element directly after the afterElement element if present. Then the move animation will be run. Once - * the animation is started, the following CSS classes will be added for the duration of the animation: - * - * Below is a breakdown of each step that occurs during move animation: - * - * | Animation Step | What the element class attribute looks like | - * |----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.move(...) is called | class="my-animation" | - * | 2. element is moved into the parentElement element or beside the afterElement element | class="my-animation" | - * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 4. the .ng-move class is added to the element | class="my-animation ng-animate ng-move" | - * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-move" | - * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-move" | - * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" | - * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" | - * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * @param {DOMElement} element the element that will be the focus of the move animation - * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation - * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - move : function(element, parentElement, afterElement, doneCallback) { - cancelChildAnimations(element); - this.enabled(false, element); - $delegate.move(element, parentElement, afterElement); - $rootScope.$$postDigest(function() { - element = stripCommentsFromElement(element); - performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback); - }); - }, - - /** - * @ngdoc method - * @name $animate#addClass - * - * @description - * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. - * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide - * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions - * or keyframes are defined on the -add or base CSS class). - * - * Below is a breakdown of each step that occurs during addClass animation: - * - * | Animation Step | What the element class attribute looks like | - * |------------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.addClass(element, 'super') is called | class="my-animation" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" | - * | 3. the .super-add class are added to the element | class="my-animation ng-animate super-add" | - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-add" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate super-add" | - * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super super-add super-add-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation super super-add super-add-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation super" | - * | 9. The super class is kept on the element | class="my-animation super" | - * | 10. The doneCallback() callback is fired (if provided) | class="my-animation super" | - * - * @param {DOMElement} element the element that will be animated - * @param {string} className the CSS class that will be added to the element and then animated - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - addClass : function(element, className, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('addClass', className, element, null, null, function() { - $delegate.addClass(element, className); - }, doneCallback); - }, - - /** - * @ngdoc method - * @name $animate#removeClass - * - * @description - * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value - * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in - * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if - * no CSS transitions or keyframes are defined on the -remove or base CSS classes). - * - * Below is a breakdown of each step that occurs during removeClass animation: - * - * | Animation Step | What the element class attribute looks like | - * |-----------------------------------------------------------------------------------------------|---------------------------------------------| - * | 1. $animate.removeClass(element, 'super') is called | class="my-animation super" | - * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation super ng-animate" | - * | 3. the .super-remove class are added to the element | class="my-animation super ng-animate super-remove"| - * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation super ng-animate super-remove" | - * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation super ng-animate super-remove" | - * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" | - * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" | - * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" | - * | 9. The doneCallback() callback is fired (if provided) | class="my-animation" | - * - * - * @param {DOMElement} element the element that will be animated - * @param {string} className the CSS class that will be animated and then removed from the element - * @param {function()=} doneCallback the callback function that will be called once the animation is complete - */ - removeClass : function(element, className, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('removeClass', className, element, null, null, function() { - $delegate.removeClass(element, className); - }, doneCallback); - }, - - /** - * - * @ngdoc function - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, doneCallback) { - element = stripCommentsFromElement(element); - performAnimation('setClass', [add, remove], element, null, null, function() { - $delegate.setClass(element, add, remove); - }, doneCallback); - }, - - /** - * @ngdoc method - * @name $animate#enabled - * @function - * - * @param {boolean=} value If provided then set the animation on or off. - * @param {DOMElement=} element If provided then the element will be used to represent the enable/disable operation - * @return {boolean} Current animation state. - * - * @description - * Globally enables/disables animations. - * - */ - enabled : function(value, element) { - switch(arguments.length) { - case 2: - if(value) { - cleanup(element); - } else { - var data = element.data(NG_ANIMATE_STATE) || {}; - data.disabled = true; - element.data(NG_ANIMATE_STATE, data); - } - break; - - case 1: - rootAnimateState.disabled = !value; - break; - - default: - value = !rootAnimateState.disabled; - break; - } - return !!value; - } - }; - - /* - all animations call this shared animation triggering function internally. - The animationEvent variable refers to the JavaScript animation event that will be triggered - and the className value is the name of the animation that will be applied within the - CSS code. Element, parentElement and afterElement are provided DOM elements for the animation - and the onComplete callback will be fired once the animation is fully complete. - */ - function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) { - - var runner = animationRunner(element, animationEvent, className); - if(!runner) { - fireDOMOperation(); - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - closeAnimation(); - return; - } - - className = runner.className; - var elementEvents = angular.element._data(runner.node); - elementEvents = elementEvents && elementEvents.events; - - if (!parentElement) { - parentElement = afterElement ? afterElement.parent() : element.parent(); - } - - var ngAnimateState = element.data(NG_ANIMATE_STATE) || {}; - var runningAnimations = ngAnimateState.active || {}; - var totalActiveAnimations = ngAnimateState.totalActive || 0; - var lastAnimation = ngAnimateState.last; - - //only allow animations if the currently running animation is not structural - //or if there is no animation running at all - var skipAnimations = runner.isClassBased ? - ngAnimateState.disabled || (lastAnimation && !lastAnimation.isClassBased) : - false; - - //skip the animation if animations are disabled, a parent is already being animated, - //the element is not currently attached to the document body or then completely close - //the animation if any matching animations are not found at all. - //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found. - if (skipAnimations || animationsDisabled(element, parentElement)) { - fireDOMOperation(); - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - closeAnimation(); - return; - } - - var skipAnimation = false; - if(totalActiveAnimations > 0) { - var animationsToCancel = []; - if(!runner.isClassBased) { - if(animationEvent == 'leave' && runningAnimations['ng-leave']) { - skipAnimation = true; - } else { - //cancel all animations when a structural animation takes place - for(var klass in runningAnimations) { - animationsToCancel.push(runningAnimations[klass]); - cleanup(element, klass); - } - runningAnimations = {}; - totalActiveAnimations = 0; - } - } else if(lastAnimation.event == 'setClass') { - animationsToCancel.push(lastAnimation); - cleanup(element, className); - } - else if(runningAnimations[className]) { - var current = runningAnimations[className]; - if(current.event == animationEvent) { - skipAnimation = true; - } else { - animationsToCancel.push(current); - cleanup(element, className); - } - } - - if(animationsToCancel.length > 0) { - forEach(animationsToCancel, function(operation) { - operation.cancel(); - }); - } - } - - if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) { - skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR - } - - if(skipAnimation) { - fireBeforeCallbackAsync(); - fireAfterCallbackAsync(); - fireDoneCallbackAsync(); - return; - } - - if(animationEvent == 'leave') { - //there's no need to ever remove the listener since the element - //will be removed (destroyed) after the leave animation ends or - //is cancelled midway - element.one('$destroy', function(e) { - var element = angular.element(this); - var state = element.data(NG_ANIMATE_STATE); - if(state) { - var activeLeaveAnimation = state.active['ng-leave']; - if(activeLeaveAnimation) { - activeLeaveAnimation.cancel(); - cleanup(element, 'ng-leave'); - } - } - }); - } - - //the ng-animate class does nothing, but it's here to allow for - //parent animations to find and cancel child animations when needed - element.addClass(NG_ANIMATE_CLASS_NAME); - - var localAnimationCount = globalAnimationCounter++; - totalActiveAnimations++; - runningAnimations[className] = runner; - - element.data(NG_ANIMATE_STATE, { - last : runner, - active : runningAnimations, - index : localAnimationCount, - totalActive : totalActiveAnimations - }); - - //first we run the before animations and when all of those are complete - //then we perform the DOM operation and run the next set of animations - fireBeforeCallbackAsync(); - runner.before(function(cancelled) { - var data = element.data(NG_ANIMATE_STATE); - cancelled = cancelled || - !data || !data.active[className] || - (runner.isClassBased && data.active[className].event != animationEvent); - - fireDOMOperation(); - if(cancelled === true) { - closeAnimation(); - } else { - fireAfterCallbackAsync(); - runner.after(closeAnimation); - } - }); - - function fireDOMCallback(animationPhase) { - var eventName = '$animate:' + animationPhase; - if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) { - $$asyncCallback(function() { - element.triggerHandler(eventName, { - event : animationEvent, - className : className - }); - }); - } - } - - function fireBeforeCallbackAsync() { - fireDOMCallback('before'); - } - - function fireAfterCallbackAsync() { - fireDOMCallback('after'); - } - - function fireDoneCallbackAsync() { - fireDOMCallback('close'); - if(doneCallback) { - $$asyncCallback(function() { - doneCallback(); - }); - } - } - - //it is less complicated to use a flag than managing and canceling - //timeouts containing multiple callbacks. - function fireDOMOperation() { - if(!fireDOMOperation.hasBeenRun) { - fireDOMOperation.hasBeenRun = true; - domOperation(); - } - } - - function closeAnimation() { - if(!closeAnimation.hasBeenRun) { - closeAnimation.hasBeenRun = true; - var data = element.data(NG_ANIMATE_STATE); - if(data) { - /* only structural animations wait for reflow before removing an - animation, but class-based animations don't. An example of this - failing would be when a parent HTML tag has a ng-class attribute - causing ALL directives below to skip animations during the digest */ - if(runner && runner.isClassBased) { - cleanup(element, className); - } else { - $$asyncCallback(function() { - var data = element.data(NG_ANIMATE_STATE) || {}; - if(localAnimationCount == data.index) { - cleanup(element, className, animationEvent); - } - }); - element.data(NG_ANIMATE_STATE, data); - } - } - fireDoneCallbackAsync(); - } - } - } - - function cancelChildAnimations(element) { - var node = extractElementNode(element); - if (node) { - var nodes = angular.isFunction(node.getElementsByClassName) ? - node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) : - node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME); - forEach(nodes, function(element) { - element = angular.element(element); - var data = element.data(NG_ANIMATE_STATE); - if(data && data.active) { - forEach(data.active, function(runner) { - runner.cancel(); - }); - } - }); - } - } - - function cleanup(element, className) { - if(isMatchingElement(element, $rootElement)) { - if(!rootAnimateState.disabled) { - rootAnimateState.running = false; - rootAnimateState.structural = false; - } - } else if(className) { - var data = element.data(NG_ANIMATE_STATE) || {}; - - var removeAnimations = className === true; - if(!removeAnimations && data.active && data.active[className]) { - data.totalActive--; - delete data.active[className]; - } - - if(removeAnimations || !data.totalActive) { - element.removeClass(NG_ANIMATE_CLASS_NAME); - element.removeData(NG_ANIMATE_STATE); - } - } - } - - function animationsDisabled(element, parentElement) { - if (rootAnimateState.disabled) return true; - - if(isMatchingElement(element, $rootElement)) { - return rootAnimateState.disabled || rootAnimateState.running; - } - - do { - //the element did not reach the root element which means that it - //is not apart of the DOM. Therefore there is no reason to do - //any animations on it - if(parentElement.length === 0) break; - - var isRoot = isMatchingElement(parentElement, $rootElement); - var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE); - var result = state && (!!state.disabled || state.running || state.totalActive > 0); - if(isRoot || result) { - return result; - } - - if(isRoot) return true; - } - while(parentElement = parentElement.parent()); - - return true; - } - }]); - - $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow', - function($window, $sniffer, $timeout, $$animateReflow) { - // Detect proper transitionend/animationend event names. - var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; - - // If unprefixed events are not supported but webkit-prefixed are, use the latter. - // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. - // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` - // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. - // Register both events in case `window.onanimationend` is not supported because of that, - // do the same for `transitionend` as Safari is likely to exhibit similar behavior. - // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit - // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition - if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { - CSS_PREFIX = '-webkit-'; - TRANSITION_PROP = 'WebkitTransition'; - TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; - } else { - TRANSITION_PROP = 'transition'; - TRANSITIONEND_EVENT = 'transitionend'; - } - - if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { - CSS_PREFIX = '-webkit-'; - ANIMATION_PROP = 'WebkitAnimation'; - ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; - } else { - ANIMATION_PROP = 'animation'; - ANIMATIONEND_EVENT = 'animationend'; - } - - var DURATION_KEY = 'Duration'; - var PROPERTY_KEY = 'Property'; - var DELAY_KEY = 'Delay'; - var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; - var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey'; - var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data'; - var NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions'; - var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; - var CLOSING_TIME_BUFFER = 1.5; - var ONE_SECOND = 1000; - - var lookupCache = {}; - var parentCounter = 0; - var animationReflowQueue = []; - var cancelAnimationReflow; - function afterReflow(element, callback) { - if(cancelAnimationReflow) { - cancelAnimationReflow(); - } - animationReflowQueue.push(callback); - cancelAnimationReflow = $$animateReflow(function() { - forEach(animationReflowQueue, function(fn) { - fn(); - }); - - animationReflowQueue = []; - cancelAnimationReflow = null; - lookupCache = {}; - }); - } - - var closingTimer = null; - var closingTimestamp = 0; - var animationElementQueue = []; - function animationCloseHandler(element, totalTime) { - var node = extractElementNode(element); - element = angular.element(node); - - //this item will be garbage collected by the closing - //animation timeout - animationElementQueue.push(element); - - //but it may not need to cancel out the existing timeout - //if the timestamp is less than the previous one - var futureTimestamp = Date.now() + totalTime; - if(futureTimestamp <= closingTimestamp) { - return; - } - - $timeout.cancel(closingTimer); - - closingTimestamp = futureTimestamp; - closingTimer = $timeout(function() { - closeAllAnimations(animationElementQueue); - animationElementQueue = []; - }, totalTime, false); - } - - function closeAllAnimations(elements) { - forEach(elements, function(element) { - var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(elementData) { - (elementData.closeAnimationFn || noop)(); - } - }); - } - - function getElementAnimationDetails(element, cacheKey) { - var data = cacheKey ? lookupCache[cacheKey] : null; - if(!data) { - var transitionDuration = 0; - var transitionDelay = 0; - var animationDuration = 0; - var animationDelay = 0; - var transitionDelayStyle; - var animationDelayStyle; - var transitionDurationStyle; - var transitionPropertyStyle; - - //we want all the styles defined before and after - forEach(element, function(element) { - if (element.nodeType == ELEMENT_NODE) { - var elementStyles = $window.getComputedStyle(element) || {}; - - transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY]; - - transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration); - - transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY]; - - transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY]; - - transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay); - - animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY]; - - animationDelay = Math.max(parseMaxTime(animationDelayStyle), animationDelay); - - var aDuration = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]); - - if(aDuration > 0) { - aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1; - } - - animationDuration = Math.max(aDuration, animationDuration); - } - }); - data = { - total : 0, - transitionPropertyStyle: transitionPropertyStyle, - transitionDurationStyle: transitionDurationStyle, - transitionDelayStyle: transitionDelayStyle, - transitionDelay: transitionDelay, - transitionDuration: transitionDuration, - animationDelayStyle: animationDelayStyle, - animationDelay: animationDelay, - animationDuration: animationDuration - }; - if(cacheKey) { - lookupCache[cacheKey] = data; - } - } - return data; - } - - function parseMaxTime(str) { - var maxValue = 0; - var values = angular.isString(str) ? - str.split(/\s*,\s*/) : - []; - forEach(values, function(value) { - maxValue = Math.max(parseFloat(value) || 0, maxValue); - }); - return maxValue; - } - - function getCacheKey(element) { - var parentElement = element.parent(); - var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY); - if(!parentID) { - parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter); - parentID = parentCounter; - } - return parentID + '-' + extractElementNode(element).getAttribute('class'); - } - - function animateSetup(animationEvent, element, className, calculationDecorator) { - var cacheKey = getCacheKey(element); - var eventCacheKey = cacheKey + ' ' + className; - var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0; - - var stagger = {}; - if(itemIndex > 0) { - var staggerClassName = className + '-stagger'; - var staggerCacheKey = cacheKey + ' ' + staggerClassName; - var applyClasses = !lookupCache[staggerCacheKey]; - - applyClasses && element.addClass(staggerClassName); - - stagger = getElementAnimationDetails(element, staggerCacheKey); - - applyClasses && element.removeClass(staggerClassName); - } - - /* the animation itself may need to add/remove special CSS classes - * before calculating the anmation styles */ - calculationDecorator = calculationDecorator || - function(fn) { return fn(); }; - - element.addClass(className); - - var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {}; - - var timings = calculationDecorator(function() { - return getElementAnimationDetails(element, eventCacheKey); - }); - - var transitionDuration = timings.transitionDuration; - var animationDuration = timings.animationDuration; - if(transitionDuration === 0 && animationDuration === 0) { - element.removeClass(className); - return false; - } - - element.data(NG_ANIMATE_CSS_DATA_KEY, { - running : formerData.running || 0, - itemIndex : itemIndex, - stagger : stagger, - timings : timings, - closeAnimationFn : noop - }); - - //temporarily disable the transition so that the enter styles - //don't animate twice (this is here to avoid a bug in Chrome/FF). - var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass'; - if(transitionDuration > 0) { - blockTransitions(element, className, isCurrentlyAnimating); - } - - //staggering keyframe animations work by adjusting the `animation-delay` CSS property - //on the given element, however, the delay value can only calculated after the reflow - //since by that time $animate knows how many elements are being animated. Therefore, - //until the reflow occurs the element needs to be blocked (where the keyframe animation - //is set to `none 0s`). This blocking mechanism should only be set for when a stagger - //animation is detected and when the element item index is greater than 0. - if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) { - blockKeyframeAnimations(element); - } - - return true; - } - - function isStructuralAnimation(className) { - return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave'; - } - - function blockTransitions(element, className, isAnimating) { - if(isStructuralAnimation(className) || !isAnimating) { - extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none'; - } else { - element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME); - } - } - - function blockKeyframeAnimations(element) { - extractElementNode(element).style[ANIMATION_PROP] = 'none 0s'; - } - - function unblockTransitions(element, className) { - var prop = TRANSITION_PROP + PROPERTY_KEY; - var node = extractElementNode(element); - if(node.style[prop] && node.style[prop].length > 0) { - node.style[prop] = ''; - } - element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME); - } - - function unblockKeyframeAnimations(element) { - var prop = ANIMATION_PROP; - var node = extractElementNode(element); - if(node.style[prop] && node.style[prop].length > 0) { - node.style[prop] = ''; - } - } - - function animateRun(animationEvent, element, className, activeAnimationComplete) { - var node = extractElementNode(element); - var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(node.getAttribute('class').indexOf(className) == -1 || !elementData) { - activeAnimationComplete(); - return; - } - - var activeClassName = ''; - forEach(className.split(' '), function(klass, i) { - activeClassName += (i > 0 ? ' ' : '') + klass + '-active'; - }); - - var stagger = elementData.stagger; - var timings = elementData.timings; - var itemIndex = elementData.itemIndex; - var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration); - var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay); - var maxDelayTime = maxDelay * ONE_SECOND; - - var startTime = Date.now(); - var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT; - - var style = '', appliedStyles = []; - if(timings.transitionDuration > 0) { - var propertyStyle = timings.transitionPropertyStyle; - if(propertyStyle.indexOf('all') == -1) { - style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';'; - style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';'; - appliedStyles.push(CSS_PREFIX + 'transition-property'); - appliedStyles.push(CSS_PREFIX + 'transition-duration'); - } - } - - if(itemIndex > 0) { - if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) { - var delayStyle = timings.transitionDelayStyle; - style += CSS_PREFIX + 'transition-delay: ' + - prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; '; - appliedStyles.push(CSS_PREFIX + 'transition-delay'); - } - - if(stagger.animationDelay > 0 && stagger.animationDuration === 0) { - style += CSS_PREFIX + 'animation-delay: ' + - prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; '; - appliedStyles.push(CSS_PREFIX + 'animation-delay'); - } - } - - if(appliedStyles.length > 0) { - //the element being animated may sometimes contain comment nodes in - //the jqLite object, so we're safe to use a single variable to house - //the styles since there is always only one element being animated - var oldStyle = node.getAttribute('style') || ''; - node.setAttribute('style', oldStyle + ' ' + style); - } - - element.on(css3AnimationEvents, onAnimationProgress); - element.addClass(activeClassName); - elementData.closeAnimationFn = function() { - onEnd(); - activeAnimationComplete(); - }; - - var staggerTime = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0); - var animationTime = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER; - var totalTime = (staggerTime + animationTime) * ONE_SECOND; - - elementData.running++; - animationCloseHandler(element, totalTime); - return onEnd; - - // This will automatically be called by $animate so - // there is no need to attach this internally to the - // timeout done method. - function onEnd(cancelled) { - element.off(css3AnimationEvents, onAnimationProgress); - element.removeClass(activeClassName); - animateClose(element, className); - var node = extractElementNode(element); - for (var i in appliedStyles) { - node.style.removeProperty(appliedStyles[i]); - } - } - - function onAnimationProgress(event) { - event.stopPropagation(); - var ev = event.originalEvent || event; - var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now(); - - /* Firefox (or possibly just Gecko) likes to not round values up - * when a ms measurement is used for the animation */ - var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); - - /* $manualTimeStamp is a mocked timeStamp value which is set - * within browserTrigger(). This is only here so that tests can - * mock animations properly. Real events fallback to event.timeStamp, - * or, if they don't, then a timeStamp is automatically created for them. - * We're checking to see if the timeStamp surpasses the expected delay, - * but we're using elapsedTime instead of the timeStamp on the 2nd - * pre-condition since animations sometimes close off early */ - if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { - activeAnimationComplete(); - } - } - } - - function prepareStaggerDelay(delayStyle, staggerDelay, index) { - var style = ''; - forEach(delayStyle.split(','), function(val, i) { - style += (i > 0 ? ',' : '') + - (index * staggerDelay + parseInt(val, 10)) + 's'; - }); - return style; - } - - function animateBefore(animationEvent, element, className, calculationDecorator) { - if(animateSetup(animationEvent, element, className, calculationDecorator)) { - return function(cancelled) { - cancelled && animateClose(element, className); - }; - } - } - - function animateAfter(animationEvent, element, className, afterAnimationComplete) { - if(element.data(NG_ANIMATE_CSS_DATA_KEY)) { - return animateRun(animationEvent, element, className, afterAnimationComplete); - } else { - animateClose(element, className); - afterAnimationComplete(); - } - } - - function animate(animationEvent, element, className, animationComplete) { - //If the animateSetup function doesn't bother returning a - //cancellation function then it means that there is no animation - //to perform at all - var preReflowCancellation = animateBefore(animationEvent, element, className); - if(!preReflowCancellation) { - animationComplete(); - return; - } - - //There are two cancellation functions: one is before the first - //reflow animation and the second is during the active state - //animation. The first function will take care of removing the - //data from the element which will not make the 2nd animation - //happen in the first place - var cancel = preReflowCancellation; - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - //once the reflow is complete then we point cancel to - //the new cancellation function which will remove all of the - //animation properties from the active animation - cancel = animateAfter(animationEvent, element, className, animationComplete); - }); - - return function(cancelled) { - (cancel || noop)(cancelled); - }; - } - - function animateClose(element, className) { - element.removeClass(className); - var data = element.data(NG_ANIMATE_CSS_DATA_KEY); - if(data) { - if(data.running) { - data.running--; - } - if(!data.running || data.running === 0) { - element.removeData(NG_ANIMATE_CSS_DATA_KEY); - } - } - } - - return { - enter : function(element, animationCompleted) { - return animate('enter', element, 'ng-enter', animationCompleted); - }, - - leave : function(element, animationCompleted) { - return animate('leave', element, 'ng-leave', animationCompleted); - }, - - move : function(element, animationCompleted) { - return animate('move', element, 'ng-move', animationCompleted); - }, - - beforeSetClass : function(element, add, remove, animationCompleted) { - var className = suffixClasses(remove, '-remove') + ' ' + - suffixClasses(add, '-add'); - var cancellationMethod = animateBefore('setClass', element, className, function(fn) { - /* when classes are removed from an element then the transition style - * that is applied is the transition defined on the element without the - * CSS class being there. This is how CSS3 functions outside of ngAnimate. - * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */ - var klass = element.attr('class'); - element.removeClass(remove); - element.addClass(add); - var timings = fn(); - element.attr('class', klass); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - beforeAddClass : function(element, className, animationCompleted) { - var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), function(fn) { - - /* when a CSS class is added to an element then the transition style that - * is applied is the transition defined on the element when the CSS class - * is added at the time of the animation. This is how CSS3 functions - * outside of ngAnimate. */ - element.addClass(className); - var timings = fn(); - element.removeClass(className); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - setClass : function(element, add, remove, animationCompleted) { - remove = suffixClasses(remove, '-remove'); - add = suffixClasses(add, '-add'); - var className = remove + ' ' + add; - return animateAfter('setClass', element, className, animationCompleted); - }, - - addClass : function(element, className, animationCompleted) { - return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted); - }, - - beforeRemoveClass : function(element, className, animationCompleted) { - var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), function(fn) { - /* when classes are removed from an element then the transition style - * that is applied is the transition defined on the element without the - * CSS class being there. This is how CSS3 functions outside of ngAnimate. - * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */ - var klass = element.attr('class'); - element.removeClass(className); - var timings = fn(); - element.attr('class', klass); - return timings; - }); - - if(cancellationMethod) { - afterReflow(element, function() { - unblockTransitions(element, className); - unblockKeyframeAnimations(element); - animationCompleted(); - }); - return cancellationMethod; - } - animationCompleted(); - }, - - removeClass : function(element, className, animationCompleted) { - return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted); - } - }; - - function suffixClasses(classes, suffix) { - var className = ''; - classes = angular.isArray(classes) ? classes : classes.split(/\s+/); - forEach(classes, function(klass, i) { - if(klass && klass.length > 0) { - className += (i > 0 ? ' ' : '') + klass + suffix; - } - }); - return className; - } - }]); - }]); - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-animate/angular-animate.min.js b/platforms/browser/www/lib/angular-animate/angular-animate.min.js deleted file mode 100644 index 55971e54..00000000 --- a/platforms/browser/www/lib/angular-animate/angular-animate.min.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(s,g,P){'use strict';g.module("ngAnimate",["ng"]).factory("$$animateReflow",["$$rAF","$document",function(g,s){return function(e){return g(function(){e()})}}]).config(["$provide","$animateProvider",function(ga,G){function e(e){for(var p=0;p<e.length;p++){var g=e[p];if(g.nodeType==ba)return g}}function u(p){return g.element(e(p))}var m=g.noop,p=g.forEach,Q=G.$$selectors,ba=1,h="$$ngAnimateState",J="ng-animate",r={running:!0};ga.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement", -"$$asyncCallback","$rootScope","$document",function(t,s,aa,K,E,H,P){function R(a){if(a){var b=[],c={};a=a.substr(1).split(".");(aa.transitions||aa.animations)&&b.push(s.get(Q[""]));for(var d=0;d<a.length;d++){var f=a[d],e=Q[f];e&&!c[f]&&(b.push(s.get(e)),c[f]=!0)}return b}}function L(a,b,c){function d(a,b){var c=a[b],d=a["before"+b.charAt(0).toUpperCase()+b.substr(1)];if(c||d)return"leave"==b&&(d=c,c=null),A.push({event:b,fn:c}),l.push({event:b,fn:d}),!0}function f(b,d,e){var f=[];p(b,function(a){a.fn&& -f.push(a)});var n=0;p(f,function(b,p){var C=function(){a:{if(d){(d[p]||m)();if(++n<f.length)break a;d=null}e()}};switch(b.event){case "setClass":d.push(b.fn(a,q,y,C));break;case "addClass":d.push(b.fn(a,q||c,C));break;case "removeClass":d.push(b.fn(a,y||c,C));break;default:d.push(b.fn(a,C))}});d&&0===d.length&&e()}var e=a[0];if(e){var h="setClass"==b,r=h||"addClass"==b||"removeClass"==b,q,y;g.isArray(c)&&(q=c[0],y=c[1],c=q+" "+y);var z=a.attr("class")+" "+c;if(T(z)){var v=m,w=[],l=[],x=m,n=[],A=[], -z=(" "+z).replace(/\s+/g,".");p(R(z),function(a){!d(a,b)&&h&&(d(a,"addClass"),d(a,"removeClass"))});return{node:e,event:b,className:c,isClassBased:r,isSetClassOperation:h,before:function(a){v=a;f(l,w,function(){v=m;a()})},after:function(a){x=a;f(A,n,function(){x=m;a()})},cancel:function(){w&&(p(w,function(a){(a||m)(!0)}),v(!0));n&&(p(n,function(a){(a||m)(!0)}),x(!0))}}}}}function F(a,b,c,d,f,e,r){function m(d){var e="$animate:"+d;x&&(x[e]&&0<x[e].length)&&E(function(){c.triggerHandler(e,{event:a, -className:b})})}function q(){m("before")}function y(){m("after")}function z(){m("close");r&&E(function(){r()})}function v(){v.hasBeenRun||(v.hasBeenRun=!0,e())}function w(){if(!w.hasBeenRun){w.hasBeenRun=!0;var d=c.data(h);d&&(l&&l.isClassBased?B(c,b):(E(function(){var d=c.data(h)||{};t==d.index&&B(c,b,a)}),c.data(h,d)));z()}}var l=L(c,a,b);if(l){b=l.className;var x=g.element._data(l.node),x=x&&x.events;d||(d=f?f.parent():c.parent());var n=c.data(h)||{};f=n.active||{};var A=n.totalActive||0,C=n.last; -if(l.isClassBased&&(n.disabled||C&&!C.isClassBased)||N(c,d))v(),q(),y(),w();else{d=!1;if(0<A){n=[];if(l.isClassBased)"setClass"==C.event?(n.push(C),B(c,b)):f[b]&&(s=f[b],s.event==a?d=!0:(n.push(s),B(c,b)));else if("leave"==a&&f["ng-leave"])d=!0;else{for(var s in f)n.push(f[s]),B(c,s);f={};A=0}0<n.length&&p(n,function(a){a.cancel()})}!l.isClassBased||(l.isSetClassOperation||d)||(d="addClass"==a==c.hasClass(b));if(d)q(),y(),z();else{if("leave"==a)c.one("$destroy",function(a){a=g.element(this);var b= -a.data(h);b&&(b=b.active["ng-leave"])&&(b.cancel(),B(a,"ng-leave"))});c.addClass(J);var t=O++;A++;f[b]=l;c.data(h,{last:l,active:f,index:t,totalActive:A});q();l.before(function(d){var e=c.data(h);d=d||!e||!e.active[b]||l.isClassBased&&e.active[b].event!=a;v();!0===d?w():(y(),l.after(w))})}}}else v(),q(),y(),w()}function U(a){if(a=e(a))a=g.isFunction(a.getElementsByClassName)?a.getElementsByClassName(J):a.querySelectorAll("."+J),p(a,function(a){a=g.element(a);(a=a.data(h))&&a.active&&p(a.active,function(a){a.cancel()})})} -function B(a,b){if(e(a)==e(K))r.disabled||(r.running=!1,r.structural=!1);else if(b){var c=a.data(h)||{},d=!0===b;!d&&(c.active&&c.active[b])&&(c.totalActive--,delete c.active[b]);if(d||!c.totalActive)a.removeClass(J),a.removeData(h)}}function N(a,b){if(r.disabled)return!0;if(e(a)==e(K))return r.disabled||r.running;do{if(0===b.length)break;var c=e(b)==e(K),d=c?r:b.data(h),d=d&&(!!d.disabled||d.running||0<d.totalActive);if(c||d)return d;if(c)break}while(b=b.parent());return!0}var O=0;K.data(h,r);H.$$postDigest(function(){H.$$postDigest(function(){r.running= -!1})});var V=G.classNameFilter(),T=V?function(a){return V.test(a)}:function(){return!0};return{enter:function(a,b,c,d){this.enabled(!1,a);t.enter(a,b,c);H.$$postDigest(function(){a=u(a);F("enter","ng-enter",a,b,c,m,d)})},leave:function(a,b){U(a);this.enabled(!1,a);H.$$postDigest(function(){F("leave","ng-leave",u(a),null,null,function(){t.leave(a)},b)})},move:function(a,b,c,d){U(a);this.enabled(!1,a);t.move(a,b,c);H.$$postDigest(function(){a=u(a);F("move","ng-move",a,b,c,m,d)})},addClass:function(a, -b,c){a=u(a);F("addClass",b,a,null,null,function(){t.addClass(a,b)},c)},removeClass:function(a,b,c){a=u(a);F("removeClass",b,a,null,null,function(){t.removeClass(a,b)},c)},setClass:function(a,b,c,d){a=u(a);F("setClass",[b,c],a,null,null,function(){t.setClass(a,b,c)},d)},enabled:function(a,b){switch(arguments.length){case 2:if(a)B(b);else{var c=b.data(h)||{};c.disabled=!0;b.data(h,c)}break;case 1:r.disabled=!a;break;default:a=!r.disabled}return!!a}}}]);G.register("",["$window","$sniffer","$timeout", -"$$animateReflow",function(h,r,u,K){function E(a,k){S&&S();W.push(k);S=K(function(){p(W,function(a){a()});W=[];S=null;M={}})}function H(a,k){var b=e(a);a=g.element(b);Y.push(a);b=Date.now()+k;b<=fa||(u.cancel(ea),fa=b,ea=u(function(){J(Y);Y=[]},k,!1))}function J(a){p(a,function(a){(a=a.data(n))&&(a.closeAnimationFn||m)()})}function R(a,k){var b=k?M[k]:null;if(!b){var c=0,d=0,e=0,f=0,n,Z,$,g;p(a,function(a){if(a.nodeType==ba){a=h.getComputedStyle(a)||{};$=a[I+z];c=Math.max(L($),c);g=a[I+v];n=a[I+w]; -d=Math.max(L(n),d);Z=a[q+w];f=Math.max(L(Z),f);var k=L(a[q+z]);0<k&&(k*=parseInt(a[q+l],10)||1);e=Math.max(k,e)}});b={total:0,transitionPropertyStyle:g,transitionDurationStyle:$,transitionDelayStyle:n,transitionDelay:d,transitionDuration:c,animationDelayStyle:Z,animationDelay:f,animationDuration:e};k&&(M[k]=b)}return b}function L(a){var k=0;a=g.isString(a)?a.split(/\s*,\s*/):[];p(a,function(a){k=Math.max(parseFloat(a)||0,k)});return k}function F(a){var k=a.parent(),b=k.data(x);b||(k.data(x,++da), -b=da);return b+"-"+e(a).getAttribute("class")}function U(a,k,b,c){var d=F(k),f=d+" "+b,p=M[f]?++M[f].total:0,g={};if(0<p){var h=b+"-stagger",g=d+" "+h;(d=!M[g])&&k.addClass(h);g=R(k,g);d&&k.removeClass(h)}c=c||function(a){return a()};k.addClass(b);var h=k.data(n)||{},l=c(function(){return R(k,f)});c=l.transitionDuration;d=l.animationDuration;if(0===c&&0===d)return k.removeClass(b),!1;k.data(n,{running:h.running||0,itemIndex:p,stagger:g,timings:l,closeAnimationFn:m});a=0<h.running||"setClass"==a;0< -c&&B(k,b,a);0<d&&(0<g.animationDelay&&0===g.animationDuration)&&(e(k).style[q]="none 0s");return!0}function B(a,b,c){"ng-enter"!=b&&("ng-move"!=b&&"ng-leave"!=b)&&c?a.addClass(A):e(a).style[I+v]="none"}function N(a,b){var c=I+v,d=e(a);d.style[c]&&0<d.style[c].length&&(d.style[c]="");a.removeClass(A)}function O(a){var b=q;a=e(a);a.style[b]&&0<a.style[b].length&&(a.style[b]="")}function V(a,b,c,f){function g(a){b.off(z,h);b.removeClass(r);d(b,c);a=e(b);for(var X in u)a.style.removeProperty(u[X])}function h(a){a.stopPropagation(); -var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(C));Math.max(a-A,0)>=x&&b>=v&&f()}var l=e(b);a=b.data(n);if(-1!=l.getAttribute("class").indexOf(c)&&a){var r="";p(c.split(" "),function(a,b){r+=(0<b?" ":"")+a+"-active"});var q=a.stagger,m=a.timings,s=a.itemIndex,v=Math.max(m.transitionDuration,m.animationDuration),w=Math.max(m.transitionDelay,m.animationDelay),x=w*ca,A=Date.now(),z=y+" "+G,t="",u=[];if(0<m.transitionDuration){var B=m.transitionPropertyStyle; --1==B.indexOf("all")&&(t+=D+"transition-property: "+B+";",t+=D+"transition-duration: "+m.transitionDurationStyle+";",u.push(D+"transition-property"),u.push(D+"transition-duration"))}0<s&&(0<q.transitionDelay&&0===q.transitionDuration&&(t+=D+"transition-delay: "+T(m.transitionDelayStyle,q.transitionDelay,s)+"; ",u.push(D+"transition-delay")),0<q.animationDelay&&0===q.animationDuration&&(t+=D+"animation-delay: "+T(m.animationDelayStyle,q.animationDelay,s)+"; ",u.push(D+"animation-delay")));0<u.length&& -(m=l.getAttribute("style")||"",l.setAttribute("style",m+" "+t));b.on(z,h);b.addClass(r);a.closeAnimationFn=function(){g();f()};l=(s*(Math.max(q.animationDelay,q.transitionDelay)||0)+(w+v)*Q)*ca;a.running++;H(b,l);return g}f()}function T(a,b,c){var d="";p(a.split(","),function(a,X){d+=(0<X?",":"")+(c*b+parseInt(a,10))+"s"});return d}function a(a,b,c,e){if(U(a,b,c,e))return function(a){a&&d(b,c)}}function b(a,b,c,e){if(b.data(n))return V(a,b,c,e);d(b,c);e()}function c(c,d,e,f){var g=a(c,d,e);if(g){var h= -g;E(d,function(){N(d,e);O(d);h=b(c,d,e,f)});return function(a){(h||m)(a)}}f()}function d(a,b){a.removeClass(b);var c=a.data(n);c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData(n))}function f(a,b){var c="";a=g.isArray(a)?a:a.split(/\s+/);p(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var D="",I,G,q,y;s.ontransitionend===P&&s.onwebkittransitionend!==P?(D="-webkit-",I="WebkitTransition",G="webkitTransitionEnd transitionend"):(I="transition",G="transitionend");s.onanimationend=== -P&&s.onwebkitanimationend!==P?(D="-webkit-",q="WebkitAnimation",y="webkitAnimationEnd animationend"):(q="animation",y="animationend");var z="Duration",v="Property",w="Delay",l="IterationCount",x="$$ngAnimateKey",n="$$ngAnimateCSS3Data",A="ng-animate-block-transitions",C=3,Q=1.5,ca=1E3,M={},da=0,W=[],S,ea=null,fa=0,Y=[];return{enter:function(a,b){return c("enter",a,"ng-enter",b)},leave:function(a,b){return c("leave",a,"ng-leave",b)},move:function(a,b){return c("move",a,"ng-move",b)},beforeSetClass:function(b, -c,d,e){var g=f(d,"-remove")+" "+f(c,"-add"),h=a("setClass",b,g,function(a){var e=b.attr("class");b.removeClass(d);b.addClass(c);a=a();b.attr("class",e);return a});if(h)return E(b,function(){N(b,g);O(b);e()}),h;e()},beforeAddClass:function(b,c,d){var e=a("addClass",b,f(c,"-add"),function(a){b.addClass(c);a=a();b.removeClass(c);return a});if(e)return E(b,function(){N(b,c);O(b);d()}),e;d()},setClass:function(a,c,d,e){d=f(d,"-remove");c=f(c,"-add");return b("setClass",a,d+" "+c,e)},addClass:function(a, -c,d){return b("addClass",a,f(c,"-add"),d)},beforeRemoveClass:function(b,c,d){var e=a("removeClass",b,f(c,"-remove"),function(a){var d=b.attr("class");b.removeClass(c);a=a();b.attr("class",d);return a});if(e)return E(b,function(){N(b,c);O(b);d()}),e;d()},removeClass:function(a,c,d){return b("removeClass",a,f(c,"-remove"),d)}}}])}])})(window,window.angular); -//# sourceMappingURL=angular-animate.min.js.map diff --git a/platforms/browser/www/lib/angular-animate/angular-animate.min.js.map b/platforms/browser/www/lib/angular-animate/angular-animate.min.js.map deleted file mode 100644 index 1206afbe..00000000 --- a/platforms/browser/www/lib/angular-animate/angular-animate.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-animate.min.js", -"lineCount":26, -"mappings":"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", -"sources":["angular-animate.js"], -"names":["window","angular","undefined","module","factory","$$rAF","$document","fn","config","$provide","$animateProvider","extractElementNode","element","i","length","elm","nodeType","ELEMENT_NODE","stripCommentsFromElement","noop","forEach","selectors","$$selectors","NG_ANIMATE_STATE","NG_ANIMATE_CLASS_NAME","rootAnimateState","decorator","$delegate","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","lookup","name","matches","flagMap","classes","substr","split","transitions","animations","push","get","klass","selectorFactoryName","animationRunner","animationEvent","className","registerAnimation","animationFactory","event","afterFn","beforeFn","charAt","toUpperCase","after","before","run","fns","cancellations","allCompleteFn","animation","count","index","progress","classNameAdd","classNameRemove","node","isSetClassOperation","isClassBased","isArray","attr","currentClassName","isAnimatableClassName","beforeComplete","beforeCancel","afterComplete","afterCancel","animationLookup","replace","created","cancel","cancelFn","performAnimation","parentElement","afterElement","domOperation","doneCallback","fireDOMCallback","animationPhase","eventName","elementEvents","triggerHandler","fireBeforeCallbackAsync","fireAfterCallbackAsync","fireDoneCallbackAsync","fireDOMOperation","hasBeenRun","closeAnimation","data","runner","cleanup","localAnimationCount","_data","events","parent","ngAnimateState","runningAnimations","active","totalActiveAnimations","totalActive","lastAnimation","last","disabled","animationsDisabled","skipAnimation","animationsToCancel","current","operation","hasClass","one","e","state","activeLeaveAnimation","addClass","globalAnimationCounter","cancelled","cancelChildAnimations","nodes","isFunction","getElementsByClassName","querySelectorAll","running","structural","removeAnimations","removeClass","removeData","isRoot","result","$$postDigest","classNameFilter","test","enter","enabled","leave","move","setClass","add","remove","value","arguments","register","$window","$timeout","$$animateReflow","afterReflow","callback","cancelAnimationReflow","animationReflowQueue","lookupCache","animationCloseHandler","totalTime","animationElementQueue","futureTimestamp","Date","now","closingTimestamp","closingTimer","closeAllAnimations","elements","elementData","NG_ANIMATE_CSS_DATA_KEY","closeAnimationFn","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","transitionDelayStyle","animationDelayStyle","transitionDurationStyle","transitionPropertyStyle","elementStyles","getComputedStyle","TRANSITION_PROP","DURATION_KEY","Math","max","parseMaxTime","PROPERTY_KEY","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","str","maxValue","values","isString","parseFloat","getCacheKey","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","getAttribute","animateSetup","calculationDecorator","eventCacheKey","itemIndex","total","stagger","staggerClassName","staggerCacheKey","applyClasses","formerData","timings","isCurrentlyAnimating","blockTransitions","style","isAnimating","NG_ANIMATE_BLOCK_CLASS_NAME","unblockTransitions","prop","unblockKeyframeAnimations","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","activeClassName","animateClose","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","maxDuration","indexOf","maxDelay","ONE_SECOND","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","propertyStyle","CSS_PREFIX","prepareStaggerDelay","oldStyle","setAttribute","on","elementData.closeAnimationFn","CLOSING_TIME_BUFFER","delayStyle","staggerDelay","val","animateBefore","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","animationCompleted","beforeSetClass","cancellationMethod","beforeAddClass","beforeRemoveClass"] -} diff --git a/platforms/browser/www/lib/angular-animate/bower.json b/platforms/browser/www/lib/angular-animate/bower.json deleted file mode 100644 index 21b67989..00000000 --- a/platforms/browser/www/lib/angular-animate/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-animate", - "version": "1.2.16", - "main": "./angular-animate.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-cookies/.bower.json b/platforms/browser/www/lib/angular-cookies/.bower.json deleted file mode 100644 index eaa46035..00000000 --- a/platforms/browser/www/lib/angular-cookies/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-cookies", - "version": "1.2.16", - "main": "./angular-cookies.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-cookies", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "8515dbd25c3b0a9d334f657849e4a7ec609bf91b" - }, - "_source": "git://github.com/angular/bower-angular-cookies.git", - "_target": "1.2.16", - "_originalSource": "angular-cookies" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-cookies/README.md b/platforms/browser/www/lib/angular-cookies/README.md deleted file mode 100644 index 77c71f4d..00000000 --- a/platforms/browser/www/lib/angular-cookies/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-cookies - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngCookies). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-cookies -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-cookies/angular-cookies.js"></script> -``` - -And add `ngCookies` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngCookies']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngCookies). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-cookies/angular-cookies.js b/platforms/browser/www/lib/angular-cookies/angular-cookies.js deleted file mode 100644 index f43d44dc..00000000 --- a/platforms/browser/www/lib/angular-cookies/angular-cookies.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngCookies - * @description - * - * # ngCookies - * - * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies. - * - * - * <div doc-module-components="ngCookies"></div> - * - * See {@link ngCookies.$cookies `$cookies`} and - * {@link ngCookies.$cookieStore `$cookieStore`} for usage. - */ - - -angular.module('ngCookies', ['ng']). - /** - * @ngdoc service - * @name $cookies - * - * @description - * Provides read/write access to browser's cookies. - * - * Only a simple Object is exposed and by adding or removing properties to/from this object, new - * cookies are created/deleted at the end of current $eval. - * The object's properties can only be strings. - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - <example> - <file name="index.html"> - <script> - function ExampleController($cookies) { - // Retrieving a cookie - var favoriteCookie = $cookies.myFavorite; - // Setting a cookie - $cookies.myFavorite = 'oatmeal'; - } - </script> - </file> - </example> - */ - factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) { - var cookies = {}, - lastCookies = {}, - lastBrowserCookies, - runEval = false, - copy = angular.copy, - isUndefined = angular.isUndefined; - - //creates a poller fn that copies all cookies from the $browser to service & inits the service - $browser.addPollFn(function() { - var currentCookies = $browser.cookies(); - if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl - lastBrowserCookies = currentCookies; - copy(currentCookies, lastCookies); - copy(currentCookies, cookies); - if (runEval) $rootScope.$apply(); - } - })(); - - runEval = true; - - //at the end of each eval, push cookies - //TODO: this should happen before the "delayed" watches fire, because if some cookies are not - // strings or browser refuses to store some cookies, we update the model in the push fn. - $rootScope.$watch(push); - - return cookies; - - - /** - * Pushes all the cookies from the service to the browser and verifies if all cookies were - * stored. - */ - function push() { - var name, - value, - browserCookies, - updated; - - //delete any cookies deleted in $cookies - for (name in lastCookies) { - if (isUndefined(cookies[name])) { - $browser.cookies(name, undefined); - } - } - - //update all cookies updated in $cookies - for(name in cookies) { - value = cookies[name]; - if (!angular.isString(value)) { - value = '' + value; - cookies[name] = value; - } - if (value !== lastCookies[name]) { - $browser.cookies(name, value); - updated = true; - } - } - - //verify what was actually stored - if (updated){ - updated = false; - browserCookies = $browser.cookies(); - - for (name in cookies) { - if (cookies[name] !== browserCookies[name]) { - //delete or reset all cookies that the browser dropped from $cookies - if (isUndefined(browserCookies[name])) { - delete cookies[name]; - } else { - cookies[name] = browserCookies[name]; - } - updated = true; - } - } - } - } - }]). - - - /** - * @ngdoc service - * @name $cookieStore - * @requires $cookies - * - * @description - * Provides a key-value (string-object) storage, that is backed by session cookies. - * Objects put or retrieved from this storage are automatically serialized or - * deserialized by angular's toJson/fromJson. - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - */ - factory('$cookieStore', ['$cookies', function($cookies) { - - return { - /** - * @ngdoc method - * @name $cookieStore#get - * - * @description - * Returns the value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {Object} Deserialized cookie value. - */ - get: function(key) { - var value = $cookies[key]; - return value ? angular.fromJson(value) : value; - }, - - /** - * @ngdoc method - * @name $cookieStore#put - * - * @description - * Sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {Object} value Value to be stored. - */ - put: function(key, value) { - $cookies[key] = angular.toJson(value); - }, - - /** - * @ngdoc method - * @name $cookieStore#remove - * - * @description - * Remove given cookie - * - * @param {string} key Id of the key-value pair to delete. - */ - remove: function(key) { - delete $cookies[key]; - } - }; - - }]); - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js b/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js deleted file mode 100644 index 4d4527f3..00000000 --- a/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore", -["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular); -//# sourceMappingURL=angular-cookies.min.js.map diff --git a/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js.map b/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js.map deleted file mode 100644 index 1d3c5d32..00000000 --- a/platforms/browser/www/lib/angular-cookies/angular-cookies.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-cookies.min.js", -"lineCount":7, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CACEY,CAKA,CALQZ,CAAA,CAAQW,CAAR,CAKR,CAJKjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAIL,GAHEA,CACA,CADQ,EACR,CADaA,CACb,CAAAZ,CAAA,CAAQW,CAAR,CAAA,CAAgBC,CAElB,EAAIA,CAAJ,GAAcX,CAAA,CAAYU,CAAZ,CAAd,GACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CAFZ,CAOF,IAAIA,CAAJ,CAIE,IAAKF,CAAL,GAFAI,EAEaf,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBI,CAAA,CAAeJ,CAAf,CAAtB,GAEMN,CAAA,CAAYU,CAAA,CAAeJ,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBI,CAAA,CAAeJ,CAAf,CALpB,CAhCU,CAThB,CAEA,OAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA0HW,cA1HX;AA0H2B,CAAC,UAAD,CAAa,QAAQ,CAACmB,CAAD,CAAW,CAErD,MAAO,KAWAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHN,CACG,CADKI,CAAA,CAASE,CAAT,CACL,EAAQxB,CAAAyB,SAAA,CAAiBP,CAAjB,CAAR,CAAkCA,CAFxB,CAXd,KA0BAQ,QAAQ,CAACF,CAAD,CAAMN,CAAN,CAAa,CACxBI,CAAA,CAASE,CAAT,CAAA,CAAgBxB,CAAA2B,OAAA,CAAeT,CAAf,CADQ,CA1BrB,QAuCGU,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CAvCjB,CAF8C,CAAhC,CA1H3B,CAnBsC,CAArC,CAAA,CA8LEzB,MA9LF,CA8LUA,MAAAC,QA9LV;", -"sources":["angular-cookies.js"], -"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"] -} diff --git a/platforms/browser/www/lib/angular-cookies/bower.json b/platforms/browser/www/lib/angular-cookies/bower.json deleted file mode 100644 index cf5f05a0..00000000 --- a/platforms/browser/www/lib/angular-cookies/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-cookies", - "version": "1.2.16", - "main": "./angular-cookies.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-mocks/.bower.json b/platforms/browser/www/lib/angular-mocks/.bower.json deleted file mode 100644 index ce38275c..00000000 --- a/platforms/browser/www/lib/angular-mocks/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.2.16", - "main": "./angular-mocks.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-mocks", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "e429a011d88c402430329449500f352751d1a137" - }, - "_source": "git://github.com/angular/bower-angular-mocks.git", - "_target": "1.2.16", - "_originalSource": "angular-mocks" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-mocks/README.md b/platforms/browser/www/lib/angular-mocks/README.md deleted file mode 100644 index 3448d284..00000000 --- a/platforms/browser/www/lib/angular-mocks/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# bower-angular-mocks - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-mocks -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/guide/dev_guide.unit-testing). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-mocks/angular-mocks.js b/platforms/browser/www/lib/angular-mocks/angular-mocks.js deleted file mode 100644 index da804b4a..00000000 --- a/platforms/browser/www/lib/angular-mocks/angular-mocks.js +++ /dev/null @@ -1,2163 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) { - -'use strict'; - -/** - * @ngdoc object - * @name angular.mock - * @description - * - * Namespace from 'angular-mocks.js' which contains testing related code. - */ -angular.mock = {}; - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * - * @description - * This service is a mock implementation of {@link ng.$browser}. It provides fake - * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, - * cookies, etc... - * - * The api of this service is the same as that of the real {@link ng.$browser $browser}, except - * that there are several helper methods available which can be used in tests. - */ -angular.mock.$BrowserProvider = function() { - this.$get = function() { - return new angular.mock.$Browser(); - }; -}; - -angular.mock.$Browser = function() { - var self = this; - - this.isMock = true; - self.$$url = "http://server/"; - self.$$lastUrl = self.$$url; // used by url polling fn - self.pollFns = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = angular.noop; - self.$$incOutstandingRequestCount = angular.noop; - - - // register url polling fn - - self.onUrlChange = function(listener) { - self.pollFns.push( - function() { - if (self.$$lastUrl != self.$$url) { - self.$$lastUrl = self.$$url; - listener(self.$$url); - } - } - ); - - return listener; - }; - - self.cookieHash = {}; - self.lastCookieHash = {}; - self.deferredFns = []; - self.deferredNextId = 0; - - self.defer = function(fn, delay) { - delay = delay || 0; - self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); - self.deferredFns.sort(function(a,b){ return a.time - b.time;}); - return self.deferredNextId++; - }; - - - /** - * @name $browser#defer.now - * - * @description - * Current milliseconds mock time. - */ - self.defer.now = 0; - - - self.defer.cancel = function(deferId) { - var fnIndex; - - angular.forEach(self.deferredFns, function(fn, index) { - if (fn.id === deferId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - self.deferredFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - - /** - * @name $browser#defer.flush - * - * @description - * Flushes all pending requests and executes the defer callbacks. - * - * @param {number=} number of milliseconds to flush. See {@link #defer.now} - */ - self.defer.flush = function(delay) { - if (angular.isDefined(delay)) { - self.defer.now += delay; - } else { - if (self.deferredFns.length) { - self.defer.now = self.deferredFns[self.deferredFns.length-1].time; - } else { - throw new Error('No deferred tasks to be flushed'); - } - } - - while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { - self.deferredFns.shift().fn(); - } - }; - - self.$$baseHref = ''; - self.baseHref = function() { - return this.$$baseHref; - }; -}; -angular.mock.$Browser.prototype = { - -/** - * @name $browser#poll - * - * @description - * run all fns in pollFns - */ - poll: function poll() { - angular.forEach(this.pollFns, function(pollFn){ - pollFn(); - }); - }, - - addPollFn: function(pollFn) { - this.pollFns.push(pollFn); - return pollFn; - }, - - url: function(url, replace) { - if (url) { - this.$$url = url; - return this; - } - - return this.$$url; - }, - - cookies: function(name, value) { - if (name) { - if (angular.isUndefined(value)) { - delete this.cookieHash[name]; - } else { - if (angular.isString(value) && //strings only - value.length <= 4096) { //strict cookie storage limits - this.cookieHash[name] = value; - } - } - } else { - if (!angular.equals(this.cookieHash, this.lastCookieHash)) { - this.lastCookieHash = angular.copy(this.cookieHash); - this.cookieHash = angular.copy(this.cookieHash); - } - return this.cookieHash; - } - }, - - notifyWhenNoOutstandingRequests: function(fn) { - fn(); - } -}; - - -/** - * @ngdoc provider - * @name $exceptionHandlerProvider - * - * @description - * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors - * passed into the `$exceptionHandler`. - */ - -/** - * @ngdoc service - * @name $exceptionHandler - * - * @description - * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed - * into it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration - * information. - * - * - * ```js - * describe('$exceptionHandlerProvider', function() { - * - * it('should capture log messages and exceptions', function() { - * - * module(function($exceptionHandlerProvider) { - * $exceptionHandlerProvider.mode('log'); - * }); - * - * inject(function($log, $exceptionHandler, $timeout) { - * $timeout(function() { $log.log(1); }); - * $timeout(function() { $log.log(2); throw 'banana peel'; }); - * $timeout(function() { $log.log(3); }); - * expect($exceptionHandler.errors).toEqual([]); - * expect($log.assertEmpty()); - * $timeout.flush(); - * expect($exceptionHandler.errors).toEqual(['banana peel']); - * expect($log.log.logs).toEqual([[1], [2], [3]]); - * }); - * }); - * }); - * ``` - */ - -angular.mock.$ExceptionHandlerProvider = function() { - var handler; - - /** - * @ngdoc method - * @name $exceptionHandlerProvider#mode - * - * @description - * Sets the logging mode. - * - * @param {string} mode Mode of operation, defaults to `rethrow`. - * - * - `rethrow`: If any errors are passed into the handler in tests, it typically - * means that there is a bug in the application or test, so this mock will - * make these tests fail. - * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` - * mode stores an array of errors in `$exceptionHandler.errors`, to allow later - * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and - * {@link ngMock.$log#reset reset()} - */ - this.mode = function(mode) { - switch(mode) { - case 'rethrow': - handler = function(e) { - throw e; - }; - break; - case 'log': - var errors = []; - - handler = function(e) { - if (arguments.length == 1) { - errors.push(e); - } else { - errors.push([].slice.call(arguments, 0)); - } - }; - - handler.errors = errors; - break; - default: - throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); - } - }; - - this.$get = function() { - return handler; - }; - - this.mode('rethrow'); -}; - - -/** - * @ngdoc service - * @name $log - * - * @description - * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays - * (one array per logging level). These arrays are exposed as `logs` property of each of the - * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. - * - */ -angular.mock.$LogProvider = function() { - var debug = true; - - function concat(array1, array2, index) { - return array1.concat(Array.prototype.slice.call(array2, index)); - } - - this.debugEnabled = function(flag) { - if (angular.isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = function () { - var $log = { - log: function() { $log.log.logs.push(concat([], arguments, 0)); }, - warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, - info: function() { $log.info.logs.push(concat([], arguments, 0)); }, - error: function() { $log.error.logs.push(concat([], arguments, 0)); }, - debug: function() { - if (debug) { - $log.debug.logs.push(concat([], arguments, 0)); - } - } - }; - - /** - * @ngdoc method - * @name $log#reset - * - * @description - * Reset all of the logging arrays to empty. - */ - $log.reset = function () { - /** - * @ngdoc property - * @name $log#log.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#log}. - * - * @example - * ```js - * $log.log('Some Log'); - * var first = $log.log.logs.unshift(); - * ``` - */ - $log.log.logs = []; - /** - * @ngdoc property - * @name $log#info.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#info}. - * - * @example - * ```js - * $log.info('Some Info'); - * var first = $log.info.logs.unshift(); - * ``` - */ - $log.info.logs = []; - /** - * @ngdoc property - * @name $log#warn.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#warn}. - * - * @example - * ```js - * $log.warn('Some Warning'); - * var first = $log.warn.logs.unshift(); - * ``` - */ - $log.warn.logs = []; - /** - * @ngdoc property - * @name $log#error.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#error}. - * - * @example - * ```js - * $log.error('Some Error'); - * var first = $log.error.logs.unshift(); - * ``` - */ - $log.error.logs = []; - /** - * @ngdoc property - * @name $log#debug.logs - * - * @description - * Array of messages logged using {@link ngMock.$log#debug}. - * - * @example - * ```js - * $log.debug('Some Error'); - * var first = $log.debug.logs.unshift(); - * ``` - */ - $log.debug.logs = []; - }; - - /** - * @ngdoc method - * @name $log#assertEmpty - * - * @description - * Assert that the all of the logging methods have no logged messages. If messages present, an - * exception is thrown. - */ - $log.assertEmpty = function() { - var errors = []; - angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { - angular.forEach($log[logLevel].logs, function(log) { - angular.forEach(log, function (logItem) { - errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + - (logItem.stack || '')); - }); - }); - }); - if (errors.length) { - errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+ - "an expected log message was not checked and removed:"); - errors.push(''); - throw new Error(errors.join('\n---------\n')); - } - }; - - $log.reset(); - return $log; - }; -}; - - -/** - * @ngdoc service - * @name $interval - * - * @description - * Mock implementation of the $interval service. - * - * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - */ -angular.mock.$IntervalProvider = function() { - this.$get = ['$rootScope', '$q', - function($rootScope, $q) { - var repeatFns = [], - nextRepeatId = 0, - now = 0; - - var $interval = function(fn, delay, count, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (angular.isDefined(invokeApply) && !invokeApply); - - count = (angular.isDefined(count)) ? count : 0, - promise.then(null, null, fn); - - promise.$$intervalId = nextRepeatId; - - function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - var fnIndex; - deferred.resolve(iteration); - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns.splice(fnIndex, 1); - } - } - - if (!skipApply) $rootScope.$apply(); - } - - repeatFns.push({ - nextTime:(now + delay), - delay: delay, - fn: tick, - id: nextRepeatId, - deferred: deferred - }); - repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); - - nextRepeatId++; - return promise; - }; - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise A promise from calling the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully cancelled. - */ - $interval.cancel = function(promise) { - if(!promise) return false; - var fnIndex; - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns[fnIndex].deferred.reject('canceled'); - repeatFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - /** - * @ngdoc method - * @name $interval#flush - * @description - * - * Runs interval tasks scheduled to be run in the next `millis` milliseconds. - * - * @param {number=} millis maximum timeout amount to flush up until. - * - * @return {number} The amount of time moved forward. - */ - $interval.flush = function(millis) { - now += millis; - while (repeatFns.length && repeatFns[0].nextTime <= now) { - var task = repeatFns[0]; - task.fn(); - task.nextTime += task.delay; - repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); - } - return millis; - }; - - return $interval; - }]; -}; - - -/* jshint -W101 */ -/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! - * This directive should go inside the anonymous function but a bug in JSHint means that it would - * not be enacted early enough to prevent the warning. - */ -var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; - -function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8061_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0; - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); - date.setUTCHours(int(match[4]||0) - tzHour, - int(match[5]||0) - tzMin, - int(match[6]||0), - int(match[7]||0)); - return date; - } - return string; -} - -function int(str) { - return parseInt(str, 10); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -/** - * @ngdoc type - * @name angular.mock.TzDate - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. - * - * Mock of the Date type which has its timezone specified via constructor arg. - * - * The main purpose is to create Date-like instances with timezone fixed to the specified timezone - * offset, so that we can test code that depends on local timezone settings without dependency on - * the time zone settings of the machine where the code is running. - * - * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) - * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* - * - * @example - * !!!! WARNING !!!!! - * This is not a complete Date object so only methods that were implemented can be called safely. - * To make matters worse, TzDate instances inherit stuff from Date via a prototype. - * - * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is - * incomplete we might be missing some non-standard methods. This can result in errors like: - * "Date.prototype.foo called on incompatible Object". - * - * ```js - * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); - * newYearInBratislava.getTimezoneOffset() => -60; - * newYearInBratislava.getFullYear() => 2010; - * newYearInBratislava.getMonth() => 0; - * newYearInBratislava.getDate() => 1; - * newYearInBratislava.getHours() => 0; - * newYearInBratislava.getMinutes() => 0; - * newYearInBratislava.getSeconds() => 0; - * ``` - * - */ -angular.mock.TzDate = function (offset, timestamp) { - var self = new Date(0); - if (angular.isString(timestamp)) { - var tsStr = timestamp; - - self.origDate = jsonStringToDate(timestamp); - - timestamp = self.origDate.getTime(); - if (isNaN(timestamp)) - throw { - name: "Illegal Argument", - message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" - }; - } else { - self.origDate = new Date(timestamp); - } - - var localOffset = new Date(timestamp).getTimezoneOffset(); - self.offsetDiff = localOffset*60*1000 - offset*1000*60*60; - self.date = new Date(timestamp + self.offsetDiff); - - self.getTime = function() { - return self.date.getTime() - self.offsetDiff; - }; - - self.toLocaleDateString = function() { - return self.date.toLocaleDateString(); - }; - - self.getFullYear = function() { - return self.date.getFullYear(); - }; - - self.getMonth = function() { - return self.date.getMonth(); - }; - - self.getDate = function() { - return self.date.getDate(); - }; - - self.getHours = function() { - return self.date.getHours(); - }; - - self.getMinutes = function() { - return self.date.getMinutes(); - }; - - self.getSeconds = function() { - return self.date.getSeconds(); - }; - - self.getMilliseconds = function() { - return self.date.getMilliseconds(); - }; - - self.getTimezoneOffset = function() { - return offset * 60; - }; - - self.getUTCFullYear = function() { - return self.origDate.getUTCFullYear(); - }; - - self.getUTCMonth = function() { - return self.origDate.getUTCMonth(); - }; - - self.getUTCDate = function() { - return self.origDate.getUTCDate(); - }; - - self.getUTCHours = function() { - return self.origDate.getUTCHours(); - }; - - self.getUTCMinutes = function() { - return self.origDate.getUTCMinutes(); - }; - - self.getUTCSeconds = function() { - return self.origDate.getUTCSeconds(); - }; - - self.getUTCMilliseconds = function() { - return self.origDate.getUTCMilliseconds(); - }; - - self.getDay = function() { - return self.date.getDay(); - }; - - // provide this method only on browsers that already have it - if (self.toISOString) { - self.toISOString = function() { - return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + - padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + - padNumber(self.origDate.getUTCDate(), 2) + 'T' + - padNumber(self.origDate.getUTCHours(), 2) + ':' + - padNumber(self.origDate.getUTCMinutes(), 2) + ':' + - padNumber(self.origDate.getUTCSeconds(), 2) + '.' + - padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; - }; - } - - //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getUTCDay', - 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', - 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', - 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', - 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', - 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; - - angular.forEach(unimplementedMethods, function(methodName) { - self[methodName] = function() { - throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); - }; - }); - - return self; -}; - -//make "tzDateInstance instanceof Date" return true -angular.mock.TzDate.prototype = Date.prototype; -/* jshint +W101 */ - -angular.mock.animate = angular.module('ngAnimateMock', ['ng']) - - .config(['$provide', function($provide) { - - var reflowQueue = []; - $provide.value('$$animateReflow', function(fn) { - var index = reflowQueue.length; - reflowQueue.push(fn); - return function cancel() { - reflowQueue.splice(index, 1); - }; - }); - - $provide.decorator('$animate', function($delegate, $$asyncCallback) { - var animate = { - queue : [], - enabled : $delegate.enabled, - triggerCallbacks : function() { - $$asyncCallback.flush(); - }, - triggerReflow : function() { - angular.forEach(reflowQueue, function(fn) { - fn(); - }); - reflowQueue = []; - } - }; - - angular.forEach( - ['enter','leave','move','addClass','removeClass','setClass'], function(method) { - animate[method] = function() { - animate.queue.push({ - event : method, - element : arguments[0], - args : arguments - }); - $delegate[method].apply($delegate, arguments); - }; - }); - - return animate; - }); - - }]); - - -/** - * @ngdoc function - * @name angular.mock.dump - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available function. - * - * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for - * debugging. - * - * This method is also available on window, where it can be used to display objects on debug - * console. - * - * @param {*} object - any object to turn into string. - * @return {string} a serialized string of the argument - */ -angular.mock.dump = function(object) { - return serialize(object); - - function serialize(object) { - var out; - - if (angular.isElement(object)) { - object = angular.element(object); - out = angular.element('<div></div>'); - angular.forEach(object, function(element) { - out.append(angular.element(element).clone()); - }); - out = out.html(); - } else if (angular.isArray(object)) { - out = []; - angular.forEach(object, function(o) { - out.push(serialize(o)); - }); - out = '[ ' + out.join(', ') + ' ]'; - } else if (angular.isObject(object)) { - if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { - out = serializeScope(object); - } else if (object instanceof Error) { - out = object.stack || ('' + object.name + ': ' + object.message); - } else { - // TODO(i): this prevents methods being logged, - // we should have a better way to serialize objects - out = angular.toJson(object, true); - } - } else { - out = String(object); - } - - return out; - } - - function serializeScope(scope, offset) { - offset = offset || ' '; - var log = [offset + 'Scope(' + scope.$id + '): {']; - for ( var key in scope ) { - if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { - log.push(' ' + key + ': ' + angular.toJson(scope[key])); - } - } - var child = scope.$$childHead; - while(child) { - log.push(serializeScope(child, offset + ' ')); - child = child.$$nextSibling; - } - log.push('}'); - return log.join('\n' + offset); - } -}; - -/** - * @ngdoc service - * @name $httpBackend - * @description - * Fake HTTP backend implementation suitable for unit testing applications that use the - * {@link ng.$http $http service}. - * - * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less - * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. - * - * During unit testing, we want our unit tests to run quickly and have no external dependencies so - * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or - * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is - * to verify whether a certain request has been sent or not, or alternatively just let the - * application make requests, respond with pre-trained responses and assert that the end result is - * what we expect it to be. - * - * This mock implementation can be used to respond with static or dynamic responses via the - * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). - * - * When an Angular application needs some data from a server, it calls the $http service, which - * sends the request to a real server using $httpBackend service. With dependency injection, it is - * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify - * the requests and respond with some testing data without sending a request to real server. - * - * There are two ways to specify what test data should be returned as http responses by the mock - * backend when the code under test makes http requests: - * - * - `$httpBackend.expect` - specifies a request expectation - * - `$httpBackend.when` - specifies a backend definition - * - * - * # Request Expectations vs Backend Definitions - * - * Request expectations provide a way to make assertions about requests made by the application and - * to define responses for those requests. The test will fail if the expected requests are not made - * or they are made in the wrong order. - * - * Backend definitions allow you to define a fake backend for your application which doesn't assert - * if a particular request was made or not, it just returns a trained response if a request is made. - * The test will pass whether or not the request gets made during testing. - * - * - * <table class="table"> - * <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr> - * <tr> - * <th>Syntax</th> - * <td>.expect(...).respond(...)</td> - * <td>.when(...).respond(...)</td> - * </tr> - * <tr> - * <th>Typical usage</th> - * <td>strict unit tests</td> - * <td>loose (black-box) unit testing</td> - * </tr> - * <tr> - * <th>Fulfills multiple requests</th> - * <td>NO</td> - * <td>YES</td> - * </tr> - * <tr> - * <th>Order of requests matters</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Request required</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Response required</th> - * <td>optional (see below)</td> - * <td>YES</td> - * </tr> - * </table> - * - * In cases where both backend definitions and request expectations are specified during unit - * testing, the request expectations are evaluated first. - * - * If a request expectation has no response specified, the algorithm will search your backend - * definitions for an appropriate response. - * - * If a request didn't match any expectation or if the expectation doesn't have the response - * defined, the backend definitions are evaluated in sequential order to see if any of them match - * the request. The response from the first matched definition is returned. - * - * - * # Flushing HTTP requests - * - * The $httpBackend used in production always responds to requests asynchronously. If we preserved - * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, - * to follow and to maintain. But neither can the testing mock respond synchronously; that would - * change the execution of the code under test. For this reason, the mock $httpBackend has a - * `flush()` method, which allows the test to explicitly flush pending requests. This preserves - * the async api of the backend, while allowing the test to execute synchronously. - * - * - * # Unit testing with mock $httpBackend - * The following code shows how to setup and use the mock backend when unit testing a controller. - * First we create the controller under test: - * - ```js - // The controller code - function MyController($scope, $http) { - var authToken; - - $http.get('/auth.py').success(function(data, status, headers) { - authToken = headers('A-Token'); - $scope.user = data; - }); - - $scope.saveMessage = function(message) { - var headers = { 'Authorization': authToken }; - $scope.status = 'Saving...'; - - $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { - $scope.status = ''; - }).error(function() { - $scope.status = 'ERROR!'; - }); - }; - } - ``` - * - * Now we setup the mock backend and create the test specs: - * - ```js - // testing controller - describe('MyController', function() { - var $httpBackend, $rootScope, createController; - - beforeEach(inject(function($injector) { - // Set up the mock http service responses - $httpBackend = $injector.get('$httpBackend'); - // backend definition common for all tests - $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'}); - - // Get hold of a scope (i.e. the root scope) - $rootScope = $injector.get('$rootScope'); - // The $controller service is used to create instances of controllers - var $controller = $injector.get('$controller'); - - createController = function() { - return $controller('MyController', {'$scope' : $rootScope }); - }; - })); - - - afterEach(function() { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); - }); - - - it('should fetch authentication token', function() { - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - }); - - - it('should send msg to server', function() { - var controller = createController(); - $httpBackend.flush(); - - // now you don’t care about the authentication, but - // the controller will still send the request and - // $httpBackend will respond without you having to - // specify the expectation and response for this request - - $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); - $rootScope.saveMessage('message content'); - expect($rootScope.status).toBe('Saving...'); - $httpBackend.flush(); - expect($rootScope.status).toBe(''); - }); - - - it('should send auth header', function() { - var controller = createController(); - $httpBackend.flush(); - - $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { - // check if the header was send, if it wasn't the expectation won't - // match the request and the test will fail - return headers['Authorization'] == 'xxx'; - }).respond(201, ''); - - $rootScope.saveMessage('whatever'); - $httpBackend.flush(); - }); - }); - ``` - */ -angular.mock.$HttpBackendProvider = function() { - this.$get = ['$rootScope', createHttpBackendMock]; -}; - -/** - * General factory function for $httpBackend mock. - * Returns instance for unit testing (when no arguments specified): - * - passing through is disabled - * - auto flushing is disabled - * - * Returns instance for e2e testing (when `$delegate` and `$browser` specified): - * - passing through (delegating request to real backend) is enabled - * - auto flushing is enabled - * - * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) - * @param {Object=} $browser Auto-flushing enabled if specified - * @return {Object} Instance of $httpBackend mock - */ -function createHttpBackendMock($rootScope, $delegate, $browser) { - var definitions = [], - expectations = [], - responses = [], - responsesPush = angular.bind(responses, responses.push), - copy = angular.copy; - - function createResponse(status, data, headers, statusText) { - if (angular.isFunction(status)) return status; - - return function() { - return angular.isNumber(status) - ? [status, data, headers, statusText] - : [200, status, data]; - }; - } - - // TODO(vojta): change params to: method, url, data, headers, callback - function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { - var xhr = new MockXhr(), - expectation = expectations[0], - wasExpected = false; - - function prettyPrint(data) { - return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) - ? data - : angular.toJson(data); - } - - function wrapResponse(wrapped) { - if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); - - return handleResponse; - - function handleResponse() { - var response = wrapped.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(), - copy(response[3] || '')); - } - - function handleTimeout() { - for (var i = 0, ii = responses.length; i < ii; i++) { - if (responses[i] === handleResponse) { - responses.splice(i, 1); - callback(-1, undefined, ''); - break; - } - } - } - } - - if (expectation && expectation.match(method, url)) { - if (!expectation.matchData(data)) - throw new Error('Expected ' + expectation + ' with different data\n' + - 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); - - if (!expectation.matchHeaders(headers)) - throw new Error('Expected ' + expectation + ' with different headers\n' + - 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + - prettyPrint(headers)); - - expectations.shift(); - - if (expectation.response) { - responses.push(wrapResponse(expectation)); - return; - } - wasExpected = true; - } - - var i = -1, definition; - while ((definition = definitions[++i])) { - if (definition.match(method, url, data, headers || {})) { - if (definition.response) { - // if $browser specified, we do auto flush all requests - ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); - } else if (definition.passThrough) { - $delegate(method, url, data, callback, headers, timeout, withCredentials); - } else throw new Error('No response defined !'); - return; - } - } - throw wasExpected ? - new Error('No response defined !') : - new Error('Unexpected request: ' + method + ' ' + url + '\n' + - (expectation ? 'Expected ' + expectation : 'No more request expected')); - } - - /** - * @ngdoc method - * @name $httpBackend#when - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). - */ - $httpBackend.when = function(method, url, data, headers) { - var definition = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - definition.response = createResponse(status, data, headers, statusText); - } - }; - - if ($browser) { - chain.passThrough = function() { - definition.passThrough = true; - }; - } - - definitions.push(definition); - return chain; - }; - - /** - * @ngdoc method - * @name $httpBackend#whenGET - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPOST - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPUT - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - createShortMethods('when'); - - - /** - * @ngdoc method - * @name $httpBackend#expect - * @description - * Creates a new request expectation. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current expectation. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). - */ - $httpBackend.expect = function(method, url, data, headers) { - var expectation = new MockHttpExpectation(method, url, data, headers); - expectations.push(expectation); - return { - respond: function (status, data, headers, statusText) { - expectation.response = createResponse(status, data, headers, statusText); - } - }; - }; - - - /** - * @ngdoc method - * @name $httpBackend#expectGET - * @description - * Creates a new request expectation for GET requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. See #expect for more info. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectHEAD - * @description - * Creates a new request expectation for HEAD requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectDELETE - * @description - * Creates a new request expectation for DELETE requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPOST - * @description - * Creates a new request expectation for POST requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPUT - * @description - * Creates a new request expectation for PUT requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPATCH - * @description - * Creates a new request expectation for PATCH requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectJSONP - * @description - * Creates a new request expectation for JSONP requests. For more info see `expect()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` method that control how a matched - * request is handled. - */ - createShortMethods('expect'); - - - /** - * @ngdoc method - * @name $httpBackend#flush - * @description - * Flushes all pending requests using the trained responses. - * - * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, - * all pending requests will be flushed. If there are no pending requests when the flush method - * is called an exception is thrown (as this typically a sign of programming error). - */ - $httpBackend.flush = function(count) { - $rootScope.$digest(); - if (!responses.length) throw new Error('No pending request to flush !'); - - if (angular.isDefined(count)) { - while (count--) { - if (!responses.length) throw new Error('No more pending request to flush !'); - responses.shift()(); - } - } else { - while (responses.length) { - responses.shift()(); - } - } - $httpBackend.verifyNoOutstandingExpectation(); - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingExpectation - * @description - * Verifies that all of the requests defined via the `expect` api were made. If any of the - * requests were not made, verifyNoOutstandingExpectation throws an exception. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingExpectation); - * ``` - */ - $httpBackend.verifyNoOutstandingExpectation = function() { - $rootScope.$digest(); - if (expectations.length) { - throw new Error('Unsatisfied requests: ' + expectations.join(', ')); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingRequest - * @description - * Verifies that there are no outstanding requests that need to be flushed. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingRequest); - * ``` - */ - $httpBackend.verifyNoOutstandingRequest = function() { - if (responses.length) { - throw new Error('Unflushed requests: ' + responses.length); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#resetExpectations - * @description - * Resets all request expectations, but preserves all backend definitions. Typically, you would - * call resetExpectations during a multiple-phase test when you want to reuse the same instance of - * $httpBackend mock. - */ - $httpBackend.resetExpectations = function() { - expectations.length = 0; - responses.length = 0; - }; - - return $httpBackend; - - - function createShortMethods(prefix) { - angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) { - $httpBackend[prefix + method] = function(url, headers) { - return $httpBackend[prefix](method, url, undefined, headers); - }; - }); - - angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { - $httpBackend[prefix + method] = function(url, data, headers) { - return $httpBackend[prefix](method, url, data, headers); - }; - }); - } -} - -function MockHttpExpectation(method, url, data, headers) { - - this.data = data; - this.headers = headers; - - this.match = function(m, u, d, h) { - if (method != m) return false; - if (!this.matchUrl(u)) return false; - if (angular.isDefined(d) && !this.matchData(d)) return false; - if (angular.isDefined(h) && !this.matchHeaders(h)) return false; - return true; - }; - - this.matchUrl = function(u) { - if (!url) return true; - if (angular.isFunction(url.test)) return url.test(u); - return url == u; - }; - - this.matchHeaders = function(h) { - if (angular.isUndefined(headers)) return true; - if (angular.isFunction(headers)) return headers(h); - return angular.equals(headers, h); - }; - - this.matchData = function(d) { - if (angular.isUndefined(data)) return true; - if (data && angular.isFunction(data.test)) return data.test(d); - if (data && angular.isFunction(data)) return data(d); - if (data && !angular.isString(data)) return angular.equals(data, angular.fromJson(d)); - return data == d; - }; - - this.toString = function() { - return method + ' ' + url; - }; -} - -function createMockXhr() { - return new MockXhr(); -} - -function MockXhr() { - - // hack for testing $http, $httpBackend - MockXhr.$$lastInstance = this; - - this.open = function(method, url, async) { - this.$$method = method; - this.$$url = url; - this.$$async = async; - this.$$reqHeaders = {}; - this.$$respHeaders = {}; - }; - - this.send = function(data) { - this.$$data = data; - }; - - this.setRequestHeader = function(key, value) { - this.$$reqHeaders[key] = value; - }; - - this.getResponseHeader = function(name) { - // the lookup must be case insensitive, - // that's why we try two quick lookups first and full scan last - var header = this.$$respHeaders[name]; - if (header) return header; - - name = angular.lowercase(name); - header = this.$$respHeaders[name]; - if (header) return header; - - header = undefined; - angular.forEach(this.$$respHeaders, function(headerVal, headerName) { - if (!header && angular.lowercase(headerName) == name) header = headerVal; - }); - return header; - }; - - this.getAllResponseHeaders = function() { - var lines = []; - - angular.forEach(this.$$respHeaders, function(value, key) { - lines.push(key + ': ' + value); - }); - return lines.join('\n'); - }; - - this.abort = angular.noop; -} - - -/** - * @ngdoc service - * @name $timeout - * @description - * - * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" and "verifyNoPendingTasks" methods. - */ - -angular.mock.$TimeoutDecorator = function($delegate, $browser) { - - /** - * @ngdoc method - * @name $timeout#flush - * @description - * - * Flushes the queue of pending tasks. - * - * @param {number=} delay maximum timeout amount to flush up until - */ - $delegate.flush = function(delay) { - $browser.defer.flush(delay); - }; - - /** - * @ngdoc method - * @name $timeout#verifyNoPendingTasks - * @description - * - * Verifies that there are no pending tasks that need to be flushed. - */ - $delegate.verifyNoPendingTasks = function() { - if ($browser.deferredFns.length) { - throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + - formatPendingTasksAsString($browser.deferredFns)); - } - }; - - function formatPendingTasksAsString(tasks) { - var result = []; - angular.forEach(tasks, function(task) { - result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); - }); - - return result.join(', '); - } - - return $delegate; -}; - -angular.mock.$RAFDecorator = function($delegate) { - var queue = []; - var rafFn = function(fn) { - var index = queue.length; - queue.push(fn); - return function() { - queue.splice(index, 1); - }; - }; - - rafFn.supported = $delegate.supported; - - rafFn.flush = function() { - if(queue.length === 0) { - throw new Error('No rAF callbacks present'); - } - - var length = queue.length; - for(var i=0;i<length;i++) { - queue[i](); - } - - queue = []; - }; - - return rafFn; -}; - -angular.mock.$AsyncCallbackDecorator = function($delegate) { - var callbacks = []; - var addFn = function(fn) { - callbacks.push(fn); - }; - addFn.flush = function() { - angular.forEach(callbacks, function(fn) { - fn(); - }); - callbacks = []; - }; - return addFn; -}; - -/** - * - */ -angular.mock.$RootElementProvider = function() { - this.$get = function() { - return angular.element('<div ng-app></div>'); - }; -}; - -/** - * @ngdoc module - * @name ngMock - * @description - * - * # ngMock - * - * The `ngMock` module providers support to inject and mock Angular services into unit tests. - * In addition, ngMock also extends various core ng services such that they can be - * inspected and controlled in a synchronous manner within test code. - * - * - * <div doc-module-components="ngMock"></div> - * - */ -angular.module('ngMock', ['ng']).provider({ - $browser: angular.mock.$BrowserProvider, - $exceptionHandler: angular.mock.$ExceptionHandlerProvider, - $log: angular.mock.$LogProvider, - $interval: angular.mock.$IntervalProvider, - $httpBackend: angular.mock.$HttpBackendProvider, - $rootElement: angular.mock.$RootElementProvider -}).config(['$provide', function($provide) { - $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); - $provide.decorator('$$rAF', angular.mock.$RAFDecorator); - $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator); -}]); - -/** - * @ngdoc module - * @name ngMockE2E - * @module ngMockE2E - * @description - * - * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. - * Currently there is only one mock present in this module - - * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. - */ -angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { - $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); -}]); - -/** - * @ngdoc service - * @name $httpBackend - * @module ngMockE2E - * @description - * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of - * applications that use the {@link ng.$http $http service}. - * - * *Note*: For fake http backend implementation suitable for unit testing please see - * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. - * - * This implementation can be used to respond with static or dynamic responses via the `when` api - * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the - * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch - * templates from a webserver). - * - * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application - * is being developed with the real backend api replaced with a mock, it is often desirable for - * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch - * templates or static files from the webserver). To configure the backend with this behavior - * use the `passThrough` request handler of `when` instead of `respond`. - * - * Additionally, we don't want to manually have to flush mocked out requests like we do during unit - * testing. For this reason the e2e $httpBackend automatically flushes mocked out requests - * automatically, closely simulating the behavior of the XMLHttpRequest object. - * - * To setup the application to run with this http backend, you have to create a module that depends - * on the `ngMockE2E` and your application modules and defines the fake backend: - * - * ```js - * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); - * myAppDev.run(function($httpBackend) { - * phones = [{name: 'phone1'}, {name: 'phone2'}]; - * - * // returns the current list of phones - * $httpBackend.whenGET('/phones').respond(phones); - * - * // adds a new phone to the phones array - * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { - * phones.push(angular.fromJson(data)); - * }); - * $httpBackend.whenGET(/^\/templates\//).passThrough(); - * //... - * }); - * ``` - * - * Afterwards, bootstrap your app with this new module. - */ - -/** - * @ngdoc method - * @name $httpBackend#when - * @module ngMockE2E - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can return - * an array containing response status (number), response data (string), response headers - * (Object), and the text for the status (string). - * - passThrough – `{function()}` – Any request matching a backend definition with - * `passThrough` handler will be passed through to the real backend (an XHR request will be made - * to the server.) - */ - -/** - * @ngdoc method - * @name $httpBackend#whenGET - * @module ngMockE2E - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @module ngMockE2E - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @module ngMockE2E - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPOST - * @module ngMockE2E - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPUT - * @module ngMockE2E - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPATCH - * @module ngMockE2E - * @description - * Creates a new backend definition for PATCH requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @module ngMockE2E - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp} url HTTP url. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. - */ -angular.mock.e2e = {}; -angular.mock.e2e.$httpBackendDecorator = - ['$rootScope', '$delegate', '$browser', createHttpBackendMock]; - - -angular.mock.clearDataCache = function() { - var key, - cache = angular.element.cache; - - for(key in cache) { - if (Object.prototype.hasOwnProperty.call(cache,key)) { - var handle = cache[key].handle; - - handle && angular.element(handle.elem).off(); - delete cache[key]; - } - } -}; - - -if(window.jasmine || window.mocha) { - - var currentSpec = null, - isSpecRunning = function() { - return !!currentSpec; - }; - - - beforeEach(function() { - currentSpec = this; - }); - - afterEach(function() { - var injector = currentSpec.$injector; - - currentSpec.$injector = null; - currentSpec.$modules = null; - currentSpec = null; - - if (injector) { - injector.get('$rootElement').off(); - injector.get('$browser').pollFns.length = 0; - } - - angular.mock.clearDataCache(); - - // clean up jquery's fragment cache - angular.forEach(angular.element.fragments, function(val, key) { - delete angular.element.fragments[key]; - }); - - MockXhr.$$lastInstance = null; - - angular.forEach(angular.callbacks, function(val, key) { - delete angular.callbacks[key]; - }); - angular.callbacks.counter = 0; - }); - - /** - * @ngdoc function - * @name angular.mock.module - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * - * This function registers a module configuration code. It collects the configuration information - * which will be used when the injector is created by {@link angular.mock.inject inject}. - * - * See {@link angular.mock.inject inject} for usage example - * - * @param {...(string|Function|Object)} fns any number of modules which are represented as string - * aliases or as anonymous module initialization functions. The modules are used to - * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an - * object literal is passed they will be register as values in the module, the key being - * the module name and the value being what is returned. - */ - window.module = angular.mock.module = function() { - var moduleFns = Array.prototype.slice.call(arguments, 0); - return isSpecRunning() ? workFn() : workFn; - ///////////////////// - function workFn() { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not register a module!'); - } else { - var modules = currentSpec.$modules || (currentSpec.$modules = []); - angular.forEach(moduleFns, function(module) { - if (angular.isObject(module) && !angular.isArray(module)) { - modules.push(function($provide) { - angular.forEach(module, function(value, key) { - $provide.value(key, value); - }); - }); - } else { - modules.push(module); - } - }); - } - } - }; - - /** - * @ngdoc function - * @name angular.mock.inject - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * - * The inject function wraps a function into an injectable function. The inject() creates new - * instance of {@link auto.$injector $injector} per test, which is then used for - * resolving references. - * - * - * ## Resolving References (Underscore Wrapping) - * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this - * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable - * that is declared in the scope of the `describe()` block. Since we would, most likely, want - * the variable to have the same name of the reference we have a problem, since the parameter - * to the `inject()` function would hide the outer variable. - * - * To help with this, the injected parameters can, optionally, be enclosed with underscores. - * These are ignored by the injector when the reference name is resolved. - * - * For example, the parameter `_myService_` would be resolved as the reference `myService`. - * Since it is available in the function body as _myService_, we can then assign it to a variable - * defined in an outer scope. - * - * ``` - * // Defined out reference variable outside - * var myService; - * - * // Wrap the parameter in underscores - * beforeEach( inject( function(_myService_){ - * myService = _myService_; - * })); - * - * // Use myService in a series of tests. - * it('makes use of myService', function() { - * myService.doStuff(); - * }); - * - * ``` - * - * See also {@link angular.mock.module angular.mock.module} - * - * ## Example - * Example of what a typical jasmine tests looks like with the inject method. - * ```js - * - * angular.module('myApplicationModule', []) - * .value('mode', 'app') - * .value('version', 'v1.0.1'); - * - * - * describe('MyApp', function() { - * - * // You need to load modules that you want to test, - * // it loads only the "ng" module by default. - * beforeEach(module('myApplicationModule')); - * - * - * // inject() is used to inject arguments of all given functions - * it('should provide a version', inject(function(mode, version) { - * expect(version).toEqual('v1.0.1'); - * expect(mode).toEqual('app'); - * })); - * - * - * // The inject and module method can also be used inside of the it or beforeEach - * it('should override a version and test the new version is injected', function() { - * // module() takes functions or strings (module aliases) - * module(function($provide) { - * $provide.value('version', 'overridden'); // override version here - * }); - * - * inject(function(version) { - * expect(version).toEqual('overridden'); - * }); - * }); - * }); - * - * ``` - * - * @param {...Function} fns any number of functions which will be injected using the injector. - */ - - - - var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { - this.message = e.message; - this.name = e.name; - if (e.line) this.line = e.line; - if (e.sourceId) this.sourceId = e.sourceId; - if (e.stack && errorForStack) - this.stack = e.stack + '\n' + errorForStack.stack; - if (e.stackArray) this.stackArray = e.stackArray; - }; - ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; - - window.inject = angular.mock.inject = function() { - var blockFns = Array.prototype.slice.call(arguments, 0); - var errorForStack = new Error('Declaration Location'); - return isSpecRunning() ? workFn.call(currentSpec) : workFn; - ///////////////////// - function workFn() { - var modules = currentSpec.$modules || []; - - modules.unshift('ngMock'); - modules.unshift('ng'); - var injector = currentSpec.$injector; - if (!injector) { - injector = currentSpec.$injector = angular.injector(modules); - } - for(var i = 0, ii = blockFns.length; i < ii; i++) { - try { - /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ - injector.invoke(blockFns[i] || angular.noop, this); - /* jshint +W040 */ - } catch (e) { - if (e.stack && errorForStack) { - throw new ErrorAddingDeclarationLocationStack(e, errorForStack); - } - throw e; - } finally { - errorForStack = null; - } - } - } - }; -} - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-mocks/bower.json b/platforms/browser/www/lib/angular-mocks/bower.json deleted file mode 100644 index 09d2e7cf..00000000 --- a/platforms/browser/www/lib/angular-mocks/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.2.16", - "main": "./angular-mocks.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-moment/angular-moment.js b/platforms/browser/www/lib/angular-moment/angular-moment.js deleted file mode 100644 index 47157f7e..00000000 --- a/platforms/browser/www/lib/angular-moment/angular-moment.js +++ /dev/null @@ -1,727 +0,0 @@ - -/* angular-moment.js / v1.0.0-beta.3 / (c) 2013, 2014, 2015 Uri Shaked / MIT Licence */ - -'format amd'; -/* global define */ - -(function () { - 'use strict'; - - function isUndefinedOrNull(val) { - return angular.isUndefined(val) || val === null; - } - - function requireMoment() { - try { - return require('moment'); // Using nw.js or browserify? - } catch (e) { - throw new Error('Please install moment via npm. Please reference to: https://github.com/urish/angular-moment'); // Add wiki/troubleshooting section? - } - } - - function angularMoment(angular, moment) { - - if(typeof moment === 'undefined') { - if(typeof require === 'function') { - moment = requireMoment(); - }else{ - throw new Error('Moment cannot be found by angular-moment! Please reference to: https://github.com/urish/angular-moment'); // Add wiki/troubleshooting section? - } - } - - /** - * @ngdoc overview - * @name angularMoment - * - * @description - * angularMoment module provides moment.js functionality for angular.js apps. - */ - return angular.module('angularMoment', []) - - /** - * @ngdoc object - * @name angularMoment.config:angularMomentConfig - * - * @description - * Common configuration of the angularMoment module - */ - .constant('angularMomentConfig', { - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#preprocess - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {function} A preprocessor function that will be applied on all incoming dates - * - * @description - * Defines a preprocessor function to apply on all input dates (e.g. the input of `am-time-ago`, - * `amCalendar`, etc.). The function must return a `moment` object. - * - * @example - * // Causes angular-moment to always treat the input values as unix timestamps - * angularMomentConfig.preprocess = function(value) { - * return moment.unix(value); - * } - */ - preprocess: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#timezone - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {string} The default timezone - * - * @description - * The default timezone (e.g. 'Europe/London'). Empty string by default (does not apply - * any timezone shift). - * - * NOTE: This option requires moment-timezone >= 0.3.0. - */ - timezone: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#format - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {string} The pre-conversion format of the date - * - * @description - * Specify the format of the input date. Essentially it's a - * default and saves you from specifying a format in every - * element. Overridden by element attr. Null by default. - */ - format: null, - - /** - * @ngdoc property - * @name angularMoment.config.angularMomentConfig#statefulFilters - * @propertyOf angularMoment.config:angularMomentConfig - * @returns {boolean} Whether angular-moment filters should be stateless (or not) - * - * @description - * Specifies whether the filters included with angular-moment are stateful. - * Stateful filters will automatically re-evaluate whenever you change the timezone - * or locale settings, but may negatively impact performance. true by default. - */ - statefulFilters: true - }) - - /** - * @ngdoc object - * @name angularMoment.object:moment - * - * @description - * moment global (as provided by the moment.js library) - */ - .constant('moment', moment) - - /** - * @ngdoc object - * @name angularMoment.config:amTimeAgoConfig - * @module angularMoment - * - * @description - * configuration specific to the amTimeAgo directive - */ - .constant('amTimeAgoConfig', { - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#withoutSuffix - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {boolean} Whether to include a suffix in am-time-ago directive - * - * @description - * Defaults to false. - */ - withoutSuffix: false, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#serverTime - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {number} Server time in milliseconds since the epoch - * - * @description - * If set, time ago will be calculated relative to the given value. - * If null, local time will be used. Defaults to null. - */ - serverTime: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#titleFormat - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {string} The format of the date to be displayed in the title of the element. If null, - * the directive set the title of the element. - * - * @description - * The format of the date used for the title of the element. null by default. - */ - titleFormat: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#fullDateThreshold - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {number} The minimum number of days for showing a full date instead of relative time - * - * @description - * The threshold for displaying a full date. The default is null, which means the date will always - * be relative, and full date will never be displayed. - */ - fullDateThreshold: null, - - /** - * @ngdoc property - * @name angularMoment.config.amTimeAgoConfig#fullDateFormat - * @propertyOf angularMoment.config:amTimeAgoConfig - * @returns {string} The format to use when displaying a full date. - * - * @description - * Specify the format of the date when displayed as full date. null by default. - */ - fullDateFormat: null - }) - - /** - * @ngdoc directive - * @name angularMoment.directive:amTimeAgo - * @module angularMoment - * - * @restrict A - */ - .directive('amTimeAgo', ['$window', 'moment', 'amMoment', 'amTimeAgoConfig', function ($window, moment, amMoment, amTimeAgoConfig) { - - return function (scope, element, attr) { - var activeTimeout = null; - var currentValue; - var withoutSuffix = amTimeAgoConfig.withoutSuffix; - var titleFormat = amTimeAgoConfig.titleFormat; - var fullDateThreshold = amTimeAgoConfig.fullDateThreshold; - var fullDateFormat = amTimeAgoConfig.fullDateFormat; - var localDate = new Date().getTime(); - var modelName = attr.amTimeAgo; - var currentFrom; - var isTimeElement = ('TIME' === element[0].nodeName.toUpperCase()); - var setTitleTime = !element.attr('title'); - - function getNow() { - var now; - if (currentFrom) { - now = currentFrom; - } else if (amTimeAgoConfig.serverTime) { - var localNow = new Date().getTime(); - var nowMillis = localNow - localDate + amTimeAgoConfig.serverTime; - now = moment(nowMillis); - } - else { - now = moment(); - } - return now; - } - - function cancelTimer() { - if (activeTimeout) { - $window.clearTimeout(activeTimeout); - activeTimeout = null; - } - } - - function updateTime(momentInstance) { - var daysAgo = getNow().diff(momentInstance, 'day'); - var showFullDate = fullDateThreshold && daysAgo >= fullDateThreshold; - - if (showFullDate) { - element.text(momentInstance.format(fullDateFormat)); - } else { - element.text(momentInstance.from(getNow(), withoutSuffix)); - } - - if (titleFormat && setTitleTime) { - element.attr('title', momentInstance.local().format(titleFormat)); - } - - if (!showFullDate) { - var howOld = Math.abs(getNow().diff(momentInstance, 'minute')); - var secondsUntilUpdate = 3600; - if (howOld < 1) { - secondsUntilUpdate = 1; - } else if (howOld < 60) { - secondsUntilUpdate = 30; - } else if (howOld < 180) { - secondsUntilUpdate = 300; - } - - activeTimeout = $window.setTimeout(function () { - updateTime(momentInstance); - }, secondsUntilUpdate * 1000); - } - } - - function updateDateTimeAttr(value) { - if (isTimeElement) { - element.attr('datetime', value); - } - } - - function updateMoment() { - cancelTimer(); - if (currentValue) { - var momentValue = amMoment.preprocessDate(currentValue); - updateTime(momentValue); - updateDateTimeAttr(momentValue.toISOString()); - } - } - - scope.$watch(modelName, function (value) { - if (isUndefinedOrNull(value) || (value === '')) { - cancelTimer(); - if (currentValue) { - element.text(''); - updateDateTimeAttr(''); - currentValue = null; - } - return; - } - - currentValue = value; - updateMoment(); - }); - - if (angular.isDefined(attr.amFrom)) { - scope.$watch(attr.amFrom, function (value) { - if (isUndefinedOrNull(value) || (value === '')) { - currentFrom = null; - } else { - currentFrom = moment(value); - } - updateMoment(); - }); - } - - if (angular.isDefined(attr.amWithoutSuffix)) { - scope.$watch(attr.amWithoutSuffix, function (value) { - if (typeof value === 'boolean') { - withoutSuffix = value; - updateMoment(); - } else { - withoutSuffix = amTimeAgoConfig.withoutSuffix; - } - }); - } - - attr.$observe('amFullDateThreshold', function (newValue) { - fullDateThreshold = newValue; - updateMoment(); - }); - - attr.$observe('amFullDateFormat', function (newValue) { - fullDateFormat = newValue; - updateMoment(); - }); - - scope.$on('$destroy', function () { - cancelTimer(); - }); - - scope.$on('amMoment:localeChanged', function () { - updateMoment(); - }); - }; - }]) - - /** - * @ngdoc service - * @name angularMoment.service.amMoment - * @module angularMoment - */ - .service('amMoment', ['moment', '$rootScope', '$log', 'angularMomentConfig', function (moment, $rootScope, $log, angularMomentConfig) { - var defaultTimezone = null; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#changeLocale - * @methodOf angularMoment.service.amMoment - * - * @description - * Changes the locale for moment.js and updates all the am-time-ago directive instances - * with the new locale. Also broadcasts an `amMoment:localeChanged` event on $rootScope. - * - * @param {string} locale Locale code (e.g. en, es, ru, pt-br, etc.) - * @param {object} customization object of locale strings to override - */ - this.changeLocale = function (locale, customization) { - var result = moment.locale(locale, customization); - if (angular.isDefined(locale)) { - $rootScope.$broadcast('amMoment:localeChanged'); - - } - return result; - }; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#changeTimezone - * @methodOf angularMoment.service.amMoment - * - * @description - * Changes the default timezone for amCalendar, amDateFormat and amTimeAgo. Also broadcasts an - * `amMoment:timezoneChanged` event on $rootScope. - * - * Note: this method works only if moment-timezone > 0.3.0 is loaded - * - * @param {string} timezone Timezone name (e.g. UTC) - */ - this.changeTimezone = function (timezone) { - if (moment.tz && moment.tz.setDefault) { - moment.tz.setDefault(timezone); - $rootScope.$broadcast('amMoment:timezoneChanged'); - } else { - $log.warn('angular-moment: changeTimezone() works only with moment-timezone.js v0.3.0 or greater.'); - } - angularMomentConfig.timezone = timezone; - defaultTimezone = timezone; - }; - - /** - * @ngdoc function - * @name angularMoment.service.amMoment#preprocessDate - * @methodOf angularMoment.service.amMoment - * - * @description - * Preprocess a given value and convert it into a Moment instance appropriate for use in the - * am-time-ago directive and the filters. The behavior of this function can be overriden by - * setting `angularMomentConfig.preprocess`. - * - * @param {*} value The value to be preprocessed - * @return {Moment} A `moment` object - */ - this.preprocessDate = function (value) { - // Configure the default timezone if needed - if (defaultTimezone !== angularMomentConfig.timezone) { - this.changeTimezone(angularMomentConfig.timezone); - } - - if (angularMomentConfig.preprocess) { - return angularMomentConfig.preprocess(value); - } - - if (!isNaN(parseFloat(value)) && isFinite(value)) { - // Milliseconds since the epoch - return moment(parseInt(value, 10)); - } - - // else just returns the value as-is. - return moment(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amParse - * @module angularMoment - */ - .filter('amParse', ['moment', function (moment) { - return function (value, format) { - return moment(value, format); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amFromUnix - * @module angularMoment - */ - .filter('amFromUnix', ['moment', function (moment) { - return function (value) { - return moment.unix(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amUtc - * @module angularMoment - */ - .filter('amUtc', ['moment', function (moment) { - return function (value) { - return moment.utc(value); - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amUtcOffset - * @module angularMoment - * - * @description - * Adds a UTC offset to the given timezone object. The offset can be a number of minutes, or a string such as - * '+0300', '-0300' or 'Z'. - */ - .filter('amUtcOffset', ['amMoment', function (amMoment) { - function amUtcOffset(value, offset) { - return amMoment.preprocessDate(value).utcOffset(offset); - } - - return amUtcOffset; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amLocal - * @module angularMoment - */ - .filter('amLocal', ['moment', function (moment) { - return function (value) { - return moment.isMoment(value) ? value.local() : null; - }; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amTimezone - * @module angularMoment - * - * @description - * Apply a timezone onto a given moment object, e.g. 'America/Phoenix'). - * - * You need to include moment-timezone.js for timezone support. - */ - .filter('amTimezone', ['amMoment', 'angularMomentConfig', '$log', function (amMoment, angularMomentConfig, $log) { - function amTimezone(value, timezone) { - var aMoment = amMoment.preprocessDate(value); - - if (!timezone) { - return aMoment; - } - - if (aMoment.tz) { - return aMoment.tz(timezone); - } else { - $log.warn('angular-moment: named timezone specified but moment.tz() is undefined. Did you forget to include moment-timezone.js ?'); - return aMoment; - } - } - - return amTimezone; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amCalendar - * @module angularMoment - */ - .filter('amCalendar', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amCalendarFilter(value) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - return date.isValid() ? date.calendar() : ''; - } - - // Since AngularJS 1.3, filters have to explicitly define being stateful - // (this is no longer the default). - amCalendarFilter.$stateful = angularMomentConfig.statefulFilters; - - return amCalendarFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDifference - * @module angularMoment - */ - .filter('amDifference', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amDifferenceFilter(value, otherValue, unit, usePrecision) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - var date2 = !isUndefinedOrNull(otherValue) ? amMoment.preprocessDate(otherValue) : moment(); - - if (!date.isValid() || !date2.isValid()) { - return ''; - } - - return date.diff(date2, unit, usePrecision); - } - - amDifferenceFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDifferenceFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDateFormat - * @module angularMoment - * @function - */ - .filter('amDateFormat', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amDateFormatFilter(value, format) { - if (isUndefinedOrNull(value)) { - return ''; - } - - var date = amMoment.preprocessDate(value); - if (!date.isValid()) { - return ''; - } - - return date.format(format); - } - - amDateFormatFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDateFormatFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amDurationFormat - * @module angularMoment - * @function - */ - .filter('amDurationFormat', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amDurationFormatFilter(value, format, suffix) { - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment.duration(value, format).humanize(suffix); - } - - amDurationFormatFilter.$stateful = angularMomentConfig.statefulFilters; - - return amDurationFormatFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amTimeAgo - * @module angularMoment - * @function - */ - .filter('amTimeAgo', ['moment', 'amMoment', 'angularMomentConfig', function (moment, amMoment, angularMomentConfig) { - function amTimeAgoFilter(value, suffix, from) { - var date, dateFrom; - - if (isUndefinedOrNull(value)) { - return ''; - } - - value = amMoment.preprocessDate(value); - date = moment(value); - if (!date.isValid()) { - return ''; - } - - dateFrom = moment(from); - if (!isUndefinedOrNull(from) && dateFrom.isValid()) { - return date.from(dateFrom, suffix); - } - - return date.fromNow(suffix); - } - - amTimeAgoFilter.$stateful = angularMomentConfig.statefulFilters; - - return amTimeAgoFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amSubtract - * @module angularMoment - * @function - */ - .filter('amSubtract', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amSubtractFilter(value, amount, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).subtract(parseInt(amount, 10), type); - } - - amSubtractFilter.$stateful = angularMomentConfig.statefulFilters; - - return amSubtractFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amAdd - * @module angularMoment - * @function - */ - .filter('amAdd', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amAddFilter(value, amount, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).add(parseInt(amount, 10), type); - } - - amAddFilter.$stateful = angularMomentConfig.statefulFilters; - - return amAddFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amStartOf - * @module angularMoment - * @function - */ - .filter('amStartOf', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amStartOfFilter(value, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).startOf(type); - } - - amStartOfFilter.$stateful = angularMomentConfig.statefulFilters; - - return amStartOfFilter; - }]) - - /** - * @ngdoc filter - * @name angularMoment.filter:amEndOf - * @module angularMoment - * @function - */ - .filter('amEndOf', ['moment', 'angularMomentConfig', function (moment, angularMomentConfig) { - function amEndOfFilter(value, type) { - - if (isUndefinedOrNull(value)) { - return ''; - } - - return moment(value).endOf(type); - } - - amEndOfFilter.$stateful = angularMomentConfig.statefulFilters; - - return amEndOfFilter; - }]); - } - - if (typeof define === 'function' && define.amd) { - define(['angular', 'moment'], angularMoment); - } else if (typeof module !== 'undefined' && module && module.exports) { - angularMoment(require('angular'), require('moment')); - module.exports = 'angularMoment'; - } else { - angularMoment(angular, (typeof global !== 'undefined' ? global : window).moment); - } -})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-resource/.bower.json b/platforms/browser/www/lib/angular-resource/.bower.json deleted file mode 100644 index a7e0b984..00000000 --- a/platforms/browser/www/lib/angular-resource/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.2.16", - "main": "./angular-resource.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-resource", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "06a1d9f570fd47b767b019881d523a3f3416ca93" - }, - "_source": "git://github.com/angular/bower-angular-resource.git", - "_target": "1.2.16", - "_originalSource": "angular-resource" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-resource/README.md b/platforms/browser/www/lib/angular-resource/README.md deleted file mode 100644 index c8ac8146..00000000 --- a/platforms/browser/www/lib/angular-resource/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-resource - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngResource). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-resource -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-resource/angular-resource.js"></script> -``` - -And add `ngResource` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngResource']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngResource). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-resource/angular-resource.js b/platforms/browser/www/lib/angular-resource/angular-resource.js deleted file mode 100644 index 7014984c..00000000 --- a/platforms/browser/www/lib/angular-resource/angular-resource.js +++ /dev/null @@ -1,610 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $resourceMinErr = angular.$$minErr('$resource'); - -// Helper functions and regex to lookup a dotted path on an object -// stopping at undefined/null. The path must be composed of ASCII -// identifiers (just like $parse) -var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/; - -function isValidDottedPath(path) { - return (path != null && path !== '' && path !== 'hasOwnProperty' && - MEMBER_NAME_REGEX.test('.' + path)); -} - -function lookupDottedPath(obj, path) { - if (!isValidDottedPath(path)) { - throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path); - } - var keys = path.split('.'); - for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) { - var key = keys[i]; - obj = (obj !== null) ? obj[key] : undefined; - } - return obj; -} - -/** - * Create a shallow copy of an object and clear other fields from the destination - */ -function shallowClearAndCopy(src, dst) { - dst = dst || {}; - - angular.forEach(dst, function(value, key){ - delete dst[key]; - }); - - for (var key in src) { - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - -/** - * @ngdoc module - * @name ngResource - * @description - * - * # ngResource - * - * The `ngResource` module provides interaction support with RESTful services - * via the $resource service. - * - * - * <div doc-module-components="ngResource"></div> - * - * See {@link ngResource.$resource `$resource`} for usage. - */ - -/** - * @ngdoc service - * @name $resource - * @requires $http - * - * @description - * A factory which creates a resource object that lets you interact with - * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. - * - * The returned resource object has action methods which provide high-level behaviors without - * the need to interact with the low level {@link ng.$http $http} service. - * - * Requires the {@link ngResource `ngResource`} module to be installed. - * - * @param {string} url A parametrized URL template with parameters prefixed by `:` as in - * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), it will be respected. - * - * If you are using a url with a suffix, just add the suffix, like this: - * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')` - * or even `$resource('http://example.com/resource/:resource_id.:format')` - * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be - * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you - * can escape it with `/\.`. - * - * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in - * `actions` methods. If any of the parameter value is a function, it will be executed every time - * when a param value needs to be obtained for a request (unless the param was overridden). - * - * Each key value in the parameter object is first bound to url template if present and then any - * excess keys are appended to the url search query after the `?`. - * - * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in - * URL `/path/greet?salutation=Hello`. - * - * If the parameter value is prefixed with `@` then the value of that parameter is extracted from - * the data object (useful for non-GET operations). - * - * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend - * the default set of resource actions. The declaration should be created in the format of {@link - * ng.$http#usage_parameters $http.config}: - * - * {action1: {method:?, params:?, isArray:?, headers:?, ...}, - * action2: {method:?, params:?, isArray:?, headers:?, ...}, - * ...} - * - * Where: - * - * - **`action`** – {string} – The name of action. This name becomes the name of the method on - * your resource object. - * - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, - * `DELETE`, and `JSONP`. - * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of - * the parameter value is a function, it will be executed every time when a param value needs to - * be obtained for a request (unless the param was overridden). - * - **`url`** – {string} – action specific `url` override. The url templating is supported just - * like for the resource-level urls. - * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, - * see `returns` section. - * - **`transformRequest`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **`transformResponse`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that - * should abort the request when resolved. - * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See - * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5) - * for more information. - * - **`responseType`** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods - - * `response` and `responseError`. Both `response` and `responseError` interceptors get called - * with `http response` object. See {@link ng.$http $http interceptors}. - * - * @returns {Object} A resource "class" object with methods for the default set of resource actions - * optionally extended with custom `actions`. The default set contains these actions: - * ```js - * { 'get': {method:'GET'}, - * 'save': {method:'POST'}, - * 'query': {method:'GET', isArray:true}, - * 'remove': {method:'DELETE'}, - * 'delete': {method:'DELETE'} }; - * ``` - * - * Calling these methods invoke an {@link ng.$http} with the specified http method, - * destination and parameters. When the data is returned from the server then the object is an - * instance of the resource class. The actions `save`, `remove` and `delete` are available on it - * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create, - * read, update, delete) on server-side data like this: - * ```js - * var User = $resource('/user/:userId', {userId:'@id'}); - * var user = User.get({userId:123}, function() { - * user.abc = true; - * user.$save(); - * }); - * ``` - * - * It is important to realize that invoking a $resource object method immediately returns an - * empty reference (object or array depending on `isArray`). Once the data is returned from the - * server the existing reference is populated with the actual data. This is a useful trick since - * usually the resource is assigned to a model which is then rendered by the view. Having an empty - * object results in no rendering, once the data arrives from the server then the object is - * populated with the data and the view automatically re-renders itself showing the new data. This - * means that in most cases one never has to write a callback function for the action methods. - * - * The action methods on the class object or instance object can be invoked with the following - * parameters: - * - * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])` - * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` - * - non-GET instance actions: `instance.$action([parameters], [success], [error])` - * - * Success callback is called with (value, responseHeaders) arguments. Error callback is called - * with (httpResponse) argument. - * - * Class actions return empty instance (with additional properties below). - * Instance actions return promise of the action. - * - * The Resource instances and collection have these additional properties: - * - * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this - * instance or collection. - * - * On success, the promise is resolved with the same resource instance or collection object, - * updated with data from server. This makes it easy to use in - * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view - * rendering until the resource(s) are loaded. - * - * On failure, the promise is resolved with the {@link ng.$http http response} object, without - * the `resource` property. - * - * If an interceptor object was provided, the promise will instead be resolved with the value - * returned by the interceptor. - * - * - `$resolved`: `true` after first server interaction is completed (either with success or - * rejection), `false` before that. Knowing if the Resource has been resolved is useful in - * data-binding. - * - * @example - * - * # Credit card resource - * - * ```js - // Define CreditCard class - var CreditCard = $resource('/user/:userId/card/:cardId', - {userId:123, cardId:'@id'}, { - charge: {method:'POST', params:{charge:true}} - }); - - // We can retrieve a collection from the server - var cards = CreditCard.query(function() { - // GET: /user/123/card - // server returns: [ {id:456, number:'1234', name:'Smith'} ]; - - var card = cards[0]; - // each item is an instance of CreditCard - expect(card instanceof CreditCard).toEqual(true); - card.name = "J. Smith"; - // non GET methods are mapped onto the instances - card.$save(); - // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'} - // server returns: {id:456, number:'1234', name: 'J. Smith'}; - - // our custom method is mapped as well. - card.$charge({amount:9.99}); - // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'} - }); - - // we can create an instance as well - var newCard = new CreditCard({number:'0123'}); - newCard.name = "Mike Smith"; - newCard.$save(); - // POST: /user/123/card {number:'0123', name:'Mike Smith'} - // server returns: {id:789, number:'0123', name: 'Mike Smith'}; - expect(newCard.id).toEqual(789); - * ``` - * - * The object returned from this function execution is a resource "class" which has "static" method - * for each action in the definition. - * - * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and - * `headers`. - * When the data is returned from the server then the object is an instance of the resource type and - * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD - * operations (create, read, update, delete) on server-side data. - - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(user) { - user.abc = true; - user.$save(); - }); - ``` - * - * It's worth noting that the success callback for `get`, `query` and other methods gets passed - * in the response that came from the server as well as $http header getter function, so one - * could rewrite the above example and get access to http headers as: - * - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(u, getResponseHeaders){ - u.abc = true; - u.$save(function(u, putResponseHeaders) { - //u => saved user object - //putResponseHeaders => $http header getter - }); - }); - ``` - * - * You can also access the raw `$http` promise via the `$promise` property on the object returned - * - ``` - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}) - .$promise.then(function(user) { - $scope.user = user; - }); - ``` - - * # Creating a custom 'PUT' request - * In this example we create a custom method on our resource to make a PUT request - * ```js - * var app = angular.module('app', ['ngResource', 'ngRoute']); - * - * // Some APIs expect a PUT request in the format URL/object/ID - * // Here we are creating an 'update' method - * app.factory('Notes', ['$resource', function($resource) { - * return $resource('/notes/:id', null, - * { - * 'update': { method:'PUT' } - * }); - * }]); - * - * // In our controller we get the ID from the URL using ngRoute and $routeParams - * // We pass in $routeParams and our Notes factory along with $scope - * app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', - function($scope, $routeParams, Notes) { - * // First get a note object from the factory - * var note = Notes.get({ id:$routeParams.id }); - * $id = note.id; - * - * // Now call update passing in the ID first then the object you are updating - * Notes.update({ id:$id }, note); - * - * // This will PUT /notes/ID with the note object in the request payload - * }]); - * ``` - */ -angular.module('ngResource', ['ng']). - factory('$resource', ['$http', '$q', function($http, $q) { - - var DEFAULT_ACTIONS = { - 'get': {method:'GET'}, - 'save': {method:'POST'}, - 'query': {method:'GET', isArray:true}, - 'remove': {method:'DELETE'}, - 'delete': {method:'DELETE'} - }; - var noop = angular.noop, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy, - isFunction = angular.isFunction; - - /** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); - } - - - /** - * This method is intended for encoding *key* or *value* parts of query component. We need a - * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't - * have to be encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); - } - - function Route(template, defaults) { - this.template = template; - this.defaults = defaults || {}; - this.urlParams = {}; - } - - Route.prototype = { - setUrlParams: function(config, params, actionUrl) { - var self = this, - url = actionUrl || self.template, - val, - encodedVal; - - var urlParams = self.urlParams = {}; - forEach(url.split(/\W/), function(param){ - if (param === 'hasOwnProperty') { - throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name."); - } - if (!(new RegExp("^\\d+$").test(param)) && param && - (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { - urlParams[param] = true; - } - }); - url = url.replace(/\\:/g, ':'); - - params = params || {}; - forEach(self.urlParams, function(_, urlParam){ - val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; - if (angular.isDefined(val) && val !== null) { - encodedVal = encodeUriSegment(val); - url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { - return encodedVal + p1; - }); - } else { - url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, - leadingSlashes, tail) { - if (tail.charAt(0) == '/') { - return tail; - } else { - return leadingSlashes + tail; - } - }); - } - }); - - // strip trailing slashes and set the url - url = url.replace(/\/+$/, '') || '/'; - // then replace collapse `/.` if found in the last URL path segment before the query - // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x` - url = url.replace(/\/\.(?=\w+($|\?))/, '.'); - // replace escaped `/\.` with `/.` - config.url = url.replace(/\/\\\./, '/.'); - - - // set params - delegate param encoding to $http - forEach(params, function(value, key){ - if (!self.urlParams[key]) { - config.params = config.params || {}; - config.params[key] = value; - } - }); - } - }; - - - function resourceFactory(url, paramDefaults, actions) { - var route = new Route(url); - - actions = extend({}, DEFAULT_ACTIONS, actions); - - function extractParams(data, actionParams){ - var ids = {}; - actionParams = extend({}, paramDefaults, actionParams); - forEach(actionParams, function(value, key){ - if (isFunction(value)) { value = value(); } - ids[key] = value && value.charAt && value.charAt(0) == '@' ? - lookupDottedPath(data, value.substr(1)) : value; - }); - return ids; - } - - function defaultResponseInterceptor(response) { - return response.resource; - } - - function Resource(value){ - shallowClearAndCopy(value || {}, this); - } - - forEach(actions, function(action, name) { - var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); - - Resource[name] = function(a1, a2, a3, a4) { - var params = {}, data, success, error; - - /* jshint -W086 */ /* (purposefully fall through case statements) */ - switch(arguments.length) { - case 4: - error = a4; - success = a3; - //fallthrough - case 3: - case 2: - if (isFunction(a2)) { - if (isFunction(a1)) { - success = a1; - error = a2; - break; - } - - success = a2; - error = a3; - //fallthrough - } else { - params = a1; - data = a2; - success = a3; - break; - } - case 1: - if (isFunction(a1)) success = a1; - else if (hasBody) data = a1; - else params = a1; - break; - case 0: break; - default: - throw $resourceMinErr('badargs', - "Expected up to 4 arguments [params, data, success, error], got {0} arguments", - arguments.length); - } - /* jshint +W086 */ /* (purposefully fall through case statements) */ - - var isInstanceCall = this instanceof Resource; - var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); - var httpConfig = {}; - var responseInterceptor = action.interceptor && action.interceptor.response || - defaultResponseInterceptor; - var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || - undefined; - - forEach(action, function(value, key) { - if (key != 'params' && key != 'isArray' && key != 'interceptor') { - httpConfig[key] = copy(value); - } - }); - - if (hasBody) httpConfig.data = data; - route.setUrlParams(httpConfig, - extend({}, extractParams(data, action.params || {}), params), - action.url); - - var promise = $http(httpConfig).then(function(response) { - var data = response.data, - promise = value.$promise; - - if (data) { - // Need to convert action.isArray to boolean in case it is undefined - // jshint -W018 - if (angular.isArray(data) !== (!!action.isArray)) { - throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' + - 'response to contain an {0} but got an {1}', - action.isArray?'array':'object', angular.isArray(data)?'array':'object'); - } - // jshint +W018 - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - value.push(new Resource(item)); - }); - } else { - shallowClearAndCopy(data, value); - value.$promise = promise; - } - } - - value.$resolved = true; - - response.resource = value; - - return response; - }, function(response) { - value.$resolved = true; - - (error||noop)(response); - - return $q.reject(response); - }); - - promise = promise.then( - function(response) { - var value = responseInterceptor(response); - (success||noop)(value, response.headers); - return value; - }, - responseErrorInterceptor); - - if (!isInstanceCall) { - // we are creating instance / collection - // - set the initial promise - // - return the instance / collection - value.$promise = promise; - value.$resolved = false; - - return value; - } - - // instance call - return promise; - }; - - - Resource.prototype['$' + name] = function(params, success, error) { - if (isFunction(params)) { - error = success; success = params; params = {}; - } - var result = Resource[name].call(this, params, this, success, error); - return result.$promise || result; - }; - }); - - Resource.bind = function(additionalParamDefaults){ - return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions); - }; - - return Resource; - } - - return resourceFactory; - }]); - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-resource/angular-resource.min.js b/platforms/browser/www/lib/angular-resource/angular-resource.min.js deleted file mode 100644 index eac389ed..00000000 --- a/platforms/browser/www/lib/angular-resource/angular-resource.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&& -b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f<c&&k!==A;f++){var g=a[f];k=null!==k?k[g]:A}}else k=b;e[d]=k});return e}function e(a){return a.resource}function f(a){D(a||{},this)}var F=new c(n);l=x({},B,l);s(l,function(h,d){var c=/^(POST|PUT|PATCH)$/i.test(h.method);f[d]=function(b,d,k,w){var q={},n,l,y;switch(arguments.length){case 4:y=w,l=k;case 3:case 2:if(u(d)){if(u(b)){l= -b;y=d;break}l=d;y=k}else{q=b;n=d;l=k;break}case 1:u(b)?l=b:c?n=b:q=b;break;case 0:break;default:throw v("badargs",arguments.length);}var t=this instanceof f,m=t?n:h.isArray?[]:new f(n),z={},B=h.interceptor&&h.interceptor.response||e,C=h.interceptor&&h.interceptor.responseError||A;s(h,function(a,b){"params"!=b&&("isArray"!=b&&"interceptor"!=b)&&(z[b]=G(a))});c&&(z.data=n);F.setUrlParams(z,x({},r(n,h.params||{}),q),h.url);q=p(z).then(function(b){var d=b.data,k=m.$promise;if(d){if(a.isArray(d)!==!!h.isArray)throw v("badcfg", -h.isArray?"array":"object",a.isArray(d)?"array":"object");h.isArray?(m.length=0,s(d,function(b){m.push(new f(b))})):(D(d,m),m.$promise=k)}m.$resolved=!0;b.resource=m;return b},function(b){m.$resolved=!0;(y||E)(b);return g.reject(b)});q=q.then(function(b){var a=B(b);(l||E)(a,b.headers);return a},C);return t?q:(m.$promise=q,m.$resolved=!1,m)};f.prototype["$"+d]=function(b,a,k){u(b)&&(k=a,a=b,b={});b=f[d].call(this,b,this,a,k);return b.$promise||b}});f.bind=function(a){return t(n,x({},w,a),l)};return f} -var B={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},E=a.noop,s=a.forEach,x=a.extend,G=a.copy,u=a.isFunction;c.prototype={setUrlParams:function(c,g,l){var r=this,e=l||r.template,f,p,h=r.urlParams={};s(e.split(/\W/),function(a){if("hasOwnProperty"===a)throw v("badname");!/^\d+$/.test(a)&&(a&&RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(e))&&(h[a]=!0)});e=e.replace(/\\:/g,":");g=g||{};s(r.urlParams,function(d,c){f=g.hasOwnProperty(c)? -g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),function(a,c){return p+c})):e=e.replace(RegExp("(/?):"+c+"(\\W|$)","g"),function(a,c,d){return"/"==d.charAt(0)?d:c+d})});e=e.replace(/\/+$/,"")||"/";e=e.replace(/\/\.(?=\w+($|\?))/,".");c.url=e.replace(/\/\\\./,"/.");s(g,function(a, -e){r.urlParams[e]||(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular); -//# sourceMappingURL=angular-resource.min.js.map diff --git a/platforms/browser/www/lib/angular-resource/angular-resource.min.js.map b/platforms/browser/www/lib/angular-resource/angular-resource.min.js.map deleted file mode 100644 index 7c17bc80..00000000 --- a/platforms/browser/www/lib/angular-resource/angular-resource.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-resource.min.js", -"lineCount":12, -"mappings":"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", -"sources":["angular-resource.js"], -"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","factory","$http","$q","Route","template","defaults","urlParams","resourceFactory","url","paramDefaults","actions","extractParams","data","actionParams","ids","extend","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","DEFAULT_ACTIONS","action","name","hasBody","method","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","isArray","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","$promise","item","push","$resolved","noop","reject","headers","prototype","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"] -} diff --git a/platforms/browser/www/lib/angular-resource/bower.json b/platforms/browser/www/lib/angular-resource/bower.json deleted file mode 100644 index 5b1cf50b..00000000 --- a/platforms/browser/www/lib/angular-resource/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.2.16", - "main": "./angular-resource.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-route/.bower.json b/platforms/browser/www/lib/angular-route/.bower.json deleted file mode 100644 index 4bacfc53..00000000 --- a/platforms/browser/www/lib/angular-route/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-route", - "version": "1.2.16", - "main": "./angular-route.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-route", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "ed0e2b796077d953f518cb81cc7af981cf695a45" - }, - "_source": "git://github.com/angular/bower-angular-route.git", - "_target": "1.2.16", - "_originalSource": "angular-route" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-route/README.md b/platforms/browser/www/lib/angular-route/README.md deleted file mode 100644 index 49f55fc0..00000000 --- a/platforms/browser/www/lib/angular-route/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-route - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngRoute). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-route -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-route/angular-route.js"></script> -``` - -And add `ngRoute` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngRoute']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngRoute). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-route/angular-route.js b/platforms/browser/www/lib/angular-route/angular-route.js deleted file mode 100644 index f7ebda8b..00000000 --- a/platforms/browser/www/lib/angular-route/angular-route.js +++ /dev/null @@ -1,927 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngRoute - * @description - * - * # ngRoute - * - * The `ngRoute` module provides routing and deeplinking services and directives for angular apps. - * - * ## Example - * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. - * - * - * <div doc-module-components="ngRoute"></div> - */ - /* global -ngRouteModule */ -var ngRouteModule = angular.module('ngRoute', ['ng']). - provider('$route', $RouteProvider); - -/** - * @ngdoc provider - * @name $routeProvider - * @function - * - * @description - * - * Used for configuring routes. - * - * ## Example - * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. - * - * ## Dependencies - * Requires the {@link ngRoute `ngRoute`} module to be installed. - */ -function $RouteProvider(){ - function inherit(parent, extra) { - return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra); - } - - var routes = {}; - - /** - * @ngdoc method - * @name $routeProvider#when - * - * @param {string} path Route path (matched against `$location.path`). If `$location.path` - * contains redundant trailing slash or is missing one, the route will still match and the - * `$location.path` will be updated to add or drop the trailing slash to exactly match the - * route definition. - * - * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up - * to the next slash are matched and stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain named groups starting with a colon and ending with a star: - * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain optional named groups with a question mark: e.g.`:name?`. - * - * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match - * `/color/brown/largecode/code/with/slashes/edit` and extract: - * - * * `color: brown` - * * `largecode: code/with/slashes`. - * - * - * @param {Object} route Mapping information to be assigned to `$route.current` on route - * match. - * - * Object properties: - * - * - `controller` – `{(string|function()=}` – Controller fn that should be associated with - * newly created scope or the name of a {@link angular.Module#controller registered - * controller} if passed as a string. - * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be - * published to scope under the `controllerAs` name. - * - `template` – `{string=|function()=}` – html template as a string or a function that - * returns an html template as a string which should be used by {@link - * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. - * This property takes precedence over `templateUrl`. - * - * If `template` is a function, it will be called with the following parameters: - * - * - `{Array.<Object>}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html - * template that should be used by {@link ngRoute.directive:ngView ngView}. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - `{Array.<Object>}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should - * be injected into the controller. If any of these dependencies are promises, the router - * will wait for them all to be resolved or one to be rejected before the controller is - * instantiated. - * If all the promises are resolved successfully, the values of the resolved promises are - * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is - * fired. If any of the promises are rejected the - * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object - * is: - * - * - `key` – `{string}`: a name of a dependency to be injected into the controller. - * - `factory` - `{string|function}`: If `string` then it is an alias for a service. - * Otherwise if function, then it is {@link auto.$injector#invoke injected} - * and the return value is treated as the dependency. If the result is a promise, it is - * resolved before its value is injected into the controller. Be aware that - * `ngRoute.$routeParams` will still refer to the previous route within these resolve - * functions. Use `$route.current.params` to access the new route parameters, instead. - * - * - `redirectTo` – {(string|function())=} – value to update - * {@link ng.$location $location} path with and trigger route redirection. - * - * If `redirectTo` is a function, it will be called with the following parameters: - * - * - `{Object.<string>}` - route parameters extracted from the current - * `$location.path()` by applying the current route templateUrl. - * - `{string}` - current `$location.path()` - * - `{Object}` - current `$location.search()` - * - * The custom `redirectTo` function is expected to return a string which will be used - * to update `$location.path()` and `$location.search()`. - * - * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()` - * or `$location.hash()` changes. - * - * If the option is set to `false` and url in the browser changes, then - * `$routeUpdate` event is broadcasted on the root scope. - * - * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive - * - * If the option is set to `true`, then the particular route can be matched without being - * case sensitive - * - * @returns {Object} self - * - * @description - * Adds a new route definition to the `$route` service. - */ - this.when = function(path, route) { - routes[path] = angular.extend( - {reloadOnSearch: true}, - route, - path && pathRegExp(path, route) - ); - - // create redirection for trailing slashes - if (path) { - var redirectPath = (path[path.length-1] == '/') - ? path.substr(0, path.length-1) - : path +'/'; - - routes[redirectPath] = angular.extend( - {redirectTo: path}, - pathRegExp(redirectPath, route) - ); - } - - return this; - }; - - /** - * @param path {string} path - * @param opts {Object} options - * @return {?Object} - * - * @description - * Normalizes the given path, returning a regular expression - * and the original path. - * - * Inspired by pathRexp in visionmedia/express/lib/utils.js. - */ - function pathRegExp(path, opts) { - var insensitive = opts.caseInsensitiveMatch, - ret = { - originalPath: path, - regexp: path - }, - keys = ret.keys = []; - - path = path - .replace(/([().])/g, '\\$1') - .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option){ - var optional = option === '?' ? option : null; - var star = option === '*' ? option : null; - keys.push({ name: key, optional: !!optional }); - slash = slash || ''; - return '' - + (optional ? '' : slash) - + '(?:' - + (optional ? slash : '') - + (star && '(.+?)' || '([^/]+)') - + (optional || '') - + ')' - + (optional || ''); - }) - .replace(/([\/$\*])/g, '\\$1'); - - ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : ''); - return ret; - } - - /** - * @ngdoc method - * @name $routeProvider#otherwise - * - * @description - * Sets route definition that will be used on route change when no other route definition - * is matched. - * - * @param {Object} params Mapping information to be assigned to `$route.current`. - * @returns {Object} self - */ - this.otherwise = function(params) { - this.when(null, params); - return this; - }; - - - this.$get = ['$rootScope', - '$location', - '$routeParams', - '$q', - '$injector', - '$http', - '$templateCache', - '$sce', - function($rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) { - - /** - * @ngdoc service - * @name $route - * @requires $location - * @requires $routeParams - * - * @property {Object} current Reference to the current route definition. - * The route definition contains: - * - * - `controller`: The controller constructor as define in route definition. - * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for - * controller instantiation. The `locals` contain - * the resolved values of the `resolve` map. Additionally the `locals` also contain: - * - * - `$scope` - The current route scope. - * - `$template` - The current route template HTML. - * - * @property {Object} routes Object with all route configuration Objects as its properties. - * - * @description - * `$route` is used for deep-linking URLs to controllers and views (HTML partials). - * It watches `$location.url()` and tries to map the path to an existing route definition. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. - * - * The `$route` service is typically used in conjunction with the - * {@link ngRoute.directive:ngView `ngView`} directive and the - * {@link ngRoute.$routeParams `$routeParams`} service. - * - * @example - * This example shows how changing the URL hash causes the `$route` to match a route against the - * URL, and the `ngView` pulls in the partial. - * - * Note that this example is using {@link ng.directive:script inlined templates} - * to get it working on jsfiddle as well. - * - * <example name="$route-service" module="ngRouteExample" - * deps="angular-route.js" fixBase="true"> - * <file name="index.html"> - * <div ng-controller="MainController"> - * Choose: - * <a href="Book/Moby">Moby</a> | - * <a href="Book/Moby/ch/1">Moby: Ch1</a> | - * <a href="Book/Gatsby">Gatsby</a> | - * <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | - * <a href="Book/Scarlet">Scarlet Letter</a><br/> - * - * <div ng-view></div> - * - * <hr /> - * - * <pre>$location.path() = {{$location.path()}}</pre> - * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre> - * <pre>$route.current.params = {{$route.current.params}}</pre> - * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre> - * <pre>$routeParams = {{$routeParams}}</pre> - * </div> - * </file> - * - * <file name="book.html"> - * controller: {{name}}<br /> - * Book Id: {{params.bookId}}<br /> - * </file> - * - * <file name="chapter.html"> - * controller: {{name}}<br /> - * Book Id: {{params.bookId}}<br /> - * Chapter Id: {{params.chapterId}} - * </file> - * - * <file name="script.js"> - * angular.module('ngRouteExample', ['ngRoute']) - * - * .controller('MainController', function($scope, $route, $routeParams, $location) { - * $scope.$route = $route; - * $scope.$location = $location; - * $scope.$routeParams = $routeParams; - * }) - * - * .controller('BookController', function($scope, $routeParams) { - * $scope.name = "BookController"; - * $scope.params = $routeParams; - * }) - * - * .controller('ChapterController', function($scope, $routeParams) { - * $scope.name = "ChapterController"; - * $scope.params = $routeParams; - * }) - * - * .config(function($routeProvider, $locationProvider) { - * $routeProvider - * .when('/Book/:bookId', { - * templateUrl: 'book.html', - * controller: 'BookController', - * resolve: { - * // I will cause a 1 second delay - * delay: function($q, $timeout) { - * var delay = $q.defer(); - * $timeout(delay.resolve, 1000); - * return delay.promise; - * } - * } - * }) - * .when('/Book/:bookId/ch/:chapterId', { - * templateUrl: 'chapter.html', - * controller: 'ChapterController' - * }); - * - * // configure html5 to get links working on jsfiddle - * $locationProvider.html5Mode(true); - * }); - * - * </file> - * - * <file name="protractor.js" type="protractor"> - * it('should load and compile correct template', function() { - * element(by.linkText('Moby: Ch1')).click(); - * var content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: ChapterController/); - * expect(content).toMatch(/Book Id\: Moby/); - * expect(content).toMatch(/Chapter Id\: 1/); - * - * element(by.partialLinkText('Scarlet')).click(); - * - * content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: BookController/); - * expect(content).toMatch(/Book Id\: Scarlet/); - * }); - * </file> - * </example> - */ - - /** - * @ngdoc event - * @name $route#$routeChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occur. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a route dependencies are resolved. - * {@link ngRoute.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is - * first route entered. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeError - * @eventType broadcast on root scope - * @description - * Broadcasted if any of the resolve promises are rejected. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. - */ - - /** - * @ngdoc event - * @name $route#$routeUpdate - * @eventType broadcast on root scope - * @description - * - * The `reloadOnSearch` property has been set to false, and we are reusing the same - * instance of the Controller. - */ - - var forceReload = false, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name $route#reload - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ngRoute.directive:ngView ngView} - * creates new scope, reinstantiates the controller. - */ - reload: function() { - forceReload = true; - $rootScope.$evalAsync(updateRoute); - } - }; - - $rootScope.$on('$locationChangeSuccess', updateRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param route {Object} route regexp to match the url against - * @return {?Object} - * - * @description - * Check if the route matches the current url. - * - * Inspired by match in - * visionmedia/express/lib/router/router.js. - */ - function switchRouteMatcher(on, route) { - var keys = route.keys, - params = {}; - - if (!route.regexp) return null; - - var m = route.regexp.exec(on); - if (!m) return null; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - var val = 'string' == typeof m[i] - ? decodeURIComponent(m[i]) - : m[i]; - - if (key && val) { - params[key.name] = val; - } - } - return params; - } - - function updateRoute() { - var next = parseRoute(), - last = $route.current; - - if (next && last && next.$$route === last.$$route - && angular.equals(next.pathParams, last.pathParams) - && !next.reloadOnSearch && !forceReload) { - last.params = next.params; - angular.copy(last.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', last); - } else if (next || last) { - forceReload = false; - $rootScope.$broadcast('$routeChangeStart', next, last); - $route.current = next; - if (next) { - if (next.redirectTo) { - if (angular.isString(next.redirectTo)) { - $location.path(interpolate(next.redirectTo, next.params)).search(next.params) - .replace(); - } else { - $location.url(next.redirectTo(next.pathParams, $location.path(), $location.search())) - .replace(); - } - } - } - - $q.when(next). - then(function() { - if (next) { - var locals = angular.extend({}, next.resolve), - template, templateUrl; - - angular.forEach(locals, function(value, key) { - locals[key] = angular.isString(value) ? - $injector.get(value) : $injector.invoke(value); - }); - - if (angular.isDefined(template = next.template)) { - if (angular.isFunction(template)) { - template = template(next.params); - } - } else if (angular.isDefined(templateUrl = next.templateUrl)) { - if (angular.isFunction(templateUrl)) { - templateUrl = templateUrl(next.params); - } - templateUrl = $sce.getTrustedResourceUrl(templateUrl); - if (angular.isDefined(templateUrl)) { - next.loadedTemplateUrl = templateUrl; - template = $http.get(templateUrl, {cache: $templateCache}). - then(function(response) { return response.data; }); - } - } - if (angular.isDefined(template)) { - locals['$template'] = template; - } - return $q.all(locals); - } - }). - // after route change - then(function(locals) { - if (next == $route.current) { - if (next) { - next.locals = locals; - angular.copy(next.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', next, last); - } - }, function(error) { - if (next == $route.current) { - $rootScope.$broadcast('$routeChangeError', next, last, error); - } - }); - } - } - - - /** - * @returns {Object} the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - angular.forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), route))) { - match = inherit(route, { - params: angular.extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @returns {string} interpolation of the redirect path with the parameters - */ - function interpolate(string, params) { - var result = []; - angular.forEach((string||'').split(':'), function(segment, i) { - if (i === 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -ngRouteModule.provider('$routeParams', $RouteParamsProvider); - - -/** - * @ngdoc service - * @name $routeParams - * @requires $route - * - * @description - * The `$routeParams` service allows you to retrieve the current set of route parameters. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * The route parameters are a combination of {@link ng.$location `$location`}'s - * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. - * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * Note that the `$routeParams` are only updated *after* a route change completes successfully. - * This means that you cannot rely on `$routeParams` being correct in route resolve functions. - * Instead you can use `$route.current.params` to access the new route's parameters. - * - * @example - * ```js - * // Given: - * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby - * // Route: /Chapter/:chapterId/Section/:sectionId - * // - * // Then - * $routeParams ==> {chapterId:1, sectionId:2, search:'moby'} - * ``` - */ -function $RouteParamsProvider() { - this.$get = function() { return {}; }; -} - -ngRouteModule.directive('ngView', ngViewFactory); -ngRouteModule.directive('ngView', ngViewFillContentFactory); - - -/** - * @ngdoc directive - * @name ngView - * @restrict ECA - * - * @description - * # Overview - * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the view is updated. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated - * as an expression yields a truthy value. - * @example - <example name="ngView-directive" module="ngViewExample" - deps="angular-route.js;angular-animate.js" - animations="true" fixBase="true"> - <file name="index.html"> - <div ng-controller="MainCtrl as main"> - Choose: - <a href="Book/Moby">Moby</a> | - <a href="Book/Moby/ch/1">Moby: Ch1</a> | - <a href="Book/Gatsby">Gatsby</a> | - <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | - <a href="Book/Scarlet">Scarlet Letter</a><br/> - - <div class="view-animate-container"> - <div ng-view class="view-animate"></div> - </div> - <hr /> - - <pre>$location.path() = {{main.$location.path()}}</pre> - <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre> - <pre>$route.current.params = {{main.$route.current.params}}</pre> - <pre>$route.current.scope.name = {{main.$route.current.scope.name}}</pre> - <pre>$routeParams = {{main.$routeParams}}</pre> - </div> - </file> - - <file name="book.html"> - <div> - controller: {{book.name}}<br /> - Book Id: {{book.params.bookId}}<br /> - </div> - </file> - - <file name="chapter.html"> - <div> - controller: {{chapter.name}}<br /> - Book Id: {{chapter.params.bookId}}<br /> - Chapter Id: {{chapter.params.chapterId}} - </div> - </file> - - <file name="animations.css"> - .view-animate-container { - position:relative; - height:100px!important; - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .view-animate { - padding:10px; - } - - .view-animate.ng-enter, .view-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - - display:block; - width:100%; - border-left:1px solid black; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - padding:10px; - } - - .view-animate.ng-enter { - left:100%; - } - .view-animate.ng-enter.ng-enter-active { - left:0; - } - .view-animate.ng-leave.ng-leave-active { - left:-100%; - } - </file> - - <file name="script.js"> - angular.module('ngViewExample', ['ngRoute', 'ngAnimate']) - .config(['$routeProvider', '$locationProvider', - function($routeProvider, $locationProvider) { - $routeProvider - .when('/Book/:bookId', { - templateUrl: 'book.html', - controller: 'BookCtrl', - controllerAs: 'book' - }) - .when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: 'ChapterCtrl', - controllerAs: 'chapter' - }); - - // configure html5 to get links working on jsfiddle - $locationProvider.html5Mode(true); - }]) - .controller('MainCtrl', ['$route', '$routeParams', '$location', - function($route, $routeParams, $location) { - this.$route = $route; - this.$location = $location; - this.$routeParams = $routeParams; - }]) - .controller('BookCtrl', ['$routeParams', function($routeParams) { - this.name = "BookCtrl"; - this.params = $routeParams; - }]) - .controller('ChapterCtrl', ['$routeParams', function($routeParams) { - this.name = "ChapterCtrl"; - this.params = $routeParams; - }]); - - </file> - - <file name="protractor.js" type="protractor"> - it('should load and compile correct template', function() { - element(by.linkText('Moby: Ch1')).click(); - var content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: ChapterCtrl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element(by.partialLinkText('Scarlet')).click(); - - content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: BookCtrl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngView#$viewContentLoaded - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate']; -function ngViewFactory( $route, $anchorScroll, $animate) { - return { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - link: function(scope, $element, attr, ctrl, $transclude) { - var currentScope, - currentElement, - previousElement, - autoScrollExp = attr.autoscroll, - onloadExp = attr.onload || ''; - - scope.$on('$routeChangeSuccess', update); - update(); - - function cleanupLastView() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (angular.isDefined(template)) { - var newScope = scope.$new(); - var current = $route.current; - - // Note: This will also link all children of ng-view that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-view on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () { - if (angular.isDefined(autoScrollExp) - && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }); - cleanupLastView(); - }); - - currentElement = clone; - currentScope = current.scope = newScope; - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } else { - cleanupLastView(); - } - } - } - }; -} - -// This directive is called during the $transclude call of the first `ngView` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngView -// is called. -ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route']; -function ngViewFillContentFactory($compile, $controller, $route) { - return { - restrict: 'ECA', - priority: -400, - link: function(scope, $element) { - var current = $route.current, - locals = current.locals; - - $element.html(locals.$template); - - var link = $compile($element.contents()); - - if (current.controller) { - locals.$scope = scope; - var controller = $controller(current.controller, locals); - if (current.controllerAs) { - scope[current.controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - - link(scope); - } - }; -} - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-route/angular-route.min.js b/platforms/browser/www/lib/angular-route/angular-route.min.js deleted file mode 100644 index aef1fd60..00000000 --- a/platforms/browser/www/lib/angular-route/angular-route.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(n,e,A){'use strict';function x(s,g,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);h&&(h.$destroy(),h=null);l&&(k.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){k.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});h=d.scope=b;h.$emit("$viewContentLoaded");h.$eval(u)}else y()} -var h,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){}, -{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},k=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;k.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b= -"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,h){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart", -d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=h.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl= -b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(k,function(f,k){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var h=1,p=g.length;h<p;++h){var n=q[h-1],r="string"==typeof g[h]?decodeURIComponent(g[h]): -g[h];n&&r&&(l[n.name]=r)}q=l}else q=null;else q=null;q=a=q}q&&(b=s(f,{params:e.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||k[null]&&s(k[null],{params:{},pathParams:{}})}function t(a,c){var b=[];e.forEach((a||"").split(":"),function(a,d){if(0===d)b.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];b.push(c[f]);b.push(e[2]||"");delete c[f]}});return b.join("")}var u=!1,r={routes:k,reload:function(){u=!0;a.$evalAsync(l)}};a.$on("$locationChangeSuccess",l);return r}]});n.provider("$routeParams", -function(){this.$get=function(){return{}}});n.directive("ngView",x);n.directive("ngView",z);x.$inject=["$route","$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular); -//# sourceMappingURL=angular-route.min.js.map diff --git a/platforms/browser/www/lib/angular-route/angular-route.min.js.map b/platforms/browser/www/lib/angular-route/angular-route.min.js.map deleted file mode 100644 index 3510eaf8..00000000 --- a/platforms/browser/www/lib/angular-route/angular-route.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-route.min.js", -"lineCount":13, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAizBtCC,QAASA,EAAa,CAAIC,CAAJ,CAAcC,CAAd,CAA+BC,CAA/B,CAAyC,CAC7D,MAAO,UACK,KADL,UAEK,CAAA,CAFL,UAGK,GAHL,YAIO,SAJP,MAKCC,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAkBC,CAAlB,CAAwBC,CAAxB,CAA8BC,CAA9B,CAA2C,CAUrDC,QAASA,EAAe,EAAG,CACtBC,CAAH,GACEA,CAAAC,OAAA,EACA,CAAAD,CAAA,CAAkB,IAFpB,CAIGE,EAAH,GACEA,CAAAC,SAAA,EACA,CAAAD,CAAA,CAAe,IAFjB,CAIGE,EAAH,GACEZ,CAAAa,MAAA,CAAeD,CAAf,CAA+B,QAAQ,EAAG,CACxCJ,CAAA,CAAkB,IADsB,CAA1C,CAIA,CADAA,CACA,CADkBI,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyB,CAkB3BE,QAASA,EAAM,EAAG,CAAA,IACZC,EAASjB,CAAAkB,QAATD,EAA2BjB,CAAAkB,QAAAD,OAG/B,IAAIpB,CAAAsB,UAAA,CAFWF,CAEX,EAFqBA,CAAAG,UAErB,CAAJ,CAAiC,CAC3BC,IAAAA,EAAWjB,CAAAkB,KAAA,EAAXD,CACAH,EAAUlB,CAAAkB,QAkBdJ,EAAA,CAVYN,CAAAe,CAAYF,CAAZE,CAAsB,QAAQ,CAACA,CAAD,CAAQ,CAChDrB,CAAAsB,MAAA,CAAeD,CAAf,CAAsB,IAAtB,CAA4BT,CAA5B,EAA8CT,CAA9C,CAAwDoB,QAAuB,EAAG,CAC5E,CAAA5B,CAAAsB,UAAA,CAAkBO,CAAlB,CAAJ,EACOA,CADP,EACwB,CAAAtB,CAAAuB,MAAA,CAAYD,CAAZ,CADxB,EAEEzB,CAAA,EAH8E,CAAlF,CAMAQ,EAAA,EAPgD,CAAtCc,CAWZX,EAAA,CAAeM,CAAAd,MAAf,CAA+BiB,CAC/BT,EAAAgB,MAAA,CAAmB,oBAAnB,CACAhB,EAAAe,MAAA,CAAmBE,CAAnB,CAvB+B,CAAjC,IAyBEpB,EAAA,EA7Bc,CA5BmC;AAAA,IACjDG,CADiD,CAEjDE,CAFiD,CAGjDJ,CAHiD,CAIjDgB,EAAgBpB,CAAAwB,WAJiC,CAKjDD,EAAYvB,CAAAyB,OAAZF,EAA2B,EAE/BzB,EAAA4B,IAAA,CAAU,qBAAV,CAAiChB,CAAjC,CACAA,EAAA,EARqD,CALpD,CADsD,CA4E/DiB,QAASA,EAAwB,CAACC,CAAD,CAAWC,CAAX,CAAwBnC,CAAxB,CAAgC,CAC/D,MAAO,UACK,KADL,UAEM,IAFN,MAGCG,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAkB,CAAA,IAC1Ba,EAAUlB,CAAAkB,QADgB,CAE1BD,EAASC,CAAAD,OAEbZ,EAAA+B,KAAA,CAAcnB,CAAAG,UAAd,CAEA,KAAIjB,EAAO+B,CAAA,CAAS7B,CAAAgC,SAAA,EAAT,CAEPnB,EAAAoB,WAAJ,GACErB,CAAAsB,OAMA,CANgBnC,CAMhB,CALIkC,CAKJ,CALiBH,CAAA,CAAYjB,CAAAoB,WAAZ,CAAgCrB,CAAhC,CAKjB,CAJIC,CAAAsB,aAIJ,GAHEpC,CAAA,CAAMc,CAAAsB,aAAN,CAGF,CAHgCF,CAGhC,EADAjC,CAAAoC,KAAA,CAAc,yBAAd,CAAyCH,CAAzC,CACA,CAAAjC,CAAAqC,SAAA,EAAAD,KAAA,CAAyB,yBAAzB,CAAoDH,CAApD,CAPF,CAUAnC,EAAA,CAAKC,CAAL,CAlB8B,CAH3B,CADwD,CA32B7DuC,CAAAA,CAAgB9C,CAAA+C,OAAA,CAAe,SAAf,CAA0B,CAAC,IAAD,CAA1B,CAAAC,SAAA,CACa,QADb,CAkBpBC,QAAuB,EAAE,CACvBC,QAASA,EAAO,CAACC,CAAD,CAASC,CAAT,CAAgB,CAC9B,MAAOpD,EAAAqD,OAAA,CAAe,KAAKrD,CAAAqD,OAAA,CAAe,QAAQ,EAAG,EAA1B;AAA8B,WAAWF,CAAX,CAA9B,CAAL,CAAf,CAA0EC,CAA1E,CADuB,CA0IhCE,QAASA,EAAU,CAACC,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC1BC,EAAcD,CAAAE,qBADY,CAE1BC,EAAM,cACUJ,CADV,QAEIA,CAFJ,CAFoB,CAM1BK,EAAOD,CAAAC,KAAPA,CAAkB,EAEtBL,EAAA,CAAOA,CAAAM,QAAA,CACI,UADJ,CACgB,MADhB,CAAAA,QAAA,CAEI,uBAFJ,CAE6B,QAAQ,CAACC,CAAD,CAAIC,CAAJ,CAAWC,CAAX,CAAgBC,CAAhB,CAAuB,CAC3DC,CAAAA,CAAsB,GAAX,GAAAD,CAAA,CAAiBA,CAAjB,CAA0B,IACrCE,EAAAA,CAAkB,GAAX,GAAAF,CAAA,CAAiBA,CAAjB,CAA0B,IACrCL,EAAAQ,KAAA,CAAU,MAAQJ,CAAR,UAAuB,CAAC,CAACE,CAAzB,CAAV,CACAH,EAAA,CAAQA,CAAR,EAAiB,EACjB,OAAO,EAAP,EACKG,CAAA,CAAW,EAAX,CAAgBH,CADrB,EAEI,KAFJ,EAGKG,CAAA,CAAWH,CAAX,CAAmB,EAHxB,GAIKI,CAJL,EAIa,OAJb,EAIwB,SAJxB,GAKKD,CALL,EAKiB,EALjB,EAMI,GANJ,EAOKA,CAPL,EAOiB,EAPjB,CAL+D,CAF5D,CAAAL,QAAA,CAgBI,YAhBJ,CAgBkB,MAhBlB,CAkBPF,EAAAU,OAAA,CAAiBC,MAAJ,CAAW,GAAX,CAAiBf,CAAjB,CAAwB,GAAxB,CAA6BE,CAAA,CAAc,GAAd,CAAoB,EAAjD,CACb,OAAOE,EA3BuB,CAtIhC,IAAIY,EAAS,EAqGb,KAAAC,KAAA,CAAYC,QAAQ,CAAClB,CAAD,CAAOmB,CAAP,CAAc,CAChCH,CAAA,CAAOhB,CAAP,CAAA,CAAevD,CAAAqD,OAAA,CACb,gBAAiB,CAAA,CAAjB,CADa,CAEbqB,CAFa,CAGbnB,CAHa,EAGLD,CAAA,CAAWC,CAAX,CAAiBmB,CAAjB,CAHK,CAOf,IAAInB,CAAJ,CAAU,CACR,IAAIoB;AAAuC,GACxB,EADCpB,CAAA,CAAKA,CAAAqB,OAAL,CAAiB,CAAjB,CACD,CAAXrB,CAAAsB,OAAA,CAAY,CAAZ,CAAetB,CAAAqB,OAAf,CAA2B,CAA3B,CAAW,CACXrB,CADW,CACL,GAEdgB,EAAA,CAAOI,CAAP,CAAA,CAAuB3E,CAAAqD,OAAA,CACrB,YAAaE,CAAb,CADqB,CAErBD,CAAA,CAAWqB,CAAX,CAAyBD,CAAzB,CAFqB,CALf,CAWV,MAAO,KAnByB,CA0ElC,KAAAI,UAAA,CAAiBC,QAAQ,CAACC,CAAD,CAAS,CAChC,IAAAR,KAAA,CAAU,IAAV,CAAgBQ,CAAhB,CACA,OAAO,KAFyB,CAMlC,KAAAC,KAAA,CAAY,CAAC,YAAD,CACC,WADD,CAEC,cAFD,CAGC,IAHD,CAIC,WAJD,CAKC,OALD,CAMC,gBAND,CAOC,MAPD,CAQR,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwBC,CAAxB,CAAsCC,CAAtC,CAA0CC,CAA1C,CAAqDC,CAArD,CAA4DC,CAA5D,CAA4EC,CAA5E,CAAkF,CA2P5FC,QAASA,EAAW,EAAG,CAAA,IACjBC,EAAOC,CAAA,EADU,CAEjBC,EAAO1F,CAAAkB,QAEX,IAAIsE,CAAJ,EAAYE,CAAZ,EAAoBF,CAAAG,QAApB,GAAqCD,CAAAC,QAArC,EACO9F,CAAA+F,OAAA,CAAeJ,CAAAK,WAAf,CAAgCH,CAAAG,WAAhC,CADP,EAEO,CAACL,CAAAM,eAFR,EAE+B,CAACC,CAFhC,CAGEL,CAAAb,OAEA,CAFcW,CAAAX,OAEd,CADAhF,CAAAmG,KAAA,CAAaN,CAAAb,OAAb,CAA0BI,CAA1B,CACA,CAAAF,CAAAkB,WAAA,CAAsB,cAAtB,CAAsCP,CAAtC,CALF,KAMO,IAAIF,CAAJ,EAAYE,CAAZ,CACLK,CAeA,CAfc,CAAA,CAed,CAdAhB,CAAAkB,WAAA,CAAsB,mBAAtB;AAA2CT,CAA3C,CAAiDE,CAAjD,CAcA,EAbA1F,CAAAkB,QAaA,CAbiBsE,CAajB,GAXMA,CAAAU,WAWN,GAVQrG,CAAAsG,SAAA,CAAiBX,CAAAU,WAAjB,CAAJ,CACElB,CAAA5B,KAAA,CAAegD,CAAA,CAAYZ,CAAAU,WAAZ,CAA6BV,CAAAX,OAA7B,CAAf,CAAAwB,OAAA,CAAiEb,CAAAX,OAAjE,CAAAnB,QAAA,EADF,CAIEsB,CAAAsB,IAAA,CAAcd,CAAAU,WAAA,CAAgBV,CAAAK,WAAhB,CAAiCb,CAAA5B,KAAA,EAAjC,CAAmD4B,CAAAqB,OAAA,EAAnD,CAAd,CAAA3C,QAAA,EAMN,EAAAwB,CAAAb,KAAA,CAAQmB,CAAR,CAAAe,KAAA,CACO,QAAQ,EAAG,CACd,GAAIf,CAAJ,CAAU,CAAA,IACJvE,EAASpB,CAAAqD,OAAA,CAAe,EAAf,CAAmBsC,CAAAgB,QAAnB,CADL,CAEJC,CAFI,CAEMC,CAEd7G,EAAA8G,QAAA,CAAgB1F,CAAhB,CAAwB,QAAQ,CAAC2F,CAAD,CAAQ/C,CAAR,CAAa,CAC3C5C,CAAA,CAAO4C,CAAP,CAAA,CAAchE,CAAAsG,SAAA,CAAiBS,CAAjB,CAAA,CACVzB,CAAA0B,IAAA,CAAcD,CAAd,CADU,CACazB,CAAA2B,OAAA,CAAiBF,CAAjB,CAFgB,CAA7C,CAKI/G,EAAAsB,UAAA,CAAkBsF,CAAlB,CAA6BjB,CAAAiB,SAA7B,CAAJ,CACM5G,CAAAkH,WAAA,CAAmBN,CAAnB,CADN,GAEIA,CAFJ,CAEeA,CAAA,CAASjB,CAAAX,OAAT,CAFf,EAIWhF,CAAAsB,UAAA,CAAkBuF,CAAlB,CAAgClB,CAAAkB,YAAhC,CAJX,GAKM7G,CAAAkH,WAAA,CAAmBL,CAAnB,CAIJ,GAHEA,CAGF,CAHgBA,CAAA,CAAYlB,CAAAX,OAAZ,CAGhB,EADA6B,CACA,CADcpB,CAAA0B,sBAAA,CAA2BN,CAA3B,CACd,CAAI7G,CAAAsB,UAAA,CAAkBuF,CAAlB,CAAJ,GACElB,CAAAyB,kBACA;AADyBP,CACzB,CAAAD,CAAA,CAAWrB,CAAAyB,IAAA,CAAUH,CAAV,CAAuB,OAAQrB,CAAR,CAAvB,CAAAkB,KAAA,CACF,QAAQ,CAACW,CAAD,CAAW,CAAE,MAAOA,EAAAzE,KAAT,CADjB,CAFb,CATF,CAeI5C,EAAAsB,UAAA,CAAkBsF,CAAlB,CAAJ,GACExF,CAAA,UADF,CACwBwF,CADxB,CAGA,OAAOvB,EAAAiC,IAAA,CAAOlG,CAAP,CA3BC,CADI,CADlB,CAAAsF,KAAA,CAiCO,QAAQ,CAACtF,CAAD,CAAS,CAChBuE,CAAJ,EAAYxF,CAAAkB,QAAZ,GACMsE,CAIJ,GAHEA,CAAAvE,OACA,CADcA,CACd,CAAApB,CAAAmG,KAAA,CAAaR,CAAAX,OAAb,CAA0BI,CAA1B,CAEF,EAAAF,CAAAkB,WAAA,CAAsB,qBAAtB,CAA6CT,CAA7C,CAAmDE,CAAnD,CALF,CADoB,CAjCxB,CAyCK,QAAQ,CAAC0B,CAAD,CAAQ,CACb5B,CAAJ,EAAYxF,CAAAkB,QAAZ,EACE6D,CAAAkB,WAAA,CAAsB,mBAAtB,CAA2CT,CAA3C,CAAiDE,CAAjD,CAAuD0B,CAAvD,CAFe,CAzCrB,CA1BmB,CA+EvB3B,QAASA,EAAU,EAAG,CAAA,IAEhBZ,CAFgB,CAERwC,CACZxH,EAAA8G,QAAA,CAAgBvC,CAAhB,CAAwB,QAAQ,CAACG,CAAD,CAAQnB,CAAR,CAAc,CACxC,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,IAAA,EAAA,CAAA,KAAA,EAzGbK,EAAAA,CAyGac,CAzGNd,KAAX,KACIoB,EAAS,EAEb,IAsGiBN,CAtGZL,OAAL,CAGA,GADIoD,CACJ,CAmGiB/C,CApGTL,OAAAqD,KAAA,CAAkBC,CAAlB,CACR,CAAA,CAEA,IATqC,IAS5BC,EAAI,CATwB,CASrBC,EAAMJ,CAAA7C,OAAtB,CAAgCgD,CAAhC,CAAoCC,CAApC,CAAyC,EAAED,CAA3C,CAA8C,CAC5C,IAAI5D,EAAMJ,CAAA,CAAKgE,CAAL,CAAS,CAAT,CAAV,CAEIE,EAAM,QACA,EADY,MAAOL,EAAA,CAAEG,CAAF,CACnB,CAAFG,kBAAA,CAAmBN,CAAA,CAAEG,CAAF,CAAnB,CAAE;AACFH,CAAA,CAAEG,CAAF,CAEJ5D,EAAJ,EAAW8D,CAAX,GACE9C,CAAA,CAAOhB,CAAAgE,KAAP,CADF,CACqBF,CADrB,CAP4C,CAW9C,CAAA,CAAO9C,CAbP,CAAA,IAAQ,EAAA,CAAO,IAHf,KAAmB,EAAA,CAAO,IAsGT,EAAA,CAAA,CAAA,CAAA,CAAX,CAAA,CAAJ,GACEwC,CAGA,CAHQtE,CAAA,CAAQwB,CAAR,CAAe,QACb1E,CAAAqD,OAAA,CAAe,EAAf,CAAmB8B,CAAAqB,OAAA,EAAnB,CAAuCxB,CAAvC,CADa,YAETA,CAFS,CAAf,CAGR,CAAAwC,CAAA1B,QAAA,CAAgBpB,CAJlB,CAD4C,CAA9C,CASA,OAAO8C,EAAP,EAAgBjD,CAAA,CAAO,IAAP,CAAhB,EAAgCrB,CAAA,CAAQqB,CAAA,CAAO,IAAP,CAAR,CAAsB,QAAS,EAAT,YAAwB,EAAxB,CAAtB,CAZZ,CAkBtBgC,QAASA,EAAW,CAAC0B,CAAD,CAASjD,CAAT,CAAiB,CACnC,IAAIkD,EAAS,EACblI,EAAA8G,QAAA,CAAiBqB,CAAAF,CAAAE,EAAQ,EAARA,OAAA,CAAkB,GAAlB,CAAjB,CAAyC,QAAQ,CAACC,CAAD,CAAUR,CAAV,CAAa,CAC5D,GAAU,CAAV,GAAIA,CAAJ,CACEM,CAAA9D,KAAA,CAAYgE,CAAZ,CADF,KAEO,CACL,IAAIC,EAAeD,CAAAZ,MAAA,CAAc,WAAd,CAAnB,CACIxD,EAAMqE,CAAA,CAAa,CAAb,CACVH,EAAA9D,KAAA,CAAYY,CAAA,CAAOhB,CAAP,CAAZ,CACAkE,EAAA9D,KAAA,CAAYiE,CAAA,CAAa,CAAb,CAAZ,EAA+B,EAA/B,CACA,QAAOrD,CAAA,CAAOhB,CAAP,CALF,CAHqD,CAA9D,CAWA,OAAOkE,EAAAI,KAAA,CAAY,EAAZ,CAb4B,CA5VuD,IA8LxFpC,EAAc,CAAA,CA9L0E,CA+LxF/F,EAAS,QACCoE,CADD,QAcCgE,QAAQ,EAAG,CACjBrC,CAAA,CAAc,CAAA,CACdhB,EAAAsD,WAAA,CAAsB9C,CAAtB,CAFiB,CAdZ,CAoBbR,EAAA/C,IAAA,CAAe,wBAAf,CAAyCuD,CAAzC,CAEA,OAAOvF,EArNqF,CARlF,CA1LW,CAlBL,CAkkBpB2C,EAAAE,SAAA,CAAuB,cAAvB;AAoCAyF,QAA6B,EAAG,CAC9B,IAAAxD,KAAA,CAAYyD,QAAQ,EAAG,CAAE,MAAO,EAAT,CADO,CApChC,CAwCA5F,EAAA6F,UAAA,CAAwB,QAAxB,CAAkCzI,CAAlC,CACA4C,EAAA6F,UAAA,CAAwB,QAAxB,CAAkCvG,CAAlC,CAmLAlC,EAAA0I,QAAA,CAAwB,CAAC,QAAD,CAAW,eAAX,CAA4B,UAA5B,CA4ExBxG,EAAAwG,QAAA,CAAmC,CAAC,UAAD,CAAa,aAAb,CAA4B,QAA5B,CA53BG,CAArC,CAAA,CAy5BE7I,MAz5BF,CAy5BUA,MAAAC,QAz5BV;", -"sources":["angular-route.js"], -"names":["window","angular","undefined","ngViewFactory","$route","$anchorScroll","$animate","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousElement","remove","currentScope","$destroy","currentElement","leave","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","ngRouteModule","module","provider","$RouteProvider","inherit","parent","extra","extend","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","keys","replace","_","slash","key","option","optional","star","push","regexp","RegExp","routes","when","this.when","route","redirectPath","length","substr","otherwise","this.otherwise","params","$get","$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce","updateRoute","next","parseRoute","last","$$route","equals","pathParams","reloadOnSearch","forceReload","copy","$broadcast","redirectTo","isString","interpolate","search","url","then","resolve","template","templateUrl","forEach","value","get","invoke","isFunction","getTrustedResourceUrl","loadedTemplateUrl","response","all","error","match","m","exec","on","i","len","val","decodeURIComponent","name","string","result","split","segment","segmentMatch","join","reload","$evalAsync","$RouteParamsProvider","this.$get","directive","$inject"] -} diff --git a/platforms/browser/www/lib/angular-route/bower.json b/platforms/browser/www/lib/angular-route/bower.json deleted file mode 100644 index 55c9a0fb..00000000 --- a/platforms/browser/www/lib/angular-route/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-route", - "version": "1.2.16", - "main": "./angular-route.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-sanitize/.bower.json b/platforms/browser/www/lib/angular-sanitize/.bower.json deleted file mode 100644 index 9c2cde87..00000000 --- a/platforms/browser/www/lib/angular-sanitize/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-sanitize", - "version": "1.2.16", - "main": "./angular-sanitize.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-sanitize", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "0534ccd6bb2b7b6e5d0fa6c27fd3277f312a4347" - }, - "_source": "git://github.com/angular/bower-angular-sanitize.git", - "_target": "1.2.16", - "_originalSource": "angular-sanitize" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-sanitize/README.md b/platforms/browser/www/lib/angular-sanitize/README.md deleted file mode 100644 index 585a235e..00000000 --- a/platforms/browser/www/lib/angular-sanitize/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-sanitize - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-sanitize -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-sanitize/angular-sanitize.js"></script> -``` - -And add `ngSanitize` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngSanitize']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.js b/platforms/browser/www/lib/angular-sanitize/angular-sanitize.js deleted file mode 100644 index b670812d..00000000 --- a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.js +++ /dev/null @@ -1,624 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $sanitizeMinErr = angular.$$minErr('$sanitize'); - -/** - * @ngdoc module - * @name ngSanitize - * @description - * - * # ngSanitize - * - * The `ngSanitize` module provides functionality to sanitize HTML. - * - * - * <div doc-module-components="ngSanitize"></div> - * - * See {@link ngSanitize.$sanitize `$sanitize`} for usage. - */ - -/* - * HTML Parser By Misko Hevery (misko@hevery.com) - * based on: HTML Parser By John Resig (ejohn.org) - * Original code by Erik Arvidsson, Mozilla Public License - * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js - * - * // Use like so: - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - */ - - -/** - * @ngdoc service - * @name $sanitize - * @function - * - * @description - * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are - * then serialized back to properly escaped html string. This means that no unsafe input can make - * it into the returned string, however, since our parser is more strict than a typical browser - * parser, it's possible that some obscure input, which would be recognized as valid HTML by a - * browser, won't make it through the sanitizer. - * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and - * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}. - * - * @param {string} html Html input. - * @returns {string} Sanitized html. - * - * @example - <example module="ngSanitize" deps="angular-sanitize.js"> - <file name="index.html"> - <script> - function Ctrl($scope, $sce) { - $scope.snippet = - '<p style="color:blue">an html\n' + - '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' + - 'snippet</p>'; - $scope.deliberatelyTrustDangerousSnippet = function() { - return $sce.trustAsHtml($scope.snippet); - }; - } - </script> - <div ng-controller="Ctrl"> - Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea> - <table> - <tr> - <td>Directive</td> - <td>How</td> - <td>Source</td> - <td>Rendered</td> - </tr> - <tr id="bind-html-with-sanitize"> - <td>ng-bind-html</td> - <td>Automatically uses $sanitize</td> - <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td> - <td><div ng-bind-html="snippet"></div></td> - </tr> - <tr id="bind-html-with-trust"> - <td>ng-bind-html</td> - <td>Bypass $sanitize by explicitly trusting the dangerous value</td> - <td> - <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt; -&lt;/div&gt;</pre> - </td> - <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td> - </tr> - <tr id="bind-default"> - <td>ng-bind</td> - <td>Automatically escapes</td> - <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td> - <td><div ng-bind="snippet"></div></td> - </tr> - </table> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should sanitize the html snippet by default', function() { - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('<p>an html\n<em>click here</em>\nsnippet</p>'); - }); - - it('should inline raw snippet if bound to a trusted value', function() { - expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should escape snippet without any filter', function() { - expect(element(by.css('#bind-default div')).getInnerHtml()). - toBe("&lt;p style=\"color:blue\"&gt;an html\n" + - "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" + - "snippet&lt;/p&gt;"); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>'); - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('new <b>text</b>'); - expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe( - 'new <b onclick="alert(1)">text</b>'); - expect(element(by.css('#bind-default div')).getInnerHtml()).toBe( - "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;"); - }); - </file> - </example> - */ -function $SanitizeProvider() { - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, angular.noop); - writer.chars(chars); - return buf.join(''); -} - - -// Regular Expressions for parsing tags and attributes -var START_TAG_REGEXP = - /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, - END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, - ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, - BEGIN_TAG_REGEXP = /^</, - BEGING_END_TAGE_REGEXP = /^<\s*\//, - COMMENT_REGEXP = /<!--(.*?)-->/g, - DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i, - CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; - - -// Good source of info about elements and attributes -// http://dev.w3.org/html5/spec/Overview.html#semantics -// http://simon.html5.org/html-elements - -// Safe Void Elements - HTML5 -// http://dev.w3.org/html5/spec/Overview.html#void-elements -var voidElements = makeMap("area,br,col,hr,img,wbr"); - -// Elements that you can, intentionally, leave open (and which close themselves) -// http://dev.w3.org/html5/spec/Overview.html#optional-tags -var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), - optionalEndTagInlineElements = makeMap("rp,rt"), - optionalEndTagElements = angular.extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); - -// Safe Block Elements - HTML5 -var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + - "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," + - "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); - -// Inline Elements - HTML5 -var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + - "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," + - "samp,small,span,strike,strong,sub,sup,time,tt,u,var")); - - -// Special Elements (can contain anything) -var specialElements = makeMap("script,style"); - -var validElements = angular.extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements); - -//Attributes that have href and hence need to be sanitized -var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); -var validAttrs = angular.extend({}, uriAttrs, makeMap( - 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+ - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+ - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+ - 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+ - 'valign,value,vspace,width')); - -function makeMap(str) { - var obj = {}, items = str.split(','), i; - for (i = 0; i < items.length; i++) obj[items[i]] = true; - return obj; -} - - -/** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ -function htmlParser( html, handler ) { - var index, chars, match, stack = [], last = html; - stack.last = function() { return stack[ stack.length - 1 ]; }; - - while ( html ) { - chars = true; - - // Make sure we're not in a script or style element - if ( !stack.last() || !specialElements[ stack.last() ] ) { - - // Comment - if ( html.indexOf("<!--") === 0 ) { - // comments containing -- are not allowed unless they terminate the comment - index = html.indexOf("--", 4); - - if ( index >= 0 && html.lastIndexOf("-->", index) === index) { - if (handler.comment) handler.comment( html.substring( 4, index ) ); - html = html.substring( index + 3 ); - chars = false; - } - // DOCTYPE - } else if ( DOCTYPE_REGEXP.test(html) ) { - match = html.match( DOCTYPE_REGEXP ); - - if ( match ) { - html = html.replace( match[0], ''); - chars = false; - } - // end tag - } else if ( BEGING_END_TAGE_REGEXP.test(html) ) { - match = html.match( END_TAG_REGEXP ); - - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( END_TAG_REGEXP, parseEndTag ); - chars = false; - } - - // start tag - } else if ( BEGIN_TAG_REGEXP.test(html) ) { - match = html.match( START_TAG_REGEXP ); - - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( START_TAG_REGEXP, parseStartTag ); - chars = false; - } - } - - if ( chars ) { - index = html.indexOf("<"); - - var text = index < 0 ? html : html.substring( 0, index ); - html = index < 0 ? "" : html.substring( index ); - - if (handler.chars) handler.chars( decodeEntities(text) ); - } - - } else { - html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), - function(all, text){ - text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); - - if (handler.chars) handler.chars( decodeEntities(text) ); - - return ""; - }); - - parseEndTag( "", stack.last() ); - } - - if ( html == last ) { - throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + - "of html: {0}", html); - } - last = html; - } - - // Clean up any remaining tags - parseEndTag(); - - function parseStartTag( tag, tagName, rest, unary ) { - tagName = angular.lowercase(tagName); - if ( blockElements[ tagName ] ) { - while ( stack.last() && inlineElements[ stack.last() ] ) { - parseEndTag( "", stack.last() ); - } - } - - if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) { - parseEndTag( "", tagName ); - } - - unary = voidElements[ tagName ] || !!unary; - - if ( !unary ) - stack.push( tagName ); - - var attrs = {}; - - rest.replace(ATTR_REGEXP, - function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { - var value = doubleQuotedValue - || singleQuotedValue - || unquotedValue - || ''; - - attrs[name] = decodeEntities(value); - }); - if (handler.start) handler.start( tagName, attrs, unary ); - } - - function parseEndTag( tag, tagName ) { - var pos = 0, i; - tagName = angular.lowercase(tagName); - if ( tagName ) - // Find the closest opened tag of the same type - for ( pos = stack.length - 1; pos >= 0; pos-- ) - if ( stack[ pos ] == tagName ) - break; - - if ( pos >= 0 ) { - // Close all the open elements, up the stack - for ( i = stack.length - 1; i >= pos; i-- ) - if (handler.end) handler.end( stack[ i ] ); - - // Remove the open elements from the stack - stack.length = pos; - } - } -} - -var hiddenPre=document.createElement("pre"); -var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/; -/** - * decodes all entities into regular string - * @param value - * @returns {string} A string with decoded entities. - */ -function decodeEntities(value) { - if (!value) { return ''; } - - // Note: IE8 does not preserve spaces at the start/end of innerHTML - // so we must capture them and reattach them afterward - var parts = spaceRe.exec(value); - var spaceBefore = parts[1]; - var spaceAfter = parts[3]; - var content = parts[2]; - if (content) { - hiddenPre.innerHTML=content.replace(/</g,"&lt;"); - // innerText depends on styling as it doesn't display hidden elements. - // Therefore, it's better to use textContent not to cause unnecessary - // reflows. However, IE<9 don't support textContent so the innerText - // fallback is necessary. - content = 'textContent' in hiddenPre ? - hiddenPre.textContent : hiddenPre.innerText; - } - return spaceBefore + content + spaceAfter; -} - -/** - * Escapes all potentially dangerous characters, so that the - * resulting string can be safely inserted into attribute or - * element text. - * @param value - * @returns {string} escaped text - */ -function encodeEntities(value) { - return value. - replace(/&/g, '&amp;'). - replace(NON_ALPHANUMERIC_REGEXP, function(value){ - return '&#' + value.charCodeAt(0) + ';'; - }). - replace(/</g, '&lt;'). - replace(/>/g, '&gt;'); -} - -/** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.jain('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ -function htmlSanitizeWriter(buf, uriValidator){ - var ignore = false; - var out = angular.bind(buf, buf.push); - return { - start: function(tag, attrs, unary){ - tag = angular.lowercase(tag); - if (!ignore && specialElements[tag]) { - ignore = tag; - } - if (!ignore && validElements[tag] === true) { - out('<'); - out(tag); - angular.forEach(attrs, function(value, key){ - var lkey=angular.lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out(unary ? '/>' : '>'); - } - }, - end: function(tag){ - tag = angular.lowercase(tag); - if (!ignore && validElements[tag] === true) { - out('</'); - out(tag); - out('>'); - } - if (tag == ignore) { - ignore = false; - } - }, - chars: function(chars){ - if (!ignore) { - out(encodeEntities(chars)); - } - } - }; -} - - -// define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); - -/* global sanitizeText: false */ - -/** - * @ngdoc filter - * @name linky - * @function - * - * @description - * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. - * @returns {string} Html-linkified text. - * - * @usage - <span ng-bind-html="linky_expression | linky"></span> - * - * @example - <example module="ngSanitize" deps="angular-sanitize.js"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.snippet = - 'Pretty text with some links:\n'+ - 'http://angularjs.org/,\n'+ - 'mailto:us@somewhere.org,\n'+ - 'another@somewhere.org,\n'+ - 'and one more: ftp://127.0.0.1/.'; - $scope.snippetWithTarget = 'http://angularjs.org/'; - } - </script> - <div ng-controller="Ctrl"> - Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea> - <table> - <tr> - <td>Filter</td> - <td>Source</td> - <td>Rendered</td> - </tr> - <tr id="linky-filter"> - <td>linky filter</td> - <td> - <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre> - </td> - <td> - <div ng-bind-html="snippet | linky"></div> - </td> - </tr> - <tr id="linky-target"> - <td>linky target</td> - <td> - <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre> - </td> - <td> - <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div> - </td> - </tr> - <tr id="escaped-html"> - <td>no filter</td> - <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td> - <td><div ng-bind="snippet"></div></td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - it('should linkify the snippet with urls', function() { - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); - }); - - it('should not linkify snippet without the linky filter', function() { - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new http://link.'); - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('new http://link.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) - .toBe('new http://link.'); - }); - - it('should work with the target property', function() { - expect(element(by.id('linky-target')). - element(by.binding("snippetWithTarget | linky:'_blank'")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); - }); - </file> - </example> - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/, - MAILTO_REGEXP = /^mailto:/; - - return function(text, target) { - if (!text) return text; - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/mailto then assume mailto - if (match[2] == match[3]) url = 'mailto:' + url; - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - html.push('<a '); - if (angular.isDefined(target)) { - html.push('target="'); - html.push(target); - html.push('" '); - } - html.push('href="'); - html.push(url); - html.push('">'); - addText(text); - html.push('</a>'); - } - }; -}]); - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js b/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js deleted file mode 100644 index 08964713..00000000 --- a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(p,h,q){'use strict';function E(a){var e=[];s(e,h.noop).chars(a);return e.join("")}function k(a){var e={};a=a.split(",");var d;for(d=0;d<a.length;d++)e[a[d]]=!0;return e}function F(a,e){function d(a,b,d,g){b=h.lowercase(b);if(t[b])for(;f.last()&&u[f.last()];)c("",f.last());v[b]&&f.last()==b&&c("",b);(g=w[b]||!!g)||f.push(b);var l={};d.replace(G,function(a,b,e,c,d){l[b]=r(e||c||d||"")});e.start&&e.start(b,l,g)}function c(a,b){var c=0,d;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--); -if(0<=c){for(d=f.length-1;d>=c;d--)e.end&&e.end(f[d]);f.length=c}}var b,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(b,a){a=a.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(r(a));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&e.comment(a.substring(4,b)),a=a.substring(b+3),g=!1);else if(y.test(a)){if(b=a.match(y))a= -a.replace(b[0],""),g=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,c),g=!1}else K.test(a)&&(b=a.match(A))&&(a=a.substring(b[0].length),b[0].replace(A,d),g=!1);g&&(b=a.indexOf("<"),g=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}c()}function r(a){if(!a)return"";var e=M.exec(a);a=e[1];var d=e[3];if(e=e[2])n.innerHTML=e.replace(/</g,"&lt;"),e="textContent"in n?n.textContent:n.innerText;return a+e+d}function B(a){return a.replace(/&/g, -"&amp;").replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function s(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!d&&x[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(g,function(d,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==O[g]||!0===D[g]&&!e(d,k)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d|| -c(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\s*\//,H=/\x3c!--(.*?)--\x3e/g,y=/<!DOCTYPE([^>]*?)>/i,I=/<!\[CDATA\[(.*?)]]\x3e/g,N=/([^\#-~| |!])/g,w=k("area,br,col,hr,img,wbr");p=k("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");q=k("rp,rt");var v=h.extend({},q,p),t=h.extend({},p,k("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")), -u=h.extend({},q,k("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),x=k("script,style"),C=h.extend({},w,t,u,v),D=k("background,cite,href,longdesc,src,usemap"),O=h.extend({},D,k("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width")), -n=document.createElement("pre"),M=/^(\s*)([\s\S]*?)(\s*)$/;h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(e){var d=[];F(e,s(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var e=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/,d=/^mailto:/;return function(c,b){function g(a){a&&m.push(E(a))}function f(a,c){m.push("<a ");h.isDefined(b)&& -(m.push('target="'),m.push(b),m.push('" '));m.push('href="');m.push(a);m.push('">');g(c);m.push("</a>")}if(!c)return c;for(var l,k=c,m=[],n,p;l=k.match(e);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(d,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular); -//# sourceMappingURL=angular-sanitize.min.js.map diff --git a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js.map b/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js.map deleted file mode 100644 index dbf6b259..00000000 --- a/platforms/browser/www/lib/angular-sanitize/angular-sanitize.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-sanitize.min.js", -"lineCount":13, -"mappings":"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", -"sources":["angular-sanitize.js"], -"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","makeMap","str","obj","items","split","i","length","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","lowercase","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","stack.last","specialElements","RegExp","all","text","COMMENT_REGEXP","CDATA_REGEXP","indexOf","lastIndexOf","comment","substring","DOCTYPE_REGEXP","test","BEGING_END_TAGE_REGEXP","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","parts","spaceRe","exec","spaceBefore","spaceAfter","content","hiddenPre","innerHTML","textContent","innerText","encodeEntities","NON_ALPHANUMERIC_REGEXP","charCodeAt","uriValidator","ignore","out","bind","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","document","createElement","module","provider","$SanitizeProvider","$get","$$sanitizeUri","uri","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","target","addText","addLink","url","isDefined","raw","substr"] -} diff --git a/platforms/browser/www/lib/angular-sanitize/bower.json b/platforms/browser/www/lib/angular-sanitize/bower.json deleted file mode 100644 index 1160f22f..00000000 --- a/platforms/browser/www/lib/angular-sanitize/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-sanitize", - "version": "1.2.16", - "main": "./angular-sanitize.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-scenario/.bower.json b/platforms/browser/www/lib/angular-scenario/.bower.json deleted file mode 100644 index f33be682..00000000 --- a/platforms/browser/www/lib/angular-scenario/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.2.16", - "main": "./angular-scenario.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-scenario", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "387bd67cc4863655aed0f889956cdeb4acdb03ae" - }, - "_source": "git://github.com/angular/bower-angular-scenario.git", - "_target": "1.2.16", - "_originalSource": "angular-scenario" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-scenario/README.md b/platforms/browser/www/lib/angular-scenario/README.md deleted file mode 100644 index 7f80a8c5..00000000 --- a/platforms/browser/www/lib/angular-scenario/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# bower-angular-scenario - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngScenario). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-scenario -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-scenario/angular-scenario.js b/platforms/browser/www/lib/angular-scenario/angular-scenario.js deleted file mode 100644 index 81491c59..00000000 --- a/platforms/browser/www/lib/angular-scenario/angular-scenario.js +++ /dev/null @@ -1,33464 +0,0 @@ -/*! - * jQuery JavaScript Library v1.10.2 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03T13:48Z - */ -(function( window, undefined ) {'use strict'; - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -// - -var - // The deferred used on DOM ready - readyList, - - // A central reference to the root jQuery(document) - rootjQuery, - - // Support: IE<10 - // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` - core_strundefined = typeof undefined, - - // Use the correct document accordingly with window argument (sandbox) - location = window.location, - document = window.document, - docElem = document.documentElement, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // [[Class]] -> type pairs - class2type = {}, - - // List of deleted data cache ids, so we can reuse them - core_deletedIds = [], - - core_version = "1.10.2", - - // Save a reference to some core methods - core_concat = core_deletedIds.concat, - core_push = core_deletedIds.push, - core_slice = core_deletedIds.slice, - core_indexOf = core_deletedIds.indexOf, - core_toString = class2type.toString, - core_hasOwn = class2type.hasOwnProperty, - core_trim = core_version.trim, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Used for matching numbers - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, - - // Used for splitting on whitespace - core_rnotwhite = /\S+/g, - - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // The ready event handler - completed = function( event ) { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { - detach(); - jQuery.ready(); - } - }, - // Clean-up method for dom ready events - detach = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: core_version, - - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return core_slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; - }, - - slice: function() { - return this.pushStack( core_slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), - - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - /* jshint eqeqeq: false */ - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - if ( obj == null ) { - return String( obj ); - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ core_toString.call(obj) ] || "object" : - typeof obj; - }, - - isPlainObject: function( obj ) { - var key; - - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Support: IE<9 - // Handle iteration over inherited properties before own properties. - if ( jQuery.support.ownLast ) { - for ( key in obj ) { - return core_hasOwn.call( obj, key ); - } - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // keepScripts (optional): If true, will include scripts passed in the html string - parseHTML: function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - if ( scripts ) { - jQuery( scripts ).remove(); - } - return jQuery.merge( [], parsed.childNodes ); - }, - - parseJSON: function( data ) { - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - if ( data === null ) { - return data; - } - - if ( typeof data === "string" ) { - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - if ( data ) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - } - } - } - - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - core_push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return core_concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations. - // Note: this method belongs to the css module but it's needed here for the support module. - // If support gets modularized, this method should be moved back to the css module. - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} - - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); -}; - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || type !== "function" && - ( length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj ); -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); -/*! - * Sizzle CSS Selector Engine v1.10.2 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03 - */ -(function( window, undefined ) { - -var i, - support, - cachedruns, - Expr, - getText, - isXML, - compile, - outermostContext, - sortInput, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - hasDuplicate = false, - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - - // Prefer arguments quoted, - // then not containing pseudos/brackets, - // then attribute selectors/non-parenthetical expressions, - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rsibling = new RegExp( whitespace + "*[+~]" ), - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - // BMP codepoint - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( documentIsHTML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && context.parentNode || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key += " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Detect xml - * @param {Element|Object} elem An element or a document - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent.attachEvent && parent !== parent.top ) { - parent.attachEvent( "onbeforeunload", function() { - setDocument(); - }); - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = assert(function( div ) { - div.innerHTML = "<div class='a'></div><div class='a i'></div>"; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = "<select><option selected=''></option></select>"; - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - - // Support: Opera 10-12/IE8 - // ^= $= *= and empty values - // Should not select anything - // Support: Windows 8 Native Apps - // The type attribute is restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "t", "" ); - - if ( div.querySelectorAll("[t^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - } : - function( a, b ) { - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Parentless nodes are either documents or disconnected - } else if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [elem] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val === undefined ? - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null : - val; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[5] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] && match[4] !== undefined ) { - match[2] = match[4]; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( tokens = [] ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var data, cache, outerCache, - dirkey = dirruns + " " + doneName; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { - if ( (data = cache[1]) === true || data === cachedruns ) { - return data === true; - } - } else { - cache = outerCache[ dir ] = [ dirkey ]; - cache[1] = matcher( elem, context, xml ) || cachedruns; - if ( cache[1] === true ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - // A counter to specify which element is currently being matched - var matcherCachedRuns = 0, - bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); - - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = matcherCachedRuns; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - for ( ; (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - cachedruns = ++matcherCachedRuns; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; -}; - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - match = tokenize( selector ); - - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - } - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && context.parentNode || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - } - - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) - ); - return results; -} - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - elem[ name ] === true ? name.toLowerCase() : null; - } - }); -} - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})( window ); -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); -jQuery.support = (function( support ) { - - var all, a, input, select, fragment, opt, eventName, isSupported, i, - div = document.createElement("div"); - - // Setup - div.setAttribute( "className", "t" ); - div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; - - // Finish early in limited (non-browser) environments - all = div.getElementsByTagName("*") || []; - a = div.getElementsByTagName("a")[ 0 ]; - if ( !a || !a.style || !all.length ) { - return support; - } - - // First batch of tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; - - a.style.cssText = "top:1px;float:left;opacity:.5"; - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - support.getSetAttribute = div.className !== "t"; - - // IE strips leading whitespace when .innerHTML is used - support.leadingWhitespace = div.firstChild.nodeType === 3; - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - support.tbody = !div.getElementsByTagName("tbody").length; - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - support.htmlSerialize = !!div.getElementsByTagName("link").length; - - // Get the style information from getAttribute - // (IE uses .cssText instead) - support.style = /top/.test( a.getAttribute("style") ); - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - support.hrefNormalized = a.getAttribute("href") === "/a"; - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - support.opacity = /^0.5/.test( a.style.opacity ); - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - support.cssFloat = !!a.style.cssFloat; - - // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) - support.checkOn = !!input.value; - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - support.optSelected = opt.selected; - - // Tests for enctype support on a form (#6743) - support.enctype = !!document.createElement("form").enctype; - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>"; - - // Will be defined later - support.inlineBlockNeedsLayout = false; - support.shrinkWrapBlocks = false; - support.pixelPosition = false; - support.deleteExpando = true; - support.noCloneEvent = true; - support.reliableMarginRight = true; - support.boxSizingReliable = true; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<9 - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - // Check if we can trust getAttribute("value") - input = document.createElement("input"); - input.setAttribute( "value", "" ); - support.input = input.getAttribute( "value" ) === ""; - - // Check if an input maintains its value after becoming a radio - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "checked", "t" ); - input.setAttribute( "name", "t" ); - - fragment = document.createDocumentFragment(); - fragment.appendChild( input ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) - for ( i in { submit: true, change: true, focusin: true }) { - div.setAttribute( eventName = "on" + i, "t" ); - - support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - // Support: IE<9 - // Iteration over object's inherited properties before its own. - for ( i in jQuery( support ) ) { - break; - } - support.ownLast = i !== "0"; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, marginDiv, tds, - divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - container = document.createElement("div"); - container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - - body.appendChild( container ).appendChild( div ); - - // Support: IE8 - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Support: IE8 - // Check if empty table cells still have offsetWidth/Height - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check box-sizing and margin behavior. - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - - // Workaround failing boxSizing test due to offsetWidth returning wrong value - // with some non-1 values of body zoom, ticket #13543 - jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { - support.boxSizing = div.offsetWidth === 4; - }); - - // Use window.getComputedStyle because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = div.appendChild( document.createElement("div") ); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } - - if ( typeof div.style.zoom !== core_strundefined ) { - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - div.style.display = "block"; - div.innerHTML = "<div></div>"; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - - if ( support.inlineBlockNeedsLayout ) { - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); - - // Null elements to avoid leaks in IE - container = div = tds = marginDiv = null; - }); - - // Null elements to avoid leaks in IE - all = select = fragment = opt = a = input = null; - - return support; -})({}); - -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; - -function internalData( elem, name, data, pvt /* Internal Use Only */ ){ - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var ret, thisCache, - internalKey = jQuery.expando, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - // Avoid exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( typeof name === "string" ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, i, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } else { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - i = name.length; - while ( i-- ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - /* jshint eqeqeq: false */ - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - /* jshint eqeqeq: true */ - delete cache[ id ]; - - // When all else fails, null - } else { - cache[ id ] = null; - } -} - -jQuery.extend({ - cache: {}, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "applet": true, - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data ) { - return internalData( elem, name, data ); - }, - - removeData: function( elem, name ) { - return internalRemoveData( elem, name ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - // Do not set data on non-element because it will not be cleared (#8335). - if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { - return false; - } - - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var attrs, name, - data = null, - i = 0, - elem = this[0]; - - // Special expections of .data basically thwart jQuery.access, - // so implement the relevant behavior ourselves - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attrs = elem.attributes; - for ( ; i < attrs.length; i++ ) { - name = attrs[i].name; - - if ( name.indexOf("data-") === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - return arguments.length > 1 ? - - // Sets one value - this.each(function() { - jQuery.data( this, key, value ); - }) : - - // Gets one value - // Try to fetch any internally stored data first - elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - jQuery._removeData( elem, type + "queue" ); - jQuery._removeData( elem, key ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var nodeHook, boolHook, - rclass = /[\t\r\n\f]/g, - rreturn = /\r/g, - rfocusable = /^(?:input|select|textarea|button|object)$/i, - rclickable = /^(?:a|area)$/i, - ruseDefault = /^(?:checked|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - getSetInput = jQuery.support.input; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - elem.className = jQuery.trim( cur ); - - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = arguments.length === 0 || typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - elem.className = value ? jQuery.trim( cur ) : ""; - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( core_rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === core_strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var ret, hooks, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // Use proper attribute retrieval(#6932, #12072) - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - elem.text; - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // oldIE doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === core_strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( core_rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - elem[ propName ] = false; - // Support: IE<9 - // Also clear defaultChecked/defaultSelected (if appropriate) - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = - elem[ propName ] = false; - } - - // See #9699 for explanation of this approach (setting first, then removal) - } else { - jQuery.attr( elem, name, "" ); - } - - elem.removeAttribute( getSetAttribute ? name : propName ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - return tabindex ? - parseInt( tabindex, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - -1; - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - // IE<8 needs the *property* name - elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); - - // Use defaultChecked and defaultSelected for oldIE - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; - } - - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; - - jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? - function( elem, name, isXML ) { - var fn = jQuery.expr.attrHandle[ name ], - ret = isXML ? - undefined : - /* jshint eqeqeq: false */ - (jQuery.expr.attrHandle[ name ] = undefined) != - getter( elem, name, isXML ) ? - - name.toLowerCase() : - null; - jQuery.expr.attrHandle[ name ] = fn; - return ret; - } : - function( elem, name, isXML ) { - return isXML ? - undefined : - elem[ jQuery.camelCase( "default-" + name ) ] ? - name.toLowerCase() : - null; - }; -}); - -// fix oldIE attroperties -if ( !getSetInput || !getSetAttribute ) { - jQuery.attrHooks.value = { - set: function( elem, value, name ) { - if ( jQuery.nodeName( elem, "input" ) ) { - // Does not return so that setAttribute is also used - elem.defaultValue = value; - } else { - // Use nodeHook if defined (#1954); otherwise setAttribute is fine - return nodeHook && nodeHook.set( elem, value, name ); - } - } - }; -} - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = { - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - elem.setAttributeNode( - (ret = elem.ownerDocument.createAttribute( name )) - ); - } - - ret.value = value += ""; - - // Break association with cloned elements by also using setAttribute (#9646) - return name === "value" || value === elem.getAttribute( name ) ? - value : - undefined; - } - }; - jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = - // Some attributes are constructed with empty-string values when not defined - function( elem, name, isXML ) { - var ret; - return isXML ? - undefined : - (ret = elem.getAttributeNode( name )) && ret.value !== "" ? - ret.value : - null; - }; - jQuery.valHooks.button = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return ret && ret.specified ? - ret.value : - undefined; - }, - set: nodeHook.set - }; - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - set: function( elem, value, name ) { - nodeHook.set( elem, value === "" ? false : value, name ); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }; - }); -} - - -// Some attributes require a special call on IE -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !jQuery.support.hrefNormalized ) { - // href/src property should get the full normalized URL (#10299/#12915) - jQuery.each([ "href", "src" ], function( i, name ) { - jQuery.propHooks[ name ] = { - get: function( elem ) { - return elem.getAttribute( name, 4 ); - } - }; - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Note: IE uppercases css property names, but if we were to .toLowerCase() - // .cssText, that would destroy case senstitivity in URL's, like in "background" - return elem.style.cssText || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !jQuery.support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - var tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = core_hasOwn.call( event, "type" ) ? event.type : event, - namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = core_slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var sel, handleObj, matches, i, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === core_strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); -var isSimple = /^.[^:#\[\.,]*$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - ret = [], - self = this, - len = self.length; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - cur = ret.push( cur ); - break; - } - } - } - - return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( jQuery.unique(all) ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); - - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - ret = jQuery.unique( ret ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - } - - return this.pushStack( ret ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( isSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; - }); -} -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /<tbody/i, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - manipulation_rcheckableType = /^(?:checkbox|radio)$/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "<select multiple='multiple'>", "</select>" ], - legend: [ 1, "<fieldset>", "</fieldset>" ], - area: [ 1, "<map>", "</map>" ], - param: [ 1, "<object>", "</object>" ], - thead: [ 1, "<table>", "</table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var - // Snapshot the DOM in case .domManip sweeps something relevant into its fragment - args = jQuery.map( this, function( elem ) { - return [ elem.nextSibling, elem.parentNode ]; - }), - i = 0; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - var next = args[ i++ ], - parent = args[ i++ ]; - - if ( parent ) { - // Don't use the snapshot next if it has moved (#13810) - if ( next && next.parentNode !== parent ) { - next = this.nextSibling; - } - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - // Allow new content to include elements from the context set - }, true ); - - // Force removal if there was no new content (e.g., from empty arguments) - return i ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback, allowIntersection ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback, allowIntersection ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery._evalUrl( node.src ); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -// Support: IE<8 -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted <tbody> from table fragments - if ( !jQuery.support.tbody ) { - - // String was a <table>, *may* have spurious <tbody> - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare <thead> or <tfoot> - wrap[1] === "<table>" && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - }, - - _evalUrl: function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } -}); -jQuery.fn.extend({ - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("<iframe frameborder='0' width='0' height='0'/>") - .css( "cssText", "display:block !important" ) - ).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document; - doc.write("<!doctype html><html><body>"); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} - -// Called ONLY from within css_defaultDisplay -function actualDisplay( name, doc ) { - var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - display = jQuery.css( elem[0], "display" ); - elem.remove(); - return display; -} - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -if ( !jQuery.support.opacity ) { - jQuery.cssHooks.opacity = { - get: function( elem, computed ) { - // IE uses filters for opacity - return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? - ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : - computed ? "1" : ""; - }, - - set: function( elem, value ) { - var style = elem.style, - currentStyle = elem.currentStyle, - opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", - filter = currentStyle && currentStyle.filter || style.filter || ""; - - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - - // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 - // if value === "", then remove inline opacity #12685 - if ( ( value >= 1 || value === "" ) && - jQuery.trim( filter.replace( ralpha, "" ) ) === "" && - style.removeAttribute ) { - - // Setting style.filter to null, "" & " " still leave "filter:" in the cssText - // if "filter:" is present at all, clearType is disabled, we want to avoid this - // style.removeAttribute is IE Only, but so apparently is this code path... - style.removeAttribute( "filter" ); - - // if there is no filter style applied in a css rule or unset inline opacity, we are done - if ( value === "" || currentStyle && !currentStyle.filter ) { - return; - } - } - - // otherwise, set new filter values - style.filter = ralpha.test( filter ) ? - filter.replace( ralpha, opacity ) : - filter + " " + opacity; - } - }; -} - -// These hooks cannot be added until DOM ready because the support test -// for it is not run until after DOM ready -jQuery(function() { - if ( !jQuery.support.reliableMarginRight ) { - jQuery.cssHooks.marginRight = { - get: function( elem, computed ) { - if ( computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } - }; - } - - // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 - // getComputedStyle returns percent when specified for top/left/bottom/right - // rather than make the css module depend on the offset module, we just check for it here - if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { - jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = { - get: function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - }; - }); - } - -}); - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 || - (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); - }; - - jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); - }; -} - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function(){ - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function(){ - var type = this.type; - // Use .is(":disabled") so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !manipulation_rcheckableType.test( type ) ); - }) - .map(function( i, elem ){ - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ){ - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -//Serialize an array of form elements or a set of -//key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - } -}); -var - // Document location - ajaxLocParts, - ajaxLocation, - ajax_nonce = jQuery.now(), - - ajax_rquery = /\?/, - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - - // Keep a copy of the old load method - _load = jQuery.fn.load, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat("*"); - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var deep, key, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, response, type, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = url.slice( off, url.length ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){ - jQuery.fn[ type ] = function( fn ){ - return this.on( type, fn ); - }; -}); - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var // Cross-domain detection vars - parts, - // Loop variable - i, - // URL without anti-cache param - cacheURL, - // Response headers as string - responseHeadersString, - // timeout handle - timeoutTimer, - - // To know if global events are to be dispatched - fireGlobals, - - transport, - // Response headers - responseHeaders, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - var firstDataType, ct, finalDataType, type, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and global -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - s.global = false; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function(s) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - - var script, - head = document.head || jQuery("head")[0] || document.documentElement; - - return { - - send: function( _, callback ) { - - script = document.createElement("script"); - - script.async = true; - - if ( s.scriptCharset ) { - script.charset = s.scriptCharset; - } - - script.src = s.url; - - // Attach handlers for all browsers - script.onload = script.onreadystatechange = function( _, isAbort ) { - - if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { - - // Handle memory leak in IE - script.onload = script.onreadystatechange = null; - - // Remove the script - if ( script.parentNode ) { - script.parentNode.removeChild( script ); - } - - // Dereference the script - script = null; - - // Callback if not abort - if ( !isAbort ) { - callback( 200, "success" ); - } - } - }; - - // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending - // Use native DOM manipulation to avoid our domManip AJAX trickery - head.insertBefore( script, head.firstChild ); - }, - - abort: function() { - if ( script ) { - script.onload( undefined, true ); - } - } - }; - } -}); -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); -var xhrCallbacks, xhrSupported, - xhrId = 0, - // #5280: Internet Explorer will keep connections alive if we don't abort on unload - xhrOnUnloadAbort = window.ActiveXObject && function() { - // Abort all pending requests - var key; - for ( key in xhrCallbacks ) { - xhrCallbacks[ key ]( undefined, true ); - } - }; - -// Functions to create xhrs -function createStandardXHR() { - try { - return new window.XMLHttpRequest(); - } catch( e ) {} -} - -function createActiveXHR() { - try { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } catch( e ) {} -} - -// Create the request object -// (This is still attached to ajaxSettings for backward compatibility) -jQuery.ajaxSettings.xhr = window.ActiveXObject ? - /* Microsoft failed to properly - * implement the XMLHttpRequest in IE7 (can't request local files), - * so we use the ActiveXObject when it is available - * Additionally XMLHttpRequest can be disabled in IE7/IE8 so - * we need a fallback. - */ - function() { - return !this.isLocal && createStandardXHR() || createActiveXHR(); - } : - // For all other browsers, use the standard XMLHttpRequest object - createStandardXHR; - -// Determine support properties -xhrSupported = jQuery.ajaxSettings.xhr(); -jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -xhrSupported = jQuery.support.ajax = !!xhrSupported; - -// Create transport if the browser can provide an xhr -if ( xhrSupported ) { - - jQuery.ajaxTransport(function( s ) { - // Cross domain only allowed if supported through XMLHttpRequest - if ( !s.crossDomain || jQuery.support.cors ) { - - var callback; - - return { - send: function( headers, complete ) { - - // Get a new xhr - var handle, i, - xhr = s.xhr(); - - // Open the socket - // Passing null username, generates a login popup on Opera (#2865) - if ( s.username ) { - xhr.open( s.type, s.url, s.async, s.username, s.password ); - } else { - xhr.open( s.type, s.url, s.async ); - } - - // Apply custom fields if provided - if ( s.xhrFields ) { - for ( i in s.xhrFields ) { - xhr[ i ] = s.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( s.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( s.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !s.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Need an extra try/catch for cross domain requests in Firefox 3 - try { - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - } catch( err ) {} - - // Do send the request - // This may raise an exception which is actually - // handled in jQuery.ajax (so no try/catch here) - xhr.send( ( s.hasContent && s.data ) || null ); - - // Listener - callback = function( _, isAbort ) { - var status, responseHeaders, statusText, responses; - - // Firefox throws exceptions when accessing properties - // of an xhr when a network error occurred - // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) - try { - - // Was never called and is aborted or complete - if ( callback && ( isAbort || xhr.readyState === 4 ) ) { - - // Only called once - callback = undefined; - - // Do not keep as active anymore - if ( handle ) { - xhr.onreadystatechange = jQuery.noop; - if ( xhrOnUnloadAbort ) { - delete xhrCallbacks[ handle ]; - } - } - - // If it's an abort - if ( isAbort ) { - // Abort it manually if needed - if ( xhr.readyState !== 4 ) { - xhr.abort(); - } - } else { - responses = {}; - status = xhr.status; - responseHeaders = xhr.getAllResponseHeaders(); - - // When requesting binary data, IE6-9 will throw an exception - // on any attempt to access responseText (#11426) - if ( typeof xhr.responseText === "string" ) { - responses.text = xhr.responseText; - } - - // Firefox throws an exception when accessing - // statusText for faulty cross-domain requests - try { - statusText = xhr.statusText; - } catch( e ) { - // We normalize with Webkit giving an empty statusText - statusText = ""; - } - - // Filter status for non standard behaviors - - // If the request is local and we have data: assume a success - // (success with no data won't get notified, that's the best we - // can do given current implementations) - if ( !status && s.isLocal && !s.crossDomain ) { - status = responses.text ? 200 : 404; - // IE - #1450: sometimes returns 1223 when it should be 204 - } else if ( status === 1223 ) { - status = 204; - } - } - } - } catch( firefoxAccessException ) { - if ( !isAbort ) { - complete( -1, firefoxAccessException ); - } - } - - // Call complete if needed - if ( responses ) { - complete( status, statusText, responses, responseHeaders ); - } - }; - - if ( !s.async ) { - // if we're in sync mode we fire the callback - callback(); - } else if ( xhr.readyState === 4 ) { - // (IE6 & IE7) if it's in cache and has been - // retrieved directly we need to fire the callback - setTimeout( callback ); - } else { - handle = ++xhrId; - if ( xhrOnUnloadAbort ) { - // Create the active xhrs callbacks list if needed - // and attach the unload handler - if ( !xhrCallbacks ) { - xhrCallbacks = {}; - jQuery( window ).unload( xhrOnUnloadAbort ); - } - // Add to list of active xhrs callbacks - xhrCallbacks[ handle ] = callback; - } - xhr.onreadystatechange = callback; - } - }, - - abort: function() { - if ( callback ) { - callback( undefined, true ); - } - } - }; - } - }); -} -var fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - }] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // we're done with this property - return tween; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = jQuery._data( elem, "fxshow" ); - - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE does not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - if ( jQuery.css( elem, "display" ) === "inline" && - jQuery.css( elem, "float" ) === "none" ) { - - // inline-level elements accept inline-block; - // block-level elements need to be inline with layout - if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { - style.display = "inline-block"; - - } else { - style.zoom = 1; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - if ( !jQuery.support.shrinkWrapBlocks ) { - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - } - - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - continue; - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = jQuery._data( elem, "fxshow", {} ); - } - - // store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - jQuery._removeData( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - } -} - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 -// Panic based approach to setting things on disconnected nodes - -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || jQuery._data( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = jQuery._data( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = jQuery._data( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // enable finishing flag on private data - data.finish = true; - - // empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // turn off finishing flag - delete data.finish; - }); - } -}); - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - attrs = { height: type }, - i = 0; - - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth? 1 : 0; - for( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p*Math.PI ) / 2; - } -}; - -jQuery.timers = []; -jQuery.fx = Tween.prototype.init; -jQuery.fx.tick = function() { - var timer, - timers = jQuery.timers, - i = 0; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - if ( timer() && jQuery.timers.push( timer ) ) { - jQuery.fx.start(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; - }; -} -jQuery.fn.offset = function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - box = { top: 0, left: 0 }, - elem = this[ 0 ], - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== core_strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ), - left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 ) - }; -}; - -jQuery.offset = { - - setOffset: function( elem, options, i ) { - var position = jQuery.css( elem, "position" ); - - // set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - var curElem = jQuery( elem ), - curOffset = curElem.offset(), - curCSSTop = jQuery.css( elem, "top" ), - curCSSLeft = jQuery.css( elem, "left" ), - calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, - props = {}, curPosition = {}, curTop, curLeft; - - // need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - } -}; - - -jQuery.fn.extend({ - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - parentOffset = { top: 0, left: 0 }, - elem = this[ 0 ]; - - // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // we assume that getBoundingClientRect is available when computed position is fixed - offset = elem.getBoundingClientRect(); - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - // note: when an element has margin: auto the offsetLeft and marginLeft - // are the same in Safari causing offset.left to incorrectly be 0 - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - return offsetParent || docElem; - }); - } -}); - - -// Create scrollLeft and scrollTop methods -jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { - var top = /Y/.test( prop ); - - jQuery.fn[ method ] = function( val ) { - return jQuery.access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? (prop in win) ? win[ prop ] : - win.document.documentElement[ method ] : - elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : jQuery( win ).scrollLeft(), - top ? val : jQuery( win ).scrollTop() - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? - elem : - elem.nodeType === 9 ? - elem.defaultView || elem.parentWindow : - false; -} -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return jQuery.access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest - // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); -// Limit scope pollution from any deprecated API -// (function() { - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - -// })(); -if ( typeof module === "object" && module && typeof module.exports === "object" ) { - // Expose jQuery as module.exports in loaders that implement the Node - // module pattern (including browserify). Do not create the global, since - // the user will be storing it themselves locally, and globals are frowned - // upon in the Node module world. - module.exports = jQuery; -} else { - // Otherwise expose jQuery to the global object as usual - window.jQuery = window.$ = jQuery; - - // Register as a named AMD module, since jQuery can be concatenated with other - // files that may use define, but not via a proper concatenation script that - // understands anonymous AMD modules. A named AMD is safest and most robust - // way to register. Lowercase jquery is used because AMD module names are - // derived from file names, and jQuery is normally delivered in a lowercase - // file name. Do this after creating the global so that if an AMD module wants - // to call noConflict to hide this version of jQuery, it will work. - if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function () { return jQuery; } ); - } -} - -})( window ); - -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document){ - var _jQuery = window.jQuery.noConflict(true); - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module) { - return function () { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - stringify = function (obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return JSON.stringify(obj); - } - return obj; - }, - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function (match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - arg = templateArgs[index + 2]; - if (typeof arg === 'function') { - return arg.toString().replace(/ ?\{[\s\S]*$/, ''); - } else if (typeof arg === 'undefined') { - return 'undefined'; - } else if (typeof arg !== 'string') { - return toJson(arg); - } - return arg; - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.2.16/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + - encodeURIComponent(stringify(arguments[i])); - } - - return new Error(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global - -angular, - -msie, - -jqLite, - -jQuery, - -slice, - -push, - -toString, - -ngMinErr, - -_angular, - -angularModule, - -nodeName_, - -uid, - - -lowercase, - -uppercase, - -manualLowercase, - -manualUppercase, - -nodeName_, - -isArrayLike, - -forEach, - -sortedKeys, - -forEachSorted, - -reverseParams, - -nextUid, - -setHashKey, - -extend, - -int, - -inherit, - -noop, - -identity, - -valueFn, - -isUndefined, - -isDefined, - -isObject, - -isString, - -isNumber, - -isDate, - -isArray, - -isFunction, - -isRegExp, - -isWindow, - -isScope, - -isFile, - -isBlob, - -isBoolean, - -trim, - -isElement, - -makeMap, - -map, - -size, - -includes, - -indexOf, - -arrayRemove, - -isLeafNode, - -copy, - -shallowCopy, - -equals, - -csp, - -concat, - -sliceArgs, - -bind, - -toJsonReplacer, - -toJson, - -fromJson, - -toBoolean, - -startingTag, - -tryDecodeURIComponent, - -parseKeyValue, - -toKeyValue, - -encodeUriSegment, - -encodeUriQuery, - -angularInit, - -bootstrap, - -snake_case, - -bindJQuery, - -assertArg, - -assertArgFn, - -assertNotHasOwnProperty, - -getter, - -getBlockElements, - -hasOwnProperty, - -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var /** holds major version number for IE or NaN for real browsers */ - msie, - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - - _angular = window.angular, - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - nodeName_, - uid = ['0', '0', '0']; - -/** - * IE 11 changed the format of the UserAgent string. - * See http://msdn.microsoft.com/en-us/library/ms537503.aspx - */ -msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -if (isNaN(msie)) { - msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -} - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === 1 && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` - * is the value of an object property or an array element and `key` is the object property key or - * array element index. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key){ - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ -function forEach(obj, iterator, context) { - var key; - if (obj) { - if (isFunction(obj)){ - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context); - } else if (isArrayLike(obj)) { - for (key = 0; key < obj.length; key++) - iterator.call(context, obj[key], key); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys.sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for ( var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric - * characters such as '012ABC'. The reason why we are not using simply a number counter is that - * the number string gets longer over time, and it can also overflow, where as the nextId - * will grow much slower, it is a string, and it will never overflow. - * - * @returns {string} an unique alpha-numeric string - */ -function nextUid() { - var index = uid.length; - var digit; - - while(index) { - index--; - digit = uid[index].charCodeAt(0); - if (digit == 57 /*'9'*/) { - uid[index] = 'A'; - return uid.join(''); - } - if (digit == 90 /*'Z'*/) { - uid[index] = '0'; - } else { - uid[index] = String.fromCharCode(digit + 1); - return uid.join(''); - } - } - uid.unshift('0'); - return uid.join(''); -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @function - * - * @description - * Extends the destination object `dst` by copying all of the properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - forEach(arguments, function(obj){ - if (obj !== dst) { - forEach(obj, function(value, key){ - dst[key] = value; - }); - } - }); - - setHashKey(dst,h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(new (extend(function() {}, {prototype:parent}))(), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value){return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value){return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value){return value != null && typeof value === 'object';} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value){return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value){return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value){ - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(value) { - return toString.call(value) === '[object Array]'; -} - - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value){return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -var trim = (function() { - // native trim is way faster: http://jsperf.com/angular-trim-test - // but IE doesn't have it... :-( - // TODO: we should move this into IE/ES5 polyfill - if (!String.prototype.trim) { - return function(value) { - return isString(value) ? value.replace(/^\s\s*/, '').replace(/\s\s*$/, '') : value; - }; - } - return function(value) { - return isString(value) ? value.trim() : value; - }; -})(); - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str){ - var obj = {}, items = str.split(","), i; - for ( i = 0; i < items.length; i++ ) - obj[ items[i] ] = true; - return obj; -} - - -if (msie < 9) { - nodeName_ = function(element) { - element = element.nodeName ? element : element[0]; - return (element.scopeName && element.scopeName != 'HTML') - ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; - }; -} else { - nodeName_ = function(element) { - return element.nodeName ? element.nodeName : element[0].nodeName; - }; -} - - -function map(obj, iterator, context) { - var results = []; - forEach(obj, function(value, index, list) { - results.push(iterator.call(context, value, index, list)); - }); - return results; -} - - -/** - * @description - * Determines the number of elements in an array, the number of properties an object has, or - * the length of a string. - * - * Note: This function is used to augment the Object type in Angular expressions. See - * {@link angular.Object} for more information about Angular arrays. - * - * @param {Object|Array|string} obj Object, array, or string to inspect. - * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object - * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array. - */ -function size(obj, ownPropsOnly) { - var count = 0, key; - - if (isArray(obj) || isString(obj)) { - return obj.length; - } else if (isObject(obj)){ - for (key in obj) - if (!ownPropsOnly || obj.hasOwnProperty(key)) - count++; - } - - return count; -} - - -function includes(array, obj) { - return indexOf(array, obj) != -1; -} - -function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for (var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; -} - -function arrayRemove(array, value) { - var index = indexOf(array, value); - if (index >=0) - array.splice(index, 1); - return value; -} - -function isLeafNode (node) { - if (node) { - switch (node.nodeName) { - case "OPTION": - case "PRE": - case "TITLE": - return true; - } - } - return false; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for array) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="Controller"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - function Controller($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - } - </script> - </file> - </example> - */ -function copy(source, destination){ - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, []); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source); - } else if (isObject(source)) { - destination = copy(source, {}); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - if (isArray(source)) { - destination.length = 0; - for ( var i = 0; i < source.length; i++) { - destination.push(copy(source[i])); - } - } else { - var h = destination.$$hashKey; - forEach(destination, function(value, key){ - delete destination[key]; - }); - for ( var key in source) { - destination[key] = copy(source[key]); - } - setHashKey(destination,h); - } - } - return destination; -} - -/** - * Create a shallow copy of an object - */ -function shallowCopy(src, dst) { - dst = dst || {}; - - for(var key in src) { - // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src - // so we don't need to worry about using our custom hasOwnProperty here - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavasScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for(key=0; key<length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - return isDate(o2) && o1.getTime() == o2.getTime(); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for(key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for(key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - - -function csp() { - return (document.securityPolicy && document.securityPolicy.isActive) || - (document.querySelector && - !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]'))); -} - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0))) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace. - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized thingy. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -function toBoolean(value) { - if (typeof value === 'function') { - value = true; - } else if (value && value.length !== 0) { - var v = lowercase("" + value); - value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); - } else { - value = false; - } - return value; -} - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch(e) {} - // As Per DOM Standards - var TEXT_NODE = 3; - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch(e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch(e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue){ - if ( keyValue ) { - key_value = keyValue.split('='); - key = tryDecodeURIComponent(key_value[0]); - if ( isDefined(key) ) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!obj[key]) { - obj[key] = val; - } else if(isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common, way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - */ -function angularInit(element, bootstrap) { - var elements = [element], - appElement, - module, - names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], - NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; - - function append(element) { - element && elements.push(element); - } - - forEach(names, function(name) { - names[name] = true; - append(document.getElementById(name)); - name = name.replace(':', '\\:'); - if (element.querySelectorAll) { - forEach(element.querySelectorAll('.' + name), append); - forEach(element.querySelectorAll('.' + name + '\\:'), append); - forEach(element.querySelectorAll('[' + name + ']'), append); - } - }); - - forEach(elements, function(element) { - if (!appElement) { - var className = ' ' + element.className + ' '; - var match = NG_APP_CLASS_REGEXP.exec(className); - if (match) { - appElement = element; - module = (match[2] || '').replace(/\s+/g, ','); - } else { - forEach(element.attributes, function(attr) { - if (!appElement && names[attr.name]) { - appElement = element; - module = attr.value; - } - }); - } - } - }); - if (appElement) { - bootstrap(appElement, module ? [module] : []); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * <example name="multi-bootstrap" module="multi-bootstrap"> - * <file name="index.html"> - * <script src="../../../angular.js"></script> - * <div ng-controller="BrokenTable"> - * <table> - * <tr> - * <th ng-repeat="heading in headings">{{heading}}</th> - * </tr> - * <tr ng-repeat="filling in fillings"> - * <td ng-repeat="fill in filling">{{fill}}</td> - * </tr> - * </table> - * </div> - * </file> - * <file name="controller.js"> - * var app = angular.module('multi-bootstrap', []) - * - * .controller('BrokenTable', function($scope) { - * $scope.headings = ['One', 'Two', 'Three']; - * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; - * }); - * </file> - * <file name="protractor.js" type="protractor"> - * it('should only insert one table cell for each item in $scope.fillings', function() { - * expect(element.all(by.css('td')).count()) - * .toBe(9); - * }); - * </file> - * </example> - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a run block. - * See: {@link angular.module modules} - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules) { - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - modules.unshift('ng'); - var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', - function(scope, element, compile, injector, animate) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator){ - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -function bindJQuery() { - // bind to jQuery if present; - jQuery = window.jQuery; - // reset to jQuery or default to us. - if (jQuery) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - // Method signature: - // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) - jqLitePatchJQueryRemove('remove', true, true, false); - jqLitePatchJQueryRemove('empty', false, false, false); - jqLitePatchJQueryRemove('html', false, false, true); - } else { - jqLite = JQLite; - } - angular.element = jqLite; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {DOMElement} object containing the elements - */ -function getBlockElements(nodes) { - var startNode = nodes[0], - endNode = nodes[nodes.length - 1]; - if (startNode === endNode) { - return jqLite(startNode); - } - - var element = startNode; - var elements = [element]; - - do { - element = element.nextSibling; - if (!element) break; - elements.push(element); - } while (element !== endNode); - - return jqLite(elements); -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. -<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If ->>>>>* unspecified then the module is being retrieved for further configuration. - * @param {Function} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke'); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * @returns {Array.<string>} List of module names which must be loaded before this module. - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * @returns {string} Name of the module. - * @description - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod) { - return function() { - invokeQueue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global - angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - requiredDirective, - requiredDirective, - ngValueDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.2.16', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 2, - dot: 16, - codeName: 'badger-enumeration' -}; - - -function publishExternalAPI(angular){ - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop':noop, - 'bind':bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity':identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - '$$minErr': minErr, - '$$csp': csp - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - required: requiredDirective, - ngRequired: requiredDirective, - ngValue: ngValueDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback : $$AsyncCallbackProvider - }); - } - ]); -} - -/* global - - -JQLitePrototype, - -addEventListenerFn, - -removeEventListenerFn, - -BOOLEAN_ATTR -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - * - [`data()`](http://api.jquery.com/data/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng-' + new Date().getTime(), - jqId = 1, - addEventListenerFn = (window.document.addEventListener - ? function(element, type, fn) {element.addEventListener(type, fn, false);} - : function(element, type, fn) {element.attachEvent('on' + type, fn);}), - removeEventListenerFn = (window.document.removeEventListener - ? function(element, type, fn) {element.removeEventListener(type, fn, false); } - : function(element, type, fn) {element.detachEvent('on' + type, fn); }); - -/* - * !!! This is an undocumented "private" function !!! - */ -var jqData = JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -///////////////////////////////////////////// -// jQuery mutation patch -// -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a -// $destroy event on all DOM nodes being removed. -// -///////////////////////////////////////////// - -function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { - var originalJqFn = jQuery.fn[name]; - originalJqFn = originalJqFn.$original || originalJqFn; - removePatch.$original = originalJqFn; - jQuery.fn[name] = removePatch; - - function removePatch(param) { - // jshint -W040 - var list = filterElems && param ? [this.filter(param)] : [this], - fireEvent = dispatchThis, - set, setIndex, setLength, - element, childIndex, childLength, children; - - if (!getterIfNoArguments || param != null) { - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); - } - } - } - } - return originalJqFn.apply(this, arguments); - } -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteBuildFragment(html, context) { - var elem, tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i, j, jj; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - tmp = fragment.appendChild(context.createElement('div')); - // Convert html into DOM nodes - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = '<div>&#160;</div>' + - wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - tmp.removeChild(tmp.firstChild); - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - return nodes; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - return jqLiteBuildFragment(html, context); -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - if (isString(element)) { - element = trim(element); - } - if (!(this instanceof JQLite)) { - if (isString(element) && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (isString(element)) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - var fragment = jqLite(document.createDocumentFragment()); - fragment.append(this); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element){ - jqLiteRemoveData(element); - for ( var i = 0, children = element.childNodes || []; i < children.length; i++) { - jqLiteDealoc(children[i]); - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!handle) return; //no listeners registered - - if (isUndefined(type)) { - forEach(events, function(eventHandler, type) { - removeEventListenerFn(element, type, eventHandler); - delete events[type]; - }); - } else { - forEach(type.split(' '), function(type) { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type] || [], fn); - } - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete jqCache[expandoId].data[name]; - return; - } - - if (expandoStore.handle) { - expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - jqLiteOff(element); - } - delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. - } -} - -function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId || -1]; - - if (isDefined(value)) { - if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {}; - } - expandoStore[key] = value; - } else { - return expandoStore && expandoStore[key]; - } -} - -function jqLiteData(element, key, value) { - var data = jqLiteExpandoStore(element, 'data'), - isSetter = isDefined(value), - keyDefined = !isSetter && isDefined(key), - isSimpleGetter = keyDefined && !isObject(key); - - if (!data && !isSimpleGetter) { - jqLiteExpandoStore(element, 'data', data = {}); - } - - if (isSetter) { - data[key] = value; - } else { - if (keyDefined) { - if (isSimpleGetter) { - // don't create data in this case. - return data && data[key]; - } else { - extend(data, key); - } - } else { - return data; - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf( " " + selector + " " ) > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - -function jqLiteAddNodes(root, elements) { - if (elements) { - elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements)) - ? elements - : [ elements ]; - for(var i=0; i < elements.length; i++) { - root.push(elements[i]); - } - } -} - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - element = jqLite(element); - - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if(element[0].nodeType == 9) { - element = element.find('html'); - } - var names = isArray(name) ? name : [name]; - - while (element.length) { - var node = element[0]; - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = element.data(names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = jqLite(node.parentNode || (node.nodeType === 11 && node.host)); - } -} - -function jqLiteEmpty(element) { - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document already is loaded - if (document.readyState === 'complete'){ - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e){ value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[uppercase(value)] = true; -}); - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; -} - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element,name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - var val; - - if (msie <= 8) { - // this is some IE specific weirdness that jQuery 1.6.4 does not sure why - val = element.currentStyle && element.currentStyle[name]; - if (val === '') val = 'auto'; - } - - val = val || element.style[name]; - - if (msie <= 8) { - // jquery weirdness :-/ - val = (val === '') ? undefined : val; - } - - return val; - } - }, - - attr: function(element, name, value){ - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name)|| noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - var NODE_TYPE_TEXT_PROPERTY = []; - if (msie < 9) { - NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ - } else { - NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ - } - getText.$dv = ''; - return getText; - - function getText(element, value) { - var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; - if (isUndefined(value)) { - return textProp ? element[textProp] : ''; - } - element[textProp] = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (nodeName_(element) === 'SELECT' && element.multiple) { - var result = []; - forEach(element.options, function (option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name){ - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < this.length; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(this.length, 1) : this.length; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < this.length; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function (event, type) { - if (!event.preventDefault) { - event.preventDefault = function() { - event.returnValue = false; //ie - }; - } - - if (!event.stopPropagation) { - event.stopPropagation = function() { - event.cancelBubble = true; //ie - }; - } - - if (!event.target) { - event.target = event.srcElement || document; - } - - if (isUndefined(event.defaultPrevented)) { - var prevent = event.preventDefault; - event.preventDefault = function() { - event.defaultPrevented = true; - prevent.call(event); - }; - event.defaultPrevented = false; - } - - event.isDefaultPrevented = function() { - return event.defaultPrevented || event.returnValue === false; - }; - - // Copy event handlers in case event handlers array is modified during execution. - var eventHandlersCopy = shallowCopy(events[type || event.type] || []); - - forEach(eventHandlersCopy, function(fn) { - fn.call(element, event); - }); - - // Remove monkey-patched methods (IE), - // as they would cause memory leaks in IE8. - if (msie <= 8) { - // IE7/8 does not allow to delete property on native object - event.preventDefault = null; - event.stopPropagation = null; - event.isDefaultPrevented = null; - } else { - // It shouldn't affect normal browsers (native methods are defined on prototype). - delete event.preventDefault; - delete event.stopPropagation; - delete event.isDefaultPrevented; - } - }; - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - dealoc: jqLiteDealoc, - - on: function onFn(element, type, fn, unsupported){ - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!events) jqLiteExpandoStore(element, 'events', events = {}); - if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events)); - - forEach(type.split(' '), function(type){ - var eventFns = events[type]; - - if (!eventFns) { - if (type == 'mouseenter' || type == 'mouseleave') { - var contains = document.body.contains || document.body.compareDocumentPosition ? - function( a, b ) { - // jshint bitwise: false - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - events[type] = []; - - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; - - onFn(element, eventmap[type], function(event) { - var target = this, related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !contains(target, related)) ){ - handle(event, type); - } - }); - - } else { - addEventListenerFn(element, type, handle); - events[type] = []; - } - eventFns = events[type]; - } - eventFns.push(fn); - }); - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node){ - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element){ - if (element.nodeType === 1) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - forEach(new JQLite(node), function(child){ - if (element.nodeType === 1 || element.nodeType === 11) { - element.appendChild(child); - } - }); - }, - - prepend: function(element, node) { - if (element.nodeType === 1) { - var index = element.firstChild; - forEach(new JQLite(node), function(child){ - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode)[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: function(element) { - jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - forEach(new JQLite(newElement), function(node){ - parent.insertBefore(node, index.nextSibling); - index = node; - }); - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className){ - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - - next: function(element) { - if (element.nextElementSibling) { - return element.nextElementSibling; - } - - // IE8 doesn't have nextElementSibling - var elm = element.nextSibling; - while (elm != null && elm.nodeType !== 1) { - elm = elm.nextSibling; - } - return elm; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, eventName, eventData) { - var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; - - eventData = eventData || []; - - var event = [{ - preventDefault: noop, - stopPropagation: noop - }]; - - forEach(eventFns, function(fn) { - fn.apply(element, event.concat(eventData)); - }); - } -}, function(fn, name){ - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - for(var i=0; i < this.length; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj) { - var objType = typeof obj, - key; - - if (objType == 'object' && obj !== null) { - if (typeof (key = obj.$$hashKey) == 'function') { - // must invoke on object to keep the right this - key = obj.$$hashKey(); - } else if (key === undefined) { - key = obj.$$hashKey = nextUid(); - } - } else { - key = obj; - } - - return objType + ':' + key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array){ - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @function - * - * @description - * Creates an injector function that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @returns {function()} Injector function. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document){ - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); -function annotate(fn) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn == 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ - arg.replace(FN_ARG, function(all, underscore, name){ - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * @function - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector){ - * return $injector; - * }).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with - * minification, and obfuscation tools since these tools change the argument names. - * - * ## `$inject` Annotation - * By adding a `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exist. - * - * @param {string} Name of the service to query. - * @returns {boolean} returns true if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function invokes the new - * operator and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc object - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad) { - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function() { - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(servicename) { - var provider = providerInjector.get(servicename + providerSuffix); - return instanceInjector.invoke(provider.$get, provider); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val)); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad){ - var runBlocks = [], moduleFn, invokeQueue, i, ii; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - - for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { - var invokeArgs = invokeQueue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals){ - var args = [], - $inject = annotate(fn), - length, i, - key; - - for(i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key) - ); - } - if (!fn.$inject) { - // this means that we must be an array. - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals) { - var Constructor = function() {}, - instance, returnedValue; - - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype; - instance = new Constructor(); - returnedValue = invoke(Type, instance, locals); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -/** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks current value of `$location.hash()` and scroll to related element, - * according to rules specified in - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor. - * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`. - * - * @example - <example> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollCtrl"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - function ScrollCtrl($scope, $location, $anchorScroll) { - $scope.gotoBottom = function (){ - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - } - </file> - <file name="style.css"> - #scrollArea { - height: 350px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // helper function to get first anchor from a NodeList - // can't use filter.filter, as it accepts only instances of Array - // and IE can't convert NodeList to an array using [].slice - // TODO(vojta): use filter if we change it to accept lists as well - function getFirstAnchor(list) { - var result = null; - forEach(list, function(element) { - if (!result && lowercase(element.nodeName) === 'a') result = element; - }); - return result; - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) $window.scrollTo(0, 0); - - // element with given id - else if ((elm = document.getElementById(hash))) elm.scrollIntoView(); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView(); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') $window.scrollTo(0, 0); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction() { - $rootScope.$evalAsync(scroll); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if(arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) { - - function async(fn) { - fn && $$asyncCallback(fn); - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - - /** - * - * @ngdoc method - * @name $animate#enter - * @function - * @description Inserts the element into the DOM either after the `after` element or within - * the `parent` element. Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {Function=} done callback function that will be called after the element has been - * inserted into the DOM - */ - enter : function(element, parent, after, done) { - if (after) { - after.after(element); - } else { - if (!parent || !parent[0]) { - parent = after.parent(); - } - parent.append(element); - } - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @function - * @description Removes the element from the DOM. Once complete, the done() callback will be - * fired (if provided). - * @param {DOMElement} element the element which will be removed from the DOM - * @param {Function=} done callback function that will be called after the element has been - * removed from the DOM - */ - leave : function(element, done) { - element.remove(); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. Once complete, the - * done() callback will be fired (if provided). - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {Function=} done the callback function (if provided) that will be fired after the - * element has been moved to its new position - */ - move : function(element, parent, after, done) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - this.enter(element, parent, after, done); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @function - * @description Adds the provided className CSS class value to the provided element. Once - * complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been added to the element - */ - addClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteAddClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @function - * @description Removes the provided className CSS class value from the provided element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been removed from the element - */ - removeClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteRemoveClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, done) { - forEach(element, function (element) { - jqLiteAddClass(element, add); - jqLiteRemoveClass(element, remove); - }); - async(done); - }, - - enabled : noop - }; - }]; -}]; - -function $$AsyncCallbackProvider(){ - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {function()} XHR XMLHttpRequest constructor. - * @param {object} $log console.log or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while(outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn){ pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn){ pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var lastBrowserUrl = location.href, - baseElement = document.find('base'), - newLocation = null; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record ? - */ - self.url = function(url, replace) { - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - if (lastBrowserUrl == url) return; - lastBrowserUrl = url; - if ($sniffer.history) { - if (replace) history.replaceState(null, '', url); - else { - history.pushState(null, '', url); - // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462 - baseElement.attr('href', baseElement.attr('href')); - } - } else { - newLocation = url; - if (replace) { - location.replace(url); - } else { - location.href = url; - } - } - return self; - // getter - } else { - // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href - // methods not updating location.href synchronously. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return newLocation || location.href.replace(/%27/g,"'"); - } - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function fireUrlChange() { - newLocation = null; - if (lastBrowserUrl == self.url()) return; - - lastBrowserUrl = self.url(); - forEach(urlChangeListeners, function(listener) { - listener(self.url()); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); - // hashchange event - if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); - // polling - else self.addPollFn(fireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - /* global escape: false, unescape: false */ - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = escape(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '"+ name + - "' possibly not set or overflowed because it was too large ("+ - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = unescape(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = unescape(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider(){ - this.$get = ['$window', '$log', '$sniffer', '$document', - function( $window, $log, $sniffer, $document){ - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - $scope.cache.put(key, value); - $scope.keys.push(key); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the of the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be below the `ng-app` definition. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * replace: false, - * transclude: false, - * restrict: 'A', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression and to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. - * `function([scope], cloneLinkingFn)`. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the - * `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the default (attributes only) is used. - * - * * `E` - Element name: `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `template` - * replace the current element with the contents of the HTML. The replacement process - * migrates all of the attributes / classes from the old element to the new one. See the - * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive - * Directives Guide} for an example. - * - * You can specify `template` as a string representing the template or as a function which takes - * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and - * returns a string value representing the template. - * - * - * #### `templateUrl` - * Same as `template` but the template is loaded from the specified URL. Because - * the template loading is asynchronous the compilation/linking is suspended until the template - * is loaded. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - * specify where the template should be inserted. Defaults to `false`. - * - * * `true` - the template will replace the current element. - * * `false` - the template will replace the contents of the current element. - * - * - * #### `transclude` - * compile the content of the element and make it available to the directive. - * Typically used with {@link ng.directive:ngTransclude - * ngTransclude}. The advantage of transclusion is that the linking function receives a - * transclusion function which is pre-bound to the correct scope. In a typical setup the widget - * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate` - * scope. This makes it possible for the widget to have private state, and the transclusion to - * be bound to the parent (pre-`isolate`) scope. - * - * * `true` - transclude the content of the directive. - * * `'element'` - transclude the whole element including any directives defined at lower priority. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. Examples that require compile functions are - * directives that transform template DOM, such as {@link - * api/ng.directive:ngRepeat ngRepeat}, or load the contents - * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The - * compile function takes the following arguments. - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. This is the same as the `$transclude` - * parameter of directive controllers. - * `function([scope], cloneLinkingFn)`. - * - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. - * - * <a name="Attributes"></a> - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * Below is an example using `$compileProvider`. - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compile"> - <file name="index.html"> - <script> - angular.module('compile', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }) - }); - - function Ctrl($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - } - </script> - <div ng-controller="Ctrl"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives. - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * @function - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - /** - * @ngdoc method - * @name $compileProvider#directive - * @function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'A'; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attr) { - this.$$element = element; - this.$attr = attr || {}; - }; - - Attributes.prototype = { - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass : function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - var toRemove = tokenDifference(oldClasses, newClasses); - - if(toAdd.length === 0) { - $animate.removeClass(this.$$element, toRemove); - } else if(toRemove.length === 0) { - $animate.addClass(this.$$element, toAdd); - } else { - $animate.setClass(this.$$element, toAdd, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var booleanKey = getBooleanAttrName(this.$$element[0], key), - normalizedVal, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // sanitize a[href] and img[src] values - if ((nodeName === 'A' && key === 'href') || - (nodeName === 'IMG' && key === 'src')) { - this[key] = value = $$sanitizeUri(value, key === 'src'); - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[key], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#Attributes Directives} guide for more info. - * @returns {function()} the `fn` parameter. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = {})), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - return fn; - } - }; - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index){ - if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ - assertArg(scope, 'scope'); - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - var $linkNode = cloneConnectFn - ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! - : $compileNodes; - - forEach(transcludeControllers, function(instance, name) { - $linkNode.data('$' + name + 'Controller', instance); - }); - - // Attach scope only to non-text nodes. - for(var i = 0, ii = $linkNode.length; i<ii; i++) { - var node = $linkNode[i], - nodeType = node.nodeType; - if (nodeType === 1 /* element */ || nodeType === 9 /* document */) { - $linkNode.eq(i).data('$scope', scope); - } - } - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); - return $linkNode; - }; - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch(e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - safeAddClass(jqLite(nodeList[i]), 'ng-scope'); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); - - linkFns.push(nodeLinkFn, childLinkFn); - linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; - - // copy nodeList so that linking doesn't break due to live list updates. - var nodeListLength = nodeList.length, - stableNodeList = new Array(nodeListLength); - for (i = 0; i < nodeListLength; i++) { - stableNodeList[i] = nodeList[i]; - } - - for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) { - node = stableNodeList[n]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - $node = jqLite(node); - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - $node.data('$scope', childScope); - } else { - childScope = scope; - } - childTranscludeFn = nodeLinkFn.transclude; - if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, - createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) - ); - } else { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); - } - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn) { - return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { - var scopeCreated = false; - - if (!transcludedScope) { - transcludedScope = scope.$new(); - transcludedScope.$$transcluded = true; - scopeCreated = true; - } - - var clone = transcludeFn(transcludedScope, cloneFn, controllers); - if (scopeCreated) { - clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); - } - return clone; - }; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch(nodeType) { - case 1: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - if (!msie || msie >= 8 || attr.specified) { - name = attr.name; - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (NG_ATTR_BINDING.test(ngAttrName)) { - name = snake_case(ngAttrName.substr(6), '-'); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - attrs[nName] = value = trim(attr.value); - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - // use class as directive - className = node.className; - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case 3: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case 8: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - var startNode = node; - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == 1 /** Element **/) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for(var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - newScopeDirective = newScopeDirective || directive; - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - if (isObject(directiveValue)) { - newIsolateScopeDirective = directive; - } - } - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = groupScan(compileNode, attrStart, attrEnd); - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = jqLite(directiveValue); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - if (isString(require)) { - while((value = require.charAt(0)) == '^' || value == '?') { - require = require.substr(1); - if (value == '^') { - retrievalMethod = 'inheritedData'; - } - optional = optional || value == '?'; - } - value = null; - - if (elementControllers && retrievalMethod === 'data') { - value = elementControllers[require]; - } - value = value || $element[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; - - if (compileNode === linkNode) { - attrs = templateAttrs; - } else { - attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); - } - $element = attrs.$$element; - - if (newIsolateScopeDirective) { - var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; - var $linkNode = jqLite(linkNode); - - isolateScope = scope.$new(true); - - if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { - $linkNode.data('$isolateScope', isolateScope) ; - } else { - $linkNode.data('$isolateScopeNoTemplate', isolateScope); - } - - - - safeAddClass($linkNode, 'ng-isolate-scope'); - - forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP) || [], - attrName = match[3] || scopeName, - optional = (match[2] == '?'), - mode = match[1], // @, =, or & - lastValue, - parentGet, parentSet, compare; - - isolateScope.$$isolateBindings[scopeName] = mode + attrName; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateScope[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if( attrs[attrName] ) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateScope[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a,b) { return a === b; }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateScope[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateScope[scopeName] = parentGet(scope); - isolateScope.$watch(function parentValueWatch() { - var parentValue = parentGet(scope); - if (!compare(parentValue, isolateScope[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateScope[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateScope[scopeName]); - } - } - return lastValue = parentValue; - }, null, parentGet.literal); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateScope[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - - default: - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - newIsolateScopeDirective.name, scopeName, definition); - } - }); - } - transcludeFn = boundTranscludeFn && controllersBoundTransclude; - if (controllerDirectives) { - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals); - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance); - } - - if (directive.controllerAs) { - locals.$scope[directive.controllerAs] = controllerInstance; - } - }); - } - - // PRELINKING - for(i = 0, ii = preLinkFns.length; i < ii; i++) { - try { - linkFn = preLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for(i = postLinkFns.length - 1; i >= 0; i--) { - try { - linkFn = postLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // This is the function that is injected as `$transclude`. - function controllersBoundTransclude(scope, cloneAttachFn) { - var transcludeControllers; - - // no scope passed - if (arguments.length < 2) { - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for(var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i<ii; i++) { - try { - directive = directives[i]; - if ( (maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch(e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key]) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl; - - $compileNode.empty(); - - $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). - success(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = jqLite(content); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - - while(linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transclude) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }). - error(function(response, code, headers, config) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - if (linkQueue) { - linkQueue.push(scope); - linkQueue.push(node); - linkQueue.push(rootElement); - linkQueue.push(boundTranscludeFn); - } else { - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: valueFn(function textInterpolateLinkFn(scope, node) { - var parent = node.parent(), - bindings = parent.data('$binding') || []; - bindings.push(interpolateFn); - safeAddClass(parent.data('$binding', bindings), 'ng-binding'); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }) - }); - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "FORM" && attrNormalizedName == "action") || - (tag != "IMG" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name) { - var interpolateFn = $interpolate(value, true); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "SELECT") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // we need to interpolate again, in case the attribute value has been updated - // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the - // actual attr value - attr[name] = interpolateFn(scope); - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if(name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - }]; -} - -var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * All of these will become 'myDirective': - * my:Directive - * my-directive - * x-my-directive - * data-my:directive - * - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * @returns {object} A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * check `window[constructor]` on the global `window` object - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals) { - var instance, match, constructor, identifier; - - if(isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || getter($window, constructor, true); - - assertArgFn(expression, constructor, true); - } - - instance = $injector.instantiate(expression, locals); - - if (identifier) { - if (!(locals && typeof locals.$scope == 'object')) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - constructor || expression.name, identifier); - } - - locals.$scope[identifier] = instance; - } - - return instance; - }; - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - function MainCtrl($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - } - </file> - </example> - */ -function $DocumentProvider(){ - this.$get = ['$window', function(window){ - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () { - * return function (exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/, - CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; - - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: copy(CONTENT_TYPE_APPLICATION_JSON), - put: copy(CONTENT_TYPE_APPLICATION_JSON), - patch: copy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - /** - * Are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - */ - var interceptorFactories = this.interceptors = []; - - /** - * For historical reasons, response interceptors are ordered by the order in which - * they are applied to the response. (This is the opposite of interceptorFactories) - */ - var responseInterceptorFactories = this.responseInterceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - forEach(responseInterceptorFactories, function(interceptorFactory, index) { - var responseFn = isString(interceptorFactory) - ? $injector.get(interceptorFactory) - : $injector.invoke(interceptorFactory); - - /** - * Response interceptors go before "around" interceptors (no real reason, just - * had to pick one.) But they are already reversed, so we can't use unshift, hence - * the splice. - */ - reversedInterceptors.splice(index, 0, { - response: function(response) { - return responseFn($q.when(response)); - }, - responseError: function(response) { - return responseFn($q.reject(response)); - } - }); - }); - - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * $http({method: 'GET', url: '/someUrl'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * # Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * To globally augment or override the default transforms, modify the - * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` - * properties. These properties are by default an array of transform functions, which allows you - * to `push` or `unshift` a new transformation function into the transformation chain. You can - * also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. These defaults - * are again available on the $http factory at run-time, which may be useful if you have run-time - * services you wish to be involved in your transformations. - * - * Similarly, to locally override the request/response transforms, augment the - * `transformRequest` and/or `transformResponse` properties of the configuration object passed - * into `$http`. - * - * - * # Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * # Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with http `config` object. The function is free to - * modify the `config` or create a new one. The function needs to return the `config` - * directly or as a promise. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` or create a new one. The function needs to return the `response` - * directly or as a promise. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config || $q.when(config); - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response || $q.when(response); - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * # Response interceptors (DEPRECATED) - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous preprocessing of received responses, it is desirable to be able to intercept - * responses for http requests before they are handed over to the application code that - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return function(promise) { - * return promise.then(function(response) { - * // do something on success - * return response; - * }, function(response) { - * // do something on error - * if (canRecover(response)) { - * return responseOrNewPromise - * } - * return $q.reject(response); - * }); - * } - * }); - * - * $httpProvider.responseInterceptors.push('myHttpInterceptor'); - * - * - * // register the interceptor via an anonymous factory - * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { - * return function(promise) { - * // same as above - * } - * }); - * ``` - * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **transformResponse** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example> -<file name="index.html"> - <div ng-controller="FetchCtrl"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - - it('should make a JSONP request to angularjs.org', function() { - sampleJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Super Hero!/); - }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - var config = { - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }; - var headers = mergeHeaders(requestConfig); - - extend(config, requestConfig); - config.headers = headers; - config.method = uppercase(config.method); - - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - - var serverRequest = function(config) { - headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(config.data)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData, headers).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while(chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, config.transformResponse) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // execute if header value is function - execHeaders(defHeaders); - execHeaders(reqHeaders); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - return reqHeaders; - - function execHeaders(headers) { - var headerContent; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - headers[header] = headerContent; - } else { - delete headers[header]; - } - } - }); - } - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // if we won't have the response in cache, send the request to the backend - if (isUndefined(cachedResp)) { - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - resolvePromise(response, status, headersString, statusText); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText : statusText - }); - } - - - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - v = toJson(v); - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if(parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - - - }]; -} - -function createXhr(method) { - //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest - //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest - //if it is available - if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) || - !window.XMLHttpRequest)) { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } else if (window.XMLHttpRequest) { - return new window.XMLHttpRequest(); - } - - throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - var ABORTED = -1; - - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - var status; - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, status || -2); - } - callbacks[callbackId] = angular.noop; - }); - } else { - - var xhr = createXhr(method); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - // In IE6 and 7, this might be called synchronously when xhr.send below is called and the - // response is in the cache. the promise api will ensure that to the app code the api is - // always async - xhr.onreadystatechange = function() { - // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by - // xhrs that are resolved while the app is in the background (see #5426). - // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before - // continuing - // - // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and - // Safari respectively. - if (xhr && xhr.readyState == 4) { - var responseHeaders = null, - response = null; - - if(status !== ABORTED) { - responseHeaders = xhr.getAllResponseHeaders(); - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - response = ('response' in xhr) ? xhr.response : xhr.responseText; - } - - completeRequest(callback, - status || xhr.status, - response, - responseHeaders, - xhr.statusText || ''); - } - }; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (timeout && timeout.then) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - status = ABORTED; - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - timeoutId && $browserDefer.cancel(timeoutId); - jsonpDone = xhr = null; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status === 1223 ? 204 : status; - statusText = statusText || ''; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - script.onreadystatechange = script.onload = script.onerror = null; - rawDocument.body.removeChild(script); - if (done) done(); - }; - - script.type = 'text/javascript'; - script.src = url; - - if (msie && msie <= 8) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) { - doneWrapper(); - } - }; - } else { - script.onload = script.onerror = function() { - doneWrapper(); - }; - } - - rawDocument.body.appendChild(script); - return doneWrapper; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * @function - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function DemoController() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value){ - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value){ - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length; - - /** - * @ngdoc service - * @name $interpolate - * @function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * * `context`: an object against which any expressions embedded in the strings are evaluated - * against. - * - */ - function $interpolate(text, mustHaveExpression, trustedContext) { - var startIndex, - endIndex, - index = 0, - parts = [], - length = text.length, - hasInterpolation = false, - fn, - exp, - concat = []; - - while(index < length) { - if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - (index != startIndex) && parts.push(text.substring(index, startIndex)); - parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); - fn.exp = exp; - index = endIndex + endSymbolLength; - hasInterpolation = true; - } else { - // we did not find anything, so we have to add the remainder to the parts array - (index != length) && parts.push(text.substring(index)); - index = length; - } - } - - if (!(length = parts.length)) { - // we added, nothing, must have been an empty string. - parts.push(''); - length = 1; - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && parts.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || hasInterpolation) { - concat.length = length; - fn = function(context) { - try { - for(var i = 0, ii = length, part; i<ii; i++) { - if (typeof (part = parts[i]) == 'function') { - part = part(context); - if (trustedContext) { - part = $sce.getTrusted(trustedContext, part); - } else { - part = $sce.valueOf(part); - } - if (part === null || isUndefined(part)) { - part = ''; - } else if (typeof part != 'string') { - part = toJson(part); - } - } - concat[i] = part; - } - return concat.join(''); - } - catch(err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - }; - fn.exp = text; - fn.parts = parts; - return fn; - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', - function($rootScope, $window, $q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="time"> - * <file name="index.html"> - * <script> - * function Ctrl2($scope,$interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * } - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * } - * - * angular.module('time', []) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time ofter the DOM element was removed. - * element.bind('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }); - * </script> - * - * <div> - * <div ng-controller="Ctrl2"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply); - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - short: 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { - var parsedUrl = urlResolve(absoluteUrl, appBase); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj, appBase) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl, appBase); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} newAbsoluteUrl HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, appBase); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$rewrite = function(url) { - var appUrl, prevAppUrl; - - if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { - prevAppUrl = appUrl; - if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { - return appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - return appBase + prevAppUrl; - } - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { - return appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - return appBaseNoFile; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' - ? beginsWith(hashPrefix, withoutBaseUrl) - : (this.$$html5) - ? withoutBaseUrl - : ''; - - if (!isString(withoutHashUrl)) { - throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, - hashPrefix); - } - parseAppUrl(withoutHashUrl, this, appBase); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName (path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/?.*?:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - /* - * The input URL intentionally contains a - * first path segment that ends with a colon. - */ - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$rewrite = function(url) { - if(stripHash(appBase) == stripHash(url)) { - return url; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$rewrite = function(url) { - var appUrl; - - if ( appBase == stripHash(url) ) { - return url; - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { - return appBase + hashPrefix + appUrl; - } else if ( appBaseNoFile === url + '/') { - return appBaseNoFile; - } - }; -} - - -LocationHashbangInHtml5Url.prototype = - LocationHashbangUrl.prototype = - LocationHtml5Url.prototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing ? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @param {string=} replace The path that will be changed - * @return {string} url - */ - url: function(url, replace) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1]) this.path(decodeURIComponent(match[1])); - if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * @param {string=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. Hash object may contain an array of values, which will be decoded as duplicates in - * the url. - * - * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a - * single search parameter. If `paramValue` is an array, it will set the parameter as a - * comma-separated value. If `paramValue` is `null`, the parameter will be deleted. - * - * @return {string} search - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search)) { - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * @param {string=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', identity), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider(){ - var hashPrefix = '', - html5Mode = false; - - /** - * @ngdoc property - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc property - * @name $locationProvider#html5Mode - * @description - * @param {boolean=} mode Use HTML5 strategy if available. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isDefined(mode)) { - html5Mode = mode; - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', - function( $rootScope, $browser, $sniffer, $rootElement) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode) { - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parse($location.$$rewrite(initialUrl)); - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (event.ctrlKey || event.metaKey || event.which == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (lowercase(elm[0].nodeName) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - var rewrittenUrl = $location.$$rewrite(absHref); - - if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { - event.preventDefault(); - if (rewrittenUrl != $browser.url()) { - // update location manually - $location.$$parse(rewrittenUrl); - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - window.angular['ff-684208-preventDefault'] = true; - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl) { - if ($location.absUrl() != newUrl) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - - $location.$$parse(newUrl); - if ($rootScope.$broadcast('$locationChangeStart', newUrl, - oldUrl).defaultPrevented) { - $location.$$parse(oldUrl); - $browser.url(oldUrl); - } else { - afterLocationChange(oldUrl); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - } - }); - - // update browser - var changeCounter = 0; - $rootScope.$watch(function $locationWatch() { - var oldUrl = $browser.url(); - var currentReplace = $location.$$replace; - - if (!changeCounter || oldUrl != $location.absUrl()) { - changeCounter++; - $rootScope.$evalAsync(function() { - if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl). - defaultPrevented) { - $location.$$parse(oldUrl); - } else { - $browser.url($location.absUrl(), currentReplace); - afterLocationChange(oldUrl); - } - }); - } - $location.$$replace = false; - - return changeCounter; - }); - - return $location; - - function afterLocationChange(oldUrl) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example> - <file name="script.js"> - function LogCtrl($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - } - </file> - <file name="index.html"> - <div ng-controller="LogCtrl"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider(){ - var debug = true, - self = this; - - /** - * @ngdoc property - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window){ - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function () { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); -var promiseWarningCache = {}; -var promiseWarning; - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor(alert("evil JS code")) -// -// We want to prevent this type of access. For the sake of performance, during the lexing phase we -// disallow any "dotted" access to any member named "constructor". -// -// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor -// while evaluating the expression, which is a stronger but more expensive test. Since reflective -// calls are expensive anyway, this is not such a big deal compared to static dereferencing. -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// A developer could foil the name check by aliasing the Function constructor under a different -// name on the scope. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. - -function ensureSafeMemberName(name, fullExpression) { - if (name === "constructor") { - throw $parseMinErr('isecfld', - 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.document && obj.location && obj.alert && obj.setInterval) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var OPERATORS = { - /* jshint bitwise : false */ - 'null':function(){return null;}, - 'true':function(){return true;}, - 'false':function(){return false;}, - undefined:noop, - '+':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b)?b:undefined;}, - '-':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - return (isDefined(a)?a:0)-(isDefined(b)?b:0); - }, - '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, - '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, - '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, - '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, - '=':noop, - '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, - '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, - '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, - '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, - '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);}, - '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);}, - '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);}, - '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);}, - '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);}, - '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);}, - '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);}, -// '|':function(self, locals, a,b){return a|b;}, - '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));}, - '!':function(self, locals, a){return !a(self, locals);} -}; -/* jshint bitwise: true */ -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function (options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function (text) { - this.text = text; - - this.index = 0; - this.ch = undefined; - this.lastCh = ':'; // can start regexp - - this.tokens = []; - - var token; - var json = []; - - while (this.index < this.text.length) { - this.ch = this.text.charAt(this.index); - if (this.is('"\'')) { - this.readString(this.ch); - } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(this.ch)) { - this.readIdent(); - // identifiers can only be if the preceding char was a { or , - if (this.was('{,') && json[0] === '{' && - (token = this.tokens[this.tokens.length - 1])) { - token.json = token.text.indexOf('.') === -1; - } - } else if (this.is('(){}[].,;:?')) { - this.tokens.push({ - index: this.index, - text: this.ch, - json: (this.was(':[,') && this.is('{[')) || this.is('}]:,') - }); - if (this.is('{[')) json.unshift(this.ch); - if (this.is('}]')) json.shift(); - this.index++; - } else if (this.isWhitespace(this.ch)) { - this.index++; - continue; - } else { - var ch2 = this.ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var fn = OPERATORS[this.ch]; - var fn2 = OPERATORS[ch2]; - var fn3 = OPERATORS[ch3]; - if (fn3) { - this.tokens.push({index: this.index, text: ch3, fn: fn3}); - this.index += 3; - } else if (fn2) { - this.tokens.push({index: this.index, text: ch2, fn: fn2}); - this.index += 2; - } else if (fn) { - this.tokens.push({ - index: this.index, - text: this.ch, - fn: fn, - json: (this.was('[,:') && this.is('+-')) - }); - this.index += 1; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - this.lastCh = this.ch; - } - return this.tokens; - }, - - is: function(chars) { - return chars.indexOf(this.ch) !== -1; - }, - - was: function(chars) { - return chars.indexOf(this.lastCh) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9'); - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - number = 1 * number; - this.tokens.push({ - index: start, - text: number, - json: true, - fn: function() { return number; } - }); - }, - - readIdent: function() { - var parser = this; - - var ident = ''; - var start = this.index; - - var lastDot, peekIndex, methodName, ch; - - while (this.index < this.text.length) { - ch = this.text.charAt(this.index); - if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) { - if (ch === '.') lastDot = this.index; - ident += ch; - } else { - break; - } - this.index++; - } - - //check if this is not a method invocation and if it is back out to last dot - if (lastDot) { - peekIndex = this.index; - while (peekIndex < this.text.length) { - ch = this.text.charAt(peekIndex); - if (ch === '(') { - methodName = ident.substr(lastDot - start + 1); - ident = ident.substr(0, lastDot - start); - this.index = peekIndex; - break; - } - if (this.isWhitespace(ch)) { - peekIndex++; - } else { - break; - } - } - } - - - var token = { - index: start, - text: ident - }; - - // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn - if (OPERATORS.hasOwnProperty(ident)) { - token.fn = OPERATORS[ident]; - token.json = OPERATORS[ident]; - } else { - var getter = getterFn(ident, this.options, this.text); - token.fn = extend(function(self, locals) { - return (getter(self, locals)); - }, { - assign: function(self, value) { - return setter(self, ident, value, parser.text, parser.options); - } - }); - } - - this.tokens.push(token); - - if (methodName) { - this.tokens.push({ - index:lastDot, - text: '.', - json: false - }); - this.tokens.push({ - index: lastDot + 1, - text: methodName, - json: false - }); - } - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - if (rep) { - string += rep; - } else { - string += ch; - } - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - string: string, - json: true, - fn: function() { return string; } - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -/** - * @constructor - */ -var Parser = function (lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function () { - return 0; -}, { - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function (text, json) { - this.text = text; - - //TODO(i): strip all the obsolte json stuff from this file - this.json = json; - - this.tokens = this.lexer.lex(text); - - if (json) { - // The extra level of aliasing is here, just in case the lexer misses something, so that - // we prevent any accidental execution in JSON. - this.assignment = this.logicalOR; - - this.functionCall = - this.fieldAccess = - this.objectIndex = - this.filterChain = function() { - this.throwError('is not valid json', {text: text, index: 0}); - }; - } - - var value = json ? this.primary() : this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function () { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else { - var token = this.expect(); - primary = token.fn; - if (!primary) { - this.throwError('not a primary expression', token); - } - if (token.json) { - primary.constant = true; - primary.literal = true; - } - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - if (this.tokens.length > 0) { - var token = this.tokens[0]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4){ - var token = this.peek(e1, e2, e3, e4); - if (token) { - if (this.json && !token.json) { - this.throwError('is not valid json', token); - } - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1){ - if (!this.expect(e1)) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - }, - - unaryFn: function(fn, right) { - return extend(function(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant - }); - }, - - ternaryFn: function(left, middle, right){ - return extend(function(self, locals){ - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - }, - - binaryFn: function(left, fn, right) { - return extend(function(self, locals) { - return fn(self, locals, left, right); - }, { - constant:left.constant && right.constant - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function(self, locals) { - var value; - for (var i = 0; i < statements.length; i++) { - var statement = statements[i]; - if (statement) { - value = statement(self, locals); - } - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while (true) { - if ((token = this.expect('|'))) { - left = this.binaryFn(left, token.fn, this.filter()); - } else { - return left; - } - } - }, - - filter: function() { - var token = this.expect(); - var fn = this.$filter(token.text); - var argsFn = []; - while (true) { - if ((token = this.expect(':'))) { - argsFn.push(this.expression()); - } else { - var fnInvoke = function(self, locals, input) { - var args = [input]; - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](self, locals)); - } - return fn.apply(self, args); - }; - return function() { - return fnInvoke; - }; - } - } - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return function(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }; - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.ternary(); - if ((token = this.expect(':'))) { - return this.ternaryFn(left, middle, this.ternary()); - } else { - this.throwError('expected :', token); - } - } else { - return left; - } - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while (true) { - if ((token = this.expect('||'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } else { - return left; - } - } - }, - - logicalAND: function() { - var left = this.equality(); - var token; - if ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - if ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.fn, this.equality()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - if ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.fn, this.relational()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.fn, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.fn, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.fn, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.fn, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var parser = this; - var field = this.expect().text; - var getter = getterFn(field, this.options, this.text); - - return extend(function(scope, locals, self) { - return getter(self || object(scope, locals)); - }, { - assign: function(scope, value, locals) { - return setter(object(scope, locals), field, value, parser.text, parser.options); - } - }); - }, - - objectIndex: function(obj) { - var parser = this; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v, p; - - if (!o) return undefined; - v = ensureSafeObject(o[i], parser.text); - if (v && v.then && parser.options.unwrapPromises) { - p = v; - if (!('$$v' in v)) { - p.$$v = undefined; - p.then(function(val) { p.$$v = val; }); - } - v = v.$$v; - } - return v; - }, { - assign: function(self, value, locals) { - var key = indexFn(self, locals); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var safe = ensureSafeObject(obj(self, locals), parser.text); - return safe[key] = value; - } - }); - }, - - functionCall: function(fn, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var parser = this; - - return function(scope, locals) { - var args = []; - var context = contextGetter ? contextGetter(scope, locals) : scope; - - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](scope, locals)); - } - var fnPtr = fn(scope, locals, context) || noop; - - ensureSafeObject(context, parser.text); - ensureSafeObject(fnPtr, parser.text); - - // IE stupidity! (IE doesn't have apply for some native functions) - var v = fnPtr.apply - ? fnPtr.apply(context, args) - : fnPtr(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, parser.text); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function () { - var elementFns = []; - var allConstant = true; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - var elementFn = this.expression(); - elementFns.push(elementFn); - if (!elementFn.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function(self, locals) { - var array = []; - for (var i = 0; i < elementFns.length; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: allConstant - }); - }, - - object: function () { - var keyValues = []; - var allConstant = true; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.expect(), - key = token.string || token.text; - this.consume(':'); - var value = this.expression(); - keyValues.push({key: key, value: value}); - if (!value.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function(self, locals) { - var object = {}; - for (var i = 0; i < keyValues.length; i++) { - var keyValue = keyValues[i]; - object[keyValue.key] = keyValue.value(self, locals); - } - return object; - }, { - literal: true, - constant: allConstant - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp, options) { - //needed? - options = options || {}; - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - if (obj.then && options.unwrapPromises) { - promiseWarning(fullExp); - if (!("$$v" in obj)) { - (function(promise) { - promise.then(function(val) { promise.$$v = val; }); } - )(obj); - } - if (obj.$$v === undefined) { - obj.$$v = {}; - } - obj = obj.$$v; - } - } - key = ensureSafeMemberName(element.shift(), fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCache = {}; - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - - return !options.unwrapPromises - ? function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = pathVal[key0]; - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - - return pathVal; - } - : function cspSafePromiseEnabledGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, - promise; - - if (pathVal == null) return pathVal; - - pathVal = pathVal[key0]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - return pathVal; - }; -} - -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); - - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - }; -} - -function simpleGetterFn2(key0, key1, fullExp) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - - return function simpleGetterFn2(scope, locals) { - if (scope == null) return undefined; - scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - return scope == null ? undefined : scope[key1]; - }; -} - -function getterFn(path, options, fullExp) { - // Check whether the cache has this getter already. - // We can use hasOwnProperty directly on the cache because we ensure, - // see below, that the cache never stores a path called 'hasOwnProperty' - if (getterFnCache.hasOwnProperty(path)) { - return getterFnCache[path]; - } - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length, - fn; - - // When we have only 1 or 2 tokens, use optimized special case closures. - // http://jsperf.com/angularjs-parse-getter/6 - if (!options.unwrapPromises && pathKeysLength === 1) { - fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (!options.unwrapPromises && pathKeysLength === 2) { - fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); - } else if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, - options); - } else { - fn = function(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, options)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = 'var p;\n'; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - code += 'if(s == null) return undefined;\n' + - 's='+ (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' + - (options.unwrapPromises - ? 'if (s && s.then) {\n' + - ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + - ' if (!("$$v" in s)) {\n' + - ' p=s;\n' + - ' p.$$v = undefined;\n' + - ' p.then(function(v) {p.$$v=v;});\n' + - '}\n' + - ' s=s.$$v\n' + - '}\n' - : ''); - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - fn = options.unwrapPromises ? function(scope, locals) { - return evaledFnGetter(scope, locals, promiseWarning); - } : evaledFnGetter; - } - - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - if (path !== 'hasOwnProperty') { - getterFnCache[path] = fn; - } - return fn; -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @function - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = {}; - - var $parseOptions = { - csp: false, - unwrapPromises: false, - logPromiseWarnings: true - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#unwrapPromises - * @description - * - * **This feature is deprecated, see deprecation notes below for more info** - * - * If set to true (default is false), $parse will unwrap promises automatically when a promise is - * found at any part of the expression. In other words, if set to true, the expression will always - * result in a non-promise value. - * - * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, - * the fulfillment value is used in place of the promise while evaluating the expression. - * - * **Deprecation notice** - * - * This is a feature that didn't prove to be wildly useful or popular, primarily because of the - * dichotomy between data access in templates (accessed as raw values) and controller code - * (accessed as promises). - * - * In most code we ended up resolving promises manually in controllers anyway and thus unifying - * the model access there. - * - * Other downsides of automatic promise unwrapping: - * - * - when building components it's often desirable to receive the raw promises - * - adds complexity and slows down expression evaluation - * - makes expression code pre-generation unattractive due to the amount of code that needs to be - * generated - * - makes IDE auto-completion and tool support hard - * - * **Warning Logs** - * - * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a - * promise (to reduce the noise, each expression is logged only once). To disable this logging use - * `$parseProvider.logPromiseWarnings(false)` api. - * - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.unwrapPromises = function(value) { - if (isDefined(value)) { - $parseOptions.unwrapPromises = !!value; - return this; - } else { - return $parseOptions.unwrapPromises; - } - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#logPromiseWarnings - * @description - * - * Controls whether Angular should log a warning on any encounter of a promise in an expression. - * - * The default is set to `true`. - * - * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.logPromiseWarnings = function(value) { - if (isDefined(value)) { - $parseOptions.logPromiseWarnings = value; - return this; - } else { - return $parseOptions.logPromiseWarnings; - } - }; - - - this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { - $parseOptions.csp = $sniffer.csp; - - promiseWarning = function promiseWarningFn(fullExp) { - if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; - promiseWarningCache[fullExp] = true; - $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + - 'Automatic unwrapping of promises in Angular expressions is deprecated.'); - }; - - return function(exp) { - var parsedExpression; - - switch (typeof exp) { - case 'string': - - if (cache.hasOwnProperty(exp)) { - return cache[exp]; - } - - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp, false); - - if (exp !== 'hasOwnProperty') { - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - cache[exp] = parsedExpression; - } - - return parsedExpression; - - case 'function': - return exp; - - default: - return noop; - } - }; - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * // since this fn executes async in a future turn of the event loop, we need to wrap - * // our code into an $apply call so that the model changes are properly observed. - * scope.$apply(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }); - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as - * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to - * make your code IE8 and Android 2.x compatible. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - - -/** - * Constructs a promise manager. - * - * @param {function(Function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - - /** - * @ngdoc method - * @name $q#defer - * @function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - var pending = [], - value, deferred; - - deferred = { - - resolve: function(val) { - if (pending) { - var callbacks = pending; - pending = undefined; - value = ref(val); - - if (callbacks.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - value.then(callback[0], callback[1], callback[2]); - } - }); - } - } - }, - - - reject: function(reason) { - deferred.resolve(createInternalRejectedPromise(reason)); - }, - - - notify: function(progress) { - if (pending) { - var callbacks = pending; - - if (pending.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - callback[2](progress); - } - }); - } - } - }, - - - promise: { - then: function(callback, errback, progressback) { - var result = defer(); - - var wrappedCallback = function(value) { - try { - result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedErrback = function(reason) { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress)); - } catch(e) { - exceptionHandler(e); - } - }; - - if (pending) { - pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]); - } else { - value.then(wrappedCallback, wrappedErrback, wrappedProgressback); - } - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback) { - - function makePromise(value, resolved) { - var result = defer(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - } - - function handleCallback(value, isResolved) { - var callbackOutput = null; - try { - callbackOutput = (callback ||defaultCallback)(); - } catch(e) { - return makePromise(e, false); - } - if (callbackOutput && isFunction(callbackOutput.then)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - } - - return this.then(function(value) { - return handleCallback(value, true); - }, function(error) { - return handleCallback(error, false); - }); - } - } - }; - - return deferred; - }; - - - var ref = function(value) { - if (value && isFunction(value.then)) return value; - return { - then: function(callback) { - var result = defer(); - nextTick(function() { - result.resolve(callback(value)); - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#reject - * @function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = defer(); - result.reject(reason); - return result.promise; - }; - - var createInternalRejectedPromise = function(reason) { - return { - then: function(callback, errback) { - var result = defer(); - nextTick(function() { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#when - * @function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - var when = function(value, callback, errback, progressback) { - var result = defer(), - done; - - var wrappedCallback = function(value) { - try { - return (isFunction(callback) ? callback : defaultCallback)(value); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedErrback = function(reason) { - try { - return (isFunction(errback) ? errback : defaultErrback)(reason); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - return (isFunction(progressback) ? progressback : defaultCallback)(progress); - } catch (e) { - exceptionHandler(e); - } - }; - - nextTick(function() { - ref(value).then(function(value) { - if (done) return; - done = true; - result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback)); - }, function(reason) { - if (done) return; - done = true; - result.resolve(wrappedErrback(reason)); - }, function(progress) { - if (done) return; - result.notify(wrappedProgressback(progress)); - }); - }); - - return result.promise; - }; - - - function defaultCallback(value) { - return value; - } - - - function defaultErrback(reason) { - return reject(reason); - } - - - /** - * @ngdoc method - * @name $q#all - * @function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - function all(promises) { - var deferred = defer(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - ref(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - return { - defer: defer, - reject: reject, - when: when, - all: all - }; -} - -function $$RAFProvider(){ //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame || - $window.mozRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.mozCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (shift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider(){ - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function( $injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - child.name = "World"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this['this'] = this.$root = this; - this.$$destroyed = false; - this.$$asyncQueue = []; - this.$$postDigestQueue = []; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = {}; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for - * debugging. - */ - - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and - * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the - * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate) { - var ChildScope, - child; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - // ensure that there is just one async queue per $rootScope and its children - child.$$asyncQueue = this.$$asyncQueue; - child.$$postDigestQueue = this.$$postDigestQueue; - } else { - ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges - // the name it does not become random set of chars. This will then show up as class - // name in the web inspector. - ChildScope.prototype = this; - child = new ChildScope(); - child.$id = nextUid(); - } - child['this'] = child; - child.$$listeners = {}; - child.$$listenerCount = {}; - child.$parent = this; - child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; - child.$$prevSibling = this.$$childTail; - if (this.$$childHead) { - this.$$childTail.$$nextSibling = child; - this.$$childTail = child; - } else { - this.$$childHead = this.$$childTail = child; - } - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). The inequality is determined according to - * {@link angular.equals} function. To save the value of the object for later comparison, - * the {@link angular.copy} function is used. It also means that watching complex options - * will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * The example below contains an illustration of using a function as your $watch listener - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - - - - // Using a listener function - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This is the listener function - function() { return food; }, - // This is the change handler - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {(function()|string)=} listener Callback called whenever the return value of - * the `watchExpression` changes. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(newValue, oldValue, scope)`: called with current and previous values as - * parameters. - * - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var scope = this, - get = compileToFn(watchExp, 'watch'), - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - // in the case user pass string, we need to compile it, do we really need this ? - if (!isFunction(listener)) { - var listenFn = compileToFn(listener || noop, 'listener'); - watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; - } - - if (typeof watchExp == 'string' && get.constant) { - var originalFn = watcher.fn; - watcher.fn = function(newVal, oldVal, scope) { - originalFn.call(this, newVal, oldVal, scope); - arrayRemove(array, watcher); - }; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var objGetter = $parse(obj); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionWatch() { - newValue = objGetter(self); - var newLength, key; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - var bothNaN = (oldValue[i] !== oldValue[i]) && - (newValue[i] !== newValue[i]); - if (!bothNaN && (oldValue[i] !== newValue[i])) { - changeDetected++; - oldValue[i] = newValue[i]; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - if (oldValue.hasOwnProperty(key)) { - if (oldValue[key] !== newValue[key]) { - changeDetected++; - oldValue[key] = newValue[key]; - } - } else { - oldLength++; - oldValue[key] = newValue[key]; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for(key in oldValue) { - if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch($watchCollectionWatch, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - asyncQueue = this.$$asyncQueue, - postDigestQueue = this.$$postDigestQueue, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while(asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression); - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value == 'number' && typeof last == 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - logMsg = (isFunction(watch.exp)) - ? 'fn: ' + (watch.exp.name || watch.exp.toString()) - : watch.exp; - logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); - watchLog[logIdx].push(logMsg); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, toJson(watchLog)); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while(postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = null; - - // don't reset these to null in case some async task tries to register a listener/watch/task - this.$$listeners = {}; - this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; - - // prevent NPEs since these methods have references to properties we nulled out - this.$destroy = this.$digest = this.$apply = noop; - this.$on = this.$watch = function() { return noop; }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - */ - $evalAsync: function(expr) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { - $browser.defer(function() { - if ($rootScope.$$asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - this.$$asyncQueue.push({scope: this, expression: expr}); - }, - - $$postDigest : function(fn) { - this.$$postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the current scope which is handling the event. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - namedListeners[indexOf(namedListeners, listener)] = null; - decrementListenerCount(self, 1, name); - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i=0, length=namedListeners.length; i<length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) return event; - //traverse upwards - scope = scope.$parent; - } while (scope); - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i=0, length = listeners.length; i<length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch(e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - return event; - } - }; - - var $rootScope = new Scope(); - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function compileToFn(exp, name) { - var fn = $parse(exp); - assertArgFn(fn, name); - return fn; - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case. - if (!msie || msie >= 8 ) { - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:'+normalizedVal; - } - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -// Copied from: -// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962 -// Prereq: s is a string. -function escapeForRegexp(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -} - - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * <pre class="prettyprint"> - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**']); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**']); - * }); - * </pre> - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function (value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function (value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * <pre class="prettyprint"> - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"> - * </pre> - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * <pre class="prettyprint"> - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * </pre> - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead for the developer? - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) It's usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * @example -<example module="mySceApp" deps="angular-sanitize.js"> -<file name="index.html"> - <div ng-controller="myAppController as myCtrl"> - <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - <b>User comments</b><br> - By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - $sanitize is available. If $sanitize isn't available, this results in an error instead of an - exploit. - <div class="well"> - <div ng-repeat="userComment in myCtrl.userComments"> - <b>{{userComment.name}}</b>: - <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - <br> - </div> - </div> - </div> -</file> - -<file name="script.js"> - var mySceApp = angular.module('mySceApp', ['ngSanitize']); - - mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { - var self = this; - $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - self.userComments = userComments; - }); - self.explicitlyTrustedHtml = $sce.trustAsHtml( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); -</file> - -<file name="test_data.json"> -[ - { "name": "Alice", - "htmlComment": - "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - }, - { "name": "Bob", - "htmlComment": "<i>Yes!</i> Am I the only other one?" - } -] -</file> - -<file name="protractor.js" type="protractor"> - describe('SCE doc demo', function() { - it('should sanitize untrusted values', function() { - expect(element(by.css('.htmlComment')).getInnerHtml()) - .toBe('<span>Is <i>anyone</i> reading this?</span>'); - }); - - it('should NOT sanitize explicitly trusted values', function() { - expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); - }); -</file> -</example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * <pre class="prettyprint"> - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * </pre> - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function (value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sniffer', '$sceDelegate', function( - $parse, $sniffer, $sceDelegate) { - // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = copy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function () { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parse - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return function sceParseAsTrusted(self, locals) { - return sce.getTrusted(type, parsed(self, locals)); - }; - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function (enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function (expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function (value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function (value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} hashchange Does the browser support hashchange event ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - documentMode = document.documentMode, - vendorPrefix, - vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for(var prop in bodyStyle) { - if(match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if(!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions||!animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hashchange: 'onhashchange' in $window && - // IE8 compatible mode lies - (!documentMode || documentMode > 7), - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - if (event == 'input' && msie == 9) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions : transitions, - animations : animations, - android: android, - msie : msie, - msieDocumentMode: documentMode - }; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', - function($rootScope, $browser, $q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - skipApply = (isDefined(invokeApply) && !invokeApply), - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch(e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href, true); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url, base) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - } - </script> - <div ng-controller="Ctrl"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ -/** - * @ngdoc method - * @name $filterProvider#register - * @description - * Register filter factory function. - * - * @param {String} name Name of the filter. - * @param {Function} fn The filter factory function which is injectable. - */ - - -/** - * @ngdoc service - * @name $filter - * @function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if(isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against - * the contents of the `array`. All strings or objects with string properties in `array` that contain this string - * will be returned. The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object. That's equivalent to the simple substring match with a `string` - * as described above. - * - * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is - * called for each element of `array`. The final result is an array of those elements that - * the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var comparatorType = typeof(comparator), - predicates = []; - - predicates.check = function(value) { - for (var j = 0; j < predicates.length; j++) { - if(!predicates[j](value)) { - return false; - } - } - return true; - }; - - if (comparatorType !== 'function') { - if (comparatorType === 'boolean' && comparator) { - comparator = function(obj, text) { - return angular.equals(obj, text); - }; - } else { - comparator = function(obj, text) { - if (obj && text && typeof obj === 'object' && typeof text === 'object') { - for (var objKey in obj) { - if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && - comparator(obj[objKey], text[objKey])) { - return true; - } - } - return false; - } - text = (''+text).toLowerCase(); - return (''+obj).toLowerCase().indexOf(text) > -1; - }; - } - } - - var search = function(obj, text){ - if (typeof text == 'string' && text.charAt(0) === '!') { - return !search(obj, text.substr(1)); - } - switch (typeof obj) { - case "boolean": - case "number": - case "string": - return comparator(obj, text); - case "object": - switch (typeof text) { - case "object": - return comparator(obj, text); - default: - for ( var objKey in obj) { - if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) { - return true; - } - } - break; - } - return false; - case "array": - for ( var i = 0; i < obj.length; i++) { - if (search(obj[i], text)) { - return true; - } - } - return false; - default: - return false; - } - }; - switch (typeof expression) { - case "boolean": - case "number": - case "string": - // Set up expression object and fall through - expression = {$:expression}; - // jshint -W086 - case "object": - // jshint +W086 - for (var key in expression) { - (function(path) { - if (typeof expression[path] == 'undefined') return; - predicates.push(function(value) { - return search(path == '$' ? value : (value && value[path]), expression[path]); - }); - })(key); - } - break; - case 'function': - predicates.push(expression); - break; - default: - return array; - } - var filtered = []; - for ( var j = 0; j < array.length; j++) { - var value = array[j]; - if (predicates.check(value)) { - filtered.push(value); - } - } - return filtered; - }; -} - -/** - * @ngdoc filter - * @name currency - * @function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @returns {string} Formatted number. - * - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.amount = 1234.56; - } - </script> - <div ng-controller="Ctrl"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol){ - if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; - return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = 1234.56789; - } - </script> - <div ng-controller="Ctrl"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (number == null || !isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - numStr = '0'; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - var pow = Math.pow(10, fractionSize); - number = Math.round(number * pow) / pow; - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i)%group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i)%lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while(fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - - if (fractionSize > 0 && number > -1 && number < 1) { - formatedText = number.toFixed(fractionSize); - } - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre); - parts.push(formatedText); - parts.push(isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12 ) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in am/pm, padded (01-12) - * * `'h'`: Hour in am/pm, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) - * * `'a'`: am/pm marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 pm) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) - * - * `format` string can contain literal values. These need to be quoted with single quotes (e.g. - * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4]||0) - tzHour; - var m = int(match[5]||0) - tzMin; - var s = int(match[6]||0); - var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - if (NUMBER_STRING.test(date)) { - date = int(date); - } else { - date = jsonStringToDate(date); - } - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while(format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - forEach(parts, function(value){ - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre>{{ {'name':'value'} | json }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object) { - return toJson(object, true); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array or string, as specified by - * the value and sign (positive or negative) of `limit`. - * - * @param {Array|string} input Source array or string to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.numLimit = 3; - $scope.letterLimit = 3; - } - </script> - <div ng-controller="Ctrl"> - Limit {{numbers}} to: <input type="integer" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="integer" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - }); - - it('should update the output when -3 is entered', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('-3'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('-3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - }); - </file> - </example> - */ -function limitToFilter(){ - return function(input, limit) { - if (!isArray(input) && !isString(input)) return input; - - limit = int(limit); - - if (isString(input)) { - //NaN check on limit - if (limit) { - return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length); - } else { - return ""; - } - } - - var out = [], - i, n; - - // if abs(limit) exceeds maximum length, trim it - if (limit > input.length) - limit = input.length; - else if (limit < -input.length) - limit = -input.length; - - if (limit > 0) { - i = 0; - n = limit; - } else { - i = input.length + limit; - n = input.length; - } - - for (; i<n; i++) { - out.push(input[i]); - } - - return out; - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @function - * - * @description - * Orders a specified `array` by the `expression` predicate. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression which evaluates to an object to order by, such as 'name' - * to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control - * ascending or descending sort order (for example, +name or -name). - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}] - $scope.predicate = '-age'; - } - </script> - <div ng-controller="Ctrl"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse){ - return function(array, sortPredicate, reverseOrder) { - if (!isArray(array)) return array; - if (!sortPredicate) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; - sortPredicate = map(sortPredicate, function(predicate){ - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a,b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a,b){ - return compare(get(a),get(b)); - }, descending); - }); - var arrayCopy = []; - for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); } - return arrayCopy.sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2){ - for ( var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return toBoolean(descending) - ? function(a,b){return comp(b,a);} - : comp; - } - function compare(v1, v2){ - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 == t2) { - if (t1 == "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - - if (msie <= 8) { - - // turn <a href ng-click="..">link</a> into a stylable link in IE - // but only if it doesn't have name attribute, in which case it's an anchor - if (!attr.href && !attr.name) { - attr.$set('href', ''); - } - - // add a comment node to anchors to workaround IE bug that causes element content to be reset - // to new attribute content if attribute is updated with value containing @ and element also - // contains value with @ - // see issue #1949 - element.append(document.createComment('IE fix')); - } - - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event){ - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. - * - * The `ngHref` directive solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 1000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 1000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) - return; - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl */ -var nullFormCtrl = { - $addControl: noop, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop -}; - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * - * @property {Object} $error Is an object hash, containing references to all invalid controls or - * forms, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that are invalid for given error name. - * - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate']; -function FormController(element, attrs, $scope, $animate) { - var form = this, - parentForm = element.parent().controller('form') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - errors = form.$error = {}, - controls = []; - - // init state - form.$name = attrs.name || attrs.ngForm; - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - - parentForm.$addControl(form); - - // Setup initial state of the control - element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(errors, function(queue, validationToken) { - form.$setValidity(validationToken, true, control); - }); - - arrayRemove(controls, control); - }; - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - form.$setValidity = function(validationToken, isValid, control) { - var queue = errors[validationToken]; - - if (isValid) { - if (queue) { - arrayRemove(queue, control); - if (!queue.length) { - invalidCount--; - if (!invalidCount) { - toggleValidCss(isValid); - form.$valid = true; - form.$invalid = false; - } - errors[validationToken] = false; - toggleValidCss(true, validationToken); - parentForm.$setValidity(validationToken, true, form); - } - } - - } else { - if (!invalidCount) { - toggleValidCss(isValid); - } - if (queue) { - if (includes(queue, control)) return; - } else { - errors[validationToken] = queue = []; - invalidCount++; - toggleValidCss(false, validationToken); - parentForm.$setValidity(validationToken, false, form); - } - queue.push(control); - - form.$valid = false; - form.$invalid = true; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function () { - $animate.removeClass(element, DIRTY_CLASS); - $animate.addClass(element, PRISTINE_CLASS); - form.$dirty = false; - form.$pristine = true; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; -} - - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.userType = 'guest'; - } - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="Ctrl" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function() { - return { - pre: function(scope, formElement, attr, controller) { - if (!attr.action) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var preventDefaultListener = function(event) { - event.preventDefault - ? event.preventDefault() - : event.returnValue = false; // IE - }; - - addEventListenerFn(formElement[0], 'submit', preventDefaultListener); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); - }, 0, false); - }); - } - - var parentFormCtrl = formElement.parent().controller('form'), - alias = attr.name || attr.ngForm; - - if (alias) { - setter(scope, alias, controller, alias); - } - if (parentFormCtrl) { - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global - - -VALID_CLASS, - -INVALID_CLASS, - -PRISTINE_CLASS, - -DIRTY_CLASS -*/ - -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * - * @example - <example name="text-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'guest'; - $scope.word = /^\s*\w*\s*$/; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Single word: <input type="text" name="input" ng-model="text" - ng-pattern="word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value = 12; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Number: <input type="number" name="input" ng-model="value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'http://google.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - URL: <input type="url" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'me@example.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Email: <input type="email" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.color = 'blue'; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - <input type="radio" ng-model="color" value="red"> Red <br/> - <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color" value="blue"> Blue <br/> - <tt>color = {{color | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngTrueValue The value to which the expression should be set when selected. - * @param {string=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value1 = true; - $scope.value2 = 'YES' - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Value1: <input type="checkbox" ng-model="value1"> <br/> - Value2: <input type="checkbox" ng-model="value2" - ng-true-value="YES" ng-false-value="NO"> <br/> - <tt>value1 = {{value1}}</tt><br/> - <tt>value2 = {{value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('value1')); - var value2 = element(by.binding('value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('value1')).click(); - element(by.model('value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -// A helper function to call $setValidity and return the value / undefined, -// a pattern that is repeated a lot in the input validation logic. -function validate(ctrl, validatorName, validity, value){ - ctrl.$setValidity(validatorName, validity); - return validity ? value : undefined; -} - - -function addNativeHtml5Validators(ctrl, validatorName, element) { - var validity = element.prop('validity'); - if (isObject(validity)) { - var validator = function(value) { - // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can - // perform the required validation) - if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError || - validity.typeMismatch) && !validity.valueMissing) { - ctrl.$setValidity(validatorName, false); - return; - } - return value; - }; - ctrl.$parsers.push(validator); - } -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var validity = element.prop('validity'); - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function() { - if (composing) return; - var value = element.val(); - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // e.g. <input ng-model="foo" ng-trim="false"> - if (toBoolean(attr.ngTrim || 'T')) { - value = trim(value); - } - - if (ctrl.$viewValue !== value || - // If the value is still empty/falsy, and there is no `required` error, run validators - // again. This enables HTML5 constraint validation errors to affect Angular validation - // even when the first character entered causes an error. - (validity && value === '' && !validity.valueMissing)) { - if (scope.$$phase) { - ctrl.$setViewValue(value); - } else { - scope.$apply(function() { - ctrl.$setViewValue(value); - }); - } - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function() { - if (!timeout) { - timeout = $browser.defer(function() { - listener(); - timeout = null; - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; - - // pattern validator - var pattern = attr.ngPattern, - patternValidator, - match; - - if (pattern) { - var validateRegex = function(regexp, value) { - return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); - }; - match = pattern.match(/^\/(.*)\/([gim]*)$/); - if (match) { - pattern = new RegExp(match[1], match[2]); - patternValidator = function(value) { - return validateRegex(pattern, value); - }; - } else { - patternValidator = function(value) { - var patternObj = scope.$eval(pattern); - - if (!patternObj || !patternObj.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, - patternObj, startingTag(element)); - } - return validateRegex(patternObj, value); - }; - } - - ctrl.$formatters.push(patternValidator); - ctrl.$parsers.push(patternValidator); - } - - // min length validator - if (attr.ngMinlength) { - var minlength = int(attr.ngMinlength); - var minLengthValidator = function(value) { - return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value); - }; - - ctrl.$parsers.push(minLengthValidator); - ctrl.$formatters.push(minLengthValidator); - } - - // max length validator - if (attr.ngMaxlength) { - var maxlength = int(attr.ngMaxlength); - var maxLengthValidator = function(value) { - return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); - }; - - ctrl.$parsers.push(maxLengthValidator); - ctrl.$formatters.push(maxLengthValidator); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$parsers.push(function(value) { - var empty = ctrl.$isEmpty(value); - if (empty || NUMBER_REGEXP.test(value)) { - ctrl.$setValidity('number', true); - return value === '' ? null : (empty ? value : parseFloat(value)); - } else { - ctrl.$setValidity('number', false); - return undefined; - } - }); - - addNativeHtml5Validators(ctrl, 'number', element); - - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? '' : '' + value; - }); - - if (attr.min) { - var minValidator = function(value) { - var min = parseFloat(attr.min); - return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); - }; - - ctrl.$parsers.push(minValidator); - ctrl.$formatters.push(minValidator); - } - - if (attr.max) { - var maxValidator = function(value) { - var max = parseFloat(attr.max); - return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); - }; - - ctrl.$parsers.push(maxValidator); - ctrl.$formatters.push(maxValidator); - } - - ctrl.$formatters.push(function(value) { - return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); - }); -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var urlValidator = function(value) { - return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(urlValidator); - ctrl.$parsers.push(urlValidator); -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var emailValidator = function(value) { - return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(emailValidator); - ctrl.$parsers.push(emailValidator); -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - element.on('click', function() { - if (element[0].checked) { - scope.$apply(function() { - ctrl.$setViewValue(attr.value); - }); - } - }); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function checkboxInputType(scope, element, attr, ctrl) { - var trueValue = attr.ngTrueValue, - falseValue = attr.ngFalseValue; - - if (!isString(trueValue)) trueValue = true; - if (!isString(falseValue)) falseValue = false; - - element.on('click', function() { - scope.$apply(function() { - ctrl.$setViewValue(element[0].checked); - }); - }); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox. - ctrl.$isEmpty = function(value) { - return value !== trueValue; - }; - - ctrl.$formatters.push(function(value) { - return value === trueValue; - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control with angular data-binding. Input control follows HTML5 input types - * and polyfills the HTML5 validation behavior for older browsers. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - } - </script> - <div ng-controller="Ctrl"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.binding('{{user}}')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { - return { - restrict: 'E', - require: '?ngModel', - link: function(scope, element, attr, ctrl) { - if (ctrl) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, - $browser); - } - } - }; -}]; - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty'; - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. Each function is called, in turn, passing the value - through to the next. The last return value is used to populate the model. - Used to sanitize / convert the value as well as validation. For validation, - the parsers should update the validity state using - {@link ngModel.NgModelController#$setValidity $setValidity()}, - and return `undefined` for invalid values. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. Each function is called, in turn, passing the value through to the - next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all errors as keys. - * - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * - * @description - * - * `NgModelController` provides API for the `ng-model` directive. The controller contains - * services for data-binding, validation, CSS updates, and value formatting and parsing. It - * purposefully does not contain any logic which deals with DOM rendering or listening to - * DOM events. Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding. - * - * ## Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * <example name="NgModelController" module="customControl"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', []). - directive('contenteditable', function() { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if(!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html(ngModel.$viewValue || ''); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$apply(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$name = $attr.name; - - var ngModelGet = $parse($attr.ngModel), - ngModelSet = ngModelGet.assign; - - if (!ngModelSet) { - throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of the input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is empty. - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - $error = this.$error = {}; // keep invalid keys here - - - // Setup initial state of the control - $element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notifies the form when the control changes validity. (i.e. it - * does not notify form if given validator is already marked as invalid). - * - * This method should be called by validators - i.e. the parser or formatter functions. - * - * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign - * to `$error[validationErrorKey]=isValid` so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true) or invalid (false). - */ - this.$setValidity = function(validationErrorKey, isValid) { - // Purposeful use of ! here to cast isValid to boolean in case it is undefined - // jshint -W018 - if ($error[validationErrorKey] === !isValid) return; - // jshint +W018 - - if (isValid) { - if ($error[validationErrorKey]) invalidCount--; - if (!invalidCount) { - toggleValidCss(true); - this.$valid = true; - this.$invalid = false; - } - } else { - toggleValidCss(false); - this.$invalid = true; - this.$valid = false; - invalidCount++; - } - - $error[validationErrorKey] = !isValid; - toggleValidCss(isValid, validationErrorKey); - - parentForm.$setValidity(validationErrorKey, isValid, this); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the control to its pristine - * state (ng-pristine class). - */ - this.$setPristine = function () { - this.$dirty = false; - this.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when the view value changes, typically from within a DOM event handler. - * For example {@link ng.directive:input input} and - * {@link ng.directive:select select} directives call it. - * - * It will update the $viewValue, then pass this value through each of the functions in `$parsers`, - * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to - * `$modelValue` and the **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - */ - this.$setViewValue = function(value) { - this.$viewValue = value; - - // change to dirty - if (this.$pristine) { - this.$dirty = true; - this.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - } - - forEach(this.$parsers, function(fn) { - value = fn(value); - }); - - if (this.$modelValue !== value) { - this.$modelValue = value; - ngModelSet($scope, value); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch(e) { - $exceptionHandler(e); - } - }); - } - }; - - // model -> value - var ctrl = this; - - $scope.$watch(function ngModelWatch() { - var value = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - if (ctrl.$modelValue !== value) { - - var formatters = ctrl.$formatters, - idx = formatters.length; - - ctrl.$modelValue = value; - while(idx--) { - value = formatters[idx](value); - } - - if (ctrl.$viewValue !== value) { - ctrl.$viewValue = value; - ctrl.$render(); - } - } - - return value; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [https://github.com/angular/angular.js/wiki/Understanding-Scopes] - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid` is set if the model is valid. - * - `ng-invalid` is set if the model is invalid. - * - `ng-pristine` is set if the model is pristine. - * - `ng-dirty` is set if the model is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = '1'; - } - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="Ctrl"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - */ -var ngModelDirective = function() { - return { - require: ['ngModel', '^?form'], - controller: NgModelController, - link: function(scope, element, attr, ctrls) { - // notify others, especially parent forms - - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - formCtrl.$addControl(modelCtrl); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * The expression is not evaluated when the value change is coming from the model. - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive"> - * <file name="index.html"> - * <script> - * function Controller($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * } - * </script> - * <div ng-controller="Controller"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - - -var requiredDirective = function() { - return { - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - var validator = function(value) { - if (attr.required && ctrl.$isEmpty(value)) { - ctrl.$setValidity('required', false); - return; - } else { - ctrl.$setValidity('required', true); - return value; - } - }; - - ctrl.$formatters.push(validator); - ctrl.$parsers.unshift(validator); - - attr.$observe('required', function() { - validator(ctrl.$viewValue); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The delimiter - * can be a fixed string (by default a comma) or a regular expression. - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. If - * specified in form `/something/` then the value will be converted into a regular expression. - * - * @example - <example name="ngList-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['igor', 'misko', 'vojta']; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - List: <input name="namesInput" ng-model="names" ng-list required> - <span class="error" ng-show="myForm.namesInput.$error.required"> - Required!</span> - <br> - <tt>names = {{names}}</tt><br/> - <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var listInput = element(by.model('names')); - var names = element(by.binding('{{names}}')); - var valid = element(by.binding('myForm.namesInput.$valid')); - var error = element(by.css('span.error')); - - it('should initialize to model', function() { - expect(names.getText()).toContain('["igor","misko","vojta"]'); - expect(valid.getText()).toContain('true'); - expect(error.getCssValue('display')).toBe('none'); - }); - - it('should be invalid if empty', function() { - listInput.clear(); - listInput.sendKeys(''); - - expect(names.getText()).toContain(''); - expect(valid.getText()).toContain('false'); - expect(error.getCssValue('display')).not.toBe('none'); }); - </file> - </example> - */ -var ngListDirective = function() { - return { - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var match = /\/(.*)\//.exec(attr.ngList), - separator = match && new RegExp(match[1]) || attr.ngList || ','; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trim(value)); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(', '); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `input[select]` or `input[radio]`, so - * that when the element is selected, the `ngModel` of that element is set to the - * bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as - * shown below. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - } - </script> - <form ng-controller="Ctrl"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.name = 'Whirled'; - } - </script> - <div ng-controller="Ctrl"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ngDirective(function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBind); - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - // We are purposefully using == here rather than === because we want to - // catch when value is "null or undefined" - // jshint -W041 - element.text(value == undefined ? '' : value); - }); -}); - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - } - </script> - <div ng-controller="Ctrl"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', function($interpolate) { - return function(scope, element, attr) { - // TODO: move this to scenario runner - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - element.addClass('ng-binding').data('$binding', interpolateFn); - attr.$observe('ngBindTemplate', function(value) { - element.text(value); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link - * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` - * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in - * core Angular.) You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - Try it here: enter text in text box and watch the greeting change. - - <example module="ngBindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ngBindHtmlCtrl"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('ngBindHtmlExample', ['ngSanitize']) - - .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with <a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); - - var parsed = $parse(attr.ngBindHtml); - function getStringValue() { return (parsed(scope) || '').toString(); } - - scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { - element.html($sce.getTrustedHtml(parsed(scope)) || ''); - }); - }; -}]; - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== old$index & 1) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts (classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function (className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses (oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toRemove = digestClassCounts(toRemove, -1); - toAdd = digestClassCounts(toAdd, 1); - - if (toAdd.length === 0) { - $animate.removeClass(element, toRemove); - } else if (toRemove.length === 0) { - $animate.addClass(element, toAdd); - } else { - $animate.setClass(element, toAdd, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = copy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses (classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = [], i = 0; - forEach(classVal, function(v, k) { - if (v) { - classes.push(k); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * add - happens just before the class is applied to the element - * remove - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and - {@link ngAnimate.$animate#removeclass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} &nbsp; &nbsp; &nbsp; - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @param {expression} ngController Name of a globally accessible constructor function or an - * {@link guide/expression expression} that on the current scope evaluates to a - * constructor function. The controller instance can be published into a scope property - * by specifying `as propertyName`. - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Notice that the scope becomes the `this` for the - * controller's instance. This allows for easy access to the view data from the controller. Also - * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. The example is shown in two different declaration styles you may use - * according to preference. - <example> - <file name="index.html"> - <script> - function SettingsController1() { - this.name = "John Smith"; - this.contacts = [ - {type: 'phone', value: '408 555 1212'}, - {type: 'email', value: 'john.smith@example.org'} ]; - }; - - SettingsController1.prototype.greet = function() { - alert(this.name); - }; - - SettingsController1.prototype.addContact = function() { - this.contacts.push({type: 'email', value: 'yourname@example.org'}); - }; - - SettingsController1.prototype.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - SettingsController1.prototype.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - </script> - <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - Name: <input type="text" ng-model="settings.name"/> - [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in settings.contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller as', function() { - var container = element(by.id('ctrl-as-exmpl')); - - expect(container.findElement(by.model('settings.name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - <example> - <file name="index.html"> - <script> - function SettingsController2($scope) { - $scope.name = "John Smith"; - $scope.contacts = [ - {type:'phone', value:'408 555 1212'}, - {type:'email', value:'john.smith@example.org'} ]; - - $scope.greet = function() { - alert(this.name); - }; - - $scope.addContact = function() { - this.contacts.push({type:'email', value:'yourname@example.org'}); - }; - - $scope.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - $scope.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - } - </script> - <div id="ctrl-exmpl" ng-controller="SettingsController2"> - Name: <input type="text" ng-model="name"/> - [ <a href="" ng-click="greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="clearContact(contact)">clear</a> - | <a href="" ng-click="removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller', function() { - var container = element(by.id('ctrl-exmpl')); - - expect(container.findElement(by.model('name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - - */ -var ngControllerDirective = [function() { - return { - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For us to be compatible, we just need to implement the "getterFn" in $parse without violating - * any of these restrictions. - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * In order to use this feature put the `ngCsp` directive on the root element of the application. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap -// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute -// anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{count}} - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A directive that allows creation of custom onclick handlers that are defined as angular - * expressions and are compiled and executed within the current scope. - * - * Events that are handled via these handler are always configured not to propagate further. - */ -var ngEventDirectives = {}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(name) { - var directiveName = directiveNormalize('ng-' + name); - ngEventDirectives[directiveName] = ['$parse', function($parse) { - return { - compile: function($element, attr) { - var fn = $parse(attr[directiveName]); - return function(scope, element, attr) { - element.on(lowercase(name), function(event) { - scope.$apply(function() { - fn(scope, {$event:event}); - }); - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keyup="count = count + 1" ng-init="count=0"> - key up count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - } - </script> - <form ng-submit="submit()" ng-controller="Ctrl"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.input('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container - * leave - happens just before the ngIf contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - I'm removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function ($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (toBoolean(value)) { - if (!childScope) { - childScope = $scope.$new(); - $transclude(childScope, function (clone) { - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if(previousElements) { - previousElements.remove(); - previousElements = null; - } - if(childScope) { - childScope.$destroy(); - childScope = null; - } - if(block) { - previousElements = getBlockElements(block.clone); - $animate.leave(previousElements, function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <tt>{{template.url}}</tt> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - } - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - */ -var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', - function($http, $templateCache, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element, afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); - }).error(function() { - if (thisChangeId === changeCounter) cleanupLastIncludeContent(); - }); - scope.$emit('$includeContentRequested'); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * <div ng-init="test1 = (data | orderBy:'name')"></div> - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - } - </script> - <div ng-controller="Ctrl"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - } - </script> - <div ng-controller="Ctrl"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g; - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - isWhen = /^when(Minus)?(.+)$/; - - forEach(attr, function(expression, attributeName) { - if (isWhen.test(attributeName)) { - whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = - element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = - $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + - offset + endSymbol)); - }); - - scope.$watch(function ngPluralizeWatch() { - var value = parseFloat(scope.$eval(numberExp)); - - if (!isNaN(value)) { - //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, - //check it against pluralization rules in $locale service - if (!(value in whens)) value = $locale.pluralCat(value - offset); - return whensExpFns[value](scope, element, true); - } else { - return ''; - } - }, function ngPluralizeWatchAction(newVal) { - element.text(newVal); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - return { - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude){ - var expression = $attr.ngRepeat; - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), - trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, - lhs, rhs, valueIdentifier, keyIdentifier, - hashFnLocals = {$id: hashKey}; - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - lhs = match[1]; - rhs = match[2]; - trackByExp = match[3]; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - valueIdentifier = match[3] || match[1]; - keyIdentifier = match[2]; - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - var lastBlockMap = {}; - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection){ - var index, length, - previousNode = $element[0], // current position of the node - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = {}, - arrayLength, - childScope, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder = [], - elementsToRemove; - - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (key in collection) { - if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { - collectionKeys.push(key); - } - } - collectionKeys.sort(); - } - - arrayLength = collectionKeys.length; - - // locate existing items - length = nextBlockOrder.length = collectionKeys.length; - for(index = 0; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - assertNotHasOwnProperty(trackById, '`track by` id'); - if(lastBlockMap.hasOwnProperty(trackById)) { - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap.hasOwnProperty(trackById)) { - // restore lastBlockMap - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - // This is a duplicate and we need to throw an error - throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", - expression, trackById); - } else { - // new never before seen block - nextBlockOrder[index] = { id: trackById }; - nextBlockMap[trackById] = false; - } - } - - // remove existing items - for (key in lastBlockMap) { - // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn - if (lastBlockMap.hasOwnProperty(key)) { - block = lastBlockMap[key]; - elementsToRemove = getBlockElements(block.clone); - $animate.leave(elementsToRemove); - forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); - block.scope.$destroy(); - } - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0, length = collectionKeys.length; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]); - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - childScope = block.scope; - - nextNode = previousNode; - do { - nextNode = nextNode.nextSibling; - } while(nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - } else { - // new item which we don't know about - childScope = $scope.$new(); - } - - childScope[valueIdentifier] = value; - if (keyIdentifier) childScope[keyIdentifier] = key; - childScope.$index = index; - childScope.$first = (index === 0); - childScope.$last = (index === (arrayLength - 1)); - childScope.$middle = !(childScope.$first || childScope.$last); - // jshint bitwise: false - childScope.$odd = !(childScope.$even = (index&1) === 0); - // jshint bitwise: true - - if (!block.scope) { - $transclude(childScope, function(clone) { - clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = clone; - block.scope = childScope; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - }); - } - } - lastBlockMap = nextBlockMap; - }); - } - }; - - function getBlockStart(block) { - return block.clone[0]; - } - - function getBlockEnd(block) { - return block.clone[block.clone.length - 1]; - } -}]; - -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the ngShow attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When true, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngShow - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-show { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-show.ng-hide-add, - .animate-show.ng-hide-remove { - display:block!important; - } - - .animate-show.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value){ - $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the ngHide attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * ``` - * - * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When false, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngHide - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that - * you must also include the !important flag to override the display property so - * that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-hide.ng-hide-add, - .animate-hide.ng-hide-remove { - display:block!important; - } - - .animate-hide.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value){ - $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); - }); - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set" ng-click="myStyle={color:'red'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=set]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }, true); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * - * - * @scope - * @priority 800 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - } - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.element.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.element.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes, - selectedElements, - previousElements, - selectedScopes = []; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii = selectedScopes.length; - if(ii > 0) { - if(previousElements) { - for (i = 0; i < ii; i++) { - previousElements[i].remove(); - } - previousElements = null; - } - - previousElements = []; - for (i= 0; i<ii; i++) { - var selected = selectedElements[i]; - selectedScopes[i].$destroy(); - previousElements[i] = selected; - $animate.leave(selected, function() { - previousElements.splice(i, 1); - if(previousElements.length === 0) { - previousElements = null; - } - }); - } - } - - selectedElements = []; - selectedScopes = []; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - scope.$eval(attr.change); - forEach(selectedTranscludes, function(selectedTransclude) { - var selectedScope = scope.$new(); - selectedScopes.push(selectedScope); - selectedTransclude.transclude(selectedScope, function(caseElement) { - var anchor = selectedTransclude.element; - - selectedElements.push(caseElement); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict AC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transclude"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - } - - angular.module('transclude', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<div ng-transclude></div>' + - '</div>' - }; - }); - </script> - <div ng-controller="Ctrl"> - <input ng-model="title"><br> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension_expression. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead - * of {@link ng.directive:ngRepeat ngRepeat} when you want the - * `select` model to be bound to a non-string value. This is because an option element can only - * be bound to string values at present. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). - * - * @example - <example> - <file name="index.html"> - <script> - function MyCntrl($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.color = $scope.colors[2]; // red - } - </script> - <div ng-controller="MyCntrl"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="color" ng-options="c.name for c in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="color" ng-options="c.name for c in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="color" ng-options="c.name group by c.shade for c in colors"> - </select><br/> - - - Select <a href ng-click="color={name:'not in list'}">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:color} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':color.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red'); - element.all(by.select('color')).first().click(); - element.all(by.css('select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="color"]')).click(); - element.all(by.css('.nullable select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ terminal: true }); -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue == value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = copy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]]; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', function() { - scope.$apply(function() { - var optionGroup, - collection = valuesFn(scope) || [], - locals = {}, - key, value, optionElement, index, groupIndex, length, groupLength, trackIndex; - - if (multiple) { - value = []; - for (groupIndex = 0, groupLength = optionGroupsCache.length; - groupIndex < groupLength; - groupIndex++) { - // list of options for that group. (first item has the parent) - optionGroup = optionGroupsCache[groupIndex]; - - for(index = 1, length = optionGroup.length; index < length; index++) { - if ((optionElement = optionGroup[index].element)[0].selected) { - key = optionElement.val(); - if (keyName) locals[keyName] = key; - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) break; - } - } else { - locals[valueName] = collection[key]; - } - value.push(valueFn(scope, locals)); - } - } - } - } else { - key = selectElement.val(); - if (key == '?') { - value = undefined; - } else if (key === ''){ - value = null; - } else { - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) { - value = valueFn(scope, locals); - break; - } - } - } else { - locals[valueName] = collection[key]; - if (keyName) locals[keyName] = key; - value = valueFn(scope, locals); - } - } - // Update the null option's selected property here so $render cleans it up correctly - if (optionGroupsCache[0].length > 1) { - if (optionGroupsCache[0][1].id !== key) { - optionGroupsCache[0][1].selected = false; - } - } - } - ctrl.$setViewValue(value); - }); - }); - - ctrl.$render = render; - - // TODO(vojta): can't we optimize this ? - scope.$watch(render); - - function render() { - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - modelValue = ctrl.$modelValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - groupLength, length, - groupIndex, index, - locals = {}, - selected, - selectedSet = false, // nothing is selected yet - lastElement, - element, - label; - - if (multiple) { - if (trackFn && isArray(modelValue)) { - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { - locals[valueName] = modelValue[trackIndex]; - selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); - } - } else { - selectedSet = new HashMap(modelValue); - } - } - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - - key = index; - if (keyName) { - key = keys[index]; - if ( key.charAt(0) === '$' ) continue; - locals[keyName] = key; - } - - locals[valueName] = values[key]; - - optionGroupName = groupByFn(scope, locals) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - if (multiple) { - selected = isDefined( - selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) - ); - } else { - if (trackFn) { - var modelCast = {}; - modelCast[valueName] = modelValue; - selected = trackFn(scope, modelCast) === trackFn(scope, locals); - } else { - selected = modelValue === valueFn(scope, locals); - } - selectedSet = selectedSet || selected; // see if at least one item is selected - } - label = displayFn(scope, locals); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionGroup.push({ - // either the index into array or key from object - id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || modelValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!selectedSet}); - } else if (!selectedSet) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for(index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index+1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - lastElement.text(existingOption.label = option.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (existingOption.selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .attr('selected', option.selected) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while(existingOptions.length > index) { - existingOptions.pop().element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while(optionGroupsCache.length > groupIndex) { - optionGroupsCache.pop()[0].element.remove(); - } - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function (scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (selectCtrl && selectCtrl.databound) { - // For some reason Opera defaults to true and if not overridden this messes up the repeater. - // We don't want the view to drive the initialization of the model anyway. - element.prop('selected', false); - } else { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (newVal !== oldVal) selectCtrl.removeOption(oldVal); - selectCtrl.addOption(newVal); - }); - } else { - selectCtrl.addOption(attr.value); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: true -}); - -/** - * Setup file for the Scenario. - * Must be first in the compilation/bootstrap list. - */ - -// Public namespace -angular.scenario = angular.scenario || {}; - -/** - * Expose jQuery (e.g. for custom dsl extensions). - */ -angular.scenario.jQuery = _jQuery; - -/** - * Defines a new output format. - * - * @param {string} name the name of the new output format - * @param {function()} fn function(context, runner) that generates the output - */ -angular.scenario.output = angular.scenario.output || function(name, fn) { - angular.scenario.output[name] = fn; -}; - -/** - * Defines a new DSL statement. If your factory function returns a Future - * it's returned, otherwise the result is assumed to be a map of functions - * for chaining. Chained functions are subject to the same rules. - * - * Note: All functions on the chain are bound to the chain scope so values - * set on "this" in your statement function are available in the chained - * functions. - * - * @param {string} name The name of the statement - * @param {function()} fn Factory function(), return a function for - * the statement. - */ -angular.scenario.dsl = angular.scenario.dsl || function(name, fn) { - angular.scenario.dsl[name] = function() { - /* jshint -W040 *//* The dsl binds `this` for us when calling chained functions */ - function executeStatement(statement, args) { - var result = statement.apply(this, args); - if (angular.isFunction(result) || result instanceof angular.scenario.Future) - return result; - var self = this; - var chain = angular.extend({}, result); - angular.forEach(chain, function(value, name) { - if (angular.isFunction(value)) { - chain[name] = function() { - return executeStatement.call(self, value, arguments); - }; - } else { - chain[name] = value; - } - }); - return chain; - } - var statement = fn.apply(this, arguments); - return function() { - return executeStatement.call(this, statement, arguments); - }; - }; -}; - -/** - * Defines a new matcher for use with the expects() statement. The value - * this.actual (like in Jasmine) is available in your matcher to compare - * against. Your function should return a boolean. The future is automatically - * created for you. - * - * @param {string} name The name of the matcher - * @param {function()} fn The matching function(expected). - */ -angular.scenario.matcher = angular.scenario.matcher || function(name, fn) { - angular.scenario.matcher[name] = function(expected) { - var description = this.future.name + - (this.inverse ? ' not ' : ' ') + name + - ' ' + angular.toJson(expected); - var self = this; - this.addFuture('expect ' + description, - function(done) { - var error; - self.actual = self.future.value; - if ((self.inverse && fn.call(self, expected)) || - (!self.inverse && !fn.call(self, expected))) { - error = 'expected ' + description + - ' but was ' + angular.toJson(self.actual); - } - done(error); - }); - }; -}; - -/** - * Initialize the scenario runner and run ! - * - * Access global window and document object - * Access $runner through closure - * - * @param {Object=} config Config options - */ -angular.scenario.setUpAndRun = function(config) { - var href = window.location.href; - var body = _jQuery(document.body); - var output = []; - var objModel = new angular.scenario.ObjectModel($runner); - - if (config && config.scenario_output) { - output = config.scenario_output.split(','); - } - - angular.forEach(angular.scenario.output, function(fn, name) { - if (!output.length || indexOf(output,name) != -1) { - var context = body.append('<div></div>').find('div:last'); - context.attr('id', name); - fn.call({}, context, $runner, objModel); - } - }); - - if (!/^http/.test(href) && !/^https/.test(href)) { - body.append('<p id="system-error"></p>'); - body.find('#system-error').text( - 'Scenario runner must be run using http or https. The protocol ' + - href.split(':')[0] + ':// is not supported.' - ); - return; - } - - var appFrame = body.append('<div id="application"></div>').find('#application'); - var application = new angular.scenario.Application(appFrame); - - $runner.on('RunnerEnd', function() { - appFrame.css('display', 'none'); - appFrame.find('iframe').attr('src', 'about:blank'); - }); - - $runner.on('RunnerError', function(error) { - if (window.console) { - console.log(formatException(error)); - } else { - // Do something for IE - alert(error); - } - }); - - $runner.run(application); -}; - -/** - * Iterates through list with iterator function that must call the - * continueFunction to continue iterating. - * - * @param {Array} list list to iterate over - * @param {function()} iterator Callback function(value, continueFunction) - * @param {function()} done Callback function(error, result) called when - * iteration finishes or an error occurs. - */ -function asyncForEach(list, iterator, done) { - var i = 0; - function loop(error, index) { - if (index && index > i) { - i = index; - } - if (error || i >= list.length) { - done(error); - } else { - try { - iterator(list[i++], loop); - } catch (e) { - done(e); - } - } - } - loop(); -} - -/** - * Formats an exception into a string with the stack trace, but limits - * to a specific line length. - * - * @param {Object} error The exception to format, can be anything throwable - * @param {Number=} [maxStackLines=5] max lines of the stack trace to include - * default is 5. - */ -function formatException(error, maxStackLines) { - maxStackLines = maxStackLines || 5; - var message = error.toString(); - if (error.stack) { - var stack = error.stack.split('\n'); - if (stack[0].indexOf(message) === -1) { - maxStackLines++; - stack.unshift(error.message); - } - message = stack.slice(0, maxStackLines).join('\n'); - } - return message; -} - -/** - * Returns a function that gets the file name and line number from a - * location in the stack if available based on the call site. - * - * Note: this returns another function because accessing .stack is very - * expensive in Chrome. - * - * @param {Number} offset Number of stack lines to skip - */ -function callerFile(offset) { - var error = new Error(); - - return function() { - var line = (error.stack || '').split('\n')[offset]; - - // Clean up the stack trace line - if (line) { - if (line.indexOf('@') !== -1) { - // Firefox - line = line.substring(line.indexOf('@')+1); - } else { - // Chrome - line = line.substring(line.indexOf('(')+1).replace(')', ''); - } - } - - return line || ''; - }; -} - - -/** - * Don't use the jQuery trigger method since it works incorrectly. - * - * jQuery notifies listeners and then changes the state of a checkbox and - * does not create a real browser event. A real click changes the state of - * the checkbox and then notifies listeners. - * - * To work around this we instead use our own handler that fires a real event. - */ -(function(fn){ - // We need a handle to the original trigger function for input tests. - var parentTrigger = fn._originalTrigger = fn.trigger; - fn.trigger = function(type) { - if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) { - var processDefaults = []; - this.each(function(index, node) { - processDefaults.push(browserTrigger(node, type)); - }); - - // this is not compatible with jQuery - we return an array of returned values, - // so that scenario runner know whether JS code has preventDefault() of the event or not... - return processDefaults; - } - return parentTrigger.apply(this, arguments); - }; -})(_jQuery.fn); - -/** - * Finds all bindings with the substring match of name and returns an - * array of their values. - * - * @param {string} bindExp The name to match - * @return {Array.<string>} String of binding values - */ -_jQuery.fn.bindings = function(windowJquery, bindExp) { - var result = [], match, - bindSelector = '.ng-binding:visible'; - if (angular.isString(bindExp)) { - bindExp = bindExp.replace(/\s/g, ''); - match = function (actualExp) { - if (actualExp) { - actualExp = actualExp.replace(/\s/g, ''); - if (actualExp == bindExp) return true; - if (actualExp.indexOf(bindExp) === 0) { - return actualExp.charAt(bindExp.length) == '|'; - } - } - }; - } else if (bindExp) { - match = function(actualExp) { - return actualExp && bindExp.exec(actualExp); - }; - } else { - match = function(actualExp) { - return !!actualExp; - }; - } - var selection = this.find(bindSelector); - if (this.is(bindSelector)) { - selection = selection.add(this); - } - - function push(value) { - if (value === undefined) { - value = ''; - } else if (typeof value != 'string') { - value = angular.toJson(value); - } - result.push('' + value); - } - - selection.each(function() { - var element = windowJquery(this), - binding; - if (binding = element.data('$binding')) { - if (typeof binding == 'string') { - if (match(binding)) { - push(element.scope().$eval(binding)); - } - } else { - if (!angular.isArray(binding)) { - binding = [binding]; - } - for(var fns, j=0, jj=binding.length; j<jj; j++) { - fns = binding[j]; - if (fns.parts) { - fns = fns.parts; - } else { - fns = [fns]; - } - for (var scope, fn, i = 0, ii = fns.length; i < ii; i++) { - if(match((fn = fns[i]).exp)) { - push(fn(scope = scope || element.scope())); - } - } - } - } - } - }); - return result; -}; - -(function() { - var msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1], 10); - - function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for ( var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; - } - - - - /** - * Triggers a browser event. Attempts to choose the right event if one is - * not specified. - * - * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement - * @param {string} eventType Optional event type - * @param {Object=} eventData An optional object which contains additional event data (such as x,y - * coordinates, keys, etc...) that are passed into the event when triggered - */ - window.browserTrigger = function browserTrigger(element, eventType, eventData) { - if (element && !element.nodeName) element = element[0]; - if (!element) return; - - eventData = eventData || {}; - var keys = eventData.keys; - var x = eventData.x; - var y = eventData.y; - - var inputType = (element.type) ? element.type.toLowerCase() : null, - nodeName = element.nodeName.toLowerCase(); - - if (!eventType) { - eventType = { - 'text': 'change', - 'textarea': 'change', - 'hidden': 'change', - 'password': 'change', - 'button': 'click', - 'submit': 'click', - 'reset': 'click', - 'image': 'click', - 'checkbox': 'click', - 'radio': 'click', - 'select-one': 'change', - 'select-multiple': 'change', - '_default_': 'click' - }[inputType || '_default_']; - } - - if (nodeName == 'option') { - element.parentNode.value = element.value; - element = element.parentNode; - eventType = 'change'; - } - - keys = keys || []; - function pressed(key) { - return indexOf(keys, key) !== -1; - } - - if (msie < 9) { - if (inputType == 'radio' || inputType == 'checkbox') { - element.checked = !element.checked; - } - - // WTF!!! Error: Unspecified error. - // Don't know why, but some elements when detached seem to be in inconsistent state and - // calling .fireEvent() on them will result in very unhelpful error (Error: Unspecified error) - // forcing the browser to compute the element position (by reading its CSS) - // puts the element in consistent state. - element.style.posLeft; - - // TODO(vojta): create event objects with pressed keys to get it working on IE<9 - var ret = element.fireEvent('on' + eventType); - if (inputType == 'submit') { - while(element) { - if (element.nodeName.toLowerCase() == 'form') { - element.fireEvent('onsubmit'); - break; - } - element = element.parentNode; - } - } - return ret; - } else { - var evnt; - if(/transitionend/.test(eventType)) { - if(window.WebKitTransitionEvent) { - evnt = new WebKitTransitionEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new TransitionEvent(eventType, eventData); - } - catch(e) { - evnt = document.createEvent('TransitionEvent'); - evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else if(/animationend/.test(eventType)) { - if(window.WebKitAnimationEvent) { - evnt = new WebKitAnimationEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new AnimationEvent(eventType, eventData); - } - catch(e) { - evnt = document.createEvent('AnimationEvent'); - evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else { - evnt = document.createEvent('MouseEvents'); - x = x || 0; - y = y || 0; - evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), - pressed('alt'), pressed('shift'), pressed('meta'), 0, element); - } - - /* we're unable to change the timeStamp value directly so this - * is only here to allow for testing where the timeStamp value is - * read */ - evnt.$manualTimeStamp = eventData.timeStamp; - - if(!evnt) return; - - var originalPreventDefault = evnt.preventDefault, - appWindow = element.ownerDocument.defaultView, - fakeProcessDefault = true, - finalProcessDefault, - angular = appWindow.angular || {}; - - // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208 - angular['ff-684208-preventDefault'] = false; - evnt.preventDefault = function() { - fakeProcessDefault = false; - return originalPreventDefault.apply(evnt, arguments); - }; - - element.dispatchEvent(evnt); - finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); - - delete angular['ff-684208-preventDefault']; - - return finalProcessDefault; - } - }; -}()); - -/** - * Represents the application currently being tested and abstracts usage - * of iframes or separate windows. - * - * @param {Object} context jQuery wrapper around HTML context. - */ -angular.scenario.Application = function(context) { - this.context = context; - context.append( - '<h2>Current URL: <a href="about:blank">None</a></h2>' + - '<div id="test-frames"></div>' - ); -}; - -/** - * Gets the jQuery collection of frames. Don't use this directly because - * frames may go stale. - * - * @private - * @return {Object} jQuery collection - */ -angular.scenario.Application.prototype.getFrame_ = function() { - return this.context.find('#test-frames iframe:last'); -}; - -/** - * Gets the window of the test runner frame. Always favor executeAction() - * instead of this method since it prevents you from getting a stale window. - * - * @private - * @return {Object} the window of the frame - */ -angular.scenario.Application.prototype.getWindow_ = function() { - var contentWindow = this.getFrame_().prop('contentWindow'); - if (!contentWindow) - throw 'Frame window is not accessible.'; - return contentWindow; -}; - -/** - * Changes the location of the frame. - * - * @param {string} url The URL. If it begins with a # then only the - * hash of the page is changed. - * @param {function()} loadFn function($window, $document) Called when frame loads. - * @param {function()} errorFn function(error) Called if any error when loading. - */ -angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) { - var self = this; - var frame = self.getFrame_(); - //TODO(esprehn): Refactor to use rethrow() - errorFn = errorFn || function(e) { throw e; }; - if (url === 'about:blank') { - errorFn('Sandbox Error: Navigating to about:blank is not allowed.'); - } else if (url.charAt(0) === '#') { - url = frame.attr('src').split('#')[0] + url; - frame.attr('src', url); - self.executeAction(loadFn); - } else { - frame.remove(); - self.context.find('#test-frames').append('<iframe>'); - frame = self.getFrame_(); - - frame.load(function() { - frame.off(); - try { - var $window = self.getWindow_(); - - if ($window.angular) { - // Disable animations - $window.angular.resumeBootstrap([['$provide', function($provide) { - return ['$animate', function($animate) { - $animate.enabled(false); - }]; - }]]); - } - - self.executeAction(loadFn); - } catch (e) { - errorFn(e); - } - }).attr('src', url); - - // for IE compatibility set the name *after* setting the frame url - frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!"; - } - self.context.find('> h2 a').attr('href', url).text(url); -}; - -/** - * Executes a function in the context of the tested application. Will wait - * for all pending angular xhr requests before executing. - * - * @param {function()} action The callback to execute. function($window, $document) - * $document is a jQuery wrapped document. - */ -angular.scenario.Application.prototype.executeAction = function(action) { - var self = this; - var $window = this.getWindow_(); - if (!$window.document) { - throw 'Sandbox Error: Application document not accessible.'; - } - if (!$window.angular) { - return action.call(this, $window, _jQuery($window.document)); - } - angularInit($window.document, function(element) { - var $injector = $window.angular.element(element).injector(); - var $element = _jQuery(element); - - $element.injector = function() { - return $injector; - }; - - $injector.invoke(function($browser){ - $browser.notifyWhenNoOutstandingRequests(function() { - action.call(self, $window, $element); - }); - }); - }); -}; - -/** - * The representation of define blocks. Don't used directly, instead use - * define() in your tests. - * - * @param {string} descName Name of the block - * @param {Object} parent describe or undefined if the root. - */ -angular.scenario.Describe = function(descName, parent) { - this.only = parent && parent.only; - this.beforeEachFns = []; - this.afterEachFns = []; - this.its = []; - this.children = []; - this.name = descName; - this.parent = parent; - this.id = angular.scenario.Describe.id++; - - /** - * Calls all before functions. - */ - var beforeEachFns = this.beforeEachFns; - this.setupBefore = function() { - if (parent) parent.setupBefore.call(this); - angular.forEach(beforeEachFns, function(fn) { fn.call(this); }, this); - }; - - /** - * Calls all after functions. - */ - var afterEachFns = this.afterEachFns; - this.setupAfter = function() { - angular.forEach(afterEachFns, function(fn) { fn.call(this); }, this); - if (parent) parent.setupAfter.call(this); - }; -}; - -// Shared Unique ID generator for every describe block -angular.scenario.Describe.id = 0; - -// Shared Unique ID generator for every it (spec) -angular.scenario.Describe.specId = 0; - -/** - * Defines a block to execute before each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.beforeEach = function(body) { - this.beforeEachFns.push(body); -}; - -/** - * Defines a block to execute after each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.afterEach = function(body) { - this.afterEachFns.push(body); -}; - -/** - * Creates a new describe block that's a child of this one. - * - * @param {string} name Name of the block. Appended to the parent block's name. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.describe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - this.children.push(child); - body.call(child); -}; - -/** - * Same as describe() but makes ddescribe blocks the only to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.ddescribe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - child.only = true; - this.children.push(child); - body.call(child); -}; - -/** - * Use to disable a describe block. - */ -angular.scenario.Describe.prototype.xdescribe = angular.noop; - -/** - * Defines a test. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.it = function(name, body) { - this.its.push({ - id: angular.scenario.Describe.specId++, - definition: this, - only: this.only, - name: name, - before: this.setupBefore, - body: body, - after: this.setupAfter - }); -}; - -/** - * Same as it() but makes iit tests the only test to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.iit = function(name, body) { - this.it.apply(this, arguments); - this.its[this.its.length-1].only = true; -}; - -/** - * Use to disable a test block. - */ -angular.scenario.Describe.prototype.xit = angular.noop; - -/** - * Gets an array of functions representing all the tests (recursively). - * that can be executed with SpecRunner's. - * - * @return {Array<Object>} Array of it blocks { - * definition : Object // parent Describe - * only: boolean - * name: string - * before: Function - * body: Function - * after: Function - * } - */ -angular.scenario.Describe.prototype.getSpecs = function() { - var specs = arguments[0] || []; - angular.forEach(this.children, function(child) { - child.getSpecs(specs); - }); - angular.forEach(this.its, function(it) { - specs.push(it); - }); - var only = []; - angular.forEach(specs, function(it) { - if (it.only) { - only.push(it); - } - }); - return (only.length && only) || specs; -}; - -/** - * A future action in a spec. - * - * @param {string} name name of the future action - * @param {function()} behavior future callback(error, result) - * @param {function()} line Optional. function that returns the file/line number. - */ -angular.scenario.Future = function(name, behavior, line) { - this.name = name; - this.behavior = behavior; - this.fulfilled = false; - this.value = undefined; - this.parser = angular.identity; - this.line = line || function() { return ''; }; -}; - -/** - * Executes the behavior of the closure. - * - * @param {function()} doneFn Callback function(error, result) - */ -angular.scenario.Future.prototype.execute = function(doneFn) { - var self = this; - this.behavior(function(error, result) { - self.fulfilled = true; - if (result) { - try { - result = self.parser(result); - } catch(e) { - error = e; - } - } - self.value = error || result; - doneFn(error, result); - }); -}; - -/** - * Configures the future to convert it's final with a function fn(value) - * - * @param {function()} fn function(value) that returns the parsed value - */ -angular.scenario.Future.prototype.parsedWith = function(fn) { - this.parser = fn; - return this; -}; - -/** - * Configures the future to parse it's final value from JSON - * into objects. - */ -angular.scenario.Future.prototype.fromJson = function() { - return this.parsedWith(angular.fromJson); -}; - -/** - * Configures the future to convert it's final value from objects - * into JSON. - */ -angular.scenario.Future.prototype.toJson = function() { - return this.parsedWith(angular.toJson); -}; - -/** - * Maintains an object tree from the runner events. - * - * @param {Object} runner The scenario Runner instance to connect to. - * - * TODO(esprehn): Every output type creates one of these, but we probably - * want one global shared instance. Need to handle events better too - * so the HTML output doesn't need to do spec model.getSpec(spec.id) - * silliness. - * - * TODO(vojta) refactor on, emit methods (from all objects) - use inheritance - */ -angular.scenario.ObjectModel = function(runner) { - var self = this; - - this.specMap = {}; - this.listeners = []; - this.value = { - name: '', - children: {} - }; - - runner.on('SpecBegin', function(spec) { - var block = self.value, - definitions = []; - - angular.forEach(self.getDefinitionPath(spec), function(def) { - if (!block.children[def.name]) { - block.children[def.name] = { - id: def.id, - name: def.name, - children: {}, - specs: {} - }; - } - block = block.children[def.name]; - definitions.push(def.name); - }); - - var it = self.specMap[spec.id] = - block.specs[spec.name] = - new angular.scenario.ObjectModel.Spec(spec.id, spec.name, definitions); - - // forward the event - self.emit('SpecBegin', it); - }); - - runner.on('SpecError', function(spec, error) { - var it = self.getSpec(spec.id); - it.status = 'error'; - it.error = error; - - // forward the event - self.emit('SpecError', it, error); - }); - - runner.on('SpecEnd', function(spec) { - var it = self.getSpec(spec.id); - complete(it); - - // forward the event - self.emit('SpecEnd', it); - }); - - runner.on('StepBegin', function(spec, step) { - var it = self.getSpec(spec.id); - step = new angular.scenario.ObjectModel.Step(step.name); - it.steps.push(step); - - // forward the event - self.emit('StepBegin', it, step); - }); - - runner.on('StepEnd', function(spec) { - var it = self.getSpec(spec.id); - var step = it.getLastStep(); - if (step.name !== step.name) - throw 'Events fired in the wrong order. Step names don\'t match.'; - complete(step); - - // forward the event - self.emit('StepEnd', it, step); - }); - - runner.on('StepFailure', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('failure', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepFailure', it, modelStep, error); - }); - - runner.on('StepError', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('error', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepError', it, modelStep, error); - }); - - runner.on('RunnerBegin', function() { - self.emit('RunnerBegin'); - }); - runner.on('RunnerEnd', function() { - self.emit('RunnerEnd'); - }); - - function complete(item) { - item.endTime = new Date().getTime(); - item.duration = item.endTime - item.startTime; - item.status = item.status || 'success'; - } -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName Name of the event to add a handler for - * @param {function()} listener Function that will be called when event is fired - */ -angular.scenario.ObjectModel.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.ObjectModel.prototype.emit = function(eventName) { - var self = this, - args = Array.prototype.slice.call(arguments, 1); - - eventName = eventName.toLowerCase(); - - if (this.listeners[eventName]) { - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); - } -}; - -/** - * Computes the path of definition describe blocks that wrap around - * this spec. - * - * @param spec Spec to compute the path for. - * @return {Array<Describe>} The describe block path - */ -angular.scenario.ObjectModel.prototype.getDefinitionPath = function(spec) { - var path = []; - var currentDefinition = spec.definition; - while (currentDefinition && currentDefinition.name) { - path.unshift(currentDefinition); - currentDefinition = currentDefinition.parent; - } - return path; -}; - -/** - * Gets a spec by id. - * - * @param {string} id The id of the spec to get the object for. - * @return {Object} the Spec instance - */ -angular.scenario.ObjectModel.prototype.getSpec = function(id) { - return this.specMap[id]; -}; - -/** - * A single it block. - * - * @param {string} id Id of the spec - * @param {string} name Name of the spec - * @param {Array<string>=} definitionNames List of all describe block names that wrap this spec - */ -angular.scenario.ObjectModel.Spec = function(id, name, definitionNames) { - this.id = id; - this.name = name; - this.startTime = new Date().getTime(); - this.steps = []; - this.fullDefinitionName = (definitionNames || []).join(' '); -}; - -/** - * Adds a new step to the Spec. - * - * @param {string} name Name of the step (really name of the future) - * @return {Object} the added step - */ -angular.scenario.ObjectModel.Spec.prototype.addStep = function(name) { - var step = new angular.scenario.ObjectModel.Step(name); - this.steps.push(step); - return step; -}; - -/** - * Gets the most recent step. - * - * @return {Object} the step - */ -angular.scenario.ObjectModel.Spec.prototype.getLastStep = function() { - return this.steps[this.steps.length-1]; -}; - -/** - * Set status of the Spec from given Step - * - * @param {angular.scenario.ObjectModel.Step} step - */ -angular.scenario.ObjectModel.Spec.prototype.setStatusFromStep = function(step) { - if (!this.status || step.status == 'error') { - this.status = step.status; - this.error = step.error; - this.line = step.line; - } -}; - -/** - * A single step inside a Spec. - * - * @param {string} name Name of the step - */ -angular.scenario.ObjectModel.Step = function(name) { - this.name = name; - this.startTime = new Date().getTime(); -}; - -/** - * Helper method for setting all error status related properties - * - * @param {string} status - * @param {string} error - * @param {string} line - */ -angular.scenario.ObjectModel.Step.prototype.setErrorStatus = function(status, error, line) { - this.status = status; - this.error = error; - this.line = line; -}; - -/** - * Runner for scenarios - * - * Has to be initialized before any test is loaded, - * because it publishes the API into window (global space). - */ -angular.scenario.Runner = function($window) { - this.listeners = []; - this.$window = $window; - this.rootDescribe = new angular.scenario.Describe(); - this.currentDescribe = this.rootDescribe; - this.api = { - it: this.it, - iit: this.iit, - xit: angular.noop, - describe: this.describe, - ddescribe: this.ddescribe, - xdescribe: angular.noop, - beforeEach: this.beforeEach, - afterEach: this.afterEach - }; - angular.forEach(this.api, angular.bind(this, function(fn, key) { - this.$window[key] = angular.bind(this, fn); - })); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.Runner.prototype.emit = function(eventName) { - var self = this; - var args = Array.prototype.slice.call(arguments, 1); - eventName = eventName.toLowerCase(); - if (!this.listeners[eventName]) - return; - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName The name of the event to add a handler for - * @param {string} listener The fn(...) that takes the extra arguments from emit() - */ -angular.scenario.Runner.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Defines a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.describe = function(name, body) { - var self = this; - this.currentDescribe.describe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Same as describe, but makes ddescribe the only blocks to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.ddescribe = function(name, body) { - var self = this; - this.currentDescribe.ddescribe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Defines a test in a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.it = function(name, body) { - this.currentDescribe.it(name, body); -}; - -/** - * Same as it, but makes iit tests the only tests to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.iit = function(name, body) { - this.currentDescribe.iit(name, body); -}; - -/** - * Defines a function to be called before each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.beforeEach = function(body) { - this.currentDescribe.beforeEach(body); -}; - -/** - * Defines a function to be called after each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.afterEach = function(body) { - this.currentDescribe.afterEach(body); -}; - -/** - * Creates a new spec runner. - * - * @private - * @param {Object} scope parent scope - */ -angular.scenario.Runner.prototype.createSpecRunner_ = function(scope) { - var child = scope.$new(); - var Cls = angular.scenario.SpecRunner; - - // Export all the methods to child scope manually as now we don't mess controllers with scopes - // TODO(vojta): refactor scenario runner so that these objects are not tightly coupled as current - for (var name in Cls.prototype) - child[name] = angular.bind(child, Cls.prototype[name]); - - Cls.call(child); - return child; -}; - -/** - * Runs all the loaded tests with the specified runner class on the - * provided application. - * - * @param {angular.scenario.Application} application App to remote control. - */ -angular.scenario.Runner.prototype.run = function(application) { - var self = this; - var $root = angular.injector(['ng']).get('$rootScope'); - angular.extend($root, this); - angular.forEach(angular.scenario.Runner.prototype, function(fn, name) { - $root[name] = angular.bind(self, fn); - }); - $root.application = application; - $root.emit('RunnerBegin'); - asyncForEach(this.rootDescribe.getSpecs(), function(spec, specDone) { - var dslCache = {}; - var runner = self.createSpecRunner_($root); - angular.forEach(angular.scenario.dsl, function(fn, key) { - dslCache[key] = fn.call($root); - }); - angular.forEach(angular.scenario.dsl, function(fn, key) { - self.$window[key] = function() { - var line = callerFile(3); - var scope = runner.$new(); - - // Make the dsl accessible on the current chain - scope.dsl = {}; - angular.forEach(dslCache, function(fn, key) { - scope.dsl[key] = function() { - return dslCache[key].apply(scope, arguments); - }; - }); - - // Make these methods work on the current chain - scope.addFuture = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFuture.apply(scope, arguments); - }; - scope.addFutureAction = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFutureAction.apply(scope, arguments); - }; - - return scope.dsl[key].apply(scope, arguments); - }; - }); - runner.run(spec, function() { - runner.$destroy(); - specDone.apply(this, arguments); - }); - }, - function(error) { - if (error) { - self.emit('RunnerError', error); - } - self.emit('RunnerEnd'); - }); -}; - -/** - * This class is the "this" of the it/beforeEach/afterEach method. - * Responsibilities: - * - "this" for it/beforeEach/afterEach - * - keep state for single it/beforeEach/afterEach execution - * - keep track of all of the futures to execute - * - run single spec (execute each future) - */ -angular.scenario.SpecRunner = function() { - this.futures = []; - this.afterIndex = 0; -}; - -/** - * Executes a spec which is an it block with associated before/after functions - * based on the describe nesting. - * - * @param {Object} spec A spec object - * @param {function()} specDone function that is called when the spec finishes, - * of the form `Function(error, index)` - */ -angular.scenario.SpecRunner.prototype.run = function(spec, specDone) { - var self = this; - this.spec = spec; - - this.emit('SpecBegin', spec); - - try { - spec.before.call(this); - spec.body.call(this); - this.afterIndex = this.futures.length; - spec.after.call(this); - } catch (e) { - this.emit('SpecError', spec, e); - this.emit('SpecEnd', spec); - specDone(); - return; - } - - var handleError = function(error, done) { - if (self.error) { - return done(); - } - self.error = true; - done(null, self.afterIndex); - }; - - asyncForEach( - this.futures, - function(future, futureDone) { - self.step = future; - self.emit('StepBegin', spec, future); - try { - future.execute(function(error) { - if (error) { - self.emit('StepFailure', spec, future, error); - self.emit('StepEnd', spec, future); - return handleError(error, futureDone); - } - self.emit('StepEnd', spec, future); - self.$window.setTimeout(function() { futureDone(); }, 0); - }); - } catch (e) { - self.emit('StepError', spec, future, e); - self.emit('StepEnd', spec, future); - handleError(e, futureDone); - } - }, - function(e) { - if (e) { - self.emit('SpecError', spec, e); - } - self.emit('SpecEnd', spec); - // Call done in a timeout so exceptions don't recursively - // call this function - self.$window.setTimeout(function() { specDone(); }, 0); - } - ); -}; - -/** - * Adds a new future action. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFuture = function(name, behavior, line) { - var future = new angular.scenario.Future(name, angular.bind(this, behavior), line); - this.futures.push(future); - return future; -}; - -/** - * Adds a new future action to be executed on the application window. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, line) { - var self = this; - var NG = /\[ng\\\:/; - return this.addFuture(name, function(done) { - this.application.executeAction(function($window, $document) { - - //TODO(esprehn): Refactor this so it doesn't need to be in here. - $document.elements = function(selector) { - var args = Array.prototype.slice.call(arguments, 1); - selector = (self.selector || '') + ' ' + (selector || ''); - selector = _jQuery.trim(selector) || '*'; - angular.forEach(args, function(value, index) { - selector = selector.replace('$' + (index + 1), value); - }); - var result = $document.find(selector); - if (selector.match(NG)) { - angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index){ - result = result.add(selector.replace(NG, value), $document); - }); - } - if (!result.length) { - throw { - type: 'selector', - message: 'Selector ' + selector + ' did not match any elements.' - }; - } - - return result; - }; - - try { - behavior.call(self, $window, $document, done); - } catch(e) { - if (e.type && e.type === 'selector') { - done(e.message); - } else { - throw e; - } - } - }); - }, line); -}; - -/** - * Shared DSL statements that are useful to all scenarios. - */ - - /** - * Usage: - * pause() pauses until you call resume() in the console - */ -angular.scenario.dsl('pause', function() { - return function() { - return this.addFuture('pausing for you to resume', function(done) { - this.emit('InteractivePause', this.spec, this.step); - this.$window.resume = function() { done(); }; - }); - }; -}); - -/** - * Usage: - * sleep(seconds) pauses the test for specified number of seconds - */ -angular.scenario.dsl('sleep', function() { - return function(time) { - return this.addFuture('sleep for ' + time + ' seconds', function(done) { - this.$window.setTimeout(function() { done(null, time * 1000); }, time * 1000); - }); - }; -}); - -/** - * Usage: - * browser().navigateTo(url) Loads the url into the frame - * browser().navigateTo(url, fn) where fn(url) is called and returns the URL to navigate to - * browser().reload() refresh the page (reload the same URL) - * browser().window.href() window.location.href - * browser().window.path() window.location.pathname - * browser().window.search() window.location.search - * browser().window.hash() window.location.hash without # prefix - * browser().location().url() see ng.$location#url - * browser().location().path() see ng.$location#path - * browser().location().search() see ng.$location#search - * browser().location().hash() see ng.$location#hash - */ -angular.scenario.dsl('browser', function() { - var chain = {}; - - chain.navigateTo = function(url, delegate) { - var application = this.application; - return this.addFuture("browser navigate to '" + url + "'", function(done) { - if (delegate) { - url = delegate.call(this, url); - } - application.navigateTo(url, function() { - done(null, url); - }, done); - }); - }; - - chain.reload = function() { - var application = this.application; - return this.addFutureAction('browser reload', function($window, $document, done) { - var href = $window.location.href; - application.navigateTo(href, function() { - done(null, href); - }, done); - }); - }; - - chain.window = function() { - var api = {}; - - api.href = function() { - return this.addFutureAction('window.location.href', function($window, $document, done) { - done(null, $window.location.href); - }); - }; - - api.path = function() { - return this.addFutureAction('window.location.path', function($window, $document, done) { - done(null, $window.location.pathname); - }); - }; - - api.search = function() { - return this.addFutureAction('window.location.search', function($window, $document, done) { - done(null, $window.location.search); - }); - }; - - api.hash = function() { - return this.addFutureAction('window.location.hash', function($window, $document, done) { - done(null, $window.location.hash.replace('#', '')); - }); - }; - - return api; - }; - - chain.location = function() { - var api = {}; - - api.url = function() { - return this.addFutureAction('$location.url()', function($window, $document, done) { - done(null, $document.injector().get('$location').url()); - }); - }; - - api.path = function() { - return this.addFutureAction('$location.path()', function($window, $document, done) { - done(null, $document.injector().get('$location').path()); - }); - }; - - api.search = function() { - return this.addFutureAction('$location.search()', function($window, $document, done) { - done(null, $document.injector().get('$location').search()); - }); - }; - - api.hash = function() { - return this.addFutureAction('$location.hash()', function($window, $document, done) { - done(null, $document.injector().get('$location').hash()); - }); - }; - - return api; - }; - - return function() { - return chain; - }; -}); - -/** - * Usage: - * expect(future).{matcher} where matcher is one of the matchers defined - * with angular.scenario.matcher - * - * ex. expect(binding("name")).toEqual("Elliott") - */ -angular.scenario.dsl('expect', function() { - var chain = angular.extend({}, angular.scenario.matcher); - - chain.not = function() { - this.inverse = true; - return chain; - }; - - return function(future) { - this.future = future; - return chain; - }; -}); - -/** - * Usage: - * using(selector, label) scopes the next DSL element selection - * - * ex. - * using('#foo', "'Foo' text field").input('bar') - */ -angular.scenario.dsl('using', function() { - return function(selector, label) { - this.selector = _jQuery.trim((this.selector||'') + ' ' + selector); - if (angular.isString(label) && label.length) { - this.label = label + ' ( ' + this.selector + ' )'; - } else { - this.label = this.selector; - } - return this.dsl; - }; -}); - -/** - * Usage: - * binding(name) returns the value of the first matching binding - */ -angular.scenario.dsl('binding', function() { - return function(name) { - return this.addFutureAction("select binding '" + name + "'", - function($window, $document, done) { - var values = $document.elements().bindings($window.angular.element, name); - if (!values.length) { - return done("Binding selector '" + name + "' did not match."); - } - done(null, values[0]); - }); - }; -}); - -/** - * Usage: - * input(name).enter(value) enters value in input with specified name - * input(name).check() checks checkbox - * input(name).select(value) selects the radio button with specified name/value - * input(name).val() returns the value of the input. - */ -angular.scenario.dsl('input', function() { - var chain = {}; - var supportInputEvent = 'oninput' in document.createElement('div') && msie != 9; - - chain.enter = function(value, event) { - return this.addFutureAction("input '" + this.name + "' enter '" + value + "'", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - input.val(value); - input.trigger(event || (supportInputEvent ? 'input' : 'change')); - done(); - }); - }; - - chain.check = function() { - return this.addFutureAction("checkbox '" + this.name + "' toggle", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':checkbox'); - input.trigger('click'); - done(); - }); - }; - - chain.select = function(value) { - return this.addFutureAction("radio button '" + this.name + "' toggle '" + value + "'", - function($window, $document, done) { - var input = $document. - elements('[ng\\:model="$1"][value="$2"]', this.name, value).filter(':radio'); - input.trigger('click'); - done(); - }); - }; - - chain.val = function() { - return this.addFutureAction("return input val", function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - done(null,input.val()); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - - -/** - * Usage: - * repeater('#products table', 'Product List').count() number of rows - * repeater('#products table', 'Product List').row(1) all bindings in row as an array - * repeater('#products table', 'Product List').column('product.name') all values across all rows - * in an array - */ -angular.scenario.dsl('repeater', function() { - var chain = {}; - - chain.count = function() { - return this.addFutureAction("repeater '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.column = function(binding) { - return this.addFutureAction("repeater '" + this.label + "' column '" + binding + "'", - function($window, $document, done) { - done(null, $document.elements().bindings($window.angular.element, binding)); - }); - }; - - chain.row = function(index) { - return this.addFutureAction("repeater '" + this.label + "' row '" + index + "'", - function($window, $document, done) { - var matches = $document.elements().slice(index, index + 1); - if (!matches.length) - return done('row ' + index + ' out of bounds'); - done(null, matches.bindings($window.angular.element)); - }); - }; - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Usage: - * select(name).option('value') select one option - * select(name).options('value1', 'value2', ...) select options from a multi select - */ -angular.scenario.dsl('select', function() { - var chain = {}; - - chain.option = function(value) { - return this.addFutureAction("select '" + this.name + "' option '" + value + "'", - function($window, $document, done) { - var select = $document.elements('select[ng\\:model="$1"]', this.name); - var option = select.find('option[value="' + value + '"]'); - if (option.length) { - select.val(value); - } else { - option = select.find('option').filter(function(){ - return _jQuery(this).text() === value; - }); - if (!option.length) { - option = select.find('option:contains("' + value + '")'); - } - if (option.length) { - select.val(option.val()); - } else { - return done("option '" + value + "' not found"); - } - } - select.trigger('change'); - done(); - }); - }; - - chain.options = function() { - var values = arguments; - return this.addFutureAction("select '" + this.name + "' options '" + values + "'", - function($window, $document, done) { - var select = $document.elements('select[multiple][ng\\:model="$1"]', this.name); - select.val(values); - select.trigger('change'); - done(); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - -/** - * Usage: - * element(selector, label).count() get the number of elements that match selector - * element(selector, label).click() clicks an element - * element(selector, label).mouseover() mouseover an element - * element(selector, label).mousedown() mousedown an element - * element(selector, label).mouseup() mouseup an element - * element(selector, label).query(fn) executes fn(selectedElements, done) - * element(selector, label).{method}() gets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(value) sets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(key) gets the value (as defined by jQuery, ex. attr) - * element(selector, label).{method}(key, value) sets the value (as defined by jQuery, ex. attr) - */ -angular.scenario.dsl('element', function() { - var KEY_VALUE_METHODS = ['attr', 'css', 'prop']; - var VALUE_METHODS = [ - 'val', 'text', 'html', 'height', 'innerHeight', 'outerHeight', 'width', - 'innerWidth', 'outerWidth', 'position', 'scrollLeft', 'scrollTop', 'offset' - ]; - var chain = {}; - - chain.count = function() { - return this.addFutureAction("element '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.click = function() { - return this.addFutureAction("element '" + this.label + "' click", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('click')[0]; - - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.dblclick = function() { - return this.addFutureAction("element '" + this.label + "' dblclick", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('dblclick')[0]; - - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.mouseover = function() { - return this.addFutureAction("element '" + this.label + "' mouseover", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseover'); - done(); - }); - }; - - chain.mousedown = function() { - return this.addFutureAction("element '" + this.label + "' mousedown", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mousedown'); - done(); - }); - }; - - chain.mouseup = function() { - return this.addFutureAction("element '" + this.label + "' mouseup", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseup'); - done(); - }); - }; - - chain.query = function(fn) { - return this.addFutureAction('element ' + this.label + ' custom query', - function($window, $document, done) { - fn.call(this, $document.elements(), done); - }); - }; - - angular.forEach(KEY_VALUE_METHODS, function(methodName) { - chain[methodName] = function(name, value) { - var args = arguments, - futureName = (args.length == 1) - ? "element '" + this.label + "' get " + methodName + " '" + name + "'" - : "element '" + this.label + "' set " + methodName + " '" + name + "' to " + "'" + - value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - angular.forEach(VALUE_METHODS, function(methodName) { - chain[methodName] = function(value) { - var args = arguments, - futureName = (args.length === 0) - ? "element '" + this.label + "' " + methodName - : "element '" + this.label + "' set " + methodName + " to '" + value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Matchers for implementing specs. Follows the Jasmine spec conventions. - */ - -angular.scenario.matcher('toEqual', function(expected) { - return angular.equals(this.actual, expected); -}); - -angular.scenario.matcher('toBe', function(expected) { - return this.actual === expected; -}); - -angular.scenario.matcher('toBeDefined', function() { - return angular.isDefined(this.actual); -}); - -angular.scenario.matcher('toBeTruthy', function() { - return this.actual; -}); - -angular.scenario.matcher('toBeFalsy', function() { - return !this.actual; -}); - -angular.scenario.matcher('toMatch', function(expected) { - return new RegExp(expected).test(this.actual); -}); - -angular.scenario.matcher('toBeNull', function() { - return this.actual === null; -}); - -angular.scenario.matcher('toContain', function(expected) { - return includes(this.actual, expected); -}); - -angular.scenario.matcher('toBeLessThan', function(expected) { - return this.actual < expected; -}); - -angular.scenario.matcher('toBeGreaterThan', function(expected) { - return this.actual > expected; -}); - -/** - * User Interface for the Scenario Runner. - * - * TODO(esprehn): This should be refactored now that ObjectModel exists - * to use angular bindings for the UI. - */ -angular.scenario.output('html', function(context, runner, model) { - var specUiMap = {}, - lastStepUiMap = {}; - - context.append( - '<div id="header">' + - ' <h1><span class="angular">AngularJS</span>: Scenario Test Runner</h1>' + - ' <ul id="status-legend" class="status-display">' + - ' <li class="status-error">0 Errors</li>' + - ' <li class="status-failure">0 Failures</li>' + - ' <li class="status-success">0 Passed</li>' + - ' </ul>' + - '</div>' + - '<div id="specs">' + - ' <div class="test-children"></div>' + - '</div>' - ); - - runner.on('InteractivePause', function(spec) { - var ui = lastStepUiMap[spec.id]; - ui.find('.test-title'). - html('paused... <a href="javascript:resume()">resume</a> when ready.'); - }); - - runner.on('SpecBegin', function(spec) { - var ui = findContext(spec); - ui.find('> .tests').append( - '<li class="status-pending test-it"></li>' - ); - ui = ui.find('> .tests li:last'); - ui.append( - '<div class="test-info">' + - ' <p class="test-title">' + - ' <span class="timer-result"></span>' + - ' <span class="test-name"></span>' + - ' </p>' + - '</div>' + - '<div class="scrollpane">' + - ' <ol class="test-actions"></ol>' + - '</div>' - ); - ui.find('> .test-info .test-name').text(spec.name); - ui.find('> .test-info').click(function() { - var scrollpane = ui.find('> .scrollpane'); - var actions = scrollpane.find('> .test-actions'); - var name = context.find('> .test-info .test-name'); - if (actions.find(':visible').length) { - actions.hide(); - name.removeClass('open').addClass('closed'); - } else { - actions.show(); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - name.removeClass('closed').addClass('open'); - } - }); - - specUiMap[spec.id] = ui; - }); - - runner.on('SpecError', function(spec, error) { - var ui = specUiMap[spec.id]; - ui.append('<pre></pre>'); - ui.find('> pre').text(formatException(error)); - }); - - runner.on('SpecEnd', function(spec) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - ui.removeClass('status-pending'); - ui.addClass('status-' + spec.status); - ui.find("> .test-info .timer-result").text(spec.duration + "ms"); - if (spec.status === 'success') { - ui.find('> .test-info .test-name').addClass('closed'); - ui.find('> .scrollpane .test-actions').hide(); - } - updateTotals(spec.status); - }); - - runner.on('StepBegin', function(spec, step) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - ui.find('> .scrollpane .test-actions').append('<li class="status-pending"></li>'); - var stepUi = lastStepUiMap[spec.id] = ui.find('> .scrollpane .test-actions li:last'); - stepUi.append( - '<div class="timer-result"></div>' + - '<div class="test-title"></div>' - ); - stepUi.find('> .test-title').text(step.name); - var scrollpane = stepUi.parents('.scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - runner.on('StepFailure', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepError', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepEnd', function(spec, step) { - var stepUi = lastStepUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - stepUi.find('.timer-result').text(step.duration + 'ms'); - stepUi.removeClass('status-pending'); - stepUi.addClass('status-' + step.status); - var scrollpane = specUiMap[spec.id].find('> .scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - /** - * Finds the context of a spec block defined by the passed definition. - * - * @param {Object} The definition created by the Describe object. - */ - function findContext(spec) { - var currentContext = context.find('#specs'); - angular.forEach(model.getDefinitionPath(spec), function(defn) { - var id = 'describe-' + defn.id; - if (!context.find('#' + id).length) { - currentContext.find('> .test-children').append( - '<div class="test-describe" id="' + id + '">' + - ' <h2></h2>' + - ' <div class="test-children"></div>' + - ' <ul class="tests"></ul>' + - '</div>' - ); - context.find('#' + id).find('> h2').text('describe: ' + defn.name); - } - currentContext = context.find('#' + id); - }); - return context.find('#describe-' + spec.definition.id); - } - - /** - * Updates the test counter for the status. - * - * @param {string} the status. - */ - function updateTotals(status) { - var legend = context.find('#status-legend .status-' + status); - var parts = legend.text().split(' '); - var value = (parts[0] * 1) + 1; - legend.text(value + ' ' + parts[1]); - } - - /** - * Add an error to a step. - * - * @param {Object} The JQuery wrapped context - * @param {function()} fn() that should return the file/line number of the error - * @param {Object} the error. - */ - function addError(context, line, error) { - context.find('.test-title').append('<pre></pre>'); - var message = _jQuery.trim(line() + '\n\n' + formatException(error)); - context.find('.test-title pre:last').text(message); - } -}); - -/** - * Generates JSON output into a context. - */ -angular.scenario.output('json', function(context, runner, model) { - model.on('RunnerEnd', function() { - context.text(angular.toJson(model.value)); - }); -}); - -/** - * Generates XML output into a context. - */ -angular.scenario.output('xml', function(context, runner, model) { - var $ = function(args) {return new context.init(args);}; - model.on('RunnerEnd', function() { - var scenario = $('<scenario></scenario>'); - context.append(scenario); - serializeXml(scenario, model.value); - }); - - /** - * Convert the tree into XML. - * - * @param {Object} context jQuery context to add the XML to. - * @param {Object} tree node to serialize - */ - function serializeXml(context, tree) { - angular.forEach(tree.children, function(child) { - var describeContext = $('<describe></describe>'); - describeContext.attr('id', child.id); - describeContext.attr('name', child.name); - context.append(describeContext); - serializeXml(describeContext, child); - }); - var its = $('<its></its>'); - context.append(its); - angular.forEach(tree.specs, function(spec) { - var it = $('<it></it>'); - it.attr('id', spec.id); - it.attr('name', spec.name); - it.attr('duration', spec.duration); - it.attr('status', spec.status); - its.append(it); - angular.forEach(spec.steps, function(step) { - var stepContext = $('<step></step>'); - stepContext.attr('name', step.name); - stepContext.attr('duration', step.duration); - stepContext.attr('status', step.status); - it.append(stepContext); - if (step.error) { - var error = $('<error></error>'); - stepContext.append(error); - error.text(formatException(step.error)); - } - }); - }); - } -}); - -/** - * Creates a global value $result with the result of the runner. - */ -angular.scenario.output('object', function(context, runner, model) { - runner.$window.$result = model.value; -}); - -bindJQuery(); -publishExternalAPI(angular); - -var $runner = new angular.scenario.Runner(window), - scripts = document.getElementsByTagName('script'), - script = scripts[scripts.length - 1], - config = {}; - -angular.forEach(script.attributes, function(attr) { - var match = attr.name.match(/ng[:\-](.*)/); - if (match) { - config[match[1]] = attr.value || true; - } -}); - -if (config.autotest) { - JQLite(document).ready(function() { - angular.scenario.setUpAndRun(config); - }); -} -})(window, document); - - -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide {\n display: none !important;\n}\n\nng\\:form {\n display: block;\n}\n\n.ng-animate-block-transitions {\n transition:0s all!important;\n -webkit-transition:0s all!important;\n}\n</style>'); -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n/* CSS Document */\n\n/** Structure */\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n font-size: 14px;\n}\n\n#system-error {\n font-size: 1.5em;\n text-align: center;\n}\n\n#json, #xml {\n display: none;\n}\n\n#header {\n position: fixed;\n width: 100%;\n}\n\n#specs {\n padding-top: 50px;\n}\n\n#header .angular {\n font-family: Courier New, monospace;\n font-weight: bold;\n}\n\n#header h1 {\n font-weight: normal;\n float: left;\n font-size: 30px;\n line-height: 30px;\n margin: 0;\n padding: 10px 10px;\n height: 30px;\n}\n\n#application h2,\n#specs h2 {\n margin: 0;\n padding: 0.5em;\n font-size: 1.1em;\n}\n\n#status-legend {\n margin-top: 10px;\n margin-right: 10px;\n}\n\n#header,\n#application,\n.test-info,\n.test-actions li {\n overflow: hidden;\n}\n\n#application {\n margin: 10px;\n}\n\n#application iframe {\n width: 100%;\n height: 758px;\n}\n\n#application .popout {\n float: right;\n}\n\n#application iframe {\n border: none;\n}\n\n.tests li,\n.test-actions li,\n.test-it li,\n.test-it ol,\n.status-display {\n list-style-type: none;\n}\n\n.tests,\n.test-it ol,\n.status-display {\n margin: 0;\n padding: 0;\n}\n\n.test-info {\n margin-left: 1em;\n margin-top: 0.5em;\n border-radius: 8px 0 0 8px;\n -webkit-border-radius: 8px 0 0 8px;\n -moz-border-radius: 8px 0 0 8px;\n cursor: pointer;\n}\n\n.test-info:hover .test-name {\n text-decoration: underline;\n}\n\n.test-info .closed:before {\n content: \'\\25b8\\00A0\';\n}\n\n.test-info .open:before {\n content: \'\\25be\\00A0\';\n font-weight: bold;\n}\n\n.test-it ol {\n margin-left: 2.5em;\n}\n\n.status-display,\n.status-display li {\n float: right;\n}\n\n.status-display li {\n padding: 5px 10px;\n}\n\n.timer-result,\n.test-title {\n display: inline-block;\n margin: 0;\n padding: 4px;\n}\n\n.test-actions .test-title,\n.test-actions .test-result {\n display: table-cell;\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n.test-actions {\n display: table;\n}\n\n.test-actions li {\n display: table-row;\n}\n\n.timer-result {\n width: 4em;\n padding: 0 10px;\n text-align: right;\n font-family: monospace;\n}\n\n.test-it pre,\n.test-actions pre {\n clear: left;\n color: black;\n margin-left: 6em;\n}\n\n.test-describe {\n padding-bottom: 0.5em;\n}\n\n.test-describe .test-describe {\n margin: 5px 5px 10px 2em;\n}\n\n.test-actions .status-pending .test-title:before {\n content: \'\\00bb\\00A0\';\n}\n\n.scrollpane {\n max-height: 20em;\n overflow: auto;\n}\n\n/** Colors */\n\n#header {\n background-color: #F2C200;\n}\n\n#specs h2 {\n border-top: 2px solid #BABAD1;\n}\n\n#specs h2,\n#application h2 {\n background-color: #efefef;\n}\n\n#application {\n border: 1px solid #BABAD1;\n}\n\n.test-describe .test-describe {\n border-left: 1px solid #BABAD1;\n border-right: 1px solid #BABAD1;\n border-bottom: 1px solid #BABAD1;\n}\n\n.status-display {\n border: 1px solid #777;\n}\n\n.status-display .status-pending,\n.status-pending .test-info {\n background-color: #F9EEBC;\n}\n\n.status-display .status-success,\n.status-success .test-info {\n background-color: #B1D7A1;\n}\n\n.status-display .status-failure,\n.status-failure .test-info {\n background-color: #FF8286;\n}\n\n.status-display .status-error,\n.status-error .test-info {\n background-color: black;\n color: white;\n}\n\n.test-actions .status-success .test-title {\n color: #30B30A;\n}\n\n.test-actions .status-failure .test-title {\n color: #DF0000;\n}\n\n.test-actions .status-error .test-title {\n color: black;\n}\n\n.test-actions .timer-result {\n color: #888;\n}\n</style>'); \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-scenario/bower.json b/platforms/browser/www/lib/angular-scenario/bower.json deleted file mode 100644 index 0949da7a..00000000 --- a/platforms/browser/www/lib/angular-scenario/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.2.16", - "main": "./angular-scenario.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter-config.js b/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter-config.js deleted file mode 100644 index 5147ab34..00000000 --- a/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter-config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Configuration for jstd scenario adapter - */ -var jstdScenarioAdapter = { - relativeUrlPrefix: '/build/docs/' -}; diff --git a/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter.js b/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter.js deleted file mode 100644 index f65afd90..00000000 --- a/platforms/browser/www/lib/angular-scenario/jstd-scenario-adapter.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @license AngularJS v1.0.4 - * (c) 2010-2012 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window) { -'use strict'; - -/** - * JSTestDriver adapter for angular scenario tests - * - * Example of jsTestDriver.conf for running scenario tests with JSTD: - <pre> - server: http://localhost:9877 - - load: - - lib/angular-scenario.js - - lib/jstd-scenario-adapter-config.js - - lib/jstd-scenario-adapter.js - # your test files go here # - - proxy: - - {matcher: "/your-prefix/*", server: "http://localhost:8000/"} - </pre> - * - * For more information on how to configure jstd proxy, see {@link http://code.google.com/p/js-test-driver/wiki/Proxy} - * Note the order of files - it's important ! - * - * Example of jstd-scenario-adapter-config.js - <pre> - var jstdScenarioAdapter = { - relativeUrlPrefix: '/your-prefix/' - }; - </pre> - * - * Whenever you use <code>browser().navigateTo('relativeUrl')</code> in your scenario test, the relativeUrlPrefix will be prepended. - * You have to configure this to work together with JSTD proxy. - * - * Let's assume you are using the above configuration (jsTestDriver.conf and jstd-scenario-adapter-config.js): - * Now, when you call <code>browser().navigateTo('index.html')</code> in your scenario test, the browser will open /your-prefix/index.html. - * That matches the proxy, so JSTD will proxy this request to http://localhost:8000/index.html. - */ - -/** - * Custom type of test case - * - * @const - * @see jstestdriver.TestCaseInfo - */ -var SCENARIO_TYPE = 'scenario'; - -/** - * Plugin for JSTestDriver - * Connection point between scenario's jstd output and jstestdriver. - * - * @see jstestdriver.PluginRegistrar - */ -function JstdPlugin() { - var nop = function() {}; - - this.reportResult = nop; - this.reportEnd = nop; - this.runScenario = nop; - - this.name = 'Angular Scenario Adapter'; - - /** - * Called for each JSTD TestCase - * - * Handles only SCENARIO_TYPE test cases. There should be only one fake TestCase. - * Runs all scenario tests (under one fake TestCase) and report all results to JSTD. - * - * @param {jstestdriver.TestRunConfiguration} configuration - * @param {Function} onTestDone - * @param {Function} onAllTestsComplete - * @returns {boolean} True if this type of test is handled by this plugin, false otherwise - */ - this.runTestConfiguration = function(configuration, onTestDone, onAllTestsComplete) { - if (configuration.getTestCaseInfo().getType() != SCENARIO_TYPE) return false; - - this.reportResult = onTestDone; - this.reportEnd = onAllTestsComplete; - this.runScenario(); - - return true; - }; - - this.getTestRunsConfigurationFor = function(testCaseInfos, expressions, testRunsConfiguration) { - testRunsConfiguration.push( - new jstestdriver.TestRunConfiguration( - new jstestdriver.TestCaseInfo( - 'Angular Scenario Tests', function() {}, SCENARIO_TYPE), [])); - - return true; - }; -} - -/** - * Singleton instance of the plugin - * Accessed using closure by: - * - jstd output (reports to this plugin) - * - initScenarioAdapter (register the plugin to jstd) - */ -var plugin = new JstdPlugin(); - -/** - * Initialise scenario jstd-adapter - * (only if jstestdriver is defined) - * - * @param {Object} jstestdriver Undefined when run from browser (without jstd) - * @param {Function} initScenarioAndRun Function that inits scenario and runs all the tests - * @param {Object=} config Configuration object, supported properties: - * - relativeUrlPrefix: prefix for all relative links when navigateTo() - */ -function initScenarioAdapter(jstestdriver, initScenarioAndRun, config) { - if (jstestdriver) { - // create and register ScenarioPlugin - jstestdriver.pluginRegistrar.register(plugin); - plugin.runScenario = initScenarioAndRun; - - /** - * HACK (angular.scenario.Application.navigateTo) - * - * We need to navigate to relative urls when running from browser (without JSTD), - * because we want to allow running scenario tests without creating its own virtual host. - * For example: http://angular.local/build/docs/docs-scenario.html - * - * On the other hand, when running with JSTD, we need to navigate to absolute urls, - * because of JSTD proxy. (proxy, because of same domain policy) - * - * So this hack is applied only if running with JSTD and change all relative urls to absolute. - */ - var appProto = angular.scenario.Application.prototype, - navigateTo = appProto.navigateTo, - relativeUrlPrefix = config && config.relativeUrlPrefix || '/'; - - appProto.navigateTo = function(url, loadFn, errorFn) { - if (url.charAt(0) != '/' && url.charAt(0) != '#' && - url != 'about:blank' && !url.match(/^https?/)) { - url = relativeUrlPrefix + url; - } - - return navigateTo.call(this, url, loadFn, errorFn); - }; - } -} - -/** - * Builds proper TestResult object from given model spec - * - * TODO(vojta) report error details - * - * @param {angular.scenario.ObjectModel.Spec} spec - * @returns {jstestdriver.TestResult} - */ -function createTestResultFromSpec(spec) { - var map = { - success: 'PASSED', - error: 'ERROR', - failure: 'FAILED' - }; - - return new jstestdriver.TestResult( - spec.fullDefinitionName, - spec.name, - jstestdriver.TestResult.RESULT[map[spec.status]], - spec.error || '', - spec.line || '', - spec.duration); -} - -/** - * Generates JSTD output (jstestdriver.TestResult) - */ -angular.scenario.output('jstd', function(context, runner, model) { - model.on('SpecEnd', function(spec) { - plugin.reportResult(createTestResultFromSpec(spec)); - }); - - model.on('RunnerEnd', function() { - plugin.reportEnd(); - }); -}); -initScenarioAdapter(window.jstestdriver, angular.scenario.setUpAndRun, window.jstdScenarioAdapter); -})(window); diff --git a/platforms/browser/www/lib/angular-touch/.bower.json b/platforms/browser/www/lib/angular-touch/.bower.json deleted file mode 100644 index b8643cc0..00000000 --- a/platforms/browser/www/lib/angular-touch/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "angular-touch", - "version": "1.2.16", - "main": "./angular-touch.js", - "dependencies": { - "angular": "1.2.16" - }, - "homepage": "https://github.com/angular/bower-angular-touch", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "877473e33d5b51052dc3335899c20a49a909932b" - }, - "_source": "git://github.com/angular/bower-angular-touch.git", - "_target": "1.2.16", - "_originalSource": "angular-touch" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular-touch/README.md b/platforms/browser/www/lib/angular-touch/README.md deleted file mode 100644 index 0939eb04..00000000 --- a/platforms/browser/www/lib/angular-touch/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# bower-angular-touch - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngTouch). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular-touch -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-touch/angular-touch.js"></script> -``` - -And add `ngTouch` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngTouch']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngTouch). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular-touch/angular-touch.js b/platforms/browser/www/lib/angular-touch/angular-touch.js deleted file mode 100644 index 4157f2aa..00000000 --- a/platforms/browser/www/lib/angular-touch/angular-touch.js +++ /dev/null @@ -1,575 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngTouch - * @description - * - * # ngTouch - * - * The `ngTouch` module provides touch events and other helpers for touch-enabled devices. - * The implementation is based on jQuery Mobile touch event handling - * ([jquerymobile.com](http://jquerymobile.com/)). - * - * - * See {@link ngTouch.$swipe `$swipe`} for usage. - * - * <div doc-module-components="ngTouch"></div> - * - */ - -// define ngTouch module -/* global -ngTouch */ -var ngTouch = angular.module('ngTouch', []); - -/* global ngTouch: false */ - - /** - * @ngdoc service - * @name $swipe - * - * @description - * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe - * behavior, to make implementing swipe-related directives more convenient. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by - * `ngCarousel` in a separate component. - * - * # Usage - * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element - * which is to be watched for swipes, and an object with four handler functions. See the - * documentation for `bind` below. - */ - -ngTouch.factory('$swipe', [function() { - // The total distance in any direction before we make the call on swipe vs. scroll. - var MOVE_BUFFER_RADIUS = 10; - - function getCoordinates(event) { - var touches = event.touches && event.touches.length ? event.touches : [event]; - var e = (event.changedTouches && event.changedTouches[0]) || - (event.originalEvent && event.originalEvent.changedTouches && - event.originalEvent.changedTouches[0]) || - touches[0].originalEvent || touches[0]; - - return { - x: e.clientX, - y: e.clientY - }; - } - - return { - /** - * @ngdoc method - * @name $swipe#bind - * - * @description - * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an - * object containing event handlers. - * - * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end` - * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`. - * - * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is - * watching for `touchmove` or `mousemove` events. These events are ignored until the total - * distance moved in either dimension exceeds a small threshold. - * - * Once this threshold is exceeded, either the horizontal or vertical delta is greater. - * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow. - * - If the vertical distance is greater, this is a scroll, and we let the browser take over. - * A `cancel` event is sent. - * - * `move` is called on `mousemove` and `touchmove` after the above logic has determined that - * a swipe is in progress. - * - * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`. - * - * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling - * as described above. - * - */ - bind: function(element, eventHandlers) { - // Absolute total movement, used to control swipe vs. scroll. - var totalX, totalY; - // Coordinates of the start position. - var startCoords; - // Last event's position. - var lastPos; - // Whether a swipe is active. - var active = false; - - element.on('touchstart mousedown', function(event) { - startCoords = getCoordinates(event); - active = true; - totalX = 0; - totalY = 0; - lastPos = startCoords; - eventHandlers['start'] && eventHandlers['start'](startCoords, event); - }); - - element.on('touchcancel', function(event) { - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - }); - - element.on('touchmove mousemove', function(event) { - if (!active) return; - - // Android will send a touchcancel if it thinks we're starting to scroll. - // So when the total distance (+ or - or both) exceeds 10px in either direction, - // we either: - // - On totalX > totalY, we send preventDefault() and treat this as a swipe. - // - On totalY > totalX, we let the browser handle it as a scroll. - - if (!startCoords) return; - var coords = getCoordinates(event); - - totalX += Math.abs(coords.x - lastPos.x); - totalY += Math.abs(coords.y - lastPos.y); - - lastPos = coords; - - if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) { - return; - } - - // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll. - if (totalY > totalX) { - // Allow native scrolling to take over. - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - return; - } else { - // Prevent the browser from scrolling. - event.preventDefault(); - eventHandlers['move'] && eventHandlers['move'](coords, event); - } - }); - - element.on('touchend mouseup', function(event) { - if (!active) return; - active = false; - eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event); - }); - } - }; -}]); - -/* global ngTouch: false */ - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * A more powerful replacement for the default ngClick designed to be used on touchscreen - * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending - * the click event. This version handles them immediately, and then prevents the - * following click event from propagating. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * This directive can fall back to using an ordinary click event, and so works on desktop - * browsers as well as mobile. - * - * This directive also sets the CSS class `ng-click-active` while the element is being held - * down (by a mouse click or touch) so you can restyle the depressed element if you wish. - * - * @element ANY - * @param {expression} ngClick {@link guide/expression Expression} to evaluate - * upon tap. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{ count }} - </file> - </example> - */ - -ngTouch.config(['$provide', function($provide) { - $provide.decorator('ngClickDirective', ['$delegate', function($delegate) { - // drop the default ngClick directive - $delegate.shift(); - return $delegate; - }]); -}]); - -ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', - function($parse, $timeout, $rootElement) { - var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag. - var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers. - var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click - var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks. - - var ACTIVE_CLASS_NAME = 'ng-click-active'; - var lastPreventedTime; - var touchCoordinates; - var lastLabelClickCoordinates; - - - // TAP EVENTS AND GHOST CLICKS - // - // Why tap events? - // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're - // double-tapping, and then fire a click event. - // - // This delay sucks and makes mobile apps feel unresponsive. - // So we detect touchstart, touchmove, touchcancel and touchend ourselves and determine when - // the user has tapped on something. - // - // What happens when the browser then generates a click event? - // The browser, of course, also detects the tap and fires a click after a delay. This results in - // tapping/clicking twice. So we do "clickbusting" to prevent it. - // - // How does it work? - // We attach global touchstart and click handlers, that run during the capture (early) phase. - // So the sequence for a tap is: - // - global touchstart: Sets an "allowable region" at the point touched. - // - element's touchstart: Starts a touch - // (- touchmove or touchcancel ends the touch, no click follows) - // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold - // too long) and fires the user's tap handler. The touchend also calls preventGhostClick(). - // - preventGhostClick() removes the allowable region the global touchstart created. - // - The browser generates a click event. - // - The global click handler catches the click, and checks whether it was in an allowable region. - // - If preventGhostClick was called, the region will have been removed, the click is busted. - // - If the region is still there, the click proceeds normally. Therefore clicks on links and - // other elements without ngTap on them work normally. - // - // This is an ugly, terrible hack! - // Yeah, tell me about it. The alternatives are using the slow click events, or making our users - // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular - // encapsulates this ugly logic away from the user. - // - // Why not just put click handlers on the element? - // We do that too, just to be sure. The problem is that the tap event might have caused the DOM - // to change, so that the click fires in the same position but something else is there now. So - // the handlers are global and care only about coordinates and not elements. - - // Checks if the coordinates are close enough to be within the region. - function hit(x1, y1, x2, y2) { - return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD; - } - - // Checks a list of allowable regions against a click location. - // Returns true if the click should be allowed. - // Splices out the allowable region from the list after it has been used. - function checkAllowableRegions(touchCoordinates, x, y) { - for (var i = 0; i < touchCoordinates.length; i += 2) { - if (hit(touchCoordinates[i], touchCoordinates[i+1], x, y)) { - touchCoordinates.splice(i, i + 2); - return true; // allowable region - } - } - return false; // No allowable region; bust it. - } - - // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick - // was called recently. - function onClick(event) { - if (Date.now() - lastPreventedTime > PREVENT_DURATION) { - return; // Too old. - } - - var touches = event.touches && event.touches.length ? event.touches : [event]; - var x = touches[0].clientX; - var y = touches[0].clientY; - // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label - // and on the input element). Depending on the exact browser, this second click we don't want - // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label - // click event - if (x < 1 && y < 1) { - return; // offscreen - } - if (lastLabelClickCoordinates && - lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) { - return; // input click triggered by label click - } - // reset label click coordinates on first subsequent click - if (lastLabelClickCoordinates) { - lastLabelClickCoordinates = null; - } - // remember label click coordinates to prevent click busting of trigger click event on input - if (event.target.tagName.toLowerCase() === 'label') { - lastLabelClickCoordinates = [x, y]; - } - - // Look for an allowable region containing this click. - // If we find one, that means it was created by touchstart and not removed by - // preventGhostClick, so we don't bust it. - if (checkAllowableRegions(touchCoordinates, x, y)) { - return; - } - - // If we didn't find an allowable region, bust the click. - event.stopPropagation(); - event.preventDefault(); - - // Blur focused form elements - event.target && event.target.blur(); - } - - - // Global touchstart handler that creates an allowable region for a click event. - // This allowable region can be removed by preventGhostClick if we want to bust it. - function onTouchStart(event) { - var touches = event.touches && event.touches.length ? event.touches : [event]; - var x = touches[0].clientX; - var y = touches[0].clientY; - touchCoordinates.push(x, y); - - $timeout(function() { - // Remove the allowable region. - for (var i = 0; i < touchCoordinates.length; i += 2) { - if (touchCoordinates[i] == x && touchCoordinates[i+1] == y) { - touchCoordinates.splice(i, i + 2); - return; - } - } - }, PREVENT_DURATION, false); - } - - // On the first call, attaches some event handlers. Then whenever it gets called, it creates a - // zone around the touchstart where clicks will get busted. - function preventGhostClick(x, y) { - if (!touchCoordinates) { - $rootElement[0].addEventListener('click', onClick, true); - $rootElement[0].addEventListener('touchstart', onTouchStart, true); - touchCoordinates = []; - } - - lastPreventedTime = Date.now(); - - checkAllowableRegions(touchCoordinates, x, y); - } - - // Actual linking function. - return function(scope, element, attr) { - var clickHandler = $parse(attr.ngClick), - tapping = false, - tapElement, // Used to blur the element after a tap. - startTime, // Used to check if the tap was held too long. - touchStartX, - touchStartY; - - function resetState() { - tapping = false; - element.removeClass(ACTIVE_CLASS_NAME); - } - - element.on('touchstart', function(event) { - tapping = true; - tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement. - // Hack for Safari, which can target text nodes instead of containers. - if(tapElement.nodeType == 3) { - tapElement = tapElement.parentNode; - } - - element.addClass(ACTIVE_CLASS_NAME); - - startTime = Date.now(); - - var touches = event.touches && event.touches.length ? event.touches : [event]; - var e = touches[0].originalEvent || touches[0]; - touchStartX = e.clientX; - touchStartY = e.clientY; - }); - - element.on('touchmove', function(event) { - resetState(); - }); - - element.on('touchcancel', function(event) { - resetState(); - }); - - element.on('touchend', function(event) { - var diff = Date.now() - startTime; - - var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches : - ((event.touches && event.touches.length) ? event.touches : [event]); - var e = touches[0].originalEvent || touches[0]; - var x = e.clientX; - var y = e.clientY; - var dist = Math.sqrt( Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2) ); - - if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) { - // Call preventGhostClick so the clickbuster will catch the corresponding click. - preventGhostClick(x, y); - - // Blur the focused element (the button, probably) before firing the callback. - // This doesn't work perfectly on Android Chrome, but seems to work elsewhere. - // I couldn't get anything to work reliably on Android Chrome. - if (tapElement) { - tapElement.blur(); - } - - if (!angular.isDefined(attr.disabled) || attr.disabled === false) { - element.triggerHandler('click', [event]); - } - } - - resetState(); - }); - - // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click - // something else nearby. - element.onclick = function(event) { }; - - // Actual click handler. - // There are three different kinds of clicks, only two of which reach this point. - // - On desktop browsers without touch events, their clicks will always come here. - // - On mobile browsers, the simulated "fast" click will call this. - // - But the browser's follow-up slow click will be "busted" before it reaches this handler. - // Therefore it's safe to use this directive on both mobile and desktop. - element.on('click', function(event, touchend) { - scope.$apply(function() { - clickHandler(scope, {$event: (touchend || event)}); - }); - }); - - element.on('mousedown', function(event) { - element.addClass(ACTIVE_CLASS_NAME); - }); - - element.on('mousemove mouseup', function(event) { - element.removeClass(ACTIVE_CLASS_NAME); - }); - - }; -}]); - -/* global ngTouch: false */ - -/** - * @ngdoc directive - * @name ngSwipeLeft - * - * @description - * Specify custom behavior when an element is swiped to the left on a touchscreen device. - * A leftward swipe is a quick, right-to-left slide of the finger. - * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag - * too. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * @element ANY - * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate - * upon left swipe. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <div ng-show="!showActions" ng-swipe-left="showActions = true"> - Some list content, like an email in the inbox - </div> - <div ng-show="showActions" ng-swipe-right="showActions = false"> - <button ng-click="reply()">Reply</button> - <button ng-click="delete()">Delete</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSwipeRight - * - * @description - * Specify custom behavior when an element is swiped to the right on a touchscreen device. - * A rightward swipe is a quick, left-to-right slide of the finger. - * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag - * too. - * - * Requires the {@link ngTouch `ngTouch`} module to be installed. - * - * @element ANY - * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate - * upon right swipe. (Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <div ng-show="!showActions" ng-swipe-left="showActions = true"> - Some list content, like an email in the inbox - </div> - <div ng-show="showActions" ng-swipe-right="showActions = false"> - <button ng-click="reply()">Reply</button> - <button ng-click="delete()">Delete</button> - </div> - </file> - </example> - */ - -function makeSwipeDirective(directiveName, direction, eventName) { - ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) { - // The maximum vertical delta for a swipe should be less than 75px. - var MAX_VERTICAL_DISTANCE = 75; - // Vertical distance should not be more than a fraction of the horizontal distance. - var MAX_VERTICAL_RATIO = 0.3; - // At least a 30px lateral motion is necessary for a swipe. - var MIN_HORIZONTAL_DISTANCE = 30; - - return function(scope, element, attr) { - var swipeHandler = $parse(attr[directiveName]); - - var startCoords, valid; - - function validSwipe(coords) { - // Check that it's within the coordinates. - // Absolute vertical distance must be within tolerances. - // Horizontal distance, we take the current X - the starting X. - // This is negative for leftward swipes and positive for rightward swipes. - // After multiplying by the direction (-1 for left, +1 for right), legal swipes - // (ie. same direction as the directive wants) will have a positive delta and - // illegal ones a negative delta. - // Therefore this delta must be positive, and larger than the minimum. - if (!startCoords) return false; - var deltaY = Math.abs(coords.y - startCoords.y); - var deltaX = (coords.x - startCoords.x) * direction; - return valid && // Short circuit for already-invalidated swipes. - deltaY < MAX_VERTICAL_DISTANCE && - deltaX > 0 && - deltaX > MIN_HORIZONTAL_DISTANCE && - deltaY / deltaX < MAX_VERTICAL_RATIO; - } - - $swipe.bind(element, { - 'start': function(coords, event) { - startCoords = coords; - valid = true; - }, - 'cancel': function(event) { - valid = false; - }, - 'end': function(coords, event) { - if (validSwipe(coords)) { - scope.$apply(function() { - element.triggerHandler(eventName); - swipeHandler(scope, {$event: event}); - }); - } - } - }); - }; - }]); -} - -// Left is negative X-coordinate, right is positive. -makeSwipeDirective('ngSwipeLeft', -1, 'swipeleft'); -makeSwipeDirective('ngSwipeRight', 1, 'swiperight'); - - - -})(window, window.angular); diff --git a/platforms/browser/www/lib/angular-touch/angular-touch.min.js b/platforms/browser/www/lib/angular-touch/angular-touch.min.js deleted file mode 100644 index 6ec92ed4..00000000 --- a/platforms/browser/www/lib/angular-touch/angular-touch.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(y,w,z){'use strict';function u(f,a,c){r.directive(f,["$parse","$swipe",function(m,p){var q=75,g=0.3,e=30;return function(h,n,l){function k(d){if(!b)return!1;var s=Math.abs(d.y-b.y);d=(d.x-b.x)*a;return v&&s<q&&0<d&&d>e&&s/d<g}var s=m(l[f]),b,v;p.bind(n,{start:function(d,s){b=d;v=!0},cancel:function(b){v=!1},end:function(b,a){k(b)&&h.$apply(function(){n.triggerHandler(c);s(h,{$event:a})})}})}}])}var r=w.module("ngTouch",[]);r.factory("$swipe",[function(){function f(a){var c=a.touches&&a.touches.length? -a.touches:[a];a=a.changedTouches&&a.changedTouches[0]||a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0]||c[0].originalEvent||c[0];return{x:a.clientX,y:a.clientY}}return{bind:function(a,c){var m,p,q,g,e=!1;a.on("touchstart mousedown",function(a){q=f(a);e=!0;p=m=0;g=q;c.start&&c.start(q,a)});a.on("touchcancel",function(a){e=!1;c.cancel&&c.cancel(a)});a.on("touchmove mousemove",function(a){if(e&&q){var n=f(a);m+=Math.abs(n.x-g.x);p+=Math.abs(n.y-g.y);g=n;10>m&&10>p|| -(p>m?(e=!1,c.cancel&&c.cancel(a)):(a.preventDefault(),c.move&&c.move(n,a)))}});a.on("touchend mouseup",function(a){e&&(e=!1,c.end&&c.end(f(a),a))})}}}]);r.config(["$provide",function(f){f.decorator("ngClickDirective",["$delegate",function(a){a.shift();return a}])}]);r.directive("ngClick",["$parse","$timeout","$rootElement",function(f,a,c){function m(a,b,c){for(var d=0;d<a.length;d+=2)if(Math.abs(a[d]-b)<e&&Math.abs(a[d+1]-c)<e)return a.splice(d,d+2),!0;return!1}function p(a){if(!(Date.now()-n>g)){var b= -a.touches&&a.touches.length?a.touches:[a],c=b[0].clientX,b=b[0].clientY;1>c&&1>b||k&&k[0]===c&&k[1]===b||(k&&(k=null),"label"===a.target.tagName.toLowerCase()&&(k=[c,b]),m(l,c,b)||(a.stopPropagation(),a.preventDefault(),a.target&&a.target.blur()))}}function q(c){c=c.touches&&c.touches.length?c.touches:[c];var b=c[0].clientX,e=c[0].clientY;l.push(b,e);a(function(){for(var a=0;a<l.length;a+=2)if(l[a]==b&&l[a+1]==e){l.splice(a,a+2);break}},g,!1)}var g=2500,e=25,h="ng-click-active",n,l,k;return function(a, -b,e){function d(){k=!1;b.removeClass(h)}var g=f(e.ngClick),k=!1,t,r,u,x;b.on("touchstart",function(a){k=!0;t=a.target?a.target:a.srcElement;3==t.nodeType&&(t=t.parentNode);b.addClass(h);r=Date.now();a=a.touches&&a.touches.length?a.touches:[a];a=a[0].originalEvent||a[0];u=a.clientX;x=a.clientY});b.on("touchmove",function(a){d()});b.on("touchcancel",function(a){d()});b.on("touchend",function(a){var g=Date.now()-r,f=a.changedTouches&&a.changedTouches.length?a.changedTouches:a.touches&&a.touches.length? -a.touches:[a],h=f[0].originalEvent||f[0],f=h.clientX,h=h.clientY,s=Math.sqrt(Math.pow(f-u,2)+Math.pow(h-x,2));k&&(750>g&&12>s)&&(l||(c[0].addEventListener("click",p,!0),c[0].addEventListener("touchstart",q,!0),l=[]),n=Date.now(),m(l,f,h),t&&t.blur(),w.isDefined(e.disabled)&&!1!==e.disabled||b.triggerHandler("click",[a]));d()});b.onclick=function(a){};b.on("click",function(b,c){a.$apply(function(){g(a,{$event:c||b})})});b.on("mousedown",function(a){b.addClass(h)});b.on("mousemove mouseup",function(a){b.removeClass(h)})}}]); -u("ngSwipeLeft",-1,"swipeleft");u("ngSwipeRight",1,"swiperight")})(window,window.angular); -//# sourceMappingURL=angular-touch.min.js.map diff --git a/platforms/browser/www/lib/angular-touch/angular-touch.min.js.map b/platforms/browser/www/lib/angular-touch/angular-touch.min.js.map deleted file mode 100644 index d599b934..00000000 --- a/platforms/browser/www/lib/angular-touch/angular-touch.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-touch.min.js", -"lineCount":12, -"mappings":"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", -"sources":["angular-touch.js"], -"names":["window","angular","undefined","makeSwipeDirective","directiveName","direction","eventName","ngTouch","directive","$parse","$swipe","MAX_VERTICAL_DISTANCE","MAX_VERTICAL_RATIO","MIN_HORIZONTAL_DISTANCE","scope","element","attr","validSwipe","coords","startCoords","deltaY","Math","abs","y","deltaX","x","valid","swipeHandler","bind","start","event","cancel","end","$apply","triggerHandler","module","factory","getCoordinates","touches","length","e","changedTouches","originalEvent","clientX","clientY","eventHandlers","totalX","totalY","lastPos","active","on","MOVE_BUFFER_RADIUS","preventDefault","config","$provide","decorator","$delegate","shift","$timeout","$rootElement","checkAllowableRegions","touchCoordinates","i","x1","CLICKBUSTER_THRESHOLD","y1","splice","onClick","Date","now","lastPreventedTime","PREVENT_DURATION","lastLabelClickCoordinates","target","tagName","toLowerCase","stopPropagation","blur","onTouchStart","push","ACTIVE_CLASS_NAME","resetState","tapping","removeClass","clickHandler","ngClick","tapElement","startTime","touchStartX","touchStartY","srcElement","nodeType","parentNode","addClass","diff","dist","sqrt","pow","TAP_DURATION","MOVE_TOLERANCE","addEventListener","isDefined","disabled","onclick","element.onclick","touchend"] -} diff --git a/platforms/browser/www/lib/angular-touch/bower.json b/platforms/browser/www/lib/angular-touch/bower.json deleted file mode 100644 index 9cdeb22a..00000000 --- a/platforms/browser/www/lib/angular-touch/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-touch", - "version": "1.2.16", - "main": "./angular-touch.js", - "dependencies": { - "angular": "1.2.16" - } -} diff --git a/platforms/browser/www/lib/angular/.bower.json b/platforms/browser/www/lib/angular/.bower.json deleted file mode 100644 index 8c166490..00000000 --- a/platforms/browser/www/lib/angular/.bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "angular", - "version": "1.2.16", - "main": "./angular.js", - "dependencies": {}, - "homepage": "https://github.com/angular/bower-angular", - "_release": "1.2.16", - "_resolution": { - "type": "version", - "tag": "v1.2.16", - "commit": "7ae38b4a0cfced157e3486a0d6e2d299601723bb" - }, - "_source": "git://github.com/angular/bower-angular.git", - "_target": "1.2.16", - "_originalSource": "angular" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/angular/README.md b/platforms/browser/www/lib/angular/README.md deleted file mode 100644 index fc0c0998..00000000 --- a/platforms/browser/www/lib/angular/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# bower-angular - -This repo is for distribution on `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js). -Please file issues and pull requests against that repo. - -## Install - -Install with `bower`: - -```shell -bower install angular -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular/angular.js"></script> -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/angular/angular-csp.css b/platforms/browser/www/lib/angular/angular-csp.css deleted file mode 100644 index 0d3d3a9a..00000000 --- a/platforms/browser/www/lib/angular/angular-csp.css +++ /dev/null @@ -1,18 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], -.ng-cloak, .x-ng-cloak, -.ng-hide { - display: none !important; -} - -ng\:form { - display: block; -} - -.ng-animate-block-transitions { - transition:0s all!important; - -webkit-transition:0s all!important; -} diff --git a/platforms/browser/www/lib/angular/angular.js b/platforms/browser/www/lib/angular/angular.js deleted file mode 100644 index 2f26beed..00000000 --- a/platforms/browser/www/lib/angular/angular.js +++ /dev/null @@ -1,21464 +0,0 @@ -/** - * @license AngularJS v1.2.16 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document, undefined) {'use strict'; - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module) { - return function () { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - stringify = function (obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return JSON.stringify(obj); - } - return obj; - }, - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function (match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - arg = templateArgs[index + 2]; - if (typeof arg === 'function') { - return arg.toString().replace(/ ?\{[\s\S]*$/, ''); - } else if (typeof arg === 'undefined') { - return 'undefined'; - } else if (typeof arg !== 'string') { - return toJson(arg); - } - return arg; - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.2.16/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + - encodeURIComponent(stringify(arguments[i])); - } - - return new Error(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global - -angular, - -msie, - -jqLite, - -jQuery, - -slice, - -push, - -toString, - -ngMinErr, - -_angular, - -angularModule, - -nodeName_, - -uid, - - -lowercase, - -uppercase, - -manualLowercase, - -manualUppercase, - -nodeName_, - -isArrayLike, - -forEach, - -sortedKeys, - -forEachSorted, - -reverseParams, - -nextUid, - -setHashKey, - -extend, - -int, - -inherit, - -noop, - -identity, - -valueFn, - -isUndefined, - -isDefined, - -isObject, - -isString, - -isNumber, - -isDate, - -isArray, - -isFunction, - -isRegExp, - -isWindow, - -isScope, - -isFile, - -isBlob, - -isBoolean, - -trim, - -isElement, - -makeMap, - -map, - -size, - -includes, - -indexOf, - -arrayRemove, - -isLeafNode, - -copy, - -shallowCopy, - -equals, - -csp, - -concat, - -sliceArgs, - -bind, - -toJsonReplacer, - -toJson, - -fromJson, - -toBoolean, - -startingTag, - -tryDecodeURIComponent, - -parseKeyValue, - -toKeyValue, - -encodeUriSegment, - -encodeUriQuery, - -angularInit, - -bootstrap, - -snake_case, - -bindJQuery, - -assertArg, - -assertArgFn, - -assertNotHasOwnProperty, - -getter, - -getBlockElements, - -hasOwnProperty, - -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var /** holds major version number for IE or NaN for real browsers */ - msie, - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - - _angular = window.angular, - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - nodeName_, - uid = ['0', '0', '0']; - -/** - * IE 11 changed the format of the UserAgent string. - * See http://msdn.microsoft.com/en-us/library/ms537503.aspx - */ -msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -if (isNaN(msie)) { - msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); -} - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === 1 && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` - * is the value of an object property or an array element and `key` is the object property key or - * array element index. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key){ - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ -function forEach(obj, iterator, context) { - var key; - if (obj) { - if (isFunction(obj)){ - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context); - } else if (isArrayLike(obj)) { - for (key = 0; key < obj.length; key++) - iterator.call(context, obj[key], key); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys.sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for ( var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric - * characters such as '012ABC'. The reason why we are not using simply a number counter is that - * the number string gets longer over time, and it can also overflow, where as the nextId - * will grow much slower, it is a string, and it will never overflow. - * - * @returns {string} an unique alpha-numeric string - */ -function nextUid() { - var index = uid.length; - var digit; - - while(index) { - index--; - digit = uid[index].charCodeAt(0); - if (digit == 57 /*'9'*/) { - uid[index] = 'A'; - return uid.join(''); - } - if (digit == 90 /*'Z'*/) { - uid[index] = '0'; - } else { - uid[index] = String.fromCharCode(digit + 1); - return uid.join(''); - } - } - uid.unshift('0'); - return uid.join(''); -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @function - * - * @description - * Extends the destination object `dst` by copying all of the properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - forEach(arguments, function(obj){ - if (obj !== dst) { - forEach(obj, function(value, key){ - dst[key] = value; - }); - } - }); - - setHashKey(dst,h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(new (extend(function() {}, {prototype:parent}))(), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value){return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value){return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value){return value != null && typeof value === 'object';} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value){return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value){return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value){ - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(value) { - return toString.call(value) === '[object Array]'; -} - - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value){return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -var trim = (function() { - // native trim is way faster: http://jsperf.com/angular-trim-test - // but IE doesn't have it... :-( - // TODO: we should move this into IE/ES5 polyfill - if (!String.prototype.trim) { - return function(value) { - return isString(value) ? value.replace(/^\s\s*/, '').replace(/\s\s*$/, '') : value; - }; - } - return function(value) { - return isString(value) ? value.trim() : value; - }; -})(); - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str){ - var obj = {}, items = str.split(","), i; - for ( i = 0; i < items.length; i++ ) - obj[ items[i] ] = true; - return obj; -} - - -if (msie < 9) { - nodeName_ = function(element) { - element = element.nodeName ? element : element[0]; - return (element.scopeName && element.scopeName != 'HTML') - ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; - }; -} else { - nodeName_ = function(element) { - return element.nodeName ? element.nodeName : element[0].nodeName; - }; -} - - -function map(obj, iterator, context) { - var results = []; - forEach(obj, function(value, index, list) { - results.push(iterator.call(context, value, index, list)); - }); - return results; -} - - -/** - * @description - * Determines the number of elements in an array, the number of properties an object has, or - * the length of a string. - * - * Note: This function is used to augment the Object type in Angular expressions. See - * {@link angular.Object} for more information about Angular arrays. - * - * @param {Object|Array|string} obj Object, array, or string to inspect. - * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object - * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array. - */ -function size(obj, ownPropsOnly) { - var count = 0, key; - - if (isArray(obj) || isString(obj)) { - return obj.length; - } else if (isObject(obj)){ - for (key in obj) - if (!ownPropsOnly || obj.hasOwnProperty(key)) - count++; - } - - return count; -} - - -function includes(array, obj) { - return indexOf(array, obj) != -1; -} - -function indexOf(array, obj) { - if (array.indexOf) return array.indexOf(obj); - - for (var i = 0; i < array.length; i++) { - if (obj === array[i]) return i; - } - return -1; -} - -function arrayRemove(array, value) { - var index = indexOf(array, value); - if (index >=0) - array.splice(index, 1); - return value; -} - -function isLeafNode (node) { - if (node) { - switch (node.nodeName) { - case "OPTION": - case "PRE": - case "TITLE": - return true; - } - } - return false; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for array) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="Controller"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - function Controller($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - } - </script> - </file> - </example> - */ -function copy(source, destination){ - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, []); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source); - } else if (isObject(source)) { - destination = copy(source, {}); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - if (isArray(source)) { - destination.length = 0; - for ( var i = 0; i < source.length; i++) { - destination.push(copy(source[i])); - } - } else { - var h = destination.$$hashKey; - forEach(destination, function(value, key){ - delete destination[key]; - }); - for ( var key in source) { - destination[key] = copy(source[key]); - } - setHashKey(destination,h); - } - } - return destination; -} - -/** - * Create a shallow copy of an object - */ -function shallowCopy(src, dst) { - dst = dst || {}; - - for(var key in src) { - // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src - // so we don't need to worry about using our custom hasOwnProperty here - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavasScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for(key=0; key<length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - return isDate(o2) && o1.getTime() == o2.getTime(); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for(key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for(key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - - -function csp() { - return (document.securityPolicy && document.securityPolicy.isActive) || - (document.querySelector && - !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]'))); -} - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0))) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace. - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized thingy. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -function toBoolean(value) { - if (typeof value === 'function') { - value = true; - } else if (value && value.length !== 0) { - var v = lowercase("" + value); - value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); - } else { - value = false; - } - return value; -} - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch(e) {} - // As Per DOM Standards - var TEXT_NODE = 3; - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch(e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch(e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue){ - if ( keyValue ) { - key_value = keyValue.split('='); - key = tryDecodeURIComponent(key_value[0]); - if ( isDefined(key) ) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!obj[key]) { - obj[key] = val; - } else if(isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common, way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - */ -function angularInit(element, bootstrap) { - var elements = [element], - appElement, - module, - names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], - NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; - - function append(element) { - element && elements.push(element); - } - - forEach(names, function(name) { - names[name] = true; - append(document.getElementById(name)); - name = name.replace(':', '\\:'); - if (element.querySelectorAll) { - forEach(element.querySelectorAll('.' + name), append); - forEach(element.querySelectorAll('.' + name + '\\:'), append); - forEach(element.querySelectorAll('[' + name + ']'), append); - } - }); - - forEach(elements, function(element) { - if (!appElement) { - var className = ' ' + element.className + ' '; - var match = NG_APP_CLASS_REGEXP.exec(className); - if (match) { - appElement = element; - module = (match[2] || '').replace(/\s+/g, ','); - } else { - forEach(element.attributes, function(attr) { - if (!appElement && names[attr.name]) { - appElement = element; - module = attr.value; - } - }); - } - } - }); - if (appElement) { - bootstrap(appElement, module ? [module] : []); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * <example name="multi-bootstrap" module="multi-bootstrap"> - * <file name="index.html"> - * <script src="../../../angular.js"></script> - * <div ng-controller="BrokenTable"> - * <table> - * <tr> - * <th ng-repeat="heading in headings">{{heading}}</th> - * </tr> - * <tr ng-repeat="filling in fillings"> - * <td ng-repeat="fill in filling">{{fill}}</td> - * </tr> - * </table> - * </div> - * </file> - * <file name="controller.js"> - * var app = angular.module('multi-bootstrap', []) - * - * .controller('BrokenTable', function($scope) { - * $scope.headings = ['One', 'Two', 'Three']; - * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; - * }); - * </file> - * <file name="protractor.js" type="protractor"> - * it('should only insert one table cell for each item in $scope.fillings', function() { - * expect(element.all(by.css('td')).count()) - * .toBe(9); - * }); - * </file> - * </example> - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a run block. - * See: {@link angular.module modules} - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules) { - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - modules.unshift('ng'); - var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', - function(scope, element, compile, injector, animate) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator){ - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -function bindJQuery() { - // bind to jQuery if present; - jQuery = window.jQuery; - // reset to jQuery or default to us. - if (jQuery) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - // Method signature: - // jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) - jqLitePatchJQueryRemove('remove', true, true, false); - jqLitePatchJQueryRemove('empty', false, false, false); - jqLitePatchJQueryRemove('html', false, false, true); - } else { - jqLite = JQLite; - } - angular.element = jqLite; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {DOMElement} object containing the elements - */ -function getBlockElements(nodes) { - var startNode = nodes[0], - endNode = nodes[nodes.length - 1]; - if (startNode === endNode) { - return jqLite(startNode); - } - - var element = startNode; - var elements = [element]; - - do { - element = element.nextSibling; - if (!element) break; - elements.push(element); - } while (element !== endNode); - - return jqLite(elements); -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. -<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If ->>>>>* unspecified then the module is being retrieved for further configuration. - * @param {Function} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke'); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * @returns {Array.<string>} List of module names which must be loaded before this module. - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * @returns {string} Name of the module. - * @description - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod) { - return function() { - invokeQueue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global - angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - requiredDirective, - requiredDirective, - ngValueDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.2.16', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 2, - dot: 16, - codeName: 'badger-enumeration' -}; - - -function publishExternalAPI(angular){ - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop':noop, - 'bind':bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity':identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - '$$minErr': minErr, - '$$csp': csp - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - required: requiredDirective, - ngRequired: requiredDirective, - ngValue: ngValueDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback : $$AsyncCallbackProvider - }); - } - ]); -} - -/* global - - -JQLitePrototype, - -addEventListenerFn, - -removeEventListenerFn, - -BOOLEAN_ATTR -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - * - [`data()`](http://api.jquery.com/data/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng-' + new Date().getTime(), - jqId = 1, - addEventListenerFn = (window.document.addEventListener - ? function(element, type, fn) {element.addEventListener(type, fn, false);} - : function(element, type, fn) {element.attachEvent('on' + type, fn);}), - removeEventListenerFn = (window.document.removeEventListener - ? function(element, type, fn) {element.removeEventListener(type, fn, false); } - : function(element, type, fn) {element.detachEvent('on' + type, fn); }); - -/* - * !!! This is an undocumented "private" function !!! - */ -var jqData = JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -///////////////////////////////////////////// -// jQuery mutation patch -// -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a -// $destroy event on all DOM nodes being removed. -// -///////////////////////////////////////////// - -function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { - var originalJqFn = jQuery.fn[name]; - originalJqFn = originalJqFn.$original || originalJqFn; - removePatch.$original = originalJqFn; - jQuery.fn[name] = removePatch; - - function removePatch(param) { - // jshint -W040 - var list = filterElems && param ? [this.filter(param)] : [this], - fireEvent = dispatchThis, - set, setIndex, setLength, - element, childIndex, childLength, children; - - if (!getterIfNoArguments || param != null) { - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); - } - } - } - } - return originalJqFn.apply(this, arguments); - } -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteBuildFragment(html, context) { - var elem, tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i, j, jj; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - tmp = fragment.appendChild(context.createElement('div')); - // Convert html into DOM nodes - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = '<div>&#160;</div>' + - wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - tmp.removeChild(tmp.firstChild); - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - return nodes; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - return jqLiteBuildFragment(html, context); -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - if (isString(element)) { - element = trim(element); - } - if (!(this instanceof JQLite)) { - if (isString(element) && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (isString(element)) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - var fragment = jqLite(document.createDocumentFragment()); - fragment.append(this); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element){ - jqLiteRemoveData(element); - for ( var i = 0, children = element.childNodes || []; i < children.length; i++) { - jqLiteDealoc(children[i]); - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!handle) return; //no listeners registered - - if (isUndefined(type)) { - forEach(events, function(eventHandler, type) { - removeEventListenerFn(element, type, eventHandler); - delete events[type]; - }); - } else { - forEach(type.split(' '), function(type) { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type] || [], fn); - } - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete jqCache[expandoId].data[name]; - return; - } - - if (expandoStore.handle) { - expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - jqLiteOff(element); - } - delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. - } -} - -function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], - expandoStore = jqCache[expandoId || -1]; - - if (isDefined(value)) { - if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {}; - } - expandoStore[key] = value; - } else { - return expandoStore && expandoStore[key]; - } -} - -function jqLiteData(element, key, value) { - var data = jqLiteExpandoStore(element, 'data'), - isSetter = isDefined(value), - keyDefined = !isSetter && isDefined(key), - isSimpleGetter = keyDefined && !isObject(key); - - if (!data && !isSimpleGetter) { - jqLiteExpandoStore(element, 'data', data = {}); - } - - if (isSetter) { - data[key] = value; - } else { - if (keyDefined) { - if (isSimpleGetter) { - // don't create data in this case. - return data && data[key]; - } else { - extend(data, key); - } - } else { - return data; - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf( " " + selector + " " ) > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - -function jqLiteAddNodes(root, elements) { - if (elements) { - elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements)) - ? elements - : [ elements ]; - for(var i=0; i < elements.length; i++) { - root.push(elements[i]); - } - } -} - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - element = jqLite(element); - - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if(element[0].nodeType == 9) { - element = element.find('html'); - } - var names = isArray(name) ? name : [name]; - - while (element.length) { - var node = element[0]; - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = element.data(names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = jqLite(node.parentNode || (node.nodeType === 11 && node.host)); - } -} - -function jqLiteEmpty(element) { - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document already is loaded - if (document.readyState === 'complete'){ - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e){ value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[uppercase(value)] = true; -}); - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; -} - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element,name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - var val; - - if (msie <= 8) { - // this is some IE specific weirdness that jQuery 1.6.4 does not sure why - val = element.currentStyle && element.currentStyle[name]; - if (val === '') val = 'auto'; - } - - val = val || element.style[name]; - - if (msie <= 8) { - // jquery weirdness :-/ - val = (val === '') ? undefined : val; - } - - return val; - } - }, - - attr: function(element, name, value){ - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name)|| noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - var NODE_TYPE_TEXT_PROPERTY = []; - if (msie < 9) { - NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ - } else { - NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ - NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ - } - getText.$dv = ''; - return getText; - - function getText(element, value) { - var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; - if (isUndefined(value)) { - return textProp ? element[textProp] : ''; - } - element[textProp] = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (nodeName_(element) === 'SELECT' && element.multiple) { - var result = []; - forEach(element.options, function (option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) { - jqLiteDealoc(childNodes[i]); - } - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name){ - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < this.length; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(this.length, 1) : this.length; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < this.length; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function (event, type) { - if (!event.preventDefault) { - event.preventDefault = function() { - event.returnValue = false; //ie - }; - } - - if (!event.stopPropagation) { - event.stopPropagation = function() { - event.cancelBubble = true; //ie - }; - } - - if (!event.target) { - event.target = event.srcElement || document; - } - - if (isUndefined(event.defaultPrevented)) { - var prevent = event.preventDefault; - event.preventDefault = function() { - event.defaultPrevented = true; - prevent.call(event); - }; - event.defaultPrevented = false; - } - - event.isDefaultPrevented = function() { - return event.defaultPrevented || event.returnValue === false; - }; - - // Copy event handlers in case event handlers array is modified during execution. - var eventHandlersCopy = shallowCopy(events[type || event.type] || []); - - forEach(eventHandlersCopy, function(fn) { - fn.call(element, event); - }); - - // Remove monkey-patched methods (IE), - // as they would cause memory leaks in IE8. - if (msie <= 8) { - // IE7/8 does not allow to delete property on native object - event.preventDefault = null; - event.stopPropagation = null; - event.isDefaultPrevented = null; - } else { - // It shouldn't affect normal browsers (native methods are defined on prototype). - delete event.preventDefault; - delete event.stopPropagation; - delete event.isDefaultPrevented; - } - }; - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - dealoc: jqLiteDealoc, - - on: function onFn(element, type, fn, unsupported){ - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - var events = jqLiteExpandoStore(element, 'events'), - handle = jqLiteExpandoStore(element, 'handle'); - - if (!events) jqLiteExpandoStore(element, 'events', events = {}); - if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events)); - - forEach(type.split(' '), function(type){ - var eventFns = events[type]; - - if (!eventFns) { - if (type == 'mouseenter' || type == 'mouseleave') { - var contains = document.body.contains || document.body.compareDocumentPosition ? - function( a, b ) { - // jshint bitwise: false - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - events[type] = []; - - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; - - onFn(element, eventmap[type], function(event) { - var target = this, related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !contains(target, related)) ){ - handle(event, type); - } - }); - - } else { - addEventListenerFn(element, type, handle); - events[type] = []; - } - eventFns = events[type]; - } - eventFns.push(fn); - }); - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node){ - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element){ - if (element.nodeType === 1) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - forEach(new JQLite(node), function(child){ - if (element.nodeType === 1 || element.nodeType === 11) { - element.appendChild(child); - } - }); - }, - - prepend: function(element, node) { - if (element.nodeType === 1) { - var index = element.firstChild; - forEach(new JQLite(node), function(child){ - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode)[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: function(element) { - jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - forEach(new JQLite(newElement), function(node){ - parent.insertBefore(node, index.nextSibling); - index = node; - }); - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className){ - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - - next: function(element) { - if (element.nextElementSibling) { - return element.nextElementSibling; - } - - // IE8 doesn't have nextElementSibling - var elm = element.nextSibling; - while (elm != null && elm.nodeType !== 1) { - elm = elm.nextSibling; - } - return elm; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, eventName, eventData) { - var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; - - eventData = eventData || []; - - var event = [{ - preventDefault: noop, - stopPropagation: noop - }]; - - forEach(eventFns, function(fn) { - fn.apply(element, event.concat(eventData)); - }); - } -}, function(fn, name){ - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - for(var i=0; i < this.length; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj) { - var objType = typeof obj, - key; - - if (objType == 'object' && obj !== null) { - if (typeof (key = obj.$$hashKey) == 'function') { - // must invoke on object to keep the right this - key = obj.$$hashKey(); - } else if (key === undefined) { - key = obj.$$hashKey = nextUid(); - } - } else { - key = obj; - } - - return objType + ':' + key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array){ - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @function - * - * @description - * Creates an injector function that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @returns {function()} Injector function. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document){ - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); -function annotate(fn) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn == 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ - arg.replace(FN_ARG, function(all, underscore, name){ - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * @function - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector){ - * return $injector; - * }).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with - * minification, and obfuscation tools since these tools change the argument names. - * - * ## `$inject` Annotation - * By adding a `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exist. - * - * @param {string} Name of the service to query. - * @returns {boolean} returns true if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function invokes the new - * operator and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc object - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad) { - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function() { - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(servicename) { - var provider = providerInjector.get(servicename + providerSuffix); - return instanceInjector.invoke(provider.$get, provider); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val)); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad){ - var runBlocks = [], moduleFn, invokeQueue, i, ii; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - - for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { - var invokeArgs = invokeQueue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals){ - var args = [], - $inject = annotate(fn), - length, i, - key; - - for(i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key) - ); - } - if (!fn.$inject) { - // this means that we must be an array. - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals) { - var Constructor = function() {}, - instance, returnedValue; - - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype; - instance = new Constructor(); - returnedValue = invoke(Type, instance, locals); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -/** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks current value of `$location.hash()` and scroll to related element, - * according to rules specified in - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor. - * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`. - * - * @example - <example> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollCtrl"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - function ScrollCtrl($scope, $location, $anchorScroll) { - $scope.gotoBottom = function (){ - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - } - </file> - <file name="style.css"> - #scrollArea { - height: 350px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // helper function to get first anchor from a NodeList - // can't use filter.filter, as it accepts only instances of Array - // and IE can't convert NodeList to an array using [].slice - // TODO(vojta): use filter if we change it to accept lists as well - function getFirstAnchor(list) { - var result = null; - forEach(list, function(element) { - if (!result && lowercase(element.nodeName) === 'a') result = element; - }); - return result; - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) $window.scrollTo(0, 0); - - // element with given id - else if ((elm = document.getElementById(hash))) elm.scrollIntoView(); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView(); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') $window.scrollTo(0, 0); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction() { - $rootScope.$evalAsync(scroll); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if(arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) { - - function async(fn) { - fn && $$asyncCallback(fn); - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - - /** - * - * @ngdoc method - * @name $animate#enter - * @function - * @description Inserts the element into the DOM either after the `after` element or within - * the `parent` element. Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {Function=} done callback function that will be called after the element has been - * inserted into the DOM - */ - enter : function(element, parent, after, done) { - if (after) { - after.after(element); - } else { - if (!parent || !parent[0]) { - parent = after.parent(); - } - parent.append(element); - } - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @function - * @description Removes the element from the DOM. Once complete, the done() callback will be - * fired (if provided). - * @param {DOMElement} element the element which will be removed from the DOM - * @param {Function=} done callback function that will be called after the element has been - * removed from the DOM - */ - leave : function(element, done) { - element.remove(); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. Once complete, the - * done() callback will be fired (if provided). - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {Function=} done the callback function (if provided) that will be fired after the - * element has been moved to its new position - */ - move : function(element, parent, after, done) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - this.enter(element, parent, after, done); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @function - * @description Adds the provided className CSS class value to the provided element. Once - * complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been added to the element - */ - addClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteAddClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @function - * @description Removes the provided className CSS class value from the provided element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * className value has been removed from the element - */ - removeClass : function(element, className, done) { - className = isString(className) ? - className : - isArray(className) ? className.join(' ') : ''; - forEach(element, function (element) { - jqLiteRemoveClass(element, className); - }); - async(done); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @function - * @description Adds and/or removes the given CSS classes to and from the element. - * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {Function=} done the callback function (if provided) that will be fired after the - * CSS classes have been set on the element - */ - setClass : function(element, add, remove, done) { - forEach(element, function (element) { - jqLiteAddClass(element, add); - jqLiteRemoveClass(element, remove); - }); - async(done); - }, - - enabled : noop - }; - }]; -}]; - -function $$AsyncCallbackProvider(){ - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {function()} XHR XMLHttpRequest constructor. - * @param {object} $log console.log or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while(outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn){ pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn){ pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var lastBrowserUrl = location.href, - baseElement = document.find('base'), - newLocation = null; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record ? - */ - self.url = function(url, replace) { - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - if (lastBrowserUrl == url) return; - lastBrowserUrl = url; - if ($sniffer.history) { - if (replace) history.replaceState(null, '', url); - else { - history.pushState(null, '', url); - // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462 - baseElement.attr('href', baseElement.attr('href')); - } - } else { - newLocation = url; - if (replace) { - location.replace(url); - } else { - location.href = url; - } - } - return self; - // getter - } else { - // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href - // methods not updating location.href synchronously. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return newLocation || location.href.replace(/%27/g,"'"); - } - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function fireUrlChange() { - newLocation = null; - if (lastBrowserUrl == self.url()) return; - - lastBrowserUrl = self.url(); - forEach(urlChangeListeners, function(listener) { - listener(self.url()); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); - // hashchange event - if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); - // polling - else self.addPollFn(fireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - /* global escape: false, unescape: false */ - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = escape(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '"+ name + - "' possibly not set or overflowed because it was too large ("+ - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = unescape(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = unescape(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider(){ - this.$get = ['$window', '$log', '$sniffer', '$document', - function( $window, $log, $sniffer, $document){ - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - $scope.cache.put(key, value); - $scope.keys.push(key); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the of the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be below the `ng-app` definition. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * replace: false, - * transclude: false, - * restrict: 'A', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression and to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. - * `function([scope], cloneLinkingFn)`. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the - * `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the default (attributes only) is used. - * - * * `E` - Element name: `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `template` - * replace the current element with the contents of the HTML. The replacement process - * migrates all of the attributes / classes from the old element to the new one. See the - * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive - * Directives Guide} for an example. - * - * You can specify `template` as a string representing the template or as a function which takes - * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and - * returns a string value representing the template. - * - * - * #### `templateUrl` - * Same as `template` but the template is loaded from the specified URL. Because - * the template loading is asynchronous the compilation/linking is suspended until the template - * is loaded. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - * specify where the template should be inserted. Defaults to `false`. - * - * * `true` - the template will replace the current element. - * * `false` - the template will replace the contents of the current element. - * - * - * #### `transclude` - * compile the content of the element and make it available to the directive. - * Typically used with {@link ng.directive:ngTransclude - * ngTransclude}. The advantage of transclusion is that the linking function receives a - * transclusion function which is pre-bound to the correct scope. In a typical setup the widget - * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate` - * scope. This makes it possible for the widget to have private state, and the transclusion to - * be bound to the parent (pre-`isolate`) scope. - * - * * `true` - transclude the content of the directive. - * * `'element'` - transclude the whole element including any directives defined at lower priority. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. Examples that require compile functions are - * directives that transform template DOM, such as {@link - * api/ng.directive:ngRepeat ngRepeat}, or load the contents - * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The - * compile function takes the following arguments. - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * The scope can be overridden by an optional first argument. This is the same as the `$transclude` - * parameter of directive controllers. - * `function([scope], cloneLinkingFn)`. - * - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. - * - * <a name="Attributes"></a> - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * Below is an example using `$compileProvider`. - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compile"> - <file name="index.html"> - <script> - angular.module('compile', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }) - }); - - function Ctrl($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - } - </script> - <div ng-controller="Ctrl"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives. - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * @function - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - /** - * @ngdoc method - * @name $compileProvider#directive - * @function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'A'; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attr) { - this.$$element = element; - this.$attr = attr || {}; - }; - - Attributes.prototype = { - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass : function(classVal) { - if(classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass : function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - var toRemove = tokenDifference(oldClasses, newClasses); - - if(toAdd.length === 0) { - $animate.removeClass(this.$$element, toRemove); - } else if(toRemove.length === 0) { - $animate.addClass(this.$$element, toAdd); - } else { - $animate.setClass(this.$$element, toAdd, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var booleanKey = getBooleanAttrName(this.$$element[0], key), - normalizedVal, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // sanitize a[href] and img[src] values - if ((nodeName === 'A' && key === 'href') || - (nodeName === 'IMG' && key === 'src')) { - this[key] = value = $$sanitizeUri(value, key === 'src'); - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[key], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#Attributes Directives} guide for more info. - * @returns {function()} the `fn` parameter. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = {})), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - return fn; - } - }; - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index){ - if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ - assertArg(scope, 'scope'); - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - var $linkNode = cloneConnectFn - ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! - : $compileNodes; - - forEach(transcludeControllers, function(instance, name) { - $linkNode.data('$' + name + 'Controller', instance); - }); - - // Attach scope only to non-text nodes. - for(var i = 0, ii = $linkNode.length; i<ii; i++) { - var node = $linkNode[i], - nodeType = node.nodeType; - if (nodeType === 1 /* element */ || nodeType === 9 /* document */) { - $linkNode.eq(i).data('$scope', scope); - } - } - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); - return $linkNode; - }; - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch(e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - safeAddClass(jqLite(nodeList[i]), 'ng-scope'); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); - - linkFns.push(nodeLinkFn, childLinkFn); - linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; - - // copy nodeList so that linking doesn't break due to live list updates. - var nodeListLength = nodeList.length, - stableNodeList = new Array(nodeListLength); - for (i = 0; i < nodeListLength; i++) { - stableNodeList[i] = nodeList[i]; - } - - for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) { - node = stableNodeList[n]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - $node = jqLite(node); - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - $node.data('$scope', childScope); - } else { - childScope = scope; - } - childTranscludeFn = nodeLinkFn.transclude; - if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, - createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) - ); - } else { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); - } - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn) { - return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { - var scopeCreated = false; - - if (!transcludedScope) { - transcludedScope = scope.$new(); - transcludedScope.$$transcluded = true; - scopeCreated = true; - } - - var clone = transcludeFn(transcludedScope, cloneFn, controllers); - if (scopeCreated) { - clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); - } - return clone; - }; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch(nodeType) { - case 1: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - if (!msie || msie >= 8 || attr.specified) { - name = attr.name; - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (NG_ATTR_BINDING.test(ngAttrName)) { - name = snake_case(ngAttrName.substr(6), '-'); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - attrs[nName] = value = trim(attr.value); - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - // use class as directive - className = node.className; - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case 3: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case 8: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - var startNode = node; - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == 1 /** Element **/) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for(var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - newScopeDirective = newScopeDirective || directive; - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - if (isObject(directiveValue)) { - newIsolateScopeDirective = directive; - } - } - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = groupScan(compileNode, attrStart, attrEnd); - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = jqLite(directiveValue); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - if (isString(require)) { - while((value = require.charAt(0)) == '^' || value == '?') { - require = require.substr(1); - if (value == '^') { - retrievalMethod = 'inheritedData'; - } - optional = optional || value == '?'; - } - value = null; - - if (elementControllers && retrievalMethod === 'data') { - value = elementControllers[require]; - } - value = value || $element[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; - - if (compileNode === linkNode) { - attrs = templateAttrs; - } else { - attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); - } - $element = attrs.$$element; - - if (newIsolateScopeDirective) { - var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; - var $linkNode = jqLite(linkNode); - - isolateScope = scope.$new(true); - - if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { - $linkNode.data('$isolateScope', isolateScope) ; - } else { - $linkNode.data('$isolateScopeNoTemplate', isolateScope); - } - - - - safeAddClass($linkNode, 'ng-isolate-scope'); - - forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP) || [], - attrName = match[3] || scopeName, - optional = (match[2] == '?'), - mode = match[1], // @, =, or & - lastValue, - parentGet, parentSet, compare; - - isolateScope.$$isolateBindings[scopeName] = mode + attrName; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateScope[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if( attrs[attrName] ) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateScope[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a,b) { return a === b; }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateScope[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateScope[scopeName] = parentGet(scope); - isolateScope.$watch(function parentValueWatch() { - var parentValue = parentGet(scope); - if (!compare(parentValue, isolateScope[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateScope[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateScope[scopeName]); - } - } - return lastValue = parentValue; - }, null, parentGet.literal); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateScope[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - - default: - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - newIsolateScopeDirective.name, scopeName, definition); - } - }); - } - transcludeFn = boundTranscludeFn && controllersBoundTransclude; - if (controllerDirectives) { - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals); - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance); - } - - if (directive.controllerAs) { - locals.$scope[directive.controllerAs] = controllerInstance; - } - }); - } - - // PRELINKING - for(i = 0, ii = preLinkFns.length; i < ii; i++) { - try { - linkFn = preLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for(i = postLinkFns.length - 1; i >= 0; i--) { - try { - linkFn = postLinkFns[i]; - linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs, - linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - // This is the function that is injected as `$transclude`. - function controllersBoundTransclude(scope, cloneAttachFn) { - var transcludeControllers; - - // no scope passed - if (arguments.length < 2) { - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for(var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i<ii; i++) { - try { - directive = directives[i]; - if ( (maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch(e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key]) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl; - - $compileNode.empty(); - - $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). - success(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = jqLite(content); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== 1) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - - while(linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transclude) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }). - error(function(response, code, headers, config) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - if (linkQueue) { - linkQueue.push(scope); - linkQueue.push(node); - linkQueue.push(rootElement); - linkQueue.push(boundTranscludeFn); - } else { - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: valueFn(function textInterpolateLinkFn(scope, node) { - var parent = node.parent(), - bindings = parent.data('$binding') || []; - bindings.push(interpolateFn); - safeAddClass(parent.data('$binding', bindings), 'ng-binding'); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }) - }); - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "FORM" && attrNormalizedName == "action") || - (tag != "IMG" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name) { - var interpolateFn = $interpolate(value, true); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "SELECT") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // we need to interpolate again, in case the attribute value has been updated - // (e.g. by another directive's compile function) - interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name)); - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the - // actual attr value - attr[name] = interpolateFn(scope); - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if(name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - }]; -} - -var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * All of these will become 'myDirective': - * my:Directive - * my-directive - * x-my-directive - * data-my:directive - * - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * @returns {object} A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -){} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * check `window[constructor]` on the global `window` object - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals) { - var instance, match, constructor, identifier; - - if(isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || getter($window, constructor, true); - - assertArgFn(expression, constructor, true); - } - - instance = $injector.instantiate(expression, locals); - - if (identifier) { - if (!(locals && typeof locals.$scope == 'object')) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - constructor || expression.name, identifier); - } - - locals.$scope[identifier] = instance; - } - - return instance; - }; - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - function MainCtrl($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - } - </file> - </example> - */ -function $DocumentProvider(){ - this.$get = ['$window', function(window){ - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () { - * return function (exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/, - CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; - - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: copy(CONTENT_TYPE_APPLICATION_JSON), - put: copy(CONTENT_TYPE_APPLICATION_JSON), - patch: copy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - /** - * Are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - */ - var interceptorFactories = this.interceptors = []; - - /** - * For historical reasons, response interceptors are ordered by the order in which - * they are applied to the response. (This is the opposite of interceptorFactories) - */ - var responseInterceptorFactories = this.responseInterceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - forEach(responseInterceptorFactories, function(interceptorFactory, index) { - var responseFn = isString(interceptorFactory) - ? $injector.get(interceptorFactory) - : $injector.invoke(interceptorFactory); - - /** - * Response interceptors go before "around" interceptors (no real reason, just - * had to pick one.) But they are already reversed, so we can't use unshift, hence - * the splice. - */ - reversedInterceptors.splice(index, 0, { - response: function(response) { - return responseFn($q.when(response)); - }, - responseError: function(response) { - return responseFn($q.reject(response)); - } - }); - }); - - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * $http({method: 'GET', url: '/someUrl'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * # Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * To globally augment or override the default transforms, modify the - * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` - * properties. These properties are by default an array of transform functions, which allows you - * to `push` or `unshift` a new transformation function into the transformation chain. You can - * also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. These defaults - * are again available on the $http factory at run-time, which may be useful if you have run-time - * services you wish to be involved in your transformations. - * - * Similarly, to locally override the request/response transforms, augment the - * `transformRequest` and/or `transformResponse` properties of the configuration object passed - * into `$http`. - * - * - * # Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * # Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with http `config` object. The function is free to - * modify the `config` or create a new one. The function needs to return the `config` - * directly or as a promise. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` or create a new one. The function needs to return the `response` - * directly or as a promise. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config || $q.when(config); - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response || $q.when(response); - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * # Response interceptors (DEPRECATED) - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication or any kind of synchronous or - * asynchronous preprocessing of received responses, it is desirable to be able to intercept - * responses for http requests before they are handed over to the application code that - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return function(promise) { - * return promise.then(function(response) { - * // do something on success - * return response; - * }, function(response) { - * // do something on error - * if (canRecover(response)) { - * return responseOrNewPromise - * } - * return $q.reject(response); - * }); - * } - * }); - * - * $httpProvider.responseInterceptors.push('myHttpInterceptor'); - * - * - * // register the interceptor via an anonymous factory - * $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) { - * return function(promise) { - * // same as above - * } - * }); - * ``` - * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * - **transformResponse** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example> -<file name="index.html"> - <div ng-controller="FetchCtrl"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - - it('should make a JSONP request to angularjs.org', function() { - sampleJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Super Hero!/); - }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - var config = { - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }; - var headers = mergeHeaders(requestConfig); - - extend(config, requestConfig); - config.headers = headers; - config.method = uppercase(config.method); - - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - - var serverRequest = function(config) { - headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(config.data)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData, headers).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while(chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, config.transformResponse) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // execute if header value is function - execHeaders(defHeaders); - execHeaders(reqHeaders); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - return reqHeaders; - - function execHeaders(headers) { - var headerContent; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - headers[header] = headerContent; - } else { - delete headers[header]; - } - } - }); - } - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // if we won't have the response in cache, send the request to the backend - if (isUndefined(cachedResp)) { - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - resolvePromise(response, status, headersString, statusText); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText : statusText - }); - } - - - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - v = toJson(v); - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if(parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - - - }]; -} - -function createXhr(method) { - //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest - //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest - //if it is available - if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) || - !window.XMLHttpRequest)) { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } else if (window.XMLHttpRequest) { - return new window.XMLHttpRequest(); - } - - throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - var ABORTED = -1; - - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - var status; - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, status || -2); - } - callbacks[callbackId] = angular.noop; - }); - } else { - - var xhr = createXhr(method); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - // In IE6 and 7, this might be called synchronously when xhr.send below is called and the - // response is in the cache. the promise api will ensure that to the app code the api is - // always async - xhr.onreadystatechange = function() { - // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by - // xhrs that are resolved while the app is in the background (see #5426). - // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before - // continuing - // - // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and - // Safari respectively. - if (xhr && xhr.readyState == 4) { - var responseHeaders = null, - response = null; - - if(status !== ABORTED) { - responseHeaders = xhr.getAllResponseHeaders(); - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - response = ('response' in xhr) ? xhr.response : xhr.responseText; - } - - completeRequest(callback, - status || xhr.status, - response, - responseHeaders, - xhr.statusText || ''); - } - }; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (timeout && timeout.then) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - status = ABORTED; - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - timeoutId && $browserDefer.cancel(timeoutId); - jsonpDone = xhr = null; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status === 1223 ? 204 : status; - statusText = statusText || ''; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - script.onreadystatechange = script.onload = script.onerror = null; - rawDocument.body.removeChild(script); - if (done) done(); - }; - - script.type = 'text/javascript'; - script.src = url; - - if (msie && msie <= 8) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) { - doneWrapper(); - } - }; - } else { - script.onload = script.onerror = function() { - doneWrapper(); - }; - } - - rawDocument.body.appendChild(script); - return doneWrapper; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * @function - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function DemoController() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value){ - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value){ - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length; - - /** - * @ngdoc service - * @name $interpolate - * @function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * * `context`: an object against which any expressions embedded in the strings are evaluated - * against. - * - */ - function $interpolate(text, mustHaveExpression, trustedContext) { - var startIndex, - endIndex, - index = 0, - parts = [], - length = text.length, - hasInterpolation = false, - fn, - exp, - concat = []; - - while(index < length) { - if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - (index != startIndex) && parts.push(text.substring(index, startIndex)); - parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); - fn.exp = exp; - index = endIndex + endSymbolLength; - hasInterpolation = true; - } else { - // we did not find anything, so we have to add the remainder to the parts array - (index != length) && parts.push(text.substring(index)); - index = length; - } - } - - if (!(length = parts.length)) { - // we added, nothing, must have been an empty string. - parts.push(''); - length = 1; - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && parts.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || hasInterpolation) { - concat.length = length; - fn = function(context) { - try { - for(var i = 0, ii = length, part; i<ii; i++) { - if (typeof (part = parts[i]) == 'function') { - part = part(context); - if (trustedContext) { - part = $sce.getTrusted(trustedContext, part); - } else { - part = $sce.valueOf(part); - } - if (part === null || isUndefined(part)) { - part = ''; - } else if (typeof part != 'string') { - part = toJson(part); - } - } - concat[i] = part; - } - return concat.join(''); - } - catch(err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - }; - fn.exp = text; - fn.parts = parts; - return fn; - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', - function($rootScope, $window, $q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="time"> - * <file name="index.html"> - * <script> - * function Ctrl2($scope,$interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * } - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * } - * - * angular.module('time', []) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time ofter the DOM element was removed. - * element.bind('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }); - * </script> - * - * <div> - * <div ng-controller="Ctrl2"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply); - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - short: 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { - var parsedUrl = urlResolve(absoluteUrl, appBase); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj, appBase) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl, appBase); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} newAbsoluteUrl HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, appBase); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$rewrite = function(url) { - var appUrl, prevAppUrl; - - if ( (appUrl = beginsWith(appBase, url)) !== undefined ) { - prevAppUrl = appUrl; - if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) { - return appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - return appBase + prevAppUrl; - } - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) { - return appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - return appBaseNoFile; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this, appBase); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' - ? beginsWith(hashPrefix, withoutBaseUrl) - : (this.$$html5) - ? withoutBaseUrl - : ''; - - if (!isString(withoutHashUrl)) { - throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url, - hashPrefix); - } - parseAppUrl(withoutHashUrl, this, appBase); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName (path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/?.*?:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - /* - * The input URL intentionally contains a - * first path segment that ends with a colon. - */ - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$rewrite = function(url) { - if(stripHash(appBase) == stripHash(url)) { - return url; - } - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$rewrite = function(url) { - var appUrl; - - if ( appBase == stripHash(url) ) { - return url; - } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) { - return appBase + hashPrefix + appUrl; - } else if ( appBaseNoFile === url + '/') { - return appBaseNoFile; - } - }; -} - - -LocationHashbangInHtml5Url.prototype = - LocationHashbangUrl.prototype = - LocationHtml5Url.prototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing ? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @param {string=} replace The path that will be changed - * @return {string} url - */ - url: function(url, replace) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1]) this.path(decodeURIComponent(match[1])); - if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * @param {string=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. Hash object may contain an array of values, which will be decoded as duplicates in - * the url. - * - * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a - * single search parameter. If `paramValue` is an array, it will set the parameter as a - * comma-separated value. If `paramValue` is `null`, the parameter will be deleted. - * - * @return {string} search - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search)) { - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * @param {string=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', identity), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider(){ - var hashPrefix = '', - html5Mode = false; - - /** - * @ngdoc property - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc property - * @name $locationProvider#html5Mode - * @description - * @param {boolean=} mode Use HTML5 strategy if available. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isDefined(mode)) { - html5Mode = mode; - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', - function( $rootScope, $browser, $sniffer, $rootElement) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode) { - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parse($location.$$rewrite(initialUrl)); - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (event.ctrlKey || event.metaKey || event.which == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (lowercase(elm[0].nodeName) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - var rewrittenUrl = $location.$$rewrite(absHref); - - if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { - event.preventDefault(); - if (rewrittenUrl != $browser.url()) { - // update location manually - $location.$$parse(rewrittenUrl); - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - window.angular['ff-684208-preventDefault'] = true; - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl) { - if ($location.absUrl() != newUrl) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - - $location.$$parse(newUrl); - if ($rootScope.$broadcast('$locationChangeStart', newUrl, - oldUrl).defaultPrevented) { - $location.$$parse(oldUrl); - $browser.url(oldUrl); - } else { - afterLocationChange(oldUrl); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - } - }); - - // update browser - var changeCounter = 0; - $rootScope.$watch(function $locationWatch() { - var oldUrl = $browser.url(); - var currentReplace = $location.$$replace; - - if (!changeCounter || oldUrl != $location.absUrl()) { - changeCounter++; - $rootScope.$evalAsync(function() { - if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl). - defaultPrevented) { - $location.$$parse(oldUrl); - } else { - $browser.url($location.absUrl(), currentReplace); - afterLocationChange(oldUrl); - } - }); - } - $location.$$replace = false; - - return changeCounter; - }); - - return $location; - - function afterLocationChange(oldUrl) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example> - <file name="script.js"> - function LogCtrl($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - } - </file> - <file name="index.html"> - <div ng-controller="LogCtrl"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider(){ - var debug = true, - self = this; - - /** - * @ngdoc property - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window){ - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function () { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); -var promiseWarningCache = {}; -var promiseWarning; - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor(alert("evil JS code")) -// -// We want to prevent this type of access. For the sake of performance, during the lexing phase we -// disallow any "dotted" access to any member named "constructor". -// -// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor -// while evaluating the expression, which is a stronger but more expensive test. Since reflective -// calls are expensive anyway, this is not such a big deal compared to static dereferencing. -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// A developer could foil the name check by aliasing the Function constructor under a different -// name on the scope. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. - -function ensureSafeMemberName(name, fullExpression) { - if (name === "constructor") { - throw $parseMinErr('isecfld', - 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.document && obj.location && obj.alert && obj.setInterval) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var OPERATORS = { - /* jshint bitwise : false */ - 'null':function(){return null;}, - 'true':function(){return true;}, - 'false':function(){return false;}, - undefined:noop, - '+':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b)?b:undefined;}, - '-':function(self, locals, a,b){ - a=a(self, locals); b=b(self, locals); - return (isDefined(a)?a:0)-(isDefined(b)?b:0); - }, - '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);}, - '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);}, - '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, - '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, - '=':noop, - '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, - '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, - '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, - '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, - '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);}, - '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);}, - '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);}, - '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);}, - '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);}, - '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);}, - '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);}, -// '|':function(self, locals, a,b){return a|b;}, - '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));}, - '!':function(self, locals, a){return !a(self, locals);} -}; -/* jshint bitwise: true */ -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function (options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function (text) { - this.text = text; - - this.index = 0; - this.ch = undefined; - this.lastCh = ':'; // can start regexp - - this.tokens = []; - - var token; - var json = []; - - while (this.index < this.text.length) { - this.ch = this.text.charAt(this.index); - if (this.is('"\'')) { - this.readString(this.ch); - } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(this.ch)) { - this.readIdent(); - // identifiers can only be if the preceding char was a { or , - if (this.was('{,') && json[0] === '{' && - (token = this.tokens[this.tokens.length - 1])) { - token.json = token.text.indexOf('.') === -1; - } - } else if (this.is('(){}[].,;:?')) { - this.tokens.push({ - index: this.index, - text: this.ch, - json: (this.was(':[,') && this.is('{[')) || this.is('}]:,') - }); - if (this.is('{[')) json.unshift(this.ch); - if (this.is('}]')) json.shift(); - this.index++; - } else if (this.isWhitespace(this.ch)) { - this.index++; - continue; - } else { - var ch2 = this.ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var fn = OPERATORS[this.ch]; - var fn2 = OPERATORS[ch2]; - var fn3 = OPERATORS[ch3]; - if (fn3) { - this.tokens.push({index: this.index, text: ch3, fn: fn3}); - this.index += 3; - } else if (fn2) { - this.tokens.push({index: this.index, text: ch2, fn: fn2}); - this.index += 2; - } else if (fn) { - this.tokens.push({ - index: this.index, - text: this.ch, - fn: fn, - json: (this.was('[,:') && this.is('+-')) - }); - this.index += 1; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - this.lastCh = this.ch; - } - return this.tokens; - }, - - is: function(chars) { - return chars.indexOf(this.ch) !== -1; - }, - - was: function(chars) { - return chars.indexOf(this.lastCh) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9'); - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - number = 1 * number; - this.tokens.push({ - index: start, - text: number, - json: true, - fn: function() { return number; } - }); - }, - - readIdent: function() { - var parser = this; - - var ident = ''; - var start = this.index; - - var lastDot, peekIndex, methodName, ch; - - while (this.index < this.text.length) { - ch = this.text.charAt(this.index); - if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) { - if (ch === '.') lastDot = this.index; - ident += ch; - } else { - break; - } - this.index++; - } - - //check if this is not a method invocation and if it is back out to last dot - if (lastDot) { - peekIndex = this.index; - while (peekIndex < this.text.length) { - ch = this.text.charAt(peekIndex); - if (ch === '(') { - methodName = ident.substr(lastDot - start + 1); - ident = ident.substr(0, lastDot - start); - this.index = peekIndex; - break; - } - if (this.isWhitespace(ch)) { - peekIndex++; - } else { - break; - } - } - } - - - var token = { - index: start, - text: ident - }; - - // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn - if (OPERATORS.hasOwnProperty(ident)) { - token.fn = OPERATORS[ident]; - token.json = OPERATORS[ident]; - } else { - var getter = getterFn(ident, this.options, this.text); - token.fn = extend(function(self, locals) { - return (getter(self, locals)); - }, { - assign: function(self, value) { - return setter(self, ident, value, parser.text, parser.options); - } - }); - } - - this.tokens.push(token); - - if (methodName) { - this.tokens.push({ - index:lastDot, - text: '.', - json: false - }); - this.tokens.push({ - index: lastDot + 1, - text: methodName, - json: false - }); - } - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - if (rep) { - string += rep; - } else { - string += ch; - } - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - string: string, - json: true, - fn: function() { return string; } - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -/** - * @constructor - */ -var Parser = function (lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function () { - return 0; -}, { - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function (text, json) { - this.text = text; - - //TODO(i): strip all the obsolte json stuff from this file - this.json = json; - - this.tokens = this.lexer.lex(text); - - if (json) { - // The extra level of aliasing is here, just in case the lexer misses something, so that - // we prevent any accidental execution in JSON. - this.assignment = this.logicalOR; - - this.functionCall = - this.fieldAccess = - this.objectIndex = - this.filterChain = function() { - this.throwError('is not valid json', {text: text, index: 0}); - }; - } - - var value = json ? this.primary() : this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function () { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else { - var token = this.expect(); - primary = token.fn; - if (!primary) { - this.throwError('not a primary expression', token); - } - if (token.json) { - primary.constant = true; - primary.literal = true; - } - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - if (this.tokens.length > 0) { - var token = this.tokens[0]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4){ - var token = this.peek(e1, e2, e3, e4); - if (token) { - if (this.json && !token.json) { - this.throwError('is not valid json', token); - } - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1){ - if (!this.expect(e1)) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - }, - - unaryFn: function(fn, right) { - return extend(function(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant - }); - }, - - ternaryFn: function(left, middle, right){ - return extend(function(self, locals){ - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - }, - - binaryFn: function(left, fn, right) { - return extend(function(self, locals) { - return fn(self, locals, left, right); - }, { - constant:left.constant && right.constant - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function(self, locals) { - var value; - for (var i = 0; i < statements.length; i++) { - var statement = statements[i]; - if (statement) { - value = statement(self, locals); - } - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while (true) { - if ((token = this.expect('|'))) { - left = this.binaryFn(left, token.fn, this.filter()); - } else { - return left; - } - } - }, - - filter: function() { - var token = this.expect(); - var fn = this.$filter(token.text); - var argsFn = []; - while (true) { - if ((token = this.expect(':'))) { - argsFn.push(this.expression()); - } else { - var fnInvoke = function(self, locals, input) { - var args = [input]; - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](self, locals)); - } - return fn.apply(self, args); - }; - return function() { - return fnInvoke; - }; - } - } - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return function(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }; - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.ternary(); - if ((token = this.expect(':'))) { - return this.ternaryFn(left, middle, this.ternary()); - } else { - this.throwError('expected :', token); - } - } else { - return left; - } - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while (true) { - if ((token = this.expect('||'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } else { - return left; - } - } - }, - - logicalAND: function() { - var left = this.equality(); - var token; - if ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.fn, this.logicalAND()); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - if ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.fn, this.equality()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - if ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.fn, this.relational()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.fn, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.fn, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.fn, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.fn, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var parser = this; - var field = this.expect().text; - var getter = getterFn(field, this.options, this.text); - - return extend(function(scope, locals, self) { - return getter(self || object(scope, locals)); - }, { - assign: function(scope, value, locals) { - return setter(object(scope, locals), field, value, parser.text, parser.options); - } - }); - }, - - objectIndex: function(obj) { - var parser = this; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v, p; - - if (!o) return undefined; - v = ensureSafeObject(o[i], parser.text); - if (v && v.then && parser.options.unwrapPromises) { - p = v; - if (!('$$v' in v)) { - p.$$v = undefined; - p.then(function(val) { p.$$v = val; }); - } - v = v.$$v; - } - return v; - }, { - assign: function(self, value, locals) { - var key = indexFn(self, locals); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var safe = ensureSafeObject(obj(self, locals), parser.text); - return safe[key] = value; - } - }); - }, - - functionCall: function(fn, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var parser = this; - - return function(scope, locals) { - var args = []; - var context = contextGetter ? contextGetter(scope, locals) : scope; - - for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](scope, locals)); - } - var fnPtr = fn(scope, locals, context) || noop; - - ensureSafeObject(context, parser.text); - ensureSafeObject(fnPtr, parser.text); - - // IE stupidity! (IE doesn't have apply for some native functions) - var v = fnPtr.apply - ? fnPtr.apply(context, args) - : fnPtr(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, parser.text); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function () { - var elementFns = []; - var allConstant = true; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - var elementFn = this.expression(); - elementFns.push(elementFn); - if (!elementFn.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function(self, locals) { - var array = []; - for (var i = 0; i < elementFns.length; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: allConstant - }); - }, - - object: function () { - var keyValues = []; - var allConstant = true; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.expect(), - key = token.string || token.text; - this.consume(':'); - var value = this.expression(); - keyValues.push({key: key, value: value}); - if (!value.constant) { - allConstant = false; - } - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function(self, locals) { - var object = {}; - for (var i = 0; i < keyValues.length; i++) { - var keyValue = keyValues[i]; - object[keyValue.key] = keyValue.value(self, locals); - } - return object; - }, { - literal: true, - constant: allConstant - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp, options) { - //needed? - options = options || {}; - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - if (obj.then && options.unwrapPromises) { - promiseWarning(fullExp); - if (!("$$v" in obj)) { - (function(promise) { - promise.then(function(val) { promise.$$v = val; }); } - )(obj); - } - if (obj.$$v === undefined) { - obj.$$v = {}; - } - obj = obj.$$v; - } - } - key = ensureSafeMemberName(element.shift(), fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCache = {}; - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - - return !options.unwrapPromises - ? function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = pathVal[key0]; - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - - return pathVal; - } - : function cspSafePromiseEnabledGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, - promise; - - if (pathVal == null) return pathVal; - - pathVal = pathVal[key0]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key1]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key2]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key3]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = pathVal[key4]; - if (pathVal && pathVal.then) { - promiseWarning(fullExp); - if (!("$$v" in pathVal)) { - promise = pathVal; - promise.$$v = undefined; - promise.then(function(val) { promise.$$v = val; }); - } - pathVal = pathVal.$$v; - } - return pathVal; - }; -} - -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); - - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - }; -} - -function simpleGetterFn2(key0, key1, fullExp) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - - return function simpleGetterFn2(scope, locals) { - if (scope == null) return undefined; - scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - return scope == null ? undefined : scope[key1]; - }; -} - -function getterFn(path, options, fullExp) { - // Check whether the cache has this getter already. - // We can use hasOwnProperty directly on the cache because we ensure, - // see below, that the cache never stores a path called 'hasOwnProperty' - if (getterFnCache.hasOwnProperty(path)) { - return getterFnCache[path]; - } - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length, - fn; - - // When we have only 1 or 2 tokens, use optimized special case closures. - // http://jsperf.com/angularjs-parse-getter/6 - if (!options.unwrapPromises && pathKeysLength === 1) { - fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (!options.unwrapPromises && pathKeysLength === 2) { - fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); - } else if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, - options); - } else { - fn = function(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, options)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = 'var p;\n'; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - code += 'if(s == null) return undefined;\n' + - 's='+ (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' + - (options.unwrapPromises - ? 'if (s && s.then) {\n' + - ' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' + - ' if (!("$$v" in s)) {\n' + - ' p=s;\n' + - ' p.$$v = undefined;\n' + - ' p.then(function(v) {p.$$v=v;});\n' + - '}\n' + - ' s=s.$$v\n' + - '}\n' - : ''); - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - fn = options.unwrapPromises ? function(scope, locals) { - return evaledFnGetter(scope, locals, promiseWarning); - } : evaledFnGetter; - } - - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - if (path !== 'hasOwnProperty') { - getterFnCache[path] = fn; - } - return fn; -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @function - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = {}; - - var $parseOptions = { - csp: false, - unwrapPromises: false, - logPromiseWarnings: true - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#unwrapPromises - * @description - * - * **This feature is deprecated, see deprecation notes below for more info** - * - * If set to true (default is false), $parse will unwrap promises automatically when a promise is - * found at any part of the expression. In other words, if set to true, the expression will always - * result in a non-promise value. - * - * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled, - * the fulfillment value is used in place of the promise while evaluating the expression. - * - * **Deprecation notice** - * - * This is a feature that didn't prove to be wildly useful or popular, primarily because of the - * dichotomy between data access in templates (accessed as raw values) and controller code - * (accessed as promises). - * - * In most code we ended up resolving promises manually in controllers anyway and thus unifying - * the model access there. - * - * Other downsides of automatic promise unwrapping: - * - * - when building components it's often desirable to receive the raw promises - * - adds complexity and slows down expression evaluation - * - makes expression code pre-generation unattractive due to the amount of code that needs to be - * generated - * - makes IDE auto-completion and tool support hard - * - * **Warning Logs** - * - * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a - * promise (to reduce the noise, each expression is logged only once). To disable this logging use - * `$parseProvider.logPromiseWarnings(false)` api. - * - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.unwrapPromises = function(value) { - if (isDefined(value)) { - $parseOptions.unwrapPromises = !!value; - return this; - } else { - return $parseOptions.unwrapPromises; - } - }; - - - /** - * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future. - * - * @ngdoc method - * @name $parseProvider#logPromiseWarnings - * @description - * - * Controls whether Angular should log a warning on any encounter of a promise in an expression. - * - * The default is set to `true`. - * - * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well. - * - * @param {boolean=} value New value. - * @returns {boolean|self} Returns the current setting when used as getter and self if used as - * setter. - */ - this.logPromiseWarnings = function(value) { - if (isDefined(value)) { - $parseOptions.logPromiseWarnings = value; - return this; - } else { - return $parseOptions.logPromiseWarnings; - } - }; - - - this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) { - $parseOptions.csp = $sniffer.csp; - - promiseWarning = function promiseWarningFn(fullExp) { - if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return; - promiseWarningCache[fullExp] = true; - $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' + - 'Automatic unwrapping of promises in Angular expressions is deprecated.'); - }; - - return function(exp) { - var parsedExpression; - - switch (typeof exp) { - case 'string': - - if (cache.hasOwnProperty(exp)) { - return cache[exp]; - } - - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp, false); - - if (exp !== 'hasOwnProperty') { - // Only cache the value if it's not going to mess up the cache object - // This is more performant that using Object.prototype.hasOwnProperty.call - cache[exp] = parsedExpression; - } - - return parsedExpression; - - case 'function': - return exp; - - default: - return noop; - } - }; - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * // since this fn executes async in a future turn of the event loop, we need to wrap - * // our code into an $apply call so that the model changes are properly observed. - * scope.$apply(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }); - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as - * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to - * make your code IE8 and Android 2.x compatible. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - - -/** - * Constructs a promise manager. - * - * @param {function(Function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - - /** - * @ngdoc method - * @name $q#defer - * @function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - var pending = [], - value, deferred; - - deferred = { - - resolve: function(val) { - if (pending) { - var callbacks = pending; - pending = undefined; - value = ref(val); - - if (callbacks.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - value.then(callback[0], callback[1], callback[2]); - } - }); - } - } - }, - - - reject: function(reason) { - deferred.resolve(createInternalRejectedPromise(reason)); - }, - - - notify: function(progress) { - if (pending) { - var callbacks = pending; - - if (pending.length) { - nextTick(function() { - var callback; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - callback = callbacks[i]; - callback[2](progress); - } - }); - } - } - }, - - - promise: { - then: function(callback, errback, progressback) { - var result = defer(); - - var wrappedCallback = function(value) { - try { - result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedErrback = function(reason) { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress)); - } catch(e) { - exceptionHandler(e); - } - }; - - if (pending) { - pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]); - } else { - value.then(wrappedCallback, wrappedErrback, wrappedProgressback); - } - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback) { - - function makePromise(value, resolved) { - var result = defer(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - } - - function handleCallback(value, isResolved) { - var callbackOutput = null; - try { - callbackOutput = (callback ||defaultCallback)(); - } catch(e) { - return makePromise(e, false); - } - if (callbackOutput && isFunction(callbackOutput.then)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - } - - return this.then(function(value) { - return handleCallback(value, true); - }, function(error) { - return handleCallback(error, false); - }); - } - } - }; - - return deferred; - }; - - - var ref = function(value) { - if (value && isFunction(value.then)) return value; - return { - then: function(callback) { - var result = defer(); - nextTick(function() { - result.resolve(callback(value)); - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#reject - * @function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = defer(); - result.reject(reason); - return result.promise; - }; - - var createInternalRejectedPromise = function(reason) { - return { - then: function(callback, errback) { - var result = defer(); - nextTick(function() { - try { - result.resolve((isFunction(errback) ? errback : defaultErrback)(reason)); - } catch(e) { - result.reject(e); - exceptionHandler(e); - } - }); - return result.promise; - } - }; - }; - - - /** - * @ngdoc method - * @name $q#when - * @function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - var when = function(value, callback, errback, progressback) { - var result = defer(), - done; - - var wrappedCallback = function(value) { - try { - return (isFunction(callback) ? callback : defaultCallback)(value); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedErrback = function(reason) { - try { - return (isFunction(errback) ? errback : defaultErrback)(reason); - } catch (e) { - exceptionHandler(e); - return reject(e); - } - }; - - var wrappedProgressback = function(progress) { - try { - return (isFunction(progressback) ? progressback : defaultCallback)(progress); - } catch (e) { - exceptionHandler(e); - } - }; - - nextTick(function() { - ref(value).then(function(value) { - if (done) return; - done = true; - result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback)); - }, function(reason) { - if (done) return; - done = true; - result.resolve(wrappedErrback(reason)); - }, function(progress) { - if (done) return; - result.notify(wrappedProgressback(progress)); - }); - }); - - return result.promise; - }; - - - function defaultCallback(value) { - return value; - } - - - function defaultErrback(reason) { - return reject(reason); - } - - - /** - * @ngdoc method - * @name $q#all - * @function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - function all(promises) { - var deferred = defer(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - ref(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - return { - defer: defer, - reject: reject, - when: when, - all: all - }; -} - -function $$RAFProvider(){ //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame || - $window.mozRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.mozCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (shift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider(){ - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function( $injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - child.name = "World"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this['this'] = this.$root = this; - this.$$destroyed = false; - this.$$asyncQueue = []; - this.$$postDigestQueue = []; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = {}; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for - * debugging. - */ - - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and - * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the - * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate) { - var ChildScope, - child; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - // ensure that there is just one async queue per $rootScope and its children - child.$$asyncQueue = this.$$asyncQueue; - child.$$postDigestQueue = this.$$postDigestQueue; - } else { - ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges - // the name it does not become random set of chars. This will then show up as class - // name in the web inspector. - ChildScope.prototype = this; - child = new ChildScope(); - child.$id = nextUid(); - } - child['this'] = child; - child.$$listeners = {}; - child.$$listenerCount = {}; - child.$parent = this; - child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; - child.$$prevSibling = this.$$childTail; - if (this.$$childHead) { - this.$$childTail.$$nextSibling = child; - this.$$childTail = child; - } else { - this.$$childHead = this.$$childTail = child; - } - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). The inequality is determined according to - * {@link angular.equals} function. To save the value of the object for later comparison, - * the {@link angular.copy} function is used. It also means that watching complex options - * will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * The example below contains an illustration of using a function as your $watch listener - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - - - - // Using a listener function - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This is the listener function - function() { return food; }, - // This is the change handler - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {(function()|string)=} listener Callback called whenever the return value of - * the `watchExpression` changes. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(newValue, oldValue, scope)`: called with current and previous values as - * parameters. - * - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var scope = this, - get = compileToFn(watchExp, 'watch'), - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - // in the case user pass string, we need to compile it, do we really need this ? - if (!isFunction(listener)) { - var listenFn = compileToFn(listener || noop, 'listener'); - watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);}; - } - - if (typeof watchExp == 'string' && get.constant) { - var originalFn = watcher.fn; - watcher.fn = function(newVal, oldVal, scope) { - originalFn.call(this, newVal, oldVal, scope); - arrayRemove(array, watcher); - }; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var objGetter = $parse(obj); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionWatch() { - newValue = objGetter(self); - var newLength, key; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - var bothNaN = (oldValue[i] !== oldValue[i]) && - (newValue[i] !== newValue[i]); - if (!bothNaN && (oldValue[i] !== newValue[i])) { - changeDetected++; - oldValue[i] = newValue[i]; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - if (oldValue.hasOwnProperty(key)) { - if (oldValue[key] !== newValue[key]) { - changeDetected++; - oldValue[key] = newValue[key]; - } - } else { - oldLength++; - oldValue[key] = newValue[key]; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for(key in oldValue) { - if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch($watchCollectionWatch, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(1); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - asyncQueue = this.$$asyncQueue, - postDigestQueue = this.$$postDigestQueue, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while(asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression); - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value == 'number' && typeof last == 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - logMsg = (isFunction(watch.exp)) - ? 'fn: ' + (watch.exp.name || watch.exp.toString()) - : watch.exp; - logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last); - watchLog[logIdx].push(logMsg); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - clearPhase(); - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, toJson(watchLog)); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while(postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = null; - - // don't reset these to null in case some async task tries to register a listener/watch/task - this.$$listeners = {}; - this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; - - // prevent NPEs since these methods have references to properties we nulled out - this.$destroy = this.$digest = this.$apply = noop; - this.$on = this.$watch = function() { return noop; }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - */ - $evalAsync: function(expr) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { - $browser.defer(function() { - if ($rootScope.$$asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - this.$$asyncQueue.push({scope: this, expression: expr}); - }, - - $$postDigest : function(fn) { - this.$$postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the current scope which is handling the event. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - namedListeners[indexOf(namedListeners, listener)] = null; - decrementListenerCount(self, 1, name); - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i=0, length=namedListeners.length; i<length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) return event; - //traverse upwards - scope = scope.$parent; - } while (scope); - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i=0, length = listeners.length; i<length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch(e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while(current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - return event; - } - }; - - var $rootScope = new Scope(); - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function compileToFn(exp, name) { - var fn = $parse(exp); - assertArgFn(fn, name); - return fn; - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case. - if (!msie || msie >= 8 ) { - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:'+normalizedVal; - } - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -// Copied from: -// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962 -// Prereq: s is a string. -function escapeForRegexp(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -} - - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * <pre class="prettyprint"> - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**']); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**']); - * }); - * </pre> - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function (value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function (value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * <pre class="prettyprint"> - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"> - * </pre> - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * <pre class="prettyprint"> - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * </pre> - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead for the developer? - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) It's usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * @example -<example module="mySceApp" deps="angular-sanitize.js"> -<file name="index.html"> - <div ng-controller="myAppController as myCtrl"> - <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - <b>User comments</b><br> - By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - $sanitize is available. If $sanitize isn't available, this results in an error instead of an - exploit. - <div class="well"> - <div ng-repeat="userComment in myCtrl.userComments"> - <b>{{userComment.name}}</b>: - <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - <br> - </div> - </div> - </div> -</file> - -<file name="script.js"> - var mySceApp = angular.module('mySceApp', ['ngSanitize']); - - mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { - var self = this; - $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - self.userComments = userComments; - }); - self.explicitlyTrustedHtml = $sce.trustAsHtml( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); -</file> - -<file name="test_data.json"> -[ - { "name": "Alice", - "htmlComment": - "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - }, - { "name": "Bob", - "htmlComment": "<i>Yes!</i> Am I the only other one?" - } -] -</file> - -<file name="protractor.js" type="protractor"> - describe('SCE doc demo', function() { - it('should sanitize untrusted values', function() { - expect(element(by.css('.htmlComment')).getInnerHtml()) - .toBe('<span>Is <i>anyone</i> reading this?</span>'); - }); - - it('should NOT sanitize explicitly trusted values', function() { - expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' + - 'sanitization.&quot;">Hover over this text.</span>'); - }); - }); -</file> -</example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * <pre class="prettyprint"> - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * </pre> - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function (value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sniffer', '$sceDelegate', function( - $parse, $sniffer, $sceDelegate) { - // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = copy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function () { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parse - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return function sceParseAsTrusted(self, locals) { - return sce.getTrusted(type, parsed(self, locals)); - }; - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function (enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function (expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function (value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function (value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} hashchange Does the browser support hashchange event ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - documentMode = document.documentMode, - vendorPrefix, - vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for(var prop in bodyStyle) { - if(match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if(!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions||!animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hashchange: 'onhashchange' in $window && - // IE8 compatible mode lies - (!documentMode || documentMode > 7), - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - if (event == 'input' && msie == 9) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions : transitions, - animations : animations, - android: android, - msie : msie, - msieDocumentMode: documentMode - }; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler', - function($rootScope, $browser, $q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - skipApply = (isDefined(invokeApply) && !invokeApply), - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch(e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href, true); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url, base) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - } - </script> - <div ng-controller="Ctrl"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ -/** - * @ngdoc method - * @name $filterProvider#register - * @description - * Register filter factory function. - * - * @param {String} name Name of the filter. - * @param {Function} fn The filter factory function which is injectable. - */ - - -/** - * @ngdoc service - * @name $filter - * @function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if(isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against - * the contents of the `array`. All strings or objects with string properties in `array` that contain this string - * will be returned. The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object. That's equivalent to the simple substring match with a `string` - * as described above. - * - * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is - * called for each element of `array`. The final result is an array of those elements that - * the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var comparatorType = typeof(comparator), - predicates = []; - - predicates.check = function(value) { - for (var j = 0; j < predicates.length; j++) { - if(!predicates[j](value)) { - return false; - } - } - return true; - }; - - if (comparatorType !== 'function') { - if (comparatorType === 'boolean' && comparator) { - comparator = function(obj, text) { - return angular.equals(obj, text); - }; - } else { - comparator = function(obj, text) { - if (obj && text && typeof obj === 'object' && typeof text === 'object') { - for (var objKey in obj) { - if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && - comparator(obj[objKey], text[objKey])) { - return true; - } - } - return false; - } - text = (''+text).toLowerCase(); - return (''+obj).toLowerCase().indexOf(text) > -1; - }; - } - } - - var search = function(obj, text){ - if (typeof text == 'string' && text.charAt(0) === '!') { - return !search(obj, text.substr(1)); - } - switch (typeof obj) { - case "boolean": - case "number": - case "string": - return comparator(obj, text); - case "object": - switch (typeof text) { - case "object": - return comparator(obj, text); - default: - for ( var objKey in obj) { - if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) { - return true; - } - } - break; - } - return false; - case "array": - for ( var i = 0; i < obj.length; i++) { - if (search(obj[i], text)) { - return true; - } - } - return false; - default: - return false; - } - }; - switch (typeof expression) { - case "boolean": - case "number": - case "string": - // Set up expression object and fall through - expression = {$:expression}; - // jshint -W086 - case "object": - // jshint +W086 - for (var key in expression) { - (function(path) { - if (typeof expression[path] == 'undefined') return; - predicates.push(function(value) { - return search(path == '$' ? value : (value && value[path]), expression[path]); - }); - })(key); - } - break; - case 'function': - predicates.push(expression); - break; - default: - return array; - } - var filtered = []; - for ( var j = 0; j < array.length; j++) { - var value = array[j]; - if (predicates.check(value)) { - filtered.push(value); - } - } - return filtered; - }; -} - -/** - * @ngdoc filter - * @name currency - * @function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @returns {string} Formatted number. - * - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.amount = 1234.56; - } - </script> - <div ng-controller="Ctrl"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol){ - if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; - return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = 1234.56789; - } - </script> - <div ng-controller="Ctrl"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (number == null || !isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - numStr = '0'; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - var pow = Math.pow(10, fractionSize); - number = Math.round(number * pow) / pow; - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i)%group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i)%lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while(fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - - if (fractionSize > 0 && number > -1 && number < 1) { - formatedText = number.toFixed(fractionSize); - } - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre); - parts.push(formatedText); - parts.push(isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while(num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12 ) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in am/pm, padded (01-12) - * * `'h'`: Hour in am/pm, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) - * * `'a'`: am/pm marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 pm) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) - * - * `format` string can contain literal values. These need to be quoted with single quotes (e.g. - * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4]||0) - tzHour; - var m = int(match[5]||0) - tzMin; - var s = int(match[6]||0); - var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - if (NUMBER_STRING.test(date)) { - date = int(date); - } else { - date = jsonStringToDate(date); - } - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while(format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - forEach(parts, function(value){ - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre>{{ {'name':'value'} | json }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object) { - return toJson(object, true); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array or string, as specified by - * the value and sign (positive or negative) of `limit`. - * - * @param {Array|string} input Source array or string to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.numLimit = 3; - $scope.letterLimit = 3; - } - </script> - <div ng-controller="Ctrl"> - Limit {{numbers}} to: <input type="integer" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="integer" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - }); - - it('should update the output when -3 is entered', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('-3'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('-3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - }); - </file> - </example> - */ -function limitToFilter(){ - return function(input, limit) { - if (!isArray(input) && !isString(input)) return input; - - limit = int(limit); - - if (isString(input)) { - //NaN check on limit - if (limit) { - return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length); - } else { - return ""; - } - } - - var out = [], - i, n; - - // if abs(limit) exceeds maximum length, trim it - if (limit > input.length) - limit = input.length; - else if (limit < -input.length) - limit = -input.length; - - if (limit > 0) { - i = 0; - n = limit; - } else { - i = input.length + limit; - n = input.length; - } - - for (; i<n; i++) { - out.push(input[i]); - } - - return out; - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @function - * - * @description - * Orders a specified `array` by the `expression` predicate. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression which evaluates to an object to order by, such as 'name' - * to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control - * ascending or descending sort order (for example, +name or -name). - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}] - $scope.predicate = '-age'; - } - </script> - <div ng-controller="Ctrl"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse){ - return function(array, sortPredicate, reverseOrder) { - if (!isArray(array)) return array; - if (!sortPredicate) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; - sortPredicate = map(sortPredicate, function(predicate){ - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a,b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a,b){ - return compare(get(a),get(b)); - }, descending); - }); - var arrayCopy = []; - for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); } - return arrayCopy.sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2){ - for ( var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return toBoolean(descending) - ? function(a,b){return comp(b,a);} - : comp; - } - function compare(v1, v2){ - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 == t2) { - if (t1 == "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - - if (msie <= 8) { - - // turn <a href ng-click="..">link</a> into a stylable link in IE - // but only if it doesn't have name attribute, in which case it's an anchor - if (!attr.href && !attr.name) { - attr.$set('href', ''); - } - - // add a comment node to anchors to workaround IE bug that causes element content to be reset - // to new attribute content if attribute is updated with value containing @ and element also - // contains value with @ - // see issue #1949 - element.append(document.createComment('IE fix')); - } - - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event){ - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. - * - * The `ngHref` directive solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 1000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 1000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) - return; - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl */ -var nullFormCtrl = { - $addControl: noop, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop -}; - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * - * @property {Object} $error Is an object hash, containing references to all invalid controls or - * forms, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that are invalid for given error name. - * - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate']; -function FormController(element, attrs, $scope, $animate) { - var form = this, - parentForm = element.parent().controller('form') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - errors = form.$error = {}, - controls = []; - - // init state - form.$name = attrs.name || attrs.ngForm; - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - - parentForm.$addControl(form); - - // Setup initial state of the control - element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(errors, function(queue, validationToken) { - form.$setValidity(validationToken, true, control); - }); - - arrayRemove(controls, control); - }; - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - form.$setValidity = function(validationToken, isValid, control) { - var queue = errors[validationToken]; - - if (isValid) { - if (queue) { - arrayRemove(queue, control); - if (!queue.length) { - invalidCount--; - if (!invalidCount) { - toggleValidCss(isValid); - form.$valid = true; - form.$invalid = false; - } - errors[validationToken] = false; - toggleValidCss(true, validationToken); - parentForm.$setValidity(validationToken, true, form); - } - } - - } else { - if (!invalidCount) { - toggleValidCss(isValid); - } - if (queue) { - if (includes(queue, control)) return; - } else { - errors[validationToken] = queue = []; - invalidCount++; - toggleValidCss(false, validationToken); - parentForm.$setValidity(validationToken, false, form); - } - queue.push(control); - - form.$valid = false; - form.$invalid = true; - } - }; - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function () { - $animate.removeClass(element, DIRTY_CLASS); - $animate.addClass(element, PRISTINE_CLASS); - form.$dirty = false; - form.$pristine = true; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; -} - - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.userType = 'guest'; - } - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="Ctrl" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function() { - return { - pre: function(scope, formElement, attr, controller) { - if (!attr.action) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var preventDefaultListener = function(event) { - event.preventDefault - ? event.preventDefault() - : event.returnValue = false; // IE - }; - - addEventListenerFn(formElement[0], 'submit', preventDefaultListener); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); - }, 0, false); - }); - } - - var parentFormCtrl = formElement.parent().controller('form'), - alias = attr.name || attr.ngForm; - - if (alias) { - setter(scope, alias, controller, alias); - } - if (parentFormCtrl) { - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global - - -VALID_CLASS, - -INVALID_CLASS, - -PRISTINE_CLASS, - -DIRTY_CLASS -*/ - -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * - * @example - <example name="text-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'guest'; - $scope.word = /^\s*\w*\s*$/; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Single word: <input type="text" name="input" ng-model="text" - ng-pattern="word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value = 12; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Number: <input type="number" name="input" ng-model="value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'http://google.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - URL: <input type="url" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.text = 'me@example.com'; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Email: <input type="email" name="input" ng-model="text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.color = 'blue'; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - <input type="radio" ng-model="color" value="red"> Red <br/> - <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color" value="blue"> Blue <br/> - <tt>color = {{color | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngTrueValue The value to which the expression should be set when selected. - * @param {string=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.value1 = true; - $scope.value2 = 'YES' - } - </script> - <form name="myForm" ng-controller="Ctrl"> - Value1: <input type="checkbox" ng-model="value1"> <br/> - Value2: <input type="checkbox" ng-model="value2" - ng-true-value="YES" ng-false-value="NO"> <br/> - <tt>value1 = {{value1}}</tt><br/> - <tt>value2 = {{value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('value1')); - var value2 = element(by.binding('value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('value1')).click(); - element(by.model('value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -// A helper function to call $setValidity and return the value / undefined, -// a pattern that is repeated a lot in the input validation logic. -function validate(ctrl, validatorName, validity, value){ - ctrl.$setValidity(validatorName, validity); - return validity ? value : undefined; -} - - -function addNativeHtml5Validators(ctrl, validatorName, element) { - var validity = element.prop('validity'); - if (isObject(validity)) { - var validator = function(value) { - // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can - // perform the required validation) - if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError || - validity.typeMismatch) && !validity.valueMissing) { - ctrl.$setValidity(validatorName, false); - return; - } - return value; - }; - ctrl.$parsers.push(validator); - } -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var validity = element.prop('validity'); - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function() { - if (composing) return; - var value = element.val(); - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // e.g. <input ng-model="foo" ng-trim="false"> - if (toBoolean(attr.ngTrim || 'T')) { - value = trim(value); - } - - if (ctrl.$viewValue !== value || - // If the value is still empty/falsy, and there is no `required` error, run validators - // again. This enables HTML5 constraint validation errors to affect Angular validation - // even when the first character entered causes an error. - (validity && value === '' && !validity.valueMissing)) { - if (scope.$$phase) { - ctrl.$setViewValue(value); - } else { - scope.$apply(function() { - ctrl.$setViewValue(value); - }); - } - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function() { - if (!timeout) { - timeout = $browser.defer(function() { - listener(); - timeout = null; - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; - - // pattern validator - var pattern = attr.ngPattern, - patternValidator, - match; - - if (pattern) { - var validateRegex = function(regexp, value) { - return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); - }; - match = pattern.match(/^\/(.*)\/([gim]*)$/); - if (match) { - pattern = new RegExp(match[1], match[2]); - patternValidator = function(value) { - return validateRegex(pattern, value); - }; - } else { - patternValidator = function(value) { - var patternObj = scope.$eval(pattern); - - if (!patternObj || !patternObj.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, - patternObj, startingTag(element)); - } - return validateRegex(patternObj, value); - }; - } - - ctrl.$formatters.push(patternValidator); - ctrl.$parsers.push(patternValidator); - } - - // min length validator - if (attr.ngMinlength) { - var minlength = int(attr.ngMinlength); - var minLengthValidator = function(value) { - return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value); - }; - - ctrl.$parsers.push(minLengthValidator); - ctrl.$formatters.push(minLengthValidator); - } - - // max length validator - if (attr.ngMaxlength) { - var maxlength = int(attr.ngMaxlength); - var maxLengthValidator = function(value) { - return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); - }; - - ctrl.$parsers.push(maxLengthValidator); - ctrl.$formatters.push(maxLengthValidator); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$parsers.push(function(value) { - var empty = ctrl.$isEmpty(value); - if (empty || NUMBER_REGEXP.test(value)) { - ctrl.$setValidity('number', true); - return value === '' ? null : (empty ? value : parseFloat(value)); - } else { - ctrl.$setValidity('number', false); - return undefined; - } - }); - - addNativeHtml5Validators(ctrl, 'number', element); - - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? '' : '' + value; - }); - - if (attr.min) { - var minValidator = function(value) { - var min = parseFloat(attr.min); - return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); - }; - - ctrl.$parsers.push(minValidator); - ctrl.$formatters.push(minValidator); - } - - if (attr.max) { - var maxValidator = function(value) { - var max = parseFloat(attr.max); - return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); - }; - - ctrl.$parsers.push(maxValidator); - ctrl.$formatters.push(maxValidator); - } - - ctrl.$formatters.push(function(value) { - return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); - }); -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var urlValidator = function(value) { - return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(urlValidator); - ctrl.$parsers.push(urlValidator); -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var emailValidator = function(value) { - return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); - }; - - ctrl.$formatters.push(emailValidator); - ctrl.$parsers.push(emailValidator); -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - element.on('click', function() { - if (element[0].checked) { - scope.$apply(function() { - ctrl.$setViewValue(attr.value); - }); - } - }); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function checkboxInputType(scope, element, attr, ctrl) { - var trueValue = attr.ngTrueValue, - falseValue = attr.ngFalseValue; - - if (!isString(trueValue)) trueValue = true; - if (!isString(falseValue)) falseValue = false; - - element.on('click', function() { - scope.$apply(function() { - ctrl.$setViewValue(element[0].checked); - }); - }); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox. - ctrl.$isEmpty = function(value) { - return value !== trueValue; - }; - - ctrl.$formatters.push(function(value) { - return value === trueValue; - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control with angular data-binding. Input control follows HTML5 input types - * and polyfills the HTML5 validation behavior for older browsers. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="input-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - } - </script> - <div ng-controller="Ctrl"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.binding('{{user}}')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { - return { - restrict: 'E', - require: '?ngModel', - link: function(scope, element, attr, ctrl) { - if (ctrl) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, - $browser); - } - } - }; -}]; - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty'; - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. Each function is called, in turn, passing the value - through to the next. The last return value is used to populate the model. - Used to sanitize / convert the value as well as validation. For validation, - the parsers should update the validity state using - {@link ngModel.NgModelController#$setValidity $setValidity()}, - and return `undefined` for invalid values. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. Each function is called, in turn, passing the value through to the - next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all errors as keys. - * - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * - * @description - * - * `NgModelController` provides API for the `ng-model` directive. The controller contains - * services for data-binding, validation, CSS updates, and value formatting and parsing. It - * purposefully does not contain any logic which deals with DOM rendering or listening to - * DOM events. Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding. - * - * ## Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * <example name="NgModelController" module="customControl"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', []). - directive('contenteditable', function() { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if(!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html(ngModel.$viewValue || ''); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$apply(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$name = $attr.name; - - var ngModelGet = $parse($attr.ngModel), - ngModelSet = ngModelGet.assign; - - if (!ngModelSet) { - throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of the input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is empty. - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - invalidCount = 0, // used to easily determine if we are valid - $error = this.$error = {}; // keep invalid keys here - - - // Setup initial state of the control - $element.addClass(PRISTINE_CLASS); - toggleValidCss(true); - - // convenience method for easy toggling of classes - function toggleValidCss(isValid, validationErrorKey) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); - } - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notifies the form when the control changes validity. (i.e. it - * does not notify form if given validator is already marked as invalid). - * - * This method should be called by validators - i.e. the parser or formatter functions. - * - * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign - * to `$error[validationErrorKey]=isValid` so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true) or invalid (false). - */ - this.$setValidity = function(validationErrorKey, isValid) { - // Purposeful use of ! here to cast isValid to boolean in case it is undefined - // jshint -W018 - if ($error[validationErrorKey] === !isValid) return; - // jshint +W018 - - if (isValid) { - if ($error[validationErrorKey]) invalidCount--; - if (!invalidCount) { - toggleValidCss(true); - this.$valid = true; - this.$invalid = false; - } - } else { - toggleValidCss(false); - this.$invalid = true; - this.$valid = false; - invalidCount++; - } - - $error[validationErrorKey] = !isValid; - toggleValidCss(isValid, validationErrorKey); - - parentForm.$setValidity(validationErrorKey, isValid, this); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the control to its pristine - * state (ng-pristine class). - */ - this.$setPristine = function () { - this.$dirty = false; - this.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when the view value changes, typically from within a DOM event handler. - * For example {@link ng.directive:input input} and - * {@link ng.directive:select select} directives call it. - * - * It will update the $viewValue, then pass this value through each of the functions in `$parsers`, - * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to - * `$modelValue` and the **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - */ - this.$setViewValue = function(value) { - this.$viewValue = value; - - // change to dirty - if (this.$pristine) { - this.$dirty = true; - this.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - } - - forEach(this.$parsers, function(fn) { - value = fn(value); - }); - - if (this.$modelValue !== value) { - this.$modelValue = value; - ngModelSet($scope, value); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch(e) { - $exceptionHandler(e); - } - }); - } - }; - - // model -> value - var ctrl = this; - - $scope.$watch(function ngModelWatch() { - var value = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - if (ctrl.$modelValue !== value) { - - var formatters = ctrl.$formatters, - idx = formatters.length; - - ctrl.$modelValue = value; - while(idx--) { - value = formatters[idx](value); - } - - if (ctrl.$viewValue !== value) { - ctrl.$viewValue = value; - ctrl.$render(); - } - } - - return value; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [https://github.com/angular/angular.js/wiki/Understanding-Scopes] - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid` is set if the model is valid. - * - `ng-invalid` is set if the model is invalid. - * - `ng-pristine` is set if the model is pristine. - * - `ng-dirty` is set if the model is dirty. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.val = '1'; - } - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="Ctrl"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - */ -var ngModelDirective = function() { - return { - require: ['ngModel', '^?form'], - controller: NgModelController, - link: function(scope, element, attr, ctrls) { - // notify others, especially parent forms - - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - formCtrl.$addControl(modelCtrl); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * The expression is not evaluated when the value change is coming from the model. - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive"> - * <file name="index.html"> - * <script> - * function Controller($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * } - * </script> - * <div ng-controller="Controller"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - - -var requiredDirective = function() { - return { - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - var validator = function(value) { - if (attr.required && ctrl.$isEmpty(value)) { - ctrl.$setValidity('required', false); - return; - } else { - ctrl.$setValidity('required', true); - return value; - } - }; - - ctrl.$formatters.push(validator); - ctrl.$parsers.unshift(validator); - - attr.$observe('required', function() { - validator(ctrl.$viewValue); - }); - } - }; -}; - - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The delimiter - * can be a fixed string (by default a comma) or a regular expression. - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. If - * specified in form `/something/` then the value will be converted into a regular expression. - * - * @example - <example name="ngList-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['igor', 'misko', 'vojta']; - } - </script> - <form name="myForm" ng-controller="Ctrl"> - List: <input name="namesInput" ng-model="names" ng-list required> - <span class="error" ng-show="myForm.namesInput.$error.required"> - Required!</span> - <br> - <tt>names = {{names}}</tt><br/> - <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var listInput = element(by.model('names')); - var names = element(by.binding('{{names}}')); - var valid = element(by.binding('myForm.namesInput.$valid')); - var error = element(by.css('span.error')); - - it('should initialize to model', function() { - expect(names.getText()).toContain('["igor","misko","vojta"]'); - expect(valid.getText()).toContain('true'); - expect(error.getCssValue('display')).toBe('none'); - }); - - it('should be invalid if empty', function() { - listInput.clear(); - listInput.sendKeys(''); - - expect(names.getText()).toContain(''); - expect(valid.getText()).toContain('false'); - expect(error.getCssValue('display')).not.toBe('none'); }); - </file> - </example> - */ -var ngListDirective = function() { - return { - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var match = /\/(.*)\//.exec(attr.ngList), - separator = match && new RegExp(match[1]) || attr.ngList || ','; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trim(value)); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(', '); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `input[select]` or `input[radio]`, so - * that when the element is selected, the `ngModel` of that element is set to the - * bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as - * shown below. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - } - </script> - <form ng-controller="Ctrl"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.name = 'Whirled'; - } - </script> - <div ng-controller="Ctrl"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ngDirective(function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBind); - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - // We are purposefully using == here rather than === because we want to - // catch when value is "null or undefined" - // jshint -W041 - element.text(value == undefined ? '' : value); - }); -}); - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - } - </script> - <div ng-controller="Ctrl"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', function($interpolate) { - return function(scope, element, attr) { - // TODO: move this to scenario runner - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - element.addClass('ng-binding').data('$binding', interpolateFn); - attr.$observe('ngBindTemplate', function(value) { - element.text(value); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link - * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` - * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in - * core Angular.) You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - Try it here: enter text in text box and watch the greeting change. - - <example module="ngBindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ngBindHtmlCtrl"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('ngBindHtmlExample', ['ngSanitize']) - - .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with <a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); - - var parsed = $parse(attr.ngBindHtml); - function getStringValue() { return (parsed(scope) || '').toString(); } - - scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { - element.html($sce.getTrustedHtml(parsed(scope)) || ''); - }); - }; -}]; - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== old$index & 1) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts (classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function (className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses (oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toRemove = digestClassCounts(toRemove, -1); - toAdd = digestClassCounts(toAdd, 1); - - if (toAdd.length === 0) { - $animate.removeClass(element, toRemove); - } else if (toRemove.length === 0) { - $animate.addClass(element, toAdd); - } else { - $animate.setClass(element, toAdd, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = copy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for(var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for(var j = 0; j < tokens2.length; j++) { - if(token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses (classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = [], i = 0; - forEach(classVal, function(v, k) { - if (v) { - classes.push(k); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * add - happens just before the class is applied to the element - * remove - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and - {@link ngAnimate.$animate#removeclass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} &nbsp; &nbsp; &nbsp; - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @param {expression} ngController Name of a globally accessible constructor function or an - * {@link guide/expression expression} that on the current scope evaluates to a - * constructor function. The controller instance can be published into a scope property - * by specifying `as propertyName`. - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Notice that the scope becomes the `this` for the - * controller's instance. This allows for easy access to the view data from the controller. Also - * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. The example is shown in two different declaration styles you may use - * according to preference. - <example> - <file name="index.html"> - <script> - function SettingsController1() { - this.name = "John Smith"; - this.contacts = [ - {type: 'phone', value: '408 555 1212'}, - {type: 'email', value: 'john.smith@example.org'} ]; - }; - - SettingsController1.prototype.greet = function() { - alert(this.name); - }; - - SettingsController1.prototype.addContact = function() { - this.contacts.push({type: 'email', value: 'yourname@example.org'}); - }; - - SettingsController1.prototype.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - SettingsController1.prototype.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - </script> - <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - Name: <input type="text" ng-model="settings.name"/> - [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in settings.contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller as', function() { - var container = element(by.id('ctrl-as-exmpl')); - - expect(container.findElement(by.model('settings.name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - <example> - <file name="index.html"> - <script> - function SettingsController2($scope) { - $scope.name = "John Smith"; - $scope.contacts = [ - {type:'phone', value:'408 555 1212'}, - {type:'email', value:'john.smith@example.org'} ]; - - $scope.greet = function() { - alert(this.name); - }; - - $scope.addContact = function() { - this.contacts.push({type:'email', value:'yourname@example.org'}); - }; - - $scope.removeContact = function(contactToRemove) { - var index = this.contacts.indexOf(contactToRemove); - this.contacts.splice(index, 1); - }; - - $scope.clearContact = function(contact) { - contact.type = 'phone'; - contact.value = ''; - }; - } - </script> - <div id="ctrl-exmpl" ng-controller="SettingsController2"> - Name: <input type="text" ng-model="name"/> - [ <a href="" ng-click="greet()">greet</a> ]<br/> - Contact: - <ul> - <li ng-repeat="contact in contacts"> - <select ng-model="contact.type"> - <option>phone</option> - <option>email</option> - </select> - <input type="text" ng-model="contact.value"/> - [ <a href="" ng-click="clearContact(contact)">clear</a> - | <a href="" ng-click="removeContact(contact)">X</a> ] - </li> - <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - </ul> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check controller', function() { - var container = element(by.id('ctrl-exmpl')); - - expect(container.findElement(by.model('name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - </file> - </example> - - */ -var ngControllerDirective = [function() { - return { - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For us to be compatible, we just need to implement the "getterFn" in $parse without violating - * any of these restrictions. - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * In order to use this feature put the `ngCsp` directive on the root element of the application. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap -// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute -// anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - count: {{count}} - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A directive that allows creation of custom onclick handlers that are defined as angular - * expressions and are compiled and executed within the current scope. - * - * Events that are handled via these handler are always configured not to propagate further. - */ -var ngEventDirectives = {}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(name) { - var directiveName = directiveNormalize('ng-' + name); - ngEventDirectives[directiveName] = ['$parse', function($parse) { - return { - compile: function($element, attr) { - var fn = $parse(attr[directiveName]); - return function(scope, element, attr) { - element.on(lowercase(name), function(event) { - scope.$apply(function() { - fn(scope, {$event:event}); - }); - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keyup="count = count + 1" ng-init="count=0"> - key up count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - } - </script> - <form ng-submit="submit()" ng-controller="Ctrl"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.input('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container - * leave - happens just before the ngIf contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - I'm removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function ($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (toBoolean(value)) { - if (!childScope) { - childScope = $scope.$new(); - $transclude(childScope, function (clone) { - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if(previousElements) { - previousElements.remove(); - previousElements = null; - } - if(childScope) { - childScope.$destroy(); - childScope = null; - } - if(block) { - previousElements = getBlockElements(block.clone); - $animate.leave(previousElements, function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <tt>{{template.url}}</tt> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - } - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.element.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - */ -var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce', - function($http, $templateCache, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if(previousElement) { - previousElement.remove(); - previousElement = null; - } - if(currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if(currentElement) { - $animate.leave(currentElement, function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element, afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); - }).error(function() { - if (thisChangeId === changeCounter) cleanupLastIncludeContent(); - }); - scope.$emit('$includeContentRequested'); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * <div ng-init="test1 = (data | orderBy:'name')"></div> - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - } - </script> - <div ng-controller="Ctrl"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - } - </script> - <div ng-controller="Ctrl"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g; - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - isWhen = /^when(Minus)?(.+)$/; - - forEach(attr, function(expression, attributeName) { - if (isWhen.test(attributeName)) { - whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = - element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = - $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + - offset + endSymbol)); - }); - - scope.$watch(function ngPluralizeWatch() { - var value = parseFloat(scope.$eval(numberExp)); - - if (!isNaN(value)) { - //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise, - //check it against pluralization rules in $locale service - if (!(value in whens)) value = $locale.pluralCat(value - offset); - return whensExpFns[value](scope, element, true); - } else { - return ''; - } - }, function ngPluralizeWatchAction(newVal) { - element.text(newVal); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - return { - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude){ - var expression = $attr.ngRepeat; - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/), - trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, - lhs, rhs, valueIdentifier, keyIdentifier, - hashFnLocals = {$id: hashKey}; - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - lhs = match[1]; - rhs = match[2]; - trackByExp = match[3]; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - valueIdentifier = match[3] || match[1]; - keyIdentifier = match[2]; - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - var lastBlockMap = {}; - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection){ - var index, length, - previousNode = $element[0], // current position of the node - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = {}, - arrayLength, - childScope, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder = [], - elementsToRemove; - - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (key in collection) { - if (collection.hasOwnProperty(key) && key.charAt(0) != '$') { - collectionKeys.push(key); - } - } - collectionKeys.sort(); - } - - arrayLength = collectionKeys.length; - - // locate existing items - length = nextBlockOrder.length = collectionKeys.length; - for(index = 0; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - assertNotHasOwnProperty(trackById, '`track by` id'); - if(lastBlockMap.hasOwnProperty(trackById)) { - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap.hasOwnProperty(trackById)) { - // restore lastBlockMap - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - // This is a duplicate and we need to throw an error - throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", - expression, trackById); - } else { - // new never before seen block - nextBlockOrder[index] = { id: trackById }; - nextBlockMap[trackById] = false; - } - } - - // remove existing items - for (key in lastBlockMap) { - // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn - if (lastBlockMap.hasOwnProperty(key)) { - block = lastBlockMap[key]; - elementsToRemove = getBlockElements(block.clone); - $animate.leave(elementsToRemove); - forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; }); - block.scope.$destroy(); - } - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0, length = collectionKeys.length; index < length; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]); - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - childScope = block.scope; - - nextNode = previousNode; - do { - nextNode = nextNode.nextSibling; - } while(nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockElements(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - } else { - // new item which we don't know about - childScope = $scope.$new(); - } - - childScope[valueIdentifier] = value; - if (keyIdentifier) childScope[keyIdentifier] = key; - childScope.$index = index; - childScope.$first = (index === 0); - childScope.$last = (index === (arrayLength - 1)); - childScope.$middle = !(childScope.$first || childScope.$last); - // jshint bitwise: false - childScope.$odd = !(childScope.$even = (index&1) === 0); - // jshint bitwise: true - - if (!block.scope) { - $transclude(childScope, function(clone) { - clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' '); - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = clone; - block.scope = childScope; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - }); - } - } - lastBlockMap = nextBlockMap; - }); - } - }; - - function getBlockStart(block) { - return block.clone[0]; - } - - function getBlockEnd(block) { - return block.clone[block.clone.length - 1]; - } -}]; - -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the ngShow attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When true, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngShow - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-show { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-show.ng-hide-add, - .animate-show.ng-hide-remove { - display:block!important; - } - - .animate-show.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value){ - $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); - }); - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the ngHide attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * ``` - * - * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When false, the ng-hide CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding .ng-hide - * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: - * ```css - * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * - * //this is just another form of hiding an element - * position:absolute; - * top:-9999px; - * left:-9999px; - * } - * ``` - * - * Just remember to include the important flag so the CSS override will function. - * - * <div class="alert alert-warning"> - * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br /> - * "f" / "0" / "false" / "no" / "n" / "[]" - * </div> - * - * ## A note about animations with ngHide - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that - * you must also include the !important flag to override the display property so - * that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition:0.5s linear all; - * display:block!important; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * @animations - * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - line-height:20px; - opacity:1; - padding:10px; - border:1px solid black; - background:white; - } - - .animate-hide.ng-hide-add, - .animate-hide.ng-hide-remove { - display:block!important; - } - - .animate-hide.ng-hide { - line-height:0; - opacity:0; - padding:0 10px; - } - - .check-element { - padding:10px; - border:1px solid black; - background:white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value){ - $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); - }); - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set" ng-click="myStyle={color:'red'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=set]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }, true); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * - * - * @scope - * @priority 800 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="Ctrl"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - function Ctrl($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - } - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.element.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.element.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes, - selectedElements, - previousElements, - selectedScopes = []; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii = selectedScopes.length; - if(ii > 0) { - if(previousElements) { - for (i = 0; i < ii; i++) { - previousElements[i].remove(); - } - previousElements = null; - } - - previousElements = []; - for (i= 0; i<ii; i++) { - var selected = selectedElements[i]; - selectedScopes[i].$destroy(); - previousElements[i] = selected; - $animate.leave(selected, function() { - previousElements.splice(i, 1); - if(previousElements.length === 0) { - previousElements = null; - } - }); - } - } - - selectedElements = []; - selectedScopes = []; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - scope.$eval(attr.change); - forEach(selectedTranscludes, function(selectedTransclude) { - var selectedScope = scope.$new(); - selectedScopes.push(selectedScope); - selectedTransclude.transclude(selectedScope, function(caseElement) { - var anchor = selectedTransclude.element; - - selectedElements.push(caseElement); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 800, - require: '^ngSwitch', - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict AC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transclude"> - <file name="index.html"> - <script> - function Ctrl($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - } - - angular.module('transclude', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<div ng-transclude></div>' + - '</div>' - }; - }); - </script> - <div ng-controller="Ctrl"> - <input ng-model="title"><br> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension_expression. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead - * of {@link ng.directive:ngRepeat ngRepeat} when you want the - * `select` model to be bound to a non-string value. This is because an option element can only - * be bound to string values at present. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). - * - * @example - <example> - <file name="index.html"> - <script> - function MyCntrl($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.color = $scope.colors[2]; // red - } - </script> - <div ng-controller="MyCntrl"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="color" ng-options="c.name for c in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="color" ng-options="c.name for c in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="color" ng-options="c.name group by c.shade for c in colors"> - </select><br/> - - - Select <a href ng-click="color={name:'not in list'}">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:color} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':color.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red'); - element.all(by.select('color')).first().click(); - element.all(by.css('select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="color"]')).click(); - element.all(by.css('.nullable select[ng-model="color"] option')).first().click(); - expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ terminal: true }); -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue == value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = copy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]]; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', function() { - scope.$apply(function() { - var optionGroup, - collection = valuesFn(scope) || [], - locals = {}, - key, value, optionElement, index, groupIndex, length, groupLength, trackIndex; - - if (multiple) { - value = []; - for (groupIndex = 0, groupLength = optionGroupsCache.length; - groupIndex < groupLength; - groupIndex++) { - // list of options for that group. (first item has the parent) - optionGroup = optionGroupsCache[groupIndex]; - - for(index = 1, length = optionGroup.length; index < length; index++) { - if ((optionElement = optionGroup[index].element)[0].selected) { - key = optionElement.val(); - if (keyName) locals[keyName] = key; - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) break; - } - } else { - locals[valueName] = collection[key]; - } - value.push(valueFn(scope, locals)); - } - } - } - } else { - key = selectElement.val(); - if (key == '?') { - value = undefined; - } else if (key === ''){ - value = null; - } else { - if (trackFn) { - for (trackIndex = 0; trackIndex < collection.length; trackIndex++) { - locals[valueName] = collection[trackIndex]; - if (trackFn(scope, locals) == key) { - value = valueFn(scope, locals); - break; - } - } - } else { - locals[valueName] = collection[key]; - if (keyName) locals[keyName] = key; - value = valueFn(scope, locals); - } - } - // Update the null option's selected property here so $render cleans it up correctly - if (optionGroupsCache[0].length > 1) { - if (optionGroupsCache[0][1].id !== key) { - optionGroupsCache[0][1].selected = false; - } - } - } - ctrl.$setViewValue(value); - }); - }); - - ctrl.$render = render; - - // TODO(vojta): can't we optimize this ? - scope.$watch(render); - - function render() { - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - modelValue = ctrl.$modelValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - groupLength, length, - groupIndex, index, - locals = {}, - selected, - selectedSet = false, // nothing is selected yet - lastElement, - element, - label; - - if (multiple) { - if (trackFn && isArray(modelValue)) { - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { - locals[valueName] = modelValue[trackIndex]; - selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); - } - } else { - selectedSet = new HashMap(modelValue); - } - } - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - - key = index; - if (keyName) { - key = keys[index]; - if ( key.charAt(0) === '$' ) continue; - locals[keyName] = key; - } - - locals[valueName] = values[key]; - - optionGroupName = groupByFn(scope, locals) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - if (multiple) { - selected = isDefined( - selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) - ); - } else { - if (trackFn) { - var modelCast = {}; - modelCast[valueName] = modelValue; - selected = trackFn(scope, modelCast) === trackFn(scope, locals); - } else { - selected = modelValue === valueFn(scope, locals); - } - selectedSet = selectedSet || selected; // see if at least one item is selected - } - label = displayFn(scope, locals); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionGroup.push({ - // either the index into array or key from object - id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || modelValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!selectedSet}); - } else if (!selectedSet) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for(index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index+1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - lastElement.text(existingOption.label = option.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (existingOption.selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .attr('selected', option.selected) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while(existingOptions.length > index) { - existingOptions.pop().element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while(optionGroupsCache.length > groupIndex) { - optionGroupsCache.pop()[0].element.remove(); - } - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function (scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (selectCtrl && selectCtrl.databound) { - // For some reason Opera defaults to true and if not overridden this messes up the repeater. - // We don't want the view to drive the initialization of the model anyway. - element.prop('selected', false); - } else { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (newVal !== oldVal) selectCtrl.removeOption(oldVal); - selectCtrl.addOption(newVal); - }); - } else { - selectCtrl.addOption(attr.value); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: true -}); - - if (window.angular.bootstrap) { - //AngularJS is already loaded, so we can return here... - console.log('WARNING: Tried to load angular more than once.'); - return; - } - - //try to bind to jquery now so that one can write angular.element().read() - //but we will rebind on bootstrap again. - bindJQuery(); - - publishExternalAPI(angular); - - jqLite(document).ready(function() { - angularInit(document, bootstrap); - }); - -})(window, document); - -!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>'); \ No newline at end of file diff --git a/platforms/browser/www/lib/angular/angular.min.js b/platforms/browser/www/lib/angular/angular.min.js deleted file mode 100644 index 43f31f67..00000000 --- a/platforms/browser/www/lib/angular/angular.min.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - AngularJS v1.2.16 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(O,U,s){'use strict';function t(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.16/"+(b?b+"/":"")+a;for(c=1;c<arguments.length;c++)a=a+(1==c?"?":"&")+"p"+(c-1)+"="+encodeURIComponent("function"==typeof arguments[c]?arguments[c].toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof arguments[c]?"undefined":"string"!=typeof arguments[c]?JSON.stringify(arguments[c]):arguments[c]);return Error(a)}}function ab(b){if(null==b||Ca(b))return!1; -var a=b.length;return 1===b.nodeType&&a?!0:w(b)||M(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function q(b,a,c){var d;if(b)if(P(b))for(d in b)"prototype"==d||("length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d))||a.call(c,b[d],d);else if(b.forEach&&b.forEach!==q)b.forEach(a,c);else if(ab(b))for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d);return b}function Qb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function Sc(b, -a,c){for(var d=Qb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function Rb(b){return function(a,c){b(c,a)}}function bb(){for(var b=ka.length,a;b;){b--;a=ka[b].charCodeAt(0);if(57==a)return ka[b]="A",ka.join("");if(90==a)ka[b]="0";else return ka[b]=String.fromCharCode(a+1),ka.join("")}ka.unshift("0");return ka.join("")}function Sb(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function D(b){var a=b.$$hashKey;q(arguments,function(a){a!==b&&q(a,function(a,c){b[c]=a})});Sb(b,a);return b}function Y(b){return parseInt(b, -10)}function Tb(b,a){return D(new (D(function(){},{prototype:b})),a)}function C(){}function Da(b){return b}function aa(b){return function(){return b}}function E(b){return"undefined"===typeof b}function B(b){return"undefined"!==typeof b}function X(b){return null!=b&&"object"===typeof b}function w(b){return"string"===typeof b}function vb(b){return"number"===typeof b}function Na(b){return"[object Date]"===wa.call(b)}function M(b){return"[object Array]"===wa.call(b)}function P(b){return"function"===typeof b} -function cb(b){return"[object RegExp]"===wa.call(b)}function Ca(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function Tc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Uc(b,a,c){var d=[];q(b,function(b,g,f){d.push(a.call(c,b,g,f))});return d}function db(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Oa(b,a){var c=db(b,a);0<=c&&b.splice(c,1);return a}function ba(b,a){if(Ca(b)||b&&b.$evalAsync&&b.$watch)throw Pa("cpws"); -if(a){if(b===a)throw Pa("cpi");if(M(b))for(var c=a.length=0;c<b.length;c++)a.push(ba(b[c]));else{c=a.$$hashKey;q(a,function(b,c){delete a[c]});for(var d in b)a[d]=ba(b[d]);Sb(a,c)}}else(a=b)&&(M(b)?a=ba(b,[]):Na(b)?a=new Date(b.getTime()):cb(b)?a=RegExp(b.source):X(b)&&(a=ba(b,{})));return a}function Ub(b,a){a=a||{};for(var c in b)!b.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(a[c]=b[c]);return a}function xa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0; -var c=typeof b,d;if(c==typeof a&&"object"==c)if(M(b)){if(!M(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!xa(b[d],a[d]))return!1;return!0}}else{if(Na(b))return Na(a)&&b.getTime()==a.getTime();if(cb(b)&&cb(a))return b.toString()==a.toString();if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&a.$watch||Ca(b)||Ca(a)||M(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!P(b[d])){if(!xa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==s&&!P(a[d]))return!1; -return!0}return!1}function Vb(){return U.securityPolicy&&U.securityPolicy.isActive||U.querySelector&&!(!U.querySelector("[ng-csp]")&&!U.querySelector("[data-ng-csp]"))}function eb(b,a){var c=2<arguments.length?ya.call(arguments,2):[];return!P(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,c.concat(ya.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Vc(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)?c= -s:Ca(a)?c="$WINDOW":a&&U===a?c="$DOCUMENT":a&&(a.$evalAsync&&a.$watch)&&(c="$SCOPE");return c}function qa(b,a){return"undefined"===typeof b?s:JSON.stringify(b,Vc,a?" ":null)}function Wb(b){return w(b)?JSON.parse(b):b}function Qa(b){"function"===typeof b?b=!0:b&&0!==b.length?(b=K(""+b),b=!("f"==b||"0"==b||"false"==b||"no"==b||"n"==b||"[]"==b)):b=!1;return b}function ha(b){b=y(b).clone();try{b.empty()}catch(a){}var c=y("<div>").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, -function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function Xb(b){try{return decodeURIComponent(b)}catch(a){}}function Yb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Xb(c[0]),B(d)&&(b=B(c[1])?Xb(c[1]):!0,a[d]?M(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Zb(b){var a=[];q(b,function(b,d){M(b)?q(b,function(b){a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))}):a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))});return a.length?a.join("&"):""}function wb(b){return za(b, -!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function za(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Wc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(U.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+ -a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function $b(b,a){var c=function(){b=y(b);if(b.injector()){var c=b[0]===U?"document":ha(b);throw Pa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=ac(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", -function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(O&&!d.test(O.name))return c();O.name=O.name.replace(d,"");Ea.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function fb(b,a){a=a||"_";return b.replace(Xc,function(b,d){return(d?a:"")+b.toLowerCase()})}function xb(b,a,c){if(!b)throw Pa("areq",a||"?",c||"required");return b}function Ra(b,a,c){c&&M(b)&&(b=b[b.length-1]);xb(P(b),a,"not a function, got "+(b&&"object"==typeof b? -b.constructor.name||"Object":typeof b));return b}function Aa(b,a){if("hasOwnProperty"===b)throw Pa("badname",a);}function bc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f<g;f++)d=a[f],b&&(b=(e=b)[d]);return!c&&P(b)?eb(e,b):b}function yb(b){var a=b[0];b=b[b.length-1];if(a===b)return y(a);var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return y(c)}function Yc(b){var a=t("$injector"),c=t("ng");b=b.angular||(b.angular={});b.$$minErr=b.$$minErr||t;return b.module|| -(b.module=function(){var b={};return function(e,g,f){if("hasOwnProperty"===e)throw c("badname","module");g&&b.hasOwnProperty(e)&&(b[e]=null);return b[e]||(b[e]=function(){function b(a,d,e){return function(){c[e||"push"]([a,d,arguments]);return n}}if(!g)throw a("nomod",e);var c=[],d=[],m=b("$injector","invoke"),n={_invokeQueue:c,_runBlocks:d,requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:b("$provide","value"),constant:b("$provide", -"constant","unshift"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:m,run:function(a){d.push(a);return this}};f&&m(f);return n}())}}())}function Zc(b){D(b,{bootstrap:$b,copy:ba,extend:D,equals:xa,element:y,forEach:q,injector:ac,noop:C,bind:eb,toJson:qa,fromJson:Wb,identity:Da,isUndefined:E,isDefined:B,isString:w,isFunction:P,isObject:X,isNumber:vb,isElement:Tc,isArray:M, -version:$c,isDate:Na,lowercase:K,uppercase:Fa,callbacks:{counter:0},$$minErr:t,$$csp:Vb});Sa=Yc(O);try{Sa("ngLocale")}catch(a){Sa("ngLocale",[]).provider("$locale",ad)}Sa("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:bd});a.provider("$compile",cc).directive({a:cd,input:dc,textarea:dc,form:dd,script:ed,select:fd,style:gd,option:hd,ngBind:id,ngBindHtml:jd,ngBindTemplate:kd,ngClass:ld,ngClassEven:md,ngClassOdd:nd,ngCloak:od,ngController:pd,ngForm:qd,ngHide:rd,ngIf:sd,ngInclude:td, -ngInit:ud,ngNonBindable:vd,ngPluralize:wd,ngRepeat:xd,ngShow:yd,ngStyle:zd,ngSwitch:Ad,ngSwitchWhen:Bd,ngSwitchDefault:Cd,ngOptions:Dd,ngTransclude:Ed,ngModel:Fd,ngList:Gd,ngChange:Hd,required:ec,ngRequired:ec,ngValue:Id}).directive({ngInclude:Jd}).directive(zb).directive(fc);a.provider({$anchorScroll:Kd,$animate:Ld,$browser:Md,$cacheFactory:Nd,$controller:Od,$document:Pd,$exceptionHandler:Qd,$filter:gc,$interpolate:Rd,$interval:Sd,$http:Td,$httpBackend:Ud,$location:Vd,$log:Wd,$parse:Xd,$rootScope:Yd, -$q:Zd,$sce:$d,$sceDelegate:ae,$sniffer:be,$templateCache:ce,$timeout:de,$window:ee,$$rAF:fe,$$asyncCallback:ge})}])}function Ta(b){return b.replace(he,function(a,b,d,e){return e?d.toUpperCase():d}).replace(ie,"Moz$1")}function Ab(b,a,c,d){function e(b){var e=c&&b?[this.filter(b)]:[this],l=a,k,m,n,p,r,z;if(!d||null!=b)for(;e.length;)for(k=e.shift(),m=0,n=k.length;m<n;m++)for(p=y(k[m]),l?p.triggerHandler("$destroy"):l=!l,r=0,p=(z=p.children()).length;r<p;r++)e.push(Ga(z[r]));return g.apply(this,arguments)} -var g=Ga.fn[b],g=g.$original||g;e.$original=g;Ga.fn[b]=e}function N(b){if(b instanceof N)return b;w(b)&&(b=ca(b));if(!(this instanceof N)){if(w(b)&&"<"!=b.charAt(0))throw Bb("nosel");return new N(b)}if(w(b)){var a=b;b=U;var c;if(c=je.exec(a))b=[b.createElement(c[1])];else{var d=b,e;b=d.createDocumentFragment();c=[];if(Cb.test(a)){d=b.appendChild(d.createElement("div"));e=(ke.exec(a)||["",""])[1].toLowerCase();e=ea[e]||ea._default;d.innerHTML="<div>&#160;</div>"+e[1]+a.replace(le,"<$1></$2>")+e[2]; -d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a<e;++a)c.push(d.childNodes[a]);d=b.firstChild;d.textContent=""}else c.push(d.createTextNode(a));b.textContent="";b.innerHTML="";b=c}Db(this,b);y(U.createDocumentFragment()).append(this)}else Db(this,b)}function Eb(b){return b.cloneNode(!0)}function Ha(b){hc(b);var a=0;for(b=b.childNodes||[];a<b.length;a++)Ha(b[a])}function ic(b,a,c,d){if(B(d))throw Bb("offargs");var e=la(b,"events");la(b,"handle")&&(E(a)?q(e, -function(a,c){Fb(b,c,a);delete e[c]}):q(a.split(" "),function(a){E(c)?(Fb(b,a,e[a]),delete e[a]):Oa(e[a]||[],c)}))}function hc(b,a){var c=b[gb],d=Ua[c];d&&(a?delete Ua[c].data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),ic(b)),delete Ua[c],b[gb]=s))}function la(b,a,c){var d=b[gb],d=Ua[d||-1];if(B(c))d||(b[gb]=d=++me,d=Ua[d]={}),d[a]=c;else return d&&d[a]}function jc(b,a,c){var d=la(b,"data"),e=B(c),g=!e&&B(a),f=g&&!X(a);d||f||la(b,"data",d={});if(e)d[a]=c;else if(g){if(f)return d&&d[a]; -D(d,a)}else return d}function Gb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function hb(b,a){a&&b.setAttribute&&q(a.split(" "),function(a){b.setAttribute("class",ca((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+ca(a)+" "," ")))})}function ib(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(a.split(" "),function(a){a=ca(a);-1===c.indexOf(" "+a+" ")&& -(c+=a+" ")});b.setAttribute("class",ca(c))}}function Db(b,a){if(a){a=a.nodeName||!B(a.length)||Ca(a)?[a]:a;for(var c=0;c<a.length;c++)b.push(a[c])}}function kc(b,a){return jb(b,"$"+(a||"ngController")+"Controller")}function jb(b,a,c){b=y(b);9==b[0].nodeType&&(b=b.find("html"));for(a=M(a)?a:[a];b.length;){for(var d=b[0],e=0,g=a.length;e<g;e++)if((c=b.data(a[e]))!==s)return c;b=y(d.parentNode||11===d.nodeType&&d.host)}}function lc(b){for(var a=0,c=b.childNodes;a<c.length;a++)Ha(c[a]);for(;b.firstChild;)b.removeChild(b.firstChild)} -function mc(b,a){var c=kb[a.toLowerCase()];return c&&nc[b.nodeName]&&c}function ne(b,a){var c=function(c,e){c.preventDefault||(c.preventDefault=function(){c.returnValue=!1});c.stopPropagation||(c.stopPropagation=function(){c.cancelBubble=!0});c.target||(c.target=c.srcElement||U);if(E(c.defaultPrevented)){var g=c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented||!1===c.returnValue};var f=Ub(a[e|| -c.type]||[]);q(f,function(a){a.call(b,c)});8>=S?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ia(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===s&&(c=b.$$hashKey=bb()):c=b;return a+":"+c}function Va(b){q(b,this.put,this)}function oc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(oe, -""),c=c.match(pe),q(c[1].split(qe),function(b){b.replace(re,function(b,c,d){a.push(d)})})),b.$inject=a):M(b)?(c=b.length-1,Ra(b[c],"fn"),a=b.slice(0,c)):Ra(b,"fn",!0);return a}function ac(b){function a(a){return function(b,c){if(X(b))q(b,Rb(a));else return a(b,c)}}function c(a,b){Aa(a,"service");if(P(b)||M(b))b=n.instantiate(b);if(!b.$get)throw Wa("pget",a);return m[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(w(a))for(c= -Sa(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g<h;g++){var f=d[g],l=n.get(f[0]);l[f[1]].apply(l,f[2])}else P(a)?b.push(n.invoke(a)):M(a)?b.push(n.invoke(a)):Ra(a,"module")}catch(m){throw M(a)&&(a=a[a.length-1]),m.message&&(m.stack&&-1==m.stack.indexOf(m.message))&&(m=m.message+"\n"+m.stack),Wa("modulerr",a,m.stack||m.message||m);}}});return b}function g(a,b){function c(d){if(a.hasOwnProperty(d)){if(a[d]===f)throw Wa("cdep",l.join(" <- "));return a[d]}try{return l.unshift(d), -a[d]=f,a[d]=b(d)}catch(e){throw a[d]===f&&delete a[d],e;}finally{l.shift()}}function d(a,b,e){var g=[],h=oc(a),f,l,k;l=0;for(f=h.length;l<f;l++){k=h[l];if("string"!==typeof k)throw Wa("itkn",k);g.push(e&&e.hasOwnProperty(k)?e[k]:c(k))}a.$inject||(a=a[f]);return a.apply(b,g)}return{invoke:d,instantiate:function(a,b){var c=function(){},e;c.prototype=(M(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return X(e)||P(e)?e:c},get:c,annotate:oc,has:function(b){return m.hasOwnProperty(b+h)||a.hasOwnProperty(b)}}} -var f={},h="Provider",l=[],k=new Va,m={$provide:{provider:a(c),factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,aa(b))}),constant:a(function(a,b){Aa(a,"constant");m[a]=b;p[a]=b}),decorator:function(a,b){var c=n.get(a+h),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},n=m.$injector=g(m,function(){throw Wa("unpr",l.join(" <- "));}),p={},r=p.$injector=g(p,function(a){a=n.get(a+ -h);return r.invoke(a.$get,a)});q(e(b),function(a){r.invoke(a||C)});return r}function Kd(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==K(a.nodeName)||(b=a)});return b}function g(){var b=c.hash(),d;b?(d=f.getElementById(b))?d.scrollIntoView():(d=e(f.getElementsByName(b)))?d.scrollIntoView():"top"===b&&a.scrollTo(0,0):a.scrollTo(0,0)}var f=a.document;b&&d.$watch(function(){return c.hash()}, -function(){d.$evalAsync(g)});return g}]}function ge(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function se(b,a,c,d){function e(a){try{a.apply(null,ya.call(arguments,1))}finally{if(z--,0===z)for(;u.length;)try{u.pop()()}catch(b){c.error(b)}}}function g(a,b){(function T(){q(F,function(a){a()});v=b(T,a)})()}function f(){x=null;J!=h.url()&&(J=h.url(),q(ma,function(a){a(h.url())}))}var h=this,l=a[0],k=b.location,m=b.history, -n=b.setTimeout,p=b.clearTimeout,r={};h.isMock=!1;var z=0,u=[];h.$$completeOutstandingRequest=e;h.$$incOutstandingRequestCount=function(){z++};h.notifyWhenNoOutstandingRequests=function(a){q(F,function(a){a()});0===z?a():u.push(a)};var F=[],v;h.addPollFn=function(a){E(v)&&g(100,n);F.push(a);return a};var J=k.href,A=a.find("base"),x=null;h.url=function(a,c){k!==b.location&&(k=b.location);m!==b.history&&(m=b.history);if(a){if(J!=a)return J=a,d.history?c?m.replaceState(null,"",a):(m.pushState(null,"", -a),A.attr("href",A.attr("href"))):(x=a,c?k.replace(a):k.href=a),h}else return x||k.href.replace(/%27/g,"'")};var ma=[],L=!1;h.onUrlChange=function(a){if(!L){if(d.history)y(b).on("popstate",f);if(d.hashchange)y(b).on("hashchange",f);else h.addPollFn(f);L=!0}ma.push(a);return a};h.baseHref=function(){var a=A.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var Q={},da="",H=h.baseHref();h.cookies=function(a,b){var d,e,g,h;if(a)b===s?l.cookie=escape(a)+"=;path="+H+";expires=Thu, 01 Jan 1970 00:00:00 GMT": -w(b)&&(d=(l.cookie=escape(a)+"="+escape(b)+";path="+H).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(l.cookie!==da)for(da=l.cookie,d=da.split("; "),Q={},g=0;g<d.length;g++)e=d[g],h=e.indexOf("="),0<h&&(a=unescape(e.substring(0,h)),Q[a]===s&&(Q[a]=unescape(e.substring(h+1))));return Q}};h.defer=function(a,b){var c;z++;c=n(function(){delete r[c];e(a)},b||0);r[c]=!0;return c};h.defer.cancel=function(a){return r[a]?(delete r[a], -p(a),e(C),!0):!1}}function Md(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new se(b,d,a,c)}]}function Nd(){this.$get=function(){function b(b,d){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,g(a.n,a.p),g(a,n),n=a,n.n=null)}function g(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw t("$cacheFactory")("iid",b);var f=0,h=D({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,m={},n=null,p=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a}); -e(c)}if(!E(b))return a in l||f++,l[a]=b,f>k&&this.remove(p.key),b},get:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p);b==p&&(p=b.n);g(b.n,b.p);delete m[a]}delete l[a];f--},removeAll:function(){l={};f=0;m={};n=p=null},destroy:function(){m=h=l=null;delete a[b]},info:function(){return D({},h,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]}; -return b}}function ce(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function cc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,g=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function l(a,e){Aa(a,"directive");w(a)?(xb(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);P(f)?f={compile:aa(f)}:!f.compile&&f.link&&(f.compile= -aa(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(l){d(l)}});return e}])),c[a].push(e)):q(a,Rb(l));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate", -"$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,m,n,p,r,z,u,F,v,J,A){function x(a,b,c,d,e){a instanceof y||(a=y(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=y(b).wrap("<span></span>").parent()[0])});var g=L(a,b,a,c,d,e);ma(a,"ng-scope");return function(b,c,d){xb(b,"scope");var e=c?Ja.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;d<f;d++){var l= -e[d].nodeType;1!==l&&9!==l||e.eq(d).data("$scope",b)}c&&c(e,b);g&&g(b,e,e);return e}}function ma(a,b){try{a.addClass(b)}catch(c){}}function L(a,b,c,d,e,g){function f(a,c,d,e){var g,k,m,r,n,p,z;g=c.length;var I=Array(g);for(n=0;n<g;n++)I[n]=c[n];z=n=0;for(p=l.length;n<p;z++)k=I[z],c=l[n++],g=l[n++],m=y(k),c?(c.scope?(r=a.$new(),m.data("$scope",r)):r=a,(m=c.transclude)||!e&&b?c(g,r,k,d,Q(a,m||b)):c(g,r,k,d,e)):g&&g(a,k.childNodes,s,e)}for(var l=[],k,m,r,n,p=0;p<a.length;p++)k=new Hb,m=da(a[p],[],k, -0===p?d:s,e),(g=m.length?ia(m,a[p],k,b,c,null,[],[],g):null)&&g.scope&&ma(y(a[p]),"ng-scope"),k=g&&g.terminal||!(r=a[p].childNodes)||!r.length?null:L(r,g?g.transclude:b),l.push(g,k),n=n||g||k,g=null;return n?f:null}function Q(a,b){return function(c,d,e){var g=!1;c||(c=a.$new(),g=c.$$transcluded=!0);d=b(c,d,e);if(g)d.on("$destroy",eb(c,c.$destroy));return d}}function da(a,b,c,d,f){var k=c.$attr,l;switch(a.nodeType){case 1:T(b,na(Ka(a).toLowerCase()),"E",d,f);var m,r,n;l=a.attributes;for(var p=0,z= -l&&l.length;p<z;p++){var u=!1,F=!1;m=l[p];if(!S||8<=S||m.specified){r=m.name;n=na(r);W.test(n)&&(r=fb(n.substr(6),"-"));var J=n.replace(/(Start|End)$/,"");n===J+"Start"&&(u=r,F=r.substr(0,r.length-5)+"end",r=r.substr(0,r.length-6));n=na(r.toLowerCase());k[n]=r;c[n]=m=ca(m.value);mc(a,n)&&(c[n]=!0);N(a,b,m,n);T(b,n,"A",d,f,u,F)}}a=a.className;if(w(a)&&""!==a)for(;l=g.exec(a);)n=na(l[2]),T(b,n,"C",d,f)&&(c[n]=ca(l[3])),a=a.substr(l.index+l[0].length);break;case 3:t(b,a.nodeValue);break;case 8:try{if(l= -e.exec(a.nodeValue))n=na(l[1]),T(b,n,"M",d,f)&&(c[n]=ca(l[2]))}catch(x){}}b.sort(E);return b}function H(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return y(d)}function R(a,b,c){return function(d,e,g,f,l){e=H(e[0],b,c);return a(d,e,g,f,l)}}function ia(a,c,d,e,g,f,l,n,p){function u(a,b,c,d){if(a){c&&(a=R(a,c,d));a.require=G.require;if(Q=== -G||G.$$isolateScope)a=qc(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=R(b,c,d));b.require=G.require;if(Q===G||G.$$isolateScope)b=qc(b,{isolateScope:!0});n.push(b)}}function F(a,b,c){var d,e="data",g=!1;if(w(a)){for(;"^"==(d=a.charAt(0))||"?"==d;)a=a.substr(1),"^"==d&&(e="inheritedData"),g=g||"?"==d;d=null;c&&"data"===e&&(d=c[a]);d=d||b[e]("$"+a+"Controller");if(!d&&!g)throw ja("ctreq",a,t);}else M(a)&&(d=[],q(a,function(a){d.push(F(a,b,c))}));return d}function J(a,e,g,f,p){function u(a,b){var c;2>arguments.length&& -(b=a,a=s);D&&(c=lb);return p(a,b,c)}var I,x,v,A,R,H,lb={},da;I=c===g?d:Ub(d,new Hb(y(g),d.$attr));x=I.$$element;if(Q){var T=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=y(g);H=e.$new(!0);ia&&ia===Q.$$originalDirective?f.data("$isolateScope",H):f.data("$isolateScopeNoTemplate",H);ma(f,"ng-isolate-scope");q(Q.scope,function(a,c){var d=a.match(T)||[],g=d[3]||c,f="?"==d[2],d=d[1],l,m,n,p;H.$$isolateBindings[c]=d+g;switch(d){case "@":I.$observe(g,function(a){H[c]=a});I.$$observers[g].$$scope=e;I[g]&&(H[c]=b(I[g])(e)); -break;case "=":if(f&&!I[g])break;m=r(I[g]);p=m.literal?xa:function(a,b){return a===b};n=m.assign||function(){l=H[c]=m(e);throw ja("nonassign",I[g],Q.name);};l=H[c]=m(e);H.$watch(function(){var a=m(e);p(a,H[c])||(p(a,l)?n(e,a=H[c]):H[c]=a);return l=a},null,m.literal);break;case "&":m=r(I[g]);H[c]=function(a){return m(e,a)};break;default:throw ja("iscp",Q.name,c,a);}})}da=p&&u;L&&q(L,function(a){var b={$scope:a===Q||a.$$isolateScope?H:e,$element:x,$attrs:I,$transclude:da},c;R=a.controller;"@"==R&&(R= -I[a.name]);c=z(R,b);lb[a.name]=c;D||x.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(v=l.length;f<v;f++)try{A=l[f],A(A.isolateScope?H:e,x,I,A.require&&F(A.require,x,lb),da)}catch(G){m(G,ha(x))}f=e;Q&&(Q.template||null===Q.templateUrl)&&(f=H);a&&a(f,g.childNodes,s,p);for(f=n.length-1;0<=f;f--)try{A=n[f],A(A.isolateScope?H:e,x,I,A.require&&F(A.require,x,lb),da)}catch(B){m(B,ha(x))}}p=p||{};for(var v=-Number.MAX_VALUE,A,L=p.controllerDirectives,Q=p.newIsolateScopeDirective, -ia=p.templateDirective,T=p.nonTlbTranscludeDirective,E=!1,D=p.hasElementTranscludeDirective,Z=d.$$element=y(c),G,t,V,Xa=e,O,N=0,S=a.length;N<S;N++){G=a[N];var ra=G.$$start,W=G.$$end;ra&&(Z=H(c,ra,W));V=s;if(v>G.priority)break;if(V=G.scope)A=A||G,G.templateUrl||(K("new/isolated scope",Q,G,Z),X(V)&&(Q=G));t=G.name;!G.templateUrl&&G.controller&&(V=G.controller,L=L||{},K("'"+t+"' controller",L[t],G,Z),L[t]=G);if(V=G.transclude)E=!0,G.$$tlb||(K("transclusion",T,G,Z),T=G),"element"==V?(D=!0,v=G.priority, -V=H(c,ra,W),Z=d.$$element=y(U.createComment(" "+t+": "+d[t]+" ")),c=Z[0],mb(g,y(ya.call(V,0)),c),Xa=x(V,e,v,f&&f.name,{nonTlbTranscludeDirective:T})):(V=y(Eb(c)).contents(),Z.empty(),Xa=x(V,e));if(G.template)if(K("template",ia,G,Z),ia=G,V=P(G.template)?G.template(Z,d):G.template,V=Y(V),G.replace){f=G;V=Cb.test(V)?y(V):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",t,"");mb(g,Z,c);S={$attr:{}};V=da(c,[],S);var $=a.splice(N+1,a.length-(N+1));Q&&pc(V);a=a.concat(V).concat($);B(d,S);S=a.length}else Z.html(V); -if(G.templateUrl)K("template",ia,G,Z),ia=G,G.replace&&(f=G),J=C(a.splice(N,a.length-N),Z,d,g,Xa,l,n,{controllerDirectives:L,newIsolateScopeDirective:Q,templateDirective:ia,nonTlbTranscludeDirective:T}),S=a.length;else if(G.compile)try{O=G.compile(Z,d,Xa),P(O)?u(null,O,ra,W):O&&u(O.pre,O.post,ra,W)}catch(aa){m(aa,ha(Z))}G.terminal&&(J.terminal=!0,v=Math.max(v,G.priority))}J.scope=A&&!0===A.scope;J.transclude=E&&Xa;p.hasElementTranscludeDirective=D;return J}function pc(a){for(var b=0,c=a.length;b<c;b++)a[b]= -Tb(a[b],{$$isolateScope:!0})}function T(b,e,g,f,k,n,r){if(e===k)return null;k=null;if(c.hasOwnProperty(e)){var p;e=a.get(e+d);for(var z=0,u=e.length;z<u;z++)try{p=e[z],(f===s||f>p.priority)&&-1!=p.restrict.indexOf(g)&&(n&&(p=Tb(p,{$$start:n,$$end:r})),b.push(p),k=p)}catch(F){m(F)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ma(e,b),a["class"]=(a["class"]? -a["class"]+" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function C(a,b,c,d,e,g,f,l){var k=[],m,r,z=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),x=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl;b.empty();n.get(v.getTrustedResourceUrl(x),{cache:p}).success(function(n){var p,J;n=Y(n);if(u.replace){n=Cb.test(n)?y(n):[];p=n[0];if(1!=n.length|| -1!==p.nodeType)throw ja("tplrt",u.name,x);n={$attr:{}};mb(d,b,p);var v=da(p,[],n);X(u.scope)&&pc(v);a=v.concat(a);B(c,n)}else p=z,b.html(n);a.unshift(F);m=ia(a,p,c,e,b,u,g,f,l);q(d,function(a,c){a==p&&(d[c]=b[0])});for(r=L(b[0].childNodes,e);k.length;){n=k.shift();J=k.shift();var A=k.shift(),R=k.shift(),v=b[0];if(J!==z){var H=J.className;l.hasElementTranscludeDirective&&u.replace||(v=Eb(p));mb(A,y(J),v);ma(y(v),H)}J=m.transclude?Q(n,m.transclude):R;m(r,n,v,d,J)}k=null}).error(function(a,b,c,d){throw ja("tpload", -d.url);});return function(a,b,c,d,e){k?(k.push(b),k.push(c),k.push(d),k.push(e)):m(r,b,c,d,e)}}function E(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function K(a,b,c,d){if(b)throw ja("multidir",b.name,c.name,a,ha(d));}function t(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:aa(function(a,b){var c=b.parent(),e=c.data("$binding")||[];e.push(d);ma(c.data("$binding",e),"ng-binding");a.$watch(d,function(a){b[0].nodeValue=a})})})}function O(a,b){if("srcdoc"== -b)return v.HTML;var c=Ka(a);if("xlinkHref"==b||"FORM"==c&&"action"==b||"IMG"!=c&&("src"==b||"ngSrc"==b))return v.RESOURCE_URL}function N(a,c,d,e){var g=b(d,!0);if(g){if("multiple"===e&&"SELECT"===Ka(a))throw ja("selmulti",ha(a));c.push({priority:100,compile:function(){return{pre:function(c,d,l){d=l.$$observers||(l.$$observers={});if(f.test(e))throw ja("nodomevents");if(g=b(l[e],!0,O(a,e)))l[e]=g(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(g,function(a,b){"class"=== -e&&a!=b?l.$updateClass(a,b):l.$set(e,a)})}}}})}}function mb(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,l;if(a)for(f=0,l=a.length;f<l;f++)if(a[f]==d){a[f++]=c;l=f+e-1;for(var k=a.length;f<k;f++,l++)l<k?a[f]=a[l]:delete a[f];a.length-=e-1;break}g&&g.replaceChild(c,d);a=U.createDocumentFragment();a.appendChild(d);c[y.expando]=d[y.expando];d=1;for(e=b.length;d<e;d++)g=b[d],y(g).remove(),a.appendChild(g),delete b[d];b[0]=c;b.length=1}function qc(a,b){return D(function(){return a.apply(null,arguments)}, -a,b)}var Hb=function(a,b){this.$$element=a;this.$attr=b||{}};Hb.prototype={$normalize:na,$addClass:function(a){a&&0<a.length&&J.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&J.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=rc(a,b),d=rc(b,a);0===c.length?J.removeClass(this.$$element,d):0===d.length?J.addClass(this.$$element,c):J.setClass(this.$$element,c,d)},$set:function(a,b,c,d){var e=mc(this.$$element[0],a);e&&(this.$$element.prop(a,b),d=e);this[a]=b;d?this.$attr[a]= -d:(d=this.$attr[a])||(this.$attr[a]=d=fb(a,"-"));e=Ka(this.$$element);if("A"===e&&"href"===a||"IMG"===e&&"src"===a)this[a]=b=A(b,"src"===a);!1!==c&&(null===b||b===s?this.$$element.removeAttr(d):this.$$element.attr(d,b));(c=this.$$observers)&&q(c[a],function(a){try{a(b)}catch(c){m(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||b(c[a])});return b}};var Z=b.startSymbol(),ra=b.endSymbol(),Y="{{"==Z||"}}"==ra? -Da:function(a){return a.replace(/\{\{/g,Z).replace(/}}/g,ra)},W=/^ngAttr[A-Z]/;return x}]}function na(b){return Ta(b.replace(te,""))}function rc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),g=0;a:for(;g<d.length;g++){for(var f=d[g],h=0;h<e.length;h++)if(f==e[h])continue a;c+=(0<c.length?" ":"")+f}return c}function Od(){var b={},a=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,d){Aa(a,"controller");X(a)?D(b,a):b[a]=d};this.$get=["$injector","$window",function(c,d){return function(e,g){var f, -h,l;w(e)&&(f=e.match(a),h=f[1],l=f[3],e=b.hasOwnProperty(h)?b[h]:bc(g.$scope,h,!0)||bc(d,h,!0),Ra(e,h,!0));f=c.instantiate(e,g);if(l){if(!g||"object"!=typeof g.$scope)throw t("$controller")("noscp",h||e.name,l);g.$scope[l]=f}return f}}]}function Pd(){this.$get=["$window",function(b){return y(b.document)}]}function Qd(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function sc(b){var a={},c,d,e;if(!b)return a;q(b.split("\n"),function(b){e=b.indexOf(":");c=K(ca(b.substr(0, -e)));d=ca(b.substr(e+1));c&&(a[c]=a[c]?a[c]+(", "+d):d)});return a}function tc(b){var a=X(b)?b:s;return function(c){a||(a=sc(b));return c?a[K(c)]||null:a}}function uc(b,a,c){if(P(c))return c(b,a);q(c,function(c){b=c(b,a)});return b}function Td(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},e=this.defaults={transformResponse:[function(d){w(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=Wb(d)));return d}],transformRequest:[function(a){return X(a)&& -"[object File]"!==wa.call(a)&&"[object Blob]"!==wa.call(a)?qa(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ba(d),put:ba(d),patch:ba(d)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},g=this.interceptors=[],f=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,d,n,p){function r(a){function c(a){var b=D({},a,{data:uc(a.data,a.headers,d.transformResponse)});return 200<=a.status&&300>a.status? -b:n.reject(b)}var d={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b,d){P(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=D({},a.headers),g,f,c=D({},c.common,c[K(a.method)]);b(c);b(d);a:for(g in c){a=K(g);for(f in d)if(K(f)===a)continue a;d[g]=c[g]}return d}(a);D(d,a);d.headers=g;d.method=Fa(d.method);(a=Ib(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]= -a);var f=[function(a){g=a.headers;var b=uc(a.data,tc(g),a.transformRequest);E(a.data)&&q(g,function(a,b){"content-type"===K(b)&&delete g[b]});E(a.withCredentials)&&!E(e.withCredentials)&&(a.withCredentials=e.withCredentials);return z(a,b,g).then(c,c)},s],h=n.when(d);for(q(v,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data, -b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function z(b,c,g){function f(a,b,c,e){v&&(200<=a&&300>a?v.put(s,[a,b,sc(c),e]):v.remove(s));l(b,a,c,e);d.$$phase||d.$apply()}function l(a,c,d,e){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:tc(d),config:b,statusText:e})}function k(){var a=db(r.pendingRequests,b);-1!==a&&r.pendingRequests.splice(a,1)}var p=n.defer(),z=p.promise,v,q,s=u(b.url, -b.params);r.pendingRequests.push(b);z.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(v=X(b.cache)?b.cache:X(e.cache)?e.cache:F);if(v)if(q=v.get(s),B(q)){if(q.then)return q.then(k,k),q;M(q)?l(q[1],q[0],ba(q[2]),q[3]):l(q,200,{},"OK")}else v.put(s,z);E(q)&&a(b.method,s,c,f,g,b.timeout,b.withCredentials,b.responseType);return z}function u(a,b){if(!b)return a;var c=[];Sc(b,function(a,b){null===a||E(a)||(M(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(za(b)+"="+za(a))}))});0<c.length&& -(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var F=c("$http"),v=[];q(g,function(a){v.unshift(w(a)?p.get(a):p.invoke(a))});q(f,function(a,b){var c=w(a)?p.get(a):p.invoke(a);v.splice(b,0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});r.pendingRequests=[];(function(a){q(arguments,function(a){r[a]=function(b,c){return r(D(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(D(d|| -{},{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function ue(b){if(8>=S&&(!b.match(/^(get|post|head|put|delete|options)$/i)||!O.XMLHttpRequest))return new O.ActiveXObject("Microsoft.XMLHTTP");if(O.XMLHttpRequest)return new O.XMLHttpRequest;throw t("$httpBackend")("noxhr");}function Ud(){this.$get=["$browser","$window","$document",function(b,a,c){return ve(b,ue,b.defer,a.angular.callbacks,c[0])}]}function ve(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange= -c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;S&&8>=S?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,l,k,m,n,p,r,z){function u(){v=f;A&&A();x&&x.abort()}function F(a,d,e,g,f){L&&c.cancel(L);A=x=null;0===d&&(d=e?200:"file"==sa(l).protocol?404:0);a(1223===d?204:d,e,g,f||"");b.$$completeOutstandingRequest(C)}var v;b.$$incOutstandingRequestCount(); -l=l||b.url();if("jsonp"==K(e)){var J="_"+(d.counter++).toString(36);d[J]=function(a){d[J].data=a};var A=g(l.replace("JSON_CALLBACK","angular.callbacks."+J),function(){d[J].data?F(m,200,d[J].data):F(m,v||-2);d[J]=Ea.noop})}else{var x=a(e);x.open(e,l,!0);q(n,function(a,b){B(a)&&x.setRequestHeader(b,a)});x.onreadystatechange=function(){if(x&&4==x.readyState){var a=null,b=null;v!==f&&(a=x.getAllResponseHeaders(),b="response"in x?x.response:x.responseText);F(m,v||x.status,b,a,x.statusText||"")}};r&&(x.withCredentials= -!0);if(z)try{x.responseType=z}catch(s){if("json"!==z)throw s;}x.send(k||null)}if(0<p)var L=c(u,p);else p&&p.then&&p.then(u)}}function Rd(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function g(g,k,m){for(var n,p,r=0,z=[],u=g.length,F=!1,v=[];r<u;)-1!=(n=g.indexOf(b,r))&&-1!=(p=g.indexOf(a,n+f))?(r!=n&&z.push(g.substring(r,n)),z.push(r=c(F=g.substring(n+f,p))), -r.exp=F,r=p+h,F=!0):(r!=u&&z.push(g.substring(r)),r=u);(u=z.length)||(z.push(""),u=1);if(m&&1<z.length)throw vc("noconcat",g);if(!k||F)return v.length=u,r=function(a){try{for(var b=0,c=u,f;b<c;b++)"function"==typeof(f=z[b])&&(f=f(a),f=m?e.getTrusted(m,f):e.valueOf(f),null===f||E(f)?f="":"string"!=typeof f&&(f=qa(f))),v[b]=f;return v.join("")}catch(h){a=vc("interr",g,h.toString()),d(a)}},r.exp=g,r.parts=z,r}var f=b.length,h=a.length;g.startSymbol=function(){return b};g.endSymbol=function(){return a}; -return g}]}function Sd(){this.$get=["$rootScope","$window","$q",function(b,a,c){function d(d,f,h,l){var k=a.setInterval,m=a.clearInterval,n=c.defer(),p=n.promise,r=0,z=B(l)&&!l;h=B(h)?h:0;p.then(null,null,d);p.$$intervalId=k(function(){n.notify(r++);0<h&&r>=h&&(n.resolve(r),m(p.$$intervalId),delete e[p.$$intervalId]);z||b.$apply()},f);e[p.$$intervalId]=n;return p}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId], -!0):!1};return d}]}function ad(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "), -DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function wc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=wb(b[a]);return b.join("/")}function xc(b,a,c){b=sa(b,c);a.$$protocol= -b.protocol;a.$$host=b.hostname;a.$$port=Y(b.port)||we[b.protocol]||null}function yc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=sa(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Yb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ya(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Jb(b){return b.substr(0, -Ya(b).lastIndexOf("/")+1)}function zc(b,a){this.$$html5=!0;a=a||"";var c=Jb(b);xc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!w(e))throw Kb("ipthprfx",a,c);yc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Zb(this.$$search),b=this.$$hash?"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=oa(b,d))!==s)return d=e,(e=oa(a,e))!==s?c+(oa("/",e)||e):b+d;if((e=oa(c, -d))!==s)return c+e;if(c==d+"/")return c}}function Lb(b,a){var c=Jb(b);xc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e):this.$$html5?e:"";if(!w(e))throw Kb("ihshprfx",d,a);yc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Zb(this.$$search),e=this.$$hash?"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl= -b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Ya(b)==Ya(a))return a}}function Ac(b,a){this.$$html5=!0;Lb.apply(this,arguments);var c=Jb(b);this.$$rewrite=function(d){var e;if(b==Ya(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function nb(b){return function(){return this[b]}}function Bc(b,a){return function(c){if(E(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Vd(){var b="",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode= -function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,l=d.baseHref(),k=d.url();a?(l=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(l||"/"),e=e.history?zc:Ac):(l=Ya(k),e=Lb);h=new e(l,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=y(a.target);"a"!==K(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return; -var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=sa(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&&(a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),O.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase|| -c.$digest())});var m=0;c.$watch(function(){var a=d.url(),b=h.$$replace;m&&a==h.absUrl()||(m++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return m});return h}]}function Wd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack: -a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function fa(b,a){if("constructor"===b)throw Ba("isecfld",a);return b}function Za(b, -a){if(b){if(b.constructor===b)throw Ba("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw Ba("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Ba("isecdom",a);}return b}function ob(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1<a.length;f++){g=fa(a.shift(),d);var h=b[g];h||(h={},b[g]=h);b=h;b.then&&e.unwrapPromises&&(ta(d),"$$v"in b||function(a){a.then(function(b){a.$$v=b})}(b),b.$$v===s&&(b.$$v={}),b=b.$$v)}g=fa(a.shift(),d);return b[g]=c}function Cc(b, -a,c,d,e,g,f){fa(b,g);fa(a,g);fa(c,g);fa(d,g);fa(e,g);return f.unwrapPromises?function(f,l){var k=l&&l.hasOwnProperty(b)?l:f,m;if(null==k)return k;(k=k[b])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!a)return k;if(null==k)return s;(k=k[a])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!c)return k;if(null==k)return s;(k=k[c])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!d)return k;if(null== -k)return s;(k=k[d])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);if(!e)return k;if(null==k)return s;(k=k[e])&&k.then&&(ta(g),"$$v"in k||(m=k,m.$$v=s,m.then(function(a){m.$$v=a})),k=k.$$v);return k}:function(g,f){var k=f&&f.hasOwnProperty(b)?f:g;if(null==k)return k;k=k[b];if(!a)return k;if(null==k)return s;k=k[a];if(!c)return k;if(null==k)return s;k=k[c];if(!d)return k;if(null==k)return s;k=k[d];return e?null==k?s:k=k[e]:k}}function xe(b,a){fa(b,a);return function(a, -d){return null==a?s:(d&&d.hasOwnProperty(b)?d:a)[b]}}function ye(b,a,c){fa(b,c);fa(a,c);return function(c,e){if(null==c)return s;c=(e&&e.hasOwnProperty(b)?e:c)[b];return null==c?s:c[a]}}function Dc(b,a,c){if(Mb.hasOwnProperty(b))return Mb[b];var d=b.split("."),e=d.length,g;if(a.unwrapPromises||1!==e)if(a.unwrapPromises||2!==e)if(a.csp)g=6>e?Cc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=Cc(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=s,b=h;while(f<e);return h};else{var f="var p;\n"; -q(d,function(b,d){fa(b,c);f+="if(s == null) return undefined;\ns="+(d?"s":'((k&&k.hasOwnProperty("'+b+'"))?k:s)')+'["'+b+'"];\n'+(a.unwrapPromises?'if (s && s.then) {\n pw("'+c.replace(/(["\r\n])/g,"\\$1")+'");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n':"")});var f=f+"return s;",h=new Function("s","k","pw",f);h.toString=aa(f);g=a.unwrapPromises?function(a,b){return h(a,b,ta)}:h}else g=ye(d[0],d[1],c);else g=xe(d[0],c);"hasOwnProperty"!== -b&&(Mb[b]=g);return g}function Xd(){var b={},a={csp:!1,unwrapPromises:!1,logPromiseWarnings:!0};this.unwrapPromises=function(b){return B(b)?(a.unwrapPromises=!!b,this):a.unwrapPromises};this.logPromiseWarnings=function(b){return B(b)?(a.logPromiseWarnings=b,this):a.logPromiseWarnings};this.$get=["$filter","$sniffer","$log",function(c,d,e){a.csp=d.csp;ta=function(b){a.logPromiseWarnings&&!Ec.hasOwnProperty(b)&&(Ec[b]=!0,e.warn("[$parse] Promise found in the expression `"+b+"`. Automatic unwrapping of promises in Angular expressions is deprecated."))}; -return function(d){var e;switch(typeof d){case "string":if(b.hasOwnProperty(d))return b[d];e=new Nb(a);e=(new $a(e,c,a)).parse(d,!1);"hasOwnProperty"!==d&&(b[d]=e);return e;case "function":return d;default:return C}}}]}function Zd(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return ze(function(a){b.$evalAsync(a)},a)}]}function ze(b,a){function c(a){return a}function d(a){return f(a)}var e=function(){var f=[],k,m;return m={resolve:function(a){if(f){var c=f;f=s;k=g(a);c.length&&b(function(){for(var a, -b=0,d=c.length;b<d;b++)a=c[b],k.then(a[0],a[1],a[2])})}},reject:function(a){m.resolve(h(a))},notify:function(a){if(f){var c=f;f.length&&b(function(){for(var b,d=0,e=c.length;d<e;d++)b=c[d],b[2](a)})}},promise:{then:function(b,g,h){var m=e(),u=function(d){try{m.resolve((P(b)?b:c)(d))}catch(e){m.reject(e),a(e)}},F=function(b){try{m.resolve((P(g)?g:d)(b))}catch(c){m.reject(c),a(c)}},v=function(b){try{m.notify((P(h)?h:c)(b))}catch(d){a(d)}};f?f.push([u,F,v]):k.then(u,F,v);return m.promise},"catch":function(a){return this.then(null, -a)},"finally":function(a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,g){var f=null;try{f=(a||c)()}catch(h){return b(h,!1)}return f&&P(f.then)?f.then(function(){return b(e,g)},function(a){return b(a,!1)}):b(e,g)}return this.then(function(a){return d(a,!0)},function(a){return d(a,!1)})}}}},g=function(a){return a&&P(a.then)?a:{then:function(c){var d=e();b(function(){d.resolve(c(a))});return d.promise}}},f=function(a){var b=e();b.reject(a);return b.promise},h=function(c){return{then:function(g, -f){var h=e();b(function(){try{h.resolve((P(f)?f:d)(c))}catch(b){h.reject(b),a(b)}});return h.promise}}};return{defer:e,reject:f,when:function(h,k,m,n){var p=e(),r,z=function(b){try{return(P(k)?k:c)(b)}catch(d){return a(d),f(d)}},u=function(b){try{return(P(m)?m:d)(b)}catch(c){return a(c),f(c)}},F=function(b){try{return(P(n)?n:c)(b)}catch(d){a(d)}};b(function(){g(h).then(function(a){r||(r=!0,p.resolve(g(a).then(z,u,F)))},function(a){r||(r=!0,p.resolve(u(a)))},function(a){r||p.notify(F(a))})});return p.promise}, -all:function(a){var b=e(),c=0,d=M(a)?[]:{};q(a,function(a,e){c++;g(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise}}}function fe(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,g=e? -function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};g.supported=e;return g}]}function Yd(){var b=10,a=t("$rootScope"),c=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(d,e,g,f){function h(){this.$id=bb();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this; -this.$$destroyed=!1;this.$$asyncQueue=[];this.$$postDigestQueue=[];this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings={}}function l(b){if(p.$$phase)throw a("inprog",p.$$phase);p.$$phase=b}function k(a,b){var c=g(a);Ra(c,b);return c}function m(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function n(){}h.prototype={constructor:h,$new:function(a){a?(a=new h,a.$root=this.$root,a.$$asyncQueue=this.$$asyncQueue,a.$$postDigestQueue= -this.$$postDigestQueue):(a=function(){},a.prototype=this,a=new a,a.$id=bb());a["this"]=a;a.$$listeners={};a.$$listenerCount={};a.$parent=this;a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,d){var e=k(a,"watch"),g=this.$$watchers,f={fn:b,last:n,get:e,exp:a,eq:!!d};c=null;if(!P(b)){var h=k(b||C,"listener");f.fn=function(a, -b,c){h(c)}}if("string"==typeof a&&e.constant){var l=f.fn;f.fn=function(a,b,c){l.call(this,a,b,c);Oa(g,f)}}g||(g=this.$$watchers=[]);g.unshift(f);return function(){Oa(g,f);c=null}},$watchCollection:function(a,b){var c=this,d,e,f,h=1<b.length,l=0,k=g(a),m=[],n={},p=!0,q=0;return this.$watch(function(){d=k(c);var a,b;if(X(d))if(ab(d))for(e!==m&&(e=m,q=e.length=0,l++),a=d.length,q!==a&&(l++,e.length=q=a),b=0;b<a;b++)e[b]!==e[b]&&d[b]!==d[b]||e[b]===d[b]||(l++,e[b]=d[b]);else{e!==n&&(e=n={},q=0,l++);a= -0;for(b in d)d.hasOwnProperty(b)&&(a++,e.hasOwnProperty(b)?e[b]!==d[b]&&(l++,e[b]=d[b]):(q++,e[b]=d[b],l++));if(q>a)for(b in l++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(q--,delete e[b])}else e!==d&&(e=d,l++);return l},function(){p?(p=!1,b(d,d,c)):b(d,f,c);if(h)if(X(d))if(ab(d)){f=Array(d.length);for(var a=0;a<d.length;a++)f[a]=d[a]}else for(a in f={},d)Fc.call(d,a)&&(f[a]=d[a]);else f=d})},$digest:function(){var d,g,f,h,k=this.$$asyncQueue,m=this.$$postDigestQueue,q,x,s=b,L,Q=[],y,H,R;l("$digest"); -c=null;do{x=!1;for(L=this;k.length;){try{R=k.shift(),R.scope.$eval(R.expression)}catch(B){p.$$phase=null,e(B)}c=null}a:do{if(h=L.$$watchers)for(q=h.length;q--;)try{if(d=h[q])if((g=d.get(L))!==(f=d.last)&&!(d.eq?xa(g,f):"number"==typeof g&&"number"==typeof f&&isNaN(g)&&isNaN(f)))x=!0,c=d,d.last=d.eq?ba(g):g,d.fn(g,f===n?g:f,L),5>s&&(y=4-s,Q[y]||(Q[y]=[]),H=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,H+="; newVal: "+qa(g)+"; oldVal: "+qa(f),Q[y].push(H));else if(d===c){x=!1;break a}}catch(w){p.$$phase= -null,e(w)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((x||k.length)&&!s--)throw p.$$phase=null,a("infdig",b,qa(Q));}while(x||k.length);for(p.$$phase=null;m.length;)try{m.shift()()}catch(T){e(T)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,eb(null,m,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&& -(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=C,this.$on=this.$watch=function(){return C})}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase|| -p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent); -var e=this;return function(){c[db(c,b)]=null;m(e,1,a)}},$emit:function(a,b){var c=[],d,g=this,f=!1,h={name:a,targetScope:g,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},l=[h].concat(ya.call(arguments,1)),k,m;do{d=g.$$listeners[a]||c;h.currentScope=g;k=0;for(m=d.length;k<m;k++)if(d[k])try{d[k].apply(null,l)}catch(n){e(n)}else d.splice(k,1),k--,m--;if(f)break;g=g.$parent}while(g);return h},$broadcast:function(a,b){for(var c=this,d=this,g={name:a, -targetScope:this,preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1},f=[g].concat(ya.call(arguments,1)),h,k;c=d;){g.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,f)}catch(l){e(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}return g}};var p=new h;return p}]}function bd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*(https?|ftp|file):|data:image\//; -this.aHrefSanitizationWhitelist=function(a){return B(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,g;if(!S||8<=S)if(g=sa(c).href,""!==g&&!g.match(e))return"unsafe:"+g;return c}}}function Ae(b){if("self"===b)return b;if(w(b)){if(-1<b.indexOf("***"))throw ua("iwcard",b);b=b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08").replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return RegExp("^"+ -b+"$")}if(cb(b))return RegExp("^"+b.source+"$");throw ua("imatcher");}function Gc(b){var a=[];B(b)&&q(b,function(b){a.push(Ae(b))});return a}function ae(){this.SCE_CONTEXTS=ga;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=Gc(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=Gc(b));return a};this.$get=["$injector",function(c){function d(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf= -function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var e=function(a){throw ua("unsafe");};c.has("$sanitize")&&(e=c.get("$sanitize"));var g=d(),f={};f[ga.HTML]=d(g);f[ga.CSS]=d(g);f[ga.URL]=d(g);f[ga.JS]=d(g);f[ga.RESOURCE_URL]=d(f[ga.URL]);return{trustAs:function(a,b){var c=f.hasOwnProperty(a)?f[a]:null;if(!c)throw ua("icontext",a,b);if(null===b||b===s||""===b)return b;if("string"!==typeof b)throw ua("itype",a);return new c(b)}, -getTrusted:function(c,d){if(null===d||d===s||""===d)return d;var g=f.hasOwnProperty(c)?f[c]:null;if(g&&d instanceof g)return d.$$unwrapTrustedValue();if(c===ga.RESOURCE_URL){var g=sa(d.toString()),m,n,p=!1;m=0;for(n=b.length;m<n;m++)if("self"===b[m]?Ib(g):b[m].exec(g.href)){p=!0;break}if(p)for(m=0,n=a.length;m<n;m++)if("self"===a[m]?Ib(g):a[m].exec(g.href)){p=!1;break}if(p)return d;throw ua("insecurl",d.toString());}if(c===ga.HTML)return e(d);throw ua("unsafe");},valueOf:function(a){return a instanceof -g?a.$$unwrapTrustedValue():a}}}]}function $d(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sniffer","$sceDelegate",function(a,c,d){if(b&&c.msie&&8>c.msieDocumentMode)throw ua("iequirks");var e=ba(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Da);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b, -d(a,c))}};var g=e.parseAs,f=e.getTrusted,h=e.trustAs;q(ga,function(a,b){var c=K(b);e[Ta("parse_as_"+c)]=function(b){return g(a,b)};e[Ta("get_trusted_"+c)]=function(b){return f(a,b)};e[Ta("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function be(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,l=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style, -m=!1,n=!1;if(k){for(var p in k)if(m=l.exec(p)){h=m[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");m=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in k);!d||m&&n||(m=w(g.body.style.webkitTransition),n=w(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7<f),hasEvent:function(a){if("input"==a&&9==S)return!1;if(E(c[a])){var b=g.createElement("div");c[a]="on"+ -a in b}return c[a]},csp:Vb(),vendorPrefix:h,transitions:m,animations:n,android:d,msie:S,msieDocumentMode:f}}]}function de(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,h,l){var k=c.defer(),m=k.promise,n=B(l)&&!l;h=a.defer(function(){try{k.resolve(e())}catch(a){k.reject(a),d(a)}finally{delete g[m.$$timeoutId]}n||b.$apply()},h);m.$$timeoutId=h;g[h]=k;return m}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"), -delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function sa(b,a){var c=b;S&&(W.setAttribute("href",c),c=W.href);W.setAttribute("href",c);return{href:W.href,protocol:W.protocol?W.protocol.replace(/:$/,""):"",host:W.host,search:W.search?W.search.replace(/^\?/,""):"",hash:W.hash?W.hash.replace(/^#/,""):"",hostname:W.hostname,port:W.port,pathname:"/"===W.pathname.charAt(0)?W.pathname:"/"+W.pathname}}function Ib(b){b=w(b)?sa(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host} -function ee(){this.$get=aa(O)}function gc(b){function a(d,e){if(X(d)){var g={};q(d,function(b,c){g[c]=a(c,b)});return g}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Be);a("json",Ce);a("limitTo",De);a("lowercase",Ee);a("number",Kc);a("orderBy",Lc);a("uppercase",Fe)}function Be(){return function(b,a,c){if(!M(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;b<e.length;b++)if(!e[b](a))return!1; -return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return Ea.equals(a,b)}:function(a,b){if(a&&b&&"object"===typeof a&&"object"===typeof b){for(var d in a)if("$"!==d.charAt(0)&&Fc.call(a,d)&&c(a[d],b[d]))return!0;return!1}b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var g=function(a,b){if("string"==typeof b&&"!"===b.charAt(0))return!g(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a, -b);default:for(var d in a)if("$"!==d.charAt(0)&&g(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(g(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a={$:a};case "object":for(var f in a)(function(b){"undefined"!=typeof a[b]&&e.push(function(c){return g("$"==b?c:c&&c[b],a[b])})})(f);break;case "function":e.push(a);break;default:return b}d=[];for(f=0;f<b.length;f++){var h=b[f];e.check(h)&&d.push(h)}return d}}function Ic(b){var a= -b.NUMBER_FORMATS;return function(b,d){E(d)&&(d=a.CURRENCY_SYM);return Mc(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function Kc(b){var a=b.NUMBER_FORMATS;return function(b,d){return Mc(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Mc(b,a,c,d,e){if(null==b||!isFinite(b)||X(b))return"";var g=0>b;b=Math.abs(b);var f=b+"",h="",l=[],k=!1;if(-1!==f.indexOf("e")){var m=f.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?f="0":(h=f,k=!0)}if(k)0<e&&(-1<b&&1>b)&&(h=b.toFixed(e)); -else{f=(f.split(Nc)[1]||"").length;E(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Nc);f=b[0];b=b[1]||"";var m=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(m=f.length-n,k=0;k<m;k++)0===(m-k)%p&&0!==k&&(h+=c),h+=f.charAt(k);for(k=m;k<f.length;k++)0===(f.length-k)%n&&0!==k&&(h+=c),h+=f.charAt(k);for(;b.length<e;)b+="0";e&&"0"!==e&&(h+=d+b.substr(0,e))}l.push(g?a.negPre:a.posPre);l.push(h);l.push(g?a.negSuf:a.posSuf);return l.join("")}function Ob(b, -a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function $(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ob(e,a,d)}}function pb(b,a){return function(c,d){var e=c["get"+b](),g=Fa(a?"SHORT"+b:b);return d[g][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=Y(b[9]+b[10]),f=Y(b[9]+b[11])); -h.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));g=Y(b[4]||0)-g;f=Y(b[5]||0)-f;h=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;w(c)&&(c=Ge.test(c)?Y(c):a(c));vb(c)&&(c=new Date(c));if(!Na(c))return c;for(;e;)(l=He.exec(e))?(f=f.concat(ya.call(l,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h= -Ie[a];g+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ce(){return function(b){return qa(b,!0)}}function De(){return function(b,a){if(!M(b)&&!w(b))return b;a=Y(a);if(w(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function Lc(b){return function(a,c,d){function e(a,b){return Qa(b)?function(b,c){return a(c,b)}:a} -function g(a,b){var c=typeof a,d=typeof b;return c==d?("string"==c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!M(a)||!c)return a;c=M(c)?c:[c];c=Uc(c,function(a){var c=!1,d=a||Da;if(w(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);d=b(a);if(d.constant){var f=d();return e(function(a,b){return g(a[f],b[f])},c)}}return e(function(a,b){return g(d(a),d(b))},c)});for(var f=[],h=0;h<a.length;h++)f.push(a[h]);return f.sort(e(function(a,b){for(var d= -0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function va(b){P(b)&&(b={link:b});b.restrict=b.restrict||"AC";return aa(b)}function Oc(b,a,c,d){function e(a,c){c=c?"-"+fb(c,"-"):"";d.removeClass(b,(a?qb:rb)+c);d.addClass(b,(a?rb:qb)+c)}var g=this,f=b.parent().controller("form")||sb,h=0,l=g.$error={},k=[];g.$name=a.name||a.ngForm;g.$dirty=!1;g.$pristine=!0;g.$valid=!0;g.$invalid=!1;f.$addControl(g);b.addClass(La);e(!0);g.$addControl=function(a){Aa(a.$name,"input");k.push(a);a.$name&& -(g[a.$name]=a)};g.$removeControl=function(a){a.$name&&g[a.$name]===a&&delete g[a.$name];q(l,function(b,c){g.$setValidity(c,!0,a)});Oa(k,a)};g.$setValidity=function(a,b,c){var d=l[a];if(b)d&&(Oa(d,c),d.length||(h--,h||(e(b),g.$valid=!0,g.$invalid=!1),l[a]=!1,e(!0,a),f.$setValidity(a,!0,g)));else{h||e(b);if(d){if(-1!=db(d,c))return}else l[a]=d=[],h++,e(!1,a),f.$setValidity(a,!1,g);d.push(c);g.$valid=!1;g.$invalid=!0}};g.$setDirty=function(){d.removeClass(b,La);d.addClass(b,tb);g.$dirty=!0;g.$pristine= -!1;f.$setDirty()};g.$setPristine=function(){d.removeClass(b,tb);d.addClass(b,La);g.$dirty=!1;g.$pristine=!0;q(k,function(a){a.$setPristine()})}}function pa(b,a,c,d){b.$setValidity(a,c);return c?d:s}function Je(b,a,c){var d=c.prop("validity");X(d)&&b.$parsers.push(function(c){if(b.$error[a]||!(d.badInput||d.customError||d.typeMismatch)||d.valueMissing)return c;b.$setValidity(a,!1)})}function ub(b,a,c,d,e,g){var f=a.prop("validity");if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0}); -a.on("compositionend",function(){h=!1;l()})}var l=function(){if(!h){var e=a.val();Qa(c.ngTrim||"T")&&(e=ca(e));if(d.$viewValue!==e||f&&""===e&&!f.valueMissing)b.$$phase?d.$setViewValue(e):b.$apply(function(){d.$setViewValue(e)})}};if(e.hasEvent("input"))a.on("input",l);else{var k,m=function(){k||(k=g.defer(function(){l();k=null}))};a.on("keydown",function(a){a=a.keyCode;91===a||(15<a&&19>a||37<=a&&40>=a)||m()});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)? -"":d.$viewValue)};var n=c.ngPattern;n&&((e=n.match(/^\/(.*)\/([gim]*)$/))?(n=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||n.test(a),a)}):e=function(c){var e=b.$eval(n);if(!e||!e.test)throw t("ngPattern")("noregexp",n,e,ha(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var p=Y(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=p,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var r= -Y(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=r,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Pb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!M(a)){if(w(a))return a.split(" ");if(X(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b}}return a}return{restrict:"AC",link:function(g,f,h){function l(a,b){var c= -f.data("$classCounts")||{},d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});f.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===a||g.$index%2===a){var k=e(b||[]);if(!m){var r=l(k,1);h.$addClass(r)}else if(!xa(b,m)){var q=e(m),r=d(k,q),k=d(q,k),k=l(k,-1),r=l(r,1);0===r.length?c.removeClass(f,k):0===k.length?c.addClass(f,r):c.setClass(f,r,k)}}m=ba(b)}var m;g.$watch(h[b],k,!0);h.$observe("class",function(a){k(g.$eval(h[b]))});"ngClass"!==b&&g.$watch("$index", -function(c,d){var f=c&1;if(f!==d&1){var k=e(g.$eval(h[b]));f===a?(f=l(k,1),h.$addClass(f)):(f=l(k,-1),h.$removeClass(f))}})}}}]}var K=function(b){return w(b)?b.toLowerCase():b},Fc=Object.prototype.hasOwnProperty,Fa=function(b){return w(b)?b.toUpperCase():b},S,y,Ga,ya=[].slice,Ke=[].push,wa=Object.prototype.toString,Pa=t("ng"),Ea=O.angular||(O.angular={}),Sa,Ka,ka=["0","0","0"];S=Y((/msie (\d+)/.exec(K(navigator.userAgent))||[])[1]);isNaN(S)&&(S=Y((/trident\/.*; rv:(\d+)/.exec(K(navigator.userAgent))|| -[])[1]));C.$inject=[];Da.$inject=[];var ca=function(){return String.prototype.trim?function(b){return w(b)?b.trim():b}:function(b){return w(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ka=9>S?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Fa(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xc=/[A-Z]/g,$c={full:"1.2.16",major:1,minor:2,dot:16,codeName:"badger-enumeration"},Ua=N.cache={},gb=N.expando="ng-"+(new Date).getTime(), -me=1,Pc=O.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Fb=O.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};N._data=function(b){return this.cache[b[this.expando]]||{}};var he=/([\:\-\_]+(.))/g,ie=/^moz([A-Z])/,Bb=t("jqLite"),je=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Cb=/<|&#?\w+;/,ke=/<([\w:]+)/,le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea= -{option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th=ea.td;var Ja=N.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),N(O).on("load",a))},toString:function(){var b= -[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:Ke,sort:[].sort,splice:[].splice},kb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){kb[K(b)]=b});var nc={};q("input select option textarea button form details".split(" "),function(b){nc[Fa(b)]=!0});q({data:jc,inheritedData:jb,scope:function(b){return y(b).data("$scope")||jb(b.parentNode||b,["$isolateScope","$scope"])}, -isolateScope:function(b){return y(b).data("$isolateScope")||y(b).data("$isolateScopeNoTemplate")},controller:kc,injector:function(b){return jb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Gb,css:function(b,a,c){a=Ta(a);if(B(c))b.style[a]=c;else{var d;8>=S&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=S&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=K(a);if(kb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d)); -else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:s;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(E(d))return e?b[e]:"";b[e]=d}var a=[];9>S?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(E(a)){if("SELECT"===Ka(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&& -c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(E(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<d.length;c++)Ha(d[c]);b.innerHTML=a},empty:lc},function(b,a){N.prototype[a]=function(a,d){var e,g;if(b!==lc&&(2==b.length&&b!==Gb&&b!==kc?a:d)===s){if(X(a)){for(e=0;e<this.length;e++)if(b===jc)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}e=b.$dv;g=e===s?Math.min(this.length,1):this.length;for(var f=0;f<g;f++){var h=b(this[f],a,d);e= -e?e+h:h}return e}for(e=0;e<this.length;e++)b(this[e],a,d);return this}});q({removeData:hc,dealoc:Ha,on:function a(c,d,e,g){if(B(g))throw Bb("onargs");var f=la(c,"events"),h=la(c,"handle");f||la(c,"events",f={});h||la(c,"handle",h=ne(c,f));q(d.split(" "),function(d){var g=f[d];if(!g){if("mouseenter"==d||"mouseleave"==d){var m=U.body.contains||U.body.compareDocumentPosition?function(a,c){var d=9===a.nodeType?a.documentElement:a,e=c&&c.parentNode;return a===e||!!(e&&1===e.nodeType&&(d.contains?d.contains(e): -a.compareDocumentPosition&&a.compareDocumentPosition(e)&16))}:function(a,c){if(c)for(;c=c.parentNode;)if(c===a)return!0;return!1};f[d]=[];a(c,{mouseleave:"mouseout",mouseenter:"mouseover"}[d],function(a){var c=a.relatedTarget;c&&(c===this||m(this,c))||h(a,d)})}else Pc(c,d,h),f[d]=[];g=f[d]}g.push(e)})},off:ic,one:function(a,c,d){a=y(a);a.on(c,function g(){a.off(c,d);a.off(c,g)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;Ha(a);q(new N(c),function(c){d?e.insertBefore(c,d.nextSibling): -e.replaceChild(c,a);d=c})},children:function(a){var c=[];q(a.childNodes,function(a){1===a.nodeType&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){q(new N(c),function(c){1!==a.nodeType&&11!==a.nodeType||a.appendChild(c)})},prepend:function(a,c){if(1===a.nodeType){var d=a.firstChild;q(new N(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=y(c)[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){Ha(a); -var c=a.parentNode;c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;q(new N(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:ib,removeClass:hb,toggleClass:function(a,c,d){c&&q(c.split(" "),function(c){var g=d;E(g)&&(g=!Gb(a,c));(g?ib:hb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){if(a.nextElementSibling)return a.nextElementSibling;for(a=a.nextSibling;null!=a&&1!==a.nodeType;)a=a.nextSibling;return a},find:function(a,c){return a.getElementsByTagName? -a.getElementsByTagName(c):[]},clone:Eb,triggerHandler:function(a,c,d){c=(la(a,"events")||{})[c];d=d||[];var e=[{preventDefault:C,stopPropagation:C}];q(c,function(c){c.apply(a,e.concat(d))})}},function(a,c){N.prototype[c]=function(c,e,g){for(var f,h=0;h<this.length;h++)E(f)?(f=a(this[h],c,e,g),B(f)&&(f=y(f))):Db(f,a(this[h],c,e,g));return B(f)?f:this};N.prototype.bind=N.prototype.on;N.prototype.unbind=N.prototype.off});Va.prototype={put:function(a,c){this[Ia(a)]=c},get:function(a){return this[Ia(a)]}, -remove:function(a){var c=this[a=Ia(a)];delete this[a];return c}};var pe=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,qe=/,/,re=/^\s*(_?)(\S+?)\1\s*$/,oe=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Wa=t("$injector"),Le=t("$animate"),Ld=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Le("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp? -a:null);return this.$$classNameFilter};this.$get=["$timeout","$$asyncCallback",function(a,d){return{enter:function(a,c,f,h){f?f.after(a):(c&&c[0]||(c=f.parent()),c.append(a));h&&d(h)},leave:function(a,c){a.remove();c&&d(c)},move:function(a,c,d,h){this.enter(a,c,d,h)},addClass:function(a,c,f){c=w(c)?c:M(c)?c.join(" "):"";q(a,function(a){ib(a,c)});f&&d(f)},removeClass:function(a,c,f){c=w(c)?c:M(c)?c.join(" "):"";q(a,function(a){hb(a,c)});f&&d(f)},setClass:function(a,c,f,h){q(a,function(a){ib(a,c);hb(a, -f)});h&&d(h)},enabled:C}}]}],ja=t("$compile");cc.$inject=["$provide","$$sanitizeUriProvider"];var te=/^(x[\:\-_]|data[\:\-_])/i,vc=t("$interpolate"),Me=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,we={http:80,https:443,ftp:21},Kb=t("$location");Ac.prototype=Lb.prototype=zc.prototype={$$html5:!1,$$replace:!1,absUrl:nb("$$absUrl"),url:function(a,c){if(E(a))return this.$$url;var d=Me.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));(d[2]||d[1])&&this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:nb("$$protocol"), -host:nb("$$host"),port:nb("$$port"),path:Bc("$$path",function(a){return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(w(a))this.$$search=Yb(a);else if(X(a))this.$$search=a;else throw Kb("isrcharg");break;default:E(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:Bc("$$hash",Da),replace:function(){this.$$replace=!0;return this}};var Ba=t("$parse"),Ec={},ta,Ma={"null":function(){return null},"true":function(){return!0}, -"false":function(){return!1},undefined:C,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return B(d)?B(e)?d+e:d:B(e)?e:s},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(B(d)?d:0)-(B(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"=":C,"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a, -c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Ne={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'}, -Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index<this.text.length;){this.ch=this.text.charAt(this.index);if(this.is("\"'"))this.readString(this.ch);else if(this.isNumber(this.ch)||this.is(".")&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(this.ch))this.readIdent(),this.was("{,")&&("{"===a[0]&&(c=this.tokens[this.tokens.length-1]))&&(c.json=-1===c.text.indexOf(".")); -else if(this.is("(){}[].,;:?"))this.tokens.push({index:this.index,text:this.ch,json:this.was(":[,")&&this.is("{[")||this.is("}]:,")}),this.is("{[")&&a.unshift(this.ch),this.is("}]")&&a.shift(),this.index++;else if(this.isWhitespace(this.ch)){this.index++;continue}else{var d=this.ch+this.peek(),e=d+this.peek(2),g=Ma[this.ch],f=Ma[d],h=Ma[e];h?(this.tokens.push({index:this.index,text:e,fn:h}),this.index+=3):f?(this.tokens.push({index:this.index,text:d,fn:f}),this.index+=2):g?(this.tokens.push({index:this.index, -text:this.ch,fn:g,json:this.was("[,:")&&this.is("+-")}),this.index+=1):this.throwError("Unexpected next character ",this.index,this.index+1)}this.lastCh=this.ch}return this.tokens},is:function(a){return-1!==a.indexOf(this.ch)},was:function(a){return-1!==a.indexOf(this.lastCh)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"=== -a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Ba("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=K(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+= -d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}a*=1;this.tokens.push({index:c,text:a,json:!0,fn:function(){return a}})},readIdent:function(){for(var a=this,c="",d=this.index,e,g,f,h;this.index<this.text.length;){h=this.text.charAt(this.index);if("."===h||this.isIdent(h)||this.isNumber(h))"."===h&&(e=this.index),c+=h;else break; -this.index++}if(e)for(g=this.index;g<this.text.length;){h=this.text.charAt(g);if("("===h){f=c.substr(e-d+1);c=c.substr(0,e-d);this.index=g;break}if(this.isWhitespace(h))g++;else break}d={index:d,text:c};if(Ma.hasOwnProperty(c))d.fn=Ma[c],d.json=Ma[c];else{var l=Dc(c,this.options,this.text);d.fn=D(function(a,c){return l(a,c)},{assign:function(d,e){return ob(d,c,e,a.text,a.options)}})}this.tokens.push(d);f&&(this.tokens.push({index:e,text:".",json:!1}),this.tokens.push({index:e+1,text:f,json:!1}))}, -readString:function(a){var c=this.index;this.index++;for(var d="",e=a,g=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),e=e+f;if(g)"u"===f?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d=(g=Ne[f])?d+g:d+f,g=!1;else if("\\"===f)g=!0;else{if(f===a){this.index++;this.tokens.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});return}d+= -f}this.index++}this.throwError("Unterminated quote",c)}};var $a=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};$a.ZERO=D(function(){return 0},{constant:!0});$a.prototype={constructor:$a,parse:function(a,c){this.text=a;this.json=c;this.tokens=this.lexer.lex(a);c&&(this.assignment=this.logicalOR,this.functionCall=this.fieldAccess=this.objectIndex=this.filterChain=function(){this.throwError("is not valid json",{text:a,index:0})});var d=c?this.primary():this.statements();0!==this.tokens.length&& -this.throwError("is an unexpected token",this.tokens[0]);d.literal=!!d.literal;d.constant=!!d.constant;return d},primary:function(){var a;if(this.expect("("))a=this.filterChain(),this.consume(")");else if(this.expect("["))a=this.arrayDeclaration();else if(this.expect("{"))a=this.object();else{var c=this.expect();(a=c.fn)||this.throwError("not a primary expression",c);c.json&&(a.constant=!0,a.literal=!0)}for(var d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text? -(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw Ba("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw Ba("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){if(0<this.tokens.length){var g=this.tokens[0],f=g.text;if(f===a||f===c||f===d||f===e||!(a||c||d||e))return g}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d, -e))?(this.json&&!a.json&&this.throwError("is not valid json",a),this.tokens.shift(),a):!1},consume:function(a){this.expect(a)||this.throwError("is unexpected, expecting ["+a+"]",this.peek())},unaryFn:function(a,c){return D(function(d,e){return a(d,e,c)},{constant:c.constant})},ternaryFn:function(a,c,d){return D(function(e,g){return a(e,g)?c(e,g):d(e,g)},{constant:a.constant&&c.constant&&d.constant})},binaryFn:function(a,c,d){return D(function(e,g){return c(e,g,a,d)},{constant:a.constant&&d.constant})}, -statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,g=0;g<a.length;g++){var f=a[g];f&&(e=f(c,d))}return e}},filterChain:function(){for(var a=this.expression(),c;;)if(c=this.expect("|"))a=this.binaryFn(a,c.fn,this.filter());else return a},filter:function(){for(var a=this.expect(),c=this.$filter(a.text),d=[];;)if(a=this.expect(":"))d.push(this.expression());else{var e= -function(a,e,h){h=[h];for(var l=0;l<d.length;l++)h.push(d[l](a,e));return c.apply(a,h)};return function(){return e}}},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),function(d,g){return a.assign(d,c(d,g),g)}):a},ternary:function(){var a=this.logicalOR(),c,d;if(this.expect("?")){c=this.ternary(); -if(d=this.expect(":"))return this.ternaryFn(a,c,this.ternary());this.throwError("expected :",d)}else return a},logicalOR:function(){for(var a=this.logicalAND(),c;;)if(c=this.expect("||"))a=this.binaryFn(a,c.fn,this.logicalAND());else return a},logicalAND:function(){var a=this.equality(),c;if(c=this.expect("&&"))a=this.binaryFn(a,c.fn,this.logicalAND());return a},equality:function(){var a=this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.fn,this.equality());return a}, -relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn($a.ZERO,a.fn, -this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Dc(d,this.options,this.text);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,f,h){return ob(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,g){var f=a(e,g),h=d(e,g),l;if(!f)return s;(f=Za(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&&(l=f,"$$v"in f||(l.$$v=s,l.then(function(a){l.$$v= -a})),f=f.$$v);return f},{assign:function(e,g,f){var h=d(e,f);return Za(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],l=c?c(g,f):g,k=0;k<d.length;k++)h.push(d[k](g,f));k=a(g,f,l)||C;Za(l,e.text);Za(k,e.text);h=k.apply?k.apply(l,h):k(h[0],h[1],h[2],h[3],h[4]);return Za(h,e.text)}},arrayDeclaration:function(){var a=[],c=!0;if("]"!==this.peekToken().text){do{if(this.peek("]"))break; -var d=this.expression();a.push(d);d.constant||(c=!1)}while(this.expect(","))}this.consume("]");return D(function(c,d){for(var f=[],h=0;h<a.length;h++)f.push(a[h](c,d));return f},{literal:!0,constant:c})},object:function(){var a=[],c=!0;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.expect(),d=d.string||d.text;this.consume(":");var e=this.expression();a.push({key:d,value:e});e.constant||(c=!1)}while(this.expect(","))}this.consume("}");return D(function(c,d){for(var e={},l=0;l< -a.length;l++){var k=a[l];e[k.key]=k.value(c,d)}return e},{literal:!0,constant:c})}};var Mb={},ua=t("$sce"),ga={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},W=U.createElement("a"),Hc=sa(O.location.href,!0);gc.$inject=["$provide"];Ic.$inject=["$locale"];Kc.$inject=["$locale"];var Nc=".",Ie={yyyy:$("FullYear",4),yy:$("FullYear",2,0,!0),y:$("FullYear",1),MMMM:pb("Month"),MMM:pb("Month",!0),MM:$("Month",2,1),M:$("Month",1,1),dd:$("Date",2),d:$("Date",1),HH:$("Hours",2),H:$("Hours", -1),hh:$("Hours",2,-12),h:$("Hours",1,-12),mm:$("Minutes",2),m:$("Minutes",1),ss:$("Seconds",2),s:$("Seconds",1),sss:$("Milliseconds",3),EEEE:pb("Day"),EEE:pb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ob(Math[0<a?"floor":"ceil"](a/60),2)+Ob(Math.abs(a%60),2))}},He=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Ge=/^\-?\d+$/;Jc.$inject=["$locale"];var Ee=aa(K),Fe=aa(Fa);Lc.$inject= -["$parse"];var cd=aa({restrict:"E",compile:function(a,c){8>=S&&(c.href||c.name||c.$set("href",""),a.append(U.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var g="[object SVGAnimatedString]"===wa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),zb={};q(kb,function(a,c){if("multiple"!=a){var d=na("ng-"+c);zb[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src", -"srcset","href"],function(a){var c=na("ng-"+a);zb[c]=function(){return{priority:99,link:function(d,e,g){var f=a,h=a;"href"===a&&"[object SVGAnimatedString]"===wa.call(e.prop("href"))&&(h="xlinkHref",g.$attr[h]="xlink:href",f=null);g.$observe(c,function(a){a&&(g.$set(h,a),S&&f&&e.prop(f,g[h]))})}}}});var sb={$addControl:C,$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C};Oc.$inject=["$element","$attrs","$scope","$animate"];var Qc=function(a){return["$timeout",function(c){return{name:"form", -restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Pc(e[0],"submit",h);e.on("$destroy",function(){c(function(){Fb(e[0],"submit",h)},0,!1)})}var l=e.parent().controller("form"),k=g.name||g.ngForm;k&&ob(a,k,f,k);if(l)e.on("$destroy",function(){l.$removeControl(f);k&&ob(a,k,s,k);D(f,sb)})}}}}}]},dd=Qc(),qd=Qc(!0),Oe=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, -Pe=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,Qe=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc={text:ub,number:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Qe.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});Je(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a), -e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e,"number",e.$isEmpty(a)||vb(a),a)})},url:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||Oe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||Pe.test(a),a)};e.$formatters.push(a); -e.$parsers.push(a)},radio:function(a,c,d,e){E(d.name)&&c.attr("name",bb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;w(g)||(g=!0);w(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g}; -e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:C,button:C,submit:C,reset:C,file:C},dc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,f){f&&(Rc[K(g.type)]||Rc.text)(d,e,g,f,c,a)}}}],rb="ng-valid",qb="ng-invalid",La="ng-pristine",tb="ng-dirty",Re=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,g,f){function h(a,c){c=c?"-"+fb(c,"-"):"";f.removeClass(e,(a?qb:rb)+c); -f.addClass(e,(a?rb:qb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var l=g(d.ngModel),k=l.assign;if(!k)throw t("ngModel")("nonassign",d.ngModel,ha(e));this.$render=C;this.$isEmpty=function(a){return E(a)||""===a||null===a||a!==a};var m=e.inheritedData("$formController")||sb,n=0,p=this.$error={};e.addClass(La);h(!0);this.$setValidity=function(a,c){p[a]!== -!c&&(c?(p[a]&&n--,n||(h(!0),this.$valid=!0,this.$invalid=!1)):(h(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,h(c,a),m.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;f.removeClass(e,tb);f.addClass(e,La)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,f.removeClass(e,La),f.addClass(e,tb),m.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,k(a,d),q(this.$viewChangeListeners, -function(a){try{a()}catch(d){c(d)}}))};var r=this;a.$watch(function(){var c=l(a);if(r.$modelValue!==c){var d=r.$formatters,e=d.length;for(r.$modelValue=c;e--;)c=d[e](c);r.$viewValue!==c&&(r.$viewValue=c,r.$render())}return c})}],Fd=function(){return{require:["ngModel","^?form"],controller:Re,link:function(a,c,d,e){var g=e[0],f=e[1]||sb;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},Hd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -ec=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Gd=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!E(a)){var c=[];a&&q(a.split(g),function(a){a&& -c.push(ca(a))});return c}});e.$formatters.push(function(a){return M(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},Se=/^(true|false|\d+)$/,Id=function(){return{priority:100,compile:function(a,c){return Se.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},id=va(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),kd=["$interpolate", -function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],jd=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding",g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],ld=Pb("",!0),nd=Pb("Odd",0),md=Pb("Even",1),od=va({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}), -pd=[function(){return{scope:!0,controller:"@",priority:500}}],fc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=na("ng-"+a);fc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d,e){d.on(K(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var sd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A", -$$tlb:!0,link:function(c,d,e,g,f){var h,l,k;c.$watch(e.ngIf,function(g){Qa(g)?l||(l=c.$new(),f(l,function(c){c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=yb(h.clone),a.leave(k,function(){k=null}),h=null))})}}}],td=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ea.noop,compile:function(f, -h){var l=h.ngInclude||h.src,k=h.onload||"",m=h.autoscroll;return function(f,h,q,s,u){var F=0,v,y,A,x=function(){y&&(y.remove(),y=null);v&&(v.$destroy(),v=null);A&&(e.leave(A,function(){y=null}),y=A,A=null)};f.$watch(g.parseAsResourceUrl(l),function(g){var l=function(){!B(m)||m&&!f.$eval(m)||d()},q=++F;g?(a.get(g,{cache:c}).success(function(a){if(q===F){var c=f.$new();s.template=a;a=u(c,function(a){x();e.enter(a,null,h,l)});v=c;A=a;v.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q=== -F&&x()}),f.$emit("$includeContentRequested")):(x(),s.template=null)})}}}}],Jd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],ud=va({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),vd=va({terminal:!0,priority:1E3}),wd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,l=f.$attr.when&&g.attr(f.$attr.when),k=f.offset|| -0,m=e.$eval(l)||{},n={},p=c.startSymbol(),r=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(f,function(a,c){s.test(c)&&(m[K(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(m,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+r))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in m||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}],xd=["$parse","$animate",function(a,c){var d=t("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0, -link:function(e,g,f,h,l){var k=f.ngRepeat,m=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,r,s,u,F,v={$id:Ia};if(!m)throw d("iexp",k);f=m[1];h=m[2];(m=m[3])?(n=a(m),p=function(a,c,d){F&&(v[F]=a);v[u]=c;v.$index=d;return n(e,v)}):(r=function(a,c){return Ia(c)},s=function(a){return a});m=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!m)throw d("iidexp",f);u=m[3]||m[1];F=m[2];var B={};e.$watchCollection(h,function(a){var f,h,m=g[0],n,v={},H,R,w,C,T,t, -E=[];if(ab(a))T=a,n=p||r;else{n=p||s;T=[];for(w in a)a.hasOwnProperty(w)&&"$"!=w.charAt(0)&&T.push(w);T.sort()}H=T.length;h=E.length=T.length;for(f=0;f<h;f++)if(w=a===T?f:T[f],C=a[w],C=n(w,C,f),Aa(C,"`track by` id"),B.hasOwnProperty(C))t=B[C],delete B[C],v[C]=t,E[f]=t;else{if(v.hasOwnProperty(C))throw q(E,function(a){a&&a.scope&&(B[a.id]=a)}),d("dupes",k,C);E[f]={id:C};v[C]=!1}for(w in B)B.hasOwnProperty(w)&&(t=B[w],f=yb(t.clone),c.leave(f),q(f,function(a){a.$$NG_REMOVED=!0}),t.scope.$destroy()); -f=0;for(h=T.length;f<h;f++){w=a===T?f:T[f];C=a[w];t=E[f];E[f-1]&&(m=E[f-1].clone[E[f-1].clone.length-1]);if(t.scope){R=t.scope;n=m;do n=n.nextSibling;while(n&&n.$$NG_REMOVED);t.clone[0]!=n&&c.move(yb(t.clone),null,y(m));m=t.clone[t.clone.length-1]}else R=e.$new();R[u]=C;F&&(R[F]=w);R.$index=f;R.$first=0===f;R.$last=f===H-1;R.$middle=!(R.$first||R.$last);R.$odd=!(R.$even=0===(f&1));t.scope||l(R,function(a){a[a.length++]=U.createComment(" end ngRepeat: "+k+" ");c.enter(a,null,y(m));m=a;t.scope=R;t.clone= -a;v[t.id]=t})}B=v})}}}],yd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngShow,function(c){a[Qa(c)?"removeClass":"addClass"](d,"ng-hide")})}}],rd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngHide,function(c){a[Qa(c)?"addClass":"removeClass"](d,"ng-hide")})}}],zd=va(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Ad=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases= -{}}],link:function(c,d,e,g){var f,h,l,k=[];c.$watch(e.ngSwitch||e.on,function(d){var n,p=k.length;if(0<p){if(l){for(n=0;n<p;n++)l[n].remove();l=null}l=[];for(n=0;n<p;n++){var r=h[n];k[n].$destroy();l[n]=r;a.leave(r,function(){l.splice(n,1);0===l.length&&(l=null)})}}h=[];k=[];if(f=g.cases["!"+d]||g.cases["?"])c.$eval(e.change),q(f,function(d){var e=c.$new();k.push(e);d.transclude(e,function(c){var e=d.element;h.push(c);a.enter(c,e.parent(),e)})})})}}}],Bd=va({transclude:"element",priority:800,require:"^ngSwitch", -link:function(a,c,d,e,g){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:g,element:c})}}),Cd=va({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,c,d,e,g){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:g,element:c})}}),Ed=va({link:function(a,c,d,e,g){if(!g)throw t("ngTransclude")("orphan",ha(c));g(function(a){c.empty();c.append(a)})}}),ed=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c, -d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],Te=t("ngOptions"),Dd=aa({terminal:!0}),fd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:C};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},m=e,n;l.databound= -d.ngModel;l.init=function(a,c,d){m=a;n=d};l.addOption=function(c){Aa(c,'"option value"');k[c]=!0;m.$viewValue==c&&(a.val(c),n.parent()&&n.remove())};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],m.$viewValue==a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c="? "+Ia(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=C})}],link:function(e,f,h,l){function k(a, -c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(A.parent()&&A.remove(),c.val(a),""===a&&w.prop("selected",!0)):E(a)&&w?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){A.parent()&&A.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new Va(d.$viewValue);q(c.find("option"),function(c){c.selected=B(a.get(c.value))})};a.$watch(function(){xa(e,d.$viewValue)||(e=ba(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a= -[];q(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function h(){var a={"":[]},c=[""],d,k,s,t,z;t=g.$modelValue;z=y(e)||[];var E=n?Qb(z):z,F,I,A;I={};s=!1;var D,H;if(r)if(w&&M(t))for(s=new Va([]),A=0;A<t.length;A++)I[m]=t[A],s.put(w(e,I),t[A]);else s=new Va(t);for(A=0;F=E.length,A<F;A++){k=A;if(n){k=E[A];if("$"===k.charAt(0))continue;I[n]=k}I[m]=z[k];d=p(e,I)||"";(k=a[d])||(k=a[d]=[],c.push(d));r?d=B(s.remove(w?w(e,I):q(e,I))):(w?(d={},d[m]=t,d= -w(e,d)===w(e,I)):d=t===q(e,I),s=s||d);D=l(e,I);D=B(D)?D:"";k.push({id:w?w(e,I):n?E[A]:A,label:D,selected:d})}r||(u||null===t?a[""].unshift({id:"",label:"",selected:!s}):s||a[""].unshift({id:"?",label:"",selected:!0}));I=0;for(E=c.length;I<E;I++){d=c[I];k=a[d];x.length<=I?(t={element:C.clone().attr("label",d),label:k.label},z=[t],x.push(z),f.append(t.element)):(z=x[I],t=z[0],t.label!=d&&t.element.attr("label",t.label=d));D=null;A=0;for(F=k.length;A<F;A++)s=k[A],(d=z[A+1])?(D=d.element,d.label!==s.label&& -D.text(d.label=s.label),d.id!==s.id&&D.val(d.id=s.id),d.selected!==s.selected&&D.prop("selected",d.selected=s.selected)):(""===s.id&&u?H=u:(H=v.clone()).val(s.id).attr("selected",s.selected).text(s.label),z.push({element:H,label:s.label,id:s.id,selected:s.selected}),D?D.after(H):t.element.append(H),D=H);for(A++;z.length>A;)z.pop().element.remove()}for(;x.length>I;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Te("iexp",t,ha(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q= -c(k[2]?k[1]:m),y=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];u&&(a(u)(e),u.removeClass("ng-scope"),u.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=y(e)||[],d={},h,k,l,p,t,v,u;if(r)for(k=[],p=0,v=x.length;p<v;p++)for(a=x[p],l=1,t=a.length;l<t;l++){if((h=a[l].element)[0].selected){h=h.val();n&&(d[n]=h);if(w)for(u=0;u<c.length&&(d[m]=c[u],w(e,d)!=h);u++);else d[m]=c[h];k.push(q(e,d))}}else{h=f.val();if("?"==h)k=s;else if(""===h)k=null;else if(w)for(u=0;u<c.length;u++){if(d[m]= -c[u],w(e,d)==h){k=q(e,d);break}}else d[m]=c[h],n&&(d[n]=h),k=q(e,d);1<x[0].length&&x[0][1].id!==h&&(x[0][1].selected=!1)}g.$setViewValue(k)})});g.$render=h;e.$watch(h)}if(l[1]){var p=l[0];l=l[1];var r=h.multiple,t=h.ngOptions,u=!1,w,v=y(U.createElement("option")),C=y(U.createElement("optgroup")),A=v.clone();h=0;for(var x=f.children(),D=x.length;h<D;h++)if(""===x[h].value){w=u=x.eq(h);break}p.init(l,u,A);r&&(l.$isEmpty=function(a){return!a||0===a.length});t?n(e,f,l):r?m(e,f,l):k(e,f,l,p)}}}}],hd=["$interpolate", -function(a){var c={addOption:C,removeOption:C};return{restrict:"E",priority:100,compile:function(d,e){if(E(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),m=k.data("$selectController")||k.parent().data("$selectController");m&&m.databound?d.prop("selected",!1):m=c;g?a.$watch(g,function(a,c){e.$set("value",a);a!==c&&m.removeOption(c);m.addOption(a)}):m.addOption(e.value);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],gd=aa({restrict:"E", -terminal:!0});O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):((Ga=O.jQuery)?(y=Ga,D(Ga.fn,{scope:Ja.scope,isolateScope:Ja.isolateScope,controller:Ja.controller,injector:Ja.injector,inheritedData:Ja.inheritedData}),Ab("remove",!0,!0,!1),Ab("empty",!1,!1,!1),Ab("html",!1,!1,!0)):y=N,Ea.element=y,Zc(Ea),y(U).ready(function(){Wc(U,$b)}))})(window,document);!angular.$$csp()&&angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>'); -//# sourceMappingURL=angular.min.js.map diff --git a/platforms/browser/www/lib/angular/angular.min.js.gzip b/platforms/browser/www/lib/angular/angular.min.js.gzip deleted file mode 100644 index 5daa0cdc93f8c3f207689eed4fd93cc6b007b21d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39258 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%0DP_J$*(3aXuaS&^J!a zHL2v|c&$49ihZddg1%(`^q9oj9$0sk00)#wo8Ey<6N_Pg&u6t_#4+Hv&f}?h0Dw=_ zC)?^BDST3=Y0pW=dqT9OPnHeB+E4^O%<sTSvw@10<};#+oJ$Ofbo1paMD^WmKX0|r z5=pZ`_Ypze_mj=9X3`z?_DSUx?9g@iWI<5e?K23mduk)jvX8W9j*D7tul;+P<(|L4 zw<n4qI$Otc#HyB4Ic)c*c~_j!Hd79xB%T2pqSuU9Lb@D@bQp#5w<(CeyC5Wb__baW z)-3HEn-NNtCt|Q@wNn|3%#`V*osqG_E};x4diP*wgru}$AnVV?3By}`4`cD_cSsrW zAE<@2Gqm;{Riy?_oe=$+i}+!=RIgkh^xt0e#E$oqrzd~RCg?dxsNbFxzfVUh(q3Bv z*emD!W5*V7x&poSX#36X7&F@CNy(UZrCdu@s(QxdxSP(31Br7ESI;=!vcCN`mhu#X z+z{gR8L}UBVke!!N3?v_xe0^L&5N5C*MHu;xcyll$l$4YxPVN~Vo8f|B&+uPfErIH zli?tDY24@=83V%miWZP_H|vabahcE3xXju8ETb~MBgL(C)bgVIp@iusKlkUNvA5rN z8yAiJfBbE)v9}lUe~puOpS@5A<1*=Qt<h`gyM*p+^(Hvn+86)6_m5u>vSu@F-^Wv0 zfLB~c<0pmd{;5$;X0t&udTan6O01?anKmZh^Jy2@pRAGOX^cZZ26v77c-FX^Od2D& z-5S2v%35CIw+0$$B#(Dwg+B94A}39R=`NDZVs#ioEX_kw$};N`kKhyMi6`rnOw!6a zMOa%IrG1%KzHwx8>>c#kR-6}l0&<dDiLyXQ*7gIc5~`x|^6=%>qBKW=lfQYf0-0rb zH=k}<=QJWV2phna)!NXSA_9h0Sqaiw-~vI8CTUgHwPh;SeoeVWx=yK|9pBa%--;4e zSnj_H;1@u+#W_SEtBLqEMXZM(4dKA0#icu#ZY!Fd=qyX@jNS3BApcTtY&#G$*%b5f zGYN)Tc1rfx`6VI|L0AHm51mfXMh|dFOr69X{j`-EGT0E=G3VX;D&34kVW4omR6Y(k zpq!}GN2PiLD(eDrynt-bK?dNwcBjG<a)^jyCKiJX4jhulbUT!Yx6vw<aXPqrTrL%Q zuKn)t>wjJyp8tLX3k&K$v+Gic6>GdFw{iinSe<&Pcf*7AdW^9$;#jNC7S3XrKf=Nw zQc8JH&t5yJt;kAjjF-!9t0l&435o7+!)B8gMuiIevQ1Uc+$a-tjeidhcDDB-;a(`G zm~Jg%gU)y%5Cs*giOov?_jM9?1U*2pDFIuSB@+d$Vi5JPn1WyEEr9P=`Wiimy1Tok z7l)&fn=3iybXsB{Se&SkYF%h?RWR8tI+A@kR?B9+BngdfP;@6-(l41t`eHEy4z9a0 zW;l}3BIJT}CtK0dYbS5yIC&$#l`((e*Q}R_Ba5|c1&5wiRY50enXhmD8nKHlbtS%M zU|cf~o4Y#gqgx9hVM|EwwT0D+T)z18X7;ni$ld7Vr3~4DNME{{wfy$a!Sffy!e99A z8^06Yg#PuP5nTtJs1v*pU8>EW6xZ?Y(`{=B6lKi4pwEp7s@t(M(ip25R9*oG@EgHJ z+VNij!CyVMTV8CWKqI%8<88|2uKgioU}tq-hqnRH^VU*66l#N$`%qu?HWfW(-Y7Pc z7&|--qK~BDbh>h(!KPsx(}Pv`tlQR4n$2#TEN<G;zI`T9ik~9t*)FGp39_nXbxHDu zUa)+WJ-Xr?nXXRTh@-A?6ia)xT<)NL6OBc)D9uIH0bjDZBqRI~&?DB!y2ip9ljx&A zD;HyQOJWz3p<R3`Q43!DaZm?dtA&oCTU{zxF6-J~`h&ZCM5^Vsz3`Gl67dhdf(wMB zG2stO1-kjcxOX{C|Ih9J;4`-aKPncic~D%sbAX@Q$<SleCtLC^DiaSF>8bL%Y@ogF zirH~B0S}nZTE3T8gGqaJET%<5iYIX<?!~D%am4*YEk(@5iaoLe_mM+6n}>S*Qa?gW zU31*iBq-lpwq9^#02&pW68F=%^u2>w85h4Dyx<=%(1ChCK;UAfq<l}FbGKsMv1rU3 zr0DI=cs?vux_!d#<}@wO6w+YP&RMK*W7<<e%e<EB2w9(-R5-7d)F2PaRhMaJy5bHN zKbjqM`P>WU8e^Fw@z~5tv`<>}xY_&%et?+Fsnx(VqdEz!TS|I9r!pbGhNLN(CAqUZ z9fr@-kXSEFmNBlp%D_%*8QAC5(t@`+t`IY?DsrIFvQwgxd4xc_9vfc1m7Htf_Y}}! zO0zIM=rMHl?e+9lrt~M8%c-87l57PB;YxaUFqChv=eHu2<7@f~h*f<t0-Tl@4+7mh z86DCu;`Z|b?m019o2P=f5)@4`<J0z?1)Y;z0BS4gq<)XaFr;B!(C|jfC6e~5hhS<v zyRjI$pwAh-S($ZJ4tX;fG^Db^(v&<DsM=?=rN|B<x-M@8e*ou5*~vmwCj6cpnT+j0 z?2iPO8}dr9>Uqsy^#XMU0`*CazS*SJedJmLm(<115NNbsoA}FEp?sfVqNtoR5X?hi znnlIoxnGE0r{~O7NNjGbcs#9nAf|G<T=tgBA+3q44Np5=?psAk7qw7;BQh%@f)65v zkgk>xr1boG)jlv7*hq=~Fk;AD#vTTX9u$4NPA$r?l0cao`id=Wcg^0TZ{SQ2!)V4i z3)=ULofs^T0@K(JFA*4s{d0t6>u?*I^COR|W4dP=h=$V5SGN0~NJGpeNqY+uFAwHS zA>5TGnhSA;2^q;DEfcHKpO?$OAIQ&$R?f;i9drjd@hb!)Sb|R_b&HhgFA8QoCA!$5 zRURb%RGYp2uhhj|*y_q*HmzJF{^eafy;~j?S)fj;r0S$RZF&6MBOd%D3+ho}s@fBV zR(Ag*XnA=-23E24^{<$J?%UdQMPqFLA_4=DBf#NCI#)aT7sBgPhQQ$^7X7`JMAIO` z5=;dS^rOj!NFrSXKsTFH9_bKzv*~$!pb`6xX%i@LaU4Ve_h^Wiw$RnRQfp`0O!4{` z=rx>ws)nUQ&aELpY8prv>C8@$$1mY`=+l)XtG)eusKfin7EnELN}4Y1S6zCyrAyRf z!>b>_s}ps0<Lj-5`5h@5ug*K;(;L;PMjU5!pqll2hG=IKor|k1>;FPfi+BjB+a6aN z?MoTEV7-kxn$4Un*0sktgEHUUrHyQTeQP<hIy-jnAlHzCjVwMy*`1tdGtPDXq8xNx z;#G@W9{D+(?uirai=7f~B6w^B9KRbw|8d0MlVKeOW|^`}>XQz0A&tl=-pA$&vwlH) z>Ug<4hVy;KiXJOxK`iHtCvhK!jC&hfS2-Vt$_*vdP@)@3wluW!gO(Dslx%CMuvzid zG@RAQhiFIRmzh-?m<l5vBkxa7N<YIcw8;RR&@N>b1<n@QCmw{d8K2PL4T^qFmQ0?# zR!Hie?Agy0_$;C^t9FrG%q~#{o6Pu-S2C?x<BIDbQ<byRY})i*5N~>?GVR6pAX0Rt zp(ngG)?<*G=FB7@gtO%Uz*88gOeGr>Vtj}H_S^bFPP~dSah6#S9Ww4Kt4O=l4YIT0 zt#}}X`$T*aM{rM*g+585w-P9}9_b5T6Cz-xQut7@#7?GU81?l*zNO{Y8L3QuszaB` zsQ0h`DVw)}f79s%xV^dm8NXzUcO`3UN5rLA4uky;;%0Mz#P<uT)1(JkPeG?^Pl0d< z%M(XIxb@BZiAj4z8R+I+R#<cytE2zRzfh{pTJD2lXR)>uE(1<j=*f&2_Hvnuu2d96 z%n}Y~VyU!+*@%gbsvUuhN8&X&B3Wjwo{{;P7WLjgy^tnwk^n7{ujShu>9bTLOtCI9 zon7~C>6SYz^XM(z(%N#-#K&C#%h;6&p7cWC{fSQby?Qm0Q&l`Fp$O9Mn8u^dQ@rL{ zG%O4!btdq9joKvt2EAgrthvXy10!lWs&+y#DO6ccpe1pkPTYuAkz4*~ON3f^!1y%? z6@}qh!Sy)k;B0`HYY0L$N0zL|G+#=6wPUK!Mbitbk@Lq}9OWZ4KvuN+P=jd0YG8v| zN*1yjj>?W%t%B7gfxGc3I!8vrd2J=N+fJ=o$P^9?PMvRdj>24+trR{8-eR-xt#EYH zaFVP<8hru_w2UYsDw6UOk-;Z2Vq$eR4f4b0{wJ7gS!^E4G&)=^A1V`4J+Ir5oS|CP zemH}Um$X&quj{X<Mp&I)ZCBk_c2)P_o)5`@HgZC?RQFb#_$Td+0Y8Yh;>3uRX7kLq zH}r}a7O^6uiW~=vk$)`uF)1Y^mx=l>5PfMIM}<9gvU>FU6sC*cmBavWk|MEyUfr%L z0}Vd2y5v5NJMF?5tUF))e{}vOI{(siepSk{c5dgr+}#KSoQQK|W!mYsoNy*C=ml}j zH%^D_TR|+ev@=jWzQi|^;`1n}lA)`&uVD=wQW4UkG&E&fv7K)+s~En-VItyKd>2>Z zk67m7gLqFy$0V-OA>JQM;^;kWj$<+g-`}!X@L57>m_h9qU-+7I`{*;R)HhO~Qt?@Q zAs%)mXOJlOza3j&q-I|9^ol-XiVRNV2`M4s*j;pD7H^0F<@Yc2nq>`bpkGjTzXjr} ze+9z0kjJo8s4g~dp4BR8HjiswOm4G!K&x|(H5Am+PhRUg0-mmC?EL!st!fNc)R5`6 z;})P<-xC=B-6&CgHZNxkbh=a(T+-LV)00kn{i@?1;>&wkO^vv+QzzCJ>35yv_-Zm% zd9MxbZ%98G^^Mbi0R8?3)wN7W4n5lB(<>Y!DRyX`X@wu?HYZ)7Ykaz5@s}hOUao*8 zxT5yoBuF6Qxr2g2M)x;!?x3wz<$_iVfCQR1RZzhrvR0Ep<b6zo{pgnMRM-ADQd-06 zo{IiKi!F|gAxavQJSO5Yxx!aL=aK&4kj_+IAuE?!-hU>qGzl-4aFC^ym0k&gyK+Q^ zE0I5pS)R9VV4p<)3+CP-*-q3_7SqCz@-We-_&nE#4Utj&zO^qb9u#*p4aC*%QtA;K zEE;-!WkJ}_gXkscW2np7XG+ujrVePlTANC6!M~nLJ2A{CiO^2vE5GWX*s=Y4PwU2L z^FLxXR~FlNQ+O`^iZg{5VuLM()R!NUP>q|I6vkr{zF-#pLE3w)K6Nh;AN>zO=ShKH zKJcyxKah0xKOnh8(BH}Ijvt$2LSiuJI0lFQMjZOsI<kPivNvkiy^HVqq!&K;_rl># z!Rl18BzZ!*7QAgI>OMMk_Pl)EZ2l2P{{y3yheoA2b<Q*8Qv<7it^mnjc50G?G)i#z zHG;%nkj#_ZibY+;U@NSu?~<LkY?#82#D->0-5#2VFq=j@LuDf2ROZc7m6UQ*M!7l# z+0R>9b$pfri&-!9{NRawtyr^C=J2-?#Ys6MW%9SOnn(cfpOGjsAtDRT=z(W*#2+Ip zF+3I`VIf$Agj1Dj!ZuYIh@mXa`krBV;l$BH8@h+}JJ{YtyXT<!tE-&P4L2rE&46RS zBA<DjyGI`LaZ<4OS`xVR$5GB^Wyg!W5UjR^_W|wu=QGThz!{q&<rG0i+tyEurxsKm zCaf`k9J3Ez#Mk=it@NwwPIU>Uu8xZfLfZ+dAlFzX^+?ojf%D-bXleiBf!y)+RY(7} zco4c;obB7IM!p4C-ctvP_W&jU)`raL-fjKJI@kTLyeQVmJwiN4Wm!IfXX?W*&J?oZ zNh}-=$G%|UsLFh=S)01qVpN7tD}eVt`cE}(*{R)fC@HKxitNF;kpfZQ^BLgN`HXap zPq{kG9iKh~#3uP%lX4ZbXY(}8XS2%IDfIpkr(|3G0oN*Rv!_Z_6;@0Y5K{$<sghJu zE2fH?m@0oDrk<3<exNS9@~MP*pFj~-iYQ5|QtZ&|Q)j+XUzC=`GU*;N>E1}97?LQZ zVoLawa!y;11yJFh9eEazvB}P^l9ri>mljSf^m=$J1ty&_8<{$SUWM9JMCaV+tX)TW zN5HMh$}OZ#K8a49YYgh7x)-0E>w9(lp2Ankxmt@OdFpt1hd<`iBvQ;`5ux8p(sasz zb%7Jop-!m@_B=e&)QKY!5M)1BB-**~3*kNp!cWo2pAs{^r~PmmtQ3%h2uFd9YXMVs z4b~QU5@(*s06|3xz((-ViJ*>&kr-c`3AP}EV{DT4%tHjE&?EC@?Vm%bu}#ChcVl~L zdVq7T(@q*HYm@P=xag?+1AVu<AMPWv4PL*i|5*#?=!}{>G;yeVOvd>@xr?<$u6|gQ z!+%*-^4<09Ab`V>9{Z0KElkHlV#f}MVoM50V&lOiA5vpbC(7I7v9HKr8ZxGUjWP(r z!5wA4`ES~;wX1Dp%YOH-01b;sZDAmt>D5b$T8j{paEU_}kb9GWyO&<JY5c;*n3w<i zJ^R#ClIh8vndSqQN~Nk&Jx-lEk9|S~Y+k{))z0d|-<gB!*aY-g8-Y2qX_k*O$3l)= zw1DO!p$1u>#LiTAF!+ECgTN1OIPZ>6+K8{Px#<Xd83`<Y*nUsD8zjOgT%nG`_CNrR z>uOF8PLIEw>>vE`<>aG{22<AI!mW%uUBgg_;hV@UlBz#F_;|2?hC6PqHPEwSz?mHk zEY$s3b=Y9Otp=`UYDL+sRJ004CPWP^;To;s(!Ija=n5KK*v+9K84oq03O<OwZb-X0 zcJpI4De^qrM?I`9Hy2Qo_@TXxjzb&58Urk4xz^3i(k;E9Bz{j%nWtt+uVNXXxde10 z%o$@UWj@Jq?qmHsas@-hbTDu(ybx{8{Uj|bb0oll^3#R*(?TqO)<T#i3lYi=Tn>x? zXvhK}c2ewiq6j|0=ad2|)G+Eci>+PFC|=p`U4?9cNbe3`U&Z`#az5+?+MKQnWMg?I ziBJqn1(vLSmc&?K8h~5?{pVTWs4yvE8Ua-J{JvG(O_EVQ?nJqD6Xua<uj!63e_gOy z1&usBA;In_LrJhucF{czG=r=mLpo;~RU)#GPUcxj^t!jgb*JRoV!>|tc#%c=M`^{v zSXcyUnLr{<gun%GL_Tl=N2%ql__#5G@f_pxjS_!DnQ@ftGew|1t#J5Yj6KTrVYc}j z5^myuF2%~YvLI_#uXND66<tV7{B0&97%}XDG(7mr3UV*lVHggb`MGZ*p6~-4XjVU@ zf~cjlqHL@yb}(V_bDdRQ!eUDpKfLmQgHEYWVj278On5Bju^C6C<nS;nC4m92<bl3E z@f$)-Ux3b*s}p;~o}$Qou}?5wHTDCUEcOEq)g)UJy=Su~l^(9M-~>lD9T!OWFI2ux zn%v?XLcL#k$j1|6P^qbICO^&4Mi0XFvW28_|0>xVF`UK{BO+g2Id9l)id{NOTS8Xd z5_~ugB!Zf=v8Sgt`_u~`Y!^Cf?G}pQQ!fZmmK8jj_xMg6@Q5<=uKgWOS~%mL-Vf6; z9Kgl^M<BYQ6TU^x<0EzXcN(ANk}k$ce2|n@n5G*B@BZ=P5nejqEnK1Hl2XQ4VgHJ@ ze;@TQBIkQs-#go?op-j?{>TPd1mdDD=`CYPSUk#Y$pqK|I+Y5a!N~g_pR!8{aMz%Z zfZn&_wee^S+@$-)PS}5~r3`(s>2zt9p7%Q*WK@@<Iqe%^M(6PzjgJ$n19Df%1S}+u zueoJy?I$oQzBp}qF10P0!65l!0h428RIC7nZK9i7e#S;+479Fzk9#9Xc{TopwWe~p zu(_7H{Q;ZJaew%I+K_Jq)-|mEh7tjnx~R(vO8WU38+xOLkKOm;l)5V@GPfsnJyhB{ z4)v6ji))~C$YdyevXXx`ngPNw6uw+gu}e4=9a~nFY<p2yox^~BP_6Z0hR96(5H9^v z^)&26dZ@Z3N6>H2I;*U(w7qvtaKMrm%J*6+?C7$hi1L{=6{oWmVUtRYT+|}X_(jQm zVGZ`4I;zaYs1kLih)k?MgeVEK=+Fg<qOpep$4PvOomj9)Ia3C%jf7(g)4!(c_>lj5 zLB2Z5%$?O<V5Y=rFssok9NF0bm%q-0VW27yqo*TuazSF98}Drl{?AYhXt)#Js)?Ta zcKK-}9<21pP7A$Gg~7qa`P0SY`R^Bx9d8@!_WWXb(dn?wfuA9dchR|6zVPFV(Kayh z9EpFq1(^wTD+cjW_-1bZIUA2cNVjMgkLEYstzVrbEgs=UAhg1?9q{oTjs_>iY%)fO z>vJO@qzNU$0p-L|DDs#w(vFnthyc9$k}`e=_J(Z-(($c2*caBS!ch0G!WvCQ%zQ_u zpbkvaRJ=?)ZRp2u2II8yI0jOgM}tK)wMcT>?0~>M9F9l9<6Z_!@p}LGYXA}5rVqQM z>z}rNqAr4LJxCb^0?tbE3baUEFa5jOv@4tiA!G@hucs&Pw$6@^4n8^j>;qRXpKV!B z;l?M->#>ufNn_fQ&uROQBq0`Ka9Dm^Cb1T-F{rFWS!T=jlAB8<y2*7pkV#FhQnufk zy0v&eVxF?>GVvcF4+!pIpNA{huZceQ^Hyz2S(E?e&dzJ>l{d-FoKA{A@9g}h?r4RM zs0YwMH&qdZ9*4zEf1C#ngAX-oGpT4*ll=OOF6vFfNZ6Cm^3+osebpYHR>NoEahlOl z+4BX$R>pC#qAajLWpFkXyh35RMfRLZ@K}nNiBv?v!$kG7bD%khZ}x~UgXS^Bf|ATc z4^D0@XgpNb;$0-=Lf_c+n02+71}(K->h%aIia^T@bJd!tN7tg-=sitx)r62}<43BW zrE+nq{Cr*SJa3g(0rtFdN+$q+>-J<;vnW(nlfp(Yf+s4G1^^Sv7K%WdX=J9{9Uva4 zL#q?O3*X8t%wE?84U%Na_~_9g52_r#9-PWV35&~{{{FP!NCU|L-?IMJEmkDg^G5Y- zY5~l7!O=<kreA;~BF5gIfeRe97D$o$r)zgnIup3UUXnf!Y6^MD(drSaQ%kG$BfpX< z<VRxeixR}ODMBJGs|S8H4@B8UUY$hUl8pMw+|#%8#n&Y;8SN{zL213o95#o5ZJ!4= zl>`Cuc)5BS_AcLtyD&2?tBPc)!jG0)DOO(@aR%FwRvkN#R(OvK8hb&|BqfU%3{*Dr z&yk0iij0m19WPiYxylSS-O{(X!1~+Rm=G&VLz1h&Q8xIekw0ceYn%ByG@M*-ChE;% z);5j@bTFJq66(2vL?^!Z=pfU(;vHbQR5*}SJ_ojTP}q{$D{acwgMmDRK^B|^OtYZp z#JATTD)oEf?+Qvdq3O*I-ZVV`);^hzhnF+hVqE*P=z&Iv2#n8S>12q-QY%rNPaAVF z%vaFB(0jb+fuisQRwJL=<pW|U-XB05n<|P%85Up&W&T)R1YccML@Y0YBR&u;Kw7UO z){xQo`ET570bX{^4N>ghwP}`r9kwY`Jan&dY`JEO>V$4!N`DQD`G6kzG=e@bosW+k zse@9pXAS~%4bI9{?e=Fh6S}l#5Z@&MPSPrk@l(BIS%s!ajurn{OWSR}U4`-qlib$c za#j@z`RVDca1d>apCn>z?5aiZR|QmeQxb9`yrIBk*yHpi>x#{37O&9pc8jg$^)VrK zyqNw42&&j@WF|7B#qbMwl+2Z$f6$7t-)Y$xb)hLFJH<{UvLLM%1Href0)|?WmFHdx z7iy{l;pb6x|0?N4=1K~Ws{9gdeJ;CXhVa6Y2~~Af;8R`u<!cKfs8lG<>Sf<T<%i_% zxfvURDOM}-X)VI#U)1Uf*2@taBwc`v&=1&W>hJ$${gxyEEy!23z-I!MnTCKfhnps? z61d-(Q%qs-yR0MYK_Sunf%FQ(keaZr0Ln#iPxzWAD)32s-;)SRGxIjKFX8TW-1^%7 z_<?4YVlK3CNwHWvZi%SPUqv_}*J)p7)A4NFz2Udc&OQs(O0AGm8Rci85iZz_K1&zw z`jEj`@SZhCck3`<056PFt2F|NH3!~d`W_TSKbS^C_Ag?jwRA8epQFRtz57nXS7CqB z$vs;I(}QJ6Ic9~32n6APu*>N&U~lB`Iqc8mHjx?V!EB1S%)J&zONkomJ7Kr9;eSbJ zl{-Rj-1S0n%Y1<V&}pUP{Jw+|O)RtY!V^GKTf4LyIrGugXuKFXu(5STdFveI{2nT+ zoH#=62LKQgVS7Y!AnRFTI}<qpJ17z(^>X}b=T$&to+TKW+b6=l46oBttHo`t)n(<2 z7F<Y_w5{EmD5C%xrEx<pIa(0?i@M?a&CU13t=(;I-nEhx9#Ph2e<UKsiKulSfr%rK zSlo|Z_&$>OP^?+tLw*s{X9Z68k~N?6#2rc`$ZR~|ucmKK+})Qi5nwr|%&!7jIwQh! z+`Z@Fx7>ZfH7q#a^B`RGHH{&>ep3M<#)5xAm%!F5^R5q(^M})<LyU~a)ogkOLip!j zhz&dcP`0E;0`rVf!Vl&61AR$aWc1vjLD5GT?LYSSK7M?&w|_({uC{twPV<B3f2iy& zNAO$qbzMNWN@ZjAmx3kW_TNPbd<pJabdnbX4IT8gJF1lThWFk(D0O5ni4&HRKT!cA zT8#NUgHdG_5G$sXG&x>H(OrwPG4Ph+0hz6qP=t$hhEb)(aL2I!gMm6$iwa>Pn?{b> z;~YAm-o<yCISI@qxK1xbM=W63ulRH77IlLhJZF}~o>QH7wX;@3YUJl^nRi#>fugxo zqRfQ49+SgiV;MnaXW<h4HOk#9A?sr=vYpox4`2O}_=*RZ76}WX&CLljdFt1FC`Iu$ zGIuC6{3L=pLx^rH704=&jU;AYCxMQTN{PDGk*va75IETiPoW}%*GLDe@DUi*pz2&~ zQEzrsH%ba7C+vxP4lA~vQl-Q5R<K&r*AJnGlYl#-$BK7L{i!D{A>E0Up7^6?*Yjd` z%HT(H=_zfYPEFy3?#l;L8iAw8eoU{^h`^?M3gvcm1enk!H)zKTQ0&9%Vm<g`KM=q2 z5Y0`52Uli=Nb@1u<%u-d+}wSw^N5M^kYNKBrels&6|B>oIWjgRQWyT<mye~Glx3sW z2fwTBU00y9ccVFNIYJ526@gL)bS5zddO%b4f<kx#A0rluFS+zCxO9e5L8x<$IV|-T zT`uwlxGK~c3s~BAL*0DATx;m*KF;{~Y8F+})am(s3wYi0IffE3vOEes`lV?{tk~S2 zE)}?ooGX1}9?@I96wJI{QkE4n-z=47*jR<>nbcUJlJL_oL)UdK$T+;ib_rT2v5;Zb zLA3NxMwjyk>_A;4Q=Kx3GJUMY5my~+#fo`DyW-~N`Y`O%W#5bY!A>}_gcSTQ_b6>c zhp;=$qbpnOI+C!GE_SVuk=>@hMK~{w)RCX2wm)#og;+t0$`3kTILCgeg$>MeR5L{* z?P<9b+WyC7nEwSh8@!WBML;N7#0ZsCE?J#v98nemIQykOb(7~lq*9XKkf?8#roqgI zKcB^9Q;^s>@o=N9`ONV@eQCcrIQaucWP4|)!Q<P5{loU&$3IRFJ_k<A@!y{ufB7u# ze8>O1cXoDg^64}<e;i(psM*1;PZ#f|Nfzw*!{m;yeuf(1^OP7x2Un-_F0MvJkJGmJ zQYQ9JVWjf2KadwV2UQDxsSAFo3%;1|>?E&N74ND?suFKSEggUV%gM>Xr~Pk#oPKM= z8hYu!-8(xtJ8U1AzGxqRI{Oef|42sjWO`3be>&xhb~4TSYkQOF<$$j5*Zwgd74&a# zzqU8;5tUjyrJbjMOW4|Rb~DEBCt|}n;cb!eg<}W)IsI^aa%O5nO{fG_s0vU%ibvTf z6(ypuQaO#cd*1@*bUw=IrS_PA&WIPn@4t$CB(Bc-^C@4vn_lAQlvs@^UDTVTibGi_ z2!-HvyouLJZ|t={w`pQHdu^I2pW9By9~SxLd>A<Gc6%-N*Y4N)!EhMNW@`x|68DJ< zCqmuc&bRNyBcykUE^wGx=YanFwYGZM@dx8kPdu^`MIAa>rgGsjk;_*Z0gxLwRy#PS zNu{KvKjG-6`^n8JJYz&*Nn>X`g357B1dR?tHjeNf>t0iBB;jmZLCF(ifR-SBAe#}q zNkxD-6L(u|N85HRq&Hgin&QZj3SZBS4R!E<U4Xjg2M9j|JX-o;2RY76-x_^$DJNYJ z1Mt2$H*ZOWuVvm}328<R62e90G{Aw~QlvLiVD^>T1;|lgvFF8?lf!*F?of}>sfAvl z{OH3LvY=_Ez}QMO+{-TUg*si7J}a;Uqa=g2oUcVXU}RU-$~F^y(=u+vdZcbk9w55) z_%3y0jl{$Rvfqhpk(~v{s8slBw5`{_Tk&fwtAPK~kW(xNjMKm}4oIx`+vRYDI!}WO z=4h0Ms!*Ci&0Xu=x6+nJnqtA=|Gxo6ny`VGBW0mnL&y_O21}GIwqUMHTcFq=C-9OJ z_Q~s(sqLqfIH<`@e=_afIXsiXec({lN`(uAYu!b>Xk-G8%3~nHEGsE>u-{ah<;h7w zCo%P{H2yL5a+6k@l>~%eRV?tI_cFU3Ueiq=gl#6mZ${-z(%BcvoHfmx2ERf#b6P9_ zU16H3%m>j=F83M~tEJdtc~tn~5gQ@nQJghhx~DGj0Y+8OYG~%Bhz$Cna(uET*N{a~ z-b6=g6DiB^JhhFwet5uhYrxU;rzdVe4jVA)+sO8%isd&1_GF8}6Reyj{h6F5teY)O z6J-_2Ln6`Jwtv6aj$1#)fqSvt`pMg7@l0VYMTQS4w3s4gtF}-g{BWp%Jfa*jfqF15 z&UZUOUYeCr{vS`mY{euj{;!iT<4KtDBrGbEu#q-h^KP72a}xQVpN)cqG1Z8o@2r{7 z=L}1Z{0zxBPFKedF42%5SqLdtp6kj0DL~f0d1}j<ZBo-_qG$E<(|Ve&vh>m^Z0(wM ztQX#ugB04fOCnmFZh(9@l)n+erqm`!3ChyK5;K-g0C5L84!?=9C!V!?dAI6V@rDsh z>#`9Z0t7*i8Y|cn2}b#>e57<Tv?S&hA~do{k#$vCQdI^cm;y>k@{IN!*97_yDDkI4 z`R&l@S<F`0*2_Q#{xHfd9Ce^8OF?E5yTj<J1lw(5Ie`q?ci7@ydbCD{w1aJPtkpsT z?7z)|gUk!4IGSQtcy>&)vd<uUg*)`I6p^4Po!d9F6`_WRUI02S8(d~r<uEsld)3Nr zrh}v6p3b>!x03MnOYjwo{w1w^OZIV3e1!;1=!GhDiFOa-=p`X^t?XP7MLqff3SVk@ zD=~bfL`!Z6GMozQas_VxmCZ-Bnb_$+-|q?h&Rj??I&A-K2{M>S64zF=0QC9KWZ-c; z0A-G1_eLR%+t*X+bSl0DVMx3D`Smb<t|z#uazsEH>F&B3YI<(^z6(@dbu{;nl^W*U z>2|k%`SsPyonN=gMLCT8#z3=XeysyFPZV!WI(8Pb;}?_^clO&*gJjQ`fs2texvhzl zK->FQD}izH*vX?7+A+2|0d4}^cz{b{A6s&-C_{+`U<)sMP!o6x%5;E`tj{9x$e#97 zIhwp3hJ($`B(lB)DC5nh|J;ZF$fuQ-c>Npgt_s}R03k+^)QyK$LqRGPvX5=7VhKA6 zLtNL1Q|7H!!bKP9ymv4{)S~=9A+XOHBA3NwNd?W8wb?x5Ici)C>;oO3j>GsSmAG{J zxfeS^7mnz@<=}MkouHvE=vR0spL`TS@oM?iV-8W703f>XR#^#KL6%^HH=2zH1*@Wo zu&|2+Vx9D!p7ukrWx+EeT3;{3#&6J`m33Vb*JdAEBdpMhrzXgx2>7MJXpJeh9ZpE# z=R$zavR*oWJ3*=u0UoKDK>_V$k2U~CYcC+X?T%p*kxWOp#V@u8?q|9eT1SZ3XqE&u zE{<~WlNCt7bOeWvP&70t*^IkoyYa3$DvFS0(>WWU;`l3>-+cz9Dzfe%x8qA%cG4Rn z9=mj&<^L_KuvKM^9C;cu=JEhgHi2x2iVuqEjSOq8#E+F?)cjXPvH$iIDj+wtqDG5N zh|8p%0lx^Z<5ddF$3re@S^vOUYAe%e|7LilM0=GuElYyZ^MP2kYhZKXsQB26sH+Xi zK<-H$cY5CIgg9LGVYiRF2#B0fKTM@It7y$fK#l$^q}K=va?3`~&c?<qly|8Gm&Rdq z>$ZDDuWk{0ZVB?8@|_4TBCg?elyW%PTW?u!sp=3mRyDoyKI36G@CrnH5(bqBQG)!< z<Zmv2*^@&}*vhAw<=Hh-{vkY8YY_$GVbJv%H$*Hr4J&dLx>wPaP|;k;E<}g*Oov@z zGl{PJ0e}1qUh<_L16m6|N`Ux5rE$lE0!dU?Q?Gg^s!sl%s<R)cI{SO7&R103sMekT zJ#`m9@Y%)xf7Kev#Sq?}!dbqG7^12^C%Zv!<%|>)@<%3+m_I)<-eS0)9iB?gT!&IG zVwoYH1)}eQE9)fqL55P78^a2mhlUk(hf7MRB$orv)O#ck60dxqJuI|hPYPq1SY-98 z*oaquP-Z?Ti&n;9O*wukstZf)%cy;DiL}46<R(<}S2J?b&nb$N{^}OBhm)rETW2@* z3MmtaDGW4LfArEk%4QR<7ya^E5feGhVT;OWp91+4{&e~Is}AEpTB3gKlZQw^VLqmP zgx`h(y#H4}D2HG7d$bg=%Lts}?(4!fwAQvQ-N+FLOvJc_jS`}Yh?t~?uo*e@IkUAW z;!gKe1h+XclC;?tIh8PrVCEA$GbecAx(pp&>38QvGi|<bJTJZqX5I_0`QltAb?E&U z&01H+FD|=lRPE;G+DzE{u039i)+P%Sm09TE=g!6SV$|`rd%kmVv9U{Ma;k?4T|)uu zE>jC=MQ5HYBAVeTG_SX7QRzF@CKVELORsRo=oZi@7o#O*nne)2-15x}mUF2?Yq#m> zsqFaTtp84xMZM!Ybd+}{3pO}2T73?t0t>lXCzP2`HH>WOcMB#}0=V@eT6<=SWzulw z->iLUd)r2`^>_XX38PT}6QW4R$s~XvKJk)?6R)v6$y|!bZ7f_OE)q$36ZzlYI@K!{ z$<A}%nOFoGjqXM-)m7D1r^d-oDw$He@`ykS&_b*#UI&TYxyKF*S(Lq5Z)i$K`@OK- zNTd+=t8RZIRu{;%zzmZjO*!{nK};$+_xFt=sq#pbT(9-6(i?Ky^6L*P0@-Lf+tjpG zWk*jPW&|srXbAnKX_1t<wR$~=hx<=!0BNj4ewtxqNU$taoV<aQVuyRGh`rI0W-sP8 z&Dy=<!{v&kF$~=Qa+Ht%?d&09?wt7UY)^LJCDph`@}jbrSmWIvq^`qxpOV*mc|o@s z6gVCDWE<;`x*}D96DwmEgHf!kU?S$<>tV<Z>q#3}!7Jr8T)^ns$BjVrBoH+Yp|VCG z<o#abEarnixPm!hMHFnWvGIwFf>*=xs)R?olF&4{+nVLh@Jm*>|GBK<NnOnb+~h^c zp7&?HFB|J(*S@0^5Zx+^eWl8*odJwgln<l2NN%);N=1h_GO@?wQ376KEHz2mF(7rd zFy;_BY{8Z)w{cX`lUxD_CYY|_h4MgRPzn$u0q=_)TP(2!N>t|0v@Oj<n&(TSo4cBN zcl&7XqUII0c^YdarRL>B62tBfeTiWcszngppv9#<IGo4|X9*BlK9vp+po*}~_FqXC z=PbaSR(gp-ei+-^6hR0hQmXEk5-F$^GY<OWC=XaAVeuz)F&T;h7Df2Jp%`VVM5VB` zQ|6We{2VyX?&48jIhzeQRMHU9S*1B8Zq4GEX=|!o=y4HVlbZxD5^GY`!o2oWVC3=( zW&)=!j22ETvVLxQfViOC`dt{)BGVRU8Cc)~X%)+cehET~XExUI#0fDs;SkVz=^P%u z0x%O;ivFmw-#ag%mR;EJ<@gMg7ep#ktw$POLV)@GZgYXTE|4R*kDJtm0*w}`(V{wI zOPyL;7Pfyg<!MvvSgNvY-7hzME~-8tshu2?#BG4mhLsyO4qIyJPU>yLuua?*0Q*U- zfGltVW>2hVa>&>$jw;sq29<WhMuAabXifOO)S!tp)mP|=yt)AuSzS@GFly2T_*Gs` zb~WiCfud%_E6b%2)e>ewe<qi;UDc+93?*dE#KDw6BfhA%L9OUge~xL+H_Sg0k{K(^ zcq;m14iAKk95gKms?)Om$|ua8dbUeVd47?z%Z|;ZohL2f2E}wISeWrv0>`%gU>G&V zr_9>z*f!WLrY4lilXZ?~86F*F&<^VM=henHzU<8Roem40L8)kqsjmY^_FUGu2W$R% zOMrU~3#fdC<(U~h{c)xAo9~PCVyfK=>W}BkPmRwQDMy-m-d5(LTb@#pw>@%SY_7H- zu010fR`gr-A<z5<wF4qHVp*5$-DI~w1nqs>`Sx38{pv3Y?JI*N1QX}$OBk0Gx%Epc z*(#5%Jk!H*4Sc;Ue~0NP_Y)cK6DM6~o3hnybFdUQYU-_^JWW0U#$mu5hFea<C|(V3 zY9`l|J}~vIwFu7Vl$nP-u+=snd@cu+0d?<$F*0^7tKwZHiFNI8C@CeJiRsMt&%nc9 zZ>X}M7v<?!OTD84oWXaeXRJoR0l&U3t_zE;aR6t)$K2V~Cx}W}EF^YTHI3bnob*cE zl*Ek`I9Ep(m%6Xi@c>Q-7PO2>hO>`ibD22D1Q)JTD)Y&|LjRpw<QgXmu6D%BmwTex z<Uuw(BC%5%@713fIE1E$N~43r2{q1+c^%fnZsG#*Ip;LdBt*2FGI|~?H6UqCfGBMS zP+lU*9j@8{hN5BUTFpZmM80sv6o7Hqc1jx_ZVAv#^yCg=Vdj{KMRhvV`bQ-?^PlsW z6(B0pUz8@gsLyh7$KpV)xVl>UwbfEhs5T+`{DKqq>@<`gQ^o}}R&ki29%tZ4RTTn2 zEZ)s%5v3taG@}Ja;U;4J;WDC4_A1)n&v$WV@Y?rZafmg^w_W(@cKaywbZ_H4tTS4; zkYz2N?h_`%j3+B4f9+TU?zND|hJxm-!s$jKwUW4?xdaxH6GMhX`%$otezzOb7GL{1 zM$#J_PxH|&_;@HmedSK~<|AN;ah^Mn{X#&NPLke<@vOOE&{7bBa0Y>U0R`D5c&01F z5OoBCx@|<B%wfMJrRfy?{X6&*`pp@^iNQkmlVrvgGBYYsW7JWl7bMDt!fL3mBoKs8 z>7mJXMO#uxVmis@f@Sl9By%XH>4zwcyur_Qi=;%~$WoAkd#OacK~omo6#mF7)reRm zEg8Khl{h#JX9Nr`fOa*g^KBz^>rK6pf92kDb$nuUbt)laxki2`Xej&eaKE`NS4T(I zsfFs1y3=A`2Yk!rhne%C&>6JLzJCeNI{*>qh`1J|?6Z_{!zMv(6iFhLv1Rp8xrX@N zSXgXA>Y`x8kbXGH;5H#A>^n%pMcnh?=S(gM*r&pmOy^d5-cgb>My2Fgs`dmq10G?{ z)~UFmQ5BLMUWFe*=trN0uQ9(rhEKv@<2fRkawZ}IEk!T#<;@4|@o4iiNq8?TTn!|d zUtv(EVbmoqywr&KzjmzB(TR9uw_w&S6qL48>sCZE@Z%(T<`4j$6<5hb*Lwy31{KgU zPbPz_AqK_=3^AZ2p0UlcKf*F1dWacA!&F@LKS?4Hc?%AzWGUGA@UWIPIy{`NUx*hR zUP4~MzwZO6Kt_{E7M^gyDGn~9F{O?8w2_wFqCY0_^jQ#obBg2okI93hb@+Pl5$g~? zAZp>0<P}=>;WFrZM8Eggo0@J_7<GB=I0r_Y5<Y1sUJR6j|A-l0+MxP2B`s&UO&SGU zpVSFG2?7%)C5PM-$YEuSWLV|O(b>48(^A8;Vdvd_H7I5`+issxH)BQ|9zHAYeUi$> z_PKu9%@YUDkS4cu6?XF(Y$!06AGTXP%`kpzgxzAUt}=O;$s5tEMOaY!=+{7Ymu0y{ z$oS5sSL2zP#!}0s=CDyQy@6TK8%Xb(+jW;78=6;mVQre^^6H9@aBbXlv|z*GJIr*K z)AnV&gDby@Ek=-G8O%-|Z*a&EhsjV~?u#bY!ySOI%oeHlTE1xFavWYs#+xsvS#V+} zu~{T3HKCqnOL7vMnYD&Cl?9~#vq0pCKQfR=U33Yn+)7;<x>XcX@2c@v`6LO}aLup; zOCG6=%SGaF9Sv^0k681~)VDcgBX}BLc|WL(d~i{c9n3=6Zd;e7PcczNM#?|e-9wvl z!l&PumF|MNsHnjDWeh}anB6lX!TX-maiwN9cdH3o8_LcrzhX3Rd)VzbgQw>X?^(i8 zPQqq(r<C56U5mBS?xz{;pCnTVH5_I!)UOA3FrV&Rg84{hot515Bx4>pGiY5>AI!Tk ziJ^H-nv^Ki4arFtR>1Z2c3X*`KqS@Tr?v&>dg?rPHW;TYB@Y!r^^33<3ONJk(@o=7 z)1=Rp07LsEv0Rhn2D=?eD$?#-hNK#Y>&+4e!k1z!%KSTcul+90cU+5Y_xYq|Bg`*U z6XE1cY|~&e)Uj)HbUSNS+9UEh519?hlW}EOw%aV8bh7IedW+kgjN`eAdO0&(d^|sy z#dC>2oe$<i-fwW>;`LwXDYU@6TbSU}3I=OVEeYqu;m(Nn;UhB{^KgttmA25aV-FJA zeWx-QnprjI=KM1@W6^R4gP+~r-Q&N}-J=ANYVYiBVr5B;%VQK=>f0=qAnfHK7!2cy z>hcTQ<&%>O4f&k|?^|~Hq}1i3z#1A;4_CW<f-av>mtV*(-}lSa>!kyO-4a`r8MY^D zWQ#I~Es{l+*`f?-YD|ruQv&2%N|la95pdL>7ZxZ*f*u3sYTe(CHkaEuZDyP0c2mr@ zz!nN3MnSIT!lP|ETc$y@WsI=tT#SqJ<71`v6Y!^bBNo%m^b;@2-zHNklKSKC*uYQc z2o&>~V!qJpsJ;Wb<{DaglJ`ZFN^7tEv+ee~ljJPm$Sl`5qhY_4(1WeP7*V?wm|3B1 z7`*GnT8xUwYmcou&<$0t;m{C@W+V-;wZd42Do-V_;Sn?p#=Yp?y?dUvWPT4e_I)N+ zIYSktN$Ofa9r?le;Cy(qYxnPU4$lABhS5Jx_Rr5<qbLW$|3mjXnNAnZ14_6@|9PR; zxmQW1w80<Iai@P65ARv4^k0kdlMk1^_lMVRrETxPV>w`yI#za0mQ;BMaK_mAuDN84 zN(gJeI4I(@fFH61Uk-6+%=o!~o59HcGAA-`9zFT<(aRTSPkujplZ++wVww!(kPJg% z^v)|Ag{^t^Hl6|e!sn~ia{#BTht!!DwJF?CmPmdnVWL-^=o*luYrY}!;~H2YX$7R< zY-C`l`U)Xoj}h72ur92g#fh*<(kM8NCt%q)ps6<au)1X!3%I{kh9mLrY?oKeVT9(i zFvsKy#SDwt){0oWwWKeFCq2<J)(p7GfpYiF;Wh^K@@Oy?92aYtFg6_DKYH`Vy?y&@ z>FLj<hi<Sdq?<SNU=#aE-}ysxbefu3GEq-xf+C}~&0K21Xv-gz-<P!>HqlhzbYCMy z7P?4lIa0SwMs9X&hcPQKS$AQ}q9jFS3TtbooiBH4&aKz2?C9DDX86F&ejrib-1T}I zn-XrBDB5Ya()Su8@fv{JF0>M(_(AJ2Qw+nxVrI-v7V%6n43>@$X2bro6uKQ;N`LOL z^kXD>2hzHXF@@8oKr(&ZaA9GYnhF)RP|;Xu&n?vSp)*X2bwPa53_<;zuZwrKH!zF! zt9-28v{XX1!W%=vIOEV7_r)y(fCvsQ3o>;b<}}<|-AS&I#P09ke$Z+TQXS*Wbyhqs zX2qC87ds2e1Oo*7HD6DQ!^7`R<&}=~1rKL;-g9vF3&d+vzOTX`!&I>|UDtg4Tu3e8 z-}8b_a(xxMfMQY~scvFRQgeM3BfPgQrSxv2_@3@UTg($~Blpb@u4$~b!eUQyvxsK2 z-K`M0I5(#?{oJKR)^?=?i<XA1oSz1Y3kCeBsx};zT20cN`5b@+i$>UAAj8MS;Eej7 zi}_Qm|Mc2fFl^%g82FSn0-2wx`g0@ey8V?==@rg?XB88f-*FWz@zr;jeKbSB>hFYd zKl!ikAB#o4T2Avl|2%I8$8yO(_2KF!-c4x+FIVtO3p&^9V)erqqBqBi3<kX+92Slr zE<Y5-@l?hGx$8BO-~{`3-$2wF8y7vycmS{=V$t*Er>(T~*uLD(*MZ+pIGj^(Ov3P( zVNww?kKs}|xNq2+K~P_SG||Gku+rltpVWZ7&62tNtV<$dlVpYfs=%u^7&1L<>u)cK z@;?&5GiXmNtcfCc(wWZtjobF}Qe?Ctu_Msop(h*cA!zLWKE_lm)>HJi@)Vl1y|Z!} z;@Kjr&=xE<=MSZ%Al|2~i<ZTL9ga4>`|Zjm#+DsWKQv}Bg$CMW@J3+;MEme<S2x?O zy=MNF(LlG`2d6mzSV90dNC?r$TQ2M!`wPNLeze{G>tw_kpFps#8q>n);d<lox#9N- zNjkDIa_k<<5M!E1kE<xc`Scw^2tiRqwG-dZ$5g2ag@q%m5N-nhMWha@K3}dR%tSN^ z?VzlqS!nuw9W6q&0HQnu9gfbzDmjkIp_}G+8)`e?5?7x$+?HE{DZAicRmMxvA`Q-x z3xhPca8U+DUD*kJ!i6y$D|}<qNP}=;?aU;aqgElBSQs!BP!?lP^Wkn$Mh=|NEO#>` zlXyIs43i7%uP&+Z4Yr^vc%ZXcz_!gP2SYjT`{O|=wGle7Wy5xq@`kD_v}IQ5X;6X< zEYZ+wQL=}N0UQ1s{DTopZkk?i3WYQgLT#G-rm!Mz%cA*d+($BVsIkWA-XJF1ODi8o z2gd;H0j?ha%<ww>gc49E`b}Ye_4S2)@sIPqeUsKD-UR55{BiRAqf`Ma)P6HyX(3G5 z&_?<RHS$;_am#*d!Y#9j$kn#Djtb&gDuLmkYUrb{iD507GD;k`BzcyZJ4_A+a^qB7 zIT2qM<@G0o|I#r=`irG^b1P)TdwoWJV<u<C?TpxqF`|u0)2f~0l4P1Xl0laIybT{h z73|0RQ99>Tg6fIS3eFAaJ9c#lmI%`}tXhUK@d;Abn0@rZ=Kz``V#uuJ3wfg*gq{_A z%Yet>b9pnH&S{HSQeJhxd|#~KqT+=wWr{jn4qwW`maDv2J*1jm$@^>Ui}Hn6h11c` ziU!4&^?%%d?x<o?eJCIWJL<oLqfKX%BD*NZWU{EaacUzZrczMZhw+3(Y@&Tbxdy@G z%evesvkDrWbh(@rV&O>;^Q_sa?X~C-mn~*8-f$Iu0S=WkA8DUgu>lj;xTv1!D6pBT z36`)9xKS?Po;IvN*hL`43+W@056#zUYaSw8Y2tgp>>)no83s`DDF!+31W!ffse=l( z(+Y*!r_~Im@S*z>sL(W4H;CC?%Nhk0_bZ{@uXL|R@>Wf-sO+1iw{32Ua+*?|8I{XT zb-DVn^J)t~X<F_7CEY$&9c_DgXC{-ZMZk8(<I-}Pg}KFC$mJ}o7hwjf;^RdlxBEYJ zl1Oe2pj9q^zlkO)KeU9(;2Eb<3j!_J)JdH_);%XkjG>MKyhs)yXaNkL1Y0Q~0>?<P zz%{=%bDF81SKQmuU5-Vr;%vtwW5Fh&D>P8W$j|{F))cucbQ0LuWex_UqnT}`oic`R z?GTVH6d&slg`(p^-x~V<ntirA8sL|`#yST4m#!UP;PAey%D(P)e|T^_MmQ-4V9;sd zmo@N~c69G*N2$u!nF}LgR9+;#?@!l1P8UG2N=an<-O^(Pc{xtHr)iwZC{rR`>%-eo zlD5Gh0JUw-K7C5M;@D3kdrSaLrE*pq=`bt);5<L?4BJ8BAN2z%R0aTE@{VYV%?9^r zCe8+54^NAB518d$FCxKeggUyc!@mf+CxG0-iNxVy@09K5Xr>Tx`*He#M1G+9wAemy zl=vg%KL2Y5fs}&==xO#?MwKm86s_sPH{rBIM}aJdBUqX!oMny>%Xu!B@BJQvlj`1C z!Q0hO?~Q`vQEZ5@shZvcf*B4+R4X(@mDIQ~{&ILpmwd&Cq^g;x$)c_Gb2{y40V~h= z;$#-XED#pk{_N-?_~+%}VV8#B0zJ}Bh#jTBBTd~d0(H<xZ=IO1ZKeQIIF+;bf^tlx z_md(H(l$m4P-yhC&(XB;X5KD`a^1}p2!CI66fm{uNbKq$p6jI@mvaHFnsd>GS(kH* zO>buUCRNZd2AS83X$JH12E2Bf9Hp}D032+m_6r1k0X~4zGFIrNRixS@=Lm(q%7G!W zQd*W|+ikbDj3s!_fI}v=i9KP}Z})`q7N<v9P*4X;m`=c9-Iw9Ti==no!Y0C*Pn1{n zb$SazqdhsyoGQaHLO6=P$N1Hh7FquQgo7LuE>OiAhf1->Ga#cmniXy8U_Bp;kA6wh zZZh}}P7~4pCZgsax$wMaS!1waEmgfi1V<|PN1{#tCE10I?31=By7DmO`{&EWW}<I6 zThMO#4~~RsVh|j)Gb*Upc2=o4{<izzyC>hc{VR27rnN7sLV`ZHlE|Dw5i_C)H_|<T zYwv0<sv9y!1}*mQhJB6~@b>JHZhgcF`i=-_Dc4WS>(yFj;mbH3d=E3^G4QGBvP}e} zJH)Avz3&Yf9ZqqJNQdeTzxRj1QID^_Mjlzn10q1(;AkAnGQN?wqj<u%-|}sluJxXL zeUFu$KhBndgzav}Yg5*LaaKex)OAa1-qdW)LP<f0HJ;x**ab&@x;W3xuiuZ(%vIEH zx;*djCK2@UfB%2B{-Av{4CG^-4UZ0v>o@=m<|4<0_A2&2M?7)H(()`sIuR~f@l~LE zS`)NHV>mdou<*K&I?OES|CjzmP*4Z)52=1`=0PS+!uMCg4FxTUCeccNp8Q&9z+L*J z5lCy<sASH@Bn3UVTwcO<)>rP)1yUL7q!O17ipw_z%&^AoWYV8NOs#zp&?M~H{2yO! zzdGP!c=rhYtFMsql~<B+9Tuxms<S7f(3N1LcGl7@a-fw04-fY@C1Fs|OqA$qZo23r zs%D=^Gn=?{Io`aw0i&<&Wg~;w&GuSFEKc>az6F|(#K}?W9&MXDgwzmyUpnhEDx-O+ zEdT;oGR!qz{Mx_`5}IRcVfx`!GX<<E_*}{Jm0*CUk{ZH#=&~^CSQLy)7J7=c4~<l9 zv?@Tr?mLoQrT`O5(jh~$l~Ul`0U@AEU6=NcdQmTkvXh*zc5*Bc1=2!Di8xE1W4UAz zT*PR5%-ulfhWPLIsF7m3eIn$L3u$uVwV?>MvKcMeqjE}+C9P^&$N+f`NPbMir)E=L z@$?zt0Nv>P{Ic+Ck8nr^2_c9CJ4EK)eJ+14b*HfVKz{37A?Xh>ZWAjq!p=*_*@dl_ z1*uyj8e6pzBf_%anYn_e+4b|Gug}%H4Ebb~n(6}fZGpQ)KQQ*b3S^xoH?!&D0>K{H z%N`w>Z4!G)<M6{H&)9&l=esHDZPuu@W~PiLK%a)IJ%!~ZUGPfHbuhk}Sd)Yi5|i>S zjozn0I|DYY$aCk(`!ssTPj)Ry)s-oxMFYkNZ&vV}TKOIVKzlTAKBVY&ctv#%WQ^b& zHl8G6**SnZlBSIGTA<(YkMtHE<kQvWBP1JGDXymL4GGOS8m8NKVm8gy^>m@`dhw`p zfcDB3z_cQ@?SGB~PalB0V>eexx%Chbh}@u1orDDOg^{AwBMzUft`Q>}-o*#14;#uf zZ#ggV`HIn!>txzd=2ewv=YSZI|KR(kFnS30yE1ItkHWtQRozaGn!lW!t8;}emj+O~ z{Ro|F22);bknO`#5x)%d>-29}>fa!2p(M}?^kj%ISmg!+$RZpE%3tJ$ibRRL^pzFc zJ^~lBmz12p(r%KA&3Spkb<5xHH5c9kjHFUQWPvjidZn4r-RX{b%yY=~u&Ye>=b|#p zKc;~*`MTxF$5Tuf>znR>r8C@75y~x9gqrV|<ySPom3idU<TE6QS>RW~uKKjvYxWpF z>*vwhkqHbapPVL{g6)2%-eu@+sAp(zmu3{JbzMir7*29ovrR4hrBabU#rlC8Qg*%G zEa!|Pj9YAm&!=l<-~%MEMFOR)VZdsbwc1xm6cp3;)B$I;m@lIK1+10ss53;Z)}rnf z5<;CJ^5was#EUMobTpNMdR7E~bv*#Nz&VeJa$qg{`b_lZAn>)c<q=<z5v4m@O#u&o zrtQoG>rQy1Ja{){7p-gfAQE95k!0^lA$5OL?z2=o7xZ)4Y5GkcF*)?vU}<VrvtcrE ze1ncY8P-R^K_I_g-Vp%^EKcA>Sc(P*%uN^p)XqDpXW|R#qX)DwS>Q$SF-L&c@+7Ao zq6d$bc@cl#lOeAC-Zv*iE_>gf(#_ZZ;=t|?x+LY&?3uA&NTuPIV!bI$!})G6L*r+` zP7S3z6%Xee?VUERyjZzkB8Q0{P1jH6m%t=*#v=g8b16X@wjl1@V*E;MHpOZY!z~tm zu_n6l`LW-*7tr6qcsd{63l5GUdn^)V1&b&jVZqVJ%Z7?-MO=Ys)5mb>u--ClLq9B} zWF$C@K@d45WP0i;q%nV?mIN(SDNh9^xUp%yjBLCr#>IzAFI<GJBAf`<i1qf?WC#VL z<utHgcnCg#^RA5)l~*W=n)v9#=hKB^@D&u#e=EuH9X&MHxoUkRj6&~{cg}hX;>M=# zbhE?<w^=LQER%d^vvjUon{|?`{$8^zE&OzwE=m!0J!&iulQ5tp>eL2h;t-grl!-IU z%glJ?w({iWBmFPxhR>fzBq`+d=ck_#R&O2=Cwt|J6wGsEhP#I5Zy-qa7$$8F8DK>8 zyn`~SFP=X?qB1)<d}4q4iT=#zByPVDFP!hoQoFm=lzU3&F_$4y)6`92%>L$$OY$QV zXNem*cT(PZSe_2GovDy>`!l%_xhJkau}C#*4h~Tp)`t1B!ous%)QNJy$C1RhL#%<4 zoHvfDNXJ1H+(`xt^wT8s`ITDBuxLC7uq5q^sI}gO)y{*3QPWi9ric$;-joyB6!D>< zDdI!5DSxLW&aC-Wt%@`u!p2M&)XTEmfp;KHjEdV$<;!ko@XL>szM*v9XhcHV-Ery& z^Wd31OH&rSg)|5bARSE?*9ByAvyzRn!WG!GdPWK38#fM;6W&l_L<nP*B_kV@Y+7kQ zgT01gns<(&tW^^#n;0!(MvySW7R#ZgC|*`hAI-}a=y3Y+y@L!r&F)QWh<<FwSZkDw zQg@Qlbbv`2+l;Yw85Ejrq9RC0k~Z?#Lr0c;8Y>E2Q&o8|vFDylTqrM_{jTIGSXdys z_s{#d*VbGG;7s5viJUV{=I6wS_jsZj=6$8yy^!w{SnrwY|0^nEhM2}Vy>!LFgZwL^ zLv(>+j(T`D_g5$oO<8HZSXPo2M)XRA=NI<5seBZ!f+&N6+T6nda5sbLaVj~`8Ken` zE;3=5430EIpRi165xpxAI|vJ+G$a@PSn&vWhrMQ6X6YcpA}l*qsh;e=GQzFq!m~p@ zjU2I=N6+?dx%e1J2LkF>*~6jR!z0$YnogS-30ptiF(l%UzxHX90UMh$RWxW(x(k2K zl9zl;@3@+jeG9^Wi#rQ+3{g?wS@<#hNrY>-2}x~e_!j0fJZHm?qF$XgyboV8&e#Ic zL0(fn9a@NZUUSV+8s3QTnFuea2CwUd>fbOvWBXuOLspD~jfrogQE)5)DbBzH$RemU zh}@2lb@ATnUGznzwN!CI{HUW0sIbtV2=|VOLkZzY^``6rw^K+K>fh1r^qBj*DfX$# z<5=6R&)4^k%ZhbQQ}%l)LZZaaMDqRVS*cPeU3CZ%#Ja?xu`w`XKl2x?%<<qQL5spk z?EhQ%&Mil|v4uer)7OpP;MQv{qf#g?DQArG<d|))kH_JZm@`DCjl5px>rVG5y`IkU z&i!w`?X}kv(fO{ppM85@kf0;}TCQa1V*33$%$FNt;4)o{w_b?L^<=s6cHw_S@}iT8 zY=ZdG;a@4;krY7k^Ah{$k=JgS6G=XbM2uQu6W<p}FT6@=5^J+@P%M_no++PKSC1|u z#@4d1Iv$dK)R1?xp;jpw5B9}^#f!JXty5Bo&sE!y>#myfqN(QiMdwd!MUAuq#)aI8 zgLEKWS!5p$*}Ps3<W-Tt8Y4PCI{$On_B#R2f>xCH$9(z8*JkxUrJxaiT|JwE{R`jW z`H6r2z8%nXK0ofC`u*tS{P?_gx+R%1{CAohpKK5R(We~oak!!ECsfJ%Xh<tMyyn~f zzE~Avo36Ima<)a-=X^U^ZKw0`mc{%n_Wdma$8Cx067#^<B@F&J9YTmbJswX<Diq1h zl1-<hK`;F3WL*F+Yj1u%+e|NKMdIlz@ARwCJ2{rmPdz|a6e7n<-pK|&GN&G%tIJ^s zOWeVI^YDc3$E)S_rOamToHsVB(hD0{*sDVM(#=X0e_hRbvRSF@tJ8*e{?xWpgD%kz z`fs?43(=vE=awY$nmPih{5Fy{BVd2fg>Erl3(m;T(F^>>gm0y@+b>vv4ptuxRsOL= zF`RR8lD25K$e^kPFy2ld=)|n9f`S=JqqiL{guMm&Yq@5Z*BcIb#<LSjk;gBeLw}7m zu@rg1VV}Ym{>y-$&L|Bj@aNO}R~1c4ai8)`z+o&D@5v^RhW+#gAdiw)3yE24dqbi= z#Z?n+?4BfPUxxH#5HNKqf&S&eAgtj+b+XtEQD5}72yuoJVOxg5v~<nqTfW+bi&R<~ zn~Az7r)ZJyvBewx=F>GhaqXc8UoK`J_g3ujMJYt+7o|w!Zp#<x0G>)i#9!iJU1h2+ zUSg`EJvnRk;EjnjxtCsVHi)i3lFc5-&UCiEwTe|Xz?KsXrIzx_zhS@oMHWsMlLFBZ z^T$Y-r=dhhY3NzNpJ|4AEul`g+j;8i1DzMNMQpce2pee$qpAETS~@@a-F@`AT1v%G zWw$+hu{<ki2D8w+3+<^=w8ZyGbM2<O(D=}?=neob4{{GzfD&=HJAw5Q0Q3uSgUn_| zKa(J`Ue`7Rk(>#2p!pEml2p3#Fw}}wj^^=qr^y-HKBWeV0{I||x%c#5=qUqe7)puj z%@Q8QIh<l`*|s>DxxbDq<Z!;*g`)a>R<Zw7HFv>><GS5hpX0kT?I`<7K*vC&AytPx z^=`_wiJy-6A_MdJGS(XBS%WzMcacBc6mu5+AHgE8$fl!dk>e!7fQspEEVm)EsADM# zGtZ2nLQ+nrckTzF_GP9HN*T!iveql6N;_umhwMVE#}a6aId<?JTum{MoZ1=D>7n$H zvU(w6;}B)Z^J4ra`OW|qfamlP{~#e+K&;1^bj2QgO$jKDmC7DGd?|}eMtc--_HZ<k zzk_X^k>lY`<$^Y8>yF3fDF4lqXHOoTVd6X!e9WA7G|jVG4k96`+Q-(FvnNd#4-Z>P zZz1F%1QeKPougM^XlyOGVl<-6I%)7rJN26gT5X&8Z7nx1aW{eEjxF>|SHf5WIR!*& z9cLCcF>AMjr^3$>87+2RM|}k}QPE|#t9V^HdoE^$qd?K)EkQt1;H$x6<9?D@`xT`A zoXX#2))%xk;m)ocTQCX?-I;Xb;>6ju;zFv2;B~*q0vUaqrVIS&4cg;aT9Mm_W11{u zYpQ_c9V__rckwtWP;uYb)H=11kR7>|Te}FDe~(Lc-?FmNknJAhB54)<qCJTw#`<D+ z`v*Cn;RF)oX3Bj^k`vyXW?7gQVz$hpry_Kan%KTZo$c{*9c#RkpHeX4Vl~!2*P~>H z%pOApQDQhz2@`hc11RlwTgt+i4FLi$mNL?d9}1|m1GF-4+;?+r&o)AE8YqBd1HJi@ zq+?(e0R}RMc^eXDg?I-REZ26}Z>94m_A@bEthZZ}FvpIo-5Ou1lSbDe#*p*x86jFz zp1v^Rk8;HXa4(FCGG`Mv<{}9nC+_bfm|BnHF6)A@xtNCa?In&8TjI7B9v<HM2=?8* zZ-cVOjwHXCLNiKAZ449&foSlsiP7O8QW&ut+qseKXvWXCW1v&t(QxdbmaSVo!4wbd zMSjL;Rcv^S$}vxIvdC;~22IC=iNH=N{jO4;nG>26szq`#?8Zi+OH9OaG>YaK&FG@^ z@gODwLATYZvOPQ58}q><y~nDwSYM8VoynUsGsF6f-=>>M)G#?<GUs;bQ)X4JSZ060 zK_wh@cit~LK!jLr9u_nnnEQFh#gmF!g;t<E0;Tm4bqPpX_(UCdwHClZ?IpsY&ZYkE zmF6$cQ={HBx^QOsuv!}-COYb=o^sfRY;90=5kquI40;u#;Fg|%<AmF!UO559%i>fw z@EBiG*VJpEIb8lg1E|m$O;_s;mvGyNh}w9_ctn8DsMM1sIBkW3N*C`8I|pX0k6c#z z3SoHTQXk7H)6%QNDV1r8QpB1P#0cxHiB5^?WNi9qs<1K%MP(Awd}Ay}tsIVKY3OK! zql+}$EXU)Sx~(p^4B${%BQei3G0)@24Atw8ll`A%ETSOx$NgDKr3ZY^1J0k)Fd^A| z(|%}Bn?S@7u>C{0C~=mO*%AD?ig@d<HZ#5cj5lu7==4&I;yFxwx#BpeW;AC$A>tu7 zLwK+Szp8Zo@Z*^nvtqK<oDO4bEVyh2a`%*mV>KO*iRF?G_4N@+{28KunjM>wC}5(> zGLKRl7s=qJf*bg#2JHA~2TGHbhSY|@F0@^D9>`@>{#cjg%N&+3lWd1!kCe@*%jUpr z^f96m`J+Tgc4vY>n|LvNNDlzTO$!vL&(THZkHTs$L+T#N;6}_I#ZHqtDGiUS3Zgxr z^!$2J&oLSi4gJlHp>T6~y{QZ`H{@rmazu7!!2bps>*U&ntp++_As`1Lkr`uU)F=~& zmYPeA=O-vHbrI+5dxJmD{o%cHA5emH9YD7j9M8iaC|`ISJ}eZ>;Gb|*d(-X*=RK*z z{|MEoe}0S;i-TZ`t9yg<_4%9Oz5e;V^W%U@8Hc~iFfLXV5dNp&6n*v^gl}_(2wE-Q zP4l9B9Hv0Vq~x=7B8?a)^7`2qv0ZKN$fAa@Nz37(*YWld%ih>cOHTGb1<Y(V8CAh2 znAI8wnf2uzCIxW;+Qq%Vz994SK^|72baYQ@8*LpgNh1|k-gI%B6gVHP_(*y?xQgxC zs};m06VJ#~V7-sTY?g}bqJ*_%j5%&3$5x^e@}#*x>hSIYMJ0?AdAr5tL|>7^2Q`!| zVCA%1ZBd9KhkQ6Cs7&5aa&R{aWoo1J|44K8nR1Ijw>Hv%MjF-IgJwwi)dTKXs<w@I zghq_aUi<%{?2CHY`Z&0u8*gb@%%zM_is?=TxJ6`jH{1=w)?ac3fxn+hNh-6ad(OI{ zf!5%7Z&%Y-GI`}mLjD-b*#E#M9e)lP98_Hg$J6jrrWPp;!sSxx`@-M&6(R}!e-KUZ z&--+ZE26jmfEgXUjlzEuaRUHp^j$Y(Akyf;gRjF8CEV}r!WVpQazK)$T#7;bBy-5( zOBccLvHRra-~c*_ZxFlo;6U+ExDo04?P?aSQp63GH`LVY)vV3{y6OuJR=AoeM(sD{ zd<0H<&>J2eat<JK_<4adxwpSQeFS6E1rD5YdB*A^HuQGOcj^s^G2$a$H2c-cMF>0* zO8bV>9J>hKUo6mx{0e;wp&584G8LD=abdI(m60wf35|??%s55Bn618VFdB*D4?>&| zpht*<(=aLJ-csK8RWhZ#@VimD7iAIB)x8&KyO`3$L~z$?)#2|A8RSDrgkRA2P1h^5 zckESN<sY*>qtYm5eP?$wr2%EJnn1g%CX{S6Y@s03Ffas+>_=RB;S&*P$<Ea~s#4UG zWWQThrtpM%B-f~fxeLOl3?24PgfB#L<Du!ETcY+EWo8ucW<|qeATYPQk)U2`dP=Ly zfEW-@=C!>lX)O@SCRaM#q$nAoKO}Cf|B%Gwe%>ykJmSj&R$kuG-zmuFg7T;v9QmpY z1kv>FH5H=u<Xpf#Sq|kr{%qc3llPyW&HGQ2_m9u!{lnx<JoF*Wug|^%ZH<0w{|oZ( zJNdt;c=qE{#eYHRrtp)`W<D`_Pd}UY)Rz1CR-D*YoPIv{sm)DX+2?W}9-7=lOh1<! zzAn1#&lhb=z9X;9B$K63ilM2#VAiF~Lt@VFw2Lhw?;O_k^fU6p75%Kda6>=Dm%XE( zcOJY<Bl;J9<$V>=KU(vz8<2t3fdI+i@$2-qAabu$V#PkxBP`%(K!Yt!rKPcATPMj{ zMQRt&iO|?7jHb=<qFAhr@sJXBH3Tyka$?GMq6w)|?IX1X+1I2;E8nht?;K9Hf#T>z zuCP#5F?Rn@`Cl;ni+Q}=nsPdx-jK_=E{oy<9`L3H^{`g-Q`laal5KvOt^!QF2QcwX z$etqJjl_cO4q0XC^xD9=*1!p1ACRvD*s0{G$EP#gK?WxTQQXyep4&r+$2S;u!Z_;d zo>E22xEuU_Wcybho2d^8QC(!)9t}dLqv#t3p4*GNVHCpWIV@#>a#@FN(;XB#@5mh5 zRNc0u-L7^r<8`kuVF_k>`lj@PHqG7HBiuw~Z94-R7D?{h-v_kA3o%eRhv5i!Is8oN zw;0BgzW=2?SA?TQG})CtB>6gsMqge;jv_{tBJKy#_=}2Yl?ISX8dpbg5Jsg@Y#%v; zCTr7&Ow3-f+n4XXT@)WKrC|kBQF~aLB+3@6Juh@W!4}gCb}n^LZ7Rpp=5K-ZL4*3@ zNUFi~6xU<E3+XeyFuSZ8YCjt2a(qnK5cf(lv23-dQKtSK^r$Tu^f1(PqoG}1*JFn# z?|a(b1hU$R+?0LKlLpS9_WEjLt`_F%ow>U1c10I=EiRskPE*N3HRKZ-0vBX;|3B*f zPhH{xU!bffA1+^B7AsM*)UYKU={MTyqD(}gTefqkw&$^`(Dr4VB{<UWd+R-~4JC}% zb~@VI8>o983G1GYqF{LxQO~tCQ1&Ch@R5kNT6yetVqOIBwWZ`G0|67i4?<VswCnC& zOWSAMwQKRVMKn6GU#$Bm4+7Cna%**>;zdbP#qaUyqgk=ekicDnUT)=8Qt9S__h(Vv z-k{&+a*dcL%x2>>XwQT>tCmTuQoT%?2nF$-jb%!yOi67O+VWI-{q7NkVTsvOlta<= zow%3uT+X6I{4z;4g`{))T_&G3X-UA^JT!Z9^T5mVLX3azjDM)ykv=mIKF_!C1V|=k z21xF};Y3tN(!Qp$vOkVfN|?2iiR?t#pRH0q!ApftWykLH9e-hK$Fh+=*NiAjMt4~p z<wVW-sMkVK9p!<`6pk%yeSN>CFB<C&U1rM@HGH`ozKoq$Ux<2;fB;byu@h&*Fqa$< z-`Ev1PkzdLwZ^sWi?iVQ{U2Nu2zyF0S3LZUSg)sJXX3a#{F>d}LqtVJiJ`U>U9$^A zZC>WA)4O%EF60N(2&);})4Oj|=5|k6GTF=l>+&_bdy785M!Kl`E%F7;@FEe!_UP!{ zcT%^}oim$CD%v9s;1GD%m^>pKsWg#lmpO1bg>L{9puB7c=eal<4R0Roj;DHMG|`Id z#T1IRy<(k-%VKYEetzw>N7x9;yv&0zZzsxCVYFJ#AJGTEIoW4z%Tro_qYxGjL6j%7 zZhkL-Qqs@c<0x;BWDjXd=$)VQ=LKV^ad`T{M@IS|m3sO!w5kYYhtTA|lW64@lYU2E z(HfP>Vgrvx{MdZDfJwyO)%6m-ahXQ#7p`C^H(<#lVVg8)x)SF$$>NgWnD1hdcK+wd zuP@z&WQ}`i0clv6Nc!8~DrSl_<eqOh&?<?VywJ0fJZYPYzt9k7dY#GTJ2$Z(XUp+4 z6SJ4U%DJHH!YPK#Fq#&#{D&+n)~Z|y{3%^&RSxt7O_%Ayb$+RJ`gFawSZ?;@tdzLG zH)=<cgWla~aM(P_Br|!rn$E@Qqp$evHLSW>bxJ#aSA_>F%YcW6t)`mAf);{d%=rz^ zB_<?bf&i+}56S+%xsEN84=3vzYmXYLR#t7qg^|H!#n>{4XQ=g>7Uxj%^}L`=UPW-$ z?+@(zj12p@$Yvy6$U2)}xv{Uvk@Fo?14RN=-XQh`?OdZp6FI@qi9PkDdp7nY>)oZm z&9PK%Uv-K8oBr$uJ403Da<$YeA$?i+|7yF|_O^{<{hhx;LRA?ESCo{bZAutnWJ!_a zMzJHsbrYItK>)mjSBs*k3weI~nRjLvSb(7H^gJhzBLa)X-msUM+1dAnYVLcotcunS zI<vKI$=hipcko_aonFkMSAeam!nJ-1vv^%31(UE9(dywGaeXGeeEa75`r_3Ory1v0 zxKUs?d`pn5XAk3B9P*9ydPo<!S)D^mW%X1Z7M1L0bkYK??m<x2|Gg~tc``{Hdx2lq zD5=}8>3kM^>%q&C44yJLq%0L?(LgS~ndz5H{6z8-%MZNqTzW#G%;I47jk+oB@k&Xr z*k~v;U4q4ac~)U)yL2+#-Q5oL#pldHVP2>(1{STa>M^-)?bDq%EE_A7OE%f4ExDr4 z3e7CU%Bw8R#lsE*jj8X)^-{^pT1RYIi^1eYBuiJ6C>?!};el7No~{KfV5Q7XAZg0D zYef80kNL;WB^%>#k;<;)T<-1uf0a4sDgdM#vdm{w$(Dq2Ri)YT+1IkHD+3HL{SeNI zrXY|0_vwFaZDWySeY*D4c5VXmowO&5JDfoPq=8YO0ZUKNlf-mD8b^A*zH1zkI{`eN zSu#!nagg*fPh@y9r6t*{oLPkOF8Fn|yJ@b}%WP#Z9}C}z=6_{X*)@ddwlCH2c9TgU zx1Jd5fEJcq?LIH3<he-s7o55SEhcMqyB40U`B$u7m0;t)2YT96a0j>SDD#mAr)*E_ z9L*6R>ypeTDRZIfWi)#0qFVxrVvBNlJw`#k0z*l5w<a4Hxu3@<no1e$5;x8_O5k96 z3w6?E)6Hl)>?b7Sq`Bd2)h0900V#*FxX?_r6_H?s8L^${*I7Dpu*62iB3kp1HCyO% zLG$AW?8RFT)A?sZ%~Qcs*S#pWzzqLXEP`JFVAOh_$t`SV+H);?mVRF=;&$VuGGQH+ zUKP4}TFPg7yN+}8<H_cs_NlREr?EEPvWFYmk{KfaDT4ghbKl+lL%C-en{+p1%Rc24 z3Yf3bjDx`8?N!<Gm5tozOOn;ZE=MKHX+u%MIPTx};RjV(ke3cNV|kO6_fDTLgk3MY z7$%cv`hq@a)Q2OEE={2*Rfpjy{bx&1OvWxn{@F8SnVXrVSOoCc?mO7!|3oq7X4GW4 z&r64NPO{8u>J^o^;(Wh{sjZN|sL!N3P$??8VywNsoxVOdZ?BcTo-YDcuT<RMU=mXK z8O9SaJ%RBo-e^2q7i+ZNUAn*BTP{ProUfbF67gTl3~7+UdbCthxYiz`oHb2Z`pu{7 zk*=bCUejzjWhJ*!2Kh$y0+9pNh|d9a%#1tpN!Z^B-3~kZN>i{uFb;f=As^~8*Mt`H zt<Z+e5N8y0;7oT1#<tFK>5gi26U@|z-_7Ae$)ifR@_<I(!Ci)4TiTjkI2y|NE|fe2 z^QXdw9AJtI#;`88sI6s|I{7#G6ch=G#`2J=X1bGjPw`}Hvj8K+^SLfeBB!>D=CuE8 ze`8G|;hLGD-UDFMD2PZ}M|i!f$r@78XJCsygBHgELSe`dM<bk6^{GilD$)IT2WYG2 zrWXuEI%?=&irDk&1Gfj2uLm5zUh_-*`3ir&ZrRP;Gs)n<ZoyiyK8;g7aI~Krxb<uU zKN(R$#CGb!de5X{ZDi;Ae3;ssGvz^`1P;B`=Y5p&fszyHKLc`EhQHl&wSfed%}kBU zhWGRBwE83Mv`X74-%KK@gM(EBL<TN}BA;)7dahTNw(rv*d8o%ims?L(AYJ`0TYL5C z)@H~Sk@G8|E$C|qrjP`EKWPqtvDu<-%%ze;MyW)<x%tHs{1%uAY9UUCvj{GS-7t8< z@!Glr$5}@mUtiaq2=G$xt|*Y{hHZ}Jx?_=_JL)yX{(a`G)cfFFkyA3H<bR03#{8yc zTzQ4E4}ey`mwF?&{L5T8-WwwLO?fbCbrl8JQ@Ktw*x`=r7={Q(eeJ1Y(3k3ff&L1? zhn~8m|LXI$>o7Zp!vWSkzeOQCX~38KmKAV_fH+17lOy0zyLCqo&(Cqo{1p7uzO4W* zt7kt~dxsRq4my;e(TH>Hk8xa|6UqlrN+b_Z$aO*;A(kll0FE+~w}wMn#dP>ro;s!f zxZ)?_gTuG!9XCQ)ZrVBg@>@P-#6@-C3V(F@_7a3kb#r;xTB%<P4jFrgUxWsZ=y5Vm z-gG*%<TmrW4Fi|i3*fBkI9}DgZ8P0a6I=sMXE>SM(1R%H51ke>lz3Fxs*c3uOW~g- z5I!V}`p*$ufB2V1u)5*{DUEvbw};F4yf>PKzn(5$w5r~c0$=ch7p>)s7v2{yIOw#x ze5fujtIN2$Jg+W$)#a$VoK=_M^4H~}>UnT--&a5J0hqnUhq$`4@Bg^D`@SLVKMdUq zPrXe*xOf(N{@eWEVE15&J&X~@0{c64ly>nid=rg15%G{)E+dW79x-U6q12@2ROWc3 zYew+#WF#Z_;&iLizjr*%$stMY?g1qk+UC;5Jz$2;%^gzqitBnRXLJLnDYO69^*_&q zE;rGem@Q~h51P5dU|4g}ND_89mpb3pCDe}u1enx?LEeKsV)zQT%do8Zvu6Uhy`p}s zF=NK<!f7%-1a1J2whgLa9E?HX2;i*9^G^Z5v5toJM56fQ21@1O!GX%7E`}nug$8-A zQ#{Qqh~zYjSHObKrIcg#O=or!(dVJR6oD?d_GL$*(;|jk#OT=~{{8QT66O)O75wWZ zE5W({%nz63KOA$4IcXPhfJBdv1Ig6>rX>2x0i|vRZkXq|2yv`a+NcM^Hg)I@lkFk9 zjsiQbr<+Yy^LzTj7DGV&SmojU5ny4K>RX0{*VhK6y?(s%-{pp3A`2T%%%C<iA*0vK z#O7F<jM9HbC2+#_=_>ooqy9+3^vbjgFc9eRO%vSd(Xpe)c?zWSE?OV;*5}U61zLGv zyn|ZEp+=R+wRK_CG}ea^Q{W&AhB*mvvj1b-O&~ivvw3^er<%e2mdEH$j5<sna%k(3 zy@~uTTzhwgwfQguV^5wVr(oK0nbo?6dt$J=3uRLc6o5D}ZH>HV$}=j^KY)=jOJas3 zNMKX<Z8JD&`5MK+KO+(`ANd!{;V*pTsdGDB;w%&YnR#^_aRk^~{pmm*u0AZj_|9wK zD5U4sn+JP;rv-*?_m_Yb|FHPecD>f92D^X$Zu`UDhy9iuldAlRl$+t+BfYTwr=36V zzWAcLA2fdZ_kW(2tN*F(wW{Cgr*!FlsAV_a7d!iXwPTK9e%M=n;0$TeqCXT+qrWt> z%c0EoHqR7(zs!E=@xKa>!9pcJnt`e=KNR)4ZAE>b2LH020)_snLvtzYM1kz1x7!N9 z$@QphIC<Yk>ap$8-=+gmj|Sf5CH;wGr{yUQ+Pl2mi@{{gZ(zLb@oMX&sUS>(s9H$w zUnR*Y=lq=hj7Eioe<ty5gsz8FI7wVMR1u`~D^jvwG_e=hkwk1<kf_?u&2rR987VsB z{;8x~KG!*<Z_Ukg-A+%TF&+oWP}PV;E3FC9^_S49Knw>>=x<-R@m_{soe{&)V2dpN zw>Tr{0f@J*_xr_yYA}L)%T*YOr27lk_?LX!S&iiY&8grSYbYNu9ktuJdzv&hpnaz+ zU1Eb#bH$g-oy4H$r`SyeP-?@#jB(27TcO4^YJ_!*mo4NHl)ssW{{9&}^6A5f-}?+K z@LcIZL*VeiI?~_;2|Qeb-;RQcRlr!_zjbOKVe=8}@1%f9|7`%ch?OcfD0PLBl7bi@ z)(GHbMaY)`sNeY#z#E`gf|q}|1fSQ0lBH?+Las+`L!q!*JJ-3n*M%Ek|0y3<eG8fV zl6E)7`!B7{T2JPt7=``MEmP&0LUB54#rpNXE!IsK_a`N;2`BWiS*VA_ljUj$x0ErE zDmMt>w7LWFR--RsyLp|yBq`9BXbKr-Lq-YL`8@12105a6M;V6)^Dd;|*c^ddNYY}k z8+yAvxi6`xh7e&sm${&~kyMKN?{R{X1N>XoDu6F?;L%M7Hyv1iHa5iPRNbza)W7oS z2FTYt>jq^#Cfp8!ZfS2QiyR>G^V6`2+UVk#%1ZV6ah!}vZWiQAKzy(uM;9c&Civ|@ zLOouoZUhOseKT3iFm_3B9``#Pxs=WH9KL|%SdmwCHGpT`X^gv<lNjI&d4)#1Y<o{| zq27s_7ckue$fre%g|?8VG!v0#hF!JPf~f}f*pbFjcXFpmsT_3~^1b1Ba@2!FU;-#d zg&ou`)diCKDB)cK4Wg3M7%VM9^m@Q?t`i#MW(X6y)pNs*WN@7v41JO(gX?4%^hur! zP8=FWXiJgmB_Qo(f%vA^NFvalqPl;i$NH@9m4)H`W2WjcD9zSGn=4B~QYJ0^w&94A zTZ<-60+@GBrYK(&g)U|+=@N|CuXpj;ZZWWFa-`QVNzPc}fYwEatDev}NiKRU9-C5Z z9%?5%4LkZQj6QQtR~UlfO7m3%D#^ljC5;3Pcbuv<I8#@-Z>w=|pr-mW7{)ysmpL}P z9<$*|oDCdu)K8|(utg=<W_YxQi`(7Z@!p;qgEx*<mwbDxVtZqgk|G{@#U}^(HxJdg zTJ_YFQAZ=yW5_BsT%$ANw>*P?vWb7Kv`^Tbrr6g((3b1sm!X|UI_YMa7$<0}qsN7e zQnVGrC#Q-9IaI}hTr%~YRS+tfZU)Ue=V_GXbR6YWfjFpyE|vqoI4-vZWOi-1#%drQ zq$b&tk(bBDxp{aBU2he!NeYlo$dK8+gfxS9=`x#De#0gTMq2v5DU>eVRlKoh1RS}v zF)MR#0l#%`&-bDrZYC|T0^a1w)6jA4AQCKZ%(!$ti+#nTDf~@bV)`-*Ml&7y%K5Fq z_JfvfPzgJ0w!55&kcdxc!W8uP?RC0JYOsw~hECDS&=qrn`pH;x^{SSZv9h5sN$K}3 zEY&Q3BtnBW?n+$F&{MtWnKs(EsM;>HiO?eojyA@khSbdKvso0F>nvf_D{5ILp6FS& zr_eJou?0~o*>rOfj5&VH#FLqbm?dPjMb}Moyl`ypQE#8?Q_iQFOPYrCs(r&Cr-?c6 zUGVi_E7c@&Kn%tLU>?zOqMT>NF)VE-DSZ$FH-^B=GZaHzuV_ovV2u$Q8*ISF)#s{U z;52H47W8|4Chu-u9Jgs5+%`L!+^FpitUkamSu#$^5|kx7`|7H!v2*72@|_M{wsuEz z*HH^<w!hpb=^9SfR7o(yq?^7`z&ph|=}ef$$~9{-Nz-#~;^01Xi!!an1qAsKAaLN3 zPEpiNfZ~4eitfB@DmFodeGkaA)W?DutO}ezt=5c<W&<;o!2Q@<@7!ObfEFLo_YyJL z>l_W7yO-lZeZB@_8A%6SKB0VZVqFJryOx^8B2FikkX-u3i`y8<=a#Lj>veuR8X6$t z$jyhwB`ctIXzlPhSTNKWItABqw}C+}sbM?am2J(NInC3YD!(bON>%4^aMgAlnbH=t z`s3~m43KnxCl5hh!n?Ki+@+q%2Z7nw1L@NwBz1I#o?}ZVXp)GZ@lx<Wt-L<mgl$0F z2h7^&eCMci82;tp00r+GN(5GZx8n9tE*QEO<e+jjpKhgKzFP+DS1wSntqk>dD}x2z z()^<Mr3C0N`(|v3cDdD=MDy8JdpM^_Z!&!VKj@b5hL!?_mhP1GBkYtl*SlAycdj+F zwNn<mUB)NhFpgrF1pwS%7^&+<0r<l|?eH#39YCpi_Gqm%i0dmJ3MJ}cTFl#<a6F5K z^O)A7RJTmO)?aDT)JFr^Da0a)bJWhx?XZo|{PJZfp1ey0Hby@(qamR|a?#03LT&Ok zq`!?3T;2kTH%=CCuC@uW(Lb98SH4<p1#4T)TO`wMA?5m(Q<Xfb%#qg%o&=jT0{g7s z{Q>IO><cl<E@>$P5)}t2dY}@{T2GDOm{&7W89f;32e1zef|It}t8x0+2j|{rb2ocW zhWl3a<URR7Ep^Nv20J~Nq;B=Jb`07e*$#|)lbh=ZBgoz!RC-=p*YnHl9mn*MD(ScU zy6`Pazq~bUe*%*1WV*g+vVBC<<{nyl%!w?Qz1r+1qL%AX_XTGRqtFfM7PJ;KuFG1F zhZ*HYeN>N<;*50Hg?dnD>fT<<AE>b(vXAqi_k9->ys$scLO(deVG;c~&g{?eU_Qq~ zaHh^A_6owdS)zG7AI+{ZCna~}<$9}B+)8u%l{*9<F|#v^K!E!gbNWqCt<L;zLuPWf ztDcw{3O-e}*<8-p6}NJPJit&Z%5d;M)=VD>LO%>13me_{IK`NvS)y91LIV#%+JdyC zGkS>{Dj8vRqh*~xSf23*3a}I&go0j;EeE-^3+39~y@xjh=-EpXyCTsx!D{7TOi^5A z6<k_dCMb2y1Hhn5md#9sj-2-6J#=JChSvSBC`G5^B9^tZn-+u?HjQ>KCucptgrZC* zvOs1d<}W28<ECwL!FRV5r;Bm_R$L3zsU&QVzDzDX{fc6IA6t$+YNP0t`QGk7t@aI| zv)xojYsz2F`L{#$o{w*78tZ5YZNZMoT@l;tKum%izzUOGuw2qC59=}4ZY1QMV|W8j zf$aeL^y`OFdxDb>Hxxp%ae6-^X&vdga4ws94Yvkqo!0(Np<*+`9ZjQm*t~F~l)%ry z`%aG2k6qPfa(KXN1^M!0arM{{W@zU@OY0bfERh?g>BMSU?J;J|pnBu!ZG;V`3u`mW zG(}H*n}k*|GP{V5<40ib7_y&dSeuft5e|>(y=ZTcIlPXkocwuk9JrtrSQ0Ju%(K`M zHp=b2m9%THo$@M~(gK<KjecUCr%sq#8#XNMDZjGuD(%!vPSiaH8R0oVof(rEz|FI2 ze@uU}5VujMdn!>hpx^dG?xELUmjX|X)s&WonR-;OXkvfb>Bsfg;Yt&<ibXbdoj&uF z4?rn8#1?jse!gt^?vQ@JYB9}v2wv9d8i>IwtRBr*t$^gYMe`ACKnu+c8>GD1sPh5` zxZIn9aa2cm9Wu!9taJy3debmS5h{M8dQ&}jJ}lrI_`yxDslrN{Oy7H;h+nH|Kjyl2 zJpYj^M{5phTzMr`#uqskTd#EBW31y+rrw%7i_bU=x-d(P(Yz~ls;<<nI#$=}PMv7q z{usNW-gQ80N-$k6Z{*A&U(ft&M1oQ7R#<A*Fj#H@7PRAR2e%m}?C$QhJ`dpe*G$ev z3(9G5oqC7|C;BoALmom@(_^9<csB&tak_4F>epbZIS#_+Eq=x>s?hP&tI$1G&VRU* zZM7f%v(<-J$9b`c$DVf=oHvhKN&~#|^@9Ec)C!bzaF+shEJ|LMuk+D8DcVXxp#!Bp zcHRtY{TSVh=6U*#@q7vo+krave9qyi57cF!Gu=L1r7e2ytrZt7>Y~6@*-8iE=baHh zBQ5WAV9M>}i&NX#`SI-ESErY6{&{-BlyT}#%4bPW7(xf!)^^kDCV$E|xGxRv-vy`v zs<8(&V;XgGDTQj<Hx?!#dX~=Ld%6nrr9TdaemvP42jd)Rfw;)i8a2*UgY<5l%Ry^9 z;IlO>9@=ffg3tpEe~d#D{jOLZIplbS<xPaGE6fJRJ|>7OOc2ynuguKQ!6lP<1OOc1 zTX@(6IM08&cZmB@KaPh<u<e?t%cYLR2~FZyo<VQpRNT()p@#}_LoAmg_bUGZo1vxr zR5ocpG801s8i?`}<wZi%5~0Z{xH63h0g+k;{q&C3obzCzSDy1vX^`tyAY0YD?oAeX zmXqe&kipt4(}GiXjN!#;(TWT;y9alEZRI%nzm?&fk}5Alnrl5*oU$@pl-lERwl${o zE5O{tk3qIxKDu$?SyYQi{Ern|b9}b1MvS?!Vu8R@uk-b;JTD|4Ikr@M&Dh#Gg)ZA; zF7A~9QyU})RL>1Uv{^Dpm&dH1|HhovatS}lHMT5T#ZxMCpK%AKtmcg5=nD0JfBbUl zWBYH^9Jez3eo?enBeTfZF*QAVk6!Qxcq^O5e54ZG_(mJQ$-8R`{ii!NEbOC<8ex<v zC^$yu5A+%cBoA(&rnBu-;}*O{^?k!>d6AX`6RdIADalX289RiTT?U3L%8zTAROaTp zsJs)`w5aA+^r5xLv#c1IcdHT?7(HhHq1BCNMZRxrE$X+d!<6nth;`Izh4iz(C&|1O zJoAi6U7mTa&q`T^?J8YbIeO%&AO3&qLtinlZ}KIkfX^u6k5a^qnF(8*<wx*yni!l3 zCO1>+JP!N^KtI&Y83kw-=iM*QuNV?1tr^e?$5TYXe)Rl2;p8O!HT{<7HD;aMrzy~+ z3?xZ*gb^4Jc=PpR#lA)QOe6KXs3W?^8#&{O15mO-X=O-dp5#^k4K{kM=H_(?(Hz2A zL1U0$=2<RRD5^ArATSlc<?k1KAV-tX<ihhJxfS|>eV+fIMzgc8KrUgs5<ud6&O@o` z2p0^sPr9v2GGBf=x152plLX=^R9vaVY{kc*2axtjn^$9h#9JHf$$T6KsTT`{_Q(C( zHH8U+!x)fmBkYsNM-J>s>lMy(zi>3MvFvEQpa~DQ^6dkEXz#@H-aHeDf)Z?;&SVht z%o^Y!E4eA=W?+XPA5V1%NDM`YAAndlpIxZYk7V=z-FPsbEXL`pI;XWqx#~rM(;(T3 zH9nHB8je5K<@dvsp=OL59Xi(MS`33KZ_^;BwA5u<<De+?!xx1{{$~Gx@}eKJS3^;O z*Xn!f5;n-To8vO~K{;g`TWv{GquuHa_ssfuXPK2Y;${eq+w|`4U0HK@^%MSdcMXY8 z!caZg@Re4^VUicxPkKz2mkS$nc}Ggl*OTQlZI_`va1#HSwt+wVdsq~$?SBxH)xfdl z>d{c3o{Lge-QbnB4M*CQ6{RS3pLv7_ZzY$_a_J^PyO6hvZ5J2skF{9}67|^?NO7T} z)E9THiNiwUN=NMGJQGdcPmUvua<oX$j2H7cnp-vZZ%GcboPYdz@W9Z)nl0cY7&m@y zyK}ETS7++AI`Ut`7&3zg7@nW13wAq#_26!I_mXsJhP<7b57=yZ>WGBQqn9a+=@H4A zubV^C0GmfGHRFZvj>`VpQwY)iCTR+!-XTRKa+aDg)X~c`PUvY695E9&u1@H6KC{k{ z*#nCo%wW;`uOY||R-Auj-W-4;Z_1ftW5suIraOkuhrZ&Y@aAN{=ifBYw`Qi_-!-J* z^^g1m^ZXrP|7a<QxrPdcLy(J6c_b>3O>gN=-cYk(wp_-Ze;SN9fG%FSr(WX}-lGEp zR~pyToW>2*vVNq7VLKVtPnGF1^_V)t4Hf(`b#}aMg!tU4%MB93?h(I97wN0pvz1q; zf|NvWl*T8C!=tVsmW`8?o!Wo>^2C3Q&k_ew^EJeMG@^g6pT7)VH{9Fc$;f%fq9?na z_Gjmu7#B+NBpnC8D>V;boVl0wn6o>dh-|k;m`B^sgL}$U-3D`5;BMvRZAR-h(efEp zbesU+_LNl>|47&BEYq+|XPX5BbXoeq^X5_Y5QfmxOr4-9LT4Dv<Z5^KR7}qLi3!JS z(vLY_KSm_k-RQ?0fTyOVIZieyoUTpwSyU?`+Je^yN&m5N5j@u2i(p}z+v6NLGu<Fr zidHgG__WY--5t%>yU<@rM^MyVkYv_PvZSzG(>T@Sa~EFS`X2HfFDOEAp@(|4>d$rC ze|zM6lrL4<OJ6aI4jc8-zV+>E-@BKX5TMs0vu&NtzcjSz!;iG9r7<@~9b@;tg~k8` z6A|wscfeF(12}`hBH#R)@BZ3SW4ifE3)?jmN3({hkNS-UUZ@YTEsB7@(aU!f|C?3= zx8JlpW&%|AL9>}QX(t_Qt5(Z@gf!<qdNd=e$2GSR5l*uwY-~)mn$D&LD%rF^sVJTM z6;EM3S|vtmO6{?rm4c^vv^Z3Fs`7za1g7o%>C1&b1q=yu%iK4o0E{`Lk(i-oyu20U z3`)oCF>*#abn(5?PWRLcdLlgdID!>p!tRN6lars*_?*9tG7|&Ov{7^3QZm(UBl?`O zl7&P+?zPNx`jJ<BTE&H!1lxC#9afHp1Gx1;Fw1bJ1%X|B4${!FvT&yCXjv!`Be)NE z%8xZ8nq;08PFZzTY1G4)_h=haRoqaYlDPv_Hv#D!fMdGdf}AjrgDl-t*y?4waXk+Z z@gwwX?gZ0d1OntyFfu0>DY`)lOXz#TH$iKn>JiS?chn6Y+%=pLBj0%Hc*A2>ED_-> zo0t5ao_zV(IQCUFCAJGGBJFLxmq!eGW4_KkHK3N0p6-H2ikN()s_B-Vvf|~A)T64L z(Go7sC(rvv9#{yQ@cV9va5eJkH;tjW9LR;5>fQH`&-?eucIQ*7<?)G}Oby$lyFTx0 zX*_^W+{B2w+QStBEYIH_L%VcgO3Zmhn#ZZfwrxl?p0b0$^6J5Er1sjA9+y8SG04t^ zZ;a*BqBzX-<3_x$z8re>VG#M<M&{&Muwo=d_f9_)zw}{Fv4yrc%(QA2nClfg#I%_o zZ$6D)NHfU}$MHv>mSBHmmYGB9Ja1|=2hWG$O|3nd+)}h~+5isFWS9UH(RJP*UHy3R z<5_*{=bJtwV{XCGXG_1eHJaRjr6U|~O~z4DBUR3I&%@wN?f0MN$;|@^ArHZMsE#NQ zz;xPM@E>}wO!a5n7q3mIeQz7G{}EcJ`IX`L<u~-T${m%FCsqI)F50fP`9lrme}@vv z%Mw1W{F6XIH_~CyS|5TR)lZ>W7lH@Xi`}0{*`*o8V+ybQ;l0>>ry|g{(m!`Wdevm1 zVohN0`IT+c?mIitYzl?d1n3OhG_uypdX$CZrDlg0FK5_&*kas#vEBiN>D%w1SWpk# za^C&?{oXf@-yC;8e5kV@XG=AWODA2TqwiVw_ts6#T&h|Y%%RvKd5Zh9=`eh#k7;Jy z+U}3Q7z#xA73T%F@H9$$IEe=S>g7Hc_uCg#_x=4pZHc$lC9U@TarfQT4}qyZb<W!F SGm?O&mH!3EH$vr6o&f-gDF0ai diff --git a/platforms/browser/www/lib/angular/angular.min.js.map b/platforms/browser/www/lib/angular/angular.min.js.map deleted file mode 100644 index 0dddf2aa..00000000 --- a/platforms/browser/www/lib/angular/angular.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular.min.js", -"lineCount":209, -"mappings":"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", -"sources":["angular.js"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","prop","attr","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","publishExternalAPI","version","uppercase","angularModule","$LocaleProvider","ngModule","$$SanitizeUriProvider","$CompileProvider","directive","htmlAnchorDirective","inputDirective","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBindDirective","ngBindHtmlDirective","ngBindTemplateDirective","ngClassDirective","ngClassEvenDirective","ngClassOddDirective","ngCloakDirective","ngControllerDirective","ngFormDirective","ngHideDirective","ngIfDirective","ngIncludeDirective","ngInitDirective","ngNonBindableDirective","ngPluralizeDirective","ngRepeatDirective","ngShowDirective","ngStyleDirective","ngSwitchDirective","ngSwitchWhenDirective","ngSwitchDefaultDirective","ngOptionsDirective","ngTranscludeDirective","ngModelDirective","ngListDirective","ngChangeDirective","requiredDirective","ngValueDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$ExceptionHandlerProvider","$FilterProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$HttpBackendProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$SceProvider","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","fragment","createDocumentFragment","HTML_REGEXP","tmp","appendChild","createElement","TAG_NAME_REGEXP","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","removeChild","firstChild","lastChild","j","jj","childNodes","textContent","createTextNode","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","parentNode","host","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","$$rAF","$timeout","supported","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","on","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$document","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$cacheFactory","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","createBoundTranscludeFn","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","directiveName","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","childBoundTranscludeFn","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","setClass","writeAttr","booleanKey","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","CNTRL_REG","register","this.register","expression","identifier","exception","cause","parseHeaders","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","statusText","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","ActiveXObject","createHttpBackend","callbacks","$browserDefer","jsonpReq","script","doneWrapper","onreadystatechange","onload","onerror","body","script.onreadystatechange","readyState","script.onerror","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","urlResolve","protocol","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","simpleGetterFn1","simpleGetterFn2","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","createInternalRejectedPromise","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","id","timer","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","ChildScope","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","veryOldValue","trackVeryOldValue","changeDetected","objGetter","internalArray","internalObject","initRun","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","$on","this.$watch","expr","$$postDigest","namedListeners","$emit","listenerArgs","array1","currentScope","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","predicate","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","addNativeHtml5Validators","$parsers","validator","badInput","customError","typeMismatch","valueMissing","textInputType","composing","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","Object","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","_data","JQLite._data","optgroup","option","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","contentDocument","prepend","wrapNode","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$$asyncCallback","enter","leave","move","add","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ctrls","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBind","ngBindWatchAction","ngBindTemplate","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","$attrs","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] -} diff --git a/platforms/browser/www/lib/angular/bower.json b/platforms/browser/www/lib/angular/bower.json deleted file mode 100644 index 55a3b8e5..00000000 --- a/platforms/browser/www/lib/angular/bower.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "angular", - "version": "1.2.16", - "main": "./angular.js", - "dependencies": { - } -} diff --git a/platforms/browser/www/lib/bootstrap/.bower.json b/platforms/browser/www/lib/bootstrap/.bower.json deleted file mode 100644 index 7192ff15..00000000 --- a/platforms/browser/www/lib/bootstrap/.bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "js", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "main": [ - "less/bootstrap.less", - "dist/css/bootstrap.css", - "dist/js/bootstrap.js", - "dist/fonts/glyphicons-halflings-regular.eot", - "dist/fonts/glyphicons-halflings-regular.svg", - "dist/fonts/glyphicons-halflings-regular.ttf", - "dist/fonts/glyphicons-halflings-regular.woff" - ], - "ignore": [ - ".*", - "_config.yml", - "CNAME", - "composer.json", - "CONTRIBUTING.md", - "docs", - "js/tests", - "test-infra" - ], - "dependencies": { - "jquery": ">= 1.9.0" - }, - "_release": "3.2.0", - "_resolution": { - "type": "version", - "tag": "v3.2.0", - "commit": "c068162161154a4b85110ea1e7dd3d7897ce2b72" - }, - "_source": "git://github.com/twbs/bootstrap.git", - "_target": "~3.2.0", - "_originalSource": "bootstrap" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/bootstrap/Gruntfile.js b/platforms/browser/www/lib/bootstrap/Gruntfile.js deleted file mode 100644 index 66e1de36..00000000 --- a/platforms/browser/www/lib/bootstrap/Gruntfile.js +++ /dev/null @@ -1,480 +0,0 @@ -/*! - * Bootstrap's Gruntfile - * http://getbootstrap.com - * Copyright 2013-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -module.exports = function (grunt) { - 'use strict'; - - // Force use of Unix newlines - grunt.util.linefeed = '\n'; - - RegExp.quote = function (string) { - return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); - }; - - var fs = require('fs'); - var path = require('path'); - var npmShrinkwrap = require('npm-shrinkwrap'); - var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); - var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); - var generateRawFiles = require('./grunt/bs-raw-files-generator.js'); - - // Project configuration. - grunt.initConfig({ - - // Metadata. - pkg: grunt.file.readJSON('package.json'), - banner: '/*!\n' + - ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + - ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + - ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + - ' */\n', - // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too. - jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n', - - // Task configuration. - clean: { - dist: ['dist', 'docs/dist'] - }, - - jshint: { - options: { - jshintrc: 'js/.jshintrc' - }, - grunt: { - options: { - jshintrc: 'grunt/.jshintrc' - }, - src: ['Gruntfile.js', 'grunt/*.js'] - }, - src: { - src: 'js/*.js' - }, - test: { - options: { - jshintrc: 'js/tests/unit/.jshintrc' - }, - src: 'js/tests/unit/*.js' - }, - assets: { - src: ['docs/assets/js/_src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js'] - } - }, - - jscs: { - options: { - config: 'js/.jscsrc' - }, - grunt: { - src: '<%= jshint.grunt.src %>' - }, - src: { - src: '<%= jshint.src.src %>' - }, - test: { - src: '<%= jshint.test.src %>' - }, - assets: { - options: { - requireCamelCaseOrUpperCaseIdentifiers: null - }, - src: '<%= jshint.assets.src %>' - } - }, - - concat: { - options: { - banner: '<%= banner %>\n<%= jqueryCheck %>', - stripBanners: false - }, - bootstrap: { - src: [ - 'js/transition.js', - 'js/alert.js', - 'js/button.js', - 'js/carousel.js', - 'js/collapse.js', - 'js/dropdown.js', - 'js/modal.js', - 'js/tooltip.js', - 'js/popover.js', - 'js/scrollspy.js', - 'js/tab.js', - 'js/affix.js' - ], - dest: 'dist/js/<%= pkg.name %>.js' - } - }, - - uglify: { - options: { - preserveComments: 'some' - }, - bootstrap: { - src: '<%= concat.bootstrap.dest %>', - dest: 'dist/js/<%= pkg.name %>.min.js' - }, - customize: { - src: [ - 'docs/assets/js/_vendor/less.min.js', - 'docs/assets/js/_vendor/jszip.min.js', - 'docs/assets/js/_vendor/uglify.min.js', - 'docs/assets/js/_vendor/blob.js', - 'docs/assets/js/_vendor/filesaver.js', - 'docs/assets/js/raw-files.min.js', - 'docs/assets/js/_src/customizer.js' - ], - dest: 'docs/assets/js/customize.min.js' - }, - docsJs: { - src: [ - 'docs/assets/js/_vendor/holder.js', - 'docs/assets/js/_vendor/ZeroClipboard.min.js', - 'docs/assets/js/_src/application.js' - ], - dest: 'docs/assets/js/docs.min.js' - } - }, - - qunit: { - options: { - inject: 'js/tests/unit/phantom.js' - }, - files: 'js/tests/index.html' - }, - - less: { - compileCore: { - options: { - strictMath: true, - sourceMap: true, - outputSourceFiles: true, - sourceMapURL: '<%= pkg.name %>.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' - }, - files: { - 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less' - } - }, - compileTheme: { - options: { - strictMath: true, - sourceMap: true, - outputSourceFiles: true, - sourceMapURL: '<%= pkg.name %>-theme.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' - }, - files: { - 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less' - } - } - }, - - autoprefixer: { - options: { - browsers: [ - 'Android 2.3', - 'Android >= 4', - 'Chrome >= 20', - 'Firefox >= 24', // Firefox 24 is the latest ESR - 'Explorer >= 8', - 'iOS >= 6', - 'Opera >= 12', - 'Safari >= 6' - ] - }, - core: { - options: { - map: true - }, - src: 'dist/css/<%= pkg.name %>.css' - }, - theme: { - options: { - map: true - }, - src: 'dist/css/<%= pkg.name %>-theme.css' - }, - docs: { - src: 'docs/assets/css/_src/docs.css' - }, - examples: { - expand: true, - cwd: 'docs/examples/', - src: ['**/*.css'], - dest: 'docs/examples/' - } - }, - - csslint: { - options: { - csslintrc: 'less/.csslintrc' - }, - src: [ - 'dist/css/bootstrap.css', - 'dist/css/bootstrap-theme.css' - ], - examples: [ - 'docs/examples/**/*.css' - ], - docs: { - options: { - ids: false, - 'overqualified-elements': false - }, - src: 'docs/assets/css/_src/docs.css' - } - }, - - cssmin: { - options: { - compatibility: 'ie8', - keepSpecialComments: '*', - noAdvanced: true - }, - core: { - files: { - 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', - 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' - } - }, - docs: { - src: [ - 'docs/assets/css/_src/docs.css', - 'docs/assets/css/_src/pygments-manni.css' - ], - dest: 'docs/assets/css/docs.min.css' - } - }, - - usebanner: { - options: { - position: 'top', - banner: '<%= banner %>' - }, - files: { - src: 'dist/css/*.css' - } - }, - - csscomb: { - options: { - config: 'less/.csscomb.json' - }, - dist: { - expand: true, - cwd: 'dist/css/', - src: ['*.css', '!*.min.css'], - dest: 'dist/css/' - }, - examples: { - expand: true, - cwd: 'docs/examples/', - src: '**/*.css', - dest: 'docs/examples/' - }, - docs: { - files: { - 'docs/assets/css/_src/docs.css': 'docs/assets/css/_src/docs.css' - } - } - }, - - copy: { - fonts: { - expand: true, - src: 'fonts/*', - dest: 'dist/' - }, - docs: { - expand: true, - cwd: './dist', - src: [ - '{css,js}/*.min.*', - 'css/*.map', - 'fonts/*' - ], - dest: 'docs/dist' - } - }, - - connect: { - server: { - options: { - port: 3000, - base: '.' - } - } - }, - - jekyll: { - docs: {} - }, - - jade: { - compile: { - options: { - pretty: true, - data: function () { - var filePath = path.join(__dirname, 'less/variables.less'); - var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); - var parser = new BsLessdocParser(fileContent); - return { sections: parser.parseFile() }; - } - }, - files: { - 'docs/_includes/customizer-variables.html': 'docs/_jade/customizer-variables.jade', - 'docs/_includes/nav/customize.html': 'docs/_jade/customizer-nav.jade' - } - } - }, - - validation: { - options: { - charset: 'utf-8', - doctype: 'HTML5', - failHard: true, - reset: true, - relaxerror: [ - 'Bad value X-UA-Compatible for attribute http-equiv on element meta.', - 'Element img is missing required attribute src.' - ] - }, - files: { - src: '_gh_pages/**/*.html' - } - }, - - watch: { - src: { - files: '<%= jshint.src.src %>', - tasks: ['jshint:src', 'qunit'] - }, - test: { - files: '<%= jshint.test.src %>', - tasks: ['jshint:test', 'qunit'] - }, - less: { - files: 'less/*.less', - tasks: 'less' - } - }, - - sed: { - versionNumber: { - pattern: (function () { - var old = grunt.option('oldver'); - return old ? RegExp.quote(old) : old; - })(), - replacement: grunt.option('newver'), - recursive: true - } - }, - - 'saucelabs-qunit': { - all: { - options: { - build: process.env.TRAVIS_JOB_ID, - concurrency: 10, - maxRetries: 3, - urls: ['http://127.0.0.1:3000/js/tests/index.html'], - browsers: grunt.file.readYAML('grunt/sauce_browsers.yml') - } - } - }, - - exec: { - npmUpdate: { - command: 'npm update' - } - } - }); - - - // These plugins provide necessary tasks. - require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); - require('time-grunt')(grunt); - - // Docs HTML validation task - grunt.registerTask('validate-html', ['jekyll', 'validation']); - - var runSubset = function (subset) { - return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; - }; - var isUndefOrNonZero = function (val) { - return val === undefined || val !== '0'; - }; - - // Test task. - var testSubtasks = []; - // Skip core tests if running a different subset of the test suite - if (runSubset('core')) { - testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']); - } - // Skip HTML validation if running a different subset of the test suite - if (runSubset('validate-html') && - // Skip HTML5 validator on Travis when [skip validator] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) { - testSubtasks.push('validate-html'); - } - // Only run Sauce Labs tests if there's a Sauce access key - if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' && - // Skip Sauce if running a different subset of the test suite - runSubset('sauce-js-unit') && - // Skip Sauce on Travis when [skip sauce] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) { - testSubtasks.push('connect'); - testSubtasks.push('saucelabs-qunit'); - } - grunt.registerTask('test', testSubtasks); - - // JS distribution task. - grunt.registerTask('dist-js', ['concat', 'uglify']); - - // CSS distribution task. - grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']); - grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'usebanner', 'csscomb', 'cssmin']); - - // Docs distribution task. - grunt.registerTask('dist-docs', 'copy:docs'); - - // Full distribution task. - grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']); - - // Default task. - grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer']); - - // Version numbering task. - // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z - // This can be overzealous, so its changes should always be manually reviewed! - grunt.registerTask('change-version-number', 'sed'); - - grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); }); - - // task for building customizer - grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']); - grunt.registerTask('build-customizer-html', 'jade'); - grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { - var banner = grunt.template.process('<%= banner %>'); - generateRawFiles(grunt, banner); - }); - - // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json). - // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change. - grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']); - grunt.registerTask('_update-shrinkwrap', function () { - var done = this.async(); - npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) { - if (err) { - grunt.fail.warn(err) - } - var dest = 'test-infra/npm-shrinkwrap.json'; - fs.renameSync('npm-shrinkwrap.json', dest); - grunt.log.writeln('File ' + dest.cyan + ' updated.'); - done(); - }); - }); -}; diff --git a/platforms/browser/www/lib/bootstrap/LICENSE b/platforms/browser/www/lib/bootstrap/LICENSE deleted file mode 100644 index 8d94aa9a..00000000 --- a/platforms/browser/www/lib/bootstrap/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2014 Twitter, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/platforms/browser/www/lib/bootstrap/README.md b/platforms/browser/www/lib/bootstrap/README.md deleted file mode 100644 index 82c4a17b..00000000 --- a/platforms/browser/www/lib/bootstrap/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# [Bootstrap](http://getbootstrap.com) -[![Bower version](https://badge.fury.io/bo/bootstrap.svg)](http://badge.fury.io/bo/bootstrap) -[![NPM version](https://badge.fury.io/js/bootstrap.svg)](http://badge.fury.io/js/bootstrap) -[![Build Status](https://secure.travis-ci.org/twbs/bootstrap.svg?branch=master)](http://travis-ci.org/twbs/bootstrap) -[![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) -[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) - -Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community. - -To get started, check out <http://getbootstrap.com>! - -## Table of contents - - - [Quick start](#quick-start) - - [Bugs and feature requests](#bugs-and-feature-requests) - - [Documentation](#documentation) - - [Contributing](#contributing) - - [Community](#community) - - [Versioning](#versioning) - - [Creators](#creators) - - [Copyright and license](#copyright-and-license) - -## Quick start - -Three quick start options are available: - -- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.2.0.zip). -- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. -- Install with [Bower](http://bower.io): `bower install bootstrap`. - -Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. - -### What's included - -Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: - -``` -bootstrap/ -├── css/ -│ ├── bootstrap.css -│ ├── bootstrap.min.css -│ ├── bootstrap-theme.css -│ └── bootstrap-theme.min.css -├── js/ -│ ├── bootstrap.js -│ └── bootstrap.min.js -└── fonts/ - ├── glyphicons-halflings-regular.eot - ├── glyphicons-halflings-regular.svg - ├── glyphicons-halflings-regular.ttf - └── glyphicons-halflings-regular.woff -``` - -We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). Fonts from Glyphicons are included, as is the optional Bootstrap theme. - - - -## Bugs and feature requests - -Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). - - -## Documentation - -Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally. - -### Running documentation locally - -1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.0.x). - - **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. We use Pygments for syntax highlighting, so make sure to read the sections on installing Python and Pygments. -2. From the root `/bootstrap` directory, run `jekyll serve` in the command line. -3. Open <http://localhost:9001> in your browser, and voilà. - -Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). - -### Documentation for previous releases - -Documentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3. - -[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. - - - -## Contributing - -Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. - -Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). - -Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>. - - - -## Community - -Keep track of development and community news. - -- Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). -- Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). -- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. -- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). - - - -## Versioning - -For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. - - - -## Creators - -**Mark Otto** - -- <http://twitter.com/mdo> -- <http://github.com/mdo> - -**Jacob Thornton** - -- <http://twitter.com/fat> -- <http://github.com/fat> - - - -## Copyright and license - -Code and documentation copyright 2011-2014 Twitter, Inc. Code released under [the MIT license](LICENSE). Docs released under [Creative Commons](docs/LICENSE). diff --git a/platforms/browser/www/lib/bootstrap/bower.json b/platforms/browser/www/lib/bootstrap/bower.json deleted file mode 100644 index eaf768a7..00000000 --- a/platforms/browser/www/lib/bootstrap/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "js", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "main": [ - "less/bootstrap.less", - "dist/css/bootstrap.css", - "dist/js/bootstrap.js", - "dist/fonts/glyphicons-halflings-regular.eot", - "dist/fonts/glyphicons-halflings-regular.svg", - "dist/fonts/glyphicons-halflings-regular.ttf", - "dist/fonts/glyphicons-halflings-regular.woff" - ], - "ignore": [ - ".*", - "_config.yml", - "CNAME", - "composer.json", - "CONTRIBUTING.md", - "docs", - "js/tests", - "test-infra" - ], - "dependencies": { - "jquery": ">= 1.9.0" - } -} diff --git a/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20335 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 diff --git a/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index e3e2dc73..00000000 --- a/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > -<font-face units-per-em="1200" ascent="960" descent="-240" /> -<missing-glyph horiz-adv-x="500" /> -<glyph /> -<glyph /> -<glyph unicode="&#xd;" /> -<glyph unicode=" " /> -<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> -<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> -<glyph unicode="&#xa0;" /> -<glyph unicode="&#x2000;" horiz-adv-x="652" /> -<glyph unicode="&#x2001;" horiz-adv-x="1304" /> -<glyph unicode="&#x2002;" horiz-adv-x="652" /> -<glyph unicode="&#x2003;" horiz-adv-x="1304" /> -<glyph unicode="&#x2004;" horiz-adv-x="434" /> -<glyph unicode="&#x2005;" horiz-adv-x="326" /> -<glyph unicode="&#x2006;" horiz-adv-x="217" /> -<glyph unicode="&#x2007;" horiz-adv-x="217" /> -<glyph unicode="&#x2008;" horiz-adv-x="163" /> -<glyph unicode="&#x2009;" horiz-adv-x="260" /> -<glyph unicode="&#x200a;" horiz-adv-x="72" /> -<glyph unicode="&#x202f;" horiz-adv-x="260" /> -<glyph unicode="&#x205f;" horiz-adv-x="326" /> -<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> -<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" /> -<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" /> -<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" /> -<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> -<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> -<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> -<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> -<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> -<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> -<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" /> -<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> -<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> -<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> -<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> -<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> -<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> -<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> -<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> -<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> -<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> -<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> -<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> -<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> -<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" /> -<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> -<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> -<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" /> -<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" /> -<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> -<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" /> -<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> -<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> -<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> -<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> -<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> -<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> -<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> -<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> -<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> -<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> -<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> -<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> -<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> -<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> -<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> -<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> -<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> -<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" /> -<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> -<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> -<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> -<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> -<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> -<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> -<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> -<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> -<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" /> -<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" /> -<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> -<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" /> -<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> -<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" /> -<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> -<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> -<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> -<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" /> -<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> -<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> -<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> -<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> -<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> -<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> -<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" /> -<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" /> -<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> -<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" /> -<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" /> -<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> -<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" /> -<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" /> -<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" /> -<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" /> -<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" /> -<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" /> -<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" /> -<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> -<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> -<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" /> -<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" /> -<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> -<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" /> -<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> -<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> -<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> -<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> -<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> -<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> -<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> -<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> -<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> -<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> -<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> -<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> -<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" /> -<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" /> -<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" /> -<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> -<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> -<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> -<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> -<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> -<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> -<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> -<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> -<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> -<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" /> -<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" /> -<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" /> -<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" /> -<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" /> -<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> -<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" /> -<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" /> -<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" /> -<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" /> -<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" /> -<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> -<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> -<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> -<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> -<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> -<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" /> -<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" /> -<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" /> -<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> -<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> -<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> -<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> -<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> -<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> -<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> -<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> -<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> -<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> -<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> -<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> -<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> -<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> -<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> -<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> -<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" /> -<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" /> -<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " /> -<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" /> -<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" /> -<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" /> -<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" /> -<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" /> -<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" /> -<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" /> -<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" /> -<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" /> -<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" /> -<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" /> -<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" /> -<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" /> -<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" /> -<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" /> -<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" /> -<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" /> -<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" /> -<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> -<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" /> -<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" /> -<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" /> -<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" /> -<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> -<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" /> -<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" /> -<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" /> -<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" /> -<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" /> -<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" /> -<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> -<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 67fa00bf83801d2fa568546b982c80d27f6ef74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41280 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 diff --git a/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/platforms/browser/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23320 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 diff --git a/platforms/browser/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js b/platforms/browser/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js deleted file mode 100644 index 82dc727b..00000000 --- a/platforms/browser/www/lib/bootstrap/grunt/bs-glyphicons-data-generator.js +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * Bootstrap Grunt task for Glyphicons data generation - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -'use strict'; -var fs = require('fs'); - -module.exports = function generateGlyphiconsData(grunt) { - // Pass encoding, utf8, so `readFileSync` will return a string instead of a - // buffer - var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); - var glyphiconsLines = glyphiconsFile.split('\n'); - - // Use any line that starts with ".glyphicon-" and capture the class name - var iconClassName = /^\.(glyphicon-[^\s]+)/; - var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + - '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; - var glyphiconsYml = 'docs/_data/glyphicons.yml'; - for (var i = 0, len = glyphiconsLines.length; i < len; i++) { - var match = glyphiconsLines[i].match(iconClassName); - - if (match !== null) { - glyphiconsData += '- ' + match[1] + '\n'; - } - } - - // Create the `_data` directory if it doesn't already exist - if (!fs.existsSync('docs/_data')) { - fs.mkdirSync('docs/_data'); - } - - try { - fs.writeFileSync(glyphiconsYml, glyphiconsData); - } - catch (err) { - grunt.fail.warn(err); - } - grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); -}; diff --git a/platforms/browser/www/lib/bootstrap/grunt/bs-lessdoc-parser.js b/platforms/browser/www/lib/bootstrap/grunt/bs-lessdoc-parser.js deleted file mode 100644 index c1821de1..00000000 --- a/platforms/browser/www/lib/bootstrap/grunt/bs-lessdoc-parser.js +++ /dev/null @@ -1,236 +0,0 @@ -/*! - * Bootstrap Grunt task for parsing Less docstrings - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -'use strict'; - -var markdown = require('markdown').markdown; - -function markdown2html(markdownString) { - // the slice removes the <p>...</p> wrapper output by Markdown processor - return markdown.toHTML(markdownString.trim()).slice(3, -4); -} - - -/* -Mini-language: - //== This is a normal heading, which starts a section. Sections group variables together. - //## Optional description for the heading - - //=== This is a subheading. - - //** Optional description for the following variable. You **can** use Markdown in descriptions to discuss `<html>` stuff. - @foo: #fff; - - //-- This is a heading for a section whose variables shouldn't be customizable - - All other lines are ignored completely. -*/ - - -var CUSTOMIZABLE_HEADING = /^[/]{2}={2}(.*)$/; -var UNCUSTOMIZABLE_HEADING = /^[/]{2}-{2}(.*)$/; -var SUBSECTION_HEADING = /^[/]{2}={3}(.*)$/; -var SECTION_DOCSTRING = /^[/]{2}#{2}(.*)$/; -var VAR_ASSIGNMENT = /^(@[a-zA-Z0-9_-]+):[ ]*([^ ;][^;]+);[ ]*$/; -var VAR_DOCSTRING = /^[/]{2}[*]{2}(.*)$/; - -function Section(heading, customizable) { - this.heading = heading.trim(); - this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); - this.customizable = customizable; - this.docstring = null; - this.subsections = []; -} - -Section.prototype.addSubSection = function (subsection) { - this.subsections.push(subsection); -}; - -function SubSection(heading) { - this.heading = heading.trim(); - this.id = this.heading.replace(/\s+/g, '-').toLowerCase(); - this.variables = []; -} - -SubSection.prototype.addVar = function (variable) { - this.variables.push(variable); -}; - -function VarDocstring(markdownString) { - this.html = markdown2html(markdownString); -} - -function SectionDocstring(markdownString) { - this.html = markdown2html(markdownString); -} - -function Variable(name, defaultValue) { - this.name = name; - this.defaultValue = defaultValue; - this.docstring = null; -} - -function Tokenizer(fileContent) { - this._lines = fileContent.split('\n'); - this._next = undefined; -} - -Tokenizer.prototype.unshift = function (token) { - if (this._next !== undefined) { - throw new Error('Attempted to unshift twice!'); - } - this._next = token; -}; - -Tokenizer.prototype._shift = function () { - // returning null signals EOF - // returning undefined means the line was ignored - if (this._next !== undefined) { - var result = this._next; - this._next = undefined; - return result; - } - if (this._lines.length <= 0) { - return null; - } - var line = this._lines.shift(); - var match = null; - match = SUBSECTION_HEADING.exec(line); - if (match !== null) { - return new SubSection(match[1]); - } - match = CUSTOMIZABLE_HEADING.exec(line); - if (match !== null) { - return new Section(match[1], true); - } - match = UNCUSTOMIZABLE_HEADING.exec(line); - if (match !== null) { - return new Section(match[1], false); - } - match = SECTION_DOCSTRING.exec(line); - if (match !== null) { - return new SectionDocstring(match[1]); - } - match = VAR_DOCSTRING.exec(line); - if (match !== null) { - return new VarDocstring(match[1]); - } - var commentStart = line.lastIndexOf('//'); - var varLine = (commentStart === -1) ? line : line.slice(0, commentStart); - match = VAR_ASSIGNMENT.exec(varLine); - if (match !== null) { - return new Variable(match[1], match[2]); - } - return undefined; -}; - -Tokenizer.prototype.shift = function () { - while (true) { - var result = this._shift(); - if (result === undefined) { - continue; - } - return result; - } -}; - -function Parser(fileContent) { - this._tokenizer = new Tokenizer(fileContent); -} - -Parser.prototype.parseFile = function () { - var sections = []; - while (true) { - var section = this.parseSection(); - if (section === null) { - if (this._tokenizer.shift() !== null) { - throw new Error('Unexpected unparsed section of file remains!'); - } - return sections; - } - sections.push(section); - } -}; - -Parser.prototype.parseSection = function () { - var section = this._tokenizer.shift(); - if (section === null) { - return null; - } - if (!(section instanceof Section)) { - throw new Error('Expected section heading; got: ' + JSON.stringify(section)); - } - var docstring = this._tokenizer.shift(); - if (docstring instanceof SectionDocstring) { - section.docstring = docstring; - } - else { - this._tokenizer.unshift(docstring); - } - this.parseSubSections(section); - - return section; -}; - -Parser.prototype.parseSubSections = function (section) { - while (true) { - var subsection = this.parseSubSection(); - if (subsection === null) { - if (section.subsections.length === 0) { - // Presume an implicit initial subsection - subsection = new SubSection(''); - this.parseVars(subsection); - } - else { - break; - } - } - section.addSubSection(subsection); - } - - if (section.subsections.length === 1 && !(section.subsections[0].heading) && section.subsections[0].variables.length === 0) { - // Ignore lone empty implicit subsection - section.subsections = []; - } -}; - -Parser.prototype.parseSubSection = function () { - var subsection = this._tokenizer.shift(); - if (subsection instanceof SubSection) { - this.parseVars(subsection); - return subsection; - } - this._tokenizer.unshift(subsection); - return null; -}; - -Parser.prototype.parseVars = function (subsection) { - while (true) { - var variable = this.parseVar(); - if (variable === null) { - return; - } - subsection.addVar(variable); - } -}; - -Parser.prototype.parseVar = function () { - var docstring = this._tokenizer.shift(); - if (!(docstring instanceof VarDocstring)) { - this._tokenizer.unshift(docstring); - docstring = null; - } - var variable = this._tokenizer.shift(); - if (variable instanceof Variable) { - variable.docstring = docstring; - return variable; - } - this._tokenizer.unshift(variable); - return null; -}; - - -module.exports = Parser; diff --git a/platforms/browser/www/lib/bootstrap/grunt/bs-raw-files-generator.js b/platforms/browser/www/lib/bootstrap/grunt/bs-raw-files-generator.js deleted file mode 100644 index ec8c5314..00000000 --- a/platforms/browser/www/lib/bootstrap/grunt/bs-raw-files-generator.js +++ /dev/null @@ -1,46 +0,0 @@ -/*! - * Bootstrap Grunt task for generating raw-files.min.js for the Customizer - * http://getbootstrap.com - * Copyright 2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/* global btoa: true */ - -'use strict'; -var fs = require('fs'); -var btoa = require('btoa'); -var glob = require('glob'); - -function getFiles(type) { - var files = {}; - var recursive = (type === 'less'); - var globExpr = (recursive ? '/**/*' : '/*'); - glob.sync(type + globExpr) - .filter(function (path) { - return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); - }) - .forEach(function (fullPath) { - var relativePath = fullPath.replace(/^[^/]+\//, ''); - files[relativePath] = (type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8')); - }); - return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; -} - -module.exports = function generateRawFilesJs(grunt, banner) { - if (!banner) { - banner = ''; - } - var dirs = ['js', 'less', 'fonts']; - var files = banner + dirs.map(getFiles).reduce(function (combined, file) { - return combined + file; - }, ''); - var rawFilesJs = 'docs/assets/js/raw-files.min.js'; - try { - fs.writeFileSync(rawFilesJs, files); - } - catch (err) { - grunt.fail.warn(err); - } - grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); -}; diff --git a/platforms/browser/www/lib/bootstrap/grunt/sauce_browsers.yml b/platforms/browser/www/lib/bootstrap/grunt/sauce_browsers.yml deleted file mode 100644 index 8014bfcb..00000000 --- a/platforms/browser/www/lib/bootstrap/grunt/sauce_browsers.yml +++ /dev/null @@ -1,82 +0,0 @@ -[ - # Docs: https://saucelabs.com/docs/platforms/webdriver - - { - browserName: "safari", - platform: "OS X 10.9" - }, - { - browserName: "chrome", - platform: "OS X 10.9" - }, - { - browserName: "firefox", - platform: "OS X 10.9" - }, - - # Mac Opera not currently supported by Sauce Labs - - { - browserName: "internet explorer", - version: "11", - platform: "Windows 8.1" - }, - { - browserName: "internet explorer", - version: "10", - platform: "Windows 8" - }, - { - browserName: "internet explorer", - version: "9", - platform: "Windows 7" - }, - { - browserName: "internet explorer", - version: "8", - platform: "Windows 7" - }, - - # { # Unofficial - # browserName: "internet explorer", - # version: "7", - # platform: "Windows XP" - # }, - - { - browserName: "chrome", - platform: "Windows 8.1" - }, - { - browserName: "firefox", - platform: "Windows 8.1" - }, - - # Win Opera 15+ not currently supported by Sauce Labs - - { - browserName: "iphone", - platform: "OS X 10.9", - version: "7.1" - }, - - # iOS Chrome not currently supported by Sauce Labs - - # Linux (unofficial) - { - browserName: "chrome", - platform: "Linux" - }, - { - browserName: "firefox", - platform: "Linux" - } - - # Android Chrome not currently supported by Sauce Labs - - # { # Android Browser (super-unofficial) - # browserName: "android", - # version: "4.0", - # platform: "Linux" - # } -] diff --git a/platforms/browser/www/lib/bootstrap/js/affix.js b/platforms/browser/www/lib/bootstrap/js/affix.js deleted file mode 100644 index 7d404ebe..00000000 --- a/platforms/browser/www/lib/bootstrap/js/affix.js +++ /dev/null @@ -1,142 +0,0 @@ -/* ======================================================================== - * Bootstrap: affix.js v3.2.0 - * http://getbootstrap.com/javascript/#affix - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - - this.$target = $(this.options.target) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = - this.unpin = - this.pinnedOffset = null - - this.checkPosition() - } - - Affix.VERSION = '3.2.0' - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0, - target: window - } - - Affix.prototype.getPinnedOffset = function () { - if (this.pinnedOffset) return this.pinnedOffset - this.$element.removeClass(Affix.RESET).addClass('affix') - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - return (this.pinnedOffset = position.top - scrollTop) - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) - - var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : - offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : - offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false - - if (this.affixed === affix) return - if (this.unpin != null) this.$element.css('top', '') - - var affixType = 'affix' + (affix ? '-' + affix : '') - var e = $.Event(affixType + '.bs.affix') - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null - - this.$element - .removeClass(Affix.RESET) - .addClass(affixType) - .trigger($.Event(affixType.replace('affix', 'affixed'))) - - if (affix == 'bottom') { - this.$element.offset({ - top: scrollHeight - this.$element.height() - offsetBottom - }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.affix - - $.fn.affix = Plugin - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom) data.offset.bottom = data.offsetBottom - if (data.offsetTop) data.offset.top = data.offsetTop - - Plugin.call($spy, data) - }) - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/alert.js b/platforms/browser/www/lib/bootstrap/js/alert.js deleted file mode 100644 index 0efd92cb..00000000 --- a/platforms/browser/www/lib/bootstrap/js/alert.js +++ /dev/null @@ -1,92 +0,0 @@ -/* ======================================================================== - * Bootstrap: alert.js v3.2.0 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.VERSION = '3.2.0' - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - // detach from parent, fire event then clean up data - $parent.detach().trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one('bsTransitionEnd', removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.alert - - $.fn.alert = Plugin - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/button.js b/platforms/browser/www/lib/bootstrap/js/button.js deleted file mode 100644 index dc3164f8..00000000 --- a/platforms/browser/www/lib/bootstrap/js/button.js +++ /dev/null @@ -1,110 +0,0 @@ -/* ======================================================================== - * Bootstrap: button.js v3.2.0 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.VERSION = '3.2.0' - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (data.resetText == null) $el.data('resetText', $el[val]()) - - $el[val](data[state] == null ? this.options[state] : data[state]) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') - } - - if (changed) this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - var old = $.fn.button - - $.fn.button = Plugin - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - Plugin.call($btn, 'toggle') - e.preventDefault() - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/carousel.js b/platforms/browser/www/lib/bootstrap/js/carousel.js deleted file mode 100644 index b7da1ba5..00000000 --- a/platforms/browser/www/lib/bootstrap/js/carousel.js +++ /dev/null @@ -1,223 +0,0 @@ -/* ======================================================================== - * Bootstrap: carousel.js v3.2.0 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) - .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) - } - - Carousel.VERSION = '3.2.0' - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true - } - - Carousel.prototype.keydown = function (e) { - switch (e.which) { - case 37: this.prev(); break - case 39: this.next(); break - default: return - } - - e.preventDefault() - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getItemIndex = function (item) { - this.$items = item.parent().children('.item') - return this.$items.index(item || this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return (this.sliding = false) - - var relatedTarget = $next[0] - var slideEvent = $.Event('slide.bs.carousel', { - relatedTarget: relatedTarget, - direction: direction - }) - this.$element.trigger(slideEvent) - if (slideEvent.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) - $nextIndicator && $nextIndicator.addClass('active') - } - - var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one('bsTransitionEnd', function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { - that.$element.trigger(slidEvent) - }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger(slidEvent) - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - var old = $.fn.carousel - - $.fn.carousel = Plugin - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var href - var $this = $(this) - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 - if (!$target.hasClass('carousel')) return - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - Plugin.call($target, options) - - if (slideIndex) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - Plugin.call($carousel, $carousel.data()) - }) - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/collapse.js b/platforms/browser/www/lib/bootstrap/js/collapse.js deleted file mode 100644 index e4e6d793..00000000 --- a/platforms/browser/www/lib/bootstrap/js/collapse.js +++ /dev/null @@ -1,170 +0,0 @@ -/* ======================================================================== - * Bootstrap: collapse.js v3.2.0 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.VERSION = '3.2.0' - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - Plugin.call(actives, 'hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing')[dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in')[dimension]('') - this.transitioning = 0 - this.$element - .trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element[dimension](this.$element[dimension]())[0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.collapse - - $.fn.collapse = Plugin - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { - var href - var $this = $(this) - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - Plugin.call($target, option) - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/dropdown.js b/platforms/browser/www/lib/bootstrap/js/dropdown.js deleted file mode 100644 index 88f118c2..00000000 --- a/platforms/browser/www/lib/bootstrap/js/dropdown.js +++ /dev/null @@ -1,151 +0,0 @@ -/* ======================================================================== - * Bootstrap: dropdown.js v3.2.0 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle="dropdown"]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.VERSION = '3.2.0' - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) - } - - var relatedTarget = { relatedTarget: this } - $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this.trigger('focus') - - $parent - .toggleClass('open') - .trigger('shown.bs.dropdown', relatedTarget) - } - - return false - } - - Dropdown.prototype.keydown = function (e) { - if (!/(38|40|27)/.test(e.keyCode)) return - - var $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).trigger('focus') - return $this.trigger('click') - } - - var desc = ' li:not(.divider):visible a' - var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) - - if (!$items.length) return - - var index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items.eq(index).trigger('focus') - } - - function clearMenus(e) { - if (e && e.which === 3) return - $(backdrop).remove() - $(toggle).each(function () { - var $parent = getParent($(this)) - var relatedTarget = { relatedTarget: this } - if (!$parent.hasClass('open')) return - $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) - if (e.isDefaultPrevented()) return - $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = selector && $(selector) - - return $parent && $parent.length ? $parent : $this.parent() - } - - - // DROPDOWN PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.dropdown') - - if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.dropdown - - $.fn.dropdown = Plugin - $.fn.dropdown.Constructor = Dropdown - - - // DROPDOWN NO CONFLICT - // ==================== - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - // APPLY TO STANDARD DROPDOWN ELEMENTS - // =================================== - - $(document) - .on('click.bs.dropdown.data-api', clearMenus) - .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) - .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/modal.js b/platforms/browser/www/lib/bootstrap/js/modal.js deleted file mode 100644 index 29eedf11..00000000 --- a/platforms/browser/www/lib/bootstrap/js/modal.js +++ /dev/null @@ -1,280 +0,0 @@ -/* ======================================================================== - * Bootstrap: modal.js v3.2.0 - * http://getbootstrap.com/javascript/#modals - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // MODAL CLASS DEFINITION - // ====================== - - var Modal = function (element, options) { - this.options = options - this.$body = $(document.body) - this.$element = $(element) - this.$backdrop = - this.isShown = null - this.scrollbarWidth = 0 - - if (this.options.remote) { - this.$element - .find('.modal-content') - .load(this.options.remote, $.proxy(function () { - this.$element.trigger('loaded.bs.modal') - }, this)) - } - } - - Modal.VERSION = '3.2.0' - - Modal.DEFAULTS = { - backdrop: true, - keyboard: true, - show: true - } - - Modal.prototype.toggle = function (_relatedTarget) { - return this.isShown ? this.hide() : this.show(_relatedTarget) - } - - Modal.prototype.show = function (_relatedTarget) { - var that = this - var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.checkScrollbar() - this.$body.addClass('modal-open') - - this.setScrollbar() - this.escape() - - this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(that.$body) // don't move modals dom position - } - - that.$element - .show() - .scrollTop(0) - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) - - transition ? - that.$element.find('.modal-dialog') // wait for modal to slide in - .one('bsTransitionEnd', function () { - that.$element.trigger('focus').trigger(e) - }) - .emulateTransitionEnd(300) : - that.$element.trigger('focus').trigger(e) - }) - } - - Modal.prototype.hide = function (e) { - if (e) e.preventDefault() - - e = $.Event('hide.bs.modal') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.$body.removeClass('modal-open') - - this.resetScrollbar() - this.escape() - - $(document).off('focusin.bs.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - .off('click.dismiss.bs.modal') - - $.support.transition && this.$element.hasClass('fade') ? - this.$element - .one('bsTransitionEnd', $.proxy(this.hideModal, this)) - .emulateTransitionEnd(300) : - this.hideModal() - } - - Modal.prototype.enforceFocus = function () { - $(document) - .off('focusin.bs.modal') // guard against infinite focus loop - .on('focusin.bs.modal', $.proxy(function (e) { - if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { - this.$element.trigger('focus') - } - }, this)) - } - - Modal.prototype.escape = function () { - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { - e.which == 27 && this.hide() - }, this)) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.bs.modal') - } - } - - Modal.prototype.hideModal = function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.$element.trigger('hidden.bs.modal') - }) - } - - Modal.prototype.removeBackdrop = function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - Modal.prototype.backdrop = function (callback) { - var that = this - var animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(this.$body) - - this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { - if (e.target !== e.currentTarget) return - this.options.backdrop == 'static' - ? this.$element[0].focus.call(this.$element[0]) - : this.hide.call(this) - }, this)) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop - .one('bsTransitionEnd', callback) - .emulateTransitionEnd(150) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - var callbackRemove = function () { - that.removeBackdrop() - callback && callback() - } - $.support.transition && this.$element.hasClass('fade') ? - this.$backdrop - .one('bsTransitionEnd', callbackRemove) - .emulateTransitionEnd(150) : - callbackRemove() - - } else if (callback) { - callback() - } - } - - Modal.prototype.checkScrollbar = function () { - if (document.body.clientWidth >= window.innerWidth) return - this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar() - } - - Modal.prototype.setScrollbar = function () { - var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) - if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) - } - - Modal.prototype.resetScrollbar = function () { - this.$body.css('padding-right', '') - } - - Modal.prototype.measureScrollbar = function () { // thx walsh - var scrollDiv = document.createElement('div') - scrollDiv.className = 'modal-scrollbar-measure' - this.$body.append(scrollDiv) - var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth - this.$body[0].removeChild(scrollDiv) - return scrollbarWidth - } - - - // MODAL PLUGIN DEFINITION - // ======================= - - function Plugin(option, _relatedTarget) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.modal') - var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option](_relatedTarget) - else if (options.show) data.show(_relatedTarget) - }) - } - - var old = $.fn.modal - - $.fn.modal = Plugin - $.fn.modal.Constructor = Modal - - - // MODAL NO CONFLICT - // ================= - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - // MODAL DATA-API - // ============== - - $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - var href = $this.attr('href') - var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 - var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) - - if ($this.is('a')) e.preventDefault() - - $target.one('show.bs.modal', function (showEvent) { - if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown - $target.one('hidden.bs.modal', function () { - $this.is(':visible') && $this.trigger('focus') - }) - }) - Plugin.call($target, option, this) - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/popover.js b/platforms/browser/www/lib/bootstrap/js/popover.js deleted file mode 100644 index 825e1b39..00000000 --- a/platforms/browser/www/lib/bootstrap/js/popover.js +++ /dev/null @@ -1,113 +0,0 @@ -/* ======================================================================== - * Bootstrap: popover.js v3.2.0 - * http://getbootstrap.com/javascript/#popovers - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // POPOVER PUBLIC CLASS DEFINITION - // =============================== - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') - - Popover.VERSION = '3.2.0' - - Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right', - trigger: 'click', - content: '', - template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover - - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS - } - - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events - this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' - ](content) - - $tip.removeClass('fade top bottom left right in') - - // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do - // this manually by checking the contents. - if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() - } - - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } - - Popover.prototype.getContent = function () { - var $e = this.$element - var o = this.options - - return $e.attr('data-content') - || (typeof o.content == 'function' ? - o.content.call($e[0]) : - o.content) - } - - Popover.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.arrow')) - } - - Popover.prototype.tip = function () { - if (!this.$tip) this.$tip = $(this.options.template) - return this.$tip - } - - - // POPOVER PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option - - if (!data && option == 'destroy') return - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.popover - - $.fn.popover = Plugin - $.fn.popover.Constructor = Popover - - - // POPOVER NO CONFLICT - // =================== - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/scrollspy.js b/platforms/browser/www/lib/bootstrap/js/scrollspy.js deleted file mode 100644 index db237878..00000000 --- a/platforms/browser/www/lib/bootstrap/js/scrollspy.js +++ /dev/null @@ -1,170 +0,0 @@ -/* ======================================================================== - * Bootstrap: scrollspy.js v3.2.0 - * http://getbootstrap.com/javascript/#scrollspy - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // SCROLLSPY CLASS DEFINITION - // ========================== - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - - this.$body = $('body') - this.$scrollElement = $(element).is('body') ? $(window) : $(element) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target || '') + ' .nav li > a' - this.offsets = [] - this.targets = [] - this.activeTarget = null - this.scrollHeight = 0 - - this.$scrollElement.on('scroll.bs.scrollspy', process) - this.refresh() - this.process() - } - - ScrollSpy.VERSION = '3.2.0' - - ScrollSpy.DEFAULTS = { - offset: 10 - } - - ScrollSpy.prototype.getScrollHeight = function () { - return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - } - - ScrollSpy.prototype.refresh = function () { - var offsetMethod = 'offset' - var offsetBase = 0 - - if (!$.isWindow(this.$scrollElement[0])) { - offsetMethod = 'position' - offsetBase = this.$scrollElement.scrollTop() - } - - this.offsets = [] - this.targets = [] - this.scrollHeight = this.getScrollHeight() - - var self = this - - this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#./.test(href) && $(href) - - return ($href - && $href.length - && $href.is(':visible') - && [[$href[offsetMethod]().top + offsetBase, href]]) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.getScrollHeight() - var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i - - if (this.scrollHeight != scrollHeight) { - this.refresh() - } - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) - } - - if (activeTarget && scrollTop <= offsets[0]) { - return activeTarget != (i = targets[0]) && this.activate(i) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate(targets[i]) - } - } - - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target - - $(this.selector) - .parentsUntil(this.options.target, '.active') - .removeClass('active') - - var selector = this.selector + - '[data-target="' + target + '"],' + - this.selector + '[href="' + target + '"]' - - var active = $(selector) - .parents('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active - .closest('li.dropdown') - .addClass('active') - } - - active.trigger('activate.bs.scrollspy') - } - - - // SCROLLSPY PLUGIN DEFINITION - // =========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.scrollspy - - $.fn.scrollspy = Plugin - $.fn.scrollspy.Constructor = ScrollSpy - - - // SCROLLSPY NO CONFLICT - // ===================== - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - // SCROLLSPY DATA-API - // ================== - - $(window).on('load.bs.scrollspy.data-api', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - Plugin.call($spy, $spy.data()) - }) - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/tab.js b/platforms/browser/www/lib/bootstrap/js/tab.js deleted file mode 100644 index c0e1e466..00000000 --- a/platforms/browser/www/lib/bootstrap/js/tab.js +++ /dev/null @@ -1,128 +0,0 @@ -/* ======================================================================== - * Bootstrap: tab.js v3.2.0 - * http://getbootstrap.com/javascript/#tabs - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TAB CLASS DEFINITION - // ==================== - - var Tab = function (element) { - this.element = $(element) - } - - Tab.VERSION = '3.2.0' - - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.data('target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - if ($this.parent('li').hasClass('active')) return - - var previous = $ul.find('.active:last a')[0] - var e = $.Event('show.bs.tab', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - var $target = $(selector) - - this.activate($this.closest('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown.bs.tab', - relatedTarget: previous - }) - }) - } - - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if (element.parent('.dropdown-menu')) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active - .one('bsTransitionEnd', next) - .emulateTransitionEnd(150) : - next() - - $active.removeClass('in') - } - - - // TAB PLUGIN DEFINITION - // ===================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') - - if (!data) $this.data('bs.tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tab - - $.fn.tab = Plugin - $.fn.tab.Constructor = Tab - - - // TAB NO CONFLICT - // =============== - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - // TAB DATA-API - // ============ - - $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - Plugin.call($(this), 'show') - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/tooltip.js b/platforms/browser/www/lib/bootstrap/js/tooltip.js deleted file mode 100644 index 9cdb6c9e..00000000 --- a/platforms/browser/www/lib/bootstrap/js/tooltip.js +++ /dev/null @@ -1,457 +0,0 @@ -/* ======================================================================== - * Bootstrap: tooltip.js v3.2.0 - * http://getbootstrap.com/javascript/#tooltip - * Inspired by the original jQuery.tipsy by Jason Frame - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TOOLTIP PUBLIC CLASS DEFINITION - // =============================== - - var Tooltip = function (element, options) { - this.type = - this.options = - this.enabled = - this.timeout = - this.hoverState = - this.$element = null - - this.init('tooltip', element, options) - } - - Tooltip.VERSION = '3.2.0' - - Tooltip.DEFAULTS = { - animation: true, - placement: 'top', - selector: false, - template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - container: false, - viewport: { - selector: 'body', - padding: 0 - } - } - - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport) - - var triggers = this.options.trigger.split(' ') - - for (var i = triggers.length; i--;) { - var trigger = triggers[i] - - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' - - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } - - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay, - hide: options.delay - } - } - - return options - } - - Tooltip.prototype.getDelegateOptions = function () { - var options = {} - var defaults = this.getDefaults() - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) - - return options - } - - Tooltip.prototype.enter = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - clearTimeout(self.timeout) - - self.hoverState = 'in' - - if (!self.options.delay || !self.options.delay.show) return self.show() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - clearTimeout(self.timeout) - - self.hoverState = 'out' - - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.' + this.type) - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - - var inDom = $.contains(document.documentElement, this.$element[0]) - if (e.isDefaultPrevented() || !inDom) return - var that = this - - var $tip = this.tip() - - var tipId = this.getUID(this.type) - - this.setContent() - $tip.attr('id', tipId) - this.$element.attr('aria-describedby', tipId) - - if (this.options.animation) $tip.addClass('fade') - - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - var autoToken = /\s?auto?\s?/i - var autoPlace = autoToken.test(placement) - if (autoPlace) placement = placement.replace(autoToken, '') || 'top' - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - .addClass(placement) - .data('bs.' + this.type, this) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (autoPlace) { - var orgPlacement = placement - var $parent = this.$element.parent() - var parentDim = this.getPosition($parent) - - placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' : - placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' : - placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' : - placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' : - placement - - $tip - .removeClass(orgPlacement) - .addClass(placement) - } - - var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) - - this.applyPlacement(calculatedOffset, placement) - - var complete = function () { - that.$element.trigger('shown.bs.' + that.type) - that.hoverState = null - } - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(150) : - complete() - } - } - - Tooltip.prototype.applyPlacement = function (offset, placement) { - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight - - // manually read margins because getBoundingClientRect includes difference - var marginTop = parseInt($tip.css('margin-top'), 10) - var marginLeft = parseInt($tip.css('margin-left'), 10) - - // we must check for NaN for ie 8/9 - if (isNaN(marginTop)) marginTop = 0 - if (isNaN(marginLeft)) marginLeft = 0 - - offset.top = offset.top + marginTop - offset.left = offset.left + marginLeft - - // $.fn.offset doesn't round pixel values - // so we use setOffset directly with our own function B-0 - $.offset.setOffset($tip[0], $.extend({ - using: function (props) { - $tip.css({ - top: Math.round(props.top), - left: Math.round(props.left) - }) - } - }, offset), 0) - - $tip.addClass('in') - - // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - } - - var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) - - if (delta.left) offset.left += delta.left - else offset.top += delta.top - - var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight - var arrowPosition = delta.left ? 'left' : 'top' - var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight' - - $tip.offset(offset) - this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition) - } - - Tooltip.prototype.replaceArrow = function (delta, dimension, position) { - this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '') - } - - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - Tooltip.prototype.hide = function () { - var that = this - var $tip = this.tip() - var e = $.Event('hide.bs.' + this.type) - - this.$element.removeAttr('aria-describedby') - - function complete() { - if (that.hoverState != 'in') $tip.detach() - that.$element.trigger('hidden.bs.' + that.type) - } - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(150) : - complete() - - this.hoverState = null - - return this - } - - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } - - Tooltip.prototype.getPosition = function ($element) { - $element = $element || this.$element - var el = $element[0] - var isBody = el.tagName == 'BODY' - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, { - scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(), - width: isBody ? $(window).width() : $element.outerWidth(), - height: isBody ? $(window).height() : $element.outerHeight() - }, isBody ? { top: 0, left: 0 } : $element.offset()) - } - - Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { - return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : - /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } - - } - - Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { - var delta = { top: 0, left: 0 } - if (!this.$viewport) return delta - - var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 - var viewportDimensions = this.getPosition(this.$viewport) - - if (/right|left/.test(placement)) { - var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll - var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight - if (topEdgeOffset < viewportDimensions.top) { // top overflow - delta.top = viewportDimensions.top - topEdgeOffset - } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow - delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset - } - } else { - var leftEdgeOffset = pos.left - viewportPadding - var rightEdgeOffset = pos.left + viewportPadding + actualWidth - if (leftEdgeOffset < viewportDimensions.left) { // left overflow - delta.left = viewportDimensions.left - leftEdgeOffset - } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow - delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset - } - } - - return delta - } - - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - Tooltip.prototype.getUID = function (prefix) { - do prefix += ~~(Math.random() * 1000000) - while (document.getElementById(prefix)) - return prefix - } - - Tooltip.prototype.tip = function () { - return (this.$tip = this.$tip || $(this.options.template)) - } - - Tooltip.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) - } - - Tooltip.prototype.validate = function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - Tooltip.prototype.enable = function () { - this.enabled = true - } - - Tooltip.prototype.disable = function () { - this.enabled = false - } - - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } - - Tooltip.prototype.toggle = function (e) { - var self = this - if (e) { - self = $(e.currentTarget).data('bs.' + this.type) - if (!self) { - self = new this.constructor(e.currentTarget, this.getDelegateOptions()) - $(e.currentTarget).data('bs.' + this.type, self) - } - } - - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } - - Tooltip.prototype.destroy = function () { - clearTimeout(this.timeout) - this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) - } - - - // TOOLTIP PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option - - if (!data && option == 'destroy') return - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tooltip - - $.fn.tooltip = Plugin - $.fn.tooltip.Constructor = Tooltip - - - // TOOLTIP NO CONFLICT - // =================== - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/js/transition.js b/platforms/browser/www/lib/bootstrap/js/transition.js deleted file mode 100644 index 83f85bf4..00000000 --- a/platforms/browser/www/lib/bootstrap/js/transition.js +++ /dev/null @@ -1,59 +0,0 @@ -/* ======================================================================== - * Bootstrap: transition.js v3.2.0 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - WebkitTransition : 'webkitTransitionEnd', - MozTransition : 'transitionend', - OTransition : 'oTransitionEnd otransitionend', - transition : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false - var $el = this - $(this).one('bsTransitionEnd', function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - - if (!$.support.transition) return - - $.event.special.bsTransitionEnd = { - bindType: $.support.transition.end, - delegateType: $.support.transition.end, - handle: function (e) { - if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) - } - } - }) - -}(jQuery); diff --git a/platforms/browser/www/lib/bootstrap/less/alerts.less b/platforms/browser/www/lib/bootstrap/less/alerts.less deleted file mode 100644 index df070b8a..00000000 --- a/platforms/browser/www/lib/bootstrap/less/alerts.less +++ /dev/null @@ -1,68 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: @alert-padding; - margin-bottom: @line-height-computed; - border: 1px solid transparent; - border-radius: @alert-border-radius; - - // Headings for larger alerts - h4 { - margin-top: 0; - // Specified for the h4 to prevent conflicts of changing @headings-color - color: inherit; - } - // Provide class for links that match alerts - .alert-link { - font-weight: @alert-link-font-weight; - } - - // Improve alignment and spacing of inner content - > p, - > ul { - margin-bottom: 0; - } - > p + p { - margin-top: 5px; - } -} - -// Dismissible alerts -// -// Expand the right padding and account for the close button's positioning. - -.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. -.alert-dismissible { - padding-right: (@alert-padding + 20); - - // Adjust close link position - .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; - } -} - -// Alternate styles -// -// Generate contextual modifier classes for colorizing the alert. - -.alert-success { - .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); -} -.alert-info { - .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); -} -.alert-warning { - .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); -} -.alert-danger { - .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); -} diff --git a/platforms/browser/www/lib/bootstrap/less/badges.less b/platforms/browser/www/lib/bootstrap/less/badges.less deleted file mode 100644 index 20624f30..00000000 --- a/platforms/browser/www/lib/bootstrap/less/badges.less +++ /dev/null @@ -1,55 +0,0 @@ -// -// Badges -// -------------------------------------------------- - - -// Base class -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: @font-size-small; - font-weight: @badge-font-weight; - color: @badge-color; - line-height: @badge-line-height; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: @badge-bg; - border-radius: @badge-border-radius; - - // Empty badges collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for badges in buttons - .btn & { - position: relative; - top: -1px; - } - .btn-xs & { - top: 0; - padding: 1px 5px; - } - - // Hover state, but only for links - a& { - &:hover, - &:focus { - color: @badge-link-hover-color; - text-decoration: none; - cursor: pointer; - } - } - - // Account for badges in navs - a.list-group-item.active > &, - .nav-pills > .active > a > & { - color: @badge-active-color; - background-color: @badge-active-bg; - } - .nav-pills > li > a > & { - margin-left: 3px; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/bootstrap.less b/platforms/browser/www/lib/bootstrap/less/bootstrap.less deleted file mode 100644 index 61b77474..00000000 --- a/platforms/browser/www/lib/bootstrap/less/bootstrap.less +++ /dev/null @@ -1,50 +0,0 @@ -// Core variables and mixins -@import "variables.less"; -@import "mixins.less"; - -// Reset and dependencies -@import "normalize.less"; -@import "print.less"; -@import "glyphicons.less"; - -// Core CSS -@import "scaffolding.less"; -@import "type.less"; -@import "code.less"; -@import "grid.less"; -@import "tables.less"; -@import "forms.less"; -@import "buttons.less"; - -// Components -@import "component-animations.less"; -@import "dropdowns.less"; -@import "button-groups.less"; -@import "input-groups.less"; -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; -@import "labels.less"; -@import "badges.less"; -@import "jumbotron.less"; -@import "thumbnails.less"; -@import "alerts.less"; -@import "progress-bars.less"; -@import "media.less"; -@import "list-group.less"; -@import "panels.less"; -@import "responsive-embed.less"; -@import "wells.less"; -@import "close.less"; - -// Components w/ JavaScript -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; -@import "carousel.less"; - -// Utility classes -@import "utilities.less"; -@import "responsive-utilities.less"; diff --git a/platforms/browser/www/lib/bootstrap/less/breadcrumbs.less b/platforms/browser/www/lib/bootstrap/less/breadcrumbs.less deleted file mode 100644 index cb01d503..00000000 --- a/platforms/browser/www/lib/bootstrap/less/breadcrumbs.less +++ /dev/null @@ -1,26 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; - margin-bottom: @line-height-computed; - list-style: none; - background-color: @breadcrumb-bg; - border-radius: @border-radius-base; - - > li { - display: inline-block; - - + li:before { - content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space - padding: 0 5px; - color: @breadcrumb-color; - } - } - - > .active { - color: @breadcrumb-active-color; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/button-groups.less b/platforms/browser/www/lib/bootstrap/less/button-groups.less deleted file mode 100644 index 7021ecd1..00000000 --- a/platforms/browser/www/lib/bootstrap/less/button-groups.less +++ /dev/null @@ -1,240 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - -// Make the div behave like a button -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; // match .btn alignment given font-size hack above - > .btn { - position: relative; - float: left; - // Bring the "active" button to the front - &:hover, - &:focus, - &:active, - &.active { - z-index: 2; - } - &:focus { - // Remove focus outline when dropdown JS adds it after closing the menu - outline: 0; - } - } -} - -// Prevent double borders when buttons are next to each other -.btn-group { - .btn + .btn, - .btn + .btn-group, - .btn-group + .btn, - .btn-group + .btn-group { - margin-left: -1px; - } -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - margin-left: -5px; // Offset the first child's margin - &:extend(.clearfix all); - - .btn-group, - .input-group { - float: left; - } - > .btn, - > .btn-group, - > .input-group { - margin-left: 5px; - } -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - &:not(:last-child):not(.dropdown-toggle) { - .border-right-radius(0); - } -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - .border-left-radius(0); -} - -// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child { - > .btn:last-child, - > .dropdown-toggle { - .border-right-radius(0); - } -} -.btn-group > .btn-group:last-child > .btn:first-child { - .border-left-radius(0); -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - -// Sizing -// -// Remix the default button sizing classes into new ones for easier manipulation. - -.btn-group-xs > .btn { &:extend(.btn-xs); } -.btn-group-sm > .btn { &:extend(.btn-sm); } -.btn-group-lg > .btn { &:extend(.btn-lg); } - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} - -// The clickable button for toggling the menu -// Remove the gradient and set the same inset shadow as the :active state -.btn-group.open .dropdown-toggle { - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - - // Show no shadow for `.btn-link` since it has no other button styles. - &.btn-link { - .box-shadow(none); - } -} - - -// Reposition the caret -.btn .caret { - margin-left: 0; -} -// Carets in other button sizes -.btn-lg .caret { - border-width: @caret-width-large @caret-width-large 0; - border-bottom-width: 0; -} -// Upside down carets for .dropup -.dropup .btn-lg .caret { - border-width: 0 @caret-width-large @caret-width-large; -} - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - > .btn, - > .btn-group, - > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; - } - - // Clear floats so dropdown menus can be properly placed - > .btn-group { - &:extend(.clearfix all); - > .btn { - float: none; - } - } - - > .btn + .btn, - > .btn + .btn-group, - > .btn-group + .btn, - > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; - } -} - -.btn-group-vertical > .btn { - &:not(:first-child):not(:last-child) { - border-radius: 0; - } - &:first-child:not(:last-child) { - border-top-right-radius: @border-radius-base; - .border-bottom-radius(0); - } - &:last-child:not(:first-child) { - border-bottom-left-radius: @border-radius-base; - .border-top-radius(0); - } -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) { - > .btn:last-child, - > .dropdown-toggle { - .border-bottom-radius(0); - } -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - .border-top-radius(0); -} - - - -// Justified button groups -// ---------------------- - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; - > .btn, - > .btn-group { - float: none; - display: table-cell; - width: 1%; - } - > .btn-group .btn { - width: 100%; - } - - > .btn-group .dropdown-menu { - left: auto; - } -} - - -// Checkbox and radio options -// -// In order to support the browser's form validation feedback, powered by the -// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot -// use `display: none;` or `visibility: hidden;` as that also hides the popover. -// This way, we ensure a DOM element is visible to position the popover from. -// -// See https://github.com/twbs/bootstrap/pull/12794 for more. - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - position: absolute; - z-index: -1; - .opacity(0); -} diff --git a/platforms/browser/www/lib/bootstrap/less/buttons.less b/platforms/browser/www/lib/bootstrap/less/buttons.less deleted file mode 100644 index 492bdc65..00000000 --- a/platforms/browser/www/lib/bootstrap/less/buttons.less +++ /dev/null @@ -1,157 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -.btn { - display: inline-block; - margin-bottom: 0; // For input.btn - font-weight: @btn-font-weight; - text-align: center; - vertical-align: middle; - cursor: pointer; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - white-space: nowrap; - .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); - .user-select(none); - - &, - &:active, - &.active { - &:focus { - .tab-focus(); - } - } - - &:hover, - &:focus { - color: @btn-default-color; - text-decoration: none; - } - - &:active, - &.active { - outline: 0; - background-image: none; - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - cursor: not-allowed; - pointer-events: none; // Future-proof disabling of clicks - .opacity(.65); - .box-shadow(none); - } -} - - -// Alternate buttons -// -------------------------------------------------- - -.btn-default { - .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); -} -.btn-primary { - .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); -} -// Success appears as green -.btn-success { - .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); -} -// Info appears as blue-green -.btn-info { - .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); -} -// Warning appears as orange -.btn-warning { - .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); -} -// Danger and error appear as red -.btn-danger { - .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); -} - - -// Link buttons -// ------------------------- - -// Make a button look and behave like a link -.btn-link { - color: @link-color; - font-weight: normal; - cursor: pointer; - border-radius: 0; - - &, - &:active, - &[disabled], - fieldset[disabled] & { - background-color: transparent; - .box-shadow(none); - } - &, - &:hover, - &:focus, - &:active { - border-color: transparent; - } - &:hover, - &:focus { - color: @link-hover-color; - text-decoration: underline; - background-color: transparent; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @btn-link-disabled-color; - text-decoration: none; - } - } -} - - -// Button Sizes -// -------------------------------------------------- - -.btn-lg { - // line-height: ensure even-numbered height of button next to large input - .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); -} -.btn-sm { - // line-height: ensure proper height of button next to small input - .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} -.btn-xs { - .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} - - -// Block button -// -------------------------------------------------- - -.btn-block { - display: block; - width: 100%; -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/carousel.less b/platforms/browser/www/lib/bootstrap/less/carousel.less deleted file mode 100644 index 1644ddf7..00000000 --- a/platforms/browser/www/lib/bootstrap/less/carousel.less +++ /dev/null @@ -1,243 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -// Wrapper for the slide container and indicators -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; - - > .item { - display: none; - position: relative; - .transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - &:extend(.img-responsive); - line-height: 1; - } - } - - > .active, - > .next, - > .prev { - display: block; - } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: @carousel-control-width; - .opacity(@carousel-control-opacity); - font-size: @carousel-control-font-size; - color: @carousel-control-color; - text-align: center; - text-shadow: @carousel-text-shadow; - // We can't have this transition here because WebKit cancels the carousel - // animation if you trip this while in the middle of another animation. - - // Set gradients for backgrounds - &.left { - #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); - } - &.right { - left: auto; - right: 0; - #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); - } - - // Hover/focus state - &:hover, - &:focus { - outline: 0; - color: @carousel-control-color; - text-decoration: none; - .opacity(.9); - } - - // Toggles - .icon-prev, - .icon-next, - .glyphicon-chevron-left, - .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - } - .icon-prev, - .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; - } - .icon-next, - .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; - } - .icon-prev, - .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - font-family: serif; - } - - - .icon-prev { - &:before { - content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) - } - } - .icon-next { - &:before { - content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) - } - } -} - -// Optional indicator pips -// -// Add an unordered list with the following class and add a list item for each -// slide your carousel holds. - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; - - li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid @carousel-indicator-border-color; - border-radius: 10px; - cursor: pointer; - - // IE8-9 hack for event handling - // - // Internet Explorer 8-9 does not support clicks on elements without a set - // `background-color`. We cannot use `filter` since that's not viewed as a - // background color by the browser. Thus, a hack is needed. - // - // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we - // set alpha transparency for the best results possible. - background-color: #000 \9; // IE8 - background-color: rgba(0,0,0,0); // IE9 - } - .active { - margin: 0; - width: 12px; - height: 12px; - background-color: @carousel-indicator-active-bg; - } -} - -// Optional captions -// ----------------------------- -// Hidden by default for smaller viewports -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: @carousel-caption-color; - text-align: center; - text-shadow: @carousel-text-shadow; - & .btn { - text-shadow: none; // No shadow for button elements in carousel-caption - } -} - - -// Scale up controls for tablets and up -@media screen and (min-width: @screen-sm-min) { - - // Scale up the controls a smidge - .carousel-control { - .glyphicon-chevron-left, - .glyphicon-chevron-right, - .icon-prev, - .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .glyphicon-chevron-left, - .icon-prev { - margin-left: -15px; - } - .glyphicon-chevron-right, - .icon-next { - margin-right: -15px; - } - } - - // Show and left align the captions - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - - // Move up the indicators - .carousel-indicators { - bottom: 20px; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/close.less b/platforms/browser/www/lib/bootstrap/less/close.less deleted file mode 100644 index 9b4e74f2..00000000 --- a/platforms/browser/www/lib/bootstrap/less/close.less +++ /dev/null @@ -1,33 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: (@font-size-base * 1.5); - font-weight: @close-font-weight; - line-height: 1; - color: @close-color; - text-shadow: @close-text-shadow; - .opacity(.2); - - &:hover, - &:focus { - color: @close-color; - text-decoration: none; - cursor: pointer; - .opacity(.5); - } - - // Additional properties for button version - // iOS requires the button element instead of an anchor tag. - // If you want the anchor version, it requires `href="#"`. - button& { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/code.less b/platforms/browser/www/lib/bootstrap/less/code.less deleted file mode 100644 index baa13df6..00000000 --- a/platforms/browser/www/lib/bootstrap/less/code.less +++ /dev/null @@ -1,68 +0,0 @@ -// -// Code (inline and block) -// -------------------------------------------------- - - -// Inline and block code styles -code, -kbd, -pre, -samp { - font-family: @font-family-monospace; -} - -// Inline code -code { - padding: 2px 4px; - font-size: 90%; - color: @code-color; - background-color: @code-bg; - border-radius: @border-radius-base; -} - -// User input typically entered via keyboard -kbd { - padding: 2px 4px; - font-size: 90%; - color: @kbd-color; - background-color: @kbd-bg; - border-radius: @border-radius-small; - box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); - - kbd { - padding: 0; - font-size: 100%; - box-shadow: none; - } -} - -// Blocks of code -pre { - display: block; - padding: ((@line-height-computed - 1) / 2); - margin: 0 0 (@line-height-computed / 2); - font-size: (@font-size-base - 1); // 14px to 13px - line-height: @line-height-base; - word-break: break-all; - word-wrap: break-word; - color: @pre-color; - background-color: @pre-bg; - border: 1px solid @pre-border-color; - border-radius: @border-radius-base; - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: @pre-scrollable-max-height; - overflow-y: scroll; -} diff --git a/platforms/browser/www/lib/bootstrap/less/component-animations.less b/platforms/browser/www/lib/bootstrap/less/component-animations.less deleted file mode 100644 index 9400a0d3..00000000 --- a/platforms/browser/www/lib/bootstrap/less/component-animations.less +++ /dev/null @@ -1,31 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - -// Heads up! -// -// We don't use the `.opacity()` mixin here since it causes a bug with text -// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. - -.fade { - opacity: 0; - .transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - display: none; - - &.in { display: block; } - tr&.in { display: table-row; } - tbody&.in { display: table-row-group; } -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - .transition(height .35s ease); -} diff --git a/platforms/browser/www/lib/bootstrap/less/dropdowns.less b/platforms/browser/www/lib/bootstrap/less/dropdowns.less deleted file mode 100644 index 3eb7fc05..00000000 --- a/platforms/browser/www/lib/bootstrap/less/dropdowns.less +++ /dev/null @@ -1,215 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Dropdown arrow/caret -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: @caret-width-base solid; - border-right: @caret-width-base solid transparent; - border-left: @caret-width-base solid transparent; -} - -// The dropdown wrapper (div) -.dropdown { - position: relative; -} - -// Prevent the focus on the dropdown toggle when closing dropdowns -.dropdown-toggle:focus { - outline: 0; -} - -// The dropdown menu (ul) -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: @zindex-dropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - font-size: @font-size-base; - text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) - background-color: @dropdown-bg; - border: 1px solid @dropdown-fallback-border; // IE8 fallback - border: 1px solid @dropdown-border; - border-radius: @border-radius-base; - .box-shadow(0 6px 12px rgba(0,0,0,.175)); - background-clip: padding-box; - - // Aligns the dropdown menu to right - // - // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - .nav-divider(@dropdown-divider-bg); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: @line-height-base; - color: @dropdown-link-color; - white-space: nowrap; // prevent links from randomly breaking onto new lines - } -} - -// Hover/Focus state -.dropdown-menu > li > a { - &:hover, - &:focus { - text-decoration: none; - color: @dropdown-link-hover-color; - background-color: @dropdown-link-hover-bg; - } -} - -// Active state -.dropdown-menu > .active > a { - &, - &:hover, - &:focus { - color: @dropdown-link-active-color; - text-decoration: none; - outline: 0; - background-color: @dropdown-link-active-bg; - } -} - -// Disabled state -// -// Gray out text and ensure the hover/focus state remains gray - -.dropdown-menu > .disabled > a { - &, - &:hover, - &:focus { - color: @dropdown-link-disabled-color; - } -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a { - &:hover, - &:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: not-allowed; - } -} - -// Open state for the dropdown -.open { - // Show the menu - > .dropdown-menu { - display: block; - } - - // Remove the outline when :focus is triggered - > a { - outline: 0; - } -} - -// Menu positioning -// -// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown -// menu with the parent. -.dropdown-menu-right { - left: auto; // Reset the default from `.dropdown-menu` - right: 0; -} -// With v3, we enabled auto-flipping if you have a dropdown within a right -// aligned nav component. To enable the undoing of that, we provide an override -// to restore the default dropdown menu alignment. -// -// This is only for left-aligning a dropdown menu within a `.navbar-right` or -// `.pull-right` nav component. -.dropdown-menu-left { - left: 0; - right: auto; -} - -// Dropdown section headers -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: @font-size-small; - line-height: @line-height-base; - color: @dropdown-header-color; - white-space: nowrap; // as with > li > a -} - -// Backdrop to catch body clicks on mobile, etc. -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: (@zindex-dropdown - 10); -} - -// Right aligned dropdowns -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? - -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: @caret-width-base solid; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - - -// Component alignment -// -// Reiterate per navbar.less and the modified component alignment there. - -@media (min-width: @grid-float-breakpoint) { - .navbar-right { - .dropdown-menu { - .dropdown-menu-right(); - } - // Necessary for overrides of the default right aligned menu. - // Will remove come v4 in all likelihood. - .dropdown-menu-left { - .dropdown-menu-left(); - } - } -} - diff --git a/platforms/browser/www/lib/bootstrap/less/forms.less b/platforms/browser/www/lib/bootstrap/less/forms.less deleted file mode 100644 index 2c5e9bfa..00000000 --- a/platforms/browser/www/lib/bootstrap/less/forms.less +++ /dev/null @@ -1,540 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// Normalize non-controls -// -// Restyle and baseline non-control form elements. - -fieldset { - padding: 0; - margin: 0; - border: 0; - // Chrome and Firefox set a `min-width: min-content;` on fieldsets, - // so we reset that to ensure it behaves more like a standard block element. - // See https://github.com/twbs/bootstrap/issues/12359. - min-width: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: @line-height-computed; - font-size: (@font-size-base * 1.5); - line-height: inherit; - color: @legend-color; - border: 0; - border-bottom: 1px solid @legend-border-color; -} - -label { - display: inline-block; - max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) - margin-bottom: 5px; - font-weight: bold; -} - - -// Normalize form controls -// -// While most of our form styles require extra classes, some basic normalization -// is required to ensure optimum display with or without those classes to better -// address browser inconsistencies. - -// Override content-box in Normalize (* isn't specific enough) -input[type="search"] { - .box-sizing(border-box); -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; // IE8-9 - line-height: normal; -} - -// Set the height of file controls to match text inputs -input[type="file"] { - display: block; -} - -// Make range inputs behave like textual form controls -input[type="range"] { - display: block; - width: 100%; -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for file, radio, and checkbox -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - .tab-focus(); -} - -// Adjust output element -output { - display: block; - padding-top: (@padding-base-vertical + 1); - font-size: @font-size-base; - line-height: @line-height-base; - color: @input-color; -} - - -// Common form controls -// -// Shared size and type resets for form controls. Apply `.form-control` to any -// of the following form controls: -// -// select -// textarea -// input[type="text"] -// input[type="password"] -// input[type="datetime"] -// input[type="datetime-local"] -// input[type="date"] -// input[type="month"] -// input[type="time"] -// input[type="week"] -// input[type="number"] -// input[type="email"] -// input[type="url"] -// input[type="search"] -// input[type="tel"] -// input[type="color"] - -.form-control { - display: block; - width: 100%; - height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - padding: @padding-base-vertical @padding-base-horizontal; - font-size: @font-size-base; - line-height: @line-height-base; - color: @input-color; - background-color: @input-bg; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid @input-border; - border-radius: @input-border-radius; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); - - // Customize the `:focus` state to imitate native WebKit styles. - .form-control-focus(); - - // Placeholder - .placeholder(); - - // Disabled and read-only inputs - // - // HTML5 says that controls under a fieldset > legend:first-child won't be - // disabled if the fieldset is disabled. Due to implementation difficulty, we - // don't honor that edge case; we style them as disabled anyway. - &[disabled], - &[readonly], - fieldset[disabled] & { - cursor: not-allowed; - background-color: @input-bg-disabled; - opacity: 1; // iOS fix for unreadable disabled content - } - - // Reset height for `textarea`s - textarea& { - height: auto; - } -} - - -// Search inputs in iOS -// -// This overrides the extra rounded corners on search inputs in iOS so that our -// `.form-control` class can properly style them. Note that this cannot simply -// be added to `.form-control` as it's not specific enough. For details, see -// https://github.com/twbs/bootstrap/issues/11586. - -input[type="search"] { - -webkit-appearance: none; -} - - -// Special styles for iOS temporal inputs -// -// In Mobile Safari, setting `display: block` on temporal inputs causes the -// text within the input to become vertically misaligned. -// As a workaround, we set a pixel line-height that matches the -// given height of the input. Since this fucks up everything else, we have to -// appropriately reset it for Internet Explorer and the size variations. - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - line-height: @input-height-base; - // IE8+ misaligns the text within date inputs, so we reset - line-height: @line-height-base ~"\0"; - - &.input-sm { - line-height: @input-height-small; - } - &.input-lg { - line-height: @input-height-large; - } -} - - -// Form groups -// -// Designed to help with the organization and spacing of vertical forms. For -// horizontal forms, use the predefined grid classes. - -.form-group { - margin-bottom: 15px; -} - - -// Checkboxes and radios -// -// Indent the labels to position radios/checkboxes as hanging controls. - -.radio, -.checkbox { - position: relative; - display: block; - min-height: @line-height-computed; // clear the floating input if there is no label text - margin-top: 10px; - margin-bottom: 10px; - - label { - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; - } -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing -} - -// Radios and checkboxes on same line -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; // space out consecutive inline controls -} - -// Apply same disabled cursor tweak as for inputs -// Some special care is needed because <label>s don't inherit their parent's `cursor`. -// -// Note: Neither radios nor checkboxes can be readonly. -input[type="radio"], -input[type="checkbox"] { - &[disabled], - &.disabled, - fieldset[disabled] & { - cursor: not-allowed; - } -} -// These classes are used directly on <label>s -.radio-inline, -.checkbox-inline { - &.disabled, - fieldset[disabled] & { - cursor: not-allowed; - } -} -// These classes are used on elements with <label> descendants -.radio, -.checkbox { - &.disabled, - fieldset[disabled] & { - label { - cursor: not-allowed; - } - } -} - - -// Static form control text -// -// Apply class to a `p` element to make any string of text align with labels in -// a horizontal form layout. - -.form-control-static { - // Size it appropriately next to real form controls - padding-top: (@padding-base-vertical + 1); - padding-bottom: (@padding-base-vertical + 1); - // Remove default margin from `p` - margin-bottom: 0; - - &.input-lg, - &.input-sm { - padding-left: 0; - padding-right: 0; - } -} - - -// Form control sizing -// -// Build on `.form-control` with modifier classes to decrease or increase the -// height and font-size of form controls. - -.input-sm { - .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} - -.input-lg { - .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); -} - - -// Form control feedback states -// -// Apply contextual and semantic states to individual form controls. - -.has-feedback { - // Enable absolute positioning - position: relative; - - // Ensure icons don't overlap text - .form-control { - padding-right: (@input-height-base * 1.25); - } -} -// Feedback icon (requires .glyphicon classes) -.form-control-feedback { - position: absolute; - top: (@line-height-computed + 5); // Height of the `label` and its margin - right: 0; - z-index: 2; // Ensure icon is above input groups - display: block; - width: @input-height-base; - height: @input-height-base; - line-height: @input-height-base; - text-align: center; -} -.input-lg + .form-control-feedback { - width: @input-height-large; - height: @input-height-large; - line-height: @input-height-large; -} -.input-sm + .form-control-feedback { - width: @input-height-small; - height: @input-height-small; - line-height: @input-height-small; -} - -// Feedback states -.has-success { - .form-control-validation(@state-success-text; @state-success-text; @state-success-bg); -} -.has-warning { - .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg); -} -.has-error { - .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg); -} - - -// Reposition feedback icon if label is hidden with "screenreader only" state -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} - - -// Help text -// -// Apply to any element you wish to create light text for placement immediately -// below a form control. Use for general help, formatting, or instructional text. - -.help-block { - display: block; // account for any element using help-block - margin-top: 5px; - margin-bottom: 10px; - color: lighten(@text-color, 25%); // lighten the text some for contrast -} - - - -// Inline forms -// -// Make forms appear inline(-block) by adding the `.form-inline` class. Inline -// forms begin stacked on extra small (mobile) devices and then go inline when -// viewports reach <768px. -// -// Requires wrapping inputs and labels with `.form-group` for proper display of -// default HTML form controls and our custom form controls (e.g., input groups). -// -// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. - -.form-inline { - - // Kick in the inline - @media (min-width: @screen-sm-min) { - // Inline-block all the things for "inline" - .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - - // In navbar-form, allow folks to *not* use `.form-group` - .form-control { - display: inline-block; - width: auto; // Prevent labels from stacking above inputs in `.form-group` - vertical-align: middle; - } - - .input-group { - display: inline-table; - vertical-align: middle; - - .input-group-addon, - .input-group-btn, - .form-control { - width: auto; - } - } - - // Input groups need that 100% width though - .input-group > .form-control { - width: 100%; - } - - .control-label { - margin-bottom: 0; - vertical-align: middle; - } - - // Remove default margin on radios/checkboxes that were used for stacking, and - // then undo the floating of radios and checkboxes to match (which also avoids - // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). - .radio, - .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - - label { - padding-left: 0; - } - } - .radio input[type="radio"], - .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - } - } -} - - -// Horizontal forms -// -// Horizontal forms are built on grid classes and allow you to create forms with -// labels on the left and inputs on the right. - -.form-horizontal { - - // Consistent vertical alignment of radios and checkboxes - // - // Labels also get some reset styles, but that is scoped to a media query below. - .radio, - .checkbox, - .radio-inline, - .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: (@padding-base-vertical + 1); // Default padding plus a border - } - // Account for padding we're adding to ensure the alignment and of help text - // and other content below items - .radio, - .checkbox { - min-height: (@line-height-computed + (@padding-base-vertical + 1)); - } - - // Make form groups behave like rows - .form-group { - .make-row(); - } - - // Reset spacing and right align labels, but scope to media queries so that - // labels on narrow viewports stack the same as a default form example. - @media (min-width: @screen-sm-min) { - .control-label { - text-align: right; - margin-bottom: 0; - padding-top: (@padding-base-vertical + 1); // Default padding plus a border - } - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - right: (@grid-gutter-width / 2); - } - - // Form group sizes - // - // Quick utility class for applying `.input-lg` and `.input-sm` styles to the - // inputs and labels within a `.form-group`. - .form-group-lg { - @media (min-width: @screen-sm-min) { - .control-label { - padding-top: ((@padding-large-vertical * @line-height-large) + 1); - } - } - .form-control { - &:extend(.input-lg); - } - } - .form-group-sm { - @media (min-width: @screen-sm-min) { - .control-label { - padding-top: (@padding-small-vertical + 1); - } - } - .form-control { - &:extend(.input-sm); - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/glyphicons.less b/platforms/browser/www/lib/bootstrap/less/glyphicons.less deleted file mode 100644 index d3485dcb..00000000 --- a/platforms/browser/www/lib/bootstrap/less/glyphicons.less +++ /dev/null @@ -1,233 +0,0 @@ -// -// Glyphicons for Bootstrap -// -// Since icons are fonts, they can be placed anywhere text is placed and are -// thus automatically sized to match the surrounding child. To use, create an -// inline element with the appropriate classes, like so: -// -// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a> - -// Import the fonts -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('@{icon-font-path}@{icon-font-name}.eot'); - src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'), - url('@{icon-font-path}@{icon-font-name}.woff') format('woff'), - url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'), - url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg'); -} - -// Catchall baseclass -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -// Individual icons -.glyphicon-asterisk { &:before { content: "\2a"; } } -.glyphicon-plus { &:before { content: "\2b"; } } -.glyphicon-euro { &:before { content: "\20ac"; } } -.glyphicon-minus { &:before { content: "\2212"; } } -.glyphicon-cloud { &:before { content: "\2601"; } } -.glyphicon-envelope { &:before { content: "\2709"; } } -.glyphicon-pencil { &:before { content: "\270f"; } } -.glyphicon-glass { &:before { content: "\e001"; } } -.glyphicon-music { &:before { content: "\e002"; } } -.glyphicon-search { &:before { content: "\e003"; } } -.glyphicon-heart { &:before { content: "\e005"; } } -.glyphicon-star { &:before { content: "\e006"; } } -.glyphicon-star-empty { &:before { content: "\e007"; } } -.glyphicon-user { &:before { content: "\e008"; } } -.glyphicon-film { &:before { content: "\e009"; } } -.glyphicon-th-large { &:before { content: "\e010"; } } -.glyphicon-th { &:before { content: "\e011"; } } -.glyphicon-th-list { &:before { content: "\e012"; } } -.glyphicon-ok { &:before { content: "\e013"; } } -.glyphicon-remove { &:before { content: "\e014"; } } -.glyphicon-zoom-in { &:before { content: "\e015"; } } -.glyphicon-zoom-out { &:before { content: "\e016"; } } -.glyphicon-off { &:before { content: "\e017"; } } -.glyphicon-signal { &:before { content: "\e018"; } } -.glyphicon-cog { &:before { content: "\e019"; } } -.glyphicon-trash { &:before { content: "\e020"; } } -.glyphicon-home { &:before { content: "\e021"; } } -.glyphicon-file { &:before { content: "\e022"; } } -.glyphicon-time { &:before { content: "\e023"; } } -.glyphicon-road { &:before { content: "\e024"; } } -.glyphicon-download-alt { &:before { content: "\e025"; } } -.glyphicon-download { &:before { content: "\e026"; } } -.glyphicon-upload { &:before { content: "\e027"; } } -.glyphicon-inbox { &:before { content: "\e028"; } } -.glyphicon-play-circle { &:before { content: "\e029"; } } -.glyphicon-repeat { &:before { content: "\e030"; } } -.glyphicon-refresh { &:before { content: "\e031"; } } -.glyphicon-list-alt { &:before { content: "\e032"; } } -.glyphicon-lock { &:before { content: "\e033"; } } -.glyphicon-flag { &:before { content: "\e034"; } } -.glyphicon-headphones { &:before { content: "\e035"; } } -.glyphicon-volume-off { &:before { content: "\e036"; } } -.glyphicon-volume-down { &:before { content: "\e037"; } } -.glyphicon-volume-up { &:before { content: "\e038"; } } -.glyphicon-qrcode { &:before { content: "\e039"; } } -.glyphicon-barcode { &:before { content: "\e040"; } } -.glyphicon-tag { &:before { content: "\e041"; } } -.glyphicon-tags { &:before { content: "\e042"; } } -.glyphicon-book { &:before { content: "\e043"; } } -.glyphicon-bookmark { &:before { content: "\e044"; } } -.glyphicon-print { &:before { content: "\e045"; } } -.glyphicon-camera { &:before { content: "\e046"; } } -.glyphicon-font { &:before { content: "\e047"; } } -.glyphicon-bold { &:before { content: "\e048"; } } -.glyphicon-italic { &:before { content: "\e049"; } } -.glyphicon-text-height { &:before { content: "\e050"; } } -.glyphicon-text-width { &:before { content: "\e051"; } } -.glyphicon-align-left { &:before { content: "\e052"; } } -.glyphicon-align-center { &:before { content: "\e053"; } } -.glyphicon-align-right { &:before { content: "\e054"; } } -.glyphicon-align-justify { &:before { content: "\e055"; } } -.glyphicon-list { &:before { content: "\e056"; } } -.glyphicon-indent-left { &:before { content: "\e057"; } } -.glyphicon-indent-right { &:before { content: "\e058"; } } -.glyphicon-facetime-video { &:before { content: "\e059"; } } -.glyphicon-picture { &:before { content: "\e060"; } } -.glyphicon-map-marker { &:before { content: "\e062"; } } -.glyphicon-adjust { &:before { content: "\e063"; } } -.glyphicon-tint { &:before { content: "\e064"; } } -.glyphicon-edit { &:before { content: "\e065"; } } -.glyphicon-share { &:before { content: "\e066"; } } -.glyphicon-check { &:before { content: "\e067"; } } -.glyphicon-move { &:before { content: "\e068"; } } -.glyphicon-step-backward { &:before { content: "\e069"; } } -.glyphicon-fast-backward { &:before { content: "\e070"; } } -.glyphicon-backward { &:before { content: "\e071"; } } -.glyphicon-play { &:before { content: "\e072"; } } -.glyphicon-pause { &:before { content: "\e073"; } } -.glyphicon-stop { &:before { content: "\e074"; } } -.glyphicon-forward { &:before { content: "\e075"; } } -.glyphicon-fast-forward { &:before { content: "\e076"; } } -.glyphicon-step-forward { &:before { content: "\e077"; } } -.glyphicon-eject { &:before { content: "\e078"; } } -.glyphicon-chevron-left { &:before { content: "\e079"; } } -.glyphicon-chevron-right { &:before { content: "\e080"; } } -.glyphicon-plus-sign { &:before { content: "\e081"; } } -.glyphicon-minus-sign { &:before { content: "\e082"; } } -.glyphicon-remove-sign { &:before { content: "\e083"; } } -.glyphicon-ok-sign { &:before { content: "\e084"; } } -.glyphicon-question-sign { &:before { content: "\e085"; } } -.glyphicon-info-sign { &:before { content: "\e086"; } } -.glyphicon-screenshot { &:before { content: "\e087"; } } -.glyphicon-remove-circle { &:before { content: "\e088"; } } -.glyphicon-ok-circle { &:before { content: "\e089"; } } -.glyphicon-ban-circle { &:before { content: "\e090"; } } -.glyphicon-arrow-left { &:before { content: "\e091"; } } -.glyphicon-arrow-right { &:before { content: "\e092"; } } -.glyphicon-arrow-up { &:before { content: "\e093"; } } -.glyphicon-arrow-down { &:before { content: "\e094"; } } -.glyphicon-share-alt { &:before { content: "\e095"; } } -.glyphicon-resize-full { &:before { content: "\e096"; } } -.glyphicon-resize-small { &:before { content: "\e097"; } } -.glyphicon-exclamation-sign { &:before { content: "\e101"; } } -.glyphicon-gift { &:before { content: "\e102"; } } -.glyphicon-leaf { &:before { content: "\e103"; } } -.glyphicon-fire { &:before { content: "\e104"; } } -.glyphicon-eye-open { &:before { content: "\e105"; } } -.glyphicon-eye-close { &:before { content: "\e106"; } } -.glyphicon-warning-sign { &:before { content: "\e107"; } } -.glyphicon-plane { &:before { content: "\e108"; } } -.glyphicon-calendar { &:before { content: "\e109"; } } -.glyphicon-random { &:before { content: "\e110"; } } -.glyphicon-comment { &:before { content: "\e111"; } } -.glyphicon-magnet { &:before { content: "\e112"; } } -.glyphicon-chevron-up { &:before { content: "\e113"; } } -.glyphicon-chevron-down { &:before { content: "\e114"; } } -.glyphicon-retweet { &:before { content: "\e115"; } } -.glyphicon-shopping-cart { &:before { content: "\e116"; } } -.glyphicon-folder-close { &:before { content: "\e117"; } } -.glyphicon-folder-open { &:before { content: "\e118"; } } -.glyphicon-resize-vertical { &:before { content: "\e119"; } } -.glyphicon-resize-horizontal { &:before { content: "\e120"; } } -.glyphicon-hdd { &:before { content: "\e121"; } } -.glyphicon-bullhorn { &:before { content: "\e122"; } } -.glyphicon-bell { &:before { content: "\e123"; } } -.glyphicon-certificate { &:before { content: "\e124"; } } -.glyphicon-thumbs-up { &:before { content: "\e125"; } } -.glyphicon-thumbs-down { &:before { content: "\e126"; } } -.glyphicon-hand-right { &:before { content: "\e127"; } } -.glyphicon-hand-left { &:before { content: "\e128"; } } -.glyphicon-hand-up { &:before { content: "\e129"; } } -.glyphicon-hand-down { &:before { content: "\e130"; } } -.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } -.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } -.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } -.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } -.glyphicon-globe { &:before { content: "\e135"; } } -.glyphicon-wrench { &:before { content: "\e136"; } } -.glyphicon-tasks { &:before { content: "\e137"; } } -.glyphicon-filter { &:before { content: "\e138"; } } -.glyphicon-briefcase { &:before { content: "\e139"; } } -.glyphicon-fullscreen { &:before { content: "\e140"; } } -.glyphicon-dashboard { &:before { content: "\e141"; } } -.glyphicon-paperclip { &:before { content: "\e142"; } } -.glyphicon-heart-empty { &:before { content: "\e143"; } } -.glyphicon-link { &:before { content: "\e144"; } } -.glyphicon-phone { &:before { content: "\e145"; } } -.glyphicon-pushpin { &:before { content: "\e146"; } } -.glyphicon-usd { &:before { content: "\e148"; } } -.glyphicon-gbp { &:before { content: "\e149"; } } -.glyphicon-sort { &:before { content: "\e150"; } } -.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } -.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } -.glyphicon-sort-by-order { &:before { content: "\e153"; } } -.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } -.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } -.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } -.glyphicon-unchecked { &:before { content: "\e157"; } } -.glyphicon-expand { &:before { content: "\e158"; } } -.glyphicon-collapse-down { &:before { content: "\e159"; } } -.glyphicon-collapse-up { &:before { content: "\e160"; } } -.glyphicon-log-in { &:before { content: "\e161"; } } -.glyphicon-flash { &:before { content: "\e162"; } } -.glyphicon-log-out { &:before { content: "\e163"; } } -.glyphicon-new-window { &:before { content: "\e164"; } } -.glyphicon-record { &:before { content: "\e165"; } } -.glyphicon-save { &:before { content: "\e166"; } } -.glyphicon-open { &:before { content: "\e167"; } } -.glyphicon-saved { &:before { content: "\e168"; } } -.glyphicon-import { &:before { content: "\e169"; } } -.glyphicon-export { &:before { content: "\e170"; } } -.glyphicon-send { &:before { content: "\e171"; } } -.glyphicon-floppy-disk { &:before { content: "\e172"; } } -.glyphicon-floppy-saved { &:before { content: "\e173"; } } -.glyphicon-floppy-remove { &:before { content: "\e174"; } } -.glyphicon-floppy-save { &:before { content: "\e175"; } } -.glyphicon-floppy-open { &:before { content: "\e176"; } } -.glyphicon-credit-card { &:before { content: "\e177"; } } -.glyphicon-transfer { &:before { content: "\e178"; } } -.glyphicon-cutlery { &:before { content: "\e179"; } } -.glyphicon-header { &:before { content: "\e180"; } } -.glyphicon-compressed { &:before { content: "\e181"; } } -.glyphicon-earphone { &:before { content: "\e182"; } } -.glyphicon-phone-alt { &:before { content: "\e183"; } } -.glyphicon-tower { &:before { content: "\e184"; } } -.glyphicon-stats { &:before { content: "\e185"; } } -.glyphicon-sd-video { &:before { content: "\e186"; } } -.glyphicon-hd-video { &:before { content: "\e187"; } } -.glyphicon-subtitles { &:before { content: "\e188"; } } -.glyphicon-sound-stereo { &:before { content: "\e189"; } } -.glyphicon-sound-dolby { &:before { content: "\e190"; } } -.glyphicon-sound-5-1 { &:before { content: "\e191"; } } -.glyphicon-sound-6-1 { &:before { content: "\e192"; } } -.glyphicon-sound-7-1 { &:before { content: "\e193"; } } -.glyphicon-copyright-mark { &:before { content: "\e194"; } } -.glyphicon-registration-mark { &:before { content: "\e195"; } } -.glyphicon-cloud-download { &:before { content: "\e197"; } } -.glyphicon-cloud-upload { &:before { content: "\e198"; } } -.glyphicon-tree-conifer { &:before { content: "\e199"; } } -.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/platforms/browser/www/lib/bootstrap/less/grid.less b/platforms/browser/www/lib/bootstrap/less/grid.less deleted file mode 100644 index e100655b..00000000 --- a/platforms/browser/www/lib/bootstrap/less/grid.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Container widths -// -// Set the container width, and override it for fixed navbars in media queries. - -.container { - .container-fixed(); - - @media (min-width: @screen-sm-min) { - width: @container-sm; - } - @media (min-width: @screen-md-min) { - width: @container-md; - } - @media (min-width: @screen-lg-min) { - width: @container-lg; - } -} - - -// Fluid container -// -// Utilizes the mixin meant for fixed width containers, but without any defined -// width for fluid, full width layouts. - -.container-fluid { - .container-fixed(); -} - - -// Row -// -// Rows contain and clear the floats of your columns. - -.row { - .make-row(); -} - - -// Columns -// -// Common styles for small and large grid columns - -.make-grid-columns(); - - -// Extra small grid -// -// Columns, offsets, pushes, and pulls for extra small devices like -// smartphones. - -.make-grid(xs); - - -// Small grid -// -// Columns, offsets, pushes, and pulls for the small device range, from phones -// to tablets. - -@media (min-width: @screen-sm-min) { - .make-grid(sm); -} - - -// Medium grid -// -// Columns, offsets, pushes, and pulls for the desktop device range. - -@media (min-width: @screen-md-min) { - .make-grid(md); -} - - -// Large grid -// -// Columns, offsets, pushes, and pulls for the large desktop device range. - -@media (min-width: @screen-lg-min) { - .make-grid(lg); -} diff --git a/platforms/browser/www/lib/bootstrap/less/input-groups.less b/platforms/browser/www/lib/bootstrap/less/input-groups.less deleted file mode 100644 index a8712f25..00000000 --- a/platforms/browser/www/lib/bootstrap/less/input-groups.less +++ /dev/null @@ -1,166 +0,0 @@ -// -// Input groups -// -------------------------------------------------- - -// Base styles -// ------------------------- -.input-group { - position: relative; // For dropdowns - display: table; - border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table - - // Undo padding and float of grid classes - &[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; - } - - .form-control { - // Ensure that the input is always above the *appended* addon button for - // proper border colors. - position: relative; - z-index: 2; - - // IE9 fubars the placeholder attribute in text inputs and the arrows on - // select elements in input groups. To fix it, we float the input. Details: - // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 - float: left; - - width: 100%; - margin-bottom: 0; - } -} - -// Sizing options -// -// Remix the default form control sizing classes into new ones for easier -// manipulation. - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - .input-lg(); -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - .input-sm(); -} - - -// Display as table-cell -// ------------------------- -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; - - &:not(:first-child):not(:last-child) { - border-radius: 0; - } -} -// Addon and addon wrapper for buttons -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; // Match the inputs -} - -// Text input groups -// ------------------------- -.input-group-addon { - padding: @padding-base-vertical @padding-base-horizontal; - font-size: @font-size-base; - font-weight: normal; - line-height: 1; - color: @input-color; - text-align: center; - background-color: @input-group-addon-bg; - border: 1px solid @input-group-addon-border-color; - border-radius: @border-radius-base; - - // Sizing - &.input-sm { - padding: @padding-small-vertical @padding-small-horizontal; - font-size: @font-size-small; - border-radius: @border-radius-small; - } - &.input-lg { - padding: @padding-large-vertical @padding-large-horizontal; - font-size: @font-size-large; - border-radius: @border-radius-large; - } - - // Nuke default margins from checkboxes and radios to vertically center within. - input[type="radio"], - input[type="checkbox"] { - margin-top: 0; - } -} - -// Reset rounded corners -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - .border-right-radius(0); -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - .border-left-radius(0); -} -.input-group-addon:last-child { - border-left: 0; -} - -// Button input groups -// ------------------------- -.input-group-btn { - position: relative; - // Jankily prevent input button groups from wrapping with `white-space` and - // `font-size` in combination with `inline-block` on buttons. - font-size: 0; - white-space: nowrap; - - // Negative margin for spacing, position for bringing hovered/focused/actived - // element above the siblings. - > .btn { - position: relative; - + .btn { - margin-left: -1px; - } - // Bring the "active" button to the front - &:hover, - &:focus, - &:active { - z-index: 2; - } - } - - // Negative margin to only have a 1px border between the two - &:first-child { - > .btn, - > .btn-group { - margin-right: -1px; - } - } - &:last-child { - > .btn, - > .btn-group { - margin-left: -1px; - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/jumbotron.less b/platforms/browser/www/lib/bootstrap/less/jumbotron.less deleted file mode 100644 index 27cd8b81..00000000 --- a/platforms/browser/www/lib/bootstrap/less/jumbotron.less +++ /dev/null @@ -1,48 +0,0 @@ -// -// Jumbotron -// -------------------------------------------------- - - -.jumbotron { - padding: @jumbotron-padding; - margin-bottom: @jumbotron-padding; - color: @jumbotron-color; - background-color: @jumbotron-bg; - - h1, - .h1 { - color: @jumbotron-heading-color; - } - p { - margin-bottom: (@jumbotron-padding / 2); - font-size: @jumbotron-font-size; - font-weight: 200; - } - - > hr { - border-top-color: darken(@jumbotron-bg, 10%); - } - - .container & { - border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container - } - - .container { - max-width: 100%; - } - - @media screen and (min-width: @screen-sm-min) { - padding-top: (@jumbotron-padding * 1.6); - padding-bottom: (@jumbotron-padding * 1.6); - - .container & { - padding-left: (@jumbotron-padding * 2); - padding-right: (@jumbotron-padding * 2); - } - - h1, - .h1 { - font-size: (@font-size-base * 4.5); - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/labels.less b/platforms/browser/www/lib/bootstrap/less/labels.less deleted file mode 100644 index 9a5a2700..00000000 --- a/platforms/browser/www/lib/bootstrap/less/labels.less +++ /dev/null @@ -1,64 +0,0 @@ -// -// Labels -// -------------------------------------------------- - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: @label-color; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; - - // Add hover effects, but only for links - a& { - &:hover, - &:focus { - color: @label-link-hover-color; - text-decoration: none; - cursor: pointer; - } - } - - // Empty labels collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for labels in buttons - .btn & { - position: relative; - top: -1px; - } -} - -// Colors -// Contextual variations (linked labels get darker on :hover) - -.label-default { - .label-variant(@label-default-bg); -} - -.label-primary { - .label-variant(@label-primary-bg); -} - -.label-success { - .label-variant(@label-success-bg); -} - -.label-info { - .label-variant(@label-info-bg); -} - -.label-warning { - .label-variant(@label-warning-bg); -} - -.label-danger { - .label-variant(@label-danger-bg); -} diff --git a/platforms/browser/www/lib/bootstrap/less/list-group.less b/platforms/browser/www/lib/bootstrap/less/list-group.less deleted file mode 100644 index 1946bf59..00000000 --- a/platforms/browser/www/lib/bootstrap/less/list-group.less +++ /dev/null @@ -1,131 +0,0 @@ -// -// List groups -// -------------------------------------------------- - - -// Base class -// -// Easily usable on <ul>, <ol>, or <div>. - -.list-group { - // No need to set list-style: none; since .list-group-item is block level - margin-bottom: 20px; - padding-left: 0; // reset padding because ul and ol -} - - -// Individual list items -// -// Use on `li`s or `div`s within the `.list-group` parent. - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - // Place the border on the list items and negative margin up for better styling - margin-bottom: -1px; - background-color: @list-group-bg; - border: 1px solid @list-group-border; - - // Round the first and last items - &:first-child { - .border-top-radius(@list-group-border-radius); - } - &:last-child { - margin-bottom: 0; - .border-bottom-radius(@list-group-border-radius); - } - - // Align badges within list items - > .badge { - float: right; - } - > .badge + .badge { - margin-right: 5px; - } -} - - -// Linked list items -// -// Use anchor elements instead of `li`s or `div`s to create linked list items. -// Includes an extra `.active` modifier class for showing selected items. - -a.list-group-item { - color: @list-group-link-color; - - .list-group-item-heading { - color: @list-group-link-heading-color; - } - - // Hover state - &:hover, - &:focus { - text-decoration: none; - color: @list-group-link-hover-color; - background-color: @list-group-hover-bg; - } -} - -.list-group-item { - // Disabled state - &.disabled, - &.disabled:hover, - &.disabled:focus { - background-color: @list-group-disabled-bg; - color: @list-group-disabled-color; - - // Force color to inherit for custom content - .list-group-item-heading { - color: inherit; - } - .list-group-item-text { - color: @list-group-disabled-text-color; - } - } - - // Active class on item itself, not parent - &.active, - &.active:hover, - &.active:focus { - z-index: 2; // Place active items above their siblings for proper border styling - color: @list-group-active-color; - background-color: @list-group-active-bg; - border-color: @list-group-active-border; - - // Force color to inherit for custom content - .list-group-item-heading, - .list-group-item-heading > small, - .list-group-item-heading > .small { - color: inherit; - } - .list-group-item-text { - color: @list-group-active-text-color; - } - } -} - - -// Contextual variants -// -// Add modifier classes to change text and background color on individual items. -// Organizationally, this must come after the `:hover` states. - -.list-group-item-variant(success; @state-success-bg; @state-success-text); -.list-group-item-variant(info; @state-info-bg; @state-info-text); -.list-group-item-variant(warning; @state-warning-bg; @state-warning-text); -.list-group-item-variant(danger; @state-danger-bg; @state-danger-text); - - -// Custom content options -// -// Extra classes for creating well-formatted content within `.list-group-item`s. - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} diff --git a/platforms/browser/www/lib/bootstrap/less/media.less b/platforms/browser/www/lib/bootstrap/less/media.less deleted file mode 100644 index 5ad22cd6..00000000 --- a/platforms/browser/www/lib/bootstrap/less/media.less +++ /dev/null @@ -1,56 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media { - > .pull-left { - margin-right: 10px; - } - > .pull-right { - margin-left: 10px; - } -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - padding-left: 0; - list-style: none; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins.less b/platforms/browser/www/lib/bootstrap/less/mixins.less deleted file mode 100644 index af4408fc..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins.less +++ /dev/null @@ -1,39 +0,0 @@ -// Mixins -// -------------------------------------------------- - -// Utilities -@import "mixins/hide-text.less"; -@import "mixins/opacity.less"; -@import "mixins/image.less"; -@import "mixins/labels.less"; -@import "mixins/reset-filter.less"; -@import "mixins/resize.less"; -@import "mixins/responsive-visibility.less"; -@import "mixins/size.less"; -@import "mixins/tab-focus.less"; -@import "mixins/text-emphasis.less"; -@import "mixins/text-overflow.less"; -@import "mixins/vendor-prefixes.less"; - -// Components -@import "mixins/alerts.less"; -@import "mixins/buttons.less"; -@import "mixins/panels.less"; -@import "mixins/pagination.less"; -@import "mixins/list-group.less"; -@import "mixins/nav-divider.less"; -@import "mixins/forms.less"; -@import "mixins/progress-bar.less"; -@import "mixins/table-row.less"; - -// Skins -@import "mixins/background-variant.less"; -@import "mixins/border-radius.less"; -@import "mixins/gradients.less"; - -// Layout -@import "mixins/clearfix.less"; -@import "mixins/center-block.less"; -@import "mixins/nav-vertical-align.less"; -@import "mixins/grid-framework.less"; -@import "mixins/grid.less"; diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/alerts.less b/platforms/browser/www/lib/bootstrap/less/mixins/alerts.less deleted file mode 100644 index 396196f4..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/alerts.less +++ /dev/null @@ -1,14 +0,0 @@ -// Alerts - -.alert-variant(@background; @border; @text-color) { - background-color: @background; - border-color: @border; - color: @text-color; - - hr { - border-top-color: darken(@border, 5%); - } - .alert-link { - color: darken(@text-color, 10%); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/background-variant.less b/platforms/browser/www/lib/bootstrap/less/mixins/background-variant.less deleted file mode 100644 index 556e490d..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/background-variant.less +++ /dev/null @@ -1,8 +0,0 @@ -// Contextual backgrounds - -.bg-variant(@color) { - background-color: @color; - a&:hover { - background-color: darken(@color, 10%); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/border-radius.less b/platforms/browser/www/lib/bootstrap/less/mixins/border-radius.less deleted file mode 100644 index ca05dbf4..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/border-radius.less +++ /dev/null @@ -1,18 +0,0 @@ -// Single side border-radius - -.border-top-radius(@radius) { - border-top-right-radius: @radius; - border-top-left-radius: @radius; -} -.border-right-radius(@radius) { - border-bottom-right-radius: @radius; - border-top-right-radius: @radius; -} -.border-bottom-radius(@radius) { - border-bottom-right-radius: @radius; - border-bottom-left-radius: @radius; -} -.border-left-radius(@radius) { - border-bottom-left-radius: @radius; - border-top-left-radius: @radius; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/buttons.less b/platforms/browser/www/lib/bootstrap/less/mixins/buttons.less deleted file mode 100644 index 409f8f20..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/buttons.less +++ /dev/null @@ -1,50 +0,0 @@ -// Button variants -// -// Easily pump out default styles, as well as :hover, :focus, :active, -// and disabled options for all buttons - -.button-variant(@color; @background; @border) { - color: @color; - background-color: @background; - border-color: @border; - - &:hover, - &:focus, - &:active, - &.active, - .open > .dropdown-toggle& { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 12%); - } - &:active, - &.active, - .open > .dropdown-toggle& { - background-image: none; - } - &.disabled, - &[disabled], - fieldset[disabled] & { - &, - &:hover, - &:focus, - &:active, - &.active { - background-color: @background; - border-color: @border; - } - } - - .badge { - color: @background; - background-color: @color; - } -} - -// Button sizes -.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - border-radius: @border-radius; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/center-block.less b/platforms/browser/www/lib/bootstrap/less/mixins/center-block.less deleted file mode 100644 index d18d6de9..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/center-block.less +++ /dev/null @@ -1,7 +0,0 @@ -// Center-align a block level element - -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/clearfix.less b/platforms/browser/www/lib/bootstrap/less/mixins/clearfix.less deleted file mode 100644 index 3f7a3820..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/clearfix.less +++ /dev/null @@ -1,22 +0,0 @@ -// Clearfix -// -// For modern browsers -// 1. The space content is one way to avoid an Opera bug when the -// contenteditable attribute is included anywhere else in the document. -// Otherwise it causes space to appear at the top and bottom of elements -// that are clearfixed. -// 2. The use of `table` rather than `block` is only necessary if using -// `:before` to contain the top-margins of child elements. -// -// Source: http://nicolasgallagher.com/micro-clearfix-hack/ - -.clearfix() { - &:before, - &:after { - content: " "; // 1 - display: table; // 2 - } - &:after { - clear: both; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/forms.less b/platforms/browser/www/lib/bootstrap/less/mixins/forms.less deleted file mode 100644 index e36c4a8c..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/forms.less +++ /dev/null @@ -1,81 +0,0 @@ -// Form validation states -// -// Used in forms.less to generate the form validation CSS for warnings, errors, -// and successes. - -.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { - // Color the label and help text - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline { - color: @text-color; - } - // Set the border and box shadow on specific inputs to match - .form-control { - border-color: @border-color; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@border-color, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); - .box-shadow(@shadow); - } - } - // Set validation states also for addons - .input-group-addon { - color: @text-color; - border-color: @border-color; - background-color: @background-color; - } - // Optional feedback icon - .form-control-feedback { - color: @text-color; - } -} - - -// Form control focus state -// -// Generate a customized focus state and for any input with the specified color, -// which defaults to the `@input-border-focus` variable. -// -// We highly encourage you to not customize the default value, but instead use -// this to tweak colors on an as-needed basis. This aesthetic change is based on -// WebKit's default styles, but applicable to a wider range of browsers. Its -// usability and accessibility should be taken into account with any change. -// -// Example usage: change the default blue border and shadow to white for better -// contrast against a dark gray background. -.form-control-focus(@color: @input-border-focus) { - @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); - &:focus { - border-color: @color; - outline: 0; - .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); - } -} - -// Form control sizing -// -// Relative text size, padding, and border-radii changes for form controls. For -// horizontal sizing, wrap controls in the predefined grid classes. `<select>` -// element gets special love because it's special, and that's a fact! -.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - height: @input-height; - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - border-radius: @border-radius; - - select& { - height: @input-height; - line-height: @input-height; - } - - textarea&, - select[multiple]& { - height: auto; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/gradients.less b/platforms/browser/www/lib/bootstrap/less/mixins/gradients.less deleted file mode 100644 index 0b88a89c..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/gradients.less +++ /dev/null @@ -1,59 +0,0 @@ -// Gradients - -#gradient { - - // Horizontal gradient, from left to right - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - // Vertical gradient, from top to bottom - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { - background-repeat: repeat-x; - background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12 - background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - } - .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@inner-color: #555; @outer-color: #333) { - background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); - background-image: radial-gradient(circle, @inner-color, @outer-color); - background-repeat: no-repeat; - } - .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { - background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/grid-framework.less b/platforms/browser/www/lib/bootstrap/less/mixins/grid-framework.less deleted file mode 100644 index 63178546..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/grid-framework.less +++ /dev/null @@ -1,91 +0,0 @@ -// Framework grid generation -// -// Used only by Bootstrap to generate the correct number of grid classes given -// any value of `@grid-columns`. - -.make-grid-columns() { - // Common styles for all sizes of grid columns, widths 1-12 - .col(@index) when (@index = 1) { // initial - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - position: relative; - // Prevent columns from collapsing when empty - min-height: 1px; - // Inner gutter via padding - padding-left: (@grid-gutter-width / 2); - padding-right: (@grid-gutter-width / 2); - } - } - .col(1); // kickstart it -} - -.float-grid-columns(@class) { - .col(@index) when (@index = 1) { // initial - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - float: left; - } - } - .col(1); // kickstart it -} - -.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { - .col-@{class}-@{index} { - width: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { - .col-@{class}-push-@{index} { - left: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { - .col-@{class}-push-0 { - left: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { - .col-@{class}-pull-@{index} { - right: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { - .col-@{class}-pull-0 { - right: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = offset) { - .col-@{class}-offset-@{index} { - margin-left: percentage((@index / @grid-columns)); - } -} - -// Basic looping in LESS -.loop-grid-columns(@index, @class, @type) when (@index >= 0) { - .calc-grid-column(@index, @class, @type); - // next iteration - .loop-grid-columns((@index - 1), @class, @type); -} - -// Create grid for specific class -.make-grid(@class) { - .float-grid-columns(@class); - .loop-grid-columns(@grid-columns, @class, width); - .loop-grid-columns(@grid-columns, @class, pull); - .loop-grid-columns(@grid-columns, @class, push); - .loop-grid-columns(@grid-columns, @class, offset); -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/grid.less b/platforms/browser/www/lib/bootstrap/less/mixins/grid.less deleted file mode 100644 index cae5eaff..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/grid.less +++ /dev/null @@ -1,122 +0,0 @@ -// Grid system -// -// Generate semantic grid columns with these mixins. - -// Centered container element -.container-fixed(@gutter: @grid-gutter-width) { - margin-right: auto; - margin-left: auto; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - &:extend(.clearfix all); -} - -// Creates a wrapper for a series of columns -.make-row(@gutter: @grid-gutter-width) { - margin-left: (@gutter / -2); - margin-right: (@gutter / -2); - &:extend(.clearfix all); -} - -// Generate the extra small columns -.make-xs-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - float: left; - width: percentage((@columns / @grid-columns)); - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); -} -.make-xs-column-offset(@columns) { - margin-left: percentage((@columns / @grid-columns)); -} -.make-xs-column-push(@columns) { - left: percentage((@columns / @grid-columns)); -} -.make-xs-column-pull(@columns) { - right: percentage((@columns / @grid-columns)); -} - -// Generate the small columns -.make-sm-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-sm-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-offset(@columns) { - @media (min-width: @screen-sm-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-push(@columns) { - @media (min-width: @screen-sm-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-pull(@columns) { - @media (min-width: @screen-sm-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the medium columns -.make-md-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-md-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-md-column-offset(@columns) { - @media (min-width: @screen-md-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-push(@columns) { - @media (min-width: @screen-md-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-pull(@columns) { - @media (min-width: @screen-md-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the large columns -.make-lg-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-lg-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-offset(@columns) { - @media (min-width: @screen-lg-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-push(@columns) { - @media (min-width: @screen-lg-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-pull(@columns) { - @media (min-width: @screen-lg-min) { - right: percentage((@columns / @grid-columns)); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/hide-text.less b/platforms/browser/www/lib/bootstrap/less/mixins/hide-text.less deleted file mode 100644 index c2315e57..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/hide-text.less +++ /dev/null @@ -1,21 +0,0 @@ -// CSS image replacement -// -// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for -// mixins being reused as classes with the same name, this doesn't hold up. As -// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. -// -// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 - -// Deprecated as of v3.0.1 (will be removed in v4) -.hide-text() { - font: ~"0/0" a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -// New mixin to use as of v3.0.1 -.text-hide() { - .hide-text(); -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/image.less b/platforms/browser/www/lib/bootstrap/less/mixins/image.less deleted file mode 100644 index 5d2cccb2..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/image.less +++ /dev/null @@ -1,34 +0,0 @@ -// Image Mixins -// - Responsive image -// - Retina image - - -// Responsive image -// -// Keep images from scaling beyond the width of their parents. -.img-responsive(@display: block) { - display: @display; - width: 100% \9; // Force IE10 and below to size SVG images correctly - max-width: 100%; // Part 1: Set a maximum relative to the parent - height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching -} - - -// Retina image -// -// Short retina mixin for setting background-image and -size. Note that the -// spelling of `min--moz-device-pixel-ratio` is intentional. -.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { - background-image: url("@{file-1x}"); - - @media - only screen and (-webkit-min-device-pixel-ratio: 2), - only screen and ( min--moz-device-pixel-ratio: 2), - only screen and ( -o-min-device-pixel-ratio: 2/1), - only screen and ( min-device-pixel-ratio: 2), - only screen and ( min-resolution: 192dpi), - only screen and ( min-resolution: 2dppx) { - background-image: url("@{file-2x}"); - background-size: @width-1x @height-1x; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/labels.less b/platforms/browser/www/lib/bootstrap/less/mixins/labels.less deleted file mode 100644 index 6f9e490b..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/labels.less +++ /dev/null @@ -1,12 +0,0 @@ -// Labels - -.label-variant(@color) { - background-color: @color; - - &[href] { - &:hover, - &:focus { - background-color: darken(@color, 10%); - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/list-group.less b/platforms/browser/www/lib/bootstrap/less/mixins/list-group.less deleted file mode 100644 index 8b5b065c..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/list-group.less +++ /dev/null @@ -1,29 +0,0 @@ -// List Groups - -.list-group-item-variant(@state; @background; @color) { - .list-group-item-@{state} { - color: @color; - background-color: @background; - - a& { - color: @color; - - .list-group-item-heading { - color: inherit; - } - - &:hover, - &:focus { - color: @color; - background-color: darken(@background, 5%); - } - &.active, - &.active:hover, - &.active:focus { - color: #fff; - background-color: @color; - border-color: @color; - } - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/nav-divider.less b/platforms/browser/www/lib/bootstrap/less/mixins/nav-divider.less deleted file mode 100644 index feb1e9ed..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/nav-divider.less +++ /dev/null @@ -1,10 +0,0 @@ -// Horizontal dividers -// -// Dividers (basically an hr) within dropdowns and nav lists - -.nav-divider(@color: #e5e5e5) { - height: 1px; - margin: ((@line-height-computed / 2) - 1) 0; - overflow: hidden; - background-color: @color; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/nav-vertical-align.less b/platforms/browser/www/lib/bootstrap/less/mixins/nav-vertical-align.less deleted file mode 100644 index d458c786..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/nav-vertical-align.less +++ /dev/null @@ -1,9 +0,0 @@ -// Navbar vertical align -// -// Vertically center elements in the navbar. -// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. - -.navbar-vertical-align(@element-height) { - margin-top: ((@navbar-height - @element-height) / 2); - margin-bottom: ((@navbar-height - @element-height) / 2); -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/opacity.less b/platforms/browser/www/lib/bootstrap/less/mixins/opacity.less deleted file mode 100644 index 33ed25ce..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/opacity.less +++ /dev/null @@ -1,8 +0,0 @@ -// Opacity - -.opacity(@opacity) { - opacity: @opacity; - // IE8 filter - @opacity-ie: (@opacity * 100); - filter: ~"alpha(opacity=@{opacity-ie})"; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/pagination.less b/platforms/browser/www/lib/bootstrap/less/mixins/pagination.less deleted file mode 100644 index 7deb505d..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/pagination.less +++ /dev/null @@ -1,23 +0,0 @@ -// Pagination - -.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) { - > li { - > a, - > span { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - } - &:first-child { - > a, - > span { - .border-left-radius(@border-radius); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius); - } - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/panels.less b/platforms/browser/www/lib/bootstrap/less/mixins/panels.less deleted file mode 100644 index 49ee10d4..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/panels.less +++ /dev/null @@ -1,24 +0,0 @@ -// Panels - -.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { - border-color: @border; - - & > .panel-heading { - color: @heading-text-color; - background-color: @heading-bg-color; - border-color: @heading-border; - - + .panel-collapse > .panel-body { - border-top-color: @border; - } - .badge { - color: @heading-bg-color; - background-color: @heading-text-color; - } - } - & > .panel-footer { - + .panel-collapse > .panel-body { - border-bottom-color: @border; - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/progress-bar.less b/platforms/browser/www/lib/bootstrap/less/mixins/progress-bar.less deleted file mode 100644 index f07996a3..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/progress-bar.less +++ /dev/null @@ -1,10 +0,0 @@ -// Progress bars - -.progress-bar-variant(@color) { - background-color: @color; - - // Deprecated parent class requirement as of v3.2.0 - .progress-striped & { - #gradient > .striped(); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/reset-filter.less b/platforms/browser/www/lib/bootstrap/less/mixins/reset-filter.less deleted file mode 100644 index 68cdb5e1..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/reset-filter.less +++ /dev/null @@ -1,8 +0,0 @@ -// Reset filters for IE -// -// When you need to remove a gradient background, do not forget to use this to reset -// the IE filter for IE9 and below. - -.reset-filter() { - filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/resize.less b/platforms/browser/www/lib/bootstrap/less/mixins/resize.less deleted file mode 100644 index 3acd3afd..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/resize.less +++ /dev/null @@ -1,6 +0,0 @@ -// Resize anything - -.resizable(@direction) { - resize: @direction; // Options: horizontal, vertical, both - overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/responsive-visibility.less b/platforms/browser/www/lib/bootstrap/less/mixins/responsive-visibility.less deleted file mode 100644 index f7951c3d..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/responsive-visibility.less +++ /dev/null @@ -1,15 +0,0 @@ -// Responsive utilities - -// -// More easily include all the states for responsive-utilities.less. -.responsive-visibility() { - display: block !important; - table& { display: table; } - tr& { display: table-row !important; } - th&, - td& { display: table-cell !important; } -} - -.responsive-invisibility() { - display: none !important; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/size.less b/platforms/browser/www/lib/bootstrap/less/mixins/size.less deleted file mode 100644 index a8be6508..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/size.less +++ /dev/null @@ -1,10 +0,0 @@ -// Sizing shortcuts - -.size(@width; @height) { - width: @width; - height: @height; -} - -.square(@size) { - .size(@size; @size); -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/tab-focus.less b/platforms/browser/www/lib/bootstrap/less/mixins/tab-focus.less deleted file mode 100644 index 1f1f05ab..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/tab-focus.less +++ /dev/null @@ -1,9 +0,0 @@ -// WebKit-style focus - -.tab-focus() { - // Default - outline: thin dotted; - // WebKit - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/table-row.less b/platforms/browser/www/lib/bootstrap/less/mixins/table-row.less deleted file mode 100644 index 0f287f1a..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/table-row.less +++ /dev/null @@ -1,28 +0,0 @@ -// Tables - -.table-row-variant(@state; @background) { - // Exact selectors below required to override `.table-striped` and prevent - // inheritance to nested tables. - .table > thead > tr, - .table > tbody > tr, - .table > tfoot > tr { - > td.@{state}, - > th.@{state}, - &.@{state} > td, - &.@{state} > th { - background-color: @background; - } - } - - // Hover states for `.table-hover` - // Note: this is not available for cells or rows within `thead` or `tfoot`. - .table-hover > tbody > tr { - > td.@{state}:hover, - > th.@{state}:hover, - &.@{state}:hover > td, - &:hover > .@{state}, - &.@{state}:hover > th { - background-color: darken(@background, 5%); - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/text-emphasis.less b/platforms/browser/www/lib/bootstrap/less/mixins/text-emphasis.less deleted file mode 100644 index 0868ef9f..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/text-emphasis.less +++ /dev/null @@ -1,8 +0,0 @@ -// Typography - -.text-emphasis-variant(@color) { - color: @color; - a&:hover { - color: darken(@color, 10%); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/text-overflow.less b/platforms/browser/www/lib/bootstrap/less/mixins/text-overflow.less deleted file mode 100644 index c11ad2fb..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/text-overflow.less +++ /dev/null @@ -1,8 +0,0 @@ -// Text overflow -// Requires inline-block or block for proper styling - -.text-overflow() { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} diff --git a/platforms/browser/www/lib/bootstrap/less/mixins/vendor-prefixes.less b/platforms/browser/www/lib/bootstrap/less/mixins/vendor-prefixes.less deleted file mode 100644 index e2008c8b..00000000 --- a/platforms/browser/www/lib/bootstrap/less/mixins/vendor-prefixes.less +++ /dev/null @@ -1,224 +0,0 @@ -// Vendor Prefixes -// -// All vendor mixins are deprecated as of v3.2.0 due to the introduction of -// Autoprefixer in our Gruntfile. They will be removed in v4. - -// - Animations -// - Backface visibility -// - Box shadow -// - Box sizing -// - Content columns -// - Hyphens -// - Placeholder text -// - Transformations -// - Transitions -// - User Select - - -// Animations -.animation(@animation) { - -webkit-animation: @animation; - -o-animation: @animation; - animation: @animation; -} -.animation-name(@name) { - -webkit-animation-name: @name; - animation-name: @name; -} -.animation-duration(@duration) { - -webkit-animation-duration: @duration; - animation-duration: @duration; -} -.animation-timing-function(@timing-function) { - -webkit-animation-timing-function: @timing-function; - animation-timing-function: @timing-function; -} -.animation-delay(@delay) { - -webkit-animation-delay: @delay; - animation-delay: @delay; -} -.animation-iteration-count(@iteration-count) { - -webkit-animation-iteration-count: @iteration-count; - animation-iteration-count: @iteration-count; -} -.animation-direction(@direction) { - -webkit-animation-direction: @direction; - animation-direction: @direction; -} -.animation-fill-mode(@fill-mode) { - -webkit-animation-fill-mode: @fill-mode; - animation-fill-mode: @fill-mode; -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden` - -.backface-visibility(@visibility){ - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Drop shadows -// -// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's -// supported browsers that have box shadow capabilities now support it. - -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 - box-shadow: @shadow; -} - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// CSS3 Content Columns -.content-columns(@column-count; @column-gap: @grid-gutter-width) { - -webkit-column-count: @column-count; - -moz-column-count: @column-count; - column-count: @column-count; - -webkit-column-gap: @column-gap; - -moz-column-gap: @column-gap; - column-gap: @column-gap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; // IE10+ - -o-hyphens: @mode; - hyphens: @mode; -} - -// Placeholder text -.placeholder(@color: @input-color-placeholder) { - &::-moz-placeholder { color: @color; // Firefox - opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 - &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ - &::-webkit-input-placeholder { color: @color; } // Safari and Chrome -} - -// Transformations -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -ms-transform: scale(@ratio); // IE9 only - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.scale(@ratioX; @ratioY) { - -webkit-transform: scale(@ratioX, @ratioY); - -ms-transform: scale(@ratioX, @ratioY); // IE9 only - -o-transform: scale(@ratioX, @ratioY); - transform: scale(@ratioX, @ratioY); -} -.scaleX(@ratio) { - -webkit-transform: scaleX(@ratio); - -ms-transform: scaleX(@ratio); // IE9 only - -o-transform: scaleX(@ratio); - transform: scaleX(@ratio); -} -.scaleY(@ratio) { - -webkit-transform: scaleY(@ratio); - -ms-transform: scaleY(@ratio); // IE9 only - -o-transform: scaleY(@ratio); - transform: scaleY(@ratio); -} -.skew(@x; @y) { - -webkit-transform: skewX(@x) skewY(@y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ - -o-transform: skewX(@x) skewY(@y); - transform: skewX(@x) skewY(@y); -} -.translate(@x; @y) { - -webkit-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); // IE9 only - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.translate3d(@x; @y; @z) { - -webkit-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); // IE9 only - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.rotateX(@degrees) { - -webkit-transform: rotateX(@degrees); - -ms-transform: rotateX(@degrees); // IE9 only - -o-transform: rotateX(@degrees); - transform: rotateX(@degrees); -} -.rotateY(@degrees) { - -webkit-transform: rotateY(@degrees); - -ms-transform: rotateY(@degrees); // IE9 only - -o-transform: rotateY(@degrees); - transform: rotateY(@degrees); -} -.perspective(@perspective) { - -webkit-perspective: @perspective; - -moz-perspective: @perspective; - perspective: @perspective; -} -.perspective-origin(@perspective) { - -webkit-perspective-origin: @perspective; - -moz-perspective-origin: @perspective; - perspective-origin: @perspective; -} -.transform-origin(@origin) { - -webkit-transform-origin: @origin; - -moz-transform-origin: @origin; - -ms-transform-origin: @origin; // IE9 only - transform-origin: @origin; -} - - -// Transitions - -.transition(@transition) { - -webkit-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-property(@transition-property) { - -webkit-transition-property: @transition-property; - transition-property: @transition-property; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} -.transition-timing-function(@timing-function) { - -webkit-transition-timing-function: @timing-function; - transition-timing-function: @timing-function; -} -.transition-transform(@transition) { - -webkit-transition: -webkit-transform @transition; - -moz-transition: -moz-transform @transition; - -o-transition: -o-transform @transition; - transition: transform @transition; -} - - -// User select -// For selecting text on the page - -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; // IE10+ - user-select: @select; -} diff --git a/platforms/browser/www/lib/bootstrap/less/modals.less b/platforms/browser/www/lib/bootstrap/less/modals.less deleted file mode 100644 index 6da50ba9..00000000 --- a/platforms/browser/www/lib/bootstrap/less/modals.less +++ /dev/null @@ -1,150 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// .modal-open - body class for killing the scroll -// .modal - container to scroll within -// .modal-dialog - positioning shell for the actual modal -// .modal-content - actual modal w/ bg and corners and shit - -// Kill the scroll on the body -.modal-open { - overflow: hidden; -} - -// Container that the modal scrolls within -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindex-modal; - -webkit-overflow-scrolling: touch; - - // Prevent Chrome on Windows from adding a focus outline. For details, see - // https://github.com/twbs/bootstrap/pull/10951. - outline: 0; - - // When fading in the modal, animate it to slide down - &.fade .modal-dialog { - .translate3d(0, -25%, 0); - .transition-transform(~"0.3s ease-out"); - } - &.in .modal-dialog { .translate3d(0, 0, 0) } -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -// Shell div to position the modal with bottom padding -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} - -// Actual modal -.modal-content { - position: relative; - background-color: @modal-content-bg; - border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) - border: 1px solid @modal-content-border-color; - border-radius: @border-radius-large; - .box-shadow(0 3px 9px rgba(0,0,0,.5)); - background-clip: padding-box; - // Remove focus outline from opened modal - outline: 0; -} - -// Modal background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindex-modal-background; - background-color: @modal-backdrop-bg; - // Fade for backdrop - &.fade { .opacity(0); } - &.in { .opacity(@modal-backdrop-opacity); } -} - -// Modal header -// Top section of the modal w/ title and dismiss -.modal-header { - padding: @modal-title-padding; - border-bottom: 1px solid @modal-header-border-color; - min-height: (@modal-title-padding + @modal-title-line-height); -} -// Close icon -.modal-header .close { - margin-top: -2px; -} - -// Title text within header -.modal-title { - margin: 0; - line-height: @modal-title-line-height; -} - -// Modal body -// Where all modal content resides (sibling of .modal-header and .modal-footer) -.modal-body { - position: relative; - padding: @modal-inner-padding; -} - -// Footer (for actions) -.modal-footer { - padding: @modal-inner-padding; - text-align: right; // right align buttons - border-top: 1px solid @modal-footer-border-color; - &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} - -// Measure scrollbar width for padding body during modal show/hide -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -// Scale up the modal -@media (min-width: @screen-sm-min) { - // Automatically set modal's width for larger viewports - .modal-dialog { - width: @modal-md; - margin: 30px auto; - } - .modal-content { - .box-shadow(0 5px 15px rgba(0,0,0,.5)); - } - - // Modal sizes - .modal-sm { width: @modal-sm; } -} - -@media (min-width: @screen-md-min) { - .modal-lg { width: @modal-lg; } -} diff --git a/platforms/browser/www/lib/bootstrap/less/navbar.less b/platforms/browser/www/lib/bootstrap/less/navbar.less deleted file mode 100644 index 55bfd294..00000000 --- a/platforms/browser/www/lib/bootstrap/less/navbar.less +++ /dev/null @@ -1,655 +0,0 @@ -// -// Navbars -// -------------------------------------------------- - - -// Wrapper and base class -// -// Provide a static navbar from which we expand to create full-width, fixed, and -// other navbar variations. - -.navbar { - position: relative; - min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) - margin-bottom: @navbar-margin-bottom; - border: 1px solid transparent; - - // Prevent floats from breaking the navbar - &:extend(.clearfix all); - - @media (min-width: @grid-float-breakpoint) { - border-radius: @navbar-border-radius; - } -} - - -// Navbar heading -// -// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy -// styling of responsive aspects. - -.navbar-header { - &:extend(.clearfix all); - - @media (min-width: @grid-float-breakpoint) { - float: left; - } -} - - -// Navbar collapse (body) -// -// Group your navbar content into this for easy collapsing and expanding across -// various device sizes. By default, this content is collapsed when <768px, but -// will expand past that for a horizontal display. -// -// To start (on mobile devices) the navbar links, forms, and buttons are stacked -// vertically and include a `max-height` to overflow in case you have too much -// content for the user's viewport. - -.navbar-collapse { - overflow-x: visible; - padding-right: @navbar-padding-horizontal; - padding-left: @navbar-padding-horizontal; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,.1); - &:extend(.clearfix all); - -webkit-overflow-scrolling: touch; - - &.in { - overflow-y: auto; - } - - @media (min-width: @grid-float-breakpoint) { - width: auto; - border-top: 0; - box-shadow: none; - - &.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; // Override default setting - overflow: visible !important; - } - - &.in { - overflow-y: visible; - } - - // Undo the collapse side padding for navbars with containers to ensure - // alignment of right-aligned contents. - .navbar-fixed-top &, - .navbar-static-top &, - .navbar-fixed-bottom & { - padding-left: 0; - padding-right: 0; - } - } -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - .navbar-collapse { - max-height: @navbar-collapse-max-height; - - @media (max-width: @screen-xs-min) and (orientation: landscape) { - max-height: 200px; - } - } -} - - -// Both navbar header and collapse -// -// When a container is present, change the behavior of the header and collapse. - -.container, -.container-fluid { - > .navbar-header, - > .navbar-collapse { - margin-right: -@navbar-padding-horizontal; - margin-left: -@navbar-padding-horizontal; - - @media (min-width: @grid-float-breakpoint) { - margin-right: 0; - margin-left: 0; - } - } -} - - -// -// Navbar alignment options -// -// Display the navbar across the entirety of the page or fixed it to the top or -// bottom of the page. - -// Static top (unfixed, but 100% wide) navbar -.navbar-static-top { - z-index: @zindex-navbar; - border-width: 0 0 1px; - - @media (min-width: @grid-float-breakpoint) { - border-radius: 0; - } -} - -// Fix the top/bottom navbars when screen real estate supports it -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: @zindex-navbar-fixed; - .translate3d(0, 0, 0); - - // Undo the rounded corners - @media (min-width: @grid-float-breakpoint) { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; // override .navbar defaults - border-width: 1px 0 0; -} - - -// Brand/project name - -.navbar-brand { - float: left; - padding: @navbar-padding-vertical @navbar-padding-horizontal; - font-size: @font-size-large; - line-height: @line-height-computed; - height: @navbar-height; - - &:hover, - &:focus { - text-decoration: none; - } - - @media (min-width: @grid-float-breakpoint) { - .navbar > .container &, - .navbar > .container-fluid & { - margin-left: -@navbar-padding-horizontal; - } - } -} - - -// Navbar toggle -// -// Custom button for toggling the `.navbar-collapse`, powered by the collapse -// JavaScript plugin. - -.navbar-toggle { - position: relative; - float: right; - margin-right: @navbar-padding-horizontal; - padding: 9px 10px; - .navbar-vertical-align(34px); - background-color: transparent; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - border-radius: @border-radius-base; - - // We remove the `outline` here, but later compensate by attaching `:hover` - // styles to `:focus`. - &:focus { - outline: 0; - } - - // Bars - .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; - } - .icon-bar + .icon-bar { - margin-top: 4px; - } - - @media (min-width: @grid-float-breakpoint) { - display: none; - } -} - - -// Navbar nav links -// -// Builds on top of the `.nav` components with its own modifier class to make -// the nav the full height of the horizontal nav (above 768px). - -.navbar-nav { - margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal; - - > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: @line-height-computed; - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - > li > a, - .dropdown-header { - padding: 5px 15px 5px 25px; - } - > li > a { - line-height: @line-height-computed; - &:hover, - &:focus { - background-image: none; - } - } - } - } - - // Uncollapse the nav - @media (min-width: @grid-float-breakpoint) { - float: left; - margin: 0; - - > li { - float: left; - > a { - padding-top: @navbar-padding-vertical; - padding-bottom: @navbar-padding-vertical; - } - } - - &.navbar-right:last-child { - margin-right: -@navbar-padding-horizontal; - } - } -} - - -// Component alignment -// -// Repurpose the pull utilities as their own navbar utilities to avoid specificity -// issues with parents and chaining. Only do this when the navbar is uncollapsed -// though so that navbar contents properly stack and align in mobile. - -@media (min-width: @grid-float-breakpoint) { - .navbar-left { .pull-left(); } - .navbar-right { .pull-right(); } -} - - -// Navbar form -// -// Extension of the `.form-inline` with some extra flavor for optimum display in -// our navbars. - -.navbar-form { - margin-left: -@navbar-padding-horizontal; - margin-right: -@navbar-padding-horizontal; - padding: 10px @navbar-padding-horizontal; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - .box-shadow(@shadow); - - // Mixin behavior for optimum display - .form-inline(); - - .form-group { - @media (max-width: @grid-float-breakpoint-max) { - margin-bottom: 5px; - } - } - - // Vertically center in expanded, horizontal navbar - .navbar-vertical-align(@input-height-base); - - // Undo 100% width for pull classes - @media (min-width: @grid-float-breakpoint) { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - .box-shadow(none); - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: -@navbar-padding-horizontal; - } - } -} - - -// Dropdown menus - -// Menu position and menu carets -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - .border-top-radius(0); -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - .border-bottom-radius(0); -} - - -// Buttons in navbars -// -// Vertically center a button within a navbar (when *not* in a form). - -.navbar-btn { - .navbar-vertical-align(@input-height-base); - - &.btn-sm { - .navbar-vertical-align(@input-height-small); - } - &.btn-xs { - .navbar-vertical-align(22); - } -} - - -// Text in navbars -// -// Add a class to make any element properly align itself vertically within the navbars. - -.navbar-text { - .navbar-vertical-align(@line-height-computed); - - @media (min-width: @grid-float-breakpoint) { - float: left; - margin-left: @navbar-padding-horizontal; - margin-right: @navbar-padding-horizontal; - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: 0; - } - } -} - -// Alternate navbars -// -------------------------------------------------- - -// Default navbar -.navbar-default { - background-color: @navbar-default-bg; - border-color: @navbar-default-border; - - .navbar-brand { - color: @navbar-default-brand-color; - &:hover, - &:focus { - color: @navbar-default-brand-hover-color; - background-color: @navbar-default-brand-hover-bg; - } - } - - .navbar-text { - color: @navbar-default-color; - } - - .navbar-nav { - > li > a { - color: @navbar-default-link-color; - - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - background-color: @navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-active-color; - background-color: @navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - background-color: @navbar-default-link-disabled-bg; - } - } - } - - .navbar-toggle { - border-color: @navbar-default-toggle-border-color; - &:hover, - &:focus { - background-color: @navbar-default-toggle-hover-bg; - } - .icon-bar { - background-color: @navbar-default-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: @navbar-default-border; - } - - // Dropdown menu items - .navbar-nav { - // Remove background color from open dropdown - > .open > a { - &, - &:hover, - &:focus { - background-color: @navbar-default-link-active-bg; - color: @navbar-default-link-active-color; - } - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - > li > a { - color: @navbar-default-link-color; - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - background-color: @navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-active-color; - background-color: @navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - background-color: @navbar-default-link-disabled-bg; - } - } - } - } - } - - - // Links in navbars - // - // Add a class to ensure links outside the navbar nav are colored correctly. - - .navbar-link { - color: @navbar-default-link-color; - &:hover { - color: @navbar-default-link-hover-color; - } - } - - .btn-link { - color: @navbar-default-link-color; - &:hover, - &:focus { - color: @navbar-default-link-hover-color; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @navbar-default-link-disabled-color; - } - } - } -} - -// Inverse navbar - -.navbar-inverse { - background-color: @navbar-inverse-bg; - border-color: @navbar-inverse-border; - - .navbar-brand { - color: @navbar-inverse-brand-color; - &:hover, - &:focus { - color: @navbar-inverse-brand-hover-color; - background-color: @navbar-inverse-brand-hover-bg; - } - } - - .navbar-text { - color: @navbar-inverse-color; - } - - .navbar-nav { - > li > a { - color: @navbar-inverse-link-color; - - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - background-color: @navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-active-color; - background-color: @navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - background-color: @navbar-inverse-link-disabled-bg; - } - } - } - - // Darken the responsive nav toggle - .navbar-toggle { - border-color: @navbar-inverse-toggle-border-color; - &:hover, - &:focus { - background-color: @navbar-inverse-toggle-hover-bg; - } - .icon-bar { - background-color: @navbar-inverse-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: darken(@navbar-inverse-bg, 7%); - } - - // Dropdowns - .navbar-nav { - > .open > a { - &, - &:hover, - &:focus { - background-color: @navbar-inverse-link-active-bg; - color: @navbar-inverse-link-active-color; - } - } - - @media (max-width: @grid-float-breakpoint-max) { - // Dropdowns get custom display - .open .dropdown-menu { - > .dropdown-header { - border-color: @navbar-inverse-border; - } - .divider { - background-color: @navbar-inverse-border; - } - > li > a { - color: @navbar-inverse-link-color; - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - background-color: @navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-active-color; - background-color: @navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - background-color: @navbar-inverse-link-disabled-bg; - } - } - } - } - } - - .navbar-link { - color: @navbar-inverse-link-color; - &:hover { - color: @navbar-inverse-link-hover-color; - } - } - - .btn-link { - color: @navbar-inverse-link-color; - &:hover, - &:focus { - color: @navbar-inverse-link-hover-color; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: @navbar-inverse-link-disabled-color; - } - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/navs.less b/platforms/browser/www/lib/bootstrap/less/navs.less deleted file mode 100644 index 98a64307..00000000 --- a/platforms/browser/www/lib/bootstrap/less/navs.less +++ /dev/null @@ -1,242 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// Base class -// -------------------------------------------------- - -.nav { - margin-bottom: 0; - padding-left: 0; // Override default ul/ol - list-style: none; - &:extend(.clearfix all); - - > li { - position: relative; - display: block; - - > a { - position: relative; - display: block; - padding: @nav-link-padding; - &:hover, - &:focus { - text-decoration: none; - background-color: @nav-link-hover-bg; - } - } - - // Disabled state sets text to gray and nukes hover/tab effects - &.disabled > a { - color: @nav-disabled-link-color; - - &:hover, - &:focus { - color: @nav-disabled-link-hover-color; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; - } - } - } - - // Open dropdowns - .open > a { - &, - &:hover, - &:focus { - background-color: @nav-link-hover-bg; - border-color: @link-color; - } - } - - // Nav dividers (deprecated with v3.0.1) - // - // This should have been removed in v3 with the dropping of `.nav-list`, but - // we missed it. We don't currently support this anywhere, but in the interest - // of maintaining backward compatibility in case you use it, it's deprecated. - .nav-divider { - .nav-divider(); - } - - // Prevent IE8 from misplacing imgs - // - // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 - > li > a > img { - max-width: none; - } -} - - -// Tabs -// ------------------------- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid @nav-tabs-border-color; - > li { - float: left; - // Make the list-items overlay the bottom border - margin-bottom: -1px; - - // Actual tabs (as links) - > a { - margin-right: 2px; - line-height: @line-height-base; - border: 1px solid transparent; - border-radius: @border-radius-base @border-radius-base 0 0; - &:hover { - border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color; - } - } - - // Active state, and its :hover to override normal :hover - &.active > a { - &, - &:hover, - &:focus { - color: @nav-tabs-active-link-hover-color; - background-color: @nav-tabs-active-link-hover-bg; - border: 1px solid @nav-tabs-active-link-hover-border-color; - border-bottom-color: transparent; - cursor: default; - } - } - } - // pulling this in mainly for less shorthand - &.nav-justified { - .nav-justified(); - .nav-tabs-justified(); - } -} - - -// Pills -// ------------------------- -.nav-pills { - > li { - float: left; - - // Links rendered as pills - > a { - border-radius: @nav-pills-border-radius; - } - + li { - margin-left: 2px; - } - - // Active state - &.active > a { - &, - &:hover, - &:focus { - color: @nav-pills-active-link-hover-color; - background-color: @nav-pills-active-link-hover-bg; - } - } - } -} - - -// Stacked pills -.nav-stacked { - > li { - float: none; - + li { - margin-top: 2px; - margin-left: 0; // no need for this gap between nav items - } - } -} - - -// Nav variations -// -------------------------------------------------- - -// Justified nav links -// ------------------------- - -.nav-justified { - width: 100%; - - > li { - float: none; - > a { - text-align: center; - margin-bottom: 5px; - } - } - - > .dropdown .dropdown-menu { - top: auto; - left: auto; - } - - @media (min-width: @screen-sm-min) { - > li { - display: table-cell; - width: 1%; - > a { - margin-bottom: 0; - } - } - } -} - -// Move borders to anchors instead of bottom of list -// -// Mixin for adding on top the shared `.nav-justified` styles for our tabs -.nav-tabs-justified { - border-bottom: 0; - - > li > a { - // Override margin from .nav-tabs - margin-right: 0; - border-radius: @border-radius-base; - } - - > .active > a, - > .active > a:hover, - > .active > a:focus { - border: 1px solid @nav-tabs-justified-link-border-color; - } - - @media (min-width: @screen-sm-min) { - > li > a { - border-bottom: 1px solid @nav-tabs-justified-link-border-color; - border-radius: @border-radius-base @border-radius-base 0 0; - } - > .active > a, - > .active > a:hover, - > .active > a:focus { - border-bottom-color: @nav-tabs-justified-active-link-border-color; - } - } -} - - -// Tabbable tabs -// ------------------------- - -// Hide tabbable panes to start, show them when `.active` -.tab-content { - > .tab-pane { - display: none; - } - > .active { - display: block; - } -} - - -// Dropdowns -// ------------------------- - -// Specific dropdowns -.nav-tabs .dropdown-menu { - // make dropdown border overlap tab border - margin-top: -1px; - // Remove the top rounded corners here since there is a hard edge above the menu - .border-top-radius(0); -} diff --git a/platforms/browser/www/lib/bootstrap/less/normalize.less b/platforms/browser/www/lib/bootstrap/less/normalize.less deleted file mode 100644 index ce04b6a2..00000000 --- a/platforms/browser/www/lib/bootstrap/less/normalize.less +++ /dev/null @@ -1,425 +0,0 @@ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ - -// -// 1. Set default font family to sans-serif. -// 2. Prevent iOS text size adjust after orientation change, without disabling -// user zoom. -// - -html { - font-family: sans-serif; // 1 - -ms-text-size-adjust: 100%; // 2 - -webkit-text-size-adjust: 100%; // 2 -} - -// -// Remove default margin. -// - -body { - margin: 0; -} - -// HTML5 display definitions -// ========================================================================== - -// -// Correct `block` display not defined for any HTML5 element in IE 8/9. -// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. -// Correct `block` display not defined for `main` in IE 11. -// - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -// -// 1. Correct `inline-block` display not defined in IE 8/9. -// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. -// - -audio, -canvas, -progress, -video { - display: inline-block; // 1 - vertical-align: baseline; // 2 -} - -// -// Prevent modern browsers from displaying `audio` without controls. -// Remove excess height in iOS 5 devices. -// - -audio:not([controls]) { - display: none; - height: 0; -} - -// -// Address `[hidden]` styling not present in IE 8/9/10. -// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. -// - -[hidden], -template { - display: none; -} - -// Links -// ========================================================================== - -// -// Remove the gray background color from active links in IE 10. -// - -a { - background: transparent; -} - -// -// Improve readability when focused and also mouse hovered in all browsers. -// - -a:active, -a:hover { - outline: 0; -} - -// Text-level semantics -// ========================================================================== - -// -// Address styling not present in IE 8/9/10/11, Safari, and Chrome. -// - -abbr[title] { - border-bottom: 1px dotted; -} - -// -// Address style set to `bolder` in Firefox 4+, Safari, and Chrome. -// - -b, -strong { - font-weight: bold; -} - -// -// Address styling not present in Safari and Chrome. -// - -dfn { - font-style: italic; -} - -// -// Address variable `h1` font-size and margin within `section` and `article` -// contexts in Firefox 4+, Safari, and Chrome. -// - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -// -// Address styling not present in IE 8/9. -// - -mark { - background: #ff0; - color: #000; -} - -// -// Address inconsistent and variable font size in all browsers. -// - -small { - font-size: 80%; -} - -// -// Prevent `sub` and `sup` affecting `line-height` in all browsers. -// - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -// Embedded content -// ========================================================================== - -// -// Remove border when inside `a` element in IE 8/9/10. -// - -img { - border: 0; -} - -// -// Correct overflow not hidden in IE 9/10/11. -// - -svg:not(:root) { - overflow: hidden; -} - -// Grouping content -// ========================================================================== - -// -// Address margin not present in IE 8/9 and Safari. -// - -figure { - margin: 1em 40px; -} - -// -// Address differences between Firefox and other browsers. -// - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -// -// Contain overflow in all browsers. -// - -pre { - overflow: auto; -} - -// -// Address odd `em`-unit font size rendering in all browsers. -// - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -// Forms -// ========================================================================== - -// -// Known limitation: by default, Chrome and Safari on OS X allow very limited -// styling of `select`, unless a `border` property is set. -// - -// -// 1. Correct color not being inherited. -// Known issue: affects color of disabled elements. -// 2. Correct font properties not being inherited. -// 3. Address margins set differently in Firefox 4+, Safari, and Chrome. -// - -button, -input, -optgroup, -select, -textarea { - color: inherit; // 1 - font: inherit; // 2 - margin: 0; // 3 -} - -// -// Address `overflow` set to `hidden` in IE 8/9/10/11. -// - -button { - overflow: visible; -} - -// -// Address inconsistent `text-transform` inheritance for `button` and `select`. -// All other form control elements do not inherit `text-transform` values. -// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. -// Correct `select` style inheritance in Firefox. -// - -button, -select { - text-transform: none; -} - -// -// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` -// and `video` controls. -// 2. Correct inability to style clickable `input` types in iOS. -// 3. Improve usability and consistency of cursor style between image-type -// `input` and others. -// - -button, -html input[type="button"], // 1 -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // 2 - cursor: pointer; // 3 -} - -// -// Re-set default cursor for disabled elements. -// - -button[disabled], -html input[disabled] { - cursor: default; -} - -// -// Remove inner padding and border in Firefox 4+. -// - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -// -// Address Firefox 4+ setting `line-height` on `input` using `!important` in -// the UA stylesheet. -// - -input { - line-height: normal; -} - -// -// It's recommended that you don't attempt to style these elements. -// Firefox's implementation doesn't respect box-sizing, padding, or width. -// -// 1. Address box sizing set to `content-box` in IE 8/9/10. -// 2. Remove excess padding in IE 8/9/10. -// - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; // 1 - padding: 0; // 2 -} - -// -// Fix the cursor style for Chrome's increment/decrement buttons. For certain -// `font-size` values of the `input`, it causes the cursor style of the -// decrement button to change from `default` to `text`. -// - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -// -// 1. Address `appearance` set to `searchfield` in Safari and Chrome. -// 2. Address `box-sizing` set to `border-box` in Safari and Chrome -// (include `-moz` to future-proof). -// - -input[type="search"] { - -webkit-appearance: textfield; // 1 - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; // 2 - box-sizing: content-box; -} - -// -// Remove inner padding and search cancel button in Safari and Chrome on OS X. -// Safari (but not Chrome) clips the cancel button when the search input has -// padding (and `textfield` appearance). -// - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -// -// Define consistent border, margin, and padding. -// - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -// -// 1. Correct `color` not being inherited in IE 8/9/10/11. -// 2. Remove padding so people aren't caught out if they zero out fieldsets. -// - -legend { - border: 0; // 1 - padding: 0; // 2 -} - -// -// Remove default vertical scrollbar in IE 8/9/10/11. -// - -textarea { - overflow: auto; -} - -// -// Don't inherit the `font-weight` (applied by a rule above). -// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. -// - -optgroup { - font-weight: bold; -} - -// Tables -// ========================================================================== - -// -// Remove most spacing between table cells. -// - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/platforms/browser/www/lib/bootstrap/less/pager.less b/platforms/browser/www/lib/bootstrap/less/pager.less deleted file mode 100644 index 59103f44..00000000 --- a/platforms/browser/www/lib/bootstrap/less/pager.less +++ /dev/null @@ -1,55 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - padding-left: 0; - margin: @line-height-computed 0; - list-style: none; - text-align: center; - &:extend(.clearfix all); - li { - display: inline; - > a, - > span { - display: inline-block; - padding: 5px 14px; - background-color: @pager-bg; - border: 1px solid @pager-border; - border-radius: @pager-border-radius; - } - - > a:hover, - > a:focus { - text-decoration: none; - background-color: @pager-hover-bg; - } - } - - .next { - > a, - > span { - float: right; - } - } - - .previous { - > a, - > span { - float: left; - } - } - - .disabled { - > a, - > a:hover, - > a:focus, - > span { - color: @pager-disabled-color; - background-color: @pager-bg; - cursor: not-allowed; - } - } - -} diff --git a/platforms/browser/www/lib/bootstrap/less/pagination.less b/platforms/browser/www/lib/bootstrap/less/pagination.less deleted file mode 100644 index b2856ae6..00000000 --- a/platforms/browser/www/lib/bootstrap/less/pagination.less +++ /dev/null @@ -1,88 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- -.pagination { - display: inline-block; - padding-left: 0; - margin: @line-height-computed 0; - border-radius: @border-radius-base; - - > li { - display: inline; // Remove list-style and block-level defaults - > a, - > span { - position: relative; - float: left; // Collapse white-space - padding: @padding-base-vertical @padding-base-horizontal; - line-height: @line-height-base; - text-decoration: none; - color: @pagination-color; - background-color: @pagination-bg; - border: 1px solid @pagination-border; - margin-left: -1px; - } - &:first-child { - > a, - > span { - margin-left: 0; - .border-left-radius(@border-radius-base); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius-base); - } - } - } - - > li > a, - > li > span { - &:hover, - &:focus { - color: @pagination-hover-color; - background-color: @pagination-hover-bg; - border-color: @pagination-hover-border; - } - } - - > .active > a, - > .active > span { - &, - &:hover, - &:focus { - z-index: 2; - color: @pagination-active-color; - background-color: @pagination-active-bg; - border-color: @pagination-active-border; - cursor: default; - } - } - - > .disabled { - > span, - > span:hover, - > span:focus, - > a, - > a:hover, - > a:focus { - color: @pagination-disabled-color; - background-color: @pagination-disabled-bg; - border-color: @pagination-disabled-border; - cursor: not-allowed; - } - } -} - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-lg { - .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large); -} - -// Small -.pagination-sm { - .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small); -} diff --git a/platforms/browser/www/lib/bootstrap/less/panels.less b/platforms/browser/www/lib/bootstrap/less/panels.less deleted file mode 100644 index 2dc21316..00000000 --- a/platforms/browser/www/lib/bootstrap/less/panels.less +++ /dev/null @@ -1,243 +0,0 @@ -// -// Panels -// -------------------------------------------------- - - -// Base class -.panel { - margin-bottom: @line-height-computed; - background-color: @panel-bg; - border: 1px solid transparent; - border-radius: @panel-border-radius; - .box-shadow(0 1px 1px rgba(0,0,0,.05)); -} - -// Panel contents -.panel-body { - padding: @panel-body-padding; - &:extend(.clearfix all); -} - -// Optional heading -.panel-heading { - padding: @panel-heading-padding; - border-bottom: 1px solid transparent; - .border-top-radius((@panel-border-radius - 1)); - - > .dropdown .dropdown-toggle { - color: inherit; - } -} - -// Within heading, strip any `h*` tag of its default margins for spacing. -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: ceil((@font-size-base * 1.125)); - color: inherit; - - > a { - color: inherit; - } -} - -// Optional footer (stays gray in every modifier class) -.panel-footer { - padding: @panel-footer-padding; - background-color: @panel-footer-bg; - border-top: 1px solid @panel-inner-border; - .border-bottom-radius((@panel-border-radius - 1)); -} - - -// List groups in panels -// -// By default, space out list group content from panel headings to account for -// any kind of custom content between the two. - -.panel { - > .list-group { - margin-bottom: 0; - - .list-group-item { - border-width: 1px 0; - border-radius: 0; - } - - // Add border top radius for first one - &:first-child { - .list-group-item:first-child { - border-top: 0; - .border-top-radius((@panel-border-radius - 1)); - } - } - // Add border bottom radius for last one - &:last-child { - .list-group-item:last-child { - border-bottom: 0; - .border-bottom-radius((@panel-border-radius - 1)); - } - } - } -} -// Collapse space between when there's no additional content. -.panel-heading + .list-group { - .list-group-item:first-child { - border-top-width: 0; - } -} -.list-group + .panel-footer { - border-top-width: 0; -} - -// Tables in panels -// -// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and -// watch it go full width. - -.panel { - > .table, - > .table-responsive > .table, - > .panel-collapse > .table { - margin-bottom: 0; - } - // Add border top radius for first one - > .table:first-child, - > .table-responsive:first-child > .table:first-child { - .border-top-radius((@panel-border-radius - 1)); - - > thead:first-child, - > tbody:first-child { - > tr:first-child { - td:first-child, - th:first-child { - border-top-left-radius: (@panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-top-right-radius: (@panel-border-radius - 1); - } - } - } - } - // Add border bottom radius for last one - > .table:last-child, - > .table-responsive:last-child > .table:last-child { - .border-bottom-radius((@panel-border-radius - 1)); - - > tbody:last-child, - > tfoot:last-child { - > tr:last-child { - td:first-child, - th:first-child { - border-bottom-left-radius: (@panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-bottom-right-radius: (@panel-border-radius - 1); - } - } - } - } - > .panel-body + .table, - > .panel-body + .table-responsive { - border-top: 1px solid @table-border-color; - } - > .table > tbody:first-child > tr:first-child th, - > .table > tbody:first-child > tr:first-child td { - border-top: 0; - } - > .table-bordered, - > .table-responsive > .table-bordered { - border: 0; - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - > thead, - > tbody { - > tr:first-child { - > td, - > th { - border-bottom: 0; - } - } - } - > tbody, - > tfoot { - > tr:last-child { - > td, - > th { - border-bottom: 0; - } - } - } - } - > .table-responsive { - border: 0; - margin-bottom: 0; - } -} - - -// Collapsable panels (aka, accordion) -// -// Wrap a series of panels in `.panel-group` to turn them into an accordion with -// the help of our collapse JavaScript plugin. - -.panel-group { - margin-bottom: @line-height-computed; - - // Tighten up margin so it's only between panels - .panel { - margin-bottom: 0; - border-radius: @panel-border-radius; - + .panel { - margin-top: 5px; - } - } - - .panel-heading { - border-bottom: 0; - + .panel-collapse > .panel-body { - border-top: 1px solid @panel-inner-border; - } - } - .panel-footer { - border-top: 0; - + .panel-collapse .panel-body { - border-bottom: 1px solid @panel-inner-border; - } - } -} - - -// Contextual variations -.panel-default { - .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border); -} -.panel-primary { - .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border); -} -.panel-success { - .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border); -} -.panel-info { - .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border); -} -.panel-warning { - .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border); -} -.panel-danger { - .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border); -} diff --git a/platforms/browser/www/lib/bootstrap/less/popovers.less b/platforms/browser/www/lib/bootstrap/less/popovers.less deleted file mode 100644 index bf6af40a..00000000 --- a/platforms/browser/www/lib/bootstrap/less/popovers.less +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindex-popover; - display: none; - max-width: @popover-max-width; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: @popover-bg; - background-clip: padding-box; - border: 1px solid @popover-fallback-border-color; - border: 1px solid @popover-border-color; - border-radius: @border-radius-large; - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -@popover-arrow-width; } - &.right { margin-left: @popover-arrow-width; } - &.bottom { margin-top: @popover-arrow-width; } - &.left { margin-left: -@popover-arrow-width; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: @font-size-base; - font-weight: normal; - line-height: 18px; - background-color: @popover-title-bg; - border-bottom: 1px solid darken(@popover-title-bg, 5%); - border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover > .arrow { - &, - &:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - } -} -.popover > .arrow { - border-width: @popover-arrow-outer-width; -} -.popover > .arrow:after { - border-width: @popover-arrow-width; - content: ""; -} - -.popover { - &.top > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-top-color: @popover-arrow-outer-color; - bottom: -@popover-arrow-outer-width; - &:after { - content: " "; - bottom: 1px; - margin-left: -@popover-arrow-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-color; - } - } - &.right > .arrow { - top: 50%; - left: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-left-width: 0; - border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-right-color: @popover-arrow-outer-color; - &:after { - content: " "; - left: 1px; - bottom: -@popover-arrow-width; - border-left-width: 0; - border-right-color: @popover-arrow-color; - } - } - &.bottom > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-bottom-color: @popover-arrow-outer-color; - top: -@popover-arrow-outer-width; - &:after { - content: " "; - top: 1px; - margin-left: -@popover-arrow-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-color; - } - } - - &.left > .arrow { - top: 50%; - right: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-right-width: 0; - border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-left-color: @popover-arrow-outer-color; - &:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: @popover-arrow-color; - bottom: -@popover-arrow-width; - } - } - -} diff --git a/platforms/browser/www/lib/bootstrap/less/print.less b/platforms/browser/www/lib/bootstrap/less/print.less deleted file mode 100644 index 3655d039..00000000 --- a/platforms/browser/www/lib/bootstrap/less/print.less +++ /dev/null @@ -1,101 +0,0 @@ -// -// Basic print styles -// -------------------------------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } - - // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 - // Once fixed, we can just straight up remove this. - select { - background: #fff !important; - } - - // Bootstrap components - .navbar { - display: none; - } - .table { - td, - th { - background-color: #fff !important; - } - } - .btn, - .dropup > .btn { - > .caret { - border-top-color: #000 !important; - } - } - .label { - border: 1px solid #000; - } - - .table { - border-collapse: collapse !important; - } - .table-bordered { - th, - td { - border: 1px solid #ddd !important; - } - } - -} diff --git a/platforms/browser/www/lib/bootstrap/less/progress-bars.less b/platforms/browser/www/lib/bootstrap/less/progress-bars.less deleted file mode 100644 index 3ac52a29..00000000 --- a/platforms/browser/www/lib/bootstrap/less/progress-bars.less +++ /dev/null @@ -1,105 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// Bar animations -// ------------------------- - -// WebKit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Spec and IE10+ -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// Bar itself -// ------------------------- - -// Outer container -.progress { - overflow: hidden; - height: @line-height-computed; - margin-bottom: @line-height-computed; - background-color: @progress-bg; - border-radius: @border-radius-base; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); -} - -// Bar of progress -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: @font-size-small; - line-height: @line-height-computed; - color: @progress-bar-color; - text-align: center; - background-color: @progress-bar-bg; - .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .transition(width .6s ease); -} - -// Striped bars -// -// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the -// `.progress-bar-striped` class, which you just add to an existing -// `.progress-bar`. -.progress-striped .progress-bar, -.progress-bar-striped { - #gradient > .striped(); - background-size: 40px 40px; -} - -// Call animation for the active one -// -// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the -// `.progress-bar.active` approach. -.progress.active .progress-bar, -.progress-bar.active { - .animation(progress-bar-stripes 2s linear infinite); -} - -// Account for lower percentages -.progress-bar { - &[aria-valuenow="1"], - &[aria-valuenow="2"] { - min-width: 30px; - } - - &[aria-valuenow="0"] { - color: @gray-light; - min-width: 30px; - background-color: transparent; - background-image: none; - box-shadow: none; - } -} - - - -// Variations -// ------------------------- - -.progress-bar-success { - .progress-bar-variant(@progress-bar-success-bg); -} - -.progress-bar-info { - .progress-bar-variant(@progress-bar-info-bg); -} - -.progress-bar-warning { - .progress-bar-variant(@progress-bar-warning-bg); -} - -.progress-bar-danger { - .progress-bar-variant(@progress-bar-danger-bg); -} diff --git a/platforms/browser/www/lib/bootstrap/less/responsive-embed.less b/platforms/browser/www/lib/bootstrap/less/responsive-embed.less deleted file mode 100644 index a884d49f..00000000 --- a/platforms/browser/www/lib/bootstrap/less/responsive-embed.less +++ /dev/null @@ -1,34 +0,0 @@ -// Embeds responsive -// -// Credit: Nicolas Gallagher and SUIT CSS. - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; - - .embed-responsive-item, - iframe, - embed, - object { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; - } - - // Modifier class for 16:9 aspect ratio - &.embed-responsive-16by9 { - padding-bottom: 56.25%; - } - - // Modifier class for 4:3 aspect ratio - &.embed-responsive-4by3 { - padding-bottom: 75%; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/responsive-utilities.less b/platforms/browser/www/lib/bootstrap/less/responsive-utilities.less deleted file mode 100644 index b1db31d7..00000000 --- a/platforms/browser/www/lib/bootstrap/less/responsive-utilities.less +++ /dev/null @@ -1,194 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 in Windows (Phone) 8 -// -// Support for responsive views via media queries is kind of borked in IE10, for -// Surface/desktop in split view and for Windows Phone 8. This particular fix -// must be accompanied by a snippet of JavaScript to sniff the user agent and -// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at -// our Getting Started page for more information on this bug. -// -// For more information, see the following: -// -// Issue: https://github.com/twbs/bootstrap/issues/10497 -// Docs: http://getbootstrap.com/getting-started/#support-ie10-width -// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ - -@-ms-viewport { - width: device-width; -} - - -// Visibility utilities -// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - .responsive-invisibility(); -} - -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} - -.visible-xs { - @media (max-width: @screen-xs-max) { - .responsive-visibility(); - } -} -.visible-xs-block { - @media (max-width: @screen-xs-max) { - display: block !important; - } -} -.visible-xs-inline { - @media (max-width: @screen-xs-max) { - display: inline !important; - } -} -.visible-xs-inline-block { - @media (max-width: @screen-xs-max) { - display: inline-block !important; - } -} - -.visible-sm { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - .responsive-visibility(); - } -} -.visible-sm-block { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: block !important; - } -} -.visible-sm-inline { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: inline !important; - } -} -.visible-sm-inline-block { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - display: inline-block !important; - } -} - -.visible-md { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - .responsive-visibility(); - } -} -.visible-md-block { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: block !important; - } -} -.visible-md-inline { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: inline !important; - } -} -.visible-md-inline-block { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - display: inline-block !important; - } -} - -.visible-lg { - @media (min-width: @screen-lg-min) { - .responsive-visibility(); - } -} -.visible-lg-block { - @media (min-width: @screen-lg-min) { - display: block !important; - } -} -.visible-lg-inline { - @media (min-width: @screen-lg-min) { - display: inline !important; - } -} -.visible-lg-inline-block { - @media (min-width: @screen-lg-min) { - display: inline-block !important; - } -} - -.hidden-xs { - @media (max-width: @screen-xs-max) { - .responsive-invisibility(); - } -} -.hidden-sm { - @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { - .responsive-invisibility(); - } -} -.hidden-md { - @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { - .responsive-invisibility(); - } -} -.hidden-lg { - @media (min-width: @screen-lg-min) { - .responsive-invisibility(); - } -} - - -// Print utilities -// -// Media queries are placed on the inside to be mixin-friendly. - -// Note: Deprecated .visible-print as of v3.2.0 -.visible-print { - .responsive-invisibility(); - - @media print { - .responsive-visibility(); - } -} -.visible-print-block { - display: none !important; - - @media print { - display: block !important; - } -} -.visible-print-inline { - display: none !important; - - @media print { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; - - @media print { - display: inline-block !important; - } -} - -.hidden-print { - @media print { - .responsive-invisibility(); - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/scaffolding.less b/platforms/browser/www/lib/bootstrap/less/scaffolding.less deleted file mode 100644 index c1e270fb..00000000 --- a/platforms/browser/www/lib/bootstrap/less/scaffolding.less +++ /dev/null @@ -1,150 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Reset the box-sizing -// -// Heads up! This reset may cause conflicts with some third-party widgets. -// For recommendations on resolving such conflicts, see -// http://getbootstrap.com/getting-started/#third-box-sizing -* { - .box-sizing(border-box); -} -*:before, -*:after { - .box-sizing(border-box); -} - - -// Body reset - -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0,0,0,0); -} - -body { - font-family: @font-family-base; - font-size: @font-size-base; - line-height: @line-height-base; - color: @text-color; - background-color: @body-bg; -} - -// Reset fonts for relevant elements -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - - -// Links - -a { - color: @link-color; - text-decoration: none; - - &:hover, - &:focus { - color: @link-hover-color; - text-decoration: underline; - } - - &:focus { - .tab-focus(); - } -} - - -// Figures -// -// We reset this here because previously Normalize had no `figure` margins. This -// ensures we don't break anyone's use of the element. - -figure { - margin: 0; -} - - -// Images - -img { - vertical-align: middle; -} - -// Responsive images (ensure images don't scale beyond their parents) -.img-responsive { - .img-responsive(); -} - -// Rounded corners -.img-rounded { - border-radius: @border-radius-large; -} - -// Image thumbnails -// -// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. -.img-thumbnail { - padding: @thumbnail-padding; - line-height: @line-height-base; - background-color: @thumbnail-bg; - border: 1px solid @thumbnail-border; - border-radius: @thumbnail-border-radius; - .transition(all .2s ease-in-out); - - // Keep them at most 100% wide - .img-responsive(inline-block); -} - -// Perfect circle -.img-circle { - border-radius: 50%; // set radius in percents -} - - -// Horizontal rules - -hr { - margin-top: @line-height-computed; - margin-bottom: @line-height-computed; - border: 0; - border-top: 1px solid @hr-border; -} - - -// Only display content to screen readers -// -// See: http://a11yproject.com/posts/how-to-hide-content/ - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - border: 0; -} - -// Use in conjunction with .sr-only to only display content when it's focused. -// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 -// Credit: HTML5 Boilerplate - -.sr-only-focusable { - &:active, - &:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/tables.less b/platforms/browser/www/lib/bootstrap/less/tables.less deleted file mode 100644 index 2e1ef337..00000000 --- a/platforms/browser/www/lib/bootstrap/less/tables.less +++ /dev/null @@ -1,233 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -table { - background-color: @table-bg; -} -th { - text-align: left; -} - - -// Baseline styles - -.table { - width: 100%; - max-width: 100%; - margin-bottom: @line-height-computed; - // Cells - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: @table-cell-padding; - line-height: @line-height-base; - vertical-align: top; - border-top: 1px solid @table-border-color; - } - } - } - // Bottom align for column headings - > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid @table-border-color; - } - // Remove top border from thead by default - > caption + thead, - > colgroup + thead, - > thead:first-child { - > tr:first-child { - > th, - > td { - border-top: 0; - } - } - } - // Account for multiple tbody instances - > tbody + tbody { - border-top: 2px solid @table-border-color; - } - - // Nesting - .table { - background-color: @body-bg; - } -} - - -// Condensed table w/ half padding - -.table-condensed { - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: @table-condensed-cell-padding; - } - } - } -} - - -// Bordered version -// -// Add borders all around the table and between all the columns. - -.table-bordered { - border: 1px solid @table-border-color; - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - border: 1px solid @table-border-color; - } - } - } - > thead > tr { - > th, - > td { - border-bottom-width: 2px; - } - } -} - - -// Zebra-striping -// -// Default zebra-stripe styles (alternating gray and transparent backgrounds) - -.table-striped { - > tbody > tr:nth-child(odd) { - > td, - > th { - background-color: @table-bg-accent; - } - } -} - - -// Hover effect -// -// Placed here since it has to come after the potential zebra striping - -.table-hover { - > tbody > tr:hover { - > td, - > th { - background-color: @table-bg-hover; - } - } -} - - -// Table cell sizing -// -// Reset default table behavior - -table col[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-column; -} -table { - td, - th { - &[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-cell; - } - } -} - - -// Table backgrounds -// -// Exact selectors below required to override `.table-striped` and prevent -// inheritance to nested tables. - -// Generate the contextual variants -.table-row-variant(active; @table-bg-active); -.table-row-variant(success; @state-success-bg); -.table-row-variant(info; @state-info-bg); -.table-row-variant(warning; @state-warning-bg); -.table-row-variant(danger; @state-danger-bg); - - -// Responsive tables -// -// Wrap your tables in `.table-responsive` and we'll make them mobile friendly -// by enabling horizontal scrolling. Only applies <768px. Everything above that -// will display normally. - -.table-responsive { - @media screen and (max-width: @screen-xs-max) { - width: 100%; - margin-bottom: (@line-height-computed * 0.75); - overflow-y: hidden; - overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid @table-border-color; - -webkit-overflow-scrolling: touch; - - // Tighten up spacing - > .table { - margin-bottom: 0; - - // Ensure the content doesn't wrap - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - white-space: nowrap; - } - } - } - } - - // Special overrides for the bordered tables - > .table-bordered { - border: 0; - - // Nuke the appropriate borders so that the parent can handle them - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - - // Only nuke the last row's bottom-border in `tbody` and `tfoot` since - // chances are there will be only one `tr` in a `thead` and that would - // remove the border altogether. - > tbody, - > tfoot { - > tr:last-child { - > th, - > td { - border-bottom: 0; - } - } - } - - } - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/theme.less b/platforms/browser/www/lib/bootstrap/less/theme.less deleted file mode 100644 index b089424c..00000000 --- a/platforms/browser/www/lib/bootstrap/less/theme.less +++ /dev/null @@ -1,258 +0,0 @@ - -// -// Load core variables and mixins -// -------------------------------------------------- - -@import "variables.less"; -@import "mixins.less"; - - - -// -// Buttons -// -------------------------------------------------- - -// Common styles -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); - .box-shadow(@shadow); - - // Reset the shadow - &:active, - &.active { - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } -} - -// Mixin for generating new styles -.btn-styles(@btn-color: #555) { - #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); - .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners - background-repeat: repeat-x; - border-color: darken(@btn-color, 14%); - - &:hover, - &:focus { - background-color: darken(@btn-color, 12%); - background-position: 0 -15px; - } - - &:active, - &.active { - background-color: darken(@btn-color, 12%); - border-color: darken(@btn-color, 14%); - } - - &:disabled, - &[disabled] { - background-color: darken(@btn-color, 12%); - background-image: none; - } -} - -// Common styles -.btn { - // Remove the gradient for the pressed/active state - &:active, - &.active { - background-image: none; - } -} - -// Apply the mixin to the buttons -.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } -.btn-primary { .btn-styles(@btn-primary-bg); } -.btn-success { .btn-styles(@btn-success-bg); } -.btn-info { .btn-styles(@btn-info-bg); } -.btn-warning { .btn-styles(@btn-warning-bg); } -.btn-danger { .btn-styles(@btn-danger-bg); } - - - -// -// Images -// -------------------------------------------------- - -.thumbnail, -.img-thumbnail { - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} - - - -// -// Dropdowns -// -------------------------------------------------- - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); - background-color: darken(@dropdown-link-hover-bg, 5%); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); - background-color: darken(@dropdown-link-active-bg, 5%); -} - - - -// -// Navbar -// -------------------------------------------------- - -// Default navbar -.navbar-default { - #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - border-radius: @navbar-border-radius; - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); - .box-shadow(@shadow); - - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); - } -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255,255,255,.25); -} - -// Inverted navbar -.navbar-inverse { - #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); - } - - .navbar-brand, - .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - } -} - -// Undo rounded corners in static and fixed navbars -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - - - -// -// Alerts -// -------------------------------------------------- - -// Common styles -.alert { - text-shadow: 0 1px 0 rgba(255,255,255,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); - .box-shadow(@shadow); -} - -// Mixin for generating new styles -.alert-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); - border-color: darken(@color, 15%); -} - -// Apply the mixin to the alerts -.alert-success { .alert-styles(@alert-success-bg); } -.alert-info { .alert-styles(@alert-info-bg); } -.alert-warning { .alert-styles(@alert-warning-bg); } -.alert-danger { .alert-styles(@alert-danger-bg); } - - - -// -// Progress bars -// -------------------------------------------------- - -// Give the progress background some depth -.progress { - #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) -} - -// Mixin for generating new styles -.progress-bar-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); -} - -// Apply the mixin to the progress bars -.progress-bar { .progress-bar-styles(@progress-bar-bg); } -.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } -.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } -.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } -.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } - -// Reset the striped class because our mixins don't do multiple gradients and -// the above custom styles override the new `.progress-bar-striped` in v3.2.0. -.progress-bar-striped { - #gradient > .striped(); -} - - -// -// List groups -// -------------------------------------------------- - -.list-group { - border-radius: @border-radius-base; - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); - #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); - border-color: darken(@list-group-active-border, 7.5%); -} - - - -// -// Panels -// -------------------------------------------------- - -// Common styles -.panel { - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} - -// Mixin for generating new styles -.panel-heading-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); -} - -// Apply the mixin to the panel headings only -.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } -.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } -.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } -.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } -.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } -.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } - - - -// -// Wells -// -------------------------------------------------- - -.well { - #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); - border-color: darken(@well-bg, 10%); - @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); - .box-shadow(@shadow); -} diff --git a/platforms/browser/www/lib/bootstrap/less/thumbnails.less b/platforms/browser/www/lib/bootstrap/less/thumbnails.less deleted file mode 100644 index c428920b..00000000 --- a/platforms/browser/www/lib/bootstrap/less/thumbnails.less +++ /dev/null @@ -1,36 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Mixin and adjust the regular image class -.thumbnail { - display: block; - padding: @thumbnail-padding; - margin-bottom: @line-height-computed; - line-height: @line-height-base; - background-color: @thumbnail-bg; - border: 1px solid @thumbnail-border; - border-radius: @thumbnail-border-radius; - .transition(all .2s ease-in-out); - - > img, - a > img { - &:extend(.img-responsive); - margin-left: auto; - margin-right: auto; - } - - // Add a hover state for linked versions only - a&:hover, - a&:focus, - a&.active { - border-color: @link-color; - } - - // Image captions - .caption { - padding: @thumbnail-caption-padding; - color: @thumbnail-caption-color; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/tooltip.less b/platforms/browser/www/lib/bootstrap/less/tooltip.less deleted file mode 100644 index bd626996..00000000 --- a/platforms/browser/www/lib/bootstrap/less/tooltip.less +++ /dev/null @@ -1,95 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindex-tooltip; - display: block; - visibility: visible; - font-size: @font-size-small; - line-height: 1.4; - .opacity(0); - - &.in { .opacity(@tooltip-opacity); } - &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } - &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } - &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } - &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: @tooltip-max-width; - padding: 3px 8px; - color: @tooltip-color; - text-align: center; - text-decoration: none; - background-color: @tooltip-bg; - border-radius: @border-radius-base; -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-left .tooltip-arrow { - bottom: 0; - left: @tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-right .tooltip-arrow { - bottom: 0; - right: @tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; - border-right-color: @tooltip-arrow-color; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; - border-left-color: @tooltip-arrow-color; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-left .tooltip-arrow { - top: 0; - left: @tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-right .tooltip-arrow { - top: 0; - right: @tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } -} diff --git a/platforms/browser/www/lib/bootstrap/less/type.less b/platforms/browser/www/lib/bootstrap/less/type.less deleted file mode 100644 index 9b1e48ba..00000000 --- a/platforms/browser/www/lib/bootstrap/less/type.less +++ /dev/null @@ -1,313 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - font-family: @headings-font-family; - font-weight: @headings-font-weight; - line-height: @headings-line-height; - color: @headings-color; - - small, - .small { - font-weight: normal; - line-height: 1; - color: @headings-small-color; - } -} - -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: @line-height-computed; - margin-bottom: (@line-height-computed / 2); - - small, - .small { - font-size: 65%; - } -} -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: (@line-height-computed / 2); - margin-bottom: (@line-height-computed / 2); - - small, - .small { - font-size: 75%; - } -} - -h1, .h1 { font-size: @font-size-h1; } -h2, .h2 { font-size: @font-size-h2; } -h3, .h3 { font-size: @font-size-h3; } -h4, .h4 { font-size: @font-size-h4; } -h5, .h5 { font-size: @font-size-h5; } -h6, .h6 { font-size: @font-size-h6; } - - -// Body text -// ------------------------- - -p { - margin: 0 0 (@line-height-computed / 2); -} - -.lead { - margin-bottom: @line-height-computed; - font-size: floor((@font-size-base * 1.15)); - font-weight: 300; - line-height: 1.4; - - @media (min-width: @screen-sm-min) { - font-size: (@font-size-base * 1.5); - } -} - - -// Emphasis & misc -// ------------------------- - -// Ex: (12px small font / 14px base font) * 100% = about 85% -small, -.small { - font-size: floor((100% * @font-size-small / @font-size-base)); -} - -// Undo browser default styling -cite { - font-style: normal; -} - -mark, -.mark { - background-color: @state-warning-bg; - padding: .2em; -} - -// Alignment -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } -.text-justify { text-align: justify; } -.text-nowrap { white-space: nowrap; } - -// Transformation -.text-lowercase { text-transform: lowercase; } -.text-uppercase { text-transform: uppercase; } -.text-capitalize { text-transform: capitalize; } - -// Contextual colors -.text-muted { - color: @text-muted; -} -.text-primary { - .text-emphasis-variant(@brand-primary); -} -.text-success { - .text-emphasis-variant(@state-success-text); -} -.text-info { - .text-emphasis-variant(@state-info-text); -} -.text-warning { - .text-emphasis-variant(@state-warning-text); -} -.text-danger { - .text-emphasis-variant(@state-danger-text); -} - -// Contextual backgrounds -// For now we'll leave these alongside the text classes until v4 when we can -// safely shift things around (per SemVer rules). -.bg-primary { - // Given the contrast here, this is the only class to have its color inverted - // automatically. - color: #fff; - .bg-variant(@brand-primary); -} -.bg-success { - .bg-variant(@state-success-bg); -} -.bg-info { - .bg-variant(@state-info-bg); -} -.bg-warning { - .bg-variant(@state-warning-bg); -} -.bg-danger { - .bg-variant(@state-danger-bg); -} - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: ((@line-height-computed / 2) - 1); - margin: (@line-height-computed * 2) 0 @line-height-computed; - border-bottom: 1px solid @page-header-border-color; -} - - -// Lists -// ------------------------- - -// Unordered and Ordered lists -ul, -ol { - margin-top: 0; - margin-bottom: (@line-height-computed / 2); - ul, - ol { - margin-bottom: 0; - } -} - -// List options - -// Unstyled keeps list items block level, just removes default browser padding and list-style -.list-unstyled { - padding-left: 0; - list-style: none; -} - -// Inline turns list items into inline-block -.list-inline { - .list-unstyled(); - margin-left: -5px; - - > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-top: 0; // Remove browser default - margin-bottom: @line-height-computed; -} -dt, -dd { - line-height: @line-height-base; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; // Undo browser default -} - -// Horizontal description lists -// -// Defaults to being stacked without any of the below styles applied, until the -// grid breakpoint is reached (default of ~768px). - -.dl-horizontal { - dd { - &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present - } - - @media (min-width: @grid-float-breakpoint) { - dt { - float: left; - width: (@dl-horizontal-offset - 20); - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @dl-horizontal-offset; - } - } -} - - -// Misc -// ------------------------- - -// Abbreviations and acronyms -abbr[title], -// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @abbr-border-color; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: (@line-height-computed / 2) @line-height-computed; - margin: 0 0 @line-height-computed; - font-size: @blockquote-font-size; - border-left: 5px solid @blockquote-border-color; - - p, - ul, - ol { - &:last-child { - margin-bottom: 0; - } - } - - // Note: Deprecated small and .small as of v3.1.0 - // Context: https://github.com/twbs/bootstrap/issues/11660 - footer, - small, - .small { - display: block; - font-size: 80%; // back to default font-size - line-height: @line-height-base; - color: @blockquote-small-color; - - &:before { - content: '\2014 \00A0'; // em dash, nbsp - } - } -} - -// Opposite alignment of blockquote -// -// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @blockquote-border-color; - border-left: 0; - text-align: right; - - // Account for citation - footer, - small, - .small { - &:before { content: ''; } - &:after { - content: '\00A0 \2014'; // nbsp, em dash - } - } -} - -// Quotes -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - margin-bottom: @line-height-computed; - font-style: normal; - line-height: @line-height-base; -} diff --git a/platforms/browser/www/lib/bootstrap/less/utilities.less b/platforms/browser/www/lib/bootstrap/less/utilities.less deleted file mode 100644 index c0becabe..00000000 --- a/platforms/browser/www/lib/bootstrap/less/utilities.less +++ /dev/null @@ -1,57 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Floats -// ------------------------- - -.clearfix { - .clearfix(); -} -.center-block { - .center-block(); -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} - - -// Toggling content -// ------------------------- - -// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - .text-hide(); -} - - -// Hide from screenreaders and browsers -// -// Credit: HTML5 Boilerplate - -.hidden { - display: none !important; - visibility: hidden !important; -} - - -// For Affix plugin -// ------------------------- - -.affix { - position: fixed; - .translate3d(0, 0, 0); -} diff --git a/platforms/browser/www/lib/bootstrap/less/variables.less b/platforms/browser/www/lib/bootstrap/less/variables.less deleted file mode 100644 index 582f0f8d..00000000 --- a/platforms/browser/www/lib/bootstrap/less/variables.less +++ /dev/null @@ -1,846 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -@gray-darker: lighten(#000, 13.5%); // #222 -@gray-dark: lighten(#000, 20%); // #333 -@gray: lighten(#000, 33.5%); // #555 -@gray-light: lighten(#000, 46.7%); // #777 -@gray-lighter: lighten(#000, 93.5%); // #eee - -@brand-primary: #428bca; -@brand-success: #5cb85c; -@brand-info: #5bc0de; -@brand-warning: #f0ad4e; -@brand-danger: #d9534f; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for `<body>`. -@body-bg: #fff; -//** Global text color on `<body>`. -@text-color: @gray-dark; - -//** Global textual link color. -@link-color: @brand-primary; -//** Link hover color set via `darken()` function. -@link-hover-color: darken(@link-color, 15%); - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; -@font-family-serif: Georgia, "Times New Roman", Times, serif; -//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`. -@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; -@font-family-base: @font-family-sans-serif; - -@font-size-base: 14px; -@font-size-large: ceil((@font-size-base * 1.25)); // ~18px -@font-size-small: ceil((@font-size-base * 0.85)); // ~12px - -@font-size-h1: floor((@font-size-base * 2.6)); // ~36px -@font-size-h2: floor((@font-size-base * 2.15)); // ~30px -@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px -@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px -@font-size-h5: @font-size-base; -@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px - -//** Unit-less `line-height` for use in components like buttons. -@line-height-base: 1.428571429; // 20/14 -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc. -@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px - -//** By default, this inherits from the `<body>`. -@headings-font-family: inherit; -@headings-font-weight: 500; -@headings-line-height: 1.1; -@headings-color: inherit; - - -//== Iconography -// -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower. - -//** Load fonts from this directory. -@icon-font-path: "../fonts/"; -//** File name for all font files. -@icon-font-name: "glyphicons-halflings-regular"; -//** Element ID within SVG icon file. -@icon-font-svg-id: "glyphicons_halflingsregular"; - - -//== Components -// -//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start). - -@padding-base-vertical: 6px; -@padding-base-horizontal: 12px; - -@padding-large-vertical: 10px; -@padding-large-horizontal: 16px; - -@padding-small-vertical: 5px; -@padding-small-horizontal: 10px; - -@padding-xs-vertical: 1px; -@padding-xs-horizontal: 5px; - -@line-height-large: 1.33; -@line-height-small: 1.5; - -@border-radius-base: 4px; -@border-radius-large: 6px; -@border-radius-small: 3px; - -//** Global color for active items (e.g., navs or dropdowns). -@component-active-color: #fff; -//** Global background color for active items (e.g., navs or dropdowns). -@component-active-bg: @brand-primary; - -//** Width of the `border` for generating carets that indicator dropdowns. -@caret-width-base: 4px; -//** Carets increase slightly in size for larger components. -@caret-width-large: 5px; - - -//== Tables -// -//## Customizes the `.table` component with basic values, each used across all table variations. - -//** Padding for `<th>`s and `<td>`s. -@table-cell-padding: 8px; -//** Padding for cells in `.table-condensed`. -@table-condensed-cell-padding: 5px; - -//** Default background color used for all tables. -@table-bg: transparent; -//** Background color used for `.table-striped`. -@table-bg-accent: #f9f9f9; -//** Background color used for `.table-hover`. -@table-bg-hover: #f5f5f5; -@table-bg-active: @table-bg-hover; - -//** Border color for table and cell borders. -@table-border-color: #ddd; - - -//== Buttons -// -//## For each of Bootstrap's buttons, define text, background and border color. - -@btn-font-weight: normal; - -@btn-default-color: #333; -@btn-default-bg: #fff; -@btn-default-border: #ccc; - -@btn-primary-color: #fff; -@btn-primary-bg: @brand-primary; -@btn-primary-border: darken(@btn-primary-bg, 5%); - -@btn-success-color: #fff; -@btn-success-bg: @brand-success; -@btn-success-border: darken(@btn-success-bg, 5%); - -@btn-info-color: #fff; -@btn-info-bg: @brand-info; -@btn-info-border: darken(@btn-info-bg, 5%); - -@btn-warning-color: #fff; -@btn-warning-bg: @brand-warning; -@btn-warning-border: darken(@btn-warning-bg, 5%); - -@btn-danger-color: #fff; -@btn-danger-bg: @brand-danger; -@btn-danger-border: darken(@btn-danger-bg, 5%); - -@btn-link-disabled-color: @gray-light; - - -//== Forms -// -//## - -//** `<input>` background color -@input-bg: #fff; -//** `<input disabled>` background color -@input-bg-disabled: @gray-lighter; - -//** Text color for `<input>`s -@input-color: @gray; -//** `<input>` border color -@input-border: #ccc; -//** `<input>` border radius -@input-border-radius: @border-radius-base; -//** Border color for inputs on focus -@input-border-focus: #66afe9; - -//** Placeholder text color -@input-color-placeholder: @gray-light; - -//** Default `.form-control` height -@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); -//** Large `.form-control` height -@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); -//** Small `.form-control` height -@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); - -@legend-color: @gray-dark; -@legend-border-color: #e5e5e5; - -//** Background color for textual input addons -@input-group-addon-bg: @gray-lighter; -//** Border color for textual input addons -@input-group-addon-border-color: @input-border; - - -//== Dropdowns -// -//## Dropdown menu container and contents. - -//** Background for the dropdown menu. -@dropdown-bg: #fff; -//** Dropdown menu `border-color`. -@dropdown-border: rgba(0,0,0,.15); -//** Dropdown menu `border-color` **for IE8**. -@dropdown-fallback-border: #ccc; -//** Divider color for between dropdown items. -@dropdown-divider-bg: #e5e5e5; - -//** Dropdown link text color. -@dropdown-link-color: @gray-dark; -//** Hover color for dropdown links. -@dropdown-link-hover-color: darken(@gray-dark, 5%); -//** Hover background for dropdown links. -@dropdown-link-hover-bg: #f5f5f5; - -//** Active dropdown menu item text color. -@dropdown-link-active-color: @component-active-color; -//** Active dropdown menu item background color. -@dropdown-link-active-bg: @component-active-bg; - -//** Disabled dropdown menu item background color. -@dropdown-link-disabled-color: @gray-light; - -//** Text color for headers within dropdown menus. -@dropdown-header-color: @gray-light; - -//** Deprecated `@dropdown-caret-color` as of v3.1.0 -@dropdown-caret-color: #000; - - -//-- Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. -// -// Note: These variables are not generated into the Customizer. - -@zindex-navbar: 1000; -@zindex-dropdown: 1000; -@zindex-popover: 1060; -@zindex-tooltip: 1070; -@zindex-navbar-fixed: 1030; -@zindex-modal-background: 1040; -@zindex-modal: 1050; - - -//== Media queries breakpoints -// -//## Define the breakpoints at which your layout will change, adapting to different screen sizes. - -// Extra small screen / phone -//** Deprecated `@screen-xs` as of v3.0.1 -@screen-xs: 480px; -//** Deprecated `@screen-xs-min` as of v3.2.0 -@screen-xs-min: @screen-xs; -//** Deprecated `@screen-phone` as of v3.0.1 -@screen-phone: @screen-xs-min; - -// Small screen / tablet -//** Deprecated `@screen-sm` as of v3.0.1 -@screen-sm: 768px; -@screen-sm-min: @screen-sm; -//** Deprecated `@screen-tablet` as of v3.0.1 -@screen-tablet: @screen-sm-min; - -// Medium screen / desktop -//** Deprecated `@screen-md` as of v3.0.1 -@screen-md: 992px; -@screen-md-min: @screen-md; -//** Deprecated `@screen-desktop` as of v3.0.1 -@screen-desktop: @screen-md-min; - -// Large screen / wide desktop -//** Deprecated `@screen-lg` as of v3.0.1 -@screen-lg: 1200px; -@screen-lg-min: @screen-lg; -//** Deprecated `@screen-lg-desktop` as of v3.0.1 -@screen-lg-desktop: @screen-lg-min; - -// So media queries don't overlap when required, provide a maximum -@screen-xs-max: (@screen-sm-min - 1); -@screen-sm-max: (@screen-md-min - 1); -@screen-md-max: (@screen-lg-min - 1); - - -//== Grid system -// -//## Define your custom responsive grid. - -//** Number of columns in the grid. -@grid-columns: 12; -//** Padding between columns. Gets divided in half for the left and right. -@grid-gutter-width: 30px; -// Navbar collapse -//** Point at which the navbar becomes uncollapsed. -@grid-float-breakpoint: @screen-sm-min; -//** Point at which the navbar begins collapsing. -@grid-float-breakpoint-max: (@grid-float-breakpoint - 1); - - -//== Container sizes -// -//## Define the maximum width of `.container` for different screen sizes. - -// Small screen / tablet -@container-tablet: ((720px + @grid-gutter-width)); -//** For `@screen-sm-min` and up. -@container-sm: @container-tablet; - -// Medium screen / desktop -@container-desktop: ((940px + @grid-gutter-width)); -//** For `@screen-md-min` and up. -@container-md: @container-desktop; - -// Large screen / wide desktop -@container-large-desktop: ((1140px + @grid-gutter-width)); -//** For `@screen-lg-min` and up. -@container-lg: @container-large-desktop; - - -//== Navbar -// -//## - -// Basics of a navbar -@navbar-height: 50px; -@navbar-margin-bottom: @line-height-computed; -@navbar-border-radius: @border-radius-base; -@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); -@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); -@navbar-collapse-max-height: 340px; - -@navbar-default-color: #777; -@navbar-default-bg: #f8f8f8; -@navbar-default-border: darken(@navbar-default-bg, 6.5%); - -// Navbar links -@navbar-default-link-color: #777; -@navbar-default-link-hover-color: #333; -@navbar-default-link-hover-bg: transparent; -@navbar-default-link-active-color: #555; -@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); -@navbar-default-link-disabled-color: #ccc; -@navbar-default-link-disabled-bg: transparent; - -// Navbar brand label -@navbar-default-brand-color: @navbar-default-link-color; -@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%); -@navbar-default-brand-hover-bg: transparent; - -// Navbar toggle -@navbar-default-toggle-hover-bg: #ddd; -@navbar-default-toggle-icon-bar-bg: #888; -@navbar-default-toggle-border-color: #ddd; - - -// Inverted navbar -// Reset inverted navbar basics -@navbar-inverse-color: @gray-light; -@navbar-inverse-bg: #222; -@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); - -// Inverted navbar links -@navbar-inverse-link-color: @gray-light; -@navbar-inverse-link-hover-color: #fff; -@navbar-inverse-link-hover-bg: transparent; -@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; -@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); -@navbar-inverse-link-disabled-color: #444; -@navbar-inverse-link-disabled-bg: transparent; - -// Inverted navbar brand label -@navbar-inverse-brand-color: @navbar-inverse-link-color; -@navbar-inverse-brand-hover-color: #fff; -@navbar-inverse-brand-hover-bg: transparent; - -// Inverted navbar toggle -@navbar-inverse-toggle-hover-bg: #333; -@navbar-inverse-toggle-icon-bar-bg: #fff; -@navbar-inverse-toggle-border-color: #333; - - -//== Navs -// -//## - -//=== Shared nav styles -@nav-link-padding: 10px 15px; -@nav-link-hover-bg: @gray-lighter; - -@nav-disabled-link-color: @gray-light; -@nav-disabled-link-hover-color: @gray-light; - -@nav-open-link-hover-color: #fff; - -//== Tabs -@nav-tabs-border-color: #ddd; - -@nav-tabs-link-hover-border-color: @gray-lighter; - -@nav-tabs-active-link-hover-bg: @body-bg; -@nav-tabs-active-link-hover-color: @gray; -@nav-tabs-active-link-hover-border-color: #ddd; - -@nav-tabs-justified-link-border-color: #ddd; -@nav-tabs-justified-active-link-border-color: @body-bg; - -//== Pills -@nav-pills-border-radius: @border-radius-base; -@nav-pills-active-link-hover-bg: @component-active-bg; -@nav-pills-active-link-hover-color: @component-active-color; - - -//== Pagination -// -//## - -@pagination-color: @link-color; -@pagination-bg: #fff; -@pagination-border: #ddd; - -@pagination-hover-color: @link-hover-color; -@pagination-hover-bg: @gray-lighter; -@pagination-hover-border: #ddd; - -@pagination-active-color: #fff; -@pagination-active-bg: @brand-primary; -@pagination-active-border: @brand-primary; - -@pagination-disabled-color: @gray-light; -@pagination-disabled-bg: #fff; -@pagination-disabled-border: #ddd; - - -//== Pager -// -//## - -@pager-bg: @pagination-bg; -@pager-border: @pagination-border; -@pager-border-radius: 15px; - -@pager-hover-bg: @pagination-hover-bg; - -@pager-active-bg: @pagination-active-bg; -@pager-active-color: @pagination-active-color; - -@pager-disabled-color: @pagination-disabled-color; - - -//== Jumbotron -// -//## - -@jumbotron-padding: 30px; -@jumbotron-color: inherit; -@jumbotron-bg: @gray-lighter; -@jumbotron-heading-color: inherit; -@jumbotron-font-size: ceil((@font-size-base * 1.5)); - - -//== Form states and alerts -// -//## Define colors for form feedback states and, by default, alerts. - -@state-success-text: #3c763d; -@state-success-bg: #dff0d8; -@state-success-border: darken(spin(@state-success-bg, -10), 5%); - -@state-info-text: #31708f; -@state-info-bg: #d9edf7; -@state-info-border: darken(spin(@state-info-bg, -10), 7%); - -@state-warning-text: #8a6d3b; -@state-warning-bg: #fcf8e3; -@state-warning-border: darken(spin(@state-warning-bg, -10), 5%); - -@state-danger-text: #a94442; -@state-danger-bg: #f2dede; -@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); - - -//== Tooltips -// -//## - -//** Tooltip max width -@tooltip-max-width: 200px; -//** Tooltip text color -@tooltip-color: #fff; -//** Tooltip background color -@tooltip-bg: #000; -@tooltip-opacity: .9; - -//** Tooltip arrow width -@tooltip-arrow-width: 5px; -//** Tooltip arrow color -@tooltip-arrow-color: @tooltip-bg; - - -//== Popovers -// -//## - -//** Popover body background color -@popover-bg: #fff; -//** Popover maximum width -@popover-max-width: 276px; -//** Popover border color -@popover-border-color: rgba(0,0,0,.2); -//** Popover fallback border color -@popover-fallback-border-color: #ccc; - -//** Popover title background color -@popover-title-bg: darken(@popover-bg, 3%); - -//** Popover arrow width -@popover-arrow-width: 10px; -//** Popover arrow color -@popover-arrow-color: #fff; - -//** Popover outer arrow width -@popover-arrow-outer-width: (@popover-arrow-width + 1); -//** Popover outer arrow color -@popover-arrow-outer-color: fadein(@popover-border-color, 5%); -//** Popover outer arrow fallback color -@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); - - -//== Labels -// -//## - -//** Default label background color -@label-default-bg: @gray-light; -//** Primary label background color -@label-primary-bg: @brand-primary; -//** Success label background color -@label-success-bg: @brand-success; -//** Info label background color -@label-info-bg: @brand-info; -//** Warning label background color -@label-warning-bg: @brand-warning; -//** Danger label background color -@label-danger-bg: @brand-danger; - -//** Default label text color -@label-color: #fff; -//** Default text color of a linked label -@label-link-hover-color: #fff; - - -//== Modals -// -//## - -//** Padding applied to the modal body -@modal-inner-padding: 15px; - -//** Padding applied to the modal title -@modal-title-padding: 15px; -//** Modal title line-height -@modal-title-line-height: @line-height-base; - -//** Background color of modal content area -@modal-content-bg: #fff; -//** Modal content border color -@modal-content-border-color: rgba(0,0,0,.2); -//** Modal content border color **for IE8** -@modal-content-fallback-border-color: #999; - -//** Modal backdrop background color -@modal-backdrop-bg: #000; -//** Modal backdrop opacity -@modal-backdrop-opacity: .5; -//** Modal header border color -@modal-header-border-color: #e5e5e5; -//** Modal footer border color -@modal-footer-border-color: @modal-header-border-color; - -@modal-lg: 900px; -@modal-md: 600px; -@modal-sm: 300px; - - -//== Alerts -// -//## Define alert colors, border radius, and padding. - -@alert-padding: 15px; -@alert-border-radius: @border-radius-base; -@alert-link-font-weight: bold; - -@alert-success-bg: @state-success-bg; -@alert-success-text: @state-success-text; -@alert-success-border: @state-success-border; - -@alert-info-bg: @state-info-bg; -@alert-info-text: @state-info-text; -@alert-info-border: @state-info-border; - -@alert-warning-bg: @state-warning-bg; -@alert-warning-text: @state-warning-text; -@alert-warning-border: @state-warning-border; - -@alert-danger-bg: @state-danger-bg; -@alert-danger-text: @state-danger-text; -@alert-danger-border: @state-danger-border; - - -//== Progress bars -// -//## - -//** Background color of the whole progress component -@progress-bg: #f5f5f5; -//** Progress bar text color -@progress-bar-color: #fff; - -//** Default progress bar color -@progress-bar-bg: @brand-primary; -//** Success progress bar color -@progress-bar-success-bg: @brand-success; -//** Warning progress bar color -@progress-bar-warning-bg: @brand-warning; -//** Danger progress bar color -@progress-bar-danger-bg: @brand-danger; -//** Info progress bar color -@progress-bar-info-bg: @brand-info; - - -//== List group -// -//## - -//** Background color on `.list-group-item` -@list-group-bg: #fff; -//** `.list-group-item` border color -@list-group-border: #ddd; -//** List group border radius -@list-group-border-radius: @border-radius-base; - -//** Background color of single list items on hover -@list-group-hover-bg: #f5f5f5; -//** Text color of active list items -@list-group-active-color: @component-active-color; -//** Background color of active list items -@list-group-active-bg: @component-active-bg; -//** Border color of active list elements -@list-group-active-border: @list-group-active-bg; -//** Text color for content within active list items -@list-group-active-text-color: lighten(@list-group-active-bg, 40%); - -//** Text color of disabled list items -@list-group-disabled-color: @gray-light; -//** Background color of disabled list items -@list-group-disabled-bg: @gray-lighter; -//** Text color for content within disabled list items -@list-group-disabled-text-color: @list-group-disabled-color; - -@list-group-link-color: #555; -@list-group-link-hover-color: @list-group-link-color; -@list-group-link-heading-color: #333; - - -//== Panels -// -//## - -@panel-bg: #fff; -@panel-body-padding: 15px; -@panel-heading-padding: 10px 15px; -@panel-footer-padding: @panel-heading-padding; -@panel-border-radius: @border-radius-base; - -//** Border color for elements within panels -@panel-inner-border: #ddd; -@panel-footer-bg: #f5f5f5; - -@panel-default-text: @gray-dark; -@panel-default-border: #ddd; -@panel-default-heading-bg: #f5f5f5; - -@panel-primary-text: #fff; -@panel-primary-border: @brand-primary; -@panel-primary-heading-bg: @brand-primary; - -@panel-success-text: @state-success-text; -@panel-success-border: @state-success-border; -@panel-success-heading-bg: @state-success-bg; - -@panel-info-text: @state-info-text; -@panel-info-border: @state-info-border; -@panel-info-heading-bg: @state-info-bg; - -@panel-warning-text: @state-warning-text; -@panel-warning-border: @state-warning-border; -@panel-warning-heading-bg: @state-warning-bg; - -@panel-danger-text: @state-danger-text; -@panel-danger-border: @state-danger-border; -@panel-danger-heading-bg: @state-danger-bg; - - -//== Thumbnails -// -//## - -//** Padding around the thumbnail image -@thumbnail-padding: 4px; -//** Thumbnail background color -@thumbnail-bg: @body-bg; -//** Thumbnail border color -@thumbnail-border: #ddd; -//** Thumbnail border radius -@thumbnail-border-radius: @border-radius-base; - -//** Custom text color for thumbnail captions -@thumbnail-caption-color: @text-color; -//** Padding around the thumbnail caption -@thumbnail-caption-padding: 9px; - - -//== Wells -// -//## - -@well-bg: #f5f5f5; -@well-border: darken(@well-bg, 7%); - - -//== Badges -// -//## - -@badge-color: #fff; -//** Linked badge text color on hover -@badge-link-hover-color: #fff; -@badge-bg: @gray-light; - -//** Badge text color in active nav link -@badge-active-color: @link-color; -//** Badge background color in active nav link -@badge-active-bg: #fff; - -@badge-font-weight: bold; -@badge-line-height: 1; -@badge-border-radius: 10px; - - -//== Breadcrumbs -// -//## - -@breadcrumb-padding-vertical: 8px; -@breadcrumb-padding-horizontal: 15px; -//** Breadcrumb background color -@breadcrumb-bg: #f5f5f5; -//** Breadcrumb text color -@breadcrumb-color: #ccc; -//** Text color of current page in the breadcrumb -@breadcrumb-active-color: @gray-light; -//** Textual separator for between breadcrumb elements -@breadcrumb-separator: "/"; - - -//== Carousel -// -//## - -@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6); - -@carousel-control-color: #fff; -@carousel-control-width: 15%; -@carousel-control-opacity: .5; -@carousel-control-font-size: 20px; - -@carousel-indicator-active-bg: #fff; -@carousel-indicator-border-color: #fff; - -@carousel-caption-color: #fff; - - -//== Close -// -//## - -@close-font-weight: bold; -@close-color: #000; -@close-text-shadow: 0 1px 0 #fff; - - -//== Code -// -//## - -@code-color: #c7254e; -@code-bg: #f9f2f4; - -@kbd-color: #fff; -@kbd-bg: #333; - -@pre-bg: #f5f5f5; -@pre-color: @gray-dark; -@pre-border-color: #ccc; -@pre-scrollable-max-height: 340px; - - -//== Type -// -//## - -//** Horizontal offset for forms and lists. -@component-offset-horizontal: 180px; -//** Text muted color -@text-muted: @gray-light; -//** Abbreviations and acronyms border color -@abbr-border-color: @gray-light; -//** Headings small color -@headings-small-color: @gray-light; -//** Blockquote small color -@blockquote-small-color: @gray-light; -//** Blockquote font size -@blockquote-font-size: (@font-size-base * 1.25); -//** Blockquote border color -@blockquote-border-color: @gray-lighter; -//** Page header border color -@page-header-border-color: @gray-lighter; -//** Width of horizontal description list titles -@dl-horizontal-offset: @component-offset-horizontal; -//** Horizontal line color. -@hr-border: @gray-lighter; - - diff --git a/platforms/browser/www/lib/bootstrap/less/wells.less b/platforms/browser/www/lib/bootstrap/less/wells.less deleted file mode 100644 index 15d072b0..00000000 --- a/platforms/browser/www/lib/bootstrap/less/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @well-bg; - border: 1px solid @well-border; - border-radius: @border-radius-base; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-lg { - padding: 24px; - border-radius: @border-radius-large; -} -.well-sm { - padding: 9px; - border-radius: @border-radius-small; -} diff --git a/platforms/browser/www/lib/bootstrap/package.json b/platforms/browser/www/lib/bootstrap/package.json deleted file mode 100644 index 3243fa8b..00000000 --- a/platforms/browser/www/lib/bootstrap/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.2.0", - "keywords": [ - "css", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "author": "Twitter, Inc.", - "scripts": { - "test": "grunt test" - }, - "style": "dist/css/bootstrap.css", - "less": "less/bootstrap.less", - "repository": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git" - }, - "bugs": { - "url": "https://github.com/twbs/bootstrap/issues" - }, - "license": { - "type": "MIT", - "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE" - }, - "devDependencies": { - "btoa": "~1.1.2", - "glob": "~4.0.2", - "grunt": "~0.4.5", - "grunt-autoprefixer": "~0.7.6", - "grunt-banner": "~0.2.3", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-concat": "~0.4.0", - "grunt-contrib-connect": "~0.8.0", - "grunt-contrib-copy": "~0.5.0", - "grunt-contrib-csslint": "~0.2.0", - "grunt-contrib-cssmin": "~0.10.0", - "grunt-contrib-jade": "~0.12.0", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-less": "~0.11.3", - "grunt-contrib-qunit": "~0.5.1", - "grunt-contrib-uglify": "~0.5.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-csscomb": "~2.0.1", - "grunt-exec": "~0.4.5", - "grunt-html-validation": "~0.1.18", - "grunt-jekyll": "~0.4.2", - "grunt-jscs-checker": "~0.6.0", - "grunt-saucelabs": "~8.1.0", - "grunt-sed": "~0.1.1", - "load-grunt-tasks": "~0.6.0", - "markdown": "~0.5.0", - "npm-shrinkwrap": "~3.1.6", - "time-grunt": "~0.3.2" - }, - "engines": { - "node": "~0.10.1" - }, - "jspm": { - "main": "js/bootstrap", - "directories": { - "example": "examples", - "lib": "dist" - }, - "shim": { - "js/bootstrap": { - "imports": "jquery", - "exports": "$" - } - }, - "buildConfig": { - "uglify": true - } - } -} diff --git a/platforms/browser/www/lib/ckeditor/.bower.json b/platforms/browser/www/lib/ckeditor/.bower.json deleted file mode 100644 index 122e71a9..00000000 --- a/platforms/browser/www/lib/ckeditor/.bower.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "keywords": [ - "ckeditor", - "fckeditor", - "editor", - "wysiwyg", - "html", - "richtext", - "text", - "javascript" - ], - "authors": "CKSource (http://cksource.com/)", - "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", - "homepage": "http://ckeditor.com", - "version": "4.4.5", - "_release": "4.4.5", - "_resolution": { - "type": "version", - "tag": "4.4.5", - "commit": "68cc6ad041e5268fd0d1445802a7d6a6ce6e1802" - }, - "_source": "git://github.com/ckeditor/ckeditor-releases.git", - "_target": "~4.4.5", - "_originalSource": "ckeditor", - "_direct": true -} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/CHANGES.md b/platforms/browser/www/lib/ckeditor/CHANGES.md deleted file mode 100644 index 9bfaef34..00000000 --- a/platforms/browser/www/lib/ckeditor/CHANGES.md +++ /dev/null @@ -1,671 +0,0 @@ -CKEditor 4 Changelog -==================== - -## CKEditor 4.4.5 - -New Features: - -* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). - -Fixed Issues: - -* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. -* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! -* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! -* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! -* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! -* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. -* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. -* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). -* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements. -* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. -* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. -* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. -* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. -* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. -* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. -* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. -* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. - - -## CKEditor 4.4.4 - -Fixed Issues: - -* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! -* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word]((http://ckeditor.com/addon/pastefromword)) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: - * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. - * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. - * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. -* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. -* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. -* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. -* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. -* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. -* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. -* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. -* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. -* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. -* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. -* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line. -* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). -* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. -* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. - - -Other Changes: - -* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. - -## CKEditor 4.4.3 - -**Security Updates:** - -* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). - -**An upgrade is highly recommended!** - -New Features: - -* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. - -Fixed Issues: - -* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! -* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: **Enter** key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! -* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. -* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. -* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). -* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. -* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element. -* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. - -## CKEditor 4.4.2 - -Important Notes: - -* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. - Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). - -New Features: - -* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. - -Fixed Issues: - -* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! -* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! -* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. -* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. -* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. -* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). -* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. -* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). -* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. -* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. -* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection). -* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. -* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. -* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. -* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. -* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. -* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. -* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. -* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. -* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. -* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. -* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. - -## CKEditor 4.4.1 - -New Features: - -* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. - -Fixed Issues: - -* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. -* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! -* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! -* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element. -* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element. -* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. -* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. -* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. -* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. -* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. -* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). -* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). -* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. -* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. -* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. -* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. -* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. -* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. -* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. -* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. -* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. -* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. -* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. - -Other Changes: - -* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. -* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. -* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. - -## CKEditor 4.4 - -**Important Notes:** - -* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. -* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. -* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. -* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). -* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. - -New Features: - -* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: - * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. - * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. - * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). - * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). -* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: - * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. - * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. - If this setting is defined, the editor produces classes instead of inline styles for aligned images. - * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. -* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. -* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. -* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. -* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). -* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). -* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. -* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. - -Other Changes: - -* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). -* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. -* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: - * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. - * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. - * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). -* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. - -Fixed Issues: - -* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. -* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. - -## CKEditor 4.3.5 - -New Features: - -* Added new translation: Tatar. - -Fixed Issues: - -* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. -* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. - -## CKEditor 4.3.4 - -Fixed Issues: - -* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. -* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. -* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. -* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. -* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. -* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. -* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. -* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. -* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. -* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. - -## CKEditor 4.3.3 - -Fixed Issues: - -* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). -* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. -* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. -* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). -* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. -* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. -* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. -* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. -* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. -* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. -* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. -* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. -* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. -* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. -* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. -* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. -* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. -* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. -* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). -* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. - -## CKEditor 4.3.2 - -Fixed Issues: - -* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. -* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: - * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. - * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. - * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. - * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. -* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. -* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: - * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. - * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. -* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. -* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). -* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. -* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. -* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. -* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. -* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. -* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. -* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. -* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. -* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. -* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. -* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. -* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. -* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). -* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. -* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. -* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. -* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. -* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. -* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. -* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. -* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. - -## CKEditor 4.3.1 - -**Important Notes:** - -* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). -* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). - -Fixed Issues: - -* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. -* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. -* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. -* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. -* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. -* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. -* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. -* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. -* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. -* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. -* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. -* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. -* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. -* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. -* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. -* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. -* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. -* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. -* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. -* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. -* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. -* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. -* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. -* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. -* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. -* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. - -## CKEditor 4.3 - -New Features: - -* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. -* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. -* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. -* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. -* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. -* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. -* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. -* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: - * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), - * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), - * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), - * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), - * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), - * fixing other minor bugs. -* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. -* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. -* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. -* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. -* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). -* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. - -Fixed Issues: - -* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. -* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. -* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. -* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. -* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. -* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. -* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. -* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. -* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. -* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. -* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. -* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. -* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. -* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. -* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. -* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. -* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. -* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. -* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. -* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. -* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. -* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. -* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. -* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. -* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. -* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. -* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). - -## CKEditor 4.3 Beta - -New Features: - -* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. - * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). - * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). - * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. - * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). - * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. - * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. - * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. - * Dozens of new methods were introduced &ndash; most interesting ones: - * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), - * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), - * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), - * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), - * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). -* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. -* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. -* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). -* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). - -## CKEditor 4.2.3 - -Fixed Issues: - -* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. -* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. -* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. -* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). -* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. - -## CKEditor 4.2.2 - -Fixed Issues: - -* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. -* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. -* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. -* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. -* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. -* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. -* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. -* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. -* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. -* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. -* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). -* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). -* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. -* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. - -## CKEditor 4.2.1 - -Fixed Issues: - -* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. -* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. -* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. -* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. -* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. -* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. -* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. -* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. -* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. -* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. -* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. -* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. -* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. -* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. - -## CKEditor 4.2 - -**Important Notes:** - -* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. - -* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). - -New Features: - -* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). -* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. -* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). -* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. -* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. -* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. -* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. -* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. - -Fixed Issues: - -* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. -* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. -* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). - -## CKEditor 4.1.3 - -New Features: - -* Added new translation: Indonesian. - -Fixed Issues: - -* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. -* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". -* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. -* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). -* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. - -## CKEditor 4.1.2 - -New Features: - -* Added new translation: Sinhala. - -Fixed Issues: - -* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. -* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. -* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. -* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. -* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). -* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. -* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). -* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. -* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. -* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. -* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. -* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. -* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. - -## CKEditor 4.1.1 - -New Features: - -* Added new translation: Albanian. - -Fixed Issues: - -* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. -* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. -* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. -* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. -* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. -* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). -* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). -* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. -* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. -* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. -* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. -* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. -* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. -* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). - -## CKEditor 4.1 - -Fixed Issues: - -* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. -* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. -* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. -* Minor issues in plugin integration with Advanced Content Filter: - * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. - * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. - * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. - -## CKEditor 4.1 RC - -New Features: - -* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. - - Brand new data filtering system that works in 2 modes: - - * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its - current configuration can handle. - * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data - will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. - - See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). -* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. -* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. -* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. -* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. -* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. -* Included in [#10103](http://dev.ckeditor.com/ticket/10103): - * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. - * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. -* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. - -## CKEditor 4.0.3 - -Fixed Issues: - -* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. -* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. -* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). - -## CKEditor 4.0.2 - -Fixed Issues: - -* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. -* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). -* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. -* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. -* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. -* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. -* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. -* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. -* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. -* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. -* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. -* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. -* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. -* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. -* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. -* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. -* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. -* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. -* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. - -## CKEditor 4.0.1.1 - -Fixed Issues: - -* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. - -## CKEditor 4.0.1 - -Fixed Issues: - -* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). -* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). -* [Magic Line](http://ckeditor.com/addon/magicline) plugin: - * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. - * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. - * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. -* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. -* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. -* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. -* Context menu: - * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. - * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. - * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. -* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. -* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. -* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. -* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. -* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. -* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. -* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. -* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. -* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. -* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. -* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. -* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. -* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. -* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. -* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. -* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. -* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). -* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. -* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. -* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. -* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. -* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. -* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. -* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. -* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. - - -## CKEditor 4.0 - -The first stable release of the new CKEditor 4 code line. - -The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever -possible. The list of relevant changes can be found in the [API Changes page of -the CKEditor 4 documentation][1]. - -[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/platforms/browser/www/lib/ckeditor/LICENSE.md b/platforms/browser/www/lib/ckeditor/LICENSE.md deleted file mode 100644 index b6e0b9ca..00000000 --- a/platforms/browser/www/lib/ckeditor/LICENSE.md +++ /dev/null @@ -1,1264 +0,0 @@ -Software License Agreement -========================== - -CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your -choice: - - - GNU General Public License Version 2 or later (the "GPL") - http://www.gnu.org/licenses/gpl.html - (See Appendix A) - - - GNU Lesser General Public License Version 2.1 or later (the "LGPL") - http://www.gnu.org/licenses/lgpl.html - (See Appendix B) - - - Mozilla Public License Version 1.1 or later (the "MPL") - http://www.mozilla.org/MPL/MPL-1.1.html - (See Appendix C) - -You are not required to, but if you want to explicitly declare the -license you have chosen to be bound to when using, reproducing, -modifying and distributing this software, just include a text file -titled "legal.txt" in your version of this software, indicating your -license choice. In any case, your choice will not restrict any -recipient of your version of this software to use, reproduce, modify -and distribute this software under any of the above licenses. - -Sources of Intellectual Property Included in CKEditor ------------------------------------------------------ - -Where not otherwise indicated, all CKEditor content is authored by -CKSource engineers and consists of CKSource-owned intellectual -property. In some specific instances, CKEditor will incorporate work -done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand -and product names are trademarks, registered trademarks or service -marks of their respective holders. - ---- - -Appendix A: The GPL License ---------------------------- - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software-to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix B: The LGPL License ----------------------------- - -GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software-to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages-typically libraries-of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -GNU LESSER GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - -NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - -END OF TERMS AND CONDITIONS - - -Appendix C: The MPL License ---------------------------- - -MOZILLA PUBLIC LICENSE -Version 1.1 - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'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. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning 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. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] diff --git a/platforms/browser/www/lib/ckeditor/README.md b/platforms/browser/www/lib/ckeditor/README.md deleted file mode 100644 index d6b5e2af..00000000 --- a/platforms/browser/www/lib/ckeditor/README.md +++ /dev/null @@ -1,82 +0,0 @@ -CKEditor 4 - Releases -===================== - -## Releases Code - -This repository contains the official release versions of [CKEditor](http://ckeditor.com). - -There are four versions for each release &mdash; `standard-all`, `basic`, `standard`, and `full`. -They differ in the number of plugins that are compiled into the main `ckeditor.js` file as well as the toolbar configuration. - -See the [comparison](http://ckeditor.com/presets) of the `basic`, `standard`, and `full` installation presets for more details. - -The `standard-all` build includes all official CKSource plugins with only those from the `standard` installation preset compiled into the `ckeditor.js` file and enabled in the configuration. - -All versions available in this repository were built using [CKBuilder](http://ckeditor.com/builder), so they are optimized and ready to be used in a production environment. - -## Documentation - -Developer documentation for CKEditor is available online at: <http://docs.ckeditor.com>. - -## Installation - -### Git clone - -To install one of the available releases, just clone this repository and switch to the respective branch (see next section): - - git clone -b <release branch> git://github.com/ckeditor/ckeditor-releases.git - -### Git submodule - -If you are using git for your project and you want to integrate CKEditor, we recommend to add this repository as a -[submodule](http://git-scm.com/book/en/Git-Tools-Submodules). - - git submodule add -b <release branch> git://github.com/ckeditor/ckeditor-releases.git <clone dir> - git commit -m "Added CKEditor submodule in <clone dir> directory." - -### Using Package Managers - -See the [Installing CKEditor with Package Managers](http://docs.ckeditor.com/#!/guide/dev_package_managers) article for more details about installing CKEditor with Bower and Composer. - -## Repository Structure - -### Branches - -This repository contains the following branches: - - - `master` and `latest` &ndash; the latest release of the `standard-all` preset (including betas). - - `stable` &ndash; the latest stable release of the `standard-all` preset (non-beta). - - `A.B.x` (e.g. `4.3.x`) &ndash; the latest release of the `standard-all` preset in the `A.B` branch. - - `(basic|standard|full)/stable` &ndash; the latest stable release tag point (non-beta). - - `(basic|standard|full)/latest` &ndash; the latest release tag point (including betas). - - `(basic|standard|full)/A.B.x` (e.g. `basic/4.0.x`) &ndash; the latest releases in the `A.B` branch. - -### Tags - -**Since version 4.3.3** this repository uses the following tag naming rules: - - - `x.y.z` &ndash; contains the `standard-all` editor build, e.g. `4.3.3`, `4.4.0` etc. - - `(basic|standard|full)/x.y.z` &ndash; contains the editor build with a given preset, e.g. `basic/4.3.3`. - -The version numbers follow the [Semantic Versioning 2.0.0](http://semver.org/) scheme. - -Up to version **4.3.2** the tags were released in the following form `x.y[.z]/(basic|standard|full)`. -For example: `4.0/basic`, `4.0.1/standard`. This convention was changed in CKEditor 4.3.3 to conform to the Semantic Versioning scheme. - -## Checking Your Installation - -The editor comes with a few sample pages that can be used to verify if the installation succeeded. Take a look at the `samples` directory. - -To test your installation, just call the following page for your website: - - http://<your site>/<CKEditor installation path>/samples/index.html - -For example: - - http://www.example.com/ckeditor/samples/index.html - -### License - -Licensed under the GPL, LGPL, and MPL licenses, at your choice. - -Please check the `LICENSE.md` file for more information about the license. \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/adapters/jquery.js b/platforms/browser/www/lib/ckeditor/adapters/jquery.js deleted file mode 100644 index 3ec908b0..00000000 --- a/platforms/browser/www/lib/ckeditor/adapters/jquery.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= -a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", -!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); -return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, -100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); -return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/bower.json b/platforms/browser/www/lib/ckeditor/bower.json deleted file mode 100644 index 9654c47a..00000000 --- a/platforms/browser/www/lib/ckeditor/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "authors": "CKSource (http://cksource.com/)", - "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", - "homepage": "http://ckeditor.com" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/ckeditor.js b/platforms/browser/www/lib/ckeditor/ckeditor.js deleted file mode 100644 index ab3e3e54..00000000 --- a/platforms/browser/www/lib/ckeditor/ckeditor.js +++ /dev/null @@ -1,935 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){if(!window.CKEDITOR||!window.CKEDITOR.dom)window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"E8PD",version:"4.4.5 (Standard)",revision:"25cdcad",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var c=window.CKEDITOR_BASEPATH||"";if(!c)for(var d=document.getElementsByTagName("script"),b=0;b<d.length;b++){var f=d[b].src.match(a);if(f){c=f[1];break}}-1==c.indexOf(":/")&& -"//"!=c.slice(0,2)&&(c=0===c.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+c:location.href.match(/^[^\?]*\/(?:)/)[0]+c);if(!c)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return c}(),getUrl:function(c){-1==c.indexOf(":/")&&0!==c.indexOf("/")&&(c=this.basePath+c);this.timestamp&&("/"!=c.charAt(c.length-1)&&!/[&?]t=/.test(c))&&(c+=(0<=c.indexOf("?")?"&":"?")+"t="+this.timestamp); -return c},domReady:function(){function c(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",c,!1),a()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",c),a())}catch(b){}}function a(){for(var c;c=b.shift();)c()}var b=[];return function(a){function d(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(d,1);return}c()}b.push(a);"complete"===document.readyState&&setTimeout(c,1);if(1==b.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded", -c,!1),window.addEventListener("load",c,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",c);window.attachEvent("onload",c);a=!1;try{a=!window.frameElement}catch(g){}document.documentElement.doScroll&&a&&d()}}}()},b=window.CKEDITOR_GETURL;if(b){var g=e.getUrl;e.getUrl=function(a){return b.call(e,a)||g.call(e,a)}}return e}()),CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==null&&(a[b]=e[b])}, -CKEDITOR.event.prototype=function(){function a(a){var c=e(this);return c[a]||(c[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var c=0,d=this.listeners;c<d.length;c++)if(d[c].fn==a)return c;return-1}};return{define:function(b,c){var d=a.call(this,b);CKEDITOR.tools.extend(d,c,true)},on:function(b,c,d,i,f){function h(a,k,f,h){a={name:b,sender:this, -editor:a,data:k,listenerData:i,stop:f,cancel:h,removeListener:e};return c.call(d,a)===false?false:a.data}function e(){m.removeListener(b,c)}var k=a.call(this,b);if(k.getListenerIndex(c)<0){k=k.listeners;d||(d=this);isNaN(f)&&(f=10);var m=this;h.fn=c;h.priority=f;for(var q=k.length-1;q>=0;q--)if(k[q].priority<=f){k.splice(q+1,0,h);return{removeListener:e}}k.unshift(h)}return{removeListener:e}},once:function(){var a=Array.prototype.slice.call(arguments),c=a[1];a[1]=function(a){a.removeListener();return c.apply(this, -arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,c=function(){a=1},d=0,b=function(){d=1};return function(f,h,j){var k=e(this)[f],f=a,m=d;a=d=0;if(k){var q=k.listeners;if(q.length)for(var q=q.slice(0),s,n=0;n<q.length;n++){if(k.errorProof)try{s=q[n].call(this,j,h,c,b)}catch(l){}else s=q[n].call(this,j,h,c,b);s===false?d=1:typeof s!="undefined"&&(h=s);if(a||d)break}}h= -d?false:typeof h=="undefined"?true:h;a=f;d=m;return h}}(),fireOnce:function(a,c,d){c=this.fire(a,c,d);delete e(this)[a];return c},removeListener:function(a,c){var d=e(this)[a];if(d){var b=d.getListenerIndex(c);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),c;for(c in a)delete a[c]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length>0}}}()),CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire= -function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)),CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")> --1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol=="https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode? -parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var g=a.match(/rv:([\d\.]+)/);if(g){g=g[1].split(".");b=g[0]*1E4+(g[1]||0)*100+(g[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>= -2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air";if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()),"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR); -CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status= -"basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}(),CKEDITOR.dom={},function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,g=/>/g,c=/</g,d=/"/g,i=/&amp;/g,f=/&gt;/g,h=/&lt;/g,j=/&quot;/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,c){if(!a&&!c)return true;if(!a||!c||a.length!=c.length)return false;for(var d=0;d< -a.length;d++)if(a[d]!=c[d])return false;return true},clone:function(a){var c;if(a&&a instanceof Array){c=[];for(var d=0;d<a.length;d++)c[d]=CKEDITOR.tools.clone(a[d]);return c}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;c=new a.constructor;for(d in a)c[d]=CKEDITOR.tools.clone(a[d]);return c},capitalize:function(a,c){return a.charAt(0).toUpperCase()+(c?a.slice(1):a.slice(1).toLowerCase())}, -extend:function(a){var c=arguments.length,d,b;if(typeof(d=arguments[c-1])=="boolean")c--;else if(typeof(d=arguments[c-2])=="boolean"){b=arguments[c-1];c=c-2}for(var f=1;f<c;f++){var g=arguments[f],i;for(i in g)if(d===true||a[i]==null)if(!b||i in b)a[i]=g[i]}return a},prototypedCopy:function(a){var c=function(){};c.prototype=a;return new c},copy:function(a){var c={},d;for(d in a)c[d]=a[d];return c},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var c in a)if(a.hasOwnProperty(c))return false; -return true},cssVendorPrefix:function(a,c,d){if(d)return e+a+":"+c+";"+a+":"+c;d={};d[a]=c;d[e+a]=c;return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,c=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?c:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),c,d=[],b=0;b<a.length;b++)if(c=a[b])/@import|[{}]/.test(c)?d.push("<style>"+ -c+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+c+'">');return d.join("")},htmlEncode:function(a){return(""+a).replace(b,"&amp;").replace(g,"&gt;").replace(c,"&lt;")},htmlDecode:function(a){return a.replace(i,"&").replace(f,">").replace(h,"<")},htmlEncodeAttr:function(a){return a.replace(d,"&quot;").replace(c,"&lt;").replace(g,"&gt;")},htmlDecodeAttr:function(a){return a.replace(j,'"').replace(h,"<").replace(f,">")},getNextNumber:function(){var a=0;return function(){return++a}}(), -getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,c){var d=c(a);d.prototype=a.prototype;return d},setTimeout:function(a,c,d,b,f){f||(f=window);d||(d=f);return f.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},c||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(c){return c.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(c){return c.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(c){return c.replace(a, -"")}}(),indexOf:function(a,c){if(typeof c=="function")for(var d=0,b=a.length;d<b;d++){if(c(a[d]))return d}else{if(a.indexOf)return a.indexOf(c);d=0;for(b=a.length;d<b;d++)if(a[d]===c)return d}return-1},search:function(a,c){var d=CKEDITOR.tools.indexOf(a,c);return d>=0?a[d]:null},bind:function(a,c){return function(){return a.apply(c,arguments)}},createClass:function(a){var c=a.$,d=a.base,b=a.privates||a._,f=a.proto,a=a.statics;!c&&(c=function(){d&&this.base.apply(this,arguments)});if(b)var i=c,c=function(){var a= -this._||(this._={}),c;for(c in b){var d=b[c];a[c]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}i.apply(this,arguments)};if(d){c.prototype=this.prototypedCopy(d.prototype);c.prototype.constructor=c;c.base=d;c.baseProto=d.prototype;c.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}f&&this.extend(c.prototype,f,true);a&&this.extend(c,a,true);return c},addFunction:function(c,d){return a.push(function(){return c.apply(d||this,arguments)})-1}, -removeFunction:function(c){a[c]=null},callFunction:function(c){var d=a[c];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,c;return function(d){c=CKEDITOR.tools.trim(d+"")+"px";return a.test(c)?c:d||""}}(),convertToPx:function(){var a;return function(c){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(c)){a.setStyle("width", -c);return a.$.clientWidth}return c}}(),repeat:function(a,c){return Array(c+1).join(a)},tryThese:function(){for(var a,c=0,d=arguments.length;c<d;c++){var b=arguments[c];try{a=b();break}catch(f){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var c=arguments,d=this;window.setTimeout(function(){a.apply(d,c)},0)}},normalizeCssText:function(a,c){var d=[],b,f=CKEDITOR.tools.parseCssText(a,true,c);for(b in f)d.push(b+":"+f[b]);d.sort(); -return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,c,d,b){a=[c,d,b];for(c=0;c<3;c++)a[c]=("0"+parseInt(a[c],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,c,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, -function(a,d,f){if(c){d=d.toLowerCase();d=="font-family"&&(f=f.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));f=CKEDITOR.tools.trim(f)}b[d]=f});return b},writeCssText:function(a,c){var d,b=[];for(d in a)b.push(d+":"+a[d]);c&&b.sort();return b.join("; ")},objectCompare:function(a,c,d){var b;if(!a&&!c)return true;if(!a||!c)return false;for(b in a)if(a[b]!=c[b])return false;if(!d)for(b in c)if(a[b]!=c[b])return false;return true},objectKeys:function(a){var c=[],d;for(d in a)c.push(d);return c}, -convertArrayToObject:function(a,c){var d={};arguments.length==1&&(c=true);for(var b=0,f=a.length;b<f;++b)d[a[b]]=c;return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(c){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,c){function d(){f=(new Date).getTime();b=false;c()}var b,f=0;return{input:function(){if(!b){var c=(new Date).getTime()-f;c<a?b=setTimeout(d,a-c):d()}},reset:function(){b&&clearTimeout(b); -b=f=0}}},enableHtml5Elements:function(a,c){for(var d=["abbr","article","aside","audio","bdi","canvas","data","datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,f;b--;){f=a.createElement(d[b]);c&&a.appendChild(f)}},checkIfAnyArrayItemMatches:function(a,c){for(var d=0,b=a.length;d<b;++d)if(a[d].match(c))return true;return false},checkIfAnyObjectPropertyMatches:function(a,c){for(var d in a)if(d.match(c))return true; -return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}}(),CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,c){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var c=arguments[b],f;for(f in c)delete d[f]}return d},b={},g={},c={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1, -table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},i={},f={"#":1},h={center:1,dir:1,noframes:1};a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},f,{acronym:1,applet:1, -basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(g,c,b,h);e={a:e(b,{a:1,button:1}),abbr:b,address:g,area:i,article:a({style:1},g),aside:a({style:1},g),audio:a({source:1,track:1},g),b:b,base:i,bdi:b,bdo:b,blockquote:g,body:g,br:i,button:e(b,{a:1,button:1}),canvas:b,caption:g,cite:b,code:b,col:i,colgroup:{col:1},command:i,datalist:a({option:1},b),dd:g,del:b,details:a({summary:1},g),dfn:b,div:a({style:1},g),dl:{dt:1,dd:1},dt:g,em:b,embed:i,fieldset:a({legend:1},g),figcaption:g,figure:a({figcaption:1}, -g),footer:g,form:g,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:g,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:i,html:a({head:1,body:1},g,d),i:b,iframe:f,img:i,input:i,ins:b,kbd:b,keygen:i,label:b,legend:b,li:g,link:i,map:g,mark:b,menu:a({li:1},g),meta:i,meter:e(b,{meter:1}),nav:g,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:f,output:b,p:b,param:i,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:f, -section:a({style:1},g),select:{optgroup:1,option:1},small:b,source:i,span:b,strong:b,style:f,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:g,textarea:f,tfoot:{tr:1},th:g,thead:{tr:1},time:e(b,{time:1}),title:f,tr:{th:1,td:1},track:i,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},g),wbr:i,acronym:b,applet:a({param:1},g),basefont:i,big:b,center:g,dialog:i,dir:{li:1},font:b,isindex:i,noframes:g,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1, -li:1,video:1},c,h),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1, -dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1, -del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1, -tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}(),CKEDITOR.dom.event=function(a){this.$=a},CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a= -this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a=this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}},CKEDITOR.CTRL=1114112,CKEDITOR.SHIFT=2228224,CKEDITOR.ALT= -4456448,CKEDITOR.EVENT_PHASE_CAPTURING=1,CKEDITOR.EVENT_PHASE_AT_TARGET=2,CKEDITOR.EVENT_PHASE_BUBBLING=3,CKEDITOR.dom.domObject=function(a){if(a)this.$=a},CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(g){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(g))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners", -b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),g=b&&b[a];if(g){this.$.removeEventListener?this.$.removeEventListener(a,g,false):this.$.detachEvent&&this.$.detachEvent("on"+ -a,g);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var g=a[b];this.$.detachEvent?this.$.detachEvent("on"+b,g):this.$.removeEventListener&&this.$.removeEventListener(b,g,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(),function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(g){return false}};a.setCustomData=function(a,g){var c=this.getUniqueId();(e[c]|| -(e[c]={}))[a]=g;return this};a.getCustomData=function(a){var g=this.$["data-cke-expando"];return(g=g&&e[g])&&a in g?g[a]:null};a.removeCustomData=function(a){var g=this.$["data-cke-expando"],g=g&&e[g],c,d;if(g){c=g[a];d=a in g;delete g[a]}return d?c:null};a.clearCustomData=function(){this.removeAllListeners();var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)}(CKEDITOR.dom.domObject.prototype), -CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this},CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject,CKEDITOR.NODE_ELEMENT=1,CKEDITOR.NODE_DOCUMENT=9,CKEDITOR.NODE_TEXT=3,CKEDITOR.NODE_COMMENT=8,CKEDITOR.NODE_DOCUMENT_FRAGMENT=11,CKEDITOR.POSITION_IDENTICAL= -0,CKEDITOR.POSITION_DISCONNECTED=1,CKEDITOR.POSITION_FOLLOWING=2,CKEDITOR.POSITION_PRECEDING=4,CKEDITOR.POSITION_IS_CONTAINED=8,CKEDITOR.POSITION_CONTAINS=16,CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),g=function(c){c["data-cke-expando"]&&(c["data-cke-expando"]=false);if(c.nodeType==CKEDITOR.NODE_ELEMENT){e||c.removeAttribute("id",false);if(a)for(var c=c.childNodes,d=0;d<c.length;d++)g(c[d])}};g(b); -return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,g=this.$;g&&g!=b;){var c=g.parentNode;c&&e.unshift(this.getIndex.call({$:g}, -a));g=c}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){var e=this.$,b=-1,g;if(!this.$.parentNode)return b;do if(!a||!(e!=this.$&&e.nodeType==CKEDITOR.NODE_TEXT&&(g||!e.nodeValue))){b++;g=e.nodeType==CKEDITOR.NODE_TEXT}while(e=e.previousSibling);return b},getNextSourceNode:function(a,e,b){if(b&&!b.call)var g=b,b=function(a){return!a.equals(g)};var a=!a&&this.getFirst&&this.getFirst(),c;if(!a){if(this.type== -CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(c=(c||this).getParent());){if(b&&b(c,true)===false)return null;a=c.getNext()}return!a||b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var g=b,b=function(a){return!a.equals(g)};var a=!a&&this.getLast&&this.getLast(),c;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&&(c=(c||this).getParent());){if(b&& -b(c,true)===false)return null;a=c.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e=this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT||a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)? -new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type== -CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(),b=Math.min(e.length,a.length),g=0;g<=b-1;g++)if(e[g]!= -a[g]){if(g<b)return e[g]<a[g]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,g,c;if(!e)b=b.parentNode;if(typeof a=="function"){c=true;g=a}else{c=false;g=function(c){c=typeof c.nodeName=="string"?c.nodeName.toLowerCase():"";return typeof a=="string"?c==a:c in a}}for(;b;){if(g(c?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b); -try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode;if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&& -(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a= -this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true;if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}}),CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this, -a)},CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject,CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft|| -a.body.scrollLeft||0,y:a.documentElement.scrollTop||a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}}),CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject,CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link"); -e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e||b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a, -this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b=this.$.documentElement,g=0;b&&g<a.length;g++){var c=a[g];if(e)for(var d=-1,i=0;i<b.childNodes.length;i++){var f=b.childNodes[i];if(!(e===true&&f.nodeType==3&&f.previousSibling&&f.previousSibling.nodeType==3)){d++;if(d== -c){b=f;break}}}else b=b.childNodes[c]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){!(CKEDITOR.env.ie&&document.documentMode<=8)&&e&&(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)}, -getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a= -this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}}),CKEDITOR.dom.nodeList=function(a){this.$=a},CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}},CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this, -a)},CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))},CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node,CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(a,e,b,g){var c=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), -d=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[c]=e;d[b]=1;return e.setCustomData(b,g)},CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)},CKEDITOR.dom.element.clearMarkers=function(a,e,b){var g=e.getCustomData("list_marker_names"),c=e.getCustomData("list_marker_id"),d;for(d in g)e.removeCustomData(d);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id"); -delete a[c]}},function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function e(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,f=g[a].length;b<f;b++)d=d+(parseInt(this.getComputedStyle(g[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+ -a+"(?:\\s|$)","").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$, -this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is|| -!a.is("br")){a=this.getDocument().createElement("br");CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)& -16)},focus:function(){function a(){try{this.$.focus()}catch(c){}}return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect()); -!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(f){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML= -a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a; -case "checked":a=this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie? -function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&& -(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a=parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<= -8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName(); -if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]==a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span; -return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml(); -if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b=b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false; -for(var a=this.getChildren(),d=0,b=a.count();d<b;d++){var f=a.getItem(d);if(!(f.type==CKEDITOR.NODE_ELEMENT&&f.data("cke-bookmark"))&&(f.type==CKEDITOR.NODE_ELEMENT&&!f.isEmptyInlineRemoveable()||f.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(f.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true; -case "data-cke-expando":continue;default:if(b.specified)return true}}return false}:function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(c){var b=this.$.attributes.getNamedItem(c);if(this.getName()=="input")switch(c){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":c=this.getAttribute("type");return c=="checkbox"||c=="radio"? -this.$.value!="on":!!this.$.value}return!b?false:b.specified}return CKEDITOR.env.ie?CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var f;if(d)for(;f=b.lastChild;)a.insertBefore(b.removeChild(f),a.firstChild);else for(;f=b.firstChild;)a.appendChild(b.removeChild(f))}},mergeSiblings:function(){function a(c, -b,f){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var g=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){g.push(b);b=f?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(c.isIdentical(b)){for(var e=f?c.getLast():c.getFirst();g.length;)g.shift().move(c,!f);b.moveChildren(c,!f);b.remove();e&&e.type==CKEDITOR.NODE_ELEMENT&&e.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(), -show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,c){this.$.setAttribute(a,c);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d== -"src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}: -a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=0;d<a.length;d++)this.removeAttribute(a[d]);else for(d in a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(!d.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var b=["top","left","right","bottom"],f;a=="border"&&(f=["color","style","width"]);for(var d=[],g=0;g<b.length;g++)if(f)for(var e=0;e<f.length;e++)d.push([a,b[g],f[e]].join("-"));else d.push([a,b[g]].join("-"));for(a= -0;a<d.length;a++)this.removeStyle(d[a])}else{d.removeProperty?d.removeProperty(a):d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+ -a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,f=d.count();b<f;b++){a=d.getItem(b);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0, -g=0,f=this.getDocument(),h=f.getBody(),e=f.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var k=this.$.getBoundingClientRect(),m=f.$.documentElement,q=m.clientTop||h.$.clientTop||0,s=m.clientLeft||h.$.clientLeft||0,n=true;if(CKEDITOR.env.ie){n=f.getDocumentElement().contains(this);f=f.getBody().contains(this);n=e&&f||!e&&n}if(n){b=k.left+(!e&&m.scrollLeft||h.$.scrollLeft);b=b-s;g=k.top+(!e&&m.scrollTop||h.$.scrollTop);g=g-q}}else{h=this;for(f=null;h&&!(h.getName()== -"body"||h.getName()=="html");){b=b+(h.$.offsetLeft-h.$.scrollLeft);g=g+(h.$.offsetTop-h.$.scrollTop);if(!h.equals(this)){b=b+(h.$.clientLeft||0);g=g+(h.$.clientTop||0)}for(;f&&!f.equals(h);){b=b-f.$.scrollLeft;g=g-f.$.scrollTop;f=f.getParent()}f=h;h=(k=h.$.offsetParent)?new CKEDITOR.dom.element(k):null}}if(a){h=this.getWindow();f=a.getWindow();if(!h.equals(f)&&h.$.frameElement){a=(new CKEDITOR.dom.element(h.$.frameElement)).getDocumentPosition(a);b=b+a.x;g=g+a.y}}if(!document.documentElement.getBoundingClientRect&& -CKEDITOR.env.gecko&&!e){b=b+(this.$.clientLeft?1:0);g=g+(this.$.clientTop?1:0)}return{x:b,y:g}},scrollIntoView:function(a){var b=this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var g=b.getWindow();try{var f=g.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(h){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,g){var f,h,e,k;function m(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b, -d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}}function q(a,b){var c={x:0,y:0};if(!a.is(n?"body":"html")){var d=a.$.getBoundingClientRect();c.x=d.left;c.y=d.top}d=a.getWindow();if(!d.equals(b)){d=q(CKEDITOR.dom.element.get(d.$.frameElement),b);c.x=c.x+d.x;c.y=c.y+d.y}return c}function s(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var n=e.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=n?e.getBody(): -e.getDocumentElement());e=a.getWindow();h=q(this,e);var l=q(a,e),o=this.$.offsetHeight;f=this.$.offsetWidth;var r=a.$.clientHeight,p=a.$.clientWidth;e=h.x-s(this,"left")-l.x||0;k=h.y-s(this,"top")-l.y||0;f=h.x+f+s(this,"right")-(l.x+p)||0;h=h.y+o+s(this,"bottom")-(l.y+r)||0;if(k<0||h>0)m(0,b===true?k:b===false?h:k<0?k:h);if(g&&(e<0||f>0))m(e<0?e:f,0)},setState:function(a,b,g){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled"); -g&&this.setAttribute("aria-pressed",true);g&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");g&&this.setAttribute("aria-disabled",true);g&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");g&&this.removeAttribute("aria-pressed");g&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$; -try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){for(var g=this.$.attributes,b=b||{},f=0;f<g.length;f++){var h=g[f],e=h.nodeName.toLowerCase(),k;if(!(e in b))if(e=="checked"&&(k=this.getAttribute(e)))a.setAttribute(e,k);else if(!CKEDITOR.env.ie||this.hasAttribute(e)){k=this.getAttribute(e);if(k===null)k=h.nodeValue;a.setAttribute(e,k)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!= -a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(c>=0&&c<f.length)return f[c]}return function(b){var g=this.$;if(b.slice)for(;b.length>0&&g;)g=a(g,b.shift());else g=a(g,b);return g?new CKEDITOR.dom.node(g):null}}(),getChildCount:function(){return this.$.childNodes.length}, -disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a, -b);return null},getEditor:function(){var a=CKEDITOR.instances,b,g;for(b in a){g=a[b];if(g.element.equals(this)&&g.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return g}return null},find:function(b){var d=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this,b)));d();return b},findOne:function(b){var d=a(this),b=this.$.querySelector(e(this,b));d();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,g){if(!g&&(!b||this.type==b))var f=a(this);if(f!==false)for(var g=this.getChildren(), -h=0;h<g.count();h++){f=g.getItem(h);f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}}});var g={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,d,g){if(typeof d=="number"){if(g&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))d=d-b.call(this,a);this.setStyle(a,d+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,d){var g= -Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;d&&(g=g-b.call(this,a));return g}}(),CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a},CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1, -appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}),function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,f=c.startContainer;d=c.endContainer;var g=c.startOffset,k=c.endOffset,h,e=this.guard,i=this.type,j=a?"getPreviousSourceNode": -"getNextSourceNode";if(!a&&!this._.guardLTR){var u=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),t=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(k):d.getNext();this._.guardLTR=function(a,b){return(!b||!u.equals(a))&&(!t||!a.equals(t))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var y=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),z=f.type==CKEDITOR.NODE_ELEMENT?g?f.getChild(g-1):null:f.getPrevious();this._.guardRTL=function(a,b){return(!b||!y.equals(a))&&(!z||!a.equals(z))&& -(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var A=a?this._.guardRTL:this._.guardLTR;h=e?function(a,b){return A(a,b)===false?false:e(a,b)}:A;if(this.current)d=this.current[j](false,i,h);else{if(a)d.type==CKEDITOR.NODE_ELEMENT&&(d=k>0?d.getChild(k-1):h(d,true)===false?null:d.getPreviousSourceNode(true,i,h));else{d=f;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(g)))d=h(f,true)===false?null:f.getNextSourceNode(true,i,h)}d&&h(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator|| -this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[j](false,i,h)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d}function b(a){if(j(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(k))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!j(a.getChild(b))){b= -false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._= -{}}}});var g={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},c={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in c)&&g[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type== -CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var f,g;f=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(g=d.getParent())&&c(g);f=a?f:f||c(d);return!!(b^f)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())|| -CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!i(a)&&!f(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"): -c.getText&&d.test(c.getText());if(f){f=c.getParent();c=c.getNext(b);f=f.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,i=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.dom.walker.bookmark(),h=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b= -i(b)||f(b)||h(b);return!!(a^b)}};var j=CKEDITOR.dom.walker.ignored(),k=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block);CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(f(a)||i(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&& -d.test(a.getText()))?a:false}}(),CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a},function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),f=CKEDITOR.dom.walker.bogus();return function(g){if(c(g)||b(g))return true;if(f(g)&&!a)return a=true;return g.type==CKEDITOR.NODE_TEXT&& -(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(d)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&i(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&j(a)&&(b=a);return h(a)&&!(i(a)&&a.equals(b))})}}var g=function(a){a.collapsed= -a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},c=function(a,b,c,d){a.optimizeBookmark();var f=a.startContainer,g=a.endContainer,h=a.startOffset,e=a.endOffset,i,j;if(g.type==CKEDITOR.NODE_TEXT)g=g.split(e);else if(g.getChildCount()>0)if(e>=g.getChildCount()){g=g.append(a.document.createText(""));j=true}else g=g.getChild(e);if(f.type==CKEDITOR.NODE_TEXT){f.split(h);f.equals(g)&&(g=f.getNext())}else if(h)if(h>=f.getChildCount()){f=f.append(a.document.createText("")); -i=true}else f=f.getChild(h).getPrevious();else{f=f.append(a.document.createText(""),1);i=true}var h=f.getParents(),e=g.getParents(),v,x,u;for(v=0;v<h.length;v++){x=h[v];u=e[v];if(!x.equals(u))break}for(var t=c,y,z,A,B=v;B<h.length;B++){y=h[B];t&&!y.equals(f)&&(z=t.append(y.clone()));for(y=y.getNext();y;){if(y.equals(e[B])||y.equals(g))break;A=y.getNext();if(b==2)t.append(y.clone(true));else{y.remove();b==1&&t.append(y)}y=A}t&&(t=z)}t=c;for(c=v;c<e.length;c++){y=e[c];b>0&&!y.equals(g)&&(z=t.append(y.clone())); -if(!h[c]||y.$.parentNode!=h[c].$.parentNode)for(y=y.getPrevious();y;){if(y.equals(h[c])||y.equals(f))break;A=y.getPrevious();if(b==2)t.$.insertBefore(y.$.cloneNode(true),t.$.firstChild);else{y.remove();b==1&&t.$.insertBefore(y.$,t.$.firstChild)}y=A}t&&(t=z)}if(b==2){x=a.startContainer;if(x.type==CKEDITOR.NODE_TEXT){x.$.data=x.$.data+x.$.nextSibling.data;x.$.parentNode.removeChild(x.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data; -a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(x&&u&&(f.$.parentNode!=x.$.parentNode||g.$.parentNode!=u.$.parentNode)){b=u.getIndex();i&&u.$.parentNode==f.$.parentNode&&b--;if(d&&x.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>',a.document);d.insertAfter(x);x.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(u.getParent(),b)}a.collapse(true)}i&&f.remove();j&&g.$.parentNode&&g.remove()},d={abbr:1, -acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},i=CKEDITOR.dom.walker.bogus(),f=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,h=CKEDITOR.dom.walker.editable(),j=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset; -a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||c(this,2,a);return a},deleteContents:function(a){this.collapsed||c(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| -c(this,1,b,a);return b},createBookmark:function(a){var b,c,d,f,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(g?"C":"S"))}if(!g){c=b.clone();c.setHtml("&nbsp;");a&&c.setAttribute("id",d+"E");f=this.clone();f.collapse();f.insertNode(c)}f=this.clone();f.collapse(true);f.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b, -CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(g?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:g}},createBookmark2:function(){function a(b){var c=b.container,d=b.offset,f;f=c;var g=d;f=f.type!=CKEDITOR.NODE_ELEMENT||g===0||g==f.getChildCount()?0:f.getChild(g-1).type==CKEDITOR.NODE_TEXT&&f.getChild(g).type==CKEDITOR.NODE_TEXT;if(f){c=c.getChild(d-1);d=c.getLength()}c.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=c.getChild(d-1).getIndex(true)+1);if(c.type==CKEDITOR.NODE_TEXT){f=c;for(g=0;(f=f.getPrevious())&& -f.type==CKEDITOR.NODE_TEXT;)g=g+f.getLength();d=d+g}b.container=c;b.offset=d}return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(f)}return{start:d.container.getAddress(b),end:c?null:f.container.getAddress(b),startOffset:d.offset,endOffset:f.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset, -d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT){f=a.getChildCount(); -if(f>c)a=a.getChild(c);else if(f<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){f=b.getChildCount();if(f>d)b=b.getChild(d).getPreviousSourceNode(true);else if(f<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer, -d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a= -this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(g, -this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(f){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!f&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/); -switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,e,i,j,v,x,u=false,t,y;t=this.startContainer;var z=this.startOffset;if(t.type==CKEDITOR.NODE_TEXT){if(z){t=!CKEDITOR.tools.trim(t.substring(0,z)).length&&t;u=!!t}if(t&&!(v=t.getPrevious()))j=t.getParent()}else{z&&(v=t.getChild(z-1)||t.getLast());v||(j=t)}for(j=c(j);j||v;){if(j&&!v){!x&&j.equals(g)&&(x=true);if(f?j.isBlockBoundary():!h.contains(j))break;if(!u|| -j.getComputedStyle("display")!="inline"){u=false;x?e=j:this.setStartBefore(j)}v=j.getPrevious()}for(;v;){t=false;if(v.type==CKEDITOR.NODE_COMMENT)v=v.getPrevious();else{if(v.type==CKEDITOR.NODE_TEXT){y=v.getText();d.test(y)&&(v=null);t=/[\s\ufeff]$/.test(y)}else if((v.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&v.is("br"))&&!v.data("cke-bookmark"))if(u&&CKEDITOR.dtd.$removeEmpty[v.getName()]){y=v.getText();if(d.test(y))v=null;else for(var z=v.$.getElementsByTagName("*"),A=0,B;B=z[A++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){v= -null;break}v&&(t=!!y.length)}else v=null;t&&(u?x?e=j:j&&this.setStartBefore(j):u=true);if(v){t=v.getPrevious();if(!j&&!t){j=v;v=null;break}v=t}else j=null}}j&&(j=c(j.getParent()))}t=this.endContainer;z=this.endOffset;j=v=null;x=u=false;var G=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return false; -y=f!=a?f.getText():f.substring(b);if(d.test(y))return false}return true};if(t.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(t.substring(z)).length)u=true;else{u=!t.getLength();if(z==t.getLength()){if(!(v=t.getNext()))j=t.getParent()}else G(t,z)&&(j=t.getParent())}else(v=t.getChild(z))||(j=t);for(;j||v;){if(j&&!v){!x&&j.equals(g)&&(x=true);if(f?j.isBlockBoundary():!h.contains(j))break;if(!u||j.getComputedStyle("display")!="inline"){u=false;x?i=j:j&&this.setEndAfter(j)}v=j.getNext()}for(;v;){t=false; -if(v.type==CKEDITOR.NODE_TEXT){y=v.getText();G(v,0)||(v=null);t=/^[\s\ufeff]/.test(y)}else if(v.type==CKEDITOR.NODE_ELEMENT){if((v.$.offsetWidth>0||b&&v.is("br"))&&!v.data("cke-bookmark"))if(u&&CKEDITOR.dtd.$removeEmpty[v.getName()]){y=v.getText();if(d.test(y))v=null;else{z=v.$.getElementsByTagName("*");for(A=0;B=z[A++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){v=null;break}}v&&(t=!!y.length)}else v=null}else t=1;t&&u&&(x?i=j:this.setEndAfter(j));if(v){t=v.getNext();if(!j&&!t){j=v; -v=null;break}v=t}else j=null}j&&(j=c(j.getParent()))}if(e&&i){g=e.contains(i)?i:e;this.setStartBefore(g);this.setEndAfter(g)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:j=new CKEDITOR.dom.range(this.root);h=this.root;j.setStartAt(h,CKEDITOR.POSITION_AFTER_START);j.setEnd(this.startContainer,this.startOffset);j=new CKEDITOR.dom.walker(j);var C,J,F=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),E=null,D=function(a){if(a.type== -CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(E){if(E.equals(a)){E=null;return}}else E=a;else if(E)return;var b=F(a);b||(C=a);return b},f=function(a){var b=D(a);!b&&(a.is&&a.is("br"))&&(J=a);return b};j.guard=D;j=j.lastBackward();C=C||h;this.setStartAt(C,!C.is("br")&&(!j&&this.checkStartOfBlock()||j&&C.contains(j))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){j=this.clone();j=new CKEDITOR.dom.walker(j);var I=CKEDITOR.dom.walker.whitespaces(), -L=CKEDITOR.dom.walker.bookmark();j.evaluator=function(a){return!I(a)&&!L(a)};if((j=j.previous())&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))break}j=this.clone();j.collapse();j.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);j=new CKEDITOR.dom.walker(j);j.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:D;C=E=J=null;j=j.lastForward();C=C||h;this.setEndAt(C,!j&&this.checkEndOfBlock()||j&&C.contains(j)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);J&&this.setEndAfter(J)}},shrink:function(a,b,c){if(!this.collapsed){var a= -a||CKEDITOR.SHRINK_TEXT,d=this.clone(),f=this.startContainer,g=this.endContainer,h=this.startOffset,e=this.endOffset,i=1,j=1;if(f&&f.type==CKEDITOR.NODE_TEXT)if(h)if(h>=f.getLength())d.setStartAfter(f);else{d.setStartBefore(f);i=0}else d.setStartBefore(f);if(g&&g.type==CKEDITOR.NODE_TEXT)if(e)if(e>=g.getLength())d.setEndAfter(g);else{d.setEndAfter(g);j=0}else d.setEndBefore(g);var d=new CKEDITOR.dom.walker(d),v=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT? -CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var x;d.guard=function(b,d){if(v(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(x)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(x=b);return true};if(i)(f=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START); -if(j){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!i&&!j)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer, -a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=a;this.endOffset=b}g(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b= -a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}g(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a, -0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}g(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a); -break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}g(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,f=c.block,g=null; -if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!d){d=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();this.deleteContents();if(d&&d.equals(f))if(b){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(a){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d, -CKEDITOR.POSITION_BEFORE_START);d=null}else{f=this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:f,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:g}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)|| -(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,g;f&&!f.equals(d.root)&&!f.getFirst(a(f));){g=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=g}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer, -this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0, -c));f.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));f.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer, -this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d); -c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a, -b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&f.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&& -this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,g=c,h=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(h=d[b?"getLast":"getFirst"](j));!g&&!h&&(h=d[b?"getPrevious":"getNext"](j));a=h}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,f,g=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START]; -c.moveToPosition(a,g[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if(f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)&&f.getAttribute("contenteditable")=="false"){c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(f,g[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a, -true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT? -a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",this.document),b,c,d,f=this.clone();f.optimize();if(d=f.startContainer.type==CKEDITOR.NODE_TEXT){c=f.startContainer.getText();b=f.startContainer.split(f.startOffset);a.insertAfter(f.startContainer)}else f.insertNode(a); -a.scrollIntoView();if(d){f.startContainer.setText(c);b.remove()}a.remove()}}}(),CKEDITOR.POSITION_AFTER_START=1,CKEDITOR.POSITION_BEFORE_END=2,CKEDITOR.POSITION_BEFORE_START=3,CKEDITOR.POSITION_AFTER_END=4,CKEDITOR.ENLARGE_ELEMENT=1,CKEDITOR.ENLARGE_BLOCK_CONTENTS=2,CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3,CKEDITOR.ENLARGE_INLINE=4,CKEDITOR.START=1,CKEDITOR.END=2,CKEDITOR.SHRINK_ELEMENT=1,CKEDITOR.SHRINK_TEXT=2,"use strict",function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak= -0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a,b,c){for(a=a.getNextSourceNode(b,null,c);!i(a);)a=a.getNextSourceNode(b,null,c);return a}function b(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function g(a,c,d,f){a:{f==null&&(f=b(d));for(var h;h=f.shift();)if(h.getDtd().p){f={element:h,remaining:f};break a}f=null}if(!f)return 0;if((h=CKEDITOR.filter.instances[f.element.data("cke-filter")])&& -!h.check(c))return g(a,c,d,f.remaining);c=new CKEDITOR.dom.range(f.element);c.selectNodeContents(f.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:f.element,container:d,remaining:f.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var d=/^[\r\n\t ]+$/,i=CKEDITOR.dom.walker.bookmark(false,true), -f=CKEDITOR.dom.walker.whitespaces(true),h=function(a){return i(a)&&f(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var b,f,s,n,l,a=a||"p";if(this._.nestedEditable){if(b=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return b}this.activeFilter=this.filter;if(g(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= -null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var o=this.range.clone();f=o.startPath();var r=o.endPath(),p=!o.collapsed&&c(o,f.block),w=!o.collapsed&&c(o,r.block,1);o.shrink(CKEDITOR.SHRINK_ELEMENT,true);p&&o.setStartAt(f.block,CKEDITOR.POSITION_BEFORE_END);w&&o.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);f=o.endContainer.hasAscendant("pre",true)||o.startContainer.hasAscendant("pre",true);o.enlarge(this.forceBrBreak&&!f||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: -CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!o.collapsed){f=new CKEDITOR.dom.walker(o.clone());r=CKEDITOR.dom.walker.bookmark(true,true);f.evaluator=r;this._.nextNode=f.next();f=new CKEDITOR.dom.walker(o.clone());f.evaluator=r;f=f.previous();this._.lastNode=f.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){r=this.range.clone();r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); -if(r.checkEndOfBlock()){r=new CKEDITOR.dom.elementPath(r.endContainer,r.root);this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!o.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=o.document.createText("");this._.lastNode.insertAfter(f)}o=null}this._.started=1;f=o}r=this._.nextNode;o=this._.lastNode;for(this._.nextNode=null;r;){var p=0,w=r.hasAscendant("pre"),v=r.type!=CKEDITOR.NODE_ELEMENT,x=0;if(v)r.type==CKEDITOR.NODE_TEXT&&d.test(r.getText())&& -(v=0);else{var u=r.getName();if(CKEDITOR.dtd.$block[u]&&r.getAttribute("contenteditable")=="false"){b=r;g(this,a,b);break}else if(r.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if(u=="br")v=1;else if(!f&&!r.getChildCount()&&u!="hr"){b=r;s=r.equals(o);break}if(f){f.setEndAt(r,CKEDITOR.POSITION_BEFORE_START);if(u!="br")this._.nextNode=r}p=1}else{if(r.getFirst()){if(!f){f=this.range.clone();f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}r=r.getFirst();continue}v=1}}if(v&&!f){f=this.range.clone(); -f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}s=(!p||v)&&r.equals(o);if(f&&!p)for(;!r.getNext(h)&&!s;){u=r.getParent();if(u.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){p=1;v=0;s||u.equals(o);f.setEndAt(u,CKEDITOR.POSITION_BEFORE_END);break}r=u;v=1;s=r.equals(o);x=1}v&&f.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=e(r,x,o);if((s=!r)||p&&f)break}if(!b){if(!f){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}b=new CKEDITOR.dom.elementPath(f.startContainer,f.root);r=b.blockLimit; -p={div:1,th:1,td:1};b=b.block;if(!b&&r&&!this.enforceRealBlocks&&p[r.getName()]&&f.checkStartOfBlock()&&f.checkEndOfBlock()&&!r.equals(f.root))b=r;else if(!b||this.enforceRealBlocks&&b.is(j)){b=this.range.document.createElement(a);f.extractContents().appendTo(b);b.trim();f.insertNode(b);n=l=true}else if(b.getName()!="li"){if(!f.checkStartOfBlock()||!f.checkEndOfBlock()){b=b.clone(false);f.extractContents().appendTo(b);b.trim();l=f.splitBlock();n=!l.wasStartOfBlock;l=!l.wasEndOfBlock;f.insertNode(b)}}else if(!s)this._.nextNode= -b.equals(o)?null:e(f.getBoundaryNodes().endNode,1,o)}if(n)(n=b.getPrevious())&&n.type==CKEDITOR.NODE_ELEMENT&&(n.getName()=="br"?n.remove():n.getLast()&&n.getLast().$.nodeName.toLowerCase()=="br"&&n.getLast().remove());if(l)(n=b.getLast())&&n.type==CKEDITOR.NODE_ELEMENT&&n.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||n.getPrevious(i)||n.getNext(i))&&n.remove();if(!this._.nextNode)this._.nextNode=s||b.equals(o)||!o?null:e(b,1,o);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}}(), -CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& -this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(g){return!g&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)},CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState|| -typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}},CKEDITOR.event.implementOn(CKEDITOR.command.prototype), -CKEDITOR.ENTER_P=1,CKEDITOR.ENTER_BR=2,CKEDITOR.ENTER_DIV=3,CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]},function(){function a(a, -b,c,d,f){var g,h,a=[];for(g in b){h=b[g];h=typeof h=="boolean"?{}:typeof h=="function"?{match:h}:G(h);if(g.charAt(0)!="$")h.elements=g;if(c)h.featureName=c.toLowerCase();var e=h;e.elements=i(e.elements,/\s+/)||null;e.propertiesOnly=e.propertiesOnly||e.elements===true;var j=/\s*,\s*/,o=void 0;for(o in E){e[o]=i(e[o],j)||null;var p=e,n=D[o],k=i(e[D[o]],j),x=e[o],w=[],F=true,v=void 0;k?F=false:k={};for(v in x)if(v.charAt(0)=="!"){v=v.slice(1);w.push(v);k[v]=true;F=false}for(;v=w.pop();){x[v]=x["!"+v]; -delete x["!"+v]}p[n]=(F?false:k)||null}e.match=e.match||null;d.push(h);a.push(h)}for(var b=f.elements,f=f.generic,l,c=0,d=a.length;c<d;++c){g=G(a[c]);h=g.classes===true||g.styles===true||g.attributes===true;e=g;o=n=j=void 0;for(j in E)e[j]=r(e[j]);p=true;for(o in D){j=D[o];n=e[j];k=[];x=void 0;for(x in n)x.indexOf("*")>-1?k.push(RegExp("^"+x.replace(/\*/g,".*")+"$")):k.push(x);n=k;if(n.length){e[j]=n;p=false}}e.nothingRequired=p;e.noProperties=!(e.attributes||e.classes||e.styles);if(g.elements=== -true||g.elements===null)f[h?"unshift":"push"](g);else{e=g.elements;delete g.elements;for(l in e)if(b[l])b[l][h?"unshift":"push"](g);else b[l]=[g]}}}function e(a,c,d,g){if(!a.match||a.match(c))if(g||f(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;g=d.validClasses;if(a)if(a===true)a=true;else{for(var h=0,e=c.length,i;h< -e;++h){i=c[h];g[i]||(g[i]=a(i))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function g(a,b,d){if(!a.match||a.match(b)){if(a.noProperties)return false;d.hadInvalidAttribute=c(a.attributes,b.attributes)||d.hadInvalidAttribute;d.hadInvalidStyle=c(a.styles,b.styles)||d.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var f=false,g=a===true,h=b.length;h--;)if(g||a(b[h])){b.splice(h,1);f=true}a=f}else a= -false;d.hadInvalidClass=a||d.hadInvalidClass}}function c(a,b){if(!a)return false;var c=false,d=a===true,f;for(f in b)if(d||a(f)){delete b[f];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function i(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=C(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):false; -var c={},d=0,f;for(f in a){c[f]=a[f];d++}return d?c:false}function f(a,b){if(a.nothingRequired)return true;var c,d,f,g;if(f=a.requiredClasses){g=b.classes;for(c=0;c<f.length;++c){d=f[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(g,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(g,d))return false}}return h(b.styles,a.requiredStyles)&&h(b.attributes,a.requiredAttributes)}function h(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in -a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function j(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=J;return b}function k(a){for(var b,c,d,f,g={},h=1,a=C(a);b=a.match(I);){if(c=b[2]){d=m(c,"styles");f=m(c,"attrs");c=m(c,"classes")}else d=f=c=null;g["$"+h++]={elements:b[1],classes:c,styles:d,attributes:f};a=a.slice(b[0].length)}return g}function m(a,b){var c=a.match(L[b]);return c?C(c[1]):null}function q(a){var b= -a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function s(a,b,c,d){var f=0,h;if(d.toHtml)b.name=b.name.replace(H,"$1");if(d.doCallbacks&&a.elementCallbacks){a:for(var i=a.elementCallbacks,j=0,p=i.length,r;j<p;++j)if(r=i[j](b)){h=r;break a}if(h)return h}if(d.doTransform)if(h=a._.transformations[b.name]){q(b);for(i=0;i<h.length;++i)x(a,b,h[i]);l(b)}if(d.doFilter){a:{i=b.name; -j=a._;a=j.allowedRules.elements[i];h=j.allowedRules.generic;i=j.disallowedRules.elements[i];j=j.disallowedRules.generic;p=d.skipRequired;r={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var n,k;if(!a&&!h)a=null;else{q(b);if(i){n=0;for(k=i.length;n<k;++n)if(g(i[n],b,r)===false){a=null;break a}}if(j){n=0;for(k=j.length;n<k;++n)g(j[n],b,r)}if(a){n=0;for(k=a.length;n< -k;++n)e(a[n],b,r,p)}if(h){n=0;for(k=h.length;n<k;++n)e(h[n],b,r,p)}a=r}}if(!a){c.push(b);return B}if(!a.valid){c.push(b);return B}k=a.validAttributes;var w=a.validStyles;h=a.validClasses;var i=b.attributes,v=b.styles,j=b.classes,p=b.classBackup,F=b.styleBackup,m,E,u=[];r=[];var I=/^data-cke-/;n=false;delete i.style;delete i["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(m in i)if(!k[m])if(I.test(m)){if(m!=(E=m.replace(/^data-cke-saved-/,""))&&!k[E]){delete i[m];n=true}}else{delete i[m]; -n=true}if(!a.allStyles||a.hadInvalidStyle){for(m in v)a.allStyles||w[m]?u.push(m+":"+v[m]):n=true;if(u.length)i.style=u.sort().join("; ")}else if(F)i.style=F;if(!a.allClasses||a.hadInvalidClass){for(m=0;m<j.length;++m)(a.allClasses||h[j[m]])&&r.push(j[m]);r.length&&(i["class"]=r.sort().join(" "));p&&r.length<p.split(/\s+/).length&&(n=true)}else p&&(i["class"]=p);n&&(f=B);if(!d.skipFinalValidation&&!o(b)){c.push(b);return B}}if(d.toHtml)b.name=b.name.replace(Q,"cke:$1");return f}function n(a){var b= -[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function l(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function o(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function r(a){if(!a)return false;if(a===true)return true; -var b=n(a);return function(c){return c in a||b&&c.match(b)}}function p(){return new CKEDITOR.htmlParser.element("br")}function w(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||A.$block[a.name])}function v(a,b,c){var d=a.name;if(A.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(p());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(A.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!w(a.previous)){b=p();b.insertBefore(a)}if(a.next&&!w(a.next)){b=p();b.insertAfter(a)}a.replaceWithChildren()}else{var d= -a.children,f;b:{f=A[b];for(var g=0,h=d.length,e;g<h;++g){e=d[g];if(e.type==CKEDITOR.NODE_ELEMENT&&!f[e.name]){f=false;break b}}f=true}if(f){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{f=a.parent;for(var g=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.name=="body",i,h=d.length;h>0;){e=d[--h];if(g&&(e.type==CKEDITOR.NODE_TEXT||e.type==CKEDITOR.NODE_ELEMENT&&A.$inline[e.name])){if(!i){i=new CKEDITOR.htmlParser.element(b);i.insertAfter(a);c.push({check:"parent-down",el:i})}i.add(e,0)}else{i= -null;e.insertAfter(a);f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e.type==CKEDITOR.NODE_ELEMENT&&!A[f.name][e.name])&&c.push({check:"el-up",el:e})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function x(a,b,c){var d,f;for(d=0;d<c.length;++d){f=c[d];if((!f.check||a.check(f.check,false))&&(!f.left||f.left(b))){f.right(b,O);break}}}function u(a,b){var c=b.getDefinition(),d=c.attributes,f=c.styles,g,h,e,i;if(a.name!=c.element)return false; -for(g in d)if(g=="class"){c=d[g].split(/\s+/);for(e=a.classes.join("|");i=c.pop();)if(e.indexOf(i)==-1)return false}else if(a.attributes[g]!=d[g])return false;for(h in f)if(a.styles[h]!=f[h])return false;return true}function t(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function y(a){return function(b){return u(b,a)}}function z(a){return function(b,c){c[a](b)}}var A=CKEDITOR.dtd, -B=1,G=CKEDITOR.tools.copy,C=CKEDITOR.tools.trim,J="cke-test",F=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a; -this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(F[a.enterMode]+" "+F[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,f){if(!d(this,b,f))return false;var g,h;if(typeof b=="string")b=k(b); -else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,f);g=b.getDefinition();b={};f=g.attributes;b[g.element]=g={styles:g.styles,requiredStyles:g.styles&&CKEDITOR.tools.objectKeys(g.styles)};if(f){f=G(f);g.classes=f["class"]?f["class"].split(/\s+/):null;g.requiredClasses=g.classes;delete f["class"];g.attributes=f;g.requiredAttributes=f&&CKEDITOR.tools.objectKeys(f)}}else if(CKEDITOR.tools.isArray(b)){for(g=0;g<b.length;++g)h=this.allow(b[g], -c,f);return h}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var f=this,g=[],h=this.editor&&this.editor.config.protectedSource,e,i=false,j={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){e=s(f,a,g,j);if(e&B)i= -true;else if(e&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var o,p,n;if(h)for(p=0;p<h.length;++p)if((n=d.match(h[p]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(o=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&s(f,o,c,j);c=!c.length}c||g.push(a)}},null,true);g.length&&(i=true);for(var p,a=[],d=F[d||(this.editor? -this.editor.enterMode:CKEDITOR.ENTER_P)];c=g.pop();)c.type==CKEDITOR.NODE_ELEMENT?v(c,d,a):c.remove();for(;p=a.pop();){c=p.el;if(c.parent)switch(p.check){case "it":A.$removeEmpty[c.name]&&!c.children.length?v(c,d,a):o(c)||v(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!A[c.parent.name][c.name]&&v(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!A[c.parent.name][c.name]&&v(c.parent,d,a)}}return i},checkFeature:function(a){if(this.disabled|| -!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=k(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],f;for(b=0;b<a.length&&!f;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))f=c}if(f){for(b=0;b<a.length;++b)d.push(t(a[b], -f));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, -c;if(!this.disabled&&a){var d=this._.transformations,f;for(f=0;f<a.length;++f){b=a[f];var g=void 0,h=void 0,e=void 0,i=void 0,j=void 0,o=void 0;c=[];for(h=0;h<b.length;++h){e=b[h];if(typeof e=="string"){e=e.split(/\s*:\s*/);i=e[0];j=null;o=e[1]}else{i=e.check;j=e.left;o=e.right}if(!g){g=e;g=g.element?g.element:i?i.match(/^([a-z0-9]+)/i)[0]:g.left.getDefinition().element}j instanceof CKEDITOR.style&&(j=y(j));c.push({check:i==g?null:i,left:j,right:typeof o=="string"?z(o):o})}b=g;d[b]||(d[b]=[]);d[b].push(c)}}}, -check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var f,g;if(typeof a=="string"){g=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(g in this._.cachedChecks)return this._.cachedChecks[g];d=k(a).$1;f=d.styles;var h=d.classes;d.name=d.elements;d.classes=h=h?h.split(/\s*,\s*/):[];d.styles=j(f);d.attributes=j(d.attributes);d.children=[];h.length&&(d.attributes["class"]=h.join(" "));if(f)d.attributes.style= -CKEDITOR.tools.writeCssText(d.styles);f=d}else{d=a.getDefinition();f=d.styles;h=d.attributes||{};if(f){f=G(f);h.style=CKEDITOR.tools.writeCssText(f,true)}else f={};f={name:d.element,attributes:h,classes:h["class"]?h["class"].split(/\s+/):[],styles:f,children:[]}}var h=CKEDITOR.tools.clone(f),e=[],i;if(b!==false&&(i=this._.transformations[f.name])){for(d=0;d<i.length;++d)x(this,f,i[d]);l(f)}s(this,h,e,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=e.length>0?false: -CKEDITOR.tools.objectCompare(f.attributes,h.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[g]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var f=a.slice(),g;if(this.check(F[c]))return c;for(d||(f=f.reverse());g=f.pop();)if(this.check(g))return b[g];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; -delete this.disallowedContent}};var E={styles:1,attributes:1,classes:1},D={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},I=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,L={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},H=/^cke:(object|embed|param)$/,Q=/^(object|embed|param)$/,O=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, -"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],f=d&&d.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[c]=f[1]:d==J&&(a.attributes[c]=J)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= -a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:u,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,f=c.attributes,g,h,e,i;a.name=c.element;for(g in f)if(g=="class"){c=a.classes.join("|");for(e=f[g].split(/\s+/);i=e.pop();)c.indexOf(i)==-1&& -a.classes.push(i)}else a.attributes[g]=f[g];for(h in d)a.styles[h]=d[h]}}}}(),function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true; -(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}},lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer; -e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b||b!=this){b&&b.remove(a);var b="focus",g="blur";if(e)if(CKEDITOR.env.ie){b="focusin";g="focusout"}else CKEDITOR.event.useCapture=1;var c={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,c.focus,this);a.on(g,c.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",c)}},remove:function(a){a.removeCustomData("focusmanager"); -var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur",e.blur);a.removeListener("focus",e.focus)}}}(),CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this},function(){var a,e=function(b){var b=b.data,c=b.getKeystroke(),d=this.keystrokes[c],e=this._.editor;a=e.fire("key",{keyCode:c,domEvent:b})===false;if(!a){d&&(a=e.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a= -!!this.blockedKeystrokes[c])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}}(),function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1, -km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e,a);var g=this,e=function(){g[a].dir=g.rtl[a]?"rtl":"ltr";b(a,g[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language|| -a,g=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),c=g[1],g=g[2];b[c+"-"+g]?c=c+"-"+g:b[c]||(c=null);CKEDITOR.lang.detect=c?function(){return c}:function(a){return a};return c||a}}}(),CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,g,c,d){var i=typeof b=="string";i&&(b=[b]);c||(c=CKEDITOR);var f=b.length,h=[],j=[],k=function(a){g&&(i?g.call(c,a):g.call(c,h,j))};if(f===0)k(true);else{var m=function(a,b){(b?h:j).push(a);if(--f<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"); -k(b)}},q=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var f=0;f<d.length;f++)d[f](b,c)},s=function(b){if(a[b])m(b,true);else{var c=e[b]||(e[b]=[]);c.push(m);if(!(c.length>1)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:b});if(g)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)d.$.onreadystatechange=function(){if(d.$.readyState=="loaded"||d.$.readyState=="complete"){d.$.onreadystatechange=null;q(b,true)}};else{d.$.onload=function(){setTimeout(function(){q(b,true)}, -0)};d.$.onerror=function(){q(b,false)}}d.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var n=0;n<f;n++)s(b[n])}},queue:function(){function a(){var b;(b=g[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var g=[];return function(c,d){var e=this;g.push({scriptUrl:c,callback:function(){d&&d.apply(this,arguments);g.shift();a.call(e)}});g.length==1&&a.call(this)}}()}}(),CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName= -e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&& -e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),g=0;g<a.length;g++){var c=a[g];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[c]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var g=this.loaded,c=this.registered,d=[],i={},f={},h=0;h<a.length;h++){var j=a[h];if(j)if(!g[j]&& -!c[j]){var k=this.getFilePath(j);d.push(k);k in i||(i[k]=[]);i[k].push(j)}else f[j]=this.get(j)}CKEDITOR.scriptLoader.load(d,function(a,c){if(c.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+i[c[0]].join(",")+'" was not found at "'+c[0]+'".';for(var d=0;d<a.length;d++)for(var h=i[a[d]],j=0;j<h.length;j++){var o=h[j];f[o]=this.get(o);g[o]=1}e.call(b,f)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load, -function(a){var e={};return function(b,g,c){var d={},i=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],f;for(f in a){var m=a[f],q=m&&m.requires;if(!e[f]){if(m.icons)for(var s=m.icons.split(","),n=s.length;n--;)CKEDITOR.skin.addIcon(s[n],m.path+"icons/"+(CKEDITOR.env.hidpi&&m.hidpi?"hidpi/":"")+s[n]+".png");e[f]=1}if(q){q.split&&(q=q.split(","));for(m=0;m<q.length;m++)d[q[m]]||b.push(q[m])}}if(b.length)i.call(this,b);else{for(f in d){m=d[f];if(m.onLoad&&!m.onLoad._called){m.onLoad()=== -false&&delete d[f];m.onLoad._called=1}}g&&g.call(c||window,d)}},this)};i.call(this,b)}}),CKEDITOR.plugins.setLang=function(a,e,b){var g=this.get(a),a=g.langEntries||(g.langEntries={}),g=g.lang||(g.lang=[]);g.split&&(g=g.split(","));CKEDITOR.tools.indexOf(g,e)==-1&&g.push(e);a[e]=b},CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this},CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var g=this.items[a]={type:e, -command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(g,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],g=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;g&&g.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]=e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+ -"_"+a}},CKEDITOR.event.implementOn(CKEDITOR.ui),function(){function a(a,d,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(d!==void 0){if(d instanceof CKEDITOR.dom.element){if(!f)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(f==CKEDITOR.ELEMENT_MODE_INLINE?d.is(CKEDITOR.dtd.$editable)|| -d.is("textarea"):f==CKEDITOR.ELEMENT_MODE_REPLACE?!d.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+d.getName()+'".');this.element=d;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(d.getId()||d.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config); -this.ui=new CKEDITOR.ui(this);this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){c(this,a.data.path)});this.on("activeFilterChange",function(){c(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){i(this,a)},0,this)} -function e(){do var a="editor"+ ++q;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)g(this,a[b])}function g(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function c(a,b,c){if(b){var d,f,g=a.commands;for(f in g){d=g[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=s[b]||(s[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)== -b||!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function i(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== -CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= -new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);f(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function f(a){CKEDITOR.skin.loadPart("editor",function(){h(a)})}function h(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= -a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");j(a)})}function j(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);k(a)})}function k(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var g=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(g,""),c=c+(","+d);if(f)var h=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(h,"");CKEDITOR.env.air&& -(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],g=[];a.plugins=c;for(var e in c){var i=c[e],j=i.lang,p=null,o=i.requires,r;CKEDITOR.tools.isArray(o)&&(o=o.join(","));if(o&&(r=o.match(h)))for(;o=r.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[o,e]);if(j&&!a.lang[e]){j.split&&(j=j.split(","));if(CKEDITOR.tools.indexOf(j,a.langCode)>= -0)p=a.langCode;else{p=a.langCode.replace(/-.*/,"");p=p!=a.langCode&&CKEDITOR.tools.indexOf(j,p)>=0?p:CKEDITOR.tools.indexOf(j,"en")>=0?"en":j[0]}if(!i.langEntries||!i.langEntries[p])g.push(CKEDITOR.getUrl(i.path+"lang/"+p+".js"));else{a.lang[e]=i.langEntries[p];p=null}}f.push(p);d.push(i)}CKEDITOR.scriptLoader.load(g,function(){for(var c=["beforeInit","init","afterInit"],g=0;g<c.length;g++)for(var h=0;h<d.length;h++){var e=d[h];g===0&&(f[h]&&e.lang&&e.langEntries)&&(a.lang[e.name]=e.langEntries[f[h]]); -if(e[c[g]])e[c[g]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function m(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): -a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var q=0,s={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var c=new CKEDITOR.command(this,b);this.mode&&g(this,c);return this.commands[a]=c},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& -d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&m.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", -null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", -d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& -(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,f=b;if(b&&typeof b=="object"){c=b.internal;f=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(f||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= -a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return m.call(this)}, -setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), -a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})}(),CKEDITOR.ELEMENT_MODE_NONE=0,CKEDITOR.ELEMENT_MODE_REPLACE=1,CKEDITOR.ELEMENT_MODE_APPENDTO=2,CKEDITOR.ELEMENT_MODE_INLINE=3,CKEDITOR.htmlParser=function(){this._= -{htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}},function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){}, -parse:function(b){for(var g,c,d=0,i;g=this._.htmlPartsRegex.exec(b);){c=g.index;if(c>d){d=b.substring(d,c);if(i)i.push(d);else this.onText(d)}d=this._.htmlPartsRegex.lastIndex;if(c=g[1]){c=c.toLowerCase();if(i&&CKEDITOR.dtd.$cdata[c]){this.onCDATA(i.join(""));i=null}if(!i){this.onTagClose(c);continue}}if(i)i.push(g[0]);else if(c=g[3]){c=c.toLowerCase();if(!/="/.test(c)){var f={},h;g=g[4];var j=!!(g&&g.charAt(g.length-1)=="/");if(g)for(;h=a.exec(g);){var k=h[1].toLowerCase();h=h[2]||h[3]||h[4]||""; -f[k]=!h&&e[k]?k:CKEDITOR.tools.htmlDecodeAttr(h)}this.onTagOpen(c,f,j);!i&&CKEDITOR.dtd.$cdata[c]&&(i=[])}}else if(c=g[2])this.onComment(c)}if(b.length>d)this.onText(b.substring(d,b.length))}}}(),CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e)); -this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}}),"use strict",function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children, -e=CKEDITOR.tools.indexOf(a,this),b=this.previous,g=this.next;b&&(b.next=g);g&&(g.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),g=a.previous=this.previous,c=a.next=this.next;g&&(g.next=a);c&&(c.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a),g=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;g&&(g.previous= -this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&&b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this); -return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}}(),"use strict",CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}},CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value= -b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}}),"use strict",function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata= -function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})}(),"use strict",CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}},function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1, -ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},g=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),c={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(d,i,f){function h(a){var b;if(o.length>0)for(var c=0;c<o.length;c++){var d=o[c],f=d.name,g=CKEDITOR.dtd[f],h=p.name&&CKEDITOR.dtd[p.name];if((!h||h[f])&&(!a||!g||g[a]|| -!CKEDITOR.dtd[a])){if(!b){j();b=1}d=d.clone();d.parent=p;p=d;o.splice(c,1);c--}else if(f==p.name){m(p,p.parent,1);c--}}}function j(){for(;r.length;)m(r.shift(),p)}function k(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))?c.value=d:a.children.length=b-1}}function m(b,c,d){var c=c||p||l,g=p;if(b.previous===void 0){if(q(c,b)){p=c;n.onTagOpen(f,{});b.returnPoint=c=p}k(b);(!a(b)||b.children.length)&& -c.add(b);b.name=="pre"&&(v=false);b.name=="textarea"&&(w=false)}if(b.returnPoint){p=b.returnPoint;delete b.returnPoint}else p=d?c:g}function q(a,b){if((a==l||a.name=="body")&&f&&(!a.name||CKEDITOR.dtd[a.name][f])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function s(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"|| -a=="dd"&&b=="dt":false}var n=new CKEDITOR.htmlParser,l=i instanceof CKEDITOR.htmlParser.element?i:typeof i=="string"?new CKEDITOR.htmlParser.element(i):new CKEDITOR.htmlParser.fragment,o=[],r=[],p=l,w=l.name=="textarea",v=l.name=="pre";n.onTagOpen=function(c,d,f,i){d=new CKEDITOR.htmlParser.element(c,d);if(d.isUnknown&&f)d.isEmpty=true;d.isOptionalClose=i;if(a(d))o.push(d);else{if(c=="pre")v=true;else{if(c=="br"&&v){p.add(new CKEDITOR.htmlParser.text("\n"));return}c=="textarea"&&(w=true)}if(c=="br")r.push(d); -else{for(;;){i=(f=p.name)?CKEDITOR.dtd[f]||(p._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):g;if(!d.isUnknown&&!p.isUnknown&&!i[c])if(p.isOptionalClose)n.onTagClose(f);else if(c in b&&f in b){f=p.children;(f=f[f.length-1])&&f.name=="li"||m(f=new CKEDITOR.htmlParser.element("li"),p);!d.returnPoint&&(d.returnPoint=p);p=f}else if(c in CKEDITOR.dtd.$listItem&&!s(c,f))n.onTagOpen(c=="li"?"ul":"dl",{},0,1);else if(f in e&&!s(c,f)){!d.returnPoint&&(d.returnPoint=p);p=p.parent}else{f in CKEDITOR.dtd.$inline&& -o.unshift(p);if(p.parent)m(p,p.parent,1);else{d.isOrphan=1;break}}else break}h(c);j();d.parent=p;d.isEmpty?m(d):p=d}}};n.onTagClose=function(a){for(var b=o.length-1;b>=0;b--)if(a==o[b].name){o.splice(b,1);return}for(var c=[],d=[],g=p;g!=l&&g.name!=a;){g._.isBlockLike||d.unshift(g);c.push(g);g=g.returnPoint||g.parent}if(g!=l){for(b=0;b<c.length;b++){var h=c[b];m(h,h.parent)}p=g;g._.isBlockLike&&j();m(g,g.parent);if(g==p)p=p.parent;o=o.concat(d)}a=="body"&&(f=false)};n.onText=function(a){if((!p._.hasInlineStarted|| -r.length)&&!v&&!w){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=p.name,d=b?CKEDITOR.dtd[b]||(p._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):g;if(!w&&!d["#"]&&b in e){n.onTagOpen(c[b]||"");n.onText(a)}else{j();h();!v&&!w&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a);if(q(p,a))this.onTagOpen(f,{},0,1);p.add(a)}};n.onCDATA=function(a){p.add(new CKEDITOR.htmlParser.cdata(a))};n.onComment=function(a){j();h();p.add(new CKEDITOR.htmlParser.comment(a))};n.parse(d); -for(j();p!=l;)m(p,p.parent,1);k(l);return l};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT|| -a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a,c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var g=this.getFilterContext(); -if(c&&!this.parent&&b)b.onRoot(g,this);b&&this.filterChildren(b,false,g);b=0;c=this.children;for(g=c.length;b<g;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var g=a(this);if(g!==false)for(var c=this.children,e=0;e<c.length;e++){g=c[e];g.type==CKEDITOR.NODE_ELEMENT?g.forEach(a,b):(!b||g.type==b)&&a(g)}},getFilterContext:function(a){return a||{}}}}(),"use strict",function(){function a(){this.rules=[]}function e(b,g,c,d){var e,f;for(e in g){(f=b[e])||(f=b[e]=new a);f.add(g[e], -c,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,g){var c;if(typeof g=="number")c=g;else if(g&&"priority"in g)c=g.priority;typeof c!="number"&&(c=10);typeof g!="object"&&(g={});a.elementNames&&this.elementNameRules.addMany(a.elementNames, -c,g);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,c,g);a.elements&&e(this.elementsRules,a.elements,c,g);a.attributes&&e(this.attributesRules,a.attributes,c,g);a.text&&this.textRules.add(a.text,c,g);a.comment&&this.commentRules.add(a.comment,c,g);a.root&&this.rootRules.add(a.root,c,g)},applyTo:function(a){a.filter(this)},onElementName:function(a,g){return this.elementNameRules.execOnName(a,g)},onAttributeName:function(a,g){return this.attributeNameRules.execOnName(a,g)},onText:function(a, -g,c){return this.textRules.exec(a,g,c)},onComment:function(a,g,c){return this.commentRules.exec(a,g,c)},onRoot:function(a,g){return this.rootRules.exec(a,g)},onElement:function(a,g){for(var c=[this.elementsRules["^"],this.elementsRules[g.name],this.elementsRules.$],d,e=0;e<3;e++)if(d=c[e]){d=d.exec(a,g,this);if(d===false)return null;if(d&&d!=g)return this.onNode(a,d);if(g.parent&&!g.name)break}return g},onNode:function(a,g){var c=g.type;return c==CKEDITOR.NODE_ELEMENT?this.onElement(a,g):c==CKEDITOR.NODE_TEXT? -new CKEDITOR.htmlParser.text(this.onText(a,g.value)):c==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,g.value)):null},onAttribute:function(a,g,c,d){return(c=this.attributesRules[c])?c.exec(a,d,g,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,g,c){this.rules.splice(this.findIndex(g),0,{value:a,priority:g,options:c})},addMany:function(a,g,c){for(var d=[this.findIndex(g),0],e=0,f=a.length;e<f;e++)d.push({value:a[e],priority:g,options:c});this.rules.splice.apply(this.rules, -d)},findIndex:function(a){for(var g=this.rules,c=g.length-1;c>=0&&a<g[c].priority;)c--;return c+1},exec:function(a,g){var c=g instanceof CKEDITOR.htmlParser.node||g instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),e=this.rules,f=e.length,h,j,k,m;for(m=0;m<f;m++){if(c){h=g.type;j=g.name}k=e[m];if(!(a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable)){k=k.value.apply(null,d);if(k===false||c&&k&&(k.name!=j||k.type!=h))return k;k!= -null&&(d[0]=g=k)}}return g},execOnName:function(a,g){for(var c=0,d=this.rules,e=d.length,f;g&&c<e;c++){f=d[c];!(a.nonEditable&&!f.options.applyToAll||a.nestedEditable&&f.options.excludeNestedEditable)&&(g=g.replace(f.value[0],f.value[1]))}return g}}}(),function(){function a(a,f){function h(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function e(a,c){return function(f){if(f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e= -[],i=b(f),p,o;if(i)for(j(i,1)&&e.push(i);i;){if(d(i)&&(p=g(i))&&j(p))if((o=g(p))&&!d(o))e.push(p);else{h(k).insertAfter(p);p.remove()}i=i.previous}for(i=0;i<e.length;i++)e[i].remove();if(e=(typeof c=="function"?c(f):c)!==false)if(!k&&!CKEDITOR.env.needsBrFiller&&f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)e=false;else if(!k&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||f.name in CKEDITOR.dtd.tr||f.name in CKEDITOR.dtd.$listItem))e=false;else{e=b(f);e=!e||f.name=="form"&&e.name=="input"}e&&f.add(h(a))}}} -function j(a,b){if((!k||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(o))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0,c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&k&&(!b||a.parent.name in w))return true;if(!k)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var r={elements:{}},k=f=="html",w=CKEDITOR.tools.extend({}, -v),n;for(n in w)"#"in p[n]||delete w[n];for(n in w)r.elements[n]=e(k,a.config.fillEmptyBlocks);r.root=e(k,false);r.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=b.attributes;if("data-cke-bogus"in f||"data-cke-eol"in f)delete f["data-cke-bogus"];else{for(f=b.next;f&&c(f);)f=f.next;var e=g(b);!f&&d(b.parent)?i(b.parent,h(a)):d(f)&&(e&&!d(e))&&h(a).insertBefore(f)}}}}(k);return r}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV? -"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&c(a);)a=a.previous;return a}function g(a){for(a=a.previous;a&&c(a);)a=a.previous;return a}function c(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in v||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function i(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next= -b;b.previous=c}}function f(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function h(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function j(a){return a.replace(z,function(a,b,c){return"<"+b+c.replace(A,function(a,b){return B.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function k(a, -b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+s(c).replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function m(a){return a.replace(J,function(a,b){return decodeURIComponent(b)})}function q(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(a){return"<\!--"+r+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function s(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g, -function(a,b){return decodeURIComponent(b)})}function n(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function l(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore={id:1}),g=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g, -function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),h=0;h<d.length;h++)a=a.replace(d[h],function(a){a=a.replace(g,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(g,function(a,b,d){return"<\!--"+r+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g, -function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+n(s(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(x);c.addRules(u,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true}); -d.addRules(t);d.addRules(y,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=l(c,b),c=k(c,C),c=j(c),c=k(c,G),c=c.replace(F,"$1cke:$2"),c=c.replace(D,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d); -d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(E,"$1$2");c=m(c);c=s(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter, -true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=q(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter, -true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=s(c);c=n(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var f=this.editor,g,h,e;if(b&&typeof b=="object"){g=b.context;c=b.fixForBody;d=b.dontFilter;h=b.filter;e=b.enterMode}else g=b;!g&&g!==null&&(g=f.editable().getName()); -return f.fire("toHtml",{dataValue:a,context:g,fixForBody:c,dontFilter:d,filter:h||f.filter,enterMode:e||f.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var o=/(?:&nbsp;|\xa0)$/,r="{cke_protected}",p=CKEDITOR.dtd,w=["caption","colgroup","col","thead","tfoot", -"tbody"],v=CKEDITOR.tools.extend({},p.$blockLimit,p.$block),x={elements:{input:f,textarea:f}},u={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},t={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},y={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]], -attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(w,a.name);d=CKEDITOR.tools.indexOf(w,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex(): --1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b= -a.children[0];!b&&i(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:h,textarea:h},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)y.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var z=/<(a|area|img|input|source)\b([^>]*)>/gi,A=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,B=/^(href|src|name)$/i,G=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, -C=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,J=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,F=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,D=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi}(),"use strict",CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",g=b.match(/^cke:(.*)/);g&&(b=g[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&& -!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}},CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,g,c){g=="font-family"&&(c=c.replace(/["']/g,""));e[g.toLowerCase()]=c});return{rules:e,populate:function(a){var g= -this.toString();if(g)a instanceof CKEDITOR.dom.element?a.setAttribute("style",g):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=g:a.style=g},toString:function(){var a=[],g;for(g in e)e[g]&&a.push(g,":",e[g],";");return a.join("")}}},function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype= -CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,e,f,b=d.getFilterContext(b);if(b.off)return true;if(!d.parent)a.onRoot(b,d);for(;;){e=d.name;if(!(f=a.onElementName(b,e))){this.remove();return false}d.name=f;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==e)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d); -return false}if(!d.name){this.replaceWithChildren();return false}}e=d.attributes;var h,j;for(h in e){j=h;for(f=e[h];;)if(j=a.onAttributeName(b,h))if(j!=h){delete e[h];h=j}else break;else{delete e[h];break}j&&((f=a.onAttribute(b,d,j,f))===false?delete e[j]:e[j]=f)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,i=[],f=this.attributes,h,j;a.openTag(d,f);for(h in f)i.push([h,f[h]]);a.sortAttributes&&i.sort(e); -h=0;for(j=i.length;h<j;h++){f=i[h];a.attribute(f[0],f[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a=this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var c=0,d=this.children.length;c<d;++c)if(b(this.children[c]))return this.children[c]; -return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0,d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),e=0;e<b.length;++e)b[e].parent=d;d.children=b;if(b[0])b[0].previous= -null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)}, -getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable=="false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)}(),function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g, -g=/\n/g,c=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var i=d.replace(b,"\\$1").replace(g,"\\n").replace(c,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+i+"'):['"+i+"'].join('');")}}}(),delete CKEDITOR.loadFullCore,CKEDITOR.instances={},CKEDITOR.document=new CKEDITOR.dom.document(document),CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!= -a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)},CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]},function(){var a={};CKEDITOR.addTemplate=function(e,b){var g=a[e];if(g)return g;g={name:e,source:b};CKEDITOR.fire("template",g);return a[e]=new CKEDITOR.template(g.source)};CKEDITOR.getTemplate=function(e){return a[e]}}(), -function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}}(),CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")}),CKEDITOR.TRISTATE_ON=1,CKEDITOR.TRISTATE_OFF=2,CKEDITOR.TRISTATE_DISABLED=0,function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.'; -var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),g=a.is("textarea")?a:null;if(g){b.setData(g.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+g.getValue()+"</div>",CKEDITOR.document);a.insertAfter(g);g.hide();g.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode= -"wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(g){b.container.clearCustomData();b.container.remove();g.show()}b.element.clearCustomData();delete b.element});return b};CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var g=CKEDITOR.document.getElementsByTag(b),c=0,d=g.count();c<d;c++){a=g.getItem(c);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}}; -CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})}(),CKEDITOR.replaceClass="ckeditor",function(){function a(a,c,d,i){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var f=new CKEDITOR.editor(c,a,i);if(i==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden"); -f._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&f.setData(d,null,true);f.on("loaded",function(){b(f);i==CKEDITOR.ELEMENT_MODE_REPLACE&&(f.config.autoUpdateElement&&a.$.form)&&f._attachToForm();f.setMode(f.config.startupMode,function(){f.resetDirty();f.status="ready";f.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,f)})});f.on("destroy",e);return f}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData(); -if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,e=a.elementMode,f=a.fire("uiSpace",{space:"top",html:""}).html,h=a.fire("uiSpace",{space:"bottom",html:""}).html,j=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title? -' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'),b=CKEDITOR.dom.element.createFromHtml(j.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:f?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+ -f+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:h?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+h+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(e==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b);a.container=b;f&&a.ui.space("top").unselectable();h&&a.ui.space("bottom").unselectable();d=a.config.width;e=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));e&&a.ui.space("contents").setStyle("height", -CKEDITOR.tools.cssLength(e));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,c){return a(b,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,c,d){return a(b,c,d,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+ -"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](e,d)===false)continue}this.replace(e,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,e=this._.modes;if(!(a==d.mode||!e||!e[a])){d.fire("beforeSetMode",a);if(d.mode){var f=d.checkDirty(),e=d._.previousModeData,h,j=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData= -h=d.getData(1);if(d.mode=="source"&&e==h){d.fire("lockSnapshot",{forceUpdate:true});j=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;f!==void 0&&!f&&d.resetDirty();j?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot");setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,e){var f=this.container,h=this.ui.space("contents"),j=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement, -e=e?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):f;e.setSize("width",a,true);j&&(j.style.width="1%");h.setStyle("height",Math.max(b-(d?0:(e.$.offsetHeight||0)-(h.$.clientHeight||0)),0)+"px");j&&(j.style.width="100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})}(),CKEDITOR.config.startupMode= -"wysiwyg",function(){function a(a){var b=a.editor,c=a.data.path,d=c.blockLimit,f=a.data.selection,h=f.getRanges()[0],j;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(f=e(f,c)){f.appendBogus();j=CKEDITOR.env.ie}if(i(b,c.block,d)&&h.collapsed&&!h.getCommonAncestor().isReadOnly()){c=h.clone();c.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);d=new CKEDITOR.dom.walker(c);d.guard=function(a){return!g(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!d.checkForward()||c.checkStartOfBlock()&& -c.checkEndOfBlock()){b=h.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(g))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/))&&b.remove();j=1;a.cancel()}}j&&h.select()}function e(a,b){if(a.isFake)return 0;var c=b.block||b.blockLimit,d=c&&c.getLast(g);if(c&&c.isBlockBoundary()&&(!d||!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()))&&!c.is("pre")&&!c.getBogus())return c}function b(a){var b=a.data.getTarget(); -if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function g(a){return q(a)&&s(a)}function c(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,d){d&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(c=b);if(!d&&g(b)&&(!a||!k(b)))return false}}var c,d=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, -dl:1};if(d.startPath().contains(f)){var e=d.clone();e.collapse(1);e.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(e);a.guard=b();a.checkBackward();if(c){e=d.clone();e.collapse();e.setEndAt(c,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(e);a.guard=b(true);c=false;a.checkForward();return c}}return null}function i(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} -function f(a){a.editor.focus();a.editor.fire("saveSnapshot")}function h(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function j(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; -if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var d=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= -a=="focus"?"focusin":"focusout";b=c(b,this);d[0]=a;d[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,d)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, -b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){f(this);n(this,b||"html",a)},insertText:function(a){f(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", -true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var g=/\n{2}/g;if(g.test(a))var e="<"+c+">",h="</"+c+">",a=e+a.replace(g,function(){return h+e})+h}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g,"&nbsp;");a=a.replace(/(>|\s) /g,function(a,b){return b+"&nbsp;"}).replace(/ (?=<)/g, -"&nbsp;");n(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,f=a.getName(),g=CKEDITOR.dtd.$block[f];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&l(b);var e,h;if(g)for(;(e=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[e.getName()])&&(!h||!h[f]);)if(e.getName()in -CKEDITOR.dtd.span)b.splitElement(e);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(e);b.collapse(true);e.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){f(this);var b=this.editor,c=b.activeEnterMode,b=b.getSelection(),d=b.getRanges()[0],e=a.getName(),e=CKEDITOR.dtd.$block[e];if(this.insertElementIntoRange(a,d)){d.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(e)if((e=a.getNext(function(a){return g(a)&& -!k(a)}))&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block))e.getDtd()["#"]?d.moveToElementEditStart(e):d.moveToElementEditEnd(a);else if(!e&&c!=CKEDITOR.ENTER_BR){e=d.fixBlock(true,c==CKEDITOR.ENTER_DIV?"div":"p");d.moveToElementEditStart(e)}}b.selectRanges([d]);h(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b)); -return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(m,function(a,b){return b}));a.setData(b, -null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a, -"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]= -+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var c=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker); -var f=a.config.contentsLangDirection;this.getDirection(1)!=f&&this.changeAttr("dir",f);var e=CKEDITOR.getCss();if(e){f=c.getHead();if(!f.getCustomData("stylesheet")){e=c.appendStyleText(e);e=new CKEDITOR.dom.element(e.ownerNode||e.owningElement);f.setCustomData("stylesheet",e);e.data("cke-temp",1)}}f=c.getCustomData("stylesheet_ref")||0;c.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a= -a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var h={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),f;if(c in h){var b=a.getSelection(),g,e=b.getRanges()[0],i=e.startPath(),j,p,k,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(g=b.getSelectedElement())||(g=d(b))){a.fire("saveSnapshot");e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START);g.remove();e.select(); -a.fire("saveSnapshot");f=1}else if(e.collapsed)if((j=i.block)&&(k=j[c?"getPrevious":"getNext"](q))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("table")&&e[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");e[c?"checkEndOfBlock":"checkStartOfBlock"]()&&j.remove();e["moveToElementEdit"+(c?"End":"Start")](k);e.select();a.fire("saveSnapshot");f=1}else if(i.blockLimit&&i.blockLimit.is("td")&&(p=i.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END)&&(k= -p[c?"getPrevious":"getNext"](q))){a.fire("saveSnapshot");e["moveToElementEdit"+(c?"End":"Start")](k);e.checkStartOfBlock()&&e.checkEndOfBlock()?k.remove():e.select();a.fire("saveSnapshot");f=1}else if((p=i.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END))f=1}return!f});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in h&&!this.getFirst(g)){this.appendBogus();b=a.createRange(); -b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}}); -CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(m,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a, -"key",function(b){b=b.data.domEvent.getKey();if(b in h){var c=b==8,d=a.getSelection().getRanges()[0],b=d.startPath();if(d.collapsed){var f;a:{var e=b.block;if(e)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(e,!c)||!d.collapsed)f=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var g=d.startContainer.getChild(d.startOffset-(c?1:0));if(g&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("hr")){a.fire("saveSnapshot");g.remove();f=true;break a}}if((d=d.startPath().block)&& -(!d||!d.contains(e))){a.fire("saveSnapshot");var i;(i=(c?d:e).getBogus())&&i.remove();f=a.getSelection();i=f.createBookmarks();(c?e:d).moveChildren(c?d:e,false);b.lastElement.mergeSiblings();j(e,d,!c);f.selectBookmarks(i);f=true}}else f=false;else f=false}if(!f)return}else{c=d;f=b.block;i=c.endPath().block;if(!f||!i||f.equals(i))b=false;else{a.fire("saveSnapshot");(e=f.getBogus())&&e.remove();c.deleteContents();if(i.getParent()){i.moveChildren(f,false);b.lastElement.mergeSiblings();j(f,i,true)}c= -a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView();a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref", -c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var k=CKEDITOR.dom.walker.bogus(),m=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, -q=CKEDITOR.dom.walker.whitespaces(true),s=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty(); -c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var f=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+ -f+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",f)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var f,e,g,h,i=[],p=d.range.startContainer;f=d.range.startPath();for(var p=j[p.getName()],k=0,n=c.getChildren(),w=n.count(),v=-1,m=-1,x=0,l=f.contains(j.$list);k<w;++k){f=n.getItem(k);if(a(f)){g=f.getName(); -if(l&&g in CKEDITOR.dtd.$list)i=i.concat(b(f,d));else{h=!!p[g];if(g=="br"&&f.data("cke-eol")&&(!k||k==w-1)){x=(e=k?i[k-1].node:n.getItem(k+1))&&(!a(e)||!e.is("br"));e=e&&a(e)&&j.$block[e.getName()]}v==-1&&!h&&(v=k);h||(m=k);i.push({isElement:1,isLineBreak:x,isBlock:f.isBlockBoundary(),hasBlockSibling:e,node:f,name:g,allowed:h});e=x=0}}else i.push({isElement:0,node:f,allowed:1})}if(v>-1)i[v].firstNotAllowed=1;if(m>-1)i[m].lastNotAllowed=1;return i}function c(b,d){var f=[],e=b.getChildren(),g=e.count(), -h,i=0,k=j[d],n=!b.is(j.$inline)||b.is("br");for(n&&f.push(" ");i<g;i++){h=e.getItem(i);a(h)&&!h.is(k)?f=f.concat(c(h,d)):f.push(h)}n&&f.push(" ");return f}function d(b){return b&&a(b)&&(b.is(j.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var g=b.clone(),h,i;g.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((h=(new CKEDITOR.dom.walker(g)).next())&&a(h)&&k[h.getName()]&&(i=h.getPrevious())&&a(i)&&!i.getParent().equals(b.startContainer)&&d.contains(i)&&e.contains(h)&&h.isIdentical(i)){h.moveChildren(i); -h.remove();f(b,c,d,e)}}function e(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var f=c.endContainer.getChild(c.endOffset),g=c.endContainer.getChild(c.endOffset-1);f&&d(f,b[b.length-1]);if(g&&d(g,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var j=CKEDITOR.dtd,k={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},n={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},m=CKEDITOR.tools.extend({},j.$inline);delete m.br; -return function(k,l,s){var t=k.editor,q=t.getSelection().getRanges()[0],F=false;if(l=="unfiltered_html"){l="html";F=true}if(!q.checkReadOnly()){var E=(new CKEDITOR.dom.elementPath(q.startContainer,q.root)).blockLimit||q.root,l={type:l,dontFilter:F,editable:k,editor:t,range:q,blockLimit:E,mergeCandidates:[],zombies:[]},t=l.range,F=l.mergeCandidates,D,I,L,H;if(l.type=="text"&&t.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){D=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",t.document);t.insertNode(D); -t.setStartAfter(D)}I=new CKEDITOR.dom.elementPath(t.startContainer);l.endPath=L=new CKEDITOR.dom.elementPath(t.endContainer);if(!t.collapsed){var E=L.block||L.blockLimit,Q=t.getCommonAncestor();E&&(!E.equals(Q)&&!E.contains(Q)&&t.checkEndOfBlock())&&l.zombies.push(E);t.deleteContents()}for(;(H=a(t.startContainer)&&t.startContainer.getChild(t.startOffset-1))&&a(H)&&H.isBlockBoundary()&&I.contains(H);)t.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);f(t,l.blockLimit,I,L);if(D){t.setEndBefore(D);t.collapse(); -D.remove()}D=t.startPath();if(E=D.contains(d,false,1)){t.splitElement(E);l.inlineStylesRoot=E;l.inlineStylesPeak=D.lastElement}D=t.createBookmark();(E=D.startNode.getPrevious(g))&&a(E)&&d(E)&&F.push(E);(E=D.startNode.getNext(g))&&a(E)&&d(E)&&F.push(E);for(E=D.startNode;(E=E.getParent())&&d(E);)F.push(E);t.moveToBookmark(D);if(D=s){D=l.range;if(l.type=="text"&&l.inlineStylesRoot){H=l.inlineStylesPeak;t=H.getDocument().createText("{cke-peak}");for(F=l.inlineStylesRoot.getParent();!H.equals(F);){t=t.appendTo(H.clone()); -H=H.getParent()}s=t.getOuterHtml().split("{cke-peak}").join(s)}H=l.blockLimit.getName();if(/^\s+|\s+$/.test(s)&&"span"in CKEDITOR.dtd[H])var O='<span data-cke-marker="1">&nbsp;</span>',s=O+s+O;s=l.editor.dataProcessor.toHtml(s,{context:null,fixForBody:false,dontFilter:l.dontFilter,filter:l.editor.activeFilter,enterMode:l.editor.activeEnterMode});H=D.document.createElement("body");H.setHtml(s);if(O){H.getFirst().remove();H.getLast().remove()}if((O=D.startPath().block)&&!(O.getChildCount()==1&&O.getBogus()))a:{var M; -if(H.getChildCount()==1&&a(M=H.getFirst())&&M.is(n)){O=M.getElementsByTag("*");D=0;for(F=O.count();D<F;D++){t=O.getItem(D);if(!t.is(m))break a}M.moveChildren(M.getParent(1));M.remove()}}l.dataWrapper=H;D=s}if(D){M=l.range;var O=M.document,K,s=l.blockLimit;D=0;var R;H=[];var N,T,F=t=0,P,V;I=M.startContainer;var E=l.endPath.elements[0],W;L=E.getPosition(I);Q=!!E.getCommonAncestor(I)&&L!=CKEDITOR.POSITION_IDENTICAL&&!(L&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);I=b(l.dataWrapper,l); -for(e(I,M);D<I.length;D++){L=I[D];if(K=L.isLineBreak){K=M;P=s;var S=void 0,Y=void 0;if(L.hasBlockSibling)K=1;else{S=K.startContainer.getAscendant(j.$block,1);if(!S||!S.is({div:1,p:1}))K=0;else{Y=S.getPosition(P);if(Y==CKEDITOR.POSITION_IDENTICAL||Y==CKEDITOR.POSITION_CONTAINS)K=0;else{P=K.splitElement(S);K.moveToPosition(P,CKEDITOR.POSITION_AFTER_START);K=1}}}}if(K)F=D>0;else{K=M.startPath();if(!L.isBlock&&i(l.editor,K.block,K.blockLimit)&&(T=l.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&l.editor.config.autoParagraph!== -false?l.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){T=O.createElement(T);T.appendBogus();M.insertNode(T);CKEDITOR.env.needsBrFiller&&(R=T.getBogus())&&R.remove();M.moveToPosition(T,CKEDITOR.POSITION_BEFORE_END)}if((K=M.startPath().block)&&!K.equals(N)){if(R=K.getBogus()){R.remove();H.push(K)}N=K}L.firstNotAllowed&&(t=1);if(t&&L.isElement){K=M.startContainer;for(P=null;K&&!j[K.getName()][L.name];){if(K.equals(s)){K=null;break}P=K;K=K.getParent()}if(K){if(P){V=M.splitElement(P);l.zombies.push(V); -l.zombies.push(P)}}else{P=s.getName();W=!D;K=D==I.length-1;P=c(L.node,P);for(var S=[],Y=P.length,Z=0,ba=void 0,X=0,aa=-1;Z<Y;Z++){ba=P[Z];if(ba==" "){if(!X&&(!W||Z)){S.push(new CKEDITOR.dom.text(" "));aa=S.length}X=1}else{S.push(ba);X=0}}K&&aa==S.length&&S.pop();W=S}}if(W){for(;K=W.pop();)M.insertNode(K);W=0}else M.insertNode(L.node);if(L.lastNotAllowed&&D<I.length-1){(V=Q?E:V)&&M.setEndAt(V,CKEDITOR.POSITION_AFTER_START);t=0}M.collapse()}}l.dontMoveCaret=F;l.bogusNeededBlocks=H}R=l.range;var U;V= -l.bogusNeededBlocks;for(W=R.createBookmark();N=l.zombies.pop();)if(N.getParent()){T=R.clone();T.moveToElementEditStart(N);T.removeEmptyBlocksAtEnd()}if(V)for(;N=V.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(R.document.createText(" "));for(;N=l.mergeCandidates.pop();)N.mergeSiblings();R.moveToBookmark(W);if(!l.dontMoveCaret){for(N=a(R.startContainer)&&R.startContainer.getChild(R.startOffset-1);N&&a(N)&&!N.is(j.$empty);){if(N.isBlockBoundary())R.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END); -else{if(d(N)&&N.getHtml().match(/(\s|&nbsp;)$/g)){U=null;break}U=R.clone();U.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(g)}U&&R.moveToRange(U)}q.select();h(k)}}}(),l=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b= -a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var f=d.startContainer,e=f.getAscendant("table",1),g=false;c(e.getElementsByTag("td"));c(e.getElementsByTag("th"));e=d.clone();e.setStart(f,0);e=a(e).lastBackward();if(!e){e=d.clone();e.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);e=a(e).lastForward();g=true}e||(e=f);if(e.is("table")){d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START); -d.collapse(true);e.remove()}else{e.is({tbody:1,thead:1,tfoot:1})&&(e=b(e,"tr",g));e.is("tr")&&(e=b(e,e.getParent().is("thead")?"th":"td",g));(f=e.getBogus())&&f.remove();d.moveToPosition(e,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()}(),function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath(); -if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){q=true;if(!m){b.call(this);m=CKEDITOR.tools.setTimeout(b,200,this)}}function b(){m=null;if(q){CKEDITOR.tools.setTimeout(a,0,this);q=false}}function g(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false; -var c=a.startContainer,d=a.getPreviousNode(s,null,c),f=a.getNextNode(s,null,c);return b(d)||b(f,1)||!d&&!f&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function c(a){return a.getCustomData("cke-fillingChar")}function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,f=a.getDocument().getSelection().getNative(),e=f&&f.type!="None"&&f.getRangeAt(0);if(c.getLength()>1&&e&&e.intersectsNode(c.$)){d=[f.anchorOffset,f.focusOffset];e=f.focusNode== -c.$&&f.focusOffset>0;f.anchorNode==c.$&&f.anchorOffset>0&&d[0]--;e&&d[1]--;var g;e=f;if(!e.isCollapsed){g=e.getRangeAt(0);g.setStart(e.anchorNode,e.anchorOffset);g.setEnd(e.focusNode,e.focusOffset);g=g.collapsed}g&&d.unshift(d.pop())}}c.setText(i(c.getText()));if(d){c=f.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);f.removeAllRanges();f.addRange(c)}}}function i(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function f(a,b,c){var d=a.on("focus", -function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var f=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var e=new CKEDITOR.dom.range(a);e.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(e.startContainer.$,e.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();d.removeListener();f&&f.removeListener()}function h(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+ -(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'">&nbsp;</div>',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),f=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function j(a){var b={37:1,39:1,8:1,46:1};return function(c){var d= -c.data.getKeystroke();if(b[d]){var f=a.getSelection().getRanges(),e=f[0];if(f.length==1&&e.collapsed)if((d=e[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function k(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,f;d;){if((f=d.type== -CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;f&&d.getAttribute("contentEditable")=="false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;f=c.endContainer;var e=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(e>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));f&&f.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(f):h.setEndBefore(f));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var f=c.clone(); -c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){f.setStartAfter(d);f.collapsed||a.splice(b+1,0,f)}return true}return false};d.next()}}return a}var m,q,s=CKEDITOR.dom.walker.invisible(1),n=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),f;if(!(f= -d.moveToClosestEditablePosition(b.selected,a)))f=d.moveToClosestEditablePosition(b.selected,!a);f&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();if(!f){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=f.getSelection();a&&a.removeAllRanges()}var f=b.editor;f.on("contentDom",function(){function b(){m= -new CKEDITOR.dom.selection(f.getSelection());m.lock()}function c(){h.removeListener("mouseup",c);p.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==g.$&&b.select()}var g=f.document,h=CKEDITOR.document,i=f.editable(),k=g.getBody(),p=g.getDocumentElement(),n=i.isInline(),r,m;CKEDITOR.env.gecko&&i.attachListener(i,"focus",function(a){a.removeListener();if(r!==0)if((a=f.getSelection().getNative())&&a.isCollapsed&&a.anchorNode== -i.$){a=f.createRange();a.moveToElementEditStart(i);a.select()}},null,null,-2);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){r&&CKEDITOR.env.webkit&&(r=f._.previousActive&&f._.previousActive.equals(g.getActive()));f.unlockSelection(r);r=0},null,null,-1);i.attachListener(i,"mousedown",function(){r=0});if(CKEDITOR.env.ie||n){l?i.attachListener(i,"beforedeactivate",b,null,null,-1):i.attachListener(f,"selectionCheck",b,null,null,-1);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusOut": -"blur",function(){f.lockSelection(m);r=1},null,null,-1);i.attachListener(i,"mousedown",function(){r=0})}if(CKEDITOR.env.ie&&!n){var F;i.attachListener(i,"mousedown",function(a){if(a.data.$.button==2){a=f.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)F=f.window.getScrollPosition()}});i.attachListener(i,"mouseup",function(a){if(a.data.$.button==2&&F){f.document.$.documentElement.scrollLeft=F.x;f.document.$.documentElement.scrollTop=F.y}F=null});if(g.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.ie6Compat)p.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=k.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(f){}d.setEndPoint(e.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){p.removeListener("mousemove",b);h.removeListener("mouseup",c);p.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<p.$.clientHeight&&a.$.x<p.$.clientWidth){var d=k.$.createTextRange();try{d.moveToPoint(a.$.clientX, -a.$.clientY)}catch(f){}var e=d.duplicate();p.on("mousemove",b);h.on("mouseup",c);p.on("mouseup",c)}});if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)p.on("mousedown",function(a){if(a.data.getTarget().is("html")){h.on("mouseup",c);p.on("mouseup",c)}})}}i.attachListener(i,"selectionchange",a,f);i.attachListener(i,"keyup",e,f);i.attachListener(i,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(n&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var o; -i.attachListener(i,"mousedown",function(){o=1});i.attachListener(g.getDocumentElement(),"mouseup",function(){o&&e.call(f);o=0})}else i.attachListener(CKEDITOR.env.ie?i:g.getDocumentElement(),"mouseup",e,f);CKEDITOR.env.webkit&&i.attachListener(g,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(i)}},null,null,-1);i.attachListener(i,"keydown",j(f),null,null,-1)});f.on("setData",function(){f.unlockSelection();CKEDITOR.env.webkit&& -c()});f.on("contentDomUnload",function(){f.unlockSelection()});if(CKEDITOR.env.ie9Compat)f.on("beforeDestroy",c,null,null,9);f.on("dataReady",function(){delete f._.fakeSelection;delete f._.hiddenSelectionContainer;f.selectionChange(1)});f.on("loadSnapshot",function(){var a=f.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&&a.remove()},null,null,100);f.on("key",function(a){if(f.mode=="wysiwyg"){var b=f.getSelection();if(b.isFake){var c= -n[a.data.keyCode];if(c)return c({editor:f,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=c(a)){var d=e.document.$.defaultView.getSelection();d.type=="Caret"&&d.anchorNode==a.$&&(h=1);g=a.getText();a.setText(i(g))}}function f(){var a=e.editable();if(a)if(a=c(a)){a.setText(g);if(h){e.document.$.defaultView.getSelection().setPosition(a.$,a.getLength());h=0}}}var e=a.editor;if(CKEDITOR.env.webkit){e.on("selectionChange", -function(){var a=e.editable(),b=c(a);b&&(b.getCustomData("ready")?d(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){d(e.editable())},null,null,-1);var g,h;e.on("beforeUndoImage",b);e.on("afterUndoImage",f);e.on("beforeGetData",b,null,null,0);e.on("getData",f)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection|| -this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck= -function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var l=typeof window.getSelection!="function",o=1;CKEDITOR.dom.selection=function(a){if(a instanceof -CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:o++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}c=l?this.document.$.selection:this.document.getWindow().$.getSelection();if(CKEDITOR.env.webkit)(c.type=="None"&&this.document.getActive().equals(a)|| -c.type=="Caret"&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&f(a,c);else if(CKEDITOR.env.gecko)c&&(this.document.getActive().equals(a)&&c.anchorNode&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&f(a,c,true);else if(CKEDITOR.env.ie){b=this.document.getActive();if(l)c.type=="None"&&(b&&b.equals(this.document.getDocumentElement()))&&f(a,null,true);else{(c=c&&c.anchorNode)&&(c=new CKEDITOR.dom.node(c));b&&(b.equals(this.document.getDocumentElement())&&c&&(a.equals(c)||a.contains(c)))&&f(a,null, -true)}}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(g){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges= -new CKEDITOR.dom.rangeList}return this};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=l?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:l?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c= -this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(f){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&r[d.childNodes[c.startOffset].nodeName.toLowerCase()])b= -CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=l?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var f=d.children,e,g,h=b.duplicate(),i=0,j=f.length-1,k=-1,p,n;i<=j;){k=Math.floor((i+j)/2);e=f[k];h.moveToElementText(e);p=h.compareEndPoints("StartToStart",b);if(p>0)j=k-1;else if(p<0)i=k+1;else return{container:d,offset:a(e)}}if(k== --1||k==f.length-1&&p<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;f=d.childNodes;if(!h){e=f[f.length-1];return e.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:f.length}:{container:e,offset:e.nodeValue.length}}for(d=f.length;h>0&&d>0;){g=f[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){n=g;h=h-g.nodeValue.length}}return{container:n,offset:-h}}h.collapse(p>0?true:false);h.setEndPoint(p>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g, -"\n").length;if(!h)return{container:d,offset:a(e)+(p>0?0:1)};for(;h>0;)try{g=e[p>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;n=g}e=g}catch(r){return{container:d,offset:a(e)}}return{container:n,offset:p>0?-h:n.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset); -d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],f=0;f<c.length;f++){for(var e=c.item(f),g=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<g.childNodes.length&&g.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(g),h);a.setEnd(new CKEDITOR.dom.node(g),h+1);d.push(a)}return d}return[]}}():function(){var a= -[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var f=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(f.startContainer),f.startOffset);b.setEnd(new CKEDITOR.dom.node(f.endContainer),f.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:k(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!== -void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent(); -b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,f=2;f&&(!(c=a.getEnclosedNode())|| -!(c.type==CKEDITOR.NODE_ELEMENT&&r[c.getName()]&&(d=c)));f--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=l?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel= -null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty(); -a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=o++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,f=0;f<a.length;++f){c=a[f];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var e= -CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();e&&!e.equals(this.root)&&e.focus()}else{var h;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(h=j.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT){j=j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)h=i;if(h.getAttribute("contenteditable")=="false")break a}h=void 0}if(h)this.fake(h);else{if(l){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1, -tbody:1,tr:1};if(a.length>1){h=a[a.length-1];a[0].setEnd(h.endContainer,h.endOffset)}h=a[0];var a=h.collapsed,k,n,m;if((c=h.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in r&&(!c.is("a")||!c.getText()))try{m=c.$.createControlRange();m.addElement(c.$);m.select();return}catch(o){}if(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b){h.shrink(CKEDITOR.NODE_ELEMENT,true);a=h.collapsed}m= -h.createBookmark();b=m.startNode;if(!a)e=m.endNode;m=h.document.$.body.createTextRange();m.moveToElementText(b.$);m.moveStart("character",1);if(e){i=h.document.$.body.createTextRange();i.moveToElementText(e.$);m.setEndPoint("EndToEnd",i);m.moveEnd("character",-1)}else{k=b.getNext(j);n=b.hasAscendant("pre");k=!(k&&k.getText&&k.getText().match(i))&&(n||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));n=h.document.createElement("span");n.setHtml("&#65279;");n.insertBefore(b);k&&h.document.createText("").insertBefore(b)}h.setStartBefore(b); -b.remove();if(a){if(k){m.moveStart("character",-1);m.select();h.document.$.selection.clear()}else m.select();h.moveToPosition(n,CKEDITOR.POSITION_BEFORE_START);n.remove()}else{h.setEndBefore(e);e.remove();m.select()}}else{e=this.getNative();if(!e)return;this.removeAllRanges();for(m=0;m<a.length;m++){if(m<a.length-1){k=a[m];n=a[m+1];i=k.clone();i.setStart(k.endContainer,k.endOffset);i.setEnd(n.startContainer,n.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);h=i.getCommonAncestor(); -i=i.getEnclosedNode();if(h.isReadOnly()||i&&i.isReadOnly()){n.setStart(k.startContainer,k.startOffset);a.splice(m--,1);continue}}}h=a[m];n=this.document.$.createRange();if(h.collapsed&&CKEDITOR.env.webkit&&g(h)){k=this.root;d(k,false);i=k.getDocument().createText("​");k.setCustomData("cke-fillingChar",i);h.insertNode(i);if((k=i.getNext())&&!i.getPrevious()&&k.type==CKEDITOR.NODE_ELEMENT&&k.getName()=="br"){d(this.root);h.moveToPosition(k,CKEDITOR.POSITION_BEFORE_START)}else h.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}n.setStart(h.startContainer.$, -h.startOffset);try{n.setEnd(h.endContainer.$,h.endOffset)}catch(s){if(s.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){h.collapse(1);n.setEnd(h.endContainer.$,h.endOffset)}else throw s;}e.addRange(n)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();h(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT; -c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=o++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b= -[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative(); -try{a&&a[l?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var f=a.getAttribute("contentEditable");f=="false"?c=a:f=="true"&&(d=1)}}return c}function e(b){var c=b.document;if(b.collapsed){c=o(this,c);b.insertNode(c);b.moveToPosition(c,CKEDITOR.POSITION_BEFORE_END)}else{var d=this.element, -f=this._.definition,h,i=f.ignoreReadonly,j=i||f.includeReadonly;j==null&&(j=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[d];if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var n=b.createBookmark(),r=n.startNode,m=n.endNode,p=r,l;if(!i){var w=b.getCommonAncestor(),i=a(r,w),w=a(m,w);i&&(p=i.getNextSourceNode(true));w&&(m=w)}for(p.getPosition(m)==CKEDITOR.POSITION_FOLLOWING&&(p=0);p;){i=false;if(p.equals(m)){p=null;i=true}else{var q=p.type==CKEDITOR.NODE_ELEMENT? -p.getName():null,w=q&&p.getAttribute("contentEditable")=="false",v=q&&p.getAttribute("data-nostyle");if(q&&p.data("cke-bookmark")){p=p.getNextSourceNode(true);continue}if(w&&j&&CKEDITOR.dtd.$block[q])for(var x=p,t=g(x),u=void 0,z=t.length,y=0,x=z&&new CKEDITOR.dom.range(x.getDocument());y<z;++y){var u=t[y],B=CKEDITOR.filter.instances[u.data("cke-filter")];if(B?B.check(this):1){x.selectNodeContents(u);e.call(this,x)}}t=q?!k[q]||v?0:w&&!j?0:(p.getPosition(m)|G)==G&&(!f.childRule||f.childRule(p)):1; -if(t)if((t=p.getParent())&&((t.getDtd()||CKEDITOR.dtd.span)[d]||h)&&(!f.parentRule||f.parentRule(t))){if(!l&&(!q||!CKEDITOR.dtd.$removeEmpty[q]||(p.getPosition(m)|G)==G)){l=b.clone();l.setStartBefore(p)}q=p.type;if(q==CKEDITOR.NODE_TEXT||w||q==CKEDITOR.NODE_ELEMENT&&!p.getChildCount()){for(var q=p,aa;(i=!q.getNext(A))&&(aa=q.getParent(),k[aa.getName()])&&(aa.getPosition(r)|C)==C&&(!f.childRule||f.childRule(aa));)q=aa;l.setEndAfter(q)}}else i=true;else i=true;p=p.getNextSourceNode(v||w)}if(i&&l&&!l.collapsed){for(var i= -o(this,c),w=i.hasAttributes(),v=l.getCommonAncestor(),q={},t={},u={},z={},U,$,ca;i&&v;){if(v.getName()==d){for(U in f.attributes)if(!z[U]&&(ca=v.getAttribute($)))i.getAttribute(U)==ca?t[U]=1:z[U]=1;for($ in f.styles)if(!u[$]&&(ca=v.getStyle($)))i.getStyle($)==ca?q[$]=1:u[$]=1}v=v.getParent()}for(U in t)i.removeAttribute(U);for($ in q)i.removeStyle($);w&&!i.hasAttributes()&&(i=null);if(i){l.extractContents().appendTo(i);l.insertNode(i);s.call(this,i);i.mergeSiblings();CKEDITOR.env.ie||i.$.normalize()}else{i= -new CKEDITOR.dom.element("span");l.extractContents().appendTo(i);l.insertNode(i);s.call(this,i);i.remove(true)}l=null}}b.moveToBookmark(n);b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),f=null,e=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;k.checkElementRemovable(h)&&(f=h)}for(g=0;g<c.elements.length;g++){h= -c.elements[g];if(h==c.block||h==c.blockLimit)break;k.checkElementRemovable(h)&&(e=h)}e&&j.breakParent(e);f&&d.breakParent(f)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var f=new CKEDITOR.dom.elementPath(d.getParent(),a.root),e,h=0,g;h<f.elements.length&&(g=f.elements[h]);h++){if(g==f.block||g==f.blockLimit)break;if(this.checkElementRemovable(g)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(g,CKEDITOR.END)||(i=a.checkBoundaryOfElement(g,CKEDITOR.START)))){e= -g;e.match=i?"start":"end"}else{g.mergeSiblings();g.is(this.element)?q.call(this,g):n(g,w(this)[g.getName()])}}}if(e){g=d;for(h=0;;h++){i=f.elements[h];if(i.equals(e))break;else if(i.match)continue;else i=i.clone();i.append(g);g=i}g[e.match=="start"?"insertBefore":"insertAfter"](e)}}else{var j=c.endNode,k=this;b();for(f=d;!f.equals(j);){e=f.getNextSourceNode();if(f.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(f)){f.getName()==this.element?q.call(this,f):n(f,w(this)[f.getName()]);if(e.type== -CKEDITOR.NODE_ELEMENT&&e.contains(d)){b();e=d.getNext()}}f=e}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function g(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function c(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&r(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b, -a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var f in b.styles)b.styles.hasOwnProperty(f)&&a.removeStyle(f)}}function i(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,f=a.document,e;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){e=o(this,f,d);h(d,e)}a.moveToBookmark(b)} -function f(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,f;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(f=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(f);h(d,f)}else q.call(this,d);a.moveToBookmark(b)}function h(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&& -b.is("pre"),f=a.is("pre"),e=!d&&f;if(d&&!f){f=b;(e=a.getBogus())&&e.remove();e=a.getHtml();e=k(e,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");e=e.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");e=e.replace(/([ \t\n\r]+|&nbsp;)/g," ");e=e.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(f);f.$.outerHTML="<pre>"+e+"</pre>";f.copyAttributes(g.getFirst());f=g.getFirst().remove()}else f.setHtml(e);b=f}else e?b=m(c?[a.getHtml()]:j(a),b):a.moveChildren(b); -b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(B))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=k(h.getHtml(),/\n$/,"")+"\n\n"+k(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);h.remove()}}else c&&l(b)}function j(a){var b=[];k(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function k(a,b,c){var d="",f= -"",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(f=c);return""});return d+a.replace(b,c)+f}function m(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var f=a[d],f=f.replace(/(\r\n|\r)/g,"\n"),f=k(f,/^[ \t]*\n/,""),f=k(f,/\n$/,""),f=k(f,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;", -a.length-1)+" "}),f=f.replace(/\n/g,"<br>"),f=f.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "});if(c){var e=b.clone();e.setHtml(f);c.append(e)}else b.setHtml(f)}return c||b}function q(a,b){var c=this._.definition,d=c.attributes,c=c.styles,f=w(this)[a.getName()],e=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),h;for(h in d)if(!((h=="class"||this._.definition.fullMatch)&&a.getAttribute(h)!=v(h,d[h]))&&!(b&&h.slice(0,5)=="data-")){e=a.hasAttribute(h);a.removeAttribute(h)}for(var g in c)if(!(this._.definition.fullMatch&& -a.getStyle(g)!=v(g,c[g],true))){e=e||!!a.getStyle(g);a.removeStyle(g)}n(a,f,u[a.getName()]);e&&(this._.definition.alwaysRemoveElement?l(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?l(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function s(a){for(var b=w(this),c=a.getElementsByTag(this.element),d,f=c.count();--f>=0;){d=c.getItem(f);d.isReadOnly()||q.call(this,d,true)}for(var e in b)if(e!=this.element){c=a.getElementsByTag(e);for(f= -c.count()-1;f>=0;f--){d=c.getItem(f);d.isReadOnly()||n(d,b[e])}}}function n(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var f=b[d][0],e;if(e=a.getAttribute(f)){var h=b[d][1];(h===null||h.test&&h.test(e)||typeof h=="string"&&e==h)&&a.removeAttribute(f)}}c||l(a)}function l(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(B),d=a.getNext(B);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&& -a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&&d.mergeSiblings()}}}function o(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=r(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function r(a,b){var c=b._.definition,d=c.attributes, -c=CKEDITOR.style.getStyleText(c);if(d)for(var f in d)a.setAttribute(f,d[f]);c&&a.setAttribute("style",c);return a}function p(a,b){for(var c in a)a[c]=a[c].replace(z,function(a,c){return b[c]})}function w(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var f=c[d],e,h;if(typeof f=="string")e=f.toLowerCase();else{e=f.element?f.element.toLowerCase():a.element;h=f.attributes}f=b[e]||(b[e]={}); -if(h){var f=f.attributes=f.attributes||[],g;for(g in h)f.push([g.toLowerCase(),h[g]])}}}return b}function v(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a,b);return d[c?"getStyle":"getAttribute"](a)}function x(a,b,c){for(var d=a.document,f=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,e,h=f.createIterator();e=h.getNextRange();)b.call(this,e,c);a.selectRanges(f);d.removeCustomData("doc_processing_style")}var u={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1, -p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},t={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},y=/\s*(?:;\s*|$)/,z=/#\((.+?)\)/g,A=CKEDITOR.dom.walker.bookmark(0,1),B=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a); -var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);p(a.attributes,b);p(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(u[c]?CKEDITOR.STYLE_BLOCK:t[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof -CKEDITOR.dom.document)return x.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;x.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return x.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;x.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange= -this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?i:this.type==CKEDITOR.STYLE_OBJECT?c:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?f:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){r(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c= -a.elements,d=0,f;d<c.length;d++){f=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(f==a.block||f==a.blockLimit))){if(this.type==CKEDITOR.STYLE_OBJECT){var e=f.getName();if(!(typeof this.element=="string"?e==this.element:e in this.element))continue}if(this.checkElementRemovable(f,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true}, -checkElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},f=0,e=c.attributes;if(e)for(var h in e){f++;d[h]=e[h]}if(h=CKEDITOR.style.getStyleText(c)){d.style||f++;d.style=h}d._length=f;c=c._AC=d}if(c._length){for(var g in c)if(g!="_length"){f=a.getAttribute(g)||"";if(g=="style")a:{d=c[g];typeof d== -"string"&&(d=CKEDITOR.tools.parseCssText(d));typeof f=="string"&&(f=CKEDITOR.tools.parseCssText(f,true));h=void 0;for(h in d)if(!(h in f&&(f[h]==d[h]||d[h]=="inherit"||f[h]=="inherit"))){d=false;break a}d=true}else d=c[g]==f;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=w(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0]; -if(d=a.getAttribute(d)){var f=b[c][1];if(f===null||typeof f=="string"&&d==f||f.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],f=b.attributes;if(f)for(var e in f)c.push(" ",e,'="',f[e],'"');(f=CKEDITOR.style.getStyleText(b))&&c.push(' style="',f,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b; -var b=a.styles,c=a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(y,";"));for(var f in b){var e=b[f],h=(f+":"+e).replace(y,";");e=="inherit"?d=d+h:c=c+h}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT}, -a,true);return this.customHandlers[a.type]=b};var G=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,C=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)},CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&& -a.removeStyle(this.style)},CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"),CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet),CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)},CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var c= -0;c<b.length;c++){var d=b[c],e=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,e)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"), -g=b[0];CKEDITOR.stylesSet.addExternal(g,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(g,function(b){e._.stylesDefinitions=b[g];a(e._.stylesDefinitions)})}}}}),CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+ -"--\>"}}),"use strict",function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,c){var d=null,i=null,f=[],h=b,j,c=c||b.getDocument().getBody();do if(h.type==CKEDITOR.NODE_ELEMENT){f.push(h);if(!this.lastElement){this.lastElement=h;if(h.is(CKEDITOR.dtd.$object)||h.getAttribute("contenteditable")=="false")continue}if(h.equals(c))break; -if(!i){j=h.getName();h.getAttribute("contenteditable")=="true"?i=h:!d&&e[j]&&(d=h);if(a[j]){var k;if(k=!d){if(j=j=="div"){a:{j=h.getChildren();k=0;for(var m=j.count();k<m;k++){var q=j.getItem(k);if(q.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[q.getName()]){j=true;break a}}j=false}j=!j}k=j}k?d=h:i=h}}}while(h=h.getParent());i||(i=c);this.block=d;this.blockLimit=i;this.root=c;this.elements=f}}(),CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a|| -e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var g;typeof a=="string"&&(g=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?g=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?g=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?g=a:typeof a=="object"&&(g=function(b){return b.getName()in a});var c=this.elements,d=c.length;e&&d--;if(b){c=Array.prototype.slice.call(c, -0);c.reverse()}for(e=0;e<d;e++)if(g(c[e]))return c[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a},CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node, -CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,g=this.getLength(),c=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),c);if(e.childNodes.length==b)if(a>=g){d=c.createText("");d.insertAfter(this)}else{a=c.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, -e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}),function(){function a(a,e,c){var d=a.serializable,i=e[c?"endContainer":"startContainer"],f=c?"endOffset":"startOffset",h=d?e.document.getById(a.startNode):a.startNode,a=d?e.document.getById(a.endNode):a.endNode;if(i.equals(h.getPrevious())){e.startOffset=e.startOffset-i.getLength()-a.getPrevious().getLength();i=a.getNext()}else if(i.equals(a.getPrevious())){e.startOffset=e.startOffset-i.getLength();i=a.getNext()}i.equals(h.getParent())&& -e[f]++;i.equals(a.getParent())&&e[f]++;e[c?"endContainer":"startContainer"]=i;return e}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,e=CKEDITOR.dom.walker.bookmark(),c=[],d;return{getNextRange:function(i){d=d===void 0?0:d+1;var f=a[d];if(f&&a.length>1){if(!d)for(var h=a.length-1;h>=0;h--)c.unshift(a[h].createBookmark(true));if(i)for(var j= -0;a[d+j+1];){for(var k=f.document,i=0,h=k.getById(c[j].endNode),k=k.getById(c[j+1].startNode);;){h=h.getNextSourceNode(false);if(k.equals(h))i=1;else if(e(h)||h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary())continue;break}if(!i)break;j++}for(f.moveToBookmark(c.shift());j--;){h=a[++d];h.moveToBookmark(c.shift());f.setEnd(h.endContainer,h.endOffset)}}return f}}},createBookmarks:function(b){for(var e=[],c,d=0;d<this.length;d++){e.push(c=this[d].createBookmark(b,true));for(var i=d+1;i<this.length;i++){this[i]= -a(c,this[i]);this[i]=a(c,this[i],true)}}return e},createBookmarks2:function(a){for(var e=[],c=0;c<this.length;c++)e.push(this[c].createBookmark2(a));return e},moveToBookmarks:function(a){for(var e=0;e<this.length;e++)this[e].moveToBookmark(a[e])}}}(),function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),f= -0,e;f<c.length;f++){e=c[f];if(d.ie&&(e.replace(/^ie/,"")==d.version||d.quirks&&e=="iequirks"))e="ie";if(d[e]){b=b+("_"+c[f]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(e(a));d[a]=1}b&&b()}function g(a){var b=a.getById(i);if(!b){b=a.getHead().append("style");b.setAttribute("id",i);b.setAttribute("type","text/css")}return b}function c(a,b,c){var d,f,e;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(f=0;f<b.length;f++)b[f]=b[f].split("{")}for(var h= -0;h<a.length;h++)if(CKEDITOR.env.webkit)for(f=0;f<b.length;f++){e=b[f][1];for(d=0;d<c.length;d++)e=e.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[f][0],e)}else{e=b;for(d=0;d<c.length;d++)e=e.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&&CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+e:a[h].$.innerHTML=a[h].$.innerHTML+e}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+ -"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,f){var e;if(a){a=a.toLowerCase();b&&(e=this.icons[a+"-rtl"]);e||(e=this.icons[a])}a=c||e&&e.path||"";d=d||e&&e.offset;f=f||e&&e.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype, -{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=g(CKEDITOR.document);return(this.setUiColor=function(a){var d=CKEDITOR.skin.chameleon,e=[[h,a]];this.uiColor=a;c([b],d(this,"editor"),e);c(f,d(this,"panel"),e)}).call(this,a)}});var i="cke_ui_color",f=[],h=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a= -g(a);f.push(a);var d=b.getUiColor();d&&c([a],CKEDITOR.skin.chameleon(b,"panel"),[[h,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"), -b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(g){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}}(),CKEDITOR.skin.name="moono",CKEDITOR.skin.ua_editor= -"ie,iequirks,ie7,ie8,gecko",CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8",CKEDITOR.skin.chameleon=function(){var a=function(){return function(a,b){for(var d=a.match(/[^#]./g),e=0;e<3;e++){var f=d,h=e,j;j=parseInt(d[e],16);j=("0"+(b<0?0|j*(1+b):0|j+(255-j)*b).toString(16)).slice(-2);f[h]=j}return"#"+d.join("")}}(),e=function(){var a=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');"); -return function(b,d){return a.output({from:b,to:d})}}(),b={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), -panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; -return function(g,c){var d=g.uiColor,d={id:"."+g.id,defaultBorder:a(d,-0.1),defaultGradient:e(a(d,0.9),d),lightGradient:e(a(d,1),a(d,0.7)),mediumGradient:e(a(d,0.8),a(d,0.5)),ckeButtonOn:e(a(d,0.6),a(d,0.7)),ckeResizer:a(d,-0.4),ckeToolbarSeparator:a(d,0.5),ckeColorauto:a(d,0.8),dialogBody:a(d,0.7),dialogTabSelected:e("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:a(d,-0.6),elementsPathBg:d,menubuttonIcon:a(d,0.5),menubuttonIconHover:a(d,0.3)};return b[c].output(d).replace(/\[/g, -"{").replace(/\]/g,"}")}}(),CKEDITOR.plugins.add("dialogui",{onLoad:function(){var a=function(a){this._||(this._={});this._["default"]=this._.initValue=a["default"]||"";this._.required=a.required||false;for(var b=[this._],c=1;c<arguments.length;c++)b.push(arguments[c]);b.push(true);CKEDITOR.tools.extend.apply(CKEDITOR.tools,b);return this._},e={build:function(a,b,c){return new CKEDITOR.ui.dialog.textInput(a,b,c)}},b={build:function(a,b,c){return new CKEDITOR.ui.dialog[b.type](a,b,c)}},g={isChanged:function(){return this.getValue()!= -this.getInitValue()},reset:function(a){this.setValue(this.getInitValue(),a)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},c=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(a,b){if(!this._.domOnChangeRegistered){a.on("load",function(){this.getInputElement().on("change",function(){a.parts.dialog.isVisible()&&this.fire("change", -{value:this.getValue()})},this)},this);this._.domOnChangeRegistered=true}this.on("change",b)}},true),d=/^on([A-Z]\w+)/,i=function(a){for(var b in a)(d.test(b)||b=="title"||b=="type")&&delete a[b];return a};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,c,d,e){if(!(arguments.length<4)){var g=a.call(this,c);g.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var i={role:c.role||"presentation"};if(c.includeLabel)i["aria-labelledby"]=g.labelId;CKEDITOR.ui.dialog.uiElement.call(this, -b,c,d,"div",null,i,function(){var a=[],d=c.required?" cke_required":"";if(c.labelLayout!="horizontal")a.push('<label class="cke_dialog_ui_labeled_label'+d+'" ',' id="'+g.labelId+'"',g.inputId?' for="'+g.inputId+'"':"",(c.labelStyle?' style="'+c.labelStyle+'"':"")+">",c.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',c.controlStyle?' style="'+c.controlStyle+'"':"",' role="presentation">',e.call(this,b,c),"</div>");else{d={type:"hbox",widths:c.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ -d+'" id="'+g.labelId+'" for="'+g.inputId+'"'+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(c.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(c.controlStyle?' style="'+c.controlStyle+'"':"")+">"+e.call(this,b,c)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,d,a)}return a.join("")})}},textInput:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",g={"class":"cke_dialog_ui_input_"+ -c.type,id:e,type:c.type};if(c.validate)this.validate=c.validate;if(c.maxLength)g.maxlength=c.maxLength;if(c.size)g.size=c.size;if(c.inputStyle)g.style=c.inputStyle;var i=this,s=false;b.on("load",function(){i.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(s=true)});i.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&s){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);s=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, -b,c,d,function(){var a=['<div class="cke_dialog_ui_input_',c.type,'" role="presentation"'];c.width&&a.push('style="width:'+c.width+'" ');a.push("><input ");g["aria-labelledby"]=this._.labelId;this._.required&&(g["aria-required"]=this._.required);for(var b in g)a.push(b+'="'+g[b]+'" ');a.push(" /></div>");return a.join("")})}},textarea:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this,g=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",i={};if(c.validate)this.validate=c.validate; -i.rows=c.rows||5;i.cols=c.cols||20;i["class"]="cke_dialog_ui_input_textarea "+(c["class"]||"");if(typeof c.inputStyle!="undefined")i.style=c.inputStyle;if(c.dir)i.dir=c.dir;CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){i["aria-labelledby"]=this._.labelId;this._.required&&(i["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',g,'" '],b;for(b in i)a.push(b+'="'+CKEDITOR.tools.htmlEncode(i[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(e._["default"]), -"</textarea></div>");return a.join("")})}},checkbox:function(b,c,d){if(!(arguments.length<3)){var e=a.call(this,c,{"default":!!c["default"]});if(c.validate)this.validate=c.validate;CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"span",null,null,function(){var a=CKEDITOR.tools.extend({},c,{id:c.id?c.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),d=[],g=CKEDITOR.tools.getNextId()+"_label",j={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":g};i(a);if(c["default"])j.checked= -"checked";if(typeof a.inputStyle!="undefined")a.style=a.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,a,d,"input",null,j);d.push(' <label id="',g,'" for="',j.id,'"'+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(c.label),"</label>");return d.join("")})}},radio:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);if(!this._["default"])this._["default"]=this._.initValue=c.items[0][1];if(c.validate)this.validate=c.valdiate;var e=[],g=this;c.role="radiogroup"; -c.includeLabel=true;CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){for(var a=[],d=[],j=(c.id?c.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<c.items.length;l++){var o=c.items[l],r=o[2]!==void 0?o[2]:o[0],p=o[1]!==void 0?o[1]:o[0],w=CKEDITOR.tools.getNextId()+"_radio_input",v=w+"_label",w=CKEDITOR.tools.extend({},c,{id:w,title:null,type:null},true),r=CKEDITOR.tools.extend({},w,{title:r},true),x={type:"radio","class":"cke_dialog_ui_radio_input",name:j,value:p,"aria-labelledby":v},u=[]; -if(g._["default"]==p)x.checked="checked";i(w);i(r);if(typeof w.inputStyle!="undefined")w.style=w.inputStyle;w.keyboardFocusable=true;e.push(new CKEDITOR.ui.dialog.uiElement(b,w,u,"input",null,x));u.push(" ");new CKEDITOR.ui.dialog.uiElement(b,r,u,"label",null,{id:v,"for":x.id},o[0]);a.push(u.join(""))}new CKEDITOR.ui.dialog.hbox(b,e,a,d);return d.join("")});this._.children=e}},button:function(b,c,d){if(arguments.length){typeof c=="function"&&(c=c(b.getParentEditor()));a.call(this,c,{disabled:c.disabled|| -false});CKEDITOR.event.implementOn(this);var e=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){if(a.data.getKeystroke()in{32:1}){e.click();a.data.preventDefault()}})})();a.unselectable()},this);var g=CKEDITOR.tools.extend({},c);delete g.style;var i=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,g,d,"a",null,{style:c.style,href:"javascript:void(0)",title:c.label,hidefocus:"true", -"class":c["class"],role:"button","aria-labelledby":i},'<span id="'+i+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(c.label)+"</span>")}},select:function(b,c,d){if(!(arguments.length<3)){var e=a.call(this,c);if(c.validate)this.validate=c.validate;e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){var a=CKEDITOR.tools.extend({},c,{id:c.id?c.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],g=[],j={id:e.inputId,"class":"cke_dialog_ui_input_select", -"aria-labelledby":this._.labelId};d.push('<div class="cke_dialog_ui_input_',c.type,'" role="presentation"');c.width&&d.push('style="width:'+c.width+'" ');d.push(">");if(c.size!=void 0)j.size=c.size;if(c.multiple!=void 0)j.multiple=c.multiple;i(a);for(var l=0,o;l<c.items.length&&(o=c.items[l]);l++)g.push('<option value="',CKEDITOR.tools.htmlEncode(o[1]!==void 0?o[1]:o[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(o[0]));if(typeof a.inputStyle!="undefined")a.style=a.inputStyle;e.select= -new CKEDITOR.ui.dialog.uiElement(b,a,d,"select",null,j,g.join(""));d.push("</div>");return d.join("")})}},file:function(b,c,d){if(!(arguments.length<3)){c["default"]===void 0&&(c["default"]="");var e=CKEDITOR.tools.extend(a.call(this,c),{definition:c,buttons:[]});if(c.validate)this.validate=c.validate;b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,c,d,function(){e.frameId=CKEDITOR.tools.getNextId()+ -"_fileInput";var a=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',e.frameId,'" title="',c.label,'" src="javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"></iframe>');return a.join("")})}},fileButton:function(b,c,d){if(!(arguments.length<3)){a.call(this,c);var e=this;if(c.validate)this.validate=c.validate;var g=CKEDITOR.tools.extend({}, -c),i=g.onClick;g.className=(g.className?g.className+" ":"")+"cke_dialog_ui_button";g.onClick=function(a){var d=c["for"];if(!i||i.call(this,a)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(c["for"][0],c["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,g,d)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,c=/\/$/;return function(d,e,g){if(!(arguments.length<3)){var i=[], -n=e.html;n.charAt(0)!="<"&&(n="<span>"+n+"</span>");var l=e.focus;if(l){var o=this.focus;this.focus=function(){(typeof l=="function"?l:o).call(this);this.fire("focus")};if(e.isFocusable)this.isFocusable=this.isFocusable;this.keyboardFocusable=true}CKEDITOR.ui.dialog.uiElement.call(this,d,e,i,"span",null,null,"");i=i.join("").match(a);n=n.match(b)||["","",""];if(c.test(n[1])){n[1]=n[1].slice(0,-1);n[2]="/"+n[2]}g.push([n[1]," ",i[1]||"",n[2]].join(""))}}}(),fieldset:function(a,b,c,d,e){var g=e.label; -this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,e,d,"fieldset",null,null,function(){var a=[];g&&a.push("<legend"+(e.labelStyle?' style="'+e.labelStyle+'"':"")+">"+g+"</legend>");for(var b=0;b<c.length;b++)a.push(c[b]);return a.join("")})}},true);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(a){var b=CKEDITOR.document.getById(this._.labelId);b.getChildCount()< -1?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue=a;return this},getLabel:function(){var a=CKEDITOR.document.getById(this._.labelId);return!a||a.getChildCount()<1?"":a.getChild(0).getText()},eventProcessors:c},true);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):false},enable:function(){this._.disabled=false;var a=this.getElement();a&&a.removeClass("cke_disabled")}, -disable:function(){this._.disabled=true;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(a,b){this.on("click",function(){b.apply(this,arguments)})}},true),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:true},true);CKEDITOR.ui.dialog.textInput.prototype= -CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&b.$.focus()},0)},select:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();if(b){b.$.focus();b.$.select()}},0)},accessKeyUp:function(){this.select()},setValue:function(a){!a&&(a="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this, -arguments)},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(a,b,c){var d=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),e=this.getInputElement().$;d.$.text=a;d.$.value=b===void 0||b===null?a:b;c===void 0||c===null?CKEDITOR.env.ie?e.add(d.$):e.add(d.$, -null):e.add(d.$,c);return this},remove:function(a){this.getInputElement().$.remove(a);return this},clear:function(){for(var a=this.getInputElement().$;a.length>0;)a.remove(0);return this},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked}, -accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(a,b){if(!CKEDITOR.env.ie||CKEDITOR.env.version>8)return c.onChange.apply(this,arguments);a.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;b.propertyName=="checked"&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",b);return null}},keyboardFocusable:true},g,true);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, -{setValue:function(a,b){for(var c=this._.children,d,e=0;e<c.length&&(d=c[e]);e++)d.getElement().$.checked=d.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(a,b){if(CKEDITOR.env.ie){a.on("load", -function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;a.propertyName=="checked"&&this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b)}else return c.onChange.apply(this,arguments);return null}}},g,true);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,g,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument(); -return a.$.forms.length>0?new CKEDITOR.dom.element(a.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,d=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},e;for(e in a)if(c=e.match(b))this.eventProcessors[e]?this.eventProcessors[e].call(this,this._.dialog,a[e]):d(this,this._.dialog, -c[1].toLowerCase(),a[e]);return this},reset:function(){function a(){c.$.open();var f="";d.size&&(f=d.size-(CKEDITOR.env.ie?7:0));var r=b.frameId+"_input";c.$.write(['<html dir="'+n+'" lang="'+l+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+n+'" lang="'+l+'" action="',CKEDITOR.tools.htmlEncode(d.action),'"><label id="',b.labelId,'" for="',r,'" style="display:none">',CKEDITOR.tools.htmlEncode(d.label), -'</label><input style="width:100%" id="',r,'" aria-labelledby="',b.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(d.id||"cke_upload"),'" size="',CKEDITOR.tools.htmlEncode(f>0?f:""),'" /></form></body></html><script>',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+g+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+i+")}","<\/script>"].join(""));c.$.close();for(f=0;f<e.length;f++)e[f].enable()}var b= -this._,c=CKEDITOR.document.getById(b.frameId).getFrameDocument(),d=b.definition,e=b.buttons,g=this.formLoadedNumber,i=this.formUnloadNumber,n=b.dialog._.editor.lang.dir,l=b.dialog._.editor.langCode;if(!g){g=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this);i=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this);this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(g);CKEDITOR.tools.removeFunction(i)})}CKEDITOR.env.gecko? -setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){if(!this._.domOnChangeRegistered){this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this);this._.domOnChangeRegistered=true}this.on("change",b)}},keyboardFocusable:true},true);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype= -CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",e);CKEDITOR.dialog.addUIElement("password",e);CKEDITOR.dialog.addUIElement("textarea",b);CKEDITOR.dialog.addUIElement("checkbox",b);CKEDITOR.dialog.addUIElement("radio",b);CKEDITOR.dialog.addUIElement("button",b);CKEDITOR.dialog.addUIElement("select",b);CKEDITOR.dialog.addUIElement("file",b);CKEDITOR.dialog.addUIElement("fileButton",b);CKEDITOR.dialog.addUIElement("html",b);CKEDITOR.dialog.addUIElement("fieldset", -{build:function(a,b,c){for(var d=b.children,e,g=[],i=[],n=0;n<d.length&&(e=d[n]);n++){var l=[];g.push(l);i.push(CKEDITOR.dialog._.uiElementBuilders[e.type].build(a,e,l))}return new CKEDITOR.ui.dialog[b.type](a,i,g,c,b)}})}}),CKEDITOR.DIALOG_RESIZE_NONE=0,CKEDITOR.DIALOG_RESIZE_WIDTH=1,CKEDITOR.DIALOG_RESIZE_HEIGHT=2,CKEDITOR.DIALOG_RESIZE_BOTH=3,function(){function a(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c% -a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function e(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function b(a,b){for(var c=a.$.getElementsByTagName("input"),d=0,f=c.length;d<f;d++){var e=new CKEDITOR.dom.element(c[d]);if(e.getAttribute("type").toLowerCase()=="text")if(b){e.setAttribute("value",e.getCustomData("fake_value")|| -"");e.removeCustomData("fake_value")}else{e.setCustomData("fake_value",e.getAttribute("value"));e.setAttribute("value","")}}}function g(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",true));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})}function c(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function d(a){var a=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog", -l).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),b=a.getChild([0,0,0,0,0]),c=b.getChild(0),d=b.getChild(1);if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var f="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())";CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+ -f+'" tabIndex="-1"></iframe>').appendTo(b.getParent())}c.unselectable();d.unselectable();return{element:a,parts:{dialog:a.getChild(0),title:c,close:d,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function i(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in -{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function f(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function h(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function j(a){function b(c){var i=a.getSize(),j=CKEDITOR.document.getWindow().getViewPaneSize(),k=c.data.$.screenX,r=c.data.$.screenY,n=k-d.x,p=r-d.y;d={x:k,y:r}; -f.x=f.x+n;f.y=f.y+p;a.move(f.x+h[3]<g?-h[3]:f.x-h[1]>j.width-i.width-g?j.width-i.width+(e.lang.dir=="rtl"?0:h[1]):f.x,f.y+h[0]<g?-h[0]:f.y-h[2]>j.height-i.height-g?j.height-i.height+h[2]:f.y,1);c.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=t.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var d=null,f=null;a.getElement().getFirst();var e= -a.getParentEditor(),g=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];typeof g=="undefined"&&(g=20);a.parts.title.on("mousedown",function(e){d={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);f=a.getPosition();if(CKEDITOR.env.ie6Compat){var g=t.getChild(0).getFrameDocument();g.on("mousemove",b);g.on("mouseup",c)}e.data.preventDefault()},a)}function k(a){var b,c;function d(f){var n=h.lang.dir=="rtl",p=r.width,o=r.height, -l=p+(f.data.$.screenX-b)*(n?-1:1)*(a._.moved?1:2),m=o+(f.data.$.screenY-c)*(a._.moved?1:2),w=a._.element.getFirst(),w=n&&w.getComputedStyle("right"),v=a.getPosition();v.y+m>k.height&&(m=k.height-v.y);if((n?w:v.x)+l>k.width)l=k.width-(n?w:v.x);if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)p=Math.max(e.minWidth||0,l-i);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||g==CKEDITOR.DIALOG_RESIZE_BOTH)o=Math.max(e.minHeight||0,m-j);a.resize(p,o);a._.moved||a.layout();f.data.preventDefault()}function f(){CKEDITOR.document.removeListener("mouseup", -f);CKEDITOR.document.removeListener("mousemove",d);if(n){n.remove();n=null}if(CKEDITOR.env.ie6Compat){var a=t.getChild(0).getFrameDocument();a.removeListener("mouseup",f);a.removeListener("mousemove",d)}}var e=a.definition,g=e.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var h=a.getParentEditor(),i,j,k,r,n,p=CKEDITOR.tools.addFunction(function(e){r=a.getSize();var g=a.parts.contents;if(g.$.getElementsByTagName("iframe").length){n=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'); -g.append(n)}j=r.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));i=r.width-a.parts.contents.getSize("width",1);b=e.screenX;c=e.screenY;k=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",d);CKEDITOR.document.on("mouseup",f);if(CKEDITOR.env.ie6Compat){g=t.getChild(0).getFrameDocument();g.on("mousemove",d);g.on("mouseup",f)}e.preventDefault&&e.preventDefault()});a.on("load",function(){var b="";g==CKEDITOR.DIALOG_RESIZE_WIDTH? -b=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+b+" cke_resizer_"+h.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(h.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event )">'+(h.lang.dir=="ltr"?"◢":"◣")+"</div>");a.parts.footer.append(b,1)});h.on("destroy",function(){CKEDITOR.tools.removeFunction(p)})}}function m(a){a.data.preventDefault(1)}function q(a){var b=CKEDITOR.document.getWindow(), -c=a.config,d=c.dialog_backgroundCoverColor||"white",f=c.dialog_backgroundCoverOpacity,e=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,f,e),g=u[c];if(g)g.show();else{e=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",e,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+d:"",'" class="cke_dialog_background_cover">'];if(CKEDITOR.env.ie6Compat){d="<html><body style=\\'background-color:"+d+";\\'></body></html>";e.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'); -e.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())");e.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')}e.push("</div>");g=CKEDITOR.dom.element.createFromHtml(e.join(""));g.setOpacity(f!=void 0?f:0.5);g.on("keydown",m);g.on("keypress",m);g.on("keyup",m);g.appendTo(CKEDITOR.document.getBody());u[c]=g}a.focusManager.add(g); -t=g;var a=function(){var a=b.getViewPaneSize();g.setStyles({width:a.width+"px",height:a.height+"px"})},h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;g.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do{a=c.getPosition();c.move(a.x,a.y)}while(c=c._.parentDialog)}};x=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&g.focus();if(CKEDITOR.env.ie6Compat){var i=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){i.prevScrollHandler= -window.onscroll||function(){};window.onscroll=i},0);h()}}function s(a){if(t){a.focusManager.remove(t);a=CKEDITOR.document.getWindow();t.hide();a.removeListener("resize",x);CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0);x=null}}var n=CKEDITOR.tools.cssLength,l='<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog '+ -CKEDITOR.env.cssClass+' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>'; -CKEDITOR.dialog=function(b,f){function h(){var a=u._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function i(a){var b=u._.focusList,a=a||0;if(!(b.length<1)){var c=u._.currentFocusIndex;try{b[c].getInputElement().$.blur()}catch(d){}for(var f=c=(c+a+b.length)%b.length;a&&!b[f].isFocusable();){f=(f+a+b.length)%b.length;if(f==c)break}b[f].focus();b[f].type=="text"&&b[f].select()}}function r(c){if(u== -CKEDITOR.dialog._.currentTop){var d=c.data.getKeystroke(),f=b.lang.dir=="rtl";x=q=0;if(d==9||d==CKEDITOR.SHIFT+9){d=d==CKEDITOR.SHIFT+9;if(u._.tabBarMode){d=d?a.call(u):e.call(u);u.selectPage(d);u._.tabs[d][0].focus()}else i(d?-1:1);x=1}else if(d==CKEDITOR.ALT+121&&!u._.tabBarMode&&u.getPageCount()>1){u._.tabBarMode=true;u._.tabs[u._.currentTabId][0].focus();x=1}else if((d==37||d==39)&&u._.tabBarMode){d=d==(f?39:37)?a.call(u):e.call(u);u.selectPage(d);u._.tabs[d][0].focus();x=1}else if((d==13||d== -32)&&u._.tabBarMode){this.selectPage(this._.currentTabId);this._.tabBarMode=false;this._.currentFocusIndex=-1;i(1);x=1}else if(d==13){d=c.data.getTarget();if(!d.is("a","button","select","textarea")&&(!d.is("input")||d.$.type!="button")){(d=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(d.click,0,d);x=1}q=1}else if(d==27){(d=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(d.click,0,d):this.fire("cancel",{hide:true}).hide!==false&&this.hide();q=1}else return;n(c)}}function n(a){x?a.data.preventDefault(1): -q&&a.data.stopPropagation()}var p=CKEDITOR.dialog._.dialogDefinitions[f],l=CKEDITOR.tools.clone(o),m=b.config.dialog_buttonsOrder||"OS",w=b.lang.dir,s={},x,q;(m=="OS"&&CKEDITOR.env.mac||m=="rtl"&&w=="ltr"||m=="ltr"&&w=="rtl")&&l.buttons.reverse();p=CKEDITOR.tools.extend(p(b),l);p=CKEDITOR.tools.clone(p);p=new v(this,p);l=d(b);this._={editor:b,element:l.element,name:f,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null, -currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};this.parts=l.parts;CKEDITOR.tools.setTimeout(function(){b.fire("ariaWidget",this.parts.contents)},0,this);l={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};l[w=="rtl"?"right":"left"]=0;this.parts.dialog.setStyles(l);CKEDITOR.event.call(this);this.definition=p=CKEDITOR.fire("dialogDefinition",{name:f,definition:p},b).definition;if(!("removeDialogTabs"in b._)&& -b.config.removeDialogTabs){l=b.config.removeDialogTabs.split(";");for(w=0;w<l.length;w++){m=l[w].split(":");if(m.length==2){var t=m[0];s[t]||(s[t]=[]);s[t].push(m[1])}}b._.removeDialogTabs=s}if(b._.removeDialogTabs&&(s=b._.removeDialogTabs[f]))for(w=0;w<s.length;w++)p.removeContents(s[w]);if(p.onLoad)this.on("load",p.onLoad);if(p.onShow)this.on("show",p.onShow);if(p.onHide)this.on("hide",p.onHide);if(p.onOk)this.on("ok",function(a){b.fire("saveSnapshot");setTimeout(function(){b.fire("saveSnapshot")}, -0);if(p.onOk.call(this,a)===false)a.data.hide=false});if(p.onCancel)this.on("cancel",function(a){if(p.onCancel.call(this,a)===false)a.data.hide=false});var u=this,z=function(a){var b=u._.contents,c=false,d;for(d in b)for(var f in b[d])if(c=a.call(this,b[d][f]))return};this.on("ok",function(a){z(function(b){if(b.validate){var c=b.validate(this),d=typeof c=="string"||c===false;if(d){a.data.hide=false;a.stop()}g.call(b,!d,typeof c=="string"?c:void 0);return d}})},this,null,0);this.on("cancel",function(a){z(function(c){if(c.isChanged()){if(!b.config.dialog_noConfirmCancel&& -!confirm(b.lang.common.confirmCancel))a.data.hide=false;return true}})},this,null,0);this.parts.close.on("click",function(a){this.fire("cancel",{hide:true}).hide!==false&&this.hide();a.data.preventDefault()},this);this.changeFocus=i;var y=this._.element;b.focusManager.add(y,1);this.on("show",function(){y.on("keydown",r,this);if(CKEDITOR.env.gecko)y.on("keypress",n,this)});this.on("hide",function(){y.removeListener("keydown",r);CKEDITOR.env.gecko&&y.removeListener("keypress",n);z(function(a){c.apply(a)})}); -this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",r,this,null,0)});this.on("show",function(){h();if(b.config.dialog_startupFocusTab&&u._.pageCount>1){u._.tabBarMode=true;u._.tabs[u._.currentTabId][0].focus()}else if(!this._.hasFocus){this._.currentFocusIndex=-1;if(p.onFocus){var a=p.onFocus.call(this);a&&a.focus()}else i(1)}},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst(); -b.remove();b.appendTo(a)},this);j(this);k(this);(new CKEDITOR.dom.text(p.title,CKEDITOR.document)).appendTo(this.parts.title);for(w=0;w<p.contents.length;w++)(s=p.contents[w])&&this.addPage(s);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();if(b.hasClass("cke_dialog_tab")){b=b.$.id;this.selectPage(b.substring(4,b.lastIndexOf("_")));if(this._.tabBarMode){this._.tabBarMode=false;this._.currentFocusIndex=-1;i(1)}a.data.preventDefault()}},this);w=[];s=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this, -{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:p.buttons},w).getChild();this.parts.footer.setHtml(w.join(""));for(w=0;w<s.length;w++)this._.buttons[s[w].id]=s[w]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b)){CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor);this.fire("resize",{width:a,height:b}, -this._.editor);this.parts.contents.setStyles({width:a+"px",height:b+"px"});if(this._.editor.lang.dir=="rtl"&&this._.position)this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10);this._.contentSize={width:a,height:b}}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var d=this._.element.getFirst(),f=this._.editor.lang.dir== -"rtl",e=d.getComputedStyle("position")=="fixed";CKEDITOR.env.ie&&d.setStyle("zoom","100%");if(!e||!this._.position||!(this._.position.x==a&&this._.position.y==b)){this._.position={x:a,y:b};if(!e){e=CKEDITOR.document.getWindow().getScrollPosition();a=a+e.x;b=b+e.y}if(f){e=this.getSize();a=CKEDITOR.document.getWindow().getViewPaneSize().width-e.width-a}b={top:(b>0?b:0)+"px"};b[f?"right":"left"]=(a>0?a:0)+"px";d.setStyles(b);c&&(this._.moved=1)}},getPosition:function(){return CKEDITOR.tools.extend({}, -this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()):a.setStyle("display","block");this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);if(CKEDITOR.dialog._.currentZIndex===null)CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex; -this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex=CKEDITOR.dialog._.currentZIndex+10);if(CKEDITOR.dialog._.currentTop===null){CKEDITOR.dialog._.currentTop=this;this._.parentDialog=null;q(this._.editor)}else{this._.parentDialog=CKEDITOR.dialog._.currentTop;this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);CKEDITOR.dialog._.currentTop=this}a.on("keydown",z);a.on("keyup",A);this._.hasFocus=false;for(var c in b.contents)if(b.contents[c]){var a= -b.contents[c],d=this._.tabs[a.id],e=a.requiredContent,g=0;if(d){for(var h in this._.contents[a.id]){var i=this._.contents[a.id][h];if(!(i.type=="hbox"||i.type=="vbox"||!i.getInputElement()))if(i.requiredContent&&!this._.editor.activeFilter.check(i.requiredContent))i.disable();else{i.enable();g++}}!g||e&&!this._.editor.activeFilter.check(e)?d[0].addClass("cke_dialog_tab_disabled"):d[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();f(this);this.parts.dialog.setStyle("visibility", -"");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),d=(c.width-b.width)/2,f=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(f>0?f:0)>c.height||b.width+(d>0?d:0)>c.width?a.setStyle("position", -"absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:d,this._.moved?this._.position.y:f)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&& -this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(G(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst(); -b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else s(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex=CKEDITOR.dialog._.currentZIndex-10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",z);a.removeListener("keyup",A);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&& -a.resetInitValue()})}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",d=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),f=this._.contents[a.id]={},e=d.getChild(),g=0;d=e.shift();){!d.notAllowed&&(d.type!="hbox"&&d.type!="vbox")&&g++;f[d.id]= -d;typeof d.getChild=="function"&&e.push.apply(e,d.getChild())}if(!g)a.hidden=true;b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");d=CKEDITOR.env;f="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',this._.pageCount>0?" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',f,'"',d.gecko&&!d.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join("")); -b.setAttribute("aria-labelledby",f);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);if(a.accessKey){B(this,this,"CTRL+"+a.accessKey,J,C);this._.accessKeyMap["CTRL+"+a.accessKey]=a.id}}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&this.fire("selectPage",{page:a,currentPage:this._.currentTabId})!== -false){for(var c in this._.tabs){var d=this._.tabs[c][0],f=this._.tabs[c][1];if(c!=a){d.removeClass("cke_dialog_tab_selected");f.hide()}f.setAttribute("aria-hidden",c!=a)}var e=this._.tabs[a];e[0].addClass("cke_dialog_tab_selected");if(CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat){b(e[1]);e[1].show();setTimeout(function(){b(e[1],1)},0)}else e[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(this._.pageCount=== -1?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(b){var c=this._.tabs[b]&&this._.tabs[b][0];if(c&&this._.pageCount!=1&&c.isVisible()){b==this._.currentTabId&&this.selectPage(a.call(this));c.hide();this._.pageCount--;this.updateStyle()}},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0]){a.show();this._.pageCount++;this.updateStyle()}},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a]; -return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()}, -addFocusable:function(a,b){if(typeof b=="undefined"){b=this._.focusList.length;this._.focusList.push(new i(this,a,b))}else{this._.focusList.splice(b,0,new i(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||typeof b=="function")this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop}, -isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;a.fire("ok",{hide:true}).hide!==false&&a.hide()}},b,true)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},true)};return a}(), -cancelButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;a.fire("cancel",{hide:true}).hide!==false&&a.hide()}},b,true)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},true)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{}, -dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var o={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},r=function(a,b,c){for(var d=0,f;f=a[d];d++){if(f.id==b)return f;if(c&&f[c])if(f=r(f[c],b,c))return f}return null},p=function(a,b,c,d,f){if(c){for(var e=0,g;g=a[e];e++){if(g.id==c){a.splice(e,0,b);return b}if(d&& -g[d])if(g=p(g[d],b,c,d,true))return g}if(f)return null}a.push(b);return b},w=function(a,b,c){for(var d=0,f;f=a[d];d++){if(f.id==b)return a.splice(d,1);if(c&&f[c])if(f=w(f[c],b,c))return f}return null},v=function(a,b){this.dialog=a;for(var c=b.contents,d=0,f;f=c[d];d++)c[d]=f&&new h(a,f);CKEDITOR.tools.extend(this,b)};v.prototype={getContents:function(a){return r(this.contents,a)},getButton:function(a){return r(this.buttons,a)},addContents:function(a,b){return p(this.contents,a,b)},addButton:function(a, -b){return p(this.buttons,a,b)},removeContents:function(a){w(this.contents,a)},removeButton:function(a){w(this.buttons,a)}};h.prototype={get:function(a){return r(this.elements,a,"children")},add:function(a,b){return p(this.elements,a,b,"children")},remove:function(a){w(this.elements,a,"children")}};var x,u={},t,y={},z=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode);if((b=y[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+ -f])&&b.length){b=b[b.length-1];b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key);a.data.preventDefault()}},A=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,f=String.fromCharCode(a.data.$.keyCode);if((b=y[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+f])&&b.length){b=b[b.length-1];if(b.keyup){b.keyup.call(b.uiElement,b.dialog,b.key);a.data.preventDefault()}}},B=function(a,b,c,d,f){(y[c]||(y[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:f||a.accessKeyUp, -keydown:d||a.accessKeyDown})},G=function(a){for(var b in y){for(var c=y[b],d=c.length-1;d>=0;d--)(c[d].dialog==a||c[d].uiElement==a)&&c.splice(d,1);c.length===0&&delete y[b]}},C=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},J=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,d,f,e,g){if(!(arguments.length<4)){var h=(d.call?d(b):d)||"div",i=["<",h," "],j=(f&&f.call?f(b):f)||{},k=(e&&e.call?e(b):e)||{},r=(g&&g.call?g.call(this,a,b):g)||"",p=this.domId=k.id|| -CKEDITOR.tools.getNextId()+"_uiElement";this.id=b.id;if(b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)){j.display="none";this.notAllowed=true}k.id=p;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&&(n.cke_disabled=1);for(var o=k["class"]&&k["class"].split?k["class"].split(" "):[],p=0;p<o.length;p++)o[p]&&(n[o[p]]=1);o=[];for(p in n)o.push(p);k["class"]=o.join(" ");if(b.title)k.title=b.title;n=(b.style||"").split(";");if(b.align){o= -b.align;j["margin-left"]=o=="left"?0:"auto";j["margin-right"]=o=="right"?0:"auto"}for(p in j)n.push(p+":"+j[p]);b.hidden&&n.push("display:none");for(p=n.length-1;p>=0;p--)n[p]===""&&n.splice(p,1);if(n.length>0)k.style=(k.style?k.style+"; ":"")+n.join("; ");for(p in k)i.push(p+'="'+CKEDITOR.tools.htmlEncode(k[p])+'" ');i.push(">",r,"</",h,">");c.push(i.join(""));(this._||(this._={})).dialog=a;if(typeof b.isChanged=="boolean")this.isChanged=function(){return b.isChanged};if(typeof b.isChanged=="function")this.isChanged= -b.isChanged;if(typeof b.setValue=="function")this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}});if(typeof b.getValue=="function")this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}});CKEDITOR.event.implementOn(this);this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&B(this,a,"CTRL+"+b.accessKey);var l=this;a.on("load",function(){var b= -l.getInputElement();if(b){var c=l.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;l.fire("focus");c&&this.addClass(c)});b.on("blur",function(){l.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);if(this.keyboardFocusable){this.tabIndex=b.tabIndex||0;this.focusIndex=a._.focusList.push(this)-1;this.on("focus",function(){a._.currentFocusIndex=l.focusIndex})}}},hbox:function(a, -b,c,d,f){if(!(arguments.length<4)){this._||(this._={});var e=this._.children=b,g=f&&f.widths||null,h=f&&f.height||null,i,j={role:"presentation"};f&&f.align&&(j.align=f.align);CKEDITOR.ui.dialog.uiElement.call(this,a,f||{type:"hbox"},d,"table",{},j,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(i=0;i<c.length;i++){var b="cke_dialog_ui_hbox_child",d=[];i===0&&(b="cke_dialog_ui_hbox_first");i==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" '); -g?g[i]&&d.push("width:"+n(g[i])):d.push("width:"+Math.floor(100/c.length)+"%");h&&d.push("height:"+n(h));f&&f.padding!=void 0&&d.push("padding:"+n(f.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&e[i].align)&&d.push("text-align:"+e[i].align);d.length>0&&a.push('style="'+d.join("; ")+'" ');a.push(">",c[i],"</td>")}a.push("</tr></tbody>");return a.join("")})}},vbox:function(a,b,c,d,f){if(!(arguments.length<3)){this._||(this._={});var e=this._.children=b,g=f&&f.width||null,h=f&&f.heights||null;CKEDITOR.ui.dialog.uiElement.call(this, -a,f||{type:"vbox"},d,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');f&&f.expand&&b.push("height:100%;");b.push("width:"+n(g||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(f&&f.align||(a.getParentEditor().lang.dir=="ltr"?"left":"right")),'" ');b.push("><tbody>");for(var d=0;d<c.length;d++){var i=[];b.push('<tr><td role="presentation" ');g&&i.push("width:"+ -n(g||"100%"));h?i.push("height:"+n(h[d])):f&&f.expand&&i.push("height:"+Math.floor(100/c.length)+"%");f&&f.padding!=void 0&&i.push("padding:"+n(f.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&e[d].align)&&i.push("text-align:"+e[d].align);i.length>0&&b.push('style="',i.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">',c[d],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)}, -getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return false},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&a.$.className.search("cke_dialog_page_contents")==-1;);if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!= -a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,d=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},f;for(f in a)if(c=f.match(b))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):d(this,this._.dialog,c[1].toLowerCase(),a[f]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show", -b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()}, -isFocusable:function(){return!this.isEnabled()||!this.isVisible()?false:true}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(arguments.length<1)return this._.children.concat();a.splice||(a=[a]);return a.length<2?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},true);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a= -{build:function(a,b,c){for(var d=b.children,f,e=[],g=[],h=0;h<d.length&&(f=d[h]);h++){var i=[];e.push(i);g.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,i))}return new CKEDITOR.ui.dialog[b.type](a,g,e,c,b)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;CKEDITOR.tools.extend(this,b,true)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:false,editorFocus:1}; -(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,f=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,e=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():a[0],c=void 0,d=CKEDITOR.VALIDATE_AND,f=[],e;for(e=0;e<a.length;e++)if(typeof a[e]=="function")f.push(a[e]);else break;if(e<a.length&& -typeof a[e]=="string"){c=a[e];e++}e<a.length&&typeof a[e]=="number"&&(d=a[e]);var g=d==CKEDITOR.VALIDATE_AND?true:false;for(e=0;e<f.length;e++)g=d==CKEDITOR.VALIDATE_AND?g&&f[e](b):g||f[e](b);return!g?c:true}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:true}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))}, -a)},htmlLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in u)u[c].remove(); -u={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,d=CKEDITOR.dialog._.dialogDefinitions[a];CKEDITOR.dialog._.currentTop===null&&q(this);if(typeof d=="function"){c=this._.storedDialogs||(this._.storedDialogs={});c=c[a]||(c[a]=new CKEDITOR.dialog(this,a));b&&b.call(c,c);c.show()}else{if(d=="failed"){s(this);throw Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.'); -}typeof d=="string"&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(d),function(){typeof CKEDITOR.dialog._.dialogDefinitions[a]!="function"&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})}(),CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){a.on("doubleclick",function(e){e.data.dialog&&a.openDialog(e.data.dialog)},null,null,999)}}),function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{ar:1, -bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(a){var e=this;a.addCommand("a11yHelp",{exec:function(){var b=a.langCode,b=e.availableLangs[b]?b:e.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e.path+ -"dialogs/lang/"+b+".js"),function(){a.lang.a11yhelp=e.langEntries[b];a.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:false});a.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");a.on("ariaEditorHelpLabel",function(b){b.data.label=a.lang.common.editorHelp})}})}(),CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var e=a.addCommand("about",new CKEDITOR.dialogCommand("about"));e.modes={wysiwyg:1,source:1}; -e.canUndo=false;e.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),CKEDITOR.plugins.add("basicstyles",{init:function(a){var e=0,b=function(b,c,d,j){if(j){var j=new CKEDITOR.style(j),k=g[d];k.unshift(j);a.attachStyleStateChange(j,function(b){!a.readOnly&&a.getCommand(d).setState(b)});a.addCommand(d,new CKEDITOR.styleCommand(j,{contentForms:k}));a.ui.addButton&&a.ui.addButton(b, -{label:c,command:d,toolbar:"basicstyles,"+(e=e+10)})}},g={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return a=="bold"||+a>=700}]],italic:["em","i",["span",function(a){return a.styles["font-style"]=="italic"}]],underline:["u",["span",function(a){return a.styles["text-decoration"]=="underline"}]],strike:["s","strike",["span",function(a){return a.styles["text-decoration"]=="line-through"}]],subscript:["sub"],superscript:["sup"]},c=a.config,d=a.lang.basicstyles;b("Bold",d.bold,"bold", -c.coreStyles_bold);b("Italic",d.italic,"italic",c.coreStyles_italic);b("Underline",d.underline,"underline",c.coreStyles_underline);b("Strike",d.strike,"strike",c.coreStyles_strike);b("Subscript",d.subscript,"subscript",c.coreStyles_subscript);b("Superscript",d.superscript,"superscript",c.coreStyles_superscript);a.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}}),CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"},CKEDITOR.config.coreStyles_italic= -{element:"em",overrides:"i"},CKEDITOR.config.coreStyles_underline={element:"u"},CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"},CKEDITOR.config.coreStyles_subscript={element:"sub"},CKEDITOR.config.coreStyles_superscript={element:"sup"},function(){var a={exec:function(a){var b=a.getCommand("blockquote").state,g=a.getSelection(),c=g&&g.getRanges()[0];if(c){var d=g.createBookmarks();if(CKEDITOR.env.ie){var i=d[0].startNode,f=d[0].endNode,h;if(i&&i.getParent().getName()=="blockquote")for(h= -i;h=h.getNext();)if(h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary()){i.move(h,true);break}if(f&&f.getParent().getName()=="blockquote")for(h=f;h=h.getPrevious();)if(h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary()){f.move(h);break}}var j=c.createIterator();j.enlargeBr=a.config.enterMode!=CKEDITOR.ENTER_BR;if(b==CKEDITOR.TRISTATE_OFF){for(i=[];b=j.getNextParagraph();)i.push(b);if(i.length<1){b=a.document.createElement(a.config.enterMode==CKEDITOR.ENTER_P?"p":"div");f=d.shift();c.insertNode(b); -b.append(new CKEDITOR.dom.text("",a.document));c.moveToBookmark(f);c.selectNodeContents(b);c.collapse(true);f=c.createBookmark();i.push(b);d.unshift(f)}h=i[0].getParent();c=[];for(f=0;f<i.length;f++){b=i[f];h=h.getCommonAncestor(b.getParent())}for(b={table:1,tbody:1,tr:1,ol:1,ul:1};b[h.getName()];)h=h.getParent();for(f=null;i.length>0;){for(b=i.shift();!b.getParent().equals(h);)b=b.getParent();b.equals(f)||c.push(b);f=b}for(;c.length>0;){b=c.shift();if(b.getName()=="blockquote"){for(f=new CKEDITOR.dom.documentFragment(a.document);b.getFirst();){f.append(b.getFirst().remove()); -i.push(f.getLast())}f.replace(b)}else i.push(b)}c=a.document.createElement("blockquote");for(c.insertBefore(i[0]);i.length>0;){b=i.shift();c.append(b)}}else if(b==CKEDITOR.TRISTATE_ON){f=[];for(h={};b=j.getNextParagraph();){for(i=c=null;b.getParent();){if(b.getParent().getName()=="blockquote"){c=b.getParent();i=b;break}b=b.getParent()}if(c&&i&&!i.getCustomData("blockquote_moveout")){f.push(i);CKEDITOR.dom.element.setMarker(h,i,"blockquote_moveout",true)}}CKEDITOR.dom.element.clearAllMarkers(h);b= -[];i=[];for(h={};f.length>0;){j=f.shift();c=j.getParent();if(j.getPrevious())if(j.getNext()){j.breakParent(j.getParent());i.push(j.getNext())}else j.remove().insertAfter(c);else j.remove().insertBefore(c);if(!c.getCustomData("blockquote_processed")){i.push(c);CKEDITOR.dom.element.setMarker(h,c,"blockquote_processed",true)}b.push(j)}CKEDITOR.dom.element.clearAllMarkers(h);for(f=i.length-1;f>=0;f--){c=i[f];a:{h=c;for(var j=0,k=h.getChildCount(),m=void 0;j<k&&(m=h.getChild(j));j++)if(m.type==CKEDITOR.NODE_ELEMENT&& -m.isBlockBoundary()){h=false;break a}h=true}h&&c.remove()}if(a.config.enterMode==CKEDITOR.ENTER_BR)for(c=true;b.length;){j=b.shift();if(j.getName()=="div"){f=new CKEDITOR.dom.documentFragment(a.document);c&&(j.getPrevious()&&!(j.getPrevious().type==CKEDITOR.NODE_ELEMENT&&j.getPrevious().isBlockBoundary()))&&f.append(a.document.createElement("br"));for(c=j.getNext()&&!(j.getNext().type==CKEDITOR.NODE_ELEMENT&&j.getNext().isBlockBoundary());j.getFirst();)j.getFirst().remove().appendTo(f);c&&f.append(a.document.createElement("br")); -f.replace(j);c=false}}}g.selectBookmarks(d);a.focus()}},refresh:function(a,b){this.setState(a.elementPath(b.block||b.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(e){if(!e.blockless){e.addCommand("blockquote",a);e.ui.addButton&&e.ui.addButton("Blockquote",{label:e.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"})}}})}(), -"use strict",function(){function a(a){function b(){var c=a.editable();c.on(y,function(a){(!CKEDITOR.env.ie||!x)&&p(a)});CKEDITOR.env.ie&&c.on("paste",function(b){if(!u){e();b.data.preventDefault();p(b);q("paste")||a.openDialog("paste")}});if(CKEDITOR.env.ie){c.on("contextmenu",g,null,null,0);c.on("beforepaste",function(a){a.data&&(!a.data.$.ctrlKey&&!a.data.$.shiftKey)&&g()},null,null,0)}c.on("beforecut",function(){!x&&n(a)});var d;c.attachListener(CKEDITOR.env.ie?c:a.document.getDocumentElement(), -"mouseup",function(){d=setTimeout(function(){w()},0)});a.on("destroy",function(){clearTimeout(d)});c.on("keyup",w)}function c(b){return{type:b,canUndo:b=="cut",startDisabled:true,exec:function(){this.type=="cut"&&n();var b;var c=this.type;if(CKEDITOR.env.ie)b=q(c);else try{b=a.document.$.execCommand(c,false,null)}catch(d){b=false}b||alert(a.lang.clipboard[this.type+"Error"]);return b}}}function d(){return{canUndo:false,async:true,exec:function(a,b){var c=function(b,c){b&&s(b.type,b.dataValue,!!c); -a.fire("afterCommandExec",{name:"paste",command:d,returnValue:!!b})},d=this;typeof b=="string"?c({type:"auto",dataValue:b},1):a.getClipboardData(c)}}}function e(){u=1;setTimeout(function(){u=0},100)}function g(){x=1;setTimeout(function(){x=0},10)}function q(b){var c=a.document,d=c.getBody(),f=false,e=function(){f=true};d.on(b,e);(CKEDITOR.env.version>7?c.$:c.$.selection.createRange()).execCommand(b);d.removeListener(b,e);return f}function s(b,c,d){b={type:b};if(d&&a.fire("beforePaste",b)===false|| -!c)return false;b.dataValue=c;return a.fire("paste",b)}function n(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var b=a.getSelection(),c,d,f;if(b.getType()==CKEDITOR.SELECTION_ELEMENT&&(c=b.getSelectedElement())){d=b.getRanges()[0];f=a.document.createText("");f.insertBefore(c);d.setStartBefore(f);d.setEndAfter(c);b.selectRanges([d]);setTimeout(function(){if(c.getParent()){f.remove();b.selectElement(c)}},0)}}}function l(b,c){var d=a.document,f=a.editable(),e=function(a){a.cancel()},g;if(!d.getById("cke_pastebin")){var h= -a.getSelection(),j=h.createBookmarks();CKEDITOR.env.ie&&h.root.fire("selectionchange");var k=new CKEDITOR.dom.element((CKEDITOR.env.webkit||f.is("body"))&&!CKEDITOR.env.ie?"body":"div",d);k.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var r=0,d=d.getWindow();if(CKEDITOR.env.webkit){f.append(k);k.addClass("cke_editable");if(!f.is("body")){r=f.getComputedStyle("position")!="static"?f:CKEDITOR.dom.element.get(f.$.offsetParent);r=r.getDocumentPosition().y}}else f.getAscendant(CKEDITOR.env.ie? -"body":"html",1).append(k);k.setStyles({position:"absolute",top:d.getScrollPosition().y-r+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});if(r=k.getParent().isReadOnly()){k.setOpacity(0);k.setAttribute("contenteditable",true)}else k.setStyle(a.config.contentsLangDirection=="ltr"?"left":"right","-1000px");a.on("selectionChange",e,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)g=f.once("blur",e,null,null,-100);r&&k.focus();r= -new CKEDITOR.dom.range(k);r.selectNodeContents(k);var p=r.select();CKEDITOR.env.ie&&(g=f.once("blur",function(){a.lockSelection(p)}));var n=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=n;g&&g.removeListener();CKEDITOR.env.ie&&f.focus();h.selectBookmarks(j);k.remove();var b;if(CKEDITOR.env.webkit&&(b=k.getFirst())&&b.is&&b.hasClass("Apple-style-span"))k=b;a.removeListener("selectionChange",e);c(k.getHtml())}, -0)}}function o(){if(CKEDITOR.env.ie){a.focus();e();var b=a.focusManager;b.lock();if(a.editable().fire(y)&&!q("paste")){b.unlock();return false}b.unlock()}else try{if(a.editable().fire(y)&&!a.document.$.execCommand("Paste",false,null))throw 0;}catch(c){return false}return true}function r(b){if(a.mode=="wysiwyg")switch(b.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:b=a.editable();e();!CKEDITOR.env.ie&&b.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"); -setTimeout(function(){a.fire("saveSnapshot")},50)}}function p(b){var c={type:"auto"},d=a.fire("beforePaste",c);l(b,function(a){a=a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");d&&s(c.type,a,0,1)})}function w(){if(a.mode=="wysiwyg"){var b=v("paste");a.getCommand("cut").setState(v("cut"));a.getCommand("copy").setState(v("copy"));a.getCommand("paste").setState(b);a.fire("pasteState",b)}}function v(b){if(t&&b in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if(b=="paste")return CKEDITOR.TRISTATE_OFF; -var b=a.getSelection(),c=b.getRanges();return b.getType()==CKEDITOR.SELECTION_NONE||c.length==1&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var x=0,u=0,t=0,y=CKEDITOR.env.ie?"beforepaste":"paste";(function(){a.on("key",r);a.on("contentDom",b);a.on("selectionChange",function(a){t=a.data.selection.getRanges()[0].checkReadOnly();w()});a.contextMenu&&a.contextMenu.addListener(function(a,b){t=b.getRanges()[0].checkReadOnly();return{cut:v("cut"),copy:v("copy"),paste:v("paste")}})})(); -(function(){function b(c,d,f,e,g){var h=a.lang.clipboard[d];a.addCommand(d,f);a.ui.addButton&&a.ui.addButton(c,{label:h,command:d,toolbar:"clipboard,"+e});a.addMenuItems&&a.addMenuItem(d,{label:h,command:d,group:"clipboard",order:g})}b("Cut","cut",c("cut"),10,1);b("Copy","copy",c("copy"),20,4);b("Paste","paste",d(),30,8)})();a.getClipboardData=function(b,c){function d(a){a.removeListener();a.cancel();c(a.data)}function f(a){a.removeListener();a.cancel();j=true;c({type:h,dataValue:a.data})}function e(){this.customTitle= -b&&b.title}var g=false,h="auto",j=false;if(!c){c=b;b=null}a.on("paste",d,null,null,0);a.on("beforePaste",function(a){a.removeListener();g=true;h=a.data.type},null,null,1E3);if(o()===false){a.removeListener("paste",d);if(g&&a.fire("pasteDialog",e)){a.on("pasteDialogCommit",f);a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",f);setTimeout(function(){j||c(null)},10)})}else c(null)}}}function e(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&& -!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function b(a,b){function c(a){return CKEDITOR.tools.repeat("</p><p>",~~(a/2))+(a%2==1?"<br>":"")}b=b.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");b=b.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(b.match(/^[^<]$/))return b;if(CKEDITOR.env.webkit&&b.indexOf("<div>")>-1){b= -b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>");b.match(/<div>(<br>|)<\/div>/)&&(b="<p>"+b.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return c(a.split("</div><div>").length+1)})+"</p>");b=b.replace(/<\/div><div>/g,"<br>");b=b.replace(/<\/?div>/g,"")}if(CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR){CKEDITOR.env.gecko&&(b=b.replace(/^<br><br>$/,"<br>"));b.indexOf("<br><br>")>-1&&(b="<p>"+b.replace(/(<br>){2,}/g, -function(a){return c(a.length/4)})+"</p>")}return d(a,b)}function g(){var a=new CKEDITOR.htmlParser.filter,b={blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ol:1,p:1,table:1,ul:1},c=CKEDITOR.tools.extend({br:0},CKEDITOR.dtd.$inline),d={p:1,br:1,"cke:br":1},e=CKEDITOR.dtd,g=CKEDITOR.tools.extend({area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1},CKEDITOR.dtd.$nonBodyContent,CKEDITOR.dtd.$cdata),q=function(a){delete a.name;a.add(new CKEDITOR.htmlParser.text(" "))},s=function(a){for(var b= -a,c;(b=b.next)&&b.name&&b.name.match(/^h\d$/);){c=new CKEDITOR.htmlParser.element("cke:br");c.isEmpty=true;for(a.add(c);c=b.children.shift();)a.add(c)}};a.addRules({elements:{h1:s,h2:s,h3:s,h4:s,h5:s,h6:s,img:function(a){var a=CKEDITOR.tools.trim(a.attributes.alt||""),b=" ";a&&!a.match(/(^http|\.(jpe?g|gif|png))/i)&&(b=" ["+a+"] ");return new CKEDITOR.htmlParser.text(b)},td:q,th:q,$:function(a){var i=a.name,o;if(g[i])return false;a.attributes={};if(i=="br")return a;if(b[i])a.name="p";else if(c[i])delete a.name; -else if(e[i]){o=new CKEDITOR.htmlParser.element("cke:br");o.isEmpty=true;if(CKEDITOR.dtd.$empty[i])return o;a.add(o,0);o=o.clone();o.isEmpty=true;a.add(o);delete a.name}d[a.name]||delete a.name;return a}}},{applyToAll:true});return a}function c(a,b,c){var b=new CKEDITOR.htmlParser.fragment.fromHtml(b),e=new CKEDITOR.htmlParser.basicWriter;b.writeHtml(e,c);var b=e.getHtml(),b=b.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g,"$1").replace(/(<cke:br \/>){2,}/g,"<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g, -"$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g,"$1").replace(/<(cke:)?br( \/)?>/g,"<br>").replace(/<p><\/p>/g,""),g=0,b=b.replace(/<\/?p>/g,function(a){if(a=="<p>"){if(++g>1)return"</p><p>"}else if(--g>0)return"</p><p>";return a}).replace(/<p><\/p>/g,"");return d(a,b)}function d(a,b){a.enterMode==CKEDITOR.ENTER_BR?b=b.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("<br>",a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(b=b.replace(/<(\/)?p>/g,"<$1div>"));return b} -CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(d){var f;a(d);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));d.on("paste",function(a){var b=a.data.dataValue,c=CKEDITOR.dtd.$block;if(b.indexOf("Apple-")>-1){b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," ");a.data.type!="html"&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")}));if(b.indexOf('<br class="Apple-interchange-newline">')> --1){a.data.startsWithEOL=1;a.data.preSniffing="html";b=b.replace(/<br class="Apple-interchange-newline">/,"")}b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1")}if(b.match(/^<[^<]+cke_(editable|contents)/i)){var d,f,e=new CKEDITOR.dom.element("div");for(e.setHtml(b);e.getChildCount()==1&&(d=e.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)e=f=d;f&&(b=f.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b, -d){if(d.toLowerCase()in c){a.data.preSniffing="html";return"<"+d}return b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){if(d in c){a.data.endsWithEOL=1;return"</"+d+">"}return b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);d.on("paste",function(a){var a=a.data,j=a.type,k=a.dataValue,m,q=d.config.clipboard_defaultContentType||"html";m=j=="html"||a.preSniffing=="html"?"html":e(k);m=="htmlifiedtext"?k=b(d.config,k):j=="text"&&m== -"html"&&(k=c(d.config,k,f||(f=g(d))));a.startsWithEOL&&(k='<br data-cke-eol="1">'+k);a.endsWithEOL&&(k=k+'<br data-cke-eol="1">');j=="auto"&&(j=m=="html"||q=="html"?"html":"text");a.type=j;a.dataValue=k;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);d.on("paste",function(a){a=a.data;d.insertHtml(a.dataValue,a.type);setTimeout(function(){d.fire("afterPaste")},0)},null,null,1E3);d.on("pasteDialog",function(a){setTimeout(function(){d.openDialog("paste",a.data)},0)})}})}(), -function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var a=CKEDITOR.addTemplate("panel", -'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),e=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'),b=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>'); -CKEDITOR.ui.panel.prototype={render:function(g,c){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),c=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&c.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});c=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=true;if(this.onLoad)this.onLoad()},this));a.write(b.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css), -onload:"window.parent.CKEDITOR.tools.callFunction("+c+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&this._.onKeyDown(b)===false?a.data.preventDefault():(b==27||b==(c=="rtl"?39:37))&&this.onEscape&&this.onEscape(b)===false&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(c)}else a=this.document.getById(this.id);this._.holder= -a}return a};var d={editorId:g.id,id:this.id,langCode:g.langCode,dir:g.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":g.config.baseFloatZIndex+1};if(this.isFramed){var i=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=e.output({id:this.id+"_frame",src:i})}i=a.output(d);c&&c.push(i);return i},addBlock:function(a,b){b=this._.blocks[a]= -b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show(); -return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex= --1;this.element.disableContextMenu()},_:{markItem:function(a){if(a!=-1){a=this.element.getElementsByTag("a").getItem(this._.focusIndex=a);CKEDITOR.env.webkit&&a.getDocument().getWindow().focus();a.focus();this.onMark&&this.onMark(a)}}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||this.onHide.call(this)!==true)&&this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"), -f;f=d.getItem(++e);)if(f.getAttribute("_cke_focus")&&f.$.offsetWidth){this._.focusIndex=e;f.focus();break}if(!f&&!b){this._.focusIndex=-1;return this.onKeyDown(a,1)}return false;case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");e>0&&(f=d.getItem(--e));){if(f.getAttribute("_cke_focus")&&f.$.offsetWidth){this._.focusIndex=e;f.focus();break}f=null}if(!f&&!b){this._.focusIndex=d.count();return this.onKeyDown(a,1)}return false;case "click":case "mouseup":e=this._.focusIndex;(f=e>= -0&&this.element.getElementsByTag("a").getItem(e))&&(f.$[d]?f.$[d]():f.$["on"+d]());return false}return true}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function a(a,g,c,d,i){var i=CKEDITOR.tools.genKey(g.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",d.css||"",i||""),f=e[i];if(!f){f=e[i]=new CKEDITOR.ui.panel(g,d);f.element=c.append(CKEDITOR.dom.element.createFromHtml(f.render(a),g));f.element.setStyles({display:"none",position:"absolute"})}return f}var e={};CKEDITOR.ui.floatPanel= -CKEDITOR.tools.createClass({$:function(b,e,c,d){function i(){k.hide()}c.forceIFrame=1;c.toolbarRelated&&b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+b.name));var f=e.getDocument(),d=a(b,f,e,c,d||0),h=d.element,j=h.getFirst(),k=this;h.disableContextMenu();this.element=h;this._={editor:b,panel:d,parentElement:e,definition:c,document:f,iframe:j,children:[],dir:b.lang.dir};b.on("mode",i);b.on("resize",i);if(!CKEDITOR.env.iOS)f.getWindow().on("resize",i)},proto:{addBlock:function(a, -e){return this._.panel.addBlock(a,e)},addListBlock:function(a,e){return this._.panel.addListBlock(a,e)},getBlock:function(a){return this._.panel.getBlock(a)},showBlock:function(a,e,c,d,i,f){var h=this._.panel,j=h.showBlock(a);this.allowBlur(false);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var k=this.element,a=this._.iframe,a=CKEDITOR.env.ie?a:new CKEDITOR.dom.window(a.$.contentWindow),m=k.getDocument(), -q=this._.parentElement.getPositionedAncestor(),s=e.getDocumentPosition(m),m=q?q.getDocumentPosition(m):{x:0,y:0},n=this._.dir=="rtl",l=s.x+(d||0)-m.x,o=s.y+(i||0)-m.y;if(n&&(c==1||c==4))l=l+e.$.offsetWidth;else if(!n&&(c==2||c==3))l=l+(e.$.offsetWidth-1);if(c==3||c==4)o=o+(e.$.offsetHeight-1);this._.panel._.offsetParentId=e.getId();k.setStyles({top:o+"px",left:0,display:""});k.setOpacity(0);k.getFirst().removeStyle("width");this._.editor.focusManager.add(a);if(!this._.blurSet){CKEDITOR.event.useCapture= -true;a.on("blur",function(a){function b(){delete this._.returnFocus;this.hide()}if(this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild)if(CKEDITOR.env.iOS){if(!this._.hideTimeout)this._.hideTimeout=CKEDITOR.tools.setTimeout(b,0,this)}else b.call(this)},this);a.on("focus",function(){this._.focused=true;this.hideChild();this.allowBlur(true)},this);if(CKEDITOR.env.iOS){a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this);a.on("touchend", -function(){this._.hideTimeout=0;this.focus()},this)}CKEDITOR.event.useCapture=false;this._.blurSet=1}h.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&this.onEscape(a)===false)return false},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){k.removeStyle("width");if(j.autoSize){var a=j.element.getDocument(),a=(CKEDITOR.env.webkit?j.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((k.$.offsetWidth||0)-(k.$.clientWidth||0)+ -3));k.setStyle("width",a+10+"px");a=j.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((k.$.offsetHeight||0)-(k.$.clientHeight||0)+3));k.setStyle("height",a+"px");h._.currentBlock.element.setStyle("display","none").removeStyle("display")}else k.removeStyle("height");n&&(l=l-k.$.offsetWidth);k.setStyle("left",l+"px");var b=h.element.getWindow(),a=k.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,d=a.height||a.bottom-a.top,e=n?a.right:b.width-a.left, -g=n?b.width-a.right:a.left;n?e<c&&(l=g>c?l+c:b.width>c?l-a.left:l-a.right+b.width):e<c&&(l=g>c?l-c:b.width>c?l-a.right+b.width:l-a.left);c=a.top;b.height-a.top<d&&(o=c>d?o-d:b.height>d?o-a.bottom+b.height:o-a.top);if(CKEDITOR.env.ie){b=a=new CKEDITOR.dom.element(k.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(l=CKEDITOR.env.ie8Compat?l-k.getDocument().getDocumentElement().$.scrollLeft*2:l-(a.$.scrollWidth-a.$.clientWidth))}var a=k.getFirst(), -i;(i=a.getCustomData("activePanel"))&&i.onHide&&i.onHide.call(this,1);a.setCustomData("activePanel",this);k.setStyles({top:o+"px",left:l+"px"});k.setOpacity(1);f&&f()},this);h.isLoaded?a():h.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();j.element.focus();if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=a;this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200: -0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||this.onHide.call(this)!==true)){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur(); -this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus){CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus();a.focus()}delete this._.lastFocused;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var e=this._.panel;if(a!=void 0)e.allowBlur=a;return e.allowBlur},showAsChild:function(a,e,c,d,i,f){if(!(this._.activeChild==a&&a._.panel._.offsetParentId==c.getId())){this.hideChild();a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused|| -this.hide()},0,this)},this);this._.activeChild=a;this._.focused=false;a.showBlock(e,c,d,i,f);this.blur();(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100)}},hideChild:function(a){var e=this._.activeChild;if(e){delete e.onHide;delete this._.activeChild;e.hide();a&&this.focus()}}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),g;for(g in e){var c=e[g];a?c.destroy():c.element.hide()}a&& -(e={})})}(),CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(a){for(var e=a.config.menu_groups.split(","),b=a._.menuGroups={},g=a._.menuItems={},c=0;c<e.length;c++)b[e[c]]=c+1;a.addMenuGroup=function(a,c){b[a]=c||100};a.addMenuItem=function(a,c){b[c.group]&&(g[a]=new CKEDITOR.menuItem(this,a,c))};a.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};a.getMenuItem=function(a){return g[a]};a.removeMenuItem=function(a){delete g[a]}}}),function(){function a(a){a.sort(function(a, -b){return a.group<b.group?-1:a.group>b.group?1:a.order<b.order?-1:a.order>b.order?1:0})}var e='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="{role}" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(e=e+' onkeypress="return false;"');CKEDITOR.env.gecko&&(e=e+' onblur="this.style.cssText = this.style.cssText;"'); -var e=e+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),b=CKEDITOR.addTemplate("menuItem",e+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'), -g=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var e=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),f=e.block.attributes=e.attributes||{};!f.role&&(f.role="menu");this._.panelDefinition=e},_:{onShow:function(){var a= -this.editor.getSelection(),b=a&&a.getStartElement(),e=this.editor.elementPath(),f=this._.listeners;this.removeAll();for(var g=0;g<f.length;g++){var j=f[g](b,a,e);if(j)for(var k in j){var m=this.editor.getMenuItem(k);if(m&&(!m.command||this.editor.getCommand(m.command).state)){m.state=j[k];this.add(m)}}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):a==27&&this.hide(1);return false}, -onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,e=this.items[a];if(e=e.getItems&&e.getItems()){if(b)b.removeAll();else{b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},true));b.parent=this;b._.onClick=CKEDITOR.tools.bind(this._.onClick,this)}for(var f in e){var g=this.editor.getMenuItem(f);if(g){g.state=e[f];b.add(g)}}var j=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+ -(""+a));setTimeout(function(){b.show(j,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){if(!a.order)a.order=this.items.length;this.items.push(a)},removeAll:function(){this.items=[]},show:function(b,d,e,f){if(!this.parent){this._.onShow();if(!this.items.length)return}var d=d||(this.editor.lang.dir=="rtl"?2:1),g=this.items,j=this.editor,k=this._.panel,m=this._.element;if(!k){k=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level); -k.onEscape=CKEDITOR.tools.bind(function(a){if(this._.onEscape(a)===false)return false},this);k.onShow=function(){k._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")};k.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);m=k.addBlock(this.id,this._.panelDefinition.block);m.autoSize=true;var q=m.keys;q[40]="next";q[9]="next";q[38]="prev";q[CKEDITOR.SHIFT+9]="prev";q[j.lang.dir=="rtl"?37:39]=CKEDITOR.env.ie?"mouseup":"click";q[32]=CKEDITOR.env.ie?"mouseup": -"click";CKEDITOR.env.ie&&(q[13]="mouseup");m=this._.element=m.element;q=m.getDocument();q.getBody().setStyle("overflow","hidden");q.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,j.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this); -this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}a(g);for(var q=j.elementPath(),q=['<div class="cke_menu'+(q&&q.direction()!=j.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],s=g.length,n=s&&g[0].group,l=0;l<s;l++){var o=g[l];if(n!=o.group){q.push('<div class="cke_menuseparator" role="separator"></div>');n=o.group}o.render(this,l,q)}q.push("</div>"); -m.setHtml(q.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(k,this.id,b,d,e,f):k.showBlock(this.id,b,d,e,f);j.fire("menuShow",[k])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,e){CKEDITOR.tools.extend(this,e,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name= -b},proto:{render:function(a,d,e){var f=a.id+(""+d),h=typeof this.state=="undefined"?CKEDITOR.TRISTATE_OFF:this.state,j="",k=h==CKEDITOR.TRISTATE_ON?"on":h==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(j=' aria-checked="'+(h==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var m=this.getItems,q="&#"+(this.editor.lang.dir=="rtl"?"9668":"9658")+";",s=this.name;if(this.icon&&!/\./.test(this.icon))s=this.icon;a={id:f,name:this.name,iconName:s,label:this.label, -cls:this.className||"",state:k,hasPopup:m?"true":"false",disabled:h==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:d,iconStyle:CKEDITOR.skin.getIconStyle(s,this.editor.lang.dir=="rtl",s==this.icon?null:this.icon,this.iconOffset),arrowHtml:m?g.output({label:q}):"",role:this.role?this.role:"menuitem",ariaChecked:j};b.output(a,e)}}})}(),CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div", -CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){var a=a.data,d=CKEDITOR.env.webkit?b:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!d){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var d=this.editor, -g=(new CKEDITOR.dom.elementPath(a.getTarget(),d.editable())).contains(function(a){return a.hasAttribute("contenteditable")},true);g&&g.getAttribute("contenteditable")=="false"&&d.getSelection().fake(g)}var g=a.getTarget().getDocument(),f=a.getTarget().getDocument().getDocumentElement(),d=!g.equals(CKEDITOR.document),g=g.getWindow().getScrollPosition(),h=d?a.$.clientX:a.$.pageX||g.x+a.$.clientX,j=d?a.$.clientY:a.$.pageY||g.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(f,null,h,j)},CKEDITOR.env.ie? -200:0,this)}},this);if(CKEDITOR.env.webkit){var b,g=function(){b=0};a.on("keydown",function(a){b=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",g);a.on("contextmenu",g)}},open:function(a,e,b,g){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,b,g)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),a.config.browserContextMenuOnCtrl!== -false)});a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}}),function(){var a;function e(d,e){function f(a){a=m.list[a];if(a.equals(d.editable())||a.getAttribute("contenteditable")=="true"){var b=d.createRange();b.selectNodeContents(a);b.select()}else d.getSelection().selectElement(a);d.focus()}function g(){k&&k.setHtml(b);delete m.list}var j=d.ui.spaceId("path"), -k,m=d._.elementsPath,q=m.idBase;e.html=e.html+('<span id="'+j+'_label" class="cke_voice_label">'+d.lang.elementspath.eleLabel+'</span><span id="'+j+'" class="cke_path" role="group" aria-labelledby="'+j+'_label">'+b+"</span>");d.on("uiReady",function(){var a=d.ui.space("path");a&&d.focusManager.add(a,1)});m.onClick=f;var s=CKEDITOR.tools.addFunction(f),n=CKEDITOR.tools.addFunction(function(a,b){var c=m.idBase,e,b=new CKEDITOR.dom.event(b);e=d.lang.dir=="rtl";switch(b.getKeystroke()){case e?39:37:case 9:(e= -CKEDITOR.document.getById(c+(a+1)))||(e=CKEDITOR.document.getById(c+"0"));e.focus();return false;case e?37:39:case CKEDITOR.SHIFT+9:(e=CKEDITOR.document.getById(c+(a-1)))||(e=CKEDITOR.document.getById(c+(m.list.length-1)));e.focus();return false;case 27:d.focus();return false;case 13:case 32:f(a);return false}return true});d.on("selectionChange",function(){d.editable();for(var a=[],f=m.list=[],e=[],g=m.filters,h=true,i=d.elementPath().elements,x,u=i.length;u--;){var t=i[u],y=0;x=t.data("cke-display-name")? -t.data("cke-display-name"):t.data("cke-real-element-type")?t.data("cke-real-element-type"):t.getName();h=t.hasAttribute("contenteditable")?t.getAttribute("contenteditable")=="true":h;!h&&!t.hasAttribute("contenteditable")&&(y=1);for(var z=0;z<g.length;z++){var A=g[z](t,x);if(A===false){y=1;break}x=A||x}if(!y){f.unshift(t);e.unshift(x)}}f=f.length;for(g=0;g<f;g++){x=e[g];h=d.lang.elementspath.eleTitle.replace(/%1/,x);x=c.output({id:q+g,label:h,text:x,jsTitle:"javascript:void('"+x+"')",index:g,keyDownFn:n, -clickFn:s});a.unshift(x)}k||(k=CKEDITOR.document.getById(j));e=k;e.setHtml(a.join("")+b);d.fire("elementsPathUpdate",{space:e})});d.on("readOnly",g);d.on("contentDomUnload",g);d.addCommand("elementsPathFocus",a);d.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}a={editorFocus:false,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}};var b='<span class="cke_path_empty">&nbsp;</span>',g="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&& -(g=g+' onkeypress="return false;"');CKEDITOR.env.gecko&&(g=g+' onblur="this.style.cssText = this.style.cssText;"');var c=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+g+' hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath= -{idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(b){b.data.space=="bottom"&&e(a,b.data)})}})}(),function(){function a(a,c){var d,i;c.on("refresh",function(a){var c=[e],d;for(d in a.data.states)c.push(a.data.states[d]);this.setState(CKEDITOR.tools.search(c,b)?b:e)},c,null,100);c.on("exec",function(b){d=a.getSelection();i=d.createBookmarks(1);if(!b.data)b.data={};b.data.done=false},c,null,0);c.on("exec",function(){a.forceNextSelectionCheck();d.selectBookmarks(i)}, -c,null,100)}var e=CKEDITOR.TRISTATE_DISABLED,b=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(b){var c=CKEDITOR.plugins.indent.genericDefinition;a(b,b.addCommand("indent",new c(true)));a(b,b.addCommand("outdent",new c));if(b.ui.addButton){b.ui.addButton("Indent",{label:b.lang.indent.indent,command:"indent",directional:true,toolbar:"indent,20"});b.ui.addButton("Outdent",{label:b.lang.indent.outdent,command:"outdent",directional:true,toolbar:"indent,10"})}b.on("dirChanged",function(a){var c= -b.createRange(),f=a.data.node;c.setStartBefore(f);c.setEndAfter(f);for(var e=new CKEDITOR.dom.walker(c),j;j=e.next();)if(j.type==CKEDITOR.NODE_ELEMENT)if(!j.equals(f)&&j.getDirection()){c.setStartAfter(j);e=new CKEDITOR.dom.walker(c)}else{var k=b.config.indentClasses;if(k)for(var m=a.data.dir=="ltr"?["_rtl",""]:["","_rtl"],q=0;q<k.length;q++)if(j.hasClass(k[q]+m[0])){j.removeClass(k[q]+m[0]);j.addClass(k[q]+m[1])}k=j.getStyle("margin-right");m=j.getStyle("margin-left");k?j.setStyle("margin-left", -k):j.removeStyle("margin-left");m?j.setStyle("margin-right",m):j.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,b,d){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!d;this.relatedGlobal=d?"indent":"outdent";this.indentKey=d?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a, -b){var c=a.getCommand(b.relatedGlobal),d;for(d in b.jobs){c.on("exec",function(c){if(!c.data.done){a.fire("lockSnapshot");if(b.execJob(a,d))c.data.done=true;a.fire("unlockSnapshot");CKEDITOR.dom.element.clearAllMarkers(b.database)}},this,null,d);c.on("refresh",function(c){if(!c.data.states)c.data.states={};c.data.states[b.name+"@"+d]=b.refreshJob(a,d,c.data.path)},this,null,d)}a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype= -{execJob:function(a,b){var d=this.jobs[b];if(d.state!=e)return d.exec.call(this,a)},refreshJob:function(a,b,d){b=this.jobs[b];b.state=a.activeFilter.checkFeature(this)?b.refresh.call(this,a,d):e;return b.state},getContext:function(a){return a.contains(this.context)}}}(),function(){function a(a){function c(b){for(var i=n.startContainer,j=n.endContainer;i&&!i.getParent().equals(b);)i=i.getParent();for(;j&&!j.getParent().equals(b);)j=j.getParent();if(!i||!j)return false;for(var o=i,i=[],l=false;!l;){o.equals(j)&& -(l=true);i.push(o);o=o.getNext()}if(i.length<1)return false;o=b.getParents(true);for(j=0;j<o.length;j++)if(o[j].getName&&e[o[j].getName()]){b=o[j];break}for(var o=d.isIndent?1:-1,j=i[0],i=i[i.length-1],l=CKEDITOR.plugins.list.listToArray(b,f),s=l[i.getCustomData("listarray_index")].indent,j=j.getCustomData("listarray_index");j<=i.getCustomData("listarray_index");j++){l[j].indent=l[j].indent+o;if(o>0){var t=l[j].parent;l[j].parent=new CKEDITOR.dom.element(t.getName(),t.getDocument())}}for(j=i.getCustomData("listarray_index")+ -1;j<l.length&&l[j].indent>s;j++)l[j].indent=l[j].indent+o;i=CKEDITOR.plugins.list.arrayToList(l,f,null,a.config.enterMode,b.getDirection());if(!d.isIndent){var y;if((y=b.getParent())&&y.is("li"))for(var o=i.listNode.getChildren(),z=[],A,j=o.count()-1;j>=0;j--)(A=o.getItem(j))&&(A.is&&A.is("li"))&&z.push(A)}i&&i.listNode.replace(b);if(z&&z.length)for(j=0;j<z.length;j++){for(A=b=z[j];(A=A.getNext())&&A.is&&A.getName()in e;){CKEDITOR.env.needsNbspFiller&&!b.getFirst(g)&&b.append(n.document.createText(" ")); -b.append(A)}b.insertAfter(y)}i&&a.fire("contentDomInvalidated");return true}for(var d=this,f=this.database,e=this.context,i=a.getSelection(),i=(i&&i.getRanges()).createIterator(),n;n=i.getNextRange();){for(var l=n.getCommonAncestor();l&&!(l.type==CKEDITOR.NODE_ELEMENT&&e[l.getName()]);)l=l.getParent();l||(l=n.startPath().contains(e))&&n.setEndAt(l,CKEDITOR.POSITION_BEFORE_END);if(!l){var o=n.getEnclosedNode();if(o&&o.type==CKEDITOR.NODE_ELEMENT&&o.getName()in e){n.setStartAt(o,CKEDITOR.POSITION_AFTER_START); -n.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);l=o}}if(l&&n.startContainer.type==CKEDITOR.NODE_ELEMENT&&n.startContainer.getName()in e){o=new CKEDITOR.dom.walker(n);o.evaluator=b;n.startContainer=o.next()}if(l&&n.endContainer.type==CKEDITOR.NODE_ELEMENT&&n.endContainer.getName()in e){o=new CKEDITOR.dom.walker(n);o.evaluator=b;n.endContainer=o.previous()}if(l)return c(l)}return 0}function e(a,c){c||(c=a.contains(this.context));return c&&a.block&&a.block.equals(c.getFirst(b))}function b(a){return a.type== -CKEDITOR.NODE_ELEMENT&&a.is("li")}function g(a){return c(a)&&d(a)}var c=CKEDITOR.dom.walker.whitespaces(true),d=CKEDITOR.dom.walker.bookmark(false,true),i=CKEDITOR.TRISTATE_DISABLED,f=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(b){function c(b,g){d.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];b.on("key",function(a){if(b.mode=="wysiwyg"&&a.data.keyCode==this.indentKey){var c=this.getContext(b.elementPath());if(c&&(!this.isIndent|| -!e.call(this,b.elementPath(),c))){b.execCommand(this.relatedGlobal);a.cancel()}}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=e.call(this,b,c);return!c||!this.isIndent||d?i:f}:function(a,b){return!this.getContext(b)||this.isIndent?i:f},exec:CKEDITOR.tools.bind(a,this)}}var d=CKEDITOR.plugins.indent;d.registerCommands(b,{indentlist:new c(b,"indentlist",true),outdentlist:new c(b,"outdentlist")});CKEDITOR.tools.extend(c.prototype,d.specificDefinition.prototype, -{context:{ol:1,ul:1}})}})}(),function(){function a(a,b,c){function d(c){if((j=i[c?"getFirst":"getLast"]())&&(!j.is||!j.isBlockBoundary())&&(k=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(true)))&&(!k.is||!k.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](j)}for(var f=CKEDITOR.plugins.list.listToArray(b.root,c),e=[],g=0;g<b.contents.length;g++){var h=b.contents[g];if((h=h.getAscendant("li",true))&&!h.getCustomData("list_item_processed")){e.push(h); -CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",true)}}h=null;for(g=0;g<e.length;g++){h=e[g].getCustomData("listarray_index");f[h].indent=-1}for(g=h+1;g<f.length;g++)if(f[g].indent>f[g-1].indent+1){e=f[g-1].indent+1-f[g].indent;for(h=f[g].indent;f[g]&&f[g].indent>=h;){f[g].indent=f[g].indent+e;g++}g--}var i=CKEDITOR.plugins.list.arrayToList(f,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,j,k;d(true);d();i.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name= -a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function b(a,b,c,d){for(var f,e;f=a[d?"getLast":"getFirst"](s);){(e=f.getDirection(1))!==b.getDirection(1)&&f.setAttribute("dir",e);f.remove();c?f[d?"insertBefore":"insertAfter"](c):b.append(f,d)}}function g(a){var c;(c=function(c){var d=a[c?"getPrevious":"getNext"](k);if(d&&d.type==CKEDITOR.NODE_ELEMENT&&d.is(a.getName())){b(a,d,null,!c);a.remove();a=d}})();c(1)}function c(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in -CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function d(a,c,d){a.fire("saveSnapshot");d.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var f=d.extractContents();c.trim(false,true);var e=c.createBookmark(),h=new CKEDITOR.dom.elementPath(c.startContainer),j=h.block,h=h.lastElement.getAscendant("li",1)||j,s=new CKEDITOR.dom.elementPath(d.startContainer),u=s.contains(CKEDITOR.dtd.$listItem),s=s.contains(CKEDITOR.dtd.$list);if(j)(j=j.getBogus())&&j.remove(); -else if(s)(j=s.getPrevious(k))&&m(j)&&j.remove();(j=f.getLast())&&(j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))&&j.remove();(j=c.startContainer.getChild(c.startOffset))?f.insertBefore(j):c.startContainer.append(f);if(u)if(f=i(u))if(h.contains(u)){b(f,u.getParent(),u);f.remove()}else h.append(f);for(;d.checkStartOfBlock()&&d.checkEndOfBlock();){s=d.startPath();f=s.block;if(!f)break;if(f.is("li")){h=f.getParent();f.equals(h.getLast(k))&&f.equals(h.getFirst(k))&&(f=h)}d.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START); -f.remove()}d=d.clone();f=a.editable();d.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=function(a){return k(a)&&!m(a)};(d=d.next())&&(d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in CKEDITOR.dtd.$list)&&g(d);c.moveToBookmark(e);c.select();a.fire("saveSnapshot")}function i(a){return(a=a.getLast(k))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in f?a:null}var f={ol:1,ul:1},h=CKEDITOR.dom.walker.whitespaces(),j=CKEDITOR.dom.walker.bookmark(),k=function(a){return!(h(a)|| -j(a))},m=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(a,b,c,d,e){if(!f[a.getName()])return[];d||(d=0);c||(c=[]);for(var g=0,h=a.getChildCount();g<h;g++){var i=a.getChild(g);i.type==CKEDITOR.NODE_ELEMENT&&i.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(i,b,c,d+1);if(i.$.nodeName.toLowerCase()=="li"){var j={parent:a,indent:d,element:i,contents:[]};if(e)j.grandparent=e;else{j.grandparent=a.getParent();if(j.grandparent&&j.grandparent.$.nodeName.toLowerCase()== -"li")j.grandparent=j.grandparent.getParent()}b&&CKEDITOR.dom.element.setMarker(b,i,"listarray_index",c.length);c.push(j);for(var k=0,m=i.getChildCount(),s;k<m;k++){s=i.getChild(k);s.type==CKEDITOR.NODE_ELEMENT&&f[s.getName()]?CKEDITOR.plugins.list.listToArray(s,b,c,d+1,j.grandparent):j.contents.push(s)}}}return c},arrayToList:function(a,b,c,d,e){c||(c=0);if(!a||a.length<c+1)return null;for(var g,h=a[c].parent.getDocument(),i=new CKEDITOR.dom.documentFragment(h),m=null,s=c,q=Math.max(a[c].indent,0), -z=null,A,B,G=d==CKEDITOR.ENTER_P?"p":"div";;){var C=a[s];g=C.grandparent;A=C.element.getDirection(1);if(C.indent==q){if(!m||a[s].parent.getName()!=m.getName()){m=a[s].parent.clone(false,1);e&&m.setAttribute("dir",e);i.append(m)}z=m.append(C.element.clone(0,1));A!=m.getDirection(1)&&z.setAttribute("dir",A);for(g=0;g<C.contents.length;g++)z.append(C.contents[g].clone(1,1));s++}else if(C.indent==Math.max(q,0)+1){C=a[s-1].element.getDirection(1);s=CKEDITOR.plugins.list.arrayToList(a,null,s,d,C!=A?A:null); -!z.getChildCount()&&(CKEDITOR.env.needsNbspFiller&&!(h.$.documentMode>7))&&z.append(h.createText(" "));z.append(s.listNode);s=s.nextIndex}else if(C.indent==-1&&!c&&g){if(f[g.getName()]){z=C.element.clone(false,true);A!=g.getDirection(1)&&z.setAttribute("dir",A)}else z=new CKEDITOR.dom.documentFragment(h);var m=g.getDirection(1)!=A,J=C.element,F=J.getAttribute("class"),E=J.getAttribute("style"),D=z.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(d!=CKEDITOR.ENTER_BR||m||E||F),I,L=C.contents.length,H;for(g= -0;g<L;g++){I=C.contents[g];if(j(I)&&L>1)D?H=I.clone(1,1):z.append(I.clone(1,1));else if(I.type==CKEDITOR.NODE_ELEMENT&&I.isBlockBoundary()){m&&!I.getDirection()&&I.setAttribute("dir",A);B=I;var Q=J.getAttribute("style");Q&&B.setAttribute("style",Q.replace(/([^;])$/,"$1;")+(B.getAttribute("style")||""));F&&I.addClass(F);B=null;if(H){z.append(H);H=null}z.append(I.clone(1,1))}else if(D){if(!B){B=h.createElement(G);z.append(B);m&&B.setAttribute("dir",A)}E&&B.setAttribute("style",E);F&&B.setAttribute("class", -F);if(H){B.append(H);H=null}B.append(I.clone(1,1))}else z.append(I.clone(1,1))}if(H){(B||z).append(H);H=null}if(z.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&s!=a.length-1){if(CKEDITOR.env.needsBrFiller)(A=z.getLast())&&(A.type==CKEDITOR.NODE_ELEMENT&&A.is("br"))&&A.remove();A=z.getLast(k);(!A||!(A.type==CKEDITOR.NODE_ELEMENT&&A.is(CKEDITOR.dtd.$block)))&&z.append(h.createElement("br"))}A=z.$.nodeName.toLowerCase();(A=="div"||A=="p")&&z.appendBogus();i.append(z);m=null;s++}else return null;B=null;if(a.length<= -s||Math.max(a[s].indent,0)<q)break}if(b)for(a=i.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT){CKEDITOR.dom.element.clearMarkers(b,a);if(a.getName()in CKEDITOR.dtd.$listItem){c=a;h=e=d=void 0;if(d=c.getDirection()){for(e=c.getParent();e&&!(h=e.getDirection());)e=e.getParent();d==h&&c.removeAttribute("dir")}}}a=a.getNextSourceNode()}return{listNode:i,nextIndex:s}}};var q=/^h[1-6]$/,s=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(b){this.refresh(b,b.elementPath()); -var c=b.config,d=b.getSelection(),e=d&&d.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var h=b.editable();if(h.getFirst(k)){var i=e.length==1&&e[0];(c=i&&i.getEnclosedNode())&&(c.is&&this.type==c.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else{c.enterMode==CKEDITOR.ENTER_BR?h.appendBogus():e[0].fixBlock(1,c.enterMode==CKEDITOR.ENTER_P?"p":"div");d.selectRanges(e)}}for(var c=d.createBookmarks(true),h=[],j={},e=e.createIterator(),m=0;(i=e.getNextRange())&&++m;){var s=i.getBoundaryNodes(),t= -s.startNode,y=s.endNode;t.type==CKEDITOR.NODE_ELEMENT&&t.getName()=="td"&&i.setStartAt(s.startNode,CKEDITOR.POSITION_AFTER_START);y.type==CKEDITOR.NODE_ELEMENT&&y.getName()=="td"&&i.setEndAt(s.endNode,CKEDITOR.POSITION_BEFORE_END);i=i.createIterator();for(i.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;s=i.getNextParagraph();)if(!s.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(j,s,"list_block",1);for(var z=b.elementPath(s),t=z.elements,y=0,z=z.blockLimit,A,B=t.length-1;B>=0&&(A=t[B]);B--)if(f[A.getName()]&& -z.contains(A)){z.removeCustomData("list_group_object_"+m);if(t=A.getCustomData("list_group_object"))t.contents.push(s);else{t={root:A,contents:[s]};h.push(t);CKEDITOR.dom.element.setMarker(j,A,"list_group_object",t)}y=1;break}if(!y){y=z;if(y.getCustomData("list_group_object_"+m))y.getCustomData("list_group_object_"+m).contents.push(s);else{t={root:y,contents:[s]};CKEDITOR.dom.element.setMarker(j,y,"list_group_object_"+m,t);h.push(t)}}}}for(A=[];h.length>0;){t=h.shift();if(this.state==CKEDITOR.TRISTATE_OFF)if(f[t.root.getName()]){e= -b;m=t;t=j;i=A;y=CKEDITOR.plugins.list.listToArray(m.root,t);z=[];for(s=0;s<m.contents.length;s++){B=m.contents[s];if((B=B.getAscendant("li",true))&&!B.getCustomData("list_item_processed")){z.push(B);CKEDITOR.dom.element.setMarker(t,B,"list_item_processed",true)}}for(var B=m.root.getDocument(),G=void 0,C=void 0,s=0;s<z.length;s++){var J=z[s].getCustomData("listarray_index"),G=y[J].parent;if(!G.is(this.type)){C=B.createElement(this.type);G.copyAttributes(C,{start:1,type:1});C.removeStyle("list-style-type"); -y[J].parent=C}}t=CKEDITOR.plugins.list.arrayToList(y,t,null,e.config.enterMode);y=void 0;z=t.listNode.getChildCount();for(s=0;s<z&&(y=t.listNode.getChild(s));s++)y.getName()==this.type&&i.push(y);t.listNode.replace(m.root);e.fire("contentDomInvalidated")}else{y=b;s=t;i=A;z=s.contents;e=s.root.getDocument();m=[];if(z.length==1&&z[0].equals(s.root)){t=e.createElement("div");z[0].moveChildren&&z[0].moveChildren(t);z[0].append(t);z[0]=t}s=s.contents[0].getParent();for(B=0;B<z.length;B++)s=s.getCommonAncestor(z[B].getParent()); -G=y.config.useComputedState;y=t=void 0;G=G===void 0||G;for(B=0;B<z.length;B++)for(C=z[B];J=C.getParent();){if(J.equals(s)){m.push(C);!y&&C.getDirection()&&(y=1);C=C.getDirection(G);t!==null&&(t=t&&t!=C?null:C);break}C=J}if(!(m.length<1)){z=m[m.length-1].getNext();B=e.createElement(this.type);i.push(B);for(G=i=void 0;m.length;){i=m.shift();G=e.createElement("li");if(i.is("pre")||q.test(i.getName())||i.getAttribute("contenteditable")=="false")i.appendTo(G);else{i.copyAttributes(G);if(t&&i.getDirection()){G.removeStyle("direction"); -G.removeAttribute("dir")}i.moveChildren(G);i.remove()}G.appendTo(B)}t&&y&&B.setAttribute("dir",t);z?B.insertBefore(z):B.appendTo(s)}}else this.state==CKEDITOR.TRISTATE_ON&&f[t.root.getName()]&&a.call(this,b,t,j)}for(B=0;B<A.length;B++)g(A[B]);CKEDITOR.dom.element.clearAllMarkers(j);d.selectBookmarks(c);b.focus()},refresh:function(a,b){var c=b.contains(f,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}}; -CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){if(!a.blockless){a.addCommand("numberedlist",new e("numberedlist","ol"));a.addCommand("bulletedlist",new e("bulletedlist","ul"));if(a.ui.addButton){a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:true,toolbar:"list,10"});a.ui.addButton("BulletedList",{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:true,toolbar:"list,20"})}a.on("key",function(b){var e=b.data.domEvent.getKey(); -if(a.mode=="wysiwyg"&&e in{8:1,46:1}){var g=a.getSelection().getRanges()[0],h=g&&g.startPath();if(g&&g.collapsed){var j=e==8,s=a.editable(),q=new CKEDITOR.dom.walker(g.clone());q.evaluator=function(a){return k(a)&&!m(a)};q.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=g.clone();if(j){var u,t;if((u=h.contains(f))&&g.checkBoundaryOfElement(u,CKEDITOR.START)&&(u=u.getParent())&&u.is("li")&&(u=i(u))){t=u;u=u.getPrevious(k);e.moveToPosition(u&&m(u)?u:t,CKEDITOR.POSITION_BEFORE_START)}else{q.range.setStartAt(s, -CKEDITOR.POSITION_AFTER_START);q.range.setEnd(g.startContainer,g.startOffset);if((u=q.previous())&&u.type==CKEDITOR.NODE_ELEMENT&&(u.getName()in f||u.is("li"))){if(!u.is("li")){q.range.selectNodeContents(u);q.reset();q.evaluator=c;u=q.previous()}t=u;e.moveToElementEditEnd(t)}}if(t){d(a,e,g);b.cancel()}else if((e=h.contains(f))&&g.checkBoundaryOfElement(e,CKEDITOR.START)){t=e.getFirst(k);if(g.checkBoundaryOfElement(t,CKEDITOR.START)){u=e.getPrevious(k);if(i(t)){if(u){g.moveToElementEditEnd(u);g.select()}}else a.execCommand("outdent"); -b.cancel()}}}else if(t=h.contains("li")){q.range.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);s=(h=t.getLast(k))&&c(h)?h:t;t=0;if((u=q.next())&&u.type==CKEDITOR.NODE_ELEMENT&&u.getName()in f&&u.equals(h)){t=1;u=q.next()}else g.checkBoundaryOfElement(s,CKEDITOR.END)&&(t=1);if(t&&u){g=g.clone();g.moveToElementEditStart(u);d(a,e,g);b.cancel()}}else{q.range.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);if((u=q.next())&&u.type==CKEDITOR.NODE_ELEMENT&&u.is(f)){u=u.getFirst(k);if(h.block&&g.checkStartOfBlock()&& -g.checkEndOfBlock()){h.block.remove();g.moveToElementEditStart(u);g.select()}else if(i(u)){g.moveToElementEditStart(u);g.select()}else{g=g.clone();g.moveToElementEditStart(u);d(a,e,g)}b.cancel()}}setTimeout(function(){a.selectionChange(1)})}}})}}})}(),function(){function a(a){var b=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="true"},true);if(a.root.equals(b))return a;b=new CKEDITOR.dom.range(b);b.moveToRange(a);return b}function e(a, -b,c){c=a.config.forceEnterMode||c;if(a.mode=="wysiwyg"){if(!b)b=a.activeEnterMode;if(!a.elementPath().isContextFor("p")){b=CKEDITOR.ENTER_BR;c=1}a.fire("saveSnapshot");b==CKEDITOR.ENTER_BR?i(a,b,null,c):f(a,b,null,c);a.fire("saveSnapshot")}}function b(a){for(var a=a.getSelection().getRanges(true),b=a.length-1;b>0;b--)a[b].deleteContents();return a[0]}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:false,exec:function(a){e(a)}});a.addCommand("shiftEnter", -{modes:{wysiwyg:1},editorFocus:false,exec:function(a){e(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var g=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(d,f,e,q){if(e=e||b(d)){var e=a(e),s=e.document,n=e.checkStartOfBlock(),l=e.checkEndOfBlock(),o=d.elementPath(e.startContainer),r=o.block,p=f==CKEDITOR.ENTER_DIV?"div":"p",w;if(n&&l){if(r&&(r.is("li")||r.getParent().is("li"))){r.is("li")|| -(r=r.getParent());e=r.getParent();w=e.getParent();var q=!r.hasPrevious(),v=!r.hasNext(),p=d.getSelection(),x=p.createBookmarks(),n=r.getDirection(1),l=r.getAttribute("class"),u=r.getAttribute("style"),t=w.getDirection(1)!=n,d=d.enterMode!=CKEDITOR.ENTER_BR||t||u||l;if(w.is("li"))if(q||v)r[q?"insertBefore":"insertAfter"](w);else r.breakParent(w);else{if(d){if(o.block.is("li")){w=s.createElement(f==CKEDITOR.ENTER_P?"p":"div");t&&w.setAttribute("dir",n);u&&w.setAttribute("style",u);l&&w.setAttribute("class", -l);r.moveChildren(w)}else w=o.block;if(q||v)w[q?"insertBefore":"insertAfter"](e);else{r.breakParent(e);w.insertAfter(e)}}else{r.appendBogus(true);if(q||v)for(;s=r[q?"getFirst":"getLast"]();)s[q?"insertBefore":"insertAfter"](e);else for(r.breakParent(e);s=r.getLast();)s.insertAfter(e)}r.remove()}p.selectBookmarks(x);return}if(r&&r.getParent().is("blockquote")){r.breakParent(r.getParent());r.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||r.getPrevious().remove();r.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))|| -r.getNext().remove();e.moveToElementEditStart(r);e.select();return}}else if(r&&r.is("pre")&&!l){i(d,f,e,q);return}if(n=e.splitBlock(p)){f=n.previousBlock;r=n.nextBlock;o=n.wasStartOfBlock;d=n.wasEndOfBlock;if(r){x=r.getParent();if(x.is("li")){r.breakParent(x);r.move(r.getNext(),1)}}else if(f&&(x=f.getParent())&&x.is("li")){f.breakParent(x);x=f.getNext();e.moveToElementEditStart(x);f.move(f.getPrevious())}if(!o&&!d){if(r.is("li")){w=e.clone();w.selectNodeContents(r);w=new CKEDITOR.dom.walker(w);w.evaluator= -function(a){return!(c(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))};(x=w.next())&&(x.type==CKEDITOR.NODE_ELEMENT&&x.is("ul","ol"))&&(CKEDITOR.env.needsBrFiller?s.createElement("br"):s.createText(" ")).insertBefore(x)}r&&e.moveToElementEditStart(r)}else{if(f){if(f.is("li")||!h.test(f.getName())&&!f.is("pre"))w=f.clone()}else r&&(w=r.clone());if(w)q&&!w.is("li")&&w.renameNode(p);else if(x&&x.is("li"))w=x;else{w=s.createElement(p); -f&&(v=f.getDirection())&&w.setAttribute("dir",v)}if(s=n.elementPath){q=0;for(p=s.elements.length;q<p;q++){x=s.elements[q];if(x.equals(s.block)||x.equals(s.blockLimit))break;if(CKEDITOR.dtd.$removeEmpty[x.getName()]){x=x.clone();w.moveChildren(x);w.append(x)}}}w.appendBogus();w.getParent()||e.insertNode(w);w.is("li")&&w.removeAttribute("value");if(CKEDITOR.env.ie&&o&&(!d||!f.getChildCount())){e.moveToElementEditStart(d?f:w);e.select()}e.moveToElementEditStart(o&&!d?r:w)}e.select();e.scrollIntoView()}}}, -enterBr:function(a,c,d,e){if(d=d||b(a)){var g=d.document,i=d.checkEndOfBlock(),l=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),o=l.block,r=o&&l.block.getName();if(!e&&r=="li")f(a,c,d,e);else{if(!e&&i&&h.test(r))if(i=o.getDirection()){g=g.createElement("div");g.setAttribute("dir",i);g.insertAfter(o);d.setStart(g,0)}else{g.createElement("br").insertAfter(o);CKEDITOR.env.gecko&&g.createText("").insertAfter(o);d.setStartAt(o.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START: -CKEDITOR.POSITION_AFTER_START)}else{a=r=="pre"&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?g.createText("\r"):g.createElement("br");d.deleteContents();d.insertNode(a);if(CKEDITOR.env.needsBrFiller){g.createText("").insertAfter(a);i&&(o||l.blockLimit).appendBogus();a.getNext().$.nodeValue="";d.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)}else d.setStartAt(a,CKEDITOR.POSITION_AFTER_END)}d.collapse(true);d.select();d.scrollIntoView()}}}};var d=CKEDITOR.plugins.enterkey,i=d.enterBr,f=d.enterBlock, -h=/^h[1-6]$/}(),function(){function a(a,b){var g={},c=[],d={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,f){var e=b?"&"+f+";":d[f];g[e]=b?d[f]:"&"+f+";";c.push(e);return""});if(!b&&a){var a=a.split(","),i=document.createElement("div"),f;i.innerHTML="&"+a.join(";&")+";";f=i.innerHTML;i=null;for(i=0;i<f.length;i++){var h=f.charAt(i);g[h]="&"+a[i]+";";c.push(h)}}g.regex=c.join(b?"|":"");return g}CKEDITOR.plugins.add("entities", -{afterInit:function(e){var b=e.config;if(e=(e=e.dataProcessor)&&e.htmlFilter){var g=[];b.basicEntities!==false&&g.push("nbsp,gt,lt,amp");if(b.entities){g.length&&g.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"); -b.entities_latin&&g.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml");b.entities_greek&&g.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"); -b.entities_additional&&g.push(b.entities_additional)}var c=a(g.join(",")),d=c.regex?"["+c.regex+"]":"a^";delete c.regex;b.entities&&b.entities_processNumerical&&(d="[^ -~]|"+d);var d=RegExp(d,"g"),i=function(a){return b.entities_processNumerical=="force"||!c[a]?"&#"+a.charCodeAt(0)+";":c[a]},f=a("nbsp,gt,lt,amp,shy",true),h=RegExp(f.regex,"g"),j=function(a){return f[a]};e.addRules({text:function(a){return a.replace(h,j).replace(d,i)}},{applyToAll:true,excludeNestedEditable:true})}}})}(),CKEDITOR.config.basicEntities= -!0,CKEDITOR.config.entities=!0,CKEDITOR.config.entities_latin=!0,CKEDITOR.config.entities_greek=!0,CKEDITOR.config.entities_additional="#39",CKEDITOR.plugins.add("popup"),CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(a,e,b,g){e=e||"80%";b=b||"70%";typeof e=="string"&&(e.length>1&&e.substr(e.length-1,1)=="%")&&(e=parseInt(window.screen.width*parseInt(e,10)/100,10));typeof b=="string"&&(b.length>1&&b.substr(b.length-1,1)=="%")&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10)); -e<640&&(e=640);b<420&&(b=420);var c=parseInt((window.screen.height-b)/2,10),d=parseInt((window.screen.width-e)/2,10),g=(g||"location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")+",width="+e+",height="+b+",top="+c+",left="+d,i=window.open("",null,g,true);if(!i)return false;try{if(navigator.userAgent.toLowerCase().indexOf(" chrome/")==-1){i.moveTo(d,c);i.resizeTo(e,b)}i.focus();i.location.href=a}catch(f){window.open(a,null,g,true)}return true}}), -function(){function a(a,b){var c=[];if(b)for(var d in b)c.push(d+"="+encodeURIComponent(b[d]));else return a;return a+(a.indexOf("?")!=-1?"&":"?")+c.join("&")}function e(a){a=a+"";return a.charAt(0).toUpperCase()+a.substr(1)}function b(){var b=this.getDialog(),c=b.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+e(b.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",b=c.config["filebrowser"+e(b.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%", -f=this.filebrowser.params||{};f.CKEditor=c.name;f.CKEditorFuncNum=c._.filebrowserFn;if(!f.langCode)f.langCode=c.langCode;f=a(this.filebrowser.url,f);c.popup(f,d,b,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function g(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return!a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value||!a.getContentElement(this["for"][0],this["for"][1]).getAction()?false:true}function c(b,c,d){var f=d.params|| -{};f.CKEditor=b.name;f.CKEditorFuncNum=b._.filebrowserFn;if(!f.langCode)f.langCode=b.langCode;c.action=a(d.url,f);c.filebrowser=d}function d(a,f,i,m){if(m&&m.length)for(var q,s=m.length;s--;){q=m[s];(q.type=="hbox"||q.type=="vbox"||q.type=="fieldset")&&d(a,f,i,q.children);if(q.filebrowser){if(typeof q.filebrowser=="string")q.filebrowser={action:q.type=="fileButton"?"QuickUpload":"Browse",target:q.filebrowser};if(q.filebrowser.action=="Browse"){var n=q.filebrowser.url;if(n===void 0){n=a.config["filebrowser"+ -e(f)+"BrowseUrl"];if(n===void 0)n=a.config.filebrowserBrowseUrl}if(n){q.onClick=b;q.filebrowser.url=n;q.hidden=false}}else if(q.filebrowser.action=="QuickUpload"&&q["for"]){n=q.filebrowser.url;if(n===void 0){n=a.config["filebrowser"+e(f)+"UploadUrl"];if(n===void 0)n=a.config.filebrowserUploadUrl}if(n){var l=q.onClick;q.onClick=function(a){var b=a.sender;return l&&l.call(b,a)===false?false:g.call(b,a)};q.filebrowser.url=n;q.hidden=false;c(a,i.getContents(q["for"][0]).get(q["for"][1]),q.filebrowser)}}}}} -function i(a,b,c){if(c.indexOf(";")!==-1){for(var c=c.split(";"),d=0;d<c.length;d++)if(i(a,b,c[d]))return true;return false}return(a=a.getContents(b).get(c).filebrowser)&&a.url}function f(a,b){var c=this._.filebrowserSe.getDialog(),d=this._.filebrowserSe["for"],f=this._.filebrowserSe.filebrowser.onSelect;d&&c.getContentElement(d[0],d[1]).reset();if(!(typeof b=="function"&&b.call(this._.filebrowserSe)===false)&&!(f&&f.call(this._.filebrowserSe,a,b)===false)){typeof b=="string"&&b&&alert(b);if(a){d= -this._.filebrowserSe;c=d.getDialog();if(d=d.filebrowser.target||null){d=d.split(":");if(f=c.getContentElement(d[0],d[1])){f.setValue(a);c.selectPage(d[0])}}}}}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(f,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,c,f=0;f<b.contents.length;++f)if(c=b.contents[f]){d(a.editor, -a.data.name,b,c.elements);if(c.hidden&&c.filebrowser)c.hidden=!i(b,c.id,c.filebrowser)}})}(),function(){function a(a){var c=a.config,d=a.fire("uiSpace",{space:"top",html:""}).html,i=function(){function d(a,c,f){h.setStyle(c,b(f));h.setStyle("position",a)}function f(a){var b=k.getDocumentPosition();switch(a){case "top":d("absolute","top",b.y-p-x);break;case "pin":d("fixed","top",t);break;case "bottom":d("absolute","top",b.y+(o.height||o.bottom-o.top)+x)}j=a}var j,k,l,o,r,p,w,v=c.floatSpaceDockedOffsetX|| -0,x=c.floatSpaceDockedOffsetY||0,u=c.floatSpacePinnedOffsetX||0,t=c.floatSpacePinnedOffsetY||0;return function(c){if(k=a.editable()){c&&c.name=="focus"&&h.show();h.removeStyle("left");h.removeStyle("right");l=h.getClientRect();o=k.getClientRect();r=e.getViewPaneSize();p=l.height;w="pageXOffset"in e.$?e.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;if(j){p+x<=o.top?f("top"):p+x>r.height-o.bottom?f("pin"):f("bottom");var c=r.width/2,c=o.left>0&&o.right<r.width&&o.width>l.width?a.config.contentsLangDirection== -"rtl"?"right":"left":c-o.left>o.right-c?"left":"right",d;if(l.width>r.width){c="left";d=0}else{d=c=="left"?o.left>0?o.left:0:o.right<r.width?r.width-o.right:0;if(d+l.width>r.width){c=c=="left"?"right":"left";d=0}}h.setStyle(c,b((j=="pin"?u:v)+d+(j=="pin"?0:c=="left"?w:-w)))}else{j="pin";f("pin");i(c)}}}}();if(d){var f=new CKEDITOR.template('<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko? -" ":"")+'" lang="{langCode}" role="application" style="{style}"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':" ")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':" ")+'<div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'),h=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(f.output({content:d,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+ -(c.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),j=CKEDITOR.tools.eventsBuffer(500,i),k=CKEDITOR.tools.eventsBuffer(100,i);h.unselectable();h.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){i(b);a.on("change",j.input);e.on("scroll",k.input);e.on("resize",k.input)});a.on("blur",function(){h.hide();a.removeListener("change",j.input);e.removeListener("scroll",k.input);e.removeListener("resize",k.input)});a.on("destroy", -function(){e.removeListener("scroll",k.input);e.removeListener("resize",k.input);h.clearCustomData();h.remove()});a.focusManager.hasFocus&&h.show();a.focusManager.add(h,1)}}var e=CKEDITOR.document.getWindow(),b=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(b){b.on("loaded",function(){a(this)},null,null,20)}})}(),CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var a=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'), -e=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),b=CKEDITOR.addTemplate("panel-list-group",'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>'),g=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a, -new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},e=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(e["aria-multiselectable"]=true);!e.role&&(e.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",e.role);e=this.keys;e[40]="next";e[9]="next";e[38]="prev";e[CKEDITOR.SHIFT+9]="prev";e[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(e[13]= -"mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var b=a.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(b);delete this._.started}},getClick:function(){if(!this._.click)this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this);return this._.click}},proto:{add:function(a,b,i){var f=CKEDITOR.tools.getNextId();if(!this._.started){this._.started= -1;this._.size=this._.size||0}this._.items[a]=f;var h;h=CKEDITOR.tools.htmlEncodeAttr(a).replace(g,"\\'");a={id:f,val:h,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(i||a),text:b||a};this._.pendingList.push(e.output(a))},startGroup:function(a){this._.close();var d=CKEDITOR.tools.getNextId();this._.groups[a]=d;this._.pendingHtml.push(b.output({id:d,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join("")); -delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();if(a){a.setStyle("display","none");b&&b.getName()=="ul"&&b.setStyle("display","none")}},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,e=this.element.getDocument(),f;for(f in a)e.getById(a[f]).setStyle("display", -"");for(var g in b){a=e.getById(b[g]);f=a.getNext();a.setStyle("display","");f&&f.getName()=="ul"&&f.setStyle("display","")}},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",true);this.onMark&&this.onMark(b)},unmark:function(a){var b=this.element.getDocument(),a=this._.items[a],e=b.getById(a);e.removeClass("cke_selected");b.getById(a+ -"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(e)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),e;for(e in a){var f=a[e];b.getById(f).removeClass("cke_selected");b.getById(f+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),e,f=-1;if(a)for(e= -this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++f);){if(a.equals(e)){this._.focusIndex=f;break}}else this.element.focus();e&&setTimeout(function(){e.focus()},0)}}})}}),function(){var a='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}" aria-disabled="{ariaDisabled}"'; -CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a=a+' onkeypress="return false;"');CKEDITOR.env.gecko&&(a=a+' onblur="this.style.cssText = this.style.cssText;"');var a=a+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),a=a+ -'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>',e=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),b=CKEDITOR.addTemplate("button",a);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label, -click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,c){var d=CKEDITOR.env,i=this._.id=CKEDITOR.tools.getNextId(),f="",h=this.command,j;this._.editor=a;var k={id:i,button:this,editor:a,focus:function(){CKEDITOR.document.getById(i).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},m=CKEDITOR.tools.addFunction(function(a){if(k.onkey){a= -new CKEDITOR.dom.event(a);return k.onkey(k,a.getKeystroke())!==false}}),q=CKEDITOR.tools.addFunction(function(a){var b;k.onfocus&&(b=k.onfocus(k,new CKEDITOR.dom.event(a))!==false);return b}),s=0;k.clickFn=j=CKEDITOR.tools.addFunction(function(){if(s){a.unlockSelection(1);s=0}k.execute();d.iOS&&a.focus()});if(this.modes){var n={},l=function(){var b=a.mode;if(b){b=this.modes[b]?n[b]!=void 0?n[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED: -b;this.setState(b);this.refresh&&this.refresh()}};a.on("beforeModeUnload",function(){if(a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED)n[a.mode]=this._.state},this);a.on("activeFilterChange",l,this);a.on("mode",l,this);!this.readOnly&&a.on("readOnly",l,this)}else if(h)if(h=a.getCommand(h)){h.on("state",function(){this.setState(h.state)},this);f=f+(h.state==CKEDITOR.TRISTATE_ON?"on":h.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off")}if(this.directional)a.on("contentDirChanged",function(b){var c= -CKEDITOR.document.getById(this._.id),d=c.getFirst(),b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(o,b=="rtl",this.icon,this.iconOffset))},this);h||(f=f+"off");var o=l=this.name||this.command;if(this.icon&&!/\./.test(this.icon)){o=this.icon;this.icon=null}f={id:i,name:l,iconName:o,label:this.label,cls:this.className||"",state:f,ariaDisabled:f=="disabled"?"true":"false",title:this.title,titleJs:d.gecko&& -!d.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:m,focusFn:q,clickFn:j,style:CKEDITOR.skin.getIconStyle(o,a.lang.dir=="rtl",this.icon,this.iconOffset),arrowHtml:this.hasArrow?e.output():""};b.output(f,c);if(this.onRender)this.onRender();return k},setState:function(a){if(this._.state==a)return false;this._.state=a;var b=CKEDITOR.document.getById(this._.id);if(b){b.setState(a,"cke_button");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",true):b.removeAttribute("aria-disabled"); -if(this.hasArrow){a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label;CKEDITOR.document.getById(this._.id+"_label").setText(a)}else a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",true):b.removeAttribute("aria-pressed");return true}return false},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;!this.allowedContent&&(!this.requiredContent&&this.command)&&(b=a.getCommand(this.command)|| -b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}}(),CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}}),function(){var a='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&& -!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a=a+' onkeypress="return false;"');CKEDITOR.env.gecko&&(a=a+' onblur="this.style.cssText = this.style.cssText;"');var a=a+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+ -'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"),e=CKEDITOR.addTemplate("combo",a);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:false,title:a.label,modes:{wysiwyg:1},editorFocus:1}); -a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=true;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var e=[];this.render(a,e);return e.join("")},render:function(a,g){function c(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED; -if(a.readOnly&&!this.readOnly)c=CKEDITOR.TRISTATE_DISABLED;this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=CKEDITOR.env,i="cke_"+this.id,f=CKEDITOR.tools.addFunction(function(c){if(q){a.unlockSelection(1);q=0}j.execute(c)},this),h=this,j={id:i,combo:this,focus:function(){CKEDITOR.document.getById(i).getChild(1).focus()},execute:function(c){var d=h._;if(d.state!=CKEDITOR.TRISTATE_DISABLED){h.createPanel(a);if(d.on)d.panel.hide();else{h.commit(); -var f=h.getValue();f?d.list.mark(f):d.list.unmarkAll();d.panel.showBlock(h.id,new CKEDITOR.dom.element(c),4)}}},clickFn:f};a.on("activeFilterChange",c,this);a.on("mode",c,this);a.on("selectionChange",c,this);!this.readOnly&&a.on("readOnly",c,this);var k=CKEDITOR.tools.addFunction(function(c,d){var c=new CKEDITOR.dom.event(c),e=c.getKeystroke();if(e==40)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(e){case 13:case 32:case 40:CKEDITOR.tools.callFunction(f,d);break; -default:j.onkey(j,e)}c.preventDefault()}),m=CKEDITOR.tools.addFunction(function(){j.onfocus&&j.onfocus()}),q=0;j.keyDownFn=k;d={id:i,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:k,focusFn:m,clickFn:f};e.output(d,g);if(this.onRender)this.onRender();return j},createPanel:function(a){if(!this._.panel){var e=this._.panelDefinition,c=this._.panelDefinition.block,d=e.parent||CKEDITOR.document.getBody(), -i="cke_combopanel__"+this.name,f=new CKEDITOR.ui.floatPanel(a,d,e),h=f.addListBlock(this.id,c),j=this;f.onShow=function(){this.element.addClass(i);j.setState(CKEDITOR.TRISTATE_ON);j._.on=1;j.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(j.onOpen)j.onOpen();a.once("panelShow",function(){h.focus(!h.multiSelect&&j.getValue())})};f.onHide=function(c){this.element.removeClass(i);j.setState(j.modes&&j.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);j._.on=0;if(!c&&j.onClose)j.onClose()}; -f.onEscape=function(){f.hide(1)};h.onClick=function(a,b){j.onClick&&j.onClick.call(j,a,b);f.hide()};this._.panel=f;this._.list=h;f.getBlock(this.id).onHide=function(){j._.on=0;j.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,e){this._.value=a;var c=this.document.getById("cke_"+this.id+"_text");if(c){if(!a&&!e){e=this.label;c.addClass("cke_combo_inlinelabel")}else c.removeClass("cke_combo_inlinelabel");c.setText(typeof e!="undefined"?e:a)}},getValue:function(){return this._.value|| -""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,e,c){this._.items[a]=c||a;this._.list.add(a,e,c)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){if(!this._.committed){this._.list.commit();this._.committed=1;CKEDITOR.ui.fire("ready",this)}this._.committed=1},setState:function(a){if(this._.state!= -a){var e=this.document.getById("cke_"+this.id);e.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?e.setAttribute("aria-disabled",true):e.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){if(this._.state!=CKEDITOR.TRISTATE_DISABLED){this._.lastState=this._.state;this.setState(CKEDITOR.TRISTATE_DISABLED)}}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}}); -CKEDITOR.ui.prototype.addRichCombo=function(a,e){this.add(a,CKEDITOR.UI_RICHCOMBO,e)}}(),CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var e=a.config,b=a.lang.format,g=e.format_tags.split(";"),c={},d=0,i=[],f=0;f<g.length;f++){var h=g[f],j=new CKEDITOR.style(e["format_"+h]);if(!a.filter.customConfig||a.filter.check(j)){d++;c[h]=j;c[h]._.enterMode=a.config.enterMode;i.push(j)}}d!==0&&a.ui.addRichCombo("Format",{label:b.label,title:b.panelTitle,toolbar:"styles,20", -allowedContent:i,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(e.contentsCss),multiSelect:false,attributes:{"aria-label":b.panelTitle}},init:function(){this.startGroup(b.panelTitle);for(var a in c){var d=b["tag_"+a];this.add(a,c[a].buildPreview(d),d)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=c[b],d=a.elementPath();a[b.checkActive(d,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var d= -this.getValue(),b=b.data.path;this.refresh();for(var f in c)if(c[f].checkActive(b,a)){f!=d&&this.setValue(f,a.lang.format["tag_"+f]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in c)a.activeFilter.check(c[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var d in c)if(a.activeFilter.check(c[d]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}}),CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div",CKEDITOR.config.format_p= -{element:"p"},CKEDITOR.config.format_div={element:"div"},CKEDITOR.config.format_pre={element:"pre"},CKEDITOR.config.format_address={element:"address"},CKEDITOR.config.format_h1={element:"h1"},CKEDITOR.config.format_h2={element:"h2"},CKEDITOR.config.format_h3={element:"h3"},CKEDITOR.config.format_h4={element:"h4"},CKEDITOR.config.format_h5={element:"h5"},CKEDITOR.config.format_h6={element:"h6"},function(){var a={canUndo:false,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)}, -allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(e){if(!e.blockless){e.addCommand("horizontalrule",a);e.ui.addButton&&e.ui.addButton("HorizontalRule",{label:e.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"})}}})}(),CKEDITOR.plugins.add("htmlwriter",{init:function(a){var e=new CKEDITOR.htmlWriter;e.forceSimpleAmpersand=a.config.forceSimpleAmpersand;e.indentationChars=a.config.dataIndentationChars||"\t";a.dataProcessor.writer=e}}), -CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var a=CKEDITOR.dtd,e;for(e in CKEDITOR.tools.extend({},a.$nonBodyContent,a.$block,a.$listItem,a.$tableContent))this.setRules(e,{indent:!a[e]["#"],breakBeforeOpen:1,breakBeforeClose:!a[e]["#"],breakAfterClose:1,needsSpace:e in -a.$block&&!(e in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(a){var e=this._.rules[a];this._.afterCloser&&(e&&e.needsSpace&&this._.needsSpace)&&this._.output.push("\n");if(this._.indent)this.indentation();else if(e&&e.breakBeforeOpen){this.lineBreak();this.indentation()}this._.output.push("<",a);this._.afterCloser= -0},openTagClose:function(a,e){var b=this._.rules[a];if(e){this._.output.push(this.selfClosingEnd);if(b&&b.breakAfterClose)this._.needsSpace=b.needsSpace}else{this._.output.push(">");if(b&&b.indent)this._.indentation=this._.indentation+this.indentationChars}b&&b.breakAfterOpen&&this.lineBreak();a=="pre"&&(this._.inPre=1)},attribute:function(a,e){if(typeof e=="string"){this.forceSimpleAmpersand&&(e=e.replace(/&amp;/g,"&"));e=CKEDITOR.tools.htmlEncodeAttr(e)}this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){var e= -this._.rules[a];if(e&&e.indent)this._.indentation=this._.indentation.substr(this.indentationChars.length);if(this._.indent)this.indentation();else if(e&&e.breakBeforeClose){this.lineBreak();this.indentation()}this._.output.push("</",a,">");a=="pre"&&(this._.inPre=0);if(e&&e.breakAfterClose){this.lineBreak();this._.needsSpace=e.needsSpace}this._.afterCloser=1},text:function(a){if(this._.indent){this.indentation();!this._.inPre&&(a=CKEDITOR.tools.ltrim(a))}this._.output.push(a)},comment:function(a){this._.indent&& -this.indentation();this._.output.push("<\!--",a,"--\>")},lineBreak:function(){!this._.inPre&&this._.output.length>0&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(a,e){var b=this._.rules[a];b?CKEDITOR.tools.extend(b,e,true):this._.rules[a]=e}}}),function(){function a(a, -e){e||(e=a.getSelection().getSelectedElement());if(e&&e.is("img")&&!e.data("cke-realelement")&&!e.isReadOnly())return e}function e(a){var e=a.getStyle("float");if(e=="inherit"||e=="none")e=0;e||(e=a.getAttribute("align"));return e}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var e="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}"; -CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(e="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:e,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(a){var b= -a.data.element;if(b.is("img")&&!b.data("cke-realelement")&&!b.isReadOnly())a.data.dialog="image"});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(c){if(a(b,c))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function g(c){var d=b.getCommand("justify"+c);if(d){if(c=="left"||c=="right")d.on("exec",function(d){var f=a(b),g;if(f){g=e(f);if(g==c){f.removeStyle("float");c==e(f)&&f.removeAttribute("align")}else f.setStyle("float", -c);d.cancel()}});d.on("refresh",function(d){var f=a(b);if(f){f=e(f);this.setState(f==c?CKEDITOR.TRISTATE_ON:c=="right"||c=="left"?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d.cancel()}})}}if(!b.plugins.image2){g("left");g("right");g("center");g("block")}}})}(),CKEDITOR.config.image_removeLinkByEmptyURL=!0,function(){function a(a,b){var c=g.exec(a),e=g.exec(b);if(c){if(!c[2]&&e[2]=="px")return e[1];if(c[2]=="px"&&!e[2])return e[1]+"px"}return b}var e=CKEDITOR.htmlParser.cssStyle,b=CKEDITOR.tools.cssLength, -g=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,c={elements:{$:function(b){var c=b.attributes;if((c=(c=(c=c&&c["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(c)))&&c.children[0])&&b.attributes["data-cke-resizable"]){var f=(new e(b)).rules,b=c.attributes,g=f.width,f=f.height;g&&(b.width=a(b.width,g));f&&(b.height=a(b.height,f))}return c}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")}, -afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(c,{applyToAll:true})}});CKEDITOR.editor.prototype.createFakeElement=function(a,c,f,g){var j=this.lang.fakeobjects,j=j[f]||j.unknown,c={"class":c,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type,alt:j,title:j,align:a.getAttribute("align")||""};if(!CKEDITOR.env.hc)c.src=CKEDITOR.tools.transparentImageData;f&&(c["data-cke-real-element-type"]=f);if(g){c["data-cke-resizable"]=g;f=new e;g= -a.getAttribute("width");a=a.getAttribute("height");g&&(f.rules.width=b(g));a&&(f.rules.height=b(a));f.populate(c)}return this.document.createElement("img",{attributes:c})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,c,f,g){var j=this.lang.fakeobjects,j=j[f]||j.unknown,k;k=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(k);k=k.getHtml();c={"class":c,"data-cke-realelement":encodeURIComponent(k),"data-cke-real-node-type":a.type,alt:j,title:j,align:a.attributes.align||""};if(!CKEDITOR.env.hc)c.src= -CKEDITOR.tools.transparentImageData;f&&(c["data-cke-real-element-type"]=f);if(g){c["data-cke-resizable"]=g;g=a.attributes;a=new e;f=g.width;g=g.height;f!=void 0&&(a.rules.width=b(f));g!=void 0&&(a.rules.height=b(g));a.populate(c)}return new CKEDITOR.htmlParser.element("img",c)};CKEDITOR.editor.prototype.restoreRealElement=function(b){if(b.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var c=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(b.data("cke-realelement")),this.document); -if(b.data("cke-resizable")){var f=b.getStyle("width"),b=b.getStyle("height");f&&c.setAttribute("width",a(c.getAttribute("width"),f));b&&c.setAttribute("height",a(c.getAttribute("height"),b))}return c}}(),"use strict",function(){function a(a){return a.replace(/'/g,"\\$&")}function e(a){for(var b,c=a.length,d=[],f=0;f<c;f++){b=a.charCodeAt(f);d.push(b)}return"String.fromCharCode("+d.join(",")+")"}function b(b,c){var d=b.plugins.link,f=d.compiledProtectionFunction.params,e,g;g=[d.compiledProtectionFunction.name, -"("];for(var h=0;h<f.length;h++){d=f[h].toLowerCase();e=c[d];h>0&&g.push(",");g.push("'",e?a(encodeURIComponent(c[d])):"","'")}g.push(")");return g.join("")}function g(a){var a=a.config.emailProtection||"",b;if(a&&a!="encode"){b={};a.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,d){b.name=c;b.params=[];d.replace(/[^,\s]+/g,function(a){b.params.push(a)})})}return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function a(b){return c.replace(/%1/g,b=="rtl"?"right":"left").replace(/%2/g, -"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;",c=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(a("ltr")+a("rtl"))},init:function(a){var b="a[!href]"; -CKEDITOR.dialog.isTabEnabled(a,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)"));CKEDITOR.dialog.isTabEnabled(a,"link","target")&&(b=b.replace("]",",target,onclick]"));a.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));a.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));a.addCommand("unlink",new CKEDITOR.unlinkCommand);a.addCommand("removeAnchor", -new CKEDITOR.removeAnchorCommand);a.setKeystroke(CKEDITOR.CTRL+76,"link");if(a.ui.addButton){a.ui.addButton("Link",{label:a.lang.link.toolbar,command:"link",toolbar:"links,10"});a.ui.addButton("Unlink",{label:a.lang.link.unlink,command:"unlink",toolbar:"links,20"});a.ui.addButton("Anchor",{label:a.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"})}CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");a.on("doubleclick",function(b){var c= -CKEDITOR.plugins.link.getSelectedLink(a)||b.data.element;if(!c.isReadOnly())if(c.is("a")){b.data.dialog=c.getAttribute("name")&&(!c.getAttribute("href")||!c.getChildCount())?"anchor":"link";b.data.link=c}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,c))b.data.dialog="anchor"},null,null,0);a.on("doubleclick",function(b){b.data.dialog in{link:1,anchor:1}&&b.data.link&&a.getSelection().selectElement(b.data.link)},null,null,20);a.addMenuItems&&a.addMenuItems({anchor:{label:a.lang.link.anchor.menu, -command:"anchor",group:"anchor",order:1},removeAnchor:{label:a.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:a.lang.link.menu,command:"link",group:"link",order:1},unlink:{label:a.lang.link.unlink,command:"unlink",group:"link",order:5}});a.contextMenu&&a.contextMenu.addListener(function(b){if(!b||b.isReadOnly())return null;b=CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,b);if(!b&&!(b=CKEDITOR.plugins.link.getSelectedLink(a)))return null;var c={};b.getAttribute("href")&& -b.getChildCount()&&(c={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(b&&b.hasAttribute("name"))c.anchor=c.removeAnchor=CKEDITOR.TRISTATE_OFF;return c});this.compiledProtectionFunction=g(a)},afterInit:function(a){a.dataProcessor.dataFilter.addRules({elements:{a:function(b){return!b.attributes.name?null:!b.children.length?a.createFakeParserElement(b,"cke_anchor","anchor"):null}}});var b=a._.elementsPath&&a._.elementsPath.filters;b&&b.push(function(b,c){if(c=="a"&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, -b)||b.getAttribute("name")&&(!b.getAttribute("href")||!b.getChildCount())))return"anchor"})}});var c=/^javascript:/,d=/^mailto:([^?]+)(?:\?(.+))?$/,i=/subject=([^;?:@&=$,\/]*)/,f=/body=([^;?:@&=$,\/]*)/,h=/^#(.*)$/,j=/^((?:http|https|ftp|news):\/\/)?(.*)$/,k=/^(_(?:self|top|parent|blank))$/,m=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,q=/^javascript:([^(]+)\(([^)]+)\)$/,s=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, -n=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,l={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",title:"advTitle",type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"};CKEDITOR.plugins.link={getSelectedLink:function(a){var b=a.getSelection(),c=b.getSelectedElement();if(c&&c.is("a"))return c;if(b=b.getRanges()[0]){b.shrink(CKEDITOR.SHRINK_TEXT);return a.elementPath(b.getCommonAncestor()).contains("a",1)}return null}, -getEditorAnchors:function(a){for(var b=a.editable(),c=b.isInline()&&!a.plugins.divarea?a.document:b,b=c.getElementsByTag("a"),c=c.getElementsByTag("img"),d=[],f=0,e;e=b.getItem(f++);)if(e.data("cke-saved-name")||e.hasAttribute("name"))d.push({name:e.data("cke-saved-name")||e.getAttribute("name"),id:e.getAttribute("id")});for(f=0;e=c.getItem(f++);)(e=this.tryRestoreFakeAnchor(a,e))&&d.push({name:e.getAttribute("name"),id:e.getAttribute("id")});return d},fakeAnchor:true,tryRestoreFakeAnchor:function(a, -b){if(b&&b.data("cke-real-element-type")&&b.data("cke-real-element-type")=="anchor"){var c=a.restoreRealElement(b);if(c.data("cke-saved-name"))return c}},parseLinkAttributes:function(a,b){var e=b&&(b.data("cke-saved-href")||b.getAttribute("href"))||"",g=a.plugins.link.compiledProtectionFunction,v=a.config.emailProtection,x,u={};e.match(c)&&(v=="encode"?e=e.replace(m,function(a,b,c){return"mailto:"+String.fromCharCode.apply(String,b.split(","))+(c&&c.replace(/\\'/g,"'"))}):v&&e.replace(q,function(a, -b,c){if(b==g.name){u.type="email";for(var a=u.email={},b=/(^')|('$)/g,c=c.match(/[^,\s]+/g),d=c.length,f,e,h=0;h<d;h++){f=decodeURIComponent;e=c[h].replace(b,"").replace(/\\'/g,"'");e=f(e);f=g.params[h].toLowerCase();a[f]=e}a.address=[a.name,a.domain].join("@")}}));if(!u.type)if(v=e.match(h)){u.type="anchor";u.anchor={};u.anchor.name=u.anchor.id=v[1]}else if(v=e.match(d)){x=e.match(i);e=e.match(f);u.type="email";var t=u.email={};t.address=v[1];x&&(t.subject=decodeURIComponent(x[1]));e&&(t.body=decodeURIComponent(e[1]))}else if(e&& -(x=e.match(j))){u.type="url";u.url={};u.url.protocol=x[1];u.url.url=x[2]}if(b){if(e=b.getAttribute("target"))u.target={type:e.match(k)?e:"frame",name:e};else if(e=(e=b.data("cke-pa-onclick")||b.getAttribute("onclick"))&&e.match(s))for(u.target={type:"popup",name:e[1]};v=n.exec(e[2]);)(v[2]=="yes"||v[2]=="1")&&!(v[1]in{height:1,width:1,top:1,left:1})?u.target[v[1]]=true:isFinite(v[2])&&(u.target[v[1]]=v[2]);var e={},y;for(y in l)(v=b.getAttribute(y))&&(e[l[y]]=v);if(y=b.data("cke-saved-name")||e.advName)e.advName= -y;if(!CKEDITOR.tools.isEmpty(e))u.advanced=e}return u},getLinkAttributes:function(c,d){var f=c.config.emailProtection||"",g={};switch(d.type){case "url":var f=d.url&&d.url.protocol!=void 0?d.url.protocol:"http://",h=d.url&&CKEDITOR.tools.trim(d.url.url)||"";g["data-cke-saved-href"]=h.indexOf("/")===0?h:f+h;break;case "anchor":f=d.anchor&&d.anchor.id;g["data-cke-saved-href"]="#"+(d.anchor&&d.anchor.name||f||"");break;case "email":var i=d.email,h=i.address;switch(f){case "":case "encode":var j=encodeURIComponent(i.subject|| -""),k=encodeURIComponent(i.body||""),i=[];j&&i.push("subject="+j);k&&i.push("body="+k);i=i.length?"?"+i.join("&"):"";if(f=="encode"){f=["javascript:void(location.href='mailto:'+",e(h)];i&&f.push("+'",a(i),"'");f.push(")")}else f=["mailto:",h,i];break;default:f=h.split("@",2);i.name=f[0];i.domain=f[1];f=["javascript:",b(c,i)]}g["data-cke-saved-href"]=f.join("")}if(d.target)if(d.target.type=="popup"){for(var f=["window.open(this.href, '",d.target.name||"","', '"],n=["resizable","status","location", -"toolbar","menubar","fullscreen","scrollbars","dependent"],h=n.length,j=function(a){d.target[a]&&n.push(a+"="+d.target[a])},i=0;i<h;i++)n[i]=n[i]+(d.target[n[i]]?"=yes":"=no");j("width");j("left");j("height");j("top");f.push(n.join(","),"'); return false;");g["data-cke-pa-onclick"]=f.join("")}else if(d.target.type!="notSet"&&d.target.name)g.target=d.target.name;if(d.advanced){for(var s in l)(f=d.advanced[l[s]])&&(g[s]=f);if(g.name)g["data-cke-saved-name"]=g.name}if(g["data-cke-saved-href"])g.href= -g["data-cke-saved-href"];s=CKEDITOR.tools.extend({target:1,onclick:1,"data-cke-pa-onclick":1,"data-cke-saved-name":1},l);for(var m in g)delete s[m];return{set:g,removed:CKEDITOR.tools.objectKeys(s)}}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(a){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});a.removeStyle(b)},refresh:function(a,b){var c=b.lastElement&&b.lastElement.getAscendant("a",true);c&&c.getName()=="a"&&c.getAttribute("href")&& -c.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(a){var b=a.getSelection(),c=b.createBookmarks(),d;if(b&&(d=b.getSelectedElement())&&(!d.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,d):d.is("a")))d.remove(1);else if(d=CKEDITOR.plugins.link.getSelectedLink(a))if(d.hasAttribute("href")){d.removeAttributes({name:1, -"data-cke-saved-name":1});d.removeClass("cke_anchor")}else d.remove(1);b.selectBookmarks(c)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:true,linkShowTargetTab:true})}(),"use strict",function(){function a(a,b,c){return k(b)&&k(c)&&c.equals(b.getNext(function(a){return!(Y(a)||Z(a)||m(a))}))}function e(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function b(a){var b=a.element;if(b&&k(b))if((b=b.getAscendant(a.triggers,true))&&a.editable.contains(b)){var c= -d(b);if(c.getAttribute("contenteditable")=="true")return b;if(c.is(a.triggers))return c}return null}function g(a,b,c){w(a,b);w(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function c(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!Y(b)||k(b)&&!m(b)&&!j(a,b)})}function d(a,b){if(a.data("cke-editable"))return null;for(b||(a=a.getParent());a;){if(a.data("cke-editable"))break;if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null} -function i(a){var b=a.doc,c=z('<span contenteditable="false" style="'+P+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',b),d=CKEDITOR.getUrl(this.path+"images/"+(A.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");t(c,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,true);return this},lineChildren:[t(z('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',b),{base:P+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+ -d+") center no-repeat "+a.boxColor+";cursor:pointer;"+(A.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(A.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px",1),"top:-17px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px 2px 0px 0px",1),"top:-1px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","0px 0px 2px 2px",1)]}),t(z(W,b),{base:V+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px", -"border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),t(z(W,b),{base:V+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){w(a,this);var b=a.holdDistance,c=this.size;return c&&a.mouse.y>c.top-b&&a.mouse.y<c.bottom+b&&a.mouse.x>c.left-b&&a.mouse.x<c.right+b?true:false},place:function(){var b= -a.view,c=a.editable,d=a.trigger,f=d.upper,e=d.lower,g=f||e,h=g.getParent(),i={};this.trigger=d;f&&w(a,f,true);e&&w(a,e,true);w(a,h,true);a.inInlineMode&&v(a,true);if(h.equals(c)){i.left=b.scroll.x;i.right=-b.scroll.x;i.width=""}else{i.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0);i.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x;i.right=""}if(f&&e)i.top=f.size.margin.bottom===e.size.margin.top?0|f.size.bottom+f.size.margin.bottom/ -2:f.size.margin.bottom<e.size.margin.top?f.size.bottom+f.size.margin.bottom:f.size.bottom+f.size.margin.bottom-e.size.margin.top;else if(f){if(!e)i.top=f.size.bottom+f.size.margin.bottom}else i.top=e.size.top-e.size.margin.top;if(d.is(L)||i.top>b.scroll.y-15&&i.top<b.scroll.y+5){i.top=a.inInlineMode?0:b.scroll.y;this.look(L)}else if(d.is(H)||i.top>b.pane.bottom-5&&i.top<b.pane.bottom+15){i.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1;this.look(H)}else{if(a.inInlineMode)i.top= -i.top-(b.editable.top+b.editable.border.top);this.look(Q)}if(a.inInlineMode){i.top--;i.top=i.top+b.editable.scroll.top;i.left=i.left+b.editable.scroll.left}for(var j in i)i[j]=CKEDITOR.tools.cssLength(i[j]);this.setStyles(i)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new y("span",a.doc)});for(b=c.lineChildren.length;b--;)c.lineChildren[b].appendTo(c);c.look(Q);c.appendTo(c.wrap); -c.unselectable();c.lineChildren[0].on("mouseup",function(b){c.detach();f(a,function(b){var c=a.line.trigger;b[c.is(J)?"insertBefore":"insertAfter"](c.is(J)?c.lower:c.upper)},true);a.editor.focus();!A.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(true)});c.on("mousedown",function(a){a.data.preventDefault(true)});a.line=c}function f(a,b,c){var f=new CKEDITOR.dom.range(a.doc),e=a.editor,g;if(A.ie&&a.enterMode==CKEDITOR.ENTER_BR)g=a.doc.createText(O);else{g=(g=d(a.element, -true))&&g.data("cke-enter-mode")||a.enterMode;g=new y(C[g],a.doc);g.is("br")||a.doc.createText(O).appendTo(g)}c&&e.fire("saveSnapshot");b(g);f.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([f]);a.hotNode=g;c&&e.fire("saveSnapshot")}function h(a,e){return{canUndo:true,modes:{wysiwyg:1},exec:function(){function g(b){var c=A.ie&&A.version<9?" ":O,d=a.hotNode&&a.hotNode.getText()==c&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!e;f(a,function(c){d&&a.hotNode&&a.hotNode.remove(); -c[e?"insertAfter":"insertBefore"](b);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!e});a.lastCmdDirection=!!e});!A.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}return function(f){var f=f.getSelection().getStartElement(),h,f=f.getAscendant(N,1);if(!n(a,f)&&f&&!f.equals(a.editable)&&!f.contains(a.editable)){if((h=d(f))&&h.getAttribute("contenteditable")=="false")f=h;a.element=f;h=c(a,f,!e);var i;if(k(h)&&h.is(a.triggers)&&h.is(R)&&(!c(a,h,!e)|| -(i=c(a,h,!e))&&k(i)&&i.is(a.triggers)))g(h);else{i=b(a,f);if(k(i))if(c(a,i,!e))(f=c(a,i,!e))&&(k(f)&&f.is(a.triggers))&&g(i);else g(i)}}}}()}}function j(a,b){if(!b||!(b.type==CKEDITOR.NODE_ELEMENT&&b.$))return false;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function k(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function m(a){if(!k(a))return false;var b;if(!(b=q(a)))if(k(a)){b={left:1,right:1,center:1};b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])}else b=false; -return b}function q(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function s(a,b){return k(b)?b.is(a.triggers):null}function n(a,b){if(!b)return false;for(var c=b.getParents(1),d=c.length;d--;)for(var f=a.tabuList.length;f--;)if(c[d].hasAttribute(a.tabuList[f]))return true;return false}function l(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(K)});if(!b)return false;w(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function o(a){var b=a.editable, -c=a.mouse,d=a.view,f=a.triggerOffset;v(a);var g=c.y>(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[g?"getLast":"getFirst"](function(a){return!(Y(a)||Z(a))});if(!b)return null;j(a,b)&&(b=a.line.wrap[g?"getPrevious":"getNext"](function(a){return!(Y(a)||Z(a))}));if(!k(b)||m(b)||!s(a,b))return null;w(a,b);if(!g&&b.size.top>=0&&c.y>0&&c.y<b.size.top+f){a=a.inInlineMode||d.scroll.y===0?L:Q;return new e([null,b,J,D,a])}if(g&&b.size.bottom<=d.pane.height&& -c.y>b.size.bottom-f&&c.y<d.pane.height){a=a.inInlineMode||b.size.bottom>d.pane.height-f&&b.size.bottom<d.pane.height?H:Q;return new e([b,null,F,D,a])}return null}function r(a){var d=a.mouse,f=a.view,g=a.triggerOffset,h=b(a);if(!h)return null;w(a,h);var g=Math.min(g,0|h.size.outerHeight/2),i=[],j,n;if(d.y>h.size.top-1&&d.y<h.size.top+g)n=false;else if(d.y>h.size.bottom-g&&d.y<h.size.bottom+1)n=true;else return null;if(m(h)||l(a,h,n)||h.getParent().is(M))return null;var r=c(a,h,!n);if(r){if(r&&r.type== -CKEDITOR.NODE_TEXT)return null;if(k(r)){if(m(r)||!s(a,r)||r.getParent().is(M))return null;i=[r,h][n?"reverse":"concat"]().concat([E,D])}}else{if(h.equals(a.editable[n?"getLast":"getFirst"](a.isRelevant))){v(a);n&&d.y>h.size.bottom-g&&d.y<f.pane.height&&h.size.bottom>f.pane.height-g&&h.size.bottom<f.pane.height?j=H:d.y>0&&d.y<h.size.top+g&&(j=L)}else j=Q;i=[null,h][n?"reverse":"concat"]().concat([n?F:J,D,j,h.equals(a.editable[n?"getLast":"getFirst"](a.isRelevant))?n?H:L:Q])}return 0 in i?new e(i): -null}function p(a,b,c,d){for(var f=function(){var c=A.ie?b.$.currentStyle:a.win.$.getComputedStyle(b.$,"");return A.ie?function(a){return c[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){return c.getPropertyValue(a)}}(),e=b.getDocumentPosition(),g={},h={},i={},j={},k=X.length;k--;){g[X[k]]=parseInt(f("border-"+X[k]+"-width"),10)||0;i[X[k]]=parseInt(f("padding-"+X[k]),10)||0;h[X[k]]=parseInt(f("margin-"+X[k]),10)||0}(!c||d)&&x(a,d);j.top=e.y-(c?0:a.view.scroll.y);j.left=e.x-(c?0:a.view.scroll.x); -j.outerWidth=b.$.offsetWidth;j.outerHeight=b.$.offsetHeight;j.height=j.outerHeight-(i.top+i.bottom+g.top+g.bottom);j.width=j.outerWidth-(i.left+i.right+g.left+g.right);j.bottom=j.top+j.outerHeight;j.right=j.left+j.outerWidth;if(a.inInlineMode)j.scroll={top:b.$.scrollTop,left:b.$.scrollLeft};return t({border:g,padding:i,margin:h,ignoreScroll:c},j,true)}function w(a,b,c){if(!k(b))return b.size=null;if(b.size){if(b.size.ignoreScroll==c&&b.size.date>new Date-T)return null}else b.size={};return t(b.size, -p(a,b,c),{date:+new Date},true)}function v(a,b){a.view.editable=p(a,a.editable,b,true)}function x(a,b){if(!a.view)a.view={};var c=a.view;if(b||!(c&&c.date>new Date-T)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();t(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},true)}}function u(a,b,c,d){for(var f=d,g=d,h=0,i=false,j=false,k=a.view.pane.height, -n=a.mouse;n.y+h<k&&n.y-h>0;){i||(i=b(f,d));j||(j=b(g,d));!i&&n.y-h>0&&(f=c(a,{x:n.x,y:n.y-h}));!j&&n.y+h<k&&(g=c(a,{x:n.x,y:n.y+h}));if(i&&j)break;h=h+2}return new e([f,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var d=a.config,g=d.magicline_triggerOffset||30,l={editor:a,enterMode:d.enterMode,triggerOffset:g,holdDistance:0|g*(d.magicline_holdDistance||0.5),boxColor:d.magicline_color||"#ff0000",rtl:d.contentsLangDirection=="rtl",tabuList:["data-cke-hidden-sel"].concat(d.magicline_tabuList|| -[]),triggers:d.magicline_everywhere?N:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},s,w,u;l.isRelevant=function(a){return k(a)&&!j(l,a)&&!m(a)};a.on("contentDom",function(){var g=a.editable(),k=a.document,m=a.window;t(l,{editable:g,inInlineMode:g.isInline(),doc:k,win:m,hotNode:null},true);l.boundary=l.inInlineMode?l.editable:l.doc.getDocumentElement();if(!g.is(G.$inline)){l.inInlineMode&&!q(g)&&g.setStyles({position:"relative",top:null,left:null});i.call(this,l);x(l);g.attachListener(a, -"beforeUndoImage",function(){l.line.detach()});g.attachListener(a,"beforeGetData",function(){if(l.line.wrap.getParent()){l.line.detach();a.once("getData",function(){l.line.attach()},null,null,1E3)}},null,null,0);g.attachListener(l.inInlineMode?k:k.getWindow().getFrame(),"mouseout",function(b){if(a.mode=="wysiwyg")if(l.inInlineMode){var c=b.data.$.clientX,b=b.data.$.clientY;x(l);v(l,true);var d=l.view.editable,f=l.view.scroll;if(!(c>d.left-f.x&&c<d.right-f.x)||!(b>d.top-f.y&&b<d.bottom-f.y)){clearTimeout(u); -u=null;l.line.detach()}}else{clearTimeout(u);u=null;l.line.detach()}});g.attachListener(g,"keyup",function(){l.hiddenMode=0});g.attachListener(g,"keydown",function(b){if(a.mode=="wysiwyg"){b=b.data.getKeystroke();a.getSelection().getStartElement();switch(b){case 2228240:case 16:l.hiddenMode=1;l.line.detach()}}});g.attachListener(l.inInlineMode?g:k,"mousemove",function(b){w=true;if(!(a.mode!="wysiwyg"||a.readOnly||u)){var c={x:b.data.$.clientX,y:b.data.$.clientY};u=setTimeout(function(){l.mouse=c; -u=l.trigger=null;x(l);if(w&&!l.hiddenMode&&a.focusManager.hasFocus&&!l.line.mouseNear()&&(l.element=S(l,true))){if((l.trigger=o(l)||r(l)||ba(l))&&!n(l,l.trigger.upper||l.trigger.lower))l.line.attach().place();else{l.trigger=null;l.line.detach()}w=false}},30)}});g.attachListener(m,"scroll",function(){if(a.mode=="wysiwyg"){l.line.detach();if(A.webkit){l.hiddenMode=1;clearTimeout(s);s=setTimeout(function(){if(!l.mouseDown)l.hiddenMode=0},50)}}});g.attachListener(B?k:m,"mousedown",function(){if(a.mode== -"wysiwyg"){l.line.detach();l.hiddenMode=1;l.mouseDown=1}});g.attachListener(B?k:m,"mouseup",function(){l.hiddenMode=0;l.mouseDown=0});a.addCommand("accessPreviousSpace",h(l));a.addCommand("accessNextSpace",h(l,true));a.setKeystroke([[d.magicline_keystrokePrevious,"accessPreviousSpace"],[d.magicline_keystrokeNext,"accessNextSpace"]]);a.on("loadSnapshot",function(){var b,c,d,f;for(f in{p:1,br:1,div:1}){b=a.document.getElementsByTag(f);for(d=b.count();d--;)if((c=b.getItem(d)).data("cke-magicline-hot")){l.hotNode= -c;l.lastCmdDirection=c.data("cke-magicline-dir")==="true"?true:false;return}}});this.backdoor={accessFocusSpace:f,boxTrigger:e,isLine:j,getAscendantTrigger:b,getNonEmptyNeighbour:c,getSize:p,that:l,triggerEdge:r,triggerEditable:o,triggerExpand:ba}}},this)}});var t=CKEDITOR.tools.extend,y=CKEDITOR.dom.element,z=y.createFromHtml,A=CKEDITOR.env,B=CKEDITOR.env.ie&&CKEDITOR.env.version<9,G=CKEDITOR.dtd,C={},J=128,F=64,E=32,D=16,I=8,L=4,H=2,Q=1,O=" ",M=G.$listItem,K=G.$tableContent,R=t({},G.$nonEditable, -G.$empty),N=G.$block,T=100,P="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",V=P+"border-color:transparent;display:block;border-style:solid;",W="<span>"+O+"</span>";C[CKEDITOR.ENTER_BR]="br";C[CKEDITOR.ENTER_P]="p";C[CKEDITOR.ENTER_DIV]="div";e.prototype={set:function(a,b,c){this.properties=a+b+(c||Q);return this},is:function(a){return(this.properties&a)==a}};var S=function(){function a(b,c){var d=b.$.elementFromPoint(c.x, -c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,d){if(!b.mouse)return null;var f=b.doc,e=b.line.wrap,d=d||b.mouse,g=a(f,d);if(c&&j(b,g)){e.hide();g=a(f,d);e.show()}return!g||!(g.type==CKEDITOR.NODE_ELEMENT&&g.$)||A.ie&&A.version<9&&!b.boundary.equals(g)&&!b.boundary.contains(g)?null:g}}(),Y=CKEDITOR.dom.walker.whitespaces(),Z=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),ba=function(){function b(d){var f=d.element,e,h,i;if(!k(f)||f.contains(d.editable)||f.isReadOnly())return null; -i=u(d,function(a,b){return!b.equals(a)},function(a,b){return S(a,true,b)},f);e=i.upper;h=i.lower;if(a(d,e,h))return i.set(E,I);if(e&&f.contains(e))for(;!e.getParent().equals(f);)e=e.getParent();else e=f.getFirst(function(a){return c(d,a)});if(h&&f.contains(h))for(;!h.getParent().equals(f);)h=h.getParent();else h=f.getLast(function(a){return c(d,a)});if(!e||!h)return null;w(d,e);w(d,h);if(!(d.mouse.y>e.size.top&&d.mouse.y<h.size.bottom))return null;for(var f=Number.MAX_VALUE,j,l,n,r;h&&!h.equals(e);){if(!(l= -e.getNext(d.isRelevant)))break;j=Math.abs(g(d,e,l)-d.mouse.y);if(j<f){f=j;n=e;r=l}e=l;w(d,e)}if(!n||!r||!(d.mouse.y>n.size.top&&d.mouse.y<r.size.bottom))return null;i.upper=n;i.lower=r;return i.set(E,I)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||Z(b)||m(b)||j(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=b(c),f;if(f=d){f=d.upper;var e=d.lower;f=!f||!e||m(e)||m(f)||e.equals(f)||f.equals(e)||e.contains(f)||f.contains(e)?false:s(c,f)&&s(c,e)&&a(c,f,e)?true: -false}return f?d:null}}(),X=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function a(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||a.getName()!="form")return[];for(var b=[],c=["style","className"],e=0;e<c.length;e++){var g=a.$.elements.namedItem(c[e]);if(g){g=new CKEDITOR.dom.element(g);b.push([g,g.nextSibling]);g.remove()}}return b}function e(a,b){if(a&&!(a.type!= -CKEDITOR.NODE_ELEMENT||a.getName()!="form")&&b.length>0)for(var c=b.length-1;c>=0;c--){var e=b[c][0],g=b[c][1];g?e.insertBefore(g):e.appendTo(a)}}function b(b,c){var f=a(b),g={},j=b.$;if(!c){g["class"]=j.className||"";j.className=""}g.inline=j.style.cssText||"";if(!c)j.style.cssText="position: static; overflow: visible";e(f);return g}function g(b,c){var f=a(b),g=b.$;if("class"in c)g.className=c["class"];if("inline"in c)g.style.cssText=c.inline;e(f)}function c(a){if(!a.editable().isInline()){var b= -CKEDITOR.instances,c;for(c in b){var e=b[c];if(e.mode=="wysiwyg"&&!e.readOnly){e=e.document.getBody();e.setAttribute("contentEditable",false);e.setAttribute("contentEditable",true)}}if(a.editable().hasFocus){a.toolbox.focus();a.focus()}}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=j.getViewPaneSize();a.resize(b.width,b.height,null,true)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,h=CKEDITOR.document,j=h.getWindow(),k,m,q,s=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize", -{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:false,exec:function(){var n=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),l=a.ui.space("contents");if(a.mode=="wysiwyg"){var o=a.getSelection();k=o&&o.getRanges();m=j.getScrollPosition()}else{var r=a.editable().$;k=!CKEDITOR.env.ie&&[r.selectionStart,r.selectionEnd];m=[r.scrollLeft,r.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){j.on("resize",e);q=j.getScrollPosition(); -for(o=a.container;o=o.getParent();){o.setCustomData("maximize_saved_styles",b(o));o.setStyle("z-index",a.config.baseFloatZIndex-5)}l.setCustomData("maximize_saved_styles",b(l,true));n.setCustomData("maximize_saved_styles",b(n,true));l={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};h.getDocumentElement().setStyles(l);!CKEDITOR.env.gecko&&h.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&h.getBody().setStyles(l);CKEDITOR.env.ie?setTimeout(function(){j.$.scrollTo(0, -0)},0):j.$.scrollTo(0,0);n.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");n.$.offsetLeft;n.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});n.addClass("cke_maximized");e();l=n.getDocumentPosition();n.setStyles({left:-1*l.x+"px",top:-1*l.y+"px"});CKEDITOR.env.gecko&&c(a)}else if(this.state==CKEDITOR.TRISTATE_ON){j.removeListener("resize",e);l=[l,n];for(o=0;o<l.length;o++){g(l[o],l[o].getCustomData("maximize_saved_styles"));l[o].removeCustomData("maximize_saved_styles")}for(o= -a.container;o=o.getParent();){g(o,o.getCustomData("maximize_saved_styles"));o.removeCustomData("maximize_saved_styles")}CKEDITOR.env.ie?setTimeout(function(){j.$.scrollTo(q.x,q.y)},0):j.$.scrollTo(q.x,q.y);n.removeClass("cke_maximized");if(CKEDITOR.env.webkit){n.setStyle("display","inline");setTimeout(function(){n.setStyle("display","block")},0)}a.fire("resize")}this.toggleState();if(o=this.uiItems[0]){l=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize;o=CKEDITOR.document.getById(o._.id); -o.getChild(1).setHtml(l);o.setAttribute("title",l);o.setAttribute("href",'javascript:void("'+l+'");')}if(a.mode=="wysiwyg")if(k){CKEDITOR.env.gecko&&c(a);a.getSelection().selectRanges(k);(r=a.getSelection().getStartElement())&&r.scrollIntoView(true)}else j.$.scrollTo(m.x,m.y);else{if(k){r.selectionStart=k[0];r.selectionEnd=k[1]}r.scrollLeft=m[0];r.scrollTop=m[1]}k=m=null;s=this.state;a.fire("maximize",this.state)},canUndo:false});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize, -command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:s)},null,null,100)}}})}(),function(){function a(a,e,c){var d=CKEDITOR.cleanWord;if(d)c();else{a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||e+"filter/default.js");CKEDITOR.scriptLoader.load(a,c,null,true)}return!d}function e(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(b){var g= -0,c=this.path;b.addCommand("pastefromword",{canUndo:false,async:true,exec:function(a){var b=this;g=1;a.once("beforePaste",e);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste",{type:"html",dataValue:c.dataValue});a.fire("afterCommandExec",{name:"pastefromword",command:b,returnValue:!!c})})}});b.ui.addButton&&b.ui.addButton("PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.on("pasteState",function(a){b.getCommand("pastefromword").setState(a.data)}); -b.on("paste",function(d){var e=d.data,f=e.dataValue;if(f&&(g||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(f))){var h=a(b,c,function(){if(h)b.fire("paste",e);else if(!b.config.pasteFromWordPromptCleanup||g||confirm(b.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(f,b)});h&&d.cancel()}},null,null,3)}})}(),function(){var a={canUndo:false,async:true,exec:function(e){e.getClipboardData({title:e.lang.pastetext.title},function(b){b&&e.fire("paste",{type:"text",dataValue:b.dataValue}); -e.fire("afterCommandExec",{name:"pastetext",command:a,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(e){e.addCommand("pastetext",a);e.ui.addButton&&e.ui.addButton("PasteText",{label:e.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(e.config.forcePasteAsPlainText)e.on("beforePaste",function(a){if(a.data.type!="html")a.data.type="text"});e.on("pasteState",function(a){e.getCommand("pastetext").setState(a.data)})}})}(),CKEDITOR.plugins.add("removeformat", -{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var e=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),b=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")), -g=CKEDITOR.plugins.removeformat.filter,c=a.getSelection().getRanges(),d=c.createIterator(),i=function(a){return a.type==CKEDITOR.NODE_ELEMENT},f;f=d.getNextRange();){f.collapsed||f.enlarge(CKEDITOR.ENLARGE_ELEMENT);var h=f.createBookmark(),j=h.startNode,k=h.endNode,m=function(b){for(var c=a.elementPath(b),d=c.elements,f=1,h;h=d[f];f++){if(h.equals(c.block)||h.equals(c.blockLimit))break;e.test(h.getName())&&g(a,h)&&b.breakParent(h)}};m(j);if(k){m(k);for(j=j.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT);j;){if(j.equals(k))break; -if(j.isReadOnly()){if(j.getPosition(k)&CKEDITOR.POSITION_CONTAINS)break;j=j.getNext(i)}else{m=j.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);if(!(j.getName()=="img"&&j.data("cke-realelement"))&&g(a,j))if(e.test(j.getName()))j.remove(1);else{j.removeAttributes(b);a.fire("removeFormatCleanup",j)}j=m}}}f.moveToBookmark(h)}a.forceNextSelectionCheck();a.getSelection().selectRanges(c)}}},filter:function(a,e){for(var b=a._.removeFormatFilters||[],g=0;g<b.length;g++)if(b[g](e)===false)return false;return true}}, -CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){if(!this._.removeFormatFilters)this._.removeFormatFilters=[];this._.removeFormatFilters.push(a)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",CKEDITOR.plugins.add("resize",{init:function(a){var e,b,g,c,d=a.config,i=a.ui.spaceId("resizer"),f=a.element?a.element.getDirection(1): -"ltr";!d.resize_dir&&(d.resize_dir="vertical");d.resize_maxWidth==void 0&&(d.resize_maxWidth=3E3);d.resize_maxHeight==void 0&&(d.resize_maxHeight=3E3);d.resize_minWidth==void 0&&(d.resize_minWidth=750);d.resize_minHeight==void 0&&(d.resize_minHeight=250);if(d.resize_enabled!==false){var h=null,j=(d.resize_dir=="both"||d.resize_dir=="horizontal")&&d.resize_minWidth!=d.resize_maxWidth,k=(d.resize_dir=="both"||d.resize_dir=="vertical")&&d.resize_minHeight!=d.resize_maxHeight,m=function(h){var i=e,o= -b,r=i+(h.data.$.screenX-g)*(f=="rtl"?-1:1),h=o+(h.data.$.screenY-c);j&&(i=Math.max(d.resize_minWidth,Math.min(r,d.resize_maxWidth)));k&&(o=Math.max(d.resize_minHeight,Math.min(h,d.resize_maxHeight)));a.resize(j?i:null,o)},q=function(){CKEDITOR.document.removeListener("mousemove",m);CKEDITOR.document.removeListener("mouseup",q);if(a.document){a.document.removeListener("mousemove",m);a.document.removeListener("mouseup",q)}},s=CKEDITOR.tools.addFunction(function(f){h||(h=a.getResizable());e=h.$.offsetWidth|| -0;b=h.$.offsetHeight||0;g=f.screenX;c=f.screenY;d.resize_minWidth>e&&(d.resize_minWidth=e);d.resize_minHeight>b&&(d.resize_minHeight=b);CKEDITOR.document.on("mousemove",m);CKEDITOR.document.on("mouseup",q);if(a.document){a.document.on("mousemove",m);a.document.on("mouseup",q)}f.preventDefault&&f.preventDefault()});a.on("destroy",function(){CKEDITOR.tools.removeFunction(s)});a.on("uiSpace",function(b){if(b.data.space=="bottom"){var c="";j&&!k&&(c=" cke_resizer_horizontal");!j&&k&&(c=" cke_resizer_vertical"); -var d='<span id="'+i+'" class="cke_resizer'+c+" cke_resizer_"+f+'" title="'+CKEDITOR.tools.htmlEncode(a.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+s+', event)">'+(f=="ltr"?"◢":"◣")+"</span>";f=="ltr"&&c=="ltr"?b.data.html=b.data.html+d:b.data.html=d+b.data.html}},a,null,100);a.on("maximize",function(b){a.ui.space("resizer")[b.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}}),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var a=function(a){var b= -this._,g=b.menu;if(b.state!==CKEDITOR.TRISTATE_DISABLED)if(b.on&&g)g.hide();else{b.previousState=b.state;if(!g){g=b.menu=new CKEDITOR.menu(a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.common.options}}});g.onHide=CKEDITOR.tools.bind(function(){var c=this.command?a.getCommand(this.command).modes:this.modes;this.setState(!c||c[a.mode]?b.previousState:CKEDITOR.TRISTATE_DISABLED);b.on=0},this);this.onMenu&&g.addListener(this.onMenu)}this.setState(CKEDITOR.TRISTATE_ON);b.on=1;setTimeout(function(){g.show(CKEDITOR.document.getById(b.id), -4)},0)}};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(e){delete e.panel;this.base(e);this.hasArrow=true;this.click=a},statics:{handler:{create:function(a){return new CKEDITOR.ui.menuButton(a)}}}})},beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",init:function(a){var e= -this,b=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js"));this.addMenuItems(a);var g=a.lang.scayt,c=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:g.text_title,title:g.text_title,modes:{wysiwyg:!(c.ie&&(c.version<8||c.quirks))},toolbar:"spellchecker,20",refresh:function(){var c=a.ui.instances.Scayt.getState();a.scayt&&(c=b.state[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF); -a.fire("scaytButtonState",c)},onRender:function(){var b=this;a.on("scaytButtonState",function(a){typeof a.data!==void 0&&b.setState(a.data)})},onMenu:function(){var c=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[c&&b.state[a.name]?"btn_disable":"btn_enable"];c={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:c? -CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete c.scaytOptions;a.config.scayt_uiTabs[1]||delete c.scaytLangs;a.config.scayt_uiTabs[2]||delete c.scaytDict;return c}});if(a.contextMenu&&a.addMenuItems){a.contextMenu.addListener(function(){var b=a.scayt,c;if(b){var f=b.getSelectionNode();if(f=f?f.getAttribute(b.getNodeAttribute()):f){c=e.menuGenerator(a,f,e);b.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" ."))}}return c}); -a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var c=a.scayt;c&&c.hideBanner();return b.apply(this)}})}},addMenuItems:function(a){var e=this,b=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");var g=a.config.scayt_contextMenuItemsOrder.split("|");if(g&&g.length)for(var c=0;c<g.length;c++)a.addMenuGroup("scayt_"+g[c],c-10);g={scaytToggle:{label:a.lang.scayt.btn_enable,group:"scaytButton",onClick:function(){var c=a.scayt;b.state[a.name]=!b.state[a.name]; -b.state[a.name]===true?c||b.createScayt(a):c&&b.destroy(a)}},scaytAbout:{label:a.lang.scayt.btn_about,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(e.dialogName)}},scaytOptions:{label:a.lang.scayt.btn_options,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(e.dialogName)}},scaytLangs:{label:a.lang.scayt.btn_langs,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(e.dialogName)}}, -scaytDict:{label:a.lang.scayt.btn_dictionaries,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(e.dialogName)}}};if(a.plugins.wsc)g.WSC={label:a.lang.wsc.toolbar,group:"scaytButton",onClick:function(){var b=CKEDITOR.plugins.scayt,c=a.scayt,f=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();if(f=f.replace(/\s/g,"")){c&&(b.state[a.name]&&c.setMarkupPaused)&&c.setMarkupPaused(true);a.lockSelection(); -a.execCommand("checkspell")}else alert("Nothing to check!")}};a.addMenuItems(g)},bindEvents:function(a){var e=CKEDITOR.plugins.scayt,b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE;CKEDITOR.on("dialogDefinition",function(a){if(a.data.name==="scaytDialog")a.data.definition.dialog.on("cancel",function(){return false},this,null,-1)});var g=function(){a.scayt&&e.destroy(a)},c=function(){e.state[a.name]&&!a.readOnly&&e.createScayt(a)},d=function(){if(b){a.on("blur",g);a.on("focus",c);a.focusManager.hasFocus&& -c()}else c()};a.on("contentDom",d);a.on("beforeCommandExec",function(b){if(b.data.name in e.options.disablingCommandExec&&a.mode=="wysiwyg"){if(b=a.scayt){e.destroy(a);a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}}else if(b.data.name==="bold"||b.data.name==="italic"||b.data.name==="underline"||b.data.name==="strike"||b.data.name==="subscript"||b.data.name==="superscript")if(b=a.scayt){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}});a.on("beforeSetMode",function(b){if(b.data== -"source")if(b=a.scayt){e.destroy(a);a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}});a.on("afterCommandExec",function(b){var c;if(a.mode=="wysiwyg"&&(b.data.name=="undo"||b.data.name=="redo"))(c=a.scayt)&&setTimeout(function(){c.fire("startSpellCheck")},250)});a.on("readOnly",function(b){var c;if(b){c=a.scayt;if(b.editor.readOnly===true)c&&c.fire("removeMarkupInDocument",{});else if(c)c.fire("startSpellCheck");else if(b.editor.mode=="wysiwyg"&&e.state[b.editor.name]===true){e.createScayt(a); -b.editor.fire("scaytButtonState",CKEDITOR.TRISTATE_ON)}}});a.on("beforeDestroy",g);a.on("setData",function(){g();a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&d()},this,null,50);a.on("insertElement",function(){var b=a.scayt;if(b){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}},this,null,50);a.on("insertHtml",function(){var b=a.scayt;if(b){b.removeMarkupInSelectionNode();b.fire("startSpellCheck")}},this,null,50);a.on("scaytDialogShown",function(b){b.data.selectPage(a.scayt.tabToOpen)})}, -parseConfig:function(a){var e=CKEDITOR.plugins.scayt;e.replaceOldOptionsNames(a.config);if(typeof a.config.scayt_autoStartup!=="boolean")a.config.scayt_autoStartup=false;e.state[a.name]=a.config.scayt_autoStartup;if(!a.config.scayt_contextCommands)a.config.scayt_contextCommands="ignore|ignoreall|add";if(!a.config.scayt_contextMenuItemsOrder)a.config.scayt_contextMenuItemsOrder="suggest|moresuggest|control";if(!a.config.scayt_sLang)a.config.scayt_sLang="en_US";if(a.config.scayt_maxSuggestions===void 0|| -typeof a.config.scayt_maxSuggestions!="number"||a.config.scayt_maxSuggestions<0)a.config.scayt_maxSuggestions=5;if(a.config.scayt_customDictionaryIds===void 0||typeof a.config.scayt_customDictionaryIds!=="string")a.config.scayt_customDictionaryIds="";if(a.config.scayt_userDictionaryName===void 0||typeof a.config.scayt_userDictionaryName!=="string")a.config.scayt_userDictionaryName=null;if(typeof a.config.scayt_uiTabs==="string"&&a.config.scayt_uiTabs.split(",").length===3){var b=[],g=[];a.config.scayt_uiTabs= -a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){if(Number(a)===1||Number(a)===0){g.push(true);b.push(Number(a))}else g.push(false)});a.config.scayt_uiTabs=CKEDITOR.tools.search(g,false)===null?b:[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];if(typeof a.config.scayt_serviceProtocol!="string")a.config.scayt_serviceProtocol=null;if(typeof a.config.scayt_serviceHost!="string")a.config.scayt_serviceHost=null;if(typeof a.config.scayt_servicePort!="string")a.config.scayt_servicePort= -null;if(typeof a.config.scayt_servicePath!="string")a.config.scayt_servicePath=null;if(!a.config.scayt_moreSuggestions)a.config.scayt_moreSuggestions="on";if(typeof a.config.scayt_customerId!=="string")a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2";if(typeof a.config.scayt_srcUrl!=="string"){e=document.location.protocol;e=e.search(/https?:/)!=-1?e:"http:";a.config.scayt_srcUrl=e+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js"}if(typeof CKEDITOR.config.scayt_handleCheckDirty!== -"boolean")CKEDITOR.config.scayt_handleCheckDirty=true;if(typeof CKEDITOR.config.scayt_handleUndoRedo!=="boolean")CKEDITOR.config.scayt_handleUndoRedo=true},addRule:function(a){var e=a.dataProcessor,b=e&&e.htmlFilter,g=a._.elementsPath&&a._.elementsPath.filters,e=e&&e.dataFilter,c=a.addRemoveFormatFilter,d=function(b){var c=CKEDITOR.plugins.scayt;if(a.scayt&&b.hasAttribute(c.options.data_attribute_name))return false},i=function(b){var c=CKEDITOR.plugins.scayt,d=true;a.scayt&&b.hasAttribute(c.options.data_attribute_name)&& -(d=false);return d};g&&g.push(d);e&&e.addRules({elements:{span:function(b){var c=CKEDITOR.plugins.scayt;if(c&&c.state[a.name]&&b.classes&&CKEDITOR.tools.search(b.classes,c.options.misspelled_word_class))if(b.classes&&b.parent.type===CKEDITOR.NODE_DOCUMENT_FRAGMENT){delete b.attributes.style;delete b.name}else delete b.classes[CKEDITOR.tools.indexOf(b.classes,c.options.misspelled_word_class)];return b}}});b&&b.addRules({elements:{span:function(b){var c=CKEDITOR.plugins.scayt;if(c&&c.state[a.name]&& -b.hasClass(c.options.misspelled_word_class)&&b.attributes[c.options.data_attribute_name]){b.removeClass(c.options.misspelled_word_class);delete b.attributes[c.options.data_attribute_name];delete b.name}return b}}});c&&c.call(a,i)},scaytMenuDefinition:function(a){var e=this,a=a.scayt;return{scayt_ignore:{label:a.getLocal("btn_ignore"),group:"scayt_control",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal("btn_ignoreAll"),group:"scayt_control",order:2,exec:function(a){a.scayt.ignoreAllWords()}}, -scayt_add:{label:a.getLocal("btn_addWord"),group:"scayt_control",order:3,exec:function(a){var e=a.scayt;setTimeout(function(){e.addWordToUserDictionary()},10)}},option:{label:a.getLocal("btn_options"),group:"scayt_control",order:4,exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[0]==1?true:false}},language:{label:a.getLocal("btn_langs"),group:"scayt_control",order:5,exec:function(a){a.scayt.tabToOpen="langs"; -a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[1]==1?true:false}},dictionary:{label:a.getLocal("btn_dictionaries"),group:"scayt_control",order:6,exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(e.dialogName)},verification:function(a){return a.config.scayt_uiTabs[2]==1?true:false}},about:{label:a.getLocal("btn_about"),group:"scayt_control",order:7,exec:function(a){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(e.dialogName)}}}}, -buildSuggestionMenuItems:function(a,e){var b={},g={},c=a.scayt;if(e.length>0&&e[0]!=="no_any_suggestions")for(var d=0;d<e.length;d++){var i="scayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[d].replace(" ","_");a.addCommand(i,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d]));if(d<a.config.scayt_maxSuggestions){a.addMenuItem(i,{label:e[d],command:i,group:"scayt_suggest",order:d+1});b[i]=CKEDITOR.TRISTATE_OFF}else{a.addMenuItem(i,{label:e[d],command:i,group:"scayt_moresuggest",order:d+1}); -g[i]=CKEDITOR.TRISTATE_OFF;if(a.config.scayt_moreSuggestions==="on"){a.addMenuItem("scayt_moresuggest",{label:c.getLocal("btn_moreSuggestions"),group:"scayt_moresuggest",order:10,getItems:function(){return g}});b.scayt_moresuggest=CKEDITOR.TRISTATE_OFF}}}else{b.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED;a.addCommand("no_scayt_suggest",{exec:function(){}});a.addMenuItem("no_scayt_suggest",{label:c.getLocal("btn_noSuggestions")||"no_scayt_suggest",command:"no_scayt_suggest",group:"scayt_suggest",order:0})}return b}, -menuGenerator:function(a,e){var b=a.scayt,g=this.scaytMenuDefinition(a),c={},d=a.config.scayt_contextCommands.split("|");b.fire("getSuggestionsList",{lang:b.getLang(),word:e});c=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions);if(a.config.scayt_contextCommands=="off")return c;for(var i in g)if(!(CKEDITOR.tools.indexOf(d,i.replace("scayt_",""))==-1&&a.config.scayt_contextCommands!="all")){c[i]=CKEDITOR.TRISTATE_OFF;typeof g[i].verification==="function"&&!g[i].verification(a)&&delete c[i]; -a.addCommand(i,{exec:g[i].exec});a.addMenuItem(i,{label:a.lang.scayt[g[i].label]||g[i].label,command:i,group:g[i].group,order:g[i].order})}return c},createCommand:function(a){return{exec:function(e){e.scayt.replaceSelectionNode({word:a})}}}}),CKEDITOR.plugins.scayt={state:{},suggestions:[],loadingHelper:{loadOrder:[]},isLoading:!1,options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol", -scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},replaceOldOptionsNames:function(a){for(var e in a)if(e in this.backCompatibilityMap){a[this.backCompatibilityMap[e]]=a[e];delete a[e]}},createScayt:function(a){var e=this;this.loadScaytLibrary(a,function(a){var g={lang:a.config.scayt_sLang,container:a.editable().$.nodeName=="BODY"?a.document.getWindow().$.frameElement:a.editable().$,customDictionary:a.config.scayt_customDictionaryIds, -userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,data_attribute_name:e.options.data_attribute_name,misspelled_word_class:e.options.misspelled_word_class};if(a.config.scayt_serviceProtocol)g.service_protocol=a.config.scayt_serviceProtocol;if(a.config.scayt_serviceHost)g.service_host=a.config.scayt_serviceHost;if(a.config.scayt_servicePort)g.service_port=a.config.scayt_servicePort;if(a.config.scayt_servicePath)g.service_path=a.config.scayt_servicePath; -g=new SCAYT.CKSCAYT(g,function(){},function(){});g.subscribe("suggestionListSend",function(a){for(var b={},e=[],f=0;f<a.suggestionList.length;f++)if(!b[a.suggestionList[f]]){b[a.suggestionList[f]]=a.suggestionList[f];e.push(a.suggestionList[f])}CKEDITOR.plugins.scayt.suggestions=e});a.scayt=g;a.fire("scaytButtonState",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire("scaytButtonState",CKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a, -e){var b=this;if(typeof window.SCAYT==="undefined"||typeof window.SCAYT.CKSCAYT!=="function"){this.loadingHelper[a.name]=e;this.loadingHelper.loadOrder.push(a.name);CKEDITOR.scriptLoader.load(a.config.scayt_srcUrl,function(){var a;CKEDITOR.fireOnce("scaytReady");for(var c=0;c<b.loadingHelper.loadOrder.length;c++){a=b.loadingHelper.loadOrder[c];if(typeof b.loadingHelper[a]==="function")b.loadingHelper[a](CKEDITOR.instances[a]);delete b.loadingHelper[a]}b.loadingHelper.loadOrder=[]})}else if(window.SCAYT&& -typeof window.SCAYT.CKSCAYT==="function"){CKEDITOR.fireOnce("scaytReady");a.scayt||typeof e==="function"&&e(a)}}},CKEDITOR.on("scaytReady",function(){if(CKEDITOR.config.scayt_handleCheckDirty===true){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var e=null,c=this.scayt;if(!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt)e=a.call(this);else if(e=this.status=="ready")var d=c.removeMarkupFromString(this.getSnapshot()), -c=c.removeMarkupFromString(this._.previousValue),e=e&&c!==d;return e}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty,function(a){return function(){var e=this.scayt;!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt?a.call(this):this._.previousValue=e.removeMarkupFromString(this.getSnapshot())}})}if(CKEDITOR.config.scayt_handleUndoRedo===true){var a=CKEDITOR.plugins.undo.Image.prototype,e=typeof a.equalsContent=="function"?"equalsContent":"equals";a[e]=CKEDITOR.tools.override(a[e], -function(a){return function(e){var c=e.editor.scayt,d=this.contents,i=e.contents,f=null;if(CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state[e.editor.name]&&e.editor.scayt){this.contents=c.removeMarkupFromString(d)||"";e.contents=c.removeMarkupFromString(i)||""}f=a.apply(this,arguments);this.contents=d;e.contents=i;return f}})}}),function(){var a={preserveState:true,editorFocus:false,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state== -CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:[".%1 table.%2,",".%1 table.%2 > tr > td, .%1 table.%2 > tr > th,",".%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,",".%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,",".%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th", -"{","border : #d3d3d3 1px dotted","}"]).join("").replace(/%2/g,"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(e){var b=e.addCommand("showborders",a);b.canUndo=false;e.config.startupShowBorders!==false&&b.setState(CKEDITOR.TRISTATE_ON);e.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(e)},null,null,100);e.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(e)});e.on("removeFormatCleanup",function(a){a=a.data;e.getCommand("showborders").state== -CKEDITOR.TRISTATE_ON&&(a.is("table")&&(!a.hasAttribute("border")||parseInt(a.getAttribute("border"),10)<=0))&&a.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor,a=b&&b.dataFilter,b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"],d=parseInt(a.border,10);if((!d||d<=0)&&(!b||b.indexOf("cke_show_border")==-1))a["class"]=(b||"")+" cke_show_border"}}});b&&b.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"];b&&(a["class"]= -b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/,""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if(b=="table"||b=="tableProperties"){a=a.data.definition;b=a.getContents("info").get("txtBorder");b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,d){a.apply(this,arguments);var e=parseInt(this.getValue(),10);d[!e||e<=0?"addClass":"removeClass"]("cke_show_border")}});if(a=(a=a.getContents("advanced"))&&a.get("advCSSClasses")){a.setup= -CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}});a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,d){a.apply(this,arguments);parseInt(d.getAttribute("border"),10)||d.addClass("cke_show_border")}})}}})}(),function(){CKEDITOR.plugins.add("sourcearea",{init:function(e){function b(){var a=c&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+ -"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show();a&&this.focus()}if(e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var g=CKEDITOR.plugins.sourcearea;e.addMode("source",function(c){var g=e.ui.space("contents").getDocument().createElement("textarea");g.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",e.config.sourceAreaTabSize||4)));g.setAttribute("dir", -"ltr");g.addClass("cke_source cke_reset cke_enable_context_menu");e.ui.space("contents").append(g);g=e.editable(new a(e,g));g.setData(e.getData(1));if(CKEDITOR.env.ie){g.attachListener(e,"resize",b,g);g.attachListener(CKEDITOR.document.getWindow(),"resize",b,g);CKEDITOR.tools.setTimeout(b,0,g)}e.fire("ariaWidget",this);c()});e.addCommand("source",g.commands.source);e.ui.addButton&&e.ui.addButton("Source",{label:e.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});e.on("mode",function(){e.getCommand("source").setState(e.mode== -"source"?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var c=CKEDITOR.env.ie&&CKEDITOR.env.version==9}}});var a=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){a.baseProto.detach.call(this); -this.clearCustomData();this.remove()}}})}(),CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(a){a.mode=="wysiwyg"&&a.fire("saveSnapshot");a.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);a.setMode(a.mode=="source"?"wysiwyg":"source")},canUndo:!1}}},CKEDITOR.plugins.add("specialchar",{availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1, -km:1,ku:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var e=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b=e.availableLangs[b]?b:e.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar, -e.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:false});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}}),CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" "), -function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(a){var e=a.config,b=a.lang.stylescombo,g={},c=[],d=[];a.on("stylesSet",function(b){if(b=b.data.styles){for(var f,h,j,k=0,m=b.length;k<m;k++){f=b[k];if(!(a.blockless&&f.element in CKEDITOR.dtd.$block)){h=f.name;f=new CKEDITOR.style(f);if(!a.filter.customConfig||a.filter.check(f)){f._name=h;f._.enterMode=e.enterMode;f._.type=j=f.assignedTo||f.type;f._.weight=k+(j==CKEDITOR.STYLE_OBJECT?1:j==CKEDITOR.STYLE_BLOCK?2:3)*1E3; -g[h]=f;c.push(f);d.push(f)}}}c.sort(function(a,b){return a._.weight-b._.weight})}});a.ui.addRichCombo("Styles",{label:b.label,title:b.panelTitle,toolbar:"styles,10",allowedContent:d,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(e.contentsCss),multiSelect:true,attributes:{"aria-label":b.panelTitle}},init:function(){var a,d,e,g,k,m;k=0;for(m=c.length;k<m;k++){a=c[k];d=a._name;g=a._.type;if(g!=e){this.startGroup(b["panelTitle"+g]);e=g}this.add(d,a.type==CKEDITOR.STYLE_OBJECT?d:a.buildPreview(), -d)}this.commit()},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=g[b],c=a.elementPath();a[b.checkActive(c,a)?"removeStyle":"applyStyle"](b);a.fire("saveSnapshot")},onRender:function(){a.on("selectionChange",function(b){for(var c=this.getValue(),b=b.data.path.elements,d=0,e=b.length,k;d<e;d++){k=b[d];for(var m in g)if(g[m].checkElementRemovable(k,true,a)){m!=c&&this.setValue(m);return}}this.setValue("")},this)},onOpen:function(){var c=a.getSelection().getSelectedElement(),c=a.elementPath(c), -d=[0,0,0,0];this.showAll();this.unmarkAll();for(var e in g){var j=g[e],k=j._.type;j.checkApplicable(c,a,a.activeFilter)?d[k]++:this.hideItem(e);j.checkActive(c,a)&&this.mark(e)}d[CKEDITOR.STYLE_BLOCK]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_BLOCK]);d[CKEDITOR.STYLE_INLINE]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_INLINE]);d[CKEDITOR.STYLE_OBJECT]||this.hideGroup(b["panelTitle"+CKEDITOR.STYLE_OBJECT])},refresh:function(){var b=a.elementPath();if(b){for(var c in g)if(g[c].checkApplicable(b, -a,a.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){g={};c=[]}})}})}(),function(){function a(a){return{editorFocus:false,canUndo:false,modes:{wysiwyg:1},exec:function(b){if(b.editable().hasFocus){var e=b.getSelection(),f;if(f=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=b.createRange(),g=CKEDITOR.tools.tryThese(function(){var b=f.getParent().$.cells[f.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b= -f.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(!g&&!a){for(var j=f.getAscendant("table").$,g=f.getParent().$.cells,j=new CKEDITOR.dom.element(j.insertRow(-1),b.document),k=0,m=g.length;k<m;k++)j.append((new CKEDITOR.dom.element(g[k],b.document)).clone(false,false)).appendBogus();e.moveToElementEditStart(j)}else if(g){g=new CKEDITOR.dom.element(g);e.moveToElementEditStart(g);(!e.checkStartOfBlock()||!e.checkEndOfBlock())&&e.selectNodeContents(g)}else return true; -e.select(true);return true}}return false}}}var e={editorFocus:false,modes:{wysiwyg:1,source:1}},b={exec:function(a){a.container.focusNext(true,a.tabIndex)}},g={exec:function(a){a.container.focusPrevious(true,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=c.config.enableTabKeyTools!==false,i=c.config.tabSpaces||0,f="";i--;)f=f+" ";if(f)c.on("key",function(a){if(a.data.keyCode==9){c.insertHtml(f);a.cancel()}});if(d)c.on("key",function(a){(a.data.keyCode==9&&c.execCommand("selectNextCell")|| -a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});c.addCommand("blur",CKEDITOR.tools.extend(b,e));c.addCommand("blurBack",CKEDITOR.tools.extend(g,e));c.addCommand("selectNextCell",a());c.addCommand("selectPreviousCell",a(true))}})}(),CKEDITOR.dom.element.prototype.focusNext=function(a,e){var b=e===void 0?this.getTabIndex():e,g,c,d,i,f,h;if(b<=0)for(f=this.getNextSourceNode(a,CKEDITOR.NODE_ELEMENT);f;){if(f.isVisible()&&f.getTabIndex()===0){d=f;break}f=f.getNextSourceNode(false, -CKEDITOR.NODE_ELEMENT)}else for(f=this.getDocument().getBody().getFirst();f=f.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);){if(!g)if(!c&&f.equals(this)){c=true;if(a){if(!(f=f.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;g=1}}else c&&!this.contains(f)&&(g=1);if(f.isVisible()&&!((h=f.getTabIndex())<0)){if(g&&h==b){d=f;break}if(h>b&&(!d||!i||h<i)){d=f;i=h}else if(!d&&h===0){d=f;i=h}}}d&&d.focus()},CKEDITOR.dom.element.prototype.focusPrevious=function(a,e){for(var b=e===void 0?this.getTabIndex(): -e,g,c,d,i=0,f,h=this.getDocument().getBody().getLast();h=h.getPreviousSourceNode(false,CKEDITOR.NODE_ELEMENT);){if(!g)if(!c&&h.equals(this)){c=true;if(a){if(!(h=h.getPreviousSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;g=1}}else c&&!this.contains(h)&&(g=1);if(h.isVisible()&&!((f=h.getTabIndex())<0))if(b<=0){if(g&&f===0){d=h;break}if(f>i){d=h;i=f}}else{if(g&&f==b){d=h;break}if(f<b&&(!d||f>i)){d=h;i=f}}}d&&d.focus()},CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(a){return CKEDITOR.tools.extend(a|| -{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var b=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab?"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle", -"table[width]: sizeToAttribute"]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(a){var b=a.elementPath().contains("table",1);if(b){var d=b.getParent(),e=a.editable();d.getChildCount()==1&&(!d.is("td","th")&&!d.equals(e))&&(b=d);a=a.createRange();a.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);b.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:b.toolbar,command:"table",toolbar:"insert,30"}); -CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:b.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:b.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){if(a.data.element.is("table"))a.data.dialog="tableProperties"});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}), -function(){function a(a){function b(a){if(!(c.length>0)&&a.type==CKEDITOR.NODE_ELEMENT&&q.test(a.getName())&&!a.getCustomData("selected_cell")){CKEDITOR.dom.element.setMarker(d,a,"selected_cell",true);c.push(a)}}for(var a=a.getRanges(),c=[],d={},f=0;f<a.length;f++){var e=a[f];if(e.collapsed){e=e.getCommonAncestor();(e=e.getAscendant("td",true)||e.getAscendant("th",true))&&c.push(e)}else{var e=new CKEDITOR.dom.walker(e),g;for(e.guard=b;g=e.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g= -g.getAscendant("td",true)||g.getAscendant("th",true))&&!g.getCustomData("selected_cell")){CKEDITOR.dom.element.setMarker(d,g,"selected_cell",true);c.push(g)}}}CKEDITOR.dom.element.clearAllMarkers(d);return c}function e(b,c){for(var d=a(b),f=d[0],e=f.getAscendant("table"),f=f.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],i=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(e.$.rows[i]),h=c?h:i,g=c?g:d,d=CKEDITOR.tools.buildTableMap(e),e=d[h],h=c?d[h-1]:d[h+1],d=d[0].length, -f=f.createElement("tr"),i=0;e[i]&&i<d;i++){var j;if(e[i].rowSpan>1&&h&&e[i]==h[i]){j=e[i];j.rowSpan=j.rowSpan+1}else{j=(new CKEDITOR.dom.element(e[i])).clone();j.removeAttribute("rowSpan");j.appendBogus();f.append(j);j=j.$}i=i+(j.colSpan-1)}c?f.insertBefore(g):f.insertAfter(g)}function b(c){if(c instanceof CKEDITOR.dom.selection){for(var d=a(c),f=d[0].getAscendant("table"),e=CKEDITOR.tools.buildTableMap(f),c=d[0].getParent().$.rowIndex,d=d[d.length-1],g=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[], -h=c;h<=g;h++){for(var i=e[h],j=new CKEDITOR.dom.element(f.$.rows[h]),k=0;k<i.length;k++){var m=new CKEDITOR.dom.element(i[k]),q=m.getParent().$.rowIndex;if(m.$.rowSpan==1)m.remove();else{m.$.rowSpan=m.$.rowSpan-1;if(q==h){q=e[h+1];q[k-1]?m.insertAfter(new CKEDITOR.dom.element(q[k-1])):(new CKEDITOR.dom.element(f.$.rows[h+1])).append(m,1)}}k=k+(m.$.colSpan-1)}d.push(j)}e=f.$.rows;f=new CKEDITOR.dom.element(e[g+1]||(c>0?e[c-1]:null)||f.$.parentNode);for(h=d.length;h>=0;h--)b(d[h]);return f}if(c instanceof -CKEDITOR.dom.element){f=c.getAscendant("table");f.$.rows.length==1?f.remove():c.remove()}return null}function g(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var f;f=a[d];for(var e=b,g=f.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(e?1:j.colSpan);if(j==f.$)break}f=h-1;if(b?f<c:f>c)c=f}return c}function c(b,c){for(var d=a(b),f=d[0].getAscendant("table"),e=g(d,1),d=g(d),e=c?e:d,h=CKEDITOR.tools.buildTableMap(f),f=[],d=[],i=h.length,j=0;j<i;j++){f.push(h[j][e]);d.push(c?h[j][e-1]:h[j][e+ -1])}for(j=0;j<i;j++)if(f[j]){if(f[j].colSpan>1&&d[j]==f[j]){e=f[j];e.colSpan=e.colSpan+1}else{e=(new CKEDITOR.dom.element(f[j])).clone();e.removeAttribute("colSpan");e.appendBogus();e[c?"insertBefore":"insertAfter"].call(e,new CKEDITOR.dom.element(f[j]));e=e.$}j=j+(e.rowSpan-1)}}function d(a,b){var c=a.getStartElement();if(c=c.getAscendant("td",1)||c.getAscendant("th",1)){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function i(b){if(b instanceof CKEDITOR.dom.selection){var b= -a(b),c=b[0]&&b[0].getAscendant("table"),d;a:{var e=0;d=b.length-1;for(var g={},h,j;h=b[e++];)CKEDITOR.dom.element.setMarker(g,h,"delete_cell",true);for(e=0;h=b[e++];)if((j=h.getPrevious())&&!j.getCustomData("delete_cell")||(j=h.getNext())&&!j.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(g);d=j;break a}CKEDITOR.dom.element.clearAllMarkers(g);j=b[0].getParent();if(j=j.getPrevious())d=j.getLast();else{j=b[d].getParent();d=(j=j.getNext())?j.getChild(0):null}}for(j=b.length-1;j>= -0;j--)i(b[j]);d?f(d,true):c&&c.remove()}else if(b instanceof CKEDITOR.dom.element){c=b.getParent();c.getChildCount()==1?c.remove():b.remove()}}function f(a,b){var c=a.getDocument(),d=CKEDITOR.document;if(CKEDITOR.env.ie&&CKEDITOR.env.version==10){d.focus();c.focus()}c=new CKEDITOR.dom.range(c);if(!c["moveToElementEdit"+(b?"End":"Start")](a)){c.selectNodeContents(a);c.collapse(b?false:true)}c.select(true)}function h(a,b,c){a=a[b];if(typeof c=="undefined")return a;for(b=0;a&&b<a.length;b++){if(c.is&& -a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function j(b,c,d){var f=a(b),e;if((c?f.length!=1:f.length<2)||(e=b.getCommonAncestor())&&e.type==CKEDITOR.NODE_ELEMENT&&e.is("table"))return false;var g,b=f[0];e=b.getAscendant("table");var i=CKEDITOR.tools.buildTableMap(e),j=i.length,k=i[0].length,m=b.getParent().$.rowIndex,q=h(i,m,b);if(c){var y;try{var z=parseInt(b.getAttribute("rowspan"),10)||1;g=parseInt(b.getAttribute("colspan"),10)||1;y=i[c=="up"?m-z:c=="down"? -m+z:m][c=="left"?q-g:c=="right"?q+g:q]}catch(A){return false}if(!y||b.$==y)return false;f[c=="up"||c=="left"?"unshift":"push"](new CKEDITOR.dom.element(y))}for(var c=b.getDocument(),B=m,z=y=0,G=!d&&new CKEDITOR.dom.documentFragment(c),C=0,c=0;c<f.length;c++){g=f[c];var J=g.getParent(),F=g.getFirst(),E=g.$.colSpan,D=g.$.rowSpan,J=J.$.rowIndex,I=h(i,J,g),C=C+E*D,z=Math.max(z,I-q+E);y=Math.max(y,J-m+D);if(!d){E=g;(D=E.getBogus())&&D.remove();E.trim();if(g.getChildren().count()){if(J!=B&&F&&(!F.isBlockBoundary|| -!F.isBlockBoundary({br:1})))(B=G.getLast(CKEDITOR.dom.walker.whitespaces(true)))&&(!B.is||!B.is("br"))&&G.append("br");g.moveChildren(G)}c?g.remove():g.setHtml("")}B=J}if(d)return y*z==C;G.moveChildren(b);b.appendBogus();z>=k?b.removeAttribute("rowSpan"):b.$.rowSpan=y;y>=j?b.removeAttribute("colSpan"):b.$.colSpan=z;d=new CKEDITOR.dom.nodeList(e.$.rows);f=d.count();for(c=f-1;c>=0;c--){e=d.getItem(c);if(!e.$.cells.length){e.remove();f++}}return b}function k(b,c){var d=a(b);if(d.length>1)return false; -if(c)return true;var d=d[0],f=d.getParent(),e=f.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(e),i=f.$.rowIndex,j=h(g,i,d),k=d.$.rowSpan,m;if(k>1){m=Math.ceil(k/2);for(var k=Math.floor(k/2),f=i+m,e=new CKEDITOR.dom.element(e.$.rows[f]),g=h(g,f),q,f=d.clone(),i=0;i<g.length;i++){q=g[i];if(q.parentNode==e.$&&i>j){f.insertBefore(new CKEDITOR.dom.element(q));break}else q=null}q||e.append(f)}else{k=m=1;e=f.clone();e.insertAfter(f);e.append(f=d.clone());q=h(g,i);for(j=0;j<q.length;j++)q[j].rowSpan++}f.appendBogus(); -d.$.rowSpan=m;f.$.rowSpan=k;m==1&&d.removeAttribute("rowSpan");k==1&&f.removeAttribute("rowSpan");return f}function m(b,c){var d=a(b);if(d.length>1)return false;if(c)return true;var d=d[0],f=d.getParent(),e=f.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(e),g=h(e,f.$.rowIndex,d),i=d.$.colSpan;if(i>1){f=Math.ceil(i/2);i=Math.floor(i/2)}else{for(var i=f=1,j=[],k=0;k<e.length;k++){var m=e[k];j.push(m[g]);m[g].rowSpan>1&&(k=k+(m[g].rowSpan-1))}for(e=0;e<j.length;e++)j[e].colSpan++}e=d.clone(); -e.insertAfter(d);e.appendBogus();d.$.colSpan=f;e.$.colSpan=i;f==1&&d.removeAttribute("colSpan");i==1&&e.removeAttribute("colSpan");return e}var q=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(g){function h(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function l(a,b){var c=g.addCommand(a,b);g.addFeature(c)}var o=g.lang.table; -l("cellProperties",new CKEDITOR.dialogCommand("cellProperties",h({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:"table"})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");l("rowDelete",h({requiredContent:"table",exec:function(a){a=a.getSelection();f(b(a))}}));l("rowInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();e(a,true)}}));l("rowInsertAfter",h({requiredContent:"table", -exec:function(a){a=a.getSelection();e(a)}}));l("columnDelete",h({requiredContent:"table",exec:function(b){for(var b=b.getSelection(),b=a(b),c=b[0],d=b[b.length-1],b=c.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(b),g,h,i=[],j=0,k=e.length;j<k;j++)for(var m=0,n=e[j].length;m<n;m++){e[j][m]==c.$&&(g=m);e[j][m]==d.$&&(h=m)}for(j=g;j<=h;j++)for(m=0;m<e.length;m++){d=e[m];c=new CKEDITOR.dom.element(b.$.rows[m]);d=new CKEDITOR.dom.element(d[j]);if(d.$){d.$.colSpan==1?d.remove():d.$.colSpan=d.$.colSpan- -1;m=m+(d.$.rowSpan-1);c.$.cells.length||i.push(c)}}h=b.$.rows[0]&&b.$.rows[0].cells;g=new CKEDITOR.dom.element(h[g]||(g?h[g-1]:b.$.parentNode));i.length==k&&b.remove();g&&f(g,true)}}));l("columnInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();c(a,true)}}));l("columnInsertAfter",h({requiredContent:"table",exec:function(a){a=a.getSelection();c(a)}}));l("cellDelete",h({requiredContent:"table",exec:function(a){a=a.getSelection();i(a)}}));l("cellMerge",h({allowedContent:"td[colspan,rowspan]", -requiredContent:"td[colspan,rowspan]",exec:function(a){f(j(a.getSelection()),true)}}));l("cellMergeRight",h({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){f(j(a.getSelection(),"right"),true)}}));l("cellMergeDown",h({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){f(j(a.getSelection(),"down"),true)}}));l("cellVerticalSplit",h({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){f(k(a.getSelection()))}}));l("cellHorizontalSplit", -h({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){f(m(a.getSelection()))}}));l("cellInsertBefore",h({requiredContent:"table",exec:function(a){a=a.getSelection();d(a,true)}}));l("cellInsertAfter",h({requiredContent:"table",exec:function(a){a=a.getSelection();d(a)}}));g.addMenuItems&&g.addMenuItems({tablecell:{label:o.cell.menu,group:"tablecell",order:1,getItems:function(){var b=g.getSelection(),c=a(b);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF, -tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:j(b,null,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:j(b,"right",true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:j(b,"down",true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:k(b,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:m(b,true)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:c.length>0?CKEDITOR.TRISTATE_OFF: -CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:o.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:o.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:o.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:o.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:o.cell.mergeRight,group:"tablecell",command:"cellMergeRight", -order:17},tablecell_merge_down:{label:o.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:o.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:o.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:o.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:o.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF, -tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:o.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:o.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:o.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:o.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF, -tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:o.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:o.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:o.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});g.contextMenu&&g.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1}, -1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:a};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(a){for(var a=a.$.rows,e=-1,b=[],g=0;g<a.length;g++){e++;!b[e]&&(b[e]=[]);for(var c=-1,d=0;d<a[g].cells.length;d++){var i=a[g].cells[d];for(c++;b[e][c];)c++;for(var f=isNaN(i.colSpan)?1:i.colSpan,i=isNaN(i.rowSpan)?1:i.rowSpan,h=0;h<i;h++){b[e+h]||(b[e+ -h]=[]);for(var j=0;j<f;j++)b[e+h][c+j]=a[g].cells[d]}c=c+(f-1)}}return b},function(){function a(a){function b(){for(var d=g(),h=CKEDITOR.tools.clone(a.config.toolbarGroups)||e(a),j=0;j<h.length;j++){var k=h[j];if(k!="/"){typeof k=="string"&&(k=h[j]={name:k});var l,o=k.groups;if(o)for(var r=0;r<o.length;r++){l=o[r];(l=d[l])&&f(k,l)}(l=d[k.name])&&f(k,l)}}return h}function g(){var b={},d,f,e;for(d in a.ui.items){f=a.ui.items[d];e=f.toolbar||"others";e=e.split(",");f=e[0];e=parseInt(e[1]||-1,10);b[f]|| -(b[f]=[]);b[f].push({name:d,order:e})}for(f in b)b[f]=b[f].sort(function(a,b){return a.order==b.order?0:b.order<0?-1:a.order<0?1:a.order<b.order?-1:1});return b}function f(b,d){if(d.length){b.items?b.items.push(a.ui.create("-")):b.items=[];for(var f;f=d.shift();){f=typeof f=="string"?f:f.name;if(!j||CKEDITOR.tools.indexOf(j,f)==-1)(f=a.ui.create(f))&&a.addFeature(f)&&b.items.push(f)}}}function h(a){var b=[],c,d,e;for(c=0;c<a.length;++c){d=a[c];e={};if(d=="/")b.push(d);else if(CKEDITOR.tools.isArray(d)){f(e, -CKEDITOR.tools.clone(d));b.push(e)}else if(d.items){f(e,CKEDITOR.tools.clone(d.items));e.name=d.name;b.push(e)}}return b}var j=a.config.removeButtons,j=j&&j.split(","),k=a.config.toolbar;typeof k=="string"&&(k=a.config["toolbar_"+k]);return a.toolbar=k?h(k):b()}function e(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/", -{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var b=function(){this.toolbars=[];this.focusCommandExecuted=false};b.prototype.focus=function(){for(var a=0,b;b=this.toolbars[a++];)for(var e=0,f;f=b.items[e++];)if(f.focus){f.focus();return}};var g={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){if(a.toolbox){a.toolbox.focusCommandExecuted= -true;CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus()}}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(c){var d,e=function(a,b){var g,k=c.lang.dir=="rtl",m=c.config.toolbarGroupCycling,q=k?37:39,k=k?39:37,m=m===void 0||m;switch(b){case 9:case CKEDITOR.SHIFT+9:for(;!g||!g.items.length;){g=b==9?(g?g.next:a.toolbar.next)||c.toolbox.toolbars[0]:(g?g.previous:a.toolbar.previous)||c.toolbox.toolbars[c.toolbox.toolbars.length-1];if(g.items.length)for(a= -g.items[d?g.items.length-1:0];a&&!a.focus;)(a=d?a.previous:a.next)||(g=0)}a&&a.focus();return false;case q:g=a;do{g=g.next;!g&&m&&(g=a.toolbar.items[0])}while(g&&!g.focus);g?g.focus():e(a,9);return false;case 40:if(a.button&&a.button.hasArrow){c.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});a.execute()}else e(a,b==40?q:k);return false;case k:case 38:g=a;do{g=g.previous;!g&&m&&(g=a.toolbar.items[a.toolbar.items.length-1])}while(g&&!g.focus);if(g)g.focus();else{d=1;e(a, -CKEDITOR.SHIFT+9);d=0}return false;case 27:c.focus();return false;case 13:case 32:a.execute();return false}return true};c.on("uiSpace",function(d){if(d.data.space==c.config.toolbarLocation){d.removeListener();c.toolbox=new b;var g=CKEDITOR.tools.getNextId(),j=['<span id="',g,'" class="cke_voice_label">',c.lang.toolbar.toolbars,"</span>",'<span id="'+c.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',g,'" onmousedown="return false;">'],g=c.config.toolbarStartupExpanded!== -false,k,m;c.config.toolbarCanCollapse&&c.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&j.push('<span class="cke_toolbox_main"'+(g?">":' style="display:none">'));for(var q=c.toolbox.toolbars,s=a(c),n=0;n<s.length;n++){var l,o=0,r,p=s[n],w;if(p){if(k){j.push("</span>");m=k=0}if(p==="/")j.push('<span class="cke_toolbar_break"></span>');else{w=p.items||p;for(var v=0;v<w.length;v++){var x=w[v],u;if(x)if(x.type==CKEDITOR.UI_SEPARATOR)m=k&&x;else{u=x.canGroup!==false;if(!o){l=CKEDITOR.tools.getNextId();o={id:l, -items:[]};r=p.name&&(c.lang.toolbar.toolbarGroups[p.name]||p.name);j.push('<span id="',l,'" class="cke_toolbar"',r?' aria-labelledby="'+l+'_label"':"",' role="toolbar">');r&&j.push('<span id="',l,'_label" class="cke_voice_label">',r,"</span>");j.push('<span class="cke_toolbar_start"></span>');var t=q.push(o)-1;if(t>0){o.previous=q[t-1];o.previous.next=o}}if(u){if(!k){j.push('<span class="cke_toolgroup" role="presentation">');k=1}}else if(k){j.push("</span>");k=0}l=function(a){a=a.render(c,j);t=o.items.push(a)- -1;if(t>0){a.previous=o.items[t-1];a.previous.next=a}a.toolbar=o;a.onkey=e;a.onfocus=function(){c.toolbox.focusCommandExecuted||c.focus()}};if(m){l(m);m=0}l(x)}}if(k){j.push("</span>");m=k=0}o&&j.push('<span class="cke_toolbar_end"></span></span>')}}}c.config.toolbarCanCollapse&&j.push("</span>");if(c.config.toolbarCanCollapse&&c.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var y=CKEDITOR.tools.addFunction(function(){c.execCommand("toolbarCollapse")});c.on("destroy",function(){CKEDITOR.tools.removeFunction(y)}); -c.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),c=b.getPrevious(),d=a.ui.space("contents"),f=c.getParent(),e=parseInt(d.$.style.height,10),g=f.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");if(h){c.show();b.removeClass("cke_toolbox_collapser_min");b.setAttribute("title",a.lang.toolbar.toolbarCollapse)}else{c.hide();b.addClass("cke_toolbox_collapser_min");b.setAttribute("title",a.lang.toolbar.toolbarExpand)}b.getFirst().setText(h?"▲":"◀"); -d.setStyle("height",e-(f.$.offsetHeight-g)+"px");a.fire("resize")},modes:{wysiwyg:1,source:1}});c.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");j.push('<a title="'+(g?c.lang.toolbar.toolbarCollapse:c.lang.toolbar.toolbarExpand)+'" id="'+c.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');g||j.push(" cke_toolbox_collapser_min");j.push('" onclick="CKEDITOR.tools.callFunction('+y+')">','<span class="cke_arrow">&#9650;</span>', -"</a>")}j.push("</span>");d.data.html=d.data.html+j.join("")}});c.on("destroy",function(){if(this.toolbox){var a,b=0,c,d,e;for(a=this.toolbox.toolbars;b<a.length;b++){d=a[b].items;for(c=0;c<d.length;c++){e=d[c];e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn);e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}}}});c.on("uiReady",function(){var a=c.ui.space("toolbox");a&&c.focusManager.add(a,1)});c.addCommand("toolbarFocus",g);c.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");c.ui.add("-",CKEDITOR.UI_SEPARATOR, -{});c.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,b){b.push('<span class="cke_toolbar_separator" role="separator"></span>');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,g){var f=e(this.editor),h=b===0,j={name:a};if(g){if(g=CKEDITOR.tools.search(f,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(b){b=CKEDITOR.tools.indexOf(g.groups,b);if(b>=0){g.groups.splice(b+1,0,a);return}}h?g.groups.splice(0,0,a):g.groups.push(a);return}b=null}b&& -(b=CKEDITOR.tools.indexOf(f,function(a){return a.name==b}));h?f.splice(0,0,a):typeof b=="number"?f.splice(b+1,0,j):f.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){var a=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],e={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(c){function e(a){i.enabled&&a.data.command.canUndo!==false&&i.save()}function g(){i.enabled=c.readOnly?false:c.mode=="wysiwyg";i.onChange()}var i= -c.undoManager=new b(c),m=i.editingHandler=new d(i),q=c.addCommand("undo",{exec:function(){if(i.undo()){c.selectionChange();this.fire("afterUndo")}},startDisabled:true,canUndo:false}),s=c.addCommand("redo",{exec:function(){if(i.redo()){c.selectionChange();this.fire("afterRedo")}},startDisabled:true,canUndo:false});c.setKeystroke([[a[0],"undo"],[a[1],"redo"],[a[2],"redo"]]);i.onChange=function(){q.setState(i.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);s.setState(i.redoable()?CKEDITOR.TRISTATE_OFF: -CKEDITOR.TRISTATE_DISABLED)};c.on("beforeCommandExec",e);c.on("afterCommandExec",e);c.on("saveSnapshot",function(a){i.save(a.data&&a.data.contentOnly)});c.on("contentDom",m.attachListeners,m);c.on("instanceReady",function(){c.fire("saveSnapshot")});c.on("beforeModeUnload",function(){c.mode=="wysiwyg"&&i.save(true)});c.on("mode",g);c.on("readOnly",g);if(c.ui.addButton){c.ui.addButton("Undo",{label:c.lang.undo.undo,command:"undo",toolbar:"undo,10"});c.ui.addButton("Redo",{label:c.lang.undo.redo,command:"redo", -toolbar:"undo,20"})}c.resetUndo=function(){i.reset();c.fire("saveSnapshot")};c.on("updateSnapshot",function(){i.currentImage&&i.update()});c.on("lockSnapshot",function(a){a=a.data;i.lock(a&&a.dontUpdate,a&&a.forceUpdate)});c.on("unlockSnapshot",i.unlock,i)}});CKEDITOR.plugins.undo={};var b=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};b.prototype= -{type:function(a,c){var d=b.getKeyGroup(a),e=this.strokesRecorded[d]+1,c=c||e>=this.strokesLimit;if(!this.typing){this.hasUndo=this.typing=true;this.hasRedo=false;this.onChange()}if(c){e=0;this.editor.fire("saveSnapshot")}else this.editor.fire("change");this.strokesRecorded[d]=e;this.previousKeyGroup=d},keyGroupChanged:function(a){return b.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=false;this.locked=null; -this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=false;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(true);this.hasRedo=!!this.getNextImage(false);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked||d.status!="ready"||d.mode!="wysiwyg")return false;var e=d.editable();if(!e||e.status!="ready")return false;e=this.snapshots;b||(b=new g(d));if(b.contents===false)return false;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a|| -b.equalsSelection(this.currentImage))return false}else c!==false&&d.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;c!==false&&this.refreshState();return true},restoreImage:function(a){var b=this.editor,c;if(a.bookmarks){b.focus();c=b.getSelection()}this.locked={level:999};this.editor.loadSnapshot(a.contents);if(a.bookmarks)c.selectBookmarks(a.bookmarks);else if(CKEDITOR.env.ie){c=this.editor.document.getBody().$.createTextRange(); -c.collapse(true);c.select()}this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;d>=0;d--){a=b[d];if(!c.equalsContent(a)){a.index=d;return a}}else for(d=this.index+1;d<b.length;d++){a=b[d];if(!c.equalsContent(a)){a.index=d;return a}}return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&& -this.hasUndo},undo:function(){if(this.undoable()){this.save(true);var a=this.getNextImage(true);if(a)return this.restoreImage(a),true}return false},redo:function(){if(this.redoable()){this.save(true);if(this.redoable()){var a=this.getNextImage(false);if(a)return this.restoreImage(a),true}}return false},update:function(a){if(!this.locked){a||(a=new g(this.editor));for(var b=this.index,c=this.snapshots;b>0&&this.currentImage.equalsContent(c[b-1]);)b=b-1;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage= -a}},updateSelection:function(a){if(!this.snapshots.length)return false;var b=this.snapshots,c=b[b.length-1];if(c.equalsContent(a)&&!c.equalsSelection(a)){this.currentImage=b[b.length-1]=a;return true}return false},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=true;else{var d=new g(this.editor,true);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a= -this.locked.update;this.locked=null;if(a===true)this.update();else if(a){var b=new g(this.editor,true);a.equalsContent(b)||this.update()}}}};b.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};b.keyGroups={PRINTABLE:0,FUNCTIONAL:1};b.isNavigationKey=function(a){return!!b.navigationKeyCodes[a]};b.getKeyGroup=function(a){var c=b.keyGroups;return e[a]?c.FUNCTIONAL:c.PRINTABLE};b.getOppositeKeyGroup=function(a){var c=b.keyGroups;return a==c.FUNCTIONAL?c.PRINTABLE:c.FUNCTIONAL};b.ieFunctionalKeysBug= -function(a){return CKEDITOR.env.ie&&b.getKeyGroup(a)==b.keyGroups.FUNCTIONAL};var g=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;if(!b)this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(true);a.fire("afterUndoImage")},c=/\b(?:href|src|name)="[^"]*?"/gi;g.prototype={equalsContent:function(a){var b=this.contents,a=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.quirks)){b=b.replace(c,"");a=a.replace(c,"")}return b!=a?false:true},equalsSelection:function(a){var b=this.bookmarks,a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return false;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end,e.end))return false}}return true}};var d=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent= -false;this.keyEventsStack=new i;this.lastKeydownImage=null};d.prototype={onKeydown:function(c){if(CKEDITOR.tools.indexOf(a,c.data.getKeystroke())>-1)c.data.preventDefault();else{this.keyEventsStack.cleanUp(c);var c=c.data.getKey(),d=this.undoManager;this.keyEventsStack.getLast(c)||this.keyEventsStack.push(c);this.lastKeydownImage=new g(d.editor);if(b.isNavigationKey(c)||this.undoManager.keyGroupChanged(c))if(d.strokesRecorded[0]||d.strokesRecorded[1]){d.save(false,this.lastKeydownImage);d.resetType()}}}, -onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=false;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);if(this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit){this.undoManager.type(a.keyCode,true);this.keyEventsStack.resetInputs()}}},onKeyup:function(a){var c=this.undoManager,a=a.data.getKey(),d=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!b.ieFunctionalKeysBug(a)||!this.lastKeydownImage|| -!this.lastKeydownImage.equalsContent(new g(c.editor,true)))if(d>0)c.type(a);else if(b.isNavigationKey(a))this.onNavigationKey(true)},onNavigationKey:function(a){var b=this.undoManager;(a||!b.save(true,null,false))&&b.updateSelection(new g(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=true},attachListeners:function(){var a=this.undoManager.editor,c=a.editable(),d=this;c.attachListener(c,"keydown",function(a){d.onKeydown(a);if(b.ieFunctionalKeysBug(a.data.getKey()))d.onInput()}, -null,null,999);c.attachListener(c,CKEDITOR.env.ie?"keypress":"input",d.onInput,d,null,999);c.attachListener(c,"keyup",d.onKeyup,d,null,999);c.attachListener(c,"paste",d.ignoreInputEventListener,d,null,999);c.attachListener(c,"drop",d.ignoreInputEventListener,d,null,999);c.attachListener(c.isInline()?c:a.document.getDocumentElement(),"click",function(){d.onNavigationKey()},null,null,999);c.attachListener(this.undoManager.editor,"blur",function(){d.keyEventsStack.remove(9)},null,null,999)}};var i=CKEDITOR.plugins.undo.KeyEventsStack= -function(){this.stack=[]};i.prototype={push:function(a){return this.stack[this.stack.push({keyCode:a,inputs:0})-1]},getLastIndex:function(a){if(typeof a!="number")return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return a!=-1?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);a!=-1&&this.stack.splice(a,1)},resetInputs:function(a){if(typeof a== -"number")this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b=b+this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;!a.ctrlKey&&!a.metaKey&&this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}}(),CKEDITOR.config.wsc_removeGlobalVariable=!0,CKEDITOR.plugins.add("wsc",{requires:"dialog",parseApi:function(a){a.config.wsc_onFinish=typeof a.config.wsc_onFinish==="function"?a.config.wsc_onFinish: -function(){};a.config.wsc_onClose=typeof a.config.wsc_onClose==="function"?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds||CKEDITOR.config.wsc_customDictionaryIds||"";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName|| -"";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||"spell";CKEDITOR.config.wsc_version=CKEDITOR.version+" | %Rev%"},init:function(a){var e=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes={wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(e.ie&&(e.version<8||e.quirks))}; -typeof a.plugins.scayt=="undefined"&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,click:function(a){var e=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(e=e.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&CKEDITOR.env.version<=7?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}}), -function(){function a(a){var b=this.editor,g=a.document,f=g.body,h=g.getElementById("cke_actscrpt");h&&h.parentNode.removeChild(h);(h=g.getElementById("cke_shimscrpt"))&&h.parentNode.removeChild(h);(h=g.getElementById("cke_basetagscrpt"))&&h.parentNode.removeChild(h);if(CKEDITOR.env.gecko){f.contentEditable=false;if(CKEDITOR.env.version<2E4){f.innerHTML=f.innerHTML.replace(/^.*<\!-- cke-content-start --\>/,"");setTimeout(function(){var a=new CKEDITOR.dom.range(new CKEDITOR.dom.document(g));a.setStart(new CKEDITOR.dom.node(f), -0);b.getSelection().selectRanges([a])},0)}}f.contentEditable=true;if(CKEDITOR.env.ie){f.hideFocus=true;f.disabled=true;f.removeAttribute("disabled")}delete this._.isLoadingData;this.$=f;g=new CKEDITOR.dom.document(g);this.setup();if(CKEDITOR.env.ie){g.getDocumentElement().addClass(g.$.compatMode);b.config.enterMode!=CKEDITOR.ENTER_P&&this.attachListener(g,"selectionchange",function(){var a=g.getBody(),c=b.getSelection(),e=c&&c.getRanges()[0];e&&(a.getHtml().match(/^<p>(?:&nbsp;|<br>)<\/p>$/i)&&e.startContainer.equals(a))&& -setTimeout(function(){e=b.getSelection().getRanges()[0];if(!e.startContainer.equals("body")){a.getFirst().remove(1);e.moveToElementEditEnd(a);e.select()}},0)})}if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&CKEDITOR.env.version>10)g.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){b.editable().focus()})});e(b);try{b.document.$.execCommand("2D-position",false,true)}catch(j){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&b.document.$.compatMode=="CSS1Compat")&& -this.attachListener(this,"keydown",function(a){var c=a.data.getKeystroke();if(c==33||c==34)if(CKEDITOR.env.ie)setTimeout(function(){b.getSelection().scrollIntoView()},0);else if(b.window.$.innerHeight>this.$.offsetHeight){var e=b.createRange();e[c==33?"moveToElementEditStart":"moveToElementEditEnd"](this);e.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(g,"blur",function(){try{g.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(g,"touchend",function(){a.focus()}); -h=b.document.getElementsByTag("title").getItem(0);h.data("cke-title",h.getText());if(CKEDITOR.env.ie)b.document.$.title=this._.docTitle;CKEDITOR.tools.setTimeout(function(){if(this.status=="unloaded")this.status="ready";b.fire("contentDom");if(this._.isPendingFocus){b.focus();this._.isPendingFocus=false}setTimeout(function(){b.fire("dataReady")},0);CKEDITOR.env.ie&&setTimeout(function(){if(b.document){var a=b.document.$.body;a.runtimeStyle.marginBottom="0px";a.runtimeStyle.marginBottom=""}},1E3)}, -0,this)}function e(a){function b(){var d;a.editable().attachListener(a,"selectionChange",function(){var b=a.getSelection().getSelectedElement();if(b){if(d){d.detachEvent("onresizestart",e);d=null}b.$.attachEvent("onresizestart",e);d=b.$}})}function e(a){a.returnValue=false}if(CKEDITOR.env.gecko)try{var f=a.document.$;f.execCommand("enableObjectResizing",false,!a.config.disableObjectResizing);f.execCommand("enableInlineTableEditing",false,!a.config.disableNativeTableHandles)}catch(g){}else CKEDITOR.env.ie&& -(CKEDITOR.env.version<11&&a.config.disableObjectResizing)&&b(a)}function b(){var a=[];if(CKEDITOR.document.$.documentMode>=8){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var b=[],e;for(e in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+e+"[contenteditable=false]");a.push(b.join(",")+"{display:inline-block}")}else if(CKEDITOR.env.gecko){a.push("html{height:100% !important}");a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}a.push("html{cursor:text;*cursor:auto}"); -a.push("img,input,textarea{cursor:default}");return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(b){function e(f){f&&f.removeListener();a.editable(new g(a,h.$.contentWindow.document.body));a.setData(a.getData(1),b)}var f="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();", -f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent(f)+"}())":"",h=CKEDITOR.dom.element.createFromHtml('<iframe src="'+f+'" frameBorder="0"></iframe>');h.setStyles({width:"100%",height:"100%"});h.addClass("cke_wysiwyg_frame cke_reset");var j=a.ui.space("contents");j.append(h);if(f=CKEDITOR.env.ie||CKEDITOR.env.gecko)h.on("load",e);var k=a.title,m=a.fire("ariaEditorHelpLabel",{}).label;if(k){CKEDITOR.env.ie&&m&&(k=k+(", "+m));h.setAttribute("title", -k)}if(m){var k=CKEDITOR.tools.getNextId(),q=CKEDITOR.dom.element.createFromHtml('<span id="'+k+'" class="cke_voice_label">'+m+"</span>");j.append(q,1);h.setAttribute("aria-describedby",k)}a.on("beforeModeUnload",function(a){a.removeListener();q&&q.remove()});h.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!f&&e();if(CKEDITOR.env.webkit){f=function(){j.setStyle("width","100%");h.hide();h.setSize("width",j.getSize("width"));j.removeStyle("width");h.show()};h.setCustomData("onResize", -f);CKEDITOR.document.getWindow().on("resize",f)}a.fire("ariaWidget",h)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,e=b.contentsCss;if(!CKEDITOR.tools.isArray(e))b.contentsCss=e?[e]:[];b.contentsCss.push(a)};var g=CKEDITOR.tools.createClass({$:function(b){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(b){CKEDITOR.tools.setTimeout(a,0,this,b)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable, -proto:{setData:function(a,d){var e=this.editor;if(d){this.setHtml(a);e.fire("dataReady")}else{this._.isLoadingData=true;e._.dataStore={id:1};var f=e.config,g=f.fullPage,j=f.docType,k=CKEDITOR.tools.buildStyleHtml(b()).replace(/<style>/,'<style data-cke-temp="1">');g||(k=k+CKEDITOR.tools.buildStyleHtml(e.config.contentsCss));var m=f.baseHref?'<base href="'+f.baseHref+'" data-cke-temp="1" />':"";g&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){e.docType=j=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){e.xmlDeclaration= -a;return""}));a=e.dataProcessor.toHtml(a);if(g){/<body[\s|>]/.test(a)||(a="<body>"+a);/<html[\s|>]/.test(a)||(a="<html>"+a+"</html>");/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>");m&&(a=a.replace(/<head[^>]*?>/,"$&"+m));a=a.replace(/<\/head\s*>/,k+"$&");a=j+a}else a=f.docType+'<html dir="'+f.contentsLangDirection+'" lang="'+(f.contentsLanguage||e.langCode)+'"><head><title>'+this._.docTitle+ -"</title>"+m+k+"</head><body"+(f.bodyId?' id="'+f.bodyId+'"':"")+(f.bodyClass?' class="'+f.bodyClass+'"':"")+">"+a+"</body></html>";if(CKEDITOR.env.gecko){a=a.replace(/<body/,'<body contenteditable="true" ');CKEDITOR.env.version<2E4&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>"))}f='<script id="cke_actscrpt" type="text/javascript"'+(CKEDITOR.env.ie?' defer="defer" ':"")+">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+ -",window);wasLoaded=1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"<\/script>";CKEDITOR.env.ie&&CKEDITOR.env.version<9&&(f=f+'<script id="cke_shimscrpt">window.parent.CKEDITOR.tools.enableHtml5Elements(document)<\/script>');m&&(CKEDITOR.env.ie&&CKEDITOR.env.version<10)&&(f=f+'<script id="cke_basetagscrpt">var baseTag = document.querySelector( "base" );baseTag.href = baseTag.href;<\/script>');a=a.replace(/(?=\s*<\/(:?head)>)/,f);this.clearCustomData(); -this.clearListeners();e.fire("contentDomUnload");var q=this.getDocument();try{q.write(a)}catch(s){setTimeout(function(){q.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();var a=this.editor,b=a.config,e=b.fullPage,f=e&&a.docType,g=e&&a.xmlDeclaration,j=this.getDocument(),e=e?j.getDocumentElement().getOuterHtml():j.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,""));e=a.dataProcessor.toDataFormat(e);g&&(e=g+"\n"+e);f&&(e= -f+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=true:g.baseProto.focus.call(this)},detach:function(){var a=this.editor,b=a.document,a=a.window.getFrame();g.baseProto.detach.call(this);this.clearCustomData();b.getDocumentElement().clearCustomData();a.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(b=a.removeCustomData("onResize"))&&b.removeListener();a.remove()}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles= -!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css"),CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,basicstyles,blockquote,clipboard,panel,floatpanel,menu,contextmenu,elementspath,indent,indentlist,list,enterkey,entities,popup,filebrowser,floatingspace,listblock,button,richcombo,format,horizontalrule,htmlwriter,image,fakeobjects,link,magicline,maximize,pastefromword,pastetext,removeformat,resize,menubutton,scayt,showborders,sourcearea,specialchar,stylescombo,tab,table,tabletools,toolbar,undo,wsc,wysiwygarea", -CKEDITOR.config.skin="moono",function(){var a=function(a,b){for(var g=CKEDITOR.getUrl("plugins/"+b),a=a.split(","),c=0;c<a.length;c++)CKEDITOR.skin.icons[a[c]]={path:g,offset:-a[++c],bgsize:a[++c]}};CKEDITOR.env.hidpi?a("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,codesnippet,384,,bgcolor,408,,textcolor,432,,creatediv,456,,docprops-rtl,480,,docprops,504,,find-rtl,528,,find,552,,replace,576,,flash,600,,button,624,,checkbox,648,,form,672,,hiddenfield,696,,imagebutton,720,,radio,744,,select-rtl,768,,select,792,,textarea-rtl,816,,textarea,840,,textfield-rtl,864,,textfield,888,,horizontalrule,912,,iframe,936,,image,960,,indent-rtl,984,,indent,1008,,outdent-rtl,1032,,outdent,1056,,justifyblock,1080,,justifycenter,1104,,justifyleft,1128,,justifyright,1152,,language,1176,,anchor-rtl,1200,,anchor,1224,,link,1248,,unlink,1272,,bulletedlist-rtl,1296,,bulletedlist,1320,,numberedlist-rtl,1344,,numberedlist,1368,,mathjax,1392,,maximize,1416,,newpage-rtl,1440,,newpage,1464,,pagebreak-rtl,1488,,pagebreak,1512,,pastefromword-rtl,1536,,pastefromword,1560,,pastetext-rtl,1584,,pastetext,1608,,placeholder,1632,,preview-rtl,1656,,preview,1680,,print,1704,,removeformat,1728,,save,1752,,scayt,1776,,selectall,1800,,showblocks-rtl,1824,,showblocks,1848,,smiley,1872,,source-rtl,1896,,source,1920,,sourcedialog-rtl,1944,,sourcedialog,1968,,specialchar,1992,,table,2016,,templates-rtl,2040,,templates,2064,,uicolor,2088,,redo-rtl,2112,,redo,2136,,undo-rtl,2160,,undo,2184,,simplebox,4416,auto,spellchecker,2232,", -"icons_hidpi.png"):a("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,codesnippet,384,auto,bgcolor,408,auto,textcolor,432,auto,creatediv,456,auto,docprops-rtl,480,auto,docprops,504,auto,find-rtl,528,auto,find,552,auto,replace,576,auto,flash,600,auto,button,624,auto,checkbox,648,auto,form,672,auto,hiddenfield,696,auto,imagebutton,720,auto,radio,744,auto,select-rtl,768,auto,select,792,auto,textarea-rtl,816,auto,textarea,840,auto,textfield-rtl,864,auto,textfield,888,auto,horizontalrule,912,auto,iframe,936,auto,image,960,auto,indent-rtl,984,auto,indent,1008,auto,outdent-rtl,1032,auto,outdent,1056,auto,justifyblock,1080,auto,justifycenter,1104,auto,justifyleft,1128,auto,justifyright,1152,auto,language,1176,auto,anchor-rtl,1200,auto,anchor,1224,auto,link,1248,auto,unlink,1272,auto,bulletedlist-rtl,1296,auto,bulletedlist,1320,auto,numberedlist-rtl,1344,auto,numberedlist,1368,auto,mathjax,1392,auto,maximize,1416,auto,newpage-rtl,1440,auto,newpage,1464,auto,pagebreak-rtl,1488,auto,pagebreak,1512,auto,pastefromword-rtl,1536,auto,pastefromword,1560,auto,pastetext-rtl,1584,auto,pastetext,1608,auto,placeholder,1632,auto,preview-rtl,1656,auto,preview,1680,auto,print,1704,auto,removeformat,1728,auto,save,1752,auto,scayt,1776,auto,selectall,1800,auto,showblocks-rtl,1824,auto,showblocks,1848,auto,smiley,1872,auto,source-rtl,1896,auto,source,1920,auto,sourcedialog-rtl,1944,auto,sourcedialog,1968,auto,specialchar,1992,auto,table,2016,auto,templates-rtl,2040,auto,templates,2064,auto,uicolor,2088,auto,redo-rtl,2112,auto,redo,2136,auto,undo-rtl,2160,auto,undo,2184,auto,simplebox,2208,auto,spellchecker,2232,auto", -"icons.png")}()})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/composer.json b/platforms/browser/www/lib/ckeditor/composer.json deleted file mode 100644 index dc3a40d1..00000000 --- a/platforms/browser/www/lib/ckeditor/composer.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "ckeditor/ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "type": "library", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "homepage": "http://ckeditor.com", - "license": [ "GPL-2.0+", "LGPL-2.1+", "MPL-1.1+" ], - "authors": [ - { - "name": "CKSource", - "homepage": "http://cksource.com" - } - ], - "support": { - "issues": "http://dev.ckeditor.com", - "forum": "http://ckeditor.com/forums", - "wiki": "http://docs.ckeditor.com", - "source": "http://github.com/ckeditor/ckeditor-dev" - } -} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/config.js b/platforms/browser/www/lib/ckeditor/config.js deleted file mode 100644 index d3e7f5d3..00000000 --- a/platforms/browser/www/lib/ckeditor/config.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -CKEDITOR.editorConfig = function( config ) { - // Define changes to default configuration here. - // For complete reference see: - // http://docs.ckeditor.com/#!/api/CKEDITOR.config - - // The toolbar groups arrangement, optimized for two toolbar rows. - config.toolbarGroups = [ - { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, - { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, - { name: 'links' }, - { name: 'insert' }, - { name: 'forms' }, - { name: 'tools' }, - { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, - { name: 'others' }, - '/', - { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, - { name: 'styles' }, - { name: 'colors' }, - { name: 'about' } - ]; - - // Remove some buttons provided by the standard plugins, which are - // not needed in the Standard(s) toolbar. - config.removeButtons = 'Underline,Subscript,Superscript'; - - // Set the most common block elements. - config.format_tags = 'p;h1;h2;h3;pre'; - - // Simplify the dialog windows. - config.removeDialogTabs = 'image:advanced;link:advanced'; -}; diff --git a/platforms/browser/www/lib/ckeditor/contents.css b/platforms/browser/www/lib/ckeditor/contents.css deleted file mode 100644 index f29bc0a8..00000000 --- a/platforms/browser/www/lib/ckeditor/contents.css +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -body -{ - /* Font */ - font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; - font-size: 12px; - - /* Text color */ - color: #333; - - /* Remove the background color to make it transparent */ - background-color: #fff; - - margin: 20px; -} - -.cke_editable -{ - font-size: 13px; - line-height: 1.6; -} - -blockquote -{ - font-style: italic; - font-family: Georgia, Times, "Times New Roman", serif; - padding: 2px 0; - border-style: solid; - border-color: #ccc; - border-width: 0; -} - -.cke_contents_ltr blockquote -{ - padding-left: 20px; - padding-right: 8px; - border-left-width: 5px; -} - -.cke_contents_rtl blockquote -{ - padding-left: 8px; - padding-right: 20px; - border-right-width: 5px; -} - -a -{ - color: #0782C1; -} - -ol,ul,dl -{ - /* IE7: reset rtl list margin. (#7334) */ - *margin-right: 0px; - /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/ - padding: 0 40px; -} - -h1,h2,h3,h4,h5,h6 -{ - font-weight: normal; - line-height: 1.2; -} - -hr -{ - border: 0px; - border-top: 1px solid #ccc; -} - -img.right -{ - border: 1px solid #ccc; - float: right; - margin-left: 15px; - padding: 5px; -} - -img.left -{ - border: 1px solid #ccc; - float: left; - margin-right: 15px; - padding: 5px; -} - -pre -{ - white-space: pre-wrap; /* CSS 2.1 */ - word-wrap: break-word; /* IE7 */ - -moz-tab-size: 4; - -o-tab-size: 4; - -webkit-tab-size: 4; - tab-size: 4; -} - -.marker -{ - background-color: Yellow; -} - -span[lang] -{ - font-style: italic; -} - -figure -{ - text-align: center; - border: solid 1px #ccc; - border-radius: 2px; - background: rgba(0,0,0,0.05); - padding: 10px; - margin: 10px 20px; - display: inline-block; -} - -figure > figcaption -{ - text-align: center; - display: block; /* For IE8 */ -} - -a > img { - padding: 1px; - margin: 1px; - border: none; - outline: 1px solid #0782C1; -} diff --git a/platforms/browser/www/lib/ckeditor/lang/_translationstatus.txt b/platforms/browser/www/lib/ckeditor/lang/_translationstatus.txt deleted file mode 100644 index 085e66c6..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/_translationstatus.txt +++ /dev/null @@ -1,63 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -af.js Found: 62 Missing: 4 -ar.js Found: 51 Missing: 15 -bg.js Found: 58 Missing: 8 -bn.js Found: 40 Missing: 26 -bs.js Found: 29 Missing: 37 -ca.js Found: 61 Missing: 5 -cs.js Found: 66 Missing: 0 -cy.js Found: 66 Missing: 0 -da.js Found: 66 Missing: 0 -de.js Found: 66 Missing: 0 -el.js Found: 59 Missing: 7 -en-au.js Found: 38 Missing: 28 -en-ca.js Found: 37 Missing: 29 -en-gb.js Found: 61 Missing: 5 -eo.js Found: 66 Missing: 0 -es.js Found: 66 Missing: 0 -et.js Found: 66 Missing: 0 -eu.js Found: 48 Missing: 18 -fa.js Found: 66 Missing: 0 -fi.js Found: 66 Missing: 0 -fo.js Found: 66 Missing: 0 -fr-ca.js Found: 42 Missing: 24 -fr.js Found: 66 Missing: 0 -gl.js Found: 40 Missing: 26 -gu.js Found: 66 Missing: 0 -he.js Found: 66 Missing: 0 -hi.js Found: 43 Missing: 23 -hr.js Found: 66 Missing: 0 -hu.js Found: 63 Missing: 3 -is.js Found: 41 Missing: 25 -it.js Found: 66 Missing: 0 -ja.js Found: 62 Missing: 4 -ka.js Found: 62 Missing: 4 -km.js Found: 40 Missing: 26 -ko.js Found: 40 Missing: 26 -lt.js Found: 66 Missing: 0 -lv.js Found: 40 Missing: 26 -mk.js Found: 0 Missing: 66 -mn.js Found: 40 Missing: 26 -ms.js Found: 39 Missing: 27 -nb.js Found: 66 Missing: 0 -nl.js Found: 65 Missing: 1 -no.js Found: 66 Missing: 0 -pl.js Found: 66 Missing: 0 -pt-br.js Found: 66 Missing: 0 -pt.js Found: 52 Missing: 14 -ro.js Found: 61 Missing: 5 -ru.js Found: 66 Missing: 0 -sk.js Found: 49 Missing: 17 -sl.js Found: 48 Missing: 18 -sr-latn.js Found: 40 Missing: 26 -sr.js Found: 40 Missing: 26 -sv.js Found: 62 Missing: 4 -th.js Found: 40 Missing: 26 -tr.js Found: 66 Missing: 0 -ug.js Found: 66 Missing: 0 -uk.js Found: 66 Missing: 0 -vi.js Found: 66 Missing: 0 -zh-cn.js Found: 66 Missing: 0 -zh.js Found: 58 Missing: 8 diff --git a/platforms/browser/www/lib/ckeditor/lang/af.js b/platforms/browser/www/lib/ckeditor/lang/af.js deleted file mode 100644 index edfbce24..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/af.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['af']={"wsc":{"btnIgnore":"Ignoreer","btnIgnoreAll":"Ignoreer alles","btnReplace":"Vervang","btnReplaceAll":"vervang alles","btnUndo":"Ontdoen","changeTo":"Verander na","errorLoading":"Fout by inlaai van diens: %s.","ieSpellDownload":"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?","manyChanges":"Klaar met speltoets: %1 woorde verander","noChanges":"Klaar met speltoets: Geen woorde verander nie","noMispell":"Klaar met speltoets: Geen foute nie","noSuggestions":"- Geen voorstel -","notAvailable":"Jammer, hierdie diens is nie nou beskikbaar nie.","notInDic":"Nie in woordeboek nie","oneChange":"Klaar met speltoets: Een woord verander","progress":"Spelling word getoets...","title":"Speltoetser","toolbar":"Speltoets"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"stylescombo":{"label":"Styl","panelTitle":"Opmaak style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"sourcearea":{"toolbar":"Bron"},"scayt":{"btn_about":"SCAYT info","btn_dictionaries":"Woordeboeke","btn_disable":"SCAYT af","btn_enable":"SCAYT aan","btn_langs":"Tale","btn_options":"Opsies","text_title":""},"removeformat":{"toolbar":"Verwyder opmaak"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"<ander>","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"<raam>","targetFrameName":"Naam van doelraam","targetPopup":"<opspringvenster>","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"image":{"alertUrl":"Gee URL van afbeelding.","alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Sitaatblok"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurstreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Info oor CKEditor","help":"Check $1 for help.","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:","title":"Info oor CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Teksverwerker","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur na bediener","image":"Afbeelding","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teks-area","hiddenField":"Blinde veld","button":"Knop","select":"Keuseveld","imageButton":"Afbeeldingsknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Sleep om te herskaal","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n getal nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Doel","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Oplyn","alignLeft":"Links","alignRight":"Regs","alignCenter":"Sentreer","alignJustify":"Uitvul","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ar.js b/platforms/browser/www/lib/ckeditor/lang/ar.js deleted file mode 100644 index f1586649..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ar']={"wsc":{"btnIgnore":"تجاهل","btnIgnoreAll":"تجاهل الكل","btnReplace":"تغيير","btnReplaceAll":"تغيير الكل","btnUndo":"تراجع","changeTo":"التغيير إلى","errorLoading":"خطأ في تحميل تطبيق خدمة الاستضافة: %s.","ieSpellDownload":"المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟","manyChanges":"تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات","noChanges":"تم التدقيق الإملائي: لم يتم تغيير أي كلمة","noMispell":"تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية","noSuggestions":"- لا توجد إقتراحات -","notAvailable":"عفواً، ولكن هذه الخدمة غير متاحة الان","notInDic":"ليست في القاموس","oneChange":"تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط","progress":"جاري التدقيق الاملائى","title":"التدقيق الإملائي","toolbar":"تدقيق إملائي"},"undo":{"redo":"إعادة","undo":"تراجع"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج حرف خاص"},"sourcearea":{"toolbar":"المصدر"},"scayt":{"btn_about":"عن SCAYT","btn_dictionaries":"قواميس","btn_disable":"تعطيل SCAYT","btn_enable":"تفعيل SCAYT","btn_langs":"لغات","btn_options":"خيارات","text_title":""},"removeformat":{"toolbar":"إزالة التنسيقات"},"pastetext":{"button":"لصق كنص بسيط","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"magicline":{"title":"إدراج فقرة هنا"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"link":{"acccessKey":"مفاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"إزالة الإشارة المرجعية"},"anchorId":"حسب رقم العنصر","anchorName":"حسب إسم الإشارة المرجعية","charset":"ترميز المادة المطلوبة","cssClasses":"فئات التنسيق","emailAddress":"البريد الإلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"رمز اللغة","langDir":"إتجاه نص اللغة","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير الرابط","name":"إسم","noAnchors":"(لا توجد علامات مرجعية في هذا المستند)","noEmail":"الرجاء كتابة الريد الإلكتروني","noUrl":"الرجاء كتابة رابط الموقع","other":"<أخرى>","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص النافذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"العلاقة","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هدف الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدف","targetPopup":"<نافذة منبثقة>","targetPopupName":"اسم النافذة المنبثقة","title":"رابط","toAnchor":"مكان في هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رفع"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"image":{"alertUrl":"فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.","alt":"عنوان الصورة","border":"سمك الحدود","btnUpload":"أرسلها للخادم","button2Img":"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟","hSpace":"تباعد أفقي","img2Button":"هل تريد تحويل الصورة المختارة إلى زر صورة؟","infoTab":"معلومات الصورة","linkTab":"الرابط","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","resetSize":"إستعادة الحجم الأصلي","title":"خصائص الصورة","titleButton":"خصائص زر الصورة","upload":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","vSpace":"تباعد عمودي","validateBorder":"الإطار يجب أن يكون عددا","validateHSpace":"HSpace يجب أن يكون عدداً.","validateVSpace":"VSpace يجب أن يكون عدداً."},"horizontalrule":{"toolbar":"خط فاصل"},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالفلاش","hiddenfield":"إدراج حقل خفي","iframe":"iframe","unknown":"عنصر غير معروف"},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"contextmenu":{"options":"خصائص قائمة السياق"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteArea":"منطقة اللصق","pasteMsg":"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر <STRONG>موافق</STRONG>.","securityMsg":"نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.","title":"لصق"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"اقتباس"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","help":"راجع $1 من أجل المساعدة","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:","title":"عن CKEditor","userGuide":"دليل مستخدم CKEditor."},"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","alignLeft":"يسار","alignRight":"يمين","alignCenter":"وسط","alignJustify":"ضبط","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/bg.js b/platforms/browser/www/lib/ckeditor/lang/bg.js deleted file mode 100644 index f0db4fd0..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bg']={"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай всичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий всичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- Няма препоръчани -","notAvailable":"Съжаляваме, но услугата не е достъпна за момента","notInDic":"Не е в речника","oneChange":"Spell check complete: One word changed","progress":"Проверява се правописа...","title":"Проверка на правопис","toolbar":"Проверка на правопис"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Undo","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е позитивно число.","invalidCellSpacing":"Интервала в клетките трябва да е позитивно число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Вътрешни стилове","panelTitle3":"Обектни стилове"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"sourcearea":{"toolbar":"Източник"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Речници","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Премахване на форматирането"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"magicline":{"title":"Вмъкнете параграф тук"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"image":{"alertUrl":"Моля, въведете пълния път до изображението","alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати я на сървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отстъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за снимка","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки за снимка","resetSize":"Нулиране на размер","title":"Настройки за снимка","titleButton":"Настойки за бутон за снимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отстъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опции на контекстното меню"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.","securityMsg":"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Блок за цитат"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Относно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна информация моля посетете сайта ни:","title":"Относно CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Текстов редактор за форматиран текст","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignJustify":"Двустранно подравняване","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"None","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/bn.js b/platforms/browser/www/lib/ckeditor/lang/bn.js deleted file mode 100644 index bbbf8f54..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/bn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bn']={"wsc":{"btnIgnore":"ইগনোর কর","btnIgnoreAll":"সব ইগনোর কর","btnReplace":"বদলে দাও","btnReplaceAll":"সব বদলে দাও","btnUndo":"আন্ডু","changeTo":"এতে বদলাও","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?","manyChanges":"বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে","noChanges":"বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি","noMispell":"বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি","noSuggestions":"- কোন সাজেশন নেই -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"শব্দকোষে নেই","oneChange":"বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে","progress":"বানান পরীক্ষা চলছে...","title":"Spell Check","toolbar":"বানান চেক"},"undo":{"redo":"রি-ডু","undo":"আনডু"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"বর্ডার সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"stylescombo":{"label":"স্টাইল","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"sourcearea":{"toolbar":"সোর্স"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ফরমেট সরাও"},"pastetext":{"button":"সাদা টেক্সট হিসেবে পেস্ট কর","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"বুলেট লিস্ট লেবেল","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"link":{"acccessKey":"এক্সেস কী","advanced":"এডভান্সড","advisoryContentType":"পরামর্শ কন্টেন্টের প্রকার","advisoryTitle":"পরামর্শ শীর্ষক","anchor":{"toolbar":"নোঙ্গর","menu":"নোঙর প্রোপার্টি","title":"নোঙর প্রোপার্টি","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করুন","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোর্স ক্যারেক্টর সেট","cssClasses":"স্টাইল-শীট ক্লাস","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথ্য","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সম্পাদন","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন","noUrl":"অনুগ্রহ করে URL লিংক টাইপ করুন","other":"<other>","popupDependent":"ডিপেন্ডেন্ট (Netscape)","popupFeatures":"পপআপ উইন্ডো ফীচার সমূহ","popupFullScreen":"পূর্ণ পর্দা জুড়ে (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেন্যু বার","popupResizable":"Resizable","popupScrollBars":"স্ক্রল বার","popupStatusBar":"স্ট্যাটাস বার","popupToolbar":"টুল বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"স্টাইল","tabIndex":"ট্যাব ইন্ডেক্স","target":"টার্গেট","targetFrame":"<ফ্রেম>","targetFrameName":"টার্গেট ফ্রেমের নাম","targetPopup":"<পপআপ উইন্ডো>","targetPopupName":"পপআপ উইন্ডোর নাম","title":"লিংক","toAnchor":"এই পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toolbar":"লিংক যুক্ত কর","type":"লিংক প্রকার","unlink":"লিংক সরাও","upload":"আপলোড"},"indent":{"indent":"ইনডেন্ট বাড়াও","outdent":"ইনডেন্ট কমাও"},"image":{"alertUrl":"অনুগ্রহক করে ছবির URL টাইপ করুন","alt":"বিকল্প টেক্সট","border":"বর্ডার","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"হরাইজন্টাল স্পেস","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ছবির তথ্য","linkTab":"লিংক","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","title":"ছবির প্রোপার্টি","titleButton":"ছবি বাটন প্রোপার্টি","upload":"আপলোড","urlMissing":"Image source URL is missing.","vSpace":"ভার্টিকেল স্পেস","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"রেখা যুক্ত কর"},"format":{"label":"ফন্ট ফরমেট","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteArea":"Paste Area","pasteMsg":"অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"পেস্ট"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"বোল্ড","italic":"ইটালিক","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","alignLeft":"বামে","alignRight":"ডানে","alignCenter":"মাঝখানে","alignJustify":"ব্লক জাস্টিফাই","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/bs.js b/platforms/browser/www/lib/ckeditor/lang/bs.js deleted file mode 100644 index c2550e9e..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/bs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['bs']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Ponovi","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"sourcearea":{"toolbar":"HTML kôd"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Poništi format"},"pastetext":{"button":"Zalijepi kao obièan tekst","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","other":"<other>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"<frejm>","targetFrameName":"Target Frame Name","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"image":{"alertUrl":"Molimo ukucajte URL od slike.","alt":"Tekst na slici","border":"Okvir","btnUpload":"Šalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","resetSize":"Resetuj dimenzije","title":"Svojstva slike","titleButton":"Image Button Properties","upload":"Šalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Centar","alignJustify":"Puno poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ca.js b/platforms/browser/www/lib/ckeditor/lang/ca.js deleted file mode 100644 index c9d68a5b..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ca']={"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora-les totes","btnReplace":"Canvia","btnReplaceAll":"Canvia-les totes","btnUndo":"Desfés","changeTo":"Reemplaça amb","errorLoading":"Error carregant el servidor: %s.","ieSpellDownload":"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?","manyChanges":"Verificació ortogràfica: s'han canviat %1 paraules","noChanges":"Verificació ortogràfica: no s'ha canviat cap paraula","noMispell":"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita","noSuggestions":"Cap suggeriment","notAvailable":"El servei no es troba disponible ara.","notInDic":"No és al diccionari","oneChange":"Verificació ortogràfica: s'ha canviat una paraula","progress":"Verificació ortogràfica en curs...","title":"Comprova l'ortografia","toolbar":"Revisa l'ortografia"},"undo":{"redo":"Refés","undo":"Desfés"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"sourcearea":{"toolbar":"Codi font"},"scayt":{"btn_about":"Quant a l'SCAYT","btn_dictionaries":"Diccionaris","btn_disable":"Deshabilita SCAYT","btn_enable":"Habilitat l'SCAYT","btn_langs":"Idiomes","btn_options":"Opcions","text_title":""},"removeformat":{"toolbar":"Elimina Format"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"magicline":{"title":"Insereix el paràgraf aquí"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"image":{"alertUrl":"Si us plau, escriviu la URL de la imatge","alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxar"},"button":{"selectedLabel":"%1 (Seleccionat)"},"blockquote":{"toolbar":"Bloc de cita"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor","help":"Premi $1 per obtenir ajuda.","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:","title":"Quant al CKEditor","userGuide":"Manual d'usuari de CKEditor"},"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignJustify":"Justificat","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"None","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/cs.js b/platforms/browser/www/lib/ckeditor/lang/cs.js deleted file mode 100644 index afa68d30..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['cs']={"wsc":{"btnIgnore":"Přeskočit","btnIgnoreAll":"Přeskakovat vše","btnReplace":"Zaměnit","btnReplaceAll":"Zaměňovat vše","btnUndo":"Zpět","changeTo":"Změnit na","errorLoading":"Chyba nahrávání služby aplikace z: %s.","ieSpellDownload":"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?","manyChanges":"Kontrola pravopisu dokončena: %1 slov změněno","noChanges":"Kontrola pravopisu dokončena: Beze změn","noMispell":"Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny","noSuggestions":"- žádné návrhy -","notAvailable":"Omlouváme se, ale služba nyní není dostupná.","notInDic":"Není ve slovníku","oneChange":"Kontrola pravopisu dokončena: Jedno slovo změněno","progress":"Probíhá kontrola pravopisu...","title":"Kontrola pravopisu","toolbar":"Zkontrolovat pravopis"},"undo":{"redo":"Znovu","undo":"Zpět"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"sourcearea":{"toolbar":"Zdroj"},"scayt":{"btn_about":"O aplikaci SCAYT","btn_dictionaries":"Slovníky","btn_disable":"Vypnout SCAYT","btn_enable":"Zapnout SCAYT","btn_langs":"Jazyky","btn_options":"Nastavení","text_title":""},"removeformat":{"toolbar":"Odstranit formátování"},"pastetext":{"button":"Vložit jako čistý text","title":"Vložit jako čistý text"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"magicline":{"title":"zde vložit odstavec"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"image":{"alertUrl":"Zadejte prosím URL obrázku","alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?","hSpace":"Horizontální mezera","img2Button":"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlačítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých číslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých číslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých číslech."},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"button":{"selectedLabel":"%1 (Vybráno)"},"blockquote":{"toolbar":"Citace"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor","help":"Prohlédněte si $1 pro nápovědu.","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:","title":"O aplikaci CKEditor","userGuide":"Uživatelská příručka CKEditor"},"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na střed","alignJustify":"Zarovnat do bloku","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/cy.js b/platforms/browser/www/lib/ckeditor/lang/cy.js deleted file mode 100644 index 4bb05316..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['cy']={"wsc":{"btnIgnore":"Anwybyddu Un","btnIgnoreAll":"Anwybyddu Pob","btnReplace":"Amnewid Un","btnReplaceAll":"Amnewid Pob","btnUndo":"Dadwneud","changeTo":"Newid i","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?","manyChanges":"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair","noChanges":"Gwirio sillafu wedi gorffen: Dim newidiadau","noMispell":"Gwirio sillafu wedi gorffen: Dim camsillaf.","noSuggestions":"- Dim awgrymiadau -","notAvailable":"Nid yw'r gwasanaeth hwn ar gael yn bresennol.","notInDic":"Nid i'w gael yn y geiriadur","oneChange":"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair","progress":"Gwirio sillafu yn ar y gweill...","title":"Gwirio Sillafu","toolbar":"Gwirio Sillafu"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"sourcearea":{"toolbar":"HTML"},"scayt":{"btn_about":"Ynghylch SCAYT","btn_dictionaries":"Geiriaduron","btn_disable":"Analluogi SCAYT","btn_enable":"Galluogi SCAYT","btn_langs":"Ieithoedd","btn_options":"Opsiynau","text_title":""},"removeformat":{"toolbar":"Tynnu Fformat"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"magicline":{"title":"Mewnosod paragraff yma"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"image":{"alertUrl":"Rhowch URL y ddelwedd","alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Dyfyniad bloc"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"Ynghylch CKEditor","help":"Gwirio $1 am gymorth.","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:","title":"Ynghylch CKEditor","userGuide":"Canllawiau Defnyddiwr CKEditor"},"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignJustify":"Unioni","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/da.js b/platforms/browser/www/lib/ckeditor/lang/da.js deleted file mode 100644 index 6942e80d..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['da']={"wsc":{"btnIgnore":"Ignorér","btnIgnoreAll":"Ignorér alle","btnReplace":"Erstat","btnReplaceAll":"Erstat alle","btnUndo":"Tilbage","changeTo":"Forslag","errorLoading":"Fejl ved indlæsning af host: %s.","ieSpellDownload":"Stavekontrol ikke installeret. Vil du installere den nu?","manyChanges":"Stavekontrol færdig: %1 ord ændret","noChanges":"Stavekontrol færdig: Ingen ord ændret","noMispell":"Stavekontrol færdig: Ingen fejl fundet","noSuggestions":"(ingen forslag)","notAvailable":"Stavekontrol er desværre ikke tilgængelig.","notInDic":"Ikke i ordbogen","oneChange":"Stavekontrol færdig: Et ord ændret","progress":"Stavekontrollen arbejder...","title":"Stavekontrol","toolbar":"Stavekontrol"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøger","btn_disable":"Deaktivér SCAYT","btn_enable":"Aktivér SCAYT","btn_langs":"Sprog","btn_options":"Indstillinger","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image":{"alertUrl":"Indtast stien til billedet","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor","help":"Se $1 for at få hjælp.","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):","title":"Om CKEditor","userGuide":"CKEditor-brugermanual"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignJustify":"Lige margener","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/de.js b/platforms/browser/www/lib/ckeditor/lang/de.js deleted file mode 100644 index 6b6d8b49..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['de']={"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"sourcearea":{"toolbar":"Quellcode"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":""},"removeformat":{"toolbar":"Formatierungen entfernen"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenü Optionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"<nichts>","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignJustify":"Blocksatz","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/el.js b/platforms/browser/www/lib/ckeditor/lang/el.js deleted file mode 100644 index f79080d8..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['el']={"wsc":{"btnIgnore":"Αγνόηση","btnIgnoreAll":"Αγνόηση όλων","btnReplace":"Αντικατάσταση","btnReplaceAll":"Αντικατάσταση όλων","btnUndo":"Αναίρεση","changeTo":"Αλλαγή σε","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;","manyChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξαν %1 λέξεις","noChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις","noMispell":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη","noSuggestions":"- Δεν υπάρχουν προτάσεις -","notAvailable":"Η υπηρεσία δεν είναι διαθέσιμη αυτήν την στιγμή.","notInDic":"Δεν υπάρχει στο λεξικό","oneChange":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξε μια λέξη","progress":"Γίνεται ορθογραφικός έλεγχος...","title":"Ορθογραφικός Έλεγχος","toolbar":"Ορθογραφικός Έλεγχος"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντια Διαίρεση Κελιού","splitVertical":"Κατακόρυφη Διαίρεση Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Γραμμών","colSpan":"Εύρος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Baseline","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι αριθμός.","invalidRowSpan":"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.","invalidColSpan":"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.","chooseColor":"Επιλέξτε"},"cellPad":"Αναπλήρωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"Διαγραφή Στηλών"},"columns":"Στήλες","deleteTable":"Διαγραφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Γραμμή","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"sourcearea":{"toolbar":"Κώδικας"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Λεξικά","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Γλώσσες","btn_options":"Επιλογές","text_title":""},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"link":{"acccessKey":"Συντόμευση","advanced":"Για Προχωρημένους","advisoryContentType":"Ενδεικτικός Τύπος Περιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεργασία Άγκυρας","menu":"Ιδιότητες άγκυρας","title":"Ιδιότητες άγκυρας","name":"Όνομα άγκυρας","errorName":"Παρακαλούμε εισάγετε όνομα άγκυρας","remove":"Αφαίρεση Άγκυρας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος Άγκυρας","charset":"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής","cssClasses":"Κλάσεις Φύλλων Στυλ","emailAddress":"Διεύθυνση E-mail","emailBody":"Κείμενο Μηνύματος","emailSubject":"Θέμα Μηνύματος","id":"Id","info":"Πληροφορίες Συνδέσμου","langCode":"Κατεύθυνση Κειμένου","langDir":"Κατεύθυνση Κειμένου","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","menu":"Επεξεργασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάρχουν άγκυρες στο κείμενο)","noEmail":"Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του συνδέσμου","other":"<άλλο>","popupDependent":"Εξαρτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου Παραθύρου","popupFullScreen":"Πλήρης Οθόνη (IE)","popupLeft":"Θέση Αριστερά","popupLocationBar":"Γραμμή Τοποθεσίας","popupMenuBar":"Γραμμή Επιλογών","popupResizable":"Προσαρμοζόμενο Μέγεθος","popupScrollBars":"Μπάρες Κύλισης","popupStatusBar":"Γραμμή Κατάστασης","popupToolbar":"Εργαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια Άγκυρα","styles":"Μορφή","tabIndex":"Σειρά Μεταπήδησης","target":"Παράθυρο Προορισμού","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Πλαισίου Προορισμού","targetPopup":"<αναδυόμενο παράθυρο>","targetPopupName":"Όνομα Αναδυόμενου Παραθύρου","title":"Σύνδεσμος","toAnchor":"Άγκυρα σε αυτήν τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toolbar":"Σύνδεσμος","type":"Τύπος Συνδέσμου","unlink":"Αφαίρεση Συνδέσμου","upload":"Αποστολή"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"image":{"alertUrl":"Εισάγετε την τοποθεσία (URL) της εικόνας","alt":"Εναλλακτικό Κείμενο","border":"Περίγραμμα","btnUpload":"Αποστολή στον Διακομιστή","button2Img":"Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;","hSpace":"HSpace","img2Button":"Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;","infoTab":"Πληροφορίες Εικόνας","linkTab":"Σύνδεσμος","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","resetSize":"Επαναφορά Αρχικού Μεγέθους","title":"Ιδιότητες Εικόνας","titleButton":"Ιδιότητες Κουμπιού Εικόνας","upload":"Αποστολή","urlMissing":"Το URL πηγής για την εικόνα λείπει.","vSpace":"VSpace","validateBorder":"Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.","validateHSpace":"Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.","validateVSpace":"Το VSpace πρέπει να είναι ένας ακέραιος αριθμός."},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"Προ-μορφοποιημένη"},"fakeobjects":{"anchor":"Άγκυρα","flash":"Ταινία Flash","hiddenfield":"Κρυφό Πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Παρακαλώ επικολλήστε στο ακόλουθο κουτί χρησιμοποιώντας το πληκτρολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.","securityMsg":"Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.","title":"Επικόλληση"},"button":{"selectedLabel":"%1 (Επιλεγμένο)"},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor","help":"Ελέγξτε τις $1 για βοήθεια.","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:","title":"Περί του CKEditor","userGuide":"Οδηγίες Χρήστη CKEditor"},"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"Φόρμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"Περιοχή Κειμένου","hiddenField":"Κρυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση Κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική Περιγραφή URL","cssClass":"Κλάσεις Φύλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"Μορφή Κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για Προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδιο Παράθυρο (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Κλάσεις Φύλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","alignLeft":"Αριστερά","alignRight":"Δεξιά","alignCenter":"Κέντρο","alignJustify":"Πλήρης Στοίχιση","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/en-au.js b/platforms/browser/www/lib/ckeditor/lang/en-au.js deleted file mode 100644 index 7ef53932..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/en-au.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-au']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/lang/en-ca.js deleted file mode 100644 index cf8d1843..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/en-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-ca']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/lang/en-gb.js deleted file mode 100644 index 9e14d9ee..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en-gb']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/en.js b/platforms/browser/www/lib/ckeditor/lang/en.js deleted file mode 100644 index e41e6fd1..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['en']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/eo.js b/platforms/browser/www/lib/ckeditor/lang/eo.js deleted file mode 100644 index 41ca309b..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['eo']={"wsc":{"btnIgnore":"Ignori","btnIgnoreAll":"Ignori Ĉion","btnReplace":"Anstataŭigi","btnReplaceAll":"Anstataŭigi Ĉion","btnUndo":"Malfari","changeTo":"Ŝanĝi al","errorLoading":"Eraro en la servoelŝuto el la gastiga komputiko: %s.","ieSpellDownload":"Ortografikontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?","manyChanges":"Ortografikontrolado finita: %1 vortoj korektitaj","noChanges":"Ortografikontrolado finita: neniu vorto korektita","noMispell":"Ortografikontrolado finita: neniu eraro trovita","noSuggestions":"- Neniu propono -","notAvailable":"Bedaŭrinde la servo ne funkcias nuntempe.","notInDic":"Ne trovita en la vortaro","oneChange":"Ortografikontrolado finita: unu vorto korektita","progress":"La ortografio estas kontrolata...","title":"Kontroli la ortografion","toolbar":"Kontroli la ortografion"},"undo":{"redo":"Refari","undo":"Malfari"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"sourcearea":{"toolbar":"Fonto"},"scayt":{"btn_about":"Pri OKDVT","btn_dictionaries":"Vortaroj","btn_disable":"Malebligi OKDVT","btn_enable":"Ebligi OKDVT","btn_langs":"Lingvoj","btn_options":"Opcioj","text_title":""},"removeformat":{"toolbar":"Forigi Formaton"},"pastetext":{"button":"Interglui kiel platan tekston","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/Ŝanĝi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","emailAddress":"Retpoŝto","emailBody":"Mesaĝa korpo","emailSubject":"Mesaĝa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"Ŝanĝi Ligilon","name":"Nomo","noAnchors":"<Ne disponeblas ankroj en la dokumento>","noEmail":"Bonvolu entajpi la retpoŝtadreson","noUrl":"Bonvolu entajpi la URL-on","other":"<alia>","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Ŝprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"Dimensiŝanĝebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"<kadro>","targetFrameName":"Nomo de CelKadro","targetPopup":"<ŝprucfenestro>","targetPopupName":"Nomo de Ŝprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paĝo","toEmail":"Retpoŝto","toUrl":"URL","toolbar":"Enmeti/Ŝanĝi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"Alŝuti"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"image":{"alertUrl":"Bonvolu tajpi la retadreson de la bildo","alt":"Anstataŭiga Teksto","border":"Bordero","btnUpload":"Sendu al Servilo","button2Img":"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?","hSpace":"Horizontala Spaco","img2Button":"Ĉu vi volas transformi la selektitan bildon en bildbutonon?","infoTab":"Informoj pri Bildo","linkTab":"Ligilo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","resetSize":"Origina Grando","title":"Atributoj de Bildo","titleButton":"Bildbutonaj Atributoj","upload":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","vSpace":"Vertikala Spaco","validateBorder":"La bordero devas esti entjera nombro.","validateHSpace":"La horizontala spaco devas esti entjera nombro.","validateVSpace":"La vertikala spaco devas esti entjera nombro."},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"fakeobjects":{"anchor":"Ankro","flash":"FlaŝAnimacio","hiddenfield":"Kaŝita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteArea":"Intergluoareo","pasteMsg":"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK","securityMsg":"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.","title":"Interglui"},"button":{"selectedLabel":"%1 (Selektita)"},"blockquote":{"toolbar":"Citaĵo"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor","help":"Kontroli $1 por helpo.","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:","title":"Pri CKEditor","userGuide":"CKEditor Uzindikoj"},"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<Defaŭlta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","alignLeft":"Maldekstre","alignRight":"Dekstre","alignCenter":"Centre","alignJustify":"Ĝisrandigi Ambaŭflanke","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"None","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/es.js b/platforms/browser/www/lib/ckeditor/lang/es.js deleted file mode 100644 index a69056b7..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['es']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcearea":{"toolbar":"Fuente HTML"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":""},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image":{"alertUrl":"Por favor escriba la URL de la imagen","alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor","help":"Lea la $1 para resolver sus dudas.","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:","title":"Acerca de CKEditor","userGuide":"Guía de usuario de CKEditor"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"None","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/et.js b/platforms/browser/www/lib/ckeditor/lang/et.js deleted file mode 100644 index 37be80d5..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['et']={"wsc":{"btnIgnore":"Ignoreeri","btnIgnoreAll":"Ignoreeri kõiki","btnReplace":"Asenda","btnReplaceAll":"Asenda kõik","btnUndo":"Võta tagasi","changeTo":"Muuda","errorLoading":"Viga rakenduse teenushosti laadimisel: %s.","ieSpellDownload":"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?","manyChanges":"Õigekirja kontroll sooritatud: %1 sõna muudetud","noChanges":"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud","noMispell":"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud","noSuggestions":"- Soovitused puuduvad -","notAvailable":"Kahjuks ei ole teenus praegu saadaval.","notInDic":"Puudub sõnastikust","oneChange":"Õigekirja kontroll sooritatud: üks sõna muudeti","progress":"Toimub õigekirja kontroll...","title":"Õigekirjakontroll","toolbar":"Õigekirjakontroll"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"sourcearea":{"toolbar":"Lähtekood"},"scayt":{"btn_about":"SCAYT-ist lähemalt","btn_dictionaries":"Sõnaraamatud","btn_disable":"SCAYT keelatud","btn_enable":"SCAYT lubatud","btn_langs":"Keeled","btn_options":"Valikud","text_title":""},"removeformat":{"toolbar":"Vormingu eemaldamine"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"magicline":{"title":"Sisesta siia lõigu tekst"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"image":{"alertUrl":"Palun kirjuta pildi URL","alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"contextmenu":{"options":"Kontekstimenüü valikud"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokktsitaat"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditorist","help":"Abi jaoks vaata $1.","moreInfo":"Litsentsi andmed leiab meie veebilehelt:","title":"CKEditorist","userGuide":"CKEditori kasutusjuhendit"},"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignJustify":"Rööpjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"None","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/eu.js b/platforms/browser/www/lib/ckeditor/lang/eu.js deleted file mode 100644 index 2adf9e1d..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['eu']={"wsc":{"btnIgnore":"Ezikusi","btnIgnoreAll":"Denak Ezikusi","btnReplace":"Ordezkatu","btnReplaceAll":"Denak Ordezkatu","btnUndo":"Desegin","changeTo":"Honekin ordezkatu","errorLoading":"Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.","ieSpellDownload":"Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?","manyChanges":"Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira","noChanges":"Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu","noMispell":"Zuzenketa ortografikoa bukatuta: Akatsik ez","noSuggestions":"- Iradokizunik ez -","notAvailable":"Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.","notInDic":"Ez dago hiztegian","oneChange":"Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da","progress":"Zuzenketa ortografikoa martxan...","title":"Ortografia zuzenketa","toolbar":"Ortografia"},"undo":{"redo":"Berregin","undo":"Desegin"},"toolbar":{"toolbarCollapse":"Tresna-barra Txikitu","toolbarExpand":"Tresna-barra Luzatu","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editorearen Tresna-barra"},"table":{"border":"Ertzaren Zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu Gelaxka Aurretik","insertAfter":"Txertatu Gelaxka Ostean","deleteCell":"Kendu Gelaxkak","merge":"Batu Gelaxkak","mergeRight":"Elkartu Eskumara","mergeDown":"Elkartu Behera","splitHorizontal":"Banatu Gelaxkak Horizontalki","splitVertical":"Banatu Gelaxkak Bertikalki","title":"Gelaxken Ezaugarriak","cellType":"Gelaxka Mota","rowSpan":"Hedatutako Lerroak","colSpan":"Hedatutako Zutabeak","wordWrap":"Itzulbira","hAlign":"Lerrokatze Horizontala","vAlign":"Lerrokatze Bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Fondoaren Kolorea","borderColor":"Ertzaren Kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Lerroen hedapena zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedapena zenbaki osoa izan behar da.","chooseColor":"Choose"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu Zutabea Aurretik","insertAfter":"Txertatu Zutabea Ostean","deleteColumn":"Ezabatu Zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu Taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen lerroa","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen Ezaugarriak","row":{"menu":"Lerroa","insertBefore":"Txertatu Lerroa Aurretik","insertAfter":"Txertatu Lerroa Ostean","deleteRow":"Ezabatu Lerroak"},"rows":"Lerroak","summary":"Laburpena","title":"Taularen Ezaugarriak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"stylescombo":{"label":"Estiloa","panelTitle":"Formatu Estiloak","panelTitle1":"Bloke Estiloak","panelTitle2":"Inline Estiloak","panelTitle3":"Objektu Estiloak"},"specialchar":{"options":"Karaktere Berezien Aukerak","title":"Karaktere Berezia Aukeratu","toolbar":"Txertatu Karaktere Berezia"},"sourcearea":{"toolbar":"HTML Iturburua"},"scayt":{"btn_about":"SCAYTi buruz","btn_dictionaries":"Hiztegiak","btn_disable":"Desgaitu SCAYT","btn_enable":"Gaitu SCAYT","btn_langs":"Hizkuntzak","btn_options":"Aukerak","text_title":""},"removeformat":{"toolbar":"Kendu Formatua"},"pastetext":{"button":"Testu Arrunta bezala Itsatsi","title":"Testu Arrunta bezala Itsatsi"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barneko errore bat dela eta ezin izan da testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"magicline":{"title":"Txertatu paragrafoa hemen"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"link":{"acccessKey":"Sarbide-gakoa","advanced":"Aurreratua","advisoryContentType":"Eduki Mota (Content Type)","advisoryTitle":"Izenburua","anchor":{"toolbar":"Aingura","menu":"Ainguraren Ezaugarriak","title":"Ainguraren Ezaugarriak","name":"Ainguraren Izena","errorName":"Idatzi ainguraren izena","remove":"Remove Anchor"},"anchorId":"Elementuaren ID-gatik","anchorName":"Aingura izenagatik","charset":"Estekatutako Karaktere Multzoa","cssClasses":"Estilo-orriko Klaseak","emailAddress":"ePosta Helbidea","emailBody":"Mezuaren Gorputza","emailSubject":"Mezuaren Gaia","id":"Id","info":"Estekaren Informazioa","langCode":"Hizkuntzaren Norabidea","langDir":"Hizkuntzaren Norabidea","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","menu":"Aldatu Esteka","name":"Izena","noAnchors":"(Ez daude aingurak eskuragarri dokumentuan)","noEmail":"Mesedez ePosta helbidea idatzi","noUrl":"Mesedez URL esteka idatzi","other":"<bestelakoa>","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Popup Leihoaren Ezaugarriak","popupFullScreen":"Pantaila Osoa (IE)","popupLeft":"Ezkerreko Posizioa","popupLocationBar":"Kokaleku Barra","popupMenuBar":"Menu Barra","popupResizable":"Tamaina Aldakorra","popupScrollBars":"Korritze Barrak","popupStatusBar":"Egoera Barra","popupToolbar":"Tresna Barra","popupTop":"Goiko Posizioa","rel":"Erlazioa","selectAnchor":"Aingura bat hautatu","styles":"Estiloa","tabIndex":"Tabulazio Indizea","target":"Target (Helburua)","targetFrame":"<marko>","targetFrameName":"Marko Helburuaren Izena","targetPopup":"<popup leihoa>","targetPopupName":"Popup Leihoaren Izena","title":"Esteka","toAnchor":"Aingura orrialde honetan","toEmail":"ePosta","toUrl":"URL","toolbar":"Txertatu/Editatu Esteka","type":"Esteka Mota","unlink":"Kendu Esteka","upload":"Gora kargatu"},"indent":{"indent":"Handitu Koska","outdent":"Txikitu Koska"},"image":{"alertUrl":"Mesedez Irudiaren URLa idatzi","alt":"Ordezko Testua","border":"Ertza","btnUpload":"Zerbitzarira bidalia","button2Img":"Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?","hSpace":"HSpace","img2Button":"Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?","infoTab":"Irudi informazioa","linkTab":"Esteka","lockRatio":"Erlazioa Blokeatu","menu":"Irudi Ezaugarriak","resetSize":"Tamaina Berrezarri","title":"Irudi Ezaugarriak","titleButton":"Irudi Botoiaren Ezaugarriak","upload":"Gora Kargatu","urlMissing":"Irudiaren iturburu URL-a falta da.","vSpace":"VSpace","validateBorder":"Ertza zenbaki oso bat izan behar da.","validateHSpace":"HSpace zenbaki oso bat izan behar da.","validateVSpace":"VSpace zenbaki oso bat izan behar da."},"horizontalrule":{"toolbar":"Txertatu Marra Horizontala"},"format":{"label":"Formatua","panelTitle":"Formatua","tag_address":"Helbidea","tag_div":"Paragrafoa (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Arrunta","tag_pre":"Formateatua"},"fakeobjects":{"anchor":"Aingura","flash":"Flash Animazioa","hiddenfield":"Ezkutuko Eremua","iframe":"IFrame","unknown":"Objektu ezezaguna"},"elementspath":{"eleLabel":"Elementu bidea","eleTitle":"%1 elementua"},"contextmenu":{"options":"Testuingurko Menuaren Aukerak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteArea":"Itsasteko Area","pasteMsg":"Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.","securityMsg":"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.","title":"Itsatsi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Aipamen blokea"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indize","superscript":"Goi-indize","underline":"Azpimarratu"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor(r)i buruz","help":"$1 aztertu laguntza jasotzeko.","moreInfo":"Lizentziari buruzko informazioa gure webgunean:","title":"CKEditor(r)i buruz","userGuide":"CKEditor User's Guide"},"editor":"Testu Aberastuko Editorea","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT 0 sakatu laguntza jasotzeko","browseServer":"Zerbitzaria arakatu","url":"URL","protocol":"Protokoloa","upload":"Gora kargatu","uploadSubmit":"Zerbitzarira bidali","image":"Irudia","flash":"Flasha","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu Eremua","textarea":"Testu-area","hiddenField":"Ezkutuko Eremua","button":"Botoia","select":"Hautespen Eremua","imageButton":"Irudi Botoia","notSet":"<Ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren Norabidea","langDirLtr":"Ezkerretik Eskumara(LTR)","langDirRtl":"Eskumatik Ezkerrera (RTL)","langCode":"Hizkuntza Kodea","longDescr":"URL Deskribapen Luzea","cssClass":"Estilo-orriko Klaseak","advisoryTitle":"Izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Arrastatu tamaina aldatzeko","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Target (Helburua)","targetNew":"Leiho Berria (_blank)","targetTop":"Goieneko Leihoan (_top)","targetSelf":"Leiho Berdinean (_self)","targetParent":"Leiho Gurasoan (_parent)","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko Klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatu","alignLeft":"Ezkerrera","alignRight":"Eskuman","alignCenter":"Erdian","alignJustify":"Justifikatu","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"None","invalidValue":"Balio ezegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidCssLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran CSS neurri unitate batekin (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran HTML neurri unitate batekin (px edo %).","invalidInlineStyle":"Lerroko estiloan zehazten dena tupla \"name : value\" formatuko eta puntu eta komaz bereiztutako tupla bat edo gehiago izan behar dira.","cssLengthTooltip":"Zenbakia bakarrik zehazten bada pixeletan egongo da. CSS neurri unitatea ere zehaztu ahal da (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/fa.js b/platforms/browser/www/lib/ckeditor/lang/fa.js deleted file mode 100644 index d58160ec..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fa']={"wsc":{"btnIgnore":"چشمپوشی","btnIgnoreAll":"چشمپوشی همه","btnReplace":"جایگزینی","btnReplaceAll":"جایگزینی همه","btnUndo":"واچینش","changeTo":"تغییر به","errorLoading":"خطا در بارگیری برنامه خدمات میزبان: %s.","ieSpellDownload":"بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟","manyChanges":"بررسی املا انجام شد. %1 واژه تغییر یافت","noChanges":"بررسی املا انجام شد. هیچ واژهای تغییر نیافت","noMispell":"بررسی املا انجام شد. هیچ غلط املائی یافت نشد","noSuggestions":"- پیشنهادی نیست -","notAvailable":"با عرض پوزش خدمات الان در دسترس نیستند.","notInDic":"در واژه~نامه یافت نشد","oneChange":"بررسی املا انجام شد. یک واژه تغییر یافت","progress":"بررسی املا در حال انجام...","title":"بررسی املا","toolbar":"بررسی املا"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"sourcearea":{"toolbar":"منبع"},"scayt":{"btn_about":"درباره SCAYT","btn_dictionaries":"دیکشنریها","btn_disable":"غیرفعالسازی SCAYT","btn_enable":"فعالسازی SCAYT","btn_langs":"زبانها","btn_options":"گزینهها","text_title":""},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرفته","advisoryContentType":"نوع محتوای کمکی","advisoryTitle":"عنوان کمکی","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگی​های لنگر","title":"ویژگی​های لنگر","name":"نام لنگر","errorName":"لطفا نام لنگر را بنویسید","remove":"حذف لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسه​گان منبع پیوند شده","cssClasses":"کلاس​های شیوه​نامه(Stylesheet)","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهت​نمای زبان","langDir":"جهت​نمای زبان","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطفا نشانی پست الکترونیکی را بنویسید","noUrl":"لطفا URL پیوند را بنویسید","other":"<سایر>","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگی​های پنجرهٴ پاپاپ","popupFullScreen":"تمام صفحه (IE)","popupLeft":"موقعیت چپ","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میله​های پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوار ابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه (style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<فریم>","targetFrameName":"نام فریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صفحه","toEmail":"پست الکترونیکی","toUrl":"URL","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image":{"alertUrl":"لطفا URL تصویر را بنویسید","alt":"متن جایگزین","border":"لبه","btnUpload":"به سرور بفرست","button2Img":"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟","hSpace":"فاصلهٴ افقی","img2Button":"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟","infoTab":"اطلاعات تصویر","linkTab":"پیوند","lockRatio":"قفل کردن نسبت","menu":"ویژگی​های تصویر","resetSize":"بازنشانی اندازه","title":"ویژگی​های تصویر","titleButton":"ویژگی​های دکمهٴ تصویری","upload":"انتقال به سرور","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","vSpace":"فاصلهٴ عمودی","validateBorder":"مقدار خطوط باید یک عدد باشد.","validateHSpace":"مقدار فاصله گذاری افقی باید یک عدد باشد.","validateVSpace":"مقدار فاصله گذاری عمودی باید یک عدد باشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن فلش","hiddenfield":"فیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteArea":"محل چسباندن","pasteMsg":"لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.","securityMsg":"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.","title":"چسباندن"},"button":{"selectedLabel":"%1 (انتخاب شده)"},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","help":" برای راهنمایی $1 را ملاحظه کنید.","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:","title":"درباره CKEditor","userGuide":"راهنمای کاربران CKEditor"},"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","alignLeft":"چپ","alignRight":"راست","alignCenter":"وسط","alignJustify":"بلوک چین","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/fi.js b/platforms/browser/www/lib/ckeditor/lang/fi.js deleted file mode 100644 index 955aa8f0..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fi']={"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"},"undo":{"redo":"Toista","undo":"Kumoa"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"sourcearea":{"toolbar":"Koodi"},"scayt":{"btn_about":"Tietoja oikoluvusta kirjoitetaessa","btn_dictionaries":"Sanakirjat","btn_disable":"Poista käytöstä oikoluku kirjoitetaessa","btn_enable":"Ota käyttöön oikoluku kirjoitettaessa","btn_langs":"Kielet","btn_options":"Asetukset","text_title":""},"removeformat":{"toolbar":"Poista muotoilu"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"magicline":{"title":"Lisää kappale tähän."},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"image":{"alertUrl":"Kirjoita kuvan osoite (URL)","alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"button":{"selectedLabel":"%1 (Valittu)"},"blockquote":{"toolbar":"Lainaus"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignJustify":"Tasaa molemmat reunat","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/fo.js b/platforms/browser/www/lib/ckeditor/lang/fo.js deleted file mode 100644 index bb85f513..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/fo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fo']={"wsc":{"btnIgnore":"Forfjóna","btnIgnoreAll":"Forfjóna alt","btnReplace":"Yvirskriva","btnReplaceAll":"Yvirskriva alt","btnUndo":"Angra","changeTo":"Broyt til","errorLoading":"Feilur við innlesing av application service host: %s.","ieSpellDownload":"Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?","manyChanges":"Rættstavarin liðugur: %1 orð broytt","noChanges":"Rættstavarin liðugur: Einki orð varð broytt","noMispell":"Rættstavarin liðugur: Eingin feilur funnin","noSuggestions":"- Einki uppskot -","notAvailable":"Tíverri, ikki tøkt í løtuni.","notInDic":"Finst ikki í orðabókini","oneChange":"Rættstavarin liðugur: Eitt orð er broytt","progress":"Rættstavarin arbeiðir...","title":"Kanna stavseting","toolbar":"Kanna stavseting"},"undo":{"redo":"Vend aftur","undo":"Angra"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"sourcearea":{"toolbar":"Kelda"},"scayt":{"btn_about":"Um SCAYT","btn_dictionaries":"Orðabøkur","btn_disable":"Nokta SCAYT","btn_enable":"Loyv SCAYT","btn_langs":"Tungumál","btn_options":"Uppseting","text_title":""},"removeformat":{"toolbar":"Strika sniðgeving"},"pastetext":{"button":"Innrita som reinan tekst","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","other":"<annað>","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"<ramma>","targetFrameName":"Vís navn vindeygans","targetPopup":"<popup vindeyga>","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"image":{"alertUrl":"Rita slóðina til myndina","alt":"Alternativur tekstur","border":"Bordi","btnUpload":"Send til ambætaran","button2Img":"Skal valdi myndaknøttur gerast til vanliga mynd?","hSpace":"Høgri breddi","img2Button":"Skal valda mynd gerast til myndaknøtt?","infoTab":"Myndaupplýsingar","linkTab":"Tilknýti","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","resetSize":"Upprunastødd","title":"Myndaeginleikar","titleButton":"Eginleikar fyri myndaknøtt","upload":"Send","urlMissing":"URL til mynd manglar.","vSpace":"Vinstri breddi","validateBorder":"Bordi má vera eitt heiltal.","validateHSpace":"HSpace má vera eitt heiltal.","validateVSpace":"VSpace má vera eitt heiltal."},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteArea":"Avritingarumráði","pasteMsg":"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.","securityMsg":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.","title":"Innrita"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor","help":"Kekka $1 fyri hjálp.","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:","title":"Um CKEditor","userGuide":"CKEditor Brúkaravegleiðing"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýst","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","alignLeft":"Vinstra","alignRight":"Høgra","alignCenter":"Miðsett","alignJustify":"Javnir tekstkantar","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/lang/fr-ca.js deleted file mode 100644 index ad9611a3..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fr-ca']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Changer en","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?","manyChanges":"Vérification d'orthographe terminée: %1 mots modifiés","noChanges":"Vérification d'orthographe terminée: Pas de modifications","noMispell":"Vérification d'orthographe terminée: pas d'erreur trouvée","noSuggestions":"- Pas de suggestion -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Pas dans le dictionnaire","oneChange":"Vérification d'orthographe terminée: Un mot modifié","progress":"Vérification d'orthographe en cours...","title":"Spell Check","toolbar":"Orthographe"},"undo":{"redo":"Refaire","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Supprimer le formatage"},"pastetext":{"button":"Coller comme texte","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"magicline":{"title":"Insérer le paragraphe ici"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu","advisoryTitle":"Description","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Supprimer l'ancre"},"anchorId":"Par ID","anchorName":"Par nom","charset":"Encodage de la cible","cssClasses":"Classes CSS","emailAddress":"Courriel","emailBody":"Corps du message","emailSubject":"Objet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir le courriel","noUrl":"Veuillez saisir l'URL","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position de la gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"<Cadre>","targetFrameName":"Nom du cadre de destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre dans cette page","toEmail":"Courriel","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image":{"alertUrl":"Veuillez saisir l'URL de l'image","alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Désirez-vous transformer l'image sélectionnée en image simple?","hSpace":"Espacement horizontal","img2Button":"Désirez-vous transformer l'image sélectionnée en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image","resetSize":"Taille originale","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un entier.","validateHSpace":"L'espacement horizontal doit être un entier.","validateVSpace":"L'espacement vertical doit être un entier."},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, consulter notre site internet:","title":"À propos de CKEditor","userGuide":"Guide utilisateur de CKEditor"},"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifié","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/fr.js b/platforms/browser/www/lib/ckeditor/lang/fr.js deleted file mode 100644 index 880c71b5..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['fr']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"},"undo":{"redo":"Rétablir","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Editer","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Fractionner horizontalement","splitVertical":"Fractionner verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Césure","hAlign":"Alignement Horizontal","vAlign":"Alignement Vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de Bordure","data":"Données","header":"Entête","yes":"Oui","no":"Non","invalidWidth":"La Largeur de Cellule doit être un nombre.","invalidHeight":"La Hauteur de Cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Choisissez"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonnes","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-Têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucunes","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge intérieure des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"% pourcents","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en page","panelTitle1":"Styles de blocs","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionnez un caractère","toolbar":"Insérer un caractère spécial"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Supprimer la mise en forme"},"pastetext":{"button":"Coller comme texte sans mise en forme","title":"Coller comme texte sans mise en forme"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"maximize":{"maximize":"Agrandir","minimize":"Minimiser"},"magicline":{"title":"Insérez un paragraphe ici"},"list":{"bulletedlist":"Insérer/Supprimer la liste à puces","numberedlist":"Insérer/Supprimer la liste numérotée"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (ex: text/html)","advisoryTitle":"Description (title)","anchor":{"toolbar":"Ancre","menu":"Editer l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Charset de la cible","cssClasses":"Classe CSS","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Infos sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche","menu":"Editer le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse e-mail","noUrl":"Veuillez entrer l'adresse du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Options de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre de status","popupToolbar":"Barre d'outils","popupTop":"Position haute","rel":"Relation","selectAnchor":"Sélectionner l'ancre","styles":"Style","tabIndex":"Index de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du Cadre destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Transformer le lien en ancre dans le texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Envoyer"},"indent":{"indent":"Augmenter le retrait (tabulation)","outdent":"Diminuer le retrait (tabulation)"},"image":{"alertUrl":"Veuillez entrer l'adresse de l'image","alt":"Texte de remplacement","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton image sélectionné en simple image?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Taille d'origine","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Envoyer","urlMissing":"L'adresse source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"Bordure doit être un entier.","validateHSpace":"HSpace doit être un entier.","validateVSpace":"VSpace doit être un entier."},"horizontalrule":{"toolbar":"Ligne horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Formaté"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 éléments"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Sélectionné)"},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, veuillez visiter notre site web:","title":"À propos de CKEditor","userGuide":"Guide de l'utilisateur CKEditor en anglais"},"editor":"Éditeur de Texte Enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Appuyez sur ALT-0 pour l'aide","browseServer":"Explorer le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton Radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<non défini>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue (longdesc => malvoyant)","cssClass":"Classe CSS","advisoryTitle":"Description (title)","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Déplacer pour modifier la taille","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?","options":"Options","target":"Cible (Target)","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à Droite (LTR)","langDirRTL":"Droite à Gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifier","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur incorrecte.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, Indisponible</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/gl.js b/platforms/browser/www/lib/ckeditor/lang/gl.js deleted file mode 100644 index 85f095be..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['gl']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todas","btnReplace":"Substituir","btnReplaceAll":"Substituir Todas","btnUndo":"Desfacer","changeTo":"Cambiar a","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"O corrector ortográfico non está instalado. ¿Quere descargalo agora?","manyChanges":"Corrección ortográfica rematada: %1 verbas substituidas","noChanges":"Corrección ortográfica rematada: Non se substituiu nengunha verba","noMispell":"Corrección ortográfica rematada: Non se atoparon erros","noSuggestions":"- Sen candidatos -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Non está no diccionario","oneChange":"Corrección ortográfica rematada: Unha verba substituida","progress":"Corrección ortográfica en progreso...","title":"Spell Check","toolbar":"Corrección Ortográfica"},"undo":{"redo":"Refacer","undo":"Desfacer"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de obxecto"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"sourcearea":{"toolbar":"Orixe"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Retirar o formato"},"pastetext":{"button":"Pegar como texto simple","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir aquí o parágrafo"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Índice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nome do marco de destino","targetPopup":"<xanela emerxente>","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"image":{"alertUrl":"Escriba o URL da imaxe","alt":"Texto alternativo","border":"Bordo","btnUpload":"Enviar ao servidor","button2Img":"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?","hSpace":"Esp.Horiz.","img2Button":"Quere converter a imaxe seleccionada nun botón de imaxe?","infoTab":"Información da imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propiedades da imaxe","resetSize":"Tamaño orixinal","title":"Propiedades da imaxe","titleButton":"Propiedades do botón de imaxe","upload":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","vSpace":"Esp.Vert.","validateBorder":"O bordo debe ser un número.","validateHSpace":"O espazado horizontal debe ser un número.","validateVSpace":"O espazado vertical debe ser un número."},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opcións do menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prema en Aceptar","securityMsg":"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.","title":"Pegar"},"button":{"selectedLabel":"%1 (seleccionado)"},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"about":{"copy":"Copyright &copy; $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Consulte $1 para obter axuda.","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:","title":"Sobre o CKEditor","userGuide":"Guía do usuario do CKEditor"},"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignJustify":"Xustificado","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"None","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/gu.js b/platforms/browser/www/lib/ckeditor/lang/gu.js deleted file mode 100644 index e445685f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/gu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['gu']={"wsc":{"btnIgnore":"ઇગ્નોર/અવગણના કરવી","btnIgnoreAll":"બધાની ઇગ્નોર/અવગણના કરવી","btnReplace":"બદલવું","btnReplaceAll":"બધા બદલી કરો","btnUndo":"અન્ડૂ","changeTo":"આનાથી બદલવું","errorLoading":"સર્વિસ એપ્લીકેશન લોડ નથી થ: %s.","ieSpellDownload":"સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?","manyChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે","noChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી","noMispell":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી","noSuggestions":"- કઇ સજેશન નથી -","notAvailable":"માફ કરશો, આ સુવિધા ઉપલબ્ધ નથી","notInDic":"શબ્દકોશમાં નથી","oneChange":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે","progress":"શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...","title":"સ્પેલ ","toolbar":"જોડણી (સ્પેલિંગ) તપાસવી"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"scayt":{"btn_about":"SCAYT વિષે","btn_dictionaries":"શબ્દકોશ","btn_disable":"SCAYT ડિસેબલ કરવું","btn_enable":"SCAYT એનેબલ કરવું","btn_langs":"ભાષાઓ","btn_options":"વિકલ્પો","text_title":""},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"link":{"acccessKey":"ઍક્સેસ કી","advanced":"અડ્વાન્સડ","advisoryContentType":"મુખ્ય કન્ટેન્ટ પ્રકાર","advisoryTitle":"મુખ્ય મથાળું","anchor":{"toolbar":"ઍંકર ઇન્સર્ટ/દાખલ કરવી","menu":"ઍંકરના ગુણ","title":"ઍંકરના ગુણ","name":"ઍંકરનું નામ","errorName":"ઍંકરનું નામ ટાઈપ કરો","remove":"સ્થિર નકરવું"},"anchorId":"ઍંકર એલિમન્ટ Id થી પસંદ કરો","anchorName":"ઍંકર નામથી પસંદ કરો","charset":"લિંક રિસૉર્સ કૅરિક્ટર સેટ","cssClasses":"સ્ટાઇલ-શીટ ક્લાસ","emailAddress":"ઈ-મેલ સરનામું","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇન્ફૉ ટૅબ","langCode":"ભાષા લેખવાની પદ્ધતિ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક એડિટ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)","noEmail":"ઈ-મેલ સરનામું ટાઇપ કરો","noUrl":"લિંક URL ટાઇપ કરો","other":"<other> <અન્ય>","popupDependent":"ડિપેન્ડન્ટ (Netscape)","popupFeatures":"પૉપ-અપ વિન્ડો ફીચરસૅ","popupFullScreen":"ફુલ સ્ક્રીન (IE)","popupLeft":"ડાબી બાજુ","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેન્યૂ બાર","popupResizable":"રીસાઈઝએબલ","popupScrollBars":"સ્ક્રોલ બાર","popupStatusBar":"સ્ટૅટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજુ","rel":"સંબંધની સ્થિતિ","selectAnchor":"ઍંકર પસંદ કરો","styles":"સ્ટાઇલ","tabIndex":"ટૅબ ઇન્ડેક્સ","target":"ટાર્ગેટ/લક્ષ્ય","targetFrame":"<ફ્રેમ>","targetFrameName":"ટાર્ગેટ ફ્રેમ નું નામ","targetPopup":"<પૉપ-અપ વિન્ડો>","targetPopupName":"પૉપ-અપ વિન્ડો નું નામ","title":"લિંક","toAnchor":"આ પેજનો ઍંકર","toEmail":"ઈ-મેલ","toUrl":"URL","toolbar":"લિંક ઇન્સર્ટ/દાખલ કરવી","type":"લિંક પ્રકાર","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"image":{"alertUrl":"ચિત્રની URL ટાઇપ કરો","alt":"ઑલ્ટર્નટ ટેક્સ્ટ","border":"બોર્ડર","btnUpload":"આ સર્વરને મોકલવું","button2Img":"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.","hSpace":"સમસ્તરીય જગ્યા","img2Button":"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.","infoTab":"ચિત્ર ની જાણકારી","linkTab":"લિંક","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","resetSize":"રીસેટ સાઇઝ","title":"ચિત્રના ગુણ","titleButton":"ચિત્ર બટનના ગુણ","upload":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","vSpace":"લંબરૂપ જગ્યા","validateBorder":"બોર્ડેર આંકડો હોવો જોઈએ.","validateHSpace":"HSpaceઆંકડો હોવો જોઈએ.","validateVSpace":"VSpace આંકડો હોવો જોઈએ. "},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"fakeobjects":{"anchor":"અનકર","flash":"ફ્લેશ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબ્જેક્ટ"},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો","securityMsg":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.","title":"પેસ્ટ"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","help":"મદદ માટે $1 તપાસો","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ","title":"CKEditor વિષે","userGuide":"CKEditor યુઝર્સ ગાઈડ"},"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"પ્રેસ ALT 0 મદદ માટ","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","alignLeft":"ડાબી બાજુ ગોઠવવું","alignRight":"જમણી","alignCenter":"મધ્ય સેન્ટર","alignJustify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સ્ટાઈલ ની વેલ્યુ \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતું</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/he.js b/platforms/browser/www/lib/ckeditor/lang/he.js deleted file mode 100644 index a72da9a9..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['he']={"wsc":{"btnIgnore":"התעלמות","btnIgnoreAll":"התעלמות מהכל","btnReplace":"החלפה","btnReplaceAll":"החלפת הכל","btnUndo":"החזרה","changeTo":"שינוי ל","errorLoading":"שגיאה בהעלאת השירות: %s.","ieSpellDownload":"בודק האיות לא מותקן, האם להורידו?","manyChanges":"בדיקות איות הסתיימה: %1 מילים שונו","noChanges":"בדיקות איות הסתיימה: לא שונתה אף מילה","noMispell":"בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב","noSuggestions":"- אין הצעות -","notAvailable":"לא נמצא שירות זמין.","notInDic":"לא נמצא במילון","oneChange":"בדיקות איות הסתיימה: שונתה מילה אחת","progress":"בודק האיות בתהליך בדיקה....","title":"בדיקת איות","toolbar":"בדיקת איות"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"sourcearea":{"toolbar":"מקור"},"scayt":{"btn_about":"אודות SCAYT","btn_dictionaries":"מילון","btn_disable":"בטל SCAYT","btn_enable":"אפשר SCAYT","btn_langs":"שפות","btn_options":"אפשרויות","text_title":""},"removeformat":{"toolbar":"הסרת העיצוב"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"magicline":{"title":"הכנס פסקה כאן"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","other":"<אחר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"image":{"alertUrl":"יש להקליד את כתובת התמונה","alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"האם להפוך את תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח אופקי","img2Button":"האם להפוך את התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"איפוס הגודל","title":"מאפייני התמונה","titleButton":"מאפיני כפתור תמונה","upload":"העלאה","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח אנכי","validateBorder":"שדה המסגרת חייב להיות מספר שלם.","validateHSpace":"שדה המרווח האופקי חייב להיות מספר שלם.","validateVSpace":"שדה המרווח האנכי חייב להיות מספר שלם."},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"איזור הדבקה","pasteMsg":"נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.","securityMsg":"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.","title":"הדבקה"},"button":{"selectedLabel":"1% (סומן)"},"blockquote":{"toolbar":"בלוק ציטוט"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","help":"היכנסו ל$1 לעזרה.","moreInfo":"למידע נוסף בקרו באתרנו:","title":"אודות CKEditor","userGuide":"מדריך המשתמש של CKEditor"},"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמאל","alignRight":"לימין","alignCenter":"מרכז","alignJustify":"יישור לשוליים","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/hi.js b/platforms/browser/www/lib/ckeditor/lang/hi.js deleted file mode 100644 index 5b6c5b7d..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/hi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hi']={"wsc":{"btnIgnore":"इग्नोर","btnIgnoreAll":"सभी इग्नोर करें","btnReplace":"रिप्लेस","btnReplaceAll":"सभी रिप्लेस करें","btnUndo":"अन्डू","changeTo":"इसमें बदलें","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?","manyChanges":"वर्तनी की जाँच : %1 शब्द बदले गये","noChanges":"वर्तनी की जाँच :कोई शब्द नहीं बदला गया","noMispell":"वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई","noSuggestions":"- कोई सुझाव नहीं -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"शब्दकोश में नहीं","oneChange":"वर्तनी की जाँच : एक शब्द बदला गया","progress":"वर्तनी की जाँच (स्पॅल-चॅक) जारी है...","title":"Spell Check","toolbar":"वर्तनी (स्पेलिंग) जाँच"},"undo":{"redo":"रीडू","undo":"अन्डू"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"sourcearea":{"toolbar":"सोर्स"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","title":"पेस्ट (सादा टॅक्स्ट)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"link":{"acccessKey":"ऍक्सॅस की","advanced":"ऍड्वान्स्ड","advisoryContentType":"परामर्श कन्टॅन्ट प्रकार","advisoryTitle":"परामर्श शीर्शक","anchor":{"toolbar":"ऐंकर इन्सर्ट/संपादन","menu":"ऐंकर प्रॉपर्टीज़","title":"ऐंकर प्रॉपर्टीज़","name":"ऐंकर का नाम","errorName":"ऐंकर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"ऍलीमॅन्ट Id से","anchorName":"ऐंकर नाम से","charset":"लिंक रिसोर्स करॅक्टर सॅट","cssClasses":"स्टाइल-शीट क्लास","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","other":"<अन्य>","popupDependent":"डिपेन्डॅन्ट (Netscape)","popupFeatures":"पॉप-अप विन्डो फ़ीचर्स","popupFullScreen":"फ़ुल स्क्रीन (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅन्यू बार","popupResizable":"Resizable","popupScrollBars":"स्क्रॉल बार","popupStatusBar":"स्टेटस बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"Relationship","selectAnchor":"ऐंकर चुनें","styles":"स्टाइल","tabIndex":"टैब इन्डॅक्स","target":"टार्गेट","targetFrame":"<फ़्रेम>","targetFrameName":"टार्गेट फ़्रेम का नाम","targetPopup":"<पॉप-अप विन्डो>","targetPopupName":"पॉप-अप विन्डो का नाम","title":"लिंक","toAnchor":"इस पेज का ऐंकर","toEmail":"ई-मेल","toUrl":"URL","toolbar":"लिंक इन्सर्ट/संपादन","type":"लिंक प्रकार","unlink":"लिंक हटायें","upload":"अपलोड"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"image":{"alertUrl":"तस्वीर का URL टाइप करें ","alt":"वैकल्पिक टेक्स्ट","border":"बॉर्डर","btnUpload":"इसे सर्वर को भेजें","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"हॉरिज़ॉन्टल स्पेस","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"तस्वीर की जानकारी","linkTab":"लिंक","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","resetSize":"रीसॅट साइज़","title":"तस्वीर प्रॉपर्टीज़","titleButton":"तस्वीर बटन प्रॉपर्टीज़","upload":"अपलोड","urlMissing":"Image source URL is missing.","vSpace":"वर्टिकल स्पेस","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"fakeobjects":{"anchor":"ऐंकर इन्सर्ट/संपादन","flash":"Flash Animation","hiddenfield":"गुप्त फ़ील्ड","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteArea":"Paste Area","pasteMsg":"Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.","securityMsg":"आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.","title":"पेस्ट"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"ब्लॉक-कोट"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","alignLeft":"दायें","alignRight":"दायें","alignCenter":"बीच में","alignJustify":"ब्लॉक जस्टीफ़ाई","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/hr.js b/platforms/browser/www/lib/ckeditor/lang/hr.js deleted file mode 100644 index 1cddd30c..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hr']={"wsc":{"btnIgnore":"Zanemari","btnIgnoreAll":"Zanemari sve","btnReplace":"Zamijeni","btnReplaceAll":"Zamijeni sve","btnUndo":"Vrati","changeTo":"Promijeni u","errorLoading":"Greška učitavanja aplikacije: %s.","ieSpellDownload":"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?","manyChanges":"Provjera završena: Promijenjeno %1 riječi","noChanges":"Provjera završena: Nije napravljena promjena","noMispell":"Provjera završena: Nema grešaka","noSuggestions":"-Nema preporuke-","notAvailable":"Žao nam je, ali usluga trenutno nije dostupna.","notInDic":"Nije u rječniku","oneChange":"Provjera završena: Jedna riječ promjenjena","progress":"Provjera u tijeku...","title":"Provjera pravopisa","toolbar":"Provjeri pravopis"},"undo":{"redo":"Ponovi","undo":"Poništi"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"sourcearea":{"toolbar":"Kôd"},"scayt":{"btn_about":"O SCAYT","btn_dictionaries":"Rječnici","btn_disable":"Onemogući SCAYT","btn_enable":"Omogući SCAYT","btn_langs":"Jezici","btn_options":"Opcije","text_title":""},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalijepi kao čisti tekst","title":"Zalijepi kao čisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"magicline":{"title":"Ubaci paragraf ovdje"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"Pošalji"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","resetSize":"Obriši veličinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"Pošalji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije izbornika"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O CKEditoru","help":"Provjeri $1 za pomoć.","moreInfo":"Za informacije o licencama posjetite našu web stranicu:","title":"O CKEditoru","userGuide":"Vodič za CKEditor korisnike"},"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Središnje","alignJustify":"Blok poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"None","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/hu.js b/platforms/browser/www/lib/ckeditor/lang/hu.js deleted file mode 100644 index 8476ea2f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['hu']={"wsc":{"btnIgnore":"Kihagyja","btnIgnoreAll":"Mindet kihagyja","btnReplace":"Csere","btnReplaceAll":"Összes cseréje","btnUndo":"Visszavonás","changeTo":"Módosítás","errorLoading":"Hiba a szolgáltatás host betöltése közben: %s.","ieSpellDownload":"A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?","manyChanges":"Helyesírás-ellenőrzés kész: %1 szó cserélve","noChanges":"Helyesírás-ellenőrzés kész: Nincs változtatott szó","noMispell":"Helyesírás-ellenőrzés kész: Nem találtam hibát","noSuggestions":"Nincs javaslat","notAvailable":"Sajnálom, de a szolgáltatás jelenleg nem elérhető.","notInDic":"Nincs a szótárban","oneChange":"Helyesírás-ellenőrzés kész: Egy szó cserélve","progress":"Helyesírás-ellenőrzés folyamatban...","title":"Helyesírás ellenörző","toolbar":"Helyesírás-ellenőrzés"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"sourcearea":{"toolbar":"Forráskód"},"scayt":{"btn_about":"SCAYT névjegy","btn_dictionaries":"Szótár","btn_disable":"SCAYT letiltása","btn_enable":"SCAYT engedélyezése","btn_langs":"Nyelvek","btn_options":"Beállítások","text_title":""},"removeformat":{"toolbar":"Formázás eltávolítása"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"magicline":{"title":"Szúrja be a bekezdést ide"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"image":{"alertUrl":"Töltse ki a kép webcímét","alt":"Buborék szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"A kiválasztott képgombból sima képet szeretne csinálni?","hSpace":"Vízsz. táv","img2Button":"A kiválasztott képből képgombot szeretne csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"Függőleges távolságnak egész számot kell beírni!"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"contextmenu":{"options":"Helyi menü opciók"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mező","pasteMsg":"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"button":{"selectedLabel":"%1 (Kiválasztva)"},"blockquote":{"toolbar":"Idézet blokk"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"CKEditor névjegy","help":"Itt találsz segítséget: $1","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:","title":"CKEditor névjegy","userGuide":"CKEditor Felhasználói útmutató"},"editor":"HTML szerkesztő","editorPanel":"Rich Text szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtettmező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignJustify":"Sorkizárt","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"None","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/id.js b/platforms/browser/www/lib/ckeditor/lang/id.js deleted file mode 100644 index 1ee75ecd..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['id']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Editor toolbars"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"sourcearea":{"toolbar":"Sumber"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Hapus Format"},"pastetext":{"button":"Tempel sebagai teks polos","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"magicline":{"title":"Masukkan paragraf disini"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Penasehat Judul","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Kelas Stylesheet","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Kode Bahasa","langDir":"Arah Bahasa","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Edit Link","name":"Nama","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Gaya","tabIndex":"Tab Index","target":"Sasaran","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Tautan","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Tautan","type":"Link Type","unlink":"Unlink","upload":"Unggah"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"image":{"alertUrl":"Mohon tulis URL gambar","alt":"Teks alternatif","border":"Batas","btnUpload":"Kirim ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Gambar","linkTab":"Tautan","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Unggah","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"fakeobjects":{"anchor":"Anchor","flash":"Animasi Flash","hiddenfield":"Kolom Tersembunyi","iframe":"IFrame","unknown":"Obyek Tak Dikenal"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteArea":"Area Tempel","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tempel"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Kutipan Blok"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"about":{"copy":"Hak cipta &copy; $1. All rights reserved.","dlgTitle":"Tentang CKEditor","help":"Cel $1 untuk bantuan.","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:","title":"Tentang CKEditor","userGuide":"Petunjuk Pengguna CKEditor"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Rata kiri-kanan","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/is.js b/platforms/browser/www/lib/ckeditor/lang/is.js deleted file mode 100644 index 1cc2d663..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/is.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['is']={"wsc":{"btnIgnore":"Hunsa","btnIgnoreAll":"Hunsa allt","btnReplace":"Skipta","btnReplaceAll":"Skipta öllu","btnUndo":"Til baka","changeTo":"Tillaga","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Villuleit ekki sett upp.<br>Viltu setja hana upp?","manyChanges":"Villuleit lokið: %1 orðum breytt","noChanges":"Villuleit lokið: Engu orði breytt","noMispell":"Villuleit lokið: Engin villa fannst","noSuggestions":"- engar tillögur -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Ekki í orðabókinni","oneChange":"Villuleit lokið: Einu orði breytt","progress":"Villuleit í gangi...","title":"Spell Check","toolbar":"Villuleit"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"sourcearea":{"toolbar":"Kóði"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Fjarlægja snið"},"pastetext":{"button":"Líma sem ósniðinn texta","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"<Engin bókamerki á skrá>","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","other":"<annar>","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"<rammi>","targetFrameName":"Nafn markglugga","targetPopup":"<sprettigluggi>","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"image":{"alertUrl":"Sláðu inn slóðina að myndinni","alt":"Baklægur texti","border":"Rammi","btnUpload":"Hlaða upp","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Vinstri bil","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Almennt","linkTab":"Stikla","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","resetSize":"Reikna stærð","title":"Eigindi myndar","titleButton":"Eigindi myndahnapps","upload":"Hlaða upp","urlMissing":"Image source URL is missing.","vSpace":"Hægri bil","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Lóðrétt lína"},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteArea":"Paste Area","pasteMsg":"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.","securityMsg":"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.","title":"Líma"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Inndráttur"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","alignLeft":"Vinstri","alignRight":"Hægri","alignCenter":"Miðjað","alignJustify":"Jafna báðum megin","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/it.js b/platforms/browser/www/lib/ckeditor/lang/it.js deleted file mode 100644 index 5d4ee53c..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['it']={"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora tutto","btnReplace":"Cambia","btnReplaceAll":"Cambia tutto","btnUndo":"Annulla","changeTo":"Cambia in","errorLoading":"Errore nel caricamento dell'host col servizio applicativo: %s.","ieSpellDownload":"Contollo ortografico non installato. Lo vuoi scaricare ora?","manyChanges":"Controllo ortografico completato: %1 parole cambiate","noChanges":"Controllo ortografico completato: nessuna parola cambiata","noMispell":"Controllo ortografico completato: nessun errore trovato","noSuggestions":"- Nessun suggerimento -","notAvailable":"Il servizio non è momentaneamente disponibile.","notInDic":"Non nel dizionario","oneChange":"Controllo ortografico completato: 1 parola cambiata","progress":"Controllo ortografico in corso","title":"Controllo ortografico","toolbar":"Correttore ortografico"},"undo":{"redo":"Ripristina","undo":"Annulla"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"sourcearea":{"toolbar":"Sorgente"},"scayt":{"btn_about":"About COMS","btn_dictionaries":"Dizionari","btn_disable":"Disabilita COMS","btn_enable":"Abilita COMS","btn_langs":"Lingue","btn_options":"Opzioni","text_title":""},"removeformat":{"toolbar":"Elimina formattazione"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"magicline":{"title":"Inserisci paragrafo qui"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"image":{"alertUrl":"Devi inserire l'URL per l'immagine","alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opzioni del menù contestuale"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"button":{"selectedLabel":"%1 (selezionato)"},"blockquote":{"toolbar":"Citazione"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Riguardo CKEditor","help":"Vedi $1 per l'aiuto.","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:","title":"Riguardo CKEditor","userGuide":"Guida Utente CKEditor"},"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignJustify":"Giustifica","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ja.js b/platforms/browser/www/lib/ckeditor/lang/ja.js deleted file mode 100644 index 2d4b86f8..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ja']={"wsc":{"btnIgnore":"無視","btnIgnoreAll":"すべて無視","btnReplace":"置換","btnReplaceAll":"すべて置換","btnUndo":"やり直し","changeTo":"変更","errorLoading":"アプリケーションサービスホスト読込みエラー: %s.","ieSpellDownload":"スペルチェッカーがインストールされていません。今すぐダウンロードしますか?","manyChanges":"スペルチェック完了: %1 語句変更されました","noChanges":"スペルチェック完了: 語句は変更されませんでした","noMispell":"スペルチェック完了: スペルの誤りはありませんでした","noSuggestions":"- 該当なし -","notAvailable":"申し訳ありません、現在サービスを利用することができません","notInDic":"辞書にありません","oneChange":"スペルチェック完了: 1語句変更されました","progress":"スペルチェック処理中...","title":"スペルチェック","toolbar":"スペルチェック"},"undo":{"redo":"やり直す","undo":"元に戻す"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールバー"},"table":{"border":"枠線の幅","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルを前に挿入","insertAfter":"セルを後に挿入","deleteCell":"セルを削除","merge":"セルを結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向に分割","splitVertical":"セルを垂直方向に分割","title":"セルのプロパティ","cellType":"セルの種類","rowSpan":"行の結合数","colSpan":"列の結合数","wordWrap":"単語の折り返し","hAlign":"水平方向の配置","vAlign":"垂直方向の配置","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"sourcearea":{"toolbar":"ソース"},"scayt":{"btn_about":"SCAYTバージョン","btn_dictionaries":"辞書","btn_disable":"SCAYT無効","btn_enable":"SCAYT有効","btn_langs":"言語","btn_options":"オプション","text_title":""},"removeformat":{"toolbar":"書式を解除"},"pastetext":{"button":"プレーンテキストとして貼り付け","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"ここに段落を挿入"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"link":{"acccessKey":"アクセスキー","advanced":"高度な設定","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカーの編集","title":"アンカーのプロパティ","name":"アンカー名","errorName":"アンカー名を入力してください。","remove":"アンカーを削除"},"anchorId":"エレメントID","anchorName":"アンカー名","charset":"リンク先のcharset","cssClasses":"スタイルシートクラス","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件名","id":"Id","info":"ハイパーリンク情報","langCode":"言語コード","langDir":"文字表記の方向","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","menu":"リンクを編集","name":"Name属性","noAnchors":"(このドキュメント内にアンカーはありません)","noEmail":"メールアドレスを入力してください。","noUrl":"リンクURLを入力してください。","other":"<その他の>","popupDependent":"開いたウィンドウに連動して閉じる (Netscape)","popupFeatures":"ポップアップウィンドウ特徴","popupFullScreen":"全画面モード(IE)","popupLeft":"左端からの座標で指定","popupLocationBar":"ロケーションバー","popupMenuBar":"メニューバー","popupResizable":"サイズ可変","popupScrollBars":"スクロールバー","popupStatusBar":"ステータスバー","popupToolbar":"ツールバー","popupTop":"上端からの座標で指定","rel":"関連リンク","selectAnchor":"アンカーを選択","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"ターゲットのフレーム名","targetPopup":"<ポップアップウィンドウ>","targetPopupName":"ポップアップウィンドウ名","title":"ハイパーリンク","toAnchor":"ページ内のアンカー","toEmail":"E-Mail","toUrl":"URL","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンクを削除","upload":"アップロード"},"indent":{"indent":"インデント","outdent":"インデント解除"},"image":{"alertUrl":"画像のURLを入力してください","alt":"代替テキスト","border":"枠線の幅","btnUpload":"サーバーに送信","button2Img":"選択した画像ボタンを画像に変換しますか?","hSpace":"水平間隔","img2Button":"選択した画像を画像ボタンに変換しますか?","infoTab":"画像情報","linkTab":"リンク","lockRatio":"比率を固定","menu":"画像のプロパティ","resetSize":"サイズをリセット","title":"画像のプロパティ","titleButton":"画像ボタンのプロパティ","upload":"アップロード","urlMissing":"画像のURLを入力してください。","vSpace":"垂直間隔","validateBorder":"枠線の幅は数値で入力してください。","validateHSpace":"水平間隔は数値で入力してください。","validateVSpace":"垂直間隔は数値で入力してください。"},"horizontalrule":{"toolbar":"水平線"},"format":{"label":"書式","panelTitle":"段落の書式","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"不可視フィールド","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"contextmenu":{"options":"コンテキストメニューオプション"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteArea":"貼り付け場所","pasteMsg":"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼り付けて、<STRONG>OK</STRONG>を押してください。","securityMsg":"ブラウザのセキュリティ設定により、エディタはクリップボードデータに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。","title":"貼り付け"},"button":{"selectedLabel":"%1 (選択中)"},"blockquote":{"toolbar":"ブロック引用文"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorについて","help":"$1 のヘルプを見てください。","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:","title":"CKEditorについて","userGuide":"CKEditor User's Guide"},"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?","options":"オプション","target":"ターゲット","targetNew":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","alignLeft":"左","alignRight":"右","alignCenter":"中央","alignJustify":"両端揃え","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidCssLength":"入力された \"%1\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。","invalidHtmlLength":"入力された \"%1\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。","invalidInlineStyle":"入力されたインラインスタイルの値は、\"名前 : 値\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ka.js b/platforms/browser/www/lib/ckeditor/lang/ka.js deleted file mode 100644 index a92b646f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ka.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ka']={"wsc":{"btnIgnore":"უგულებელყოფა","btnIgnoreAll":"ყველას უგულებელყოფა","btnReplace":"შეცვლა","btnReplaceAll":"ყველას შეცვლა","btnUndo":"გაუქმება","changeTo":"შეცვლელი","errorLoading":"სერვისის გამოძახების შეცდომა: %s.","ieSpellDownload":"მართლწერის შემოწმება არაა დაინსტალირებული. ჩამოვქაჩოთ ინტერნეტიდან?","manyChanges":"მართლწერის შემოწმება: %1 სიტყვა შეიცვალა","noChanges":"მართლწერის შემოწმება: არაფერი შეცვლილა","noMispell":"მართლწერის შემოწმება: შეცდომა არ მოიძებნა","noSuggestions":"- არაა შემოთავაზება -","notAvailable":"უკაცრავად, ეს სერვისი ამჟამად მიუწვდომელია.","notInDic":"არაა ლექსიკონში","oneChange":"მართლწერის შემოწმება: ერთი სიტყვა შეიცვალა","progress":"მიმდინარეობს მართლწერის შემოწმება...","title":"მართლწერა","toolbar":"მართლწერა"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"sourcearea":{"toolbar":"კოდები"},"scayt":{"btn_about":"SCAYT-ის შესახებ","btn_dictionaries":"ლექსიკონები","btn_disable":"SCAYT-ის გამორთვა","btn_enable":"SCAYT-ის ჩართვა","btn_langs":"ენები","btn_options":"პარამეტრები","text_title":""},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"link":{"acccessKey":"წვდომის ღილაკი","advanced":"დაწვრილებით","advisoryContentType":"შიგთავსის ტიპი","advisoryTitle":"სათაური","anchor":{"toolbar":"ღუზა","menu":"ღუზის რედაქტირება","title":"ღუზის პარამეტრები","name":"ღუზუს სახელი","errorName":"აკრიფეთ ღუზის სახელი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სახელით","charset":"კოდირება","cssClasses":"CSS კლასი","emailAddress":"ელფოსტის მისამართები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სათაური","id":"Id","info":"ბმულის ინფორმაცია","langCode":"ენის კოდი","langDir":"ენის მიმართულება","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","menu":"ბმულის რედაქტირება","name":"სახელი","noAnchors":"(ამ დოკუმენტში ღუზა არაა)","noEmail":"აკრიფეთ ელფოსტის მისამართი","noUrl":"აკრიფეთ ბმულის URL","other":"<სხვა>","popupDependent":"დამოკიდებული (Netscape)","popupFeatures":"Popup ფანჯრის პარამეტრები","popupFullScreen":"მთელი ეკრანი (IE)","popupLeft":"მარცხენა პოზიცია","popupLocationBar":"ნავიგაციის ზოლი","popupMenuBar":"მენიუს ზოლი","popupResizable":"ცვალებადი ზომით","popupScrollBars":"გადახვევის ზოლები","popupStatusBar":"სტატუსის ზოლი","popupToolbar":"ხელსაწყოთა ზოლი","popupTop":"ზედა პოზიცია","rel":"კავშირი","selectAnchor":"აირჩიეთ ღუზა","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გახსნის ადგილი","targetFrame":"<frame>","targetFrameName":"Frame-ის სახელი","targetPopup":"<popup ფანჯარა>","targetPopupName":"Popup ფანჯრის სახელი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზაზე","toEmail":"ელფოსტა","toUrl":"URL","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მოხსნა","upload":"აქაჩვა"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"image":{"alertUrl":"აკრიფეთ სურათის URL","alt":"სანაცვლო ტექსტი","border":"ჩარჩო","btnUpload":"სერვერისთვის გაგზავნა","button2Img":"გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?","hSpace":"ჰორიზონტალური სივრცე","img2Button":"გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?","infoTab":"სურათის ინფორმცია","linkTab":"ბმული","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","resetSize":"ზომის დაბრუნება","title":"სურათის პარამეტრები","titleButton":"სურათიანი ღილაკის პარამეტრები","upload":"ატვირთვა","urlMissing":"სურათის URL არაა შევსებული.","vSpace":"ვერტიკალური სივრცე","validateBorder":"ჩარჩო მთელი რიცხვი უნდა იყოს.","validateHSpace":"ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.","validateVSpace":"ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს."},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"fakeobjects":{"anchor":"ღუზა","flash":"Flash ანიმაცია","hiddenfield":"მალული ველი","iframe":"IFrame","unknown":"უცნობი ობიექტი"},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteArea":"ჩასმის არე","pasteMsg":"ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (<strong>Ctrl/Cmd+V</strong>) და დააჭირეთ OK-ს","securityMsg":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.","title":"ჩასმა"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"ციტატა"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"about":{"copy":"Copyright &copy; $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","help":"დახმარებისთვის იხილეთ $1.","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:","title":"CKEditor-ის შესახებ","userGuide":"CKEditor-ის მომხმარებლის სახელმძღვანელო"},"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","alignLeft":"მარცხენა","alignRight":"მარჯვენა","alignCenter":"შუა","alignJustify":"両端揃え","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდომელია</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/km.js b/platforms/browser/www/lib/ckeditor/lang/km.js deleted file mode 100644 index c96529b4..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['km']={"wsc":{"btnIgnore":"មិនផ្លាស់ប្តូរ","btnIgnoreAll":"មិនផ្លាស់ប្តូរ ទាំងអស់","btnReplace":"ជំនួស","btnReplaceAll":"ជំនួសទាំងអស់","btnUndo":"សារឡើងវិញ","changeTo":"ផ្លាស់ប្តូរទៅ","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?","manyChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ","noChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ","noMispell":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស","noSuggestions":"- គ្មានសំណើរ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"គ្មានក្នុងវចនានុក្រម","oneChange":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ","progress":"កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...","title":"Spell Check","toolbar":"ពិនិត្យអក្ខរាវិរុទ្ធ"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"table":{"border":"ទំហំ​បន្ទាត់​ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូល​ក្រឡា​ពីមុខ","insertAfter":"បញ្ចូល​ក្រឡា​ពី​ក្រោយ","deleteCell":"លុប​ក្រឡា","merge":"បញ្ចូល​ក្រឡា​ចូល​គ្នា","mergeRight":"បញ្ចូល​គ្នា​ខាង​ស្ដាំ","mergeDown":"បញ្ចូល​គ្នា​ចុះ​ក្រោម","splitHorizontal":"ពុះ​ក្រឡា​ផ្ដេក","splitVertical":"ពុះ​ក្រឡា​បញ្ឈរ","title":"លក្ខណៈ​ក្រឡា","cellType":"ប្រភេទ​ក្រឡា","rowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា","colSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា","wordWrap":"រុំ​ពាក្យ","hAlign":"ការ​តម្រឹម​ផ្ដេក","vAlign":"ការ​តម្រឹម​បញ្ឈរ","alignBaseline":"ខ្សែ​បន្ទាត់​គោល","bgColor":"ពណ៌​ផ្ទៃ​ក្រោយ","borderColor":"ពណ៌​បន្ទាត់​ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidHeight":"កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidRowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","invalidColSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះ​ក្រឡា","cellSpace":"គម្លាត​ក្រឡា","column":{"menu":"ជួរ​ឈរ","insertBefore":"បញ្ចូល​ជួរ​ឈរ​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ","deleteColumn":"លុប​ជួរ​ឈរ"},"columns":"ជួរឈរ","deleteTable":"លុប​តារាង","headers":"ក្បាល","headersBoth":"ទាំង​ពីរ","headersColumn":"ជួរ​ឈរ​ដំបូង","headersNone":"មិន​មាន","headersRow":"ជួរ​ដេក​ដំបូង","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"link":{"acccessKey":"សោរ​ចូល","advanced":"កម្រិត​ខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ​ប្រឹក្សា","advisoryTitle":"ចំណងជើង​ប្រឹក្សា","anchor":{"toolbar":"យុថ្កា","menu":"កែ​យុថ្កា","title":"លក្ខណៈ​យុថ្កា","name":"ឈ្មោះ​យុថ្កា","errorName":"សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា","remove":"ដក​យុថ្កា​ចេញ"},"anchorId":"តាម ID ធាតុ","anchorName":"តាម​ឈ្មោះ​យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អាសយដ្ឋាន​អ៊ីមែល","emailBody":"តួ​អត្ថបទ","emailSubject":"ប្រធានបទ​សារ","id":"Id","info":"ព័ត៌មាន​ពី​តំណ","langCode":"កូដ​ភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែ​តំណ","name":"ឈ្មោះ","noAnchors":"(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)","noEmail":"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល","noUrl":"សូម​បញ្ចូល​តំណ URL","other":"<ផ្សេង​ទៀត>","popupDependent":"Dependent (Netscape)","popupFeatures":"មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង","popupFullScreen":"ពេញ​អេក្រង់ (IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របារ​ទីតាំង","popupMenuBar":"របារ​ម៉ឺនុយ","popupResizable":"អាច​ប្ដូរ​ទំហំ","popupScrollBars":"របារ​រំកិល","popupStatusBar":"របារ​ស្ថានភាព","popupToolbar":"របារ​ឧបករណ៍","popupTop":"ទីតាំង​កំពូល","rel":"សម្ពន្ធ​ភាព","selectAnchor":"រើស​យក​យុថ្កា​មួយ","styles":"ស្ទីល","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ស៊ុម>","targetFrameName":"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ","targetPopup":"<វីនដូ​ផុស​ឡើង>","targetPopupName":"ឈ្មោះ​វីនដូត​ផុស​ឡើង","title":"តំណ","toAnchor":"ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"តំណ","type":"ប្រភេទ​តំណ","unlink":"ផ្ដាច់​តំណ","upload":"ផ្ទុក​ឡើង"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"image":{"alertUrl":"សូម​បញ្ចូល URL រូបភាព","alt":"អត្ថបទជំនួស","border":"ស៊ុម","btnUpload":"ផ្ញើ​ទៅ​ម៉ាស៊ីន​បម្រើ","button2Img":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​ប៊ូតុង​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​រូបភាព​ធម្មតា​មួយ​មែនទេ?","hSpace":"គម្លាត​ផ្ដេក","img2Button":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​ប៊ូតុង​រូបភាព​មែនទេ?","infoTab":"ពត៌មានអំពីរូបភាព","linkTab":"តំណ","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ខណៈ​រូបភាព","resetSize":"កំណត់ទំហំឡើងវិញ","title":"លក្ខណៈ​រូបភាព","titleButton":"លក្ខណៈ​ប៊ូតុង​រូបភាព","upload":"ផ្ទុកឡើង","urlMissing":"ខ្វះ URL ប្រភព​រូប​ភាព។","vSpace":"គម្លាត​បញ្ឈរ","validateBorder":"ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","validateHSpace":"គម្លាត​ផ្ដេក​ត្រូវ​តែ​ជា​លេខ។","validateVSpace":"គម្លាត​បញ្ឈរ​ត្រូវ​តែ​ជា​លេខ។"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់​កថាខណ្ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មតា (DIV)","tag_h1":"ចំណង​ជើង 1","tag_h2":"ចំណង​ជើង 2","tag_h3":"ចំណង​ជើង 3","tag_h4":"ចំណង​ជើង 4","tag_h5":"ចំណង​ជើង 5","tag_h6":"ចំណង​ជើង 6","tag_p":"ធម្មតា","tag_pre":"Formatted"},"fakeobjects":{"anchor":"យុថ្កា","flash":"Flash មាន​ចលនា","hiddenfield":"វាល​កំបាំង","iframe":"IFrame","unknown":"វត្ថុ​មិន​ស្គាល់"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។","securityMsg":"ព្រោះតែ​ការកំណត់​សុវត្ថិភាព ប្រអប់សរសេរ​មិន​អាចចាប់​យកទិន្នន័យពីក្តារតម្បៀតខ្ទាស់​អ្នក​​ដោយផ្ទាល់​បានទេ។ អ្នក​ត្រូវចំលង​ដាក់វាម្តង​ទៀត ក្នុងផ្ទាំងនេះ។","title":"បិទ​ភ្ជាប់"},"button":{"selectedLabel":"%1 (បាន​ជ្រើស​រើស)"},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"about":{"copy":"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","help":"ពិនិត្យ $1 សម្រាប់​ជំនួយ។","moreInfo":"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖","title":"អំពី CKEditor","userGuide":"វិធី​ប្រើ​ប្រាស់ CKEditor"},"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"Textarea","hiddenField":"វាល​កំបាំង","button":"ប៊ូតុង","select":"វាល​ជម្រើស","imageButton":"ប៊ូតុង​រូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខ​កូដ​ភាសា","longDescr":"URL អធិប្បាយ​វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណង​ជើង​ណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើល​ជា​មុន","resize":"ប្ដូរ​ទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិត​ខ្ពស់","validateNumberFailed":"តម្លៃ​នេះ​ពុំ​មែន​ជា​លេខ​ទេ។","confirmNewPage":"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាតិកា​នេះ នឹង​ត្រូវ​បាត់​បង់។ តើ​អ្នក​ពិត​ជា​ចង់​ផ្ទុក​ទំព័រ​ថ្មី​មែនទេ?","confirmCancel":"ការ​កំណត់​មួយ​ចំនួន​ត្រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ តើ​អ្នក​ពិត​ជា​ចង់​បិទ​ប្រអប់​នេះ​មែនទេ?","options":"ការ​កំណត់","target":"គោលដៅ","targetNew":"វីនដូ​ថ្មី (_blank)","targetTop":"វីនដូ​លើ​គេ (_top)","targetSelf":"វីនដូ​ដូច​គ្នា (_self)","targetParent":"វីនដូ​មេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់​ទីតាំង","alignLeft":"ខាងឆ្វង","alignRight":"ខាងស្តាំ","alignCenter":"កណ្តាល","alignJustify":"両端揃え","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"អត់","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidCssLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃ​កំណត់​សម្រាប់​រចនាបថ​ក្នុង​តួ ត្រូវ​តែ​មាន​មួយ​ឬ​ធាតុ​ច្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \"ឈ្មោះ : តម្លៃ\" ហើយ​ញែក​ចេញ​ពី​គ្នា​ដោយ​ចុច​ក្បៀស។","cssLengthTooltip":"បញ្ចូល​លេខ​សម្រាប់​តម្លៃ​ជា​ភិចសែល ឬ​លេខ​ដែល​មាន​ឯកតា​ត្រឹមត្រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1<span class=\"cke_accessibility\">, មិន​មាន</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ko.js b/platforms/browser/www/lib/ckeditor/lang/ko.js deleted file mode 100644 index aa75cb8b..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ko']={"wsc":{"btnIgnore":"건너뜀","btnIgnoreAll":"모두 건너뜀","btnReplace":"변경","btnReplaceAll":"모두 변경","btnUndo":"취소","changeTo":"변경할 단어","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?","manyChanges":"철자검사 완료: %1 단어가 변경되었습니다.","noChanges":"철자검사 완료: 변경된 단어가 없습니다.","noMispell":"철자검사 완료: 잘못된 철자가 없습니다.","noSuggestions":"- 추천단어 없음 -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"사전에 없는 단어","oneChange":"철자검사 완료: 단어가 변경되었습니다.","progress":"철자검사를 진행중입니다...","title":"Spell Check","toolbar":"철자검사"},"undo":{"redo":"재실행","undo":"취소"},"toolbar":{"toolbarCollapse":"툴바 삭제","toolbarExpand":"확장 툴바","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"편집자용 툴바들"},"table":{"border":"테두리 크기","caption":"캡션","cell":{"menu":"셀/칸(Cell)","insertBefore":"앞에 셀/칸 삽입","insertAfter":"뒤에 셀/칸 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 뭉치기","mergeDown":"왼쪽 뭉치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열(Column)","insertBefore":"앞에 열 삽입","insertAfter":"뒤에 열 삽입","deleteColumn":"세로줄 삭제"},"columns":"세로줄","deleteTable":"표 삭제","headers":"해더","headersBoth":"모두","headersColumn":"첫 열","headersNone":"None","headersRow":"첫 행","invalidBorder":"테두리 크기는 숫자여야 합니다.","invalidCellPadding":"셀 안쪽의 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"행 번호는 0보다 큰 숫자여야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 큰 숫자여야 합니다.","invalidWidth":"표의 폭은 숫자여야 합니다.","menu":"표 설정","row":{"menu":"행(Row)","insertBefore":"앞에 행 삽입","insertAfter":"뒤에 행 삽입","deleteRow":"가로줄 삭제"},"rows":"가로줄","summary":"요약","title":"표 설정","toolbar":"표","widthPc":"퍼센트","widthPx":"픽셀","widthUnit":"폭 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"오브젝트 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcearea":{"toolbar":"소스"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"포맷 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣기 할 텍스트는 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 MS Word 포멧을 삭제 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 형식에서 붙여넣기","toolbar":"MS Word 형식에서 붙여넣기"},"maximize":{"maximize":"최대","minimize":"최소"},"magicline":{"title":"여기에 그래프 삽입"},"list":{"bulletedlist":"순서없는 목록","numberedlist":"순서있는 목록"},"link":{"acccessKey":"엑세스 키","advanced":"자세히","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"책갈피 삽입/변경","menu":"책갈피 속성","title":"책갈피 속성","name":"책갈피 이름","errorName":"책갈피 이름을 입력하십시요.","remove":"Remove Anchor"},"anchorId":"책갈피 ID","anchorName":"책갈피 이름","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"이메일 주소","emailBody":"내용","emailSubject":"제목","id":"ID","info":"링크 정보","langCode":"쓰기 방향","langDir":"쓰기 방향","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","menu":"링크 수정","name":"Name","noAnchors":"(문서에 책갈피가 없습니다.)","noEmail":"이메일주소를 입력하십시요.","noUrl":"링크 URL을 입력하십시요.","other":"<기타>","popupDependent":"Dependent (Netscape)","popupFeatures":"팝업창 설정","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소표시줄","popupMenuBar":"메뉴바","popupResizable":"크기 조절 가능","popupScrollBars":"스크롤바","popupStatusBar":"상태바","popupToolbar":"툴바","popupTop":"윗쪽 위치","rel":"관계","selectAnchor":"책갈피 선택","styles":"Style","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 이름","targetPopup":"<팝업창>","targetPopupName":"팝업창 이름","title":"링크","toAnchor":"책갈피","toEmail":"이메일","toUrl":"URL","toolbar":"링크 삽입/변경","type":"링크 종류","unlink":"링크 삭제","upload":"업로드"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image":{"alertUrl":"이미지 URL을 입력하십시요","alt":"이미지 설명","border":"테두리","btnUpload":"서버로 전송","button2Img":"단순 이미지에서 선택한 이미지 버튼을 변환하시겠습니까?","hSpace":"수평여백","img2Button":"이미지 버튼에 선택한 이미지를 변환하시겠습니까?","infoTab":"이미지 정보","linkTab":"링크","lockRatio":"비율 유지","menu":"이미지 설정","resetSize":"원래 크기로","title":"이미지 설정","titleButton":"이미지버튼 속성","upload":"업로드","urlMissing":"이미지 소스 URL이 없습니다.","vSpace":"수직여백","validateBorder":"테두리는 정수여야 합니다.","validateHSpace":"가로 길이는 정수여야 합니다.","validateVSpace":"세로 길이는 정수여야 합니다."},"horizontalrule":{"toolbar":"수평선 삽입"},"format":{"label":"포맷","panelTitle":"포맷","tag_address":"Address","tag_div":"기본 (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"책갈피 삽입/변경","flash":"Flash Animation","hiddenfield":"숨김필드","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"요소 위치","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사하기","copyError":"브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+C).","cut":"잘라내기","cutError":"브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+X).","paste":"붙여넣기","pasteArea":"범위 붙여넣기","pasteMsg":"키보드의 (<STRONG>Ctrl/Cmd+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.","securityMsg":"브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.","title":"붙여넣기"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"인용 블록"},"basicstyles":{"bold":"진하게","italic":"이텔릭","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 &copy; $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","help":"도움이 필요하시면 $1 를 확인하세요","moreInfo":"라이센스에 대한 정보를 보고싶다면 우리의 웹 사이트를 방문하세요:","title":"CKEditor에 대하여","userGuide":"CKEditor User's Guide"},"editor":"리치 텍스트 편집기","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"도움이 필요하시면 ALT 0 을 누르세요","browseServer":"서버 보기","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래쉬","form":"폼","checkbox":"체크박스","radio":"라디오버튼","textField":"입력필드","textarea":"입력영역","hiddenField":"숨김필드","button":"버튼","select":"펼침목록","imageButton":"이미지버튼","notSet":"<설정되지 않음>","id":"ID","name":"Name","langDir":"쓰기 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"URL 설명","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"예","cancel":"아니오","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"몇몇개의 옵션이 바꼈습니다. 정말로 창을 닫으시겠습니까?","options":"옵션","target":"타겟","targetNew":"새로운 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"너비","height":"높이","align":"정렬","alignLeft":"왼쪽","alignRight":"오른쪽","alignCenter":"가운데","alignJustify":"両端揃え","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"None","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, 사용할 수 없음</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ku.js b/platforms/browser/www/lib/ckeditor/lang/ku.js deleted file mode 100644 index ee193520..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ku']={"wsc":{"btnIgnore":"پشتگوێ کردن","btnIgnoreAll":"پشتگوێکردنی ههمووی","btnReplace":"لهبریدانن","btnReplaceAll":"لهبریدانانی ههمووی","btnUndo":"پووچکردنهوه","changeTo":"گۆڕینی بۆ","errorLoading":"ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.","ieSpellDownload":"پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?","manyChanges":"پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ی وشهکان گۆڕدرا","noChanges":"پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا","noMispell":"پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه","noSuggestions":"- هیچ پێشنیارێك -","notAvailable":"ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.","notInDic":"لهفهرههنگ دانیه","oneChange":"پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا","progress":"پشکنینی ڕێنووس لهبهردهوامبوون دایه...","title":"پشکنینی ڕێنووس","toolbar":"پشکنینی ڕێنووس"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لەپێش","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی لەگەڵ ڕاست","mergeDown":"تێکەڵکردنی لەگەڵ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"ڕەنگی پاشبنەما","borderColor":"ڕەنگی پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون لەپێش","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"sourcearea":{"toolbar":"سەرچاوە"},"scayt":{"btn_about":"دهربارهی SCAYT","btn_dictionaries":"فهرههنگهکان","btn_disable":"ناچالاککردنی SCAYT","btn_enable":"چالاککردنی SCAYT","btn_langs":"زمانهکان","btn_options":"ههڵبژارده","text_title":""},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"magicline":{"title":"بڕگە لێرە دابنێ"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"link":{"acccessKey":"کلیلی دەستپێگەیشتن","advanced":"پێشکەوتوو","advisoryContentType":"جۆری ناوەڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سەردێڕ","anchor":{"toolbar":"دانان/چاکسازی لەنگەر","menu":"چاکسازی لەنگەر","title":"خاسیەتی لەنگەر","name":"ناوی لەنگەر","errorName":"تکایه ناوی لەنگەر بنووسه","remove":"لابردنی لەنگەر"},"anchorId":"بەپێی ناسنامەی توخم","anchorName":"بەپێی ناوی لەنگەر","charset":"بەستەری سەرچاوەی نووسە","cssClasses":"شێوازی چینی پەڕه","emailAddress":"ناونیشانی ئیمەیل","emailBody":"ناوەڕۆکی نامە","emailSubject":"بابەتی نامە","id":"ناسنامە","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستەی زمان","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)","noEmail":"تکایە ناونیشانی ئیمەیل بنووسە","noUrl":"تکایە ناونیشانی بەستەر بنووسە","other":"<هیتر>","popupDependent":"پێوەبەستراو (Netscape)","popupFeatures":"خاسیەتی پەنجەرەی سەرهەڵدەر","popupFullScreen":"پڕ بەپڕی شاشە (IE)","popupLeft":"جێگای چەپ","popupLocationBar":"هێڵی ناونیشانی بەستەر","popupMenuBar":"هێڵی لیسته","popupResizable":"توانای گۆڕینی قەباره","popupScrollBars":"هێڵی هاتووچۆپێکردن","popupStatusBar":"هێڵی دۆخ","popupToolbar":"هێڵی تووڵامراز","popupTop":"جێگای سەرەوە","rel":"پەیوەندی","selectAnchor":"هەڵبژاردنی لەنگەرێك","styles":"شێواز","tabIndex":"بازدەری تابی ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوە>","targetFrameName":"ناوی ئامانجی چووارچێوە","targetPopup":"<پەنجەرەی سەرهەڵدەر>","targetPopupName":"ناوی پەنجەرەی سەرهەڵدەر","title":"بەستەر","toAnchor":"بەستەر بۆ لەنگەر له دەق","toEmail":"ئیمەیل","toUrl":"ناونیشانی بەستەر","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بەستەر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"image":{"alertUrl":"تکایه ناونیشانی بەستەری وێنه بنووسه","alt":"جێگرەوەی دەق","border":"پەراوێز","btnUpload":"ناردنی بۆ ڕاژه","button2Img":"تۆ دەتەوێت دوگمەی وێنەی دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟","hSpace":"بۆشایی ئاسۆیی","img2Button":"تۆ دەتەوێت وێنەی دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟","infoTab":"زانیاری وێنه","linkTab":"بەستەر","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","resetSize":"ڕێکخستنەوەی قەباره","title":"خاسیەتی وێنه","titleButton":"خاسیەتی دوگمەی وێنه","upload":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","vSpace":"بۆشایی ئەستونی","validateBorder":"پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.","validateHSpace":"بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.","validateVSpace":"بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت."},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"fakeobjects":{"anchor":"لەنگەر","flash":"فلاش","hiddenfield":"شاردنەوەی خانه","iframe":"لەچوارچێوە","unknown":"بەرکارێکی نەناسراو"},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteArea":"ناوچەی لکاندن","pasteMsg":"تکایە بیلکێنە لەناوەوەی ئەم سنوقە لەڕێی تەختەکلیلەکەت بە بەکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشە بکە.","securityMsg":"بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت لەم پەنجەرەیه.","title":"لکاندن"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"about":{"copy":"مافی لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor","help":"سەیری $1 بکه بۆ یارمەتی.","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:","title":"دەربارەی CKEditor","userGuide":"ڕێپیشاندەری CKEditors"},"editor":"سەرنووسەی دەقی بە پیت","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی په‌ڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"هەڵوەشاندن","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","alignLeft":"چەپ","alignRight":"ڕاست","alignCenter":"ناوەڕاست","alignJustify":"هاوستوونی","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"None","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە فاریزە و خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/lt.js b/platforms/browser/www/lib/ckeditor/lang/lt.js deleted file mode 100644 index abfe9d8b..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['lt']={"wsc":{"btnIgnore":"Ignoruoti","btnIgnoreAll":"Ignoruoti visus","btnReplace":"Pakeisti","btnReplaceAll":"Pakeisti visus","btnUndo":"Atšaukti","changeTo":"Pakeisti į","errorLoading":"Klaida įkraunant servisą: %s.","ieSpellDownload":"Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?","manyChanges":"Rašybos tikrinimas baigtas: Pakeista %1 žodžių","noChanges":"Rašybos tikrinimas baigtas: Nėra pakeistų žodžių","noMispell":"Rašybos tikrinimas baigtas: Nerasta rašybos klaidų","noSuggestions":"- Nėra pasiūlymų -","notAvailable":"Atleiskite, šiuo metu servisas neprieinamas.","notInDic":"Žodyne nerastas","oneChange":"Rašybos tikrinimas baigtas: Vienas žodis pakeistas","progress":"Vyksta rašybos tikrinimas...","title":"Tikrinti klaidas","toolbar":"Rašybos tikrinimas"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"sourcearea":{"toolbar":"Šaltinis"},"scayt":{"btn_about":"Apie SCAYT","btn_dictionaries":"Žodynai","btn_disable":"Išjungti SCAYT","btn_enable":"Įjungti SCAYT","btn_langs":"Kalbos","btn_options":"Parametrai","text_title":""},"removeformat":{"toolbar":"Panaikinti formatą"},"pastetext":{"button":"Įdėti kaip gryną tekstą","title":"Įdėti kaip gryną tekstą"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"Konsultacinė antraštė","anchor":{"toolbar":"Įterpti/modifikuoti žymę","menu":"Žymės savybės","title":"Žymės savybės","name":"Žymės vardas","errorName":"Prašome įvesti žymės vardą","remove":"Pašalinti žymę"},"anchorId":"Pagal žymės Id","anchorName":"Pagal žymės vardą","charset":"Susietų išteklių simbolių lentelė","cssClasses":"Stilių lentelės klasės","emailAddress":"El.pašto adresas","emailBody":"Žinutės turinys","emailSubject":"Žinutės tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","menu":"Taisyti nuorodą","name":"Vardas","noAnchors":"(Šiame dokumente žymių nėra)","noEmail":"Prašome įvesti el.pašto adresą","noUrl":"Prašome įvesti nuorodos URL","other":"<kitas>","popupDependent":"Priklausomas (Netscape)","popupFeatures":"Išskleidžiamo lango savybės","popupFullScreen":"Visas ekranas (IE)","popupLeft":"Kairė pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"Būsenos juosta","popupToolbar":"Mygtukų juosta","popupTop":"Viršutinė pozicija","rel":"Sąsajos","selectAnchor":"Pasirinkite žymę","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"<kadras>","targetFrameName":"Paskirties kadro vardas","targetPopup":"<išskleidžiamas langas>","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"Žymė šiame puslapyje","toEmail":"El.paštas","toUrl":"Nuoroda","toolbar":"Įterpti/taisyti nuorodą","type":"Nuorodos tipas","unlink":"Panaikinti nuorodą","upload":"Siųsti"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"image":{"alertUrl":"Prašome įvesti vaizdo URL","alt":"Alternatyvus Tekstas","border":"Rėmelis","btnUpload":"Siųsti į serverį","button2Img":"Ar norite mygtuką paversti paprastu paveiksliuku?","hSpace":"Hor.Erdvė","img2Button":"Ar norite paveiksliuką paversti mygtuku?","infoTab":"Vaizdo informacija","linkTab":"Nuoroda","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","resetSize":"Atstatyti dydį","title":"Vaizdo savybės","titleButton":"Vaizdinio mygtuko savybės","upload":"Nusiųsti","urlMissing":"Paveiksliuko nuorodos nėra.","vSpace":"Vert.Erdvė","validateBorder":"Reikšmė turi būti sveikas skaičius.","validateHSpace":"Reikšmė turi būti sveikas skaičius.","validateVSpace":"Reikšmė turi būti sveikas skaičius."},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"fakeobjects":{"anchor":"Žymė","flash":"Flash animacija","hiddenfield":"Paslėptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteArea":"Įkelti dalį","pasteMsg":"Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.","securityMsg":"Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.","title":"Įdėti"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citata"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor","help":"Patikrinkite $1 dėl pagalbos.","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:","title":"Apie CKEditor","userGuide":"CKEditor Vartotojo Gidas"},"editor":"Pilnas redaktorius","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nėra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","alignLeft":"Kairę","alignRight":"Dešinę","alignCenter":"Centrą","alignJustify":"Lygiuoti abi puses","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"None","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/lv.js b/platforms/browser/www/lib/ckeditor/lang/lv.js deleted file mode 100644 index 2428cfc6..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['lv']={"wsc":{"btnIgnore":"Ignorēt","btnIgnoreAll":"Ignorēt visu","btnReplace":"Aizvietot","btnReplaceAll":"Aizvietot visu","btnUndo":"Atcelt","changeTo":"Nomainīt uz","errorLoading":"Kļūda ielādējot aplikācijas servisa adresi: %s.","ieSpellDownload":"Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?","manyChanges":"Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti","noChanges":"Pareizrakstības pārbaude pabeigta: nekas netika labots","noMispell":"Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas","noSuggestions":"- Nav ieteikumu -","notAvailable":"Atvainojiet, bet serviss šobrīd nav pieejams.","notInDic":"Netika atrasts vārdnīcā","oneChange":"Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts","progress":"Notiek pareizrakstības pārbaude...","title":"Pārbaudīt gramatiku","toolbar":"Pareizrakstības pārbaude"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"sourcearea":{"toolbar":"HTML kods"},"scayt":{"btn_about":"Par SCAYT","btn_dictionaries":"Vārdnīcas","btn_disable":"Atslēgt SCAYT","btn_enable":"Ieslēgt SCAYT","btn_langs":"Valodas","btn_options":"Uzstādījumi","text_title":""},"removeformat":{"toolbar":"Noņemt stilus"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","title":"Ievietot kā vienkāršu tekstu"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"magicline":{"title":"Ievietot šeit rindkopu"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"Izvērstais","advisoryContentType":"Konsultatīvs satura tips","advisoryTitle":"Konsultatīvs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezīmi","menu":"Labot iezīmi","title":"Iezīmes uzstādījumi","name":"Iezīmes nosaukums","errorName":"Lūdzu norādiet iezīmes nosaukumu","remove":"Noņemt iezīmi"},"anchorId":"Pēc elementa ID","anchorName":"Pēc iezīmes nosaukuma","charset":"Pievienotā resursa kodējums","cssClasses":"Stilu saraksta klases","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tēma","id":"ID","info":"Hipersaites informācija","langCode":"Valodas kods","langDir":"Valodas lasīšanas virziens","langDirLTR":"No kreisās uz labo (LTR)","langDirRTL":"No labās uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Šajā dokumentā nav iezīmju)","noEmail":"Lūdzu norādi e-pasta adresi","noUrl":"Lūdzu norādi hipersaiti","other":"<cits>","popupDependent":"Atkarīgs (Netscape)","popupFeatures":"Uznirstošā loga nosaukums īpašības","popupFullScreen":"Pilnā ekrānā (IE)","popupLeft":"Kreisā koordināte","popupLocationBar":"Atrašanās vietas josla","popupMenuBar":"Izvēlnes josla","popupResizable":"Mērogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"Rīku josla","popupTop":"Augšējā koordināte","rel":"Relācija","selectAnchor":"Izvēlēties iezīmi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"Mērķis","targetFrame":"<ietvars>","targetFrameName":"Mērķa ietvara nosaukums","targetPopup":"<uznirstošā logā>","targetPopupName":"Uznirstošā loga nosaukums","title":"Hipersaite","toAnchor":"Iezīme šajā lapā","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"Augšupielādēt"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"image":{"alertUrl":"Lūdzu norādīt attēla hipersaiti","alt":"Alternatīvais teksts","border":"Rāmis","btnUpload":"Nosūtīt serverim","button2Img":"Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?","hSpace":"Horizontālā telpa","img2Button":"Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?","infoTab":"Informācija par attēlu","linkTab":"Hipersaite","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","resetSize":"Atjaunot sākotnējo izmēru","title":"Attēla īpašības","titleButton":"Attēlpogas īpašības","upload":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","vSpace":"Vertikālā telpa","validateBorder":"Apmalei jābūt veselam skaitlim","validateHSpace":"HSpace jābūt veselam skaitlim","validateVSpace":"VSpace jābūt veselam skaitlim"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"fakeobjects":{"anchor":"Iezīme","flash":"Flash animācija","hiddenfield":"Slēpts lauks","iframe":"Iframe","unknown":"Nezināms objekts"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteArea":"Ielīmēšanas zona","pasteMsg":"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.","securityMsg":"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.","title":"Ievietot"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Bloka citāts"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor","help":"Pārbaudiet $1 palīdzībai.","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:","title":"Par CKEditor","userGuide":"CKEditor Lietotāja pamācība"},"editor":"Bagātinātā teksta redaktors","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"Centrēti","alignJustify":"Izlīdzināt malas","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"None","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/mk.js b/platforms/browser/www/lib/ckeditor/lang/mk.js deleted file mode 100644 index 7641a8b6..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/mk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['mk']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Redo","undo":"Undo"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcearea":{"toolbar":"Source"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/mn.js b/platforms/browser/www/lib/ckeditor/lang/mn.js deleted file mode 100644 index a1b0fa7d..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/mn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['mn']={"wsc":{"btnIgnore":"Зөвшөөрөх","btnIgnoreAll":"Бүгдийг зөвшөөрөх","btnReplace":"Солих","btnReplaceAll":"Бүгдийг Дарж бичих","btnUndo":"Буцаах","changeTo":"Өөрчлөх","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?","manyChanges":"Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн","noChanges":"Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй","noMispell":"Дүрэм шалгаад дууссан: Алдаа олдсонгүй","noSuggestions":"- Тайлбаргүй -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Толь бичиггүй","oneChange":"Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн","progress":"Дүрэм шалгаж байгаа үйл явц...","title":"Spell Check","toolbar":"Үгийн дүрэх шалгах"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Холбоосууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Хэрэгслүүд"},"toolbars":"Болосруулагчийн хэрэгслийн самбар"},"table":{"border":"Хүрээний хэмжээ","caption":"Тайлбар","cell":{"menu":"Нүх/зай","insertBefore":"Нүх/зай өмнө нь оруулах","insertAfter":"Нүх/зай дараа нь оруулах","deleteCell":"Нүх устгах","merge":"Нүх нэгтэх","mergeRight":"Баруун тийш нэгтгэх","mergeDown":"Доош нэгтгэх","splitHorizontal":"Нүх/зайг босоогоор нь тусгаарлах","splitVertical":"Нүх/зайг хөндлөнгөөр нь тусгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Хэвтээд тэгшлэх арга","vAlign":"Босоод тэгшлэх арга","alignBaseline":"Baseline","bgColor":"Дэвсгэр өнгө","borderColor":"Хүрээний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Нүдний өргөн нь тоо байх ёстой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Нүх доторлох(padding)","cellSpace":"Нүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана устгах"},"columns":"Багана","deleteTable":"Хүснэгт устгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Хүснэгтийн өргөн нь тоо байх ёстой.","menu":"Хүснэгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр устгах"},"rows":"Мөр","summary":"Тайлбар","title":"Хүснэгт","toolbar":"Хүснэгт","widthPc":"хувь","widthPx":"цэг","widthUnit":"өргөний нэгж"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"sourcearea":{"toolbar":"Код"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Толь бичгүүд","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Хэлүүд","btn_options":"Сонголт","text_title":""},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","title":"Энгийн бичвэрээр буулгах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-оос буулгах","toolbar":"Word-оос буулгах"},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"link":{"acccessKey":"Холбох түлхүүр","advanced":"Нэмэлт","advisoryContentType":"Зөвлөлдөх төрлийн агуулга","advisoryTitle":"Зөвлөлдөх гарчиг","anchor":{"toolbar":"Зангуу","menu":"Зангууг болосруулах","title":"Зангуугийн шинж чанар","name":"Зангуугийн нэр","errorName":"Зангуугийн нэрийг оруулна уу","remove":"Зангууг устгах"},"anchorId":"Элемэнтйн Id нэрээр","anchorName":"Зангуугийн нэрээр","charset":"Тэмдэгт оноох нөөцөд холбогдсон","cssClasses":"Stylesheet классууд","emailAddress":"Э-шуудангийн хаяг","emailBody":"Зурвасны их бие","emailSubject":"Зурвасны гарчиг","id":"Id","info":"Холбоосын тухай мэдээлэл","langCode":"Хэлний код","langDir":"Хэлний чиглэл","langDirLTR":"Зүүнээс баруун (LTR)","langDirRTL":"Баруунаас зүүн (RTL)","menu":"Холбоос засварлах","name":"Нэр","noAnchors":"(Баримт бичиг зангуугүй байна)","noEmail":"Э-шуудангий хаягаа шивнэ үү","noUrl":"Холбоосны URL хаягийг шивнэ үү","other":"<other>","popupDependent":"Хамаатай (Netscape)","popupFeatures":"Popup цонхны онцлог","popupFullScreen":"Цонх дүүргэх (Internet Explorer)","popupLeft":"Зүүн байрлал","popupLocationBar":"Location хэсэг","popupMenuBar":"Цэсний самбар","popupResizable":"Resizable","popupScrollBars":"Скрол хэсэгүүд","popupStatusBar":"Статус хэсэг","popupToolbar":"Багажны самбар","popupTop":"Дээд байрлал","rel":"Relationship","selectAnchor":"Нэг зангууг сонгоно уу","styles":"Загвар","tabIndex":"Tab индекс","target":"Байрлал","targetFrame":"<Агуулах хүрээ>","targetFrameName":"Очих фремын нэр","targetPopup":"<popup цонх>","targetPopupName":"Popup цонхны нэр","title":"Холбоос","toAnchor":"Энэ бичвэр дэх зангуу руу очих холбоос","toEmail":"Э-захиа","toUrl":"цахим хуудасны хаяг (URL)","toolbar":"Холбоос","type":"Линкийн төрөл","unlink":"Холбоос авч хаях","upload":"Хуулах"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"image":{"alertUrl":"Зурагны URL-ын төрлийн сонгоно уу","alt":"Зургийг орлох бичвэр","border":"Хүрээ","btnUpload":"Үүнийг сервэррүү илгээ","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хөндлөн зай","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Зурагны мэдээлэл","linkTab":"Холбоос","lockRatio":"Радио түгжих","menu":"Зураг","resetSize":"хэмжээ дахин оноох","title":"Зураг","titleButton":"Зурган товчны шинж чанар","upload":"Хуулах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","vSpace":"Босоо зай","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"Хаяг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Хэвийн","tag_pre":"Formatted"},"fakeobjects":{"anchor":"Зангуу","flash":"Flash Animation","hiddenfield":"Нууц талбар","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteArea":"Paste Area","pasteMsg":"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.","securityMsg":"Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.","title":"Буулгах"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Ишлэл хэсэг"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх","url":"цахим хуудасны хаяг (URL)","protocol":"Протокол","upload":"Илгээж ачаалах","uploadSubmit":"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх","image":"Зураг","flash":"Флаш хөдөлгөөнтэй зураг","form":"Маягт","checkbox":"Тэмдэглээний нүд","radio":"Радио товчлуур","textField":"Бичвэрийн талбар","textarea":"Бичвэрийн зай","hiddenField":"Далд талбар","button":"Товчлуур","select":"Сонголтын талбар","imageButton":"Зургий товчуур","notSet":"<тохируулаагүй>","id":"Id (техникийн нэр)","name":"Нэр","langDir":"Хэлний чиглэл","langDirLtr":"Зүүнээс баруун (LTR)","langDirRtl":"Баруунаас зүүн (RTL)","langCode":"Хэлний код","longDescr":"Урт тайлбарын вэб хаяг","cssClass":"Хэлбэрийн хуудасны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","ok":"За","cancel":"Болих","close":"Хаах","preview":"Урьдчилан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Гүнзгий","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн талаас баруун тийшээ (LTR)","langDirRTL":"Баруун талаас зүүн тийшээ (RTL)","styles":"Загвар","cssClasses":"Хэлбэрийн хуудасны ангиуд","width":"Өргөн","height":"Өндөр","align":"Эгнээ","alignLeft":"Зүүн","alignRight":"Баруун","alignCenter":"Төвд","alignJustify":"Тэгшлэх","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ms.js b/platforms/browser/www/lib/ckeditor/lang/ms.js deleted file mode 100644 index 12b0437e..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ms.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ms']={"wsc":{"btnIgnore":"Biar","btnIgnoreAll":"Biarkan semua","btnReplace":"Ganti","btnReplaceAll":"Gantikan Semua","btnUndo":"Batalkan","changeTo":"Tukarkan kepada","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?","manyChanges":"Pemeriksaan ejaan siap: %1 perkataan diubah","noChanges":"Pemeriksaan ejaan siap: Tiada perkataan diubah","noMispell":"Pemeriksaan ejaan siap: Tiada salah ejaan","noSuggestions":"- Tiada cadangan -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Tidak terdapat didalam kamus","oneChange":"Pemeriksaan ejaan siap: Satu perkataan telah diubah","progress":"Pemeriksaan ejaan sedang diproses...","title":"Spell Check","toolbar":"Semak Ejaan"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"sourcearea":{"toolbar":"Sumber"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Buang Format"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"<lain>","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"<bingkai>","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"<tetingkap popup>","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"image":{"alertUrl":"Sila taip URL untuk fail gambar","alt":"Text Alternatif","border":"Border","btnUpload":"Hantar ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Ruang Melintang","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Imej","linkTab":"Sambungan","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","resetSize":"Saiz Set Semula","title":"Ciri-ciri Imej","titleButton":"Ciri-ciri Butang Bergambar","upload":"Muat Naik","urlMissing":"Image source URL is missing.","vSpace":"Ruang Menegak","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Close","preview":"Prebiu","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Jajaran Blok","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/nb.js b/platforms/browser/www/lib/ckeditor/lang/nb.js deleted file mode 100644 index 8d367222..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['nb']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<strong>Ctrl/Cmd+V</strong>) og trykk <strong>OK</strong>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Valgt)"},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/nl.js b/platforms/browser/www/lib/ckeditor/lang/nl.js deleted file mode 100644 index a409e448..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['nl']={"wsc":{"btnIgnore":"Negeren","btnIgnoreAll":"Alles negeren","btnReplace":"Vervangen","btnReplaceAll":"Alles vervangen","btnUndo":"Ongedaan maken","changeTo":"Wijzig in","errorLoading":"Er is een fout opgetreden bij het laden van de dienst: %s.","ieSpellDownload":"De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?","manyChanges":"Klaar met spellingscontrole: %1 woorden aangepast","noChanges":"Klaar met spellingscontrole: geen woorden aangepast","noMispell":"Klaar met spellingscontrole: geen fouten gevonden","noSuggestions":"- Geen suggesties -","notAvailable":"Excuses, deze dienst is momenteel niet beschikbaar.","notInDic":"Niet in het woordenboek","oneChange":"Klaar met spellingscontrole: één woord aangepast","progress":"Bezig met spellingscontrole...","title":"Spellingscontrole","toolbar":"Spellingscontrole"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"table":{"border":"Randdikte","caption":"Onderschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"sourcearea":{"toolbar":"Broncode"},"scayt":{"btn_about":"Over SCAYT","btn_dictionaries":"Woordenboeken","btn_disable":"SCAYT uitschakelen","btn_enable":"SCAYT inschakelen","btn_langs":"Talen","btn_options":"Opties","text_title":""},"removeformat":{"toolbar":"Opmaak verwijderen"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"magicline":{"title":"Hier paragraaf invoeren"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"image":{"alertUrl":"Geef de URL van de afbeelding","alt":"Alternatieve tekst","border":"Rand","btnUpload":"Naar server verzenden","button2Img":"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?","hSpace":"HSpace","img2Button":"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?","infoTab":"Informatie afbeelding","linkTab":"Link","lockRatio":"Afmetingen vergrendelen","menu":"Eigenschappen afbeelding","resetSize":"Afmetingen resetten","title":"Eigenschappen afbeelding","titleButton":"Eigenschappen afbeeldingsknop","upload":"Upload","urlMissing":"De URL naar de afbeelding ontbreekt.","vSpace":"VSpace","validateBorder":"Rand moet een heel nummer zijn.","validateHSpace":"HSpace moet een heel nummer zijn.","validateVSpace":"VSpace moet een heel nummer zijn."},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"contextmenu":{"options":"Contextmenu opties"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"button":{"selectedLabel":"%1 (Geselecteerd)"},"blockquote":{"toolbar":"Citaatblok"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor","help":"Bekijk de $1 voor hulp.","moreInfo":"Bezoek onze website voor licentieinformatie:","title":"Over CKEditor","userGuide":"CKEditor gebruiksaanwijzing"},"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignJustify":"Uitvullen","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/no.js b/platforms/browser/www/lib/ckeditor/lang/no.js deleted file mode 100644 index 143a4e7f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['no']={"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"},"undo":{"redo":"Gjør om","undo":"Angre"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcearea":{"toolbar":"Kilde"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/pl.js b/platforms/browser/www/lib/ckeditor/lang/pl.js deleted file mode 100644 index 94a50ea8..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pl']={"wsc":{"btnIgnore":"Ignoruj","btnIgnoreAll":"Ignoruj wszystkie","btnReplace":"Zmień","btnReplaceAll":"Zmień wszystkie","btnUndo":"Cofnij","changeTo":"Zmień na","errorLoading":"Błąd wczytywania hosta aplikacji usługi: %s.","ieSpellDownload":"Słownik nie jest zainstalowany. Czy chcesz go pobrać?","manyChanges":"Sprawdzanie zakończone: zmieniono %l słów","noChanges":"Sprawdzanie zakończone: nie zmieniono żadnego słowa","noMispell":"Sprawdzanie zakończone: nie znaleziono błędów","noSuggestions":"- Brak sugestii -","notAvailable":"Przepraszamy, ale usługa jest obecnie niedostępna.","notInDic":"Słowa nie ma w słowniku","oneChange":"Sprawdzanie zakończone: zmieniono jedno słowo","progress":"Trwa sprawdzanie...","title":"Sprawdź pisownię","toolbar":"Sprawdź pisownię"},"undo":{"redo":"Ponów","undo":"Cofnij"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"sourcearea":{"toolbar":"Źródło dokumentu"},"scayt":{"btn_about":"Informacje o SCAYT","btn_dictionaries":"Słowniki","btn_disable":"Wyłącz SCAYT","btn_enable":"Włącz SCAYT","btn_langs":"Języki","btn_options":"Opcje","text_title":""},"removeformat":{"toolbar":"Usuń formatowanie"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"magicline":{"title":"Wstaw nowy akapit"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"image":{"alertUrl":"Podaj adres obrazka.","alt":"Tekst zastępczy","border":"Obramowanie","btnUpload":"Wyślij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?","hSpace":"Odstęp poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"Hiperłącze","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","resetSize":"Przywróć rozmiar","title":"Właściwości obrazka","titleButton":"Właściwości przycisku graficznego","upload":"Wyślij","urlMissing":"Podaj adres URL obrazka.","vSpace":"Odstęp pionowy","validateBorder":"Wartość obramowania musi być liczbą całkowitą.","validateHSpace":"Wartość odstępu poziomego musi być liczbą całkowitą.","validateVSpace":"Wartość odstępu pionowego musi być liczbą całkowitą."},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"contextmenu":{"options":"Opcje menu kontekstowego"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"button":{"selectedLabel":"%1 (Wybrany)"},"blockquote":{"toolbar":"Cytat"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podręczniku użytkownika programu CKEditor"},"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignJustify":"Wyjustuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/lang/pt-br.js deleted file mode 100644 index 324f04ac..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pt-br']={"wsc":{"btnIgnore":"Ignorar uma vez","btnIgnoreAll":"Ignorar Todas","btnReplace":"Alterar","btnReplaceAll":"Alterar Todas","btnUndo":"Desfazer","changeTo":"Alterar para","errorLoading":"Erro carregando servidor de aplicação: %s.","ieSpellDownload":"A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?","manyChanges":"Verificação ortográfica encerrada: %1 palavras foram alteradas","noChanges":"Verificação ortográfica encerrada: Não houve alterações","noMispell":"Verificação encerrada: Não foram encontrados erros de ortografia","noSuggestions":"-sem sugestões de ortografia-","notAvailable":"Desculpe, o serviço não está disponível no momento.","notInDic":"Não encontrada","oneChange":"Verificação ortográfica encerrada: Uma palavra foi alterada","progress":"Verificação ortográfica em andamento...","title":"Corretor Ortográfico","toolbar":"Verificar Ortografia"},"undo":{"redo":"Refazer","undo":"Desfazer"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcearea":{"toolbar":"Código-Fonte"},"scayt":{"btn_about":"Sobre a correção ortográfica durante a digitação","btn_dictionaries":"Dicionários","btn_disable":"Desabilitar correção ortográfica durante a digitação","btn_enable":"Habilitar correção ortográfica durante a digitação","btn_langs":"Idiomas","btn_options":"Opções","text_title":""},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Insera um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Âncora","menu":"Formatar Âncora","title":"Formatar Âncora","name":"Nome da Âncora","errorName":"Por favor, digite o nome da âncora","remove":"Remover Âncora"},"anchorId":"Id da âncora","anchorName":"Nome da âncora","charset":"Charset do Link","cssClasses":"Classe de CSS","emailAddress":"Endereço E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Assunto da Mensagem","id":"Id","info":"Informações","langCode":"Direção do idioma","langDir":"Direção do idioma","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","menu":"Editar Link","name":"Nome","noAnchors":"(Não há âncoras no documento)","noEmail":"Por favor, digite o endereço de e-mail","noUrl":"Por favor, digite o endereço do Link","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Propriedades da Janela Pop-up","popupFullScreen":"Modo Tela Cheia (IE)","popupLeft":"Esquerda","popupLocationBar":"Barra de Endereços","popupMenuBar":"Barra de Menus","popupResizable":"Redimensionável","popupScrollBars":"Barras de Rolagem","popupStatusBar":"Barra de Status","popupToolbar":"Barra de Ferramentas","popupTop":"Topo","rel":"Tipo de Relação","selectAnchor":"Selecione uma âncora","styles":"Estilos","tabIndex":"Índice de Tabulação","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Frame de Destino","targetPopup":"<janela popup>","targetPopupName":"Nome da Janela Pop-up","title":"Editar Link","toAnchor":"Âncora nesta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Link","type":"Tipo de hiperlink","unlink":"Remover Link","upload":"Enviar ao Servidor"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image":{"alertUrl":"Por favor, digite a URL da imagem.","alt":"Texto Alternativo","border":"Borda","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão de imagem em uma imagem comum?","hSpace":"HSpace","img2Button":"Deseja transformar a imagem em um botão de imagem?","infoTab":"Informações da Imagem","linkTab":"Link","lockRatio":"Travar Proporções","menu":"Formatar Imagem","resetSize":"Redefinir para o Tamanho Original","title":"Formatar Imagem","titleButton":"Formatar Botão de Imagem","upload":"Enviar","urlMissing":"URL da imagem está faltando.","vSpace":"VSpace","validateBorder":"A borda deve ser um número inteiro.","validateHSpace":"O HSpace deve ser um número inteiro.","validateVSpace":"O VSpace deve ser um número inteiro."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":"Âncora","flash":"Animação em Flash","hiddenfield":"Campo Oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Área para Colar","pasteMsg":"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.","securityMsg":"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionado)"},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Verifique o $1 para obter ajuda.","moreInfo":"Para informações sobre a licença por favor visite o nosso site:","title":"Sobre o CKEditor","userGuide":"Guia do Usuário do CKEditor"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centralizado","alignJustify":"Justificar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/pt.js b/platforms/browser/www/lib/ckeditor/lang/pt.js deleted file mode 100644 index 528de82a..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['pt']={"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Tudo","btnReplace":"Substituir","btnReplaceAll":"Substituir Tudo","btnUndo":"Anular","changeTo":"Mudar para","errorLoading":"Error loading application service host: %s.","ieSpellDownload":" Verificação ortográfica não instalada. Quer descarregar agora?","manyChanges":"Verificação ortográfica completa: %1 palavras alteradas","noChanges":"Verificação ortográfica completa: não houve alteração de palavras","noMispell":"Verificação ortográfica completa: não foram encontrados erros","noSuggestions":"- Sem sugestões -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Não está num directório","oneChange":"Verificação ortográfica completa: uma palavra alterada","progress":"Verificação ortográfica em progresso…","title":"Spell Check","toolbar":"Verificação Ortográfica"},"undo":{"redo":"Refazer","undo":"Anular"},"toolbar":{"toolbarCollapse":"Ocultar Barra de Ferramentas","toolbarExpand":"Expandir Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de Transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de Barras de Ferramentas"},"table":{"border":"Tamanho da Margem","caption":"Título","cell":{"menu":"Célula","insertBefore":"Inserir Célula Antes","insertAfter":"Inserir Célula Depois","deleteCell":"Apagar Células","merge":"Unir Células","mergeRight":"Unir à Direita","mergeDown":"Unir Abaixo","splitHorizontal":"Dividir Célula Horizontalmente","splitVertical":"Dividir Célula Verticalmente","title":"Propriedades da Célula","cellType":"Tipo de Célula","rowSpan":"Filas na Célula","colSpan":"Colunas na Célula","wordWrap":"Continuar","hAlign":"Alinhamento Horizontal","vAlign":"Alinhamento Vertical","alignBaseline":"Base","bgColor":"Cor de Fundo","borderColor":"Cor da Margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As filas da célula deve ter um número inteiro.","invalidColSpan":"As colunas da célula deve ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Criação de Espaço","cellSpace":"Espaçamento Célula","column":{"menu":"Coluna","insertBefore":"Inserir Coluna Antes","insertAfter":"Inserir Coluna Depois","deleteColumn":"Apagar Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira Linha","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número das linhas tem de ser um número maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da Tabela","row":{"menu":"Linha","insertBefore":"Inserir Linha Antes","insertAfter":"Inserir Linha Depois","deleteRow":"Apagar Linhas"},"rows":"Linhas","summary":"Sumário","title":"Propriedades da Tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pontos","widthUnit":"unidade da largura"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de Bloco","panelTitle2":"Estilos de Linha","panelTitle3":"Estilos de Objeto"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir Caracter Especial"},"sourcearea":{"toolbar":"Fonte"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Colar como Texto Simples","title":"Colar como Texto Simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?","error":"Não foi possivel limpar a informação colada decido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insira aqui o parágrafo"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar Âncora","menu":"Propriedades da Âncora","title":"Propriedades da Âncora","name":"Nome da Âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remove Anchor"},"anchorId":"Por ID de elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo de Folhas Classes","emailAddress":"Endereço de E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Título de Mensagem","id":"ID","info":"Informação de Hiperligação","langCode":"Orientação de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita a Esquerda (RTL)","menu":"Editar Hiperligação","name":"Nome","noAnchors":"(Não há referências disponíveis no documento)","noEmail":"Por favor introduza o endereço de e-mail","noUrl":"Por favor introduza a hiperligação URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de Janela de Popup","popupFullScreen":"Janela Completa (IE)","popupLeft":"Posição Esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de Menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Ferramentas","popupTop":"Posição Direita","rel":"Relação","selectAnchor":"Seleccionar una referência","styles":"Estilo","tabIndex":"Índice de Tubulação","target":"Destino","targetFrame":"<Frame>","targetFrameName":"Nome do Frame Destino","targetPopup":"<Janela de popup>","targetPopupName":"Nome da Janela de Popup","title":"Hiperligação","toAnchor":"Referência a esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Hiperligação","type":"Tipo de Hiperligação","unlink":"Eliminar Hiperligação","upload":"Carregar"},"indent":{"indent":"Aumentar Avanço","outdent":"Diminuir Avanço"},"image":{"alertUrl":"Por favor introduza o URL da imagem","alt":"Texto Alternativo","border":"Limite","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão com imagem selecionado em uma imagem?","hSpace":"Esp.Horiz","img2Button":"Deseja transformar a imagem selecionada em um botão com imagem?","infoTab":"Informação da Imagem","linkTab":"Hiperligação","lockRatio":"Proporcional","menu":"Propriedades da Imagem","resetSize":"Tamanho Original","title":"Propriedades da Imagem","titleButton":"Propriedades do Botão de imagens","upload":"Carregar","urlMissing":"O URL da fonte da imagem está em falta.","vSpace":"Esp.Vert","validateBorder":"A borda tem de ser um numero.","validateHSpace":"HSpace tem de ser um numero.","validateVSpace":"VSpace tem de ser um numero."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"fakeobjects":{"anchor":" Inserir/Editar Âncora","flash":"Animação Flash","hiddenfield":"Campo Ocultado","iframe":"IFrame","unknown":"Objeto Desconhecido"},"elementspath":{"eleLabel":"Camninho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Menu de opções de contexto"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Colar Área","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.","securityMsg":"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionados)"},"blockquote":{"toolbar":"Bloco de citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à Linha","superscript":"Inferior à Linha","underline":"Sublinhado"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Doar $1 para ajudar.","moreInfo":"Para informação sobre o licenciamento, visite o nosso site da web:","title":"Sobre o CKEditor","userGuide":"CKEditor - Guia do Utilizador"},"editor":"Rich Text Editor","editorPanel":"Painel do Rich Text Editor","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Explorar Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviá-lo para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão","textField":"Campo do Texto","textarea":"Área do Texto","hiddenField":"Campo Ocultado","button":"Botão","select":"Campo da Seleção","imageButton":"Botão da Imagem","notSet":"<Não definido>","id":"Id.","name":"Nome","langDir":"Direção do Idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do Idioma","longDescr":"Descrição Completa do URL","cssClass":"Classes de Estilo das Folhas","advisoryTitle":"Título Consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela Superior (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Parente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de Estilo das Folhas","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Base","alignNone":"None","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ro.js b/platforms/browser/www/lib/ckeditor/lang/ro.js deleted file mode 100644 index b4080501..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ro.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ro']={"wsc":{"btnIgnore":"Ignoră","btnIgnoreAll":"Ignoră toate","btnReplace":"Înlocuieşte","btnReplaceAll":"Înlocuieşte tot","btnUndo":"Starea anterioară (undo)","changeTo":"Schimbă în","errorLoading":"Eroare în lansarea aplicației service host %s.","ieSpellDownload":"Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?","manyChanges":"Verificarea textului terminată: 1% cuvinte modificate","noChanges":"Verificarea textului terminată: Niciun cuvânt modificat","noMispell":"Verificarea textului terminată: Nicio greşeală găsită","noSuggestions":"- Fără sugestii -","notAvailable":"Scuzați, dar serviciul nu este disponibil momentan.","notInDic":"Nu e în dicţionar","oneChange":"Verificarea textului terminată: Un cuvânt modificat","progress":"Verificarea textului în desfăşurare...","title":"Spell Check","toolbar":"Verifică scrierea textului"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"stylescombo":{"label":"Stil","panelTitle":"Formatarea stilurilor","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"sourcearea":{"toolbar":"Sursa"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Înlătură formatarea"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","title":"Adaugă ca text simplu (Plain Text)"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"link":{"acccessKey":"Tasta de acces","advanced":"Avansat","advisoryContentType":"Tipul consultativ al titlului","advisoryTitle":"Titlul consultativ","anchor":{"toolbar":"Inserează/Editează ancoră","menu":"Proprietăţi ancoră","title":"Proprietăţi ancoră","name":"Numele ancorei","errorName":"Vă rugăm scrieţi numele ancorei","remove":"Elimină ancora"},"anchorId":"după Id-ul elementului","anchorName":"după numele ancorei","charset":"Setul de caractere al resursei legate","cssClasses":"Clasele cu stilul paginii (CSS)","emailAddress":"Adresă de e-mail","emailBody":"Opțiuni Meniu Contextual","emailSubject":"Subiectul mesajului","id":"Id","info":"Informaţii despre link (Legătură web)","langCode":"Direcţia cuvintelor","langDir":"Direcţia cuvintelor","langDirLTR":"stânga-dreapta (LTR)","langDirRTL":"dreapta-stânga (RTL)","menu":"Editează Link","name":"Nume","noAnchors":"(Nicio ancoră disponibilă în document)","noEmail":"Vă rugăm să scrieţi adresa de e-mail","noUrl":"Vă rugăm să scrieţi URL-ul","other":"<alt>","popupDependent":"Dependent (Netscape)","popupFeatures":"Proprietăţile ferestrei popup","popupFullScreen":"Tot ecranul (Full Screen)(IE)","popupLeft":"Poziţia la stânga","popupLocationBar":"Bara de locaţie","popupMenuBar":"Bara de meniu","popupResizable":"Redimensionabil","popupScrollBars":"Bare de derulare","popupStatusBar":"Bara de status","popupToolbar":"Bara de opţiuni","popupTop":"Poziţia la dreapta","rel":"Relație","selectAnchor":"Selectaţi o ancoră","styles":"Stil","tabIndex":"Indexul tabului","target":"Ţintă (Target)","targetFrame":"<frame>","targetFrameName":"Numele frameului ţintă","targetPopup":"<fereastra popup>","targetPopupName":"Numele ferestrei popup","title":"Link (Legătură web)","toAnchor":"Ancoră în această pagină","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserează/Editează link (legătură web)","type":"Tipul link-ului (al legăturii web)","unlink":"Înlătură link (legătură web)","upload":"Încarcă"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"image":{"alertUrl":"Vă rugăm să scrieţi URL-ul imaginii","alt":"Text alternativ","border":"Margine","btnUpload":"Trimite la server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informaţii despre imagine","linkTab":"Link (Legătură web)","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","resetSize":"Resetează mărimea","title":"Proprietăţile imaginii","titleButton":"Proprietăţi buton imagine (Image Button)","upload":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","vSpace":"VSpace","validateBorder":"Bordura trebuie să fie un număr întreg.","validateHSpace":"Hspace trebuie să fie un număr întreg.","validateVSpace":"Vspace trebuie să fie un număr întreg."},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"fakeobjects":{"anchor":"Inserează/Editează ancoră","flash":"Flash Animation","hiddenfield":"Câmp ascuns (HiddenField)","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"%1 element"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Taie","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteArea":"Suprafața de adăugare","pasteMsg":"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK","securityMsg":"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.","title":"Adaugă"},"button":{"selectedLabel":"%1 (Selectat)"},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"about":{"copy":"Copyright &copy; $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor","help":"Citește $1 pentru ajutor.","moreInfo":"Pentru informații despre licență, vă rugăm vizitați web site-ul nostru:","title":"Despre CKEditor","userGuide":"CKEditor Ghid Utilizator"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoieşte server","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"<nesetat>","id":"Id","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"stânga-dreapta (LTR)","langDirRtl":"dreapta-stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea lungă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Trage pentru a redimensiona","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr.","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Stylesheet Classes","width":"Lăţime","height":"Înălţime","align":"Aliniere","alignLeft":"Mărește Bara","alignRight":"Dreapta","alignCenter":"Centru","alignJustify":"Aliniere în bloc (Block Justify)","alignTop":"Sus","alignMiddle":"Mijloc","alignBottom":"Jos","alignNone":"None","invalidValue":"Varloare invalida","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ru.js b/platforms/browser/www/lib/ckeditor/lang/ru.js deleted file mode 100644 index 04c90b8f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ru']={"wsc":{"btnIgnore":"Пропустить","btnIgnoreAll":"Пропустить всё","btnReplace":"Заменить","btnReplaceAll":"Заменить всё","btnUndo":"Отменить","changeTo":"Изменить на","errorLoading":"Произошла ошибка при подключении к серверу проверки орфографии: %s.","ieSpellDownload":"Модуль проверки орфографии не установлен. Хотите скачать его?","manyChanges":"Проверка орфографии завершена. Изменено слов: %1","noChanges":"Проверка орфографии завершена. Не изменено ни одного слова","noMispell":"Проверка орфографии завершена. Ошибок не найдено","noSuggestions":"- Варианты отсутствуют -","notAvailable":"Извините, но в данный момент сервис недоступен.","notInDic":"Отсутствует в словаре","oneChange":"Проверка орфографии завершена. Изменено одно слово","progress":"Орфография проверяется...","title":"Проверка орфографии","toolbar":"Проверить орфографию"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по горизонтали","splitVertical":"Разделить ячейку по вертикали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcearea":{"toolbar":"Источник"},"scayt":{"btn_about":"О SCAYT","btn_dictionaries":"Словари","btn_disable":"Отключить SCAYT","btn_enable":"Включить SCAYT","btn_langs":"Языки","btn_options":"Настройки","text_title":"Проверка орфографии по мере ввода (SCAYT)"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image":{"alertUrl":"Пожалуйста, введите ссылку на изображение","alt":"Альтернативный текст","border":"Граница","btnUpload":"Загрузить на сервер","button2Img":"Вы желаете преобразовать это изображение-кнопку в обычное изображение?","hSpace":"Гориз. отступ","img2Button":"Вы желаете преобразовать это обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"Ссылка","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","resetSize":"Вернуть обычные размеры","title":"Свойства изображения","titleButton":"Свойства изображения-кнопки","upload":"Загрузить","urlMissing":"Не указана ссылка на изображение.","vSpace":"Вертик. отступ","validateBorder":"Размер границ должен быть задан числом.","validateHSpace":"Горизонтальный отступ должен быть задан числом.","validateVSpace":"Вертикальный отступ должен быть задан числом."},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"button":{"selectedLabel":"%1 (Выбрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/si.js b/platforms/browser/www/lib/ckeditor/lang/si.js deleted file mode 100644 index cf3d64da..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['si']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"විශේෂ ගුණාංග වීකල්ප","title":"විශේෂ ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"sourcearea":{"toolbar":"මුලාශ්‍රය"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","title":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"link":{"acccessKey":"ප්‍රවේශ යතුර","advanced":"දීය","advisoryContentType":"උපදේශාත්මක අන්තර්ගත ආකාරය","advisoryTitle":"උපදේශාත්මක නාමය","anchor":{"toolbar":"ආධාරය","menu":"ආධාරය වෙනස් කිරීම","title":"ආධාරක ","name":"ආධාරකයේ නාමය","errorName":"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න","remove":"ආධාරකය ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලාසපත්‍ර පන්තිය","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භාෂා කේතය","langDir":"භාෂා දිශාව","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලාසය","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"සබැඳිය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබැඳිය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"image":{"alertUrl":"කරුණාකර රුපයේ URL ලියන්න","alt":"විකල්ප ","border":"සීමාවවල ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","button2Img":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","hSpace":"HSpace","img2Button":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","infoTab":"රුපයේ තොරතුරු","linkTab":"සබැඳිය","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","title":"රුපයේ ","titleButton":"රුප බොත්තමේ ගුණ","upload":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්‍ර URL නැත.","vSpace":"VSpace","validateBorder":"මාඉම් සම්පුර්ණ සංක්‍යාවක් විය යුතුය.","validateHSpace":"HSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය","validateVSpace":"VSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය."},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්‍ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්‍ය","tag_pre":"ආකෘතියන්"},"fakeobjects":{"anchor":"ආධාරය","flash":"Flash Animation","hiddenfield":"සැඟවුණු ප්‍රදේශය","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","help":"උදව් සඳහා $1 ","moreInfo":"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:","title":"CKEditor ගැන විස්තර","userGuide":"CKEditor භාවිතා කිරීම පිළිබඳ "},"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්‍ය","alignJustify":"Justify","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ නිවරදි නොවන HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම පේළි විලාසයයට ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sk.js b/platforms/browser/www/lib/ckeditor/lang/sk.js deleted file mode 100644 index 9c9218b2..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sk']={"wsc":{"btnIgnore":"Ignorovať","btnIgnoreAll":"Ignorovať všetko","btnReplace":"Prepísat","btnReplaceAll":"Prepísat všetko","btnUndo":"Späť","changeTo":"Zmeniť na","errorLoading":"Chyba pri načítaní slovníka z adresy: %s.","ieSpellDownload":"Kontrola pravopisu nie je naištalovaná. Chcete ju teraz stiahnuť?","manyChanges":"Kontrola pravopisu dokončená: Bolo zmenených %1 slov","noChanges":"Kontrola pravopisu dokončená: Neboli zmenené žiadne slová","noMispell":"Kontrola pravopisu dokončená: Neboli nájdené žiadne chyby pravopisu","noSuggestions":"- Žiadny návrh -","notAvailable":"Prepáčte, ale služba je momentálne nedostupná.","notInDic":"Nie je v slovníku","oneChange":"Kontrola pravopisu dokončená: Bolo zmenené jedno slovo","progress":"Prebieha kontrola pravopisu...","title":"Skontrolovať pravopis","toolbar":"Kontrola pravopisu"},"undo":{"redo":"Znovu","undo":"Späť"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"table":{"border":"Šírka rámu (border)","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalomovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba rámu","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Širka rámu musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Vnútroriadkové (inline) štýly","panelTitle3":"Štýly objeku"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"sourcearea":{"toolbar":"Zdroj"},"scayt":{"btn_about":"O KPPP (Kontrola pravopisu počas písania)","btn_dictionaries":"Slovníky","btn_disable":"Zakázať KPPP (Kontrola pravopisu počas písania)","btn_enable":"Povoliť KPPP (Kontrola pravopisu počas písania)","btn_langs":"Jazyky","btn_options":"Možnosti","text_title":""},"removeformat":{"toolbar":"Odstrániť formátovanie"},"pastetext":{"button":"Vložiť ako čistý text","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?","error":"Nebolo možné vyčistiť vložené dáta kvôli internej chybe","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"magicline":{"title":"Sem vložte paragraf"},"list":{"bulletedlist":"Vložiť/Odstrániť zoznam s odrážkami","numberedlist":"Vložiť/Odstrániť číslovaný zoznam"},"link":{"acccessKey":"Prístupový kľúč","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"Upraviť kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"Odstrániť kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy štýlu","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"Upraviť odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"Závislosť (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosť (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"Vzťah (rel)","selectAnchor":"Vybrať kotvu","styles":"Štýl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstrániť odkaz","upload":"Nahrať"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"image":{"alertUrl":"Zadajte prosím URL obrázka","alt":"Alternatívny text","border":"Rám (border)","btnUpload":"Odoslať to na server","button2Img":"Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?","hSpace":"H-medzera","img2Button":"Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?","infoTab":"Informácie o obrázku","linkTab":"Odkaz","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","resetSize":"Pôvodná veľkosť","title":"Vlastnosti obrázka","titleButton":"Vlastnosti obrázkového tlačidla","upload":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","vSpace":"V-medzera","validateBorder":"Rám (border) musí byť celé číslo.","validateHSpace":"H-medzera musí byť celé číslo.","validateVSpace":"V-medzera musí byť celé číslo."},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"contextmenu":{"options":"Možnosti kontextového menu"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteArea":"Miesto pre vloženie","pasteMsg":"Prosím, vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte OK.","securityMsg":"Kvôli vašim bezpečnostným nastaveniam prehliadača editor nie je schopný pristupovať k vašej schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"Vložiť"},"button":{"selectedLabel":"%1 (Vybrané)"},"blockquote":{"toolbar":"Citácia"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O CKEditor-e","help":"Zaškrtnite $1 pre pomoc.","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:","title":"O CKEditor-e","userGuide":"Používateľská príručka KCEditor-a"},"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačte ALT 0 pre nápovedu","browseServer":"Prechádzať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie políčko","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvorit","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nieje číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignJustify":"Zarovnať do bloku","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sl.js b/platforms/browser/www/lib/ckeditor/lang/sl.js deleted file mode 100644 index 69b841a7..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sl']={"wsc":{"btnIgnore":"Prezri","btnIgnoreAll":"Prezri vse","btnReplace":"Zamenjaj","btnReplaceAll":"Zamenjaj vse","btnUndo":"Razveljavi","changeTo":"Spremeni v","errorLoading":"Napaka pri nalaganju storitve programa na naslovu %s.","ieSpellDownload":"Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?","manyChanges":"Črkovanje je končano: Spremenjenih je bilo %1 besed","noChanges":"Črkovanje je končano: Nobena beseda ni bila spremenjena","noMispell":"Črkovanje je končano: Brez napak","noSuggestions":"- Ni predlogov -","notAvailable":"Oprostite, storitev trenutno ni dosegljiva.","notInDic":"Ni v slovarju","oneChange":"Črkovanje je končano: Spremenjena je bila ena beseda","progress":"Preverjanje črkovanja se izvaja...","title":"Črkovalnik","toolbar":"Preveri črkovanje"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"toolbar":{"toolbarCollapse":"Skrči Orodno Vrstico","toolbarExpand":"Razširi Orodno Vrstico","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Urejevalnik orodne vrstice"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Zamik celic mora biti število","invalidCellSpacing":"Razmik med celicami mora biti število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"enota širine"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"specialchar":{"options":"Možnosti Posebnega Znaka","title":"Izberi Posebni Znak","toolbar":"Vstavi posebni znak"},"sourcearea":{"toolbar":"Izvorna koda"},"scayt":{"btn_about":"O storitvi SCAYT","btn_dictionaries":"Slovarji","btn_disable":"Onemogoči SCAYT","btn_enable":"Omogoči SCAYT","btn_langs":"Jeziki","btn_options":"Možnosti","text_title":""},"removeformat":{"toolbar":"Odstrani oblikovanje"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"magicline":{"title":"Vstavite odstavek tukaj"},"list":{"bulletedlist":"Označen seznam","numberedlist":"Oštevilčen seznam"},"link":{"acccessKey":"Dostopno Geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporočila","emailSubject":"Predmet sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"<drug>","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"image":{"alertUrl":"Vnesite URL slike","alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"Pošlji na strežnik","button2Img":"Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni razmik","img2Button":"Želiš pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"Pošlji","urlMissing":"Manjka vir (URL) slike.","vSpace":"Navpični razmik","validateBorder":"Meja mora biti celo število.","validateHSpace":"HSpace mora biti celo število.","validateVSpace":"VSpace mora biti celo število."},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"%1 element"},"contextmenu":{"options":"Možnosti Kontekstnega Menija"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi Prostor","pasteMsg":"Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"button":{"selectedLabel":"%1 (Izbrano)"},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Preverite $1 za pomoč.","moreInfo":"Za informacijo o licenci prosim obiščite našo spletno stran:","title":"O programu CKEditor","userGuide":"CKEditor Navodila za Uporabo"},"editor":"Bogat Urejevalnik Besedila","editorPanel":"Rich Text Editor plošča","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno Polje","imageButton":"Slikovni Gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda Jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo Okno (_blank)","targetTop":"Vrhovno Okno (_top)","targetSelf":"Enako Okno (_self)","targetParent":"Matično Okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignJustify":"Obojestranska poravnava","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).","invalidHtmlLength":"Vrednost določena za \"%1\" polje mora biti pozitivna številka z ali brez veljavne HTML enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost določena za inline slog mora biti sestavljena iz ene ali več tork (tuples) z obliko \"ime : vrednost\", ločenih z podpičji.","cssLengthTooltip":"Vnesite številko za vrednost v slikovnih pikah (pixels) ali številko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sq.js b/platforms/browser/www/lib/ckeditor/lang/sq.js deleted file mode 100644 index 0d6d0071..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sq']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokument","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formular","basicstyles":"Stili Bazë","paragraph":"Paragraf","links":"Nyjet","insert":"Shto","styles":"Stil","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritet e Redaktuesit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"stylescombo":{"label":"Stil","panelTitle":"Stilet e Formatimit","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stili i Brendshëm","panelTitle3":"Stilet e Objektit"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"sourcearea":{"toolbar":"Burimi"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Largo Formatin"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"magicline":{"title":"Vendos paragraf këtu"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"link":{"acccessKey":"Sipas ID-së së Elementit","advanced":"Të përparuara","advisoryContentType":"Lloji i Përmbajtjes Këshillimore","advisoryTitle":"Titull","anchor":{"toolbar":"Spirancë","menu":"Redakto Spirancën","title":"Anchor Properties","name":"Emri i Spirancës","errorName":"Ju lutemi shkruani emrin e spirancës","remove":"Largo Spirancën"},"anchorId":"Sipas ID-së së Elementit","anchorName":"Sipas Emrit të Spirancës","charset":"Seti i Karaktereve të Burimeve të Nëdlidhura","cssClasses":"Klasa stili CSS","emailAddress":"Posta Elektronike","emailBody":"Trupi i Porosisë","emailSubject":"Titulli i Porosisë","id":"Id","info":"Informacione të Nyjes","langCode":"Kod gjuhe","langDir":"Drejtim teksti","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","menu":"Redakto Nyjen","name":"Emër","noAnchors":"(Nuk ka asnjë spirancë në dokument)","noEmail":"Ju lutemi shkruani postën elektronike","noUrl":"Ju lutemi shkruani URL-në e nyjes","other":"<tjetër>","popupDependent":"E Varur (Netscape)","popupFeatures":"Karakteristikat e Dritares së Dialogut","popupFullScreen":"Ekran i Plotë (IE)","popupLeft":"Pozita Majtas","popupLocationBar":"Shiriti i Lokacionit","popupMenuBar":"Shiriti i Menysë","popupResizable":"I ndryshueshëm","popupScrollBars":"Scroll Bars","popupStatusBar":"Shiriti i Statutit","popupToolbar":"Shiriti i Mejteve","popupTop":"Top Pozita","rel":"Marrëdhëniet","selectAnchor":"Përzgjidh një Spirancë","styles":"Stil","tabIndex":"Tab Index","target":"Objektivi","targetFrame":"<frame>","targetFrameName":"Emri i Kornizës së Synuar","targetPopup":"<popup window>","targetPopupName":"Emri i Dritares së Dialogut","title":"Nyja","toAnchor":"Lidhu me spirancën në tekst","toEmail":"Posta Elektronike","toUrl":"URL","toolbar":"Nyja","type":"Lloji i Nyjes","unlink":"Largo Nyjen","upload":"Ngarko"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"image":{"alertUrl":"Ju lutemi shkruani URL-në e fotos","alt":"Tekst Alternativ","border":"Korniza","btnUpload":"Dërgo në server","button2Img":"Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?","hSpace":"HSpace","img2Button":"Dëshironi të ndryshoni foton e përzgjedhur në pullë?","infoTab":"Informacione mbi Fotografinë","linkTab":"Nyja","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","resetSize":"Rikthe Madhësinë","title":"Karakteristikat e Fotografisë","titleButton":"Karakteristikat e Pullës së Fotografisë","upload":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","vSpace":"Hapësira Vertikale","validateBorder":"Korniza duhet të jetë numër i plotë.","validateHSpace":"Hapësira horizontale duhet të jetë numër i plotë.","validateVSpace":"Hapësira vertikale duhet të jetë numër i plotë."},"horizontalrule":{"toolbar":"Vendos Vijë Horizontale"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"fakeobjects":{"anchor":"Spirancë","flash":"Objekt flash","hiddenfield":"Fushë e fshehur","iframe":"IFrame","unknown":"Objekt i Panjohur"},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteArea":"Hapësira Hedhëse","pasteMsg":"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (<strong>Ctrl/Cmd+V</strong>) dhe shtypni Mirë.","securityMsg":"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.","title":"Hidhe"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Citatet"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"about":{"copy":"Të drejtat e kopjimit &copy; $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor","help":"Kontrollo $1 për ndihmë.","moreInfo":"Për informacione rreth licencave shih faqen tonë:","title":"Rreth CKEditor","userGuide":"Udhëzuesi i Shfrytëzuesit të CKEditor"},"editor":"Redaktues i Pasur Teksti","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"Dërgo në server","image":"Imazh","flash":"Objekt flash","form":"Formular","checkbox":"Checkbox","radio":"Buton radio","textField":"Fushë tekst","textarea":"Hapësirë tekst","hiddenField":"Fushë e fshehur","button":"Buton","select":"Menu zgjedhjeje","imageButton":"Buton imazhi","notSet":"<e pazgjedhur>","id":"Id","name":"Emër","langDir":"Kod gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kod gjuhe","longDescr":"Përshkrim i hollësishëm","cssClass":"Klasa stili CSS","advisoryTitle":"Titull","cssStyle":"Stil","ok":"OK","cancel":"Anulo","close":"Mbyll","preview":"Parashiko","resize":"Ripërmaso","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Vlera e futur nuk është një numër","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?","confirmCancel":"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?","options":"Opsione","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stil","cssClasses":"Klasa Stili CSS","width":"Gjerësi","height":"Lartësi","align":"Rreshtim","alignLeft":"Majtas","alignRight":"Djathtas","alignCenter":"Qendër","alignJustify":"Zgjero","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"None","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Stili inline duhet të jetë një apo disa vlera të formatit \"emër: vlerë\", ndarë nga pikëpresje.","cssLengthTooltip":"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/lang/sr-latn.js deleted file mode 100644 index 7337c8b9..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sr-latn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sr-latn']={"wsc":{"btnIgnore":"Ignoriši","btnIgnoreAll":"Ignoriši sve","btnReplace":"Zameni","btnReplaceAll":"Zameni sve","btnUndo":"Vrati akciju","changeTo":"Izmeni","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?","manyChanges":"Provera spelovanja završena: %1 reč(i) je izmenjeno","noChanges":"Provera spelovanja završena: Nije izmenjena nijedna rec","noMispell":"Provera spelovanja završena: greške nisu pronadene","noSuggestions":"- Bez sugestija -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Nije u rečniku","oneChange":"Provera spelovanja završena: Izmenjena je jedna reč","progress":"Provera spelovanja u toku...","title":"Spell Check","toolbar":"Proveri spelovanje"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"toolbar":{"toolbarCollapse":"Suzi alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Obriši ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"None","headersRow":"Prvi red","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Obriši redove"},"rows":"Redova","summary":"Sažetak","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcearea":{"toolbar":"Kôd"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao čist tekst","title":"Zalepi kao čist tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"link":{"acccessKey":"Pristupni taster","advanced":"Napredni tagovi","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Unesi/izmeni sidro","menu":"Osobine sidra","title":"Osobine sidra","name":"Naziv sidra","errorName":"Unesite naziv sidra","remove":"Ukloni sidro"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","menu":"Izmeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Otkucajte adresu elektronske pote","noUrl":"Unesite URL linka","other":"<остало>","popupDependent":"Zavisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Prikaz preko celog ekrana (IE)","popupLeft":"Od leve ivice ekrana (px)","popupLocationBar":"Lokacija","popupMenuBar":"Kontekstni meni","popupResizable":"Promenljive veličine","popupScrollBars":"Scroll bar","popupStatusBar":"Statusna linija","popupToolbar":"Toolbar","popupTop":"Od vrha ekrana (px)","rel":"Odnos","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Naziv odredišnog frejma","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Unesi/izmeni link","type":"Vrsta linka","unlink":"Ukloni link","upload":"Pošalji"},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Osobine slika","resetSize":"Resetuj veličinu","title":"Osobine slika","titleButton":"Osobine dugmeta sa slikom","upload":"Pošalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Unesi/izmeni sidro","flash":"Flash Animation","hiddenfield":"Skriveno polje","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteArea":"Prostor za lepljenje","pasteMsg":"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki vašeg pregledača, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite još jednom u ovom prozoru.","title":"Zalepi"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Bogati uređivač teksta","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Resize","generalTab":"Opšte","advancedTab":"Napredni tagovi","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Opcije","target":"Meta","targetNew":"Novi prozor (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Širina","height":"Visina","align":"Ravnanje","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredina","alignJustify":"Obostrano ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sr.js b/platforms/browser/www/lib/ckeditor/lang/sr.js deleted file mode 100644 index b364d4a7..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sr']={"wsc":{"btnIgnore":"Игнориши","btnIgnoreAll":"Игнориши све","btnReplace":"Замени","btnReplaceAll":"Замени све","btnUndo":"Врати акцију","changeTo":"Измени","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?","manyChanges":"Провера спеловања завршена: %1 реч(и) је измењено","noChanges":"Провера спеловања завршена: Није измењена ниједна реч","noMispell":"Провера спеловања завршена: грешке нису пронађене","noSuggestions":"- Без сугестија -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Није у речнику","oneChange":"Провера спеловања завршена: Измењена је једна реч","progress":"Провера спеловања у току...","title":"Spell Check","toolbar":"Провери спеловање"},"undo":{"redo":"Понови акцију","undo":"Поништи акцију"},"toolbar":{"toolbarCollapse":"Склопи алатну траку","toolbarExpand":"Прошири алатну траку","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Едитор алатне траке"},"table":{"border":"Величина оквира","caption":"Наслов табеле","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"None","headersRow":"Први ред","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Особине табеле","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Обриши редове"},"rows":"Редова","summary":"Резиме","title":"Особине табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"stylescombo":{"label":"Стил","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcearea":{"toolbar":"Kôд"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Уклони форматирање"},"pastetext":{"button":"Залепи као чист текст","title":"Залепи као чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Ненабројива листа","numberedlist":"Набројиву листу"},"link":{"acccessKey":"Приступни тастер","advanced":"Напредни тагови","advisoryContentType":"Advisory врста садржаја","advisoryTitle":"Advisory наслов","anchor":{"toolbar":"Унеси/измени сидро","menu":"Особине сидра","title":"Особине сидра","name":"Име сидра","errorName":"Молимо Вас да унесете име сидра","remove":"Remove Anchor"},"anchorId":"Пo Ид-jу елемента","anchorName":"По називу сидра","charset":"Linked Resource Charset","cssClasses":"Stylesheet класе","emailAddress":"Адреса електронске поште","emailBody":"Садржај поруке","emailSubject":"Наслов","id":"Ид","info":"Линк инфо","langCode":"Смер језика","langDir":"Смер језика","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","menu":"Промени линк","name":"Назив","noAnchors":"(Нема доступних сидра)","noEmail":"Откуцајте адресу електронске поште","noUrl":"Унесите УРЛ линка","other":"<друго>","popupDependent":"Зависно (Netscape)","popupFeatures":"Могућности искачућег прозора","popupFullScreen":"Приказ преко целог екрана (ИE)","popupLeft":"Од леве ивице екрана (пиксела)","popupLocationBar":"Локација","popupMenuBar":"Контекстни мени","popupResizable":"Величина се мења","popupScrollBars":"Скрол бар","popupStatusBar":"Статусна линија","popupToolbar":"Toolbar","popupTop":"Од врха екрана (пиксела)","rel":"Однос","selectAnchor":"Одабери сидро","styles":"Стил","tabIndex":"Таб индекс","target":"Meтa","targetFrame":"<оквир>","targetFrameName":"Назив одредишног фрејма","targetPopup":"<искачући прозор>","targetPopupName":"Назив искачућег прозора","title":"Линк","toAnchor":"Сидро на овој страници","toEmail":"Eлектронска пошта","toUrl":"УРЛ","toolbar":"Унеси/измени линк","type":"Врста линка","unlink":"Уклони линк","upload":"Пошаљи"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи леву маргину"},"image":{"alertUrl":"Унесите УРЛ слике","alt":"Алтернативни текст","border":"Оквир","btnUpload":"Пошаљи на сервер","button2Img":"Да ли желите да промените одабрану слику дугмета као једноставну слику?","hSpace":"HSpace","img2Button":"Да ли желите да промените одабрану слику у слику дугмета?","infoTab":"Инфо слике","linkTab":"Линк","lockRatio":"Закључај однос","menu":"Особине слика","resetSize":"Ресетуј величину","title":"Особине слика","titleButton":"Особине дугмета са сликом","upload":"Пошаљи","urlMissing":"Недостаје УРЛ слике.","vSpace":"VSpace","validateBorder":"Ивица треба да буде цифра.","validateHSpace":"HSpace треба да буде цифра.","validateVSpace":"VSpace треба да буде цифра."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Нормално (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteArea":"Залепи зону","pasteMsg":"Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.","securityMsg":"Због сигурносних подешавања претраживача, едитор не може да приступи оставу. Требате да га поново залепите у овом прозору.","title":"Залепи"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Претражи сервер","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер језика","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"Stylesheet класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед странице","resize":"Resize","generalTab":"Опште","advancedTab":"Напредни тагови","validateNumberFailed":"Ова вредност није цигра.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опције","target":"Meтa","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet класе","width":"Ширина","height":"Висина","align":"Равнање","alignLeft":"Лево","alignRight":"Десно","alignCenter":"Средина","alignJustify":"Обострано равнање","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/sv.js b/platforms/browser/www/lib/ckeditor/lang/sv.js deleted file mode 100644 index 040d1315..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['sv']={"wsc":{"btnIgnore":"Ignorera","btnIgnoreAll":"Ignorera alla","btnReplace":"Ersätt","btnReplaceAll":"Ersätt alla","btnUndo":"Ångra","changeTo":"Ändra till","errorLoading":"Tjänsten är ej tillgänglig: %s.","ieSpellDownload":"Stavningskontrollen är ej installerad. Vill du göra det nu?","manyChanges":"Stavningskontroll slutförd: %1 ord rättades.","noChanges":"Stavningskontroll slutförd: Inga ord rättades.","noMispell":"Stavningskontroll slutförd: Inga stavfel påträffades.","noSuggestions":"- Förslag saknas -","notAvailable":"Tyvärr är tjänsten ej tillgänglig nu","notInDic":"Saknas i ordlistan","oneChange":"Stavningskontroll slutförd: Ett ord rättades.","progress":"Stavningskontroll pågår...","title":"Kontrollera stavning","toolbar":"Stavningskontroll"},"undo":{"redo":"Gör om","undo":"Ångra"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Redigera verktygsfält"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"sourcearea":{"toolbar":"Källa"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordlistor","btn_disable":"Inaktivera SCAYT","btn_enable":"Aktivera SCAYT","btn_langs":"Språk","btn_options":"Inställningar","text_title":""},"removeformat":{"toolbar":"Radera formatering"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"magicline":{"title":"Infoga paragraf här"},"list":{"bulletedlist":"Punktlista","numberedlist":"Numrerad lista"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"Efter element-id","anchorName":"Efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkkod","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange e-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"image":{"alertUrl":"Var god och ange bildens URL","alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"button":{"selectedLabel":"%1 (Vald)"},"blockquote":{"toolbar":"Blockcitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information av licensiering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignJustify":"Justera till marginaler","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/th.js b/platforms/browser/www/lib/ckeditor/lang/th.js deleted file mode 100644 index d24370fd..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['th']={"wsc":{"btnIgnore":"ยกเว้น","btnIgnoreAll":"ยกเว้นทั้งหมด","btnReplace":"แทนที่","btnReplaceAll":"แทนที่ทั้งหมด","btnUndo":"ยกเลิก","changeTo":"แก้ไขเป็น","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?","manyChanges":"ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ","noChanges":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ","noMispell":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด","noSuggestions":"- ไม่มีคำแนะนำใดๆ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"ไม่พบในดิกชันนารี","oneChange":"ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ","progress":"กำลังตรวจสอบคำสะกด...","title":"Spell Check","toolbar":"ตรวจการสะกดคำ"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"toolbar":{"toolbarCollapse":"ซ่อนแถบเครื่องมือ","toolbarExpand":"เปิดแถบเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"ล้างรูปแบบ"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"link":{"acccessKey":"แอคเซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเกริ่นนำ","advisoryTitle":"คำเกริ่นนำ","anchor":{"toolbar":"แทรก/แก้ไข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"กรุณาระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"การเขียน-อ่านภาษา","langDir":"การเขียน-อ่านภาษา","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","menu":"แก้ไข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)","noEmail":"กรุณาระบุอีเมล์ (E-mail)","noUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"แสดงเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ก (Pop-up)","popupFullScreen":"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิกัดซ้าย (Left Position)","popupLocationBar":"แสดงที่อยู่ของไฟล์","popupMenuBar":"แสดงแถบเมนู","popupResizable":"สามารถปรับขนาดได้","popupScrollBars":"แสดงแถบเลื่อน","popupStatusBar":"แสดงแถบสถานะ","popupToolbar":"แสดงแถบเครื่องมือ","popupTop":"พิกัดบน (Top Position)","rel":"ความสัมพันธ์","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลักษณะการแสดงผล","tabIndex":"ลำดับของ แท็บ","target":"การเปิดหน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เก็ตเฟรม","targetPopup":"<เปิดหน้าจอเล็ก (Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ก (Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"แทรก/แก้ไข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"image":{"alertUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)","alt":"คำประกอบรูปภาพ","border":"ขนาดขอบรูป","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"ระยะแนวนอน","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ข้อมูลของรูปภาพ","linkTab":"ลิ้งค์","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","resetSize":"กำหนดรูปเท่าขนาดจริง","title":"คุณสมบัติของ รูปภาพ","titleButton":"คุณสมบัติของ ปุ่มแบบรูปภาพ","upload":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","vSpace":"ระยะแนวตั้ง","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"fakeobjects":{"anchor":"แทรก/แก้ไข Anchor","flash":"ภาพอนิเมชั่นแฟลช","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"วัตถุไม่ทราบชนิด"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"กึ่งกลาง","alignJustify":"நியாயப்படுத்தவும்","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/tr.js b/platforms/browser/www/lib/ckeditor/lang/tr.js deleted file mode 100644 index ace5d64f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['tr']={"wsc":{"btnIgnore":"Yoksay","btnIgnoreAll":"Tümünü Yoksay","btnReplace":"Değiştir","btnReplaceAll":"Tümünü Değiştir","btnUndo":"Geri Al","changeTo":"Şuna değiştir:","errorLoading":"Uygulamada yüklerken hata oluştu: %s.","ieSpellDownload":"Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?","manyChanges":"Yazım denetimi tamamlandı: %1 kelime değiştirildi","noChanges":"Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi","noMispell":"Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı","noSuggestions":"- Öneri Yok -","notAvailable":"Üzügünüz, bu servis şuanda hizmet dışıdır.","notInDic":"Sözlükte Yok","oneChange":"Yazım denetimi tamamlandı: Bir kelime değiştirildi","progress":"Yazım denetimi işlemde...","title":"Yazımı Denetle","toolbar":"Yazım Denetimi"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"sourcearea":{"toolbar":"Kaynak"},"scayt":{"btn_about":"SCAYT'ı hakkında","btn_dictionaries":"Sözlükler","btn_disable":"SCAYT'ı pasifleştir","btn_enable":"SCAYT'ı etkinleştir","btn_langs":"Diller","btn_options":"Seçenekler","text_title":""},"removeformat":{"toolbar":"Biçimi Kaldır"},"pastetext":{"button":"Düz Metin Olarak Yapıştır","title":"Düz Metin Olarak Yapıştır"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"magicline":{"title":"Parağrafı buraya ekle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"link":{"acccessKey":"Erişim Tuşu","advanced":"Gelişmiş","advisoryContentType":"Danışma İçerik Türü","advisoryTitle":"Danışma Başlığı","anchor":{"toolbar":"Bağlantı Ekle/Düzenle","menu":"Bağlantı Özellikleri","title":"Bağlantı Özellikleri","name":"Bağlantı Adı","errorName":"Lütfen bağlantı için ad giriniz","remove":"Bağlantıyı Kaldır"},"anchorId":"Eleman Kimlik Numarası ile","anchorName":"Bağlantı Adı ile","charset":"Bağlı Kaynak Karakter Gurubu","cssClasses":"Biçem Sayfası Sınıfları","emailAddress":"E-Posta Adresi","emailBody":"İleti Gövdesi","emailSubject":"İleti Konusu","id":"Id","info":"Link Bilgisi","langCode":"Dil Yönü","langDir":"Dil Yönü","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","menu":"Link Düzenle","name":"Ad","noAnchors":"(Bu belgede hiç çapa yok)","noEmail":"Lütfen E-posta adresini yazın","noUrl":"Lütfen Link URL'sini yazın","other":"<diğer>","popupDependent":"Bağımlı (Netscape)","popupFeatures":"Yeni Açılan Pencere Özellikleri","popupFullScreen":"Tam Ekran (IE)","popupLeft":"Sola Göre Konum","popupLocationBar":"Yer Çubuğu","popupMenuBar":"Menü Çubuğu","popupResizable":"Resizable","popupScrollBars":"Kaydırma Çubukları","popupStatusBar":"Durum Çubuğu","popupToolbar":"Araç Çubuğu","popupTop":"Yukarıya Göre Konum","rel":"İlişki","selectAnchor":"Bağlantı Seç","styles":"Biçem","tabIndex":"Sekme İndeksi","target":"Hedef","targetFrame":"<çerçeve>","targetFrameName":"Hedef Çerçeve Adı","targetPopup":"<yeni açılan pencere>","targetPopupName":"Yeni Açılan Pencere Adı","title":"Link","toAnchor":"Bu sayfada çapa","toEmail":"E-Posta","toUrl":"URL","toolbar":"Link Ekle/Düzenle","type":"Link Türü","unlink":"Köprü Kaldır","upload":"Karşıya Yükle"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"image":{"alertUrl":"Lütfen resmin URL'sini yazınız","alt":"Alternatif Yazı","border":"Kenar","btnUpload":"Sunucuya Yolla","button2Img":"Seçili resim butonunu basit resime çevirmek istermisiniz?","hSpace":"Yatay Boşluk","img2Button":"Seçili olan resimi, resimli butona çevirmek istermisiniz?","infoTab":"Resim Bilgisi","linkTab":"Köprü","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","resetSize":"Boyutu Başa Döndür","title":"Resim Özellikleri","titleButton":"Resimli Düğme Özellikleri","upload":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı eksiktir.","vSpace":"Dikey Boşluk","validateBorder":"Çerçeve tam sayı olmalıdır.","validateHSpace":"HSpace tam sayı olmalıdır.","validateVSpace":"VSpace tam sayı olmalıdır."},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"fakeobjects":{"anchor":"Bağlantı","flash":"Flash Animasyonu","hiddenfield":"Gizli Alan","iframe":"IFrame","unknown":"Bilinmeyen Nesne"},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"clipboard":{"copy":"Kopyala","copyError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteArea":"Yapıştırma Alanı","pasteMsg":"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.","securityMsg":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..","title":"Yapıştır"},"button":{"selectedLabel":"%1 (Seçilmiş)"},"blockquote":{"toolbar":"Blok Oluştur"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","help":"Yardım için $1 kontrol edin.","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:","title":"CKEditor Hakkında","userGuide":"CKEditor Kullanıcı Kılavuzu"},"editor":"Zengin Metin Editörü","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Onay Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":"Dil Kodlaması","longDescr":"Uzun Tanımlı URL","cssClass":"Biçem Sayfası Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Biçem","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Biçem","cssClasses":"Biçem Sayfası Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","alignLeft":"Sol","alignRight":"Sağ","alignCenter":"Ortala","alignJustify":"İki Kenara Yaslanmış","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).","invalidInlineStyle":"Satıriçi biçem için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/tt.js b/platforms/browser/www/lib/ckeditor/lang/tt.js deleted file mode 100644 index f0c2e960..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['tt']={"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"table":{"border":"Чик калынлыгы","caption":"Исем","cell":{"menu":"Күзәнәк","insertBefore":"Алдына күзәнәк өстәү","insertAfter":"Артына күзәнәк өстәү","deleteCell":"Күзәнәкләрне бетерү","merge":"Күзәнәкләрне берләштерү","mergeRight":"Уң яктагы белән берләштерү","mergeDown":"Астагы белән берләштерү","splitHorizontal":"Күзәнәкне юлларга бүлү","splitVertical":"Күзәнәкне баганаларга бүлү","title":"Күзәнәк үзлекләре","cellType":"Күзәнәк төре","rowSpan":"Юлларны берләштерү","colSpan":"Баганаларны берләштерү","wordWrap":"Текстны күчерү","hAlign":"Ятма тигезләү","vAlign":"Асма тигезләү","alignBaseline":"Таяныч сызыгы","bgColor":"Фон төсе","borderColor":"Чик төсе","data":"Мәгълүмат","header":"Башлык","yes":"Әйе","no":"Юк","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сайлау"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Таблица үзлекләре","row":{"menu":"Юл","insertBefore":"Өстән юллар өстәү","insertAfter":"Астан юллар өстәү","deleteRow":"Юлларны бетерү"},"rows":"Юллар","summary":"Йомгаклау","title":"Таблица үзлекләре","toolbar":"Таблица","widthPc":"процент","widthPx":"Нокталар","widthUnit":"киңлек берәмлеге"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"sourcearea":{"toolbar":"Чыганак"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"removeformat":{"toolbar":"Форматлауны бетерү"},"pastetext":{"button":"Форматлаусыз текст өстәү","title":"Форматлаусыз текст өстәү"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word'тан өстәү","toolbar":"Word'тан өстәү"},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"magicline":{"title":"Бирегә параграф өстәү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"link":{"acccessKey":"Access Key","advanced":"Киңәйтелгән көйләүләр","advisoryContentType":"Advisory Content Type","advisoryTitle":"Киңәш исем","anchor":{"toolbar":"Якорь","menu":"Якорьне үзгәртү","title":"Якорь үзлекләре","name":"Якорь исеме","errorName":"Якорьнең исемен языгыз","remove":"Якорьне бетерү"},"anchorId":"Элемент идентификаторы буенча","anchorName":"Якорь исеме буенча","charset":"Linked Resource Charset","cssClasses":"Стильләр класслары","emailAddress":"Электрон почта адресы","emailBody":"Хат эчтәлеге","emailSubject":"Хат темасы","id":"Идентификатор","info":"Сылталама тасвирламасы","langCode":"Тел коды","langDir":"Язылыш юнəлеше","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","menu":"Сылталамаyны үзгәртү","name":"Исем","noAnchors":"(Әлеге документта якорьләр табылмады)","noEmail":"Электрон почта адресын языгыз","noUrl":"Сылталаманы языгыз","other":"<бүтән>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Бәйләнеш","selectAnchor":"Якорьне сайлау","styles":"Стиль","tabIndex":"Tab Index","target":"Максат","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Сылталама","toAnchor":"Якорьне текст белән бәйләү","toEmail":"Электрон почта","toUrl":"Сылталама","toolbar":"Сылталама","type":"Сылталама төре","unlink":"Сылталаманы бетерү","upload":"Йөкләү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"image":{"alertUrl":"Please type the image URL","alt":"Альтернатив текст","border":"Чик","btnUpload":"Серверга җибәрү","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Рәсем тасвирламасы","linkTab":"Сылталама","lockRatio":"Lock Ratio","menu":"Рәсем үзлекләре","resetSize":"Reset Size","title":"Рәсем үзлекләре","titleButton":"Рәсемле төймə үзлекләре","upload":"Йөкләү","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Чик киңлеге сан булырга тиеш","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"format":{"label":"Форматлау","panelTitle":"Параграф форматлавы","tag_address":"Адрес","tag_div":"Гади (DIV)","tag_h1":"Башлам 1","tag_h2":"Башлам 2","tag_h3":"Башлам 3","tag_h4":"Башлам 4","tag_h5":"Башлам 5","tag_h6":"Башлам 6","tag_p":"Гади","tag_pre":"Форматлаулы"},"fakeobjects":{"anchor":"Якорь","flash":"Флеш анимациясы","hiddenfield":"Яшерен кыр","iframe":"IFrame","unknown":"Танылмаган объект"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteArea":"Өстәү мәйданы","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Өстәү"},"button":{"selectedLabel":"%1 (Сайланган)"},"blockquote":{"toolbar":"Өземтә блогы"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"about":{"copy":"Copyright &copy; $1. Бар хокуклар сакланган","dlgTitle":"CKEditor турында","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"CKEditor турында","userGuide":"CKEditor кулланмасы"},"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"Рәсем","flash":"Флеш","form":"Форма","checkbox":"Чекбокс","radio":"Радио төймә","textField":"Текст кыры","textarea":"Текст мәйданы","hiddenField":"Яшерен кыр","button":"Төймə","select":"Сайлау кыры","imageButton":"Рәсемле төймə","notSet":"<билгеләнмәгән>","id":"Id","name":"Исем","langDir":"Язылыш юнəлеше","langDirLtr":"Сулдан уңга язылыш (LTR)","langDirRtl":"Уңнан сулга язылыш (RTL)","langCode":"Тел коды","longDescr":"Җентекле тасвирламага сылталама","cssClass":"Стильләр класслары","advisoryTitle":"Киңәш исем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт сан түгел","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","alignLeft":"Сул якка","alignRight":"Уң якка","alignCenter":"Үзәккә","alignJustify":"Киңлеккә карап тигезләү","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"None","invalidValue":"Дөрес булмаган кыйммәт","invalidHeight":"Биеклек сан булырга тиеш","invalidWidth":"Киңлек сан булырга тиеш","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/ug.js b/platforms/browser/www/lib/ckeditor/lang/ug.js deleted file mode 100644 index bd4226ce..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['ug']={"wsc":{"btnIgnore":"پەرۋا قىلما","btnIgnoreAll":"ھەممىگە پەرۋا قىلما","btnReplace":"ئالماشتۇر","btnReplaceAll":"ھەممىنى ئالماشتۇر","btnUndo":"يېنىۋال","changeTo":"ئۆزگەرت","errorLoading":"لازىملىق مۇلازىمېتىرنى يۈكلىگەندە خاتالىق كۆرۈلدى: %s.","ieSpellDownload":"ئىملا تەكشۈرۈش قىستۇرمىسى تېخى ئورنىتىلمىغان، ھازىرلا چۈشۈرەمسىز؟","manyChanges":"ئىملا تەكشۈرۈش تامام: %1 سۆزنى ئۆزگەرتتى","noChanges":"ئىملا تەكشۈرۈش تامام: ھېچقانداق سۆزنى ئۆزگەرتمىدى","noMispell":"ئىملا تەكشۈرۈش تامام: ئىملا خاتالىقى بايقالمىدى","noSuggestions":"-تەكلىپ يوق-","notAvailable":"كەچۈرۈڭ، مۇلازىمېتىرنى ۋاقتىنچە ئىشلەتكىلى بولمايدۇ","notInDic":"لۇغەتتە يوق","oneChange":"ئىملا تەكشۈرۈش تامام: بىر سۆزنى ئۆزگەرتتى","progress":"ئىملا تەكشۈرۈۋاتىدۇ…","title":"ئىملا تەكشۈر","toolbar":"ئىملا تەكشۈر"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون ۋە بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"sourcearea":{"toolbar":"مەنبە"},"scayt":{"btn_about":"شۇئان ئىملا تەكشۈرۈش ھەققىدە","btn_dictionaries":"لۇغەت","btn_disable":"شۇئان ئىملا تەكشۈرۈشنى چەكلە","btn_enable":"شۇئان ئىملا تەكشۈرۈشنى قوزغات","btn_langs":"تىل","btn_options":"تاللانما","text_title":""},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"link":{"acccessKey":"زىيارەت كۇنۇپكا","advanced":"ئالىي","advisoryContentType":"مەزمۇن تىپى","advisoryTitle":"ماۋزۇ","anchor":{"toolbar":"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە","menu":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","title":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","name":"لەڭگەرلىك نۇقتا ئاتى","errorName":"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ","remove":"لەڭگەرلىك نۇقتا ئۆچۈر"},"anchorId":"لەڭگەرلىك نۇقتا ID سى بويىچە","anchorName":"لەڭگەرلىك نۇقتا ئاتى بويىچە","charset":"ھەرپ كودلىنىشى","cssClasses":"ئۇسلۇب خىلى ئاتى","emailAddress":"ئادرېس","emailBody":"مەزمۇن","emailSubject":"ماۋزۇ","id":"ID","info":"ئۇلانما ئۇچۇرى","langCode":"تىل كودى","langDir":"تىل يۆنىلىشى","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","menu":"ئۇلانما تەھرىر","name":"ئات","noAnchors":"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)","noEmail":"ئېلخەت ئادرېسىنى كىرگۈزۈڭ","noUrl":"ئۇلانما ئادرېسىنى كىرگۈزۈڭ","other":"‹باشقا›","popupDependent":"تەۋە (NS)","popupFeatures":"قاڭقىش كۆزنەك خاسلىقى","popupFullScreen":"پۈتۈن ئېكران (IE)","popupLeft":"سول","popupLocationBar":"ئادرېس بالداق","popupMenuBar":"تىزىملىك بالداق","popupResizable":"چوڭلۇقى ئۆزگەرتىشچان","popupScrollBars":"دومىلىما سۈرگۈچ","popupStatusBar":"ھالەت بالداق","popupToolbar":"قورال بالداق","popupTop":"ئوڭ","rel":"باغلىنىش","selectAnchor":"بىر لەڭگەرلىك نۇقتا تاللاڭ","styles":"قۇر ئىچىدىكى ئۇسلۇبى","tabIndex":"Tab تەرتىپى","target":"نىشان","targetFrame":"‹كاندۇك›","targetFrameName":"نىشان كاندۇك ئاتى","targetPopup":"‹قاڭقىش كۆزنەك›","targetPopupName":"قاڭقىش كۆزنەك ئاتى","title":"ئۇلانما","toAnchor":"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى","toEmail":"ئېلخەت","toUrl":"ئادرېس","toolbar":"ئۇلانما قىستۇر/تەھرىرلە","type":"ئۇلانما تىپى","unlink":"ئۇلانما بىكار قىل","upload":"يۈكلە"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"image":{"alertUrl":"سۈرەت ئادرېسىنى كىرگۈزۈڭ","alt":"تېكىست ئالماشتۇر","border":"گىرۋەك چوڭلۇقى","btnUpload":"مۇلازىمېتىرغا يۈكلە","button2Img":"نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟","hSpace":"توغرىسىغا ئارىلىقى","img2Button":"نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟","infoTab":"سۈرەت","linkTab":"ئۇلانما","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","resetSize":"ئەسلى چوڭلۇق","title":"سۈرەت خاسلىقى","titleButton":"سۈرەت دائىرە خاسلىقى","upload":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","vSpace":"بويىغا ئارىلىقى","validateBorder":"گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ","validateHSpace":"توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ","validateVSpace":"بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرېس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"fakeobjects":{"anchor":"لەڭگەرلىك نۇقتا","flash":"Flash جانلاندۇرۇم","hiddenfield":"يوشۇرۇن دائىرە","iframe":"IFrame","unknown":"يوچۇن نەڭ"},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"clipboard":{"copy":"نەشر ھوقۇقىغا ئىگە بەلگىسى","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"ھەرپتاختا تېز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بېسىڭ","securityMsg":"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.","title":"چاپلا"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"بۆلەك نەقىل"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor ھەققىدە","help":"$1 نى زىيارەت قىلىپ ياردەمگە ئېرىشىڭ","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ","title":"CKEditor ھەققىدە","userGuide":"CKEditor ئىشلەتكۈچى قوللانمىسى"},"editor":"تەھرىرلىگۈچ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","flash":"Flash","form":"جەدۋەل","checkbox":"كۆپ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تېكىست","textarea":"كۆپ قۇر تېكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرېسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز كەچ","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"يېڭى كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئېگىزلىك","align":"توغرىلىنىشى","alignLeft":"سول","alignRight":"ئوڭ","alignCenter":"ئوتتۇرا","alignJustify":"ئىككى تەرەپتىن توغرىلا","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"None","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">، ئىشلەتكىلى بولمايدۇ</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/uk.js b/platforms/browser/www/lib/ckeditor/lang/uk.js deleted file mode 100644 index 9e97eceb..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['uk']={"wsc":{"btnIgnore":"Пропустити","btnIgnoreAll":"Пропустити все","btnReplace":"Замінити","btnReplaceAll":"Замінити все","btnUndo":"Назад","changeTo":"Замінити на","errorLoading":"Помилка завантаження : %s.","ieSpellDownload":"Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?","manyChanges":"Перевірку орфографії завершено: 1% слів(ова) змінено","noChanges":"Перевірку орфографії завершено: жодне слово не змінено","noMispell":"Перевірку орфографії завершено: помилок не знайдено","noSuggestions":"- немає варіантів -","notAvailable":"Вибачте, але сервіс наразі недоступний.","notInDic":"Немає в словнику","oneChange":"Перевірку орфографії завершено: змінено одне слово","progress":"Виконується перевірка орфографії...","title":"Перевірка орфографії","toolbar":"Перевірити орфографію"},"undo":{"redo":"Повторити","undo":"Повернути"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Вставити комірку перед","insertAfter":"Вставити комірку після","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати справа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"Властивості комірки","cellType":"Тип комірки","rowSpan":"Об'єднання рядків","colSpan":"Об'єднання стовпців","wordWrap":"Автоперенесення тексту","hAlign":"Гориз. вирівнювання","vAlign":"Верт. вирівнювання","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"Ні","invalidWidth":"Ширина комірки повинна бути цілим числом.","invalidHeight":"Висота комірки повинна бути цілим числом.","invalidRowSpan":"Кількість об'єднуваних рядків повинна бути цілим числом.","invalidColSpan":"Кількість об'єднуваних стовбців повинна бути цілим числом.","chooseColor":"Обрати"},"cellPad":"Внутр. відступ","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Вставити стовбець перед","insertAfter":"Вставити стовбець після","deleteColumn":"Видалити стовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки стовбців/рядків","headersBoth":"Стовбці і рядки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"Рядки","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"Одиниці вимір."},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"sourcearea":{"toolbar":"Джерело"},"scayt":{"btn_about":"Про SCAYT","btn_dictionaries":"Словники","btn_disable":"Вимкнути SCAYT","btn_enable":"Ввімкнути SCAYT","btn_langs":"Мови","btn_options":"Опції","text_title":""},"removeformat":{"toolbar":"Очистити форматування"},"pastetext":{"button":"Вставити тільки текст","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"magicline":{"title":"Вставити абзац"},"list":{"bulletedlist":"Маркірований список","numberedlist":"Нумерований список"},"link":{"acccessKey":"Гаряча клавіша","advanced":"Додаткове","advisoryContentType":"Тип вмісту","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставити/Редагувати якір","menu":"Властивості якоря","title":"Властивості якоря","name":"Ім'я якоря","errorName":"Будь ласка, вкажіть ім'я якоря","remove":"Прибрати якір"},"anchorId":"За ідентифікатором елементу","anchorName":"За ім'ям елементу","charset":"Кодування","cssClasses":"Клас CSS","emailAddress":"Адреса ел. пошти","emailBody":"Тіло повідомлення","emailSubject":"Тема листа","id":"Ідентифікатор","info":"Інформація посилання","langCode":"Код мови","langDir":"Напрямок мови","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","menu":"Вставити посилання","name":"Ім'я","noAnchors":"(В цьому документі немає якорів)","noEmail":"Будь ласка, вкажіть адрес ел. пошти","noUrl":"Будь ласка, вкажіть URL посилання","other":"<інший>","popupDependent":"Залежний (Netscape)","popupFeatures":"Властивості випливаючого вікна","popupFullScreen":"Повний екран (IE)","popupLeft":"Позиція зліва","popupLocationBar":"Панель локації","popupMenuBar":"Панель меню","popupResizable":"Масштабоване","popupScrollBars":"Стрічки прокрутки","popupStatusBar":"Рядок статусу","popupToolbar":"Панель інструментів","popupTop":"Позиція зверху","rel":"Зв'язок","selectAnchor":"Оберіть якір","styles":"Стиль CSS","tabIndex":"Послідовність переходу","target":"Ціль","targetFrame":"<фрейм>","targetFrameName":"Ім'я цільового фрейму","targetPopup":"<випливаюче вікно>","targetPopupName":"Ім'я випливаючого вікна","title":"Посилання","toAnchor":"Якір на цю сторінку","toEmail":"Ел. пошта","toUrl":"URL","toolbar":"Вставити/Редагувати посилання","type":"Тип посилання","unlink":"Видалити посилання","upload":"Надіслати"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"image":{"alertUrl":"Будь ласка, вкажіть URL зображення","alt":"Альтернативний текст","border":"Рамка","btnUpload":"Надіслати на сервер","button2Img":"Бажаєте перетворити обрану кнопку-зображення на просте зображення?","hSpace":"Гориз. відступ","img2Button":"Бажаєте перетворити обране зображення на кнопку-зображення?","infoTab":"Інформація про зображення","linkTab":"Посилання","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","resetSize":"Очистити поля розмірів","title":"Властивості зображення","titleButton":"Властивості кнопки із зображенням","upload":"Надіслати","urlMissing":"Вкажіть URL зображення.","vSpace":"Верт. відступ","validateBorder":"Ширина рамки повинна бути цілим числом.","validateHSpace":"Гориз. відступ повинен бути цілим числом.","validateVSpace":"Верт. відступ повинен бути цілим числом."},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"format":{"label":"Форматування","panelTitle":"Форматування параграфа","tag_address":"Адреса","tag_div":"Нормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Нормальний","tag_pre":"Форматований"},"fakeobjects":{"anchor":"Якір","flash":"Flash-анімація","hiddenfield":"Приховані Поля","iframe":"IFrame","unknown":"Невідомий об'єкт"},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опції контекстного меню"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteArea":"Область вставки","pasteMsg":"Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.","securityMsg":"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.","title":"Вставити"},"button":{"selectedLabel":"%1 (Вибрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"about":{"copy":"Copyright &copy; $1. Всі права застережено.","dlgTitle":"Про CKEditor","help":"Перевірте $1 для допомоги.","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:","title":"Про CKEditor","userGuide":"Інструкція Користувача для CKEditor"},"editor":"Текстовий редактор","editorPanel":"Панель текстового редактора","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд Сервера","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"Текстове поле","textarea":"Текстова область","hiddenField":"Приховане поле","button":"Кнопка","select":"Список","imageButton":"Кнопка із зображенням","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'я","langDir":"Напрямок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий опис URL","cssClass":"Клас CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"Скасувати","close":"Закрити","preview":"Попередній перегляд","resize":"Потягніть для зміни розмірів","generalTab":"Основне","advancedTab":"Додаткове","validateNumberFailed":"Значення не є цілим числом.","confirmNewPage":"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?","confirmCancel":"Деякі опції змінено. Закрити вікно без збереження змін?","options":"Опції","target":"Ціль","targetNew":"Нове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"Батьківський фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"Клас CSS","width":"Ширина","height":"Висота","align":"Вирівнювання","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширині","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidCssLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).","invalidHtmlLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px або %).","invalidInlineStyle":"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \"ім'я : значення\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доступне</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/vi.js b/platforms/browser/www/lib/ckeditor/lang/vi.js deleted file mode 100644 index 0fed6b13..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['vi']={"wsc":{"btnIgnore":"Bỏ qua","btnIgnoreAll":"Bỏ qua tất cả","btnReplace":"Thay thế","btnReplaceAll":"Thay thế tất cả","btnUndo":"Phục hồi lại","changeTo":"Chuyển thành","errorLoading":"Lỗi khi đang nạp dịch vụ ứng dụng: %s.","ieSpellDownload":"Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?","manyChanges":"Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi","noChanges":"Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi","noMispell":"Hoàn tất kiểm tra chính tả: Không có lỗi chính tả","noSuggestions":"- Không đưa ra gợi ý về từ -","notAvailable":"Xin lỗi, dịch vụ này hiện tại không có.","notInDic":"Không có trong từ điển","oneChange":"Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi","progress":"Đang tiến hành kiểm tra chính tả...","title":"Kiểm tra chính tả","toolbar":"Kiểm tra chính tả"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"sourcearea":{"toolbar":"Mã HTML"},"scayt":{"btn_about":"Thông tin về SCAYT","btn_dictionaries":"Từ điển","btn_disable":"Tắt SCAYT","btn_enable":"Bật SCAYT","btn_langs":"Ngôn ngữ","btn_options":"Tùy chọn","text_title":""},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"link":{"acccessKey":"Phím hỗ trợ truy cập","advanced":"Mở rộng","advisoryContentType":"Nội dung hướng dẫn","advisoryTitle":"Nhan đề hướng dẫn","anchor":{"toolbar":"Chèn/Sửa điểm neo","menu":"Thuộc tính điểm neo","title":"Thuộc tính điểm neo","name":"Tên của điểm neo","errorName":"Hãy nhập vào tên của điểm neo","remove":"Xóa neo"},"anchorId":"Theo định danh thành phần","anchorName":"Theo tên điểm neo","charset":"Bảng mã của tài nguyên được liên kết đến","cssClasses":"Lớp Stylesheet","emailAddress":"Thư điện tử","emailBody":"Nội dung thông điệp","emailSubject":"Tiêu đề thông điệp","id":"Định danh","info":"Thông tin liên kết","langCode":"Mã ngôn ngữ","langDir":"Hướng ngôn ngữ","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","menu":"Sửa liên kết","name":"Tên","noAnchors":"(Không có điểm neo nào trong tài liệu)","noEmail":"Hãy đưa vào địa chỉ thư điện tử","noUrl":"Hãy đưa vào đường dẫn liên kết (URL)","other":"<khác>","popupDependent":"Phụ thuộc (Netscape)","popupFeatures":"Đặc điểm của cửa sổ Popup","popupFullScreen":"Toàn màn hình (IE)","popupLeft":"Vị trí bên trái","popupLocationBar":"Thanh vị trí","popupMenuBar":"Thanh Menu","popupResizable":"Có thể thay đổi kích cỡ","popupScrollBars":"Thanh cuộn","popupStatusBar":"Thanh trạng thái","popupToolbar":"Thanh công cụ","popupTop":"Vị trí phía trên","rel":"Quan hệ","selectAnchor":"Chọn một điểm neo","styles":"Kiểu (style)","tabIndex":"Chỉ số của Tab","target":"Đích","targetFrame":"<khung>","targetFrameName":"Tên khung đích","targetPopup":"<cửa sổ popup>","targetPopupName":"Tên cửa sổ Popup","title":"Liên kết","toAnchor":"Neo trong trang này","toEmail":"Thư điện tử","toUrl":"URL","toolbar":"Chèn/Sửa liên kết","type":"Kiểu liên kết","unlink":"Xoá liên kết","upload":"Tải lên"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image":{"alertUrl":"Hãy đưa vào đường dẫn của ảnh","alt":"Chú thích ảnh","border":"Đường viền","btnUpload":"Tải lên máy chủ","button2Img":"Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?","hSpace":"Khoảng đệm ngang","img2Button":"Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?","infoTab":"Thông tin của ảnh","linkTab":"Tab liên kết","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","resetSize":"Kích thước gốc","title":"Thuộc tính của ảnh","titleButton":"Thuộc tính nút của ảnh","upload":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","vSpace":"Khoảng đệm dọc","validateBorder":"Chiều rộng của đường viền phải là một số nguyên dương","validateHSpace":"Khoảng đệm ngang phải là một số nguyên dương","validateVSpace":"Khoảng đệm dọc phải là một số nguyên dương"},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"fakeobjects":{"anchor":"Điểm neo","flash":"Flash","hiddenfield":"Trường ẩn","iframe":"IFrame","unknown":"Đối tượng không rõ ràng"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteArea":"Khu vực dán","pasteMsg":"Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.","securityMsg":"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.","title":"Dán"},"button":{"selectedLabel":"%1 (Đã chọn)"},"blockquote":{"toolbar":"Khối trích dẫn"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"about":{"copy":"Bản quyền &copy; $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor","help":"Kiểm tra $1 để được giúp đỡ.","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:","title":"Thông tin về CKEditor","userGuide":"Hướng dẫn sử dụng CKEditor"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"Chiều cao","align":"Vị trí","alignLeft":"Trái","alignRight":"Phải","alignCenter":"Giữa","alignJustify":"Sắp chữ","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/lang/zh-cn.js deleted file mode 100644 index 1198971f..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['zh-cn']={"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"替换","btnReplaceAll":"全部替换","btnUndo":"撤消","changeTo":"更改为","errorLoading":"加载应该服务主机时出错: %s.","ieSpellDownload":"拼写检查插件还没安装, 您是否想现在就下载?","manyChanges":"拼写检查完成: 更改了 %1 个单词","noChanges":"拼写检查完成: 没有更改任何单词","noMispell":"拼写检查完成: 没有发现拼写错误","noSuggestions":"- 没有建议 -","notAvailable":"抱歉, 服务目前暂不可用","notInDic":"没有在字典里","oneChange":"拼写检查完成: 更改了一个单词","progress":"正在进行拼写检查...","title":"拼写检查","toolbar":"拼写检查"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcearea":{"toolbar":"源码"},"scayt":{"btn_about":"关于即时拼写检查","btn_dictionaries":"字典","btn_disable":"禁用即时拼写检查","btn_enable":"启用即时拼写检查","btn_langs":"语言","btn_options":"选项","text_title":""},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"link":{"acccessKey":"访问键","advanced":"高级","advisoryContentType":"内容类型","advisoryTitle":"标题","anchor":{"toolbar":"插入/编辑锚点链接","menu":"锚点链接属性","title":"锚点链接属性","name":"锚点名称","errorName":"请输入锚点名称","remove":"删除锚点"},"anchorId":"按锚点 ID","anchorName":"按锚点名称","charset":"字符编码","cssClasses":"样式类名称","emailAddress":"地址","emailBody":"内容","emailSubject":"主题","id":"ID","info":"超链接信息","langCode":"语言代码","langDir":"语言方向","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","menu":"编辑超链接","name":"名称","noAnchors":"(此文档没有可用的锚点)","noEmail":"请输入电子邮件地址","noUrl":"请输入超链接地址","other":"<其他>","popupDependent":"依附 (NS)","popupFeatures":"弹出窗口属性","popupFullScreen":"全屏 (IE)","popupLeft":"左","popupLocationBar":"地址栏","popupMenuBar":"菜单栏","popupResizable":"可缩放","popupScrollBars":"滚动条","popupStatusBar":"状态栏","popupToolbar":"工具栏","popupTop":"右","rel":"关联","selectAnchor":"选择一个锚点","styles":"行内样式","tabIndex":"Tab 键次序","target":"目标","targetFrame":"<框架>","targetFrameName":"目标框架名称","targetPopup":"<弹出窗口>","targetPopupName":"弹出窗口名称","title":"超链接","toAnchor":"页内锚点链接","toEmail":"电子邮件","toUrl":"地址","toolbar":"插入/编辑超链接","type":"超链接类型","unlink":"取消超链接","upload":"上传"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image":{"alertUrl":"请输入图像地址","alt":"替换文本","border":"边框大小","btnUpload":"上传到服务器","button2Img":"确定要把当前图像按钮转换为普通图像吗?","hSpace":"水平间距","img2Button":"确定要把当前图像改变为图像按钮吗?","infoTab":"图像信息","linkTab":"链接","lockRatio":"锁定比例","menu":"图像属性","resetSize":"原始尺寸","title":"图像属性","titleButton":"图像域属性","upload":"上传","urlMissing":"缺少图像源文件地址","vSpace":"垂直间距","validateBorder":"边框大小必须为整数格式","validateHSpace":"水平间距必须为整数格式","validateVSpace":"垂直间距必须为整数格式"},"horizontalrule":{"toolbar":"插入水平线"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"fakeobjects":{"anchor":"锚点","flash":"Flash 动画","hiddenfield":"隐藏域","iframe":"IFrame","unknown":"未知对象"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteArea":"粘贴区域","pasteMsg":"请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>","securityMsg":"因为您的浏览器的安全设置原因,本编辑器不能直接访问您的剪贴板内容,你需要在本窗口重新粘贴一次。","title":"粘贴"},"button":{"selectedLabel":"已选中 %1 项"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor","help":"访问 $1 以获取帮助。","moreInfo":"相关授权许可信息请访问我们的网站:","title":"关于 CKEditor","userGuide":"CKEditor 用户向导"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存,是否确认新建文档?","confirmCancel":"部分修改尚未保存,是否确认关闭对话框?","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignJustify":"两端对齐","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"None","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数,可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字,或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,不可用</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/lang/zh.js b/platforms/browser/www/lib/ckeditor/lang/zh.js deleted file mode 100644 index e158e5bf..00000000 --- a/platforms/browser/www/lib/ckeditor/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.lang['zh']={"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"取代","btnReplaceAll":"全部取代","btnUndo":"復原","changeTo":"更改為","errorLoading":"無法聯系侍服器: %s.","ieSpellDownload":"尚未安裝拼字檢查元件。您是否想要現在下載?","manyChanges":"拼字檢查完成:更改了 %1 個單字","noChanges":"拼字檢查完成:未更改任何單字","noMispell":"拼字檢查完成:未發現拼字錯誤","noSuggestions":"- 無建議值 -","notAvailable":"抱歉,服務目前暫不可用","notInDic":"不在字典中","oneChange":"拼字檢查完成:更改了 1 個單字","progress":"進行拼字檢查中…","title":"拼字檢查","toolbar":"拼字檢查"},"undo":{"redo":"取消復原","undo":"復原"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"table":{"border":"框線大小","caption":"標題","cell":{"menu":"儲存格","insertBefore":"前方插入儲存格","insertAfter":"後方插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併","mergeDown":"向下合併","splitHorizontal":"水平分割儲存格","splitVertical":"垂直分割儲存格","title":"儲存格屬性","cellType":"儲存格類型","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"自動斷行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基準線","bgColor":"背景顏色","borderColor":"框線顏色","data":"資料","header":"Header","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字。","invalidHeight":"儲存格高度必須為數字。","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"選擇"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"行","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"行","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"無","headersRow":"First Row","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"行數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"列","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"列","summary":"Summary","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"stylescombo":{"label":"樣式","panelTitle":"Formatting Styles","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"sourcearea":{"toolbar":"原始碼"},"scayt":{"btn_about":"關於即時拼寫檢查","btn_dictionaries":"字典","btn_disable":"關閉即時拼寫檢查","btn_enable":"啟用即時拼寫檢查","btn_langs":"語言","btn_options":"選項","text_title":""},"removeformat":{"toolbar":"移除格式"},"pastetext":{"button":"貼成純文字","title":"貼成純文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"在此插入段落"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"link":{"acccessKey":"便捷鍵","advanced":"進階","advisoryContentType":"建議內容類型","advisoryTitle":"標題","anchor":{"toolbar":"錨點","menu":"編輯錨點","title":"錨點內容","name":"錨點名稱","errorName":"請輸入錨點名稱","remove":"移除錨點"},"anchorId":"依元件編號","anchorName":"依錨點名稱","charset":"連結資源的字元集","cssClasses":"樣式表類別","emailAddress":"電子郵件地址","emailBody":"郵件本文","emailSubject":"郵件主旨","id":"ID","info":"連結資訊","langCode":"語言碼","langDir":"語言方向","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","menu":"編輯連結","name":"名稱","noAnchors":"(本文件中無可用之錨點)","noEmail":"請輸入電子郵件","noUrl":"請輸入連結 URL","other":"<其他>","popupDependent":"獨立 (Netscape)","popupFeatures":"快顯視窗功能","popupFullScreen":"全螢幕 (IE)","popupLeft":"左側位置","popupLocationBar":"位置列","popupMenuBar":"功能表列","popupResizable":"可調大小","popupScrollBars":"捲軸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"頂端位置","rel":"關係","selectAnchor":"選取一個錨點","styles":"樣式","tabIndex":"定位順序","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架名稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗名稱","title":"連結","toAnchor":"文字中的錨點連結","toEmail":"電子郵件","toUrl":"網址","toolbar":"連結","type":"連結類型","unlink":"取消連結","upload":"上傳"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"image":{"alertUrl":"請輸入圖片 URL","alt":"替代文字","border":"框線","btnUpload":"傳送到伺服器","button2Img":"請問您確定要將「圖片按鈕」轉換成「圖片」嗎?","hSpace":"HSpace","img2Button":"請問您確定要將「圖片」轉換成「圖片按鈕」嗎?","infoTab":"影像資訊","linkTab":"連結","lockRatio":"固定比例","menu":"影像屬性","resetSize":"重設大小","title":"影像屬性","titleButton":"影像按鈕屬性","upload":"上傳","urlMissing":"遺失圖片來源之 URL ","vSpace":"VSpace","validateBorder":"框線必須是整數。","validateHSpace":"HSpace 必須是整數。","validateVSpace":"VSpace 必須是整數。"},"horizontalrule":{"toolbar":"插入水平線"},"format":{"label":"格式","panelTitle":"段落格式","tag_address":"地址","tag_div":"標準 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"標準","tag_pre":"格式設定"},"fakeobjects":{"anchor":"錨點","flash":"Flash 動畫","hiddenfield":"隱藏欄位","iframe":"IFrame","unknown":"無法辨識的物件"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"contextmenu":{"options":"內容功能表選項"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"貼上區","pasteMsg":"請使用鍵盤快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下「確定」。","securityMsg":"因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。","title":"貼上"},"button":{"selectedLabel":"%1 (Selected)"},"blockquote":{"toolbar":"引用段落"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor","help":"檢閱 $1 尋求幫助。","moreInfo":"關於授權資訊,請參閱我們的網站:","title":"關於 CKEditor","userGuide":"CKEditor 使用者手冊"},"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","common":{"editorHelp":"按下 ALT 0 取得說明。","browseServer":"瀏覽伺服器","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"傳送至伺服器","image":"圖像","flash":"Flash","form":"表格","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字欄位","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"選取欄位","imageButton":"影像按鈕","notSet":"<未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左至右 (LTR)","langDirRtl":"由右至左 (RTL)","langCode":"語言代碼","longDescr":"完整描述 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"關閉","preview":"預覽","resize":"調整大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"此值不是數值。","confirmNewPage":"現存的修改尚未儲存,要開新檔案?","confirmCancel":"部份選項尚未儲存,要關閉對話框?","options":"選項","target":"目標","targetNew":"開新視窗 (_blank)","targetTop":"最上層視窗 (_top)","targetSelf":"相同視窗 (_self)","targetParent":"父視窗 (_parent)","langDirLTR":"由左至右 (LTR)","langDirRTL":"由右至左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊方式","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignJustify":"左右對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidCssLength":"「%1」的值應為正數,並可包含有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","invalidHtmlLength":"「%1」的值應為正數,並可包含有效的 HTML 單位 (px 或 %)。","invalidInlineStyle":"行內樣式的值應包含一個以上的變數值組,其格式如「名稱:值」,並以分號區隔之。","cssLengthTooltip":"請輸入數值,單位是像素或有效的 CSS 單位 (px, %, in, cm, mm, em, ex, pt, 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,無法使用</span>"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js deleted file mode 100644 index 32c14faf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, -105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT, -CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d<f.length;d++)i=f[d],h=b/f[d],1<h&&2>=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, -html:function(){for(var e='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+l+'_arialbl" tabIndex="-1">%1</div><span id="'+l+'_arialbl" class="cke_voice_label">'+a.contents+" </span>",g=[],c=a.legend,j=c.length,f=0;f<j;f++){for(var b=c[f],h=[],i=b.items,k=i.length,d=0;d<k;d++){var n=i[d],o=n.legend.replace(m,p);o.match(m)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",n.name).replace("%2",o))}g.push("<h1>%1</h1><dl>%2</dl>".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1", -g.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}], -buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt deleted file mode 100644 index c760b6f9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -cs.js Found: 30 Missing: 0 -cy.js Found: 30 Missing: 0 -da.js Found: 12 Missing: 18 -de.js Found: 30 Missing: 0 -el.js Found: 25 Missing: 5 -eo.js Found: 30 Missing: 0 -fa.js Found: 30 Missing: 0 -fi.js Found: 30 Missing: 0 -fr.js Found: 30 Missing: 0 -gu.js Found: 12 Missing: 18 -he.js Found: 30 Missing: 0 -it.js Found: 30 Missing: 0 -mk.js Found: 5 Missing: 25 -nb.js Found: 30 Missing: 0 -nl.js Found: 30 Missing: 0 -no.js Found: 30 Missing: 0 -pt-br.js Found: 30 Missing: 0 -ro.js Found: 6 Missing: 24 -tr.js Found: 30 Missing: 0 -ug.js Found: 27 Missing: 3 -vi.js Found: 6 Missing: 24 -zh-cn.js Found: 30 Missing: 0 diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js deleted file mode 100644 index 49f816f1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js deleted file mode 100644 index bddf534f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js deleted file mode 100644 index 04f705ba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT-TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, -{name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se al següent camp del quadre de diàleg, premi SHIFT + TAB per desplaçar-se a l'anterior camp, premi ENTER per acceptar el quadre de diàleg, premi ESC per cancel·lar el quadre de diàleg. Per els quadres de diàleg que tenen diverses pestanyes, premi ALT + F10 per anar a la llista de pestanyes. Després podrà desplaçar-se a la següent pestanya amb TAB o RIGHT ARROW. Anar a la pestanya anterior amb SHIFT + TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar la pestanya."}, -{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT + TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."}, -{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"}, -{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat", -legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape",pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall", -end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6",numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8", -numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert",backSlash:"Barra Invertida", -closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js deleted file mode 100644 index ed61622e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT-TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", -legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další pole, stiskněte SHIFT + TAB pro přesun na předchozí pole, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT + F10 pr oprocházení seznamu karet. Pak se přesuňte na další kartu pomocí TAB nebo ŠIPKA VPRAVO. Pro přesun na předchozí stiskněte SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru", -legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT + TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."}, -{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí položku se přesunete pomocí SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva", -legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:"Příkaz pro přístup k dalšímu prostoru zaměření", -legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru",pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo", -upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7",numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9", -multiply:"Numerická klávesa násobení",add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka",backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka", -singleQuote:"Jednoduchá uvozovka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js deleted file mode 100644 index 86bd79d7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."}, -{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, -{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, -{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, -{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js deleted file mode 100644 index 2be9ece1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js deleted file mode 100644 index 2a1e6f49..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, -{name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."}, -{name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."}, -{name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl", -legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, -{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Rücklöschtaste",tab:"Tab",enter:"Eingabe",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf", -pageDown:"Bild ab",end:"Ende",home:"Pos1",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8", -numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich", -closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js deleted file mode 100644 index f2065da4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT-TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", -legend:"Μέσα σε ένα παράθυρο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο προηγούμενο. Πατήστε ENTER για να υποβάλετε την φόρμα. Πατήστε ESC για να ακυρώσετε την διαδικασία της φόρμας. Για παράθυρα διαλόγων που έχουν πολλές σελίδες σε καρτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καρτελών. Στην συνέχεια μπορείτε να μεταβείτε στην επόμενη καρτέλα πατώντας το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μπορείτε να μεταβείτε στην προηγούμενη καρτέλα πατώντας SHIFT + TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε την καρτέλα για προβολή."}, -{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, -{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT + TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, -{name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, -{name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6", -numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης", -backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js deleted file mode 100644 index 4182e6c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js deleted file mode 100644 index ae9b3385..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js deleted file mode 100644 index 081cc7e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, -{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaŭa kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaĝoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviĝu al la sekva langeto per la klavo TABA aŭ SAGO DEKSTREN. Moviĝu al la antaŭa langeto per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por selekti la langetretpaĝon."}, -{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, -{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, -{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."}, -{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"Retropaŝo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo", -pageDown:"Sekva Paĝo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7", -numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo", -singleQuote:"Citilo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js deleted file mode 100644 index eb30d5ee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", -legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."}, -{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor", -legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT + TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, -{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, -{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js deleted file mode 100644 index 4a893b0e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js deleted file mode 100644 index a0a8ae55..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shif-Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", -legend:"در داخل یک پنجره محاورهای، کلید Tab را بفشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به فیلد قبلی، فشردن Enter برای ثبت اطلاعات پنجره، فشردن Esc برای لغو پنجره محاورهای و برای پنجرههایی که چندین برگه دارند، فشردن Alt+F10 جهت رفتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, -{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, -{name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, -{name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان چپ", -upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذف",leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن", -f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js deleted file mode 100644 index 644d45bd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, -{name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko", -legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko", -legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, -{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."}, -{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8", -numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js deleted file mode 100644 index 15c3c4eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, -{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, -{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, -{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, -{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, -{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", -leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1", -f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js deleted file mode 100644 index a7de279a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche Ech (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, -{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, -{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches Ech ou FLECHE GAUCHE. Fermer le menu contextuel avec Ech."}, -{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, -{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", -legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, -{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Echap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite", -selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12", -numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js deleted file mode 100644 index 37fea83b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, -{name:"Editor de diálogo",legend:"Dentro dun cadro de diálogo, prema a tecla TAB para desprazarse ao campo seguinte do cadro de diálogo, prema MAIÚS + TAB para desprazarse ao campo anterior, prema INTRO para presentar o cadro de diálogo, prema a tecla ESC para cancelar o diálogo. Para os diálogos que teñen varias páxinas, prema ALT + F10 para navegar á lapela da lista. Despois pasar á seguinte lapela con TAB ou FRECHA DEREITA. Para ir á lapela anterior con SHIFT + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar a lapela da páxina."}, -{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."}, -{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"}, -{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Orde «acceder ao seguinte espazo en foco»", -legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba",pageDown:"Páxina abaixo",end:"Fin",home:"Inicio", -leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7",numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9", -multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida",closeBracket:"Pechar corchete",singleQuote:"Comiña simple"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js deleted file mode 100644 index 2982b4f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js deleted file mode 100644 index 6be2191c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב."}, -{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", -legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, -{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"חץ שמאלה",upArrow:"חץ למעלה",rightArrow:"חץ ימינה",downArrow:"חץ למטה",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", -numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סלאש",graveAccent:"Grave Accent", -openBracket:"Open Bracket",backSlash:"סלאש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js deleted file mode 100644 index 2e50a82a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js deleted file mode 100644 index 3cf43663..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT-TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", -legend:"Unutar dijaloga, pritisnite TAB za navigaciju do sljedećeg polja, pritisnite SHIFT + TAB za vraćanje na prethodno polje, pritisnite ENTER za slanje dijaloga ili ESC za zatvaranje dijaloga. Za dijaloge koji imaju višestruke kartice, pritisnite ALT + F10 za na navigaciju i zatim TAB ili lijeva strelica kursora ili SHIFT + TAB i desna strelica kursora. SPACE ili ENTER odabiru karticu."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, -{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT + TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT + TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, -{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, -{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js deleted file mode 100644 index 41d64897..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", -legend:"Párbeszédablakban nyomjon TAB-ot a következő párbeszédmezőhöz ugráshoz, nyomjon SHIFT + TAB-ot az előző mezőhöz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÍLLAL a következő fülre ugorhat. Az előző fülre ugráshoz használja a SHIFT + TAB-ot vagy a BAL NYILAT. Nyomjon SPACE-t vagy ENTER-t hogy kijelölje a fület."}, -{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, -{name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, -{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, -{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8", -numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel", -singleQuote:"szimpla idézőjel"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js deleted file mode 100644 index bf14b8a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js deleted file mode 100644 index 4166252b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."}, -{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."}, -{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, -{name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]}, -{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, -{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù", -end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico", -numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave", -openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js deleted file mode 100644 index 4a6b4c7a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"ダイヤログ内では、ダイアログの次の選択肢に移動するにはTabを押します。前の選択肢に移動するには、SHIFT+Tabを押します。ダイアログを決定するには、ENTERを押します。ESCでダイアログをキャンセルできます。複数のタブがあるダイアログではタブリストを操作するにはALT+F10を押します。次のタブに移動するにはTabか右カーソル、前のタブに戻るにはSHIFT+Tabか左カーソルです。タブページを決定するにはスペースもしくは、ENTERキーを押してください。"}, -{name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, -{name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, -{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert","delete":"Delete",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5", -numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js deleted file mode 100644 index 649e5054..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម", -legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"លុបថយក្រោយ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", -openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js deleted file mode 100644 index 8337ee88..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"편집기 다이얼로그",legend:"다이얼로그 내부에서 TAB"},{name:"편집기 환경 메뉴",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, -{name:"편집기 목록 박스",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"명령",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js deleted file mode 100644 index 96412248..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", -legend:"لەهەمانکاتدا کە تۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابەری لیستی بازدەرەکان. بۆ چوونە بازدەری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری دەستی ڕاست. بۆچوونە بازدەری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری دەستی چەپ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازدەر (تاب)."}, -{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, -{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, -{name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js deleted file mode 100644 index 04d50a94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js deleted file mode 100644 index 36ad0cdb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, -{name:"Redaktora dialoga logs",legend:"Dialoga logā nospiediet pogu TAB lai pārvietotos uz nākošo dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekšējā laukā, nospiediet ENTER lai apstiprinātu dialoga datus, nospiediet ESC lai aizvērtu šo dialogu. Dialogam kuram ir vairākas cilnes, nospiediet ALT+F10 lai pārvietotos uz nepieciešamo cilni. Lai pārvietotos uz nākošo cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos lapas cilni."}, -{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, -{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, -{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", -legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, -{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js deleted file mode 100644 index fa1b2ef3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", -legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, -{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js deleted file mode 100644 index d40e4d3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js deleted file mode 100644 index c86ef4ab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", -legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, -{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, -{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, -{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Select key",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7", -numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Bakover skråstrek", -closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js deleted file mode 100644 index 21944803..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, -{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."}, -{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."}, -{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht", -legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, -{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen", -subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js deleted file mode 100644 index 6c696647..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", -legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, -{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, -{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, -{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", -end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js deleted file mode 100644 index 664b1276..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Wciśnij ${toolbarFocus} aby przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT-TAB. Przejdź do następnego i poprzedniego narzędzia używając STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Wciśnij SPACJĘ lub ENTER, aby aktywować zaznaczone narzędzie."}, -{name:"Okno dialogowe edytora",legend:"Będąc w oknie dialogowym wciśnij TAB aby przejść do następnego pola dialogowego, wciśnij SHIFT + TAB aby przejść do poprzedniego pola, wciśnij ENTER aby wysłać dialog, wciśnij ESC aby anulować dialog. Dla okien dialogowych z wieloma zakładkami, wciśnij ALT + F10 aby przejść do listy zakładek. Gdy to zrobisz przejdź do następnej zakładki wciskając TAB lub STRZAŁKĘ W PRAWO. Przejdź do poprzedniej zakładki wciskając SHIFT + TAB lub STRZAŁKĘ W LEWO. Wciśnij SPACJĘ lub ENTER aby wybrać zakładkę."}, -{name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", -legend:"W polu listy możesz przechodzić do następnego elementu za pomocą klawisza TAB lub STRZAŁKI W DÓŁ. Poprzedni element osiągniesz za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Za pomocą SPACJI lub ENTERA wybierzesz daną opcję z listy, a za pomocą klawisza ESC opuścisz listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz Tab lub Strzałki w prawo. W celu przejścia do poprzedniego elementu naciśnij klawisze Shift+Tab lub Strzałki w lewo. By wybrać element w edytorze, użyj klawisza Spacji lub Enter."}]}, -{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo", -upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej", -numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza", -period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js deleted file mode 100644 index 1557459c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, -{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."}, -{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, -{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, -{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",downArrow:"Seta à Baixo",insert:"Insert","delete":"Delete",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico", -numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes", -backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js deleted file mode 100644 index c7cd0701..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de Acessibilidade",contents:"Conteúdos da Ajuda. Pressione em 'ESC' para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, -{name:"Janela do Editor",legend:"Dentro de uma janela, pressione TAB para navigar para o campo da janela seguinte, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para submeter a janela, pressione ESC para cancelar a janela. Para as janelas que têm múltiplos páginas com separadores, pressione ALT + F10 para navegar para a lista do separador. Depois mova para o seguinte separador com TAB ou SETA DIREITA. Mover para o separador anterior com SHIFT + TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o separador da página."}, -{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa Lista Editor",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."}, -{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:"Comando de Anular",legend:"Pressione ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"}, -{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior",legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, -{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", -pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", -divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js deleted file mode 100644 index 1d1479a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT-TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."}, -{name:"Dialog editor",legend:"Într-un dialog, apasă TAB pentru a naviga spre câmpul următor de dialog, apasă SHIFT + TAB pentru a te duce la câmpul anterior, apasă ENTER pentru a trimite dialogul, apasă ESC pentru a anula dialogul. Pentru dialoguri care au mai multe subferestre, apasă ALT + F10 pentr a naviga în lista de subferestre. Treci la subferestrea următoare cu TAB sau SĂGEATĂ DREAPTA. Treci la subfereastra anterioară cu SHIFT + TAB sau SĂGEATĂ STÂNGA. Apasă SPAȚIU sau ENTER pentru a selecta subfereastra."}, -{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."},{name:"Editor Casetă Listă", -legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT + TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, -{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", -upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", -f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js deleted file mode 100644 index 0c0e31a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT-TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"В диалоговом окне, нажмите клавишу TAB для перехода к следующему диалоговому полю, нажмите клавиши SHIFT + TAB, чтобы перейти к предыдущему полю, нажмите ENTER, чтобы отправить данные, нажмите клавишу ESC, для отмены. Для окон, которые имеют несколько вкладок, нажмите ALT + F10 для перехода к списку вкладок. Переход к следующей вкладке TAB ИЛИ ПРАВУЮ СТРЕЛКУ. Переход к предыдущей вкладке с помощью SHIFT + TAB или ЛЕВАЯ СТРЕЛКА. Нажмите ПРОБЕЛ или ENTER, чтобы выбрать вкладку."}, -{name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", -legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT + TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, -{name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, -{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End", -home:"Home",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert","delete":"Delete",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка", -divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js deleted file mode 100644 index b5616dd0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"දෙබසක් තුළ, ඊළඟ දෙබස් පෙදෙසට යෑමට TAB බොත්තම ඔබන්න, කලින් පෙදෙසට යෑමට SHIFT + TAB බොත්තම ද, දෙබස් ඉදිරිපත් කිරීමට ENTER බොත්තම ද, දෙබස් නැවතීමට ESCබොත්තම ද, දෙබස් සහිත ගොනු, පිටු වැඩි සංක්‍යයාවක් ලබා ගෙනිමට,ගොනු තුළ එහාමෙහා යෑමට ALT + F10 බොත්තම් ද, ඊළඟ ගොනුවට යෑමට TAB හෝ RIGTH ARROW බොත්තම ඔබන්න. පෙර ගොනුවට යෑමට SHIFT + TAB හෝ LEFT ARROW බොත්තම් ද ,ගොනු පිටු තේරීමට SPACE හෝ ENTER බොත්තම් ද ඔබන්න."}, -{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT + TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, -{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, -{name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl", -alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8", -numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js deleted file mode 100644 index 083236c4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, -{name:"Editorový dialóg",legend:"V dialogu, stlačte TAB pre navigáciu na ďalšie dialógové pole, stlačte STIFT + TAB pre presun na predchádzajúce pole, stlačte ENTER pre odoslanie dialógu, stlačte ESC pre zrušenie dialógu. Pre dialógy, ktoré majú viac záložiek, stlačte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ďalšej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlačte SHIFT + TAB alebo ľavú šípku. Stlačte medzerník alebo ENTER pre vybranie záložky."}, -{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, -{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT + TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, -{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, -{name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole", -end:"End",home:"Home",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",downArrow:"Šípka dole",insert:"Insert","delete":"Delete",leftWindowKey:"Ľavé Windows tlačidlo",rightWindowKey:"Pravé Windows tlačidlo",selectKey:"Tlačidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"Sčítanie",subtract:"Odčítanie", -decimalPoint:"Desatinná čiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Bodkočiarka",equalSign:"Rovná sa",comma:"Čiarka",dash:"Pomĺčka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js deleted file mode 100644 index f99db09b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT-TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, -{name:"Urejevalno Pogovorno Okno",legend:"Znotraj pogovornega okna, pritisnite tipko TAB za pomik na naslednjo pogovorno polje, pritisnite SHIFT + TAB za pomik v prejšnje polje, pritisnite tipko ENTER za predložitev pogovornega okna, pritisnite tipko ESC, da prekličete okno. Za okna, ki imajo več zavihkov, pritisnite ALT + F10, da pojdete na seznam zavihkov. Na naslednji zavihek se premaknete s tipko TAB ali DESNO PUŠČICO. Z SHIFT + TAB ali LEVO PUŠČICO pa se premaknete na prejšnji zavihek. Pritisnite tipko SPACE ali ENTER za izbiro zavihka."}, -{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."},{name:"Urejevalno Seznamsko Polje", -legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT + TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT + TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, -{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, -{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", -home:"Home",leftArrow:"Levo puščica",upArrow:"Gor puščica",rightArrow:"Desno puščica",downArrow:"Dol puščica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica", -divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Oklepaj",singleQuote:"Opuščaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js deleted file mode 100644 index 7bcd7690..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, -{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", -numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", -openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js deleted file mode 100644 index e1a720b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js deleted file mode 100644 index a75fdd4d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", -legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js deleted file mode 100644 index 49f9293d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."}, -{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny", -legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."}, -{name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"}, -{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},{name:"Tillgå nästa fokuskommandots utrymme", -legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut",home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil", -rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4", -f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js deleted file mode 100644 index 4e7c3e0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", -legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js deleted file mode 100644 index 57fd77a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, -{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, -{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, -{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, -{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, -{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",end:"End",home:"Home",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Insert","delete":"Silme",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Noktalı virgül",equalSign:"Eşittir",comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"Forward Slash", -graveAccent:"Grave Accent",openBracket:"Parantez aç",backSlash:"Backslash",closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js deleted file mode 100644 index 12cb6a88..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, -{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, -{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"}, -{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, -{name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү","delete":"Бетерү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1", -numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык", -graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js deleted file mode 100644 index c7ab77c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT + TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT + F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛ SHIFT + TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."}, -{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", -legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT + TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, -{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, -{name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape", -pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract", -decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js deleted file mode 100644 index 7c8f9098..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT-TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів"},{name:"Діалог Редактора", -legend:"У діалозі натисніть клавішу TAB для переходу до наступного поля, натисніть SHIFT + TAB, щоб перейти до попереднього поля, натисніть ENTER, щоб відправити дані, натисніть ESC, щоб скасувати. Для вікон, які мають кілька вкладок, натисніть ALT + F10 для переходу до списку вкладок. Перехід до наступної вкладки TAB АБО СТРІЛКА ВПРАВО. Перехід до попередньої вкладки за допомогою SHIFT + TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER, щоб вибрати вкладку."},{name:"Контекстне Меню Редактора", -legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."},{name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT + TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."}, -{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"}, -{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, -{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0", -numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання",decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період", -forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js deleted file mode 100644 index e82e39a1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Bên trong một hộp thoại, nhấn TAB để chuyển sang trường tiếp theo, nhấn SHIFT + TAB để quay lại trường phía trước, nhấn ENTER để chấp nhận, nhấn ESC để đóng hộp thoại. Đối với các hộp thoại có nhiều tab, nhấn ALT + F10 để chuyển đến danh sách các tab. Sau đó nhấn TAB hoặc MŨI TÊN SANG PHẢI để chuyển sang tab tiếp theo. Nhấn SHIFT + TAB hoặc MŨI TÊN SANG TRÁI để chuyển sang tab trước đó. Nhấn DẤU CÁCH hoặc ENTER để chọn tab."}, -{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, -{name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím Tab hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím Shift+Tab hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím Enter để chọn các tùy chọn trong danh sách. Nhấn phím Esc để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím Tab hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím Shift+Tab hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc Enter để chọn đối tượng trong trình soạn thảo."}]}, -{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, -{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock", -escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9", -multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js deleted file mode 100644 index fe2cab0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 导航到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个和下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,TAB 键移动到下一个字段,SHIFT + TAB 组合键移动到上一个字段,ENTER 键提交对话框,ESC 键取消对话框。对于有多选项卡的对话框,用ALT + F10来移到选项卡列表。然后用 TAB 键或者向右箭头来移动到下一个选项卡;SHIFT + TAB 组合键或者向左箭头移动到上一个选项卡。用 SPACE 键或者 ENTER 键选择选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, -{name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, -{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab 键",enter:"回车键",shift:"Shift 键",ctrl:"Ctrl 键",alt:"Alt 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键", -insert:"插入键","delete":"删除键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键", -semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js deleted file mode 100644 index 1521763d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按「${toolbarFocus}」以瀏覽工具列。\r\n利用「TAB」或「SHIFT+TAB」以便移動到下一個或前一個工具列群組。\r\n利用「→」或「←」以便移動到下一個或前一個工具列按鈕。\r\n請按下「空白鍵」或「ENTER」鍵啟動工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,請按 TAB 鍵以便移動到下個欄位,請按 SHIFT + TAB 以便移動到前個欄位;請按 ENTER 以提交對話框資料,或按下 ESC 取消對話框。\r\n若是有多個頁框的對話框,請按 ALT + F10 以移動到頁框列表,並以 TAB 或是 → 方向鍵移動到下個頁框。以 SHIFT + TAB 或是 ← 方向鍵移動到前個頁框。按下 空白鍵 或是 ENTER 以選取頁框。"},{name:"編輯器內容功能表", -legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"},{name:"編輯器清單方塊",legend:"在列表中,請利用 TAB 或 ↓ 方向鍵以移動到下一個項目;或利用 SHIFT + TAB 或 ↑ 方向鍵移動到前一個項目。請按下 空白鍵 或是 ENTER 以選取項目。請按 ESC 關閉列表。"},{name:"編輯器元件路徑工具列",legend:"請按「${elementsPathFocus}」以瀏覽元素路徑工具列。\r\n利用「TAB」或「→」以便移動到下一個元素按鈕。\r\n利用「SHIFT+TAB」或「←」以便移動到前一個元素按鈕。\r\n請按下「空白鍵」或「ENTER」鍵選擇編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令", -legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"},{name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}], -backspace:"退格鍵",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"向左箭號",upArrow:"向上鍵號",rightArrow:"向右鍵號",downArrow:"向下鍵號",insert:"插入","delete":"刪除",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6", -numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"新增",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"等號",comma:"逗號",dash:"虛線",period:"句點",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"反斜線",closeBracket:"右方括號",singleQuote:"單引號"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/about.js b/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/about.js deleted file mode 100644 index ee5473a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/about.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("about",function(a){var a=a.lang.about,b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+ -b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}</style><div class="cke_about_container"><div class="cke_about_logo"></div><p>CKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')<br><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com</a></p><p>'+a.help.replace("$1",'<a target="_blank" href="http://docs.ckeditor.com/user">'+ -a.userGuide+"</a>")+"</p><p>"+a.moreInfo+'<br><a target="_blank" href="http://ckeditor.com/about/license">http://ckeditor.com/about/license</a></p><p>'+a.copy.replace("$1",'<a target="_blank" href="http://cksource.com/">CKSource</a> - Frederico Knabben')+"</p></div>"}]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png b/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png deleted file mode 100644 index 10cc7368ad1bb65b16d037fa31e494906d60695e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13339 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/platforms/browser/www/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png deleted file mode 100644 index f186eb87a09f826311e422cbf08cf6c98f1b2d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6757 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 Hu0mjf?$$BB diff --git a/platforms/browser/www/lib/ckeditor/plugins/adobeair/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/adobeair/plugin.js deleted file mode 100644 index 3b7b5cd3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/adobeair/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){for(var a=a.getElementsByTag("*"),c=a.count(),b,e=0;e<c;e++)b=a.getItem(e),function(a){for(var b=0;b<j.length;b++)(function(b){var c=a.getAttribute("on"+b);a.hasAttribute("on"+b)&&(a.removeAttribute("on"+b),a.on(b,function(b){var e=/(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec(c),k=e&&e[1],f=e&&e[2].split(","),e=/return false;/.test(c);if(f){for(var h=f.length,i,g=0;g<h;g++){f[g]=i=CKEDITOR.tools.trim(f[g]);var d=i.match(/^(["'])([^"']*?)\1$/);if(d)f[g]=d[2]; -else if(i.match(/\d+/))f[g]=parseInt(i,10);else switch(i){case "this":f[g]=a.$;break;case "event":f[g]=b.data.$;break;case "null":f[g]=null}}f=CKEDITOR.tools.callFunction.apply(window,f);k&&!1===f&&(e=1)}e&&b.data.preventDefault()}))})(j[b])}(b)}var j="click keydown mousedown keypress mouseover mouseout".split(" ");CKEDITOR.plugins.add("adobeair",{onLoad:function(){CKEDITOR.env.air&&(CKEDITOR.dom.document.prototype.write=CKEDITOR.tools.override(CKEDITOR.dom.document.prototype.write,function(a){function c(b, -a,c,h){a=b.append(a);(c=CKEDITOR.htmlParser.fragment.fromHtml(c).children[0].attributes)&&a.setAttributes(c);h&&a.append(b.getDocument().createText(h))}return function(b,e){if(this.getBody()){var d=this,h=this.getHead(),b=b.replace(/(<style[^>]*>)([\s\S]*?)<\/style>/gi,function(a,b,d){c(h,"style",b,d);return""}),b=b.replace(/<base\b[^>]*\/>/i,function(b){c(h,"base",b);return""}),b=b.replace(/<title>([\s\S]*)<\/title>/i,function(b,a){d.$.title=a;return""}),b=b.replace(/<head>([\s\S]*)<\/head>/i,function(b){var a= -new CKEDITOR.dom.element("div",d);a.setHtml(b);a.moveChildren(h);return""});b.replace(/(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i,function(b,a,c){d.getBody().setHtml(c);(b=CKEDITOR.htmlParser.fragment.fromHtml(a).children[0].attributes)&&d.getBody().setAttributes(b)})}else a.apply(this,arguments)}}),CKEDITOR.addCss("body.cke_editable { padding: 8px }"),CKEDITOR.ui.on("ready",function(a){a=a.data;if(a._.panel){var c=a._.panel._.panel,b;(function(){c.isLoaded?(b=c._.holder,d(b)):setTimeout(arguments.callee, -30)})()}else a instanceof CKEDITOR.dialog&&d(a._.element)}))},init:function(a){CKEDITOR.env.air&&(a.on("uiReady",function(){d(a.container);a.on("elementsPathUpdate",function(a){d(a.data.space)})}),a.on("contentDom",function(){a.document.on("click",function(a){a.data.preventDefault(!0)})}))}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/ajax/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/ajax/plugin.js deleted file mode 100644 index 8756cc6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/ajax/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("ajax",{requires:"xml"});CKEDITOR.ajax=function(){function g(){if(!CKEDITOR.env.ie||"file:"!=location.protocol)try{return new XMLHttpRequest}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}return null}function h(a){return 4==a.readyState&&(200<=a.status&&300>a.status||304==a.status||0===a.status||1223==a.status)}function i(a){return h(a)?a.responseText:null}function k(a){if(h(a)){var b= -a.responseXML;return new CKEDITOR.xml(b&&b.firstChild?b:a.responseText)}return null}function j(a,b,e){var f=!!b,c=g();if(!c)return null;c.open("GET",a,f);f&&(c.onreadystatechange=function(){4==c.readyState&&(b(e(c)),c=null)});c.send(null);return f?"":e(c)}function l(a,b,e,f,c){var d=g();if(!d)return null;d.open("POST",a,!0);d.onreadystatechange=function(){4==d.readyState&&(f(c(d)),d=null)};d.setRequestHeader("Content-type",e||"application/x-www-form-urlencoded; charset=UTF-8");d.send(b)}return{load:function(a, -b){return j(a,b,i)},post:function(a,b,e,f){return l(a,b,e,f,i)},loadXml:function(a,b){return j(a,b,k)}}}()})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/autogrow/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/autogrow/plugin.js deleted file mode 100644 index 891e3bc7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/autogrow/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(a){function k(){d=a.document;l=d[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();c=CKEDITOR.env.quirks?d.getBody():d.getDocumentElement();e=CKEDITOR.dom.element.createFromHtml('<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">'+(CKEDITOR.env.webkit?"&nbsp;":"")+"</span>",d)}function f(){i&&c.setStyle("overflow-y","hidden");var g=a.window.getViewPaneSize().height,b;l.append(e);b=e.getDocumentPosition(d).y+e.$.offsetHeight;e.remove(); -b+=h;b=Math.max(b,o);b=Math.min(b,m);b!=g&&j!=b&&(b=a.fire("autoGrow",{currentHeight:g,newHeight:b}).newHeight,a.resize(a.container.getStyle("width"),b,!0),j=b);i||(b<m&&c.$.scrollHeight>c.$.clientHeight?c.setStyle("overflow-y","hidden"):c.removeStyle("overflow-y"))}var j,d,l,c,e,h=a.config.autoGrow_bottomSpace||0,o=void 0!=a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200,m=a.config.autoGrow_maxHeight||Infinity,i=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:f,modes:{wysiwyg:1}, -readOnly:1,canUndo:!1,editorFocus:!1});var p={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},n;for(n in p)a.on(n,function(g){"wysiwyg"==g.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?j=null:(f(),i||f())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?c.removeStyle("overflow-y"):f())});a.on("contentDom",k);k();a.config.autoGrow_onStartup&& -a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){a.editable().isInline()?a.ui.space("contents").setStyle("height","auto"):h(a)})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bbcode/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/bbcode/plugin.js deleted file mode 100644 index 5d0cc491..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bbcode/plugin.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.on("dialogDefinition",function(a){var b;b=a.data.name;a=a.data.definition;"link"==b?(a.removeContents("target"),a.removeContents("upload"),a.removeContents("advanced"),b=a.getContents("info"),b.remove("emailSubject"),b.remove("emailBody")):"image"==b&&(a.removeContents("advanced"),b=a.getContents("Link"),b.remove("cmbTarget"),b=a.getContents("info"),b.remove("txtAlt"),b.remove("basic"))});var j={b:"strong",u:"u",i:"em",color:"span",size:"span",quote:"blockquote",code:"code",url:"a", -email:"span",img:"span","*":"li",list:"ol"},u={strong:"b",b:"b",u:"u",em:"i",i:"i",code:"code",li:"*"},k={strong:"b",em:"i",u:"u",li:"*",ul:"list",ol:"list",code:"code",a:"link",img:"img",blockquote:"quote"},v={color:"color",size:"font-size"},w={url:"href",email:"mailhref",quote:"cite",list:"listType"},m=CKEDITOR.dtd,x=CKEDITOR.tools.extend({table:1},m.$block,m.$listItem,m.$tableContent,m.$list),z=/\s*(?:;\s*|$)/,o={smiley:":)",sad:":(",wink:";)",laugh:":D",cheeky:":P",blush:":*)",surprise:":-o", -indecision:":|",angry:">:(",angel:"o:)",cool:"8-)",devil:">:-)",crying:";(",kiss:":-*"},y={},p=[],q;for(q in o)y[o[q]]=q,p.push(o[q].replace(/\(|\)|\:|\/|\*|\-|\|/g,function(a){return"\\"+a}));var p=RegExp(p.join("|"),"g"),A=function(){var a=[],b={nbsp:" ",shy:"­",gt:">",lt:"<"},c;for(c in b)a.push(c);a=RegExp("&("+a.join("|")+");","g");return function(c){return c.replace(a,function(e,a){return b[a]})}}();CKEDITOR.BBCodeParser=function(){this._={bbcPartsRegex:/(?:\[([^\/\]=]*?)(?:=([^\]]*?))?\])|(?:\[\/([a-z]{1,16})\])/ig}}; -CKEDITOR.BBCodeParser.prototype={parse:function(a){for(var b,c,i=0;b=this._.bbcPartsRegex.exec(a);){c=b.index;if(c>i)this.onText(a.substring(i,c),1);i=this._.bbcPartsRegex.lastIndex;if((c=(b[1]||b[3]||"").toLowerCase())&&!j[c])this.onText(b[0]);else if(b[1]){var e=j[c],g={},h={};if(b=b[2])if("list"==c&&(isNaN(b)?/^[a-z]+$/.test(b)?b="lower-alpha":/^[A-Z]+$/.test(b)&&(b="upper-alpha"):b="decimal"),v[c]){"size"==c&&(b+="%");h[v[c]]=b;b=g;var f="",d=void 0;for(d in h)var r=(d+":"+h[d]).replace(z,";"), -f=f+r;b.style=f}else w[c]&&(g[w[c]]=b);if("email"==c||"img"==c)g.bbcode=c;this.onTagOpen(e,g,CKEDITOR.dtd.$empty[e])}else if(b[3])this.onTagClose(j[c])}if(a.length>i)this.onText(a.substring(i,a.length),1)}};CKEDITOR.htmlParser.fragment.fromBBCode=function(a){function b(a){if(0<h.length)for(var e=0;e<h.length;e++){var b=h[e],c=b.name,g=CKEDITOR.dtd[c],f=d.name&&CKEDITOR.dtd[d.name];if((!f||f[c])&&(!a||!g||g[a]||!CKEDITOR.dtd[a]))b=b.clone(),b.parent=d,d=b,h.splice(e,1),e--}}function c(e,a){var b=d.children.length, -c=0<b&&d.children[b-1],b=!c&&s.getRule(k[d.name],"breakAfterOpen"),c=c&&c.type==CKEDITOR.NODE_ELEMENT&&s.getRule(k[c.name],"breakAfterClose"),g=e&&s.getRule(k[e],a?"breakBeforeClose":"breakBeforeOpen");f&&(b||c||g)&&f--;f&&e in x&&f++;for(;f&&f--;)d.children.push(new CKEDITOR.htmlParser.element("br"))}function i(e,a){c(e.name,1);var a=a||d||g,b=a.children.length;e.previous=0<b&&a.children[b-1]||null;e.parent=a;a.children.push(e);e.returnPoint&&(d=e.returnPoint,delete e.returnPoint)}var e=new CKEDITOR.BBCodeParser, -g=new CKEDITOR.htmlParser.fragment,h=[],f=0,d=g,r;e.onTagOpen=function(a,g,f){var l=new CKEDITOR.htmlParser.element(a,g);if(CKEDITOR.dtd.$removeEmpty[a])h.push(l);else{var t=d.name,n=t&&(CKEDITOR.dtd[t]||(d._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span));if(n&&!n[a]){var n=!1,j;a==t?i(d,d.parent):(a in CKEDITOR.dtd.$listItem?(e.onTagOpen("ul",{}),j=d):(i(d,d.parent),h.unshift(d)),n=!0);d=j?j:d.returnPoint||d.parent;if(n){e.onTagOpen.apply(this,arguments);return}}b(a);c(a);l.parent=d;l.returnPoint= -r;r=0;l.isEmpty?i(l):d=l}};e.onTagClose=function(a){for(var e=h.length-1;0<=e;e--)if(a==h[e].name){h.splice(e,1);return}for(var b=[],c=[],g=d;g.type&&g.name!=a;)g._.isBlockLike||c.unshift(g),b.push(g),g=g.parent;if(g.type){for(e=0;e<b.length;e++)a=b[e],i(a,a.parent);d=g;i(g,g.parent);g==d&&(d=d.parent);h=h.concat(c)}};e.onText=function(a){var e=CKEDITOR.dtd[d.name];if(!e||e["#"])c(),b(),a.replace(/(\r\n|[\r\n])|[^\r\n]*/g,function(a,e){if(void 0!==e&&e.length)f++;else if(a.length){var b=0;a.replace(p, -function(e,c){i(new CKEDITOR.htmlParser.text(a.substring(b,c)),d);i(new CKEDITOR.htmlParser.element("smiley",{desc:y[e]}),d);b=c+e.length});b!=a.length&&i(new CKEDITOR.htmlParser.text(a.substring(b,a.length)),d)}})};for(e.parse(CKEDITOR.tools.htmlEncode(a));d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT;)a=d.parent,i(d,a),d=a;return g};var s=new (CKEDITOR.tools.createClass({$:function(){this._={output:[],rules:[]};this.setRules("list",{breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:1,breakAfterClose:1}); -this.setRules("*",{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:1,breakAfterClose:0});this.setRules("quote",{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:0,breakAfterClose:1})},proto:{setRules:function(a,b){var c=this._.rules[a];c?CKEDITOR.tools.extend(c,b,!0):this._.rules[a]=b},getRule:function(a,b){return this._.rules[a]&&this._.rules[a][b]},openTag:function(a){a in j&&(this.getRule(a,"breakBeforeOpen")&&this.lineBreak(1),this.write("[",a))},openTagClose:function(a){"br"==a?this._.output.push("\n"): -a in j&&(this.write("]"),this.getRule(a,"breakAfterOpen")&&this.lineBreak(1))},attribute:function(a,b){"option"==a&&("string"==typeof b&&(b=b.replace(/&amp;/g,"&")),this.write("=",b))},closeTag:function(a){a in j&&(this.getRule(a,"breakBeforeClose")&&this.lineBreak(1),"*"!=a&&this.write("[/",a,"]"),this.getRule(a,"breakAfterClose")&&this.lineBreak(1))},text:function(a){this.write(a)},comment:function(){},lineBreak:function(){!this._.hasLineBreak&&this._.output.length&&(this.write("\n"),this._.hasLineBreak= -1)},write:function(){this._.hasLineBreak=0;this._.output.push(Array.prototype.join.call(arguments,""))},reset:function(){this._.output=[];this._.hasLineBreak=0},getHtml:function(a){var b=this._.output.join("");a&&this.reset();return A(b)}}}));CKEDITOR.plugins.add("bbcode",{requires:"entities",beforeInit:function(a){CKEDITOR.tools.extend(a.config,{enterMode:CKEDITOR.ENTER_BR,basicEntities:!1,entities:!1,fillEmptyBlocks:!1},!0);a.filter.disable();a.activeEnterMode=a.enterMode=CKEDITOR.ENTER_BR},init:function(a){function b(a){var b= -a.data,a=CKEDITOR.htmlParser.fragment.fromBBCode(a.data.dataValue),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,i);a=c.getHtml(!0);b.dataValue=a}var c=a.config,i=new CKEDITOR.htmlParser.filter;i.addRules({elements:{blockquote:function(a){var b=new CKEDITOR.htmlParser.element("div");b.children=a.children;a.children=[b];if(b=a.attributes.cite){var c=new CKEDITOR.htmlParser.element("cite");c.add(new CKEDITOR.htmlParser.text(b.replace(/^"|"$/g,"")));delete a.attributes.cite;a.children.unshift(c)}}, -span:function(a){var b;if(b=a.attributes.bbcode)"img"==b?(a.name="img",a.attributes.src=a.children[0].value,a.children=[]):"email"==b&&(a.name="a",a.attributes.href="mailto:"+a.children[0].value),delete a.attributes.bbcode},ol:function(a){a.attributes.listType?"decimal"!=a.attributes.listType&&(a.attributes.style="list-style-type:"+a.attributes.listType):a.name="ul";delete a.attributes.listType},a:function(a){a.attributes.href||(a.attributes.href=a.children[0].value)},smiley:function(a){a.name="img"; -var b=a.attributes.desc,h=c.smiley_images[CKEDITOR.tools.indexOf(c.smiley_descriptions,b)],h=CKEDITOR.tools.htmlEncode(c.smiley_path+h);a.attributes={src:h,"data-cke-saved-src":h,title:b,alt:b}}}});a.dataProcessor.htmlFilter.addRules({elements:{$:function(b){var c=b.attributes,h=CKEDITOR.tools.parseCssText(c.style,1),f,d=b.name;if(d in u)d=u[d];else if("span"==d)if(f=h.color)d="color",f=CKEDITOR.tools.convertRgbToHex(f);else{if(f=h["font-size"])if(c=f.match(/(\d+)%$/))f=c[1],d="size"}else if("ol"== -d||"ul"==d){if(f=h["list-style-type"])switch(f){case "lower-alpha":f="a";break;case "upper-alpha":f="A"}else"ol"==d&&(f=1);d="list"}else if("blockquote"==d){try{var i=b.children[0],j=b.children[1],k="cite"==i.name&&i.children[0].value;k&&(f='"'+k+'"',b.children=j.children)}catch(m){}d="quote"}else if("a"==d){if(f=c.href)-1!==f.indexOf("mailto:")?(d="email",b.children=[new CKEDITOR.htmlParser.text(f.replace("mailto:",""))],f=""):((d=1==b.children.length&&b.children[0])&&(d.type==CKEDITOR.NODE_TEXT&& -d.value==f)&&(f=""),d="url")}else if("img"==d){b.isEmpty=0;h=c["data-cke-saved-src"]||c.src;c=c.alt;if(h&&-1!=h.indexOf(a.config.smiley_path)&&c)return new CKEDITOR.htmlParser.text(o[c]);b.children=[new CKEDITOR.htmlParser.text(h)]}b.name=d;f&&(b.attributes.option=f);return null},br:function(a){if((a=a.next)&&a.name in x)return!1}}},1);a.dataProcessor.writer=s;if(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE)a.once("contentDom",function(){a.on("setData",b)});else a.on("setData",b)},afterInit:function(a){var b; -a._.elementsPath&&(b=a._.elementsPath.filters)&&b.push(function(b){var i=b.getName(),e=k[i]||!1;"link"==e&&0===b.getAttribute("href").indexOf("mailto:")?e="email":"span"==i?b.getStyle("font-size")?e="size":b.getStyle("color")&&(e="color"):"img"==e&&(b=b.data("cke-saved-src")||b.getAttribute("src"))&&0===b.indexOf(a.config.smiley_path)&&(e="smiley");return e})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png b/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidiltr.png deleted file mode 100644 index a909c0103b4bbf439f65374a29a46fbfaf2a1f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ila!~6V~EA+*2(+*q#Xs?_ut(sFjwGN3YW$sAt|my+yNJYFE8<& zZQj5p*T~)xw4}f}PJuOu%PLCifQQ?$O(KmoR<FPPd+W!wN!(*j%97kN)BQisns3fB zkod4Z!0YT@aY2Sf`&Bd78XimN`T6*+WqUE-`@c1eYfZbmyGwS*Zn;*>Dkm?0^0SQX z`dx-?dE2`UpG^&VwKwRMlcwrJmq3-de(Y;aCkCzBs-sl#{$f=7srP1PW_G!Gc}YDF zzkJzp=kDEF+qr&)=M<G(qOu=ZsP!eUT6HMux6GaPxpQS#txB?yV^&#w@kCr~?9|C8 zS)R+>l5n1+Qerjt@zklJ)22_4F38T#zF1<VdcJtoDkhDz&5{m5(^Qq3!n`(a*wA43 z%tNzu&z3DNGRL1(p8NOj-_r~eCEwsvn{pVVvb!H_YTdDS@7Y(cUQG;oWzm<sN$2sC zCr@tQyLa#U?AfzVoA^dECi_^=4O2L6RJB)bZ`^y|*y|#$j30h}`0(NM+qY}0D=HWk zWJ+zhw&jCs%dT}h_wP@yt^NDv-Me?yvzA#r-?4Asy7t2lkMCM{KP{3?AYzMP<@=du z({gfi=YIYDxBFv7jleJ7$08FSaAfN$eafCXw>Ty8*w3Foj}}<i6r9@|vFiCr#Wh<i z-p^mApk(5EIKjXoV^-R`Tgx)LI;H@FLQvDWTVH`qV}JX1I}49GKPAmBruTn?@BQCb zEWpWm{wBj8hP-^!M_hY;Rs)lcYKdz^NlIc#s#S7PDv)9@GB7mOH89sTFbOd<w=ysW zB5eaBD+2@HCA)#i3Q0q5eoAIqC2kEiKbemJHAsSN2+mI{DNig)WhgH%*UQYyE>2D? ZNY%?PN}v7CMhd8i!PC{xWt~$(69BAIPS*ec diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png b/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/bidirtl.png deleted file mode 100644 index 7dbad48c123532de7d3ce1883187581cd5cfa3ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilccAMV~EA+(%{{BQjQ|F<?kF+k}q(HFXLExcZb3s2G+gV=9!nC z@xM9tkEPyWic+ieCuU8Zr3LP<yQZ@=i3X))hj*8KGd0#cq!Xd$J}c|lJj>_ziZiX| z9%}3;;J6m`hksIsLJNa&^UV9U7owcAd6UmLDrvSjtPOMCe6vO1k;1{(ueBdpv|amk zcW*+P$!uSP;?|CR0v9KAtg#OAx}9OdH)%T8w(0ZFpFh7pJ|?DNrlADSrMmt96*-zd zrKeBt@bWI|f0Moby7RQu54G|Pd!81pbXy#_D{lS5t!-0;+}+(*gsl$na@1sfD0Mk& zYl;9%$76}eX^ak=Zssr?IK7GI4A1$`1w}<oZi@?_SIW(hbjt44=qe~J{kkVcPq0n# zl8LVLiYZ<*B#$3IzT*08g+<nB`__i7{;!j{7AX7f{rmd(xVV3_eALb-N=#!3@(R(K zy6MN4FJHFZe*11&LXYDl6^0LwpFMl_Jjd*^zP>&~!y*j_mkrkzX>e`1{kH#YnRKAY zTaK7t#~v5j%|E~YY309@wl}^p`8`eA_@lV2?Awm0wG*COuGuQU@W4&8rD5we&88r( zYf%!(3#K%^|9zdGpZ~Dm^3OYN<^Zjl$)|o*)LLU{LQmsntNG{G&!0E1El|WUyVv|< zQPA40FRS*pZ8hUP{K2=Sd(nXstG#+%N$Cd@*Dt(RCKNYG#o*YUn>YThUHZ4QOyxIg zb)bF6{;3;XHh$CVUja-xswJ)wB`Jv|saDBFsX&Us$iUE8*T7uYz$C=b+{(Zhh_nri ztPBi%m+S_nDkKfL`6-!cmAEz7{A4}?)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8F VD1G)j8!4b722WQ%mvv4FO#okUNGAXQ diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png b/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png deleted file mode 100644 index c5998e007764ea631a643dd033e239273fa5afda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1579 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png b/platforms/browser/www/lib/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png deleted file mode 100644 index 8aa2adc87009f5751a5e799743dd8784948de156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1596 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/af.js deleted file mode 100644 index 0b9a692a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","af",{ltr:"Skryfrigting van links na regs",rtl:"Skryfrigting van regs na links"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ar.js deleted file mode 100644 index a776f798..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ar",{ltr:"إتجاه النص من اليسار إلى اليمين",rtl:"إتجاه النص من اليمين إلى اليسار"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bg.js deleted file mode 100644 index cd775f89..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bg",{ltr:"Посока на текста от ляво на дясно",rtl:"Посока на текста от дясно на ляво"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bn.js deleted file mode 100644 index 34ef7460..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bn",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bs.js deleted file mode 100644 index 849f6f41..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","bs",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ca.js deleted file mode 100644 index 10076e23..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ca",{ltr:"Direcció del text d'esquerra a dreta",rtl:"Direcció del text de dreta a esquerra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cs.js deleted file mode 100644 index fa4a0f89..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","cs",{ltr:"Směr textu zleva doprava",rtl:"Směr textu zprava doleva"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cy.js deleted file mode 100644 index 76b10960..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","cy",{ltr:"Cyfeiriad testun o'r chwith i'r dde",rtl:"Cyfeiriad testun o'r dde i'r chwith"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/da.js deleted file mode 100644 index 9474fffb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","da",{ltr:"Tekstretning fra venstre til højre",rtl:"Tekstretning fra højre til venstre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/de.js deleted file mode 100644 index 5193d805..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","de",{ltr:"Leserichtung von Links nach Rechts",rtl:"Leserichtung von Rechts nach Links"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/el.js deleted file mode 100644 index 73f7703f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","el",{ltr:"Διεύθυνση κειμένου από αριστερά στα δεξιά",rtl:"Διεύθυνση κειμένου από δεξιά στα αριστερά"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-au.js deleted file mode 100644 index 5939f82d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-au",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-ca.js deleted file mode 100644 index 78827e3a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-ca",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-gb.js deleted file mode 100644 index 3dd38210..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en-gb",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en.js deleted file mode 100644 index f9aed2a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","en",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eo.js deleted file mode 100644 index 30e93b1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","eo",{ltr:"Tekstdirekto de maldekstre dekstren",rtl:"Tekstdirekto de dekstre maldekstren"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/es.js deleted file mode 100644 index 7321b290..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","es",{ltr:"Dirección del texto de izquierda a derecha",rtl:"Dirección del texto de derecha a izquierda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/et.js deleted file mode 100644 index cd499548..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","et",{ltr:"Teksti suund vasakult paremale",rtl:"Teksti suund paremalt vasakule"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eu.js deleted file mode 100644 index 0fbdda3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","eu",{ltr:"Testuaren norantza ezkerretik eskuinera",rtl:"Testuaren norantza eskuinetik ezkerrera"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fa.js deleted file mode 100644 index a625ce95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fa",{ltr:"جهت متن از چپ به راست",rtl:"جهت متن از راست به چپ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fi.js deleted file mode 100644 index d6501bf9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fi",{ltr:"Tekstin suunta vasemmalta oikealle",rtl:"Tekstin suunta oikealta vasemmalle"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fo.js deleted file mode 100644 index 9f936505..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fo",{ltr:"Tekstkós frá vinstru til høgru",rtl:"Tekstkós frá høgru til vinstru"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js deleted file mode 100644 index 0f92cc73..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fr-ca",{ltr:"Direction du texte de gauche à droite",rtl:"Direction du texte de droite à gauche"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr.js deleted file mode 100644 index f3904683..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","fr",{ltr:"Direction du texte de la gauche vers la droite",rtl:"Direction du texte de la droite vers la gauche"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gl.js deleted file mode 100644 index 8c33c966..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","gl",{ltr:"Dirección do texto de esquerda a dereita",rtl:"Dirección do texto de dereita a esquerda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gu.js deleted file mode 100644 index 69fb4ebe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","gu",{ltr:"ટેક્ષ્ત્ ની દિશા ડાબે થી જમણે",rtl:"ટેક્ષ્ત્ ની દિશા જમણે થી ડાબે"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/he.js deleted file mode 100644 index 5f35dbca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","he",{ltr:"כיוון טקסט משמאל לימין (LTR)",rtl:"כיוון טקסט מימין לשמאל (RTL)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hi.js deleted file mode 100644 index 1a56a676..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hi",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hr.js deleted file mode 100644 index e53b4d9e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hr",{ltr:"Smjer teksta s lijeva na desno",rtl:"Smjer teksta s desna na lijevo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hu.js deleted file mode 100644 index 2edc7818..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","hu",{ltr:"Szöveg iránya balról jobbra",rtl:"Szöveg iránya jobbról balra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/id.js deleted file mode 100644 index a614b243..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","id",{ltr:"Arah penulisan dari kiri ke kanan.",rtl:"Arah penulisan dari kanan ke kiri."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/is.js deleted file mode 100644 index 9bee7c82..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","is",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/it.js deleted file mode 100644 index c9fc54bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","it",{ltr:"Direzione del testo da sinistra verso destra",rtl:"Direzione del testo da destra verso sinistra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ja.js deleted file mode 100644 index 53ac0ee1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ja",{ltr:"テキストの向き : 左から右へ",rtl:"テキストの向き : 右から左へ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ka.js deleted file mode 100644 index fb14539f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ka",{ltr:"ტექსტის მიმართულება მარცხნიდან მარჯვნივ",rtl:"ტექსტის მიმართულება მარჯვნიდან მარცხნივ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/km.js deleted file mode 100644 index fec2b242..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","km",{ltr:"ទិស​ដៅ​អក្សរ​ពី​ឆ្វេង​ទៅ​ស្ដាំ",rtl:"ទិស​ដៅ​អក្សរ​ពី​ស្ដាំ​ទៅ​ឆ្វេង"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ko.js deleted file mode 100644 index 50ad8a12..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ko",{ltr:"택스트 방향이 왼쪽에서 오른쪽으로 ",rtl:"택스트 방향이 오른쪽에서 왼쪽으로"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ku.js deleted file mode 100644 index 9b668f05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ku",{ltr:"ئاراستەی نووسە لە چەپ بۆ ڕاست",rtl:"ئاراستەی نووسە لە ڕاست بۆ چەپ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lt.js deleted file mode 100644 index d809fc02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","lt",{ltr:"Tekstas iš kairės į dešinę",rtl:"Tekstas iš dešinės į kairę"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lv.js deleted file mode 100644 index 014b9cfd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","lv",{ltr:"Teksta virziens no kreisās uz labo",rtl:"Teksta virziens no labās uz kreiso"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mk.js deleted file mode 100644 index 8bf3d73a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","mk",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mn.js deleted file mode 100644 index d7f6ba9d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","mn",{ltr:"Зүүнээс баруун тийш бичлэг",rtl:"Баруунаас зүүн тийш бичлэг"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ms.js deleted file mode 100644 index 09c685d7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ms",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nb.js deleted file mode 100644 index 05d502ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","nb",{ltr:"Tekstretning fra venstre til høyre",rtl:"Tekstretning fra høyre til venstre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nl.js deleted file mode 100644 index c7babcff..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","nl",{ltr:"Schrijfrichting van links naar rechts",rtl:"Schrijfrichting van rechts naar links"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/no.js deleted file mode 100644 index e956963b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","no",{ltr:"Tekstretning fra venstre til høyre",rtl:"Tekstretning fra høyre til venstre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pl.js deleted file mode 100644 index bcee3e0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pl",{ltr:"Kierunek tekstu od lewej strony do prawej",rtl:"Kierunek tekstu od prawej strony do lewej"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt-br.js deleted file mode 100644 index e62c4ca7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pt-br",{ltr:"Direção do texto da esquerda para a direita",rtl:"Direção do texto da direita para a esquerda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt.js deleted file mode 100644 index 293ba251..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","pt",{ltr:"Direção do texto da esquerda para a direita",rtl:"Direção do texto da direita para a esquerda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ro.js deleted file mode 100644 index 028d40c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ro",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ru.js deleted file mode 100644 index 033c0008..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ru",{ltr:"Направление текста слева направо",rtl:"Направление текста справа налево"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/si.js deleted file mode 100644 index 466e72fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","si",{ltr:"වගන්ති දිශාව වමේ සිට දකුණට",rtl:"වගන්ති දිශාව දකුණේ සිට වමට"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sk.js deleted file mode 100644 index 26150c48..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sk",{ltr:"Smer textu zľava doprava",rtl:"Smer textu sprava doľava"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sl.js deleted file mode 100644 index ae184de2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sl",{ltr:"Smer besedila od leve proti desni",rtl:"Smer besedila od desne proti levi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sq.js deleted file mode 100644 index 8ae3bb3f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sq",{ltr:"Drejtimi i tekstit nga e majta në të djathtë",rtl:"Drejtimi i tekstit nga e djathta në të majtë"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js deleted file mode 100644 index 04f04fc2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sr-latn",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr.js deleted file mode 100644 index 56efd86a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sr",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sv.js deleted file mode 100644 index b5eb279f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","sv",{ltr:"Text riktning från vänster till höger",rtl:"Text riktning från höger till vänster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/th.js deleted file mode 100644 index 82de00f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","th",{ltr:"Text direction from left to right",rtl:"Text direction from right to left"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tr.js deleted file mode 100644 index 74fc6641..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","tr",{ltr:"Metin yönü soldan sağa",rtl:"Metin yönü sağdan sola"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tt.js deleted file mode 100644 index f6fea6a7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","tt",{ltr:"Сулдан уңга язылыш",rtl:"Уңнан сулга язылыш"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ug.js deleted file mode 100644 index 2ad6f067..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","ug",{ltr:"تېكىست يۆنىلىشى سولدىن ئوڭغا",rtl:"تېكىست يۆنىلىشى ئوڭدىن سولغا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/uk.js deleted file mode 100644 index aaa68d7e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","uk",{ltr:"Напрямок тексту зліва направо",rtl:"Напрямок тексту справа наліво"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/vi.js deleted file mode 100644 index ceefbdd9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","vi",{ltr:"Văn bản hướng từ trái sang phải",rtl:"Văn bản hướng từ phải sang trái"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js deleted file mode 100644 index 7eae5cfb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","zh-cn",{ltr:"文字方向为从左至右",rtl:"文字方向为从右至左"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh.js deleted file mode 100644 index e978e3e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("bidi","zh",{ltr:"文字方向從左至右",rtl:"文字方向從右至左"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/bidi/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/bidi/plugin.js deleted file mode 100644 index 1eb15a05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/bidi/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function n(a,f,d,b){if(!a.isReadOnly()&&!a.equals(d.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);for(var b=a,c=d.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b="useComputedState"in d.config?d.config.useComputedState:1;if((b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f)a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&& -a.setAttribute("dir",f)):a.setAttribute("dir",f),d.forceNextSelectionCheck()}}function r(a,f,d){var b=a.getCommonAncestor(!1,!0),a=a.clone();a.enlarge(d==CKEDITOR.ENTER_BR?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(a.checkBoundaryOfElement(b,CKEDITOR.START)&&a.checkBoundaryOfElement(b,CKEDITOR.END)){for(var c;b&&b.type==CKEDITOR.NODE_ELEMENT&&(c=b.getParent())&&1==c.getChildCount()&&!(b.getName()in f);)b=c;return b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in f&&b}}function m(a){return{context:"p", -allowedContent:{"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td":{propertiesOnly:!0,attributes:"dir"}},requiredContent:"p[dir]",refresh:function(a,d){var b=a.config.useComputedState,c,b=void 0===b||b;if(!b){c=d.lastElement;for(var h=a.editable();c&&!(c.getName()in q||c.equals(h));){var e=c.getParent();if(!e)break;c=e}}c=c||d.block||d.blockLimit;c.equals(a.editable())&&(h=a.getSelection().getRanges()[0].getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(c=h);c&&(b=b?c.getComputedStyle("direction"): -c.getStyle("direction")||c.getAttribute("dir"),a.getCommand("bidirtl").setState("rtl"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),a.getCommand("bidiltr").setState("ltr"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF));b=(d.block||d.blockLimit||a.editable()).getDirection(1);if(b!=(a._.selDir||a.lang.dir))a._.selDir=b,a.fire("contentDirChanged",b)},exec:function(f){var d=f.getSelection(),b=f.config.enterMode,c=d.getRanges();if(c&&c.length){for(var h={},e=d.createBookmarks(),c=c.createIterator(),g, -j=0;g=c.getNextRange(1);){var i=g.getEnclosedNode();if(!i||i&&!(i.type==CKEDITOR.NODE_ELEMENT&&i.getName()in o))i=r(g,p,b);i&&n(i,a,f,h);var k=new CKEDITOR.dom.walker(g),l=e[j].startNode,m=e[j++].endNode;k.evaluator=function(a){return!!(a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in p&&!(a.getName()==(b==CKEDITOR.ENTER_P?"p":"div")&&a.getParent().type==CKEDITOR.NODE_ELEMENT&&"blockquote"==a.getParent().getName())&&a.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&(a.getPosition(m)&CKEDITOR.POSITION_PRECEDING+ -CKEDITOR.POSITION_CONTAINS)==CKEDITOR.POSITION_PRECEDING)};for(;i=k.next();)n(i,a,f,h);g=g.createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;i=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)n(i,a,f,h)}CKEDITOR.dom.element.clearAllMarkers(h);f.forceNextSelectionCheck();d.selectBookmarks(e);f.focus()}}}}function s(a){var f=a==j.setAttribute,d=a==j.removeAttribute,b=/\bdirection\s*:\s*(.*?)\s*(:?$|;)/;return function(c,h){if(!this.isReadOnly()){var e;if(e=c==(f||d?"dir":"direction")||"style"== -c&&(d||b.test(h))){a:{e=this;for(var g=e.getDocument().getBody().getParent();e;){if(e.equals(g)){e=!1;break a}e=e.getParent()}e=!0}e=!e}if(e&&(e=this.getDirection(1),g=a.apply(this,arguments),e!=this.getDirection(1)))return this.getDocument().fire("dirChanged",this),g}return a.apply(this,arguments)}}var p={table:1,ul:1,ol:1,blockquote:1,div:1},o={},q={};CKEDITOR.tools.extend(o,p,{tr:1,p:1,div:1,li:1});CKEDITOR.tools.extend(q,o,{td:1});CKEDITOR.plugins.add("bidi",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn", -icons:"bidiltr,bidirtl",hidpi:!0,init:function(a){function f(b,c,d,e,f){a.addCommand(d,new CKEDITOR.command(a,e));a.ui.addButton&&a.ui.addButton(b,{label:c,command:d,toolbar:"bidi,"+f})}if(!a.blockless){var d=a.lang.bidi;f("BidiLtr",d.ltr,"bidiltr",m("ltr"),10);f("BidiRtl",d.rtl,"bidirtl",m("rtl"),20);a.on("contentDom",function(){a.document.on("dirChanged",function(b){a.fire("dirChanged",{node:b.data,dir:b.data.getDirection(1)})})});a.on("contentDirChanged",function(b){var b=(a.lang.dir!=b.data?"add": -"remove")+"Class",c=a.ui.space(a.config.toolbarLocation);if(c)c[b]("cke_mixed_dir_content")})}}});for(var j=CKEDITOR.dom.element.prototype,l=["setStyle","removeStyle","setAttribute","removeAttribute"],k=0;k<l.length;k++)j[l[k]]=CKEDITOR.tools.override(j[l[k]],s)})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js b/platforms/browser/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js deleted file mode 100644 index fd793e94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/clipboard/dialogs/paste.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); -b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat|| -CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+e.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+e.pasteMsg+"</div>"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(), -b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(h,a)+",this);<\/script></body></html>",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie? -"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'" role="region" aria-label="'+e.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'" aria-multiple="true"></iframe>');d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody()); -CKEDITOR.env.air&&h.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");a.append(d);if(CKEDITOR.env.ie){var g=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');g.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(g);this.focus=function(){g.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height", -d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",d)},0)}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js deleted file mode 100644 index d048dece..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/dialogs/codesnippet.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("codeSnippet",function(c){var b=c._.codesnippet.langs,d=c.lang.codesnippet,g=document.documentElement.clientHeight,e=[],f;e.push([c.lang.common.notSet,""]);for(f in b)e.push([b[f],f]);b=CKEDITOR.document.getWindow().getViewPaneSize();c=Math.min(b.width-70,800);b=b.height/1.5;650>g&&(b=g-220);return{title:d.title,minHeight:200,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"info",elements:[{id:"lang",type:"select",label:d.language,items:e,setup:function(a){a.ready&& -a.data.lang&&this.setValue(a.data.lang);if(CKEDITOR.env.gecko&&(!a.data.lang||!a.ready))this.getInputElement().$.selectedIndex=-1},commit:function(a){a.setData("lang",this.getValue())}},{id:"code",type:"textarea",label:d.codeContents,setup:function(a){this.setValue(a.data.code)},commit:function(a){a.setData("code",this.getValue())},required:!0,validate:CKEDITOR.dialog.validate.notEmpty(d.emptySnippetError),inputStyle:"cursor:auto;width:"+c+"px;height:"+b+"px;tab-size:4;text-align:left;","class":"cke_source"}]}]}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/codesnippet.png deleted file mode 100644 index 187d188019c74ddff755068f64bfe8f2a95ff467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW1gprV~EA+sgn+NNjVC%?T;!FJhnjmq~j#P)OAiB3PPMuo*B2) z`tk3a#m-^rdLvP>LUOU3(9+Asm+SegU+>zjW*r^y$2G8|HuUPVy~i!vRa6qwwwkmw z6!S57R!wUYVAygqXUB?3HtzYF40>mH7>o~}332y-^`4_@@4Z6)|DP@T`c)>q<M4~G zJ#}8_%1gb@MH=UXue`0Zkm>t6sp8{=1?xPOPH$RXUNCvvw3)RlAGOZh%d+NX&b>c; zo+Z0u=Ndl{{h;eP$$rv{@4qcSh`yL}p}TCi?t_Kj8(+UHiSqar+50owXy%jyq5|^k zH{8vW&#keMtC!$wUmv}8+S%uy{TaHCJ~HZ3lJ0f;m}6GWzF?CM<CDGY0i{}=v)+EM z7C&Cd_-DnerOgKyl$`rJ?Tege)cWflLDN#dmu!tv%$)Q5=eEl)pIlwB^Lw50%iLMZ zB4#c7ZxhVXD8S@7NyRm==HA<~e5u}JT3w6!Pe1*%d*(;+`CB`dmh6?50Y-;viEBhj zN@7W>RdP`(kYX@0Ff`FMFxE9P4>2^fGBLI?vD7v&v@$S|3;Op8MMG|WN@iLmZVmbT zZec(Tk{}y`^V3So6N^$A%FE03GV`*FlM@S4_413-XTP(N0xDwgboFyt=akR{0I06@ A761SM diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png deleted file mode 100644 index 7f0c881062ab87f50d3c60c19bc309ce9b09796c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 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 ZaAhuUa%Y?FJQ@H1002ovPDHLkV1luDj1T|- diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/bg.js deleted file mode 100644 index dc085f71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","bg",{button:"Въведете кода",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ca.js deleted file mode 100644 index ab704ea8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ca",{button:"Insereix el fragment de codi",codeContents:"Contingut del codi",emptySnippetError:"El fragment de codi no pot estar buit.",language:"Idioma",title:"Fragment de codi",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/cs.js deleted file mode 100644 index 97fe0e72..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","cs",{button:"Vložit úryvek kódu",codeContents:"Obsah kódu",emptySnippetError:"Úryvek kódu nemůže být prázdný.",language:"Jazyk",title:"Úryvek kódu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/da.js deleted file mode 100644 index e1538238..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","da",{button:"Indsæt koden her",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/de.js deleted file mode 100644 index 5f1d815a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","de",{button:"Codeschnipsel einfügen",codeContents:"Codeinhalt",emptySnippetError:"Ein Codeschnipsel kann nicht leer sein.",language:"Sprache",title:"Codeschnipsel",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/el.js deleted file mode 100644 index 7ba1ed59..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","el",{button:"Εισαγωγή τμήματος κώδικα",codeContents:"Περιεχόμενο κώδικα",emptySnippetError:"Δεν γίνεται να είναι κενά τα αποσπάσματα κώδικα.",language:"Γλώσσα",title:"Απόσπασμα κώδικα",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js deleted file mode 100644 index 93940cea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","en-gb",{button:"Insert Code Snippet",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en.js deleted file mode 100644 index 6b018c0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","en",{button:"Insert Code Snippet",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/eo.js deleted file mode 100644 index 080142b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","eo",{button:"Enmeti kodaĵeron",codeContents:"Kodenhavo",emptySnippetError:"Kodaĵero ne povas esti malplena.",language:"Lingvo",title:"Kodaĵero",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/es.js deleted file mode 100644 index 375782a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","es",{button:"Insertar fragmento de código",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/et.js deleted file mode 100644 index 805647fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","et",{button:"Koodilõigu sisestamine",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fa.js deleted file mode 100644 index 51ee08a1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fa",{button:"قرار دادن کد قطعه",codeContents:"محتوای کد",emptySnippetError:"کد نمی تواند خالی باشد.",language:"زبان",title:"کد قطعه",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fi.js deleted file mode 100644 index c9647d4e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fi",{button:"Lisää koodileike",codeContents:"Koodisisältö",emptySnippetError:"Koodileike ei voi olla tyhjä.",language:"Kieli",title:"Koodileike",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js deleted file mode 100644 index d938e73b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fr-ca",{button:"Insérer du code",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr.js deleted file mode 100644 index 3220c4f1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","fr",{button:"Insérer un extrait de code",codeContents:"Contenu du code",emptySnippetError:"Un extrait de code ne peut pas être vide",language:"Langue",title:"Extrait de code",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/he.js deleted file mode 100644 index 6bbe1824..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","he",{button:"הכנס קטע קוד",codeContents:"תוכן קוד",emptySnippetError:"קטע קוד לא יכול להיות ריק.",language:"שפה",title:"קטע קוד",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hr.js deleted file mode 100644 index 53fd25ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","hr",{button:"Ubaci isječak kôda",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hu.js deleted file mode 100644 index 24840f5e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","hu",{button:"Illeszd be a kódtöredéket",codeContents:"Kód tartalom",emptySnippetError:"A kódtöredék nem lehet üres.",language:"Nyelv",title:"Kódtöredék",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/it.js deleted file mode 100644 index 83f62d72..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","it",{button:"Inserisci frammento di codice",codeContents:"Contenuto del codice",emptySnippetError:"Un frammento di codice non può essere vuoto.",language:"Lingua",title:"Frammento di codice",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ja.js deleted file mode 100644 index 4f9e2a7c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ja",{button:"コードスニペットを挿入",codeContents:"コード内容",emptySnippetError:"コードスニペットを入力してください。",language:"言語",title:"コードスニペット",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/km.js deleted file mode 100644 index 253671d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","km",{button:"Insert code snippet",codeContents:"មាតិកាកូដ",emptySnippetError:"A code snippet cannot be empty.",language:"ភាសា",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ku.js deleted file mode 100644 index 6fd1f9af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ku",{button:"تیتکی کۆد دابنێ",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lt.js deleted file mode 100644 index dccd7423..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","lt",{button:"Įterpkite kodo gabaliuką",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lv.js deleted file mode 100644 index 2973418f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","lv",{button:"Ievietot koda fragmentu",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nb.js deleted file mode 100644 index 43af1293..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","nb",{button:"Sett inn kodesnutt",codeContents:"Kodeinnhold",emptySnippetError:"En kodesnutt kan ikke være tom.",language:"Språk",title:"Kodesnutt",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nl.js deleted file mode 100644 index 8c26fe63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","nl",{button:"Stuk code invoegen",codeContents:"Code",emptySnippetError:"Een stuk code kan niet leeg zijn.",language:"Taal",title:"Stuk code",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/no.js deleted file mode 100644 index fb988ab3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","no",{button:"Sett inn kodesnutt",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pl.js deleted file mode 100644 index c512e1f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pl",{button:"Wstaw fragment kodu",codeContents:"Treść kodu",emptySnippetError:"Kod nie może być pusty.",language:"Język",title:"Fragment kodu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js deleted file mode 100644 index 7c9a9deb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pt-br",{button:"Inserir fragmento de código",codeContents:"Conteúdo do código",emptySnippetError:"Um fragmento de código não pode ser vazio",language:"Idioma",title:"Fragmento de código",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt.js deleted file mode 100644 index 6056c7c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","pt",{button:"Inserir fragmento de código",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ro.js deleted file mode 100644 index 7c5e170d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ro.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ro",{button:"Adaugă segment de cod",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ru.js deleted file mode 100644 index 7494c5c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ru",{button:"Вставить сниппет",codeContents:"Содержимое кода",emptySnippetError:"Сниппет не может быть пустым",language:"Язык",title:"Сниппет",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sk.js deleted file mode 100644 index 29d7d00b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sk",{button:"Vložte kód Snippet-u",codeContents:"Obsah kódu",emptySnippetError:"Snippet kódu nesmie byť prázdny",language:"Jazyk",title:"Snippet kódu",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sl.js deleted file mode 100644 index 8b5f5d83..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sl",{button:"Vstavi odsek kode",codeContents:"Koda vsebina",emptySnippetError:"Odrezek kode ne more biti prazen.",language:"Jezik",title:"Odrezek kode",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sq.js deleted file mode 100644 index 5a7a4d05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sq",{button:"Shto kod copëze",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sv.js deleted file mode 100644 index 07a1b71c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","sv",{button:"Infoga kodsnutt",codeContents:"Kodinnehålll",emptySnippetError:"Innehåll krävs för kodsnutt",language:"Språk",title:"Kodsnutt",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/th.js deleted file mode 100644 index cb2f44d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","th",{button:"แทรกชิ้นส่วนของรหัสหรือโค้ด",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tr.js deleted file mode 100644 index c51b3d4b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","tr",{button:"Kod parçacığı ekle",codeContents:"Kod",emptySnippetError:"Kod parçacığı boş bırakılamaz",language:"Dil",title:"Kod parçacığı",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tt.js deleted file mode 100644 index 52e5d1b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","tt",{button:"Код өзеген өстәү",codeContents:"Код эчтәлеге",emptySnippetError:"Код өзеге буш булмаска тиеш",language:"Тел",title:"Код өзеге",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ug.js deleted file mode 100644 index 04c78194..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","ug",{button:"كود پارچىسى قىستۇرۇش",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/uk.js deleted file mode 100644 index 6204ec1d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","uk",{button:"Вставити фрагмент коду",codeContents:"Code content",emptySnippetError:"A code snippet cannot be empty.",language:"Language",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/vi.js deleted file mode 100644 index 4a042960..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","vi",{button:"Chèn đoạn mã",codeContents:"Nội dung mã",emptySnippetError:"Một đoạn mã không thể để trống.",language:"Ngôn ngữ",title:"Đoạn mã",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js deleted file mode 100644 index f281b7df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","zh-cn",{button:"插入代码",codeContents:"Code content",emptySnippetError:"插入代码不能为空",language:"语言",title:"Code snippet",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh.js deleted file mode 100644 index 18a149a7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("codesnippet","zh",{button:"插入程式碼片段",codeContents:"程式碼內容",emptySnippetError:"程式碼片段不可為空白。",language:"語言",title:"程式碼片段",pathName:"code snippet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md deleted file mode 100644 index 8c3fe322..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md +++ /dev/null @@ -1,827 +0,0 @@ -## Version 8.0 beta - -This new major release is quite a big overhaul bringing both new features and -some backwards incompatible changes. However, chances are that the majority of -users won't be affected by the latter: the basic scenario described in the -README is left intact. - -Here's what did change in an incompatible way: - -- We're now prefixing all classes located in [CSS classes reference][cr] with - `hljs-`, by default, because some class names would collide with other - people's stylesheets. If you were using an older version, you might still want - the previous behavior, but still want to upgrade. To suppress this new - behavior, you would initialize like so: - - ```html - <script type="text/javascript"> - hljs.configure({classPrefix: ''}); - hljs.initHighlightingOnLoad(); - </script> - ``` - -- `tabReplace` and `useBR` that were used in different places are also unified - into the global options object and are to be set using `configure(options)`. - This function is documented in our [API docs][]. Also note that these - parameters are gone from `highlightBlock` and `fixMarkup` which are now also - rely on `configure`. - -- We removed public-facing (though undocumented) object `hljs.LANGUAGES` which - was used to register languages with the library in favor of two new methods: - `registerLanguage` and `getLanguage`. Both are documented in our [API docs][]. - -- Result returned from `highlight` and `highlightAuto` no longer contains two - separate attributes contributing to relevance score, `relevance` and - `keyword_count`. They are now unified in `relevance`. - -Another technically compatible change that nonetheless might need attention: - -- The structure of the NPM package was refactored, so if you had installed it - locally, you'll have to update your paths. The usual `require('highlight.js')` - works as before. This is contributed by [Dmitry Smolin][]. - -New features: - -- Languages now can be recognized by multiple names like "js" for JavaScript or - "html" for, well, HTML (which earlier insisted on calling it "xml"). These - aliases can be specified in the class attribute of the code container in your - HTML as well as in various API calls. For now there are only a few very common - aliases but we'll expand it in the future. All of them are listed in the - [class reference][]. - -- Language detection can now be restricted to a subset of languages relevant in - a given context — a web page or even a single highlighting call. This is - especially useful for node.js build that includes all the known languages. - Another example is a StackOverflow-style site where users specify languages - as tags rather than in the markdown-formatted code snippets. This is - documented in the [API reference][] (see methods `highlightAuto` and - `configure`). - -- Language definition syntax streamlined with [variants][] and - [beginKeywords][]. - -New languages and styles: - -- *Oxygene* by [Carlo Kok][] -- *Mathematica* by [Daniel Kvasnička][] -- *Autohotkey* by [Seongwon Lee][] -- *Atelier* family of styles in 10 variants by [Bram de Haan][] -- *Paraíso* styles by [Jan T. Sott][] - -Miscelleanous improvements: - -- Highlighting `=>` prompts in Clojure. -- [Jeremy Hull][] fixed a lot of styles for consistency. -- Finally, highlighting PHP and HTML [mixed in peculiar ways][php-html]. -- Objective C and C# now properly highlight titles in method definition. -- Big overhaul of relevance counting for a number of languages. Please do report - bugs about mis-detection of non-trivial code snippets! - -[cr]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html -[api docs]: http://highlightjs.readthedocs.org/en/latest/api.html -[variants]: https://groups.google.com/d/topic/highlightjs/VoGC9-1p5vk/discussion -[beginKeywords]: https://github.com/isagalaev/highlight.js/commit/6c7fdea002eb3949577a85b3f7930137c7c3038d -[php-html]: https://twitter.com/highlightjs/status/408890903017689088 - -[Carlo Kok]: https://github.com/carlokok -[Bram de Haan]: https://github.com/atelierbram -[Daniel Kvasnička]: https://github.com/dkvasnicka -[Dmitry Smolin]: https://github.com/dimsmol -[Jeremy Hull]: https://github.com/sourrust -[Seongwon Lee]: https://github.com/dlimpid -[Jan T. Sott]: https://github.com/idleberg - - -## Version 7.5 - -A catch-up release dealing with some of the accumulated contributions. This one -is probably will be the last before the 8.0 which will be slightly backwards -incompatible regarding some advanced use-cases. - -One outstanding change in this version is the addition of 6 languages to the -[hosted script][d]: Markdown, ObjectiveC, CoffeeScript, Apache, Nginx and -Makefile. It now weighs about 6K more but we're going to keep it under 30K. - -New languages: - -- OCaml by [Mehdi Dogguy][mehdid] and [Nicolas Braud-Santoni][nbraud] -- [LiveCode Server][lcs] by [Ralf Bitter][revig] -- Scilab by [Sylvestre Ledru][sylvestre] -- basic support for Makefile by [Ivan Sagalaev][isagalaev] - -Improvements: - -- Ruby's got support for characters like `?A`, `?1`, `?\012` etc. and `%r{..}` - regexps. -- Clojure now allows a function call in the beginning of s-expressions - `(($filter "myCount") (arr 1 2 3 4 5))`. -- Haskell's got new keywords and now recognizes more things like pragmas, - preprocessors, modules, containers, FFIs etc. Thanks to [Zena Treep][treep] - for the implementation and to [Jeremy Hull][sourrust] for guiding it. -- Miscelleanous fixes in PHP, Brainfuck, SCSS, Asciidoc, CMake, Python and F#. - -[mehdid]: https://github.com/mehdid -[nbraud]: https://github.com/nbraud -[revig]: https://github.com/revig -[lcs]: http://livecode.com/developers/guides/server/ -[sylvestre]: https://github.com/sylvestre -[isagalaev]: https://github.com/isagalaev -[treep]: https://github.com/treep -[sourrust]: https://github.com/sourrust -[d]: http://highlightjs.org/download/ - - -## New core developers - -The latest long period of almost complete inactivity in the project coincided -with growing interest to it led to a decision that now seems completely obvious: -we need more core developers. - -So without further ado let me welcome to the core team two long-time -contributors: [Jeremy Hull][] and [Oleg -Efimov][]. - -Hope now we'll be able to work through stuff faster! - -P.S. The historical commit is [here][1] for the record. - -[Jeremy Hull]: https://github.com/sourrust -[Oleg Efimov]: https://github.com/sannis -[1]: https://github.com/isagalaev/highlight.js/commit/f3056941bda56d2b72276b97bc0dd5f230f2473f - - -## Version 7.4 - -This long overdue version is a snapshot of the current source tree with all the -changes that happened during the past year. Sorry for taking so long! - -Along with the changes in code highlight.js has finally got its new home at -<http://highlightjs.org/>, moving from its craddle on Software Maniacs which it -outgrew a long time ago. Be sure to report any bugs about the site to -<mailto:info@highlightjs.org>. - -On to what's new… - -New languages: - -- Handlebars templates by [Robin Ward][] -- Oracle Rules Language by [Jason Jacobson][] -- F# by [Joans Follesø][] -- AsciiDoc and Haml by [Dan Allen][] -- Lasso by [Eric Knibbe][] -- SCSS by [Kurt Emch][] -- VB.NET by [Poren Chiang][] -- Mizar by [Kelley van Evert][] - -[Robin Ward]: https://github.com/eviltrout -[Jason Jacobson]: https://github.com/jayce7 -[Joans Follesø]: https://github.com/follesoe -[Dan Allen]: https://github.com/mojavelinux -[Eric Knibbe]: https://github.com/EricFromCanada -[Kurt Emch]: https://github.com/kemch -[Poren Chiang]: https://github.com/rschiang -[Kelley van Evert]: https://github.com/kelleyvanevert - -New style themes: - -- Monokai Sublime by [noformnocontent][] -- Railscasts by [Damien White][] -- Obsidian by [Alexander Marenin][] -- Docco by [Simon Madine][] -- Mono Blue by [Ivan Sagalaev][] (uses a single color hue for everything) -- Foundation by [Dan Allen][] - -[noformnocontent]: http://nn.mit-license.org/ -[Damien White]: https://github.com/visoft -[Alexander Marenin]: https://github.com/ioncreature -[Simon Madine]: https://github.com/thingsinjars -[Ivan Sagalaev]: https://github.com/isagalaev - -Other notable changes: - -- Corrected many corner cases in CSS. -- Dropped Python 2 version of the build tool. -- Implemented building for the AMD format. -- Updated Rust keywords (thanks to [Dmitry Medvinsky][]). -- Literal regexes can now be used in language definitions. -- CoffeeScript highlighting is now significantly more robust and rich due to - input from [Cédric Néhémie][]. - -[Dmitry Medvinsky]: https://github.com/dmedvinsky -[Cédric Néhémie]: https://github.com/abe33 - - -## Version 7.3 - -- Since this version highlight.js no longer works in IE version 8 and older. - It's made it possible to reduce the library size and dramatically improve code - readability and made it easier to maintain. Time to go forward! - -- New languages: AppleScript (by [Nathan Grigg][ng] and [Dr. Drang][dd]) and - Brainfuck (by [Evgeny Stepanischev][bolk]). - -- Improvements to existing languages: - - - interpreter prompt in Python (`>>>` and `...`) - - @-properties and classes in CoffeeScript - - E4X in JavaScript (by [Oleg Efimov][oe]) - - new keywords in Perl (by [Kirk Kimmel][kk]) - - big Ruby syntax update (by [Vasily Polovnyov][vast]) - - small fixes in Bash - -- Also Oleg Efimov did a great job of moving all the docs for language and style - developers and contributors from the old wiki under the source code in the - "docs" directory. Now these docs are nicely presented at - <http://highlightjs.readthedocs.org/>. - -[ng]: https://github.com/nathan11g -[dd]: https://github.com/drdrang -[bolk]: https://github.com/bolknote -[oe]: https://github.com/Sannis -[kk]: https://github.com/kimmel -[vast]: https://github.com/vast - - -## Version 7.2 - -A regular bug-fix release without any significant new features. Enjoy! - - -## Version 7.1 - -A Summer crop: - -- [Marc Fornos][mf] made the definition for Clojure along with the matching - style Rainbow (which, of course, works for other languages too). -- CoffeeScript support continues to improve getting support for regular - expressions. -- Yoshihide Jimbo ported to highlight.js [five Tomorrow styles][tm] from the - [project by Chris Kempson][tm0]. -- Thanks to [Casey Duncun][cd] the library can now be built in the popular - [AMD format][amd]. -- And last but not least, we've got a fair number of correctness and consistency - fixes, including a pretty significant refactoring of Ruby. - -[mf]: https://github.com/mfornos -[tm]: http://jmblog.github.com/color-themes-for-highlightjs/ -[tm0]: https://github.com/ChrisKempson/Tomorrow-Theme -[cd]: https://github.com/caseman -[amd]: http://requirejs.org/docs/whyamd.html - - -## Version 7.0 - -The reason for the new major version update is a global change of keyword syntax -which resulted in the library getting smaller once again. For example, the -hosted build is 2K less than at the previous version while supporting two new -languages. - -Notable changes: - -- The library now works not only in a browser but also with [node.js][]. It is - installable with `npm install highlight.js`. [API][] docs are available on our - wiki. - -- The new unique feature (apparently) among syntax highlighters is highlighting - *HTTP* headers and an arbitrary language in the request body. The most useful - languages here are *XML* and *JSON* both of which highlight.js does support. - Here's [the detailed post][p] about the feature. - -- Two new style themes: a dark "south" *[Pojoaque][]* by Jason Tate and an - emulation of*XCode* IDE by [Angel Olloqui][ao]. - -- Three new languages: *D* by [Aleksandar Ružičić][ar], *R* by [Joe Cheng][jc] - and *GLSL* by [Sergey Tikhomirov][st]. - -- *Nginx* syntax has become a million times smaller and more universal thanks to - remaking it in a more generic manner that doesn't require listing all the - directives in the known universe. - -- Function titles are now highlighted in *PHP*. - -- *Haskell* and *VHDL* were significantly reworked to be more rich and correct - by their respective maintainers [Jeremy Hull][sr] and [Igor Kalnitsky][ik]. - -And last but not least, many bugs have been fixed around correctness and -language detection. - -Overall highlight.js currently supports 51 languages and 20 style themes. - -[node.js]: http://nodejs.org/ -[api]: http://softwaremaniacs.org/wiki/doku.php/highlight.js:api -[p]: http://softwaremaniacs.org/blog/2012/05/10/http-and-json-in-highlight-js/en/ -[pojoaque]: http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html -[ao]: https://github.com/angelolloqui -[ar]: https://github.com/raleksandar -[jc]: https://github.com/jcheng5 -[st]: https://github.com/tikhomirov -[sr]: https://github.com/sourrust -[ik]: https://github.com/ikalnitsky - - -## Version 6.2 - -A lot of things happened in highlight.js since the last version! We've got nine -new contributors, the discussion group came alive, and the main branch on GitHub -now counts more than 350 followers. Here are most significant results coming -from all this activity: - -- 5 (five!) new languages: Rust, ActionScript, CoffeeScript, MatLab and - experimental support for markdown. Thanks go to [Andrey Vlasovskikh][av], - [Alexander Myadzel][am], [Dmytrii Nagirniak][dn], [Oleg Efimov][oe], [Denis - Bardadym][db] and [John Crepezzi][jc]. - -- 2 new style themes: Monokai by [Luigi Maselli][lm] and stylistic imitation of - another well-known highlighter Google Code Prettify by [Aahan Krish][ak]. - -- A vast number of [correctness fixes and code refactorings][log], mostly made - by [Oleg Efimov][oe] and [Evgeny Stepanischev][es]. - -[av]: https://github.com/vlasovskikh -[am]: https://github.com/myadzel -[dn]: https://github.com/dnagir -[oe]: https://github.com/Sannis -[db]: https://github.com/btd -[jc]: https://github.com/seejohnrun -[lm]: http://grigio.org/ -[ak]: https://github.com/geekpanth3r -[es]: https://github.com/bolknote -[log]: https://github.com/isagalaev/highlight.js/commits/ - - -## Version 6.1 — Solarized - -[Jeremy Hull][jh] has implemented my dream feature — a port of [Solarized][] -style theme famous for being based on the intricate color theory to achieve -correct contrast and color perception. It is now available for highlight.js in -both variants — light and dark. - -This version also adds a new original style Arta. Its author pumbur maintains a -[heavily modified fork of highlight.js][pb] on GitHub. - -[jh]: https://github.com/sourrust -[solarized]: http://ethanschoonover.com/solarized -[pb]: https://github.com/pumbur/highlight.js - - -## Version 6.0 - -New major version of the highlighter has been built on a significantly -refactored syntax. Due to this it's even smaller than the previous one while -supporting more languages! - -New languages are: - -- Haskell by [Jeremy Hull][sourrust] -- Erlang in two varieties — module and REPL — made collectively by [Nikolay - Zakharov][desh], [Dmitry Kovega][arhibot] and [Sergey Ignatov][ignatov] -- Objective C by [Valerii Hiora][vhbit] -- Vala by [Antono Vasiljev][antono] -- Go by [Stephan Kountso][steplg] - -[sourrust]: https://github.com/sourrust -[desh]: http://desh.su/ -[arhibot]: https://github.com/arhibot -[ignatov]: https://github.com/ignatov -[vhbit]: https://github.com/vhbit -[antono]: https://github.com/antono -[steplg]: https://github.com/steplg - -Also this version is marginally faster and fixes a number of small long-standing -bugs. - -Developer overview of the new language syntax is available in a [blog post about -recent beta release][beta]. - -[beta]: http://softwaremaniacs.org/blog/2011/04/25/highlight-js-60-beta/en/ - -P.S. New version is not yet available on a Yandex' CDN, so for now you have to -download [your own copy][d]. - -[d]: /soft/highlight/en/download/ - - -## Version 5.14 - -Fixed bugs in HTML/XML detection and relevance introduced in previous -refactoring. - -Also test.html now shows the second best result of language detection by -relevance. - - -## Version 5.13 - -Past weekend began with a couple of simple additions for existing languages but -ended up in a big code refactoring bringing along nice improvements for language -developers. - -### For users - -- Description of C++ has got new keywords from the upcoming [C++ 0x][] standard. -- Description of HTML has got new tags from [HTML 5][]. -- CSS-styles have been unified to use consistent padding and also have lost - pop-outs with names of detected languages. -- [Igor Kalnitsky][ik] has sent two new language descriptions: CMake и VHDL. - -This makes total number of languages supported by highlight.js to reach 35. - -Bug fixes: - -- Custom classes on `<pre>` tags are not being overridden anymore -- More correct highlighting of code blocks inside non-`<pre>` containers: - highlighter now doesn't insist on replacing them with its own container and - just replaces the contents. -- Small fixes in browser compatibility and heuristics. - -[c++ 0x]: http://ru.wikipedia.org/wiki/C%2B%2B0x -[html 5]: http://en.wikipedia.org/wiki/HTML5 -[ik]: http://kalnitsky.org.ua/ - -### For developers - -The most significant change is the ability to include language submodes right -under `contains` instead of defining explicit named submodes in the main array: - - contains: [ - 'string', - 'number', - {begin: '\\n', end: hljs.IMMEDIATE_RE} - ] - -This is useful for auxiliary modes needed only in one place to define parsing. -Note that such modes often don't have `className` and hence won't generate a -separate `<span>` in the resulting markup. This is similar in effect to -`noMarkup: true`. All existing languages have been refactored accordingly. - -Test file test.html has at last become a real test. Now it not only puts the -detected language name under the code snippet but also tests if it matches the -expected one. Test summary is displayed right above all language snippets. - - -## CDN - -Fine people at [Yandex][] agreed to host highlight.js on their big fast servers. -[Link up][l]! - -[yandex]: http://yandex.com/ -[l]: http://softwaremaniacs.org/soft/highlight/en/download/ - - -## Version 5.10 — "Paris". - -Though I'm on a vacation in Paris, I decided to release a new version with a -couple of small fixes: - -- Tomas Vitvar discovered that TAB replacement doesn't always work when used - with custom markup in code -- SQL parsing is even more rigid now and doesn't step over SmallTalk in tests - - -## Version 5.9 - -A long-awaited version is finally released. - -New languages: - -- Andrew Fedorov made a definition for Lua -- a long-time highlight.js contributor [Peter Leonov][pl] made a definition for - Nginx config -- [Vladimir Moskva][vm] made a definition for TeX - -[pl]: http://kung-fu-tzu.ru/ -[vm]: http://fulc.ru/ - -Fixes for existing languages: - -- [Loren Segal][ls] reworked the Ruby definition and added highlighting for - [YARD][] inline documentation -- the definition of SQL has become more solid and now it shouldn't be overly - greedy when it comes to language detection - -[ls]: http://gnuu.org/ -[yard]: http://yardoc.org/ - -The highlighter has become more usable as a library allowing to do highlighting -from initialization code of JS frameworks and in ajax methods (see. -readme.eng.txt). - -Also this version drops support for the [WordPress][wp] plugin. Everyone is -welcome to [pick up its maintenance][p] if needed. - -[wp]: http://wordpress.org/ -[p]: http://bazaar.launchpad.net/~isagalaev/+junk/highlight/annotate/342/src/wp_highlight.js.php - - -## Version 5.8 - -- Jan Berkel has contributed a definition for Scala. +1 to hotness! -- All CSS-styles are rewritten to work only inside `<pre>` tags to avoid - conflicts with host site styles. - - -## Version 5.7. - -Fixed escaping of quotes in VBScript strings. - - -## Version 5.5 - -This version brings a small change: now .ini-files allow digits, underscores and -square brackets in key names. - - -## Version 5.4 - -Fixed small but upsetting bug in the packer which caused incorrect highlighting -of explicitly specified languages. Thanks to Andrew Fedorov for precise -diagnostics! - - -## Version 5.3 - -The version to fulfil old promises. - -The most significant change is that highlight.js now preserves custom user -markup in code along with its own highlighting markup. This means that now it's -possible to use, say, links in code. Thanks to [Vladimir Dolzhenko][vd] for the -[initial proposal][1] and for making a proof-of-concept patch. - -Also in this version: - -- [Vasily Polovnyov][vp] has sent a GitHub-like style and has implemented - support for CSS @-rules and Ruby symbols. -- Yura Zaripov has sent two styles: Brown Paper and School Book. -- Oleg Volchkov has sent a definition for [Parser 3][p3]. - -[1]: http://softwaremaniacs.org/forum/highlightjs/6612/ -[p3]: http://www.parser.ru/ -[vp]: http://vasily.polovnyov.ru/ -[vd]: http://dolzhenko.blogspot.com/ - - -## Version 5.2 - -- at last it's possible to replace indentation TABs with something sensible (e.g. 2 or 4 spaces) -- new keywords and built-ins for 1C by Sergey Baranov -- a couple of small fixes to Apache highlighting - - -## Version 5.1 - -This is one of those nice version consisting entirely of new and shiny -contributions! - -- [Vladimir Ermakov][vooon] created highlighting for AVR Assembler -- [Ruslan Keba][rukeba] created highlighting for Apache config file. Also his - original visual style for it is now available for all highlight.js languages - under the name "Magula". -- [Shuen-Huei Guan][drake] (aka Drake) sent new keywords for RenderMan - languages. Also thanks go to [Konstantin Evdokimenko][ke] for his advice on - the matter. - -[vooon]: http://vehq.ru/about/ -[rukeba]: http://rukeba.com/ -[drake]: http://drakeguan.org/ -[ke]: http://k-evdokimenko.moikrug.ru/ - - -## Version 5.0 - -The main change in the new major version of highlight.js is a mechanism for -packing several languages along with the library itself into a single compressed -file. Now sites using several languages will load considerably faster because -the library won't dynamically include additional files while loading. - -Also this version fixes a long-standing bug with Javascript highlighting that -couldn't distinguish between regular expressions and division operations. - -And as usually there were a couple of minor correctness fixes. - -Great thanks to all contributors! Keep using highlight.js. - - -## Version 4.3 - -This version comes with two contributions from [Jason Diamond][jd]: - -- language definition for C# (yes! it was a long-missed thing!) -- Visual Studio-like highlighting style - -Plus there are a couple of minor bug fixes for parsing HTML and XML attributes. - -[jd]: http://jason.diamond.name/weblog/ - - -## Version 4.2 - -The biggest news is highlighting for Lisp, courtesy of Vasily Polovnyov. It's -somewhat experimental meaning that for highlighting "keywords" it doesn't use -any pre-defined set of a Lisp dialect. Instead it tries to highlight first word -in parentheses wherever it makes sense. I'd like to ask people programming in -Lisp to confirm if it's a good idea and send feedback to [the forum][f]. - -Other changes: - -- Smalltalk was excluded from DEFAULT_LANGUAGES to save traffic -- [Vladimir Epifanov][voldmar] has implemented javascript style switcher for - test.html -- comments now allowed inside Ruby function definition -- [MEL][] language from [Shuen-Huei Guan][drake] -- whitespace now allowed between `<pre>` and `<code>` -- better auto-detection of C++ and PHP -- HTML allows embedded VBScript (`<% .. %>`) - -[f]: http://softwaremaniacs.org/forum/highlightjs/ -[voldmar]: http://voldmar.ya.ru/ -[mel]: http://en.wikipedia.org/wiki/Maya_Embedded_Language -[drake]: http://drakeguan.org/ - - -## Version 4.1 - -Languages: - -- Bash from Vah -- DOS bat-files from Alexander Makarov (Sam) -- Diff files from Vasily Polovnyov -- Ini files from myself though initial idea was from Sam - -Styles: - -- Zenburn from Vladimir Epifanov, this is an imitation of a - [well-known theme for Vim][zenburn]. -- Ascetic from myself, as a realization of ideals of non-flashy highlighting: - just one color in only three gradations :-) - -In other news. [One small bug][bug] was fixed, built-in keywords were added for -Python and C++ which improved auto-detection for the latter (it was shame that -[my wife's blog][alenacpp] had issues with it from time to time). And lastly -thanks go to Sam for getting rid of my stylistic comments in code that were -getting in the way of [JSMin][]. - -[zenburn]: http://en.wikipedia.org/wiki/Zenburn -[alenacpp]: http://alenacpp.blogspot.com/ -[bug]: http://softwaremaniacs.org/forum/viewtopic.php?id=1823 -[jsmin]: http://code.google.com/p/jsmin-php/ - - -## Version 4.0 - -New major version is a result of vast refactoring and of many contributions. - -Visible new features: - -- Highlighting of embedded languages. Currently is implemented highlighting of - Javascript and CSS inside HTML. -- Bundled 5 ready-made style themes! - -Invisible new features: - -- Highlight.js no longer pollutes global namespace. Only one object and one - function for backward compatibility. -- Performance is further increased by about 15%. - -Changing of a major version number caused by a new format of language definition -files. If you use some third-party language files they should be updated. - - -## Version 3.5 - -A very nice version in my opinion fixing a number of small bugs and slightly -increased speed in a couple of corner cases. Thanks to everybody who reports -bugs in he [forum][f] and by email! - -There is also a new language — XML. A custom XML formerly was detected as HTML -and didn't highlight custom tags. In this version I tried to make custom XML to -be detected and highlighted by its own rules. Which by the way include such -things as CDATA sections and processing instructions (`<? ... ?>`). - -[f]: http://softwaremaniacs.org/forum/viewforum.php?id=6 - - -## Version 3.3 - -[Vladimir Gubarkov][xonix] has provided an interesting and useful addition. -File export.html contains a little program that shows and allows to copy and -paste an HTML code generated by the highlighter for any code snippet. This can -be useful in situations when one can't use the script itself on a site. - - -[xonix]: http://xonixx.blogspot.com/ - - -## Version 3.2 consists completely of contributions: - -- Vladimir Gubarkov has described SmallTalk -- Yuri Ivanov has described 1C -- Peter Leonov has packaged the highlighter as a Firefox extension -- Vladimir Ermakov has compiled a mod for phpBB - -Many thanks to you all! - - -## Version 3.1 - -Three new languages are available: Django templates, SQL and Axapta. The latter -two are sent by [Dmitri Roudakov][1]. However I've almost entirely rewrote an -SQL definition but I'd never started it be it from the ground up :-) - -The engine itself has got a long awaited feature of grouping keywords -("keyword", "built-in function", "literal"). No more hacks! - -[1]: http://roudakov.ru/ - - -## Version 3.0 - -It is major mainly because now highlight.js has grown large and has become -modular. Now when you pass it a list of languages to highlight it will -dynamically load into a browser only those languages. - -Also: - -- Konstantin Evdokimenko of [RibKit][] project has created a highlighting for - RenderMan Shading Language and RenderMan Interface Bytestream. Yay for more - languages! -- Heuristics for C++ and HTML got better. -- I've implemented (at last) a correct handling of backslash escapes in C-like - languages. - -There is also a small backwards incompatible change in the new version. The -function initHighlighting that was used to initialize highlighting instead of -initHighlightingOnLoad a long time ago no longer works. If you by chance still -use it — replace it with the new one. - -[RibKit]: http://ribkit.sourceforge.net/ - - -## Version 2.9 - -Highlight.js is a parser, not just a couple of regular expressions. That said -I'm glad to announce that in the new version 2.9 has support for: - -- in-string substitutions for Ruby -- `#{...}` -- strings from from numeric symbol codes (like #XX) for Delphi - - -## Version 2.8 - -A maintenance release with more tuned heuristics. Fully backwards compatible. - - -## Version 2.7 - -- Nikita Ledyaev presents highlighting for VBScript, yay! -- A couple of bugs with escaping in strings were fixed thanks to Mickle -- Ongoing tuning of heuristics - -Fixed bugs were rather unpleasant so I encourage everyone to upgrade! - - -## Version 2.4 - -- Peter Leonov provides another improved highlighting for Perl -- Javascript gets a new kind of keywords — "literals". These are the words - "true", "false" and "null" - -Also highlight.js homepage now lists sites that use the library. Feel free to -add your site by [dropping me a message][mail] until I find the time to build a -submit form. - -[mail]: mailto:Maniac@SoftwareManiacs.Org - - -## Version 2.3 - -This version fixes IE breakage in previous version. My apologies to all who have -already downloaded that one! - - -## Version 2.2 - -- added highlighting for Javascript -- at last fixed parsing of Delphi's escaped apostrophes in strings -- in Ruby fixed highlighting of keywords 'def' and 'class', same for 'sub' in - Perl - - -## Version 2.0 - -- Ruby support by [Anton Kovalyov][ak] -- speed increased by orders of magnitude due to new way of parsing -- this same way allows now correct highlighting of keywords in some tricky - places (like keyword "End" at the end of Delphi classes) - -[ak]: http://anton.kovalyov.net/ - - -## Version 1.0 - -Version 1.0 of javascript syntax highlighter is released! - -It's the first version available with English description. Feel free to post -your comments and question to [highlight.js forum][forum]. And don't be afraid -if you find there some fancy Cyrillic letters -- it's for Russian users too :-) - -[forum]: http://softwaremaniacs.org/forum/viewforum.php?id=6 diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE deleted file mode 100644 index 422deb73..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2006, Ivan Sagalaev -All rights reserved. -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 highlight.js 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 REGENTS 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 REGENTS AND 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. diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md deleted file mode 100644 index be85f6ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md +++ /dev/null @@ -1,171 +0,0 @@ -# Highlight.js - -Highlight.js нужен для подсветки синтаксиса в примерах кода в блогах, -форумах и вообще на любых веб-страницах. Пользоваться им очень просто, -потому что работает он автоматически: сам находит блоки кода, сам -определяет язык, сам подсвечивает. - -Автоопределением языка можно управлять, когда оно не справляется само (см. -дальше "Эвристика"). - - -## Простое использование - -Подключите библиотеку и стиль на страницу и повесть вызов подсветки на -загрузку страницы: - -```html -<link rel="stylesheet" href="styles/default.css"> -<script src="highlight.pack.js"></script> -<script>hljs.initHighlightingOnLoad();</script> -``` - -Весь код на странице, обрамлённый в теги `<pre><code> .. </code></pre>` -будет автоматически подсвечен. Если вы используете другие теги или хотите -подсвечивать блоки кода динамически, читайте "Инициализацию вручную" ниже. - -- Вы можете скачать собственную версию "highlight.pack.js" или сослаться - на захостенный файл, как описано на странице загрузки: - <http://highlightjs.org/download/> - -- Стилевые темы можно найти в загруженном архиве или также использовать - захостенные. Чтобы сделать собственный стиль для своего сайта, вам - будет полезен [CSS classes reference][cr], который тоже есть в архиве. - -[cr]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html - - -## node.js - -Highlight.js можно использовать в node.js. Библиотеку со всеми возможными языками можно -установить с NPM: - - npm install highlight.js - -Также её можно собрать из исходников с только теми языками, которые нужны: - - python3 tools/build.py -tnode lang1 lang2 .. - -Использование библиотеки: - -```javascript -var hljs = require('highlight.js'); - -// Если вы знаете язык -hljs.highlight(lang, code).value; - -// Автоопределение языка -hljs.highlightAuto(code).value; -``` - - -## AMD - -Highlight.js можно использовать с загрузчиком AMD-модулей. Для этого его -нужно собрать из исходников следующей командой: - -```bash -$ python3 tools/build.py -tamd lang1 lang2 .. -``` - -Она создаст файл `build/highlight.pack.js`, который является загружаемым -AMD-модулем и содержит все выбранные при сборке языки. Используется он так: - -```javascript -require(["highlight.js/build/highlight.pack"], function(hljs){ - - // Если вы знаете язык - hljs.highlight(lang, code).value; - - // Автоопределение языка - hljs.highlightAuto(code).value; -}); -``` - - -## Замена TABов - -Также вы можете заменить символы TAB ('\x09'), используемые для отступов, на -фиксированное количество пробелов или на отдельный `<span>`, чтобы задать ему -какой-нибудь специальный стиль: - -```html -<script type="text/javascript"> - hljs.configure({tabReplace: ' '}); // 4 spaces - // ... or - hljs.configure({tabReplace: '<span class="indent">\t</span>'}); - - hljs.initHighlightingOnLoad(); -</script> -``` - - -## Инициализация вручную - -Если вы используете другие теги для блоков кода, вы можете инициализировать их -явно с помощью функции `highlightBlock(code)`. Она принимает DOM-элемент с -текстом расцвечиваемого кода и опционально - строчку для замены символов TAB. - -Например с использованием jQuery код инициализации может выглядеть так: - -```javascript -$(document).ready(function() { - $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); -}); -``` - -`highlightBlock` можно также использовать, чтобы подсветить блоки кода, -добавленные на страницу динамически. Только убедитесь, что вы не делаете этого -повторно для уже раскрашенных блоков. - -Если ваш блок кода использует `<br>` вместо переводов строки (т.е. если это не -`<pre>`), включите опцию `useBR`: - -```javascript -hljs.configure({useBR: true}); -$('div.code').each(function(i, e) {hljs.highlightBlock(e)}); -``` - - -## Эвристика - -Определение языка, на котором написан фрагмент, делается с помощью -довольно простой эвристики: программа пытается расцветить фрагмент всеми -языками подряд, и для каждого языка считает количество подошедших -синтаксически конструкций и ключевых слов. Для какого языка нашлось больше, -тот и выбирается. - -Это означает, что в коротких фрагментах высока вероятность ошибки, что -периодически и случается. Чтобы указать язык фрагмента явно, надо написать -его название в виде класса к элементу `<code>`: - -```html -<pre><code class="html">...</code></pre> -``` - -Можно использовать рекомендованные в HTML5 названия классов: -"language-html", "language-php". Также можно назначать классы на элемент -`<pre>`. - -Чтобы запретить расцветку фрагмента вообще, используется класс "no-highlight": - -```html -<pre><code class="no-highlight">...</code></pre> -``` - - -## Экспорт - -В файле export.html находится небольшая программка, которая показывает и дает -скопировать непосредственно HTML-код подсветки для любого заданного фрагмента кода. -Это может понадобится например на сайте, на котором нельзя подключить сам скрипт -highlight.js. - - -## Координаты - -- Версия: 8.0 -- URL: http://highlightjs.org/ - -Лицензионное соглашение читайте в файле LICENSE. -Список авторов и соавторов читайте в файле AUTHORS.ru.txt diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js deleted file mode 100644 index 627f79e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -var hljs=new function(){function k(v){return v.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(v){return v.nodeName.toLowerCase()}function i(w,x){var v=w&&w.exec(x);return v&&v.index==0}function d(v){return Array.prototype.map.call(v.childNodes,function(w){if(w.nodeType==3){return b.useBR?w.nodeValue.replace(/\n/g,""):w.nodeValue}if(t(w)=="br"){return"\n"}return d(w)}).join("")}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^language-/,"")});return v.filter(function(x){return j(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset<y[0].offset)?w:y}return y[0].event=="start"?w:y}function A(H){function G(I){return" "+I.nodeName+'="'+k(I.value)+'"'}F+="<"+t(H)+Array.prototype.map.call(H.attributes,G).join("")+">"}function E(G){F+="</"+t(G)+">"}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=k(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+k(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};function E(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})}if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b=D.bK.split(" ").join("|")}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?\\b("+F.b+")\\b\\.?":F.b}).concat([D.tE]).concat([D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T<V.c.length;T++){if(i(V.c[T].bR,U)){return V.c[T]}}}function z(U,T){if(i(U.eR,T)){return U}if(U.eW){return z(U.parent,T)}}function A(T,U){return !J&&i(U.iR,T)}function E(V,T){var U=M.cI?T[0].toLowerCase():T[0];return V.k.hasOwnProperty(U)&&V.k[U]}function w(Z,X,W,V){var T=V?"":b.classPrefix,U='<span class="'+T,Y=W?"":"</span>";U+=Z+'">';return U+X+Y}function N(){var U=k(C);if(!I.k){return U}var T="";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(U);while(V){T+=U.substr(X,V.index-X);var W=E(I,V);if(W){H+=W[1];T+=w(W[0],V[0])}else{T+=V[0]}X=I.lR.lastIndex;V=I.lR.exec(U)}return T+U.substr(X)}function F(){if(I.sL&&!f[I.sL]){return k(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):g(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=k(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+="</span>"}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=k(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"<unnamed>")+'"')}C+=X;return X.length||1}var M=j(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+="</span>"}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:k(L)}}else{throw O}}}function g(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:k(y)};var w=v;x.forEach(function(z){if(!j(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function h(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"<br>")}return v}function p(z){var y=d(z);var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):g(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=h(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function e(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function j(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=g;this.fixMarkup=h;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=e;this.getLanguage=j;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage("cs",function(b){var a="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield";return{k:a,c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|<!--|-->"},{cN:"xmlDocTag",b:"</?",e:">"}]},b.CLCM,b.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},b.ASM,b.QSM,b.CNM,{bK:"protected public private internal",e:/[{;=]/,k:a,c:[{bK:"class namespace interface",starts:{c:[b.TM]}},{b:b.IR+"\\s*\\(",rB:true,c:[b.TM]}]}]}});hljs.registerLanguage("ruby",function(e){var h="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor";var a={cN:"yardoctag",b:"@[A-Za-z]+"};var i={cN:"comment",v:[{b:"#",e:"$",c:[a]},{b:"^\\=begin",e:"^\\=end",c:[a],r:10},{b:"^__END__",e:"\\n$"}]};var c={cN:"subst",b:"#\\{",e:"}",k:g};var d={cN:"string",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:"%[qw]?\\(",e:"\\)"},{b:"%[qw]?\\[",e:"\\]"},{b:"%[qw]?{",e:"}"},{b:"%[qw]?<",e:">",r:10},{b:"%[qw]?/",e:"/",r:10},{b:"%[qw]?%",e:"%",r:10},{b:"%[qw]?-",e:"-",r:10},{b:"%[qw]?\\|",e:"\\|",r:10},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]};var b={cN:"params",b:"\\(",e:"\\)",k:g};var f=[d,i,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]},i]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:h}),b,i]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[d,{b:h}],r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[i,{cN:"regexp",c:[e.BE,c],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];c.c=f;b.c=f;return{k:g,c:f}});hljs.registerLanguage("diff",function(a){return{c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBLCLM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/</,r:0,c:[d,{cN:"attribute",b:c,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html"],cI:true,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ /><]+",r:0},b]}]}});hljs.registerLanguage("markdown",function(a){return{c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].+?[\\)\\]]",rB:true,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:true,rE:true,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:true,eE:true},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:true,eE:true,}],r:10},{b:"^\\[.+\\]:",e:"$",rB:true,c:[{cN:"link_reference",b:"\\[",e:"\\]",eB:true,eE:true},{cN:"link_url",b:"\\s",e:"$"}]}]}});hljs.registerLanguage("css",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.NM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("http",function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}});hljs.registerLanguage("java",function(b){var a="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws";return{k:a,i:/<\//,c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"(^|\\s)@[A-Za-z]+"}],r:10},b.CLCM,b.CBLCLM,b.ASM,b.QSM,{bK:"protected public private",e:/[{;=]/,k:a,c:[{cN:"class",bK:"class interface",eW:true,i:/[:"<>]/,c:[{bK:"extends implements",r:10},b.UTM]},{b:b.UIR+"\\s*\\(",rB:true,c:[b.UTM]}]},b.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("php",function(b){var e={cN:"variable",b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var a={cN:"preprocessor",b:/<\?(php)?|\?>/};var c={cN:"string",c:[b.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[b.CLCM,b.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},a]},{cN:"comment",b:"__halt_compiler.+?;",eW:true,k:"__halt_compiler",l:b.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[b.BE]},a,e,{cN:"function",bK:"function",e:/[;{]/,i:"\\$|\\[|%",c:[b.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e,b.CBLCLM,c,d]}]},{cN:"class",bK:"class interface",e:"{",i:/[:\(\$"]/,c:[{bK:"extends implements",r:10},b.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[b.UTM]},{bK:"use",e:";",c:[b.UTM]},{b:"=>"},c,d]}});hljs.registerLanguage("python",function(a){var f={cN:"prompt",b:/^(>>>|\.\.\.) /};var b={cN:"string",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/,},{b:/(b|br)"/,e:/"/,},a.ASM,a.QSM]};var d={cN:"number",r:0,v:[{b:a.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:a.CNR+"[lLjJ]?"}]};var e={cN:"params",b:/\(/,e:/\)/,c:["self",f,d,b]};var c={e:/:/,i:/[${=;\n]/,c:[a.UTM,e]};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:"function",bK:"def",r:10}),a.inherit(c,{cN:"class",bK:"class"}),{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("sql",function(a){return{cI:true,i:/[<>]/,c:[{cN:"operator",b:"\\b(begin|end|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant|merge)\\b(?!:)",e:";",eW:true,k:{keyword:"all partial global month current_timestamp using go revoke smallint indicator end-exec disconnect zone with character assertion to add current_user usage input local alter match collate real then rollback get read timestamp session_user not integer bit unique day minute desc insert execute like ilike|2 level decimal drop continue isolation found where constraints domain right national some module transaction relative second connect escape close system_user for deferred section cast current sqlstate allocate intersect deallocate numeric public preserve full goto initially asc no key output collation group by union session both last language constraint column of space foreign deferrable prior connection unknown action commit view or first into float year primary cascaded except restrict set references names table outer open select size are rows from prepare distinct leading create only next inner authorization schema corresponding option declare precision immediate else timezone_minute external varying translation true case exception join hour default double scroll value cursor descriptor values dec fetch procedure delete and false int is describe char as at in varchar null trailing any absolute current_time end grant privileges when cross check write current_date pad begin temporary exec time update catalog user sql date on identity timezone_hour natural whenever interval work order cascade diagnostics nchar having left call do handler load replace truncate start lock show pragma exists number trigger if before after each row merge matched database",aggregate:"count sum min max avg"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM]},a.CBLCLM,{cN:"comment",b:"--",e:"$"}]}});hljs.registerLanguage("ini",function(a){return{cI:true,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage("perl",function(c){var d="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var f={cN:"subst",b:"[$@]\\{",e:"\\}",k:d};var g={b:"->{",e:"}"};var a={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@\*](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@\*][^\s\w{]/,r:0}]};var e={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},g,{cN:"string",c:h,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[c.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[c.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+c.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[c.HCM,e,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[c.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];f.c=b;g.c=b;return{k:d,c:b}});hljs.registerLanguage("objectivec",function(a){var d={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign self synchronized id nonatomic super unichar IBOutlet IBAction strong weak @private @protected @public @try @property @end @throw @catch @finally @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b="@interface @class @protocol @implementation";return{k:d,l:c,i:"</",c:[a.CLCM,a.CBLCLM,a.CNM,a.QSM,{cN:"string",b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"},{cN:"preprocessor",b:"#import",e:"$",c:[{cN:"title",b:'"',e:'"'},{cN:"title",b:"<",e:">"}]},{cN:"preprocessor",b:"#",e:"$"},{cN:"class",b:"("+b.split(" ").join("|")+")\\b",e:"({|$)",k:b,l:c,c:[a.UTM]},{cN:"variable",b:"\\."+a.UIR,r:0}]}});hljs.registerLanguage("coffeescript",function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module exports global window document"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var f=c.inherit(c.TM,{b:a});var e={cN:"subst",b:/#\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/"""/,e:/"""/,c:[c.BE,e]},{b:/"/,e:/"/,c:[c.BE,e]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[e,c.HCM]},{b:"//[gim]*",r:0},{b:"/\\S(\\\\.|[^\\n])*?/[gim]*(?=\\s|\\W|$)"}]},{cN:"property",b:"@"+a},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"}];e.c=d;return{k:b,c:d.concat([{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"function",b:"("+a+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",e:"[-=]>",rB:true,c:[f,{cN:"params",b:"\\(",rB:true,c:[{b:/\(/,e:/\)/,k:b,c:["self"].concat(d)}]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:true,i:/[:="\[\]]/,c:[f]},f]},{cN:"attribute",b:a+":",e:":",rB:true,eE:true,r:0}])}});hljs.registerLanguage("nginx",function(c){var b={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+c.UIR}]};var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[c.HCM,{cN:"string",c:[c.BE,b],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true},{cN:"regexp",c:[c.BE,b],v:[{b:"\\s\\^",e:"\\s|{|;",rE:true},{b:"~\\*?\\s+",e:"\\s|{|;",rE:true},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},b]};return{c:[c.HCM,{b:c.UIR+"\\s",e:";|{",rB:true,c:[c.inherit(c.UTM,{starts:a})],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("json",function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}});hljs.registerLanguage("apache",function(a){var b={cN:"number",b:"[\\$%]\\d+"};return{cI:true,c:[a.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",b]},b,a.QSM]}}],i:/\S/}});hljs.registerLanguage("cpp",function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c"],k:b,i:"</",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},a.CNM,{cN:"preprocessor",b:"#",e:"$",c:[{b:"include\\s*<",e:">",i:"\\n"},a.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,r:10,c:["self"]}]}});hljs.registerLanguage("makefile",function(a){var b={cN:"variable",b:/\$\(/,e:/\)/,c:[a.BE]};return{c:[a.HCM,{b:/^\w+\s*\W*=/,rB:true,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:true,starts:{e:/$/,r:0,c:[b],}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,c:[a.QSM,b]}]}}); diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css deleted file mode 100644 index c2a55bbe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css +++ /dev/null @@ -1,160 +0,0 @@ -/* -Date: 17.V.2011 -Author: pumbur <pumbur@pumbur.net> -*/ - -.hljs -{ - display: block; padding: 0.5em; - background: #222; -} - -.profile .hljs-header *, -.ini .hljs-title, -.nginx .hljs-title -{ - color: #fff; -} - -.hljs-comment, -.hljs-javadoc, -.hljs-preprocessor, -.hljs-preprocessor .hljs-title, -.hljs-pragma, -.hljs-shebang, -.profile .hljs-summary, -.diff, -.hljs-pi, -.hljs-doctype, -.hljs-tag, -.hljs-template_comment, -.css .hljs-rules, -.tex .hljs-special -{ - color: #444; -} - -.hljs-string, -.hljs-symbol, -.diff .hljs-change, -.hljs-regexp, -.xml .hljs-attribute, -.smalltalk .hljs-char, -.xml .hljs-value, -.ini .hljs-value, -.clojure .hljs-attribute, -.coffeescript .hljs-attribute -{ - color: #ffcc33; -} - -.hljs-number, -.hljs-addition -{ - color: #00cc66; -} - -.hljs-built_in, -.hljs-literal, -.vhdl .hljs-typename, -.go .hljs-constant, -.go .hljs-typename, -.ini .hljs-keyword, -.lua .hljs-title, -.perl .hljs-variable, -.php .hljs-variable, -.mel .hljs-variable, -.django .hljs-variable, -.css .funtion, -.smalltalk .method, -.hljs-hexcolor, -.hljs-important, -.hljs-flow, -.hljs-inheritance, -.parser3 .hljs-variable -{ - color: #32AAEE; -} - -.hljs-keyword, -.hljs-tag .hljs-title, -.css .hljs-tag, -.css .hljs-class, -.css .hljs-id, -.css .hljs-pseudo, -.css .hljs-attr_selector, -.lisp .hljs-title, -.clojure .hljs-built_in, -.hljs-winutils, -.tex .hljs-command, -.hljs-request, -.hljs-status -{ - color: #6644aa; -} - -.hljs-title, -.ruby .hljs-constant, -.vala .hljs-constant, -.hljs-parent, -.hljs-deletion, -.hljs-template_tag, -.css .hljs-keyword, -.objectivec .hljs-class .hljs-id, -.smalltalk .hljs-class, -.lisp .hljs-keyword, -.apache .hljs-tag, -.nginx .hljs-variable, -.hljs-envvar, -.bash .hljs-variable, -.go .hljs-built_in, -.vbscript .hljs-built_in, -.lua .hljs-built_in, -.rsl .hljs-built_in, -.tail, -.avrasm .hljs-label, -.tex .hljs-formula, -.tex .hljs-formula * -{ - color: #bb1166; -} - -.hljs-yardoctag, -.hljs-phpdoc, -.profile .hljs-header, -.ini .hljs-title, -.apache .hljs-tag, -.parser3 .hljs-title -{ - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata -{ - opacity: 0.6; -} - -.hljs, -.javascript, -.css, -.xml, -.hljs-subst, -.diff .hljs-chunk, -.css .hljs-value, -.css .hljs-attribute, -.lisp .hljs-string, -.lisp .hljs-number, -.tail .hljs-params, -.hljs-container, -.haskell *, -.erlang *, -.erlang_repl * -{ - color: #aaa; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css deleted file mode 100644 index 89c5fe2f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css +++ /dev/null @@ -1,50 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-filter .hljs-argument, -.hljs-addition, -.hljs-change, -.apache .hljs-tag, -.apache .hljs-cbracket, -.nginx .hljs-built_in, -.tex .hljs-formula { - color: #888; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-shebang, -.hljs-doctype, -.hljs-pi, -.hljs-javadoc, -.hljs-deletion, -.apache .hljs-sqbracket { - color: #CCC; -} - -.hljs-keyword, -.hljs-tag .hljs-title, -.ini .hljs-title, -.lisp .hljs-title, -.clojure .hljs-title, -.http .hljs-title, -.nginx .hljs-title, -.css .hljs-tag, -.hljs-winutils, -.hljs-flow, -.apache .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css deleted file mode 100644 index 4cfc77ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Dune Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Dune Dark Comment */ -.hljs-comment, -.hljs-title { - color: #999580; -} - -/* Atelier Dune Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d73737; -} - -/* Atelier Dune Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #b65611; -} - -/* Atelier Dune Dark Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #cfb017; -} - -/* Atelier Dune Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #60ac39; -} - -/* Atelier Dune Dark Aqua */ -.css .hljs-hexcolor { - color: #1fad83; -} - -/* Atelier Dune Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6684e1; -} - -/* Atelier Dune Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b854d4; -} - -.hljs { - display: block; - background: #292824; - color: #a6a28c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css deleted file mode 100644 index 3501bf82..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Dune Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Dune Light Comment */ -.hljs-comment, -.hljs-title { - color: #7d7a68; -} - -/* Atelier Dune Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d73737; -} - -/* Atelier Dune Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #b65611; -} - -/* Atelier Dune Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #cfb017; -} - -/* Atelier Dune Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #60ac39; -} - -/* Atelier Dune Light Aqua */ -.css .hljs-hexcolor { - color: #1fad83; -} - -/* Atelier Dune Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6684e1; -} - -/* Atelier Dune Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b854d4; -} - -.hljs { - display: block; - background: #fefbec; - color: #6e6b5e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css deleted file mode 100644 index 9c26b7be..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Forest Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Forest Dark Comment */ -.hljs-comment, -.hljs-title { - color: #9c9491; -} - -/* Atelier Forest Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f22c40; -} - -/* Atelier Forest Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #df5320; -} - -/* Atelier Forest Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #d5911a; -} - -/* Atelier Forest Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #5ab738; -} - -/* Atelier Forest Dark Aqua */ -.css .hljs-hexcolor { - color: #00ad9c; -} - -/* Atelier Forest Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #407ee7; -} - -/* Atelier Forest Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #6666ea; -} - -.hljs { - display: block; - background: #2c2421; - color: #a8a19f; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css deleted file mode 100644 index 3de3dadb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Forest Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Forest Light Comment */ -.hljs-comment, -.hljs-title { - color: #766e6b; -} - -/* Atelier Forest Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f22c40; -} - -/* Atelier Forest Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #df5320; -} - -/* Atelier Forest Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #d5911a; -} - -/* Atelier Forest Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #5ab738; -} - -/* Atelier Forest Light Aqua */ -.css .hljs-hexcolor { - color: #00ad9c; -} - -/* Atelier Forest Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #407ee7; -} - -/* Atelier Forest Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #6666ea; -} - -.hljs { - display: block; - background: #f1efee; - color: #68615e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css deleted file mode 100644 index df1446c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Heath Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Heath Dark Comment */ -.hljs-comment, -.hljs-title { - color: #9e8f9e; -} - -/* Atelier Heath Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ca402b; -} - -/* Atelier Heath Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #a65926; -} - -/* Atelier Heath Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #bb8a35; -} - -/* Atelier Heath Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #379a37; -} - -/* Atelier Heath Dark Aqua */ -.css .hljs-hexcolor { - color: #159393; -} - -/* Atelier Heath Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #516aec; -} - -/* Atelier Heath Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #7b59c0; -} - -.hljs { - display: block; - background: #292329; - color: #ab9bab; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css deleted file mode 100644 index a737a082..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Heath Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Heath Light Comment */ -.hljs-comment, -.hljs-title { - color: #776977; -} - -/* Atelier Heath Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ca402b; -} - -/* Atelier Heath Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #a65926; -} - -/* Atelier Heath Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #bb8a35; -} - -/* Atelier Heath Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #379a37; -} - -/* Atelier Heath Light Aqua */ -.css .hljs-hexcolor { - color: #159393; -} - -/* Atelier Heath Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #516aec; -} - -/* Atelier Heath Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #7b59c0; -} - -.hljs { - display: block; - background: #f7f3f7; - color: #695d69; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css deleted file mode 100644 index 43c5b4ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Lakeside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Lakeside Dark Comment */ -.hljs-comment, -.hljs-title { - color: #7195a8; -} - -/* Atelier Lakeside Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d22d72; -} - -/* Atelier Lakeside Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #935c25; -} - -/* Atelier Lakeside Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #8a8a0f; -} - -/* Atelier Lakeside Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #568c3b; -} - -/* Atelier Lakeside Dark Aqua */ -.css .hljs-hexcolor { - color: #2d8f6f; -} - -/* Atelier Lakeside Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #257fad; -} - -/* Atelier Lakeside Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #5d5db1; -} - -.hljs { - display: block; - background: #1f292e; - color: #7ea2b4; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css deleted file mode 100644 index 5a782694..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Lakeside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Lakeside Light Comment */ -.hljs-comment, -.hljs-title { - color: #5a7b8c; -} - -/* Atelier Lakeside Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d22d72; -} - -/* Atelier Lakeside Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #935c25; -} - -/* Atelier Lakeside Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #8a8a0f; -} - -/* Atelier Lakeside Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #568c3b; -} - -/* Atelier Lakeside Light Aqua */ -.css .hljs-hexcolor { - color: #2d8f6f; -} - -/* Atelier Lakeside Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #257fad; -} - -/* Atelier Lakeside Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #5d5db1; -} - -.hljs { - display: block; - background: #ebf8ff; - color: #516d7b; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css deleted file mode 100644 index 3bea9b36..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Seaside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Seaside Dark Comment */ -.hljs-comment, -.hljs-title { - color: #809980; -} - -/* Atelier Seaside Dark Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #e6193c; -} - -/* Atelier Seaside Dark Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #87711d; -} - -/* Atelier Seaside Dark Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #c3c322; -} - -/* Atelier Seaside Dark Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #29a329; -} - -/* Atelier Seaside Dark Aqua */ -.css .hljs-hexcolor { - color: #1999b3; -} - -/* Atelier Seaside Dark Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #3d62f5; -} - -/* Atelier Seaside Dark Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ad2bee; -} - -.hljs { - display: block; - background: #242924; - color: #8ca68c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css deleted file mode 100644 index e86c44d6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Base16 Atelier Seaside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ -/* https://github.com/jmblog/color-themes-for-highlightjs */ - -/* Atelier Seaside Light Comment */ -.hljs-comment, -.hljs-title { - color: #687d68; -} - -/* Atelier Seaside Light Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #e6193c; -} - -/* Atelier Seaside Light Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #87711d; -} - -/* Atelier Seaside Light Yellow */ -.hljs-ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #c3c322; -} - -/* Atelier Seaside Light Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #29a329; -} - -/* Atelier Seaside Light Aqua */ -.css .hljs-hexcolor { - color: #1999b3; -} - -/* Atelier Seaside Light Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #3d62f5; -} - -/* Atelier Seaside Light Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ad2bee; -} - -.hljs { - display: block; - background: #f0fff0; - color: #5e6e5e; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css deleted file mode 100644 index 0838fb8f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - -Brown Paper style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - background:#b7a68e url(./brown_papersq.png); -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special, -.hljs-request, -.hljs-status { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-keyword { - color: #363C69; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-number { - color: #2C009F; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula { - color: #802022; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-command { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.8; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png deleted file mode 100644 index 3813903dbf9fa7b1fb5bd11d9534c06667d9056f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18198 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css deleted file mode 100644 index b9426c37..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - -Dark style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #444; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color: white; -} - -.hljs, -.hljs-subst { - color: #DDD; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.ini .hljs-title, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt, -.coffeescript .hljs-attribute { - color: #D88; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #777; -} - -.hljs-keyword, -.hljs-literal, -.hljs-title, -.css .hljs-id, -.hljs-phpdoc, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css deleted file mode 100644 index ae9af353..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css +++ /dev/null @@ -1,153 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #F0F0F0; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-title, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-constant, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.haml .hljs-symbol, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.bash .hljs-variable, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.tex .hljs-special, -.erlang_repl .hljs-function_or_atom, -.asciidoc .hljs-header, -.markdown .hljs-header, -.coffeescript .hljs-attribute { - color: #800; -} - -.smartquote, -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk, -.asciidoc .hljs-blockquote, -.markdown .hljs-blockquote { - color: #888; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.hljs-hexcolor, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.go .hljs-constant, -.hljs-change, -.lasso .hljs-variable, -.makefile .hljs-variable, -.asciidoc .hljs-bullet, -.markdown .hljs-bullet, -.asciidoc .hljs-link_url, -.markdown .hljs-link_url { - color: #080; -} - -.hljs-label, -.hljs-javadoc, -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-important, -.hljs-pseudo, -.hljs-pi, -.haml .hljs-bullet, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula, -.erlang_repl .hljs-reserved, -.hljs-prompt, -.asciidoc .hljs-link_label, -.markdown .hljs-link_label, -.vhdl .hljs-attribute, -.clojure .hljs-attribute, -.asciidoc .hljs-attribute, -.lasso .hljs-attribute, -.coffeescript .hljs-property, -.hljs-phony { - color: #88F -} - -.hljs-keyword, -.hljs-id, -.hljs-title, -.hljs-built_in, -.hljs-aggregate, -.css .hljs-tag, -.hljs-javadoctag, -.hljs-phpdoc, -.hljs-yardoctag, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.go .hljs-typename, -.tex .hljs-command, -.asciidoc .hljs-strong, -.markdown .hljs-strong, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.asciidoc .hljs-emphasis, -.markdown .hljs-emphasis { - font-style: italic; -} - -.nginx .hljs-built_in { - font-weight: normal; -} - -.coffeescript .javascript, -.javascript .xml, -.lasso .markup, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css deleted file mode 100644 index 5026d6cf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css +++ /dev/null @@ -1,132 +0,0 @@ -/* -Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) -*/ - -.hljs { - display: block; padding: 0.5em; - color: #000; - background: #f8f8ff -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #408080; - font-style: italic -} - -.hljs-keyword, -.assignment, -.hljs-literal, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - color: #954121; -} - -.hljs-number, -.hljs-hexcolor { - color: #40a070 -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula { - color: #219161; -} - -.hljs-title, -.hljs-id { - color: #19469D; -} -.hljs-params { - color: #00F; -} - -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - font-weight: normal -} - -.hljs-class .hljs-title, -.haskell .hljs-label, -.tex .hljs-command { - color: #458; - font-weight: bold -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal -} - -.hljs-attribute, -.hljs-variable, -.instancevar, -.lisp .hljs-body { - color: #008080 -} - -.hljs-regexp { - color: #B68 -} - -.hljs-class { - color: #458; - font-weight: bold -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-symbol .hljs-keyword, -.ruby .hljs-symbol .keymethods, -.lisp .hljs-keyword, -.tex .hljs-special, -.input_number { - color: #990073 -} - -.builtin, -.constructor, -.hljs-built_in, -.lisp .hljs-title { - color: #0086b3 -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold -} - -.hljs-deletion { - background: #fdd -} - -.hljs-addition { - background: #dfd -} - -.diff .hljs-change { - background: #0086b3 -} - -.hljs-chunk { - color: #aaa -} - -.tex .hljs-formula { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css deleted file mode 100644 index be505362..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css +++ /dev/null @@ -1,113 +0,0 @@ -/* - -FAR Style (c) MajestiC <majestic2k@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000080; -} - -.hljs, -.hljs-subst { - color: #0FF; -} - -.hljs-string, -.ruby .hljs-string, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.css .hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.clojure .hljs-title, -.coffeescript .hljs-attribute { - color: #FF0; -} - -.hljs-keyword, -.css .hljs-id, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.xml .hljs-tag .hljs-title, -.hljs-winutils, -.hljs-flow, -.hljs-change, -.hljs-envvar, -.bash .hljs-variable, -.tex .hljs-special, -.clojure .hljs-built_in { - color: #FFF; -} - -.hljs-comment, -.hljs-phpdoc, -.hljs-javadoc, -.java .hljs-annotation, -.hljs-template_comment, -.hljs-deletion, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #888; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.clojure .hljs-attribute { - color: #0F0; -} - -.python .hljs-decorator, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.xml .hljs-pi, -.diff .hljs-header, -.hljs-chunk, -.hljs-shebang, -.nginx .hljs-built_in, -.hljs-prompt { - color: #008080; -} - -.hljs-keyword, -.css .hljs-id, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.hljs-winutils, -.hljs-flow, -.apache .hljs-tag, -.nginx .hljs-built_in, -.tex .hljs-command, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css deleted file mode 100644 index 0710a10f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css +++ /dev/null @@ -1,133 +0,0 @@ -/* -Description: Foundation 4 docs style for highlight.js -Author: Dan Allen <dan.j.allen@gmail.com> -Website: http://foundation.zurb.com/docs/ -Version: 1.0 -Date: 2013-04-02 -*/ - -.hljs { - display: block; padding: 0.5em; - background: #eee; -} - -.hljs-header, -.hljs-decorator, -.hljs-annotation { - color: #000077; -} - -.hljs-horizontal_rule, -.hljs-link_url, -.hljs-emphasis, -.hljs-attribute { - color: #070; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-link_label, -.hljs-strong, -.hljs-value, -.hljs-string, -.scss .hljs-value .hljs-string { - color: #d14; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-blockquote, -.hljs-comment { - color: #998; - font-style: italic; -} - -.asciidoc .hljs-title, -.hljs-function .hljs-title { - color: #900; -} - -.hljs-class { - color: #458; -} - -.hljs-id, -.hljs-pseudo, -.hljs-constant, -.hljs-hexcolor { - color: teal; -} - -.hljs-variable { - color: #336699; -} - -.hljs-bullet, -.hljs-javadoc { - color: #997700; -} - -.hljs-pi, -.hljs-doctype { - color: #3344bb; -} - -.hljs-code, -.hljs-number { - color: #099; -} - -.hljs-important { - color: #f00; -} - -.smartquote, -.hljs-label { - color: #970; -} - -.hljs-preprocessor, -.hljs-pragma { - color: #579; -} - -.hljs-reserved, -.hljs-keyword, -.scss .hljs-value { - color: #000; -} - -.hljs-regexp { - background-color: #fff0ff; - color: #880088; -} - -.hljs-symbol { - color: #990073; -} - -.hljs-symbol .hljs-string { - color: #a60; -} - -.hljs-tag { - color: #007700; -} - -.hljs-at_rule, -.hljs-at_rule .hljs-keyword { - color: #088; -} - -.hljs-at_rule .hljs-preprocessor { - color: #808; -} - -.scss .hljs-tag, -.scss .hljs-attribute { - color: #339; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css deleted file mode 100644 index 5517086b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css +++ /dev/null @@ -1,125 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #333; - background: #f8f8f8 -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #099; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula { - color: #d14 -} - -.hljs-title, -.hljs-id, -.coffeescript .hljs-params, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold -} - -.javascript .hljs-title, -.lisp .hljs-title, -.clojure .hljs-title, -.hljs-subst { - font-weight: normal -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080 -} - -.hljs-regexp { - color: #009926 -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073 -} - -.hljs-built_in, -.lisp .hljs-title, -.clojure .hljs-built_in { - color: #0086b3 -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold -} - -.hljs-deletion { - background: #fdd -} - -.hljs-addition { - background: #dfd -} - -.diff .hljs-change { - background: #0086b3 -} - -.hljs-chunk { - color: #aaa -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css deleted file mode 100644 index 5cc49b68..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css +++ /dev/null @@ -1,147 +0,0 @@ -/* - -Google Code style (c) Aahan Krish <geekpanth3r@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-comment * { - color: #800; -} - -.hljs-keyword, -.method, -.hljs-list .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.hljs-tag .hljs-title, -.setting .hljs-value, -.hljs-winutils, -.tex .hljs-command, -.http .hljs-title, -.hljs-request, -.hljs-status { - color: #008; -} - -.hljs-envvar, -.tex .hljs-special { - color: #660; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.hljs-regexp, -.coffeescript .hljs-attribute { - color: #080; -} - -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.ini .hljs-title, -.hljs-shebang, -.hljs-prompt, -.hljs-hexcolor, -.hljs-rules .hljs-value, -.css .hljs-value .hljs-number, -.hljs-literal, -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number, -.css .hljs-function, -.clojure .hljs-attribute { - color: #066; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.hljs-typename, -.hljs-tag .hljs-attribute, -.hljs-doctype, -.hljs-class .hljs-id, -.hljs-built_in, -.setting, -.hljs-params, -.hljs-variable, -.clojure .hljs-title { - color: #606; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.hljs-subst { - color: #000; -} - -.css .hljs-class, -.css .hljs-id { - color: #9B703F; -} - -.hljs-value .hljs-important { - color: #ff7700; - font-weight: bold; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #444; -} - -.tex .hljs-formula { - background-color: #EEE; - font-style: italic; -} - -.diff .hljs-header, -.hljs-chunk { - color: #808080; - font-weight: bold; -} - -.diff .hljs-change { - background-color: #BCCFF9; -} - -.hljs-addition { - background-color: #BAEEBA; -} - -.hljs-deletion { - background-color: #FFC8BD; -} - -.hljs-comment .hljs-yardoctag { - font-weight: bold; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css deleted file mode 100644 index 3e810c5f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css +++ /dev/null @@ -1,122 +0,0 @@ -/* - -Intellij Idea-like styling (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #000; - background: #fff; -} - -.hljs-subst, -.hljs-title { - font-weight: normal; - color: #000; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.diff .hljs-header { - color: #808080; - font-style: italic; -} - -.hljs-annotation, -.hljs-decorator, -.hljs-preprocessor, -.hljs-pragma, -.hljs-doctype, -.hljs-pi, -.hljs-chunk, -.hljs-shebang, -.apache .hljs-cbracket, -.hljs-prompt, -.http .hljs-title { - color: #808000; -} - -.hljs-tag, -.hljs-pi { - background: #efefef; -} - -.hljs-tag .hljs-title, -.hljs-id, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-literal, -.hljs-keyword, -.hljs-hexcolor, -.css .hljs-function, -.ini .hljs-title, -.css .hljs-class, -.hljs-list .hljs-title, -.clojure .hljs-title, -.nginx .hljs-title, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; - color: #000080; -} - -.hljs-attribute, -.hljs-rules .hljs-keyword, -.hljs-number, -.hljs-date, -.hljs-regexp, -.tex .hljs-special { - font-weight: bold; - color: #0000ff; -} - -.hljs-number, -.hljs-regexp { - font-weight: normal; -} - -.hljs-string, -.hljs-value, -.hljs-filter .hljs-argument, -.css .hljs-function .hljs-params, -.apache .hljs-tag { - color: #008000; - font-weight: bold; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-char, -.tex .hljs-formula { - color: #000; - background: #d0eded; - font-style: italic; -} - -.hljs-phpdoc, -.hljs-yardoctag, -.hljs-javadoctag { - text-decoration: underline; -} - -.hljs-variable, -.hljs-envvar, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #660e7a; -} - -.hljs-addition { - background: #baeeba; -} - -.hljs-deletion { - background: #ffc8bd; -} - -.diff .hljs-change { - background: #bccff9; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css deleted file mode 100644 index 66f7c193..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css +++ /dev/null @@ -1,105 +0,0 @@ -/* - IR_Black style (c) Vasily Mikhailitchenko <vaskas@programica.ru> -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000; color: #f8f8f8; -} - -.hljs-shebang, -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc { - color: #7c7c7c; -} - -.hljs-keyword, -.hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status, -.clojure .hljs-attribute { - color: #96CBFE; -} - -.hljs-sub .hljs-keyword, -.method, -.hljs-list .hljs-title, -.nginx .hljs-title { - color: #FFFFB6; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.coffeescript .hljs-attribute { - color: #A8FF60; -} - -.hljs-subst { - color: #DAEFA3; -} - -.hljs-regexp { - color: #E9C062; -} - -.hljs-title, -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-decorator, -.tex .hljs-special, -.haskell .hljs-type, -.hljs-constant, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.nginx .hljs-built_in { - color: #FFFFB6; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number, -.hljs-variable, -.vbscript, -.hljs-literal { - color: #C6C5FE; -} - -.css .hljs-tag { - color: #96CBFE; -} - -.css .hljs-rules .hljs-property, -.css .hljs-id { - color: #FFFFB6; -} - -.css .hljs-class { - color: #FFF; -} - -.hljs-hexcolor { - color: #C6C5FE; -} - -.hljs-number { - color:#FF73FD; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.7; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css deleted file mode 100644 index bc69a377..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css +++ /dev/null @@ -1,122 +0,0 @@ -/* -Description: Magula style for highligh.js -Author: Ruslan Keba <rukeba@gmail.com> -Website: http://rukeba.com/ -Version: 1.0 -Date: 2009-01-03 -Music: Aphex Twin / Xtal -*/ - -.hljs { - display: block; padding: 0.5em; - background-color: #f4f4f4; -} - -.hljs, -.hljs-subst, -.lisp .hljs-title, -.clojure .hljs-built_in { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.bash .hljs-variable, -.apache .hljs-cbracket, -.coffeescript .hljs-attribute { - color: #050; -} - -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk { - color: #777; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.hljs-change, -.tex .hljs-special { - color: #800; -} - -.hljs-label, -.hljs-javadoc, -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula, -.hljs-prompt, -.clojure .hljs-attribute { - color: #00e; -} - -.hljs-keyword, -.hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-built_in, -.hljs-aggregate, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.xml .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; - color: navy; -} - -.nginx .hljs-built_in { - font-weight: normal; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} - -/* --- */ -.apache .hljs-tag { - font-weight: bold; - color: blue; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css deleted file mode 100644 index bfe2495b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css +++ /dev/null @@ -1,62 +0,0 @@ -/* - Five-color theme from a single blue hue. -*/ -.hljs { - display: block; padding: 0.5em; - background: #EAEEF3; color: #00193A; -} - -.hljs-keyword, -.hljs-title, -.hljs-important, -.hljs-request, -.hljs-header, -.hljs-javadoctag { - font-weight: bold; -} - -.hljs-comment, -.hljs-chunk, -.hljs-template_comment { - color: #738191; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-built_in, -.hljs-literal, -.hljs-filename, -.hljs-value, -.hljs-addition, -.hljs-tag, -.hljs-argument, -.hljs-link_label, -.hljs-blockquote, -.hljs-header { - color: #0048AB; -} - -.hljs-decorator, -.hljs-prompt, -.hljs-yardoctag, -.hljs-subst, -.hljs-symbol, -.hljs-doctype, -.hljs-regexp, -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-attribute, -.hljs-attr_selector, -.hljs-javadoc, -.hljs-xmlDocTag, -.hljs-deletion, -.hljs-shebang, -.hljs-string .hljs-variable, -.hljs-link_url, -.hljs-bullet, -.hljs-sqbracket, -.hljs-phony { - color: #4C81C9; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css deleted file mode 100644 index 34cd4f9e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css +++ /dev/null @@ -1,127 +0,0 @@ -/* -Monokai style - ported by Luigi Maselli - http://grigio.org -*/ - -.hljs { - display: block; padding: 0.5em; - background: #272822; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-keyword, -.hljs-literal, -.hljs-strong, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color: #F92672; -} - -.hljs { - color: #DDD; -} - -.hljs .hljs-constant, -.asciidoc .hljs-code { - color: #66D9EF; -} - -.hljs-code, -.hljs-class .hljs-title, -.hljs-header { - color: white; -} - -.hljs-link_label, -.hljs-attribute, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-value, -.hljs-regexp { - color: #BF79DB; -} - -.hljs-link_url, -.hljs-tag .hljs-value, -.hljs-string, -.hljs-bullet, -.hljs-subst, -.hljs-title, -.hljs-emphasis, -.haskell .hljs-type, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt { - color: #A6E22E; -} - -.hljs-comment, -.java .hljs-annotation, -.smartquote, -.hljs-blockquote, -.hljs-horizontal_rule, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #75715E; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-header, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css deleted file mode 100644 index 2d216333..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css +++ /dev/null @@ -1,149 +0,0 @@ -/* - -Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #23241f; -} - -.hljs, -.hljs-tag, -.css .hljs-rules, -.css .hljs-value, -.css .hljs-function -.hljs-preprocessor, -.hljs-pragma { - color: #f8f8f2; -} - -.hljs-strongemphasis, -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-blockquote, -.hljs-horizontal_rule, -.hljs-number, -.hljs-regexp, -.alias .hljs-keyword, -.hljs-literal, -.hljs-hexcolor { - color: #ae81ff; -} - -.hljs-tag .hljs-value, -.hljs-code, -.hljs-title, -.css .hljs-class, -.hljs-class .hljs-title:last-child { - color: #a6e22e; -} - -.hljs-link_url { - font-size: 80%; -} - -.hljs-strong, -.hljs-strongemphasis { - font-weight: bold; -} - -.hljs-emphasis, -.hljs-strongemphasis, -.hljs-class .hljs-title:last-child { - font-style: italic; -} - -.hljs-keyword, -.hljs-function, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special, -.hljs-header, -.hljs-attribute, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-tag .hljs-title, -.hljs-value, -.alias .hljs-keyword:first-child, -.css .hljs-tag, -.css .unit, -.css .hljs-important { - color: #F92672; -} - -.hljs-function .hljs-keyword, -.hljs-class .hljs-keyword:first-child, -.hljs-constant, -.css .hljs-attribute { - color: #66d9ef; -} - -.hljs-variable, -.hljs-params, -.hljs-class .hljs-title { - color: #f8f8f2; -} - -.hljs-string, -.css .hljs-id, -.hljs-subst, -.haskell .hljs-type, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt, -.hljs-link_label, -.hljs-link_url { - color: #e6db74; -} - -.hljs-comment, -.hljs-javadoc, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #75715e; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata, -.xml .php, -.php .xml { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css deleted file mode 100644 index 68259fc8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Obsidian style - * ported by Alexander Marenin (http://github.com/ioncreature) - */ - -.hljs { - display: block; padding: 0.5em; - background: #282B2E; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.css .hljs-id, -.tex .hljs-special { - color: #93C763; -} - -.hljs-number { - color: #FFCD22; -} - -.hljs { - color: #E0E2E4; -} - -.css .hljs-tag, -.css .hljs-pseudo { - color: #D0D2B5; -} - -.hljs-attribute, -.hljs .hljs-constant { - color: #668BB0; -} - -.xml .hljs-attribute { - color: #B3B689; -} - -.xml .hljs-tag .hljs-value { - color: #E8E2B7; -} - -.hljs-code, -.hljs-class .hljs-title, -.hljs-header { - color: white; -} - -.hljs-class, -.hljs-hexcolor { - color: #93C763; -} - -.hljs-regexp { - color: #D39745; -} - -.hljs-at_rule, -.hljs-at_rule .hljs-keyword { - color: #A082BD; -} - -.hljs-doctype { - color: #557182; -} - -.hljs-link_url, -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-bullet, -.hljs-subst, -.hljs-emphasis, -.haskell .hljs-type, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt { - color: #8CBBAD; -} - -.hljs-string { - color: #EC7600; -} - -.hljs-comment, -.java .hljs-annotation, -.hljs-blockquote, -.hljs-horizontal_rule, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #818E96; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.hljs-header, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-special, -.hljs-request, -.hljs-at_rule .hljs-keyword, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css deleted file mode 100644 index 55d02f1d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css +++ /dev/null @@ -1,93 +0,0 @@ -/* - Paraíso (dark) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-title { - color: #8d8687; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99b15; -} - -/* Paraíso Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #48b685; -} - -/* Paraíso Aqua */ -.css .hljs-hexcolor { - color: #5bc4bf; -} - -/* Paraíso Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #06b6ef; -} - -/* Paraíso Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #815ba4; -} - -.hljs { - display: block; - background: #2f1e2e; - color: #a39e9b; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css deleted file mode 100644 index d29ee1b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css +++ /dev/null @@ -1,93 +0,0 @@ -/* - Paraíso (light) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-title { - color: #776e71; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99b15; -} - -/* Paraíso Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #48b685; -} - -/* Paraíso Aqua */ -.css .hljs-hexcolor { - color: #5bc4bf; -} - -/* Paraíso Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #06b6ef; -} - -/* Paraíso Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #815ba4; -} - -.hljs { - display: block; - background: #e7e9db; - color: #4f424c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css deleted file mode 100644 index 86307929..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css +++ /dev/null @@ -1,106 +0,0 @@ -/* - -Pojoaque Style by Jason Tate -http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html -Based on Solarized Style from http://ethanschoonover.com/solarized - -*/ - -.hljs { - display: block; padding: 0.5em; - color: #DCCF8F; - background: url(./pojoaque.jpg) repeat scroll left top #181914; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.lisp .hljs-string, -.hljs-javadoc { - color: #586e75; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.method, -.hljs-addition, -.css .hljs-tag, -.clojure .hljs-title, -.nginx .hljs-title { - color: #B64926; -} - -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor { - color: #468966; -} - -.hljs-title, -.hljs-localvars, -.hljs-function .hljs-title, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.lisp .hljs-title, -.clojure .hljs-built_in, -.hljs-identifier, -.hljs-id { - color: #FFB03B; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type { - color: #b58900; -} - -.css .hljs-attribute { - color: #b89859; -} - -.css .hljs-number, -.css .hljs-hexcolor { - color: #DCCF8F; -} - -.css .hljs-class { - color: #d3a60c; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-important, -.hljs-subst, -.hljs-cdata { - color: #cb4b16; -} - -.hljs-deletion { - color: #dc322f; -} - -.tex .hljs-formula { - background: #073642; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg deleted file mode 100644 index 9c07d4ab40b6d77e90ff69f0012bcd33b21d31c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 zcmZXSe^8Tk9LK-kXFs3)f@f?)Cddzw3v4wdZyXQ;4x3=;Ja*N#%n9ik!UGmt9H3k0 zJST|5jOc(ID$FQt3C?jQZBws#kXolO1lg9Pba9BB=Q+UEBX!nY@6Uhl&+ofe$Q$y5 z@ci`~)&qzDP(lO<O#w_=Ra{yPARq$(#Dp~sI5{Qw_V+=FlW<^Y6zm5ml}e>iQ5p?p z(`j^e7!yUAVHk%K#^GQXn?s0=VLYCI$HRoe=xCuZ>A6<E5Jc&8l!3As3|1J6!wQRd z-V(uI9KaVwV1y!skwSq$AdHNO5ej2s5)+pvCcfxj8FB)Q4jMoM2_^spgCq=wu7Iro zLP#9>A3@sxEP#XqNFpIb=0)KQ#Nss_tD17;m4@$JKL;LR|K|QF3f%!L5+s(9Ft8SQ zG|~pGp<w4_&QCo@xn1P1M0j6PuuaUUx?w)Q15Ksdv-E1Uyr8jff%m|S;O0KGX4?5u zcY>EGFW5Z|OA)-O@mNHy-g@7m8JTf?kl@vUKBGmw)Y*9sDRNr3PN!IKefWaydTe1D zjzpyzPnD3}hBNaS4aFX7=0&~I*<I1gl);;MHu4&K1%I;}H}}pdeV}msD&8ZuzDzH< zjs%}^eZx9tj&Cj4Rem!m7?W9-;wPH|CTw__Q8b>Hu7#4au@qVBglH#-m;QFOx_`=j z{EqRY#Eh*yoWP^pa4H>8GH{rO?!_+xwL0(k4yL^D%^nBkJ*UI;Lx;ped8d|f*S_s@ z3~ilcRC(&NT#9Gn#UD;o^EYSMXDMf%XcUi3>;WXXD-QX3P9wMy<Tt*(wEUr;=}T08 zwr4iQLXQt-4U$zHxQBaftQf(Yp<ET%udI>P7eA&RS{)h5{??W3^Rq=goFJ>?lA~J- zdYe>!xvYLW*fPT0RK7wsJRg^?x#W1*GP9<C`ZfC?$$I3ZovN#F=y~=x<iwqpGc&Fa z!>_f`6t>QD_X>0d!owyN>nO2?U5}|3?hX_UZYT@^>S!9eB~bZ9U`q;`U)@L670o1g z`Hd<uZEy9yjY6-c(?%?S4=3`QI_=xfg529VWEEJk$>}h<_WR<Zc1@js5HPhhe{UnV z+qpwizwrJv_3wqH(KR=Zp2|HqVCv6SNX`wV`OPQRXJj)}%e$t=$MRdar)ZmEr9R!$ z<l(H`+bxXKz73<WvNG=#;y(f(W{xUg<V#f`{pr)>vUc|n*%v4Hbb-4tJD40iyF^<n zrd(ZUzA$o-V2Gj0TB0p$%WvWRao2gif1>q%g*&!6>hkYDvi-<Lx9G?TP4>{Uc4yTM zzcthN4Z{ka!+F_KzYV#yWi;c^X^q6g`pD8cp?$Kl?hCz0s^a|mH%P!CF%*<6k^~i` zT5Mi-t5-frUcHkk^Qh}+N)Kz1&Bi95`oNc|quI>tUi~BY>xcF9(%tv2i{G6kE9*q~ qCoAGl20`)w0rdgp9H%Q=M5|p`hOhFz6$I%Y&ncY8>c?7PXyh+SL&XXJ diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css deleted file mode 100644 index 83d0cde5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css +++ /dev/null @@ -1,182 +0,0 @@ -/* - -Railscasts-like style (c) Visoft, Inc. (Damien White) - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #232323; - color: #E6E1DC; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-shebang { - color: #BC9458; - font-style: italic; -} - -.hljs-keyword, -.ruby .hljs-function .hljs-keyword, -.hljs-request, -.hljs-status, -.nginx .hljs-title, -.method, -.hljs-list .hljs-title { - color: #C26230; -} - -.hljs-string, -.hljs-number, -.hljs-regexp, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.tex .hljs-command, -.markdown .hljs-link_label { - color: #A5C261; -} - -.hljs-subst { - color: #519F50; -} - -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-tag .hljs-title, -.hljs-doctype, -.hljs-sub .hljs-identifier, -.hljs-pi, -.input_number { - color: #E8BF6A; -} - -.hljs-identifier { - color: #D0D0FF; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc { - text-decoration: none; -} - -.hljs-constant { - color: #DA4939; -} - - -.hljs-symbol, -.hljs-built_in, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-symbol .hljs-identifier, -.markdown .hljs-link_url, -.hljs-attribute { - color: #6D9CBE; -} - -.markdown .hljs-link_url { - text-decoration: underline; -} - - - -.hljs-params, -.hljs-variable, -.clojure .hljs-attribute { - color: #D0D0FF; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.tex .hljs-special { - color: #CDA869; -} - -.css .hljs-class { - color: #9B703F; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-rules .hljs-value { - color: #CF6A4C; -} - -.css .hljs-id { - color: #8B98AB; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #8996A8 !important; -} - -.hljs-hexcolor, -.css .hljs-value .hljs-number { - color: #A5C261; -} - -.hljs-title, -.hljs-decorator, -.css .hljs-function { - color: #FFC66D; -} - -.diff .hljs-header, -.hljs-chunk { - background-color: #2F33AB; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.diff .hljs-change { - background-color: #4A410D; - color: #F8F8F8; - display: inline-block; - width: 100%; -} - -.hljs-addition { - background-color: #144212; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #600; - color: #E6E1DC; - display: inline-block; - width: 100%; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.7; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css deleted file mode 100644 index 08142466..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - -Style with support for rainbow parens - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #474949; color: #D1D9E1; -} - - -.hljs-body, -.hljs-collection { - color: #D1D9E1; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.lisp .hljs-string, -.hljs-javadoc { - color: #969896; - font-style: italic; -} - -.hljs-keyword, -.clojure .hljs-attribute, -.hljs-winutils, -.javascript .hljs-title, -.hljs-addition, -.css .hljs-tag { - color: #cc99cc; -} - -.hljs-number { color: #f99157; } - -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor { - color: #8abeb7; -} - -.hljs-title, -.hljs-localvars, -.hljs-function .hljs-title, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.lisp .hljs-title, -.hljs-identifier -{ - color: #b5bd68; -} - -.hljs-class .hljs-keyword -{ - color: #f2777a; -} - -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-label, -.hljs-id, -.lisp .hljs-title, -.clojure .hljs-title .hljs-built_in { - color: #ffcc66; -} - -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword, -.clojure .hljs-title .hljs-built_in { - font-weight: bold; -} - -.hljs-attribute, -.clojure .hljs-title { - color: #81a2be; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-important, -.hljs-subst, -.hljs-cdata { - color: #f99157; -} - -.hljs-deletion { - color: #dc322f; -} - -.tex .hljs-formula { - background: #eee8d5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css deleted file mode 100644 index a36e8362..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css +++ /dev/null @@ -1,113 +0,0 @@ -/* - -School Book style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net> - -*/ - -.hljs { - display: block; padding: 15px 0.5em 0.5em 30px; - font-size: 11px !important; - line-height:16px !important; -} - -pre{ - background:#f6f6ae url(./school_book.png); - border-top: solid 2px #d2e8b9; - border-bottom: solid 1px #d2e8b9; -} - -.hljs-keyword, -.hljs-literal, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.lisp .hljs-title, -.clojure .hljs-built_in, -.nginx .hljs-title, -.tex .hljs-special { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-keyword { - color: #3E5915; -} - -.hljs-string, -.hljs-title, -.haskell .hljs-type, -.hljs-tag .hljs-value, -.css .hljs-rules .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.sql .hljs-aggregate, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-javadoc, -.ruby .hljs-string, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.nginx .hljs-built_in, -.tex .hljs-command, -.coffeescript .hljs-attribute { - color: #2C009F; -} - -.hljs-comment, -.java .hljs-annotation, -.python .hljs-decorator, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket { - color: #E60415; -} - -.hljs-keyword, -.hljs-literal, -.css .hljs-id, -.hljs-phpdoc, -.hljs-title, -.haskell .hljs-type, -.vbscript .hljs-built_in, -.sql .hljs-aggregate, -.rsl .hljs-built_in, -.smalltalk .hljs-class, -.xml .hljs-tag .hljs-title, -.diff .hljs-header, -.hljs-chunk, -.hljs-winutils, -.bash .hljs-variable, -.apache .hljs-tag, -.tex .hljs-command, -.hljs-request, -.hljs-status { - font-weight: bold; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png deleted file mode 100644 index 956e9790a0e2c079b3d568348ff3accd1d9cac30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yV7?7x3vjRjNjAS6Ga$v1?&#~tz_9*=IcwKTAYZb? zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|R4)r;B4q#jQ7Ycl#YS5MfK$ z?b^fh#qmaEhFDxvyThwfhdfkOPApt1lr{NA;Vr%uzxJuVIyzm(ed_<E=VqS`p8l-k zMtpHz{$@YRySeLE*Ya}$?Ok`{te)BVtcjm@Ca0ycGcY`ur8@;E%+QhxBm}lGGB7yY z0680(Z#S8FKUh{@M?@OPNCXi`Y7>8_-0$LLU})H&o5Re&aDemE>EG#(|F^t9_pa-H z_Mf?rMVrs}-M?S|?ZdY@c6s41zy8~}@a{v&#Ea7V)wJ$+#K|u$<a;jco6PrHvRYR7 zd%!Bk+<CfxufI!;xGfPoxmaf1$vs==)R}qJUdyr#eg1fxWvS-#bL&}n`+t3#d9p8N z!?kDKTLZga?|R;GcVE5XB+g&IH(a^x?fZ81;t8fvzjU{H8y{PLR#EDh##{B^#6KJN zOib&U@Ahrg;rF_q!%YQaoy1Q|n*P>5UvWCdFLwGac}6w{_s*=8A6L7Rfc|9gboFyt I=akR{0OLZ+qyPW_ diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css deleted file mode 100644 index 970d5f81..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css +++ /dev/null @@ -1,107 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com> - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #002b36; - color: #839496; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.hljs-pi, -.lisp .hljs-string, -.hljs-javadoc { - color: #586e75; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-winutils, -.method, -.hljs-addition, -.css .hljs-tag, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor, -.hljs-link_url { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-localvars, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.hljs-identifier, -.vhdl .hljs-literal, -.hljs-id, -.css .hljs-function { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type, -.hljs-link_reference { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-preprocessor, -.hljs-preprocessor .hljs-keyword, -.hljs-pragma, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-subst, -.hljs-cdata, -.clojure .hljs-title, -.css .hljs-pseudo, -.hljs-header { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-deletion, -.hljs-important { - color: #dc322f; -} - -/* Solarized Violet */ -.hljs-link_label { - color: #6c71c4; -} - -.tex .hljs-formula { - background: #073642; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css deleted file mode 100644 index 8e1f4365..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css +++ /dev/null @@ -1,107 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com> - -*/ - -.hljs { - display: block; - padding: 0.5em; - background: #fdf6e3; - color: #657b83; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-doctype, -.hljs-pi, -.lisp .hljs-string, -.hljs-javadoc { - color: #93a1a1; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-winutils, -.method, -.hljs-addition, -.css .hljs-tag, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-command, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-phpdoc, -.tex .hljs-formula, -.hljs-regexp, -.hljs-hexcolor, -.hljs-link_url { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-localvars, -.hljs-chunk, -.hljs-decorator, -.hljs-built_in, -.hljs-identifier, -.vhdl .hljs-literal, -.hljs-id, -.css .hljs-function { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.smalltalk .hljs-number, -.hljs-constant, -.hljs-class .hljs-title, -.hljs-parent, -.haskell .hljs-type, -.hljs-link_reference { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-preprocessor, -.hljs-preprocessor .hljs-keyword, -.hljs-pragma, -.hljs-shebang, -.hljs-symbol, -.hljs-symbol .hljs-string, -.diff .hljs-change, -.hljs-special, -.hljs-attr_selector, -.hljs-subst, -.hljs-cdata, -.clojure .hljs-title, -.css .hljs-pseudo, -.hljs-header { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-deletion, -.hljs-important { - color: #dc322f; -} - -/* Solarized Violet */ -.hljs-link_label { - color: #6c71c4; -} - -.tex .hljs-formula { - background: #eee8d5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css deleted file mode 100644 index 8816520c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css +++ /dev/null @@ -1,160 +0,0 @@ -/* - -Sunburst-like style (c) Vasily Polovnyov <vast@whiteants.net> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #000; color: #f8f8f8; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc { - color: #aeaeae; - font-style: italic; -} - -.hljs-keyword, -.ruby .hljs-function .hljs-keyword, -.hljs-request, -.hljs-status, -.nginx .hljs-title { - color: #E28964; -} - -.hljs-function .hljs-keyword, -.hljs-sub .hljs-keyword, -.method, -.hljs-list .hljs-title { - color: #99CF50; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.tex .hljs-command, -.coffeescript .hljs-attribute { - color: #65B042; -} - -.hljs-subst { - color: #DAEFA3; -} - -.hljs-regexp { - color: #E9C062; -} - -.hljs-title, -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.hljs-shebang, -.hljs-prompt { - color: #89BDFF; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc { - text-decoration: underline; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number { - color: #3387CC; -} - -.hljs-params, -.hljs-variable, -.clojure .hljs-attribute { - color: #3E87E3; -} - -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.tex .hljs-special { - color: #CDA869; -} - -.css .hljs-class { - color: #9B703F; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-rules .hljs-value { - color: #CF6A4C; -} - -.css .hljs-id { - color: #8B98AB; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-pragma { - color: #8996A8; -} - -.hljs-hexcolor, -.css .hljs-value .hljs-number { - color: #DD7B3B; -} - -.css .hljs-function { - color: #DAD085; -} - -.diff .hljs-header, -.hljs-chunk, -.tex .hljs-formula { - background-color: #0E2231; - color: #F8F8F8; - font-style: italic; -} - -.diff .hljs-change { - background-color: #4A410D; - color: #F8F8F8; -} - -.hljs-addition { - background-color: #253B22; - color: #F8F8F8; -} - -.hljs-deletion { - background-color: #420E09; - color: #F8F8F8; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css deleted file mode 100644 index e63ab3de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Tomorrow Night Blue Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #7285b7; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #ff9da4; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #ffc58f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #ffeead; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #d1f1a9; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #99ffff; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #bbdaff; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #ebbbff; -} - -.hljs { - display: block; - background: #002451; - color: white; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css deleted file mode 100644 index 3bbf367d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css +++ /dev/null @@ -1,92 +0,0 @@ -/* Tomorrow Night Bright Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #d54e53; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #e78c45; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #e7c547; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #b9ca4a; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #70c0b1; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #7aa6da; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #c397d8; -} - -.hljs { - display: block; - background: black; - color: #eaeaea; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css deleted file mode 100644 index b8de0dbf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css +++ /dev/null @@ -1,92 +0,0 @@ -/* Tomorrow Night Eighties Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #999999; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #f2777a; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f99157; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #ffcc66; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #99cc99; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #66cccc; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #6699cc; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #cc99cc; -} - -.hljs { - display: block; - background: #2d2d2d; - color: #cccccc; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css deleted file mode 100644 index 54ceb585..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css +++ /dev/null @@ -1,93 +0,0 @@ -/* Tomorrow Night Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #cc6666; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #de935f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #f0c674; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #b5bd68; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #8abeb7; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #81a2be; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #b294bb; -} - -.hljs { - display: block; - background: #1d1f21; - color: #c5c8c6; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css deleted file mode 100644 index a81a2e85..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css +++ /dev/null @@ -1,90 +0,0 @@ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-title { - color: #8e908c; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-attribute, -.hljs-tag, -.hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { - color: #c82829; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.hljs-literal, -.hljs-params, -.hljs-constant { - color: #f5871f; -} - -/* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { - color: #eab700; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { - color: #718c00; -} - -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #3e999f; -} - -/* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { - color: #4271ae; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.javascript .hljs-function { - color: #8959a8; -} - -.hljs { - display: block; - background: white; - color: #4d4d4c; - padding: 0.5em; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css deleted file mode 100644 index 5ebf4541..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css +++ /dev/null @@ -1,89 +0,0 @@ -/* - -Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name> - -*/ -.hljs { - display: block; padding: 0.5em; - background: white; color: black; -} - -.hljs-comment, -.hljs-annotation, -.hljs-template_comment, -.diff .hljs-header, -.hljs-chunk, -.apache .hljs-cbracket { - color: #008000; -} - -.hljs-keyword, -.hljs-id, -.hljs-built_in, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.tex .hljs-command, -.hljs-request, -.hljs-status, -.nginx .hljs-title, -.xml .hljs-tag, -.xml .hljs-tag .hljs-value { - color: #00f; -} - -.hljs-string, -.hljs-title, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rules .hljs-value, -.hljs-rules .hljs-value .hljs-number, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-aggregate, -.hljs-template_tag, -.django .hljs-variable, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.apache .hljs-tag, -.hljs-date, -.tex .hljs-formula, -.coffeescript .hljs-attribute { - color: #a31515; -} - -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.hljs-preprocessor, -.hljs-pragma, -.userType, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-special, -.hljs-prompt { - color: #2b91af; -} - -.hljs-phpdoc, -.hljs-javadoc, -.hljs-xmlDocTag { - color: #808080; -} - -.vhdl .hljs-typename { font-weight: bold; } -.vhdl .hljs-string { color: #666666; } -.vhdl .hljs-literal { color: #a31515; } -.vhdl .hljs-attribute { color: #00B0E8; } - -.xml .hljs-attribute { color: #f00; } diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css deleted file mode 100644 index 8d54da72..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css +++ /dev/null @@ -1,158 +0,0 @@ -/* - -XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com> - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #fff; color: black; -} - -.hljs-comment, -.hljs-template_comment, -.hljs-javadoc, -.hljs-comment * { - color: #006a00; -} - -.hljs-keyword, -.hljs-literal, -.nginx .hljs-title { - color: #aa0d91; -} -.method, -.hljs-list .hljs-title, -.hljs-tag .hljs-title, -.setting .hljs-value, -.hljs-winutils, -.tex .hljs-command, -.http .hljs-title, -.hljs-request, -.hljs-status { - color: #008; -} - -.hljs-envvar, -.tex .hljs-special { - color: #660; -} - -.hljs-string { - color: #c41a16; -} -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.hljs-regexp { - color: #080; -} - -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.ini .hljs-title, -.hljs-shebang, -.hljs-prompt, -.hljs-hexcolor, -.hljs-rules .hljs-value, -.css .hljs-value .hljs-number, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-number, -.css .hljs-function, -.clojure .hljs-title, -.clojure .hljs-built_in, -.hljs-function .hljs-title, -.coffeescript .hljs-attribute { - color: #1c00cf; -} - -.hljs-class .hljs-title, -.haskell .hljs-type, -.smalltalk .hljs-class, -.hljs-javadoctag, -.hljs-yardoctag, -.hljs-phpdoc, -.hljs-typename, -.hljs-tag .hljs-attribute, -.hljs-doctype, -.hljs-class .hljs-id, -.hljs-built_in, -.setting, -.hljs-params, -.clojure .hljs-attribute { - color: #5c2699; -} - -.hljs-variable { - color: #3f6e74; -} -.css .hljs-tag, -.hljs-rules .hljs-property, -.hljs-pseudo, -.hljs-subst { - color: #000; -} - -.css .hljs-class, -.css .hljs-id { - color: #9B703F; -} - -.hljs-value .hljs-important { - color: #ff7700; - font-weight: bold; -} - -.hljs-rules .hljs-keyword { - color: #C5AF75; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9B859D; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #643820; -} - -.tex .hljs-formula { - background-color: #EEE; - font-style: italic; -} - -.diff .hljs-header, -.hljs-chunk { - color: #808080; - font-weight: bold; -} - -.diff .hljs-change { - background-color: #BCCFF9; -} - -.hljs-addition { - background-color: #BAEEBA; -} - -.hljs-deletion { - background-color: #FFC8BD; -} - -.hljs-comment .hljs-yardoctag { - font-weight: bold; -} - -.method .hljs-id { - color: #000; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css deleted file mode 100644 index 3e6a6871..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css +++ /dev/null @@ -1,116 +0,0 @@ -/* - -Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru> -based on dark.css by Ivan Sagalaev - -*/ - -.hljs { - display: block; padding: 0.5em; - background: #3F3F3F; - color: #DCDCDC; -} - -.hljs-keyword, -.hljs-tag, -.css .hljs-class, -.css .hljs-id, -.lisp .hljs-title, -.nginx .hljs-title, -.hljs-request, -.hljs-status, -.clojure .hljs-attribute { - color: #E3CEAB; -} - -.django .hljs-template_tag, -.django .hljs-variable, -.django .hljs-filter .hljs-argument { - color: #DCDCDC; -} - -.hljs-number, -.hljs-date { - color: #8CD0D3; -} - -.dos .hljs-envvar, -.dos .hljs-stream, -.hljs-variable, -.apache .hljs-sqbracket { - color: #EFDCBC; -} - -.dos .hljs-flow, -.diff .hljs-change, -.python .exception, -.python .hljs-built_in, -.hljs-literal, -.tex .hljs-special { - color: #EFEFAF; -} - -.diff .hljs-chunk, -.hljs-subst { - color: #8F8F8F; -} - -.dos .hljs-keyword, -.python .hljs-decorator, -.hljs-title, -.haskell .hljs-type, -.diff .hljs-header, -.ruby .hljs-class .hljs-parent, -.apache .hljs-tag, -.nginx .hljs-built_in, -.tex .hljs-command, -.hljs-prompt { - color: #efef8f; -} - -.dos .hljs-winutils, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-string { - color: #DCA3A3; -} - -.diff .hljs-deletion, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.sql .hljs-aggregate, -.hljs-javadoc, -.smalltalk .hljs-class, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.css .hljs-rules .hljs-value, -.hljs-attr_selector, -.hljs-pseudo, -.apache .hljs-cbracket, -.tex .hljs-formula, -.coffeescript .hljs-attribute { - color: #CC9393; -} - -.hljs-shebang, -.diff .hljs-addition, -.hljs-comment, -.java .hljs-annotation, -.hljs-template_comment, -.hljs-pi, -.hljs-doctype { - color: #7F9F7F; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippet/plugin.js deleted file mode 100644 index 7301255b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippet/plugin.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){CKEDITOR.tools.extend(this,a);this.queue=[];this.init?this.init(CKEDITOR.tools.bind(function(){for(var a;a=this.queue.pop();)a.call(this);this.ready=!0},this)):this.ready=!0}function l(a){var b=a.config.codeSnippet_codeClass,c=/\r?\n/g,h=new CKEDITOR.dom.element("textarea");a.widgets.add("codeSnippet",{allowedContent:"pre; code(language-*)",requiredContent:"pre",styleableElements:"pre",template:'<pre><code class="'+b+'"></code></pre>',dialog:"codeSnippet",pathName:a.lang.codesnippet.pathName, -mask:!0,parts:{pre:"pre",code:"code"},highlight:function(){var e=this,f=this.data,b=function(a){e.parts.code.setHtml(k?a:a.replace(c,"<br>"))};b(CKEDITOR.tools.htmlEncode(f.code));a._.codesnippet.highlighter.highlight(f.code,f.lang,function(e){a.fire("lockSnapshot");b(e);a.fire("unlockSnapshot")})},data:function(){var a=this.data,b=this.oldData;a.code&&this.parts.code.setHtml(CKEDITOR.tools.htmlEncode(a.code));b&&a.lang!=b.lang&&this.parts.code.removeClass("language-"+b.lang);a.lang&&(this.parts.code.addClass("language-"+ -a.lang),this.highlight());this.oldData=CKEDITOR.tools.copy(a)},upcast:function(e,f){if("pre"==e.name){for(var c=[],d=e.children,i,j=d.length-1;0<=j;j--)i=d[j],(i.type!=CKEDITOR.NODE_TEXT||!i.value.match(m))&&c.push(i);var g;if(!(1!=c.length||"code"!=(g=c[0]).name))if(!(1!=g.children.length||g.children[0].type!=CKEDITOR.NODE_TEXT)){if(c=a._.codesnippet.langsRegex.exec(g.attributes["class"]))f.lang=c[1];h.setHtml(g.getHtml());f.code=h.getValue();g.addClass(b);return e}}},downcast:function(a){var c= -a.getFirst("code");c.children.length=0;c.removeClass(b);c.add(new CKEDITOR.htmlParser.text(CKEDITOR.tools.htmlEncode(this.data.code)));return a}});var m=/^[\s\n\r]*$/}var k=!CKEDITOR.env.ie||8<CKEDITOR.env.version;CKEDITOR.plugins.add("codesnippet",{requires:"widget,dialog",lang:"bg,ca,cs,da,de,el,en,en-gb,eo,es,et,fa,fi,fr,fr-ca,he,hr,hu,it,ja,km,ku,lt,lv,nb,nl,no,pl,pt,pt-br,ro,ru,sk,sl,sq,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"codesnippet",hidpi:!0,beforeInit:function(a){a._.codesnippet={};this.setHighlighter= -function(b){a._.codesnippet.highlighter=b;b=a._.codesnippet.langs=a.config.codeSnippet_languages||b.languages;a._.codesnippet.langsRegex=RegExp("(?:^|\\s)language-("+CKEDITOR.tools.objectKeys(b).join("|")+")(?:\\s|$)")}},onLoad:function(){CKEDITOR.dialog.add("codeSnippet",this.path+"dialogs/codesnippet.js")},init:function(a){a.ui.addButton&&a.ui.addButton("CodeSnippet",{label:a.lang.codesnippet.button,command:"codeSnippet",toolbar:"insert,10"})},afterInit:function(a){var b=this.path;l(a);a._.codesnippet.highlighter|| -this.setHighlighter(new CKEDITOR.plugins.codesnippet.highlighter({languages:{apache:"Apache",bash:"Bash",coffeescript:"CoffeeScript",cpp:"C++",cs:"C#",css:"CSS",diff:"Diff",html:"HTML",http:"HTTP",ini:"INI",java:"Java",javascript:"JavaScript",json:"JSON",makefile:"Makefile",markdown:"Markdown",nginx:"Nginx",objectivec:"Objective-C",perl:"Perl",php:"PHP",python:"Python",ruby:"Ruby",sql:"SQL",vbscript:"VBScript",xhtml:"XHTML",xml:"XML"},init:function(c){var h=this;k&&CKEDITOR.scriptLoader.load(b+"lib/highlight/highlight.pack.js", -function(){h.hljs=window.hljs;c()});a.addContentsCss(b+"lib/highlight/styles/"+a.config.codeSnippet_theme+".css")},highlighter:function(a,b,d){(a=this.hljs.highlightAuto(a,this.hljs.getLanguage(b)?[b]:void 0))&&d(a.value)}}))}});CKEDITOR.plugins.codesnippet={highlighter:d};d.prototype.highlight=function(){var a=arguments;this.ready?this.highlighter.apply(this,a):this.queue.push(function(){this.highlighter.apply(this,a)})}})();CKEDITOR.config.codeSnippet_codeClass="hljs"; -CKEDITOR.config.codeSnippet_theme="default"; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js deleted file mode 100644 index 25b3c209..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/codesnippetgeshi/plugin.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("codesnippetgeshi",{requires:"ajax,codesnippet",init:function(c){var d=new CKEDITOR.htmlParser.basicWriter,f=new CKEDITOR.plugins.codesnippet.highlighter({languages:a,highlighter:function(b,a,e){b=JSON.stringify({lang:a,html:b});CKEDITOR.ajax.post(CKEDITOR.getUrl(c.config.codeSnippetGeshi_url||""),b,"application/json",function(a){a?(CKEDITOR.htmlParser.fragment.fromHtml(a||"").children[0].writeChildrenHtml(d),e(d.getHtml(!0))):e("")})}});c.plugins.codesnippet.setHighlighter(f)}}); -var a={abap:"ABAP",actionscript:"ActionScript",ada:"Ada",apache:"Apache Configuration",applescript:"AppleScript",asm:"Assembly",asp:"Active Server Pages (ASP)",autoit:"AutoIt",bash:"Bash",basic4gl:"Basic4GL",bf:"Brainfuck",blitzbasic:"Blitz BASIC",bnf:"Backus-Naur Form",c:"C",c_mac:"C (Mac)",caddcl:"AutoCAD DCL",cadlisp:"AutoLISP",cfdg:"CFDG",cfm:"ColdFusion Markup Language",cil:"Common Intermediate Language (CIL)",cobol:"COBOL","cpp-qt":"C++ (Qt toolkit)",cpp:"C++",csharp:"C#",css:"Cascading Style Sheets (CSS)", -d:"D",delphi:"Delphi",diff:"Diff",div:"DIV",dos:"DOS batch file",dot:"DOT",eiffel:"Eiffel",fortran:"Fortran",freebasic:"FreeBASIC",gambas:"Gambas",genero:"Genero",gettext:"GNU internationalization (i18n) library",glsl:"OpenGL Shading Language (GLSL)",gml:"Game Maker Language (GML)",gnuplot:"gnuplot",groovy:"Groovy",haskell:"Haskell",hq9plus:"HQ9+",html4strict:"HTML",html5:"HTML5",idl:"Uno IDL",ini:"INI",inno:"Inno",intercal:"INTERCAL",io:"Io",java:"Java",java5:"Java(TM) 2 Platform Standard Edition 5.0", -javascript:"JavaScript",kixtart:"KiXtart",klonec:"Klone C",klonecpp:"Klone C++",latex:"LaTeX",lisp:"Lisp",lolcode:"LOLCODE",lotusscript:"LotusScript",lua:"Lua",Code:"Language",m68k:"Motorola 68000 Assembler",make:"make",matlab:"MATLAB M",mirc:"mIRC scripting language",mxml:"MXML",mpasm:"Microchip Assembler",mysql:"MySQL",nsis:"Nullsoft Scriptable Install System (NSIS)",objc:"Objective-C","ocaml-brief":"OCaml",ocaml:"OCaml",oobas:"OpenOffice.org Basic",oracle8:"Oracle 8 SQL",oracle11:"Oracle 11 SQL", -pascal:"Pascal",per:"per",perl:"Perl","php-brief":"PHP",php:"PHP",pixelbender:"Pixel Bender",plsql:"PL/SQL",povray:"Persistence of Vision Raytracer",powershell:"Windows PowerShell",progress:"OpenEdge Advanced Business Language",prolog:"Prolog",providex:"ProvideX",python:"Python",qbasic:"QBasic/QuickBASIC",rails:"Rails",reg:"Windows Registry",robots:"robots.txt",rsplus:"R",ruby:"Ruby",sas:"SAS",scala:"Scala",scheme:"Scheme",scilab:"Scilab",sdlbasic:"SdlBasic",smalltalk:"Smalltalk",smarty:"Smarty", -sql:"SQL",tcl:"Tcl",teraterm:"Tera Term",text:"Plain text",thinbasic:"thinBasic",tsql:"Transact-SQL",typoscript:"TypoScript",vala:"Vala",vb:"Visual Basic",vbnet:"Visual Basic .NET",verilog:"Verilog",vhdl:"VHDL",vim:"Vimscript",visualfoxpro:"Visual FoxPro",visualprolog:"Visual Prolog",whitespace:"Whitespace",winbatch:"Winbatch",xml:"XML",xorg_conf:"Xorg.conf",xpp:"X++",z80:"ZiLOG Z80 Assembler"}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/bgcolor.png deleted file mode 100644 index a313938d8bc0f72e3086129816be628c1a7aa100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6 z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch& zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4 zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5 zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58 zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#* zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>a?jz9na diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png deleted file mode 100644 index 54b3e18c4602dbf05cf21e897477998211c02dfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2169 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png deleted file mode 100644 index 8fc56bcbd2185cdf319554c4edfdb161c87fe8b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1725 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 To9;Xs00000NkvXXu0mjf;)5CX diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/icons/textcolor.png deleted file mode 100644 index 0d8e45907bca4c92dc43ced827d1896e968ec27c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4 zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4` z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8 z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig! zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$ OMGT&<elF{r5}E)t`BzH- diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/af.js deleted file mode 100644 index 89a2928c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","af",{auto:"Outomaties",bgColorTitle:"Agtergrondkleur",colors:{"000":"Swart",8E5:"Meroen","8B4513":"Sjokoladebruin","2F4F4F":"Donkerleisteengrys","008080":"Blougroen","000080":"Vlootblou","4B0082":"Indigo",696969:"Donkergrys",B22222:"Rooibaksteen",A52A2A:"Bruin",DAA520:"Donkergeel","006400":"Donkergroen","40E0D0":"Turkoois","0000CD":"Middelblou",800080:"Pers",808080:"Grys",F00:"Rooi",FF8C00:"Donkeroranje",FFD700:"Goud","008000":"Groen","0FF":"Siaan","00F":"Blou", -EE82EE:"Viooltjieblou",A9A9A9:"Donkergrys",FFA07A:"Ligsalm",FFA500:"Oranje",FFFF00:"Geel","00FF00":"Lemmetjie",AFEEEE:"Ligturkoois",ADD8E6:"Ligblou",DDA0DD:"Pruim",D3D3D3:"Liggrys",FFF0F5:"Linne",FAEBD7:"Ivoor",FFFFE0:"Liggeel",F0FFF0:"Heuningdou",F0FFFF:"Asuur",F0F8FF:"Ligte hemelsblou",E6E6FA:"Laventel",FFF:"Wit"},more:"Meer Kleure...",panelTitle:"Kleure",textColorTitle:"Tekskleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ar.js deleted file mode 100644 index 43b7461f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ar",{auto:"تلقائي",bgColorTitle:"لون الخلفية",colors:{"000":"أسود",8E5:"كستنائي","8B4513":"بني فاتح","2F4F4F":"رمادي أردوازي غامق","008080":"أزرق مخضر","000080":"أزرق داكن","4B0082":"كحلي",696969:"رمادي داكن",B22222:"طوبي",A52A2A:"بني",DAA520:"ذهبي داكن","006400":"أخضر داكن","40E0D0":"فيروزي","0000CD":"أزرق متوسط",800080:"بنفسجي غامق",808080:"رمادي",F00:"أحمر",FF8C00:"برتقالي داكن",FFD700:"ذهبي","008000":"أخضر","0FF":"تركواز","00F":"أزرق",EE82EE:"بنفسجي",A9A9A9:"رمادي شاحب", -FFA07A:"برتقالي وردي",FFA500:"برتقالي",FFFF00:"أصفر","00FF00":"ليموني",AFEEEE:"فيروزي شاحب",ADD8E6:"أزرق فاتح",DDA0DD:"بنفسجي فاتح",D3D3D3:"رمادي فاتح",FFF0F5:"وردي فاتح",FAEBD7:"أبيض عتيق",FFFFE0:"أصفر فاتح",F0FFF0:"أبيض مائل للأخضر",F0FFFF:"سماوي",F0F8FF:"لبني",E6E6FA:"أرجواني",FFF:"أبيض"},more:"ألوان إضافية...",panelTitle:"Colors",textColorTitle:"لون النص"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bg.js deleted file mode 100644 index 5deb5f7b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bg.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bg",{auto:"Автоматично",bgColorTitle:"Фонов цвят",colors:{"000":"Черно",8E5:"Кестеняво","8B4513":"Светлокафяво","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Индиго",696969:"Тъмно сиво",B22222:"Огнено червено",A52A2A:"Кафяво",DAA520:"Златисто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно синьо",800080:"Пурпурно",808080:"Сиво",F00:"Червено",FF8C00:"Тъмно оранжево",FFD700:"Златно","008000":"Зелено","0FF":"Светло синьо", -"00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Още цветове",panelTitle:"Цветове",textColorTitle:"Цвят на шрифт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bn.js deleted file mode 100644 index 8fb99a87..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bn",{auto:"অটোমেটিক",bgColorTitle:"বেকগ্রাউন্ড রং",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"আরও রং...",panelTitle:"Colors",textColorTitle:"টেক্স্ট রং"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bs.js deleted file mode 100644 index 3865b40a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","bs",{auto:"Automatska",bgColorTitle:"Boja pozadine",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Više boja...",panelTitle:"Colors",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ca.js deleted file mode 100644 index 068e7ef7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ca",{auto:"Automàtic",bgColorTitle:"Color de Fons",colors:{"000":"Negre",8E5:"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi",696969:"Gris Fosc",B22222:"Foc Maó",A52A2A:"Marró",DAA520:"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2",800080:"Lila",808080:"Gris",F00:"Vermell",FF8C00:"Taronja Fosc",FFD700:"Or","008000":"Verd","0FF":"Cian","00F":"Blau",EE82EE:"Violat", -A9A9A9:"Gris clar",FFA07A:"Salmó clar",FFA500:"Taronja",FFFF00:"Groc","00FF00":"Verd Llima",AFEEEE:"Turquesa Pàl·lid",ADD8E6:"Blau Clar",DDA0DD:"Pruna",D3D3D3:"Gris Clar",FFF0F5:"Lavanda rosat",FAEBD7:"Blanc Antic",FFFFE0:"Groc Clar",F0FFF0:"Verd Pàl·lid",F0FFFF:"Atzur",F0F8FF:"Cian pàlid",E6E6FA:"Lavanda",FFF:"Blanc"},more:"Més Colors...",panelTitle:"Colors",textColorTitle:"Color del Text"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cs.js deleted file mode 100644 index fbc5126e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","cs",{auto:"Automaticky",bgColorTitle:"Barva pozadí",colors:{"000":"Černá",8E5:"Kaštanová","8B4513":"Sedlová hněď","2F4F4F":"Tmavě bledě šedá","008080":"Čírka","000080":"Námořnická modř","4B0082":"Inkoustová",696969:"Tmavě šedá",B22222:"Pálená cihla",A52A2A:"Hnědá",DAA520:"Zlatý prut","006400":"Tmavě zelená","40E0D0":"Tyrkisová","0000CD":"Středně modrá",800080:"Purpurová",808080:"Šedá",F00:"Červená",FF8C00:"Tmavě oranžová",FFD700:"Zlatá","008000":"Zelená","0FF":"Azurová", -"00F":"Modrá",EE82EE:"Fialová",A9A9A9:"Kalně šedá",FFA07A:"Světle lososová",FFA500:"Oranžová",FFFF00:"Žlutá","00FF00":"Limetková",AFEEEE:"Bledě tyrkisová",ADD8E6:"Světle modrá",DDA0DD:"Švestková",D3D3D3:"Světle šedá",FFF0F5:"Levandulově ruměnná",FAEBD7:"Antická bílá",FFFFE0:"Světle žlutá",F0FFF0:"Medová rosa",F0FFFF:"Azurová",F0F8FF:"Alenčina modrá",E6E6FA:"Levandulová",FFF:"Bílá"},more:"Více barev...",panelTitle:"Barvy",textColorTitle:"Barva textu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cy.js deleted file mode 100644 index 7a9b6d9c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","cy",{auto:"Awtomatig",bgColorTitle:"Lliw Cefndir",colors:{"000":"Du",8E5:"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo",696969:"Llwyd Tywyll",B22222:"Bric Tân",A52A2A:"Brown",DAA520:"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig",800080:"Porffor",808080:"Llwyd",F00:"Coch",FF8C00:"Oren Tywyll",FFD700:"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas",EE82EE:"Fioled", -A9A9A9:"Llwyd Pwl",FFA07A:"Samwn Golau",FFA500:"Oren",FFFF00:"Melyn","00FF00":"Leim",AFEEEE:"Gwyrddlas Golau",ADD8E6:"Glas Golau",DDA0DD:"Eirinen",D3D3D3:"Llwyd Golau",FFF0F5:"Gwrid Lafant",FAEBD7:"Gwyn Hynafol",FFFFE0:"Melyn Golau",F0FFF0:"Melwn Gwyrdd Golau",F0FFFF:"Aswr",F0F8FF:"Glas Alys",E6E6FA:"Lafant",FFF:"Gwyn"},more:"Mwy o Liwiau...",panelTitle:"Lliwiau",textColorTitle:"Lliw Testun"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/da.js deleted file mode 100644 index bc53d8d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/da.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","da",{auto:"Automatisk",bgColorTitle:"Baggrundsfarve",colors:{"000":"Sort",8E5:"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Mørkegrå",B22222:"Scarlet / Rød",A52A2A:"Brun",DAA520:"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå",800080:"Lilla",808080:"Grå",F00:"Rød",FF8C00:"Mørk orange",FFD700:"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå",EE82EE:"Violet",A9A9A9:"Matgrå", -FFA07A:"Laksefarve",FFA500:"Orange",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Mat tyrkis",ADD8E6:"Lyseblå",DDA0DD:"Plum",D3D3D3:"Lysegrå",FFF0F5:"Lavender Blush",FAEBD7:"Antikhvid",FFFFE0:"Lysegul",F0FFF0:"Gul / Beige",F0FFFF:"Himmeblå",F0F8FF:"Alice blue",E6E6FA:"Lavendel",FFF:"Hvid"},more:"Flere farver...",panelTitle:"Farver",textColorTitle:"Tekstfarve"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/de.js deleted file mode 100644 index 2f1e6949..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/de.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","de",{auto:"Automatisch",bgColorTitle:"Hintergrundfarbe",colors:{"000":"Schwarz",8E5:"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Navy","4B0082":"Indigo",696969:"Dunkelgrau",B22222:"Ziegelrot",A52A2A:"Braun",DAA520:"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Medium Blau",800080:"Lila",808080:"Grau",F00:"Rot",FF8C00:"Dunkelorange",FFD700:"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau",EE82EE:"Hellviolett", -A9A9A9:"Dunkelgrau",FFA07A:"Helles Lachsrosa",FFA500:"Orange",FFFF00:"Gelb","00FF00":"Lime",AFEEEE:"Blaß-Türkis",ADD8E6:"Hellblau",DDA0DD:"Pflaumenblau",D3D3D3:"Hellgrau",FFF0F5:"Lavendel",FAEBD7:"Antik Weiß",FFFFE0:"Hellgelb",F0FFF0:"Honigtau",F0FFFF:"Azurblau",F0F8FF:"Alice Blau",E6E6FA:"Lavendel",FFF:"Weiß"},more:"Weitere Farben...",panelTitle:"Farben",textColorTitle:"Textfarbe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/el.js deleted file mode 100644 index 056d7444..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/el.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","el",{auto:"Αυτόματα",bgColorTitle:"Χρώμα Φόντου",colors:{"000":"Μαύρο",8E5:"Καστανέρυθρο","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Βαθυκύανο","000080":"Μπλε μαρέν","4B0082":"Ινδικό",696969:"Σκούρο Γκρι",B22222:"Ανοικτό Κόκκινο",A52A2A:"Καφέ",DAA520:"Golden Rod","006400":"Σκούρο Πράσινο","40E0D0":"Τυρκουάζ","0000CD":"Medium Blue",800080:"Μοβ",808080:"Γκρι",F00:"Κόκκινο",FF8C00:"Σκούρο Πορτοκαλί",FFD700:"Χρυσαφί","008000":"Πράσινο","0FF":"Κυανό", -"00F":"Μπλε",EE82EE:"Μενεξεδί",A9A9A9:"Ποντικί",FFA07A:"Ανοικτό Σομόν",FFA500:"Πορτοκαλί",FFFF00:"Κίτρινο","00FF00":"Μοσχολέμονο",AFEEEE:"Pale Turquoise",ADD8E6:"Γαλάζιο",DDA0DD:"Plum",D3D3D3:"Ανοικτό Γκρι",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Ανοικτό Κίτρινο",F0FFF0:"Honeydew",F0FFFF:"Γαλανό",F0F8FF:"Alice Blue",E6E6FA:"Ελαφρός Ιώδες",FFF:"Λευκό"},more:"Περισσότερα Χρώματα...",panelTitle:"Χρώματα",textColorTitle:"Χρώμα Κειμένου"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js deleted file mode 100644 index dacd4299..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-au",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colors",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js deleted file mode 100644 index e20fd95c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-ca",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colors",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js deleted file mode 100644 index 52be5079..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en-gb",{auto:"Automatic",bgColorTitle:"Background Colour",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Grey","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Grey",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Grey",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Grey",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colours...",panelTitle:"Colours",textColorTitle:"Text Colour"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en.js deleted file mode 100644 index c1347cc8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","en",{auto:"Automatic",bgColorTitle:"Background Color",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Colors",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eo.js deleted file mode 100644 index 64b3ea30..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","eo",{auto:"Aŭtomata",bgColorTitle:"Fona Koloro",colors:{"000":"Nigra",8E5:"Kaŝtankolora","8B4513":"Mezbruna","2F4F4F":"Ardezgriza","008080":"Marĉanaskolora","000080":"Maristblua","4B0082":"Indigokolora",696969:"Malhelgriza",B22222:"Brikruĝa",A52A2A:"Bruna",DAA520:"Senbrilorkolora","006400":"Malhelverda","40E0D0":"Turkisblua","0000CD":"Reĝblua",800080:"Purpura",808080:"Griza",F00:"Ruĝa",FF8C00:"Malheloranĝkolora",FFD700:"Orkolora","008000":"Verda","0FF":"Verdblua", -"00F":"Blua",EE82EE:"Viola",A9A9A9:"Mezgriza",FFA07A:"Salmokolora",FFA500:"Oranĝkolora",FFFF00:"Flava","00FF00":"Limetkolora",AFEEEE:"Helturkiskolora",ADD8E6:"Helblua",DDA0DD:"Prunkolora",D3D3D3:"Helgriza",FFF0F5:"Lavendkolora vangoŝminko",FAEBD7:"Antikvablanka",FFFFE0:"Helflava",F0FFF0:"Vintromelonkolora",F0FFFF:"Lazura",F0F8FF:"Aliceblua",E6E6FA:"Lavendkolora",FFF:"Blanka"},more:"Pli da Koloroj...",panelTitle:"Koloroj",textColorTitle:"Teksta Koloro"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/es.js deleted file mode 100644 index 057d6563..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","es",{auto:"Automático",bgColorTitle:"Color de Fondo",colors:{"000":"Negro",8E5:"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil",696969:"Gris oscuro",B22222:"Ladrillo",A52A2A:"Marrón",DAA520:"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro",800080:"Púrpura",808080:"Gris",F00:"Rojo",FF8C00:"Naranja oscuro",FFD700:"Oro","008000":"Verde","0FF":"Cian", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Gris medio",FFA07A:"Salmón claro",FFA500:"Naranja",FFFF00:"Amarillo","00FF00":"Lima",AFEEEE:"Turquesa claro",ADD8E6:"Azul claro",DDA0DD:"Violeta claro",D3D3D3:"Gris claro",FFF0F5:"Lavanda rojizo",FAEBD7:"Blanco antiguo",FFFFE0:"Amarillo claro",F0FFF0:"Miel",F0FFFF:"Azul celeste",F0F8FF:"Azul pálido",E6E6FA:"Lavanda",FFF:"Blanco"},more:"Más Colores...",panelTitle:"Colores",textColorTitle:"Color de Texto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/et.js deleted file mode 100644 index 8c31cf0f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/et.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","et",{auto:"Automaatne",bgColorTitle:"Tausta värv",colors:{"000":"Must",8E5:"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine",696969:"Tumehall",B22222:"Šamottkivi",A52A2A:"Pruun",DAA520:"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine",800080:"Lilla",808080:"Hall",F00:"Punanae",FF8C00:"Tumeoranž",FFD700:"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine", -"00F":"Sinine",EE82EE:"Violetne",A9A9A9:"Tuhm hall",FFA07A:"Hele lõhe",FFA500:"Oranž",FFFF00:"Kollane","00FF00":"Lubja hall",AFEEEE:"Kahvatu türkiis",ADD8E6:"Helesinine",DDA0DD:"Ploomililla",D3D3D3:"Helehall",FFF0F5:"Lavendlipunane",FAEBD7:"Antiikvalge",FFFFE0:"Helekollane",F0FFF0:"Meloniroheline",F0FFFF:"Taevasinine",F0F8FF:"Beebisinine",E6E6FA:"Lavendel",FFF:"Valge"},more:"Rohkem värve...",panelTitle:"Värvid",textColorTitle:"Teksti värv"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eu.js deleted file mode 100644 index c448ae90..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/eu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","eu",{auto:"Automatikoa",bgColorTitle:"Atzeko kolorea",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Kolore gehiago...",panelTitle:"Colors",textColorTitle:"Testu Kolorea"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fa.js deleted file mode 100644 index 53c627d2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fa",{auto:"خودکار",bgColorTitle:"رنگ پس​زمینه",colors:{"000":"سیاه",8E5:"خرمایی","8B4513":"قهوه​ای شکلاتی","2F4F4F":"ارغوانی مایل به خاکستری","008080":"آبی مایل به خاکستری","000080":"آبی سیر","4B0082":"نیلی",696969:"خاکستری تیره",B22222:"آتش آجری",A52A2A:"قهوه​ای",DAA520:"میله​ی طلایی","006400":"سبز تیره","40E0D0":"فیروزه​ای","0000CD":"آبی روشن",800080:"ارغوانی",808080:"خاکستری",F00:"قرمز",FF8C00:"نارنجی پررنگ",FFD700:"طلایی","008000":"سبز","0FF":"آبی مایل به سبز", -"00F":"آبی",EE82EE:"بنفش",A9A9A9:"خاکستری مات",FFA07A:"صورتی کدر روشن",FFA500:"نارنجی",FFFF00:"زرد","00FF00":"فسفری",AFEEEE:"فیروزه​ای رنگ پریده",ADD8E6:"آبی کمرنگ",DDA0DD:"آلویی",D3D3D3:"خاکستری روشن",FFF0F5:"بنفش کمرنگ",FAEBD7:"عتیقه سفید",FFFFE0:"زرد روشن",F0FFF0:"عسلی",F0FFFF:"لاجوردی",F0F8FF:"آبی براق",E6E6FA:"بنفش کمرنگ",FFF:"سفید"},more:"رنگ​های بیشتر...",panelTitle:"رنگها",textColorTitle:"رنگ متن"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fi.js deleted file mode 100644 index 7c2f18d2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fi",{auto:"Automaattinen",bgColorTitle:"Taustaväri",colors:{"000":"Musta",8E5:"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen",696969:"Tummanharmaa",B22222:"Tiili",A52A2A:"Ruskea",DAA520:"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen",800080:"Purppura",808080:"Harmaa",F00:"Punainen",FF8C00:"Tumma oranssi",FFD700:"Kulta", -"008000":"Vihreä","0FF":"Syaani","00F":"Sininen",EE82EE:"Violetti",A9A9A9:"Tummanharmaa",FFA07A:"Vaaleanlohenpunainen",FFA500:"Oranssi",FFFF00:"Keltainen","00FF00":"Limetin vihreä",AFEEEE:"Haalea turkoosi",ADD8E6:"Vaaleansininen",DDA0DD:"Luumu",D3D3D3:"Vaaleanharmaa",FFF0F5:"Laventelinpunainen",FAEBD7:"Antiikinvalkoinen",FFFFE0:"Vaaleankeltainen",F0FFF0:"Hunajameloni",F0FFFF:"Asurinsininen",F0F8FF:"Alice Blue -sininen",E6E6FA:"Lavanteli",FFF:"Valkoinen"},more:"Lisää värejä...",panelTitle:"Värit", -textColorTitle:"Tekstiväri"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fo.js deleted file mode 100644 index 24c03500..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fo",{auto:"Automatiskt",bgColorTitle:"Bakgrundslitur",colors:{"000":"Svart",8E5:"Maroon","8B4513":"Saðilsbrúnt","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Myrkagrátt",B22222:"Fire Brick",A52A2A:"Brúnt",DAA520:"Gullstavur","006400":"Myrkagrønt","40E0D0":"Turquoise","0000CD":"Meðal blátt",800080:"Purple",808080:"Grátt",F00:"Reytt",FF8C00:"Myrkt appelsingult",FFD700:"Gull","008000":"Grønt","0FF":"Cyan","00F":"Blátt",EE82EE:"Violet", -A9A9A9:"Døkt grátt",FFA07A:"Ljósur laksur",FFA500:"Appelsingult",FFFF00:"Gult","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Ljósablátt",DDA0DD:"Plum",D3D3D3:"Ljósagrátt",FFF0F5:"Lavender Blush",FAEBD7:"Klassiskt hvítt",FFFFE0:"Ljósagult",F0FFF0:"Hunangsdøggur",F0FFFF:"Azure",F0F8FF:"Alice Blátt",E6E6FA:"Lavender",FFF:"Hvítt"},more:"Fleiri litir...",panelTitle:"Litir",textColorTitle:"Tekstlitur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js deleted file mode 100644 index a488534c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fr-ca",{auto:"Automatique",bgColorTitle:"Couleur de fond",colors:{"000":"Noir",8E5:"Marron","8B4513":"Brun foncé","2F4F4F":"Gris ardoise foncé","008080":"Sarcelle","000080":"Marine","4B0082":"Indigo",696969:"Gris foncé",B22222:"Rouge brique",A52A2A:"Brun",DAA520:"Doré","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu",800080:"Mauve",808080:"Gris",F00:"Rouge",FF8C00:"Orange foncé",FFD700:"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu",EE82EE:"Violet", -A9A9A9:"Gris pâle",FFA07A:"Saumon clair",FFA500:"Orange",FFFF00:"Jaune","00FF00":"Vert lime",AFEEEE:"Turquoise pâle",ADD8E6:"Bleu pâle",DDA0DD:"Prune",D3D3D3:"Gris pâle",FFF0F5:"Bleu lavande",FAEBD7:"Blanc antique",FFFFE0:"Jaune pâle",F0FFF0:"Miel doré",F0FFFF:"Azure",F0F8FF:"Bleu alice",E6E6FA:"Lavande",FFF:"Blanc"},more:"Plus de couleurs...",panelTitle:"Couleurs",textColorTitle:"Couleur de texte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr.js deleted file mode 100644 index b3df258c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/fr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","fr",{auto:"Automatique",bgColorTitle:"Couleur d'arrière plan",colors:{"000":"Noir",8E5:"Marron","8B4513":"Brun moyen","2F4F4F":"Vert sombre","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo",696969:"Gris foncé",B22222:"Rouge brique",A52A2A:"Brun",DAA520:"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal",800080:"Pourpre",808080:"Gris",F00:"Rouge",FF8C00:"Orange foncé",FFD700:"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu",EE82EE:"Violet", -A9A9A9:"Gris moyen",FFA07A:"Saumon",FFA500:"Orange",FFFF00:"Jaune","00FF00":"Lime",AFEEEE:"Turquoise clair",ADD8E6:"Bleu clair",DDA0DD:"Prune",D3D3D3:"Gris clair",FFF0F5:"Fard Lavande",FAEBD7:"Blanc antique",FFFFE0:"Jaune clair",F0FFF0:"Honeydew",F0FFFF:"Azur",F0F8FF:"Bleu Alice",E6E6FA:"Lavande",FFF:"Blanc"},more:"Plus de couleurs...",panelTitle:"Couleurs",textColorTitle:"Couleur de texte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gl.js deleted file mode 100644 index 9dc1baf9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","gl",{auto:"Automático",bgColorTitle:"Cor do fondo",colors:{"000":"Negro",8E5:"Marrón escuro","8B4513":"Ocre","2F4F4F":"Pizarra escuro","008080":"Verde azulado","000080":"Azul mariño","4B0082":"Índigo",696969:"Gris escuro",B22222:"Ladrillo",A52A2A:"Marrón",DAA520:"Dourado escuro","006400":"Verde escuro","40E0D0":"Turquesa","0000CD":"Azul medio",800080:"Púrpura",808080:"Gris",F00:"Vermello",FF8C00:"Laranxa escuro",FFD700:"Dourado","008000":"Verde","0FF":"Cian", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Gris medio",FFA07A:"Salmón claro",FFA500:"Laranxa",FFFF00:"Amarelo","00FF00":"Lima",AFEEEE:"Turquesa pálido",ADD8E6:"Azul claro",DDA0DD:"Violeta pálido",D3D3D3:"Verde claro",FFF0F5:"Lavanda vermello",FAEBD7:"Branco antigo",FFFFE0:"Amarelo claro",F0FFF0:"Mel",F0FFFF:"Azul celeste",F0F8FF:"Azul pálido",E6E6FA:"Lavanda",FFF:"Branco"},more:"Máis cores...",panelTitle:"Cores",textColorTitle:"Cor do texto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gu.js deleted file mode 100644 index 8b2a9ff8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","gu",{auto:"સ્વચાલિત",bgColorTitle:"બૅકગ્રાઉન્ડ રંગ,",colors:{"000":"કાળો",8E5:"મરુન","8B4513":"છીક","2F4F4F":"ડાર્ક સ્લેટ ગ્રે ","008080":"ટીલ","000080":"નેવી","4B0082":"જામલી",696969:"ડાર્ક ગ્રે",B22222:"ઈટ",A52A2A:"બ્રાઉન",DAA520:"ગોલ્ડન રોડ","006400":"ડાર્ક લીલો","40E0D0":"ટ્રકોઈસ","0000CD":"મધ્યમ વાદળી",800080:"પર્પલ",808080:"ગ્રે",F00:"લાલ",FF8C00:"ડાર્ક ઓરંજ",FFD700:"ગોલ્ડ","008000":"ગ્રીન","0FF":"સાયન","00F":"વાદળી",EE82EE:"વાયોલેટ",A9A9A9:"ડીમ ",FFA07A:"લાઈટ સાલમન", -FFA500:"ઓરંજ",FFFF00:"પીળો","00FF00":"લાઈમ",AFEEEE:"પેલ કોઈસ",ADD8E6:"લાઈટ બ્લુ",DDA0DD:"પલ્મ",D3D3D3:"લાઈટ ગ્રે",FFF0F5:"લવંડર ",FAEBD7:"એન્ટીક સફેદ",FFFFE0:"લાઈટ પીળો",F0FFF0:"હનીડઉય",F0FFFF:"અઝુરે",F0F8FF:"એલીસ બ્લુ",E6E6FA:"લવંડર",FFF:"સફેદ"},more:"ઔર રંગ...",panelTitle:"રંગ",textColorTitle:"શબ્દનો રંગ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/he.js deleted file mode 100644 index 6658e3b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","he",{auto:"אוטומטי",bgColorTitle:"צבע רקע",colors:{"000":"שחור",8E5:"סגול כהה","8B4513":"חום בהיר","2F4F4F":"אפור צפחה","008080":"כחול-ירוק","000080":"כחול-סגול","4B0082":"אינדיגו",696969:"אפור מעומעם",B22222:"אדום-חום",A52A2A:"חום",DAA520:"כתום זהב","006400":"ירוק כהה","40E0D0":"טורקיז","0000CD":"כחול בינוני",800080:"סגול",808080:"אפור",F00:"אדום",FF8C00:"כתום כהה",FFD700:"זהב","008000":"ירוק","0FF":"ציאן","00F":"כחול",EE82EE:"סגלגל",A9A9A9:"אפור כהה",FFA07A:"כתום-וורוד", -FFA500:"כתום",FFFF00:"צהוב","00FF00":"ליים",AFEEEE:"טורקיז בהיר",ADD8E6:"כחול בהיר",DDA0DD:"שזיף",D3D3D3:"אפור בהיר",FFF0F5:"לבנדר מסמיק",FAEBD7:"לבן עתיק",FFFFE0:"צהוב בהיר",F0FFF0:"טל דבש",F0FFFF:"תכלת",F0F8FF:"כחול טיפת מים",E6E6FA:"לבנדר",FFF:"לבן"},more:"צבעים נוספים...",panelTitle:"צבעים",textColorTitle:"צבע טקסט"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hi.js deleted file mode 100644 index 497f83bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hi",{auto:"स्वचालित",bgColorTitle:"बैक्ग्राउन्ड रंग",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"और रंग...",panelTitle:"Colors",textColorTitle:"टेक्स्ट रंग"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hr.js deleted file mode 100644 index a4ec1a14..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hr",{auto:"Automatski",bgColorTitle:"Boja pozadine",colors:{"000":"Crna",8E5:"Kesten","8B4513":"Smeđa","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo",696969:"Tamno siva",B22222:"Vatrena cigla",A52A2A:"Smeđa",DAA520:"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava",800080:"Ljubičasta",808080:"Siva",F00:"Crvena",FF8C00:"Tamno naranđasta",FFD700:"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava",EE82EE:"Ljubičasta", -A9A9A9:"Mutno siva",FFA07A:"Svijetli losos",FFA500:"Naranđasto",FFFF00:"Žuto","00FF00":"Limun",AFEEEE:"Blijedo tirkizna",ADD8E6:"Svijetlo plava",DDA0DD:"Šljiva",D3D3D3:"Svijetlo siva",FFF0F5:"Lavanda rumeno",FAEBD7:"Antikno bijela",FFFFE0:"Svijetlo žuta",F0FFF0:"Med",F0FFFF:"Azurna",F0F8FF:"Alice plava",E6E6FA:"Lavanda",FFF:"Bijela"},more:"Više boja...",panelTitle:"Boje",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hu.js deleted file mode 100644 index ee57ef94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/hu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","hu",{auto:"Automatikus",bgColorTitle:"Háttérszín",colors:{"000":"Fekete",8E5:"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék",696969:"Szürke",B22222:"Tégla vörös",A52A2A:"Vörös",DAA520:"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék",800080:"Lila",808080:"Szürke",F00:"Piros",FF8C00:"Sötét narancs",FFD700:"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék",EE82EE:"Rózsaszín",A9A9A9:"Sötét szürke", -FFA07A:"Lazac",FFA500:"Narancs",FFFF00:"Citromsárga","00FF00":"Neon zöld",AFEEEE:"Világos türkiz",ADD8E6:"Világos kék",DDA0DD:"Világos lila",D3D3D3:"Világos szürke",FFF0F5:"Lavender Blush",FAEBD7:"Törtfehér",FFFFE0:"Világos sárga",F0FFF0:"Menta",F0FFFF:"Azúr kék",F0F8FF:"Halvány kék",E6E6FA:"Lavender",FFF:"Fehér"},more:"További színek...",panelTitle:"Színek",textColorTitle:"Betűszín"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/id.js deleted file mode 100644 index c6b31c7c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","id",{auto:"Automatic",bgColorTitle:"Warna Latar Belakang",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Warna",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/is.js deleted file mode 100644 index c740c058..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","is",{auto:"Sjálfval",bgColorTitle:"Bakgrunnslitur",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Fleiri liti...",panelTitle:"Colors",textColorTitle:"Litur texta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/it.js deleted file mode 100644 index 7cdf3de5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/it.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","it",{auto:"Automatico",bgColorTitle:"Colore sfondo",colors:{"000":"Nero",8E5:"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo",696969:"Grigio Scuro",B22222:"Giallo Fiamma",A52A2A:"Marrone",DAA520:"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro",800080:"Viola",808080:"Grigio",F00:"Rosso",FF8C00:"Arancio Scuro",FFD700:"Oro","008000":"Verde", -"0FF":"Ciano","00F":"Blu",EE82EE:"Violetto",A9A9A9:"Grigio Scuro",FFA07A:"Salmone",FFA500:"Arancio",FFFF00:"Giallo","00FF00":"Lime",AFEEEE:"Turchese Chiaro",ADD8E6:"Blu Chiaro",DDA0DD:"Rosso Ciliegia",D3D3D3:"Grigio Chiaro",FFF0F5:"Lavanda Chiara",FAEBD7:"Bianco Antico",FFFFE0:"Giallo Chiaro",F0FFF0:"Verde Mela",F0FFFF:"Azzurro",F0F8FF:"Celeste",E6E6FA:"Lavanda",FFF:"Bianco"},more:"Altri colori...",panelTitle:"Colori",textColorTitle:"Colore testo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ja.js deleted file mode 100644 index 4a3b2215..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ja",{auto:"自動",bgColorTitle:"背景色",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"その他の色...",panelTitle:"色",textColorTitle:"文字色"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ka.js deleted file mode 100644 index 6d39de57..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ka.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ka",{auto:"ავტომატური",bgColorTitle:"ფონის ფერი",colors:{"000":"შავი",8E5:"მუქი შინდისფერი","8B4513":"ყავისფერი","2F4F4F":"მოლურჯო ნაცრისფერი","008080":"ჩამქრალი ლურჯი","000080":"მუქი ლურჯი","4B0082":"იასამნისფერი",696969:"მუქი ნაცრისფერი",B22222:"აგურისფერი",A52A2A:"მუქი ყავისფერი",DAA520:"მოყვითალო","006400":"მუქი მწვანე","40E0D0":"ცისფერი","0000CD":"ზომიერად ლურჯი",800080:"იისფერი",808080:"ნაცრისფერი",F00:"წითელი",FF8C00:"მუქი სტაფილოსფერი",FFD700:"ოქროსფერი", -"008000":"მწვანე","0FF":"ღია ცისფერი","00F":"ლურჯი",EE82EE:"იისფერი",A9A9A9:"ბაცი ნაცრისფერი",FFA07A:"ჩამქრალი ვარდისფერი",FFA500:"სტაფილოსფერი",FFFF00:"ყვითელი","00FF00":"ლურჯი",AFEEEE:"ცისფერი",ADD8E6:"ღია ლურჯი",DDA0DD:"ღია იისფერი",D3D3D3:"ღია ნაცრისფერი",FFF0F5:"ღია ვარდისფერი",FAEBD7:"ღია ყავისფერი",FFFFE0:"ნათელი ყვითელი",F0FFF0:"ღია მწვანე",F0FFFF:"ღია ცისფერი 2",F0F8FF:"ღია ცისფერი 3",E6E6FA:"ღია იისფერი 2",FFF:"თეთრი"},more:"მეტი ფერი...",panelTitle:"ფერები",textColorTitle:"ტექსტის ფერი"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/km.js deleted file mode 100644 index cbff6abd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","km",{auto:"ស្វ័យប្រវត្តិ",bgColorTitle:"ពណ៌ផ្ទៃខាងក្រោយ",colors:{"000":"ខ្មៅ",8E5:"ត្នោត​ចាស់","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"ខៀវ​ចាស់","4B0082":"ធ្លះ",696969:"ប្រផេះ​ក្រាស់",B22222:"Fire Brick",A52A2A:"ត្នោត",DAA520:"Golden Rod","006400":"បៃតង​ចាស់","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"ប្រផេះ",F00:"ក្រហម",FF8C00:"ទឹក​ក្រូច​ចាស់",FFD700:"មាស","008000":"បៃតង","0FF":"Cyan","00F":"ខៀវ", -EE82EE:"ស្វាយ",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"ទឹក​ក្រូច",FFFF00:"លឿង","00FF00":"ក្រូច​ឆ្មារ",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"លឿង​ស្ដើង",F0FFF0:"Honeydew",F0FFFF:"ផ្ទៃមេឃ",F0F8FF:"Alice Blue",E6E6FA:"ឡាវិនដឺ",FFF:"ស"},more:"ពណ៌​ផ្សេង​ទៀត..",panelTitle:"ពណ៌",textColorTitle:"ពណ៌អក្សរ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ko.js deleted file mode 100644 index cbf7d6fc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ko",{auto:"기본색상",bgColorTitle:"배경 색상",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"색상선택...",panelTitle:"Colors",textColorTitle:"글자 색상"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ku.js deleted file mode 100644 index 7627dcd1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ku.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ku",{auto:"خۆکار",bgColorTitle:"ڕەنگی پاشبنەما",colors:{"000":"ڕەش",8E5:"سۆرو ماڕوونی","8B4513":"ماڕوونی","2F4F4F":"سەوزی تاریك","008080":"سەوز و شین","000080":"شینی تۆخ","4B0082":"مۆری تۆخ",696969:"ڕەساسی تۆخ",B22222:"سۆری تۆخ",A52A2A:"قاوەیی",DAA520:"قاوەیی بریسکەدار","006400":"سەوزی تۆخ","40E0D0":"شینی ناتۆخی بریسکەدار","0000CD":"شینی مامناوەند",800080:"پەمبەیی",808080:"ڕەساسی",F00:"سۆر",FF8C00:"نارەنجی تۆخ",FFD700:"زەرد","008000":"سەوز","0FF":"شینی ئاسمانی", -"00F":"شین",EE82EE:"پەمەیی",A9A9A9:"ڕەساسی ناتۆخ",FFA07A:"نارەنجی ناتۆخ",FFA500:"نارەنجی",FFFF00:"زەرد","00FF00":"سەوز",AFEEEE:"شینی ناتۆخ",ADD8E6:"شینی زۆر ناتۆخ",DDA0DD:"پەمەیی ناتۆخ",D3D3D3:"ڕەساسی بریسکەدار",FFF0F5:"جەرگی زۆر ناتۆخ",FAEBD7:"جەرگی ناتۆخ",FFFFE0:"سپی ناتۆخ",F0FFF0:"هەنگوینی ناتۆخ",F0FFFF:"شینێکی زۆر ناتۆخ",F0F8FF:"شینێکی ئاسمانی زۆر ناتۆخ",E6E6FA:"شیری",FFF:"سپی"},more:"ڕەنگی زیاتر...",panelTitle:"ڕەنگەکان",textColorTitle:"ڕەنگی دەق"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lt.js deleted file mode 100644 index 288abf2f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","lt",{auto:"Automatinis",bgColorTitle:"Fono spalva",colors:{"000":"Juoda",8E5:"Kaštoninė","8B4513":"Tamsiai ruda","2F4F4F":"Pilka tamsaus šiferio","008080":"Teal","000080":"Karinis","4B0082":"Indigo",696969:"Tamsiai pilka",B22222:"Ugnies",A52A2A:"Ruda",DAA520:"Aukso","006400":"Tamsiai žalia","40E0D0":"Turquoise","0000CD":"Vidutinė mėlyna",800080:"Violetinė",808080:"Pilka",F00:"Raudona",FF8C00:"Tamsiai oranžinė",FFD700:"Auksinė","008000":"Žalia","0FF":"Žydra", -"00F":"Mėlyna",EE82EE:"Violetinė",A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Oranžinė",FFFF00:"Geltona","00FF00":"Citrinų",AFEEEE:"Pale Turquoise",ADD8E6:"Šviesiai mėlyna",DDA0DD:"Plum",D3D3D3:"Šviesiai pilka",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Šviesiai geltona",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Balta"},more:"Daugiau spalvų...",panelTitle:"Spalva",textColorTitle:"Teksto spalva"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lv.js deleted file mode 100644 index 723b21f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/lv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","lv",{auto:"Automātiska",bgColorTitle:"Fona krāsa",colors:{"000":"Melns",8E5:"Sarkanbrūns","8B4513":"Sedlu brūns","2F4F4F":"Tumšas tāfeles pelēks","008080":"Zili-zaļš","000080":"Jūras","4B0082":"Indigo",696969:"Tumši pelēks",B22222:"Ķieģeļsarkans",A52A2A:"Brūns",DAA520:"Zelta","006400":"Tumši zaļš","40E0D0":"Tirkīzs","0000CD":"Vidēji zils",800080:"Purpurs",808080:"Pelēks",F00:"Sarkans",FF8C00:"Tumši oranžs",FFD700:"Zelta","008000":"Zaļš","0FF":"Tumšzils","00F":"Zils", -EE82EE:"Violets",A9A9A9:"Pelēks",FFA07A:"Gaiši laškrāsas",FFA500:"Oranžs",FFFF00:"Dzeltens","00FF00":"Laima",AFEEEE:"Gaiši tirkīza",ADD8E6:"Gaiši zils",DDA0DD:"Plūmju",D3D3D3:"Gaiši pelēks",FFF0F5:"Lavandas sārts",FAEBD7:"Antīki balts",FFFFE0:"Gaiši dzeltens",F0FFF0:"Meduspile",F0FFFF:"Debesszils",F0F8FF:"Alises zils",E6E6FA:"Lavanda",FFF:"Balts"},more:"Plašāka palete...",panelTitle:"Krāsa",textColorTitle:"Teksta krāsa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mk.js deleted file mode 100644 index 606e7e5e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","mk",{auto:"Automatic",bgColorTitle:"Background Color",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"Colors",textColorTitle:"Text Color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mn.js deleted file mode 100644 index a0699298..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","mn",{auto:"Автоматаар",bgColorTitle:"Дэвсгэр өнгө",colors:{"000":"Хар",8E5:"Хүрэн","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Саарал",F00:"Улаан",FF8C00:"Dark Orange",FFD700:"Алт","008000":"Ногоон","0FF":"Цэнхэр","00F":"Хөх",EE82EE:"Ягаан", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Улбар шар",FFFF00:"Шар","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Цайвар саарал",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Цагаан"},more:"Нэмэлт өнгөнүүд...",panelTitle:"Өнгөнүүд",textColorTitle:"Бичвэрийн өнгө"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ms.js deleted file mode 100644 index d65c79ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ms",{auto:"Otomatik",bgColorTitle:"Warna Latarbelakang",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Warna lain-lain...",panelTitle:"Colors",textColorTitle:"Warna Text"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nb.js deleted file mode 100644 index 26422ebd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","nb",{auto:"Automatisk",bgColorTitle:"Bakgrunnsfarge",colors:{"000":"Svart",8E5:"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo",696969:"Mørk grå",B22222:"Mørkerød",A52A2A:"Brun",DAA520:"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå",800080:"Purpur",808080:"Grå",F00:"Rød",FF8C00:"Mørk oransje",FFD700:"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå",EE82EE:"Fiolett",A9A9A9:"Svak grå", -FFA07A:"Rosa-oransje",FFA500:"Oransje",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Svak turkis",ADD8E6:"Lys Blå",DDA0DD:"Plomme",D3D3D3:"Lys grå",FFF0F5:"Svak lavendelrosa",FAEBD7:"Antikk-hvit",FFFFE0:"Lys gul",F0FFF0:"Honningmelon",F0FFFF:"Svakt asurblått",F0F8FF:"Svak cyan",E6E6FA:"Lavendel",FFF:"Hvit"},more:"Flere farger...",panelTitle:"Farger",textColorTitle:"Tekstfarge"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nl.js deleted file mode 100644 index f30b8aa4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/nl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","nl",{auto:"Automatisch",bgColorTitle:"Achtergrondkleur",colors:{"000":"Zwart",8E5:"Kastanjebruin","8B4513":"Chocoladebruin","2F4F4F":"Donkerleigrijs","008080":"Blauwgroen","000080":"Marine","4B0082":"Indigo",696969:"Donkergrijs",B22222:"Baksteen",A52A2A:"Bruin",DAA520:"Donkergeel","006400":"Donkergroen","40E0D0":"Turquoise","0000CD":"Middenblauw",800080:"Paars",808080:"Grijs",F00:"Rood",FF8C00:"Donkeroranje",FFD700:"Goud","008000":"Groen","0FF":"Cyaan","00F":"Blauw", -EE82EE:"Violet",A9A9A9:"Donkergrijs",FFA07A:"Lichtzalm",FFA500:"Oranje",FFFF00:"Geel","00FF00":"Felgroen",AFEEEE:"Lichtturquoise",ADD8E6:"Lichtblauw",DDA0DD:"Pruim",D3D3D3:"Lichtgrijs",FFF0F5:"Linnen",FAEBD7:"Ivoor",FFFFE0:"Lichtgeel",F0FFF0:"Honingdauw",F0FFFF:"Azuur",F0F8FF:"Licht hemelsblauw",E6E6FA:"Lavendel",FFF:"Wit"},more:"Meer kleuren...",panelTitle:"Kleuren",textColorTitle:"Tekstkleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/no.js deleted file mode 100644 index 39d18137..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","no",{auto:"Automatisk",bgColorTitle:"Bakgrunnsfarge",colors:{"000":"Svart",8E5:"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo",696969:"Mørk grå",B22222:"Mørkerød",A52A2A:"Brun",DAA520:"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå",800080:"Purpur",808080:"Grå",F00:"Rød",FF8C00:"Mørk oransje",FFD700:"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå",EE82EE:"Fiolett",A9A9A9:"Svak grå", -FFA07A:"Rosa-oransje",FFA500:"Oransje",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Svak turkis",ADD8E6:"Lys Blå",DDA0DD:"Plomme",D3D3D3:"Lys grå",FFF0F5:"Svak lavendelrosa",FAEBD7:"Antikk-hvit",FFFFE0:"Lys gul",F0FFF0:"Honningmelon",F0FFFF:"Svakt asurblått",F0F8FF:"Svak cyan",E6E6FA:"Lavendel",FFF:"Hvit"},more:"Flere farger...",panelTitle:"Farger",textColorTitle:"Tekstfarge"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pl.js deleted file mode 100644 index 1028ac37..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pl",{auto:"Automatycznie",bgColorTitle:"Kolor tła",colors:{"000":"Czarny",8E5:"Kasztanowy","8B4513":"Czekoladowy","2F4F4F":"Ciemnografitowy","008080":"Morski","000080":"Granatowy","4B0082":"Indygo",696969:"Ciemnoszary",B22222:"Czerwień żelazowa",A52A2A:"Brązowy",DAA520:"Ciemnozłoty","006400":"Ciemnozielony","40E0D0":"Turkusowy","0000CD":"Ciemnoniebieski",800080:"Purpurowy",808080:"Szary",F00:"Czerwony",FF8C00:"Ciemnopomarańczowy",FFD700:"Złoty","008000":"Zielony", -"0FF":"Cyjan","00F":"Niebieski",EE82EE:"Fioletowy",A9A9A9:"Przygaszony szary",FFA07A:"Łososiowy",FFA500:"Pomarańczowy",FFFF00:"Żółty","00FF00":"Limonkowy",AFEEEE:"Bladoturkusowy",ADD8E6:"Jasnoniebieski",DDA0DD:"Śliwkowy",D3D3D3:"Jasnoszary",FFF0F5:"Jasnolawendowy",FAEBD7:"Kremowobiały",FFFFE0:"Jasnożółty",F0FFF0:"Bladozielony",F0FFFF:"Jasnolazurowy",F0F8FF:"Jasnobłękitny",E6E6FA:"Lawendowy",FFF:"Biały"},more:"Więcej kolorów...",panelTitle:"Kolory",textColorTitle:"Kolor tekstu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js deleted file mode 100644 index 4f1ee835..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt-br.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pt-br",{auto:"Automático",bgColorTitle:"Cor do Plano de Fundo",colors:{"000":"Preto",8E5:"Foquete","8B4513":"Marrom 1","2F4F4F":"Cinza 1","008080":"Cerceta","000080":"Azul Marinho","4B0082":"Índigo",696969:"Cinza 2",B22222:"Tijolo de Fogo",A52A2A:"Marrom 2",DAA520:"Vara Dourada","006400":"Verde Escuro","40E0D0":"Turquesa","0000CD":"Azul Médio",800080:"Roxo",808080:"Cinza 3",F00:"Vermelho",FF8C00:"Laranja Escuro",FFD700:"Dourado","008000":"Verde","0FF":"Ciano", -"00F":"Azul",EE82EE:"Violeta",A9A9A9:"Cinza Escuro",FFA07A:"Salmão Claro",FFA500:"Laranja",FFFF00:"Amarelo","00FF00":"Lima",AFEEEE:"Turquesa Pálido",ADD8E6:"Azul Claro",DDA0DD:"Ameixa",D3D3D3:"Cinza Claro",FFF0F5:"Lavanda 1",FAEBD7:"Branco Antiguidade",FFFFE0:"Amarelo Claro",F0FFF0:"Orvalho",F0FFFF:"Azure",F0F8FF:"Azul Alice",E6E6FA:"Lavanda 2",FFF:"Branco"},more:"Mais Cores...",panelTitle:"Cores",textColorTitle:"Cor do Texto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt.js deleted file mode 100644 index c99783ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/pt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","pt",{auto:"Automático",bgColorTitle:"Cor de Fundo",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Mais Cores...",panelTitle:"Colors",textColorTitle:"Cor do Texto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ro.js deleted file mode 100644 index 39127053..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ro.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ro",{auto:"Automatic",bgColorTitle:"Coloarea fundalului",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Mai multe culori...",panelTitle:"Colors",textColorTitle:"Culoarea textului"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ru.js deleted file mode 100644 index 558c4b6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ru.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ru",{auto:"Автоматически",bgColorTitle:"Цвет фона",colors:{"000":"Чёрный",8E5:"Бордовый","8B4513":"Кожано-коричневый","2F4F4F":"Темный синевато-серый","008080":"Сине-зелёный","000080":"Тёмно-синий","4B0082":"Индиго",696969:"Тёмно-серый",B22222:"Кирпичный",A52A2A:"Коричневый",DAA520:"Золотисто-берёзовый","006400":"Темно-зелёный","40E0D0":"Бирюзовый","0000CD":"Умеренно синий",800080:"Пурпурный",808080:"Серый",F00:"Красный",FF8C00:"Темно-оранжевый",FFD700:"Золотистый", -"008000":"Зелёный","0FF":"Васильковый","00F":"Синий",EE82EE:"Фиолетовый",A9A9A9:"Тускло-серый",FFA07A:"Светло-лососевый",FFA500:"Оранжевый",FFFF00:"Жёлтый","00FF00":"Лайма",AFEEEE:"Бледно-синий",ADD8E6:"Свелто-голубой",DDA0DD:"Сливовый",D3D3D3:"Светло-серый",FFF0F5:"Розово-лавандовый",FAEBD7:"Античный белый",FFFFE0:"Светло-жёлтый",F0FFF0:"Медвяной росы",F0FFFF:"Лазурный",F0F8FF:"Бледно-голубой",E6E6FA:"Лавандовый",FFF:"Белый"},more:"Ещё цвета...",panelTitle:"Цвета",textColorTitle:"Цвет текста"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/si.js deleted file mode 100644 index 53d553d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","si",{auto:"Automatic",bgColorTitle:"පසුබිම් වර්ණය",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"More Colors...",panelTitle:"වර්ණය",textColorTitle:"අක්ෂර වර්ණ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sk.js deleted file mode 100644 index dfb8c673..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sk",{auto:"Automaticky",bgColorTitle:"Farba pozadia",colors:{"000":"Čierna",8E5:"Maroon","8B4513":"Sedlová hnedá","2F4F4F":"Tmavo bridlicovo sivá","008080":"Modrozelená","000080":"Tmavomodrá","4B0082":"Indigo",696969:"Tmavá sivá",B22222:"Ohňová tehlová",A52A2A:"Hnedá",DAA520:"Zlatobyľ","006400":"Tmavá zelená","40E0D0":"Tyrkysová","0000CD":"Stredná modrá",800080:"Purpurová",808080:"Sivá",F00:"Červená",FF8C00:"Tmavá oranžová",FFD700:"Zlatá","008000":"Zelená", -"0FF":"Azúrová","00F":"Modrá",EE82EE:"Fialová",A9A9A9:"Tmavá sivá",FFA07A:"Svetlo lososová",FFA500:"Oranžová",FFFF00:"Žltá","00FF00":"Vápenná",AFEEEE:"Svetlo tyrkysová",ADD8E6:"Svetlo modrá",DDA0DD:"Slivková",D3D3D3:"Svetlo sivá",FFF0F5:"Levanduľovo červená",FAEBD7:"Antická biela",FFFFE0:"Svetlo žltá",F0FFF0:"Medová",F0FFFF:"Azúrová",F0F8FF:"Alicovo modrá",E6E6FA:"Levanduľová",FFF:"Biela"},more:"Viac farieb...",panelTitle:"Farby",textColorTitle:"Farba textu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sl.js deleted file mode 100644 index 81d10f73..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sl",{auto:"Samodejno",bgColorTitle:"Barva ozadja",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Več barv...",panelTitle:"Colors",textColorTitle:"Barva besedila"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sq.js deleted file mode 100644 index 559b17cd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sq",{auto:"Automatik",bgColorTitle:"Ngjyra e Prapavijës",colors:{"000":"E zezë",8E5:"Ngjyrë gështenjë","8B4513":"Ngjyrë Shale Kafe","2F4F4F":"Ngjyrë Gri të errët ardëz","008080":"Ngjyrë bajukë","000080":"Ngjyrë Marine","4B0082":"Indigo",696969:"Gri e Errët",B22222:"Tullë në Flakë",A52A2A:"Ngjytë Kafe",DAA520:"Shkop i Artë","006400":"E Gjelbër e Errët","40E0D0":"Ngjyrë e Bruztë","0000CD":"E Kaltër e Mesme",800080:"Vjollcë",808080:"Gri",F00:"E Kuqe",FF8C00:"E Portokalltë e Errët", -FFD700:"Ngjyrë Ari","008000":"E Gjelbërt","0FF":"Cyan","00F":"E Kaltër",EE82EE:"Vjollcë",A9A9A9:"Gri e Zbehtë",FFA07A:"Salmon i Ndritur",FFA500:"E Portokalltë",FFFF00:"E Verdhë","00FF00":"Ngjyrë Gëlqere",AFEEEE:"Ngjyrë e Bruztë e Zbehtë",ADD8E6:"E Kaltër e Ndritur",DDA0DD:"Ngjyrë Llokumi",D3D3D3:"Gri e Ndritur",FFF0F5:"Ngjyrë Purpur e Skuqur",FAEBD7:"E Bardhë Antike",FFFFE0:"E verdhë e Ndritur",F0FFF0:"Ngjyrë Nektari",F0FFFF:"Ngjyrë Qielli",F0F8FF:"E Kaltër Alice",E6E6FA:"Ngjyrë Purpur e Zbetë",FFF:"E bardhë"}, -more:"Më Shumë Ngjyra...",panelTitle:"Ngjyrat",textColorTitle:"Ngjyra e Tekstit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js deleted file mode 100644 index f0d15e3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sr-latn",{auto:"Automatski",bgColorTitle:"Boja pozadine",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Više boja...",panelTitle:"Colors",textColorTitle:"Boja teksta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr.js deleted file mode 100644 index 4f6ba162..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sr",{auto:"Аутоматски",bgColorTitle:"Боја позадине",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet", -A9A9A9:"Dim Gray",FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"Више боја...",panelTitle:"Colors",textColorTitle:"Боја текста"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sv.js deleted file mode 100644 index 995a3683..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","sv",{auto:"Automatisk",bgColorTitle:"Bakgrundsfärg",colors:{"000":"Svart",8E5:"Rödbrun","8B4513":"Mörkbrun","2F4F4F":"Skiffergrå","008080":"Kricka","000080":"Marinblå","4B0082":"Indigo",696969:"Mörkgrå",B22222:"Tegelsten",A52A2A:"Brun",DAA520:"Mörk guld","006400":"Mörkgrön","40E0D0":"Turkos","0000CD":"Medium blå",800080:"Lila",808080:"Grå",F00:"Röd",FF8C00:"Mörkorange",FFD700:"Guld","008000":"Grön","0FF":"Turkos","00F":"Blå",EE82EE:"Violett",A9A9A9:"Matt grå", -FFA07A:"Laxrosa",FFA500:"Orange",FFFF00:"Gul","00FF00":"Lime",AFEEEE:"Ljusturkos",ADD8E6:"Ljusblå",DDA0DD:"Plommon",D3D3D3:"Ljusgrå",FFF0F5:"Ljus lavendel",FAEBD7:"Antikvit",FFFFE0:"Ljusgul",F0FFF0:"Honungsdagg",F0FFFF:"Azurblå",F0F8FF:"Aliceblå",E6E6FA:"Lavendel",FFF:"Vit"},more:"Fler färger...",panelTitle:"Färger",textColorTitle:"Textfärg"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/th.js deleted file mode 100644 index 7b65cbd8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/th.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","th",{auto:"สีอัตโนมัติ",bgColorTitle:"สีพื้นหลัง",colors:{"000":"Black",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Brown",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Gray",F00:"Red",FF8C00:"Dark Orange",FFD700:"Gold","008000":"Green","0FF":"Cyan","00F":"Blue",EE82EE:"Violet",A9A9A9:"Dim Gray", -FFA07A:"Light Salmon",FFA500:"Orange",FFFF00:"Yellow","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"White"},more:"เลือกสีอื่นๆ...",panelTitle:"Colors",textColorTitle:"สีตัวอักษร"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tr.js deleted file mode 100644 index 56ca2b1d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","tr",{auto:"Otomatik",bgColorTitle:"Arka Renk",colors:{"000":"Siyah",8E5:"Kestane","8B4513":"Koyu Kahverengi","2F4F4F":"Koyu Kurşuni Gri","008080":"Teal","000080":"Mavi","4B0082":"Çivit Mavisi",696969:"Silik Gri",B22222:"Ateş Tuğlası",A52A2A:"Kahverengi",DAA520:"Altun Sırık","006400":"Koyu Yeşil","40E0D0":"Turkuaz","0000CD":"Orta Mavi",800080:"Pembe",808080:"Gri",F00:"Kırmızı",FF8C00:"Koyu Portakal",FFD700:"Altın","008000":"Yeşil","0FF":"Ciyan","00F":"Mavi", -EE82EE:"Menekşe",A9A9A9:"Koyu Gri",FFA07A:"Açık Sarımsı",FFA500:"Portakal",FFFF00:"Sarı","00FF00":"Açık Yeşil",AFEEEE:"Sönük Turkuaz",ADD8E6:"Açık Mavi",DDA0DD:"Mor",D3D3D3:"Açık Gri",FFF0F5:"Eflatun Pembe",FAEBD7:"Antik Beyaz",FFFFE0:"Açık Sarı",F0FFF0:"Balsarısı",F0FFFF:"Gök Mavisi",F0F8FF:"Reha Mavi",E6E6FA:"Eflatun",FFF:"Beyaz"},more:"Diğer renkler...",panelTitle:"Renkler",textColorTitle:"Yazı Rengi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tt.js deleted file mode 100644 index 376111d6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","tt",{auto:"Автоматик",bgColorTitle:"Фон төсе",colors:{"000":"Кара",8E5:"Бордо","8B4513":"Дарчин","2F4F4F":"Аспид соры","008080":"Күкле-яшелле","000080":"Куе күк","4B0082":"Индиго",696969:"Куе соры",B22222:"Кармин",A52A2A:"Чия кызыл",DAA520:"Алтын каен","006400":"Үлән","40E0D0":"Фирәзә","0000CD":"Фарсы күк",800080:"Шәмәхә",808080:"Соры",F00:"Кызыл",FF8C00:"Кабак",FFD700:"Алтын","008000":"Яшел","0FF":"Ачык зәңгәр","00F":"Зәңгәр",EE82EE:"Миләүшә",A9A9A9:"Ачык соры", -FFA07A:"Кызгылт сары алсу",FFA500:"Кызгылт сары",FFFF00:"Сары","00FF00":"Лайм",AFEEEE:"Тонык күк",ADD8E6:"Тонык күкбаш",DDA0DD:"Аксыл шәмәхә",D3D3D3:"Ачык соры",FFF0F5:"Ал ала миләүшә",FAEBD7:"Җитен",FFFFE0:"Ачык сары",F0FFF0:"Аксыл көрән",F0FFFF:"Ап-ак",F0F8FF:"Аксыл зәңгәр диңгез",E6E6FA:"Ала миләүшә",FFF:"Ак"},more:"Башка төсләр",panelTitle:"Төсләр",textColorTitle:"Текст төсе"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ug.js deleted file mode 100644 index 2ae15574..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/ug.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","ug",{auto:"ئۆزلۈكىدىن",bgColorTitle:"تەگلىك رەڭگى",colors:{"000":"قارا",8E5:"قىزغۇچ سېرىق","8B4513":"توق قوڭۇر","2F4F4F":"قارامتۇل يېشىل","008080":"كۆكۈش يېشىل","000080":"قارامتۇل كۆك","4B0082":"كۆكۈش كۈلرەڭ",696969:"قارامتۇل كۈلرەڭ",B22222:"خىش قىزىل",A52A2A:"قوڭۇر",DAA520:"ئالتۇن سېرىق","006400":"توق يېشىل","40E0D0":"كۆكۈچ يېشىل","0000CD":"ئوتتۇراھال كۆك",800080:"بىنەپشە",808080:"كۈلرەڭ",F00:"قىزىل",FF8C00:"توق قىزغۇچ سېرىق",FFD700:"ئالتۇن","008000":"يېشىل", -"0FF":"يېشىل كۆك","00F":"كۆك",EE82EE:"قىزغۇچ بىنەپشە",A9A9A9:"توق كۈلرەڭ",FFA07A:"كاۋا چېچىكى سېرىق",FFA500:"قىزغۇچ سېرىق",FFFF00:"سېرىق","00FF00":"Lime",AFEEEE:"سۇس ھاۋا رەڭ",ADD8E6:"ئوچۇق كۆك",DDA0DD:"قىزغۇچ بىنەپشە",D3D3D3:"سۇس كۆكۈچ كۈلرەڭ",FFF0F5:"سۇس قىزغۇچ بىنەپشە",FAEBD7:"Antique White",FFFFE0:"سۇس سېرىق",F0FFF0:"Honeydew",F0FFFF:"ئاسمان كۆكى",F0F8FF:"سۇس كۆك",E6E6FA:"سۇس بىنەپشە",FFF:"ئاق"},more:"باشقا رەڭ",panelTitle:"رەڭ",textColorTitle:"تېكىست رەڭگى"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/uk.js deleted file mode 100644 index b694a953..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/uk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","uk",{auto:"Авто",bgColorTitle:"Колір фону",colors:{"000":"Чорний",8E5:"Бордовий","8B4513":"Коричневий","2F4F4F":"Темний сіро-зелений","008080":"Морської хвилі","000080":"Сливовий","4B0082":"Індиго",696969:"Темносірий",B22222:"Темночервоний",A52A2A:"Каштановий",DAA520:"Бежевий","006400":"Темнозелений","40E0D0":"Бірюзовий","0000CD":"Темносиній",800080:"Пурпурний",808080:"Сірий",F00:"Червоний",FF8C00:"Темнооранжевий",FFD700:"Жовтий","008000":"Зелений","0FF":"Синьо-зелений", -"00F":"Синій",EE82EE:"Фіолетовий",A9A9A9:"Світлосірий",FFA07A:"Рожевий",FFA500:"Оранжевий",FFFF00:"Яскравожовтий","00FF00":"Салатовий",AFEEEE:"Світлобірюзовий",ADD8E6:"Блакитний",DDA0DD:"Світлофіолетовий",D3D3D3:"Сріблястий",FFF0F5:"Світлорожевий",FAEBD7:"Світлооранжевий",FFFFE0:"Світложовтий",F0FFF0:"Світлозелений",F0FFFF:"Світлий синьо-зелений",F0F8FF:"Світлоблакитний",E6E6FA:"Лавандовий",FFF:"Білий"},more:"Кольори...",panelTitle:"Кольори",textColorTitle:"Колір тексту"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/vi.js deleted file mode 100644 index ee992873..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/vi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","vi",{auto:"Tự động",bgColorTitle:"Màu nền",colors:{"000":"Đen",8E5:"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo",696969:"Dark Gray",B22222:"Fire Brick",A52A2A:"Nâu",DAA520:"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue",800080:"Purple",808080:"Xám",F00:"Đỏ",FF8C00:"Dark Orange",FFD700:"Vàng","008000":"Xanh lá cây","0FF":"Cyan","00F":"Xanh da trời",EE82EE:"Tím",A9A9A9:"Xám tối", -FFA07A:"Light Salmon",FFA500:"Màu cam",FFFF00:"Vàng","00FF00":"Lime",AFEEEE:"Pale Turquoise",ADD8E6:"Light Blue",DDA0DD:"Plum",D3D3D3:"Light Grey",FFF0F5:"Lavender Blush",FAEBD7:"Antique White",FFFFE0:"Light Yellow",F0FFF0:"Honeydew",F0FFFF:"Azure",F0F8FF:"Alice Blue",E6E6FA:"Lavender",FFF:"Trắng"},more:"Màu khác...",panelTitle:"Màu sắc",textColorTitle:"Màu chữ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js deleted file mode 100644 index f36e793e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","zh-cn",{auto:"自动",bgColorTitle:"背景颜色",colors:{"000":"黑",8E5:"褐红","8B4513":"深褐","2F4F4F":"墨绿","008080":"绿松石","000080":"海军蓝","4B0082":"靛蓝",696969:"暗灰",B22222:"砖红",A52A2A:"褐",DAA520:"金黄","006400":"深绿","40E0D0":"蓝绿","0000CD":"中蓝",800080:"紫",808080:"灰",F00:"红",FF8C00:"深橙",FFD700:"金","008000":"绿","0FF":"青","00F":"蓝",EE82EE:"紫罗兰",A9A9A9:"深灰",FFA07A:"亮橙",FFA500:"橙",FFFF00:"黄","00FF00":"水绿",AFEEEE:"粉蓝",ADD8E6:"亮蓝",DDA0DD:"梅红",D3D3D3:"淡灰",FFF0F5:"淡紫红",FAEBD7:"古董白",FFFFE0:"淡黄", -F0FFF0:"蜜白",F0FFFF:"天蓝",F0F8FF:"淡蓝",E6E6FA:"淡紫",FFF:"白"},more:"其它颜色...",panelTitle:"颜色",textColorTitle:"文本颜色"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh.js deleted file mode 100644 index e1fb6831..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("colorbutton","zh",{auto:"自動",bgColorTitle:"背景顏色",colors:{"000":"黑色",8E5:"栗色","8B4513":"鞍褐色","2F4F4F":"暗瓦灰色","008080":"水壓色","000080":"丈青澀","4B0082":"靛青",696969:"深灰色",B22222:"磚紅色",A52A2A:"褐色",DAA520:"金黃色","006400":"深綠色","40E0D0":"青綠色","0000CD":"藍色",800080:"紫色",808080:"灰色",F00:"紅色",FF8C00:"深橘色",FFD700:"金色","008000":"綠色","0FF":"藍綠色","00F":"藍色",EE82EE:"紫色",A9A9A9:"暗灰色",FFA07A:"亮鮭紅",FFA500:"橘色",FFFF00:"黃色","00FF00":"鮮綠色",AFEEEE:"綠松色",ADD8E6:"淺藍色",DDA0DD:"枚紅色",D3D3D3:"淺灰色",FFF0F5:"淺紫色", -FAEBD7:"骨董白",FFFFE0:"淺黃色",F0FFF0:"蜜瓜綠",F0FFFF:"天藍色",F0F8FF:"愛麗斯蘭",E6E6FA:"淺紫色",FFF:"白色"},more:"更多顏色",panelTitle:"顏色",textColorTitle:"文字顏色"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/colorbutton/plugin.js deleted file mode 100644 index 3d80f61a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colorbutton/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"bgcolor,textcolor",hidpi:!0,init:function(c){function o(m,g,d,h){var i=new CKEDITOR.style(j["colorButton_"+g+"Style"]),k=CKEDITOR.tools.getNextId()+"_colorBox";c.ui.add(m,CKEDITOR.UI_PANELBUTTON,{label:d, -title:d,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+h,allowedContent:i,requiredContent:i,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":f.panelTitle}},onBlock:function(a,b){b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(q(a,g,k));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var e=b.keys,d="rtl"==c.lang.dir;e[d?37:39]="next";e[40]="next";e[9]="next";e[d?39:37]="prev";e[38]="prev";e[CKEDITOR.SHIFT+ -9]="prev";e[32]="click"},refresh:function(){c.activeFilter.check(i)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=c.getSelection(),a=a&&a.getStartElement(),a=c.elementPath(a),b;if(a){a=a.block||a.blockLimit||c.document.getBody();do b=a&&a.getComputedStyle("back"==g?"background-color":"color")||"transparent";while("back"==g&&"transparent"==b&&a&&(a=a.getParent()));if(!b||"transparent"==b)b="#ffffff";this._.panel._.iframe.getFrameDocument().getById(k).setStyle("background-color", -b);return b}}})}function q(m,g,d){var h=[],i=j.colorButton_colors.split(","),k=c.plugins.colordialog&&!1!==j.colorButton_enableMore,a=i.length+(k?2:1),b=CKEDITOR.tools.addFunction(function(a,b){if("?"==a){var e=arguments.callee,d=function(a){this.removeListener("ok",d);this.removeListener("cancel",d);"ok"==a.name&&e(this.getContentElement("picker","selectedColor").getValue(),b)};c.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)})}else{c.focus();m.hide();c.fire("saveSnapshot"); -c.removeStyle(new CKEDITOR.style(j["colorButton_"+b+"Style"],{color:"inherit"}));if(a){var f=j["colorButton_"+b+"Style"];f.childRule="back"==b?function(a){return p(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||p(a)};c.applyStyle(new CKEDITOR.style(f,{color:a}))}c.fire("saveSnapshot")}});h.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',f.auto,'" onclick="CKEDITOR.tools.callFunction(',b,",null,'",g,"');return false;\" href=\"javascript:void('",f.auto,'\')" role="option" aria-posinset="1" aria-setsize="', -a,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',d,'"></span></td><td colspan=7 align=center>',f.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');for(d=0;d<i.length;d++){0===d%8&&h.push("</tr><tr>");var e=i[d].split("/"),l=e[0],n=e[1]||l;e[1]||(l="#"+l.replace(/^(.)(.)(.)$/,"$1$1$2$2$3$3"));e=c.lang.colorbutton.colors[n]||n;h.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="', -e,'" onclick="CKEDITOR.tools.callFunction(',b,",'",l,"','",g,"'); return false;\" href=\"javascript:void('",e,'\')" role="option" aria-posinset="',d+2,'" aria-setsize="',a,'"><span class="cke_colorbox" style="background-color:#',n,'"></span></a></td>')}k&&h.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',f.more,'" onclick="CKEDITOR.tools.callFunction(',b,",'?','",g,"');return false;\" href=\"javascript:void('",f.more,"')\"",' role="option" aria-posinset="', -a,'" aria-setsize="',a,'">',f.more,"</a></td>");h.push("</tr></table>");return h.join("")}function p(c){return"false"==c.getAttribute("contentEditable")||c.getAttribute("data-nostyle")}var j=c.config,f=c.lang.colorbutton;CKEDITOR.env.hc||(o("TextColor","fore",f.textColorTitle,10),o("BGColor","back",f.bgColorTitle,20))}});CKEDITOR.config.colorButton_colors="000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF"; -CKEDITOR.config.colorButton_foreStyle={element:"span",styles:{color:"#(color)"},overrides:[{element:"font",attributes:{color:null}}]};CKEDITOR.config.colorButton_backStyle={element:"span",styles:{"background-color":"#(color)"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js deleted file mode 100644 index d91dcc65..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/dialogs/colordialog.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("colordialog",function(t){function n(){f.getById(o).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");j&&j.removeAttribute("aria-selected");j=null}function u(a){var a=a.data.getTarget(),b;if("td"==a.getName()&&(b=a.getChild(0).getHtml()))j=a,j.setAttribute("aria-selected",!0),p.getContentElement("picker","selectedColor").setValue(b)}function y(a){for(var a=a.replace(/^#/,""),b=0,c=[];2>=b;b++)c[b]=parseInt(a.substr(2*b,2),16);return"#"+ -(165<=0.2126*c[0]+0.7152*c[1]+0.0722*c[2]?"000":"fff")}function v(a){!a.name&&(a=new CKEDITOR.event(a));var b=!/mouse/.test(a.name),c=a.data.getTarget(),e;if("td"==c.getName()&&(e=c.getChild(0).getHtml()))q(a),b?g=c:w=c,b&&(c.setStyle("border-color",y(e)),c.setStyle("border-style","dotted")),f.getById(k).setStyle("background-color",e),f.getById(l).setHtml(e)}function q(a){if(a=!/mouse/.test(a.name)&&g){var b=a.getChild(0).getHtml();a.setStyle("border-color",b);a.setStyle("border-style","solid")}!g&& -!w&&(f.getById(k).removeStyle("background-color"),f.getById(l).setHtml("&nbsp;"))}function z(a){var b=a.data,c=b.getTarget(),e=b.getKeystroke(),d="rtl"==t.lang.dir;switch(e){case 38:if(a=c.getParent().getPrevious())a=a.getChild([c.getIndex()]),a.focus();b.preventDefault();break;case 40:if(a=c.getParent().getNext())(a=a.getChild([c.getIndex()]))&&1==a.type&&a.focus();b.preventDefault();break;case 32:case 13:u(a);b.preventDefault();break;case d?37:39:if(a=c.getNext())1==a.type&&(a.focus(),b.preventDefault(!0)); -else if(a=c.getParent().getNext())if((a=a.getChild([0]))&&1==a.type)a.focus(),b.preventDefault(!0);break;case d?39:37:if(a=c.getPrevious())a.focus(),b.preventDefault(!0);else if(a=c.getParent().getPrevious())a=a.getLast(),a.focus(),b.preventDefault(!0)}}var r=CKEDITOR.dom.element,f=CKEDITOR.document,h=t.lang.colordialog,p,x={type:"html",html:"&nbsp;"},j,g,w,m=function(a){return CKEDITOR.tools.getNextId()+"_"+a},k=m("hicolor"),l=m("hicolortext"),o=m("selhicolor"),i;(function(){function a(a,d){for(var s= -a;s<a+3;s++){var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var f=d;f<d+3;f++)for(var g=0;6>g;g++)b(e.$,"#"+c[f]+c[g]+c[s])}}function b(a,c){var b=new r(a.insertCell(-1));b.setAttribute("class","ColorCell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",z);b.on("click",u);b.on("focus",v);b.on("blur",q);b.setStyle("background-color",c);b.setStyle("border","1px solid "+c);b.setStyle("width","14px");b.setStyle("height","14px");var d=m("color_table_cell"); -b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+c+"</span>",CKEDITOR.document))}i=CKEDITOR.dom.element.createFromHtml('<table tabIndex="-1" aria-label="'+h.options+'" role="grid" style="border-collapse:separate;" cellspacing="0"><caption class="cke_voice_label">'+h.options+'</caption><tbody role="presentation"></tbody></table>');i.on("mouseover",v);i.on("mouseout",q);var c="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0, -3);a(3,3);var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var d=0;6>d;d++)b(e.$,"#"+c[d]+c[d]+c[d]);for(d=0;12>d;d++)b(e.$,"#000000")})();return{title:h.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){n();var a=g.getChild(0).getHtml();g.setStyle("border-color",a);g.setStyle("border-style","solid");f.getById(k).removeStyle("background-color");f.getById(l).setHtml("&nbsp;");g=null},contents:[{id:"picker",label:h.title,accessKey:"I",elements:[{type:"hbox", -padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"<div></div>",onLoad:function(){CKEDITOR.document.getById(this.domId).append(i)},focus:function(){(g||this.getElement().getElementsByTag("td").getItem(0)).focus()}},x,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"<span>"+h.highlight+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+k+'" style="border: 1px solid; height: 74px; width: 74px;"></div>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+l+'">&nbsp;</div><span>'+h.selected+ -'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+o+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'},{type:"text",label:h.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{f.getById(o).setStyle("background-color",this.getValue())}catch(a){n()}}},x,{type:"button",id:"clear",label:h.clear,onClick:n}]}]}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/af.js deleted file mode 100644 index 9a6d5746..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","af",{clear:"Herstel",highlight:"Aktief",options:"Kleuropsies",selected:"Geselekteer",title:"Kies kleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ar.js deleted file mode 100644 index 3b4a4977..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ar",{clear:"مسح",highlight:"تحديد",options:"اختيارات الألوان",selected:"اللون المختار",title:"اختر اللون"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bg.js deleted file mode 100644 index f57a3a9c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bg",{clear:"Изчистване",highlight:"Осветяване",options:"Цветови опции",selected:"Изберете цвят",title:"Изберете цвят"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bn.js deleted file mode 100644 index 1cd50972..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bs.js deleted file mode 100644 index e8ea577b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","bs",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ca.js deleted file mode 100644 index 9e76e9e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ca",{clear:"Neteja",highlight:"Destacat",options:"Opcions del color",selected:"Color Seleccionat",title:"Seleccioni el color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cs.js deleted file mode 100644 index 4de1f1fc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","cs",{clear:"Vyčistit",highlight:"Zvýraznit",options:"Nastavení barvy",selected:"Vybráno",title:"Výběr barvy"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cy.js deleted file mode 100644 index 6536226b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","cy",{clear:"Clirio",highlight:"Uwcholeuo",options:"Opsiynau Lliw",selected:"Lliw a Ddewiswyd",title:"Dewis lliw"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/da.js deleted file mode 100644 index df1c5c85..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","da",{clear:"Nulstil",highlight:"Markér",options:"Farvemuligheder",selected:"Valgt farve",title:"Vælg farve"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/de.js deleted file mode 100644 index 7ccd5b6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","de",{clear:"Entfernen",highlight:"Hervorheben",options:"Farbeoptionen",selected:"Ausgewählte Farbe",title:"Farbe wählen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/el.js deleted file mode 100644 index 1447a1c4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","el",{clear:"Εκκαθάριση",highlight:"Σήμανση",options:"Επιλογές Χρωμάτων",selected:"Επιλεγμένο Χρώμα",title:"Επιλογή χρώματος"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-au.js deleted file mode 100644 index cdde12b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-au",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js deleted file mode 100644 index 535acfca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-ca",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js deleted file mode 100644 index 1ec95ff2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en-gb",{clear:"Clear",highlight:"Highlight",options:"Colour Options",selected:"Selected Colour",title:"Select colour"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en.js deleted file mode 100644 index 21a79bc0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","en",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eo.js deleted file mode 100644 index aaa8cf96..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","eo",{clear:"Forigi",highlight:"Detaloj",options:"Opcioj pri koloroj",selected:"Selektita koloro",title:"Selekti koloron"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/es.js deleted file mode 100644 index ae4688f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","es",{clear:"Borrar",highlight:"Muestra",options:"Opciones de colores",selected:"Elegido",title:"Elegir color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/et.js deleted file mode 100644 index 4a51ac6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","et",{clear:"Eemalda",highlight:"Näidis",options:"Värvi valikud",selected:"Valitud värv",title:"Värvi valimine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eu.js deleted file mode 100644 index 09a91290..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","eu",{clear:"Garbitu",highlight:"Nabarmendu",options:"Kolore Aukerak",selected:"Hautatutako Kolorea",title:"Kolorea Hautatu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fa.js deleted file mode 100644 index 8b0de9df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fa",{clear:"پاک کردن",highlight:"متمایز",options:"گزینه​های رنگ",selected:"رنگ انتخاب شده",title:"انتخاب رنگ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fi.js deleted file mode 100644 index 8a9a1fe3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fi",{clear:"Poista",highlight:"Korostus",options:"Värin ominaisuudet",selected:"Valittu",title:"Valitse väri"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fo.js deleted file mode 100644 index 575a9d47..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fo",{clear:"Strika",highlight:"Framheva",options:"Litmøguleikar",selected:"Valdur litur",title:"Vel lit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js deleted file mode 100644 index d321a839..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fr-ca",{clear:"Effacer",highlight:"Surligner",options:"Options de couleur",selected:"Couleur sélectionnée",title:"Choisir une couleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr.js deleted file mode 100644 index b99e1b92..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","fr",{clear:"Effacer",highlight:"Détails",options:"Option des couleurs",selected:"Couleur choisie",title:"Choisir une couleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gl.js deleted file mode 100644 index 13fcd5fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","gl",{clear:"Limpar",highlight:"Resaltar",options:"Opcións de cor",selected:"Cor seleccionado",title:"Seleccione unha cor"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gu.js deleted file mode 100644 index 658cb5a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","gu",{clear:"સાફ કરવું",highlight:"હાઈઈટ",options:"રંગના વિકલ્પ",selected:"પસંદ કરેલો રંગ",title:"રંગ પસંદ કરો"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/he.js deleted file mode 100644 index c5700716..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","he",{clear:"ניקוי",highlight:"סימון",options:"אפשרויות צבע",selected:"בחירה",title:"בחירת צבע"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hi.js deleted file mode 100644 index d14f1a84..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hi",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hr.js deleted file mode 100644 index 5a99c466..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hr",{clear:"Očisti",highlight:"Istaknuto",options:"Opcije boje",selected:"Odabrana boja",title:"Odaberi boju"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hu.js deleted file mode 100644 index f905e8f0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","hu",{clear:"Ürítés",highlight:"Nagyítás",options:"Szín opciók",selected:"Kiválasztott",title:"Válasszon színt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/is.js deleted file mode 100644 index 35044395..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","is",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/it.js deleted file mode 100644 index cb5ca860..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","it",{clear:"cancella",highlight:"Evidenzia",options:"Opzioni colore",selected:"Seleziona il colore",title:"Selezionare il colore"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ja.js deleted file mode 100644 index 01f28518..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ja",{clear:"クリア",highlight:"ハイライト",options:"カラーオプション",selected:"選択された色",title:"色選択"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ka.js deleted file mode 100644 index d11c4849..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ka",{clear:"გასუფთავება",highlight:"ჩვენება",options:"ფერის პარამეტრები",selected:"არჩეული ფერი",title:"ფერის შეცვლა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/km.js deleted file mode 100644 index 9be3d0f0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","km",{clear:"សម្អាត",highlight:"បន្លិច​ពណ៌",options:"ជម្រើស​ពណ៌",selected:"ពណ៌​ដែល​បាន​រើស",title:"រើស​ពណ៌"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ko.js deleted file mode 100644 index 25715bf3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ko",{clear:"제거",highlight:"하이라이트",options:"색상 옵션",selected:"색상 선택됨",title:"색상 선택"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ku.js deleted file mode 100644 index 5b590758..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ku",{clear:"پاکیکەوە",highlight:"نیشانکردن",options:"هەڵبژاردەی ڕەنگەکان",selected:"ڕەنگی هەڵبژێردراو",title:"هەڵبژاردنی ڕەنگ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lt.js deleted file mode 100644 index 4e3f2506..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","lt",{clear:"Išvalyti",highlight:"Paryškinti",options:"Spalvos nustatymai",selected:"Pasirinkta spalva",title:"Pasirinkite spalvą"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lv.js deleted file mode 100644 index 0e4c7b8b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","lv",{clear:"Notīrīt",highlight:"Paraugs",options:"Krāsas uzstādījumi",selected:"Izvēlētā krāsa",title:"Izvēlies krāsu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mk.js deleted file mode 100644 index 870e2325..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","mk",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mn.js deleted file mode 100644 index 0547d82c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","mn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ms.js deleted file mode 100644 index 65c6e817..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ms",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nb.js deleted file mode 100644 index dab73fd5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","nb",{clear:"Tøm",highlight:"Merk",options:"Alternativer for farge",selected:"Valgt",title:"Velg farge"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nl.js deleted file mode 100644 index c2ed1223..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","nl",{clear:"Wissen",highlight:"Actief",options:"Kleuropties",selected:"Geselecteerde kleur",title:"Selecteer kleur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/no.js deleted file mode 100644 index 7a853026..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","no",{clear:"Tøm",highlight:"Merk",options:"Alternativer for farge",selected:"Valgt",title:"Velg farge"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pl.js deleted file mode 100644 index 3be00f6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pl",{clear:"Wyczyść",highlight:"Zaznacz",options:"Opcje koloru",selected:"Wybrany",title:"Wybierz kolor"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js deleted file mode 100644 index 90c14fd7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pt-br",{clear:"Limpar",highlight:"Grifar",options:"Opções de Cor",selected:"Cor Selecionada",title:"Selecione uma Cor"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt.js deleted file mode 100644 index ac11b30d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","pt",{clear:"Limpar",highlight:"Realçar",options:"Opções da Cor",selected:"Cor Selecionada",title:"Selecionar Cor"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ro.js deleted file mode 100644 index 85d83ffb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ro",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ru.js deleted file mode 100644 index 7fe16d27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ru",{clear:"Очистить",highlight:"Под курсором",options:"Настройки цвета",selected:"Выбранный цвет",title:"Выберите цвет"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/si.js deleted file mode 100644 index 54bb6924..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","si",{clear:"පැහැදිලි",highlight:"මතුකර පෙන්වන්න",options:"වර්ණ විකල්ප",selected:"තෙරු වර්ණ",title:"වර්ණ තෝරන්න"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sk.js deleted file mode 100644 index be5f13a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sk",{clear:"Vyčistiť",highlight:"Zvýrazniť",options:"Možnosti farby",selected:"Vybraná farba",title:"Vyberte farbu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sl.js deleted file mode 100644 index 610c269a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sl",{clear:"Počisti",highlight:"Poudarjeno",options:"Barvne Možnosti",selected:"Izbrano",title:"Izberi barvo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sq.js deleted file mode 100644 index f739ac4d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sq",{clear:"Pastro",highlight:"Thekso",options:"Përzgjedhjet e Ngjyrave",selected:"Ngjyra e Përzgjedhur",title:"Përzgjidh një ngjyrë"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js deleted file mode 100644 index cd518c98..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sr-latn",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr.js deleted file mode 100644 index 227ed2ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sr",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sv.js deleted file mode 100644 index d527156a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","sv",{clear:"Rensa",highlight:"Markera",options:"Färgalternativ",selected:"Vald färg",title:"Välj färg"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/th.js deleted file mode 100644 index 8f352d9d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","th",{clear:"Clear",highlight:"Highlight",options:"Color Options",selected:"Selected Color",title:"Select color"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tr.js deleted file mode 100644 index c416c061..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","tr",{clear:"Temizle",highlight:"İşaretle",options:"Renk Seçenekleri",selected:"Seçilmiş",title:"Renk seç"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tt.js deleted file mode 100644 index df9d32ae..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","tt",{clear:"Бушату",highlight:"Билгеләү",options:"Төс көйләүләре",selected:"Сайланган төсләр",title:"Төс сайлау"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ug.js deleted file mode 100644 index f89a948c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","ug",{clear:"تازىلا",highlight:"يورۇت",options:"رەڭ تاللانمىسى",selected:"رەڭ تاللاڭ",title:"رەڭ تاللاڭ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/uk.js deleted file mode 100644 index c59d1de8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","uk",{clear:"Очистити",highlight:"Колір, на який вказує курсор",options:"Опції кольорів",selected:"Обраний колір",title:"Обрати колір"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/vi.js deleted file mode 100644 index dae8623e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","vi",{clear:"Xóa bỏ",highlight:"Màu chọn",options:"Tùy chọn màu",selected:"Màu đã chọn",title:"Chọn màu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js deleted file mode 100644 index 25e3b000..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","zh-cn",{clear:"清除",highlight:"高亮",options:"颜色选项",selected:"选择颜色",title:"选择颜色"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh.js deleted file mode 100644 index 57868b94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("colordialog","zh",{clear:"清除",highlight:"高亮",options:"色彩選項",selected:"選取的色彩",title:"選取色彩"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/colordialog/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/colordialog/plugin.js deleted file mode 100644 index 9f393004..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/colordialog/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.colordialog={requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(b){var c=new CKEDITOR.dialogCommand("colordialog");c.editorFocus=!1;b.addCommand("colordialog",c);CKEDITOR.dialog.add("colordialog",this.path+"dialogs/colordialog.js");b.getColorFromDialog=function(c,f){var d=function(a){this.removeListener("ok", -d);this.removeListener("cancel",d);a="ok"==a.name?this.getValueOf("picker","selectedColor"):null;c.call(f,a)},e=function(a){a.on("ok",d);a.on("cancel",d)};b.execCommand("colordialog");if(b._.storedDialogs&&b._.storedDialogs.colordialog)e(b._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(a){if("colordialog"==a.data.name){var b=a.data.definition;a.removeListener();b.onLoad=CKEDITOR.tools.override(b.onLoad,function(a){return function(){e(this);b.onLoad=a;"function"==typeof a&& -a.call(this)}})}})}}};CKEDITOR.plugins.add("colordialog",CKEDITOR.plugins.colordialog); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt deleted file mode 100644 index 8e09cb23..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/_translationstatus.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -bg.js Found: 5 Missing: 0 -cs.js Found: 5 Missing: 0 -cy.js Found: 5 Missing: 0 -da.js Found: 5 Missing: 0 -de.js Found: 5 Missing: 0 -el.js Found: 5 Missing: 0 -eo.js Found: 5 Missing: 0 -et.js Found: 5 Missing: 0 -fa.js Found: 5 Missing: 0 -fi.js Found: 5 Missing: 0 -fr.js Found: 5 Missing: 0 -gu.js Found: 5 Missing: 0 -he.js Found: 5 Missing: 0 -hr.js Found: 5 Missing: 0 -it.js Found: 5 Missing: 0 -nb.js Found: 5 Missing: 0 -nl.js Found: 5 Missing: 0 -no.js Found: 5 Missing: 0 -pl.js Found: 5 Missing: 0 -tr.js Found: 5 Missing: 0 -ug.js Found: 5 Missing: 0 -uk.js Found: 5 Missing: 0 -vi.js Found: 5 Missing: 0 -zh-cn.js Found: 5 Missing: 0 diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ar.js deleted file mode 100644 index c781fcfc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ar",{title:"معلومات العنصر",dialogName:"إسم نافذة الحوار",tabName:"إسم التبويب",elementId:"إسم العنصر",elementType:"نوع العنصر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/bg.js deleted file mode 100644 index 6432b5d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","bg",{title:"Информация за елемента",dialogName:"Име на диалоговия прозорец",tabName:"Име на таб",elementId:"ID на елемента",elementType:"Тип на елемента"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ca.js deleted file mode 100644 index 7505a8d8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ca",{title:"Informació de l'element",dialogName:"Nom de la finestra de quadre de diàleg",tabName:"Nom de la pestanya",elementId:"ID de l'element",elementType:"Tipus d'element"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cs.js deleted file mode 100644 index 5a2573fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","cs",{title:"Informace o prvku",dialogName:"Název dialogového okna",tabName:"Název karty",elementId:"ID prvku",elementType:"Typ prvku"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cy.js deleted file mode 100644 index ffd1c8ac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","cy",{title:"Gwybodaeth am yr Elfen",dialogName:"Enw ffenestr y deialog",tabName:"Enw'r tab",elementId:"ID yr Elfen",elementType:"Math yr elfen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/da.js deleted file mode 100644 index 5bac0651..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","da",{title:"Information på elementet",dialogName:"Dialogboks",tabName:"Tab beskrivelse",elementId:"ID på element",elementType:"Type af element"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/de.js deleted file mode 100644 index 6b350ca3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","de",{title:"Elementinformation",dialogName:"Dialogfenstername",tabName:"Reitername",elementId:"Element ID",elementType:"Elementtyp"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/el.js deleted file mode 100644 index 3b53133d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","el",{title:"Πληροφορίες Στοιχείου",dialogName:"Όνομα παραθύρου διαλόγου",tabName:"Όνομα καρτέλας",elementId:"Αναγνωριστικό Στοιχείου",elementType:"Τύπος στοιχείου"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en-gb.js deleted file mode 100644 index bdadf923..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","en-gb",{title:"Element Information",dialogName:"Dialogue window name",tabName:"Tab name",elementId:"Element ID",elementType:"Element type"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en.js deleted file mode 100644 index e3022855..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","en",{title:"Element Information",dialogName:"Dialog window name",tabName:"Tab name",elementId:"Element ID",elementType:"Element type"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eo.js deleted file mode 100644 index bc67c556..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","eo",{title:"Informo pri la elemento",dialogName:"Nomo de la dialogfenestro",tabName:"Langetnomo",elementId:"ID de la elemento",elementType:"Tipo de la elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/es.js deleted file mode 100644 index 681809ed..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","es",{title:"Información del Elemento",dialogName:"Nombre de la ventana de diálogo",tabName:"Nombre de la pestaña",elementId:"ID del Elemento",elementType:"Tipo del elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/et.js deleted file mode 100644 index 548e5865..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","et",{title:"Elemendi andmed",dialogName:"Dialoogiakna nimi",tabName:"Saki nimi",elementId:"Elemendi ID",elementType:"Elemendi liik"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eu.js deleted file mode 100644 index ec05883a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","eu",{title:"Elementuaren Informazioa",dialogName:"Elkarrizketa leihoaren izena",tabName:"Fitxaren izena",elementId:"Elementuaren ID-a",elementType:"Elementu mota"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fa.js deleted file mode 100644 index d89f8fe3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fa",{title:"اطلاعات عنصر",dialogName:"نام پنجره محاوره‌ای",tabName:"نام برگه",elementId:"ID عنصر",elementType:"نوع عنصر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fi.js deleted file mode 100644 index 0eef32cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fi",{title:"Elementin tiedot",dialogName:"Dialogi-ikkunan nimi",tabName:"Välilehden nimi",elementId:"Elementin ID",elementType:"Elementin tyyppi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js deleted file mode 100644 index 074bd4f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fr-ca",{title:"Information de l'élément",dialogName:"Nom de la fenêtre",tabName:"Nom de l'onglet",elementId:"ID de l'élément",elementType:"Type de l'élément"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr.js deleted file mode 100644 index b0686908..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","fr",{title:"Information sur l'élément",dialogName:"Nom de la fenêtre de dialogue",tabName:"Nom de l'onglet",elementId:"ID de l'élément",elementType:"Type de l'élément"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gl.js deleted file mode 100644 index 11e1c2a6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","gl",{title:"Información do elemento",dialogName:"Nome da xanela de diálogo",tabName:"Nome da lapela",elementId:"ID do elemento",elementType:"Tipo do elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gu.js deleted file mode 100644 index e7ef6677..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/gu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","gu",{title:"પ્રાથમિક માહિતી",dialogName:"વિન્ડોનું નામ",tabName:"ટેબનું નામ",elementId:"પ્રાથમિક આઈડી",elementType:"પ્રાથમિક પ્રકાર"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/he.js deleted file mode 100644 index aaf968ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","he",{title:"מידע על האלמנט",dialogName:"שם הדיאלוג",tabName:"שם הטאב",elementId:"ID של האלמנט",elementType:"סוג האלמנט"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hr.js deleted file mode 100644 index 0ec29f36..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","hr",{title:"Informacije elementa",dialogName:"Naziv prozora za dijalog",tabName:"Naziva jahača",elementId:"ID elementa",elementType:"Vrsta elementa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hu.js deleted file mode 100644 index 2f3c5653..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","hu",{title:"Elem információ",dialogName:"Párbeszédablak neve",tabName:"Fül neve",elementId:"Elem ID",elementType:"Elem típusa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/id.js deleted file mode 100644 index e988b2f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","id",{title:"Informasi Elemen",dialogName:"Nama jendela dialog",tabName:"Nama tab",elementId:"ID Elemen",elementType:"Tipe elemen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/it.js deleted file mode 100644 index 79a18eab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","it",{title:"Informazioni elemento",dialogName:"Nome finestra di dialogo",tabName:"Nome Tab",elementId:"ID Elemento",elementType:"Tipo elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ja.js deleted file mode 100644 index 6e7bc0fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ja",{title:"エレメント情報",dialogName:"ダイアログウィンドウ名",tabName:"タブ名",elementId:"エレメントID",elementType:"要素タイプ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/km.js deleted file mode 100644 index d9de2802..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","km",{title:"ព័ត៌មាន​នៃ​ធាតុ",dialogName:"ឈ្មោះ​ប្រអប់​វីនដូ",tabName:"ឈ្មោះ​ផ្ទាំង",elementId:"អត្តលេខ​ធាតុ",elementType:"ប្រភេទ​ធាតុ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ko.js deleted file mode 100644 index a41c6a8e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ko",{title:"구성 요소 정보",dialogName:"다이얼로그 윈도우 이름",tabName:"탭 이름",elementId:"요소 ID",elementType:"요소 형식"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ku.js deleted file mode 100644 index 12372f43..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ku",{title:"زانیاری توخم",dialogName:"ناوی پەنجەرەی دیالۆگ",tabName:"ناوی بازدەر تاب",elementId:"ناسنامەی توخم",elementType:"جۆری توخم"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lt.js deleted file mode 100644 index 8ed88b6f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","lt",{title:"Elemento informacija",dialogName:"Dialogo lango pavadinimas",tabName:"Auselės pavadinimas",elementId:"Elemento ID",elementType:"Elemento tipas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lv.js deleted file mode 100644 index 95a2d235..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","lv",{title:"Elementa informācija",dialogName:"Dialoga loga nosaukums",tabName:"Cilnes nosaukums",elementId:"Elementa ID",elementType:"Elementa tips"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nb.js deleted file mode 100644 index 0a8bd3d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","nb",{title:"Elementinformasjon",dialogName:"Navn på dialogvindu",tabName:"Navn på fane",elementId:"Element-ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nl.js deleted file mode 100644 index 587fedfb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","nl",{title:"Elementinformatie",dialogName:"Naam dialoogvenster",tabName:"Tabnaam",elementId:"Element ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/no.js deleted file mode 100644 index 7461a121..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","no",{title:"Elementinformasjon",dialogName:"Navn på dialogvindu",tabName:"Navn på fane",elementId:"Element-ID",elementType:"Elementtype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pl.js deleted file mode 100644 index 1ef3d228..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pl",{title:"Informacja o elemencie",dialogName:"Nazwa okna dialogowego",tabName:"Nazwa zakładki",elementId:"ID elementu",elementType:"Typ elementu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt-br.js deleted file mode 100644 index f75850fc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pt-br",{title:"Informação do Elemento",dialogName:"Nome da janela de diálogo",tabName:"Nome da aba",elementId:"ID do Elemento",elementType:"Tipo do elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt.js deleted file mode 100644 index a9c96a8c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","pt",{title:"Informação do Elemento",dialogName:"Nome da janela do diálogo",tabName:"Nome do Separador",elementId:"Id. do Elemento",elementType:"Tipo de Elemento"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ru.js deleted file mode 100644 index 36c4b1de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ru",{title:"Информация об элементе",dialogName:"Имя окна диалога",tabName:"Имя вкладки",elementId:"ID элемента",elementType:"Тип элемента"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/si.js deleted file mode 100644 index a1fb3707..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","si",{title:"මුලද්‍රව්‍ය ",dialogName:"දෙබස් කවුළුවේ නම",tabName:"තීරුවේ නම",elementId:"මුලද්‍රව්‍ය කේතය",elementType:"මුලද්‍රව්‍ය වර්ගය"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sk.js deleted file mode 100644 index e80a613d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sk",{title:"Informácie o prvku",dialogName:"Názov okna dialógu",tabName:"Názov záložky",elementId:"ID prvku",elementType:"Typ prvku"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sl.js deleted file mode 100644 index 6f1df087..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sl",{title:"Podatki elementa",dialogName:"Ime pogovornega okna",tabName:"Ime zavihka",elementId:"ID elementa",elementType:"Tip elementa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sq.js deleted file mode 100644 index bb173c47..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sq",{title:"Të dhënat e elementit",dialogName:"Emri i dritares së dialogut",tabName:"Emri i fletës",elementId:"ID e elementit",elementType:"Lloji i elementit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sv.js deleted file mode 100644 index 1c73e5e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","sv",{title:"Elementinformation",dialogName:"Dialogrutans namn",tabName:"Fliknamn",elementId:"Elementet-ID",elementType:"Elementet-typ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tr.js deleted file mode 100644 index 293d3ced..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","tr",{title:"Eleman Bilgisi",dialogName:"İletişim pencere ismi",tabName:"Sekme adı",elementId:"Eleman ID",elementType:"Eleman türü"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tt.js deleted file mode 100644 index e3f94b34..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","tt",{title:"Элемент тасвирламасы",dialogName:"Диалог тәрәзәсе исеме",tabName:"Өстәмә бит исеме",elementId:"Элемент идентификаторы",elementType:"Элемент төре"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ug.js deleted file mode 100644 index b5c98762..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","ug",{title:"ئېلېمېنت ئۇچۇرى",dialogName:"سۆزلەشكۈ كۆزنەك ئاتى",tabName:"Tab ئاتى",elementId:"ئېلېمېنت كىملىكى",elementType:"ئېلېمېنت تىپى"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/uk.js deleted file mode 100644 index 3974ef87..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","uk",{title:"Відомості про Елемент",dialogName:"Заголовок діалогового вікна",tabName:"Назва вкладки",elementId:"Ідентифікатор Елемента",elementType:"Тип Елемента"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/vi.js deleted file mode 100644 index 08076e51..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","vi",{title:"Thông tin thành ph",dialogName:"Tên hộp tho",tabName:"Tên th",elementId:"Mã thành ph",elementType:"Loại thành ph"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js deleted file mode 100644 index ae1b8e0b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","zh-cn",{title:"元素信息",dialogName:"对话框窗口名称",tabName:"选项卡名称",elementId:"元素 ID",elementType:"元素类型"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh.js deleted file mode 100644 index 613e9edf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("devtools","zh",{title:"元件資訊",dialogName:"對話視窗名稱",tabName:"標籤名稱",elementId:"元件 ID",elementType:"元件類型"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/devtools/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/devtools/plugin.js deleted file mode 100644 index be0a2de6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/devtools/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("devtools",{lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,gu,he,hr,hu,id,it,ja,km,ko,ku,lt,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn",init:function(i){i._.showDialogDefinitionTooltips=1},onLoad:function(){CKEDITOR.document.appendStyleText(CKEDITOR.config.devtools_styles||"#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }#cke_tooltip ul { padding: 0pt; list-style-type: none; }")}}); -(function(){function i(a,c,b,f){var a=a.lang.devtools,j='<a href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.definition.'+(b?"text"==b.type?"textInput":b.type:"content")+'" target="_blank">'+(b?b.type:"content")+"</a>",c="<h2>"+a.title+"</h2><ul><li><strong>"+a.dialogName+"</strong> : "+c.getName()+"</li><li><strong>"+a.tabName+"</strong> : "+f+"</li>";b&&(c+="<li><strong>"+a.elementId+"</strong> : "+b.id+"</li>");c+="<li><strong>"+a.elementType+"</strong> : "+j+"</li>";return c+"</ul>"}function k(d, -c,b,f,j,g){var e=c.getDocumentPosition(),h={"z-index":CKEDITOR.dialog._.currentZIndex+10,top:e.y+c.getSize("height")+"px"};a.setHtml(d(b,f,j,g));a.show();"rtl"==b.lang.dir?(d=CKEDITOR.document.getWindow().getViewPaneSize(),h.right=d.width-e.x-c.getSize("width")+"px"):h.left=e.x+"px";a.setStyles(h)}var a;CKEDITOR.on("reset",function(){a&&a.remove();a=null});CKEDITOR.on("dialogDefinition",function(d){var c=d.editor;if(c._.showDialogDefinitionTooltips){a||(a=CKEDITOR.dom.element.createFromHtml('<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>', -CKEDITOR.document),a.hide(),a.on("mouseover",function(){this.show()}),a.on("mouseout",function(){this.hide()}),a.appendTo(CKEDITOR.document.getBody()));var b=d.data.definition.dialog,f=c.config.devtools_textCallback||i;b.on("load",function(){for(var d=b.parts.tabs.getChildren(),g,e=0,h=d.count();e<h;e++){g=d.getItem(e);g.on("mouseover",function(){var a=this.$.id;k(f,this,c,b,null,a.substring(4,a.lastIndexOf("_")))});g.on("mouseout",function(){a.hide()})}b.foreach(function(d){if(!(d.type in{hbox:1, -vbox:1})){var e=d.getElement();if(e){e.on("mouseover",function(){k(f,this,c,b,d,b._.currentTabId)});e.on("mouseout",function(){a.hide()})}}})})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/dialog/dialogDefinition.js b/platforms/browser/www/lib/ckeditor/plugins/dialog/dialogDefinition.js deleted file mode 100644 index 67d361ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/dialog/dialogDefinition.js +++ /dev/null @@ -1,4 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ diff --git a/platforms/browser/www/lib/ckeditor/plugins/dialogadvtab/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/dialogadvtab/plugin.js deleted file mode 100644 index 50784d82..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/dialogadvtab/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function f(c){var a=this.att,c=c&&c.hasAttribute(a)&&c.getAttribute(a)||"";void 0!==c&&this.setValue(c)}function g(){for(var c,a=0;a<arguments.length;a++)if(arguments[a]instanceof CKEDITOR.dom.element){c=arguments[a];break}if(c){var a=this.att,b=this.getValue();b?c.setAttribute(a,b):c.removeAttribute(a,b)}}var i={id:1,dir:1,classes:1,styles:1};CKEDITOR.plugins.add("dialogadvtab",{requires:"dialog",allowedContent:function(c){c||(c=i);var a=[];c.id&&a.push("id");c.dir&&a.push("dir");var b= -"";a.length&&(b+="["+a.join(",")+"]");c.classes&&(b+="(*)");c.styles&&(b+="{*}");return b},createAdvancedTab:function(c,a,b){a||(a=i);var d=c.lang.common,h={id:"advanced",label:d.advancedTab,title:d.advancedTab,elements:[{type:"vbox",padding:1,children:[]}]},e=[];if(a.id||a.dir)a.id&&e.push({id:"advId",att:"id",type:"text",requiredContent:b?b+"[id]":null,label:d.id,setup:f,commit:g}),a.dir&&e.push({id:"advLangDir",att:"dir",type:"select",requiredContent:b?b+"[dir]":null,label:d.langDir,"default":"", -style:"width:100%",items:[[d.notSet,""],[d.langDirLTR,"ltr"],[d.langDirRTL,"rtl"]],setup:f,commit:g}),h.elements[0].children.push({type:"hbox",widths:["50%","50%"],children:[].concat(e)});if(a.styles||a.classes)e=[],a.styles&&e.push({id:"advStyles",att:"style",type:"text",requiredContent:b?b+"{cke-xyz}":null,label:d.styles,"default":"",validate:CKEDITOR.dialog.validate.inlineStyle(d.invalidInlineStyle),onChange:function(){},getStyle:function(a,c){var b=this.getValue().match(RegExp("(?:^|;)\\s*"+a+ -"\\s*:\\s*([^;]*)","i"));return b?b[1]:c},updateStyle:function(a,b){var d=this.getValue(),e=c.document.createElement("span");e.setAttribute("style",d);e.setStyle(a,b);d=CKEDITOR.tools.normalizeCssText(e.getAttribute("style"));this.setValue(d,1)},setup:f,commit:g}),a.classes&&e.push({type:"hbox",widths:["45%","55%"],children:[{id:"advCSSClasses",att:"class",type:"text",requiredContent:b?b+"(cke-xyz)":null,label:d.cssClasses,"default":"",setup:f,commit:g}]}),h.elements[0].children.push({type:"hbox", -widths:["50%","50%"],children:[].concat(e)});return h}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/dialogs/div.js b/platforms/browser/www/lib/ckeditor/plugins/div/dialogs/div.js deleted file mode 100644 index 80bb959e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/dialogs/div.js +++ /dev/null @@ -1,9 +0,0 @@ -(function(){function p(a,k,o){if(!k.is||!k.getCustomData("block_processed"))k.is&&CKEDITOR.dom.element.setMarker(o,k,"block_processed",!0),a.push(k)}function n(a,k){function o(){this.foreach(function(a){if(/^(?!vbox|hbox)/.test(a.type)&&(a.setup||(a.setup=function(c){a.setValue(c.getAttribute(a.id)||"",1)}),!a.commit))a.commit=function(c){var g=this.getValue();"dir"==a.id&&c.getComputedStyle("direction")==g||(g?c.setAttribute(a.id,g):c.removeAttribute(a.id))}})}var n=function(){var f=CKEDITOR.tools.extend({}, -CKEDITOR.dtd.$blockLimit);a.config.div_wrapTable&&(delete f.td,delete f.th);return f}(),q=CKEDITOR.dtd.div,l={},m=[];return{title:a.lang.div.title,minWidth:400,minHeight:165,contents:[{id:"info",label:a.lang.common.generalTab,title:a.lang.common.generalTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"elementStyle",type:"select",style:"width: 100%;",label:a.lang.div.styleSelectLabel,"default":"",items:[[a.lang.common.notSet,""]],onChange:function(){var f=["info:elementStyle","info:class", -"advanced:dir","advanced:style"],c=this.getDialog(),g=c._element&&c._element.clone()||new CKEDITOR.dom.element("div",a.document);this.commit(g,!0);for(var f=[].concat(f),b=f.length,i,e=0;e<b;e++)(i=c.getContentElement.apply(c,f[e].split(":")))&&i.setup&&i.setup(g,!0)},setup:function(f){for(var c in l)l[c].checkElementRemovable(f,!0,a)&&this.setValue(c,1)},commit:function(f){var c;(c=this.getValue())?l[c].applyToObject(f,a):f.removeAttribute("style")}},{id:"class",type:"text",requiredContent:"div(cke-xyz)", -label:a.lang.common.cssClass,"default":""}]}]},{id:"advanced",label:a.lang.common.advancedTab,title:a.lang.common.advancedTab,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"id",requiredContent:"div[id]",label:a.lang.common.id,"default":""},{type:"text",id:"lang",requiredContent:"div[lang]",label:a.lang.common.langCode,"default":""}]},{type:"hbox",children:[{type:"text",id:"style",requiredContent:"div{cke-xyz}",style:"width: 100%;",label:a.lang.common.cssStyle, -"default":"",commit:function(a){a.setAttribute("style",this.getValue())}}]},{type:"hbox",children:[{type:"text",id:"title",requiredContent:"div[title]",style:"width: 100%;",label:a.lang.common.advisoryTitle,"default":""}]},{type:"select",id:"dir",requiredContent:"div[dir]",style:"width: 100%;",label:a.lang.common.langDir,"default":"",items:[[a.lang.common.notSet,""],[a.lang.common.langDirLtr,"ltr"],[a.lang.common.langDirRtl,"rtl"]]}]}]}],onLoad:function(){o.call(this);var f=this,c=this.getContentElement("info", -"elementStyle");a.getStylesSet(function(g){var b,i;if(g)for(var e=0;e<g.length;e++)i=g[e],i.element&&"div"==i.element&&(b=i.name,l[b]=i=new CKEDITOR.style(i),a.filter.check(i)&&(c.items.push([b,b]),c.add(b,b)));c[1<c.items.length?"enable":"disable"]();setTimeout(function(){f._element&&c.setup(f._element)},0)})},onShow:function(){"editdiv"==k&&this.setupContent(this._element=CKEDITOR.plugins.div.getSurroundDiv(a))},onOk:function(){if("editdiv"==k)m=[this._element];else{var f=[],c={},g=[],b,i=a.getSelection(), -e=i.getRanges(),l=i.createBookmarks(),h,j;for(h=0;h<e.length;h++)for(j=e[h].createIterator();b=j.getNextParagraph();)if(b.getName()in n&&!b.isReadOnly()){var d=b.getChildren();for(b=0;b<d.count();b++)p(g,d.getItem(b),c)}else{for(;!q[b.getName()]&&!b.equals(e[h].root);)b=b.getParent();p(g,b,c)}CKEDITOR.dom.element.clearAllMarkers(c);e=[];h=null;for(j=0;j<g.length;j++)b=g[j],d=a.elementPath(b).blockLimit,d.isReadOnly()&&(d=d.getParent()),a.config.div_wrapTable&&d.is(["td","th"])&&(d=a.elementPath(d.getParent()).blockLimit), -d.equals(h)||(h=d,e.push([])),e[e.length-1].push(b);for(h=0;h<e.length;h++){d=e[h][0];g=d.getParent();for(b=1;b<e[h].length;b++)g=g.getCommonAncestor(e[h][b]);j=new CKEDITOR.dom.element("div",a.document);for(b=0;b<e[h].length;b++){for(d=e[h][b];!d.getParent().equals(g);)d=d.getParent();e[h][b]=d}for(b=0;b<e[h].length;b++)if(d=e[h][b],!d.getCustomData||!d.getCustomData("block_processed"))d.is&&CKEDITOR.dom.element.setMarker(c,d,"block_processed",!0),b||j.insertBefore(d),j.append(d);CKEDITOR.dom.element.clearAllMarkers(c); -f.push(j)}i.selectBookmarks(l);m=f}f=m.length;for(c=0;c<f;c++)this.commitContent(m[c]),!m[c].getAttribute("style")&&m[c].removeAttribute("style");this.hide()},onHide:function(){"editdiv"==k&&this._element.removeCustomData("elementStyle");delete this._element}}}CKEDITOR.dialog.add("creatediv",function(a){return n(a,"creatediv")});CKEDITOR.dialog.add("editdiv",function(a){return n(a,"editdiv")})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/icons/creatediv.png b/platforms/browser/www/lib/ckeditor/plugins/div/icons/creatediv.png deleted file mode 100644 index 6cca564d20596ab81caab0eba9305416daec4d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ@N*$V~EA+)JeAfGT|a^^Nr<sqF8)H6$6fld2V!Q*&^g5dAi7T zW=LR{i-y-!wV%QwA}i;X2>J;wU09ZWQpwHh@v+W~goq_qnM5~Sd~<y6+?nRB<zd@u zW>>$vX!*YKeewFGnO*OHn@I6KvQXo3R-4QjIZd(CfXC2S<>8#!Pv;c(xG6I+oc|mV z6O)pc=jStBh1tN^)5th@-gC81jjk!FGoM!Wnd=_<Y;)_a*`zrt>1j+i?%rixa5qnw zg)vcL)7Gu70xUCbMzb@dMjA=*FeEj+efw6>AvE;L?j`(>W;*CTnj_8ZqbAJIwP=A| z^*r<L?1?iSc(u9~eV3YB%+PcE@lA#2GL`e{H4@S`FM3$O;V><gAtol~%npyD>({SO zN&OkNV3pP<n{*4APk9rI``X*t=M=jHikQzndvS{ApLxxzR!Q)%eW|kj&Nu0XrThN- z>x&=zEq~1L>+ioCpKVkg&XnBu-q_xrUtsplc{6RNnZ!j!9XhkmaC3Uvx7L|&)jdC* z{PfAFPzLCinAq6D^73%|)6X5`e*_23t-hRNc6##U$?qGyAH+XU_PlfdzVr6mYdh_k z{&`P&lJB|SfA;*Gyu7UR^ygEToLAYKwKXdC0Z)Wx7n8qGY9v$5)vT>z-@ktke$f7M zZ~dp*`G*f5zJ9>|z;|tJ?YUpSe)VrucMWt{e)-|EXKbGK@87=N%fR&@`@!R@SFa}J z=DzJ+ay;1GzwzY9j~~4~<L}+O=QL~CocZ&WPpbT#q;j&`ZShC#f*l(+ENE_SPQU!D z^1=GWix*FywC`=%?wGhZp(`8CojbQ><HnDVU%q@9oWQX|^TPAJaqHQv80)+*f9e1A z`7b{MNBx-#o6^1l)1_*OYeY#(Vo9o1a#1RfVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~ z1K%aPfoT>=LvDUbW?Cg~4K_cSj{r4Df@}!RPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw T{mw=TsEEPS)z4*}Q$iB}PH=bo diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png b/platforms/browser/www/lib/ckeditor/plugins/div/icons/hidpi/creatediv.png deleted file mode 100644 index f0ca49fdf8b0983126685c25089fce769858633f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3053 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/af.js deleted file mode 100644 index d3d3fc9d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","af",{IdInputLabel:"Id",advisoryTitleInputLabel:"Aanbevole Titel",cssClassInputLabel:"CSS klasse",edit:"Wysig Div",inlineStyleInputLabel:"Inlyn Styl",langDirLTRLabel:"Links na regs (LTR)",langDirLabel:"Skryfrigting",langDirRTLLabel:"Regs na links (RTL)",languageCodeInputLabel:" Taalkode",remove:"Verwyder Div",styleSelectLabel:"Styl",title:"Skep Div houer",toolbar:"Skep Div houer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ar.js deleted file mode 100644 index 21c63f7e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ar",{IdInputLabel:"هوية",advisoryTitleInputLabel:"عنوان التقرير",cssClassInputLabel:"فئات التنسيق",edit:"تحرير Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"اليسار لليمين (LTR)",langDirLabel:"إتجاه النص",langDirRTLLabel:"اليمين لليسار (RTL)",languageCodeInputLabel:"رمز اللغة",remove:"إزالة Div",styleSelectLabel:"نمط",title:"إحداث Div Container",toolbar:"إحداث Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/bg.js deleted file mode 100644 index d37a72d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bg",{IdInputLabel:"ID",advisoryTitleInputLabel:"Препоръчително заглавие",cssClassInputLabel:"Класове за CSS",edit:"Промяна на Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Ляво на Дясно (ЛнД)",langDirLabel:"Посока на езика",langDirRTLLabel:"Дясно на Ляво (ДнЛ)",languageCodeInputLabel:" Код на езика",remove:"Премахване на Div",styleSelectLabel:"Стил",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/bn.js deleted file mode 100644 index ae62f7d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/bs.js deleted file mode 100644 index 259583de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","bs",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory title",cssClassInputLabel:"Klase CSS stilova",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"S lijeva na desno (LTR)",langDirLabel:"Smjer pisanja",langDirRTLLabel:"S desna na lijevo (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ca.js deleted file mode 100644 index 118a6816..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ca",{IdInputLabel:"Id",advisoryTitleInputLabel:"Títol de guia",cssClassInputLabel:"Classes de la fulla d'estils",edit:"Edita la Capa",inlineStyleInputLabel:"Estil en línia",langDirLTRLabel:"D'esquerra a dreta (LTR)",langDirLabel:"Direcció de l'idioma",langDirRTLLabel:"De dreta a esquerra (RTL)",languageCodeInputLabel:" Codi d'idioma",remove:"Elimina la Capa",styleSelectLabel:"Estil",title:"Crea una Capa Contenidora",toolbar:"Crea una Capa Contenidora"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/cs.js deleted file mode 100644 index 1239c576..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","cs",{IdInputLabel:"Id",advisoryTitleInputLabel:"Nápovědní titulek",cssClassInputLabel:"Třídy stylů",edit:"Změnit Div",inlineStyleInputLabel:"Vnitřní styly",langDirLTRLabel:"Zleva doprava (LTR)",langDirLabel:"Směr jazyka",langDirRTLLabel:"Zprava doleva (RTL)",languageCodeInputLabel:" Kód jazyka",remove:"Odstranit Div",styleSelectLabel:"Styly",title:"Vytvořit Div kontejner",toolbar:"Vytvořit Div kontejner"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/cy.js deleted file mode 100644 index aed7b773..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","cy",{IdInputLabel:"Id",advisoryTitleInputLabel:"Teitl Cynghorol",cssClassInputLabel:"Dosbarthiadau Ffeil Arddull",edit:"Golygu Div",inlineStyleInputLabel:"Arddull Mewn Llinell",langDirLTRLabel:"Chwith i'r Dde (LTR)",langDirLabel:"Cyfeiriad yr Iaith",langDirRTLLabel:"Dde i'r Chwith (RTL)",languageCodeInputLabel:" Cod Iaith",remove:"Tynnu Div",styleSelectLabel:"Arddull",title:"Creu Cynhwysydd Div",toolbar:"Creu Cynhwysydd Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/da.js deleted file mode 100644 index 38e5920d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","da",{IdInputLabel:"Id",advisoryTitleInputLabel:"Vejledende titel",cssClassInputLabel:"Typografiark",edit:"Rediger Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Venstre til højre (LTR)",langDirLabel:"Sprogretning",langDirRTLLabel:"Højre til venstre (RTL)",languageCodeInputLabel:" Sprogkode",remove:"Slet Div",styleSelectLabel:"Style",title:"Opret Div Container",toolbar:"Opret Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/de.js deleted file mode 100644 index d5929965..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","de",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tooltip",cssClassInputLabel:"Stylesheet Klasse",edit:"Div bearbeiten",inlineStyleInputLabel:"Inline Stil",langDirLTRLabel:"Links nach Rechs (LTR)",langDirLabel:"Sprache Richtung",langDirRTLLabel:"Rechs nach Links (RTL)",languageCodeInputLabel:"Sprachenkürzel",remove:"Div entfernen",styleSelectLabel:"Style",title:"Div Container erzeugen",toolbar:"Div Container erzeugen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/el.js deleted file mode 100644 index d65661c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","el",{IdInputLabel:"Id",advisoryTitleInputLabel:"Ενδεικτικός Τίτλος",cssClassInputLabel:"Κλάσεις Φύλλων Στυλ",edit:"Επεξεργασία Div",inlineStyleInputLabel:"Στυλ Εν Σειρά",langDirLTRLabel:"Αριστερά προς Δεξιά (LTR)",langDirLabel:"Κατεύθυνση Κειμένου",langDirRTLLabel:"Δεξιά προς Αριστερά (RTL)",languageCodeInputLabel:"Κωδικός Γλώσσας",remove:"Διαγραφή Div",styleSelectLabel:"Μορφή",title:"Δημιουργία Div",toolbar:"Δημιουργία Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-au.js deleted file mode 100644 index eb881031..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-au",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-ca.js deleted file mode 100644 index 136b99f1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-ca",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-gb.js deleted file mode 100644 index 04d4745d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en-gb",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/en.js deleted file mode 100644 index 03fc7d6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","en",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/eo.js deleted file mode 100644 index e587cac4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","eo",{IdInputLabel:"Id",advisoryTitleInputLabel:"Priskriba Titolo",cssClassInputLabel:"Stilfolioklasoj",edit:"Redakti Div",inlineStyleInputLabel:"Enlinia stilo",langDirLTRLabel:"Maldekstre dekstren (angle LTR)",langDirLabel:"Skribdirekto",langDirRTLLabel:"Dekstre maldekstren (angle RTL)",languageCodeInputLabel:" Lingvokodo",remove:"Forigi Div",styleSelectLabel:"Stilo",title:"Krei DIV ujon",toolbar:"Krei DIV ujon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/es.js deleted file mode 100644 index 78732f14..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","es",{IdInputLabel:"Id",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Clase de hoja de estilos",edit:"Editar Div",inlineStyleInputLabel:"Estilo",langDirLTRLabel:"Izquierda a Derecha (LTR)",langDirLabel:"Orientación",langDirRTLLabel:"Derecha a Izquierda (RTL)",languageCodeInputLabel:" Codigo de idioma",remove:"Quitar Div",styleSelectLabel:"Estilo",title:"Crear contenedor DIV",toolbar:"Crear contenedor DIV"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/et.js deleted file mode 100644 index 690848d6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","et",{IdInputLabel:"ID",advisoryTitleInputLabel:"Soovitatav pealkiri",cssClassInputLabel:"Stiililehe klassid",edit:"Muuda Div",inlineStyleInputLabel:"Reasisene stiil",langDirLTRLabel:"Vasakult paremale (LTR)",langDirLabel:"Keele suund",langDirRTLLabel:"Paremalt vasakule (RTL)",languageCodeInputLabel:" Keelekood",remove:"Eemalda Div",styleSelectLabel:"Stiil",title:"Div-konteineri loomine",toolbar:"Div-konteineri loomine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/eu.js deleted file mode 100644 index 8108d3bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","eu",{IdInputLabel:"Id",advisoryTitleInputLabel:"Izenburua",cssClassInputLabel:"Estilo-orriko Klaseak",edit:"Div-a editatu",inlineStyleInputLabel:"Inline Estiloa",langDirLTRLabel:"Ezkerretik Eskuinera (LTR)",langDirLabel:"Hizkuntzaren Norabidea",langDirRTLLabel:"Eskumatik Ezkerrera (RTL)",languageCodeInputLabel:"Hizkuntza Kodea",remove:"Div-a Kendu",styleSelectLabel:"Estiloa",title:"Div Edukiontzia Sortu",toolbar:"Div Edukiontzia Sortu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/fa.js deleted file mode 100644 index bdc9449c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fa",{IdInputLabel:"شناسه",advisoryTitleInputLabel:"عنوان مشاوره",cssClassInputLabel:"کلاس​های شیوه​نامه",edit:"ویرایش Div",inlineStyleInputLabel:"سبک درون​خطی(Inline Style)",langDirLTRLabel:"چپ به راست (LTR)",langDirLabel:"جهت نوشتاری زبان",langDirRTLLabel:"راست به چپ (RTL)",languageCodeInputLabel:" کد زبان",remove:"حذف Div",styleSelectLabel:"سبک",title:"ایجاد یک محل DIV",toolbar:"ایجاد یک محل DIV"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/fi.js deleted file mode 100644 index e8885797..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fi",{IdInputLabel:"Id",advisoryTitleInputLabel:"Ohjeistava otsikko",cssClassInputLabel:"Tyylitiedoston luokat",edit:"Muokkaa Diviä",inlineStyleInputLabel:"Sisätyyli",langDirLTRLabel:"Vasemmalta oikealle (LTR)",langDirLabel:"Kielen suunta",langDirRTLLabel:"Oikealta vasemmalle (RTL)",languageCodeInputLabel:" Kielen koodi",remove:"Poista Div",styleSelectLabel:"Tyyli",title:"Luo div-kehikko",toolbar:"Luo div-kehikko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/fo.js deleted file mode 100644 index e00fb861..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fo",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Redigera Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Vinstru til høgru (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Høgru til vinstru (RTL)",languageCodeInputLabel:" Language Code",remove:"Strika Div",styleSelectLabel:"Style",title:"Ger Div Container",toolbar:"Ger Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr-ca.js deleted file mode 100644 index 0f61fc34..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fr-ca",{IdInputLabel:"ID",advisoryTitleInputLabel:"Titre",cssClassInputLabel:"Classes CSS",edit:"Modifier le DIV",inlineStyleInputLabel:"Style en ligne",langDirLTRLabel:"De gauche à droite (LTR)",langDirLabel:"Sens d'écriture",langDirRTLLabel:"De droite à gauche (RTL)",languageCodeInputLabel:"Code de langue",remove:"Supprimer le DIV",styleSelectLabel:"Style",title:"Créer un DIV",toolbar:"Créer un DIV"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr.js deleted file mode 100644 index e936030c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","fr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Classe CSS",edit:"Éditer la DIV",inlineStyleInputLabel:"Style en ligne",langDirLTRLabel:"Gauche à droite (LTR)",langDirLabel:"Sens d'écriture",langDirRTLLabel:"Droite à gauche (RTL)",languageCodeInputLabel:"Code de langue",remove:"Enlever la DIV",styleSelectLabel:"Style",title:"Créer un container DIV",toolbar:"Créer un container DIV"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/gl.js deleted file mode 100644 index 68cab558..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","gl",{IdInputLabel:"ID",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Clases da folla de estilos",edit:"Editar Div",inlineStyleInputLabel:"Estilo de liña",langDirLTRLabel:"Esquerda a dereita (LTR)",langDirLabel:"Dirección de escritura do idioma",langDirRTLLabel:"Dereita a esquerda (RTL)",languageCodeInputLabel:"Código do idioma",remove:"Retirar Div",styleSelectLabel:"Estilo",title:"Crear un contedor Div",toolbar:"Crear un contedor Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/gu.js deleted file mode 100644 index 633644c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","gu",{IdInputLabel:"Id",advisoryTitleInputLabel:"એડવાઈઝર શીર્ષક",cssClassInputLabel:"સ્ટાઈલશીટ કલાસીસ",edit:"ડીવીમાં ફેરફાર કરવો",inlineStyleInputLabel:"ઈનલાઈન પદ્ધતિ",langDirLTRLabel:"ડાબે થી જમણે (LTR)",langDirLabel:"ભાષાની દિશા",langDirRTLLabel:"જમણે થી ડાબે (RTL)",languageCodeInputLabel:"ભાષાનો કોડ",remove:"ડીવી કાઢી કાઢવું",styleSelectLabel:"સ્ટાઈલ",title:"Div કન્ટેનર બનાવુંવું",toolbar:"Div કન્ટેનર બનાવુંવું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/he.js deleted file mode 100644 index 80ad2a97..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","he",{IdInputLabel:"מזהה (ID)",advisoryTitleInputLabel:"כותרת מוצעת",cssClassInputLabel:"מחלקת עיצוב",edit:"עריכת מיכל (Div)",inlineStyleInputLabel:"סגנון פנימי",langDirLTRLabel:"שמאל לימין (LTR)",langDirLabel:"כיוון שפה",langDirRTLLabel:"ימין לשמאל (RTL)",languageCodeInputLabel:"קוד שפה",remove:"הסרת מיכל (Div)",styleSelectLabel:"סגנון",title:"יצירת מיכל (Div)",toolbar:"יצירת מיכל (Div)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/hi.js deleted file mode 100644 index fa3f8955..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hi",{IdInputLabel:"Id",advisoryTitleInputLabel:"परामर्श शीर्शक",cssClassInputLabel:"स्टाइल-शीट क्लास",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"बायें से दायें (LTR)",langDirLabel:"भाषा लिखने की दिशा",langDirRTLLabel:"दायें से बायें (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"स्टाइल",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/hr.js deleted file mode 100644 index 87d62ffc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Savjetodavni naslov",cssClassInputLabel:"Klase stilova",edit:"Uredi DIV",inlineStyleInputLabel:"Stil u liniji",langDirLTRLabel:"S lijeva na desno (LTR)",langDirLabel:"Smjer jezika",langDirRTLLabel:"S desna na lijevo (RTL)",languageCodeInputLabel:"Jezični kod",remove:"Ukloni DIV",styleSelectLabel:"Stil",title:"Napravi DIV kontejner",toolbar:"Napravi DIV kontejner"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/hu.js deleted file mode 100644 index 949b2dd9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","hu",{IdInputLabel:"Azonosító",advisoryTitleInputLabel:"Tipp szöveg",cssClassInputLabel:"Stíluslap osztály",edit:"DIV szerkesztése",inlineStyleInputLabel:"Inline stílus",langDirLTRLabel:"Balról jobbra (LTR)",langDirLabel:"Nyelvi irány",langDirRTLLabel:"Jobbról balra (RTL)",languageCodeInputLabel:" Nyelv kódja",remove:"DIV eltávolítása",styleSelectLabel:"Stílus",title:"DIV tároló létrehozása",toolbar:"DIV tároló létrehozása"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/id.js deleted file mode 100644 index a7016a39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","id",{IdInputLabel:"Id",advisoryTitleInputLabel:"Penasehat Judul",cssClassInputLabel:"Kelas Stylesheet",edit:"Sunting Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Kiri ke Kanan (LTR)",langDirLabel:"Arah Bahasa",langDirRTLLabel:"Kanan ke Kiri (RTL)",languageCodeInputLabel:"Kode Bahasa",remove:"Hapus Div",styleSelectLabel:"Gaya",title:"Ciptakan Wadah Div",toolbar:"Cipatakan Wadah Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/is.js deleted file mode 100644 index 39a3b10b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","is",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/it.js deleted file mode 100644 index 4d1717c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","it",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titolo Avviso",cssClassInputLabel:"Classi di stile",edit:"Modifica DIV",inlineStyleInputLabel:"Stile Inline",langDirLTRLabel:"Da sinistra a destra (LTR)",langDirLabel:"Direzione di scrittura",langDirRTLLabel:"Da destra a sinistra (RTL)",languageCodeInputLabel:"Codice lingua",remove:"Rimuovi DIV",styleSelectLabel:"Stile",title:"Crea DIV contenitore",toolbar:"Crea DIV contenitore"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ja.js deleted file mode 100644 index c3fa6f0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ja",{IdInputLabel:"Id",advisoryTitleInputLabel:"Title属性",cssClassInputLabel:"スタイルシートクラス",edit:"Divコンテナを編集",inlineStyleInputLabel:"インラインスタイル",langDirLTRLabel:"左から右 (LTR)",langDirLabel:"文字表記の方向",langDirRTLLabel:"右から左 (RTL)",languageCodeInputLabel:" 言語コード",remove:"Divコンテナを削除",styleSelectLabel:"スタイル",title:"Divコンテナ",toolbar:"Divコンテナ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ka.js deleted file mode 100644 index aff4cc2d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ka",{IdInputLabel:"Id",advisoryTitleInputLabel:"სათაური",cssClassInputLabel:"CSS კლასები",edit:"Div-ის რედაქტირება",inlineStyleInputLabel:"თანდართული სტილი",langDirLTRLabel:"მარცხნიდან მარჯვნიც (LTR)",langDirLabel:"ენის მინართულება",langDirRTLLabel:"მარჯვნიდან მარცხნივ (RTL)",languageCodeInputLabel:"ენის კოდი",remove:"Div-ის წაშლა",styleSelectLabel:"სტილი",title:"Div კონტეინერის შექმნა",toolbar:"Div კონტეინერის შექმნა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/km.js deleted file mode 100644 index 7032cb71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","km",{IdInputLabel:"Id",advisoryTitleInputLabel:"ចំណង​ជើង​ប្រឹក្សា",cssClassInputLabel:"Stylesheet Classes",edit:"កែ Div",inlineStyleInputLabel:"ស្ទីល​ក្នុង​បន្ទាត់",langDirLTRLabel:"ពីឆ្វេងទៅស្តាំ(LTR)",langDirLabel:"ទិសដៅភាសា",langDirRTLLabel:"ពីស្តាំទៅឆ្វេង(RTL)",languageCodeInputLabel:"កូដ​ភាសា",remove:"ដក Div ចេញ",styleSelectLabel:"ស្ទីល",title:"បង្កើត​អ្នក​ផ្ទុក Div",toolbar:"បង្កើត​អ្នក​ផ្ទុក Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ko.js deleted file mode 100644 index ba830273..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ko",{IdInputLabel:"ID",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Div 태그 수정",inlineStyleInputLabel:"인라인 스타일",langDirLTRLabel:"왼쪽에서 오른쪽 (LTR)",langDirLabel:"쓰기 방향",langDirRTLLabel:"오른쪽에서 왼쪽 (RTL)",languageCodeInputLabel:"언어 코드",remove:"Div 태그 삭제",styleSelectLabel:"Style",title:"Div 태그 생성",toolbar:"Div 태그 생성"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ku.js deleted file mode 100644 index 33b89295..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ku",{IdInputLabel:"ناسنامە",advisoryTitleInputLabel:"سەردێڕ",cssClassInputLabel:"شێوازی چینی پەڕه",edit:"چاکسازی Div",inlineStyleInputLabel:"شێوازی ناوهێڵ",langDirLTRLabel:"چەپ بۆ ڕاست (LTR)",langDirLabel:"ئاراستەی زمان",langDirRTLLabel:"ڕاست بۆ چەپ (RTL)",languageCodeInputLabel:"هێمای زمان",remove:"لابردنی Div",styleSelectLabel:"شێواز",title:"دروستکردنی لەخۆگری Div",toolbar:"دروستکردنی لەخۆگری Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/lt.js deleted file mode 100644 index 2dace839..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","lt",{IdInputLabel:"Id",advisoryTitleInputLabel:"Patariamas pavadinimas",cssClassInputLabel:"Stilių klasės",edit:"Redaguoti Div",inlineStyleInputLabel:"Vidiniai stiliai",langDirLTRLabel:"Iš kairės į dešinę (LTR)",langDirLabel:"Kalbos nurodymai",langDirRTLLabel:"Iš dešinės į kairę (RTL)",languageCodeInputLabel:" Kalbos kodas",remove:"Pašalinti Div",styleSelectLabel:"Stilius",title:"Sukurti Div elementą",toolbar:"Sukurti Div elementą"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/lv.js deleted file mode 100644 index e8cfc365..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","lv",{IdInputLabel:"Id",advisoryTitleInputLabel:"Konsultatīvs virsraksts",cssClassInputLabel:"Stilu klases",edit:"Labot Div",inlineStyleInputLabel:"Iekļautais stils",langDirLTRLabel:"Kreisais uz Labo (LTR)",langDirLabel:"Valodas virziens",langDirRTLLabel:"Labais uz kreiso (RTL)",languageCodeInputLabel:"Valodas kods",remove:"Noņemt Div",styleSelectLabel:"Stils",title:"Izveidot div konteineri",toolbar:"Izveidot div konteineri"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/mk.js deleted file mode 100644 index f24eece9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","mk",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/mn.js deleted file mode 100644 index cb515d65..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","mn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Зөвлөлдөх гарчиг",cssClassInputLabel:"Stylesheet классууд",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Зүүн талаас баруун тишээ (LTR)",langDirLabel:"Хэлний чиглэл",langDirRTLLabel:"Баруун талаас зүүн тишээ (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Загвар",title:"Div гэдэг хэсэг бий болгох",toolbar:"Div гэдэг хэсэг бий болгох"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ms.js deleted file mode 100644 index 0b06fd00..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ms",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/nb.js deleted file mode 100644 index 0cbf6170..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","nb",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tittel",cssClassInputLabel:"Stilark-klasser",edit:"Rediger Div",inlineStyleInputLabel:"Inlinestiler",langDirLTRLabel:"Venstre til høyre (VTH)",langDirLabel:"Språkretning",langDirRTLLabel:"Høyre til venstre (HTV)",languageCodeInputLabel:" Språkkode",remove:"Fjern Div",styleSelectLabel:"Stil",title:"Sett inn Div Container",toolbar:"Sett inn Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/nl.js deleted file mode 100644 index 4989eb61..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","nl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Adviserende titel",cssClassInputLabel:"Stylesheet klassen",edit:"Div wijzigen",inlineStyleInputLabel:"Inline stijl",langDirLTRLabel:"Links naar rechts (LTR)",langDirLabel:"Schrijfrichting",langDirRTLLabel:"Rechts naar links (RTL)",languageCodeInputLabel:" Taalcode",remove:"Div verwijderen",styleSelectLabel:"Stijl",title:"Div aanmaken",toolbar:"Div aanmaken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/no.js deleted file mode 100644 index e4319360..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","no",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tittel",cssClassInputLabel:"Stilark-klasser",edit:"Rediger Div",inlineStyleInputLabel:"Inlinestiler",langDirLTRLabel:"Venstre til høyre (VTH)",langDirLabel:"Språkretning",langDirRTLLabel:"Høyre til venstre (HTV)",languageCodeInputLabel:" Språkkode",remove:"Fjern Div",styleSelectLabel:"Stil",title:"Sett inn Div Container",toolbar:"Sett inn Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/pl.js deleted file mode 100644 index 11edd560..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Opis obiektu docelowego",cssClassInputLabel:"Klasy arkusza stylów",edit:"Edytuj pojemnik Div",inlineStyleInputLabel:"Style liniowe",langDirLTRLabel:"Od lewej do prawej (LTR)",langDirLabel:"Kierunek tekstu",langDirRTLLabel:"Od prawej do lewej (RTL)",languageCodeInputLabel:"Kod języka",remove:"Usuń pojemnik Div",styleSelectLabel:"Styl",title:"Utwórz pojemnik Div",toolbar:"Utwórz pojemnik Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt-br.js deleted file mode 100644 index 7bbd2cac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pt-br",{IdInputLabel:"Id",advisoryTitleInputLabel:"Título Consulta",cssClassInputLabel:"Classes de CSS",edit:"Editar Div",inlineStyleInputLabel:"Estilo Inline",langDirLTRLabel:"Esquerda para Direita (LTR)",langDirLabel:"Direção da Escrita",langDirRTLLabel:"Direita para Esquerda (RTL)",languageCodeInputLabel:"Código de Idioma",remove:"Remover Div",styleSelectLabel:"Estilo",title:"Criar Container de DIV",toolbar:"Criar Container de DIV"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt.js deleted file mode 100644 index 07fa21bf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","pt",{IdInputLabel:"ID",advisoryTitleInputLabel:"Título",cssClassInputLabel:"Classes de Estilo de Folhas Classes",edit:"Editar Div",inlineStyleInputLabel:"Estilho em Linha",langDirLTRLabel:"Esquerda à Direita (LTR)",langDirLabel:"Orientação de idioma",langDirRTLLabel:"Direita a Esquerda (RTL)",languageCodeInputLabel:"Codigo do Idioma",remove:"Remover Div",styleSelectLabel:"Estilo",title:"Criar Div",toolbar:"Criar Div"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ro.js deleted file mode 100644 index 5743edd6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ro",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titlul consultativ",cssClassInputLabel:"Clasele cu stilul paginii (CSS)",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"stânga-dreapta (LTR)",langDirLabel:"Direcţia cuvintelor",langDirRTLLabel:"dreapta-stânga (RTL)",languageCodeInputLabel:"Codul limbii",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ru.js deleted file mode 100644 index a254ceeb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ru",{IdInputLabel:"Идентификатор",advisoryTitleInputLabel:"Заголовок",cssClassInputLabel:"Классы CSS",edit:"Редактировать контейнер",inlineStyleInputLabel:"Стиль элемента",langDirLTRLabel:"Слева направо (LTR)",langDirLabel:"Направление текста",langDirRTLLabel:"Справа налево (RTL)",languageCodeInputLabel:"Код языка",remove:"Удалить контейнер",styleSelectLabel:"Стиль",title:"Создать Div-контейнер",toolbar:"Создать Div-контейнер"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/si.js deleted file mode 100644 index 035a735d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","si",{IdInputLabel:"අංකය",advisoryTitleInputLabel:"උපදේශාත්මක නාමය",cssClassInputLabel:"විලාසපත්‍ර පන්තිය",edit:"වෙනස්කිරීම",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"වමේසිට දකුණුට",langDirLabel:"භාෂා දිශාව",langDirRTLLabel:"දකුණේ සිට වමට",languageCodeInputLabel:"භාෂා ",remove:"ඉවත් කිරීම",styleSelectLabel:"විලාසය",title:"නිර්මාණය ",toolbar:"නිර්මාණය "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sk.js deleted file mode 100644 index ba965da0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sk",{IdInputLabel:"Id",advisoryTitleInputLabel:"Pomocný titulok",cssClassInputLabel:"Triedy štýlu",edit:"Upraviť Div",inlineStyleInputLabel:"Inline štýl",langDirLTRLabel:"Zľava doprava (LTR)",langDirLabel:"Smer jazyka",langDirRTLLabel:"Zprava doľava (RTL)",languageCodeInputLabel:"Kód jazyka",remove:"Odstrániť Div",styleSelectLabel:"Štýl",title:"Vytvoriť Div kontajner",toolbar:"Vytvoriť Div kontajner"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sl.js deleted file mode 100644 index d067d516..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sl",{IdInputLabel:"Id",advisoryTitleInputLabel:"Predlagani naslov",cssClassInputLabel:"Razred stilne predloge",edit:"Uredi Div",inlineStyleInputLabel:"Inline Slog",langDirLTRLabel:"Od leve proti desni (LTR)",langDirLabel:"Smer jezika",langDirRTLLabel:"Od desne proti levi (RTL)",languageCodeInputLabel:"Koda Jezika",remove:"Odstrani Div",styleSelectLabel:"Slog",title:"Ustvari Div Posodo",toolbar:"Ustvari Div Posodo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sq.js deleted file mode 100644 index 8ec9583d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sq",{IdInputLabel:"Id",advisoryTitleInputLabel:"Titull",cssClassInputLabel:"Klasa stili CSS",edit:"Redakto Div",inlineStyleInputLabel:"Stili i brendshëm",langDirLTRLabel:"Nga e majta në të djathë (LTR)",langDirLabel:"Drejtim teksti",langDirRTLLabel:"Nga e djathta në të majtë (RTL)",languageCodeInputLabel:"Kodi i Gjuhës",remove:"Largo Div",styleSelectLabel:"Stil",title:"Krijo Div Përmbajtës",toolbar:"Krijo Div Përmbajtës"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr-latn.js deleted file mode 100644 index 344573b5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sr-latn",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory naslov",cssClassInputLabel:"Stylesheet klase",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"S leva na desno (LTR)",langDirLabel:"Smer jezika",langDirRTLLabel:"S desna na levo (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Stil",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr.js deleted file mode 100644 index 194041a9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Advisory Title",cssClassInputLabel:"Stylesheet Classes",edit:"Edit Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Left to Right (LTR)",langDirLabel:"Language Direction",langDirRTLLabel:"Right to Left (RTL)",languageCodeInputLabel:" Language Code",remove:"Remove Div",styleSelectLabel:"Style",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/sv.js deleted file mode 100644 index 56e58762..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","sv",{IdInputLabel:"Id",advisoryTitleInputLabel:"Rådgivande titel",cssClassInputLabel:"Stilmallar",edit:"Redigera Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"Vänster till höger (LTR)",langDirLabel:"Språkriktning",langDirRTLLabel:"Höger till vänster (RTL)",languageCodeInputLabel:" Språkkod",remove:"Ta bort Div",styleSelectLabel:"Stil",title:"Skapa Div container",toolbar:"Skapa Div container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/th.js deleted file mode 100644 index 1b5bbbe8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","th",{IdInputLabel:"ไอดี",advisoryTitleInputLabel:"คำเกริ่นนำ",cssClassInputLabel:"คลาสของไฟล์กำหนดลักษณะการแสดงผล",edit:"แก้ไข Div",inlineStyleInputLabel:"Inline Style",langDirLTRLabel:"จากซ้ายไปขวา (LTR)",langDirLabel:"การเขียน-อ่านภาษา",langDirRTLLabel:"จากขวามาซ้าย (RTL)",languageCodeInputLabel:"รหัสภาษา",remove:"ลบ Div",styleSelectLabel:"ลักษณะการแสดงผล",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/tr.js deleted file mode 100644 index 7c9a0266..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","tr",{IdInputLabel:"Id",advisoryTitleInputLabel:"Tavsiye Başlığı",cssClassInputLabel:"Stilltipi Sınıfı",edit:"Div Düzenle",inlineStyleInputLabel:"Inline Stili",langDirLTRLabel:"Soldan sağa (LTR)",langDirLabel:"Dil Yönü",langDirRTLLabel:"Sağdan sola (RTL)",languageCodeInputLabel:" Dil Kodu",remove:"Div Kaldır",styleSelectLabel:"Stil",title:"Div İçeriği Oluştur",toolbar:"Div İçeriği Oluştur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/tt.js deleted file mode 100644 index 1dbf9873..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","tt",{IdInputLabel:"Идентификатор",advisoryTitleInputLabel:"Киңәш исем",cssClassInputLabel:"Стильләр класслары",edit:"Edit Div",inlineStyleInputLabel:"Эчке стиль",langDirLTRLabel:"Сулдан уңга язылыш (LTR)",langDirLabel:"Язылыш юнəлеше",langDirRTLLabel:"Уңнан сулга язылыш (RTL)",languageCodeInputLabel:"Тел коды",remove:"Remove Div",styleSelectLabel:"Стиль",title:"Create Div Container",toolbar:"Create Div Container"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/ug.js deleted file mode 100644 index 0ec740ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","ug",{IdInputLabel:"ID",advisoryTitleInputLabel:"ماۋزۇ",cssClassInputLabel:"ئۇسلۇب تىپىنىڭ ئاتى",edit:"DIV تەھرىر",inlineStyleInputLabel:"قۇر ئىچىدىكى ئۇسلۇبى",langDirLTRLabel:"سولدىن ئوڭغا (LTR)",langDirLabel:"تىل يۆنىلىشى",langDirRTLLabel:"ئوڭدىن سولغا (RTL)",languageCodeInputLabel:"تىل كودى",remove:"DIV چىقىرىۋەت",styleSelectLabel:"ئۇسلۇب",title:"DIV قاچا قۇر",toolbar:"DIV قاچا قۇر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/uk.js deleted file mode 100644 index 8722fc6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","uk",{IdInputLabel:"Ідентифікатор",advisoryTitleInputLabel:"Зміст випливаючої підказки",cssClassInputLabel:"Клас CSS",edit:"Редагувати блок",inlineStyleInputLabel:"Вписаний стиль",langDirLTRLabel:"Зліва направо (LTR)",langDirLabel:"Напрямок мови",langDirRTLLabel:"Справа наліво (RTL)",languageCodeInputLabel:"Код мови",remove:"Видалити блок",styleSelectLabel:"Стиль CSS",title:"Створити блок-контейнер",toolbar:"Створити блок-контейнер"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/vi.js deleted file mode 100644 index abab6579..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","vi",{IdInputLabel:"Định danh (id)",advisoryTitleInputLabel:"Nhan đề hướng dẫn",cssClassInputLabel:"Các lớp CSS",edit:"Chỉnh sửa",inlineStyleInputLabel:"Kiểu nội dòng",langDirLTRLabel:"Trái sang phải (LTR)",langDirLabel:"Hướng ngôn ngữ",langDirRTLLabel:"Phải qua trái (RTL)",languageCodeInputLabel:"Mã ngôn ngữ",remove:"Xóa bỏ",styleSelectLabel:"Kiểu (style)",title:"Tạo khối các thành phần",toolbar:"Tạo khối các thành phần"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh-cn.js deleted file mode 100644 index 8957cc8b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","zh-cn",{IdInputLabel:"ID",advisoryTitleInputLabel:"标题",cssClassInputLabel:"样式类名称",edit:"编辑 DIV",inlineStyleInputLabel:"行内样式",langDirLTRLabel:"从左到右 (LTR)",langDirLabel:"语言方向",langDirRTLLabel:"从右到左 (RTL)",languageCodeInputLabel:"语言代码",remove:"移除 DIV",styleSelectLabel:"样式",title:"创建 DIV 容器",toolbar:"创建 DIV 容器"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh.js deleted file mode 100644 index c266d4c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("div","zh",{IdInputLabel:"ID",advisoryTitleInputLabel:"標題",cssClassInputLabel:"樣式表類別",edit:"編輯 Div",inlineStyleInputLabel:"行內樣式",langDirLTRLabel:"由左至右 (LTR)",langDirLabel:"語言方向",langDirRTLLabel:"由右至左 (RTL)",languageCodeInputLabel:"語言碼",remove:"移除 Div",styleSelectLabel:"樣式",title:"建立 Div 容器",toolbar:"建立 Div 容器"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/div/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/div/plugin.js deleted file mode 100644 index de6d25a6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/div/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("div",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"creatediv",hidpi:!0,init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv", -{allowedContent:b,requiredContent:"div",contextSensitive:!0,refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",new CKEDITOR.dialogCommand("editdiv",{requiredContent:"div"}));a.addCommand("removediv",{requiredContent:"div",exec:function(a){function c(b){if((b=CKEDITOR.plugins.div.getSurroundDiv(a,b))&&!b.data("cke-div-added"))f.push(b),b.data("cke-div-added")}for(var b=a.getSelection(), -g=b&&b.getRanges(),e,h=b.createBookmarks(),f=[],d=0;d<g.length;d++)e=g[d],e.collapsed?c(b.getStartElement()):(e=new CKEDITOR.dom.walker(e),e.evaluator=c,e.lastForward());for(d=0;d<f.length;d++)f[d].remove(!0);b.selectBookmarks(h)}});a.ui.addButton&&a.ui.addButton("CreateDiv",{label:c.toolbar,command:"creatediv",toolbar:"blocks,50"});a.addMenuItems&&(a.addMenuItems({editdiv:{label:c.edit,command:"editdiv",group:"div",order:1},removediv:{label:c.remove,command:"removediv",group:"div",order:5}}),a.contextMenu&& -a.contextMenu.addListener(function(b){return!b||b.isReadOnly()?null:CKEDITOR.plugins.div.getSurroundDiv(a)?{editdiv:CKEDITOR.TRISTATE_OFF,removediv:CKEDITOR.TRISTATE_OFF}:null}));CKEDITOR.dialog.add("creatediv",this.path+"dialogs/div.js");CKEDITOR.dialog.add("editdiv",this.path+"dialogs/div.js")}}});CKEDITOR.plugins.div={getSurroundDiv:function(a,c){var b=a.elementPath(c);return a.elementPath(b.blockLimit).contains(function(a){return a.is("div")&&!a.isReadOnly()},1)}}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/divarea/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/divarea/plugin.js deleted file mode 100644 index 1140d8c0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/divarea/plugin.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("divarea",{afterInit:function(a){a.addMode("wysiwyg",function(c){var b=CKEDITOR.dom.element.createFromHtml('<div class="cke_wysiwyg_div cke_reset" hidefocus="true"></div>');a.ui.space("contents").append(b);b=a.editable(b);b.detach=CKEDITOR.tools.override(b.detach,function(a){return function(){a.apply(this,arguments);this.remove()}});a.setData(a.getData(1),c);a.fire("contentDom")})}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js deleted file mode 100644 index 28d043f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/dialogs/docprops.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("docProps",function(g){function p(a,d){var e=function(){b(this);d(this,this._.parentDialog)},b=function(a){a.removeListener("ok",e);a.removeListener("cancel",b)},f=function(a){a.on("ok",e);a.on("cancel",b)};g.execCommand(a);if(g._.storedDialogs.colordialog)f(g._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(b){if(b.data.name==a){var d=b.data.definition;b.removeListener();d.onLoad=CKEDITOR.tools.override(d.onLoad,function(a){return function(){f(this);d.onLoad= -a;"function"==typeof a&&a.call(this)}})}})}function l(){var a=this.getDialog().getContentElement("general",this.id+"Other");a&&("other"==this.getValue()?(a.getInputElement().removeAttribute("readOnly"),a.focus(),a.getElement().removeClass("cke_disabled")):(a.getInputElement().setAttribute("readOnly",!0),a.getElement().addClass("cke_disabled")))}function i(a,d,e){return function(b,f,c){f=k;b="undefined"!=typeof e?e:this.getValue();!b&&a in f?f[a].remove():b&&a in f?f[a].setAttribute("content",b):b&& -(f=new CKEDITOR.dom.element("meta",g.document),f.setAttribute(d?"http-equiv":"name",a),f.setAttribute("content",b),c.append(f))}}function j(a,d){return function(){var e=k,e=a in e?e[a].getAttribute("content")||"":"";if(d)return e;this.setValue(e);return null}}function m(a){return function(d,e,b,f){f.removeAttribute("margin"+a);d=this.getValue();""!==d?f.setStyle("margin-"+a,CKEDITOR.tools.cssLength(d)):f.removeStyle("margin-"+a)}}function n(a,d,e){a.removeStyle(d);a.getComputedStyle(d)!=e&&a.setStyle(d, -e)}var c=g.lang.docprops,h=g.lang.common,k={},o=function(a,d,e){return{type:"hbox",padding:0,widths:["60%","40%"],children:[CKEDITOR.tools.extend({type:"text",id:a,label:c[d]},e||{},1),{type:"button",id:a+"Choose",label:c.chooseColor,className:"colorChooser",onClick:function(){var b=this;p("colordialog",function(d){var e=b.getDialog();e.getContentElement(e._.currentTabId,a).setValue(d.getContentElement("picker","selectedColor").getValue())})}}]}},q="javascript:void((function(){"+encodeURIComponent("document.open();"+ -(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+'document.write( \'<html style="background-color: #ffffff; height: 100%"><head></head><body style="width: 100%; height: 100%; margin: 0px">'+c.previewHtml+"</body></html>' );document.close();")+"})())";return{title:c.title,minHeight:330,minWidth:500,onShow:function(){for(var a=g.document,d=a.getElementsByTag("html").getItem(0),e=a.getHead(),b=a.getBody(),f={},c=a.getElementsByTag("meta"),h=c.count(),i=0;i<h;i++){var j=c.getItem(i);f[j.getAttribute(j.hasAttribute("http-equiv")? -"http-equiv":"name").toLowerCase()]=j}k=f;this.setupContent(a,d,e,b)},onHide:function(){k={}},onOk:function(){var a=g.document,d=a.getElementsByTag("html").getItem(0),e=a.getHead(),b=a.getBody();this.commitContent(a,d,e,b)},contents:[{id:"general",label:h.generalTab,elements:[{type:"text",id:"title",label:c.docTitle,setup:function(a){this.setValue(a.getElementsByTag("title").getItem(0).data("cke-title"))},commit:function(a,d,e,b,c){c||a.getElementsByTag("title").getItem(0).data("cke-title",this.getValue())}}, -{type:"hbox",children:[{type:"select",id:"dir",label:h.langDir,style:"width: 100%",items:[[h.notSet,""],[h.langDirLtr,"ltr"],[h.langDirRtl,"rtl"]],setup:function(a,d,e,b){this.setValue(b.getDirection()||"")},commit:function(a,d,e,b){(a=this.getValue())?b.setAttribute("dir",a):b.removeAttribute("dir");b.removeStyle("direction")}},{type:"text",id:"langCode",label:h.langCode,setup:function(a,d){this.setValue(d.getAttribute("xml:lang")||d.getAttribute("lang")||"")},commit:function(a,d,e,b,c){c||((a=this.getValue())? -d.setAttributes({"xml:lang":a,lang:a}):d.removeAttributes({"xml:lang":1,lang:1}))}}]},{type:"hbox",children:[{type:"select",id:"charset",label:c.charset,style:"width: 100%",items:[[h.notSet,""],[c.charsetASCII,"us-ascii"],[c.charsetCE,"iso-8859-2"],[c.charsetCT,"big5"],[c.charsetCR,"iso-8859-5"],[c.charsetGR,"iso-8859-7"],[c.charsetJP,"iso-2022-jp"],[c.charsetKR,"iso-2022-kr"],[c.charsetTR,"iso-8859-9"],[c.charsetUN,"utf-8"],[c.charsetWE,"iso-8859-1"],[c.other,"other"]],"default":"",onChange:function(){this.getDialog().selectedCharset= -"other"!=this.getValue()?this.getValue():"";l.call(this)},setup:function(){this.metaCharset="charset"in k;var a=j(this.metaCharset?"charset":"content-type",1,1).call(this);!this.metaCharset&&a.match(/charset=[^=]+$/)&&(a=a.substring(a.indexOf("=")+1));if(a){this.setValue(a.toLowerCase());if(!this.getValue()){this.setValue("other");var d=this.getDialog().getContentElement("general","charsetOther");d&&d.setValue(a)}this.getDialog().selectedCharset=a}l.call(this)},commit:function(a,d,e,b,c){c||(b=this.getValue(), -c=this.getDialog().getContentElement("general","charsetOther"),"other"==b&&(b=c?c.getValue():""),b&&!this.metaCharset&&(b=(k["content-type"]?k["content-type"].getAttribute("content").split(";")[0]:"text/html")+"; charset="+b),i(this.metaCharset?"charset":"content-type",1,b).call(this,a,d,e))}},{type:"text",id:"charsetOther",label:c.charsetOther,onChange:function(){this.getDialog().selectedCharset=this.getValue()}}]},{type:"hbox",children:[{type:"select",id:"docType",label:c.docType,style:"width: 100%", -items:[[h.notSet,""],["XHTML 1.1",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'],["XHTML 1.0 Transitional",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'],["XHTML 1.0 Strict",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'],["XHTML 1.0 Frameset",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'], -["HTML 5","<!DOCTYPE html>"],["HTML 4.01 Transitional",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'],["HTML 4.01 Strict",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'],["HTML 4.01 Frameset",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'],["HTML 3.2",'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'],["HTML 2.0",'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'],[c.other, -"other"]],onChange:l,setup:function(){if(g.docType&&(this.setValue(g.docType),!this.getValue())){this.setValue("other");var a=this.getDialog().getContentElement("general","docTypeOther");a&&a.setValue(g.docType)}l.call(this)},commit:function(a,d,c,b,f){f||(a=this.getValue(),d=this.getDialog().getContentElement("general","docTypeOther"),g.docType="other"==a?d?d.getValue():"":a)}},{type:"text",id:"docTypeOther",label:c.docTypeOther}]},{type:"checkbox",id:"xhtmlDec",label:c.xhtmlDec,setup:function(){this.setValue(!!g.xmlDeclaration)}, -commit:function(a,d,c,b,f){f||(this.getValue()?(g.xmlDeclaration='<?xml version="1.0" encoding="'+(this.getDialog().selectedCharset||"utf-8")+'"?>',d.setAttribute("xmlns","http://www.w3.org/1999/xhtml")):(g.xmlDeclaration="",d.removeAttribute("xmlns")))}}]},{id:"design",label:c.design,elements:[{type:"hbox",widths:["60%","40%"],children:[{type:"vbox",children:[o("txtColor","txtColor",{setup:function(a,d,c,b){this.setValue(b.getComputedStyle("color"))},commit:function(a,d,c,b,f){if(this.isChanged()|| -f)b.removeAttribute("text"),(a=this.getValue())?b.setStyle("color",a):b.removeStyle("color")}}),o("bgColor","bgColor",{setup:function(a,d,c,b){a=b.getComputedStyle("background-color")||"";this.setValue("transparent"==a?"":a)},commit:function(a,d,c,b,f){if(this.isChanged()||f)b.removeAttribute("bgcolor"),(a=this.getValue())?b.setStyle("background-color",a):n(b,"background-color","transparent")}}),{type:"hbox",widths:["60%","40%"],padding:1,children:[{type:"text",id:"bgImage",label:c.bgImage,setup:function(a, -d,c,b){a=b.getComputedStyle("background-image")||"";a="none"==a?"":a.replace(/url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i,function(a,b,d){return d});this.setValue(a)},commit:function(a,d,c,b){b.removeAttribute("background");(a=this.getValue())?b.setStyle("background-image","url("+a+")"):n(b,"background-image","none")}},{type:"button",id:"bgImageChoose",label:h.browseServer,style:"display:inline-block;margin-top:10px;",hidden:!0,filebrowser:"design:bgImage"}]},{type:"checkbox",id:"bgFixed",label:c.bgFixed, -setup:function(a,d,c,b){this.setValue("fixed"==b.getComputedStyle("background-attachment"))},commit:function(a,d,c,b){this.getValue()?b.setStyle("background-attachment","fixed"):n(b,"background-attachment","scroll")}}]},{type:"vbox",children:[{type:"html",id:"marginTitle",html:'<div style="text-align: center; margin: 0px auto; font-weight: bold">'+c.margin+"</div>"},{type:"text",id:"marginTop",label:c.marginTop,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center", -setup:function(a,d,c,b){this.setValue(b.getStyle("margin-top")||b.getAttribute("margintop")||"")},commit:m("top")},{type:"hbox",children:[{type:"text",id:"marginLeft",label:c.marginLeft,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center",setup:function(a,d,c,b){this.setValue(b.getStyle("margin-left")||b.getAttribute("marginleft")||"")},commit:m("left")},{type:"text",id:"marginRight",label:c.marginRight,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center", -setup:function(a,d,c,b){this.setValue(b.getStyle("margin-right")||b.getAttribute("marginright")||"")},commit:m("right")}]},{type:"text",id:"marginBottom",label:c.marginBottom,style:"width: 80px; text-align: center",align:"center",inputStyle:"text-align: center",setup:function(a,c,e,b){this.setValue(b.getStyle("margin-bottom")||b.getAttribute("marginbottom")||"")},commit:m("bottom")}]}]}]},{id:"meta",label:c.meta,elements:[{type:"textarea",id:"metaKeywords",label:c.metaKeywords,setup:j("keywords"), -commit:i("keywords")},{type:"textarea",id:"metaDescription",label:c.metaDescription,setup:j("description"),commit:i("description")},{type:"text",id:"metaAuthor",label:c.metaAuthor,setup:j("author"),commit:i("author")},{type:"text",id:"metaCopyright",label:c.metaCopyright,setup:j("copyright"),commit:i("copyright")}]},{id:"preview",label:h.preview,elements:[{type:"html",id:"previewHtml",html:'<iframe src="'+q+'" style="width: 100%; height: 310px" hidefocus="true" frameborder="0" id="cke_docProps_preview_iframe"></iframe>', -onLoad:function(){this.getDialog().on("selectPage",function(a){if("preview"==a.data.page){var c=this;setTimeout(function(){var a=CKEDITOR.document.getById("cke_docProps_preview_iframe").getFrameDocument(),b=a.getElementsByTag("html").getItem(0),f=a.getHead(),g=a.getBody();c.commitContent(a,b,f,g,1)},50)}});CKEDITOR.document.getById("cke_docProps_preview_iframe").getAscendant("table").setStyle("height","100%")}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops-rtl.png deleted file mode 100644 index ed286a2587bcbcda876327117dc1521856390384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ=+GfV~EA++{uRCDv=_s`=di+V{@m5mTf=AHv5E=dh?7e+DaNe z8yb0x7Cx9iBj9F5-H8Kv`(ARW&DNQnlh$40sk~@gZ}0k5yW;Nh&UqF3@nEa?oZ|PE z&+n=?A7o$<JowpWk%p3|kj(LidyQwGt*EGY@bV>Rw(dFaPnRwUy)BczUh41Sa$o!Y zchkPdKN+5@Ru&ct3R-4vjf(FvG!8v`|JtovQhkpVl+HKH9#`yIWO?)ZU;V`wJ(?A6 zu>PycPBfY+k*&+Hs_Xf#ciNxMp6ylh+*DpyR~Hs~Rp!Mmy}Nnh$vml%i&imIC^fy_ z#c;g5yj-no(cbRvZsYTxISx-q+uUi`wn#%ju&=-W`NHlK#U0n8rcIyTxhNywLS|kk zN1@E-O`Du1sq8PYlC8Oa{Cn-1t^3^rj~qI5sCYu=tVz!;3uRUtwmmHHn6>QBhn?Ia zt4@_ztxeVbuzKq>6W{;!ZrQqhkN2$dTmCtE|NVT1mP8JR{r8t&%&3|B*oCEGlg`Tb zr4ES_bsS9$f<M)i?7L6MpG}*5_3G96S$DKqOPg1%I<cu|?p)bVHtDsse~WkD{a2ox z{5UvJBqujFb6RRh=+T<^*KA5oZ-2gc@nZhR3Llx{IeB?PZHnK&f0vPy`)51XZ+`Kv zUAq?PoR;sJa{G3)+hW1%*RQX5b$pRVSKRvLw{PFR_4?}-iD00}>C@h9&5Utt7fieV zwybjDtMhJ)H~#+d<Hz2sS%x!xIGPg7eJ@|OGG6~}^{S4JeX+5jQ*F+l+{Ba2v#RP> z(SqP<s*gWPgg)JSo_WLm{pWMc9zS@{uxiz_l!pHdhO0vD!@}=A0j5CJ64!{5l*E!$ ztK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)Mb^}u<l7`&;l+3hB+!}0tG9LkI wkObKfoS#-wo>-L10E}+E%)IR4<ivthz5Jr|+3#$mfQlGAUHx3vIVCg!09%@Se*gdg diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops.png b/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/docprops.png deleted file mode 100644 index 8bfdcb914d5adbcfec4cc846c99e7e598068c469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ>v$nV~EA++=+X$-?)h!tuGI|ROfNct9!rHV<kPGgxLvq)+F~F zYztpvaBzvqkNFi#eP8`iY+S;>r0d~TMc=56YtAI~Tz86alV5#tNkQ4$@ALF!W>_Dd zQ~l1;NUs0o*D4mrhTPkG!hJ7KSf&{{E%3VOu^CTi2YEgGZP)i$La<VNZP;ro9_J>7 z1DkYQo=kOc3Gmvudv~|tvOhwV^Um+S`_5f(XIy0D&n_3njJ2MZMHGGr&GmbpVl`Ll zc;PgadCwP4VLD)REa19n<-Ex%o`$o}UWnT77w{@AJ^lHYfB*iS|N8Z7ztW)^yZv=_ zb#B>zH!&T!dR0`(Y4=?<4kj~mbI!v8r#E#hdJ(+;zWv;@X>2>PwnlYuC^fzMT2(Qx z{n{_{<Ant>?FSPa_TT?smz&Fb|GS`|+T@e!=Rf;}hlgK`+VA$I{xfqzk6}vWwvLrd zep{{`DLj*6q<Fr#=DvAqq|kB0K#{#iGH!p<Uwn~+;d&{fM6cVo1cM)unn$Ded`+Ku z=-an%=5NcS1%Jl6>=T_BZ#|c9-RrvJ-6jk!ExXoDPiF`fVQp`3U$#o?+xPGFJcmEr z-@AA3{8O8r{P;0rkw(U>w4X1vStF+v78ZW|{`j%-y4OVo1r6_it9TxI`t+$ix4+oB z`ZR?D6*k8tJ}aL8oMj<1Yw==bV;Mf*(9o%d&ko<cD|`9n6rcr1wU({R&dbm5T*R?@ zUG^i3f63X|uT^|6@85M-&)?tw#<to;Tld|(apOnMgXo_O*B%{`D4zV>(lsz(n(Bex z)X28-tcTr(&s13j7iLPGJAZ!W`R8-y&eioeUG6YR<+RB^=EK)~<u;@%O$4Sw)e_f; zl9a@fRIB8oR3OD*WMF8lYhbQxU=m_zZe?H$MA`;MRt5&XOLhZOD3XTU{FKbJO57T3 zeli~cYLEok5S*V@Ql40p%1~Zju9umYU7Va)kgAtols@~NjTBH3gQu&X%Q~loCIFhL Be2V}8 diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png deleted file mode 100644 index 4a966da0391aa0b08e6f6b23e256bd7aa29ae48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1909 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png b/platforms/browser/www/lib/ckeditor/plugins/docprops/icons/hidpi/docprops.png deleted file mode 100644 index a66c86976062646ab353a237d46d120049047fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1941 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 bV_|S*E^l&Yo9;Xs00000NkvXXu0mjf<LQ{^ diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/af.js deleted file mode 100644 index dbda4d7b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/af.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","af",{bgColor:"Agtergrond kleur",bgFixed:"Vasgeklemde Agtergrond",bgImage:"Agtergrond Beeld URL",charset:"Karakterstel Kodeering",charsetASCII:"ASCII",charsetCE:"Sentraal Europa",charsetCR:"Cyrillic",charsetCT:"Chinees Traditioneel (Big5)",charsetGR:"Grieks",charsetJP:"Japanees",charsetKR:"Koreans",charsetOther:"Ander Karakterstel Kodeering",charsetTR:"Turks",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Kies",design:"Design",docTitle:"Bladsy Opskrif", -docType:"Dokument Opskrif Soort",docTypeOther:"Ander Dokument Opskrif Soort",label:"Dokument Eienskappe",margin:"Bladsy Rante",marginBottom:"Onder",marginLeft:"Links",marginRight:"Regs",marginTop:"Bo",meta:"Meta Data",metaAuthor:"Skrywer",metaCopyright:"Kopiereg",metaDescription:"Dokument Beskrywing",metaKeywords:"Dokument Index Sleutelwoorde(comma verdeelt)",other:"<ander>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokument Eienskappe", -txtColor:"Tekskleur",xhtmlDec:"Voeg XHTML verklaring by"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ar.js deleted file mode 100644 index bd26b491..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ar",{bgColor:"لون الخلفية",bgFixed:"جعلها علامة مائية",bgImage:"رابط الصورة الخلفية",charset:"ترميز الحروف",charsetASCII:"ASCII",charsetCE:"أوروبا الوسطى",charsetCR:"السيريلية",charsetCT:"الصينية التقليدية (Big5)",charsetGR:"اليونانية",charsetJP:"اليابانية",charsetKR:"الكورية",charsetOther:"ترميز آخر",charsetTR:"التركية",charsetUN:"Unicode (UTF-8)",charsetWE:"أوروبا الغربية",chooseColor:"اختر",design:"تصميم",docTitle:"عنوان الصفحة",docType:"ترويسة نوع الصفحة", -docTypeOther:"ترويسة نوع صفحة أخرى",label:"خصائص الصفحة",margin:"هوامش الصفحة",marginBottom:"سفلي",marginLeft:"أيسر",marginRight:"أيمن",marginTop:"علوي",meta:"المعرّفات الرأسية",metaAuthor:"الكاتب",metaCopyright:"المالك",metaDescription:"وصف الصفحة",metaKeywords:"الكلمات الأساسية (مفصولة بفواصل)َ",other:"<أخرى>",previewHtml:'<p>هذه مجرد <strong>كتابة بسيطة</strong>من أجل التمثيل. <a href="javascript:void(0)">CKEditor</a>.</p>',title:"خصائص الصفحة",txtColor:"لون النص",xhtmlDec:"تضمين إعلانات لغة XHTMLَ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bg.js deleted file mode 100644 index 5faba47d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bg",{bgColor:"Фон",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Кодова таблица",charsetASCII:"ASCII",charsetCE:"Централна европейска",charsetCR:"Cyrillic",charsetCT:"Китайски традиционен",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Друга кодова таблица",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Изберете",design:"Дизайн",docTitle:"Заглавие на страницата", -docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Настройки на документа",margin:"Page Margins",marginBottom:"Долу",marginLeft:"Ляво",marginRight:"Дясно",marginTop:"Горе",meta:"Мета етикети",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Други...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Настройки на документа",txtColor:"Цвят на шрифт",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bn.js deleted file mode 100644 index 838cbc8f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bn",{bgColor:"ব্যাকগ্রাউন্ড রং",bgFixed:"স্ক্রলহীন ব্যাকগ্রাউন্ড",bgImage:"ব্যাকগ্রাউন্ড ছবির URL",charset:"ক্যারেক্টার সেট এনকোডিং",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"অন্য ক্যারেক্টার সেট এনকোডিং",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"পেজ শীর্ষক", -docType:"ডক্যুমেন্ট টাইপ হেডিং",docTypeOther:"অন্য ডক্যুমেন্ট টাইপ হেডিং",label:"ডক্যুমেন্ট প্রোপার্টি",margin:"পেজ মার্জিন",marginBottom:"নীচে",marginLeft:"বামে",marginRight:"ডানে",marginTop:"উপর",meta:"মেটাডেটা",metaAuthor:"লেখক",metaCopyright:"কপীরাইট",metaDescription:"ডক্যূমেন্ট বর্ণনা",metaKeywords:"ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"ডক্যুমেন্ট প্রোপার্টি", -txtColor:"টেক্স্ট রং",xhtmlDec:"XHTML ডেক্লারেশন যুক্ত কর"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bs.js deleted file mode 100644 index 624acfc4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/bs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","bs",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Dno",marginLeft:"Lijevo",marginRight:"Desno",marginTop:"Vrh",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Boja teksta",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ca.js deleted file mode 100644 index 6eafe7fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ca",{bgColor:"Color de fons",bgFixed:"Fons sense desplaçament (Fixe)",bgImage:"URL de la imatge de fons",charset:"Codificació de conjunt de caràcters",charsetASCII:"ASCII",charsetCE:"Europeu Central",charsetCR:"Ciríl·lic",charsetCT:"Xinès tradicional (Big5)",charsetGR:"Grec",charsetJP:"Japonès",charsetKR:"Coreà",charsetOther:"Una altra codificació de caràcters",charsetTR:"Turc",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeu occidental",chooseColor:"Triar",design:"Disseny", -docTitle:"Títol de la pàgina",docType:"Capçalera de tipus de document",docTypeOther:"Un altra capçalera de tipus de document",label:"Propietats del document",margin:"Marges de pàgina",marginBottom:"Peu",marginLeft:"Esquerra",marginRight:"Dreta",marginTop:"Cap",meta:"Metadades",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Descripció del document",metaKeywords:"Paraules clau per a indexació (separats per coma)",other:"Altre...",previewHtml:'<p>Aquest és un <strong>text d\'exemple</strong>. Estàs utilitzant <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propietats del document",txtColor:"Color de Text",xhtmlDec:"Incloure declaracions XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cs.js deleted file mode 100644 index 568bac85..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","cs",{bgColor:"Barva pozadí",bgFixed:"Nerolovatelné (Pevné) pozadí",bgImage:"URL obrázku na pozadí",charset:"Znaková sada",charsetASCII:"ASCII",charsetCE:"Středoevropské jazyky",charsetCR:"Cyrilice",charsetCT:"Tradiční čínština (Big5)",charsetGR:"Řečtina",charsetJP:"Japonština",charsetKR:"Korejština",charsetOther:"Další znaková sada",charsetTR:"Turečtina",charsetUN:"Unicode (UTF-8)",charsetWE:"Západoevropské jazyky",chooseColor:"Výběr",design:"Vzhled",docTitle:"Titulek stránky", -docType:"Typ dokumentu",docTypeOther:"Jiný typ dokumetu",label:"Vlastnosti dokumentu",margin:"Okraje stránky",marginBottom:"Dolní",marginLeft:"Levý",marginRight:"Pravý",marginTop:"Horní",meta:"Metadata",metaAuthor:"Autor",metaCopyright:"Autorská práva",metaDescription:"Popis dokumentu",metaKeywords:"Klíčová slova (oddělená čárkou)",other:"<jiný>",previewHtml:'<p>Toto je <strong>ukázkový text</strong>. Používáte <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Vlastnosti dokumentu",txtColor:"Barva textu", -xhtmlDec:"Zahrnout deklarace XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cy.js deleted file mode 100644 index ef7e1cc9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/cy.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","cy",{bgColor:"Lliw Cefndir",bgFixed:"Cefndir Sefydlog (Ddim yn Sgrolio)",bgImage:"URL Delwedd Cefndir",charset:"Amgodio Set Nodau",charsetASCII:"ASCII",charsetCE:"Ewropeaidd Canol",charsetCR:"Syrilig",charsetCT:"Tsieinëeg Traddodiadol (Big5)",charsetGR:"Groeg",charsetJP:"Siapanëeg",charsetKR:"Corëeg",charsetOther:"Amgodio Set Nodau Arall",charsetTR:"Tyrceg",charsetUN:"Unicode (UTF-8)",charsetWE:"Ewropeaidd Gorllewinol",chooseColor:"Dewis",design:"Cynllunio",docTitle:"Teitl y Dudalen", -docType:"Pennawd Math y Ddogfen",docTypeOther:"Pennawd Math y Ddogfen Arall",label:"Priodweddau Dogfen",margin:"Ffin y Dudalen",marginBottom:"Gwaelod",marginLeft:"Chwith",marginRight:"Dde",marginTop:"Brig",meta:"Tagiau Meta",metaAuthor:"Awdur",metaCopyright:"Hawlfraint",metaDescription:"Disgrifiad y Ddogfen",metaKeywords:"Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)",other:"Arall...",previewHtml:'<p>Dyma ychydig o <strong>destun sampl</strong>. Rydych chi\'n defnyddio <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Priodweddau Dogfen",txtColor:"Lliw y Testun",xhtmlDec:"Cynnwys Datganiadau XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/da.js deleted file mode 100644 index 0a10cf09..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","da",{bgColor:"Baggrundsfarve",bgFixed:"Fastlåst baggrund",bgImage:"Baggrundsbillede URL",charset:"Tegnsætskode",charsetASCII:"ASCII",charsetCE:"Centraleuropæisk",charsetCR:"Kyrillisk",charsetCT:"Traditionel kinesisk (Big5)",charsetGR:"Græsk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Anden tegnsætskode",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropæisk",chooseColor:"Vælg",design:"Design",docTitle:"Sidetitel",docType:"Dokumenttype kategori", -docTypeOther:"Anden dokumenttype kategori",label:"Egenskaber for dokument",margin:"Sidemargen",marginBottom:"Nederst",marginLeft:"Venstre",marginRight:"Højre",marginTop:"Øverst",meta:"Metatags",metaAuthor:"Forfatter",metaCopyright:"Copyright",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument index nøgleord (kommasepareret)",other:"<anden>",previewHtml:'<p>Dette er et <strong>eksempel på noget tekst</strong>. Du benytter <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Egenskaber for dokument", -txtColor:"Tekstfarve",xhtmlDec:"Inkludere XHTML deklartion"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/de.js deleted file mode 100644 index 6dee2e4a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","de",{bgColor:"Hintergrundfarbe",bgFixed:"feststehender Hintergrund",bgImage:"Hintergrundbild URL",charset:"Zeichenkodierung",charsetASCII:"ASCII",charsetCE:"Zentraleuropäisch",charsetCR:"Kyrillisch",charsetCT:"traditionell Chinesisch (Big5)",charsetGR:"Griechisch",charsetJP:"Japanisch",charsetKR:"Koreanisch",charsetOther:"Andere Zeichenkodierung",charsetTR:"Türkisch",charsetUN:"Unicode (UTF-8)",charsetWE:"Westeuropäisch",chooseColor:"Wählen",design:"Design",docTitle:"Seitentitel", -docType:"Dokumententyp",docTypeOther:"Anderer Dokumententyp",label:"Dokument-Eigenschaften",margin:"Seitenränder",marginBottom:"Unten",marginLeft:"Links",marginRight:"Rechts",marginTop:"Oben",meta:"Metadaten",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Dokument-Beschreibung",metaKeywords:"Schlüsselwörter (durch Komma getrennt)",other:"<andere>",previewHtml:'<p>Das ist ein <strong>Beispieltext</strong>. Du schreibst in <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokument-Eigenschaften", -txtColor:"Textfarbe",xhtmlDec:"Beziehe XHTML Deklarationen ein"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/el.js deleted file mode 100644 index 3f0999c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","el",{bgColor:"Χρώμα Φόντου",bgFixed:"Φόντο Χωρίς Κύλιση (Σταθερό)",bgImage:"Διεύθυνση Εικόνας Φόντου",charset:"Κωδικοποίηση Χαρακτήρων",charsetASCII:"ASCII",charsetCE:"Κεντρικής Ευρώπης",charsetCR:"Κυριλλική",charsetCT:"Παραδοσιακή Κινέζικη (Big5)",charsetGR:"Ελληνική",charsetJP:"Ιαπωνική",charsetKR:"Κορεάτικη",charsetOther:"Άλλη Κωδικοποίηση Χαρακτήρων",charsetTR:"Τουρκική",charsetUN:"Διεθνής (UTF-8)",charsetWE:"Δυτικής Ευρώπης",chooseColor:"Επιλέξτε",design:"Σχεδιασμός", -docTitle:"Τίτλος Σελίδας",docType:"Κεφαλίδα Τύπου Εγγράφου",docTypeOther:"Άλλη Κεφαλίδα Τύπου Εγγράφου",label:"Ιδιότητες Εγγράφου",margin:"Περιθώρια Σελίδας",marginBottom:"Κάτω",marginLeft:"Αριστερά",marginRight:"Δεξιά",marginTop:"Κορυφή",meta:"Μεταδεδομένα",metaAuthor:"Δημιουργός",metaCopyright:"Πνευματικά Δικαιώματα",metaDescription:"Περιγραφή Εγγράφου",metaKeywords:"Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)",other:"Άλλο...",previewHtml:'<p>Αυτό είναι ένα <strong>παραδειγματικό κείμενο</strong>. Χρησιμοποιείτε το <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Ιδιότητες Εγγράφου",txtColor:"Χρώμα Κειμένου",xhtmlDec:"Να Συμπεριληφθούν οι Δηλώσεις XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-au.js deleted file mode 100644 index 1991fce7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-au.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-au",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-ca.js deleted file mode 100644 index f135acfa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-ca",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-gb.js deleted file mode 100644 index 4ae5c6f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en-gb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en-gb",{bgColor:"Background Colour",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma-separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Colour",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en.js deleted file mode 100644 index 73926df2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/en.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","en",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eo.js deleted file mode 100644 index 182ea18b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","eo",{bgColor:"Fona Koloro",bgFixed:"Neruluma Fono",bgImage:"URL de Fona Bildo",charset:"Signara Kodo",charsetASCII:"ASCII",charsetCE:"Centra Eŭropa",charsetCR:"Cirila",charsetCT:"Tradicia Ĉina (Big5)",charsetGR:"Greka",charsetJP:"Japana",charsetKR:"Korea",charsetOther:"Alia Signara Kodo",charsetTR:"Turka",charsetUN:"Unikodo (UTF-8)",charsetWE:"Okcidenta Eŭropa",chooseColor:"Elektu",design:"Dizajno",docTitle:"Paĝotitolo",docType:"Dokumenta Tipo",docTypeOther:"Alia Dokumenta Tipo", -label:"Dokumentaj Atributoj",margin:"Paĝaj Marĝenoj",marginBottom:"Malsupra",marginLeft:"Maldekstra",marginRight:"Dekstra",marginTop:"Supra",meta:"Metadatenoj",metaAuthor:"Verkinto",metaCopyright:"Kopirajto",metaDescription:"Dokumenta Priskribo",metaKeywords:"Ŝlosilvortoj de la Dokumento (apartigitaj de komoj)",other:"<alia>",previewHtml:'<p>Tio estas <strong>sampla teksto</strong>. Vi estas uzanta <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentaj Atributoj",txtColor:"Teksta Koloro", -xhtmlDec:"Inkluzivi XHTML Deklarojn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/es.js deleted file mode 100644 index 8170464f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/es.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","es",{bgColor:"Color de fondo",bgFixed:"Fondo fijo (no se desplaza)",bgImage:"Imagen de fondo",charset:"Codificación de caracteres",charsetASCII:"ASCII",charsetCE:"Centro Europeo",charsetCR:"Ruso",charsetCT:"Chino Tradicional (Big5)",charsetGR:"Griego",charsetJP:"Japonés",charsetKR:"Koreano",charsetOther:"Otra codificación de caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeo occidental",chooseColor:"Elegir",design:"Diseño",docTitle:"Título de página", -docType:"Tipo de documento",docTypeOther:"Otro tipo de documento",label:"Propiedades del documento",margin:"Márgenes",marginBottom:"Inferior",marginLeft:"Izquierdo",marginRight:"Derecho",marginTop:"Superior",meta:"Meta Tags",metaAuthor:"Autor",metaCopyright:"Copyright",metaDescription:"Descripción del documento",metaKeywords:"Palabras claves del documento separadas por coma (meta keywords)",other:"Otro...",previewHtml:'<p>Este es un <strong>texto de ejemplo</strong>. Usted está usando <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propiedades del documento",txtColor:"Color del texto",xhtmlDec:"Incluir declaración XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/et.js deleted file mode 100644 index 43ad55d2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","et",{bgColor:"Taustavärv",bgFixed:"Mittekeritav tagataust",bgImage:"Taustapildi URL",charset:"Märgistiku kodeering",charsetASCII:"ASCII",charsetCE:"Kesk-Euroopa",charsetCR:"Kirillisa",charsetCT:"Hiina traditsiooniline (Big5)",charsetGR:"Kreeka",charsetJP:"Jaapani",charsetKR:"Korea",charsetOther:"Ülejäänud märgistike kodeeringud",charsetTR:"Türgi",charsetUN:"Unicode (UTF-8)",charsetWE:"Lääne-Euroopa",chooseColor:"Vali",design:"Disain",docTitle:"Lehekülje tiitel", -docType:"Dokumendi tüüppäis",docTypeOther:"Teised dokumendi tüüppäised",label:"Dokumendi omadused",margin:"Lehekülje äärised",marginBottom:"Alaserv",marginLeft:"Vasakserv",marginRight:"Paremserv",marginTop:"Ülaserv",meta:"Meta andmed",metaAuthor:"Autor",metaCopyright:"Autoriõigus",metaDescription:"Dokumendi kirjeldus",metaKeywords:"Dokumendi võtmesõnad (eraldatud komadega)",other:"<muu>",previewHtml:'<p>See on <strong>näidistekst</strong>. Sa kasutad <a href="javascript:void(0)">CKEditori</a>.</p>', -title:"Dokumendi omadused",txtColor:"Teksti värv",xhtmlDec:"Arva kaasa XHTML deklaratsioonid"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eu.js deleted file mode 100644 index 16175cc1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","eu",{bgColor:"Atzeko Kolorea",bgFixed:"Korritze gabeko Atzealdea",bgImage:"Atzeko Irudiaren URL-a",charset:"Karaktere Multzoaren Kodeketa",charsetASCII:"ASCII",charsetCE:"Erdialdeko Europakoa",charsetCR:"Zirilikoa",charsetCT:"Txinatar Tradizionala (Big5)",charsetGR:"Grekoa",charsetJP:"Japoniarra",charsetKR:"Korearra",charsetOther:"Beste Karaktere Multzoko Kodeketa",charsetTR:"Turkiarra",charsetUN:"Unicode (UTF-8)",charsetWE:"Mendebaldeko Europakoa",chooseColor:"Choose", -design:"Diseinua",docTitle:"Orriaren Izenburua",docType:"Document Type Goiburua",docTypeOther:"Beste Document Type Goiburua",label:"Dokumentuaren Ezarpenak",margin:"Orrialdearen marjinak",marginBottom:"Behean",marginLeft:"Ezkerrean",marginRight:"Eskuman",marginTop:"Goian",meta:"Meta Informazioa",metaAuthor:"Egilea",metaCopyright:"Copyright",metaDescription:"Dokumentuaren Deskribapena",metaKeywords:"Dokumentuaren Gako-hitzak (komarekin bananduta)",other:"<other>",previewHtml:'<p>Hau <strong>adibideko testua</strong> da. <a href="javascript:void(0)">CKEditor</a> erabiltzen ari zara.</p>', -title:"Dokumentuaren Ezarpenak",txtColor:"Testu Kolorea",xhtmlDec:"XHTML Ezarpenak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fa.js deleted file mode 100644 index 078e3838..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fa",{bgColor:"رنگ پس​زمینه",bgFixed:"پس​زمینهٴ ثابت (بدون حرکت)",bgImage:"URL تصویر پسزمینه",charset:"رمزگذاری نویسه​گان",charsetASCII:"اسکی",charsetCE:"اروپای مرکزی",charsetCR:"سیریلیک",charsetCT:"چینی رسمی (Big5)",charsetGR:"یونانی",charsetJP:"ژاپنی",charsetKR:"کره​ای",charsetOther:"رمزگذاری نویسه​گان دیگر",charsetTR:"ترکی",charsetUN:"یونیکد (UTF-8)",charsetWE:"اروپای غربی",chooseColor:"انتخاب",design:"طراحی",docTitle:"عنوان صفحه",docType:"عنوان نوع سند",docTypeOther:"عنوان نوع سند دیگر", -label:"ویژگی​های سند",margin:"حاشیه​های صفحه",marginBottom:"پایین",marginLeft:"چپ",marginRight:"راست",marginTop:"بالا",meta:"فراداده",metaAuthor:"نویسنده",metaCopyright:"حق انتشار",metaDescription:"توصیف سند",metaKeywords:"کلیدواژگان نمایه​گذاری سند (با کاما جدا شوند)",other:"<سایر>",previewHtml:'<p>این یک <strong>متن نمونه</strong> است. شما در حال استفاده از <a href="javascript:void(0)">CKEditor</a> هستید.</p>',title:"ویژگی​های سند",txtColor:"رنگ متن",xhtmlDec:"شامل تعاریف XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fi.js deleted file mode 100644 index 22a9740a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fi",{bgColor:"Taustaväri",bgFixed:"Paikallaanpysyvä tausta",bgImage:"Taustakuva",charset:"Merkistökoodaus",charsetASCII:"ASCII",charsetCE:"Keskieurooppalainen",charsetCR:"Kyrillinen",charsetCT:"Kiina, perinteinen (Big5)",charsetGR:"Kreikka",charsetJP:"Japani",charsetKR:"Korealainen",charsetOther:"Muu merkistökoodaus",charsetTR:"Turkkilainen",charsetUN:"Unicode (UTF-8)",charsetWE:"Länsieurooppalainen",chooseColor:"Valitse",design:"Sommittelu",docTitle:"Sivun nimi", -docType:"Dokumentin tyyppi",docTypeOther:"Muu dokumentin tyyppi",label:"Dokumentin ominaisuudet",margin:"Sivun marginaalit",marginBottom:"Ala",marginLeft:"Vasen",marginRight:"Oikea",marginTop:"Ylä",meta:"Metatieto",metaAuthor:"Tekijä",metaCopyright:"Tekijänoikeudet",metaDescription:"Kuvaus",metaKeywords:"Hakusanat (pilkulla erotettuna)",other:"<muu>",previewHtml:'<p>Tämä on <strong>esimerkkitekstiä</strong>. Käytät juuri <a href="javascript:void(0)">CKEditoria</a>.</p>',title:"Dokumentin ominaisuudet", -txtColor:"Tekstiväri",xhtmlDec:"Lisää XHTML julistukset"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fo.js deleted file mode 100644 index ef352698..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fo",{bgColor:"Bakgrundslitur",bgFixed:"Læst bakgrund (rullar ikki)",bgImage:"Leið til bakgrundsmynd (URL)",charset:"Teknsett koda",charsetASCII:"ASCII",charsetCE:"Miðeuropa",charsetCR:"Cyrilliskt",charsetCT:"Kinesiskt traditionelt (Big5)",charsetGR:"Grikst",charsetJP:"Japanskt",charsetKR:"Koreanskt",charsetOther:"Onnur teknsett koda",charsetTR:"Turkiskt",charsetUN:"Unicode (UTF-8)",charsetWE:"Vestureuropa",chooseColor:"Vel",design:"Design",docTitle:"Síðuheiti", -docType:"Dokumentslag yvirskrift",docTypeOther:"Annað dokumentslag yvirskrift",label:"Eginleikar fyri dokument",margin:"Síðubreddar",marginBottom:"Niðast",marginLeft:"Vinstra",marginRight:"Høgra",marginTop:"Ovast",meta:"META-upplýsingar",metaAuthor:"Høvundur",metaCopyright:"Upphavsrættindi",metaDescription:"Dokumentlýsing",metaKeywords:"Dokument index lyklaorð (sundurbýtt við komma)",other:"<annað>",previewHtml:'<p>Hetta er ein <strong>royndartekstur</strong>. Tygum brúka <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Eginleikar fyri dokument",txtColor:"Tekstlitur",xhtmlDec:"Viðfest XHTML deklaratiónir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js deleted file mode 100644 index 31a809e8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fr-ca",{bgColor:"Couleur de fond",bgFixed:"Image fixe sans défilement",bgImage:"Image de fond",charset:"Encodage",charsetASCII:"ACSII",charsetCE:"Europe Centrale",charsetCR:"Cyrillique",charsetCT:"Chinois Traditionnel (Big5)",charsetGR:"Grecque",charsetJP:"Japonais",charsetKR:"Coréen",charsetOther:"Autre encodage",charsetTR:"Turque",charsetUN:"Unicode (UTF-8)",charsetWE:"Occidental",chooseColor:"Sélectionner",design:"Design",docTitle:"Titre de la page",docType:"Type de document", -docTypeOther:"Autre type de document",label:"Propriétés du document",margin:"Marges",marginBottom:"Bas",marginLeft:"Gauche",marginRight:"Droite",marginTop:"Haut",meta:"Méta-données",metaAuthor:"Auteur",metaCopyright:"Copyright",metaDescription:"Description",metaKeywords:"Mots-clés (séparés par des virgules)",other:"Autre...",previewHtml:'<p>Voici un <strong>example de texte</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Propriétés du document",txtColor:"Couleur de caractère", -xhtmlDec:"Inclure les déclarations XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr.js deleted file mode 100644 index f22e2493..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","fr",{bgColor:"Couleur de fond",bgFixed:"Image fixe sans défilement",bgImage:"Image de fond",charset:"Encodage de caractère",charsetASCII:"ASCII",charsetCE:"Europe Centrale",charsetCR:"Cyrillique",charsetCT:"Chinois Traditionnel (Big5)",charsetGR:"Grec",charsetJP:"Japonais",charsetKR:"Coréen",charsetOther:"Autre encodage de caractère",charsetTR:"Turc",charsetUN:"Unicode (UTF-8)",charsetWE:"Occidental",chooseColor:"Choisissez",design:"Design",docTitle:"Titre de la page", -docType:"Type de document",docTypeOther:"Autre type de document",label:"Propriétés du document",margin:"Marges",marginBottom:"Bas",marginLeft:"Gauche",marginRight:"Droite",marginTop:"Haut",meta:"Métadonnées",metaAuthor:"Auteur",metaCopyright:"Copyright",metaDescription:"Description",metaKeywords:"Mots-clés (séparés par des virgules)",other:"<autre>",previewHtml:'<p>Ceci est un <strong>texte d\'exemple</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Propriétés du document", -txtColor:"Couleur de texte",xhtmlDec:"Inclure les déclarations XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gl.js deleted file mode 100644 index f8b0c21d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","gl",{bgColor:"Cor do fondo",bgFixed:"Fondo fixo (non se despraza)",bgImage:"URL da imaxe do fondo",charset:"Codificación de caracteres",charsetASCII:"ASCII",charsetCE:"Centro europeo",charsetCR:"Cirílico",charsetCT:"Chinés tradicional (Big5)",charsetGR:"Grego",charsetJP:"Xaponés",charsetKR:"Coreano",charsetOther:"Outra codificación de caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europeo occidental",chooseColor:"Escoller",design:"Deseño", -docTitle:"Título da páxina",docType:"Cabeceira do tipo de documento",docTypeOther:"Outra cabeceira do tipo de documento",label:"Propiedades do documento",margin:"Marxes da páxina",marginBottom:"Abaixo",marginLeft:"Esquerda",marginRight:"Dereita",marginTop:"Arriba",meta:"Meta etiquetas",metaAuthor:"Autor",metaCopyright:"Dereito de autoría",metaDescription:"Descrición do documento",metaKeywords:"Palabras clave de indexación do documento (separadas por comas)",other:"Outro...",previewHtml:'<p>Este é un <strong>texto de exemplo</strong>. Vostede esta a empregar o <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propiedades do documento",txtColor:"Cor do texto",xhtmlDec:"Incluír as declaracións XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gu.js deleted file mode 100644 index 7458ffe6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/gu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","gu",{bgColor:"બૅકગ્રાઉન્ડ રંગ",bgFixed:"સ્ક્રોલ ન થાય તેવું બૅકગ્રાઉન્ડ",bgImage:"બૅકગ્રાઉન્ડ ચિત્ર URL",charset:"કેરેક્ટર સેટ એન્કોડિંગ",charsetASCII:"ASCII",charsetCE:"મધ્ય યુરોપિઅન (Central European)",charsetCR:"સિરીલિક (Cyrillic)",charsetCT:"ચાઇનીઝ (Chinese Traditional Big5)",charsetGR:"ગ્રીક (Greek)",charsetJP:"જાપાનિઝ (Japanese)",charsetKR:"કોરીયન (Korean)",charsetOther:"અન્ય કેરેક્ટર સેટ એન્કોડિંગ",charsetTR:"ટર્કિ (Turkish)",charsetUN:"યૂનિકોડ (UTF-8)", -charsetWE:"પશ્ચિમ યુરોપિઅન (Western European)",chooseColor:"વિકલ્પ",design:"ડીસા",docTitle:"પેજ મથાળું/ટાઇટલ",docType:"ડૉક્યુમન્ટ પ્રકાર શીર્ષક",docTypeOther:"અન્ય ડૉક્યુમન્ટ પ્રકાર શીર્ષક",label:"ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ",margin:"પેજ માર્જિન",marginBottom:"નીચે",marginLeft:"ડાબી",marginRight:"જમણી",marginTop:"ઉપર",meta:"મેટાડૅટા",metaAuthor:"લેખક",metaCopyright:"કૉપિરાઇટ",metaDescription:"ડૉક્યુમન્ટ વર્ણન",metaKeywords:"ડૉક્યુમન્ટ ઇન્ડેક્સ સંકેતશબ્દ (અલ્પવિરામ (,) થી અલગ કરો)",other:"<other>",previewHtml:'<p>આ એક <strong>સેમ્પલ ટેક્ષ્ત્</strong> છે. તમે <a href="javascript:void(0)">CKEditor</a> વાપરો છો.</p>', -title:"ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ",txtColor:"શબ્દનો રંગ",xhtmlDec:"XHTML સૂચના સમાવિષ્ટ કરવી"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/he.js deleted file mode 100644 index d71d1586..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","he",{bgColor:"צבע רקע",bgFixed:"רקע לא נגלל (צמוד)",bgImage:"כתובת של תמונת רקע",charset:"קידוד תווים",charsetASCII:"ASCII",charsetCE:"מרכז אירופאי",charsetCR:"קירילי",charsetCT:"סיני מסורתי (Big5)",charsetGR:"יווני",charsetJP:"יפני",charsetKR:"קוריאני",charsetOther:"קידוד תווים אחר",charsetTR:"טורקי",charsetUN:"יוניקוד (UTF-8)",charsetWE:"מערב אירופאי",chooseColor:"בחירה",design:"עיצוב",docTitle:"כותרת עמוד",docType:"כותר סוג מסמך",docTypeOther:"כותר סוג מסמך אחר", -label:"מאפייני מסמך",margin:"מרווחי עמוד",marginBottom:"תחתון",marginLeft:"שמאלי",marginRight:"ימני",marginTop:"עליון",meta:"תגי Meta",metaAuthor:"מחבר/ת",metaCopyright:"זכויות יוצרים",metaDescription:"תיאור המסמך",metaKeywords:"מילות מפתח של המסמך (מופרדות בפסיק)",other:"אחר...",previewHtml:'<p>זהו <strong>טקסט הדגמה</strong>. את/ה משתמש/ת ב<a href="javascript:void(0)">CKEditor</a>.</p>',title:"מאפייני מסמך",txtColor:"צבע טקסט",xhtmlDec:"כלול הכרזות XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hi.js deleted file mode 100644 index 68266186..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hi",{bgColor:"बैक्ग्राउन्ड रंग",bgFixed:"स्क्रॉल न करने वाला बैक्ग्राउन्ड",bgImage:"बैक्ग्राउन्ड तस्वीर URL",charset:"करेक्टर सॅट ऍन्कोडिंग",charsetASCII:"ASCII",charsetCE:"मध्य यूरोपीय (Central European)",charsetCR:"सिरीलिक (Cyrillic)",charsetCT:"चीनी (Chinese Traditional Big5)",charsetGR:"यवन (Greek)",charsetJP:"जापानी (Japanese)",charsetKR:"कोरीयन (Korean)",charsetOther:"अन्य करेक्टर सॅट ऍन्कोडिंग",charsetTR:"तुर्की (Turkish)",charsetUN:"यूनीकोड (UTF-8)",charsetWE:"पश्चिम यूरोपीय (Western European)", -chooseColor:"Choose",design:"Design",docTitle:"पेज शीर्षक",docType:"डॉक्यूमॅन्ट प्रकार शीर्षक",docTypeOther:"अन्य डॉक्यूमॅन्ट प्रकार शीर्षक",label:"डॉक्यूमॅन्ट प्रॉपर्टीज़",margin:"पेज मार्जिन",marginBottom:"नीचे",marginLeft:"बायें",marginRight:"दायें",marginTop:"ऊपर",meta:"मॅटाडेटा",metaAuthor:"लेखक",metaCopyright:"कॉपीराइट",metaDescription:"डॉक्यूमॅन्ट करॅक्टरन",metaKeywords:"डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)",other:"<अन्य>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"डॉक्यूमॅन्ट प्रॉपर्टीज़",txtColor:"टेक्स्ट रंग",xhtmlDec:"XHTML सूचना सम्मिलित करें"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hr.js deleted file mode 100644 index 3477c6f0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hr",{bgColor:"Boja pozadine",bgFixed:"Pozadine se ne pomiče",bgImage:"URL slike pozadine",charset:"Enkodiranje znakova",charsetASCII:"ASCII",charsetCE:"Središnja Europa",charsetCR:"Ćirilica",charsetCT:"Tradicionalna kineska (Big5)",charsetGR:"Grčka",charsetJP:"Japanska",charsetKR:"Koreanska",charsetOther:"Ostalo enkodiranje znakova",charsetTR:"Turska",charsetUN:"Unicode (UTF-8)",charsetWE:"Zapadna Europa",chooseColor:"Odaberi",design:"Dizajn",docTitle:"Naslov stranice", -docType:"Zaglavlje vrste dokumenta",docTypeOther:"Ostalo zaglavlje vrste dokumenta",label:"Svojstva dokumenta",margin:"Margine stranice",marginBottom:"Dolje",marginLeft:"Lijevo",marginRight:"Desno",marginTop:"Vrh",meta:"Meta Data",metaAuthor:"Autor",metaCopyright:"Autorska prava",metaDescription:"Opis dokumenta",metaKeywords:"Ključne riječi dokumenta (odvojene zarezom)",other:"<drugi>",previewHtml:'<p>Ovo je neki <strong>primjer teksta</strong>. Vi koristite <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Svojstva dokumenta",txtColor:"Boja teksta",xhtmlDec:"Ubaci XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hu.js deleted file mode 100644 index beeed2b5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","hu",{bgColor:"Háttérszín",bgFixed:"Nem gördíthető háttér",bgImage:"Háttérkép cím",charset:"Karakterkódolás",charsetASCII:"ASCII",charsetCE:"Közép-Európai",charsetCR:"Cyrill",charsetCT:"Kínai Tradicionális (Big5)",charsetGR:"Görög",charsetJP:"Japán",charsetKR:"Koreai",charsetOther:"Más karakterkódolás",charsetTR:"Török",charsetUN:"Unicode (UTF-8)",charsetWE:"Nyugat-Európai",chooseColor:"Válasszon",design:"Design",docTitle:"Oldalcím",docType:"Dokumentum típus fejléc", -docTypeOther:"Más dokumentum típus fejléc",label:"Dokumentum tulajdonságai",margin:"Oldal margók",marginBottom:"Alsó",marginLeft:"Bal",marginRight:"Jobb",marginTop:"Felső",meta:"Meta adatok",metaAuthor:"Szerző",metaCopyright:"Szerzői jog",metaDescription:"Dokumentum leírás",metaKeywords:"Dokumentum keresőszavak (vesszővel elválasztva)",other:"<más>",previewHtml:'<p>Ez itt egy <strong>példa</strong>. A <a href="javascript:void(0)">CKEditor</a>-t használod.</p>',title:"Dokumentum tulajdonságai",txtColor:"Betűszín", -xhtmlDec:"XHTML deklarációk beillesztése"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/id.js deleted file mode 100644 index 9716026d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/id.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","id",{bgColor:"Warna Latar Belakang",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Pilih",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bawah",marginLeft:"Kiri",marginRight:"Kanan",marginTop:"Atas",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/is.js deleted file mode 100644 index 9085a4f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/is.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","is",{bgColor:"Bakgrunnslitur",bgFixed:"Læstur bakgrunnur",bgImage:"Slóð bakgrunnsmyndar",charset:"Letursett",charsetASCII:"ASCII",charsetCE:"Mið-evrópskt",charsetCR:"Kýrilskt",charsetCT:"Kínverskt, hefðbundið (Big5)",charsetGR:"Grískt",charsetJP:"Japanskt",charsetKR:"Kóreskt",charsetOther:"Annað letursett",charsetTR:"Tyrkneskt",charsetUN:"Unicode (UTF-8)",charsetWE:"Vestur-evrópst",chooseColor:"Choose",design:"Design",docTitle:"Titill síðu",docType:"Flokkur skjalategunda", -docTypeOther:"Annar flokkur skjalategunda",label:"Eigindi skjals",margin:"Hliðarspássía",marginBottom:"Neðst",marginLeft:"Vinstri",marginRight:"Hægri",marginTop:"Efst",meta:"Lýsigögn",metaAuthor:"Höfundur",metaCopyright:"Höfundarréttur",metaDescription:"Lýsing skjals",metaKeywords:"Lykilorð efnisorðaskrár (aðgreind með kommum)",other:"<annar>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Eigindi skjals",txtColor:"Litur texta", -xhtmlDec:"Fella inn XHTML lýsingu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/it.js deleted file mode 100644 index 56edb3af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","it",{bgColor:"Colore di sfondo",bgFixed:"Sfondo fissato",bgImage:"Immagine di sfondo",charset:"Set di caretteri",charsetASCII:"ASCII",charsetCE:"Europa Centrale",charsetCR:"Cirillico",charsetCT:"Cinese Tradizionale (Big5)",charsetGR:"Greco",charsetJP:"Giapponese",charsetKR:"Coreano",charsetOther:"Altro set di caretteri",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Occidentale",chooseColor:"Scegli",design:"Disegna",docTitle:"Titolo pagina",docType:"Intestazione DocType", -docTypeOther:"Altra intestazione DocType",label:"Proprietà del Documento",margin:"Margini",marginBottom:"In Basso",marginLeft:"A Sinistra",marginRight:"A Destra",marginTop:"In Alto",meta:"Meta Data",metaAuthor:"Autore",metaCopyright:"Copyright",metaDescription:"Descrizione documento",metaKeywords:"Chiavi di indicizzazione documento (separate da virgola)",other:"<altro>",previewHtml:'<p>Questo è un <strong>testo di esempio</strong>. State usando <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Proprietà del Documento", -txtColor:"Colore testo",xhtmlDec:"Includi dichiarazione XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ja.js deleted file mode 100644 index 34f57912..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ja",{bgColor:"背景色",bgFixed:"スクロールしない背景",bgImage:"背景画像 URL",charset:"文字コード",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"日本語",charsetKR:"Korean",charsetOther:"他の文字セット符号化",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"色の選択",design:"デザイン",docTitle:"ページタイトル",docType:"文書タイプヘッダー",docTypeOther:"その他文書タイプヘッダー",label:"文書 プロパティ",margin:"ページ・マージン", -marginBottom:"下部",marginLeft:"左",marginRight:"右",marginTop:"上部",meta:"メタデータ",metaAuthor:"文書の作者",metaCopyright:"文書の著作権",metaDescription:"文書の概要",metaKeywords:"文書のキーワード(カンマ区切り)",other:"<その他の>",previewHtml:'<p>これは<strong>テキストサンプル</strong>です。 あなたは、<a href="javascript:void(0)">CKEditor</a>を使っています。</p>',title:"文書 プロパティ",txtColor:"テキスト色",xhtmlDec:"XHTML宣言をインクルード"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ka.js deleted file mode 100644 index 50f71dee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ka",{bgColor:"ფონის ფერი",bgFixed:"უმოძრაო (ფიქსირებული) ფონი",bgImage:"ფონური სურათის URL",charset:"კოდირება",charsetASCII:"ამერიკული (ASCII)",charsetCE:"ცენტრალურ ევროპული",charsetCR:"კირილური",charsetCT:"ტრადიციული ჩინური (Big5)",charsetGR:"ბერძნული",charsetJP:"იაპონური",charsetKR:"კორეული",charsetOther:"სხვა კოდირებები",charsetTR:"თურქული",charsetUN:"უნიკოდი (UTF-8)",charsetWE:"დასავლეთ ევროპული",chooseColor:"არჩევა",design:"დიზაინი",docTitle:"გვერდის სათაური", -docType:"დოკუმენტის ტიპი",docTypeOther:"სხვა ტიპის დოკუმენტი",label:"დოკუმენტის პარამეტრები",margin:"გვერდის კიდეები",marginBottom:"ქვედა",marginLeft:"მარცხენა",marginRight:"მარჯვენა",marginTop:"ზედა",meta:"მეტაTag-ები",metaAuthor:"ავტორი",metaCopyright:"Copyright",metaDescription:"დოკუმენტის აღწერა",metaKeywords:"დოკუმენტის საკვანძო სიტყვები (მძიმით გამოყოფილი)",other:"სხვა...",previewHtml:'<p>ეს არის <strong>საცდელი ტექსტი</strong>. თქვენ <a href="javascript:void(0)">CKEditor</a>-ით სარგებლობთ.</p>', -title:"დოკუმენტის პარამეტრები",txtColor:"ტექსტის ფერი",xhtmlDec:"XHTML დეკლარაციების ჩართვა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/km.js deleted file mode 100644 index 34272904..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/km.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","km",{bgColor:"ពណ៌​ផ្ទៃ​ក្រោយ",bgFixed:"ផ្ទៃ​ក្រោយ​គ្មាន​ការ​រំកិល (នឹង​ថ្កល់)",bgImage:"URL រូបភាព​ផ្ទៃ​ក្រោយ",charset:"ការ​អ៊ិនកូដ​តួ​អក្សរ",charsetASCII:"ASCII",charsetCE:"អឺរ៉ុប​កណ្ដាល",charsetCR:"Cyrillic",charsetCT:"ចិន​បុរាណ (Big5)",charsetGR:"ក្រិក",charsetJP:"ជប៉ុន",charsetKR:"កូរ៉េ",charsetOther:"កំណត់លេខកូតភាសាផ្សេងទៀត",charsetTR:"ទួរគី",charsetUN:"យូនីកូដ (UTF-8)",charsetWE:"អឺរ៉ុប​ខាង​លិច",chooseColor:"រើស",design:"រចនា",docTitle:"ចំណងជើងទំព័រ",docType:"ប្រភេទក្បាលទំព័រ​ឯកសារ", -docTypeOther:"ប្រភេទក្បាលទំព័រឯកសារ​ផ្សេងទៀត",label:"លក្ខណៈ​សម្បត្តិ​ឯកសារ",margin:"រឹម​ទំព័រ",marginBottom:"បាត​ក្រោម",marginLeft:"ឆ្វេង",marginRight:"ស្ដាំ",marginTop:"លើ",meta:"ស្លាក​មេតា",metaAuthor:"អ្នកនិពន្ធ",metaCopyright:"រក្សាសិទ្ធិ",metaDescription:"សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ",metaKeywords:"ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)",other:"ដទៃ​ទៀត...",previewHtml:'<p>នេះ​គឺ​ជា<strong>អក្សរ​គំរូ</strong>​ខ្លះៗ។ អ្នក​កំពុង​ប្រើ <a href="javascript:void(0)">CKEditor</a>។</p>',title:"ការកំណត់ ឯកសារ", -txtColor:"ពណ៌អក្សរ",xhtmlDec:"បញ្ជូល XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ko.js deleted file mode 100644 index 168e9b17..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ko",{bgColor:"배경색상",bgFixed:"스크롤되지 않는 배경",bgImage:"배경 이미지 URL",charset:"캐릭터셋 인코딩",charsetASCII:"ASCII",charsetCE:"중앙 유럽",charsetCR:"키릴 문자",charsetCT:"중국어 (Big5)",charsetGR:"그리스어",charsetJP:"일본어",charsetKR:"한국어",charsetOther:"다른 캐릭터셋 인코딩",charsetTR:"터키어",charsetUN:"유니코드 (UTF-8)",charsetWE:"서유럽",chooseColor:"선택하기",design:"디자인",docTitle:"페이지명",docType:"문서 헤드",docTypeOther:"다른 문서헤드",label:"문서 속성",margin:"페이지 여백",marginBottom:"아래",marginLeft:"왼쪽",marginRight:"오른쪽", -marginTop:"위",meta:"메타데이터",metaAuthor:"작성자",metaCopyright:"저작권",metaDescription:"문서 설명",metaKeywords:"문서 키워드 (콤마로 구분)",other:"<기타>",previewHtml:'<p>이것은 <strong>예문</strong>입니다. 여러분은 지금 <a href="javascript:void(0)">CKEditor</a>를 사용하고 있습니다.</p>',title:"문서 속성",txtColor:"글자 색상",xhtmlDec:"XHTML 문서정의 포함"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ku.js deleted file mode 100644 index f2dd2844..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ku",{bgColor:"ڕەنگی پاشبنەما",bgFixed:"بێ هاتووچوپێکردنی (چەسپاو) پاشبنەمای وێنه",bgImage:"ناونیشانی بەستەری وێنەی پاشبنەما",charset:"دەستەی نووسەی بەکۆدکەر",charsetASCII:"ASCII",charsetCE:"ناوەڕاستی ئەوروپا",charsetCR:"سیریلیك",charsetCT:"چینی(Big5)",charsetGR:"یۆنانی",charsetJP:"ژاپۆنی",charsetKR:"کۆریا",charsetOther:"دەستەی نووسەی بەکۆدکەری تر",charsetTR:"تورکی",charsetUN:"Unicode (UTF-8)",charsetWE:"ڕۆژئاوای ئەوروپا",chooseColor:"هەڵبژێرە",design:"شێوەکار", -docTitle:"سەردێڕی پەڕه",docType:"سەرپەڕەی جۆری پەڕه",docTypeOther:"سەرپەڕەی جۆری پەڕەی تر",label:"خاسییەتی پەڕه",margin:"تەنیشت پەڕه",marginBottom:"ژێرەوه",marginLeft:"چەپ",marginRight:"ڕاست",marginTop:"سەرەوه",meta:"زانیاری مێتا",metaAuthor:"نووسەر",metaCopyright:"مافی بڵاوکردنەوەی",metaDescription:"پێناسەی لاپەڕه",metaKeywords:"بەڵگەنامەی وشەی کاریگەر(به کۆما لێکیان جیابکەوه)",other:"هیتر...",previewHtml:'<p>ئەمە وەك نموونەی <strong>دەقه</strong>. تۆ بەکاردەهێنیت <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"خاسییەتی پەڕه",txtColor:"ڕەنگی دەق",xhtmlDec:"بەیاننامەکانی XHTML لەگەڵدابێت"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lt.js deleted file mode 100644 index b2e1ba95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","lt",{bgColor:"Fono spalva",bgFixed:"Neslenkantis fonas",bgImage:"Fono paveikslėlio nuoroda (URL)",charset:"Simbolių kodavimo lentelė",charsetASCII:"ASCII",charsetCE:"Centrinės Europos",charsetCR:"Kirilica",charsetCT:"Tradicinės kinų (Big5)",charsetGR:"Graikų",charsetJP:"Japonų",charsetKR:"Korėjiečių",charsetOther:"Kita simbolių kodavimo lentelė",charsetTR:"Turkų",charsetUN:"Unikodas (UTF-8)",charsetWE:"Vakarų Europos",chooseColor:"Pasirinkite",design:"Išdėstymas", -docTitle:"Puslapio antraštė",docType:"Dokumento tipo antraštė",docTypeOther:"Kita dokumento tipo antraštė",label:"Dokumento savybės",margin:"Puslapio kraštinės",marginBottom:"Apačioje",marginLeft:"Kairėje",marginRight:"Dešinėje",marginTop:"Viršuje",meta:"Meta duomenys",metaAuthor:"Autorius",metaCopyright:"Autorinės teisės",metaDescription:"Dokumento apibūdinimas",metaKeywords:"Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",other:"<kitas>",previewHtml:'<p>Tai yra <strong>pavyzdinis tekstas</strong>. Jūs naudojate <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Dokumento savybės",txtColor:"Teksto spalva",xhtmlDec:"Įtraukti XHTML deklaracijas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lv.js deleted file mode 100644 index 61014944..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","lv",{bgColor:"Fona krāsa",bgFixed:"Fona attēls ir fiksēts",bgImage:"Fona attēla hipersaite",charset:"Simbolu kodējums",charsetASCII:"ASCII",charsetCE:"Centrāleiropas",charsetCR:"Kirilica",charsetCT:"Ķīniešu tradicionālā (Big5)",charsetGR:"Grieķu",charsetJP:"Japāņu",charsetKR:"Korejiešu",charsetOther:"Cits simbolu kodējums",charsetTR:"Turku",charsetUN:"Unikods (UTF-8)",charsetWE:"Rietumeiropas",chooseColor:"Izvēlēties",design:"Dizains",docTitle:"Dokumenta virsraksts <Title>", -docType:"Dokumenta tips",docTypeOther:"Cits dokumenta tips",label:"Dokumenta īpašības",margin:"Lapas robežas",marginBottom:"Apakšā",marginLeft:"Pa kreisi",marginRight:"Pa labi",marginTop:"Augšā",meta:"META dati",metaAuthor:"Autors",metaCopyright:"Autortiesības",metaDescription:"Dokumenta apraksts",metaKeywords:"Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)",other:"<cits>",previewHtml:'<p>Šis ir <strong>parauga teksts</strong>. Jūs izmantojiet <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Dokumenta īpašības",txtColor:"Teksta krāsa",xhtmlDec:"Ietvert XHTML deklarācijas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mk.js deleted file mode 100644 index 7f48e61c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","mk",{bgColor:"Background Color",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Other Character Set Encoding",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design", -docTitle:"Page Title",docType:"Document Type Heading",docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Bottom",marginLeft:"Left",marginRight:"Right",marginTop:"Top",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Other...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Document Properties",txtColor:"Text Color",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mn.js deleted file mode 100644 index 8907ba39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/mn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","mn",{bgColor:"Фоно өнгө",bgFixed:"Гүйдэггүй фоно",bgImage:"Фоно зурагны URL",charset:"Encoding тэмдэгт",charsetASCII:"ASCII",charsetCE:"Төв европ",charsetCR:"Крил",charsetCT:"Хятадын уламжлалт (Big5)",charsetGR:"Гред",charsetJP:"Япон",charsetKR:"Солонгос",charsetOther:"Encoding-д өөр тэмдэгт оноох",charsetTR:"Tурк",charsetUN:"Юникод (UTF-8)",charsetWE:"Баруун европ",chooseColor:"Сонгох",design:"Design",docTitle:"Хуудасны гарчиг",docType:"Баримт бичгийн төрөл Heading", -docTypeOther:"Бусад баримт бичгийн төрөл Heading",label:"Баримт бичиг шинж чанар",margin:"Хуудасны захын зай",marginBottom:"Доод тал",marginLeft:"Зүүн тал",marginRight:"Баруун тал",marginTop:"Дээд тал",meta:"Meta өгөгдөл",metaAuthor:"Зохиогч",metaCopyright:"Зохиогчийн эрх",metaDescription:"Баримт бичгийн тайлбар",metaKeywords:"Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Баримт бичиг шинж чанар",txtColor:"Фонтны өнгө",xhtmlDec:"XHTML-ийн мэдээллийг агуулах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ms.js deleted file mode 100644 index fe51ef5a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ms.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ms",{bgColor:"Warna Latarbelakang",bgFixed:"Imej Latarbelakang tanpa Skrol",bgImage:"URL Gambar Latarbelakang",charset:"Enkod Set Huruf",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Enkod Set Huruf yang Lain",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Tajuk Muka Surat", -docType:"Jenis Kepala Dokumen",docTypeOther:"Jenis Kepala Dokumen yang Lain",label:"Ciri-ciri dokumen",margin:"Margin Muka Surat",marginBottom:"Bawah",marginLeft:"Kiri",marginRight:"Kanan",marginTop:"Atas",meta:"Data Meta",metaAuthor:"Penulis",metaCopyright:"Hakcipta",metaDescription:"Keterangan Dokumen",metaKeywords:"Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",other:"<lain>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Ciri-ciri dokumen",txtColor:"Warna Text",xhtmlDec:"Masukkan pemula kod XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nb.js deleted file mode 100644 index 87926ab8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","nb",{bgColor:"Bakgrunnsfarge",bgFixed:"Lås bakgrunnsbilde",bgImage:"URL for bakgrunnsbilde",charset:"Tegnsett",charsetASCII:"ASCII",charsetCE:"Sentraleuropeisk",charsetCR:"Kyrillisk",charsetCT:"Tradisonell kinesisk(Big5)",charsetGR:"Gresk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Annet tegnsett",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropeisk",chooseColor:"Velg",design:"Design",docTitle:"Sidetittel",docType:"Dokumenttype header", -docTypeOther:"Annet dokumenttype header",label:"Dokumentegenskaper",margin:"Sidemargin",marginBottom:"Bunn",marginLeft:"Venstre",marginRight:"Høyre",marginTop:"Topp",meta:"Meta-data",metaAuthor:"Forfatter",metaCopyright:"Kopirett",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument nøkkelord (kommaseparert)",other:"<annen>",previewHtml:'<p>Dette er en <strong>eksempeltekst</strong>. Du bruker <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Tekstfarge", -xhtmlDec:"Inkluder XHTML-deklarasjon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nl.js deleted file mode 100644 index 7425a0aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","nl",{bgColor:"Achtergrondkleur",bgFixed:"Niet-scrollend (gefixeerde) achtergrond",bgImage:"Achtergrondafbeelding URL",charset:"Tekencodering",charsetASCII:"ASCII",charsetCE:"Centraal Europees",charsetCR:"Cyrillisch",charsetCT:"Traditioneel Chinees (Big5)",charsetGR:"Grieks",charsetJP:"Japans",charsetKR:"Koreaans",charsetOther:"Andere tekencodering",charsetTR:"Turks",charsetUN:"Unicode (UTF-8)",charsetWE:"West Europees",chooseColor:"Kies",design:"Ontwerp",docTitle:"Paginatitel", -docType:"Documenttype-definitie",docTypeOther:"Andere documenttype-definitie",label:"Documenteigenschappen",margin:"Pagina marges",marginBottom:"Onder",marginLeft:"Links",marginRight:"Rechts",marginTop:"Boven",meta:"Meta tags",metaAuthor:"Auteur",metaCopyright:"Auteursrechten",metaDescription:"Documentbeschrijving",metaKeywords:"Trefwoorden voor indexering (komma-gescheiden)",other:"Anders...",previewHtml:'<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Documenteigenschappen",txtColor:"Tekstkleur",xhtmlDec:"XHTML declaratie invoegen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/no.js deleted file mode 100644 index 11dddcff..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/no.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","no",{bgColor:"Bakgrunnsfarge",bgFixed:"Lås bakgrunnsbilde",bgImage:"URL for bakgrunnsbilde",charset:"Tegnsett",charsetASCII:"ASCII",charsetCE:"Sentraleuropeisk",charsetCR:"Kyrillisk",charsetCT:"Tradisonell kinesisk(Big5)",charsetGR:"Gresk",charsetJP:"Japansk",charsetKR:"Koreansk",charsetOther:"Annet tegnsett",charsetTR:"Tyrkisk",charsetUN:"Unicode (UTF-8)",charsetWE:"Vesteuropeisk",chooseColor:"Velg",design:"Design",docTitle:"Sidetittel",docType:"Dokumenttype header", -docTypeOther:"Annet dokumenttype header",label:"Dokumentegenskaper",margin:"Sidemargin",marginBottom:"Bunn",marginLeft:"Venstre",marginRight:"Høyre",marginTop:"Topp",meta:"Meta-data",metaAuthor:"Forfatter",metaCopyright:"Kopirett",metaDescription:"Dokumentbeskrivelse",metaKeywords:"Dokument nøkkelord (kommaseparert)",other:"<annen>",previewHtml:'<p>Dette er en <strong>eksempeltekst</strong>. Du bruker <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Tekstfarge", -xhtmlDec:"Inkluder XHTML-deklarasjon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pl.js deleted file mode 100644 index 4fb43438..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pl",{bgColor:"Kolor tła",bgFixed:"Tło nieruchome (nieprzewijające się)",bgImage:"Adres URL obrazka tła",charset:"Kodowanie znaków",charsetASCII:"ASCII",charsetCE:"Środkowoeuropejskie",charsetCR:"Cyrylica",charsetCT:"Chińskie tradycyjne (Big5)",charsetGR:"Greckie",charsetJP:"Japońskie",charsetKR:"Koreańskie",charsetOther:"Inne kodowanie znaków",charsetTR:"Tureckie",charsetUN:"Unicode (UTF-8)",charsetWE:"Zachodnioeuropejskie",chooseColor:"Wybierz",design:"Projekt strony", -docTitle:"Tytuł strony",docType:"Definicja typu dokumentu",docTypeOther:"Inna definicja typu dokumentu",label:"Właściwości dokumentu",margin:"Marginesy strony",marginBottom:"Dolny",marginLeft:"Lewy",marginRight:"Prawy",marginTop:"Górny",meta:"Znaczniki meta",metaAuthor:"Autor",metaCopyright:"Prawa autorskie",metaDescription:"Opis dokumentu",metaKeywords:"Słowa kluczowe dokumentu (oddzielone przecinkami)",other:"Inne",previewHtml:'<p>To jest <strong>przykładowy tekst</strong>. Korzystasz z programu <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Właściwości dokumentu",txtColor:"Kolor tekstu",xhtmlDec:"Uwzględnij deklaracje XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt-br.js deleted file mode 100644 index c671fed0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pt-br",{bgColor:"Cor do Plano de Fundo",bgFixed:"Plano de Fundo Fixo",bgImage:"URL da Imagem de Plano de Fundo",charset:"Codificação de Caracteres",charsetASCII:"ASCII",charsetCE:"Europa Central",charsetCR:"Cirílico",charsetCT:"Chinês Tradicional (Big5)",charsetGR:"Grego",charsetJP:"Japonês",charsetKR:"Coreano",charsetOther:"Outra Codificação de Caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Ocidental",chooseColor:"Escolher",design:"Design", -docTitle:"Título da Página",docType:"Cabeçalho Tipo de Documento",docTypeOther:"Outro Tipo de Documento",label:"Propriedades Documento",margin:"Margens da Página",marginBottom:"Inferior",marginLeft:"Inferior",marginRight:"Direita",marginTop:"Superior",meta:"Meta Dados",metaAuthor:"Autor",metaCopyright:"Direitos Autorais",metaDescription:"Descrição do Documento",metaKeywords:"Palavras-chave de Indexação do Documento (separadas por vírgula)",other:"<outro>",previewHtml:'<p>Este é um <strong>texto de exemplo</strong>. Você está usando <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propriedades Documento",txtColor:"Cor do Texto",xhtmlDec:"Incluir Declarações XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt.js deleted file mode 100644 index ec1514d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","pt",{bgColor:"Cor de Fundo",bgFixed:"Fundo Fixo",bgImage:"Caminho para a Imagem de Fundo",charset:"Codificação de Caracteres",charsetASCII:"ASCII",charsetCE:"Europa Central",charsetCR:"Cirílico",charsetCT:"Chinês Traditional (Big5)",charsetGR:"Grego",charsetJP:"Japonês",charsetKR:"Coreano",charsetOther:"Outra Codificação de Caracteres",charsetTR:"Turco",charsetUN:"Unicode (UTF-8)",charsetWE:"Europa Ocidental",chooseColor:"Choose",design:"Desenho",docTitle:"Título da Página", -docType:"Tipo de Cabeçalho do Documento",docTypeOther:"Outro Tipo de Cabeçalho do Documento",label:"Propriedades do Documento",margin:"Margem das Páginas",marginBottom:"Fundo",marginLeft:"Esquerda",marginRight:"Direita",marginTop:"Topo",meta:"Meta Data",metaAuthor:"Autor",metaCopyright:"Direitos de Autor",metaDescription:"Descrição do Documento",metaKeywords:"Palavras de Indexação do Documento (separadas por virgula)",other:"<outro>",previewHtml:'<p>Isto é algum <strong>texto amostra</strong>. Está a usar o <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Propriedades do Documento",txtColor:"Cor do Texto",xhtmlDec:"Incluir Declarações XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ro.js deleted file mode 100644 index 9aa0e6d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ro",{bgColor:"Culoarea fundalului (Background Color)",bgFixed:"Fundal neflotant, fix (Non-scrolling Background)",bgImage:"URL-ul imaginii din fundal (Background Image URL)",charset:"Encoding setului de caractere",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Chirilic",charsetCT:"Chinezesc tradiţional (Big5)",charsetGR:"Grecesc",charsetJP:"Japonez",charsetKR:"Corean",charsetOther:"Alt encoding al setului de caractere",charsetTR:"Turcesc",charsetUN:"Unicode (UTF-8)", -charsetWE:"Vest european",chooseColor:"Alege",design:"Design",docTitle:"Titlul paginii",docType:"Document Type Heading",docTypeOther:"Alt Document Type Heading",label:"Proprietăţile documentului",margin:"Marginile paginii",marginBottom:"Jos",marginLeft:"Stânga",marginRight:"Dreapta",marginTop:"Sus",meta:"Meta Tags",metaAuthor:"Autor",metaCopyright:"Drepturi de autor",metaDescription:"Descrierea documentului",metaKeywords:"Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",other:"<alt>", -previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Proprietăţile documentului",txtColor:"Culoarea textului",xhtmlDec:"Include declaraţii XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ru.js deleted file mode 100644 index 01d585f6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ru",{bgColor:"Цвет фона",bgFixed:"Фон прикреплён (не проматывается)",bgImage:"Ссылка на фоновое изображение",charset:"Кодировка набора символов",charsetASCII:"ASCII",charsetCE:"Центрально-европейская",charsetCR:"Кириллица",charsetCT:"Китайская традиционная (Big5)",charsetGR:"Греческая",charsetJP:"Японская",charsetKR:"Корейская",charsetOther:"Другая кодировка набора символов",charsetTR:"Турецкая",charsetUN:"Юникод (UTF-8)",charsetWE:"Западно-европейская",chooseColor:"Выберите", -design:"Дизайн",docTitle:"Заголовок страницы",docType:"Заголовок типа документа",docTypeOther:"Другой заголовок типа документа",label:"Свойства документа",margin:"Отступы страницы",marginBottom:"Нижний",marginLeft:"Левый",marginRight:"Правый",marginTop:"Верхний",meta:"Метаданные",metaAuthor:"Автор",metaCopyright:"Авторские права",metaDescription:"Описание документа",metaKeywords:"Ключевые слова документа (через запятую)",other:"Другой ...",previewHtml:'<p>Это <strong>пример</strong> текста, написанного с помощью <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Свойства документа",txtColor:"Цвет текста",xhtmlDec:"Включить объявления XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/si.js deleted file mode 100644 index 19a7d6fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","si",{bgColor:"පසුබිම් වර්ණය",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"පසුබිම් ",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"මාධ්‍ය ",charsetCR:"සිරිලික් හෝඩිය",charsetCT:"චීන සම්ප්‍රදාය",charsetGR:"ග්‍රීක",charsetJP:"ජපාන",charsetKR:"Korean",charsetOther:"අනෙකුත් අක්ෂර කොටස්",charsetTR:"තුර්කි",charsetUN:"Unicode (UTF-8)",charsetWE:"බස්නාහිර ",chooseColor:"තෝරන්න",design:"Design",docTitle:"පිටු මාතෘකාව",docType:"ලිපිගොනු වර්ගයේ මාතෘකාව", -docTypeOther:"අනෙකුත් ලිපිගොනු වර්ගයේ මාතෘකා",label:"ලිපිගොනු ",margin:"පිටු සීමාවන්",marginBottom:"පහල",marginLeft:"වම",marginRight:"දකුණ",marginTop:"ඉ",meta:"Meta Tags",metaAuthor:"Author",metaCopyright:"ප්‍රකාශන ",metaDescription:"ලිපිගොනු ",metaKeywords:"ලිපිගොනු පෙලගේසමේ විශේෂ වචන (කොමා වලින් වෙන්කරන ලද)",other:"අනෙකුත්",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"පෝරමයේ ගුණ/",txtColor:"අක්ෂර වර්ණ",xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sk.js deleted file mode 100644 index b347ab05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sk",{bgColor:"Farba pozadia",bgFixed:"Fixné pozadie",bgImage:"URL obrázka na pozadí",charset:"Znaková sada",charsetASCII:"ASCII",charsetCE:"Stredoeurópska",charsetCR:"Cyrillika",charsetCT:"Čínština tradičná (Big5)",charsetGR:"Gréčtina",charsetJP:"Japončina",charsetKR:"Korejčina",charsetOther:"Iná znaková sada",charsetTR:"Turečtina",charsetUN:"Unicode (UTF-8)",charsetWE:"Západná európa",chooseColor:"Vybrať",design:"Design",docTitle:"Titulok stránky",docType:"Typ záhlavia dokumentu", -docTypeOther:"Iný typ záhlavia dokumentu",label:"Vlastnosti dokumentu",margin:"Okraje stránky (margins)",marginBottom:"Dolný",marginLeft:"Ľavý",marginRight:"Pravý",marginTop:"Horný",meta:"Meta značky",metaAuthor:"Autor",metaCopyright:"Autorské práva (copyright)",metaDescription:"Popis dokumentu",metaKeywords:"Indexované kľúčové slová dokumentu (oddelené čiarkou)",other:"Iný...",previewHtml:'<p>Toto je nejaký <strong>ukážkový text</strong>. Používate <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Vlastnosti dokumentu",txtColor:"Farba textu",xhtmlDec:"Vložiť deklarácie XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sl.js deleted file mode 100644 index 7017e1bd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sl",{bgColor:"Barva ozadja",bgFixed:"Nepremično ozadje",bgImage:"URL slike za ozadje",charset:"Kodna tabela",charsetASCII:"ASCII",charsetCE:"Srednjeevropsko",charsetCR:"Cirilica",charsetCT:"Tradicionalno Kitajsko (Big5)",charsetGR:"Grško",charsetJP:"Japonsko",charsetKR:"Korejsko",charsetOther:"Druga kodna tabela",charsetTR:"Turško",charsetUN:"Unicode (UTF-8)",charsetWE:"Zahodnoevropsko",chooseColor:"Izberi",design:"Oblika",docTitle:"Naslov strani",docType:"Glava tipa dokumenta", -docTypeOther:"Druga glava tipa dokumenta",label:"Lastnosti dokumenta",margin:"Zamiki strani",marginBottom:"Spodaj",marginLeft:"Levo",marginRight:"Desno",marginTop:"Na vrhu",meta:"Meta podatki",metaAuthor:"Avtor",metaCopyright:"Avtorske pravice",metaDescription:"Opis strani",metaKeywords:"Ključne besede (ločene z vejicami)",other:"<drug>",previewHtml:'<p>Tole je<strong>primer besedila</strong>. Uporabljate <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Lastnosti dokumenta",txtColor:"Barva besedila", -xhtmlDec:"Vstavi XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sq.js deleted file mode 100644 index 373c7293..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sq",{bgColor:"Ngjyra e Prapavijës",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"URL e Fotografisë së Prapavijës",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Evropës Qendrore",charsetCR:"Sllave",charsetCT:"Kinezisht Tradicional (Big5)",charsetGR:"Greke",charsetJP:"Japoneze",charsetKR:"Koreane",charsetOther:"Other Character Set Encoding",charsetTR:"Turke",charsetUN:"Unicode (UTF-8)",charsetWE:"Evropiano Perëndimor",chooseColor:"Përzgjidh", -design:"Dizajni",docTitle:"Titulli i Faqes",docType:"Document Type Heading",docTypeOther:"Koka e Llojit Tjetër të Dokumentit",label:"Karakteristikat e Dokumentit",margin:"Kufijtë e Faqes",marginBottom:"Poshtë",marginLeft:"Majtas",marginRight:"Djathtas",marginTop:"Lart",meta:"Meta Tags",metaAuthor:"Autori",metaCopyright:"Të drejtat e kopjimit",metaDescription:"Përshkrimi i Dokumentit",metaKeywords:"Fjalët kyçe të indeksimit të dokumentit (të ndarë me presje)",other:"Tjera...",previewHtml:'<p>Ky është nje <strong>tekst shembull</strong>. Ju jeni duke shfrytëzuar <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Karakteristikat e Dokumentit",txtColor:"Ngjyra e Tekstit",xhtmlDec:"Përfshij XHTML Deklarimet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js deleted file mode 100644 index 77312ffb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr-latn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sr-latn",{bgColor:"Boja pozadine",bgFixed:"Fiksirana pozadina",bgImage:"URL pozadinske slike",charset:"Kodiranje skupa karaktera",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Ostala kodiranja skupa karaktera",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Naslov stranice", -docType:"Zaglavlje tipa dokumenta",docTypeOther:"Ostala zaglavlja tipa dokumenta",label:"Osobine dokumenta",margin:"Margine stranice",marginBottom:"Donja",marginLeft:"Leva",marginRight:"Desna",marginTop:"Gornja",meta:"Metapodaci",metaAuthor:"Autor",metaCopyright:"Autorska prava",metaDescription:"Opis dokumenta",metaKeywords:"Ključne reci za indeksiranje dokumenta (razdvojene zarezima)",other:"<остало>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Osobine dokumenta",txtColor:"Boja teksta",xhtmlDec:"Ukljuci XHTML deklaracije"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr.js deleted file mode 100644 index f50c3e4a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sr",{bgColor:"Боја позадине",bgFixed:"Фиксирана позадина",bgImage:"УРЛ позадинске слике",charset:"Кодирање скупа карактера",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"Остала кодирања скупа карактера",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"Design",docTitle:"Наслов странице", -docType:"Заглавље типа документа",docTypeOther:"Остала заглавља типа документа",label:"Особине документа",margin:"Маргине странице",marginBottom:"Доња",marginLeft:"Лева",marginRight:"Десна",marginTop:"Горња",meta:"Метаподаци",metaAuthor:"Аутор",metaCopyright:"Ауторска права",metaDescription:"Опис документа",metaKeywords:"Кључне речи за индексирање документа (раздвојене зарезом)",other:"<other>",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"Особине документа",txtColor:"Боја текста",xhtmlDec:"Улључи XHTML декларације"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sv.js deleted file mode 100644 index 363de9bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","sv",{bgColor:"Bakgrundsfärg",bgFixed:"Fast bakgrund",bgImage:"Bakgrundsbildens URL",charset:"Teckenuppsättningar",charsetASCII:"ASCII",charsetCE:"Central Europa",charsetCR:"Kyrillisk",charsetCT:"Traditionell Kinesisk (Big5)",charsetGR:"Grekiska",charsetJP:"Japanska",charsetKR:"Koreanska",charsetOther:"Övriga teckenuppsättningar",charsetTR:"Turkiska",charsetUN:"Unicode (UTF-8)",charsetWE:"Väst Europa",chooseColor:"Välj",design:"Design",docTitle:"Sidtitel",docType:"Sidhuvud", -docTypeOther:"Övriga sidhuvuden",label:"Dokumentegenskaper",margin:"Sidmarginal",marginBottom:"Botten",marginLeft:"Vänster",marginRight:"Höger",marginTop:"Topp",meta:"Metadata",metaAuthor:"Författare",metaCopyright:"Upphovsrätt",metaDescription:"Sidans beskrivning",metaKeywords:"Sidans nyckelord (kommaseparerade)",other:"Annan...",previewHtml:'<p>Detta är en <strong>exempel text</strong>. Du använder <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Dokumentegenskaper",txtColor:"Textfärg",xhtmlDec:"Inkludera XHTML deklaration"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/th.js deleted file mode 100644 index 2befc7f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","th",{bgColor:"สีพื้นหลัง",bgFixed:"พื้นหลังแบบไม่มีแถบเลื่อน",bgImage:"ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",charset:"ชุดตัวอักษร",charsetASCII:"ASCII",charsetCE:"Central European",charsetCR:"Cyrillic",charsetCT:"Chinese Traditional (Big5)",charsetGR:"Greek",charsetJP:"Japanese",charsetKR:"Korean",charsetOther:"ชุดตัวอักษรอื่นๆ",charsetTR:"Turkish",charsetUN:"Unicode (UTF-8)",charsetWE:"Western European",chooseColor:"Choose",design:"ออกแบบ",docTitle:"ชื่อไตเติ้ล", -docType:"ประเภทของเอกสาร",docTypeOther:"ประเภทเอกสารอื่นๆ",label:"คุณสมบัติของเอกสาร",margin:"ระยะขอบของหน้าเอกสาร",marginBottom:"ด้านล่าง",marginLeft:"ด้านซ้าย",marginRight:"ด้านขวา",marginTop:"ด้านบน",meta:"ข้อมูลสำหรับเสิร์ชเอนจิ้น",metaAuthor:"ผู้สร้างเอกสาร",metaCopyright:"สงวนลิขสิทธิ์",metaDescription:"ประโยคอธิบายเกี่ยวกับเอกสาร",metaKeywords:"คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)",other:"<อื่น ๆ>",previewHtml:'<p>นี่เป็น <strong>ข้อความตัวอย่าง</strong>. คุณกำลังใช้งาน <a href="javascript:void(0)">CKEditor</a>.</p>', -title:"คุณสมบัติของเอกสาร",txtColor:"สีตัวอักษร",xhtmlDec:"รวมเอา XHTML Declarations ไว้ด้วย"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tr.js deleted file mode 100644 index 00a35d43..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","tr",{bgColor:"Arka Plan Rengi",bgFixed:"Sabit Arka Plan",bgImage:"Arka Plan Resim URLsi",charset:"Karakter Kümesi Kodlaması",charsetASCII:"ASCII",charsetCE:"Orta Avrupa",charsetCR:"Kiril",charsetCT:"Geleneksel Çince (Big5)",charsetGR:"Yunanca",charsetJP:"Japonca",charsetKR:"Korece",charsetOther:"Diğer Karakter Kümesi Kodlaması",charsetTR:"Türkçe",charsetUN:"Evrensel Kod (UTF-8)",charsetWE:"Batı Avrupa",chooseColor:"Seçiniz",design:"Dizayn",docTitle:"Sayfa Başlığı", -docType:"Belge Türü Başlığı",docTypeOther:"Diğer Belge Türü Başlığı",label:"Belge Özellikleri",margin:"Kenar Boşlukları",marginBottom:"Alt",marginLeft:"Sol",marginRight:"Sağ",marginTop:"Tepe",meta:"Tanım Bilgisi (Meta)",metaAuthor:"Yazar",metaCopyright:"Telif",metaDescription:"Belge Tanımı",metaKeywords:"Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)",other:"<diğer>",previewHtml:'<p>Bu bir <strong>örnek metindir</strong>. <a href="javascript:void(0)">CKEditor</a> kullanıyorsunuz.</p>',title:"Belge Özellikleri", -txtColor:"Yazı Rengi",xhtmlDec:"XHTML Bildirimlerini Dahil Et"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tt.js deleted file mode 100644 index c1c6ce14..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/tt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","tt",{bgColor:"Фон төсе",bgFixed:"Non-scrolling (Fixed) Background",bgImage:"Background Image URL",charset:"Character Set Encoding",charsetASCII:"ASCII",charsetCE:"Урта Ауропа",charsetCR:"Кириллик",charsetCT:"Гадәти кытай (Big5)",charsetGR:"Грек",charsetJP:"Япон",charsetKR:"Корей",charsetOther:"Other Character Set Encoding",charsetTR:"Төрек",charsetUN:"Юникод (UTF-8)",charsetWE:"Көнбатыш Ауропа",chooseColor:"Сайлау",design:"Дизайн",docTitle:"Page Title",docType:"Document Type Heading", -docTypeOther:"Other Document Type Heading",label:"Document Properties",margin:"Page Margins",marginBottom:"Аска",marginLeft:"Сул",marginRight:"Right",marginTop:"Өскә",meta:"Meta Tags",metaAuthor:"Автор",metaCopyright:"Copyright",metaDescription:"Document Description",metaKeywords:"Document Indexing Keywords (comma separated)",other:"Башка...",previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Document Properties",txtColor:"Текст төсе", -xhtmlDec:"Include XHTML Declarations"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ug.js deleted file mode 100644 index 424d13a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","ug",{bgColor:"تەگلىك رەڭگى",bgFixed:"تەگلىك سۈرەتنى دومىلاتما",bgImage:"تەگلىك سۈرەت",charset:"ھەرپ كودلىنىشى",charsetASCII:"ASCII",charsetCE:"ئوتتۇرا ياۋرۇپا",charsetCR:"سىلاۋيانچە",charsetCT:"مۇرەككەپ خەنزۇچە (Big5)",charsetGR:"گىرېكچە",charsetJP:"ياپونچە",charsetKR:"كۆرىيەچە",charsetOther:"باشقا ھەرپ كودلىنىشى",charsetTR:"تۈركچە",charsetUN:"يۇنىكود (UTF-8)",charsetWE:"غەربىي ياۋرۇپا",chooseColor:"تاللاڭ",design:"لايىھە",docTitle:"بەت ماۋزۇسى",docType:"پۈتۈك تىپى", -docTypeOther:"باشقا پۈتۈك تىپى",label:"بەت خاسلىقى",margin:"بەت گىرۋەك",marginBottom:"ئاستى",marginLeft:"سول",marginRight:"ئوڭ",marginTop:"ئۈستى",meta:"مېتا سانلىق مەلۇمات",metaAuthor:"يازغۇچى",metaCopyright:"نەشر ھوقۇقى",metaDescription:"بەت يۈزى چۈشەندۈرۈشى",metaKeywords:"بەت يۈزى ئىندېكىس ھالقىلىق سۆزى (ئىنگلىزچە پەش [,] بىلەن ئايرىلىدۇ)",other:"باشقا",previewHtml:'<p>بۇ بىر قىسىم <strong>كۆرسەتمىگە ئىشلىتىدىغان تېكىست </strong>سىز نۆۋەتتە <a href="javascript:void(0)">CKEditor</a>.نى ئىشلىتىۋاتىسىز.</p>', -title:"بەت خاسلىقى",txtColor:"تېكىست رەڭگى",xhtmlDec:"XHTML ئېنىقلىمىسىنى ئۆز ئىچىگە ئالىدۇ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/uk.js deleted file mode 100644 index c1027967..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","uk",{bgColor:"Колір тла",bgFixed:"Тло без прокрутки",bgImage:"URL зображення тла",charset:"Кодування набору символів",charsetASCII:"ASCII",charsetCE:"Центрально-європейська",charsetCR:"Кирилиця",charsetCT:"Китайська традиційна (Big5)",charsetGR:"Грецька",charsetJP:"Японська",charsetKR:"Корейська",charsetOther:"Інше кодування набору символів",charsetTR:"Турецька",charsetUN:"Юнікод (UTF-8)",charsetWE:"Західно-европейская",chooseColor:"Обрати",design:"Дизайн",docTitle:"Заголовок сторінки", -docType:"Заголовок типу документу",docTypeOther:"Інший заголовок типу документу",label:"Властивості документа",margin:"Відступи сторінки",marginBottom:"Нижній",marginLeft:"Лівий",marginRight:"Правий",marginTop:"Верхній",meta:"Мета дані",metaAuthor:"Автор",metaCopyright:"Авторські права",metaDescription:"Опис документа",metaKeywords:"Ключові слова документа (розділені комами)",other:"<інший>",previewHtml:'<p>Це приклад<strong>тексту</strong>. Ви використовуєте<a href="javascript:void(0)"> CKEditor </a>.</p>', -title:"Властивості документа",txtColor:"Колір тексту",xhtmlDec:"Ввімкнути XHTML оголошення"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/vi.js deleted file mode 100644 index b4583767..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","vi",{bgColor:"Màu nền",bgFixed:"Không cuộn nền",bgImage:"URL của Hình ảnh nền",charset:"Bảng mã ký tự",charsetASCII:"ASCII",charsetCE:"Trung Âu",charsetCR:"Tiếng Kirin",charsetCT:"Tiếng Trung Quốc (Big5)",charsetGR:"Tiếng Hy Lạp",charsetJP:"Tiếng Nhật",charsetKR:"Tiếng Hàn",charsetOther:"Bảng mã ký tự khác",charsetTR:"Tiếng Thổ Nhĩ Kỳ",charsetUN:"Unicode (UTF-8)",charsetWE:"Tây Âu",chooseColor:"Chọn màu",design:"Thiết kế",docTitle:"Tiêu đề Trang",docType:"Kiểu Đề mục Tài liệu", -docTypeOther:"Kiểu Đề mục Tài liệu khác",label:"Thuộc tính Tài liệu",margin:"Đường biên của Trang",marginBottom:"Dưới",marginLeft:"Trái",marginRight:"Phải",marginTop:"Trên",meta:"Siêu dữ liệu",metaAuthor:"Tác giả",metaCopyright:"Bản quyền",metaDescription:"Mô tả tài liệu",metaKeywords:"Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)",other:"<khác>",previewHtml:'<p>Đây là một số <strong>văn bản mẫu</strong>. Bạn đang sử dụng <a href="javascript:void(0)">CKEditor</a>.</p>',title:"Thuộc tính Tài liệu", -txtColor:"Màu chữ",xhtmlDec:"Bao gồm cả định nghĩa XHTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js deleted file mode 100644 index d8c87e71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","zh-cn",{bgColor:"背景颜色",bgFixed:"不滚动背景图像",bgImage:"背景图像",charset:"字符编码",charsetASCII:"ASCII",charsetCE:"中欧",charsetCR:"西里尔文",charsetCT:"繁体中文 (Big5)",charsetGR:"希腊文",charsetJP:"日文",charsetKR:"韩文",charsetOther:"其它字符编码",charsetTR:"土耳其文",charsetUN:"Unicode (UTF-8)",charsetWE:"西欧",chooseColor:"选择",design:"设计",docTitle:"页面标题",docType:"文档类型",docTypeOther:"其它文档类型",label:"页面属性",margin:"页面边距",marginBottom:"下",marginLeft:"左",marginRight:"右",marginTop:"上",meta:"Meta 数据",metaAuthor:"作者", -metaCopyright:"版权",metaDescription:"页面说明",metaKeywords:"页面索引关键字 (用半角逗号[,]分隔)",other:"<其他>",previewHtml:'<p>这是一些<strong>演示用文字</strong>。您当前正在使用<a href="javascript:void(0)">CKEditor</a>。</p>',title:"页面属性",txtColor:"文本颜色",xhtmlDec:"包含 XHTML 声明"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh.js deleted file mode 100644 index 193a57da..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("docprops","zh",{bgColor:"背景顏色",bgFixed:"非捲動 (固定) 背景",bgImage:"背景圖像 URL",charset:"字元集編碼",charsetASCII:"ASCII",charsetCE:"中歐語系",charsetCR:"斯拉夫文",charsetCT:"正體中文 (Big5)",charsetGR:"希臘文",charsetJP:"日文",charsetKR:"韓文",charsetOther:"其他字元集編碼",charsetTR:"土耳其文",charsetUN:"Unicode (UTF-8)",charsetWE:"西歐語系",chooseColor:"選擇",design:"設計模式",docTitle:"頁面標題",docType:"文件類型標題",docTypeOther:"其他文件類型標題",label:"文件屬性",margin:"頁面邊界",marginBottom:"底端",marginLeft:"左",marginRight:"右",marginTop:"頂端", -meta:"Meta 標籤",metaAuthor:"作者",metaCopyright:"版權資訊",metaDescription:"文件描述",metaKeywords:"文件索引關鍵字 (以逗號分隔)",other:"其他…",previewHtml:'<p>此為簡短的<strong>範例文字</strong>。您正在使用 <a href="javascript:void(0)">CKEditor</a>。</p>',title:"文件屬性",txtColor:"文字顏色",xhtmlDec:"包含 XHTML 宣告"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/docprops/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/docprops/plugin.js deleted file mode 100644 index efbe090f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/docprops/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("docprops",{requires:"wysiwygarea,dialog,colordialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"docprops,docprops-rtl",hidpi:!0,init:function(a){var b=new CKEDITOR.dialogCommand("docProps");b.modes={wysiwyg:a.config.fullPage};b.allowedContent={body:{styles:"*",attributes:"dir"},html:{attributes:"lang,xml:lang"}}; -b.requiredContent="body";a.addCommand("docProps",b);CKEDITOR.dialog.add("docProps",this.path+"dialogs/docprops.js");a.ui.addButton&&a.ui.addButton("DocProps",{label:a.lang.docprops.label,command:"docProps",toolbar:"document,30"})}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/dialogs/find.js b/platforms/browser/www/lib/ckeditor/plugins/find/dialogs/find.js deleted file mode 100644 index 0ad6a589..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/dialogs/find.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function y(c){return c.type==CKEDITOR.NODE_TEXT&&0<c.getLength()&&(!o||!c.isReadOnly())}function s(c){return!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)))}var o,t=function(){return{textNode:this.textNode,offset:this.offset,character:this.textNode?this.textNode.getText().charAt(this.offset):null,hitMatchBoundary:this._.matchBoundary}},u=["find","replace"],p=[["txtFindFind","txtFindReplace"],["txtFindCaseChk", -"txtReplaceCaseChk"],["txtFindWordChk","txtReplaceWordChk"],["txtFindCyclic","txtReplaceCyclic"]],n=function(c,g){function n(a,b){var d=c.createRange();d.setStart(a.textNode,b?a.offset:a.offset+1);d.setEndAt(c.editable(),CKEDITOR.POSITION_BEFORE_END);return d}function q(a){var b=c.getSelection(),d=c.editable();b&&!a?(a=b.getRanges()[0].clone(),a.collapse(!0)):(a=c.createRange(),a.setStartAt(d,CKEDITOR.POSITION_AFTER_START));a.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);return a}var v=new CKEDITOR.style(CKEDITOR.tools.extend({attributes:{"data-cke-highlight":1}, -fullMatch:1,ignoreReadonly:1,childRule:function(){return 0}},c.config.find_highlight,!0)),l=function(a,b){var d=this,c=new CKEDITOR.dom.walker(a);c.guard=b?s:function(a){!s(a)&&(d._.matchBoundary=!0)};c.evaluator=y;c.breakOnFalse=1;a.startContainer.type==CKEDITOR.NODE_TEXT&&(this.textNode=a.startContainer,this.offset=a.startOffset-1);this._={matchWord:b,walker:c,matchBoundary:!1}};l.prototype={next:function(){return this.move()},back:function(){return this.move(!0)},move:function(a){var b=this.textNode; -if(null===b)return t.call(this);this._.matchBoundary=!1;if(b&&a&&0<this.offset)this.offset--;else if(b&&this.offset<b.getLength()-1)this.offset++;else{for(b=null;!b&&!(b=this._.walker[a?"previous":"next"].call(this._.walker),this._.matchWord&&!b||this._.walker._.end););this.offset=(this.textNode=b)?a?b.getLength()-1:0:0}return t.call(this)}};var r=function(a,b){this._={walker:a,cursors:[],rangeLength:b,highlightRange:null,isMatched:0}};r.prototype={toDomRange:function(){var a=c.createRange(),b=this._.cursors; -if(1>b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new l(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a);while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1> -this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();v.applyToRange(a,c);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}},removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();v.removeFromRange(this._.highlightRange,c);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange); -this._.highlightRange=null}},isReadOnly:function(){return!this._.highlightRange?0:this._.highlightRange.startContainer.isReadOnly()},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&&b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors; -return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new l(n(b)):this._.walker;return new r(d,a)},getCursors:function(){return this._.cursors}};var w=function(a,b){var d=[-1];b&&(a=a.toLowerCase());for(var c=0;c<a.length;c++)for(d.push(d[c]+1);0<d[c+1]&&a.charAt(c)!=a.charAt(d[c+1]-1);)d[c+1]=d[d[c+1]-1]+1;this._={overlap:d,state:0,ignoreCase:!!b,pattern:a}};w.prototype={feedCharacter:function(a){for(this._.ignoreCase&& -(a=a.toLowerCase());;){if(a==this._.pattern.charAt(this._.state))return this._.state++,this._.state==this._.pattern.length?(this._.state=0,2):1;if(this._.state)this._.state=this._.overlap[this._.state];else return 0}return null},reset:function(){this._.state=0}};var z=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,x=function(a){if(!a)return!0;var b=a.charCodeAt(0);return 9<=b&&13>=b||8192<=b&&8202>=b||z.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,A){this.matchRange? -(this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new r(new l(this.searchRange),a.length);for(var i=new w(a,!b),j=0,k="%";null!==k;){for(this.matchRange.moveNext();k=this.matchRange.getEndCharacter();){j=i.feedCharacter(k);if(2==j)break;this.matchRange.moveNext().hitMatchBoundary&&i.reset()}if(2==j){if(d){var h=this.matchRange.getCursors(),m=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START); -g.setEnd(h.textNode,h.offset);h=g;m=n(m);h.trim();m.trim();h=new l(h,!0);m=new l(m,!0);if(!x(h.back().character)||!x(m.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!A?(this.searchRange=q(1),this.matchRange=null,arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,i){o=1;a=0;if(this.matchRange&& -this.matchRange.isMatched()&&!this.matchRange._.isReplaced&&!this.matchRange.isReadOnly()){this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);if(!i){var j=c.getSelection();j.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);i||(j.selectRanges([b]),c.fire("saveSnapshot"));this.matchRange.updateFromDomRange(b);i||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}else a=this.find(b,f,e,g,!i);o=0;return a}}, -f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton(c,{label:c.lang.common.close})],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog(); -e.find(a.getValueOf("find","txtFindFind"),a.getValueOf("find","txtFindCaseChk"),a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0, -label:f.matchCyclic}]}]}]},{id:"replace",label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a=this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace", -"txtReplaceWordChk"),a.getValueOf("replace","txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1,onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=q(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a, -a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk", -isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a,e);var g=a._.tabs[e],i;i="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,i);g.initialized||(CKEDITOR.document.getById(b._.inputId), -g.initialized=!0);if(c){var j,e="find"===e?1:0,g=1-e,k,h=p.length;for(k=0;k<h;k++)i=this.getContentElement(u[e],p[k][e]),j=this.getContentElement(u[g],p[k][g]),j.setValue(i.getValue())}}})},onShow:function(){e.searchRange=q();var a=this.getParentEditor().getSelection().getSelectedText(),b=this.getContentElement(g,"find"==g?"txtFindFind":"txtFindReplace");b.setValue(a);b.select();this.selectPage(g);this[("find"==g&&this._.editor.readOnly?"hide":"show")+"Page"]("replace")},onHide:function(){var a;e.matchRange&& -e.matchRange.isMatched()&&(e.matchRange.removeHighlight(),c.focus(),(a=e.matchRange.toDomRange())&&c.getSelection().selectRanges([a]));delete e.matchRange},onFocus:function(){return"replace"==g?this.getContentElement("replace","txtFindReplace"):this.getContentElement("find","txtFindFind")}}};CKEDITOR.dialog.add("find",function(c){return n(c,"find")});CKEDITOR.dialog.add("replace",function(c){return n(c,"replace")})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/find-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/find-rtl.png deleted file mode 100644 index 02f40cb2f990851a50592926ffb3802ecc3d7617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_2p$#}JFtrIQYNE3=Cn+iz}Mc<kgE1J5}*ExeO<Ewr2>*Ye6$ z#fxvLT(bVWs@F>|)Gye?we<O2+tN(!dtBdQs$`<XVm9rTn-%u*MUPowtaYc=tUzYT z=Wi2B%Q9a!A8$ThZNKmP#}l7zJSMTkUQe8*_D{b_!D0P%XA#$gXG`>fqL)p8q8%FU zF8m!YECs*jy<%26b@v=lLdlDvq^hcFw+-)u<(-|KP0KPpmS5hnV~2x8+l@PSY?wZ1 z8ryR=F{G!b@7TAm&Uweg$-$vtL-)o#&)RzHL+$>PXO8cCZ@&6!*5bJJpFe!~pv_>J z=C=E8+v{BgvEqk%CoPRy8}_2a>U_>^xrk|BIS#a>M)K$0mMgKEo4z$_Ekgn)1B;`_ zIROTTz$q_Ruhw3(ZrwlTgkyzs-f!E!{ePLv^J<2xTeoh_+kd}(k;di!X5kDCP76QO ziMUG0%l}v8XnGx@#Tq$np$69>1DPpaOY;|NG^Iv<zi0Vd*FogyUZA8>Rpu-;p2H36 zUY~gW`GN_r%ay6Al5L59KFYKHt&?|lcCL2~WMMeXFyZvmgh(+FS4P2!t5$h$(n(HB zOM8B;nWdnvu5azywfDb&`}W6c=_gLXzdkPVf`QXI?1WuEZeO`_W&cdc<HwJeGdNr? zy`#ZaIj=ovrOBlXle(CQh#vu=SN}YGsL0mL=;r1Ypd&W%WQv1JhS}_ltx?)%_Q<p; zHYqd+95=K%|Ju*bukLczR==*Ji{_q8+2-c%e%{2l+R)zqzjnjlyzSjyOPe-s-1ysN z%bHB7O*eHi%FD&i@T9rzjM>MWz<R)>;X8v3>j!Rz#Js$B-3lD<(l$q0^fj05-h1YZ z_LE(COdXFcDkl`}^s%<K*6|d&^wQ+h&p*#MZ{8d~cg~zUroO`So<Dr>-~lt^0cqn7 zg{~x~0-1J3g}&sNxVS^#{~q6#TfcVItJ8n~)=IQ}{KkK;m7|FvP-L>oB9@|(k}nm> z$&dg2`c;)*SoqO9?cZlp&m3F-xG2kDU~W(?ag8WRNi0dVN-jzTQVd20hQ_)E=DG$Z zA%^Bw2F5_7ZD3?&VBouCH!!ClX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpi gnR(g8$%zH2dih1^v)|cB0TnTLy85}Sb4q9e05#pH-v9sr diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/find.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/find.png deleted file mode 100644 index 02f40cb2f990851a50592926ffb3802ecc3d7617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_2p$#}JFtrIQYNE3=Cn+iz}Mc<kgE1J5}*ExeO<Ewr2>*Ye6$ z#fxvLT(bVWs@F>|)Gye?we<O2+tN(!dtBdQs$`<XVm9rTn-%u*MUPowtaYc=tUzYT z=Wi2B%Q9a!A8$ThZNKmP#}l7zJSMTkUQe8*_D{b_!D0P%XA#$gXG`>fqL)p8q8%FU zF8m!YECs*jy<%26b@v=lLdlDvq^hcFw+-)u<(-|KP0KPpmS5hnV~2x8+l@PSY?wZ1 z8ryR=F{G!b@7TAm&Uweg$-$vtL-)o#&)RzHL+$>PXO8cCZ@&6!*5bJJpFe!~pv_>J z=C=E8+v{BgvEqk%CoPRy8}_2a>U_>^xrk|BIS#a>M)K$0mMgKEo4z$_Ekgn)1B;`_ zIROTTz$q_Ruhw3(ZrwlTgkyzs-f!E!{ePLv^J<2xTeoh_+kd}(k;di!X5kDCP76QO ziMUG0%l}v8XnGx@#Tq$np$69>1DPpaOY;|NG^Iv<zi0Vd*FogyUZA8>Rpu-;p2H36 zUY~gW`GN_r%ay6Al5L59KFYKHt&?|lcCL2~WMMeXFyZvmgh(+FS4P2!t5$h$(n(HB zOM8B;nWdnvu5azywfDb&`}W6c=_gLXzdkPVf`QXI?1WuEZeO`_W&cdc<HwJeGdNr? zy`#ZaIj=ovrOBlXle(CQh#vu=SN}YGsL0mL=;r1Ypd&W%WQv1JhS}_ltx?)%_Q<p; zHYqd+95=K%|Ju*bukLczR==*Ji{_q8+2-c%e%{2l+R)zqzjnjlyzSjyOPe-s-1ysN z%bHB7O*eHi%FD&i@T9rzjM>MWz<R)>;X8v3>j!Rz#Js$B-3lD<(l$q0^fj05-h1YZ z_LE(COdXFcDkl`}^s%<K*6|d&^wQ+h&p*#MZ{8d~cg~zUroO`So<Dr>-~lt^0cqn7 zg{~x~0-1J3g}&sNxVS^#{~q6#TfcVItJ8n~)=IQ}{KkK;m7|FvP-L>oB9@|(k}nm> z$&dg2`c;)*SoqO9?cZlp&m3F-xG2kDU~W(?ag8WRNi0dVN-jzTQVd20hQ_)E=DG$Z zA%^Bw2F5_7ZD3?&VBouCH!!ClX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpi gnR(g8$%zH2dih1^v)|cB0TnTLy85}Sb4q9e05#pH-v9sr diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find-rtl.png deleted file mode 100644 index cbf9ced23a075b392c55bbea9835dd39eb18971d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2417 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/find.png deleted file mode 100644 index cbf9ced23a075b392c55bbea9835dd39eb18971d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2417 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/hidpi/replace.png deleted file mode 100644 index 9efd8bbdd99cc432ca602d5261cdeda318b28950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2761 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 P00000NkvXXu0mjfKbA?` diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/icons/replace.png b/platforms/browser/www/lib/ckeditor/plugins/find/icons/replace.png deleted file mode 100644 index e68afcbe2049aabc8ce5214222c11c78bfe205fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(^*d!#}JFtp_6R0wbKP!=T~lBeRr$s`(MhFdIec{jFxQRUVLoE zjUVhwc55+dPO{po$P#lb^g!sX2}%-$m!F6);bbh97S&AQjMU4Cee4u<a`pPVSC@R4 zTFB>PK4+%oXAc3ETkpRIhQ2J@?V~0fA}V-L!dY!Hqk?bnv(J_ct4=vxJ9v<Bt{*$Y z?QNZpXPEeI)akCV^A})Y;AwYuTP)}~X@Uyp=btj6M^|XAd(E_A<3>ll>B_UuPCEUR zqlrQArpQG5Pd{yrCQW?%Hn-;f@l84|ET<)!A6s;E)J6FpGDxYclob3a_G4#^9=lQz z>mTMni&hyo81NV>9m+9t4qd*=N>ng5DoV*y=-jz;cK2`H>asbXoSwd1MJfFNyI>>` zC{8}PM`B4PmjFX!2ZMnG&yF2Ceth`w!JuQ&i}hivMbAF}{Nm4_Kgu62XHQtZeEF{J z+n2A}<q^)_4D?fb*y`3*>sGzWzndo>x;5nM@6)GGf8QI|zk9d!k{G>gnd5iv-P4OR z*}H##dHQC_%vnlG74zEP{{|9<Y!6l&@cftIVT<T>OFs2q)JJV{IA4$9j&<I8(=TuL zU8R*dE2(zZ-_W;Z)k(L_j?Hj2^I0Ao^0hQzX;7hy%VP_%)z@G9Ub}W})v73Fjj3KY zw)L(OYEyjtaYl~W>D!Kdk9)MIa!pH3lsUdIKqJKUiM!y(oZD_LS;uCaZ&FAoE}s1L zYpF}h9*y&#H|V@>J@T;N#N)@0_rCuf&n)ly<o)8si^~t}SNi1VA|PmMXIGc1>M7J? zxI*jN=g-DRlRmcB?XM45ef81m)!M$7ryM@)tUJ{!o?*_MIeSuDRXmR=eM(xe%0#L+ zqrCk4j;OVD!E3|z-?@Lk|Mk~jVi)F|O>+rsdH<V1xZ&#6P+<HY;O;yok(ZZuDQ)x5 z?A>?&t&3Z4&)|MG?eq8L%hlJdU%!0aYb7Nur6>)N4Y|?{{}~PzrJR00y|xXQ+Eq(j zBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE%n3*ua`RI%(<*Um zu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$MGT&<elF{r5}E*Z Cz@PO1 diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/af.js deleted file mode 100644 index 79e13e84..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","af",{find:"Soek",findOptions:"Find Options",findWhat:"Soek na:",matchCase:"Hoof/kleinletter sensitief",matchCyclic:"Soek deurlopend",matchWord:"Hele woord moet voorkom",notFoundMsg:"Teks nie gevind nie.",replace:"Vervang",replaceAll:"Vervang alles",replaceSuccessMsg:"%1 voorkoms(te) vervang.",replaceWith:"Vervang met:",title:"Soek en vervang"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ar.js deleted file mode 100644 index e995c89d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ar",{find:"بحث",findOptions:"Find Options",findWhat:"البحث بـ:",matchCase:"مطابقة حالة الأحرف",matchCyclic:"مطابقة دورية",matchWord:"مطابقة بالكامل",notFoundMsg:"لم يتم العثور على النص المحدد.",replace:"إستبدال",replaceAll:"إستبدال الكل",replaceSuccessMsg:"تم استبدال 1% من الحالات ",replaceWith:"إستبدال بـ:",title:"بحث واستبدال"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/bg.js deleted file mode 100644 index 844a0b27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bg",{find:"Търсене",findOptions:"Find Options",findWhat:"Търси за:",matchCase:"Съвпадение",matchCyclic:"Циклично съвпадение",matchWord:"Съвпадение с дума",notFoundMsg:"Указаният текст не е намерен.",replace:"Препокриване",replaceAll:"Препокрий всички",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Препокрива с:",title:"Търсене и препокриване"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/bn.js deleted file mode 100644 index f80be452..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bn",{find:"খোজো",findOptions:"Find Options",findWhat:"যা খুঁজতে হবে:",matchCase:"কেস মিলাও",matchCyclic:"Match cyclic",matchWord:"পুরা শব্দ মেলাও",notFoundMsg:"আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি",replace:"রিপ্লেস",replaceAll:"সব বদলে দাও",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"যার সাথে বদলাতে হবে:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/bs.js deleted file mode 100644 index 4941067b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","bs",{find:"Naði",findOptions:"Find Options",findWhat:"Naði šta:",matchCase:"Uporeðuj velika/mala slova",matchCyclic:"Match cyclic",matchWord:"Uporeðuj samo cijelu rijeè",notFoundMsg:"Traženi tekst nije pronaðen.",replace:"Zamjeni",replaceAll:"Zamjeni sve",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Zamjeni sa:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ca.js deleted file mode 100644 index 85448cf4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ca",{find:"Cerca",findOptions:"Opcions de Cerca",findWhat:"Cerca el:",matchCase:"Distingeix majúscules/minúscules",matchCyclic:"Coincidència cíclica",matchWord:"Només paraules completes",notFoundMsg:"El text especificat no s'ha trobat.",replace:"Reemplaça",replaceAll:"Reemplaça-ho tot",replaceSuccessMsg:"%1 ocurrència/es reemplaçada/es.",replaceWith:"Reemplaça amb:",title:"Cerca i reemplaça"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/cs.js deleted file mode 100644 index a63cd194..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","cs",{find:"Hledat",findOptions:"Možnosti hledání",findWhat:"Co hledat:",matchCase:"Rozlišovat velikost písma",matchCyclic:"Procházet opakovaně",matchWord:"Pouze celá slova",notFoundMsg:"Hledaný text nebyl nalezen.",replace:"Nahradit",replaceAll:"Nahradit vše",replaceSuccessMsg:"%1 nahrazení.",replaceWith:"Čím nahradit:",title:"Najít a nahradit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/cy.js deleted file mode 100644 index 3e87336f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","cy",{find:"Chwilio",findOptions:"Opsiynau Chwilio",findWhat:"Chwilio'r term:",matchCase:"Cydweddu'r cas",matchCyclic:"Cydweddu'n gylchol",matchWord:"Cydweddu gair cyfan",notFoundMsg:"Nid oedd y testun wedi'i ddarganfod.",replace:"Amnewid Un",replaceAll:"Amnewid Pob",replaceSuccessMsg:"Amnewidiwyd %1 achlysur.",replaceWith:"Amnewid gyda:",title:"Chwilio ac Amnewid"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/da.js deleted file mode 100644 index 35693e27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","da",{find:"Søg",findOptions:"Find muligheder",findWhat:"Søg efter:",matchCase:"Forskel på store og små bogstaver",matchCyclic:"Match cyklisk",matchWord:"Kun hele ord",notFoundMsg:"Søgeteksten blev ikke fundet",replace:"Erstat",replaceAll:"Erstat alle",replaceSuccessMsg:"%1 forekomst(er) erstattet.",replaceWith:"Erstat med:",title:"Søg og erstat"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/de.js deleted file mode 100644 index 5295d06e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","de",{find:"Suchen",findOptions:"Suchoptionen",findWhat:"Suche nach:",matchCase:"Groß-Kleinschreibung beachten",matchCyclic:"Zyklische Suche",matchWord:"Nur ganze Worte suchen",notFoundMsg:"Der gesuchte Text wurde nicht gefunden.",replace:"Ersetzen",replaceAll:"Alle ersetzen",replaceSuccessMsg:"%1 vorkommen ersetzt.",replaceWith:"Ersetze mit:",title:"Suchen und Ersetzen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/el.js deleted file mode 100644 index f559f2a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","el",{find:"Εύρεση",findOptions:"Επιλογές Εύρεσης",findWhat:"Εύρεση για:",matchCase:"Ταίριασμα πεζών/κεφαλαίων",matchCyclic:"Αναδρομική εύρεση",matchWord:"Εύρεση μόνο πλήρων λέξεων",notFoundMsg:"Το κείμενο δεν βρέθηκε.",replace:"Αντικατάσταση",replaceAll:"Αντικατάσταση Όλων",replaceSuccessMsg:"Ο(ι) όρος(-οι) αντικαταστήθηκε(-αν) %1 φορές.",replaceWith:"Αντικατάσταση με:",title:"Εύρεση και Αντικατάσταση"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-au.js deleted file mode 100644 index ad033791..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-au",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-ca.js deleted file mode 100644 index d217f653..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-ca",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-gb.js deleted file mode 100644 index dfbafb7e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en-gb",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/en.js deleted file mode 100644 index 6865f0b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","en",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/eo.js deleted file mode 100644 index 9fde69e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","eo",{find:"Serĉi",findOptions:"Opcioj pri Serĉado",findWhat:"Serĉi:",matchCase:"Kongruigi Usklecon",matchCyclic:"Cikla Serĉado",matchWord:"Tuta Vorto",notFoundMsg:"La celteksto ne estas trovita.",replace:"Anstataŭigi",replaceAll:"Anstataŭigi Ĉion",replaceSuccessMsg:"%1 anstataŭigita(j) apero(j).",replaceWith:"Anstataŭigi per:",title:"Serĉi kaj Anstataŭigi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/es.js deleted file mode 100644 index 2efd39ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","es",{find:"Buscar",findOptions:"Opciones de búsqueda",findWhat:"Texto a buscar:",matchCase:"Coincidir may/min",matchCyclic:"Buscar en todo el contenido",matchWord:"Coincidir toda la palabra",notFoundMsg:"El texto especificado no ha sido encontrado.",replace:"Reemplazar",replaceAll:"Reemplazar Todo",replaceSuccessMsg:"La expresión buscada ha sido reemplazada %1 veces.",replaceWith:"Reemplazar con:",title:"Buscar y Reemplazar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/et.js deleted file mode 100644 index bcc39210..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","et",{find:"Otsi",findOptions:"Otsingu valikud",findWhat:"Otsitav:",matchCase:"Suur- ja väiketähtede eristamine",matchCyclic:"Jätkatakse algusest",matchWord:"Ainult terved sõnad",notFoundMsg:"Otsitud teksti ei leitud.",replace:"Asenda",replaceAll:"Asenda kõik",replaceSuccessMsg:"%1 vastet asendati.",replaceWith:"Asendus:",title:"Otsimine ja asendamine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/eu.js deleted file mode 100644 index f082555f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","eu",{find:"Bilatu",findOptions:"Find Options",findWhat:"Zer bilatu:",matchCase:"Maiuskula/minuskula",matchCyclic:"Bilaketa ziklikoa",matchWord:"Esaldi osoa bilatu",notFoundMsg:"Idatzitako testua ez da topatu.",replace:"Ordezkatu",replaceAll:"Ordeztu Guztiak",replaceSuccessMsg:"Zenbat aldiz ordeztua: %1",replaceWith:"Zerekin ordeztu:",title:"Bilatu eta Ordeztu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/fa.js deleted file mode 100644 index 2339c6dd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fa",{find:"جستجو",findOptions:"گزینه​های جستجو",findWhat:"چه چیز را مییابید:",matchCase:"همسانی در بزرگی و کوچکی نویسه​ها",matchCyclic:"همسانی با چرخه",matchWord:"همسانی با واژهٴ کامل",notFoundMsg:"متن موردنظر یافت نشد.",replace:"جایگزینی",replaceAll:"جایگزینی همهٴ یافته​ها",replaceSuccessMsg:"%1 رخداد جایگزین شد.",replaceWith:"جایگزینی با:",title:"جستجو و جایگزینی"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/fi.js deleted file mode 100644 index 79daf814..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fi",{find:"Etsi",findOptions:"Hakuasetukset",findWhat:"Etsi mitä:",matchCase:"Sama kirjainkoko",matchCyclic:"Kierrä ympäri",matchWord:"Koko sana",notFoundMsg:"Etsittyä tekstiä ei löytynyt.",replace:"Korvaa",replaceAll:"Korvaa kaikki",replaceSuccessMsg:"%1 esiintymä(ä) korvattu.",replaceWith:"Korvaa tällä:",title:"Etsi ja korvaa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/fo.js deleted file mode 100644 index 1e3dc043..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fo",{find:"Leita",findOptions:"Finn møguleikar",findWhat:"Finn:",matchCase:"Munur á stórum og smáum bókstavum",matchCyclic:"Match cyclic",matchWord:"Bert heil orð",notFoundMsg:"Leititeksturin varð ikki funnin",replace:"Yvirskriva",replaceAll:"Yvirskriva alt",replaceSuccessMsg:"%1 úrslit broytt.",replaceWith:"Yvirskriva við:",title:"Finn og broyt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr-ca.js deleted file mode 100644 index 59a8e22c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fr-ca",{find:"Rechercher",findOptions:"Options de recherche",findWhat:"Rechercher:",matchCase:"Respecter la casse",matchCyclic:"Recherche cyclique",matchWord:"Mot entier",notFoundMsg:"Le texte indiqué est introuvable.",replace:"Remplacer",replaceAll:"Tout remplacer",replaceSuccessMsg:"%1 remplacements.",replaceWith:"Remplacer par:",title:"Rechercher et remplacer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr.js deleted file mode 100644 index a7b4218e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","fr",{find:"Trouver",findOptions:"Options de recherche",findWhat:"Expression à trouver: ",matchCase:"Respecter la casse",matchCyclic:"Boucler",matchWord:"Mot entier uniquement",notFoundMsg:"Le texte spécifié ne peut être trouvé.",replace:"Remplacer",replaceAll:"Remplacer tout",replaceSuccessMsg:"%1 occurrence(s) replacée(s).",replaceWith:"Remplacer par: ",title:"Trouver et remplacer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/gl.js deleted file mode 100644 index be892489..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","gl",{find:"Buscar",findOptions:"Buscar opcións",findWhat:"Texto a buscar:",matchCase:"Coincidir Mai./min.",matchCyclic:"Coincidencia cíclica",matchWord:"Coincidencia coa palabra completa",notFoundMsg:"Non se atopou o texto indicado.",replace:"Substituir",replaceAll:"Substituír todo",replaceSuccessMsg:"%1 concorrencia(s) substituída(s).",replaceWith:"Substituír con:",title:"Buscar e substituír"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/gu.js deleted file mode 100644 index 572afcfd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","gu",{find:"શોધવું",findOptions:"વીકલ્પ શોધો",findWhat:"આ શોધો",matchCase:"કેસ સરખા રાખો",matchCyclic:"સરખાવવા બધા",matchWord:"બઘા શબ્દ સરખા રાખો",notFoundMsg:"તમે શોધેલી ટેક્સ્ટ નથી મળી",replace:"રિપ્લેસ/બદલવું",replaceAll:"બઘા બદલી ",replaceSuccessMsg:"%1 ફેરફારો બાદલાયા છે.",replaceWith:"આનાથી બદલો",title:"શોધવું અને બદલવું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/he.js deleted file mode 100644 index ea4e4224..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","he",{find:"חיפוש",findOptions:"אפשרויות חיפוש",findWhat:"חיפוש מחרוזת:",matchCase:"הבחנה בין אותיות רשיות לקטנות (Case)",matchCyclic:"התאמה מחזורית",matchWord:"התאמה למילה המלאה",notFoundMsg:"הטקסט המבוקש לא נמצא.",replace:"החלפה",replaceAll:"החלפה בכל העמוד",replaceSuccessMsg:"%1 טקסטים הוחלפו.",replaceWith:"החלפה במחרוזת:",title:"חיפוש והחלפה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/hi.js deleted file mode 100644 index d67da0a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hi",{find:"खोजें",findOptions:"Find Options",findWhat:"यह खोजें:",matchCase:"केस मिलायें",matchCyclic:"Match cyclic",matchWord:"पूरा शब्द मिलायें",notFoundMsg:"आपके द्वारा दिया गया टेक्स्ट नहीं मिला",replace:"रीप्लेस",replaceAll:"सभी रिप्लेस करें",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"इससे रिप्लेस करें:",title:"खोजें और बदलें"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/hr.js deleted file mode 100644 index bcca21eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hr",{find:"Pronađi",findOptions:"Opcije traženja",findWhat:"Pronađi:",matchCase:"Usporedi mala/velika slova",matchCyclic:"Usporedi kružno",matchWord:"Usporedi cijele riječi",notFoundMsg:"Traženi tekst nije pronađen.",replace:"Zamijeni",replaceAll:"Zamijeni sve",replaceSuccessMsg:"Zamijenjeno %1 pojmova.",replaceWith:"Zamijeni s:",title:"Pronađi i zamijeni"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/hu.js deleted file mode 100644 index 6ca2b808..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","hu",{find:"Keresés",findOptions:"Find Options",findWhat:"Keresett szöveg:",matchCase:"kis- és nagybetű megkülönböztetése",matchCyclic:"Ciklikus keresés",matchWord:"csak ha ez a teljes szó",notFoundMsg:"A keresett szöveg nem található.",replace:"Csere",replaceAll:"Az összes cseréje",replaceSuccessMsg:"%1 egyezőség cserélve.",replaceWith:"Csere erre:",title:"Keresés és csere"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/id.js deleted file mode 100644 index 4257045a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","id",{find:"Temukan",findOptions:"Opsi menemukan",findWhat:"Temukan apa:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Ganti",replaceAll:"Ganti Semua",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Ganti dengan:",title:"Temukan dan Ganti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/is.js deleted file mode 100644 index d69cba6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","is",{find:"Leita",findOptions:"Find Options",findWhat:"Leita að:",matchCase:"Gera greinarmun á¡ há¡- og lágstöfum",matchCyclic:"Match cyclic",matchWord:"Aðeins heil orð",notFoundMsg:"Leitartexti fannst ekki!",replace:"Skipta út",replaceAll:"Skipta út allsstaðar",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Skipta út fyrir:",title:"Finna og skipta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/it.js deleted file mode 100644 index 2aed2adc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","it",{find:"Trova",findOptions:"Opzioni di ricerca",findWhat:"Trova:",matchCase:"Maiuscole/minuscole",matchCyclic:"Ricerca ciclica",matchWord:"Solo parole intere",notFoundMsg:"L'elemento cercato non è stato trovato.",replace:"Sostituisci",replaceAll:"Sostituisci tutto",replaceSuccessMsg:"%1 occorrenza(e) sostituite.",replaceWith:"Sostituisci con:",title:"Cerca e Sostituisci"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ja.js deleted file mode 100644 index f2043d1f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ja",{find:"検索",findOptions:"検索オプション",findWhat:"検索する文字列:",matchCase:"大文字と小文字を区別する",matchCyclic:"末尾に逹したら先頭に戻る",matchWord:"単語単位で探す",notFoundMsg:"指定された文字列は見つかりませんでした。",replace:"置換",replaceAll:"すべて置換",replaceSuccessMsg:"%1 個置換しました。",replaceWith:"置換後の文字列:",title:"検索と置換"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ka.js deleted file mode 100644 index d5d8dda9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ka",{find:"ძებნა",findOptions:"Find Options",findWhat:"საძიებელი ტექსტი:",matchCase:"დიდი და პატარა ასოების დამთხვევა",matchCyclic:"დოკუმენტის ბოლოში გასვლის მერე თავიდან დაწყება",matchWord:"მთელი სიტყვის დამთხვევა",notFoundMsg:"მითითებული ტექსტი არ მოიძებნა.",replace:"შეცვლა",replaceAll:"ყველას შეცვლა",replaceSuccessMsg:"%1 მოძებნილი შეიცვალა.",replaceWith:"შეცვლის ტექსტი:",title:"ძებნა და შეცვლა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/km.js deleted file mode 100644 index 3815f2ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","km",{find:"ស្វែងរក",findOptions:"ជម្រើស​ស្វែង​រក",findWhat:"ស្វែងរកអ្វី:",matchCase:"ករណី​ដំណូច",matchCyclic:"ត្រូវ​នឹង cyclic",matchWord:"ដូច​នឹង​ពាក្យ​ទាំង​មូល",notFoundMsg:"រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។",replace:"ជំនួស",replaceAll:"ជំនួសទាំងអស់",replaceSuccessMsg:"ការ​ជំនួស​ចំនួន %1 បាន​កើត​ឡើង។",replaceWith:"ជំនួសជាមួយ:",title:"រក​និង​ជំនួស"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ko.js deleted file mode 100644 index e17dce40..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ko",{find:"찾기",findOptions:"Find Options",findWhat:"찾을 문자열:",matchCase:"대소문자 구분",matchCyclic:"Match cyclic",matchWord:"온전한 단어",notFoundMsg:"문자열을 찾을 수 없습니다.",replace:"바꾸기",replaceAll:"모두 바꾸기",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"바꿀 문자열:",title:"찾기 & 바꾸기"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ku.js deleted file mode 100644 index 54cc3c93..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ku",{find:"گەڕان",findOptions:"هەڵبژاردەکانی گەڕان",findWhat:"گەڕان بەدووای:",matchCase:"جیاکردنەوه لەنێوان پیتی گەورەو بچووك",matchCyclic:"گەڕان لەهەموو پەڕەکه",matchWord:"تەنەا هەموو وشەکه",notFoundMsg:"هیچ دەقه گەڕانێك نەدۆزراوه.",replace:"لەبریدانان",replaceAll:"لەبریدانانی هەمووی",replaceSuccessMsg:" پێشهاتە(ی) لەبری دانرا. %1",replaceWith:"لەبریدانان به:",title:"گەڕان و لەبریدانان"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/lt.js deleted file mode 100644 index 2c55039e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","lt",{find:"Rasti",findOptions:"Paieškos nustatymai",findWhat:"Surasti tekstą:",matchCase:"Skirti didžiąsias ir mažąsias raides",matchCyclic:"Sutampantis cikliškumas",matchWord:"Atitikti pilną žodį",notFoundMsg:"Nurodytas tekstas nerastas.",replace:"Pakeisti",replaceAll:"Pakeisti viską",replaceSuccessMsg:"%1 sutapimas(ų) buvo pakeisti.",replaceWith:"Pakeisti tekstu:",title:"Surasti ir pakeisti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/lv.js deleted file mode 100644 index 12a554cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","lv",{find:"Meklēt",findOptions:"Meklēt uzstādījumi",findWhat:"Meklēt:",matchCase:"Reģistrjūtīgs",matchCyclic:"Sakrist cikliski",matchWord:"Jāsakrīt pilnībā",notFoundMsg:"Norādītā frāze netika atrasta.",replace:"Nomainīt",replaceAll:"Aizvietot visu",replaceSuccessMsg:"%1 gadījums(i) aizvietoti",replaceWith:"Nomainīt uz:",title:"Meklēt un aizvietot"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/mk.js deleted file mode 100644 index 8c41cfc1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","mk",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"Replace",replaceAll:"Replace All",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/mn.js deleted file mode 100644 index 28498167..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","mn",{find:"Хайх",findOptions:"Хайх сонголтууд",findWhat:"Хайх үг/үсэг:",matchCase:"Тэнцэх төлөв",matchCyclic:"Match cyclic",matchWord:"Тэнцэх бүтэн үг",notFoundMsg:"Хайсан бичвэрийг олсонгүй.",replace:"Орлуулах",replaceAll:"Бүгдийг нь солих",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Солих үг:",title:"Хайж орлуулах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ms.js deleted file mode 100644 index 75f96037..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ms",{find:"Cari",findOptions:"Find Options",findWhat:"Perkataan yang dicari:",matchCase:"Padanan case huruf",matchCyclic:"Match cyclic",matchWord:"Padana Keseluruhan perkataan",notFoundMsg:"Text yang dicari tidak dijumpai.",replace:"Ganti",replaceAll:"Ganti semua",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Diganti dengan:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/nb.js deleted file mode 100644 index 6779f499..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","nb",{find:"Søk",findOptions:"Søkealternativer",findWhat:"Søk etter:",matchCase:"Skill mellom store og små bokstaver",matchCyclic:"Søk i hele dokumentet",matchWord:"Bare hele ord",notFoundMsg:"Fant ikke søketeksten.",replace:"Erstatt",replaceAll:"Erstatt alle",replaceSuccessMsg:"%1 tilfelle(r) erstattet.",replaceWith:"Erstatt med:",title:"Søk og erstatt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/nl.js deleted file mode 100644 index 156a9da5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","nl",{find:"Zoeken",findOptions:"Zoekopties",findWhat:"Zoeken naar:",matchCase:"Hoofdlettergevoelig",matchCyclic:"Doorlopend zoeken",matchWord:"Hele woord moet voorkomen",notFoundMsg:"De opgegeven tekst is niet gevonden.",replace:"Vervangen",replaceAll:"Alles vervangen",replaceSuccessMsg:"%1 resultaten vervangen.",replaceWith:"Vervangen met:",title:"Zoeken en vervangen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/no.js deleted file mode 100644 index e098a7c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","no",{find:"Søk",findOptions:"Søkealternativer",findWhat:"Søk etter:",matchCase:"Skill mellom store og små bokstaver",matchCyclic:"Søk i hele dokumentet",matchWord:"Bare hele ord",notFoundMsg:"Fant ikke søketeksten.",replace:"Erstatt",replaceAll:"Erstatt alle",replaceSuccessMsg:"%1 tilfelle(r) erstattet.",replaceWith:"Erstatt med:",title:"Søk og erstatt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/pl.js deleted file mode 100644 index 1144fd8b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pl",{find:"Znajdź",findOptions:"Opcje wyszukiwania",findWhat:"Znajdź:",matchCase:"Uwzględnij wielkość liter",matchCyclic:"Cykliczne dopasowanie",matchWord:"Całe słowa",notFoundMsg:"Nie znaleziono szukanego hasła.",replace:"Zamień",replaceAll:"Zamień wszystko",replaceSuccessMsg:"%1 wystąpień zastąpionych.",replaceWith:"Zastąp przez:",title:"Znajdź i zamień"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt-br.js deleted file mode 100644 index b9e438c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pt-br",{find:"Localizar",findOptions:"Opções",findWhat:"Procurar por:",matchCase:"Coincidir Maiúsculas/Minúsculas",matchCyclic:"Coincidir cíclico",matchWord:"Coincidir a palavra inteira",notFoundMsg:"O texto especificado não foi encontrado.",replace:"Substituir",replaceAll:"Substituir Tudo",replaceSuccessMsg:"%1 ocorrência(s) substituída(s).",replaceWith:"Substituir por:",title:"Localizar e Substituir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt.js deleted file mode 100644 index bb8c1a6a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","pt",{find:"Procurar",findOptions:"Find Options",findWhat:"Texto a Procurar:",matchCase:"Maiúsculas/Minúsculas",matchCyclic:"Match cyclic",matchWord:"Coincidir com toda a palavra",notFoundMsg:"O texto especificado não foi encontrado.",replace:"Substituir",replaceAll:"Substituir Tudo",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Substituir por:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ro.js deleted file mode 100644 index 7ec8b9d6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ro",{find:"Găseşte",findOptions:"Find Options",findWhat:"Găseşte:",matchCase:"Deosebeşte majuscule de minuscule (Match case)",matchCyclic:"Potrivește ciclic",matchWord:"Doar cuvintele întregi",notFoundMsg:"Textul specificat nu a fost găsit.",replace:"Înlocuieşte",replaceAll:"Înlocuieşte tot",replaceSuccessMsg:"%1 căutări înlocuite.",replaceWith:"Înlocuieşte cu:",title:"Găseşte şi înlocuieşte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ru.js deleted file mode 100644 index b611c271..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ru",{find:"Найти",findOptions:"Опции поиска",findWhat:"Найти:",matchCase:"Учитывать регистр",matchCyclic:"По всему тексту",matchWord:"Только слово целиком",notFoundMsg:"Искомый текст не найден.",replace:"Заменить",replaceAll:"Заменить всё",replaceSuccessMsg:"Успешно заменено %1 раз(а).",replaceWith:"Заменить на:",title:"Поиск и замена"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/si.js deleted file mode 100644 index 1e1d1457..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","si",{find:"Find",findOptions:"Find Options",findWhat:"Find what:",matchCase:"Match case",matchCyclic:"Match cyclic",matchWord:"Match whole word",notFoundMsg:"The specified text was not found.",replace:"හිලව් කිරීම",replaceAll:"සියල්ලම හිලව් කරන්න",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Replace with:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sk.js deleted file mode 100644 index 11821e7a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sk",{find:"Hľadať",findOptions:"Nájsť možnosti",findWhat:"Čo hľadať:",matchCase:"Rozlišovať malé a veľké písmená",matchCyclic:"Cykliť zhodu",matchWord:"Len celé slová",notFoundMsg:"Hľadaný text nebol nájdený.",replace:"Nahradiť",replaceAll:"Nahradiť všetko",replaceSuccessMsg:"%1 výskyt(ov) nahradených.",replaceWith:"Čím nahradiť:",title:"Nájsť a nahradiť"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sl.js deleted file mode 100644 index 32dea7e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sl",{find:"Najdi",findOptions:"Find Options",findWhat:"Najdi:",matchCase:"Razlikuj velike in male črke",matchCyclic:"Primerjaj znake v cirilici",matchWord:"Samo cele besede",notFoundMsg:"Navedeno besedilo ni bilo najdeno.",replace:"Zamenjaj",replaceAll:"Zamenjaj vse",replaceSuccessMsg:"%1 pojavitev je bilo zamenjano.",replaceWith:"Zamenjaj z:",title:"Najdi in zamenjaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sq.js deleted file mode 100644 index ae034f6d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sq",{find:"Gjej",findOptions:"Gjejë Alternativat",findWhat:"Gjej çka:",matchCase:"Rasti i përputhjes",matchCyclic:"Përputh ciklikun",matchWord:"Përputh fjalën e tërë",notFoundMsg:"Teksti i caktuar nuk mundej të gjendet.",replace:"Zëvendëso",replaceAll:"Zëvendëso të gjitha",replaceSuccessMsg:"%1 rast(e) u zëvendësua(n).",replaceWith:"Zëvendëso me:",title:"Gjej dhe Zëvendëso"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr-latn.js deleted file mode 100644 index 40a40064..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sr-latn",{find:"Pretraga",findOptions:"Find Options",findWhat:"Pronadi:",matchCase:"Razlikuj mala i velika slova",matchCyclic:"Match cyclic",matchWord:"Uporedi cele reci",notFoundMsg:"Traženi tekst nije pronađen.",replace:"Zamena",replaceAll:"Zameni sve",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Zameni sa:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr.js deleted file mode 100644 index 57ca6296..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sr",{find:"Претрага",findOptions:"Find Options",findWhat:"Пронађи:",matchCase:"Разликуј велика и мала слова",matchCyclic:"Match cyclic",matchWord:"Упореди целе речи",notFoundMsg:"Тражени текст није пронађен.",replace:"Замена",replaceAll:"Замени све",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"Замени са:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/sv.js deleted file mode 100644 index f86c7d28..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","sv",{find:"Sök",findOptions:"Sökalternativ",findWhat:"Sök efter:",matchCase:"Skiftläge",matchCyclic:"Matcha cykliska",matchWord:"Inkludera hela ord",notFoundMsg:"Angiven text kunde ej hittas.",replace:"Ersätt",replaceAll:"Ersätt alla",replaceSuccessMsg:"%1 förekomst(er) ersatta.",replaceWith:"Ersätt med:",title:"Sök och ersätt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/th.js deleted file mode 100644 index 877ab909..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","th",{find:"ค้นหา",findOptions:"Find Options",findWhat:"ค้นหาคำว่า:",matchCase:"ตัวโหญ่-เล็ก ต้องตรงกัน",matchCyclic:"Match cyclic",matchWord:"ต้องตรงกันทุกคำ",notFoundMsg:"ไม่พบคำที่ค้นหา.",replace:"ค้นหาและแทนที่",replaceAll:"แทนที่ทั้งหมดที่พบ",replaceSuccessMsg:"%1 occurrence(s) replaced.",replaceWith:"แทนที่ด้วย:",title:"Find and Replace"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/tr.js deleted file mode 100644 index a0fc4f0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","tr",{find:"Bul",findOptions:"Seçenekleri Bul",findWhat:"Aranan:",matchCase:"Büyük/küçük harf duyarlı",matchCyclic:"Eşleşen döngü",matchWord:"Kelimenin tamamı uysun",notFoundMsg:"Belirtilen yazı bulunamadı.",replace:"Değiştir",replaceAll:"Tümünü Değiştir",replaceSuccessMsg:"%1 bulunanlardan değiştirildi.",replaceWith:"Bununla değiştir:",title:"Bul ve Değiştir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/tt.js deleted file mode 100644 index 90a66914..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","tt",{find:"Эзләү",findOptions:"Эзләү көйләүләре",findWhat:"Нәрсә эзләргә:",matchCase:"Баш һәм юл хәрефләрен исәпкә алу",matchCyclic:"Кабатлап эзләргә",matchWord:"Сүзләрне тулысынча гына эзләү",notFoundMsg:"Эзләнгән текст табылмады.",replace:"Алмаштыру",replaceAll:"Барысын да алмаштыру",replaceSuccessMsg:"%1 урында(ларда) алмаштырылган.",replaceWith:"Нәрсәгә алмаштыру:",title:"Эзләп табу һәм алмаштыру"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/ug.js deleted file mode 100644 index 9a3e7542..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","ug",{find:"ئىزدە",findOptions:"ئىزدەش تاللانمىسى",findWhat:"ئىزدە:",matchCase:"چوڭ كىچىك ھەرپنى پەرقلەندۈر",matchCyclic:"ئايلانما ماسلىشىش",matchWord:"پۈتۈن سۆز ماسلىشىش",notFoundMsg:"بەلگىلەنگەن تېكىستنى تاپالمىدى",replace:"ئالماشتۇر",replaceAll:"ھەممىنى ئالماشتۇر",replaceSuccessMsg:"جەمئى %1 جايدىكى ئالماشتۇرۇش تاماملاندى",replaceWith:"ئالماشتۇر:",title:"ئىزدەپ ئالماشتۇر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/uk.js deleted file mode 100644 index 12bf2eb6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","uk",{find:"Пошук",findOptions:"Параметри Пошуку",findWhat:"Шукати:",matchCase:"Враховувати регістр",matchCyclic:"Циклічна заміна",matchWord:"Збіг цілих слів",notFoundMsg:"Вказаний текст не знайдено.",replace:"Заміна",replaceAll:"Замінити все",replaceSuccessMsg:"%1 співпадінь(ня) замінено.",replaceWith:"Замінити на:",title:"Знайти і замінити"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/vi.js deleted file mode 100644 index 07936d94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","vi",{find:"Tìm kiếm",findOptions:"Tìm tùy chọn",findWhat:"Tìm chuỗi:",matchCase:"Phân biệt chữ hoa/thường",matchCyclic:"Giống một phần",matchWord:"Giống toàn bộ từ",notFoundMsg:"Không tìm thấy chuỗi cần tìm.",replace:"Thay thế",replaceAll:"Thay thế tất cả",replaceSuccessMsg:"%1 vị trí đã được thay thế.",replaceWith:"Thay bằng:",title:"Tìm kiếm và thay thế"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh-cn.js deleted file mode 100644 index 746626af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","zh-cn",{find:"查找",findOptions:"查找选项",findWhat:"查找:",matchCase:"区分大小写",matchCyclic:"循环匹配",matchWord:"全字匹配",notFoundMsg:"指定的文本没有找到。",replace:"替换",replaceAll:"全部替换",replaceSuccessMsg:"共完成 %1 处替换。",replaceWith:"替换:",title:"查找和替换"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh.js deleted file mode 100644 index 4d6656ae..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("find","zh",{find:"尋找",findOptions:"尋找選項",findWhat:"尋找目標:",matchCase:"大小寫須相符",matchCyclic:"循環搜尋",matchWord:"全字拼寫須相符",notFoundMsg:"找不到指定的文字。",replace:"取代",replaceAll:"全部取代",replaceSuccessMsg:"已取代 %1 個指定項目。",replaceWith:"取代成:",title:"尋找及取代"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/find/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/find/plugin.js deleted file mode 100644 index 103b530d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/find/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("find",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"find,find-rtl,replace",hidpi:!0,init:function(a){var b=a.addCommand("find",new CKEDITOR.dialogCommand("find"));b.canUndo=!1;b.readOnly=1;a.addCommand("replace",new CKEDITOR.dialogCommand("replace")).canUndo=!1;a.ui.addButton&& -(a.ui.addButton("Find",{label:a.lang.find.find,command:"find",toolbar:"find,10"}),a.ui.addButton("Replace",{label:a.lang.find.replace,command:"replace",toolbar:"find,20"}));CKEDITOR.dialog.add("find",this.path+"dialogs/find.js");CKEDITOR.dialog.add("replace",this.path+"dialogs/find.js")}});CKEDITOR.config.find_highlight={element:"span",styles:{"background-color":"#004",color:"#fff"}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/dialogs/flash.js b/platforms/browser/www/lib/ckeditor/plugins/flash/dialogs/flash.js deleted file mode 100644 index 6592f8e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/dialogs/flash.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function b(a,b,c){var k=n[this.id];if(k)for(var f=this instanceof CKEDITOR.ui.dialog.checkbox,e=0;e<k.length;e++){var d=k[e];switch(d.type){case g:if(!a)continue;if(null!==a.getAttribute(d.name)){a=a.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case o:if(!a)continue;if(d.name in c){a=c[d.name];f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case i:if(!b)continue; -if(b.getAttribute(d.name)){a=b.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"])}}}function c(a,b,c){var k=n[this.id];if(k)for(var f=""===this.getValue(),e=this instanceof CKEDITOR.ui.dialog.checkbox,d=0;d<k.length;d++){var h=k[d];switch(h.type){case g:if(!a||"data"==h.name&&b&&!a.hasAttribute("data"))continue;var l=this.getValue();f||e&&l===h["default"]?a.removeAttribute(h.name):a.setAttribute(h.name,l);break;case o:if(!a)continue; -l=this.getValue();if(f||e&&l===h["default"])h.name in c&&c[h.name].remove();else if(h.name in c)c[h.name].setAttribute("value",l);else{var p=CKEDITOR.dom.element.createFromHtml("<cke:param></cke:param>",a.getDocument());p.setAttributes({name:h.name,value:l});1>a.getChildCount()?p.appendTo(a):p.insertBefore(a.getFirst())}break;case i:if(!b)continue;l=this.getValue();f||e&&l===h["default"]?b.removeAttribute(h.name):b.setAttribute(h.name,l)}}}for(var g=1,o=2,i=4,n={id:[{type:g,name:"id"}],classid:[{type:g, -name:"classid"}],codebase:[{type:g,name:"codebase"}],pluginspage:[{type:i,name:"pluginspage"}],src:[{type:o,name:"movie"},{type:i,name:"src"},{type:g,name:"data"}],name:[{type:i,name:"name"}],align:[{type:g,name:"align"}],"class":[{type:g,name:"class"},{type:i,name:"class"}],width:[{type:g,name:"width"},{type:i,name:"width"}],height:[{type:g,name:"height"},{type:i,name:"height"}],hSpace:[{type:g,name:"hSpace"},{type:i,name:"hSpace"}],vSpace:[{type:g,name:"vSpace"},{type:i,name:"vSpace"}],style:[{type:g, -name:"style"},{type:i,name:"style"}],type:[{type:i,name:"type"}]},m="play loop menu quality scale salign wmode bgcolor base flashvars allowScriptAccess allowFullScreen".split(" "),j=0;j<m.length;j++)n[m[j]]=[{type:i,name:m[j]},{type:o,name:m[j]}];m=["play","loop","menu"];for(j=0;j<m.length;j++)n[m[j]][0]["default"]=n[m[j]][1]["default"]=!0;CKEDITOR.dialog.add("flash",function(a){var g=!a.config.flashEmbedTagOnly,i=a.config.flashAddEmbedTag||a.config.flashEmbedTagOnly,k,f="<div>"+CKEDITOR.tools.htmlEncode(a.lang.common.preview)+ -'<br><div id="cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style="display:none"><div class="loading">&nbsp;</div></div><div id="cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class="FlashPreviewBox"></div></div>';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;k=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();if(e&&e.data("cke-real-element-type")&&"flash"==e.data("cke-real-element-type")){this.fakeImage= -e;var d=a.restoreRealElement(e),h=null,b=null,c={};if("cke:object"==d.getName()){h=d;d=h.getElementsByTag("embed","cke");0<d.count()&&(b=d.getItem(0));for(var d=h.getElementsByTag("param","cke"),g=0,i=d.count();g<i;g++){var f=d.getItem(g),j=f.getAttribute("name"),f=f.getAttribute("value");c[j]=f}}else"cke:embed"==d.getName()&&(b=d);this.objectNode=h;this.embedNode=b;this.setupContent(h,b,c,e)}},onOk:function(){var e=null,d=null,b=null;if(this.fakeImage)e=this.objectNode,d=this.embedNode;else if(g&& -(e=CKEDITOR.dom.element.createFromHtml("<cke:object></cke:object>",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"})),i)d=CKEDITOR.dom.element.createFromHtml("<cke:embed></cke:embed>",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),e&&d.appendTo(e);if(e)for(var b={},c=e.getElementsByTag("param", -"cke"),f=0,j=c.count();f<j;f++)b[c.getItem(f).getAttribute("name")]=c.getItem(f);c={};f={};this.commitContent(e,d,b,c,f);e=a.createFakeElement(e||d,"cke_flash","flash",!0);e.setAttributes(f);e.setStyles(c);this.fakeImage?(e.replace(this.fakeImage),a.getSelection().selectElement(e)):a.insertElement(e)},onHide:function(){this.preview&&this.preview.setHtml("")},contents:[{id:"info",label:a.lang.common.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"], -align:"right",children:[{id:"src",type:"text",label:a.lang.common.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(a.lang.flash.validateSrc),setup:b,commit:c,onLoad:function(){var a=this.getDialog(),b=function(b){k.setAttribute("src",b);a.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(k.getAttribute("src"))+'" type="application/x-shockwave-flash"></embed>')};a.preview=a.getContentElement("info","preview").getElement().getChild(3);this.on("change",function(a){a.data&& -a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:14px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",requiredContent:"embed[width]",style:"width:95px",label:a.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1", -a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",requiredContent:"embed[height]",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",requiredContent:"embed[hspace]",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),setup:b,commit:c},{type:"text",id:"vSpace",requiredContent:"embed[vspace]", -style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace),setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties", -label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",requiredContent:"embed[scale]",label:a.lang.flash.scale,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",requiredContent:"embed[allowscriptaccess]",label:a.lang.flash.access,"default":"",style:"width : 100%;", -items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode",type:"select",requiredContent:"embed[wmode]",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]], -setup:b,commit:c},{id:"quality",type:"select",requiredContent:"embed[quality]",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"],[a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"align",type:"select",requiredContent:"object[align]", -label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle,"middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],setup:b,commit:function(a,b,f,g,i){var j=this.getValue();c.apply(this,arguments); -j&&(i.align=j)}},{type:"html",html:"<div></div>"}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay,"default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0, -setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",requiredContent:"object[id]",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",requiredContent:"embed[bgcolor]",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class",requiredContent:"embed(cke-xyz)",label:a.lang.common.cssClass,setup:b,commit:c}]},{type:"text",id:"style",requiredContent:"embed{cke-xyz}", -validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/icons/flash.png b/platforms/browser/www/lib/ckeditor/plugins/flash/icons/flash.png deleted file mode 100644 index df7b1c60bc2918382a345902493059908219a157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iv%05?V~EA++R5G?$>k#L`-_Vw`(3f=`53rVmM1o1LX*^P37u(| zvP4>%RzF(y)-7>?2#a}Zn05r0p4ZY6<wxs8FW%I2l4M^dGRH24XDeTF&oTCt$up`a z-%&CD{%?0i$<59G>z>c)FIJi9qoh=^H;$>1VPQbW|J5~i{h70FZ0il;`YXoQe%Qp+ zR8gt-fb#=JgNWyK>~+j_0bZiEa{T7z=0HVDE@#e~Jv;wldBfKV8@bnS-lzz5KCs}M z>C<-lw0B=$pI>AD)F6NER;HaXe6|ui_YPjn_;T{dk(O&WZgk|{4$%_TIeqB$SG(w# z7@eG)oIAJg-n}b4F>vXX;NyiCoEHixU6SBnxu&kJZhE{>Lxk(bHeb8>%eQX*dh*$` zG`SmZU%je|cDYqnR(8$xiSE*nz}4@67)<myl4l*JCCb&x^s?kvPHyg7$qx%VVtDxZ z>!b9h-<Ob<?!Icf@H(^Hj~csGSGCr?4qAQHfTwxo%9Z;Y^j)6FZ7{O4>%0Hn-DQQh z8*_)-;^wDClDD^Q%$=RI@x;-iu0?ry?<Qu>GF>`FV`-MNvva@h=|h`z7F~StAlAV^ zLge<g!dUU!+YEV{XU?2y-#8x_s1Bu-m6bV}nJ;}CqSm?@NKDx+YT{cRs5d>nG<JH> zN*A@sKhw*~z6n0)IN^RE+#w?+Wr?$<>(U^{%Ui@5cBMwTC{3K+mbmBkg$oXP)00zE zpN2n37pz>mbm`OC6*hJEUw>Wn`q$l-i5^durbfPKODrfT_^@a3V&%Knu04y4i1=YW z(W54M`tQdF4jic6f4~2+#gx;jK9`@od81QXTl?2$^2r5Ly;K{%zJ2?4@#oK<Km7T# zM`$9yOUm}`+rJCPUf-zGowU)zY_{rDubt7+(e4MTR)#qF`T1Qi>3#R^-FH5I{{8RX zzpp?0{PSM9?xPv``NvCRfuXuAv#7Lm>b?8-_rG}k`nS<kFWa)%@B0~+ip*Lj*nRXK z`@Z?}=Iy(6`*!w;w9SS~MIILXC@Cq~vSrt<TdXx@RaL*bU+?PRnB=1t==E@yUf<&j zmoE#m*sYiM+Vk#F|1a~p@|v0)U~)6@b$0n79$VM@KBqzTJun}smbgZgq$HN4S|t~y z0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKyGkkTm4xr(~v8;?`jEllcfxgCxj? t;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RS@W)hPe~ diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png b/platforms/browser/www/lib/ckeditor/plugins/flash/icons/hidpi/flash.png deleted file mode 100644 index 7ad0e3889242436ed911aee6dd1c7a524bac3981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2532 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/images/placeholder.png b/platforms/browser/www/lib/ckeditor/plugins/flash/images/placeholder.png deleted file mode 100644 index 0bc6caa7a6abca57d3f1e1376fbd5067d5cd66d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmV+b0ssDqP)<h;3K|Lk000e1NJLTq0027x000{Z0{{R3^;ZYC0000pP)t-s|1&fH z0093YBL5K)|3pOph=~8Hs{h^H|95x)|NsB)?*F^H|CyQpRaO6KY5&a3|7K?7O*3i$ z004+dL_t(|UhS1h3d1lA05y`=to{FMYthhL3R!xL=OW8^BpD2rg}W?5y$g?VySw5@ zHQR&&rG*^8rux|zhTrb&VRu!<+Q~qwO1|Vy#7J~Ec>4p_Nnh8Sn%0^H2yKmXs_)2F ztJy_}S7x3Wy+9bua($h3aU$x8vL^9#zi)q&hjjO!f8h;)*e}{WeFK#M0000<MNUMn GLSTaQZFZ3W diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/af.js deleted file mode 100644 index 9ee64f1f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","af",{access:"Skrip toegang",accessAlways:"Altyd",accessNever:"Nooit",accessSameDomain:"Selfde domeinnaam",alignAbsBottom:"Absoluut-onder",alignAbsMiddle:"Absoluut-middel",alignBaseline:"Basislyn",alignTextTop:"Teks bo",bgcolor:"Agtergrondkleur",chkFull:"Laat volledige skerm toe",chkLoop:"Herhaal",chkMenu:"Flash spyskaart aan",chkPlay:"Speel outomaties",flashvars:"Veranderlikes vir Flash",hSpace:"HSpasie",properties:"Flash eienskappe",propertiesTab:"Eienskappe",quality:"Kwaliteit", -qualityAutoHigh:"Outomaties hoog",qualityAutoLow:"Outomaties laag",qualityBest:"Beste",qualityHigh:"Hoog",qualityLow:"Laag",qualityMedium:"Gemiddeld",scale:"Skaal",scaleAll:"Wys alles",scaleFit:"Presiese pas",scaleNoBorder:"Geen rand",title:"Flash eienskappe",vSpace:"VSpasie",validateHSpace:"HSpasie moet 'n heelgetal wees.",validateSrc:"Voeg die URL in",validateVSpace:"VSpasie moet 'n heelgetal wees.",windowMode:"Venster modus",windowModeOpaque:"Ondeursigtig",windowModeTransparent:"Deursigtig",windowModeWindow:"Venster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ar.js deleted file mode 100644 index 5b89e5b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ar",{access:"دخول النص البرمجي",accessAlways:"دائماً",accessNever:"مطلقاً",accessSameDomain:"نفس النطاق",alignAbsBottom:"أسفل النص",alignAbsMiddle:"وسط السطر",alignBaseline:"على السطر",alignTextTop:"أعلى النص",bgcolor:"لون الخلفية",chkFull:"ملء الشاشة",chkLoop:"تكرار",chkMenu:"تمكين قائمة فيلم الفلاش",chkPlay:"تشغيل تلقائي",flashvars:"متغيرات الفلاش",hSpace:"تباعد أفقي",properties:"خصائص الفلاش",propertiesTab:"الخصائص",quality:"جودة",qualityAutoHigh:"عالية تلقائياً", -qualityAutoLow:"منخفضة تلقائياً",qualityBest:"أفضل",qualityHigh:"عالية",qualityLow:"منخفضة",qualityMedium:"متوسطة",scale:"الحجم",scaleAll:"إظهار الكل",scaleFit:"ضبط تام",scaleNoBorder:"بلا حدود",title:"خصائص فيلم الفلاش",vSpace:"تباعد عمودي",validateHSpace:"HSpace يجب أن يكون عدداً.",validateSrc:"فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",validateVSpace:"VSpace يجب أن يكون عدداً.",windowMode:"وضع النافذة",windowModeOpaque:"غير شفاف",windowModeTransparent:"شفاف",windowModeWindow:"نافذة"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bg.js deleted file mode 100644 index a60e86c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bg",{access:"Достъп до скрипт",accessAlways:"Винаги",accessNever:"Никога",accessSameDomain:"Същият домейн",alignAbsBottom:"Най-долу",alignAbsMiddle:"Точно по средата",alignBaseline:"Базова линия",alignTextTop:"Върху текста",bgcolor:"Цвят на фона",chkFull:"Включи на цял екран",chkLoop:"Цикъл",chkMenu:"Разрешено Flash меню",chkPlay:"Авто. пускане",flashvars:"Променливи за Флаш",hSpace:"Хоризонтален отстъп",properties:"Настройки за флаш",propertiesTab:"Настройки",quality:"Качество", -qualityAutoHigh:"Авто. високо",qualityAutoLow:"Авто. ниско",qualityBest:"Отлично",qualityHigh:"Високо",qualityLow:"Ниско",qualityMedium:"Средно",scale:"Оразмеряване",scaleAll:"Показва всичко",scaleFit:"Според мястото",scaleNoBorder:"Без рамка",title:"Настройки за флаш",vSpace:"Вертикален отстъп",validateHSpace:"HSpace трябва да е число.",validateSrc:"Уеб адреса не трябва да е празен.",validateVSpace:"VSpace трябва да е число.",windowMode:"Режим на прозореца",windowModeOpaque:"Плътност",windowModeTransparent:"Прозрачност", -windowModeWindow:"Прозорец"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bn.js deleted file mode 100644 index 2eed56b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bn",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs নীচে",alignAbsMiddle:"Abs উপর",alignBaseline:"মূল রেখা",alignTextTop:"টেক্সট উপর",bgcolor:"বেকগ্রাউন্ড রং",chkFull:"Allow Fullscreen",chkLoop:"লূপ",chkMenu:"ফ্ল্যাশ মেনু এনাবল কর",chkPlay:"অটো প্লে",flashvars:"Variables for Flash",hSpace:"হরাইজন্টাল স্পেস",properties:"ফ্লাশ প্রোপার্টি",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"স্কেল",scaleAll:"সব দেখাও",scaleFit:"নিখুঁত ফিট",scaleNoBorder:"কোনো বর্ডার নেই",title:"ফ্ল্যাশ প্রোপার্টি",vSpace:"ভার্টিকেল স্পেস",validateHSpace:"HSpace must be a number.",validateSrc:"অনুগ্রহ করে URL লিংক টাইপ করুন",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bs.js deleted file mode 100644 index 4d5f4b4b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","bs",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs dole",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Molimo ukucajte URL link",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ca.js deleted file mode 100644 index c1e16027..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ca",{access:"Accés a scripts",accessAlways:"Sempre",accessNever:"Mai",accessSameDomain:"El mateix domini",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Superior",bgcolor:"Color de Fons",chkFull:"Permetre la pantalla completa",chkLoop:"Bucle",chkMenu:"Habilita menú Flash",chkPlay:"Reprodució automàtica",flashvars:"Variables de Flash",hSpace:"Espaiat horitzontal",properties:"Propietats del Flash",propertiesTab:"Propietats", -quality:"Qualitat",qualityAutoHigh:"Alta automàtica",qualityAutoLow:"Baixa automàtica",qualityBest:"La millor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Mitjana",scale:"Escala",scaleAll:"Mostra-ho tot",scaleFit:"Mida exacta",scaleNoBorder:"Sense vores",title:"Propietats del Flash",vSpace:"Espaiat vertical",validateHSpace:"L'espaiat horitzontal ha de ser un número.",validateSrc:"La URL no pot estar buida.",validateVSpace:"L'espaiat vertical ha de ser un número.",windowMode:"Mode de la finestra", -windowModeOpaque:"Opaca",windowModeTransparent:"Transparent",windowModeWindow:"Finestra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cs.js deleted file mode 100644 index 51087ed4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","cs",{access:"Přístup ke skriptu",accessAlways:"Vždy",accessNever:"Nikdy",accessSameDomain:"Ve stejné doméně",alignAbsBottom:"Zcela dolů",alignAbsMiddle:"Doprostřed",alignBaseline:"Na účaří",alignTextTop:"Na horní okraj textu",bgcolor:"Barva pozadí",chkFull:"Povolit celoobrazovkový režim",chkLoop:"Opakování",chkMenu:"Nabídka Flash",chkPlay:"Automatické spuštění",flashvars:"Proměnné pro Flash",hSpace:"Horizontální mezera",properties:"Vlastnosti Flashe",propertiesTab:"Vlastnosti", -quality:"Kvalita",qualityAutoHigh:"Vysoká - auto",qualityAutoLow:"Nízká - auto",qualityBest:"Nejlepší",qualityHigh:"Vysoká",qualityLow:"Nejnižší",qualityMedium:"Střední",scale:"Zobrazit",scaleAll:"Zobrazit vše",scaleFit:"Přizpůsobit",scaleNoBorder:"Bez okraje",title:"Vlastnosti Flashe",vSpace:"Vertikální mezera",validateHSpace:"Zadaná horizontální mezera musí být číslo.",validateSrc:"Zadejte prosím URL odkazu",validateVSpace:"Zadaná vertikální mezera musí být číslo.",windowMode:"Režim okna",windowModeOpaque:"Neprůhledné", -windowModeTransparent:"Průhledné",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cy.js deleted file mode 100644 index b6ae1ef3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","cy",{access:"Mynediad Sgript",accessAlways:"Pob amser",accessNever:"Byth",accessSameDomain:"R'un parth",alignAbsBottom:"Gwaelod Abs",alignAbsMiddle:"Canol Abs",alignBaseline:"Baslinell",alignTextTop:"Testun Top",bgcolor:"Lliw cefndir",chkFull:"Caniatàu Sgrin Llawn",chkLoop:"Lwpio",chkMenu:"Galluogi Dewislen Flash",chkPlay:"AwtoChwarae",flashvars:"Newidynnau ar gyfer Flash",hSpace:"BwlchLl",properties:"Priodweddau Flash",propertiesTab:"Priodweddau",quality:"Ansawdd", -qualityAutoHigh:"Uchel Awto",qualityAutoLow:"Isel Awto",qualityBest:"Gorau",qualityHigh:"Uchel",qualityLow:"Isel",qualityMedium:"Canolig",scale:"Graddfa",scaleAll:"Dangos pob",scaleFit:"Ffit Union",scaleNoBorder:"Dim Ymyl",title:"Priodweddau Flash",vSpace:"BwlchF",validateHSpace:"Rhaid i'r BwlchLl fod yn rhif.",validateSrc:"Ni all yr URL fod yn wag.",validateVSpace:"Rhaid i'r BwlchF fod yn rhif.",windowMode:"Modd ffenestr",windowModeOpaque:"Afloyw",windowModeTransparent:"Tryloyw",windowModeWindow:"Ffenestr"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/da.js deleted file mode 100644 index a55294d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","da",{access:"Scriptadgang",accessAlways:"Altid",accessNever:"Aldrig",accessSameDomain:"Samme domæne",alignAbsBottom:"Absolut nederst",alignAbsMiddle:"Absolut centreret",alignBaseline:"Grundlinje",alignTextTop:"Toppen af teksten",bgcolor:"Baggrundsfarve",chkFull:"Tillad fuldskærm",chkLoop:"Gentagelse",chkMenu:"Vis Flash-menu",chkPlay:"Automatisk afspilning",flashvars:"Variabler for Flash",hSpace:"Vandret margen",properties:"Egenskaber for Flash",propertiesTab:"Egenskaber", -quality:"Kvalitet",qualityAutoHigh:"Auto høj",qualityAutoLow:"Auto lav",qualityBest:"Bedste",qualityHigh:"Høj",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skalér",scaleAll:"Vis alt",scaleFit:"Tilpas størrelse",scaleNoBorder:"Ingen ramme",title:"Egenskaber for Flash",vSpace:"Lodret margen",validateHSpace:"Vandret margen skal være et tal.",validateSrc:"Indtast hyperlink URL!",validateVSpace:"Lodret margen skal være et tal.",windowMode:"Vinduestilstand",windowModeOpaque:"Gennemsigtig (opaque)",windowModeTransparent:"Transparent", -windowModeWindow:"Vindue"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/de.js deleted file mode 100644 index 44d7237a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","de",{access:"Skript Zugang",accessAlways:"Immer",accessNever:"Nie",accessSameDomain:"Gleiche Domain",alignAbsBottom:"Abs Unten",alignAbsMiddle:"Abs Mitte",alignBaseline:"Baseline",alignTextTop:"Text Oben",bgcolor:"Hintergrundfarbe",chkFull:"Vollbildmodus erlauben",chkLoop:"Endlosschleife",chkMenu:"Flash-Menü aktivieren",chkPlay:"Automatisch Abspielen",flashvars:"Variablen für Flash",hSpace:"Horizontal-Abstand",properties:"Flash-Eigenschaften",propertiesTab:"Eigenschaften", -quality:"Qualität",qualityAutoHigh:"Auto Hoch",qualityAutoLow:"Auto Niedrig",qualityBest:"Beste",qualityHigh:"Hoch",qualityLow:"Niedrig",qualityMedium:"Medium",scale:"Skalierung",scaleAll:"Alles anzeigen",scaleFit:"Passgenau",scaleNoBorder:"Ohne Rand",title:"Flash-Eigenschaften",vSpace:"Vertikal-Abstand",validateHSpace:"HSpace muss eine Zahl sein.",validateSrc:"Bitte geben Sie die Link-URL an",validateVSpace:"VSpace muss eine Zahl sein.",windowMode:"Fenster Modus",windowModeOpaque:"Deckend",windowModeTransparent:"Transparent", -windowModeWindow:"Fenster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/el.js deleted file mode 100644 index 4904d1b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","el",{access:"Πρόσβαση Script",accessAlways:"Πάντα",accessNever:"Ποτέ",accessSameDomain:"Ίδιο όνομα τομέα",alignAbsBottom:"Απόλυτα Κάτω",alignAbsMiddle:"Απόλυτα στη Μέση",alignBaseline:"Γραμμή Βάσης",alignTextTop:"Κορυφή Κειμένου",bgcolor:"Χρώμα Υποβάθρου",chkFull:"Να Επιτρέπεται η Προβολή σε Πλήρη Οθόνη",chkLoop:"Επανάληψη",chkMenu:"Ενεργοποίηση Flash Menu",chkPlay:"Αυτόματη Εκτέλεση",flashvars:"Μεταβλητές για Flash",hSpace:"Οριζόντιο Διάστημα",properties:"Ιδιότητες Flash", -propertiesTab:"Ιδιότητες",quality:"Ποιότητα",qualityAutoHigh:"Αυτόματη Υψηλή",qualityAutoLow:"Αυτόματη Χαμηλή",qualityBest:"Καλύτερη",qualityHigh:"Υψηλή",qualityLow:"Χαμηλή",qualityMedium:"Μεσαία",scale:"Μεγέθυνση",scaleAll:"Εμφάνιση όλων",scaleFit:"Ακριβές Μέγεθος",scaleNoBorder:"Χωρίς Περίγραμμα",title:"Ιδιότητες Flash",vSpace:"Κάθετο Διάστημα",validateHSpace:"Το HSpace πρέπει να είναι αριθμός.",validateSrc:"Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)",validateVSpace:"Το VSpace πρέπει να είναι αριθμός.", -windowMode:"Τρόπος λειτουργίας παραθύρου",windowModeOpaque:"Συμπαγές",windowModeTransparent:"Διάφανο",windowModeWindow:"Παράθυρο"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-au.js deleted file mode 100644 index e066c740..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-au",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-ca.js deleted file mode 100644 index 9c6fdc4a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-ca",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-gb.js deleted file mode 100644 index ccbc28af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en-gb",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background colour",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en.js deleted file mode 100644 index 13380310..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","en",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background color",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eo.js deleted file mode 100644 index 30218bc1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","eo",{access:"Atingi skriptojn",accessAlways:"Ĉiam",accessNever:"Neniam",accessSameDomain:"Sama domajno",alignAbsBottom:"Absoluta Malsupro",alignAbsMiddle:"Absoluta Centro",alignBaseline:"TekstoMalsupro",alignTextTop:"TekstoSupro",bgcolor:"Fona Koloro",chkFull:"Permesi tutekranon",chkLoop:"Iteracio",chkMenu:"Ebligi flaŝmenuon",chkPlay:"Aŭtomata legado",flashvars:"Variabloj por Flaŝo",hSpace:"Horizontala Spaco",properties:"Flaŝatributoj",propertiesTab:"Atributoj",quality:"Kvalito", -qualityAutoHigh:"Aŭtomate alta",qualityAutoLow:"Aŭtomate malalta",qualityBest:"Plej bona",qualityHigh:"Alta",qualityLow:"Malalta",qualityMedium:"Meza",scale:"Skalo",scaleAll:"Montri ĉion",scaleFit:"Origina grando",scaleNoBorder:"Neniu bordero",title:"Flaŝatributoj",vSpace:"Vertikala Spaco",validateHSpace:"Horizontala Spaco devas esti nombro.",validateSrc:"Bonvolu entajpi la retadreson (URL)",validateVSpace:"Vertikala Spaco devas esti nombro.",windowMode:"Fenestra reĝimo",windowModeOpaque:"Opaka", -windowModeTransparent:"Travidebla",windowModeWindow:"Fenestro"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/es.js deleted file mode 100644 index 296239e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","es",{access:"Acceso de scripts",accessAlways:"Siempre",accessNever:"Nunca",accessSameDomain:"Mismo dominio",alignAbsBottom:"Abs inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Línea de base",alignTextTop:"Tope del texto",bgcolor:"Color de Fondo",chkFull:"Permitir pantalla completa",chkLoop:"Repetir",chkMenu:"Activar Menú Flash",chkPlay:"Autoejecución",flashvars:"Opciones",hSpace:"Esp.Horiz",properties:"Propiedades de Flash",propertiesTab:"Propiedades",quality:"Calidad", -qualityAutoHigh:"Auto Alta",qualityAutoLow:"Auto Baja",qualityBest:"La mejor",qualityHigh:"Alta",qualityLow:"Baja",qualityMedium:"Media",scale:"Escala",scaleAll:"Mostrar todo",scaleFit:"Ajustado",scaleNoBorder:"Sin Borde",title:"Propiedades de Flash",vSpace:"Esp.Vert",validateHSpace:"Esp.Horiz debe ser un número.",validateSrc:"Por favor escriba el vínculo URL",validateVSpace:"Esp.Vert debe ser un número.",windowMode:"WindowMode",windowModeOpaque:"Opaco",windowModeTransparent:"Transparente",windowModeWindow:"Ventana"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/et.js deleted file mode 100644 index 9ac2b3cd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","et",{access:"Skriptide ligipääs",accessAlways:"Kõigile",accessNever:"Mitte ühelegi",accessSameDomain:"Samalt domeenilt",alignAbsBottom:"Abs alla",alignAbsMiddle:"Abs keskele",alignBaseline:"Baasjoonele",alignTextTop:"Tekstist üles",bgcolor:"Tausta värv",chkFull:"Täisekraan lubatud",chkLoop:"Korduv",chkMenu:"Flashi menüü lubatud",chkPlay:"Automaatne start ",flashvars:"Flashi muutujad",hSpace:"H. vaheruum",properties:"Flashi omadused",propertiesTab:"Omadused",quality:"Kvaliteet", -qualityAutoHigh:"Automaatne kõrge",qualityAutoLow:"Automaatne madal",qualityBest:"Parim",qualityHigh:"Kõrge",qualityLow:"Madal",qualityMedium:"Keskmine",scale:"Mastaap",scaleAll:"Näidatakse kõike",scaleFit:"Täpne sobivus",scaleNoBorder:"Äärist ei ole",title:"Flashi omadused",vSpace:"V. vaheruum",validateHSpace:"H. vaheruum peab olema number.",validateSrc:"Palun kirjuta lingi URL",validateVSpace:"V. vaheruum peab olema number.",windowMode:"Akna režiim",windowModeOpaque:"Läbipaistmatu",windowModeTransparent:"Läbipaistev", -windowModeWindow:"Aken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eu.js deleted file mode 100644 index 5cf12025..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","eu",{access:"Scriptak baimendu",accessAlways:"Beti",accessNever:"Inoiz ere ez",accessSameDomain:"Domeinu berdinekoak",alignAbsBottom:"Abs Behean",alignAbsMiddle:"Abs Erdian",alignBaseline:"Oinan",alignTextTop:"Testua Goian",bgcolor:"Atzeko kolorea",chkFull:"Onartu Pantaila osoa",chkLoop:"Begizta",chkMenu:"Flasharen Menua Gaitu",chkPlay:"Automatikoki Erreproduzitu",flashvars:"Flash Aldagaiak",hSpace:"HSpace",properties:"Flasharen Ezaugarriak",propertiesTab:"Ezaugarriak", -quality:"Kalitatea",qualityAutoHigh:"Auto Altua",qualityAutoLow:"Auto Baxua",qualityBest:"Hoberena",qualityHigh:"Altua",qualityLow:"Baxua",qualityMedium:"Ertaina",scale:"Eskalatu",scaleAll:"Dena erakutsi",scaleFit:"Doitu",scaleNoBorder:"Ertzik gabe",title:"Flasharen Ezaugarriak",vSpace:"VSpace",validateHSpace:"HSpace zenbaki bat izan behar da.",validateSrc:"Mesedez URL esteka idatzi",validateVSpace:"VSpace zenbaki bat izan behar da.",windowMode:"Leihoaren modua",windowModeOpaque:"Opakoa",windowModeTransparent:"Gardena", -windowModeWindow:"Leihoa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fa.js deleted file mode 100644 index ac4a6092..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fa",{access:"دسترسی به اسکریپت",accessAlways:"همیشه",accessNever:"هرگز",accessSameDomain:"همان دامنه",alignAbsBottom:"پائین مطلق",alignAbsMiddle:"وسط مطلق",alignBaseline:"خط پایه",alignTextTop:"متن بالا",bgcolor:"رنگ پس​زمینه",chkFull:"اجازه تمام صفحه",chkLoop:"اجرای پیاپی",chkMenu:"در دسترس بودن منوی فلش",chkPlay:"آغاز خودکار",flashvars:"مقادیر برای فلش",hSpace:"فاصلهٴ افقی",properties:"ویژگی​های فلش",propertiesTab:"ویژگی​ها",quality:"کیفیت",qualityAutoHigh:"بالا - خودکار", -qualityAutoLow:"پایین - خودکار",qualityBest:"بهترین",qualityHigh:"بالا",qualityLow:"پایین",qualityMedium:"متوسط",scale:"مقیاس",scaleAll:"نمایش همه",scaleFit:"جایگیری کامل",scaleNoBorder:"بدون کران",title:"ویژگی​های فلش",vSpace:"فاصلهٴ عمودی",validateHSpace:"مقدار فاصله گذاری افقی باید یک عدد باشد.",validateSrc:"لطفا URL پیوند را بنویسید",validateVSpace:"مقدار فاصله گذاری عمودی باید یک عدد باشد.",windowMode:"حالت پنجره",windowModeOpaque:"مات",windowModeTransparent:"شفاف",windowModeWindow:"پنجره"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fi.js deleted file mode 100644 index c40fe43d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fi",{access:"Skriptien pääsy",accessAlways:"Aina",accessNever:"Ei koskaan",accessSameDomain:"Sama verkkotunnus",alignAbsBottom:"Aivan alas",alignAbsMiddle:"Aivan keskelle",alignBaseline:"Alas (teksti)",alignTextTop:"Ylös (teksti)",bgcolor:"Taustaväri",chkFull:"Salli kokoruututila",chkLoop:"Toisto",chkMenu:"Näytä Flash-valikko",chkPlay:"Automaattinen käynnistys",flashvars:"Muuttujat Flash:lle",hSpace:"Vaakatila",properties:"Flash-ominaisuudet",propertiesTab:"Ominaisuudet", -quality:"Laatu",qualityAutoHigh:"Automaattinen korkea",qualityAutoLow:"Automaattinen matala",qualityBest:"Paras",qualityHigh:"Korkea",qualityLow:"Matala",qualityMedium:"Keskitaso",scale:"Levitä",scaleAll:"Näytä kaikki",scaleFit:"Tarkka koko",scaleNoBorder:"Ei rajaa",title:"Flash ominaisuudet",vSpace:"Pystytila",validateHSpace:"Vaakatilan täytyy olla numero.",validateSrc:"Linkille on kirjoitettava URL",validateVSpace:"Pystytilan täytyy olla numero.",windowMode:"Ikkuna tila",windowModeOpaque:"Läpinäkyvyys", -windowModeTransparent:"Läpinäkyvä",windowModeWindow:"Ikkuna"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fo.js deleted file mode 100644 index d02410a1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fo",{access:"Script atgongd",accessAlways:"Altíð",accessNever:"Ongantíð",accessSameDomain:"Sama navnaøki",alignAbsBottom:"Abs botnur",alignAbsMiddle:"Abs miðja",alignBaseline:"Basislinja",alignTextTop:"Tekst toppur",bgcolor:"Bakgrundslitur",chkFull:"Loyv fullan skerm",chkLoop:"Endurspæl",chkMenu:"Ger Flash skrá virkna",chkPlay:"Avspælingin byrjar sjálv",flashvars:"Variablar fyri Flash",hSpace:"Høgri breddi",properties:"Flash eginleikar",propertiesTab:"Eginleikar", -quality:"Góðska",qualityAutoHigh:"Auto høg",qualityAutoLow:"Auto Lág",qualityBest:"Besta",qualityHigh:"Høg",qualityLow:"Lág",qualityMedium:"Meðal",scale:"Skalering",scaleAll:"Vís alt",scaleFit:"Neyv skalering",scaleNoBorder:"Eingin bordi",title:"Flash eginleikar",vSpace:"Vinstri breddi",validateHSpace:"HSpace má vera eitt tal.",validateSrc:"Vinarliga skriva tilknýti (URL)",validateVSpace:"VSpace má vera eitt tal.",windowMode:"Slag av rúti",windowModeOpaque:"Ikki transparent",windowModeTransparent:"Transparent", -windowModeWindow:"Rútur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr-ca.js deleted file mode 100644 index 8218f119..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fr-ca",{access:"Accès au script",accessAlways:"Toujours",accessNever:"Jamais",accessSameDomain:"Même domaine",alignAbsBottom:"Bas absolu",alignAbsMiddle:"Milieu absolu",alignBaseline:"Bas du texte",alignTextTop:"Haut du texte",bgcolor:"Couleur de fond",chkFull:"Permettre le plein-écran",chkLoop:"Boucle",chkMenu:"Activer le menu Flash",chkPlay:"Lecture automatique",flashvars:"Variables pour Flash",hSpace:"Espacement horizontal",properties:"Propriétés de l'animation Flash", -propertiesTab:"Propriétés",quality:"Qualité",qualityAutoHigh:"Haute auto",qualityAutoLow:"Basse auto",qualityBest:"Meilleur",qualityHigh:"Haute",qualityLow:"Basse",qualityMedium:"Moyenne",scale:"Échelle",scaleAll:"Afficher tout",scaleFit:"Ajuster aux dimensions",scaleNoBorder:"Sans bordure",title:"Propriétés de l'animation Flash",vSpace:"Espacement vertical",validateHSpace:"L'espacement horizontal doit être un entier.",validateSrc:"Veuillez saisir l'URL",validateVSpace:"L'espacement vertical doit être un entier.", -windowMode:"Mode de fenêtre",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Fenêtre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr.js deleted file mode 100644 index fdc543c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","fr",{access:"Accès aux scripts",accessAlways:"Toujours",accessNever:"Jamais",accessSameDomain:"Même domaine",alignAbsBottom:"Bas absolu",alignAbsMiddle:"Milieu absolu",alignBaseline:"Bas du texte",alignTextTop:"Haut du texte",bgcolor:"Couleur d'arrière-plan",chkFull:"Permettre le plein écran",chkLoop:"Boucle",chkMenu:"Activer le menu Flash",chkPlay:"Jouer automatiquement",flashvars:"Variables du Flash",hSpace:"Espacement horizontal",properties:"Propriétés du Flash", -propertiesTab:"Propriétés",quality:"Qualité",qualityAutoHigh:"Haute Auto",qualityAutoLow:"Basse Auto",qualityBest:"Meilleure",qualityHigh:"Haute",qualityLow:"Basse",qualityMedium:"Moyenne",scale:"Echelle",scaleAll:"Afficher tout",scaleFit:"Taille d'origine",scaleNoBorder:"Pas de bordure",title:"Propriétés du Flash",vSpace:"Espacement vertical",validateHSpace:"L'espacement horizontal doit être un nombre.",validateSrc:"L'adresse ne doit pas être vide.",validateVSpace:"L'espacement vertical doit être un nombre.", -windowMode:"Mode fenêtre",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Fenêtre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gl.js deleted file mode 100644 index 38e85081..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","gl",{access:"Acceso de scripts",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Mesmo dominio",alignAbsBottom:"Abs Inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Liña de base",alignTextTop:"Tope do texto",bgcolor:"Cor do fondo",chkFull:"Permitir pantalla completa",chkLoop:"Repetir",chkMenu:"Activar o menú do «Flash»",chkPlay:"Reprodución auomática",flashvars:"Opcións do «Flash»",hSpace:"Esp. Horiz.",properties:"Propiedades do «Flash»",propertiesTab:"Propiedades", -quality:"Calidade",qualityAutoHigh:"Alta, automática",qualityAutoLow:"Baixa, automática",qualityBest:"A mellor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Media",scale:"Escalar",scaleAll:"Amosar todo",scaleFit:"Encaixar axustando",scaleNoBorder:"Sen bordo",title:"Propiedades do «Flash»",vSpace:"Esp.Vert.",validateHSpace:"O espazado horizontal debe ser un número.",validateSrc:"O URL non pode estar baleiro.",validateVSpace:"O espazado vertical debe ser un número.",windowMode:"Modo da xanela", -windowModeOpaque:"Opaca",windowModeTransparent:"Transparente",windowModeWindow:"Xanela"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gu.js deleted file mode 100644 index 601bb61c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","gu",{access:"સ્ક્રીપ્ટ એક્સેસ",accessAlways:"હમેશાં",accessNever:"નહી",accessSameDomain:"એજ ડોમેન",alignAbsBottom:"Abs નીચે",alignAbsMiddle:"Abs ઉપર",alignBaseline:"આધાર લીટી",alignTextTop:"ટેક્સ્ટ ઉપર",bgcolor:"બૅકગ્રાઉન્ડ રંગ,",chkFull:"ફૂલ સ્ક્રીન કરવું",chkLoop:"લૂપ",chkMenu:"ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો",chkPlay:"ઑટો/સ્વયં પ્લે",flashvars:"ફલેશ ના વિકલ્પો",hSpace:"સમસ્તરીય જગ્યા",properties:"ફ્લૅશના ગુણ",propertiesTab:"ગુણ",quality:"ગુણધર્મ",qualityAutoHigh:"ઓટો ઊંચું", -qualityAutoLow:"ઓટો નીચું",qualityBest:"શ્રેષ્ઠ",qualityHigh:"ઊંચું",qualityLow:"નીચું",qualityMedium:"મધ્યમ",scale:"સ્કેલ",scaleAll:"સ્કેલ ઓલ/બધુ બતાવો",scaleFit:"સ્કેલ એકદમ ફીટ",scaleNoBorder:"સ્કેલ બોર્ડર વગર",title:"ફ્લૅશ ગુણ",vSpace:"લંબરૂપ જગ્યા",validateHSpace:"HSpace આંકડો હોવો જોઈએ.",validateSrc:"લિંક URL ટાઇપ કરો",validateVSpace:"VSpace આંકડો હોવો જોઈએ.",windowMode:"વિન્ડો મોડ",windowModeOpaque:"અપારદર્શક",windowModeTransparent:"પારદર્શક",windowModeWindow:"વિન્ડો"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/he.js deleted file mode 100644 index 6870ea2a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","he",{access:"גישת סקריפט",accessAlways:"תמיד",accessNever:"אף פעם",accessSameDomain:"דומיין זהה",alignAbsBottom:"לתחתית האבסולוטית",alignAbsMiddle:"מרכוז אבסולוטי",alignBaseline:"לקו התחתית",alignTextTop:"לראש הטקסט",bgcolor:"צבע רקע",chkFull:"אפשר חלון מלא",chkLoop:"לולאה",chkMenu:"אפשר תפריט פלאש",chkPlay:"ניגון אוטומטי",flashvars:"משתנים לפלאש",hSpace:"מרווח אופקי",properties:"מאפייני פלאש",propertiesTab:"מאפיינים",quality:"איכות",qualityAutoHigh:"גבוהה אוטומטית", -qualityAutoLow:"נמוכה אוטומטית",qualityBest:"מעולה",qualityHigh:"גבוהה",qualityLow:"נמוכה",qualityMedium:"ממוצעת",scale:"גודל",scaleAll:"הצג הכל",scaleFit:"התאמה מושלמת",scaleNoBorder:"ללא גבולות",title:"מאפיני פלאש",vSpace:"מרווח אנכי",validateHSpace:"המרווח האופקי חייב להיות מספר.",validateSrc:"יש להקליד את כתובת סרטון הפלאש (URL)",validateVSpace:"המרווח האנכי חייב להיות מספר.",windowMode:"מצב חלון",windowModeOpaque:"אטום",windowModeTransparent:"שקוף",windowModeWindow:"חלון"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hi.js deleted file mode 100644 index 2f3b6e99..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hi",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs नीचे",alignAbsMiddle:"Abs ऊपर",alignBaseline:"मूल रेखा",alignTextTop:"टेक्स्ट ऊपर",bgcolor:"बैक्ग्राउन्ड रंग",chkFull:"Allow Fullscreen",chkLoop:"लूप",chkMenu:"फ़्लैश मॅन्यू का प्रयोग करें",chkPlay:"ऑटो प्ले",flashvars:"Variables for Flash",hSpace:"हॉरिज़ॉन्टल स्पेस",properties:"फ़्लैश प्रॉपर्टीज़",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"स्केल",scaleAll:"सभी दिखायें",scaleFit:"बिल्कुल फ़िट",scaleNoBorder:"कोई बॉर्डर नहीं",title:"फ़्लैश प्रॉपर्टीज़",vSpace:"वर्टिकल स्पेस",validateHSpace:"HSpace must be a number.",validateSrc:"लिंक URL टाइप करें",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hr.js deleted file mode 100644 index ae7c82f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hr",{access:"Script Access",accessAlways:"Uvijek",accessNever:"Nikad",accessSameDomain:"Ista domena",alignAbsBottom:"Abs dolje",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Omogući Fullscreen",chkLoop:"Ponavljaj",chkMenu:"Omogući Flash izbornik",chkPlay:"Auto Play",flashvars:"Varijable za Flash",hSpace:"HSpace",properties:"Flash svojstva",propertiesTab:"Svojstva",quality:"Kvaliteta",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Omjer",scaleAll:"Prikaži sve",scaleFit:"Točna veličina",scaleNoBorder:"Bez okvira",title:"Flash svojstva",vSpace:"VSpace",validateHSpace:"HSpace mora biti broj.",validateSrc:"Molimo upišite URL link",validateVSpace:"VSpace mora biti broj.",windowMode:"Vrsta prozora",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hu.js deleted file mode 100644 index 92620909..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","hu",{access:"Szkript hozzáférés",accessAlways:"Mindig",accessNever:"Soha",accessSameDomain:"Azonos domainről",alignAbsBottom:"Legaljára",alignAbsMiddle:"Közepére",alignBaseline:"Alapvonalhoz",alignTextTop:"Szöveg tetejére",bgcolor:"Háttérszín",chkFull:"Teljes képernyő engedélyezése",chkLoop:"Folyamatosan",chkMenu:"Flash menü engedélyezése",chkPlay:"Automata lejátszás",flashvars:"Flash változók",hSpace:"Vízsz. táv",properties:"Flash tulajdonságai",propertiesTab:"Tulajdonságok", -quality:"Minőség",qualityAutoHigh:"Automata jó",qualityAutoLow:"Automata gyenge",qualityBest:"Legjobb",qualityHigh:"Jó",qualityLow:"Gyenge",qualityMedium:"Közepes",scale:"Méretezés",scaleAll:"Mindent mutat",scaleFit:"Teljes kitöltés",scaleNoBorder:"Keret nélkül",title:"Flash tulajdonságai",vSpace:"Függ. táv",validateHSpace:"A vízszintes távolsűág mezőbe csak számokat írhat.",validateSrc:"Adja meg a hivatkozás webcímét",validateVSpace:"A függőleges távolsűág mezőbe csak számokat írhat.",windowMode:"Ablak mód", -windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/id.js deleted file mode 100644 index 9272c08d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","id",{access:"Script Access",accessAlways:"Selalu",accessNever:"Tidak Pernah",accessSameDomain:"Domain yang sama",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Dasar",alignTextTop:"Text Top",bgcolor:"Warna Latar Belakang",chkFull:"Izinkan Layar Penuh",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Mainkan Otomatis",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properti",quality:"Kualitas", -qualityAutoHigh:"Tinggi Otomatis",qualityAutoLow:"Rendah Otomatis",qualityBest:"Terbaik",qualityHigh:"Tinggi",qualityLow:"Rendah",qualityMedium:"Sedang",scale:"Scale",scaleAll:"Perlihatkan semua",scaleFit:"Exact Fit",scaleNoBorder:"Tanpa Batas",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace harus sebuah angka",validateSrc:"URL tidak boleh kosong",validateVSpace:"VSpace harus sebuah angka",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparan",windowModeWindow:"Jendela"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/is.js deleted file mode 100644 index 0b0d71b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","is",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs neðst",alignAbsMiddle:"Abs miðjuð",alignBaseline:"Grunnlína",alignTextTop:"Efri brún texta",bgcolor:"Bakgrunnslitur",chkFull:"Allow Fullscreen",chkLoop:"Endurtekning",chkMenu:"Sýna Flash-valmynd",chkPlay:"Sjálfvirk spilun",flashvars:"Variables for Flash",hSpace:"Vinstri bil",properties:"Eigindi Flash",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Skali",scaleAll:"Sýna allt",scaleFit:"Fella skala að stærð",scaleNoBorder:"Án ramma",title:"Eigindi Flash",vSpace:"Hægri bil",validateHSpace:"HSpace must be a number.",validateSrc:"Sláðu inn veffang stiklunnar!",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/it.js deleted file mode 100644 index 7c5e09f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","it",{access:"Accesso Script",accessAlways:"Sempre",accessNever:"Mai",accessSameDomain:"Solo stesso dominio",alignAbsBottom:"In basso assoluto",alignAbsMiddle:"Centrato assoluto",alignBaseline:"Linea base",alignTextTop:"In alto al testo",bgcolor:"Colore sfondo",chkFull:"Permetti la modalità tutto schermo",chkLoop:"Riavvio automatico",chkMenu:"Abilita Menu di Flash",chkPlay:"Avvio Automatico",flashvars:"Variabili per Flash",hSpace:"HSpace",properties:"Proprietà Oggetto Flash", -propertiesTab:"Proprietà",quality:"Qualità",qualityAutoHigh:"Alta Automatica",qualityAutoLow:"Bassa Automatica",qualityBest:"Massima",qualityHigh:"Alta",qualityLow:"Bassa",qualityMedium:"Intermedia",scale:"Ridimensiona",scaleAll:"Mostra Tutto",scaleFit:"Dimensione Esatta",scaleNoBorder:"Senza Bordo",title:"Proprietà Oggetto Flash",vSpace:"VSpace",validateHSpace:"L'HSpace dev'essere un numero.",validateSrc:"Devi inserire l'URL del collegamento",validateVSpace:"Il VSpace dev'essere un numero.",windowMode:"Modalità finestra", -windowModeOpaque:"Opaca",windowModeTransparent:"Trasparente",windowModeWindow:"Finestra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ja.js deleted file mode 100644 index 8a2238b4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ja",{access:"スプリクトアクセス(AllowScriptAccess)",accessAlways:"すべての場合に通信可能(Always)",accessNever:"すべての場合に通信不可能(Never)",accessSameDomain:"同一ドメインのみに通信可能(Same domain)",alignAbsBottom:"下部(絶対的)",alignAbsMiddle:"中央(絶対的)",alignBaseline:"ベースライン",alignTextTop:"テキスト上部",bgcolor:"背景色",chkFull:"フルスクリーン許可",chkLoop:"ループ再生",chkMenu:"Flashメニュー可能",chkPlay:"再生",flashvars:"フラッシュに渡す変数(FlashVars)",hSpace:"横間隔",properties:"Flash プロパティ",propertiesTab:"プロパティ",quality:"画質",qualityAutoHigh:"自動/高", -qualityAutoLow:"自動/低",qualityBest:"品質優先",qualityHigh:"高",qualityLow:"低",qualityMedium:"中",scale:"拡大縮小設定",scaleAll:"すべて表示",scaleFit:"上下左右にフィット",scaleNoBorder:"外が見えない様に拡大",title:"Flash プロパティ",vSpace:"縦間隔",validateHSpace:"横間隔は数値で入力してください。",validateSrc:"リンクURLを入力してください。",validateVSpace:"縦間隔は数値で入力してください。",windowMode:"ウィンドウモード",windowModeOpaque:"背景を不透明設定",windowModeTransparent:"背景を透過設定",windowModeWindow:"標準"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ka.js deleted file mode 100644 index fb482eca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ka",{access:"სკრიპტის წვდომა",accessAlways:"ყოველთვის",accessNever:"არასდროს",accessSameDomain:"იგივე დომენი",alignAbsBottom:"ჩარჩოს ქვემოთა ნაწილის სწორება ტექსტისთვის",alignAbsMiddle:"ჩარჩოს შუა ნაწილის სწორება ტექსტისთვის",alignBaseline:"საბაზისო ხაზის სწორება",alignTextTop:"ტექსტი ზემოდან",bgcolor:"ფონის ფერი",chkFull:"მთელი ეკრანის დაშვება",chkLoop:"ჩაციკლვა",chkMenu:"Flash-ის მენიუს დაშვება",chkPlay:"ავტო გაშვება",flashvars:"ცვლადები Flash-ისთვის",hSpace:"ჰორიზ. სივრცე", -properties:"Flash-ის პარამეტრები",propertiesTab:"პარამეტრები",quality:"ხარისხი",qualityAutoHigh:"მაღალი (ავტომატური)",qualityAutoLow:"ძალიან დაბალი",qualityBest:"საუკეთესო",qualityHigh:"მაღალი",qualityLow:"დაბალი",qualityMedium:"საშუალო",scale:"მასშტაბირება",scaleAll:"ყველაფრის ჩვენება",scaleFit:"ზუსტი ჩასმა",scaleNoBorder:"ჩარჩოს გარეშე",title:"Flash-ის პარამეტრები",vSpace:"ვერტ. სივრცე",validateHSpace:"ჰორიზონტალური სივრცე არ უნდა იყოს ცარიელი.",validateSrc:"URL არ უნდა იყოს ცარიელი.",validateVSpace:"ვერტიკალური სივრცე არ უნდა იყოს ცარიელი.", -windowMode:"ფანჯრის რეჟიმი",windowModeOpaque:"გაუმჭვირვალე",windowModeTransparent:"გამჭვირვალე",windowModeWindow:"ფანჯარა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/km.js deleted file mode 100644 index a4babe9e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","km",{access:"Script Access",accessAlways:"ជានិច្ច",accessNever:"កុំ",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"បន្ទាត់ជាមូលដ្ឋាន",alignTextTop:"លើអត្ថបទ",bgcolor:"ពណ៌ផ្ទៃខាងក្រោយ",chkFull:"អនុញ្ញាត​ឲ្យ​ពេញ​អេក្រង់",chkLoop:"ចំនួនដង",chkMenu:"បង្ហាញ មឺនុយរបស់ Flash",chkPlay:"លេងដោយស្វ័យប្រវត្ត",flashvars:"អថេរ Flash",hSpace:"គំលាតទទឹង",properties:"ការកំណត់ Flash",propertiesTab:"លក្ខណៈ​សម្បត្តិ",quality:"គុណភាព", -qualityAutoHigh:"ខ្ពស់​ស្វ័យ​ប្រវត្តិ",qualityAutoLow:"ទាប​ស្វ័យ​ប្រវត្តិ",qualityBest:"ល្អ​បំផុត",qualityHigh:"ខ្ពស់",qualityLow:"ទាប",qualityMedium:"មធ្យម",scale:"ទំហំ",scaleAll:"បង្ហាញទាំងអស់",scaleFit:"ត្រូវល្មម",scaleNoBorder:"មិនបង្ហាញស៊ុម",title:"ការកំណត់ Flash",vSpace:"គំលាតបណ្តោយ",validateHSpace:"HSpace must be a number.",validateSrc:"សូមសរសេរ អាស័យដ្ឋាន URL",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"ភាព​ថ្លា",windowModeWindow:"វីនដូ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ko.js deleted file mode 100644 index 514c74a8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ko",{access:"스크립트 허용",accessAlways:"항상 허용",accessNever:"허용 안함",accessSameDomain:"Same domain",alignAbsBottom:"줄아래(Abs Bottom)",alignAbsMiddle:"줄중간(Abs Middle)",alignBaseline:"기준선",alignTextTop:"글자상단",bgcolor:"배경 색상",chkFull:"전체화면 ",chkLoop:"반복",chkMenu:"플래쉬메뉴 가능",chkPlay:"자동재생",flashvars:"Variables for Flash",hSpace:"수평여백",properties:"플래쉬 속성",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High", -qualityLow:"Low",qualityMedium:"Medium",scale:"영역",scaleAll:"모두보기",scaleFit:"영역자동조절",scaleNoBorder:"경계선없음",title:"플래쉬 등록정보",vSpace:"수직여백",validateHSpace:"HSpace must be a number.",validateSrc:"링크 URL을 입력하십시요.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ku.js deleted file mode 100644 index e9618955..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ku",{access:"دەستپێگەیشتنی نووسراو",accessAlways:"هەمیشه",accessNever:"هەرگیز",accessSameDomain:"هەمان دۆمەین",alignAbsBottom:"له ژێرەوه",alignAbsMiddle:"لەناوەند",alignBaseline:"هێڵەبنەڕەت",alignTextTop:"دەق لەسەرەوه",bgcolor:"ڕەنگی پاشبنەما",chkFull:"ڕێپێدان بە پڕی شاشه",chkLoop:"گرێ",chkMenu:"چالاککردنی لیستەی فلاش",chkPlay:"پێکردنی یان لێدانی خۆکار",flashvars:"گۆڕاوەکان بۆ فلاش",hSpace:"بۆشایی ئاسۆیی",properties:"خاسیەتی فلاش",propertiesTab:"خاسیەت",quality:"جۆرایەتی", -qualityAutoHigh:"بەرزی خۆکار",qualityAutoLow:"نزمی خۆکار",qualityBest:"باشترین",qualityHigh:"بەرزی",qualityLow:"نزم",qualityMedium:"مامناوەند",scale:"پێوانه",scaleAll:"نیشاندانی هەموو",scaleFit:"بەوردی بگونجێت",scaleNoBorder:"بێ پەراوێز",title:"خاسیەتی فلاش",vSpace:"بۆشایی ئەستونی",validateHSpace:"بۆشایی ئاسۆیی دەبێت ژمارە بێت.",validateSrc:"ناونیشانی بەستەر نابێت خاڵی بێت",validateVSpace:"بۆشایی ئەستونی دەبێت ژماره بێت.",windowMode:"شێوازی پەنجەره",windowModeOpaque:"ناڕوون",windowModeTransparent:"ڕۆشن", -windowModeWindow:"پەنجەره"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lt.js deleted file mode 100644 index 8e013f24..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","lt",{access:"Skripto priėjimas",accessAlways:"Visada",accessNever:"Niekada",accessSameDomain:"Tas pats domenas",alignAbsBottom:"Absoliučią apačią",alignAbsMiddle:"Absoliutų vidurį",alignBaseline:"Apatinę liniją",alignTextTop:"Teksto viršūnę",bgcolor:"Fono spalva",chkFull:"Leisti per visą ekraną",chkLoop:"Ciklas",chkMenu:"Leisti Flash meniu",chkPlay:"Automatinis paleidimas",flashvars:"Flash kintamieji",hSpace:"Hor.Erdvė",properties:"Flash savybės",propertiesTab:"Nustatymai", -quality:"Kokybė",qualityAutoHigh:"Automatiškai Gera",qualityAutoLow:"Automatiškai Žema",qualityBest:"Geriausia",qualityHigh:"Gera",qualityLow:"Žema",qualityMedium:"Vidutinė",scale:"Mastelis",scaleAll:"Rodyti visą",scaleFit:"Tikslus atitikimas",scaleNoBorder:"Be rėmelio",title:"Flash savybės",vSpace:"Vert.Erdvė",validateHSpace:"HSpace turi būti skaičius.",validateSrc:"Prašome įvesti nuorodos URL",validateVSpace:"VSpace turi būti skaičius.",windowMode:"Lango režimas",windowModeOpaque:"Nepermatomas", -windowModeTransparent:"Permatomas",windowModeWindow:"Langas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lv.js deleted file mode 100644 index 30edb939..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","lv",{access:"Skripta pieeja",accessAlways:"Vienmēr",accessNever:"Nekad",accessSameDomain:"Tas pats domēns",alignAbsBottom:"Absolūti apakšā",alignAbsMiddle:"Absolūti vertikāli centrēts",alignBaseline:"Pamatrindā",alignTextTop:"Teksta augšā",bgcolor:"Fona krāsa",chkFull:"Pilnekrāns",chkLoop:"Nepārtraukti",chkMenu:"Atļaut Flash izvēlni",chkPlay:"Automātiska atskaņošana",flashvars:"Flash mainīgie",hSpace:"Horizontālā telpa",properties:"Flash īpašības",propertiesTab:"Uzstādījumi", -quality:"Kvalitāte",qualityAutoHigh:"Automātiski Augsta",qualityAutoLow:"Automātiski Zema",qualityBest:"Labākā",qualityHigh:"Augsta",qualityLow:"Zema",qualityMedium:"Vidēja",scale:"Mainīt izmēru",scaleAll:"Rādīt visu",scaleFit:"Precīzs izmērs",scaleNoBorder:"Bez rāmja",title:"Flash īpašības",vSpace:"Vertikālā telpa",validateHSpace:"Hspace jābūt skaitlim",validateSrc:"Lūdzu norādi hipersaiti",validateVSpace:"Vspace jābūt skaitlim",windowMode:"Loga režīms",windowModeOpaque:"Necaurspīdīgs",windowModeTransparent:"Caurspīdīgs", -windowModeWindow:"Logs"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mk.js deleted file mode 100644 index ae22f2a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","mk",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs Bottom",alignAbsMiddle:"Abs Middle",alignBaseline:"Baseline",alignTextTop:"Text Top",bgcolor:"Background color",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mn.js deleted file mode 100644 index 6759d77d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","mn",{access:"Script Access",accessAlways:"Онцлогууд",accessNever:"Хэзээ ч үгүй",accessSameDomain:"Байнга",alignAbsBottom:"Abs доод талд",alignAbsMiddle:"Abs Дунд талд",alignBaseline:"Baseline",alignTextTop:"Текст дээр",bgcolor:"Дэвсгэр өнгө",chkFull:"Allow Fullscreen",chkLoop:"Давтах",chkMenu:"Флаш цэс идвэхжүүлэх",chkPlay:"Автоматаар тоглох",flashvars:"Variables for Flash",hSpace:"Хөндлөн зай",properties:"Флаш шинж чанар",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Өргөгтгөх",scaleAll:"Бүгдийг харуулах",scaleFit:"Яг тааруулах",scaleNoBorder:"Хүрээгүй",title:"Флаш шинж чанар",vSpace:"Босоо зай",validateHSpace:"HSpace must be a number.",validateSrc:"Линк URL-ээ төрөлжүүлнэ үү",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ms.js deleted file mode 100644 index 9012a684..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ms",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Bawah Mutlak",alignAbsMiddle:"Pertengahan Mutlak",alignBaseline:"Garis Dasar",alignTextTop:"Atas Text",bgcolor:"Warna Latarbelakang",chkFull:"Allow Fullscreen",chkLoop:"Loop",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"Ruang Melintang",properties:"Flash Properties",propertiesTab:"Properties",quality:"Quality", -qualityAutoHigh:"Auto High",qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Scale",scaleAll:"Show all",scaleFit:"Exact Fit",scaleNoBorder:"No Border",title:"Flash Properties",vSpace:"Ruang Menegak",validateHSpace:"HSpace must be a number.",validateSrc:"Sila taip sambungan URL",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nb.js deleted file mode 100644 index c03f61f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","nb",{access:"Scripttilgang",accessAlways:"Alltid",accessNever:"Aldri",accessSameDomain:"Samme domene",alignAbsBottom:"Abs bunn",alignAbsMiddle:"Abs midten",alignBaseline:"Bunnlinje",alignTextTop:"Tekst topp",bgcolor:"Bakgrunnsfarge",chkFull:"Tillat fullskjerm",chkLoop:"Loop",chkMenu:"Slå på Flash-meny",chkPlay:"Autospill",flashvars:"Variabler for flash",hSpace:"HMarg",properties:"Egenskaper for Flash-objekt",propertiesTab:"Egenskaper",quality:"Kvalitet",qualityAutoHigh:"Auto høy", -qualityAutoLow:"Auto lav",qualityBest:"Best",qualityHigh:"Høy",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skaler",scaleAll:"Vis alt",scaleFit:"Skaler til å passe",scaleNoBorder:"Ingen ramme",title:"Flash-egenskaper",vSpace:"VMarg",validateHSpace:"HMarg må være et tall.",validateSrc:"Vennligst skriv inn lenkens url.",validateVSpace:"VMarg må være et tall.",windowMode:"Vindumodus",windowModeOpaque:"Opaque",windowModeTransparent:"Gjennomsiktig",windowModeWindow:"Vindu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nl.js deleted file mode 100644 index 193591ba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","nl",{access:"Script toegang",accessAlways:"Altijd",accessNever:"Nooit",accessSameDomain:"Zelfde domeinnaam",alignAbsBottom:"Absoluut-onder",alignAbsMiddle:"Absoluut-midden",alignBaseline:"Basislijn",alignTextTop:"Boven tekst",bgcolor:"Achtergrondkleur",chkFull:"Schermvullend toestaan",chkLoop:"Herhalen",chkMenu:"Flashmenu's inschakelen",chkPlay:"Automatisch afspelen",flashvars:"Variabelen voor Flash",hSpace:"HSpace",properties:"Eigenschappen Flash",propertiesTab:"Eigenschappen", -quality:"Kwaliteit",qualityAutoHigh:"Automatisch hoog",qualityAutoLow:"Automatisch laag",qualityBest:"Beste",qualityHigh:"Hoog",qualityLow:"Laag",qualityMedium:"Gemiddeld",scale:"Schaal",scaleAll:"Alles tonen",scaleFit:"Precies passend",scaleNoBorder:"Geen rand",title:"Eigenschappen Flash",vSpace:"VSpace",validateHSpace:"De HSpace moet een getal zijn.",validateSrc:"De URL mag niet leeg zijn.",validateVSpace:"De VSpace moet een getal zijn.",windowMode:"Venster modus",windowModeOpaque:"Ondoorzichtig", -windowModeTransparent:"Doorzichtig",windowModeWindow:"Venster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/no.js deleted file mode 100644 index 4f660ce4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","no",{access:"Scripttilgang",accessAlways:"Alltid",accessNever:"Aldri",accessSameDomain:"Samme domene",alignAbsBottom:"Abs bunn",alignAbsMiddle:"Abs midten",alignBaseline:"Bunnlinje",alignTextTop:"Tekst topp",bgcolor:"Bakgrunnsfarge",chkFull:"Tillat fullskjerm",chkLoop:"Loop",chkMenu:"Slå på Flash-meny",chkPlay:"Autospill",flashvars:"Variabler for flash",hSpace:"HMarg",properties:"Egenskaper for Flash-objekt",propertiesTab:"Egenskaper",quality:"Kvalitet",qualityAutoHigh:"Auto høy", -qualityAutoLow:"Auto lav",qualityBest:"Best",qualityHigh:"Høy",qualityLow:"Lav",qualityMedium:"Medium",scale:"Skaler",scaleAll:"Vis alt",scaleFit:"Skaler til å passe",scaleNoBorder:"Ingen ramme",title:"Flash-egenskaper",vSpace:"VMarg",validateHSpace:"HMarg må være et tall.",validateSrc:"Vennligst skriv inn lenkens url.",validateVSpace:"VMarg må være et tall.",windowMode:"Vindumodus",windowModeOpaque:"Opaque",windowModeTransparent:"Gjennomsiktig",windowModeWindow:"Vindu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pl.js deleted file mode 100644 index aa3da87e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pl",{access:"Dostęp skryptów",accessAlways:"Zawsze",accessNever:"Nigdy",accessSameDomain:"Ta sama domena",alignAbsBottom:"Do dołu",alignAbsMiddle:"Do środka w pionie",alignBaseline:"Do linii bazowej",alignTextTop:"Do góry tekstu",bgcolor:"Kolor tła",chkFull:"Zezwól na pełny ekran",chkLoop:"Pętla",chkMenu:"Włącz menu",chkPlay:"Autoodtwarzanie",flashvars:"Zmienne obiektu Flash",hSpace:"Odstęp poziomy",properties:"Właściwości obiektu Flash",propertiesTab:"Właściwości", -quality:"Jakość",qualityAutoHigh:"Auto wysoka",qualityAutoLow:"Auto niska",qualityBest:"Najlepsza",qualityHigh:"Wysoka",qualityLow:"Niska",qualityMedium:"Średnia",scale:"Skaluj",scaleAll:"Pokaż wszystko",scaleFit:"Dokładne dopasowanie",scaleNoBorder:"Bez obramowania",title:"Właściwości obiektu Flash",vSpace:"Odstęp pionowy",validateHSpace:"Odstęp poziomy musi być liczbą.",validateSrc:"Podaj adres URL",validateVSpace:"Odstęp pionowy musi być liczbą.",windowMode:"Tryb okna",windowModeOpaque:"Nieprzezroczyste", -windowModeTransparent:"Przezroczyste",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt-br.js deleted file mode 100644 index 4be3e143..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pt-br",{access:"Acesso ao script",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Acessar Mesmo Domínio",alignAbsBottom:"Inferior Absoluto",alignAbsMiddle:"Centralizado Absoluto",alignBaseline:"Baseline",alignTextTop:"Superior Absoluto",bgcolor:"Cor do Plano de Fundo",chkFull:"Permitir tela cheia",chkLoop:"Tocar Infinitamente",chkMenu:"Habilita Menu Flash",chkPlay:"Tocar Automaticamente",flashvars:"Variáveis do Flash",hSpace:"HSpace",properties:"Propriedades do Flash", -propertiesTab:"Propriedades",quality:"Qualidade",qualityAutoHigh:"Qualidade Alta Automática",qualityAutoLow:"Qualidade Baixa Automática",qualityBest:"Qualidade Melhor",qualityHigh:"Qualidade Alta",qualityLow:"Qualidade Baixa",qualityMedium:"Qualidade Média",scale:"Escala",scaleAll:"Mostrar tudo",scaleFit:"Escala Exata",scaleNoBorder:"Sem Borda",title:"Propriedades do Flash",vSpace:"VSpace",validateHSpace:"O HSpace tem que ser um número",validateSrc:"Por favor, digite o endereço do link",validateVSpace:"O VSpace tem que ser um número.", -windowMode:"Modo da janela",windowModeOpaque:"Opaca",windowModeTransparent:"Transparente",windowModeWindow:"Janela"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt.js deleted file mode 100644 index 374ffae8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","pt",{access:"Acesso ao Script",accessAlways:"Sempre",accessNever:"Nunca",accessSameDomain:"Mesmo dominio",alignAbsBottom:"Abs inferior",alignAbsMiddle:"Abs centro",alignBaseline:"Linha de base",alignTextTop:"Topo do texto",bgcolor:"Cor de Fundo",chkFull:"Permitir Ecrã inteiro",chkLoop:"Loop",chkMenu:"Permitir Menu do Flash",chkPlay:"Reproduzir automaticamente",flashvars:"Variaveis para o Flash",hSpace:"Esp.Horiz",properties:"Propriedades do Flash",propertiesTab:"Propriedades", -quality:"Qualidade",qualityAutoHigh:"Alta Automaticamente",qualityAutoLow:"Baixa Automaticamente",qualityBest:"Melhor",qualityHigh:"Alta",qualityLow:"Baixa",qualityMedium:"Média",scale:"Escala",scaleAll:"Mostrar tudo",scaleFit:"Tamanho Exacto",scaleNoBorder:"Sem Limites",title:"Propriedades do Flash",vSpace:"Esp.Vert",validateHSpace:"HSpace tem de ser um numero.",validateSrc:"Por favor introduza a hiperligação URL",validateVSpace:"VSpace tem de ser um numero.",windowMode:"Modo de janela",windowModeOpaque:"Opaco", -windowModeTransparent:"Transparente",windowModeWindow:"Janela"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ro.js deleted file mode 100644 index 8be6b18f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ro",{access:"Acces script",accessAlways:"Întotdeauna",accessNever:"Niciodată",accessSameDomain:"Același domeniu",alignAbsBottom:"Jos absolut (Abs Bottom)",alignAbsMiddle:"Mijloc absolut (Abs Middle)",alignBaseline:"Linia de jos (Baseline)",alignTextTop:"Text sus",bgcolor:"Coloarea fundalului",chkFull:"Permite pe tot ecranul",chkLoop:"Repetă (Loop)",chkMenu:"Activează meniul flash",chkPlay:"Rulează automat",flashvars:"Variabile pentru flash",hSpace:"HSpace",properties:"Proprietăţile flashului", -propertiesTab:"Proprietăți",quality:"Calitate",qualityAutoHigh:"Auto înaltă",qualityAutoLow:"Auto Joasă",qualityBest:"Cea mai bună",qualityHigh:"Înaltă",qualityLow:"Joasă",qualityMedium:"Medie",scale:"Scală",scaleAll:"Arată tot",scaleFit:"Potriveşte",scaleNoBorder:"Fără bordură (No border)",title:"Proprietăţile flashului",vSpace:"VSpace",validateHSpace:"Hspace trebuie să fie un număr.",validateSrc:"Vă rugăm să scrieţi URL-ul",validateVSpace:"VSpace trebuie să fie un număr",windowMode:"Mod fereastră", -windowModeOpaque:"Opacă",windowModeTransparent:"Transparentă",windowModeWindow:"Fereastră"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ru.js deleted file mode 100644 index d4f39fb5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ru",{access:"Доступ к скриптам",accessAlways:"Всегда",accessNever:"Никогда",accessSameDomain:"В том же домене",alignAbsBottom:"По низу текста",alignAbsMiddle:"По середине текста",alignBaseline:"По базовой линии",alignTextTop:"По верху текста",bgcolor:"Цвет фона",chkFull:"Разрешить полноэкранный режим",chkLoop:"Повторять",chkMenu:"Включить меню Flash",chkPlay:"Автоматическое воспроизведение",flashvars:"Переменные для Flash",hSpace:"Гориз. отступ",properties:"Свойства Flash", -propertiesTab:"Свойства",quality:"Качество",qualityAutoHigh:"Запуск на высоком",qualityAutoLow:"Запуск на низком",qualityBest:"Лучшее",qualityHigh:"Высокое",qualityLow:"Низкое",qualityMedium:"Среднее",scale:"Масштабировать",scaleAll:"Пропорционально",scaleFit:"Заполнять",scaleNoBorder:"Заходить за границы",title:"Свойства Flash",vSpace:"Вертик. отступ",validateHSpace:"Горизонтальный отступ задается числом.",validateSrc:"Вы должны ввести ссылку",validateVSpace:"Вертикальный отступ задается числом.", -windowMode:"Взаимодействие с окном",windowModeOpaque:"Непрозрачный",windowModeTransparent:"Прозрачный",windowModeWindow:"Обычный"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/si.js deleted file mode 100644 index 6184682d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","si",{access:"පිටපත් ප්‍රවේශය",accessAlways:"හැමවිටම",accessNever:"කිසිදා නොවේ",accessSameDomain:"එකම වසමේ",alignAbsBottom:"පතුල",alignAbsMiddle:"Abs ",alignBaseline:"පාද රේඛාව",alignTextTop:"වගන්තිය ඉහල",bgcolor:"පසුබිම් වර්ණය",chkFull:"පුර්ණ තිරය සදහා අවසර",chkLoop:"පුඩුව",chkMenu:"සක්‍රිය බබලන මෙනුව",chkPlay:"ස්‌වයංක්‍රිය ක්‍රියාත්මක වීම",flashvars:"වෙනස්වන දත්ත",hSpace:"HSpace",properties:"බබලන ගුණ",propertiesTab:"ගුණ",quality:"තත්වය",qualityAutoHigh:"ස්‌වයංක්‍රිය ", -qualityAutoLow:" ස්‌වයංක්‍රිය ",qualityBest:"වඩාත් ගැලපෙන",qualityHigh:"ඉහළ",qualityLow:"පහළ",qualityMedium:"මධ්‍ය",scale:"පරිමාණ",scaleAll:"සියල්ල ",scaleFit:"හරියටම ගැලපෙන",scaleNoBorder:"මාඉම් නොමැති",title:"බබලන ",vSpace:"VSpace",validateHSpace:"HSpace සංක්‍යාවක් විය යුතුය.",validateSrc:"URL හිස් නොවිය ",validateVSpace:"VSpace සංක්‍යාවක් විය යුතුය",windowMode:"ජනෙල ක්‍රමය",windowModeOpaque:"විනිවිද පෙනෙන",windowModeTransparent:"විනිවිද පෙනෙන",windowModeWindow:"ජනෙල"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sk.js deleted file mode 100644 index e959ca02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sk",{access:"Prístup skriptu",accessAlways:"Vždy",accessNever:"Nikdy",accessSameDomain:"Rovnaká doména",alignAbsBottom:"Úplne dole",alignAbsMiddle:"Do stredu",alignBaseline:"Na základnú čiaru",alignTextTop:"Na horný okraj textu",bgcolor:"Farba pozadia",chkFull:"Povoliť zobrazenie na celú obrazovku (fullscreen)",chkLoop:"Opakovanie",chkMenu:"Povoliť Flash Menu",chkPlay:"Automatické prehrávanie",flashvars:"Premenné pre Flash",hSpace:"H-medzera",properties:"Vlastnosti Flashu", -propertiesTab:"Vlastnosti",quality:"Kvalita",qualityAutoHigh:"Automaticky vysoká",qualityAutoLow:"Automaticky nízka",qualityBest:"Najlepšia",qualityHigh:"Vysoká",qualityLow:"Nízka",qualityMedium:"Stredná",scale:"Mierka",scaleAll:"Zobraziť všetko",scaleFit:"Roztiahnuť, aby sedelo presne",scaleNoBorder:"Bez okrajov",title:"Vlastnosti Flashu",vSpace:"V-medzera",validateHSpace:"H-medzera musí byť číslo.",validateSrc:"URL nesmie byť prázdne.",validateVSpace:"V-medzera musí byť číslo",windowMode:"Mód okna", -windowModeOpaque:"Nepriehľadný",windowModeTransparent:"Priehľadný",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sl.js deleted file mode 100644 index 3de6413e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sl",{access:"Dostop skript",accessAlways:"Vedno",accessNever:"Nikoli",accessSameDomain:"Samo ista domena",alignAbsBottom:"Popolnoma na dno",alignAbsMiddle:"Popolnoma v sredino",alignBaseline:"Na osnovno črto",alignTextTop:"Besedilo na vrh",bgcolor:"Barva ozadja",chkFull:"Dovoli celozaslonski način",chkLoop:"Ponavljanje",chkMenu:"Omogoči Flash Meni",chkPlay:"Samodejno predvajaj",flashvars:"Spremenljivke za Flash",hSpace:"Vodoravni razmik",properties:"Lastnosti Flash", -propertiesTab:"Lastnosti",quality:"Kakovost",qualityAutoHigh:"Samodejno visoka",qualityAutoLow:"Samodejno nizka",qualityBest:"Najvišja",qualityHigh:"Visoka",qualityLow:"Nizka",qualityMedium:"Srednja",scale:"Povečava",scaleAll:"Pokaži vse",scaleFit:"Natančno prileganje",scaleNoBorder:"Brez obrobe",title:"Lastnosti Flash",vSpace:"Navpični razmik",validateHSpace:"Vodoravni razmik mora biti število.",validateSrc:"Vnesite URL povezave",validateVSpace:"Navpični razmik mora biti število.",windowMode:"Vrsta okna", -windowModeOpaque:"Motno",windowModeTransparent:"Prosojno",windowModeWindow:"Okno"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sq.js deleted file mode 100644 index bded5272..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sq",{access:"Qasja në Skriptë",accessAlways:"Gjithnjë",accessNever:"Asnjëherë",accessSameDomain:"Fusha e Njëjtë",alignAbsBottom:"Abs në Fund",alignAbsMiddle:"Abs në Mes",alignBaseline:"Baza",alignTextTop:"Koka e Tekstit",bgcolor:"Ngjyra e Prapavijës",chkFull:"Lejo Ekran të Plotë",chkLoop:"Përsëritje",chkMenu:"Lejo Menynë për Flash",chkPlay:"Auto Play",flashvars:"Variablat për Flash",hSpace:"Hapësira Horizontale",properties:"Karakteristikat për Flash",propertiesTab:"Karakteristikat", -quality:"Kualiteti",qualityAutoHigh:"Automatikisht i Lartë",qualityAutoLow:"Automatikisht i Ulët",qualityBest:"Më i Miri",qualityHigh:"I Lartë",qualityLow:"Më i Ulti",qualityMedium:"I Mesëm",scale:"Shkalla",scaleAll:"Shfaq të Gjitha",scaleFit:"Përputhje të Plotë",scaleNoBorder:"Pa Kornizë",title:"Rekuizitat për Flash",vSpace:"Hapësira Vertikale",validateHSpace:"Hapësira Horizontale duhet të është numër.",validateSrc:"URL nuk duhet mbetur zbrazur.",validateVSpace:"Hapësira Vertikale duhet të është numër.", -windowMode:"Window mode",windowModeOpaque:"Errët",windowModeTransparent:"Tejdukshëm",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr-latn.js deleted file mode 100644 index 641140c3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sr-latn",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs dole",alignAbsMiddle:"Abs sredina",alignBaseline:"Bazno",alignTextTop:"Vrh teksta",bgcolor:"Boja pozadine",chkFull:"Allow Fullscreen",chkLoop:"Ponavljaj",chkMenu:"Uključi fleš meni",chkPlay:"Automatski start",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Osobine fleša",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Skaliraj",scaleAll:"Prikaži sve",scaleFit:"Popuni površinu",scaleNoBorder:"Bez ivice",title:"Osobine fleša",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Unesite URL linka",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr.js deleted file mode 100644 index c62614dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sr",{access:"Script Access",accessAlways:"Always",accessNever:"Never",accessSameDomain:"Same domain",alignAbsBottom:"Abs доле",alignAbsMiddle:"Abs средина",alignBaseline:"Базно",alignTextTop:"Врх текста",bgcolor:"Боја позадине",chkFull:"Allow Fullscreen",chkLoop:"Понављај",chkMenu:"Укључи флеш мени",chkPlay:"Аутоматски старт",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Особине Флеша",propertiesTab:"Properties",quality:"Quality",qualityAutoHigh:"Auto High", -qualityAutoLow:"Auto Low",qualityBest:"Best",qualityHigh:"High",qualityLow:"Low",qualityMedium:"Medium",scale:"Скалирај",scaleAll:"Прикажи све",scaleFit:"Попуни површину",scaleNoBorder:"Без ивице",title:"Особине флеша",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"Унесите УРЛ линка",validateVSpace:"VSpace must be a number.",windowMode:"Window mode",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent",windowModeWindow:"Window"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sv.js deleted file mode 100644 index 7c6edcc4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","sv",{access:"Script-tillgång",accessAlways:"Alltid",accessNever:"Aldrig",accessSameDomain:"Samma domän",alignAbsBottom:"Absolut nederkant",alignAbsMiddle:"Absolut centrering",alignBaseline:"Baslinje",alignTextTop:"Text överkant",bgcolor:"Bakgrundsfärg",chkFull:"Tillåt helskärm",chkLoop:"Upprepa/Loopa",chkMenu:"Aktivera Flashmeny",chkPlay:"Automatisk uppspelning",flashvars:"Variabler för Flash",hSpace:"Horis. marginal",properties:"Flashegenskaper",propertiesTab:"Egenskaper", -quality:"Kvalitet",qualityAutoHigh:"Auto Hög",qualityAutoLow:"Auto Låg",qualityBest:"Bäst",qualityHigh:"Hög",qualityLow:"Låg",qualityMedium:"Medium",scale:"Skala",scaleAll:"Visa allt",scaleFit:"Exakt passning",scaleNoBorder:"Ingen ram",title:"Flashegenskaper",vSpace:"Vert. marginal",validateHSpace:"HSpace måste vara ett nummer.",validateSrc:"Var god ange länkens URL",validateVSpace:"VSpace måste vara ett nummer.",windowMode:"Fönsterläge",windowModeOpaque:"Opaque",windowModeTransparent:"Transparent", -windowModeWindow:"Fönster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/th.js deleted file mode 100644 index 49932348..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","th",{access:"การเข้าถึงสคริปต์",accessAlways:"ตลอดไป",accessNever:"ไม่เลย",accessSameDomain:"โดเมนเดียวกัน",alignAbsBottom:"ชิดด้านล่างสุด",alignAbsMiddle:"กึ่งกลาง",alignBaseline:"ชิดบรรทัด",alignTextTop:"ใต้ตัวอักษร",bgcolor:"สีพื้นหลัง",chkFull:"อนุญาตให้แสดงเต็มหน้าจอได้",chkLoop:"เล่นวนรอบ Loop",chkMenu:"ให้ใช้งานเมนูของ Flash",chkPlay:"เล่นอัตโนมัติ Auto Play",flashvars:"ตัวแปรสำหรับ Flas",hSpace:"ระยะแนวนอน",properties:"คุณสมบัติของไฟล์ Flash",propertiesTab:"คุณสมบัติ", -quality:"คุณภาพ",qualityAutoHigh:"ปรับคุณภาพสูงอัตโนมัติ",qualityAutoLow:"ปรับคุณภาพต่ำอัตโนมัติ",qualityBest:"ดีที่สุด",qualityHigh:"สูง",qualityLow:"ต่ำ",qualityMedium:"ปานกลาง",scale:"อัตราส่วน Scale",scaleAll:"แสดงให้เห็นทั้งหมด Show all",scaleFit:"แสดงให้พอดีกับพื้นที่ Exact Fit",scaleNoBorder:"ไม่แสดงเส้นขอบ No Border",title:"คุณสมบัติของไฟล์ Flash",vSpace:"ระยะแนวตั้ง",validateHSpace:"HSpace ต้องเป็นจำนวนตัวเลข",validateSrc:"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)",validateVSpace:"VSpace ต้องเป็นจำนวนตัวเลข", -windowMode:"โหมดหน้าต่าง",windowModeOpaque:"ความทึบแสง",windowModeTransparent:"ความโปรงแสง",windowModeWindow:"หน้าต่าง"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tr.js deleted file mode 100644 index 8d76aa2b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","tr",{access:"Kod İzni",accessAlways:"Herzaman",accessNever:"Asla",accessSameDomain:"Aynı domain",alignAbsBottom:"Tam Altı",alignAbsMiddle:"Tam Ortası",alignBaseline:"Taban Çizgisi",alignTextTop:"Yazı Tepeye",bgcolor:"Arka Renk",chkFull:"Tam ekrana İzinver",chkLoop:"Döngü",chkMenu:"Flash Menüsünü Kullan",chkPlay:"Otomatik Oynat",flashvars:"Flash Değerleri",hSpace:"Yatay Boşluk",properties:"Flash Özellikleri",propertiesTab:"Özellikler",quality:"Kalite",qualityAutoHigh:"Otomatik Yükseklik", -qualityAutoLow:"Otomatik Düşüklük",qualityBest:"En iyi",qualityHigh:"Yüksek",qualityLow:"Düşük",qualityMedium:"Orta",scale:"Boyutlandır",scaleAll:"Hepsini Göster",scaleFit:"Tam Sığdır",scaleNoBorder:"Kenar Yok",title:"Flash Özellikleri",vSpace:"Dikey Boşluk",validateHSpace:"HSpace sayı olmalıdır.",validateSrc:"Lütfen köprü URL'sini yazın",validateVSpace:"VSpace sayı olmalıdır.",windowMode:"Pencere modu",windowModeOpaque:"Opak",windowModeTransparent:"Şeffaf",windowModeWindow:"Pencere"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tt.js deleted file mode 100644 index db937890..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","tt",{access:"Script Access",accessAlways:"Һəрвакыт",accessNever:"Беркайчан да",accessSameDomain:"Same domain",alignAbsBottom:"Иң аска",alignAbsMiddle:"Төгәл уртада",alignBaseline:"Таяныч сызыгы",alignTextTop:"Text Top",bgcolor:"Фон төсе",chkFull:"Allow Fullscreen",chkLoop:"Әйләнеш",chkMenu:"Enable Flash Menu",chkPlay:"Auto Play",flashvars:"Variables for Flash",hSpace:"HSpace",properties:"Флеш үзлекләре",propertiesTab:"Үзлекләр",quality:"Сыйфат",qualityAutoHigh:"Авто югары сыйфат", -qualityAutoLow:"Авто түбән сыйфат",qualityBest:"Иң югары сыйфат",qualityHigh:"Югары",qualityLow:"Түбəн",qualityMedium:"Уртача",scale:"Scale",scaleAll:"Барысын күрсәтү",scaleFit:"Exact Fit",scaleNoBorder:"Чиксез",title:"Флеш үзлекләре",vSpace:"VSpace",validateHSpace:"HSpace must be a number.",validateSrc:"URL must not be empty.",validateVSpace:"VSpace must be a number.",windowMode:"Тəрəзə тәртибе",windowModeOpaque:"Үтә күренмәле",windowModeTransparent:"Үтə күренмəле",windowModeWindow:"Тəрəзə"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ug.js deleted file mode 100644 index 36bdb424..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","ug",{access:"قوليازما زىيارەتكە يول قوي",accessAlways:"ھەمىشە",accessNever:"ھەرگىز",accessSameDomain:"ئوخشاش دائىرىدە",alignAbsBottom:"مۇتلەق ئاستى",alignAbsMiddle:"مۇتلەق ئوتتۇرا",alignBaseline:"ئاساسىي سىزىق",alignTextTop:"تېكىست ئۈستىدە",bgcolor:"تەگلىك رەڭگى",chkFull:"پۈتۈن ئېكراننى قوزغات",chkLoop:"دەۋرىي",chkMenu:"Flash تىزىملىكنى قوزغات",chkPlay:"ئۆزلۈكىدىن چال",flashvars:"Flash ئۆزگەرگۈچى",hSpace:"توغرىسىغا ئارىلىق",properties:"Flash خاسلىق",propertiesTab:"خاسلىق", -quality:"سۈپەت",qualityAutoHigh:"يۇقىرى (ئاپتوماتىك)",qualityAutoLow:"تۆۋەن (ئاپتوماتىك)",qualityBest:"ئەڭ ياخشى",qualityHigh:"يۇقىرى",qualityLow:"تۆۋەن",qualityMedium:"ئوتتۇرا (ئاپتوماتىك)",scale:"نىسبىتى",scaleAll:"ھەممىنى كۆرسەت",scaleFit:"قەتئىي ماسلىشىش",scaleNoBorder:"گىرۋەك يوق",title:"ماۋزۇ",vSpace:"بويىغا ئارىلىق",validateHSpace:"توغرىسىغا ئارىلىق چوقۇم سان بولىدۇ",validateSrc:"ئەسلى ھۆججەت ئادرېسىنى كىرگۈزۈڭ",validateVSpace:"بويىغا ئارىلىق چوقۇم سان بولىدۇ",windowMode:"كۆزنەك ھالىتى",windowModeOpaque:"خىرە", -windowModeTransparent:"سۈزۈك",windowModeWindow:"كۆزنەك گەۋدىسى"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/uk.js deleted file mode 100644 index cc458daf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","uk",{access:"Доступ до скрипта",accessAlways:"Завжди",accessNever:"Ніколи",accessSameDomain:"З того ж домена",alignAbsBottom:"По нижньому краю (abs)",alignAbsMiddle:"По середині (abs)",alignBaseline:"По базовій лінії",alignTextTop:"Текст по верхньому краю",bgcolor:"Колір фону",chkFull:"Дозволити повноекранний перегляд",chkLoop:"Циклічно",chkMenu:"Дозволити меню Flash",chkPlay:"Автопрогравання",flashvars:"Змінні Flash",hSpace:"Гориз. відступ",properties:"Властивості Flash", -propertiesTab:"Властивості",quality:"Якість",qualityAutoHigh:"Автом. відмінна",qualityAutoLow:"Автом. низька",qualityBest:"Відмінна",qualityHigh:"Висока",qualityLow:"Низька",qualityMedium:"Середня",scale:"Масштаб",scaleAll:"Показати все",scaleFit:"Поч. розмір",scaleNoBorder:"Без рамки",title:"Властивості Flash",vSpace:"Верт. відступ",validateHSpace:"Гориз. відступ повинен бути цілим числом.",validateSrc:"Будь ласка, вкажіть URL посилання",validateVSpace:"Верт. відступ повинен бути цілим числом.", -windowMode:"Віконний режим",windowModeOpaque:"Непрозорість",windowModeTransparent:"Прозорість",windowModeWindow:"Вікно"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/vi.js deleted file mode 100644 index 17a0c1b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("flash","vi",{access:"Truy cập mã",accessAlways:"Luôn luôn",accessNever:"Không bao giờ",accessSameDomain:"Cùng tên miền",alignAbsBottom:"Dưới tuyệt đối",alignAbsMiddle:"Giữa tuyệt đối",alignBaseline:"Đường cơ sở",alignTextTop:"Phía trên chữ",bgcolor:"Màu nền",chkFull:"Cho phép toàn màn hình",chkLoop:"Lặp",chkMenu:"Cho phép bật menu của Flash",chkPlay:"Tự động chạy",flashvars:"Các biến số dành cho Flash",hSpace:"Khoảng đệm ngang",properties:"Thuộc tính Flash",propertiesTab:"Thuộc tính", -quality:"Chất lượng",qualityAutoHigh:"Cao tự động",qualityAutoLow:"Thấp tự động",qualityBest:"Tốt nhất",qualityHigh:"Cao",qualityLow:"Thấp",qualityMedium:"Trung bình",scale:"Tỷ lệ",scaleAll:"Hiển thị tất cả",scaleFit:"Vừa vặn",scaleNoBorder:"Không đường viền",title:"Thuộc tính Flash",vSpace:"Khoảng đệm dọc",validateHSpace:"Khoảng đệm ngang phải là số nguyên.",validateSrc:"Hãy đưa vào đường dẫn liên kết",validateVSpace:"Khoảng đệm dọc phải là số nguyên.",windowMode:"Chế độ cửa sổ",windowModeOpaque:"Mờ đục", -windowModeTransparent:"Trong suốt",windowModeWindow:"Cửa sổ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh-cn.js deleted file mode 100644 index d7be33ba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","zh-cn",{access:"允许脚本访问",accessAlways:"总是",accessNever:"从不",accessSameDomain:"同域",alignAbsBottom:"绝对底部",alignAbsMiddle:"绝对居中",alignBaseline:"基线",alignTextTop:"文本上方",bgcolor:"背景颜色",chkFull:"启用全屏",chkLoop:"循环",chkMenu:"启用 Flash 菜单",chkPlay:"自动播放",flashvars:"Flash 变量",hSpace:"水平间距",properties:"Flash 属性",propertiesTab:"属性",quality:"质量",qualityAutoHigh:"高(自动)",qualityAutoLow:"低(自动)",qualityBest:"最好",qualityHigh:"高",qualityLow:"低",qualityMedium:"中(自动)",scale:"缩放",scaleAll:"全部显示", -scaleFit:"严格匹配",scaleNoBorder:"无边框",title:"标题",vSpace:"垂直间距",validateHSpace:"水平间距必须为数字格式",validateSrc:"请输入源文件地址",validateVSpace:"垂直间距必须为数字格式",windowMode:"窗体模式",windowModeOpaque:"不透明",windowModeTransparent:"透明",windowModeWindow:"窗体"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh.js deleted file mode 100644 index 83af6820..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("flash","zh",{access:"腳本存取",accessAlways:"永遠",accessNever:"從不",accessSameDomain:"相同網域",alignAbsBottom:"絕對下方",alignAbsMiddle:"絕對置中",alignBaseline:"基準線",alignTextTop:"上層文字",bgcolor:"背景顏色",chkFull:"允許全螢幕",chkLoop:"重複播放",chkMenu:"啟用 Flash 選單",chkPlay:"自動播放",flashvars:"Flash 變數",hSpace:"HSpace",properties:"Flash 屬性​​",propertiesTab:"屬性",quality:"品質",qualityAutoHigh:"自動高",qualityAutoLow:"自動低",qualityBest:"最佳",qualityHigh:"高",qualityLow:"低",qualityMedium:"中",scale:"縮放比例",scaleAll:"全部顯示", -scaleFit:"最適化",scaleNoBorder:"無框線",title:"Flash 屬性​​",vSpace:"VSpace",validateHSpace:"HSpace 必須為數字。",validateSrc:"URL 不可為空白。",validateVSpace:"VSpace 必須為數字。",windowMode:"視窗模式",windowModeOpaque:"不透明",windowModeTransparent:"透明",windowModeWindow:"視窗"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/flash/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/flash/plugin.js deleted file mode 100644 index a2a786ac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/flash/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(a){a=a.attributes;return"application/x-shockwave-flash"==a.type||f.test(a.src||"")}function e(a,b){return a.createFakeParserElement(b,"cke_flash","flash",!0)}var f=/\.swf(?:$|\?)/i;CKEDITOR.plugins.add("flash",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"flash", -hidpi:!0,onLoad:function(){CKEDITOR.addCss("img.cke_flash{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},init:function(a){var b="object[classid,codebase,height,hspace,vspace,width];param[name,value];embed[height,hspace,pluginspage,src,type,vspace,width]";CKEDITOR.dialog.isTabEnabled(a,"flash","properties")&&(b+=";object[align]; embed[allowscriptaccess,quality,scale,wmode]"); -CKEDITOR.dialog.isTabEnabled(a,"flash","advanced")&&(b+=";object[id]{*}; embed[bgcolor]{*}(*)");a.addCommand("flash",new CKEDITOR.dialogCommand("flash",{allowedContent:b,requiredContent:"embed"}));a.ui.addButton&&a.ui.addButton("Flash",{label:a.lang.common.flash,command:"flash",toolbar:"insert,20"});CKEDITOR.dialog.add("flash",this.path+"dialogs/flash.js");a.addMenuItems&&a.addMenuItems({flash:{label:a.lang.flash.properties,command:"flash",group:"flash"}});a.on("doubleclick",function(a){var b=a.data.element; -b.is("img")&&"flash"==b.data("cke-real-element-type")&&(a.data.dialog="flash")});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&!a.isReadOnly()&&"flash"==a.data("cke-real-element-type"))return{flash:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{"cke:object":function(b){var c=b.attributes;if((!c.classid||!(""+c.classid).toLowerCase())&&!d(b)){for(c=0;c<b.children.length;c++)if("cke:embed"==b.children[c].name){if(!d(b.children[c]))break; -return e(a,b)}return null}return e(a,b)},"cke:embed":function(b){return!d(b)?null:e(a,b)}}},5)}})})();CKEDITOR.tools.extend(CKEDITOR.config,{flashEmbedTagOnly:!1,flashAddEmbedTag:!0,flashConvertOnEdit:!1}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/af.js deleted file mode 100644 index 0473fe90..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","af",{fontSize:{label:"Grootte",voiceLabel:"Fontgrootte",panelTitle:"Fontgrootte"},label:"Font",panelTitle:"Fontnaam",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ar.js deleted file mode 100644 index cf81e27a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ar",{fontSize:{label:"حجم الخط",voiceLabel:"حجم الخط",panelTitle:"حجم الخط"},label:"خط",panelTitle:"حجم الخط",voiceLabel:"حجم الخط"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/bg.js deleted file mode 100644 index 62e05fe6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bg",{fontSize:{label:"Размер",voiceLabel:"Размер на шрифт",panelTitle:"Размер на шрифт"},label:"Шрифт",panelTitle:"Име на шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/bn.js deleted file mode 100644 index 98cd2702..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bn",{fontSize:{label:"সাইজ",voiceLabel:"Font Size",panelTitle:"সাইজ"},label:"ফন্ট",panelTitle:"ফন্ট",voiceLabel:"ফন্ট"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/bs.js deleted file mode 100644 index 171cdc18..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","bs",{fontSize:{label:"Velièina",voiceLabel:"Font Size",panelTitle:"Velièina"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ca.js deleted file mode 100644 index b710fa74..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ca",{fontSize:{label:"Mida",voiceLabel:"Mida de la lletra",panelTitle:"Mida de la lletra"},label:"Tipus de lletra",panelTitle:"Tipus de lletra",voiceLabel:"Tipus de lletra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/cs.js deleted file mode 100644 index 31c3d385..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","cs",{fontSize:{label:"Velikost",voiceLabel:"Velikost písma",panelTitle:"Velikost"},label:"Písmo",panelTitle:"Písmo",voiceLabel:"Písmo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/cy.js deleted file mode 100644 index d85cdff4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","cy",{fontSize:{label:"Maint",voiceLabel:"Maint y Ffont",panelTitle:"Maint y Ffont"},label:"Ffont",panelTitle:"Enw'r Ffont",voiceLabel:"Ffont"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/da.js deleted file mode 100644 index 24b02926..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","da",{fontSize:{label:"Skriftstørrelse",voiceLabel:"Skriftstørrelse",panelTitle:"Skriftstørrelse"},label:"Skrifttype",panelTitle:"Skrifttype",voiceLabel:"Skrifttype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/de.js deleted file mode 100644 index 71bd88de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","de",{fontSize:{label:"Größe",voiceLabel:"Schrifgröße",panelTitle:"Größe"},label:"Schriftart",panelTitle:"Schriftart",voiceLabel:"Schriftart"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/el.js deleted file mode 100644 index ecb9a8b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","el",{fontSize:{label:"Μέγεθος",voiceLabel:"Μέγεθος Γραμματοσειράς",panelTitle:"Μέγεθος Γραμματοσειράς"},label:"Γραμματοσειρά",panelTitle:"Όνομα Γραμματοσειράς",voiceLabel:"Γραμματοσειρά"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-au.js deleted file mode 100644 index 8b19ae02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-au",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-ca.js deleted file mode 100644 index a41715d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-ca",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-gb.js deleted file mode 100644 index aa7fd0d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en-gb",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/en.js deleted file mode 100644 index c332c074..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","en",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/eo.js deleted file mode 100644 index bf6f5123..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","eo",{fontSize:{label:"Grado",voiceLabel:"Tipara grado",panelTitle:"Tipara grado"},label:"Tiparo",panelTitle:"Tipara nomo",voiceLabel:"Tiparo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/es.js deleted file mode 100644 index c452c865..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","es",{fontSize:{label:"Tamaño",voiceLabel:"Tamaño de fuente",panelTitle:"Tamaño"},label:"Fuente",panelTitle:"Fuente",voiceLabel:"Fuente"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/et.js deleted file mode 100644 index 76f2b072..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","et",{fontSize:{label:"Suurus",voiceLabel:"Kirja suurus",panelTitle:"Suurus"},label:"Kiri",panelTitle:"Kiri",voiceLabel:"Kiri"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/eu.js deleted file mode 100644 index 941c541f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","eu",{fontSize:{label:"Tamaina",voiceLabel:"Tamaina",panelTitle:"Tamaina"},label:"Letra-tipoa",panelTitle:"Letra-tipoa",voiceLabel:"Letra-tipoa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/fa.js deleted file mode 100644 index b4b4cfca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fa",{fontSize:{label:"اندازه",voiceLabel:"اندازه قلم",panelTitle:"اندازه قلم"},label:"قلم",panelTitle:"نام قلم",voiceLabel:"قلم"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/fi.js deleted file mode 100644 index 59de601f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fi",{fontSize:{label:"Koko",voiceLabel:"Kirjaisimen koko",panelTitle:"Koko"},label:"Kirjaisinlaji",panelTitle:"Kirjaisinlaji",voiceLabel:"Kirjaisinlaji"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/fo.js deleted file mode 100644 index 2080e025..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fo",{fontSize:{label:"Skriftstødd",voiceLabel:"Skriftstødd",panelTitle:"Skriftstødd"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Skrift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr-ca.js deleted file mode 100644 index bcf3fc12..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fr-ca",{fontSize:{label:"Taille",voiceLabel:"Taille",panelTitle:"Taille"},label:"Police",panelTitle:"Police",voiceLabel:"Police"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr.js deleted file mode 100644 index 32486dc7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","fr",{fontSize:{label:"Taille",voiceLabel:"Taille de police",panelTitle:"Taille de police"},label:"Police",panelTitle:"Style de police",voiceLabel:"Police"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/gl.js deleted file mode 100644 index 74fdf0d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","gl",{fontSize:{label:"Tamaño",voiceLabel:"Tamaño da letra",panelTitle:"Tamaño da letra"},label:"Tipo de letra",panelTitle:"Nome do tipo de letra",voiceLabel:"Tipo de letra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/gu.js deleted file mode 100644 index 7c1a2670..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","gu",{fontSize:{label:"ફૉન્ટ સાઇઝ/કદ",voiceLabel:"ફોન્ટ સાઈઝ",panelTitle:"ફૉન્ટ સાઇઝ/કદ"},label:"ફૉન્ટ",panelTitle:"ફૉન્ટ",voiceLabel:"ફોન્ટ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/he.js deleted file mode 100644 index a712a5a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","he",{fontSize:{label:"גודל",voiceLabel:"גודל",panelTitle:"גודל"},label:"גופן",panelTitle:"גופן",voiceLabel:"גופן"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/hi.js deleted file mode 100644 index 2c66d5f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hi",{fontSize:{label:"साइज़",voiceLabel:"Font Size",panelTitle:"साइज़"},label:"फ़ॉन्ट",panelTitle:"फ़ॉन्ट",voiceLabel:"फ़ॉन्ट"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/hr.js deleted file mode 100644 index 4cb480d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hr",{fontSize:{label:"Veličina",voiceLabel:"Veličina slova",panelTitle:"Veličina"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/hu.js deleted file mode 100644 index e9edbdb1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","hu",{fontSize:{label:"Méret",voiceLabel:"Betűméret",panelTitle:"Méret"},label:"Betűtípus",panelTitle:"Betűtípus",voiceLabel:"Betűtípus"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/id.js deleted file mode 100644 index 22b03078..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","id",{fontSize:{label:"Ukuran",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/is.js deleted file mode 100644 index 9fbd17d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","is",{fontSize:{label:"Leturstærð ",voiceLabel:"Font Size",panelTitle:"Leturstærð "},label:"Leturgerð ",panelTitle:"Leturgerð ",voiceLabel:"Leturgerð "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/it.js deleted file mode 100644 index 146a8fb5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","it",{fontSize:{label:"Dimensione",voiceLabel:"Dimensione Carattere",panelTitle:"Dimensione"},label:"Carattere",panelTitle:"Carattere",voiceLabel:"Carattere"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ja.js deleted file mode 100644 index c7e579ed..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ja",{fontSize:{label:"サイズ",voiceLabel:"フォントサイズ",panelTitle:"フォントサイズ"},label:"フォント",panelTitle:"フォント",voiceLabel:"フォント"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ka.js deleted file mode 100644 index a45a4b5c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ka",{fontSize:{label:"ზომა",voiceLabel:"ტექსტის ზომა",panelTitle:"ტექსტის ზომა"},label:"ფონტი",panelTitle:"ფონტის სახელი",voiceLabel:"ფონტი"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/km.js deleted file mode 100644 index b817819b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","km",{fontSize:{label:"ទំហំ",voiceLabel:"ទំហំ​អក្សរ",panelTitle:"ទំហំ​អក្សរ"},label:"ពុម្ព​អក្សរ",panelTitle:"ឈ្មោះ​ពុម្ព​អក្សរ",voiceLabel:"ពុម្ព​អក្សរ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ko.js deleted file mode 100644 index b6b66210..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ko",{fontSize:{label:"글자 크기",voiceLabel:"Font Size",panelTitle:"글자 크기"},label:"폰트",panelTitle:"폰트",voiceLabel:"폰트"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ku.js deleted file mode 100644 index 9e2d5582..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ku",{fontSize:{label:"گەورەیی",voiceLabel:"گەورەیی فۆنت",panelTitle:"گەورەیی فۆنت"},label:"فۆنت",panelTitle:"ناوی فۆنت",voiceLabel:"فۆنت"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/lt.js deleted file mode 100644 index c613a9d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","lt",{fontSize:{label:"Šrifto dydis",voiceLabel:"Šrifto dydis",panelTitle:"Šrifto dydis"},label:"Šriftas",panelTitle:"Šriftas",voiceLabel:"Šriftas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/lv.js deleted file mode 100644 index 023b054f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","lv",{fontSize:{label:"Izmērs",voiceLabel:"Fonta izmeŗs",panelTitle:"Izmērs"},label:"Šrifts",panelTitle:"Šrifts",voiceLabel:"Fonts"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/mk.js deleted file mode 100644 index c47889e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","mk",{fontSize:{label:"Size",voiceLabel:"Font Size",panelTitle:"Font Size"},label:"Font",panelTitle:"Font Name",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/mn.js deleted file mode 100644 index 855b36e8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","mn",{fontSize:{label:"Хэмжээ",voiceLabel:"Үсгийн хэмжээ",panelTitle:"Үсгийн хэмжээ"},label:"Үсгийн хэлбэр",panelTitle:"Үгсийн хэлбэрийн нэр",voiceLabel:"Үгсийн хэлбэр"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ms.js deleted file mode 100644 index bf2cac96..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ms",{fontSize:{label:"Saiz",voiceLabel:"Font Size",panelTitle:"Saiz"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/nb.js deleted file mode 100644 index 3e85a266..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","nb",{fontSize:{label:"Størrelse",voiceLabel:"Skriftstørrelse",panelTitle:"Skriftstørrelse"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/nl.js deleted file mode 100644 index 301a9424..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","nl",{fontSize:{label:"Lettergrootte",voiceLabel:"Lettergrootte",panelTitle:"Lettergrootte"},label:"Lettertype",panelTitle:"Lettertype",voiceLabel:"Lettertype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/no.js deleted file mode 100644 index 2e45e27c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","no",{fontSize:{label:"Størrelse",voiceLabel:"Font Størrelse",panelTitle:"Størrelse"},label:"Skrift",panelTitle:"Skrift",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/pl.js deleted file mode 100644 index f15dd769..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pl",{fontSize:{label:"Rozmiar",voiceLabel:"Rozmiar czcionki",panelTitle:"Rozmiar"},label:"Czcionka",panelTitle:"Czcionka",voiceLabel:"Czcionka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt-br.js deleted file mode 100644 index bfe0147b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pt-br",{fontSize:{label:"Tamanho",voiceLabel:"Tamanho da fonte",panelTitle:"Tamanho"},label:"Fonte",panelTitle:"Fonte",voiceLabel:"Fonte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt.js deleted file mode 100644 index 06de8cd0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","pt",{fontSize:{label:"Tamanho",voiceLabel:"Tamanho da Letra",panelTitle:"Tamanho da Letra"},label:"Tipo de Letra",panelTitle:"Nome do Tipo de Letra",voiceLabel:"Tipo de Letra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ro.js deleted file mode 100644 index 2b101811..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ro",{fontSize:{label:"Mărime",voiceLabel:"Font Size",panelTitle:"Mărime"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ru.js deleted file mode 100644 index c5407217..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ru",{fontSize:{label:"Размер",voiceLabel:"Размер шрифта",panelTitle:"Размер шрифта"},label:"Шрифт",panelTitle:"Шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/si.js deleted file mode 100644 index c6246daf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","si",{fontSize:{label:"විශාලත්වය",voiceLabel:"අක්ෂර විශාලත්වය",panelTitle:"අක්ෂර විශාලත්වය"},label:"අක්ෂරය",panelTitle:"අක්ෂර නාමය",voiceLabel:"අක්ෂර"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sk.js deleted file mode 100644 index e09e8d4c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sk",{fontSize:{label:"Veľkosť",voiceLabel:"Veľkosť písma",panelTitle:"Veľkosť písma"},label:"Font",panelTitle:"Názov fontu",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sl.js deleted file mode 100644 index 061fea48..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sl",{fontSize:{label:"Velikost",voiceLabel:"Velikost",panelTitle:"Velikost"},label:"Pisava",panelTitle:"Pisava",voiceLabel:"Pisava"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sq.js deleted file mode 100644 index c7c95938..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sq",{fontSize:{label:"Madhësia",voiceLabel:"Madhësia e Shkronjës",panelTitle:"Madhësia e Shkronjës"},label:"Shkronja",panelTitle:"Emri i Shkronjës",voiceLabel:"Shkronja"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr-latn.js deleted file mode 100644 index 87604c2f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sr-latn",{fontSize:{label:"Veličina fonta",voiceLabel:"Font Size",panelTitle:"Veličina fonta"},label:"Font",panelTitle:"Font",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr.js deleted file mode 100644 index 5e2276d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sr",{fontSize:{label:"Величина фонта",voiceLabel:"Font Size",panelTitle:"Величина фонта"},label:"Фонт",panelTitle:"Фонт",voiceLabel:"Фонт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/sv.js deleted file mode 100644 index 6eb9e8e0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","sv",{fontSize:{label:"Storlek",voiceLabel:"Teckenstorlek",panelTitle:"Teckenstorlek"},label:"Typsnitt",panelTitle:"Typsnitt",voiceLabel:"Typsnitt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/th.js deleted file mode 100644 index 464cab1f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","th",{fontSize:{label:"ขนาด",voiceLabel:"Font Size",panelTitle:"ขนาด"},label:"แบบอักษร",panelTitle:"แบบอักษร",voiceLabel:"แบบอักษร"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/tr.js deleted file mode 100644 index 424f6652..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","tr",{fontSize:{label:"Boyut",voiceLabel:"Font Size",panelTitle:"Boyut"},label:"Yazı Türü",panelTitle:"Yazı Türü",voiceLabel:"Font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/tt.js deleted file mode 100644 index 623cbcb4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","tt",{fontSize:{label:"Зурлык",voiceLabel:"Шрифт зурлыклары",panelTitle:"Шрифт зурлыклары"},label:"Шрифт",panelTitle:"Шрифт исеме",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/ug.js deleted file mode 100644 index 235c677f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","ug",{fontSize:{label:"چوڭلۇقى",voiceLabel:"خەت چوڭلۇقى",panelTitle:"چوڭلۇقى"},label:"خەت نۇسخا",panelTitle:"خەت نۇسخا",voiceLabel:"خەت نۇسخا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/uk.js deleted file mode 100644 index 8a2387fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","uk",{fontSize:{label:"Розмір",voiceLabel:"Розмір шрифту",panelTitle:"Розмір"},label:"Шрифт",panelTitle:"Шрифт",voiceLabel:"Шрифт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/vi.js deleted file mode 100644 index e082b7b6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","vi",{fontSize:{label:"Cỡ chữ",voiceLabel:"Kích cỡ phông",panelTitle:"Cỡ chữ"},label:"Phông",panelTitle:"Phông",voiceLabel:"Phông"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh-cn.js deleted file mode 100644 index 370710a5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","zh-cn",{fontSize:{label:"大小",voiceLabel:"文字大小",panelTitle:"大小"},label:"字体",panelTitle:"字体",voiceLabel:"字体"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh.js deleted file mode 100644 index a2716813..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("font","zh",{fontSize:{label:"大小",voiceLabel:"字型大小",panelTitle:"字型大小"},label:"字型",panelTitle:"字型名稱",voiceLabel:"字型"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/font/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/font/plugin.js deleted file mode 100644 index dba4cae1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/font/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function e(b,a,e,h,j,n,l,o){for(var p=b.config,k=new CKEDITOR.style(l),c=j.split(";"),j=[],g={},d=0;d<c.length;d++){var f=c[d];if(f){var f=f.split("/"),m={},i=c[d]=f[0];m[e]=j[d]=f[1]||i;g[i]=new CKEDITOR.style(l,m);g[i]._.definition.name=i}else c.splice(d--,1)}b.ui.addRichCombo(a,{label:h.label,title:h.panelTitle,toolbar:"styles,"+o,allowedContent:k,requiredContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(p.contentsCss),multiSelect:!1,attributes:{"aria-label":h.panelTitle}}, -init:function(){this.startGroup(h.panelTitle);for(var b=0;b<c.length;b++){var a=c[b];this.add(a,g[a].buildPreview(),a)}},onClick:function(a){b.focus();b.fire("saveSnapshot");var c=g[a];b[this.getValue()==a?"removeStyle":"applyStyle"](c);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){for(var c=this.getValue(),a=a.data.path.elements,d=0,f;d<a.length;d++){f=a[d];for(var e in g)if(g[e].checkElementMatch(f,!0,b)){e!=c&&this.setValue(e);return}}this.setValue("",n)},this)}, -refresh:function(){b.activeFilter.check(k)||this.setState(CKEDITOR.TRISTATE_DISABLED)}})}CKEDITOR.plugins.add("font",{requires:"richcombo",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(b){var a=b.config;e(b,"Font","family",b.lang.font,a.font_names,a.font_defaultLabel,a.font_style,30);e(b,"FontSize","size", -b.lang.font.fontSize,a.fontSize_sizes,a.fontSize_defaultLabel,a.fontSize_style,40)}})})();CKEDITOR.config.font_names="Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif"; -CKEDITOR.config.font_defaultLabel="";CKEDITOR.config.font_style={element:"span",styles:{"font-family":"#(family)"},overrides:[{element:"font",attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes="8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";CKEDITOR.config.fontSize_defaultLabel="";CKEDITOR.config.fontSize_style={element:"span",styles:{"font-size":"#(size)"},overrides:[{element:"font",attributes:{size:null}}]}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/button.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/button.js deleted file mode 100644 index 56a4efdd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/button.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button= -a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name", -type:"text",label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst, -"reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js deleted file mode 100644 index 65f1be60..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/checkbox.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info", -label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value, -"default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();c&&!(CKEDITOR.env.ie&&"on"==c)?b.setAttribute("value",c):CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value")}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"", -accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':"")+"/>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/form.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/form.js deleted file mode 100644 index 86267185..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/form.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)|| -"")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name", -!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",type:"select", -label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js deleted file mode 100644 index f4699b7d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/hiddenfield.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&(c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type"))&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"); -this.getValueOf("info","value");var b=this.getParentEditor(),a=CKEDITOR.env.ie&&!(8<=CKEDITOR.document.$.documentMode)?b.document.createElement('<input name="'+CKEDITOR.tools.htmlEncode(a)+'">'):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title, -elements:[{id:"_cke_saved_name",type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()): -a.removeAttribute("value")}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/radio.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/radio.js deleted file mode 100644 index 1af693e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/radio.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("radio",function(d){return{title:d.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&("input"==a.getName()&&"radio"==a.getAttribute("type"))&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,b=this.radioButton,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","radio"));c&&a.insertElement(b);this.commitContent({element:b})}, -contents:[{id:"info",label:d.lang.forms.checkboxAndRadio.radioTitle,title:d.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:d.lang.forms.checkboxAndRadio.value,"default":"", -accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+ -(e?' checked="checked"':"")+"></input>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/select.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/select.js deleted file mode 100644 index a6c50e20..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/select.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0<b.length?b:"",d.$.value=e):(null!==c&&c<a.getChildCount()?a.getChild(0>c?0:c).insertBeforeMe(d):a.append(d),d.setText(0<b.length?b:""),d.setValue(e));else return!1;return d}function m(a){for(var a=f(a),b=g(a),e=a.getChildren().count()-1;0<= -e;e--)a.getChild(e).$.selected&&a.getChild(e).remove();i(a,b)}function n(a,b,e,d){a=f(a);if(0>b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function k(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function j(a,b,e){var a=f(a),d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),o=d.getValue();d.remove();d=h(a,c,o,!e?null:e,b);i(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1} -function i(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function l(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox= -a;this.setupContent(a.getName(),a);for(var a=l(a),b=0;b<a.count();b++)this.setupContent("option",a.getItem(b))}},onOk:function(){var a=this.getParentEditor(),b=this.selectBox,e=!b;e&&(b=a.document.createElement("select"));this.commitContent(b);if(e&&(a.insertElement(b),CKEDITOR.env.ie)){var d=a.getSelection(),c=d.createBookmarks();setTimeout(function(){d.selectBookmarks(c)},0)}},contents:[{id:"info",label:c.lang.forms.select.selectInfo,title:c.lang.forms.select.selectInfo,accessKey:"",elements:[{id:"txtName", -type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.common.name,"default":"",accessKey:"N",style:"width:350px",setup:function(a,b){"clear"==a?this.setValue(this["default"]||""):"select"==a&&this.setValue(b.data("cke-saved-name")||b.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.forms.select.value, -style:"width:350px","default":"",className:"cke_disabled",onLoad:function(){this.getInputElement().setAttribute("readOnly",!0)},setup:function(a,b){"clear"==a?this.setValue(""):"option"==a&&b.getAttribute("selected")&&this.setValue(b.$.value)}},{type:"hbox",widths:["175px","170px"],children:[{id:"txtSize",type:"text",labelLayout:"horizontal",label:c.lang.forms.select.size,"default":"",accessKey:"S",style:"width:175px",validate:function(){var a=CKEDITOR.dialog.validate.integer(c.lang.common.validateNumberFailed); -return""===this.getValue()||a.apply(this)},setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("size")||"");CKEDITOR.env.webkit&&this.getInputElement().setStyle("width","86px")},commit:function(a){this.getValue()?a.setAttribute("size",this.getValue()):a.removeAttribute("size")}},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+"</span>"}]},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+"</span>"},{type:"hbox",widths:["115px", -"115px","100px"],children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(this.getValue());a.setValue(b.getValue())}, -setup:function(a,b){"clear"==a?k(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=l(this),d=l(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();k(a);for(var f=0;f<e.count();f++){var g=h(a,e.getItem(f).getValue(),d.getItem(f).getValue(),b.getParentEditor().document);d.getItem(f).getValue()==c&&(g.setAttribute("selected","selected"),g.selected=!0)}}}]},{type:"vbox",children:[{id:"txtOptValue", -type:"text",label:c.lang.forms.select.opValue,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbValue",label:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(b.getValue());a.setValue(this.getValue())},setup:function(a,b){if("clear"==a)k(this);else if("option"== -a){var e=b.getValue();h(this,e,e,this.getDialog().getParentEditor().document);"selected"==b.getAttribute("selected")&&this.getDialog().getContentElement("info","txtValue").setValue(e)}}}]},{type:"vbox",padding:5,children:[{type:"button",id:"btnAdd",style:"",label:c.lang.forms.select.btnAdd,title:c.lang.forms.select.btnAdd,style:"width:100%;",onClick:function(){var a=this.getDialog();a.getParentEditor();var b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info", -"cmbName"),c=a.getContentElement("info","cmbValue");h(d,b.getValue(),b.getValue(),a.getParentEditor().document);h(c,e.getValue(),e.getValue(),a.getParentEditor().document);b.setValue("");e.setValue("")}},{type:"button",id:"btnModify",label:c.lang.forms.select.btnModify,title:c.lang.forms.select.btnModify,style:"width:100%;",onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info","cmbName"),a=a.getContentElement("info", -"cmbValue"),c=g(d);0<=c&&(n(d,c,b.getValue(),b.getValue()),n(a,c,e.getValue(),e.getValue()))}},{type:"button",id:"btnUp",style:"width:100%;",label:c.lang.forms.select.btnUp,title:c.lang.forms.select.btnUp,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,-1,a.getParentEditor().document);j(c,-1,a.getParentEditor().document)}},{type:"button",id:"btnDown",style:"width:100%;",label:c.lang.forms.select.btnDown,title:c.lang.forms.select.btnDown, -onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,1,a.getParentEditor().document);j(c,1,a.getParentEditor().document)}}]}]},{type:"hbox",widths:["40%","20%","40%"],children:[{type:"button",id:"btnSetValue",label:c.lang.forms.select.btnSetValue,title:c.lang.forms.select.btnSetValue,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue");a.getContentElement("info","txtValue").setValue(b.getValue())}}, -{type:"button",id:"btnDelete",label:c.lang.forms.select.btnDelete,title:c.lang.forms.select.btnDelete,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue"),d=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue");m(b);m(c);d.setValue("");a.setValue("")}},{id:"chkMulti",type:"checkbox",label:c.lang.forms.select.chkMulti,"default":"",accessKey:"M",value:"checked",setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("multiple")); -CKEDITOR.env.webkit&&this.getElement().getParent().setStyle("vertical-align","middle")},commit:function(a){this.getValue()?a.setAttribute("multiple",this.getValue()):a.removeAttribute("multiple")}}]}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textarea.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textarea.js deleted file mode 100644 index de8b3187..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textarea.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("textarea",function(b){return{title:b.lang.forms.textarea.title,minWidth:350,minHeight:220,onShow:function(){delete this.textarea;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"textarea"==a.getName()&&(this.textarea=a,this.setupContent(a))},onOk:function(){var a,b=this.textarea,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("textarea"));this.commitContent(b);c&&a.insertElement(b)},contents:[{id:"info",label:b.lang.forms.textarea.title,title:b.lang.forms.textarea.title, -elements:[{id:"_cke_saved_name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{type:"hbox",widths:["50%","50%"],children:[{id:"cols",type:"text",label:b.lang.forms.textarea.cols,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed), -setup:function(a){this.setValue(a.hasAttribute("cols")&&a.getAttribute("cols")||"")},commit:function(a){this.getValue()?a.setAttribute("cols",this.getValue()):a.removeAttribute("cols")}},{id:"rows",type:"text",label:b.lang.forms.textarea.rows,"default":"",accessKey:"R",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),setup:function(a){this.setValue(a.hasAttribute("rows")&&a.getAttribute("rows")||"")},commit:function(a){this.getValue()?a.setAttribute("rows", -this.getValue()):a.removeAttribute("rows")}}]},{id:"value",type:"textarea",label:b.lang.forms.textfield.value,"default":"",setup:function(a){this.setValue(a.$.defaultValue)},commit:function(a){a.$.value=a.$.defaultValue=this.getValue()}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textfield.js b/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textfield.js deleted file mode 100644 index 46b006e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/dialogs/textfield.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("textfield",function(b){function e(a){var a=a.element,c=this.getValue();c?a.setAttribute(this.id,c):a.removeAttribute(this.id)}function f(a){this.setValue(a.hasAttribute(this.id)&&a.getAttribute(this.id)||"")}var g={email:1,password:1,search:1,tel:1,text:1,url:1};return{title:b.lang.forms.textfield.title,minWidth:350,minHeight:150,onShow:function(){delete this.textField;var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"input"==a.getName()&&(g[a.getAttribute("type")]|| -!a.getAttribute("type")))this.textField=a,this.setupContent(a)},onOk:function(){var a=this.getParentEditor(),c=this.textField,b=!c;b&&(c=a.document.createElement("input"),c.setAttribute("type","text"));c={element:c};b&&a.insertElement(c.element);this.commitContent(c);b||a.getSelection().selectElement(c.element)},onLoad:function(){this.foreach(function(a){if(a.getValue&&(a.setup||(a.setup=f),!a.commit))a.commit=e})},contents:[{id:"info",label:b.lang.forms.textfield.title,title:b.lang.forms.textfield.title, -elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"_cke_saved_name",type:"text",label:b.lang.forms.textfield.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.textfield.value,"default":"",accessKey:"V",commit:function(a){if(CKEDITOR.env.ie&& -!this.getValue()){var c=a.element,d=new CKEDITOR.dom.element("input",b.document);c.copyAttributes(d,{value:1});d.replace(c);a.element=d}else e.call(this,a)}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"size",type:"text",label:b.lang.forms.textfield.charWidth,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)},{id:"maxLength",type:"text",label:b.lang.forms.textfield.maxChars,"default":"",accessKey:"M",style:"width:50px", -validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)}],onLoad:function(){CKEDITOR.env.ie7Compat&&this.getElement().setStyle("zoom","100%")}},{id:"type",type:"select",label:b.lang.forms.textfield.type,"default":"text",accessKey:"M",items:[[b.lang.forms.textfield.typeEmail,"email"],[b.lang.forms.textfield.typePass,"password"],[b.lang.forms.textfield.typeSearch,"search"],[b.lang.forms.textfield.typeTel,"tel"],[b.lang.forms.textfield.typeText,"text"],[b.lang.forms.textfield.typeUrl, -"url"]],setup:function(a){this.setValue(a.getAttribute("type"))},commit:function(a){var c=a.element;if(CKEDITOR.env.ie){var d=c.getAttribute("type"),e=this.getValue();d!=e&&(d=CKEDITOR.dom.element.createFromHtml('<input type="'+e+'"></input>',b.document),c.copyAttributes(d,{type:1}),d.replace(c),a.element=d)}else c.setAttribute("type",this.getValue())}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/button.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/button.png deleted file mode 100644 index 0bf68caaa5c7a0643aede89877140f0501b680d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqo${eV~EA+rIT&54hIOdq~GVC<TzDv>!lxD>#pp$YS|R}TWnno zSG?Ow9zC8-zL(fprgf*M>^IL;nyeLc;lQTbXSN%>IrX#Vn1rODBzwo>3K0j7J|+eS zwgoH)>ccn{Cci9+S{JsuQpB~{Tx;otZMtT&&+dLwdG2UZ<KH^|=Q1uVwFkR6)@<Do zqh}B(qS(@~YhB{n)}U4P7J?P;4QKi!%qhMQ_4s3jg9{sD-D!*G1$*NP_urrYMUhMK zKsEo#O>Y)w&bn^Vm)P@?b%F~AWA1Gw&q@BlB1g;i#)-Ede(0KQo3Z=5T;{Ag-RY-w zJ)$P%tCXwcGiQH)yfG+L)P+UGaQ0cYyI((6>?xJAoa?8+IqAba<(3c2BQ;sqe*GNh zV?LoJh^u!0#nwAt^Swg%%+w40X$}lY)e_f;l9a@fRIB8oR3OD*WMF8lYhbQxU=m_z zZe?H$MA`;MRt5&XOLhZ88A(HKeoAIqC2kEiKbemJHAsSN2+mI{DNig)WhgH%*UQYy dE>2D?NY%?PN}v7CMhd8i!PC{xWt~$(699*%$Jqb? diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/checkbox.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/checkbox.png deleted file mode 100644 index 2f4eb2f40f50d5ccbee3c1664163cca325b77fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i6R)R>V~EA+sgrHJV;n`=<{KN=HJo~PcZ0$Sr!JG*EUyy;Hwa2g zbML<LlQ;7b|AuJ|sbac1c@s}LZRw8S$lNxe_3G}cV&Q@<cXt|pUvlCetMdspb~y>Q zbJcC1_bKm<<7W_jSnn0eSfJEo$d;{pY{pEdRbG+Pj!0;p7E13)%*^am@!W9j-{mh7 z%KZHNHum<(Yqnl_T{@>&TB%4?$*NiV`5m{taqHu93(hgh%$YN%B=qa2{5kXHl{GRy zmpLXO!Nb-f5D^&}7<xDS>i7CbA3l6I{A5r3>Z>L#2NDb#bWTh3x~*BaZq=$=4+}iz zJ?Ck6mXnuXo%^1N^+RN6?&_<TK34clOPz7*kN}fIj@fJzsotv1H<yI1R#e*UIY}lz zKi@h*u;cN^id_NUtJz$h$bRs3vGZf;zkdDt-0%AquUgNz=es_uR<_#Ly5eHvoqPBG zm2z5eH*dFq)AK)nY9w!bz85TVv}A>#pi9cCRjbzb7|z|g)%1GS);N><_wV<w**YcF z^J+RnkKyGErupa2otx&&F;^n_`J+ckk~dCo$_Z&*>!ttUH0yiY&!0b=ADFgk(W>rM zv-~1@42^cO--wEc*zxh+<W$KoziU6)sQX@4ejs&0GG=*Z)s*L!f9vGMlb^hN**SOa z-1n<?vBsSH!Ij^jUtV5*L}FsxdiTg_BCd|R@8&V&r*r&yQMUW%ojbtLtYfO57G%A5 zhx%<`YEdn5jVMV;EJ?LWE=mPb3`Pcq#<~XPx&|g8hUQiV#z3TPU}R-r;JaiuFeM>r z$jwj5OsmAL!R9CP5ugT1kPX54X(i=}MX3xxx9Mf(WfvzW7NqLs7p2dBXCnnv#Ng@b K=d#Wzp$P!8LO@jj diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/form.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/form.png deleted file mode 100644 index 08416674e1f840fe697b8c1615083e44c24fbf2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW4fn{V~EA+xswf7KMD|N-EVkZYXXbt(L=|M<yEh)-B6!Xe@%Pq zru*ldS~$d%CUP_$u|Ape(0IqY=o@>OFW=cI^US(<{hKmtmzMP>&J;Kbd|08k>h-K$ z>k1Pkj3jtoe65<xGi#aRX`>JKnD;PW+jwv9_l}txBXn|h#ypyneRJN|Srb=nx|wq$ zZ~G&lGEbpPCV#v64_JP8w@Yj5n4rSxd-*}g)XOiA)a{QiKbc@Rzdk%v<MgDD6*+0& zzMaWP%U_><e(%eYtklRyE-deD)3zCHF6(;yaYxspj+;5hQj8Yff4_KDjGlPI)KyAK z<;}a+$vgh7k+9iu+2pUt+r$HJ%anPXe|zkcH9lV)GPPboz;$Bf`}e{%F;65F&lfi- zBv{B8N%a<-TevD_{q?e7rKake#oYqO4H=$){u#_-y!(Ias#O}Ni*%Ka{XgAM8XCGo z=d{6Qi5Fk^8h#X5Jm^})@Po1Db;gI)8eDbEY-ul6R=wkt1;&GFiEBhjN@7W>RdP`( zkYX@0Ff`URFxNFO2{AOcGB5@rZ381K0|VbByMb|pq#-vyB{QuOw+5S^%twG4BtbR= s=ckpFCl;kLl$V$5W#(lUCnpx9>g5-u&wghk1ysb~>FVdQ&MBb@09<_c_5c6? diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hiddenfield.png deleted file mode 100644 index fce4fcccc6e0c16b57c44e043465227962362468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ-G(7V~EA+sgurnOGir_tAC#IX`v$XO^!#WruKBFsCI<N1Z8xw z{8s-FzvIQJy$`O1zI1zWD^>j7E$+BX^SMDSXMSunk=QSK#=`g6%R?$#z8!jN`#~q} zT=l*0HuBG&JZZ7FY;|fZ+Sy}xjNOhwUiGKPuXu*CY15}~-M#zwviQ$DKUiM)8<?A` z-~X=q(lX$1)bE!+e*BR4{8+#6Vg}3Cs@UJZf6u>c;(EzAEiFyurRaz7`qTF(arrau zSrMYODr|MU%GLMp-!mTh^Jfp+AFZifDi^c1W|+-xNj&lL<;w}xYr`&IyLRpN>(|+N z`S}w?Zd>%Vdu_j+d&y+!_16>6rfG_G_w@EA_IzA@_0^%DKPxwE*|O#4%Mu2IV^8MB ztv8nuIBwW{t5C*k>7@r*S4(5V!or$PpFaIIZ@YJVGyCjiFZJuJ`<&G#D^5TCaF^aO ziTbLls)vsrDP@>Q&7SMmZsKcrETQLQbn=-Gg?96gOB_CN;za)K>({O|tzNwvXo&Tj z>0c6zXP#*|?^pk+@AWQ`Zr2{eea|bo&CSgZK6>;hZIVhvcA*S=_S?m5o|E24C&zjH z;<I5`Y;PE)JN@*U_3POWe0%Xi<7bUrw(iXwF;D(CZ{O}^-uE~9)v{&Fo>b10tJh}u z8XG)Gg+YJf6YpQYOiDLz-rV@S(#po>kB(;E_S+s^(QCyfJ*u<IatU;iXtVLX`{TzB zH8r(;9;>{yc&cWdRhz`c&dx3)EBlZqhU2ioxu-=wett}Q^rm{{<m9lFmzTdkf9@PZ z$07~0V*;*$Icr^o>>0!yck`e7cFqQv;8aUoBT7;dOH!?pi&B9UgOP!uv95u+u7OF2 zp}CcTF%W4R7+Dz@_%7KEOpHhxa`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7Qw_L3){a e*~Q6;1*v-ZMd`EO*+>BuF?hQAxvX<aXaWGQG;rep diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/button.png deleted file mode 100644 index bd92b16549028cbc49be2f93cd30dff4c8163c46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%X`iQyV@Sl|x6>W7rQIdk=Fhwt>G?W#rq??~#^XQKzbv^Tz-4Jx z{$1SUCwJ?->hfA{TXhx7*>TRCGiI?=WjIR2^Z3a+x8C%6ef81Jnd{plR!P5D8MU*0 zkHH4+(|gX>ystUk^Xu(R<Gi3>Zg=gO{>U>dy4lPWkY%|}=>*S#j9x>wwIW%b3`$M{ z2dn+Rcuu?MD|D;yk9ot1`r;qvv1j#_LZ(meIW3f8!E%FP9#cN!{SOt@Pq!)_R^+<z zqGb2}n!@+@UM<hg-f}zFiQ`1m>IGArvVB8C{}@Vryu3QR-tYM1^C9)QZ(n}<_AUI~ zr%5KhFTYl)cy9V|NqfO6txq=U=Zn{DwW<I3Xy;CAiJJLok<&`7)~sK@c#2Ys!Sc8# z$9f*mh+FR-Ic-X+r*_}(!2S34hx(}H+}Y_Id%c6>`Sa&<=FSZiIqJli#+|h_Dr4=- z@4vS%(&(Duw>%}Xt+?-E#*vE`1+PUtvWP1XdN2NXue-~JYeJUK3(hen^gMj>gk|kl zn=aR|2fvQZJ1WyE@XReL8|Wm@Nk5NwziZ<cy;|xUd;N3Gp6?a!rA_~`H*^R%Ib`>C zoH@S6rI)$lJ*Q%T2<z(At1I5Gd@YrHrifuqG1r90kCWM&85LWODbIMjTA-<G%eB_; zb*UCIN=hYGbB`$t2+k=!QW)bhd-m+dfB*h9@eQ`Lv2n?^%|EQxlm2Y-NtfDvTTR3E z&!1OkEWxucdwZ1DX`_wT7L^*aFMa*&@~TPA&CU5!J2Vphzjp6`_ixAc^1{Nxi5Y99 zGye%RMR{KSbef$%tghnEkMx9Yb8G946S;zwnx`*&3-0`zmd>8LD>m-^yLn9C8`}@a zeOTAXv}gCM---qQzrK67@?}}ze!I%1^1fZGIL?`t%gpxF+_Kf>t=X|CrBoib>@8c* z&W>*m2%jsqw?2G@>ffJsS9;@p?3n(r_NHH*z2&1>7%+LOmbgZgq$HN4S|t~y0x1R~ z14Cn712bJCgAhYQD+6;Y0~2inBP#=gZ;zIFqG-s?PsvQH#I2!yzuZ@#21$?&!TD(= p<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cwc)I$ztaD0e0syqfqj&%S diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/checkbox.png deleted file mode 100644 index 36be4aa0bc6ed0ebd846bb081fd8b92e5c6c9fad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 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 WZ*pgw?mQX*0000<MNUMnLSTZuurjj% diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/form.png deleted file mode 100644 index 4a02649cda796b8aa01fa0030e80c4bf60a4cc46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1348 zcmV-K1-tr*P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00do0L_t(o!_Ah<ZWKophQF$=zRY-R zGY(mB*+lXp5&{v)SVRi8oF&^Vc#?<(5(_p6@c_I6UgQao5J;>Lo80!<01JW<Gj?}% zSJ$a5x_dn1Tdcr{l+^0!o>HIx{OA8q9refK$9&19zi9OT0{}Dqpa7JbZ^RG?(*P8p zwI+%pv{I-!0|+4?A>h47L@-)w7P5@t;v)StMQaTqe0rp#mQsiad0FydJZ8^YOr$ku z1_KtiwtfH}0_$_70A2z=kDfk#VXF$Glp-|-lzRBnty}9C&YdHOG<1Eg#JjuJyng$3 z{g>_Shp92&E2SC{dhfZmxw*cwyiA$rggKQ!DaFe2GS@aY*S+@un9vI1%y5Xc7Nd2O z`R4|q6bh(CI5QmLy(fgwFwlXh>l%#F^JJi|Yw3c+R3C88u~(M3Jg2PdW6N;x?P*Qh zX)TT-oO6@+ru&E&VO$hEy?a+xdEQXg($)nQ5xfY}id1V&q%~UW6M;ww5CTcR&yV-+ zc`q{AKViU&V4b5X3dU8%pw}ZwQ_yX<7NNA3QJ#~RB>??2Ww^LVoMrp_4n-F#YuPOd z21;R_YXHpvP^#%nZKhe0kZo)nS%aM?Pt>?50O+MD*~W%HO$mx;&mw@juA4Hp9e2V& z=z4Sri1&PZ;|5<XE@GkxfZBWBkH?7j1VAfA97Wu?d6Nq(D<sAo8MvxzUhnJ>M-d{j zA7@4bEdyP>Mn%DkJ9ktT$LJQRgn)I9QBmMUP+BA2W3APBp5u%;q=Nvsy2e_I_kI#5 zv@s7c(A{n82t7p=-67IuA#FY1jYi#}awG$_2s^vGSm(&%c&7gQ48WxQb`3)-)nq>f zAcTNwDU=Y{D@%U8e_!>}bawB4R!9isRYh(si7`#0AsldlQuxkVO3}|U7P5?fmJzid z^&ya3%ZKrJ;({oONYWH@f(x_=DNs5$Q|gHbCq5SerHG=4rCyJPt*v8SP_~U^so$q} zS{FQj9z{w`80eVaFTvCw5&{>lUghl4(u@oK9*qbh6Bi^=#CIDTTs(W0<QNfFb<OMd z?;HAC{Ty9_&IKZj@|@ouJWyGZ%(|ee809%4g4P-lp)5;nivoXw3(B%Y+V1DQZxWrj zp#3p%0br|&J!=n*XA%M;(%hkO!N-q?2yx5Q!R5SfTu@bHNixGU-8?{xOlwVI3`rd0 zx{ft1s784cu~v1>UymN`_lsj(V4cG{$3Sbs)L8=UJkVY`HAeJs$i*}Te+q3W)u{i3 zK~~e88GWUo*CRECyexGW*Mtyo&at|>y8G_Un}ND?X-*Sqv#wsh&g$ywu5+#dAR&;K zC70LMZvX!3)q`)YTp5@+KJ__&+7*D>IlexBe)sa)+U>k7kq}USZf}!B5erGeLY9%l zG5Q!med-eLshnfaTK1}n%KN4SmG{)vGA_%b#q`-|Xhhjvvom1`cuqfJ{bvjZp3T2) znD_bz5cjN?h=RYh0000bbVXQnWMOn=I%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXV zFfuwYF!ti6NdN!<C3HntbYx+4WjbwdWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!T zFffO|9`yhK02y>eSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMn GLSTX*m|1)P diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png deleted file mode 100644 index cd5f31868bb4d5833d89256e1eed60690ace40c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2166 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/imagebutton.png deleted file mode 100644 index d27379639b7c9e91825eb2031bb5d4ea4fd75bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1398 zcmV-+1&R8JP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00fUoL_t(o!|j(%XjE4ihM#lKxp#iN zGnvePBJDy%>LUIH2ZVw+LN=A`(v4l&R>{ttt8T2AQ5V?=5+R~cAtDTPY$cl{h$9$; zO0;NKQKsa_k=TiePG&Oqo-WKxqfxtXQoHb5-3#x1-}n2@`Of*S_<d-Ij~T{CRsUq* z|6oAX9|V99|Bb5F=(+(R1cqUt3<JY3)&QFlZzSfrE;ZN1bzPLH6al}Va3FwXn*TU# zmUzR1Xc(z3FY|0+frXbZQPGwbS`!IGM~48u1-gM<KwDECzzpykkOKzw{rlSU<OxDg zP9ipKYR52s`eN(Wy{(}TKA#Vz6prIGMOjKotyZI4F7sEZ#2*hI-oSOg(UX(Y0K#kA zqX)XXopd@~$Y!&7t@XTae#~dH*?c;kE*$9YcD%Md3J4KuZT)WFzI_9wQfX>*WJIk) z>DMepdjI}fC=}W_Ha2!dCF1dJpVv!QPtV4C_wF$_H|JKXRb1C?+D5E*nq^r;B9X+` zJw4pKd6Psu-mQ|!<gQYwL@Je{R;yu}CQ{0EN!>6EYPA}vRElfYu8~Y8cd0-i(6+F! zKs+92c6JuSFkZFH2V`6SUcb@KLI_;fC7Dd};>8OBfk2xwO_S9n|B$jvDX}aI%d&7? zmrA9=^73+nv(E3jF4bxk(=;(0$H8%&hU+)87eXMVL@D*&>PRW^dc8!WQBIyb$@S~k z2?m2GrPgo@A*kyb^~~Q!UMFp7X(1E}v0=l8hLLxP_x1HLJUmP$lfiKu{C@vy`1*#d zSHf6aTr6s>DHe;ErrB7-I%zBx<Mip%96Wds(=-W(!+5=3q?8Su&*vi+i_zEDM>d;f z&z?PO+qR9~-d;kX5SC>%5;RSdVzG$Un#IM%qT%s)3R-LO`8>95V_6nTsRn5#lOdPO z@%;I7IyyQS85tpwNDv4F@OV7<{r*PTuU@@MXJ;pdVPM-fg+hT`E=MpJ#57GT%fhy8 z^7%YkYdjuLL7X{rCU@b&g|Fu3=D2g`PGf@vgF#N5IKh=GSLp2QL`q4yTxNWHoKz~s z`Sa)T`~6s!#qs0E85$aD;ObGSRJeQhF1K&rMoNjXa^vpay_-lR!l6Tleid5lpWE8n zKJ$1y+n+vtN`HSpU0q$AJ$sgm7ca7N=T4Mrj19Q1%j3t7dGzQJmo8mmVq${9!9jNH z*zp>!j-8*MCmaqlFfhRI@GwV@9wiowQK?iWW@cvo6k6-=fgj`X__UOA`|Rv20Fg+9 zEnBv%*+BJnDlaYZ@WBIY+h+6T&1+|gRVJpUrYIB&03?%19LJd`7K`n`4?=4#fKg!Y zsZ*!&=gyt;%sqSdxn)`L6}7jWHmvR!{Vv=pe6?CFM#AAjZ*Onq*s)_@0yls(w=x;D z*6mvBv30ls-xXt8>-Jlj42CZnWxT(C8b||&fnRtvJTyCIR=5uX>GA&lX<syoxPSRF zPPIyHX$iMhYu+6Ap5-u<LV3MN%R&h$kzOx`Wv##XDidPmU{bH%1!A49;D3vc{$ujV zz~2EDn&DxPf8+oF03~!qSaf7zbY(hYa%Ew3WdJfTF*7YNHZ3wRR539+FgH3dG%GMN zIxsNy;-*Oe001R)MObuXVRU6WZEs|0W_bWIFflVNFg7hRFjO%yIxsgnFf=PLGCD9Y zhrb^60000PbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$Q07*qoM6N<$ Ef=$DQ_y7O^ diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/radio.png deleted file mode 100644 index 2f0c72d6344de0ce787f192ce37988ea2174caf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2435 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select-rtl.png deleted file mode 100644 index 42452e19de38a60c485e5c5d696f7448bcd2e383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmV;c1yuTpP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00hKIL_t(o!_AjZY!qb}#(&>8-^}jp z?oev#76>)bctJTxBUEB29>BX0u15X^r3Vg#GoB$Pv<J8$k(iixlY<vXOu*J`8w-K7 zp+GlMf^?u+*0!^M=X*WutdMwU3l@BmH<`=K^Ssad=le$8`r!v&C-iG&|33&Y?FR** z)T?0?LD~Wwt#KR&trSWr5P7L@FA1d(5v&Mt9Ai3zfHm1HY1c&ot4#k7N43%5uf;`> z$w`3qz(rsNh*vpg60Y?!If(++d)e&o+xz<RK`w_Cp;50tbK+%7lJu1VT-ODqSeTz@ zq)-SOQPfLr&6<k`4jhQL_4WNab?45{vdWkZ!&|#|@4o)U{{3+-2rkm!-#@cw@80;2 z`}eP{HhCM5W@m4Gwr5YgqrZQ~<h#2!%+1a5R!@%reZQSPUC^o2e?OAeV(WE2I&orK zcRv43>FHCt^Z5<NHHKQV32^+zxpM`-s|%gfYAFdT=?<|L+h}n8+_}OBUww7F-fWJz zu8XlEXwT#6rAr0BvlAQ#$Czc2TWg7vSXzOgjloH$DP6i$(4L1CX$cUm@iH0KI1WK3 zgP%^LmneZ1A*xm>&Cjz~tu8GhS#-v6FzGa+bxVLGV`hwDt?T0N-1#l=`7)jTu6*Un z{%XCxJQornT5ALl5sbB#IF4IcH5vc|TeoljuxI1O_xyAkt@X2p6v0|crCMd?!Gnp> zk&yx0Xdo-y6-r^_7;7zBL=X|;W|O(OIYi`aVR+cTUo2MU%Vp}d8qFl?wHou~GWUzc zN?~}|7m>41=H_U&ns`NM^XfQpz>2UCMF2;E+QCDI#=|hA5=Ar`4H}IGl_(+%Lk=D~ zG!E2&ql;05U7-UCh~t>pS~Q6gr4-6_85<gkfPG&cInwJGGh8m0{}E6wmvM|4{_@C? zUSQwo&`?A&vdblImq0{XlhIa!)@aYe4Fbl7h9-c4Yge!KP8W;QrBaDfsl;@#IDPHv z)m~s=Y-ni04FVj`YaQb&$X)?$=XJXtN-31qIO#Mdmt*YAnG3*=x2LAm-Fx>cckkV+ z+@6|Jz>i~R&Rj6L943`Q=@+<EwH*LV9LLx=ZYgVvNTrC=X@H}CDm8le@ZoU)Kb3j| zII7ZVoR=V1fQ{qUg@lCIJa;Qnj)U=iMh6F@t;de-`}*X`(d6~5ql1Hyw{~rde5L1w zQs{)MT{bNuc#eY!0)k8i*KyEVV>}P9ql3}G!3kgh7#JNKobWn2a6AvKbxZ6D!c8`< z2?9LFX_bCQfB!?r^SXbze0jT!j~AXie#}A?VXZ~1C9c<L)@rSKrBbb?dx7k=Qsgoj zy54*fwPnk;Pj>AZiR<-Qlk&Xj#Y&~y&1O%lEn7~=<Yb|1VF8luhzOFb*%z|C4ab38 z4z+31HaD9+U8_{c`u?;MksJAZe%;#6&aUFj49!aA#R!%O<NLhb)5FtJ=}8!dj|^}# z48!jCH*X#ZeE*$PXJ_|{cl$D-l%iIx&bqEU9fsk%z)dA0>w)V)epOTdH$vb8=hIAP zq37d|zX#R<T|ltP#1Da=fW5<~PW`FI&z~o*)v(Rx>i-qBp;YU3luBVtvejN0`Ew$a zQv40$-y^~XO0K{F001R)MObuXVRU6WV{&C-bY%cCFflVNFg7hRFjO%yIxsgnFf=PL zGCD9Y_Tr{V0000bbVXQnWMOn=I&E)cX=Zr<GB7bSEig7MGB8vzF*-0eIxsXVFfuwY zFo(Y$^#A|>8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1002ovPDHLk FV1i^lrY8UZ diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/select.png deleted file mode 100644 index da2b066bea54874ce51ea03d4585992f0d25b2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 zcmZ`(c{JMz5dJwf?v*;W$kJf7sS3X&u64AUO@t6Mb;J^_v!s+t2%)GWWUZo<HZ*lK zly&ylu2{6rT6IRHsuoqtR%y4?Q7s#P?jQT+ee=zmneWYe^X3i5&4r*OuO$xvfRdvF zjx1*QK4c+cPiL{##RLg(BH)0%eJg9LE)Zwrq8z;GVuffQ5?Dk@8~{l7IO0yaQ@RF= zU7g*%)OwRQ+dI}4Iqszg^hqxmf#=7thJ_lAr29Lxm*yTQgpsd?C>9yk*_3zF%#7sx z@*3X4nASA%G_PXR4(Crs)!W=uJUy#~S^Kk<3Z|Jybfw^T3@qaN2NPzPL$;gNi<})% z<Jw`}8N|-s$rQf?D1iN4$CK}7Cc!NX<+9Zzb)^v>i8Fo&v1NsN?mxk0M_}5S5zQLE z`omL@RcGcYHSSx1@tWh~YIc|?rR!3uNI$wqLx`DK2EZMpye%HOawT0gSJe>D_f5*@ zc-da1QRN<iiqKSk559LS?BT2Ui0+3Gt+5|o_m{O*&R74PshsTQ^K-nYE&276eCsnj z%LCooi&|7Fl}^ajR!F+^d27S7K=huGw7a`V$c4zX3jSKhp<Aqr2mXn5%9gZBT7Bp0 zB$VDh<b%^tDH=$Op2H@f^S7)zn(WZ|&+B0Vm;OzOp&3mr;*@nPTuG`~LSnfkvvz_^ zsfl8SBEHN`-dh}KKM|q<Vck(1GwoMauC8Z8Qn`o5{fXk0koEX=PPo|}D5nXuDJ`mU zyfa=47#Ij5DvOEfC*8cpxrN=~CH8%~w5caC(wW3lzTW<$Yamj=V4)W9cz{2;z^<bd zTxC-f7e~q?Q%v3@u1vkE_c;>uk#>wf(gphFu+lEsc?_#9P0dVhUmW1sz9WS1G+svF zHP~uip4SsT1fenJ69+vF9jHfSB|AZ!A>XY8gw1Tm^9ITb1*JOLIW|Kf+1VMA3uL(t z!5@4TahQ8=GJwS}tq|7-7Gx7|X*DW#=D}qrkQK>R!r)=4rLTz9g4QFxBK}gmyP>+_ zHF^ASR}9r9hUp3zlrj6)CbUjL*$y<#xPJ6<D)g*I5JbjycIyU@XHF6k6f!!wDcJIq zs^!XaEY^#Z`T4Xo9;k?WpkJYOw+a`Y{w)++cH=O69z1SoDYrhYqZw8*7;<iH+h#kF zHyIwgvGK$KHew+zhFN}XR`5%(--J93)0LH{GJSVs{$j5Tq(Ra`$JsTTfWh?aLq;f+ z{0(&+jPl6s8x4o)E@UeLEU0w)1Fh$`We4xdhQrD%0=#bst6g0IoY69}%<H*1H@H4u z0j`+(?DFj*mo_W)=Fu95tY^+Ry&&?@$h{VNUxy$Lb$WXGmLuPWz7v~XrJHW&*@82p z)D(7(n=<+ybL>&IB`|L?(Nx$S9ttlYk|ZzLojH7sYYNjEA*miUU{}rIDwnRL)r2AV zQ1M+R37s+9^MfTfX#sj)K2Kt3Uco=O$*Z%a7tl#H_gU>l86n&(T1OV4(sbn|Cp02r zZ~gsTbD1wsgcO!ijlU_dH<~c{(Z}RYO$|dhrZPUMx=V7XKR)q>D1_?}-cC<l=nnY8 z56Gu{hdx$FW~y?!8&-01NRut!e-5}v?~cLd;^M0L85xPYEz1Jem|5PkpkH}o1xDA) zXV&-jz7DBt(UH|f)Ym<Qu~Ex{)r3d3<%KlJD!@T1eR&skIrsi>#VEf>N~T>ZR)Umr zucy01Vn(XZ-h}#z>g?Nsbu&EhX?J2z{TW=EEE+XZpf(D|&+8{UrbAOtNIb5B=_4Qo zN#ZYOz`#=&LH>+jtH9`BF#%{0g+YSmNHpk<LRo<pR-oxI5N!p58?UMy|09Tq3<?X0 z|9?Sdht5Z_Ky!b>>BtZU(?2>GU^1D;VHeKR1O20djU%Jam8{xmiJJgNybG=Ydp7l7 Do<4_T diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png deleted file mode 100644 index 60618a5b5986a204907ce86bb39e949ab7ea92a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1732 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 aVQ^(GZ*pgw?mQX*0000<MNUMnLSTZBt2C1U diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textarea.png deleted file mode 100644 index 87073d220159c797fc8adaf8d7bf26d7872c8f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 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 aVQ^(GZ*pgw?mQX*0000<MNUMnLSTYS>nE82 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png deleted file mode 100644 index d3c13582d92512a755f918505c527765401b8622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmV+{1=IS8P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00c!zL_t(o!_Ah@YgAVh$3N%Y`{vD$ z_jDTa9HU6FbR#ujx`-C(1fvLD71FhfEM1HLgi>5)r;8wn8=+YUQo68EG0++@5V}!H zsx>oFC%<Rr&AqpaH<RWEwvI`(UwFLB<8i*{e9yV(9GSj#i;oHKqq6@W9MGME0Em1T zR_AaX2bAZbl)@81M8LTn+5S(6;GDxchcO2INffcKP$2932(ZWW>m2nYVR2;z+{_F> zA21Hg0%nh&*)~_7o0&m?K0lxT?W>a~4}@U|&XKfQZ%xIfukVtsc3lbJ`#y-Uyu8eV zhYu^s>gtz-Q8Yd}I%>`g4^PciD${O{F;}TfpBWyW8XX-qVHAy1E|+IVMn=rb4?y0* z%SvT>WMssY%jH=e$MK>0SFb3=@f+aeuh*_kmg1Nr7cSfd&TkR)-k&#bep6joAZfL_ zD_Co>%_gTVUmh&Q@%OJ@zb203Lpl=#Bxx=$JsumI%=Yx)hao^?_}saqr&#m>YKx2f zc<&y%P#_RNS=&|hJ8Q8?!qnK<<cW(HFD1@B$OHkpWejM|n~90ZVBbEB2(`sUoO4+q z__|!S06*Wq?*R{gA0NkQji+^24&WS~)~IZjHxm<+XidwQv=fR__}MI8qd}|Lq@E-I z4Io)wTT>g%oT@jQD5dDSXSN%iZgYuB&1!2c)>_2#5Rvqq$uNE6#<z!xMV#*&fY*2K z$ctJH$z;IW!3b${ba=IM4(HrIb3g>;`}jeCABK3o4}c$rWRir$+MUmgb~|>?p^dc| zYd1?Of+&Tj6t-P#o>Hl7yD%#R=<sT`D6lm)w~NDR-F906))g>j8@T`?f@v!tBI!4F zHn2Jz#+c0tY)t`e!j1yFxi75Sbq>!MgEeMT5qcu{TBpOK{iE;u_*&z6UiVjUn+Jk5 zCfx^Ud((-~6QPjJ67S!SE*2>S0RXyKq+~7Cg#}jX_4U-e5BWxAJ!@@x9h5?O9$G1) zT#nq(&|T^8H-S<FN+JFICO0(nQ<Tf$y>B0A2dI@ww<2p(1+tk8I*JHaS6N<L!={~( zBS()i`|R1qbHg;7;9R=CbqQZ7qI@15MPxIXRN0lKrMW^7lw@FF&^>xI>CMftwzPzE zPT0ORXJ>EU#@8C%<t*?-2=jS*;}{tj7#uo#mX)QYIi1Vpp02E}mNJFHRT&t#?53wD zU8V9iJB_}c9(1A5eLGeP!Vo!jY%o(OTuthA3i<p~an3#NjpKvGVzKv+=g(=at-W7< z-w`^O<I}^3snu%p^VRB04Lq5zR!d(TKmH)f<vt6F#gcUnXYHo_y>m;%^VTc5TZjma zdVMYkf~WJ<>gT`{anAJtQ^0{e4ShQ*zzKCepI<(5`t(iUAkYg$drbTS_yPFtmn&EP zl1JCCV;T+YzpUcB4v};_3IepwW>G=#;m9{QAtL+@!*Q}2;@&4w0000bbVXQnWMOn= zI%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!<C3HntbYx+4Wjbwd zWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>eSaefwW^{L9a%BK_ icXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTXj2w2Ae diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/hidpi/textfield.png deleted file mode 100644 index d3c13582d92512a755f918505c527765401b8622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmV+{1=IS8P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00c!zL_t(o!_Ah@YgAVh$3N%Y`{vD$ z_jDTa9HU6FbR#ujx`-C(1fvLD71FhfEM1HLgi>5)r;8wn8=+YUQo68EG0++@5V}!H zsx>oFC%<Rr&AqpaH<RWEwvI`(UwFLB<8i*{e9yV(9GSj#i;oHKqq6@W9MGME0Em1T zR_AaX2bAZbl)@81M8LTn+5S(6;GDxchcO2INffcKP$2932(ZWW>m2nYVR2;z+{_F> zA21Hg0%nh&*)~_7o0&m?K0lxT?W>a~4}@U|&XKfQZ%xIfukVtsc3lbJ`#y-Uyu8eV zhYu^s>gtz-Q8Yd}I%>`g4^PciD${O{F;}TfpBWyW8XX-qVHAy1E|+IVMn=rb4?y0* z%SvT>WMssY%jH=e$MK>0SFb3=@f+aeuh*_kmg1Nr7cSfd&TkR)-k&#bep6joAZfL_ zD_Co>%_gTVUmh&Q@%OJ@zb203Lpl=#Bxx=$JsumI%=Yx)hao^?_}saqr&#m>YKx2f zc<&y%P#_RNS=&|hJ8Q8?!qnK<<cW(HFD1@B$OHkpWejM|n~90ZVBbEB2(`sUoO4+q z__|!S06*Wq?*R{gA0NkQji+^24&WS~)~IZjHxm<+XidwQv=fR__}MI8qd}|Lq@E-I z4Io)wTT>g%oT@jQD5dDSXSN%iZgYuB&1!2c)>_2#5Rvqq$uNE6#<z!xMV#*&fY*2K z$ctJH$z;IW!3b${ba=IM4(HrIb3g>;`}jeCABK3o4}c$rWRir$+MUmgb~|>?p^dc| zYd1?Of+&Tj6t-P#o>Hl7yD%#R=<sT`D6lm)w~NDR-F906))g>j8@T`?f@v!tBI!4F zHn2Jz#+c0tY)t`e!j1yFxi75Sbq>!MgEeMT5qcu{TBpOK{iE;u_*&z6UiVjUn+Jk5 zCfx^Ud((-~6QPjJ67S!SE*2>S0RXyKq+~7Cg#}jX_4U-e5BWxAJ!@@x9h5?O9$G1) zT#nq(&|T^8H-S<FN+JFICO0(nQ<Tf$y>B0A2dI@ww<2p(1+tk8I*JHaS6N<L!={~( zBS()i`|R1qbHg;7;9R=CbqQZ7qI@15MPxIXRN0lKrMW^7lw@FF&^>xI>CMftwzPzE zPT0ORXJ>EU#@8C%<t*?-2=jS*;}{tj7#uo#mX)QYIi1Vpp02E}mNJFHRT&t#?53wD zU8V9iJB_}c9(1A5eLGeP!Vo!jY%o(OTuthA3i<p~an3#NjpKvGVzKv+=g(=at-W7< z-w`^O<I}^3snu%p^VRB04Lq5zR!d(TKmH)f<vt6F#gcUnXYHo_y>m;%^VTc5TZjma zdVMYkf~WJ<>gT`{anAJtQ^0{e4ShQ*zzKCepI<(5`t(iUAkYg$drbTS_yPFtmn&EP zl1JCCV;T+YzpUcB4v};_3IepwW>G=#;m9{QAtL+@!*Q}2;@&4w0000bbVXQnWMOn= zI%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!<C3HntbYx+4Wjbwd zWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>eSaefwW^{L9a%BK_ icXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTXj2w2Ae diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/imagebutton.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/imagebutton.png deleted file mode 100644 index 162df9a38bc902c0fe4f471ee6de0673bba03d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<3Uds#}JFtOD7w4KMD|OJzwqF!@_e+i6uT?P=w{}nm^oSWn96T ziBk{Vx}Rv;x>l^|?G?SlV#X{=MjahDZdhfVxtU}x7X5}RZbyv8o@%}KweP#WR`sSk zi96Y(PdJ-4-$+1ZzEMNwEVc%{22}>T8Qu)BmrZy%6nA;8{BF^=-=ofcQlU(}=F)qu z0<jM(?-d!%ykdL)@W+ZHU#pJZzb@qD;PvzO#S+<8C&u4@<=&S4ZeKTL)%4S;IoqQd z8WJTK7$zxjYO3-a2HK#|dHQM7<(Dl*J9(Cd#GX$v@|eUjYuUj~Iy065m7IHSyzaVo zNo@OL3kkmV6(L#~TcdWw=mFKt^kMr@`@h&~ZqeqO1^e%BzWj1S*lI%_=e+IFa(wLH zs%&p<^S!-I(p9j0w`}@m$=dt>T?AOxuX|l&H-Gc}_m?;6h;_R%J*cpGmSB*eH$8dr z#e}U<she*;N!qyJ^)8;K2cjz0i!Z+5J;2WJ>~p0U7i-kC(&N*z`W`R2bv(nQO8F+E zXY&*8lk@wN{uF;}U7~o%V2`raR4@L&uQj^%F)DZpbzIFVJzlo^?gW*S_Oq8xxnRQk zQs~voFH?U0FH_F-d96QP%UH<V@g@&2hE+>kBT7;dOH!?pi&B9UgOP!uv95u+u7OF2 zp}CcTF%W4R7+Dz@_%7KEjC~{xx%nxXX_dG&*!*NZ0@NT0vLQG>t)x7$D3zhSyj(9c eFS|H7u^?41zbJk7I~ysWA_h-aKbLh*2~7YgR}?n@ diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/radio.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/radio.png deleted file mode 100644 index aaad523fa50f7bdee0499a2d2b963594ce8ff41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ?sXwV~EA++R2XHQRxz`^S{UCCkg7GSQ_c#a!QAdsVPD8MgN4z zFZ?_f1};pF0xgmJj<f17tZUMKndI?p@&l#rl4Vm$%!J*oyI->^Drmeo^kZ(`9$)dL z`g5)xudLW#T#;)ulOZAP$G-mezbob)ukS7HyPJ1BZ@aS)!^|r(ER2Z~LT!rw%}+m_ z^t9+?*=|>%nO9;oL{2;{nlY16cLC>>Z~L+zn11M1`MK|W(#C|{cOU)S=P%K=@~2@z zq}J4V{celhClyU9T72<E;L4CHzL;4zAIIpqOSJvi$6qM3{J-IY+~t>dPWcjdY2uPk zaqg4um0QjAexRE$spGN4Bo$9a^{ZK57cZGU)$1u^0neXp*9(^hRVutp-5T|mV~&TC zr_hYEX_^ntCKyzxo@DMj{dCi;v&(?!)YDB3$)5Ls!mN8H9?3C#Jbz!4!U|KVUhV^o z{;$7U{j8Z+W9Pp&j=h3whuh*pK^8|Ty|`QHBCcPm_DVM-ZJZIgHY~?X+H5xO>Z@Hq zF5`=@Rpx;rj0!Kc6=t8Ulj3XlXSntD+u0hs^o<c4B6Mb)f4=4RTj_>}1wT}P@?MOR z&t+bJofWnA+w;GFYp<V)^R5cl5ZPyIZ?DfZXYSmye*XUVXU=3V$=-VF{p+t%&t-g; zU*6IgCgOViK(|GoyjPazujKV%GROHF#RElRy|Yw350zLQefRDigN22K!Gmz)-+VV1 z>>1_1MgC<dY0Ovo%lgM+rVq=5nUa$v`j0cs^Za$^{rCMdBE@$wtvj>kHjwS{i^oQ~ z|M;YqnTeB6vUplNFF03NQIT<gvw)>$|NRGCI~eNr?cF=|d1b}C@1hgbUd>Tf{r`K- zWn;hlLB<E}fAdWHaxt(}2be}xOI#yLQW8s2t&)pUffR$0fuXUkfw``MNr<7jm4Pu3 zX&V?>85sC3*$qs;NE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKio Ys$PCk`s{Z$Qb0uvp00i_>zopr0QMk!Q2+n{ diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/select-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/select-rtl.png deleted file mode 100644 index 029a0d2298467788266dc0a231cfe0b874fa626a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW0R+gV~EA+rIR=2NjVC%?U&uLSNO%cMH?<T2)-21?KsuyUH-0; z|2L<`<MM*%N|}GSI9{e$C3`nKDNv1ZZQf8EQx+64VaJ{gm(+7N-`~I4ID6V@)#Yol z1X$ELdsfX;VX$DAW7IvVT%e~^WG&Zk9Qrr3?PbZYXqUW~U#nKF3ST8P<;kksZ?m?> zt!K7*^S#>Uy!ExEt8%tSo6Y9keV6a~o#Troo8SL7nSHiBYHgc{D`UgfZ|5Wyv%9z~ z*4Wj(s6&C{L#=$a?zJeJ^Uf|OKF`UT_q_eccE9DHZ)I)W$FwB#m(}dE_crNRt4Sv_ z2nhBVinx9ZXNc){TP**#?mzc|6r-P<G4IQ)|K)ylWUArd+q(Ap>$f*=-aMON@Pq9_ zhDqKfle<>W?UqU>uL#j%uz0?ri-RFiVp8hO5(}9+_K3A%!P#$@H@ClTPpr5jeEcJK z!OB%r7<cqM{?V%9`L6N#{~1S~0~vu=xkGD%u700nv+`AIq>h-y^Nj7cm+pI7V^=RO z_>Vz!Z9;cZi}Ma(6seZDMwFx^mZVxG7o`Fz1|tJQV_gGtT?3O4Lvt$wV<6HtFtRc* z@LjSS7=1_@a`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}D ScQ#T$MGT&<elF{r5}E)<&-^9; diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/select.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/select.png deleted file mode 100644 index 44b02b9d91ba70927c0baaa85dafa30aeb2ccb5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW22{wV~EA+rIUB(-AWK?*#EzwcW0zilEYn{P@^|u!EHS^H+_~n zDQsZ&euA#^?kAECn+}NyDNYE|6W-viBJp`XpYAlHT{17D_ZORg{yC?3(TmD^kxYwM zrE@aqHK;oje`1O0=(xk%et7Mwcb^U9`umlN+(leht-8MI)zc?dT}rysPN()AfBZOW zYtsJv#j`p)0#=4(m`Gj8GVL*pJl}qp@pz%!>Z@9lR5+EI9$V~K*Zq3e6faeq^M}9J z*4*DOE@*lzWyiW|{t3%8kDB-z9#c?~NZyz7EBvDS^2?RnO%JRO6z!~;?V~2o;5q4! zXo|I|TK2)H(|OyOcS!QE?ca6xoq5B>j4#qVPO@B!V&G~$H2ux0uC3FKCViA+Ihect z`ftVyIcE9hv(HwqzIrIiJJ5yUL#=!=kNU%vLZPX9<NAO9{pa8Cw#<6n_18BSa3203 zx+5s`6GKdE;twyG<NOCs*T+2a1~OK>TDr<^^{aHhd7)n~ok=rZvvteuw=wyabN%dH zTkQGebG`>n7d8XNkZOr*L`h0wNvc(HQ7VvPFfuSS)-^EKH82S=G`BJ^1|n?(BP#;~ z-zB?&v4^A~H$NpatrE8eo1e@_fEpx0HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dB SXCnnv#Ng@b=d#Wzp$P!;&HMcT diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea-rtl.png deleted file mode 100644 index 8a15d68804ba021c3b0c1ee551fcc547a194afee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<84nD#}JFtOD7v<2M3BAuYdmS?svI<@hD-bO;dDsaVQ3FR0#2v zy))+zQ(mLe55q@ld^cn7Dz!ce@^W>`Xy*xKS<WLF)RM+gd2iqB#|c8KM7Ml7)L(6J z`2U~tmNJrj?RTDZuDa*J@IdYZ=Y{MdCL0rNZSD2D?yd{J`o^lqO<CUcV)nM}+l@nO zm#zA^pTX|T>iWQ|>e12BkpU}11SWnzw=>5;;=!E9=XXjZdt4R?E&W>c*M0x}`3%3W zMfDi6F=Xo&$_TeT6m3#CP|g3r<g}5Qxw$;UlS)5>*=MIsU9+{mbVI?yRdzhief|Bm z2Xf2~pJAQHyd<-0tC--=+UrUzjtw0NYh#~<PCa0G{MfN$+=79jxz+C_`;W)O#OTbG zNbXp~k#Lc#TkK4U)zZr^YxJj|-mP>=M}%w5x^;1dNj;7(-`Wo+vdA!`M7Ev$JjZQu zVS0Z4`#+mb+`4ru$R%{9kJ^f?qO!7SE3^0>%sFiFJY#Fr{PME0ymG6#pTB<n8Y`H& zEYoXago>xoA%hgV)$Rw@{``MBac!8jrU+N$?z?s#lTu1bO1^9i(VENT8~W7f-tSZ% zn{{EU<6nNQ%3rMUidpLTMy9N_f9FSA*xK0CsIRJ$uVB8j_nBZFbKF0c+ATJUY0K*V z0pnh^#5JNMC9x#cD!C{XNHG{07#iyunClvtgczDz85jeRwt<nAfr0Om-N1B#q#-vy zB{QuOw+5S^%twG4BtbR==ckpFCl;kLl$V$5W#(lUCnpx9>g5-u&wghk1ysb~>FVdQ I&MBb@03z`pzW@LL diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textarea.png deleted file mode 100644 index 58e0fa020306a7eae99e4335e5fa52ae1e64dfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<33Lp#}JFtODFBkl6Dkn-9K~gRgX=3#BT2hQM|I##Dh^f=GfHx z2j4HyI-hXoHEYc7ki|C|Z>*TSQIWA(x>1VN)G53BuVto^x}s9&hXaXh?`odk+gW}l z#pt2#X^*POj0YGEShg%|JJ48qZmzAZ?bAuqW@ng4J-v3z*lKQ{%3OxU^5^EOO#Sby z{`>duqI=a1-k$PNYsLEe`%izY__HZON2BY}`DK#L-{-k4E{t3mQs6mhP15^imowR9 z#9bSU^KuWb**fKPYLkM3Z*a`K=L{mQ6VoG)eg0gW)^jjww^_ABn@b>zgGAen(3#hw z<`h@FFFcpn6UqJl&6|MLR}GHMaSQx%nc+Zn|JHA%@$C8e`N=(&ckkYP%jVc{c2iF2 z%PhP3$vr!{njWk#kU4($_3PI+i*_DamdVwy#Kd#b(j_GuBNSeWuDkwv|H0;i3D@$r z&yJjySg-k2V#WGp0a{a6gsnbO_~+L%i@x1|>*~uYDsEWW+y9@nOw(lcS@s8eRa7QE zw_N?%>p-T6Ykb?`hw1PCZjW34y)Zjl`{wQ2)eoLMd&acm|MmO&Q@xl%)`qca@Erbq z`}S>a6<N<+lfP_Q_)bN(mi==_xN?Nb|5L!|RV{IiC`m~yNwrEYN(E93Mh1q)x(4RD z1|}hf=2iyAK%{M8WMyFByJR;o>X9_$=BH$)RpQoQ^ON}qP=h4MhT#0PlJdl&REF~M ia=pyF?Be9af>gcyqV(DCY@~pS7(8A5T-G@yGywn!^Crsx diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield-rtl.png deleted file mode 100644 index 054aab56e1c03766a98d8b639effea3aa1b089fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2&c%V~EA+rIQV_l>$Xt_gB}ZrLkxqyyo?R-Df82>71$Y)9z2S zx;rgVnl~qrhtYMzMiK9inQ8ZKrkU<mIsK^Wp~?G0$9J}W&e<7Lbh5?fygt*6CEW}R z*AECUF#gICvwQb_-{qI1F8!17RhxY4?t6{XL6h=SpC0Is|MGs)r}`J$bi7*^X-xRC z;bzVRk>7vqx{oI9k6QbvY`5ytFX<U+DUojLuUBhyH3=jiIkRFF*Mrkld;JbvpCY8# z(!X-{#T>It6R9H-oTahz#SGm-LyzWdUwwwB{J+W9$JMdde_TxBXk5Ko+ld2c3<sm} z?<)rjgS_51gspDfJvmkKo!`9YJFL^bIrh3eX0ecs6k$#KcH?D<!RF%<k2kE+>Qn!h zxBqV5{_vj#7JFvh>|K&S>0X2F2eu1u%l^kDZk~NG;lrs4n|<tY{}y-ZFTVIf&ePfR z{G>-StEQQ3`B~%V)p;<X;M(>%XVWg;{mHq?NMF*olgAYp3#uiq5hW>!C8<`)MX5lF z!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7#t@Q*-29Zxv`X9>Y<@By0cwy0*$|wc qR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosASw5re0zpUXO@geCx_;r7%3 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield.png b/platforms/browser/www/lib/ckeditor/plugins/forms/icons/textfield.png deleted file mode 100644 index 054aab56e1c03766a98d8b639effea3aa1b089fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2&c%V~EA+rIQV_l>$Xt_gB}ZrLkxqyyo?R-Df82>71$Y)9z2S zx;rgVnl~qrhtYMzMiK9inQ8ZKrkU<mIsK^Wp~?G0$9J}W&e<7Lbh5?fygt*6CEW}R z*AECUF#gICvwQb_-{qI1F8!17RhxY4?t6{XL6h=SpC0Is|MGs)r}`J$bi7*^X-xRC z;bzVRk>7vqx{oI9k6QbvY`5ytFX<U+DUojLuUBhyH3=jiIkRFF*Mrkld;JbvpCY8# z(!X-{#T>It6R9H-oTahz#SGm-LyzWdUwwwB{J+W9$JMdde_TxBXk5Ko+ld2c3<sm} z?<)rjgS_51gspDfJvmkKo!`9YJFL^bIrh3eX0ecs6k$#KcH?D<!RF%<k2kE+>Qn!h zxBqV5{_vj#7JFvh>|K&S>0X2F2eu1u%l^kDZk~NG;lrs4n|<tY{}y-ZFTVIf&ePfR z{G>-StEQQ3`B~%V)p;<X;M(>%XVWg;{mHq?NMF*olgAYp3#uiq5hW>!C8<`)MX5lF z!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7#t@Q*-29Zxv`X9>Y<@By0cwy0*$|wc qR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosASw5re0zpUXO@geCx_;r7%3 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif b/platforms/browser/www/lib/ckeditor/plugins/forms/images/hiddenfield.gif deleted file mode 100644 index 953f643b60032c36ac92590950577c336f133512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmZ?wbhEHb6lM@&n8?8JABg_{Z)j*>U|`SzVg`^n1Cx_W&+?fM`5zlEy44+e;LbT+ zkH8h7N-kQ@I;_|<mfqfeZR_h9DLc;ZID7hMoK>Q}>&=&Wsxvt_U!{00zr0#2QD@sN HCI)K&$9F25 diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/af.js deleted file mode 100644 index 27ed76df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/af.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","af",{button:{title:"Knop eienskappe",text:"Teks (Waarde)",type:"Soort",typeBtn:"Knop",typeSbm:"Stuur",typeRst:"Maak leeg"},checkboxAndRadio:{checkboxTitle:"Merkhokkie eienskappe",radioTitle:"Radioknoppie eienskappe",value:"Waarde",selected:"Geselekteer"},form:{title:"Vorm eienskappe",menu:"Vorm eienskappe",action:"Aksie",method:"Metode",encoding:"Kodering"},hidden:{title:"Verborge veld eienskappe",name:"Naam",value:"Waarde"},select:{title:"Keuseveld eienskappe",selectInfo:"Info", -opAvail:"Beskikbare opsies",value:"Waarde",size:"Grootte",lines:"Lyne",chkMulti:"Laat meer as een keuse toe",opText:"Teks",opValue:"Waarde",btnAdd:"Byvoeg",btnModify:"Wysig",btnUp:"Op",btnDown:"Af",btnSetValue:"Stel as geselekteerde waarde",btnDelete:"Verwyder"},textarea:{title:"Teks-area eienskappe",cols:"Kolomme",rows:"Rye"},textfield:{title:"Teksveld eienskappe",name:"Naam",value:"Waarde",charWidth:"Breedte (karakters)",maxChars:"Maksimum karakters",type:"Soort",typeText:"Teks",typePass:"Wagwoord", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ar.js deleted file mode 100644 index 537ca014..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ar.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ar",{button:{title:"خصائص زر الضغط",text:"القيمة/التسمية",type:"نوع الزر",typeBtn:"زر",typeSbm:"إرسال",typeRst:"إعادة تعيين"},checkboxAndRadio:{checkboxTitle:"خصائص خانة الإختيار",radioTitle:"خصائص زر الخيار",value:"القيمة",selected:"محدد"},form:{title:"خصائص النموذج",menu:"خصائص النموذج",action:"اسم الملف",method:"الأسلوب",encoding:"تشفير"},hidden:{title:"خصائص الحقل المخفي",name:"الاسم",value:"القيمة"},select:{title:"خصائص اختيار الحقل",selectInfo:"اختار معلومات", -opAvail:"الخيارات المتاحة",value:"القيمة",size:"الحجم",lines:"الأسطر",chkMulti:"السماح بتحديدات متعددة",opText:"النص",opValue:"القيمة",btnAdd:"إضافة",btnModify:"تعديل",btnUp:"أعلى",btnDown:"أسفل",btnSetValue:"إجعلها محددة",btnDelete:"إزالة"},textarea:{title:"خصائص مساحة النص",cols:"الأعمدة",rows:"الصفوف"},textfield:{title:"خصائص مربع النص",name:"الاسم",value:"القيمة",charWidth:"عرض السمات",maxChars:"اقصى عدد للسمات",type:"نوع المحتوى",typeText:"نص",typePass:"كلمة مرور",typeEmail:"بريد إلكتروني",typeSearch:"بحث", -typeTel:"رقم الهاتف",typeUrl:"الرابط"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bg.js deleted file mode 100644 index 6761facd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bg.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bg",{button:{title:"Настройки на бутона",text:"Текст (стойност)",type:"Тип",typeBtn:"Бутон",typeSbm:"Добави",typeRst:"Нулиране"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Настройки на радиобутон",value:"Стойност",selected:"Избрано"},form:{title:"Настройки на формата",menu:"Настройки на формата",action:"Действие",method:"Метод",encoding:"Кодиране"},hidden:{title:"Настройки за скрито поле",name:"Име",value:"Стойност"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Налични опции",value:"Стойност",size:"Размер",lines:"линии",chkMulti:"Allow multiple selections",opText:"Текст",opValue:"Стойност",btnAdd:"Добави",btnModify:"Промени",btnUp:"На горе",btnDown:"На долу",btnSetValue:"Set as selected value",btnDelete:"Изтриване"},textarea:{title:"Опции за текстовата зона",cols:"Колони",rows:"Редове"},textfield:{title:"Настройки за текстово поле",name:"Име",value:"Стойност",charWidth:"Ширина на знаците",maxChars:"Макс. знаци",type:"Тип", -typeText:"Текст",typePass:"Парола",typeEmail:"Email",typeSearch:"Търсене",typeTel:"Телефонен номер",typeUrl:"Уеб адрес"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bn.js deleted file mode 100644 index 63773289..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bn",{button:{title:"বাটন প্রোপার্টি",text:"টেক্সট (ভ্যালু)",type:"প্রকার",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"চেক বক্স প্রোপার্টি",radioTitle:"রেডিও বাটন প্রোপার্টি",value:"ভ্যালু",selected:"সিলেক্টেড"},form:{title:"ফর্ম প্রোপার্টি",menu:"ফর্ম প্রোপার্টি",action:"একশ্যন",method:"পদ্ধতি",encoding:"Encoding"},hidden:{title:"গুপ্ত ফীল্ড প্রোপার্টি",name:"নাম",value:"ভ্যালু"},select:{title:"বাছাই ফীল্ড প্রোপার্টি",selectInfo:"তথ্য", -opAvail:"অন্যান্য বিকল্প",value:"ভ্যালু",size:"সাইজ",lines:"লাইন সমূহ",chkMulti:"একাধিক সিলেকশন এলাউ কর",opText:"টেক্সট",opValue:"ভ্যালু",btnAdd:"যুক্ত",btnModify:"বদলে দাও",btnUp:"উপর",btnDown:"নীচে",btnSetValue:"বাছাই করা ভ্যালু হিসেবে সেট কর",btnDelete:"ডিলীট"},textarea:{title:"টেক্সট এরিয়া প্রোপার্টি",cols:"কলাম",rows:"রো"},textfield:{title:"টেক্সট ফীল্ড প্রোপার্টি",name:"নাম",value:"ভ্যালু",charWidth:"ক্যারেক্টার প্রশস্ততা",maxChars:"সর্বাধিক ক্যারেক্টার",type:"টাইপ",typeText:"টেক্সট",typePass:"পাসওয়ার্ড", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bs.js deleted file mode 100644 index cac69a36..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/bs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","bs",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ca.js deleted file mode 100644 index 55da8f9b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ca",{button:{title:"Propietats del botó",text:"Text (Valor)",type:"Tipus",typeBtn:"Botó",typeSbm:"Transmet formulari",typeRst:"Reinicia formulari"},checkboxAndRadio:{checkboxTitle:"Propietats de la casella de verificació",radioTitle:"Propietats del botó d'opció",value:"Valor",selected:"Seleccionat"},form:{title:"Propietats del formulari",menu:"Propietats del formulari",action:"Acció",method:"Mètode",encoding:"Codificació"},hidden:{title:"Propietats del camp ocult", -name:"Nom",value:"Valor"},select:{title:"Propietats del camp de selecció",selectInfo:"Info",opAvail:"Opcions disponibles",value:"Valor",size:"Mida",lines:"Línies",chkMulti:"Permet múltiples seleccions",opText:"Text",opValue:"Valor",btnAdd:"Afegeix",btnModify:"Modifica",btnUp:"Amunt",btnDown:"Avall",btnSetValue:"Selecciona per defecte",btnDelete:"Elimina"},textarea:{title:"Propietats de l'àrea de text",cols:"Columnes",rows:"Files"},textfield:{title:"Propietats del camp de text",name:"Nom",value:"Valor", -charWidth:"Amplada",maxChars:"Nombre màxim de caràcters",type:"Tipus",typeText:"Text",typePass:"Contrasenya",typeEmail:"Correu electrònic",typeSearch:"Cercar",typeTel:"Número de telèfon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cs.js deleted file mode 100644 index 5691de93..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","cs",{button:{title:"Vlastnosti tlačítka",text:"Popisek",type:"Typ",typeBtn:"Tlačítko",typeSbm:"Odeslat",typeRst:"Obnovit"},checkboxAndRadio:{checkboxTitle:"Vlastnosti zaškrtávacího políčka",radioTitle:"Vlastnosti přepínače",value:"Hodnota",selected:"Zaškrtnuto"},form:{title:"Vlastnosti formuláře",menu:"Vlastnosti formuláře",action:"Akce",method:"Metoda",encoding:"Kódování"},hidden:{title:"Vlastnosti skrytého pole",name:"Název",value:"Hodnota"},select:{title:"Vlastnosti seznamu", -selectInfo:"Info",opAvail:"Dostupná nastavení",value:"Hodnota",size:"Velikost",lines:"Řádků",chkMulti:"Povolit mnohonásobné výběry",opText:"Text",opValue:"Hodnota",btnAdd:"Přidat",btnModify:"Změnit",btnUp:"Nahoru",btnDown:"Dolů",btnSetValue:"Nastavit jako vybranou hodnotu",btnDelete:"Smazat"},textarea:{title:"Vlastnosti textové oblasti",cols:"Sloupců",rows:"Řádků"},textfield:{title:"Vlastnosti textového pole",name:"Název",value:"Hodnota",charWidth:"Šířka ve znacích",maxChars:"Maximální počet znaků", -type:"Typ",typeText:"Text",typePass:"Heslo",typeEmail:"Email",typeSearch:"Hledat",typeTel:"Telefonní číslo",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cy.js deleted file mode 100644 index 332c861f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/cy.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","cy",{button:{title:"Priodweddau Botymau",text:"Testun (Gwerth)",type:"Math",typeBtn:"Botwm",typeSbm:"Anfon",typeRst:"Ailosod"},checkboxAndRadio:{checkboxTitle:"Priodweddau Blwch Ticio",radioTitle:"Priodweddau Botwm Radio",value:"Gwerth",selected:"Dewiswyd"},form:{title:"Priodweddau Ffurflen",menu:"Priodweddau Ffurflen",action:"Gweithred",method:"Dull",encoding:"Amgodio"},hidden:{title:"Priodweddau Maes Cudd",name:"Enw",value:"Gwerth"},select:{title:"Priodweddau Maes Dewis", -selectInfo:"Gwyb Dewis",opAvail:"Opsiynau ar Gael",value:"Gwerth",size:"Maint",lines:"llinellau",chkMulti:"Caniatàu aml-ddewisiadau",opText:"Testun",opValue:"Gwerth",btnAdd:"Ychwanegu",btnModify:"Newid",btnUp:"Lan",btnDown:"Lawr",btnSetValue:"Gosod fel gwerth a ddewiswyd",btnDelete:"Dileu"},textarea:{title:"Priodweddau Ardal Testun",cols:"Colofnau",rows:"Rhesi"},textfield:{title:"Priodweddau Maes Testun",name:"Enw",value:"Gwerth",charWidth:"Lled Nod",maxChars:"Uchafswm y Nodau",type:"Math",typeText:"Testun", -typePass:"Cyfrinair",typeEmail:"Ebost",typeSearch:"Chwilio",typeTel:"Rhif Ffôn",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/da.js deleted file mode 100644 index cf4a1934..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/da.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","da",{button:{title:"Egenskaber for knap",text:"Tekst",type:"Type",typeBtn:"Knap",typeSbm:"Send",typeRst:"Nulstil"},checkboxAndRadio:{checkboxTitle:"Egenskaber for afkrydsningsfelt",radioTitle:"Egenskaber for alternativknap",value:"Værdi",selected:"Valgt"},form:{title:"Egenskaber for formular",menu:"Egenskaber for formular",action:"Handling",method:"Metode",encoding:"Kodning (encoding)"},hidden:{title:"Egenskaber for skjult felt",name:"Navn",value:"Værdi"},select:{title:"Egenskaber for liste", -selectInfo:"Generelt",opAvail:"Valgmuligheder",value:"Værdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillad flere valg",opText:"Tekst",opValue:"Værdi",btnAdd:"Tilføj",btnModify:"Redigér",btnUp:"Op",btnDown:"Ned",btnSetValue:"Sæt som valgt",btnDelete:"Slet"},textarea:{title:"Egenskaber for tekstboks",cols:"Kolonner",rows:"Rækker"},textfield:{title:"Egenskaber for tekstfelt",name:"Navn",value:"Værdi",charWidth:"Bredde (tegn)",maxChars:"Max. antal tegn",type:"Type",typeText:"Tekst",typePass:"Adgangskode", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/de.js deleted file mode 100644 index 483c7f9d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/de.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","de",{button:{title:"Button-Eigenschaften",text:"Text (Wert)",type:"Typ",typeBtn:"Button",typeSbm:"Absenden",typeRst:"Zurücksetzen"},checkboxAndRadio:{checkboxTitle:"Checkbox-Eigenschaften",radioTitle:"Optionsfeld-Eigenschaften",value:"Wert",selected:"ausgewählt"},form:{title:"Formular-Eigenschaften",menu:"Formular-Eigenschaften",action:"Action",method:"Method",encoding:"Zeichenkodierung"},hidden:{title:"Verstecktes Feld-Eigenschaften",name:"Name",value:"Wert"},select:{title:"Auswahlfeld-Eigenschaften", -selectInfo:"Info",opAvail:"Mögliche Optionen",value:"Wert",size:"Größe",lines:"Linien",chkMulti:"Erlaube Mehrfachauswahl",opText:"Text",opValue:"Wert",btnAdd:"Hinzufügen",btnModify:"Ändern",btnUp:"Hoch",btnDown:"Runter",btnSetValue:"Setze als Standardwert",btnDelete:"Entfernen"},textarea:{title:"Textfeld (mehrzeilig) Eigenschaften",cols:"Spalten",rows:"Reihen"},textfield:{title:"Textfeld (einzeilig) Eigenschaften",name:"Name",value:"Wert",charWidth:"Zeichenbreite",maxChars:"Max. Zeichen",type:"Typ", -typeText:"Text",typePass:"Passwort",typeEmail:"E-mail",typeSearch:"Suche",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/el.js deleted file mode 100644 index 2f42eff3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/el.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","el",{button:{title:"Ιδιότητες Κουμπιού",text:"Κείμενο (Τιμή)",type:"Τύπος",typeBtn:"Κουμπί",typeSbm:"Υποβολή",typeRst:"Επαναφορά"},checkboxAndRadio:{checkboxTitle:"Ιδιότητες Κουτιού Επιλογής",radioTitle:"Ιδιότητες Κουμπιού Επιλογής",value:"Τιμή",selected:"Επιλεγμένο"},form:{title:"Ιδιότητες Φόρμας",menu:"Ιδιότητες Φόρμας",action:"Ενέργεια",method:"Μέθοδος",encoding:"Κωδικοποίηση"},hidden:{title:"Ιδιότητες Κρυφού Πεδίου",name:"Όνομα",value:"Τιμή"},select:{title:"Ιδιότητες Πεδίου Επιλογής", -selectInfo:"Πληροφορίες Πεδίου Επιλογής",opAvail:"Διαθέσιμες Επιλογές",value:"Τιμή",size:"Μέγεθος",lines:"γραμμές",chkMulti:"Να επιτρέπονται οι πολλαπλές επιλογές",opText:"Κείμενο",opValue:"Τιμή",btnAdd:"Προσθήκη",btnModify:"Τροποποίηση",btnUp:"Πάνω",btnDown:"Κάτω",btnSetValue:"Θέση ως προεπιλογή",btnDelete:"Διαγραφή"},textarea:{title:"Ιδιότητες Περιοχής Κειμένου",cols:"Στήλες",rows:"Σειρές"},textfield:{title:"Ιδιότητες Πεδίου Κειμένου",name:"Όνομα",value:"Τιμή",charWidth:"Πλάτος Χαρακτήρων",maxChars:"Μέγιστοι χαρακτήρες", -type:"Τύπος",typeText:"Κείμενο",typePass:"Κωδικός",typeEmail:"Email",typeSearch:"Αναζήτηση",typeTel:"Αριθμός Τηλεφώνου",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-au.js deleted file mode 100644 index e144ec74..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-au.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-au",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-ca.js deleted file mode 100644 index 8adf26e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-ca",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-gb.js deleted file mode 100644 index d72b16c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en-gb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en-gb",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password", -typeEmail:"E-mail",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en.js deleted file mode 100644 index 95cf7753..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/en.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","en",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eo.js deleted file mode 100644 index 26744b66..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","eo",{button:{title:"Butonaj atributoj",text:"Teksto (Valoro)",type:"Tipo",typeBtn:"Butono",typeSbm:"Validigi (submit)",typeRst:"Remeti en la originstaton (Reset)"},checkboxAndRadio:{checkboxTitle:"Markobutonaj Atributoj",radioTitle:"Radiobutonaj Atributoj",value:"Valoro",selected:"Selektita"},form:{title:"Formularaj Atributoj",menu:"Formularaj Atributoj",action:"Ago",method:"Metodo",encoding:"Kodoprezento"},hidden:{title:"Atributoj de Kaŝita Kampo",name:"Nomo",value:"Valoro"}, -select:{title:"Atributoj de Elekta Kampo",selectInfo:"Informoj pri la rulummenuo",opAvail:"Elektoj Disponeblaj",value:"Valoro",size:"Grando",lines:"Linioj",chkMulti:"Permesi Plurajn Elektojn",opText:"Teksto",opValue:"Valoro",btnAdd:"Aldoni",btnModify:"Modifi",btnUp:"Supren",btnDown:"Malsupren",btnSetValue:"Agordi kiel Elektitan Valoron",btnDelete:"Forigi"},textarea:{title:"Atributoj de Teksta Areo",cols:"Kolumnoj",rows:"Linioj"},textfield:{title:"Atributoj de Teksta Kampo",name:"Nomo",value:"Valoro", -charWidth:"Signolarĝo",maxChars:"Maksimuma Nombro da Signoj",type:"Tipo",typeText:"Teksto",typePass:"Pasvorto",typeEmail:"retpoŝtadreso",typeSearch:"Serĉi",typeTel:"Telefonnumero",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/es.js deleted file mode 100644 index e275cf88..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/es.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","es",{button:{title:"Propiedades de Botón",text:"Texto (Valor)",type:"Tipo",typeBtn:"Boton",typeSbm:"Enviar",typeRst:"Reestablecer"},checkboxAndRadio:{checkboxTitle:"Propiedades de Casilla",radioTitle:"Propiedades de Botón de Radio",value:"Valor",selected:"Seleccionado"},form:{title:"Propiedades de Formulario",menu:"Propiedades de Formulario",action:"Acción",method:"Método",encoding:"Codificación"},hidden:{title:"Propiedades de Campo Oculto",name:"Nombre",value:"Valor"}, -select:{title:"Propiedades de Campo de Selección",selectInfo:"Información",opAvail:"Opciones disponibles",value:"Valor",size:"Tamaño",lines:"Lineas",chkMulti:"Permitir múltiple selección",opText:"Texto",opValue:"Valor",btnAdd:"Agregar",btnModify:"Modificar",btnUp:"Subir",btnDown:"Bajar",btnSetValue:"Establecer como predeterminado",btnDelete:"Eliminar"},textarea:{title:"Propiedades de Area de Texto",cols:"Columnas",rows:"Filas"},textfield:{title:"Propiedades de Campo de Texto",name:"Nombre",value:"Valor", -charWidth:"Caracteres de ancho",maxChars:"Máximo caracteres",type:"Tipo",typeText:"Texto",typePass:"Contraseña",typeEmail:"Correo electrónico",typeSearch:"Buscar",typeTel:"Número de teléfono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/et.js deleted file mode 100644 index 0e1d62e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/et.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","et",{button:{title:"Nupu omadused",text:"Tekst (väärtus)",type:"Liik",typeBtn:"Nupp",typeSbm:"Saada",typeRst:"Lähtesta"},checkboxAndRadio:{checkboxTitle:"Märkeruudu omadused",radioTitle:"Raadionupu omadused",value:"Väärtus",selected:"Märgitud"},form:{title:"Vormi omadused",menu:"Vormi omadused",action:"Toiming",method:"Meetod",encoding:"Kodeering"},hidden:{title:"Varjatud lahtri omadused",name:"Nimi",value:"Väärtus"},select:{title:"Valiklahtri omadused",selectInfo:"Info", -opAvail:"Võimalikud valikud:",value:"Väärtus",size:"Suurus",lines:"ridu",chkMulti:"Võimalik mitu valikut",opText:"Tekst",opValue:"Väärtus",btnAdd:"Lisa",btnModify:"Muuda",btnUp:"Üles",btnDown:"Alla",btnSetValue:"Määra vaikimisi",btnDelete:"Kustuta"},textarea:{title:"Tekstiala omadused",cols:"Veerge",rows:"Ridu"},textfield:{title:"Tekstilahtri omadused",name:"Nimi",value:"Väärtus",charWidth:"Laius (tähemärkides)",maxChars:"Maksimaalselt tähemärke",type:"Liik",typeText:"Tekst",typePass:"Parool",typeEmail:"E-mail", -typeSearch:"Otsi",typeTel:"Telefon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eu.js deleted file mode 100644 index cfb5e9a5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/eu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","eu",{button:{title:"Botoiaren Ezaugarriak",text:"Testua (Balorea)",type:"Mota",typeBtn:"Botoia",typeSbm:"Bidali",typeRst:"Garbitu"},checkboxAndRadio:{checkboxTitle:"Kontrol-laukiko Ezaugarriak",radioTitle:"Aukera-botoiaren Ezaugarriak",value:"Balorea",selected:"Hautatuta"},form:{title:"Formularioaren Ezaugarriak",menu:"Formularioaren Ezaugarriak",action:"Ekintza",method:"Metodoa",encoding:"Kodeketa"},hidden:{title:"Ezkutuko Eremuaren Ezaugarriak",name:"Izena",value:"Balorea"}, -select:{title:"Hautespen Eremuaren Ezaugarriak",selectInfo:"Informazioa",opAvail:"Aukera Eskuragarriak",value:"Balorea",size:"Tamaina",lines:"lerro kopurura",chkMulti:"Hautaketa anitzak baimendu",opText:"Testua",opValue:"Balorea",btnAdd:"Gehitu",btnModify:"Aldatu",btnUp:"Gora",btnDown:"Behera",btnSetValue:"Aukeratutako balorea ezarri",btnDelete:"Ezabatu"},textarea:{title:"Testu-arearen Ezaugarriak",cols:"Zutabeak",rows:"Lerroak"},textfield:{title:"Testu Eremuaren Ezaugarriak",name:"Izena",value:"Balorea", -charWidth:"Zabalera",maxChars:"Zenbat karaktere gehienez",type:"Mota",typeText:"Testua",typePass:"Pasahitza",typeEmail:"E-posta",typeSearch:"Bilatu",typeTel:"Telefono Zenbakia",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fa.js deleted file mode 100644 index 326ada0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fa.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fa",{button:{title:"ویژگی​های دکمه",text:"متن (مقدار)",type:"نوع",typeBtn:"دکمه",typeSbm:"ثبت",typeRst:"بازنشانی (Reset)"},checkboxAndRadio:{checkboxTitle:"ویژگی​های خانهٴ گزینه​ای",radioTitle:"ویژگی​های دکمهٴ رادیویی",value:"مقدار",selected:"برگزیده"},form:{title:"ویژگی​های فرم",menu:"ویژگی​های فرم",action:"رویداد",method:"متد",encoding:"رمزنگاری"},hidden:{title:"ویژگی​های فیلد پنهان",name:"نام",value:"مقدار"},select:{title:"ویژگی​های فیلد چندگزینه​ای",selectInfo:"اطلاعات", -opAvail:"گزینه​های دردسترس",value:"مقدار",size:"اندازه",lines:"خطوط",chkMulti:"گزینش چندگانه فراهم باشد",opText:"متن",opValue:"مقدار",btnAdd:"افزودن",btnModify:"ویرایش",btnUp:"بالا",btnDown:"پائین",btnSetValue:"تنظیم به عنوان مقدار برگزیده",btnDelete:"پاککردن"},textarea:{title:"ویژگی​های ناحیهٴ متنی",cols:"ستون​ها",rows:"سطرها"},textfield:{title:"ویژگی​های فیلد متنی",name:"نام",value:"مقدار",charWidth:"پهنای نویسه",maxChars:"بیشینهٴ نویسه​ها",type:"نوع",typeText:"متن",typePass:"گذرواژه",typeEmail:"ایمیل", -typeSearch:"جستجو",typeTel:"شماره تلفن",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fi.js deleted file mode 100644 index 31cf6d05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fi",{button:{title:"Painikkeen ominaisuudet",text:"Teksti (arvo)",type:"Tyyppi",typeBtn:"Painike",typeSbm:"Lähetä",typeRst:"Tyhjennä"},checkboxAndRadio:{checkboxTitle:"Valintaruudun ominaisuudet",radioTitle:"Radiopainikkeen ominaisuudet",value:"Arvo",selected:"Valittu"},form:{title:"Lomakkeen ominaisuudet",menu:"Lomakkeen ominaisuudet",action:"Toiminto",method:"Tapa",encoding:"Enkoodaus"},hidden:{title:"Piilokentän ominaisuudet",name:"Nimi",value:"Arvo"},select:{title:"Valintakentän ominaisuudet", -selectInfo:"Info",opAvail:"Ominaisuudet",value:"Arvo",size:"Koko",lines:"Rivit",chkMulti:"Salli usea valinta",opText:"Teksti",opValue:"Arvo",btnAdd:"Lisää",btnModify:"Muuta",btnUp:"Ylös",btnDown:"Alas",btnSetValue:"Aseta valituksi",btnDelete:"Poista"},textarea:{title:"Tekstilaatikon ominaisuudet",cols:"Sarakkeita",rows:"Rivejä"},textfield:{title:"Tekstikentän ominaisuudet",name:"Nimi",value:"Arvo",charWidth:"Leveys",maxChars:"Maksimi merkkimäärä",type:"Tyyppi",typeText:"Teksti",typePass:"Salasana", -typeEmail:"Sähköposti",typeSearch:"Haku",typeTel:"Puhelinnumero",typeUrl:"Osoite"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fo.js deleted file mode 100644 index 3ff4950e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fo.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fo",{button:{title:"Eginleikar fyri knøtt",text:"Tekstur",type:"Slag",typeBtn:"Knøttur",typeSbm:"Send",typeRst:"Nullstilla"},checkboxAndRadio:{checkboxTitle:"Eginleikar fyri flugubein",radioTitle:"Eginleikar fyri radioknøtt",value:"Virði",selected:"Valt"},form:{title:"Eginleikar fyri Form",menu:"Eginleikar fyri Form",action:"Hending",method:"Háttur",encoding:"Encoding"},hidden:{title:"Eginleikar fyri fjaldan teig",name:"Navn",value:"Virði"},select:{title:"Eginleikar fyri valskrá", -selectInfo:"Upplýsingar",opAvail:"Tøkir møguleikar",value:"Virði",size:"Stødd",lines:"Linjur",chkMulti:"Loyv fleiri valmøguleikum samstundis",opText:"Tekstur",opValue:"Virði",btnAdd:"Legg afturat",btnModify:"Broyt",btnUp:"Upp",btnDown:"Niður",btnSetValue:"Set sum valt virði",btnDelete:"Strika"},textarea:{title:"Eginleikar fyri tekstumráði",cols:"kolonnur",rows:"røðir"},textfield:{title:"Eginleikar fyri tekstteig",name:"Navn",value:"Virði",charWidth:"Breidd (sjónlig tekn)",maxChars:"Mest loyvdu tekn", -type:"Slag",typeText:"Tekstur",typePass:"Loyniorð",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr-ca.js deleted file mode 100644 index f44c8d63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr-ca.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fr-ca",{button:{title:"Propriétés du bouton",text:"Texte (Valeur)",type:"Type",typeBtn:"Bouton",typeSbm:"Soumettre",typeRst:"Réinitialiser"},checkboxAndRadio:{checkboxTitle:"Propriétés de la case à cocher",radioTitle:"Propriétés du bouton radio",value:"Valeur",selected:"Sélectionné"},form:{title:"Propriétés du formulaire",menu:"Propriétés du formulaire",action:"Action",method:"Méthode",encoding:"Encodage"},hidden:{title:"Propriétés du champ caché",name:"Nom",value:"Valeur"}, -select:{title:"Propriétés du champ de sélection",selectInfo:"Info",opAvail:"Options disponibles",value:"Valeur",size:"Taille",lines:"lignes",chkMulti:"Permettre les sélections multiples",opText:"Texte",opValue:"Valeur",btnAdd:"Ajouter",btnModify:"Modifier",btnUp:"Monter",btnDown:"Descendre",btnSetValue:"Valeur sélectionnée",btnDelete:"Supprimer"},textarea:{title:"Propriétés de la zone de texte",cols:"Colonnes",rows:"Lignes"},textfield:{title:"Propriétés du champ texte",name:"Nom",value:"Valeur",charWidth:"Largeur de caractères", -maxChars:"Nombre maximum de caractères",type:"Type",typeText:"Texte",typePass:"Mot de passe",typeEmail:"Courriel",typeSearch:"Recherche",typeTel:"Numéro de téléphone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr.js deleted file mode 100644 index eff0fd02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","fr",{button:{title:"Propriétés du bouton",text:"Texte (Value)",type:"Type",typeBtn:"Bouton",typeSbm:"Validation (submit)",typeRst:"Remise à zéro"},checkboxAndRadio:{checkboxTitle:"Propriétés de la case à cocher",radioTitle:"Propriétés du bouton Radio",value:"Valeur",selected:"Sélectionné"},form:{title:"Propriétés du formulaire",menu:"Propriétés du formulaire",action:"Action",method:"Méthode",encoding:"Encodage"},hidden:{title:"Propriétés du champ caché",name:"Nom", -value:"Valeur"},select:{title:"Propriétés du menu déroulant",selectInfo:"Informations sur le menu déroulant",opAvail:"Options disponibles",value:"Valeur",size:"Taille",lines:"Lignes",chkMulti:"Permettre les sélections multiples",opText:"Texte",opValue:"Valeur",btnAdd:"Ajouter",btnModify:"Modifier",btnUp:"Haut",btnDown:"Bas",btnSetValue:"Définir comme valeur sélectionnée",btnDelete:"Supprimer"},textarea:{title:"Propriétés de la zone de texte",cols:"Colonnes",rows:"Lignes"},textfield:{title:"Propriétés du champ texte", -name:"Nom",value:"Valeur",charWidth:"Taille des caractères",maxChars:"Nombre maximum de caractères",type:"Type",typeText:"Texte",typePass:"Mot de passe",typeEmail:"E-mail",typeSearch:"Rechercher",typeTel:"Numéro de téléphone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gl.js deleted file mode 100644 index 792ee3f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","gl",{button:{title:"Propiedades do botón",text:"Texto (Valor)",type:"Tipo",typeBtn:"Botón",typeSbm:"Enviar",typeRst:"Restabelever"},checkboxAndRadio:{checkboxTitle:"Propiedades da caixa de selección",radioTitle:"Propiedades do botón de opción",value:"Valor",selected:"Seleccionado"},form:{title:"Propiedades do formulario",menu:"Propiedades do formulario",action:"Acción",method:"Método",encoding:"Codificación"},hidden:{title:"Propiedades do campo agochado",name:"Nome", -value:"Valor"},select:{title:"Propiedades do campo de selección",selectInfo:"Información",opAvail:"Opcións dispoñíbeis",value:"Valor",size:"Tamaño",lines:"liñas",chkMulti:"Permitir múltiplas seleccións",opText:"Texto",opValue:"Valor",btnAdd:"Engadir",btnModify:"Modificar",btnUp:"Subir",btnDown:"Baixar",btnSetValue:"Estabelecer como valor seleccionado",btnDelete:"Eliminar"},textarea:{title:"Propiedades da área de texto",cols:"Columnas",rows:"Filas"},textfield:{title:"Propiedades do campo de texto", -name:"Nome",value:"Valor",charWidth:"Largo do carácter",maxChars:"Núm. máximo de caracteres",type:"Tipo",typeText:"Texto",typePass:"Contrasinal",typeEmail:"Correo",typeSearch:"Buscar",typeTel:"Número de teléfono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gu.js deleted file mode 100644 index 976d136a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/gu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","gu",{button:{title:"બટનના ગુણ",text:"ટેક્સ્ટ (વૅલ્યૂ)",type:"પ્રકાર",typeBtn:"બટન",typeSbm:"સબ્મિટ",typeRst:"રિસેટ"},checkboxAndRadio:{checkboxTitle:"ચેક બોક્સ ગુણ",radioTitle:"રેડિઓ બટનના ગુણ",value:"વૅલ્યૂ",selected:"સિલેક્ટેડ"},form:{title:"ફૉર્મ/પત્રકના ગુણ",menu:"ફૉર્મ/પત્રકના ગુણ",action:"ક્રિયા",method:"પદ્ધતિ",encoding:"અન્કોડીન્ગ"},hidden:{title:"ગુપ્ત ક્ષેત્રના ગુણ",name:"નામ",value:"વૅલ્યૂ"},select:{title:"પસંદગી ક્ષેત્રના ગુણ",selectInfo:"સૂચના",opAvail:"ઉપલબ્ધ વિકલ્પ", -value:"વૅલ્યૂ",size:"સાઇઝ",lines:"લીટીઓ",chkMulti:"એકથી વધારે પસંદ કરી શકો",opText:"ટેક્સ્ટ",opValue:"વૅલ્યૂ",btnAdd:"ઉમેરવું",btnModify:"બદલવું",btnUp:"ઉપર",btnDown:"નીચે",btnSetValue:"પસંદ કરલી વૅલ્યૂ સેટ કરો",btnDelete:"રદ કરવું"},textarea:{title:"ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ",cols:"કૉલમ/ઊભી કટાર",rows:"પંક્તિઓ"},textfield:{title:"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ",name:"નામ",value:"વૅલ્યૂ",charWidth:"કેરેક્ટરની પહોળાઈ",maxChars:"અધિકતમ કેરેક્ટર",type:"ટાઇપ",typeText:"ટેક્સ્ટ",typePass:"પાસવર્ડ", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/he.js deleted file mode 100644 index 102ba4c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","he",{button:{title:"מאפייני כפתור",text:"טקסט (ערך)",type:"סוג",typeBtn:"כפתור",typeSbm:"שליחה",typeRst:"איפוס"},checkboxAndRadio:{checkboxTitle:"מאפייני תיבת סימון",radioTitle:"מאפייני לחצן אפשרויות",value:"ערך",selected:"מסומן"},form:{title:"מאפיני טופס",menu:"מאפיני טופס",action:"שלח אל",method:"סוג שליחה",encoding:"קידוד"},hidden:{title:"מאפיני שדה חבוי",name:"שם",value:"ערך"},select:{title:"מאפייני שדה בחירה",selectInfo:"מידע",opAvail:"אפשרויות זמינות",value:"ערך", -size:"גודל",lines:"שורות",chkMulti:"איפשור בחירות מרובות",opText:"טקסט",opValue:"ערך",btnAdd:"הוספה",btnModify:"שינוי",btnUp:"למעלה",btnDown:"למטה",btnSetValue:"קביעה כברירת מחדל",btnDelete:"מחיקה"},textarea:{title:"מאפייני איזור טקסט",cols:"עמודות",rows:"שורות"},textfield:{title:"מאפייני שדה טקסט",name:"שם",value:"ערך",charWidth:"רוחב לפי תווים",maxChars:"מקסימום תווים",type:"סוג",typeText:"טקסט",typePass:"סיסמה",typeEmail:'דוא"ל',typeSearch:"חיפוש",typeTel:"מספר טלפון",typeUrl:"כתובת (URL)"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hi.js deleted file mode 100644 index 28f074e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hi",{button:{title:"बटन प्रॉपर्टीज़",text:"टेक्स्ट (वैल्यू)",type:"प्रकार",typeBtn:"बटन",typeSbm:"सब्मिट",typeRst:"रिसेट"},checkboxAndRadio:{checkboxTitle:"चॅक बॉक्स प्रॉपर्टीज़",radioTitle:"रेडिओ बटन प्रॉपर्टीज़",value:"वैल्यू",selected:"सॅलॅक्टॅड"},form:{title:"फ़ॉर्म प्रॉपर्टीज़",menu:"फ़ॉर्म प्रॉपर्टीज़",action:"क्रिया",method:"तरीका",encoding:"Encoding"},hidden:{title:"गुप्त फ़ील्ड प्रॉपर्टीज़",name:"नाम",value:"वैल्यू"},select:{title:"चुनाव फ़ील्ड प्रॉपर्टीज़",selectInfo:"सूचना", -opAvail:"उपलब्ध विकल्प",value:"वैल्यू",size:"साइज़",lines:"पंक्तियाँ",chkMulti:"एक से ज्यादा विकल्प चुनने दें",opText:"टेक्स्ट",opValue:"वैल्यू",btnAdd:"जोड़ें",btnModify:"बदलें",btnUp:"ऊपर",btnDown:"नीचे",btnSetValue:"चुनी गई वैल्यू सॅट करें",btnDelete:"डिलीट"},textarea:{title:"टेक्स्त एरिया प्रॉपर्टीज़",cols:"कालम",rows:"पंक्तियां"},textfield:{title:"टेक्स्ट फ़ील्ड प्रॉपर्टीज़",name:"नाम",value:"वैल्यू",charWidth:"करॅक्टर की चौढ़ाई",maxChars:"अधिकतम करॅक्टर",type:"टाइप",typeText:"टेक्स्ट",typePass:"पास्वर्ड", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hr.js deleted file mode 100644 index 9965827c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hr",{button:{title:"Button svojstva",text:"Tekst (vrijednost)",type:"Vrsta",typeBtn:"Gumb",typeSbm:"Pošalji",typeRst:"Poništi"},checkboxAndRadio:{checkboxTitle:"Checkbox svojstva",radioTitle:"Radio Button svojstva",value:"Vrijednost",selected:"Odabrano"},form:{title:"Form svojstva",menu:"Form svojstva",action:"Akcija",method:"Metoda",encoding:"Encoding"},hidden:{title:"Hidden Field svojstva",name:"Ime",value:"Vrijednost"},select:{title:"Selection svojstva",selectInfo:"Info", -opAvail:"Dostupne opcije",value:"Vrijednost",size:"Veličina",lines:"linija",chkMulti:"Dozvoli višestruki odabir",opText:"Tekst",opValue:"Vrijednost",btnAdd:"Dodaj",btnModify:"Promijeni",btnUp:"Gore",btnDown:"Dolje",btnSetValue:"Postavi kao odabranu vrijednost",btnDelete:"Obriši"},textarea:{title:"Textarea svojstva",cols:"Kolona",rows:"Redova"},textfield:{title:"Text Field svojstva",name:"Ime",value:"Vrijednost",charWidth:"Širina",maxChars:"Najviše karaktera",type:"Vrsta",typeText:"Tekst",typePass:"Šifra", -typeEmail:"Email",typeSearch:"Traži",typeTel:"Broj telefona",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hu.js deleted file mode 100644 index 962606d8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/hu.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","hu",{button:{title:"Gomb tulajdonságai",text:"Szöveg (Érték)",type:"Típus",typeBtn:"Gomb",typeSbm:"Küldés",typeRst:"Alaphelyzet"},checkboxAndRadio:{checkboxTitle:"Jelölőnégyzet tulajdonságai",radioTitle:"Választógomb tulajdonságai",value:"Érték",selected:"Kiválasztott"},form:{title:"Űrlap tulajdonságai",menu:"Űrlap tulajdonságai",action:"Adatfeldolgozást végző hivatkozás",method:"Adatküldés módja",encoding:"Kódolás"},hidden:{title:"Rejtett mező tulajdonságai",name:"Név", -value:"Érték"},select:{title:"Legördülő lista tulajdonságai",selectInfo:"Alaptulajdonságok",opAvail:"Elérhető opciók",value:"Érték",size:"Méret",lines:"sor",chkMulti:"több sor is kiválasztható",opText:"Szöveg",opValue:"Érték",btnAdd:"Hozzáad",btnModify:"Módosít",btnUp:"Fel",btnDown:"Le",btnSetValue:"Legyen az alapértelmezett érték",btnDelete:"Töröl"},textarea:{title:"Szövegterület tulajdonságai",cols:"Karakterek száma egy sorban",rows:"Sorok száma"},textfield:{title:"Szövegmező tulajdonságai",name:"Név", -value:"Érték",charWidth:"Megjelenített karakterek száma",maxChars:"Maximális karakterszám",type:"Típus",typeText:"Szöveg",typePass:"Jelszó",typeEmail:"Ímél",typeSearch:"Keresés",typeTel:"Telefonszám",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/id.js deleted file mode 100644 index 7fdc87fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/id.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","id",{button:{title:"Button Properties",text:"Teks (Nilai)",type:"Tipe",typeBtn:"Tombol",typeSbm:"Menyerahkan",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Nilai",selected:"Terpilih"},form:{title:"Form Properties",menu:"Form Properties",action:"Aksi",method:"Metode",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Nama",value:"Nilai"},select:{title:"Selection Field Properties", -selectInfo:"Select Info",opAvail:"Available Options",value:"Nilai",size:"Ukuran",lines:"garis",chkMulti:"Izinkan pemilihan ganda",opText:"Teks",opValue:"Nilai",btnAdd:"Tambah",btnModify:"Modifikasi",btnUp:"Atas",btnDown:"Bawah",btnSetValue:"Set as selected value",btnDelete:"Hapus"},textarea:{title:"Textarea Properties",cols:"Kolom",rows:"Baris"},textfield:{title:"Text Field Properties",name:"Name",value:"Nilai",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Tipe",typeText:"Teks", -typePass:"Kata kunci",typeEmail:"Surel",typeSearch:"Cari",typeTel:"Nomor Telepon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/is.js deleted file mode 100644 index 7ca735ec..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/is.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","is",{button:{title:"Eigindi hnapps",text:"Texti",type:"Gerð",typeBtn:"Hnappur",typeSbm:"Staðfesta",typeRst:"Hreinsa"},checkboxAndRadio:{checkboxTitle:"Eigindi markreits",radioTitle:"Eigindi valhnapps",value:"Gildi",selected:"Valið"},form:{title:"Eigindi innsláttarforms",menu:"Eigindi innsláttarforms",action:"Aðgerð",method:"Aðferð",encoding:"Encoding"},hidden:{title:"Eigindi falins svæðis",name:"Nafn",value:"Gildi"},select:{title:"Eigindi lista",selectInfo:"Upplýsingar", -opAvail:"Kostir",value:"Gildi",size:"Stærð",lines:"línur",chkMulti:"Leyfa fleiri kosti",opText:"Texti",opValue:"Gildi",btnAdd:"Bæta við",btnModify:"Breyta",btnUp:"Upp",btnDown:"Niður",btnSetValue:"Merkja sem valið",btnDelete:"Eyða"},textarea:{title:"Eigindi textasvæðis",cols:"Dálkar",rows:"Línur"},textfield:{title:"Eigindi textareits",name:"Nafn",value:"Gildi",charWidth:"Breidd (leturtákn)",maxChars:"Hámarksfjöldi leturtákna",type:"Gerð",typeText:"Texti",typePass:"Lykilorð",typeEmail:"Email",typeSearch:"Search", -typeTel:"Telephone Number",typeUrl:"Vefslóð"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/it.js deleted file mode 100644 index 90f4f584..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/it.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","it",{button:{title:"Proprietà bottone",text:"Testo (Valore)",type:"Tipo",typeBtn:"Bottone",typeSbm:"Invio",typeRst:"Annulla"},checkboxAndRadio:{checkboxTitle:"Proprietà checkbox",radioTitle:"Proprietà radio button",value:"Valore",selected:"Selezionato"},form:{title:"Proprietà modulo",menu:"Proprietà modulo",action:"Azione",method:"Metodo",encoding:"Codifica"},hidden:{title:"Proprietà campo nascosto",name:"Nome",value:"Valore"},select:{title:"Proprietà menu di selezione", -selectInfo:"Info",opAvail:"Opzioni disponibili",value:"Valore",size:"Dimensione",lines:"righe",chkMulti:"Permetti selezione multipla",opText:"Testo",opValue:"Valore",btnAdd:"Aggiungi",btnModify:"Modifica",btnUp:"Su",btnDown:"Gi",btnSetValue:"Imposta come predefinito",btnDelete:"Rimuovi"},textarea:{title:"Proprietà area di testo",cols:"Colonne",rows:"Righe"},textfield:{title:"Proprietà campo di testo",name:"Nome",value:"Valore",charWidth:"Larghezza",maxChars:"Numero massimo di caratteri",type:"Tipo", -typeText:"Testo",typePass:"Password",typeEmail:"Email",typeSearch:"Cerca",typeTel:"Numero di telefono",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ja.js deleted file mode 100644 index 8e615cfd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ja",{button:{title:"ボタン プロパティ",text:"テキスト (値)",type:"タイプ",typeBtn:"ボタン",typeSbm:"送信",typeRst:"リセット"},checkboxAndRadio:{checkboxTitle:"チェックボックスのプロパティ",radioTitle:"ラジオボタンのプロパティ",value:"値",selected:"選択済み"},form:{title:"フォームのプロパティ",menu:"フォームのプロパティ",action:"アクション (action)",method:"メソッド (method)",encoding:"エンコード方式 (encoding)"},hidden:{title:"不可視フィールド プロパティ",name:"名前 (name)",value:"値 (value)"},select:{title:"選択フィールドのプロパティ",selectInfo:"情報",opAvail:"利用可能なオプション",value:"選択項目値", -size:"サイズ",lines:"行",chkMulti:"複数選択を許可",opText:"選択項目名",opValue:"値",btnAdd:"追加",btnModify:"編集",btnUp:"上へ",btnDown:"下へ",btnSetValue:"選択した値を設定",btnDelete:"削除"},textarea:{title:"テキストエリア プロパティ",cols:"列",rows:"行"},textfield:{title:"1行テキスト プロパティ",name:"名前",value:"値",charWidth:"サイズ",maxChars:"最大長",type:"タイプ",typeText:"テキスト",typePass:"パスワード入力",typeEmail:"メール",typeSearch:"検索",typeTel:"電話番号",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ka.js deleted file mode 100644 index 06b8131d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ka.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ka",{button:{title:"ღილაკის პარამეტრები",text:"ტექსტი",type:"ტიპი",typeBtn:"ღილაკი",typeSbm:"გაგზავნა",typeRst:"გასუფთავება"},checkboxAndRadio:{checkboxTitle:"მონიშვნის ღილაკის (Checkbox) პარამეტრები",radioTitle:"ასარჩევი ღილაკის (Radio) პარამეტრები",value:"ტექსტი",selected:"არჩეული"},form:{title:"ფორმის პარამეტრები",menu:"ფორმის პარამეტრები",action:"ქმედება",method:"მეთოდი",encoding:"კოდირება"},hidden:{title:"მალული ველის პარამეტრები",name:"სახელი",value:"მნიშვნელობა"}, -select:{title:"არჩევის ველის პარამეტრები",selectInfo:"ინფორმაცია",opAvail:"შესაძლებელი ვარიანტები",value:"მნიშვნელობა",size:"ზომა",lines:"ხაზები",chkMulti:"მრავლობითი არჩევანის საშუალება",opText:"ტექსტი",opValue:"მნიშვნელობა",btnAdd:"დამატება",btnModify:"შეცვლა",btnUp:"ზემოთ",btnDown:"ქვემოთ",btnSetValue:"ამორჩეულ მნიშვნელოვნად დაყენება",btnDelete:"წაშლა"},textarea:{title:"ტექსტური არის პარამეტრები",cols:"სვეტები",rows:"სტრიქონები"},textfield:{title:"ტექსტური ველის პარამეტრები",name:"სახელი",value:"მნიშვნელობა", -charWidth:"სიმბოლოს ზომა",maxChars:"ასოების მაქსიმალური ოდენობა",type:"ტიპი",typeText:"ტექსტი",typePass:"პაროლი",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/km.js deleted file mode 100644 index e9c1269d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/km.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","km",{button:{title:"លក្ខណៈ​ប៊ូតុង",text:"អត្ថបទ (តម្លៃ)",type:"ប្រភេទ",typeBtn:"ប៊ូតុង",typeSbm:"ដាក់ស្នើ",typeRst:"កំណត់​ឡើង​វិញ"},checkboxAndRadio:{checkboxTitle:"លក្ខណៈ​ប្រអប់​ធីក",radioTitle:"លក្ខនៈ​ប៊ូតុង​មូល",value:"តម្លៃ",selected:"បាន​ជ្រើស"},form:{title:"លក្ខណៈ​បែបបទ",menu:"លក្ខណៈ​បែបបទ",action:"សកម្មភាព",method:"វិធីសាស្ត្រ",encoding:"ការ​អ៊ិនកូដ"},hidden:{title:"លក្ខណៈ​វាល​កំបាំង",name:"ឈ្មោះ",value:"តម្លៃ"},select:{title:"លក្ខណៈ​វាល​ជម្រើស",selectInfo:"ព័ត៌មាន​ជម្រើស", -opAvail:"ជម្រើស​ដែល​មាន",value:"តម្លៃ",size:"ទំហំ",lines:"បន្ទាត់",chkMulti:"អនុញ្ញាត​ពហុ​ជម្រើស",opText:"អត្ថបទ",opValue:"តម្លៃ",btnAdd:"បន្ថែម",btnModify:"ផ្លាស់ប្តូរ",btnUp:"លើ",btnDown:"ក្រោម",btnSetValue:"កំណត់​ជា​តម្លៃ​ដែល​បាន​ជ្រើស",btnDelete:"លុប"},textarea:{title:"លក្ខណៈ​ប្រអប់​អត្ថបទ",cols:"ជួរឈរ",rows:"ជួរដេក"},textfield:{title:"លក្ខណៈ​វាល​អត្ថបទ",name:"ឈ្មោះ",value:"តម្លៃ",charWidth:"ទទឹង​តួ​អក្សរ",maxChars:"អក្សរអតិបរិមា",type:"ប្រភេទ",typeText:"អត្ថបទ",typePass:"ពាក្យសម្ងាត់",typeEmail:"អ៊ីមែល", -typeSearch:"ស្វែង​រក",typeTel:"លេខ​ទូរសព្ទ",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ko.js deleted file mode 100644 index 7e7ea054..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ko",{button:{title:"버튼 속성",text:"버튼글자(값)",type:"버튼종류",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"체크박스 속성",radioTitle:"라디오버튼 속성",value:"값",selected:"선택됨"},form:{title:"폼 속성",menu:"폼 속성",action:"실행경로(Action)",method:"방법(Method)",encoding:"Encoding"},hidden:{title:"숨김필드 속성",name:"이름",value:"값"},select:{title:"펼침목록 속성",selectInfo:"정보",opAvail:"선택옵션",value:"값",size:"세로크기",lines:"줄",chkMulti:"여러항목 선택 허용",opText:"이름",opValue:"값", -btnAdd:"추가",btnModify:"변경",btnUp:"위로",btnDown:"아래로",btnSetValue:"선택된것으로 설정",btnDelete:"삭제"},textarea:{title:"입력영역 속성",cols:"칸수",rows:"줄수"},textfield:{title:"입력필드 속성",name:"이름",value:"값",charWidth:"글자 너비",maxChars:"최대 글자수",type:"종류",typeText:"문자열",typePass:"비밀번호",typeEmail:"이메일",typeSearch:"검색",typeTel:"전화번호",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ku.js deleted file mode 100644 index 75599890..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ku.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ku",{button:{title:"خاسیەتی دوگمە",text:"(نرخی) دەق",type:"جۆر",typeBtn:"دوگمە",typeSbm:"بنێرە",typeRst:"ڕێکخستنەوە"},checkboxAndRadio:{checkboxTitle:"خاسیەتی چووارگۆشی پشکنین",radioTitle:"خاسیەتی جێگرەوەی دوگمە",value:"نرخ",selected:"هەڵبژاردرا"},form:{title:"خاسیەتی داڕشتە",menu:"خاسیەتی داڕشتە",action:"کردار",method:"ڕێگە",encoding:"بەکۆدکەر"},hidden:{title:"خاسیەتی خانەی شاردراوە",name:"ناو",value:"نرخ"},select:{title:"هەڵبژاردەی خاسیەتی خانە",selectInfo:"زانیاری", -opAvail:"هەڵبژاردەی لەبەردەستدابوون",value:"نرخ",size:"گەورەیی",lines:"هێڵەکان",chkMulti:"ڕێدان بەفره هەڵبژارده",opText:"دەق",opValue:"نرخ",btnAdd:"زیادکردن",btnModify:"گۆڕانکاری",btnUp:"سەرەوه",btnDown:"خوارەوە",btnSetValue:"دابنێ وەك نرخێکی هەڵبژێردراو",btnDelete:"سڕینەوه"},textarea:{title:"خاسیەتی ڕووبەری دەق",cols:"ستوونەکان",rows:"ڕیزەکان"},textfield:{title:"خاسیەتی خانەی دەق",name:"ناو",value:"نرخ",charWidth:"پانی نووسە",maxChars:"ئەوپەڕی نووسە",type:"جۆر",typeText:"دەق",typePass:"پێپەڕەوشە", -typeEmail:"ئیمەیل",typeSearch:"گەڕان",typeTel:"ژمارەی تەلەفۆن",typeUrl:"ناونیشانی بەستەر"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lt.js deleted file mode 100644 index 743b8307..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","lt",{button:{title:"Mygtuko savybės",text:"Tekstas (Reikšmė)",type:"Tipas",typeBtn:"Mygtukas",typeSbm:"Siųsti",typeRst:"Išvalyti"},checkboxAndRadio:{checkboxTitle:"Žymimojo langelio savybės",radioTitle:"Žymimosios akutės savybės",value:"Reikšmė",selected:"Pažymėtas"},form:{title:"Formos savybės",menu:"Formos savybės",action:"Veiksmas",method:"Metodas",encoding:"Kodavimas"},hidden:{title:"Nerodomo lauko savybės",name:"Vardas",value:"Reikšmė"},select:{title:"Atrankos lauko savybės", -selectInfo:"Informacija",opAvail:"Galimos parinktys",value:"Reikšmė",size:"Dydis",lines:"eilučių",chkMulti:"Leisti daugeriopą atranką",opText:"Tekstas",opValue:"Reikšmė",btnAdd:"Įtraukti",btnModify:"Modifikuoti",btnUp:"Aukštyn",btnDown:"Žemyn",btnSetValue:"Laikyti pažymėta reikšme",btnDelete:"Trinti"},textarea:{title:"Teksto srities savybės",cols:"Ilgis",rows:"Plotis"},textfield:{title:"Teksto lauko savybės",name:"Vardas",value:"Reikšmė",charWidth:"Ilgis simboliais",maxChars:"Maksimalus simbolių skaičius", -type:"Tipas",typeText:"Tekstas",typePass:"Slaptažodis",typeEmail:"El. paštas",typeSearch:"Paieška",typeTel:"Telefono numeris",typeUrl:"Nuoroda"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lv.js deleted file mode 100644 index 289cd6a8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/lv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","lv",{button:{title:"Pogas īpašības",text:"Teksts (vērtība)",type:"Tips",typeBtn:"Poga",typeSbm:"Nosūtīt",typeRst:"Atcelt"},checkboxAndRadio:{checkboxTitle:"Atzīmēšanas kastītes īpašības",radioTitle:"Izvēles poga īpašības",value:"Vērtība",selected:"Iezīmēts"},form:{title:"Formas īpašības",menu:"Formas īpašības",action:"Darbība",method:"Metode",encoding:"Kodējums"},hidden:{title:"Paslēptās teksta rindas īpašības",name:"Nosaukums",value:"Vērtība"},select:{title:"Iezīmēšanas lauka īpašības", -selectInfo:"Informācija",opAvail:"Pieejamās iespējas",value:"Vērtība",size:"Izmērs",lines:"rindas",chkMulti:"Atļaut vairākus iezīmējumus",opText:"Teksts",opValue:"Vērtība",btnAdd:"Pievienot",btnModify:"Veikt izmaiņas",btnUp:"Augšup",btnDown:"Lejup",btnSetValue:"Noteikt kā iezīmēto vērtību",btnDelete:"Dzēst"},textarea:{title:"Teksta laukuma īpašības",cols:"Kolonnas",rows:"Rindas"},textfield:{title:"Teksta rindas īpašības",name:"Nosaukums",value:"Vērtība",charWidth:"Simbolu platums",maxChars:"Simbolu maksimālais daudzums", -type:"Tips",typeText:"Teksts",typePass:"Parole",typeEmail:"Epasts",typeSearch:"Meklēt",typeTel:"Tālruņa numurs",typeUrl:"Adrese"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mk.js deleted file mode 100644 index 84837f53..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","mk",{button:{title:"Button Properties",text:"Text (Value)",type:"Type",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"Form Properties",menu:"Form Properties",action:"Action",method:"Method",encoding:"Encoding"},hidden:{title:"Hidden Field Properties",name:"Name",value:"Value"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Value",size:"Size",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"Delete"},textarea:{title:"Textarea Properties",cols:"Columns",rows:"Rows"},textfield:{title:"Text Field Properties",name:"Name",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"Type",typeText:"Text",typePass:"Password",typeEmail:"Email", -typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mn.js deleted file mode 100644 index 747b5eb6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/mn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","mn",{button:{title:"Товчны шинж чанар",text:"Тэкст (Утга)",type:"Төрөл",typeBtn:"Товч",typeSbm:"Submit",typeRst:"Болих"},checkboxAndRadio:{checkboxTitle:"Чекбоксны шинж чанар",radioTitle:"Радио товчны шинж чанар",value:"Утга",selected:"Сонгогдсон"},form:{title:"Форм шинж чанар",menu:"Форм шинж чанар",action:"Үйлдэл",method:"Арга",encoding:"Encoding"},hidden:{title:"Нууц талбарын шинж чанар",name:"Нэр",value:"Утга"},select:{title:"Согогч талбарын шинж чанар",selectInfo:"Мэдээлэл", -opAvail:"Идвэхтэй сонголт",value:"Утга",size:"Хэмжээ",lines:"Мөр",chkMulti:"Олон зүйл зэрэг сонгохыг зөвшөөрөх",opText:"Тэкст",opValue:"Утга",btnAdd:"Нэмэх",btnModify:"Өөрчлөх",btnUp:"Дээш",btnDown:"Доош",btnSetValue:"Сонгогдсан утга оноох",btnDelete:"Устгах"},textarea:{title:"Текст орчны шинж чанар",cols:"Багана",rows:"Мөр"},textfield:{title:"Текст талбарын шинж чанар",name:"Нэр",value:"Утга",charWidth:"Тэмдэгтын өргөн",maxChars:"Хамгийн их тэмдэгт",type:"Төрөл",typeText:"Текст",typePass:"Нууц үг", -typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"цахим хуудасны хаяг (URL)"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ms.js deleted file mode 100644 index fbf6b9f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ms.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ms",{button:{title:"Ciri-ciri Butang",text:"Teks (Nilai)",type:"Jenis",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Ciri-ciri Checkbox",radioTitle:"Ciri-ciri Butang Radio",value:"Nilai",selected:"Dipilih"},form:{title:"Ciri-ciri Borang",menu:"Ciri-ciri Borang",action:"Tindakan borang",method:"Cara borang dihantar",encoding:"Encoding"},hidden:{title:"Ciri-ciri Field Tersembunyi",name:"Nama",value:"Nilai"},select:{title:"Ciri-ciri Selection Field", -selectInfo:"Select Info",opAvail:"Pilihan sediada",value:"Nilai",size:"Saiz",lines:"garisan",chkMulti:"Benarkan pilihan pelbagai",opText:"Teks",opValue:"Nilai",btnAdd:"Tambah Pilihan",btnModify:"Ubah Pilihan",btnUp:"Naik ke atas",btnDown:"Turun ke bawah",btnSetValue:"Set sebagai nilai terpilih",btnDelete:"Padam"},textarea:{title:"Ciri-ciri Textarea",cols:"Lajur",rows:"Baris"},textfield:{title:"Ciri-ciri Text Field",name:"Nama",value:"Nilai",charWidth:"Lebar isian",maxChars:"Isian Maksimum",type:"Jenis", -typeText:"Teks",typePass:"Kata Laluan",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nb.js deleted file mode 100644 index 5874510b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nb.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","nb",{button:{title:"Egenskaper for knapp",text:"Tekst (verdi)",type:"Type",typeBtn:"Knapp",typeSbm:"Send",typeRst:"Nullstill"},checkboxAndRadio:{checkboxTitle:"Egenskaper for avmerkingsboks",radioTitle:"Egenskaper for alternativknapp",value:"Verdi",selected:"Valgt"},form:{title:"Egenskaper for skjema",menu:"Egenskaper for skjema",action:"Handling",method:"Metode",encoding:"Encoding"},hidden:{title:"Egenskaper for skjult felt",name:"Navn",value:"Verdi"},select:{title:"Egenskaper for rullegardinliste", -selectInfo:"Info",opAvail:"Tilgjenglige alternativer",value:"Verdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillat flervalg",opText:"Tekst",opValue:"Verdi",btnAdd:"Legg til",btnModify:"Endre",btnUp:"Opp",btnDown:"Ned",btnSetValue:"Sett som valgt",btnDelete:"Slett"},textarea:{title:"Egenskaper for tekstområde",cols:"Kolonner",rows:"Rader"},textfield:{title:"Egenskaper for tekstfelt",name:"Navn",value:"Verdi",charWidth:"Tegnbredde",maxChars:"Maks antall tegn",type:"Type",typeText:"Tekst",typePass:"Passord", -typeEmail:"Epost",typeSearch:"Søk",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nl.js deleted file mode 100644 index 5bff8285..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/nl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","nl",{button:{title:"Eigenschappen knop",text:"Tekst (waarde)",type:"Soort",typeBtn:"Knop",typeSbm:"Versturen",typeRst:"Leegmaken"},checkboxAndRadio:{checkboxTitle:"Eigenschappen aanvinkvakje",radioTitle:"Eigenschappen selectievakje",value:"Waarde",selected:"Geselecteerd"},form:{title:"Eigenschappen formulier",menu:"Eigenschappen formulier",action:"Actie",method:"Methode",encoding:"Codering"},hidden:{title:"Eigenschappen verborgen veld",name:"Naam",value:"Waarde"}, -select:{title:"Eigenschappen selectieveld",selectInfo:"Informatie",opAvail:"Beschikbare opties",value:"Waarde",size:"Grootte",lines:"Regels",chkMulti:"Gecombineerde selecties toestaan",opText:"Tekst",opValue:"Waarde",btnAdd:"Toevoegen",btnModify:"Wijzigen",btnUp:"Omhoog",btnDown:"Omlaag",btnSetValue:"Als geselecteerde waarde instellen",btnDelete:"Verwijderen"},textarea:{title:"Eigenschappen tekstvak",cols:"Kolommen",rows:"Rijen"},textfield:{title:"Eigenschappen tekstveld",name:"Naam",value:"Waarde", -charWidth:"Breedte (tekens)",maxChars:"Maximum aantal tekens",type:"Soort",typeText:"Tekst",typePass:"Wachtwoord",typeEmail:"E-mail",typeSearch:"Zoeken",typeTel:"Telefoonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/no.js deleted file mode 100644 index 07e20c4f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/no.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","no",{button:{title:"Egenskaper for knapp",text:"Tekst (verdi)",type:"Type",typeBtn:"Knapp",typeSbm:"Send",typeRst:"Nullstill"},checkboxAndRadio:{checkboxTitle:"Egenskaper for avmerkingsboks",radioTitle:"Egenskaper for alternativknapp",value:"Verdi",selected:"Valgt"},form:{title:"Egenskaper for skjema",menu:"Egenskaper for skjema",action:"Handling",method:"Metode",encoding:"Encoding"},hidden:{title:"Egenskaper for skjult felt",name:"Navn",value:"Verdi"},select:{title:"Egenskaper for rullegardinliste", -selectInfo:"Info",opAvail:"Tilgjenglige alternativer",value:"Verdi",size:"Størrelse",lines:"Linjer",chkMulti:"Tillat flervalg",opText:"Tekst",opValue:"Verdi",btnAdd:"Legg til",btnModify:"Endre",btnUp:"Opp",btnDown:"Ned",btnSetValue:"Sett som valgt",btnDelete:"Slett"},textarea:{title:"Egenskaper for tekstområde",cols:"Kolonner",rows:"Rader"},textfield:{title:"Egenskaper for tekstfelt",name:"Navn",value:"Verdi",charWidth:"Tegnbredde",maxChars:"Maks antall tegn",type:"Type",typeText:"Tekst",typePass:"Passord", -typeEmail:"Epost",typeSearch:"Søk",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pl.js deleted file mode 100644 index 8577d620..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pl",{button:{title:"Właściwości przycisku",text:"Tekst (Wartość)",type:"Typ",typeBtn:"Przycisk",typeSbm:"Wyślij",typeRst:"Wyczyść"},checkboxAndRadio:{checkboxTitle:"Właściwości pola wyboru (checkbox)",radioTitle:"Właściwości przycisku opcji (radio)",value:"Wartość",selected:"Zaznaczone"},form:{title:"Właściwości formularza",menu:"Właściwości formularza",action:"Akcja",method:"Metoda",encoding:"Kodowanie"},hidden:{title:"Właściwości pola ukrytego",name:"Nazwa",value:"Wartość"}, -select:{title:"Właściwości listy wyboru",selectInfo:"Informacje",opAvail:"Dostępne opcje",value:"Wartość",size:"Rozmiar",lines:"wierszy",chkMulti:"Wielokrotny wybór",opText:"Tekst",opValue:"Wartość",btnAdd:"Dodaj",btnModify:"Zmień",btnUp:"Do góry",btnDown:"Do dołu",btnSetValue:"Ustaw jako zaznaczoną",btnDelete:"Usuń"},textarea:{title:"Właściwości obszaru tekstowego",cols:"Liczba kolumn",rows:"Liczba wierszy"},textfield:{title:"Właściwości pola tekstowego",name:"Nazwa",value:"Wartość",charWidth:"Szerokość w znakach", -maxChars:"Szerokość maksymalna",type:"Typ",typeText:"Tekst",typePass:"Hasło",typeEmail:"Email",typeSearch:"Szukaj",typeTel:"Numer telefonu",typeUrl:"Adres URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt-br.js deleted file mode 100644 index 1fe748a5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt-br.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pt-br",{button:{title:"Formatar Botão",text:"Texto (Valor)",type:"Tipo",typeBtn:"Botão",typeSbm:"Enviar",typeRst:"Limpar"},checkboxAndRadio:{checkboxTitle:"Formatar Caixa de Seleção",radioTitle:"Formatar Botão de Opção",value:"Valor",selected:"Selecionado"},form:{title:"Formatar Formulário",menu:"Formatar Formulário",action:"Ação",method:"Método",encoding:"Codificação"},hidden:{title:"Formatar Campo Oculto",name:"Nome",value:"Valor"},select:{title:"Formatar Caixa de Listagem", -selectInfo:"Informações",opAvail:"Opções disponíveis",value:"Valor",size:"Tamanho",lines:"linhas",chkMulti:"Permitir múltiplas seleções",opText:"Texto",opValue:"Valor",btnAdd:"Adicionar",btnModify:"Modificar",btnUp:"Para cima",btnDown:"Para baixo",btnSetValue:"Definir como selecionado",btnDelete:"Remover"},textarea:{title:"Formatar Área de Texto",cols:"Colunas",rows:"Linhas"},textfield:{title:"Formatar Caixa de Texto",name:"Nome",value:"Valor",charWidth:"Comprimento (em caracteres)",maxChars:"Número Máximo de Caracteres", -type:"Tipo",typeText:"Texto",typePass:"Senha",typeEmail:"Email",typeSearch:"Busca",typeTel:"Número de Telefone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt.js deleted file mode 100644 index 7958d629..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","pt",{button:{title:"Propriedades do Botão",text:"Texto (Valor)",type:"Tipo",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Propriedades da Caixa de Verificação",radioTitle:"Propriedades do Botão de Opção",value:"Valor",selected:"Seleccionado"},form:{title:"Propriedades do Formulário",menu:"Propriedades do Formulário",action:"Acção",method:"Método",encoding:"Encoding"},hidden:{title:"Propriedades do Campo Escondido",name:"Nome", -value:"Valor"},select:{title:"Propriedades da Caixa de Combinação",selectInfo:"Informação",opAvail:"Opções Possíveis",value:"Valor",size:"Tamanho",lines:"linhas",chkMulti:"Permitir selecções múltiplas",opText:"Texto",opValue:"Valor",btnAdd:"Adicionar",btnModify:"Modificar",btnUp:"Para cima",btnDown:"Para baixo",btnSetValue:"Definir um valor por defeito",btnDelete:"Apagar"},textarea:{title:"Propriedades da Área de Texto",cols:"Colunas",rows:"Linhas"},textfield:{title:"Propriedades do Campo de Texto", -name:"Nome",value:"Valor",charWidth:"Tamanho do caracter",maxChars:"Nr. Máximo de Caracteres",type:"Tipo",typeText:"Texto",typePass:"Palavra-chave",typeEmail:"Email",typeSearch:"Pesquisar",typeTel:"Numero de telefone",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ro.js deleted file mode 100644 index 0db618b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ro.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ro",{button:{title:"Proprietăţi buton",text:"Text (Valoare)",type:"Tip",typeBtn:"Buton",typeSbm:"Trimite",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Proprietăţi bifă (Checkbox)",radioTitle:"Proprietăţi buton radio (Radio Button)",value:"Valoare",selected:"Selectat"},form:{title:"Proprietăţi formular (Form)",menu:"Proprietăţi formular (Form)",action:"Acţiune",method:"Metodă",encoding:"Encodare"},hidden:{title:"Proprietăţi câmp ascuns (Hidden Field)",name:"Nume", -value:"Valoare"},select:{title:"Proprietăţi câmp selecţie (Selection Field)",selectInfo:"Informaţii",opAvail:"Opţiuni disponibile",value:"Valoare",size:"Mărime",lines:"linii",chkMulti:"Permite selecţii multiple",opText:"Text",opValue:"Valoare",btnAdd:"Adaugă",btnModify:"Modifică",btnUp:"Sus",btnDown:"Jos",btnSetValue:"Setează ca valoare selectată",btnDelete:"Şterge"},textarea:{title:"Proprietăţi suprafaţă text (Textarea)",cols:"Coloane",rows:"Linii"},textfield:{title:"Proprietăţi câmp text (Text Field)", -name:"Nume",value:"Valoare",charWidth:"Lărgimea caracterului",maxChars:"Caractere maxime",type:"Tip",typeText:"Text",typePass:"Parolă",typeEmail:"Email",typeSearch:"Cauta",typeTel:"Numar de telefon",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ru.js deleted file mode 100644 index 534eb497..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ru.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ru",{button:{title:"Свойства кнопки",text:"Текст (Значение)",type:"Тип",typeBtn:"Кнопка",typeSbm:"Отправка",typeRst:"Сброс"},checkboxAndRadio:{checkboxTitle:"Свойства флаговой кнопки",radioTitle:"Свойства кнопки выбора",value:"Значение",selected:"Выбрано"},form:{title:"Свойства формы",menu:"Свойства формы",action:"Действие",method:"Метод",encoding:"Кодировка"},hidden:{title:"Свойства скрытого поля",name:"Имя",value:"Значение"},select:{title:"Свойства списка выбора", -selectInfo:"Информация о списке выбора",opAvail:"Доступные варианты",value:"Значение",size:"Размер",lines:"строк(и)",chkMulti:"Разрешить выбор нескольких вариантов",opText:"Текст",opValue:"Значение",btnAdd:"Добавить",btnModify:"Изменить",btnUp:"Поднять",btnDown:"Опустить",btnSetValue:"Пометить как выбранное",btnDelete:"Удалить"},textarea:{title:"Свойства многострочного текстового поля",cols:"Колонок",rows:"Строк"},textfield:{title:"Свойства текстового поля",name:"Имя",value:"Значение",charWidth:"Ширина поля (в символах)", -maxChars:"Макс. количество символов",type:"Тип содержимого",typeText:"Текст",typePass:"Пароль",typeEmail:"Email",typeSearch:"Поиск",typeTel:"Номер телефона",typeUrl:"Ссылка"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/si.js deleted file mode 100644 index ab61582f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/si.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","si",{button:{title:"බොත්තම් ගුණ",text:"වගන්තිය(වටිනාකම)",type:"වර්ගය",typeBtn:"බොත්තම",typeSbm:"යොමුකරනවා",typeRst:"නැවත ආරම්භකතත්වයට පත් කරනවා"},checkboxAndRadio:{checkboxTitle:"ලකුණු කිරීමේ කොටුවේ ලක්ෂණ",radioTitle:"Radio Button Properties",value:"Value",selected:"Selected"},form:{title:"පෝරමයේ ",menu:"පෝරමයේ ගුණ/",action:"ගන්නා පියවර",method:"ක්‍රමය",encoding:"කේතීකරණය"},hidden:{title:"සැඟවුණු ප්‍රදේශයේ ",name:"නම",value:"Value"},select:{title:"තේරීම් ප්‍රදේශයේ ", -selectInfo:"විස්තර තෝරන්න",opAvail:"ඉතුරුවී ඇති වීකල්ප",value:"Value",size:"විශාලත්වය",lines:"lines",chkMulti:"Allow multiple selections",opText:"Text",opValue:"Value",btnAdd:"Add",btnModify:"Modify",btnUp:"Up",btnDown:"Down",btnSetValue:"Set as selected value",btnDelete:"මකා දැම්ම"},textarea:{title:"Textarea Properties",cols:"සිරස් ",rows:"Rows"},textfield:{title:"Text Field Properties",name:"නම",value:"Value",charWidth:"Character Width",maxChars:"Maximum Characters",type:"වර්ගය",typeText:"Text", -typePass:"Password",typeEmail:"Email",typeSearch:"Search",typeTel:"Telephone Number",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sk.js deleted file mode 100644 index 218b6274..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sk",{button:{title:"Vlastnosti tlačidla",text:"Text (Hodnota)",type:"Typ",typeBtn:"Tlačidlo",typeSbm:"Odoslať",typeRst:"Resetovať"},checkboxAndRadio:{checkboxTitle:"Vlastnosti zaškrtávacieho políčka",radioTitle:"Vlastnosti prepínača (radio button)",value:"Hodnota",selected:"Vybrané (selected)"},form:{title:"Vlastnosti formulára",menu:"Vlastnosti formulára",action:"Akcia (action)",method:"Metóda (method)",encoding:"Kódovanie (encoding)"},hidden:{title:"Vlastnosti skrytého poľa", -name:"Názov (name)",value:"Hodnota"},select:{title:"Vlastnosti rozbaľovacieho zoznamu",selectInfo:"Informácie o výbere",opAvail:"Dostupné možnosti",value:"Hodnota",size:"Veľkosť",lines:"riadkov",chkMulti:"Povoliť viacnásobný výber",opText:"Text",opValue:"Hodnota",btnAdd:"Pridať",btnModify:"Upraviť",btnUp:"Hore",btnDown:"Dole",btnSetValue:"Nastaviť ako vybranú hodnotu",btnDelete:"Vymazať"},textarea:{title:"Vlastnosti textovej oblasti (textarea)",cols:"Stĺpcov",rows:"Riadkov"},textfield:{title:"Vlastnosti textového poľa", -name:"Názov (name)",value:"Hodnota",charWidth:"Šírka poľa (podľa znakov)",maxChars:"Maximálny počet znakov",type:"Typ",typeText:"Text",typePass:"Heslo",typeEmail:"Email",typeSearch:"Hľadať",typeTel:"Telefónne číslo",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sl.js deleted file mode 100644 index ad3bc43f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sl.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sl",{button:{title:"Lastnosti gumba",text:"Besedilo (Vrednost)",type:"Tip",typeBtn:"Gumb",typeSbm:"Potrdi",typeRst:"Ponastavi"},checkboxAndRadio:{checkboxTitle:"Lastnosti potrditvenega polja",radioTitle:"Lastnosti izbirnega polja",value:"Vrednost",selected:"Izbrano"},form:{title:"Lastnosti obrazca",menu:"Lastnosti obrazca",action:"Akcija",method:"Metoda",encoding:"Kodiranje znakov"},hidden:{title:"Lastnosti skritega polja",name:"Ime",value:"Vrednost"},select:{title:"Lastnosti spustnega seznama", -selectInfo:"Podatki",opAvail:"Razpoložljive izbire",value:"Vrednost",size:"Velikost",lines:"vrstic",chkMulti:"Dovoli izbor večih vrstic",opText:"Besedilo",opValue:"Vrednost",btnAdd:"Dodaj",btnModify:"Spremeni",btnUp:"Gor",btnDown:"Dol",btnSetValue:"Postavi kot privzeto izbiro",btnDelete:"Izbriši"},textarea:{title:"Lastnosti vnosnega območja",cols:"Stolpcev",rows:"Vrstic"},textfield:{title:"Lastnosti vnosnega polja",name:"Ime",value:"Vrednost",charWidth:"Dolžina",maxChars:"Največje število znakov", -type:"Tip",typeText:"Besedilo",typePass:"Geslo",typeEmail:"E-pošta",typeSearch:"Iskanje",typeTel:"Telefonska Številka",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sq.js deleted file mode 100644 index a8c45b47..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sq.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sq",{button:{title:"Rekuizitat e Pullës",text:"Teskti (Vlera)",type:"LLoji",typeBtn:"Buton",typeSbm:"Dërgo",typeRst:"Rikthe"},checkboxAndRadio:{checkboxTitle:"Rekuizitat e Kutizë Përzgjedhëse",radioTitle:"Rekuizitat e Pullës",value:"Vlera",selected:"Përzgjedhur"},form:{title:"Rekuizitat e Formës",menu:"Rekuizitat e Formës",action:"Veprim",method:"Metoda",encoding:"Kodimi"},hidden:{title:"Rekuizitat e Fushës së Fshehur",name:"Emër",value:"Vlera"},select:{title:"Rekuizitat e Fushës së Përzgjedhur", -selectInfo:"Përzgjidh Informacionin",opAvail:"Opsionet e Mundshme",value:"Vlera",size:"Madhësia",lines:"rreshtat",chkMulti:"Lejo përzgjidhje të shumëfishta",opText:"Teksti",opValue:"Vlera",btnAdd:"Vendos",btnModify:"Ndrysho",btnUp:"Sipër",btnDown:"Poshtë",btnSetValue:"Bëje si vlerë të përzgjedhur",btnDelete:"Grise"},textarea:{title:"Rekuzitat e Fushës së Tekstit",cols:"Kolonat",rows:"Rreshtat"},textfield:{title:"Rekuizitat e Fushës së Tekstit",name:"Emër",value:"Vlera",charWidth:"Gjerësia e Karakterit", -maxChars:"Numri maksimal i karaktereve",type:"LLoji",typeText:"Teksti",typePass:"Fjalëkalimi",typeEmail:"Posta Elektronike",typeSearch:"Kërko",typeTel:"Numri i Telefonit",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr-latn.js deleted file mode 100644 index af31d088..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr-latn.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sr-latn",{button:{title:"Osobine dugmeta",text:"Tekst (vrednost)",type:"Tip",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Osobine polja za potvrdu",radioTitle:"Osobine radio-dugmeta",value:"Vrednost",selected:"Označeno"},form:{title:"Osobine forme",menu:"Osobine forme",action:"Akcija",method:"Metoda",encoding:"Encoding"},hidden:{title:"Osobine skrivenog polja",name:"Naziv",value:"Vrednost"},select:{title:"Osobine izbornog polja", -selectInfo:"Info",opAvail:"Dostupne opcije",value:"Vrednost",size:"Veličina",lines:"linija",chkMulti:"Dozvoli višestruku selekciju",opText:"Tekst",opValue:"Vrednost",btnAdd:"Dodaj",btnModify:"Izmeni",btnUp:"Gore",btnDown:"Dole",btnSetValue:"Podesi kao označenu vrednost",btnDelete:"Obriši"},textarea:{title:"Osobine zone teksta",cols:"Broj kolona",rows:"Broj redova"},textfield:{title:"Osobine tekstualnog polja",name:"Naziv",value:"Vrednost",charWidth:"Širina (karaktera)",maxChars:"Maksimalno karaktera", -type:"Tip",typeText:"Tekst",typePass:"Lozinka",typeEmail:"Email",typeSearch:"Pretraži",typeTel:"Broj telefona",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr.js deleted file mode 100644 index 74d46b2d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sr",{button:{title:"Особине дугмета",text:"Текст (вредност)",type:"Tип",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Особине поља за потврду",radioTitle:"Особине радио-дугмета",value:"Вредност",selected:"Означено"},form:{title:"Особине форме",menu:"Особине форме",action:"Aкција",method:"Mетода",encoding:"Encoding"},hidden:{title:"Особине скривеног поља",name:"Назив",value:"Вредност"},select:{title:"Особине изборног поља",selectInfo:"Инфо", -opAvail:"Доступне опције",value:"Вредност",size:"Величина",lines:"линија",chkMulti:"Дозволи вишеструку селекцију",opText:"Текст",opValue:"Вредност",btnAdd:"Додај",btnModify:"Измени",btnUp:"Горе",btnDown:"Доле",btnSetValue:"Подеси као означену вредност",btnDelete:"Обриши"},textarea:{title:"Особине зоне текста",cols:"Број колона",rows:"Број редова"},textfield:{title:"Особине текстуалног поља",name:"Назив",value:"Вредност",charWidth:"Ширина (карактера)",maxChars:"Максимално карактера",type:"Тип",typeText:"Текст", -typePass:"Лозинка",typeEmail:"Е-пошта",typeSearch:"Претрага",typeTel:"Број телефона",typeUrl:"УРЛ"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sv.js deleted file mode 100644 index b03b381d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","sv",{button:{title:"Egenskaper för knapp",text:"Text (värde)",type:"Typ",typeBtn:"Knapp",typeSbm:"Skicka",typeRst:"Återställ"},checkboxAndRadio:{checkboxTitle:"Egenskaper för kryssruta",radioTitle:"Egenskaper för alternativknapp",value:"Värde",selected:"Vald"},form:{title:"Egenskaper för formulär",menu:"Egenskaper för formulär",action:"Funktion",method:"Metod",encoding:"Kodning"},hidden:{title:"Egenskaper för dolt fält",name:"Namn",value:"Värde"},select:{title:"Egenskaper för flervalslista", -selectInfo:"Information",opAvail:"Befintliga val",value:"Värde",size:"Storlek",lines:"Linjer",chkMulti:"Tillåt flerval",opText:"Text",opValue:"Värde",btnAdd:"Lägg till",btnModify:"Redigera",btnUp:"Upp",btnDown:"Ner",btnSetValue:"Markera som valt värde",btnDelete:"Radera"},textarea:{title:"Egenskaper för textruta",cols:"Kolumner",rows:"Rader"},textfield:{title:"Egenskaper för textfält",name:"Namn",value:"Värde",charWidth:"Teckenbredd",maxChars:"Max antal tecken",type:"Typ",typeText:"Text",typePass:"Lösenord", -typeEmail:"E-post",typeSearch:"Sök",typeTel:"Telefonnummer",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/th.js deleted file mode 100644 index e9337498..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/th.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","th",{button:{title:"รายละเอียดของ ปุ่ม",text:"ข้อความ (ค่าตัวแปร)",type:"ข้อความ",typeBtn:"Button",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"คุณสมบัติของ เช็คบ๊อก",radioTitle:"คุณสมบัติของ เรดิโอบัตตอน",value:"ค่าตัวแปร",selected:"เลือกเป็นค่าเริ่มต้น"},form:{title:"คุณสมบัติของ แบบฟอร์ม",menu:"คุณสมบัติของ แบบฟอร์ม",action:"แอคชั่น",method:"เมธอด",encoding:"Encoding"},hidden:{title:"คุณสมบัติของ ฮิดเดนฟิลด์",name:"ชื่อ",value:"ค่าตัวแปร"}, -select:{title:"คุณสมบัติของ แถบตัวเลือก",selectInfo:"อินโฟ",opAvail:"รายการตัวเลือก",value:"ค่าตัวแปร",size:"ขนาด",lines:"บรรทัด",chkMulti:"เลือกหลายค่าได้",opText:"ข้อความ",opValue:"ค่าตัวแปร",btnAdd:"เพิ่ม",btnModify:"แก้ไข",btnUp:"บน",btnDown:"ล่าง",btnSetValue:"เลือกเป็นค่าเริ่มต้น",btnDelete:"ลบ"},textarea:{title:"คุณสมบัติของ เท็กแอเรีย",cols:"สดมภ์",rows:"แถว"},textfield:{title:"คุณสมบัติของ เท็กซ์ฟิลด์",name:"ชื่อ",value:"ค่าตัวแปร",charWidth:"ความกว้าง",maxChars:"จำนวนตัวอักษรสูงสุด",type:"ชนิด", -typeText:"ข้อความ",typePass:"รหัสผ่าน",typeEmail:"อีเมล",typeSearch:"ค้นหาก",typeTel:"หมายเลขโทรศัพท์",typeUrl:"ที่อยู่อ้างอิง URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tr.js deleted file mode 100644 index 3710d318..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tr.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","tr",{button:{title:"Düğme Özellikleri",text:"Metin (Değer)",type:"Tip",typeBtn:"Düğme",typeSbm:"Gönder",typeRst:"Sıfırla"},checkboxAndRadio:{checkboxTitle:"Onay Kutusu Özellikleri",radioTitle:"Seçenek Düğmesi Özellikleri",value:"Değer",selected:"Seçili"},form:{title:"Form Özellikleri",menu:"Form Özellikleri",action:"İşlem",method:"Yöntem",encoding:"Kodlama"},hidden:{title:"Gizli Veri Özellikleri",name:"Ad",value:"Değer"},select:{title:"Seçim Menüsü Özellikleri",selectInfo:"Bilgi", -opAvail:"Mevcut Seçenekler",value:"Değer",size:"Boyut",lines:"satır",chkMulti:"Çoklu seçime izin ver",opText:"Metin",opValue:"Değer",btnAdd:"Ekle",btnModify:"Düzenle",btnUp:"Yukarı",btnDown:"Aşağı",btnSetValue:"Seçili değer olarak ata",btnDelete:"Sil"},textarea:{title:"Çok Satırlı Metin Özellikleri",cols:"Sütunlar",rows:"Satırlar"},textfield:{title:"Metin Girişi Özellikleri",name:"Ad",value:"Değer",charWidth:"Karakter Genişliği",maxChars:"En Fazla Karakter",type:"Tür",typeText:"Metin",typePass:"Şifre", -typeEmail:"E-posta",typeSearch:"Ara",typeTel:"Telefon Numarası",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tt.js deleted file mode 100644 index 2242a407..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/tt.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","tt",{button:{title:"Төймә үзлекләре",text:"Text (Value)",type:"Төр",typeBtn:"Төймә",typeSbm:"Submit",typeRst:"Reset"},checkboxAndRadio:{checkboxTitle:"Checkbox Properties",radioTitle:"Radio Button Properties",value:"Value",selected:"Сайланган"},form:{title:"Форма үзлекләре",menu:"Форма үзлекләре",action:"Гамәл",method:"Ысул",encoding:"Кодировка"},hidden:{title:"Яшерен кыр үзлекләре",name:"Исем",value:"Күләм"},select:{title:"Selection Field Properties",selectInfo:"Select Info", -opAvail:"Available Options",value:"Күләм",size:"Зурлык",lines:"юллар",chkMulti:"Allow multiple selections",opText:"Текст",opValue:"Күләм",btnAdd:"Кушу",btnModify:"Үзгәртү",btnUp:"Өскә",btnDown:"Аска",btnSetValue:"Set as selected value",btnDelete:"Бетерү"},textarea:{title:"Текст мәйданы үзлекләре",cols:"Баганалар",rows:"Юллар"},textfield:{title:"Текст кыры үзлекләре",name:"Исем",value:"Күләм",charWidth:"Символлар киңлеге",maxChars:"Maximum Characters",type:"Төр",typeText:"Текст",typePass:"Сер сүз", -typeEmail:"Эл. почта",typeSearch:"Эзләү",typeTel:"Телефон номеры",typeUrl:"Сылталама"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ug.js deleted file mode 100644 index 9ff3eeeb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/ug.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","ug",{button:{title:"توپچا خاسلىقى",text:"بەلگە (قىممەت)",type:"تىپى",typeBtn:"توپچا",typeSbm:"تاپشۇر",typeRst:"ئەسلىگە قايتۇر"},checkboxAndRadio:{checkboxTitle:"كۆپ تاللاش خاسلىقى",radioTitle:"تاق تاللاش توپچا خاسلىقى",value:"تاللىغان قىممەت",selected:"تاللانغان"},form:{title:"جەدۋەل خاسلىقى",menu:"جەدۋەل خاسلىقى",action:"مەشغۇلات",method:"ئۇسۇل",encoding:"جەدۋەل كودلىنىشى"},hidden:{title:"يوشۇرۇن دائىرە خاسلىقى",name:"ئات",value:"دەسلەپكى قىممىتى"},select:{title:"جەدۋەل/تىزىم خاسلىقى", -selectInfo:"ئۇچۇر تاللاڭ",opAvail:"تاللاش تۈرلىرى",value:"قىممەت",size:"ئېگىزلىكى",lines:"قۇر",chkMulti:"كۆپ تاللاشچان",opText:"تاللانما تېكىستى",opValue:"تاللانما قىممىتى",btnAdd:"قوش",btnModify:"ئۆزگەرت",btnUp:"ئۈستىگە",btnDown:"ئاستىغا",btnSetValue:"دەسلەپكى تاللانما قىممىتىگە تەڭشە",btnDelete:"ئۆچۈر"},textarea:{title:" كۆپ قۇرلۇق تېكىست خاسلىقى",cols:"ھەرپ كەڭلىكى",rows:"قۇر سانى"},textfield:{title:"تاق قۇرلۇق تېكىست خاسلىقى",name:"ئات",value:"دەسلەپكى قىممىتى",charWidth:"ھەرپ كەڭلىكى",maxChars:"ئەڭ كۆپ ھەرپ سانى", -type:"تىپى",typeText:"تېكىست",typePass:"ئىم",typeEmail:"تورخەت",typeSearch:"ئىزدە",typeTel:"تېلېفون نومۇر",typeUrl:"ئادرېس"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/uk.js deleted file mode 100644 index 317d57f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/uk.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","uk",{button:{title:"Властивості кнопки",text:"Значення",type:"Тип",typeBtn:"Кнопка (button)",typeSbm:"Надіслати (submit)",typeRst:"Очистити (reset)"},checkboxAndRadio:{checkboxTitle:"Властивості галочки",radioTitle:"Властивості кнопки вибору",value:"Значення",selected:"Обрана"},form:{title:"Властивості форми",menu:"Властивості форми",action:"Дія",method:"Метод",encoding:"Кодування"},hidden:{title:"Властивості прихованого поля",name:"Ім'я",value:"Значення"},select:{title:"Властивості списку", -selectInfo:"Інфо",opAvail:"Доступні варіанти",value:"Значення",size:"Кількість",lines:"видимих позицій у списку",chkMulti:"Список з мультивибором",opText:"Текст",opValue:"Значення",btnAdd:"Добавити",btnModify:"Змінити",btnUp:"Вгору",btnDown:"Вниз",btnSetValue:"Встановити як обране значення",btnDelete:"Видалити"},textarea:{title:"Властивості текстової області",cols:"Стовбці",rows:"Рядки"},textfield:{title:"Властивості текстового поля",name:"Ім'я",value:"Значення",charWidth:"Ширина",maxChars:"Макс. к-ть символів", -type:"Тип",typeText:"Текст",typePass:"Пароль",typeEmail:"Пошта",typeSearch:"Пошук",typeTel:"Мобільний",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/vi.js deleted file mode 100644 index a02d09c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/vi.js +++ /dev/null @@ -1,3 +0,0 @@ -CKEDITOR.plugins.setLang("forms","vi",{button:{title:"Thuộc tính của nút",text:"Chuỗi hiển thị (giá trị)",type:"Kiểu",typeBtn:"Nút bấm",typeSbm:"Nút gửi",typeRst:"Nút nhập lại"},checkboxAndRadio:{checkboxTitle:"Thuộc tính nút kiểm",radioTitle:"Thuộc tính nút chọn",value:"Giá trị",selected:"Được chọn"},form:{title:"Thuộc tính biểu mẫu",menu:"Thuộc tính biểu mẫu",action:"Hành động",method:"Phương thức",encoding:"Bảng mã"},hidden:{title:"Thuộc tính trường ẩn",name:"Tên",value:"Giá trị"},select:{title:"Thuộc tính ô chọn", -selectInfo:"Thông tin",opAvail:"Các tùy chọn có thể sử dụng",value:"Giá trị",size:"Kích cỡ",lines:"dòng",chkMulti:"Cho phép chọn nhiều",opText:"Văn bản",opValue:"Giá trị",btnAdd:"Thêm",btnModify:"Thay đổi",btnUp:"Lên",btnDown:"Xuống",btnSetValue:"Giá trị được chọn",btnDelete:"Nút xoá"},textarea:{title:"Thuộc tính vùng văn bản",cols:"Số cột",rows:"Số hàng"},textfield:{title:"Thuộc tính trường văn bản",name:"Tên",value:"Giá trị",charWidth:"Độ rộng của ký tự",maxChars:"Số ký tự tối đa",type:"Kiểu",typeText:"Ký tự", -typePass:"Mật khẩu",typeEmail:"Email",typeSearch:"Tìm kiếm",typeTel:"Số điện thoại",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh-cn.js deleted file mode 100644 index 3c7ea105..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","zh-cn",{button:{title:"按钮属性",text:"标签(值)",type:"类型",typeBtn:"按钮",typeSbm:"提交",typeRst:"重设"},checkboxAndRadio:{checkboxTitle:"复选框属性",radioTitle:"单选按钮属性",value:"选定值",selected:"已勾选"},form:{title:"表单属性",menu:"表单属性",action:"动作",method:"方法",encoding:"表单编码"},hidden:{title:"隐藏域属性",name:"名称",value:"初始值"},select:{title:"菜单/列表属性",selectInfo:"选择信息",opAvail:"可选项",value:"值",size:"高度",lines:"行",chkMulti:"允许多选",opText:"选项文本",opValue:"选项值",btnAdd:"添加",btnModify:"修改",btnUp:"上移",btnDown:"下移", -btnSetValue:"设为初始选定",btnDelete:"删除"},textarea:{title:"多行文本属性",cols:"字符宽度",rows:"行数"},textfield:{title:"单行文本属性",name:"名称",value:"初始值",charWidth:"字符宽度",maxChars:"最多字符数",type:"类型",typeText:"文本",typePass:"密码",typeEmail:"Email",typeSearch:"搜索",typeTel:"电话号码",typeUrl:"地址"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh.js deleted file mode 100644 index 4eec674e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("forms","zh",{button:{title:"按鈕內容",text:"顯示文字 (值)",type:"類型",typeBtn:"按鈕",typeSbm:"送出",typeRst:"重設"},checkboxAndRadio:{checkboxTitle:"核取方塊內容",radioTitle:"選項按鈕內容",value:"數值",selected:"已選"},form:{title:"表單內容",menu:"表單內容",action:"動作",method:"方式",encoding:"編碼"},hidden:{title:"隱藏欄位內容",name:"名稱",value:"數值"},select:{title:"選取欄位內容",selectInfo:"選擇資訊",opAvail:"可用選項",value:"數值",size:"大小",lines:"行數",chkMulti:"允許多選",opText:"文字",opValue:"數值",btnAdd:"新增",btnModify:"修改",btnUp:"向上",btnDown:"向下", -btnSetValue:"設為已選",btnDelete:"刪除"},textarea:{title:"文字區域內容",cols:"列",rows:"行"},textfield:{title:"文字欄位內容",name:"名字",value:"數值",charWidth:"字元寬度",maxChars:"最大字元數",type:"類型",typeText:"文字",typePass:"密碼",typeEmail:"電子郵件",typeSearch:"搜尋",typeTel:"電話號碼",typeUrl:"URL"}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/forms/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/forms/plugin.js deleted file mode 100644 index 5a1ffae7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/forms/plugin.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("forms",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"button,checkbox,form,hiddenfield,imagebutton,radio,select,select-rtl,textarea,textarea-rtl,textfield",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_editable form{border: 1px dotted #FF0000;padding: 2px;}\n"); -CKEDITOR.addCss("img.cke_hidden{background-image: url("+CKEDITOR.getUrl(this.path+"images/hiddenfield.gif")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 16px !important;height: 16px !important;}")},init:function(a){var b=a.lang,g=0,h={email:1,password:1,search:1,tel:1,text:1,url:1},j={checkbox:"input[type,name,checked]",radio:"input[type,name,checked]",textfield:"input[type,name,value,size,maxlength]",textarea:"textarea[cols,rows,name]",select:"select[name,size,multiple]; option[value,selected]", -button:"input[type,name,value]",form:"form[action,name,id,enctype,target,method]",hiddenfield:"input[type,name,value]",imagebutton:"input[type,alt,src]{width,height,border,border-width,border-style,margin,float}"},k={checkbox:"input",radio:"input",textfield:"input",textarea:"textarea",select:"select",button:"input",form:"form",hiddenfield:"input",imagebutton:"input"},e=function(d,c,e){var h={allowedContent:j[c],requiredContent:k[c]};"form"==c&&(h.context="form");a.addCommand(c,new CKEDITOR.dialogCommand(c, -h));a.ui.addButton&&a.ui.addButton(d,{label:b.common[d.charAt(0).toLowerCase()+d.slice(1)],command:c,toolbar:"forms,"+(g+=10)});CKEDITOR.dialog.add(c,e)},f=this.path+"dialogs/";!a.blockless&&e("Form","form",f+"form.js");e("Checkbox","checkbox",f+"checkbox.js");e("Radio","radio",f+"radio.js");e("TextField","textfield",f+"textfield.js");e("Textarea","textarea",f+"textarea.js");e("Select","select",f+"select.js");e("Button","button",f+"button.js");var i=a.plugins.image;i&&!a.plugins.image2&&e("ImageButton", -"imagebutton",CKEDITOR.plugins.getPath("image")+"dialogs/image.js");e("HiddenField","hiddenfield",f+"hiddenfield.js");a.addMenuItems&&(e={checkbox:{label:b.forms.checkboxAndRadio.checkboxTitle,command:"checkbox",group:"checkbox"},radio:{label:b.forms.checkboxAndRadio.radioTitle,command:"radio",group:"radio"},textfield:{label:b.forms.textfield.title,command:"textfield",group:"textfield"},hiddenfield:{label:b.forms.hidden.title,command:"hiddenfield",group:"hiddenfield"},button:{label:b.forms.button.title, -command:"button",group:"button"},select:{label:b.forms.select.title,command:"select",group:"select"},textarea:{label:b.forms.textarea.title,command:"textarea",group:"textarea"}},i&&(e.imagebutton={label:b.image.titleButton,command:"imagebutton",group:"imagebutton"}),!a.blockless&&(e.form={label:b.forms.form.menu,command:"form",group:"form"}),a.addMenuItems(e));a.contextMenu&&(!a.blockless&&a.contextMenu.addListener(function(d,c,a){if((d=a.contains("form",1))&&!d.isReadOnly())return{form:CKEDITOR.TRISTATE_OFF}}), -a.contextMenu.addListener(function(d){if(d&&!d.isReadOnly()){var c=d.getName();if(c=="select")return{select:CKEDITOR.TRISTATE_OFF};if(c=="textarea")return{textarea:CKEDITOR.TRISTATE_OFF};if(c=="input"){var a=d.getAttribute("type")||"text";switch(a){case "button":case "submit":case "reset":return{button:CKEDITOR.TRISTATE_OFF};case "checkbox":return{checkbox:CKEDITOR.TRISTATE_OFF};case "radio":return{radio:CKEDITOR.TRISTATE_OFF};case "image":return i?{imagebutton:CKEDITOR.TRISTATE_OFF}:null}if(h[a])return{textfield:CKEDITOR.TRISTATE_OFF}}if(c== -"img"&&d.data("cke-real-element-type")=="hiddenfield")return{hiddenfield:CKEDITOR.TRISTATE_OFF}}}));a.on("doubleclick",function(d){var c=d.data.element;if(!a.blockless&&c.is("form"))d.data.dialog="form";else if(c.is("select"))d.data.dialog="select";else if(c.is("textarea"))d.data.dialog="textarea";else if(c.is("img")&&c.data("cke-real-element-type")=="hiddenfield")d.data.dialog="hiddenfield";else if(c.is("input")){c=c.getAttribute("type")||"text";switch(c){case "button":case "submit":case "reset":d.data.dialog= -"button";break;case "checkbox":d.data.dialog="checkbox";break;case "radio":d.data.dialog="radio";break;case "image":d.data.dialog="imagebutton"}if(h[c])d.data.dialog="textfield"}})},afterInit:function(a){var b=a.dataProcessor,g=b&&b.htmlFilter,b=b&&b.dataFilter;CKEDITOR.env.ie&&g&&g.addRules({elements:{input:function(a){var a=a.attributes,b=a.type;b||(a.type="text");("checkbox"==b||"radio"==b)&&"on"==a.value&&delete a.value}}},{applyToAll:!0});b&&b.addRules({elements:{input:function(b){if("hidden"== -b.attributes.type)return a.createFakeParserElement(b,"cke_hidden","hiddenfield")}}},{applyToAll:!0})}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/icons.png b/platforms/browser/www/lib/ckeditor/plugins/icons.png deleted file mode 100644 index 163fd0def2d8c4d6a17c203e923dcff3ac512ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18271 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/icons_hidpi.png b/platforms/browser/www/lib/ckeditor/plugins/icons_hidpi.png deleted file mode 100644 index c181faa9e06422f5c4cb1468f6e99201e0291ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62881 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 P0zS&}>T(q_7D4|9<nUw{ diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js deleted file mode 100644 index dba1e930..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/dialogs/iframe.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}}; -CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&(a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type"))&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d= -{};this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]", -style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight, -"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder", -type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png b/platforms/browser/www/lib/ckeditor/plugins/iframe/icons/hidpi/iframe.png deleted file mode 100644 index ff17604da22bf1ecb420fa142dc5fd35d6c1356b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3091 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/icons/iframe.png b/platforms/browser/www/lib/ckeditor/plugins/iframe/icons/iframe.png deleted file mode 100644 index f72d191553f382efc7cab78ad1ec4eb13c4b446d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(>G5S#}JFtwUcdqUYClr&A-22*YHa-pMXzZkdSavrizKL?2fa( z3pIU?EaaQQC(-Pq=f`v8$iahWXUy1r=U~Y$J}&NZ;XR_A9bHKtoD=ID8o6FNX(njq z#<xdzOir(#SA1@Ev5(#S;}Xq>A0BvHcKPz<!~a9KMm_!XX;RwePL(&`H(Y;x^l4FI zPa%^$Q-9-j>pSZY_#X)NylytTx4WDB-Me=i-jw~Wf2e-I&qPXg_0=pn&-I?0rcIx| z*V)<mJyX3@^1K}}dVAvZ%XZ72e*DqqK;Cw1V`JlDVGfq6rh^I74WGGch*bUm@#DwQ zd-v|eS<TgBT>V|B|2Xp`hB?P(G+(`Xb!&#nuW}WkKpVMmqnR~)Q|{z_x1J<3>E7)- zcVgJTF)m-ie$dHi<{6J)3PPPzmMvdC)kEb;(ayYU*RIt~5wW(idi3N8i|5Azi$BsE z6gXE4UwYix+4;4xvGHxx+HWg@Rt9KIy>aW-t<IxK^O<M5Eq2^|bIHYwHNR^1-M3cU zKkLAzHJ3MU-mK}FfA-wDy6qb_eE9U{&6{-3$7{p7y_Oz&_)u|aP-oTNbEi&uU3yqB z$8ODq>(|5mmImc}IbB-b>GEiE(N3B7Z{L1p+&gK-)vP)5=U>j-?g^Cs^8NdCc^13* z@2eA5DH}{$HhtQ(IQFaqat2DBw{PG6eddwf{Cr=bE3Zr4+}!3domVL=Ej{}6tLegk z7l9Ts|I%w}Vq#-sndX&CG1Q21u<ToN{dL6Etf_P7&Sg$GBw_rl#Omd{cWKGVkJAbY z3@+!GNy^Hm78PycP3VziJ+|rQ8^^6ttxgLYRLa#R|76o(OrGmk<~g5-pMQJv!34)k z#}7yZoJ=vg?^Ptu#d_jtkw~|z%F(j&^6d>wA9!YXEx+uz|9<_39XodL)$snAdN!?o zqKLLwH!#q{n_~3J?LA{Ief#t0kJSeu3)WN9QvVv5n{U_4j1JlppkY&>HvhbGXW4Gw z)mIO_|6bkDZ`Cfu#Pa9j&tv-EzJJ%xHItr}n%MI&zSw^gXJLYyCoo&6mbgZgq$HN4 zS|t~y0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKyFXkTm4xr(~v8;?`jEllcfx xgCxj?;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RXAwzk>h( diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/images/placeholder.png b/platforms/browser/www/lib/ckeditor/plugins/iframe/images/placeholder.png deleted file mode 100644 index 4af09565523acc4a8416b138be66ecca52a4782b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmV+k0rvihP)<h;3K|Lk000e1NJLTq0027x000{V0{{R3FsJIa0000mP)t-s{{R60 z5fT3)BL6cp|3pOpRaO6HX8&nv|95x)h=~80ng6P)|IEz)-QEB0?*IS);XU_p0001# zNkl<ZD9>XkV88<k82JC=0SqHr`a!$_1M_DF2Alt%8SejPSbu;M$l*bfHvIqpv;04i z{|6lUe>3J!<oqm;q8lvzSM-0wA^qRX`p)Rm1`Iqv^YZ>H|K$G7!NmbG+#X$bL;o)Z z2G-x)N-|gt|HAb}?!Vz{?gSsK(*G1M`2U|Un|r|=kl~yoK0@(G<Ig1kmB??zED8`H P00000NkvXXu0mjfEk=Ep diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/af.js deleted file mode 100644 index 71eb910a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","af",{border:"Wys rand van raam",noUrl:"Gee die iframe URL",scrolling:"Skuifbalke aan",title:"IFrame Eienskappe",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ar.js deleted file mode 100644 index 8b90f6c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ar",{border:"إظهار حدود الإطار",noUrl:"فضلا أكتب رابط الـ iframe",scrolling:"تفعيل أشرطة الإنتقال",title:"خصائص iframe",toolbar:"iframe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bg.js deleted file mode 100644 index 23b9a7bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bg",{border:"Показва рамка на карето",noUrl:"Моля въведете URL за iFrame",scrolling:"Вкл. скролбаровете",title:"IFrame настройки",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bn.js deleted file mode 100644 index a7a9ee05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bs.js deleted file mode 100644 index f37043c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","bs",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ca.js deleted file mode 100644 index 18bddf5b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ca",{border:"Mostra la vora del marc",noUrl:"Si us plau, introdueixi la URL de l'iframe",scrolling:"Activa les barres de desplaçament",title:"Propietats de l'IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cs.js deleted file mode 100644 index 37b25fb6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","cs",{border:"Zobrazit okraj",noUrl:"Zadejte prosím URL obsahu pro IFrame",scrolling:"Zapnout posuvníky",title:"Vlastnosti IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cy.js deleted file mode 100644 index f8db6041..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","cy",{border:"Dangos ymyl y ffrâm",noUrl:"Rhowch URL yr iframe",scrolling:"Galluogi bariau sgrolio",title:"Priodweddau IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/da.js deleted file mode 100644 index 54115330..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","da",{border:"Vis kant på rammen",noUrl:"Venligst indsæt URL på iframen",scrolling:"Aktiver scrollbars",title:"Iframe egenskaber",toolbar:"Iframe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/de.js deleted file mode 100644 index 2556d571..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","de",{border:"Rahmen anzeigen",noUrl:"Bitte geben Sie die IFrame-URL an",scrolling:"Rollbalken anzeigen",title:"IFrame-Eigenschaften",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/el.js deleted file mode 100644 index cecba9bd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","el",{border:"Προβολή περιγράμματος πλαισίου",noUrl:"Παρακαλούμε εισάγεται το URL του iframe",scrolling:"Ενεργοποίηση μπαρών κύλισης",title:"Ιδιότητες IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-au.js deleted file mode 100644 index 8e2821f8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-au",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-ca.js deleted file mode 100644 index c25669ed..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-ca",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-gb.js deleted file mode 100644 index 214388d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en-gb",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en.js deleted file mode 100644 index 8d1407e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","en",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eo.js deleted file mode 100644 index a1855070..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","eo",{border:"Montri borderon de kadro (frame)",noUrl:"Bonvolu entajpi la retadreson de la ligilo al la enlinia kadro (IFrame)",scrolling:"Ebligi rulumskalon",title:"Atributoj de la enlinia kadro (IFrame)",toolbar:"Enlinia kadro (IFrame)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/es.js deleted file mode 100644 index 89e38510..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","es",{border:"Mostrar borde del marco",noUrl:"Por favor, escriba la dirección del iframe",scrolling:"Activar barras de desplazamiento",title:"Propiedades de iframe",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/et.js deleted file mode 100644 index 7cd5ec0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","et",{border:"Raami äärise näitamine",noUrl:"Vali iframe URLi liik",scrolling:"Kerimisribade lubamine",title:"IFrame omadused",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eu.js deleted file mode 100644 index f8b1cff1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","eu",{border:"Markoaren ertza ikusi",noUrl:"iframe-aren URLa idatzi, mesedez.",scrolling:"Korritze barrak gaitu",title:"IFrame-aren Propietateak",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fa.js deleted file mode 100644 index a6bd7ee6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fa",{border:"نمایش خطوط frame",noUrl:"لطفا مسیر URL iframe را درج کنید",scrolling:"نمایش خطکشها",title:"ویژگیهای IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fi.js deleted file mode 100644 index 2813efb0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fi",{border:"Näytä kehyksen reunat",noUrl:"Anna IFrame-kehykselle lähdeosoite (src)",scrolling:"Näytä vierityspalkit",title:"IFrame-kehyksen ominaisuudet",toolbar:"IFrame-kehys"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fo.js deleted file mode 100644 index 3ec97a07..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fo",{border:"Vís frame kant",noUrl:"Vinarliga skriva URL til iframe",scrolling:"Loyv scrollbars",title:"Møguleikar fyri IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js deleted file mode 100644 index 1a43ea6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fr-ca",{border:"Afficher la bordure du cadre",noUrl:"Veuillez entre l'URL du IFrame",scrolling:"Activer les barres de défilement",title:"Propriétés du IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr.js deleted file mode 100644 index c5bc58cb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","fr",{border:"Afficher une bordure de la IFrame",noUrl:"Veuillez entrer l'adresse du lien de la IFrame",scrolling:"Permettre à la barre de défilement",title:"Propriétés de la IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gl.js deleted file mode 100644 index 5326e33f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","gl",{border:"Amosar o bordo do marco",noUrl:"Escriba o enderezo do iframe",scrolling:"Activar as barras de desprazamento",title:"Propiedades do iFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gu.js deleted file mode 100644 index 0c6aed93..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","gu",{border:"ફ્રેમ બોર્ડેર બતાવવી",noUrl:"iframe URL ટાઈપ્ કરો",scrolling:"સ્ક્રોલબાર ચાલુ કરવા",title:"IFrame વિકલ્પો",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/he.js deleted file mode 100644 index 4c227775..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","he",{border:"הראה מסגרת לחלון",noUrl:"יש להכניס כתובת לחלון.",scrolling:"אפשר פסי גלילה",title:"מאפייני חלון פנימי (iframe)",toolbar:"חלון פנימי (iframe)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hi.js deleted file mode 100644 index 8699b826..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hi",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hr.js deleted file mode 100644 index 6cf8b838..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hr",{border:"Prikaži okvir IFrame-a",noUrl:"Unesite URL iframe-a",scrolling:"Omogući trake za skrolanje",title:"IFrame svojstva",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hu.js deleted file mode 100644 index 94bdf85e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","hu",{border:"Legyen keret",noUrl:"Kérem írja be a iframe URL-t",scrolling:"Gördítősáv bekapcsolása",title:"IFrame Tulajdonságok",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/id.js deleted file mode 100644 index 0db9a8ee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","id",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/is.js deleted file mode 100644 index bb669e8a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","is",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/it.js deleted file mode 100644 index 54f33bec..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","it",{border:"Mostra il bordo",noUrl:"Inserire l'URL del campo IFrame",scrolling:"Abilita scrollbar",title:"Proprietà IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ja.js deleted file mode 100644 index 039c5788..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ja",{border:"フレームの枠を表示",noUrl:"iframeのURLを入力してください。",scrolling:"スクロールバーの表示を許可",title:"iFrameのプロパティ",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ka.js deleted file mode 100644 index e8388990..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ka",{border:"ჩარჩოს გამოჩენა",noUrl:"აკრიფეთ iframe-ის URL",scrolling:"გადახვევის ზოლების დაშვება",title:"IFrame-ის პარამეტრები",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/km.js deleted file mode 100644 index 629c7831..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","km",{border:"បង្ហាញ​បន្ទាត់​ស៊ុម",noUrl:"សូម​បញ្ចូល URL របស់ iframe",scrolling:"ប្រើ​របារ​រំកិល",title:"លក្ខណៈ​សម្បត្តិ IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ko.js deleted file mode 100644 index fa6bc741..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ko",{border:"프레임 테두리 표시",noUrl:"iframe 대응 URL을 입력해주세요.",scrolling:"스크롤바 사용",title:"IFrame 속성",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ku.js deleted file mode 100644 index bc1ae360..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ku",{border:"نیشاندانی لاکێشه بە چوواردەوری چووارچێوە",noUrl:"تکایه ناونیشانی بەستەر بنووسه بۆ چووارچێوه",scrolling:"چالاککردنی هاتووچۆپێکردن",title:"دیالۆگی چووارچێوه",toolbar:"چووارچێوه"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lt.js deleted file mode 100644 index 20dee016..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","lt",{border:"Rodyti rėmelį",noUrl:"Nurodykite iframe nuorodą",scrolling:"Įjungti slankiklius",title:"IFrame nustatymai",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lv.js deleted file mode 100644 index b9db9432..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","lv",{border:"Rādīt rāmi",noUrl:"Norādiet iframe adresi",scrolling:"Atļaut ritjoslas",title:"IFrame uzstādījumi",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mk.js deleted file mode 100644 index a4dbb236..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","mk",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mn.js deleted file mode 100644 index f45cf054..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","mn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ms.js deleted file mode 100644 index 8ff5bc1b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ms",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nb.js deleted file mode 100644 index ec65e337..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","nb",{border:"Viss ramme rundt iframe",noUrl:"Vennligst skriv inn URL for iframe",scrolling:"Aktiver scrollefelt",title:"Egenskaper for IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nl.js deleted file mode 100644 index 348ee0ec..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","nl",{border:"Framerand tonen",noUrl:"Vul de IFrame URL in",scrolling:"Scrollbalken inschakelen",title:"IFrame-eigenschappen",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/no.js deleted file mode 100644 index 04a9241d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","no",{border:"Viss ramme rundt iframe",noUrl:"Vennligst skriv inn URL for iframe",scrolling:"Aktiver scrollefelt",title:"Egenskaper for IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pl.js deleted file mode 100644 index d0859990..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pl",{border:"Pokaż obramowanie obiektu IFrame",noUrl:"Podaj adres URL elementu IFrame",scrolling:"Włącz paski przewijania",title:"Właściwości elementu IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt-br.js deleted file mode 100644 index 67100264..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pt-br",{border:"Mostra borda do iframe",noUrl:"Insira a URL do iframe",scrolling:"Abilita scrollbars",title:"Propriedade do IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt.js deleted file mode 100644 index 4ac51c5b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","pt",{border:"Mostrar a borda da Frame",noUrl:"Por favor, digite o URL da iframe",scrolling:"Ativar barras de deslocamento",title:"Propriedades da IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ro.js deleted file mode 100644 index d2ca21fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ro",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ru.js deleted file mode 100644 index 8691613d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ru",{border:"Показать границы фрейма",noUrl:"Пожалуйста, введите ссылку фрейма",scrolling:"Отображать полосы прокрутки",title:"Свойства iFrame",toolbar:"iFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/si.js deleted file mode 100644 index a0b2c1e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","si",{border:"සැකිල්ලේ කඩයිම් ",noUrl:"කරුණාකර රුපයේ URL ලියන්න",scrolling:"සක්ක්‍රිය කරන්න",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sk.js deleted file mode 100644 index 7685e8bf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sk",{border:"Zobraziť rám frame-u",noUrl:"Prosím, vložte URL iframe",scrolling:"Povoliť skrolovanie",title:"Vlastnosti IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sl.js deleted file mode 100644 index 7b79a792..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sl",{border:"Pokaži mejo okvira",noUrl:"Prosimo, vnesite iframe URL",scrolling:"Omogoči scrollbars",title:"IFrame Lastnosti",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sq.js deleted file mode 100644 index 4c66e350..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sq",{border:"Shfaq kufirin e kornizës",noUrl:"Ju lutemi shkruani URL-në e iframe-it",scrolling:"Lejo shiritët zvarritës",title:"Karakteristikat e IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js deleted file mode 100644 index 3d279456..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sr-latn",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr.js deleted file mode 100644 index e7d1c535..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sr",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sv.js deleted file mode 100644 index c8adee27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","sv",{border:"Visa ramkant",noUrl:"Skriv in URL för iFrame",scrolling:"Aktivera rullningslister",title:"iFrame Egenskaper",toolbar:"iFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/th.js deleted file mode 100644 index 6d876edf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","th",{border:"Show frame border",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame Properties",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tr.js deleted file mode 100644 index 9096f663..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","tr",{border:"Çerceve sınırlarını göster",noUrl:"Lütfen IFrame köprü (URL) bağlantısını yazın",scrolling:"Kaydırma çubuklarını aktif et",title:"IFrame Özellikleri",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tt.js deleted file mode 100644 index 586d3ae3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","tt",{border:"Frame чикләрен күрсәтү",noUrl:"Please type the iframe URL",scrolling:"Enable scrollbars",title:"IFrame үзлекләре",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ug.js deleted file mode 100644 index 156b972a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","ug",{border:"كاندۇك گىرۋەكلىرىنى كۆرسەت",noUrl:"كاندۇكنىڭ ئادرېسى(Url)نى كىرگۈزۈڭ",scrolling:"دومىلىما سۈرگۈچكە يول قوي",title:"IFrame خاسلىق",toolbar:"IFrame "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/uk.js deleted file mode 100644 index fe6660c3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","uk",{border:"Показати рамки фрейму",noUrl:"Будь ласка введіть посилання для IFrame",scrolling:"Увімкнути прокрутку",title:"Налаштування для IFrame",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/vi.js deleted file mode 100644 index 70340226..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","vi",{border:"Hiển thị viền khung",noUrl:"Vui lòng nhập địa chỉ iframe",scrolling:"Kích hoạt thanh cuộn",title:"Thuộc tính iframe",toolbar:"Iframe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js deleted file mode 100644 index 876c196b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","zh-cn",{border:"显示框架边框",noUrl:"请输入框架的 URL",scrolling:"允许滚动条",title:"IFrame 属性",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh.js deleted file mode 100644 index 5fdd10fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("iframe","zh",{border:"顯示框架框線",noUrl:"請輸入 iframe URL",scrolling:"啟用捲軸列",title:"IFrame 屬性",toolbar:"IFrame"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframe/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/iframe/plugin.js deleted file mode 100644 index eefa85c4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframe/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("iframe",{requires:"dialog,fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"iframe",hidpi:!0,onLoad:function(){CKEDITOR.addCss("img.cke_iframe{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")}, -init:function(a){var b=a.lang.iframe,c="iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]";a.plugins.dialogadvtab&&(c+=";iframe"+a.plugins.dialogadvtab.allowedContent({id:1,classes:1,styles:1}));CKEDITOR.dialog.add("iframe",this.path+"dialogs/iframe.js");a.addCommand("iframe",new CKEDITOR.dialogCommand("iframe",{allowedContent:c,requiredContent:"iframe"}));a.ui.addButton&&a.ui.addButton("Iframe",{label:b.toolbar,command:"iframe",toolbar:"insert,80"});a.on("doubleclick",function(a){var b= -a.data.element;b.is("img")&&"iframe"==b.data("cke-real-element-type")&&(a.data.dialog="iframe")});a.addMenuItems&&a.addMenuItems({iframe:{label:b.title,command:"iframe",group:"image"}});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&"iframe"==a.data("cke-real-element-type"))return{iframe:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{iframe:function(b){return a.createFakeParserElement(b,"cke_iframe","iframe", -!0)}}})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/iframedialog/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/iframedialog/plugin.js deleted file mode 100644 index 1d6addbd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/iframedialog/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("iframedialog",{requires:"dialog",onLoad:function(){CKEDITOR.dialog.addIframe=function(e,d,a,j,f,l,g){a={type:"iframe",src:a,width:"100%",height:"100%"};a.onContentLoad="function"==typeof l?l:function(){var a=this.getElement().$.contentWindow;if(a.onDialogEvent){var b=this.getDialog(),c=function(b){return a.onDialogEvent(b)};b.on("ok",c);b.on("cancel",c);b.on("resize",c);b.on("hide",function(a){b.removeListener("ok",c);b.removeListener("cancel",c);b.removeListener("resize",c); -a.removeListener()});a.onDialogEvent({name:"load",sender:this,editor:b._.editor})}};var h={title:d,minWidth:j,minHeight:f,contents:[{id:"iframe",label:d,expand:!0,elements:[a],style:"width:"+a.width+";height:"+a.height}]},i;for(i in g)h[i]=g[i];this.add(e,function(){return h})};(function(){var e=function(d,a,j){if(!(3>arguments.length)){var f=this._||(this._={}),e=a.onContentLoad&&CKEDITOR.tools.bind(a.onContentLoad,this),g=CKEDITOR.tools.cssLength(a.width),h=CKEDITOR.tools.cssLength(a.height);f.frameId= -CKEDITOR.tools.getNextId()+"_iframe";d.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().setStyles({width:g,height:h})});var i={src:"%2",id:f.frameId,frameborder:0,allowtransparency:!0},k=[];"function"==typeof a.onContentLoad&&(i.onload="CKEDITOR.tools.callFunction(%1);");CKEDITOR.ui.dialog.uiElement.call(this,d,a,k,"iframe",{width:g,height:h},i,"");j.push('<div style="width:'+g+";height:"+h+';" id="'+this.domId+'"></div>');k=k.join("");d.on("show",function(){var b=CKEDITOR.document.getById(f.frameId).getParent(), -c=CKEDITOR.tools.addFunction(e),c=k.replace("%1",c).replace("%2",CKEDITOR.tools.htmlEncode(a.src));b.setHtml(c)})}};e.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.dialog.addUIElement("iframe",{build:function(d,a,j){return new e(d,a,j)}})})()}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image/dialogs/image.js b/platforms/browser/www/lib/ckeditor/plugins/image/dialogs/image.js deleted file mode 100644 index c84ecdc3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image/dialogs/image.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var r=function(c,j){function r(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function i(a){if(!s){s=1;var b=this.getDialog(),d=b.imageElement;if(d){this.commit(f,d);for(var a=[].concat(a),e=a.length,c,g=0;g<e;g++)(c=b.getContentElement.apply(b,a[g].split(":")))&&c.setup(f,d)}s=0}}var f=1,k=/^\s*(\d+)((px)|\%)?\s*$/i,v=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,o=/^\d+px$/, -w=function(){var a=this.getValue(),b=this.getDialog(),d=a.match(k);d&&("%"==d[2]&&l(b,!1),a=d[1]);b.lockRatio&&(d=b.originalElement,"true"==d.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(d.$.width*(a/d.$.height))),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(d.$.height*(a/d.$.width))),isNaN(a)||b.setValueOf("info","txtHeight",a))));g(b)},g=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},s,l=function(a, -b){if(!a.getContentElement("info","ratioLock"))return null;var d=a.originalElement;if(!d)return null;if("check"==b){if(!a.userlockRatio&&"true"==d.getCustomData("isReady")){var e=a.getValueOf("info","txtWidth"),c=a.getValueOf("info","txtHeight"),d=1E3*d.$.width/d.$.height,f=1E3*e/c;a.lockRatio=!1;!e&&!c?a.lockRatio=!0:!isNaN(d)&&!isNaN(f)&&Math.round(d)==Math.round(f)&&(a.lockRatio=!0)}}else void 0!=b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);e=CKEDITOR.document.getById(p);a.lockRatio? -e.removeClass("cke_btn_unlocked"):e.addClass("cke_btn_unlocked");e.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&e.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢");return a.lockRatio},x=function(a){var b=a.originalElement;if("true"==b.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),e=a.getContentElement("info","txtHeight");d&&d.setValue(b.$.width);e&&e.setValue(b.$.height)}g(a)},y=function(a,b){function d(a,b){var d=a.match(k);return d? -("%"==d[2]&&(d[1]+="%",l(e,!1)),d[1]):b}if(a==f){var e=this.getDialog(),c="",g="txtWidth"==this.id?"width":"height",h=b.getAttribute(g);h&&(c=d(h,c));c=d(b.getStyle(g),c);this.setValue(c)}},t,q=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.setCustomData("isReady","true");a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);b&&b.setStyle("display","none");this.dontResetSize||x(this);this.firstLoad&&CKEDITOR.tools.setTimeout(function(){l(this,"check")}, -0,this);this.dontResetSize=this.firstLoad=!1},h=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);b&&b.setStyle("display","none");l(this,!1)},n=function(a){return CKEDITOR.tools.getNextId()+"_"+a},p=n("btnLockSizes"),u=n("btnResetSize"),m=n("ImagePreviewLoader"),A=n("previewLink"), -z=n("previewImage");return{title:c.lang.image["image"==j?"title":"titleButton"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),d=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",1),c=CKEDITOR.document.getById(m);c&&c.setStyle("display","none");t=new CKEDITOR.dom.element("img", -a.document);this.preview=CKEDITOR.document.getById(z);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");if(d){this.linkElement=d;this.linkEditMode=!0;c=d.getChildren();if(1==c.count()){var g=c.getItem(0).getName();if("img"==g||"input"==g)this.imageElement=c.getItem(0),"img"==this.imageElement.getName()?this.imageEditMode="img":"input"==this.imageElement.getName()&&(this.imageEditMode="input")}"image"== -j&&this.setupContent(2,d)}if(this.customImageElement)this.imageEditMode="img",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode?(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(f,this.imageElement)):this.imageElement=a.document.createElement("img"); -l(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display","none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==j&&"input"==a&&confirm(c.lang.image.button2Img)?(this.imageElement=c.document.createElement("img"),this.imageElement.setAttribute("alt",""),c.insertElement(this.imageElement)):"image"!=j&&"img"==a&&confirm(c.lang.image.img2Button)?(this.imageElement=c.document.createElement("input"), -this.imageElement.setAttributes({type:"image",alt:""}),c.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==j?this.imageElement=c.document.createElement("img"):(this.imageElement=c.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=c.document.createElement("a"));this.commitContent(f,this.imageElement);this.commitContent(2,this.linkElement); -this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(c.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(c.getSelection().selectElement(this.linkElement),c.insertElement(this.imageElement)):this.addLink?this.linkEditMode?c.insertElement(this.imageElement):(c.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):c.insertElement(this.imageElement)}, -onLoad:function(){"image"!=j&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(u),5),this.addFocusable(a.getById(p),5));this.commitContent=r},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener("load",q),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement= -!1);delete this.imageElement},contents:[{id:"info",label:c.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",children:[{id:"txtUrl",type:"text",label:c.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),d=a.originalElement;a.preview&&a.preview.removeStyle("display");d.setCustomData("isReady","false");var c=CKEDITOR.document.getById(m);c&&c.setStyle("display", -"");d.on("load",q,a);d.on("error",h,a);d.on("abort",h,a);d.setAttribute("src",b);a.preview&&(t.setAttribute("src",b),a.preview.setAttribute("src",t.$.src),g(a))}else a.preview&&(a.preview.removeAttribute("src"),a.preview.setStyle("display","none"))},setup:function(a,b){if(a==f){var d=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(d);this.setInitValue()}},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()), -b.setAttribute("src",this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(c.lang.image.urlMissing)},{type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",align:"center",label:c.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:c.lang.image.alt,accessKey:"T","default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("alt"))}, -commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",requiredContent:"img{width,height}",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"45px",id:"txtWidth",label:c.lang.common.width,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a= -this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidWidth);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("width",CKEDITOR.tools.cssLength(e)):b.removeStyle("width"),!d&&b.removeAttribute("width")):4==a?e.match(k)?b.setStyle("width",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("width",a.$.width+"px")):8==a&&(b.removeAttribute("width"), -b.removeStyle("width"))}},{type:"text",id:"txtHeight",width:"45px",label:c.lang.common.height,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidHeight);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("height",CKEDITOR.tools.cssLength(e)):b.removeStyle("height"),!d&&b.removeAttribute("height")): -4==a?e.match(k)?b.setStyle("height",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("height",a.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",type:"html",style:"margin-top:30px;width:40px;height:40px;",onLoad:function(){var a=CKEDITOR.document.getById(u),b=CKEDITOR.document.getById(p);a&&(a.on("click",function(a){x(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover", -function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")},a));b&&(b.on("click",function(a){l(this);var b=this.originalElement,c=this.getValueOf("info","txtWidth");if(b.getCustomData("isReady")=="true"&&c){b=b.$.height/b.$.width*c;if(!isNaN(b)){this.setValueOf("info","txtHeight",Math.round(b));g(this)}}a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")}, -b))},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.lockRatio+'" class="cke_btn_locked" id="'+p+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+c.lang.image.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.resetSize+'" class="cke_btn_reset" id="'+u+'" role="button"><span class="cke_label">'+c.lang.image.resetSize+"</span></a></div>"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}", -width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&& -this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this, -"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")): -(b.setStyle("margin-left",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(c))),!d&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace), -setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))), -!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float"); -switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"<div>"+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+ -'<br><div id="'+m+'" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div><div class="ImagePreviewBox"><table><tr><td><a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'"><img id="'+z+'" alt="" /></a>'+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ -"</td></tr></table></div></div>"}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=this.getValue();b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= -!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| -"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], -children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))}, -commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))}, -commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle, -"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a, -b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}}; -CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image/images/noimage.png b/platforms/browser/www/lib/ckeditor/plugins/image/images/noimage.png deleted file mode 100644 index 159811305af7fc78662a53949f9c62bd702785af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2115 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/dialogs/image2.js b/platforms/browser/www/lib/ckeditor/plugins/image2/dialogs/image2.js deleted file mode 100644 index 9b9b9028..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/dialogs/image2.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("image2",function(j){function z(){var a=this.getValue().match(A);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c["invalid"+CKEDITOR.tools.capitalize(this.id)]);return a}function K(){function a(a,b){d.push(i.once(a,function(a){for(var i;i=d.pop();)i.removeListener();b(a)}))}var i=p.createElement("img"),d=[];return function(d,b,c){a("load",function(){var a=B(i);b.call(c,i,a.width,a.height)});a("error",function(){b(null)});a("abort",function(){b(null)});i.setAttribute("src",(t.baseHref|| -"")+d+"?"+Math.random().toString(16).substring(2))}}function C(){var a=this.getValue();q(!1);a!==u.data.src?(D(a,function(a,d,b){q(!0);if(!a)return k(!1);g.setValue(d);h.setValue(b);r=d;s=b;k(E.checkHasNaturalRatio(a))}),l=!0):l?(q(!0),g.setValue(m),h.setValue(n),l=!1):q(!0)}function F(){if(e){var a=this.getValue();if(a&&(a.match(A)||k(!1),"0"!==a)){var b="width"==this.id,d=m||r,c=n||s,a=b?Math.round(c*(a/d)):Math.round(d*(a/c));isNaN(a)||(b?h:g).setValue(a)}}}function k(a){if(f){if("boolean"==typeof a){if(v)return; -e=a}else if(a=g.getValue(),v=!0,(e=!e)&&a)a*=n/m,isNaN(a)||h.setValue(Math.round(a));f[e?"removeClass":"addClass"]("cke_btn_unlocked");f.setAttribute("aria-checked",e);CKEDITOR.env.hc&&f.getChild(0).setHtml(e?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢")}}function q(a){a=a?"enable":"disable";g[a]();h[a]()}var A=/(^\s*(\d+)(px)?\s*$)|^$/i,G=CKEDITOR.tools.getNextId(),H=CKEDITOR.tools.getNextId(),b=j.lang.image2,c=j.lang.common,L=(new CKEDITOR.template('<div><a href="javascript:void(0)" tabindex="-1" title="'+ -b.lockRatio+'" class="cke_btn_locked" id="{lockButtonId}" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+b.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+b.resetSize+'" class="cke_btn_reset" id="{resetButtonId}" role="button"><span class="cke_label">'+b.resetSize+"</span></a></div>")).output({lockButtonId:G,resetButtonId:H}),E=CKEDITOR.plugins.image2,t=j.config,w=j.widgets.registered.image.features,B=E.getNatural,p,u,I,D,m,n,r,s,l,e,v,f,o,g,h,x, -y=!(!t.filebrowserImageBrowseUrl&&!t.filebrowserBrowseUrl),J=[{id:"src",type:"text",label:c.url,onKeyup:C,onChange:C,setup:function(a){this.setValue(a.data.src)},commit:function(a){a.setData("src",this.getValue())},validate:CKEDITOR.dialog.validate.notEmpty(b.urlMissing)}];y&&J.push({type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",align:"center",label:j.lang.common.browseServer,hidden:!0,filebrowser:"info:src"});return{title:b.title,minWidth:250,minHeight:100,onLoad:function(){p= -this._.element.getDocument();D=K()},onShow:function(){u=this.widget;I=u.parts.image;l=v=e=!1;x=B(I);r=m=x.width;s=n=x.height},contents:[{id:"info",label:b.infoTab,elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["100%"],children:J}]},{id:"alt",type:"text",label:b.alt,setup:function(a){this.setValue(a.data.alt)},commit:function(a){a.setData("alt",this.getValue())}},{type:"hbox",widths:["25%","25%","50%"],requiredContent:w.dimension.requiredContent,children:[{type:"text",width:"45px", -id:"width",label:c.width,validate:z,onKeyUp:F,onLoad:function(){g=this},setup:function(a){this.setValue(a.data.width)},commit:function(a){a.setData("width",this.getValue())}},{type:"text",id:"height",width:"45px",label:c.height,validate:z,onKeyUp:F,onLoad:function(){h=this},setup:function(a){this.setValue(a.data.height)},commit:function(a){a.setData("height",this.getValue())}},{id:"lock",type:"html",style:"margin-top:18px;width:40px;height:20px;",onLoad:function(){function a(a){a.on("mouseover",function(){this.addClass("cke_btn_over")}, -a);a.on("mouseout",function(){this.removeClass("cke_btn_over")},a)}var b=this.getDialog();f=p.getById(G);o=p.getById(H);f&&(b.addFocusable(f,4+y),f.on("click",function(a){k();a.data&&a.data.preventDefault()},this.getDialog()),a(f));o&&(b.addFocusable(o,5+y),o.on("click",function(a){if(l){g.setValue(r);h.setValue(s)}else{g.setValue(m);h.setValue(n)}a.data&&a.data.preventDefault()},this),a(o))},setup:function(a){k(a.data.lock)},commit:function(a){a.setData("lock",e)},html:L}]},{type:"hbox",id:"alignment", -requiredContent:w.align.requiredContent,children:[{id:"align",type:"radio",items:[[c.alignNone,"none"],[c.alignLeft,"left"],[c.alignCenter,"center"],[c.alignRight,"right"]],label:c.align,setup:function(a){this.setValue(a.data.align)},commit:function(a){a.setData("align",this.getValue())}}]},{id:"hasCaption",type:"checkbox",label:b.captioned,requiredContent:w.caption.requiredContent,setup:function(a){this.setValue(a.data.hasCaption)},commit:function(a){a.setData("hasCaption",this.getValue())}}]},{id:"Upload", -hidden:!0,filebrowser:"uploadButton",label:b.uploadTab,elements:[{type:"file",id:"upload",label:b.btnUpload,style:"height:40px"},{type:"fileButton",id:"uploadButton",filebrowser:"info:src",label:b.btnUpload,"for":["Upload","upload"]}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png b/platforms/browser/www/lib/ckeditor/plugins/image2/icons/hidpi/image.png deleted file mode 100644 index b3c7ade53ce7653aa0351e7fb014abf2af6a326a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/icons/image.png b/platforms/browser/www/lib/ckeditor/plugins/image2/icons/image.png deleted file mode 100644 index fcf61b5f2b3a81f75b39d204faad07b05145b5e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i6R)R>V~EA+xswh3Zx;w0t^dB=S4y4LTZKvAL7dH7QcGotjs|mb zyPl5EPd1%1H4W!-?H!JL$?iJbcV(wj5|f~!prV(K`i*n<|G#z!+PJ03?q%-#cO~EN zojiJ!b>8#D9!Hl7z7WypGNGXl+Y>!RTv;4Hta)U)?6T(f@82gpw`};w|JmlaMDmLg zs})%vh15Ko4A~yfNw$$=c2O!)Q7Ts|VsZJOG;3MEIm3o)OivCReD^M|1_%PCJ#AmT zTKm+dBNENeD?2#mJ-?W>b%x*a4vu{t0V1pnf9w8#dGch*?*04gqeNI81q4_a&!$b* z=whg-s8|rUK6!0z$yyDrY15{Kga%%94wYT?>S2M!lV87P>6{J-Z74r*(Z_xD)k~Xn z7V3D<I=gI@*5i*ec0SN-G=E$6`}(tI%b4%2*2>P#jtUihmRWJgz{Ta4(x*_DTMSB{ zR)wvuef_oS;<anjjuifJb(!S0_~VPF=apBoOw%5z^gZ^!n^(R*ZvB6eiF;dHTl@FM zz0VB|eNuVu+qZA84S4pSXYXFMY2(I))2C1GJ$m%0ytTD;=lkCg*_PJU$(5BeuU-vZ zvvq~mF$uTDg68JtbLP+Qwm)z7Vdv$SDw9vLJeN^A^y`-uL*}eUbAE4LwY6-XY)V=; z)0#DF0z$9uc^EH$GRk|_G9NYJkNNrefma{7&Nn%nU~u64rk+Tf_#U0pKY0H%*q;(i zI$8xxEvhB15hW>!C8<`)MX5lF!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7rX(Z{ zx%nxXX_dG&*!*NZ0@NT0vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWA_h-a KKbLh*2~7a{_eSsl diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/af.js deleted file mode 100644 index d5ef4619..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","af",{alt:"Alternatiewe teks",btnUpload:"Stuur na bediener",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Afbeelding informasie",lockRatio:"Vaste proporsie",menu:"Afbeelding eienskappe",pathName:"image",pathNameCaption:"caption",resetSize:"Herstel grootte",resizer:"Click and drag to resize",title:"Afbeelding eienskappe",uploadTab:"Oplaai",urlMissing:"Die URL na die afbeelding ontbreek."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ar.js deleted file mode 100644 index 435544b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ar",{alt:"عنوان الصورة",btnUpload:"أرسلها للخادم",captioned:"صورة ذات اسم",captionPlaceholder:"تسمية",infoTab:"معلومات الصورة",lockRatio:"تناسق الحجم",menu:"خصائص الصورة",pathName:"صورة",pathNameCaption:"تسمية",resetSize:"إستعادة الحجم الأصلي",resizer:"انقر ثم اسحب للتحجيم",title:"خصائص الصورة",uploadTab:"رفع",urlMissing:"عنوان مصدر الصورة مفقود"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bg.js deleted file mode 100644 index a97a26e6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bg",{alt:"Алтернативен текст",btnUpload:"Изпрати я на сървъра",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Инфо за снимка",lockRatio:"Заключване на съотношението",menu:"Настройки за снимка",pathName:"image",pathNameCaption:"caption",resetSize:"Нулиране на размер",resizer:"Click and drag to resize",title:"Настройки за снимка",uploadTab:"Качване",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bn.js deleted file mode 100644 index 93618a02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bn",{alt:"বিকল্প টেক্সট",btnUpload:"ইহাকে সার্ভারে প্রেরন কর",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ছবির তথ্য",lockRatio:"অনুপাত লক কর",menu:"ছবির প্রোপার্টি",pathName:"image",pathNameCaption:"caption",resetSize:"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও",resizer:"Click and drag to resize",title:"ছবির প্রোপার্টি",uploadTab:"আপলোড",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bs.js deleted file mode 100644 index ff4ae297..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","bs",{alt:"Tekst na slici",btnUpload:"Šalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zakljuèaj odnos",menu:"Svojstva slike",pathName:"image",pathNameCaption:"caption",resetSize:"Resetuj dimenzije",resizer:"Click and drag to resize",title:"Svojstva slike",uploadTab:"Šalji",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ca.js deleted file mode 100644 index 6e73ef35..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ca",{alt:"Text alternatiu",btnUpload:"Envia-la al servidor",captioned:"Imatge amb subtítol",captionPlaceholder:"Títol",infoTab:"Informació de la imatge",lockRatio:"Bloqueja les proporcions",menu:"Propietats de la imatge",pathName:"imatge",pathNameCaption:"subtítol",resetSize:"Restaura la mida",resizer:"Clicar i arrossegar per redimensionar",title:"Propietats de la imatge",uploadTab:"Puja",urlMissing:"Falta la URL de la imatge."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cs.js deleted file mode 100644 index d148641d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","cs",{alt:"Alternativní text",btnUpload:"Odeslat na server",captioned:"Obrázek s popisem",captionPlaceholder:"Popis",infoTab:"Informace o obrázku",lockRatio:"Zámek",menu:"Vlastnosti obrázku",pathName:"Obrázek",pathNameCaption:"Popis",resetSize:"Původní velikost",resizer:"Klepněte a táhněte pro změnu velikosti",title:"Vlastnosti obrázku",uploadTab:"Odeslat",urlMissing:"Zadané URL zdroje obrázku nebylo nalezeno."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cy.js deleted file mode 100644 index 031ba7ef..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","cy",{alt:"Testun Amgen",btnUpload:"Anfon i'r Gweinydd",captioned:"Delwedd â phennawd",captionPlaceholder:"Caption",infoTab:"Gwyb Delwedd",lockRatio:"Cloi Cymhareb",menu:"Priodweddau Delwedd",pathName:"delwedd",pathNameCaption:"pennawd",resetSize:"Ailosod Maint",resizer:"Clicio a llusgo i ail-meintio",title:"Priodweddau Delwedd",uploadTab:"Lanlwytho",urlMissing:"URL gwreiddiol y ddelwedd ar goll."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/da.js deleted file mode 100644 index b5412c41..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","da",{alt:"Alternativ tekst",btnUpload:"Upload fil til serveren",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Generelt",lockRatio:"Lås størrelsesforhold",menu:"Egenskaber for billede",pathName:"image",pathNameCaption:"caption",resetSize:"Nulstil størrelse",resizer:"Click and drag to resize",title:"Egenskaber for billede",uploadTab:"Upload",urlMissing:"Kilde på billed-URL mangler"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/de.js deleted file mode 100644 index de90c18d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","de",{alt:"Alternativer Text",btnUpload:"Zum Server senden",captioned:"Bild mit Überschrift",captionPlaceholder:"Überschrift",infoTab:"Bild-Info",lockRatio:"Größenverhältnis beibehalten",menu:"Bild-Eigenschaften",pathName:"Bild",pathNameCaption:"Überschrift",resetSize:"Größe zurücksetzen",resizer:"Zum vergrößern anwählen und ziehen",title:"Bild-Eigenschaften",uploadTab:"Hochladen",urlMissing:"Imagequelle URL fehlt."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/el.js deleted file mode 100644 index 65307e3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","el",{alt:"Εναλλακτικό Κείμενο",btnUpload:"Αποστολή στον Διακομιστή",captioned:"Εικόνα με λεζάντα",captionPlaceholder:"Λεζάντα",infoTab:"Πληροφορίες Εικόνας",lockRatio:"Κλείδωμα Αναλογίας",menu:"Ιδιότητες Εικόνας",pathName:"εικόνα",pathNameCaption:"λεζάντα",resetSize:"Επαναφορά Αρχικού Μεγέθους",resizer:"Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος",title:"Ιδιότητες Εικόνας",uploadTab:"Αποστολή",urlMissing:"Λείπει το πηγαίο URL της εικόνας."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-au.js deleted file mode 100644 index caab219c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-au",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-ca.js deleted file mode 100644 index ec19b8f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-ca",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-gb.js deleted file mode 100644 index d5a9406a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en-gb",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en.js deleted file mode 100644 index 524e0a2a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","en",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eo.js deleted file mode 100644 index 26587e03..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","eo",{alt:"Anstataŭiga Teksto",btnUpload:"Sendu al Servilo",captioned:"Bildo kun apudskribo",captionPlaceholder:"Apudskribo",infoTab:"Informoj pri Bildo",lockRatio:"Konservi Proporcion",menu:"Atributoj de Bildo",pathName:"bildo",pathNameCaption:"apudskribo",resetSize:"Origina Grando",resizer:"Kliki kaj treni por ŝanĝi la grandon",title:"Atributoj de Bildo",uploadTab:"Alŝuti",urlMissing:"La fontretadreso de la bildo mankas."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/es.js deleted file mode 100644 index c68c9162..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","es",{alt:"Texto Alternativo",btnUpload:"Enviar al Servidor",captioned:"Imagen subtitulada",captionPlaceholder:"Caption",infoTab:"Información de Imagen",lockRatio:"Proporcional",menu:"Propiedades de Imagen",pathName:"image",pathNameCaption:"subtítulo",resetSize:"Tamaño Original",resizer:"Dar clic y arrastrar para cambiar tamaño",title:"Propiedades de Imagen",uploadTab:"Cargar",urlMissing:"Debe indicar la URL de la imagen."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/et.js deleted file mode 100644 index b8571dbf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","et",{alt:"Alternatiivne tekst",btnUpload:"Saada serverisse",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Pildi info",lockRatio:"Lukusta kuvasuhe",menu:"Pildi omadused",pathName:"image",pathNameCaption:"caption",resetSize:"Lähtesta suurus",resizer:"Click and drag to resize",title:"Pildi omadused",uploadTab:"Lae üles",urlMissing:"Pildi lähte-URL on puudu."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eu.js deleted file mode 100644 index dadf5a3a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","eu",{alt:"Ordezko Testua",btnUpload:"Zerbitzarira bidalia",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Irudi informazioa",lockRatio:"Erlazioa Blokeatu",menu:"Irudi Ezaugarriak",pathName:"image",pathNameCaption:"caption",resetSize:"Tamaina Berrezarri",resizer:"Click and drag to resize",title:"Irudi Ezaugarriak",uploadTab:"Gora kargatu",urlMissing:"Irudiaren iturburu URL-a falta da."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fa.js deleted file mode 100644 index 6600e16e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fa",{alt:"متن جایگزین",btnUpload:"به سرور بفرست",captioned:"تصویر زیرنویس شده",captionPlaceholder:"عنوان",infoTab:"اطلاعات تصویر",lockRatio:"قفل کردن نسبت",menu:"ویژگی​های تصویر",pathName:"تصویر",pathNameCaption:"عنوان",resetSize:"بازنشانی اندازه",resizer:"کلیک و کشیدن برای تغییر اندازه",title:"ویژگی​های تصویر",uploadTab:"بالاگذاری",urlMissing:"آدرس URL اصلی تصویر یافت نشد."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fi.js deleted file mode 100644 index e4a104e8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fi",{alt:"Vaihtoehtoinen teksti",btnUpload:"Lähetä palvelimelle",captioned:"Kuva kuvatekstillä",captionPlaceholder:"Kuvateksti",infoTab:"Kuvan tiedot",lockRatio:"Lukitse suhteet",menu:"Kuvan ominaisuudet",pathName:"kuva",pathNameCaption:"kuvateksti",resetSize:"Alkuperäinen koko",resizer:"Klikkaa ja raahaa muuttaaksesi kokoa",title:"Kuvan ominaisuudet",uploadTab:"Lisää tiedosto",urlMissing:"Kuvan lähdeosoite puuttuu."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fo.js deleted file mode 100644 index a2bbfae9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fo",{alt:"Alternativur tekstur",btnUpload:"Send til ambætaran",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Myndaupplýsingar",lockRatio:"Læs lutfallið",menu:"Myndaeginleikar",pathName:"image",pathNameCaption:"caption",resetSize:"Upprunastødd",resizer:"Click and drag to resize",title:"Myndaeginleikar",uploadTab:"Send til ambætaran",urlMissing:"URL til mynd manglar."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr-ca.js deleted file mode 100644 index 30cd9e98..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fr-ca",{alt:"Texte alternatif",btnUpload:"Envoyer sur le serveur",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informations sur l'image2",lockRatio:"Verrouiller les proportions",menu:"Propriétés de l'image2",pathName:"image",pathNameCaption:"caption",resetSize:"Taille originale",resizer:"Click and drag to resize",title:"Propriétés de l'image2",uploadTab:"Téléverser",urlMissing:"L'URL de la source de l'image est manquant."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr.js deleted file mode 100644 index 2c7ed973..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","fr",{alt:"Texte de remplacement",btnUpload:"Envoyer sur le serveur",captioned:"Image légendée",captionPlaceholder:"Légende",infoTab:"Informations sur l'image2",lockRatio:"Conserver les proportions",menu:"Propriétés de l'image2",pathName:"image",pathNameCaption:"légende",resetSize:"Taille d'origine",resizer:"Cliquer et glisser pour redimensionner",title:"Propriétés de l'image2",uploadTab:"Envoyer",urlMissing:"L'adresse source de l'image est manquante."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gl.js deleted file mode 100644 index f030c9e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","gl",{alt:"Texto alternativo",btnUpload:"Enviar ao servidor",captioned:"Imaxe subtitulada ",captionPlaceholder:"Caption",infoTab:"Información da imaxe",lockRatio:"Proporcional",menu:"Propiedades da imaxe",pathName:"Imaxe",pathNameCaption:"subtítulo",resetSize:"Tamaño orixinal",resizer:"Prema e arrastre para axustar o tamaño",title:"Propiedades da imaxe",uploadTab:"Cargar",urlMissing:"Non se atopa o URL da imaxe."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gu.js deleted file mode 100644 index 4e83249d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","gu",{alt:"ઑલ્ટર્નટ ટેક્સ્ટ",btnUpload:"આ સર્વરને મોકલવું",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ચિત્ર ની જાણકારી",lockRatio:"લૉક ગુણોત્તર",menu:"ચિત્રના ગુણ",pathName:"image",pathNameCaption:"caption",resetSize:"રીસેટ સાઇઝ",resizer:"Click and drag to resize",title:"ચિત્રના ગુણ",uploadTab:"અપલોડ",urlMissing:"ઈમેજની મૂળ URL છે નહી."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/he.js deleted file mode 100644 index 4787142e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","he",{alt:"טקסט חלופי",btnUpload:"שליחה לשרת",captioned:"כותרת תמונה",captionPlaceholder:"Caption",infoTab:"מידע על התמונה",lockRatio:"נעילת היחס",menu:"תכונות התמונה",pathName:"תמונה",pathNameCaption:"כותרת",resetSize:"איפוס הגודל",resizer:"לחץ וגרור לשינוי הגודל",title:"מאפייני התמונה",uploadTab:"העלאה",urlMissing:"כתובת התמונה חסרה."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hi.js deleted file mode 100644 index ec9225d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hi",{alt:"वैकल्पिक टेक्स्ट",btnUpload:"इसे सर्वर को भेजें",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"तस्वीर की जानकारी",lockRatio:"लॉक अनुपात",menu:"तस्वीर प्रॉपर्टीज़",pathName:"image",pathNameCaption:"caption",resetSize:"रीसॅट साइज़",resizer:"Click and drag to resize",title:"तस्वीर प्रॉपर्टीज़",uploadTab:"अपलोड",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hr.js deleted file mode 100644 index 812813c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hr",{alt:"Alternativni tekst",btnUpload:"Pošalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zaključaj odnos",menu:"Svojstva slika",pathName:"image",pathNameCaption:"caption",resetSize:"Obriši veličinu",resizer:"Click and drag to resize",title:"Svojstva slika",uploadTab:"Pošalji",urlMissing:"Nedostaje URL slike."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hu.js deleted file mode 100644 index bffa8b81..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","hu",{alt:"Buborék szöveg",btnUpload:"Küldés a szerverre",captioned:"Feliratozott kép",captionPlaceholder:"Képfelirat",infoTab:"Alaptulajdonságok",lockRatio:"Arány megtartása",menu:"Kép tulajdonságai",pathName:"kép",pathNameCaption:"felirat",resetSize:"Eredeti méret",resizer:"Kattints és húzz az átméretezéshez",title:"Kép tulajdonságai",uploadTab:"Feltöltés",urlMissing:"Hiányzik a kép URL-je"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/id.js deleted file mode 100644 index a238cab5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","id",{alt:"Teks alternatif",btnUpload:"Kirim ke Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info Gambar",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Unggah",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/is.js deleted file mode 100644 index 196c68dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","is",{alt:"Baklægur texti",btnUpload:"Hlaða upp",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Almennt",lockRatio:"Festa stærðarhlutfall",menu:"Eigindi myndar",pathName:"image",pathNameCaption:"caption",resetSize:"Reikna stærð",resizer:"Click and drag to resize",title:"Eigindi myndar",uploadTab:"Senda upp",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/it.js deleted file mode 100644 index d65b4549..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","it",{alt:"Testo alternativo",btnUpload:"Invia al server",captioned:"Immagine con didascalia",captionPlaceholder:"Didascalia",infoTab:"Informazioni immagine",lockRatio:"Blocca rapporto",menu:"Proprietà immagine",pathName:"immagine",pathNameCaption:"didascalia",resetSize:"Reimposta dimensione",resizer:"Fare clic e trascinare per ridimensionare",title:"Proprietà immagine",uploadTab:"Carica",urlMissing:"Manca l'URL dell'immagine."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ja.js deleted file mode 100644 index b4457fd7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ja",{alt:"代替テキスト",btnUpload:"サーバーに送信",captioned:"キャプションを付ける",captionPlaceholder:"キャプション",infoTab:"画像情報",lockRatio:"比率を固定",menu:"画像のプロパティ",pathName:"image",pathNameCaption:"caption",resetSize:"サイズをリセット",resizer:"ドラッグしてリサイズ",title:"画像のプロパティ",uploadTab:"アップロード",urlMissing:"画像のURLを入力してください。"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ka.js deleted file mode 100644 index 88407289..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ka",{alt:"სანაცვლო ტექსტი",btnUpload:"სერვერისთვის გაგზავნა",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"სურათის ინფორმცია",lockRatio:"პროპორციის შენარჩუნება",menu:"სურათის პარამეტრები",pathName:"image",pathNameCaption:"caption",resetSize:"ზომის დაბრუნება",resizer:"Click and drag to resize",title:"სურათის პარამეტრები",uploadTab:"აქაჩვა",urlMissing:"სურათის URL არაა შევსებული."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/km.js deleted file mode 100644 index 993429cd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","km",{alt:"អត្ថបទជំនួស",btnUpload:"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា",captioned:"រូប​ដែល​មាន​ចំណង​ជើង",captionPlaceholder:"Caption",infoTab:"ពត៌មានអំពីរូបភាព",lockRatio:"ចាក់​សោ​ផល​ធៀប",menu:"លក្ខណៈ​សម្បត្តិ​រូប​ភាព",pathName:"រូបភាព",pathNameCaption:"ចំណងជើង",resetSize:"កំណត់ទំហំឡើងវិញ",resizer:"ចុច​ហើយ​ទាញ​ដើម្បី​ប្ដូរ​ទំហំ",title:"លក្ខណៈ​សម្បត្តិ​រូប​ភាប",uploadTab:"ផ្ទុក​ឡើង",urlMissing:"ខ្វះ URL ប្រភព​រូប​ភាព។"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ko.js deleted file mode 100644 index 90726a2a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ko",{alt:"이미지 설명",btnUpload:"서버로 전송",captioned:"이미지 설명 넣기",captionPlaceholder:"Caption",infoTab:"이미지 정보",lockRatio:"비율 유지",menu:"이미지 설정",pathName:"이미지",pathNameCaption:"이미지 설명",resetSize:"원래 크기로",resizer:"크기를 조절하려면 클릭 후 드래그 하세요",title:"이미지 설정",uploadTab:"업로드",urlMissing:"이미지 소스 URL이 없습니다."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ku.js deleted file mode 100644 index 6ec1c93f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ku",{alt:"جێگرەوەی دەق",btnUpload:"ناردنی بۆ ڕاژه",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"زانیاری وێنه",lockRatio:"داخستنی ڕێژه",menu:"خاسیەتی وێنه",pathName:"image",pathNameCaption:"caption",resetSize:"ڕێکخستنەوەی قەباره",resizer:"Click and drag to resize",title:"خاسیەتی وێنه",uploadTab:"بارکردن",urlMissing:"سەرچاوەی بەستەری وێنه بزره"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lt.js deleted file mode 100644 index 47b883d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","lt",{alt:"Alternatyvus Tekstas",btnUpload:"Siųsti į serverį",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Vaizdo informacija",lockRatio:"Išlaikyti proporciją",menu:"Vaizdo savybės",pathName:"image",pathNameCaption:"caption",resetSize:"Atstatyti dydį",resizer:"Click and drag to resize",title:"Vaizdo savybės",uploadTab:"Siųsti",urlMissing:"Paveiksliuko nuorodos nėra."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lv.js deleted file mode 100644 index 069595db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","lv",{alt:"Alternatīvais teksts",btnUpload:"Nosūtīt serverim",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informācija par attēlu",lockRatio:"Nemainīga Augstuma/Platuma attiecība",menu:"Attēla īpašības",pathName:"image",pathNameCaption:"caption",resetSize:"Atjaunot sākotnējo izmēru",resizer:"Click and drag to resize",title:"Attēla īpašības",uploadTab:"Augšupielādēt",urlMissing:"Trūkst attēla atrašanās adrese."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mk.js deleted file mode 100644 index 0d5b35e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","mk",{alt:"Alternative Text",btnUpload:"Send it to the Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Image Info",lockRatio:"Lock Ratio",menu:"Image Properties",pathName:"image",pathNameCaption:"caption",resetSize:"Reset Size",resizer:"Click and drag to resize",title:"Image Properties",uploadTab:"Upload",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mn.js deleted file mode 100644 index f2d437f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","mn",{alt:"Зургийг орлох бичвэр",btnUpload:"Үүнийг сервэррүү илгээ",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Зурагны мэдээлэл",lockRatio:"Радио түгжих",menu:"Зураг",pathName:"image",pathNameCaption:"caption",resetSize:"хэмжээ дахин оноох",resizer:"Click and drag to resize",title:"Зураг",uploadTab:"Илгээж ачаалах",urlMissing:"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ms.js deleted file mode 100644 index 8d1d6652..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ms",{alt:"Text Alternatif",btnUpload:"Hantar ke Server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info Imej",lockRatio:"Tetapkan Nisbah",menu:"Ciri-ciri Imej",pathName:"image",pathNameCaption:"caption",resetSize:"Saiz Set Semula",resizer:"Click and drag to resize",title:"Ciri-ciri Imej",uploadTab:"Muat Naik",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nb.js deleted file mode 100644 index 2f237a60..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","nb",{alt:"Alternativ tekst",btnUpload:"Send det til serveren",captioned:"Bilde med bildetekst",captionPlaceholder:"Bildetekst",infoTab:"Bildeinformasjon",lockRatio:"Lås forhold",menu:"Bildeegenskaper",pathName:"bilde",pathNameCaption:"bildetekst",resetSize:"Tilbakestill størrelse",resizer:"Klikk og dra for å endre størrelse",title:"Bildeegenskaper",uploadTab:"Last opp",urlMissing:"Bildets adresse mangler."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nl.js deleted file mode 100644 index f032d845..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","nl",{alt:"Alternatieve tekst",btnUpload:"Naar server verzenden",captioned:"Afbeelding met onderschrift",captionPlaceholder:"Onderschrift",infoTab:"Afbeeldingsinformatie",lockRatio:"Verhouding vergrendelen",menu:"Eigenschappen afbeelding",pathName:"afbeelding",pathNameCaption:"onderschrift",resetSize:"Afmetingen herstellen",resizer:"Klik en sleep om te herschalen",title:"Afbeeldingseigenschappen",uploadTab:"Uploaden",urlMissing:"De URL naar de afbeelding ontbreekt."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/no.js deleted file mode 100644 index 11bffbbc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","no",{alt:"Alternativ tekst",btnUpload:"Send det til serveren",captioned:"Bilde med bildetekst",captionPlaceholder:"Caption",infoTab:"Bildeinformasjon",lockRatio:"Lås forhold",menu:"Bildeegenskaper",pathName:"bilde",pathNameCaption:"bildetekst",resetSize:"Tilbakestill størrelse",resizer:"Klikk og dra for å endre størrelse",title:"Bildeegenskaper",uploadTab:"Last opp",urlMissing:"Bildets adresse mangler."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pl.js deleted file mode 100644 index 09e19e37..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pl",{alt:"Tekst zastępczy",btnUpload:"Wyślij",captioned:"Obrazek z podpisem",captionPlaceholder:"Podpis",infoTab:"Informacje o obrazku",lockRatio:"Zablokuj proporcje",menu:"Właściwości obrazka",pathName:"obrazek",pathNameCaption:"podpis",resetSize:"Przywróć rozmiar",resizer:"Kliknij i przeciągnij, by zmienić rozmiar.",title:"Właściwości obrazka",uploadTab:"Wyślij",urlMissing:"Podaj adres URL obrazka."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt-br.js deleted file mode 100644 index 82c42e85..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pt-br",{alt:"Texto Alternativo",btnUpload:"Enviar para o Servidor",captioned:"Legenda da Imagem",captionPlaceholder:"Legenda",infoTab:"Informações da Imagem",lockRatio:"Travar Proporções",menu:"Formatar Imagem",pathName:"Imagem",pathNameCaption:"Legenda",resetSize:"Redefinir para o Tamanho Original",resizer:"Click e arraste para redimensionar",title:"Formatar Imagem",uploadTab:"Enviar ao Servidor",urlMissing:"URL da imagem está faltando."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt.js deleted file mode 100644 index d46507bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","pt",{alt:"Texto Alternativo",btnUpload:"Enviar para o Servidor",captioned:"Imagem Legendada",captionPlaceholder:"Caption",infoTab:"Informação da Imagem",lockRatio:"Proporcional",menu:"Propriedades da Imagem",pathName:"imagem",pathNameCaption:"legenda",resetSize:"Tamanho Original",resizer:"Clique e arraste para redimensionar",title:"Propriedades da Imagem",uploadTab:"Enviar",urlMissing:"O URL da fonte da imagem está em falta."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ro.js deleted file mode 100644 index 8f860894..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ro",{alt:"Text alternativ",btnUpload:"Trimite la server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informaţii despre imagine",lockRatio:"Păstrează proporţiile",menu:"Proprietăţile imaginii",pathName:"image",pathNameCaption:"caption",resetSize:"Resetează mărimea",resizer:"Click and drag to resize",title:"Proprietăţile imaginii",uploadTab:"Încarcă",urlMissing:"Sursa URL a imaginii lipsește."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ru.js deleted file mode 100644 index eda93cb0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ru",{alt:"Альтернативный текст",btnUpload:"Загрузить на сервер",captioned:"Захваченное изображение",captionPlaceholder:"Название",infoTab:"Данные об изображении",lockRatio:"Сохранять пропорции",menu:"Свойства изображения",pathName:"изображение",pathNameCaption:"захват",resetSize:"Вернуть обычные размеры",resizer:"Нажмите и растяните",title:"Свойства изображения",uploadTab:"Загрузка файла",urlMissing:"Не указана ссылка на изображение."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/si.js deleted file mode 100644 index 5ab518c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","si",{alt:"විකල්ප ",btnUpload:"සේවාදායකය වෙත යොමුකිරිම",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"රුපයේ තොරතුරු",lockRatio:"නවතන අනුපාතය ",menu:"රුපයේ ගුණ",pathName:"image",pathNameCaption:"caption",resetSize:"නැවතත් විශාලත්වය වෙනස් කිරීම",resizer:"Click and drag to resize",title:"රුපයේ ",uploadTab:"උඩුගතකිරීම",urlMissing:"රුප මුලාශ්‍ර URL නැත."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sk.js deleted file mode 100644 index 18778843..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sk",{alt:"Alternatívny text",btnUpload:"Odoslať to na server",captioned:"Opísaný obrázok",captionPlaceholder:"Popis",infoTab:"Informácie o obrázku",lockRatio:"Pomer zámky",menu:"Vlastnosti obrázka",pathName:"obrázok",pathNameCaption:"popis",resetSize:"Pôvodná veľkosť",resizer:"Kliknite a potiahnite pre zmenu veľkosti",title:"Vlastnosti obrázka",uploadTab:"Nahrať",urlMissing:"Chýba URL zdroja obrázka."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sl.js deleted file mode 100644 index aced917a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sl",{alt:"Nadomestno besedilo",btnUpload:"Pošlji na strežnik",captioned:"Podnaslovljena slika",captionPlaceholder:"Napis",infoTab:"Podatki o sliki",lockRatio:"Zakleni razmerje",menu:"Lastnosti slike",pathName:"slika",pathNameCaption:"napis",resetSize:"Ponastavi velikost",resizer:"Kliknite in povlecite, da spremeniti velikost",title:"Lastnosti slike",uploadTab:"Naloži",urlMissing:"Manjka vir (URL) slike."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sq.js deleted file mode 100644 index 8232aef2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sq",{alt:"Tekst Alternativ",btnUpload:"Dërgo në server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Informacione mbi Fotografinë",lockRatio:"Mbyll Racionin",menu:"Karakteristikat e Fotografisë",pathName:"image",pathNameCaption:"caption",resetSize:"Rikthe Madhësinë",resizer:"Click and drag to resize",title:"Karakteristikat e Fotografisë",uploadTab:"Ngarko",urlMissing:"Mungon URL e burimit të fotografisë."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr-latn.js deleted file mode 100644 index 287f0265..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sr-latn",{alt:"Alternativni tekst",btnUpload:"Pošalji na server",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Info slike",lockRatio:"Zaključaj odnos",menu:"Osobine slika",pathName:"image",pathNameCaption:"caption",resetSize:"Resetuj veličinu",resizer:"Click and drag to resize",title:"Osobine slika",uploadTab:"Pošalji",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr.js deleted file mode 100644 index 18857fb7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sr",{alt:"Алтернативни текст",btnUpload:"Пошаљи на сервер",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Инфо слике",lockRatio:"Закључај однос",menu:"Особине слика",pathName:"image",pathNameCaption:"caption",resetSize:"Ресетуј величину",resizer:"Click and drag to resize",title:"Особине слика",uploadTab:"Пошаљи",urlMissing:"Недостаје УРЛ слике."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sv.js deleted file mode 100644 index 2c5ed3f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","sv",{alt:"Alternativ text",btnUpload:"Skicka till server",captioned:"Rubricerad bild",captionPlaceholder:"Bildtext",infoTab:"Bildinformation",lockRatio:"Lås höjd/bredd förhållanden",menu:"Bildegenskaper",pathName:"bild",pathNameCaption:"rubrik",resetSize:"Återställ storlek",resizer:"Klicka och drag för att ändra storlek",title:"Bildegenskaper",uploadTab:"Ladda upp",urlMissing:"Bildkällans URL saknas."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/th.js deleted file mode 100644 index 636814d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","th",{alt:"คำประกอบรูปภาพ",btnUpload:"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"ข้อมูลของรูปภาพ",lockRatio:"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",menu:"คุณสมบัติของ รูปภาพ",pathName:"image",pathNameCaption:"caption",resetSize:"กำหนดรูปเท่าขนาดจริง",resizer:"Click and drag to resize",title:"คุณสมบัติของ รูปภาพ",uploadTab:"อัพโหลดไฟล์",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tr.js deleted file mode 100644 index 305d1b39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","tr",{alt:"Alternatif Yazı",btnUpload:"Sunucuya Yolla",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"Resim Bilgisi",lockRatio:"Oranı Kilitle",menu:"Resim Özellikleri",pathName:"Resim",pathNameCaption:"caption",resetSize:"Boyutu Başa Döndür",resizer:"Boyutlandırmak için, tıklayın ve sürükleyin",title:"Resim Özellikleri",uploadTab:"Karşıya Yükle",urlMissing:"Resmin URL kaynağı bulunamadı."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tt.js deleted file mode 100644 index 2133d73b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","tt",{alt:"Альтернатив текст",btnUpload:"Серверга җибәрү",captioned:"Исеме куелган рәсем",captionPlaceholder:"Исем",infoTab:"Рәсем тасвирламасы",lockRatio:"Lock Ratio",menu:"Рәсем үзлекләре",pathName:"рәсем",pathNameCaption:"исем",resetSize:"Баштагы зурлык",resizer:"Күчереп куер өчен басып шудырыгыз",title:"Рәсем үзлекләре",uploadTab:"Йөкләү",urlMissing:"Image source URL is missing."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ug.js deleted file mode 100644 index 7913ee9f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","ug",{alt:"تېكىست ئالماشتۇر",btnUpload:"مۇلازىمېتىرغا يۈكلە",captioned:"Captioned image",captionPlaceholder:"Caption",infoTab:"سۈرەت",lockRatio:"نىسبەتنى قۇلۇپلا",menu:"سۈرەت خاسلىقى",pathName:"image",pathNameCaption:"caption",resetSize:"ئەسلى چوڭلۇق",resizer:"Click and drag to resize",title:"سۈرەت خاسلىقى",uploadTab:"يۈكلە",urlMissing:"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/uk.js deleted file mode 100644 index 989eb551..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","uk",{alt:"Альтернативний текст",btnUpload:"Надіслати на сервер",captioned:"Підписане зображення",captionPlaceholder:"Caption",infoTab:"Інформація про зображення",lockRatio:"Зберегти пропорції",menu:"Властивості зображення",pathName:"Зображення",pathNameCaption:"заголовок",resetSize:"Очистити поля розмірів",resizer:"Клікніть та потягніть для зміни розмірів",title:"Властивості зображення",uploadTab:"Надіслати",urlMissing:"Вкажіть URL зображення."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/vi.js deleted file mode 100644 index 863c40d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","vi",{alt:"Chú thích ảnh",btnUpload:"Tải lên máy chủ",captioned:"Ảnh có chú thích",captionPlaceholder:"Nhãn",infoTab:"Thông tin của ảnh",lockRatio:"Giữ nguyên tỷ lệ",menu:"Thuộc tính của ảnh",pathName:"ảnh",pathNameCaption:"chú thích",resetSize:"Kích thước gốc",resizer:"Kéo rê để thay đổi kích cỡ",title:"Thuộc tính của ảnh",uploadTab:"Tải lên",urlMissing:"Thiếu đường dẫn hình ảnh"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh-cn.js deleted file mode 100644 index 3209b92f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","zh-cn",{alt:"替换文本",btnUpload:"上传到服务器",captioned:"带标题图像",captionPlaceholder:"标题",infoTab:"图像信息",lockRatio:"锁定比例",menu:"图像属性",pathName:"图像",pathNameCaption:"标题",resetSize:"原始尺寸",resizer:"点击并拖拽以改变尺寸",title:"图像属性",uploadTab:"上传",urlMissing:"缺少图像源文件地址"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh.js deleted file mode 100644 index f9489af4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("image2","zh",{alt:"替代文字",btnUpload:"傳送至伺服器",captioned:"已加標題之圖片",captionPlaceholder:"Caption",infoTab:"影像資訊",lockRatio:"固定比例",menu:"影像屬性",pathName:"圖片",pathNameCaption:"標題",resetSize:"重設大小",resizer:"拖曳以改變大小",title:"影像屬性",uploadTab:"上傳",urlMissing:"遺失圖片來源之 URL "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/image2/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/image2/plugin.js deleted file mode 100644 index 37195045..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/image2/plugin.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function A(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function e(){var d=a.editable(),c=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,d)).block&&(d=c.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),d.replace(this.widget.wrapper),this.widget.wrapper.move(d)),this.focused&& -(this.widget.focus(),delete this.focused),delete this.deflated;else{var b=this.widget,d=f,c=b.wrapper,e=b.data.align,b=b.data.hasCaption;if(d){for(var j=3;j--;)c.removeClass(d[j]);"center"==e?b&&c.addClass(d[1]):"none"!=e&&c.addClass(d[n[e]])}else"center"==e?(b?c.setStyle("text-align","center"):c.removeStyle("text-align"),c.removeStyle("float")):("none"==e?c.removeStyle("float"):c.setStyle("float",e),c.removeStyle("text-align"))}}var f=a.config.image2_alignClasses,g=a.config.image2_captionedClass; -return{allowedContent:B(a),requiredContent:"img[src,alt]",features:C(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:z,data:function(){var d=this.features;this.data.hasCaption&&!a.filter.checkFeature(d.caption)&&(this.data.hasCaption=!1);"none"!=this.data.align&&!a.filter.checkFeature(d.align)&& -(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,inflate:e});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var c in this.data.classes)this.parts.image.removeClass(c);if(a.filter.checkFeature(d.dimension)){d= -this.data;d={width:d.width,height:d.height};c=this.parts.image;for(var f in d)d[f]?c.setAttribute(f,d[f]):c.removeAttribute(f)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,c=this.parts.image,e={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},g=c.getAscendant("a");g&&this.wrapper.contains(g)&&(this.parts.link= -g);e.align||(f?(this.element.hasClass(f[0])?e.align="left":this.element.hasClass(f[2])&&(e.align="right"),e.align?this.element.removeClass(f[n[e.align]]):e.align="none"):(e.align=this.element.getStyle("float")||c.getStyle("float")||"none",this.element.removeStyle("float"),c.removeStyle("float")));if(a.plugins.link&&this.parts.link&&(e.link=CKEDITOR.plugins.link.parseLinkAttributes(a,this.parts.link),(c=e.link.advanced)&&c.advCSSClasses))c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/, -""));this.wrapper[(e.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(e);a.filter.checkFeature(this.features.dimension)&&D(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF});this.on("dialog",function(a){a.data.widget=this},this)},addClass:function(a){k(this).addClass(a)},hasClass:function(a){return k(this).hasClass(a)}, -removeClass:function(a){k(this).removeClass(a)},getClasses:function(){var a=RegExp("^("+[].concat(g,f).join("|")+")$");return function(){var b=this.repository.parseElementClasses(k(this).getAttribute("class")),e;for(e in b)a.test(e)&&delete b[e];return b}}(),upcast:E(a),downcast:F(a)}}function E(a){var b=l(a),e=a.config.image2_captionedClass;return function(a,g){var d={width:1,height:1},c=a.name,h;if(!a.attributes["data-cke-realelement"]){if(b(a)){if("div"==c&&(h=a.getFirst("figure")))a.replaceWith(h), -a=h;g.align="center";h=a.getFirst("img")||a.getFirst("a").getFirst("img")}else"figure"==c&&a.hasClass(e)?h=a.getFirst("img")||a.getFirst("a").getFirst("img"):o(a)&&(h="a"==a.name?a.children[0]:a);if(h){for(var y in d)(c=h.attributes[y])&&c.match(G)&&delete h.attributes[y];return a}}}}function F(a){var b=a.config.image2_alignClasses;return function(a){var f="a"==a.name?a.getFirst():a,g=f.attributes,d=this.data.align;if(!this.inline){var c=a.getFirst("span");c&&c.replaceWith(c.getFirst({img:1,a:1}))}d&& -"none"!=d&&(c=CKEDITOR.tools.parseCssText(g.style||""),"center"==d&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):d in{left:1,right:1}&&(b?f.addClass(b[n[d]]):c["float"]=d),!b&&!CKEDITOR.tools.isEmpty(c)&&(g.style=CKEDITOR.tools.writeCssText(c)));return a}}function l(a){var b=a.config.image2_captionedClass,e=a.config.image2_alignClasses,f={figure:1,a:1,img:1};return function(g){if(!(g.name in{div:1,p:1}))return!1;var d=g.children; -if(1!==d.length)return!1;d=d[0];if(!(d.name in f))return!1;if("p"==g.name){if(!o(d))return!1}else if("figure"==d.name){if(!d.hasClass(b))return!1}else if(a.enterMode==CKEDITOR.ENTER_P||!o(d))return!1;return(e?g.hasClass(e[1]):"center"==CKEDITOR.tools.parseCssText(g.attributes.style||"",!0)["text-align"])?!0:!1}}function o(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function D(a){var b=a.editor,e=b.editable(),f=b.document,g=a.resizer=f.createElement("span");g.addClass("cke_image_resizer"); -g.setAttribute("title",b.lang.image2.resizer);g.append(new CKEDITOR.dom.text("​",f));if(a.inline)a.wrapper.append(g);else{var d=a.parts.link||a.parts.image,c=d.getParent(),h=f.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(d);h.append(g);a.element.append(h,!0);c.is("span")&&c.remove()}g.on("mousedown",function(c){function j(a,b,c){var d=CKEDITOR.document,j=[];f.equals(d)||j.push(d.on(a,b));j.push(f.on(a,b));if(c)for(a=j.length;a--;)c.push(j.pop())}function d(){p=k+w*t;q=Math.round(p/ -r)}function s(){q=n-m;p=Math.round(q*r)}var h=a.parts.image,w="right"==a.data.align?-1:1,i=c.data.$.screenX,H=c.data.$.screenY,k=h.$.clientWidth,n=h.$.clientHeight,r=k/n,l=[],o="cke_image_s"+(!~w?"w":"e"),x,p,q,v,t,m,u;b.fire("saveSnapshot");j("mousemove",function(a){x=a.data.$;t=x.screenX-i;m=H-x.screenY;u=Math.abs(t/m);1==w?0>=t?0>=m?d():u>=r?d():s():0>=m?u>=r?s():d():s():0>=t?0>=m?u>=r?s():d():s():0>=m?d():u>=r?d():s();15<=p&&15<=q?(h.setAttributes({width:p,height:q}),v=!0):v=!1},l);j("mouseup", -function(){for(var c;c=l.pop();)c.removeListener();e.removeClass(o);g.removeClass("cke_image_resizing");v&&(a.setData({width:p,height:q}),b.fire("saveSnapshot"));v=!1},l);e.addClass(o);g.addClass("cke_image_resizing")});a.on("data",function(){g["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function I(a){var b=[],e;return function(f){var g=a.getCommand("justify"+f);if(g){b.push(function(){g.refresh(a,a.elementPath())});if(f in{right:1,left:1,center:1})g.on("exec",function(d){var c= -i(a);if(c){c.setData("align",f);for(c=b.length;c--;)b[c]();d.cancel()}});g.on("refresh",function(b){var c=i(a),g={right:1,left:1,center:1};c&&(void 0==e&&(e=a.filter.checkFeature(a.widgets.registered.image.features.align)),e?this.setState(c.data.align==f?CKEDITOR.TRISTATE_ON:f in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function J(a){a.plugins.link&&(CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){var b=b.definition, -e=b.onShow,f=b.onOk;b.onShow=function(){var b=i(a);b&&(b.inline?!b.wrapper.getAscendant("a"):1)?this.setupContent(b.data.link||{}):e.apply(this,arguments)};b.onOk=function(){var b=i(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",d)}else f.apply(this,arguments)}}}),a.getCommand("unlink").on("exec",function(b){var e=i(a);e&&e.parts.link&&(e.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())}),a.getCommand("unlink").on("refresh",function(b){var e= -i(a);e&&(this.setState(e.data.link||e.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())}))}function i(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function B(a){var b=a.config.image2_alignClasses,a={div:{match:l(a)},p:{match:l(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles= -"text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function C(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function k(a){return a.data.hasCaption?a.element:a.parts.image}var z='<img alt="" src="" />',K=new CKEDITOR.template('<figure class="{captionedClass}">'+z+"<figcaption>{captionPlaceholder}</figcaption></figure>"), -n={left:0,center:1,right:2},G=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_widget_wrapper>a{display:inline-block}")}, -init:function(a){var b=a.config,e=a.lang.image2,f=A(a);b.filebrowserImage2BrowseUrl=b.filebrowserImageBrowseUrl;b.filebrowserImage2UploadUrl=b.filebrowserImageUploadUrl;f.pathName=e.pathName;f.editables.caption.pathName=e.pathNameCaption;a.widgets.add("image",f);a.ui.addButton&&a.ui.addButton("Image",{label:a.lang.common.image,command:"image",toolbar:"insert,10"});a.contextMenu&&(a.addMenuGroup("image",10),a.addMenuItem("image",{label:e.menu,command:"image",group:"image"}));CKEDITOR.dialog.add("image2", -this.path+"dialogs/image2.js")},afterInit:function(a){var b={left:1,right:1,center:1,block:1},e=I(a),f;for(f in b)e(f);J(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,b){var c={};g?c.attributes={"class":g[1]}:c.styles={"text-align":"center"};c=f.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",c);e(c,b);b.move(c);return c}function e(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();c.insertElementIntoRange(b, -e)}else b.replace(d)}var f=a.document,g=a.config.image2_alignClasses,d=a.config.image2_captionedClass,c=a.editable(),h=["hasCaption","align","link"],i={align:function(c,d,e){var f=c.element;if(c.changed.align){if(!c.newData.hasCaption&&("center"==e&&(c.deflate(),c.element=b(a,f)),!c.changed.hasCaption&&"center"==d&&"center"!=e))c.deflate(),d=f.findOne("a,img"),d.replace(f),c.element=d}else"center"==e&&(c.changed.hasCaption&&!c.newData.hasCaption)&&(c.deflate(),c.element=b(a,f));!g&&f.is("figure")&& -("center"==e?f.setStyle("display","inline-block"):f.removeStyle("display"))},hasCaption:function(b,c,g){b.changed.hasCaption&&(c=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(K.output({captionedClass:d,captionPlaceholder:a.lang.image2.captionPlaceholder}),f),e(g,b.element),c.replace(g.findOne("img")),b.element=g):(c.replace(b.element),b.element=c))},link:function(b,c,d){if(b.changed.link){var e=b.element.is("img")?b.element:b.element.findOne("img"), -g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!d||b.element.is("img")&&d,i;h&&b.deflate();d?(c||(i=f.createElement("a",{attributes:{href:b.newData.link.url}}),i.replace(e),e.move(i)),d=CKEDITOR.plugins.link.getLinkAttributes(a,d),CKEDITOR.tools.isEmpty(d.set)||(i||g).setAttributes(d.set),d.removed.length&&(i||g).removeAttributes(d.removed)):(d=g.findOne("img"),d.replace(g),i=d);h&&(b.element=i)}}};return function(a){var b,c;a.changed={};for(c=0;c<h.length;c++)b=h[c],a.changed[b]= -a.oldData?a.oldData[b]!==a.newData[b]:!1;for(c=0;c<h.length;c++)b=h[c],i[b](a,a.oldData?a.oldData[b]:null,a.newData[b]);a.inflate()}},checkHasNaturalRatio:function(a){var b=a.$,a=this.getNatural(a);return Math.round(b.clientWidth/a.width*a.height)==b.clientHeight||Math.round(b.clientHeight/a.height*a.width)==b.clientWidth},getNatural:function(a){if(a.$.naturalWidth)a={width:a.$.naturalWidth,height:a.$.naturalHeight};else{var b=new Image;b.src=a.getAttribute("src");a={width:b.width,height:b.height}}return a}}})(); -CKEDITOR.config.image2_captionedClass="image"; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/indentblock/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/indentblock/plugin.js deleted file mode 100644 index ab69d14c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/indentblock/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(b,c,a){if(!b.getCustomData("indent_processed")){var d=this.editor,f=this.isIndent;if(c){d=b.$.className.match(this.classNameRegex);a=0;d&&(d=d[1],a=CKEDITOR.tools.indexOf(c,d)+1);if(0>(a+=f?1:-1))return;a=Math.min(a,c.length);a=Math.max(a,0);b.$.className=CKEDITOR.tools.ltrim(b.$.className.replace(this.classNameRegex,""));0<a&&b.addClass(c[a-1])}else{var c=i(b,a),a=parseInt(b.getStyle(c),10),g=d.config.indentOffset||40;isNaN(a)&&(a=0);a+=(f?1:-1)*g;if(0>a)return;a=Math.max(a, -0);a=Math.ceil(a/g)*g;b.setStyle(c,a?a+(d.config.indentUnit||"px"):"");""===b.getAttribute("style")&&b.removeAttribute("style")}CKEDITOR.dom.element.setMarker(this.database,b,"indent_processed",1)}}function i(b,c){return"ltr"==(c||b.getComputedStyle("direction"))?"margin-left":"margin-right"}var j=CKEDITOR.dtd.$listItem,l=CKEDITOR.dtd.$list,f=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentblock",{requires:"indent",init:function(b){function c(b,c){a.specificDefinition.apply(this, -arguments);this.allowedContent={"div h1 h2 h3 h4 h5 h6 ol p pre ul":{propertiesOnly:!0,styles:!d?"margin-left,margin-right":null,classes:d||null}};this.enterBr&&(this.allowedContent.div=!0);this.requiredContent=(this.enterBr?"div":"p")+(d?"("+d.join(",")+")":"{margin-left}");this.jobs={20:{refresh:function(a,b){var e=b.block||b.blockLimit;if(e.is(j))e=e.getParent();else if(e.getAscendant(j))return f;if(!this.enterBr&&!this.getContext(b))return f;if(d){var c;c=d;var e=e.$.className.match(this.classNameRegex), -g=this.isIndent;c=e?g?e[1]!=c.slice(-1):true:g;return c?k:f}return this.isIndent?k:e?CKEDITOR[(parseInt(e.getStyle(i(e)),10)||0)<=0?"TRISTATE_DISABLED":"TRISTATE_OFF"]:f},exec:function(a){var b=a.getSelection(),b=b&&b.getRanges()[0],c;if(c=a.elementPath().contains(l))h.call(this,c,d);else{b=b.createIterator();a=a.config.enterMode;b.enforceRealBlocks=true;for(b.enlargeBr=a!=CKEDITOR.ENTER_BR;c=b.getNextParagraph(a==CKEDITOR.ENTER_P?"p":"div");)c.isReadOnly()||h.call(this,c,d)}return true}}}}var a= -CKEDITOR.plugins.indent,d=b.config.indentClasses;a.registerCommands(b,{indentblock:new c(b,"indentblock",!0),outdentblock:new c(b,"outdentblock")});CKEDITOR.tools.extend(c.prototype,a.specificDefinition.prototype,{context:{div:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,p:1,pre:1,table:1},classNameRegex:d?RegExp("(?:^|\\s+)("+d.join("|")+")(?=$|\\s)"):null})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png deleted file mode 100644 index 7209fd41435c8876203672722c09dd7f7cac8b98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%soT@VF(l&f+3CCe?l_3F?Uy_+wO&<VTZWKoP}LF}h9D`eS$i1z z*+up+zjv6b<`TlKxFB}g-XC_;MRps$VdYA3cH5K^Iql#5^mFCUw*M%sI#sRrbKR@| z&5T>$Eo2Z_6sh{WKwnazVT#cC&l8+XvXk`k<{p-4-nz{!Sb9Q`P+pEeZk`YuW87g; zgL4y~Ssp&wvPHw-+B&HlT+Z9RefM2_$~(KF?Ag=MtyvBXUS9j;<vt}=OUJLgp0y@+ z>9spHHVc+K$;{0beJ<mcz3j1}@`A^eCR;iAR`euV$t7<&w)1$|8s3O(&&e&TUuUb8 zm#_VDV8tqr$t>3T|GOGLrW`u@vvT$3htDqxUi+SXNbJaz=UZ3q4O?usV2V<gQj5U0 zv)WxsS0=O7FLB^#Qh0FtAfx=^6{1{q{Ov4`4JS5*GBX^Dx}>B0vG!Ek_QghRCa1Ih zh4Wky`BLTcT%@DTqu^ZPoW~0_<}E)UaX7=~+4-lbt3_gD<dd!DhH|ky*vrUz?^45R z-U=_l{fw-IA`f+g6&N&G9JimozSq|7sNue#-fs>oO~b!`XSu6q<STf_ZA((!;~Az& z^HP^&cI7c1wmJPuXTv1+HCt6aZ&r}x3E&N0FgJO|a~1s{1F4C3?rrlrxPG#5Pta@4 z37h`*XifigK#8^RjvZ^^A0E~qp*F?%vhtsMHaFjYX(HuuYSp6a?}ghQ_An*OX|9Oh zGHsE@iBB@COBXNI-?B`D>&~vt2Mn_hWlk!%{CeV--z(aFJ4T<jI6Xs+Gwt8kt&Gpu z*qRyj&PV&Zq{S+2x;ANQ>g-z#DXBXR*pKYrpZr{Ao6g0`K27g}cUz@iPZy}z*U!bY z<o$K$JVimz`^y)L%w2YL{tSU2J)ax<uk2mqYpS5<3{0!4C9V-ADTyViR>?)FK#IZ0 zz|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMbFZUIwK@wy`aDG}z od16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr0F||L(f|Me diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png deleted file mode 100644 index 365e3205c42d772df280efa9a266a57fa8d58960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%x!=>pF(l&f+3DW-!r>Ba^NS_#3r+SG)tn-BrBroQmv4CJVY634 zEQxdFkMf08oLr_Y@Rv1KbmgiLS5rZyAiaI(jv7C|bkw3RH|J4j=L_x1<lghY=j8AE zy!ZH{+{Fi{Px-Ux-G6q5y(gTR96FM;tNY{G92kPUrUZE?b~*B#o%=l^yYSrE)|uQ2 zOP7S{Z4O)?ygDR+RXbs?x|dMYUb%}24W;WW4)jL#N`HTU+v!|z*50b6lXSHC6c}_> z_rH5vSX?`IQrwDIH?Q7@&bxc3P4d5*_ioiaOP^VnUYD$>^j~1wy^n=I<=Un9WgCw@ z`1_}94)257yn9)NH*zkm4!gMNM(5Uhm(Ln4(l}JzFOZ~mf+OL|*C3@fhWmDvpHAEN z%j+9!Tm9cx;TWK|xOGOQmK)INSyQ>BSFa9fW{^Ja{Uh$hwQFL#!VYsg&QRI%t9Fr! zr0G+Z1GnC+D|h8t9>T76Eqj06+DRsVB^($Ur~KKo`}EqgzD!F$H9oTa;hJ`9N{a)J zJ%?i!&-?S|IHox9{QYCm@Lg_lYRg_Z+oeSeitEzs_zYvLH&5Ge|G3oT-@Nh{oy*T8 zIDCK8^Xwqw-KnBqCYZ!8PvGmxeHC-e@>ZsoMB9#y3zsO`f6f&7c=q4FcOMtK?_Hh$ zv*_>FH<IgO+8%Da_I!z%FC$aJTPwyz8jD0&P82e<I6PVW%{(Fb54%&x<y4-%-{XC2 z7G61`eU-t<t0`-${XDy~G1Ip0{XV6+!TR>?n)>&0+qZAmWIuRl?}NSR6H@nBTP^zg zDRp;ciAxrb5eLVrtARiDfrd`=s(ipBy?lwtswh>{HjBQEkzpCnR~jz4wkSMoMNW=F z?@4oor^iJt+6BDk<}*H*+3VMSIBoKaFDCY)tXc_smQPhV;@LDoXzAB8-Y4JaFyx4Q z{Ce-6|Hs4a?cQ4)w%^QH;H^64T6gNfw7quoSVbS46JnVAQpe);*R=G;Nt3=_4Si*8 zeSH?|UGw}a30B-JmHZ)Fp6%XUzH{%^spd<H=kM`}QB!1b^4cS?B=Xqq$H}Lnp5Hf~ z#yYP?Dk{0-@PrLfM@9BD#V)%dF-hal&67;=DUP!)*;zh(@u1<u6BYi&=QSS7+_hMC z|9$e>xj9bnWjrN{itFo-+gE&eo?bfd(*5)Elf9SjjNHKXr(iC_UyW106a2*f@cpTn z%iv-8k>7hyuE~dck1tKp=_`yZ`x<@0hBx2sd8C5((u*N~`Qwu>hj4YoegfuK)e_f; zl9a@fRIB8oR3OD*WMF8lYhb2pWDsI#Xk}n-WniLhU}R-r@a@quPZSNg`6-!cmAEyu z@0a@u)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8!4b722WQ%mvv4FO#p=i B155w_ diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png deleted file mode 100644 index 75308c126e285865d4d2fd68058c39ddeb5bb0fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%S=-aaF(l&f+39EVZo7%J?w91#bn~2ZqeJ{J^Dh1i>>L+-!)|_I z{Zw}HSY10yWy_jf8Qd%xuXn5zKD|j}qSPeg;@uNmW>3oT-qiDjA<ARIJKJ5w=WLz7 zzJ90}FZ^qD*?)ThgVS~)3|?!)99eF%F|uZ??OepM_DYt@va`(`_o|&ZvL|P9WUPHz zX7$Fd#>3pVGi*+S_`(g-{uOuxPWvHXroQ3w+fASU?7W{c<*#|ZQuOuN!T}8zXT`_u zdoufYzh_V6N{6R1^Us|(jM}^?Ynrft;GW{1O+AbP?iYJmSy${$pORYfTp%*OkGD~P z$#vf6k3VKSe11MVQ(<*>*CGd(fY1APA5_(4x>;~S{{8*@Ez<vNEEL|AbWF|K>F%<w z)bsTMUy<BP(hcvweK)+Tm$lA~qw!AEuf>9`Te+2TIV6&A+`Z|jxpiKTe!<%6bNBc4 z=7h%jI%vAiTK4D9Bi8%x-mQDXG{wm`{!FjDpw@E>JL_zhwF^pl*6P`@bbXv*<GJFR zW#7$bbDBE>s{QSx9?qRzWA=TntGJA;;jCQ_YiF^0OPzn<A~8j^a-Q%sot143-{(0_ z`}n?{zkJe!{d=oiJ%ld2{dCrv)n$9ZLEjCfz7d;N%;I!8wxRt0zucG$hwRzeFM96p z=Vp{WKEovT$9G;}=r8qnfA{h7^z%RJ^81g>*lMZ}e6`-j_UXlccFs#z%$aTB{CeqE z9-k?iJ}nu?le-ojSetd&GUQz1X`w)_)HA)6mx>(i&Nl72emLg=li<P53)`nDou4S6 zmlZRSGgq94?TNa2bm77H_Vy#5O*7~H4xPE7K=rm*+RX!3B8|?rY<{?5Do~kC#RgOH z0#~z?_xD_%F7??_(0Hw6cWhnFuPO5LY!o{m_vTp`oD^MJsx5wM*R%Kf@h^Ptnx1Z% zc14xt)TWdi-NaqH^IN@{*33C9#(Ho&`{f%Ks?Tej|5;MvQdf1WBR#r6aYFC$o=-CG z|1RR#`~6Fm?U7s7wNbzRe$B3#WO6xkR;z$S_|@2NYzZ-;YePadFHaU!3=usSRTFxU z&HPUGLXp5p3716Xs+?`gy4z7QNkH0p&)a9yJyz`W`N3bfa|i3)JL{Ezc}cazHKHUX zu_V<hxhNG#F&G&b8tWRE=^7b?7#dm`m|Gc`Xd4(=85n$fw9FGlLvDUbW?Cg~4ek5o zz5+E!f@}!RPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw=TsEEPS)z4*}Q$iB}%>2(5 diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png deleted file mode 100644 index de7c3d45402b537203c5314c0500d66f7ff9edfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%+0fI)F(l&f+3BbAu0#m5?Js^)<};biip#0^qQ_^Z$jwrm+cM-B z<n%W@U~OQ1f1t}Z?Z~RjhXpRZypSt@|D2_1_r4>woI7Us&6uQ9`S9`o@~iRnQ?LG> zuK#o5!g`Hg{~H~C*tUx{1f7)=b1ZXoV2sLcQgG0|+H*wYPWOX3hpX+?HybjpHGR9+ zcGq0Kw-#y{GZ@vIP8PR4He9Ara4+Bgf#2@4bC37mU6#(+mVckEGBnrUfpOurKR@3{ z+TY#nE@D>gnyD+Vug|%4*}ToYoE;qJq9$GJ(09=0_z@<^vSN<1WN*PWr6Sei>xClJ z4FnHLIPbroUQ@PhBHO+YQ8nL>m%pr6-LUABRRc#yK#HXL`+K=h71fU)|DiFf{stGw zVHV4F??3<6!tJ%IOd((P8M7P02NV{pySJ6)omueC^lphgRY!LkhMZd~6mWU9D9fLZ zPdN9>$oPcpTgGFwS0IxmChD~PVZ}n3#hY?!+0xb*U7MuF`B-7bikjXFDQ?RWL(U~` z%DMOd`m_Vp{<D_N`Bv3){v1d4gH<cv>rWOv*jW%Ma{nDuy6*I2AKtg~n;U8Vulgr* zJ?rf0T}+Q$Ppp2Wwt<mjT93DGzKc?mzIV>N$E&*nvgJy4|M~OfW!Sy_GUDsw+2>y_ zsTDu4<eXKP+ADEIF6Vc0az$T0DDIb&6KZ{UEJ{GoE8BAK4uyTC+_^kmofED{Z4BaS zN+^<V>j-+{+GxmjyWoe8d!}yXw6o=n>)$bdl~lNwd}+$%y7?sr3NhQBw@GeL;`u!1 z%Pzegd2A~*8^2s$KDXrPef_uxS<lSW4Q4a4&*j_xSi*ER<NcR^PcK~l`+yfG)7qEs z-e0c#^1^Cs{?osw3qL;Noj;i+{yo!Cmx}7d6Yt&K|CIf=t6qEUs;1zP->t4mlLZ#6 z(W-j>e9P^(p5hkUZ?WF9EJ`-;Gz$FflM~H!ees5Ai!>&bZgyaJF5@}t)5hz{w)W~* zc9$l-wq2~F>=}IL%j@SXGlV2~*gWRle{uiP$&ZHXwh5j+xaWIHYUSh`3@NEQA25H8 z44BWjPNzKRduu?KLKnwl30c?T`8$mkz2wPgRa_g}eBDE1t@xZT_IGvGXGp1?`3lTY zswJ)wB`Jv|saDBFsX&Us$iUE8*T78I$RNbf(8|Ev%D_b1z{twL;M=2Ro+uh}^HVa@ zDsgLQ-!BKUK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr E05QnV?EnA( diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyblock.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyblock.png deleted file mode 100644 index a507be1bceeb57cd729a01afa948bf8edd1fd482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iBd4c}V~EA+r56uo9dZyj_VIs?84JtOu4iwwfBbv@K-xpkQgv1{ z=cE}Y{rJ5#mu}hd_D=eby89=d7BM=wct{#EAL!;dXSqp7`Shmg)262;Mv6IcR6Lhi zeYNXu-t>|MudU?z-EB79%=vIHnk!MpUGlgfzkt(&6042(-+#RK|3>@Fg{xxLhdXg> zWHwHomwxW~=P8pO)a_4B+jwM=hQLIni47etO*0E^<Sb?Q^aXEi`&;vvec`HADo*#m z|5x_8{AKEfyLp<YC)u2@kDc>;=CaIv!n@XaEAbo_;5@g}UU1%d^>aICID|4rtiP^b zyYPK=h^bmYXx?_|v}rCYUQ2}@Z5NPeV|<{ywb|x;CHr5&byoYQMdkoQO0~o_q9i4; zB-JXpC>2OC7#SEE>l&Er8kmF_np+td1Ch3Yk(Ggg?~>iXP(;#@o1c=IR*74K%}?ed yKn;>08-nxGO3D+9QW?t2%k?tzvWt@w3sUv+i_&MmvylQSV(@hJb6Mw<&;$S(M!*yR diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifycenter.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifycenter.png deleted file mode 100644 index f758bc42209dfa65f0f3aa7d8cbfceb39e1c0418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW0j|iV~EA+sgn+NJ#r9nJ->R2q$87%it-K#@x2+}-z~8}R6p;$ zgs6(ZqBO&a4oRV_(iRrxw0k~o+^%_Vb=CHFQ_rR~cPyCVl-(P|CHPSAy)DBz%Qagq zp1(_%a?o@YaXnIaCVY;c`l?lna&Nz8Rcg96%c5`M>&y46p6xAOxAOI`eMf7XrR}E# z?N;FUH!)!?Ylch8j|=_pwv?~A{@Q<+^_s0qGPxWCSTvRvoLlI=Sa9;mCDNZ9E-No& z^O)4KNMpq+t{y{%_YL(+U+qfUe}D1ZVg{Y*r~lu&;aPMp@VaUH;f242O9DkI-phXY z?aeRmaakl=chxGbhWG<DTcc__PHb4tGK2Z^Ij@^}+glPnCaJU}TEy#!S+D)7E_tuI z$1o-GnoR%k#CgvplGj;wEP8RX)%pB0-UB&iyLT%blVEE;DE;B{wIwf(Gsfsm&z$%C zMRdZK3Y&lTR6kg{oNv@R{V9Kne2hnYq2g(yTiaZxr=Bday2~iPKBmBKK4(*d{h2in z^kg=q{sl&jYKdz^NlIc#s#S7PDv)9@GB7mOH89sTFbOd<w=ysWB5eaBD+2@HCA)#q zhNK}kKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>I{`yl`T diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyleft.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyleft.png deleted file mode 100644 index 542ddee31336717de530041a87cc093cd6424754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqr0bzV~EA+sS{6ky>bw74d2@lZm?nnv-`iM|NnKBnl@+fs?6&8 zx{KK}<F?;qyTwhbZq3;`-9m<sfkRPZ)|}4|=88EfEOpUr4SMz1v1g)$vgT6x<}Fhu zy(~FZv{Qy>!?jNpHXVllWCEtCM!i00JGXdIZgh~ByoZ#+(j#^I)3-(~-1_eKhkMCu zk4hX)F>=)W+Nk2UT=?_PIh%B34;#Pa(^Orv_0Ie9q@MLc-HRMJ0{;koXnQ_K*!S`t zCaYz4^Nv^Tt#kenx2(8t)hZ6fFSak{7~iYzJDz;{gysD6dnaz>i2ePaVb-#jQ@?X` zA8k6D)@=Cf@#63ER;{YAoByt8XMl)n{zCT+*ZQ1p<ZaJa+cKrd<WRVD?rpB;ce0xW zm>4$S%(>uXuE>(NUE1)NxD!X?>#tttDz~(rbKzi|8?<O$cEitjrdPX;NgS@<eEQbk zViOK6U^uImxJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4HZZa>Fz{Wn8yE*j z8glbfGSez?Yq0srd<3XL5@bVgep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&9m Lu6{1-oD!M<<zC`p diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyright.png b/platforms/browser/www/lib/ckeditor/plugins/justify/icons/justifyright.png deleted file mode 100644 index 71a983c9194a7c429e8656f0bba4a8d0d37da804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqqC=rV~EA+sgr#34jBlv+TY&T;;`V9lJvTRfAbHB-eBZbP!Q}^ zc`#q^lFHKFP%CZkZ#Mh$?{&N_^Ip{=aB{bVGDGC5K(EdquBBJjSHHKtSM9{{m?_9> z*=5aRGnO29TJ*4P|9-BLX;XuA#JD%<bZfTkTIU*jeeD7N(^1)5uC2MA-D8-swmR>* z%=6DP1r8Z7YpQO($&<_zbn4&qvuT%?$lS>@PwHttP-Ew=IdzLoQ-i=F(HCphhG~DY zNjI9=!?(V=+-h!I@|SzXd*g1t|9*Bi->FS90!cj~p{yT1nqGOO-?%I@ibc_-`h*c* zyYt={J;P%Yo>$ucegCz_&Qh+Q`A`ItYv7;Gq_w$%yO#d+XJY6-4s=3fkKlV-hwZf| zm+7@`(kVQ*m2Xb5h^u4I$G0pDWxHk1S#A<wx^~O1vHWyY_qAF62g29tZk?;G4Gd$| z64!{5l*E!$tK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)Mb_2s7NkeXaN@iLm zZVfg+nU4T9NP=t#&QB{TPb^AhC@(M9%goCzPEIUH)ypqRpZ(583aE&|)78&qol`;+ E0AvN%)Bpeg diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/af.js deleted file mode 100644 index b3bd6aeb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","af",{block:"Uitvul",center:"Sentreer",left:"Links oplyn",right:"Regs oplyn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ar.js deleted file mode 100644 index 39f7a34f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ar",{block:"ضبط",center:"توسيط",left:"محاذاة إلى اليسار",right:"محاذاة إلى اليمين"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bg.js deleted file mode 100644 index d4a30cba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bg",{block:"Двустранно подравняване",center:"Център",left:"Подравни в ляво",right:"Подравни в дясно"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bn.js deleted file mode 100644 index c58ead92..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bn",{block:"ব্লক জাস্টিফাই",center:"মাঝ বরাবর ঘেষা",left:"বা দিকে ঘেঁষা",right:"ডান দিকে ঘেঁষা"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bs.js deleted file mode 100644 index 9b8553c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","bs",{block:"Puno poravnanje",center:"Centralno poravnanje",left:"Lijevo poravnanje",right:"Desno poravnanje"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ca.js deleted file mode 100644 index b97f2a6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ca",{block:"Justificat",center:"Centrat",left:"Alinea a l'esquerra",right:"Alinea a la dreta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cs.js deleted file mode 100644 index 4c9bbb0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","cs",{block:"Zarovnat do bloku",center:"Zarovnat na střed",left:"Zarovnat vlevo",right:"Zarovnat vpravo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cy.js deleted file mode 100644 index 0a6b4ff7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","cy",{block:"Unioni",center:"Alinio i'r Canol",left:"Alinio i'r Chwith",right:"Alinio i'r Dde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/da.js deleted file mode 100644 index 0da8f69e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","da",{block:"Lige margener",center:"Centreret",left:"Venstrestillet",right:"Højrestillet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/de.js deleted file mode 100644 index 97fe58cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","de",{block:"Blocksatz",center:"Zentriert",left:"Linksbündig",right:"Rechtsbündig"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/el.js deleted file mode 100644 index 9941eb60..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","el",{block:"Πλήρης Στοίχιση",center:"Στο Κέντρο",left:"Στοίχιση Αριστερά",right:"Στοίχιση Δεξιά"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-au.js deleted file mode 100644 index bb4e7c5c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-au",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-ca.js deleted file mode 100644 index 46a2d72d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-ca",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-gb.js deleted file mode 100644 index 9ebe888b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en-gb",{block:"Justify",center:"Centre",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en.js deleted file mode 100644 index 20b7ff5e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","en",{block:"Justify",center:"Center",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eo.js deleted file mode 100644 index 17c15c0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","eo",{block:"Ĝisrandigi Ambaŭflanke",center:"Centrigi",left:"Ĝisrandigi maldekstren",right:"Ĝisrandigi dekstren"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/es.js deleted file mode 100644 index 287fa690..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","es",{block:"Justificado",center:"Centrar",left:"Alinear a Izquierda",right:"Alinear a Derecha"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/et.js deleted file mode 100644 index 5e2eeecc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","et",{block:"Rööpjoondus",center:"Keskjoondus",left:"Vasakjoondus",right:"Paremjoondus"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eu.js deleted file mode 100644 index 3f4f3493..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","eu",{block:"Justifikatu",center:"Lerrokatu Erdian",left:"Lerrokatu Ezkerrean",right:"Lerrokatu Eskuman"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fa.js deleted file mode 100644 index 6a027abe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fa",{block:"بلوک چین",center:"میان چین",left:"چپ چین",right:"راست چین"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fi.js deleted file mode 100644 index c309b712..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fi",{block:"Tasaa molemmat reunat",center:"Keskitä",left:"Tasaa vasemmat reunat",right:"Tasaa oikeat reunat"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fo.js deleted file mode 100644 index cd960d1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fo",{block:"Javnir tekstkantar",center:"Miðsett",left:"Vinstrasett",right:"Høgrasett"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr-ca.js deleted file mode 100644 index 6abd477d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fr-ca",{block:"Justifié",center:"Centré",left:"Aligner à gauche",right:"Aligner à Droite"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr.js deleted file mode 100644 index 41d84c06..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","fr",{block:"Justifier",center:"Centrer",left:"Aligner à gauche",right:"Aligner à droite"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gl.js deleted file mode 100644 index 1d06021e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","gl",{block:"Xustificado",center:"Centrado",left:"Aliñar á esquerda",right:"Aliñar á dereita"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gu.js deleted file mode 100644 index 10ec3045..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","gu",{block:"બ્લૉક, અંતરાય જસ્ટિફાઇ",center:"સંકેંદ્રણ/સેંટરિંગ",left:"ડાબી બાજુએ/બાજુ તરફ",right:"જમણી બાજુએ/બાજુ તરફ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/he.js deleted file mode 100644 index 93e075d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","he",{block:"יישור לשוליים",center:"מרכוז",left:"יישור לשמאל",right:"יישור לימין"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hi.js deleted file mode 100644 index 5e7f955e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hi",{block:"ब्लॉक जस्टीफ़ाई",center:"बीच में",left:"बायीं तरफ",right:"दायीं तरफ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hr.js deleted file mode 100644 index a9100975..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hr",{block:"Blok poravnanje",center:"Središnje poravnanje",left:"Lijevo poravnanje",right:"Desno poravnanje"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hu.js deleted file mode 100644 index 00069c6f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","hu",{block:"Sorkizárt",center:"Középre",left:"Balra",right:"Jobbra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/id.js deleted file mode 100644 index f1aa2e86..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","id",{block:"Rata kiri-kanan",center:"Pusat",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/is.js deleted file mode 100644 index f5f891e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","is",{block:"Jafna báðum megin",center:"Miðja texta",left:"Vinstrijöfnun",right:"Hægrijöfnun"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/it.js deleted file mode 100644 index 188a0f81..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","it",{block:"Giustifica",center:"Centra",left:"Allinea a sinistra",right:"Allinea a destra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ja.js deleted file mode 100644 index 24552e0f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ja",{block:"両端揃え",center:"中央揃え",left:"左揃え",right:"右揃え"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ka.js deleted file mode 100644 index 8ddd27e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ka",{block:"გადასწორება",center:"შუაში სწორება",left:"მარცხნივ სწორება",right:"მარჯვნივ სწორება"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/km.js deleted file mode 100644 index 62a049bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","km",{block:"តម្រឹម​ពេញ",center:"កណ្ដាល",left:"តម្រឹម​ឆ្វេង",right:"តម្រឹម​ស្ដាំ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ko.js deleted file mode 100644 index bfcbaf02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ko",{block:"양쪽 맞춤",center:"가운데 정렬",left:"왼쪽 정렬",right:"오른쪽 정렬"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ku.js deleted file mode 100644 index a27e9e13..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ku",{block:"هاوستوونی",center:"ناوەڕاست",left:"بەهێڵ کردنی چەپ",right:"بەهێڵ کردنی ڕاست"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lt.js deleted file mode 100644 index d9731e46..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","lt",{block:"Lygiuoti abi puses",center:"Centruoti",left:"Lygiuoti kairę",right:"Lygiuoti dešinę"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lv.js deleted file mode 100644 index 7a49b357..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","lv",{block:"Izlīdzināt malas",center:"Izlīdzināt pret centru",left:"Izlīdzināt pa kreisi",right:"Izlīdzināt pa labi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mk.js deleted file mode 100644 index aabf8ca2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","mk",{block:"Justify",center:"Center",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mn.js deleted file mode 100644 index 2eb717ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","mn",{block:"Тэгшлэх",center:"Голлуулах",left:"Зүүн талд тулгах",right:"Баруун талд тулгах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ms.js deleted file mode 100644 index fb6d5ea1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ms",{block:"Jajaran Blok",center:"Jajaran Tengah",left:"Jajaran Kiri",right:"Jajaran Kanan"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nb.js deleted file mode 100644 index 9b8ed082..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","nb",{block:"Blokkjuster",center:"Midtstill",left:"Venstrejuster",right:"Høyrejuster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nl.js deleted file mode 100644 index 1b0f8ae3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","nl",{block:"Uitvullen",center:"Centreren",left:"Links uitlijnen",right:"Rechts uitlijnen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/no.js deleted file mode 100644 index 49f6c800..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","no",{block:"Blokkjuster",center:"Midtstill",left:"Venstrejuster",right:"Høyrejuster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pl.js deleted file mode 100644 index 104c04f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pl",{block:"Wyjustuj",center:"Wyśrodkuj",left:"Wyrównaj do lewej",right:"Wyrównaj do prawej"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt-br.js deleted file mode 100644 index 05e293e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pt-br",{block:"Justificado",center:"Centralizar",left:"Alinhar Esquerda",right:"Alinhar Direita"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt.js deleted file mode 100644 index e641019f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","pt",{block:"Justificado",center:"Alinhar ao Centro",left:"Alinhar à Esquerda",right:"Alinhar à Direita"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ro.js deleted file mode 100644 index d1da4cc9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ro",{block:"Aliniere în bloc (Block Justify)",center:"Aliniere centrală",left:"Aliniere la stânga",right:"Aliniere la dreapta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ru.js deleted file mode 100644 index 4dfc2e40..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ru",{block:"По ширине",center:"По центру",left:"По левому краю",right:"По правому краю"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/si.js deleted file mode 100644 index 8d85db57..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","si",{block:"Justify",center:"මධ්‍ය",left:"Align Left",right:"Align Right"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sk.js deleted file mode 100644 index 6d4de70f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sk",{block:"Zarovnať do bloku",center:"Zarovnať na stred",left:"Zarovnať vľavo",right:"Zarovnať vpravo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sl.js deleted file mode 100644 index cda22d1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sl",{block:"Obojestranska poravnava",center:"Sredinska poravnava",left:"Leva poravnava",right:"Desna poravnava"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sq.js deleted file mode 100644 index 5ec58c62..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sq",{block:"Zgjero",center:"Qendër",left:"Rreshto majtas",right:"Rreshto Djathtas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr-latn.js deleted file mode 100644 index 320d6972..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sr-latn",{block:"Obostrano ravnanje",center:"Centriran tekst",left:"Levo ravnanje",right:"Desno ravnanje"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr.js deleted file mode 100644 index f6654964..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sr",{block:"Обострано равнање",center:"Центриран текст",left:"Лево равнање",right:"Десно равнање"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sv.js deleted file mode 100644 index 9054d4f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","sv",{block:"Justera till marginaler",center:"Centrera",left:"Vänsterjustera",right:"Högerjustera"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/th.js deleted file mode 100644 index fb1d15f9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","th",{block:"จัดพอดีหน้ากระดาษ",center:"จัดกึ่งกลาง",left:"จัดชิดซ้าย",right:"จัดชิดขวา"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tr.js deleted file mode 100644 index 177d9add..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","tr",{block:"İki Kenara Yaslanmış",center:"Ortalanmış",left:"Sola Dayalı",right:"Sağa Dayalı"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tt.js deleted file mode 100644 index b0999da7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","tt",{block:"Киңлеккә карап тигезләү",center:"Үзәккә тигезләү",left:"Сул як кырыйдан тигезләү",right:"Уң як кырыйдан тигезләү"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ug.js deleted file mode 100644 index a1112522..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","ug",{block:"ئىككى تەرەپتىن توغرىلا",center:"ئوتتۇرىغا توغرىلا",left:"سولغا توغرىلا",right:"ئوڭغا توغرىلا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/uk.js deleted file mode 100644 index ba2baba0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","uk",{block:"По ширині",center:"По центру",left:"По лівому краю",right:"По правому краю"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/vi.js deleted file mode 100644 index 30395d21..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","vi",{block:"Canh đều",center:"Canh giữa",left:"Canh trái",right:"Canh phải"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh-cn.js deleted file mode 100644 index 9132cf5e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","zh-cn",{block:"两端对齐",center:"居中",left:"左对齐",right:"右对齐"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh.js deleted file mode 100644 index 405907b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("justify","zh",{block:"左右對齊",center:"置中",left:"靠左對齊",right:"靠右對齊"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/justify/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/justify/plugin.js deleted file mode 100644 index 82fe3301..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/justify/plugin.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function l(a,c){var c=void 0===c||c,b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function g(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";var c=a.config.justifyClasses,h=a.config.enterMode== -CKEDITOR.ENTER_P?"p":"div";if(c){switch(b){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;case "justify":this.cssClassName=c[3]}this.cssClassRegex=RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?=$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName|| -null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function j(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),d.addClass(e[0]))); -e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}g.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(),e=this.cssClassName,g,f,i=a.config.useComputedState,i=void 0===i||i,k=d.length-1;0<=k;k--){g=d[k].createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;f=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)if(!f.isReadOnly()){f.removeAttribute("align");f.removeStyle("text-align"); -var j=e&&(f.$.className=CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex,""))),m=this.state==CKEDITOR.TRISTATE_OFF&&(!i||l(f,!0)!=this.value);e?m?f.addClass(e):j||f.removeAttribute("class"):m&&f.setStyle("text-align",this.value)}}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&l(b,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify", -{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"justifyblock,justifycenter,justifyleft,justifyright",hidpi:!0,init:function(a){if(!a.blockless){var c=new g(a,"justifyleft","left"),b=new g(a,"justifycenter","center"),h=new g(a,"justifyright","right"),d=new g(a,"justifyblock","justify");a.addCommand("justifyleft", -c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock", -toolbar:"align,40"}));a.on("dirChanged",j)}}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/icons/hidpi/language.png b/platforms/browser/www/lib/ckeditor/plugins/language/icons/hidpi/language.png deleted file mode 100644 index 3908a6ae1ee7c13976b80bd93e26f10de1771c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1678 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 YWiD@WXPfRk8UO$Q07*qoM6N<$f<N&d{Qv*} diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/icons/language.png b/platforms/browser/www/lib/ckeditor/plugins/language/icons/language.png deleted file mode 100644 index eb680d42a6395d3676227ecb9e3544349f19a5d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<5o`>#}JFty^|eJJ#r9e-T&%H#sQ5*?gG#5?<!n;eCFf|zI@~2 zrklKrI#L!|EDq%KbbmXm)$K}r{j-CMcUAa?e_x$7^ZfIQdF_U5f{YHKh35+G<}-e< z>GxXdB++If#mg|KILA!-j{#4n+3b+jq3;scJ}t0NP%@eATXUb?!NuwT`-jA}vXfIK z8}=>QI&F~#!?6SY5BNWXyVRBLzAK+OD=BNM)T&>T90e4VdfXQ0ufDp<P=e>ys#WK9 z{!KCZIah@<fA#b;pJhV-u3L3DZvFCAr>gd<^(8<1Y`JgMCwU3xE3Zo#tmg7n&f9$Z ztwH-?N0*lHJr!zEMqNs$N+sH)SQw94e!tedNJH+^+p^yi(j(jI!`}*DGEwyu`e@T1 zw%T>pvR88^zb)(DI_>et3d;xD@`nueh;}UENalH4Hv92Mk4Y*sHihQf9FQpf{J?6h zmXZ`pqgx=0Yv6_V-@i&8ei#rsHTzFX-Tw8ifibr#Y7aFFF2C$~dS?AKufH{R@w*E4 zZn|fD{`2i;>1(g7-TEVP+Qzu`@lrFFX`X)iY3<2EnaA(HSEp^3>^|yrYUYmBXG*O0 zW<Cwy-~XRs{obsEQ+q4hfw8Ju;u=wsl30>zm0Xkxq!^4042^XSEOiadLktbAOiir} z%(M-RtPBi(D*sbJ(U6;;l9^VCTSG^k+Z><<NstY}`DrEPiAAXl<>lpinR(g8$%zH2 Ydih1^v)|cB0TnTLy85}Sb4q9e029+3x&QzG diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/ar.js deleted file mode 100644 index 781a80b4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ar",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/ca.js deleted file mode 100644 index b954027f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ca",{button:"Definir l'idioma",remove:"Eliminar idioma"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/cs.js deleted file mode 100644 index 672a1a68..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","cs",{button:"Nastavit jazyk",remove:"Odstranit jazyk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/cy.js deleted file mode 100644 index 79d8d0e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","cy",{button:"Gosod iaith",remove:"Tynnu iaith"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/de.js deleted file mode 100644 index 5adda832..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","de",{button:"Sprache stellen",remove:"Sprache entfernen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/el.js deleted file mode 100644 index 2b0c17aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","el",{button:"Θέση γλώσσας",remove:"Αφαίρεση γλώσσας"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/en-gb.js deleted file mode 100644 index 73cd1a5d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","en-gb",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/en.js deleted file mode 100644 index acb83453..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","en",{button:"Set language",remove:"Remove language"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/eo.js deleted file mode 100644 index 49335695..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","eo",{button:"Instali lingvon",remove:"Forigi lingvon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/es.js deleted file mode 100644 index cd91eff8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","es",{button:"Fijar lenguaje",remove:"Quitar lenguaje"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/fa.js deleted file mode 100644 index 572f4c64..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fa",{button:"تعیین زبان",remove:"حذف زبان"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/fi.js deleted file mode 100644 index f0276d16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fi",{button:"Aseta kieli",remove:"Poista kieli"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/fr.js deleted file mode 100644 index 0b8602a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","fr",{button:"Définir la langue",remove:"Supprimer la langue"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/gl.js deleted file mode 100644 index 58ce1323..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","gl",{button:"Estabelezer o idioma",remove:"Retirar o idioma"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/he.js deleted file mode 100644 index 334788e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","he",{button:"צור שפה",remove:"הסר שפה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/hr.js deleted file mode 100644 index 911103dd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","hr",{button:"Namjesti jezik",remove:"Makni jezik"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/hu.js deleted file mode 100644 index 92cc653c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","hu",{button:"Nyelv beállítása",remove:"Nyelv eltávolítása"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/it.js deleted file mode 100644 index 32e54319..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","it",{button:"Imposta lingua",remove:"Rimuovi lingua"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/ja.js deleted file mode 100644 index e00999d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ja",{button:"言語を設定",remove:"言語を削除"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/km.js deleted file mode 100644 index f146a6fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","km",{button:"កំណត់​ភាសា",remove:"លុប​ភាសា"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/nb.js deleted file mode 100644 index a0ed5b12..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","nb",{button:"Sett språk",remove:"Fjern språk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/nl.js deleted file mode 100644 index 49c7d1ae..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","nl",{button:"Taal instellen",remove:"Taal verwijderen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/no.js deleted file mode 100644 index 87b4e066..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","no",{button:"Sett språk",remove:"Fjern språk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/pl.js deleted file mode 100644 index 6de4bc48..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pl",{button:"Ustaw język",remove:"Usuń język"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt-br.js deleted file mode 100644 index fbb3df1e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pt-br",{button:"Configure o Idioma",remove:"Remover Idioma"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt.js deleted file mode 100644 index d63076b6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","pt",{button:"Definir Idioma",remove:"Remover Idioma"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/ru.js deleted file mode 100644 index 60316fe7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","ru",{button:"Установка языка",remove:"Удалить язык"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/sk.js deleted file mode 100644 index 2a6896ae..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sk",{button:"Nastaviť jazyk",remove:"Odstrániť jazyk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/sl.js deleted file mode 100644 index 3d0c585e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sl",{button:"Nastavi jezik",remove:"Odstrani jezik"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/sv.js deleted file mode 100644 index 061b5b75..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","sv",{button:"Sätt språk",remove:"Ta bort språk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/tr.js deleted file mode 100644 index ae38d58c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","tr",{button:"Dili seç",remove:"Dili kaldır"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/tt.js deleted file mode 100644 index a651f7bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","tt",{button:"Тел сайлау",remove:"Телне бетерү"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/uk.js deleted file mode 100644 index 15a7cf06..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","uk",{button:"Установити мову",remove:"Вилучити мову"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/vi.js deleted file mode 100644 index 631df086..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","vi",{button:"Thiết lập ngôn ngữ",remove:"Loại bỏ ngôn ngữ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh-cn.js deleted file mode 100644 index a03c73a8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","zh-cn",{button:"设置语言",remove:"移除语言"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh.js deleted file mode 100644 index 6676d954..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("language","zh",{button:"設定語言",remove:"移除語言"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/language/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/language/plugin.js deleted file mode 100644 index fe302883..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/language/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",icons:"language",hidpi:!0,init:function(a){var b=a.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,d=a.lang.language,e={},g,h,i,f;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,b){var c=e["language_"+b];if(c)a[c.style.checkActive(a.elementPath(), -a)?"removeStyle":"applyStyle"](c.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(f=0;f<b.length;f++)g=b[f].split(":"),h=g[0],i="language_"+h,e[i]={label:g[1],langId:h,group:"language",order:f,ltr:"rtl"!=(""+g[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},e[i].style=new CKEDITOR.style({element:"span",attributes:{lang:h,dir:e[i].ltr?"ltr":"rtl"}});e.language_remove={label:d.remove, -group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:e.length,onClick:function(){var b=c.getCurrentLangElement(a);b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(e);a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:d.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),f;for(f in e)b[f]=CKEDITOR.TRISTATE_OFF; -b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var b=a.elementPath(),a=b&&b.elements,c;if(b)for(var d=0;d<a.length;d++)b=a[d],!c&&("span"==b.getName()&&b.hasAttribute("dir")&&b.hasAttribute("lang"))&&(c=b);return c}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/lineutils/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/lineutils/plugin.js deleted file mode 100644 index aa93527f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/lineutils/plugin.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function k(a,d){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),doc:a.document,win:a.window},d,!0);this.frame=this.win.getFrame();this.inline=this.editable.isInline();this.target=this[this.inline?"editable":"doc"]}function l(a,d){CKEDITOR.tools.extend(this,d,{editor:a},!0)}function m(a,d){var b=a.editable();CKEDITOR.tools.extend(this,{editor:a,editable:b,doc:a.document,win:a.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()},d,!0);this.hidden= -{};this.visible={};this.inline=b.isInline();this.inline||(this.frame=this.win.getFrame());this.queryViewport();var c=CKEDITOR.tools.bind(this.queryViewport,this),e=CKEDITOR.tools.bind(this.hideVisible,this),g=CKEDITOR.tools.bind(this.removeAll,this);b.attachListener(this.winTop,"resize",c);b.attachListener(this.winTop,"scroll",c);b.attachListener(this.winTop,"resize",e);b.attachListener(this.win,"scroll",e);b.attachListener(this.inline?b:this.frame,"mouseout",function(a){var c=a.data.$.clientX,a= -a.data.$.clientY;this.queryViewport();(c<=this.rect.left||c>=this.rect.right||a<=this.rect.top||a>=this.rect.bottom)&&this.hideVisible();(c<=0||c>=this.winTopPane.width||a<=0||a>=this.winTopPane.height)&&this.hideVisible()},this);b.attachListener(a,"resize",c);b.attachListener(a,"mode",g);a.on("destroy",g);this.lineTpl=(new CKEDITOR.template(p)).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},q,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({}, -n,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},n,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function i(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&!(o[a.getComputedStyle("float")]||o[a.getAttribute("align")])&&!r[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1; -CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;k.prototype={start:function(a){var d=this,b=this.editor,c=this.doc,e,g,f,h=CKEDITOR.tools.eventsBuffer(50,function(){b.readOnly||"wysiwyg"!=b.mode||(d.relations={},e=new CKEDITOR.dom.element(c.$.elementFromPoint(g,f)),d.traverseSearch(e),isNaN(g+f)||d.pixelSearch(e,g,f),a&&a(d.relations,g,f))});this.listener=this.editable.attachListener(this.target,"mousemove",function(a){g=a.data.$.clientX;f=a.data.$.clientY;h.input()});this.editable.attachListener(this.inline? -this.editable:this.frame,"mouseout",function(){h.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(d){var b=this.editor.createRange();b.moveToPosition(this.relations[d.uid].element,a[d.type]);return b}}(),store:function(){function a(a,b,c){var e=a.getUniqueId(); -e in c?c[e].type|=b:c[e]={element:a,type:b}}return function(d,b){var c;if(b&CKEDITOR.LINEUTILS_AFTER&&i(c=d.getNext())&&c.isVisible())a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_AFTER;if(b&CKEDITOR.LINEUTILS_INSIDE&&i(c=d.getFirst())&&c.isVisible())a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_INSIDE;a(d,b,this.relations)}}(),traverseSearch:function(a){var d,b,c;do if(c=a.$["data-cke-expando"],!(c&&c in this.relations)){if(a.equals(this.editable))break; -if(i(a))for(d in this.lookups)(b=this.lookups[d](a))&&this.store(a,b)}while(!(a&&a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(a,c,e,g,f){for(var h=0,j;f(e);){e+=g;if(25==++h)break;if(j=this.doc.$.elementFromPoint(c,e))if(j==a)h=0;else if(d(a,j)&&(h=0,i(j=new CKEDITOR.dom.element(j))))return j}}var d=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,c){return a.contains(c)}:function(a,c){return!!(a.compareDocumentPosition(c)& -16)};return function(b,c,d){var g=this.win.getViewPaneSize().height,f=a.call(this,b.$,c,d,-1,function(a){return 0<a}),c=a.call(this,b.$,c,d,1,function(a){return a<g});if(f)for(this.traverseSearch(f);!f.getParent().equals(b);)f=f.getParent();if(c)for(this.traverseSearch(c);!c.getParent().equals(b);)c=c.getParent();for(;f||c;){f&&(f=f.getNext(i));if(!f||f.equals(c))break;this.traverseSearch(f);c&&(c=c.getPrevious(i));if(!c||c.equals(f))break;this.traverseSearch(c)}}}(),greedySearch:function(){this.relations= -{};for(var a=this.editable.getElementsByTag("*"),d=0,b,c,e;b=a.getItem(d++);)if(!b.equals(this.editable)&&(b.hasAttribute("contenteditable")||!b.isReadOnly())&&i(b)&&b.isVisible())for(e in this.lookups)(c=this.lookups[e](b))&&this.store(b,c);return this.relations}};l.prototype={locate:function(){function a(a,b){var d=a.element[b===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return d&&i(d)?(a.siblingRect=d.getClientRect(),b==CKEDITOR.LINEUTILS_BEFORE?(a.siblingRect.bottom+a.elementRect.top)/ -2:(a.elementRect.bottom+a.siblingRect.top)/2):b==CKEDITOR.LINEUTILS_BEFORE?a.elementRect.top:a.elementRect.bottom}var d,b;return function(c){this.locations={};for(b in c)d=c[b],d.elementRect=d.element.getClientRect(),d.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(b,CKEDITOR.LINEUTILS_BEFORE,a(d,CKEDITOR.LINEUTILS_BEFORE)),d.type&CKEDITOR.LINEUTILS_AFTER&&this.store(b,CKEDITOR.LINEUTILS_AFTER,a(d,CKEDITOR.LINEUTILS_AFTER)),d.type&CKEDITOR.LINEUTILS_INSIDE&&this.store(b,CKEDITOR.LINEUTILS_INSIDE,(d.elementRect.top+ -d.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,d,b,c,e,g;return function(f,h){a=this.locations;d=[];for(c in a)for(e in a[c])if(b=Math.abs(f-a[c][e]),d.length){for(g=0;g<d.length;g++)if(b<d[g].dist){d.splice(g,0,{uid:+c,type:e,dist:b});break}g==d.length&&d.push({uid:+c,type:e,dist:b})}else d.push({uid:+c,type:e,dist:b});return"undefined"!=typeof h?d.slice(0,h):d}}(),store:function(a,d,b){this.locations[a]||(this.locations[a]={});this.locations[a][d]=b}};var n={display:"block", -width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},q={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999},p='<div data-cke-lineutils-line="1" class="cke_reset_all" style="{lineStyle}"><span style="{tipLeftStyle}">&nbsp;</span><span style="{tipRightStyle}">&nbsp;</span></div>';m.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(), -delete this.visible[a]},hideLine:function(a){var d=a.getUniqueId();a.hide();this.hidden[d]=a;delete this.visible[d]},showLine:function(a){var d=a.getUniqueId();a.show();this.visible[d]=a;delete this.hidden[d]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,d){var b,c,e;if(b=this.getStyle(a.uid,a.type)){for(e in this.visible)if(this.visible[e].getCustomData("hash")!==this.hash){c=this.visible[e];break}if(!c)for(e in this.hidden)if(this.hidden[e].getCustomData("hash")!== -this.hash){this.showLine(c=this.hidden[e]);break}c||this.showLine(c=this.addLine());c.setCustomData("hash",this.hash);this.visible[c.getUniqueId()]=c;c.setStyles(b);d&&d(c)}},getStyle:function(a,d){var b=this.relations[a],c=this.locations[a][d],e={};e.width=b.siblingRect?Math.max(b.siblingRect.width,b.elementRect.width):b.elementRect.width;e.top=this.inline?c+this.winTopScroll.y:this.rect.top+this.winTopScroll.y+c;if(e.top-this.winTopScroll.y<this.rect.top||e.top-this.winTopScroll.y>this.rect.bottom)return!1; -if(this.inline)e.left=b.elementRect.left;else if(0<b.elementRect.left?e.left=this.rect.left+b.elementRect.left:(e.width+=b.elementRect.left,e.left=this.rect.left),0<(b=e.left+e.width-(this.rect.left+this.winPane.width)))e.width-=b;e.left+=this.winTopScroll.x;for(var g in e)e[g]=CKEDITOR.tools.cssLength(e[g]);return e},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,d){this.relations=a;this.locations=d;this.hash=Math.random()}, -cleanup:function(){var a,d;for(d in this.visible)a=this.visible[d],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.inline?this.editable.getClientRect():this.frame.getClientRect()}};var o={left:1,right:1,center:1},r={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:k,locator:l,liner:m}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/anchor.js b/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/anchor.js deleted file mode 100644 index e0192b27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/anchor.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)): -this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c); -e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/link.js b/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/link.js deleted file mode 100644 index 312fb7bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/link/dialogs/link.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}}, -f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"], -[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e<b.length;e++){var c=a.getContentElement("info",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==k+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type|| -"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange= -!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),k=/^((javascript:)|[#\/\.\?])/i,c=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):k.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")? -!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button", -id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){d=l.getEditorAnchors(g);this.getElement()[d&&d.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b= -0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor|| -(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress", -label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject, -setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target, -elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName", -label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox", -children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox", -children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0, -filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir, -"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text", -label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)", -"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a= -this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!= -f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab|| -this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/link/images/anchor.png b/platforms/browser/www/lib/ckeditor/plugins/link/images/anchor.png deleted file mode 100644 index 6d861a0e7a5cbd98d5cd3264c5fdb6009d43362b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0<!&yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006MNkl<ZILmdC z&uUXa6vlsNZrX}XV=02I;G!vlDDGO+or^v|AD~a*EBG2NU362ytyn5j1iP>lYbi8H zxR;v-p;YW5F+`<FW<D2p(l-A2;J`3*=Epa4KFhL<AOR47zH{7PShx?|19of8=27B3 z76Jxfh5(aD%pgruB)wLlO-XNBySw_hvZBuZz9bz;dMfEg?f4i;x8vSMJ<A}=G9(F* zB)yxP(>iD!^a8X7`mnql`D%A}cEXd`ThDV!W(L6Y>?{CNCnwyhR5<K(r~u_8;rrGW zYi11K+I65uAxjcUaZTTQ02XIvsK<9QKF(OV%tE=$;^ZXLQ&W6BI%4zmG!pC*pjU7u z5x7t=V_-(lIc#Er!4Mwhh6^7Z5GQheAQjM9g8u;e{piX_%t(L)aAr8OVub(DIe>6s z{71LTH{e&V$AtHc17l_+&XK?f?EDXi4&Js}yaHx`L*Pog&7*dkht(>CK)2hyxGhn_ zM$KiwGpPma0S~s9mMWk2_SkAPuttM3;7-x{Ufx5V=OaOqv@Pjot=U9UNz!9UFD3O4 zR#zqIOww~n)AcmP@;s+nt;)=hM4IOoyvG2UfpY}sxH~_86{rGVKIeHS34z3nlBAI* zIKVl_Frfl87*J2spMshJW6t56D}oe47y&4R5r6@5?$Wr1AuP^a4A4e&vf;hwPgiF4 bR}J+WGDARE%D;pG00000NkvXXu0mjftM3S` diff --git a/platforms/browser/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png b/platforms/browser/www/lib/ckeditor/plugins/link/images/hidpi/anchor.png deleted file mode 100644 index f5048430d57dcf0170a2df9e48ba25a58ba18ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1379 zcmV-p1)TbcP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FlNkl<ZSi`+n zU2IfE6h8N7|0u96ORFeE14$`rTT+4vHPJ*9A-<CMVq(OAU@69jf+R+ttf}Fprhx(> zF-A!GKzLMwM$<qy*wU0VB??(np-C&d?qa38-M_on@668Ky?eXMu0WaO+nqZz_ndFe zoHOTKWol@MOw%MYmm_q@-grEh$&issk&(?VnI}adP1i~Dct~@*Nl{e{DPp`t4rH^e z!uy!F*6Kn@I!&3yMWM{JDd87cdFPQMDjr`2UITUjIxqo@0>i;$$HMNqI?{bUQeCbh z5laT-vz#1n0*%+WcrBBjJa>-L_wUoT{rg|RTp!RW^<M`*0`3CmfmSNtGIIWF5E;{9 z4Hm2e+_K3eWfBS6(bMxD9=`zQfKSFxo%-3mY8BDs*|Rh{Fu*$>2Mh<MfC%>&LLuXq zmKI}(NZ@jNyAd58cCHTsdw{wteSO40-w%B0SU1W#S+~MJi?JBJeCUvoKOUuU{#Kjn z>Z0+%LGnu5^NO6@dK%cUZXLZoJ8QQ}68H=F2iO95c<=+rJ}u>ffaY7XM#v+(%XD;f zlsM53Fl89NQIEbK4wu7R0?!(oR}zTK&Cz!l_p^gsyhx2ZcQV)KEg7@NkJCVRHyLHl zPY|&CwqY101g4>^1^+G0%@kW$peU?mV$AFHk_Y5mnnsCuoc@NRC9v+&u3bWrM{bNs zt^n!)UnK(emSs=15!epA)Ye83L`fFpavZW&h_X51@qx8#=~;O8Je>J12(sM`Nq`ju zY=o*3D2Z1l(9l5l5JIfnEO$>J%y=#fOE8fQ>(`Tx4J2U^p5yp6(I1(fE*nCsb0BB! z%yuM(b&*tPJjZL;dMS>1Jo{I#CcocLCdgzkZaR*-!~%-r*0LXgDNSBWvn*nf$;k~o zNJjZ1c+|!US&kLb4_LZ{fHMj#fwd|wQCP!!Rh_U>V^cqlrj|WNCjnKZ<!XAlC~!8# z4$gG8=f_S!_<%#X3ZHO6v4??v3S+K(E+-BDJYSBC@-PIPVW>f=4>=%)w0diPp6=jA z<Q71@KaI<$3G+Ij0tGU%C{Y|1e7G>geg8)|Oy5Q#A^~Yq7#9gQK*k5OqPS>pY9cR) zsvxCHQtZs)zk-EoBJdLwpO?wx8DJx4KolKeT+jca9|J}}V(j*9YDI$D(%4ANOa^@s zO|aZ=NLDGCAO80}a0Yk-cz0rgJX^Oe5peV1LHhB;3A%&+7?fR`nIQ$($UcJIM<DN> zRKB_RTF|OH%7&q7i*YUj_hC#bzXWsxUBGEB1vVqscVqsmP>5c@K!dCiLKyoU%ERb$ zaq#xuz4US3x@?TkR2&y?v}zcBn1ALCbfM-u!xb=_mJ7|!!-u(Md`lENn>M}qzG;dL zEnK)jS9b3f^}#k&QqLVYV2PUn-ubn^f5cl~pATs+$&$$7+hs`>2n58+Xf$fQbOShg zwZH#+4>FvFyf26%*@$u-#YvVc=bj#}fc61<fTtY$Vncib^g>SDi!8~-tHKUj%?U5} z_O>xwA7It~;_T%203R2Z^VbFk|4hf@pMuEen0}FqC>b=o>#ML{*1d9NQI4k7b`f#C z&*ifw>;2+4i3}~i10alr>hS#WlP3*WXA&EkwAL}%6)08;A1^jJRV~0wRmV%tuOr3! z(&5WU`becU)pLO(%PCSoEzQakkCY2isT4iQwxlf2%I~+rkt{O-`=JC27g6yHuhSDD lkXLxrp)e>uPR-@D!G9=+u`hgA@I?Rs002ovPDHLkV1h$SfwKSr diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js deleted file mode 100644 index 2b130e71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/dialogs/liststyle.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){this.setValue(a.getStyle("list-style-type")|| -h[a.getAttribute("type")]||a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,"lower-alpha"],[b.upperAlpha,"upper-alpha"], -[b.decimal,"decimal"]];(!CKEDITOR.env.ie||7<CKEDITOR.env.version)&&g.concat([[b.armenian,"armenian"],[b.decimalLeadingZero,"decimal-leading-zero"],[b.georgian,"georgian"],[b.lowerGreek,"lower-greek"]]);return{title:b.numberedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"hbox",widths:["25%","75%"],children:[{label:b.start,type:"text",id:"start",validate:CKEDITOR.dialog.validate.integer(b.validateStartNumber),setup:function(a){this.setValue(a.getFirst(f).getAttribute("value")|| -a.getAttribute("start")||1)},commit:function(a){var b=a.getFirst(f),c=b.getAttribute("value")||a.getAttribute("start")||1;a.getFirst(f).removeAttribute("value");var d=parseInt(this.getValue(),10);isNaN(d)?a.removeAttribute("start"):a.setAttribute("start",d);a=b;b=c;for(d=isNaN(d)?1:d;(a=a.getNext(f))&&b++;)a.getAttribute("value")==b&&a.setAttribute("value",d+b-c)}},{type:"select",label:b.type,id:"type",style:"width: 100%;",items:g,setup:function(a){this.setValue(a.getStyle("list-style-type")||h[a.getAttribute("type")]|| -a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.commitContent(a)}}}}var f=function(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")},h={a:"lower-alpha",A:"upper-alpha",i:"lower-roman",I:"upper-roman",1:"decimal",disc:"disc",circle:"circle",square:"square"}; -CKEDITOR.dialog.add("numberedListStyle",function(c){return e(c,"numberedListStyle")});CKEDITOR.dialog.add("bulletedListStyle",function(c){return e(c,"bulletedListStyle")})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/af.js deleted file mode 100644 index 972e936b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/af.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","af",{armenian:"Armeense nommering",bulletedTitle:"Eienskappe van ongenommerde lys",circle:"Sirkel",decimal:"Desimale syfers (1, 2, 3, ens.)",decimalLeadingZero:"Desimale syfers met voorloopnul (01, 02, 03, ens.)",disc:"Skyf",georgian:"Georgiese nommering (an, ban, gan, ens.)",lowerAlpha:"Kleinletters (a, b, c, d, e, ens.)",lowerGreek:"Griekse kleinletters (alpha, beta, gamma, ens.)",lowerRoman:"Romeinse kleinletters (i, ii, iii, iv, v, ens.)",none:"Geen",notset:"<nie ingestel nie>", -numberedTitle:"Eienskappe van genommerde lys",square:"Vierkant",start:"Begin",type:"Tipe",upperAlpha:"Hoofletters (A, B, C, D, E, ens.)",upperRoman:"Romeinse hoofletters (I, II, III, IV, V, ens.)",validateStartNumber:"Beginnommer van lys moet 'n heelgetal wees."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ar.js deleted file mode 100644 index 72b9f52a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ar.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ar",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bg.js deleted file mode 100644 index 5cc312a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bg.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bg",{armenian:"Арменско номериране",bulletedTitle:"Bulleted List Properties",circle:"Кръг",decimal:"Числа (1, 2, 3 и др.)",decimalLeadingZero:"Числа с водеща нула (01, 02, 03 и т.н.)",disc:"Диск",georgian:"Грузинско номериране (an, ban, gan, и т.н.)",lowerAlpha:"Малки букви (а, б, в, г, д и т.н.)",lowerGreek:"Малки гръцки букви (алфа, бета, гама и т.н.)",lowerRoman:"Малки римски числа (i, ii, iii, iv, v и т.н.)",none:"Няма",notset:"<не е указано>",numberedTitle:"Numbered List Properties", -square:"Квадрат",start:"Старт",type:"Тип",upperAlpha:"Големи букви (А, Б, В, Г, Д и т.н.)",upperRoman:"Големи римски числа (I, II, III, IV, V и т.н.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bn.js deleted file mode 100644 index d002bafc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bs.js deleted file mode 100644 index af72e359..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/bs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","bs",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ca.js deleted file mode 100644 index 42455a34..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ca",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cs.js deleted file mode 100644 index d3abb5c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cs.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","cs",{armenian:"Arménské",bulletedTitle:"Vlastnosti odrážek",circle:"Kroužky",decimal:"Arabská čísla (1, 2, 3, atd.)",decimalLeadingZero:"Arabská čísla uvozená nulou (01, 02, 03, atd.)",disc:"Kolečka",georgian:"Gruzínské (an, ban, gan, atd.)",lowerAlpha:"Malá latinka (a, b, c, d, e, atd.)",lowerGreek:"Malé řecké (alpha, beta, gamma, atd.)",lowerRoman:"Malé římské (i, ii, iii, iv, v, atd.)",none:"Nic",notset:"<nenastaveno>",numberedTitle:"Vlastnosti číslování", -square:"Čtverce",start:"Počátek",type:"Typ",upperAlpha:"Velká latinka (A, B, C, D, E, atd.)",upperRoman:"Velké římské (I, II, III, IV, V, atd.)",validateStartNumber:"Číslování musí začínat celým číslem."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cy.js deleted file mode 100644 index a5d6cc5f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/cy.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","cy",{armenian:"Rhifo Armeneg",bulletedTitle:"Priodweddau Rhestr Fwled",circle:"Cylch",decimal:"Degol (1, 2, 3, ayyb.)",decimalLeadingZero:"Degol â sero arweiniol (01, 02, 03, ayyb.)",disc:"Disg",georgian:"Rhifau Sioraidd (an, ban, gan, ayyb.)",lowerAlpha:"Alffa Is (a, b, c, d, e, ayyb.)",lowerGreek:"Groeg Is (alpha, beta, gamma, ayyb.)",lowerRoman:"Rhufeinig Is (i, ii, iii, iv, v, ayyb.)",none:"Dim",notset:"<heb osod>",numberedTitle:"Priodweddau Rhestr Rifol", -square:"Sgwâr",start:"Dechrau",type:"Math",upperAlpha:"Alffa Uwch (A, B, C, D, E, ayyb.)",upperRoman:"Rhufeinig Uwch (I, II, III, IV, V, ayyb.)",validateStartNumber:"Rhaid bod y rhif cychwynnol yn gyfanrif."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/da.js deleted file mode 100644 index d09c455e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/da.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","da",{armenian:"Armensk nummering",bulletedTitle:"Værdier for cirkelpunktopstilling",circle:"Cirkel",decimal:"Decimal (1, 2, 3, osv.)",decimalLeadingZero:"Decimaler med 0 først (01, 02, 03, etc.)",disc:"Værdier for diskpunktopstilling",georgian:"Georgiansk nummering (an, ban, gan, etc.)",lowerAlpha:"Små alfabet (a, b, c, d, e, etc.)",lowerGreek:"Små græsk (alpha, beta, gamma, etc.)",lowerRoman:"Små romerske (i, ii, iii, iv, v, etc.)",none:"Ingen",notset:"<ikke defineret>", -numberedTitle:"Egenskaber for nummereret liste",square:"Firkant",start:"Start",type:"Type",upperAlpha:"Store alfabet (A, B, C, D, E, etc.)",upperRoman:"Store romerske (I, II, III, IV, V, etc.)",validateStartNumber:"Den nummererede liste skal starte med et rundt nummer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/de.js deleted file mode 100644 index 30038e82..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/de.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","de",{armenian:"Armenisch Nummerierung",bulletedTitle:"Listen-Eigenschaften",circle:"Ring",decimal:"Dezimal (1, 2, 3, etc.)",decimalLeadingZero:"Dezimal mit führende Null (01, 02, 03, etc.)",disc:"Kreis",georgian:"Georgisch Nummerierung (an, ban, gan, etc.)",lowerAlpha:"Klein alpha (a, b, c, d, e, etc.)",lowerGreek:"Klein griechisch (alpha, beta, gamma, etc.)",lowerRoman:"Klein römisch (i, ii, iii, iv, v, etc.)",none:"Keine",notset:"<nicht gesetzt>",numberedTitle:"Nummerierte Listen-Eigenschaften", -square:"Quadrat",start:"Start",type:"Typ",upperAlpha:"Groß alpha (A, B, C, D, E, etc.)",upperRoman:"Groß römisch (I, II, III, IV, V, etc.)",validateStartNumber:"List Startnummer muss eine ganze Zahl sein."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/el.js deleted file mode 100644 index d077c8e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/el.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","el",{armenian:"Αρμενική αρίθμηση",bulletedTitle:"Ιδιότητες Λίστας Σημείων",circle:"Κύκλος",decimal:"Δεκαδική (1, 2, 3, κτλ)",decimalLeadingZero:"Δεκαδική με αρχικό μηδεν (01, 02, 03, κτλ)",disc:"Δίσκος",georgian:"Γεωργιανή αρίθμηση (ა, ბ, გ, κτλ)",lowerAlpha:"Μικρά Λατινικά (a, b, c, d, e, κτλ.)",lowerGreek:"Μικρά Ελληνικά (α, β, γ, κτλ)",lowerRoman:"Μικρά Ρωμαϊκά (i, ii, iii, iv, v, κτλ)",none:"Καμία",notset:"<δεν έχει οριστεί>",numberedTitle:"Ιδιότητες Αριθμημένης Λίστας ", -square:"Τετράγωνο",start:"Εκκίνηση",type:"Τύπος",upperAlpha:"Κεφαλαία Λατινικά (A, B, C, D, E, κτλ)",upperRoman:"Κεφαλαία Ρωμαϊκά (I, II, III, IV, V, κτλ)",validateStartNumber:"Ο αριθμός εκκίνησης της αρίθμησης πρέπει να είναι ακέραιος αριθμός."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-au.js deleted file mode 100644 index 41e685fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-au.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-au",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js deleted file mode 100644 index 633ecd9b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-ca",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js deleted file mode 100644 index 6f1ca2a5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en-gb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en-gb",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en.js deleted file mode 100644 index 6bba5a29..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/en.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","en",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eo.js deleted file mode 100644 index 6ef97acc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","eo",{armenian:"Armena nombrado",bulletedTitle:"Atributoj de Bula Listo",circle:"Cirklo",decimal:"Dekumaj Nombroj (1, 2, 3, ktp.)",decimalLeadingZero:"Dekumaj Nombroj malantaŭ nulo (01, 02, 03, ktp.)",disc:"Disko",georgian:"Gruza nombrado (an, ban, gan, ktp.)",lowerAlpha:"Minusklaj Literoj (a, b, c, d, e, ktp.)",lowerGreek:"Grekaj Minusklaj Literoj (alpha, beta, gamma, ktp.)",lowerRoman:"Minusklaj Romanaj Nombroj (i, ii, iii, iv, v, ktp.)",none:"Neniu",notset:"<Defaŭlta>", -numberedTitle:"Atributoj de Numera Listo",square:"kvadrato",start:"Komenco",type:"Tipo",upperAlpha:"Majusklaj Literoj (A, B, C, D, E, ktp.)",upperRoman:"Majusklaj Romanaj Nombroj (I, II, III, IV, V, ktp.)",validateStartNumber:"La unua listero devas esti entjera nombro."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/es.js deleted file mode 100644 index 06ed01a5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/es.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","es",{armenian:"Numeración armenia",bulletedTitle:"Propiedades de viñetas",circle:"Círculo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal con cero inicial (01, 02, 03, etc.)",disc:"Disco",georgian:"Numeración georgiana (an, ban, gan, etc.)",lowerAlpha:"Alfabeto en minúsculas (a, b, c, d, e, etc.)",lowerGreek:"Letras griegas (alpha, beta, gamma, etc.)",lowerRoman:"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)",none:"Ninguno",notset:"<sin establecer>", -numberedTitle:"Propiedades de lista numerada",square:"Cuadrado",start:"Inicio",type:"Tipo",upperAlpha:"Alfabeto en mayúsculas (A, B, C, D, E, etc.)",upperRoman:"Números romanos en mayúsculas (I, II, III, IV, V, etc.)",validateStartNumber:"El Inicio debe ser un número entero."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/et.js deleted file mode 100644 index 9212207b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/et.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","et",{armenian:"Armeenia numbrid",bulletedTitle:"Punktloendi omadused",circle:"Ring",decimal:"Numbrid (1, 2, 3, jne)",decimalLeadingZero:"Numbrid algusnulliga (01, 02, 03, jne)",disc:"Täpp",georgian:"Gruusia numbrid (an, ban, gan, jne)",lowerAlpha:"Väiketähed (a, b, c, d, e, jne)",lowerGreek:"Kreeka väiketähed (alpha, beta, gamma, jne)",lowerRoman:"Väiksed rooma numbrid (i, ii, iii, iv, v, jne)",none:"Puudub",notset:"<pole määratud>",numberedTitle:"Numberloendi omadused", -square:"Ruut",start:"Algus",type:"Liik",upperAlpha:"Suurtähed (A, B, C, D, E, jne)",upperRoman:"Suured rooma numbrid (I, II, III, IV, V, jne)",validateStartNumber:"Loendi algusnumber peab olema täisarv."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eu.js deleted file mode 100644 index dc0d63a7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/eu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","eu",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fa.js deleted file mode 100644 index 5a588c04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fa.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fa",{armenian:"شماره‌گذاری ارمنی",bulletedTitle:"خصوصیات فهرست نقطه‌ای",circle:"دایره",decimal:"ده‌دهی (۱، ۲، ۳، ...)",decimalLeadingZero:"دهدهی همراه با صفر (۰۱، ۰۲، ۰۳، ...)",disc:"صفحه گرد",georgian:"شمارهگذاری گریگورین (an, ban, gan, etc.)",lowerAlpha:"پانویس الفبایی (a, b, c, d, e, etc.)",lowerGreek:"پانویس یونانی (alpha, beta, gamma, etc.)",lowerRoman:"پانویس رومی (i, ii, iii, iv, v, etc.)",none:"هیچ",notset:"<تنظیم نشده>",numberedTitle:"ویژگیهای فهرست شمارهدار", -square:"چهارگوش",start:"شروع",type:"نوع",upperAlpha:"بالانویس الفبایی (A, B, C, D, E, etc.)",upperRoman:"بالانویس رومی (I, II, III, IV, V, etc.)",validateStartNumber:"فهرست شماره شروع باید یک عدد صحیح باشد."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fi.js deleted file mode 100644 index 2e55ab99..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fi",{armenian:"Armeenialainen numerointi",bulletedTitle:"Numeroimattoman listan ominaisuudet",circle:"Ympyrä",decimal:"Desimaalit (1, 2, 3, jne.)",decimalLeadingZero:"Desimaalit, alussa nolla (01, 02, 03, jne.)",disc:"Levy",georgian:"Georgialainen numerointi (an, ban, gan, etc.)",lowerAlpha:"Pienet aakkoset (a, b, c, d, e, jne.)",lowerGreek:"Pienet kreikkalaiset (alpha, beta, gamma, jne.)",lowerRoman:"Pienet roomalaiset (i, ii, iii, iv, v, jne.)",none:"Ei mikään", -notset:"<ei asetettu>",numberedTitle:"Numeroidun listan ominaisuudet",square:"Neliö",start:"Alku",type:"Tyyppi",upperAlpha:"Isot aakkoset (A, B, C, D, E, jne.)",upperRoman:"Isot roomalaiset (I, II, III, IV, V, jne.)",validateStartNumber:"Listan ensimmäisen numeron tulee olla kokonaisluku."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fo.js deleted file mode 100644 index c7861be7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fo.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fo",{armenian:"Armensk talskipan",bulletedTitle:"Eginleikar fyri lista við prikkum",circle:"Sirkul",decimal:"Vanlig tøl (1, 2, 3, etc.)",decimalLeadingZero:"Tøl við null frammanfyri (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgisk talskipan (an, ban, gan, osv.)",lowerAlpha:"Lítlir bókstavir (a, b, c, d, e, etc.)",lowerGreek:"Grikskt við lítlum (alpha, beta, gamma, etc.)",lowerRoman:"Lítil rómaratøl (i, ii, iii, iv, v, etc.)",none:"Einki",notset:"<ikki sett>", -numberedTitle:"Eginleikar fyri lista við tølum",square:"Fýrkantur",start:"Byrjan",type:"Slag",upperAlpha:"Stórir bókstavir (A, B, C, D, E, etc.)",upperRoman:"Stór rómaratøl (I, II, III, IV, V, etc.)",validateStartNumber:"Byrjunartalið fyri lista má vera eitt heiltal."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js deleted file mode 100644 index 1c2925a8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr-ca.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fr-ca",{armenian:"Numération arménienne",bulletedTitle:"Propriété de liste à puce",circle:"Cercle",decimal:"Décimal (1, 2, 3, etc.)",decimalLeadingZero:"Décimal avec zéro (01, 02, 03, etc.)",disc:"Disque",georgian:"Numération géorgienne (an, ban, gan, etc.)",lowerAlpha:"Alphabétique minuscule (a, b, c, d, e, etc.)",lowerGreek:"Grecque minuscule (alpha, beta, gamma, etc.)",lowerRoman:"Romain minuscule (i, ii, iii, iv, v, etc.)",none:"Aucun",notset:"<non défini>", -numberedTitle:"Propriété de la liste numérotée",square:"Carré",start:"Début",type:"Type",upperAlpha:"Alphabétique majuscule (A, B, C, D, E, etc.)",upperRoman:"Romain Majuscule (I, II, III, IV, V, etc.)",validateStartNumber:"Le numéro de début de liste doit être un entier."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr.js deleted file mode 100644 index a787f638..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/fr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","fr",{armenian:"Numération arménienne",bulletedTitle:"Propriétés de la liste à puces",circle:"Cercle",decimal:"Décimal (1, 2, 3, etc.)",decimalLeadingZero:"Décimal précédé par un 0 (01, 02, 03, etc.)",disc:"Disque",georgian:"Numération géorgienne (an, ban, gan, etc.)",lowerAlpha:"Alphabétique minuscules (a, b, c, d, e, etc.)",lowerGreek:"Grec minuscule (alpha, beta, gamma, etc.)",lowerRoman:"Nombres romains minuscules (i, ii, iii, iv, v, etc.)",none:"Aucun",notset:"<Non défini>", -numberedTitle:"Propriétés de la liste numérotée",square:"Carré",start:"Début",type:"Type",upperAlpha:"Alphabétique majuscules (A, B, C, D, E, etc.)",upperRoman:"Nombres romains majuscules (I, II, III, IV, V, etc.)",validateStartNumber:"Le premier élément de la liste doit être un nombre entier."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gl.js deleted file mode 100644 index f4e986fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","gl",{armenian:"Numeración armenia",bulletedTitle:"Propiedades da lista viñeteada",circle:"Circulo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal con cero á esquerda (01, 02, 03, etc.)",disc:"Disc",georgian:"Numeración xeorxiana (an, ban, gan, etc.)",lowerAlpha:"Alfabeto en minúsculas (a, b, c, d, e, etc.)",lowerGreek:"Grego en minúsculas (alpha, beta, gamma, etc.)",lowerRoman:"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)",none:"Ningún", -notset:"<sen estabelecer>",numberedTitle:"Propiedades da lista numerada",square:"Cadrado",start:"Inicio",type:"Tipo",upperAlpha:"Alfabeto en maiúsculas (A, B, C, D, E, etc.)",upperRoman:"Números romanos en maiúsculas (I, II, III, IV, V, etc.)",validateStartNumber:"O número de inicio da lista debe ser un número enteiro."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gu.js deleted file mode 100644 index 48995fbc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/gu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","gu",{armenian:"અરમેનિયન આંકડા પદ્ધતિ",bulletedTitle:"બુલેટેડ લીસ્ટના ગુણ",circle:"વર્તુળ",decimal:"આંકડા (1, 2, 3, etc.)",decimalLeadingZero:"સુન્ય આગળ આંકડા (01, 02, 03, etc.)",disc:"ડિસ્ક",georgian:"ગેઓર્ગિયન આંકડા પદ્ધતિ (an, ban, gan, etc.)",lowerAlpha:"આલ્ફા નાના (a, b, c, d, e, etc.)",lowerGreek:"ગ્રીક નાના (alpha, beta, gamma, etc.)",lowerRoman:"રોમન નાના (i, ii, iii, iv, v, etc.)",none:"કસુ ",notset:"<સેટ નથી>",numberedTitle:"આંકડાના લીસ્ટના ગુણ",square:"ચોરસ", -start:"શરુ કરવું",type:"પ્રકાર",upperAlpha:"આલ્ફા મોટા (A, B, C, D, E, etc.)",upperRoman:"રોમન મોટા (I, II, III, IV, V, etc.)",validateStartNumber:"લીસ્ટના સરુઆતનો આંકડો પુરો હોવો જોઈએ."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/he.js deleted file mode 100644 index ba746516..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/he.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","he",{armenian:"ספרות ארמניות",bulletedTitle:"תכונות רשימת תבליטים",circle:"עיגול ריק",decimal:"ספרות (1, 2, 3 וכו')",decimalLeadingZero:"ספרות עם 0 בהתחלה (01, 02, 03 וכו')",disc:"עיגול מלא",georgian:"ספרות גיאורגיות (an, ban, gan וכו')",lowerAlpha:"אותיות אנגליות קטנות (a, b, c, d, e וכו')",lowerGreek:"אותיות יווניות קטנות (alpha, beta, gamma וכו')",lowerRoman:"ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו')",none:"ללא",notset:"<לא נקבע>",numberedTitle:"תכונות רשימה ממוספרת", -square:"ריבוע",start:"תחילת מספור",type:"סוג",upperAlpha:"אותיות אנגליות גדולות (A, B, C, D, E וכו')",upperRoman:"ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו')",validateStartNumber:"שדה תחילת המספור חייב להכיל מספר שלם."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hi.js deleted file mode 100644 index 23e5affe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hi",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hr.js deleted file mode 100644 index 66a47962..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hr",{armenian:"Armenijska numeracija",bulletedTitle:"Svojstva liste",circle:"Krug",decimal:"Decimalna numeracija (1, 2, 3, itd.)",decimalLeadingZero:"Decimalna s vodećom nulom (01, 02, 03, itd)",disc:"Disk",georgian:"Gruzijska numeracija(an, ban, gan, etc.)",lowerAlpha:"Znakovi mala slova (a, b, c, d, e, itd.)",lowerGreek:"Grčka numeracija mala slova (alfa, beta, gama, itd).",lowerRoman:"Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)",none:"Bez",notset:"<nije određen>", -numberedTitle:"Svojstva brojčane liste",square:"Kvadrat",start:"Početak",type:"Vrsta",upperAlpha:"Znakovi velika slova (A, B, C, D, E, itd.)",upperRoman:"Romanska numeracija velika slova (I, II, III, IV, V, itd.)",validateStartNumber:"Početak brojčane liste mora biti cijeli broj."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hu.js deleted file mode 100644 index d37d441f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/hu.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","hu",{armenian:"Örmény számozás",bulletedTitle:"Pontozott lista tulajdonságai",circle:"Kör",decimal:"Arab számozás (1, 2, 3, stb.)",decimalLeadingZero:"Számozás bevezető nullákkal (01, 02, 03, stb.)",disc:"Korong",georgian:"Grúz számozás (an, ban, gan, stb.)",lowerAlpha:"Kisbetűs (a, b, c, d, e, stb.)",lowerGreek:"Görög (alpha, beta, gamma, stb.)",lowerRoman:"Római kisbetűs (i, ii, iii, iv, v, stb.)",none:"Nincs",notset:"<Nincs beállítva>",numberedTitle:"Sorszámozott lista tulajdonságai", -square:"Négyzet",start:"Kezdőszám",type:"Típus",upperAlpha:"Nagybetűs (A, B, C, D, E, stb.)",upperRoman:"Római nagybetűs (I, II, III, IV, V, stb.)",validateStartNumber:"A kezdőszám nem lehet tört érték."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/id.js deleted file mode 100644 index 65d48510..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/id.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","id",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Lingkaran",decimal:"Desimal (1, 2, 3, dst.)",decimalLeadingZero:"Desimal diawali angka nol (01, 02, 03, dst.)",disc:"Cakram",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Huruf Kecil (a, b, c, d, e, dst.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Angka Romawi (i, ii, iii, iv, v, dst.)",none:"Tidak ada",notset:"<tidak diatur>",numberedTitle:"Numbered List Properties", -square:"Persegi",start:"Mulai",type:"Tipe",upperAlpha:"Huruf Besar (A, B, C, D, E, dst.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/is.js deleted file mode 100644 index 3f8cd1a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/is.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","is",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/it.js deleted file mode 100644 index 674c5e1b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/it.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","it",{armenian:"Numerazione Armena",bulletedTitle:"Proprietà liste puntate",circle:"Cerchio",decimal:"Decimale (1, 2, 3, ecc.)",decimalLeadingZero:"Decimale preceduto da 0 (01, 02, 03, ecc.)",disc:"Disco",georgian:"Numerazione Georgiana (an, ban, gan, ecc.)",lowerAlpha:"Alfabetico minuscolo (a, b, c, d, e, ecc.)",lowerGreek:"Greco minuscolo (alpha, beta, gamma, ecc.)",lowerRoman:"Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)",none:"Nessuno",notset:"<non impostato>", -numberedTitle:"Proprietà liste numerate",square:"Quadrato",start:"Inizio",type:"Tipo",upperAlpha:"Alfabetico maiuscolo (A, B, C, D, E, ecc.)",upperRoman:"Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)",validateStartNumber:"Il numero di inizio di una lista numerata deve essere un numero intero."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ja.js deleted file mode 100644 index 934cc98c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ja.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ja",{armenian:"アルメニア数字",bulletedTitle:"箇条書きのプロパティ",circle:"白丸",decimal:"数字 (1, 2, 3, etc.)",decimalLeadingZero:"0付きの数字 (01, 02, 03, etc.)",disc:"黒丸",georgian:"グルジア数字 (an, ban, gan, etc.)",lowerAlpha:"小文字アルファベット (a, b, c, d, e, etc.)",lowerGreek:"小文字ギリシャ文字 (alpha, beta, gamma, etc.)",lowerRoman:"小文字ローマ数字 (i, ii, iii, iv, v, etc.)",none:"なし",notset:"<なし>",numberedTitle:"番号付きリストのプロパティ",square:"四角",start:"開始",type:"種類",upperAlpha:"大文字アルファベット (A, B, C, D, E, etc.)", -upperRoman:"大文字ローマ数字 (I, II, III, IV, V, etc.)",validateStartNumber:"リストの開始番号は数値で入力してください。"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ka.js deleted file mode 100644 index f820e66a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ka.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ka",{armenian:"სომხური გადანომრვა",bulletedTitle:"ღილებიანი სიის პარამეტრები",circle:"წრეწირი",decimal:"რიცხვებით (1, 2, 3, ..)",decimalLeadingZero:"ნულით დაწყებული რიცხვებით (01, 02, 03, ..)",disc:"წრე",georgian:"ქართული გადანომრვა (ან, ბან, გან, ..)",lowerAlpha:"პატარა ლათინური ასოებით (a, b, c, d, e, ..)",lowerGreek:"პატარა ბერძნული ასოებით (ალფა, ბეტა, გამა, ..)",lowerRoman:"რომაული გადანომრვცა პატარა ციფრებით (i, ii, iii, iv, v, ..)",none:"არაფერი",notset:"<არაფერი>", -numberedTitle:"გადანომრილი სიის პარამეტრები",square:"კვადრატი",start:"საწყისი",type:"ტიპი",upperAlpha:"დიდი ლათინური ასოებით (A, B, C, D, E, ..)",upperRoman:"რომაული გადანომრვა დიდი ციფრებით (I, II, III, IV, V, etc.)",validateStartNumber:"სიის საწყისი მთელი რიცხვი უნდა იყოს."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/km.js deleted file mode 100644 index 181efe3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/km.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","km",{armenian:"លេខ​អារមេនី",bulletedTitle:"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​ចំណុច",circle:"រង្វង់​មូល",decimal:"លេខ​ទសភាគ (1, 2, 3, ...)",decimalLeadingZero:"ទសភាគ​ចាប់​ផ្ដើម​ពី​សូន្យ (01, 02, 03, ...)",disc:"ថាស",georgian:"លេខ​ចចជា (an, ban, gan, ...)",lowerAlpha:"ព្យញ្ជនៈ​តូច (a, b, c, d, e, ...)",lowerGreek:"លេខ​ក្រិក​តូច (alpha, beta, gamma, ...)",lowerRoman:"លេខ​រ៉ូម៉ាំង​តូច (i, ii, iii, iv, v, ...)",none:"គ្មាន",notset:"<not set>",numberedTitle:"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​លេខ", -square:"ការេ",start:"ចាប់​ផ្ដើម",type:"ប្រភេទ",upperAlpha:"អក្សរ​ធំ (A, B, C, D, E, ...)",upperRoman:"លេខ​រ៉ូម៉ាំង​ធំ (I, II, III, IV, V, ...)",validateStartNumber:"លេខ​ចាប់​ផ្ដើម​បញ្ជី ត្រូវ​តែ​ជា​តួ​លេខ​ពិត​ប្រាកដ។"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ko.js deleted file mode 100644 index 1be0697f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ko.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ko",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ku.js deleted file mode 100644 index ccb7e195..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ku.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ku",{armenian:"ئاراستەی ژمارەی ئەرمەنی",bulletedTitle:"خاسیەتی لیستی خاڵی",circle:"بازنه",decimal:"ژمارە (1, 2, 3, وە هیتر.)",decimalLeadingZero:"ژمارە سفڕی لەپێشەوه (01, 02, 03, وە هیتر.)",disc:"پەپکە",georgian:"ئاراستەی ژمارەی جۆڕجی (an, ban, gan, وە هیتر.)",lowerAlpha:"ئەلفابێی بچووك (a, b, c, d, e, وە هیتر.)",lowerGreek:"یۆنانی بچووك (alpha, beta, gamma, وە هیتر.)",lowerRoman:"ژمارەی ڕۆمی بچووك (i, ii, iii, iv, v, وە هیتر.)",none:"هیچ",notset:"<دانەندراوه>", -numberedTitle:"خاسیەتی لیستی ژمارەیی",square:"چووراگۆشە",start:"دەستپێکردن",type:"جۆر",upperAlpha:"ئەلفابێی گەوره (A, B, C, D, E, وە هیتر.)",upperRoman:"ژمارەی ڕۆمی گەوره (I, II, III, IV, V, وە هیتر.)",validateStartNumber:"دەستپێکەری لیستی ژمارەیی دەبێت تەنها ژمارە بێت."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lt.js deleted file mode 100644 index c563c96d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","lt",{armenian:"Armėniški skaitmenys",bulletedTitle:"Ženklelinio sąrašo nustatymai",circle:"Apskritimas",decimal:"Dešimtainis (1, 2, 3, t.t)",decimalLeadingZero:"Dešimtainis su nuliu priekyje (01, 02, 03, t.t)",disc:"Diskas",georgian:"Gruziniški skaitmenys (an, ban, gan, t.t)",lowerAlpha:"Mažosios Alpha (a, b, c, d, e, t.t)",lowerGreek:"Mažosios Graikų (alpha, beta, gamma, t.t)",lowerRoman:"Mažosios Romėnų (i, ii, iii, iv, v, t.t)",none:"Niekas",notset:"<nenurodytas>", -numberedTitle:"Skaitmeninio sąrašo nustatymai",square:"Kvadratas",start:"Pradžia",type:"Rūšis",upperAlpha:"Didžiosios Alpha (A, B, C, D, E, t.t)",upperRoman:"Didžiosios Romėnų (I, II, III, IV, V, t.t)",validateStartNumber:"Sąrašo pradžios skaitmuo turi būti sveikas skaičius."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lv.js deleted file mode 100644 index 94c41888..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/lv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","lv",{armenian:"Armēņu skaitļi",bulletedTitle:"Vienkārša saraksta uzstādījumi",circle:"Aplis",decimal:"Decimālie (1, 2, 3, utt)",decimalLeadingZero:"Decimālie ar nulli (01, 02, 03, utt)",disc:"Disks",georgian:"Gruzīņu skaitļi (an, ban, gan, utt)",lowerAlpha:"Mazie alfabēta (a, b, c, d, e, utt)",lowerGreek:"Mazie grieķu (alfa, beta, gamma, utt)",lowerRoman:"Mazie romāņu (i, ii, iii, iv, v, utt)",none:"Nekas",notset:"<nav norādīts>",numberedTitle:"Numurēta saraksta uzstādījumi", -square:"Kvadrāts",start:"Sākt",type:"Tips",upperAlpha:"Lielie alfabēta (A, B, C, D, E, utt)",upperRoman:"Lielie romāņu (I, II, III, IV, V, utt)",validateStartNumber:"Saraksta sākuma numuram jābūt veselam skaitlim"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mk.js deleted file mode 100644 index 36966219..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","mk",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mn.js deleted file mode 100644 index 895d754e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/mn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","mn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Төрөл",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ms.js deleted file mode 100644 index ffe91b8b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ms.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ms",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nb.js deleted file mode 100644 index cd9b38db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nb.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","nb",{armenian:"Armensk nummerering",bulletedTitle:"Egenskaper for punktmerket liste",circle:"Sirkel",decimal:"Tall (1, 2, 3, osv.)",decimalLeadingZero:"Tall, med førstesiffer null (01, 02, 03, osv.)",disc:"Disk",georgian:"Georgisk nummerering (an, ban, gan, osv.)",lowerAlpha:"Alfabetisk, små (a, b, c, d, e, osv.)",lowerGreek:"Gresk, små (alpha, beta, gamma, osv.)",lowerRoman:"Romertall, små (i, ii, iii, iv, v, osv.)",none:"Ingen",notset:"<ikke satt>",numberedTitle:"Egenskaper for nummerert liste", -square:"Firkant",start:"Start",type:"Type",upperAlpha:"Alfabetisk, store (A, B, C, D, E, osv.)",upperRoman:"Romertall, store (I, II, III, IV, V, osv.)",validateStartNumber:"Starten på listen må være et heltall."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nl.js deleted file mode 100644 index 4fc950ab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/nl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","nl",{armenian:"Armeense nummering",bulletedTitle:"Eigenschappen lijst met opsommingstekens",circle:"Cirkel",decimal:"Cijfers (1, 2, 3, etc.)",decimalLeadingZero:"Cijfers beginnen met nul (01, 02, 03, etc.)",disc:"Schijf",georgian:"Georgische nummering (an, ban, gan, etc.)",lowerAlpha:"Kleine letters (a, b, c, d, e, etc.)",lowerGreek:"Grieks kleine letters (alpha, beta, gamma, etc.)",lowerRoman:"Romeins kleine letters (i, ii, iii, iv, v, etc.)",none:"Geen",notset:"<niet gezet>", -numberedTitle:"Eigenschappen genummerde lijst",square:"Vierkant",start:"Start",type:"Type",upperAlpha:"Hoofdletters (A, B, C, D, E, etc.)",upperRoman:"Romeinse hoofdletters (I, II, III, IV, V, etc.)",validateStartNumber:"Startnummer van de lijst moet een heel nummer zijn."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/no.js deleted file mode 100644 index f753bd6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/no.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","no",{armenian:"Armensk nummerering",bulletedTitle:"Egenskaper for punktmerket liste",circle:"Sirkel",decimal:"Tall (1, 2, 3, osv.)",decimalLeadingZero:"Tall, med førstesiffer null (01, 02, 03, osv.)",disc:"Disk",georgian:"Georgisk nummerering (an, ban, gan, osv.)",lowerAlpha:"Alfabetisk, små (a, b, c, d, e, osv.)",lowerGreek:"Gresk, små (alpha, beta, gamma, osv.)",lowerRoman:"Romertall, små (i, ii, iii, iv, v, osv.)",none:"Ingen",notset:"<ikke satt>",numberedTitle:"Egenskaper for nummerert liste", -square:"Firkant",start:"Start",type:"Type",upperAlpha:"Alfabetisk, store (A, B, C, D, E, osv.)",upperRoman:"Romertall, store (I, II, III, IV, V, osv.)",validateStartNumber:"Starten på listen må være et heltall."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pl.js deleted file mode 100644 index 85da585d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pl",{armenian:"Numerowanie armeńskie",bulletedTitle:"Właściwości list wypunktowanych",circle:"Koło",decimal:"Liczby (1, 2, 3 itd.)",decimalLeadingZero:"Liczby z początkowym zerem (01, 02, 03 itd.)",disc:"Okrąg",georgian:"Numerowanie gruzińskie (an, ban, gan itd.)",lowerAlpha:"Małe litery (a, b, c, d, e itd.)",lowerGreek:"Małe litery greckie (alpha, beta, gamma itd.)",lowerRoman:"Małe cyfry rzymskie (i, ii, iii, iv, v itd.)",none:"Brak",notset:"<nie ustawiono>", -numberedTitle:"Właściwości list numerowanych",square:"Kwadrat",start:"Początek",type:"Typ punktora",upperAlpha:"Duże litery (A, B, C, D, E itd.)",upperRoman:"Duże cyfry rzymskie (I, II, III, IV, V itd.)",validateStartNumber:"Listę musi rozpoczynać liczba całkowita."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js deleted file mode 100644 index 190c8937..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt-br.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pt-br",{armenian:"Numeração Armêna",bulletedTitle:"Propriedades da Lista sem Numeros",circle:"Círculo",decimal:"Numeração Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Numeração Decimal com zeros (01, 02, 03, etc.)",disc:"Disco",georgian:"Numeração da Geórgia (an, ban, gan, etc.)",lowerAlpha:"Numeração Alfabética minúscula (a, b, c, d, e, etc.)",lowerGreek:"Numeração Grega minúscula (alpha, beta, gamma, etc.)",lowerRoman:"Numeração Romana minúscula (i, ii, iii, iv, v, etc.)", -none:"Nenhum",notset:"<não definido>",numberedTitle:"Propriedades da Lista Numerada",square:"Quadrado",start:"Início",type:"Tipo",upperAlpha:"Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)",upperRoman:"Numeração Romana maiúscula (I, II, III, IV, V, etc.)",validateStartNumber:"O número inicial da lista deve ser um número inteiro."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt.js deleted file mode 100644 index 2b0f85a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/pt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","pt",{armenian:"Numeração armênia",bulletedTitle:"Bulleted List Properties",circle:"Círculo",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disco",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"Nenhum",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Quadrado",start:"Iniciar",type:"Tipo",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ro.js deleted file mode 100644 index d76923bf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ro.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ro",{armenian:"Numerotare armeniană",bulletedTitle:"Proprietățile listei cu simboluri",circle:"Cerc",decimal:"Decimale (1, 2, 3, etc.)",decimalLeadingZero:"Decimale cu zero în față (01, 02, 03, etc.)",disc:"Disc",georgian:"Numerotare georgiană (an, ban, gan, etc.)",lowerAlpha:"Litere mici (a, b, c, d, e, etc.)",lowerGreek:"Litere grecești mici (alpha, beta, gamma, etc.)",lowerRoman:"Cifre romane mici (i, ii, iii, iv, v, etc.)",none:"Nimic",notset:"<nesetat>", -numberedTitle:"Proprietățile listei numerotate",square:"Pătrat",start:"Start",type:"Tip",upperAlpha:"Litere mari (A, B, C, D, E, etc.)",upperRoman:"Cifre romane mari (I, II, III, IV, V, etc.)",validateStartNumber:"Începutul listei trebuie să fie un număr întreg."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ru.js deleted file mode 100644 index 421fd606..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ru.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ru",{armenian:"Армянская нумерация",bulletedTitle:"Свойства маркированного списка",circle:"Круг",decimal:"Десятичные (1, 2, 3, и т.д.)",decimalLeadingZero:"Десятичные с ведущим нулём (01, 02, 03, и т.д.)",disc:"Окружность",georgian:"Грузинская нумерация (ани, бани, гани, и т.д.)",lowerAlpha:"Строчные латинские (a, b, c, d, e, и т.д.)",lowerGreek:"Строчные греческие (альфа, бета, гамма, и т.д.)",lowerRoman:"Строчные римские (i, ii, iii, iv, v, и т.д.)",none:"Нет", -notset:"<не указано>",numberedTitle:"Свойства нумерованного списка",square:"Квадрат",start:"Начиная с",type:"Тип",upperAlpha:"Заглавные латинские (A, B, C, D, E, и т.д.)",upperRoman:"Заглавные римские (I, II, III, IV, V, и т.д.)",validateStartNumber:"Первый номер списка должен быть задан обычным целым числом."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/si.js deleted file mode 100644 index c2253a52..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/si.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","si",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"කිසිවක්ම නොවේ",notset:"<යොදා >",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"වර්ගය",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sk.js deleted file mode 100644 index 817dab04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sk",{armenian:"Arménske číslovanie",bulletedTitle:"Vlastnosti odrážkového zoznamu",circle:"Kruh",decimal:"Číselné (1, 2, 3, atď.)",decimalLeadingZero:"Číselné s nulou (01, 02, 03, atď.)",disc:"Disk",georgian:"Gregoriánske číslovanie (an, ban, gan, atď.)",lowerAlpha:"Malé latinské (a, b, c, d, e, atď.)",lowerGreek:"Malé grécke (alfa, beta, gama, atď.)",lowerRoman:"Malé rímske (i, ii, iii, iv, v, atď.)",none:"Nič",notset:"<nenastavené>",numberedTitle:"Vlastnosti číselného zoznamu", -square:"Štvorec",start:"Začiatok",type:"Typ",upperAlpha:"Veľké latinské (A, B, C, D, E, atď.)",upperRoman:"Veľké rímske (I, II, III, IV, V, atď.)",validateStartNumber:"Začiatočné číslo číselného zoznamu musí byť celé číslo."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sl.js deleted file mode 100644 index f147fe2e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sl.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sl",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sq.js deleted file mode 100644 index 586b7d40..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sq.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sq",{armenian:"Numërim armenian",bulletedTitle:"Karakteristikat e Listës me Pulla",circle:"Rreth",decimal:"Decimal (1, 2, 3, etj.)",decimalLeadingZero:"Decimal me zerro udhëheqëse (01, 02, 03, etj.)",disc:"Disk",georgian:"Numërim gjeorgjian (an, ban, gan, etj.)",lowerAlpha:"Të vogla alfa (a, b, c, d, e, etj.)",lowerGreek:"Të vogla greke (alpha, beta, gamma, etj.)",lowerRoman:"Të vogla romake (i, ii, iii, iv, v, etj.)",none:"Asnjë",notset:"<e pazgjedhur>",numberedTitle:"Karakteristikat e Listës me Numra", -square:"Katror",start:"Fillimi",type:"LLoji",upperAlpha:"Të mëdha alfa (A, B, C, D, E, etj.)",upperRoman:"Të mëdha romake (I, II, III, IV, V, etj.)",validateStartNumber:"Numri i fillimit të listës duhet të është numër i plotë."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js deleted file mode 100644 index df10d830..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr-latn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sr-latn",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr.js deleted file mode 100644 index 1864935a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sr",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sv.js deleted file mode 100644 index 8a5f9392..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/sv.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","sv",{armenian:"Armenisk numrering",bulletedTitle:"Egenskaper för punktlista",circle:"Cirkel",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal nolla (01, 02, 03, etc.)",disc:"Disk",georgian:"Georgisk numrering (an, ban, gan, etc.)",lowerAlpha:"Alpha gemener (a, b, c, d, e, etc.)",lowerGreek:"Grekiska gemener (alpha, beta, gamma, etc.)",lowerRoman:"Romerska gemener (i, ii, iii, iv, v, etc.)",none:"Ingen",notset:"<ej angiven>",numberedTitle:"Egenskaper för punktlista", -square:"Fyrkant",start:"Start",type:"Typ",upperAlpha:"Alpha versaler (A, B, C, D, E, etc.)",upperRoman:"Romerska versaler (I, II, III, IV, V, etc.)",validateStartNumber:"Listans startnummer måste vara ett heltal."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/th.js deleted file mode 100644 index 7ffb3ebd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/th.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","th",{armenian:"Armenian numbering",bulletedTitle:"Bulleted List Properties",circle:"Circle",decimal:"Decimal (1, 2, 3, etc.)",decimalLeadingZero:"Decimal leading zero (01, 02, 03, etc.)",disc:"Disc",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"None",notset:"<not set>",numberedTitle:"Numbered List Properties", -square:"Square",start:"Start",type:"Type",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tr.js deleted file mode 100644 index a19f7c73..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tr.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","tr",{armenian:"Ermenice sayılandırma",bulletedTitle:"Simgeli Liste Özellikleri",circle:"Daire",decimal:"Ondalık (1, 2, 3, vs.)",decimalLeadingZero:"Başı sıfırlı ondalık (01, 02, 03, vs.)",disc:"Disk",georgian:"Gürcüce numaralandırma (an, ban, gan, vs.)",lowerAlpha:"Küçük Alpha (a, b, c, d, e, vs.)",lowerGreek:"Küçük Greek (alpha, beta, gamma, vs.)",lowerRoman:"Küçük Roman (i, ii, iii, iv, v, vs.)",none:"Yok",notset:"<ayarlanmamış>",numberedTitle:"Sayılandırılmış Liste Özellikleri", -square:"Kare",start:"Başla",type:"Tipi",upperAlpha:"Büyük Alpha (A, B, C, D, E, vs.)",upperRoman:"Büyük Roman (I, II, III, IV, V, vs.)",validateStartNumber:"Liste başlangıcı tam sayı olmalıdır."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tt.js deleted file mode 100644 index 07fadad3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/tt.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","tt",{armenian:"Armenian numbering",bulletedTitle:"Маркерлы тезмә үзлекләре",circle:"Түгәрәк",decimal:"Унарлы (1, 2, 3, ...)",decimalLeadingZero:"Ноль белән башланган унарлы (01, 02, 03, ...)",disc:"Диск",georgian:"Georgian numbering (an, ban, gan, etc.)",lowerAlpha:"Lower Alpha (a, b, c, d, e, etc.)",lowerGreek:"Lower Greek (alpha, beta, gamma, etc.)",lowerRoman:"Lower Roman (i, ii, iii, iv, v, etc.)",none:"Һичбер",notset:"<билгеләнмәгән>",numberedTitle:"Numbered List Properties", -square:"Шакмак",start:"Башлау",type:"Төр",upperAlpha:"Upper Alpha (A, B, C, D, E, etc.)",upperRoman:"Upper Roman (I, II, III, IV, V, etc.)",validateStartNumber:"List start number must be a whole number."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ug.js deleted file mode 100644 index d278f60d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/ug.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","ug",{armenian:"قەدىمكى ئەرمىنىيە تەرتىپ نومۇرى شەكلى",bulletedTitle:"تۈر بەلگە تىزىم خاسلىقى",circle:"بوش چەمبەر",decimal:"سان (1, 2, 3 قاتارلىق)",decimalLeadingZero:"نۆلدىن باشلانغان سان بەلگە (01, 02, 03 قاتارلىق)",disc:"تولدۇرۇلغان چەمبەر",georgian:"قەدىمكى جورجىيە تەرتىپ نومۇرى شەكلى (an, ban, gan قاتارلىق)",lowerAlpha:"ئىنگلىزچە كىچىك ھەرپ (a, b, c, d, e قاتارلىق)",lowerGreek:"گرېكچە كىچىك ھەرپ (alpha, beta, gamma قاتارلىق)",lowerRoman:"كىچىك ھەرپلىك رىم رەقىمى (i, ii, iii, iv, v قاتارلىق)", -none:"بەلگە يوق",notset:"‹تەڭشەلمىگەن›",numberedTitle:"تەرتىپ نومۇر تىزىم خاسلىقى",square:"تولدۇرۇلغان تۆت چاسا",start:"باشلىنىش نومۇرى",type:"بەلگە تىپى",upperAlpha:"ئىنگلىزچە چوڭ ھەرپ (A, B, C, D, E قاتارلىق)",upperRoman:"چوڭ ھەرپلىك رىم رەقىمى (I, II, III, IV, V قاتارلىق)",validateStartNumber:"تىزىم باشلىنىش تەرتىپ نومۇرى چوقۇم پۈتۈن سان پىچىمىدا بولۇشى لازىم"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/uk.js deleted file mode 100644 index de577116..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/uk.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","uk",{armenian:"Вірменська нумерація",bulletedTitle:"Опції маркованого списку",circle:"Кільце",decimal:"Десяткові (1, 2, 3 і т.д.)",decimalLeadingZero:"Десяткові з нулем (01, 02, 03 і т.д.)",disc:"Кружечок",georgian:"Грузинська нумерація (an, ban, gan і т.д.)",lowerAlpha:"Малі лат. букви (a, b, c, d, e і т.д.)",lowerGreek:"Малі гр. букви (альфа, бета, гамма і т.д.)",lowerRoman:"Малі римські (i, ii, iii, iv, v і т.д.)",none:"Нема",notset:"<не вказано>",numberedTitle:"Опції нумерованого списку", -square:"Квадратик",start:"Почати з...",type:"Тип",upperAlpha:"Великі лат. букви (A, B, C, D, E і т.д.)",upperRoman:"Великі римські (I, II, III, IV, V і т.д.)",validateStartNumber:"Початковий номер списку повинен бути цілим числом."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/vi.js deleted file mode 100644 index bd56db2b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/vi.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","vi",{armenian:"Số theo kiểu Armenian",bulletedTitle:"Thuộc tính danh sách không thứ tự",circle:"Khuyên tròn",decimal:"Kiểu số (1, 2, 3 ...)",decimalLeadingZero:"Kiểu số (01, 02, 03...)",disc:"Hình đĩa",georgian:"Số theo kiểu Georgian (an, ban, gan...)",lowerAlpha:"Kiểu abc thường (a, b, c, d, e...)",lowerGreek:"Kiểu Hy Lạp (alpha, beta, gamma...)",lowerRoman:"Số La Mã kiểu thường (i, ii, iii, iv, v...)",none:"Không gì cả",notset:"<không thiết lập>",numberedTitle:"Thuộc tính danh sách có thứ tự", -square:"Hình vuông",start:"Bắt đầu",type:"Kiểu loại",upperAlpha:"Kiểu ABC HOA (A, B, C, D, E...)",upperRoman:"Số La Mã kiểu HOA (I, II, III, IV, V...)",validateStartNumber:"Số bắt đầu danh sách phải là một số nguyên."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js deleted file mode 100644 index a27132cf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh-cn.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","zh-cn",{armenian:"传统的亚美尼亚编号方式",bulletedTitle:"项目列表属性",circle:"空心圆",decimal:"数字 (1, 2, 3, 等)",decimalLeadingZero:"0开头的数字标记(01, 02, 03, 等)",disc:"实心圆",georgian:"传统的乔治亚编号方式(an, ban, gan, 等)",lowerAlpha:"小写英文字母(a, b, c, d, e, 等)",lowerGreek:"小写希腊字母(alpha, beta, gamma, 等)",lowerRoman:"小写罗马数字(i, ii, iii, iv, v, 等)",none:"无标记",notset:"<没有设置>",numberedTitle:"编号列表属性",square:"实心方块",start:"开始序号",type:"标记类型",upperAlpha:"大写英文字母(A, B, C, D, E, 等)",upperRoman:"大写罗马数字(I, II, III, IV, V, 等)", -validateStartNumber:"列表开始序号必须为整数格式"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh.js deleted file mode 100644 index 566f075e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/lang/zh.js +++ /dev/null @@ -1,2 +0,0 @@ -CKEDITOR.plugins.setLang("liststyle","zh",{armenian:"亞美尼亞數字",bulletedTitle:"項目符號清單屬性",circle:"圓圈",decimal:"小數點 (1, 2, 3, etc.)",decimalLeadingZero:"前綴 0 十位數字 (01, 02, 03, 等)",disc:"圓點",georgian:"喬治王時代數字 (an, ban, gan, 等)",lowerAlpha:"小寫字母 (a, b, c, d, e 等)",lowerGreek:"小寫希臘字母 (alpha, beta, gamma, 等)",lowerRoman:"小寫羅馬數字 (i, ii, iii, iv, v 等)",none:"無",notset:"<未設定>",numberedTitle:"編號清單屬性",square:"方塊",start:"開始",type:"類型",upperAlpha:"大寫字母 (A, B, C, D, E 等)",upperRoman:"大寫羅馬數字 (I, II, III, IV, V 等)", -validateStartNumber:"清單起始號碼須為一完整數字。"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/liststyle/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/liststyle/plugin.js deleted file mode 100644 index 22087218..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/liststyle/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.liststyle={requires:"dialog,contextmenu",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",init:function(a){if(!a.blockless){var b;b=new CKEDITOR.dialogCommand("numberedListStyle",{requiredContent:"ol",allowedContent:"ol{list-style-type}[start]"});b=a.addCommand("numberedListStyle",b);a.addFeature(b); -CKEDITOR.dialog.add("numberedListStyle",this.path+"dialogs/liststyle.js");b=new CKEDITOR.dialogCommand("bulletedListStyle",{requiredContent:"ul",allowedContent:"ul{list-style-type}"});b=a.addCommand("bulletedListStyle",b);a.addFeature(b);CKEDITOR.dialog.add("bulletedListStyle",this.path+"dialogs/liststyle.js");a.addMenuGroup("list",108);a.addMenuItems({numberedlist:{label:a.lang.liststyle.numberedTitle,group:"list",command:"numberedListStyle"},bulletedlist:{label:a.lang.liststyle.bulletedTitle,group:"list", -command:"bulletedListStyle"}});a.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;for(;a;){var b=a.getName();if("ol"==b)return{numberedlist:CKEDITOR.TRISTATE_OFF};if("ul"==b)return{bulletedlist:CKEDITOR.TRISTATE_OFF};a=a.getParent()}return null})}}};CKEDITOR.plugins.add("liststyle",CKEDITOR.plugins.liststyle)})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png deleted file mode 100644 index 4a8d2bfdabcc7271dde74ba441d11deb5adc5663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDbWC*5LY1m9|L%t&t(Bhu$2V) z1v7m9_51I?Q~B(yKoJ*D7sn8e>&XFui49F#OeC~TM2>NBAD(jbywmmB4AXs^Hw!g3 zrKK6vW(G_+FkzM$n~Q^*56=n#HEv_kCE{7?J&c=}8RCPb`s%g^=>g4S@O1TaS?83{ F1OV9DKgIw6 diff --git a/platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png b/platforms/browser/www/lib/ckeditor/plugins/magicline/images/hidpi/icon.png deleted file mode 100644 index b981bb5c6c40ef143fbd1dbd92e17c3471a6e635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDTx4|5LY1m9~)4vn;Q?5V=oEv z3ua*W{OkAMe;?PrIs+66_jGX#;kaJgvr+JX0T0vtsZoZl?5FrnGTCjc<BHaFJ}fW8 z;LLgbsN(LI`xM)SR!Q7kyF^}!b51Tp2xHq{nawBJBDy~aZaeM&Q!y>QM%Pf)^OZeA b(rxbAsq!4pRQ+B7tzhtU^>bP0l+XkKZctCS diff --git a/platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon-rtl.png deleted file mode 100644 index 55b5b5f949a60c8fabc63867fd7827fe33d0ab71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ!3HGLSWET+sX$K`#}En0)_zAW1_cfl(^voJ zzZIFXGf`1QjpGte_M{Gzw|<VPsj3gS9VgA7;`6|x<%`Id`RRxKs@QTTzTFhSCL>n- mC^o0`vu%>-E46n=xrM(kReto&c<T<J;S8RxelF{r5}E)?!Y+9L diff --git a/platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon.png b/platforms/browser/www/lib/ckeditor/plugins/magicline/images/icon.png deleted file mode 100644 index e063433632af33f66b95443d81e2548322a280c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ!3HGLSWET+DIZT4#}J9jtrHCS4j6DSpAY@_ z|JIt$-BVULU8qX3IKvruq^yTK;#VV&!H+)1bxFTvWnVDf+2Y9=P@1=-ZB=gj<u^+j iWiOQ_&#S-eWUjwP{mzbQn_mIVW$<+Mb6Mw<&;$Uo<uLgG diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js deleted file mode 100644 index 25c3dff2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/dialogs/mathjax.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("mathjax",function(d){var c,b=d.lang.mathjax;return{title:b.title,minWidth:350,minHeight:100,contents:[{id:"info",elements:[{id:"equation",type:"textarea",label:b.dialogInput,onLoad:function(){var a=this;if(!(CKEDITOR.env.ie&&8==CKEDITOR.env.version))this.getInputElement().on("keyup",function(){c.setValue("\\("+a.getInputElement().getValue()+"\\)")})},setup:function(a){this.setValue(CKEDITOR.plugins.mathjax.trim(a.data.math))},commit:function(a){a.setData("math","\\("+this.getValue()+ -"\\)")}},{id:"documentation",type:"html",html:'<div style="width:100%;text-align:right;margin:-8px 0 10px"><a class="cke_mathjax_doc" href="'+b.docUrl+'" target="_black" style="cursor:pointer;color:#00B2CE;text-decoration:underline">'+b.docLabel+"</a></div>"},!(CKEDITOR.env.ie&&8==CKEDITOR.env.version)&&{id:"preview",type:"html",html:'<div style="width:100%;text-align:center;"><iframe style="border:0;width:0;height:0;font-size:20px" scrolling="no" frameborder="0" allowTransparency="true" src="'+CKEDITOR.plugins.mathjax.fixSrc+ -'"></iframe></div>',onLoad:function(){var a=CKEDITOR.document.getById(this.domId).getChild(0);c=new CKEDITOR.plugins.mathjax.frameWrapper(a,d)},setup:function(a){c.setValue(a.data.math)}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png b/platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png deleted file mode 100644 index 85b8e11df627e14ff43d101faa8c3b610c9bf615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmV;O1!DS%P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS00009a7bBm000|!000|!0iRgzQvd(}8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11sX|2K~z|U#g<=eQ&k+tzvrH{Ww-ZsEF~jNb-90rE}~<WWC-a% z*IQu0HKVdEB%;U?NtVci2441HVt68HFvC4mGg@9IiWc3FI64+Hg$EtYAOR$%$Hch| zH`C}w>u_za4{S|Wwys4dzqkAQ-TuCx^F8PE{zx<$#p4X_v8n?o$xXQ3?i&CqR!MI# z91g#l7XZLo0P9x?;JMtyLjY&aoS8d$@}!<jCP{XlQVLDe;({Qgm+OB2{(X{2BuFe4 zqZ1PoC6kkrCAzL>>T`2*)hhxxola^n7>Lj3Ln@V8RJ(KMj`{fU;}Au0Ifg|sGBN_c z-;Y=<wg6!CcsxR1U*EljcS!CnP!we=fJ;}dToJmux{ypJGqt;S??M#Cp96tFm(6CI z&Cw$OL;&RgD)GSXXUE6K$+2U{FgrVoR4Rqh(a~pyhK6o03os8+58&(J;bH#NsZ&U& zAGn@KBoK{8kxHe$i^t=;uU@?x&*y-mC@%u&85$Z=y1Tmp08>*_&B0*s%Y}EAyoQXi zZvixI-@g5?j*bpcN&x^o&qGlZa2)64dH%wV9Xm?%0WikC0pMzAX!xVPz8(NzwOSV) z#3dcbTER{Lec^D}<oElraG>JxI2dC{rBZ|Gbh_#C<;%I-k=w^RH#hfrG#bV9^mOaG zb?eUMbs%d6mjJxtcDw&>Z*R}!&1N%XSq8^(8X@HTu3fuKEA$B&42BP?tE*90S7*tt zt@uyK82bu9TVrEm^5DUPAmqXA6a)dXEQ3<IJDpB{*4o-?SfSNB0G<cXmz~VJ1=*n} zN(+FGL!l7u?d{EM$IQ$O7-P_N{d{F*Wou7QPcna}#ZmCLfH8Isz-wNwH{I6OmdT5v z2w9dv2-!O}HrA`EDqR(Td5B&B?JX@W`o4YpGI@)|0!fmf>w1f#D85w#n1=`gIJ|%V ze!aQ5Ig>9dD??RPRZ0+q!BqvAhxiD<TL%stz?Lmr005<>r8sfo1igO!`tD+SE%h}l z6ry`@aIhv4iM%O_B04)ev0=l8833XG1whlZ7DC7y8#iv8_W67kyWRdffJVmHNHKjL zX$v$>YbS)9wb^WAfk0r5-ERK{fU{U};1L{fyWMXSLVT*K{ul~{ssus!3BXRq*sq2B z-sABY6N$v@l+rH-1_q{zazN9x_W<~6YHDuu_xC?72touveWBt2FgrVYm=N-zuIo;q zKnGM+C9*8PPY5~UbUGuaPoH*BO2YuWjInzwHkc2W%Oz1t->s;qNFF_UGy)WG22@q0 zvMdJ(AxD~;ntlidgAPjRIRGygBfe+P9xKOjeO9a0+R)HY;`MqRzzPm{JRYN>C}#oe zJ#^^M_nn=cbpZSTIv8Wi&W73Ha=F$}N?+1--ETA+pS0O*a5x-E0GILtY}>ZYY&M(E z6GGgQB&8-MCh9yM&u=$x-h2T-q`-w!j^m!vb=^oQg`y~+lw$Md&BKhb__6>lmuoH0 z^A`yrTO~<CSy>sqcI_G_CnwjV$dR4nIGD|5R905PU@*XLw?mSoPZ?ua5<t_m^&H0y zP)avRk_1r{kxr*kUS5v!^73M|K?s4#WXjAC08m?7s{^>O@ca+}A><;Zbd##8;CVi? ziqg`&<6ps1TU&dZF*d#|fXQU4P*qjud7k9f{%u$+7C0P^PZsQ765!UYTQLAn{MX`H rv1lY)>JY90@aHOtk2A(bvlIUSmP*Mm4Sl`b00000NkvXXu0mjfAQg@n diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png b/platforms/browser/www/lib/ckeditor/plugins/mathjax/icons/mathjax.png deleted file mode 100644 index d25081be998163c28c17c6802c1a0246ca1534a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10z64XK~y-6rIS5q6JZ#~|96+RsYksbAb~_ua+BiJ1hE?OA(sou zP^br%l43=qb#f9y7e^PRqJsvkBnSpgF_3^@+QBJ0bqawDeP1YIQE5A5FeG=$<C1=* zQ3^iOJN%v>|L1vl1;!Zur)>L=Xf(PF;LK^71VPwdTU)z$Ot8GXd^VHG$N=DUI%#2H z!IC5i0MO}lu(!8|N~I!It5vbpYALF!ij1)?7-L|JfrxGui^Z;C7?emPC=!XRHyVwr zM0ACSt`X4<B6?RYm)q0R)8zB{&NIdi6L8MoOifJ<nWp(Fm&*ywW>cG(nE0`|xjD}m z>-MmMuIo2<cX!`!ZEc+c@a;g*le{(zW7x8+7x{c1L^MZ4ma3|E7-Q69^0TwEE&x9{ z=Qt+l0WW7}W`-=wdR8bD0N^$NQ&rW)Ba){luFxlWo=hf(Ez5dbDwP1>uFYo40{GI; zihny5=ln?^5O}003YM0ZP_Nf%5H~OZ0L0^Qmn2DvbUOVj7!2O$oPRyFAQp?MBO@b) zY&JXO_xtBK=j;89rfCnl-R|2HBj~z*NtWdgtE;P`-|wFv)EtY&!XA(3VWm>B9ZR5T z+U2pau}{fl@^>ngTB+4)J^;QWh(JUa6h*lg4u>t5%k^E@|4h2BM`T(4I6gi;y0fzb z(=<<vCI|xTb~_vn2MojbJUKae{UCv&C<U+AJ1UAI+-~=v)f|*0NeG2PEA4jsaETim l8*Kose|8>L3qXl;jz6ZS`h+Mt59|N{002ovPDHLkV1m^WEA{{Y diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/images/loader.gif b/platforms/browser/www/lib/ckeditor/plugins/mathjax/images/loader.gif deleted file mode 100644 index 3ffb1811f7c06f2b5da7cac82cda97839c10e177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmZ?wbhEHb<YC}p_{zY*!o<?j)N<t5kvFg2%$YaG$Is`^tvg@7ebLd<>FMh^bMDNS zPhWEKa-KYT^5@?l6El-H@7^p~wB*jcJAZ!tS+j1<l}lGj%1UgkY+Bk{Lc&6>T)QG8 zCo^Tzlr5XKq@<<P)Ya_SwP(t-DQ8ZdVW16A{Lk&@8WQa67~pE8XTZz|v_<hJ3nveQ z1cMI9MvylhSi=<5k|wM8F7`0&RQ3~3NbF`>`iN0>MoI|#<%jAA1C&H!&L<quU=lg> z)NzA?(xTQBgCCA;lUi5Y_L#}$w&YTJM2OV7i%Se2uuAlJEmUA&5U}8_PE}TfTE&QD z6<h3q1_OhM9%{}Dm6)8^WahEAb6BdhO7*BI7-sMtYYsnTI$^!^fwtR$B@#RW>dZoV zD$R|@CQR39sp9qItzk?KXUvpl7vT1D;$xCvW0VyX6q1*h;^&tPXP(9E>4?q77@&;_ zH*$EKA0D_M;pZUen!seKvYag-IO#%0Pt$Q_;Rjyp8u=d!M|iMJ&~v$Hx&6Kb1B39X zhAC3MPQr5hGA>eOo>}tjq2a>33e2feY<WTgf`YQ)>_WU@&R8vs2YK;F4V&{rhsz#j zJRZz$2A+Nj6Py)3S7h`|@>n8#gTc&m;gJLm9TjGdYJ&+nEem{B98PEukri^1;g<_# z6jl)AN=?sX%+8UJ>St#T&6Z*p5@MH<YVw>d)b0eclL<LkBODq7HY^Abb6&_=Fq22M zt#N_iN{h+tCmaP545ZvVjw%R>$h9sJ$P#c75bIF1nxMei#jsRp<+b-BJe=XdfoU08 dOgSM+El%vr(Hsm6LetobQ$2-KqJbW?1^`cR-){f_ diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ar.js deleted file mode 100644 index 64212f69..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ar",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write your TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"تحميل",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ca.js deleted file mode 100644 index 33a353dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ca",{title:"Matemàtiques a TeX",button:"Matemàtiques",dialogInput:"Escriu el TeX aquí",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentació TeX",loading:"carregant...",pathName:"matemàtiques"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cs.js deleted file mode 100644 index e2e0b510..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","cs",{title:"Matematika v TeXu",button:"Matematika",dialogInput:"Zde napište TeXový kód",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentace k TeXu",loading:"Nahrává se...",pathName:"Matematika"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cy.js deleted file mode 100644 index bd919ba0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","cy",{title:"Mathemateg mewn TeX",button:"Math",dialogInput:"Ysgrifennwch eich TeX yma",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dogfennaeth TeX",loading:"llwytho...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/de.js deleted file mode 100644 index 5cf71687..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","de",{title:"Mathematik in Tex",button:"Rechnung",dialogInput:"Schreiben Sie hier in Tex",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Tex Dokumentation",loading:"lädt...",pathName:"rechnen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/el.js deleted file mode 100644 index affcd0e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","el",{title:"Μαθηματικά με τη γλώσσα TeX",button:"Μαθηματικά",dialogInput:"Γράψτε κώδικα TeX εδώ",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Τεκμηρίωση TeX",loading:"γίνεται φόρτωση...",pathName:"μαθηματικά"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js deleted file mode 100644 index d9f0cbde..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","en-gb",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write you TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"loading...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en.js deleted file mode 100644 index 9e66c845..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","en",{title:"Mathematics in TeX",button:"Math",dialogInput:"Write your TeX here",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentation",loading:"loading...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/eo.js deleted file mode 100644 index 4aa7cb49..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","eo",{title:"Matematiko en TeX",button:"Matematiko",dialogInput:"Skribu vian TeX tien",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentado",loading:"estas ŝarganta",pathName:"matematiko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/es.js deleted file mode 100644 index 6ec9e4dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","es",{title:"Matemáticas en TeX",button:"Matemáticas",dialogInput:"Escribe tu TeX aquí",docUrl:"http://es.wikipedia.org/wiki/TeX",docLabel:"Documentación de TeX",loading:"cargando...",pathName:"matemáticas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fa.js deleted file mode 100644 index d638a840..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fa",{title:"ریاضیات در تک",button:"ریاضی",dialogInput:"فرمول خود را اینجا بنویسید",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"مستندسازی فرمول نویسی",loading:"بارگیری",pathName:"ریاضی"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fi.js deleted file mode 100644 index bd5140c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fi",{title:"Matematiikkaa TeX:llä",button:"Matematiikka",dialogInput:"Kirjoita TeX:iä tähän",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentaatio",loading:"lataa...",pathName:"matematiikka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fr.js deleted file mode 100644 index bf1cb479..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","fr",{title:"Mathématiques au format TeX",button:"Math",dialogInput:"Saisir la formule TeX ici",docUrl:"http://fr.wikibooks.org/wiki/LaTeX/Math%C3%A9matiques",docLabel:"Documentation du format TeX",loading:"chargement...",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/gl.js deleted file mode 100644 index 0657f1f9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","gl",{title:"Matemáticas en TeX",button:"Matemáticas",dialogInput:"Escriba o seu TeX aquí",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentación de TeX",loading:"cargando...",pathName:"matemáticas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/he.js deleted file mode 100644 index 9e5c21dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","he",{title:"מתמטיקה בTeX",button:"מתמטיקה",dialogInput:"כתוב את הTeX שלך כאן",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"תיעוד TeX",loading:"טוען...",pathName:"מתמטיקה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hr.js deleted file mode 100644 index 6e90bd5b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","hr",{title:"Matematika u TeXu",button:"Matematika",dialogInput:"Napiši svoj TeX ovdje",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentacija",loading:"učitavanje...",pathName:"matematika"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hu.js deleted file mode 100644 index 3ab4b748..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","hu",{title:"Matematika a TeX-ben",button:"Matek",dialogInput:"Írd a TeX-ed ide",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentáció",loading:"töltés...",pathName:"matek"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/it.js deleted file mode 100644 index a91094a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","it",{title:"Formule in TeX",button:"Formule",dialogInput:"Scrivere qui il proprio TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentazione TeX",loading:"caricamento…",pathName:"formula"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ja.js deleted file mode 100644 index 0141ecd7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ja",{title:"TeX形式の数式",button:"数式",dialogInput:"TeX形式の数式を入力してください",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeXの解説",loading:"読み込み中…",pathName:"math"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/km.js deleted file mode 100644 index d68d998f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","km",{title:"គណិត​វិទ្យា​ក្នុង TeX",button:"គណិត",dialogInput:"សរសេរ TeX របស់​អ្នក​នៅ​ទីនេះ",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"ឯកសារ​អត្ថបទ​ពី ​TeX",loading:"កំពុង​ផ្ទុក..",pathName:"គណិត"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nb.js deleted file mode 100644 index 7b3588e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","nb",{title:"Matematikk i TeX",button:"Matte",dialogInput:"Skriv TeX-koden her",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX-dokumentasjon",loading:"laster...",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nl.js deleted file mode 100644 index fe9cf316..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","nl",{title:"Wiskunde in TeX",button:"Wiskunde",dialogInput:"Typ hier uw TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX documentatie",loading:"laden...",pathName:"wiskunde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/no.js deleted file mode 100644 index 33e87aba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","no",{title:"Matematikk i TeX",button:"Matte",dialogInput:"Skriv TeX-koden her",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX-dokumentasjon",loading:"laster...",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pl.js deleted file mode 100644 index 70f2be53..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pl",{title:"Wzory matematyczne w TeX",button:"Wzory matematyczne",dialogInput:"Wpisz wyrażenie w TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentacja TeX",loading:"ładowanie...",pathName:"matematyka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js deleted file mode 100644 index 6b9620d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pt-br",{title:"Matemática em TeX",button:"Matemática",dialogInput:"Escreva seu TeX aqui",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentação TeX",loading:"carregando...",pathName:"Matemática"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt.js deleted file mode 100644 index 1f83fefa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","pt",{title:"Matemáticas em TeX",button:"Matemática",dialogInput:"Escreva aqui o seu Tex",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentação TeX",loading:"a carregar ...",pathName:"matemática"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ro.js deleted file mode 100644 index 72c606cb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ro",{title:"Matematici in TeX",button:"Matematici",dialogInput:"Scrie TeX-ul aici",docUrl:"http://ro.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Documentatie TeX",loading:"încarcă...",pathName:"matematici"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ru.js deleted file mode 100644 index a48da75f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","ru",{title:"Математика в TeX-системе",button:"Математика",dialogInput:"Введите здесь TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX документация",loading:"загрузка...",pathName:"мат."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sk.js deleted file mode 100644 index 1a54159d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sk",{title:"Matematika v TeX",button:"Matika",dialogInput:"Napíšte svoj TeX sem",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Dokumentácia TeX",loading:"načítavanie...",pathName:"matika"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sl.js deleted file mode 100644 index c8df95b5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sl",{title:"Matematika v TeX",button:"Matematika",dialogInput:"Napišite svoj TeX tukaj",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentacija",loading:"nalaganje...",pathName:"matematika"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sv.js deleted file mode 100644 index 7508fef7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","sv",{title:"Mattematik i TeX",button:"Matte",dialogInput:"Skriv din TeX här",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX dokumentation",loading:"laddar",pathName:"matte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tr.js deleted file mode 100644 index a2925f17..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","tr",{title:"TeX ile Matematik",button:"Matematik",dialogInput:"TeX kodunuzu buraya yazın",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX yardım dökümanı",loading:"yükleniyor...",pathName:"matematik"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tt.js deleted file mode 100644 index 44003bdc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","tt",{title:"TeX'та математика",button:"Математика",dialogInput:"Биредә TeX форматында аңлатмагызны языгыз",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX турыдна документлар",loading:"йөкләнә...",pathName:"математика"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/uk.js deleted file mode 100644 index 77875f4e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","uk",{title:"Математика у TeX",button:"Математика",dialogInput:"Наберіть тут на TeX'у",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Документація про TeX",loading:"завантажується…",pathName:"математика"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/vi.js deleted file mode 100644 index 66961038..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","vi",{title:"Toán học bằng TeX",button:"Toán",dialogInput:"Nhập mã TeX ở đây",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"Tài liệu TeX",loading:"đang nạp...",pathName:"toán"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js deleted file mode 100644 index ea9ad35e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","zh-cn",{title:"TeX 语法的数学公式编辑器",button:"数学公式",dialogInput:"在此编写您的 TeX 指令",docUrl:"http://zh.wikipedia.org/wiki/TeX",docLabel:"TeX 语法(可以参考维基百科自身关于数学公式显示方式的帮助)",loading:"正在加载...",pathName:"数字公式"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh.js deleted file mode 100644 index 84cdab1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("mathjax","zh",{title:"以 TeX 表示數學",button:"數學",dialogInput:"請輸入 TeX",docUrl:"http://en.wikibooks.org/wiki/LaTeX/Mathematics",docLabel:"TeX 說明文件",loading:"載入中…",pathName:"數學"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/mathjax/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/mathjax/plugin.js deleted file mode 100644 index 44964b88..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/mathjax/plugin.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var h="http://cdn.mathjax.org/mathjax/2.2-latest/MathJax.js?config=TeX-AMS_HTML";CKEDITOR.plugins.add("mathjax",{lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,nb,nl,no,pl,pt,pt-br,ro,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",requires:"widget,dialog",icons:"mathjax",hidpi:!0,init:function(b){var c=b.config.mathJaxClass||"math-tex";b.widgets.add("mathjax",{inline:!0,dialog:"mathjax",button:b.lang.mathjax.button,mask:!0,allowedContent:"span(!"+c+")",styleToAllowedContentRules:function(a){a= -a.getClassesArray();if(!a)return null;a.push("!"+c);return"span("+a.join(",")+")"},pathName:b.lang.mathjax.pathName,template:'<span class="'+c+'" style="display:inline-block" data-cke-survive=1></span>',parts:{span:"span"},defaults:{math:"\\(x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}\\)"},init:function(){var a=this.parts.span.getChild(0);if(!a||a.type!=CKEDITOR.NODE_ELEMENT||!a.is("iframe"))a=new CKEDITOR.dom.element("iframe"),a.setAttributes({style:"border:0;width:0;height:0",scrolling:"no",frameborder:0, -allowTransparency:!0,src:CKEDITOR.plugins.mathjax.fixSrc}),this.parts.span.append(a);this.once("ready",function(){CKEDITOR.env.ie&&a.setAttribute("src",CKEDITOR.plugins.mathjax.fixSrc);this.frameWrapper=new CKEDITOR.plugins.mathjax.frameWrapper(a,b);this.frameWrapper.setValue(this.data.math)})},data:function(){this.frameWrapper&&this.frameWrapper.setValue(this.data.math)},upcast:function(a,b){if("span"==a.name&&a.hasClass(c)&&!(1<a.children.length||a.children[0].type!=CKEDITOR.NODE_TEXT)){b.math= -CKEDITOR.tools.htmlDecode(a.children[0].value);var d=a.attributes;d.style=d.style?d.style+";display:inline-block":"display:inline-block";d["data-cke-survive"]=1;a.children[0].remove();return a}},downcast:function(a){a.children[0].replaceWith(new CKEDITOR.htmlParser.text(CKEDITOR.tools.htmlEncode(this.data.math)));var b=a.attributes;b.style=b.style.replace(/display:\s?inline-block;?\s?/,"");""===b.style&&delete b.style;return a}});CKEDITOR.dialog.add("mathjax",this.path+"dialogs/mathjax.js");b.on("contentPreview", -function(a){a.data.dataValue=a.data.dataValue.replace(/<\/head>/,'<script src="'+(b.config.mathJaxLib?CKEDITOR.getUrl(b.config.mathJaxLib):h)+'"><\/script></head>')});b.on("paste",function(a){a.data.dataValue=a.data.dataValue.replace(RegExp("<span[^>]*?"+c+".*?</span>","ig"),function(a){return a.replace(/(<iframe.*?\/iframe>)/i,"")})})}});CKEDITOR.plugins.mathjax={};CKEDITOR.plugins.mathjax.fixSrc=CKEDITOR.env.gecko?"javascript:true":CKEDITOR.env.ie?"javascript:void((function(){"+encodeURIComponent("document.open();("+ -CKEDITOR.tools.fixDomain+")();document.close();")+"})())":"javascript:void(0)";CKEDITOR.plugins.mathjax.loadingIcon=CKEDITOR.plugins.get("mathjax").path+"images/loader.gif";CKEDITOR.plugins.mathjax.copyStyles=function(b,c){for(var a="color font-family font-style font-weight font-variant font-size".split(" "),e=0;e<a.length;e++){var d=a[e],g=b.getComputedStyle(d);g&&c.setStyle(d,g)}};CKEDITOR.plugins.mathjax.trim=function(b){var c=b.indexOf("\\(")+2,a=b.lastIndexOf("\\)");return b.substring(c,a)}; -CKEDITOR.plugins.mathjax.frameWrapper=CKEDITOR.env.ie&&8==CKEDITOR.env.version?function(b,c){b.getFrameDocument().write('<!DOCTYPE html><html><head><meta charset="utf-8"></head><body style="padding:0;margin:0;background:transparent;overflow:hidden"><span style="white-space:nowrap;" id="tex"></span></body></html>');return{setValue:function(a){var e=b.getFrameDocument(),d=e.getById("tex");d.setHtml(CKEDITOR.plugins.mathjax.trim(CKEDITOR.tools.htmlEncode(a)));CKEDITOR.plugins.mathjax.copyStyles(b,d); -c.fire("lockSnapshot");b.setStyles({width:Math.min(250,d.$.offsetWidth)+"px",height:e.$.body.offsetHeight+"px",display:"inline","vertical-align":"middle"});c.fire("unlockSnapshot")}}}:function(b,c){function a(){f=b.getFrameDocument();f.getById("preview")||(CKEDITOR.env.ie&&b.removeAttribute("src"),f.write('<!DOCTYPE html><html><head><meta charset="utf-8"><script type="text/x-mathjax-config">MathJax.Hub.Config( {showMathMenu: false,messageStyle: "none"} );function getCKE() {if ( typeof window.parent.CKEDITOR == \'object\' ) {return window.parent.CKEDITOR;} else {return window.parent.parent.CKEDITOR;}}function update() {MathJax.Hub.Queue([ \'Typeset\', MathJax.Hub, this.buffer ],function() {getCKE().tools.callFunction( '+ -m+" );});}MathJax.Hub.Queue( function() {getCKE().tools.callFunction("+n+');} );<\/script><script src="'+(c.config.mathJaxLib||h)+'"><\/script></head><body style="padding:0;margin:0;background:transparent;overflow:hidden"><span id="preview"></span><span id="buffer" style="display:none"></span></body></html>'))}function e(){k=!0;i=j;c.fire("lockSnapshot");d.setHtml(i);g.setHtml("<img src="+CKEDITOR.plugins.mathjax.loadingIcon+" alt="+c.lang.mathjax.loading+">");b.setStyles({height:"16px",width:"16px", -display:"inline","vertical-align":"middle"});c.fire("unlockSnapshot");f.getWindow().$.update(i)}var d,g,i,j,f=b.getFrameDocument(),l=!1,k=!1,n=CKEDITOR.tools.addFunction(function(){g=f.getById("preview");d=f.getById("buffer");l=!0;j&&e();CKEDITOR.fire("mathJaxLoaded",b)}),m=CKEDITOR.tools.addFunction(function(){CKEDITOR.plugins.mathjax.copyStyles(b,g);g.setHtml(d.getHtml());c.fire("lockSnapshot");b.setStyles({height:0,width:0});var a=Math.max(f.$.body.offsetHeight,f.$.documentElement.offsetHeight), -h=Math.max(g.$.offsetWidth,f.$.body.scrollWidth);b.setStyles({height:a+"px",width:h+"px"});c.fire("unlockSnapshot");CKEDITOR.fire("mathJaxUpdateDone",b);i!=j?e():k=!1});b.on("load",a);a();return{setValue:function(a){j=CKEDITOR.tools.htmlEncode(a);l&&!k&&e()}}}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png deleted file mode 100644 index 1a7551c2a88559a73da6980d1c92af98804a5059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%+1=B{F(l&f+VH!6!j2;U&Yd~;g?&ZKlvxtaE4BpqbR1*yPe^j| zF;EmV5OAE|Abw*XgZK&2?e~5%-22I-7B{ov;oQ!P-cc>vww070>wc@3^S|uYFV(#_ z-_Ch&{oFb|t$knZj|L3^K?y;N=Ls$gPKcUcV3=~PAXeN<^F`nHX`DNcTB-?i`uO`O z=&5#`QPo%)kZ%^abC=WJn=PxS>|~h#=iCvNcgrp>*t%7Sp}K>KWkt=eBhqW9?Q9VE z`9>$BbnBGr9~bIAy%1cdr+;zJzP4*p7j|7wGB`HDM`gmCS%+K~Gaiiaf2|YziM_RH z@0|0OKlk$9x_{gF+@F`5(*rh2gt$MeWo<cOEE%vd;*_4=t=5>nxSYISPwIVGuSoS; zHx;js3S_F9q_2CkwUzbOty_!C+1VKizWn_0qs5c+OQsu>LhFIOB~mIa*WRWxvwl&U zfByN~KYwaE{+!-juKsbRq=BMC&)2gtQDRBK!3@vi9)A^-=16dv(Q|xnp1zoO@y<DO zPp7?n`ps;wtqso!S1nd;vCk*idz2r`9NB69z4ny6&;dzjt(h!q*G_#_WLa%Ed+FV| zvQ?M6=X}oid|P^2p80(T?ibToPx>6wd-C~9R{8X}_wW1N>bzYp)C7t-WNTbMdg>I{ zRPCwKpDtg%c;a>d^C@|b3;+Bzx5%{19A|7;ygof$-DoP)^dglaeSK!ex!fLJF*ScG zguItN5a50Dt&vY*7yF@!oeLNRo^N<msQ+2;<lhRf?DK6W<T4JI#^&c9nKAQF|8@R@ zA}p%e)nZj<Iggx=Y<B9lI+ix)kMHAB^TheV*&!}RUkeGCZa;h|L;l0X)0+zug!E$= z7tNmZx1H0VGyU#A;|m*$dzB9v#7$>CXlGFO&+X$b-42VrZEKr;X5MJqb=BmbPQTL8 zc>7Bt1;-Rx9ddd$J4A^s5lC<;m}<0Tfv%DsOGX;o_oXaK-#+boATwi*OAN=A*}lzO z8N5qH=7e!?OcC0$$404GqW}8!!kbx@-<#yhSmagK1+BQ2_2chr@qg1!d!!pV-({?J z%<i3UU$-D;{o<(A2W3kvOJ&)gKYxDV>Z<=4J^YP%HTD1Hyu21HUY^II(Yjx5=f}0_ z5?5A*o_LwLfsgS&!}KL?B56sjKEQmYTH+c}l9E`GYL#4+3Zxi}3=EBR4a{_n3_=VI ztqjbq3{12QjI0a{zCBvziJ~DlKP5A*61Rr-{c>M{8YDqB1m~xflqVLYGL)B>>t*I; d7bhncr0V4trO$q6BL!5%;OXk;vd$@?2>@n}*7N`X diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png b/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/hidpi/newpage.png deleted file mode 100644 index 8cbe223059bd225aa00e2c14a376a4e8ec559a18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%xzN+aF(l&f+UaMrq{Bsy*FV4a(<vg@T%tUfi*dOLxAVck7gn?P zIb;NF$XsIQkagnL!P>?Xk*U&?Tnl`{ZnFGh^J8k$*~L9&%Y~3KA$R$0Y0vKIsob38 zwkb_TUcf{A?9Tng=WPEQhu^cQWNKjW(%f=QL$Kvd8e_7q=cI%+N26x{j9mWRRnzt0 z_n(_0mOS{av2+u2#Oc7@XOFuzSFLuPqcT&Gjp2|}<A+;YRop-P{kHq=-MfFbhdmBn zJW=uyivvTrX5F5;xjz*a{QPNrHjF!&r>97zspCPl+);xkU+>*(o8on2y1sei83Dil z{K-6TA18-e+dSzP*Eeea_u^x6)Y)aG$8t_g)!wPV#;|7VkwTx65|$5|+6QjEdL<qx z;`!-~<Tmz?udb@Szwh57!60Cz9u+hFe_7eH|0}O%xC<u#TzhoO?LP(2&*e`o`YETh z>GK!Oj+_&xywo}v8C*Pi7}tL6c5PB|Jo@p*iM56^G?L1*S4ZutoqcL;^!GJ}oA&O# zd(wriBV>JKwsqtMsimf;3Xj!odHslmF;8OC?yaG$*Xq}X{CIhcH*!}+;J(PHTN9>E z-5sy1V<66=;ko)WLqo~pO~*=FJk(B1<XB|d_nzNr%IQBfpO@9#Zq}IkuC0}+s%6`X z#P)5=Qzo0eug_s|SsIg8n(Mo7cZnxgceixkwG$kzzKW9BhL%f8RF3@p9h&fW`c_ju zyP644pQajm8U^{g&2Q9X_@%hVAm#nRW~~kP`jQt}h-LGL1<96vlbj*s^xLjZ;?u{U zpI24Hl_@$sG5KqG&Vg%@b?96Lhb`}1Y>&-1-ZMev^0`HcT#i#-y*MTLj6waSn1$!{ z15x+(7XOf*(YDvjrZZt0OUjq&T8(ojY}#XXGM+0zir3<_+D~u)!wYAfO^W=p^wtNJ zRO2m)a`k@y=f6~*C#ke}e+XxlRY9EUj3@fBO~nC+Z2lc9Yb>~R`tpJ=^X9MO-V#)? zuKRtZM<2J>{>r}Q=et(C%Z}S7RHDdq-BmB<LH7CP%=G4K2IlS$cA50|8>bwI>M=YL z*b=XyFkOHC>5yOlUWM{4&UnLmyzyLtN6*5086UpyF5kk(7ZDNTl4jF!E$Uy@?`h3x zldBdxUaHlUoY|<-ck}-J<JVsAUHY=i{@A~o9|Dgn4N8{zG4?FHdei1}uSUP=tI|C` ze_mPpyS{kq8Gn2Bq?y1RsaoP1QIe8al4_M)lnSI6j0_Bobq&mPjSNBz4Xq5!tqe@G z4UDV|48A>D=82*qH$NpatrE9}_Wg2Sff^)1HU#IVm6RtIr81P4m+NKbWfvzW7NqLs W7p2dBXCnnv#Ng@b=d#Wzp$Pyn?D$mx diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage-rtl.png deleted file mode 100644 index 2c8ef7fe6fc11399bdf90e5077965af2633799ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iV}z%RV~EA+-pPS|j|>D{;%`qp>Mqp$K&0j@qlJih1RvL={0SVc z8cG|h?bBpu&fH);Ez0lqx_7HKDQ~~c%OJRLmDa0W$Ey1c+qN3|3fJEMTw&8;nB=wL z`@Fk(?OVSoDeV$FXPJAuEHlBY;P$qT6RErJ&I_Ho)k3acB3WSK`D4c<UhRrIaPN2V z^-|^!f=(Q(x;h@rd0b#&z|*{J3PV7sR<^G1Wd)__%QDZ^-seB?vTARej=xKX;iRCX zS<A%zdpZ)<vi>OEe?R=-)AC3M7dzh`!%g?!Gx{mEgci(8?(yaeSgEC{I`6#tV+*$A zGq<(RoQ+d?a!OORj_G-^D)Z#YmGi`JJ#7@4BOf$VpJ!iI_3;O@*_UoBdMw+$UM{54 zIdtQ-O*eDGY75RKu2r>Plh5<%(f-$e*7u0BX{sJ8JTrA_d{3c_r{=;{Gb-o3+|^fZ ze?F=t_PEV?hCi$dW>-Fh{d;2!40zQN*NBpo#FA92<f2p{#b9J$Xsl~su4`ZtVrXt< zU<^ds21Zr}2EI#n10w}VLvDUbW?Cg~4K_cSj{r4Df@}!RPb(=;EJ|f4FE7{2%*!rL bPAo{(%P&fw{mw=TsEEPS)z4*}Q$iB}dJy8a diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage.png b/platforms/browser/www/lib/ckeditor/plugins/newpage/icons/newpage.png deleted file mode 100644 index 8e18c8a2dcc3510f9fe6b6e33f8dd05620c846e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW2~o(V~EA+-pPS^%?3Pe_0}SxQx}B9EI4m_m~X4}n)cg<za}t; zcy(8FI3>ML^k&n&`ptWq)0;mv8ynYbz45l}#V)?tXW6oa1n;~r?|IxIp&YXH$&8s7 zx9Psx6{Zx$n|$VHfkndp`-@j;30z#yDA+i&&}#02RjV(S-nAB-dwW~0(MqF77JVFw z7rs`xaxkvqQabdp!p7>kUA@nORnMmgwIw=uan1=`mf6&yu#`oxu|wfl$LXg@jC=0p zZQqzVt6a&-+?P4|%y-deY%U=ep1sa7;yKLm;IKsSr#aohUfqZL)viTxKUn*|ddU<o z;njO)<ev+@cZBEtUS359ms1+tjU772K5L}08QWhitedecvvI$hqf3XO-m9?c4_?`& z-EwDy*L%oShdymtbx5N5Z5el3omI?r(;ma8%+*RKX4l^TU)jsr*m0nG{#?=j6Ta{3 znUvg9aBlCPiPsKUhA;cb8guWh$@hlbIAG|jmbgZgq$HN4S|t~y0x1R~14Cn719M#i zlMq95D+6O7(l#)%GBEI6vKtsPNE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|* gUS?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr0N&W?+W-In diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/af.js deleted file mode 100644 index 2fd4a604..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","af",{toolbar:"Nuwe bladsy"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ar.js deleted file mode 100644 index 04f45c5c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ar",{toolbar:"صفحة جديدة"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bg.js deleted file mode 100644 index b40fbf54..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bg",{toolbar:"Нова страница"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bn.js deleted file mode 100644 index aaedacbe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bn",{toolbar:"নতুন পেজ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bs.js deleted file mode 100644 index f8a0c44e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","bs",{toolbar:"Novi dokument"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ca.js deleted file mode 100644 index 4efb6079..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ca",{toolbar:"Nova pàgina"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cs.js deleted file mode 100644 index 02960680..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","cs",{toolbar:"Nová stránka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cy.js deleted file mode 100644 index 09e8b6fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","cy",{toolbar:"Tudalen Newydd"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/da.js deleted file mode 100644 index 22d0d6b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","da",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/de.js deleted file mode 100644 index 8d323f87..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","de",{toolbar:"Neue Seite"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/el.js deleted file mode 100644 index 7f989b1a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","el",{toolbar:"Νέα Σελίδα"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-au.js deleted file mode 100644 index 6e38a28b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-au",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-ca.js deleted file mode 100644 index 327aa5d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-ca",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-gb.js deleted file mode 100644 index 3f7ab3e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en-gb",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en.js deleted file mode 100644 index 4402b73d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","en",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eo.js deleted file mode 100644 index 671a107d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","eo",{toolbar:"Nova Paĝo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/es.js deleted file mode 100644 index ca54ae0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","es",{toolbar:"Nueva Página"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/et.js deleted file mode 100644 index 59a58061..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","et",{toolbar:"Uus leht"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eu.js deleted file mode 100644 index 82808efd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","eu",{toolbar:"Orrialde Berria"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fa.js deleted file mode 100644 index 6986ba6d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fa",{toolbar:"برگهٴ تازه"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fi.js deleted file mode 100644 index cc1e63df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fi",{toolbar:"Tyhjennä"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fo.js deleted file mode 100644 index 778091e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fo",{toolbar:"Nýggj síða"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js deleted file mode 100644 index de7bb951..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fr-ca",{toolbar:"Nouvelle page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr.js deleted file mode 100644 index 2de51702..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","fr",{toolbar:"Nouvelle page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gl.js deleted file mode 100644 index 96b7ea77..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","gl",{toolbar:"Páxina nova"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gu.js deleted file mode 100644 index f4c3306c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","gu",{toolbar:"નવુ પાનું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/he.js deleted file mode 100644 index 460262b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","he",{toolbar:"דף חדש"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hi.js deleted file mode 100644 index afed2e28..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hi",{toolbar:"नया पेज"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hr.js deleted file mode 100644 index fc09d5af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hr",{toolbar:"Nova stranica"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hu.js deleted file mode 100644 index 6053528b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","hu",{toolbar:"Új oldal"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/id.js deleted file mode 100644 index 391bdad6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","id",{toolbar:"Halaman Baru"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/is.js deleted file mode 100644 index cee7f357..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","is",{toolbar:"Ný síða"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/it.js deleted file mode 100644 index d484977e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","it",{toolbar:"Nuova pagina"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ja.js deleted file mode 100644 index 3954e55b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ja",{toolbar:"新しいページ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ka.js deleted file mode 100644 index ee1bd799..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ka",{toolbar:"ახალი გვერდი"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/km.js deleted file mode 100644 index 0dcae481..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","km",{toolbar:"ទំព័រ​ថ្មី"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ko.js deleted file mode 100644 index 3ac6b6b6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ko",{toolbar:"새 문서"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ku.js deleted file mode 100644 index b5d99596..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ku",{toolbar:"پەڕەیەکی نوێ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lt.js deleted file mode 100644 index a9572d6f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","lt",{toolbar:"Naujas puslapis"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lv.js deleted file mode 100644 index d05d3900..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","lv",{toolbar:"Jauna lapa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mk.js deleted file mode 100644 index 0b4261c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","mk",{toolbar:"New Page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mn.js deleted file mode 100644 index 7ea8f845..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","mn",{toolbar:"Шинэ хуудас"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ms.js deleted file mode 100644 index a6544940..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ms",{toolbar:"Helaian Baru"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nb.js deleted file mode 100644 index 7d8addd9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","nb",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nl.js deleted file mode 100644 index 20ab5057..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","nl",{toolbar:"Nieuwe pagina"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/no.js deleted file mode 100644 index 551cb365..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","no",{toolbar:"Ny side"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pl.js deleted file mode 100644 index c2dd7686..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pl",{toolbar:"Nowa strona"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt-br.js deleted file mode 100644 index 31120f06..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pt-br",{toolbar:"Novo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt.js deleted file mode 100644 index 556a89b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","pt",{toolbar:"Nova Página"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ro.js deleted file mode 100644 index 87336458..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ro",{toolbar:"Pagină nouă"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ru.js deleted file mode 100644 index bdac86ef..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ru",{toolbar:"Новая страница"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/si.js deleted file mode 100644 index 166e5505..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","si",{toolbar:"නව පිටුවක්"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sk.js deleted file mode 100644 index 2ff850fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sk",{toolbar:"Nová stránka"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sl.js deleted file mode 100644 index b8bdbdb3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sl",{toolbar:"Nova stran"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sq.js deleted file mode 100644 index eb508027..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sq",{toolbar:"Faqe e Re"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js deleted file mode 100644 index 1758d5c4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sr-latn",{toolbar:"Nova stranica"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr.js deleted file mode 100644 index 9289d01f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sr",{toolbar:"Нова страница"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sv.js deleted file mode 100644 index ce4099d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","sv",{toolbar:"Ny sida"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/th.js deleted file mode 100644 index f1647f27..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","th",{toolbar:"สร้างหน้าเอกสารใหม่"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tr.js deleted file mode 100644 index afba1bd6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","tr",{toolbar:"Yeni Sayfa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tt.js deleted file mode 100644 index 2c9e06ab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","tt",{toolbar:"Яңа бит"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ug.js deleted file mode 100644 index 739429ab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","ug",{toolbar:"يېڭى بەت"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/uk.js deleted file mode 100644 index 518a63ac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","uk",{toolbar:"Нова сторінка"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/vi.js deleted file mode 100644 index 16dffe6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","vi",{toolbar:"Trang mới"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js deleted file mode 100644 index 9868d6b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","zh-cn",{toolbar:"新建"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh.js deleted file mode 100644 index cd365f40..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("newpage","zh",{toolbar:"新增網頁"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/newpage/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/newpage/plugin.js deleted file mode 100644 index c5d88b96..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/newpage/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("newpage",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"newpage,newpage-rtl",hidpi:!0,init:function(a){a.addCommand("newpage",{modes:{wysiwyg:1,source:1},exec:function(b){var a=this;b.setData(b.config.newpage_html||"",function(){b.focus();setTimeout(function(){b.fire("afterCommandExec",{name:"newpage", -command:a});b.selectionChange()},200)})},async:!0});a.ui.addButton&&a.ui.addButton("NewPage",{label:a.lang.newpage.toolbar,command:"newpage",toolbar:"document,20"})}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png deleted file mode 100644 index 4a5418cbfc805cbcca559085cb20cee329128e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmV+>1=;$EP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00citL_t(o!_Ak^YgAVh$3OSJ`{pH? z)Jy`6$w-U3X^j;Vk~XWLAT?OEE(-l43N;F@q|4&Mf)QPrjnQtbU9<~n7m`4W8{4>O zYH1V$_Lqo4CNq;a@8^BDi+M8|e`RVO*aMeYoHzG;?>XP|z2}OXmoD)tO}^6T{|5j{ z2$9WB#$a9sKwB=CS@6UdwALg^(lQvewXZLe1ZZQZ`97s;m0A#>lcc5p2|#CpAhpuf ztJZ^ZnJA81%fP1-6YCCYfGCc+S1Msk$%|Me((ju9{8}wD0D<q5JSX)+2&9xKDKXIG ziVDMU-2eb0t%;%t%+vG}LZB>*4f#A>`8+yFC{-%BzK`;KKQjPf5Re#yc??7&c%ieC z-u`~X&Yc4IqB1*s%nw7<ojZ3jDS=KB%27nER>P!aSQWgl4>3HP11@aZw(Vm_sbfM2 z)ZE-$rfT^6^fZa%AS~-q@QoW0gM(ez_BVU>?%ieO^CVh>G1*ITkhb5d;6p>3L@xKk zq5b=J6^ljul&l6&zfMinyT+KNk^xwjg%koBQoWX62!v%}x3^>4Hidk?5q!YT=fC@K z-@Z3GJ3Fa)9#IrETTyKv7=W~fwIHDEx&U<L^K>{4mXxjejll~7DxQZ@ir(H{#L&=K zN1^cTf${M|E|(+leWEBL*1D+`${HJ6rG(X)84KXGJ$s(1kZby9XDww}h~eRnI(vG) zJTN})NGXZJu%7ltm!z3f13PvA5GM&G&m&CR^7XA->27aFr6+9FA9)_wHo)lc;GpBW zF1At#Auz_ElcZTj0jS^R=T{N&*7P(04;B}nNzk?Yw=Y~kDTOiSr_WEEnECqh<=q>5 zd##R+4y2Uzo70$P37*=-3q!mYsN-6GHwdWIc{2Lh@#F8GI(2GpadB~Fd3l*I4C@lC zb+ZIw{@l5g!~$vCsJ6CxN`0RsikhmnmcP*j*fv^gqDqC4!-qcs&McKmx8K>meZ!V5 zTl(8NI=EjhbK~Sm>+hu{L~`xgqYa*DJ7dfvZC}Hm7=s%GlvY-7Q!WIR3hzx!>;t|6 zR{D#@<^E#vt!f-IKRIdrv$T}`JW!sQvF?{jgkebR`vm1OqeqVH1g-$xZ*Javvl2z` z{&D`i^`KfseQ@yL`lA{{5Xb!W@F9+EBZWXniE<q1>f-w3<S(N~kB$OY{=9p4<n57> zAFI_WT5BX)v)*MMTcW`ksNV;UgHtGQeRA?1Fa~_TFgLfmTrSrEL{Y?gR~*O0>F<-a z3dHHtE^r7q6Kahy2IZ#Gx?T(77|-+S!{`%3NdtuF?&ikSR3e0!P>usqq81hwG64`L z2^G)7bzSr`#&Tg<SW;ruRT88`2!Sxhyv%#zxpwQ~MWJ&!Op6bm%;y0wy>wbN_4C=Y z*}Tn!z{=(7N-0}Emul<j$?o`R|Nocw=D&`sn@HS6*$Dsu03~!qSaf7zbY(hYa%Ew3 zWdJfTF*7YNHZ3wRR539+FgH3dG%GMNIxsNy;-*Oe001R)MObuXVRU6WZEs|0W_bWI zFflVNFg7hRFjO%yIxsgnFf=PLGCD9Yhrb^60000PbVXQnQ*UN;cVTj60C#tHE@^IS cb7Ns}WiD@WXPfRk8UO$Q07*qoM6N<$f>rcl9RL6T diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png deleted file mode 100644 index 8d3930bbeb58bc2dd4cbb6a2735c06f094a33ac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcmV+u1?>8XP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00b;aL_t(o!_Ak^YZPZ3#y{^n?__q9 z>}FT6YSfE|K(U2{2)(o@ksho+S__pTl>P_eLHsXDqJ<tB5HEs<=28U7A!?8wV%J8i zDN3<9#BQu1Br!X)vorI)Zx6G(O%v0^xM<(&Gc(_3p6~O0<~!oy)vLVCBj0NE{{sQF zm74^B5O0=%0Hl;Sj)N4UWh6FDKuSrw=TXe%XwPJD-n0TzO7iXP<Oc?HODeyNfB@_| z7Ye|YlH;dO(_Jj$Dn%<aP%C>YfW#P#F<85niZO;-7!n2nx>W?Elyqb=6!Uo;DOvJ; zUidzV)@w;vOB~0<aSX<^pgbr?N(!Bw<PIJB1~_N$-Lvx9GZrhAf03}(Vyq>q)d<57 z?KrI=AcVkEioN^ypPiYS>J|qMd~Hjmh*c!4F$6)tpXD-@xj7suThjup#c0jDJw5d7 z-hFE9=FJ_VxA&x-oLmB$BoeJzTwG-O!Go5jr?jNz3d4}@?ruIkdi0=ZYa17ReY@Y; zv4cWqC#o)YElFBgyRHD~=*4kNSgleh6!`qaiT8iJe*GuW*Y}B?ocs-IS+o|iSsq@x zB&^oZFlgNyTBq^QNXlkPZh$LDXFSoGIF6|aK{lJ^<gsIWuZ@o07JYr6*}Hdd8*52C zk9;;u*7KT4sEr}0)mZX<0J=IlX!krEDK~|uK_o<Kv^rC3ElMd)963_BHaa>g`uo4C zj*pKdT9aER375yl9Dv;6!>@#^hLg3{Xk*Y?V~k1XJxS>A?e)fQ-1s1=)kfktX8XQ< z6th`W{S6XhSg2Ns!Vut<@n#FGwXi~kAPD&D`E&insZ+OZjg8&;<H{A1B;om!Coi3X z$CobyyfWTwfzdjZUu!Cr3Nte^mG6g#rw$Jcd<@)w;rl<V_niQ!M$vz|eLY<KJ~G0d zZQJNSe_rqG>LLsRrl+T8A5KlZ*j6m|0B1@UFMj9d^Ei$Jam>mo5JDhb7nRARl7}HC zj++U(5w04tM^VJW!UD79^5fZZxd7||j^DX(;kuX4<7P5+WU~}IJL&Mebd>7qiB)6Q zXy;~dWq~M;nVXxV=DI)6mdoz}3&2McLqqqyt}dKR2IaaGb2+-!arst{(ps~;yv)vB zyKX-!l|BT11&&P&4wk(_0p)oJDUm|pxh_5Z{p{Vo9Z#v&tYlhimMRq<l}ZPJYrvNi zgM)svczsU*5Y}SrMzsxTUzdQjmN<>cZ-KKDLqld|@zp0u5|TKkH6LS8NQvWl{4zXz z##&3JSj2JNwZ*MP8$-2P#Sa1!wWW=IEde0}vaOA_#sj5XBdsOPbl>-R_Vg*i{CqRX zUS9#yS!II_M{CXe{5&=cTe=TyT1R6H(FSR^l_NI$cWkZ2L=j0CqNC`apm|dYG`!*} zh1;Uy0Dl8L4M|MY_Z2Y!001R)MObuXVRU6WV{&C-bY%cCFflVNFg7hRFjO%yIxsgn zFf=PLGCD9Y_Tr{V0000bbVXQnWMOn=I&E)cX=Zr<GB7bSEig7MGB8vzF*-0eIxsXV zFfuwYFo(Y$^#A|>8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1002ov JPDHLkV1kGjN)!M9 diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png deleted file mode 100644 index b5b342b09ff2db88762d15ae357535ee7e4bdc80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW1pvsV~EA+-buE3N{#}p@dq1brHCmqF>OhSY2<jaTHr0?H>ugb zc*<U+9QG~GKai%t+Yx_|BeUwxWuNcG49ydI-fFH~vMT87^{eZ>mtEF8C2?~1R|n0n zPZOWZ%qjkGZ$I-%_b1Vx?>#QCaLDF;F5~jVDpWx!UYH>w`=|u7pySpkR!@uP0zJnc z``^!9do*jSlK{(#>#qa66nUH{9I4yyZZOkl-PxlV+ZS0r7dURXNyk~DEx^n1T<`ul z#rBSurhGK<<<5{jP`v!Iq9+T(tW=W>6Dfg-`3!Mxi!V9{uJ1Upx?_)2vX9{X)B1n? zn-4x%cs0v0yOwRj8IQDUQ6eAr#$@wO+Wofdcm3WtWzR{gBVIk){&9EB=9>*q$|u$D zzWZ)}+UAos=g;>T<@FrQF=IYC;mP~B_21R|l1~&^{3)5ZN#}5l-SMKGQ#85~dK~xP z=V!2S3;g1I>+QF8hDj$r%N&0!m^tfI-uC9LV)v>;v_v~NT9#;j?(IJ6G}li(W(y-j zhsRG_k4Y?Bqu$oMK6`8*qh)qj%68Y)oxtc)Epd$~Nl7e8wMs5Z1yT$~28PDE2Ijg3 zCLxCARtCmEq-|hiWnkdDWH&G>ku>Dyr(~v8;?`jEllcfxgCxj?;QX|b^2DN4hVt@q hz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RYi=0#pD1 diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/icons/pagebreak.png deleted file mode 100644 index 5280a6e97a8b7b01684a309160b06ac0631ba83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW3i`;V~EA+-bwzeq#PxV)Zeu|)4?n$TWGj|@w(iBr61XLx=-8b zzHVZS!fEz{u0<^kKhjsTP2@3N);x1%&b&^2o3k|m-HTqXTEF`AnlSBo(#br&Y8CGm zZ54Yib8crEleoEOM0V%n8796Pul<XE@F=Bc;VP{)TU9)piv4=$2^=@v8^@o_Q#tSP zUUd$pw9S%{(*)Zd-nH=w4YhcFk1=2MWHtYR3Y)O)xBpH)ytQM={urUiX`DY8S|(Y{ z_4D}To1kJi*N@d;{&{=G^{Tb(QNBhS7*ZoAEz_KQ@`>n&e}zxw#Vg+b)s<rqaXnbJ zJ9Yp4`l(;m>UgXC-LvCKW!>!g=hLm`_OUe|6!)C3y7$i8GLNj-hicC&Y>cFO<y2~? zd`a4T^TQ9}tR{u?#n)bc6{^@Ap;NatN_UZl(rKf%!-|0-cX==BO!rm^yl#3e>X5;b z`|mI3ZJ(;b=_qhVH>kjJ&$`bK3o3+e-PQVkd(*CUnq5o_F1tK1Kk}OKh=sr08DN~K zmbgZgq$HN4S|t~y0x1R~14Cn719M#ilMq95D+6O7(l#)%GBEI6vKts*NE&kUQ!>*k zaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr E07sJW9{>OV diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/images/pagebreak.gif deleted file mode 100644 index 8d1cffd64af72709b1180b3b0a51bbfe30bcb8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54 zcmZ?wbhEHb<Y!=IXkcWRIdkU!|Nj+#vM@3*Ff!;c00Bsbfr;0puk*m${3$UTHfcIC HGFSrukc<xG diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/af.js deleted file mode 100644 index 3db5e2e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","af",{alt:"Bladsy-einde",toolbar:"Bladsy-einde invoeg"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ar.js deleted file mode 100644 index 6c795815..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ar",{alt:"فاصل الصفحة",toolbar:"إدخال صفحة جديدة"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bg.js deleted file mode 100644 index 32ea86b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bg",{alt:"Разделяне на страници",toolbar:"Вмъкване на нова страница при печат"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bn.js deleted file mode 100644 index 69bcc5d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bn",{alt:"Page Break",toolbar:"পেজ ব্রেক"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bs.js deleted file mode 100644 index e33eb612..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","bs",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ca.js deleted file mode 100644 index 8d1732ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ca",{alt:"Salt de pàgina",toolbar:"Insereix salt de pàgina"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cs.js deleted file mode 100644 index c2753103..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","cs",{alt:"Konec stránky",toolbar:"Vložit konec stránky"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cy.js deleted file mode 100644 index b3f86a44..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","cy",{alt:"Toriad Tudalen",toolbar:"Mewnosod Toriad Tudalen i Argraffu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/da.js deleted file mode 100644 index 206f3a63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","da",{alt:"Sideskift",toolbar:"Indsæt sideskift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/de.js deleted file mode 100644 index 06449421..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","de",{alt:"Seitenumbruch einfügen",toolbar:"Seitenumbruch einfügen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/el.js deleted file mode 100644 index 1b9c8728..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","el",{alt:"Αλλαγή Σελίδας",toolbar:"Εισαγωγή Τέλους Σελίδας για Εκτύπωση"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js deleted file mode 100644 index ca24e8e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-au",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js deleted file mode 100644 index d4731567..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-ca",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js deleted file mode 100644 index d17f8b0f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en-gb",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en.js deleted file mode 100644 index 4b680ef1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","en",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eo.js deleted file mode 100644 index cb664749..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","eo",{alt:"Paĝavanco",toolbar:"Enmeti Paĝavancon por Presado"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/es.js deleted file mode 100644 index 17379550..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","es",{alt:"Salto de página",toolbar:"Insertar Salto de Página"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/et.js deleted file mode 100644 index 463b200d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","et",{alt:"Lehevahetuskoht",toolbar:"Lehevahetuskoha sisestamine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eu.js deleted file mode 100644 index 42c24112..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","eu",{alt:"Orrialde-jauzia",toolbar:"Txertatu Orrialde-jauzia Inprimatzean"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fa.js deleted file mode 100644 index c8b8e186..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fa",{alt:"شکستن صفحه",toolbar:"گنجاندن شکستگی پایان برگه"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fi.js deleted file mode 100644 index 5dc52bd6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fi",{alt:"Sivunvaihto",toolbar:"Lisää sivunvaihto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fo.js deleted file mode 100644 index ba9b9dca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fo",{alt:"Síðuskift",toolbar:"Ger síðuskift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js deleted file mode 100644 index e5ec2329..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fr-ca",{alt:"Saut de page",toolbar:"Insérer un saut de page à l'impression"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr.js deleted file mode 100644 index 941c0b16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","fr",{alt:"Saut de page",toolbar:"Saut de page"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gl.js deleted file mode 100644 index fd239f3f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","gl",{alt:"Quebra de páxina",toolbar:"Inserir quebra de páxina"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gu.js deleted file mode 100644 index cd6a24e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","gu",{alt:"નવું પાનું",toolbar:"ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/he.js deleted file mode 100644 index e5b8124e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","he",{alt:"שבירת דף",toolbar:"הוספת שבירת דף"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hi.js deleted file mode 100644 index 940a28fe..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hi",{alt:"पेज ब्रेक",toolbar:"पेज ब्रेक इन्सर्ट् करें"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hr.js deleted file mode 100644 index 6f86601d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hr",{alt:"Prijelom stranice",toolbar:"Ubaci prijelom stranice"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hu.js deleted file mode 100644 index 6b9fd0e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","hu",{alt:"Oldaltörés",toolbar:"Oldaltörés beillesztése"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/id.js deleted file mode 100644 index 71865adb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","id",{alt:"Halaman Istirahat",toolbar:"Sisip Halaman Istirahat untuk Pencetakan "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/is.js deleted file mode 100644 index 27f20878..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","is",{alt:"Page Break",toolbar:"Setja inn síðuskil"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/it.js deleted file mode 100644 index 1308ec6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","it",{alt:"Interruzione di pagina",toolbar:"Inserisci interruzione di pagina per la stampa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ja.js deleted file mode 100644 index cc1574f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ja",{alt:"改ページ",toolbar:"印刷の為に改ページ挿入"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ka.js deleted file mode 100644 index 6c999ff4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ka",{alt:"გვერდის წყვეტა",toolbar:"გვერდის წყვეტა ბეჭდვისთვის"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/km.js deleted file mode 100644 index ab157e3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","km",{alt:"បំបែក​ទំព័រ",toolbar:"បន្ថែម​ការ​បំបែក​ទំព័រ​មុន​បោះពុម្ព"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ko.js deleted file mode 100644 index c83c5e63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ko",{alt:"패이지 나누기",toolbar:"인쇄시 페이지 나누기 삽입"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ku.js deleted file mode 100644 index d9897842..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ku",{alt:"پشووی پەڕە",toolbar:"دانانی پشووی پەڕە بۆ چاپکردن"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lt.js deleted file mode 100644 index 5879e3ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","lt",{alt:"Puslapio skirtukas",toolbar:"Įterpti puslapių skirtuką"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lv.js deleted file mode 100644 index d594489b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","lv",{alt:"Lapas pārnesums",toolbar:"Ievietot lapas pārtraukumu drukai"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mk.js deleted file mode 100644 index 5fdce2f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","mk",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mn.js deleted file mode 100644 index 272ffaf7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","mn",{alt:"Page Break",toolbar:"Хуудас тусгаарлагч оруулах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ms.js deleted file mode 100644 index e0988eec..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ms",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nb.js deleted file mode 100644 index 15f45eeb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","nb",{alt:"Sideskift",toolbar:"Sett inn sideskift for utskrift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nl.js deleted file mode 100644 index 5c05b168..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","nl",{alt:"Pagina-einde",toolbar:"Pagina-einde invoegen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/no.js deleted file mode 100644 index ec64c6bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","no",{alt:"Sideskift",toolbar:"Sett inn sideskift for utskrift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pl.js deleted file mode 100644 index 79861f98..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pl",{alt:"Wstaw podział strony",toolbar:"Wstaw podział strony"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js deleted file mode 100644 index 31d256d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pt-br",{alt:"Quebra de Página",toolbar:"Inserir Quebra de Página"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt.js deleted file mode 100644 index 17ed211a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","pt",{alt:"Quebra de página",toolbar:"Inserir Quebra de Página"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ro.js deleted file mode 100644 index 91833bac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ro",{alt:"Page Break",toolbar:"Inserează separator de pagină (Page Break)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ru.js deleted file mode 100644 index 621682c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ru",{alt:"Разрыв страницы",toolbar:"Вставить разрыв страницы для печати"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/si.js deleted file mode 100644 index a232df64..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","si",{alt:"පිටු බිදුම",toolbar:"මුද්‍රණය සඳහා පිටු බිදුමක් ඇතුලත් කරන්න"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sk.js deleted file mode 100644 index b465e98f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sk",{alt:"Zalomenie strany",toolbar:"Vložiť oddeľovač stránky pre tlač"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sl.js deleted file mode 100644 index d07e9040..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sl",{alt:"Prelom Strani",toolbar:"Vstavi prelom strani"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sq.js deleted file mode 100644 index 3b570e03..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sq",{alt:"Thyerja e Faqes",toolbar:"Vendos Thyerje Faqeje për Shtyp"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js deleted file mode 100644 index 55877bac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sr-latn",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr.js deleted file mode 100644 index 9c6d9aff..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sr",{alt:"Page Break",toolbar:"Insert Page Break for Printing"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sv.js deleted file mode 100644 index a2210ceb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","sv",{alt:"Sidbrytning",toolbar:"Infoga sidbrytning för utskrift"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/th.js deleted file mode 100644 index 55a25317..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","th",{alt:"ตัวแบ่งหน้า",toolbar:"แทรกตัวแบ่งหน้า Page Break"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tr.js deleted file mode 100644 index d5e64a52..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","tr",{alt:"Sayfa Sonu",toolbar:"Sayfa Sonu Ekle"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tt.js deleted file mode 100644 index df0ae8fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","tt",{alt:"Бит бүлгече",toolbar:"Бастыру өчен бит бүлгечен өстәү"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ug.js deleted file mode 100644 index 10404349..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","ug",{alt:"بەت ئايرىغۇچ",toolbar:"بەت ئايرىغۇچ قىستۇر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/uk.js deleted file mode 100644 index 0abba674..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","uk",{alt:"Розрив Сторінки",toolbar:"Вставити розрив сторінки"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/vi.js deleted file mode 100644 index 5787cb65..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","vi",{alt:"Ngắt trang",toolbar:"Chèn ngắt trang"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js deleted file mode 100644 index 39ec7add..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","zh-cn",{alt:"分页符",toolbar:"插入打印分页符"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh.js deleted file mode 100644 index 9b5a14c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("pagebreak","zh",{alt:"換頁",toolbar:"插入換頁符號以便列印"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/pagebreak/plugin.js deleted file mode 100644 index f9a7c3df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pagebreak/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function e(a){return{"aria-label":a,"class":"cke_pagebreak",contenteditable:"false","data-cke-display-name":"pagebreak","data-cke-pagebreak":1,style:"page-break-after: always",title:a}}CKEDITOR.plugins.add("pagebreak",{requires:"fakeobjects",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"pagebreak,pagebreak-rtl", -hidpi:!0,onLoad:function(){var a=("background:url("+CKEDITOR.getUrl(this.path+"images/pagebreak.gif")+") no-repeat center center;clear:both;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;padding:0;height:5px;cursor:default;").replace(/;/g," !important;");CKEDITOR.addCss("div.cke_pagebreak{"+a+"}")},init:function(a){a.blockless||(a.addCommand("pagebreak",CKEDITOR.plugins.pagebreakCmd),a.ui.addButton&&a.ui.addButton("PageBreak",{label:a.lang.pagebreak.toolbar,command:"pagebreak", -toolbar:"insert,70"}),CKEDITOR.env.webkit&&a.on("contentDom",function(){a.document.on("click",function(b){b=b.data.getTarget();b.is("div")&&b.hasClass("cke_pagebreak")&&a.getSelection().selectElement(b)})}))},afterInit:function(a){function b(f){CKEDITOR.tools.extend(f.attributes,e(a.lang.pagebreak.alt),!0);f.children.length=0}var c=a.dataProcessor,g=c&&c.dataFilter,c=c&&c.htmlFilter,h=/page-break-after\s*:\s*always/i,i=/display\s*:\s*none/i;c&&c.addRules({attributes:{"class":function(a,b){var c=a.replace("cke_pagebreak", -"");if(c!=a){var d=CKEDITOR.htmlParser.fragment.fromHtml('<span style="display: none;">&nbsp;</span>').children[0];b.children.length=0;b.add(d);d=b.attributes;delete d["aria-label"];delete d.contenteditable;delete d.title}return c}}},{applyToAll:!0,priority:5});g&&g.addRules({elements:{div:function(a){if(a.attributes["data-cke-pagebreak"])b(a);else if(h.test(a.attributes.style)){var c=a.children[0];c&&("span"==c.name&&i.test(c.attributes.style))&&b(a)}}}})}});CKEDITOR.plugins.pagebreakCmd={exec:function(a){var b= -a.document.createElement("div",{attributes:e(a.lang.pagebreak.alt)});a.insertElement(b)},context:"div",allowedContent:{div:{styles:"!page-break-after"},span:{match:function(a){return(a=a.parent)&&"div"==a.name&&a.styles&&a.styles["page-break-after"]},styles:"display"}},requiredContent:"div{page-break-after}"}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/panelbutton/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/panelbutton/plugin.js deleted file mode 100644 index 18adde8c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/panelbutton/plugin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("panelbutton",{requires:"button",onLoad:function(){function e(c){var a=this._;a.state!=CKEDITOR.TRISTATE_DISABLED&&(this.createPanel(c),a.on?a.panel.hide():a.panel.showBlock(this._.id,this.document.getById(this._.id),4))}CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){var a=c.panel||{};delete c.panel;this.base(c);this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.block={attributes:a.attributes};this.hasArrow=a.toolbarRelated= -!0;this.click=e;this._={panelDefinition:a}},statics:{handler:{create:function(c){return new CKEDITOR.ui.panelButton(c)}}},proto:{createPanel:function(c){var a=this._;if(!a.panel){var f=this._.panelDefinition,e=this._.panelDefinition.block,g=f.parent||CKEDITOR.document.getBody(),d=this._.panel=new CKEDITOR.ui.floatPanel(c,g,f),f=d.addBlock(a.id,e),b=this;d.onShow=function(){b.className&&this.element.addClass(b.className+"_panel");b.setState(CKEDITOR.TRISTATE_ON);a.on=1;b.editorFocus&&c.focus();if(b.onOpen)b.onOpen()}; -d.onHide=function(d){b.className&&this.element.getFirst().removeClass(b.className+"_panel");b.setState(b.modes&&b.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);a.on=0;if(!d&&b.onClose)b.onClose()};d.onEscape=function(){d.hide(1);b.document.getById(a.id).focus()};if(this.onBlock)this.onBlock(d,f);f.onHide=function(){a.on=0;b.setState(CKEDITOR.TRISTATE_OFF)}}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler)}}); -CKEDITOR.UI_PANELBUTTON="panelbutton"; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/pastefromword/filter/default.js b/platforms/browser/www/lib/ckeditor/plugins/pastefromword/filter/default.js deleted file mode 100644 index 899ed21b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/pastefromword/filter/default.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function y(a){for(var a=a.toUpperCase(),c=z.length,b=0,f=0;f<c;++f)for(var d=z[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function A(a){for(var a=a.toUpperCase(),c=B.length,b=1,f=1;0<a.length;f*=c)b+=B.indexOf(a.charAt(a.length-1))*f,a=a.substr(0,a.length-1);return b}var C=CKEDITOR.htmlParser.fragment.prototype,o=CKEDITOR.htmlParser.element.prototype;C.onlyChild=o.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};o.removeAnyChildWithName= -function(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};o.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};C.firstChild=o.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};o.addStyle=function(a,c,b){var f="";if("string"==typeof c)f+=a+":"+c+";";else{if("object"== -typeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+":"+a[d]+";");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(b?[f,a]:[a,f]).join(";");this.attributes.style=a.replace(/^;+|;(?=;)/g,"")};o.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf("$")&&this[b][a]&&(c[b]=1);return c};var H=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i, -D=/^(?:\b0[^\s]*\s*){1,4}$/,x={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},z=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],B="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=0,t=null,w,E=CKEDITOR.plugins.pastefromword= -{utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element("cke:listbullet");b.attributes={"cke:listsymbol":a[0]};b.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName("cke:listbullet"))&&b.length&& -(b=b[0]))return a.name="cke:li",c.style&&(c.style=E.filters.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!s&&(null!==t&&a>t)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]= -1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,c){var c="number"==typeof c?c:1,b=a.attributes,f;switch(b.type){case "a":f= -"lower-alpha";break;case "1":f="decimal"}for(var d=a.children,e,h=0;h<d.length;h++)if(e=d[h],e.name in CKEDITOR.dtd.$listItem){var j=e.attributes,g=e.children,m=g[g.length-1];m.name in CKEDITOR.dtd.$list&&(a.add(m,h+1),--g.length||d.splice(h--,1));e.name="cke:li";b.start&&!h&&(j.value=b.start);E.filters.stylesFilter([["tab-stops",null,function(a){(a=a.split(" ")[1].match(H))&&(t=CKEDITOR.tools.convertToPx(a[0]))}],1==c?["mso-list",null,function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==w&& -(j["cke:reset"]=1);w=a}]:null])(j.style);j["cke:indent"]=c;j["cke:listtype"]=a.name;j["cke:list-style-type"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,h).concat(e.children).concat(d.slice(h+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b["cke:list"]=1},assembleList:function(a){for(var c=a.children,b,f,d,e,h,j,a=[],g,m,i,l,k,p,n=0;n<c.length;n++)if(b=c[n],"cke:li"==b.name)if(b.name="li",f=b.attributes,i=(i=f["cke:listsymbol"])&& -i.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),l=k=p=null,f["cke:ignored"])c.splice(n--,1);else{f["cke:reset"]&&(j=e=h=null);d=Number(f["cke:indent"]);d!=e&&(m=g=null);if(i){if(m&&x[m][g].test(i[1]))l=m,k=g;else for(var q in x)for(var u in x[q])if(x[q][u].test(i[1]))if("ol"==q&&/alpha|roman/.test(u)){if(g=/roman/.test(u)?y(i[1]):A(i[1]),!p||g<p)p=g,l=q,k=u}else{l=q;k=u;break}!l&&(l=i[2]?"ol":"ul")}else l=f["cke:listtype"]||"ol",k=f["cke:list-style-type"];m=l;g=k||("ol"==l?"decimal":"disc");k&&k!=("ol"==l? -"decimal":"disc")&&b.addStyle("list-style-type",k);if("ol"==l&&i){switch(k){case "decimal":p=Number(i[1]);break;case "lower-roman":case "upper-roman":p=y(i[1]);break;case "lower-alpha":case "upper-alpha":p=A(i[1])}b.attributes.value=p}if(j){if(d>e)a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),h.add(j);else{if(d<e){e-=d;for(var r;e--&&(r=j.parent);)j=r.parent}j.add(b)}c.splice(n--,1)}else a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),c[n]=j;h=b;e=d}else j&&(j=e=h=null);for(n=0;n<a.length;n++)if(j= -a[n],q=j.children,g=g=void 0,u=j.children.length,r=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=j.attributes,!c.exec(g.style)){for(h=0;h<u;h++)if(g=q[h],g.attributes.value&&Number(g.attributes.value)==h+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]==r||!r)r=g[1];else{r=null;break}if(r){for(h=0;h<u;h++)g=q[h].attributes,g.style&&(g.style=e([["list-style-type"]])(g.style)||"");j.addStyle("list-style-type",r)}}w=t=s=null},falsyFilter:function(){return!1}, -stylesFilter:function(a,c){return function(b,f){var d=[];(b||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();"font-family"==e&&(g=g.replace(/["']/g,""));for(var m,i,l,k=0;k<a.length;k++)if(a[k]&&(b=a[k][0],m=a[k][1],i=a[k][2],l=a[k][3],e.match(b)&&(!m||g.match(m)))){e=l||e;c&&(i=i||g);"function"==typeof i&&(i=i(g,f,e));i&&i.push&&(e=i[0],i=i[1]);"string"==typeof i&&d.push([e,i]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]= -d[e].join(":");return d.length?d.join(";")+";":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f))}:function(){}},styleMigrateFilter:function(a,c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),h={};h[c]=f;b(a,h)(e);e.children=d.children;d.children=[e];e.filter= -function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,h=e.falsyFilter,j=e.stylesFilter,g=e.elementMigrateFilter,m=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),i=this.utils.createListBulletMarker,l=e.flattenList,k=e.assembleList,p=this.utils.isListBulletIndicator,n=this.utils.isContainingOnlySpaces, -q=this.utils.resolveList,u=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},r=this.utils.getStyleComponents,t=this.utils.listDtdParents,o=!1!==d.pasteFromWordRemoveFontStyles,s=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren(c);k(a)},elements:{"^":function(a){var c;CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var v=a.name||"",e=a.attributes;v in f&&e.style&&(e.style=j([[/^(:?width|height)$/,null, -u]])(e.style)||"");if(v.match(/h\d/)){a.filterChildren(c);if(q(a))return;g(d["format_"+v])(a)}else if(v in b.$inline)a.filterChildren(c),n(a)&&delete a.name;else if(-1!=v.indexOf(":")&&-1==v.indexOf("cke")){a.filterChildren(c);if("v:imagedata"==v){if(v=a.attributes["o:href"])a.attributes.src=v;a.name="img";return}delete a.name}v in t&&(a.filterChildren(c),k(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],c={};a&& -(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,b,F){for(var b=b.split(","),a=b.length,d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,b,d){b=b||"*";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=F:c[b]=F)})}),e.applyStyleFilter=function(a){var b=c["*"]?"*":a.name,d=a.attributes&&a.attributes["class"];b in c&&(b=c[b],"object"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])|| -a.getStyle("mso-list")){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!n(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren(c);q(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):g(d["format_"+(d.enterMode==CKEDITOR.ENTER_P?"p":"div")])(a))},div:function(a){var c=a.onlyChild();if(c&&"table"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,b);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element("div"); -c.addStyle("clear","both");a.add(c);delete a.name}},td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:l,ul:l,dl:l,font:function(a){if(p(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;"font"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes),d&&e.addStyle(d),delete a.name):(d=(d||"").split(";"),b.color&&("#000000"!=b.color&&d.push("color:"+b.color),delete b.color),b.face&&(d.push("font-family:"+b.face),delete b.face),b.size&&(d.push("font-size:"+ -(3<b.size?"large":3>b.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=i(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style= -j([["line-height"],[/^font-family$/,null,!o?m(d.font_style,"family"):null],[/^font-size$/,null,!o?m(d.fontSize_style,"size"):null],[/^color$/,null,!o?m(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?m(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript), -a:function(a){a=a.attributes;a.href&&a.href.match(/^file:\/\/\/[\S]+#/i)&&(a.href=a.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left": -"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"], -["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":h,bgcolor:h,valign:s?h:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),i(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0], -(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:h}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&& -(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi,"$1<span>$2</span>$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){alert(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js deleted file mode 100644 index f41e86d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/dialogs/placeholder.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("placeholder",function(a){var b=a.lang.placeholder,a=a.lang.common.generalTab;return{title:b.title,minWidth:300,minHeight:80,contents:[{id:"info",label:a,title:a,elements:[{id:"name",type:"text",style:"width: 100%;",label:b.name,"default":"",required:!0,validate:CKEDITOR.dialog.validate.regex(/^[^\[\]\<\>]+$/,b.invalidName),setup:function(a){this.setValue(a.data.name)},commit:function(a){a.setData("name",this.getValue())}}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png b/platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png deleted file mode 100644 index 0b7abcec8aec3fc61ed2038fb90bc74b8bde31e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1775 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 RJQ@H1002ovPDHLkV1oC?Fk%1z diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png b/platforms/browser/www/lib/ckeditor/plugins/placeholder/icons/placeholder.png deleted file mode 100644 index cb12b481452f7a2e84747fc8a17122aaf00c975d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<6}=3#}JFtt&{g=y><|2-9J@CCp_y;#}d!vX5OsJ5|7jkRs}zm z{KQr{ZOY3}EXOi=HdU)nIOWOmuhU@K237Cf+jrjbxUN{9kSLjU&ayf!Ok*j7$K@$+ z%T7NmSa9aAbX($u43h$xcDKch4XP~{t_F&9PM<E$nlS4bXM;df+<Nt#+yBx&)W&Nr zEm|5P*QWSt`i%3>vv$S=UHiRneb3!I_5@bPgnfJWuAH>8YS&#oet!NEE7@(g*K#!- zU|DlFuYGFj%xUQoYz%+v=7+6reO|fddiJr$hTFGqx3RVT_~VC%0Lv|N?eoQ})-ZTZ zQds)r-#@tq1D>5bcP1Lmykeu-#pLZ(nG`l_*;daT>%1qa#KgtTV~{xhI8a-|*{d`6 zc8-~J+Gfe-gAF>TCHUI6-m*Dg9~L0OIxY2L)>a0fue!Ur-@SYH<IkTf3_+*z`BxR% z$aOxRaWTV1#C6BI(^s#GGISqp+Pr!5ebG1HtGgCG`1Na+&3T}T>(|2<X&f@>`LEsa zI6~Zad9dxHO+VfFeJ)=)r|!Av;FKWKYp-T`Yi>NX<auS%)~LU415F!V?Y*1FeY~*b z+^-)$7W@f_kB@)!^XJZMDYMjqyp~M4`ZbK<Y?|=GDVNmt?B5^l8ko`Ws(N+9^XJcZ zJ?FRKG2#n1Rrdp?0o4-Mh?11Vl2ohYqEsNoU}RuutZQJdYhV&$Xl`X-3`E)nMpgy} zzDsrk(+84<-29Zxv`X9>Y<@By0cwy0*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%k SosASw5re0zpUXO@geCwotTW^Q diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ar.js deleted file mode 100644 index 2ca7673e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ar",{title:"خصائص الربط الموضعي",toolbar:"الربط الموضعي",name:"اسم الربط الموضعي",invalidName:"لا يمكن ترك الربط الموضعي فارغا و لا أن يحتوي على الرموز التالية [, ], <, >",pathName:"الربط الموضعي"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/bg.js deleted file mode 100644 index 78bd6649..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","bg",{title:"Настройки на контейнера",toolbar:"Нов контейнер",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ca.js deleted file mode 100644 index f4115f16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ca",{title:"Propietats del marcador de posició",toolbar:"Marcador de posició",name:"Nom del marcador de posició",invalidName:"El marcador de posició no pot estar en blanc ni pot contenir cap dels caràcters següents: [,],<,>",pathName:"marcador de posició"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cs.js deleted file mode 100644 index 3c24a677..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","cs",{title:"Vlastnosti vyhrazeného prostoru",toolbar:"Vytvořit vyhrazený prostor",name:"Název vyhrazeného prostoru",invalidName:"Vyhrazený prostor nesmí být prázdný či obsahovat následující znaky: [, ], <, >",pathName:"Vyhrazený prostor"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cy.js deleted file mode 100644 index 55022779..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","cy",{title:"Priodweddau'r Daliwr Geiriau",toolbar:"Daliwr Geiriau",name:"Enw'r Daliwr Geiriau",invalidName:"Dyw'r daliwr geiriau methu â bod yn wag ac na all gynnyws y nodau [, ], <, > ",pathName:"daliwr geiriau"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/da.js deleted file mode 100644 index dcbee5b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","da",{title:"Egenskaber for pladsholder",toolbar:"Opret pladsholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/de.js deleted file mode 100644 index be828cda..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","de",{title:"Platzhalter Einstellungen",toolbar:"Platzhalter erstellen",name:"Platzhalter Name",invalidName:"Der Platzhalter darf nicht leer sein und folgende Zeichen nicht enthalten: [, ], <, >",pathName:"Platzhalter"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/el.js deleted file mode 100644 index af6b7526..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","el",{title:"Ιδιότητες Υποκαθιστόμενου Κειμένου",toolbar:"Δημιουργία Υποκαθιστόμενου Κειμένου",name:"Όνομα Υποκαθιστόμενου Κειμένου",invalidName:"Το υποκαθιστόμενου κειμένο πρέπει να μην είναι κενό και να μην έχει κανέναν από τους ακόλουθους χαρακτήρες: [, ], <, >",pathName:"υποκαθιστόμενο κείμενο"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js deleted file mode 100644 index 38006937..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","en-gb",{title:"Placeholder Properties",toolbar:"Placeholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of the following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en.js deleted file mode 100644 index d91d35e0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","en",{title:"Placeholder Properties",toolbar:"Placeholder",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eo.js deleted file mode 100644 index 7027a1ed..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","eo",{title:"Atributoj de la rezervita spaco",toolbar:"Rezervita Spaco",name:"Nomo de la rezervita spaco",invalidName:"La rezervita spaco ne povas esti malplena kaj ne povas enteni la sekvajn signojn : [, ], <, >",pathName:"rezervita spaco"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/es.js deleted file mode 100644 index 1a9162d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","es",{title:"Propiedades del Marcador de Posición",toolbar:"Crear Marcador de Posición",name:"Nombre del Marcador de Posición",invalidName:"El marcador de posición no puede estar vacío y no puede contener ninguno de los siguientes caracteres: [, ], <, >",pathName:"marcador de posición"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/et.js deleted file mode 100644 index f6f3dac6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","et",{title:"Kohahoidja omadused",toolbar:"Kohahoidja loomine",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eu.js deleted file mode 100644 index 663ac7a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","eu",{title:"Leku-marka Aukerak",toolbar:"Leku-marka sortu",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fa.js deleted file mode 100644 index 967e55d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fa",{title:"ویژگی‌های محل نگهداری",toolbar:"ایجاد یک محل نگهداری",name:"نام مکان نگهداری",invalidName:"مکان نگهداری نمی‌تواند خالی باشد و همچنین نمی‌تواند محتوی نویسه‌های مقابل باشد: [, ], <, >",pathName:"مکان نگهداری"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fi.js deleted file mode 100644 index 5c3e1562..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fi",{title:"Paikkamerkin ominaisuudet",toolbar:"Luo paikkamerkki",name:"Paikkamerkin nimi",invalidName:"Paikkamerkki ei voi olla tyhjä eikä sisältää seuraavia merkkejä: [, ], <, >",pathName:"paikkamerkki"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js deleted file mode 100644 index e803e71a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fr-ca",{title:"Propriétés de l'espace réservé",toolbar:"Créer un espace réservé",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr.js deleted file mode 100644 index b4c39c95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","fr",{title:"Propriétés de l'Espace réservé",toolbar:"Créer l'Espace réservé",name:"Nom de l'espace réservé",invalidName:"L'espace réservé ne peut pas être vide ni contenir l'un de ses caractères : [, ], <, >",pathName:"espace réservé"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/gl.js deleted file mode 100644 index e4fff775..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","gl",{title:"Propiedades do marcador de posición",toolbar:"Crear un marcador de posición",name:"Nome do marcador de posición",invalidName:"O marcador de posición non pode estar baleiro e non pode conter ningún dos caracteres seguintes: [, ], <, >",pathName:"marcador de posición"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/he.js deleted file mode 100644 index 5202f509..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","he",{title:"מאפייני שומר מקום",toolbar:"צור שומר מקום",name:"שם שומר מקום",invalidName:"שומר מקום לא יכול להיות ריק ולא יכול להכיל את הסימנים: [, ], <, >",pathName:"שומר מקום"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hr.js deleted file mode 100644 index 866a110e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","hr",{title:"Svojstva rezerviranog mjesta",toolbar:"Napravi rezervirano mjesto",name:"Ime rezerviranog mjesta",invalidName:"Rezervirano mjesto ne može biti prazno niti može sadržavati ijedan od sljedećih znakova: [, ], <, >",pathName:"rezervirano mjesto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hu.js deleted file mode 100644 index a8e58e71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","hu",{title:"Helytartó beállítások",toolbar:"Helytartó készítése",name:"Helytartó neve",invalidName:"A helytartó nem lehet üres, és nem tartalmazhatja a következő karaktereket:[, ], <, > ",pathName:"helytartó"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/id.js deleted file mode 100644 index c22f138e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","id",{title:"Properti isian sementara",toolbar:"Buat isian sementara",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/it.js deleted file mode 100644 index c4ade199..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","it",{title:"Proprietà segnaposto",toolbar:"Crea segnaposto",name:"Nome segnaposto",invalidName:"Il segnaposto non può essere vuoto e non può contenere nessuno dei seguenti caratteri: [, ], <, >",pathName:"segnaposto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ja.js deleted file mode 100644 index c1ed5b5f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ja",{title:"プレースホルダのプロパティ",toolbar:"プレースホルダを作成",name:"プレースホルダ名",invalidName:"プレースホルダは空欄にできません。また、[, ], <, > の文字は使用できません。",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/km.js deleted file mode 100644 index 0ae3e81b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","km",{title:"លក្ខណៈ Placeholder",toolbar:"បង្កើត Placeholder",name:"ឈ្មោះ Placeholder",invalidName:"Placeholder មិន​អាច​ទទេរ ហើយក៏​មិន​អាច​មាន​តួ​អក្សរ​ទាំង​នេះ​ទេ៖ [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ko.js deleted file mode 100644 index 2974ee2c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ko",{title:"플레이스홀도 속성",toolbar:"플레이스홀더 생성",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ku.js deleted file mode 100644 index 8f62811f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ku",{title:"خاسیەتی شوێن هەڵگر",toolbar:"درووستکردنی شوێن هەڵگر",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/lv.js deleted file mode 100644 index b2ba800e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","lv",{title:"Viettura uzstādījumi",toolbar:"Izveidot vietturi",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nb.js deleted file mode 100644 index b379e52a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","nb",{title:"Egenskaper for plassholder",toolbar:"Opprett plassholder",name:"Navn på plassholder",invalidName:"Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >",pathName:"plassholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nl.js deleted file mode 100644 index 2c743ed6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","nl",{title:"Eigenschappen placeholder",toolbar:"Placeholder aanmaken",name:"Naam placeholder",invalidName:"De placeholder mag niet leeg zijn, en mag niet een van de volgende tekens bevatten: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/no.js deleted file mode 100644 index e2192cd8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","no",{title:"Egenskaper for plassholder",toolbar:"Opprett plassholder",name:"Navn på plassholder",invalidName:"Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >",pathName:"plassholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pl.js deleted file mode 100644 index df0c3aee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pl",{title:"Właściwości wypełniacza",toolbar:"Utwórz wypełniacz",name:"Nazwa wypełniacza",invalidName:"Wypełniacz nie może być pusty ani nie może zawierać żadnego z następujących znaków: [, ], < oraz >",pathName:"wypełniacz"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js deleted file mode 100644 index e438cc16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pt-br",{title:"Propriedades do Espaço Reservado",toolbar:"Criar Espaço Reservado",name:"Nome do Espaço Reservado",invalidName:"O espaço reservado não pode estar vazio e não pode conter nenhum dos seguintes caracteres: [, ], <, >",pathName:"Espaço Reservado"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt.js deleted file mode 100644 index b6dc1150..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","pt",{title:"Propriedades dos Símbolos",toolbar:"Símbolo",name:"Nome do Símbolo",invalidName:"O símbolo não pode estar em branco e não pode conter qualquer dos seguintes carateres: [, ], <, >",pathName:"símbolo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ru.js deleted file mode 100644 index 11572b14..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ru",{title:"Свойства плейсхолдера",toolbar:"Создать плейсхолдер",name:"Имя плейсхолдера",invalidName:'Плейсхолдер не может быть пустым и содержать один из следующих символов: "[, ], <, >"',pathName:"плейсхолдер"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/si.js deleted file mode 100644 index 3fe4e3d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","si",{title:"ස්ථාන හීම්කරුගේ ",toolbar:"ස්ථාන හීම්කරු නිර්මාණය කිරීම",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sk.js deleted file mode 100644 index 88800a99..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sk",{title:"Vlastnosti placeholdera",toolbar:"Vytvoriť placeholder",name:"Názov placeholdera",invalidName:"Placeholder nemôže byť prázdny a nemôže obsahovať žiadny z nasledujúcich znakov: [,],<,>",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sl.js deleted file mode 100644 index 60114c35..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sl",{title:"Lastnosti Ograde",toolbar:"Ustvari Ogrado",name:"Placeholder Ime",invalidName:"Placeholder ne more biti prazen in ne sme vsebovati katerega od naslednjih znakov: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sq.js deleted file mode 100644 index 6f54e135..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sq",{title:"Karakteristikat e Mbajtësit të Vendit",toolbar:"Krijo Mabjtës Vendi",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sv.js deleted file mode 100644 index 66a19562..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","sv",{title:"Innehållsrutans egenskaper",toolbar:"Skapa innehållsruta",name:"Innehållsrutans namn",invalidName:"Innehållsrutan får inte vara tom och får inte innehålla någon av följande tecken: [,],<,>",pathName:"innehållsruta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/th.js deleted file mode 100644 index 41198f94..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/th.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","th",{title:"คุณสมบัติเกี่ยวกับตัวยึด",toolbar:"สร้างตัวยึด",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tr.js deleted file mode 100644 index fc0d27dd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","tr",{title:"Yer tutucu özellikleri",toolbar:"Yer tutucu oluşturun",name:"Yer Tutucu Adı",invalidName:"Yer tutucu adı boş bırakılamaz ve şu karakterleri içeremez: [, ], <, >",pathName:"yertutucu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tt.js deleted file mode 100644 index d636866f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","tt",{title:"Тутырма үзлекләре",toolbar:"Тутырма",name:"Тутырма исеме",invalidName:"Тутырма буш булмаска тиеш һәм эчендә алдагы символлар булмаска тиеш: [, ], <, >",pathName:"тутырма"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ug.js deleted file mode 100644 index db0ad2ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","ug",{title:"ئورۇن بەلگە خاسلىقى",toolbar:"ئورۇن بەلگە قۇر",name:"Placeholder Name",invalidName:"The placeholder can not be empty and can not contain any of following characters: [, ], <, >",pathName:"placeholder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/uk.js deleted file mode 100644 index 015a82a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","uk",{title:"Налаштування Заповнювача",toolbar:"Створити Заповнювач",name:"Назва заповнювача",invalidName:"Заповнювач не може бути порожнім і не може містити наступні символи: [, ], <, >",pathName:"заповнювач"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/vi.js deleted file mode 100644 index 5875e467..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","vi",{title:"Thuộc tính đặt chỗ",toolbar:"Tạo đặt chỗ",name:"Tên giữ chỗ",invalidName:"Giữ chỗ không thể để trống và không thể chứa bất kỳ ký tự sau: [,], <, >",pathName:"giữ chỗ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js deleted file mode 100644 index bd67dfa8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","zh-cn",{title:"占位符属性",toolbar:"占位符",name:"占位符名称",invalidName:"占位符名称不能为空,并且不能包含以下字符:[、]、<、>",pathName:"占位符"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh.js deleted file mode 100644 index c400c26d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("placeholder","zh",{title:"預留位置屬性",toolbar:"建立預留位置",name:"Placeholder 名稱",invalidName:"「預留位置」不可為空白且不可包含以下字元:[, ], <, >",pathName:"預留位置"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/placeholder/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/placeholder/plugin.js deleted file mode 100644 index 39dfb472..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/placeholder/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("placeholder",{requires:"widget,dialog",lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"placeholder",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_placeholder{background-color:#ff0}")},init:function(a){var b=a.lang.placeholder;CKEDITOR.dialog.add("placeholder",this.path+"dialogs/placeholder.js");a.widgets.add("placeholder",{dialog:"placeholder", -pathName:b.pathName,template:'<span class="cke_placeholder">[[]]</span>',downcast:function(){return new CKEDITOR.htmlParser.text("[["+this.data.name+"]]")},init:function(){this.setData("name",this.element.getText().slice(2,-2))},data:function(){this.element.setText("[["+this.data.name+"]]")}});a.ui.addButton&&a.ui.addButton("CreatePlaceholder",{label:b.toolbar,command:"placeholder",toolbar:"insert,5",icon:"placeholder"})},afterInit:function(a){var b=/\[\[([^\[\]])+\]\]/g;a.dataProcessor.dataFilter.addRules({text:function(f, -d){var e=d.parent&&CKEDITOR.dtd[d.parent.name];if(!e||e.span)return f.replace(b,function(b){var c=null,c=new CKEDITOR.htmlParser.element("span",{"class":"cke_placeholder"});c.add(new CKEDITOR.htmlParser.text(b));c=a.widgets.wrapElement(c,"placeholder");return c.getOuterHtml()})}})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png deleted file mode 100644 index cd64e19a87a150e7b05f6b682953e45251f21b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2145 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 XE^l&Yo9;Xs00000NkvXXu0mjfTFvbC diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png b/platforms/browser/www/lib/ckeditor/plugins/preview/icons/hidpi/preview.png deleted file mode 100644 index 402db20e2776fdfd7f70a0a23edec0ffdc46c28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2204 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 Y(+!L8XRa6@;}rqc=Pux?u%1c(1w(J?%m4rY diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview-rtl.png deleted file mode 100644 index 1c9d97874cae75a185e975ba4af676c4162ec78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ?{pzV~EA+(#d=Mqyq(7_wT$Om7e(VmXK571Oe6vLEecmZR`$H zrd$aLP|2Slf6K;U7l)=-OVCeVjfKk@nwmF?GX`E**PMFrpD&jIpP=QX7h%uuSQ@7< zxtU|s&=H^^^1+7x{&&M;A0#HJD0V6R`fK+re$)HkAzGqqw&uIK$ZH=j+!CUd*t1jg z$LtubsR9$XKP~#Xb=9YcvuDo&MV~TCB!94ZKkv=&f3FRAst<Heo;-QlDy9b(e2*VL z{!(Ro_Or}`ZOqxa$;rvz?cD>fFpK&5`$u1kTC=r-qjKKjRVtoE_WeyA3Q7^#jQ3g+ zE4XwR)}B1+$q+I%Z~N)9XL*%AIUL}rQT06Z<%`LIrVbnNiL!z}b(O4-%{W@Lv*&qb zME1$gGJ=v(CqB<n@r;O%Kkxd)@<VEN_UoCeZn-TEWHob5DJ&@w$<~dW##??X$1HPe zR7>KChYue<cUo9*A;V<Xs$I)gg@(r7y?5^)s|?SsuQvXVEtXw=$-}xxW6|xm`{vA= z<+Xm@x_j~Q@x_IOj{EPshhDF_@6XP3G%4`0g&GIb83pEbuOI#1w|&o^HO9uqBHgZP zYH9_s;(`m~)*DB}PD?#3DUmE8DS5C^Mo(Y=?%ut7Z<O8*SK6ee6e<|WdM`I8N9Jzn z=K{95e(ff{jPsc8KY#vwYux(RZ{Fl^?^qS0W&iE__xe?@k|f&hw0d1OQRQID*nay+ zA<u`EQERi-hF#vgd2>i;dC1rAcX$6NpW>RLQBYHJ=I2k#Rlf=|Gd;`8%P&uzI+fpn z>Baw5*I!@E+dgseV&zRbi^EpiGVWuXUH)$0p|@*o+7vicJca%-=pD@zdc5%D7GPRb zEpd$~Nl7e8wMs5Z1yT$~28PDE2Ijg3CLxCARtCmEq-|hiWnkdDWH&IKB5BCYPsvQH z#I3>RC-V`Y21$?&!TD(=<%vb93_zFaW#(lUCnpx9>g5-u&wghk1ysb~>FVdQ&MBb@ E02sM!6951J diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview.png b/platforms/browser/www/lib/ckeditor/plugins/preview/icons/preview.png deleted file mode 100644 index 162b44b845ae7e4ab3c0206a167c0a05aeda2b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ-P<8V~EA++Q}RJq#Z?E&)?qIo6}RS8+b(UP@Y3a+o9AS3@-DT zW|@QpsLXe8n$7Pa?%Jgk_={g7$ibh{&tO_^OQ%Ej?5U~i%bzc0xXrb|=4F<f)Y*%B z-=Fo^8>c?`<bz7NlPQy?pNjI{ep{7;X_1CgsCs(eV~Zz6mO(40be-rnI`-!I=gOGt zsuMjFl!6;N9$4_LUcGw7tL{%W@0&Z`JTKarKH<oXBmtI|M2+p+x3?s6G;{>$h<WdO z|G%bX!K&YdGM8U}?RYGao|9@KwQyBLwxD2-p+xeIUAtB>zn<%-E@3@$_UywFp9?nL z%rTPSnK6I<^@jx>yYC+RUb|+i|KcejTUl3Zoffv*b!}L6fr3&*w&Ae}XVX5~@E<QU zb9oZsQq}*OYeSsYRJFX&QYpp0<Q~H_=gui9NgvqmwKOOow78<;htv;6CGG0!>M|3l z#I<wXI1W$9F<YIiRZv$_QnGrL^{S|Vt9QMYUh-8DdVV$Q>+bizue>hR)6-jUHA}Ef z(b(8nxZ(A#iL2gy`(2xtmnXr)cIW>6`ly(go?Um}&GuVv%&2nAw&QWdr&p(*8ucqH z&-G&l`v2ywTS3=LHy?gDL4jk#wSTvnLzmuvUtCb|LHdV=lC@Hhz{I;HR)7C}`C_tX z_ipdyL7GN0dHNpPxO6Pya0nH>|2^<(@8->$?SIznW4oiTt9$kI(@pEvuGRd&T_Nf! zcs8w=OF*#J=sRzyZP?X$tK{P2<K0i6J{_eYBJxA3O|jRFS*n-KQGnq^y~(Y6_x{xs z6$$0$<*iy(m%06ROkAAO)~MbTqmzdY9s1I5x1Qrh)t&v!_rg|RZ8U7#Kec$yww&}g z*1!a*TH+c}l9E`GYL#4+3Zxi}3=EBR4a{{7OhOFJtqhETNZY{3%D}*P$!=g`MbeO) zpOTqYiCcrsPv#>)4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe1W@O1Ta JS?83{1OV;eZD;@h diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/af.js deleted file mode 100644 index 97a16944..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","af",{preview:"Voorbeeld"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ar.js deleted file mode 100644 index a128ad1b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ar",{preview:"معاينة الصفحة"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bg.js deleted file mode 100644 index 5b88c365..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bg",{preview:"Преглед"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bn.js deleted file mode 100644 index b95a1b55..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bn",{preview:"প্রিভিউ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bs.js deleted file mode 100644 index 1418f764..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","bs",{preview:"Prikaži"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ca.js deleted file mode 100644 index 73458dd2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ca",{preview:"Visualització prèvia"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cs.js deleted file mode 100644 index f00d6eee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","cs",{preview:"Náhled"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cy.js deleted file mode 100644 index 071c8d8d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","cy",{preview:"Rhagolwg"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/da.js deleted file mode 100644 index 01f18bc8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","da",{preview:"Vis eksempel"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/de.js deleted file mode 100644 index 7c57cba3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","de",{preview:"Vorschau"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/el.js deleted file mode 100644 index 4aaeeb4b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","el",{preview:"Προεπισκόπιση"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-au.js deleted file mode 100644 index f10aa05e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-au",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-ca.js deleted file mode 100644 index 3a7244b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-ca",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-gb.js deleted file mode 100644 index 78d19abd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en-gb",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en.js deleted file mode 100644 index c1901ef8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","en",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eo.js deleted file mode 100644 index 5fa3dd6b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","eo",{preview:"Vidigi Aspekton"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/es.js deleted file mode 100644 index d507847e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","es",{preview:"Vista Previa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/et.js deleted file mode 100644 index a47ea46c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","et",{preview:"Eelvaade"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eu.js deleted file mode 100644 index ac83687c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","eu",{preview:"Aurrebista"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fa.js deleted file mode 100644 index ad85c381..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fa",{preview:"پیشنمایش"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fi.js deleted file mode 100644 index 6785c5b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fi",{preview:"Esikatsele"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fo.js deleted file mode 100644 index 779ef877..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fo",{preview:"Frumsýning"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr-ca.js deleted file mode 100644 index 3731a101..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fr-ca",{preview:"Prévisualiser"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr.js deleted file mode 100644 index ca8852b4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","fr",{preview:"Aperçu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gl.js deleted file mode 100644 index ab8a82a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","gl",{preview:"Vista previa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gu.js deleted file mode 100644 index e7b298b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","gu",{preview:"પૂર્વદર્શન"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/he.js deleted file mode 100644 index 420a9340..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","he",{preview:"תצוגה מקדימה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hi.js deleted file mode 100644 index 397d2786..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hi",{preview:"प्रीव्यू"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hr.js deleted file mode 100644 index 5a85fc9c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hr",{preview:"Pregledaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hu.js deleted file mode 100644 index b96a4360..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","hu",{preview:"Előnézet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/id.js deleted file mode 100644 index 8c7819d2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","id",{preview:"Pratinjau"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/is.js deleted file mode 100644 index 5fac3cd4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","is",{preview:"Forskoða"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/it.js deleted file mode 100644 index a9453f97..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","it",{preview:"Anteprima"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ja.js deleted file mode 100644 index 6b7cd82f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ja",{preview:"プレビュー"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ka.js deleted file mode 100644 index bc1590db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ka",{preview:"გადახედვა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/km.js deleted file mode 100644 index 68ab55fa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","km",{preview:"មើល​ជា​មុន"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ko.js deleted file mode 100644 index ac824da1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ko",{preview:"미리보기"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ku.js deleted file mode 100644 index 19594b66..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ku",{preview:"پێشبینین"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lt.js deleted file mode 100644 index 814a9213..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","lt",{preview:"Peržiūra"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lv.js deleted file mode 100644 index 7a27eb2b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","lv",{preview:"Priekšskatīt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mk.js deleted file mode 100644 index b0beed9c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","mk",{preview:"Preview"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mn.js deleted file mode 100644 index 6f2448c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","mn",{preview:"Уридчлан харах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ms.js deleted file mode 100644 index f3c596ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ms",{preview:"Prebiu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nb.js deleted file mode 100644 index ea20b380..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","nb",{preview:"Forhåndsvis"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nl.js deleted file mode 100644 index ed67f978..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","nl",{preview:"Voorbeeld"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/no.js deleted file mode 100644 index 0c13be89..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","no",{preview:"Forhåndsvis"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pl.js deleted file mode 100644 index 11f306e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pl",{preview:"Podgląd"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt-br.js deleted file mode 100644 index e7f58261..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pt-br",{preview:"Visualizar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt.js deleted file mode 100644 index 92e354db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","pt",{preview:"Pré-visualizar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ro.js deleted file mode 100644 index 646e2319..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ro",{preview:"Previzualizare"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ru.js deleted file mode 100644 index 11c59a41..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ru",{preview:"Предварительный просмотр"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/si.js deleted file mode 100644 index a205a154..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","si",{preview:"නැවත "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sk.js deleted file mode 100644 index abee94b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sk",{preview:"Náhľad"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sl.js deleted file mode 100644 index a5ba8ba7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sl",{preview:"Predogled"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sq.js deleted file mode 100644 index ef5e65b6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sq",{preview:"Parashiko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr-latn.js deleted file mode 100644 index 8c50b69d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sr-latn",{preview:"Izgled stranice"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr.js deleted file mode 100644 index c01f9362..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sr",{preview:"Изглед странице"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sv.js deleted file mode 100644 index f5a3f5aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","sv",{preview:"Förhandsgranska"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/th.js deleted file mode 100644 index 047e25f1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","th",{preview:"ดูหน้าเอกสารตัวอย่าง"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tr.js deleted file mode 100644 index dd331bd1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","tr",{preview:"Ön İzleme"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tt.js deleted file mode 100644 index 9b5e62ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","tt",{preview:"Карап алу"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ug.js deleted file mode 100644 index 06549fd1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","ug",{preview:"ئالدىن كۆزەت"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/uk.js deleted file mode 100644 index 8d45b877..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","uk",{preview:"Попередній перегляд"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/vi.js deleted file mode 100644 index ba28bcc9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","vi",{preview:"Xem trước"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh-cn.js deleted file mode 100644 index 69445d04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","zh-cn",{preview:"预览"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh.js deleted file mode 100644 index 2ebf415a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("preview","zh",{preview:"預覽"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/preview/plugin.js deleted file mode 100644 index a21212c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var h,i={modes:{wysiwyg:1,source:1},canUndo:!1,readOnly:1,exec:function(a){var g,b=a.config,f=b.baseHref?'<base href="'+b.baseHref+'"/>':"";if(b.fullPage)g=a.getData().replace(/<head>/,"$&"+f).replace(/[^>]*(?=<\/title>)/,"$& &mdash; "+a.lang.preview.preview);else{var b="<body ",d=a.document&&a.document.getBody();d&&(d.getAttribute("id")&&(b+='id="'+d.getAttribute("id")+'" '),d.getAttribute("class")&&(b+='class="'+d.getAttribute("class")+'" '));g=a.config.docType+'<html dir="'+a.config.contentsLangDirection+ -'"><head>'+f+"<title>"+a.lang.preview.preview+"</title>"+CKEDITOR.tools.buildStyleHtml(a.config.contentsCss)+"</head>"+(b+">")+a.getData()+"</body></html>"}f=640;b=420;d=80;try{var c=window.screen,f=Math.round(0.8*c.width),b=Math.round(0.7*c.height),d=Math.round(0.1*c.width)}catch(i){}if(!1===a.fire("contentPreview",a={dataValue:g}))return!1;var c="",e;CKEDITOR.env.ie&&(window._cke_htmlToLoad=a.dataValue,e="javascript:void( (function(){document.open();"+("("+CKEDITOR.tools.fixDomain+")();").replace(/\/\/.*?\n/g, -"").replace(/parent\./g,"window.opener.")+"document.write( window.opener._cke_htmlToLoad );document.close();window.opener._cke_htmlToLoad = null;})() )",c="");CKEDITOR.env.gecko&&(window._cke_htmlToLoad=a.dataValue,c=CKEDITOR.getUrl(h+"preview.html"));c=window.open(c,null,"toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width="+f+",height="+b+",left="+d);CKEDITOR.env.ie&&c&&(c.location=e);!CKEDITOR.env.ie&&!CKEDITOR.env.gecko&&(e=c.document,e.open(),e.write(a.dataValue), -e.close());return!0}};CKEDITOR.plugins.add("preview",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"preview,preview-rtl",hidpi:!0,init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(h=this.path,a.addCommand("preview",i),a.ui.addButton&&a.ui.addButton("Preview",{label:a.lang.preview.preview,command:"preview", -toolbar:"document,40"}))}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/preview/preview.html b/platforms/browser/www/lib/ckeditor/plugins/preview/preview.html deleted file mode 100644 index 8c028262..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/preview/preview.html +++ /dev/null @@ -1,13 +0,0 @@ -<script> - -// Prevent from DOM clobbering. -if ( typeof window.opener._cke_htmlToLoad == 'string' ) { - var doc = document; - doc.open(); - doc.write( window.opener._cke_htmlToLoad ); - doc.close(); - - delete window.opener._cke_htmlToLoad; -} - -</script> diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/icons/hidpi/print.png b/platforms/browser/www/lib/ckeditor/plugins/print/icons/hidpi/print.png deleted file mode 100644 index 4b72460dd4f1239d5aad15f2c78a959642eac9a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/icons/print.png b/platforms/browser/www/lib/ckeditor/plugins/print/icons/print.png deleted file mode 100644 index 06f797dc7285d97c7113e66cf9680b3a15f3ca2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbENAV~EA+sguuoDF+I)?%#F&!rZ>K3&jgxE^A%mE|C8C@ec+g z{fF8=M0ORwO>-#xmc+u`<>8S0`t81r^;u#Yn~fJA5}9*%=kixqR%(Zbhj(xslUTDg zBKzm6SG$(2%bvB&F*K6N;Mj%NUp*$VB%hhi<a_zUhYt<KeY@5fDm87LcJ*rLnyuAJ zlR7)<n$AS+{(j8WWy0&%*@p~La&vhFHOtD%4jJ$SUbVOC=D1hw=jXR)RoVOZ??2u< zoMPk{8vQ5Ws(R?x`43+9Hm@?8>9at`yCK=(zwq(YNTpS$e*M~&mz#UhgjZi*U&Pfh z_Byxp+j+b0>YYA)S|ZuP);85f?zGT>1cL+B{l$IF&CT;OXVv}IXuO#5CA+-*d-eM3 z$p#V(XOeYJPr80Rd`|I_%w76Q?ed%}UhOM>x8d^3E!Pa+_b*<h)v)+sfycb(&sSLm zUyTIPhaU<&Sg~pqYrSGX=vAh*2_mkum4rGx1Y9qs{eF<Yj!~nl$>#j?o%>>=Lqoec zSFN(jpT)-T-nMdHu*lIn(~J8o`p!>Mxv0?<66$&R%lsRcOhQ9dyOew<xjeS8D?YdJ z%a0!((^7*IuIZhwKL72TnWF%M!R)g;cJ9oS-nQrE+qb$#QoR|o+Io9?1s?qTd2{`m zH5vQwFTecq!ZMS&ekV8iJhI?p)YI4BYnUddeBkKOR&l{51&2`a%X`*;tT=P`?%eRJ zN7w)5RhFt#mg?TU2bgSBOI#yLQW8s2t&)pUffR$0fuXUkfw``MNr<7jm4Pu3X&V?> z85sC3*$qrmNE&kUQ!>*kaci*o$$SK;K@wy`aDG}zd16s2LwR|*US?i)adKios$PCk U`s{Z$Qb0uvp00i_>zopr0P|i^5dZ)H diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/af.js deleted file mode 100644 index 61185ef1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","af",{toolbar:"Druk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ar.js deleted file mode 100644 index b61c0946..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ar",{toolbar:"طباعة"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/bg.js deleted file mode 100644 index 6d929a8f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bg",{toolbar:"Печат"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/bn.js deleted file mode 100644 index 005dfd28..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bn",{toolbar:"প্রিন্ট"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/bs.js deleted file mode 100644 index a6399186..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","bs",{toolbar:"Štampaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ca.js deleted file mode 100644 index 76f7145f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ca",{toolbar:"Imprimeix"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/cs.js deleted file mode 100644 index 8927afb8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","cs",{toolbar:"Tisk"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/cy.js deleted file mode 100644 index 173df74e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","cy",{toolbar:"Argraffu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/da.js deleted file mode 100644 index d816585f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","da",{toolbar:"Udskriv"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/de.js deleted file mode 100644 index a429f6cd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","de",{toolbar:"Drucken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/el.js deleted file mode 100644 index d5623ebd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","el",{toolbar:"Εκτύπωση"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-au.js deleted file mode 100644 index 191384e6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-au",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-ca.js deleted file mode 100644 index aff5850e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-ca",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-gb.js deleted file mode 100644 index 84a26bdf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en-gb",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/en.js deleted file mode 100644 index 17461f29..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","en",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/eo.js deleted file mode 100644 index b0580c1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","eo",{toolbar:"Presi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/es.js deleted file mode 100644 index 5549ced6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","es",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/et.js deleted file mode 100644 index cd192d60..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","et",{toolbar:"Printimine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/eu.js deleted file mode 100644 index 6690c535..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","eu",{toolbar:"Inprimatu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/fa.js deleted file mode 100644 index 2445e39e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fa",{toolbar:"چاپ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/fi.js deleted file mode 100644 index 2547e349..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fi",{toolbar:"Tulosta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/fo.js deleted file mode 100644 index 1c93841a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fo",{toolbar:"Prenta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr-ca.js deleted file mode 100644 index ecedc161..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fr-ca",{toolbar:"Imprimer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr.js deleted file mode 100644 index 1ae9a1d2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","fr",{toolbar:"Imprimer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/gl.js deleted file mode 100644 index 47ef182c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","gl",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/gu.js deleted file mode 100644 index a6c1366f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","gu",{toolbar:"પ્રિન્ટ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/he.js deleted file mode 100644 index a9e047af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","he",{toolbar:"הדפסה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/hi.js deleted file mode 100644 index 06ae5981..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hi",{toolbar:"प्रिन्ट"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/hr.js deleted file mode 100644 index ffbd7f74..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hr",{toolbar:"Ispiši"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/hu.js deleted file mode 100644 index 1b1fb4e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","hu",{toolbar:"Nyomtatás"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/id.js deleted file mode 100644 index 4df05eb7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","id",{toolbar:"Cetak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/is.js deleted file mode 100644 index 0fb61680..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","is",{toolbar:"Prenta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/it.js deleted file mode 100644 index f8a79668..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","it",{toolbar:"Stampa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ja.js deleted file mode 100644 index dbfd00bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ja",{toolbar:"印刷"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ka.js deleted file mode 100644 index 86dc40f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ka",{toolbar:"ბეჭდვა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/km.js deleted file mode 100644 index 35450b4c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","km",{toolbar:"បោះពុម្ព"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ko.js deleted file mode 100644 index 9657b437..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ko",{toolbar:"인쇄하기"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ku.js deleted file mode 100644 index fce60ec7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ku",{toolbar:"چاپکردن"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/lt.js deleted file mode 100644 index 1829455b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","lt",{toolbar:"Spausdinti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/lv.js deleted file mode 100644 index e03d0b5d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","lv",{toolbar:"Drukāt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/mk.js deleted file mode 100644 index 63fd4d06..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","mk",{toolbar:"Print"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/mn.js deleted file mode 100644 index 8df85cf9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","mn",{toolbar:"Хэвлэх"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ms.js deleted file mode 100644 index ca8734bd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ms",{toolbar:"Cetak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/nb.js deleted file mode 100644 index e65fcfd9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","nb",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/nl.js deleted file mode 100644 index 41ecffd4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","nl",{toolbar:"Afdrukken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/no.js deleted file mode 100644 index afb031f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","no",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/pl.js deleted file mode 100644 index 1bdbdebb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pl",{toolbar:"Drukuj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt-br.js deleted file mode 100644 index 9246c27d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pt-br",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt.js deleted file mode 100644 index a72195ba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","pt",{toolbar:"Imprimir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ro.js deleted file mode 100644 index 2f331d22..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ro",{toolbar:"Printează"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ru.js deleted file mode 100644 index 458a9c14..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ru",{toolbar:"Печать"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/si.js deleted file mode 100644 index 68d3f56d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","si",{toolbar:"මුද්‍රණය කරන්න"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sk.js deleted file mode 100644 index 7762bb2e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sk",{toolbar:"Tlač"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sl.js deleted file mode 100644 index 9f401ddb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sl",{toolbar:"Natisni"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sq.js deleted file mode 100644 index bfb05a47..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sq",{toolbar:"Shtype"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr-latn.js deleted file mode 100644 index 62cdc718..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sr-latn",{toolbar:"Štampa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr.js deleted file mode 100644 index 74f6430e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sr",{toolbar:"Штампа"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/sv.js deleted file mode 100644 index 14181ba8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","sv",{toolbar:"Skriv ut"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/th.js deleted file mode 100644 index e87d3ac2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","th",{toolbar:"สั่งพิมพ์"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/tr.js deleted file mode 100644 index 82f81f05..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","tr",{toolbar:"Yazdır"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/tt.js deleted file mode 100644 index db8ff025..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","tt",{toolbar:"Бастыру"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/ug.js deleted file mode 100644 index 6c270318..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","ug",{toolbar:"باس "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/uk.js deleted file mode 100644 index dfde34dc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","uk",{toolbar:"Друк"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/vi.js deleted file mode 100644 index 56573948..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","vi",{toolbar:"In"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh-cn.js deleted file mode 100644 index d7c2643d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","zh-cn",{toolbar:"打印"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh.js deleted file mode 100644 index 65b8840d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("print","zh",{toolbar:"列印"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/print/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/print/plugin.js deleted file mode 100644 index 0b802e39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/print/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("print",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"print,",hidpi:!0,init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(a.addCommand("print",CKEDITOR.plugins.print),a.ui.addButton&&a.ui.addButton("Print",{label:a.lang.print.toolbar,command:"print",toolbar:"document,50"}))}}); -CKEDITOR.plugins.print={exec:function(a){CKEDITOR.env.gecko?a.window.$.print():a.document.$.execCommand("Print")},canUndo:!1,readOnly:1,modes:{wysiwyg:1}}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/icons/hidpi/save.png b/platforms/browser/www/lib/ckeditor/plugins/save/icons/hidpi/save.png deleted file mode 100644 index fc59f677aa3cb94f888a1c922f126cc8d06d18a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmV-$29NoPP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy00oIjL_t(o!>yM+Y#hfG$A52jXP5Uy zQj|!VA!D_)U6_K-g#d?!gA@krHV71`VUtd*BEV?^IE@U;jVU;R1@~fO0e0lh1??bC zLqsZEIDjF9h%HgHNLswxTi)KzOp5*Bo<)C1<N$+PVBgLA&wKy(e{bcB)m20UC4%R9 zC=o=2ayiG5R^=?`9M(CEF<9qt&f$v)zUR@b)i}{?G7<zC0OvTO>jMlq5a%5GNy2Wo zOE->5jlowUG;1|}F+Gj6+oyrcz#=enO#X{?5BLoDlUrZkxO@LTdr^e%c^>192GVYy z_UiRpzj^7UvDWA)Ns`cuB8;_9o(2&-rKmR=1VJ#<+1vZwC!c=$inQBjqP4Y+Xn#M8 zK;ZiTmzOSF7!&9C=I&iSzIjs}=k;HG?KS)K+#E|6E{wf@?b_wQ_kXWMP%bCM)6YJ; zXsjiUV>-RwF-IRdy&iEKW30`58IzIFIfqG8=4NMSk|e=ei)hV*4?d7@zWtVDFnD4z z3J_?`?Bpb(wK3M>l7zY0*%_0j82|w59AOw@jLH7!`vlD<BWa3C(<9wH$j=hr#{tF| z!Z5_<yz&dfG)+qY)>@S3p?sgC5<&Ss%JZ<+W`xdt6{`f`a$zW*3o#NnQVIYh*MREz zCBVY4P$qKczUSd7HKb&Zk02{U-}4T{Emy<h)S(FA9HJB>K|nY<N~_<;bh`}l)I9Fe zo=2-*CmbCu71mih6al|LTD(vqnJ}F_TX(l__te%FojAtk`TMy`DMhPR<K)y7vanG9 z?fLU4=P=IUtSuw^2nR%jdKiM%3$n0q+kN?E?_{R~j~fNggH{WfpRc3!LOl%W_xnR! zC;?PC;H<@2%k1>@Keo2Fk@@*2=K!E<HKtCUEYCfh0~MB9=NJqI{QBjW5v8!sJ$Cr3 zX;6832ZO=EC7nA+L4m{=lWnE2#xNKRhUbDKtiov_M5W+WQ&1QjR;%s_yW#gQ;EH`{ z3iA9^0a$CZ>E(N+^K+dmrLrkYsjLKxi~d*@6poBBL{Y@f&JIx&{Ui^n@PsV?jYfls zi3u8w2A<~~0C+?P4grv+DLXqm+`4t^NbTUvnKL#FLzGfK06^rR3@d3c*3wIoqxc4( zmn0Z#vk2y?F3V5^p9(u|UaLiZL~9;?_@QiUZsMF{dVHLj^XG>Y>E8A0-sbKugKFCr zA=H}FPd$ZbZHg30MQch9xV-LrQRMo~rua&g;S%2`XtfyW_W>9?b&C13XZhu+Qvm$$ z!2`yorr1-8{$Mb4^H6JoR;!!?ii=h&4L})d>2^B&@zSNwH}BtfQ50pfK_0epF39_O zAy$Q`485;z&nxGEqMD2`*!)*Y0LJieZ;y*hOD`@hE&X$IbCX`LM=`UJf2b7OR^-~| zy+dHgrn;*lbSMd(bM&+P{o(aXm#+1?-OpB6SATV4VglzJf$uY-H2_-cQnZS4(^?Y- z0iuSBCGh>szEb}<N1CR@alB>oao<NNL~GWsUVXoP@uL3A8*luz7sqQiZroV(>vd#& zoY^4APHi@+70*B|2#^yenA7^vZs~cYy*P(8hBQs-bUKWVjopd&_p#PypJrYV;F?X= zS62SkUS8I3zxCETaU8FGbo1t-Jontt$uFEcN0O5=PzrhGnIG-bFPu9^KX(>I5gT8B zz4zVrcJ0pf>!c!iFHj0U3;|eQSy^c>FY9-&UVVFacX#dYJ3EUbBO~QV_1~|)DpgN_ z$*HLy9@`3g=SY%dYjSe(&Uf3}r-A=;yIoYHfqb#LdSGu1X}?d}>Cj$Yex2+)@wnGR z;Q4>Q_ufX(Y7I}_;(7RCh~I4TuPayH1pa)Cj_(1h!1JG9xw4^x07Updwg+U@m1h9U z0000bbVXQnWMOn=I%9HWVRU5xGB7bSEig7MGB8vzF*-0eIxsXVFfuwYF!ti6NdN!< zC3HntbYx+4WjbwdWNBu305UK!Gc7PSEiy1vF)=zYH##shD=;!TFffO|9`yhK02y>e uSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000<MNUMnLSTZpwhd$e diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/icons/save.png b/platforms/browser/www/lib/ckeditor/plugins/save/icons/save.png deleted file mode 100644 index 51b8f6ee11e7878b5c56836c1b40b689e7823a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<5N!;#}JFtQz!4wR&o?MZf_iUGgPowfP+ytmsxCOP)y<6-q!y? z@Ax;IuTMy?y&lcAvq+F-Z?mf6zZ<1t>EB`#%WS*3?=^?>oT<6@{r5fTMH+`J+dKY* zTRrbs#4)Fsq5lBO1ny!c8>{CIE(~gS^TJ(@#7qKG4V@hi7)z|?wkvQjNW};^3cRtJ zdyct)#YBpC&DNC2v}d0!kIjgQ6!g+;Qdn>|FL~|Kix$^DF>KOV9JF%5)@RS2wVh3K zo|c-<u-0^I6z^J7M}Y|{Cpi_Au4I``3EHmoX?N7xf5H2LUTwSnTJZQsPKF1+?V?`C zd#&{Uo4xj9?S6~u0-2@7eFqa7wwlT7?%cJ9Jv=<TVxIe~Wk=^SO<1N`DD(N>zjJxp zmBT+>jM;K6WOeAe_3J;{yqDQ<|GnX{58u8WE3xvm-&{~%|K5DIFJJp%!3n97o|7i1 zaLzuv>;~)7EAI|F{meg5w)^hY*I$#otoo9F{r&g-`t|TjCaeYxnOmc_MCmeYj?p_? zw9}*^&?|ARt!Bjf>pbm;<qKs_XPEq&6|Oba%k}E+-Mcrp-pbp)=KAaT*P{0PtvjEz z@yEA6e`2~8aV(v}5TZ5p&%v8s(@v+(Db|1d@ki>`C`XC5mc$b|X3j42^!@|{3;q;p zQ><rLdAh9D#r)MVU@A~8ag8WRNi0dVN-jzTQVd20hQ_)E=DG$ZA%^Bw2F5_7ZD3?& zVBouCH!y`DX~@k_$xN%nt-<Ce^AVs1NstY}`DrEPiAAXl<>lpinR(g8$%zH2dih1^ Uv)|cB0TnTLy85}Sb4q9e06jA>YXATM diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/af.js deleted file mode 100644 index aa5b37e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","af",{toolbar:"Bewaar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ar.js deleted file mode 100644 index eb09ee54..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ar",{toolbar:"حفظ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/bg.js deleted file mode 100644 index ecdf23c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bg",{toolbar:"Запис"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/bn.js deleted file mode 100644 index b4e2d6c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bn",{toolbar:"সংরক্ষন কর"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/bs.js deleted file mode 100644 index d94efe89..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","bs",{toolbar:"Snimi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ca.js deleted file mode 100644 index 8704f585..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ca",{toolbar:"Desa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/cs.js deleted file mode 100644 index e337b9e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","cs",{toolbar:"Uložit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/cy.js deleted file mode 100644 index 1f8eb814..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","cy",{toolbar:"Cadw"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/da.js deleted file mode 100644 index 1ff06c69..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","da",{toolbar:"Gem"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/de.js deleted file mode 100644 index 603359ba..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","de",{toolbar:"Speichern"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/el.js deleted file mode 100644 index 1aaf9ef2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","el",{toolbar:"Αποθήκευση"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-au.js deleted file mode 100644 index 0ace64e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-au",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-ca.js deleted file mode 100644 index 993a86e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-ca",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-gb.js deleted file mode 100644 index 19c382db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en-gb",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/en.js deleted file mode 100644 index 1ee67693..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","en",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/eo.js deleted file mode 100644 index dd7a1940..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","eo",{toolbar:"Konservi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/es.js deleted file mode 100644 index b07eea63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","es",{toolbar:"Guardar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/et.js deleted file mode 100644 index 5bfb76ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","et",{toolbar:"Salvestamine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/eu.js deleted file mode 100644 index fec1f853..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","eu",{toolbar:"Gorde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/fa.js deleted file mode 100644 index fb3f2a39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fa",{toolbar:"ذخیره"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/fi.js deleted file mode 100644 index 93d4db54..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fi",{toolbar:"Tallenna"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/fo.js deleted file mode 100644 index 4b452683..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fo",{toolbar:"Goym"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr-ca.js deleted file mode 100644 index eacb6ea5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fr-ca",{toolbar:"Sauvegarder"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr.js deleted file mode 100644 index 8df018d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","fr",{toolbar:"Enregistrer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/gl.js deleted file mode 100644 index 1bd43328..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","gl",{toolbar:"Gardar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/gu.js deleted file mode 100644 index 683842a8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","gu",{toolbar:"સેવ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/he.js deleted file mode 100644 index de52496b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","he",{toolbar:"שמירה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/hi.js deleted file mode 100644 index 36e3a750..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hi",{toolbar:"सेव"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/hr.js deleted file mode 100644 index cd0d6f42..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hr",{toolbar:"Snimi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/hu.js deleted file mode 100644 index e2de2005..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","hu",{toolbar:"Mentés"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/id.js deleted file mode 100644 index 7f1760b6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","id",{toolbar:"Simpan"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/is.js deleted file mode 100644 index 5f985898..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","is",{toolbar:"Vista"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/it.js deleted file mode 100644 index fdfe51a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","it",{toolbar:"Salva"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ja.js deleted file mode 100644 index 41801c4e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ja",{toolbar:"保存"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ka.js deleted file mode 100644 index d3d0456c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ka",{toolbar:"ჩაწერა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/km.js deleted file mode 100644 index 82f44957..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","km",{toolbar:"រក្សាទុក"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ko.js deleted file mode 100644 index f1a4191c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ko",{toolbar:"저장하기"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ku.js deleted file mode 100644 index 649a8cc1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ku",{toolbar:"پاشکەوتکردن"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/lt.js deleted file mode 100644 index ea89ceee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","lt",{toolbar:"Išsaugoti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/lv.js deleted file mode 100644 index 6d8c0c83..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","lv",{toolbar:"Saglabāt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/mk.js deleted file mode 100644 index 0405ba87..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","mk",{toolbar:"Save"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/mn.js deleted file mode 100644 index ed1d40aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","mn",{toolbar:"Хадгалах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ms.js deleted file mode 100644 index 8b557e7a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ms",{toolbar:"Simpan"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/nb.js deleted file mode 100644 index 0bce93de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","nb",{toolbar:"Lagre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/nl.js deleted file mode 100644 index 46110539..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","nl",{toolbar:"Opslaan"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/no.js deleted file mode 100644 index d58f02e4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","no",{toolbar:"Lagre"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/pl.js deleted file mode 100644 index 8214669e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pl",{toolbar:"Zapisz"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt-br.js deleted file mode 100644 index 64c537a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pt-br",{toolbar:"Salvar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt.js deleted file mode 100644 index a30393be..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","pt",{toolbar:"Guardar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ro.js deleted file mode 100644 index 05329bcd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ro",{toolbar:"Salvează"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ru.js deleted file mode 100644 index 9c755418..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ru",{toolbar:"Сохранить"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/si.js deleted file mode 100644 index 6305fe65..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","si",{toolbar:"ආරක්ෂා කරන්න"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sk.js deleted file mode 100644 index f3ea59bd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sk",{toolbar:"Uložiť"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sl.js deleted file mode 100644 index e8ff1758..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sl",{toolbar:"Shrani"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sq.js deleted file mode 100644 index 493dca31..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sq",{toolbar:"Ruaje"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr-latn.js deleted file mode 100644 index fe27f2b8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sr-latn",{toolbar:"Sačuvaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr.js deleted file mode 100644 index 3fa9e1ca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sr",{toolbar:"Сачувај"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/sv.js deleted file mode 100644 index a2e40dda..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","sv",{toolbar:"Spara"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/th.js deleted file mode 100644 index 8e1c28dd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","th",{toolbar:"บันทึก"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/tr.js deleted file mode 100644 index bb638ac3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","tr",{toolbar:"Kaydet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/tt.js deleted file mode 100644 index 757f3f71..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","tt",{toolbar:"Саклау"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/ug.js deleted file mode 100644 index 27dbe124..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","ug",{toolbar:"ساقلا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/uk.js deleted file mode 100644 index c1abf921..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","uk",{toolbar:"Зберегти"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/vi.js deleted file mode 100644 index 986883b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","vi",{toolbar:"Lưu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh-cn.js deleted file mode 100644 index a2de754d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","zh-cn",{toolbar:"保存"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh.js deleted file mode 100644 index 6e810611..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("save","zh",{toolbar:"儲存"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/save/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/save/plugin.js deleted file mode 100644 index 75f29058..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/save/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var b={readOnly:1,exec:function(a){if(a.fire("save")&&(a=a.element.$.form))try{a.submit()}catch(b){a.submit.click&&a.submit.click()}}};CKEDITOR.plugins.add("save",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"save",hidpi:!0,init:function(a){a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.addCommand("save", -b).modes={wysiwyg:!!a.element.$.form},a.ui.addButton&&a.ui.addButton("Save",{label:a.lang.save.toolbar,command:"save",toolbar:"document,10"}))}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/scayt/LICENSE.md b/platforms/browser/www/lib/ckeditor/plugins/scayt/LICENSE.md deleted file mode 100644 index 844ab4de..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/scayt/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor SCAYT Plugin** -Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/options.js b/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/options.js deleted file mode 100644 index aec9a1c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/options.js +++ /dev/null @@ -1,17 +0,0 @@ -CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='<p><img src="'+g.getLogo()+'" /></p><p>'+g.getLocal("version")+g.getVersion()+"</p><p>"+g.getLocal("text_copyrights")+"</p>",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", -id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e<this.getChild().length;e++)this.getChild()[e].setValue(a.getApplicationConfig()[this.getChild()[e].id])}}]}, -{id:"langs",label:g.getLocal("tab_languages"),elements:[{id:"leftLangColumn",type:"vbox",align:"left",widths:["100"],children:[{type:"html",id:"langBox",style:"overflow: hidden; white-space: normal;",html:'<form><div style="float:left;width:45%;margin-left:5px;" id="left-col-'+f.name+'"></div><div style="float:left;width:45%;margin-left:15px;" id="right-col-'+f.name+'"></div></form>',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), -elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox", -id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create"; -c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError", -c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog= -a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]}, -{type:"html",id:"dicInfo",html:'<div id="dic_info_editor1" style="margin:5px auto; width:95%;white-space:normal;">'+g.getLocal("text_descriptionDic")+"</div>"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'<div><div id="scayt_about_">'+k+"</div></div>"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+ -a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))}); -f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()): -e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, -onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""), -d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", -"scaytOptions").getChild(),b=0;b<e.length;b++)e[b].isChanged()&&(a[e[b].id]=e[b].getValue());i.isChanged()&&(a[i.id]=f.config.scayt_sLang=i.currentLang=i.newLang);return a},buildRadioInputs:function(a,e){var b=new CKEDITOR.dom.element("div");CKEDITOR.document.createElement("div");var d="scaytLang_"+e,c=CKEDITOR.dom.element.createFromHtml('<input id="'+d+'" type="radio" value="'+e+'" name="scayt_lang" />'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"}); -c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]? -c=1:a[1]<b[1]&&(c=-1);return c});d={};for(b=0;b<c.length;b++)d[c[b][0]]=c[b][1];c=Math.round(c.length/2);for(h in d)i++,this.buildRadioInputs(d[h],h).appendTo(i<=c?e:a)},getLangBoxes:function(){return this.getContentElement("langs","langBox").getElement()},contents:function(a,e){var b=[],d=e.config.scayt_uiTabs;if(d){for(var c in d)1==d[c]&&b.push(a[c]);b.push(a[a.length-1])}else return a;return b}(k,f)};return j}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css b/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css deleted file mode 100644 index ecabdac9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/scayt/dialogs/toolbar.css +++ /dev/null @@ -1,71 +0,0 @@ -a -{ - text-decoration:none; - padding: 2px 4px 4px 6px; - display : block; - border-width: 1px; - border-style: solid; - margin : 0px; -} - -a.cke_scayt_toogle:hover, -a.cke_scayt_toogle:focus, -a.cke_scayt_toogle:active -{ - border-color: #316ac5; - background-color: #dff1ff; - color : #000; - cursor: pointer; - margin : 0px; -} -a.cke_scayt_toogle { - color : #316ac5; - border-color: #fff; -} -.scayt_enabled a.cke_scayt_item { - color : #316ac5; - border-color: #fff; - margin : 0px; -} -.scayt_disabled a.cke_scayt_item { - color : gray; - border-color : #fff; -} -.scayt_enabled a.cke_scayt_item:hover, -.scayt_enabled a.cke_scayt_item:focus, -.scayt_enabled a.cke_scayt_item:active -{ - border-color: #316ac5; - background-color: #dff1ff; - color : #000; - cursor: pointer; -} -.scayt_disabled a.cke_scayt_item:hover, -.scayt_disabled a.cke_scayt_item:focus, -.scayt_disabled a.cke_scayt_item:active -{ - border-color: gray; - background-color: #dff1ff; - color : gray; - cursor: no-drop; -} -.cke_scayt_set_on, .cke_scayt_set_off -{ - display: none; -} -.scayt_enabled .cke_scayt_set_on -{ - display: none; -} -.scayt_disabled .cke_scayt_set_on -{ - display: inline; -} -.scayt_disabled .cke_scayt_set_off -{ - display: none; -} -.scayt_enabled .cke_scayt_set_off -{ - display: inline; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png b/platforms/browser/www/lib/ckeditor/plugins/selectall/icons/hidpi/selectall.png deleted file mode 100644 index c67f64ddebbb427841df12e95e00bddc3ed8affe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%InL9?F(l&f+v#WXZo3H_um7!>>8UN$vOvBqR^f%O(Sz+Lv{_zc zKgs2JGVRHn)&6zOhuRvWN`t?ID3&$4^eIdhIeGW3qmb^YO)figFEGhAFr2*k^vs{< z_Qu|YH8nXun;x|)gm&G#I@N2cQ=R8yhPs!L+=?m<0!)f5UYbjEem|Xa*pj_r%BOjC zlP#Waxc2Dpl|2zR);~9Q;%HJ>a5XEjN3+M`xyPiIj}<%)n{Vp8TrJ^0spVpZi_Gx{ zf4@YPIcU1BzWV6H2Z3asDF4vPd6QK*#l^)d-dkE&%*ea4YZ7ziJm!M3vSTW~8#h0n z#O%beWQs(x!Lbe7x4Z9+V^{DEW@~126qummnYmdYsdnGq^vP2WO$b`Fby?hcaXuY4 zX;;C&b@L5)wtG2>xbn0gZgN+hJ$2tFelJeO=Q2RsmSuj_^S!LppD1zZZ5emSswD{% znF}W+Ob@v5xwUwkn&+Veg9Tx$87HJheykI1sh4KD7Ip0L$GtN8(;q&4`t(}rjy~q^ zS(!6;ettD$@+ZUI6+%p2nuiRQTz~B=>TRjF>qgriefHo^=Fk-B!~ISNqJFQiy07wo zuARa217@ZBJXaMwxZix>zf8pO#>&<AOyZs=*B0K7f5+S{zjD(x%l4ow)5dU?4HKEK zS?1;EzbxH7)$jcB<;%4=nl9;dKAtgqw)7>P!&UvliyVrTna)`*S~~fH)z6=Qt6xPa ziwn$<_nP}%f#saUC!NFErO$yeB**^Xolp7acXQ8e>RBJRC!+Jn`}}(=Ucb(+tN6Jo zXy3WMz6-r>Un2u<-*nU|Sa>yy(Lkz~Yj2*Jw(`?74pBaf=Mw$L=ggl!{n_5H^8%+C zzWUzzSi;_W-lZtUiubw)^w-BLOYzp(SY6UPEw@HOk!4fZVlftl)SHbKeV&)M{P1Kf zIN;)C73g9z^Nwr6>6smuMN)abs{4m+sy)elWKGQ1q)tx76Pwm-xyJ3d%=BD!$l`<R z^Y6cUUtaE*&Hup9?@PYC-Gbi6_EY)2FDm)uMKnJidoXA5&AiX0%bV}qRn6JH{MFyu zZ&M%jpP#>TuFp0*bFTNbs@MK~c{TOlyPL+h&d-m&{PM%w%gcoxyn5_Dou|FW&+p3B z<^D@VXNL*KUu``Xb;ymmsUhD=c9x?<ahbos24m%S+nE3OKW%3T*d3H73Cw<~C9V-A zDTyViR>?)FK#IZ0z|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMb zFZUIwK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr074Mz A6#xJL diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/icons/selectall.png b/platforms/browser/www/lib/ckeditor/plugins/selectall/icons/selectall.png deleted file mode 100644 index 0d1e8160e422f8cc3615c2787a26fe0af53dcf06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<0elR#}JFtb0?qedgLI|dVcLGe#Z{!Rx|F_9}Ic5CGrlgn?A4} zX;4U0p3$}F+JBw2Ns`NNFPzDIw6)3V>)qnj85<)ij!9TNS5T^W|8Ot6U}MLJ?Q@C^ zjy?ETkzhAJ_<)4-Bo&X#B84)}*}R&n7SA~jZ!pg4T{<OW7Tfvf!VCfh=O!-GOxqk; ze)?g-ffS>I)@!e48yu^X5)gc3!N$PT?i`~huHxCWYSjc4PKjjM#;sz$mlv#Bbx!BQ zJ)nsU0!{}cn4inIExs7tbT;jCmcr5_FH4+eEi*Xg;MMv0XOBi#T+^0oP8=V-E~w2; zmE5=5pCz~8Z=L*{&)eDet7HiNpZaS%=OvT39Jl_4xqSI5@~=H%Yt%tY_V<6a9oJuP zo+1=Et+wj0YhVS#grG(1vOP2t*Z#F_wdbt++q#Z@t?AQBzjKybPD?PaHJxF|_Wif4 zYhc3eyGc7^wy9mY_WEnr!Gr}Z0zZEI2-tp`_wmPw$ZSClMFAGZSG(Rd1$ilUE$Zti z?%SlJ%y8pvnV?|l)IHy`_TP8E{4!)}s^rtkb$h-GCZB0f<XCIE=X;5b+`=hUGx-D` zvP*L)Cd<?aW&op9wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxNy85(ID7+Dz@ zDEB1fqiD#@PsvQH#H}Id;*HBd4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Rkpe1W@O1TaS?83{1ONfb43+=@ diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/af.js deleted file mode 100644 index 3d9b5cbb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","af",{toolbar:"Selekteer alles"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ar.js deleted file mode 100644 index 076b910c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ar",{toolbar:"تحديد الكل"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bg.js deleted file mode 100644 index 5e776748..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bg",{toolbar:"Избери всичко"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bn.js deleted file mode 100644 index 4c7aaab6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bn",{toolbar:"সব সিলেক্ট কর"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bs.js deleted file mode 100644 index 0deb72ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","bs",{toolbar:"Selektuj sve"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ca.js deleted file mode 100644 index a573f9ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ca",{toolbar:"Selecciona-ho tot"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cs.js deleted file mode 100644 index 76a56f6e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","cs",{toolbar:"Vybrat vše"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cy.js deleted file mode 100644 index e258fc79..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","cy",{toolbar:"Dewis Popeth"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/da.js deleted file mode 100644 index 978f67eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","da",{toolbar:"Vælg alt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/de.js deleted file mode 100644 index 2480c37b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","de",{toolbar:"Alles auswählen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/el.js deleted file mode 100644 index cd6289d4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","el",{toolbar:"Επιλογή όλων"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-au.js deleted file mode 100644 index 8aaa34a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-au",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-ca.js deleted file mode 100644 index 6cabe918..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-ca",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-gb.js deleted file mode 100644 index f60eec16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en-gb",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en.js deleted file mode 100644 index 02b4c755..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","en",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eo.js deleted file mode 100644 index 96f1f9a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","eo",{toolbar:"Elekti ĉion"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/es.js deleted file mode 100644 index 06ba9825..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","es",{toolbar:"Seleccionar Todo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/et.js deleted file mode 100644 index 57f14c9f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","et",{toolbar:"Kõige valimine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eu.js deleted file mode 100644 index 565c55fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","eu",{toolbar:"Hautatu dena"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fa.js deleted file mode 100644 index 60e13da7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fa",{toolbar:"گزینش همه"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fi.js deleted file mode 100644 index 321333df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fi",{toolbar:"Valitse kaikki"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fo.js deleted file mode 100644 index e622ef95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fo",{toolbar:"Markera alt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js deleted file mode 100644 index 01b42a4a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fr-ca",{toolbar:"Sélectionner tout"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr.js deleted file mode 100644 index c9f76af2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","fr",{toolbar:"Tout sélectionner"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gl.js deleted file mode 100644 index 358664fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","gl",{toolbar:"Seleccionar todo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gu.js deleted file mode 100644 index 706e9b66..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","gu",{toolbar:"બઘું પસંદ કરવું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/he.js deleted file mode 100644 index 2724c2f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","he",{toolbar:"בחירת הכל"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hi.js deleted file mode 100644 index ecbfee9b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hi",{toolbar:"सब सॅलॅक्ट करें"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hr.js deleted file mode 100644 index 6ab1881f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hr",{toolbar:"Odaberi sve"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hu.js deleted file mode 100644 index 974e4c97..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","hu",{toolbar:"Mindent kijelöl"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/id.js deleted file mode 100644 index e2100e09..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","id",{toolbar:"Pilih Semua"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/is.js deleted file mode 100644 index 6c3f1da8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","is",{toolbar:"Velja allt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/it.js deleted file mode 100644 index b7d1fef1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","it",{toolbar:"Seleziona tutto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ja.js deleted file mode 100644 index b1412bd8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ja",{toolbar:"すべて選択"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ka.js deleted file mode 100644 index 6cabf825..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ka",{toolbar:"ყველაფრის მონიშნვა"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/km.js deleted file mode 100644 index 66d61a0b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","km",{toolbar:"រើស​ទាំង​អស់"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ko.js deleted file mode 100644 index a2266087..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ko",{toolbar:"전체선택"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ku.js deleted file mode 100644 index 3ee967ee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ku",{toolbar:"دیاریکردنی هەمووی"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lt.js deleted file mode 100644 index 3cdae278..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","lt",{toolbar:"Pažymėti viską"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lv.js deleted file mode 100644 index c2b56418..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","lv",{toolbar:"Iezīmēt visu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mk.js deleted file mode 100644 index 5554a70e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","mk",{toolbar:"Select All"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mn.js deleted file mode 100644 index b4d8c5d7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","mn",{toolbar:"Бүгдийг нь сонгох"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ms.js deleted file mode 100644 index ffb407e2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ms",{toolbar:"Pilih Semua"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nb.js deleted file mode 100644 index 3ed5bb79..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","nb",{toolbar:"Merk alt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nl.js deleted file mode 100644 index 3e1f78d1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","nl",{toolbar:"Alles selecteren"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/no.js deleted file mode 100644 index 3891eb16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","no",{toolbar:"Merk alt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pl.js deleted file mode 100644 index 56401f6c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pl",{toolbar:"Zaznacz wszystko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt-br.js deleted file mode 100644 index 75ef18c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pt-br",{toolbar:"Selecionar Tudo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt.js deleted file mode 100644 index 4c40e123..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","pt",{toolbar:"Selecionar Tudo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ro.js deleted file mode 100644 index 0c6248dd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ro",{toolbar:"Selectează tot"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ru.js deleted file mode 100644 index f59e8f68..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ru",{toolbar:"Выделить все"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/si.js deleted file mode 100644 index 81a7dfe2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","si",{toolbar:"සියල්ලම "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sk.js deleted file mode 100644 index 7620a61b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sk",{toolbar:"Vybrať všetko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sl.js deleted file mode 100644 index c95244f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sl",{toolbar:"Izberi vse"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sq.js deleted file mode 100644 index 7641363b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sq",{toolbar:"Përzgjidh të Gjitha"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js deleted file mode 100644 index 5a138647..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sr-latn",{toolbar:"Označi sve"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr.js deleted file mode 100644 index 8f9a8b79..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sr",{toolbar:"Означи све"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sv.js deleted file mode 100644 index ef0fdc2b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","sv",{toolbar:"Markera allt"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/th.js deleted file mode 100644 index 04e0757c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","th",{toolbar:"เลือกทั้งหมด"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tr.js deleted file mode 100644 index 296f3d78..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","tr",{toolbar:"Tümünü Seç"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tt.js deleted file mode 100644 index c1ff772b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","tt",{toolbar:"Барысын сайлау"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ug.js deleted file mode 100644 index a9a57e95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","ug",{toolbar:"ھەممىنى تاللا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/uk.js deleted file mode 100644 index debd35bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","uk",{toolbar:"Виділити все"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/vi.js deleted file mode 100644 index 4a364aaa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","vi",{toolbar:"Chọn tất cả"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js deleted file mode 100644 index 905c2db4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","zh-cn",{toolbar:"全选"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh.js deleted file mode 100644 index 6d2db4e9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("selectall","zh",{toolbar:"全選"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/selectall/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/selectall/plugin.js deleted file mode 100644 index e5ca1512..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/selectall/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("selectall",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"selectall",hidpi:!0,init:function(b){b.addCommand("selectAll",{modes:{wysiwyg:1,source:1},exec:function(a){var b=a.editable();if(b.is("textarea"))a=b.$,CKEDITOR.env.ie?a.createTextRange().execCommand("SelectAll"):(a.selectionStart= -0,a.selectionEnd=a.value.length),a.focus();else{if(b.is("body"))a.document.$.execCommand("SelectAll",!1,null);else{var c=a.createRange();c.selectNodeContents(b);c.select()}a.forceNextSelectionCheck();a.selectionChange()}},canUndo:!1});b.ui.addButton&&b.ui.addButton("SelectAll",{label:b.lang.selectall.toolbar,command:"selectAll",toolbar:"selection,10"})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sharedspace/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/sharedspace/plugin.js deleted file mode 100644 index 66cd775f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sharedspace/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function f(a,b,c){var e=CKEDITOR.document.getById(c),d;if(e&&(c=a.fire("uiSpace",{space:b,html:""}).html))a.on("uiSpace",function(a){a.data.space==b&&a.cancel()},null,null,1),d=e.append(CKEDITOR.dom.element.createFromHtml(g.output({id:a.id,name:a.name,langDir:a.lang.dir,langCode:a.langCode,space:b,spaceId:a.ui.spaceId(b),content:c}))),e.getCustomData("cke_hasshared")?d.hide():e.setCustomData("cke_hasshared",1),d.unselectable(),d.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a", -1)||a.preventDefault()}),a.focusManager.add(d,1),a.on("focus",function(){for(var a=0,b,c=e.getChildren();b=c.getItem(a);a++)b.type==CKEDITOR.NODE_ELEMENT&&(!b.equals(d)&&b.hasClass("cke_shared"))&&b.hide();d.show()}),a.on("destroy",function(){d.remove()})}var g=CKEDITOR.addTemplate("sharedcontainer",'<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko?" ":"")+'" lang="{langCode}" role="presentation"><div class="cke_inner"><div id="{spaceId}" class="cke_{space}" role="presentation">{content}</div></div></div>'); -CKEDITOR.plugins.add("sharedspace",{init:function(a){a.on("loaded",function(){var b=a.config.sharedSpaces;if(b)for(var c in b)f(a,c,b[c])},null,null,9)}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png deleted file mode 100644 index c88abcb6dbe1362cb3be93c109f0f3ecd9fd9a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1853 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png deleted file mode 100644 index a776fcc139f14c017dff59998bf3d9b3d5ca9832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks-rtl.png deleted file mode 100644 index cd87d3e258e38e656379acb146f4c8744906752c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;~7sE#}JFtwUd1FlpJ|l?Zd;p73!o^^d@qj>0&*t^W39=flq*M zLXJB35|4>D(mNL&=!#L$5_567%d$P)F`U~YO~-ccq*y)s-8%B}@?U<}PEuh!aOTGQ z?<=&@!hX9vX*%0ubN=D$*W3vldqO0_Iv+p&$YG$@^{8p}oI(!9=X=>_tP9hQT^q*b zvwGFE=ay+{yYIeh>RxnUl~!En%db`Y^YZfQn0eTm?HQDmZoi!-aL6U}=bt}w7~XvU z?YaE&!n=9i9E{6XZMmHr@^z!m>EmImMSpL*@!Is%rZu7##*Ygu9?WredE_%;vZB(Q z=r5k41xikl(@Gse^+k>>Defy|VE^jR5a25(I8nv(!@YXvrC|(zDnlPQInH}-@jR<F zt*w~vy=_|B?YG}{H+_~gk>cHT_npOQqfI)}>5*>RZ_Ap`K3nDXm1oh>;x`}b-|V&j z`ex4R{cCRK9J4O8e#^dx;qc>+6+r>H$_$yajy*2f8@GC<==F&8*SUNqt61s=&03bP zRHUu6{oe2GKd$AN&1T-4edq4ovyCC4iY*5|fBww;foqSRST}p<)0Zz_%0>KJ-1@Y} zZa=@`fwavB&$y*+TVqgFUvK~YseM9b+TycmhvN<1`X{_fS-%(<*{UV35hW>!C8<`) zMX5lF!N|bSSl7T@*T5vi(A>(v7>KkDjI0a{e3$G7CIlo6x%nxXX_dG&*!*NZ0@NT0 uvLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWA_h-aKbLh*2~7Z2s30u> diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/icons/showblocks.png deleted file mode 100644 index 41b5f3466d295c381a785f9a68c65a1f2f45576a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<26qg#}JFtt&=zUJ$4XrJ>PR&Nb#WG#Q7)qb6g!gcg~+u<6y^N z$8hVeQjm&D)hUjNA)cP;6CAh<zkR-|v~BW+HQzkLugjgUe!tH;`TL(gXHK5vJZCwl z*uyG`;kitpNMTjgt#vac*RNkcAyx9g3JtD?z<JNzW2UJd@DMs+`61x(9t|#=29>9k zeJXqR?v?#mw%fJT%pg)nY+Hm5&x{rUj;$`=KYenVmYQt*`0w9Zo((s1j-{ukf2p!n z?>w0BA=yIaAIppHzxSWX33r&ZNyk~}ciNWsy-j)By+cFyt6qHl)nM~ojy&<Tj=m<@ z>;46Zu%5Hr^S!37PAT*K!Ng07@>&L)w`GKe?oR4udT*=PvR}Y8aP<N^K`GM%_nQ0r z`4?$qX?q{4_Ln*C&NVCJ%8#^Te#@OFsVp|}^}Jj%Wtpbuq@Gva&-ixB+5Hx9y8W;| zCNwm9LEx=3SMM0qHnTs75t{4ge)eM3`_O5sc3nyhCyREPc>WC6neNT3#!x7;oy&>C znm;S~(dyN!H81?{dj0yfroeSi|8qONpWjK9Iqsjf?f1-OmtXQ4{6Eg|`DRX8a@w8y z_wO_HA9#HC?%mvJsT-o!PAE~#)XV(M`)rclwbx%C?%TPf`)bxv`9Ohk3#limi-6It zTH+c}l9E`GYL#4+3Zxi}3=EBR4a{{7OhOFJtqhETNZY{3%D}*P$!=hhK+=$#pOTqY ziCcrsPv#>)4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kpe1W@O1TaS?83{ F1OVJ@CKLbw diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_address.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_address.png deleted file mode 100644 index 5abdae127953d052a36ca481023730baf8e10461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^IzY_N$P6Tx7VW<Uq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMIndrud~5RU7~KlqvCB?4CNuN7<8ZM?GWcHwn9gFm;vTD`OGs4A4v z_>p{l_3!U?1~ulpOZhdv&pm(ZrckW485hHzLf=y^Oa(`QMlpE0`njxgN@xNAlu9>b diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_blockquote.png deleted file mode 100644 index a8f497353cc5abb02cb78b7eba55772e1f5db540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?p$P6U=5BZe>DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11})Y(bL5-gyVYh4}L~=2?I&_?;_8ie6x^G__3`z_sgwKzZH&EWg9$J zo>3^H!!)^R)z2HjbAs=bOXQrh-_iK(#@Yr$22;7jhW_~%%z%b5c)I$ztaD0e0sySo BH~atq diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_div.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_div.png deleted file mode 100644 index 87b3c17146e79e8dcced15939f24a0f16ad50c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g$P6S6r-*3)DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?&C|s(gyVYhkN^MKnR)8>#2x&=+p)i$x$p|V!M`$YjXLp#Y@Eyt Y)8}f)Oi$*s1L|P#boFyt=akR{0Dd1P761SM diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h1.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h1.png deleted file mode 100644 index 3933325c08f3f4eacec46c97600f7cba01ead54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA;PZ!4!j_b)k{_k&OY}>z={n2NEUx%wT<XifcuP7ukc%-SMS-AdN Q2UN=7>FVdQ&MBb@0O>s@^8f$< diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h2.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h2.png deleted file mode 100644 index c99894c2650ae1745e0e4156d775fe84d00efff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA4PZ!4!j_b)k{_k&OY}-GV{n1;8KYJS=G7HpK^B?)%xI=a!8z(b^ X<u&DZ{25UKKphO8u6{1-oD!M<Atou6 diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h3.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h3.png deleted file mode 100644 index cb73d679eb840b9728569b27d8b1933af47aa689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9<PZ!4!j_b)k{_k&OY}-GV{n1;8KYJS=9<JozeKy~Hh2tRx^J&WO U_J-v4097-1y85}Sb4q9e0HQJ~U;qFB diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h4.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h4.png deleted file mode 100644 index 7af6bb4984d8448881d5461a33db46165416381d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V$P6Sed+-JVDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$<xI#gyVYhkN^J}n0e}}`Hoyy{BgKU;V#dS`-&2gvLeh3i~Q6V U{nM`54OGqG>FVdQ&MBb@02`Vnr2qf` diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h5.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h5.png deleted file mode 100644 index ce5bec16cfa84d461672f8b0721911d90a06e445..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsAaPZ!4!j_b)k{_k&OY}>z;`D2~JyZnS78)QA|*^>ln<rcDWGBZeq WDeL7Kzjp&_VDNPHb6Mw<&;$UjttQd{ diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h6.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_h6.png deleted file mode 100644 index e67b982985ca30ae46dae8049c0f99a35dfc2930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA$P6Sc>bHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9<PZ!4!j_b)k{_k&OY}-GV{n1;8J^LFUI@?d#E34GEhOdiJ-c8wT T>#|GfK-CPMu6{1-oD!M<c8e&f diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_p.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_p.png deleted file mode 100644 index 63a582024687b942afac422016a0ac37e3e9d827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm`3?y0KUN-?!YymzYt_=+h|NsAgeyw*6P=u)@ z$S?Rm!_(~sUO=9dr;B3<$MxhN|C<?`?EWPDh+}k8VB`7g?#NJdT*jnn@n&V9Dh5wi KKbLh*2~7a>|04nb diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_pre.png b/platforms/browser/www/lib/ckeditor/plugins/showblocks/images/block_pre.png deleted file mode 100644 index 955a8689a13a394a9e715673d23750a6847eb617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^VnEE#$P6TJEnce)q}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMInbx#+^5RU7~KmPycXXdGYvoZ0<wy*pW^>0=t{@C}8pCx}|qC*(_ aQHD7O)qh-UDHQ^0VeoYIb6Mw<&;$Unq%6+> diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/af.js deleted file mode 100644 index f54ef175..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","af",{toolbar:"Toon blokke"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ar.js deleted file mode 100644 index a3b135a9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ar",{toolbar:"مخطط تفصيلي"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bg.js deleted file mode 100644 index ec8b4f9c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bg",{toolbar:"Показва блокове"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bn.js deleted file mode 100644 index 8f38cf2c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bn",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bs.js deleted file mode 100644 index 91d8620a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","bs",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ca.js deleted file mode 100644 index 4a23bd67..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ca",{toolbar:"Mostra els blocs"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cs.js deleted file mode 100644 index e935394c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","cs",{toolbar:"Ukázat bloky"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cy.js deleted file mode 100644 index 4fea60e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","cy",{toolbar:"Dangos Blociau"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/da.js deleted file mode 100644 index 1c077f17..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","da",{toolbar:"Vis afsnitsmærker"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/de.js deleted file mode 100644 index 730add99..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","de",{toolbar:"Blöcke anzeigen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/el.js deleted file mode 100644 index 67fc843d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","el",{toolbar:"Προβολή Τμημάτων"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-au.js deleted file mode 100644 index 02fd8d37..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-au",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js deleted file mode 100644 index 2ddff41c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-ca",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js deleted file mode 100644 index 6398feaa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en-gb",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en.js deleted file mode 100644 index 2457fa4b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","en",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eo.js deleted file mode 100644 index 42775ae7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","eo",{toolbar:"Montri la blokojn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/es.js deleted file mode 100644 index eae41486..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","es",{toolbar:"Mostrar bloques"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/et.js deleted file mode 100644 index 18f1c0d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","et",{toolbar:"Blokkide näitamine"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eu.js deleted file mode 100644 index 0efa1bea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","eu",{toolbar:"Blokeak erakutsi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fa.js deleted file mode 100644 index e290b63d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fa",{toolbar:"نمایش بلوک‌ها"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fi.js deleted file mode 100644 index a2e20e26..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fi",{toolbar:"Näytä elementit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fo.js deleted file mode 100644 index cea7058d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fo",{toolbar:"Vís blokkar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js deleted file mode 100644 index be37ca35..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fr-ca",{toolbar:"Afficher les blocs"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr.js deleted file mode 100644 index 49bf9394..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","fr",{toolbar:"Afficher les blocs"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gl.js deleted file mode 100644 index b9f240c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","gl",{toolbar:"Amosar os bloques"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gu.js deleted file mode 100644 index a8e7fd6c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","gu",{toolbar:"બ્લૉક બતાવવું"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/he.js deleted file mode 100644 index 7d128462..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","he",{toolbar:"הצגת בלוקים"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hi.js deleted file mode 100644 index 68904f2d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hi",{toolbar:"ब्लॉक दिखायें"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hr.js deleted file mode 100644 index d6af592d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hr",{toolbar:"Prikaži blokove"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hu.js deleted file mode 100644 index cda541b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","hu",{toolbar:"Blokkok megjelenítése"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/id.js deleted file mode 100644 index 96c293cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","id",{toolbar:"Perlihatkan Blok"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/is.js deleted file mode 100644 index 88a3ff5a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","is",{toolbar:"Sýna blokkir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/it.js deleted file mode 100644 index 38e578fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","it",{toolbar:"Visualizza Blocchi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ja.js deleted file mode 100644 index a9c9736a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ja",{toolbar:"ブロック表示"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ka.js deleted file mode 100644 index 908e8002..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ka",{toolbar:"არეების ჩვენება"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/km.js deleted file mode 100644 index d6ca8298..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","km",{toolbar:"បង្ហាញ​ប្លក់"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ko.js deleted file mode 100644 index 67187345..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ko",{toolbar:"블록 보기"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ku.js deleted file mode 100644 index 2a3a1282..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ku",{toolbar:"نیشاندانی بەربەستەکان"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lt.js deleted file mode 100644 index 66368a41..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","lt",{toolbar:"Rodyti blokus"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lv.js deleted file mode 100644 index 12c328c1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","lv",{toolbar:"Parādīt blokus"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mk.js deleted file mode 100644 index a34e8a23..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","mk",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mn.js deleted file mode 100644 index 778ad5d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","mn",{toolbar:"Хавтангуудыг харуулах"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ms.js deleted file mode 100644 index c6ab5f2d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ms",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nb.js deleted file mode 100644 index 8bfdf0e1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","nb",{toolbar:"Vis blokker"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nl.js deleted file mode 100644 index 22190dbd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","nl",{toolbar:"Toon blokken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/no.js deleted file mode 100644 index 75702788..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","no",{toolbar:"Vis blokker"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pl.js deleted file mode 100644 index 3168b3c5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pl",{toolbar:"Pokaż bloki"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js deleted file mode 100644 index 3ac0ef74..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pt-br",{toolbar:"Mostrar blocos de código"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt.js deleted file mode 100644 index 5afaf8e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","pt",{toolbar:"Exibir blocos"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ro.js deleted file mode 100644 index e4dadf0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ro",{toolbar:"Arată blocurile"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ru.js deleted file mode 100644 index 9620b9d3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ru",{toolbar:"Отображать блоки"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/si.js deleted file mode 100644 index f67dff30..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","si",{toolbar:"කොටස පෙන්නන්න"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sk.js deleted file mode 100644 index dee77c9a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sk",{toolbar:"Ukázať bloky"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sl.js deleted file mode 100644 index 52fca0bb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sl",{toolbar:"Prikaži ograde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sq.js deleted file mode 100644 index 88405f28..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sq",{toolbar:"Shfaq Blloqet"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js deleted file mode 100644 index 3c1551b9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sr-latn",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr.js deleted file mode 100644 index 127878d5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sr",{toolbar:"Show Blocks"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sv.js deleted file mode 100644 index a05b6ccb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","sv",{toolbar:"Visa block"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/th.js deleted file mode 100644 index 9b3951cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","th",{toolbar:"แสดงบล็อคข้อมูล"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tr.js deleted file mode 100644 index 060da3aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","tr",{toolbar:"Blokları Göster"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tt.js deleted file mode 100644 index 519e6f7b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","tt",{toolbar:"Блокларны күрсәтү"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ug.js deleted file mode 100644 index c44b6605..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","ug",{toolbar:"بۆلەكنى كۆرسەت"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/uk.js deleted file mode 100644 index ca9f51c4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","uk",{toolbar:"Показувати блоки"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/vi.js deleted file mode 100644 index 43566240..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","vi",{toolbar:"Hiển thị các khối"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js deleted file mode 100644 index abee734d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","zh-cn",{toolbar:"显示区块"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh.js deleted file mode 100644 index 84c1e7eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("showblocks","zh",{toolbar:"顯示區塊"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/showblocks/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/showblocks/plugin.js deleted file mode 100644 index 48060bcb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/showblocks/plugin.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){var i={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state==CKEDITOR.TRISTATE_ON&&(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE||a.focusManager.hasFocus)?"attachClass":"removeClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn", -icons:"showblocks,showblocks-rtl",hidpi:!0,onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),c,b,e,f,i=CKEDITOR.getUrl(this.path),j=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),g=j?":not([contenteditable=false]):not(.cke_show_blocks_off)":"",d,h;for(c=b=e=f="";d=a.pop();)h=a.length?",":"",c+=".cke_show_blocks "+d+g+h,e+=".cke_show_blocks.cke_contents_ltr "+d+g+h,f+=".cke_show_blocks.cke_contents_rtl "+d+g+h,b+=".cke_show_blocks "+d+g+"{background-image:url("+CKEDITOR.getUrl(i+ -"images/block_"+d+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(b,e+"{background-position:top left;padding-left:8px}",f+"{background-position:top right;padding-right:8px}"));j||CKEDITOR.addCss(".cke_show_blocks [contenteditable=false],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable=false],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable=false],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")}, -init:function(a){function c(){b.refresh(a)}if(!a.blockless){var b=a.addCommand("showblocks",i);b.canUndo=!1;a.config.startupOutlineBlocks&&b.setState(CKEDITOR.TRISTATE_ON);a.ui.addButton&&a.ui.addButton("ShowBlocks",{label:a.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(a.on("focus",c),a.on("blur",c));a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&& -b.refresh(a)})}}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js deleted file mode 100644 index b202d3ee..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/dialogs/smiley.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,i,k=function(j){var c=j.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);i.hide();j.data.preventDefault()},n=CKEDITOR.tools.addFunction(function(a,c){var a= -new CKEDITOR.dom.event(a),c=new CKEDITOR.dom.element(c),b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:if(b=c.getParent().getParent().getNext())(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:k({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0); -else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['<div><span id="'+d+'" class="cke_voice_label">'+a.options+"</span>",'<table role="listbox" aria-labelledby="'+d+'" style="width:100%;height:100%;border-collapse:separate;" cellspacing="2" cellpadding="2"', -CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':"","><tbody>"],l=h.length,a=0;a<l;a++){0===a%g&&d.push('<tr role="presentation">');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('<td class="cke_dark_background cke_centered" style="vertical-align: middle;" role="presentation"><a href="javascript:void(0)" role="option"',' aria-posinset="'+(a+1)+'"',' aria-setsize="'+l+'"',' aria-labelledby="'+m+'"',' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', -n,', event, this );">','<img class="cke_hand" title="',e.smiley_descriptions[a],'" cke_src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'" alt="',e.smiley_descriptions[a],'"',' src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":"",'><span id="'+m+'" class="cke_voice_label">'+e.smiley_descriptions[a]+"</span></a>","</td>");a%g==g-1&&d.push("</tr>")}if(a<g-1){for(;a<g-1;a++)d.push("<td></td>");d.push("</tr>")}d.push("</tbody></table></div>"); -e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/icons/hidpi/smiley.png deleted file mode 100644 index bad62eed46816b7754cdf8aada26635a638438b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3073 zcmZ{mXHXN$7RQrF73pw+(4<8I0YZ~1Xrv?oB1SGq6$FHU^dMan(ZEQN2dG5phI$E2 z@e-scASj&(5kk9iDG~|2hVtUa_u<XX+5gU&^Z%XMo!OmDwZ~ZVp9P-<008_bqy?6( z=YIze7kiF~jooGo*KHeX3&82`QPf(V&Cc+KBAp}H4%+VkB2-^R0|0zrl*JW?o1N(| z;zIu%Ywa-)G#@lGS^D?&2Mhwq!wY`KB?1B>I@Gl4Ic)Pz!ak1PtJ>2UrPm8=5|;b( zXYO^;rDT#_9%&3q73<fRI_L&OyLG3e6nSFT)sj*}0}<!{HSLXIwvHdq%Tzdhi%ZmP zpJ?3kXl$E3XdRDArOL|2zv5LGPQFaj)3a;YVD3b($Fu^{RI-(+xHni;(lhK2bj<uQ zy?_6rr#ltSe}+D<@azR4$l0IBMdWHq_Ycqkeq*iqA(bzq-{dG`p(PuJsd!@A{2clq z-6AanWDuDjUzlkRPm$xXe;ZEHo}5iI8RnW2NaIETZXa&<bx3s3JNh2$>xbN0T?wD^ z&*{tJsjt`8A+z2ocRAfSpWHDVdG_c&y01@|pC7#LJ?BJPSP&Pju2O};y5Q$vncNQ? zjML{0(=swP4<7TK6BIa+-8Yys8l$TdxVd?6wLIC<S5B+t+&fU!P`|3DXZsOeP#Djs z;oqT_W!XZ!i|tjlYe_0_zumhbSFb(-Ew8SM_gs68Y>V6We+v_9X!QuOoc&2{87wf_ zEAschS&GR&<RI~6rcYb^u;K^?6&gk4dC`ZoTpN@t-Z)e{)`XuNoUq!74HisX;=%l& zd&}zt)~*zS+I4c3pomedx5_tdPTU_Qy+Wq2Pv0P1ZkyFOm!59JhbVRm3BipdG_5ix zTV015gE-@PWH`-w4-yyP<)Fs!8Bl-91(6>oEM`QH2=DP~srB^wLSN0wx5`JIFEoXl z@2y(d{YFX}t%uF`D1pHNTTh>6YP8K~d^*t32%qm1Jd^y8zo+SL3}!1@2(dmEF7hns zBc8aJE}aN6<rTXdvx%B9igjQOy`KT6r>E&v&&*sSwCyJ$$&jwRLCoDuLRHv2d~raO z64Xv_ia(H{H%+woWpa3M%Pq$(=C#LxfcQ-AO0i%v4T!hv8{}08rQ$|MRCml-&YX2; z_Gc#LkC8UYA|H+>1AC?|ZWnAZTUI^|3#H=08ymMy5MKAqNMmCu^k7!`+PkI`qg>m7 zT6`p`Fv$E~Q|qxg`g6Kcdz}!q!5#sBZmR=+s{Py+G`AHC?H}q{+EL6=%ti}K%PxE! z7Rsj8Ci=j#qK^u4)%E)rxwY+wE8v}t9<6hN=iuO{AIr7ckej{20PWyU$&Gt&-&M}8 zP5o3O2|!875p#eJnYoxE`F#~3^!9e>{aLfYHM(_4Ibq6n-#2(*t3zg~1DJzFKqHs; zOrj{i-C?4T*PIq?pjpC(rQzwQO@((4fauut?#sBidJa~tB&SM>`HQ1&GwGwv(=|$; zd*i(tlR&1M#P`a>LrEs{&fhK4V>Ir%i1DdrCh=Y1ba&MB!r@sy0x<CJMp2SOI#z9p za{IB%#5m+3B=VQ!(ydrtJK$&}a8l1*LbSSCe7!esclZ7+IM4dAc;5>G#L+RpgZgcS zvC`GQxEN=dkZ`3fC_99na(I}OH!!d_P8;K`#RZ6}tG^p>S<?hg#(zBTH%Vtbv}40^ z%NU^jHoUu75tI}vL)e_09KQ+stdV`e`hn~xhDz2K&p*U0l(JHI2%Q$C*U1@aDVw9% z2lci(D2OY!_X3IJCMzX8;-3?0Xsah8ydOW}19{Xd=VB6^XKEz!v|F{d#+_*>fQIS; zoX}s<HWwh-sIqTk`9EhHt&16HPdeXNTicKrReTa!I);YG(+)sQO-&hA4Q^`MzrGGf zS6&Vbte!B3cg)S5m(cX+igYKD-PK#b0*}blcE3y_)+q{-XNz@oG2V#f#-X7(Id7;x zJwJ!}yT7flehER-Qp>Rb_6szvAwN@hWt>K<&KSfr-=C%cJ@x*`6n)wQw4&9z8Vrw2 zKp70iSf}*G-ZRtFBKxkUxrm>}pY(8S&V_kHHniw#{xfhh@V4`FA>!vHC-QbIjL(jC zoieyl<9ZErsoJU5admYyd?g1e@;&x8>mJlpF1e>Ob(OAC7s*aGw6?mFJz8CWmwMg@ zU#i5*+R-*{{!w_Vc~o7GzptTd=lWk+qC&pDzBiwDr+v1XUfU{`=Az(A=odR~7m4rd zhtfBK=mpwaTO*g`*tbsCyl|f0bm`30b64tF*m#gh3&Cq{@8IRg_X^kNmd?&nShW4w ztH2C~2uw9p^q;yr%ZGRAO{aI$(z8Y)VeN(23gR%%#HQJ>>0>DLi@F*@k_$lvz*{}e zb<Xw6pGMCpb+x~Gas`cswaXVXBq<p|bV-Vtt7uYE5{ULC@}UArITt<h{k!4e=0qdO zw|E#tUFyu}Mw$o^y@bwksJb-$a@_gIy@aKah2^A`va&rdJC@`@IL+ie+T};S=^d<` z9Q$cmmm*1Z8hq5HQka;_Gfa79h(Av`7WyW~ABz^*Fx(?MZ#l!j-J?5|CCwACZPvz1 z2!-tJN3XEyC+?)|WteP!4G5?p|K)?V<jhu6`@M3r<KNAXinX{wy)!3HXIRoAP0LWl zvzaeVXm9Ze0Wh%ds$gQYnQ*2Oso&~+7J4JUq=Z~jQnKivlV=TS{Nn0%RDD?o1(Umw zhlFpn%qFb059P<jNBb{d*NzM@SmzA|B7s*tjq3v3e0@ifCnwES=EL+9dWZTtUER)Q zY*iHFVopjFA!6c@2|2ck8tT<4ukT(v*-4!}TBI>(HPo-wRdV9gveptz!I8ZHzi_(6 z{#?!bMg8}0-89vqyd-R;ypIgQ7Lv_hTIMCm71LxFrm8o(^;tSX>%%&z?I<3NQ0RJ# z(^adgHek1|Uwz-6+i^=4Is)LgJJVTI+j?C3e4_E%pN@`ID__x>!St4$$9w~${}I`~ zOOBE^iGAy{wK&k9cge&J>ma79$6wo1inc+MHT`i?lWhqtzhbrq6g^*%#YieD%X|_< zqVH-I*nH-Okylbcfj-0GRvgP((#p}jkhxqGvgU!g#DbwKNoc6w<o3@1EALW{f^iV= zhOAi{R;?mu#U5>RN;pM9#T^KOrJNwhI{r9KDx6)awwL&`(yx&88xe)~5zqRMh(YeB zbgR6Bxkt4LhZBB%Ob?0!lJxCzVxm@PVeC@AptYu3QS{D=We2uMVd<<P=W7mu3_M;2 zO0Gim7n+~>?(TkrTEweB5tMUymkn7pZ%$x^UlO|f9+q6@8+h3tOvL@T<GXt;@Pb|J z+76S+tM2qyX!{K(TIhYxxtA}^6Ll#k$yHUcN}}m)3K5M*6ddu16pwwwy_!^pS-?U3 ztKdrVMcJOP77As15|yn9GVh+hqB|h1`|lGqN9>O>>YGnqi$^~sbRQZ3XOlSjrqrFt zFaPm(a0koCaLo)IM0$OF!GRMUcJR1<9lXx6M4?cNy;(}ea4wi>TM!*pT?Ck(Z_ew8 z6v61Aj77W#uL|k|SP!Zm5d>0q1WlhI{dAgyKs}LRGKA>e^NLzpf}L<UUX~<QhJ)Pu z_1#O$y}@F^C30+|ykKRA<B_Dt8vpt$9)K#X8%07|D)uKV7h~rHn<p@*9S;ttsn-aC zvc}3*R#vu9lDWi5V0U+So{G)$ip1lCA-;gBYRljjr-z9#YnA0sYCMHH8-yq)?PJ@t z>5N<kd#^qsyszuEi3Y(RM59432Tq4DfL9qo6XD<258y#2(z~?}5|th@e*WztficDC z$lUqpooNSR{v-c_x;eFZ<s{4~VWD?EGjUNvwWGJMC2LKKaNM_R?o#|`pjfkvFZ=7P zg15Yh_wmB}8heNPvIU?6*Vfg5U)0cnJ7{Yg!wrn#dg^c;V>o>GM;YpW3_&42xH~cb z-#}=W+hH4|es{PLat9yf748d&ii*<21qViWdxiRHhJ^dQVw!^4MF5l~#)6FSO!_Y< C>)n3< diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/icons/smiley.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/icons/smiley.png deleted file mode 100644 index 9fafa28a81a520e1662cb1662f19af8b64ae1e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(^^j##}JFtwUhUE3unq4v(Gom6neg?C6g&r#ruZVqVfrQuO<a@ zb1Sy`ZrHfdtJJq^a`vUjywaB6+&ax1*Ox>x-@2jU!fq7&#?hwqbGG`<y_}P0KIc+z zk15o*Is5tP&zkxJ*){i%OEjlO-q?2b-aWbh->02cU46CdZCSU9PBPEVn7*Wq9l5t9 zlJ_y!G4(abU%DgxK(s(f^F-R_n3xy=S3$|soA&YEXLUQ9_W59e#Tt)Oo~L-*4|{FC zS;NrNV_2Shds&1|Ql!|K=fx_Fci5Jle)=iqQs)xuNnR`8d00j2O@DqsWQT6&&l<i$ z8Ri=YmMd`Bd09<4QnowQY_{R-v;XdfUrH2Uk#DqTwC+nTySw{tp813lmOISn8kT2r zJji@?cXG*<w`I%=v|nm3h+4bv{rBJcDuG&4{iJ)_WR7<>$V@1fQO`1w(wgeEe9{Y` z<f^N$sy$O4S)^@@h*^96^?4OT2_C)EPd8QVjoUMO!S&ZipB6<nAAArb^tI~m&7_Sx zq>dZ91iGvZyIp2AH+%M3HqYy-fAwB|EU`+pnyd7(@Kx;n9J3Oj)Yhn6X;;CPM32>1 zca_LIpQtiPg>lEG*Z<DSu2b=BQjs}cc_nMB-eCh3;WovoUPrg<yjE;5WP5N$;`3(1 zXBQ+s?=^fT{vb8#@TN8GKxzKN0&0^vC(V2E`KM@sPAAYU3!~P~V^sX`{olWT@~^+% z@>RDy_x!WAr$12HkA3}1{$!X~F`o-Q!RvWmwbt`%%q89j5*G5kZt0Ug?R($+ywduF z@AcC31L+UUAJ_%>mD+!`+r7?ua>?cIwKnH}b4m0cw?3ik8MpgxUATtGJtppiKp?g4 z_S^DFHlEvS?x)+xJ+72f<DI0!StwInP!Pay>p=hipS|lF<72P?)t-HJ(#aHqV;}e* z7hm<A7PsOAFg2@|xJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4HZZa>Fz{Wn z8<^6OH00)|WTsW()?o9K`3O*hB*=!~{Irtt#G+J&^73-M%)IR4<ivthz5Jr|+3#$m QfQlGAUHx3vIVCg!0FHZ-4gdfE diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.gif deleted file mode 100644 index 21f81a2fab5b772bf1dcef0fe0a5f1965a08927d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 zcmeH`{ZrBh9Du(lA_^p;f{GZh*>#>vg-WcpVe_qxHdcBkoV$~DTj}X$YrA=EDa>g& z&*{`%<>ta9P8XRelEYV&Qp))T8!O927}m5CoeM?2-_Nc;VZZPB{rTm&dom8C3zB6F zgn_sb<Xj$dPKLDP`>2b2H6P=zl~MZ2{D;a2Jzo;_r2&>&;$%H}zL_%76gqX0@u-<J zuM2=yU%2cGt^T0#gEl|7Oj^?h!Ouj{lHeK%x`RL$v^KQu;U(&Vmf`GRKsybtFwv_l zM?cNcAL8tabn2LkJyFgZEVw~iAEbgI1p2~YkO6w8yDuDu!eM}gb#c(HIOyhsZa3DK z2z`5@M*#YLV0aZBcztD<ymFJeHXiCWMZ<77j7EZqiH=6WSoFF%0>-14#&){LIjEU~ z{`wM3?SSc*!4~Ve7Z3Mdf&1~x6Z=q8qI-&m&LnNkC4f}`c0OuIfq}PSP>kJr(`yuC z4|2V?3tiScn0tS9uFz{cwed$W*h;{12D6ody#O4iVet%1%fWIM?pA=c3g#|ge>QvP zFJkjQtvf0)XEiL;V#~Ger$2(@61Jq;c&70#x5Hl@n5z{W-LTN(eXIwk0hW3_t}f4N zH~P;Y_WYLDZARU9yc=e8;|{D?QO_*qv0xq>tlov^53sF=nAZ-Qi<tK@c%A^d4A|d* zZ32cO|MMRUa5nKc1ZhIzUU)B_5E22|6A+czsWK|ccv-Sp^`UwMCr5BpB%RFQv7fp4 z)P@>LTo&>ABenv;5hD-eD`W%;^8#U8LFm)N%ET{bOMdwzM#Rc2N$sz)D(i+t+^<6; zMzWL^_O4tV(X1G)7I2TzCUkA-_`t9PaUGR&uqI7P;vKVQ(lo+Cy^?yp;xJp3%1n$U z5~|K8e@={%UP+o!?LTE=<M;^;bVdeuyX1&UUeEo$N|bH%o1|a;ke5p78ZIZ%IoWL` zs=PM{(URW_KMRqS7g2ioPddbkgZQNUpn}_}{k^X8Z+A)zjRBUJw;Ce@-cgSSYci6H z8}0n|devUZrw0rp3(A=m#gX;Sw5+yT)}9m7>XwEvaqHG;_3p{Uif_K#{+dwiL(8l~ zQi51oVP#aZx~DQw6vvSTQk(O95Jb)nBOO1_nJea!Ig;SC)ZmJvV&TcAf_S9<w_>Ss z!Fu%FBF$Gt%=@kix^y$en7>OUl;g;`#W-JovP<#Nd&=P%VRcTYq98WTj;H4cPMQd^ qnmi+y@WBWnC*p*PN$AgJ8}Wts<J29c+LoKSQmy^$4?cc)WdFZHf$Ek3 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angel_smile.png deleted file mode 100644 index 559e5e71a3415ea24f23cedb9b88cc1862a569df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1172 zcmV;F1Z(?=P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DANkl<ZNXNC6 zSxlWp6vqjat?Y|sD-EbI+Gwz9v}s}*pKMIDeelJ^hZ-NWrbZKAjFF-bYSf1&#>BW_ zEeI{UvbD07r3Ffnvgoy?Q1G%SU|8D=m;24nGxOaGTuK^WeE28d%$)O^Gv}OdCcrtf z6!3q^ZvelAur~NC?*7*-x8pPAnW)2>y@6U<gf(TPzhzFZX&Y^8e8hKKI1KEv-2GoF z_rSCW<rxFD3X^rv{}D7Dfs!;^`diQGHL=mQ#z%au)&5VRH`WjCS?QX#R=UN&aS653 z#=<qIJplDjg5zD7E{D}AaQ_7}=i!>b8xGnw+E#qTx6NAZ!{h22^MkwRD=oA8+NhhM zuc0Vjc^vQHnJvO{zK0rqSx&tl21P@!!uUzJJq*q~C{9w^N3D&oYKD8E#^VQ{y>j64 z%0Gp^<6*hFv2Hb?=JQdr0-DN(u{Yr6F#*bElb@qzen8!pgRb_k`)P(|`KM*c@zVU@ zQD!<GWMSwy%g&E+{r#OpQ6(F7t~+mR-f7mfjkeW3GaV118Je{Y2co4aQ`GFoYTt*e z_c4~cQdsOvWbR@tBh}$J8xok7jkTN&@iG_2+=WOMo1<B7ie=@Gw^289(G0^9rVoCI z@fs+N!0LNSiv0jwz2C^ynaNkL1Q@y6_uy(x-x${?!v#^}E>Sw%8iBf}F)U&F;Mw$j zD3y<c9)b4UyROM|0y`RDG+CX-WM%5cxI9VPQq*t{{E~ojoRE%|+Gv(Aeej=Ye8G<3 za)zI*p8KfCi88XfGO;={HpXqcZE#%zoQp?YdJZ-6J%%MrAAEx1RA@`J=-30DUg_@+ zIqq;4+{n`F(2@ezAF;IwOie7D&%iTLs|-t+{_vJ$i;EJCPwi>8G_*Cv&Tn&)eZqP> z73<)t7)fgyo{>{`z$Goui=pJaHFZNe%9brq6K$eInPA%+aI_GjQ1$!pTt1FrZAwcv zS3iKCA_bD{RT95`5y@y?tUuHjtrY*y+z19vhKXMkluM^I9>l792E*D^&_g(@;7o`O z@oK7OH-&HQpgt#*k=!U2%VJq9jbZfL2%2+3`0>pk#!Hh7n6d~wEk{r#a$?Qe)Qa*G ztxZw=gdM$(PD{FBZRk;YPbE=%BAnC50y+J9AT{rYapjvt+}E@0KuW?<mC{L-4`Udb z<@<^3E0@E}4MIV<7{pkn=XE}HUb{2pX50&-kIVfc`hBn6sudDQaTuy-CstXyMS+|^ zGlX@=V<D6I49ay}utOKfGKH$Ni)Bt!A<pGH<xiFXN+j1sp>Q@t+gs!XVSI(L?MoyJ zaVTqyfltIloQp%fK%LWVpl5=`E>I+6?W28#ahGQfX$1<I8;};06y!@pg~4{Qi$WA< zgB1lq_IzHTZKG|qkNDp84c)ZKi&B^wQ+eH5x_9-@p{2j|oL<v5V*8&S=q($>nL>lU miK<1DUR8VN4sT7vR{aZh|2Vqsev4870000<MNUMnLSTZNH$#X3 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.gif deleted file mode 100644 index c912d99ba7840cdc66459fc8186b8ed643967875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmZ?wbhEHb6lV};_|CwfZ(<g2V;t{b5$EN+PmlGmF7rtP)^o<}=S?^-7&2csVZCY0 za?zaUt~tjcOQE~Af=?{DU)l0~He>v5$^6lp{j(L@cWd@v)@&bbIe*!4{<q_JXfHI~ z!+5%v`B5j?e-7L~9eDpc@jY-5eeW#%+D+=CgTQA;f$uKDpIk&fyNmyK7WnTf^wUlB zznjQE53!G)lApY!zI)01@s|1JEC1g|=B&T|>2R~Nk+whll|Kio{Rvd~AE5XvNcDG+ z>i=Ms|G{d%Lbd*fY5$AR{t>13KT_{~gu&-n<Nwiy|6`2*$C>_*H+!FG`#I74bCTuP zB&%;}cK;Kt{-#*|O11x=Vmmd`V`{YLg$%EY*?w0_qyDEmeam$Enc?_9!})Kn^WSWj z|Jm;Uvpv2P`g|?&{aWJxx5)p0ap1r5;6IhYe`>@3RY(7+kNR5^d#x(rMnn3E&cb_> z>%R77|L@5B*_;1$V*bCrqL;I4e@!g^Ke6=3^t#`(>wnE`_%W;D$Lz+xGaG-*YyGjH z{r94-zl(c+EbD)|YUZzHlm4%t{bI|~7u#0+*|PA@wncxpFa5i7`I`e<ejnca=kV6w zN4EYwvhC0D9luZP`g?lcpSxGSJ-YMv!HvHUZ+?IJ;QzA+KVLoj|LV#Acd!2c`ThUj zKZa32C<GLLvM@3*%xBO6DFo#S2af*?_M9>n7bZLUvj}rN5l-fsqRGU-@L~cBCwnJj z-5Z7}?);8k5-BGv91b-1YUkeLNorZz$j389s7h!`bAY^2{EmXc87!w3`TDacioDP~ z!=vQU$`aYte1w^Wm8Yjb(6w*ILQZSbOTui&x(%wON`o{$PZCzIQYd_6!Z~4@+Vl-# zDVtJ#r|HCO@_E?Fk~zVpYX;9(mS&Ghhl}rA33OKBm}Qms;Kc$(6``Jmy&8XBG#+M< zcAm;7btEL=sH8-1%D<Hii;i}QYB{z1Sdi${YM*@a)xEX1C#%>eCmfJ?>^>=`)j04$ zp-6|{OrvtH)Tk*=E1bO4-YjAKth(G;!?RCdLFZ=8R@J6{p9wp)pB@v^2$-Uv8N}?t zuQYR>jgnSd`=lSt9wDqk?g5Gy8LTfPuqlPtI!Oq)yL7aOdzy$H;dgSGxPaSErD&!@ z^&9~ge(|mY4vc&eAK8>=NhBTMip|(~++nW7!9#q~5sI@i+BGg57I1swCZZs^BjE|B sstbc7GndMS1FXUfMKXa?Bmx^*C2Kw~P7#uDJUJ!hEypqkMn(o}0F!L1cmMzZ diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/angry_smile.png deleted file mode 100644 index c05d2be3a7972ec4f2d9f5354a9c1dae719d1805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmV;#1UvhQP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DwNkl<ZNXM;} zX>3$g6vq)-cAK&zV!#CqTMKRJ22-XBFbvCp1xi~f6p+QnASfX&h4R5DCScGI0!>sv zs_~1dwxE7MBPC)83Q80bAgxls*4UJ1JJXr>-p_O1Oq*6(gNZNs=e^u}&hMUk&w1ze z`mNFE)t!JCkw;W2sua~nR2do5xtN~(RXu@ySk~>(xi1O4`x-4T`nc;I<4C`COy|@_ zZSM;%hC@Wht-7li>(Xdhmrn3-8CK0n__G0;8nMowCUopgTDN35HfpOr>f0mS0o!(6 zpyDm=<_xz3hjw9}sm40K4}1T1cww1nDIC}VpOnL`TC6WV#F#(IRv-2K=K`JK#{(z! zW8_XGSn;-P9o_@a`=De#Y|ep=nXthH#p$pn1=h>^)CbUTlh#ccsIM~af$O<hwO6>C z8EXd*?6mDy3I*y3gSX6uO<C~F99TCS)}}(yOejo%{5W`Hi!4x&;Tdf!qjL_zRbiR8 zjp7vAHfLhJx>_R54o9nRjab3!1zemaQ76OGiBK>dR!xHylc4%2)~ORHLs{)rq;OBD zrWzwN7HhjN0&^1-;Dvk_O~tNo#O>hKi8QU6&IMmQ!4;EX`IEB9R3`_m8#7RrGTY&$ zf$}~0y<@{?svwDSjXRaNq-5enhrAL|Q8?m5o<wI%=hn=Y9XvGwmOh64o|I?#Zj`0W zc6epW_QeF%NE4-JDk@r-6Nb-B;b7qc0Vg;|aWLQGjOkpFH`@WTWE}R+T+FJYC`*~` z@cQNj4`JuWTdYo!ZO?QP)^cDg=k{*n_wrKA-38&~$@b0CJZDVjTK1PXU>3=)^Cn?_ z`?;+wWp;(<O|>YTL5Cz#t0V_oD?<~va!NRPQmXc<DOejM2TLCfgS`UGeFF33v3uZ^ ze{EYtaPhb>q(hRVJOQqp>_7v)$7!55hU=~&{E#$&Gt>I;-SlXhvWH3fMq;l|rET9< zl-2oIO8rN6<Ifo$jx3^(<e=6)f=elbsfml?o3x=^-00!PJG=Pf>nhqBZgHpT1n1(T zVBRpS=d$rXn@QkES(k)*LT5h1nBCvmGPx6IT|Az%64lQyujNj41+Bkcqr1mnUrWuj z-jFjC^QBx2X>7{sT#7N6q1%SkZ`-^P&N<f2ktjENwO{aW&z+MW@nb?X_R5I_3gS?P zvO0dE_TS&Uewk+10PKYiTjs*Ce4p5l({a(9&3c6MdC6QVS;CdFP24zGM*YW!Y5eL_ zF7GIyHl;u2vhh}P#z2(O<@fK>xQ^|`Nbig78EN4ijpZ37xfn*XJC+7l3^&sTaa~}) zBt>&^Mjx&wMiFxLvy9Z<sBgE8tE1&wR$buz*J+;Bk2d#%k|;^?+@W%&(&n>cAxkc& z%)#Iu2pRopOOK*if>9s!?Xl%X77!8@=Cz;X{1Pxyqwvc@!3;Sr_aNJzGr$hc>We?E z4@U9>j*Z%?kNV#4HMd+6)2Nx(($d=1pF^eJTDneEh>hC*r#rOMl_zZy?L<|gTM<=7 i#(dpfZTAKLKlC@^jn9nmDT4q20000<MNUMnLSTZFien!D diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.gif deleted file mode 100644 index 4162a7b24df8e235ea5485073003b702562c3122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmZ?wbhEHb6lV};_{PAnl!<8t8{0Y-mUZmxD>*pUa&T;8X5PrcvW10Z2NTmi28K-> z99w~ihiA2bz$!t(wPIpxB_-F($*q@{-zzA%K}l(guI>(V^PM&}yX@_c@bO(>WxdSF zd7Y2%pn$+p0fFN}LWe{}kBEt#78gG&BXdzu@QR4YO+mriLPB@M#O{lWUz3);C@+6g zTKb-(<SiMQ$I{Ywm6YzPsy<Utc%ZKSN=4;?rsgvs($#&gr}s`%^R2%A2OXVHdU{`t zj6R#1elauqX>R`4+WMcZ?SDJFJx)%0-Q4zhcpMB0Ivf^uI3nUmWaP29xRaTgr}OeI zR8?K9tGm?DaJjYhYFF3wzP{`I{kNu1zcXjf-TCwHFIn<n#fnF3*FM?2`RVrU&v);B zb@=f6ix)p!yY}tbv+plo{&@ZR=ll1+K7RcD`SZWuzyJUL&p<Iy{K>+|z>vkD12PE| zCl2iY8?u_3TUy(iGWo3SdV1~Tg89w+daU^}TQj}cW#`V5<?x&_(_O`RxdUrhW&*3_ z@(n6(i?d=F^^AA!<dHYnwNIZpw!I}Y%qw!sk*tg`S23@^#O5R)QGVBuEtwuBPRpH~ z?3qJTSsWicbTaYC%=DMD`t(_wf&23hE4hH%K}=c<jMD-bncKQVn11L67e8}q;uR2% zvDmy}k*mwQDJxIDICnvUM<nOZ2E|8B*7^bwe>j?&nb-`Qx0y&dJ-O1)8hR;%({Z!f zSw-G0Ide8BcU)X-%~fNm^jIT^^PRzw7mi!m`&TpS^*ng^Sc`v^p;3a7@I%+$&FS$B z42|1zyE#NG1rs?ZEJ|<`mU<%=V)&rzSg#-790$iAEs2M@XZ=xaIo83*H$hQaqv_cq VDI+l!4S|Hlo~KE&(^;7qtO2)m5uX46 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/broken_heart.png deleted file mode 100644 index a711c0d8d8505409f0285fd92257eda1ba3a42cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmV-(1dRKMP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C!Nkl<ZNQt$S zT}%{L6o9{-{b7r<$Pz#;G$5!zmaPG`BuMztG|`l%t!dQ6#E@7Mn?9Jn5tAmGKC};w zCVkjMO?<Oz4cN5B)B?6m@h?`9ElN{=&@yZbJ1)o$>@G9Ar!Qd8U24;$Cpiyu=eyrI zbMEBYM#544uW&4UD9%?4f!)A6KoO7xt^!|Zy3w_OYX<fMHGmhm4)g(^Yq}A6DjW$% z83{)bk<BU79REEKknfwC<XgXAe%`)af(H-E<efVrA|Hx~A|fBnghJNk-Mi(hvNHKH zH&=Q#ZIYqGhb3iMqayP9ymMaM7#kb2E;KYqkJl?&b+t^cUoQ`<s-&;5P`<0H6A`&C zB47X6-7Ou3g)&f5BGC;SBvD^4A-`XGy<WLcUoSJEP*OxTjfA7vL?jCs_+jhTilu{t z)RvV!{i^ABobF%{-;pD%-nZ}eWH9KvSXW2=nl&uX%}tx}t>IxFS5&aMyZavCSAh3N zIy)<3eSOrdT$%A;lJPh|`IDg`3Ot^SVt}=!rI^>Q@#xH%Rlo-hplSHzNqj{`NGgRa zfM0St*<4*sZ+km{yR5B^YtbmCX<}EDj0LKSig<MTG$lKBG%7$%<i-s=Za0=?rDc}g zPIFZiL+$N6862dbxtS4N&&XPqg(oYE$jzGoH4Y%hoSK5194yn!*o{k3@MdQdzH)`f zSFcjJV#T5?sT8JR04#9;x0m{S4U?e|1**CTpJHr!nnY(OrCC|1PA5sr%E(R{2Dv^T zz@P&3FKcW>i$t(YGh>D(CP-Qqv$t-s((7H6vrLmeA`zCgv;g$mL}ZmYHTCN^m6dM4 z-A=CCoz~4nEXMWGQOfi3D9_8wJdQc;w#~+yLqjo#s`?a7H|{xeaz3d$c8r1XaiXzU z`XM=;c-?MNsnnte8I8pVhQrhyKaN9HKh|_(c>aI-w5YYUr}pSk`p3qYiN{Hr<}+EM zsz@r8ww^Ri;)w+PV`J0=0=&FsOAqiFfC8ZD#w_qwSzB9Q#i2t4b)ER^>@%G$vD@+3 z?P(n+Op}3dnAHakP`+o+O<<d*8zz8l;gwsQujT?j{jz`mtD!)EN{<J{W?OW|DG`2) zMp?dhFRujxcYy{?H^%4R+n&GAi}TeLh+Mw3Ygg&S*|V(5&dw+n;K9rcOSf%f<Ec|2 zo1$#gbmQSdCQUw9V0FqgFa6lsT9D}N<rSAJjTxDp#nsY6OIO!~;&L@=x-s}XlktMk zbmOk#bZ%|z=$N*xTgPZ3LDI6G=4c{;t+tk?bLV1;%hj4myr_Jxzzv70zTMK*HJe<! zmSNK*VwyZKO_F{;E$7c$4pn_u(~ZlEIWmrAVHD@9Z%8tE>i&rnp1&?$q`0+}lASvZ zo88`~=|;yt?R}wquD}}LJ-`nP0LL}mxc{Pk|4RN}<8SCtmNuhtj6nbZ002ovPDHLk FV1m;NClUYv diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.gif deleted file mode 100644 index 0e420cba4af510c616dbfcad2b48acddc94da29f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeH`{ZrEg0EfSuV{dG-$zU%q+QtG-5g|_*LB}>d*gWYlIj^$rT$8esy7S7e<F49Z zKuV6T>@XDDiyjSv78BwnbPCKBc7Y5TDa4v^_I9rBav}SEKb`+XKlS_r&)swPR2nNZ zB_=T;CgKFqeu!u{5#6uT`i{}Re2?#ai*d!0bk)iXG_xj8@#a6_{?y5z>JUwJrmu8z z=bWOY9_cSG9^4ynaRb~ebTRQc6K*yxa?rIAJ#6%F(94CFhk=w8PwHx)IQE4Ao=xbM zp(lgvm9O^8R=<|VeVgDDkOM*tr(z@(qiMJ-#$ZN#RDvrKjLE5fC3Q)OAqCl=58rlb zv<Ra+F`&WVljK-AzA2AilgB5r;FsW<4C69#JQLTm5X_2As^dZB-#2n`Ly7NI`1W!9 zkb`M8=JF8Uf*-fy&Ngb|338^GTr5IJLq)bDx`Q0iVXO+5tEs>q^44xDtV>+2#_WsK z;tPrI>Tuh<zEGQ(e*^PxWA+_t{$29tIx<?1X$x*PVWA136PUB(R$F4}GivGldZZC| z+Ys%*%2_Ns5p^Yg_u$t)M18nBkXRYS>Ii-t!u?s?58=-+9xNgr#lw4`)&Yw6pZ}_W za*aVFh!!IMk?_$IS~iFjPNru1L)|V$D!0bnaN?tuT!JVx=~ZlT!GUu{=4OS0C$CWt z|D`szZj@_|c)iZu&E*{auv5vZ66HSKk!O77u(4BDvZN3l$!k5SFj(^@gD*{T(}bCC z`h_`D(`V{KhowcTR@qZcq5$twcIBsKHujon)?Df6Njh$b+*H5P$Sjo>YGsXfxqKJ@ z6kC7c{fKIxi_M|07z159{`o-C-PMqsF5Q=}Ewm5}^#PY4vRrFBf97aG-Lk)9oSB@y z+2HUp`@*+}%nzP(H!(O{k3J0B*D4s&vRC~z9@WcsM`^ZgGw-x%ulQWa@f@XI9c<TS z(}it!d?xP4IaPKBJ2rm3UZQ<IC<vKTX7US8#`d~wg!K=KKhv=P;Dl*T*+A3T1jz-> zq6(?Up=WLL7cJ=JjITttEjEXRMpwsZtg=JSfVSzL-@2bAidlp;&qi#5Ebq=nezCvS qkdbCPP2badOmMdDHD1f|W5tGQU6Qv-VPzC2Oc(Slx$U5qDE$}COQpd8 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/confused_smile.png deleted file mode 100644 index e0b8e5c6f11467dbe09785ebf3aafcdc9c581e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmV-T1hV^yP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CONkl<ZNQteL zU1(cn7=WMeYtpVR{Y_dk8{ClUSUZPXe`It1;4Y@S*oF*5o#MPwkcl#f;GL6Qcq9J6 zymR2d8!slpbb^SpvuaOuV|H_6Fv((@HYZJ*CQX{0^Sxf2(<YfM?!p&d-t%$bdH=sp z-Av81lEfmRR$vD(1PuBLVEH-*{FJcsxfKC`S_vMDg!Uok6O!LWvB$t3gY=m9Gdu(l zU!%K{DE)H6&VTuz@K_|&0endA+Ck1Af}jJj$00lnZQDU9n7aV8<8bp^C|BU2Poed` zQ^4VbozJWY_rP+2D<9m=rDNi5Ii%<sMinoj%5hZbItb9z56zpQb1$UN!|0pB=C>4^ zUW<czpw>Yx{4*}Ue^73GgnR!>qSdt0#UH_41XsWqa81?H2(hEkxf@2Fg}a`DzSmDB z?ELd}@K_|YkKEPMoEa8p+tW12b)`%aL_9TSWe3JU`!47`4qpulyMIu$Zrs1r10^D@ zh<lZ<cSfbHjC6LQoj52!z#7Yfz~I&p7=!hD0T2fJnyOBF-vPG?CQiVUBS}=l#)O^E zX<!GFXQLD^AuU1lVthHW(n1AmWCrW}45gw&spw*jrm#kBN<|lppUt&n(Dg6`gD`nE z>W?rQ7$R-K9gS!w4aV_Ob`6<~<26wrlXb~t-RgN>Jh%ur3rPGVta}X77XEG!00yzg zp(zNiQ#Yq~b~h4T-{O6DHG)XZIS7l3UgSm~V<FK4s2iujUpNn*wqRYr;2Mqc$pYGS z+5f^lUbIswFv9-lHhBNz$+||X+-2PLQE5n9suu2v@w>kyBA%U0`4i)p;O2C-*0oku zU~#%Ga}8L82Vh}QFV*^X)HsHjRGG<S8H_=K-C&O^!UN#lJp_FCUjF(X)-+XXA~hNK zk<aBErl!jzQx#IP4n6DFvLV(CZVAz?sO$uEKUxPLBRl|C$`EpE$^xa5OLC^N3=Fk3 z(%av`@Pn;1cZE=n1JkoGRYC$C=-FRk(;ML3m`h9KT;<I6D9)eI>_va>=Xo*(!@d3O z^z^pV5^X^TG~@~}mxsA|C{@4+(iBBli`Hvk&u9`A*qE^Mx$637Cr)!_2-+GAT5G4X zoj^|n3JX540ELoYrln>IA{q&VjV{e<_WT0v{nhoaySOIaJIKYiA=GRLG-wQ9+-lux zr)J5z#^8!(+i~bWT6b~jn#nm#-;p?5jzO-XDHOq}tUfWuK*a&mpxOE^^c{%<higai z*2kg~_?YY;&oJ^LWG_I2_8tk1_>n4%KSdo|VdqI`-~2i7YQoOXt_rVlasY8o@b@<n z(&H>EKzN|4Jx|!Ez$*zm|HZ!`tHFH-9l#^NHekTF0KWm_zCCyA({@|%|3m%(uJ36& TLW+k600000NkvXXu0mjf7P}Gl diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.gif deleted file mode 100644 index b51334278289b1429515bdc44d559c768e7de4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmV+$1LXWiNk%w1VHW@w0QLX?mtX*!WCEXR1fy*Pr*j9bdI`6B1-N|&v3?7-h!MSu z5XXrK$&3ohnikWb71gU8|D*)}sRsY03;wJM|FRDMsulmM8|Sqf{<aeTyA}Vw8r-)e z+_)tEvmySnEC0JM>%2Grvors@HvhIc|GYl;#2){`8vn^3@4z7M&MW`SBLC7R{?#e} z+AjXYGXKgm|I0o7(Kr9qIQ`-^|GiEBzEJqdP5stH{@6kP&`tcoQ2*0i{@q;r&2IkM zWdG4<`Ok9w)^zdPbpPIT|JHo{;%xondKah59H+}0tIr#((I2+lA*swUvCl29&^Wc# zJ-XK=zU4!@)k3}5Cd2D7#_V0g+<npKe%R!8)#-oQ@S@Vb+SHK$(u48bg#X!v|J9A- z*OdR<oBQE||KyMV<eS;tx8>Tb|Kg(l>#Y9dwEyP1|LeGx(7~6|%B$4Jj@|H{<o3Gf z^2pxG{p-g6@6-SD+QjSd|M%nn`RD)o=;HPJ^Zfq*|NZ~~00000A^8LW004dfEC2ui z02crk000O6fPR95goTEOg?);Bh=_e_T{RXKI$djwjedP~A|ga-dU|X`G$VGHhJ9ca zL1{)jGBQ47c4!q~sDr8<V?`}2D=R9)DrI;ixP^5UJ~u4Dz{4jdCOdc*c7%N+E;qp| z4-G0O7YfuSWnv?!Y7;TSD<uH{B_{{~4kj5Icq3|qT`&++(EtE|3nc~sAfO>b1|med z2<oFF!wVlngb)CbKt+iM^FVO<5kyQ4Mtv-p*n%X9n++*gn9!ht#ReNtk~E=X0j0_| zQLw-`r_W&q3}LEFQPWcs4Gb^5<Tz*aD2A&*fb^h&NsO5n8fH3VFkrxfs}v|qAaUlO zCM$VTU>tRLz~DRs6Vy)7@y5v>KTnio`Ed1U0RaXDAeb;ALI)3XmLT!NB#IUfSFg61 z!Ffgt3K1q)kRXT3WI1s7fPp{(L)z9D8b^o#0RpZ#SG0A35J9i(*|odm(pD!#ZQjQr Zgs3w-m6|RzCea|Grg@`9ix33@06R_ikOlw% diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/cry_smile.png deleted file mode 100644 index a1891a3428126f340fec3df988921ff98e60b36b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmV;v1VQ_WP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DqNkl<ZNXNC6 zTWnQD6o#8#xU^EG2!%p{VnK-zL?aLb5-%~lASC)IiH0;Wikb)-LsHZzQKCT~j1Vx0 zCA9PgoZcxMpi-f<K<|`O+D3X>svZ)kglo^9&wutlMWAZX#D_n7@0qo}S+myKGf~0N z<*5Hl|2PRGN=u|n$tU$j<co~ixx{}Bm(wzg)5rNrXj%^kmqY$UPxjr8**R+?+k1k` zaJ008{s5Fc1^eeg+XwL5Znz=N&0io?0Rh1eEcR@yt@V-b-@-kxImhX*AUDZ`+g204 zkc$&si|Kp?S{Fczbao~5$mVJ%1hXJ7*|<K|_qGM@hVP(tBc>#cfpec2r+bwmoCBvH zf#!#yaXOrO2u`HI@hOtNd$+>1ZtZX(*4HwIz}+18pMji2GZ4ry=FBsK&Xj||Edn<Q zRG$tfr$OyhsF@5uO@bpST6l#P2zooPj7Sas><Sa^qjUkL`f;4o&kHs~PBYwRn~GTX z-8c_iH<iAUiTJ;G0IF5oA1A<}@k-AY`1uDc!)1v%2wy@^DHJ5&G|pFqf;ObPx_Edh zTQj2B^jZ|xswcbY*t;%)O|M4LynQSj7TB+a{i$%J3n~}kvcw#OXVUnwDzAE;jBGuk zn$2TfkX2u)B0ZYQ_BUhQ@0``c)t1TX8ZEMK45n?JcB}TcEHMY+KKw6w5uBO}?HSOu zhW@i_T!00YeLfmfH_c5&b6zT2Rz|zyp#$@2Z~0ol*D)>cVY;^Avcw#O_mY=li{oT9 z9V8{Ej!F3qY-*~dqg<&u^{5Iv(<@%p1h=5qTW8Zzk<RtwOIcLe#>D)3=KAV!LPw3u z67x=Y)p+OIhAO7}dsug-M`>B;70p6z;cR{nC3`#E@1=tBB!X?<F!$&Mp7jTCdP|4E zm6oM4RL*N2qrc-*6?3T<Wz}6!o8QU@p<;|@U#hMtOXg<%JKU&$mvF8A4a>SMEtv#1 z6X+-xe7@IO7Ix5+vws}Nzl<mQ?HID(is9IX5jZ6Rm)s9UI@|V+g5Byg|6+RE3kU~` z?kMQ`6-PRFuCi6|r@iQ`v~@>OR%8yp)iHxAUmJ(BN6@|ZxnK$t2v;p9zvURS_cYLb zWuU-<UszDudNZZ4iT7K76>yH1ODk>tdT|nkYe(|^8?m>*+gHWm%Z%qnzJ<o?q#TJU zO2a9dMNL;NQ_4C>&8amO{!&`*36p;4JRi1SQl@6w?K*DH+k93eL8lh%ou~8WNmq1B zfmvSEc_T2n@i>L44m%U54qal#kr2u1I17)j?EAfNW9Oxw%VE<%%LdpPt3^gR6eoH) z^=bP)J@;uLJ614K(T>o`sh?=qFl+CS6@%-ma&GIn+MU_h7aV%z8s{9%pXqFqbDo^{ zBt&u=KNOl1C%b4#-`2<adiQ}QiT$g~LgA6k#b!nMgd7!7wjepO&mCsi6=&EP<BexU zdp6eA`pEZQuep~o10jON>iLhn-nBo6m3_BkcFx+!_P<=vqup~J>`7E2osXy_GPdmQ ctL=9E0q?RJ6Dta$D*ylh07*qoM6N<$g2RVY9smFU diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.gif deleted file mode 100644 index 9b2a10055beadd67b13405cafb86829f57fffb2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1239 zcma*m`%hB`7{>7fltL|qLuo0r6uDI^K~PYv!&{ZmO~v3Ak*P$`Y372{4cTyWA|Qhq z7lb*@s7@{7L<=%*BDKiHsR-5r<ti{J7q5c|3PXC%v*UlTH=lfedVYOXA4MpZ$BPIN zF+D-FIyrTa<P$!>m(L%TN~c_1XWiT^QfZf$u-nV?A0MAFxqM0{qh+#}At7VI!4`$$ zY#ebmp1Ab6^`(8*m-pLTIl#J+!qcVL-AQ3r9I>xF%9-2}h`n+g4wzP{#<xY#Tel){ zGro^TQc_#Cy&>13|2(fLPtcSnY-W1SwduU;;|rnzHP?Kei!(yxilMPazBM#9$hScO zQ#%x}aK#pXFxa?ii>quDGVE~84*B*d;Glpzp>@JFdt7I5=)yVBa!|ySiy|(H=b)I2 z8w>}OFnIWrhf+tBF`Q8DG@v1ewW85t(L@o6YhwDk7}q6Kk#w|FJX$V!TH!HzQ;G@_ zmCm@y;G@a~w_H%o5I`ryZ6Wlos1f0g2$hm)og41BK`*6Cy;0>wl?I?Jgf0t3`4U>U z7`jkYet_zglzugCub!@#PT%!JtsCkX?x<&o(ICcM3Dw{M#$O(|FU5UNJn%&0-0272 z)B`W7(HjrF(8TaYvp4m~7ms{k@I|8xkNohMF%L#Rw8+rPn1?pTe3<5=U5*aM0(AJJ z)Bjyh5PBA(I|#i&=nJA+md!p{1d{^o3Jio`FoddBLLUkJCe%dH_tsM#;dGbMQWu4` zSh{bA<zd3R_Puzr+tQhc&SbRxKzAOc%n8)ccQbi;Gio*TdKizPB^9k1Xv>`KPe*qK zOg~xrFVOwJV>lZ_c^FZnBOgN=%d0}XD8^73hAS*1l^CtY%PQ2?!el~wJG#0s-iC1# zUUy@v4{!TnHdEtfOqntB6z`sao&{|IO#vYO-+9lltO#O~2zWn#{}Y5gO^h_ERV5ee z(rs-Gzno1NP^QkA8@l6a+>ZJKhOZC5PHXC3mN`+s(oLRCu#zSWZwJ>UY!CZ(Kx6eH zaZ|s7?f79JX^dl?jPE%`<;ph1EIrh{D@#ER*ff%a^}%D`Xxj@vxws@Yt^Bz-j3n5n z4pwQ2w7A>FY1?!{zHfL<hiuWB!1&A+x{kD6b>>`|Ku&spv74v1%bcuUm|C!JzaNLs z;+!CrhI65Zj8-qAOFngv+!pk6ssr0$Bp|V?WO20CU3s{wCnj(I^VSUR8Na@0Q$(bD ztm$CRo3yMPS;UvIxA@H`wu}ewd6hgFd?d;z;-p{!e?=8f^0#rQVq<;{xz&9vD{yBt zZ`JzKD{GItB)IM|#JR-uB-=p~E|8~meY{cG`|9FO$?lkAb)4<w;99ouvrEVM`s6xy z<@ht_3~_=Ne*;$%wI-GAuWh~OoYb3hKaBmG@7*7bv6}S@E6(lW2v&K#&LBruylHkE zvt2&utopa4!Eu=)J!Y+e^;NjQ#Xn~#XQ|(<%gTw<=_;PebKg4N(t*u}U+wh`k&CMm Vj&nnLOR|h=u2RsVwz49^{sZ6^jFbQX diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/devil_smile.png deleted file mode 100644 index 53247a8835b09d1ef67dba3a11f18fafc9551fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmV;#1UvhQP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DwNkl<ZNXMm> zYfM~46vqjaS1GU*S&)}YUt*)8t*MQPX*9+*O|&&pn;1=eB#j!4ADSk<C>mo-{nDf# zGy$;|gqF8FTcInDR!d7;3cD<?g0Q?A(GqC{VfWs@|8wVF*kbD!Km2p=%$)hnnRCv} z1Ocd|PE(O%(>H_ukI1l7oz!7zONVbEH<urLx56-n+C^nk)zpNkYO_zqVgl?#DCa_6 zp0EZj`0O9+)&V^|()qS&xCgp6g~>*s`*Yx@y+B!tlKe}bjEN0x%{gD9r3E*(Y!Obk z1;0L?mInX!?SR)S0|WT8A82?CXxaw!z7PDy$SshwcpaE#1p5g;vqRa4EiekV8*>{s zVtVUVX}4SOUvFe)VsPzR=p4jHF9KgBz~6fS{@+WWjeQ7x=w<GVi@T}8H-PaYz}yfp zRsbAL1`a$2KOOYgY?$A<Q{c@O{AYdNK6J;%8iO}qco4qf&!BnVp@&(3Clhep3v_Ye zE9-$v8Nh{mD7GgU-#IU4UV7S?e~k{};6Z^GS@754bYjkKN1r1Bi#_|H_dP-Aee{-K zH^JQmb#4GIGdC9<+;lo!N(Ii+Yu78#X1wTkq{Ek#1oZU@{7DOLhwk@be<t+WZO}YV z5w?kwHW}ZJd^<Y6u`6(g10A^u)Lp<iCb#Ww27tgZR-2~~_~3pf+5fjyML|YMjn@O^ zQP8>`rH6!G-C$_GJp*6A7G!AtTsr34(w5szgtkylF6>ML{u%}vABVvr(}HKC>r-Yv zj^3GDH#K>Ruvdc&P1dDgvL<=CU75(Tq|PJ&KgL7vJ;dFz{DnoP1+RwlS>=JmGeFwq z^{C2;Hl$t1fY$C<Zl6t6;Kq316f5nQ-Oz`>g~1}zf={3{S(2mSe7Z`ONdC`ryF;v) zYgsCJt&H)&14;p4)Z2K0IN+aX&<z%ux58VKG@}A6Ny0<|mBdMWn-kRzn^Y*4z_qaq zYYP0s$NmLpSe~IFW8Rj$Eb+2+1=R4Cm2x^>*&AS9LDkXFn;wS$BF~1f0>YAwtDgWr ztWjmvtYBA;uE9uw?N+GeEtBufkAmw+1m{KbUS*{@cR*|8`4Cn>LU&=T7B~^6Af~43 zQ&IfhDm3MUV>mw=vlTYXmd9cwFAB{$Vfg;t5R8{68emjJ!QZ+UdKq^ttbkICf$p0^ z-6P6-@lM2Q@C`nM&SQyaI24KFZw2G{o5866I0Bb=h!zL3lp|%4&}&#pH9SDV5SDd_ zmaf<tH*bVU8pLWw%}YEbt{uEfdN%_jyzNFQ&t_GsRdl2@0(!}6XccK1ins$|m{;%; z++3g#?!#PQl_W?r5>=y;W$dVmlPg#AB-4R1#=0aNI2k7P8VdMM$Xqf4ADlpV954S- zxW1qXCzpnsK#A#XpeI6U7fi7&b7U?Vw}qPvuoO^?85c{8At<Cr#i1(MC1E;FhUzE^ zQT+wM%0_Hu4(G0XQ}6W9KF`EV8=05VlG>HSA(DUTlQFTO?VTR%|9Z*ej6?%+6V*|Z irs~YTJuAboQvU$jo*OjDtdS-F0000<MNUMnLSTY-g+Fxw diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embaressed_smile.gif deleted file mode 100644 index 8d39f252bb7fa7ec9fdef6d88624e1a08bcecb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmZ?wbhEHb6lV};_{P96D~@q`BEza2hV}KlyX)9CSMdL=75iBwb*)e6^lZ^TQ~3YQ z<9ym9_NztoSGUN|7MWi?QqSi|{hloHXO{4<DKfw3Nc~^J@_!}U|Ha(@*K+;e#P?>k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}<B|XF#{4>) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%<zu5f$X6yeey?^h`|NXG}|C9dzPiOyswCLaK zHUFP%`TuO!|JOVIzrXzd)2;vC9{&IJ;{X4D3^V|WKUo+V7*ZH?KxTvD#DV>PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%<sH<zrtEyP2oRJgeV`ta)aXYX+CfH3;(JeUUTGzq7CIQh&NpT^r zW(f}tni{)W+uCt*?);{vsu&t(dLY>;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39<e&Jg9#B$N3QA0+Y~)Dn5g2zVbHQ8Wd>trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2<r=FYh P(RIZl=k`1{CI)K&y=6%? diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.gif deleted file mode 100644 index 8d39f252bb7fa7ec9fdef6d88624e1a08bcecb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmZ?wbhEHb6lV};_{P96D~@q`BEza2hV}KlyX)9CSMdL=75iBwb*)e6^lZ^TQ~3YQ z<9ym9_NztoSGUN|7MWi?QqSi|{hloHXO{4<DKfw3Nc~^J@_!}U|Ha(@*K+;e#P?>k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}<B|XF#{4>) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%<zu5f$X6yeey?^h`|NXG}|C9dzPiOyswCLaK zHUFP%`TuO!|JOVIzrXzd)2;vC9{&IJ;{X4D3^V|WKUo+V7*ZH?KxTvD#DV>PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%<sH<zrtEyP2oRJgeV`ta)aXYX+CfH3;(JeUUTGzq7CIQh&NpT^r zW(f}tni{)W+uCt*?);{vsu&t(dLY>;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39<e&Jg9#B$N3QA0+Y~)Dn5g2zVbHQ8Wd>trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2<r=FYh P(RIZl=k`1{CI)K&y=6%? diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/embarrassed_smile.png deleted file mode 100644 index 34904b666773b70bb2bee3839d83a29debcd6933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C)Nkl<ZNXMm> zO=w(I7>1wk%p@~O(=^FU+p!JSA82S(qcK0&Sc)k4(}fM{Mq9<YQjm&L#g#7V!kxcR z!G(eWH!d2XY6TZ+W00A&5t~ZHT1lp9(z%mNlbOuinYrh4ac|P3rdsg8%i(f4&pEv3 zJ>MsjnFX#lTH_6kKp)TpbO!=R1xf-xrJelzTI=O{@YZ<4e$;-%^mhrIBsfXPCjFnW z9*74@JTQ%z=hIGp@IT?L@rGvLedd2Z$j~9EsY2`h5bK2vyFmo5jKb^)OnwXH3f%h% zG;SXN4yT>`+?sG7tfTz)-p%}aRK1Qv!p2^t_zO~=KuUjr0+Dv8+XXF;LUss-UsZO! zF6?+|0_3ix4X%ZM#<_P6>YpFrbv&m=X2cYK1kVLe!CLU_)tOpoeGQr)grNhl<uTa# z@<7_jKfMax8gJOo{P=NB^lGK;aYCUBVrpkV)t9wvZlFblb$gMHx8X#u^3eA}V_SdP z$q&k8X2DN|dgFY(Ct-21^-UPLh^zyNKq{F7h3?J<u$I)B0-$u=9!2vO%7Sb^f^2Ak zv19Pasc9tCW&%h0m^zuDa2Br;LguE>MTLS=Tqu(|b(z%AWlF^=rJ_e_IK#-0gPXHx zQP6^7&%6uGeNa;aQzsKZ-x9osYzk{5urQA;cxXY<q9vEH{v|5R<viwc9w>yYAvXtF z1iL8Md>L=-W4P%)$ff{#!U4P+X9O)qpyUCd7Bpnp6ssYzZ9M>+H`anGiEZl%yM|ap z7@hTCQNe=#bsD|rDdfU&fbOgCYznQ0RSPNrViY2ZDOTuz<~INImoi|L{sXt5b70Ro zSQm6rKtZw>u#tp@vME^!4^FF4QvV~OXvLxxi%eyL#01HioIz&=tqN2GTtEf13hvA@ z&n(x9SQk<)3pRi(D~R5;vVoSPs%WGMoDm_`1&~?=H{mkWSYO6N@EAW|BAapl0e4-G z%L{;52w4bwNPPp68)FH+WJ{7*7p86ziPZc4hWv#aceHS3c!Igv@~RrNxv`ErI<~^a z91;<~mLy_GE(JSY0Z6WRMAdP=+MTdd=kdx>B%+vli)@J^x5lBiW))m>W%TR}_EHgb z1=G@uY^uYUDC`@aM#62YpMP%bIA8YSxpkIWV@%XT)>)9iSLN!ZdKS$a?4m)dg4x_? zO?B3=?`LRg?@v4V!6na0JNZGH+6U-*lTh@EF|`#-jpqk`*=rB1=g(>(<YA%}!c7Hh z+$qDIZ$MM~z*22D*VOmJ>^w3-=TW3uGUAndkhgYXBwR(pE=b7G`4;RvG65X^w`S1- zd`Rx>lbm`Ma-$G3ev>e0V2NPy?P>0WJ)c6;uFruN(@uW&M%vsHX!RHuzloC_VOiiu zZAn`nc98H3X(#{14foI$EpIPyH_#Q#0H=YGVE$ocYrA3i{~dn=Ck15*vEe9t00000 LNkvXXu0mjfxmX{o diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.gif deleted file mode 100644 index 5294ec488dbe44117f3ae6836b932fd3b6a27b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmZ?wbhEHb6lV};_{zYre8tk$>z1uszh>j64O_Qu*|u}z_8nVy?%cj>@3vjLcI@7> zbI<-A2M+8zcKqn^lZTI=ICkRHkyB@mpFMZx-1)QTFPy!0{qogoSMJ`ubMOA0hmY<* ze)90ilgCe<K7RK6>9ZG4U%q<&^7YHtZ(hB9`}*DcH}BuSegFR5`w#CvetiGw)2Gj0 zK79e9&)>d%{r>&i&!69a{QU9z_wPS{fauTv|Nj|?0E$0Z7#SE$7<52tL4I;z`|mKT zz(Yr>ee>xC(`>8x`qR2icbv&EcF5r_niBEApqoW7H@QK(@L0teuLXS1jk9%9j=l*C zakTxfDVmlMF3v5fs;aE2(%aXsBFQc8Zlcf5FmooC{!}MpAx^^pEj0xdLr&qW2qp!e z`i*{?3QWFH=^CsYI{Ny-9IP7YEme9_N*d~?G|ryUP?XVY@z`{2&D2fvT=iGgi*Op; zF6Hsn*HBTAQz+%VF<*>Df0MqZinczBSeCIgQ{DABKb#a34zCqgu{y*3V-Yi_WagI~ zL&k&7EesNdZZ8-P9+}y(V_QN*Lz8RwWZeKCCAOk&E=R4TO&XHHt{q%j+gxlIm|8o; eg&mr?cz+2WY1B5-lelnX%Stt7@ejaYvIYP(9Oujc diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/envelope.png deleted file mode 100644 index 44398ad137f1d9591692ef073059d709bac99762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmbu+>rYZ)90%}|sHtfs)0IYVDqC(=uKA*+wKS|OBd=S%NS)@IT29m1T$$Q(D)Z7T zEnbwh%*#~NMDPHnP=GPO6olp!Cs(;0<N(6qW{1C_XP@W$y!&mx@6(<|xDgQ+8wLPC zM8-{g4*DMP-w+I%GTW&h0N7WUm6?~WG+6ik?|3{Obb#0EMbqteI}zv5@V8O&AbDbJ zVsd=y`{WFjLItO2vojz_1L-t6eU?5)WiUVn6J*XYnDes>3qM%wc`lE`TjcV7|6Jt% zTI6&10-jJL5G@Ip{s<+~l~t)^Rkk9Pi8nUZ<?;>r=K7XmQ>ofgsgx?ULZw!!H7bo( zt=U#<wQ8MStJ81m3_86YrPmvD2BY5SXE2%!CKP0Z{7jJ92$@Z0KghfTSuAFY#R9`S zFpMS)TVX582HX6sHoML4XW!kmI~==CrvpJyP6R<*F2v<_q3e4*ZnO%o&+GH~&_WKS ziGtC_akV*wTp%zk5*vLy{$d6px30dM%9G0En+lEA1l!$Y?)6smOA<2hsd;CX8U$s@ z0og}eE#d-7`SJxy+48NHq~5kHB0K6y5An1nQR^<mjgab<FOlay8D?Q`oP2V9jrb<N z>udnclx4YJ<}iC9hqo?{7gljfL_J5iE1FkCjux|?)+F#xxO5Oa=8EYgscZUTb5h&- z1;LV4O!#1Uj-a?<?eaCNyj4=AAs9G7TkSwaM_&Vz+4*3A5J(Anbj(unfja#;h$`f_ zMdSWvmx_ZAvyzD6jfIaB16|c229mGGO}g~D@!$wP9&EndhmBI<c2k-|?}*<v4eduh z9e7qyy;0R=p82SGSWrRZB372YYFW5dv?cyp{(iJBg;NRlCeyk-P;zO1=<xKH7rFPY syvxV5x7e_3=0JKtQ)UUC-4Pq(4895y&(~n%D$#y{jC2B?oL2Pe9}J85k^lez diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.gif deleted file mode 100644 index 160be8eff867260e6639fc13185db595098fddd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692 zcmZ?wbhEHb6lV};_{PAno`GRC3(I;Imerh`t9f`<^7C(JV%o&Yx{HZv9|OY<7M9Ii zTwA!gckuD;;p1B)Cbm{ma=o0~21UgU%F0`Gb+;KAZ8tUDX=8JNmGufI=QTdQ>wJ8N z1O-n?Nu80Fz9}epTS(}(sOWuh@$1skcO)e4NlM<9m3=HNeMM36mV&}vRn`0I>dzDu zUa6`+)YN>Uqw`Kv^Odgd2YvlddV22+489r}eKs@uYHt41-28{7<zH*-f3~*&?d<kA zIqh|G+vnl2-`DqmzyG1o(8CcCM`L4;CnlcE%sf|CcD|zGVr}i^mX>S1y*DOJx;b^~ z?U^(0E?jtj$&v>vS3X+1_R;$FFZS(wd*;lCYuCQNeEH+`>!0u6|Nivp&$n-XfByXc z?;itQfZ|UUMh1pB1|5)Xpg3`0|KAYT)ZEhA))dQPWZKi)*WY6(5ZfB-#4a^cdbSk1 z>y)W>a@I?hm~q>4n=iGomUUbZ7sRNhvu*p1?JCS6?JY6B;{F@=#l`wL2#UFdO^FS4 z5oWdZ-5BejZDnnB=kDDl_qCm4V?AUHUc7wu`URiYHBTm`&tH_(KPxhMA8Csc<B(vI z+Oc8jjDyWnPkanM;eTPOJa5d61&vJy4AhtdZk+gd=pesN^CANc*Gq2Ap=&+1Mj0H9 zV3D#YdN9LtbJ|%ML$wLJ7bLZvpYPE8%jaS9q-pGGQ5vzQw!GxvWEC_N40zOXb#;XQ z1P+F!iQ>xab`2807v|h#c9;71X`w=M^maDEh84CgtxOFp3|c9U86FD{IxtuR08VrG Am;e9( diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/heart.png deleted file mode 100644 index df409e62f55f9915efc6b88d3543786ada9c2897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmV<D0~q{?P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000B7Nkl<ZNQt$S z+fP(S9LGOrcR>y=EE0+jENy_ca@j?ofHzuh@e-|#F+P|WlD;$zCVk-#;IW1m6Vq6W z5q+R(qBeCC64H7>h>&Olkt!=1O9|{r5IHP#_qgDm<^1{rhRcdX(r@y6n3?Z<zB7}V zQ36w8{x3O}H{2OcC-5y$0h9qcFaY>8-MF*NcLMkd*b8I=eZW27CrvkkZ-9ZRFoCHs zBC<;?>-qE6R=IohsQi|lEuCd$@}RL%W}iF}5&2O>wu{Km)BXL@*U%uoyga$;a>?zw zI(c^fyohCui^#qu<`TGOZgSG>I&?^WPfeAvf&vLwR*GI)DnmIra^2~akt<h3L}E|R zos;XTDo^wB<lpjgncuTVG>=FANKKVH2M);m%a<_``64hCMiG%j;IFQO2lHKiKV`YO zD2lS;>_U+U-F`nQH8s5I>7mBs!I_k_!XqN|kBkthsG!>Cdjgc$fbYhxUCW>A>x&Bp zNKH<r&g&)G+e@9-y9NxPC<>qD<q^Jhi-6Bp2sGM&n$h-lirj9*val8w;#P7(0{e@L zNpd*e>cO%o%*tZy>Q#Vh2T(lw=n<~;bYijC1}@n8N=Zs$=HWvCuLDRmLm_P2wh=SU zO~Vxt%uoox=>UdY9#7Tm#02SEw{99fV;H1)JOGbvz+h%o730AmG1J_1jR%8dR#yWI zDkAc6bar;AW5<pyJGX4X73U^wRMU|N&k_^)((gCys#;*vbmQ;Dw6yOlFI-@7VuJA8 z+<UD!6p1jT>+Ei8!>+2$nr>*e#n6`Q<HvivXV3ER#S7+Nzh=QSH(ZhVc?KsZDQ|0I zdu?qe@B@Id^eehEoGzf}QFHUof6ko2o1Tt6&VyR5m}T*JW`_Kh77Ci0?gRCjZbVkV z7Xv;3djC9q`qRlvm&i{^VLiMh!f-guhfPhCwzLcbpKH1?y)>?@{?FYR&X2^h`g%{E z%nJE@<f>}i00BlK5i%MY*nRnO0NAJLMqs&T4SX@6(27Ry-92(7J=WcgJ0W3>XDk{e z`S4+?Z`=qfc6*hk8^fzTap8*ryJF#R*X{cHWc$DXnRfe|v5AERY<u@ofAeO<uB!E# zZrqQ@u*K^H&~)R0BPHcnZD(gRT2#cSX%aL|MobeaDWRsL!?dgFiMN5*UHP&d9Fth= zm**ERs-x}geA3uR&Z$$c6ubRvO*ejBZ|*zcivcCTH-H!D2U<1Vc=oP&8-l;D{sRff VSf%JUq4EF#002ovPDHLkV1jhu=wbi> diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.gif deleted file mode 100644 index ffb23db05a76e7e530ce7a26d658152a37028ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmZ?wbhEHb6lV};_{PAnjFE92GxKUTwsq|6E4jGVaB!^R=ikiEzMYkIFFX4N4vtMc zJllbYmv;vT$39NZwc_IIq@_0~DeW*f-(_cah?DauKmSQCt~1=+S9y642n!z)6+I&$ za6(M%l$h87Ny(#fa;K%G&&kMK6coHIB643|{(+?ABRRPz^75yZm2c_kJylS6tgik{ zP3@(!@=G<f$68viG&EjlYroahe5tShR#*3fw)SUz{Z|GC?~II|T3bK1xBqNl@WsI3 zyNSsUGqWES7C)`5e%jjpx3k;h?7ZLG`$$yOV+V)lUS9v5o&USK{`d0w<Ky!zEbK*a z@bmciKjGm&qoPivrk={qK3iOTwxr~IW#xscs*81XFETQIrKY|rDfwGk`nRIu#>9y? zCQZ6Ib?WWev;WSV`FHm0e{<*FU%K?+nl=9xF8sHA`QwcnpKRLnY{!m&yLZ1iefr(` z^B=BW{dn`{*T;{)J$?G)&6_{pzWx3A^Z)<<47h>fPZmZ7hH?fSkP=XwII#b3C~s<R zX>DsNi*seQi3)VEpJ;D4#m?5=hS?>)tgWmlAxM~&MI<z9ZhLcCNq#}u+zt7;g)3Xj z!r3*n_vjj#80qfS5ECg~b>ify)8%EMTozuQmWs?umd@UeQX(ZS+044;#%6}n+)NBi z+|v5S@Aa9}ww0H<F)FKC`$k6lyQ|1~6dYc&;9xU{u-vA}Y)wq8LL0WMR7!MUW(@1Q z`|FSchoo8hE(5_uE!`3($qPzmOgiP)!e?6XWyZ<JZfB(}itlwibaYx{z#O)xV7U@& z2fsqlijIeiRx)dSc_UGn@Q8(5!XV|qg@-JioP2^$R%{AB#?ZtiVU)6Cf&#-tOID7= OlS`LxShvZ6!5RS1a28Pj diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/kiss.png deleted file mode 100644 index a4f2f36382bf1c00264b5514d9b00d1a70f720af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmV<H0~Gv;P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000BBNkl<ZNQu>z zPfS!-6o<e2=FOu6&w;^#8E`N(Qag<eh=G(g*id5|OKe%y6=~d%MqL@pqPi+;-5@bt zVBIt}7($6Fv`B3ekwB^xFfvJj(s_ka9vw#BFfeasZWsIsjNpz%f5}a5?#cOnxhLn` zE5h?j?3I)~Bkwg_-7OIC>bZaqZ~!60w9*;zw}97x7lvs~?8Fe6H4k|81Hjj*c>Hr~ zYRV~875Cx8e*>MskHAO3r!U6GOKi)+<@b{v2n+$uhH3r0D?H%U4*`9~-Ma?|o0`xp zi&Q!d#l^hd*vNs?r<uNUhd(<zk+ZY7G!1KYm9k5hsAy@ig{ppHnAW|Q-~q3m4-7tO zZax%lYva9Okb;5&NT-QJB23K95jIUq3koPLEX1Shpz9<S7kL~CkvMXM6Fogk4wtKP zqfA0dxesUrnnKsFS595N%!$fMoM+F%!Gka}gM9uRIW`872;}4-Dk`9?4B>VoEeqM( z%RpZr+L<#{x3z_UZ-I6prTiw;+WN)p{rfCDc)-bEknHMeWGsf9oP=~5q}(js=5EUw zfSpRw`|KIHb#)Y<Iz{l}#qWib@|Pb1f#b!t%^N-+S*p4%c^e`Fm}!(qCYdx%W^|o~ ziHRW<xL0%Y=JEc921;^sacJ6RlATI1zOcYzJkDw&fo<D3oldeejXal&H$5Jl4#%cZ zGMOYCiBNUp20)LHQYt{#@9pgkqZcmlPDu%xvNl^nRr%NHBpQp6u<bRts-kHcxj8xH zB@#&6-n_~1>@41M=QwutYCljX!t+Z6ym~h9@V6^hs>9c=QR(-i2(jKz0!7mhstT%# zOeT@GO*)ZS3u_wbl@+F=QDWugob2oSN2uyC!?ga|+KN7;9C*~&SZZ~35%hRaoKA$x z1**DMS1CbJQ1bF{`2EOuoYj#LOv_?AD~pexK25obias<<>nGSU{)TDI1-yFwySHxj zKZd+tJ31(HyKxJFT3U+3=R?WQN6~ds^Yhr#)2xh*5st-(78deBcQ>x0qOUf<+lFXE z0k8fx@ZBG`Z&wVRKhM79WpY%NY(*hkQILR@N@1l^M3YI}b#>Hsbl6$@_kU@aR_j*Q zOYn6A4QPqa%ru9)yOqfBFpDE2L`O#f@Kjadt*N1~wwB`hdP6uIpBbh#kjdE*zQrU6 zybl}&jv{5blu{9jG6+0cUk?q_THY!DmGB+R1Rye>-`%w9d%lwl(~@Ki?W^?v{pR)* Z{vUNCpEyW^ic0_h002ovPDHLkV1jyk-jo0U diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.gif deleted file mode 100644 index ceb6e2d9ea3a6496e3df43e6f815567f0d840bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmZ?wbhEHb6lV};_{P96J%M3XD#yGmftA%dYn#lkbuixUW4_bNc%z^1_C)@h69jKh z6}dZI`uQ~G7c*GDEMWb=lKsOXj*m;Z|F7lxznTC47XCM@1io(-`LkKz|8~JY+lBw{ z6#l<g{QrK5yR#MV%u>HM-|*f7<NFKE?k~1{v{?1+Hq9S9RNrqk`+rF4{}JgQ2W9>r zmHB@{{@X#N|ECoGpI82WR_*^O-T#-={$JMme?|ZQ3A6v#?RQKL+%+|H-|YBj8=N1n z3p~6y=g89h6RXNkuBm#qHSyVwwC6iB{@-x?f79*%Eua5)!hc=L_;V}c%caWykBa|4 zsXxE9^YWg_HxAE#eXQlpiO#pD`@dXmd3SEw_d7HGKArUc<>Y@)XZ(IL_x6cpA1*KW zbaU;a%R3)m-TmeMu0OB0JimSP<=vCto*euB;@rEZSAV{}`S0tse_wBZdh_7x`)9vC zJ^uIO@&BJszkPc3|Nnmm(t+Yn7Dfh!d<GqmR#2QcuzzgGZ)$GNYin!iY{`>%H`LbF z(b3b>*VB^E>*{Q8&q$dyyCsz;&CO`V3NsJR)J3h<f+CwmM1`yuu5YzvVzErzxhp@< zUoIp)C*G6W|6o_1QiSu$E5^D?=N5CR$=tmwt0B&@?obvRzrag=_M}6tkrwuT3As1l zeV?6|?5Mz@;F$cTuxU|p?^Gp|4vm#gOkD>OotEe<oR;O$slaqsVF%OWR`-5`fP)Sb z1W$BIX#^|@;LL1gRp7syW7(kCe3n<*MCQh)fC;lTdDR?dI9zd@GOu+{kH!I$7O^F* dJAUjiRA69G3*cV*@=^<XSWT<dUM>~}YXBE>LOcKf diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/lightbulb.png deleted file mode 100644 index 0c4a92400d0bb454a1f32a54b0ae0bf6a782a960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmV;I18Dq-P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000ACNkl<ZNQtGC zU1(cn7{`C7Y14e#CC%tgnn@=%F2hQTirs|KO;jvcWkRpiD=!oW>WvN&!5cw07<wgs zP<kbL<BgllF{jg_o3$O-*^g+0=49!|$w`)-)11%5i-xVle1Xr+dC&8{|KIa}AKv#B z(wjGF7O_a+Vc>D#C~!Zp0GtE9mSpvpW?G>UJQfM~fDiQb`4{q6KSIy`ikVO14h`ZF zA0#yVBA&jHkAYVtS=HNy$0C6+RDP0wem7CP_8HM5Z_q71g3#&1DbAy3XUP8e3A;vK zC35i1-$59YWL2r<bTrt}sodq032Wmb`<}amCukvLUW4Q~F6Be~yG-tS`fW;oO_RHP zatJupmh)I7FlH(%7o{(cvhVrx2-$aFYyQ8=E)mC-Aob1X-1+Pk+~N2UNmjpa<$O|^ zJx$-?mk{z_)CU7tSzP61!h=zi+0y`%wM**3NA$Hhx_d-WFVzR%DzJ{%Z=kQu0gTj6 zch->%8Ojna!2&G<*xOk_00BU_J+9bv2Rbm6C4ixJ;F(Up7`Jm*>2kWk(RV<rMRpXk zG>cBZ2#~1-)oaVFum2EQdJf87FfA}`u&Q6v0?WRYSJzd1{f7W%+ks!`9X-KDGKo>h zgI%sd?JD&4SkITpWy<u9o&dPe4t&}jjxUH$d`kL{Rh%uOu4|`cAuZ<-$ER?I;|sua zOSmMf4sbjeKUVP!OrYlVnzn4a))XDjzy!hgF@Tq=x|Yt7Wc3H&EC0ZwlvJyxE!+R4 zn<l=!hXKw?a{V*g==uYk3*7xATV@BEW`k1(+X34_E1Ia9jaPgK;Cv%MGx%>^!5Do{ zonh1U0E;P;#gxHf%4CE4h&(ohxBnnO!)LeIlj{ajKy+umQYoV<X>3Cy6g^-9cSy2o z)MM1UL;y&#YQ`b~CB5)%^!nm=6xLU`v6ke<#-BKr&gkU(grWzoGy*q;SK}W;%iUYt zTqPtX7#N<QXHT4-zCpaf-3IVhGjYSV0K_7J1TeEz$cB{b*C=F{C}fujg!eK${(4rD z)o4R;E9a7|F2*7OY5wecp_Q3wdiLByNZe0!{}{lTX4;m{tL~qvl$|M|!xaP^;BR0C tI4;R*@qfXq1$G0yz^WvxW=lae{slbFowx5EC9VJf002ovPDHLkV1hLczo7sC diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.gif deleted file mode 100644 index 3177355fe8a5e46fce327ebba5b1484af2584de9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmV-41IzqJNk%w1VHW@w0QLX?mtX*`a|Eq)1+97tuYV1>e+RmP3CWNT%b66*oEFTT z71E&>)uk8bp$zAw5C5VA|Dyx{r33$_1^=lB|Dy>1r3?S34*#kM|Emc9tPB6I3;(kY z|FaMOv=8R37yqde|Ee1Qs~i2T9p<qa<+L3Cw-Wcd7yr2v|GO0bx)uMu7XP*z_rDwe zzZn0$9p}9w=e{HUvLXJoA^ox}|Fbjyv^4&^G5@<Z|Ft;(x;_29Kli~L_r@Rp!y5m@ z8~eu}{ly;t$sgyyCGW^5|H~o&&LjWNCjZeT|I;V_*D3$nE&tsw{=_o<(Kq?qG5p*y z|J6A9(?0*<Gv~KM{klQ_y-xqWP~p93{>DoE)<o&YRQ$nE{@q;s%54AJWBb`<{MU2; z*LeTaeg4;e{o{K7(18EbhyU4y|I~^9)sFwxkNn=B{@$MZ;e-F=kN@ME|KOqj<D&fR zssHM(|Kqd&<hB3iy8r9A|L@cP@6`YC*#Gw3|M%nn`sn}u`~Uv@A^8LW004jhEC2ui z02crk06+-;009XcNbrxrKLisB6jP#z!y-HY0NBAoq6rl$PK*&#hG3ow9ZHnoz+r&I z0U0u2xFEtpo`iqY$Y`TwfdLXniu@>W;EJ9cX%GthW2Hooqdi*mz?dS%i4q&4+UQb6 zD9k!#s)Ptpr3@Xb3Ww^!aU;x}K7H<-p@KsX*r7O>WI-ZjNs^pI@*Yt_<P97gLjQp1 z5hMr@AVdfd0P=%?fgMjvtf&J*C>;qZP^f5n!a;xl4We#HxkUsWm}n?W(4ZlO5+x-j zNO&N@%-gWIa~HH@#!3hgR?OJBT~N&jFmlLnfda*gn>}$rsJX4j!j~utgg8m!kjRrE z45sjr0ilOroeWKk95G@<L4v{v5F}OMVowe`L#wDLT$qH!5hF<Cfm0`7!A4bp2-brS zJ^*pl5=t!fS_&d@u)-RZ2~@@gOJU@pQzD6$feuu3B#<99XmG+)D+(Y{0HbAaK@2n0 y;737dNT7jeFc2`n3l~f<K?D$>LEImB&;Wr15?sLK0}s%E2XP7=bP#R<0RTHW+Mxab diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/omg_smile.png deleted file mode 100644 index abc4e2d0fd657fdb681356a836a798f6b97255c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1122 zcmV-o1fBbdP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CjNkl<ZNQtGD zTWB0r9L9fVvYSiYrpfL$-E@=2AX;kDi@AYGm0|@`A8ZgoiY?eaMG(b;B0fl^Z@!2Z zsBZ=g_~L^>&{j}T+buSenpo44P)$uX$!0s7P4<#xcW2J=VP-a)CRM=$-wgk`{LVMu zoQs&bo92G4A?T|Hx`9rh!x4b)Xc&k@jZA8*_r?9-4ME>=l>C&~_aTg7Foq#9Y~KuY zLeNp@XbhqCM~%$Tzrq`WzFOcTQj;gSavHoQG&}`?F4*xn2m#BZus8xU-$A|rJ)c4K zBZI(eQ6rPw5^jUlD7QY`!;SOGI&fOBvkS30hR9DN)^39WDq5hb75vXZ;tE`SQ_=di zVBhQ0AP%`5+zbDln;)E1Qy*jPKcg1s#>B$p&&2*p(b5)RcViV;5;JG=!^IdiwUvbS zpCH_Mma<>Y!0zYa(KiO8M&{H8ctg;4oYcfueAA`Owii+P3Gv&tTZA8~!5{YFHP;Yp z1&|V?!m6zyZLBc&#}a;jE1@F;@O6jcnI8q!d;6kBW=PE3P1~bFSrdGFIHY#uQGP#~ zH3QW?Fipr6AfE?I7U5_bRF*?!1te2Y{|;CcFn$4!U5+8j_G(Td-OODIv3diw-HVo+ z2FrrvGNiKT5d&RM6~X#g7X5k}l4+QYLwW@!&%@3q!0Uy%OCg}!<G?#f=&-FE%}fBY z_#f7C7W$Pq0Id%<*zl`{T{rKd(gP?3)(UER08xJg5;}yR?R1@YV2nV87cA5Md`HPe z(;guTlFO20O0L&woUd`BO6sTwn!y+W=<pQb2_5P^5=&|b=c<BTb>)Pbwga$hrx&DJ zuY(@Qt%0RLN<``=R#QloC3H~=x0~z2ZAzh87Ja9hZMU;=P>Q~n9<-ylGjBU~or?nG z7K*RCvFHTaVI`-PMp9HX4$+16`p!H|&6h-COL^<S7!d^80rZXVT%iPNZSJI0vb0uU zNt9NNSQ^KLyRi%tXop*Q@L46XI0pr>c!9{TS$o_bs3hbsvpZ1Ajzod-)S@k3gMDWK zhF#|o!o4xJAArp27EUc9W2?jyCh>$x<VJ3jd*!V|EZ;^{?S^n~42Wm|Q6rN=c>3uX zfUE@tQ*MgJTk`MAy&%``DJf6|Q)=lc=otXv>5m$jl<S<Rkr|?<WsrmCU^%N%FlDK; z?x*XiYxGgq=%f2+XhZhG%u6jhr*ZIIsA(B=*Y?dzu9BmSzrTmk_n<=AjuqhB22COR z!9QnVIb-K-T7VZ0or9LQrV-lKORm#_ANYi&-%oJ)Wmp=8GR@v3G?YEnr9j&AfZE64 z@Bq}begV81H8P7X>z}r{7f|K}W-kUwj8GKVL(NsV*Fbn)i5i(N?`7N<UW^Hz1loXh o=L~Qi7;(-&m2PeS8UBCU->dy$hvS~s0{{R307*qoM6N<$f*}_dBLDyZ diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.gif deleted file mode 100644 index fdcf5c33e3973c6fd0bf87b615ba4bbdc3b7e38b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeH`{ZrF*0LMT3GPk)0SsSu7wzZuPkcY8=Y@XxXkYJc`vj^-hEJ-UX(mJTq4h7@} zjUQyoJ9$VW2By-gAwv-k-DKK8PKQ$-N{I24m7O=PYbE=B-<|(NKlS<tUU#p%S6+Uu zeq*tW$VilshFzqgn6&Pt+CPZ<dO!R73Q=DL_i_cNyPOxQ=iT^RICWBVy*c6fiNu>N zvYC?tv{5(}hc+%wb8u!EI=DC`!08o>u6T6t;1a+sM5hQ{@$ke?JH>M@8O}=3Aw!1( z-z3rBsuny+3l~(l@ECfe=uJR>BF-m8`{cMRN56_Wr)4}^`dliyGT_N%`kqGL26XGu zn??6;j$Tnk{c3pS7*N2UL=Px&Rf&KagHJ>QS~{S?kOntaVQ>v@u0?P)LTeF9#%K!0 z);;_&4R_Npna23j>5*q~M~`p@-D^UB0WMjXYg_5j9A?}U^H~tu$xIf-hDz|$?xl&h zVq>KkJAlw3X6!IMQ$o*vieM#1st~HhgcY}KxN{Vv^|7fIX6nnOa5d)YG24v!FEHJT zS!eA2S^V}LX1g%g9h*Oog<kyLg9jlzxQ)m-{+dK|1`qFnSppLy|MTA#(Eh__5n?5& zkF<}TF!DeI%avxk-IUFi@(tCL%~6|75nVAwi1?|(c1;FHWZIm#q21`nHcQvN+{m7= zYqu;H9F|Dllg1S^C2u{RdQd(WIAPR}YZA=&_;qTtV{y7O+gj&P8$LV}zB*)SIv9La zYr4W$7<R0b(4_-4jhl|JBimn^zt-Z;*`G7$EX}Xx<ksnSO}EtwHkR!ZuE}(A?HXep zsiKzsdMvqMd)a~3cl;KEv@kQv<n>ZQd7@HIva4&>uUZTg?QT8tZfND3d6gQisHn52 zRCf2+0^cUtaqIrYo$ePt(|s~r)|5W~ywdn_uID2C3ngE_tuZBk#%;D=Dxz%1|K6gj z=R9e)uYO#j@vcz)@!Fnp7VihOv#^jIdEIZWqMj2+evWq(M`~WNir<!tjeiCk-e}Hx z<`yTlr?|<ux5Pfe=a-Aa<`jdSa20bFYhKQX=0$#%K1?WzS4rXuTwk$-=|P>@^!_%t qkE1T}vTO=}p^q(bnUvZ?!^Fpy?lJmG#KS@EM|@S8cpr;JHvJ1$jidMg diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/regular_smile.png deleted file mode 100644 index 0f2649b78af3e4e11df8026e70531a9e0c81b117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jGA@P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000C7Nkl<ZNQtGD zUuau(6vscmUz^s<tbfxjb8!<L4%=GX+733S4EHeIgBvmswTkmeK`O!=f^Sy#;EVVN z=9_~JeDPsJm`)UQb}J*du4C=AWl)-CZMWPkS(7zMbMNo?aBteAv^em<my?^z?{m)Y z{LZ;QHJ!||mPNy%24D}+3-tH`uzbaU%LzL-zuJ1W7Cagb9YV~v%>5R@j)5J6RLpzX z+6!S{k^OTh{cgg}o%>ICG#qLMzG8l&k4r}(;6U^RXx#;kyFn?qHv)HuVfq(XEWxwi zLBo@0fc}J?ORoy|z%s($UvA<0fVf>p6>Ymv`D>`fII3_H1gP(TU?;S^45>>n^pVi{ zvEr!@;-H=>2UrO|&5bYmWb$j=r{58+ZY!Pt6Wk)W0>*%AmOXV4Jq|4gVDNQ#<P~WD z@Jzzay;%j1hC_##A3w|aUE=I~l^VIJl$iq&PsXesz!+%S58F<_k3GVHKNJny4=3#0 zIW?WkdR-yzI6v);NaG^X(t>v4pa20YmH~mD9U(9V>*{?#=xMKC4!Z4AaO+|0B)l{@ zhpO4G{fg{i=0b%0b!2@2U5qbfR#+%u4c@`JbcaITp^$g6hLTuAHif(k#^24v0JJ>^ zfdI^0hyZ)a@Lp0DtgAyiDKL(=W!I2SJKiA*q%$t*jJy1t6%Q@~&H@rY1)KIk$^z)E z_2E6(!%!ap*QsjFjT`ESY+djDZmR>4ist|ni(ckNAZ;O$BdE!<06oj_lm(k=4X)8B z|6c*^x*UG%aWC81BpBiF8;^PK<8xI9t>$mwZjDGy%2JhZ&y0WiWfSrIOw#WdzXa2_ zmup?=RSAl>mzI}nZqeEe3q@V7^#jRNO9C6f9#*t=16bAYVyR-W%hhXHrl#_1f~RK| z8J#G2WpNFn8&H`sR>EVnc0+y<T-TRj(-Tcx9?tRW#d}On706~CvRQ|zM3LXG+~?v* zf#ydWz03uqwi$JAybO<343RU=`P~tme;`=zg<KcJiG&#)oMm=$o@BBJ0^x8S8@Gh$ z+P9fNd<N1vq&|Z1Fj_wZ2Z!cRwcD%5KQnfg^S#hmXV6+B0$M@12|_^#2ED1hpNHH6 z+_ItMAfl1lR-+4dH3zRiQ^)f7mn|9&oo4LwKCXQNp`bx4?G21n%dGIOF}R}Hc>+3) zFMYT))z(k@u{d1=FkjN-i%a!ivs+3Im>SKF&!GKS9Oy5@R=X@(fN#i*zQ*9&kQsp* z?OhTY@iSEze@D$bVDBkt>iiyfKVj$Yt_iOQas+Wsa_i?XsbQ7`UN@Ar`9&L5`(DD% z{jid;CfpCu3_K6)1iF0>@E0)b`-_!V+XKV@ul)-&_G~mzY8N8_0000<MNUMnLSTZY C!Ud)P diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.gif deleted file mode 100644 index cca0729dd5f9178e362b83e70523ce33cbdc38b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmV+p1M&PvNk%w1VHW@w0QLX?mtX*wVF00M0-<RFq-p}Me+{*H1-5(!yM+wQj0w+@ z4AYYf%bFC+ofhPq3Er<8|Dpo_qXYk=2mhxA|EdT7r3wG14*#nO|EvlBuM7XL4EnJS z|FRDMvk(8Y59g*3=B^k2sS^LH8vm;s{jDA5vKr>M9sjoy|GE?Vx)%St75~2%|F#?V zyBPn!82`N;;I|>-x+4CxA^ox}|FbjxyD|T}HvhFa|F$~)y+8lFKlj2N_rxCm!y5m@ z8~wu^|HdBw$RGE}A^*%F|IH%*$tC~KCi2ZH|Ij4=)hPemFaE?b{n0o7)HwgWP5-`7 z{>DoE)<pi;LHxl`|I=Om-CX?2Z2#M1``Kmu*K_~Zc>mLV{?~r};%xondjHUX|IvZ} z(uM!oh5yuv|J9EF){p$&pZ?yS`{9HC<d6U3n*ZgS|KOqj<D&fRssHM(|Kqd&<hA_e zw*Th3|LeH_@6-S9)c^6=|MuPg_v8Qi=>Puv|Ns5~0000000000A^8LW004aeEC2ui z02crk06+)-fPI34gM5a3go%P+CqzU;L?!?LB_)#}E-ETqTVI5B6&#H~9Hkr?7%M;* zBo=jvd}K0cT}nwwNRL59Yk4+hh=P1hCq2eJE-ou8Dkvu>9;G!_PQkEnU``?;PGE3* zim-P$Hd=3bdURqsICs{CH%n1SxD5@D3=GCDYHT;bd_?pBLXe;mCB_amJJErK91+3b zOwgp_0|5jNjvRS_V1NTuQ$)al6{Z3OR2VQ^puiG>gfQ>I$(#vmPM9YnMmz~KCnl^i zA+osfQl&|gD{1hw5dlom9Sc~b+`^S>2*Dmy@`$)YD9!~YMvx#85+DGN9c5cEdx1ws z9AQptRs<PBmq>vER`34MbOOqmYJCFs@Zkf<F=WgZGGt)};vx;nmZeZ|K!5-P2{xF@ zp##jIJv2C=K%oGJk|D}~B#E&A1Bn?oz!e%Z!Bi=f7${7b0AY;Jz;$Ru*sVK41PC<h M{8n`6(9A#pI}DMAIsgCw diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/sad_smile.png deleted file mode 100644 index f20f3bf3c09d5f95f64deb2b0779bd1cf1a20acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1115 zcmV-h1f=_kP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CcNkl<ZNQteL zO>9(E6o9{bJJSIi`ZF^v4{5+CinJ9hZAm~>q6?G-5JO^AG~!AVgVCUIWsDfN#-9Xt zlGwz=xPX|Tm>8lK8|_puP@sf}PKPpW-*l$aY3J{~dtAKN&J;^z;Z07?yLriX{?ApT zlQS%J+G61bU^~zY^!Nf0_hk_HC28k#O9BA36ud1K-iw&eNc~`84}v`i=|S&jv=?H& zSdXVr`sJjZKk=XNwph3s_?X<41DrVsK?m9%gXmUh+y+X)^f{Osg3<4xT!Du^hlcz5 zfI~?;pIH*_f#n>RK3dE9BjRp4sA$=WD*S;eCs4(!AV8=CmUlvA52Vk)z?(wn+lq~^ zB|tq`YoHeX1s6X&AlE*@ec&b0YFz2U&)}B86)*-|Q`OW%+glLX1^v&$olimg>wQT( z|NJ6&TP(bn+{kfGZWU+C)6~gTrA!J$JTYcz1I9qp<FNh%_@+nL^`oL;!@l_%C=qEu z+!4OrVM${diA2y&0u&$+AIyS4PgfX>A%1oi5PI4}Rio?Q12+W2N8!o-6sm4R($42J zu${3}7KQW3${@OwSn#YkS0Ua%LHx`F#ezez;1VC0BtBqMEVy9&Xs#TAmWLr2gt1eW z-@<61mvkIf)T5m=7{?3QHDof5S44qK)+Lj5tM?i4;3DA6A&FzKdMBjg__IL(=)oR> zP!L>aQJ=1At;bro()(_y2a%e45K1M_b0d(6Bi4S@wd3FqoCi<GVRgXZ8jbSF0@`)i z_rl$tw>Kui2>YJ9%ln^5Eh@CiUBq2yNnJXwYT@27e)Z>%h^NOU{f_ZdFgjk%b*)wv zD2*?QTmx~U-7r_u^SQn)F^ffltzZu+qTS%_9s)jm4}YD8Wua<L1RO`WaCwd!6J;jT zUU6g1b*zd8*mQ4@pkl#$(G95VFtk3p2tG)(8!nY0>@I|qny7GkV1^cJIrsOpvSV!n z2-t~f{v6Ko)u}u?yF#pqYR{KIGkWSb*!Tu`8*_e$oDoiLvv4lMa?ks-SIR`z$5?ky z7_u`kTlCVgVi`28WHeb|dSskV%OD{O;SRK32D=ARsKAD#ozGRrKRbM!lfBSbZ_rv} zMZK+OXZ<xmwWwks(g>k?Br%BuqDB{|G`oL=rjCX2*8oX7e}bltJ~qD#)3ch2W4Jy6 z6PcPKx?o&Sy9UOm;O`qKr)>1>m}c`k(A3dayW4e5=NzK_aDq)oAXm{8N>$LUx~1ZP zsnc}55ABB&z@ge!y!o++0H2b*@C^MgLiQZgY44HH2qNGbh4JU0xeIn2gQm_efmf4u ze(IL+8YBA==P1{|i;*5;K>(uNRax_djS9SywDVv83vw&CZ=e}?1lR&}`x@YPV93`$ h-TbuO7X1G>{{Vo&VsT>6tr7qL002ovPDHLkV1nEx7S8|x diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.gif deleted file mode 100644 index 7d93474c32aa7d066bde566fdd746483f5dd0aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmd^;{ZrBh9Du*Rqo#-COCgz}<X)UF3Hk*#K?#F0#jQALu0cXd!+gWUuIqd^yJhCM zmD5edbZF`nbu&>9k}mLE)5)f;Ya`Ll)G~LSHB&!Zf5)C5p5LDzp2OUDlq&K;e2`ZN zauAKC(kU^FC~6EE!$9ebkLXO4!J;zbqFL-{_MxbxqvWJxlsGoZj;FEMA0{6o%TK*u zm=T&Oj?5C$awXx4%*YG!=<_+~`CNJmpLvoWo01ZDQos^^&K3&eMW;DwX&iC-QIR-7 zB2AEHCKY6H#8STW+;K&ryhDa)FF95gMwBTcM~j^Xl)=+C+*cZKOW)!_Wd|*G(E6X9 zpv?i)j?jXER@aSAH|W4Xw=4YM3cYUgE!fp|EVSdG0}r=-x4ZViPdK=<8?;_9;=Q0f zuyV(LM-#BqAF!<nS!hL<zDJ=i68g!Yje;L(FwEH0`GS5gjNxDF{lGwgdjv4;U(p9X zzZ<wT_U`g{*t7A_XA@yC?hii`!9;>75=;lfTp0Wjx;+-NHbYsPiCUkbtj|*5&j>K1 zU^xg@3OtFfE=pBaoKRNqm0t=PYSS8T3LEQ1b@h^_`qOQV8O`5hshZEIROzag4DIc7 zZP!_?CR24QZ+j>fMiOC^XX=rd`ZJ6JXN`k0(~!(Kn!TmxJ)Qbw=TWN3kZ-z|Z@OP# zG!||>5W~Z?t(iQSQEbo4wyhUnsu-p#VXhp^Rq$Ii{C@4t<5F0-28;DzRc)=d!*VxR z`(R-Jo(#dtAgq~TeHJzz!K-=LT!Ni9u(O5yKM458-UdPXkdU{zZ=Yad07-WyaC(~b z#qGozwb_Z+iral^Sj{Z?wJ}D?<1s1WUn}=>stHduaphdE(Ban>y`joe;2<f-m6*(J zoNP-fezC)h<%K(q<B9P$mGlBy5RymY?s32`&(0Mgxa&=E0&a7T)zO_0DVw}}*JVX7 z&>YW?J5+{IC3Z}B%e=<QN*%pN8zNX|CUDL!ez$6-j=ZCCyhwPgw{m_d3gP1xME#2E zjdqnKxtqPDs|2dFC&)t@WU8a)K2S#(s+u~JD3^@Sr^YHX{m^q0H`lq{u>xIb<GyM> zn$z5+PB6(`ygN^Pw<}q?==*{CfQsBq?YpsSZ>WSb(%E5arg+*0ZmfEUnB2cewoEl6 z+2YJk#MpYMSd~0~#Ac6Bx4-m7FekuXPMqZVT%5#^z9Qpn9aB<sik+?`5V=Huakzbg z#=o}AH-xEUx_)uF!r+yu9Avu6Qflj%YD<mbDo2Mkc*MUPw8JtcH;h<<o8gK(<E5HS y$Rktl`*L6CSRS;VzdsG8S%eRd#3;&HZdCclpB+|bml&}uLap<Ay#!AzLjM=G_~pR> diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/shades_smile.png deleted file mode 100644 index fdaa28b786cef4fdbd48a3f1fbf7c7aafc456d97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 zcmV;l1WWsgP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DgNkl<ZNXNC6 zdrXyO9LJdkUPwYrE$QN=(z5Wv<s8Jg3S(15moag!Kp@dUl$Qh>O_$|bO}9oX#bzD? z1cc;fz$uc@1Tu?2Nt-RX2#Mxgo0W3jPrv7V&(VX*W^MiP-QM?kzrWA(Jip)b{9c!? z{y$v)FAezt@DN3dvPI>h9=pozW9pm7zlKXtESjyC^L6m!TTs6QO1urJXEmn2DUW#X z3NFU6qCBpghC}nf8UP)caG?zT7S6Rk=&ym(0{<e!@F=f}k=P;O23R}Cshv>dr44kf zXW(KHwyw=+XIH{WGqj6-PJ(XnTs;e27AT&m=`kwymI<8Ud7RvVRyBp|=ibz8ooTYd zS#W9wv`vTB$Kk{@I6eiM9~H@aPcHn~DLb5xidBr;;Cha){6zmAFKtssG?7vBh=??i zneIzp<CBtO0e$}%d^Z(ZCevR#nXFVFA{PXRZ$6n>8|eFZlBO8WH84(vHqhHwXeKzs zOk(mPcI{4KS8fW)s}~X!96-1A2?PA?Wcq5SiZ6h~Rng*0*1gGV;s^?PmhOB>o3I?G z$VER=-PLS(VJ0bS7SYs{MZw-wT}@4ytVxe0J=vG)4`xuEGo5uQvkl*|%$vS%#P{+t zG7_Y~!ct5JJe$_7goc~2SXN`LNN2~EmAb4IX;|`7nQJx?800T2_9H0NjAh?TSWDO5 z^p&i}^67f!hX$fpis^ut^W|c~Bh7r0yNagzSJ?A@k}mbUH#d>MU^9O;Ji@iZ-h_#7 z??(wV)ui3@Rj*~=?hHaA1THMabijKkp2X%2CK3{&Xtt))d~B1Ux-^oKqIvCA$z|gt zXn4@@y%<SzRVvL#H`07WbTEaaMDeW)La`Kc5d6~dS=xfA0G2NgC+FRGa^8z)MSKKd z3rt*Skt2Ed0r+Ynms)(#eQ}}Wyd5Wco)vLnghiP6t@XLv;F6XYxz-cpB>A)bbzhb) z_9r&RpKY1GT<-9PqYue;C&;ZFuTOGC#<pk8VQGvXu?zj!wsE%j0vI@vjLvdOOEy1j zfrIxNkTcK7&GR>O#z)fOZ9wbphuU%QxtB3f$4uz7`%XTEtuYu|T^Kscsi4txRYIYg z0ddGWp0*D?xLD+AKx+hgNIFEdCsz-Qp)=3ZSWuZel)5v}umr6{QleN+M^P@(^<Jv{ z46_31uyOP^OvCzy8^viZgH*qD1iybRt)O(Ybjnd^6;rTPJdMs!EXO6fas4m1L;ff+ z+-GyFkRy_&U*}4DH4WA;b7W_dn&OdYMWeBmK5QdjcAyx}*MCssYJW#2xJSw{#zv+5 zD=IwHv$3PkB)CjgdO#LXGEzF{2-xqY{5CAZ(PQt_xNfvu&32Bq?P8JO;t_VByRrRS zp@pvE8zz!>6{BK@YPt3aq-qp!xeY3PB~VsW;A#}R$W3Fvt498CW85;#@F=f}k=VQa z%`KC{^y`&ZM@yYubvcyOvl>(1lt;Y(<p(`hFEpr5R3$oZSCxG%_D;VxXZ-^Yh~-he Sx$P_f0000<MNUMnLSTZa22Vl& diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.gif deleted file mode 100644 index 44c3799690ede200f70487c344508416bcae2a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmeH`|5K6&9LFEwK~PV8kQ5PhJ|48w!K~aZ+}b6miL{z^Tbp<L;<r}2b30x8A$M(4 z#Bc3XBIlfz=C><tGfQM1N~fenx}7KqQtBX-Sh9&tho10!w*H3wy7#?)e*N&eduL=G z5+>)e5EkM=kneMl8{Y(*&Xdix=zRUZP!^Sxr3T8vcT~$o+Co#{RP(N>%i&Mj0vv6D zzg?k22N}A^(2c@X3Utz-I{>cI-Mw`9F$nsC;ASwWLhM}(M;~kLItD$V(943}NVv}N z{S@s`aU4HK|31KWX<zWDcWtSepk{!E37Rk%2?I69GaNx^*`SSn^uvn_mjsLLLPCYZ zP^|A3A5^ap!+T-)RTvb4`Zb^SAdDRJ=%PL2F`#3^ILCJ<3MQgJAG3as=h5RZ84JJQ zaGwX$yJ3b0#@*Y-1Te)D=9l2104#~Hm`IH8^UdssIU(4Rd>RpGkJ@jXu;0vH9{3P$ zXE`*V5_hG<yvRG21;!7E#rM6Fh43hU$8yqZJ_F{nVEl?Of9-o*=(B&hs{a;d%3!tv zj8$N%fCn`&R|lqg*OcPV>1OXz8?n^7V=IT{dRS?3o34Si9qb)mR}Vbx1N#6h4|-SB z8`j(4(7@`@=HoGsa~jr+TdQ-h_5jxBVci0oOW?7?_LH5>r(Vw=zU{w&*a0Ar|MwpX z;M=Glf;1xh=Z@!}NTC5D2#6B)E61cLGw_Sfyi8>k4?$u@;yh}E;Ka2|d!@A_kW<O+ zKjV&N(f1sBPtwpodnvNSBq^Dd*W8Jd{(a!tUTXWOH2ZCoeO^~iCX)&ZKS_0Bq~K(I z!MbIiqJ@u(3yPW5N?l{^S!W8F7RpU6KIcB2HfW_M<TU9|j#_Opidd$aH=e4Rmf~_O z{&<1AAwIP;?f#IsqE>{T^KUlDD1Pa@!w+o={LShVfi25`t;l60a!f>7T)VDC{ZanZ zXW7mpEJmDWBpw~+T@E=#^t1CPr0h59yrs?_#RW=IPOG8t8J3xg=f#xeq-9~135Of^ z)FsC;^dU8g8+VJAQw`I6fkK~gi<^RQ(_A6BGh0EeJ&i~>%0TH1IabnLBqCF3hEo5R z7Z?_C<R~WhODZ~c55L$TuO_iKO4Bn)$7JRH{3dJq$JAeuaoT>D^&QdYk}EQ1!0BQM nSLqg&lireGWl>tn5RD#+GA6>_JupT>h1}y^V*X?}hP?g{8;sL8 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/teeth_smile.png deleted file mode 100644 index 5e63785e42152e16329c5156f444b06f411f1c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmV;Q1YrA#P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000DLNkl<ZNQteL zU5M0G6u^J?zw@!X&dj>=u{*lMB(f;3ChP1fr1n8RxV@-_5S4w{Ll{JnkVH?VP|!=1 zfr1Y$WJJ(|m81p{)~-S`n-iPLs<b(d>*)SxXPued|9t%a_xA9g{g@c7hYlRhy<GU6 zbMCq4TybNvKqH9+Jw9MFuo395DL|s8ao}89FXkHp0MQ5@33_&-<WVv|hSB4o#~~ZH z4+9$^Skv&f3_{zN){Ec#D?AePv;&`zzp{tnz2Gz<@;C%GLEA$h1l&!+)Ck=80V-A4 z@)`J69S2@d>&09{xD8fGE`J<l^pLXF?-hhLA&lP<l@y|M4HV#B3oYxwzXP(vaQ-dD zy0-;u-bjJyUF={n{BtgSv`38}#(MB&rHR`@GkyW943+{Z!IBFW7eo$#e>)643(KE^ zo;Q!D_2Tn&@JP_Jll<5TzTc$G*wZwrYeL8jC}pdZjU7k{OSeJy`|w@AV*6QvZ}qOZ z8VIG74`q#UYHL`vRZxCEnwbItC`iPoK|%ip4@gPk!VIA3?{P0U?LG*W8!jG!Cx$YJ zrqyY^nAd>KOq>a0jH0|wv~p@bveImo#LyiQ!*?hdCMClnaek7-d7YABfvjb7<q(7( z2B#Ay&V*}E7!BA+HUX_JG&2j*v{SYuxtwViQ9*9nA~$U<><h|<D+T5(Dm4hp9)oOx zT5sS0`q4+g?F7rLd#9ZpF2WCZ?RCfnN-f$up<K2jmkM$TRCqUH`~=h*&W2|bu*@N` zq=u-G6=;^lt`}C?(cYQ_so3@03i~{jsVlU|U&4AIteUb3u^4WPtW|$bl(Ox_q`kHj zWur<dc^zY>N~vg4E?M}4E<!;!h$@tC*JbVi5(N5oFgv8NM4RW9XDXCtOpIcM(oB`o zti;*YO>;O#b2LUM+y_FCIXOT`N>p<P=p%waAK0^J5&W;8pxF(;_-Gc{x|){G7|knU zv~|X4?%aUp^3+9Ex}5|~152VbA7c6<bUa!Ij}z#F%N6ig08}l-ik)BK4)$<AF>b|i zdz(R3P>y!Asb68uey}Gd8gP!TfehaDP&B}jw0DP?x^VQqV5KakMh?>+^`V>{h`ZMi zEz6;6AOoBO(9(J_k8tc`%OK2HP&K7L;HEHkj9l{AJ;66mzKFw_qP1E<RZXcC#$n4K z2*<v;8Q--3z&qq;D`P%?q#Mn-p6jQDrlj=tM#aS0FEDP6;#ks&aJHhXGKH((GI8n^ zlrc=SzYFcpv=rsM#)g9see!r(FMco=ME%HBGRegcqa@!0uLIe$lH85EOkbVEG^!}6 zXbCQ%eN_kEr7lGB3YZ%7z6)y)q!3!;ky~@%2R>!`k7pQq2@0do6@+C$yMqN#FyQ7S z+?j&5Uf4PaOV@n~yq4CBQ;V<fUf<kqlzD`kr-Niim{)*6--31x=m^KFX}$P$quMlt x&tDTf0>ps6ng#d`7^&Hx|M|83C;0y%e*?UTJd8_R+}i*E002ovPDHLkV1fcuF<k%v diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.gif deleted file mode 100644 index 5c8bee300d7fa70e68e5219a92da9f1bd3933f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmZ?wbhEHb6lV};_{P9+u!8w;CG){bmP6GXhikcy)p8xJ<2l;Ef2=|9WUJ`$R+-c7 zk|#TqPIarD?$y4~r+j6K?%9ck*QOiZm~DPxhW)L%mbd5IURmgWbxG*8<x$sH#ywc> z@pzT*({({l*N42=81Z6L?8_}NH&!Lw-&Oy5d%~OTiEno%z1@}i=}`Wc!^K~Y08z=8 zqa|ODReU{ByL`pcRVx;(TCs4=+EtGZbUr@Z_w7`}x6{p^PqltK)AIdX`}gx*KQ8n< zIXd~-$yv`&&;4;};?K*Ie_oyb>-y|p*XRDaG5^Jx1+Oo!{e5%c@7v4%++F$S{@S-U zwqL(>`R1K#_wV2PaPQ#V2e&^yIQHq$sn1W(J$iEg>&t78A3uEd{K@kdPhY=z_3qu9 zUteDR{{H^Qk01a4|7V~*Q2fcl$iNWKpaZfB6ekYs{~O|)np;}in&R}M!Xu*ewI*om znp!((urkhM4eE%SH{X?0V}i6~TzhAfk5Au(by|A5I$CmE(akHPcJ*uN=vml1dpNJt zl#y88-ekui#9?<T&d*3+-^edWS)7lV;T{vO_sNc~fPl3VbToA>EY@jo8!z9vd!5dd zgO=-sOyc8=Vr@!06Bjslc?h#qFe@BjXw^E!;_3N->%fi<3FW$9Px2QZcly8P#U>_Y z$5uX7x07BUA07~PS~<(aF?~H72g6Jz7msOOT%xmdYM$Qsc#4Hl@1IEKNv18XeezCG zd#VytR<5g>5Ow2*;FA-*bMEO?1a*~8;!|*$q!Cys(8?+}Ph(l=ZZTFyP7h6mFCQu{ hP7vo6<(n69!F;hen_@^yLcom=B67h}^_(mW)&Q&yJ3RmZ diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_down.png deleted file mode 100644 index 1823481f2f05404a08fcc9357ec930911ff28ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmV;~119{5P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000A^Nkl<ZNQt$T zU1%It6vuz}&dhE$Gn*xwwKm&Lo3w@~0qZ8U(VALRw6?W~eNid24<aI1)Q1+dpwL%+ z2_m9YsAwZq)FPzCQWZ)<L0uE6C85p7#*B??Cvi<?H`&keVK*VOAxTj@kLRBAyXXAR znLA?Q<}Cl03CD461G<0%fVb?=0AB%TfSo`qum#uzXcY_-_!u~DTDDUO|0EtCI~e=< zCvv$Q0Gg)J9&M*ionmUJht%W%bJj3((<3;A+>&g8FSwa4`@0CXJpO@c*)LSW(_eh~ zxvyh;2fD5UkV>Vv-1j}3MvhXu{tooodc3{>9=!%BRfN=VoIDgA?CIYb=|4~Fp|1%v zJ@}?+*(Vm@67c16IdokoVNH^-Ced}B0vfHm4iRqIL10}IRsJASs^u&dAyg1x)NP<~ z>!S>QdXQY|<{Oca@z4TXUD}3}$}LPuK}eOEKgYR#x!ZMg<-^@d+mYDmNXUqqmYs0H zRaFCAGg;1-DoB-@a0}6WuPpkVVu7K)GfZ51tG;2^v6H}lxinEzRW!A78C+<DR1i`@ zs#O)2Dr|1s!}zx+$j>LAh=h!F?#dMnA;cP0YbDK9AH_nBUoW1dkk2f}NJV4L8o?iF zZ*;*unrC%U%2h91qImt>z57L1$nXzm$t1_|N7@@)vPdaWq|3GRw7emuO%Xyts`|1h zk1xP{avY#RU3R*H38|FiC=XOfm3+}*;9M6t?tY8D2$9ZLZyk=*TwtVzw<b(<@5`>R zziwP(ChG-Qzmf(OV5MAnS#P11HpW}yt~j4%K9xlA=m3riq%}>euC6xldQ0zCCX+!S z&o39=r*Z3J1a5Dln4N{}ECs+E>?JW8TPBC%F)+gS(7gAU19S_=aZbhKV~3YLTy5J3 zia)q|Y9GxVPvY~}Ekfc07YN>ag!=8zSN1ps3<B?&mfbBJ#|Z*&15X3h<)AdB=Qfat zeRN>_o1@&>`7DZ3`oOG-tE35X*E6TjnwI_4N@|MLeio6C;Rj+vpB-*i?CXSEc9djG z&v5O>^W69P#FS~-p_TGi9jIy9v%qs3?th8t$>Bx6x4MSx>?A<lO1W#o%hv0UY#S4* zpHwmdKq{G_s<sJA`u=;kY1s}!ytDC<<BZ07`0dJfjK+G{`0#50@2-}+s^$w82^j`( z&c4yV^Y3^cfyM_g!qH2>9@DbZ{|Ub2k|@v#^qQ94zgGM|?gu;u<Vccu00000NkvXX Hu0mjf@p0U> diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.gif deleted file mode 100644 index 9cc37029a9dc201ab9e0bd3a7cba4083cf56b874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmZ?wbhEHb6lV};_{P9+u!8w;CG){bmP6GXN9%Zw)bSr};6L6dc%nu0c&p6mcFB{S z$|pNjPWNhG=u^HjMfdDP!)wzGZ_GBoFvI@VT+7?@ZLciwySgOw+VZIDE8`w4_jtU@ z_vzZ87aJp9Y>IukCFaJeg!{YdUvE!%vpw<c&ZM`yQa>Kd`*OJW%aP(Q$I8AQuljnT z=G)2o<tvu1TCrf&iiK;|u6lH!^YP)nZ>Ji*oo@birsezD*6(NAzn|;;e!lDbh3+30 zdY>Gf{Oshc=cniXxHR$Sm8n0kPXBd%_OBcBUz}O+`tsV}Hy8fCz3k83m4EK9eS2g3 z^;?&3-nn-F{=E<P4&Hrm>*IrCpB|n1{Pf(TC-=X;y!QC<!)MQ*Jb&@@^_y33-n@GE z?#-_+uYP}j|KrDx|Ns9p&>krMWMO1rh-c6NSp|v{2loFB@lDMwt!>RA!mJEE3`|1m z8k1yL^kd`VVh!Tr;|#gfG}YBjO|>RY($J0a_m9$@(-z0Dk|VIa*+_7uhMBX2g^uRR z)ltVbw8VMwF!eI?iYW&A8tCd8_-<^oV;5w%+wm|?LTZv4hs%stGv<m*?{Ri_vNzW` za_sn=Ko$l@Mi#Y(7YhvE+!NJaza`i6fMZaXs5+Nd)YcTwLj@AXWs?p$cbWAz?J@Y# z@aS+;ztmn84aH6;wkfUG5?_5(nA*V{up;ts8>b7a@XARFl0qu&8#;doRc(B5UY<e9 zt?7+I1;6|zCBBN40-FvW(+pX?A!X-@RtC;Et5+X`mZqMX(mhvQ!G!lgVw*<X>KO)& i+9x_2`2^c%N*rutViFJS3B4&2{A`z>(S8;t25SHSpFQOO diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/thumbs_up.png deleted file mode 100644 index d4e8b22a3cc95d0d6e7e2de697e9e7fe910ce9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmV;w13>(VP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000AqNkl<ZNQtGD zUuauZ9LGO5xmnUCGqJrRi{7ni+KTNQZtax$uT(2OY#?(Y!-~RiDtj6}>{U?kWlzfV zL6}8_flmtBt?C|RR2^u$tg<SjZjB}_ZI?#d-h12ho}A-D(spUPq|hH+xcB_-`JC_h zo*%!XrEkwuEleY{A9xb@DU-F5RVS1}uL7+F`mKp%=WOa{!tp0C@7q5B9Li)Zs~X%> zC4YQ!u($L2xo+lu@8$ZrZYBqNp90?4jB>4#Ev6Cr<JU7St?@kv2}YvW|4oq^xx%BT zN5{~#rcBmSTT$M+`0p6ONECozB#Lt9n9mG0Qapo-Q4Kz`ZF`KoGq*BO7i(tx%0~d7 znnq~*R^S8SL?`nz>6L+K^CQgt)z8$>=PkfzrV;8jjgV~`Ays<p(pa4iU>czw;3Uur z)Za;uB)Z7`b{1pT9ss;vABpzEjP|`vjq$+IoZ89I)j?d>1;FR?)poQWI3ABTdNiff zA!qu}zR|BwYSzRx3QKD$Ow))aIxt(yEuNhkBQ^X3<82@F{E=h${eA%Q`8<6WzTw5A zFF88UlfHaL3;HFAXI{gjZ(9Kb?tdJlK)Mb}I7rt<xeih|grki-{M=jolhJV;3&&X% zRoX?Z2ha*jHi2NI3=AOib0}E=B~Vg;EEK<Gp~_JeLkA|6$dekmNGf@;%#M9W-X#z= zOW@@N+)aU(;puQw7oLR-yZ1g_mh^hGHDFOxzRB<a=|H4`rG?pbNhxfUDxj1oTB8IY zHv|==M9T7<4y65&2JGB8$qOH>s@DBH^y~?A>7teuS5Pg4i&Bb!KTrlw)fi1k%}ZNX z5B}i2Ws{UxfRfirio3#Hu~d3ng?lntYg!LP`Wm|5;nvmub)HJGh+3`^?%t<d;o^$& z#h3f}iCvwiledSzj9u$LTlPcCV?Ernv#FwL03p`rb%0FPnlg>hD|=u6{?gEg?cUvO z2MO<J06_EjieOc_O5_ITvC_CQS?fn%aL0SCFP|qhd<ko292CV0DXErHusEM%c6yA7 z8^17e`3t<b*tSj7h!Hhn*tU(&=L1++cUhQ5=#$)y@7}!m?I{*=w?M7>ta*LZ)HP9K zG!u;NqyE9e%!qo1l0$bkE;`x|5RW&W-w3V&?*p#_=9-<lz~8`4U<4QdjsY(K{?b2r h;49!%#cOV>@jut)pI&@VyM6!w002ovPDHLkV1lw`)rbH9 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.gif deleted file mode 100644 index 81e05b0f6adccdc330a951fbc4f7f109da3d2ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeH`ZBJ8o96<ljTWEV*T1#15`>@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-s<G*)k(ny z#&i>V@hs<7i{RD|FD!kJhtJ|uozmME<j_uoj$}BGL01xVCqoAV&g0OP@~4YSIa%Ps z;W8WC9Pn^gTtaa2p?fP_l#oBkq8>@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}d<Irt^ym=tcv;D#Im@>oC#Hx)4b5=>^m zZ57O<Lr?|5Oqkui@rwo)G;m)-`LoG8xtj}GxR(dfTyj7ULnas|sEK{#Y!MaG$43bW zzD+$a$8T1`!h4(ZC*pG-!Q3eben!oGPKGPV$fqz<13??i*TdZ};ofPOZHO<nQj6y{ zm+N4q0U|B1<bX(f{IL@rU4qC}Sm}l60Q_+co&@2^U04gj`U8lCAr^s+RiHM3ilhJe zZwn~@!4eRvN9yO==TGPufN-X?q_I(Nz*1TJcN>^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG<mxFJVDXXWI4Q7x9fXIl}m)0V<@SWTGN zU_U9?t}oSD!oKl<_!ARjyhGXXbs9^gd-gQJP={q0tgB6l2lwYlbF89wch?|E_73w% zTeK>)a1DQS=v%t+EA{(-hhAHq@QZep4<B*zi>F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==<mx+Vw9XDWj+W diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tongue_smile.png deleted file mode 100644 index 56553fbe115199b50ad06acb77c781dbe0cc4561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmV-y1e5!TP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CtNkl<ZNQtGD zUuauZ9LGQBv`O8TwM~<)nZ{0ZY}n4#u76;4inxdA9$b-us8gKypdb@rice0Q_$umP zzB#bqiw`TpbfTcMe;B!O9b2ajgRN;+)8(c~n{@ei?>Ro)n>H;i4*bEF-~Ge+{LcNJ z-#J%Ir*f<p;h?V(=m&a%9#;T{s|YZfF!Kv*jTh^|!$IF+wECLluOZ9`m=Q=voR@)K z2)YU#NFwB02{S+RpYU+d=Lf!IA$F9JW8kqM{0s#8plKfn0rTT97lrAcp<IC{zJbP_ zgTV2Gna`{Vcffj_zrJYW>M3pSIVRZBhbUY@l;eov4bVVC2W;34Ezd)G1jgRi?EX;j z=(}+ck5>z<hJVZT&yVVxUtvG?hL&Ph$ig3Bm%!Gb6xeDx<Av}C&~gxlUxxc%fcEzW z6K4L^74UG-cbJ9AbDZzf*4`JX(>H`rNzmGnQfn7b3YrhVj?dtS9?iku1&zA~5@vo# zOs8^AS7>{ZANPlJQyJaTg0$iw01ZYY3mSU5e4rG@<wZc#)84RLbjK%PH^9Uhcy2g} zsM{r7NBWt$5TbAuz1f2-#g}GQyj#H-zJoDxhho8^Sg<k1QW#?<#exmW{hHV**zzQJ zJTP-11oT(oy`&A;=tWv-P?qz_wjz_UoJG`-$=YPH_VRsBJ8-SRx{HpVg>6qm+5qUS zci}ylQE2dhZLMg{)~#Mb+c!JcTfCrk&AkUoC1>VJL&iXdjv#KH1L#?Xrw!OvudtOw zxKA}m+h*Xkhn?B}lLDm~c;zAIeLT5hp~b>=?Cl|4mo`K#+zI8bel@gq@=VI@7}tX7 z*=4V5v#3C6c4>IkbAv!P+%3tf*Y_l~Qrfc>%%~vH4PdN<mnt=bZ7yHQF*Q|K7d$;v z=31=i*kUWRY(!)ySPhR5=!QZWY}=J$+at}4M)Uk~ah{t~MRGZdT+U)DQR25ti(DKp z;(xHonYjjC??=o}R^gGFO=L}SeqRXdZ`jb_l-#%hD-`5fbdKcd6lQA~Eg)ceX?-)m zp1uH{_zYz7=!OuQO-Okk92!d^>UXW&{@IChobQDuuR=<R)*uCR?j+eii^uB)pi(Xq z8f}G36Hu|xTB7R%N*3oNhb}>L$3Vi&4^?d;VdjTu?ii%=W0+r*R4j#3P_bdLNY-z1 zD;DEcEJoIELcZV}w@M+bvXYB4lFpByxnr<;wlBfmI8OVCID1aPLPb(2IsPZpgip4y zsmsTvE+65OZE!o~cwMnT)k(TOh4vG1;CL0b*3Y5^I8FB2OANmb*>UjH!PWqTgU)73 z+<|1;=^B3*>^}?5yT1e8NtpS$b>THdj-ahG-2N#@I?9s3>4vHvc-BPJznw7i->+t@ y3wI0nfv14IK)0I#{sf|KzF7NfyJz_Sjeh|_A8f6S!_bca0000<MNUMnLSTYXFfW<_ diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/tounge_smile.gif deleted file mode 100644 index 81e05b0f6adccdc330a951fbc4f7f109da3d2ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeH`ZBJ8o96<ljTWEV*T1#15`>@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-s<G*)k(ny z#&i>V@hs<7i{RD|FD!kJhtJ|uozmME<j_uoj$}BGL01xVCqoAV&g0OP@~4YSIa%Ps z;W8WC9Pn^gTtaa2p?fP_l#oBkq8>@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}d<Irt^ym=tcv;D#Im@>oC#Hx)4b5=>^m zZ57O<Lr?|5Oqkui@rwo)G;m)-`LoG8xtj}GxR(dfTyj7ULnas|sEK{#Y!MaG$43bW zzD+$a$8T1`!h4(ZC*pG-!Q3eben!oGPKGPV$fqz<13??i*TdZ};ofPOZHO<nQj6y{ zm+N4q0U|B1<bX(f{IL@rU4qC}Sm}l60Q_+co&@2^U04gj`U8lCAr^s+RiHM3ilhJe zZwn~@!4eRvN9yO==TGPufN-X?q_I(Nz*1TJcN>^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG<mxFJVDXXWI4Q7x9fXIl}m)0V<@SWTGN zU_U9?t}oSD!oKl<_!ARjyhGXXbs9^gd-gQJP={q0tgB6l2lwYlbF89wch?|E_73w% zTeK>)a1DQS=v%t+EA{(-hhAHq@QZep4<B*zi>F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==<mx+Vw9XDWj+W diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif deleted file mode 100644 index eef4fc00ab286211a8e33bf5762d3424c8c4eff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcma*k|5M9x0LSrnN!xByQ_H@ztwy;pVVtIv<+8-(rgHgun#5t;Sm)A_Y0a7L)VZU{ zA$46}d}%kNFG{A{N+SA-IIMOKcerzQw9n_|{0E*tKYn|rrm2-Hw0y!RzX++wAr)HE zs3T1$XLKH))>$;YuaehyWfrRaQ8NuS4Acdpk%3wk>Vj~Cg_|rivC+hVJqUM$J-7L2 z2tlI=H^Qk~5|3Tvxi3NUOtglgJq(?EG>3cJ1$ZbxhlIAv=({qsL{fG+?kuI-m!N$) z?kUk6Pj#%qgH>LK#M>=JmjDhC9*d~QVz{K}k$QV%cq*g%=b(Q!dZY1tE(W479D~;j zF}{fIR!}eEFr<Vhj%rIrM>;w+v~wLbl0uIq`yOd9xPyMX-S<R?H@Q=<@_eHPj22+< z1U*_rebiCzLJS!3(u`MT3|TOI4kKm0ch~55SEoLhFi{3~B_=Q9{dKsjeP0{!`8M2l zFmcZ}*$ht`zO>-mAifRZ#~6OSh1ZQgpFmFmH2IHYzXSXT$tUuE_TLi~1IGMflgV(} zP+}?07O#vi3nxS*Iv*AhA<4?jEIBwMRLtXr)`oItayY@lAf3gqEqdoBRZ>!7ymEQM zF8%!NXNnDKvBKrDMo1+RvAA~L2DQVsH(Sl;tF!kWIcqy4pP#Yk@ZkenV&#X1%?py# z5?dIIw!lEwY;EoWhk?ImOrYd4%Y}*}U(e5{DV1!;Gx_)O2BWc5uqebBsqHl{wb_>C zaQ*yC7{OT!RaK-kLBBZHkztx-269qu^~YGHrRJEto6CfX36?c(cWglBgwu}~eP2K6 z*jRI#GglwmA}jHn;z|<>$C+H>WZPxC3Iso#(<`;=-ASDB3%OmS@#wyS?_GWt{{DR8 ztY2bUtPonQiI+(=yL(Lt*QL4Gd#OHyyOr0fSQ~Vf)o<hq(+htFGov<C>ElxS{4=fV gS8FUP_VX^CCTg=ywW&COsj;=*`ZRFedWw*QzjS1D6#xJL diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png deleted file mode 100644 index f9714d1b3ba5e9324a1a1663549ba28b45af9638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcmV+q1n~QbP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000BlNkl<ZNQteL zU1(fI6vuxv+08aJO*YA<Zf&rl#n2?S<`Y`0sC}sR!3HUaTE+ULAQ7dCPa;Nq6+fW9 zSuo&>4=F;lf`~OS)ZA#arZuHf*sO8W+|6z`n`}0F?;IcQ-DJ0{X&*drm^%#jcjlb` zoEbH{utX(miPY8s2Y_Cn$9DkB_X*&qxSh>Z1OTcMyd_e56fvKY_%4b)0rmtWC%na` zUWoV}J(NJ{m*RHz%uV4fk=h2}BQlqdGj;-k4zxT9O?^<mAC!XYQ?NJ*v){s60Ur1a z>h2u^2I6)$RT1uiWr|B5-pPeQard53H20x$zoFJ*sMRYVK&TyRI-v0hNRGky8$!oh ziaoE!K;2&&pcMW&7e6>IS3kzR??usSUg_MA;O4;<Fa}(+F;WdJZ$jf?7<~rrcoN!P z8;aZ6=gQzMk=mnVW`-H*6Q}Dbs^p4NCIKRz8&f%eF%UikyWfYedW6G2DC%1Kiy9~q zsYBcuzCIY0`Zc7n5$(i40Rq-U8U%VeYrz<-UzY))r!BM*boaa9hG6;>JU*I0Rkg<L zY(@hIm^&LKcLCWJMCW7cJ6l~TV2xhG8oS17&S5p@VvR3gjoYl|Trhq%mj|KwK?nw6 z?rhXQ!f2qEqy<~6(M}SK<E88xQYpt1Q6QCeNu}M5`I2~W5pY(J*lF1DFeEMf-XH+< zU{69Q2(D9hPH*2{O?1~b@4LAgL`vpC$mhMC8-bLCM314a4ujut9z1Emj)1{68s(D( zwCmFU{N3Je|5*Sd^gnx-w;oHB39T|0ad$<fDru=wxM#*!zi1-fIJe-R7{3Iw^Bc7; z9aRDH^JST9z@n)eR`R-7>sxYD?h@P%_N1bz8@#)x1fDOH{OsNwygnCj4WjE%>1j&g z0bqirZn(4tweEUK-=9lkFBaI$BH=0?>DmGU5@<j#{tSCw2k*u#Hjy*K$o?qKpHLI> z{=8==Y^~W8&eAgc{udI8BHV`7Tj0oe0u^YD+u6)U`=_Ue8R>=kYJ=8#UC`ncAZ&;# zMKJ{tjRcyEUR~52IS=9X_4d~QaXWj4aQhJZ-hu1Onu24>>+0)Z+;TmPK{;ziFVAWA zy$#{^q0+lumn1nr+sPPv2O(3?<no&fYYY?|Fjbn)_n_@$3>YY_+KrDzBk&37Kb~gv z1xQapmG&M9jUWQ9Q5e5m4V`fCG=w|80A7jP*~R~amjpS6IH&mgn+VBC)*ZZ~R`i{Z z*{HzFaXb5ECA}-c{QwQXLqHeM?T-Mz0F(ZB?#8F>mf-(~{R;@jTLnf*<W2wp002ov JPDHLkV1iO2>B0a2 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.gif deleted file mode 100644 index 6d3d64bd126a56382452a47faa20e3e0e8185a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeH`drwmb07q|2ffgD%3r#Ptv=s!@suUKf%GMUUQ4Mni<F@RP&>_oAx}+P+B#W9t zc`384uRy9(c??$YRj7s02u08!1_wiIJA=Vix``y#Y!e&W`&;}H`)lV5oa7{@c-Onq zZ5lqoCsqierJVS&lGb*B-mYa_Js8{b9n*0r)_#aN(#-L+ut&{nMo;tZT9W)0=1i{u z9dxuup(6_2F|fv<gNdJ5=uUXq!$vO)SL1Ol9{n8HISZG_zb?N4D;GU{^rWCSHF7!K z*Pj~bO9?vo7~sAd;9)2cP98@1aHRg@OkQ!4!Qu3flf*EI5fV4j1H+k=T@>jPqd%W= zO5ogz>ryzjW9Y4wo9P%!!L2mh5d>~;h)f7^SA;1M?ySSFS(wfY&The64%}jR#Q1#^ zyj!U8yvR(!>ciYu^ZAkaT+B)FI4?4!z>Pf^R#UfkM;<6Ck0Ly(#_VU*{HNhbEgn{^ zdMm^3D!8jLdzf+`iTJb;|M!^IW2Oeb)x%ql`$sWn!~;|K(FN+!`PIh;JTbv<!Qxpg zw87sVUbbTC3jF<eay`80Kwt>Z2Jw6r&+p@f2QTNb;zQ^UP^$n%{Lg<|Konxo2%?@4 zzt+BfLe2yc&q|Y;&59yMVw|$7wrMO{VU|{x(g}Tn<bzIOet@lz@wV#7PzCEuPMLAP zORrEy%UCR%mDXKyDsz{S6wx~;&dCcs!X(wiBunu2cDCNuZatQiy+_-6Y^?cAo8-ks z8+UCT@6GC%^*@9fixVUV87yB%*Q8PQQT&qb<f7_cMsX8c<63Am@xJ+UncSUIXA;O7 z!i3M=$j&M`-?gCL`F>Mdb>`1%8$FIrV-+gD(uoXDH;IDdB|9~>2iP04OUyz2P0L_K z)idKS*;BkVYp-;A4LiO#%h4>iKFzC~Y?11h>b~3?Hbv)ttP6b0tg~@8*T`L_wAR?M z#EfE95~(LtoaW7zd&GDKr*z|n1~#qlRMQDTkx=d8<jU)BrGCgO^JrxDa(bC+TlAbt zJovS@DEX4mz>OpIwfjrot4!hSyC|6!7HG{yai$rao}e-0@~E!k<%WdMdG-dz-lMHG mG1sQDXpDj5@2CU?g~HL3TxHM|Rq%J|xf8L;ou9~w9sdH=NT%Qb diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.png b/platforms/browser/www/lib/ckeditor/plugins/smiley/images/wink_smile.png deleted file mode 100644 index 7c99c3fc54c753dcfe19ff73e225733a2ad7261e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 zcmV-g1f~0lP)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh000CbNkl<ZNQteL zUu;uV9LGQBtX&;$-PRT?S{(r*aYG_(BjJz4$ODQA5JO^AOvD#8F&GmhCccT`!58D7 z1QQ=5fy5YnK#d4SjOcJN>kxuNha}UkKykNhbfsO}d(O{?d$--fh(36dZ+^M==6-(X zoZt6%jv5`CWUi4)G)IB8Krhha3n1-l0Qf2E6bo|#05umpm1y3I*bm4ZPvQ)KGXVJk z?_<0d626ifb13~n)+v7eukci&xgB_y!ucJX+zDY9QV&CXHMFh)rQq6WxH<@<-$1nn z>pp_$y@!BZS*JKYC)@+eX?}a>9?tF+vtp-W{%TbD462$zO<e#1B3;n59AaA_e-ip% z6_&rIxbNi*s0V@xg7AZ!dwYkByob5}InnBh(&Zn)RKN&W3&zey8X>g@Vw<4vDY)}- z=zQf+)+s(y2TvuMw^A5B%#qdNu6lw7xuBHIfruw-=T2ZPv~7f?`{2tSVbcjkblJA) z8YmHoB4(Jc*C(a5io{}QHv<Z98$`hRU~5VLavczQIwP}5m%afe0z>=Z(Y_q2VOiEG z7BsMyOUIIw&mt{hbR`4UGWzFrK0TD-;D;l8|LqvIW|%4)(*0wk`yHmrW;W^hy)gel z2#4X)v7~QdG|)>v4f7h&ZXT=)#xn9(mG#>ev*r0NVvE|CELp}UjK3NfpY&HG0&WS( z9Ds!nK|YP&8-#!!oI!|$!MHOv+OVz_Y#FA?tXL9;N|ly*jU+o-0Jvj*7%CNiy9CD5 zNOC)B<S_UR=fU%7SQxSxt5H6Es_IQq1S&NUi?+hHrx$tOGr77#tHL=<M^YN{X%&Qf z!!H;>sbr|tEUnQ{z%hOty%H#JAgUTvuGDp?2GYd4p;XZr&thZOgs+a~sg@1X?{1Q< zmxLF9GpLAngLn1>;Fa3Uj~!hJQj1$Seqx-;TnTLOS-@CCM^O_)+z1~a-VNm{7~|>k z7;7KvU|w5<Prk@A{70GMq~{{HX2|_rqg*nxGZ&ChJL=l-G<+b?MD8$0)+BL%ho*?P zVc{^`y@1Q3B~E>pC7-Y2x&lBf)=1A1MJler3KB^o+>X|_!RG!PDzq%?6brNMKQVNe zBfZetXwh0D9*9^J+N03aNX1ozG3a6$MlM3tMMNW^xYbivHJg8iwyxRsuRFMg-rB*L z*P*$|qLrR$|7j_}we{{X)?!4nY9Dm%sXMrIz&X3<+?`>?UMSQw<%(Z}K=Ep(zNj@9 zY=dUyo6xyC1MCV~@y5#{2E5P2uTRqVEKHn+2JKxE8u4eUu>OkLSHk)O(6;<z;H9in zyn0J`Ajx*b-Ot6N3G#!?2s}4T>#j!}ROrR5Q~c~E$gSXhf_7j7unOq*Bfu$O(2qad gc(wf}`2R8f0lW)%aFGbSlmGw#07*qoM6N<$f??$muK)l5 diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/af.js deleted file mode 100644 index dd63a1c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","af",{options:"Lagbekkie opsies",title:"Voeg lagbekkie by",toolbar:"Lagbekkie"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ar.js deleted file mode 100644 index 83a8dfa1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ar",{options:"خصائص الإبتسامات",title:"إدراج ابتسامات",toolbar:"ابتسامات"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bg.js deleted file mode 100644 index f8bf7119..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bg",{options:"Опции за усмивката",title:"Вмъкване на усмивка",toolbar:"Усмивка"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bn.js deleted file mode 100644 index 61de3df3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bn",{options:"Smiley Options",title:"স্মাইলী যুক্ত কর",toolbar:"স্মাইলী"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bs.js deleted file mode 100644 index 422fb8b5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","bs",{options:"Smiley Options",title:"Ubaci smješka",toolbar:"Smješko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ca.js deleted file mode 100644 index 5164077f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ca",{options:"Opcions d'emoticones",title:"Insereix una icona",toolbar:"Icona"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cs.js deleted file mode 100644 index aa0d7fa2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","cs",{options:"Nastavení smajlíků",title:"Vkládání smajlíků",toolbar:"Smajlíci"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cy.js deleted file mode 100644 index 79164f5c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","cy",{options:"Opsiynau Gwenogluniau",title:"Mewnosod Gwenoglun",toolbar:"Gwenoglun"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/da.js deleted file mode 100644 index cfc0db19..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","da",{options:"Smileymuligheder",title:"Vælg smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/de.js deleted file mode 100644 index 573e4946..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","de",{options:"Smiley Optionen",title:"Smiley auswählen",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/el.js deleted file mode 100644 index af8f2605..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","el",{options:"Επιλογές Φατσούλων",title:"Εισάγετε μια Φατσούλα",toolbar:"Φατσούλα"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-au.js deleted file mode 100644 index 8dd27c36..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-au",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-ca.js deleted file mode 100644 index 01b27019..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-ca",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-gb.js deleted file mode 100644 index 9967ebfc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en-gb",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en.js deleted file mode 100644 index aa2b1e29..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","en",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eo.js deleted file mode 100644 index b84cd509..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","eo",{options:"Opcioj pri mienvinjetoj",title:"Enmeti Mienvinjeton",toolbar:"Mienvinjeto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/es.js deleted file mode 100644 index 0a64de63..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","es",{options:"Opciones de emoticonos",title:"Insertar un Emoticon",toolbar:"Emoticonos"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/et.js deleted file mode 100644 index b3acbc88..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","et",{options:"Emotikonide valikud",title:"Sisesta emotikon",toolbar:"Emotikon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eu.js deleted file mode 100644 index d5eb0d03..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","eu",{options:"Aurpegiera Aukerak",title:"Aurpegiera Sartu",toolbar:"Aurpegierak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fa.js deleted file mode 100644 index 536b9343..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fa",{options:"گزینه​های خندانک",title:"گنجاندن خندانک",toolbar:"خندانک"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fi.js deleted file mode 100644 index cdc06b98..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fi",{options:"Hymiön ominaisuudet",title:"Lisää hymiö",toolbar:"Hymiö"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fo.js deleted file mode 100644 index 1758e873..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fo",{options:"Møguleikar fyri Smiley",title:"Vel Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js deleted file mode 100644 index efef5640..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fr-ca",{options:"Options d'émoticônes",title:"Insérer un émoticône",toolbar:"Émoticône"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr.js deleted file mode 100644 index 56b9c488..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","fr",{options:"Options des émoticones",title:"Insérer un émoticone",toolbar:"Émoticones"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gl.js deleted file mode 100644 index 47060596..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","gl",{options:"Opcións de emoticonas",title:"Inserir unha emoticona",toolbar:"Emoticona"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gu.js deleted file mode 100644 index 15a08c68..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","gu",{options:"સમ્ય્લી વિકલ્પો",title:"સ્માઇલી પસંદ કરો",toolbar:"સ્માઇલી"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/he.js deleted file mode 100644 index db6c4acd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","he",{options:"אפשרויות סמיילים",title:"הוספת סמיילי",toolbar:"סמיילי"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hi.js deleted file mode 100644 index 2aaa0813..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hi",{options:"Smiley Options",title:"स्माइली इन्सर्ट करें",toolbar:"स्माइली"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hr.js deleted file mode 100644 index 65116ab7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hr",{options:"Opcije smješka",title:"Ubaci smješka",toolbar:"Smješko"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hu.js deleted file mode 100644 index 823e1d53..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","hu",{options:"Hangulatjel opciók",title:"Hangulatjel beszúrása",toolbar:"Hangulatjelek"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/id.js deleted file mode 100644 index 07b5be16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","id",{options:"Opsi Smiley",title:"Sisip sebuah Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/is.js deleted file mode 100644 index dbb52568..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","is",{options:"Smiley Options",title:"Velja svip",toolbar:"Svipur"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/it.js deleted file mode 100644 index df131f8e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","it",{options:"Opzioni Smiley",title:"Inserisci emoticon",toolbar:"Emoticon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ja.js deleted file mode 100644 index dab5662f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ja",{options:"絵文字オプション",title:"顔文字挿入",toolbar:"絵文字"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ka.js deleted file mode 100644 index 78218e0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ka",{options:"სიცილაკის პარამეტრები",title:"სიცილაკის ჩასმა",toolbar:"სიცილაკები"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/km.js deleted file mode 100644 index 2b603406..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","km",{options:"ជម្រើស​រូប​សញ្ញា​អារម្មណ៍",title:"បញ្ចូល​រូប​សញ្ញា​អារម្មណ៍",toolbar:"រូប​សញ្ញ​អារម្មណ៍"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ko.js deleted file mode 100644 index cb3986a0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ko",{options:"이모티콘 옵션",title:"아이콘 삽입",toolbar:"아이콘"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ku.js deleted file mode 100644 index 9d1b8bd2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ku",{options:"هەڵبژاردەی زەردەخەنه",title:"دانانی زەردەخەنەیەك",toolbar:"زەردەخەنه"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lt.js deleted file mode 100644 index 49573bec..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","lt",{options:"Šypsenėlių nustatymai",title:"Įterpti veidelį",toolbar:"Veideliai"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lv.js deleted file mode 100644 index b8299e52..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","lv",{options:"Smaidiņu uzstādījumi",title:"Ievietot smaidiņu",toolbar:"Smaidiņi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mk.js deleted file mode 100644 index e7e241b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","mk",{options:"Smiley Options",title:"Insert a Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mn.js deleted file mode 100644 index 6f8cd095..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","mn",{options:"Smiley Options",title:"Тодорхойлолт оруулах",toolbar:"Тодорхойлолт"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ms.js deleted file mode 100644 index 0df42a59..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ms",{options:"Smiley Options",title:"Masukkan Smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nb.js deleted file mode 100644 index db957dcb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","nb",{options:"Alternativer for smil",title:"Sett inn smil",toolbar:"Smil"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nl.js deleted file mode 100644 index 1b3ac44e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","nl",{options:"Smiley opties",title:"Smiley invoegen",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/no.js deleted file mode 100644 index 87f8534d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","no",{options:"Alternativer for smil",title:"Sett inn smil",toolbar:"Smil"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pl.js deleted file mode 100644 index eb1938ab..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pl",{options:"Opcje emotikonów",title:"Wstaw emotikona",toolbar:"Emotikony"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt-br.js deleted file mode 100644 index e41f5442..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pt-br",{options:"Opções de Emoticons",title:"Inserir Emoticon",toolbar:"Emoticon"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt.js deleted file mode 100644 index c9103e76..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","pt",{options:"Opções de Emoticons",title:"Inserir um Emoticon",toolbar:"Emoticons"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ro.js deleted file mode 100644 index 1f6b89af..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ro",{options:"Opțiuni figuri expresive",title:"Inserează o figură expresivă (Emoticon)",toolbar:"Figură expresivă (Emoticon)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ru.js deleted file mode 100644 index b8f1d619..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ru",{options:"Выбор смайла",title:"Вставить смайл",toolbar:"Смайлы"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/si.js deleted file mode 100644 index da884cf6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","si",{options:"හාස්‍ය විකල්ප",title:"හාස්‍යන් ඇතුලත් කිරීම",toolbar:"හාස්‍යන්"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sk.js deleted file mode 100644 index c1ce5970..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sk",{options:"Možnosti smajlíkov",title:"Vložiť smajlíka",toolbar:"Smajlíky"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sl.js deleted file mode 100644 index ef64a7a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sl",{options:"Možnosti Smeška",title:"Vstavi smeška",toolbar:"Smeško"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sq.js deleted file mode 100644 index d870960e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sq",{options:"Opsionet e Ikonave",title:"Vendos Ikonë",toolbar:"Ikona"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js deleted file mode 100644 index 4e46a4d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sr-latn",{options:"Smiley Options",title:"Unesi smajlija",toolbar:"Smajli"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr.js deleted file mode 100644 index d321eba3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sr",{options:"Smiley Options",title:"Унеси смајлија",toolbar:"Смајли"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sv.js deleted file mode 100644 index 29e4c575..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","sv",{options:"Smileyinställningar",title:"Infoga smiley",toolbar:"Smiley"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/th.js deleted file mode 100644 index e4e12770..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","th",{options:"ตัวเลือกไอคอนแสดงอารมณ์",title:"แทรกสัญลักษณ์สื่ออารมณ์",toolbar:"รูปสื่ออารมณ์"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tr.js deleted file mode 100644 index 90481db7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","tr",{options:"İfade Seçenekleri",title:"İfade Ekle",toolbar:"İfade"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tt.js deleted file mode 100644 index 7f1c8d3e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","tt",{options:"Смайл көйләүләре",title:"Смайл өстәү",toolbar:"Смайл"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ug.js deleted file mode 100644 index 5d8ec4eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","ug",{options:"چىراي ئىپادە سىنبەلگە تاللانمىسى",title:"چىراي ئىپادە سىنبەلگە قىستۇر",toolbar:"چىراي ئىپادە"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/uk.js deleted file mode 100644 index f6c59ee1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","uk",{options:"Опції смайликів",title:"Вставити смайлик",toolbar:"Смайлик"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/vi.js deleted file mode 100644 index f5d1a665..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","vi",{options:"Tùy chọn hình biểu lộ cảm xúc",title:"Chèn hình biểu lộ cảm xúc (mặt cười)",toolbar:"Hình biểu lộ cảm xúc (mặt cười)"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js deleted file mode 100644 index daea8579..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","zh-cn",{options:"表情图标选项",title:"插入表情图标",toolbar:"表情符"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh.js deleted file mode 100644 index dffc3f0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("smiley","zh",{options:"表情符號選項",title:"插入表情符號",toolbar:"表情符號"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/smiley/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/smiley/plugin.js deleted file mode 100644 index 426cb09b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/smiley/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("smiley",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"smiley",hidpi:!0,init:function(a){a.config.smiley_path=a.config.smiley_path||this.path+"images/";a.addCommand("smiley",new CKEDITOR.dialogCommand("smiley",{allowedContent:"img[alt,height,!src,title,width]",requiredContent:"img"})); -a.ui.addButton&&a.ui.addButton("Smiley",{label:a.lang.smiley.toolbar,command:"smiley",toolbar:"insert,50"});CKEDITOR.dialog.add("smiley",this.path+"dialogs/smiley.js")}});CKEDITOR.config.smiley_images="regular_smile.png sad_smile.png wink_smile.png teeth_smile.png confused_smile.png tongue_smile.png embarrassed_smile.png omg_smile.png whatchutalkingabout_smile.png angry_smile.png angel_smile.png shades_smile.png devil_smile.png cry_smile.png lightbulb.png thumbs_down.png thumbs_up.png heart.png broken_heart.png kiss.png envelope.png".split(" "); -CKEDITOR.config.smiley_descriptions="smiley;sad;wink;laugh;frown;cheeky;blush;surprise;indecision;angry;angel;cool;devil;crying;enlightened;no;yes;heart;broken heart;kiss;mail".split(";"); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js deleted file mode 100644 index d0728c38..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("sourcedialog",function(a){var b=CKEDITOR.document.getWindow().getViewPaneSize(),e=Math.min(b.width-70,800),b=b.height/1.5,d;return{title:a.lang.sourcedialog.title,minWidth:100,minHeight:100,onShow:function(){this.setValueOf("main","data",d=a.getData())},onOk:function(){function b(f,c){a.focus();a.setData(c,function(){f.hide();var b=a.createRange();b.moveToElementEditStart(a.editable());b.select()})}return function(){var a=this.getValueOf("main","data").replace(/\r/g,""),c=this; -if(a===d)return!0;setTimeout(function(){b(c,a)});return!1}}(),contents:[{id:"main",label:a.lang.sourcedialog.title,elements:[{type:"textarea",id:"data",dir:"ltr",inputStyle:"cursor:auto;width:"+e+"px;height:"+b+"px;tab-size:4;text-align:left;","class":"cke_source"}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png deleted file mode 100644 index adf4af3c984eb6549af7e35b4abcbe40275e9d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1968 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 CZIM9$ diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png deleted file mode 100644 index b4d0a15a4d8804205f51ea3e2313e31913264c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1999 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 diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png deleted file mode 100644 index 27d1ba8819842924df2d3e40fd5484ac1e9e8c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ildz|YV~EA+-pOaPL>xt0_eWp7a>UdBdyA)&f+GKfsVxQqGr|oN zUYu&}&~trsXzR^a#w++2D6M0;Zr2#CnCMg`wr<x;o`vecvDc6OdD6~V@i3@+*YkpR zD}#$_YR;^2Y0>EFcs#?z*YMbe6~`VMx&{^$7B=qW^}9S}>QvD+Tiulwb>FgF?l~!; zXQn_5ySisnhs@U7Z=FL^1K+=S0~CC~&|`R{(1v|^X4Q=6KLvKwS5@5#4`rBByk^}x zBN;x^76yaBgtberW+^JUuMK;>L8D9Yg0;2v>+>Q^Edl|d#~y#Y)9>LTAh>2LL;mSa zG7Pp0_HW&KG{Z!x<-pUYs->~Qu7dY|TfV$=WY@ZzH*O@bi3u7W+Y=uZl~h^zGj{jg zWtU$jteyM5zWIQJ^WuvPFY@#A-4853d-m*ghPi&vdpl|b1i3Hdm~FhKq-4&yOzoaD z58M5!z4tC}(wXmjb?=?~_v_!y`K_eXYti>ya_7V;D=qzZ-F?@bw)yApKY#uhI|Pcz zUpD!>dH3$$0v0>+l+@MLQzG3s8oz!m4GrxvT>tIcx2y-pzi{p^-+lL%#Am0_$mr<H z0!)$9Vg)PS7oK~mqjO-fil<hns^=uZ4;5w4=LEmEjhyD&RFcig5b||(#~)UW)1Mqd z>-A<u|A}7bQRjPpe)(CKRbCv8t5yYsy14x8U$v@B;E+q>_jxwwcfS6t^UCJ@$9tdo zgBz4y7fUq11*RF*64!{5l*E!$tK_0oAjM#0U}&ssV6JOm5@Kj>Wnc_M+6G2e1_r)M zb_3HBl7`&;l+3hB+!}0tG9LkIkObKfoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G Q6i^X^r>mdKI;Vst0J0`XJOBUy diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/icons/sourcedialog.png deleted file mode 100644 index e44db37985a9161f30484ad1df82dc3b3245ca3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilc=YQV~EA+-pL!YLL5cf_8S))n^#YsyEoC3gGK1|6h$4DZCgVG zwrmo(7^EV0EpPSt1$GUL8-><P7T>UyLwwUqrt;#=M|aJ%KCZMoa?+Yd{Oy|OX7<<r zn>lfj#)(ZmHs>QFA`<2$^~{++-&lr^Q*ptn>$b@~2dn#w{ajP>BD1TtwY9fI=}uB{ zbV*|nJScJa+c&dSR@*<>+!voX@B2SKm6=g8eC<8QlP#^SlWpXf6_j#vbMI=O{*=Mw z7+PH#8yqTH8k@W<Oiy1wFf^&>`fNr&KR>Po))G8zXVZ$~U8>He31`1O)7T;4q~Iwe z)ysA*YEH34vd3kS1q{1FLuETpSZC+@y9i9wX1^@6X6u&Qxu0y(Gc#ZQee_7_*bM%n z)a4AjUcY{QrL@-AC0jRgn(x|Z!Jjwsw%=#U$;sKnXqTUtr{*wmndY$>k_koAb@cU> zl~xwNOUTcE?;3l3J;SP1RrlVO&7V7OUY+Q~w(tM+5~P$q6r`s=4_tlqm#GAg9b-&P zOwGwnZ_<}vu4J&8d*<ww_uo4WH|^TBYE_rvv()96S2pHP7XMybUcTMz*q*S^YuB!s z9P`+J|M`y}Kez;(4p=U~+|F$C@!tQi&^_OkAAH>Me9mQoL#7HlOIa8~zB;(9@?`rS z`nBNRonD?i@6dXmYtH``svJ9!Vd4}jDEQRgM5?#LaM7w60!*oq|Gp}pUA;+%Q<32V z`>`s`C%^Jj9e}AuwZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4Sip zlHI@*g`^=jKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6 RBL!5%;OXk;vd$@?2>=OlH)j9< diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/af.js deleted file mode 100644 index f1491d1f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","af",{toolbar:"Bron",title:"Bron"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js deleted file mode 100644 index b755d750..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ar",{toolbar:"المصدر",title:"المصدر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js deleted file mode 100644 index 1d8c6dca..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bg",{toolbar:"Източник",title:"Източник"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js deleted file mode 100644 index fd41806f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bn",{toolbar:"সোর্স",title:"সোর্স"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js deleted file mode 100644 index 9cd03930..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","bs",{toolbar:"HTML kôd",title:"HTML kôd"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js deleted file mode 100644 index 24193350..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ca",{toolbar:"Codi font",title:"Codi font"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js deleted file mode 100644 index acd14e8d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","cs",{toolbar:"Zdroj",title:"Zdroj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js deleted file mode 100644 index d61bd35e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","cy",{toolbar:"HTML",title:"HTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/da.js deleted file mode 100644 index 7c21ca42..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","da",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/de.js deleted file mode 100644 index 49f7c610..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","de",{toolbar:"Quellcode",title:"Quellcode"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/el.js deleted file mode 100644 index 58f9dd6c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","el",{toolbar:"Κώδικας",title:"Κώδικας"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js deleted file mode 100644 index 9dede838..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-au",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js deleted file mode 100644 index 244ef5ff..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-ca",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js deleted file mode 100644 index 9381cd0e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en-gb",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en.js deleted file mode 100644 index 20b116ed..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","en",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js deleted file mode 100644 index 902480da..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","eo",{toolbar:"Fonto",title:"Fonto"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/es.js deleted file mode 100644 index e7f85510..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","es",{toolbar:"Fuente HTML",title:"Fuente HTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/et.js deleted file mode 100644 index 9c3848b2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","et",{toolbar:"Lähtekood",title:"Lähtekood"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js deleted file mode 100644 index dc75afe0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","eu",{toolbar:"HTML Iturburua",title:"HTML Iturburua"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js deleted file mode 100644 index 65b63062..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fa",{toolbar:"منبع",title:"منبع"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js deleted file mode 100644 index b7630ff0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fi",{toolbar:"Koodi",title:"Koodi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js deleted file mode 100644 index ab4e5570..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fo",{toolbar:"Kelda",title:"Kelda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js deleted file mode 100644 index 23148f8e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fr-ca",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js deleted file mode 100644 index 8bc19780..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","fr",{toolbar:"Source",title:"Source"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js deleted file mode 100644 index 8a3bcbcd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","gl",{toolbar:"Orixe",title:"Orixe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js deleted file mode 100644 index 2241ec60..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","gu",{toolbar:"મૂળ કે પ્રાથમિક દસ્તાવેજ",title:"મૂળ કે પ્રાથમિક દસ્તાવેજ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/he.js deleted file mode 100644 index 4f255502..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","he",{toolbar:"מקור",title:"מקור"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js deleted file mode 100644 index 41ebe9b1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hi",{toolbar:"सोर्स",title:"सोर्स"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js deleted file mode 100644 index 51d2d4db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hr",{toolbar:"Kôd",title:"Kôd"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js deleted file mode 100644 index 5e80c1e7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","hu",{toolbar:"Forráskód",title:"Forráskód"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/id.js deleted file mode 100644 index e5af768e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","id",{toolbar:"Sumber",title:"Sumber"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/is.js deleted file mode 100644 index fa21def4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","is",{toolbar:"Kóði",title:"Kóði"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/it.js deleted file mode 100644 index 0a6c8c04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","it",{toolbar:"Sorgente",title:"Sorgente"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js deleted file mode 100644 index 81832591..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ja",{toolbar:"ソース",title:"ソース"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js deleted file mode 100644 index 201586a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ka",{toolbar:"კოდები",title:"კოდები"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/km.js deleted file mode 100644 index 421b42c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","km",{toolbar:"អក្សរ​កូដ",title:"អក្សរ​កូដ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js deleted file mode 100644 index 64aa7004..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ko",{toolbar:"소스",title:"소스"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js deleted file mode 100644 index 61faf97b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ku",{toolbar:"سەرچاوە",title:"سەرچاوە"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js deleted file mode 100644 index 4b297dd3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","lt",{toolbar:"Šaltinis",title:"Šaltinis"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js deleted file mode 100644 index 1f454578..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","lv",{toolbar:"HTML kods",title:"HTML kods"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js deleted file mode 100644 index d1d2b635..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","mn",{toolbar:"Код",title:"Код"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js deleted file mode 100644 index 69e7e9fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ms",{toolbar:"Sumber",title:"Sumber"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js deleted file mode 100644 index 224b0855..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","nb",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js deleted file mode 100644 index 47d692d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","nl",{toolbar:"Broncode",title:"Broncode"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/no.js deleted file mode 100644 index 02cadbac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","no",{toolbar:"Kilde",title:"Kilde"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js deleted file mode 100644 index 80d4f44b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pl",{toolbar:"Źródło dokumentu",title:"Źródło dokumentu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js deleted file mode 100644 index 358cfd18..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pt-br",{toolbar:"Código-Fonte",title:"Código-Fonte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js deleted file mode 100644 index f924ce8d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","pt",{toolbar:"Fonte",title:"Fonte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js deleted file mode 100644 index cc82c71d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ro",{toolbar:"Sursa",title:"Sursa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js deleted file mode 100644 index fbf6efb7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ru",{toolbar:"Исходник",title:"Источник"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/si.js deleted file mode 100644 index f869386e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","si",{toolbar:"මුලාශ්‍රය",title:"මුලාශ්‍රය"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js deleted file mode 100644 index 18dcae92..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sk",{toolbar:"Zdroj",title:"Zdroj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js deleted file mode 100644 index 85cfe161..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sl",{toolbar:"Izvorna koda",title:"Izvorna koda"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js deleted file mode 100644 index 1266a7fd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sq",{toolbar:"Burimi",title:"Burimi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js deleted file mode 100644 index 4f0736c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sr-latn",{toolbar:"Kôd",title:"Kôd"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js deleted file mode 100644 index 84073825..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sr",{toolbar:"Kôд",title:"Kôд"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js deleted file mode 100644 index 2fec89c7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","sv",{toolbar:"Källa",title:"Källa"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/th.js deleted file mode 100644 index 03e48901..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","th",{toolbar:"ดูรหัส HTML",title:"ดูรหัส HTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js deleted file mode 100644 index 31ac46b5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","tr",{toolbar:"Kaynak",title:"Kaynak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js deleted file mode 100644 index a4c7d5eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","tt",{toolbar:"Чыганак",title:"Чыганак"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js deleted file mode 100644 index efcc9d79..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","ug",{toolbar:"مەنبە",title:"مەنبە"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js deleted file mode 100644 index ca9afc2e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","uk",{toolbar:"Джерело",title:"Джерело"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js deleted file mode 100644 index 65c47d61..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","vi",{toolbar:"Mã HTML",title:"Mã HTML"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js deleted file mode 100644 index fc5bb0d8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","zh-cn",{toolbar:"源码",title:"源码"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js deleted file mode 100644 index c49aa82e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("sourcedialog","zh",{toolbar:"原始碼",title:"原始碼"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/plugin.js deleted file mode 100644 index b7cc6875..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/sourcedialog/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("sourcedialog",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"sourcedialog,sourcedialog-rtl",hidpi:!0,init:function(a){a.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js");a.ui.addButton&&a.ui.addButton("Sourcedialog", -{label:a.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt deleted file mode 100644 index baadd2b7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -cs.js Found: 118 Missing: 0 -cy.js Found: 118 Missing: 0 -de.js Found: 118 Missing: 0 -el.js Found: 16 Missing: 102 -eo.js Found: 118 Missing: 0 -et.js Found: 31 Missing: 87 -fa.js Found: 24 Missing: 94 -fi.js Found: 23 Missing: 95 -fr.js Found: 118 Missing: 0 -hr.js Found: 23 Missing: 95 -it.js Found: 118 Missing: 0 -nb.js Found: 118 Missing: 0 -nl.js Found: 118 Missing: 0 -no.js Found: 118 Missing: 0 -tr.js Found: 118 Missing: 0 -ug.js Found: 39 Missing: 79 -zh-cn.js Found: 118 Missing: 0 diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js deleted file mode 100644 index acb6c923..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ar.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js deleted file mode 100644 index 0bf8749e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/bg.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js deleted file mode 100644 index e6504372..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ca.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", -laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", -Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", -Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", -Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", -aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", -igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", -divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", -374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", -asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js deleted file mode 100644 index c2b38f0f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cs.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", -not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", -Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", -Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", -Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", -acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", -icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", -uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", -8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js deleted file mode 100644 index 77f59f61..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/cy.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", -reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", -Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", -Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", -Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", -aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", -euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", -otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", -OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", -diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js deleted file mode 100644 index 6b3ce87e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/de.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", -reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", -Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", -Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", -Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", -aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", -eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", -ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", -sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js deleted file mode 100644 index e7c2a219..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/el.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", -ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Not sign",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", -iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", -Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", -Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", -acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", -icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", -uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", -sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js deleted file mode 100644 index 5a147863..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js deleted file mode 100644 index 26f61c2e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/en.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js deleted file mode 100644 index d44b0d2e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/eo.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", -sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", -Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", -Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", -szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", -igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", -uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", -bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js deleted file mode 100644 index 79d437f9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/es.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", -not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", -Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", -Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", -times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", -acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", -iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", -ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", -373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js deleted file mode 100644 index 22c90561..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/et.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", -bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js deleted file mode 100644 index e0b27c59..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fa.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", -macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", -Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", -Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", -aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", -iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", -thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", -asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js deleted file mode 100644 index 6d701e3c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fi.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js deleted file mode 100644 index d19e2e42..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", -Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", -Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", -eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", -373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js deleted file mode 100644 index 2d1ad096..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/fr.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", -not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", -Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", -Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", -auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", -ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", -373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js deleted file mode 100644 index f16d3667..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/gl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", -not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", -Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", -Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", -times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", -acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", -iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", -ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", -373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js deleted file mode 100644 index dcfc50f0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/he.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", -macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", -Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", -ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", -Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", -ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", -divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", -373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js deleted file mode 100644 index af10255d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hr.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", -reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js deleted file mode 100644 index 79483051..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/hu.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", -reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", -Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", -Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", -agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", -icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", -uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", -9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js deleted file mode 100644 index 4928f400..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/id.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js deleted file mode 100644 index 894b56ce..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/it.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", -not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", -Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", -Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", -Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", -agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", -ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", -ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", -yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", -trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js deleted file mode 100644 index 84fb8fa2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ja.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", -frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", -times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", -ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", -rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js deleted file mode 100644 index 65a7518d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/km.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js deleted file mode 100644 index 4917d4ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ku.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", -ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", -Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", -Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", -times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", -atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", -icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", -uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", -375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js deleted file mode 100644 index 50a77d36..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/lv.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", -laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", -Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", -Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", -times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", -acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", -icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", -uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", -sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js deleted file mode 100644 index 0cdcde20..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nb.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js deleted file mode 100644 index 68edf37f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/nl.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", -reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", -Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", -Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", -Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", -aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", -iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", -uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", -375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js deleted file mode 100644 index eecc56c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/no.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", -reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", -Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", -times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", -ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", -uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", -rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js deleted file mode 100644 index f21a09db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", -laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", -Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", -Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", -Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", -eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", -divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", -375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js deleted file mode 100644 index e3f78319..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", -macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", -Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", -Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", -aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", -otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", -373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js deleted file mode 100644 index 11ef746a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/pt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", -laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", -Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", -Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", -times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", -atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", -icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", -uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", -sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js deleted file mode 100644 index 866e8659..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ru.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", -not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", -Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", -Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", -Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", -aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", -ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", -uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", -bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js deleted file mode 100644 index 1255a350..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/si.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", -macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", -Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", -aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", -ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", -thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js deleted file mode 100644 index 2d226d06..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sk.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", -reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", -Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", -Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", -Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", -aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", -oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", -OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", -hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js deleted file mode 100644 index 84759b62..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sl.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", -macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", -Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", -ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", -Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", -ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", -divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", -373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js deleted file mode 100644 index c7098005..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sq.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", -Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", -Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", -times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", -acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", -iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", -ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", -373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js deleted file mode 100644 index 8f741b93..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/sv.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", -not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", -Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", -Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", -ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", -ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", -trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js deleted file mode 100644 index ae0b00e5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/th.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", -not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", -Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", -Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", -Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", -aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", -ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", -yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", -trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js deleted file mode 100644 index 3dd220a3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", -not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", -Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", -ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", -THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", -igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", -uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", -bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js deleted file mode 100644 index 2eadb9f7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/tt.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", -not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", -Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", -Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", -Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", -ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", -ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", -oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", -diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js deleted file mode 100644 index 51f4c1d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/ug.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", -deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", -Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", -Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", -Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", -ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", -oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", -yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", -bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js deleted file mode 100644 index 845e7524..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", -not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", -Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", -Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", -Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", -igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", -ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", -hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js deleted file mode 100644 index d4e4d37a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/vi.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", -reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", -Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", -Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", -times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", -atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", -iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", -divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", -372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", -asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js deleted file mode 100644 index 6896e912..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", -Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", -Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", -iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", -373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js deleted file mode 100644 index 7bc2b556..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/lang/zh.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", -frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", -Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", -times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", -auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", -eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", -uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", -hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js b/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js deleted file mode 100644 index c4d1696b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/specialchar/dialogs/specialchar.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); -var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"), -j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); -break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): -d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++, -d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+ -', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, -title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", -align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", -html:"<div>&nbsp;</div>"}]}]}]}]}]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/stylesheetparser/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/stylesheetparser/plugin.js deleted file mode 100644 index 25ddd8f6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/stylesheetparser/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function h(b,e,c){var i=[],g=[],a;for(a=0;a<b.styleSheets.length;a++){var d=b.styleSheets[a];if(!(d.ownerNode||d.owningElement).getAttribute("data-cke-temp")&&!(d.href&&"chrome://"==d.href.substr(0,9)))try{for(var f=d.cssRules||d.rules,d=0;d<f.length;d++)g.push(f[d].selectorText)}catch(h){}}a=g.join(" ");a=a.replace(/(,|>|\+|~)/g," ");a=a.replace(/\[[^\]]*/g,"");a=a.replace(/#[^\s]*/g,"");a=a.replace(/\:{1,2}[^\s]*/g,"");a=a.replace(/\s+/g," ");a=a.split(" ");b=[];for(g=0;g<a.length;g++)f= -a[g],c.test(f)&&!e.test(f)&&-1==CKEDITOR.tools.indexOf(b,f)&&b.push(f);for(a=0;a<b.length;a++)c=b[a].split("."),e=c[0].toLowerCase(),c=c[1],i.push({name:e+"."+c,element:e,attributes:{"class":c}});return i}CKEDITOR.plugins.add("stylesheetparser",{init:function(b){b.filter.disable();var e;b.once("stylesSet",function(c){c.cancel();b.once("contentDom",function(){b.getStylesSet(function(c){e=c.concat(h(b.document.$,b.config.stylesheetParser_skipSelectors||/(^body\.|^\.)/i,b.config.stylesheetParser_validSelectors|| -/\w+\.\w+/));b.getStylesSet=function(b){if(e)return b(e)};b.fire("stylesSet",{styles:e})})})},null,null,1)}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/table/dialogs/table.js b/platforms/browser/www/lib/ckeditor/plugins/table/dialogs/table.js deleted file mode 100644 index 6f656817..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/table/dialogs/table.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;k<g;k++){m=a.$.rows[k];for(var d=e=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],e+=c.colSpan;e>l&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0<e);e||(alert(a),this.select());return e}}function n(a,e){var l=function(g){return new CKEDITOR.dom.element(g,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie? -310:280,onLoad:function(){var g=this,a=g.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=g.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=g.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var g=a.getSelection(),d=g.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),f=this.getContentElement("info", -"txtHeight");"tableProperties"==e&&((g=g.getSelectedElement())&&g.is("table")?c=g:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();f&&f.onChange()},onOk:function(){var g=a.getSelection(),d=this._.selectedElement&&g.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b, -c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),e=parseInt(b.txtRows,10)||0,f=parseInt(b.txtCols,10)||0,i=0;i<e;i++)for(var j=h.append(l("tr")),k=0;k<f;k++)j.append(l("td")).appendBogus();e=b.selHeaders;if(!c.$.tHead&&("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&!f.data("cke-bookmark")&& -(f.renameNode("th"),f.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&(f.renameNode("td"),f.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==e||"both"==e))for(j=0;j<c.$.rows.length;j++)f=new CKEDITOR.dom.element(c.$.rows[j].cells[0]), -f.renameNode("th"),f.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==e||"both"==e))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(f=new CKEDITOR.dom.element(j.$.cells[0]),f.renameNode("td"),f.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{g.selectBookmarks(d)}catch(m){}else a.insertElement(c), -setTimeout(function(){var g=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(a){this.setValue(a.$.rows.length)}, -commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(a){this.setValue(r(a))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(a){var d=this.getDialog();d.hasColumnHeaders= -!0;for(var c=0;c<a.$.rows.length;c++){var b=a.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){d.hasColumnHeaders=!1;break}}null!==a.$.tHead?this.setValue(d.hasColumnHeaders?"both":"row"):this.setValue(d.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")|| -"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]}, -{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& -a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); -a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", -this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", -html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption"); -if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()): -d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a,null,"table")]}}var q=CKEDITOR.tools.cssLength,k=function(a){var e=this.id;a.info||(a.info={});a.info[e]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/tableresize/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/tableresize/plugin.js deleted file mode 100644 index 097326c0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/tableresize/plugin.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function t(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function n(a,h){var b=a.getComputedStyle("border-"+h+"-width"),j={thin:"0px",medium:"1px",thick:"2px"};0>b.indexOf("px")&&(b=b in j&&"none"!=a.getComputedStyle("border-style")?j[b]:0);return parseInt(b,10)}function w(a){var h=[],b=-1,j="rtl"==a.getComputedStyle("direction"),c;c=a.$.rows;for(var p=0,g,d,e,i=0,o=c.length;i<o;i++)e=c[i],g=e.cells.length,g>p&&(p=g,d=e);c=d;p=new CKEDITOR.dom.element(a.$.tBodies[0]); -g=p.getDocumentPosition();d=0;for(e=c.cells.length;d<e;d++){var i=new CKEDITOR.dom.element(c.cells[d]),o=c.cells[d+1]&&new CKEDITOR.dom.element(c.cells[d+1]),b=b+(i.$.colSpan||1),k,f,l=i.getDocumentPosition().x;j?f=l+n(i,"left"):k=l+i.$.offsetWidth-n(i,"right");o?(l=o.getDocumentPosition().x,j?k=l+o.$.offsetWidth-n(o,"right"):f=l+n(o,"left")):(l=a.getDocumentPosition().x,j?k=l:f=l+a.$.offsetWidth);i=Math.max(f-k,3);h.push({table:a,index:b,x:k,y:g.y,width:i,height:p.$.offsetHeight,rtl:j})}return h} -function u(a){(a.data||a).preventDefault()}function A(a){function h(){i=0;e.setOpacity(0);k&&b();var v=g.table;setTimeout(function(){v.removeCustomData("_cke_table_pillars")},0);d.removeListener("dragstart",u)}function b(){for(var v=g.rtl,a=v?l.length:x.length,c=0;c<a;c++){var b=x[c],d=l[c],e=g.table;CKEDITOR.tools.setTimeout(function(a,c,b,d,g,j){a&&a.setStyle("width",f(Math.max(c+j,1)));b&&b.setStyle("width",f(Math.max(d-j,1)));g&&e.setStyle("width",f(g+j*(v?-1:1)))},0,this,[b,b&&t(b),d,d&&t(d), -(!b||!d)&&t(e)+n(e,"left")+n(e,"right"),k])}}function j(a){u(a);for(var a=g.index,b=CKEDITOR.tools.buildTableMap(g.table),j=[],h=[],f=Number.MAX_VALUE,n=f,s=g.rtl,r=0,w=b.length;r<w;r++){var m=b[r],q=m[a+(s?1:0)],m=m[a+(s?0:1)],q=q&&new CKEDITOR.dom.element(q),m=m&&new CKEDITOR.dom.element(m);if(!q||!m||!q.equals(m))q&&(f=Math.min(f,t(q))),m&&(n=Math.min(n,t(m))),j.push(q),h.push(m)}x=j;l=h;y=g.x-f;z=g.x+n;e.setOpacity(0.5);o=parseInt(e.getStyle("left"),10);k=0;i=1;e.on("mousemove",p);d.on("dragstart", -u);d.on("mouseup",c,this)}function c(a){a.removeListener();h()}function p(a){r(a.data.getPageOffset().x)}var g,d,e,i,o,k,x,l,y,z;d=a.document;e=CKEDITOR.dom.element.createFromHtml('<div data-cke-temp=1 contenteditable=false unselectable=on style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>',d);a.on("destroy",function(){e.remove()});s||d.getDocumentElement().append(e);this.attachTo=function(a){i|| -(s&&(d.getBody().append(e),k=0),g=a,e.setStyles({width:f(a.width),height:f(a.height),left:f(a.x),top:f(a.y)}),s&&e.setOpacity(0.25),e.on("mousedown",j,this),d.getBody().setStyle("cursor","col-resize"),e.show())};var r=this.move=function(a){if(!g)return 0;if(!i&&(a<g.x||a>g.x+g.width))return g=null,i=k=0,d.removeListener("mouseup",c),e.removeListener("mousedown",j),e.removeListener("mousemove",p),d.getBody().setStyle("cursor","auto"),s?e.remove():e.hide(),0;a-=Math.round(e.$.offsetWidth/2);if(i){if(a== -y||a==z)return 1;a=Math.max(a,y);a=Math.min(a,z);k=a-o}e.setStyle("left",f(a));return 1}}function r(a){var h=a.data.getTarget();if("mouseout"==a.name){if(!h.is("table"))return;for(var b=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);b&&b.$&&!b.equals(h)&&!b.is("body");)b=b.getParent();if(!b||b.equals(h))return}h.getAscendant("table",1).removeCustomData("_cke_table_pillars");a.removeListener()}var f=CKEDITOR.tools.cssLength,s=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks); -CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(a){a.on("contentDom",function(){var h,b=a.editable();b.attachListener(b.isInline()?b:a.document,"mousemove",function(b){var b=b.data,c=b.getTarget();if(c.type==CKEDITOR.NODE_ELEMENT){var f=b.getPageOffset().x;if(h&&h.move(f))u(b);else if(c.is("table")||c.getAscendant("tbody",1)){c=c.getAscendant("table",1);if(!(b=c.getCustomData("_cke_table_pillars")))c.setCustomData("_cke_table_pillars",b=w(c)),c.on("mouseout",r),c.on("mousedown", -r);a:{for(var c=0,g=b.length;c<g;c++){var d=b[c];if(f>=d.x&&f<=d.x+d.width){f=d;break a}}f=null}f&&(!h&&(h=new A(a)),h.attachTo(f))}}})})}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js b/platforms/browser/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js deleted file mode 100644 index fb8e99ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/tabletools/dialogs/tableCell.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&("select"==this.type&&!c)&&(this.getInputElement().$.selectedIndex=-1))}}function j(a){if(a=l.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,i=CKEDITOR.dialog.validate,l=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"&nbsp;"},m="rtl"== -g.lang.dir,k=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:i.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info", -"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||j(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType", -label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(j)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:i.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b= -parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| -b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); -a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, -f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): -a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); -return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, -{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", -"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()}, -onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.css b/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.css deleted file mode 100644 index 66bc388e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.css +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -.cke_tpl_list -{ - border: #dcdcdc 2px solid; - background-color: #ffffff; - overflow-y: auto; - overflow-x: hidden; - width: 100%; - height: 220px; -} - -.cke_tpl_item -{ - margin: 5px; - padding: 7px; - border: #eeeeee 1px solid; - *width: 88%; -} - -.cke_tpl_preview -{ - border-collapse: separate; - text-indent:0; - width: 100%; -} -.cke_tpl_preview td -{ - padding: 2px; - vertical-align: middle; -} -.cke_tpl_preview .cke_tpl_preview_img -{ - width: 100px; -} -.cke_tpl_preview span -{ - white-space: normal; -} - -.cke_tpl_title -{ - font-weight: bold; -} - -.cke_tpl_list a:hover .cke_tpl_item, -.cke_tpl_list a:focus .cke_tpl_item, -.cke_tpl_list a:active .cke_tpl_item -{ - border: #ff9933 1px solid; - background-color: #fffacd; -} - -.cke_tpl_list a:hover *, -.cke_tpl_list a:focus *, -.cke_tpl_list a:active * -{ - cursor: pointer; -} - -/* IE Quirks contextual selectors children will not get :hover transition until - the hover style of the link itself contains certain CSS declarations. */ -.cke_browser_quirks .cke_tpl_list a:active, -.cke_browser_quirks .cke_tpl_list a:hover, -.cke_browser_quirks .cke_tpl_list a:focus -{ - background-position: 0 0; -} - -.cke_hc .cke_tpl_list a:hover .cke_tpl_item, -.cke_hc .cke_tpl_list a:focus .cke_tpl_item, -.cke_hc .cke_tpl_list a:active .cke_tpl_item -{ - border-width: 3px; -} - -.cke_tpl_empty, .cke_tpl_loading -{ - text-align: center; - padding: 5px; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.js b/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.js deleted file mode 100644 index bd7832d6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/dialogs/templates.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.dialog.add("templates",function(c){function o(a,b){var k=CKEDITOR.dom.element.createFromHtml('<a href="javascript:void(0)" tabIndex="-1" role="option" ><div class="cke_tpl_item"></div></a>'),d='<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>';a.image&&b&&(d+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(b+a.image)+'"'+(CKEDITOR.env.ie6Compat?' onload="this.width=this.width"':"")+' alt="" title=""></td>');d+='<td style="white-space:normal;"><span class="cke_tpl_title">'+ -a.title+"</span><br/>";a.description&&(d+="<span>"+a.description+"</span>");k.getFirst().setHtml(d+"</td></tr></table>");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), -c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, -minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:"<span>"+f.selectPromptMsg+"</span>"},{id:"templatesList",type:"html",focus:!0,html:'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="'+h+'"><div class="cke_tpl_loading"><span></span></div></div><span class="cke_voice_label" id="'+h+'">'+f.options+"</span>"},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, -"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d<h;d++)for(var e=CKEDITOR.getTemplates(b[d]),i=e.imagesPath,e=e.templates,n=e.length,j=0;j<n;j++){var m=o(e[j],i);m.setAttribute("aria-posinset",j+1);m.setAttribute("aria-setsize", -n);c.append(m)}a.focus()}else g.setHtml('<div class="cke_tpl_empty"><span>'+f.emptyListMsg+"</span></div>")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png deleted file mode 100644 index 9a263404144c32c03ea1effa04c9c9454fb6b639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 zcmZ`(eK^wz9RH13j4(N7)Fw?RZ05WjH8X5ePOQ9Kj+qr(3md1@E{4VBH4-P0NIIEB zU3yX?uS4RD7V=th*5$o0H-FwA_k5qv_wzj8=ks|!&-eSsH`UA2eJ2zF1pr_tnMCxK zGin>k5P9du#VyGR65`=b1h%%T<XJ_Ie4-Lb^5@DO;%$HkCWYq!0Gvc7I#d0c@B8+$ z^xd^(qoTj1q`}VG38a%Y#e;3MtDnCc$!#y+!prztVHrndz~!YpA1wk3(pDW|Kb7xM zvjr|R_}%5!Ydl#sosG_`zgjiI>u;96JrFJ)%|8Us5)|2vt&gsbie5`}E#-lDWsoTv z3{!s94FuCQ1%^X#I2|fH-l1U#?#xJ35xWjYp^{A0U%;2X@h&bn);$db)BNBqKs@tF z+NX5=@zdbqM?oT~bo0{cYSh&EWak?SC?HRBZG7hFK%Lu%HF(ikU6ER-{a(JNLI5i* zGn2mBU3fg;XTh-KX{H7en&>rqSd=E~NVN;AuUY&SGyeKg15ba<{2(0ukmBJ{tQ3Ok zYlVZI0ijqi{&p#Sei%nRdA-^OVg0nGMlM)Ab*BP*$OeK&r!1hIUI2#P*8VyxL5)?L z+{pOG&qlh>v3SkkY3WF@?VuPbJ2$5j$hHPbFuM}H_Y>OHNGfeHxAq&C%*Et#1l3}i zm^pM|VG0)igZ|uHWZ-oKm%GHieJn)<i^xs&%hDoHl*>7nsZa{*E@fJ~WpKvWnE5?Z z)bqx6aS@i%L8jIT{!|7)7!gKv%&1iLEeuAYklOTsFLN`-pM0ym=w~w;Zx#oYv&7Ql zU5xg$QLC#8InlLOY<{%tQh4wnVYbqgDeCSU5{Z~s`81(X)(||Ba&T4&O!O4ED-c*F zVyFI=#SeC8Y{H|WvhCDx>*Pm}H%KjKC`eNKe#j<zFw!7QBA`oZ>IBmbYi#zse3fUv zA{#&F&;%eiGiIGy!H&JUL=#qeDn*GN@Zly*q$U(Mw@uQ|5mA!X3SZ%#rrJFV_UT~& zkka!pv+^3@h50pTF|2!@J-o=v%Jm9JEK4ix>B~jjRBmqK9T9c<c6H@fow!vdiq=jt zR1dh1gQVgKMBcQ4Pk4jrAU-ampijE|&q|Y`e@`U?r4>;jc6m4g!MP}B&sxqtGE&<Y z6X9)2I-(3>_-p1VO@-kxF3IC1Zh{SlGm@M@_R;ahyRvetgDlGuG9{AQ3mgt2-c)`a zvmL-IZqPxCkb42i-e&#BG{Hj=^`!^=9g>T=$o9YRkFOlwb2yKlq1Z`Ipb26*{FyIN zWgt`BW>GKDr^iTzOcZ8%LqjD`5G8dGZ<hPUv;v7^LoC=wD5siLClnQt6jg98fy*zo z_wi6)2U^1KcK3wT1|*}W?;6qHxAEd9^E~Wj7M@LBdRDlAB6ZotZ`8aq>+epyn_rC@ zn7zS739A-C?~l}z!5u|o8hp{@Qf|_kBulR~zkm7qJ^s?HyAskw1*7+v`IG5To)Ro* z@wal+FJ<PcRN<tD1oG0O(WeY-_FY&PVL!U_BG4LN09!kBgQGVPc5)@zI(ST2RWiN) zM8iOd_*J!_Z^dzAQ|8prZERdo(fh1d7fV-@#jUD$d+uQOURla+!^6RLj*dy;k8>&~ zg#8LD>w`LWx3h~t!EUy1H$HB?v%?BU1c85~=YF~LQbhDQE!*89e^TgZSHI{`S~SCf z&SA(2u)<(*<`^4uD-0Ejb->s<V5|>dtQ;_ym5Dp#{}|X2q2Z^_|G(k#^F7OQgWh(6 qPsFL{SQ>``#Ky*2gr8+`>9k0OMFi(`q0|u}7Xf5fPhvG8nEx+9;Avq1 diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png b/platforms/browser/www/lib/ckeditor/plugins/templates/icons/hidpi/templates.png deleted file mode 100644 index 9a263404144c32c03ea1effa04c9c9454fb6b639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 zcmZ`(eK^wz9RH13j4(N7)Fw?RZ05WjH8X5ePOQ9Kj+qr(3md1@E{4VBH4-P0NIIEB zU3yX?uS4RD7V=th*5$o0H-FwA_k5qv_wzj8=ks|!&-eSsH`UA2eJ2zF1pr_tnMCxK zGin>k5P9du#VyGR65`=b1h%%T<XJ_Ie4-Lb^5@DO;%$HkCWYq!0Gvc7I#d0c@B8+$ z^xd^(qoTj1q`}VG38a%Y#e;3MtDnCc$!#y+!prztVHrndz~!YpA1wk3(pDW|Kb7xM zvjr|R_}%5!Ydl#sosG_`zgjiI>u;96JrFJ)%|8Us5)|2vt&gsbie5`}E#-lDWsoTv z3{!s94FuCQ1%^X#I2|fH-l1U#?#xJ35xWjYp^{A0U%;2X@h&bn);$db)BNBqKs@tF z+NX5=@zdbqM?oT~bo0{cYSh&EWak?SC?HRBZG7hFK%Lu%HF(ikU6ER-{a(JNLI5i* zGn2mBU3fg;XTh-KX{H7en&>rqSd=E~NVN;AuUY&SGyeKg15ba<{2(0ukmBJ{tQ3Ok zYlVZI0ijqi{&p#Sei%nRdA-^OVg0nGMlM)Ab*BP*$OeK&r!1hIUI2#P*8VyxL5)?L z+{pOG&qlh>v3SkkY3WF@?VuPbJ2$5j$hHPbFuM}H_Y>OHNGfeHxAq&C%*Et#1l3}i zm^pM|VG0)igZ|uHWZ-oKm%GHieJn)<i^xs&%hDoHl*>7nsZa{*E@fJ~WpKvWnE5?Z z)bqx6aS@i%L8jIT{!|7)7!gKv%&1iLEeuAYklOTsFLN`-pM0ym=w~w;Zx#oYv&7Ql zU5xg$QLC#8InlLOY<{%tQh4wnVYbqgDeCSU5{Z~s`81(X)(||Ba&T4&O!O4ED-c*F zVyFI=#SeC8Y{H|WvhCDx>*Pm}H%KjKC`eNKe#j<zFw!7QBA`oZ>IBmbYi#zse3fUv zA{#&F&;%eiGiIGy!H&JUL=#qeDn*GN@Zly*q$U(Mw@uQ|5mA!X3SZ%#rrJFV_UT~& zkka!pv+^3@h50pTF|2!@J-o=v%Jm9JEK4ix>B~jjRBmqK9T9c<c6H@fow!vdiq=jt zR1dh1gQVgKMBcQ4Pk4jrAU-ampijE|&q|Y`e@`U?r4>;jc6m4g!MP}B&sxqtGE&<Y z6X9)2I-(3>_-p1VO@-kxF3IC1Zh{SlGm@M@_R;ahyRvetgDlGuG9{AQ3mgt2-c)`a zvmL-IZqPxCkb42i-e&#BG{Hj=^`!^=9g>T=$o9YRkFOlwb2yKlq1Z`Ipb26*{FyIN zWgt`BW>GKDr^iTzOcZ8%LqjD`5G8dGZ<hPUv;v7^LoC=wD5siLClnQt6jg98fy*zo z_wi6)2U^1KcK3wT1|*}W?;6qHxAEd9^E~Wj7M@LBdRDlAB6ZotZ`8aq>+epyn_rC@ zn7zS739A-C?~l}z!5u|o8hp{@Qf|_kBulR~zkm7qJ^s?HyAskw1*7+v`IG5To)Ro* z@wal+FJ<PcRN<tD1oG0O(WeY-_FY&PVL!U_BG4LN09!kBgQGVPc5)@zI(ST2RWiN) zM8iOd_*J!_Z^dzAQ|8prZERdo(fh1d7fV-@#jUD$d+uQOURla+!^6RLj*dy;k8>&~ zg#8LD>w`LWx3h~t!EUy1H$HB?v%?BU1c85~=YF~LQbhDQE!*89e^TgZSHI{`S~SCf z&SA(2u)<(*<`^4uD-0Ejb->s<V5|>dtQ;_ym5Dp#{}|X2q2Z^_|G(k#^F7OQgWh(6 qPsFL{SQ>``#Ky*2gr8+`>9k0OMFi(`q0|u}7Xf5fPhvG8nEx+9;Avq1 diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png b/platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates-rtl.png deleted file mode 100644 index 202b6045fc70e78d2acdb18dea6547fdeb652148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;|xz1#}JFty_0?W9vKL<#@{^l({Vw=roObZygMS_x7|Lgo58IZ z*1;jtDRBE~q)A!3nzFB_s%qJ%SF6L#B$ETCsjgaeD97w@h=K9C>)N~4H5c<Kwro*v z5s1*6ej$ooX_k-X)4Z)w3s-4rEOl_X&*Z|Q$YM5|*NG!PbM4U@yZ;J{?j~)l5DpaF z_}Yr+u*37ul7|gkY)pJVpO*N%JaZPmk`qVb^Erp#mNkEuQ(6>}eeleOd(ATsp4o6M zY5)D%yVh-QKfLhlXPb#0n)|zYSX%@Fyd1N8ZO#XZux`0#A=kfb-Rrk6OR^aMObcr2 zaBzv&6%d>u>BJ%8+PFz);Z{GlueJTBpC(;<{dL>A*Z%KoZv}rmSk14gdTNu)wAA~> zRmc9;sXw11*~WNgj@wL*MXLmu6j^?0KA6)yMd-{QBRA3bHCtEeD{%=kxwve&rX)63 zrQ%%uB!z9iiY6SBb7@?8S)y7_`iGN%eTCE)w+|II$5`)iK1!OFI$2z6U4K0r!_hM@ ze%md4Y`^IJZxgSFbDVE)n=Jk^{^qt^qp$kGXC>FRcyw$5Mx1JiYeY#(Vo9o1a#1Rf zVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~1K%aPfsu-&AvZrIGp!Q02AiMEM}Qh6K{f>E rr<If^7Ns(jmzV2h=4BTrCl;jY<rk&TerF>ERK(!v>gTe~DWM4fT3G<T diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates.png b/platforms/browser/www/lib/ckeditor/plugins/templates/icons/templates.png deleted file mode 100644 index 202b6045fc70e78d2acdb18dea6547fdeb652148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i;|xz1#}JFty_0?W9vKL<#@{^l({Vw=roObZygMS_x7|Lgo58IZ z*1;jtDRBE~q)A!3nzFB_s%qJ%SF6L#B$ETCsjgaeD97w@h=K9C>)N~4H5c<Kwro*v z5s1*6ej$ooX_k-X)4Z)w3s-4rEOl_X&*Z|Q$YM5|*NG!PbM4U@yZ;J{?j~)l5DpaF z_}Yr+u*37ul7|gkY)pJVpO*N%JaZPmk`qVb^Erp#mNkEuQ(6>}eeleOd(ATsp4o6M zY5)D%yVh-QKfLhlXPb#0n)|zYSX%@Fyd1N8ZO#XZux`0#A=kfb-Rrk6OR^aMObcr2 zaBzv&6%d>u>BJ%8+PFz);Z{GlueJTBpC(;<{dL>A*Z%KoZv}rmSk14gdTNu)wAA~> zRmc9;sXw11*~WNgj@wL*MXLmu6j^?0KA6)yMd-{QBRA3bHCtEeD{%=kxwve&rX)63 zrQ%%uB!z9iiY6SBb7@?8S)y7_`iGN%eTCE)w+|II$5`)iK1!OFI$2z6U4K0r!_hM@ ze%md4Y`^IJZxgSFbDVE)n=Jk^{^qt^qp$kGXC>FRcyw$5Mx1JiYeY#(Vo9o1a#1Rf zVlXl=G}bjR*EKK+F*LU_Fa{!R10yQ~1K%aPfsu-&AvZrIGp!Q02AiMEM}Qh6K{f>E rr<If^7Ns(jmzV2h=4BTrCl;jY<rk&TerF>ERK(!v>gTe~DWM4fT3G<T diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/af.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/af.js deleted file mode 100644 index 3d31c9f5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/af.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","af",{button:"Sjablone",emptyListMsg:"(Geen sjablone gedefineer nie)",insertOption:"Vervang huidige inhoud",options:"Sjabloon opsies",selectPromptMsg:"Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):",title:"Inhoud Sjablone"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ar.js deleted file mode 100644 index b4d6e742..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ar.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ar",{button:"القوالب",emptyListMsg:"(لم يتم تعريف أي قالب)",insertOption:"استبدال المحتوى",options:"خصائص القوالب",selectPromptMsg:"اختر القالب الذي تود وضعه في المحرر",title:"قوالب المحتوى"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bg.js deleted file mode 100644 index 766b87ac..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bg.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bg",{button:"Шаблони",emptyListMsg:"(Няма дефинирани шаблони)",insertOption:"Препокрива актуалното съдържание",options:"Опции за шаблона",selectPromptMsg:"Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):",title:"Шаблони"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bn.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bn.js deleted file mode 100644 index d8faf6f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bn",{button:"টেমপ্লেট",emptyListMsg:"(কোন টেমপ্লেট ডিফাইন করা নেই)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):",title:"কনটেন্ট টেমপ্লেট"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bs.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bs.js deleted file mode 100644 index 09cfcd7e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/bs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","bs",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ca.js deleted file mode 100644 index 5aec5ba9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ca",{button:"Plantilles",emptyListMsg:"(No hi ha plantilles definides)",insertOption:"Reemplaça el contingut actual",options:"Opcions de plantilla",selectPromptMsg:"Seleccioneu una plantilla per usar a l'editor<br>(per defecte s'elimina el contingut actual):",title:"Plantilles de contingut"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cs.js deleted file mode 100644 index 0ceb5a01..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cs.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","cs",{button:"Šablony",emptyListMsg:"(Není definována žádná šablona)",insertOption:"Nahradit aktuální obsah",options:"Nastavení šablon",selectPromptMsg:"Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):",title:"Šablony obsahu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cy.js deleted file mode 100644 index 86896b0e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/cy.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","cy",{button:"Templedi",emptyListMsg:"(Dim templedi wedi'u diffinio)",insertOption:"Amnewid y cynnwys go iawn",options:"Opsiynau Templedi",selectPromptMsg:"Dewiswch dempled i'w agor yn y golygydd",title:"Templedi Cynnwys"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/da.js deleted file mode 100644 index a7505cc7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/da.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","da",{button:"Skabeloner",emptyListMsg:"(Der er ikke defineret nogen skabelon)",insertOption:"Erstat det faktiske indhold",options:"Skabelon muligheder",selectPromptMsg:"Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):",title:"Indholdsskabeloner"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/de.js deleted file mode 100644 index de5a7619..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/de.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","de",{button:"Vorlagen",emptyListMsg:"(keine Vorlagen definiert)",insertOption:"Aktuellen Inhalt ersetzen",options:"Vorlagen Optionen",selectPromptMsg:"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):",title:"Vorlagen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/el.js deleted file mode 100644 index ca7464d9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/el.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","el",{button:"Πρότυπα",emptyListMsg:"(Δεν έχουν καθοριστεί πρότυπα)",insertOption:"Αντικατάσταση υπάρχοντων περιεχομένων",options:"Επιλογές Προτύπου",selectPromptMsg:"Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα",title:"Πρότυπα Περιεχομένου"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-au.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-au.js deleted file mode 100644 index 65e54336..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-au.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-au",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-ca.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-ca.js deleted file mode 100644 index 5472454f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-ca",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-gb.js deleted file mode 100644 index ec9a7fd7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en-gb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en-gb",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en.js deleted file mode 100644 index c5fef88d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/en.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","en",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eo.js deleted file mode 100644 index 5d5afe6c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","eo",{button:"Ŝablonoj",emptyListMsg:"(Neniu ŝablono difinita)",insertOption:"Anstataŭigi la nunan enhavon",options:"Opcioj pri ŝablonoj",selectPromptMsg:"Bonvolu selekti la ŝablonon por malfermi ĝin en la redaktilo",title:"Enhavo de ŝablonoj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/es.js deleted file mode 100644 index c541e307..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/es.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","es",{button:"Plantillas",emptyListMsg:"(No hay plantillas definidas)",insertOption:"Reemplazar el contenido actual",options:"Opciones de plantillas",selectPromptMsg:"Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",title:"Contenido de Plantillas"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/et.js deleted file mode 100644 index 7e5e5855..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/et.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","et",{button:"Mall",emptyListMsg:"(Ühtegi malli ei ole defineeritud)",insertOption:"Praegune sisu asendatakse",options:"Malli valikud",selectPromptMsg:"Palun vali mall, mis avada redaktoris<br />(praegune sisu läheb kaotsi):",title:"Sisumallid"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eu.js deleted file mode 100644 index 25b36ae1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/eu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","eu",{button:"Txantiloiak",emptyListMsg:"(Ez dago definitutako txantiloirik)",insertOption:"Ordeztu oraingo edukiak",options:"Txantiloi Aukerak",selectPromptMsg:"Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",title:"Eduki Txantiloiak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fa.js deleted file mode 100644 index b7a94ba4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fa.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fa",{button:"الگوها",emptyListMsg:"(الگوئی تعریف نشده است)",insertOption:"محتویات کنونی جایگزین شوند",options:"گزینه‌های الگو",selectPromptMsg:"لطفاً الگوی مورد نظر را برای بازکردن در ویرایشگر انتخاب کنید",title:"الگوهای محتویات"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fi.js deleted file mode 100644 index e58e9e46..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fi",{button:"Pohjat",emptyListMsg:"(Ei määriteltyjä pohjia)",insertOption:"Korvaa koko sisältö",options:"Sisältöpohjan ominaisuudet",selectPromptMsg:"Valitse editoriin avattava pohja",title:"Sisältöpohjat"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fo.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fo.js deleted file mode 100644 index 9ef42b39..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fo.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fo",{button:"Skabelónir",emptyListMsg:"(Ongar skabelónir tøkar)",insertOption:"Yvirskriva núverandi innihald",options:"Møguleikar fyri Template",selectPromptMsg:"Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):",title:"Innihaldsskabelónir"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr-ca.js deleted file mode 100644 index 91003fc7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr-ca.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fr-ca",{button:"Modèles",emptyListMsg:"(Aucun modèle disponible)",insertOption:"Remplacer tout le contenu actuel",options:"Options de modèles",selectPromptMsg:"Sélectionner le modèle à ouvrir dans l'éditeur",title:"Modèles de contenu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr.js deleted file mode 100644 index 48cb6d3d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/fr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","fr",{button:"Modèles",emptyListMsg:"(Aucun modèle disponible)",insertOption:"Remplacer le contenu actuel",options:"Options des modèles",selectPromptMsg:"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur",title:"Contenu des modèles"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gl.js deleted file mode 100644 index 24483d1a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","gl",{button:"Modelos",emptyListMsg:"(Non hai modelos definidos)",insertOption:"Substituír o contido actual",options:"Opcións de modelos",selectPromptMsg:"Seleccione o modelo a abrir no editor",title:"Modelos de contido"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gu.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gu.js deleted file mode 100644 index ae121968..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/gu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","gu",{button:"ટેમ્પ્લેટ",emptyListMsg:"(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)",insertOption:"મૂળ શબ્દને બદલો",options:"ટેમ્પ્લેટના વિકલ્પો",selectPromptMsg:"એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):",title:"કન્ટેન્ટ ટેમ્પ્લેટ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/he.js deleted file mode 100644 index 0e970ca5..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/he.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","he",{button:"תבניות",emptyListMsg:"(לא הוגדרו תבניות)",insertOption:"החלפת תוכן ממשי",options:"אפשרויות התבניות",selectPromptMsg:"יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:",title:"תביות תוכן"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hi.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hi.js deleted file mode 100644 index 246bfe04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hi",{button:"टॅम्प्लेट",emptyListMsg:"(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)",insertOption:"मूल शब्दों को बदलें",options:"Template Options",selectPromptMsg:"ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):",title:"कन्टेन्ट टॅम्प्लेट"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hr.js deleted file mode 100644 index 3bc52ea0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hr",{button:"Predlošci",emptyListMsg:"(Nema definiranih predložaka)",insertOption:"Zamijeni trenutne sadržaje",options:"Opcije predložaka",selectPromptMsg:"Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",title:"Predlošci sadržaja"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hu.js deleted file mode 100644 index 90ccbb66..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/hu.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","hu",{button:"Sablonok",emptyListMsg:"(Nincs sablon megadva)",insertOption:"Kicseréli a jelenlegi tartalmat",options:"Sablon opciók",selectPromptMsg:"Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",title:"Elérhető sablonok"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/id.js deleted file mode 100644 index 8dc86b0b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/id.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","id",{button:"Contoh",emptyListMsg:"(Tidak ada contoh didefinisikan)",insertOption:"Ganti konten sebenarnya",options:"Opsi Contoh",selectPromptMsg:"Mohon pilih contoh untuk dibuka di editor",title:"Contoh Konten"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/is.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/is.js deleted file mode 100644 index 13e0736d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/is.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","is",{button:"Sniðmát",emptyListMsg:"(Ekkert sniðmát er skilgreint!)",insertOption:"Skipta út raunverulegu innihaldi",options:"Template Options",selectPromptMsg:"Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):",title:"Innihaldssniðmát"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/it.js deleted file mode 100644 index c3303ce1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/it.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","it",{button:"Modelli",emptyListMsg:"(Nessun modello definito)",insertOption:"Cancella il contenuto corrente",options:"Opzioni del Modello",selectPromptMsg:"Seleziona il modello da aprire nell'editor",title:"Contenuto dei modelli"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ja.js deleted file mode 100644 index dbf519c3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ja.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ja",{button:"テンプレート",emptyListMsg:"(テンプレートが定義されていません)",insertOption:"現在のエディタの内容と置き換えます",options:"テンプレートオプション",selectPromptMsg:"エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):",title:"内容テンプレート"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ka.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ka.js deleted file mode 100644 index 5864b757..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ka.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ka",{button:"თარგები",emptyListMsg:"(თარგი არაა განსაზღვრული)",insertOption:"მიმდინარე შეგთავსის შეცვლა",options:"თარგების პარამეტრები",selectPromptMsg:"აირჩიეთ თარგი რედაქტორისთვის",title:"თარგები"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/km.js deleted file mode 100644 index 14a0cf02..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/km.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","km",{button:"ពុម្ព​គំរូ",emptyListMsg:"(មិន​មាន​ពុម្ព​គំរូ​ត្រូវ​បាន​កំណត់)",insertOption:"ជំនួស​ក្នុង​មាតិកា​បច្ចុប្បន្ន",options:"ជម្រើស​ពុម្ព​គំរូ",selectPromptMsg:"សូម​រើស​ពុម្ព​គំរូ​ដើម្បី​បើក​ក្នុង​កម្មវិធី​សរសេរ​អត្ថបទ",title:"ពុម្ព​គំរូ​មាតិកា"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ko.js deleted file mode 100644 index 99c4f608..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ko.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ko",{button:"템플릿",emptyListMsg:"(템플릿이 없습니다.)",insertOption:"현재 내용 바꾸기",options:"템플릿 옵션",selectPromptMsg:"에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):",title:"내용 템플릿"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ku.js deleted file mode 100644 index a5bda7d0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ku.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ku",{button:"ڕووکار",emptyListMsg:"(هیچ ڕووکارێك دیارینەکراوە)",insertOption:"لە شوێن دانانی ئەم پێکهاتانەی ئێستا",options:"هەڵبژاردەکانی ڕووکار",selectPromptMsg:"ڕووکارێك هەڵبژێره بۆ کردنەوەی له سەرنووسەر:",title:"پێکهاتەی ڕووکار"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lt.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lt.js deleted file mode 100644 index ebbf213c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","lt",{button:"Šablonai",emptyListMsg:"(Šablonų sąrašas tuščias)",insertOption:"Pakeisti dabartinį turinį pasirinktu šablonu",options:"Template Options",selectPromptMsg:"Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):",title:"Turinio šablonai"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lv.js deleted file mode 100644 index a08ad5b4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/lv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","lv",{button:"Sagataves",emptyListMsg:"(Nav norādītas sagataves)",insertOption:"Aizvietot pašreizējo saturu",options:"Sagataves uzstādījumi",selectPromptMsg:"Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):",title:"Satura sagataves"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mk.js deleted file mode 100644 index ade20ea2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","mk",{button:"Templates",emptyListMsg:"(No templates defined)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Please select the template to open in the editor",title:"Content Templates"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mn.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mn.js deleted file mode 100644 index 768bce5a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/mn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","mn",{button:"Загварууд",emptyListMsg:"(Загвар тодорхойлогдоогүй байна)",insertOption:"Одоогийн агууллагыг дарж бичих",options:"Template Options",selectPromptMsg:"Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):",title:"Загварын агуулга"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ms.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ms.js deleted file mode 100644 index 5bf40cdf..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ms.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ms",{button:"Templat",emptyListMsg:"(Tiada Templat Disimpan)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",title:"Templat Kandungan"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nb.js deleted file mode 100644 index 5260dc85..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nb.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","nb",{button:"Maler",emptyListMsg:"(Ingen maler definert)",insertOption:"Erstatt gjeldende innhold",options:"Alternativer for mal",selectPromptMsg:"Velg malen du vil åpne i redigeringsverktøyet:",title:"Innholdsmaler"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nl.js deleted file mode 100644 index a752e4bc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/nl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","nl",{button:"Sjablonen",emptyListMsg:"(Geen sjablonen gedefinieerd)",insertOption:"Vervang de huidige inhoud",options:"Template opties",selectPromptMsg:"Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):",title:"Inhoud sjablonen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/no.js deleted file mode 100644 index cf5948b3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/no.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","no",{button:"Maler",emptyListMsg:"(Ingen maler definert)",insertOption:"Erstatt gjeldende innhold",options:"Alternativer for mal",selectPromptMsg:"Velg malen du vil åpne i redigeringsverktøyet:",title:"Innholdsmaler"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pl.js deleted file mode 100644 index 537d93c6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pl",{button:"Szablony",emptyListMsg:"(Brak zdefiniowanych szablonów)",insertOption:"Zastąp obecną zawartość",options:"Opcje szablonów",selectPromptMsg:"Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):",title:"Szablony zawartości"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt-br.js deleted file mode 100644 index 65949501..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt-br.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pt-br",{button:"Modelos de layout",emptyListMsg:"(Não foram definidos modelos de layout)",insertOption:"Substituir o conteúdo atual",options:"Opções de Template",selectPromptMsg:"Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",title:"Modelo de layout de conteúdo"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt.js deleted file mode 100644 index 829299eb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/pt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","pt",{button:"Modelos",emptyListMsg:"(Sem modelos definidos)",insertOption:"Substituir conteúdos actuais",options:"Opções do Modelo",selectPromptMsg:"Por favor, selecione o modelo para abrir no editor",title:"Conteúdo dos Modelos"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ro.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ro.js deleted file mode 100644 index 8ef5d355..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ro.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ro",{button:"Template-uri (şabloane)",emptyListMsg:"(Niciun template (şablon) definit)",insertOption:"Înlocuieşte cuprinsul actual",options:"Opțiuni șabloane",selectPromptMsg:"Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",title:"Template-uri (şabloane) de conţinut"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ru.js deleted file mode 100644 index 201fa65b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ru.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ru",{button:"Шаблоны",emptyListMsg:"(не определено ни одного шаблона)",insertOption:"Заменить текущее содержимое",options:"Параметры шаблона",selectPromptMsg:"Пожалуйста, выберите, какой шаблон следует открыть в редакторе",title:"Шаблоны содержимого"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/si.js deleted file mode 100644 index dc4ea690..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/si.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","si",{button:"අච්චුව",emptyListMsg:"කිසිම අච්චුවක් කලින් තීරණය කර ",insertOption:"සත්‍ය අන්තර්ගතයන් ප්‍රතිස්ථාපනය කරන්න",options:"අච්චු ",selectPromptMsg:"කරුණාකර සංස්කරණය සදහා අච්චුවක් ",title:"අන්තර්ගත් අච්චුන්"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sk.js deleted file mode 100644 index 60f33664..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sk",{button:"Šablóny",emptyListMsg:"(Žiadne šablóny nedefinované)",insertOption:"Nahradiť aktuálny obsah",options:"Možnosti šablóny",selectPromptMsg:"Prosím vyberte šablónu na otvorenie v editore",title:"Šablóny obsahu"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sl.js deleted file mode 100644 index db33ea9a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sl.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sl",{button:"Predloge",emptyListMsg:"(Ni pripravljenih predlog)",insertOption:"Zamenjaj trenutno vsebino",options:"Možnosti Predloge",selectPromptMsg:"Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",title:"Vsebinske predloge"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sq.js deleted file mode 100644 index f10c387e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sq.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sq",{button:"Shabllonet",emptyListMsg:"(Asnjë shabllon nuk është paradefinuar)",insertOption:"Zëvendëso përmbajtjen aktuale",options:"Opsionet e Shabllonit",selectPromptMsg:"Përzgjidhni shabllonin për të hapur tek redaktuesi",title:"Përmbajtja e Shabllonit"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr-latn.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr-latn.js deleted file mode 100644 index 96498838..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr-latn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sr-latn",{button:"Obrasci",emptyListMsg:"(Nema definisanih obrazaca)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",title:"Obrasci za sadržaj"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr.js deleted file mode 100644 index fea8b5ea..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sr",{button:"Обрасци",emptyListMsg:"(Нема дефинисаних образаца)",insertOption:"Replace actual contents",options:"Template Options",selectPromptMsg:"Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):",title:"Обрасци за садржај"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sv.js deleted file mode 100644 index 78e82de7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/sv.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","sv",{button:"Sidmallar",emptyListMsg:"(Ingen mall är vald)",insertOption:"Ersätt aktuellt innehåll",options:"Inställningar för mall",selectPromptMsg:"Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",title:"Sidmallar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/th.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/th.js deleted file mode 100644 index e9d8e6b0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/th.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","th",{button:"เทมเพลต",emptyListMsg:"(ยังไม่มีการกำหนดเทมเพลต)",insertOption:"แทนที่เนื้อหาเว็บไซต์ที่เลือก",options:"ตัวเลือกเกี่ยวกับเทมเพลท",selectPromptMsg:"กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):",title:"เทมเพลตของส่วนเนื้อหาเว็บไซต์"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tr.js deleted file mode 100644 index bd550faa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tr.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","tr",{button:"Şablonlar",emptyListMsg:"(Belirli bir şablon seçilmedi)",insertOption:"Mevcut içerik ile değiştir",options:"Şablon Seçenekleri",selectPromptMsg:"Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",title:"İçerik Şablonları"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tt.js deleted file mode 100644 index 04f0c93c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/tt.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","tt",{button:"Шаблоннар",emptyListMsg:"(Шаблоннар билгеләнмәгән)",insertOption:"Әлеге эчтәлекне алмаштыру",options:"Шаблон үзлекләре",selectPromptMsg:"Please select the template to open in the editor",title:"Эчтәлек шаблоннары"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ug.js deleted file mode 100644 index bb66471e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/ug.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","ug",{button:"قېلىپ",emptyListMsg:"(قېلىپ يوق)",insertOption:"نۆۋەتتىكى مەزمۇننى ئالماشتۇر",options:"قېلىپ تاللانمىسى",selectPromptMsg:"تەھرىرلىگۈچنىڭ مەزمۇن قېلىپىنى تاللاڭ:",title:"مەزمۇن قېلىپى"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/uk.js deleted file mode 100644 index 9e543981..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/uk.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","uk",{button:"Шаблони",emptyListMsg:"(Не знайдено жодного шаблону)",insertOption:"Замінити поточний вміст",options:"Опції шаблону",selectPromptMsg:"Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):",title:"Шаблони змісту"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/vi.js deleted file mode 100644 index 3c182f47..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/vi.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","vi",{button:"Mẫu dựng sẵn",emptyListMsg:"(Không có mẫu dựng sẵn nào được định nghĩa)",insertOption:"Thay thế nội dung hiện tại",options:"Tùy chọn mẫu dựng sẵn",selectPromptMsg:"Hãy chọn mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):",title:"Nội dung Mẫu dựng sẵn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh-cn.js deleted file mode 100644 index f0216481..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh-cn.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","zh-cn",{button:"模板",emptyListMsg:"(没有模板)",insertOption:"替换当前内容",options:"模板选项",selectPromptMsg:"请选择要在编辑器中使用的模板:",title:"内容模板"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh.js deleted file mode 100644 index dd974dff..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/lang/zh.js +++ /dev/null @@ -1 +0,0 @@ -CKEDITOR.plugins.setLang("templates","zh",{button:"範本",emptyListMsg:"(尚未定義任何範本)",insertOption:"替代實際內容",options:"範本選項",selectPromptMsg:"請選擇要在編輯器中開啟的範本。",title:"內容範本"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/templates/plugin.js deleted file mode 100644 index a5f6d642..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("templates",{requires:"dialog",lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn",icons:"templates,templates-rtl",hidpi:!0,init:function(a){CKEDITOR.dialog.add("templates",CKEDITOR.getUrl(this.path+"dialogs/templates.js"));a.addCommand("templates",new CKEDITOR.dialogCommand("templates"));a.ui.addButton&& -a.ui.addButton("Templates",{label:a.lang.templates.button,command:"templates",toolbar:"doctools,10"})}});var c={},f={};CKEDITOR.addTemplates=function(a,d){c[a]=d};CKEDITOR.getTemplates=function(a){return c[a]};CKEDITOR.loadTemplates=function(a,d){for(var e=[],b=0,c=a.length;b<c;b++)f[a[b]]||(e.push(a[b]),f[a[b]]=1);e.length?CKEDITOR.scriptLoader.load(e,d):setTimeout(d,0)}})();CKEDITOR.config.templates_files=[CKEDITOR.getUrl("plugins/templates/templates/default.js")]; -CKEDITOR.config.templates_replaceContent=!0; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/templates/default.js b/platforms/browser/www/lib/ckeditor/plugins/templates/templates/default.js deleted file mode 100644 index d8c172e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/templates/templates/default.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'<h3><img src=" " alt="" style="margin-right: 10px" height="100" width="100" align="left" />Type the title here</h3><p>Type the text here</p>'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", -html:'<table cellspacing="0" cellpadding="0" style="width:100%" border="0"><tr><td style="width:50%"><h3>Title 1</h3></td><td></td><td style="width:50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'<div style="width: 80%"><h3>Title goes here</h3><table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table><p>Type the text here</p></div>'}]}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template1.gif b/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template1.gif deleted file mode 100644 index efdabbebd4503ceb55c948fa73b9b83cbd373e57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_!bNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB95pDD3{Ep z^T{;k4xj+g%7JRP+$IPq!1Bb&uKB$DQa@x|8x8NO4b`hO25#T<cT?Wp$MV<17dSFF z))BV|H3v{fXt;v7Qz+>OnRw~9=3yE0xyeE4CQ8$(2)Mz>8udZCXX=BRr7DZbW_#-a zYZEHlJM(KAEc4dditDMnJ4(CC+&uK06fIp0D*Z|wX5EYpGb{?;a*WKVoEoWp!Y!`y zeo4*}FFC(bZ<u%9$nH#MiXXad0R3$OV^9jhghduI4C3%%k9`6wT1+QVA-9Z3Kq7Ly z;ql{)kRtK8vxt%(#*z~^va~_+<s_FfO%|-VgJQ~^i&o+sN%QB-n?ivSEo$=-QkX%P V&N}LJD2Az2t6IH^HS2={06Vn%v1I@N diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template2.gif b/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template2.gif deleted file mode 100644 index d1cebb3aed88265add0a1d87d40de566f86a9619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZx_Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l)5 z^9hYgr_{iwip@$vOs!XY{ff7r?)dx+qsQEX@;zh1=Oa1&?y=+d0`r>f@duda#%D-q zaHzPUxA@lRm;@PF<R|E*cA3?dNXa+p2?QF-GfH|?csggPiIv$(#R;HFXG)usdMlZ$ zTglrSWDC5)3On^`93?w!B+P8${Ot29eG^?BQk)EhyzR7%T}mCkG)~@fea?}tJ~ZwP zF9_a_+eu$;e~)giKb_z2;$6IfgHG@RnC&3KG71+O{O7Pv!-(!6Y9NRa6GMw06gST5 f=<g#)5$xKPRCn@RN^%%lx_k*Urp%cV3IG5*5PY8V diff --git a/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template3.gif b/platforms/browser/www/lib/ckeditor/plugins/templates/templates/images/template3.gif deleted file mode 100644 index db41cb4fb8fc7eafac8f382810e87147e791ad6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^Y>Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l%g z^9hYgr_`$T`us4l+^+W<)gC_JviY3#AeC&_xD98m<8-m1jvsB&<_@0<GMBdz090rP zFgS9^!+7$h2y*z>q~XXRsCap^IRqK$(K#c!N9pBf82AawVH$?WN){q&IjedXiz+EX zOS+od%WDgp+d909toAG5`lTy-9D18rOxWx+T}>D*o&1Qa9n5V^96nACtqfi*?*05t zZSMX~zfpQ^<%jRPUfiDEO<g>8=eEuB)DKv}S_cJW8uTxqL`=(AMXYB~Aenu4SM=e_ zrj6M`kqsZ_xrlC}y^5evW>krApudqWP2zFM5Fo{b%sA$2wGU)SI5vkKVQCad(WEn$ zGF`IFr&KONpB8ayRSwduHn4I{;q@zxs8h=VDkqjl*t8<nvaR~I>(;n#c+zd*_U=jy QeEa(S3plV~2n7HDJNoX*`2YX_ diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js deleted file mode 100644 index adc1cfb3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/dialogs/uicolor.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("uicolor",function(b){function f(a){/^#/.test(a)&&(a=window.YAHOO.util.Color.hex2rgb(a.substr(1)));c.setValue(a,!0);c.refresh(e)}function g(a){b.setUiColor(a);d._.contents.tab1.configBox.setValue('config.uiColor = "#'+c.get("hex")+'"')}var d,c,h=b.getUiColor(),e="cke_uicolor_picker"+CKEDITOR.tools.getNextNumber();return{title:b.lang.uicolor.title,minWidth:360,minHeight:320,onLoad:function(){d=this;this.setupContent();CKEDITOR.env.ie7Compat&&d.parts.contents.setStyle("overflow", -"hidden")},contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{id:"yuiColorPicker",type:"html",html:"<div id='"+e+"' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",onLoad:function(){var a=CKEDITOR.getUrl("plugins/uicolor/yui/");this.picker=c=new window.YAHOO.widget.ColorPicker(e,{showhsvcontrols:!0,showhexcontrols:!0,images:{PICKER_THUMB:a+"assets/picker_thumb.png",HUE_THUMB:a+"assets/hue_thumb.png"}});h&&f(h);c.on("rgbChange",function(){d._.contents.tab1.predefined.setValue(""); -g("#"+c.get("hex"))});for(var a=new CKEDITOR.dom.nodeList(c.getElementsByTagName("input")),b=0;b<a.count();b++)a.getItem(b).addClass("cke_dialog_ui_input_text")}},{id:"tab1",type:"vbox",children:[{type:"hbox",children:[{id:"predefined",type:"select","default":"",label:b.lang.uicolor.predefined,items:[[""],["Light blue","#9AB8F3"],["Sand","#D2B48C"],["Metallic","#949AAA"],["Purple","#C2A3C7"],["Olive","#A2C980"],["Happy green","#9BD446"],["Jezebel Blue","#14B8C4"],["Burn","#FF893A"],["Easy red","#FF6969"], -["Pisces 3","#48B4F2"],["Aquarius 5","#487ED4"],["Absinthe","#A8CF76"],["Scrambled Egg","#C7A622"],["Hello monday","#8E8D80"],["Lovely sunshine","#F1E8B1"],["Recycled air","#B3C593"],["Down","#BCBCA4"],["Mark Twain","#CFE91D"],["Specks of dust","#D1B596"],["Lollipop","#F6CE23"]],onChange:function(){var a=this.getValue();a?(f(a),g(a),CKEDITOR.document.getById("predefinedPreview").setStyle("background",a)):CKEDITOR.document.getById("predefinedPreview").setStyle("background","")},onShow:function(){var a= -b.getUiColor();a&&this.setValue(a)}},{id:"predefinedPreview",type:"html",html:'<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;"><div id="predefinedPreview" style="width: 30px; height: 30px;">&nbsp;</div></div>'}]},{id:"configBox",type:"text",label:b.lang.uicolor.config,onShow:function(){var a=b.getUiColor();a&&this.setValue('config.uiColor = "'+a+'"')}}]}]}],buttons:[CKEDITOR.dialog.okButton]}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png deleted file mode 100644 index e6efa4a30fe2fc09920420fb582a9f5b6c9860d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2287 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 Hf7*WmBBC{v diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/icons/uicolor.png deleted file mode 100644 index d5739dffeafb242fe19d1ea330f27e25ae9c695d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(>+fY#}JFtwUhUID_2S!vwxqWre)-pBlb~YLl#%BYuDjNvv#B( zICSjT+VvZE9&0{ouei3n^+r`}*v9b0_gikMse3pGojB9AsY$RiS*_D}ru=>FJl>ei z`g`tvKJff$Wn7^QyP)IsQlHBzlTUuwTNo>T{&UA7j-?{IIuaz<rlls%Qd2Tw{KNK# z<<F0^-}ygC{&3d3da+dYdMW2&ft`Ezs!l$+XO{PY`AdUdw&$32XU@`C%F)y?d$zQn zpWnNN_$fj2ZO$Jqja_m#&)Cwkv*VAB()?9dSA}Sa-g;~HvP8=F@&yy#!v+Cfg#`r* z-o1bC?X_}$>~+`8I^2SWrLpVh%%AVAH$Azyc=Gb)>P-p?eaVY74t=kkq>`AN?7VE* zGA*T~sA;XsGNlf*zkU1GoSU0_OO)=h<Ht`vE&8#~U*@>RQjbY320V-!V%_--{7Ox1 z2Il79_eJP@`t#?^>C@cvo^RZ`we@)=4;%9%3%N-^isx`bX68%V1~FGbet!P^;+=N_ zWZD!HB{pr_=C=Iu!rN~zz5o95YgNha*h2<SK7RbD+b~asb6Tq8y4OZ#W^4vW=FXg% zSX(={#HzPLL1{^lX3hQQuU?(%c>Ke@$!Vd$y}Nf8zP6gRY@*jvh80({SR5Vp-<Mza z{`ZY-zIOBZ4;#2}H#Ov#{Z6f~pMUXU;H8%)%F4=f=Fa`wui+`g;L>vXwD+>*%lH4- z*MIH(_nUX`{*720w(|OGA0HnB37!{ayCvET-#BVbJ!HTmb9~{&j18MNf8Kcg^+I+> zh7Z3lUc9*e^y$;V?d|QrATpZCb6-jBUfyl9>gsA4dHMUy){X)SXVZiQ6U)lJ#jXwe zon2ZQy6L7)t5f6Aqpm!MAN=|?tGk<9s+Vo~^5t6d&#$-WD_%B*>Grlvv)LxIeWwJe zF1>QSXy+QQrIU<&gJ&*V85R~6vNI;kYvp>cm6ulE+m?Hza8BaoMH)$Ub^mtXk63@* zdVOXm$A6{;kEVX)+I;IGF!`&NxJHzuB$lLFB^RXvDF!10Lt|Y7b6o?I5JPh-17jf4 zHZZa>Fz{Wn8<;haH00)|WTsW()?o9K`3O*hB*=!~{Irtt#G+J&^73-M%)IR4<ivth Yz5Jr|+3#$mfQlGAUHx3vIVCg!0LM124gdfE diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt deleted file mode 100644 index 2af2d324..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/_translationstatus.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -bg.js Found: 4 Missing: 0 -cs.js Found: 4 Missing: 0 -cy.js Found: 4 Missing: 0 -da.js Found: 4 Missing: 0 -de.js Found: 4 Missing: 0 -el.js Found: 4 Missing: 0 -eo.js Found: 4 Missing: 0 -et.js Found: 4 Missing: 0 -fa.js Found: 4 Missing: 0 -fi.js Found: 4 Missing: 0 -fr.js Found: 4 Missing: 0 -he.js Found: 4 Missing: 0 -hr.js Found: 4 Missing: 0 -it.js Found: 4 Missing: 0 -mk.js Found: 4 Missing: 0 -nb.js Found: 4 Missing: 0 -nl.js Found: 4 Missing: 0 -no.js Found: 4 Missing: 0 -pl.js Found: 4 Missing: 0 -tr.js Found: 4 Missing: 0 -ug.js Found: 4 Missing: 0 -uk.js Found: 4 Missing: 0 -vi.js Found: 4 Missing: 0 -zh-cn.js Found: 4 Missing: 0 diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ar.js deleted file mode 100644 index 6dcf6470..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ar",{title:"منتقي الألوان",preview:"معاينة مباشرة",config:"قص السطر إلى الملف config.js",predefined:"مجموعات ألوان معرفة مسبقا"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/bg.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/bg.js deleted file mode 100644 index 6c58885a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","bg",{title:"ПИ избор на цвят",preview:"Преглед",config:"Вмъкнете този низ във Вашия config.js fajl",predefined:"Предефинирани цветови палитри"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ca.js deleted file mode 100644 index 6f97e2a7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ca",{title:"UI Color Picker",preview:"Vista prèvia",config:"Enganxa aquest text dins el fitxer config.js",predefined:"Conjunts de colors predefinits"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cs.js deleted file mode 100644 index ef0e2e0b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","cs",{title:"Výběr barvy rozhraní",preview:"Živý náhled",config:"Vložte tento řetězec do vašeho souboru config.js",predefined:"Přednastavené sady barev"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cy.js deleted file mode 100644 index 45634661..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","cy",{title:"Dewisydd Lliwiau'r UI",preview:"Rhagolwg Byw",config:"Gludwch y llinyn hwn i'ch ffeil config.js",predefined:"Setiau lliw wedi'u cyn-ddiffinio"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/da.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/da.js deleted file mode 100644 index d05bbe87..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","da",{title:"Brugerflade på farvevælger",preview:"Vis liveeksempel",config:"Indsæt denne streng i din config.js fil",predefined:"Prædefinerede farveskemaer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/de.js deleted file mode 100644 index dfb3f1a4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","de",{title:"UI Pipette",preview:"Live-Vorschau",config:"Fügen Sie diese Zeichenfolge in die 'config.js' Datei.",predefined:"Vordefinierte Farbsätze"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/el.js deleted file mode 100644 index 3cb51681..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","el",{title:"Διεπαφή Επιλογής Χρωμάτων",preview:"Ζωντανή Προεπισκόπηση",config:"Επικολλήστε αυτό το κείμενο στο αρχείο config.js",predefined:"Προκαθορισμένα σύνολα χρωμάτων"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js deleted file mode 100644 index ce29dcdd..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","en-gb",{title:"UI Colour Picker",preview:"Live preview",config:"Paste this string into your config.js file",predefined:"Predefined colour sets"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en.js deleted file mode 100644 index b43a201d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","en",{title:"UI Color Picker",preview:"Live preview",config:"Paste this string into your config.js file",predefined:"Predefined color sets"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eo.js deleted file mode 100644 index 2498f670..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","eo",{title:"UI Kolorselektilo",preview:"Vidigi la aspekton",config:"Gluu tiun signoĉenon en vian dosieron config.js",predefined:"Antaŭdifinita koloraro"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/es.js deleted file mode 100644 index ef68b1d4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","es",{title:"Recolector de Color de Interfaz de Usuario",preview:"Vista previa en vivo",config:"Pega esta cadena en tu archivo config.js",predefined:"Conjuntos predefinidos de colores"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/et.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/et.js deleted file mode 100644 index 7ebe8364..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","et",{title:"Värvivalija kasutajaliides",preview:"Automaatne eelvaade",config:"Aseta see sõne oma config.js faili.",predefined:"Eelmääratud värvikomplektid"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eu.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eu.js deleted file mode 100644 index 52e479f3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","eu",{title:"EI Kolore Hautatzailea",preview:"Zuzeneko aurreikuspena",config:"Itsatsi karaktere kate hau zure config.js fitxategian.",predefined:"Aurredefinitutako kolore multzoak"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fa.js deleted file mode 100644 index 7d62b4cc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fa",{title:"انتخاب رنگ رابط کاربری",preview:"پیش‌نمایش زنده",config:"این رشته را در پروندهٔ config.js خود رونوشت کنید.",predefined:"مجموعه رنگ از پیش تعریف شده"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fi.js deleted file mode 100644 index 724ff5ad..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fi",{title:"Käyttöliittymän väripaletti",preview:"Esikatsele heti",config:"Liitä tämä merkkijono config.js tiedostoosi",predefined:"Esimääritellyt värijoukot"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js deleted file mode 100644 index 75791374..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fr-ca",{title:"Sélecteur de couleur",preview:"Aperçu",config:"Insérez cette ligne dans votre fichier config.js",predefined:"Ensemble de couleur prédéfinies"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr.js deleted file mode 100644 index 457a953d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","fr",{title:"UI Sélecteur de couleur",preview:"Aperçu",config:"Collez cette chaîne de caractères dans votre fichier config.js",predefined:"Palettes de couleurs prédéfinies"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/gl.js deleted file mode 100644 index 6151989e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","gl",{title:"Recolledor de cor da interface de usuario",preview:"Vista previa en vivo",config:"Pegue esta cadea no seu ficheiro config.js",predefined:"Conxuntos predefinidos de cores"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/he.js deleted file mode 100644 index e210e039..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","he",{title:"בחירת צבע ממשק משתמש",preview:"תצוגה מקדימה",config:"הדבק את הטקסט הבא לתוך הקובץ config.js",predefined:"קבוצות צבעים מוגדרות מראש"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hr.js deleted file mode 100644 index 1495ab04..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","hr",{title:"UI odabir boja",preview:"Pregled uživo",config:"Zalijepite ovaj tekst u Vašu config.js datoteku.",predefined:"Već postavljeni setovi boja"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hu.js deleted file mode 100644 index 2c4a5e55..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","hu",{title:"UI Színválasztó",preview:"Élő előnézet",config:"Illessze be ezt a szöveget a config.js fájlba",predefined:"Előre definiált színbeállítások"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/id.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/id.js deleted file mode 100644 index b2af0502..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","id",{title:"Pengambil Warna UI",preview:"Pratinjau",config:"Tempel string ini ke arsip config.js anda.",predefined:"Set warna belum terdefinisi."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/it.js deleted file mode 100644 index 3c294a76..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","it",{title:"Selettore Colore UI",preview:"Anteprima Live",config:"Incolla questa stringa nel tuo file config.js",predefined:"Set di colori predefiniti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ja.js deleted file mode 100644 index 55b1f9c2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ja",{title:"UIカラーピッカー",preview:"ライブプレビュー",config:"この文字列を config.js ファイルへ貼り付け",predefined:"既定カラーセット"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/km.js deleted file mode 100644 index c38c5be9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","km",{title:"ប្រដាប់​រើស​ពណ៌",preview:"មើល​ជាមុន​ផ្ទាល់",config:"បិទ​ភ្ជាប់​ខ្សែ​អក្សរ​នេះ​ទៅ​ក្នុង​ឯកសារ config.js របស់​អ្នក",predefined:"ឈុត​ពណ៌​កំណត់​រួច​ស្រេច"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ko.js deleted file mode 100644 index af9199f4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ko",{title:"UI 색상 선택기",preview:"미리보기",config:"이 문자열을 config.js 에 붙여넣으세요",predefined:"미리 정의된 색깔들"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ku.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ku.js deleted file mode 100644 index 11b7fd1c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ku",{title:"هەڵگری ڕەنگ بۆ ڕووکاری بەکارهێنەر",preview:"پێشبینین بە زیندوویی",config:"ئەم دەقانە بلکێنە بە پەڕگەی config.js-fil",predefined:"کۆمەڵە ڕەنگە دیاریکراوەکانی پێشوو"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/lv.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/lv.js deleted file mode 100644 index 5655b659..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","lv",{title:"UI krāsas izvēle",preview:"Priekšskatījums",config:"Ielīmējiet šo rindu jūsu config.js failā",predefined:"Predefinēti krāsu komplekti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/mk.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/mk.js deleted file mode 100644 index b219d766..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/mk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","mk",{title:"Палета со бои",preview:"Преглед",config:"Залепи го овој текст во config.js датотеката",predefined:"Предефинирани множества на бои"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nb.js deleted file mode 100644 index 84ae603b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","nb",{title:"Fargevelger for brukergrensesnitt",preview:"Forhåndsvisning i sanntid",config:"Lim inn følgende tekst i din config.js-fil",predefined:"Forhåndsdefinerte fargesett"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nl.js deleted file mode 100644 index 8a62e469..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","nl",{title:"UI Kleurenkiezer",preview:"Live voorbeeld",config:"Plak deze tekst in jouw config.js bestand",predefined:"Voorgedefinieerde kleurensets"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/no.js deleted file mode 100644 index b51a6994..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","no",{title:"Fargevelger for brukergrensesnitt",preview:"Forhåndsvisning i sanntid",config:"Lim inn følgende tekst i din config.js-fil",predefined:"Forhåndsdefinerte fargesett"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pl.js deleted file mode 100644 index 38b0c2aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pl",{title:"Wybór koloru interfejsu",preview:"Podgląd na żywo",config:"Wklej poniższy łańcuch znaków do pliku config.js:",predefined:"Predefiniowane zestawy kolorów"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js deleted file mode 100644 index be6aa759..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pt-br",{title:"Paleta de Cores",preview:"Visualização ao vivo",config:"Cole o texto no seu arquivo config.js",predefined:"Conjuntos de cores predefinidos"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt.js deleted file mode 100644 index f96f758b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","pt",{title:"Seleção da Cor da IU",preview:"Pré-visualização Live ",config:"Colar este item no seu ficheiro config.js",predefined:"Conjuntos de cor predefinidos"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ru.js deleted file mode 100644 index 133e6dd4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ru",{title:"Выбор цвета интерфейса",preview:"Предпросмотр в реальном времени",config:"Вставьте эту строку в файл config.js",predefined:"Предопределенные цветовые схемы"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/si.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/si.js deleted file mode 100644 index 2c9755a1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/si.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","si",{title:"වර්ණ ",preview:"සජීව නැවත නරභීම",config:"මෙම අක්ෂර පේලිය ගෙන config.js ලිපිගොනුව මතින් තබන්න",predefined:"කලින් වෙන්කරගත් පරිදි ඇති වර්ණ"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sk.js deleted file mode 100644 index 2456d281..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sk",{title:"UI výber farby",preview:"Živý náhľad",config:"Vložte tento reťazec do vášho config.js súboru",predefined:"Preddefinované sady farieb"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sl.js deleted file mode 100644 index 62dda984..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sl",{title:"UI Izbiralec Barve",preview:"Živi predogled",config:"Prilepite ta niz v vašo config.js datoteko",predefined:"Vnaprej določeni barvni kompleti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sq.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sq.js deleted file mode 100644 index 56ebe486..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sq.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sq",{title:"UI Mbledhës i Ngjyrave",preview:"Parapamje direkte",config:"Hidhni këtë varg në skedën tuaj config.js",predefined:"Setet e paradefinuara të ngjyrave"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sv.js deleted file mode 100644 index 9b3e7231..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","sv",{title:"UI Färgväljare",preview:"Live förhandsgranskning",config:"Klistra in den här strängen i din config.js-fil",predefined:"Fördefinierade färguppsättningar"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tr.js deleted file mode 100644 index ec553d0d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","tr",{title:"UI Renk Seçici",preview:"Canlı ön izleme",config:"Bu yazıyı config.js dosyasının içine yapıştırın",predefined:"Önceden tanımlı renk seti"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tt.js deleted file mode 100644 index 66990c45..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","tt",{title:"Интерфейс төсләрен сайлау",preview:"Тере карап алу",config:"Бу юлны config.js файлына языгыз",predefined:"Баштан билгеләнгән төсләр җыелмасы"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ug.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ug.js deleted file mode 100644 index 4cadfee2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/ug.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","ug",{title:"ئىشلەتكۈچى ئارايۈزى رەڭ تاللىغۇچ",preview:"شۇئان ئالدىن كۆزىتىش",config:"بۇ ھەرپ تىزىقىنى config.js ھۆججەتكە چاپلايدۇ",predefined:"ئالدىن بەلگىلەنگەن رەڭلەر"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/uk.js deleted file mode 100644 index acd28a19..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","uk",{title:"Color Picker Інтерфейс",preview:"Перегляд наживо",config:"Вставте цей рядок у файл config.js",predefined:"Стандартний набір кольорів"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/vi.js deleted file mode 100644 index bd02f062..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","vi",{title:"Giao diện người dùng Color Picker",preview:"Xem trước trực tiếp",config:"Dán chuỗi này vào tập tin config.js của bạn",predefined:"Tập màu định nghĩa sẵn"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js deleted file mode 100644 index 552dc689..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","zh-cn",{title:"用户界面颜色选择器",preview:"即时预览",config:"粘贴此字符串到您的 config.js 文件",predefined:"预定义颜色集"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh.js deleted file mode 100644 index cff7a9a9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("uicolor","zh",{title:"UI 色彩選擇器",preview:"即時預覽",config:"請將此段字串複製到您的 config.js 檔案中。",predefined:"設定預先定義的色彩"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/plugin.js deleted file mode 100644 index fc402d0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/plugin.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.add("uicolor",{requires:"dialog",lang:"ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,mk,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn",icons:"uicolor",hidpi:!0,init:function(a){CKEDITOR.env.ie6Compat||(a.addCommand("uicolor",new CKEDITOR.dialogCommand("uicolor")),a.ui.addButton&&a.ui.addButton("UIColor",{label:a.lang.uicolor.title,command:"uicolor",toolbar:"tools,1"}),CKEDITOR.dialog.add("uicolor",this.path+"dialogs/uicolor.js"), -CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("plugins/uicolor/yui/yui.js")),CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl("plugins/uicolor/yui/assets/yui.css")))}}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_bg.png deleted file mode 100644 index d9bcdeb5c49910d5c32c9ebbb134200bf138b7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmWkuZA?>V6h6*nD|EKy_G>T#efd;-TcIEZRG=3KG$^eF2Q{FAMV4*KY}f{qh`QSV zerz}DmTbC_Y|fEr#w0P0=t#CW_qsTZ+oCcxM!nmzgkYx0y)F9Qv+IxZJb6w|&dGC5 zaz;Z<^@~z7QUPF5prJObvq_J$hJ`xXo5wcl^n8zhtsmg}%|C)|K3%8x)wT6C_ipWb zw=>oa{%CJkw=1x%v!^@U-5DL&ajAP1z;mggH7#{nz-rJ$faL=7qA45La$rShQh@N! zu%sTCvXE1t{K=eCf%*<$g}~m_lTbYf%#DuhOcn)}oyL+UY!^T)N0SIlg&q}p70^Bg z#v`A*ftBD@6%H#L*N*0!pas#aR&fdVH33r!@M?%V4H}RB^=Q5i+Cy}fVbYD}B4EjH z?P{0x>Acg883%O<vmR{oU`T=1rJu3nQQIh{?ZLD|n6?b}C#URvz)qpni|<XN&2wJ& z^7$>a|AzJ?B#N%FVmw`fKNY;g=C3&BXB;Z@Kam~dpydSE;!)<o*L-Ly#&HE+cCFAo z+TF<c@SMxbNEK7^xk@y-f%$G}D(p$X1djzpc%<ZSEibCutVj&ocx;#jt?a2*xSJ(* zS(hAU>KoPs+}MGZ#35TL&dgu1t8ZJCOzunMR5)=3wB`6<04>Wd>f<uA7wWiCfdV(W zmgC&mvrX=E<uf&6<xjIMXi@7q4{m-PEuSK{4EHJ!Ou&UEV1J<_f16%>EGNt=fUO7S z2UdorB;0d<%}W2%DB8|}rj&7Bd@G600GiIAl}DfA(T~fGjEtPSpMM-+!R<h;zoq}r z<JVhPIsmHgnHPnBX{Z?w)h@jz9oScT{Hrf4o~5O6<xrkIV?##Ek3+NVSs$LvdUz-K zVqsBnU~^YH-9S#p2Xmt1(pB-YCH8^zSUli}O-sG;%g)JW+E1+FDa)jvI)wsbavgml zl%;;+l~<A*hJi-fD{Qwu+AWO=8||_8CB2VJ4wK>dW!t0gq&tGw>1(Ck!bL+QCwfHM zFSfg6C%J1(_sXrL%2?h=Gs#tB`jY5~^n-B4=5yiEV7#4=o|0Az*Nu@}Ih_Oz$pHOG zC`&0{EO(L#V`PcEmKepS-spt1Gd{>irzEF%o|nyJB4uhF{YR*@P1evnVor$^%6<|| znF`WIVUCMc(=ZuIiR8<#kjLU}uWTnbQf7F06KORJtfO9XHgzgQe;2kI(+lL6NRM$K zObK})t}2X5(vY~u9{XN8DGugG$E0mSB^Mi(>V!Gl<R-dPm~+Hh=xRZ;O|GF#*k$oG z(!0X;G@n4X2wC<=BhuM8?}#0i8b#hV*+Cto*Dz2|UnMJy$uK=5OgnsQX&U)iT;-NK mNV9m%-8>YlD8E#--~|}G|8JkdYdiH90fD-v+HZu-d;bSJ8}W_+ diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png deleted file mode 100644 index 14d5db4862403a43231ac4766301552afa79e8ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6z30X`wF|Ns97GJ#~>`+k2Qi@7Ao zFBm9x{S+_IKn6ok7srr_TS*Cr7<jgbC%G^QD7vw!9N-X2N^uBd6=CLFC~>4CR#a^B hhMOMV_Dn1i4C!Z>gq7E&G66L+c)I$ztaD0e0ssu{I5q$P diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_mask.png deleted file mode 100644 index f8d91932b376af76ccfac030c12eb9fec7ee4c63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12174 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 QQ~&?~07*qoM6N<$f&<h~%m4rY diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png deleted file mode 100644 index 78445a2fe060047216b3692980ebabfb0683c3c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s3?%0jwTl2LmUKs7M+Sy#H?H_c7y<c`C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeh61AIbUf%JbcD6UwV4CFAE1o;L3 z|Icv!6fe*~20c#~$B>F!NeM|wNi2*CXBkqA8W@y2&T>3yVv%g*IK)!uk)}MmImzx& dTmu6$gLVMJ@>Lg{{{wY0c)I$ztaD0e0szdFI<Ei# diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css deleted file mode 100644 index 2e10cb69..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/assets/yui.css +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 2009, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.net/yui/license.txt -version: 2.7.0 -*/ -.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;} diff --git a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/yui.js b/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/yui.js deleted file mode 100644 index cb187ddc..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/uicolor/yui/yui.js +++ /dev/null @@ -1,225 +0,0 @@ -if("undefined"==typeof YAHOO||!YAHOO)var YAHOO={};YAHOO.namespace=function(){var c=arguments,e=null,b,d,a;for(b=0;b<c.length;b+=1){a=(""+c[b]).split(".");e=YAHOO;for(d="YAHOO"==a[0]?1:0;d<a.length;d+=1)e[a[d]]=e[a[d]]||{},e=e[a[d]]}return e};YAHOO.log=function(c,e,b){var d=YAHOO.widget.Logger;return d&&d.log?d.log(c,e,b):!1}; -YAHOO.register=function(c,e,b){var d=YAHOO.env.modules,a,f,g;d[c]||(d[c]={versions:[],builds:[]});d=d[c];a=b.version;b=b.build;f=YAHOO.env.listeners;d.name=c;d.version=a;d.build=b;d.versions.push(a);d.builds.push(b);d.mainClass=e;for(g=0;g<f.length;g+=1)f[g](d);e?(e.VERSION=a,e.BUILD=b):YAHOO.log("mainClass is undefined for module "+c,"warn")};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(c){return YAHOO.env.modules[c]||null}; -YAHOO.env.ua=function(){var c={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},e=navigator.userAgent,b;/KHTML/.test(e)&&(c.webkit=1);if((b=e.match(/AppleWebKit\/([^\s]*)/))&&b[1]){c.webkit=parseFloat(b[1]);if(/ Mobile\//.test(e))c.mobile="Apple";else if(b=e.match(/NokiaN[^\/]*/))c.mobile=b[0];if(b=e.match(/AdobeAIR\/([^\s]*)/))c.air=b[0]}if(!c.webkit)if((b=e.match(/Opera[\s\/]([^\s]*)/))&&b[1]){if(c.opera=parseFloat(b[1]),b=e.match(/Opera Mini[^;]*/))c.mobile=b[0]}else if((b=e.match(/MSIE\s([^;]*)/))&& -b[1])c.ie=parseFloat(b[1]);else if(b=e.match(/Gecko\/([^\s]*)/))if(c.gecko=1,(b=e.match(/rv:([^\s\)]*)/))&&b[1])c.gecko=parseFloat(b[1]);if((b=e.match(/Caja\/([^\s]*)/))&&b[1])c.caja=parseFloat(b[1]);return c}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var c=YAHOO_config.listener,e=YAHOO.env.listeners,b=!0,d;if(c){for(d=0;d<e.length;d+=1)if(e[d]==c){b=!1;break}b&&e.push(c)}}})();YAHOO.lang=YAHOO.lang||{}; -(function(){var c=YAHOO.lang,e=Object.prototype,b=["toString","valueOf"],d={isArray:function(a){return"[object Array]"===e.toString.apply(a)},isBoolean:function(a){return"boolean"===typeof a},isFunction:function(a){return"[object Function]"===e.toString.apply(a)},isNull:function(a){return null===a},isNumber:function(a){return"number"===typeof a&&isFinite(a)},isObject:function(a){return a&&("object"===typeof a||c.isFunction(a))||!1},isString:function(a){return"string"===typeof a},isUndefined:function(a){return"undefined"=== -typeof a},_IEEnumFix:YAHOO.env.ua.ie?function(a,d){var g,h,i;for(g=0;g<b.length;g+=1)h=b[g],i=d[h],c.isFunction(i)&&i!=e[h]&&(a[h]=i)}:function(){},extend:function(a,b,d){if(!b||!a)throw Error("extend failed, please check that all dependencies are included.");var h=function(){},i;h.prototype=b.prototype;a.prototype=new h;a.prototype.constructor=a;a.superclass=b.prototype;b.prototype.constructor==e.constructor&&(b.prototype.constructor=b);if(d){for(i in d)c.hasOwnProperty(d,i)&&(a.prototype[i]=d[i]); -c._IEEnumFix(a.prototype,d)}},augmentObject:function(a,b){if(!b||!a)throw Error("Absorb failed, verify dependencies.");var d=arguments,e,i=d[2];if(i&&!0!==i)for(e=2;e<d.length;e+=1)a[d[e]]=b[d[e]];else{for(e in b)if(i||!(e in a))a[e]=b[e];c._IEEnumFix(a,b)}},augmentProto:function(a,b){if(!b||!a)throw Error("Augment failed, verify dependencies.");var d=[a.prototype,b.prototype],e;for(e=2;e<arguments.length;e+=1)d.push(arguments[e]);c.augmentObject.apply(this,d)},dump:function(a,b){var d,e,i=[];if(c.isObject(a)){if(a instanceof -Date||"nodeType"in a&&"tagName"in a)return a;if(c.isFunction(a))return"f(){...}"}else return a+"";b=c.isNumber(b)?b:3;if(c.isArray(a)){i.push("[");d=0;for(e=a.length;d<e;d+=1)c.isObject(a[d])?i.push(0<b?c.dump(a[d],b-1):"{...}"):i.push(a[d]),i.push(", ");1<i.length&&i.pop();i.push("]")}else{i.push("{");for(d in a)c.hasOwnProperty(a,d)&&(i.push(d+" => "),c.isObject(a[d])?i.push(0<b?c.dump(a[d],b-1):"{...}"):i.push(a[d]),i.push(", "));1<i.length&&i.pop();i.push("}")}return i.join("")},substitute:function(a, -b,d){for(var h,i,j,k,l,m=[],n;;){h=a.lastIndexOf("{");if(0>h)break;i=a.indexOf("}",h);if(h+1>=i)break;k=n=a.substring(h+1,i);l=null;j=k.indexOf(" ");-1<j&&(l=k.substring(j+1),k=k.substring(0,j));j=b[k];d&&(j=d(k,j,l));c.isObject(j)?c.isArray(j)?j=c.dump(j,parseInt(l,10)):(l=l||"",k=l.indexOf("dump"),-1<k&&(l=l.substring(4)),j=j.toString===e.toString||-1<k?c.dump(j,parseInt(l,10)):j.toString()):!c.isString(j)&&!c.isNumber(j)&&(j="~-"+m.length+"-~",m[m.length]=n);a=a.substring(0,h)+j+a.substring(i+ -1)}for(h=m.length-1;0<=h;h-=1)a=a.replace(RegExp("~-"+h+"-~"),"{"+m[h]+"}","g");return a},trim:function(a){try{return a.replace(/^\s+|\s+$/g,"")}catch(b){return a}},merge:function(){var a={},b=arguments,d=b.length,e;for(e=0;e<d;e+=1)c.augmentObject(a,b[e],!0);return a},later:function(a,b,d,e,i){var a=a||0,b=b||{},j=d,k=e,l;c.isString(d)&&(j=b[d]);if(!j)throw new TypeError("method undefined");c.isArray(k)||(k=[e]);d=function(){j.apply(b,k)};l=i?setInterval(d,a):setTimeout(d,a);return{interval:i,cancel:function(){this.interval? -clearInterval(l):clearTimeout(l)}}},isValue:function(a){return c.isObject(a)||c.isString(a)||c.isNumber(a)||c.isBoolean(a)}};c.hasOwnProperty=e.hasOwnProperty?function(a,b){return a&&a.hasOwnProperty(b)}:function(a,b){return!c.isUndefined(a[b])&&a.constructor.prototype[b]!==a[b]};d.augmentObject(c,d,!0);YAHOO.util.Lang=c;c.augment=c.augmentProto;YAHOO.augment=c.augmentProto;YAHOO.extend=c.extend})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"}); -(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var c=YAHOO.util,e=YAHOO.lang,b=YAHOO.env.ua,d=YAHOO.lang.trim,a={},f={},g=/^t(?:able|d|h)$/i,h=/color$/i,i=window.document,j=i.documentElement,k=b.opera,l=b.webkit,m=b.gecko,n=b.ie;c.Dom={CUSTOM_ATTRIBUTES:!j.hasAttribute?{"for":"htmlFor","class":"className"}:{htmlFor:"for",className:"class"},get:function(a){var b,d,f,e;if(a){if(a.nodeType||a.item)return a;if("string"===typeof a){b=a;a=i.getElementById(a);if(!(a&&a.id===b)&&a&&i.all){a=null; -d=i.all[b];f=0;for(e=d.length;f<e;++f)if(d[f].id===b)return d[f]}return a}a.DOM_EVENTS&&(a=a.get("element"));if("length"in a){b=[];f=0;for(e=a.length;f<e;++f)b[b.length]=c.Dom.get(a[f]);return b}return a}return null},getComputedStyle:function(a,b){if(window.getComputedStyle)return a.ownerDocument.defaultView.getComputedStyle(a,null)[b];if(a.currentStyle)return c.Dom.IE_ComputedStyle.get(a,b)},getStyle:function(a,b){return c.Dom.batch(a,c.Dom._getStyle,b)},_getStyle:function(){if(window.getComputedStyle)return function(a, -b){var b="float"===b?b="cssFloat":c.Dom._toCamel(b),d=a.style[b],f;d||(f=a.ownerDocument.defaultView.getComputedStyle(a,null))&&(d=f[b]);return d};if(j.currentStyle)return function(a,b){var d;switch(b){case "opacity":d=100;try{d=a.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(f){try{d=a.filters("alpha").opacity}catch(e){}}return d/100;case "float":b="styleFloat";default:return b=c.Dom._toCamel(b),d=a.currentStyle?a.currentStyle[b]:null,a.style[b]||d}}}(),setStyle:function(a,b,d){c.Dom.batch(a, -c.Dom._setStyle,{prop:b,val:d})},_setStyle:function(){return n?function(a,b){var d=c.Dom._toCamel(b.prop),f=b.val;if(a)switch(d){case "opacity":if(e.isString(a.style.filter)&&(a.style.filter="alpha(opacity="+100*f+")",!a.currentStyle||!a.currentStyle.hasLayout))a.style.zoom=1;break;case "float":d="styleFloat";default:a.style[d]=f}}:function(a,b){var d=c.Dom._toCamel(b.prop),f=b.val;a&&("float"==d&&(d="cssFloat"),a.style[d]=f)}}(),getXY:function(a){return c.Dom.batch(a,c.Dom._getXY)},_canPosition:function(a){return"none"!== -c.Dom._getStyle(a,"display")&&c.Dom._inDoc(a)},_getXY:function(){return i.documentElement.getBoundingClientRect?function(a){var d,f,e,g,j,h,m,k=Math.floor;f=!1;if(c.Dom._canPosition(a)){f=a.getBoundingClientRect();e=a.ownerDocument;a=c.Dom.getDocumentScrollLeft(e);d=c.Dom.getDocumentScrollTop(e);f=[k(f.left),k(f.top)];n&&8>b.ie&&(j=g=2,h=e.compatMode,m=o(e.documentElement,"borderLeftWidth"),e=o(e.documentElement,"borderTopWidth"),6===b.ie&&"BackCompat"!==h&&(j=g=0),"BackCompat"==h&&("medium"!==m&& -(g=parseInt(m,10)),"medium"!==e&&(j=parseInt(e,10))),f[0]-=g,f[1]-=j);if(d||a)f[0]+=a,f[1]+=d;f[0]=k(f[0]);f[1]=k(f[1])}return f}:function(a){var d,f,e,g=!1,j=a;if(c.Dom._canPosition(a)){g=[a.offsetLeft,a.offsetTop];d=c.Dom.getDocumentScrollLeft(a.ownerDocument);f=c.Dom.getDocumentScrollTop(a.ownerDocument);for(e=m||519<b.webkit?!0:!1;j=j.offsetParent;)g[0]+=j.offsetLeft,g[1]+=j.offsetTop,e&&(g=c.Dom._calcBorders(j,g));if("fixed"!==c.Dom._getStyle(a,"position")){for(j=a;(j=j.parentNode)&&j.tagName;)if(a= -j.scrollTop,e=j.scrollLeft,m&&"visible"!==c.Dom._getStyle(j,"overflow")&&(g=c.Dom._calcBorders(j,g)),a||e)g[0]-=e,g[1]-=a;g[0]+=d;g[1]+=f}else if(k)g[0]-=d,g[1]-=f;else if(l||m)g[0]+=d,g[1]+=f;g[0]=Math.floor(g[0]);g[1]=Math.floor(g[1])}return g}}(),getX:function(a){return c.Dom.batch(a,function(a){return c.Dom.getXY(a)[0]},c.Dom,!0)},getY:function(a){return c.Dom.batch(a,function(a){return c.Dom.getXY(a)[1]},c.Dom,!0)},setXY:function(a,b,d){c.Dom.batch(a,c.Dom._setXY,{pos:b,noRetry:d})},_setXY:function(a, -b){var d=c.Dom._getStyle(a,"position"),f=c.Dom.setStyle,e=b.pos,g=b.noRetry,j=[parseInt(c.Dom.getComputedStyle(a,"left"),10),parseInt(c.Dom.getComputedStyle(a,"top"),10)],h;"static"==d&&(d="relative",f(a,"position",d));h=c.Dom._getXY(a);if(!e||!1===h)return!1;isNaN(j[0])&&(j[0]="relative"==d?0:a.offsetLeft);isNaN(j[1])&&(j[1]="relative"==d?0:a.offsetTop);null!==e[0]&&f(a,"left",e[0]-h[0]+j[0]+"px");null!==e[1]&&f(a,"top",e[1]-h[1]+j[1]+"px");g||(d=c.Dom._getXY(a),(null!==e[0]&&d[0]!=e[0]||null!== -e[1]&&d[1]!=e[1])&&c.Dom._setXY(a,{pos:e,noRetry:!0}))},setX:function(a,b){c.Dom.setXY(a,[b,null])},setY:function(a,b){c.Dom.setXY(a,[null,b])},getRegion:function(a){return c.Dom.batch(a,function(a){var b=!1;c.Dom._canPosition(a)&&(b=c.Region.getRegion(a));return b},c.Dom,!0)},getClientWidth:function(){return c.Dom.getViewportWidth()},getClientHeight:function(){return c.Dom.getViewportHeight()},getElementsByClassName:function(a,b,d,f,g,j){a=e.trim(a);b=b||"*";d=d?c.Dom.get(d):i;if(!d)return[];for(var h= -[],b=d.getElementsByTagName(b),d=c.Dom.hasClass,m=0,k=b.length;m<k;++m)d(b[m],a)&&(h[h.length]=b[m]);f&&c.Dom.batch(h,f,g,j);return h},hasClass:function(a,b){return c.Dom.batch(a,c.Dom._hasClass,b)},_hasClass:function(a,b){var d=!1;a&&b&&(d=c.Dom.getAttribute(a,"className")||"",d=b.exec?b.test(d):b&&-1<(" "+d+" ").indexOf(" "+b+" "));return d},addClass:function(a,b){return c.Dom.batch(a,c.Dom._addClass,b)},_addClass:function(a,b){var f=!1,e;a&&b&&(e=c.Dom.getAttribute(a,"className")||"",c.Dom._hasClass(a, -b)||(c.Dom.setAttribute(a,"className",d(e+" "+b)),f=!0));return f},removeClass:function(a,b){return c.Dom.batch(a,c.Dom._removeClass,b)},_removeClass:function(a,b){var f=!1,e,g;a&&b&&(e=c.Dom.getAttribute(a,"className")||"",c.Dom.setAttribute(a,"className",e.replace(c.Dom._getClassRegex(b),"")),g=c.Dom.getAttribute(a,"className"),e!==g&&(c.Dom.setAttribute(a,"className",d(g)),f=!0,""===c.Dom.getAttribute(a,"className")&&(e=a.hasAttribute&&a.hasAttribute("class")?"class":"className",a.removeAttribute(e)))); -return f},replaceClass:function(a,b,d){return c.Dom.batch(a,c.Dom._replaceClass,{from:b,to:d})},_replaceClass:function(a,b){var f,e,g=!1;a&&b&&(f=b.from,(e=b.to)?f?f!==e&&(g=c.Dom.getAttribute(a,"className")||"",f=(" "+g.replace(c.Dom._getClassRegex(f)," "+e)).split(c.Dom._getClassRegex(e)),f.splice(1,0," "+e),c.Dom.setAttribute(a,"className",d(f.join(""))),g=!0):g=c.Dom._addClass(a,b.to):g=!1);return g},generateId:function(a,b){var b=b||"yui-gen",d=function(a){if(a&&a.id)return a.id;var d=b+YAHOO.env._id_counter++; -if(a){if(a.ownerDocument.getElementById(d))return c.Dom.generateId(a,d+b);a.id=d}return d};return c.Dom.batch(a,d,c.Dom,!0)||d.apply(c.Dom,arguments)},isAncestor:function(a,b){var a=c.Dom.get(a),b=c.Dom.get(b),d=!1;a&&b&&(a.nodeType&&b.nodeType)&&(a.contains&&a!==b?d=a.contains(b):a.compareDocumentPosition&&(d=!!(a.compareDocumentPosition(b)&16)));return d},inDocument:function(a,b){return c.Dom._inDoc(c.Dom.get(a),b)},_inDoc:function(a,b){var d=!1;a&&a.tagName&&(b=b||a.ownerDocument,d=c.Dom.isAncestor(b.documentElement, -a));return d},getElementsBy:function(a,b,d,f,e,g,j){b=b||"*";d=d?c.Dom.get(d):i;if(!d)return[];for(var h=[],b=d.getElementsByTagName(b),d=0,m=b.length;d<m;++d)if(a(b[d]))if(j){h=b[d];break}else h[h.length]=b[d];f&&c.Dom.batch(h,f,e,g);return h},getElementBy:function(a,b,d){return c.Dom.getElementsBy(a,b,d,null,null,null,!0)},batch:function(a,b,d,f){var e=[],f=f?d:window;if((a=a&&(a.tagName||a.item)?a:c.Dom.get(a))&&b){if(a.tagName||void 0===a.length)return b.call(f,a,d);for(var g=0;g<a.length;++g)e[e.length]= -b.call(f,a[g],d)}else return!1;return e},getDocumentHeight:function(){return Math.max("CSS1Compat"!=i.compatMode||l?i.body.scrollHeight:j.scrollHeight,c.Dom.getViewportHeight())},getDocumentWidth:function(){return Math.max("CSS1Compat"!=i.compatMode||l?i.body.scrollWidth:j.scrollWidth,c.Dom.getViewportWidth())},getViewportHeight:function(){var a=self.innerHeight,b=i.compatMode;if((b||n)&&!k)a="CSS1Compat"==b?j.clientHeight:i.body.clientHeight;return a},getViewportWidth:function(){var a=self.innerWidth, -b=i.compatMode;if(b||n)a="CSS1Compat"==b?j.clientWidth:i.body.clientWidth;return a},getAncestorBy:function(a,b){for(;a=a.parentNode;)if(c.Dom._testElement(a,b))return a;return null},getAncestorByClassName:function(a,b){a=c.Dom.get(a);return!a?null:c.Dom.getAncestorBy(a,function(a){return c.Dom.hasClass(a,b)})},getAncestorByTagName:function(a,b){a=c.Dom.get(a);return!a?null:c.Dom.getAncestorBy(a,function(a){return a.tagName&&a.tagName.toUpperCase()==b.toUpperCase()})},getPreviousSiblingBy:function(a, -b){for(;a;)if(a=a.previousSibling,c.Dom._testElement(a,b))return a;return null},getPreviousSibling:function(a){a=c.Dom.get(a);return!a?null:c.Dom.getPreviousSiblingBy(a)},getNextSiblingBy:function(a,b){for(;a;)if(a=a.nextSibling,c.Dom._testElement(a,b))return a;return null},getNextSibling:function(a){a=c.Dom.get(a);return!a?null:c.Dom.getNextSiblingBy(a)},getFirstChildBy:function(a,b){return(c.Dom._testElement(a.firstChild,b)?a.firstChild:null)||c.Dom.getNextSiblingBy(a.firstChild,b)},getFirstChild:function(a){a= -c.Dom.get(a);return!a?null:c.Dom.getFirstChildBy(a)},getLastChildBy:function(a,b){return!a?null:(c.Dom._testElement(a.lastChild,b)?a.lastChild:null)||c.Dom.getPreviousSiblingBy(a.lastChild,b)},getLastChild:function(a){a=c.Dom.get(a);return c.Dom.getLastChildBy(a)},getChildrenBy:function(a,b){var d=c.Dom.getFirstChildBy(a,b),f=d?[d]:[];c.Dom.getNextSiblingBy(d,function(a){if(!b||b(a))f[f.length]=a;return!1});return f},getChildren:function(a){a=c.Dom.get(a);return c.Dom.getChildrenBy(a)},getDocumentScrollLeft:function(a){a= -a||i;return Math.max(a.documentElement.scrollLeft,a.body.scrollLeft)},getDocumentScrollTop:function(a){a=a||i;return Math.max(a.documentElement.scrollTop,a.body.scrollTop)},insertBefore:function(a,b){a=c.Dom.get(a);b=c.Dom.get(b);return!a||!b||!b.parentNode?null:b.parentNode.insertBefore(a,b)},insertAfter:function(a,b){a=c.Dom.get(a);b=c.Dom.get(b);return!a||!b||!b.parentNode?null:b.nextSibling?b.parentNode.insertBefore(a,b.nextSibling):b.parentNode.appendChild(a)},getClientRegion:function(){var a= -c.Dom.getDocumentScrollTop(),b=c.Dom.getDocumentScrollLeft(),d=c.Dom.getViewportWidth()+b,f=c.Dom.getViewportHeight()+a;return new c.Region(a,d,f,b)},setAttribute:function(a,b,d){b=c.Dom.CUSTOM_ATTRIBUTES[b]||b;a.setAttribute(b,d)},getAttribute:function(a,b){b=c.Dom.CUSTOM_ATTRIBUTES[b]||b;return a.getAttribute(b)},_toCamel:function(b){function d(a,b){return b.toUpperCase()}return a[b]||(a[b]=-1===b.indexOf("-")?b:b.replace(/-([a-z])/gi,d))},_getClassRegex:function(a){var b;void 0!==a&&(a.exec?b= -a:(b=f[a],b||(a=a.replace(c.Dom._patterns.CLASS_RE_TOKENS,"\\$1"),b=f[a]=RegExp("(?:^|\\s)"+a+"(?= |$)","g"))));return b},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(a,b){return a&&1==a.nodeType&&(!b||b(a))},_calcBorders:function(a,b){var d=parseInt(c.Dom.getComputedStyle(a,"borderTopWidth"),10)||0,f=parseInt(c.Dom.getComputedStyle(a,"borderLeftWidth"),10)||0;m&&g.test(a.tagName)&&(f=d=0);b[0]+=f;b[1]+=d;return b}};var o=c.Dom.getComputedStyle; -b.opera&&(c.Dom.getComputedStyle=function(a,b){var d=o(a,b);h.test(b)&&(d=c.Dom.Color.toRGB(d));return d});b.webkit&&(c.Dom.getComputedStyle=function(a,b){var d=o(a,b);"rgba(0, 0, 0, 0)"===d&&(d="transparent");return d})})();YAHOO.util.Region=function(c,e,b,d){this.y=this.top=c;this[1]=c;this.right=e;this.bottom=b;this.x=this.left=d;this[0]=d;this.width=this.right-this.left;this.height=this.bottom-this.top}; -YAHOO.util.Region.prototype.contains=function(c){return c.left>=this.left&&c.right<=this.right&&c.top>=this.top&&c.bottom<=this.bottom};YAHOO.util.Region.prototype.getArea=function(){return(this.bottom-this.top)*(this.right-this.left)};YAHOO.util.Region.prototype.intersect=function(c){var e=Math.max(this.top,c.top),b=Math.min(this.right,c.right),d=Math.min(this.bottom,c.bottom),c=Math.max(this.left,c.left);return d>=e&&b>=c?new YAHOO.util.Region(e,b,d,c):null}; -YAHOO.util.Region.prototype.union=function(c){var e=Math.min(this.top,c.top),b=Math.max(this.right,c.right),d=Math.max(this.bottom,c.bottom),c=Math.min(this.left,c.left);return new YAHOO.util.Region(e,b,d,c)};YAHOO.util.Region.prototype.toString=function(){return"Region {top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}"}; -YAHOO.util.Region.getRegion=function(c){var e=YAHOO.util.Dom.getXY(c);return new YAHOO.util.Region(e[1],e[0]+c.offsetWidth,e[1]+c.offsetHeight,e[0])};YAHOO.util.Point=function(c,e){YAHOO.lang.isArray(c)&&(e=c[1],c=c[0]);YAHOO.util.Point.superclass.constructor.call(this,e,c,e,c)};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region); -(function(){var c=YAHOO.util,e=/^width|height$/,b=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,d={get:function(a,d){var e="",e=a.currentStyle[d];return e="opacity"===d?c.Dom.getStyle(a,"opacity"):!e||e.indexOf&&-1<e.indexOf("px")?e:c.Dom.IE_COMPUTED[d]?c.Dom.IE_COMPUTED[d](a,d):b.test(e)?c.Dom.IE.ComputedStyle.getPixel(a,d):e},getOffset:function(a,b){var d=a.currentStyle[b],c=b.charAt(0).toUpperCase()+b.substr(1),j="offset"+c,k="pixel"+c,c="";"auto"==d?(c= -d=a[j],e.test(b)&&(a.style[b]=d,a[j]>d&&(c=d-(a[j]-d)),a.style[b]="auto")):(!a.style[k]&&!a.style[b]&&(a.style[b]=d),c=a.style[k]);return c+"px"},getBorderWidth:function(a,b){var d=null;a.currentStyle.hasLayout||(a.style.zoom=1);switch(b){case "borderTopWidth":d=a.clientTop;break;case "borderBottomWidth":d=a.offsetHeight-a.clientHeight-a.clientTop;break;case "borderLeftWidth":d=a.clientLeft;break;case "borderRightWidth":d=a.offsetWidth-a.clientWidth-a.clientLeft}return d+"px"},getPixel:function(a, -b){var d=null,c=a.currentStyle.right;a.style.right=a.currentStyle[b];d=a.style.pixelRight;a.style.right=c;return d+"px"},getMargin:function(a,b){return"auto"==a.currentStyle[b]?"0px":c.Dom.IE.ComputedStyle.getPixel(a,b)},getVisibility:function(a,b){for(var d;(d=a.currentStyle)&&"inherit"==d[b];)a=a.parentNode;return d?d[b]:"visible"},getColor:function(a,b){return c.Dom.Color.toRGB(a.currentStyle[b])||"transparent"},getBorderColor:function(a,b){var d=a.currentStyle;return c.Dom.Color.toRGB(c.Dom.Color.toHex(d[b]|| -d.color))}},a={};a.top=a.right=a.bottom=a.left=a.width=a.height=d.getOffset;a.color=d.getColor;a.borderTopWidth=a.borderRightWidth=a.borderBottomWidth=a.borderLeftWidth=d.getBorderWidth;a.marginTop=a.marginRight=a.marginBottom=a.marginLeft=d.getMargin;a.visibility=d.getVisibility;a.borderColor=a.borderTopColor=a.borderRightColor=a.borderBottomColor=a.borderLeftColor=d.getBorderColor;c.Dom.IE_COMPUTED=a;c.Dom.IE_ComputedStyle=d})(); -(function(){var c=parseInt,e=RegExp,b=YAHOO.util;b.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(d){b.Dom.Color.re_RGB.test(d)||(d=b.Dom.Color.toHex(d));b.Dom.Color.re_hex.exec(d)&& -(d="rgb("+[c(e.$1,16),c(e.$2,16),c(e.$3,16)].join(", ")+")");return d},toHex:function(d){d=b.Dom.Color.KEYWORDS[d]||d;if(b.Dom.Color.re_RGB.exec(d))var d=1===e.$2.length?"0"+e.$2:Number(e.$2),a=1===e.$3.length?"0"+e.$3:Number(e.$3),d=[(1===e.$1.length?"0"+e.$1:Number(e.$1)).toString(16),d.toString(16),a.toString(16)].join("");6>d.length&&(d=d.replace(b.Dom.Color.re_hex3,"$1$1"));"transparent"!==d&&0>d.indexOf("#")&&(d="#"+d);return d.toLowerCase()}}})(); -YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(c,e,b,d){this.type=c;this.scope=e||window;this.silent=b;this.signature=d||YAHOO.util.CustomEvent.LIST;this.subscribers=[];"_YUICEOnSubscribe"!==c&&(this.subscribeEvent=new YAHOO.util.CustomEvent("_YUICEOnSubscribe",this,!0));this.lastError=null};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1; -YAHOO.util.CustomEvent.prototype={subscribe:function(c,e,b){if(!c)throw Error("Invalid callback for subscriber to '"+this.type+"'");this.subscribeEvent&&this.subscribeEvent.fire(c,e,b);this.subscribers.push(new YAHOO.util.Subscriber(c,e,b))},unsubscribe:function(c,e){if(!c)return this.unsubscribeAll();for(var b=!1,d=0,a=this.subscribers.length;d<a;++d){var f=this.subscribers[d];f&&f.contains(c,e)&&(this._delete(d),b=!0)}return b},fire:function(){this.lastError=null;var c=this.subscribers.length;if(!c&& -this.silent)return!0;var e=[].slice.call(arguments,0),b=!0,d,a=this.subscribers.slice(),f=YAHOO.util.Event.throwErrors;for(d=0;d<c;++d){var g=a[d];if(g){var h=g.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var i=null;0<e.length&&(i=e[0]);try{b=g.fn.call(h,i,g.obj)}catch(j){if(this.lastError=j,f)throw j;}}else try{b=g.fn.call(h,this.type,e,g.obj)}catch(k){if(this.lastError=k,f)throw k;}if(!1===b)break}}return!1!==b},unsubscribeAll:function(){var c=this.subscribers.length,e; -for(e=c-1;-1<e;e--)this._delete(e);this.subscribers=[];return c},_delete:function(c){var e=this.subscribers[c];e&&(delete e.fn,delete e.obj);this.subscribers.splice(c,1)},toString:function(){return"CustomEvent: '"+this.type+"', context: "+this.scope}};YAHOO.util.Subscriber=function(c,e,b){this.fn=c;this.obj=YAHOO.lang.isUndefined(e)?null:e;this.overrideContext=b}; -YAHOO.util.Subscriber.prototype.getScope=function(c){return this.overrideContext?!0===this.overrideContext?this.obj:this.overrideContext:c};YAHOO.util.Subscriber.prototype.contains=function(c,e){return e?this.fn==c&&this.obj==e:this.fn==c};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }"}; -YAHOO.util.Event||(YAHOO.util.Event=function(){var c=!1,e=[],b=[],d=[],a=[],f=0,g=[],h=[],i=0,j={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},k=YAHOO.env.ua.ie?"focusin":"focus",l=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2E3,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:!1,throwErrors:!1,startInterval:function(){if(!this._interval){var a= -this;this._interval=setInterval(function(){a._tryPreloadAttach()},this.POLL_INTERVAL)}},onAvailable:function(a,b,d,c,e){for(var a=YAHOO.lang.isString(a)?[a]:a,j=0;j<a.length;j+=1)g.push({id:a[j],fn:b,obj:d,overrideContext:c,checkReady:e});f=this.POLL_RETRYS;this.startInterval()},onContentReady:function(a,b,d,c){this.onAvailable(a,b,d,c,!0)},onDOMReady:function(a,b,d){this.DOMReady?setTimeout(function(){var c=window;d&&(c=!0===d?b:d);a.call(c,"DOMReady",[],b)},0):this.DOMReadyEvent.subscribe(a,b,d)}, -_addListener:function(c,f,g,j,k,i){if(!g||!g.call)return!1;if(this._isValidCollection(c)){for(var i=!0,l=0,s=c.length;l<s;++l)i=this.on(c[l],f,g,j,k)&&i;return i}if(YAHOO.lang.isString(c))if(l=this.getEl(c))c=l;else return this.onAvailable(c,function(){YAHOO.util.Event.on(c,f,g,j,k)}),!0;if(!c)return!1;if("unload"==f&&j!==this)return b[b.length]=[c,f,g,j,k],!0;var t=c;k&&(t=!0===k?j:k);l=function(a){return g.call(t,YAHOO.util.Event.getEvent(a,c),j)};s=[c,f,g,l,t,j,k];e[e.length]=s;if(this.useLegacyEvent(c, -f)){var p=this.getLegacyIndex(c,f);if(-1==p||c!=d[p][0])p=d.length,h[c.id+f]=p,d[p]=[c,f,c["on"+f]],a[p]=[],c["on"+f]=function(a){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(a),p)};a[p].push(s)}else try{this._simpleAdd(c,f,l,i)}catch(u){return this.lastError=u,this.removeListener(c,f,g),!1}return!0},addListener:function(a,b,d,c,f){return this._addListener(a,b,d,c,f,!1)},addFocusListener:function(a,b,d,c){return this._addListener(a,k,b,d,c,!0)},removeFocusListener:function(a,b){return this.removeListener(a, -k,b)},addBlurListener:function(a,b,d,c){return this._addListener(a,l,b,d,c,!0)},removeBlurListener:function(a,b){return this.removeListener(a,l,b)},fireLegacyEvent:function(b,c){var f=!0,e,g,j;e=a[c].slice();for(var h=0,k=e.length;h<k;++h)if((g=e[h])&&g[this.WFN])j=g[this.ADJ_SCOPE],g=g[this.WFN].call(j,b),f=f&&g;if((e=d[c])&&e[2])e[2](b);return f},getLegacyIndex:function(a,b){var d=this.generateId(a)+b;return"undefined"==typeof h[d]?-1:h[d]},useLegacyEvent:function(a,b){return this.webkit&&419>this.webkit&& -("click"==b||"dblclick"==b)},removeListener:function(d,c,f,g){var j,h,k;if("string"==typeof d)d=this.getEl(d);else if(this._isValidCollection(d)){g=!0;for(j=d.length-1;-1<j;j--)g=this.removeListener(d[j],c,f)&&g;return g}if(!f||!f.call)return this.purgeElement(d,!1,c);if("unload"==c){for(j=b.length-1;-1<j;j--)if((k=b[j])&&k[0]==d&&k[1]==c&&k[2]==f)return b.splice(j,1),!0;return!1}j=null;"undefined"===typeof g&&(g=this._getCacheIndex(d,c,f));0<=g&&(j=e[g]);if(!d||!j)return!1;if(this.useLegacyEvent(d, -c)){j=this.getLegacyIndex(d,c);var i=a[j];if(i){j=0;for(h=i.length;j<h;++j)if((k=i[j])&&k[this.EL]==d&&k[this.TYPE]==c&&k[this.FN]==f){i.splice(j,1);break}}}else try{this._simpleRemove(d,c,j[this.WFN],!1)}catch(l){return this.lastError=l,!1}delete e[g][this.WFN];delete e[g][this.FN];e.splice(g,1);return!0},getTarget:function(a){return this.resolveTextNode(a.target||a.srcElement)},resolveTextNode:function(a){try{if(a&&3==a.nodeType)return a.parentNode}catch(b){}return a},getPageX:function(a){var b= -a.pageX;!b&&0!==b&&(b=a.clientX||0,this.isIE&&(b+=this._getScrollLeft()));return b},getPageY:function(a){var b=a.pageY;!b&&0!==b&&(b=a.clientY||0,this.isIE&&(b+=this._getScrollTop()));return b},getXY:function(a){return[this.getPageX(a),this.getPageY(a)]},getRelatedTarget:function(a){var b=a.relatedTarget;b||("mouseout"==a.type?b=a.toElement:"mouseover"==a.type&&(b=a.fromElement));return this.resolveTextNode(b)},getTime:function(a){if(!a.time){var b=(new Date).getTime();try{a.time=b}catch(d){return this.lastError= -d,b}}return a.time},stopEvent:function(a){this.stopPropagation(a);this.preventDefault(a)},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},getEvent:function(a){a=a||window.event;if(!a)for(var b=this.getEvent.caller;b&&!((a=b.arguments[0])&&Event==a.constructor);)b=b.caller;return a},getCharCode:function(a){a=a.keyCode||a.charCode||0;YAHOO.env.ua.webkit&&a in j&&(a=j[a]);return a},_getCacheIndex:function(a, -b,d){for(var c=0,f=e.length;c<f;c+=1){var g=e[c];if(g&&g[this.FN]==d&&g[this.EL]==a&&g[this.TYPE]==b)return c}return-1},generateId:function(a){var b=a.id;b||(b="yuievtautoid-"+i,++i,a.id=b);return b},_isValidCollection:function(a){try{return a&&"string"!==typeof a&&a.length&&!a.tagName&&!a.alert&&"undefined"!==typeof a[0]}catch(b){return!1}},elCache:{},getEl:function(a){return"string"===typeof a?document.getElementById(a):a},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady", -this),_load:function(){if(!c){c=!0;var a=YAHOO.util.Event;a._ready();a._tryPreloadAttach()}},_ready:function(){var a=YAHOO.util.Event;a.DOMReady||(a.DOMReady=!0,a.DOMReadyEvent.fire(),a._simpleRemove(document,"DOMContentLoaded",a._ready))},_tryPreloadAttach:function(){if(0===g.length)f=0,this._interval&&(clearInterval(this._interval),this._interval=null);else if(!this.locked)if(this.isIE&&!this.DOMReady)this.startInterval();else{this.locked=!0;var a=!c;a||(a=0<f&&0<g.length);var b=[],d=function(a, -b){var d=a;b.overrideContext&&(d=!0===b.overrideContext?b.obj:b.overrideContext);b.fn.call(d,b.obj)},e,j,h,k,i=[];e=0;for(j=g.length;e<j;e+=1)if(h=g[e])if(k=this.getEl(h.id))if(h.checkReady){if(c||k.nextSibling||!a)i.push(h),g[e]=null}else d(k,h),g[e]=null;else b.push(h);e=0;for(j=i.length;e<j;e+=1)h=i[e],d(this.getEl(h.id),h);f--;if(a){for(e=g.length-1;-1<e;e--)h=g[e],(!h||!h.id)&&g.splice(e,1);this.startInterval()}else this._interval&&(clearInterval(this._interval),this._interval=null);this.locked= -!1}},purgeElement:function(a,b,d){var a=YAHOO.lang.isString(a)?this.getEl(a):a,c=this.getListeners(a,d),f;if(c)for(f=c.length-1;-1<f;f--){var e=c[f];this.removeListener(a,e.type,e.fn)}if(b&&a&&a.childNodes){f=0;for(c=a.childNodes.length;f<c;++f)this.purgeElement(a.childNodes[f],b,d)}},getListeners:function(a,d){var c=[],f;f=d?"unload"===d?[b]:[e]:[e,b];for(var g=YAHOO.lang.isString(a)?this.getEl(a):a,j=0;j<f.length;j+=1){var h=f[j];if(h)for(var k=0,i=h.length;k<i;++k){var l=h[k];l&&(l[this.EL]=== -g&&(!d||d===l[this.TYPE]))&&c.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.OVERRIDE],scope:l[this.ADJ_SCOPE],index:k})}}return c.length?c:null},_unload:function(a){var c=YAHOO.util.Event,f,g,j,h=b.slice(),k;f=0;for(j=b.length;f<j;++f)if(g=h[f])k=window,g[c.ADJ_SCOPE]&&(k=!0===g[c.ADJ_SCOPE]?g[c.UNLOAD_OBJ]:g[c.ADJ_SCOPE]),g[c.FN].call(k,c.getEvent(a,g[c.EL]),g[c.UNLOAD_OBJ]),h[f]=null;b=null;if(e)for(a=e.length-1;-1<a;a--)(g=e[a])&&c.removeListener(g[c.EL],g[c.TYPE],g[c.FN], -a);d=null;c._simpleRemove(window,"unload",c._unload)},_getScrollLeft:function(){return this._getScroll()[1]},_getScrollTop:function(){return this._getScroll()[0]},_getScroll:function(){var a=document.documentElement,b=document.body;return a&&(a.scrollTop||a.scrollLeft)?[a.scrollTop,a.scrollLeft]:b?[b.scrollTop,b.scrollLeft]:[0,0]},regCE:function(){},_simpleAdd:function(){return window.addEventListener?function(a,b,d,c){a.addEventListener(b,d,c)}:window.attachEvent?function(a,b,d){a.attachEvent("on"+ -b,d)}:function(){}}(),_simpleRemove:function(){return window.removeEventListener?function(a,b,d,c){a.removeEventListener(b,d,c)}:window.detachEvent?function(a,b,d){a.detachEvent("on"+b,d)}:function(){}}()}}(),function(){var c=YAHOO.util.Event;c.on=c.addListener;c.onFocus=c.addFocusListener;c.onBlur=c.addBlurListener;if(c.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,!0);var e=document.createElement("p");c._dri=setInterval(function(){try{e.doScroll("left"),clearInterval(c._dri), -c._dri=null,c._ready(),e=null}catch(b){}},c.POLL_INTERVAL)}else c.webkit&&525>c.webkit?c._dri=setInterval(function(){var b=document.readyState;if("loaded"==b||"complete"==b)clearInterval(c._dri),c._dri=null,c._ready()},c.POLL_INTERVAL):c._simpleAdd(document,"DOMContentLoaded",c._ready);c._simpleAdd(window,"load",c._load);c._simpleAdd(window,"unload",c._unload);c._tryPreloadAttach()}());YAHOO.util.EventProvider=function(){}; -YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(c,e,b,d){this.__yui_events=this.__yui_events||{};var a=this.__yui_events[c];if(a)a.subscribe(e,b,d);else{a=this.__yui_subscribers=this.__yui_subscribers||{};a[c]||(a[c]=[]);a[c].push({fn:e,obj:b,overrideContext:d})}},unsubscribe:function(c,e,b){var d=this.__yui_events=this.__yui_events||{};if(c){if(d=d[c])return d.unsubscribe(e,b)}else{var c=true,a;for(a in d)YAHOO.lang.hasOwnProperty(d,a)&&(c=c&&d[a].unsubscribe(e, -b));return c}return false},unsubscribeAll:function(c){return this.unsubscribe(c)},createEvent:function(c,e){this.__yui_events=this.__yui_events||{};var b=e||{},d=this.__yui_events;if(!d[c]){var a=new YAHOO.util.CustomEvent(c,b.scope||this,b.silent,YAHOO.util.CustomEvent.FLAT);d[c]=a;b.onSubscribeCallback&&a.subscribeEvent.subscribe(b.onSubscribeCallback);this.__yui_subscribers=this.__yui_subscribers||{};if(b=this.__yui_subscribers[c])for(var f=0;f<b.length;++f)a.subscribe(b[f].fn,b[f].obj,b[f].overrideContext)}return d[c]}, -fireEvent:function(c,e,b,d){this.__yui_events=this.__yui_events||{};var a=this.__yui_events[c];if(!a)return null;for(var f=[],g=1;g<arguments.length;++g)f.push(arguments[g]);return a.fire.apply(a,f)},hasEvent:function(c){return this.__yui_events&&this.__yui_events[c]?true:false}}; -(function(){var c=YAHOO.util.Event,e=YAHOO.lang;YAHOO.util.KeyListener=function(b,a,f,g){function h(b){if(!a.shift)a.shift=false;if(!a.alt)a.alt=false;if(!a.ctrl)a.ctrl=false;if(b.shiftKey==a.shift&&b.altKey==a.alt&&b.ctrlKey==a.ctrl){var d,f=a.keys,e;if(YAHOO.lang.isArray(f))for(var g=0;g<f.length;g++){d=f[g];e=c.getCharCode(b);if(d==e){i.fire(e,b);break}}else{e=c.getCharCode(b);f==e&&i.fire(e,b)}}}if(!g)g=YAHOO.util.KeyListener.KEYDOWN;var i=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent= -new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");e.isString(b)&&(b=document.getElementById(b));e.isFunction(f)?i.subscribe(f):i.subscribe(f.fn,f.scope,f.correctScope);this.enable=function(){if(!this.enabled){c.on(b,g,h);this.enabledEvent.fire(a)}this.enabled=true};this.disable=function(){if(this.enabled){c.removeListener(b,g,h);this.disabledEvent.fire(a)}this.enabled=false};this.toString=function(){return"KeyListener ["+a.keys+"] "+b.tagName+(b.id?"["+ -b.id+"]":"")}};var b=YAHOO.util.KeyListener;b.KEYDOWN="keydown";b.KEYUP="keyup";b.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38}})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event",YAHOO,{version:"2.7.0",build:"1796"}); -YAHOO.util.DragDropMgr||(YAHOO.util.DragDropMgr=function(){var c=YAHOO.util.Event,e=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var b=document.createElement("div");b.id="yui-ddm-shim";document.body.firstChild?document.body.insertBefore(b,document.body.firstChild):document.body.appendChild(b);b.style.display="none";b.style.backgroundColor="red";b.style.position="absolute";b.style.zIndex="99999";e.setStyle(b,"opacity","0");this._shim= -b;c.on(b,"mouseup",this.handleMouseUp,this,true);c.on(b,"mousemove",this.handleMouseMove,this,true);c.on(window,"scroll",this._sizeShim,this,true)},_sizeShim:function(){if(this._shimActive){var b=this._shim;b.style.height=e.getDocumentHeight()+"px";b.style.width=e.getDocumentWidth()+"px";b.style.top="0";b.style.left="0"}},_activateShim:function(){if(this.useShim){this._shim||this._createShim();this._shimActive=true;var b=this._shim,d="0";this._debugShim&&(d=".5");e.setStyle(b,"opacity",d);this._sizeShim(); -b.style.display="block"}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(b,d){for(var a in this.ids)for(var c in this.ids[a]){var e=this.ids[a][c];this.isTypeOfDD(e)&&e[b].apply(e,d)}},_onLoad:function(){this.init(); -c.on(document,"mouseup",this.handleMouseUp,this,true);c.on(document,"mousemove",this.handleMouseMove,this,true);c.on(window,"unload",this._onUnload,this,true);c.on(window,"resize",this._onResize,this,true)},_onResize:function(){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1E3,dragThreshMet:false,clickTimeout:null,startX:0,startY:0, -fromTimeout:false,regDragDrop:function(b,d){this.initialized||this.init();this.ids[d]||(this.ids[d]={});this.ids[d][b.id]=b},removeDDFromGroup:function(b,d){this.ids[d]||(this.ids[d]={});var a=this.ids[d];a&&a[b.id]&&delete a[b.id]},_remove:function(b){for(var d in b.groups)if(d){var a=this.ids[d];a&&a[b.id]&&delete a[b.id]}delete this.handleIds[b.id]},regHandle:function(b,d){this.handleIds[b]||(this.handleIds[b]={});this.handleIds[b][d]=d},isDragDrop:function(b){return this.getDDById(b)?true:false}, -getRelated:function(b,d){var a=[],c;for(c in b.groups)for(var e in this.ids[c]){var h=this.ids[c][e];if(this.isTypeOfDD(h)&&(!d||h.isTarget))a[a.length]=h}return a},isLegalTarget:function(b,d){for(var a=this.getRelated(b,true),c=0,e=a.length;c<e;++c)if(a[c].id==d.id)return true;return false},isTypeOfDD:function(b){return b&&b.__ygDragDrop},isHandle:function(b,d){return this.handleIds[b]&&this.handleIds[b][d]},getDDById:function(b){for(var d in this.ids)if(this.ids[d][b])return this.ids[d][b];return null}, -handleMouseDown:function(b,d){this.currentTarget=YAHOO.util.Event.getTarget(b);this.dragCurrent=d;var a=d.getEl();this.startX=YAHOO.util.Event.getPageX(b);this.startY=YAHOO.util.Event.getPageY(b);this.deltaX=this.startX-a.offsetLeft;this.deltaY=this.startY-a.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var a=YAHOO.util.DDM;a.startDrag(a.startX,a.startY);a.fromTimeout=true},this.clickTimeThresh)},startDrag:function(b,d){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState= -this.useShim;this.useShim=true}this._activateShim();clearTimeout(this.clickTimeout);var a=this.dragCurrent;if(a&&a.events.b4StartDrag){a.b4StartDrag(b,d);a.fireEvent("b4StartDragEvent",{x:b,y:d})}if(a&&a.events.startDrag){a.startDrag(b,d);a.fireEvent("startDragEvent",{x:b,y:d})}this.dragThreshMet=true},handleMouseUp:function(b){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(b)}this.fromTimeout=false;this.fireEvents(b, -true)}this.stopDrag(b);this.stopEvent(b)}},stopEvent:function(b){this.stopPropagation&&YAHOO.util.Event.stopPropagation(b);this.preventDefault&&YAHOO.util.Event.preventDefault(b)},stopDrag:function(b,d){var a=this.dragCurrent;if(a&&!d){if(this.dragThreshMet){if(a.events.b4EndDrag){a.b4EndDrag(b);a.fireEvent("b4EndDragEvent",{e:b})}if(a.events.endDrag){a.endDrag(b);a.fireEvent("endDragEvent",{e:b})}}if(a.events.mouseUp){a.onMouseUp(b);a.fireEvent("mouseUpEvent",{e:b})}}if(this._shimActive){this._deactivateShim(); -if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false}}this.dragCurrent=null;this.dragOvers={}},handleMouseMove:function(b){var d=this.dragCurrent;if(d){if(YAHOO.util.Event.isIE&&!b.button){this.stopEvent(b);return this.handleMouseUp(b)}if(!this.dragThreshMet){var a=Math.abs(this.startX-YAHOO.util.Event.getPageX(b)),c=Math.abs(this.startY-YAHOO.util.Event.getPageY(b));(a>this.clickPixelThresh||c>this.clickPixelThresh)&&this.startDrag(this.startX,this.startY)}if(this.dragThreshMet){if(d&& -d.events.b4Drag){d.b4Drag(b);d.fireEvent("b4DragEvent",{e:b})}if(d&&d.events.drag){d.onDrag(b);d.fireEvent("dragEvent",{e:b})}d&&this.fireEvents(b,false)}this.stopEvent(b)}},fireEvents:function(b,d){var a=this.dragCurrent;if(a&&!a.isLocked()&&!a.dragOnly){var c=YAHOO.util.Event.getPageX(b),e=YAHOO.util.Event.getPageY(b),h=new YAHOO.util.Point(c,e),e=a.getTargetCoord(h.x,h.y),i=a.getDragEl(),c=["out","over","drop","enter"],j=new YAHOO.util.Region(e.y,e.x+i.offsetWidth,e.y+i.offsetHeight,e.x),k=[], -l={},e=[],i={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]},m;for(m in this.dragOvers){var n=this.dragOvers[m];if(this.isTypeOfDD(n)){this.isOverTarget(h,n,this.mode,j)||i.outEvts.push(n);k[m]=true;delete this.dragOvers[m]}}for(var o in a.groups)if("string"==typeof o)for(m in this.ids[o]){n=this.ids[o][m];if(this.isTypeOfDD(n)&&n.isTarget&&(!n.isLocked()&&n!=a)&&this.isOverTarget(h,n,this.mode,j)){l[o]=true;if(d)i.dropEvts.push(n);else{k[n.id]?i.overEvts.push(n):i.enterEvts.push(n);this.dragOvers[n.id]= -n}}}this.interactionInfo={out:i.outEvts,enter:i.enterEvts,over:i.overEvts,drop:i.dropEvts,point:h,draggedRegion:j,sourceRegion:this.locationCache[a.id],validDrop:d};for(var r in l)e.push(r);if(d&&!i.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(b);a.fireEvent("invalidDropEvent",{e:b})}}for(m=0;m<c.length;m++){o=null;i[c[m]+"Evts"]&&(o=i[c[m]+"Evts"]);if(o&&o.length){k=c[m].charAt(0).toUpperCase()+c[m].substr(1);r="onDrag"+k;h="b4Drag"+k;j="drag"+k+ -"Event";k="drag"+k;if(this.mode){if(a.events[h]){a[h](b,o,e);a.fireEvent(h+"Event",{event:b,info:o,group:e})}if(a.events[k]){a[r](b,o,e);a.fireEvent(j,{event:b,info:o,group:e})}}else{l=0;for(n=o.length;l<n;++l){if(a.events[h]){a[h](b,o[l].id,e[0]);a.fireEvent(h+"Event",{event:b,info:o[l].id,group:e[0]})}if(a.events[k]){a[r](b,o[l].id,e[0]);a.fireEvent(j,{event:b,info:o[l].id,group:e[0]})}}}}}}},getBestMatch:function(b){var d=null,a=b.length;if(a==1)d=b[0];else for(var c=0;c<a;++c){var e=b[c];if(this.mode== -this.INTERSECT&&e.cursorIsOver){d=e;break}else if(!d||!d.overlap||e.overlap&&d.overlap.getArea()<e.overlap.getArea())d=e}return d},refreshCache:function(b){var b=b||this.ids,d;for(d in b)if("string"==typeof d)for(var a in this.ids[d]){var c=this.ids[d][a];if(this.isTypeOfDD(c)){var e=this.getLocation(c);e?this.locationCache[c.id]=e:delete this.locationCache[c.id]}}},verifyEl:function(b){try{if(b&&b.offsetParent)return true}catch(d){}return false},getLocation:function(b){if(!this.isTypeOfDD(b))return null; -var d=b.getEl(),a,c,e;try{a=YAHOO.util.Dom.getXY(d)}catch(h){}if(!a)return null;c=a[0];e=c+d.offsetWidth;a=a[1];return new YAHOO.util.Region(a-b.padding[0],e+b.padding[1],a+d.offsetHeight+b.padding[2],c-b.padding[3])},isOverTarget:function(b,d,a,c){var e=this.locationCache[d.id];if(!e||!this.useCache){e=this.getLocation(d);this.locationCache[d.id]=e}if(!e)return false;d.cursorIsOver=e.contains(b);var h=this.dragCurrent;if(!h||!a&&!h.constrainX&&!h.constrainY)return d.cursorIsOver;d.overlap=null;if(!c){b= -h.getTargetCoord(b.x,b.y);h=h.getDragEl();c=new YAHOO.util.Region(b.y,b.x+h.offsetWidth,b.y+h.offsetHeight,b.x)}if(e=c.intersect(e)){d.overlap=e;return a?true:d.cursorIsOver}return false},_onUnload:function(){this.unregAll()},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null}this._execOnAll("unreg",[]);this.ids={}},elementCache:{},getElWrapper:function(b){var d=this.elementCache[b];if(!d||!d.el)d=this.elementCache[b]=new this.ElementWrapper(YAHOO.util.Dom.get(b));return d}, -getElement:function(b){return YAHOO.util.Dom.get(b)},getCss:function(b){return(b=YAHOO.util.Dom.get(b))?b.style:null},ElementWrapper:function(b){this.id=(this.el=b||null)&&b.id;this.css=this.el&&b.style},getPosX:function(b){return YAHOO.util.Dom.getX(b)},getPosY:function(b){return YAHOO.util.Dom.getY(b)},swapNode:function(b,d){if(b.swapNode)b.swapNode(d);else{var a=d.parentNode,c=d.nextSibling;if(c==b)a.insertBefore(b,d);else if(d==b.nextSibling)a.insertBefore(d,b);else{b.parentNode.replaceChild(d, -b);a.insertBefore(b,c)}}},getScroll:function(){var b,d,a=document.documentElement,c=document.body;if(a&&(a.scrollTop||a.scrollLeft)){b=a.scrollTop;d=a.scrollLeft}else if(c){b=c.scrollTop;d=c.scrollLeft}return{top:b,left:d}},getStyle:function(b,d){return YAHOO.util.Dom.getStyle(b,d)},getScrollTop:function(){return this.getScroll().top},getScrollLeft:function(){return this.getScroll().left},moveToEl:function(b,d){var a=YAHOO.util.Dom.getXY(d);YAHOO.util.Dom.setXY(b,a)},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight()}, -getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth()},numericSort:function(b,d){return b-d},_timeoutCount:0,_addListeners:function(){var b=YAHOO.util.DDM;if(YAHOO.util.Event&&document)b._onLoad();else if(!(b._timeoutCount>2E3)){setTimeout(b._addListeners,10);if(document&&document.body)b._timeoutCount=b._timeoutCount+1}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id))return true;for(var a=b.parentNode;a;){if(this.isHandle(d,a.id))return true;a=a.parentNode}return false}}}(), -YAHOO.util.DDM=YAHOO.util.DragDropMgr,YAHOO.util.DDM._addListeners()); -(function(){var c=YAHOO.util.Event,e=YAHOO.util.Dom;YAHOO.util.DragDrop=function(b,d,a){b&&this.init(b,d,a)};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments)},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},unlock:function(){this.locked=false},isTarget:true,padding:null,dragOnly:false,useShim:false, -_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(){},startDrag:function(){},b4Drag:function(){},onDrag:function(){},onDragEnter:function(){},b4DragOver:function(){},onDragOver:function(){},b4DragOut:function(){},onDragOut:function(){},b4DragDrop:function(){},onDragDrop:function(){}, -onInvalidDrop:function(){},b4EndDrag:function(){},endDrag:function(){},b4MouseDown:function(){},onMouseDown:function(){},onMouseUp:function(){},onAvailable:function(){},getEl:function(){if(!this._domRef)this._domRef=e.get(this.id);return this._domRef},getDragEl:function(){return e.get(this.dragElId)},init:function(b,d,a){this.initTarget(b,d,a);c.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var e in this.events)this.createEvent(e+"Event")},initTarget:function(b,d,a){this.config= -a||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof b!=="string"){this._domRef=b;b=e.generateId(b)}this.id=b;this.addToGroup(d?d:"default");this.handleElId=b;c.onAvailable(b,this.handleOnAvailable,this,true);this.setDragElId(b);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig()},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true, -b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events)for(var b in this.config.events)this.config.events[b]===false&&(this.events[b]=false);this.padding=this.config.padding||[0,0,0,0];this.isTarget=this.config.isTarget!==false;this.maintainOffset=this.config.maintainOffset;this.primaryButtonOnly=this.config.primaryButtonOnly!==false;this.dragOnly=this.config.dragOnly===true?true:false;this.useShim= -this.config.useShim===true?true:false},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(b,d,a,c){this.padding=!d&&0!==d?[b,b,b,b]:!a&&0!==a?[b,d,b,d]:[b,d,a,c]},setInitPosition:function(b,d){var a=this.getEl();if(this.DDM.verifyEl(a)){var c=b||0,g=d||0,a=e.getXY(a);this.initPageX=a[0]-c;this.initPageY=a[1]-g;this.lastPageX=a[0];this.lastPageY=a[1];this.setStartPosition(a)}},setStartPosition:function(b){b=b||e.getXY(this.getEl());this.deltaSetXY= -null;this.startPageX=b[0];this.startPageY=b[1]},addToGroup:function(b){this.groups[b]=true;this.DDM.regDragDrop(this,b)},removeFromGroup:function(b){this.groups[b]&&delete this.groups[b];this.DDM.removeDDFromGroup(this,b)},setDragElId:function(b){this.dragElId=b},setHandleElId:function(b){typeof b!=="string"&&(b=e.generateId(b));this.handleElId=b;this.DDM.regHandle(this.id,b)},setOuterHandleElId:function(b){typeof b!=="string"&&(b=e.generateId(b));c.on(b,"mousedown",this.handleMouseDown,this,true); -this.setHandleElId(b);this.hasOuterHandles=true},unreg:function(){c.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},isLocked:function(){return this.DDM.isLocked()||this.locked},handleMouseDown:function(b){var d=b.which||b.button;if(!(this.primaryButtonOnly&&d>1)&&!this.isLocked()){var d=this.b4MouseDown(b),a=true;this.events.b4MouseDown&&(a=this.fireEvent("b4MouseDownEvent",b));var e=this.onMouseDown(b),g=true;this.events.mouseDown&&(g=this.fireEvent("mouseDownEvent", -b));if(!(d===false||e===false||a===false||g===false)){this.DDM.refreshCache(this.groups);d=new YAHOO.util.Point(c.getPageX(b),c.getPageY(b));if((this.hasOuterHandles||this.DDM.isOverTarget(d,this))&&this.clickValidator(b)){this.setStartPosition();this.DDM.handleMouseDown(b,this);this.DDM.stopEvent(b)}}}},clickValidator:function(b){b=YAHOO.util.Event.getTarget(b);return this.isValidHandleChild(b)&&(this.id==this.handleElId||this.DDM.handleWasClicked(b,this.id))},getTargetCoord:function(b,d){var a= -b-this.deltaX,c=d-this.deltaY;if(this.constrainX){if(a<this.minX)a=this.minX;if(a>this.maxX)a=this.maxX}if(this.constrainY){if(c<this.minY)c=this.minY;if(c>this.maxY)c=this.maxY}a=this.getTick(a,this.xTicks);c=this.getTick(c,this.yTicks);return{x:a,y:c}},addInvalidHandleType:function(b){b=b.toUpperCase();this.invalidHandleTypes[b]=b},addInvalidHandleId:function(b){typeof b!=="string"&&(b=e.generateId(b));this.invalidHandleIds[b]=b},addInvalidHandleClass:function(b){this.invalidHandleClasses.push(b)}, -removeInvalidHandleType:function(b){delete this.invalidHandleTypes[b.toUpperCase()]},removeInvalidHandleId:function(b){typeof b!=="string"&&(b=e.generateId(b));delete this.invalidHandleIds[b]},removeInvalidHandleClass:function(b){for(var d=0,a=this.invalidHandleClasses.length;d<a;++d)this.invalidHandleClasses[d]==b&&delete this.invalidHandleClasses[d]},isValidHandleChild:function(b){var d=true,a;try{a=b.nodeName.toUpperCase()}catch(c){a=b.nodeName}d=(d=d&&!this.invalidHandleTypes[a])&&!this.invalidHandleIds[b.id]; -a=0;for(var g=this.invalidHandleClasses.length;d&&a<g;++a)d=!e.hasClass(b,this.invalidHandleClasses[a]);return d},setXTicks:function(b,d){this.xTicks=[];this.xTickSize=d;for(var a={},c=this.initPageX;c>=this.minX;c=c-d)if(!a[c]){this.xTicks[this.xTicks.length]=c;a[c]=true}for(c=this.initPageX;c<=this.maxX;c=c+d)if(!a[c]){this.xTicks[this.xTicks.length]=c;a[c]=true}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(b,d){this.yTicks=[];this.yTickSize=d;for(var a={},c=this.initPageY;c>=this.minY;c= -c-d)if(!a[c]){this.yTicks[this.yTicks.length]=c;a[c]=true}for(c=this.initPageY;c<=this.maxY;c=c+d)if(!a[c]){this.yTicks[this.yTicks.length]=c;a[c]=true}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(b,d,a){this.leftConstraint=parseInt(b,10);this.rightConstraint=parseInt(d,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;a&&this.setXTicks(this.initPageX,a);this.constrainX=true},clearConstraints:function(){this.constrainY=this.constrainX= -false;this.clearTicks()},clearTicks:function(){this.yTicks=this.xTicks=null;this.yTickSize=this.xTickSize=0},setYConstraint:function(b,d,a){this.topConstraint=parseInt(b,10);this.bottomConstraint=parseInt(d,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;a&&this.setYTicks(this.initPageY,a);this.constrainY=true},resetConstraints:function(){this.initPageX||this.initPageX===0?this.setInitPosition(this.maintainOffset?this.lastPageX-this.initPageX:0,this.maintainOffset? -this.lastPageY-this.initPageY:0):this.setInitPosition();this.constrainX&&this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);this.constrainY&&this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)},getTick:function(b,d){if(d){if(d[0]>=b)return d[0];for(var a=0,c=d.length;a<c;++a){var e=a+1;if(d[e]&&d[e]>=b)return d[e]-b>b-d[a]?d[a]:d[e]}return d[d.length-1]}return b},toString:function(){return"DragDrop "+this.id}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider)})(); -YAHOO.util.DD=function(c,e,b){c&&this.init(c,e,b)}; -YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:!0,autoOffset:function(c,e){this.setDelta(c-this.startPageX,e-this.startPageY)},setDelta:function(c,e){this.deltaX=c;this.deltaY=e},setDragElPos:function(c,e){this.alignElWithMouse(this.getDragEl(),c,e)},alignElWithMouse:function(c,e,b){var d=this.getTargetCoord(e,b);if(this.deltaSetXY){YAHOO.util.Dom.setStyle(c,"left",d.x+this.deltaSetXY[0]+"px");YAHOO.util.Dom.setStyle(c,"top",d.y+this.deltaSetXY[1]+"px")}else{YAHOO.util.Dom.setXY(c,[d.x,d.y]); -e=parseInt(YAHOO.util.Dom.getStyle(c,"left"),10);b=parseInt(YAHOO.util.Dom.getStyle(c,"top"),10);this.deltaSetXY=[e-d.x,b-d.y]}this.cachePosition(d.x,d.y);var a=this;setTimeout(function(){a.autoScroll.call(a,d.x,d.y,c.offsetHeight,c.offsetWidth)},0)},cachePosition:function(c,e){if(c){this.lastPageX=c;this.lastPageY=e}else{var b=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=b[0];this.lastPageY=b[1]}},autoScroll:function(c,e,b,d){if(this.scroll){var a=this.DDM.getClientHeight(),f=this.DDM.getClientWidth(), -g=this.DDM.getScrollTop(),h=this.DDM.getScrollLeft(),d=d+c,i=a+g-e-this.deltaY,j=f+h-c-this.deltaX,k=document.all?80:30;b+e>a&&i<40&&window.scrollTo(h,g+k);e<g&&(g>0&&e-g<40)&&window.scrollTo(h,g-k);d>f&&j<40&&window.scrollTo(h+k,g);c<h&&(h>0&&c-h<40)&&window.scrollTo(h-k,g)}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=this.config.scroll!==false},b4MouseDown:function(c){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(c),YAHOO.util.Event.getPageY(c))}, -b4Drag:function(c){this.setDragElPos(YAHOO.util.Event.getPageX(c),YAHOO.util.Event.getPageY(c))},toString:function(){return"DD "+this.id}});YAHOO.util.DDProxy=function(c,e,b){if(c){this.init(c,e,b);this.initFrame()}};YAHOO.util.DDProxy.dragElId="ygddfdiv"; -YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:!0,centerFrame:!1,createFrame:function(){var c=this,e=document.body;if(!e||!e.firstChild)setTimeout(function(){c.createFrame()},50);else{var b=this.getDragEl(),d=YAHOO.util.Dom;if(!b){b=document.createElement("div");b.id=this.dragElId;var a=b.style;a.position="absolute";a.visibility="hidden";a.cursor="move";a.border="2px solid #aaa";a.zIndex=999;a.height="25px";a.width="25px";a=document.createElement("div");d.setStyle(a,"height","100%");d.setStyle(a, -"width","100%");d.setStyle(a,"background-color","#ccc");d.setStyle(a,"opacity","0");b.appendChild(a);e.insertBefore(b,e.firstChild)}}},initFrame:function(){this.createFrame()},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=this.config.resizeFrame!==false;this.centerFrame=this.config.centerFrame;this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId)},showFrame:function(c,e){this.getEl();var b=this.getDragEl(),d=b.style;this._resizeProxy(); -this.centerFrame&&this.setDelta(Math.round(parseInt(d.width,10)/2),Math.round(parseInt(d.height,10)/2));this.setDragElPos(c,e);YAHOO.util.Dom.setStyle(b,"visibility","visible")},_resizeProxy:function(){if(this.resizeFrame){var c=YAHOO.util.Dom,e=this.getEl(),b=this.getDragEl(),d=parseInt(c.getStyle(b,"borderTopWidth"),10),a=parseInt(c.getStyle(b,"borderRightWidth"),10),f=parseInt(c.getStyle(b,"borderBottomWidth"),10),g=parseInt(c.getStyle(b,"borderLeftWidth"),10);isNaN(d)&&(d=0);isNaN(a)&&(a=0);isNaN(f)&& -(f=0);isNaN(g)&&(g=0);a=Math.max(0,e.offsetWidth-a-g);e=Math.max(0,e.offsetHeight-d-f);c.setStyle(b,"width",a+"px");c.setStyle(b,"height",e+"px")}},b4MouseDown:function(c){this.setStartPosition();var e=YAHOO.util.Event.getPageX(c),c=YAHOO.util.Event.getPageY(c);this.autoOffset(e,c)},b4StartDrag:function(c,e){this.showFrame(c,e)},b4EndDrag:function(){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden")},endDrag:function(){var c=YAHOO.util.Dom,e=this.getEl(),b=this.getDragEl();c.setStyle(b, -"visibility","");c.setStyle(e,"visibility","hidden");YAHOO.util.DDM.moveToEl(e,b);c.setStyle(b,"visibility","hidden");c.setStyle(e,"visibility","")},toString:function(){return"DDProxy "+this.id}});YAHOO.util.DDTarget=function(c,e,b){c&&this.initTarget(c,e,b)};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return"DDTarget "+this.id}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"}); -(function(){function c(a,b,d,e){c.ANIM_AVAIL=!YAHOO.lang.isUndefined(YAHOO.util.Anim);if(a){this.init(a,b,true);this.initSlider(e);this.initThumb(d)}}var e=YAHOO.util.Dom.getXY,b=YAHOO.util.Event,d=Array.prototype.slice;YAHOO.lang.augmentObject(c,{getHorizSlider:function(a,b,d,e,i){return new c(a,a,new YAHOO.widget.SliderThumb(b,a,d,e,0,0,i),"horiz")},getVertSlider:function(a,b,d,e,i){return new c(a,a,new YAHOO.widget.SliderThumb(b,a,0,0,d,e,i),"vert")},getSliderRegion:function(a,b,d,e,i,j,k){return new c(a, -a,new YAHOO.widget.SliderThumb(b,a,d,e,i,j,k),"region")},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(c,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(a){this.type=a;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=c.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration= -0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0]},initThumb:function(a){var b=this;this.thumb=a;a.cacheBetweenDrags=true;if(a._isHoriz&&a.xTicks&&a.xTicks.length)this.tickPause=Math.round(360/a.xTicks.length);else if(a.yTicks&&a.yTicks.length)this.tickPause=Math.round(360/a.yTicks.length);a.onAvailable=function(){return b.setStartSliderState()};a.onMouseDown=function(){b._mouseDown=true;return b.focus()};a.startDrag=function(){b._slideStart()}; -a.onDrag=function(){b.fireEvents(true)};a.onMouseUp=function(){b.thumbMouseUp()}},onAvailable:function(){this._bindKeyEvents()},_bindKeyEvents:function(){b.on(this.id,"keydown",this.handleKeyDown,this,true);b.on(this.id,"keypress",this.handleKeyPress,this,true)},handleKeyPress:function(a){if(this.enableKeys)switch(b.getCharCode(a)){case 37:case 38:case 39:case 40:case 36:case 35:b.preventDefault(a)}},handleKeyDown:function(a){if(this.enableKeys){var d=b.getCharCode(a),e=this.thumb,h=this.getXValue(), -i=this.getYValue(),j=true;switch(d){case 37:h=h-this.keyIncrement;break;case 38:i=i-this.keyIncrement;break;case 39:h=h+this.keyIncrement;break;case 40:i=i+this.keyIncrement;break;case 36:h=e.leftConstraint;i=e.topConstraint;break;case 35:h=e.rightConstraint;i=e.bottomConstraint;break;default:j=false}if(j){e._isRegion?this._setRegionValue(c.SOURCE_KEY_EVENT,h,i,true):this._setValue(c.SOURCE_KEY_EVENT,e._isHoriz?h:i,true);b.stopEvent(a)}}},setStartSliderState:function(){this.setThumbCenterPoint(); -this.baselinePos=e(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion)if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null}else this.setRegionValue(0,0,true,true,true);else if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null}else this.setValue(0,true,true,true)},setThumbCenterPoint:function(){var a=this.thumb.getEl(); -if(a)this.thumbCenterPoint={x:parseInt(a.offsetWidth/2,10),y:parseInt(a.offsetHeight/2,10)}},lock:function(){this.thumb.lock();this.locked=true},unlock:function(){this.thumb.unlock();this.locked=false},thumbMouseUp:function(){this._mouseDown=false;!this.isLocked()&&!this.moveComplete&&this.endMove()},onMouseUp:function(){this._mouseDown=false;this.backgroundEnabled&&(!this.isLocked()&&!this.moveComplete)&&this.endMove()},getThumb:function(){return this.thumb},focus:function(){this.valueChangeSource= -c.SOURCE_UI_EVENT;var a=this.getEl();if(a.focus)try{a.focus()}catch(b){}this.verifyOffset();return!this.isLocked()},onChange:function(){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue()},getXValue:function(){return this.thumb.getXValue()},getYValue:function(){return this.thumb.getYValue()},setValue:function(){var a=d.call(arguments);a.unshift(c.SOURCE_SET_VALUE);return this._setValue.apply(this,a)},_setValue:function(a,b,d,e,i){var j=this.thumb,k; -if(!j.available){this.deferredSetValue=arguments;return false}if(this.isLocked()&&!e||isNaN(b)||j._isRegion)return false;this._silent=i;this.valueChangeSource=a||c.SOURCE_SET_VALUE;j.lastOffset=[b,b];this.verifyOffset(true);this._slideStart();if(j._isHoriz){k=j.initPageX+b+this.thumbCenterPoint.x;this.moveThumb(k,j.initPageY,d)}else{k=j.initPageY+b+this.thumbCenterPoint.y;this.moveThumb(j.initPageX,k,d)}return true},setRegionValue:function(){var a=d.call(arguments);a.unshift(c.SOURCE_SET_VALUE);return this._setRegionValue.apply(this, -a)},_setRegionValue:function(a,b,d,e,i,j){var k=this.thumb;if(!k.available){this.deferredSetRegionValue=arguments;return false}if(this.isLocked()&&!i||isNaN(b)||!k._isRegion)return false;this._silent=j;this.valueChangeSource=a||c.SOURCE_SET_VALUE;k.lastOffset=[b,d];this.verifyOffset(true);this._slideStart();this.moveThumb(k.initPageX+b+this.thumbCenterPoint.x,k.initPageY+d+this.thumbCenterPoint.y,e);return true},verifyOffset:function(){var a=e(this.getEl()),b=this.thumb;(!this.thumbCenterPoint||!this.thumbCenterPoint.x)&& -this.setThumbCenterPoint();if(a&&(a[0]!=this.baselinePos[0]||a[1]!=this.baselinePos[1])){this.setInitPosition();this.baselinePos=a;b.initPageX=this.initPageX+b.startOffset[0];b.initPageY=this.initPageY+b.startOffset[1];b.deltaSetXY=null;this.resetThumbConstraints();return false}return true},moveThumb:function(a,b,d,h){var i=this.thumb,j=this,k,l;if(i.available){i.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);l=i.getTargetCoord(a,b);k=[Math.round(l.x),Math.round(l.y)];if(this.animate&& -i._graduated&&!d){this.lock();this.curCoord=e(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){j.moveOneTick(k)},this.tickPause)}else if(this.animate&&c.ANIM_AVAIL&&!d){this.lock();a=new YAHOO.util.Motion(i.id,{points:{to:k}},this.animationDuration,YAHOO.util.Easing.easeOut);a.onComplete.subscribe(function(){j.unlock();j._mouseDown||j.endMove()});a.animate()}else{i.setDragElPos(a,b);!h&&!this._mouseDown&&this.endMove()}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart(); -this.fireEvent("slideStart")}this._sliding=true}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var a=this._silent;this.moveComplete=this._silent=this._sliding=false;if(!a){this.onSlideEnd();this.fireEvent("slideEnd")}}},moveOneTick:function(a){var b=this.thumb,d=this,c=null,e;if(b._isRegion){c=this._getNextX(this.curCoord,a);e=c!==null?c[0]:this.curCoord[0];c=this._getNextY(this.curCoord,a);c=c!==null?c[1]:this.curCoord[1];c=e!==this.curCoord[0]||c!==this.curCoord[1]?[e,c]:null}else c= -b._isHoriz?this._getNextX(this.curCoord,a):this._getNextY(this.curCoord,a);if(c){this.curCoord=c;this.thumb.alignElWithMouse(b.getEl(),c[0]+this.thumbCenterPoint.x,c[1]+this.thumbCenterPoint.y);if(c[0]==a[0]&&c[1]==a[1]){this.unlock();this._mouseDown||this.endMove()}else setTimeout(function(){d.moveOneTick(a)},this.tickPause)}else{this.unlock();this._mouseDown||this.endMove()}},_getNextX:function(a,b){var d=this.thumb,c;c=[];c=null;if(a[0]>b[0]){c=d.tickSize-this.thumbCenterPoint.x;c=d.getTargetCoord(a[0]- -c,a[1]);c=[c.x,c.y]}else if(a[0]<b[0]){c=d.tickSize+this.thumbCenterPoint.x;c=d.getTargetCoord(a[0]+c,a[1]);c=[c.x,c.y]}return c},_getNextY:function(a,b){var d=this.thumb,c;c=[];c=null;if(a[1]>b[1]){c=d.tickSize-this.thumbCenterPoint.y;c=d.getTargetCoord(a[0],a[1]-c);c=[c.x,c.y]}else if(a[1]<b[1]){c=d.tickSize+this.thumbCenterPoint.y;c=d.getTargetCoord(a[0],a[1]+c);c=[c.x,c.y]}return c},b4MouseDown:function(){if(!this.backgroundEnabled)return false;this.thumb.autoOffset();this.resetThumbConstraints()}, -onMouseDown:function(a){if(!this.backgroundEnabled||this.isLocked())return false;this._mouseDown=true;var d=b.getPageX(a),a=b.getPageY(a);this.focus();this._slideStart();this.moveThumb(d,a)},onDrag:function(a){if(this.backgroundEnabled&&!this.isLocked()){var d=b.getPageX(a),a=b.getPageY(a);this.moveThumb(d,a,true,true);this.fireEvents()}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd()},resetThumbConstraints:function(){var a=this.thumb;a.setXConstraint(a.leftConstraint, -a.rightConstraint,a.xTickSize);a.setYConstraint(a.topConstraint,a.bottomConstraint,a.xTickSize)},fireEvents:function(a){var b=this.thumb;a||b.cachePosition();if(!this.isLocked())if(b._isRegion){a=b.getXValue();b=b.getYValue();if((a!=this.previousX||b!=this.previousY)&&!this._silent){this.onChange(a,b);this.fireEvent("change",{x:a,y:b})}this.previousX=a;this.previousY=b}else{b=b.getValue();if(b!=this.previousVal&&!this._silent){this.onChange(b);this.fireEvent("change",b)}this.previousVal=b}},toString:function(){return"Slider ("+ -this.type+") "+this.id}});YAHOO.lang.augmentProto(c,YAHOO.util.EventProvider);YAHOO.widget.Slider=c})();YAHOO.widget.SliderThumb=function(c,e,b,d,a,f,g){if(c){YAHOO.widget.SliderThumb.superclass.constructor.call(this,c,e);this.parentElId=e}this.isTarget=false;this.tickSize=g;this.maintainOffset=true;this.initSlider(b,d,a,f,g);this.scroll=false}; -YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:!0,_isHoriz:!1,_prevVal:0,_graduated:!1,getOffsetFromParent0:function(c){var e=YAHOO.util.Dom.getXY(this.getEl()),c=c||YAHOO.util.Dom.getXY(this.parentElId);return[e[0]-c[0],e[1]-c[1]]},getOffsetFromParent:function(c){var e=this.getEl(),b;if(this.deltaOffset){b=parseInt(YAHOO.util.Dom.getStyle(e,"left"),10);e=parseInt(YAHOO.util.Dom.getStyle(e,"top"),10);b=[b+this.deltaOffset[0],e+this.deltaOffset[1]]}else{b=YAHOO.util.Dom.getXY(e); -c=c||YAHOO.util.Dom.getXY(this.parentElId);b=[b[0]-c[0],b[1]-c[1]];c=parseInt(YAHOO.util.Dom.getStyle(e,"left"),10);e=parseInt(YAHOO.util.Dom.getStyle(e,"top"),10);c=c-b[0];e=e-b[1];if(!isNaN(c)&&!isNaN(e))this.deltaOffset=[c,e]}return b},initSlider:function(c,e,b,d,a){this.initLeft=c;this.initRight=e;this.initUp=b;this.initDown=d;this.setXConstraint(c,e,a);this.setYConstraint(b,d,a);if(a&&a>1)this._graduated=true;this._isHoriz=c||e;this._isVert=b||d;this._isRegion=this._isHoriz&&this._isVert},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this); -this.tickSize=0;this._graduated=false},getValue:function(){return this._isHoriz?this.getXValue():this.getYValue()},getXValue:function(){if(!this.available)return 0;var c=this.getOffsetFromParent();if(YAHOO.lang.isNumber(c[0])){this.lastOffset=c;return c[0]-this.startOffset[0]}return this.lastOffset[0]-this.startOffset[0]},getYValue:function(){if(!this.available)return 0;var c=this.getOffsetFromParent();if(YAHOO.lang.isNumber(c[1])){this.lastOffset=c;return c[1]-this.startOffset[1]}return this.lastOffset[1]- -this.startOffset[1]},toString:function(){return"SliderThumb "+this.id},onChange:function(){}}); -(function(){function c(b,a,c,e){var h=this,i=false,j=false,k,l;this.minSlider=b;this.maxSlider=a;this.activeSlider=b;this.isHoriz=b.thumb._isHoriz;k=this.minSlider.thumb.onMouseDown;l=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){h.activeSlider=h.minSlider;k.apply(this,arguments)};this.maxSlider.thumb.onMouseDown=function(){h.activeSlider=h.maxSlider;l.apply(this,arguments)};this.minSlider.thumb.onAvailable=function(){b.setStartSliderState();i=true;j&&h.fireEvent("ready", -h)};this.maxSlider.thumb.onAvailable=function(){a.setStartSliderState();j=true;i&&h.fireEvent("ready",h)};b.onMouseDown=a.onMouseDown=function(a){return this.backgroundEnabled&&h._handleMouseDown(a)};b.onDrag=a.onDrag=function(a){h._handleDrag(a)};b.onMouseUp=a.onMouseUp=function(a){h._handleMouseUp(a)};b._bindKeyEvents=function(){h._bindKeyEvents(this)};a._bindKeyEvents=function(){};b.subscribe("change",this._handleMinChange,b,this);b.subscribe("slideStart",this._handleSlideStart,b,this);b.subscribe("slideEnd", -this._handleSlideEnd,b,this);a.subscribe("change",this._handleMaxChange,a,this);a.subscribe("slideStart",this._handleSlideStart,a,this);a.subscribe("slideEnd",this._handleSlideEnd,a,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);e=YAHOO.lang.isArray(e)?e:[0,c];e[0]=Math.min(Math.max(parseInt(e[0],10)|0,0),c);e[1]=Math.max(Math.min(parseInt(e[1],10)|0,c),0);e[0]>e[1]&&e.splice(0,2,e[1],e[0]);this.minVal=e[0]; -this.maxVal=e[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true)}var e=YAHOO.util.Event,b=YAHOO.widget;c.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(b,a){this.fireEvent("slideStart",a)},_handleSlideEnd:function(b,a){this.fireEvent("slideEnd",a)},_handleDrag:function(d){b.Slider.prototype.onDrag.call(this.activeSlider,d)},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue()},_handleMaxChange:function(){this.activeSlider= -this.maxSlider;this.updateValue()},_bindKeyEvents:function(b){e.on(b.id,"keydown",this._handleKeyDown,this,true);e.on(b.id,"keypress",this._handleKeyPress,this,true)},_handleKeyDown:function(b){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments)},_handleKeyPress:function(b){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments)},setValues:function(b,a,c,e,h){var i=this.minSlider,j=this.maxSlider,k=i.thumb,l=j.thumb,m=this,n=false,o=false;if(k._isHoriz){k.setXConstraint(k.leftConstraint, -l.rightConstraint,k.tickSize);l.setXConstraint(k.leftConstraint,l.rightConstraint,l.tickSize)}else{k.setYConstraint(k.topConstraint,l.bottomConstraint,k.tickSize);l.setYConstraint(k.topConstraint,l.bottomConstraint,l.tickSize)}this._oneTimeCallback(i,"slideEnd",function(){n=true;if(o){m.updateValue(h);setTimeout(function(){m._cleanEvent(i,"slideEnd");m._cleanEvent(j,"slideEnd")},0)}});this._oneTimeCallback(j,"slideEnd",function(){o=true;if(n){m.updateValue(h);setTimeout(function(){m._cleanEvent(i, -"slideEnd");m._cleanEvent(j,"slideEnd")},0)}});i.setValue(b,c,e,false);j.setValue(a,c,e,false)},setMinValue:function(b,a,c,e){var h=this.minSlider,i=this;this.activeSlider=h;i=this;this._oneTimeCallback(h,"slideEnd",function(){i.updateValue(e);setTimeout(function(){i._cleanEvent(h,"slideEnd")},0)});h.setValue(b,a,c)},setMaxValue:function(b,a,c,e){var h=this.maxSlider,i=this;this.activeSlider=h;this._oneTimeCallback(h,"slideEnd",function(){i.updateValue(e);setTimeout(function(){i._cleanEvent(h,"slideEnd")}, -0)});h.setValue(b,a,c)},updateValue:function(b){var a=this.minSlider.getValue(),c=this.maxSlider.getValue(),e=false,h,i,j,k;if(a!=this.minVal||c!=this.maxVal){e=true;h=this.minSlider.thumb;i=this.maxSlider.thumb;j=this.isHoriz?"x":"y";k=this.minSlider.thumbCenterPoint[j]+this.maxSlider.thumbCenterPoint[j];j=Math.max(c-k-this.minRange,0);k=Math.min(-a-k-this.minRange,0);if(this.isHoriz){j=Math.min(j,i.rightConstraint);h.setXConstraint(h.leftConstraint,j,h.tickSize);i.setXConstraint(k,i.rightConstraint, -i.tickSize)}else{j=Math.min(j,i.bottomConstraint);h.setYConstraint(h.leftConstraint,j,h.tickSize);i.setYConstraint(k,i.bottomConstraint,i.tickSize)}}this.minVal=a;this.maxVal=c;e&&!b&&this.fireEvent("change",this)},selectActiveSlider:function(b){var a=this.minSlider,c=this.maxSlider,e=a.isLocked()||!a.backgroundEnabled,h=c.isLocked()||!a.backgroundEnabled,i=YAHOO.util.Event;if(e||h)this.activeSlider=e?c:a;else{b=this.isHoriz?i.getPageX(b)-a.thumb.initPageX-a.thumbCenterPoint.x:i.getPageY(b)-a.thumb.initPageY- -a.thumbCenterPoint.y;this.activeSlider=b*2>c.getValue()+a.getValue()?c:a}},_handleMouseDown:function(d){if(d._handled)return false;d._handled=true;this.selectActiveSlider(d);return b.Slider.prototype.onMouseDown.call(this.activeSlider,d)},_handleMouseUp:function(d){b.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments)},_oneTimeCallback:function(b,a,c){b.subscribe(a,function(){b.unsubscribe(a,arguments.callee);c.apply({},[].slice.apply(arguments))})},_cleanEvent:function(b,a){var c,e,h,i, -j,k;if(b.__yui_events&&b.events[a]){for(e=b.__yui_events.length;e>=0;--e)if(b.__yui_events[e].type===a){c=b.__yui_events[e];break}if(c){j=c.subscribers;k=[];e=i=0;for(h=j.length;e<h;++e)j[e]&&(k[i++]=j[e]);c.subscribers=k}}}};YAHOO.lang.augmentProto(c,YAHOO.util.EventProvider);b.Slider.getHorizDualSlider=function(d,a,e,g,h,i){a=new b.SliderThumb(a,d,0,g,0,0,h);e=new b.SliderThumb(e,d,0,g,0,0,h);return new c(new b.Slider(d,d,a,"horiz"),new b.Slider(d,d,e,"horiz"),g,i)};b.Slider.getVertDualSlider=function(c, -a,e,g,h,i){a=new b.SliderThumb(a,c,0,0,0,g,h);e=new b.SliderThumb(e,c,0,0,0,g,h);return new b.DualSlider(new b.Slider(c,c,a,"vert"),new b.Slider(c,c,e,"vert"),g,i)};YAHOO.widget.DualSlider=c})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});YAHOO.util.Attribute=function(c,e){if(e){this.owner=e;this.configure(c,true)}}; -YAHOO.util.Attribute.prototype={name:void 0,value:null,owner:null,readOnly:!1,writeOnce:!1,_initialConfig:null,_written:!1,method:null,setter:null,getter:null,validator:null,getValue:function(){var c=this.value;this.getter&&(c=this.getter.call(this.owner,this.name));return c},setValue:function(c,e){var b,d=this.owner,a=this.name,f={type:a,prevValue:this.getValue(),newValue:c};if(this.readOnly||this.writeOnce&&this._written||this.validator&&!this.validator.call(d,c))return false;if(!e){b=d.fireBeforeChangeEvent(f); -if(b===false)return false}this.setter&&(c=this.setter.call(d,c,this.name));this.method&&this.method.call(d,c,this.name);this.value=c;this._written=true;f.type=a;e||this.owner.fireChangeEvent(f);return true},configure:function(c,e){c=c||{};if(e)this._written=false;this._initialConfig=this._initialConfig||{};for(var b in c)if(c.hasOwnProperty(b)){this[b]=c[b];e&&(this._initialConfig[b]=c[b])}},resetValue:function(){return this.setValue(this._initialConfig.value)},resetConfig:function(){this.configure(this._initialConfig, -true)},refresh:function(c){this.setValue(this.value,c)}}; -(function(){var c=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(c){this._configs=this._configs||{};var b=this._configs[c];return!b||!this._configs.hasOwnProperty(c)?null:b.getValue()},set:function(c,b,d){this._configs=this._configs||{};c=this._configs[c];return!c?false:c.setValue(b,d)},getAttributeKeys:function(){this._configs=this._configs;var e=[],b;for(b in this._configs)c.hasOwnProperty(this._configs,b)&&!c.isUndefined(this._configs[b])&& -(e[e.length]=b);return e},setAttributes:function(e,b){for(var d in e)c.hasOwnProperty(e,d)&&this.set(d,e[d],b)},resetValue:function(c,b){this._configs=this._configs||{};if(this._configs[c]){this.set(c,this._configs[c]._initialConfig.value,b);return true}return false},refresh:function(e,b){for(var d=this._configs=this._configs||{},e=(c.isString(e)?[e]:e)||this.getAttributeKeys(),a=0,f=e.length;a<f;++a)d.hasOwnProperty(e[a])&&this._configs[e[a]].refresh(b)},register:function(c,b){this.setAttributeConfig(c, -b)},getAttributeConfig:function(e){this._configs=this._configs||{};var b=this._configs[e]||{},d={};for(e in b)c.hasOwnProperty(b,e)&&(d[e]=b[e]);return d},setAttributeConfig:function(c,b,d){this._configs=this._configs||{};b=b||{};if(this._configs[c])this._configs[c].configure(b,d);else{b.name=c;this._configs[c]=this.createAttribute(b)}},configureAttribute:function(c,b,d){this.setAttributeConfig(c,b,d)},resetAttributeConfig:function(c){this._configs=this._configs||{};this._configs[c].resetConfig()}, -subscribe:function(c,b){this._events=this._events||{};c in this._events||(this._events[c]=this.createEvent(c));YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){this.subscribe.apply(this,arguments)},addListener:function(){this.subscribe.apply(this,arguments)},fireBeforeChangeEvent:function(c){var b;b="before"+(c.type.charAt(0).toUpperCase()+c.type.substr(1)+"Change");c.type=b;return this.fireEvent(c.type,c)},fireChangeEvent:function(c){c.type=c.type+"Change";return this.fireEvent(c.type, -c)},createAttribute:function(c){return new YAHOO.util.Attribute(c,this)}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider)})(); -(function(){var c=YAHOO.util.Dom,e=YAHOO.util.AttributeProvider,b=function(b,a){this.init.apply(this,arguments)};b.DOM_EVENTS={click:true,dblclick:true,keydown:true,keypress:true,keyup:true,mousedown:true,mousemove:true,mouseout:true,mouseover:true,mouseup:true,focus:true,blur:true,submit:true,change:true};b.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(b,a){var c=this.get("element");c&&(c[a]=b)},DEFAULT_HTML_GETTER:function(b){var a=this.get("element"),c;a&&(c=a[b]);return c},appendChild:function(b){b= -b.get?b.get("element"):b;return this.get("element").appendChild(b)},getElementsByTagName:function(b){return this.get("element").getElementsByTagName(b)},hasChildNodes:function(){return this.get("element").hasChildNodes()},insertBefore:function(b,a){b=b.get?b.get("element"):b;a=a&&a.get?a.get("element"):a;return this.get("element").insertBefore(b,a)},removeChild:function(b){b=b.get?b.get("element"):b;return this.get("element").removeChild(b)},replaceChild:function(b,a){b=b.get?b.get("element"):b;a= -a.get?a.get("element"):a;return this.get("element").replaceChild(b,a)},initAttributes:function(){},addListener:function(b,a,c,e){var h=this.get("element")||this.get("id"),e=e||this,i=this;if(!this._events[b]){h&&this.DOM_EVENTS[b]&&YAHOO.util.Event.addListener(h,b,function(a){if(a.srcElement&&!a.target)a.target=a.srcElement;i.fireEvent(b,a)},c,e);this.createEvent(b,this)}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){return this.addListener.apply(this,arguments)}, -subscribe:function(){return this.addListener.apply(this,arguments)},removeListener:function(b,a){return this.unsubscribe.apply(this,arguments)},addClass:function(b){c.addClass(this.get("element"),b)},getElementsByClassName:function(b,a){return c.getElementsByClassName(b,a,this.get("element"))},hasClass:function(b){return c.hasClass(this.get("element"),b)},removeClass:function(b){return c.removeClass(this.get("element"),b)},replaceClass:function(b,a){return c.replaceClass(this.get("element"),b,a)}, -setStyle:function(b,a){return c.setStyle(this.get("element"),b,a)},getStyle:function(b){return c.getStyle(this.get("element"),b)},fireQueue:function(){for(var b=this._queue,a=0,c=b.length;a<c;++a)this[b[a][0]].apply(this,b[a][1])},appendTo:function(b,a){b=b.get?b.get("element"):c.get(b);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:b});var a=a&&a.get?a.get("element"):c.get(a),e=this.get("element");if(!e||!b)return false;e.parent!=b&&(a?b.insertBefore(e,a):b.appendChild(e));this.fireEvent("appendTo", -{type:"appendTo",target:b});return e},get:function(b){var a=this._configs||{},c=a.element;c&&(!a[b]&&!YAHOO.lang.isUndefined(c.value[b]))&&this._setHTMLAttrConfig(b);return e.prototype.get.call(this,b)},setAttributes:function(b,a){for(var c={},e=this._configOrder,h=0,i=e.length;h<i;++h)if(b[e[h]]!==void 0){c[e[h]]=true;this.set(e[h],b[e[h]],a)}for(var j in b)b.hasOwnProperty(j)&&!c[j]&&this.set(j,b[j],a)},set:function(b,a,c){var g=this.get("element");if(g){!this._configs[b]&&!YAHOO.lang.isUndefined(g[b])&& -this._setHTMLAttrConfig(b);return e.prototype.set.apply(this,arguments)}this._queue[this._queue.length]=["set",arguments];if(this._configs[b])this._configs[b].value=a},setAttributeConfig:function(b,a,c){this._configOrder.push(b);e.prototype.setAttributeConfig.apply(this,arguments)},createEvent:function(b,a){this._events[b]=true;return e.prototype.createEvent.apply(this,arguments)},init:function(b,a){this._initElement(b,a)},destroy:function(){var b=this.get("element");YAHOO.util.Event.purgeElement(b, -true);this.unsubscribeAll();b&&b.parentNode&&b.parentNode.removeChild(b);this._queue=[];this._events={};this._configs={};this._configOrder=[]},_initElement:function(d,a){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];a=a||{};a.element=a.element||d||null;var e=false,g=b.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var h in g)g.hasOwnProperty(h)&&(this.DOM_EVENTS[h]=g[h]);typeof a.element==="string"&&this._setHTMLAttrConfig("id", -{value:a.element});if(c.get(a.element)){e=true;this._initHTMLElement(a);this._initContent(a)}YAHOO.util.Event.onAvailable(a.element,function(){e||this._initHTMLElement(a);this.fireEvent("available",{type:"available",target:c.get(a.element)})},this,true);YAHOO.util.Event.onContentReady(a.element,function(){e||this._initContent(a);this.fireEvent("contentReady",{type:"contentReady",target:c.get(a.element)})},this,true)},_initHTMLElement:function(b){this.setAttributeConfig("element",{value:c.get(b.element), -readOnly:true})},_initContent:function(b){this.initAttributes(b);this.setAttributes(b,true);this.fireQueue()},_setHTMLAttrConfig:function(b,a){var c=this.get("element"),a=a||{};a.name=b;a.setter=a.setter||this.DEFAULT_HTML_SETTER;a.getter=a.getter||this.DEFAULT_HTML_GETTER;a.value=a.value||c[b];this._configs[b]=new YAHOO.util.Attribute(a,this)}};YAHOO.augment(b,e);YAHOO.util.Element=b})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"}); -YAHOO.util.Color=function(){var c=YAHOO.lang.isArray,e=YAHOO.lang.isNumber;return{real2dec:function(b){return Math.min(255,Math.round(b*256))},hsv2rgb:function(b,d,a){if(c(b))return this.hsv2rgb.call(this,b[0],b[1],b[2]);var e,g,h,i=Math.floor(b/60%6),j=b/60-i,b=a*(1-d),k=a*(1-j*d),d=a*(1-(1-j)*d);switch(i){case 0:e=a;g=d;h=b;break;case 1:e=k;g=a;h=b;break;case 2:e=b;g=a;h=d;break;case 3:e=b;g=k;h=a;break;case 4:e=d;g=b;h=a;break;case 5:e=a;g=b;h=k}a=this.real2dec;return[a(e),a(g),a(h)]},rgb2hsv:function(b, -d,a){if(c(b))return this.rgb2hsv.apply(this,b);var b=b/255,d=d/255,a=a/255,e,g=Math.min(Math.min(b,d),a),h=Math.max(Math.max(b,d),a),i=h-g;switch(h){case g:e=0;break;case b:e=60*(d-a)/i;d<a&&(e=e+360);break;case d:e=60*(a-b)/i+120;break;case a:e=60*(b-d)/i+240}return[Math.round(e),h===0?0:1-g/h,h]},rgb2hex:function(b,d,a){if(c(b))return this.rgb2hex.apply(this,b);var e=this.dec2hex;return e(b)+e(d)+e(a)},dec2hex:function(b){b=parseInt(b,10)|0;return("0"+(b>255||b<0?0:b).toString(16)).slice(-2).toUpperCase()}, -hex2dec:function(b){return parseInt(b,16)},hex2rgb:function(b){var c=this.hex2dec;return[c(b.slice(0,2)),c(b.slice(2,4)),c(b.slice(4,6))]},websafe:function(b,d,a){if(c(b))return this.websafe.apply(this,b);var f=function(a){if(e(a)){var a=Math.min(Math.max(0,a),255),b,c;for(b=0;b<256;b=b+51){c=b+51;if(a>=b&&a<=c)return a-b>25?c:b}}return a};return[f(b),f(d),f(a)]}}}(); -(function(){function c(a,b){e=e+1;b=b||{};if(arguments.length===1&&!YAHOO.lang.isString(a)&&!a.nodeName){b=a;a=b.element||null}!a&&!b.element&&(a=this._createHostElement(b));c.superclass.constructor.call(this,a,b);this.initPicker()}var e=0,b=YAHOO.util,d=YAHOO.lang,a=YAHOO.widget.Slider,f=b.Color,g=b.Dom,h=b.Event,i=d.substitute;YAHOO.extend(c,YAHOO.util.Element,{ID:{R:"yui-picker-r",R_HEX:"yui-picker-rhex",G:"yui-picker-g",G_HEX:"yui-picker-ghex",B:"yui-picker-b",B_HEX:"yui-picker-bhex",H:"yui-picker-h", -S:"yui-picker-s",V:"yui-picker-v",PICKER_BG:"yui-picker-bg",PICKER_THUMB:"yui-picker-thumb",HUE_BG:"yui-picker-hue-bg",HUE_THUMB:"yui-picker-hue-thumb",HEX:"yui-picker-hex",SWATCH:"yui-picker-swatch",WEBSAFE_SWATCH:"yui-picker-websafe-swatch",CONTROLS:"yui-picker-controls",RGB_CONTROLS:"yui-picker-rgb-controls",HSV_CONTROLS:"yui-picker-hsv-controls",HEX_CONTROLS:"yui-picker-hex-controls",HEX_SUMMARY:"yui-picker-hex-summary",CONTROLS_LABEL:"yui-picker-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered", -SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"°",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv", -RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var a=document.createElement("div");if(this.CSS.BASE)a.className=this.CSS.BASE;return a},_updateHueSlider:function(){var a= -this.get(this.OPT.PICKER_SIZE),b=this.get(this.OPT.HUE),b=a-Math.round(b/360*a);b===a&&(b=0);this.hueSlider.setValue(b,this.skipAnim)},_updatePickerSlider:function(){var a=this.get(this.OPT.PICKER_SIZE),b=this.get(this.OPT.SATURATION),c=this.get(this.OPT.VALUE),b=Math.round(b*a/100),c=Math.round(a-c*a/100);this.pickerSlider.setRegionValue(b,c,this.skipAnim)},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider()},setValue:function(a,b){this.set(this.OPT.RGB,a,b||false);this._updateSliders()}, -hueSlider:null,pickerSlider:null,_getH:function(){var a=this.get(this.OPT.PICKER_SIZE),a=(a-this.hueSlider.getValue())/a,a=Math.round(a*360);return a===360?0:a},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE)},_getV:function(){var a=this.get(this.OPT.PICKER_SIZE);return(a-this.pickerSlider.getYValue())/a},_updateSwatch:function(){var a=this.get(this.OPT.RGB),b=this.get(this.OPT.WEBSAFE),c=this.getElement(this.ID.SWATCH),a=a.join(","),d=this.get(this.OPT.TXT);g.setStyle(c, -"background-color","rgb("+a+")");c.title=i(d.CURRENT_COLOR,{rgb:"#"+this.get(this.OPT.HEX)});c=this.getElement(this.ID.WEBSAFE_SWATCH);a=b.join(",");g.setStyle(c,"background-color","rgb("+a+")");c.title=i(d.CLOSEST_WEBSAFE,{rgb:"#"+f.rgb2hex(b)})},_getValuesFromSliders:function(){this.set(this.OPT.RGB,f.hsv2rgb(this._getH(),this._getS(),this._getV()))},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION); -this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=f.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=f.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=f.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX)}, -_onHueSliderChange:function(){var b=this._getH(),c="rgb("+f.hsv2rgb(b,1,1).join(",")+")";this.set(this.OPT.HUE,b,true);g.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",c);this.hueSlider.valueChangeSource!==a.SOURCE_SET_VALUE&&this._getValuesFromSliders();this._updateFormFields();this._updateSwatch()},_onPickerSliderChange:function(){var b=this._getS(),c=this._getV();this.set(this.OPT.SATURATION,Math.round(b*100),true);this.set(this.OPT.VALUE,Math.round(c*100),true);this.pickerSlider.valueChangeSource!== -a.SOURCE_SET_VALUE&&this._getValuesFromSliders();this._updateFormFields();this._updateSwatch()},_getCommand:function(a){var b=h.getCharCode(a);return b===38?3:b===13?6:b===40?4:b>=48&&b<=57?1:b>=97&&b<=102?2:b>=65&&b<=70?2:"8, 9, 13, 27, 37, 39".indexOf(b)>-1||a.ctrlKey||a.metaKey?5:0},_useFieldValue:function(a,b,c){a=b.value;c!==this.OPT.HEX&&(a=parseInt(a,10));a!==this.get(c)&&this.set(c,a)},_rgbFieldKeypress:function(a,b,c){var d=this._getCommand(a),e=a.shiftKey?10:1;switch(d){case 6:this._useFieldValue.apply(this, -arguments);break;case 3:this.set(c,Math.min(this.get(c)+e,255));this._updateFormFields();break;case 4:this.set(c,Math.max(this.get(c)-e,0));this._updateFormFields()}},_hexFieldKeypress:function(a,b,c){this._getCommand(a)===6&&this._useFieldValue.apply(this,arguments)},_hexOnly:function(a,b){switch(this._getCommand(a)){case 6:case 5:case 1:break;case 2:if(b!==true)break;default:h.stopEvent(a);return false}},_numbersOnly:function(a){return this._hexOnly(a,true)},getElement:function(a){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[a]]}, -_createElements:function(){var a,b,c,e,f=this.get(this.OPT.IDS),g=this.get(this.OPT.TXT),h=this.get(this.OPT.IMAGES),i=function(a,b){var c=document.createElement(a);b&&d.augmentObject(c,b,true);return c},q=function(a,b){var c=d.merge({autocomplete:"off",value:"0",size:3,maxlength:3},b);c.name=c.id;return new i(a,c)};e=this.get("element");a=new i("div",{id:f[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});b=new i("div",{id:f[this.ID.PICKER_THUMB],className:"yui-picker-thumb"}); -c=new i("img",{src:h.PICKER_THUMB});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});b=new i("div",{id:f[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});c=new i("img",{src:h.HUE_THUMB});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.CONTROLS],className:"yui-picker-controls"});e.appendChild(a);e=a;a=new i("div",{className:"hd"});b=new i("a",{id:f[this.ID.CONTROLS_LABEL], -href:"#"});a.appendChild(b);e.appendChild(a);a=new i("div",{className:"bd"});e.appendChild(a);e=a;a=new i("ul",{id:f[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});b=new i("li");b.appendChild(document.createTextNode(g.R+" "));c=new q("input",{id:f[this.ID.R],className:"yui-picker-r"});b.appendChild(c);a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.G+" "));c=new q("input",{id:f[this.ID.G],className:"yui-picker-g"});b.appendChild(c);a.appendChild(b);b=new i("li"); -b.appendChild(document.createTextNode(g.B+" "));c=new q("input",{id:f[this.ID.B],className:"yui-picker-b"});b.appendChild(c);a.appendChild(b);e.appendChild(a);a=new i("ul",{id:f[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});b=new i("li");b.appendChild(document.createTextNode(g.H+" "));c=new q("input",{id:f[this.ID.H],className:"yui-picker-h"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.DEG));a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.S+" ")); -c=new q("input",{id:f[this.ID.S],className:"yui-picker-s"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.PERCENT));a.appendChild(b);b=new i("li");b.appendChild(document.createTextNode(g.V+" "));c=new q("input",{id:f[this.ID.V],className:"yui-picker-v"});b.appendChild(c);b.appendChild(document.createTextNode(" "+g.PERCENT));a.appendChild(b);e.appendChild(a);a=new i("ul",{id:f[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});b=new i("li",{id:f[this.ID.R_HEX]});a.appendChild(b); -b=new i("li",{id:f[this.ID.G_HEX]});a.appendChild(b);b=new i("li",{id:f[this.ID.B_HEX]});a.appendChild(b);e.appendChild(a);a=new i("div",{id:f[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});a.appendChild(document.createTextNode(g.HEX+" "));b=new q("input",{id:f[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});a.appendChild(b);e.appendChild(a);e=this.get("element");a=new i("div",{id:f[this.ID.SWATCH],className:"yui-picker-swatch"});e.appendChild(a);a=new i("div",{id:f[this.ID.WEBSAFE_SWATCH], -className:"yui-picker-websafe-swatch"});e.appendChild(a)},_attachRGBHSV:function(a,b){h.on(this.getElement(a),"keydown",function(a,c){c._rgbFieldKeypress(a,this,b)},this);h.on(this.getElement(a),"keypress",this._numbersOnly,this,true);h.on(this.getElement(a),"blur",function(a,c){c._useFieldValue(a,this,b)},this)},_updateRGB:function(){this.set(this.OPT.RGB,[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)]);this._updateSliders()},_initElements:function(){var a=this.OPT,b=this.get(a.IDS), -a=this.get(a.ELEMENTS),c,e,f;for(c in this.ID)d.hasOwnProperty(this.ID,c)&&(b[this.ID[c]]=b[c]);(e=g.get(b[this.ID.PICKER_BG]))||this._createElements();for(c in b)if(d.hasOwnProperty(b,c)){e=g.get(b[c]);f=g.generateId(e);b[c]=f;b[b[c]]=f;a[f]=e}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true)},_initSliders:function(){var b=this.ID,c=this.get(this.OPT.PICKER_SIZE);this.hueSlider=a.getVertSlider(this.getElement(b.HUE_BG),this.getElement(b.HUE_THUMB),0,c);this.pickerSlider= -a.getSliderRegion(this.getElement(b.PICKER_BG),this.getElement(b.PICKER_THUMB),0,c,0,c);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE))},_bindUI:function(){var a=this.ID,b=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);h.on(this.getElement(a.WEBSAFE_SWATCH),"click",function(){this.setValue(this.get(b.WEBSAFE))},this,true);h.on(this.getElement(a.CONTROLS_LABEL),"click",function(a){this.set(b.SHOW_CONTROLS, -!this.get(b.SHOW_CONTROLS));h.preventDefault(a)},this,true);this._attachRGBHSV(a.R,b.RED);this._attachRGBHSV(a.G,b.GREEN);this._attachRGBHSV(a.B,b.BLUE);this._attachRGBHSV(a.H,b.HUE);this._attachRGBHSV(a.S,b.SATURATION);this._attachRGBHSV(a.V,b.VALUE);h.on(this.getElement(a.HEX),"keydown",function(a,c){c._hexFieldKeypress(a,this,b.HEX)},this);h.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);h.on(this.getElement(this.ID.HEX),"blur",function(a,c){c._useFieldValue(a,this,b.HEX)}, -this)},syncUI:function(a){this.skipAnim=a;this._updateRGB();this.skipAnim=false},_updateRGBFromHSV:function(){var a=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100];this.set(this.OPT.RGB,f.hsv2rgb(a));this._updateSliders()},_updateHex:function(){var a=this.get(this.OPT.HEX),b=a.length,c;if(b===3){a=a.split("");for(c=0;c<b;c=c+1)a[c]=a[c]+a[c];a=a.join("")}if(a.length!==6)return false;this.setValue(f.hex2rgb(a))},_hideShowEl:function(a,b){var c=d.isString(a)? -this.getElement(a):a;g.setStyle(c,"display",b?"":"none")},initAttributes:function(a){a=a||{};c.superclass.initAttributes.call(this,a);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:a.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:a.hue||0,validator:d.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:a.saturation||0,validator:d.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:d.isNumber(a.value)?a.value:100,validator:d.isNumber});this.setAttributeConfig(this.OPT.RED, -{value:d.isNumber(a.red)?a.red:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:d.isNumber(a.green)?a.green:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:d.isNumber(a.blue)?a.blue:255,validator:d.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:a.hex||"FFFFFF",validator:d.isString});this.setAttributeConfig(this.OPT.RGB,{value:a.rgb||[255,255,255],method:function(a){this.set(this.OPT.RED,a[0],true);this.set(this.OPT.GREEN,a[1],true);this.set(this.OPT.BLUE, -a[2],true);var b=f.websafe(a),c=f.rgb2hex(a),a=f.rgb2hsv(a);this.set(this.OPT.WEBSAFE,b,true);this.set(this.OPT.HEX,c,true);a[1]&&this.set(this.OPT.HUE,a[0],true);this.set(this.OPT.SATURATION,Math.round(a[1]*100),true);this.set(this.OPT.VALUE,Math.round(a[2]*100),true)},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(a){a&&a.showEvent.subscribe(function(){this.pickerSlider.focus()},this,true)}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:a.websafe||[255, -255,255]});var b=a.ids||d.merge({},this.ID),h;if(!a.ids&&e>1)for(h in b)d.hasOwnProperty(b,h)&&(b[h]=b[h]+e);this.setAttributeConfig(this.OPT.IDS,{value:b,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:a.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:a.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:d.isBoolean(a.showcontrols)?a.showcontrols:true, -method:function(a){this._hideShowEl(g.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0],a);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=a?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:d.isBoolean(a.showrgbcontrols)?a.showrgbcontrols:true,method:function(a){this._hideShowEl(this.ID.RGB_CONTROLS,a)}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:d.isBoolean(a.showhsvcontrols)? -a.showhsvcontrols:false,method:function(a){this._hideShowEl(this.ID.HSV_CONTROLS,a);a&&this.get(this.OPT.SHOW_HEX_SUMMARY)&&this.set(this.OPT.SHOW_HEX_SUMMARY,false)}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:d.isBoolean(a.showhexcontrols)?a.showhexcontrols:false,method:function(a){this._hideShowEl(this.ID.HEX_CONTROLS,a)}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:d.isBoolean(a.showwebsafe)?a.showwebsafe:true,method:function(a){this._hideShowEl(this.ID.WEBSAFE_SWATCH, -a)}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:d.isBoolean(a.showhexsummary)?a.showhexsummary:true,method:function(a){this._hideShowEl(this.ID.HEX_SUMMARY,a);a&&this.get(this.OPT.SHOW_HSV_CONTROLS)&&this.set(this.OPT.SHOW_HSV_CONTROLS,false)}});this.setAttributeConfig(this.OPT.ANIMATE,{value:d.isBoolean(a.animate)?a.animate:true,method:function(a){if(this.pickerSlider){this.pickerSlider.animate=a;this.hueSlider.animate=a}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this, -true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements()}});YAHOO.widget.ColorPicker=c})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"}); -(function(){var c=YAHOO.util,e=function(b,c,a,e){this.init(b,c,a,e)};e.NAME="Anim";e.prototype={toString:function(){var b=this.getEl()||{};return this.constructor.NAME+": "+(b.id||b.tagName)},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(b,c,a){return this.method(this.currentFrame,c,a-c,this.totalFrames)},setAttribute:function(b, -d,a){var e=this.getEl();this.patterns.noNegatives.test(b)&&(d=d>0?d:0);"style"in e?c.Dom.setStyle(e,b,d+a):b in e&&(e[b]=d)},getAttribute:function(b){var d=this.getEl(),a=c.Dom.getStyle(d,b);if(a!=="auto"&&!this.patterns.offsetUnit.test(a))return parseFloat(a);var e=this.patterns.offsetAttribute.exec(b)||[],g=!!e[3],h=!!e[2];"style"in d?a=h||c.Dom.getStyle(d,"position")=="absolute"&&g?d["offset"+e[0].charAt(0).toUpperCase()+e[0].substr(1)]:0:b in d&&(a=d[b]);return a},getDefaultUnit:function(b){return this.patterns.defaultUnit.test(b)? -"px":""},setRuntimeAttribute:function(b){var c,a,e=this.attributes;this.runtimeAttributes[b]={};var g=function(a){return typeof a!=="undefined"};if(!g(e[b].to)&&!g(e[b].by))return false;c=g(e[b].from)?e[b].from:this.getAttribute(b);if(g(e[b].to))a=e[b].to;else if(g(e[b].by))if(c.constructor==Array){a=[];for(var h=0,i=c.length;h<i;++h)a[h]=c[h]+e[b].by[h]*1}else a=c+e[b].by*1;this.runtimeAttributes[b].start=c;this.runtimeAttributes[b].end=a;this.runtimeAttributes[b].unit=g(e[b].unit)?e[b].unit:this.getDefaultUnit(b); -return true},init:function(b,d,a,e){var g=false,h=null,i=0,b=c.Dom.get(b);this.attributes=d||{};this.duration=!YAHOO.lang.isUndefined(a)?a:1;this.method=e||c.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=c.AnimMgr.fps;this.setEl=function(a){b=c.Dom.get(a)};this.getEl=function(){return b};this.isAnimated=function(){return g};this.getStartTime=function(){return h};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated())return false;this.currentFrame=0;this.totalFrames= -this.useSeconds?Math.ceil(c.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds)this.totalFrames=1;c.AnimMgr.registerElement(this);return true};this.stop=function(a){if(!this.isAnimated())return false;if(a){this.currentFrame=this.totalFrames;this._onTween.fire()}c.AnimMgr.stop(this)};this._onStart=new c.CustomEvent("_start",this,true);this.onStart=new c.CustomEvent("start",this);this.onTween=new c.CustomEvent("tween",this);this._onTween=new c.CustomEvent("_tween",this,true); -this.onComplete=new c.CustomEvent("complete",this);this._onComplete=new c.CustomEvent("_complete",this,true);this._onStart.subscribe(function(){this.onStart.fire();this.runtimeAttributes={};for(var a in this.attributes)this.setRuntimeAttribute(a);g=true;i=0;h=new Date});this._onTween.subscribe(function(){var a={duration:new Date-this.getStartTime(),currentFrame:this.currentFrame,toString:function(){return"duration: "+a.duration+", currentFrame: "+a.currentFrame}};this.onTween.fire(a);var b=this.runtimeAttributes, -c;for(c in b)this.setAttribute(c,this.doMethod(c,b[c].start,b[c].end),b[c].unit);i=i+1});this._onComplete.subscribe(function(){var a=(new Date-h)/1E3,b={duration:a,frames:i,fps:i/a,toString:function(){return"duration: "+b.duration+", frames: "+b.frames+", fps: "+b.fps}};g=false;i=0;this.onComplete.fire(b)})}};c.Anim=e})(); -YAHOO.util.AnimMgr=new function(){var c=null,e=[],b=0;this.fps=1E3;this.delay=1;this.registerElement=function(c){e[e.length]=c;b=b+1;c._onStart.fire();this.start()};this.unRegister=function(c,a){var f;if(!(f=a))a:{f=0;for(var g=e.length;f<g;++f)if(e[f]==c)break a;f=-1}a=f;if(!c.isAnimated()||a==-1)return false;c._onComplete.fire();e.splice(a,1);b=b-1;b<=0&&this.stop();return true};this.start=function(){c===null&&(c=setInterval(this.run,this.delay))};this.stop=function(d){if(d)this.unRegister(d);else{clearInterval(c); -for(var d=0,a=e.length;d<a;++d)this.unRegister(e[0],0);e=[];c=null;b=0}};this.run=function(){for(var b=0,a=e.length;b<a;++b){var c=e[b];if(c&&c.isAnimated())if(c.currentFrame<c.totalFrames||c.totalFrames===null){c.currentFrame=c.currentFrame+1;if(c.useSeconds){var g=c,h=g.totalFrames,i=g.currentFrame,j=g.currentFrame*g.duration*1E3/g.totalFrames,k=new Date-g.getStartTime(),l=0,l=k<g.duration*1E3?Math.round((k/j-1)*g.currentFrame):h-(i+1);if(l>0&&isFinite(l)){g.currentFrame+l>=h&&(l=h-(i+1));g.currentFrame= -g.currentFrame+l}}c._onTween.fire()}else YAHOO.util.AnimMgr.stop(c,b)}}};YAHOO.util.Bezier=new function(){this.getPosition=function(c,e){for(var b=c.length,d=[],a=0;a<b;++a)d[a]=[c[a][0],c[a][1]];for(var f=1;f<b;++f)for(a=0;a<b-f;++a){d[a][0]=(1-e)*d[a][0]+e*d[parseInt(a+1,10)][0];d[a][1]=(1-e)*d[a][1]+e*d[parseInt(a+1,10)][1]}return[d[0][0],d[0][1]]}}; -(function(){var c=function(a,b,d,e){c.superclass.constructor.call(this,a,b,d,e)};c.NAME="ColorAnim";c.DEFAULT_BGCOLOR="#fff";var e=YAHOO.util;YAHOO.extend(c,e.Anim);var b=c.superclass,d=c.prototype;d.patterns.color=/color$/i;d.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;d.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;d.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;d.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;d.parseColor=function(a){if(a.length== -3)return a;var b=this.patterns.hex.exec(a);if(b&&b.length==4)return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)];if((b=this.patterns.rgb.exec(a))&&b.length==4)return[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10)];return(b=this.patterns.hex3.exec(a))&&b.length==4?[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]:null};d.getAttribute=function(a){var d=this.getEl();if(this.patterns.color.test(a)){var g=YAHOO.util.Dom.getStyle(d,a),h=this;if(this.patterns.transparent.test(g))g= -(d=YAHOO.util.Dom.getAncestorBy(d,function(){return!h.patterns.transparent.test(g)}))?e.Dom.getStyle(d,a):c.DEFAULT_BGCOLOR}else g=b.getAttribute.call(this,a);return g};d.doMethod=function(a,c,d){var e;if(this.patterns.color.test(a)){e=[];for(var i=0,j=c.length;i<j;++i)e[i]=b.doMethod.call(this,a,c[i],d[i]);e="rgb("+Math.floor(e[0])+","+Math.floor(e[1])+","+Math.floor(e[2])+")"}else e=b.doMethod.call(this,a,c,d);return e};d.setRuntimeAttribute=function(a){b.setRuntimeAttribute.call(this,a);if(this.patterns.color.test(a)){var c= -this.attributes,d=this.parseColor(this.runtimeAttributes[a].start),e=this.parseColor(this.runtimeAttributes[a].end);if(typeof c[a].to==="undefined"&&typeof c[a].by!=="undefined")for(var e=this.parseColor(c[a].by),c=0,i=d.length;c<i;++c)e[c]=d[c]+e[c];this.runtimeAttributes[a].start=d;this.runtimeAttributes[a].end=e}};e.ColorAnim=c})(); -YAHOO.util.Easing={easeNone:function(c,e,b,d){return b*c/d+e},easeIn:function(c,e,b,d){return b*(c=c/d)*c+e},easeOut:function(c,e,b,d){return-b*(c=c/d)*(c-2)+e},easeBoth:function(c,e,b,d){return(c=c/(d/2))<1?b/2*c*c+e:-b/2*(--c*(c-2)-1)+e},easeInStrong:function(c,e,b,d){return b*(c=c/d)*c*c*c+e},easeOutStrong:function(c,e,b,d){return-b*((c=c/d-1)*c*c*c-1)+e},easeBothStrong:function(c,e,b,d){return(c=c/(d/2))<1?b/2*c*c*c*c+e:-b/2*((c=c-2)*c*c*c-2)+e},elasticIn:function(c,e,b,d,a,f){if(c==0)return e; -if((c=c/d)==1)return e+b;f||(f=d*0.3);if(!a||a<Math.abs(b)){a=b;b=f/4}else b=f/(2*Math.PI)*Math.asin(b/a);return-(a*Math.pow(2,10*(c=c-1))*Math.sin((c*d-b)*2*Math.PI/f))+e},elasticOut:function(c,e,b,d,a,f){if(c==0)return e;if((c=c/d)==1)return e+b;f||(f=d*0.3);if(!a||a<Math.abs(b))var a=b,g=f/4;else g=f/(2*Math.PI)*Math.asin(b/a);return a*Math.pow(2,-10*c)*Math.sin((c*d-g)*2*Math.PI/f)+b+e},elasticBoth:function(c,e,b,d,a,f){if(c==0)return e;if((c=c/(d/2))==2)return e+b;f||(f=d*0.3*1.5);if(!a||a<Math.abs(b))var a= -b,g=f/4;else g=f/(2*Math.PI)*Math.asin(b/a);return c<1?-0.5*a*Math.pow(2,10*(c=c-1))*Math.sin((c*d-g)*2*Math.PI/f)+e:a*Math.pow(2,-10*(c=c-1))*Math.sin((c*d-g)*2*Math.PI/f)*0.5+b+e},backIn:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return b*(c=c/d)*c*((a+1)*c-a)+e},backOut:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return b*((c=c/d-1)*c*((a+1)*c+a)+1)+e},backBoth:function(c,e,b,d,a){typeof a=="undefined"&&(a=1.70158);return(c=c/(d/2))<1?b/2*c*c*(((a=a*1.525)+1)*c-a)+e:b/2* -((c=c-2)*c*(((a=a*1.525)+1)*c+a)+2)+e},bounceIn:function(c,e,b,d){return b-YAHOO.util.Easing.bounceOut(d-c,0,b,d)+e},bounceOut:function(c,e,b,d){return(c=c/d)<1/2.75?b*7.5625*c*c+e:c<2/2.75?b*(7.5625*(c=c-1.5/2.75)*c+0.75)+e:c<2.5/2.75?b*(7.5625*(c=c-2.25/2.75)*c+0.9375)+e:b*(7.5625*(c=c-2.625/2.75)*c+0.984375)+e},bounceBoth:function(c,e,b,d){return c<d/2?YAHOO.util.Easing.bounceIn(c*2,0,b,d)*0.5+e:YAHOO.util.Easing.bounceOut(c*2-d,0,b,d)*0.5+b*0.5+e}}; -(function(){var c=function(a,b,d,e){a&&c.superclass.constructor.call(this,a,b,d,e)};c.NAME="Motion";var e=YAHOO.util;YAHOO.extend(c,e.ColorAnim);var b=c.superclass,d=c.prototype;d.patterns.points=/^points$/i;d.setAttribute=function(a,c,d){if(this.patterns.points.test(a)){d=d||"px";b.setAttribute.call(this,"left",c[0],d);b.setAttribute.call(this,"top",c[1],d)}else b.setAttribute.call(this,a,c,d)};d.getAttribute=function(a){return this.patterns.points.test(a)?[b.getAttribute.call(this,"left"),b.getAttribute.call(this, -"top")]:b.getAttribute.call(this,a)};d.doMethod=function(a,c,d){var f=null;if(this.patterns.points.test(a)){c=this.method(this.currentFrame,0,100,this.totalFrames)/100;f=e.Bezier.getPosition(this.runtimeAttributes[a],c)}else f=b.doMethod.call(this,a,c,d);return f};d.setRuntimeAttribute=function(c){if(this.patterns.points.test(c)){var d=this.getEl(),i=this.attributes,j=i.points.control||[],k,l,m;if(j.length>0&&!(j[0]instanceof Array))j=[j];else{var n=[];l=0;for(m=j.length;l<m;++l)n[l]=j[l];j=n}e.Dom.getStyle(d, -"position")=="static"&&e.Dom.setStyle(d,"position","relative");f(i.points.from)?e.Dom.setXY(d,i.points.from):e.Dom.setXY(d,e.Dom.getXY(d));d=this.getAttribute("points");if(f(i.points.to)){k=a.call(this,i.points.to,d);e.Dom.getXY(this.getEl());l=0;for(m=j.length;l<m;++l)j[l]=a.call(this,j[l],d)}else if(f(i.points.by)){k=[d[0]+i.points.by[0],d[1]+i.points.by[1]];l=0;for(m=j.length;l<m;++l)j[l]=[d[0]+j[l][0],d[1]+j[l][1]]}this.runtimeAttributes[c]=[d];j.length>0&&(this.runtimeAttributes[c]=this.runtimeAttributes[c].concat(j)); -this.runtimeAttributes[c][this.runtimeAttributes[c].length]=k}else b.setRuntimeAttribute.call(this,c)};var a=function(a,b){var c=e.Dom.getXY(this.getEl());return a=[a[0]-c[0]+b[0],a[1]-c[1]+b[1]]},f=function(a){return typeof a!=="undefined"};e.Motion=c})(); -(function(){var c=function(a,b,d,e){a&&c.superclass.constructor.call(this,a,b,d,e)};c.NAME="Scroll";var e=YAHOO.util;YAHOO.extend(c,e.ColorAnim);var b=c.superclass,d=c.prototype;d.doMethod=function(a,c,d){var e=null;return e=a=="scroll"?[this.method(this.currentFrame,c[0],d[0]-c[0],this.totalFrames),this.method(this.currentFrame,c[1],d[1]-c[1],this.totalFrames)]:b.doMethod.call(this,a,c,d)};d.getAttribute=function(a){var c=null,c=this.getEl();return c=a=="scroll"?[c.scrollLeft,c.scrollTop]:b.getAttribute.call(this, -a)};d.setAttribute=function(a,c,d){var e=this.getEl();if(a=="scroll"){e.scrollLeft=c[0];e.scrollTop=c[1]}else b.setAttribute.call(this,a,c,d)};e.Scroll=c})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/images/handle.png b/platforms/browser/www/lib/ckeditor/plugins/widget/images/handle.png deleted file mode 100644 index ba8cda5b30650babdd9e9b439bf92dd78e7e3425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^{2<K23?xtf=%@rzS^+*GuK)l4S5Z+>Q&R(y%F4>B zs;Uq!kbwq_7Top+>f$X4@(X6LuyOG4sc+bE;L!1t|K@(+14@K=x;Tb#Tu;8Rb9cks z#J94nZHsw$wz2W7VVBS|FgP>!0K<|7o;WsvWX2Z8B?>%jY}0rZj)}3g-PxTm;lP0# v3__VH4l5d8H_c`?|H*MfZyGa?!EHvRt#Zd+?pApQG@rrK)z4*}Q$iB}(WFB8 diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ar.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ar.js deleted file mode 100644 index 02901ca4..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ar",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ca.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ca.js deleted file mode 100644 index bcee2d0a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ca",{move:"Clicar i arrossegar per moure"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cs.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cs.js deleted file mode 100644 index 2f2ab938..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","cs",{move:"Klepněte a táhněte pro přesunutí"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cy.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cy.js deleted file mode 100644 index 19bc34b0..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","cy",{move:"Clcio a llusgo i symud"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/de.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/de.js deleted file mode 100644 index 0de3212c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","de",{move:"Zum verschieben anwählen und ziehen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/el.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/el.js deleted file mode 100644 index 9200420f..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","el",{move:"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en-gb.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en-gb.js deleted file mode 100644 index af267ba8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","en-gb",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en.js deleted file mode 100644 index 5b1d70a7..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/en.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","en",{move:"Click and drag to move"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/eo.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/eo.js deleted file mode 100644 index eb556143..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","eo",{move:"klaki kaj treni por movi"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/es.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/es.js deleted file mode 100644 index d59696db..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/es.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","es",{move:"Dar clic y arrastrar para mover"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fa.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fa.js deleted file mode 100644 index cd7b4e08..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fa",{move:"کلیک و کشیدن برای جابجایی"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fi.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fi.js deleted file mode 100644 index cd2fccef..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fi",{move:"Siirrä klikkaamalla ja raahaamalla"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fr.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fr.js deleted file mode 100644 index 4a07790c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","fr",{move:"Cliquer et glisser pour déplacer"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/gl.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/gl.js deleted file mode 100644 index 4213bd7a..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","gl",{move:"Prema e arrastre para mover"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/he.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/he.js deleted file mode 100644 index aa9754ae..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","he",{move:"לחץ וגרור להזזה"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hr.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hr.js deleted file mode 100644 index c58da39d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","hr",{move:"Klikni i povuci da pomakneš"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hu.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hu.js deleted file mode 100644 index 03305f3b..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","hu",{move:"Kattints és húzd a mozgatáshoz"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/it.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/it.js deleted file mode 100644 index d1a714e3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","it",{move:"Fare clic e trascinare per spostare"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ja.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ja.js deleted file mode 100644 index 33cdb9ef..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ja",{move:"ドラッグして移動"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/km.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/km.js deleted file mode 100644 index bc46a96e..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","km",{move:"ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ko.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ko.js deleted file mode 100644 index 4bf733aa..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ko",{move:"움직이려면 클릭 후 드래그 하세요"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nb.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nb.js deleted file mode 100644 index b5bfd46d..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","nb",{move:"Klikk og dra for å flytte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nl.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nl.js deleted file mode 100644 index a5bfea95..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/nl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","nl",{move:"Klik en sleep om te verplaatsen"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/no.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/no.js deleted file mode 100644 index 92db9080..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/no.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","no",{move:"Klikk og dra for å flytte"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pl.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pl.js deleted file mode 100644 index a51890f2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pl",{move:"Kliknij i przeciągnij, by przenieść."}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt-br.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt-br.js deleted file mode 100644 index e6387da3..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt-br.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pt-br",{move:"Click e arraste para mover"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt.js deleted file mode 100644 index 0a7f1171..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","pt",{move:"Clique e arraste para mover"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ru.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ru.js deleted file mode 100644 index e3d4e3e6..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/ru.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","ru",{move:"Нажмите и перетащите"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sk.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sk.js deleted file mode 100644 index d26dab0c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sk",{move:"Kliknite a potiahnite pre presunutie"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sl.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sl.js deleted file mode 100644 index f99d4e74..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sl",{move:"Kliknite in povlecite, da premaknete"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sv.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sv.js deleted file mode 100644 index 33f6f126..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","sv",{move:"Klicka och drag för att flytta"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tr.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tr.js deleted file mode 100644 index 5f2ca8f1..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","tr",{move:"Taşımak için, tıklayın ve sürükleyin"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tt.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tt.js deleted file mode 100644 index 1b158207..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/tt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","tt",{move:"Күчереп куер өчен басып шудырыгыз"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/uk.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/uk.js deleted file mode 100644 index a07313c8..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/uk.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","uk",{move:"Клікніть і потягніть для переміщення"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/vi.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/vi.js deleted file mode 100644 index 785a5323..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/vi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","vi",{move:"Nhấp chuột và kéo để di chuyển"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh-cn.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh-cn.js deleted file mode 100644 index 690512a2..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh-cn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","zh-cn",{move:"点击并拖拽以移动"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh.js b/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh.js deleted file mode 100644 index e683c06c..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/lang/zh.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.plugins.setLang("widget","zh",{move:"拖曳以移動"}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/widget/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/widget/plugin.js deleted file mode 100644 index a9cc00fb..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/widget/plugin.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){function o(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};I(this);J(this);this.on("checkWidgets",K);this.editor.on("contentDomInvalidated",this.checkWidgets,this);L(this);M(this);N(this);O(this);P(this)}function k(a,b,c,d,e){var f=a.editor;CKEDITOR.tools.extend(this,d,{editor:f,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({}, -"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:k.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);Q(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes", -this.getClasses());this.dataReady=!0;s(this);this.fire("data",this.data);this.isInited()&&f.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function q(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function R(a,b){a.addCommand(b.name, -{exec:function(){function c(){a.widgets.finalizeCreation(g)}var d=a.widgets.focused;if(d&&d.name==b.name)d.edit();else if(b.insert)b.insert();else if(b.template){var d="function"==typeof b.defaults?b.defaults():b.defaults,d=CKEDITOR.dom.element.createFromHtml(b.template.output(d)),e,f=a.widgets.wrapElement(d,b.name),g=new CKEDITOR.dom.documentFragment(f.getDocument());g.append(f);(e=a.widgets.initOn(d,b))?(d=e.once("edit",function(b){if(b.data.dialog)e.once("dialog",function(b){var b=b.data,d,f;d= -b.once("ok",c,null,null,20);f=b.once("cancel",function(){a.widgets.destroy(e,!0)});b.once("hide",function(){d.removeListener();f.removeListener()})});else c()},null,null,999),e.edit(),d.removeListener()):c()}},refresh:function(a,b){this.setState(l(a.editable(),b.blockLimit)?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF)},context:"div",allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function t(a,b){a.focused= -null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function K(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,e;if(b){for(d in c)b.contains(c[d].wrapper)||this.destroy(c[d],!0);if(a&&a.initOnlyNew)b=this.initOnAll();else{var f=b.find(".cke_widget_wrapper"),b=[];d=0;for(c=f.count();d<c;d++){e=f.getItem(d);var g;if(g=!this.getByElement(e,!0)){a:{g=S;for(var i=e;i=i.getParent();)if(g(i)){g= -!0;break a}g=!1}g=!g}g&&(e.addClass("cke_widget_new"),b.push(this.initOn(e.getFirst(p))))}}a&&(a.focusInited&&1==b.length)&&b[0].focus()}}}function u(a,b,c){if(!c.allowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});(a=d[b])||(d[b]=a=new CKEDITOR.filter(c.allowedContent));return a}function T(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,g,i,h,j;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(v))&&b.push([a]), -!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(j=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;h=0;for(f=d.length;h<f;++h)if(!1===d[h](a))return;for(h=0;h<j;++h)if(f=c[h],i={},g=f[0](a,i))return g instanceof CKEDITOR.htmlParser.element&&(a=g),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(i)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,f[1]]),!1}}}}function l(a,b){return!b||b.equals(a)?null:w(b)?b:l(a,b.getParent())}function x(a){return{tabindex:-1, -contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")}}function y(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),e=a.parent,b=d.getIndex();a.children.length||(b-=1,a.remove());d.children.length||d.remove();return y(e,b,c)}}a.add(c,b)}function v(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]}function p(a){return a.type==CKEDITOR.NODE_ELEMENT&& -a.hasAttribute("data-widget")}function z(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function r(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")}function w(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")}function S(a){return a.hasAttribute("data-cke-temp")}function U(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")}function A(a,b,c){b.focus();a.fire("saveSnapshot"); -a.fire("lockSnapshot",{dontUpdate:!0});c.select();c=b.wrapper.getOuterHtml();b.wrapper.remove();a.widgets.destroy(b,!0);a.execCommand("paste",c);a.fire("unlockSnapshot")}function n(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"), -b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function V(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function W(a,b){return CKEDITOR.tools.trim(b)}function O(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("contentDom",function(){var d=b.editable(),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version||d.isInline()?d:b.document;d.attachListener(e, -"drop",function(c){var d=c.data.$.dataTransfer.getData("text"),e,h;if(d){try{e=JSON.parse(d)}catch(j){return}if("cke-widget"==e.type&&(c.data.preventDefault(),e.editor==b.name&&(h=a.instances[e.id]))){a:if(e=c.data.$,d=b.createRange(),c.data.testRange)d=c.data.testRange;else if(document.caretRangeFromPoint)c=b.document.$.caretRangeFromPoint(e.clientX,e.clientY),d.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),d.collapse(!0);else if(e.rangeParent)d.setStart(CKEDITOR.dom.node(e.rangeParent), -e.rangeOffset),d.collapse(!0);else if(document.body.createTextRange)c=b.document.getBody().$.createTextRange(),c.moveToPoint(e.clientX,e.clientY),e="cke-temp-"+(new Date).getTime(),c.pasteHTML('<span id="'+e+'">​</span>'),c=b.document.getById(e),d.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START),c.remove();else{d=null;break a}d&&(CKEDITOR.env.gecko?setTimeout(A,0,b,h,d):A(b,h,d))}}});CKEDITOR.tools.extend(a,{finder:new c.finder(b,{lookups:{"default":function(a){if(!a.is(CKEDITOR.dtd.$listItem)&&a.is(CKEDITOR.dtd.$block)){for(;a;){if(w(a))return; -a=a.getParent()}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function M(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,e,f;c.attachListener(d,"mousedown",function(c){var b=c.data.getTarget();if(!b.type)return!1;e=a.getByElement(b);f= -0;e&&(e.inline&&b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("data-cke-widget-drag-handler")?f=1:l(e.wrapper,b)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});c.attachListener(d,"mouseup",function(){e&&f&&(f=0,e.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){e&&setTimeout(function(){e.focus();e=null})})});b.on("doubleclick",function(c){var b=a.getByElement(c.data.element);if(b&&!l(b.wrapper,c.data.element))return b.fire("doubleclick",{element:c.data.element})}, -null,null,1)}function N(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e}, -null,null,1)}function P(a){function b(c){a.focused&&B(a.focused,"cut"==c.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function L(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=l(b.editable(),c.data.selection.getStartElement()))&&a.getByElement(c),e=a.widgetHoldingFocusedEditable;if(e){if(e!==d||!e.focusedEditable.equals(c))n(a, -e,null),d&&c&&n(a,d,c)}else d&&c&&n(a,d,c)});b.on("dataReady",function(){C(a).commit()});b.on("blur",function(){var c;(c=a.focused)&&t(a,c);(c=a.widgetHoldingFocusedEditable)&&n(a,c,null)})}function J(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var e=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=e;c[e]=f;b.data.dataValue.forEach(function(c){var b=c.attributes,d;if("data-cke-widget-id"in b){if(b=a.instances[b["data-cke-widget-id"]])d=c.getFirst(v),f.push({wrapper:c,element:d, -widget:b,editables:{}}),"1"!=d.attributes["data-cke-widget-keep-attr"]&&delete d.attributes["data-widget"]}else if("data-cke-widget-editable"in b)return f[f.length-1].editables[b["data-cke-widget-editable"]]=c,!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var a=c[a.data.downcastingSessionId],b,f,g,i,h,j;b=a.shift();){f=b.widget;g=b.element;i=f._.downcastFn&&f._.downcastFn.call(f,g);for(j in b.editables)h=b.editables[j],delete h.attributes.contenteditable, -h.setHtml(f.editables[j].getData());i||(i=g);b.wrapper.replaceWith(i)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function I(a){function b(){c.fire("lockSnapshot");a.checkWidgets({initOnlyNew:!0,focusInited:d});c.fire("unlockSnapshot")}var c=a.editor,d,e;c.on("toHtml",function(c){var b=T(a),e;for(c.data.dataValue.forEach(b.iterator,CKEDITOR.NODE_ELEMENT,!0);e=b.toBeWrapped.pop();){var h=e[0],j=h.parent;j.type==CKEDITOR.NODE_ELEMENT&&j.attributes["data-cke-widget-wrapper"]&& -j.replaceWith(h);a.wrapElement(e[0],e[1])}d=1==c.data.dataValue.children.length&&c.data.dataValue.children[0].type==CKEDITOR.NODE_ELEMENT&&c.data.dataValue.children[0].attributes["data-cke-widget-wrapper"]},null,null,8);c.on("dataReady",function(){if(e)for(var b=a,d=c.editable().find(".cke_widget_wrapper"),i,h,j=0,k=d.count();j<k;++j)i=d.getItem(j),h=i.getFirst(p),h.type==CKEDITOR.NODE_ELEMENT&&h.data("widget")?(h.replace(i),b.wrapElement(h)):i.remove();e=0;a.destroyAll(!0);a.initOnAll()});c.on("loadSnapshot", -function(c){/data-cke-widget/.test(c.data)&&(e=1);a.destroyAll(!0)},null,null,9);c.on("paste",function(a){a.data.dataValue=a.data.dataValue.replace(X,W)});c.on("insertText",b,null,null,999);c.on("insertHtml",b,null,null,999)}function C(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,i;a.editor.fire("lockSnapshot"); -for(f&&(g=a.focused)&&t(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(i=g.editor.checkDirty(),g.setSelected(!1),!i&&g.editor.resetDirty());f&&e&&(i=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!i&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function D(a,b,c){var d=0,b=E(b),e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f], -d=1);d&&a.setData("classes",e)}}function F(a){a.cancel()}function B(a,b){var c=a.editor,d=c.document;if(!d.getById("cke_copybin")){var e=c.blockless||CKEDITOR.env.ie?"span":"div",f=d.createElement(e),g=d.createElement(e),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version;g.setAttributes({id:"cke_copybin","data-cke-temp":"1"});f.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});f.setStyle("ltr"==c.config.contentsLangDirection?"left":"right","-5000px");f.setHtml('<span data-cke-copybin-start="1">​</span>'+ -a.wrapper.getOuterHtml()+'<span data-cke-copybin-end="1">​</span>');c.fire("saveSnapshot");c.fire("lockSnapshot");g.append(f);c.editable().append(g);var i=c.on("selectionChange",F,null,null,0),h=a.repository.on("checkSelection",F,null,null,0);if(e)var j=d.getDocumentElement().$,k=j.scrollTop;d=c.createRange();d.selectNodeContents(f);d.select();e&&(j.scrollTop=k);setTimeout(function(){b||a.focus();g.remove();i.removeListener();h.removeListener();c.fire("unlockSnapshot");if(b){a.repository.del(a);c.fire("saveSnapshot")}}, -100)}}function E(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function G(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function H(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function Y(a){var b=null;a.on("data",function(){var a=this.data.classes,d;if(b!=a){for(d in b)(!a|| -!a[d])&&this.removeClass(d);for(d in a)this.addClass(d);b=a}})}function Z(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(U),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png)"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1", -src:CKEDITOR.tools.transparentImageData,width:m,title:b.lang.widget.move,height:m}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(a.inline)d.on("dragstart",function(c){c.data.$.dataTransfer.setData("text",JSON.stringify({type:"cke-widget",editor:b.name,id:a.id}))});else d.on("mousedown",$,a);a.dragHandlerContainer=c}}function $(){function a(){var a; -for(j.reset();a=g.pop();)a.removeListener();var c=i,b=this.repository.finder;a=this.repository.liner;var d=this.editor,e=this.editor.editable();CKEDITOR.tools.isEmpty(a.visible)||(c=b.getRange(c[0]),this.focus(),d.fire("saveSnapshot"),d.fire("lockSnapshot",{dontUpdate:1}),d.getSelection().reset(),e.insertElementIntoRange(this.wrapper,c),this.focus(),d.fire("unlockSnapshot"),d.fire("saveSnapshot"));e.removeClass("cke_widget_dragging");a.hideVisible()}var b=this.repository.finder,c=this.repository.locator, -d=this.repository.liner,e=this.editor,f=e.editable(),g=[],i=[],h=b.greedySearch(),j=CKEDITOR.tools.eventsBuffer(50,function(){k=c.locate(h);i=c.sort(l,1);i.length&&(d.prepare(h,k),d.placeLine(i[0]),d.cleanup())}),k,l;f.addClass("cke_widget_dragging");g.push(f.on("mousemove",function(a){l=a.data.$.clientY;j.input()}));g.push(e.document.once("mouseup",a,this));g.push(CKEDITOR.document.once("mouseup",a,this))}function aa(a){var b,c,d=a.editables;a.editables={};if(a.editables)for(b in d)c=d[b],a.initEditable(b, -"string"==typeof c?{selector:c}:c)}function ba(a){if(a.mask){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}}function ca(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function Q(a,b){da(a);ca(a);aa(a);ba(a);Z(a);Y(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart", -function(c){var b=c.data.getTarget();!l(a,b)&&(!a.inline||!(b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("data-cke-widget-drag-handler")))&&c.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){B(a,b==CKEDITOR.CTRL+88);return}if(b in ea||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&& -b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function da(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function s(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}var m=15;CKEDITOR.plugins.add("widget",{lang:"ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,ko,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn",requires:"lineutils,clipboard",onLoad:function(){CKEDITOR.addCss(".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover>.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused>.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:"+ -m+"px;height:0;left:-9999px;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover>.cke_widget_drag_handler_container{height:"+m+"px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:"+m+"px;height:"+m+"px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}")},beforeInit:function(a){a.widgets= -new o(a)},afterInit:function(a){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});V(a)}});o.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(a,b){b=CKEDITOR.tools.prototypedCopy(b);b.name=a;b._=b._||{};this.editor.fire("widgetDefinition",b);b.template&&(b.template=new CKEDITOR.template(b.template));R(this.editor,b);var c=b,d=c.upcast;if(d)if("string"==typeof d)for(d= -d.split(",");d.length;)this._.upcasts.push([c.upcasts[d.pop()],c.name]);else this._.upcasts.push([d,c.name]);return this.registered[a]=b},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=C(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=r;b=a.next();)c.select(this.getByElement(b)); -c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,c=b.createRange(),d;if(!(d=c.moveToClosestEditablePosition(a.wrapper,!0)))d=c.moveToClosestEditablePosition(a.wrapper,!1);d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&n(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a){var b= -this.instances,c,d;for(d in b)c=b[d],this.destroy(c,a)},finalizeCreation:function(a){if((a=a.getFirst())&&r(a))this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus()},getByElement:function(){var a={div:1,span:1};return function(b,c){if(!b)return null;var d=b.is(a)&&b.data("cke-widget-id");if(!c&&!d){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(d=b.is(a)&&b.data("cke-widget-id")))}return this.instances[d]||null}}(),initOn:function(a,b,c){b? -"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new k(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){for(var a=(a||this.editor.editable()).find(".cke_widget_new"),b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(p)))&&b.push(c);return b},parseElementClasses:function(a){if(!a)return null;for(var a= -CKEDITOR.tools.trim(a).split(/\s+/),b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,e;if(a instanceof CKEDITOR.dom.element){d=this.registered[b||a.data("widget")];if(!d)return null;if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);b&&a.data("widget",b);e=z(d,a.getName());c=new CKEDITOR.dom.element(e? -"span":"div");c.setAttributes(x(e));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){d=this.registered[b||a.attributes["data-widget"]];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&&c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]= -b);e=z(d,a.name);c=new CKEDITOR.htmlParser.element(e?"span":"div",x(e));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var f;d&&(f=a.getIndex(),a.remove());c.add(a);d&&y(d,f,c)}return c},_tests_getNestedEditable:l,_tests_createEditableFilter:u};CKEDITOR.event.implementOn(o.prototype);k.prototype={addClass:function(a){this.element.addClass(a)},applyStyle:function(a){D(this,a,1)},checkStyleActive:function(a){var a=E(a),b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1; -return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a];c.removeListener("focus",H);c.removeListener("blur", -G);this.editor.focusManager.remove(c);b||(c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable","data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var d,e;!1!==b.fire("dialog",a)&&(d=a.on("show",function(){a.setupContent(b)}),e=a.on("ok",function(){var d,e=b.on("data", -function(a){d=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);e.removeListener();d&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){d.removeListener();e.removeListener()}))});return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var c=this.wrapper.findOne(b.selector);return c&&c.is(CKEDITOR.dtd.$editable)? -(c=new q(this.editor,c,{filter:u.call(this.repository,this.name,a,b)}),this.editables[a]=c,c.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":c.enterMode}),c.filter&&c.data("cke-filter",c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name",b.pathName),this.editor.focusManager.add(c),c.on("focus",H,this),CKEDITOR.env.ie&&c.on("blur",G,this),c.setData(c.getHtml()),!0):!1},isInited:function(){return!(!this.wrapper|| -!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a)},removeStyle:function(a){D(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=e[a])}d&&this.dataReady&&(s(this),this.fire("data", -c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-m};if(!c||!(b.x==c.x&&b.y==c.y))c=a.checkDirty(),a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+ -"px",left:b.x+"px"}),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b}};CKEDITOR.event.implementOn(k.prototype);q.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(), -filter:this.filter,enterMode:this.enterMode})}});var X=RegExp('^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?</span>([\\s\\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?</span>(?:</(?:div|span)>)?(?:</(?:div|span)>)?$'),ea={37:1,38:1,39:1,40:1,8:1,46:1};(function(){function a(){}function b(a,b,e){return!e||!this.checkElement(a)?!1:(a=e.widgets.getByElement(a,!0))&&a.checkStyleActive(this)} -CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget},apply:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.applyStyle(this)},remove:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return!(b instanceof CKEDITOR.editor)?!1:this.checkElement(a.lastElement)}, -checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return!r(a)?!1:(a=a.getFirst(p))&&a.data("widget")==this.widget},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;var a=a.widgets.registered[this.widget],b,e={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;e[a.styleableElements]={classes:b,propertiesOnly:!0};return e}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this): -null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})})();CKEDITOR.plugins.widget=k;k.repository=o;k.nestedEditable=q})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/LICENSE.md b/platforms/browser/www/lib/ckeditor/plugins/wsc/LICENSE.md deleted file mode 100644 index 6096de23..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/LICENSE.md +++ /dev/null @@ -1,28 +0,0 @@ -Software License Agreement -========================== - -**CKEditor WSC Plugin** -Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* GNU General Public License Version 2 or later (the "GPL"): - http://www.gnu.org/licenses/gpl.html - -* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): - http://www.gnu.org/licenses/lgpl.html - -* Mozilla Public License Version 1.1 or later (the "MPL"): - http://www.mozilla.org/MPL/MPL-1.1.html - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. - -Sources of Intellectual Property Included in this plugin --------------------------------------------------------- - -Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html b/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html deleted file mode 100644 index 8e0a10df..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/ciframe.html +++ /dev/null @@ -1,66 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license ---> -<html> -<head> - <title></title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <script type="text/javascript"> - -function gup( name ) -{ - name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; - var regexS = '[\\?&]' + name + '=([^&#]*)' ; - var regex = new RegExp( regexS ) ; - var results = regex.exec( window.location.href ) ; - - if ( results ) - return results[ 1 ] ; - else - return '' ; -} - -var interval; - -function sendData2Master() -{ - var destination = window.parent.parent ; - try - { - if ( destination.XDTMaster ) - { - var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; - window.clearInterval( interval ) ; - } - } - catch (e) {} -} - -function OnMessage (event) { - var message = event.data; - var destination = window.parent.parent; - destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ; -} - -function listenPostMessage() { - if (window.addEventListener) { // all browsers except IE before version 9 - window.addEventListener ("message", OnMessage, false); - }else { - if (window.attachEvent) { // IE before version 9 - window.attachEvent("onmessage", OnMessage); - } - } -} - -function onLoad() -{ - interval = window.setInterval( sendData2Master, 100 ); - listenPostMessage(); -} - -</script> -</head> -<body onload="onLoad()"><p></p></body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html deleted file mode 100644 index 61203e03..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +++ /dev/null @@ -1,52 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license ---> -<html> -<head> - <title></title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <script type="text/javascript"> - -function doLoadScript( url ) -{ - if ( !url ) - return false ; - - var s = document.createElement( "script" ) ; - s.type = "text/javascript" ; - s.src = url ; - document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; - - return true ; -} - -var opener; -function tryLoad() -{ - opener = window.parent; - - // get access to global parameters - var oParams = window.opener.oldFramesetPageParams; - - // make frameset rows string prepare - var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; - document.getElementById( 'itFrameset' ).rows = sFramesetRows ; - - // dynamic including init frames and crossdomain transport code - // from config sproxy_js_frameset url - var addScriptUrl = oParams.sproxy_js_frameset ; - doLoadScript( addScriptUrl ) ; -} - - </script> -</head> - -<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> - <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> - <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> -</frameset> -</html> diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css b/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css deleted file mode 100644 index da2f1743..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.css +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ - -html, body -{ - background-color: transparent; - margin: 0px; - padding: 0px; -} - -body -{ - padding: 10px; -} - -body, td, input, select, textarea -{ - font-size: 11px; - font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; -} - -.midtext -{ - padding:0px; - margin:10px; -} - -.midtext p -{ - padding:0px; - margin:10px; -} - -.Button -{ - border: #737357 1px solid; - color: #3b3b1f; - background-color: #c7c78f; -} - -.PopupTabArea -{ - color: #737357; - background-color: #e3e3c7; -} - -.PopupTitleBorder -{ - border-bottom: #d5d59d 1px solid; -} -.PopupTabEmptyArea -{ - padding-left: 10px; - border-bottom: #d5d59d 1px solid; -} - -.PopupTab, .PopupTabSelected -{ - border-right: #d5d59d 1px solid; - border-top: #d5d59d 1px solid; - border-left: #d5d59d 1px solid; - padding: 3px 5px 3px 5px; - color: #737357; -} - -.PopupTab -{ - margin-top: 1px; - border-bottom: #d5d59d 1px solid; - cursor: pointer; -} - -.PopupTabSelected -{ - font-weight: bold; - cursor: default; - padding-top: 4px; - border-bottom: #f1f1e3 1px solid; - background-color: #f1f1e3; -} diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js b/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js deleted file mode 100644 index 443145c9..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; -if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"== -b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}, -misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(), -a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null, -text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()|| -b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"<iframe id="+a.iframeNumber+"_"+b+' frameborder="0" allowtransparency="1" style="width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"></iframe>'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d); -d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('<!DOCTYPE html><html><head><meta charset="UTF-8"><title>iframe</title><style>html,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}</style></head><body><div id="content" class="main-box"></div><iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe><script>(function(window) {var ManagerPostMessage = function() {var _init = function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd = function(o) {var str,type = Object.prototype.toString,fn = o.fn || null,id = o.id || "",target = o.target || window,message = o.message || { "id": id };if (o.message && type.call(o.message) == "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] = id;message = o.message;};str = JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp = new ManagerPostMessage;var appString = (function(){var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag = document.createElement("script");scriptTag.type = "text/javascript";callback ? callback : callback = function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange = function() {if (scriptTag.readyState == "loaded" ||scriptTag.readyState == "complete") {scriptTag.onreadystatechange = null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload = function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src = src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload = function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);<\/script></body></html>'); -d.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height= -"240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,f,g;a.setIframe(d,c);var e=function(e){e=e||window.event;e.data.getTarget().is("a")&&c!=b._.currentTabId&&(c=b._.currentTabId,d=b._.contents[c].Content,f=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?u(a.targetFromFrame[f],a.cmd[c]):(a.setIframe(d,c),g=document.getElementById(f),a.targetFromFrame[f]=g.contentWindow))};b.parts.tabs.removeListener("click",e);b.parts.tabs.on("click",e)};a.buildSelectLang= -function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select"),a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang=function(b,c){var d=document.getElementById("wscLang"+c),f=document.createDocumentFragment(), -g,e,i=[];if(0===d.options.length){for(g in b)i.push([g,b[g]]);i.sort();for(var k=0;k<i.length;k++)g=document.createElement("option"),g.setAttribute("value",i[k][1]),e=document.createTextNode(i[k][0]),g.appendChild(e),i[k][1]==a.selectingLang&&g.setAttribute("selected","selected"),f.appendChild(g);d.appendChild(f)}};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];a.selectNode.synonyms.clear();for(var c=0;c<b.length;c++)a.selectNode.synonyms.add(b[c],b[c]);a.selectNode.synonyms.getInputElement().$.firstChild.selected= -!0;a.textNode.Thesaurus.setValue(a.selectNode.synonyms.getInputElement().getValue())};var r=function(a){var c=document,d=a.target||c.body,f=a.id||"overlayBlock",e=a.opacity||"0.9",a=a.background||"#f1f1f1",h=c.getElementById(f),i=h||c.createElement("div");i.style.cssText="position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:"+a+";opacity: "+e+";filter: alpha(opacity="+100*e+");display: none;";i.id=f;h||d.appendChild(i);return{setDisable:function(){i.style.display= -"none"},setEnable:function(){i.style.display="block"}}},B=function(b,c,d){var f=new CKEDITOR.dom.element("div"),e=new CKEDITOR.dom.element("input"),h=new CKEDITOR.dom.element("label"),i="wscGrammerSuggest"+b+"_"+c;f.addClass("cke_dialog_ui_input_radio");f.setAttribute("role","presentation");f.setStyles({width:"97%",padding:"5px","white-space":"normal"});e.setAttributes({type:"radio",value:c,name:"wscGrammerSuggest",id:i});e.setStyles({"float":"left"});e.on("click",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())}); -d&&e.setAttribute("checked",!0);e.addClass("cke_dialog_ui_radio_input");h.appendText(b);h.setAttribute("for",i);h.setStyles({display:"block","line-height":"16px","margin-left":"18px","white-space":"normal"});f.append(e);f.append(h);return f},v=function(a){a=a||"true";null!==a&&"false"==a&&m()},n=function(b){var c=new y(b),b="wscLang"+a.dialog.getParentEditor().name,b=document.getElementById(b),d=a.iframeNumber+"_"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name); -w[c.getCurrentLangGroup(a.selectingLang)]();v(a.show_grammar);b.onchange=function(){w[c.getCurrentLangGroup(this.value)]();v(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;e.postMessage.send({message:{changeLang:a.selectingLang,text:a.dataTemp},target:a.targetFromFrame[d],id:"selectionLang_outer__page"})}},C=function(b){if("no_any_suggestions"==b){b="No suggestions";a.LocalizationButton.ChangeTo.instance.disable();a.LocalizationButton.ChangeAll.instance.disable();var c=function(b){b= -a.LocalizationButton[b].instance;b.getElement().hasClass("cke_disabled")?b.getElement().setStyle("color","#a0a0a0"):b.disable()};c("ChangeTo");c("ChangeAll")}else a.LocalizationButton.ChangeTo.instance.enable(),a.LocalizationButton.ChangeAll.instance.enable(),a.LocalizationButton.ChangeTo.instance.getElement().setStyle("color","#333"),a.LocalizationButton.ChangeAll.instance.getElement().setStyle("color","#333");return b},E={iframeOnload:function(){a.div_overlay.setEnable();var b=a.dialog._.currentTabId; -u(a.targetFromFrame[a.iframeNumber+"_"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();s();n(a.langList);var c=C(b.word),d="";c instanceof Array&&(c=b.word[0]);d=c=c.split(",");q.clear();a.textNode.SpellTab.setValue(d[0]);for(b=0;b<d.length;b++)q.add(d[b],d[b]);l();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml("");a.textNode.GrammTab.reset(); -a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml("");a.textNodeInfo.GrammTab.getElement().setText(b.info);for(var b=b.grammSuggest,c=b.length,d=!0,f=0;f<c;f++)a.grammerSuggest.getElement().append(B(b[f],b[f],d)),d=!1;l();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();a.selectNode.categories.clear();for(var c in b)a.selectNode.categories.add(c,c);b=a.selectNode.categories.getInputElement().getChildren().$[0].value; -a.selectNode.categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(b);l();a.div_overlay.setDisable()},finish:function(b){delete b.id;D();b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show();a.div_overlay.setDisable()},settext:function(b){delete b.id;a.dialog.getParentEditor().getCommand("checkspell");var c=a.dialog.getParentEditor();try{c.focus()}catch(d){}c.setData(b.text, -function(){a.dataTemp="";c.unlockSelection();c.fire("saveSnapshot");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=b.currentLang;window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);z(a.LocalizationButton);A(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+ -"_"+a.dialog._.currentTabId],id:"options_outer__page"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=b.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;if(a.bnr=b.bannerId){a.setHeightBannerFrame();var d=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,"banner").getElement().setHtml(d)}else a.setHeightFrame();"undefined"==c&&(a.userDictionaryName?(c=a.userDictionaryName,d={osp:e.cookie.get("osp"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids, -id:"options_dic_send",udnCmd:"create"},e.postMessage.send({message:d,target:a.targetFromFrame[void 0]})):c="");e.cookie.set("osp",b.DefOptions.osp);e.cookie.set("udn",c);e.cookie.set("cust_dic_ids",b.DefOptions.cust_dic_ids);e.postMessage.send({id:"giveOptions"})},options_dic_send:function(){var b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:e.cookie.get("udnCmd")};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+ -a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},setOptionsConfirmF:function(){},setOptionsConfirmT:function(){j.setValue("")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){n(a.langList)}},x=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)E[a.id](a)},u=function(b,c,d,f){c=c||CKEDITOR.config.wsc_cmd;d=d||a.dataTemp;e.postMessage.send({message:{customerId:a.wsc_customerId, -text:d,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,udn:a.userDictionaryName,slang:a.selectingLang,reset_suggest:f||!1},target:b,id:"data_outer__page"});a.div_overlay.setEnable()},w={superset:function(){a.dialog.showPage("Thesaurus");a.dialog.showPage("GrammTab");o()},usual:function(){t();m();o()},rtl:function(){t();m();o()}},F=function(b){var c=new function(a){var b={};return{getCmdByTab:function(c){for(var e in a)b[a[e]]=e;return b[c]}}}(a.cmd);b.selectPage(c.getCmdByTab(CKEDITOR.config.wsc_cmd)); -a.sendData(b)},t=function(){a.dialog.hidePage("Thesaurus")},m=function(){a.dialog.hidePage("GrammTab")},o=function(){a.dialog.showPage("SpellTab")},l=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show()},D=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute", -left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h=d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)},s=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId, -"BlockFinishChecking").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h= -d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)};CKEDITOR.dialog.add("checkspell",function(b){var c=function(){this.getElement().focus();a.div_overlay.setEnable();var c=a.dialog._.currentTabId,f=a.iframeNumber+"_"+c,g=a.textNode[c].getValue(),h=this.getElement().getAttribute("title-cmd");e.postMessage.send({message:{cmd:h,tabId:c,new_word:g},target:a.targetFromFrame[f],id:"cmd_outer__page"});("ChangeTo"==h||"ChangeAll"==h)&&b.fire("saveSnapshot");"FinishChecking"==h&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())}; -return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:560,minHeight:444,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;t();m();o()},onShow:function(){b.lockSelection(b.getSelection());a.TextAreaNumber="cke_textarea_"+CKEDITOR.currentInstance.name;e.postMessage.init(x);a.dataTemp=CKEDITOR.currentInstance.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds; -a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var c="file:"==document.location.protocol?"http:":document.location.protocol;CKEDITOR.scriptLoader.load(b.config.wsc_customLoaderScript||c+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.wsc_customerId+"&cmd=script&doc=wsc&schema=22",function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost, -a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path); -a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+"dialogs/tmp.html";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode);a.selectingLang=a.currentLang;a.div_overlay=new r({opacity:"1",background:"#fff url("+a.loadIcon+") no-repeat 50% 50%",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle("width","97%");d.getElementsByTag("DIV").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name)); -a.div_overlay_no_check=new r({opacity:"1",id:"no_check_over",background:"#fff url("+a.loadIconEmptyEditor+") no-repeat 50% 50%",target:a.OverlayPlace});c&&(F(a.dialog),a.dialog.setupContent(a.dialog))})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,f=b.scayt;b.unlockSelection();c&&(f&&c.state[b.name]&&f.setMarkupPaused)&&f.setMarkupPaused(!1);a.dataTemp="";e.postMessage.unbindHandler(x)},contents:[{id:"SpellTab",label:"SpellChecker",accessKey:"S",elements:[{type:"html",id:"banner", -label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+ -":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance=this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:"block", -position:"absolute",left:"-9999px"})}},{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){q= -this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"],children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button", -id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord",label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, -title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right",widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this}, -onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus(); -"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src= -a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab", -label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal", -labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"<div style='min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'></div>",onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox", -children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%", -children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking", -title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;", -children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}},{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms= -this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}, -{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox", -id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking", -style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});var p=null;CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udnCmd",g?g:"ignore"); -"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", -html:"<div></div>",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", -labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", -id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= -!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, -onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", -this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove", -title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"<div>"+a.LocalizationComing.OptionsTextIntro+"</div>",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}], -buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers= -b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords=b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){e.postMessage.init(i);var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked", -!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked",!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()? -0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){e.postMessage.unbindHandler(i);if(p)try{p.focus()}catch(a){}}}}); -CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&&d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){if("checkspell"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new r({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame()); -a.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js b/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js deleted file mode 100644 index 10487d16..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/wsc/dialogs/wsc_ie.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| -f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", -"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='<textarea style="display: none" id="'+g+'" rows="10" cols="40"> </textarea><div id="'+h+'" style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;"></div><iframe src="" style="width:100%;background-color:#f1f1e3;" frameborder="0" name="'+d+'" id="'+d+'" allowtransparency="1"></iframe>', -l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"</p>");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", -"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", -{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); -CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/plugins/xml/plugin.js b/platforms/browser/www/lib/ckeditor/plugins/xml/plugin.js deleted file mode 100644 index 239acc28..00000000 --- a/platforms/browser/www/lib/ckeditor/plugins/xml/plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -(function(){CKEDITOR.plugins.add("xml",{});CKEDITOR.xml=function(c){var a=null;if("object"==typeof c)a=c;else if(c=(c||"").replace(/&nbsp;/g," "),"ActiveXObject"in window){try{a=new ActiveXObject("MSXML2.DOMDocument")}catch(b){try{a=new ActiveXObject("Microsoft.XmlDom")}catch(d){}}a&&(a.async=!1,a.resolveExternals=!1,a.validateOnParse=!1,a.loadXML(c))}else window.DOMParser&&(a=(new DOMParser).parseFromString(c,"text/xml"));this.baseXml=a};CKEDITOR.xml.prototype={selectSingleNode:function(c,a){var b= -this.baseXml;if(a||(a=b)){if("selectSingleNode"in a)return a.selectSingleNode(c);if(b.evaluate)return(b=b.evaluate(c,a,null,9,null))&&b.singleNodeValue||null}return null},selectNodes:function(c,a){var b=this.baseXml,d=[];if(a||(a=b)){if("selectNodes"in a)return a.selectNodes(c);if(b.evaluate&&(b=b.evaluate(c,a,null,5,null)))for(var e;e=b.iterateNext();)d.push(e)}return d},getInnerXml:function(c,a){var b=this.selectSingleNode(c,a),d=[];if(b)for(b=b.firstChild;b;)b.xml?d.push(b.xml):window.XMLSerializer&& -d.push((new XMLSerializer).serializeToString(b)),b=b.nextSibling;return d.length?d.join(""):null}}})(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/samples/ajax.html b/platforms/browser/www/lib/ckeditor/samples/ajax.html deleted file mode 100644 index 59333eb1..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/ajax.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Ajax &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - - var editor, html = ''; - - function createEditor() { - if ( editor ) - return; - - // Create a new editor inside the <div id="editor">, setting its value to html - var config = {}; - editor = CKEDITOR.appendTo( 'editor', config, html ); - } - - function removeEditor() { - if ( !editor ) - return; - - // Retrieve the editor contents. In an Ajax application, this data would be - // sent to the server or used in any other way. - document.getElementById( 'editorcontents' ).innerHTML = html = editor.getData(); - document.getElementById( 'contents' ).style.display = ''; - - // Destroy the editor. - editor.destroy(); - editor = null; - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Create and Destroy Editor Instances for Ajax Applications - </h1> - <div class="description"> - <p> - This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing - area will be displayed in a <code>&lt;div&gt;</code> element. - </p> - <p> - For details of how to create this setup check the source code of this sample page - for JavaScript code responsible for the creation and destruction of a CKEditor instance. - </p> - </div> - <p>Click the buttons to create and remove a CKEditor instance.</p> - <p> - <input onclick="createEditor();" type="button" value="Create Editor"> - <input onclick="removeEditor();" type="button" value="Remove Editor"> - </p> - <!-- This div will hold the editor. --> - <div id="editor"> - </div> - <div id="contents" style="display: none"> - <p> - Edited Contents: - </p> - <!-- This div will be used to display the editor contents. --> - <div id="editorcontents"> - </div> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/api.html b/platforms/browser/www/lib/ckeditor/samples/api.html deleted file mode 100644 index a957eed0..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/api.html +++ /dev/null @@ -1,207 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>API Usage &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <script> - -// The instanceReady event is fired, when an instance of CKEditor has finished -// its initialization. -CKEDITOR.on( 'instanceReady', function( ev ) { - // Show the editor name and description in the browser status bar. - document.getElementById( 'eMessage' ).innerHTML = 'Instance <code>' + ev.editor.name + '<\/code> loaded.'; - - // Show this sample buttons. - document.getElementById( 'eButtons' ).style.display = 'block'; -}); - -function InsertHTML() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'htmlArea' ).value; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Insert HTML code. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml - editor.insertHtml( value ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function InsertText() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'txtArea' ).value; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Insert as plain text. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText - editor.insertText( value ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function SetContents() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - var value = document.getElementById( 'htmlArea' ).value; - - // Set editor contents (replace current contents). - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData - editor.setData( value ); -} - -function GetContents() { - // Get the editor instance that you want to interact with. - var editor = CKEDITOR.instances.editor1; - - // Get editor contents - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData - alert( editor.getData() ); -} - -function ExecuteCommand( commandName ) { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - - // Check the active editing mode. - if ( editor.mode == 'wysiwyg' ) - { - // Execute the command. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand - editor.execCommand( commandName ); - } - else - alert( 'You must be in WYSIWYG mode!' ); -} - -function CheckDirty() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - // Checks whether the current editor contents present changes when compared - // to the contents loaded into the editor at startup - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty - alert( editor.checkDirty() ); -} - -function ResetDirty() { - // Get the editor instance that we want to interact with. - var editor = CKEDITOR.instances.editor1; - // Resets the "dirty state" of the editor (see CheckDirty()) - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-resetDirty - editor.resetDirty(); - alert( 'The "IsDirty" status has been reset' ); -} - -function Focus() { - CKEDITOR.instances.editor1.focus(); -} - -function onFocus() { - document.getElementById( 'eMessage' ).innerHTML = '<b>' + this.name + ' is focused </b>'; -} - -function onBlur() { - document.getElementById( 'eMessage' ).innerHTML = this.name + ' lost focus'; -} - - </script> - -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Using CKEditor JavaScript API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor">CKEditor JavaScript API</a> - to interact with the editor at runtime. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - - <!-- This <div> holds alert messages to be display in the sample page. --> - <div id="alerts"> - <noscript> - <p> - <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript - support, like yours, you should still see the contents (HTML data) and you should - be able to edit it normally, without a rich editor interface. - </p> - </noscript> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <textarea cols="100" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - - <script> - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor1', { - on: { - focus: onFocus, - blur: onBlur, - - // Check for availability of corresponding plugins. - pluginsLoaded: function( evt ) { - var doc = CKEDITOR.document, ed = evt.editor; - if ( !ed.getCommand( 'bold' ) ) - doc.getById( 'exec-bold' ).hide(); - if ( !ed.getCommand( 'link' ) ) - doc.getById( 'exec-link' ).hide(); - } - } - }); - </script> - - <p id="eMessage"> - </p> - - <div id="eButtons" style="display: none"> - <input id="exec-bold" onclick="ExecuteCommand('bold');" type="button" value="Execute &quot;bold&quot; Command"> - <input id="exec-link" onclick="ExecuteCommand('link');" type="button" value="Execute &quot;link&quot; Command"> - <input onclick="Focus();" type="button" value="Focus"> - <br><br> - <input onclick="InsertHTML();" type="button" value="Insert HTML"> - <input onclick="SetContents();" type="button" value="Set Editor Contents"> - <input onclick="GetContents();" type="button" value="Get Editor Contents (HTML)"> - <br> - <textarea cols="100" id="htmlArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML code.&lt;/p&gt;</textarea> - <br> - <br> - <input onclick="InsertText();" type="button" value="Insert Text"> - <br> - <textarea cols="100" id="txtArea" rows="3"> First line with some leading whitespaces. - -Second line of text preceded by two line breaks.</textarea> - <br> - <br> - <input onclick="CheckDirty();" type="button" value="checkDirty()"> - <input onclick="ResetDirty();" type="button" value="resetDirty()"> - </div> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/appendto.html b/platforms/browser/www/lib/ckeditor/samples/appendto.html deleted file mode 100644 index b8467702..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/appendto.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Append To Page Element Using JavaScript Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Append To Page Element Using JavaScript Code - </h1> - <div id="section1"> - <div class="description"> - <p> - The <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-appendTo">CKEDITOR.appendTo()</a></code> method serves to to place editors inside existing DOM elements. Unlike <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-replace">CKEDITOR.replace()</a></code>, - a target container to be replaced is no longer necessary. A new editor - instance is inserted directly wherever it is desired. - </p> -<pre class="samples">CKEDITOR.appendTo( '<em>container_id</em>', - { /* Configuration options to be used. */ } - 'Editor content to be used.' -);</pre> - </div> - <script> - - // This call can be placed at any point after the - // DOM element to append CKEditor to or inside the <head><script> - // in a window.onload event handler. - - // Append a CKEditor instance using the default configuration and the - // provided content to the <div> element of ID "section1". - CKEDITOR.appendTo( 'section1', - null, - '<p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>' - ); - - </script> - </div> - <br> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/assets/inlineall/logo.png b/platforms/browser/www/lib/ckeditor/samples/assets/inlineall/logo.png deleted file mode 100644 index b4d5979e3451d76d72e8b9337ee208d7275abb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4283 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 diff --git a/platforms/browser/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/platforms/browser/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css deleted file mode 100644 index fa0ff379..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/assets/outputxhtml/outputxhtml.css +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - * - * Styles used by the XHTML 1.1 sample page (xhtml.html). - */ - -/** - * Basic definitions for the editing area. - */ -body -{ - font-family: Arial, Verdana, sans-serif; - font-size: 80%; - color: #000000; - background-color: #ffffff; - padding: 5px; - margin: 0px; -} - -/** - * Core styles. - */ - -.Bold -{ - font-weight: bold; -} - -.Italic -{ - font-style: italic; -} - -.Underline -{ - text-decoration: underline; -} - -.StrikeThrough -{ - text-decoration: line-through; -} - -.Subscript -{ - vertical-align: sub; - font-size: smaller; -} - -.Superscript -{ - vertical-align: super; - font-size: smaller; -} - -/** - * Font faces. - */ - -.FontComic -{ - font-family: 'Comic Sans MS'; -} - -.FontCourier -{ - font-family: 'Courier New'; -} - -.FontTimes -{ - font-family: 'Times New Roman'; -} - -/** - * Font sizes. - */ - -.FontSmaller -{ - font-size: smaller; -} - -.FontLarger -{ - font-size: larger; -} - -.FontSmall -{ - font-size: 8pt; -} - -.FontBig -{ - font-size: 14pt; -} - -.FontDouble -{ - font-size: 200%; -} - -/** - * Font colors. - */ -.FontColor1 -{ - color: #ff9900; -} - -.FontColor2 -{ - color: #0066cc; -} - -.FontColor3 -{ - color: #ff0000; -} - -.FontColor1BG -{ - background-color: #ff9900; -} - -.FontColor2BG -{ - background-color: #0066cc; -} - -.FontColor3BG -{ - background-color: #ff0000; -} - -/** - * Indentation. - */ - -.Indent1 -{ - margin-left: 40px; -} - -.Indent2 -{ - margin-left: 80px; -} - -.Indent3 -{ - margin-left: 120px; -} - -/** - * Alignment. - */ - -.JustifyLeft -{ - text-align: left; -} - -.JustifyRight -{ - text-align: right; -} - -.JustifyCenter -{ - text-align: center; -} - -.JustifyFull -{ - text-align: justify; -} - -/** - * Other. - */ - -code -{ - font-family: courier, monospace; - background-color: #eeeeee; - padding-left: 1px; - padding-right: 1px; - border: #c0c0c0 1px solid; -} - -kbd -{ - padding: 0px 1px 0px 1px; - border-width: 1px 2px 2px 1px; - border-style: solid; -} - -blockquote -{ - color: #808080; -} diff --git a/platforms/browser/www/lib/ckeditor/samples/assets/posteddata.php b/platforms/browser/www/lib/ckeditor/samples/assets/posteddata.php deleted file mode 100644 index 6b26aae3..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/assets/posteddata.php +++ /dev/null @@ -1,59 +0,0 @@ -<!DOCTYPE html> -<?php -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -?> -<html> -<head> - <meta charset="utf-8"> - <title>Sample &mdash; CKEditor</title> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - CKEditor &mdash; Posted Data - </h1> - <table border="1" cellspacing="0" id="outputSample"> - <colgroup><col width="120"></colgroup> - <thead> - <tr> - <th>Field&nbsp;Name</th> - <th>Value</th> - </tr> - </thead> -<?php - -if (!empty($_POST)) -{ - foreach ( $_POST as $key => $value ) - { - if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) - continue; - - if ( get_magic_quotes_gpc() ) - $value = htmlspecialchars( stripslashes((string)$value) ); - else - $value = htmlspecialchars( (string)$value ); -?> - <tr> - <th style="vertical-align: top"><?php echo htmlspecialchars( (string)$key ); ?></th> - <td><pre class="samples"><?php echo $value; ?></pre></td> - </tr> - <?php - } -} -?> - </table> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/assets/sample.jpg b/platforms/browser/www/lib/ckeditor/samples/assets/sample.jpg deleted file mode 100644 index 9498271c6032eafda487c0428ad5b26eff35985a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14449 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 diff --git a/platforms/browser/www/lib/ckeditor/samples/assets/uilanguages/languages.js b/platforms/browser/www/lib/ckeditor/samples/assets/uilanguages/languages.js deleted file mode 100644 index 3f7ff624..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/assets/uilanguages/languages.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", -is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", -zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name<b.name?-1:1});return b}(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/samples/datafiltering.html b/platforms/browser/www/lib/ckeditor/samples/datafiltering.html deleted file mode 100644 index 7f2f2a73..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/datafiltering.html +++ /dev/null @@ -1,401 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Data Filtering &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - // Remove advanced tabs for all editors. - CKEDITOR.config.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;creatediv:advanced;editdiv:advanced'; - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Data Filtering and Features Activation - </h1> - <div class="description"> - <p> - This sample page demonstrates the idea of Advanced Content Filter - (<abbr title="Advanced Content Filter">ACF</abbr>), a sophisticated - tool that takes control over what kind of data is accepted by the editor and what - kind of output is produced. - </p> - <h2>When and what is being filtered?</h2> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> controls - <strong>every single source of data</strong> that comes to the editor. - It process both HTML that is inserted manually (i.e. pasted by the user) - and programmatically like: - </p> -<pre class="samples"> -editor.setData( '&lt;p&gt;Hello world!&lt;/p&gt;' ); -</pre> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> discards invalid, - useless HTML tags and attributes so the editor remains "clean" during - runtime. <abbr title="Advanced Content Filter">ACF</abbr> behaviour - can be configured and adjusted for a particular case to prevent the - output HTML (i.e. in CMS systems) from being polluted. - - This kind of filtering is a first, client-side line of defense - against "<a href="http://en.wikipedia.org/wiki/Tag_soup">tag soups</a>", - the tool that precisely restricts which tags, attributes and styles - are allowed (desired). When properly configured, <abbr title="Advanced Content Filter">ACF</abbr> - is an easy and fast way to produce a high-quality, intentionally filtered HTML. - </p> - - <h3>How to configure or disable ACF?</h3> - <p> - Advanced Content Filter is enabled by default, working in "automatic mode", yet - it provides a set of easy rules that allow adjusting filtering rules - and disabling the entire feature when necessary. The config property - responsible for this feature is <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">config.allowedContent</a></code>. - </p> - <p> - By "automatic mode" is meant that loaded plugins decide which kind - of content is enabled and which is not. For example, if the link - plugin is loaded it implies that <code>&lt;a&gt;</code> tag is - automatically allowed. Each plugin is given a set - of predefined <abbr title="Advanced Content Filter">ACF</abbr> rules - that control the editor until <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> - is defined manually. - </p> - <p> - Let's assume our intention is to restrict the editor to accept (produce) <strong>paragraphs - only: no attributes, no styles, no other tags</strong>. - With <abbr title="Advanced Content Filter">ACF</abbr> - this is very simple. Basically set <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> to <code>'p'</code>: - </p> -<pre class="samples"> -var editor = CKEDITOR.replace( <em>textarea_id</em>, { - <strong>allowedContent: 'p'</strong> -} ); -</pre> - <p> - Now try to play with allowed content: - </p> -<pre class="samples"> -// Trying to insert disallowed tag and attribute. -editor.setData( '&lt;p <strong>style="color: red"</strong>&gt;Hello <strong>&lt;em&gt;world&lt;/em&gt;</strong>!&lt;/p&gt;' ); -alert( editor.getData() ); - -// Filtered data is returned. -"&lt;p&gt;Hello world!&lt;/p&gt;" -</pre> - <p> - What happened? Since <code>config.allowedContent: 'p'</code> is set the editor assumes - that only plain <code>&lt;p&gt;</code> are accepted. Nothing more. This is why - <code>style</code> attribute and <code>&lt;em&gt;</code> tag are gone. The same - filtering would happen if we pasted disallowed HTML into this editor. - </p> - <p> - This is just a small sample of what <abbr title="Advanced Content Filter">ACF</abbr> - can do. To know more, please refer to the sample section below and - <a href="http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter">the official Advanced Content Filter guide</a>. - </p> - <p> - You may, of course, want CKEditor to avoid filtering of any kind. - To get rid of <abbr title="Advanced Content Filter">ACF</abbr>, - basically set <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> to <code>true</code> like this: - </p> -<pre class="samples"> -CKEDITOR.replace( <em>textarea_id</em>, { - <strong>allowedContent: true</strong> -} ); -</pre> - - <h2>Beyond data flow: Features activation</h2> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> is far more than - <abbr title="Input/Output">I/O</abbr> control: the entire - <abbr title="User Interface">UI</abbr> of the editor is adjusted to what - filters restrict. For example: if <code>&lt;a&gt;</code> tag is - <strong>disallowed</strong> - by <abbr title="Advanced Content Filter">ACF</abbr>, - then accordingly <code>link</code> command, toolbar button and link dialog - are also disabled. Editor is smart: it knows which features must be - removed from the interface to match filtering rules. - </p> - <p> - CKEditor can be far more specific. If <code>&lt;a&gt;</code> tag is - <strong>allowed</strong> by filtering rules to be used but it is restricted - to have only one attribute (<code>href</code>) - <code>config.allowedContent = 'a[!href]'</code>, then - "Target" tab of the link dialog is automatically disabled as <code>target</code> - attribute isn't included in <abbr title="Advanced Content Filter">ACF</abbr> rules - for <code>&lt;a&gt;</code>. This behaviour applies to dialog fields, context - menus and toolbar buttons. - </p> - - <h2>Sample configurations</h2> - <p> - There are several editor instances below that present different - <abbr title="Advanced Content Filter">ACF</abbr> setups. <strong>All of them, - except the last inline instance, share the same HTML content</strong> to visualize - how different filtering rules affect the same input data. - </p> - </div> - - <div> - <label for="editor1"> - Editor 1: - </label> - <div class="description"> - <p> - This editor is using default configuration ("automatic mode"). It means that - <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code> is defined by loaded plugins. - Each plugin extends filtering rules to make it's own associated content - available for the user. - </p> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <script> - - CKEDITOR.replace( 'editor1' ); - - </script> - </div> - - <br> - - <div> - <label for="editor2"> - Editor 2: - </label> - <div class="description"> - <p> - This editor is using a custom configuration for - <abbr title="Advanced Content Filter">ACF</abbr>: - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor2', { - allowedContent: - 'h1 h2 h3 p blockquote strong em;' + - 'a[!href];' + - 'img(left,right)[!src,alt,width,height];' + - 'table tr th td caption;' + - 'span{!font-family};' +' - 'span{!color};' + - 'span(!marker);' + - 'del ins' -} ); -</pre> - <p> - The following rules may require additional explanation: - </p> - <ul> - <li> - <code>h1 h2 h3 p blockquote strong em</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - <li> - <code>a[!href]</code> - <code>href</code> attribute is obligatory - for <code>&lt;a&gt;</code> tag. Tags without this attribute - are disarded. No other attribute will be accepted. - </li> - <li> - <code>img(left,right)[!src,alt,width,height]</code> - <code>src</code> - attribute is obligatory for <code>&lt;img&gt;</code> tag. - <code>alt</code>, <code>width</code>, <code>height</code> - and <code>class</code> attributes are accepted but - <code>class</code> must be either <code>class="left"</code> - or <code>class="right"</code> - </li> - <li> - <code>table tr th td caption</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - <li> - <code>span{!font-family}</code>, <code>span{!color}</code>, - <code>span(!marker)</code> - <code>&lt;span&gt;</code> tags - will be accepted if either <code>font-family</code> or - <code>color</code> style is set or <code>class="marker"</code> - is present. - </li> - <li> - <code>del ins</code> - These tags - are accepted by the editor. Any tag attributes will be discarded. - </li> - </ul> - <p> - Please note that <strong><abbr title="User Interface">UI</abbr> of the - editor is different</strong>. It's a response to what happened to the filters. - Since <code>text-align</code> isn't allowed, the align toolbar is gone. - The same thing happened to subscript/superscript, strike, underline - (<code>&lt;u&gt;</code>, <code>&lt;sub&gt;</code>, <code>&lt;sup&gt;</code> - are disallowed by <code><a class="samples" - href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent"> - config.allowedContent</a></code>) and many other buttons. - </p> - </div> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor2', { - allowedContent: - 'h1 h2 h3 p blockquote strong em;' + - 'a[!href];' + - 'img(left,right)[!src,alt,width,height];' + - 'table tr th td caption;' + - 'span{!font-family};' + - 'span{!color};' + - 'span(!marker);' + - 'del ins' - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor3"> - Editor 3: - </label> - <div class="description"> - <p> - This editor is using a custom configuration for - <abbr title="Advanced Content Filter">ACF</abbr>. - Note that filters can be configured as an object literal - as an alternative to a string-based definition. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor3', { - allowedContent: { - 'b i ul ol big small': true, - 'h1 h2 h3 p blockquote li': { - styles: 'text-align' - }, - a: { attributes: '!href,target' }, - img: { - attributes: '!src,alt', - styles: 'width,height', - classes: 'left,right' - } - } -} ); -</pre> - </div> - <textarea cols="80" id="editor3" name="editor3" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor3', { - allowedContent: { - 'b i ul ol big small': true, - 'h1 h2 h3 p blockquote li': { - styles: 'text-align' - }, - a: { attributes: '!href,target' }, - img: { - attributes: '!src,alt', - styles: 'width,height', - classes: 'left,right' - } - } - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor4"> - Editor 4: - </label> - <div class="description"> - <p> - This editor is using a custom set of plugins and buttons. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor4', { - removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley', - removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image', - format_tags: 'p;h1;h2;h3;pre;address' -} ); -</pre> - <p> - As you can see, removing plugins and buttons implies filtering. - Several tags are not allowed in the editor because there's no - plugin/button that is responsible for creating and editing this - kind of content (for example: the image is missing because - of <code>removeButtons: 'Image'</code>). The conclusion is that - <abbr title="Advanced Content Filter">ACF</abbr> works "backwards" - as well: <strong>modifying <abbr title="User Interface">UI</abbr> - elements is changing allowed content rules</strong>. - </p> - </div> - <textarea cols="80" id="editor4" name="editor4" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor4', { - removePlugins: 'bidi,div,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley', - removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image', - format_tags: 'p;h1;h2;h3;pre;address' - } ); - - </script> - </div> - - <br> - - <div> - <label for="editor5"> - Editor 5: - </label> - <div class="description"> - <p> - This editor is built on editable <code>&lt;h1&gt;</code> element. - <abbr title="Advanced Content Filter">ACF</abbr> takes care of - what can be included in <code>&lt;h1&gt;</code>. Note that there - are no block styles in Styles combo. Also why lists, indentation, - blockquote, div, form and other buttons are missing. - </p> - <p> - <abbr title="Advanced Content Filter">ACF</abbr> makes sure that - no disallowed tags will come to <code>&lt;h1&gt;</code> so the final - markup is valid. If the user tried to paste some invalid HTML - into this editor (let's say a list), it would be automatically - converted into plain text. - </p> - </div> - <h1 id="editor5" contenteditable="true"> - <em>Apollo 11</em> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. - </h1> - </div> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/divreplace.html b/platforms/browser/www/lib/ckeditor/samples/divreplace.html deleted file mode 100644 index 873c8c2e..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/divreplace.html +++ /dev/null @@ -1,141 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace DIV &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - div.editable - { - border: solid 2px transparent; - padding-left: 15px; - padding-right: 15px; - } - - div.editable:hover - { - border-color: black; - } - - </style> - <script> - - // Uncomment the following code to test the "Timeout Loading Method". - // CKEDITOR.loadFullCoreTimeout = 5; - - window.onload = function() { - // Listen to the double click event. - if ( window.addEventListener ) - document.body.addEventListener( 'dblclick', onDoubleClick, false ); - else if ( window.attachEvent ) - document.body.attachEvent( 'ondblclick', onDoubleClick ); - - }; - - function onDoubleClick( ev ) { - // Get the element which fired the event. This is not necessarily the - // element to which the event has been attached. - var element = ev.target || ev.srcElement; - - // Find out the div that holds this element. - var name; - - do { - element = element.parentNode; - } - while ( element && ( name = element.nodeName.toLowerCase() ) && - ( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' ); - - if ( name == 'div' && element.className.indexOf( 'editable' ) != -1 ) - replaceDiv( element ); - } - - var editor; - - function replaceDiv( div ) { - if ( editor ) - editor.destroy(); - - editor = CKEDITOR.replace( div ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace DIV with CKEditor on the Fly - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;div&gt;</code> elements - with a CKEditor instance on the fly, following user's doubleclick. The content - that was previously placed inside the <code>&lt;div&gt;</code> element will now - be moved into CKEditor editing area. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p> - Double-click any of the following <code>&lt;div&gt;</code> elements to transform them into - editor instances. - </p> - <div class="editable"> - <h3> - Part 1 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - </div> - <div class="editable"> - <h3> - Part 2 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - <p> - Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus - sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum - vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. - </p> - </div> - <div class="editable"> - <h3> - Part 3 - </h3> - <p> - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi - semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna - rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla - nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce - eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. - </p> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/index.html b/platforms/browser/www/lib/ckeditor/samples/index.html deleted file mode 100644 index 5ae467f8..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/index.html +++ /dev/null @@ -1,170 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>CKEditor Samples</title> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - CKEditor Samples - </h1> - <div class="twoColumns"> - <div class="twoColumnsLeft"> - <h2 class="samples"> - Basic Samples - </h2> - <dl class="samples"> - <dt><a class="samples" href="replacebyclass.html">Replace textarea elements by class name</a></dt> - <dd>Automatic replacement of all textarea elements of a given class with a CKEditor instance.</dd> - - <dt><a class="samples" href="replacebycode.html">Replace textarea elements by code</a></dt> - <dd>Replacement of textarea elements with CKEditor instances by using a JavaScript call.</dd> - - <dt><a class="samples" href="jquery.html">Create editors with jQuery</a></dt> - <dd>Creating standard and inline CKEditor instances with jQuery adapter.</dd> - </dl> - - <h2 class="samples"> - Basic Customization - </h2> - <dl class="samples"> - <dt><a class="samples" href="uicolor.html">User Interface color</a></dt> - <dd>Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.</dd> - - <dt><a class="samples" href="uilanguages.html">User Interface languages</a></dt> - <dd>Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.</dd> - </dl> - - - <h2 class="samples">Plugins</h2> -<dl class="samples"> -<dt><a class="samples" href="plugins/codesnippet/codesnippet.html">Code Snippet plugin</a> <span class="new">New!</span></dt> -<dd>View and modify code using the Code Snippet plugin.</dd> - -<dt><a class="samples" href="plugins/image2/image2.html">New Image plugin</a> <span class="new">New!</span></dt> -<dd>Using the new Image plugin to insert captioned images and adjust their dimensions.</dd> - -<dt><a class="samples" href="plugins/mathjax/mathjax.html">Mathematics plugin</a> <span class="new">New!</span></dt> -<dd>Create mathematical equations in TeX and display them in visual form.</dd> - -<dt><a class="samples" href="plugins/sourcedialog/sourcedialog.html">Editing source code in a dialog</a> <span class="new">New!</span></dt> -<dd>Editing HTML content of both inline and classic editor instances.</dd> - -<dt><a class="samples" href="plugins/autogrow/autogrow.html">AutoGrow plugin</a></dt> -<dd>Using the AutoGrow plugin in order to make the editor grow to fit the size of its content.</dd> - -<dt><a class="samples" href="plugins/bbcode/bbcode.html">Output for BBCode</a></dt> -<dd>Configuring CKEditor to produce BBCode tags instead of HTML.</dd> - -<dt><a class="samples" href="plugins/devtools/devtools.html">Developer Tools plugin</a></dt> -<dd>Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization.</dd> - -<dt><a class="samples" href="plugins/docprops/docprops.html">Document Properties plugin</a></dt> -<dd>Manage various page meta data with a dialog.</dd> - -<dt><a class="samples" href="plugins/magicline/magicline.html">Magicline plugin</a></dt> -<dd>Using the Magicline plugin to access difficult focus spaces.</dd> - -<dt><a class="samples" href="plugins/placeholder/placeholder.html">Placeholder plugin</a></dt> -<dd>Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window.</dd> - -<dt><a class="samples" href="plugins/sharedspace/sharedspace.html">Shared-Space plugin</a></dt> -<dd>Having the toolbar and the bottom bar spaces shared by different editor instances.</dd> - -<dt><a class="samples" href="plugins/stylesheetparser/stylesheetparser.html">Stylesheet Parser plugin</a></dt> -<dd>Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet.</dd> - -<dt><a class="samples" href="plugins/tableresize/tableresize.html">TableResize plugin</a></dt> -<dd>Using the TableResize plugin to enable table column resizing.</dd> - -<dt><a class="samples" href="plugins/uicolor/uicolor.html">UIColor plugin</a></dt> -<dd>Using the UIColor plugin to pick up skin color.</dd> - -<dt><a class="samples" href="plugins/wysiwygarea/fullpage.html">Full page support</a></dt> -<dd>CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.</dd> -</dl> - </div> - <div class="twoColumnsRight"> - <h2 class="samples"> - Inline Editing - </h2> - <dl class="samples"> - <dt><a class="samples" href="inlineall.html">Massive inline editor creation</a></dt> - <dd>Turn all elements with <code>contentEditable = true</code> attribute into inline editors.</dd> - - <dt><a class="samples" href="inlinebycode.html">Convert element into an inline editor by code</a></dt> - <dd>Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.</dd> - - <dt><a class="samples" href="inlinetextarea.html">Replace textarea with inline editor</a> <span class="new">New!</span></dt> - <dd>A form with a textarea that is replaced by an inline editor at runtime.</dd> - - - </dl> - - <h2 class="samples"> - Advanced Samples - </h2> - <dl class="samples"> - <dt><a class="samples" href="datafiltering.html">Data filtering and features activation</a> <span class="new">New!</span></dt> - <dd>Data filtering and automatic features activation basing on configuration.</dd> - - <dt><a class="samples" href="divreplace.html">Replace DIV elements on the fly</a></dt> - <dd>Transforming a <code>div</code> element into an instance of CKEditor with a mouse click.</dd> - - <dt><a class="samples" href="appendto.html">Append editor instances</a></dt> - <dd>Appending editor instances to existing DOM elements.</dd> - - <dt><a class="samples" href="ajax.html">Create and destroy editor instances for Ajax applications</a></dt> - <dd>Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.</dd> - - <dt><a class="samples" href="api.html">Basic usage of the API</a></dt> - <dd>Using the CKEditor JavaScript API to interact with the editor at runtime.</dd> - - <dt><a class="samples" href="xhtmlstyle.html">XHTML-compliant style</a></dt> - <dd>Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.</dd> - - <dt><a class="samples" href="readonly.html">Read-only mode</a></dt> - <dd>Using the readOnly API to block introducing changes to the editor contents.</dd> - - <dt><a class="samples" href="tabindex.html">"Tab" key-based navigation</a></dt> - <dd>Navigating among editor instances with tab key.</dd> - - - -<dt><a class="samples" href="plugins/dialog/dialog.html">Using the JavaScript API to customize dialog windows</a></dt> -<dd>Using the dialog windows API to customize dialog windows without changing the original editor code.</dd> - -<dt><a class="samples" href="plugins/divarea/divarea.html">Replace Textarea with a &quot;DIV-based&quot; editor</a></dt> -<dd>Using <code>div</code> instead of <code>iframe</code> for rich editing.</dd> - -<dt><a class="samples" href="plugins/enterkey/enterkey.html">Using the &quot;Enter&quot; key in CKEditor</a></dt> -<dd>Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys.</dd> - -<dt><a class="samples" href="plugins/htmlwriter/outputforflash.html">Output for Flash</a></dt> -<dd>Configuring CKEditor to produce HTML code that can be used with Adobe Flash.</dd> - -<dt><a class="samples" href="plugins/htmlwriter/outputhtml.html">Output HTML</a></dt> -<dd>Configuring CKEditor to produce legacy HTML 4 code.</dd> - -<dt><a class="samples" href="plugins/toolbar/toolbar.html">Toolbar Configurations</a></dt> -<dd>Configuring CKEditor to display full or custom toolbar layout.</dd> - - </dl> - </div> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/inlineall.html b/platforms/browser/www/lib/ckeditor/samples/inlineall.html deleted file mode 100644 index f82af1db..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/inlineall.html +++ /dev/null @@ -1,311 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Massive inline editing &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <script> - - // This code is generally not necessary, but it is here to demonstrate - // how to customize specific editor instances on the fly. This fits well - // this demo because we have editable elements (like headers) that - // require less features. - - // The "instanceCreated" event is fired for every editor instance created. - CKEDITOR.on( 'instanceCreated', function( event ) { - var editor = event.editor, - element = editor.element; - - // Customize editors for headers and tag list. - // These editors don't need features like smileys, templates, iframes etc. - if ( element.is( 'h1', 'h2', 'h3' ) || element.getAttribute( 'id' ) == 'taglist' ) { - // Customize the editor configurations on "configLoaded" event, - // which is fired after the configuration file loading and - // execution. This makes it possible to change the - // configurations before the editor initialization takes place. - editor.on( 'configLoaded', function() { - - // Remove unnecessary plugins to make the editor simpler. - editor.config.removePlugins = 'colorbutton,find,flash,font,' + - 'forms,iframe,image,newpage,removeformat,' + - 'smiley,specialchar,stylescombo,templates'; - - // Rearrange the layout of the toolbar. - editor.config.toolbarGroups = [ - { name: 'editing', groups: [ 'basicstyles', 'links' ] }, - { name: 'undo' }, - { name: 'clipboard', groups: [ 'selection', 'clipboard' ] }, - { name: 'about' } - ]; - }); - } - }); - - </script> - <link href="sample.css" rel="stylesheet"> - <style> - - /* The following styles are just to make the page look nice. */ - - /* Workaround to show Arial Black in Firefox. */ - @font-face - { - font-family: 'arial-black'; - src: local('Arial Black'); - } - - *[contenteditable="true"] - { - padding: 10px; - } - - #container - { - width: 960px; - margin: 30px auto 0; - } - - #header - { - overflow: hidden; - padding: 0 0 30px; - border-bottom: 5px solid #05B2D2; - position: relative; - } - - #headerLeft, - #headerRight - { - width: 49%; - overflow: hidden; - } - - #headerLeft - { - float: left; - padding: 10px 1px 1px; - } - - #headerLeft h2, - #headerLeft h3 - { - text-align: right; - margin: 0; - overflow: hidden; - font-weight: normal; - } - - #headerLeft h2 - { - font-family: "Arial Black",arial-black; - font-size: 4.6em; - line-height: 1.1; - text-transform: uppercase; - } - - #headerLeft h3 - { - font-size: 2.3em; - line-height: 1.1; - margin: .2em 0 0; - color: #666; - } - - #headerRight - { - float: right; - padding: 1px; - } - - #headerRight p - { - line-height: 1.8; - text-align: justify; - margin: 0; - } - - #headerRight p + p - { - margin-top: 20px; - } - - #headerRight > div - { - padding: 20px; - margin: 0 0 0 30px; - font-size: 1.4em; - color: #666; - } - - #columns - { - color: #333; - overflow: hidden; - padding: 20px 0; - } - - #columns > div - { - float: left; - width: 33.3%; - } - - #columns #column1 > div - { - margin-left: 1px; - } - - #columns #column3 > div - { - margin-right: 1px; - } - - #columns > div > div - { - margin: 0px 10px; - padding: 10px 20px; - } - - #columns blockquote - { - margin-left: 15px; - } - - #tagLine - { - border-top: 5px solid #05B2D2; - padding-top: 20px; - } - - #taglist { - display: inline-block; - margin-left: 20px; - font-weight: bold; - margin: 0 0 0 20px; - } - - </style> -</head> -<body> -<div> - <h1 class="samples"><a href="index.html">CKEditor Samples</a> &raquo; Massive inline editing</h1> - <div class="description"> - <p>This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with <strong>contentEditable</strong> attribute set to value <strong>true</strong>:</p> - <pre class="samples">&lt;div <strong>contenteditable="true</strong>" &gt; ... &lt;/div&gt;</pre> - <p>Click inside of any element below to start editing.</p> - </div> -</div> -<div id="container"> - <div id="header"> - <div id="headerLeft"> - <h2 id="sampleTitle" contenteditable="true"> - CKEditor<br> Goes Inline! - </h2> - <h3 contenteditable="true"> - Lorem ipsum dolor sit amet dolor duis blandit vestibulum faucibus a, tortor. - </h3> - </div> - <div id="headerRight"> - <div contenteditable="true"> - <p> - Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. - </p> - <p> - Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac. - </p> - </div> - </div> - </div> - <div id="columns"> - <div id="column1"> - <div contenteditable="true"> - <h3> - Fusce vitae porttitor - </h3> - <p> - <strong> - Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. - </strong> - </p> - <p> - Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum <a href="http://ckeditor.com/">nisl nulla sem in</a> metus. Maecenas wisi. Donec nec erat volutpat. - </p> - <blockquote> - <p> - Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. - Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum - </p> - </blockquote> - <blockquote> - <p> - Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. - </p> - </blockquote> - <p>Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.</p> - <p><s>Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.</s></p> - </div> - </div> - <div id="column2"> - <div contenteditable="true"> - <h3> - Integer condimentum sit amet - </h3> - <p> - <strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong> - Praesent <a href="http://ckeditor.com/">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p> - <p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p> - <p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p> - </div> - <div contenteditable="true"> - <h3> - Praesent wisi accumsan sit amet nibh - </h3> - <p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p> - <p style="margin-left: 40px; ">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href="http://ckeditor.com/">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p> - <p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p> - </div> - </div> - <div id="column3"> - <div contenteditable="true"> - <p> - <img src="assets/inlineall/logo.png" alt="CKEditor logo" style="float:left"> - </p> - <p>Quisque justo neque, mattis sed, fermentum ultrices <strong>posuere cubilia Curae</strong>, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.</p> - <h3> - Nullam laoreet vel consectetuer tellus suscipit - </h3> - <ul> - <li>Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.</li> - <li>Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.</li> - <li>Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</li> - </ul> - <p>Quisque justo neque, mattis sed, <a href="http://ckeditor.com/">fermentum ultrices posuere cubilia</a> Curae, Vestibulum elit metus, quis placerat ut, lectus.</p> - <p>Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.</p> - <p>Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</p> - </div> - </div> - </div> - <div id="tagLine"> - Tags of this article: - <p id="taglist" contenteditable="true"> - inline, editing, floating, CKEditor - </p> - </div> -</div> -<div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> -</div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/inlinebycode.html b/platforms/browser/www/lib/ckeditor/samples/inlinebycode.html deleted file mode 100644 index 4e475367..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/inlinebycode.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Inline Editing by Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Inline Editing by Code - </h1> - <div class="description"> - <p> - This sample shows how to create an inline editor instance of CKEditor. It is created - with a JavaScript call using the following code: - </p> -<pre class="samples"> -// This property tells CKEditor to not activate every element with contenteditable=true element. -CKEDITOR.disableAutoInline = true; - -var editor = CKEDITOR.inline( document.getElementById( 'editable' ) ); -</pre> - <p> - Note that <code>editable</code> in the code above is the <code>id</code> - attribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance. - </p> - </div> - <div id="editable" contenteditable="true"> - <h1><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg" /> Apollo 11</h1> - - <p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> - - <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p> - - <h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2> - - <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p> - - <blockquote> - <p>One small step for [a] man, one giant leap for mankind.</p> - </blockquote> - - <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> - - <blockquote> - <p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p> - </blockquote> - - <h2>Technical details <a id="tech-details" name="tech-details"></a></h2> - - <table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"> - <caption><strong>Mission crew</strong></caption> - <thead> - <tr> - <th scope="col">Position</th> - <th scope="col">Astronaut</th> - </tr> - </thead> - <tbody> - <tr> - <td>Commander</td> - <td>Neil A. Armstrong</td> - </tr> - <tr> - <td>Command Module Pilot</td> - <td>Michael Collins</td> - </tr> - <tr> - <td>Lunar Module Pilot</td> - <td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td> - </tr> - </tbody> - </table> - - <p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p> - - <ol> - <li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li> - <li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li> - <li><strong>Lunar Module</strong> for landing on the Moon.</li> - </ol> - - <p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p> - - <hr /> - <p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p> - </div> - - <script> - // We need to turn off the automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - var editor = CKEDITOR.inline( 'editable' ); - </script> - <div id="footer"> - <hr> - <p contenteditable="true"> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/inlinetextarea.html b/platforms/browser/www/lib/ckeditor/samples/inlinetextarea.html deleted file mode 100644 index fd27c0f1..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/inlinetextarea.html +++ /dev/null @@ -1,110 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea with Inline Editor &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - /* Style the CKEditor element to look like a textfield */ - .cke_textarea_inline - { - padding: 10px; - height: 200px; - overflow: auto; - - border: 1px solid gray; - -webkit-appearance: textfield; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea with Inline Editor - </h1> - <div class="description"> - <p> - You can also create an inline editor from a <code>textarea</code> - element. In this case the <code>textarea</code> will be replaced - by a <code>div</code> element with inline editing enabled. - </p> -<pre class="samples"> -// "article-body" is the name of a textarea element. -var editor = CKEDITOR.inline( 'article-body' ); -</pre> - </div> - <form action="sample_posteddata.php" method="post"> - <h2>This is a sample form with some fields</h2> - <p> - Title:<br> - <input type="text" name="title" value="Sample Form"></p> - <p> - Article Body (Textarea converted to CKEditor):<br> - <textarea name="article-body" style="height: 200px"> - &lt;h2&gt;Technical details &lt;a id="tech-details" name="tech-details"&gt;&lt;/a&gt;&lt;/h2&gt; - - &lt;table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"&gt; - &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; - &lt;thead&gt; - &lt;tr&gt; - &lt;th scope="col"&gt;Position&lt;/th&gt; - &lt;th scope="col"&gt;Astronaut&lt;/th&gt; - &lt;/tr&gt; - &lt;/thead&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;Commander&lt;/td&gt; - &lt;td&gt;Neil A. Armstrong&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;Command Module Pilot&lt;/td&gt; - &lt;td&gt;Michael Collins&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;Lunar Module Pilot&lt;/td&gt; - &lt;td&gt;Edwin &quot;Buzz&quot; E. Aldrin, Jr.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center"&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href="http://en.wikipedia.org/wiki/NASA" title="NASA"&gt;NASA&lt;/a&gt;&#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; - - &lt;ol&gt; - &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; - &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; - &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; - &lt;/ol&gt; - - &lt;p&gt;After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis"&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean"&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; - - &lt;hr /&gt; - &lt;p style="text-align: right;"&gt;&lt;small&gt;Source: &lt;a href="http://en.wikipedia.org/wiki/Apollo_11"&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - - <script> - CKEDITOR.inline( 'article-body' ); - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/jquery.html b/platforms/browser/www/lib/ckeditor/samples/jquery.html deleted file mode 100644 index 380b8284..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/jquery.html +++ /dev/null @@ -1,100 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>jQuery Adapter &mdash; CKEditor Sample</title> - <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> - <script src="../ckeditor.js"></script> - <script src="../adapters/jquery.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> - <script> - - CKEDITOR.disableAutoInline = true; - - $( document ).ready( function() { - $( '#editor1' ).ckeditor(); // Use CKEDITOR.replace() if element is <textarea>. - $( '#editable' ).ckeditor(); // Use CKEDITOR.inline(). - } ); - - function setValue() { - $( '#editor1' ).val( $( 'input#val' ).val() ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html" id="a-test">CKEditor Samples</a> &raquo; Create Editors with jQuery - </h1> - <form action="sample_posteddata.php" method="post"> - <div class="description"> - <p> - This sample shows how to use the <a href="http://docs.ckeditor.com/#!/guide/dev_jquery">jQuery adapter</a>. - Note that you have to include both CKEditor and jQuery scripts before including the adapter. - </p> - -<pre class="samples"> -&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt; -&lt;script src="/ckeditor/ckeditor.js"&gt;&lt;/script&gt; -&lt;script src="/ckeditor/adapters/jquery.js"&gt;&lt;/script&gt; -</pre> - - <p>Then you can replace HTML elements with a CKEditor instance using the <code>ckeditor()</code> method.</p> - -<pre class="samples"> -$( document ).ready( function() { - $( 'textarea#editor1' ).ckeditor(); -} ); -</pre> - </div> - - <h2 class="samples">Inline Example</h2> - - <div id="editable" contenteditable="true"> - <p><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg"/><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> - <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. - <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p> - <blockquote><p>One small step for [a] man, one giant leap for mankind.</p></blockquote> <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> <blockquote><p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p></blockquote> - </div> - - <br style="clear: both"> - - <h2 class="samples">Classic (iframe-based) Example</h2> - - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <p style="overflow: hidden"> - <input style="float: left" type="submit" value="Submit"> - <span style="float: right"> - <input type="text" id="val" value="I'm using jQuery val()!" size="30"> - <input onclick="setValue();" type="button" value="Set value"> - </span> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html b/platforms/browser/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html deleted file mode 100644 index 39434152..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/autogrow/autogrow.html +++ /dev/null @@ -1,99 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>AutoGrow Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="AutoGrow plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the AutoGrow plugin in order to make the editor grow to fit the size of its content."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using AutoGrow Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>AutoGrow</strong> (<code>autogrow</code>) plugin that lets the editor window expand - and shrink depending on the amount and size of content entered in the editing area. - </p> - <p> - In its default implementation the <strong>AutoGrow feature</strong> can expand the - CKEditor window infinitely in order to avoid introducing scrollbars to the editing area. - </p> - <p> - It is also possible to set a maximum height for the editor window. Once CKEditor - editing area reaches the value in pixels specified in the - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_maxHeight">autoGrow_maxHeight</a></code> - configuration setting, scrollbars will be added and the editor window will no longer expand. - </p> - <p> - To add a CKEditor instance using the <code>autogrow</code> plugin and its - <code>autoGrow_maxHeight</code> attribute, insert the following JavaScript call to your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'autogrow',</strong> - autoGrow_maxHeight: 800, - - // Remove the Resize plugin as it does not make sense to use it in conjunction with the AutoGrow plugin. - removePlugins: 'resize' -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. The maximum height should - be given in pixels. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>autogrow</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'autogrow', - removePlugins: 'resize' - }); - - </script> - </p> - <p> - <label for="editor2"> - CKEditor using the <code>autogrow</code> plugin with maximum height set to 400 pixels: - </label> - <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor2', { - extraPlugins: 'autogrow', - autoGrow_maxHeight: 400, - removePlugins: 'resize' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html b/platforms/browser/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html deleted file mode 100644 index 940d12c0..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/bbcode/bbcode.html +++ /dev/null @@ -1,111 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>BBCode Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output for BBCode"> - <meta name="ckeditor-sample-group" content="Additional Plugins"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce BBCode tags instead of HTML."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; BBCode Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output <a href="http://en.wikipedia.org/wiki/BBCode">BBCode</a> format instead of HTML. - Please note that the editor configuration was modified to reflect what is needed in a BBCode editing environment. - Smiley images, for example, were stripped to the emoticons that are commonly used in some BBCode dialects. - </p> - <p> - Please note that currently there is no standard for the BBCode markup language, so its implementation - for different platforms (message boards, blogs etc.) can vary. This means that before using CKEditor to - output BBCode you may need to adjust the implementation to your own environment. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - a full definition: - </p> - <pre class="samples"> -CKEDITOR.replace( 'editor1', { - <strong>extraPlugins: 'bbcode',</strong> - toolbar: [ - [ 'Source', '-', 'Save', 'NewPage', '-', 'Undo', 'Redo' ], - [ 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat' ], - [ 'Link', 'Unlink', 'Image' ], - '/', - [ 'FontSize', 'Bold', 'Italic', 'Underline' ], - [ 'NumberedList', 'BulletedList', '-', 'Blockquote' ], - [ 'TextColor', '-', 'Smiley', 'SpecialChar', '-', 'Maximize' ] - ], - ... <i>some other configurations omitted here</i> -}); </pre> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">This is some [b]sample text[/b]. You are using [url=http://ckeditor.com/]CKEditor[/url].</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using the "bbcode" plugin, shaping some of the - // editor configuration to fit BBCode environment. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'bbcode', - // Remove unused plugins. - removePlugins: 'bidi,dialogadvtab,div,filebrowser,flash,format,forms,horizontalrule,iframe,justify,liststyle,pagebreak,showborders,stylescombo,table,tabletools,templates', - // Width and height are not supported in the BBCode format, so object resizing is disabled. - disableObjectResizing: true, - // Define font sizes in percent values. - fontSize_sizes: "30/30%;50/50%;100/100%;120/120%;150/150%;200/200%;300/300%", - toolbar: [ - [ 'Source', '-', 'Save', 'NewPage', '-', 'Undo', 'Redo' ], - [ 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat' ], - [ 'Link', 'Unlink', 'Image', 'Smiley', 'SpecialChar' ], - '/', - [ 'Bold', 'Italic', 'Underline' ], - [ 'FontSize' ], - [ 'TextColor' ], - [ 'NumberedList', 'BulletedList', '-', 'Blockquote' ], - [ 'Maximize' ] - ], - // Strip CKEditor smileys to those commonly used in BBCode. - smiley_images: [ - 'regular_smile.png', 'sad_smile.png', 'wink_smile.png', 'teeth_smile.png', 'tongue_smile.png', - 'embarrassed_smile.png', 'omg_smile.png', 'whatchutalkingabout_smile.png', 'angel_smile.png', - 'shades_smile.png', 'cry_smile.png', 'kiss.png' - ], - smiley_descriptions: [ - 'smiley', 'sad', 'wink', 'laugh', 'cheeky', 'blush', 'surprise', - 'indecision', 'angel', 'cool', 'crying', 'kiss' - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html b/platforms/browser/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html deleted file mode 100644 index 52588cf0..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/codesnippet/codesnippet.html +++ /dev/null @@ -1,233 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Code Snippet &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <link href="../../../plugins/codesnippet/lib/highlight/styles/monokai_sublime.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Code Snippet plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="View and modify code using the Code Snippet plugin."> - <meta name="ckeditor-sample-isnew" content="1"> - <style> - - #editable - { - padding: 10px 20px; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Code Snippet Plugin - </h1> - - <div class="description"> - <p> - This editor is using the <strong><a href="http://ckeditor.com/addon/codesnippet">Code Snippet</a></strong> plugin which introduces beautiful code snippets. - By default the <code>codesnippet</code> plugin depends on the built-in client-side syntax highlighting - library <a href="http://highlightjs.org">highlight.js</a>. - </p> - <p> - You can adjust the appearance of code snippets using the <code><a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-codeSnippet_theme">codeSnippet_theme</a></code> configuration variable - (see <a href="http://highlightjs.org/static/test.html">available themes</a>). - </p> - <p> - Select theme: <select id="select"></select> - </p> - <p> - The CKEditor instance below was created by using the following configuration settings: - </p> - -<pre class="samples" id="sampleConfig"> -CKEDITOR.replace( 'editor1', { - <strong>extraPlugins: 'codesnippet',</strong> - codeSnippet_theme: 'monokai_sublime' -} ); -</pre> - - <p id="ie8-warning"> - Please note that this plugin is not compatible with Internet Explorer 8. - </p> - </div> - - <textarea id="editor1"> -&lt;p&gt;JavaScript code:&lt;/p&gt; - -&lt;pre&gt; -&lt;code class="language-javascript"&gt;function isEmpty( object ) { - for ( var i in object ) { - if ( object.hasOwnProperty( i ) ) - return false; - } - return true; -}&lt;/code&gt;&lt;/pre&gt; - -&lt;p&gt;SQL query:&lt;/p&gt; - -&lt;pre&gt; -&lt;code class="language-sql"&gt;SELECT cust.id FROM cust LEFT JOIN loc ON ( cust.loc_id = loc.id ) WHERE cust.type IN ( 1, 2 );&lt;/code&gt;&lt;/pre&gt; - -&lt;p&gt;Unknown markup:&lt;/p&gt; - -&lt;pre&gt; -&lt;code&gt; ________________ -/ \ -| How about moo? | ^__^ -\________________/ (oo)\_______ - \ (__)\ )\/\ - ||----w | - || || -&lt;/code&gt;&lt;/pre&gt; - </textarea> - - <h2>Inline editor</h2> - - <div class="description"> - <p> - The following sample shows the <strong>Code Snippet</strong> plugin running inside - an inline CKEditor instance. The CKEditor instance below was created by using the following configuration settings: - </p> - -<pre class="samples"> -CKEDITOR.inline( 'editable', { - <strong>extraPlugins: 'codesnippet'</strong> -} ); -</pre> - - <p> - <strong>Note</strong>: The <a href="http://highlightjs.org/static/test.html">highlight.js themes</a> - must be loaded manually to be applied inside an inline editor instance, as the - <code>codeSnippet_theme</code> setting will not work in that case. - You need to include the stylesheet in the <code>&lt;head&gt;</code> section of the page, for example: - </p> - -<pre class="samples"> -&lt;head&gt; - ... - &lt;link href="path/to/highlight.js/styles/monokai_sublime.css" rel="stylesheet"&gt; -&lt;/head&gt; -</pre> - - </div> - - <div id="editable" contenteditable="true"> - -<p>JavaScript code:</p> - -<pre><code class="language-javascript">function isEmpty( object ) { - for ( var i in object ) { - if ( object.hasOwnProperty( i ) ) - return false; - } - return true; -}</code></pre> - -<p>SQL query:</p> - -<pre><code class="language-sql">SELECT cust.id, cust.name, loc.city FROM cust LEFT JOIN loc ON ( cust.loc_id = loc.id ) WHERE cust.type IN ( 1, 2 );</code></pre> - -<p>Unknown markup:</p> - -<pre><code> ________________ -/ \ -| How about moo? | ^__^ -\________________/ (oo)\_______ - \ (__)\ )\/\ - ||----w | - || || -</code></pre> - </div> - - <h2>Server-side Highlighting and Custom Highlighting Engines</h2> - - <p> - The <a href="http://ckeditor.com/addon/codesnippetgeshi"><strong>Code Snippet GeSHi</strong></a> plugin is an - extension of the <strong>Code Snippet</strong> plugin which uses a server-side highligter. - </p> - - <p> - It also is possible to replace the default highlighter with any library using - the <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet.highlighter">Highlighter API</a> - and the <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet-method-setHighlighter"><code>editor.plugins.codesnippet.setHighlighter()</code></a> method. - </p> - - <script> - ( function() { - CKEDITOR.disableAutoInline = true; - - var config = { - extraPlugins: 'codesnippet', - toolbar: [ - [ 'Source' ], [ 'Undo', 'Redo' ], [ 'Bold', 'Italic', 'Underline' ], [ 'CodeSnippet' ] - ], - codeSnippet_theme: 'monokai_sublime', - height: 400 - }; - - CKEDITOR.replace( 'editor1', config ); - - CKEDITOR.inline( 'editable', CKEDITOR.tools.extend( {}, config, { - extraPlugins: 'codesnippet' - }, true ) ); - - initThemeChange(); - - function initThemeChange() { - var templates = [ - 'monokai_sublime', 'default', 'arta', 'ascetic', 'atelier-dune.dark', 'atelier-dune.light', 'atelier-forest.dark', 'atelier-forest.light', 'atelier-heath.dark', 'atelier-heath.light', 'atelier-lakeside.dark', 'atelier-lakeside.light', 'atelier-seaside.dark', 'atelier-seaside.light', 'brown_paper', 'dark', 'docco', 'far', 'foundation', 'github', 'googlecode', 'idea', 'ir_black', 'magula', 'mono-blue', 'monokai', 'obsidian', 'paraiso.dark', 'paraiso.light', 'pojoaque', 'railscasts', 'rainbow', 'school_book', 'solarized_dark', 'solarized_light', 'sunburst', 'tomorrow-night-blue', 'tomorrow-night-bright', 'tomorrow-night-eighties', 'tomorrow-night', 'tomorrow', 'vs', 'xcode', 'zenburn' - ], - pre = CKEDITOR.document.getById( 'sampleConfig' ), - select = CKEDITOR.document.getById( 'select' ), - codeTemplate = 'CKEDITOR.replace( \'editor1\', {\n' + - ' <strong>extraPlugins: \'codesnippet\',</strong>\n' + - ' codeSnippet_theme: \'{tpl}\'\n' + - '} );', - name, option; - - while ( ( name = templates.shift() ) ) { - option = CKEDITOR.document.createElement( 'option', { - attributes: { - value: name - } - } ); - - option.setText( name ); - select.append( option ); - } - - select.$.onchange = function() { - if ( CKEDITOR.instances.editor1 ) - CKEDITOR.instances.editor1.destroy(); - - CKEDITOR.replace( 'editor1', CKEDITOR.tools.extend( {}, config, { - codeSnippet_theme: this.value - }, true ) ); - - pre.setHtml( codeTemplate.replace( '{tpl}', this.value ) ); - }; - } - - if ( CKEDITOR.env.ie && CKEDITOR.env.version == 8 ) - CKEDITOR.document.getById( 'ie8-warning' ).addClass( 'warning' ); - }() ); - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/devtools/devtools.html b/platforms/browser/www/lib/ckeditor/samples/plugins/devtools/devtools.html deleted file mode 100644 index da3552ff..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/devtools/devtools.html +++ /dev/null @@ -1,83 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using DevTools Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Developer Tools plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Developer Tools Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Developer Tools</strong> (<code>devtools</code>) plugin that displays - information about dialog window elements, including the name of the dialog window, - tab, and UI element. Please note that the tooltip also contains a link to the - <a href="http://docs.ckeditor.com/#!/api">CKEditor JavaScript API</a> - documentation for each of the selected elements. - </p> - <p> - This plugin is aimed at developers who would like to customize their CKEditor - instances and create their own plugins. By default it is turned off; it is - usually useful to only turn it on in the development phase. Note that it works with - all CKEditor dialog windows, including the ones that were created by custom plugins. - </p> - <p> - To add a CKEditor instance using the <strong>devtools</strong> plugin, insert - the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'devtools'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'devtools' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js deleted file mode 100644 index 3edd0728..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/assets/my_dialog.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -CKEDITOR.dialog.add( 'myDialog', function( editor ) { - return { - title: 'My Dialog', - minWidth: 400, - minHeight: 200, - contents: [ - { - id: 'tab1', - label: 'First Tab', - title: 'First Tab', - elements: [ - { - id: 'input1', - type: 'text', - label: 'Text Field' - }, - { - id: 'select1', - type: 'select', - label: 'Select Field', - items: [ - [ 'option1', 'value1' ], - [ 'option2', 'value2' ] - ] - } - ] - }, - { - id: 'tab2', - label: 'Second Tab', - title: 'Second Tab', - elements: [ - { - id: 'button1', - type: 'button', - label: 'Button Field' - } - ] - } - ] - }; -} ); - diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/dialog.html b/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/dialog.html deleted file mode 100644 index df09d25b..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/dialog/dialog.html +++ /dev/null @@ -1,187 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code."> - <style> - - .cke_button__mybutton_icon - { - display: none !important; - } - - .cke_button__mybutton_label - { - display: inline !important; - } - - </style> - <script> - - CKEDITOR.on( 'instanceCreated', function( ev ){ - var editor = ev.editor; - - // Listen for the "pluginsLoaded" event, so we are sure that the - // "dialog" plugin has been loaded and we are able to do our - // customizations. - editor.on( 'pluginsLoaded', function() { - - // If our custom dialog has not been registered, do that now. - if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) { - // We need to do the following trick to find out the dialog - // definition file URL path. In the real world, you would simply - // point to an absolute path directly, like "/mydir/mydialog.js". - var href = document.location.href.split( '/' ); - href.pop(); - href.push( 'assets/my_dialog.js' ); - href = href.join( '/' ); - - // Finally, register the dialog. - CKEDITOR.dialog.add( 'myDialog', href ); - } - - // Register the command used to open the dialog. - editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) ); - - // Add the a custom toolbar buttons, which fires the above - // command.. - editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, { - label: 'My Dialog', - command: 'myDialogCmd' - }); - }); - }); - - // When opening a dialog, its "definition" is created for it, for - // each editor instance. The "dialogDefinition" event is then - // fired. We should use this event to make customizations to the - // definition of existing dialogs. - CKEDITOR.on( 'dialogDefinition', function( ev ) { - // Take the dialog name and its definition from the event data. - var dialogName = ev.data.name; - var dialogDefinition = ev.data.definition; - - // Check if the definition is from the dialog we're - // interested on (the "Link" dialog). - if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) { - // Get a reference to the "Link Info" tab. - var infoTab = dialogDefinition.getContents( 'tab1' ); - - // Add a new text field to the "tab1" tab page. - infoTab.add( { - type: 'text', - label: 'My Custom Field', - id: 'customField', - 'default': 'Sample!', - validate: function() { - if ( ( /\d/ ).test( this.getValue() ) ) - return 'My Custom Field must not contain digits'; - } - }); - - // Remove the "select1" field from the "tab1" tab. - infoTab.remove( 'select1' ); - - // Set the default value for "input1" field. - var input1 = infoTab.get( 'input1' ); - input1[ 'default' ] = 'www.example.com'; - - // Remove the "tab2" tab page. - dialogDefinition.removeContents( 'tab2' ); - - // Add a new tab to the "Link" dialog. - dialogDefinition.addContents( { - id: 'customTab', - label: 'My Tab', - accessKey: 'M', - elements: [ - { - id: 'myField1', - type: 'text', - label: 'My Text Field' - }, - { - id: 'myField2', - type: 'text', - label: 'Another Text Field' - } - ] - }); - - // Provide the focus handler to start initial focus in "customField" field. - dialogDefinition.onFocus = function() { - var urlField = this.getContentElement( 'tab1', 'customField' ); - urlField.select(); - }; - } - }); - - var config = { - extraPlugins: 'dialog', - toolbar: [ [ 'MyButton' ] ] - }; - - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using CKEditor Dialog API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a> - to customize CKEditor dialog windows without changing the original editor code. - The following customizations are being done in the example below: - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p> - <ol> - <li><strong>Creating a custom dialog window</strong> &ndash; "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li> - <li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with "My Dialog" toolbar button.</li> - </ol> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor1', config ); - </script> - <p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p> - <ol> - <li><strong>Adding dialog tab</strong> &ndash; Add new tab "My Tab" to dialog window.</li> - <li><strong>Removing a dialog window tab</strong> &ndash; Remove "Second Tab" page from the dialog window.</li> - <li><strong>Adding dialog window fields</strong> &ndash; Add "My Custom Field" to the dialog window.</li> - <li><strong>Removing dialog window field</strong> &ndash; Remove "Select Field" selection field from the dialog window.</li> - <li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of "Text Field" text field. </li> - <li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on "My Custom Field" text field. </li> - </ol> - <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor1"> with an CKEditor instance. - CKEDITOR.replace( 'editor2', config ); - - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/divarea/divarea.html b/platforms/browser/www/lib/ckeditor/samples/plugins/divarea/divarea.html deleted file mode 100644 index d2880bd2..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/divarea/divarea.html +++ /dev/null @@ -1,61 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea with a "DIV-based" editor &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Replace Textarea with a &quot;DIV-based&quot; editor"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Using &lt;code&gt;div&lt;/code&gt; instead of &lt;code&gt;iframe&lt;/code&gt; for rich editing."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Replace Textarea with a "DIV-based" editor - </h1> - <form action="../../../samples/sample_posteddata.php" method="post"> - <div class="description"> - <p> - This editor is using a <code>&lt;div&gt;</code> element-based editing area, provided by the <strong>Divarea</strong> plugin. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - extraPlugins: 'divarea' -});</pre> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'divarea' - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/docprops/docprops.html b/platforms/browser/www/lib/ckeditor/samples/plugins/docprops/docprops.html deleted file mode 100644 index fcea6468..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/docprops/docprops.html +++ /dev/null @@ -1,78 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Document Properties &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Document Properties plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Manage various page meta data with a dialog."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Document Properties Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to use the <strong>Document Properties</strong> plugin. - This plugin allows you to set the metadata of the page, including the page encoding, margins, - meta tags, or background. - </p> - <p><strong>Note: </strong> This plugin is to be used along with the <code>fullPage</code> configuration.</p> - <p> - The CKEditor instance below is inserted with a JavaScript call using the following code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>fullPage: true</strong>, - <strong>extraPlugins: 'docprops'</strong>, - <strong>allowedContent: true</strong> -}); -</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering. - Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <label for="editor1"> - CKEditor output the entire page including content outside of - <code>&lt;body&gt;</code> element, so content like meta and title can be changed: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; align=&quot;right&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - fullPage: true, - extraPlugins: 'docprops', - allowedContent: true - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html b/platforms/browser/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html deleted file mode 100644 index 2d515012..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/enterkey/enterkey.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>ENTER Key Configuration &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Using the &quot;Enter&quot; key in CKEditor"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys."> - <script> - - var editor; - - function changeEnter() { - // If we already have an editor, let's destroy it first. - if ( editor ) - editor.destroy( true ); - - // Create the editor again, with the appropriate settings. - editor = CKEDITOR.replace( 'editor1', { - extraPlugins: 'enterkey', - enterMode: Number( document.getElementById( 'xEnter' ).value ), - shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value ) - }); - } - - window.onload = changeEnter; - - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; ENTER Key Configuration - </h1> - <div class="description"> - <p> - This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys - to perform actions specified in the - <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a> - and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a> - parameters, respectively. - You can choose from the following options: - </p> - <ul class="samples"> - <li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li> - <li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li> - <li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li> - </ul> - <p> - The sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>enterMode: CKEDITOR.ENTER_DIV</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - </div> - <div style="float: left; margin-right: 20px"> - When <em>Enter</em> is pressed:<br> - <select id="xEnter" onchange="changeEnter();"> - <option selected="selected" value="1">Create a new &lt;P&gt; (recommended)</option> - <option value="3">Create a new &lt;DIV&gt;</option> - <option value="2">Break the line with a &lt;BR&gt;</option> - </select> - </div> - <div style="float: left"> - When <em>Shift+Enter</em> is pressed:<br> - <select id="xShiftEnter" onchange="changeEnter();"> - <option value="1">Create a new &lt;P&gt;</option> - <option value="3">Create a new &lt;DIV&gt;</option> - <option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option> - </select> - </div> - <br style="clear: both"> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <br> - <textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.</textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla deleted file mode 100644 index 27e68ccd1cb7192c8bda2418d198d90f1aff10a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85504 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 diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf deleted file mode 100644 index dbe17b6bce5b9311776f43c2b527f5d696181e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15571 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 diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js deleted file mode 100644 index 95fdf0a7..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js +++ /dev/null @@ -1,18 +0,0 @@ -var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;c<a;c++)x[c]()}}function L(a){s?a():x[x.length]=a}function M(a){if(typeof m.addEventListener!=i)m.addEventListener("load",a,!1);else if(typeof d.addEventListener!=i)d.addEventListener("load",a,!1);else if(typeof m.attachEvent!=i)U(m,"onload",a);else if("function"==typeof m.onload){var b=m.onload;m.onload= -function(){b();a()}}else m.onload=a}function V(){var a=d.getElementsByTagName("body")[0],b=d.createElement(r);b.setAttribute("type",y);var c=a.appendChild(b);if(c){var f=0;(function(){if(typeof c.GetVariable!=i){var g=c.GetVariable("$version");g&&(g=g.split(" ")[1].split(","),e.pv=[parseInt(g[0],10),parseInt(g[1],10),parseInt(g[2],10)])}else if(10>f){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0<a)for(var b=0;b<a;b++){var c=p[b].id, -f=p[b].callbackFn,g={success:!1,id:c};if(0<e.pv[0]){var d=n(c);if(d)if(z(p[b].swfVersion)&&!(e.wk&&312>e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;k<j;k++)"movie"!=d[k].getAttribute("name").toLowerCase()&& -(h[d[k].getAttribute("name")]=d[k].getAttribute("value"));G(g,h,c,f)}else W(d),f&&f(g)}else if(t(c,!0),f){if((c=E(c))&&typeof c.SetVariable!=i)g.success=!0,g.ref=c;f(g)}}}function E(a){var b=null;if((a=n(a))&&"OBJECT"==a.nodeName)typeof a.SetVariable!=i?b=a:(a=a.getElementsByTagName(r)[0])&&(b=a);return b}function F(){return!A&&z("6.0.65")&&(e.win||e.mac)&&!(e.wk&&312>e.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= -O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", -c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& -e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;f<c;f++)!(1==a[f].nodeType&&"PARAM"==a[f].nodeName)&&8!=a[f].nodeType&&b.appendChild(a[f].cloneNode(!0));return b}function J(a,b,c){var f,g=n(c);if(e.wk&&312>e.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ -h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='<param name="'+j+'" value="'+b[j]+'" />');g.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+o+">"+h+"</object>";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& -(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} -function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), -e.ie&&(e.win&&typeof d.styleSheets!=i&&0<d.styleSheets.length)&&(l=d.styleSheets[d.styleSheets.length-1]),K=c;e.ie&&e.win?l&&typeof l.addRule==r&&l.addRule(a,b):l&&typeof d.createTextNode!=i&&l.appendChild(d.createTextNode(a+" {"+b+"}"))}}}function t(a,b){if(R){var c=b?"visible":"hidden";s&&n(a)?n(a).style.visibility=c:Q("#"+a,"visibility:"+c)}}function S(a){return null!=/[\\\"<>\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", -O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== -r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), -e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, -0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;b<a;b++)v[b][0].detachEvent(v[b][1],v[b][2]);a=C.length;for(b=0;b<a;b++)P(C[b]);for(var c in e)e[c]=null;e=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})})();return{registerObject:function(a,b,c,f){if(e.w3&&a&&b){var d={};d.id=a;d.swfVersion=b;d.expressInstall=c;d.callbackFn= -f;p[p.length]=d;t(a,!1)}else f&&f({success:!1,id:a})},getObjectById:function(a){if(e.w3)return E(a)},embedSWF:function(a,b,c,d,g,o,h,j,k,m){var n={success:!1,id:b};e.w3&&!(e.wk&&312>e.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== -b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= -d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c<b.length;c++)if(b[c].substring(0,b[c].indexOf("="))==a)return S(b[c].substring(b[c].indexOf("=")+1))}return""},expressInstallCallback:function(){if(A){var a=n(O);a&&w&&(a.parentNode.replaceChild(w,a),B&&(t(B,!0),e.ie&&e.win&&(w.style.display="block")),H&&H(N));A=!1}}}}(); \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html b/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html deleted file mode 100644 index 738ad667..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputforflash.html +++ /dev/null @@ -1,280 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Output for Flash &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <script src="assets/outputforflash/swfobject.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output for Flash"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash."> - <style> - - .alert - { - background: #ffa84c; - padding: 10px 15px; - font-weight: bold; - display: block; - margin-bottom: 20px; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output - HTML code that can be used with - <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html"> - Adobe Flash</a>. - The code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>, - <code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes. - </p> - <p> - To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard - JavaScript call, and define CKEditor features to use HTML elements and attributes. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <p> - To see how it works, create some content in the editing area of CKEditor on the left - and send it to the Flash object on the right side of the page by using the - <strong>Send to Flash</strong> button. - </p> - <table style="width: 100%; border-spacing: 0; border-collapse:collapse;"> - <tr> - <td style="width: 100%"> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea> - <script> - - if ( document.location.protocol == 'file:' ) - alert( 'Warning: This samples does not work when loaded from local filesystem' + - 'due to security restrictions implemented in Flash.' + - '\n\nPlease load the sample from a web server instead.' ); - - var editor = CKEDITOR.replace( 'editor1', { - /* - * Ensure that htmlwriter plugin, which is required for this sample, is loaded. - */ - extraPlugins: 'htmlwriter', - - height: 290, - width: '100%', - toolbar: [ - [ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], - '/', - [ 'Font', 'FontSize' ], - [ 'TextColor', '-', 'About' ] - ], - - /* - * Style sheet for the contents - */ - contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}', - - /* - * Quirks doctype - */ - docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', - - /* - * Core styles. - */ - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - coreStyles_underline: { element: 'u' }, - - /* - * Font face. - */ - - // Define the way font elements will be applied to the document. The "font" - // element will be used. - font_style: { - element: 'font', - attributes: { 'face': '#(family)' } - }, - - /* - * Font sizes. - */ - - // The CSS part of the font sizes isn't used by Flash, it is there to get the - // font rendered correctly in CKEditor. - fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72', - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' }, - styles: { 'font-size': '#(size)px' } - } , - - /* - * Font colors. - */ - colorButton_enableMore: true, - - colorButton_foreStyle: { - element: 'font', - attributes: { 'color': '#(color)' } - }, - - colorButton_backStyle: { - element: 'font', - styles: { 'background-color': '#(color)' } - }, - - on: { 'instanceReady': configureFlashOutput } - }); - - /* - * Adjust the behavior of the dataProcessor to match the - * requirements of Flash - */ - function configureFlashOutput( ev ) { - var editor = ev.editor, - dataProcessor = editor.dataProcessor, - htmlFilter = dataProcessor && dataProcessor.htmlFilter; - - // Out self closing tags the HTML4 way, like <br>. - dataProcessor.writer.selfClosingEnd = '>'; - - // Make output formatting match Flash expectations - var dtd = CKEDITOR.dtd; - for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { - dataProcessor.writer.setRules( e, { - indent: false, - breakBeforeOpen: false, - breakAfterOpen: false, - breakBeforeClose: false, - breakAfterClose: false - }); - } - dataProcessor.writer.setRules( 'br', { - indent: false, - breakBeforeOpen: false, - breakAfterOpen: false, - breakBeforeClose: false, - breakAfterClose: false - }); - - // Output properties as attributes, not styles. - htmlFilter.addRules( { - elements: { - $: function( element ) { - var style, match, width, height, align; - - // Output dimensions of images as width and height - if ( element.name == 'img' ) { - style = element.attributes.style; - - if ( style ) { - // Get the width from the style. - match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style ); - width = match && match[1]; - - // Get the height from the style. - match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style ); - height = match && match[1]; - - if ( width ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); - element.attributes.width = width; - } - - if ( height ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); - element.attributes.height = height; - } - } - } - - // Output alignment of paragraphs using align - if ( element.name == 'p' ) { - style = element.attributes.style; - - if ( style ) { - // Get the align from the style. - match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style ); - align = match && match[1]; - - if ( align ) { - element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); - element.attributes.align = align; - } - } - } - - if ( element.attributes.style === '' ) - delete element.attributes.style; - - return element; - } - } - }); - } - - function sendToFlash() { - var html = CKEDITOR.instances.editor1.getData() ; - - // Quick fix for link color. - html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' ) - html = html.replace( /<\/a>/g, '</a></u></font>' ) - - var flash = document.getElementById( 'ckFlashContainer' ) ; - flash.setData( html ) ; - } - - CKEDITOR.domReady( function() { - if ( !swfobject.hasFlashPlayerVersion( '8' ) ) { - CKEDITOR.dom.element.createFromHtml( '<span class="alert">' + - 'At least Adobe Flash Player 8 is required to run this sample. ' + - 'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' + - '</span>' ).insertBefore( editor.element ); - } - - swfobject.embedSWF( - 'assets/outputforflash/outputforflash.swf', - 'ckFlashContainer', - '550', - '400', - '8', - { wmode: 'transparent' } - ); - }); - - </script> - <p> - <input type="button" value="Send to Flash" onclick="sendToFlash();"> - </p> - </td> - <td style="vertical-align: top; padding-left: 20px"> - <div id="ckFlashContainer"></div> - </td> - </tr> - </table> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html deleted file mode 100644 index f25697df..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/htmlwriter/outputhtml.html +++ /dev/null @@ -1,221 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>HTML Compliant Output &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Output HTML"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing HTML Compliant Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output valid - <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code. - Traditional HTML elements like <code>&lt;b&gt;</code>, - <code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of - <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles. - </p> - <p> - To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard - JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - full definition: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' } - } - - ... -});</pre> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - /* - * Ensure that htmlwriter plugin, which is required for this sample, is loaded. - */ - extraPlugins: 'htmlwriter', - - /* - * Style sheet for the contents - */ - contentsCss: 'body {color:#000; background-color#:FFF;}', - - /* - * Simple HTML5 doctype - */ - docType: '<!DOCTYPE HTML>', - - /* - * Allowed content rules which beside limiting allowed HTML - * will also take care of transforming styles to attributes - * (currently only for img - see transformation rules defined below). - * - * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter - */ - allowedContent: - 'h1 h2 h3 p pre[align]; ' + - 'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' + - 'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]', - - /* - * Core styles. - */ - coreStyles_bold: { element: 'b' }, - coreStyles_italic: { element: 'i' }, - coreStyles_underline: { element: 'u' }, - coreStyles_strike: { element: 'strike' }, - - /* - * Font face. - */ - - // Define the way font elements will be applied to the document. - // The "font" element will be used. - font_style: { - element: 'font', - attributes: { 'face': '#(family)' } - }, - - /* - * Font sizes. - */ - fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', - fontSize_style: { - element: 'font', - attributes: { 'size': '#(size)' } - }, - - /* - * Font colors. - */ - - colorButton_foreStyle: { - element: 'font', - attributes: { 'color': '#(color)' } - }, - - colorButton_backStyle: { - element: 'font', - styles: { 'background-color': '#(color)' } - }, - - /* - * Styles combo. - */ - stylesSet: [ - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' } - ], - - on: { - pluginsLoaded: configureTransformations, - loaded: configureHtmlWriter - } - }); - - /* - * Add missing content transformations. - */ - function configureTransformations( evt ) { - var editor = evt.editor; - - editor.dataProcessor.htmlFilter.addRules( { - attributes: { - style: function( value, element ) { - // Return #RGB for background and border colors - return CKEDITOR.tools.convertRgbToHex( value ); - } - } - } ); - - // Default automatic content transformations do not yet take care of - // align attributes on blocks, so we need to add our own transformation rules. - function alignToAttribute( element ) { - if ( element.styles[ 'text-align' ] ) { - element.attributes.align = element.styles[ 'text-align' ]; - delete element.styles[ 'text-align' ]; - } - } - editor.filter.addTransformations( [ - [ { element: 'p', right: alignToAttribute } ], - [ { element: 'h1', right: alignToAttribute } ], - [ { element: 'h2', right: alignToAttribute } ], - [ { element: 'h3', right: alignToAttribute } ], - [ { element: 'pre', right: alignToAttribute } ] - ] ); - } - - /* - * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor. - */ - function configureHtmlWriter( evt ) { - var editor = evt.editor, - dataProcessor = editor.dataProcessor; - - // Out self closing tags the HTML4 way, like <br>. - dataProcessor.writer.selfClosingEnd = '>'; - - // Make output formatting behave similar to FCKeditor. - var dtd = CKEDITOR.dtd; - for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { - dataProcessor.writer.setRules( e, { - indent: true, - breakBeforeOpen: true, - breakAfterOpen: false, - breakBeforeClose: !dtd[ e ][ '#' ], - breakAfterClose: true - }); - } - } - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg b/platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image1.jpg deleted file mode 100644 index ca491e39d439c88a7b35f5dada84c7a267b10585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33171 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%0Aadqtfg91 z*NzIklfl7kV=)9Uhd8RcQ3;`#Xj=dEA@M7stSAe(Ci`>%7;Cd?79^KjOVJ}@@<l=A zQYa3|n%xNhn6C{$A1jWx4Lw3P`CQ%PBWwXe!JK>5g$rMybdp-Mw;ra!>e?)#rbVz$ zWh7udt?4>zK+GQQaS?*Q<{eW@jA@ExYUA@595-Nk>I1P@Rlim3(*(OoAGrdI4nc#9 zhkbEfyzZxI;x@pWk6e+v)IV+((jWUHNC~BFJhe7SzCzJsF3dQP{lyekyd6Lq`PIBO z=GRsEDD5YJiHgS5yh?xb*etl=S+VdiSrd=<hwyjYiVof%inIG}Hq?46sX_n_#G@dg cJugyAZ=E{!F^WBOUpU;_A#(M}_21V21D0IIssI20 diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg b/platforms/browser/www/lib/ckeditor/samples/plugins/image2/assets/image2.jpg deleted file mode 100644 index 3dd6d61fce2e3f8e4e6cf18d1e02080bb1c533b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26238 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 Ta;`JS^llSJ{{VtN{;B`jG`d)0 diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/image2/image2.html b/platforms/browser/www/lib/ckeditor/samples/plugins/image2/image2.html deleted file mode 100644 index 34a5339a..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/image2/image2.html +++ /dev/null @@ -1,65 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>New Image plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script> - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) - CKEDITOR.tools.enableHtml5Elements( document ); - </script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="New Image plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the new Image plugin to insert captioned images and adjust their dimensions."> - <meta name="ckeditor-sample-isnew" content="1"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; New Image plugin - </h1> - - <div class="description"> - <p> - This editor is using the new <strong>Image</strong> (<code>image2</code>) plugin, which implements a dynamic <em>click-and-drag</em> resizing - and easy captioning of the images. - </p> - <p> - To use the new plugin, extend <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code>: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'image2'</strong> -} ); -</pre> - </div> - - <textarea id="editor1" cols="10" rows="10"> - &lt;h1&gt;Apollo 11&lt;/h1&gt;&lt;figure class=&quot;image&quot; style=&quot;float: right&quot;&gt;&lt;img alt=&quot;Saturn V&quot; src=&quot;assets/image1.jpg&quot; width=&quot;200&quot; /&gt;&lt;figcaption&gt;Roll out of Saturn V on launch pad&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Apollo 11&lt;/strong&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt;&lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt;&lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt;&lt;figure class=&quot;image&quot; style=&quot;float: right&quot;&gt;&lt;img alt=&quot;The Eagle&quot; src=&quot;assets/image2.jpg&quot; style=&quot;width: 200px&quot; /&gt;&lt;figcaption&gt;The Eagle in lunar orbit&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;text-align:right&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'image2', - height: 450 - } ); - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/magicline/magicline.html b/platforms/browser/www/lib/ckeditor/samples/plugins/magicline/magicline.html deleted file mode 100644 index 800fbb3b..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/magicline/magicline.html +++ /dev/null @@ -1,206 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using Magicline plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Magicline plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using Magicline plugin - </h1> - <div class="description"> - <p> - This sample shows the advantages of <strong>Magicline</strong> plugin - which is to enhance the editing process. Thanks to this plugin, - a number of difficult focus spaces which are inaccessible due to - browser issues can now be focused. - </p> - <p> - <strong>Magicline</strong> plugin shows a red line with a handler - which, when clicked, inserts a paragraph and allows typing. To see this, - focus an editor and move your mouse above the focus space you want - to access. The plugin is enabled by default so no additional - configuration is necessary. - </p> - </div> - <div> - <label for="editor1"> - Editor 1: - </label> - <div class="description"> - <p> - This editor uses a default <strong>Magicline</strong> setup. - </p> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table&lt;/td&gt; - &lt;td&gt;is the&lt;/td&gt; - &lt;td&gt;very first&lt;/td&gt; - &lt;td&gt;element of the document.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We are still&lt;/td&gt; - &lt;td&gt;able to acces&lt;/td&gt; - &lt;td&gt;the space before it.&lt;/td&gt; - &lt;td&gt; - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - &lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; - - &lt;hr /&gt; - &lt;hr /&gt; - &lt;ol&gt; - &lt;li&gt;This numbered list...&lt;/li&gt; - &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; - &lt;li&gt;...and another list.&lt;/li&gt; - &lt;/ol&gt; - - &lt;ul&gt; - &lt;li&gt;We can type between the lists...&lt;/li&gt; - &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; - &lt;/ul&gt; - - &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; - - &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; - - &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; - - &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; - &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; - &lt;/div&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. - allowedContent: true // Switch off the ACF, so very complex content created to - // show magicline's power isn't filtered. - } ); - - </script> - </div> - <br> - <div> - <label for="editor2"> - Editor 2: - </label> - <div class="description"> - <p> - This editor is using a blue line. - </p> -<pre class="samples"> -CKEDITOR.replace( 'editor2', { - magicline_color: 'blue' -});</pre> - </div> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table&lt;/td&gt; - &lt;td&gt;is the&lt;/td&gt; - &lt;td&gt;very first&lt;/td&gt; - &lt;td&gt;element of the document.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We are still&lt;/td&gt; - &lt;td&gt;able to acces&lt;/td&gt; - &lt;td&gt;the space before it.&lt;/td&gt; - &lt;td&gt; - &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - &lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - - &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt; - - &lt;hr /&gt; - &lt;hr /&gt; - &lt;ol&gt; - &lt;li&gt;This numbered list...&lt;/li&gt; - &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt; - &lt;li&gt;...and another list.&lt;/li&gt; - &lt;/ol&gt; - - &lt;ul&gt; - &lt;li&gt;We can type between the lists...&lt;/li&gt; - &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt; - &lt;/ul&gt; - - &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt; - - &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt; - - &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt; - - &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt; - &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt; - &lt;/div&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - CKEDITOR.replace( 'editor2', { - extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. - magicline_color: 'blue', // Blue line - allowedContent: true // Switch off the ACF, so very complex content created to - // show magicline's power isn't filtered. - }); - - </script> - </div> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html b/platforms/browser/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html deleted file mode 100644 index bdccc158..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/mathjax/mathjax.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Mathematical Formulas &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> - <meta name="ckeditor-sample-name" content="Mathematics plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Create mathematical equations in TeX and display them in visual form."> - <meta name="ckeditor-sample-isnew" content="1"> - <script> - CKEDITOR.disableAutoInline = true; - </script> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Mathematical Formulas - </h1> - - <div class="description"> - <p> - This sample shows the usage of the CKEditor mathematical plugin that introduces a MathJax widget. You can now use it to create or modify equations using TeX. - </p> - <p> - TeX content will be automatically replaced by a widget when you put it in a <code>&lt;span class="math-tex"&gt;</code> element. You can also add new equations by using the <strong>Math</strong> toolbar button and entering TeX content in the plugin dialog window. After you click <strong>OK</strong>, a widget will be inserted into the editor content. - </p> - <p> - The output of the editor will be plain TeX with <a href="http://www.mathjax.org/">MathJax</a> delimiters: <code>\(</code> and <code>\)</code>, as in the code below: - </p> -<pre class="samples"> -&lt;span class="math-tex"&gt;\( \sqrt{1} + (1)^2 = 2 \)&lt;/span&gt; -</pre> - <p> - To transform TeX into a visual equation, a page must include the <a href="http://docs.mathjax.org/en/latest/start.html">MathJax script</a>. - </p> - <p> - In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'mathjax'</strong> -} ); -</pre> - <p id="ie8-warning"> - Please note that this plugin is not compatible with Internet Explorer 8. - </p> - </div> - - <textarea id="editor1" cols="10" rows="10"> - - &lt;p&gt;The following equations are represented in the HTML source code as LaTeX expressions.&lt;/p&gt;&lt;h1&gt;The Cauchy-Schwarz Inequality&lt;/h1&gt;&lt;p&gt;&lt;span class=&quot;math-tex&quot;&gt;\( \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \)&lt;/span&gt;&lt;/p&gt;&lt;h1&gt;The probability of getting &lt;span class=&quot;math-tex&quot;&gt;\(k\)&lt;/span&gt; heads when flipping &lt;span class=&quot;math-tex&quot;&gt;\(n\)&lt;/span&gt; coins is&lt;/h1&gt;&lt;p&gt;&lt;span class=&quot;math-tex&quot;&gt;\(P(E) = {n \choose k} p^k (1-p)^{ n-k} \)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Finally, while displaying equations is useful for demonstration purposes, the ability to mix math and text in a paragraph is also important. This expression &lt;span class=&quot;math-tex&quot;&gt;\(\sqrt{3x-1}+(1+x)^2\)&lt;/span&gt; is an example of an inline equation. As you see, MathJax equations can be used this way as well, without disturbing the spacing between the lines.&lt;/p&gt; - - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'mathjax', - height: 350 - } ); - - if ( CKEDITOR.env.ie && CKEDITOR.env.version == 8 ) - document.getElementById( 'ie8-warning' ).className = 'warning'; - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html b/platforms/browser/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html deleted file mode 100644 index 5a09a8ef..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/placeholder/placeholder.html +++ /dev/null @@ -1,72 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Placeholder Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Placeholder plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Placeholder Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Placeholder</strong> plugin that lets you insert read-only elements - into your content. To enter and modify read-only text, use the - <strong>Create Placeholder</strong> <span class="button_icon" data-icon="placeholder">&nbsp;</span> button and its matching dialog window. - </p> - <p> - To add a CKEditor instance that uses the <code>placeholder</code> plugin and a related - <strong>Create Placeholder</strong> <span class="button_icon" data-icon="placeholder">&nbsp;</span> toolbar button, insert the following JavaScript - call to your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'placeholder',</strong> - toolbar: [ [ 'Source', 'Bold' ], [<strong>'CreatePlaceholder'</strong>] ] -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>placeholder</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is a [[sample placeholder]]. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. &lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - extraPlugins: 'placeholder' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html b/platforms/browser/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html deleted file mode 100644 index 30ac7fcf..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/sharedspace/sharedspace.html +++ /dev/null @@ -1,119 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Shared-Space Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Shared-Space plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Having the toolbar and the bottom bar spaces shared by different editor instances."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Sharing Toolbar and Bottom-bar Spaces - </h1> - <div class="description"> - <p> - This sample shows several editor instances that share the very same spaces for both the toolbar and the bottom bar. - </p> - </div> - <div id="top"> - <!-- This div will handle all toolbars --> - </div> - - <div style="height: 300px; overflow: auto; border: 1px solid #afafaf; padding: 20px; margin: 20px;"> - - <div id="framed1" style="width: 49%; float: left; margin-bottom: 20px;"></div> - <div id="framed2" style="width: 49%; float: right; margin-bottom: 20px;"></div> - - <hr style="clear: both; margin: 20px 0;"> - - <div contenteditable="true" id="inline1" style="width: 49%; float: left;"> - <h3> - Integer condimentum sit amet - </h3> - <p> - <strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong> - Praesent <a href="http://ckeditor.com/">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p> - <p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p> - <p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p> - </div> - <div contenteditable="true" id="inline2" style="width: 49%; float: right;"> - <h3> - Praesent wisi accumsan sit amet nibh - </h3> - <p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p> - <p style="margin-left: 40px; ">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href="http://ckeditor.com/">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p> - <p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p> - </div> - - </div> - - <div id="bottom"> - <!-- This div will handle all toolbars --> - </div> - - <script> - - // Turn off automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - CKEDITOR.inline( 'inline1', { - extraPlugins: 'sharedspace', - removePlugins: 'floatingspace,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }); - - CKEDITOR.inline( 'inline2', { - extraPlugins: 'sharedspace', - removePlugins: 'floatingspace,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }); - - CKEDITOR.appendTo( 'framed1', { - extraPlugins: 'sharedspace', - removePlugins: 'maximize,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }, - document.getElementById( 'inline1' ).innerHTML - ); - - CKEDITOR.appendTo( 'framed2', { - extraPlugins: 'sharedspace', - removePlugins: 'maximize,resize', - sharedSpaces: { - top: 'top', - bottom: 'bottom' - } - }, - document.getElementById( 'inline2' ).innerHTML - ); - - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2012, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html b/platforms/browser/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html deleted file mode 100644 index 2b920dff..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/sourcedialog/sourcedialog.html +++ /dev/null @@ -1,118 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Editing source code in a dialog &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="Editing source code in a dialog"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Editing HTML content of both inline and classic editor instances."> - <meta name="ckeditor-sample-isnew" content="1"> - <style> - - #editable - { - padding: 10px; - float: left; - } - - </style> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Editing source code in a dialog - </h1> - <div class="description"> - <p> - <strong>Sourcedialog</strong> plugin provides an easy way to edit raw HTML content - of an editor, similarly to what is possible with <strong>Sourcearea</strong> - plugin for classic (<code>iframe</code>-based) instances but using dialogs. Thanks to that, it's also possible - to manipulate raw content of inline editor instances. - </p> - <p> - This plugin extends the toolbar with a button, - which opens a dialog window with a source code editor. It works with both classic - and inline instances. To enable this - plugin, basically add <code>extraPlugins: 'sourcedialog'</code> to editor's - config: - </p> -<pre class="samples"> -// Inline editor. -CKEDITOR.inline( 'editable', { - <strong>extraPlugins: 'sourcedialog'</strong> -}); - -// Classic (iframe-based) editor. -CKEDITOR.replace( 'textarea_id', { - <strong>extraPlugins: 'sourcedialog'</strong>, - removePlugins: 'sourcearea' -}); -</pre> - <p> - Note that you may want to include <code>removePlugins: 'sourcearea'</code> - in your config when using <strong>Sourcedialog</strong> in classic editor instances. - This prevents feature redundancy. - </p> - <p> - Note that <code>editable</code> in the code above is the <code>id</code> - attribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance. - </p> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <div> - <label for="editor1"> - Inline editor: - </label> - <div id="editor1" contenteditable="true" style="padding: 5px 20px;"> - <p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p> - </div> - </div> - <br> - <div> - <label for="editor2"> - Classic editor: - </label> - <textarea cols="80" id="editor2" name="editor2" rows="10"> - This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. - </textarea> - </div> - <script> - - // We need to turn off the automatic editor creation first. - CKEDITOR.disableAutoInline = true; - - var config = { - toolbarGroups: [ - { name: 'mode' }, - { name: 'basicstyles' }, - { name: 'links' } - ], - extraPlugins: 'sourcedialog', - removePlugins: 'sourcearea' - } - - CKEDITOR.inline( 'editor1', config ); - CKEDITOR.replace( 'editor2', config ); - - </script> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/"> - http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - - Frederico Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css b/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css deleted file mode 100644 index ce545eec..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/assets/sample.css +++ /dev/null @@ -1,70 +0,0 @@ -body -{ - font-family: Arial, Verdana, sans-serif; - font-size: 12px; - color: #222; - background-color: #fff; -} - -/* preserved spaces for rtl list item bullets. (#6249)*/ -ol,ul,dl -{ - padding-right:40px; -} - -h1,h2,h3,h4 -{ - font-family: Georgia, Times, serif; -} - -h1.lightBlue -{ - color: #00A6C7; - font-size: 1.8em; - font-weight:normal; -} - -h3.green -{ - color: #739E39; - font-weight:normal; -} - -span.markYellow { background-color: yellow; } -span.markGreen { background-color: lime; } - -img.left -{ - padding: 5px; - margin-right: 5px; - float:left; - border:2px solid #DDD; -} - -img.right -{ - padding: 5px; - margin-right: 5px; - float:right; - border:2px solid #DDD; -} - -a.green -{ - color:#739E39; -} - -table.grey -{ - background-color : #F5F5F5; -} - -table.grey th -{ - background-color : #DDD; -} - -ul.square -{ - list-style-type : square; -} diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html b/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html deleted file mode 100644 index 450bc11f..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using Stylesheet Parser Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="stylescombo"> - <meta name="ckeditor-sample-name" content="Stylesheet Parser plugin"> - <meta name="ckeditor-sample-description" content="Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet."> - <meta name="ckeditor-sample-group" content="Plugins"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the Stylesheet Parser Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>Stylesheet Parser</strong> (<code>stylesheetparser</code>) plugin that fills - the <strong>Styles</strong> drop-down list based on the CSS rules available in the document stylesheet. - </p> - <p> - To add a CKEditor instance using the <code>stylesheetparser</code> plugin, insert - the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'stylesheetparser'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>stylesheetparser</code> plugin with its default configuration: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1' , { - extraPlugins: 'stylesheetparser', - - // Stylesheet for the contents. - contentsCss: 'assets/sample.css', - - // Do not load the default Styles configuration. - stylesSet: [] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html b/platforms/browser/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html deleted file mode 100644 index 6dec40d6..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/tableresize/tableresize.html +++ /dev/null @@ -1,104 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using TableResize Plugin &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="TableResize plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the TableResize plugin to enable table column resizing."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using the TableResize Plugin - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor instances to use the - <strong>TableResize</strong> (<code>tableresize</code>) plugin that allows - the user to edit table columns by using the mouse. - </p> - <p> - The TableResize plugin makes it possible to modify table column width. Hover - your mouse over the column border to see the cursor change to indicate that - the column can be resized. Click and drag your mouse to set the desired width. - </p> - <p> - By default the plugin is turned off. To add a CKEditor instance using the - TableResize plugin, insert the following JavaScript call into your code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'tableresize'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - CKEditor using the <code>tableresize</code> plugin: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;table style="width: 500px;" border="1"&gt; - &lt;caption&gt; - A sample table&lt;/caption&gt; - &lt;tbody&gt; - &lt;tr&gt; - &lt;td&gt; - Column 1&lt;/td&gt; - &lt;td&gt; - Column 2&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt; - You can resize a table column.&lt;/td&gt; - &lt;td&gt; - Hover your mouse over its border.&lt;/td&gt; - &lt;/tr&gt; - &lt;tr&gt; - &lt;td&gt; - Watch the cursor change.&lt;/td&gt; - &lt;td&gt; - Now click and drag to resize.&lt;/td&gt; - &lt;/tr&gt; - &lt;/tbody&gt; - &lt;/table&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'tableresize' - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html b/platforms/browser/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html deleted file mode 100644 index 6cf2ddf1..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/toolbar/toolbar.html +++ /dev/null @@ -1,232 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Toolbar Configuration &mdash; CKEditor Sample</title> - <meta name="ckeditor-sample-name" content="Toolbar Configurations"> - <meta name="ckeditor-sample-group" content="Advanced Samples"> - <meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout."> - <script src="../../../ckeditor.js"></script> - <link href="../../../samples/sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Toolbar Configuration - </h1> - <div class="description"> - <p> - This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if - current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>. - </p> - - <p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p> - - <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2> - - <p> - You can explicitly define which buttons are displayed in which groups and in which order. - This is the more precise setting, but less flexible. If newly added plugin adds its - own button you'll have to add it manually to your <code>config.toolbar</code> setting as well. - </p> - - <p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p> - - <pre class="samples"> -CKEDITOR.replace( <em>'textarea_id'</em>, { - <strong>toolbar:</strong> [ - { name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups. - [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name. - '/', // Line break - next group will be placed in new line. - { name: 'basicstyles', items: [ 'Bold', 'Italic' ] } - ] -});</pre> - - <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2> - - <p> - You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code> - and <code>forms</code>) are displayed and in which order. Registered buttons are associated - with toolbar groups by <code>toolbar</code> property in their definition. - This setting's advantage is that you don't have to modify toolbar configuration - when adding/removing plugins which register their own buttons. - </p> - - <p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p> - - <pre class="samples"> -CKEDITOR.replace( <em>'textarea_id'</em>, { - <strong>toolbarGroups:</strong> [ - { name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups. - { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label. - '/', // Line break - next group will be placed in new line. - { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - { name: 'links' } - ] - - // NOTE: Remember to leave 'toolbar' property with the default value (null). -});</pre> - </div> - - <div id="currentToolbar" style="display: none"> - <h2 class="samples">Current toolbar configuration</h2> - <p>Below you can see editor with current toolbar definition.</p> - <textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <pre id="editorCurrentCfg" class="samples"></pre> - </div> - - <div id="fullToolbar"> - <h2 class="samples">Full toolbar configuration</h2> - <p>Below you can see editor with full toolbar, generated automatically by the editor.</p> - <p> - <strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything. - Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values. - </p> - <textarea cols="80" id="editorFull" name="editorFull" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <pre id="editorFullCfg" class="samples"></pre> - </div> - - <script> - -(function() { - 'use strict'; - - var buttonsNames; - - CKEDITOR.config.extraPlugins = 'toolbar'; - - CKEDITOR.on( 'instanceReady', function( evt ) { - var editor = evt.editor, - editorCurrent = editor.name == 'editorCurrent', - defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ), - pre = CKEDITOR.document.getById( editor.name + 'Cfg' ), - output = ''; - - if ( editorCurrent ) { - // If default toolbar configuration has been modified, show "current toolbar" section. - if ( !defaultToolbar ) - CKEDITOR.document.getById( 'currentToolbar' ).show(); - else - return; - } - - if ( !buttonsNames ) - buttonsNames = createButtonsNamesHash( editor.ui.items ); - - // Toolbar isn't set explicitly, so it was created automatically from toolbarGroups. - if ( !editor.config.toolbar ) { - output += - '// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' + - dumpToolbarConfiguration( editor ) + - '\n\n' + - '// Toolbar groups configuration.\n' + - dumpToolbarConfiguration( editor, true ) - } - // Toolbar groups doesn't count in this case - print only toolbar. - else { - output += '// Toolbar configuration.\n' + - dumpToolbarConfiguration( editor ); - } - - // Recreate to avoid old IE from loosing whitespaces on filling <pre> content. - var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output ); - CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre ); - } ); - - CKEDITOR.replace( 'editorCurrent', { height: 100 } ); - CKEDITOR.replace( 'editorFull', { - // Reset toolbar settings, so full toolbar will be generated automatically. - toolbar: null, - toolbarGroups: null, - removeButtons: null, - height: 100 - } ); - - function dumpToolbarConfiguration( editor, printGroups ) { - var output = [], - toolbar = editor.toolbar; - - for ( var i = 0; i < toolbar.length; ++i ) { - var group = dumpToolbarGroup( toolbar[ i ], printGroups ); - if ( group ) - output.push( group ); - } - - return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];'; - } - - function dumpToolbarGroup( group, printGroups ) { - var output = []; - - if ( typeof group == 'string' ) - return '\'' + group + '\''; - if ( CKEDITOR.tools.isArray( group ) ) - return dumpToolbarItems( group ); - // Skip group when printing entire toolbar configuration and there are no items in this group. - if ( !printGroups && !group.items ) - return; - - if ( group.name ) - output.push( 'name: \'' + group.name + '\'' ); - - if ( group.groups ) - output.push( 'groups: ' + dumpToolbarItems( group.groups ) ); - - if ( !printGroups ) - output.push( 'items: ' + dumpToolbarItems( group.items ) ); - - return '{ ' + output.join( ', ' ) + ' }'; - } - - function dumpToolbarItems( items ) { - if ( typeof items == 'string' ) - return '\'' + items + '\''; - - var names = [], - i, item; - - for ( var i = 0; i < items.length; ++i ) { - item = items[ i ]; - if ( typeof item == 'string' ) - names.push( item ); - else { - if ( item.type == CKEDITOR.UI_SEPARATOR ) - names.push( '-' ); - else - names.push( buttonsNames[ item.name ] ); - } - } - - return '[ \'' + names.join( '\', \'' ) + '\' ]'; - } - - // Creates { 'lowercased': 'LowerCased' } buttons names hash. - function createButtonsNamesHash( items ) { - var hash = {}, - name; - - for ( name in items ) { - hash[ items[ name ].name ] = name; - } - - return hash; - } - -})(); - </script> - - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html b/platforms/browser/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html deleted file mode 100644 index a6309be0..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/uicolor/uicolor.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>UI Color Picker &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-name" content="UIColor plugin"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="Using the UIColor plugin to pick up skin color."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; UI Color Plugin - </h1> - <div class="description"> - <p> - This sample shows how to use the UI Color picker toolbar button to preview the skin color of the editor. - <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin - compatibility. The Moono and Kama skins are examples of skins that work with it. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <div id="ui-color-plugin"> - <p> - If the <strong>uicolor</strong> plugin along with the dedicated <strong>UIColor</strong> - toolbar button is added to CKEditor, the user will also be able to pick the color of the - UI from the color palette available in the <strong>UI Color Picker</strong> dialog window. - </p> - <p> - To insert a CKEditor instance with the <strong>uicolor</strong> plugin enabled, - use the following JavaScript call: - </p> - <pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>extraPlugins: 'uicolor',</strong> - toolbar: [ [ 'Bold', 'Italic' ], [ <strong>'UIColor'</strong> ] ] -});</pre> - <h2>Used in themed instance</h2> - <p> - Click the <strong>UI Color Picker</strong> toolbar button to open up a color picker dialog. - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - extraPlugins: 'uicolor', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ], - [ 'UIColor' ] - ] - }); - - </script> - </p> - <h2>Used in inline instance</h2> - <p> - Click the below editable region to display floating toolbar, then click <strong>UI Color Picker</strong> button. - </p> - <div id="editor2" contenteditable="true"> - <p>This is some <strong>sample text</strong>. You are using <a data-cke-saved-href="http://ckeditor.com/" href="http://ckeditor.com/">CKEditor</a>.</p> - </div> - <script> - - // Disable automatic creation of inline instances. - CKEDITOR.disableAutoInline = true; - - // Replace the <div id="editor3"> with an inline CKEditor instance. - CKEDITOR.inline( 'editor2', { - extraPlugins: 'uicolor', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ], - [ 'UIColor' ] - ] - }); - - </script> - </div> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/platforms/browser/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html deleted file mode 100644 index 174a25f3..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/plugins/wysiwygarea/fullpage.html +++ /dev/null @@ -1,77 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Full Page Editing &mdash; CKEditor Sample</title> - <script src="../../../ckeditor.js"></script> - <script src="../../../samples/sample.js"></script> - <link rel="stylesheet" href="../../../samples/sample.css"> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <meta name="ckeditor-sample-name" content="Full page support"> - <meta name="ckeditor-sample-group" content="Plugins"> - <meta name="ckeditor-sample-description" content="CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;."> -</head> -<body> - <h1 class="samples"> - <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Full Page Editing - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to edit entire HTML pages, from the - <code>&lt;html&gt;</code> tag to the <code>&lt;/html&gt;</code> tag. - </p> - <p> - The CKEditor instance below is inserted with a JavaScript call using the following code: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>fullPage: true</strong>, - <strong>allowedContent: true</strong> -}); -</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering. - Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. - </p> - </div> - <form action="../../../samples/sample_posteddata.php" method="post"> - <label for="editor1"> - CKEditor output the entire page including content outside of - <code>&lt;body&gt;</code> element, so content like meta and title can be changed: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img align=&quot;right&quot; alt=&quot;Saturn V carrying Apollo 11&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - CKEDITOR.replace( 'editor1', { - fullPage: true, - allowedContent: true, - extraPlugins: 'wysiwygarea' - }); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/readonly.html b/platforms/browser/www/lib/ckeditor/samples/readonly.html deleted file mode 100644 index 58f97069..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/readonly.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Using the CKEditor Read-Only API &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> - <script> - - var editor; - - // The instanceReady event is fired, when an instance of CKEditor has finished - // its initialization. - CKEDITOR.on( 'instanceReady', function( ev ) { - editor = ev.editor; - - // Show this "on" button. - document.getElementById( 'readOnlyOn' ).style.display = ''; - - // Event fired when the readOnly property changes. - editor.on( 'readOnly', function() { - document.getElementById( 'readOnlyOn' ).style.display = this.readOnly ? 'none' : ''; - document.getElementById( 'readOnlyOff' ).style.display = this.readOnly ? '' : 'none'; - }); - }); - - function toggleReadOnly( isReadOnly ) { - // Change the read-only state of the editor. - // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly - editor.setReadOnly( isReadOnly ); - } - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Using the CKEditor Read-Only API - </h1> - <div class="description"> - <p> - This sample shows how to use the - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly">setReadOnly</a></code> - API to put editor into the read-only state that makes it impossible for users to change the editor contents. - </p> - <p> - For details on how to create this setup check the source code of this sample page. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - </p> - <p> - <input id="readOnlyOn" onclick="toggleReadOnly();" type="button" value="Make it read-only" style="display:none"> - <input id="readOnlyOff" onclick="toggleReadOnly( false );" type="button" value="Make it editable again" style="display:none"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/replacebyclass.html b/platforms/browser/www/lib/ckeditor/samples/replacebyclass.html deleted file mode 100644 index 6fc3e6fe..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/replacebyclass.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textareas by Class Name &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements by Class Name - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace all <code>&lt;textarea&gt;</code> elements - of a given class with a CKEditor instance. - </p> - <p> - To replace a <code>&lt;textarea&gt;</code> element, simply assign it the <code>ckeditor</code> - class, as in the code below: - </p> -<pre class="samples"> -&lt;textarea <strong>class="ckeditor</strong>" name="editor1"&gt;&lt;/textarea&gt; -</pre> - <p> - Note that other <code>&lt;textarea&gt;</code> attributes (like <code>id</code> or <code>name</code>) need to be adjusted to your document. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/replacebycode.html b/platforms/browser/www/lib/ckeditor/samples/replacebycode.html deleted file mode 100644 index e5a4c5ba..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/replacebycode.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>Replace Textarea by Code &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements Using JavaScript Code - </h1> - <form action="sample_posteddata.php" method="post"> - <div class="description"> - <p> - This editor is using an <code>&lt;iframe&gt;</code> element-based editing area, provided by the <strong>Wysiwygarea</strong> plugin. - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>' ) -</pre> - </div> - <textarea cols="80" id="editor1" name="editor1" rows="10"> - &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt; - </textarea> - <script> - - // This call can be placed at any point after the - // <textarea>, or inside a <head><script> in a - // window.onload event handler. - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - - CKEDITOR.replace( 'editor1' ); - - </script> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/sample.css b/platforms/browser/www/lib/ckeditor/samples/sample.css deleted file mode 100644 index 8fd71aaa..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/sample.css +++ /dev/null @@ -1,365 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ - -html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre -{ - line-height: 1.5; -} - -body -{ - padding: 10px 30px; -} - -input, textarea, select, option, optgroup, button, td, th -{ - font-size: 100%; -} - -pre -{ - -moz-tab-size: 4; - -o-tab-size: 4; - -webkit-tab-size: 4; - tab-size: 4; -} - -pre, code, kbd, samp, tt -{ - font-family: monospace,monospace; - font-size: 1em; -} - -body { - width: 960px; - margin: 0 auto; -} - -code -{ - background: #f3f3f3; - border: 1px solid #ddd; - padding: 1px 4px; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -abbr -{ - border-bottom: 1px dotted #555; - cursor: pointer; -} - -.new, .beta -{ - text-transform: uppercase; - font-size: 10px; - font-weight: bold; - padding: 1px 4px; - margin: 0 0 0 5px; - color: #fff; - float: right; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -.new -{ - background: #FF7E00; - border: 1px solid #DA8028; - text-shadow: 0 1px 0 #C97626; - - -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; - -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; - box-shadow: 0 2px 3px 0 #FFA54E inset; -} - -.beta -{ - background: #18C0DF; - border: 1px solid #19AAD8; - text-shadow: 0 1px 0 #048CAD; - font-style: italic; - - -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; - -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; - box-shadow: 0 2px 3px 0 #50D4FD inset; -} - -h1.samples -{ - color: #0782C1; - font-size: 200%; - font-weight: normal; - margin: 0; - padding: 0; -} - -h1.samples a -{ - color: #0782C1; - text-decoration: none; - border-bottom: 1px dotted #0782C1; -} - -.samples a:hover -{ - border-bottom: 1px dotted #0782C1; -} - -h2.samples -{ - color: #000000; - font-size: 130%; - margin: 15px 0 0 0; - padding: 0; -} - -p, blockquote, address, form, pre, dl, h1.samples, h2.samples -{ - margin-bottom: 15px; -} - -ul.samples -{ - margin-bottom: 15px; -} - -.clear -{ - clear: both; -} - -fieldset -{ - margin: 0; - padding: 10px; -} - -body, input, textarea -{ - color: #333333; - font-family: Arial, Helvetica, sans-serif; -} - -body -{ - font-size: 75%; -} - -a.samples -{ - color: #189DE1; - text-decoration: none; -} - -form -{ - margin: 0; - padding: 0; -} - -pre.samples -{ - background-color: #F7F7F7; - border: 1px solid #D7D7D7; - overflow: auto; - padding: 0.25em; - white-space: pre-wrap; /* CSS 2.1 */ - word-wrap: break-word; /* IE7 */ -} - -#footer -{ - clear: both; - padding-top: 10px; -} - -#footer hr -{ - margin: 10px 0 15px 0; - height: 1px; - border: solid 1px gray; - border-bottom: none; -} - -#footer p -{ - margin: 0 10px 10px 10px; - float: left; -} - -#footer #copy -{ - float: right; -} - -#outputSample -{ - width: 100%; - table-layout: fixed; -} - -#outputSample thead th -{ - color: #dddddd; - background-color: #999999; - padding: 4px; - white-space: nowrap; -} - -#outputSample tbody th -{ - vertical-align: top; - text-align: left; -} - -#outputSample pre -{ - margin: 0; - padding: 0; -} - -.description -{ - border: 1px dotted #B7B7B7; - margin-bottom: 10px; - padding: 10px 10px 0; - overflow: hidden; -} - -label -{ - display: block; - margin-bottom: 6px; -} - -/** - * CKEditor editables are automatically set with the "cke_editable" class - * plus cke_editable_(inline|themed) depending on the editor type. - */ - -/* Style a bit the inline editables. */ -.cke_editable.cke_editable_inline -{ - cursor: pointer; -} - -/* Once an editable element gets focused, the "cke_focus" class is - added to it, so we can style it differently. */ -.cke_editable.cke_editable_inline.cke_focus -{ - box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; - outline: none; - background: #eee; - cursor: text; -} - -/* Avoid pre-formatted overflows inline editable. */ -.cke_editable_inline pre -{ - white-space: pre-wrap; - word-wrap: break-word; -} - -/** - * Samples index styles. - */ - -.twoColumns, -.twoColumnsLeft, -.twoColumnsRight -{ - overflow: hidden; -} - -.twoColumnsLeft, -.twoColumnsRight -{ - width: 45%; -} - -.twoColumnsLeft -{ - float: left; -} - -.twoColumnsRight -{ - float: right; -} - -dl.samples -{ - padding: 0 0 0 40px; -} -dl.samples > dt -{ - display: list-item; - list-style-type: disc; - list-style-position: outside; - margin: 0 0 3px; -} -dl.samples > dd -{ - margin: 0 0 3px; -} -.warning -{ - color: #ff0000; - background-color: #FFCCBA; - border: 2px dotted #ff0000; - padding: 15px 10px; - margin: 10px 0; -} - -/* Used on inline samples */ - -blockquote -{ - font-style: italic; - font-family: Georgia, Times, "Times New Roman", serif; - padding: 2px 0; - border-style: solid; - border-color: #ccc; - border-width: 0; -} - -.cke_contents_ltr blockquote -{ - padding-left: 20px; - padding-right: 8px; - border-left-width: 5px; -} - -.cke_contents_rtl blockquote -{ - padding-left: 8px; - padding-right: 20px; - border-right-width: 5px; -} - -img.right { - border: 1px solid #ccc; - float: right; - margin-left: 15px; - padding: 5px; -} - -img.left { - border: 1px solid #ccc; - float: left; - margin-right: 15px; - padding: 5px; -} - -.marker -{ - background-color: Yellow; -} diff --git a/platforms/browser/www/lib/ckeditor/samples/sample.js b/platforms/browser/www/lib/ckeditor/samples/sample.js deleted file mode 100644 index b25482d3..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/sample.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// Tool scripts for the sample pages. -// This file can be ignored and is not required to make use of CKEditor. - -( function() { - CKEDITOR.on( 'instanceReady', function( ev ) { - // Check for sample compliance. - var editor = ev.editor, - meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), - requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], - missing = [], - i; - - if ( requires.length ) { - for ( i = 0; i < requires.length; i++ ) { - if ( !editor.plugins[ requires[ i ] ] ) - missing.push( '<code>' + requires[ i ] + '</code>' ); - } - - if ( missing.length ) { - var warn = CKEDITOR.dom.element.createFromHtml( - '<div class="warning">' + - '<span>To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.</span>' + - '</div>' - ); - warn.insertBefore( editor.container ); - } - } - - // Set icons. - var doc = new CKEDITOR.dom.document( document ), - icons = doc.find( '.button_icon' ); - - for ( i = 0; i < icons.count(); i++ ) { - var icon = icons.getItem( i ), - name = icon.getAttribute( 'data-icon' ), - style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); - - icon.addClass( 'cke_button_icon' ); - icon.addClass( 'cke_button__' + name + '_icon' ); - icon.setAttribute( 'style', style ); - icon.setStyle( 'float', 'none' ); - - } - } ); -} )(); diff --git a/platforms/browser/www/lib/ckeditor/samples/sample_posteddata.php b/platforms/browser/www/lib/ckeditor/samples/sample_posteddata.php deleted file mode 100644 index e4869b7c..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/sample_posteddata.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php /* <body><pre> - -------------------------------------------------------------------------------------------- - CKEditor - Posted Data - - We are sorry, but your Web server does not support the PHP language used in this script. - - Please note that CKEditor can be used with any other server-side language than just PHP. - To save the content created with CKEditor you need to read the POST data on the server - side and write it to a file or the database. - - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or <a href="http://ckeditor.com/license">http://ckeditor.com/license</a> -------------------------------------------------------------------------------------------- - -</pre><div style="display:none"></body> */ include "assets/posteddata.php"; ?> diff --git a/platforms/browser/www/lib/ckeditor/samples/tabindex.html b/platforms/browser/www/lib/ckeditor/samples/tabindex.html deleted file mode 100644 index 89521668..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/tabindex.html +++ /dev/null @@ -1,75 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>TAB Key-Based Navigation &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link href="sample.css" rel="stylesheet"> - <style> - - .cke_focused, - .cke_editable.cke_focused - { - outline: 3px dotted blue !important; - *border: 3px dotted blue !important; /* For IE7 */ - } - - </style> - <script> - - CKEDITOR.on( 'instanceReady', function( evt ) { - var editor = evt.editor; - editor.setData( 'This editor has it\'s tabIndex set to <strong>' + editor.tabIndex + '</strong>' ); - - // Apply focus class name. - editor.on( 'focus', function() { - editor.container.addClass( 'cke_focused' ); - }); - editor.on( 'blur', function() { - editor.container.removeClass( 'cke_focused' ); - }); - - // Put startup focus on the first editor in tab order. - if ( editor.tabIndex == 1 ) - editor.focus(); - }); - - </script> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; TAB Key-Based Navigation - </h1> - <div class="description"> - <p> - This sample shows how tab key navigation among editor instances is - affected by the <code>tabIndex</code> attribute from - the original page element. Use TAB key to move between the editors. - </p> - </div> - <p> - <textarea class="ckeditor" cols="80" id="editor4" rows="10" tabindex="1"></textarea> - </p> - <div class="ckeditor" contenteditable="true" id="editor1" tabindex="4"></div> - <p> - <textarea class="ckeditor" cols="80" id="editor2" rows="10" tabindex="2"></textarea> - </p> - <p> - <textarea class="ckeditor" cols="80" id="editor3" rows="10" tabindex="3"></textarea> - </p> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/uicolor.html b/platforms/browser/www/lib/ckeditor/samples/uicolor.html deleted file mode 100644 index ce4b2a26..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/uicolor.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>UI Color Picker &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; UI Color - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements - with a CKEditor instance with an option to change the color of its user interface.<br> - <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin - compatibility. The Moono and Kama skins are examples of skins that work with it. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - This editor instance has a UI color value defined in configuration to change the skin color, - To specify the color of the user interface, set the <code>uiColor</code> property: - </p> - <pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - <strong>uiColor: '#14B8C4'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - CKEDITOR.replace( 'editor1', { - uiColor: '#14B8C4', - toolbar: [ - [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], - [ 'FontSize', 'TextColor', 'BGColor' ] - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/uilanguages.html b/platforms/browser/www/lib/ckeditor/samples/uilanguages.html deleted file mode 100644 index 66acca43..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/uilanguages.html +++ /dev/null @@ -1,119 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>User Interface Globalization &mdash; CKEditor Sample</title> - <script src="../ckeditor.js"></script> - <script src="assets/uilanguages/languages.js"></script> - <link rel="stylesheet" href="sample.css"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; User Interface Languages - </h1> - <div class="description"> - <p> - This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements - with a CKEditor instance with an option to change the language of its user interface. - </p> - <p> - It pulls the language list from CKEditor <code>_languages.js</code> file that contains the list of supported languages and creates - a drop-down list that lets the user change the UI language. - </p> - <p> - By default, CKEditor automatically localizes the editor to the language of the user. - The UI language can be controlled with two configuration options: - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-language">language</a></code> and - <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-defaultLanguage"> - defaultLanguage</a></code>. The <code>defaultLanguage</code> setting specifies the - default CKEditor language to be used when a localization suitable for user's settings is not available. - </p> - <p> - To specify the user interface language that will be used no matter what language is - specified in user's browser or operating system, set the <code>language</code> property: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - // Load the German interface. - <strong>language: 'de'</strong> -});</pre> - <p> - Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of - the <code>&lt;textarea&gt;</code> element to be replaced. - </p> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - Available languages (<span id="count"> </span> languages!):<br> - <script> - - document.write( '<select disabled="disabled" id="languages" onchange="createEditor( this.value );">' ); - - // Get the language list from the _languages.js file. - for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ ) { - document.write( - '<option value="' + window.CKEDITOR_LANGS[i].code + '">' + - window.CKEDITOR_LANGS[i].name + - '</option>' ); - } - - document.write( '</select>' ); - - </script> - <br> - <span style="color: #888888"> - (You may see strange characters if your system does not support the selected language) - </span> - </p> - <p> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - // Set the number of languages. - document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length; - - var editor; - - function createEditor( languageCode ) { - if ( editor ) - editor.destroy(); - - // Replace the <textarea id="editor"> with an CKEditor - // instance, using default configurations. - editor = CKEDITOR.replace( 'editor1', { - language: languageCode, - - on: { - instanceReady: function() { - // Wait for the editor to be ready to set - // the language combo. - var languages = document.getElementById( 'languages' ); - languages.value = this.langCode; - languages.disabled = false; - } - } - }); - } - - // At page startup, load the default language: - createEditor( '' ); - - </script> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/samples/xhtmlstyle.html b/platforms/browser/www/lib/ckeditor/samples/xhtmlstyle.html deleted file mode 100644 index f219d11d..00000000 --- a/platforms/browser/www/lib/ckeditor/samples/xhtmlstyle.html +++ /dev/null @@ -1,231 +0,0 @@ -<!DOCTYPE html> -<!-- -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license ---> -<html> -<head> - <meta charset="utf-8"> - <title>XHTML Compliant Output &mdash; CKEditor Sample</title> - <meta name="ckeditor-sample-required-plugins" content="sourcearea"> - <script src="../ckeditor.js"></script> - <script src="../samples/sample.js"></script> - <link href="sample.css" rel="stylesheet"> -</head> -<body> - <h1 class="samples"> - <a href="index.html">CKEditor Samples</a> &raquo; Producing XHTML Compliant Output - </h1> - <div class="description"> - <p> - This sample shows how to configure CKEditor to output valid - <a class="samples" href="http://www.w3.org/TR/xhtml11/">XHTML 1.1</a> code. - Deprecated elements (<code>&lt;font&gt;</code>, <code>&lt;u&gt;</code>) or attributes - (<code>size</code>, <code>face</code>) will be replaced with XHTML compliant code. - </p> - <p> - To add a CKEditor instance outputting valid XHTML code, load the editor using a standard - JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. - </p> - <p> - A snippet of the configuration code can be seen below; check the source of this page for - full definition: - </p> -<pre class="samples"> -CKEDITOR.replace( '<em>textarea_id</em>', { - contentsCss: 'assets/outputxhtml.css', - - coreStyles_bold: { - element: 'span', - attributes: { 'class': 'Bold' } - }, - coreStyles_italic: { - element: 'span', - attributes: { 'class': 'Italic' } - }, - - ... -});</pre> - </div> - <form action="sample_posteddata.php" method="post"> - <p> - <label for="editor1"> - Editor 1: - </label> - <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;span class="Bold"&gt;sample text&lt;/span&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea> - <script> - - CKEDITOR.replace( 'editor1', { - /* - * Style sheet for the contents - */ - contentsCss: 'assets/outputxhtml/outputxhtml.css', - - /* - * Special allowed content rules for spans used by - * font face, size, and color buttons. - * - * Note: all rules have been written separately so - * it was possible to specify required classes. - */ - extraAllowedContent: 'span(!FontColor1);span(!FontColor2);span(!FontColor3);' + - 'span(!FontColor1BG);span(!FontColor2BG);span(!FontColor3BG);' + - 'span(!FontComic);span(!FontCourier);span(!FontTimes);' + - 'span(!FontSmaller);span(!FontLarger);span(!FontSmall);span(!FontBig);span(!FontDouble)', - - /* - * Core styles. - */ - coreStyles_bold: { - element: 'span', - attributes: { 'class': 'Bold' } - }, - coreStyles_italic: { - element: 'span', - attributes: { 'class': 'Italic' } - }, - coreStyles_underline: { - element: 'span', - attributes: { 'class': 'Underline' } - }, - coreStyles_strike: { - element: 'span', - attributes: { 'class': 'StrikeThrough' }, - overrides: 'strike' - }, - coreStyles_subscript: { - element: 'span', - attributes: { 'class': 'Subscript' }, - overrides: 'sub' - }, - coreStyles_superscript: { - element: 'span', - attributes: { 'class': 'Superscript' }, - overrides: 'sup' - }, - - /* - * Font face. - */ - - // List of fonts available in the toolbar combo. Each font definition is - // separated by a semi-colon (;). We are using class names here, so each font - // is defined by {Combo Label}/{Class Name}. - font_names: 'Comic Sans MS/FontComic;Courier New/FontCourier;Times New Roman/FontTimes', - - // Define the way font elements will be applied to the document. The "span" - // element will be used. When a font is selected, the font name defined in the - // above list is passed to this definition with the name "Font", being it - // injected in the "class" attribute. - // We must also instruct the editor to replace span elements that are used to - // set the font (Overrides). - font_style: { - element: 'span', - attributes: { 'class': '#(family)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^Font(?:Comic|Courier|Times)$/ - } - } - ] - }, - - /* - * Font sizes. - */ - fontSize_sizes: 'Smaller/FontSmaller;Larger/FontLarger;8pt/FontSmall;14pt/FontBig;Double Size/FontDouble', - fontSize_style: { - element: 'span', - attributes: { 'class': '#(size)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^Font(?:Smaller|Larger|Small|Big|Double)$/ - } - } - ] - } , - - /* - * Font colors. - */ - colorButton_enableMore: false, - - colorButton_colors: 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00', - colorButton_foreStyle: { - element: 'span', - attributes: { 'class': '#(color)' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^FontColor(?:1|2|3)$/ - } - } - ] - }, - - colorButton_backStyle: { - element: 'span', - attributes: { 'class': '#(color)BG' }, - overrides: [ - { - element: 'span', - attributes: { - 'class': /^FontColor(?:1|2|3)BG$/ - } - } - ] - }, - - /* - * Indentation. - */ - indentClasses: [ 'Indent1', 'Indent2', 'Indent3' ], - - /* - * Paragraph justification. - */ - justifyClasses: [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ], - - /* - * Styles combo. - */ - stylesSet: [ - { name: 'Strong Emphasis', element: 'strong' }, - { name: 'Emphasis', element: 'em' }, - - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' } - ] - }); - - </script> - </p> - <p> - <input type="submit" value="Submit"> - </p> - </form> - <div id="footer"> - <hr> - <p> - CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> - </p> - <p id="copy"> - Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico - Knabben. All rights reserved. - </p> - </div> -</body> -</html> diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/dialog.css b/platforms/browser/www/lib/ckeditor/skins/kama/dialog.css deleted file mode 100644 index 31152d4c..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/dialog.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie.css b/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie.css deleted file mode 100644 index 359d4574..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie7.css b/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie7.css deleted file mode 100644 index 3973bd10..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_dialog_title{margin-bottom:22px}.cke_single_page .cke_dialog_title{margin-bottom:10px}.cke_single_page .cke_dialog_footer{margin-top:22px}.cke_dialog_footer .cke_resizer{margin-top:27px}.cke_dialog_tabs{top:33px}.cke_dialog_footer_buttons{position:static;margin-top:7px;margin-right:24px}.cke_rtl .cke_dialog_footer_buttons{margin-right:0;margin-left:24px}.cke_rtl .cke_dialog_close_button{margin-top:0;position:absolute;left:10px;top:5px}span.cke_dialog_ui_buttonm{margin:2px 0}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{position:absolute}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{height:14px;position:relative} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie8.css b/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie8.css deleted file mode 100644 index ddbd6012..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_rtl .cke_dialog_footer_buttons td{padding-left:2px}.cke_rtl .cke_dialog_close_button{left:8px} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_iequirks.css b/platforms/browser/www/lib/ckeditor/skins/kama/dialog_iequirks.css deleted file mode 100644 index 04ba2ee5..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/dialog_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee}.cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:0;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.cke_rtl .cke_dialog_footer{text-align:left}.cke_dialog_footer .cke_resizer{margin-top:24px}.cke_dialog_footer .cke_resizer_ltr{border-right-color:#ccc}.cke_dialog_footer .cke_resizer_rtl{border-left-color:#ccc}.cke_hc .cke_dialog_footer .cke_resizer{margin-bottom:1px}.cke_hc .cke_dialog_footer .cke_resizer_ltr{margin-right:1px}.cke_hc .cke_dialog_footer .cke_resizer_rtl{margin-left:1px}.cke_dialog_tabs{height:23px;display:inline-block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer}a.cke_dialog_tab:hover{background-color:#f1f1e3}.cke_hc a.cke_dialog_tab:hover{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default}.cke_hc a.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px}.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px}.cke_dialog_close_button span{display:none}.cke_dialog_close_button:hover{background-position:0 -1045px}.cke_ltr .cke_dialog_close_button{right:10px}.cke_rtl .cke_dialog_close_button{left:10px}.cke_dialog_close_button{top:7px}div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password{background-color:white;border:0;padding:0;width:100%;height:14px}div.cke_dialog_ui_input_text,div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0}textarea.cke_dialog_ui_input_textarea{background-color:white;border:0;padding:0;width:100%;overflow:auto;resize:none}div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0}a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;text-align:center;display:inline-block}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{width:60px;padding:5px 20px 5px;display:inline-block}a.cke_dialog_ui_button_ok{background-position:0 -1144px}a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1216px}.cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1216px}a.cke_dialog_ui_button_cancel{background-position:0 -1105px}a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1242px}.cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1242px}span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px}a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1180px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border-width:2px}.cke_dialog_footer_buttons{display:inline-table;margin:6px 12px 0 12px;width:auto;position:relative}.cke_dialog_footer_buttons span.cke_dialog_ui_button{text-align:center}select.cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_dialog .cke_dark_background{background-color:#eaead1}.cke_dialog .cke_light_background{background-color:#ffffbe}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_tabs,.cke_hc .cke_dialog_contents,.cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid}.cke_hc .cke_dialog_title{border-top:1px solid}.cke_hc .cke_dialog_footer{border-bottom:1px solid}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit}.cke_hc a.cke_btn_locked,.cke_hc a.cke_btn_unlocked,.cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px}.cke_rtl.cke_hc a.cke_btn_locked,.cke_rtl.cke_hc a.cke_btn_unlocked,.cke_rtl.cke_hc a.cke_btn_reset{float:right}.cke_hc a.cke_btn_locked .cke_icon{display:inline}a.cke_smile img{border:2px solid #eaead1}a.cke_smile:focus img,a.cke_smile:active img,a.cke_smile:hover img{border-color:#c7c78f}.cke_hc .cke_dialog_tabs a,.cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white}.cke_hc .ImagePreviewBox{width:260px}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_dialog_ui_input_select:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_dialog_title{margin-bottom:22px}.cke_dialog_page_contents{position:absolute}.cke_single_page .cke_dialog_title{margin-bottom:10px}.cke_dialog_close_button{top:27px;background-image:url(images/sprites_ie6.png)}.cke_dialog_footer .cke_resizer{margin-top:27px}.cke_dialog_tabs{display:block;top:33px;margin-top:33px}.cke_rtl .cke_dialog_ui_labeled_content{_width:95%}a.cke_dialog_ui_button{background:0;padding:0}a.cke_dialog_ui_button span{width:70px;padding:5px 15px;text-align:center;color:#3b3b1f;background:#53d9f0 none;display:inline-block;cursor:default}a.cke_dialog_ui_button_ok span{background-image:none;background-color:#b8e834;margin-right:0}a.cke_dialog_ui_button_cancel span{background-image:none;background-color:#f65d20;margin-right:0}a.cke_dialog_ui_button:hover span,a.cke_dialog_ui_button:focus span,a.cke_dialog_ui_button:active span{background-image:none;background:#f7a922}div.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{width:99%}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid red!important;filter:chroma(color=red)}.cke_dialog_ui_focused,.cke_btn_over{border:1px dotted #696969!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/editor.css b/platforms/browser/www/lib/ckeditor/skins/kama/editor.css deleted file mode 100644 index 8ac84cbf..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie.css b/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie.css deleted file mode 100644 index f9059430..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie7.css b/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie7.css deleted file mode 100644 index e47ea631..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:22px}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle;padding-bottom:8px}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:3px;height:5px;padding:0;position:absolute;right:8px;top:11px;background-position:0 -1411px}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -1390px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie8.css b/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie8.css deleted file mode 100644 index 926a9ceb..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/editor_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/editor_iequirks.css b/platforms/browser/www/lib/ckeditor/skins/kama/editor_iequirks.css deleted file mode 100644 index 809e90f5..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/editor_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d3d3d3;padding:5px}.cke_hc.cke_chrome{padding:2px}.cke_inner{display:block;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-touch-callout:none;border-radius:5px;background:#d3d3d3 url(images/sprites.png) repeat-x 0 -1950px;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-webkit-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-o-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:-ms-linear-gradient(top,#fff -15px,#d3d3d3 40px);background:linear-gradient(top,#fff -15px,#d3d3d3 40px);padding:5px}.cke_float{background:#fff}.cke_float .cke_inner{padding-bottom:0}.cke_hc .cke_contents{border:1px solid black}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{white-space:normal}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:12px 12px 0 12px;border-color:transparent #efefef transparent transparent;border-style:dashed solid dashed dashed;margin:10px 0 0;font-size:0;float:right;vertical-align:bottom;cursor:se-resize;opacity:.8}.cke_resizer_ltr{margin-left:-12px}.cke_resizer_rtl{float:left;border-color:transparent transparent transparent #efefef;border-style:dashed dashed dashed solid;margin-right:-12px;cursor:sw-resize}.cke_hc .cke_resizer{width:10px;height:10px;border:1px solid #fff;margin-left:0}.cke_hc .cke_resizer_rtl{margin-right:0}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_menu_panel{padding:2px;margin:0}.cke_combopanel{border:1px solid #8f8f73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-family:Arial,Verdana,sans-serif;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;float:left;margin:0 6px 5px 0;padding:2px;background:url(images/sprites.png) repeat-x 0 -500px;background:-webkit-gradient(linear,0 0,0 100,from(#fff),to(#d3d3d3));background:-moz-linear-gradient(top,#fff,#d3d3d3 100px);background:-webkit-linear-gradient(top,#fff,#d3d3d3 100px);background:-o-linear-gradient(top,#fff,#d3d3d3 100px);background:-ms-linear-gradient(top,#fff,#d3d3d3 100px);background:linear-gradient(top,#fff,#d3d3d3 100px)}.cke_hc .cke_toolgroup{padding-right:0;margin-right:4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}.cke_rtl.cke_hc .cke_toolgroup{padding-left:0;margin-left:4px}a.cke_button{display:inline-block;height:18px;padding:2px 4px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_rtl.cke_hc .cke_button{margin:-2px -2px 0 4px}.cke_button_on{background-color:#a3d7ff}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_button_off{opacity:.7}.cke_button_disabled{opacity:.3}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{background-color:#86caff}.cke_hc a.cke_button:hover{background:black}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background-color:#dff1ff;opacity:1}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:16px;vertical-align:middle;float:left;cursor:default}.cke_hc .cke_button_label{padding:0;display:inline-block}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_button_arrow{display:inline-block;margin:7px 0 0 1px;width:0;height:0;border-width:3px;border-color:#2f2f2f transparent transparent transparent;border-style:solid dashed dashed dashed;cursor:default;vertical-align:middle}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:0 -2px 0 3px;width:auto;border:0}.cke_rtl.cke_hc .cke_button_arrow{margin:0 3px 0 -2px}.cke_toolbar_separator{float:left;border-left:solid 1px #d3d3d3;margin:3px 2px 0;height:16px}.cke_rtl .cke_toolbar_separator{border-right:solid 1px #d3d3d3;border-left:0;float:right}.cke_hc .cke_toolbar_separator{margin-left:0;width:3px}.cke_rtl.cke_hc .cke_toolbar_separator{margin:3px 0 0 2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;border:1px outset #d3d3d3;margin:11px 0 0;font-size:0;cursor:default;text-align:center}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser{border-width:1px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-width:3px;border-style:solid;border-color:transparent transparent #2f2f2f}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin:4px 2px 0 0;border-color:#2f2f2f transparent transparent}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d3d3d3;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#9d9d9d}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #ccc;background-color:#e9f5ff}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3}.cke_menubutton_on:hover,.cke_menubutton_on:focus,.cke_menubutton_on:active{border-color:#316ac5;background-color:#dff1ff}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:2px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/sprites.png);background-position:0 -1400px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-image:url(images/sprites.png);background-position:7px -1380px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity = 70);opacity:.7}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:url(images/sprites.png) 0 -100px repeat-x;float:left;padding:2px 4px 2px 6px;height:22px;margin:0 5px 5px 0;background:-moz-linear-gradient(bottom,#fff,#d3d3d3 100px);background:-webkit-gradient(linear,left bottom,left -100,from(#fff),to(#d3d3d3))}.cke_combo_off .cke_combo_button:hover,.cke_combo_off .cke_combo_button:focus,.cke_combo_off .cke_combo_button:active{background:#dff1ff;outline:0}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc .cke_combo_button{border:1px solid black;padding:1px 3px 1px 3px}.cke_hc .cke_rtl .cke_combo_button{border:1px solid black}.cke_combo_text{line-height:24px;text-overflow:ellipsis;overflow:hidden;color:#666;float:left;cursor:default;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right}.cke_combo_inlinelabel{font-style:italic;opacity:.70}.cke_combo_off .cke_combo_button:hover .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:active .cke_combo_inlinelabel,.cke_combo_off .cke_combo_button:focus .cke_combo_inlinelabel{opacity:1}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 3px;width:5px}.cke_combo_arrow{margin:9px 0 0;float:left;opacity:.70;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #2f2f2f}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:4px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{margin-top:5px;float:left}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;text-decoration:none;outline:0;border:0}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#efefef;opacity:.7;color:#000}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2256px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -2304px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2352px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -2400px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -2448px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2496px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -2544px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -2592px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -2640px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2688px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2736px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -2784px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -2832px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -2880px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -2928px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -2976px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -3024px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -3072px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3120px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -3168px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -3216px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3264px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -3312px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -3360px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -3408px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -3456px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3504px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -3552px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -3600px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3648px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -3696px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3744px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -3792px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -3840px!important}.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -3888px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -3936px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -3984px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -4032px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -4080px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2208px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4464px!important}.cke_button_off{filter:alpha(opacity = 70)}.cke_button_on{filter:alpha(opacity = 100)}.cke_button_disabled{filter:alpha(opacity = 30)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_hc .cke_button_arrow{margin-top:5px}.cke_combo_inlinelabel{filter:alpha(opacity = 70)}.cke_combo_button_off:hover .cke_combo_inlinelabel{filter:alpha(opacity = 100)}.cke_combo_button_disabled .cke_combo_inlinelabel,.cke_combo_button_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:2px outset #efefef}.cke_toolbox_collapser .cke_arrow{margin:0 1px 1px 1px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-left:2px}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{filter:alpha(opacity = 70)}.cke_resizer{filter:alpha(opacity = 80)}.cke_hc .cke_resizer{filter:none;font-size:28px}.cke_menuarrow{position:absolute;right:2px}.cke_rtl .cke_menuarrow{position:absolute;left:2px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:10px!important}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *{float:none}.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_button_arrow{vertical-align:top;display:inline-block}.cke_toolgroup,.cke_combo_button,.cke_combo_arrow,.cke_button_arrow,.cke_toolbox_collapser,.cke_resizer{background-image:url(images/sprites_ie6.png)}.cke_toolgroup{background-color:#fff;display:inline-block;padding:2px}.cke_inner{padding-top:2px;background-color:#d3d3d3;background-image:none}.cke_toolbar{margin:2px 0}.cke_rtl .cke_toolbar{margin-bottom:-1px;margin-top:-1px}.cke_toolbar_separator{vertical-align:top}.cke_toolbox{width:100%;float:left;padding-bottom:4px}.cke_rtl .cke_toolbox{margin-top:2px;margin-bottom:-4px}.cke_combo_button{background-color:#fff}.cke_rtl .cke_combo_button{padding-right:6px;padding-left:0}.cke_combo_text{line-height:21px}.cke_ltr .cke_combo_open{margin-left:-3px}.cke_combo_arrow{background-position:2px -1467px;margin:2px 0 0;border:0;width:8px;height:13px}.cke_rtl .cke_button_arrow{background-position-x:0}.cke_toolbox_collapser .cke_arrow{display:block;visibility:hidden;font-size:0;color:transparent;border:0}.cke_button_arrow{background-position:2px -1467px;margin:0;border:0;width:8px;height:15px}.cke_ltr .cke_button_arrow{background-position:0 -1467px;margin-left:-3px}.cke_toolbox_collapser{background-position:3px -1367px}.cke_toolbox_collapser_min{background-position:4px -1387px;margin:2px 0 0}.cke_rtl .cke_toolbox_collapser_min{background-position:4px -1408px}.cke_resizer{background-position:0 -1427px;width:12px;height:12px;border:0;margin:9px 0 0;vertical-align:baseline}.cke_dialog_tabs{position:absolute;top:38px;left:0}.cke_dialog_body{clear:both;margin-top:20px}a.cke_dialog_ui_button{background:url(images/sprites.png) repeat_x 0 _ 1069px}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{background-position:0 -1179px}a.cke_dialog_ui_button_ok{background:url(images/sprites.png) repeat_x 0 _ 1144px}a.cke_dialog_ui_button_cancel{background:url(images/sprites.png) repeat_x 0 _ 1105px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{background-image:none}.cke_menubutton_label{height:25px}.cke_menuarrow{background-image:url(images/sprites_ie6.png)}.cke_menuitem .cke_icon,.cke_button_icon,.cke_menuitem .cke_disabled .cke_icon,.cke_button_disabled .cke_button_icon{filter:""}.cke_menuseparator{font-size:0}.cke_colorbox{font-size:0}.cke_source{white-space:normal} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/icons.png b/platforms/browser/www/lib/ckeditor/skins/kama/icons.png deleted file mode 100644 index a041850a923cdc8fd9cf1d34b563ae883e592261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9633 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 diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/icons_hidpi.png b/platforms/browser/www/lib/ckeditor/skins/kama/icons_hidpi.png deleted file mode 100644 index 1581f600b050d577e7aa725befb4618526fda659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15510 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 diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.gif b/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.gif deleted file mode 100644 index b5d9a532742be3b80fe8fa49dc0508a929554519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47 ycmZ?wbhEHbRA69a_`tw$_3GUJ|NkrgWMO0g3g|EZ0Z7JyiLIxfgZpJTgEat4Jq%m` diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.png b/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides.png deleted file mode 100644 index 2df7a15be31234ff8dbf372be25d82aefa9e14e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQZAk@jv*DdlK%YvZ_jMFV2MhT zq{l`kLu-Lzb=94=uG8k5=U>-V_{!LEpZR09LLKLk^9#RZudwj=$1PCL`e?qxA8CaH Z40anton)%nwgSy#@O1TaS?83{1OUR^C|>{o diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png b/platforms/browser/www/lib/ckeditor/skins/kama/images/dialog_sides_rtl.png deleted file mode 100644 index b179935fa33237cb367cf6c75146a0a93412b745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQtqBEjv*Ddl63U=($f+W5?GVU z6rQmq$tj32BsnUGu_hHNOl!HcD4?)$iHf-?n~FjHJ-tkYuc96GOdsFRn<rW?*#R_> ajbYw?uK!Q}nw|g}$>8bg=d#Wzp$P!)D<w|= diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/mini.gif b/platforms/browser/www/lib/ckeditor/skins/kama/images/mini.gif deleted file mode 100644 index babc31a5d7076bac05f3bc810da079bc2bc24a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHb6ksr5_{6|4bLJTahKBO;@&yZ)Ff=rzrOjku_zwh%KUo+V7}yzf7=Qqz z)`7XIV%HtN2{T@<N)5bpdb(zFa*J3>iH7@<xsf8lg(uEQ^Q)|`T2;a#Ez7mYI@V|Z zf`XkB9*9izPfk#nz|bmMeEO<f&(fYvf}TzClfTS7omLf?-D7c2h3RF$*BxiqGsG~6 h)hqbx@yc7WGYB*B8gw>_8OTS5bp~7b$8a)O0|4X<LRtU- diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/sprites.png b/platforms/browser/www/lib/ckeditor/skins/kama/images/sprites.png deleted file mode 100644 index 5fc409d141ff1e445a064e02069a3de6bc7f2f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6117 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 diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/sprites_ie6.png b/platforms/browser/www/lib/ckeditor/skins/kama/images/sprites_ie6.png deleted file mode 100644 index 070a8cee1a9330870e9ac8eca43f997ef1cb35ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2658 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 KuqZly@$SC{8hw!f diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/images/toolbar_start.gif b/platforms/browser/www/lib/ckeditor/skins/kama/images/toolbar_start.gif deleted file mode 100644 index 94aa4abc1be94b1a11ea88ce2c875542ab424e76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmZ?wbhEHbWM&Xx_{_ktYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(zScEq)EV;3&yH|wo;EV|pzM1nfvfLP~0kBOY A-T(jq diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/readme.md b/platforms/browser/www/lib/ckeditor/skins/kama/readme.md deleted file mode 100644 index ac304db8..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -"Kama" Skin -==================== - -"Kama" is the default skin of CKEditor 3.x. -It's been ported to CKEditor 4 and fully featured. - -For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) -documentation. - -Directory Structure -------------------- - -CSS parts: -- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, -- **mainui.css**: the file contains styles of entire editor outline structures, -- **toolbar.css**: the file contains styles of the editor toolbar space (top), -- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, -- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded -until the first panel open up, -- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), -- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, -it's not loaded until the first menu open up, -- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, -- **reset.css**: the file defines the basis of style resets among all editor UI spaces, -- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, -- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - -Other parts: -- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, -- **icons/**: contains all skin defined icons, -- **images/**: contains a fill general used images. - -License -------- - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. diff --git a/platforms/browser/www/lib/ckeditor/skins/kama/skin.js b/platforms/browser/www/lib/ckeditor/skins/kama/skin.js deleted file mode 100644 index 5d2c0959..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/kama/skin.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -CKEDITOR.skin.name="kama";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; -CKEDITOR.skin.chameleon=function(e,d){function b(a){return"background:-moz-linear-gradient("+a+");background:-webkit-linear-gradient("+a+");background:-o-linear-gradient("+a+");background:-ms-linear-gradient("+a+");background:linear-gradient("+a+");"}var c,a="."+e.id;"editor"==d?c=a+" .cke_inner,"+a+" .cke_dialog_tab{background-color:$color;background:-webkit-gradient(linear,0 -15,0 40,from(#fff),to($color));"+b("top,#fff -15px,$color 40px")+"}"+a+" .cke_toolgroup{background:-webkit-gradient(linear,0 0,0 100,from(#fff),to($color));"+ -b("top,#fff,$color 100px")+"}"+a+" .cke_combo_button{background:-webkit-gradient(linear, left bottom, left -100, from(#fff), to($color));"+b("bottom,#fff,$color 100px")+"}"+a+" .cke_dialog_contents,"+a+" .cke_dialog_footer{background-color:$color !important;}"+a+" .cke_dialog_tab:hover,"+a+" .cke_dialog_tab:active,"+a+" .cke_dialog_tab:focus,"+a+" .cke_dialog_tab_selected{background-color:$color;background-image:none;}":"panel"==d&&(c=".cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton:hover .cke_menubutton_label,.cke_menubutton:focus .cke_menubutton_label,.cke_menubutton:active .cke_menubutton_label{background-color:$color !important;}.cke_menubutton_disabled:hover .cke_menubutton_label,.cke_menubutton_disabled:focus .cke_menubutton_label,.cke_menubutton_disabled:active .cke_menubutton_label{background-color: transparent !important;}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menubutton_disabled .cke_menubutton_icon{background-color:$color !important;border-color:$color !important;}.cke_menuseparator{background-color:$color !important;}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:$color !important;}"); -return c}; \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/dialog.css b/platforms/browser/www/lib/ckeditor/skins/moono/dialog.css deleted file mode 100644 index 1504938d..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/dialog.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie.css b/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie.css deleted file mode 100644 index 93cf7aed..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie7.css b/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie7.css deleted file mode 100644 index 4b98ae57..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie8.css b/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie8.css deleted file mode 100644 index 4f2edca9..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_iequirks.css b/platforms/browser/www/lib/ckeditor/skins/moono/dialog_iequirks.css deleted file mode 100644 index bb36a95d..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/dialog_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor.css deleted file mode 100644 index c21d8f8d..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor_gecko.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor_gecko.css deleted file mode 100644 index 7aa2f32c..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor_gecko.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie.css deleted file mode 100644 index 9afe7e92..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie7.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie7.css deleted file mode 100644 index ba856696..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie7.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie8.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie8.css deleted file mode 100644 index c4f4a1af..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor_ie8.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/editor_iequirks.css b/platforms/browser/www/lib/ckeditor/skins/moono/editor_iequirks.css deleted file mode 100644 index 3de6bfdb..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/editor_iequirks.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license -*/ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_button__codesnippet_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__language_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__mathjax_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2040px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2064px!important}.cke_button__uicolor_icon{background:url(icons.png) no-repeat 0 -2088px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2136px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2160px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2184px!important}.cke_button__simplebox_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2232px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_button__codesnippet_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__docprops_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__find_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__mathjax_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__placeholder_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -2016px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2040px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -2064px!important;background-size:16px!important}.cke_hidpi .cke_button__uicolor_icon{background:url(icons_hidpi.png) no-repeat 0 -2088px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2112px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -2136px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2160px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -2184px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png) no-repeat 0 -4416px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -2232px!important;background-size:16px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/icons.png b/platforms/browser/www/lib/ckeditor/skins/moono/icons.png deleted file mode 100644 index 163fd0def2d8c4d6a17c203e923dcff3ac512ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18271 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 diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/icons_hidpi.png b/platforms/browser/www/lib/ckeditor/skins/moono/icons_hidpi.png deleted file mode 100644 index c181faa9e06422f5c4cb1468f6e99201e0291ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62881 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 P0zS&}>T(q_7D4|9<nUw{ diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/arrow.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/arrow.png deleted file mode 100644 index d72b5f3b8808bd89996ef62f845164d459957a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol>!VDz;rWf@BDXjpX5LX~=X=(ZY|9>EfAH1#& z-3wIBTN30K45T@Ev~-ix<}bSOt=nC)A1Gk%>Eal|aXtBhiAd6gyIe=gyBc<MI+o8C zXr8uMpm~u(nU7JzyaNXWY8xB>zF}qKQ%F0(mNbo(!7G$6ystm-3eX4!Pgg&ebxsLQ E09R-@$^ZZW diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/close.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/close.png deleted file mode 100644 index 6a04ab5275b321ce911c4e1416df7e0184d05f51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf(g2?j*SmM`-n)12!Gi~n9zA;e z`0<k`Po6$~`ug?jw{PFRd-v}B`}dzdefs+K>$h*;zJLGz<HwIbfByXa`}g0!fB*mg z2bzHi*xA_`85#Nb_>iSUMMc%s)kQ=^Bqb$fWn~o<6oA~|;9y%@TNf7>e}Dgoh=|C@ z$mr;3CnqOwZ|}gsz|hdpn3$O4<mA-U)X=KuJwW3ON`m}A4#xmY;Stes@kvRk>67O? zeE#wc(2+oA0v!ni`CC}e12wGkba4!kkc>STSk!F5<8V;@q(cnT$uIxXbDYwnHXI20 zznl9%hr)yghbDzZvup(?cbsYBkw5jWXX+2z%?nB|&bJCE>3b9CvZkg_ddl%%sY-2p zciuhvRkQ7^EzhNOM%l6b;kVbDIBe=KwTZ9(?7(=`_OdK1&)j93&fUu|^7>}-Chzs5 z_sJ{fJWC8(mio1P_ql~`)`ur#?%8+Odfr~yz>Zjzezy%z<s@7#M5XZ0Qm=n|D(&yy S_2)n?XYh3Ob6Mw<&;$Vd#K%nl diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/close.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/close.png deleted file mode 100644 index e406c2c35ba11a410291fe484d5bb406657b62eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V0;tc6XJSh#fqyyv~uOORjaPA zT6JUf>YG5cX3Z@iTD$i4+O>Dqt-HH^{liV09&Ot6c=P5bK(uAc)2&;dZQc4Dh_-Ee zxqbV~9Xnp{-1%nb&bPaFzuUe0^S*tb_wWC5;K0{|2frOS@a^EiABPYBJAV8>5S=*j z|K!R4r%wGpefs~|v;WVX`+xrY{|guXU%veR%9a1uum8V!6X-&s03#y{4-coHAOjN< zF7?84azG>`D=R214OAv9D+@&WmX<*ETmk|DqM|?~A|b&mEX*e&!Vg415fKq-S=pfA zU_(nwIW;wHV`EcmYfF238%IZ5CnqO&cOO5$fY8vu(9p2(@W8OJkjTiem>7E}CkJO| zM^{%T7Z+D|F!1zr_ww=p0#8pbAn@_=1_B=+A73!=^Yilug8&c+3=9kcf?yB`0fJBv z2n!2~0D?#`h>nf|f@lzk0fM-=*x1;(xVU&ANC1Px#3Ud{PEJZmNls2q0fMx&bRfvc z$jZvf&dtrq$yq#0?-bDIOG<+Lf^mfyPH|QlH7z4^3rj0&8(Wb7JUqR8rcR%~VBw0D zt5&bwymi~F_wPS^_y_@CzJ7y)@87@wB@djAYS_oXz$E7B;uvCa`s(Dn{=$I*N1xw& zmuH{2J$}UvvF664p8t)Uot^w@YX3e<Efw+=kX|z7(zLwt@^@!GF7(#4`SEVgojKO~ z?|7b@>HS4MMA5#twxCv@S8$@{k82K*Q#(4=#CkFcR=T*fdPzi-erDAcjNHHLY2?{u z8&A962-^K~k93eA&xEgw=dQTCQgSj^(SkcSY^&H+_8IlaZ_V2K&rrQ^&eMkQ)$jKo z-Tcq>QD?>Nw^8pe2fz6zd3@zMhG31h-+n9WXI3n`bLUlUNZF@U3*XP;JztqFmn8A) zU0x9Ny6(c2hoAc|9(u~aV3B*^;^~i<-tU_p^7Zw}pDGir7cZD)cvUg2KF)rcPiaAs zS>%pt^@k?OCJU~-)L1=_r!MxqtQmua!EBF+7&QyoKl9Ga%}ZnKFx)8aDEj5|?FysE zq4lX>wd7837f{l=vuW$Iz**P$qi^fSbuwKrJ02!+gJF&Q)<t{Gr}WoOQVT0ywBcQO zytZ@uX0Dd9OK<u<badowmHhha(18qx4C#;kJdNqQ`gV)Hlg&~qGTq@RwscWf<|n3; zR`0wPmuE;w@Vi~#sH2@KB(3(@;&4_AZ<AGb!mnDBd6Si`IC`^eIo8}c8mpJ*oVI-N z$DX5_le+lJ>q<8ZnjeXq6B~Ozf^oT&wN%`lJ4T<@emnIwOEc2%aZRRn;?5~LYTo7h wzq#6<u$Vfvl0W6$PSdc3uj@a1{M-DGX;O1gaCJP-eNc+^boFyt=akR{0APJM!2kdN diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock-open.png deleted file mode 100644 index edbd12f3bdc10a969f350a8c482f92c224d1c466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1329 zcmV-11<v}3P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000E|Nkl<ZSi_xG zO>7fa5dP-v+ibkXKVZe+7Bwiq5s(474n?R34pjx@h*VlBB~_$|Yjdd7L)9LtD(5Ov z)dL4Ww3l9cKsgjjQ3S1!I3S^@QYDnc5QyV{@4h!Zc-L&4wX<d<AN<yy`R4m(zJ2uM z_HDdPP@i)iGLIa#s1O2%5Fqj(uvgOi&dg9+Lu(xgOk@B=1StgKu^3XejS(rqT0?0K z03A?5pzXRS*XyV?8gR7+^I#Z}01yBv1QNE5TqXl577s&+sm#HH#iK`$zE46J&z?Pd z^z!-hhj5%*{NTaL>c$2t_4=+LA^{LWAU-<k7ys<jt5<(a+ICzi)n(xLks}v`VO-d% z)#j;K{F3kA{|U^f?81bI0>JRPr(*G&FRop?p0w>aD+Msa0AK)s*3hntJ(d-po}FEc zO-<d(?c0ZhZ9@vtcW5I42*eLRU%&osrO{|;B9LLgFijYy2_Yqj2&^?s0GFqxF4LJa zv$;$L@mLH(gqNZyYiM{9WRgkPsT3%me{Xbb?Ca*{=D%>9-vE>Wocs9FrSIR(<;Gbl zFcB(^M(x)dH}aLGrIpoJuh4egx0?a2HEPW!+O7+`RzqcJ=|9UfXN3?D-t@z^f1zW? ze*fs=#eWVSI4}-oBy2klDL=7H^E*KV!cL!v1b~6gZaWSf*G09_=u+x?L&CPfj~|!m z#EGvypP9MEN<jli@85r#2YA9zM#Riep3!uN%Ii#Pjksk2z#olv8zvEy))*fjKc%#O zV^}>ga0m(Emb>kY84SQt3a_hG@bdENX0-~(b)l3(I-Sn3x2nEd4rE}5-FgLf3nGH+ zx=_s~>dhwhm?i)~DFwqYFk+f-qzp*11Aq_$wq+p|kHeA@%nXj;>jXd=28>t?W?=6v zDPbiNc*ihMYqe0W)lhG>x(2pm4M(IzHl0TL{Q0wE6B7$Z4j(S)0UGv#x1>ZO7Q?9Q z^wx4+)Y@%4dHQsDePv~S^Uj@nrOnOmN^WC-JSr_IF*Y%=@WIKG1p?63FhU5T&T4vk zk4OnqN=)YSg+G}WEGZ``u#%x$z|5F9bf^GkNFe~jhzuZ@quUe!<>l;sC&-Y00?cq6 z2g-FJ4CBqa|1E==p_GE-INkjH0eGRAq5Tc$qkk{3es4Su<m-)a07RW+-iLQQrp|AO zx*)p6nZtqj=RKhNGN6>|d;&#+0GsW$^Vh?NH@8ZqMF2=<vvZTDPhS}w88Leq^CeJ9 zMPR_6&_L(Gj(ji=9zD8QzI%5DTU(t6$>dD>+&O$WIXN9B2YYAa)!0=6trT<!14IM} zf%5wLA}STEmP!DC91+Uv>x-Is8a+24X71*TBmto_G~90p2bhvSJKF&GAbbX*%mDjI zLWYpFMlze7Ln<|s^AA%gB(vE$tu-iQ5V_BA4wgV`D5XM&@YM0+SN0T(sBLU40zf>I znJeV;SG0Fm>@BXf9!`QF;xObRQkrKAg=qlOL20<hXnGllBmoh1jU#Mzd=`3>4Kgi1 zA4T#3BCM{hEg#ssx6rSnp@Imm)>vIzTOKHZKdnv2LG#6n`M;SL_Ghz&pv#3N-|ZO@ zVZBsZZoPat-*lX99<zf1r8QnxtJqpvx;JW?lYNs9$p8Q}9S5(g)$U~^6oA$m^=1>T nb{o{^Dm`@l0K5K`%#Z&8E@ID3`%|n)00000NkvXXu0mjf=}%$% diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/lock.png deleted file mode 100644 index 1b87bbb7a14ceac0e259d75bdbc03365f01e9acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcmcK2YfO_@7zgl|J7XgE`xuonh01Nvjr*nTTY7<(-l(*+SfqVRg|f}S7??s;78ztp zX0k1txJ4X+B9|7(76PTE8=#;ILmd?4R;B^j!~z2x+8z9CvQPWvf6jSwzMPXM&u0ue z$=S)@34$PJ3K?dB6Lqj0ZNLuSs2_nKYbQn)hj_2G^*%^j+k>{Y-&LyV_V$_fcH_;P zvmhNEa~&NIJ3AM;yO-4JC5>iTtzPNveFW0ix8C2sF)(1(YB#mot---<5UuuakfEU+ z5S?yEuiw?_cJ=x_oo)~8!^6)(42FLUhW+7T%gBgjY|L`|wq<<WGBIJfbH_3{X_=a` z%*<G3XTc|5!`2qEvwPFS<FL24i;s_^mzQfmfF}y&;OPl!ui#)GG@4AKQR(!k#KZ(5 zkt-176%^oLm_(%phK2@)g}sfz9EpfPM@EK3MIDWaITjlmhQ%I_iwlpBk4j34PEL+V zNr}Vb6H-$XU^tmXN=ZvgNl#D3;ZiA-G%7V6k54C)aRdT^NF-!t!T^y7XJilo(ko;# zi9!L-kpT*Y3<@Tb3S?$dv$8S)8ZDDf&jRRl8jzh$V>0OglbH=L7z`GR!Dcf!945ee zh0SJhIBXy%hXcap<^bFSCwRPEK0j9|<O>AC{QP{8=%iRI0uZF2u&_`pE|f?L5kw3~ zBx0#lf*=y96hROvP*fz9$%<q$S#hzfq~x?*{-jjt2b$hl#-g)d)BOLqa`8iBlTRQD zMN?B#i&{Mj%+If^n9aMpFaB@Sp@FD_d8WWPPW-t1%CDtU>ApWdo)va&{wTvRRW0uB zs>XO!=Uk-==9!?5@ZAN6#Syn!*AzSWhcB_^{#}C$haF~V#>Iw??d;fVlers<?hsT# zH%g109dWEbY9Nz+^;^e3smOcyORtS@Tvg(h_M%3`t*O8C;kP>m!!7;Uj>SJmi_hG5 zZ#pk-HW(_<uFCJ@hX%q=TPx*OammKCCkDQhcu%{(hDT5Ga?`FNn4r?&xs|LQ+1C4| zVRbbzsm&=vDuQ_LMS0csJ6<2<om;!G6m!?cJforaebD}s13pT9sX=4w!;4=3)IM4m zSarQh9f{Fk9{8w^8AHnCqr7~Qpe@m+x#~SalawQ|nXayGbU8GTl<V<Z#k{EdtCJVY zOT^}9n}buPH(uTyx7BSS?798t>ix=qMW}A|^1`E2(SBSAdU|Li>Y8G$tCm(@1~=H6 z6ag5$lC;o&ImGX(B0jJPRk>h;_7e6O1LgJZU)YLj?I~aT3umymFustv(yj67&=Dm^ z?g_V&m3kVp*&AiWs4odWC9^_H_CGgi5Nm8H&$p$wuM4(gUDumDCrs~Z2E6SyLW!%& zP!I0Lm2aTnAU?{vkv)U$mKU^^qb1M{1k-Ofb_PyW@s~9{B7WB6vn4NitEC!2g!?Sd p*{oO(6}kOo)YtW8d<-4USq^e@@n6;8y}(pJ5QRvGJMp6P{{r75P22zg diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/hidpi/refresh.png deleted file mode 100644 index c6c2b86e6d1cd21bd352a54321ae13100b78e581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1842 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 diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/lock-open.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/lock-open.png deleted file mode 100644 index 04769877aa6d074e476f9560638d06cb158aaf1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0003bNkl<ZD9>Hc z&n^Q25XbTF&7uB8h{F<*UK$c{6bF(DX-V5yq<8{P)2DIiBX|hAR<{~TY$9<em9Imq zS@OHhd@?f`B1VZx=+dJ{k1h%ExISrj$Z(R3&X|lr!Yjf7H)PyWm5d}09(acx?l@*~ z;d-`1RZ`;ogg#%B1@qV3%HuB>o%h5mZ)AKROqT}ICn1K2gcrVZ2a4<}@<IX;DMM)g z6(=I?At}Ukk!4T4^lF?-FAQB)y1!t{nrEKdv}x0GPp!F?2kTaB7`oY-3N~Az4J)qa zLCHhwh86-T1fg{gE#*PcvPU+YX%Wn{8Xj4;m<NH|?z!)Vb8firp4$c^5Ro!~_L6}s vuDa%`D+Vq}dq4^i_dN6Y?@=P3Jaf+vlmhmmbAk*n00000NkvXXu0mjfJj9ZI diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/lock.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/lock.png deleted file mode 100644 index c5a14400d5ddfe1c564c7c93799c24d03f0e9618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf;Q*fy*SmM`-n)12{{8z89z1yT z=+WcHkDokw^7QG`XV0F!eEIU#t5>gIzkdJz{m-92fBpLP=g*)2|NjHELI68EJ2y8s zkS!=EC?q7r%gd{)s|%6h<KqJ|)Ya92BtJjDn3$N9l$5lzw2X|5oSdA3f`XEg5>QrC zQ&USzOJ85#+}zyO*4EC>&e74)$;rvp)z#hI-P6<4$H&Ll*VoU_FCZWwFfcGEC@3T( zBrGf}JUl!iA|f&}GAb%c^3n-Mpfw65L4F`_p#mOBpv4~P>Ak%>PCWYb^I+EhUqA)R zJzX3_BqUi68WtTk;Bh_3F0dqH=?3-5S9bp27<4=JnDRuWx-#Aadn}%KH8O@(F~l4f zV%6B5u|000zF>k}?(D_64^}eFG4tcw`tZRF@ly(tt&g5n<lkvsY`wPn!N<Vw><9kM zsLu=gzW%*|vFG*AU-=fqr?FkSs@QPm>HfukQ`A@#Ix8h7DKMl)rKBuVXo%cucmMZ^ rIRclgQu1>9uIx<t5hlx^@cbvg318?Ii9lH$ke@tV{an^LB{Ts5+fc4+ diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/images/refresh.png b/platforms/browser/www/lib/ckeditor/skins/moono/images/refresh.png deleted file mode 100644 index 1ff63c3090ab7dc443a74be76c1d7b52fabb71d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0004PNkl<Z7#Rh@ zy-QUA00+=xW|)-}gt=)ER1g`p^dU)VLqd^M7!n}_IYiLV)<4h`NK=at&Q6Uj(H1QZ z(GvG^eSSpw^!YRpHT-psLZMJ7lqz+5A{uH+g@Qt%P^v7d3n#qQ7Mm873JRslvZjd8 zJrrN{#)g`bLZvQ3pXc7UPru4|4m6C$s*2LG&~ED3-o*@OIFp&oL^@;muX!p>;p5dj z%lP`u&v$=J<Vo&t8jHG$CE;m*#?$l8!O;CUL*Jc=rkaw5*!OKL=RZY+?o%^5V#jau zN_MsFzq0i(9><2z5)lzAD*kbFD5EhFb!&D-m^J6co(0xLU+qr3iEV3kgyVg?12G;; z{1S&}Zs+utOA*o9X7*lg?dXjK7KQHXD<kRLHsz6*t#j8hk|VF9siM*l1~2~^&V`)J zx%B5ox;|))WhJGW4WaAM^x2<-djrj$FCIj!suUDTH4PD=LrX-{vP!A&AMRM*Bw=>U Qp#T5?07*qoM6N<$g14l=!T<mO diff --git a/platforms/browser/www/lib/ckeditor/skins/moono/readme.md b/platforms/browser/www/lib/ckeditor/skins/moono/readme.md deleted file mode 100644 index d086fe9b..00000000 --- a/platforms/browser/www/lib/ckeditor/skins/moono/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -"Moono" Skin -==================== - -This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor -[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by -the CKEditor team. "Moono" is maintained by the core developers. - -For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) -documentation. - -Features -------------------- -"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. -It comes with the following features: - -- Chameleon feature with brightness, -- high-contrast compatibility, -- graphics source provided in SVG. - -Directory Structure -------------------- - -CSS parts: -- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, -- **mainui.css**: the file contains styles of entire editor outline structures, -- **toolbar.css**: the file contains styles of the editor toolbar space (top), -- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, -- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded -until the first panel open up, -- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), -- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, -it's not loaded until the first menu open up, -- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, -- **reset.css**: the file defines the basis of style resets among all editor UI spaces, -- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, -- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. - -Other parts: -- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, -- **icons/**: contains all skin defined icons, -- **images/**: contains a fill general used images, -- **dev/**: contains SVG source of the skin icons. - -License -------- - -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). - -See LICENSE.md for more information. diff --git a/platforms/browser/www/lib/ckeditor/styles.js b/platforms/browser/www/lib/ckeditor/styles.js deleted file mode 100644 index 18e4316b..00000000 --- a/platforms/browser/www/lib/ckeditor/styles.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md or http://ckeditor.com/license - */ - -// This file contains style definitions that can be used by CKEditor plugins. -// -// The most common use for it is the "stylescombo" plugin, which shows a combo -// in the editor toolbar, containing all styles. Other plugins instead, like -// the div plugin, use a subset of the styles on their feature. -// -// If you don't have plugins that depend on this file, you can simply ignore it. -// Otherwise it is strongly recommended to customize this file to match your -// website requirements and design properly. - -CKEDITOR.stylesSet.add( 'default', [ - /* Block Styles */ - - // These styles are already available in the "Format" combo ("format" plugin), - // so they are not needed here by default. You may enable them to avoid - // placing the "Format" combo in the toolbar, maintaining the same features. - /* - { name: 'Paragraph', element: 'p' }, - { name: 'Heading 1', element: 'h1' }, - { name: 'Heading 2', element: 'h2' }, - { name: 'Heading 3', element: 'h3' }, - { name: 'Heading 4', element: 'h4' }, - { name: 'Heading 5', element: 'h5' }, - { name: 'Heading 6', element: 'h6' }, - { name: 'Preformatted Text',element: 'pre' }, - { name: 'Address', element: 'address' }, - */ - - { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, - { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, - { - name: 'Special Container', - element: 'div', - styles: { - padding: '5px 10px', - background: '#eee', - border: '1px solid #ccc' - } - }, - - /* Inline Styles */ - - // These are core styles available as toolbar buttons. You may opt enabling - // some of them in the Styles combo, removing them from the toolbar. - // (This requires the "stylescombo" plugin) - /* - { name: 'Strong', element: 'strong', overrides: 'b' }, - { name: 'Emphasis', element: 'em' , overrides: 'i' }, - { name: 'Underline', element: 'u' }, - { name: 'Strikethrough', element: 'strike' }, - { name: 'Subscript', element: 'sub' }, - { name: 'Superscript', element: 'sup' }, - */ - - { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, - - { name: 'Big', element: 'big' }, - { name: 'Small', element: 'small' }, - { name: 'Typewriter', element: 'tt' }, - - { name: 'Computer Code', element: 'code' }, - { name: 'Keyboard Phrase', element: 'kbd' }, - { name: 'Sample Text', element: 'samp' }, - { name: 'Variable', element: 'var' }, - - { name: 'Deleted Text', element: 'del' }, - { name: 'Inserted Text', element: 'ins' }, - - { name: 'Cited Work', element: 'cite' }, - { name: 'Inline Quotation', element: 'q' }, - - { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, - { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, - - /* Object Styles */ - - { - name: 'Styled image (left)', - element: 'img', - attributes: { 'class': 'left' } - }, - - { - name: 'Styled image (right)', - element: 'img', - attributes: { 'class': 'right' } - }, - - { - name: 'Compact table', - element: 'table', - attributes: { - cellpadding: '5', - cellspacing: '0', - border: '1', - bordercolor: '#ccc' - }, - styles: { - 'border-collapse': 'collapse' - } - }, - - { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, - { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } -] ); - diff --git a/platforms/browser/www/lib/d3/.bower.json b/platforms/browser/www/lib/d3/.bower.json deleted file mode 100644 index 5c7a0fde..00000000 --- a/platforms/browser/www/lib/d3/.bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "d3", - "version": "3.4.11", - "main": "d3.js", - "scripts": [ - "d3.js" - ], - "ignore": [ - ".DS_Store", - ".git", - ".gitignore", - ".npmignore", - ".travis.yml", - "Makefile", - "bin", - "component.json", - "index.js", - "lib", - "node_modules", - "package.json", - "src", - "test" - ], - "homepage": "https://github.com/mbostock/d3", - "_release": "3.4.11", - "_resolution": { - "type": "version", - "tag": "v3.4.11", - "commit": "9dbb2266543a6c998c3552074240efb36e4c7cab" - }, - "_source": "git://github.com/mbostock/d3.git", - "_target": "~3.4.11", - "_originalSource": "d3", - "_direct": true -} \ No newline at end of file diff --git a/platforms/browser/www/lib/d3/.spmignore b/platforms/browser/www/lib/d3/.spmignore deleted file mode 100644 index 0a673041..00000000 --- a/platforms/browser/www/lib/d3/.spmignore +++ /dev/null @@ -1,4 +0,0 @@ -bin -lib -src -test diff --git a/platforms/browser/www/lib/d3/CONTRIBUTING.md b/platforms/browser/www/lib/d3/CONTRIBUTING.md deleted file mode 100644 index 76126d5f..00000000 --- a/platforms/browser/www/lib/d3/CONTRIBUTING.md +++ /dev/null @@ -1,25 +0,0 @@ -# Contributing - -If you’re looking for ways to contribute, please [peruse open issues](https://github.com/mbostock/d3/issues?milestone=&page=1&state=open). The icebox is a good place to find ideas that are not currently in development. If you already have an idea, please check past issues to see whether your idea or a similar one was previously discussed. - -Before submitting a pull request, consider implementing a live example first, say using [bl.ocks.org](http://bl.ocks.org). Real-world use cases go a long way to demonstrating the usefulness of a proposed feature. The more complex a feature’s implementation, the more usefulness it should provide. Share your demo using the #d3js tag on Twitter or by sending it to the d3-js Google group. - -If your proposed feature does not involve changing core functionality, consider submitting it instead as a [D3 plugin](https://github.com/d3/d3-plugins). New core features should be for general use, whereas plugins are suitable for more specialized use cases. When in doubt, it’s easier to start with a plugin before “graduating” to core. - -To contribute new documentation or add examples to the gallery, just [edit the Wiki](https://github.com/mbostock/d3/wiki)! - -## How to Submit a Pull Request - -1. Click the “Fork” button to create your personal fork of the D3 repository. - -2. After cloning your fork of the D3 repository in the terminal, run `npm install` to install D3’s dependencies. - -3. Create a new branch for your new feature. For example: `git checkout -b my-awesome-feature`. A dedicated branch for your pull request means you can develop multiple features at the same time, and ensures that your pull request is stable even if you later decide to develop an unrelated feature. - -4. The `d3.js` and `d3.min.js` files are built from source files in the `src` directory. _Do not edit `d3.js` directly._ Instead, edit the source files, and then run `make` to build the generated files. - -5. Use `make test` to run tests and verify your changes. If you are adding a new feature, you should add new tests! If you are changing existing functionality, make sure the existing tests run, or update them as appropriate. - -6. Sign D3’s [Individual Contributor License Agreement](https://docs.google.com/forms/d/1CzjdBKtDuA8WeuFJinadx956xLQ4Xriv7-oDvXnZMaI/viewform). Unless you are submitting a trivial patch (such as fixing a typo), this form is needed to verify that you are able to contribute. - -7. Submit your pull request, and good luck! diff --git a/platforms/browser/www/lib/d3/LICENSE b/platforms/browser/www/lib/d3/LICENSE deleted file mode 100644 index 83013469..00000000 --- a/platforms/browser/www/lib/d3/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2010-2014, Michael Bostock -All rights reserved. - -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. - -* The name Michael Bostock may not 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 MICHAEL BOSTOCK 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. diff --git a/platforms/browser/www/lib/d3/README.md b/platforms/browser/www/lib/d3/README.md deleted file mode 100644 index eb334e27..00000000 --- a/platforms/browser/www/lib/d3/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Data-Driven Documents - -<a href="http://d3js.org"><img src="http://d3js.org/logo.svg" align="left" hspace="10" vspace="6"></a> - -**D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation. - -Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki) - -For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock). diff --git a/platforms/browser/www/lib/d3/bower.json b/platforms/browser/www/lib/d3/bower.json deleted file mode 100644 index 9f5968d2..00000000 --- a/platforms/browser/www/lib/d3/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "d3", - "version": "3.4.11", - "main": "d3.js", - "scripts": [ - "d3.js" - ], - "ignore": [ - ".DS_Store", - ".git", - ".gitignore", - ".npmignore", - ".travis.yml", - "Makefile", - "bin", - "component.json", - "index.js", - "lib", - "node_modules", - "package.json", - "src", - "test" - ] -} diff --git a/platforms/browser/www/lib/d3/composer.json b/platforms/browser/www/lib/d3/composer.json deleted file mode 100644 index bfc5b7b5..00000000 --- a/platforms/browser/www/lib/d3/composer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "mbostock/d3", - "description": "A small, free JavaScript library for manipulating documents based on data.", - "keywords": ["dom", "svg", "visualization", "js", "canvas"], - "homepage": "http://d3js.org/", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Mike Bostock", - "homepage": "http://bost.ocks.org/mike" - } - ], - "support": { - "issues": "https://github.com/mbostock/d3/issues", - "wiki": "https://github.com/mbostock/d3/wiki", - "API": "https://github.com/mbostock/d3/wiki/API-Reference", - "source": "https://github.com/mbostock/d3" - } -} diff --git a/platforms/browser/www/lib/d3/d3.js b/platforms/browser/www/lib/d3/d3.js deleted file mode 100644 index 82287776..00000000 --- a/platforms/browser/www/lib/d3/d3.js +++ /dev/null @@ -1,9233 +0,0 @@ -!function() { - var d3 = { - version: "3.4.11" - }; - if (!Date.now) Date.now = function() { - return +new Date(); - }; - var d3_arraySlice = [].slice, d3_array = function(list) { - return d3_arraySlice.call(list); - }; - var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window; - try { - d3_array(d3_documentElement.childNodes)[0].nodeType; - } catch (e) { - d3_array = function(list) { - var i = list.length, array = new Array(i); - while (i--) array[i] = list[i]; - return array; - }; - } - try { - d3_document.createElement("div").style.setProperty("opacity", 0, ""); - } catch (error) { - var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; - d3_element_prototype.setAttribute = function(name, value) { - d3_element_setAttribute.call(this, name, value + ""); - }; - d3_element_prototype.setAttributeNS = function(space, local, value) { - d3_element_setAttributeNS.call(this, space, local, value + ""); - }; - d3_style_prototype.setProperty = function(name, value, priority) { - d3_style_setProperty.call(this, name, value + "", priority); - }; - } - d3.ascending = d3_ascending; - function d3_ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined; - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } - return [ a, c ]; - }; - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (!isNaN(a = +array[i])) s += a; - } else { - while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - function d3_number(x) { - return x != null && !isNaN(x); - } - d3.mean = function(array, f) { - var s = 0, n = array.length, a, i = -1, j = n; - if (arguments.length === 1) { - while (++i < n) if (d3_number(a = array[i])) s += a; else --j; - } else { - while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j; - } - return j ? s / j : undefined; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.median = function(array, f) { - if (arguments.length > 1) array = array.map(f); - array = array.filter(d3_number); - return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined; - }; - function d3_bisector(compare) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - } - var d3_bisect = d3_bisector(d3_ascending); - d3.bisectLeft = d3_bisect.left; - d3.bisect = d3.bisectRight = d3_bisect.right; - d3.bisector = function(f) { - return d3_bisector(f.length === 1 ? function(d, x) { - return d3_ascending(f(d), x); - } : f); - }; - d3.shuffle = function(array) { - var m = array.length, t, i; - while (m) { - i = Math.random() * m-- | 0; - t = array[m], array[m] = array[i], array[i] = t; - } - return array; - }; - d3.permute = function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.pairs = function(array) { - var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; - return pairs; - }; - d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { - zip[j] = arguments[j][i]; - } - } - return zips; - }; - function d3_zipLength(d) { - return d.length; - } - d3.transpose = function(matrix) { - return d3.zip.apply(d3, matrix); - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.merge = function(arrays) { - var n = arrays.length, m, i = -1, j = 0, merged, array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - return merged; - }; - var abs = Math.abs; - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - function d3_class(ctor, properties) { - try { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } catch (e) { - ctor.prototype = properties; - } - } - d3.map = function(object) { - var map = new d3_Map(); - if (object instanceof d3_Map) object.forEach(function(key, value) { - map.set(key, value); - }); else for (var key in object) map.set(key, object[key]); - return map; - }; - function d3_Map() {} - d3_class(d3_Map, { - has: d3_map_has, - get: function(key) { - return this[d3_map_prefix + key]; - }, - set: function(key, value) { - return this[d3_map_prefix + key] = value; - }, - remove: d3_map_remove, - keys: d3_map_keys, - values: function() { - var values = []; - this.forEach(function(key, value) { - values.push(value); - }); - return values; - }, - entries: function() { - var entries = []; - this.forEach(function(key, value) { - entries.push({ - key: key, - value: value - }); - }); - return entries; - }, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]); - } - }); - var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); - function d3_map_has(key) { - return d3_map_prefix + key in this; - } - function d3_map_remove(key) { - key = d3_map_prefix + key; - return key in this && delete this[key]; - } - function d3_map_keys() { - var keys = []; - this.forEach(function(key) { - keys.push(key); - }); - return keys; - } - function d3_map_size() { - var size = 0; - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size; - return size; - } - function d3_map_empty() { - for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false; - return true; - } - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(mapType, array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); - } - } - if (mapType) { - object = mapType(); - setter = function(keyValue, values) { - object.set(keyValue, map(mapType, values, depth)); - }; - } else { - object = {}; - setter = function(keyValue, values) { - object[keyValue] = map(mapType, values, depth); - }; - } - valuesByKey.forEach(setter); - return object; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var array = [], sortKey = sortKeys[depth++]; - map.forEach(function(key, keyMap) { - array.push({ - key: key, - values: entries(keyMap, depth) - }); - }); - return sortKey ? array.sort(function(a, b) { - return sortKey(a.key, b.key); - }) : array; - } - nest.map = function(array, mapType) { - return map(mapType, array, 0); - }; - nest.entries = function(array) { - return entries(map(d3.map, array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.set = function(array) { - var set = new d3_Set(); - if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); - return set; - }; - function d3_Set() {} - d3_class(d3_Set, { - has: d3_map_has, - add: function(value) { - this[d3_map_prefix + value] = true; - return value; - }, - remove: function(value) { - value = d3_map_prefix + value; - return value in this && delete this[value]; - }, - values: d3_map_keys, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1)); - } - }); - d3.behavior = {}; - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; - } - function d3_vendorSymbol(object, name) { - if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.substring(1); - for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { - var prefixName = d3_vendorPrefixes[i] + name; - if (prefixName in object) return prefixName; - } - } - var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; - function d3_noop() {} - d3.dispatch = function() { - var dispatch = new d3_dispatch(), i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i >= 0) { - name = type.substring(i + 1); - type = type.substring(0, i); - } - if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - if (arguments.length === 2) { - if (listener == null) for (type in this) { - if (this.hasOwnProperty(type)) this[type].on(name, null); - } - return this; - } - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map(); - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.event = null; - function d3_eventPreventDefault() { - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch(), i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - return dispatch; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - var d3_subclass = {}.__proto__ ? function(object, prototype) { - object.__proto__ = prototype; - } : function(object, prototype) { - for (var property in prototype) object[property] = prototype[property]; - }; - function d3_selection(groups) { - d3_subclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = Sizzle; - d3_selectMatches = Sizzle.matchesSelector; - } - d3.selection = function() { - return d3_selectionRoot; - }; - var d3_selectionPrototype = d3.selection.prototype = []; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i, j)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return typeof selector === "function" ? selector : function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); - subgroup.parentNode = node; - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return typeof selector === "function" ? selector : function() { - return d3_selectAll(selector, this); - }; - } - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0) { - prefix = name.substring(0, i); - name = name.substring(i + 1); - } - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; - } else { - value = node.getAttribute("class"); - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; - } - return true; - } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classes(name) { - return (name + "").trim().split(/^|\s+/); - } - function d3_selection_classed(name, value) { - name = d3_selection_classes(name).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.getAttribute("class") || ""; - if (value) { - re.lastIndex = 0; - if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); - } else { - node.setAttribute("class", d3_collapse(c.replace(re, " "))); - } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name); - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }) : this.node().textContent; - }; - d3_selectionPrototype.html = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }) : this.node().innerHTML; - }; - d3_selectionPrototype.append = function(name) { - name = d3_selection_creator(name); - return this.select(function() { - return this.appendChild(name.apply(this, arguments)); - }); - }; - function d3_selection_creator(name) { - return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() { - return this.ownerDocument.createElementNS(name.space, name.local); - } : function() { - return this.ownerDocument.createElementNS(this.namespaceURI, name); - }; - } - d3_selectionPrototype.insert = function(name, before) { - name = d3_selection_creator(name); - before = d3_selection_selector(before); - return this.select(function() { - return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); - }); - }; - d3_selectionPrototype.remove = function() { - return this.each(function() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - }); - }; - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; - } - } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue; - for (i = -1; ++i < n; ) { - keyValue = key.call(node = group[i], node.__data__, i); - if (nodeByKeyValue.has(keyValue)) { - exitNodes[i] = node; - } else { - nodeByKeyValue.set(keyValue, node); - } - keyValues.push(keyValue); - } - for (i = -1; ++i < m; ) { - keyValue = key.call(groupData, nodeData = groupData[i], i); - if (node = nodeByKeyValue.get(keyValue)) { - updateNodes[i] = node; - node.__data__ = nodeData; - } else if (!dataByKeyValue.has(keyValue)) { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - dataByKeyValue.set(keyValue, nodeData); - nodeByKeyValue.remove(keyValue); - } - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.has(keyValues[i])) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - } - for (;i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - } - for (;i < n; ++i) { - exitNodes[i] = group[i]; - } - } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], value); - } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = function(value) { - return arguments.length ? this.property("__data__", value) : this.property("__data__"); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3_ascending; - return function(a, b) { - return a && b ? comparator(a.__data__, b.__data__) : !a - !b; - }; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); - } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - var args = d3_array(arguments); - callback.apply(args[0] = this, args); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function() { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; - }; - d3_selectionPrototype.size = function() { - var n = 0; - this.each(function() { - ++n; - }); - return n; - }; - function d3_selection_enter(selection) { - d3_subclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.call = d3_selectionPrototype.call; - d3_selection_enterPrototype.size = d3_selectionPrototype.size; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - d3_selection_enterPrototype.insert = function(name, before) { - if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); - return d3_selectionPrototype.insert.call(this, name, before); - }; - function d3_selection_enterInsertBefore(enter) { - var i0, j0; - return function(d, i, j) { - var group = enter[j].update, n = group.length, node; - if (j != j0) j0 = j, i0 = 0; - if (i >= i0) i0 = i + 1; - while (!(node = group[i0]) && ++i0 < n) ; - return node; - }; - } - d3_selectionPrototype.transition = function() { - var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || { - time: Date.now(), - ease: d3_ease_cubicInOut, - delay: 0, - duration: 250 - }; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) d3_transitionNode(node, i, id, transition); - subgroup.push(node); - } - } - return d3_transition(subgroups, id); - }; - d3_selectionPrototype.interrupt = function() { - return this.each(d3_selection_interrupt); - }; - function d3_selection_interrupt() { - var lock = this.__transition__; - if (lock) ++lock.active; - } - d3.select = function(node) { - var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ]; - group.parentNode = d3_documentElement; - return d3_selection([ group ]); - }; - d3.selectAll = function(nodes) { - var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes); - group.parentNode = d3_documentElement; - return d3_selection([ group ]); - }; - var d3_selectionRoot = d3.select(d3_documentElement); - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.substring(0, i); - var filter = d3_selection_onFilters.get(type); - if (filter) type = filter, wrap = d3_selection_onFilter; - function onRemove() { - var l = this[name]; - if (l) { - this.removeEventListener(type, l, l.$); - delete this[name]; - } - } - function onAdd() { - var l = wrap(listener, d3_array(arguments)); - onRemove.call(this); - this.addEventListener(type, this[name] = l, l.$ = capture); - l._ = listener; - } - function removeAll() { - var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; - for (var name in this) { - if (match = name.match(re)) { - var l = this[name]; - this.removeEventListener(match[1], l, l.$); - delete this[name]; - } - } - } - return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; - } - var d3_selection_onFilters = d3.map({ - mouseenter: "mouseover", - mouseleave: "mouseout" - }); - d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); - }); - function d3_selection_onListener(listener, argumentz) { - return function(e) { - var o = d3.event; - d3.event = e; - argumentz[0] = this.__data__; - try { - listener.apply(this, argumentz); - } finally { - d3.event = o; - } - }; - } - function d3_selection_onFilter(listener, argumentz) { - var l = d3_selection_onListener(listener, argumentz); - return function(e) { - var target = this, related = e.relatedTarget; - if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { - l.call(target, e); - } - }; - } - var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0; - function d3_event_dragSuppress() { - var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); - if (d3_event_dragSelect) { - var style = d3_documentElement.style, select = style[d3_event_dragSelect]; - style[d3_event_dragSelect] = "none"; - } - return function(suppressClick) { - w.on(name, null); - if (d3_event_dragSelect) style[d3_event_dragSelect] = select; - if (suppressClick) { - function off() { - w.on(click, null); - } - w.on(click, function() { - d3_eventPreventDefault(); - off(); - }, true); - setTimeout(off, 0); - } - }; - } - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - if (e.changedTouches) e = e.changedTouches[0]; - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, - point.y = e.clientY; - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend"); - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); - } - function dragstart(id, position, subject, move, end) { - return function() { - var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId); - if (origin) { - dragOffset = origin.apply(that, arguments); - dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; - } else { - dragOffset = [ 0, 0 ]; - } - dispatch({ - type: "dragstart" - }); - function moved() { - var position1 = position(parent, dragId), dx, dy; - if (!position1) return; - dx = position1[0] - position0[0]; - dy = position1[1] - position0[1]; - dragged |= dx | dy; - position0 = position1; - dispatch({ - type: "drag", - x: position1[0] + dragOffset[0], - y: position1[1] + dragOffset[1], - dx: dx, - dy: dy - }); - } - function ended() { - if (!position(parent, dragId)) return; - dragSubject.on(move + dragName, null).on(end + dragName, null); - dragRestore(dragged && d3.event.target === target); - dispatch({ - type: "dragend" - }); - } - }; - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - function d3_behavior_dragTouchId() { - return d3.event.changedTouches[0].identifier; - } - function d3_behavior_dragTouchSubject() { - return d3.event.target; - } - function d3_behavior_dragMouseSubject() { - return d3_window; - } - var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π; - function d3_sgn(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - function d3_cross2d(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); - } - function d3_acos(x) { - return x > 1 ? 0 : x < -1 ? π : Math.acos(x); - } - function d3_asin(x) { - return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); - } - function d3_sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - function d3_cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - function d3_tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - function d3_haversin(x) { - return (x = Math.sin(x / 2)) * x; - } - var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; - d3.interpolateZoom = function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; - var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ; - function interpolate(t) { - var s = t * S; - if (dr) { - var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); - return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; - } - return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ]; - } - interpolate.duration = S * 1e3; - return interpolate; - }; - d3.behavior.zoom = function() { - var view = { - x: 0, - y: 0, - k: 1 - }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; - function zoom(g) { - g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); - } - zoom.event = function(g) { - g.each(function() { - var dispatch = event.of(this, arguments), view1 = view; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.zoom", function() { - view = this.__chart__ || { - x: 0, - y: 0, - k: 1 - }; - zoomstarted(dispatch); - }).tween("zoom:zoom", function() { - var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = { - x: cx - l[0] * k, - y: cy - l[1] * k, - k: k - }; - zoomed(dispatch); - }; - }).each("end.zoom", function() { - zoomended(dispatch); - }); - } else { - this.__chart__ = view; - zoomstarted(dispatch); - zoomed(dispatch); - zoomended(dispatch); - } - }); - }; - zoom.translate = function(_) { - if (!arguments.length) return [ view.x, view.y ]; - view = { - x: +_[0], - y: +_[1], - k: view.k - }; - rescale(); - return zoom; - }; - zoom.scale = function(_) { - if (!arguments.length) return view.k; - view = { - x: view.x, - y: view.y, - k: +_ - }; - rescale(); - return zoom; - }; - zoom.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; - return zoom; - }; - zoom.center = function(_) { - if (!arguments.length) return center; - center = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.size = function(_) { - if (!arguments.length) return size; - size = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - function location(p) { - return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; - } - function point(l) { - return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; - } - function scaleTo(s) { - view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - view.x += p[0] - l[0]; - view.y += p[1] - l[1]; - } - function rescale() { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - view.x) / view.k; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - view.y) / view.k; - }).map(y0.invert)); - } - function zoomstarted(dispatch) { - dispatch({ - type: "zoomstart" - }); - } - function zoomed(dispatch) { - rescale(); - dispatch({ - type: "zoom", - scale: view.k, - translate: [ view.x, view.y ] - }); - } - function zoomended(dispatch) { - dispatch({ - type: "zoomend" - }); - } - function mousedowned() { - var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(); - d3_selection_interrupt.call(that); - zoomstarted(dispatch); - function moved() { - dragged = 1; - translateTo(d3.mouse(that), location0); - zoomed(dispatch); - } - function ended() { - subject.on(mousemove, null).on(mouseup, null); - dragRestore(dragged && d3.event.target === target); - zoomended(dispatch); - } - } - function touchstarted() { - var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress(); - d3_selection_interrupt.call(that); - started(); - zoomstarted(dispatch); - function relocate() { - var touches = d3.touches(that); - scale0 = view.k; - touches.forEach(function(t) { - if (t.identifier in locations0) locations0[t.identifier] = location(t); - }); - return touches; - } - function started() { - var target = d3.event.target; - d3.select(target).on(touchmove, moved).on(touchend, ended); - targets.push(target); - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - locations0[changed[i].identifier] = null; - } - var touches = relocate(), now = Date.now(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0], l = locations0[p.identifier]; - scaleTo(view.k * 2); - translateTo(p, l); - d3_eventPreventDefault(); - zoomed(dispatch); - } - touchtime = now; - } else if (touches.length > 1) { - var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; - distance0 = dx * dx + dy * dy; - } - } - function moved() { - var touches = d3.touches(that), p0, l0, p1, l1; - for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { - p1 = touches[i]; - if (l1 = locations0[p1.identifier]) { - if (l0) break; - p0 = p1, l0 = l1; - } - } - if (l1) { - var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(scale1 * scale0); - } - touchtime = null; - translateTo(p0, l0); - zoomed(dispatch); - } - function ended() { - if (d3.event.touches.length) { - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - delete locations0[changed[i].identifier]; - } - for (var identifier in locations0) { - return void relocate(); - } - } - d3.selectAll(targets).on(zoomName, null); - subject.on(mousedown, mousedowned).on(touchstart, touchstarted); - dragRestore(); - zoomended(dispatch); - } - } - function mousewheeled() { - var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), - d3_selection_interrupt.call(this), zoomstarted(dispatch); - mousewheelTimer = setTimeout(function() { - mousewheelTimer = null; - zoomended(dispatch); - }, 50); - d3_eventPreventDefault(); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(center0, translate0); - zoomed(dispatch); - } - function dblclicked() { - var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2; - zoomstarted(dispatch); - scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1)); - translateTo(p, l); - zoomed(dispatch); - zoomended(dispatch); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomInfinity = [ 0, Infinity ]; - var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); - }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return d3.event.wheelDelta; - }, "mousewheel") : (d3_behavior_zoomDelta = function() { - return -d3.event.detail; - }, "MozMousePixelScroll"); - d3.color = d3_color; - function d3_color() {} - d3_color.prototype.toString = function() { - return this.rgb() + ""; - }; - d3.hsl = d3_hsl; - function d3_hsl(h, s, l) { - return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); - } - var d3_hslPrototype = d3_hsl.prototype = new d3_color(); - d3_hslPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, this.l / k); - }; - d3_hslPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, k * this.l); - }; - d3_hslPrototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; - s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = d3_hcl; - function d3_hcl(h, c, l) { - return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); - } - var d3_hclPrototype = d3_hcl.prototype = new d3_color(); - d3_hclPrototype.brighter = function(k) { - return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.darker = function(k) { - return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - function d3_hcl_lab(h, c, l) { - if (isNaN(h)) h = 0; - if (isNaN(c)) c = 0; - return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); - } - d3.lab = d3_lab; - function d3_lab(l, a, b) { - return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - var d3_labPrototype = d3_lab.prototype = new d3_color(); - d3_labPrototype.brighter = function(k) { - return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.darker = function(k) { - return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - d3.rgb = d3_rgb; - function d3_rgb(r, g, b) { - return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); - } - function d3_rgbNumber(value) { - return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); - } - function d3_rgbString(value) { - return d3_rgbNumber(value) + ""; - } - var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); - d3_rgbPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return new d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); - }; - d3_rgbPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_rgb(k * this.r, k * this.g, k * this.b); - }; - d3_rgbPrototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_rgbPrototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - var r = 0, g = 0, b = 0, m1, m2, color; - m1 = /([a-z]+)\((.*)\)/i.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); - } - - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); - } - } - } - if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b); - if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.substring(1), 16))) { - if (format.length === 4) { - r = (color & 3840) >> 4; - r = r >> 4 | r; - g = color & 240; - g = g >> 4 | g; - b = color & 15; - b = b << 4 | b; - } else if (format.length === 7) { - r = (color & 16711680) >> 16; - g = (color & 65280) >> 8; - b = color & 255; - } - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - h = NaN; - s = l > 0 && l < 1 ? 0 : h; - } - return new d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgbNumber(value)); - }); - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - function d3_identity(d) { - return d; - } - d3.xhr = d3_xhrType(d3_identity); - function d3_xhrType(response) { - return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, - mimeType = null; - return d3_xhr(url, mimeType, response, callback); - }; - } - function d3_xhr(url, mimeType, response, callback) { - var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; - if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { - request.readyState > 3 && respond(); - }; - function respond() { - var status = request.status, result; - if (!status && request.responseText || status >= 200 && status < 300 || status === 304) { - try { - result = response.call(xhr, request); - } catch (e) { - dispatch.error.call(xhr, e); - return; - } - dispatch.load.call(xhr, result); - } else { - dispatch.error.call(xhr, request); - } - } - request.onprogress = function(event) { - var o = d3.event; - d3.event = event; - try { - dispatch.progress.call(xhr, request); - } finally { - d3.event = o; - } - }; - xhr.header = function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers[name]; - if (value == null) delete headers[name]; else headers[name] = value + ""; - return xhr; - }; - xhr.mimeType = function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return xhr; - }; - xhr.responseType = function(value) { - if (!arguments.length) return responseType; - responseType = value; - return xhr; - }; - xhr.response = function(value) { - response = value; - return xhr; - }; - [ "get", "post" ].forEach(function(method) { - xhr[method] = function() { - return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); - }; - }); - xhr.send = function(method, data, callback) { - if (arguments.length === 2 && typeof data === "function") callback = data, data = null; - request.open(method, url, true); - if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; - if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); - if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); - if (responseType != null) request.responseType = responseType; - if (callback != null) xhr.on("error", callback).on("load", function(request) { - callback(null, request); - }); - dispatch.beforesend.call(xhr, request); - request.send(data == null ? null : data); - return xhr; - }; - xhr.abort = function() { - request.abort(); - return xhr; - }; - d3.rebind(xhr, dispatch, "on"); - return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); - } - function d3_xhr_fixCallback(callback) { - return callback.length === 1 ? function(error, request) { - callback(error == null ? request : null); - } : callback; - } - d3.dsv = function(delimiter, mimeType) { - var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); - xhr.row = function(_) { - return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; - }; - return xhr; - } - function response(request) { - return dsv.parse(request.responseText); - } - function typedResponse(f) { - return function(request) { - return dsv.parse(request.responseText, f); - }; - } - dsv.parse = function(text, f) { - var o; - return dsv.parseRows(text, function(row, i) { - if (o) return o(row, i - 1); - var a = new Function("d", "return {" + row.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); - o = f ? function(row, i) { - return f(a(row), i); - } : a; - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; - function token() { - if (I >= N) return EOF; - if (eol) return eol = false, EOL; - var j = I; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.substring(j + 1, i).replace(/""/g, '"'); - } - while (I < N) { - var c = text.charCodeAt(I++), k = 1; - if (c === 10) eol = true; else if (c === 13) { - eol = true; - if (text.charCodeAt(I) === 10) ++I, ++k; - } else if (c !== delimiterCode) continue; - return text.substring(j, I - k); - } - return text.substring(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && !(a = f(a, n++))) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - if (Array.isArray(rows[0])) return dsv.formatRows(rows); - var fieldSet = new d3_Set(), fields = []; - rows.forEach(function(row) { - for (var field in row) { - if (!fieldSet.has(field)) { - fields.push(fieldSet.add(field)); - } - } - }); - return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { - return fields.map(function(field) { - return formatValue(row[field]); - }).join(delimiter); - })).join("\n"); - }; - dsv.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - }; - d3.csv = d3.dsv(",", "text/csv"); - d3.tsv = d3.dsv(" ", "text/tab-separated-values"); - d3.touch = function(container, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; - if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return d3_mousePoint(container, touch); - } - } - }; - var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) { - setTimeout(callback, 17); - }; - d3.timer = function(callback, delay, then) { - var n = arguments.length; - if (n < 2) delay = 0; - if (n < 3) then = Date.now(); - var time = then + delay, timer = { - c: callback, - t: time, - f: false, - n: null - }; - if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; - d3_timer_queueTail = timer; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - }; - function d3_timer_step() { - var now = d3_timer_mark(), delay = d3_timer_sweep() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - d3_timer_mark(); - d3_timer_sweep(); - }; - function d3_timer_mark() { - var now = Date.now(); - d3_timer_active = d3_timer_queueHead; - while (d3_timer_active) { - if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t); - d3_timer_active = d3_timer_active.n; - } - return now; - } - function d3_timer_sweep() { - var t0, t1 = d3_timer_queueHead, time = Infinity; - while (t1) { - if (t1.f) { - t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; - } else { - if (t1.t < time) time = t1.t; - t1 = (t0 = t1).n; - } - } - d3_timer_queueTail = t0; - return time; - } - function d3_format_precision(x, p) { - return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); - } - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - function d3_locale_numberFormat(locale) { - var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) { - var i = value.length, t = [], j = 0, g = locale_grouping[0]; - while (i > 0 && g > 0) { - t.push(value.substring(i -= g, i + g)); - g = locale_grouping[j = (j + 1) % locale_grouping.length]; - } - return t.reverse().join(locale_thousands); - } : d3_identity; - return function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false; - if (precision) precision = +precision.substring(1); - if (zfill || fill === "0" && align === "=") { - zfill = fill = "0"; - align = "="; - if (comma) width -= Math.floor((width - 1) / 4); - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - - case "b": - case "o": - case "x": - case "X": - if (symbol === "#") prefix = "0" + type.toLowerCase(); - - case "c": - case "d": - integer = true; - precision = 0; - break; - - case "s": - scale = -1; - type = "r"; - break; - } - if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; - if (type == "r" && !precision) type = "g"; - if (precision != null) { - if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); - } - type = d3_format_types.get(type) || d3_format_typeDefault; - var zcomma = zfill && comma; - return function(value) { - var fullSuffix = suffix; - if (integer && value % 1) return ""; - var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign; - if (scale < 0) { - var unit = d3.formatPrefix(value, precision); - value = unit.scale(value); - fullSuffix = unit.symbol + suffix; - } else { - value *= scale; - } - value = type(value, precision); - var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1); - if (!zfill && comma) before = formatGroup(before); - var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; - if (zcomma) before = formatGroup(padding + before); - negative += prefix; - value = before + after; - return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; - }; - }; - } - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; - var d3_format_types = d3.map({ - b: function(x) { - return x.toString(2); - }, - c: function(x) { - return String.fromCharCode(x); - }, - o: function(x) { - return x.toString(8); - }, - x: function(x) { - return x.toString(16); - }, - X: function(x) { - return x.toString(16).toUpperCase(); - }, - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); - } - }); - function d3_format_typeDefault(x) { - return x + ""; - } - var d3_time = d3.time = {}, d3_date = Date; - function d3_date_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_date_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_date(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_date(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); - } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); - } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_date = Date; - } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = date; - return method(utc, k)._; - } finally { - d3_date = Date; - } - }; - } - d3_time.year = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3_time.years = d3_time.year.range; - d3_time.years.utc = d3_time.year.utc.range; - d3_time.day = d3_time_interval(function(date) { - var day = new d3_date(2e3, 0); - day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3_time.days = d3_time.day.range; - d3_time.days.utc = d3_time.day.utc.range; - d3_time.dayOfYear = function(date) { - var year = d3_time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { - i = 7 - i; - var interval = d3_time[day] = d3_time_interval(function(date) { - (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3_time[day + "s"] = interval.range; - d3_time[day + "s"].utc = interval.utc.range; - d3_time[day + "OfYear"] = function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3_time.week = d3_time.sunday; - d3_time.weeks = d3_time.sunday.range; - d3_time.weeks.utc = d3_time.sunday.utc.range; - d3_time.weekOfYear = d3_time.sundayOfYear; - function d3_locale_timeFormat(locale) { - var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; - function d3_time_format(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, p, f; - while (++i < n) { - if (template.charCodeAt(i) === 37) { - string.push(template.substring(j, i)); - if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); - if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); - string.push(c); - j = i + 1; - } - } - string.push(template.substring(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0, - Z: null - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); - if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) { - date.setFullYear(d.y, 0, 1); - date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); - } else date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L); - return localZ ? date._ : date; - }; - format.toString = function() { - return template; - }; - return format; - } - function d3_time_parse(date, template, string, j) { - var c, p, t, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c === 37) { - t = template.charAt(i++); - p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - d3_time_format.utc = function(template) { - var local = d3_time_format(template); - function format(date) { - try { - d3_date = d3_date_utc; - var utc = new d3_date(); - utc._ = date; - return local(utc); - } finally { - d3_date = Date; - } - } - format.parse = function(string) { - try { - d3_date = d3_date_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_date = Date; - } - }; - format.toString = local.toString; - return format; - }; - d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; - var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); - locale_periods.forEach(function(p, i) { - d3_time_periodLookup.set(p.toLowerCase(), i); - }); - var d3_time_formats = { - a: function(d) { - return locale_shortDays[d.getDay()]; - }, - A: function(d) { - return locale_days[d.getDay()]; - }, - b: function(d) { - return locale_shortMonths[d.getMonth()]; - }, - B: function(d) { - return locale_months[d.getMonth()]; - }, - c: d3_time_format(locale_dateTime), - d: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - e: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - H: function(d, p) { - return d3_time_formatPad(d.getHours(), p, 2); - }, - I: function(d, p) { - return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); - }, - j: function(d, p) { - return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); - }, - L: function(d, p) { - return d3_time_formatPad(d.getMilliseconds(), p, 3); - }, - m: function(d, p) { - return d3_time_formatPad(d.getMonth() + 1, p, 2); - }, - M: function(d, p) { - return d3_time_formatPad(d.getMinutes(), p, 2); - }, - p: function(d) { - return locale_periods[+(d.getHours() >= 12)]; - }, - S: function(d, p) { - return d3_time_formatPad(d.getSeconds(), p, 2); - }, - U: function(d, p) { - return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d, p) { - return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); - }, - x: d3_time_format(locale_date), - X: d3_time_format(locale_time), - y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 100, p, 2); - }, - Y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); - }, - Z: d3_time_zone, - "%": function() { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - j: d3_time_parseDayOfYear, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - U: d3_time_parseWeekNumberSunday, - w: d3_time_parseWeekdayNumber, - W: d3_time_parseWeekNumberMonday, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear, - Z: d3_time_parseZone, - "%": d3_time_parseLiteralPercent - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.substring(i)); - return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.substring(i)); - return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_periodLookup.get(string.substring(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - return d3_time_format; - } - var d3_time_formatPads = { - "-": "", - _: " ", - "0": "0" - }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; - function d3_time_formatPad(value, fill, width) { - var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map(), i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - function d3_time_parseWeekdayNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 1)); - return n ? (date.w = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberSunday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i)); - return n ? (date.U = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberMonday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i)); - return n ? (date.W = +n[0], i + n[0].length) : -1; - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 4)); - return n ? (date.y = +n[0], i + n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; - } - function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = -string, - i + 5) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.m = n[0] - 1, i + n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.d = +n[0], i + n[0].length) : -1; - } - function d3_time_parseDayOfYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 3)); - return n ? (date.j = +n[0], i + n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.H = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.M = +n[0], i + n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.S = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 3)); - return n ? (date.L = +n[0], i + n[0].length) : -1; - } - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(abs(z) / 60), zm = abs(z) % 60; - return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); - } - function d3_time_parseLiteralPercent(date, string, i) { - d3_time_percentRe.lastIndex = 0; - var n = d3_time_percentRe.exec(string.substring(i, i + 1)); - return n ? i + n[0].length : -1; - } - function d3_time_formatMulti(formats) { - var n = formats.length, i = -1; - while (++i < n) formats[i][0] = this(formats[i][0]); - return function(date) { - var i = 0, f = formats[i]; - while (!f[1](date)) f = formats[++i]; - return f[0](date); - }; - } - d3.locale = function(locale) { - return { - numberFormat: d3_locale_numberFormat(locale), - timeFormat: d3_locale_timeFormat(locale) - }; - }; - var d3_locale_enUS = d3.locale({ - decimal: ".", - thousands: ",", - grouping: [ 3 ], - currency: [ "$", "" ], - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: [ "AM", "PM" ], - days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], - shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] - }); - d3.format = d3_locale_enUS.numberFormat; - d3.geo = {}; - function d3_adder() {} - d3_adder.prototype = { - s: 0, - t: 0, - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } - }; - var d3_adderTemp = new d3_adder(); - function d3_adderSum(a, b, o) { - var x = o.s = a + b, bv = x - a, av = x - bv; - o.t = a - av + (b - bv); - } - d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); - } else { - d3_geo_streamGeometry(object, listener); - } - }; - function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); - } - } - var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } - }; - var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } - }; - function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); - } - function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); - } - d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; - }; - var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); - var d3_geo_area = { - sphere: function() { - d3_geo_areaSum += 4 * π; - }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } - }; - function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), - sinφ0 = Math.sin(φ); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; - var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; - } - function d3_geo_cartesian(spherical) { - var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); - return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; - } - function d3_geo_cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - } - function d3_geo_cartesianCross(a, b) { - return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; - } - function d3_geo_cartesianAdd(a, b) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - } - function d3_geo_cartesianScale(vector, k) { - return [ vector[0] * k, vector[1] * k, vector[2] * k ]; - } - function d3_geo_cartesianNormalize(d) { - var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l; - d[1] /= l; - d[2] /= l; - } - function d3_geo_spherical(cartesian) { - return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; - } - function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; - } - d3.geo.bounds = function() { - var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; - var bound = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - bound.point = ringPoint; - bound.lineStart = ringStart; - bound.lineEnd = ringEnd; - dλSum = 0; - d3_geo_area.polygonStart(); - }, - polygonEnd: function() { - d3_geo_area.polygonEnd(); - bound.point = point; - bound.lineStart = lineStart; - bound.lineEnd = lineEnd; - if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; - range[0] = λ0, range[1] = λ1; - } - }; - function point(λ, φ) { - ranges.push(range = [ λ0 = λ, λ1 = λ ]); - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - function linePoint(λ, φ) { - var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); - if (p0) { - var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); - d3_geo_cartesianNormalize(inflection); - inflection = d3_geo_spherical(inflection); - var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; - if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = inflection[1] * d3_degrees; - if (φi > φ1) φ1 = φi; - } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = -inflection[1] * d3_degrees; - if (φi < φ0) φ0 = φi; - } else { - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - if (antimeridian) { - if (λ < λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } else { - if (λ1 >= λ0) { - if (λ < λ0) λ0 = λ; - if (λ > λ1) λ1 = λ; - } else { - if (λ > λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } - } - } else { - point(λ, φ); - } - p0 = p, λ_ = λ; - } - function lineStart() { - bound.point = linePoint; - } - function lineEnd() { - range[0] = λ0, range[1] = λ1; - bound.point = point; - p0 = null; - } - function ringPoint(λ, φ) { - if (p0) { - var dλ = λ - λ_; - dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; - } else λ__ = λ, φ__ = φ; - d3_geo_area.point(λ, φ); - linePoint(λ, φ); - } - function ringStart() { - d3_geo_area.lineStart(); - } - function ringEnd() { - ringPoint(λ__, φ__); - d3_geo_area.lineEnd(); - if (abs(dλSum) > ε) λ0 = -(λ1 = 180); - range[0] = λ0, range[1] = λ1; - p0 = null; - } - function angle(λ0, λ1) { - return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; - } - function compareRanges(a, b) { - return a[0] - b[0]; - } - function withinRange(x, range) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; - } - return function(feature) { - φ1 = λ1 = -(λ0 = φ0 = Infinity); - ranges = []; - d3.geo.stream(feature, bound); - var n = ranges.length; - if (n) { - ranges.sort(compareRanges); - for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { - b = ranges[i]; - if (withinRange(b[0], a) || withinRange(b[1], a)) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - var best = -Infinity, dλ; - for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { - b = merged[i]; - if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; - } - } - ranges = range = null; - return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; - }; - }(); - d3.geo.centroid = function(object) { - d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, d3_geo_centroid); - var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; - if (m < ε2) { - x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; - if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; - m = x * x + y * y + z * z; - if (m < ε2) return [ NaN, NaN ]; - } - return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; - }; - var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; - var d3_geo_centroid = { - sphere: d3_noop, - point: d3_geo_centroidPoint, - lineStart: d3_geo_centroidLineStart, - lineEnd: d3_geo_centroidLineEnd, - polygonStart: function() { - d3_geo_centroid.lineStart = d3_geo_centroidRingStart; - }, - polygonEnd: function() { - d3_geo_centroid.lineStart = d3_geo_centroidLineStart; - } - }; - function d3_geo_centroidPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); - } - function d3_geo_centroidPointXYZ(x, y, z) { - ++d3_geo_centroidW0; - d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; - d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; - d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; - } - function d3_geo_centroidLineStart() { - var x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroid.point = nextPoint; - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_centroidLineEnd() { - d3_geo_centroid.point = d3_geo_centroidPoint; - } - function d3_geo_centroidRingStart() { - var λ00, φ00, x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ00 = λ, φ00 = φ; - d3_geo_centroid.point = nextPoint; - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - d3_geo_centroid.lineEnd = function() { - nextPoint(λ00, φ00); - d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; - d3_geo_centroid.point = d3_geo_centroidPoint; - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); - d3_geo_centroidX2 += v * cx; - d3_geo_centroidY2 += v * cy; - d3_geo_centroidZ2 += v * cz; - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_true() { - return true; - } - function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], clip = []; - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; - } - var start = subject[0], points, point; - while (1) { - var current = start, isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - listener.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, listener); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, listener); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - listener.lineEnd(); - } - } - function d3_geo_clipPolygonLinkCircular(array) { - if (!(n = array.length)) return; - var n, i = 0, a = array[0], b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; - } - function d3_geo_clipPolygonIntersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; - this.e = entry; - this.v = false; - this.n = this.p = null; - } - function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { - return function(rotate, listener) { - var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = d3.merge(segments); - var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); - if (segments.length) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); - } else if (clipStartInside) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (polygonStarted) listener.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - listener.polygonStart(); - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - listener.polygonEnd(); - } - }; - function point(λ, φ) { - var point = rotate(λ, φ); - if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); - } - function pointLine(λ, φ) { - var point = rotate(λ, φ); - line.point(point[0], point[1]); - } - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - var segments; - var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; - function pointRing(λ, φ) { - ring.push([ λ, φ ]); - var point = rotate(λ, φ); - ringListener.point(point[0], point[1]); - } - function ringStart() { - ringListener.lineStart(); - ring = []; - } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringListener.lineEnd(); - var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; - ring.pop(); - polygon.push(ring); - ring = null; - if (!n) return; - if (clean & 1) { - segment = ringSegments[0]; - var n = segment.length - 1, i = -1, point; - if (n > 0) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); - } - return; - } - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); - } - return clip; - }; - } - function d3_geo_clipSegmentLength1(segment) { - return segment.length > 1; - } - function d3_geo_clipBufferListener() { - var lines = [], line; - return { - lineStart: function() { - lines.push(line = []); - }, - point: function(λ, φ) { - line.push([ λ, φ ]); - }, - lineEnd: d3_noop, - buffer: function() { - var buffer = lines; - lines = []; - line = null; - return buffer; - }, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - } - }; - } - function d3_geo_clipSort(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); - } - function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; - d3_geo_areaRingSum.reset(); - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], m = ring.length; - if (!m) continue; - var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); - polarAngle += antimeridian ? dλ + sdλ * τ : dλ; - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1; - } - var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); - function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - clean: function() { - return 2 - clean; - } - }; - } - function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; - } - function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point(0, φ); - listener.point(π, φ); - listener.point(π, 0); - listener.point(π, -φ); - listener.point(0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point(0, φ); - listener.point(s, φ); - } else { - listener.point(to[0], to[1]); - } - } - function d3_geo_clipCircle(radius) { - var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); - return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); - function visible(λ, φ) { - return Math.cos(λ) * Math.cos(φ) > cr; - } - function clipLine(listener) { - var point0, c0, v0, v00, clean; - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(λ, φ) { - var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; - if (!point0 && (v00 = v0 = v)) listener.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { - point1[0] += ε; - point1[1] += ε; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - listener.lineStart(); - point2 = intersect(point1, point0); - listener.point(point2[0], point2[1]); - } else { - point2 = intersect(point0, point1); - listener.point(point2[0], point2[1]); - listener.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - } else { - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { - listener.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) listener.lineEnd(); - point0 = null; - }, - clean: function() { - return clean | (v00 && v0) << 1; - } - }; - } - function intersect(a, b, two) { - var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); - var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; - if (!determinant) return !two && a; - var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); - d3_geo_cartesianAdd(A, B); - var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); - if (t2 < 0) return; - var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); - d3_geo_cartesianAdd(q, A); - q = d3_geo_spherical(q); - if (!two) return q; - var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; - if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; - var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; - if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; - if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { - var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); - d3_geo_cartesianAdd(q1, A); - return [ q, d3_geo_spherical(q1) ]; - } - } - function code(λ, φ) { - var r = smallRadius ? radius : π - radius, code = 0; - if (λ < -r) code |= 1; else if (λ > r) code |= 2; - if (φ < -r) code |= 4; else if (φ > r) code |= 8; - return code; - } - } - function d3_geom_clipLine(x0, y0, x1, y1) { - return function(line) { - var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - if (t0 > 0) line.a = { - x: ax + t0 * dx, - y: ay + t0 * dy - }; - if (t1 < 1) line.b = { - x: ax + t1 * dx, - y: ay + t1 * dy - }; - return line; - }; - } - var d3_geo_clipExtentMAX = 1e9; - d3.geo.clipExtent = function() { - var x0, y0, x1, y1, stream, clip, clipExtent = { - stream: function(output) { - if (stream) stream.valid = false; - stream = clip(output); - stream.valid = true; - return stream; - }, - extent: function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); - if (stream) stream.valid = false, stream = null; - return clipExtent; - } - }; - return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); - }; - function d3_geo_clipExtent(x0, y0, x1, y1) { - return function(listener) { - var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - listener = bufferListener; - segments = []; - polygon = []; - clean = true; - }, - polygonEnd: function() { - listener = listener_; - segments = d3.merge(segments); - var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; - if (inside || visible) { - listener.polygonStart(); - if (inside) { - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (visible) { - d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); - } - listener.polygonEnd(); - } - segments = polygon = ring = null; - } - }; - function insidePolygon(p) { - var wn = 0, n = polygon.length, y = p[1]; - for (var i = 0; i < n; ++i) { - for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { - b = v[j]; - if (a[1] <= y) { - if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; - } else { - if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; - } - a = b; - } - } - return wn !== 0; - } - function interpolate(from, to, direction, listener) { - var a = 0, a1 = 0; - if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { - do { - listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - } while ((a = (a + direction + 4) % 4) !== a1); - } else { - listener.point(to[0], to[1]); - } - } - function pointVisible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - function point(x, y) { - if (pointVisible(x, y)) listener.point(x, y); - } - var x__, y__, v__, x_, y_, v_, first, clean; - function lineStart() { - clip.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferListener.rejoin(); - segments.push(bufferListener.buffer()); - } - clip.point = point; - if (v_) listener.lineEnd(); - } - function linePoint(x, y) { - x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); - y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); - var v = pointVisible(x, y); - if (polygon) ring.push([ x, y ]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - listener.lineStart(); - listener.point(x, y); - } - } else { - if (v && v_) listener.point(x, y); else { - var l = { - a: { - x: x_, - y: y_ - }, - b: { - x: x, - y: y - } - }; - if (clipLine(l)) { - if (!v_) { - listener.lineStart(); - listener.point(l.a.x, l.a.y); - } - listener.point(l.b.x, l.b.y); - if (!v) listener.lineEnd(); - clean = false; - } else if (v) { - listener.lineStart(); - listener.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - return clip; - }; - function corner(p, direction) { - return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; - } - function compare(a, b) { - return comparePoints(a.x, b.x); - } - function comparePoints(a, b) { - var ca = corner(a, 1), cb = corner(b, 1); - return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; - } - } - function d3_geo_compose(a, b) { - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - return compose; - } - function d3_geo_conic(projectAt) { - var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); - p.parallels = function(_) { - if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; - return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); - }; - return p; - } - function d3_geo_conicEqualArea(φ0, φ1) { - var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; - function forward(λ, φ) { - var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; - return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = ρ0 - y; - return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; - }; - return forward; - } - (d3.geo.conicEqualArea = function() { - return d3_geo_conic(d3_geo_conicEqualArea); - }).raw = d3_geo_conicEqualArea; - d3.geo.albers = function() { - return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); - var point, pointStream = { - point: function(x, y) { - point = [ x, y ]; - } - }, lower48Point, alaskaPoint, hawaiiPoint; - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - point = null; - (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); - return point; - } - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; - return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); - }; - albersUsa.stream = function(stream) { - var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); - return { - point: function(x, y) { - lower48Stream.point(x, y); - alaskaStream.point(x, y); - hawaiiStream.point(x, y); - }, - sphere: function() { - lower48Stream.sphere(); - alaskaStream.sphere(); - hawaiiStream.sphere(); - }, - lineStart: function() { - lower48Stream.lineStart(); - alaskaStream.lineStart(); - hawaiiStream.lineStart(); - }, - lineEnd: function() { - lower48Stream.lineEnd(); - alaskaStream.lineEnd(); - hawaiiStream.lineEnd(); - }, - polygonStart: function() { - lower48Stream.polygonStart(); - alaskaStream.polygonStart(); - hawaiiStream.polygonStart(); - }, - polygonEnd: function() { - lower48Stream.polygonEnd(); - alaskaStream.polygonEnd(); - hawaiiStream.polygonEnd(); - } - }; - }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_); - alaska.precision(_); - hawaii.precision(_); - return albersUsa; - }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_); - alaska.scale(_ * .35); - hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; - alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - return albersUsa; - }; - return albersUsa.scale(1070); - }; - var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_pathAreaPolygon = 0; - d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; - }, - polygonEnd: function() { - d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; - d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); - } - }; - function d3_geo_pathAreaRingStart() { - var x00, y00, x0, y0; - d3_geo_pathArea.point = function(x, y) { - d3_geo_pathArea.point = nextPoint; - x00 = x0 = x, y00 = y0 = y; - }; - function nextPoint(x, y) { - d3_geo_pathAreaPolygon += y0 * x - x0 * y; - x0 = x, y0 = y; - } - d3_geo_pathArea.lineEnd = function() { - nextPoint(x00, y00); - }; - } - var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; - var d3_geo_pathBounds = { - point: d3_geo_pathBoundsPoint, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_pathBoundsPoint(x, y) { - if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; - if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; - if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; - if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; - } - function d3_geo_pathBuffer() { - var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointCircle = d3_geo_pathBufferCircle(_); - return stream; - }, - result: function() { - if (buffer.length) { - var result = buffer.join(""); - buffer = []; - return result; - } - } - }; - function point(x, y) { - buffer.push("M", x, ",", y, pointCircle); - } - function pointLineStart(x, y) { - buffer.push("M", x, ",", y); - stream.point = pointLine; - } - function pointLine(x, y) { - buffer.push("L", x, ",", y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - buffer.push("Z"); - } - return stream; - } - function d3_geo_pathBufferCircle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; - } - var d3_geo_pathCentroid = { - point: d3_geo_pathCentroidPoint, - lineStart: d3_geo_pathCentroidLineStart, - lineEnd: d3_geo_pathCentroidLineEnd, - polygonStart: function() { - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; - }, - polygonEnd: function() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; - d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; - } - }; - function d3_geo_pathCentroidPoint(x, y) { - d3_geo_centroidX0 += x; - d3_geo_centroidY0 += y; - ++d3_geo_centroidZ0; - } - function d3_geo_pathCentroidLineStart() { - var x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - } - function d3_geo_pathCentroidLineEnd() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - } - function d3_geo_pathCentroidRingStart() { - var x00, y00, x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - z = y0 * x - x0 * y; - d3_geo_centroidX2 += z * (x0 + x); - d3_geo_centroidY2 += z * (y0 + y); - d3_geo_centroidZ2 += z * 3; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - d3_geo_pathCentroid.lineEnd = function() { - nextPoint(x00, y00); - }; - } - function d3_geo_pathContext(context) { - var pointRadius = 4.5; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointRadius = _; - return stream; - }, - result: d3_noop - }; - function point(x, y) { - context.moveTo(x, y); - context.arc(x, y, pointRadius, 0, τ); - } - function pointLineStart(x, y) { - context.moveTo(x, y); - stream.point = pointLine; - } - function pointLine(x, y) { - context.lineTo(x, y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - context.closePath(); - } - return stream; - } - function d3_geo_resample(project) { - var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; - function resample(stream) { - return (maxDepth ? resampleRecursive : resampleNone)(stream); - } - function resampleNone(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - }); - } - function resampleRecursive(stream) { - var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; - var resample = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - stream.polygonStart(); - resample.lineStart = ringStart; - }, - polygonEnd: function() { - stream.polygonEnd(); - resample.lineStart = lineStart; - } - }; - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - function lineStart() { - x0 = NaN; - resample.point = linePoint; - stream.lineStart(); - } - function linePoint(λ, φ) { - var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); - resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - function lineEnd() { - resample.point = point; - stream.lineEnd(); - } - function ringStart() { - lineStart(); - resample.point = ringPoint; - resample.lineEnd = ringEnd; - } - function ringPoint(λ, φ) { - linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resample.point = linePoint; - } - function ringEnd() { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); - resample.lineEnd = lineEnd; - lineEnd(); - } - return resample; - } - function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; - if (d2 > 4 * δ2 && depth--) { - var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); - } - } - } - resample.precision = function(_) { - if (!arguments.length) return Math.sqrt(δ2); - maxDepth = (δ2 = _ * _) > 0 && 16; - return resample; - }; - return resample; - } - d3.geo.path = function() { - var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); - d3.geo.stream(object, cacheStream); - } - return contextStream.result(); - } - path.area = function(object) { - d3_geo_pathAreaSum = 0; - d3.geo.stream(object, projectStream(d3_geo_pathArea)); - return d3_geo_pathAreaSum; - }; - path.centroid = function(object) { - d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); - return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; - }; - path.bounds = function(object) { - d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); - d3.geo.stream(object, projectStream(d3_geo_pathBounds)); - return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; - }; - path.projection = function(_) { - if (!arguments.length) return projection; - projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; - return reset(); - }; - path.context = function(_) { - if (!arguments.length) return context; - contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return reset(); - }; - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - function reset() { - cacheStream = null; - return path; - } - return path.projection(d3.geo.albersUsa()).context(null); - }; - function d3_geo_pathProjectStream(project) { - var resample = d3_geo_resample(function(x, y) { - return project([ x * d3_degrees, y * d3_degrees ]); - }); - return function(stream) { - return d3_geo_projectionRadians(resample(stream)); - }; - } - d3.geo.transform = function(methods) { - return { - stream: function(stream) { - var transform = new d3_geo_transform(stream); - for (var k in methods) transform[k] = methods[k]; - return transform; - } - }; - }; - function d3_geo_transform(stream) { - this.stream = stream; - } - d3_geo_transform.prototype = { - point: function(x, y) { - this.stream.point(x, y); - }, - sphere: function() { - this.stream.sphere(); - }, - lineStart: function() { - this.stream.lineStart(); - }, - lineEnd: function() { - this.stream.lineEnd(); - }, - polygonStart: function() { - this.stream.polygonStart(); - }, - polygonEnd: function() { - this.stream.polygonEnd(); - } - }; - function d3_geo_transformPoint(stream, point) { - return { - point: point, - sphere: function() { - stream.sphere(); - }, - lineStart: function() { - stream.lineStart(); - }, - lineEnd: function() { - stream.lineEnd(); - }, - polygonStart: function() { - stream.polygonStart(); - }, - polygonEnd: function() { - stream.polygonEnd(); - } - }; - } - d3.geo.projection = d3_geo_projection; - d3.geo.projectionMutator = d3_geo_projectionMutator; - function d3_geo_projection(project) { - return d3_geo_projectionMutator(function() { - return project; - })(); - } - function d3_geo_projectionMutator(projectAt) { - var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { - x = project(x, y); - return [ x[0] * k + δx, δy - x[1] * k ]; - }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; - function projection(point) { - point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); - return [ point[0] * k + δx, δy - point[1] * k ]; - } - function invert(point) { - point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); - return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; - } - projection.stream = function(output) { - if (stream) stream.valid = false; - stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); - stream.valid = true; - return stream; - }; - projection.clipAngle = function(_) { - if (!arguments.length) return clipAngle; - preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); - return invalidate(); - }; - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; - return invalidate(); - }; - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return reset(); - }; - projection.translate = function(_) { - if (!arguments.length) return [ x, y ]; - x = +_[0]; - y = +_[1]; - return reset(); - }; - projection.center = function(_) { - if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; - λ = _[0] % 360 * d3_radians; - φ = _[1] % 360 * d3_radians; - return reset(); - }; - projection.rotate = function(_) { - if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; - δλ = _[0] % 360 * d3_radians; - δφ = _[1] % 360 * d3_radians; - δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; - return reset(); - }; - d3.rebind(projection, projectResample, "precision"); - function reset() { - projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); - var center = project(λ, φ); - δx = x - center[0] * k; - δy = y + center[1] * k; - return invalidate(); - } - function invalidate() { - if (stream) stream.valid = false, stream = null; - return projection; - } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return reset(); - }; - } - function d3_geo_projectionRadians(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - stream.point(x * d3_radians, y * d3_radians); - }); - } - function d3_geo_equirectangular(λ, φ) { - return [ λ, φ ]; - } - (d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); - }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - return forward; - }; - function d3_geo_identityRotation(λ, φ) { - return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - } - d3_geo_identityRotation.invert = d3_geo_equirectangular; - function d3_geo_rotation(δλ, δφ, δγ) { - return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; - } - function d3_geo_forwardRotationλ(δλ) { - return function(λ, φ) { - return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - }; - } - function d3_geo_rotationλ(δλ) { - var rotation = d3_geo_forwardRotationλ(δλ); - rotation.invert = d3_geo_forwardRotationλ(-δλ); - return rotation; - } - function d3_geo_rotationφγ(δφ, δγ) { - var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); - function rotation(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; - return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; - } - rotation.invert = function(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; - return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; - }; - return rotation; - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], angle, precision = 6, interpolate; - function circle() { - var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; - interpolate(null, null, 1, { - point: function(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= d3_degrees, x[1] *= d3_degrees; - } - }); - return { - type: "Polygon", - coordinates: [ ring ] - }; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return angle; - interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); - return circle; - }; - circle.precision = function(_) { - if (!arguments.length) return precision; - interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); - return circle; - }; - return circle.angle(90); - }; - function d3_geo_circleInterpolate(radius, precision) { - var cr = Math.cos(radius), sr = Math.sin(radius); - return function(from, to, direction, listener) { - var step = direction * precision; - if (from != null) { - from = d3_geo_circleAngle(cr, from); - to = d3_geo_circleAngle(cr, to); - if (direction > 0 ? from < to : from > to) from += direction * τ; - } else { - from = radius + direction * τ; - to = radius - .5 * step; - } - for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { - listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); - } - }; - } - function d3_geo_circleAngle(cr, point) { - var a = d3_geo_cartesian(point); - a[0] -= cr; - d3_geo_cartesianNormalize(a); - var angle = d3_acos(-a[1]); - return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); - } - d3.geo.distance = function(a, b) { - var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; - return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); - }; - d3.geo.graticule = function() { - var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; - function graticule() { - return { - type: "MultiLineString", - coordinates: lines() - }; - } - function lines() { - return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { - return abs(x % DX) > ε; - }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { - return abs(y % DY) > ε; - }).map(y)); - } - graticule.lines = function() { - return lines().map(function(coordinates) { - return { - type: "LineString", - coordinates: coordinates - }; - }); - }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] - }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.minorExtent(); - return graticule.majorExtent(_).minorExtent(_); - }; - graticule.majorExtent = function(_) { - if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - graticule.minorExtent = function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - graticule.step = function(_) { - if (!arguments.length) return graticule.minorStep(); - return graticule.majorStep(_).minorStep(_); - }; - graticule.majorStep = function(_) { - if (!arguments.length) return [ DX, DY ]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - graticule.minorStep = function(_) { - if (!arguments.length) return [ dx, dy ]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = d3_geo_graticuleX(y0, y1, 90); - y = d3_geo_graticuleY(x0, x1, precision); - X = d3_geo_graticuleX(Y0, Y1, 90); - Y = d3_geo_graticuleY(X0, X1, precision); - return graticule; - }; - return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); - }; - function d3_geo_graticuleX(y0, y1, dy) { - var y = d3.range(y0, y1 - ε, dy).concat(y1); - return function(x) { - return y.map(function(y) { - return [ x, y ]; - }); - }; - } - function d3_geo_graticuleY(x0, x1, dx) { - var x = d3.range(x0, x1 - ε, dx).concat(x1); - return function(y) { - return x.map(function(x) { - return [ x, y ]; - }); - }; - } - function d3_source(d) { - return d.source; - } - function d3_target(d) { - return d.target; - } - d3.geo.greatArc = function() { - var source = d3_source, source_, target = d3_target, target_; - function greatArc() { - return { - type: "LineString", - coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] - }; - } - greatArc.distance = function() { - return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _, source_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _, target_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.precision = function() { - return arguments.length ? greatArc : 0; - }; - return greatArc; - }; - d3.geo.interpolate = function(source, target) { - return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); - }; - function d3_geo_interpolate(x0, y0, x1, y1) { - var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); - var interpolate = d ? function(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; - } : function() { - return [ x0 * d3_degrees, y0 * d3_degrees ]; - }; - interpolate.distance = d; - return interpolate; - } - d3.geo.length = function(object) { - d3_geo_lengthSum = 0; - d3.geo.stream(object, d3_geo_length); - return d3_geo_lengthSum; - }; - var d3_geo_lengthSum; - var d3_geo_length = { - sphere: d3_noop, - point: d3_noop, - lineStart: d3_geo_lengthLineStart, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_lengthLineStart() { - var λ0, sinφ0, cosφ0; - d3_geo_length.point = function(λ, φ) { - λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); - d3_geo_length.point = nextPoint; - }; - d3_geo_length.lineEnd = function() { - d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; - }; - function nextPoint(λ, φ) { - var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); - d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; - } - } - function d3_geo_azimuthal(scale, angle) { - function azimuthal(λ, φ) { - var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); - return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; - } - azimuthal.invert = function(x, y) { - var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); - return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; - }; - return azimuthal; - } - var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { - return Math.sqrt(2 / (1 + cosλcosφ)); - }, function(ρ) { - return 2 * Math.asin(ρ / 2); - }); - (d3.geo.azimuthalEqualArea = function() { - return d3_geo_projection(d3_geo_azimuthalEqualArea); - }).raw = d3_geo_azimuthalEqualArea; - var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { - var c = Math.acos(cosλcosφ); - return c && c / Math.sin(c); - }, d3_identity); - (d3.geo.azimuthalEquidistant = function() { - return d3_geo_projection(d3_geo_azimuthalEquidistant); - }).raw = d3_geo_azimuthalEquidistant; - function d3_geo_conicConformal(φ0, φ1) { - var cosφ0 = Math.cos(φ0), t = function(φ) { - return Math.tan(π / 4 + φ / 2); - }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; - if (!n) return d3_geo_mercator; - function forward(λ, φ) { - if (F > 0) { - if (φ < -halfπ + ε) φ = -halfπ + ε; - } else { - if (φ > halfπ - ε) φ = halfπ - ε; - } - var ρ = F / Math.pow(t(φ), n); - return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); - return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; - }; - return forward; - } - (d3.geo.conicConformal = function() { - return d3_geo_conic(d3_geo_conicConformal); - }).raw = d3_geo_conicConformal; - function d3_geo_conicEquidistant(φ0, φ1) { - var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; - if (abs(n) < ε) return d3_geo_equirectangular; - function forward(λ, φ) { - var ρ = G - φ; - return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = G - y; - return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; - }; - return forward; - } - (d3.geo.conicEquidistant = function() { - return d3_geo_conic(d3_geo_conicEquidistant); - }).raw = d3_geo_conicEquidistant; - var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / cosλcosφ; - }, Math.atan); - (d3.geo.gnomonic = function() { - return d3_geo_projection(d3_geo_gnomonic); - }).raw = d3_geo_gnomonic; - function d3_geo_mercator(λ, φ) { - return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; - } - d3_geo_mercator.invert = function(x, y) { - return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; - }; - function d3_geo_mercatorProjection(project) { - var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; - m.scale = function() { - var v = scale.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.translate = function() { - var v = translate.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.clipExtent = function(_) { - var v = clipExtent.apply(m, arguments); - if (v === m) { - if (clipAuto = _ == null) { - var k = π * scale(), t = translate(); - clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); - } - } else if (clipAuto) { - v = null; - } - return v; - }; - return m.clipExtent(null); - } - (d3.geo.mercator = function() { - return d3_geo_mercatorProjection(d3_geo_mercator); - }).raw = d3_geo_mercator; - var d3_geo_orthographic = d3_geo_azimuthal(function() { - return 1; - }, Math.asin); - (d3.geo.orthographic = function() { - return d3_geo_projection(d3_geo_orthographic); - }).raw = d3_geo_orthographic; - var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / (1 + cosλcosφ); - }, function(ρ) { - return 2 * Math.atan(ρ); - }); - (d3.geo.stereographic = function() { - return d3_geo_projection(d3_geo_stereographic); - }).raw = d3_geo_stereographic; - function d3_geo_transverseMercator(λ, φ) { - return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; - } - d3_geo_transverseMercator.invert = function(x, y) { - return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; - }; - (d3.geo.transverseMercator = function() { - var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; - projection.center = function(_) { - return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); - }; - projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), - [ _[0], _[1], _[2] - 90 ]); - }; - return rotate([ 0, 0, 90 ]); - }).raw = d3_geo_transverseMercator; - d3.geom = {}; - function d3_geom_pointX(d) { - return d[0]; - } - function d3_geom_pointY(d) { - return d[1]; - } - d3.geom.hull = function(vertices) { - var x = d3_geom_pointX, y = d3_geom_pointY; - if (arguments.length) return hull(vertices); - function hull(data) { - if (data.length < 3) return []; - var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; - for (i = 0; i < n; i++) { - points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); - } - points.sort(d3_geom_hullOrder); - for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); - var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); - var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; - for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); - for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); - return polygon; - } - hull.x = function(_) { - return arguments.length ? (x = _, hull) : x; - }; - hull.y = function(_) { - return arguments.length ? (y = _, hull) : y; - }; - return hull; - }; - function d3_geom_hullUpper(points) { - var n = points.length, hull = [ 0, 1 ], hs = 2; - for (var i = 2; i < n; i++) { - while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; - hull[hs++] = i; - } - return hull.slice(0, hs); - } - function d3_geom_hullOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; - } - d3.geom.polygon = function(coordinates) { - d3_subclass(coordinates, d3_geom_polygonPrototype); - return coordinates; - }; - var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; - d3_geom_polygonPrototype.area = function() { - var i = -1, n = this.length, a, b = this[n - 1], area = 0; - while (++i < n) { - a = b; - b = this[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - return area * .5; - }; - d3_geom_polygonPrototype.centroid = function(k) { - var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; - if (!arguments.length) k = -1 / (6 * this.area()); - while (++i < n) { - a = b; - b = this[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - d3_geom_polygonPrototype.clip = function(subject) { - var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = this[i]; - c = input[(m = input.length - closed) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - if (closed) subject.push(subject[0]); - a = b; - } - return subject; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - function d3_geom_polygonClosed(coordinates) { - var a = coordinates[0], b = coordinates[coordinates.length - 1]; - return !(a[0] - b[0] || a[1] - b[1]); - } - var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; - function d3_geom_voronoiBeach() { - d3_geom_voronoiRedBlackNode(this); - this.edge = this.site = this.circle = null; - } - function d3_geom_voronoiCreateBeach(site) { - var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); - beach.site = site; - return beach; - } - function d3_geom_voronoiDetachBeach(beach) { - d3_geom_voronoiDetachCircle(beach); - d3_geom_voronoiBeaches.remove(beach); - d3_geom_voronoiBeachPool.push(beach); - d3_geom_voronoiRedBlackNode(beach); - } - function d3_geom_voronoiRemoveBeach(beach) { - var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { - x: x, - y: y - }, previous = beach.P, next = beach.N, disappearing = [ beach ]; - d3_geom_voronoiDetachBeach(beach); - var lArc = previous; - while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { - previous = lArc.P; - disappearing.unshift(lArc); - d3_geom_voronoiDetachBeach(lArc); - lArc = previous; - } - disappearing.unshift(lArc); - d3_geom_voronoiDetachCircle(lArc); - var rArc = next; - while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { - next = rArc.N; - disappearing.push(rArc); - d3_geom_voronoiDetachBeach(rArc); - rArc = next; - } - disappearing.push(rArc); - d3_geom_voronoiDetachCircle(rArc); - var nArcs = disappearing.length, iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiAddBeach(site) { - var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; - while (node) { - dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; - if (dxl > ε) node = node.L; else { - dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); - if (dxr > ε) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -ε) { - lArc = node.P; - rArc = node; - } else if (dxr > -ε) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - var newArc = d3_geom_voronoiCreateBeach(site); - d3_geom_voronoiBeaches.insert(lArc, newArc); - if (!lArc && !rArc) return; - if (lArc === rArc) { - d3_geom_voronoiDetachCircle(lArc); - rArc = d3_geom_voronoiCreateBeach(lArc.site); - d3_geom_voronoiBeaches.insert(newArc, rArc); - newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - return; - } - if (!rArc) { - newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - return; - } - d3_geom_voronoiDetachCircle(lArc); - d3_geom_voronoiDetachCircle(rArc); - var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { - x: (cy * hb - by * hc) / d + ax, - y: (bx * hc - cx * hb) / d + ay - }; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); - rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiLeftBreakPoint(arc, directrix) { - var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; - if (!pby2) return rfocx; - var lArc = arc.P; - if (!lArc) return -Infinity; - site = lArc.site; - var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; - if (!plby2) return lfocx; - var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - return (rfocx + lfocx) / 2; - } - function d3_geom_voronoiRightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); - var site = arc.site; - return site.y === directrix ? site.x : Infinity; - } - function d3_geom_voronoiCell(site) { - this.site = site; - this.edges = []; - } - d3_geom_voronoiCell.prototype.prepare = function() { - var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; - while (iHalfEdge--) { - edge = halfEdges[iHalfEdge].edge; - if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); - } - halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); - return halfEdges.length; - }; - function d3_geom_voronoiCloseCells(extent) { - var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; - while (iCell--) { - cell = cells[iCell]; - if (!cell || !cell.prepare()) continue; - halfEdges = cell.edges; - nHalfEdges = halfEdges.length; - iHalfEdge = 0; - while (iHalfEdge < nHalfEdges) { - end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; - start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; - if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { - halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { - x: x0, - y: abs(x2 - x0) < ε ? y2 : y1 - } : abs(y3 - y1) < ε && x1 - x3 > ε ? { - x: abs(y2 - y1) < ε ? x2 : x1, - y: y1 - } : abs(x3 - x1) < ε && y3 - y0 > ε ? { - x: x1, - y: abs(x2 - x1) < ε ? y2 : y0 - } : abs(y3 - y0) < ε && x3 - x0 > ε ? { - x: abs(y2 - y0) < ε ? x2 : x0, - y: y0 - } : null), cell.site, null)); - ++nHalfEdges; - } - } - } - } - function d3_geom_voronoiHalfEdgeOrder(a, b) { - return b.angle - a.angle; - } - function d3_geom_voronoiCircle() { - d3_geom_voronoiRedBlackNode(this); - this.x = this.y = this.arc = this.site = this.cy = null; - } - function d3_geom_voronoiAttachCircle(arc) { - var lArc = arc.P, rArc = arc.N; - if (!lArc || !rArc) return; - var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; - if (lSite === rSite) return; - var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; - var d = 2 * (ax * cy - ay * cx); - if (d >= -ε2) return; - var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; - var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = cy + Math.sqrt(x * x + y * y); - circle.cy = cy; - arc.circle = circle; - var before = null, node = d3_geom_voronoiCircles._; - while (node) { - if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { - if (node.L) node = node.L; else { - before = node.P; - break; - } - } else { - if (node.R) node = node.R; else { - before = node; - break; - } - } - } - d3_geom_voronoiCircles.insert(before, circle); - if (!before) d3_geom_voronoiFirstCircle = circle; - } - function d3_geom_voronoiDetachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; - d3_geom_voronoiCircles.remove(circle); - d3_geom_voronoiCirclePool.push(circle); - d3_geom_voronoiRedBlackNode(circle); - arc.circle = null; - } - } - function d3_geom_voronoiClipEdges(extent) { - var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; - while (i--) { - e = edges[i]; - if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { - e.a = e.b = null; - edges.splice(i, 1); - } - } - } - function d3_geom_voronoiConnectEdge(edge, extent) { - var vb = edge.b; - if (vb) return true; - var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!va) va = { - x: fx, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: fx, - y: y1 - }; - } else { - if (!va) va = { - x: fx, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: fx, - y: y0 - }; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!va) va = { - x: (y0 - fb) / fm, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: (y1 - fb) / fm, - y: y1 - }; - } else { - if (!va) va = { - x: (y1 - fb) / fm, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: (y0 - fb) / fm, - y: y0 - }; - } - } else { - if (ly < ry) { - if (!va) va = { - x: x0, - y: fm * x0 + fb - }; else if (va.x >= x1) return; - vb = { - x: x1, - y: fm * x1 + fb - }; - } else { - if (!va) va = { - x: x1, - y: fm * x1 + fb - }; else if (va.x < x0) return; - vb = { - x: x0, - y: fm * x0 + fb - }; - } - } - } - edge.a = va; - edge.b = vb; - return true; - } - function d3_geom_voronoiEdge(lSite, rSite) { - this.l = lSite; - this.r = rSite; - this.a = this.b = null; - } - function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, rSite); - d3_geom_voronoiEdges.push(edge); - if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); - if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); - d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); - d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); - return edge; - } - function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, null); - edge.a = va; - edge.b = vb; - d3_geom_voronoiEdges.push(edge); - return edge; - } - function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { - if (!edge.a && !edge.b) { - edge.a = vertex; - edge.l = lSite; - edge.r = rSite; - } else if (edge.l === rSite) { - edge.b = vertex; - } else { - edge.a = vertex; - } - } - function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { - var va = edge.a, vb = edge.b; - this.edge = edge; - this.site = lSite; - this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); - } - d3_geom_voronoiHalfEdge.prototype = { - start: function() { - return this.edge.l === this.site ? this.edge.a : this.edge.b; - }, - end: function() { - return this.edge.l === this.site ? this.edge.b : this.edge.a; - } - }; - function d3_geom_voronoiRedBlackTree() { - this._ = null; - } - function d3_geom_voronoiRedBlackNode(node) { - node.U = node.C = node.L = node.R = node.P = node.N = null; - } - d3_geom_voronoiRedBlackTree.prototype = { - insert: function(after, node) { - var parent, grandpa, uncle; - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = d3_geom_voronoiRedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - d3_geom_voronoiRedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - d3_geom_voronoiRedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - var parent = node.U, sibling, left = node.L, right = node.R, next, red; - if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); - if (parent) { - if (parent.L === node) parent.L = next; else parent.R = next; - } else { - this._ = next; - } - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - if (node) node.U = parent; - if (red) return; - if (node && node.C) { - node.C = false; - return; - } - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateRight(this, parent); - sibling = parent.L; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - d3_geom_voronoiRedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - if (node) node.C = false; - } - }; - function d3_geom_voronoiRedBlackRotateLeft(tree, node) { - var p = node, q = node.R, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; - } - function d3_geom_voronoiRedBlackRotateRight(tree, node) { - var p = node, q = node.L, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; - } - function d3_geom_voronoiRedBlackFirst(node) { - while (node.L) node = node.L; - return node; - } - function d3_geom_voronoi(sites, bbox) { - var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; - d3_geom_voronoiEdges = []; - d3_geom_voronoiCells = new Array(sites.length); - d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); - d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); - while (true) { - circle = d3_geom_voronoiFirstCircle; - if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { - if (site.x !== x0 || site.y !== y0) { - d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); - d3_geom_voronoiAddBeach(site); - x0 = site.x, y0 = site.y; - } - site = sites.pop(); - } else if (circle) { - d3_geom_voronoiRemoveBeach(circle.arc); - } else { - break; - } - } - if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); - var diagram = { - cells: d3_geom_voronoiCells, - edges: d3_geom_voronoiEdges - }; - d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; - return diagram; - } - function d3_geom_voronoiVertexOrder(a, b) { - return b.y - a.y || b.x - a.x; - } - d3.geom.voronoi = function(points) { - var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; - if (points) return voronoi(points); - function voronoi(data) { - var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; - d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { - var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { - var s = e.start(); - return [ s.x, s.y ]; - }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; - polygon.point = data[i]; - }); - return polygons; - } - function sites(data) { - return data.map(function(d, i) { - return { - x: Math.round(fx(d, i) / ε) * ε, - y: Math.round(fy(d, i) / ε) * ε, - i: i - }; - }); - } - voronoi.links = function(data) { - return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { - return edge.l && edge.r; - }).map(function(edge) { - return { - source: data[edge.l.i], - target: data[edge.r.i] - }; - }); - }; - voronoi.triangles = function(data) { - var triangles = []; - d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { - var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; - while (++j < m) { - e0 = e1; - s0 = s1; - e1 = edges[j].edge; - s1 = e1.l === site ? e1.r : e1.l; - if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { - triangles.push([ data[i], data[s0.i], data[s1.i] ]); - } - } - }); - return triangles; - }; - voronoi.x = function(_) { - return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; - }; - voronoi.y = function(_) { - return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; - }; - voronoi.clipExtent = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; - clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; - return voronoi; - }; - voronoi.size = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; - return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); - }; - return voronoi; - }; - var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; - function d3_geom_voronoiTriangleArea(a, b, c) { - return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); - } - d3.geom.delaunay = function(vertices) { - return d3.geom.voronoi().triangles(vertices); - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var x = d3_geom_pointX, y = d3_geom_pointY, compat; - if (compat = arguments.length) { - x = d3_geom_quadtreeCompatX; - y = d3_geom_quadtreeCompatY; - if (compat === 3) { - y2 = y1; - x2 = x1; - y1 = x1 = 0; - } - return quadtree(points); - } - function quadtree(data) { - var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; - if (x1 != null) { - x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; - } else { - x2_ = y2_ = -(x1_ = y1_ = Infinity); - xs = [], ys = []; - n = data.length; - if (compat) for (i = 0; i < n; ++i) { - d = data[i]; - if (d.x < x1_) x1_ = d.x; - if (d.y < y1_) y1_ = d.y; - if (d.x > x2_) x2_ = d.x; - if (d.y > y2_) y2_ = d.y; - xs.push(d.x); - ys.push(d.y); - } else for (i = 0; i < n; ++i) { - var x_ = +fx(d = data[i], i), y_ = +fy(d, i); - if (x_ < x1_) x1_ = x_; - if (y_ < y1_) y1_ = y_; - if (x_ > x2_) x2_ = x_; - if (y_ > y2_) y2_ = y_; - xs.push(x_); - ys.push(y_); - } - } - var dx = x2_ - x1_, dy = y2_ - y1_; - if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; - function insert(n, d, x, y, x1, y1, x2, y2) { - if (isNaN(x) || isNaN(y)) return; - if (n.leaf) { - var nx = n.x, ny = n.y; - if (nx != null) { - if (abs(nx - x) + abs(ny - y) < .01) { - insertChild(n, d, x, y, x1, y1, x2, y2); - } else { - var nPoint = n.point; - n.x = n.y = n.point = null; - insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } else { - n.x = x, n.y = y, n.point = d; - } - } else { - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } - function insertChild(n, d, x, y, x1, y1, x2, y2) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = sx; else x2 = sx; - if (bottom) y1 = sy; else y2 = sy; - insert(n, d, x, y, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(d) { - insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); - }; - i = -1; - if (x1 == null) { - while (++i < n) { - insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); - } - --i; - } else data.forEach(root.add); - xs = ys = data = d = null; - return root; - } - quadtree.x = function(_) { - return arguments.length ? (x = _, quadtree) : x; - }; - quadtree.y = function(_) { - return arguments.length ? (y = _, quadtree) : y; - }; - quadtree.extent = function(_) { - if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], - y2 = +_[1][1]; - return quadtree; - }; - quadtree.size = function(_) { - if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; - return quadtree; - }; - return quadtree; - }; - function d3_geom_quadtreeCompatX(d) { - return d.x; - } - function d3_geom_quadtreeCompatY(d) { - return d.y; - } - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null, - x: null, - y: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - d3.interpolateRgb = d3_interpolateRgb; - function d3_interpolateRgb(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - } - d3.interpolateObject = d3_interpolateObject; - function d3_interpolateObject(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - d3.interpolateNumber = d3_interpolateNumber; - function d3_interpolateNumber(a, b) { - b -= a = +a; - return function(t) { - return a + b * t; - }; - } - d3.interpolateString = d3_interpolateString; - function d3_interpolateString(a, b) { - var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; - a = a + "", b = b + ""; - while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { - if ((bs = bm.index) > bi) { - bs = b.substring(bi, bs); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s[i]) s[i] += bm; else s[++i] = bm; - } else { - s[++i] = null; - q.push({ - i: i, - x: d3_interpolateNumber(am, bm) - }); - } - bi = d3_interpolate_numberB.lastIndex; - } - if (bi < b.length) { - bs = b.substring(bi); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { - return b(t) + ""; - }) : function() { - return b; - } : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); - d3.interpolate = d3_interpolate; - function d3_interpolate(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - } - d3.interpolators = [ function(a, b) { - var t = typeof b; - return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); - } ]; - d3.interpolateArray = d3_interpolateArray; - function d3_interpolateArray(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); - for (;i < na; ++i) c[i] = a[i]; - for (;i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - } - var d3_ease_default = function() { - return d3_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_quad(t) { - return t * t; - } - function d3_ease_cubic(t) { - return t * t * t; - } - function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.interpolateHcl = d3_interpolateHcl; - function d3_interpolateHcl(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - } - d3.interpolateHsl = d3_interpolateHsl; - function d3_interpolateHsl(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; - if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; - }; - } - d3.interpolateLab = d3_interpolateLab; - function d3_interpolateLab(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - } - d3.interpolateRound = d3_interpolateRound; - function d3_interpolateRound(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - } - d3.transform = function(string) { - var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - if (string != null) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - } - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolateTransform = d3_interpolateTransform; - function d3_interpolateTransform(a, b) { - var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; - if (ta[0] != tb[0] || ta[1] != tb[1]) { - s.push("translate(", null, ",", null, ")"); - q.push({ - i: 1, - x: d3_interpolateNumber(ta[0], tb[0]) - }, { - i: 3, - x: d3_interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } else { - s.push(""); - } - if (ra != rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(s.pop() + "rotate(", null, ")") - 2, - x: d3_interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(s.pop() + "rotate(" + rb + ")"); - } - if (wa != wb) { - q.push({ - i: s.push(s.pop() + "skewX(", null, ")") - 2, - x: d3_interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(s.pop() + "skewX(" + wb + ")"); - } - if (ka[0] != kb[0] || ka[1] != kb[1]) { - n = s.push(s.pop() + "scale(", null, ",", null, ")"); - q.push({ - i: n - 4, - x: d3_interpolateNumber(ka[0], kb[0]) - }, { - i: n - 2, - x: d3_interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] != 1 || kb[1] != 1) { - s.push(s.pop() + "scale(" + kb + ")"); - } - n = q.length; - return function(t) { - var i = -1, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - } - function d3_uninterpolateNumber(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return (x - a) * b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return Math.max(0, Math.min(1, (x - a) * b)); - }; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (τ - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: (x - x0) / k - }; - x += padding; - } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } - } - } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, _, x2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; - if (dw * dw / theta2 < dn) { - if (dn < chargeDistance2) { - var k = quad.charge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - return true; - } - if (quad.point && dn && dn < chargeDistance2) { - var k = quad.pointCharge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight / (t.weight + s.weight)); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } - } - } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; - } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; - } - } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = typeof x === "function" ? x : +x; - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = typeof x === "function" ? x : +x; - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = +x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.chargeDistance = function(x) { - if (!arguments.length) return Math.sqrt(chargeDistance2); - chargeDistance2 = x * x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = +x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return Math.sqrt(theta2); - theta2 = x * x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - x = +x; - if (alpha) { - if (x > 0) alpha = x; else alpha = 0; - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - d3.timer(force.tick); - } - return force; - }; - force.start = function() { - var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - distances = []; - if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; - strengths = []; - if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; - charges = []; - if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; - function position(dimension, size) { - if (!neighbors) { - neighbors = new Array(n); - for (j = 0; j < n; ++j) { - neighbors[j] = []; - } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - var candidates = neighbors[i], j = -1, m = candidates.length, x; - while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x; - return Math.random() * size; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); - if (!arguments.length) return drag; - this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); - }; - function dragmove(d) { - d.px = d3.event.x, d.py = d3.event.y; - force.resume(); - } - return d3.rebind(force, event, "on"); - }; - function d3_layout_forceDragstart(d) { - d.fixed |= 2; - } - function d3_layout_forceDragend(d) { - d.fixed &= ~6; - } - function d3_layout_forceMouseover(d) { - d.fixed |= 4; - d.px = d.x, d.py = d.y; - } - function d3_layout_forceMouseout(d) { - d.fixed &= ~4; - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function hierarchy(root) { - var stack = [ root ], nodes = [], node; - root.depth = 0; - while ((node = stack.pop()) != null) { - nodes.push(node); - if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { - var n, childs, child; - while (--n >= 0) { - stack.push(child = childs[n]); - child.parent = node; - child.depth = node.depth + 1; - } - if (value) node.value = 0; - node.children = childs; - } else { - if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; - delete node.children; - } - } - d3_layout_hierarchyVisitAfter(root, function(node) { - var childs, parent; - if (sort && (childs = node.children)) childs.sort(sort); - if (value && (parent = node.parent)) parent.value += node.value; - }); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - if (value) { - d3_layout_hierarchyVisitBefore(root, function(node) { - if (node.children) node.value = 0; - }); - d3_layout_hierarchyVisitAfter(root, function(node) { - var parent; - if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; - if (parent = node.parent) parent.value += node.value; - }); - } - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.nodes = object; - object.links = d3_layout_hierarchyLinks; - return object; - } - function d3_layout_hierarchyVisitBefore(node, callback) { - var nodes = [ node ]; - while ((node = nodes.pop()) != null) { - callback(node); - if ((children = node.children) && (n = children.length)) { - var n, children; - while (--n >= 0) nodes.push(children[n]); - } - } - } - function d3_layout_hierarchyVisitAfter(node, callback) { - var nodes = [ node ], nodes2 = []; - while ((node = nodes.pop()) != null) { - nodes2.push(node); - if ((children = node.children) && (n = children.length)) { - var i = -1, n, children; - while (++i < n) nodes.push(children[i]); - } - } - while ((node = nodes2.pop()) != null) { - callback(node); - } - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; - } - } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); - } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ; - function pie(data) { - var values = data.map(function(d, i) { - return +value.call(pie, d, i); - }); - var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); - var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values); - var index = d3.range(data.length); - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - var arcs = []; - index.forEach(function(i) { - var d; - arcs[i] = { - data: data[i], - value: d = values[i], - startAngle: a, - endAngle: a += d * k - }; - }); - return arcs; - } - pie.value = function(x) { - if (!arguments.length) return value; - value = x; - return pie; - }; - pie.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return pie; - }; - pie.startAngle = function(x) { - if (!arguments.length) return startAngle; - startAngle = x; - return pie; - }; - pie.endAngle = function(x) { - if (!arguments.length) return endAngle; - endAngle = x; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var n = series.length, m = series[0].length, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (;i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; - } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } - } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { - return radius; - }; - root.x = root.y = 0; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r = +r(d.value); - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - if (padding) { - var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r -= dr; - }); - } - d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); - return nodes; - } - pack.size = function(_) { - if (!arguments.length) return size; - size = _; - return pack; - }; - pack.radius = function(_) { - if (!arguments.length) return radius; - radius = _ == null || typeof _ === "function" ? _ : +_; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return .999 * dr * dr > dx * dx + dy * dy; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); - } - } - } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); - d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; - d3_layout_hierarchyVisitBefore(root1, secondWalk); - if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { - var left = root0, right = root0, bottom = root0; - d3_layout_hierarchyVisitBefore(root0, function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); - d3_layout_hierarchyVisitBefore(root0, function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return nodes; - } - function wrapTree(root0) { - var root1 = { - A: null, - children: [ root0 ] - }, queue = [ root1 ], node1; - while ((node1 = queue.pop()) != null) { - for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { - queue.push((children[i] = child = { - _: children[i], - parent: node1, - children: (child = children[i].children) && child.slice() || [], - A: null, - a: null, - z: 0, - m: 0, - c: 0, - s: 0, - t: null, - i: i - }).a = child); - } - } - return root1.children[0]; - } - function firstWalk(v) { - var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; - if (children.length) { - d3_layout_treeShift(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - function apportion(v, w, ancestor) { - if (w) { - var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !d3_layout_treeRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= size[0]; - node.y = node.depth * size[1]; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null ? sizeNode : null; - return tree; - }; - tree.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) == null ? null : sizeNode; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(v) { - var children = v.children; - return children.length ? children[0] : v.t; - } - function d3_layout_treeRight(v) { - var children = v.children, n; - return (n = children.length) ? children[n - 1] : v.t; - } - function d3_layout_treeMove(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; - } - function d3_layout_treeShift(v) { - var shift = 0, change = 0, children = v.children, i = children.length, w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } - } - function d3_layout_treeAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; - d3_layout_hierarchyVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { - node.x = (node.x - root.x) * size[0]; - node.y = (root.y - node.y) * size[1]; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null; - return cluster; - }; - cluster.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) != null; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; - } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if (mode !== "squarify" || (score = worst(row, u)) <= best) { - remaining.pop(); - best = score; - } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; - } - } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; - } - children.forEach(squarify); - } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); - } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; - } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = 0; - root.y = 0; - root.dx = size[0]; - root.dy = size[1]; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], - padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - treemap.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function() { - var random = d3.random.normal.apply(d3, arguments); - return function() { - return Math.exp(random()); - }; - }, - bates: function(m) { - var random = d3.random.irwinHall(m); - return function() { - return random() / m; - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s; - }; - } - }; - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - return domain; - } - function d3_scale_niceStep(step) { - return step ? { - floor: function(x) { - return Math.floor(x / step) * step; - }, - ceil: function(x) { - return Math.ceil(x / step) * step; - } - } : d3_scale_niceIdentity; - } - var d3_scale_niceIdentity = { - floor: d3_identity, - ceil: d3_identity - }; - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3_interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3_interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - d3_scale_linearNice(domain, m); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(domain, m) { - return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - } - function d3_scale_linearTickRange(domain, m) { - if (m == null) m = 10; - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m, format) { - var range = d3_scale_linearTickRange(domain, m); - if (format) { - var match = d3_format_re.exec(format); - match.shift(); - if (match[8] === "s") { - var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); - if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); - match[8] = "f"; - format = d3.format(match.join("")); - return function(d) { - return format(prefix.scale(d)) + prefix.symbol; - }; - } - if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); - format = match.join(""); - } else { - format = ",." + d3_scale_linearPrecision(range[2]) + "f"; - } - return d3.format(format); - } - var d3_scale_linearFormatSignificant = { - s: 1, - g: 1, - p: 1, - r: 1, - e: 1 - }; - function d3_scale_linearPrecision(value) { - return -Math.floor(Math.log(value) / Math.LN10 + .01); - } - function d3_scale_linearFormatPrecision(type, range) { - var p = d3_scale_linearPrecision(range[2]); - return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); - }; - function d3_scale_log(linear, base, positive, domain) { - function log(x) { - return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); - } - function pow(x) { - return positive ? Math.pow(base, x) : -Math.pow(base, -x); - } - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - positive = x[0] >= 0; - linear.domain((domain = x.map(Number)).map(log)); - return scale; - }; - scale.base = function(_) { - if (!arguments.length) return base; - base = +_; - linear.domain(domain.map(log)); - return scale; - }; - scale.nice = function() { - var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); - linear.domain(niced); - domain = niced.map(pow); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; - if (isFinite(j - i)) { - if (positive) { - for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } else { - ticks.push(pow(i)); - for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (!arguments.length) return d3_scale_logFormat; - if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); - var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, - Math.floor), e; - return function(d) { - return d / pow(f(log(d) + e)) <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), base, positive, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { - floor: function(x) { - return -Math.ceil(-x); - }, - ceil: function(x) { - return -Math.floor(-x); - } - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); - }; - function d3_scale_pow(linear, exponent, domain) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - linear.domain((domain = x.map(Number)).map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - return scale.domain(d3_scale_linearNice(domain, m)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - linear.domain(domain.map(powp)); - return scale; - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map(); - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding); - range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; - range = steps(start + Math.round(error / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); - var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); - var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); - var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.filter(d3_number).sort(d3_ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - y = y < 0 ? NaN : y / kx + x0; - return [ y, y + 1 / kx ]; - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - if (x <= x) return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return [ domain[y - 1], domain[y] ]; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function arc() { - var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, - a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); - return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_line(projection) { - var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - step: d3_svg_lineStep, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.join("L"); - } - function d3_svg_lineLinearClosed(points) { - return d3_svg_lineLinear(points) + "Z"; - } - function d3_svg_lineStep(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); - if (n > 1) path.push("H", p[0]); - return path.join(""); - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), - points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - points.push(points[n - 1]); - while (++i <= n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - points.pop(); - path.push("L", pi); - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (abs(d) < ε) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] + d3_svg_arcOffset; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordRadius(d) { - return d.radius; - } - d3.svg.diagonal = function() { - var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / π); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); - function d3_transition(groups, id) { - d3_subclass(groups, d3_transitionPrototype); - groups.id = id; - return groups; - } - var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3_transitionPrototype.empty = d3_selectionPrototype.empty; - d3_transitionPrototype.node = d3_selectionPrototype.node; - d3_transitionPrototype.size = d3_selectionPrototype.size; - d3.transition = function(selection) { - return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition(); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var id = this.id, subgroups = [], subgroup, subnode, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, id, node.__transition__[id]); - subgroup.push(subnode); - } else { - subgroup.push(null); - } - } - } - return d3_transition(subgroups, id); - }; - d3_transitionPrototype.selectAll = function(selector) { - var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - transition = node.__transition__[id]; - subnodes = selector.call(node, node.__data__, i, j); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition); - subgroup.push(subnode); - } - } - } - } - return d3_transition(subgroups, id); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_transition(subgroups, this.id); - }; - d3_transitionPrototype.tween = function(name, tween) { - var id = this.id; - if (arguments.length < 2) return this.node().__transition__[id].tween.get(name); - return d3_selection_each(this, tween == null ? function(node) { - node.__transition__[id].tween.remove(name); - } : function(node) { - node.__transition__[id].tween.set(name, tween); - }); - }; - function d3_transition_tween(groups, name, value, tween) { - var id = groups.id; - return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j))); - } : (value = tween(value), function(node) { - node.__transition__[id].tween.set(name, value); - })); - } - d3_transitionPrototype.attr = function(nameNS, value) { - if (arguments.length < 2) { - for (value in nameNS) this.attr(value, nameNS[value]); - return this; - } - var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrTween(b) { - return b == null ? attrNull : (b += "", function() { - var a = this.getAttribute(name), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttribute(name, i(t)); - }); - }); - } - function attrTweenNS(b) { - return b == null ? attrNullNS : (b += "", function() { - var a = this.getAttributeNS(name.space, name.local), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttributeNS(name.space, name.local, i(t)); - }); - }); - } - return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.style(priority, name[priority], value); - return this; - } - priority = ""; - } - function styleNull() { - this.style.removeProperty(name); - } - function styleString(b) { - return b == null ? styleNull : (b += "", function() { - var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i; - return a !== b && (i = d3_interpolate(a, b), function(t) { - this.style.setProperty(name, i(t), priority); - }); - }); - } - return d3_transition_tween(this, "style." + name, value, styleString); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name)); - return f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - } - return this.tween("style." + name, styleTween); - }; - d3_transitionPrototype.text = function(value) { - return d3_transition_tween(this, "text", value, d3_transition_text); - }; - function d3_transition_text(b) { - if (b == null) b = ""; - return function() { - this.textContent = b; - }; - } - d3_transitionPrototype.remove = function() { - return this.each("end.transition", function() { - var p; - if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.ease = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].ease; - if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { - node.__transition__[id].ease = value; - }); - }; - d3_transitionPrototype.delay = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].delay; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].delay = +value.call(node, node.__data__, i, j); - } : (value = +value, function(node) { - node.__transition__[id].delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].duration; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); - } : (value = Math.max(1, value), function(node) { - node.__transition__[id].duration = value; - })); - }; - d3_transitionPrototype.each = function(type, listener) { - var id = this.id; - if (arguments.length < 2) { - var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node.__transition__[id]; - type.call(node, node.__data__, i, j); - }); - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; - } else { - d3_selection_each(this, function(node) { - var transition = node.__transition__[id]; - (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener); - }); - } - return this; - }; - d3_transitionPrototype.transition = function() { - var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition; - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if (node = group[i]) { - transition = Object.create(node.__transition__[id0]); - transition.delay += transition.duration; - d3_transitionNode(node, i, id1, transition); - } - subgroup.push(node); - } - } - return d3_transition(subgroups, id1); - }; - function d3_transitionNode(node, i, id, inherit) { - var lock = node.__transition__ || (node.__transition__ = { - active: 0, - count: 0 - }), transition = lock[id]; - if (!transition) { - var time = inherit.time; - transition = lock[id] = { - tween: new d3_Map(), - time: time, - ease: inherit.ease, - delay: inherit.delay, - duration: inherit.duration - }; - ++lock.count; - d3.timer(function(elapsed) { - var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = []; - timer.t = delay + time; - if (delay <= elapsed) return start(elapsed - delay); - timer.c = start; - function start(elapsed) { - if (lock.active > id) return stop(); - lock.active = id; - transition.event && transition.event.start.call(node, d, i); - transition.tween.forEach(function(key, value) { - if (value = value.call(node, d, i)) { - tweened.push(value); - } - }); - d3.timer(function() { - timer.c = tick(elapsed || 1) ? d3_true : tick; - return 1; - }, 0, time); - } - function tick(elapsed) { - if (lock.active !== id) return stop(); - var t = elapsed / duration, e = ease(t), n = tweened.length; - while (n > 0) { - tweened[--n].call(node, e); - } - if (t >= 1) { - transition.event && transition.event.end.call(node, d, i); - return stop(); - } - } - function stop() { - if (--lock.count) delete lock[id]; else delete node.__transition__; - return 1; - } - }, 0, time); - } - } - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); - var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), - d3.transition(path)); - tickEnter.append("line"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); - switch (orient) { - case "bottom": - { - tickTransform = d3_svg_axisX; - lineEnter.attr("y2", innerTickSize); - textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding); - lineUpdate.attr("x2", 0).attr("y2", innerTickSize); - textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding); - text.attr("dy", ".71em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize); - break; - } - - case "top": - { - tickTransform = d3_svg_axisX; - lineEnter.attr("y2", -innerTickSize); - textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); - lineUpdate.attr("x2", 0).attr("y2", -innerTickSize); - textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); - text.attr("dy", "0em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize); - break; - } - - case "left": - { - tickTransform = d3_svg_axisY; - lineEnter.attr("x2", -innerTickSize); - textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)); - lineUpdate.attr("x2", -innerTickSize).attr("y2", 0); - textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0); - text.attr("dy", ".32em").style("text-anchor", "end"); - pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize); - break; - } - - case "right": - { - tickTransform = d3_svg_axisY; - lineEnter.attr("x2", innerTickSize); - textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding); - lineUpdate.attr("x2", innerTickSize).attr("y2", 0); - textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0); - text.attr("dy", ".32em").style("text-anchor", "start"); - pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize); - break; - } - } - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function(d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1); - } - tickEnter.call(tickTransform, scale0); - tickUpdate.call(tickTransform, scale1); - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x) { - var n = arguments.length; - if (!n) return innerTickSize; - innerTickSize = +x; - outerTickSize = +arguments[n - 1]; - return axis; - }; - axis.innerTickSize = function(x) { - if (!arguments.length) return innerTickSize; - innerTickSize = +x; - return axis; - }; - axis.outerTickSize = function(x) { - if (!arguments.length) return outerTickSize; - outerTickSize = +x; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function() { - return arguments.length && axis; - }; - return axis; - }; - var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { - top: 1, - right: 1, - bottom: 1, - left: 1 - }; - function d3_svg_axisX(selection, x) { - selection.attr("transform", function(d) { - return "translate(" + x(d) + ",0)"; - }); - } - function d3_svg_axisY(selection, y) { - selection.attr("transform", function(d) { - return "translate(0," + y(d) + ")"; - }); - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; - function brush(g) { - g.each(function() { - var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - var background = g.selectAll(".background").data([ 0 ]); - background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); - var resize = g.selectAll(".resize").data(resizes, d3_identity); - resize.exit().remove(); - resize.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - resize.style("display", brush.empty() ? "none" : null); - var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; - if (x) { - range = d3_scaleRange(x); - backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); - redrawX(gUpdate); - } - if (y) { - range = d3_scaleRange(y); - backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); - redrawY(gUpdate); - } - redraw(gUpdate); - }); - } - brush.event = function(g) { - g.each(function() { - var event_ = event.of(this, arguments), extent1 = { - x: xExtent, - y: yExtent, - i: xExtentDomain, - j: yExtentDomain - }, extent0 = this.__chart__ || extent1; - this.__chart__ = extent1; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.brush", function() { - xExtentDomain = extent0.i; - yExtentDomain = extent0.j; - xExtent = extent0.x; - yExtent = extent0.y; - event_({ - type: "brushstart" - }); - }).tween("brush:brush", function() { - var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); - xExtentDomain = yExtentDomain = null; - return function(t) { - xExtent = extent1.x = xi(t); - yExtent = extent1.y = yi(t); - event_({ - type: "brush", - mode: "resize" - }); - }; - }).each("end.brush", function() { - xExtentDomain = extent1.i; - yExtentDomain = extent1.j; - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - }); - } else { - event_({ - type: "brushstart" - }); - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - } - }); - }; - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", xExtent[0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); - } - function redrawY(g) { - g.select(".extent").attr("y", yExtent[0]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset; - var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (d3.event.changedTouches) { - w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); - } else { - w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); - } - g.interrupt().selectAll("*").interrupt(); - if (dragging) { - origin[0] = xExtent[0] - origin[0]; - origin[1] = yExtent[0] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; - origin[0] = xExtent[ex]; - origin[1] = yExtent[ey]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= xExtent[1]; - origin[1] -= yExtent[1]; - dragging = 2; - } - d3_eventPreventDefault(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += xExtent[1]; - origin[1] += yExtent[1]; - dragging = 0; - d3_eventPreventDefault(); - } - } - function brushmove() { - var point = d3.mouse(target), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; - origin[0] = xExtent[+(point[0] < center[0])]; - origin[1] = yExtent[+(point[1] < center[1])]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); - } - } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; - } - min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; - if (dragging) { - max = (min += position) + size; - } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; - } - } - if (extent[0] != min || extent[1] != max) { - if (i) yExtentDomain = null; else xExtentDomain = null; - extent[0] = min; - extent[1] = max; - return true; - } - } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - dragRestore(); - event_({ - type: "brushend" - }); - } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.clamp = function(z) { - if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; - if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - if (x) { - if (xExtentDomain) { - x0 = xExtentDomain[0], x1 = xExtentDomain[1]; - } else { - x0 = xExtent[0], x1 = xExtent[1]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - } - } - if (y) { - if (yExtentDomain) { - y0 = yExtentDomain[0], y1 = yExtentDomain[1]; - } else { - y0 = yExtent[0], y1 = yExtent[1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - xExtentDomain = [ x0, x1 ]; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - yExtentDomain = [ y0, y1 ]; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; - } - return brush; - }; - brush.clear = function() { - if (!brush.empty()) { - xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; - xExtentDomain = yExtentDomain = null; - } - return brush; - }; - brush.empty = function() { - return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; - var d3_time_formatUtc = d3_time_format.utc; - var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - d3_time.second = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3_time.seconds = d3_time.second.range; - d3_time.seconds.utc = d3_time.second.utc.range; - d3_time.minute = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3_time.minutes = d3_time.minute.range; - d3_time.minutes.utc = d3_time.minute.utc.range; - d3_time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3_time.hours = d3_time.hour.range; - d3_time.hours.utc = d3_time.hour.utc.range; - d3_time.month = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3_time.months = d3_time.month.range; - d3_time.months.utc = d3_time.month.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - function tickMethod(extent, count) { - var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); - return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { - return d / 31536e6; - }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; - } - scale.nice = function(interval, skip) { - var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); - if (method) interval = method[0], skip = method[1]; - function skipped(date) { - return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; - } - return scale.domain(d3_scale_nice(domain, skip > 1 ? { - floor: function(date) { - while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); - return date; - }, - ceil: function(date) { - while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); - return date; - } - } : interval)); - }; - scale.ticks = function(interval, skip) { - var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { - range: interval - }, skip ]; - if (method) interval = method[0], skip = method[1]; - return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_time_scaleDate(t) { - return new Date(t); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; - var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { - return d.getMilliseconds(); - } ], [ ":%S", function(d) { - return d.getSeconds(); - } ], [ "%I:%M", function(d) { - return d.getMinutes(); - } ], [ "%I %p", function(d) { - return d.getHours(); - } ], [ "%a %d", function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ "%b %d", function(d) { - return d.getDate() != 1; - } ], [ "%B", function(d) { - return d.getMonth(); - } ], [ "%Y", d3_true ] ]); - var d3_time_scaleMilliseconds = { - range: function(start, stop, step) { - return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); - }, - floor: d3_identity, - ceil: d3_identity - }; - d3_time_scaleLocalMethods.year = d3_time.year; - d3_time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { - return d.getUTCMilliseconds(); - } ], [ ":%S", function(d) { - return d.getUTCSeconds(); - } ], [ "%I:%M", function(d) { - return d.getUTCMinutes(); - } ], [ "%I %p", function(d) { - return d.getUTCHours(); - } ], [ "%a %d", function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ "%b %d", function(d) { - return d.getUTCDate() != 1; - } ], [ "%B", function(d) { - return d.getUTCMonth(); - } ], [ "%Y", d3_true ] ]); - d3_time_scaleUtcMethods.year = d3_time.year.utc; - d3_time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); - }; - d3.text = d3_xhrType(function(request) { - return request.responseText; - }); - d3.json = function(url, callback) { - return d3_xhr(url, "application/json", d3_json, callback); - }; - function d3_json(request) { - return JSON.parse(request.responseText); - } - d3.html = function(url, callback) { - return d3_xhr(url, "text/html", d3_html, callback); - }; - function d3_html(request) { - var range = d3_document.createRange(); - range.selectNode(d3_document.body); - return range.createContextualFragment(request.responseText); - } - d3.xml = d3_xhrType(function(request) { - return request.responseXML; - }); - if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; - this.d3 = d3; -}(); \ No newline at end of file diff --git a/platforms/browser/www/lib/d3/d3.min.js b/platforms/browser/www/lib/d3/d3.min.js deleted file mode 100644 index 88550ae5..00000000 --- a/platforms/browser/www/lib/d3/d3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ia+n in this}function c(n){return n=ia+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===oa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===oa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=aa.length;r>e;++e){var u=aa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Zo.event.preventDefault()}function x(){for(var n,t=Zo.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Zo.event;u.target=n,Zo.event=u,t[u.type].apply(e,r)}finally{Zo.event=i}}},t}function _(n){return sa(n,pa),n}function b(n){return"function"==typeof n?n:function(){return la(n,this)}}function w(n){return"function"==typeof n?n:function(){return fa(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Zo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Zo.requote(n)+"(?:\\s+|$)","g")}function A(n){return(n+"").trim().split(/^|\s+/)}function C(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=A(n).map(N);var u=n.length;return"function"==typeof t?r:e}function N(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function z(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function L(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function T(n){return"function"==typeof n?n:(n=Zo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function q(n){return{__data__:n}}function R(n){return function(){return ga(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,da),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Xo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Zo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.substring(0,a));var s=ya.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Zo.event;Zo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Zo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Ma,t="click"+n,e=Zo.select(Wo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(xa){var r=Bo.style,u=r[xa];r[xa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),xa&&(r[xa]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>_a&&(Wo.scrollX||Wo.scrollY)){e=Zo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();_a=!(u.f||u.e),e.remove()}return _a?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Zo.event.changedTouches[0].identifier}function X(){return Zo.event.target}function $(){return Wo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?ba:Math.acos(n)}function G(n){return n>1?Sa:-1>n?-Sa:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?st(n.l,n.a,n.b):st((n=xt((n=Zo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Aa)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=lt(u)*ja,r=lt(r)*Ha,i=lt(i)*Fa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function st(n,t,e){return n>0?new it(Math.atan2(e,t)*Ca,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function lt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Ia.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/ja),u=ft((.2126729*n+.7151522*t+.072175*e)/Ha),i=ft((.0193339*n+.119192*t+.9503041*e)/Fa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Zo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Wo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Zo.event;Zo.event=n;try{o.progress.call(i,c)}finally{Zo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Xo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Zo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(){var n=Ct(),t=Nt()-n;t>24?(isFinite(t)&&(clearTimeout($a),$a=setTimeout(At,t)),Xa=0):(Xa=1,Wa(At))}function Ct(){var n=Date.now();for(Ba=Za;Ba;)n>=Ba.t&&(Ba.f=Ba.c(n-Ba.t)),Ba=Ba.n;return n}function Nt(){for(var n,t=Za,e=1/0;t;)t.f?t=n?n.n=t.n:Za=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Va=n,e}function zt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Lt(n,t){var e=Math.pow(10,3*ua(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ga.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Ka.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Zo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function Rt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Dt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new nc(e-1)),1),e}function i(n,e){return t(n=new nc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{nc=Rt;var r=new Rt;return r._=n,o(r,t,e)}finally{nc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Pt(n);return c.floor=c,c.round=Pt(r),c.ceil=Pt(u),c.offset=Pt(i),c.range=a,n}function Pt(n){return function(t,e){try{nc=Rt;var r=new Rt;return r._=t,n(r,e)._}finally{nc=Date}}}function Ut(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=ec[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&nc!==Rt,o=new(i?Rt:nc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in ec?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{nc=Rt;var t=new nc;return t._=n,r(t)}finally{nc=Date}}var r=t(n);return e.parse=function(n){try{nc=Rt;var t=r.parse(n);return t&&t._}finally{nc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=re;var x=Zo.map(),M=Ht(v),_=Ft(v),b=Ht(d),w=Ft(d),S=Ht(m),k=Ft(m),E=Ht(y),A=Ft(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return jt(n.getDate(),t,2)},e:function(n,t){return jt(n.getDate(),t,2)},H:function(n,t){return jt(n.getHours(),t,2)},I:function(n,t){return jt(n.getHours()%12||12,t,2)},j:function(n,t){return jt(1+Qa.dayOfYear(n),t,3)},L:function(n,t){return jt(n.getMilliseconds(),t,3)},m:function(n,t){return jt(n.getMonth()+1,t,2)},M:function(n,t){return jt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return jt(n.getSeconds(),t,2)},U:function(n,t){return jt(Qa.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return jt(Qa.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return jt(n.getFullYear()%100,t,2)},Y:function(n,t){return jt(n.getFullYear()%1e4,t,4)},Z:te,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Wt,e:Wt,H:Gt,I:Gt,j:Jt,L:ne,m:Bt,M:Kt,p:l,S:Qt,U:Yt,w:Ot,W:It,x:c,X:s,y:Vt,Y:Zt,Z:Xt,"%":ee};return t}function jt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ht(n){return new RegExp("^(?:"+n.map(Zo.requote).join("|")+")","i")}function Ft(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Ot(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Yt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function It(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Zt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Vt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.y=$t(+r[0]),e+r[0].length):-1}function Xt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=-t,e+5):-1}function $t(n){return n+(n>68?1900:2e3)}function Bt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Wt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Jt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Gt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Kt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Qt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ne(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function te(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(ua(t)/60),u=ua(t)%60;return e+jt(r,"0",2)+jt(u,"0",2)}function ee(n,t,e){uc.lastIndex=0;var r=uc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function re(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ue(){}function ie(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function oe(n,t){n&&cc.hasOwnProperty(n.type)&&cc[n.type](n,t)}function ae(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ce(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)ae(n[e],t,1);t.polygonEnd()}function se(){function n(n,t){n*=Aa,t=t*Aa/2+ba/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);lc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;fc.point=function(o,a){fc.point=n,r=(t=o)*Aa,u=Math.cos(a=(e=a)*Aa/2+ba/4),i=Math.sin(a)},fc.lineEnd=function(){n(t,e)}}function le(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function fe(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function he(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ge(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function pe(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function ve(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function de(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function me(n,t){return ua(n[0]-t[0])<ka&&ua(n[1]-t[1])<ka}function ye(n,t){n*=Aa;var e=Math.cos(t*=Aa);xe(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function xe(n,t,e){++hc,pc+=(n-pc)/hc,vc+=(t-vc)/hc,dc+=(e-dc)/hc}function Me(){function n(n,u){n*=Aa;var i=Math.cos(u*=Aa),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);gc+=s,mc+=s*(t+(t=o)),yc+=s*(e+(e=a)),xc+=s*(r+(r=c)),xe(t,e,r)}var t,e,r;wc.point=function(u,i){u*=Aa;var o=Math.cos(i*=Aa);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),wc.point=n,xe(t,e,r)}}function _e(){wc.point=ye}function be(){function n(n,t){n*=Aa;var e=Math.cos(t*=Aa),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-J(g)/h,v=Math.atan2(h,g);Mc+=p*s,_c+=p*l,bc+=p*f,gc+=v,mc+=v*(r+(r=o)),yc+=v*(u+(u=a)),xc+=v*(i+(i=c)),xe(r,u,i)}var t,e,r,u,i;wc.point=function(o,a){t=o,e=a,wc.point=n,o*=Aa;var c=Math.cos(a*=Aa);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),xe(r,u,i)},wc.lineEnd=function(){n(t,e),wc.lineEnd=_e,wc.point=ye}}function we(){return!0}function Se(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(me(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ee(e,n,null,!0),s=new Ee(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Ee(r,n,null,!1),s=new Ee(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),ke(i),ke(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ke(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Ee(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ae(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ce))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Zo.merge(g);var n=Le(m,p);g.length?(_||(i.polygonStart(),_=!0),Se(g,ze,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ne(),M=t(x),_=!1;return y}}function Ce(n){return n.length>1}function Ne(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function ze(n,t){return((n=n.x)[0]<0?n[1]-Sa-ka:Sa-n[1])-((t=t.x)[0]<0?t[1]-Sa-ka:Sa-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;lc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+ba/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+ba/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>ba,k=p*x;if(lc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*wa:_,S^h>=e^m>=e){var E=he(le(f),le(n));ve(E);var A=he(u,E);ve(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-ka>i||ka>i&&0>lc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?ba:-ba,c=ua(i-e);ua(c-ba)<ka?(n.point(e,r=(r+o)/2>0?Sa:-Sa),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=ba&&(ua(e-u)<ka&&(e-=u*ka),ua(i-a)<ka&&(i-=a*ka),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return ua(o)>ka?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*Sa,r.point(-ba,u),r.point(0,u),r.point(ba,u),r.point(ba,0),r.point(ba,-u),r.point(0,-u),r.point(-ba,-u),r.point(-ba,0),r.point(-ba,u);else if(ua(n[0]-t[0])>ka){var i=n[0]<t[0]?ba:-ba;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function De(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?ba:-ba),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(me(e,g)||me(p,g))&&(p[0]+=ka,p[1]+=ka,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&me(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=le(n),u=le(t),o=[1,0,0],a=he(r,u),c=fe(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=he(o,a),p=pe(o,f),v=pe(a,h);ge(p,v);var d=g,m=fe(p,d),y=fe(d,d),x=m*m-y*(fe(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=pe(d,(-m-M)/y);if(ge(_,p),_=de(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ua(A-ba)<ka,N=C||ka>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ua(_[0]-w)<ka?k:E):k<=_[1]&&_[1]<=E:A>ba^(w<=_[0]&&_[0]<=S)){var z=pe(d,(-m+M)/y);return ge(z,p),[_,de(z)]}}}function u(t,e){var r=o?n:ba-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ua(i)>ka,c=sr(n,6*Aa);return Ae(t,e,c,o?[0,-n]:[-ba,n-ba])}function Pe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Ue(n,t,e,r){function u(r,u){return ua(r[0]-n)<ka?u>0?0:3:ua(r[0]-e)<ka?u>0?2:1:ua(r[1]-t)<ka?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&W(s,i,n)>0&&++t:i[1]<=r&&W(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-kc,Math.min(kc,n)),t=Math.max(-kc,Math.min(kc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ne(),C=Pe(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Zo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Se(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function je(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function He(n){var t=0,e=ba/3,r=tr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*ba/180,e=n[1]*ba/180):[180*(t/ba),180*(e/ba)]},u}function Fe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Oe(){function n(n,t){Ac+=u*n-r*t,r=n,u=t}var t,e,r,u;Tc.point=function(i,o){Tc.point=n,t=r=i,e=u=o},Tc.lineEnd=function(){n(t,e)}}function Ye(n,t){Cc>n&&(Cc=n),n>zc&&(zc=n),Nc>t&&(Nc=t),t>Lc&&(Lc=t)}function Ie(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ze(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ze(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ze(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ve(n,t){pc+=n,vc+=t,++dc}function Xe(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);mc+=o*(t+n)/2,yc+=o*(e+r)/2,xc+=o,Ve(t=n,e=r)}var t,e;Rc.point=function(r,u){Rc.point=n,Ve(t=r,e=u)}}function $e(){Rc.point=Ve}function Be(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);mc+=o*(r+n)/2,yc+=o*(u+t)/2,xc+=o,o=u*n-r*t,Mc+=o*(r+n),_c+=o*(u+t),bc+=3*o,Ve(r=n,u=t)}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,Ve(t=r=i,e=u=o)},Rc.lineEnd=function(){n(t,e)}}function We(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,wa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Je(n){function t(n){return(a?r:e)(n)}function e(t){return Qe(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=le([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ua(ua(w)-1)<ka||ua(r-h)<ka?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;(T*T/M>i||ua((y*z+x*L)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Aa),a=16; -return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Ge(n){var t=Je(function(t,e){return n([t*Ca,e*Ca])});return function(n){return er(t(n))}}function Ke(n){this.stream=n}function Qe(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function nr(n){return tr(function(){return n})()}function tr(n){function t(n){return n=a(n[0]*Aa,n[1]*Aa),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ca,n[1]*Ca]}function r(){a=je(o=ir(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=Je(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Sc,_=wt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=er(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Sc):De((b=+n)*Aa),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Ue(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Aa,d=n[1]%360*Aa,r()):[v*Ca,d*Ca]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Aa,y=n[1]%360*Aa,x=n.length>2?n[2]%360*Aa:0,r()):[m*Ca,y*Ca,x*Ca]},Zo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function er(n){return Qe(n,function(t,e){n.point(t*Aa,e*Aa)})}function rr(n,t){return[n,t]}function ur(n,t){return[n>ba?n-wa:-ba>n?n+wa:n,t]}function ir(n,t,e){return n?t||e?je(ar(n),cr(t,e)):ar(n):t||e?cr(t,e):ur}function or(n){return function(t,e){return t+=n,[t>ba?t-wa:-ba>t?t+wa:t,e]}}function ar(n){var t=or(n);return t.invert=or(-n),t}function cr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=lr(e,u),i=lr(e,i),(o>0?i>u:u>i)&&(u+=o*wa)):(u=n+o*wa,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=de([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function lr(n,t){var e=le(t);e[0]-=n,ve(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-ka)%(2*Math.PI)}function fr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function hr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function gr(n){return n.source}function pr(n){return n.target}function vr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ca,Math.atan2(o,Math.sqrt(r*r+u*u))*Ca]}:function(){return[n*Ca,t*Ca]};return p.distance=h,p}function dr(){function n(n,u){var i=Math.sin(u*=Aa),o=Math.cos(u),a=ua((n*=Aa)-t),c=Math.cos(a);Dc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Pc.point=function(u,i){t=u*Aa,e=Math.sin(i*=Aa),r=Math.cos(i),Pc.point=n},Pc.lineEnd=function(){Pc.point=Pc.lineEnd=v}}function mr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function yr(n,t){function e(n,t){o>0?-Sa+ka>t&&(t=-Sa+ka):t>Sa-ka&&(t=Sa-ka);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(ba/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Sa]},e):Mr}function xr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ua(u)<ka?rr:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function Mr(n,t){return[n,Math.log(Math.tan(ba/4+t/2))]}function _r(n){var t,e=nr(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=ba*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function br(n,t){return[Math.log(Math.tan(ba/4+t/2)),-n]}function wr(n){return n[0]}function Sr(n){return n[1]}function kr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Er(n,t){return n[0]-t[0]||n[1]-t[1]}function Ar(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Cr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Nr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function zr(){Gr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Bc.pop()||new zr;return t.site=n,t}function Tr(n){Yr(n),Vc.remove(n),Bc.push(n),Gr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&ua(e-c.circle.x)<ka&&ua(r-c.circle.cy)<ka;)i=c.P,a.unshift(c),Tr(c),c=i;a.unshift(c),Yr(c);for(var s=o;s.circle&&ua(e-s.circle.x)<ka&&ua(r-s.circle.cy)<ka;)o=s.N,a.push(s),Tr(s),s=o;a.push(s),Yr(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],Br(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Xr(c.site,s.site,null,u),Or(c),Or(s)}function Rr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Vc._;a;)if(r=Dr(a,o)-i,r>ka)a=a.L;else{if(u=i-Pr(a,o),!(u>ka)){r>-ka?(t=a.P,e=a):u>-ka?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if(Vc.insert(t,c),t||e){if(t===e)return Yr(t),e=Lr(t.site),Vc.insert(c,e),c.edge=e.edge=Xr(t.site,c.site),Or(t),Or(e),void 0;if(!e)return c.edge=Xr(t.site,c.site),void 0;Yr(t),Yr(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Br(e.edge,s,p,M),c.edge=Xr(s,n,null,M),e.edge=Xr(n,p,null,M),Or(t),Or(e)}}function Dr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Pr(n,t){var e=n.N;if(e)return Dr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ur(n){this.site=n,this.edges=[]}function jr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Zc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(ua(r-t)>ka||ua(u-e)>ka)&&(a.splice(o,0,new Wr($r(i.site,l,ua(r-f)<ka&&p-u>ka?{x:f,y:ua(t-f)<ka?e:p}:ua(u-p)<ka&&h-r>ka?{x:ua(e-p)<ka?t:h,y:p}:ua(r-h)<ka&&u-g>ka?{x:h,y:ua(t-h)<ka?e:g}:ua(u-g)<ka&&r-f>ka?{x:ua(e-g)<ka?t:f,y:g}:null),i.site,null)),++c)}function Hr(n,t){return t.angle-n.angle}function Fr(){Gr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Or(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-Ea)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Wc.pop()||new Fr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=$c._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}$c.insert(y,m),y||(Xc=m)}}}}function Yr(n){var t=n.circle;t&&(t.P||(Xc=t.N),$c.remove(t),Wc.push(t),Gr(t),n.circle=null)}function Ir(n){for(var t,e=Ic,r=Pe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Zr(t,n)||!r(t)||ua(t.a.x-t.b.x)<ka&&ua(t.a.y-t.b.y)<ka)&&(t.a=t.b=null,e.splice(u,1))}function Zr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Vr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Xr(n,t,e,r){var u=new Vr(n,t);return Ic.push(u),e&&Br(u,n,t,e),r&&Br(u,t,n,r),Zc[n.i].edges.push(new Wr(u,n,t)),Zc[t.i].edges.push(new Wr(u,t,n)),u}function $r(n,t,e){var r=new Vr(n,null);return r.a=t,r.b=e,Ic.push(r),r}function Br(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Wr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Jr(){this._=null}function Gr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Kr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Qr(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function nu(n){for(;n.L;)n=n.L;return n}function tu(n,t){var e,r,u,i=n.sort(eu).pop();for(Ic=[],Zc=new Array(n.length),Vc=new Jr,$c=new Jr;;)if(u=Xc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Zc[i.i]=new Ur(i),Rr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;qr(u.arc)}t&&(Ir(t),jr(t));var o={cells:Zc,edges:Ic};return Vc=$c=Ic=Zc=null,o}function eu(n,t){return t.y-n.y||t.x-n.x}function ru(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function uu(n){return n.x}function iu(n){return n.y}function ou(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function au(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&au(n,c[0],e,r,o,a),c[1]&&au(n,c[1],o,r,u,a),c[2]&&au(n,c[2],e,a,o,i),c[3]&&au(n,c[3],o,a,u,i)}}function cu(n,t){n=Zo.rgb(n),t=Zo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+dt(Math.round(e+i*n))+dt(Math.round(r+o*n))+dt(Math.round(u+a*n))}}function su(n,t){var e,r={},u={};for(e in n)e in t?r[e]=hu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function lu(n,t){return t-=n=+n,function(e){return n+t*e}}function fu(n,t){var e,r,u,i=Gc.lastIndex=Kc.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=Gc.exec(n))&&(r=Kc.exec(t));)(u=r.index)>i&&(u=t.substring(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:lu(e,r)})),i=Kc.lastIndex;return i<t.length&&(u=t.substring(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function hu(n,t){for(var e,r=Zo.interpolators.length;--r>=0&&!(e=Zo.interpolators[r](n,t)););return e}function gu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(hu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function pu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function vu(n){return function(t){return 1-n(1-t)}}function du(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function mu(n){return n*n}function yu(n){return n*n*n}function xu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Mu(n){return function(t){return Math.pow(t,n)}}function _u(n){return 1-Math.cos(n*Sa)}function bu(n){return Math.pow(2,10*(n-1))}function wu(n){return 1-Math.sqrt(1-n*n)}function Su(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/wa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*wa/t)}}function ku(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Eu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Au(n,t){n=Zo.hcl(n),t=Zo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Zo.hsl(n),t=Zo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Zo.lab(n),t=Zo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(Ru(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ca,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ca:0}function Tu(n,t){return n[0]*t[0]+n[1]*t[1]}function qu(n){var t=Math.sqrt(Tu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ru(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Du(n,t){var e,r=[],u=[],i=Zo.transform(n),o=Zo.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:lu(a[0],c[0])},{i:3,x:lu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:lu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:lu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:lu(g[0],p[0])},{i:e-2,x:lu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Pu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Uu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function ju(n){for(var t=n.source,e=n.target,r=Fu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Hu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Fu(n,t){if(n===t)return n;for(var e=Hu(n),r=Hu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Ou(n){n.fixed|=2}function Yu(n){n.fixed&=-7}function Iu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Zu(n){n.fixed&=-5}function Vu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Vu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Xu(n,t){return Zo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Ku,n}function $u(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Bu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Wu(n){return n.children}function Ju(n){return n.value}function Gu(n,t){return t.value-n.value}function Ku(n){return Zo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function Qu(n){return n.x}function ni(n){return n.y}function ti(n,t,e){n.y0=t,n.y=e}function ei(n){return Zo.range(n.length)}function ri(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ui(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ii(n){return n.reduce(oi,0)}function oi(n,t){return n+t[1]}function ai(n,t){return ci(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ci(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Zo.min(n),Zo.max(n)]}function li(n,t){return n.value-t.value}function fi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function hi(n,t){n._pack_next=t,t._pack_prev=n}function gi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function pi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(vi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],yi(r,u,i),t(i),fi(r,i),r._pack_prev=i,fi(i,u),u=r._pack_next,o=3;s>o;o++){yi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(gi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!gi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?hi(r,u=a):hi(r=c,u),o--):(fi(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(di)}}function vi(n){n._pack_next=n._pack_prev=n}function di(n){delete n._pack_next,delete n._pack_prev}function mi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)mi(u[i],t,e,r)}function yi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function xi(n,t){return n.parent==t.parent?1:2}function Mi(n){var t=n.children;return t.length?t[0]:n.t}function _i(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function bi(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function wi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Si(n,t,e){return n.a.parent===t.parent?n.a:e}function ki(n){return 1+Zo.max(n,function(n){return n.y})}function Ei(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ai(n){var t=n.children;return t&&t.length?Ai(t[0]):n}function Ci(n){var t,e=n.children;return e&&(t=e.length)?Ci(e[t-1]):n}function Ni(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function zi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Li(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ti(n){return n.rangeExtent?n.rangeExtent():Li(n.range())}function qi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ri(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Di(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ss}function Pi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Zo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ui(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Pi:qi,c=r?Uu:Pu;return o=u(n,t,c,e),a=u(t,n,c,hu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(zu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Oi(n,t)},i.tickFormat=function(t,e){return Yi(n,t,e)},i.nice=function(t){return Hi(n,t),u()},i.copy=function(){return Ui(n,t,e,r)},u()}function ji(n,t){return Zo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Hi(n,t){return Ri(n,Di(Fi(n,t)[2]))}function Fi(n,t){null==t&&(t=10);var e=Li(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Oi(n,t){return Zo.range.apply(Zo,Fi(n,t))}function Yi(n,t,e){var r=Fi(n,t);if(e){var u=Ga.exec(e);if(u.shift(),"s"===u[8]){var i=Zo.formatPrefix(Math.max(ua(r[0]),ua(r[1])));return u[7]||(u[7]="."+Ii(i.scale(r[2]))),u[8]="f",e=Zo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Zi(u[8],r)),e=u.join("")}else e=",."+Ii(r[2])+"f";return Zo.format(e)}function Ii(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Zi(n,t){var e=Ii(t[2]);return n in ls?Math.abs(e-Ii(Math.max(ua(t[0]),ua(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Vi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ri(r.map(u),e?Math:hs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Li(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return fs;arguments.length<2?t=fs:"function"!=typeof t&&(t=Zo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Vi(n.copy(),t,e,r)},ji(o,n)}function Xi(n,t,e){function r(t){return n(u(t))}var u=$i(t),i=$i(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Oi(e,n)},r.tickFormat=function(n,t){return Yi(e,n,t)},r.nice=function(n){return r.domain(Hi(e,n))},r.exponent=function(o){return arguments.length?(u=$i(t=o),i=$i(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Xi(n.copy(),t,e)},ji(r,n)}function $i(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Bi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Zo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+s)/2:c+l*o/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-o+2*c);return i=r(l+h*c,h),s&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-o+2*c)),g=f-l-(n.length-o)*h;return i=r(l+Math.round(g/2),h),s&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return Li(t.a[0])},e.copy=function(){return Bi(n,t)},e.domain(n)}function Wi(e,r){function u(){var n=0,t=r.length;for(o=[];++n<t;)o[n-1]=Zo.quantile(e,n/t);return i}function i(n){return isNaN(n=+n)?void 0:r[Zo.bisect(o,n)]}var o;return i.domain=function(r){return arguments.length?(e=r.filter(t).sort(n),u()):e},i.range=function(n){return arguments.length?(r=n,u()):r},i.quantiles=function(){return o},i.invertExtent=function(n){return n=r.indexOf(n),0>n?[0/0,0/0]:[n>0?o[n-1]:e[0],n<o.length?o[n]:e[e.length-1]]},i.copy=function(){return Wi(e,r)},u()}function Ji(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ji(n,t,e)},u()}function Gi(n,t){function e(e){return e>=e?t[Zo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Gi(n,t)},e}function Ki(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Oi(n,t)},t.tickFormat=function(t,e){return Yi(n,t,e)},t.copy=function(){return Ki(n)},t}function Qi(n){return n.innerRadius}function no(n){return n.outerRadius}function to(n){return n.startAngle}function eo(n){return n.endAngle}function ro(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=wr,r=Sr,u=we,i=uo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=xs.get(n)||uo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function uo(n){return n.join("L")}function io(n){return uo(n)+"Z"}function oo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function so(n,t){return n.length<4?uo(n):n[1]+ho(n.slice(1,n.length-1),go(n,t))}function lo(n,t){return n.length<3?uo(n):n[0]+ho((n.push(n[0]),n),go([n[n.length-2]].concat(n,[n[1]]),t))}function fo(n,t){return n.length<3?uo(n):n[0]+ho(n,go(n,t))}function ho(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return uo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function go(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function po(n){if(n.length<3)return uo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",xo(bs,o),",",xo(bs,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Mo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function vo(n){if(n.length<4)return uo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(xo(bs,i)+","+xo(bs,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),Mo(e,i,o);return e.join("")}function mo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[xo(bs,o),",",xo(bs,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Mo(t,o,a);return t.join("")}function yo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return po(n)}function xo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Mo(n,t,e){n.push("C",xo(Ms,t),",",xo(Ms,e),",",xo(_s,t),",",xo(_s,e),",",xo(bs,t),",",xo(bs,e))}function _o(n,t){return(t[1]-n[1])/(t[0]-n[0])}function bo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=_o(u,i);++t<e;)r[t]=(o+(o=_o(u=i,i=n[t+1])))/2;return r[t]=o,r}function wo(n){for(var t,e,r,u,i=[],o=bo(n),a=-1,c=n.length-1;++a<c;)t=_o(n[a],n[a+1]),ua(t)<ka?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function So(n){return n.length<3?uo(n):n[0]+ho(n,wo(n))}function ko(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+ms,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Eo(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=bt(e),_=bt(u),b=e===r?function(){return g}:bt(r),w=u===i?function(){return p}:bt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=wr,r=wr,u=0,i=Sr,o=we,a=uo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=xs.get(n)||uo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Ao(n){return n.radius}function Co(n){return[n.x,n.y]}function No(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+ms;return[e*Math.cos(r),e*Math.sin(r)]}}function zo(){return 64}function Lo(){return"circle"}function To(n){var t=Math.sqrt(n/ba);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function qo(n,t){return sa(n,Cs),n.id=t,n}function Ro(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Do(n){return null==n&&(n=""),function(){this.textContent=n}}function Po(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Zo.timer(function(r){function o(r){return u.active>e?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Zo.timer(function(){return p.c=c(r||1)?we:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a); -return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ba,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function Uo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function jo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Ho(n){return n.toISOString()}function Fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Zo.bisect(Us,u);return i==Us.length?[t.year,Fi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Us[i-1]<Us[i]/u?i-1:i]:[Fs,Fi(n,e)[2]]}return r.invert=function(t){return Oo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Oo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Oo(+e+1),t).length}var i=r.domain(),o=Li(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Ri(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Oo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Oo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Li(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Oo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Fo(n.copy(),t,e)},ji(r,n)}function Oo(n){return new Date(n)}function Yo(n){return JSON.parse(n.responseText)}function Io(n){var t=$o.createRange();return t.selectNode($o.body),t.createContextualFragment(n.responseText)}var Zo={version:"3.4.11"};Date.now||(Date.now=function(){return+new Date});var Vo=[].slice,Xo=function(n){return Vo.call(n)},$o=document,Bo=$o.documentElement,Wo=window;try{Xo(Bo.childNodes)[0].nodeType}catch(Jo){Xo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{$o.createElement("div").style.setProperty("opacity",0,"")}catch(Go){var Ko=Wo.Element.prototype,Qo=Ko.setAttribute,na=Ko.setAttributeNS,ta=Wo.CSSStyleDeclaration.prototype,ea=ta.setProperty;Ko.setAttribute=function(n,t){Qo.call(this,n,t+"")},Ko.setAttributeNS=function(n,t,e){na.call(this,n,t,e+"")},ta.setProperty=function(n,t,e){ea.call(this,n,t+"",e)}}Zo.ascending=n,Zo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Zo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Zo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Zo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Zo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Zo.mean=function(n,e){var r,u=0,i=n.length,o=-1,a=i;if(1===arguments.length)for(;++o<i;)t(r=n[o])?u+=r:--a;else for(;++o<i;)t(r=e.call(n,n[o],o))?u+=r:--a;return a?u/a:void 0},Zo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Zo.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Zo.quantile(e.sort(n),.5):void 0};var ra=e(n);Zo.bisectLeft=ra.left,Zo.bisect=Zo.bisectRight=ra.right,Zo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Zo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Zo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Zo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Zo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Zo.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Zo.transpose=function(n){return Zo.zip.apply(Zo,n)},Zo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Zo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Zo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Zo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ua=Math.abs;Zo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ua(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Zo.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[ia+n]},set:function(n,t){return this[ia+n]=t},remove:c,keys:s,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1),this[t])}});var ia="\x00",oa=ia.charCodeAt(0);Zo.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Zo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Zo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ia+n]=!0,n},remove:function(n){return n=ia+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1))}}),Zo.behavior={},Zo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var aa=["webkit","ms","moz","Moz","o","O"];Zo.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Zo.event=null,Zo.requote=function(n){return n.replace(ca,"\\$&")};var ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},la=function(n,t){return t.querySelector(n)},fa=function(n,t){return t.querySelectorAll(n)},ha=Bo.matches||Bo[p(Bo,"matchesSelector")],ga=function(n,t){return ha.call(n,t)};"function"==typeof Sizzle&&(la=function(n,t){return Sizzle(n,t)[0]||null},fa=Sizzle,ga=Sizzle.matchesSelector),Zo.selection=function(){return ma};var pa=Zo.selection.prototype=[];pa.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},pa.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Xo(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var va={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Zo.ns={prefix:va,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),va.hasOwnProperty(e)?{space:va[e],local:n}:n}},pa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Zo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},pa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(C(t,n[t]));return this}return this.each(C(n,t))},pa.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Wo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},pa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},pa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},pa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},pa.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},pa.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},pa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},pa.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=q(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=q(i);for(;f>r;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),s=_([]),l=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return s.enter=function(){return c},s.exit=function(){return l},s},pa.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},pa.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},pa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},pa.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},pa.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},pa.call=function(n){var t=Xo(arguments);return n.apply(t[0]=this,t),this},pa.empty=function(){return!this.node()},pa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},pa.size=function(){var n=0;return this.each(function(){++n}),n};var da=[];Zo.selection.enter=U,Zo.selection.enter.prototype=da,da.append=pa.append,da.empty=pa.empty,da.node=pa.node,da.call=pa.call,da.size=pa.size,da.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return _(o)},da.insert=function(n,t){return arguments.length<2&&(t=j(this)),pa.insert.call(this,n,t)},pa.transition=function(){for(var n,t,e=Ss||++Ns,r=[],u=ks||{time:Date.now(),ease:xu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&Po(t,c,e,u),n.push(t)}return qo(r,e)},pa.interrupt=function(){return this.each(H)},Zo.select=function(n){var t=["string"==typeof n?la(n,$o):n];return t.parentNode=Bo,_([t])},Zo.selectAll=function(n){var t=Xo("string"==typeof n?fa(n,$o):n);return t.parentNode=Bo,_([t])};var ma=Zo.select(Bo);pa.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ya=Zo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ya.forEach(function(n){"on"+n in $o&&ya.remove(n)});var xa="onselectstart"in $o?null:p(Bo.style,"userSelect"),Ma=0;Zo.mouse=function(n){return Z(n,x())};var _a=/WebKit/.test(Wo.navigator.userAgent)?-1:0;Zo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Xo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Zo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Zo.event.target===f),g({type:"dragend"}))}var s,l=this,f=Zo.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Zo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Zo.mouse,$,"mousemove","mouseup"),i=t(V,Zo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Zo.rebind(n,e,"on")};var ba=Math.PI,wa=2*ba,Sa=ba/2,ka=1e-6,Ea=ka*ka,Aa=ba/180,Ca=180/ba,Na=Math.SQRT2,za=2,La=4;Zo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(za*h)*(e*nt(Na*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Na*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Na*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+La*f)/(2*i*za*h),p=(c*c-i*i-La*f)/(2*c*za*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Na;return e.duration=1e3*y,e},Zo.behavior.zoom=function(){function n(n){n.on(A,s).on(Ra+".zoom",f).on("dblclick.zoom",h).on(z,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Zo.mouse(r),h),a(s)}function e(){f.on(C,null).on(N,null),g(l&&Zo.event.target===i),c(s)}var r=this,i=Zo.event.target,s=L.of(r,arguments),l=0,f=Zo.select(Wo).on(C,n).on(N,e),h=t(Zo.mouse(r)),g=I();H.call(r),o(s)}function l(){function n(){var n=Zo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Zo.event.target;Zo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Zo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var s=n(),l=Date.now();if(1===s.length){if(500>l-m){var h=s[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=l}else if(s.length>1){var h=s[0],x=s[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Zo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Zo.event.touches.length){for(var t=Zo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Zo.selectAll(b).on(x,null),w.on(A,s).on(z,l),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Zo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Zo.select(g).on(A,null).on(z,e),k=I();H.call(g),e(),o(p)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Zo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*Ta())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Zo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Zo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=qa,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Ss?Zo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Zo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?qa:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Zo.rebind(n,L,"on")};var Ta,qa=[0,1/0],Ra="onwheel"in $o?(Ta=function(){return-Zo.event.deltaY*(Zo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in $o?(Ta=function(){return Zo.event.wheelDelta},"mousewheel"):(Ta=function(){return-Zo.event.detail},"MozMousePixelScroll");Zo.color=et,et.prototype.toString=function(){return this.rgb()+""},Zo.hsl=rt;var Da=rt.prototype=new et;Da.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Da.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Da.rgb=function(){return ut(this.h,this.s,this.l)},Zo.hcl=it;var Pa=it.prototype=new et;Pa.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+Ua*(arguments.length?n:1)))},Pa.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-Ua*(arguments.length?n:1)))},Pa.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Zo.lab=at;var Ua=18,ja=.95047,Ha=1,Fa=1.08883,Oa=at.prototype=new et;Oa.brighter=function(n){return new at(Math.min(100,this.l+Ua*(arguments.length?n:1)),this.a,this.b)},Oa.darker=function(n){return new at(Math.max(0,this.l-Ua*(arguments.length?n:1)),this.a,this.b)},Oa.rgb=function(){return ct(this.l,this.a,this.b)},Zo.rgb=gt;var Ya=gt.prototype=new et;Ya.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ya.hsl=function(){return yt(this.r,this.g,this.b)},Ya.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Ia=Zo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ia.forEach(function(n,t){Ia.set(n,pt(t))}),Zo.functor=bt,Zo.xhr=St(wt),Zo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Zo.csv=Zo.dsv(",","text/csv"),Zo.tsv=Zo.dsv(" ","text/tab-separated-values"),Zo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Za,Va,Xa,$a,Ba,Wa=Wo[p(Wo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Zo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Va?Va.n=i:Za=i,Va=i,Xa||($a=clearTimeout($a),Xa=1,Wa(At))},Zo.timer.flush=function(){Ct(),Nt()},Zo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ja=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Zo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Zo.round(n,zt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ja[8+e/3]};var Ga=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Ka=Zo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Zo.round(n,zt(n,t))).toFixed(Math.max(0,Math.min(20,zt(n*(1+1e-15),t))))}}),Qa=Zo.time={},nc=Date;Rt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){tc.setUTCDate.apply(this._,arguments)},setDay:function(){tc.setUTCDay.apply(this._,arguments)},setFullYear:function(){tc.setUTCFullYear.apply(this._,arguments)},setHours:function(){tc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){tc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){tc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){tc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){tc.setUTCSeconds.apply(this._,arguments)},setTime:function(){tc.setTime.apply(this._,arguments)}};var tc=Date.prototype;Qa.year=Dt(function(n){return n=Qa.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Qa.years=Qa.year.range,Qa.years.utc=Qa.year.utc.range,Qa.day=Dt(function(n){var t=new nc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Qa.days=Qa.day.range,Qa.days.utc=Qa.day.utc.range,Qa.dayOfYear=function(n){var t=Qa.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=Qa[n]=Dt(function(n){return(n=Qa.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Qa[n+"s"]=e.range,Qa[n+"s"].utc=e.utc.range,Qa[n+"OfYear"]=function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)}}),Qa.week=Qa.sunday,Qa.weeks=Qa.sunday.range,Qa.weeks.utc=Qa.sunday.utc.range,Qa.weekOfYear=Qa.sundayOfYear;var ec={"-":"",_:" ",0:"0"},rc=/^\s*\d+/,uc=/^%/;Zo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Ut(n)}};var ic=Zo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Zo.format=ic.numberFormat,Zo.geo={},ue.prototype={s:0,t:0,add:function(n){ie(n,this.t,oc),ie(oc.s,this.s,this),this.s?this.t+=oc.t:this.s=oc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var oc=new ue;Zo.geo.stream=function(n,t){n&&ac.hasOwnProperty(n.type)?ac[n.type](n,t):oe(n,t)};var ac={Feature:function(n,t){oe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)oe(e[r].geometry,t)}},cc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){ae(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ae(e[r],t,0)},Polygon:function(n,t){ce(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ce(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)oe(e[r],t)}};Zo.geo.area=function(n){return sc=0,Zo.geo.stream(n,fc),sc};var sc,lc=new ue,fc={sphere:function(){sc+=4*ba},point:v,lineStart:v,lineEnd:v,polygonStart:function(){lc.reset(),fc.lineStart=se},polygonEnd:function(){var n=2*lc;sc+=0>n?4*ba+n:n,fc.lineStart=fc.lineEnd=fc.point=v}};Zo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=le([t*Aa,e*Aa]);if(m){var u=he(m,r),i=[u[1],-u[0],0],o=he(i,u);ve(o),o=de(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ca*s,d=ua(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ca;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ca;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ua(r)>180?r+(r>0?360:-360):r}else v=n,d=e;fc.point(n,e),t(n,e)}function i(){fc.lineStart()}function o(){u(v,d),fc.lineEnd(),ua(y)>ka&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,fc.polygonStart()},polygonEnd:function(){fc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>lc?(l=-(h=180),f=-(g=90)):y>ka?g=90:-ka>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Zo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e); -for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Zo.geo.centroid=function(n){hc=gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,wc);var t=Mc,e=_c,r=bc,u=t*t+e*e+r*r;return Ea>u&&(t=mc,e=yc,r=xc,ka>gc&&(t=pc,e=vc,r=dc),u=t*t+e*e+r*r,Ea>u)?[0/0,0/0]:[Math.atan2(e,t)*Ca,G(r/Math.sqrt(u))*Ca]};var hc,gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc={sphere:v,point:ye,lineStart:Me,lineEnd:_e,polygonStart:function(){wc.lineStart=be},polygonEnd:function(){wc.lineStart=Me}},Sc=Ae(we,Te,Re,[-ba,-ba/2]),kc=1e9;Zo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ue(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Zo.geo.conicEqualArea=function(){return He(Fe)}).raw=Fe,Zo.geo.albers=function(){return Zo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Zo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Zo.geo.albers(),o=Zo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Zo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+ka,f+.12*s+ka],[l-.214*s-ka,f+.234*s-ka]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+ka,f+.166*s+ka],[l-.115*s-ka,f+.234*s-ka]]).stream(c).point,n},n.scale(1070)};var Ec,Ac,Cc,Nc,zc,Lc,Tc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Ac=0,Tc.lineStart=Oe},polygonEnd:function(){Tc.lineStart=Tc.lineEnd=Tc.point=v,Ec+=ua(Ac/2)}},qc={point:Ye,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Rc={point:Ve,lineStart:Xe,lineEnd:$e,polygonStart:function(){Rc.lineStart=Be},polygonEnd:function(){Rc.point=Ve,Rc.lineStart=Xe,Rc.lineEnd=$e}};Zo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Zo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ec=0,Zo.geo.stream(n,u(Tc)),Ec},n.centroid=function(n){return pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,u(Rc)),bc?[Mc/bc,_c/bc]:xc?[mc/xc,yc/xc]:dc?[pc/dc,vc/dc]:[0/0,0/0]},n.bounds=function(n){return zc=Lc=-(Cc=Nc=1/0),Zo.geo.stream(n,u(qc)),[[Cc,Nc],[zc,Lc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ge(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ie:new We(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Zo.geo.albersUsa()).context(null)},Zo.geo.transform=function(n){return{stream:function(t){var e=new Ke(t);for(var r in n)e[r]=n[r];return e}}},Ke.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Zo.geo.projection=nr,Zo.geo.projectionMutator=tr,(Zo.geo.equirectangular=function(){return nr(rr)}).raw=rr.invert=rr,Zo.geo.rotation=function(n){function t(t){return t=n(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t}return n=ir(n[0]%360*Aa,n[1]*Aa,n.length>2?n[2]*Aa:0),t.invert=function(t){return t=n.invert(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t},t},ur.invert=rr,Zo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ir(-n[0]*Aa,-n[1]*Aa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ca,n[1]*=Ca}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Aa,u*Aa),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Aa,(u=+r)*Aa),n):u},n.angle(90)},Zo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Aa,u=n[1]*Aa,i=t[1]*Aa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Zo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Zo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Zo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Zo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ua(n%d)>ka}).map(l)).concat(Zo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ua(n%m)>ka}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=fr(a,o,90),f=hr(r,e,y),h=fr(s,c,90),g=hr(i,u,y),n):y},n.majorExtent([[-180,-90+ka],[180,90-ka]]).minorExtent([[-180,-80-ka],[180,80+ka]])},Zo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=gr,u=pr;return n.distance=function(){return Zo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Zo.geo.interpolate=function(n,t){return vr(n[0]*Aa,n[1]*Aa,t[0]*Aa,t[1]*Aa)},Zo.geo.length=function(n){return Dc=0,Zo.geo.stream(n,Pc),Dc};var Dc,Pc={sphere:v,point:v,lineStart:dr,lineEnd:v,polygonStart:v,polygonEnd:v},Uc=mr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Zo.geo.azimuthalEqualArea=function(){return nr(Uc)}).raw=Uc;var jc=mr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Zo.geo.azimuthalEquidistant=function(){return nr(jc)}).raw=jc,(Zo.geo.conicConformal=function(){return He(yr)}).raw=yr,(Zo.geo.conicEquidistant=function(){return He(xr)}).raw=xr;var Hc=mr(function(n){return 1/n},Math.atan);(Zo.geo.gnomonic=function(){return nr(Hc)}).raw=Hc,Mr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Sa]},(Zo.geo.mercator=function(){return _r(Mr)}).raw=Mr;var Fc=mr(function(){return 1},Math.asin);(Zo.geo.orthographic=function(){return nr(Fc)}).raw=Fc;var Oc=mr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Zo.geo.stereographic=function(){return nr(Oc)}).raw=Oc,br.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Sa]},(Zo.geo.transverseMercator=function(){var n=_r(br),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=br,Zo.geom={},Zo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Er),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=kr(a),l=kr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=wr,r=Sr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Zo.geom.polygon=function(n){return sa(n,Yc),n};var Yc=Zo.geom.polygon.prototype=[];Yc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Yc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Yc.clip=function(n){for(var t,e,r,u,i,o,a=Nr(n),c=-1,s=this.length-Nr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Ar(o,l,u)?(Ar(i,l,u)||n.push(Cr(i,o,l,u)),n.push(o)):Ar(i,l,u)&&n.push(Cr(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Ic,Zc,Vc,Xc,$c,Bc=[],Wc=[];Ur.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Hr),t.length},Wr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Jr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=nu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Kr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Qr(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(Qr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Kr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?nu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Kr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,Qr(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Kr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,Qr(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Kr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,Qr(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Zo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return tu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/ka)*ka,y:Math.round(o(n,t)/ka)*ka,i:t}})}var r=wr,u=Sr,i=r,o=u,a=Jc;return n?t(n):(t.links=function(n){return tu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return tu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Hr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&ru(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=bt(r=n),t):r},t.y=function(n){return arguments.length?(o=bt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Jc:n,t):a===Jc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Jc?null:a&&a[1]},t)};var Jc=[[-1e6,-1e6],[1e6,1e6]];Zo.geom.delaunay=function(n){return Zo.geom.voronoi().triangles(n)},Zo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(ua(c-e)+ua(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=ou()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=ou();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){au(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=wr,c=Sr;return(o=arguments.length)?(a=uu,c=iu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Zo.interpolateRgb=cu,Zo.interpolateObject=su,Zo.interpolateNumber=lu,Zo.interpolateString=fu;var Gc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kc=new RegExp(Gc.source,"g");Zo.interpolate=hu,Zo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ia.has(t)||/^(#|rgb\(|hsl\()/.test(t)?cu:fu:t instanceof et?cu:Array.isArray(t)?gu:"object"===e&&isNaN(t)?su:lu)(n,t)}],Zo.interpolateArray=gu;var Qc=function(){return wt},ns=Zo.map({linear:Qc,poly:Mu,quad:function(){return mu},cubic:function(){return yu},sin:function(){return _u},exp:function(){return bu},circle:function(){return wu},elastic:Su,back:ku,bounce:function(){return Eu}}),ts=Zo.map({"in":wt,out:vu,"in-out":du,"out-in":function(n){return du(vu(n))}});Zo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ns.get(e)||Qc,r=ts.get(r)||wt,pu(r(e.apply(null,Vo.call(arguments,1))))},Zo.interpolateHcl=Au,Zo.interpolateHsl=Cu,Zo.interpolateLab=Nu,Zo.interpolateRound=zu,Zo.transform=function(n){var t=$o.createElementNS(Zo.ns.prefix.svg,"g");return(Zo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:es)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var es={a:1,b:0,c:0,d:1,e:0,f:0};Zo.interpolateTransform=Du,Zo.layout={},Zo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(ju(n[e]));return t}},Zo.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Zo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Zo.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(wa-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Zo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Zo.event.x,n.py=Zo.event.y,a.resume()}var e,r,u,i,o,a={},c=Zo.dispatch("start","tick","end"),s=[1,1],l=.9,f=rs,h=us,g=-30,p=is,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Vu(t=Zo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Zo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Zo.behavior.drag().origin(wt).on("dragstart.force",Ou).on("drag.force",t).on("dragend.force",Yu)),arguments.length?(this.on("mouseover.force",Iu).on("mouseout.force",Zu).call(e),void 0):e},Zo.rebind(a,c,"on")};var rs=20,us=1,is=1/0;Zo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(s=e.call(n,i,i.depth))&&(c=s.length)){for(var c,s,l;--c>=0;)o.push(l=s[c]),l.parent=i,l.depth=i.depth+1;r&&(i.value=0),i.children=s}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Bu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Gu,e=Wu,r=Ju;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&($u(t,function(n){n.children&&(n.value=0)}),Bu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Zo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Zo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Xu(e,r)},Zo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Zo.sum(o),s=Zo.range(i.length);null!=e&&s.sort(e===os?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=os,r=0,u=wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var os={};Zo.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Zo.permute(s,f),l=Zo.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=wt,e=ei,r=ri,u=ti,i=Qu,o=ni;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:as.get(t)||ei,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:cs.get(t)||ri,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var as=Zo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ui),i=n.map(ii),o=Zo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Zo.range(n.length).reverse()},"default":ei}),cs=Zo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ri});Zo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Zo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ai;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ci(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Zo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Bu(a,function(n){n.r=+l(n.value)}),Bu(a,pi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;Bu(a,function(n){n.r+=f}),Bu(a,pi),Bu(a,function(n){n.r-=f})}return mi(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Zo.layout.hierarchy().sort(li),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Xu(n,e)},Zo.layout.tree=function(){function n(n,u){var l=o.call(this,n,u),f=l[0],h=t(f);if(Bu(h,e),h.parent.m=-h.z,$u(h,r),s)$u(f,i);else{var g=f,p=f,v=f;$u(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);$u(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return l}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){wi(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],s=u.m,l=i.m,f=o.m,h=c.m;o=_i(o),u=Mi(u),o&&u;)c=Mi(c),i=_i(i),i.a=n,r=o.z+f-u.z-s+a(o._,u._),r>0&&(bi(Si(o,n,e),n,r),s+=r,l+=r),f+=o.m,s+=u.m,h+=c.m,l+=i.m;o&&!_i(i)&&(i.t=o,i.m+=f-l),u&&!Mi(c)&&(c.t=u,c.m+=s-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Zo.layout.hierarchy().sort(null).value(null),a=xi,c=[1,1],s=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(s=null==(c=t)?i:null,n):s?null:c},n.nodeSize=function(t){return arguments.length?(s=null==(c=t)?null:i,n):s?c:null},Xu(n,o)},Zo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;Bu(c,function(n){var t=n.children;t&&t.length?(n.x=Ei(t),n.y=ki(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ai(c),f=Ci(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return Bu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Zo.layout.hierarchy().sort(null).value(null),e=xi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Xu(n,t)},Zo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Zo.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Ni,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ni(t):zi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return zi(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Ni:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Xu(i,a)},Zo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Zo.random.normal.apply(Zo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Zo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Zo.scale={};var ss={floor:wt,ceil:wt};Zo.scale.linear=function(){return Ui([0,1],[0,1],hu,!1)};var ls={s:1,g:1,p:1,r:1,e:1};Zo.scale.log=function(){return Vi(Zo.scale.linear().domain([0,1]),10,!0,[1,10])};var fs=Zo.format(".0e"),hs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Zo.scale.pow=function(){return Xi(Zo.scale.linear(),1,[0,1])},Zo.scale.sqrt=function(){return Zo.scale.pow().exponent(.5)},Zo.scale.ordinal=function(){return Bi([],{t:"range",a:[[]]})},Zo.scale.category10=function(){return Zo.scale.ordinal().range(gs)},Zo.scale.category20=function(){return Zo.scale.ordinal().range(ps)},Zo.scale.category20b=function(){return Zo.scale.ordinal().range(vs)},Zo.scale.category20c=function(){return Zo.scale.ordinal().range(ds)};var gs=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),ps=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),vs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Zo.scale.quantile=function(){return Wi([],[])},Zo.scale.quantize=function(){return Ji(0,1,[0,1])},Zo.scale.threshold=function(){return Gi([.5],[0,1])},Zo.scale.identity=function(){return Ki([0,1])},Zo.svg={},Zo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ms,a=u.apply(this,arguments)+ms,c=(o>a&&(c=o,o=a,a=c),a-o),s=ba>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a); -return c>=ys?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=Qi,e=no,r=to,u=eo;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ms;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ms=-Sa,ys=wa-ka;Zo.svg.line=function(){return ro(wt)};var xs=Zo.map({linear:uo,"linear-closed":io,step:oo,"step-before":ao,"step-after":co,basis:po,"basis-open":vo,"basis-closed":mo,bundle:yo,cardinal:fo,"cardinal-open":so,"cardinal-closed":lo,monotone:So});xs.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Ms=[0,2/3,1/3,0],_s=[0,1/3,2/3,0],bs=[0,1/6,2/3,1/6];Zo.svg.line.radial=function(){var n=ro(ko);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},ao.reverse=co,co.reverse=ao,Zo.svg.area=function(){return Eo(wt)},Zo.svg.area.radial=function(){var n=Eo(ko);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Zo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ms,l=s.call(n,u,r)+ms;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>ba)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=gr,o=pr,a=Ao,c=to,s=eo;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(s=bt(t),n):s},n},Zo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=gr,e=pr,r=Co;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Zo.svg.diagonal.radial=function(){var n=Zo.svg.diagonal(),t=Co,e=n.projection;return n.projection=function(n){return arguments.length?e(No(t=n)):t},n},Zo.svg.symbol=function(){function n(n,r){return(ws.get(t.call(this,n,r))||To)(e.call(this,n,r))}var t=Lo,e=zo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var ws=Zo.map({circle:To,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*As)),e=t*As;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Zo.svg.symbolTypes=ws.keys();var Ss,ks,Es=Math.sqrt(3),As=Math.tan(30*Aa),Cs=[],Ns=0;Cs.call=pa.call,Cs.empty=pa.empty,Cs.node=pa.node,Cs.size=pa.size,Zo.transition=function(n){return arguments.length?Ss?n.transition():n:ma.transition()},Zo.transition.prototype=Cs,Cs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),Po(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return qo(i,u)},Cs.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Po(u,g,o,i),t.push(u)}return qo(a,o)},Cs.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return qo(u,this.id)},Cs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Cs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Du:hu,a=Zo.ns.qualify(n);return Ro(this,"attr."+n,t,a.local?i:u)},Cs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Zo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Cs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Wo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=hu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Ro(this,"style."+n,t,u)},Cs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Wo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Cs.text=function(n){return Ro(this,"text",n,Do)},Cs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Cs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Zo.ease.apply(Zo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Cs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Cs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Cs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=ks,u=Ss;Ss=e,P(this,function(t,r,u){ks=t.__transition__[e],n.call(t,t.__data__,r,u)}),ks=r,Ss=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Zo.dispatch("start","end"))).on(n,t)});return this},Cs.transition=function(){for(var n,t,e,r,u=this.id,i=++Ns,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Po(e,s,i,r)),n.push(e)}return qo(o,i)},Zo.svg.axis=function(){function n(n){n.each(function(){var n,s=Zo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",ka),d=Zo.transition(p.exit()).style("opacity",ka).remove(),m=Zo.transition(p.order()).style("opacity",1),y=Ti(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Zo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Uo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Uo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=jo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=jo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Zo.scale.linear(),r=zs,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ls?t+"":zs,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var zs="bottom",Ls={top:1,right:1,bottom:1,left:1};Zo.svg.brush=function(){function n(i){i.each(function(){var i=Zo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Ts[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Zo.transition(i),h=Zo.transition(o);c&&(l=Ti(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ti(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Zo.event.keyCode&&(C||(x=null,z[0]-=l[1],z[1]-=f[1],C=2),y())}function p(){32==Zo.event.keyCode&&2==C&&(z[0]+=l[1],z[1]+=f[1],C=0,y())}function v(){var n=Zo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Zo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),z[0]=l[+(n[0]<x[0])],z[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=Ti(t),c=a[0],s=a[1],p=z[e],v=e?f:l,d=v[1]-v[0];return C&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Zo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Zo.select(Zo.event.target),w=a.of(_,arguments),S=Zo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=I(),z=Zo.mouse(_),L=Zo.select(Wo).on("keydown.brush",u).on("keyup.brush",p);if(Zo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=l[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[l[1-T]-z[0],f[1-q]-z[1]],z[0]=l[T],z[1]=f[q]}else Zo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Zo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=qs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ss?Zo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=gu(l,t.x),r=gu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=qs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=qs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Zo.rebind(n,a,"on")};var Ts={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},qs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Rs=Qa.format=ic.timeFormat,Ds=Rs.utc,Ps=Ds("%Y-%m-%dT%H:%M:%S.%LZ");Rs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ho:Ps,Ho.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Ho.toString=Ps.toString,Qa.second=Dt(function(n){return new nc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Qa.seconds=Qa.second.range,Qa.seconds.utc=Qa.second.utc.range,Qa.minute=Dt(function(n){return new nc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Qa.minutes=Qa.minute.range,Qa.minutes.utc=Qa.minute.utc.range,Qa.hour=Dt(function(n){var t=n.getTimezoneOffset()/60;return new nc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Qa.hours=Qa.hour.range,Qa.hours.utc=Qa.hour.utc.range,Qa.month=Dt(function(n){return n=Qa.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Qa.months=Qa.month.range,Qa.months.utc=Qa.month.utc.range;var Us=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],js=[[Qa.second,1],[Qa.second,5],[Qa.second,15],[Qa.second,30],[Qa.minute,1],[Qa.minute,5],[Qa.minute,15],[Qa.minute,30],[Qa.hour,1],[Qa.hour,3],[Qa.hour,6],[Qa.hour,12],[Qa.day,1],[Qa.day,2],[Qa.week,1],[Qa.month,1],[Qa.month,3],[Qa.year,1]],Hs=Rs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",we]]),Fs={range:function(n,t,e){return Zo.range(Math.ceil(n/e)*e,+t,e).map(Oo)},floor:wt,ceil:wt};js.year=Qa.year,Qa.scale=function(){return Fo(Zo.scale.linear(),js,Hs)};var Os=js.map(function(n){return[n[0].utc,n[1]]}),Ys=Ds.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",we]]);Os.year=Qa.year.utc,Qa.scale.utc=function(){return Fo(Zo.scale.linear(),Os,Ys)},Zo.text=St(function(n){return n.responseText}),Zo.json=function(n,t){return kt(n,"application/json",Yo,t)},Zo.html=function(n,t){return kt(n,"text/html",Io,t)},Zo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Zo):"object"==typeof module&&module.exports&&(module.exports=Zo),this.d3=Zo}(); \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/.bower.json b/platforms/browser/www/lib/es5-shim/.bower.json deleted file mode 100644 index 2841e33b..00000000 --- a/platforms/browser/www/lib/es5-shim/.bower.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/es5-shim" - }, - "homepage": "https://github.com/es-shims/es5-shim", - "authors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "tests" - ], - "_release": "3.1.1", - "_resolution": { - "type": "version", - "tag": "v3.1.1", - "commit": "f5ca40f6f49b7eb0abef39bb1c3a5b4f7ca176d5" - }, - "_source": "git://github.com/es-shims/es5-shim.git", - "_target": "~3.1.0", - "_originalSource": "es5-shim" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/CHANGES b/platforms/browser/www/lib/es5-shim/CHANGES deleted file mode 100644 index 2447cfc9..00000000 --- a/platforms/browser/www/lib/es5-shim/CHANGES +++ /dev/null @@ -1,124 +0,0 @@ -3.1.1 - - Update minified files (#231) - -3.1.0 - - Fix String#replace in Firefox up through 29 (#228) - -3.0.2 - - Fix `Function#bind` in IE 7 and 8 (#224, #225, #226) - -3.0.1 - - Version bump to ensure npm has newest minified assets - -3.0.0 - - es5-sham: fix `Object.getPrototypeOf` and `Object.getOwnPropertyDescriptor` for Opera Mini - - Better override noncompliant native ES5 methods: `Array#forEach`, `Array#map`, `Array#filter`, `Array#every`, `Array#some`, `Array#reduce`, `Date.parse`, `String#trim` - - Added spec-compliant shim for `parseInt` - - Ensure `Object.keys` handles more edge cases with `arguments` objects and boxed primitives - - Improve minification of builds - -2.3.0 - - parseInt is now properly shimmed in ES3 browsers to default the radix - - update URLs to point to the new organization - -2.2.0 - - Function.prototype.bind shim now reports correct length on a bound function - - fix node 0.6.x v8 bug in Array#forEach - - test improvements - -2.1.0 - - Object.create fixes - - tweaks to the Object.defineProperties shim - -2.0.0 - - Separate reliable shims from dubious shims (shams). - -1.2.10 - - Group-effort Style Cleanup - - Took a stab at fixing Object.defineProperty on IE8 without - bad side-effects. (@hax) - - Object.isExtensible no longer fakes it. (@xavierm) - - Date.prototype.toISOString no longer deals with partial - ISO dates, per spec (@kitcambridge) - - More (mostly from @bryanforbes) - -1.2.9 - - Corrections to toISOString by @kitcambridge - - Fixed three bugs in array methods revealed by Jasmine tests. - - Cleaned up Function.prototype.bind with more fixes and tests from - @bryanforbes. - -1.2.8 - - Actually fixed problems with Function.prototype.bind, and regressions - from 1.2.7 (@bryanforbes, @jdalton #36) - -1.2.7 - REGRESSED - - Fixed problems with Function.prototype.bind when called as a constructor. - (@jdalton #36) - -1.2.6 - - Revised Date.parse to match ES 5.1 (kitcambridge) - -1.2.5 - - Fixed a bug for padding it Date..toISOString (tadfisher issue #33) - -1.2.4 - - Fixed a descriptor bug in Object.defineProperty (raynos) - -1.2.3 - - Cleaned up RequireJS and <script> boilerplate - -1.2.2 - - Changed reduce to follow the letter of the spec with regard to having and - owning properties. - - Fixed a bug where RegExps pass as Functions in some engines in reduce. - -1.2.1 - - Adding few fixes to make jshint happy. - - Fix for issue #12, function expressions can cause scoping issues in IE. - - NPM will minify on install or when `npm run-script install` is executed. - - Adding .gitignore to avoid publishing dev dependencies. - -1.2.0 - - Making script loadable as AMD module. - - Adding `indexOf` to the list of safe shims. - -1.1.0 - - Added support for accessor properties where possible (which is all browsers - except IE). - - Stop exposing bound function's (that are returned by - `Function.prototype.bind`) internal properties (`bound, boundTo, boundArgs`) - as in some cases (when using facade objects for example) capabilities of the - enclosed functions will be leaked. - - `Object.create` now explicitly sets `__proto__` property to guarantee - correct behavior of `Object.getPrototypeOf`'s on all objects created using - `Object.create`. - - Switched to `===` from `==` where possible as it's slightly faster on older - browsers that are target of this lib. - - Added names to all anonymous functions to have a better stack traces. - -1.0.0 - - fixed Date.toISODate, using UTC accessors, as in - http://code.google.com/p/v8/source/browse/trunk/src/date.js?r=6120#986 - (arian) - -0.0.4 - - Revised Object.getPrototypeOf to work in more cases - in response to http://ejohn.org/blog/objectgetprototypeof/ - [issue #2] (fschaefer) - -0.0.3 - - Fixed typos in Object.keys (samsonjs) - -0.0.2 - Per kangax's recommendations: - - faster Object.create(null) - - fixed a function-scope function declaration statement in Object.create - -0.0.1 - - fixed Object.create(null), in so far as that's possible - - reworked Rhino Object.freeze(Function) bug detector and patcher - -0.0.0 - - forked from narwhal-lib - diff --git a/platforms/browser/www/lib/es5-shim/CONTRIBUTORS.md b/platforms/browser/www/lib/es5-shim/CONTRIBUTORS.md deleted file mode 100644 index 43ebf770..00000000 --- a/platforms/browser/www/lib/es5-shim/CONTRIBUTORS.md +++ /dev/null @@ -1,27 +0,0 @@ - -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal - Project) -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License -- kossnocorp Sasha Koss XXX TODO License or CLA -- bryanforbes Bryan Forbes XXX TODO License or CLA -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD - License -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain) -- iwyg XXX TODO License or CLA -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License -- xavierm02 Montillet Xavier Copyright (C) 2011 MIT License -- Raynos Jake Verbaten Copyright (C) 2011 MIT Licence -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License -- rwldrn Rick Waldron Copyright (C) 2011 MIT License -- lexer Alexey Zakharov XXX TODO License or CLA -- 280 North Inc. (Now Motorola LLC, a subsidiary of Google Inc.) - Copyright (C) 2009 MIT License -- Steven Levithan Copyright (C) 2012 MIT License -- Jordan Harband (C) 2013 MIT License - diff --git a/platforms/browser/www/lib/es5-shim/LICENSE b/platforms/browser/www/lib/es5-shim/LICENSE deleted file mode 100644 index 3dbd7de3..00000000 --- a/platforms/browser/www/lib/es5-shim/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2009-2014 Kristopher Michael Kowal and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/platforms/browser/www/lib/es5-shim/README.md b/platforms/browser/www/lib/es5-shim/README.md deleted file mode 100644 index 40ec70b1..00000000 --- a/platforms/browser/www/lib/es5-shim/README.md +++ /dev/null @@ -1,168 +0,0 @@ -#es5-shim <sup>[![Version Badge][2]][1]</sup> - -[![npm badge][9]][1] - -[![Build Status][3]][4] [![dependency status][5]][6] [![dev dependency status][7]][8] - -`es5-shim.js` and `es5-shim.min.js` monkey-patch a JavaScript context to -contain all EcmaScript 5 methods that can be faithfully emulated with a -legacy JavaScript engine. - -`es5-sham.js` and `es5-sham.min.js` monkey-patch other ES5 methods as -closely as possible. For these methods, as closely as possible to ES5 -is not very close. Many of these shams are intended only to allow code -to be written to ES5 without causing run-time errors in older engines. -In many cases, this means that these shams cause many ES5 methods to -silently fail. Decide carefully whether this is what you want. - - -## Tests - -The tests are written with the Jasmine BDD test framework. -To run the tests, navigate to <root-folder>/tests/. - -## Shims - -### Complete tests ### - -* Array.prototype.every -* Array.prototype.filter -* Array.prototype.forEach -* Array.prototype.indexOf -* Array.prototype.lastIndexOf -* Array.prototype.map -* Array.prototype.some -* Array.prototype.reduce -* Array.prototype.reduceRight -* Array.isArray -* Date.now -* Date.prototype.toJSON -* Function.prototype.bind - * :warning: Caveat: the bound function has a prototype property. - * :warning: Caveat: bound functions do not try too hard to keep you - from manipulating their ``arguments`` and ``caller`` properties. - * :warning: Caveat: bound functions don't have checks in ``call`` and - ``apply`` to avoid executing as a constructor. -* Number.prototype.toFixed -* Object.keys -* String.prototype.split -* String.prototype.trim -* String.prototype.replace - * Firefox (through v29) natively handles capturing groups incorrectly. -* Date.parse (for ISO parsing) -* Date.prototype.toISOString -* parseInt - -## Shams - -* :warning: Object.create - - For the case of simply "begetting" an object that inherits - prototypically from another, this should work fine across legacy - engines. - - :warning: Object.create(null) will work only in browsers that - support prototype assignment. This creates an object that does not - have any properties inherited from Object.prototype. It will - silently fail otherwise. - - :warning: The second argument is passed to Object.defineProperties - which will probably fail either silently or with extreme predudice. - -* :warning: Object.getPrototypeOf - - This will return "undefined" in some cases. It uses `__proto__` if - it's available. Failing that, it uses constructor.prototype, which - depends on the constructor property of the object's prototype having - not been replaced. If your object was created like this, it won't - work: - - function Foo() { - } - Foo.prototype = {}; - - Because the prototype reassignment destroys the constructor - property. - - This will work for all objects that were created using - `Object.create` implemented with this library. - -* :warning: Object.getOwnPropertyNames - - This method uses Object.keys, so it will not be accurate on legacy - engines. - -* Object.isSealed - - Returns "false" in all legacy engines for all objects, which is - conveniently guaranteed to be accurate. - -* Object.isFrozen - - Returns "false" in all legacy engines for all objects, which is - conveniently guaranteed to be accurate. - -* Object.isExtensible - - Works like a charm, by trying very hard to extend the object then - redacting the extension. - -### May fail - -* :warning: Object.getOwnPropertyDescriptor - - The behavior of this shim does not conform to ES5. It should - probably not be used at this time, until its behavior has been - reviewed and been confirmed to be useful in legacy engines. - -* :warning: Object.defineProperty - - In the worst of circumstances, IE 8 provides a version of this - method that only works on DOM objects. This sham will not be - installed. The given version of `defineProperty` will throw an - exception if used on non-DOM objects. - - In slightly better circumstances, this method will silently fail to - set "writable", "enumerable", and "configurable" properties. - - Providing a getter or setter with "get" or "set" on a descriptor - will silently fail on engines that lack "__defineGetter__" and - "__defineSetter__", which include all versions of IE. - - https://github.com/es-shims/es5-shim/issues#issue/5 - -* :warning: Object.defineProperties - - This uses the Object.defineProperty shim - -* Object.seal - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -* Object.freeze - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -* Object.preventExtensions - - Silently fails on all legacy engines. This should be - fine unless you are depending on the safety and security - provisions of this method, which you cannot possibly - obtain in legacy engines. - -[1]: https://npmjs.org/package/es5-shim -[2]: http://vb.teelaun.ch/es-shims/es5-shim.svg -[3]: https://travis-ci.org/es-shims/es5-shim.png -[4]: https://travis-ci.org/es-shims/es5-shim -[5]: https://david-dm.org/es-shims/es5-shim.png -[6]: https://david-dm.org/es-shims/es5-shim -[7]: https://david-dm.org/es-shims/es5-shim/dev-status.png -[8]: https://david-dm.org/es-shims/es5-shim#info=devDependencies -[9]: https://nodei.co/npm/es5-shim.png?downloads=true&stars=true - diff --git a/platforms/browser/www/lib/es5-shim/bower.json b/platforms/browser/www/lib/es5-shim/bower.json deleted file mode 100644 index 5e16f67b..00000000 --- a/platforms/browser/www/lib/es5-shim/bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/es5-shim" - }, - "homepage": "https://github.com/es-shims/es5-shim", - "authors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "tests" - ] -} diff --git a/platforms/browser/www/lib/es5-shim/component.json b/platforms/browser/www/lib/es5-shim/component.json deleted file mode 100644 index bf10edea..00000000 --- a/platforms/browser/www/lib/es5-shim/component.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "es5-shim", - "repo": "es-shims/es5-shim", - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "version": "v3.1.1", - "keywords": [ - "shim", - "es5", - "es5", - "shim", - "javascript", - "ecmascript", - "polyfill" - ], - "license": "MIT", - "main": "es5-shim.js", - "scripts": [ - "es5-shim.js" - ] -} diff --git a/platforms/browser/www/lib/es5-shim/es5-sham.js b/platforms/browser/www/lib/es5-shim/es5-sham.js deleted file mode 100644 index f2970566..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-sham.js +++ /dev/null @@ -1,466 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ - -// vim: ts=4 sts=4 sw=4 expandtab - -//Add semicolon to prevent IIFE from being passed as argument to concated code. -; -// Module systems magic dance -(function (definition) { - // RequireJS - if (typeof define === "function") { - define(definition); - // YUI3 - } else if (typeof YUI === "function") { - YUI.add("es5-sham", definition); - // CommonJS and <script> - } else { - definition(); - } -})(function () { - - -var call = Function.prototype.call; -var prototypeOfObject = Object.prototype; -var owns = call.bind(prototypeOfObject.hasOwnProperty); - -// If JS engine supports accessors creating shortcuts. -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} - -// ES5 15.2.3.2 -// http://es5.github.com/#x15.2.3.2 -if (!Object.getPrototypeOf) { - // https://github.com/es-shims/es5-shim/issues#issue/2 - // http://ejohn.org/blog/objectgetprototypeof/ - // recommended by fschaefer on github - // - // sure, and webreflection says ^_^ - // ... this will nerever possibly return null - // ... Opera Mini breaks here with infinite loops - Object.getPrototypeOf = function getPrototypeOf(object) { - var proto = object.__proto__; - if (proto || proto === null) { - return proto; - } else if (object.constructor) { - return object.constructor.prototype; - } else { - return prototypeOfObject; - } - }; -} - -//ES5 15.2.3.3 -//http://es5.github.com/#x15.2.3.3 - -function doesGetOwnPropertyDescriptorWork(object) { - try { - object.sentinel = 0; - return Object.getOwnPropertyDescriptor( - object, - "sentinel" - ).value === 0; - } catch (exception) { - // returns falsy - } -} - -//check whether getOwnPropertyDescriptor works if it's given. Otherwise, -//shim partially. -if (Object.defineProperty) { - var getOwnPropertyDescriptorWorksOnObject = doesGetOwnPropertyDescriptorWork({}); - var getOwnPropertyDescriptorWorksOnDom = typeof document === "undefined" || - doesGetOwnPropertyDescriptorWork(document.createElement("div")); - if (!getOwnPropertyDescriptorWorksOnDom || !getOwnPropertyDescriptorWorksOnObject) { - var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor; - } -} - -if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) { - var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a non-object: "; - - Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { - if ((typeof object !== "object" && typeof object !== "function") || object === null) { - throw new TypeError(ERR_NON_OBJECT + object); - } - - // make a valiant attempt to use the real getOwnPropertyDescriptor - // for I8's DOM elements. - if (getOwnPropertyDescriptorFallback) { - try { - return getOwnPropertyDescriptorFallback.call(Object, object, property); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - // If object does not owns property return undefined immediately. - if (!owns(object, property)) { - return; - } - - // If object has a property then it's for sure both `enumerable` and - // `configurable`. - var descriptor = { enumerable: true, configurable: true }; - - // If JS engine supports accessor properties then property may be a - // getter or setter. - if (supportsAccessors) { - // Unfortunately `__lookupGetter__` will return a getter even - // if object has own non getter property along with a same named - // inherited getter. To avoid misbehavior we temporary remove - // `__proto__` so that `__lookupGetter__` will return getter only - // if it's owned by an object. - var prototype = object.__proto__; - var notPrototypeOfObject = object !== prototypeOfObject; - // avoid recursion problem, breaking in Opera Mini when - // Object.getOwnPropertyDescriptor(Object.prototype, 'toString') - // or any other Object.prototype accessor - if (notPrototypeOfObject) { - object.__proto__ = prototypeOfObject; - } - - var getter = lookupGetter(object, property); - var setter = lookupSetter(object, property); - - if (notPrototypeOfObject) { - // Once we have getter and setter we can put values back. - object.__proto__ = prototype; - } - - if (getter || setter) { - if (getter) { - descriptor.get = getter; - } - if (setter) { - descriptor.set = setter; - } - // If it was accessor property we're done and return here - // in order to avoid adding `value` to the descriptor. - return descriptor; - } - } - - // If we got this far we know that object has an own property that is - // not an accessor so we set it as a value and return descriptor. - descriptor.value = object[property]; - descriptor.writable = true; - return descriptor; - }; -} - -// ES5 15.2.3.4 -// http://es5.github.com/#x15.2.3.4 -if (!Object.getOwnPropertyNames) { - Object.getOwnPropertyNames = function getOwnPropertyNames(object) { - return Object.keys(object); - }; -} - -// ES5 15.2.3.5 -// http://es5.github.com/#x15.2.3.5 -if (!Object.create) { - - // Contributed by Brandon Benvie, October, 2012 - var createEmpty; - var supportsProto = !({__proto__:null} instanceof Object); - // the following produces false positives - // in Opera Mini => not a reliable check - // Object.prototype.__proto__ === null - if (supportsProto || typeof document === 'undefined') { - createEmpty = function () { - return { "__proto__": null }; - }; - } else { - // In old IE __proto__ can't be used to manually set `null`, nor does - // any other method exist to make an object that inherits from nothing, - // aside from Object.prototype itself. Instead, create a new global - // object and *steal* its Object.prototype and strip it bare. This is - // used as the prototype to create nullary objects. - createEmpty = function () { - var iframe = document.createElement('iframe'); - var parent = document.body || document.documentElement; - iframe.style.display = 'none'; - parent.appendChild(iframe); - iframe.src = 'javascript:'; - var empty = iframe.contentWindow.Object.prototype; - parent.removeChild(iframe); - iframe = null; - delete empty.constructor; - delete empty.hasOwnProperty; - delete empty.propertyIsEnumerable; - delete empty.isPrototypeOf; - delete empty.toLocaleString; - delete empty.toString; - delete empty.valueOf; - empty.__proto__ = null; - - function Empty() {} - Empty.prototype = empty; - // short-circuit future calls - createEmpty = function () { - return new Empty(); - }; - return new Empty(); - }; - } - - Object.create = function create(prototype, properties) { - - var object; - function Type() {} // An empty constructor. - - if (prototype === null) { - object = createEmpty(); - } else { - if (typeof prototype !== "object" && typeof prototype !== "function") { - // In the native implementation `parent` can be `null` - // OR *any* `instanceof Object` (Object|Function|Array|RegExp|etc) - // Use `typeof` tho, b/c in old IE, DOM elements are not `instanceof Object` - // like they are in modern browsers. Using `Object.create` on DOM elements - // is...err...probably inappropriate, but the native version allows for it. - throw new TypeError("Object prototype may only be an Object or null"); // same msg as Chrome - } - Type.prototype = prototype; - object = new Type(); - // IE has no built-in implementation of `Object.getPrototypeOf` - // neither `__proto__`, but this manually setting `__proto__` will - // guarantee that `Object.getPrototypeOf` will work as expected with - // objects created using `Object.create` - object.__proto__ = prototype; - } - - if (properties !== void 0) { - Object.defineProperties(object, properties); - } - - return object; - }; -} - -// ES5 15.2.3.6 -// http://es5.github.com/#x15.2.3.6 - -// Patch for WebKit and IE8 standard mode -// Designed by hax <hax.github.com> -// related issue: https://github.com/es-shims/es5-shim/issues#issue/5 -// IE8 Reference: -// http://msdn.microsoft.com/en-us/library/dd282900.aspx -// http://msdn.microsoft.com/en-us/library/dd229916.aspx -// WebKit Bugs: -// https://bugs.webkit.org/show_bug.cgi?id=36423 - -function doesDefinePropertyWork(object) { - try { - Object.defineProperty(object, "sentinel", {}); - return "sentinel" in object; - } catch (exception) { - // returns falsy - } -} - -// check whether defineProperty works if it's given. Otherwise, -// shim partially. -if (Object.defineProperty) { - var definePropertyWorksOnObject = doesDefinePropertyWork({}); - var definePropertyWorksOnDom = typeof document === "undefined" || - doesDefinePropertyWork(document.createElement("div")); - if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { - var definePropertyFallback = Object.defineProperty, - definePropertiesFallback = Object.defineProperties; - } -} - -if (!Object.defineProperty || definePropertyFallback) { - var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; - var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " - var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + - "on this javascript engine"; - - Object.defineProperty = function defineProperty(object, property, descriptor) { - if ((typeof object !== "object" && typeof object !== "function") || object === null) { - throw new TypeError(ERR_NON_OBJECT_TARGET + object); - } - if ((typeof descriptor !== "object" && typeof descriptor !== "function") || descriptor === null) { - throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); - } - // make a valiant attempt to use the real defineProperty - // for I8's DOM elements. - if (definePropertyFallback) { - try { - return definePropertyFallback.call(Object, object, property, descriptor); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - // If it's a data property. - if (owns(descriptor, "value")) { - // fail silently if "writable", "enumerable", or "configurable" - // are requested but not supported - /* - // alternate approach: - if ( // can't implement these features; allow false but not true - !(owns(descriptor, "writable") ? descriptor.writable : true) || - !(owns(descriptor, "enumerable") ? descriptor.enumerable : true) || - !(owns(descriptor, "configurable") ? descriptor.configurable : true) - ) - throw new RangeError( - "This implementation of Object.defineProperty does not " + - "support configurable, enumerable, or writable." - ); - */ - - if (supportsAccessors && (lookupGetter(object, property) || - lookupSetter(object, property))) - { - // As accessors are supported only on engines implementing - // `__proto__` we can safely override `__proto__` while defining - // a property to make sure that we don't hit an inherited - // accessor. - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - // Deleting a property anyway since getter / setter may be - // defined on object itself. - delete object[property]; - object[property] = descriptor.value; - // Setting original `__proto__` back now. - object.__proto__ = prototype; - } else { - object[property] = descriptor.value; - } - } else { - if (!supportsAccessors) { - throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); - } - // If we got that far then getters and setters can be defined !! - if (owns(descriptor, "get")) { - defineGetter(object, property, descriptor.get); - } - if (owns(descriptor, "set")) { - defineSetter(object, property, descriptor.set); - } - } - return object; - }; -} - -// ES5 15.2.3.7 -// http://es5.github.com/#x15.2.3.7 -if (!Object.defineProperties || definePropertiesFallback) { - Object.defineProperties = function defineProperties(object, properties) { - // make a valiant attempt to use the real defineProperties - if (definePropertiesFallback) { - try { - return definePropertiesFallback.call(Object, object, properties); - } catch (exception) { - // try the shim if the real one doesn't work - } - } - - for (var property in properties) { - if (owns(properties, property) && property !== "__proto__") { - Object.defineProperty(object, property, properties[property]); - } - } - return object; - }; -} - -// ES5 15.2.3.8 -// http://es5.github.com/#x15.2.3.8 -if (!Object.seal) { - Object.seal = function seal(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// ES5 15.2.3.9 -// http://es5.github.com/#x15.2.3.9 -if (!Object.freeze) { - Object.freeze = function freeze(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// detect a Rhino bug and patch it -try { - Object.freeze(function () {}); -} catch (exception) { - Object.freeze = (function freeze(freezeObject) { - return function freeze(object) { - if (typeof object === "function") { - return object; - } else { - return freezeObject(object); - } - }; - })(Object.freeze); -} - -// ES5 15.2.3.10 -// http://es5.github.com/#x15.2.3.10 -if (!Object.preventExtensions) { - Object.preventExtensions = function preventExtensions(object) { - // this is misleading and breaks feature-detection, but - // allows "securable" code to "gracefully" degrade to working - // but insecure code. - return object; - }; -} - -// ES5 15.2.3.11 -// http://es5.github.com/#x15.2.3.11 -if (!Object.isSealed) { - Object.isSealed = function isSealed(object) { - return false; - }; -} - -// ES5 15.2.3.12 -// http://es5.github.com/#x15.2.3.12 -if (!Object.isFrozen) { - Object.isFrozen = function isFrozen(object) { - return false; - }; -} - -// ES5 15.2.3.13 -// http://es5.github.com/#x15.2.3.13 -if (!Object.isExtensible) { - Object.isExtensible = function isExtensible(object) { - // 1. If Type(O) is not Object throw a TypeError exception. - if (Object(object) !== object) { - throw new TypeError(); // TODO message - } - // 2. Return the Boolean value of the [[Extensible]] internal property of O. - var name = ''; - while (owns(object, name)) { - name += '?'; - } - object[name] = true; - var returnValue = owns(object, name); - delete object[name]; - return returnValue; - }; -} - -}); diff --git a/platforms/browser/www/lib/es5-shim/es5-sham.map b/platforms/browser/www/lib/es5-shim/es5-sham.map deleted file mode 100644 index be9b6158..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-sham.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["es5-sham.js"],"names":["definition","define","YUI","add","call","Function","prototype","prototypeOfObject","Object","owns","bind","hasOwnProperty","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","getPrototypeOf","object","proto","__proto__","constructor","doesGetOwnPropertyDescriptorWork","sentinel","getOwnPropertyDescriptor","value","exception","defineProperty","getOwnPropertyDescriptorWorksOnObject","getOwnPropertyDescriptorWorksOnDom","document","createElement","getOwnPropertyDescriptorFallback","ERR_NON_OBJECT","property","TypeError","descriptor","enumerable","configurable","notPrototypeOfObject","getter","setter","get","set","writable","getOwnPropertyNames","keys","create","createEmpty","supportsProto","iframe","parent","body","documentElement","style","display","appendChild","src","empty","contentWindow","removeChild","propertyIsEnumerable","isPrototypeOf","toLocaleString","toString","valueOf","Empty","properties","Type","defineProperties","doesDefinePropertyWork","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","definePropertiesFallback","ERR_NON_OBJECT_DESCRIPTOR","ERR_NON_OBJECT_TARGET","ERR_ACCESSORS_NOT_SUPPORTED","seal","freeze","freezeObject","preventExtensions","isSealed","isFrozen","isExtensible","name","returnValue"],"mappings":"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"} \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/es5-sham.min.js b/platforms/browser/www/lib/es5-shim/es5-sham.min.js deleted file mode 100644 index 70f8f0ca..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-sham.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ -(function(e){if(typeof define==="function"){define(e)}else if(typeof YUI==="function"){YUI.add("es5-sham",e)}else{e()}})(function(){var e=Function.prototype.call;var t=Object.prototype;var r=e.bind(t.hasOwnProperty);var n;var o;var i;var c;var f;if(f=r(t,"__defineGetter__")){n=e.bind(t.__defineGetter__);o=e.bind(t.__defineSetter__);i=e.bind(t.__lookupGetter__);c=e.bind(t.__lookupSetter__)}if(!Object.getPrototypeOf){Object.getPrototypeOf=function g(e){var r=e.__proto__;if(r||r===null){return r}else if(e.constructor){return e.constructor.prototype}else{return t}}}function u(e){try{e.sentinel=0;return Object.getOwnPropertyDescriptor(e,"sentinel").value===0}catch(t){}}if(Object.defineProperty){var p=u({});var a=typeof document==="undefined"||u(document.createElement("div"));if(!a||!p){var l=Object.getOwnPropertyDescriptor}}if(!Object.getOwnPropertyDescriptor||l){var b="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function E(e,n){if(typeof e!=="object"&&typeof e!=="function"||e===null){throw new TypeError(b+e)}if(l){try{return l.call(Object,e,n)}catch(o){}}if(!r(e,n)){return}var u={enumerable:true,configurable:true};if(f){var p=e.__proto__;var a=e!==t;if(a){e.__proto__=t}var _=i(e,n);var s=c(e,n);if(a){e.__proto__=p}if(_||s){if(_){u.get=_}if(s){u.set=s}return u}}u.value=e[n];u.writable=true;return u}}if(!Object.getOwnPropertyNames){Object.getOwnPropertyNames=function z(e){return Object.keys(e)}}if(!Object.create){var _;var s=!({__proto__:null}instanceof Object);if(s||typeof document==="undefined"){_=function(){return{__proto__:null}}}else{_=function(){var e=document.createElement("iframe");var t=document.body||document.documentElement;e.style.display="none";t.appendChild(e);e.src="javascript:";var r=e.contentWindow.Object.prototype;t.removeChild(e);e=null;delete r.constructor;delete r.hasOwnProperty;delete r.propertyIsEnumerable;delete r.isPrototypeOf;delete r.toLocaleString;delete r.toString;delete r.valueOf;r.__proto__=null;function n(){}n.prototype=r;_=function(){return new n};return new n}}Object.create=function S(e,t){var r;function n(){}if(e===null){r=_()}else{if(typeof e!=="object"&&typeof e!=="function"){throw new TypeError("Object prototype may only be an Object or null")}n.prototype=e;r=new n;r.__proto__=e}if(t!==void 0){Object.defineProperties(r,t)}return r}}function d(e){try{Object.defineProperty(e,"sentinel",{});return"sentinel"in e}catch(t){}}if(Object.defineProperty){var y=d({});var O=typeof document==="undefined"||d(document.createElement("div"));if(!y||!O){var j=Object.defineProperty,v=Object.defineProperties}}if(!Object.defineProperty||j){var w="Property description must be an object: ";var P="Object.defineProperty called on non-object: ";var m="getters & setters can not be defined "+"on this javascript engine";Object.defineProperty=function T(e,u,p){if(typeof e!=="object"&&typeof e!=="function"||e===null){throw new TypeError(P+e)}if(typeof p!=="object"&&typeof p!=="function"||p===null){throw new TypeError(w+p)}if(j){try{return j.call(Object,e,u,p)}catch(a){}}if(r(p,"value")){if(f&&(i(e,u)||c(e,u))){var l=e.__proto__;e.__proto__=t;delete e[u];e[u]=p.value;e.__proto__=l}else{e[u]=p.value}}else{if(!f){throw new TypeError(m)}if(r(p,"get")){n(e,u,p.get)}if(r(p,"set")){o(e,u,p.set)}}return e}}if(!Object.defineProperties||v){Object.defineProperties=function D(e,t){if(v){try{return v.call(Object,e,t)}catch(n){}}for(var o in t){if(r(t,o)&&o!=="__proto__"){Object.defineProperty(e,o,t[o])}}return e}}if(!Object.seal){Object.seal=function x(e){return e}}if(!Object.freeze){Object.freeze=function k(e){return e}}try{Object.freeze(function(){})}catch(h){Object.freeze=function F(e){return function t(r){if(typeof r==="function"){return r}else{return e(r)}}}(Object.freeze)}if(!Object.preventExtensions){Object.preventExtensions=function G(e){return e}}if(!Object.isSealed){Object.isSealed=function I(e){return false}}if(!Object.isFrozen){Object.isFrozen=function C(e){return false}}if(!Object.isExtensible){Object.isExtensible=function N(e){if(Object(e)!==e){throw new TypeError}var t="";while(r(e,t)){t+="?"}e[t]=true;var n=r(e,t);delete e[t];return n}}}); -//# sourceMappingURL=es5-sham.map \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/es5-shim.js b/platforms/browser/www/lib/es5-shim/es5-shim.js deleted file mode 100644 index aed02900..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-shim.js +++ /dev/null @@ -1,1434 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ - -// vim: ts=4 sts=4 sw=4 expandtab - -//Add semicolon to prevent IIFE from being passed as argument to concated code. -; - -// UMD (Universal Module Definition) -// see https://github.com/umdjs/umd/blob/master/returnExports.js -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like enviroments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.returnExports = factory(); - } -}(this, function () { - -/** - * Brings an environment as close to ECMAScript 5 compliance - * as is possible with the facilities of erstwhile engines. - * - * Annotated ES5: http://es5.github.com/ (specific links below) - * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/ - */ - -// Shortcut to an often accessed properties, in order to avoid multiple -// dereference that costs universally. -var call = Function.prototype.call; -var prototypeOfArray = Array.prototype; -var prototypeOfObject = Object.prototype; -var _Array_slice_ = prototypeOfArray.slice; -var array_splice = Array.prototype.splice; -var array_push = Array.prototype.push; -var array_unshift = Array.prototype.unshift; - -var isFunction = function (val) { - return prototypeOfObject.toString.call(val) === '[object Function]'; -}; -var isRegex = function (val) { - return prototypeOfObject.toString.call(val) === '[object RegExp]'; -}; - -// -// Function -// ======== -// - -// ES-5 15.3.4.5 -// http://es5.github.com/#x15.3.4.5 - -function Empty() {} - -if (!Function.prototype.bind) { - Function.prototype.bind = function bind(that) { // .length is 1 - // 1. Let Target be the this value. - var target = this; - // 2. If IsCallable(Target) is false, throw a TypeError exception. - if (!isFunction(target)) { - throw new TypeError("Function.prototype.bind called on incompatible " + target); - } - // 3. Let A be a new (possibly empty) internal list of all of the - // argument values provided after thisArg (arg1, arg2 etc), in order. - // XXX slicedArgs will stand in for "A" if used - var args = _Array_slice_.call(arguments, 1); // for normal call - // 4. Let F be a new native ECMAScript object. - // 11. Set the [[Prototype]] internal property of F to the standard - // built-in Function prototype object as specified in 15.3.3.1. - // 12. Set the [[Call]] internal property of F as described in - // 15.3.4.5.1. - // 13. Set the [[Construct]] internal property of F as described in - // 15.3.4.5.2. - // 14. Set the [[HasInstance]] internal property of F as described in - // 15.3.4.5.3. - var binder = function () { - - if (this instanceof bound) { - // 15.3.4.5.2 [[Construct]] - // When the [[Construct]] internal method of a function object, - // F that was created using the bind function is called with a - // list of arguments ExtraArgs, the following steps are taken: - // 1. Let target be the value of F's [[TargetFunction]] - // internal property. - // 2. If target has no [[Construct]] internal method, a - // TypeError exception is thrown. - // 3. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Construct]] internal - // method of target providing args as the arguments. - - var result = target.apply( - this, - args.concat(_Array_slice_.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - - } else { - // 15.3.4.5.1 [[Call]] - // When the [[Call]] internal method of a function object, F, - // which was created using the bind function is called with a - // this value and a list of arguments ExtraArgs, the following - // steps are taken: - // 1. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 2. Let boundThis be the value of F's [[BoundThis]] internal - // property. - // 3. Let target be the value of F's [[TargetFunction]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Call]] internal method - // of target providing boundThis as the this value and - // providing args as the arguments. - - // equiv: target.call(this, ...boundArgs, ...args) - return target.apply( - that, - args.concat(_Array_slice_.call(arguments)) - ); - - } - - }; - - // 15. If the [[Class]] internal property of Target is "Function", then - // a. Let L be the length property of Target minus the length of A. - // b. Set the length own property of F to either 0 or L, whichever is - // larger. - // 16. Else set the length own property of F to 0. - - var boundLength = Math.max(0, target.length - args.length); - - // 17. Set the attributes of the length own property of F to the values - // specified in 15.3.5.1. - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs.push("$" + i); - } - - // XXX Build a dynamic function with desired amount of arguments is the only - // way to set the length property of a function. - // In environments where Content Security Policies enabled (Chrome extensions, - // for ex.) all use of eval or Function costructor throws an exception. - // However in all of these environments Function.prototype.bind exists - // and so this code will never be executed. - var bound = Function("binder", "return function(" + boundArgs.join(",") + "){return binder.apply(this,arguments)}")(binder); - - if (target.prototype) { - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - // Clean up dangling references. - Empty.prototype = null; - } - - // TODO - // 18. Set the [[Extensible]] internal property of F to true. - - // TODO - // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3). - // 20. Call the [[DefineOwnProperty]] internal method of F with - // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]: - // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and - // false. - // 21. Call the [[DefineOwnProperty]] internal method of F with - // arguments "arguments", PropertyDescriptor {[[Get]]: thrower, - // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}, - // and false. - - // TODO - // NOTE Function objects created using Function.prototype.bind do not - // have a prototype property or the [[Code]], [[FormalParameters]], and - // [[Scope]] internal properties. - // XXX can't delete prototype in pure-js. - - // 22. Return F. - return bound; - }; -} - -// _Please note: Shortcuts are defined after `Function.prototype.bind` as we -// us it in defining shortcuts. -var owns = call.bind(prototypeOfObject.hasOwnProperty); -// Having a toString local variable name breaks in Opera so use _toString. -var _toString = call.bind(prototypeOfObject.toString); - -// If JS engine supports accessors creating shortcuts. -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} - -// -// Array -// ===== -// - -// ES5 15.4.4.12 -// http://es5.github.com/#x15.4.4.12 -// Default value for second param -// [bugfix, ielt9, old browsers] -// IE < 9 bug: [1,2].splice(0).join("") === "" but should be "12" -if ([1, 2].splice(0).length !== 2) { - if (function () { // test IE < 9 to splice bug - see issue #138 - function makeArray(l) { - var a = []; - while (l--) { - a.unshift(l); - } - return a; - } - - var array = []; - var lengthBefore; - - array.splice.bind(array, 0, 0).apply(null, makeArray(20)); - array.splice.bind(array, 0, 0).apply(null, makeArray(26)); - - lengthBefore = array.length; //20 - array.splice(5, 0, "XXX"); // add one element - - if (lengthBefore + 1 === array.length) { - return true;// has right splice implementation without bugs - } - // else { - // IE8 bug - // } - }()) { // IE 6/7 - Array.prototype.splice = function(start, deleteCount) { - if (!arguments.length) { - return []; - } else { - return array_splice.apply(this, [ - start === void 0 ? 0 : start, - deleteCount === void 0 ? (this.length - start) : deleteCount - ].concat(_Array_slice_.call(arguments, 2))); - } - }; - } else { // IE8 - Array.prototype.splice = function(start, deleteCount) { - var result; - var args = _Array_slice_.call(arguments, 2); - var addElementsCount = args.length; - - if (!arguments.length) { - return []; - } - - if (start === void 0) { // default - start = 0; - } - if (deleteCount === void 0) { // default - deleteCount = this.length - start; - } - - if (addElementsCount > 0) { - if (deleteCount <= 0) { - if (start === this.length) { // tiny optimisation #1 - array_push.apply(this, args); - return []; - } - - if (start === 0) { // tiny optimisation #2 - array_unshift.apply(this, args); - return []; - } - } - - // Array.prototype.splice implementation - result = _Array_slice_.call(this, start, start + deleteCount);// delete part - args.push.apply(args, _Array_slice_.call(this, start + deleteCount, this.length));// right part - args.unshift.apply(args, _Array_slice_.call(this, 0, start));// left part - - // delete all items from this array and replace it to 'left part' + _Array_slice_.call(arguments, 2) + 'right part' - args.unshift(0, this.length); - - array_splice.apply(this, args); - - return result; - } - - return array_splice.call(this, start, deleteCount); - }; - - } -} - -// ES5 15.4.4.12 -// http://es5.github.com/#x15.4.4.13 -// Return len+argCount. -// [bugfix, ielt8] -// IE < 8 bug: [].unshift(0) === undefined but should be "1" -if ([].unshift(0) !== 1) { - Array.prototype.unshift = function() { - array_unshift.apply(this, arguments); - return this.length; - }; -} - -// ES5 15.4.3.2 -// http://es5.github.com/#x15.4.3.2 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray -if (!Array.isArray) { - Array.isArray = function isArray(obj) { - return _toString(obj) === "[object Array]"; - }; -} - -// The IsCallable() check in the Array functions -// has been replaced with a strict check on the -// internal class of the object to trap cases where -// the provided function was actually a regular -// expression literal, which in V8 and -// JavaScriptCore is a typeof "function". Only in -// V8 are regular expression literals permitted as -// reduce parameters, so it is desirable in the -// general case for the shim to match the more -// strict and common behavior of rejecting regular -// expressions. - -// ES5 15.4.4.18 -// http://es5.github.com/#x15.4.4.18 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach - - -// Check failure of by-index access of string characters (IE < 9) -// and failure of `0 in boxedString` (Rhino) -var boxedString = Object("a"); -var splitString = boxedString[0] !== "a" || !(0 in boxedString); - -var properlyBoxesContext = function properlyBoxed(method) { - // Check node 0.6.21 bug where third parameter is not boxed - var properlyBoxes = true; - if (method) { - method.call('foo', function (_, __, context) { - if (typeof context !== 'object') { properlyBoxes = false; } - }); - } - return !!method && properlyBoxes; -}; - -if (!Array.prototype.forEach || !properlyBoxesContext(Array.prototype.forEach)) { - Array.prototype.forEach = function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(); // TODO message - } - - while (++i < length) { - if (i in self) { - // Invoke the callback function with call, passing arguments: - // context, property value, property key, thisArg object - // context - fun.call(thisp, self[i], i, object); - } - } - }; -} - -// ES5 15.4.4.19 -// http://es5.github.com/#x15.4.4.19 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map -if (!Array.prototype.map || !properlyBoxesContext(Array.prototype.map)) { - Array.prototype.map = function map(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = Array(length), - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) - result[i] = fun.call(thisp, self[i], i, object); - } - return result; - }; -} - -// ES5 15.4.4.20 -// http://es5.github.com/#x15.4.4.20 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter -if (!Array.prototype.filter || !properlyBoxesContext(Array.prototype.filter)) { - Array.prototype.filter = function filter(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = [], - value, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) { - value = self[i]; - if (fun.call(thisp, value, i, object)) { - result.push(value); - } - } - } - return result; - }; -} - -// ES5 15.4.4.16 -// http://es5.github.com/#x15.4.4.16 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every -if (!Array.prototype.every || !properlyBoxesContext(Array.prototype.every)) { - Array.prototype.every = function every(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && !fun.call(thisp, self[i], i, object)) { - return false; - } - } - return true; - }; -} - -// ES5 15.4.4.17 -// http://es5.github.com/#x15.4.4.17 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some -if (!Array.prototype.some || !properlyBoxesContext(Array.prototype.some)) { - Array.prototype.some = function some(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && fun.call(thisp, self[i], i, object)) { - return true; - } - } - return false; - }; -} - -// ES5 15.4.4.21 -// http://es5.github.com/#x15.4.4.21 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce -var reduceCoercesToObject = false; -if (Array.prototype.reduce) { - reduceCoercesToObject = typeof Array.prototype.reduce.call('a', function (_, __, ___, list) { return list; }) === 'object'; -} -if (!Array.prototype.reduce || !reduceCoercesToObject) { - Array.prototype.reduce = function reduce(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - // no value to return if no initial value and an empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduce of empty array with no initial value"); - } - - var i = 0; - var result; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i++]; - break; - } - - // if array contains no values, no initial value to return - if (++i >= length) { - throw new TypeError("reduce of empty array with no initial value"); - } - } while (true); - } - - for (; i < length; i++) { - if (i in self) { - result = fun.call(void 0, result, self[i], i, object); - } - } - - return result; - }; -} - -// ES5 15.4.4.22 -// http://es5.github.com/#x15.4.4.22 -// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight -if (!Array.prototype.reduceRight) { - Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) === "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); - } - - // no value to return if no initial value, empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - - var result, i = length - 1; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i--]; - break; - } - - // if array contains no values, no initial value to return - if (--i < 0) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - } while (true); - } - - if (i < 0) { - return result; - } - - do { - if (i in this) { - result = fun.call(void 0, result, self[i], i, object); - } - } while (i--); - - return result; - }; -} - -// ES5 15.4.4.14 -// http://es5.github.com/#x15.4.4.14 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf -if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) !== -1)) { - Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { - var self = splitString && _toString(this) === "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - - var i = 0; - if (arguments.length > 1) { - i = toInteger(arguments[1]); - } - - // handle negative indices - i = i >= 0 ? i : Math.max(0, length + i); - for (; i < length; i++) { - if (i in self && self[i] === sought) { - return i; - } - } - return -1; - }; -} - -// ES5 15.4.4.15 -// http://es5.github.com/#x15.4.4.15 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf -if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) !== -1)) { - Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { - var self = splitString && _toString(this) === "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - var i = length - 1; - if (arguments.length > 1) { - i = Math.min(i, toInteger(arguments[1])); - } - // handle negative indices - i = i >= 0 ? i : length - Math.abs(i); - for (; i >= 0; i--) { - if (i in self && sought === self[i]) { - return i; - } - } - return -1; - }; -} - -// -// Object -// ====== -// - -// ES5 15.2.3.14 -// http://es5.github.com/#x15.2.3.14 -if (!Object.keys) { - // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), - hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - dontEnumsLength = dontEnums.length, - isArguments = function isArguments(value) { - var str = _toString(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = !Array.isArray(str) - && value !== null - && typeof value === 'object' - && typeof value.length === 'number' - && value.length >= 0 - && isFunction(value.callee); - } - return isArgs; - }; - - Object.keys = function keys(object) { - var isFn = isFunction(object), - isArgs = isArguments(object), - isObject = object !== null && typeof object === 'object', - isString = isObject && _toString(object) === '[object String]'; - - if (!isObject && !isFn && !isArgs) { - throw new TypeError("Object.keys called on a non-object"); - } - - var theKeys = []; - var skipProto = hasProtoEnumBug && isFn; - if (isString || isArgs) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && owns(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var ctor = object.constructor, - skipConstructor = ctor && ctor.prototype === object; - for (var j = 0; j < dontEnumsLength; j++) { - var dontEnum = dontEnums[j]; - if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) { - theKeys.push(dontEnum); - } - } - } - return theKeys; - }; - -} - -// -// Date -// ==== -// - -// ES5 15.9.5.43 -// http://es5.github.com/#x15.9.5.43 -// This function returns a String value represent the instance in time -// represented by this Date object. The format of the String is the Date Time -// string format defined in 15.9.1.15. All fields are present in the String. -// The time zone is always UTC, denoted by the suffix Z. If the time value of -// this object is not a finite Number a RangeError exception is thrown. -var negativeDate = -62198755200000, - negativeYearString = "-000001"; -if ( - !Date.prototype.toISOString || - (new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1) -) { - Date.prototype.toISOString = function toISOString() { - var result, length, value, year, month; - if (!isFinite(this)) { - throw new RangeError("Date.prototype.toISOString called on non-finite value."); - } - - year = this.getUTCFullYear(); - - month = this.getUTCMonth(); - // see https://github.com/es-shims/es5-shim/issues/111 - year += Math.floor(month / 12); - month = (month % 12 + 12) % 12; - - // the date time string format is specified in 15.9.1.15. - result = [month + 1, this.getUTCDate(), - this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()]; - year = ( - (year < 0 ? "-" : (year > 9999 ? "+" : "")) + - ("00000" + Math.abs(year)) - .slice(0 <= year && year <= 9999 ? -4 : -6) - ); - - length = result.length; - while (length--) { - value = result[length]; - // pad months, days, hours, minutes, and seconds to have two - // digits. - if (value < 10) { - result[length] = "0" + value; - } - } - // pad milliseconds to have three digits. - return ( - year + "-" + result.slice(0, 2).join("-") + - "T" + result.slice(2).join(":") + "." + - ("000" + this.getUTCMilliseconds()).slice(-3) + "Z" - ); - }; -} - - -// ES5 15.9.5.44 -// http://es5.github.com/#x15.9.5.44 -// This function provides a String representation of a Date object for use by -// JSON.stringify (15.12.3). -var dateToJSONIsSupported = false; -try { - dateToJSONIsSupported = ( - Date.prototype.toJSON && - new Date(NaN).toJSON() === null && - new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 && - Date.prototype.toJSON.call({ // generic - toISOString: function () { - return true; - } - }) - ); -} catch (e) { -} -if (!dateToJSONIsSupported) { - Date.prototype.toJSON = function toJSON(key) { - // When the toJSON method is called with argument key, the following - // steps are taken: - - // 1. Let O be the result of calling ToObject, giving it the this - // value as its argument. - // 2. Let tv be toPrimitive(O, hint Number). - var o = Object(this), - tv = toPrimitive(o), - toISO; - // 3. If tv is a Number and is not finite, return null. - if (typeof tv === "number" && !isFinite(tv)) { - return null; - } - // 4. Let toISO be the result of calling the [[Get]] internal method of - // O with argument "toISOString". - toISO = o.toISOString; - // 5. If IsCallable(toISO) is false, throw a TypeError exception. - if (typeof toISO !== "function") { - throw new TypeError("toISOString property is not callable"); - } - // 6. Return the result of calling the [[Call]] internal method of - // toISO with O as the this value and an empty argument list. - return toISO.call(o); - - // NOTE 1 The argument is ignored. - - // NOTE 2 The toJSON function is intentionally generic; it does not - // require that its this value be a Date object. Therefore, it can be - // transferred to other kinds of objects for use as a method. However, - // it does require that any such object have a toISOString method. An - // object is free to use the argument key to filter its - // stringification. - }; -} - -// ES5 15.9.4.2 -// http://es5.github.com/#x15.9.4.2 -// based on work shared by Daniel Friesen (dantman) -// http://gist.github.com/303249 -var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15; -var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')); -var doesNotParseY2KNewYear = isNaN(Date.parse("2000-01-01T00:00:00.000Z")); -if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) { - // XXX global assignment won't work in embeddings that use - // an alternate object for the context. - Date = (function(NativeDate) { - - // Date.length === 7 - function Date(Y, M, D, h, m, s, ms) { - var length = arguments.length; - if (this instanceof NativeDate) { - var date = length === 1 && String(Y) === Y ? // isString(Y) - // We explicitly pass it through parse: - new NativeDate(Date.parse(Y)) : - // We have to manually make calls depending on argument - // length here - length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) : - length >= 6 ? new NativeDate(Y, M, D, h, m, s) : - length >= 5 ? new NativeDate(Y, M, D, h, m) : - length >= 4 ? new NativeDate(Y, M, D, h) : - length >= 3 ? new NativeDate(Y, M, D) : - length >= 2 ? new NativeDate(Y, M) : - length >= 1 ? new NativeDate(Y) : - new NativeDate(); - // Prevent mixups with unfixed Date object - date.constructor = Date; - return date; - } - return NativeDate.apply(this, arguments); - } - - // 15.9.1.15 Date Time String Format. - var isoDateExpression = new RegExp("^" + - "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + - // 6-digit extended year - "(?:-(\\d{2})" + // optional month capture - "(?:-(\\d{2})" + // optional day capture - "(?:" + // capture hours:minutes:seconds.milliseconds - "T(\\d{2})" + // hours capture - ":(\\d{2})" + // minutes capture - "(?:" + // optional :seconds.milliseconds - ":(\\d{2})" + // seconds capture - "(?:(\\.\\d{1,}))?" + // milliseconds capture - ")?" + - "(" + // capture UTC offset component - "Z|" + // UTC capture - "(?:" + // offset specifier +/-hours:minutes - "([-+])" + // sign capture - "(\\d{2})" + // hours offset capture - ":(\\d{2})" + // minutes offset capture - ")" + - ")?)?)?)?" + - "$"); - - var months = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 - ]; - - function dayFromMonth(year, month) { - var t = month > 1 ? 1 : 0; - return ( - months[month] + - Math.floor((year - 1969 + t) / 4) - - Math.floor((year - 1901 + t) / 100) + - Math.floor((year - 1601 + t) / 400) + - 365 * (year - 1970) - ); - } - - function toUTC(t) { - return Number(new NativeDate(1970, 0, 1, 0, 0, 0, t)); - } - - // Copy any custom methods a 3rd party library may have added - for (var key in NativeDate) { - Date[key] = NativeDate[key]; - } - - // Copy "native" methods explicitly; they may be non-enumerable - Date.now = NativeDate.now; - Date.UTC = NativeDate.UTC; - Date.prototype = NativeDate.prototype; - Date.prototype.constructor = Date; - - // Upgrade Date.parse to handle simplified ISO 8601 strings - Date.parse = function parse(string) { - var match = isoDateExpression.exec(string); - if (match) { - // parse months, days, hours, minutes, seconds, and milliseconds - // provide default values if necessary - // parse the UTC offset component - var year = Number(match[1]), - month = Number(match[2] || 1) - 1, - day = Number(match[3] || 1) - 1, - hour = Number(match[4] || 0), - minute = Number(match[5] || 0), - second = Number(match[6] || 0), - millisecond = Math.floor(Number(match[7] || 0) * 1000), - // When time zone is missed, local offset should be used - // (ES 5.1 bug) - // see https://bugs.ecmascript.org/show_bug.cgi?id=112 - isLocalTime = Boolean(match[4] && !match[8]), - signOffset = match[9] === "-" ? 1 : -1, - hourOffset = Number(match[10] || 0), - minuteOffset = Number(match[11] || 0), - result; - if ( - hour < ( - minute > 0 || second > 0 || millisecond > 0 ? - 24 : 25 - ) && - minute < 60 && second < 60 && millisecond < 1000 && - month > -1 && month < 12 && hourOffset < 24 && - minuteOffset < 60 && // detect invalid offsets - day > -1 && - day < ( - dayFromMonth(year, month + 1) - - dayFromMonth(year, month) - ) - ) { - result = ( - (dayFromMonth(year, month) + day) * 24 + - hour + - hourOffset * signOffset - ) * 60; - result = ( - (result + minute + minuteOffset * signOffset) * 60 + - second - ) * 1000 + millisecond; - if (isLocalTime) { - result = toUTC(result); - } - if (-8.64e15 <= result && result <= 8.64e15) { - return result; - } - } - return NaN; - } - return NativeDate.parse.apply(this, arguments); - }; - - return Date; - })(Date); -} - -// ES5 15.9.4.4 -// http://es5.github.com/#x15.9.4.4 -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} - - -// -// Number -// ====== -// - -// ES5.1 15.7.4.5 -// http://es5.github.com/#x15.7.4.5 -if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' || (0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' || (1000000000000000128).toFixed(0) !== "1000000000000000128") { - // Hide these variables and functions - (function () { - var base, size, data, i; - - base = 1e7; - size = 6; - data = [0, 0, 0, 0, 0, 0]; - - function multiply(n, c) { - var i = -1; - while (++i < size) { - c += n * data[i]; - data[i] = c % base; - c = Math.floor(c / base); - } - } - - function divide(n) { - var i = size, c = 0; - while (--i >= 0) { - c += data[i]; - data[i] = Math.floor(c / n); - c = (c % n) * base; - } - } - - function toString() { - var i = size; - var s = ''; - while (--i >= 0) { - if (s !== '' || i === 0 || data[i] !== 0) { - var t = String(data[i]); - if (s === '') { - s = t; - } else { - s += '0000000'.slice(0, 7 - t.length) + t; - } - } - } - return s; - } - - function pow(x, n, acc) { - return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc))); - } - - function log(x) { - var n = 0; - while (x >= 4096) { - n += 12; - x /= 4096; - } - while (x >= 2) { - n += 1; - x /= 2; - } - return n; - } - - Number.prototype.toFixed = function toFixed(fractionDigits) { - var f, x, s, m, e, z, j, k; - - // Test for NaN and round fractionDigits down - f = Number(fractionDigits); - f = f !== f ? 0 : Math.floor(f); - - if (f < 0 || f > 20) { - throw new RangeError("Number.toFixed called with invalid number of decimals"); - } - - x = Number(this); - - // Test for NaN - if (x !== x) { - return "NaN"; - } - - // If it is too big or small, return the string value of the number - if (x <= -1e21 || x >= 1e21) { - return String(x); - } - - s = ""; - - if (x < 0) { - s = "-"; - x = -x; - } - - m = "0"; - - if (x > 1e-21) { - // 1e-21 < x < 1e21 - // -70 < log2(x) < 70 - e = log(x * pow(2, 69, 1)) - 69; - z = (e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1)); - z *= 0x10000000000000; // Math.pow(2, 52); - e = 52 - e; - - // -18 < e < 122 - // x = z / 2 ^ e - if (e > 0) { - multiply(0, z); - j = f; - - while (j >= 7) { - multiply(1e7, 0); - j -= 7; - } - - multiply(pow(10, j, 1), 0); - j = e - 1; - - while (j >= 23) { - divide(1 << 23); - j -= 23; - } - - divide(1 << j); - multiply(1, 1); - divide(2); - m = toString(); - } else { - multiply(0, z); - multiply(1 << (-e), 0); - m = toString() + '0.00000000000000000000'.slice(2, 2 + f); - } - } - - if (f > 0) { - k = m.length; - - if (k <= f) { - m = s + '0.0000000000000000000'.slice(0, f - k + 2) + m; - } else { - m = s + m.slice(0, k - f) + '.' + m.slice(k - f); - } - } else { - m = s + m; - } - - return m; - }; - }()); -} - - -// -// String -// ====== -// - - -// ES5 15.5.4.14 -// http://es5.github.com/#x15.5.4.14 - -// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers] -// Many browsers do not split properly with regular expressions or they -// do not perform the split correctly under obscure conditions. -// See http://blog.stevenlevithan.com/archives/cross-browser-split -// I've tested in many browsers and this seems to cover the deviant ones: -// 'ab'.split(/(?:ab)*/) should be ["", ""], not [""] -// '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""] -// 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not -// [undefined, "t", undefined, "e", ...] -// ''.split(/.?/) should be [], not [""] -// '.'.split(/()()/) should be ["."], not ["", "", "."] - -var string_split = String.prototype.split; -if ( - 'ab'.split(/(?:ab)*/).length !== 2 || - '.'.split(/(.?)(.?)/).length !== 4 || - 'tesst'.split(/(s)*/)[1] === "t" || - ''.split(/.?/).length || - '.'.split(/()()/).length > 1 -) { - (function () { - var compliantExecNpcg = /()??/.exec("")[1] === void 0; // NPCG: nonparticipating capturing group - - String.prototype.split = function (separator, limit) { - var string = this; - if (separator === void 0 && limit === 0) - return []; - - // If `separator` is not a regex, use native split - if (Object.prototype.toString.call(separator) !== "[object RegExp]") { - return string_split.apply(this, arguments); - } - - var output = [], - flags = (separator.ignoreCase ? "i" : "") + - (separator.multiline ? "m" : "") + - (separator.extended ? "x" : "") + // Proposed for ES6 - (separator.sticky ? "y" : ""), // Firefox 3+ - lastLastIndex = 0, - // Make `global` and avoid `lastIndex` issues by working with a copy - separator2, match, lastIndex, lastLength; - separator = new RegExp(separator.source, flags + "g"); - string += ""; // Type-convert - if (!compliantExecNpcg) { - // Doesn't need flags gy, but they don't hurt - separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); - } - /* Values for `limit`, per the spec: - * If undefined: 4294967295 // Math.pow(2, 32) - 1 - * If 0, Infinity, or NaN: 0 - * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; - * If negative number: 4294967296 - Math.floor(Math.abs(limit)) - * If other: Type-convert, then use the above rules - */ - limit = limit === void 0 ? - -1 >>> 0 : // Math.pow(2, 32) - 1 - limit >>> 0; // ToUint32(limit) - while (match = separator.exec(string)) { - // `separator.lastIndex` is not reliable cross-browser - lastIndex = match.index + match[0].length; - if (lastIndex > lastLastIndex) { - output.push(string.slice(lastLastIndex, match.index)); - // Fix browsers whose `exec` methods don't consistently return `undefined` for - // nonparticipating capturing groups - if (!compliantExecNpcg && match.length > 1) { - match[0].replace(separator2, function () { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === void 0) { - match[i] = void 0; - } - } - }); - } - if (match.length > 1 && match.index < string.length) { - Array.prototype.push.apply(output, match.slice(1)); - } - lastLength = match[0].length; - lastLastIndex = lastIndex; - if (output.length >= limit) { - break; - } - } - if (separator.lastIndex === match.index) { - separator.lastIndex++; // Avoid an infinite loop - } - } - if (lastLastIndex === string.length) { - if (lastLength || !separator.test("")) { - output.push(""); - } - } else { - output.push(string.slice(lastLastIndex)); - } - return output.length > limit ? output.slice(0, limit) : output; - }; - }()); - -// [bugfix, chrome] -// If separator is undefined, then the result array contains just one String, -// which is the this value (converted to a String). If limit is not undefined, -// then the output array is truncated so that it contains no more than limit -// elements. -// "0".split(undefined, 0) -> [] -} else if ("0".split(void 0, 0).length) { - String.prototype.split = function split(separator, limit) { - if (separator === void 0 && limit === 0) return []; - return string_split.apply(this, arguments); - }; -} - -var str_replace = String.prototype.replace; -var replaceReportsGroupsCorrectly = (function () { - var groups = []; - 'x'.replace(/x(.)?/g, function (match, group) { - groups.push(group); - }); - return groups.length === 1 && typeof groups[0] === 'undefined'; -}()); - -if (!replaceReportsGroupsCorrectly) { - String.prototype.replace = function replace(searchValue, replaceValue) { - var isFn = isFunction(replaceValue); - var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source); - if (!isFn || !hasCapturingGroups) { - return str_replace.apply(this, arguments); - } else { - var wrappedReplaceValue = function (match) { - var length = arguments.length; - var originalLastIndex = searchValue.lastIndex; - searchValue.lastIndex = 0; - var args = searchValue.exec(match); - searchValue.lastIndex = originalLastIndex; - args.push(arguments[length - 2], arguments[length - 1]); - return replaceValue.apply(this, args); - }; - return str_replace.call(this, searchValue, wrappedReplaceValue); - } - }; -} - -// ECMA-262, 3rd B.2.3 -// Note an ECMAScript standart, although ECMAScript 3rd Edition has a -// non-normative section suggesting uniform semantics and it should be -// normalized across all browsers -// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE -if ("".substr && "0b".substr(-1) !== "b") { - var string_substr = String.prototype.substr; - /** - * Get the substring of a string - * @param {integer} start where to start the substring - * @param {integer} length how many characters to return - * @return {string} - */ - String.prototype.substr = function substr(start, length) { - return string_substr.call( - this, - start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start, - length - ); - }; -} - -// ES5 15.5.4.20 -// whitespace from: http://es5.github.io/#x15.5.4.20 -var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + - "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + - "\u2029\uFEFF"; -var zeroWidth = '\u200b'; -if (!String.prototype.trim || ws.trim() || !zeroWidth.trim()) { - // http://blog.stevenlevithan.com/archives/faster-trim-javascript - // http://perfectionkills.com/whitespace-deviations/ - ws = "[" + ws + "]"; - var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), - trimEndRegexp = new RegExp(ws + ws + "*$"); - String.prototype.trim = function trim() { - if (this === void 0 || this === null) { - throw new TypeError("can't convert "+this+" to object"); - } - return String(this) - .replace(trimBeginRegexp, "") - .replace(trimEndRegexp, ""); - }; -} - -// ES-5 15.1.2.2 -if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) { - parseInt = (function (origParseInt) { - var hexRegex = /^0[xX]/; - return function parseIntES5(str, radix) { - str = String(str).trim(); - if (!Number(radix)) { - radix = hexRegex.test(str) ? 16 : 10; - } - return origParseInt(str, radix); - }; - }(parseInt)); -} - -// -// Util -// ====== -// - -// ES5 9.4 -// http://es5.github.com/#x9.4 -// http://jsperf.com/to-integer - -function toInteger(n) { - n = +n; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function isPrimitive(input) { - var type = typeof input; - return ( - input === null || - type === "undefined" || - type === "boolean" || - type === "number" || - type === "string" - ); -} - -function toPrimitive(input) { - var val, valueOf, toStr; - if (isPrimitive(input)) { - return input; - } - valueOf = input.valueOf; - if (isFunction(valueOf)) { - val = valueOf.call(input); - if (isPrimitive(val)) { - return val; - } - } - toStr = input.toString; - if (isFunction(toStr)) { - val = toStr.call(input); - if (isPrimitive(val)) { - return val; - } - } - throw new TypeError(); -} - -// ES5 9.9 -// http://es5.github.com/#x9.9 -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert "+o+" to object"); - } - return Object(o); -}; - -})); diff --git a/platforms/browser/www/lib/es5-shim/es5-shim.map b/platforms/browser/www/lib/es5-shim/es5-shim.map deleted file mode 100644 index 905b4266..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-shim.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["es5-shim.js"],"names":["root","factory","define","amd","exports","module","returnExports","this","call","Function","prototype","prototypeOfArray","Array","prototypeOfObject","Object","_Array_slice_","slice","array_splice","splice","array_push","push","array_unshift","unshift","isFunction","val","toString","isRegex","Empty","bind","that","target","TypeError","args","arguments","binder","bound","result","apply","concat","boundLength","Math","max","length","boundArgs","i","join","owns","hasOwnProperty","_toString","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","l","a","array","lengthBefore","start","deleteCount","addElementsCount","isArray","obj","boxedString","splitString","properlyBoxesContext","properlyBoxed","method","properlyBoxes","_","__","context","forEach","fun","object","toObject","self","split","thisp","map","filter","value","every","some","reduceCoercesToObject","reduce","___","list","reduceRight","indexOf","sought","toInteger","lastIndexOf","min","abs","keys","hasDontEnumBug","propertyIsEnumerable","hasProtoEnumBug","dontEnums","dontEnumsLength","isArguments","str","isArgs","callee","isFn","isObject","isString","theKeys","skipProto","String","name","ctor","constructor","skipConstructor","j","dontEnum","negativeDate","negativeYearString","Date","toISOString","year","month","isFinite","RangeError","getUTCFullYear","getUTCMonth","floor","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","dateToJSONIsSupported","toJSON","NaN","e","key","o","tv","toPrimitive","toISO","supportsExtendedYears","parse","acceptsInvalidDates","isNaN","doesNotParseY2KNewYear","NativeDate","Y","M","D","h","m","s","ms","date","isoDateExpression","RegExp","months","dayFromMonth","t","toUTC","Number","now","UTC","string","match","exec","day","hour","minute","second","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","getTime","toFixed","base","size","data","multiply","n","c","divide","pow","x","acc","log","fractionDigits","f","z","k","string_split","compliantExecNpcg","separator","limit","output","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","separator2","lastIndex","lastLength","source","index","replace","test","str_replace","replaceReportsGroupsCorrectly","groups","group","searchValue","replaceValue","hasCapturingGroups","wrappedReplaceValue","originalLastIndex","substr","string_substr","ws","zeroWidth","trim","trimBeginRegexp","trimEndRegexp","parseInt","origParseInt","hexRegex","parseIntES5","radix","isPrimitive","input","type","valueOf","toStr"],"mappings":"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"} \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/es5-shim.min.js b/platforms/browser/www/lib/es5-shim/es5-shim.min.js deleted file mode 100644 index b2be2f50..00000000 --- a/platforms/browser/www/lib/es5-shim/es5-shim.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/master/LICENSE - */ -(function(t,r){if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Function.prototype.call;var r=Array.prototype;var e=Object.prototype;var n=r.slice;var i=Array.prototype.splice;var o=Array.prototype.push;var a=Array.prototype.unshift;var l=function(t){return e.toString.call(t)==="[object Function]"};var u=function(t){return e.toString.call(t)==="[object RegExp]"};function p(){}if(!Function.prototype.bind){Function.prototype.bind=function H(t){var r=this;if(!l(r)){throw new TypeError("Function.prototype.bind called on incompatible "+r)}var e=n.call(arguments,1);var i=function(){if(this instanceof s){var i=r.apply(this,e.concat(n.call(arguments)));if(Object(i)===i){return i}return this}else{return r.apply(t,e.concat(n.call(arguments)))}};var o=Math.max(0,r.length-e.length);var a=[];for(var u=0;u<o;u++){a.push("$"+u)}var s=Function("binder","return function("+a.join(",")+"){return binder.apply(this,arguments)}")(i);if(r.prototype){p.prototype=r.prototype;s.prototype=new p;p.prototype=null}return s}}var s=t.bind(e.hasOwnProperty);var f=t.bind(e.toString);var c;var h;var y;var g;var v;if(v=s(e,"__defineGetter__")){c=t.bind(e.__defineGetter__);h=t.bind(e.__defineSetter__);y=t.bind(e.__lookupGetter__);g=t.bind(e.__lookupSetter__)}if([1,2].splice(0).length!==2){if(function(){function t(t){var r=[];while(t--){r.unshift(t)}return r}var r=[];var e;r.splice.bind(r,0,0).apply(null,t(20));r.splice.bind(r,0,0).apply(null,t(26));e=r.length;r.splice(5,0,"XXX");if(e+1===r.length){return true}}()){Array.prototype.splice=function(t,r){if(!arguments.length){return[]}else{return i.apply(this,[t===void 0?0:t,r===void 0?this.length-t:r].concat(n.call(arguments,2)))}}}else{Array.prototype.splice=function(t,r){var e;var l=n.call(arguments,2);var u=l.length;if(!arguments.length){return[]}if(t===void 0){t=0}if(r===void 0){r=this.length-t}if(u>0){if(r<=0){if(t===this.length){o.apply(this,l);return[]}if(t===0){a.apply(this,l);return[]}}e=n.call(this,t,t+r);l.push.apply(l,n.call(this,t+r,this.length));l.unshift.apply(l,n.call(this,0,t));l.unshift(0,this.length);i.apply(this,l);return e}return i.call(this,t,r)}}}if([].unshift(0)!==1){Array.prototype.unshift=function(){a.apply(this,arguments);return this.length}}if(!Array.isArray){Array.isArray=function L(t){return f(t)==="[object Array]"}}var d=Object("a");var b=d[0]!=="a"||!(0 in d);var m=function Y(t){var r=true;if(t){t.call("foo",function(t,e,n){if(typeof n!=="object"){r=false}})}return!!t&&r};if(!Array.prototype.forEach||!m(Array.prototype.forEach)){Array.prototype.forEach=function q(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=arguments[1],i=-1,o=e.length>>>0;if(!l(t)){throw new TypeError}while(++i<o){if(i in e){t.call(n,e[i],i,r)}}}}if(!Array.prototype.map||!m(Array.prototype.map)){Array.prototype.map=function z(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=Array(n),o=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var a=0;a<n;a++){if(a in e)i[a]=t.call(o,e[a],a,r)}return i}}if(!Array.prototype.filter||!m(Array.prototype.filter)){Array.prototype.filter=function K(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=[],o,a=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var u=0;u<n;u++){if(u in e){o=e[u];if(t.call(a,o,u,r)){i.push(o)}}}return i}}if(!Array.prototype.every||!m(Array.prototype.every)){Array.prototype.every=function Q(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var o=0;o<n;o++){if(o in e&&!t.call(i,e[o],o,r)){return false}}return true}}if(!Array.prototype.some||!m(Array.prototype.some)){Array.prototype.some=function V(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0,i=arguments[1];if(!l(t)){throw new TypeError(t+" is not a function")}for(var o=0;o<n;o++){if(o in e&&t.call(i,e[o],o,r)){return true}}return false}}var w=false;if(Array.prototype.reduce){w=typeof Array.prototype.reduce.call("a",function(t,r,e,n){return n})==="object"}if(!Array.prototype.reduce||!w){Array.prototype.reduce=function W(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0;if(!l(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var i=0;var o;if(arguments.length>=2){o=arguments[1]}else{do{if(i in e){o=e[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i<n;i++){if(i in e){o=t.call(void 0,o,e[i],i,r)}}return o}}if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function tr(t){var r=B(this),e=b&&f(this)==="[object String]"?this.split(""):r,n=e.length>>>0;if(!l(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var i,o=n-1;if(arguments.length>=2){i=arguments[1]}else{do{if(o in e){i=e[o--];break}if(--o<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(o<0){return i}do{if(o in this){i=t.call(void 0,i,e[o],o,r)}}while(o--);return i}}if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!==-1){Array.prototype.indexOf=function rr(t){var r=b&&f(this)==="[object String]"?this.split(""):B(this),e=r.length>>>0;if(!e){return-1}var n=0;if(arguments.length>1){n=$(arguments[1])}n=n>=0?n:Math.max(0,e+n);for(;n<e;n++){if(n in r&&r[n]===t){return n}}return-1}}if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!==-1){Array.prototype.lastIndexOf=function er(t){var r=b&&f(this)==="[object String]"?this.split(""):B(this),e=r.length>>>0;if(!e){return-1}var n=e-1;if(arguments.length>1){n=Math.min(n,$(arguments[1]))}n=n>=0?n:e-Math.abs(n);for(;n>=0;n--){if(n in r&&t===r[n]){return n}}return-1}}if(!Object.keys){var S=!{toString:null}.propertyIsEnumerable("toString"),x=function(){}.propertyIsEnumerable("prototype"),A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=A.length,O=function nr(t){var r=f(t);var e=r==="[object Arguments]";if(!e){e=!Array.isArray(r)&&t!==null&&typeof t==="object"&&typeof t.length==="number"&&t.length>=0&&l(t.callee)}return e};Object.keys=function ir(t){var r=l(t),e=O(t),n=t!==null&&typeof t==="object",i=n&&f(t)==="[object String]";if(!n&&!r&&!e){throw new TypeError("Object.keys called on a non-object")}var o=[];var a=x&&r;if(i||e){for(var u=0;u<t.length;++u){o.push(String(u))}}else{for(var p in t){if(!(a&&p==="prototype")&&s(t,p)){o.push(String(p))}}}if(S){var c=t.constructor,h=c&&c.prototype===t;for(var y=0;y<j;y++){var g=A[y];if(!(h&&g==="constructor")&&s(t,g)){o.push(g)}}}return o}}var E=-621987552e5,N="-000001";if(!Date.prototype.toISOString||new Date(E).toISOString().indexOf(N)===-1){Date.prototype.toISOString=function or(){var t,r,e,n,i;if(!isFinite(this)){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}n=this.getUTCFullYear();i=this.getUTCMonth();n+=Math.floor(i/12);i=(i%12+12)%12;t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()];n=(n<0?"-":n>9999?"+":"")+("00000"+Math.abs(n)).slice(0<=n&&n<=9999?-4:-6);r=t.length;while(r--){e=t[r];if(e<10){t[r]="0"+e}}return n+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}}var T=false;try{T=Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(E).toJSON().indexOf(N)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(I){}if(!T){Date.prototype.toJSON=function ar(t){var r=Object(this),e=P(r),n;if(typeof e==="number"&&!isFinite(e)){return null}n=r.toISOString;if(typeof n!=="function"){throw new TypeError("toISOString property is not callable")}return n.call(r)}}var D=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var _=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"));var M=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||M||_||!D){Date=function(t){function r(e,n,i,o,a,l,u){var p=arguments.length;if(this instanceof t){var s=p===1&&String(e)===e?new t(r.parse(e)):p>=7?new t(e,n,i,o,a,l,u):p>=6?new t(e,n,i,o,a,l):p>=5?new t(e,n,i,o,a):p>=4?new t(e,n,i,o):p>=3?new t(e,n,i):p>=2?new t(e,n):p>=1?new t(e):new t;s.constructor=r;return s}return t.apply(this,arguments)}var e=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];function i(t,r){var e=r>1?1:0;return n[r]+Math.floor((t-1969+e)/4)-Math.floor((t-1901+e)/100)+Math.floor((t-1601+e)/400)+365*(t-1970)}function o(r){return Number(new t(1970,0,1,0,0,0,r))}for(var a in t){r[a]=t[a]}r.now=t.now;r.UTC=t.UTC;r.prototype=t.prototype;r.prototype.constructor=r;r.parse=function l(r){var n=e.exec(r);if(n){var a=Number(n[1]),l=Number(n[2]||1)-1,u=Number(n[3]||1)-1,p=Number(n[4]||0),s=Number(n[5]||0),f=Number(n[6]||0),c=Math.floor(Number(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),y=n[9]==="-"?1:-1,g=Number(n[10]||0),v=Number(n[11]||0),d;if(p<(s>0||f>0||c>0?24:25)&&s<60&&f<60&&c<1e3&&l>-1&&l<12&&g<24&&v<60&&u>-1&&u<i(a,l+1)-i(a,l)){d=((i(a,l)+u)*24+p+g*y)*60;d=((d+s+v*y)*60+f)*1e3+c;if(h){d=o(d)}if(-864e13<=d&&d<=864e13){return d}}return NaN}return t.parse.apply(this,arguments)};return r}(Date)}if(!Date.now){Date.now=function lr(){return(new Date).getTime()}}if(!Number.prototype.toFixed||8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)==="0"||1.255.toFixed(2)!=="1.25"||0xde0b6b3a7640080.toFixed(0)!=="1000000000000000128"){(function(){var t,r,e,n;t=1e7;r=6;e=[0,0,0,0,0,0];function i(n,i){var o=-1;while(++o<r){i+=n*e[o];e[o]=i%t;i=Math.floor(i/t)}}function o(n){var i=r,o=0;while(--i>=0){o+=e[i];e[i]=Math.floor(o/n);o=o%n*t}}function a(){var t=r;var n="";while(--t>=0){if(n!==""||t===0||e[t]!==0){var i=String(e[t]);if(n===""){n=i}else{n+="0000000".slice(0,7-i.length)+i}}}return n}function l(t,r,e){return r===0?e:r%2===1?l(t,r-1,e*t):l(t*t,r/2,e)}function u(t){var r=0;while(t>=4096){r+=12;t/=4096}while(t>=2){r+=1;t/=2}return r}Number.prototype.toFixed=function p(t){var r,e,n,p,s,f,c,h;r=Number(t);r=r!==r?0:Math.floor(r);if(r<0||r>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}e=Number(this);if(e!==e){return"NaN"}if(e<=-1e21||e>=1e21){return String(e)}n="";if(e<0){n="-";e=-e}p="0";if(e>1e-21){s=u(e*l(2,69,1))-69;f=s<0?e*l(2,-s,1):e/l(2,s,1);f*=4503599627370496;s=52-s;if(s>0){i(0,f);c=r;while(c>=7){i(1e7,0);c-=7}i(l(10,c,1),0);c=s-1;while(c>=23){o(1<<23);c-=23}o(1<<c);i(1,1);o(2);p=a()}else{i(0,f);i(1<<-s,0);p=a()+"0.00000000000000000000".slice(2,2+r)}}if(r>0){h=p.length;if(h<=r){p=n+"0.0000000000000000000".slice(0,r-h+2)+p}else{p=n+p.slice(0,h-r)+"."+p.slice(h-r)}}else{p=n+p}return p}})()}var F=String.prototype.split;if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=/()??/.exec("")[1]===void 0;String.prototype.split=function(r,e){var n=this;if(r===void 0&&e===0)return[];if(Object.prototype.toString.call(r)!=="[object RegExp]"){return F.apply(this,arguments)}var i=[],o=(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.extended?"x":"")+(r.sticky?"y":""),a=0,l,u,p,s;r=new RegExp(r.source,o+"g");n+="";if(!t){l=new RegExp("^"+r.source+"$(?!\\s)",o)}e=e===void 0?-1>>>0:e>>>0;while(u=r.exec(n)){p=u.index+u[0].length;if(p>a){i.push(n.slice(a,u.index));if(!t&&u.length>1){u[0].replace(l,function(){for(var t=1;t<arguments.length-2;t++){if(arguments[t]===void 0){u[t]=void 0}}})}if(u.length>1&&u.index<n.length){Array.prototype.push.apply(i,u.slice(1))}s=u[0].length;a=p;if(i.length>=e){break}}if(r.lastIndex===u.index){r.lastIndex++}}if(a===n.length){if(s||!r.test("")){i.push("")}}else{i.push(n.slice(a))}return i.length>e?i.slice(0,e):i}})()}else if("0".split(void 0,0).length){String.prototype.split=function ur(t,r){if(t===void 0&&r===0)return[];return F.apply(this,arguments)}}var R=String.prototype.replace;var C=function(){var t=[];"x".replace(/x(.)?/g,function(r,e){t.push(e)});return t.length===1&&typeof t[0]==="undefined"}();if(!C){String.prototype.replace=function pr(t,r){var e=l(r);var n=u(t)&&/\)[*?]/.test(t.source);if(!e||!n){return R.apply(this,arguments)}else{var i=function(e){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var o=t.exec(e);t.lastIndex=i;o.push(arguments[n-2],arguments[n-1]);return r.apply(this,o)};return R.call(this,t,i)}}}if("".substr&&"0b".substr(-1)!=="b"){var k=String.prototype.substr;String.prototype.substr=function sr(t,r){return k.call(this,t<0?(t=this.length+t)<0?0:t:t,r)}}var U=" \n \f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var Z="\u200b";if(!String.prototype.trim||U.trim()||!Z.trim()){U="["+U+"]";var J=new RegExp("^"+U+U+"*"),X=new RegExp(U+U+"*$");String.prototype.trim=function fr(){if(this===void 0||this===null){throw new TypeError("can't convert "+this+" to object")}return String(this).replace(J,"").replace(X,"")}}if(parseInt(U+"08")!==8||parseInt(U+"0x16")!==22){parseInt=function(t){var r=/^0[xX]/;return function e(n,i){n=String(n).trim();if(!Number(i)){i=r.test(n)?16:10}return t(n,i)}}(parseInt)}function $(t){t=+t;if(t!==t){t=0}else if(t!==0&&t!==1/0&&t!==-(1/0)){t=(t>0||-1)*Math.floor(Math.abs(t))}return t}function G(t){var r=typeof t;return t===null||r==="undefined"||r==="boolean"||r==="number"||r==="string"}function P(t){var r,e,n;if(G(t)){return t}e=t.valueOf;if(l(e)){r=e.call(t);if(G(r)){return r}}n=t.toString;if(l(n)){r=n.call(t);if(G(r)){return r}}throw new TypeError}var B=function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return Object(t)}}); -//# sourceMappingURL=es5-shim.map \ No newline at end of file diff --git a/platforms/browser/www/lib/es5-shim/package.json b/platforms/browser/www/lib/es5-shim/package.json deleted file mode 100644 index a93a894a..00000000 --- a/platforms/browser/www/lib/es5-shim/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "es5-shim", - "version": "3.1.1", - "description": "ECMAScript 5 compatibility shims for legacy JavaScript engines", - "homepage": "http://github.com/es-shims/es5-shim/", - "contributors": [ - "Kris Kowal <kris@cixar.com> (http://github.com/kriskowal/)", - "Sami Samhuri <sami.samhuri@gmail.com> (http://samhuri.net/)", - "Florian Schäfer <florian.schaefer@gmail.com> (http://github.com/fschaefer)", - "Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)", - "Kit Cambridge <kitcambridge@gmail.com> (http://kitcambridge.github.com)", - "Jordan Harband <ljharb@gmail.com> (https://github.com/ljharb/)" - ], - "bugs": { - "mail": "ljharb@gmail.com", - "url": "http://github.com/es-shims/es5-shim/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/es-shims/es5-shim/raw/master/LICENSE" - } - ], - "main": "es5-shim.js", - "repository": { - "type": "git", - "url": "http://github.com/es-shims/es5-shim.git" - }, - "scripts": { - "minify": "npm run minify-shim && npm run minify-sham", - "minify-shim": "uglifyjs es5-shim.js --comments --source-map=es5-shim.map -m -b ascii_only=true,beautify=false > es5-shim.min.js", - "minify-sham": "uglifyjs es5-sham.js --comments --source-map=es5-sham.map -m -b ascii_only=true,beautify=false > es5-sham.min.js", - "test": "jasmine-node --matchall tests/spec/" - }, - "devDependencies": { - "jasmine-node": "~1.14.2", - "uglify-js": "~2.4.12" - }, - "engines": { - "node": ">=0.4.0" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/18.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/25.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - } -} - diff --git a/platforms/browser/www/lib/es5-shim/shims.json b/platforms/browser/www/lib/es5-shim/shims.json deleted file mode 100644 index 1136162c..00000000 --- a/platforms/browser/www/lib/es5-shim/shims.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Object": { - "prototype": {} - "keys": "object-keys" - } -} - diff --git a/platforms/browser/www/lib/highcharts-ng/highcharts-ng.js b/platforms/browser/www/lib/highcharts-ng/highcharts-ng.js deleted file mode 100755 index 94567e05..00000000 --- a/platforms/browser/www/lib/highcharts-ng/highcharts-ng.js +++ /dev/null @@ -1,498 +0,0 @@ -if (typeof module !== 'undefined' && typeof exports !== 'undefined' && module.exports === exports){ - module.exports = 'highcharts-ng'; -} - -(function () { - 'use strict'; - /*global angular: false, Highcharts: false */ - - - angular.module('highcharts-ng', []) - .provider('highchartsNG', highchartsNGProvider) - .directive('highchart', ['highchartsNG', '$timeout', highchart]); - - function highchartsNGProvider(){ - var modules = []; - var basePath = false; - var lazyLoad = false; - return { - HIGHCHART: 'highcharts.js', - HIGHSTOCK: 'stock/highstock.js', - basePath: function (p) { - basePath = p; - }, - lazyLoad: function (list) { - if (list === undefined) { - modules = [this.HIGHCHART]; - } else { - modules = list; - } - lazyLoad = true; - }, - $get: ['$window', '$rootScope', function ($window, $rootScope) { - if (!basePath) { - basePath = (window.location.protocol === 'https:' ? 'https' : 'http') + '://code.highcharts.com/'; - } - return highchartsNG($window, $rootScope, lazyLoad, basePath, modules); - }] - }; - } - function highchartsNG($window, $rootScope, lazyload, basePath, modules) { - var readyQueue = []; - var loading = false; - return { - lazyLoad:lazyload, - ready: function (callback, thisArg) { - if (typeof $window.Highcharts !== 'undefined' || !lazyload) { - callback(); - } else { - readyQueue.push([callback, thisArg]); - if (loading) { - return; - } - loading = true; - var self = this; - if (typeof jQuery === 'undefined') { - modules.unshift('adapters/standalone-framework.js'); - } - var doWork = function () { - if (modules.length === 0) { - loading = false; - $rootScope.$apply(function () { - angular.forEach(readyQueue, function (e) { - // invoke callback passing 'thisArg' - e[0].apply(e[1], []); - }); - }); - } else { - var s = modules.shift(); - self.loadScript(s, doWork); - } - }; - doWork(); - } - }, - loadScript: function (path, callback) { - var s = document.createElement('script'); - s.type = 'text/javascript'; - s.src = basePath + path; - s.onload = callback; - document.getElementsByTagName('body')[0].appendChild(s); - }, - //IE8 support - indexOf: function (arr, find, i /*opt*/) { - if (i === undefined) i = 0; - if (i < 0) i += arr.length; - if (i < 0) i = 0; - for (var n = arr.length; i < n; i++) - if (i in arr && arr[i] === find) - return i; - return -1; - }, - - prependMethod: function (obj, method, func) { - var original = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - func.apply(this, args); - if (original) { - return original.apply(this, args); - } else { - return; - } - - }; - }, - - deepExtend: function deepExtend(destination, source) { - //Slightly strange behaviour in edge cases (e.g. passing in non objects) - //But does the job for current use cases. - if (angular.isArray(source)) { - destination = angular.isArray(destination) ? destination : []; - for (var i = 0; i < source.length; i++) { - destination[i] = deepExtend(destination[i] || {}, source[i]); - } - } else if (angular.isObject(source)) { - destination = angular.isObject(destination) ? destination : {}; - for (var property in source) { - destination[property] = deepExtend(destination[property] || {}, source[property]); - } - } else { - destination = source; - } - return destination; - } - }; - } - - function highchart(highchartsNGUtils, $timeout) { - - // acceptable shared state - var seriesId = 0; - var ensureIds = function (series) { - var changed = false; - angular.forEach(series, function(s) { - if (!angular.isDefined(s.id)) { - s.id = 'series-' + seriesId++; - changed = true; - } - }); - return changed; - }; - - // immutable - var axisNames = [ 'xAxis', 'yAxis' ]; - var chartTypeMap = { - 'stock': 'StockChart', - 'map': 'Map', - 'chart': 'Chart' - }; - - var getMergedOptions = function (scope, element, config) { - var mergedOptions = {}; - - var defaultOptions = { - chart: { - events: {} - }, - title: {}, - subtitle: {}, - series: [], - credits: {}, - plotOptions: {}, - navigator: {enabled: false}, - xAxis: { - events: {} - }, - yAxis: { - events: {} - } - }; - - if (config.options) { - mergedOptions = highchartsNGUtils.deepExtend(defaultOptions, config.options); - } else { - mergedOptions = defaultOptions; - } - mergedOptions.chart.renderTo = element[0]; - - angular.forEach(axisNames, function(axisName) { - if(angular.isDefined(config[axisName])) { - mergedOptions[axisName] = highchartsNGUtils.deepExtend(mergedOptions[axisName] || {}, config[axisName]); - - if(angular.isDefined(config[axisName].currentMin) || - angular.isDefined(config[axisName].currentMax)) { - - highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'selection', function(e){ - var thisChart = this; - if (e[axisName]) { - scope.$apply(function () { - scope.config[axisName].currentMin = e[axisName][0].min; - scope.config[axisName].currentMax = e[axisName][0].max; - }); - } else { - //handle reset button - zoom out to all - scope.$apply(function () { - scope.config[axisName].currentMin = thisChart[axisName][0].dataMin; - scope.config[axisName].currentMax = thisChart[axisName][0].dataMax; - }); - } - }); - - highchartsNGUtils.prependMethod(mergedOptions.chart.events, 'addSeries', function(e){ - scope.config[axisName].currentMin = this[axisName][0].min || scope.config[axisName].currentMin; - scope.config[axisName].currentMax = this[axisName][0].max || scope.config[axisName].currentMax; - }); - highchartsNGUtils.prependMethod(mergedOptions[axisName].events, 'setExtremes', function (e) { - if (e.trigger && e.trigger !== 'zoom') { // zoom trigger is handled by selection event - $timeout(function () { - scope.config[axisName].currentMin = e.min; - scope.config[axisName].currentMax = e.max; - scope.config[axisName].min = e.min; // set min and max to adjust scrollbar/navigator - scope.config[axisName].max = e.max; - }, 0); - } - }); - } - } - }); - - if(config.title) { - mergedOptions.title = config.title; - } - if (config.subtitle) { - mergedOptions.subtitle = config.subtitle; - } - if (config.credits) { - mergedOptions.credits = config.credits; - } - if(config.size) { - if (config.size.width) { - mergedOptions.chart.width = config.size.width; - } - if (config.size.height) { - mergedOptions.chart.height = config.size.height; - } - } - return mergedOptions; - }; - - var updateZoom = function (axis, modelAxis) { - var extremes = axis.getExtremes(); - if(modelAxis.currentMin !== extremes.dataMin || modelAxis.currentMax !== extremes.dataMax) { - if (axis.setExtremes) { - axis.setExtremes(modelAxis.currentMin, modelAxis.currentMax, false); - } else { - axis.detachedsetExtremes(modelAxis.currentMin, modelAxis.currentMax, false); - } - } - }; - - var processExtremes = function(chart, axis, axisName) { - if(axis.currentMin || axis.currentMax) { - chart[axisName][0].setExtremes(axis.currentMin, axis.currentMax, true); - } - }; - - var chartOptionsWithoutEasyOptions = function (options) { - return angular.extend( - highchartsNGUtils.deepExtend({}, options), - { data: null, visible: null } - ); - }; - - var getChartType = function(scope) { - if (scope.config === undefined) return 'Chart'; - return chartTypeMap[('' + scope.config.chartType).toLowerCase()] || - (scope.config.useHighStocks ? 'StockChart' : 'Chart'); - }; - - var res = { - restrict: 'EAC', - replace: true, - template: '<div></div>', - scope: { - config: '=', - disableDataWatch: '=' - }, - link: function (scope, element, attrs) { - // We keep some chart-specific variables here as a closure - // instead of storing them on 'scope'. - - // prevSeriesOptions is maintained by processSeries - var prevSeriesOptions = {}; - - var processSeries = function(series) { - var i; - var ids = []; - - if(series) { - var setIds = ensureIds(series); - if(setIds && !scope.disableDataWatch) { - //If we have set some ids this will trigger another digest cycle. - //In this scenario just return early and let the next cycle take care of changes - return false; - } - - //Find series to add or update - angular.forEach(series, function(s) { - ids.push(s.id); - var chartSeries = chart.get(s.id); - if (chartSeries) { - if (!angular.equals(prevSeriesOptions[s.id], chartOptionsWithoutEasyOptions(s))) { - chartSeries.update(angular.copy(s), false); - } else { - if (s.visible !== undefined && chartSeries.visible !== s.visible) { - chartSeries.setVisible(s.visible, false); - } - chartSeries.setData(angular.copy(s.data), false); - } - } else { - chart.addSeries(angular.copy(s), false); - } - prevSeriesOptions[s.id] = chartOptionsWithoutEasyOptions(s); - }); - - // Shows no data text if all series are empty - if(scope.config.noData) { - var chartContainsData = false; - - for(i = 0; i < series.length; i++) { - if (series[i].data && series[i].data.length > 0) { - chartContainsData = true; - - break; - } - } - - if (!chartContainsData) { - chart.showLoading(scope.config.noData); - } else { - chart.hideLoading(); - } - } - } - - //Now remove any missing series - for(i = chart.series.length - 1; i >= 0; i--) { - var s = chart.series[i]; - if (s.options.id !== 'highcharts-navigator-series' && highchartsNGUtils.indexOf(ids, s.options.id) < 0) { - s.remove(false); - } - } - - return true; - }; - - // chart is maintained by initChart - var chart = false; - var initChart = function() { - if (chart) chart.destroy(); - prevSeriesOptions = {}; - var config = scope.config || {}; - var mergedOptions = getMergedOptions(scope, element, config); - var func = config.func || undefined; - var chartType = getChartType(scope); - - chart = new Highcharts[chartType](mergedOptions, func); - - for (var i = 0; i < axisNames.length; i++) { - if (config[axisNames[i]]) { - processExtremes(chart, config[axisNames[i]], axisNames[i]); - } - } - if(config.loading) { - chart.showLoading(); - } - config.getHighcharts = function() { - return chart; - }; - - }; - initChart(); - - - if(scope.disableDataWatch){ - scope.$watchCollection('config.series', function (newSeries, oldSeries) { - processSeries(newSeries); - chart.redraw(); - }); - } else { - scope.$watch('config.series', function (newSeries, oldSeries) { - var needsRedraw = processSeries(newSeries); - if(needsRedraw) { - chart.redraw(); - } - }, true); - } - - scope.$watch('config.title', function (newTitle) { - chart.setTitle(newTitle, true); - }, true); - - scope.$watch('config.subtitle', function (newSubtitle) { - chart.setTitle(true, newSubtitle); - }, true); - - scope.$watch('config.loading', function (loading) { - if(loading) { - chart.showLoading(loading === true ? null : loading); - } else { - chart.hideLoading(); - } - }); - scope.$watch('config.noData', function (noData) { - if(scope.config && scope.config.loading) { - chart.showLoading(noData); - } - }, true); - - scope.$watch('config.credits.enabled', function (enabled) { - if (enabled) { - chart.credits.show(); - } else if (chart.credits) { - chart.credits.hide(); - } - }); - - scope.$watch(getChartType, function (chartType, oldChartType) { - if (chartType === oldChartType) return; - initChart(); - }); - - angular.forEach(axisNames, function(axisName) { - scope.$watch('config.' + axisName, function(newAxes, oldAxes) { - if (newAxes === oldAxes || !newAxes) { - return; - } - - if (angular.isArray(newAxes)) { - - for (var axisIndex = 0; axisIndex < newAxes.length; axisIndex++) { - var axis = newAxes[axisIndex]; - - if (axisIndex < chart[axisName].length) { - chart[axisName][axisIndex].update(axis, false); - updateZoom(chart[axisName][axisIndex], angular.copy(axis)); - } - - } - - } else { - // update single axis - chart[axisName][0].update(newAxes, false); - updateZoom(chart[axisName][0], angular.copy(newAxes)); - } - - chart.redraw(); - }, true); - }); - scope.$watch('config.options', function (newOptions, oldOptions, scope) { - //do nothing when called on registration - if (newOptions === oldOptions) return; - initChart(); - processSeries(scope.config.series); - chart.redraw(); - }, true); - - scope.$watch('config.size', function (newSize, oldSize) { - if(newSize === oldSize) return; - if(newSize) { - chart.setSize(newSize.width || chart.chartWidth, newSize.height || chart.chartHeight); - } - }, true); - - scope.$on('highchartsng.reflow', function () { - chart.reflow(); - }); - - scope.$on('$destroy', function() { - if (chart) { - try{ - chart.destroy(); - }catch(ex){ - // fail silently as highcharts will throw exception if element doesn't exist - } - - $timeout(function(){ - element.remove(); - }, 0); - } - }); - - } - }; - - // override link fn if lazy loading is enabled - if(highchartsNGUtils.lazyLoad){ - var oldLink = res.link; - res.link = function(){ - var args = arguments; - highchartsNGUtils.ready(function(){ - oldLink.apply(this, args); - }, this); - }; - } - return res; - } -}()); diff --git a/platforms/browser/www/lib/highcharts-ng/highcharts-ng.min.js b/platforms/browser/www/lib/highcharts-ng/highcharts-ng.min.js deleted file mode 100755 index 0edccb1f..00000000 --- a/platforms/browser/www/lib/highcharts-ng/highcharts-ng.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * highcharts-ng - * @version v0.0.12-dev - 2015-09-12 - * @link https://github.com/pablojim/highcharts-ng - * @author Barry Fitzgerald <> - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="highcharts-ng"),function(){"use strict";function a(){var a=[],c=!1,d=!1;return{HIGHCHART:"highcharts.js",HIGHSTOCK:"stock/highstock.js",basePath:function(a){c=a},lazyLoad:function(b){a=void 0===b?[this.HIGHCHART]:b,d=!0},$get:["$window","$rootScope",function(e,f){return c||(c=("https:"===window.location.protocol?"https":"http")+"://code.highcharts.com/"),b(e,f,d,c,a)}]}}function b(a,b,c,d,e){var f=[],g=!1;return{lazyLoad:c,ready:function(d,h){if("undefined"==typeof a.Highcharts&&c){if(f.push([d,h]),g)return;g=!0;var i=this;"undefined"==typeof jQuery&&e.unshift("adapters/standalone-framework.js");var j=function(){if(0===e.length)g=!1,b.$apply(function(){angular.forEach(f,function(a){a[0].apply(a[1],[])})});else{var a=e.shift();i.loadScript(a,j)}};j()}else d()},loadScript:function(a,b){var c=document.createElement("script");c.type="text/javascript",c.src=d+a,c.onload=b,document.getElementsByTagName("body")[0].appendChild(c)},indexOf:function(a,b,c){void 0===c&&(c=0),0>c&&(c+=a.length),0>c&&(c=0);for(var d=a.length;d>c;c++)if(c in a&&a[c]===b)return c;return-1},prependMethod:function(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);return c.apply(this,a),d?d.apply(this,a):void 0}},deepExtend:function h(a,b){if(angular.isArray(b)){a=angular.isArray(a)?a:[];for(var c=0;c<b.length;c++)a[c]=h(a[c]||{},b[c])}else if(angular.isObject(b)){a=angular.isObject(a)?a:{};for(var d in b)a[d]=h(a[d]||{},b[d])}else a=b;return a}}}function c(a,b){var c=0,d=function(a){var b=!1;return angular.forEach(a,function(a){angular.isDefined(a.id)||(a.id="series-"+c++,b=!0)}),b},e=["xAxis","yAxis"],f={stock:"StockChart",map:"Map",chart:"Chart"},g=function(c,d,f){var g={},h={chart:{events:{}},title:{},subtitle:{},series:[],credits:{},plotOptions:{},navigator:{enabled:!1},xAxis:{events:{}},yAxis:{events:{}}};return g=f.options?a.deepExtend(h,f.options):h,g.chart.renderTo=d[0],angular.forEach(e,function(d){angular.isDefined(f[d])&&(g[d]=a.deepExtend(g[d]||{},f[d]),(angular.isDefined(f[d].currentMin)||angular.isDefined(f[d].currentMax))&&(a.prependMethod(g.chart.events,"selection",function(a){var b=this;a[d]?c.$apply(function(){c.config[d].currentMin=a[d][0].min,c.config[d].currentMax=a[d][0].max}):c.$apply(function(){c.config[d].currentMin=b[d][0].dataMin,c.config[d].currentMax=b[d][0].dataMax})}),a.prependMethod(g.chart.events,"addSeries",function(a){c.config[d].currentMin=this[d][0].min||c.config[d].currentMin,c.config[d].currentMax=this[d][0].max||c.config[d].currentMax}),a.prependMethod(g[d].events,"setExtremes",function(a){a.trigger&&"zoom"!==a.trigger&&b(function(){c.config[d].currentMin=a.min,c.config[d].currentMax=a.max,c.config[d].min=a.min,c.config[d].max=a.max},0)})))}),f.title&&(g.title=f.title),f.subtitle&&(g.subtitle=f.subtitle),f.credits&&(g.credits=f.credits),f.size&&(f.size.width&&(g.chart.width=f.size.width),f.size.height&&(g.chart.height=f.size.height)),g},h=function(a,b){var c=a.getExtremes();(b.currentMin!==c.dataMin||b.currentMax!==c.dataMax)&&(a.setExtremes?a.setExtremes(b.currentMin,b.currentMax,!1):a.detachedsetExtremes(b.currentMin,b.currentMax,!1))},i=function(a,b,c){(b.currentMin||b.currentMax)&&a[c][0].setExtremes(b.currentMin,b.currentMax,!0)},j=function(b){return angular.extend(a.deepExtend({},b),{data:null,visible:null})},k=function(a){return void 0===a.config?"Chart":f[(""+a.config.chartType).toLowerCase()]||(a.config.useHighStocks?"StockChart":"Chart")},l={restrict:"EAC",replace:!0,template:"<div></div>",scope:{config:"=",disableDataWatch:"="},link:function(c,f,l){var m={},n=function(b){var e,f=[];if(b){var g=d(b);if(g&&!c.disableDataWatch)return!1;if(angular.forEach(b,function(a){f.push(a.id);var b=o.get(a.id);b?angular.equals(m[a.id],j(a))?(void 0!==a.visible&&b.visible!==a.visible&&b.setVisible(a.visible,!1),b.setData(angular.copy(a.data),!1)):b.update(angular.copy(a),!1):o.addSeries(angular.copy(a),!1),m[a.id]=j(a)}),c.config.noData){var h=!1;for(e=0;e<b.length;e++)if(b[e].data&&b[e].data.length>0){h=!0;break}h?o.hideLoading():o.showLoading(c.config.noData)}}for(e=o.series.length-1;e>=0;e--){var i=o.series[e];"highcharts-navigator-series"!==i.options.id&&a.indexOf(f,i.options.id)<0&&i.remove(!1)}return!0},o=!1,p=function(){o&&o.destroy(),m={};var a=c.config||{},b=g(c,f,a),d=a.func||void 0,h=k(c);o=new Highcharts[h](b,d);for(var j=0;j<e.length;j++)a[e[j]]&&i(o,a[e[j]],e[j]);a.loading&&o.showLoading(),a.getHighcharts=function(){return o}};p(),c.disableDataWatch?c.$watchCollection("config.series",function(a,b){n(a),o.redraw()}):c.$watch("config.series",function(a,b){var c=n(a);c&&o.redraw()},!0),c.$watch("config.title",function(a){o.setTitle(a,!0)},!0),c.$watch("config.subtitle",function(a){o.setTitle(!0,a)},!0),c.$watch("config.loading",function(a){a?o.showLoading(a===!0?null:a):o.hideLoading()}),c.$watch("config.noData",function(a){c.config&&c.config.loading&&o.showLoading(a)},!0),c.$watch("config.credits.enabled",function(a){a?o.credits.show():o.credits&&o.credits.hide()}),c.$watch(k,function(a,b){a!==b&&p()}),angular.forEach(e,function(a){c.$watch("config."+a,function(b,c){if(b!==c&&b){if(angular.isArray(b))for(var d=0;d<b.length;d++){var e=b[d];d<o[a].length&&(o[a][d].update(e,!1),h(o[a][d],angular.copy(e)))}else o[a][0].update(b,!1),h(o[a][0],angular.copy(b));o.redraw()}},!0)}),c.$watch("config.options",function(a,b,c){a!==b&&(p(),n(c.config.series),o.redraw())},!0),c.$watch("config.size",function(a,b){a!==b&&a&&o.setSize(a.width||o.chartWidth,a.height||o.chartHeight)},!0),c.$on("highchartsng.reflow",function(){o.reflow()}),c.$on("$destroy",function(){if(o){try{o.destroy()}catch(a){}b(function(){f.remove()},0)}})}};if(a.lazyLoad){var m=l.link;l.link=function(){var b=arguments;a.ready(function(){m.apply(this,b)},this)}}return l}angular.module("highcharts-ng",[]).provider("highchartsNG",a).directive("highchart",["highchartsNG","$timeout",c])}(); \ No newline at end of file diff --git a/platforms/browser/www/lib/highcharts/adapters/standalone-framework.js b/platforms/browser/www/lib/highcharts/adapters/standalone-framework.js deleted file mode 100644 index 8b137891..00000000 --- a/platforms/browser/www/lib/highcharts/adapters/standalone-framework.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/platforms/browser/www/lib/highcharts/adapters/standalone-framework.src.js b/platforms/browser/www/lib/highcharts/adapters/standalone-framework.src.js deleted file mode 100644 index 8b137891..00000000 --- a/platforms/browser/www/lib/highcharts/adapters/standalone-framework.src.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/platforms/browser/www/lib/highcharts/highcharts-3d.js b/platforms/browser/www/lib/highcharts/highcharts-3d.js deleted file mode 100644 index 8c095f01..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts-3d.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - 3D features for Highcharts JS - - @license: www.highcharts.com/license -*/ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){function r(c,b,a){var e,f,g=b.options.chart.options3d,d=!1;a?(d=b.inverted,a=b.plotWidth/2,b=b.plotHeight/2,e=g.depth/2,f=u(g.depth,1)*u(g.viewDistance,0)):(a=b.plotLeft+b.plotWidth/2,b=b.plotTop+b.plotHeight/2,e=g.depth/2,f=u(g.depth,1)*u(g.viewDistance,0));var j=[],k=a,i=b,l=e,w=f,a=A*(d?g.beta:-g.beta),g=A*(d?-g.alpha:g.alpha),o=p(a),q=m(a),n=p(g),y=m(g),x,s,z,t,v,C;B(c,function(a){x=(d?a.y:a.x)- -k;s=(d?a.x:a.y)-i;z=(a.z||0)-l;t=q*x-o*z;v=-o*n*x+y*s-q*n*z;C=o*y*x+n*s+q*y*z;w>0&&w<Number.POSITIVE_INFINITY&&(t*=w/(C+l+w),v*=w/(C+l+w));t+=k;v+=i;C+=l;j.push({x:d?v:t,y:d?t:v,z:C})});return j}function D(c){return c!==void 0&&c!==null}function I(c){var b=0,a,e;for(a=0;a<c.length;a++)e=(a+1)%c.length,b+=c[a].x*c[e].y-c[e].x*c[a].y;return b/2}function E(c){var b=0,a;for(a=0;a<c.length;a++)b+=c[a].z;return c.length?b/c.length:0}function q(c,b,a,e,f,g,d,j){var k=[];g>f&&g-f>o/2+1.0E-4?(k=k.concat(q(c, -b,a,e,f,f+o/2,d,j)),k=k.concat(q(c,b,a,e,f+o/2,g,d,j))):g<f&&f-g>o/2+1.0E-4?(k=k.concat(q(c,b,a,e,f,f-o/2,d,j)),k=k.concat(q(c,b,a,e,f-o/2,g,d,j))):(k=g-f,k=["C",c+a*m(f)-a*F*k*p(f)+d,b+e*p(f)+e*F*k*m(f)+j,c+a*m(g)+a*F*k*p(g)+d,b+e*p(g)-e*F*k*m(g)+j,c+a*m(g)+d,b+e*p(g)+j]);return k}function J(c){if(this.chart.is3d()){var b=this.chart.options.plotOptions.column.grouping;if(b!==void 0&&!b&&this.group.zIndex!==void 0&&!this.zIndexSet)this.group.attr({zIndex:this.group.zIndex*10}),this.zIndexSet=!0;var a= -this.options,e=this.options.states;this.borderWidth=a.borderWidth=D(a.edgeWidth)?a.edgeWidth:1;d.each(this.data,function(b){if(b.y!==null)b=b.pointAttr,this.borderColor=d.pick(a.edgeColor,b[""].fill),b[""].stroke=this.borderColor,b.hover.stroke=d.pick(e.hover.edgeColor,this.borderColor),b.select.stroke=d.pick(e.select.edgeColor,this.borderColor)})}c.apply(this,[].slice.call(arguments,1))}var B=d.each,M=d.extend,N=d.inArray,G=d.merge,u=d.pick,K=d.wrap,o=Math.PI,A=o/180,p=Math.sin,m=Math.cos,L=Math.round; -d.perspective=r;var F=4*(Math.sqrt(2)-1)/3/(o/2);d.SVGRenderer.prototype.toLinePath=function(c,b){var a=[];d.each(c,function(b){a.push("L",b.x,b.y)});c.length&&(a[0]="M",b&&a.push("Z"));return a};d.SVGRenderer.prototype.cuboid=function(c){var b=this.g(),c=this.cuboidPath(c);b.front=this.path(c[0]).attr({zIndex:c[3],"stroke-linejoin":"round"}).add(b);b.top=this.path(c[1]).attr({zIndex:c[4],"stroke-linejoin":"round"}).add(b);b.side=this.path(c[2]).attr({zIndex:c[5],"stroke-linejoin":"round"}).add(b); -b.fillSetter=function(a){var b=d.Color(a).brighten(0.1).get(),c=d.Color(a).brighten(-0.1).get();this.front.attr({fill:a});this.top.attr({fill:b});this.side.attr({fill:c});this.color=a;return this};b.opacitySetter=function(a){this.front.attr({opacity:a});this.top.attr({opacity:a});this.side.attr({opacity:a});return this};b.attr=function(a){if(a.shapeArgs||D(a.x))a=this.renderer.cuboidPath(a.shapeArgs||a),this.front.attr({d:a[0],zIndex:a[3]}),this.top.attr({d:a[1],zIndex:a[4]}),this.side.attr({d:a[2], -zIndex:a[5]});else return d.SVGElement.prototype.attr.call(this,a);return this};b.animate=function(a,b,c){D(a.x)&&D(a.y)?(a=this.renderer.cuboidPath(a),this.front.attr({zIndex:a[3]}).animate({d:a[0]},b,c),this.top.attr({zIndex:a[4]}).animate({d:a[1]},b,c),this.side.attr({zIndex:a[5]}).animate({d:a[2]},b,c),this.attr({zIndex:-a[6]})):a.opacity?(this.front.animate(a,b,c),this.top.animate(a,b,c),this.side.animate(a,b,c)):d.SVGElement.prototype.animate.call(this,a,b,c);return this};b.destroy=function(){this.front.destroy(); -this.top.destroy();this.side.destroy();return null};b.attr({zIndex:-c[6]});return b};d.SVGRenderer.prototype.cuboidPath=function(c){function b(a){return i[a]}var a=c.x,e=c.y,f=c.z,g=c.height,h=c.width,j=c.depth,k=d.map,i=[{x:a,y:e,z:f},{x:a+h,y:e,z:f},{x:a+h,y:e+g,z:f},{x:a,y:e+g,z:f},{x:a,y:e+g,z:f+j},{x:a+h,y:e+g,z:f+j},{x:a+h,y:e,z:f+j},{x:a,y:e,z:f+j}],i=r(i,d.charts[this.chartIndex],c.insidePlotArea),f=function(a,c){var e=[],a=k(a,b),c=k(c,b);I(a)<0?e=a:I(c)<0&&(e=c);return e},c=f([3,2,1,0], -[7,6,5,4]),a=[4,5,2,3],e=f([1,6,7,0],a),f=f([1,2,5,6],[0,7,4,3]);return[this.toLinePath(c,!0),this.toLinePath(e,!0),this.toLinePath(f,!0),E(c),E(e),E(f),E(k(a,b))*9E9]};d.SVGRenderer.prototype.arc3d=function(c){function b(a){var b=!1,c={},e;for(e in a)N(e,f)!==-1&&(c[e]=a[e],delete a[e],b=!0);return b?c:!1}var a=this.g(),e=a.renderer,f="x,y,r,innerR,start,end".split(","),c=G(c);c.alpha*=A;c.beta*=A;a.top=e.path();a.side1=e.path();a.side2=e.path();a.inn=e.path();a.out=e.path();a.onAdd=function(){var b= -a.parentGroup;a.top.add(a);a.out.add(b);a.inn.add(b);a.side1.add(b);a.side2.add(b)};a.setPaths=function(b){var c=a.renderer.arc3dPath(b),e=c.zTop*100;a.attribs=b;a.top.attr({d:c.top,zIndex:c.zTop});a.inn.attr({d:c.inn,zIndex:c.zInn});a.out.attr({d:c.out,zIndex:c.zOut});a.side1.attr({d:c.side1,zIndex:c.zSide1});a.side2.attr({d:c.side2,zIndex:c.zSide2});a.zIndex=e;a.attr({zIndex:e});b.center&&(a.top.setRadialReference(b.center),delete b.center)};a.setPaths(c);a.fillSetter=function(a){var b=d.Color(a).brighten(-0.1).get(); -this.fill=a;this.side1.attr({fill:b});this.side2.attr({fill:b});this.inn.attr({fill:b});this.out.attr({fill:b});this.top.attr({fill:a});return this};B(["opacity","translateX","translateY","visibility"],function(b){a[b+"Setter"]=function(b,c){a[c]=b;B(["out","inn","side1","side2","top"],function(e){a[e].attr(c,b)})}});K(a,"attr",function(c,e,d){var f;if(typeof e==="object"&&(f=b(e)))M(a.attribs,f),a.setPaths(a.attribs);return c.call(this,e,d)});K(a,"animate",function(a,c,e,d){var f,l=this.attribs, -m;delete c.center;delete c.z;delete c.depth;delete c.alpha;delete c.beta;if(e=u(e,this.renderer.globalAnimation))if(typeof e!=="object"&&(e={}),c=G(c),f=b(c))m=f,e.step=function(a,b){function c(a){return l[a]+(u(m[a],l[a])-l[a])*b.pos}b.elem.setPaths(G(l,{x:c("x"),y:c("y"),r:c("r"),innerR:c("innerR"),start:c("start"),end:c("end")}))};return a.call(this,c,e,d)});a.destroy=function(){this.top.destroy();this.out.destroy();this.inn.destroy();this.side1.destroy();this.side2.destroy();d.SVGElement.prototype.destroy.call(this)}; -a.hide=function(){this.top.hide();this.out.hide();this.inn.hide();this.side1.hide();this.side2.hide()};a.show=function(){this.top.show();this.out.show();this.inn.show();this.side1.show();this.side2.show()};return a};d.SVGRenderer.prototype.arc3dPath=function(c){function b(a){a%=2*o;a>o&&(a=2*o-a);return a}var a=c.x,e=c.y,d=c.start,g=c.end-1.0E-5,h=c.r,j=c.innerR,k=c.depth,i=c.alpha,l=c.beta,w=m(d),u=p(d),c=m(g),r=p(g),n=h*m(l);h*=m(i);var y=j*m(l),x=j*m(i),j=k*p(l),s=k*p(i),k=["M",a+n*w,e+h*u],k= -k.concat(q(a,e,n,h,d,g,0,0)),k=k.concat(["L",a+y*c,e+x*r]),k=k.concat(q(a,e,y,x,g,d,0,0)),k=k.concat(["Z"]),z=l>0?o/2:0,l=i>0?0:o/2,z=d>-z?d:g>-z?-z:d,t=g<o-l?g:d<o-l?o-l:g,v=2*o-l,i=["M",a+n*m(z),e+h*p(z)],i=i.concat(q(a,e,n,h,z,t,0,0));g>v&&d<v?(i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]),i=i.concat(q(a,e,n,h,t,v,j,s)),i=i.concat(["L",a+n*m(v),e+h*p(v)]),i=i.concat(q(a,e,n,h,v,g,0,0)),i=i.concat(["L",a+n*m(g)+j,e+h*p(g)+s]),i=i.concat(q(a,e,n,h,g,v,j,s)),i=i.concat(["L",a+n*m(v),e+h*p(v)]),i=i.concat(q(a, -e,n,h,v,t,0,0))):g>o-l&&d<o-l&&(i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]),i=i.concat(q(a,e,n,h,t,g,j,s)),i=i.concat(["L",a+n*m(g),e+h*p(g)]),i=i.concat(q(a,e,n,h,g,t,0,0)));i=i.concat(["L",a+n*m(t)+j,e+h*p(t)+s]);i=i.concat(q(a,e,n,h,t,z,j,s));i=i.concat(["Z"]);l=["M",a+y*w,e+x*u];l=l.concat(q(a,e,y,x,d,g,0,0));l=l.concat(["L",a+y*m(g)+j,e+x*p(g)+s]);l=l.concat(q(a,e,y,x,g,d,j,s));l=l.concat(["Z"]);w=["M",a+n*w,e+h*u,"L",a+n*w+j,e+h*u+s,"L",a+y*w+j,e+x*u+s,"L",a+y*w,e+x*u,"Z"];a=["M",a+n*c,e+h*r,"L", -a+n*c+j,e+h*r+s,"L",a+y*c+j,e+x*r+s,"L",a+y*c,e+x*r,"Z"];r=Math.atan2(s,-j);e=Math.abs(g+r);c=Math.abs(d+r);d=Math.abs((d+g)/2+r);e=b(e);c=b(c);d=b(d);d*=1E5;g=c*1E5;e*=1E5;return{top:k,zTop:o*1E5+1,out:i,zOut:Math.max(d,g,e),inn:l,zInn:Math.max(d,g,e),side1:w,zSide1:e*0.99,side2:a,zSide2:g*0.99}};d.Chart.prototype.is3d=function(){return this.options.chart.options3d&&this.options.chart.options3d.enabled};d.wrap(d.Chart.prototype,"isInsidePlot",function(c){return this.is3d()||c.apply(this,[].slice.call(arguments, -1))});d.getOptions().chart.options3d={enabled:!1,alpha:0,beta:0,depth:100,viewDistance:25,frame:{bottom:{size:1,color:"rgba(255,255,255,0)"},side:{size:1,color:"rgba(255,255,255,0)"},back:{size:1,color:"rgba(255,255,255,0)"}}};d.wrap(d.Chart.prototype,"init",function(c){var b=[].slice.call(arguments,1),a;if(b[0].chart&&b[0].chart.options3d&&b[0].chart.options3d.enabled)b[0].chart.options3d.alpha=(b[0].chart.options3d.alpha||0)%360,b[0].chart.options3d.beta=(b[0].chart.options3d.beta||0)%360,a=b[0].plotOptions|| -{},a=a.pie||{},a.borderColor=d.pick(a.borderColor,void 0);c.apply(this,b)});d.wrap(d.Chart.prototype,"setChartSize",function(c){c.apply(this,[].slice.call(arguments,1));if(this.is3d()){var b=this.inverted,a=this.clipBox,e=this.margin;a[b?"y":"x"]=-(e[3]||0);a[b?"x":"y"]=-(e[0]||0);a[b?"height":"width"]=this.chartWidth+(e[3]||0)+(e[1]||0);a[b?"width":"height"]=this.chartHeight+(e[0]||0)+(e[2]||0)}});d.wrap(d.Chart.prototype,"redraw",function(c){if(this.is3d())this.isDirtyBox=!0;c.apply(this,[].slice.call(arguments, -1))});d.wrap(d.Chart.prototype,"renderSeries",function(c){var b=this.series.length;if(this.is3d())for(;b--;)c=this.series[b],c.translate(),c.render();else c.call(this)});d.Chart.prototype.retrieveStacks=function(c){var b=this.series,a={},e,f=1;d.each(this.series,function(d){e=u(d.options.stack,c?0:b.length-1-d.index);a[e]?a[e].series.push(d):(a[e]={series:[d],position:f},f++)});a.totalStacks=f+1;return a};d.wrap(d.Axis.prototype,"setOptions",function(c,b){var a;c.call(this,b);if(this.chart.is3d())a= -this.options,a.tickWidth=d.pick(a.tickWidth,0),a.gridLineWidth=d.pick(a.gridLineWidth,1)});d.wrap(d.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=b.renderer,e=b.options.chart.options3d,d=e.frame,g=d.bottom,h=d.back,d=d.side,j=e.depth,k=this.height,i=this.width,l=this.left,m=this.top;if(!this.isZAxis)this.horiz?(h={x:l,y:m+(b.xAxis[0].opposite?-g.size:k),z:0,width:i,height:g.size,depth:j,insidePlotArea:!1},this.bottomFrame?this.bottomFrame.animate(h): -this.bottomFrame=a.cuboid(h).attr({fill:g.color,zIndex:b.yAxis[0].reversed&&e.alpha>0?4:-1}).css({stroke:g.color}).add()):(e={x:l+(b.yAxis[0].opposite?0:-d.size),y:m+(b.xAxis[0].opposite?-g.size:0),z:j,width:i+d.size,height:k+g.size,depth:h.size,insidePlotArea:!1},this.backFrame?this.backFrame.animate(e):this.backFrame=a.cuboid(e).attr({fill:h.color,zIndex:-3}).css({stroke:h.color}).add(),b={x:l+(b.yAxis[0].opposite?i:-d.size),y:m+(b.xAxis[0].opposite?-g.size:0),z:0,width:d.size,height:k+g.size,depth:j, -insidePlotArea:!1},this.sideFrame?this.sideFrame.animate(b):this.sideFrame=a.cuboid(b).attr({fill:d.color,zIndex:-2}).css({stroke:d.color}).add())}});d.wrap(d.Axis.prototype,"getPlotLinePath",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.chart.is3d())return b;if(b===null)return b;var a=this.chart,d=a.options.chart.options3d,a=this.isZAxis?a.plotWidth:d.depth,d=this.opposite;this.horiz&&(d=!d);b=[this.swapZ({x:b[1],y:b[2],z:d?a:0}),this.swapZ({x:b[1],y:b[2],z:a}),this.swapZ({x:b[4], -y:b[5],z:a}),this.swapZ({x:b[4],y:b[5],z:d?0:a})];b=r(b,this.chart,!1);return b=this.chart.renderer.toLinePath(b,!1)});d.wrap(d.Axis.prototype,"getLinePath",function(c){return this.chart.is3d()?[]:c.apply(this,[].slice.call(arguments,1))});d.wrap(d.Axis.prototype,"getPlotBandPath",function(c){if(!this.chart.is3d())return c.apply(this,[].slice.call(arguments,1));var b=arguments,a=b[1],b=this.getPlotLinePath(b[2]);(a=this.getPlotLinePath(a))&&b?a.push("L",b[10],b[11],"L",b[7],b[8],"L",b[4],b[5],"L", -b[1],b[2]):a=null;return a});d.wrap(d.Tick.prototype,"getMarkPath",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return b;b=[this.axis.swapZ({x:b[1],y:b[2],z:0}),this.axis.swapZ({x:b[4],y:b[5],z:0})];b=r(b,this.axis.chart,!1);return b=["M",b[0].x,b[0].y,"L",b[1].x,b[1].y]});d.wrap(d.Tick.prototype,"getLabelPosition",function(c){var b=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return b;var a=r([this.axis.swapZ({x:b.x,y:b.y,z:0})],this.axis.chart, -!1)[0];a.x-=!this.axis.horiz&&this.axis.opposite?this.axis.transA:0;a.old=b;return a});d.wrap(d.Tick.prototype,"handleOverflow",function(c,b){if(this.axis.chart.is3d())b=b.old;return c.call(this,b)});d.wrap(d.Axis.prototype,"getTitlePosition",function(c){var b=this.chart.is3d(),a,d;if(b)d=this.axisTitleMargin,this.axisTitleMargin=0;a=c.apply(this,[].slice.call(arguments,1));if(b)a=r([this.swapZ({x:a.x,y:a.y,z:0})],this.chart,!1)[0],a[this.horiz?"y":"x"]+=(this.horiz?1:-1)*(this.opposite?-1:1)*d,this.axisTitleMargin= -d;return a});d.wrap(d.Axis.prototype,"drawCrosshair",function(c){var b=arguments;this.chart.is3d()&&b[2]&&(b[2]={plotX:b[2].plotXold||b[2].plotX,plotY:b[2].plotYold||b[2].plotY});c.apply(this,[].slice.call(b,1))});d.Axis.prototype.swapZ=function(c,b){if(this.isZAxis){var a=b?0:this.chart.plotLeft,d=this.chart;return{x:a+(d.yAxis[0].opposite?c.z:d.xAxis[0].width-c.z),y:c.y,z:c.x-a}}return c};var H=d.ZAxis=function(){this.isZAxis=!0;this.init.apply(this,arguments)};d.extend(H.prototype,d.Axis.prototype); -d.extend(H.prototype,{setOptions:function(c){c=d.merge({offset:0,lineWidth:0},c);d.Axis.prototype.setOptions.call(this,c);this.coll="zAxis"},setAxisSize:function(){d.Axis.prototype.setAxisSize.call(this);this.width=this.len=this.chart.options.chart.options3d.depth;this.right=this.chart.chartWidth-this.width-this.left},getSeriesExtremes:function(){var c=this,b=c.chart;c.hasVisibleSeries=!1;c.dataMin=c.dataMax=c.ignoreMinPadding=c.ignoreMaxPadding=null;c.buildStacks&&c.buildStacks();d.each(c.series, -function(a){if(a.visible||!b.options.chart.ignoreHiddenSeries)if(c.hasVisibleSeries=!0,a=a.zData,a.length)c.dataMin=Math.min(u(c.dataMin,a[0]),Math.min.apply(null,a)),c.dataMax=Math.max(u(c.dataMax,a[0]),Math.max.apply(null,a))})}});d.wrap(d.Chart.prototype,"getAxes",function(c){var b=this,a=this.options,a=a.zAxis=d.splat(a.zAxis||{});c.call(this);if(b.is3d())this.zAxis=[],d.each(a,function(a,c){a.index=c;a.isX=!0;(new H(b,a)).setScale()})});d.wrap(d.seriesTypes.column.prototype,"translate",function(c){c.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=this.options,e=a.depth||25,f=(a.stacking?a.stack||0:this._i)*(e+(a.groupZPadding||1));a.grouping!==!1&&(f=0);f+=a.groupZPadding||1;d.each(this.data,function(a){if(a.y!==null){var c=a.shapeArgs,d=a.tooltipPos;a.shapeType="cuboid";c.z=f;c.depth=e;c.insidePlotArea=!0;d=r([{x:d[0],y:d[1],z:f}],b,!1)[0];a.tooltipPos=[d.x,d.y]}});this.z=f}});d.wrap(d.seriesTypes.column.prototype,"animate",function(c){if(this.chart.is3d()){var b=arguments[1], -a=this.yAxis,e=this,f=this.yAxis.reversed;if(d.svg)b?d.each(e.data,function(b){if(b.y!==null&&(b.height=b.shapeArgs.height,b.shapey=b.shapeArgs.y,b.shapeArgs.height=1,!f))b.shapeArgs.y=b.stackY?b.plotY+a.translate(b.stackY):b.plotY+(b.negative?-b.height:b.height)}):(d.each(e.data,function(a){if(a.y!==null)a.shapeArgs.height=a.height,a.shapeArgs.y=a.shapey,a.graphic&&a.graphic.animate(a.shapeArgs,e.options.animation)}),this.drawDataLabels(),e.animate=null)}else c.apply(this,[].slice.call(arguments, -1))});d.wrap(d.seriesTypes.column.prototype,"init",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.options,a=b.grouping,d=b.stacking,f=u(this.yAxis.options.reversedStacks,!0),g=0;if(a===void 0||a){a=this.chart.retrieveStacks(d);g=b.stack||0;for(d=0;d<a[g].series.length;d++)if(a[g].series[d]===this)break;g=10*(a.totalStacks-a[g].position)+(f?d:-d);this.xAxis.reversed||(g=a.totalStacks*10-g)}b.zIndex=g}});d.wrap(d.Series.prototype,"alignDataLabel",function(c){if(this.chart.is3d()&& -(this.type==="column"||this.type==="columnrange")){var b=arguments[4],a={x:b.x,y:b.y,z:this.z},a=r([a],this.chart,!0)[0];b.x=a.x;b.y=a.y}c.apply(this,[].slice.call(arguments,1))});d.seriesTypes.columnrange&&d.wrap(d.seriesTypes.columnrange.prototype,"drawPoints",J);d.wrap(d.seriesTypes.column.prototype,"drawPoints",J);d.wrap(d.seriesTypes.pie.prototype,"translate",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var b=this,a=b.options,d=a.depth||0,f=b.chart.options.chart.options3d, -g=f.alpha,h=f.beta,j=a.stacking?(a.stack||0)*d:b._i*d;j+=d/2;a.grouping!==!1&&(j=0);B(b.data,function(c){var f=c.shapeArgs;c.shapeType="arc3d";f.z=j;f.depth=d*0.75;f.alpha=g;f.beta=h;f.center=b.center;f=(f.end+f.start)/2;c.slicedTranslation={translateX:L(m(f)*a.slicedOffset*m(g*A)),translateY:L(p(f)*a.slicedOffset*m(g*A))}})}});d.wrap(d.seriesTypes.pie.prototype.pointClass.prototype,"haloPath",function(c){var b=arguments;return this.series.chart.is3d()?[]:c.call(this,b[1])});d.wrap(d.seriesTypes.pie.prototype, -"drawPoints",function(c){var b=this.options,a=b.states;if(this.chart.is3d())this.borderWidth=b.borderWidth=b.edgeWidth||1,this.borderColor=b.edgeColor=d.pick(b.edgeColor,b.borderColor,void 0),a.hover.borderColor=d.pick(a.hover.edgeColor,this.borderColor),a.hover.borderWidth=d.pick(a.hover.edgeWidth,this.borderWidth),a.select.borderColor=d.pick(a.select.edgeColor,this.borderColor),a.select.borderWidth=d.pick(a.select.edgeWidth,this.borderWidth),B(this.data,function(b){var c=b.pointAttr;c[""].stroke= -b.series.borderColor||b.color;c[""]["stroke-width"]=b.series.borderWidth;c.hover.stroke=a.hover.borderColor;c.hover["stroke-width"]=a.hover.borderWidth;c.select.stroke=a.select.borderColor;c.select["stroke-width"]=a.select.borderWidth});c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&B(this.points,function(a){var b=a.graphic;if(b)b[a.y?"show":"hide"]()})});d.wrap(d.seriesTypes.pie.prototype,"drawDataLabels",function(c){if(this.chart.is3d()){var b=this.chart.options.chart.options3d;B(this.data, -function(a){var c=a.shapeArgs,d=c.r,g=(c.beta||b.beta)*A,h=(c.start+c.end)/2,j=a.labelPos,k=-d*(1-m((c.alpha||b.alpha)*A))*p(h),i=d*(m(g)-1)*m(h);B([0,2,4],function(a){j[a]+=i;j[a+1]+=k})})}c.apply(this,[].slice.call(arguments,1))});d.wrap(d.seriesTypes.pie.prototype,"addPoint",function(c){c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&this.update(this.userOptions,!0)});d.wrap(d.seriesTypes.pie.prototype,"animate",function(c){if(this.chart.is3d()){var b=arguments[1],a=this.options.animation, -e=this.center,f=this.group,g=this.markerGroup;if(d.svg)if(a===!0&&(a={}),b){if(f.oldtranslateX=f.translateX,f.oldtranslateY=f.translateY,b={translateX:e[0],translateY:e[1],scaleX:0.001,scaleY:0.001},f.attr(b),g)g.attrSetters=f.attrSetters,g.attr(b)}else b={translateX:f.oldtranslateX,translateY:f.oldtranslateY,scaleX:1,scaleY:1},f.animate(b,a),g&&g.animate(b,a),this.animate=null}else c.apply(this,[].slice.call(arguments,1))});d.wrap(d.seriesTypes.scatter.prototype,"translate",function(c){c.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var b=this.chart,a=d.pick(this.zAxis,b.options.zAxis[0]),e=[],f,g,h;for(h=0;h<this.data.length;h++)f=this.data[h],g=a.isLog&&a.val2lin?a.val2lin(f.z):f.z,f.plotZ=a.translate(g),f.isInside=f.isInside?g>=a.min&&g<=a.max:!1,e.push({x:f.plotX,y:f.plotY,z:f.plotZ});b=r(e,b,!0);for(h=0;h<this.data.length;h++)f=this.data[h],a=b[h],f.plotXold=f.plotX,f.plotYold=f.plotY,f.plotX=a.x,f.plotY=a.y,f.plotZ=a.z}});d.wrap(d.seriesTypes.scatter.prototype,"init",function(c, -b,a){if(b.is3d())this.axisTypes=["xAxis","yAxis","zAxis"],this.pointArrayMap=["x","y","z"],this.parallelArrays=["x","y","z"];c=c.apply(this,[b,a]);if(this.chart.is3d())this.tooltipOptions.pointFormat=this.userOptions.tooltip?this.userOptions.tooltip.pointFormat||"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>":"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>";return c});if(d.VMLRenderer)d.setOptions({animate:!1}),d.VMLRenderer.prototype.cuboid=d.SVGRenderer.prototype.cuboid, -d.VMLRenderer.prototype.cuboidPath=d.SVGRenderer.prototype.cuboidPath,d.VMLRenderer.prototype.toLinePath=d.SVGRenderer.prototype.toLinePath,d.VMLRenderer.prototype.createElement3D=d.SVGRenderer.prototype.createElement3D,d.VMLRenderer.prototype.arc3d=function(c){c=d.SVGRenderer.prototype.arc3d.call(this,c);c.css({zIndex:c.zIndex});return c},d.VMLRenderer.prototype.arc3dPath=d.SVGRenderer.prototype.arc3dPath,d.wrap(d.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));this.sideFrame&& -(this.sideFrame.css({zIndex:0}),this.sideFrame.front.attr({fill:this.sideFrame.color}));this.bottomFrame&&(this.bottomFrame.css({zIndex:1}),this.bottomFrame.front.attr({fill:this.bottomFrame.color}));this.backFrame&&(this.backFrame.css({zIndex:0}),this.backFrame.front.attr({fill:this.backFrame.color}))})}); diff --git a/platforms/browser/www/lib/highcharts/highcharts-3d.src.js b/platforms/browser/www/lib/highcharts/highcharts-3d.src.js deleted file mode 100644 index 679b98dd..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts-3d.src.js +++ /dev/null @@ -1,1712 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * 3D features for Highcharts JS - * - * @license: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { -/** - Shorthands for often used function - */ - var each = Highcharts.each, - extend = Highcharts.extend, - inArray = Highcharts.inArray, - merge = Highcharts.merge, - pick = Highcharts.pick, - wrap = Highcharts.wrap; - /** - * Mathematical Functionility - */ - var PI = Math.PI, - deg2rad = (PI / 180), // degrees to radians - sin = Math.sin, - cos = Math.cos, - round = Math.round; - - /** - * Transforms a given array of points according to the angles in chart.options. - * Parameters: - * - points: the array of points - * - chart: the chart - * - insidePlotArea: wether to verifiy the points are inside the plotArea - * Returns: - * - an array of transformed points - */ - function perspective(points, chart, insidePlotArea) { - var options3d = chart.options.chart.options3d, - inverted = false, - origin; - - if (insidePlotArea) { - inverted = chart.inverted; - origin = { - x: chart.plotWidth / 2, - y: chart.plotHeight / 2, - z: options3d.depth / 2, - vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0) - }; - } else { - origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: options3d.depth / 2, - vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0) - }; - } - - var result = [], - xe = origin.x, - ye = origin.y, - ze = origin.z, - vd = origin.vd, - angle1 = deg2rad * (inverted ? options3d.beta : -options3d.beta), - angle2 = deg2rad * (inverted ? -options3d.alpha : options3d.alpha), - s1 = sin(angle1), - c1 = cos(angle1), - s2 = sin(angle2), - c2 = cos(angle2); - - var x, y, z, px, py, pz; - - // Transform each point - each(points, function (point) { - x = (inverted ? point.y : point.x) - xe; - y = (inverted ? point.x : point.y) - ye; - z = (point.z || 0) - ze; - - // Apply 3-D rotation - // Euler Angles (XYZ): cosA = cos(Alfa|Roll), cosB = cos(Beta|Pitch), cosG = cos(Gamma|Yaw) - // - // Composite rotation: - // | cosB * cosG | cosB * sinG | -sinB | - // | sinA * sinB * cosG - cosA * sinG | sinA * sinB * sinG + cosA * cosG | sinA * cosB | - // | cosA * sinB * cosG + sinA * sinG | cosA * sinB * sinG - sinA * cosG | cosA * cosB | - // - // Now, Gamma/Yaw is not used (angle=0), so we assume cosG = 1 and sinG = 0, so we get: - // | cosB | 0 | - sinB | - // | sinA * sinB | cosA | sinA * cosB | - // | cosA * sinB | - sinA | cosA * cosB | - // - // But in browsers, y is reversed, so we get sinA => -sinA. The general result is: - // | cosB | 0 | - sinB | | x | | px | - // | - sinA * sinB | cosA | - sinA * cosB | x | y | = | py | - // | cosA * sinB | sinA | cosA * cosB | | z | | pz | - // - // Result: - px = c1 * x - s1 * z; - py = -s1 * s2 * x + c2 * y - c1 * s2 * z; - pz = s1 * c2 * x + s2 * y + c1 * c2 * z; - - - // Apply perspective - if ((vd > 0) && (vd < Number.POSITIVE_INFINITY)) { - px = px * (vd / (pz + ze + vd)); - py = py * (vd / (pz + ze + vd)); - } - - //Apply translation - px = px + xe; - py = py + ye; - pz = pz + ze; - - result.push({ - x: (inverted ? py : px), - y: (inverted ? px : py), - z: pz - }); - }); - return result; - } - // Make function acessible to plugins - Highcharts.perspective = perspective; - /*** - EXTENSION TO THE SVG-RENDERER TO ENABLE 3D SHAPES - ***/ - ////// HELPER METHODS ////// - - var dFactor = (4 * (Math.sqrt(2) - 1) / 3) / (PI / 2); - - function defined(obj) { - return obj !== undefined && obj !== null; - } - - //Shoelace algorithm -- http://en.wikipedia.org/wiki/Shoelace_formula - function shapeArea(vertexes) { - var area = 0, - i, - j; - for (i = 0; i < vertexes.length; i++) { - j = (i + 1) % vertexes.length; - area += vertexes[i].x * vertexes[j].y - vertexes[j].x * vertexes[i].y; - } - return area / 2; - } - - function averageZ(vertexes) { - var z = 0, - i; - for (i = 0; i < vertexes.length; i++) { - z += vertexes[i].z; - } - return vertexes.length ? z / vertexes.length : 0; - } - - /** Method to construct a curved path - * Can 'wrap' around more then 180 degrees - */ - function curveTo(cx, cy, rx, ry, start, end, dx, dy) { - var result = []; - if ((end > start) && (end - start > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start + (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start + (PI / 2), end, dx, dy)); - } else if ((end < start) && (start - end > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start - (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start - (PI / 2), end, dx, dy)); - } else { - var arcAngle = end - start; - result = [ - 'C', - cx + (rx * cos(start)) - ((rx * dFactor * arcAngle) * sin(start)) + dx, - cy + (ry * sin(start)) + ((ry * dFactor * arcAngle) * cos(start)) + dy, - cx + (rx * cos(end)) + ((rx * dFactor * arcAngle) * sin(end)) + dx, - cy + (ry * sin(end)) - ((ry * dFactor * arcAngle) * cos(end)) + dy, - - cx + (rx * cos(end)) + dx, - cy + (ry * sin(end)) + dy - ]; - } - return result; - } - - Highcharts.SVGRenderer.prototype.toLinePath = function (points, closed) { - var result = []; - - // Put "L x y" for each point - Highcharts.each(points, function (point) { - result.push('L', point.x, point.y); - }); - - if (points.length) { - // Set the first element to M - result[0] = 'M'; - - // If it is a closed line, add Z - if (closed) { - result.push('Z'); - } - } - - return result; - }; - - ////// CUBOIDS ////// - Highcharts.SVGRenderer.prototype.cuboid = function (shapeArgs) { - - var result = this.g(), - paths = this.cuboidPath(shapeArgs); - - // create the 3 sides - result.front = this.path(paths[0]).attr({ zIndex: paths[3], 'stroke-linejoin': 'round' }).add(result); - result.top = this.path(paths[1]).attr({ zIndex: paths[4], 'stroke-linejoin': 'round' }).add(result); - result.side = this.path(paths[2]).attr({ zIndex: paths[5], 'stroke-linejoin': 'round' }).add(result); - - // apply the fill everywhere, the top a bit brighter, the side a bit darker - result.fillSetter = function (color) { - var c0 = color, - c1 = Highcharts.Color(color).brighten(0.1).get(), - c2 = Highcharts.Color(color).brighten(-0.1).get(); - - this.front.attr({ fill: c0 }); - this.top.attr({ fill: c1 }); - this.side.attr({ fill: c2 }); - - this.color = color; - return this; - }; - - // apply opacaity everywhere - result.opacitySetter = function (opacity) { - this.front.attr({ opacity: opacity }); - this.top.attr({ opacity: opacity }); - this.side.attr({ opacity: opacity }); - return this; - }; - - result.attr = function (args) { - if (args.shapeArgs || defined(args.x)) { - var shapeArgs = args.shapeArgs || args; - var paths = this.renderer.cuboidPath(shapeArgs); - this.front.attr({ d: paths[0], zIndex: paths[3] }); - this.top.attr({ d: paths[1], zIndex: paths[4] }); - this.side.attr({ d: paths[2], zIndex: paths[5] }); - } else { - return Highcharts.SVGElement.prototype.attr.call(this, args); // getter returns value - } - - return this; - }; - - result.animate = function (args, duration, complete) { - if (defined(args.x) && defined(args.y)) { - var paths = this.renderer.cuboidPath(args); - this.front.attr({ zIndex: paths[3] }).animate({ d: paths[0] }, duration, complete); - this.top.attr({ zIndex: paths[4] }).animate({ d: paths[1] }, duration, complete); - this.side.attr({ zIndex: paths[5] }).animate({ d: paths[2] }, duration, complete); - this.attr({ - zIndex: -paths[6] // #4774 - }); - } else if (args.opacity) { - this.front.animate(args, duration, complete); - this.top.animate(args, duration, complete); - this.side.animate(args, duration, complete); - } else { - Highcharts.SVGElement.prototype.animate.call(this, args, duration, complete); - } - return this; - }; - - // destroy all children - result.destroy = function () { - this.front.destroy(); - this.top.destroy(); - this.side.destroy(); - - return null; - }; - - // Apply the Z index to the cuboid group - result.attr({ zIndex: -paths[6] }); - - return result; - }; - - /** - * Generates a cuboid - */ - Highcharts.SVGRenderer.prototype.cuboidPath = function (shapeArgs) { - var x = shapeArgs.x, - y = shapeArgs.y, - z = shapeArgs.z, - h = shapeArgs.height, - w = shapeArgs.width, - d = shapeArgs.depth, - chart = Highcharts.charts[this.chartIndex], - map = Highcharts.map; - - // The 8 corners of the cube - var pArr = [ - { x: x, y: y, z: z }, - { x: x + w, y: y, z: z }, - { x: x + w, y: y + h, z: z }, - { x: x, y: y + h, z: z }, - { x: x, y: y + h, z: z + d }, - { x: x + w, y: y + h, z: z + d }, - { x: x + w, y: y, z: z + d }, - { x: x, y: y, z: z + d } - ]; - - // apply perspective - pArr = perspective(pArr, chart, shapeArgs.insidePlotArea); - - // helper method to decide which side is visible - function mapPath(i) { - return pArr[i]; - } - var pickShape = function (path1, path2) { - var ret = []; - path1 = map(path1, mapPath); - path2 = map(path2, mapPath); - if (shapeArea(path1) < 0) { - ret = path1; - } else if (shapeArea(path2) < 0) { - ret = path2; - } - return ret; - }; - - // front or back - var front = [3, 2, 1, 0]; - var back = [7, 6, 5, 4]; - var path1 = pickShape(front, back); - - // top or bottom - var top = [1, 6, 7, 0]; - var bottom = [4, 5, 2, 3]; - var path2 = pickShape(top, bottom); - - // side - var right = [1, 2, 5, 6]; - var left = [0, 7, 4, 3]; - var path3 = pickShape(right, left); - - return [this.toLinePath(path1, true), this.toLinePath(path2, true), this.toLinePath(path3, true), averageZ(path1), averageZ(path2), averageZ(path3), averageZ(map(bottom, mapPath)) * 9e9]; // #4774 - }; - - ////// SECTORS ////// - Highcharts.SVGRenderer.prototype.arc3d = function (attribs) { - - var wrapper = this.g(), - renderer = wrapper.renderer, - customAttribs = ['x', 'y', 'r', 'innerR', 'start', 'end']; - - /** - * Get custom attributes. Mutate the original object and return an object with only custom attr. - */ - function suckOutCustom(params) { - var hasCA = false, - ca = {}; - for (var key in params) { - if (inArray(key, customAttribs) !== -1) { - ca[key] = params[key]; - delete params[key]; - hasCA = true; - } - } - return hasCA ? ca : false; - } - - attribs = merge(attribs); - - attribs.alpha *= deg2rad; - attribs.beta *= deg2rad; - - // Create the different sub sections of the shape - wrapper.top = renderer.path(); - wrapper.side1 = renderer.path(); - wrapper.side2 = renderer.path(); - wrapper.inn = renderer.path(); - wrapper.out = renderer.path(); - - /** - * Add all faces - */ - wrapper.onAdd = function () { - var parent = wrapper.parentGroup; - wrapper.top.add(wrapper); - wrapper.out.add(parent); - wrapper.inn.add(parent); - wrapper.side1.add(parent); - wrapper.side2.add(parent); - }; - - /** - * Compute the transformed paths and set them to the composite shapes - */ - wrapper.setPaths = function (attribs) { - - var paths = wrapper.renderer.arc3dPath(attribs), - zIndex = paths.zTop * 100; - - wrapper.attribs = attribs; - - wrapper.top.attr({ d: paths.top, zIndex: paths.zTop }); - wrapper.inn.attr({ d: paths.inn, zIndex: paths.zInn }); - wrapper.out.attr({ d: paths.out, zIndex: paths.zOut }); - wrapper.side1.attr({ d: paths.side1, zIndex: paths.zSide1 }); - wrapper.side2.attr({ d: paths.side2, zIndex: paths.zSide2 }); - - - // show all children - wrapper.zIndex = zIndex; - wrapper.attr({ zIndex: zIndex }); - - // Set the radial gradient center the first time - if (attribs.center) { - wrapper.top.setRadialReference(attribs.center); - delete attribs.center; - } - }; - wrapper.setPaths(attribs); - - // Apply the fill to the top and a darker shade to the sides - wrapper.fillSetter = function (value) { - var darker = Highcharts.Color(value).brighten(-0.1).get(); - - this.fill = value; - - this.side1.attr({ fill: darker }); - this.side2.attr({ fill: darker }); - this.inn.attr({ fill: darker }); - this.out.attr({ fill: darker }); - this.top.attr({ fill: value }); - return this; - }; - - // Apply the same value to all. These properties cascade down to the children - // when set to the composite arc3d. - each(['opacity', 'translateX', 'translateY', 'visibility'], function (setter) { - wrapper[setter + 'Setter'] = function (value, key) { - wrapper[key] = value; - each(['out', 'inn', 'side1', 'side2', 'top'], function (el) { - wrapper[el].attr(key, value); - }); - }; - }); - - /** - * Override attr to remove shape attributes and use those to set child paths - */ - wrap(wrapper, 'attr', function (proceed, params, val) { - var ca; - if (typeof params === 'object') { - ca = suckOutCustom(params); - if (ca) { - extend(wrapper.attribs, ca); - wrapper.setPaths(wrapper.attribs); - } - } - return proceed.call(this, params, val); - }); - - /** - * Override the animate function by sucking out custom parameters related to the shapes directly, - * and update the shapes from the animation step. - */ - wrap(wrapper, 'animate', function (proceed, params, animation, complete) { - var ca, - from = this.attribs, - to; - - // Attribute-line properties connected to 3D. These shouldn't have been in the - // attribs collection in the first place. - delete params.center; - delete params.z; - delete params.depth; - delete params.alpha; - delete params.beta; - - animation = pick(animation, this.renderer.globalAnimation); - - if (animation) { - if (typeof animation !== 'object') { - animation = {}; - } - - params = merge(params); // Don't mutate the original object - ca = suckOutCustom(params); - - if (ca) { - to = ca; - animation.step = function (a, fx) { - function interpolate(key) { - return from[key] + (pick(to[key], from[key]) - from[key]) * fx.pos; - } - fx.elem.setPaths(merge(from, { - x: interpolate('x'), - y: interpolate('y'), - r: interpolate('r'), - innerR: interpolate('innerR'), - start: interpolate('start'), - end: interpolate('end') - })); - }; - } - } - return proceed.call(this, params, animation, complete); - }); - - // destroy all children - wrapper.destroy = function () { - this.top.destroy(); - this.out.destroy(); - this.inn.destroy(); - this.side1.destroy(); - this.side2.destroy(); - - Highcharts.SVGElement.prototype.destroy.call(this); - }; - // hide all children - wrapper.hide = function () { - this.top.hide(); - this.out.hide(); - this.inn.hide(); - this.side1.hide(); - this.side2.hide(); - }; - wrapper.show = function () { - this.top.show(); - this.out.show(); - this.inn.show(); - this.side1.show(); - this.side2.show(); - }; - return wrapper; - }; - - /** - * Generate the paths required to draw a 3D arc - */ - Highcharts.SVGRenderer.prototype.arc3dPath = function (shapeArgs) { - var cx = shapeArgs.x, // x coordinate of the center - cy = shapeArgs.y, // y coordinate of the center - start = shapeArgs.start, // start angle - end = shapeArgs.end - 0.00001, // end angle - r = shapeArgs.r, // radius - ir = shapeArgs.innerR, // inner radius - d = shapeArgs.depth, // depth - alpha = shapeArgs.alpha, // alpha rotation of the chart - beta = shapeArgs.beta; // beta rotation of the chart - - // Derived Variables - var cs = cos(start), // cosinus of the start angle - ss = sin(start), // sinus of the start angle - ce = cos(end), // cosinus of the end angle - se = sin(end), // sinus of the end angle - rx = r * cos(beta), // x-radius - ry = r * cos(alpha), // y-radius - irx = ir * cos(beta), // x-radius (inner) - iry = ir * cos(alpha), // y-radius (inner) - dx = d * sin(beta), // distance between top and bottom in x - dy = d * sin(alpha); // distance between top and bottom in y - - // TOP - var top = ['M', cx + (rx * cs), cy + (ry * ss)]; - top = top.concat(curveTo(cx, cy, rx, ry, start, end, 0, 0)); - top = top.concat([ - 'L', cx + (irx * ce), cy + (iry * se) - ]); - top = top.concat(curveTo(cx, cy, irx, iry, end, start, 0, 0)); - top = top.concat(['Z']); - // OUTSIDE - var b = (beta > 0 ? PI / 2 : 0), - a = (alpha > 0 ? 0 : PI / 2); - - var start2 = start > -b ? start : (end > -b ? -b : start), - end2 = end < PI - a ? end : (start < PI - a ? PI - a : end), - midEnd = 2 * PI - a; - - // When slice goes over bottom middle, need to add both, left and right outer side. - // Additionally, when we cross right hand edge, create sharp edge. Outer shape/wall: - // - // ------- - // / ^ \ - // 4) / / \ \ 1) - // / / \ \ - // / / \ \ - // (c)=> ==== ==== <=(d) - // \ \ / / - // \ \<=(a)/ / - // \ \ / / <=(b) - // 3) \ v / 2) - // ------- - // - // (a) - inner side - // (b) - outer side - // (c) - left edge (sharp) - // (d) - right edge (sharp) - // 1..n - rendering order for startAngle = 0, when set to e.g 90, order changes clockwise (1->2, 2->3, n->1) and counterclockwise for negative startAngle - - var out = ['M', cx + (rx * cos(start2)), cy + (ry * sin(start2))]; - out = out.concat(curveTo(cx, cy, rx, ry, start2, end2, 0, 0)); - - if (end > midEnd && start < midEnd) { // When shape is wide, it can cross both, (c) and (d) edges, when using startAngle - // Go to outer side - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - // Curve to the right edge of the slice (d) - out = out.concat(curveTo(cx, cy, rx, ry, end2, midEnd, dx, dy)); - // Go to the inner side - out = out.concat([ - 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd)) - ]); - // Curve to the true end of the slice - out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end, 0, 0)); - // Go to the outer side - out = out.concat([ - 'L', cx + (rx * cos(end)) + dx, cy + (ry * sin(end)) + dy - ]); - // Go back to middle (d) - out = out.concat(curveTo(cx, cy, rx, ry, end, midEnd, dx, dy)); - out = out.concat([ - 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd)) - ]); - // Go back to the left edge - out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end2, 0, 0)); - } else if (end > PI - a && start < PI - a) { // But shape can cross also only (c) edge: - // Go to outer side - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - // Curve to the true end of the slice - out = out.concat(curveTo(cx, cy, rx, ry, end2, end, dx, dy)); - // Go to the inner side - out = out.concat([ - 'L', cx + (rx * cos(end)), cy + (ry * sin(end)) - ]); - // Go back to the artifical end2 - out = out.concat(curveTo(cx, cy, rx, ry, end, end2, 0, 0)); - } - - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - out = out.concat(curveTo(cx, cy, rx, ry, end2, start2, dx, dy)); - out = out.concat(['Z']); - - // INSIDE - var inn = ['M', cx + (irx * cs), cy + (iry * ss)]; - inn = inn.concat(curveTo(cx, cy, irx, iry, start, end, 0, 0)); - inn = inn.concat([ - 'L', cx + (irx * cos(end)) + dx, cy + (iry * sin(end)) + dy - ]); - inn = inn.concat(curveTo(cx, cy, irx, iry, end, start, dx, dy)); - inn = inn.concat(['Z']); - - // SIDES - var side1 = [ - 'M', cx + (rx * cs), cy + (ry * ss), - 'L', cx + (rx * cs) + dx, cy + (ry * ss) + dy, - 'L', cx + (irx * cs) + dx, cy + (iry * ss) + dy, - 'L', cx + (irx * cs), cy + (iry * ss), - 'Z' - ]; - var side2 = [ - 'M', cx + (rx * ce), cy + (ry * se), - 'L', cx + (rx * ce) + dx, cy + (ry * se) + dy, - 'L', cx + (irx * ce) + dx, cy + (iry * se) + dy, - 'L', cx + (irx * ce), cy + (iry * se), - 'Z' - ]; - - // correction for changed position of vanishing point caused by alpha and beta rotations - var angleCorr = Math.atan2(dy, -dx), - angleEnd = Math.abs(end + angleCorr), - angleStart = Math.abs(start + angleCorr), - angleMid = Math.abs((start + end) / 2 + angleCorr); - - // set to 0-PI range - function toZeroPIRange(angle) { - angle = angle % (2 * PI); - if (angle > PI) { - angle = 2 * PI - angle; - } - return angle; - } - angleEnd = toZeroPIRange(angleEnd); - angleStart = toZeroPIRange(angleStart); - angleMid = toZeroPIRange(angleMid); - - // *1e5 is to compensate pInt in zIndexSetter - var incPrecision = 1e5, - a1 = angleMid * incPrecision, - a2 = angleStart * incPrecision, - a3 = angleEnd * incPrecision; - - return { - top: top, - zTop: PI * incPrecision + 1, // max angle is PI, so this is allways higher - out: out, - zOut: Math.max(a1, a2, a3), - inn: inn, - zInn: Math.max(a1, a2, a3), - side1: side1, - zSide1: a3 * 0.99, // to keep below zOut and zInn in case of same values - side2: side2, - zSide2: a2 * 0.99 - }; - }; - /*** - EXTENSION FOR 3D CHARTS - ***/ - // Shorthand to check the is3d flag - Highcharts.Chart.prototype.is3d = function () { - return this.options.chart.options3d && this.options.chart.options3d.enabled; // #4280 - }; - - Highcharts.wrap(Highcharts.Chart.prototype, 'isInsidePlot', function (proceed) { - return this.is3d() || proceed.apply(this, [].slice.call(arguments, 1)); - }); - - var defaultChartOptions = Highcharts.getOptions(); - defaultChartOptions.chart.options3d = { - enabled: false, - alpha: 0, - beta: 0, - depth: 100, - viewDistance: 25, - frame: { - bottom: { size: 1, color: 'rgba(255,255,255,0)' }, - side: { size: 1, color: 'rgba(255,255,255,0)' }, - back: { size: 1, color: 'rgba(255,255,255,0)' } - } - }; - - Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed) { - var args = [].slice.call(arguments, 1), - plotOptions, - pieOptions; - - if (args[0].chart && args[0].chart.options3d && args[0].chart.options3d.enabled) { - // Normalize alpha and beta to (-360, 360) range - args[0].chart.options3d.alpha = (args[0].chart.options3d.alpha || 0) % 360; - args[0].chart.options3d.beta = (args[0].chart.options3d.beta || 0) % 360; - - plotOptions = args[0].plotOptions || {}; - pieOptions = plotOptions.pie || {}; - - pieOptions.borderColor = Highcharts.pick(pieOptions.borderColor, undefined); - } - proceed.apply(this, args); - }); - - Highcharts.wrap(Highcharts.Chart.prototype, 'setChartSize', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.is3d()) { - var inverted = this.inverted, - clipBox = this.clipBox, - margin = this.margin, - x = inverted ? 'y' : 'x', - y = inverted ? 'x' : 'y', - w = inverted ? 'height' : 'width', - h = inverted ? 'width' : 'height'; - - clipBox[x] = -(margin[3] || 0); - clipBox[y] = -(margin[0] || 0); - clipBox[w] = this.chartWidth + (margin[3] || 0) + (margin[1] || 0); - clipBox[h] = this.chartHeight + (margin[0] || 0) + (margin[2] || 0); - } - }); - - Highcharts.wrap(Highcharts.Chart.prototype, 'redraw', function (proceed) { - if (this.is3d()) { - // Set to force a redraw of all elements - this.isDirtyBox = true; - } - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - // Draw the series in the reverse order (#3803, #3917) - Highcharts.wrap(Highcharts.Chart.prototype, 'renderSeries', function (proceed) { - var series, - i = this.series.length; - - if (this.is3d()) { - while (i--) { - series = this.series[i]; - series.translate(); - series.render(); - } - } else { - proceed.call(this); - } - }); - - Highcharts.Chart.prototype.retrieveStacks = function (stacking) { - var series = this.series, - stacks = {}, - stackNumber, - i = 1; - - Highcharts.each(this.series, function (s) { - stackNumber = pick(s.options.stack, (stacking ? 0 : series.length - 1 - s.index)); // #3841, #4532 - if (!stacks[stackNumber]) { - stacks[stackNumber] = { series: [s], position: i }; - i++; - } else { - stacks[stackNumber].series.push(s); - } - }); - - stacks.totalStacks = i + 1; - return stacks; - }; - - /*** - EXTENSION TO THE AXIS - ***/ - Highcharts.wrap(Highcharts.Axis.prototype, 'setOptions', function (proceed, userOptions) { - var options; - proceed.call(this, userOptions); - if (this.chart.is3d()) { - options = this.options; - options.tickWidth = Highcharts.pick(options.tickWidth, 0); - options.gridLineWidth = Highcharts.pick(options.gridLineWidth, 1); - } - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var chart = this.chart, - renderer = chart.renderer, - options3d = chart.options.chart.options3d, - frame = options3d.frame, - fbottom = frame.bottom, - fback = frame.back, - fside = frame.side, - depth = options3d.depth, - height = this.height, - width = this.width, - left = this.left, - top = this.top; - - if (this.isZAxis) { - return; - } - if (this.horiz) { - var bottomShape = { - x: left, - y: top + (chart.xAxis[0].opposite ? -fbottom.size : height), - z: 0, - width: width, - height: fbottom.size, - depth: depth, - insidePlotArea: false - }; - if (!this.bottomFrame) { - this.bottomFrame = renderer.cuboid(bottomShape).attr({ - fill: fbottom.color, - zIndex: (chart.yAxis[0].reversed && options3d.alpha > 0 ? 4 : -1) - }) - .css({ - stroke: fbottom.color - }).add(); - } else { - this.bottomFrame.animate(bottomShape); - } - } else { - // BACK - var backShape = { - x: left + (chart.yAxis[0].opposite ? 0 : -fside.size), - y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0), - z: depth, - width: width + fside.size, - height: height + fbottom.size, - depth: fback.size, - insidePlotArea: false - }; - if (!this.backFrame) { - this.backFrame = renderer.cuboid(backShape).attr({ - fill: fback.color, - zIndex: -3 - }).css({ - stroke: fback.color - }).add(); - } else { - this.backFrame.animate(backShape); - } - var sideShape = { - x: left + (chart.yAxis[0].opposite ? width : -fside.size), - y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0), - z: 0, - width: fside.size, - height: height + fbottom.size, - depth: depth, - insidePlotArea: false - }; - if (!this.sideFrame) { - this.sideFrame = renderer.cuboid(sideShape).attr({ - fill: fside.color, - zIndex: -2 - }).css({ - stroke: fside.color - }).add(); - } else { - this.sideFrame.animate(sideShape); - } - } - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getPlotLinePath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return path; - } - - if (path === null) { - return path; - } - - var chart = this.chart, - options3d = chart.options.chart.options3d, - d = this.isZAxis ? chart.plotWidth : options3d.depth, - opposite = this.opposite; - if (this.horiz) { - opposite = !opposite; - } - var pArr = [ - this.swapZ({ x: path[1], y: path[2], z: (opposite ? d : 0) }), - this.swapZ({ x: path[1], y: path[2], z: d }), - this.swapZ({ x: path[4], y: path[5], z: d }), - this.swapZ({ x: path[4], y: path[5], z: (opposite ? 0 : d) }) - ]; - - pArr = perspective(pArr, this.chart, false); - path = this.chart.renderer.toLinePath(pArr, false); - - return path; - }); - - // Do not draw axislines in 3D - Highcharts.wrap(Highcharts.Axis.prototype, 'getLinePath', function (proceed) { - return this.chart.is3d() ? [] : proceed.apply(this, [].slice.call(arguments, 1)); - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getPlotBandPath', function (proceed) { - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return proceed.apply(this, [].slice.call(arguments, 1)); - } - - var args = arguments, - from = args[1], - to = args[2], - toPath = this.getPlotLinePath(to), - path = this.getPlotLinePath(from); - - if (path && toPath) { - path.push( - 'L', - toPath[10], // These two do not exist in the regular getPlotLine - toPath[11], // ---- # 3005 - 'L', - toPath[7], - toPath[8], - 'L', - toPath[4], - toPath[5], - 'L', - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }); - - /*** - EXTENSION TO THE TICKS - ***/ - - Highcharts.wrap(Highcharts.Tick.prototype, 'getMarkPath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return path; - } - - var pArr = [ - this.axis.swapZ({ x: path[1], y: path[2], z: 0 }), - this.axis.swapZ({ x: path[4], y: path[5], z: 0 }) - ]; - - pArr = perspective(pArr, this.axis.chart, false); - path = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[1].x, pArr[1].y - ]; - return path; - }); - - Highcharts.wrap(Highcharts.Tick.prototype, 'getLabelPosition', function (proceed) { - var pos = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return pos; - } - - var newPos = perspective([this.axis.swapZ({ x: pos.x, y: pos.y, z: 0 })], this.axis.chart, false)[0]; - newPos.x = newPos.x - (!this.axis.horiz && this.axis.opposite ? this.axis.transA : 0); //#3788 - newPos.old = pos; - return newPos; - }); - - Highcharts.wrap(Highcharts.Tick.prototype, 'handleOverflow', function (proceed, xy) { - if (this.axis.chart.is3d()) { - xy = xy.old; - } - return proceed.call(this, xy); - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'getTitlePosition', function (proceed) { - var is3d = this.chart.is3d(), - pos, - axisTitleMargin; - - // Pull out the axis title margin, that is not subject to the perspective - if (is3d) { - axisTitleMargin = this.axisTitleMargin; - this.axisTitleMargin = 0; - } - - pos = proceed.apply(this, [].slice.call(arguments, 1)); - - if (is3d) { - pos = perspective([this.swapZ({ x: pos.x, y: pos.y, z: 0 })], this.chart, false)[0]; - - // Re-apply the axis title margin outside the perspective - pos[this.horiz ? 'y' : 'x'] += (this.horiz ? 1 : -1) * // horizontal axis reverses the margin ... - (this.opposite ? -1 : 1) * // ... so does opposite axes - axisTitleMargin; - this.axisTitleMargin = axisTitleMargin; - } - return pos; - }); - - Highcharts.wrap(Highcharts.Axis.prototype, 'drawCrosshair', function (proceed) { - var args = arguments; - if (this.chart.is3d()) { - if (args[2]) { - args[2] = { - plotX: args[2].plotXold || args[2].plotX, - plotY: args[2].plotYold || args[2].plotY - }; - } - } - proceed.apply(this, [].slice.call(args, 1)); - }); - - /*** - Z-AXIS - ***/ - - Highcharts.Axis.prototype.swapZ = function (p, insidePlotArea) { - if (this.isZAxis) { - var plotLeft = insidePlotArea ? 0 : this.chart.plotLeft; - var chart = this.chart; - return { - x: plotLeft + (chart.yAxis[0].opposite ? p.z : chart.xAxis[0].width - p.z), - y: p.y, - z: p.x - plotLeft - }; - } - return p; - }; - - var ZAxis = Highcharts.ZAxis = function () { - this.isZAxis = true; - this.init.apply(this, arguments); - }; - Highcharts.extend(ZAxis.prototype, Highcharts.Axis.prototype); - Highcharts.extend(ZAxis.prototype, { - setOptions: function (userOptions) { - userOptions = Highcharts.merge({ - offset: 0, - lineWidth: 0 - }, userOptions); - Highcharts.Axis.prototype.setOptions.call(this, userOptions); - this.coll = 'zAxis'; - }, - setAxisSize: function () { - Highcharts.Axis.prototype.setAxisSize.call(this); - this.width = this.len = this.chart.options.chart.options3d.depth; - this.right = this.chart.chartWidth - this.width - this.left; - }, - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // Reset properties in case we're redrawing (#3353) - axis.dataMin = axis.dataMax = axis.ignoreMinPadding = axis.ignoreMaxPadding = null; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - Highcharts.each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - zData, - threshold = seriesOptions.threshold; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - zData = series.zData; - if (zData.length) { - axis.dataMin = Math.min(pick(axis.dataMin, zData[0]), Math.min.apply(null, zData)); - axis.dataMax = Math.max(pick(axis.dataMax, zData[0]), Math.max.apply(null, zData)); - } - } - }); - } - }); - - - /** - * Extend the chart getAxes method to also get the color axis - */ - Highcharts.wrap(Highcharts.Chart.prototype, 'getAxes', function (proceed) { - var chart = this, - options = this.options, - zAxisOptions = options.zAxis = Highcharts.splat(options.zAxis || {}); - - proceed.call(this); - - if (!chart.is3d()) { - return; - } - this.zAxis = []; - Highcharts.each(zAxisOptions, function (axisOptions, i) { - axisOptions.index = i; - axisOptions.isX = true; //Z-Axis is shown horizontally, so it's kind of a X-Axis - var zAxis = new ZAxis(chart, axisOptions); - zAxis.setScale(); - }); - }); - /*** - EXTENSION FOR 3D COLUMNS - ***/ - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - seriesOptions = series.options, - depth = seriesOptions.depth || 25; - - var stack = seriesOptions.stacking ? (seriesOptions.stack || 0) : series._i; - var z = stack * (depth + (seriesOptions.groupZPadding || 1)); - - if (seriesOptions.grouping !== false) { - z = 0; - } - - z += (seriesOptions.groupZPadding || 1); - - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - var shapeArgs = point.shapeArgs, - tooltipPos = point.tooltipPos; - - point.shapeType = 'cuboid'; - shapeArgs.z = z; - shapeArgs.depth = depth; - shapeArgs.insidePlotArea = true; - - // Translate the tooltip position in 3d space - tooltipPos = perspective([{ x: tooltipPos[0], y: tooltipPos[1], z: z }], chart, false)[0]; - point.tooltipPos = [tooltipPos.x, tooltipPos.y]; - } - }); - // store for later use #4067 - series.z = z; - }); - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - yAxis = this.yAxis, - series = this, - reversed = this.yAxis.reversed; - - if (Highcharts.svg) { // VML is too slow anyway - if (init) { - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - point.height = point.shapeArgs.height; - point.shapey = point.shapeArgs.y; //#2968 - point.shapeArgs.height = 1; - if (!reversed) { - if (point.stackY) { - point.shapeArgs.y = point.plotY + yAxis.translate(point.stackY); - } else { - point.shapeArgs.y = point.plotY + (point.negative ? -point.height : point.height); - } - } - } - }); - - } else { // run the animation - Highcharts.each(series.data, function (point) { - if (point.y !== null) { - point.shapeArgs.height = point.height; - point.shapeArgs.y = point.shapey; //#2968 - // null value do not have a graphic - if (point.graphic) { - point.graphic.animate(point.shapeArgs, series.options.animation); - } - } - }); - - // redraw datalabels to the correct position - this.drawDataLabels(); - - // delete this function to allow it only once - series.animate = null; - } - } - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'init', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - var seriesOptions = this.options, - grouping = seriesOptions.grouping, - stacking = seriesOptions.stacking, - reversedStacks = pick(this.yAxis.options.reversedStacks, true), - z = 0; - - if (!(grouping !== undefined && !grouping)) { - var stacks = this.chart.retrieveStacks(stacking), - stack = seriesOptions.stack || 0, - i; // position within the stack - for (i = 0; i < stacks[stack].series.length; i++) { - if (stacks[stack].series[i] === this) { - break; - } - } - z = (10 * (stacks.totalStacks - stacks[stack].position)) + (reversedStacks ? i : -i); // #4369 - - // In case when axis is reversed, columns are also reversed inside the group (#3737) - if (!this.xAxis.reversed) { - z = (stacks.totalStacks * 10) - z; - } - } - - seriesOptions.zIndex = z; - } - }); - function draw3DPoints(proceed) { - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - var grouping = this.chart.options.plotOptions.column.grouping; - if (grouping !== undefined && !grouping && this.group.zIndex !== undefined && !this.zIndexSet) { - this.group.attr({ zIndex: this.group.zIndex * 10 }); - this.zIndexSet = true; // #4062 set zindex only once - } - - var options = this.options, - states = this.options.states; - - this.borderWidth = options.borderWidth = defined(options.edgeWidth) ? options.edgeWidth : 1; //#4055 - - Highcharts.each(this.data, function (point) { - if (point.y !== null) { - var pointAttr = point.pointAttr; - - // Set the border color to the fill color to provide a smooth edge - this.borderColor = Highcharts.pick(options.edgeColor, pointAttr[''].fill); - - pointAttr[''].stroke = this.borderColor; - pointAttr.hover.stroke = Highcharts.pick(states.hover.edgeColor, this.borderColor); - pointAttr.select.stroke = Highcharts.pick(states.select.edgeColor, this.borderColor); - } - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - } - - Highcharts.wrap(Highcharts.Series.prototype, 'alignDataLabel', function (proceed) { - - // Only do this for 3D columns and columnranges - if (this.chart.is3d() && (this.type === 'column' || this.type === 'columnrange')) { - var series = this, - chart = series.chart; - - var args = arguments, - alignTo = args[4]; - - var pos = ({ x: alignTo.x, y: alignTo.y, z: series.z }); - pos = perspective([pos], chart, true)[0]; - alignTo.x = pos.x; - alignTo.y = pos.y; - } - - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - if (Highcharts.seriesTypes.columnrange) { - Highcharts.wrap(Highcharts.seriesTypes.columnrange.prototype, 'drawPoints', draw3DPoints); - } - - Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'drawPoints', draw3DPoints); - - /*** - EXTENSION FOR 3D CYLINDRICAL COLUMNS - Not supported - ***/ - /* - var defaultOptions = Highcharts.getOptions(); - defaultOptions.plotOptions.cylinder = Highcharts.merge(defaultOptions.plotOptions.column); - var CylinderSeries = Highcharts.extendClass(Highcharts.seriesTypes.column, { - type: 'cylinder' - }); - Highcharts.seriesTypes.cylinder = CylinderSeries; - - Highcharts.wrap(Highcharts.seriesTypes.cylinder.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - cylOptions = options.plotOptions.cylinder, - options3d = options.chart.options3d, - depth = cylOptions.depth || 0, - alpha = options3d.alpha; - - var z = cylOptions.stacking ? (this.options.stack || 0) * depth : series._i * depth; - z += depth / 2; - - if (cylOptions.grouping !== false) { z = 0; } - - Highcharts.each(series.data, function (point) { - var shapeArgs = point.shapeArgs; - point.shapeType = 'arc3d'; - shapeArgs.x += depth / 2; - shapeArgs.z = z; - shapeArgs.start = 0; - shapeArgs.end = 2 * PI; - shapeArgs.r = depth * 0.95; - shapeArgs.innerR = 0; - shapeArgs.depth = shapeArgs.height * (1 / sin((90 - alpha) * deg2rad)) - z; - shapeArgs.alpha = 90 - alpha; - shapeArgs.beta = 0; - }); - }); - */ - /*** - EXTENSION FOR 3D PIES - ***/ - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - seriesOptions = series.options, - depth = seriesOptions.depth || 0, - options3d = options.chart.options3d, - alpha = options3d.alpha, - beta = options3d.beta, - z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth; - - z += depth / 2; - - if (seriesOptions.grouping !== false) { - z = 0; - } - - each(series.data, function (point) { - - var shapeArgs = point.shapeArgs, - angle; - - point.shapeType = 'arc3d'; - - shapeArgs.z = z; - shapeArgs.depth = depth * 0.75; - shapeArgs.alpha = alpha; - shapeArgs.beta = beta; - shapeArgs.center = series.center; - - angle = (shapeArgs.end + shapeArgs.start) / 2; - - point.slicedTranslation = { - translateX: round(cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)), - translateY: round(sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)) - }; - }); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype.pointClass.prototype, 'haloPath', function (proceed) { - var args = arguments; - return this.series.chart.is3d() ? [] : proceed.call(this, args[1]); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawPoints', function (proceed) { - - var options = this.options, - states = options.states; - - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - // Set the border color to the fill color to provide a smooth edge - this.borderWidth = options.borderWidth = options.edgeWidth || 1; - this.borderColor = options.edgeColor = Highcharts.pick(options.edgeColor, options.borderColor, undefined); - - states.hover.borderColor = Highcharts.pick(states.hover.edgeColor, this.borderColor); - states.hover.borderWidth = Highcharts.pick(states.hover.edgeWidth, this.borderWidth); - states.select.borderColor = Highcharts.pick(states.select.edgeColor, this.borderColor); - states.select.borderWidth = Highcharts.pick(states.select.edgeWidth, this.borderWidth); - - each(this.data, function (point) { - var pointAttr = point.pointAttr; - pointAttr[''].stroke = point.series.borderColor || point.color; - pointAttr['']['stroke-width'] = point.series.borderWidth; - pointAttr.hover.stroke = states.hover.borderColor; - pointAttr.hover['stroke-width'] = states.hover.borderWidth; - pointAttr.select.stroke = states.select.borderColor; - pointAttr.select['stroke-width'] = states.select.borderWidth; - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - each(this.points, function (point) { - var graphic = point.graphic; - - // #4584 Check if has graphic - null points don't have it - if (graphic) { - // Hide null or 0 points (#3006, 3650) - graphic[point.y ? 'show' : 'hide'](); - } - }); - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawDataLabels', function (proceed) { - if (this.chart.is3d()) { - var series = this, - chart = series.chart, - options3d = chart.options.chart.options3d; - each(series.data, function (point) { - var shapeArgs = point.shapeArgs, - r = shapeArgs.r, - a1 = (shapeArgs.alpha || options3d.alpha) * deg2rad, //#3240 issue with datalabels for 0 and null values - b1 = (shapeArgs.beta || options3d.beta) * deg2rad, - a2 = (shapeArgs.start + shapeArgs.end) / 2, - labelPos = point.labelPos, - labelIndexes = [0, 2, 4], // [x1, y1, x2, y2, x3, y3] - yOffset = (-r * (1 - cos(a1)) * sin(a2)), // + (sin(a2) > 0 ? sin(a1) * d : 0) - xOffset = r * (cos(b1) - 1) * cos(a2); - - // Apply perspective on label positions - each(labelIndexes, function (index) { - labelPos[index] += xOffset; - labelPos[index + 1] += yOffset; - }); - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'addPoint', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - if (this.chart.is3d()) { - // destroy (and rebuild) everything!!! - this.update(this.userOptions, true); // #3845 pass the old options - } - }); - - Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - animation = this.options.animation, - attribs, - center = this.center, - group = this.group, - markerGroup = this.markerGroup; - - if (Highcharts.svg) { // VML is too slow anyway - - if (animation === true) { - animation = {}; - } - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - group.oldtranslateX = group.translateX; - group.oldtranslateY = group.translateY; - attribs = { - translateX: center[0], - translateY: center[1], - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: group.oldtranslateX, - translateY: group.oldtranslateY, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - - } - } - }); - /*** - EXTENSION FOR 3D SCATTER CHART - ***/ - - Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'translate', function (proceed) { - //function translate3d(proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - zAxis = Highcharts.pick(series.zAxis, chart.options.zAxis[0]), - rawPoints = [], - rawPoint, - projectedPoints, - projectedPoint, - zValue, - i; - - for (i = 0; i < series.data.length; i++) { - rawPoint = series.data[i]; - zValue = zAxis.isLog && zAxis.val2lin ? zAxis.val2lin(rawPoint.z) : rawPoint.z; // #4562 - rawPoint.plotZ = zAxis.translate(zValue); - - rawPoint.isInside = rawPoint.isInside ? (zValue >= zAxis.min && zValue <= zAxis.max) : false; - - rawPoints.push({ - x: rawPoint.plotX, - y: rawPoint.plotY, - z: rawPoint.plotZ - }); - } - - projectedPoints = perspective(rawPoints, chart, true); - - for (i = 0; i < series.data.length; i++) { - rawPoint = series.data[i]; - projectedPoint = projectedPoints[i]; - - rawPoint.plotXold = rawPoint.plotX; - rawPoint.plotYold = rawPoint.plotY; - - rawPoint.plotX = projectedPoint.x; - rawPoint.plotY = projectedPoint.y; - rawPoint.plotZ = projectedPoint.z; - - - } - - }); - - Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'init', function (proceed, chart, options) { - if (chart.is3d()) { - // add a third coordinate - this.axisTypes = ['xAxis', 'yAxis', 'zAxis']; - this.pointArrayMap = ['x', 'y', 'z']; - this.parallelArrays = ['x', 'y', 'z']; - } - - var result = proceed.apply(this, [chart, options]); - - if (this.chart.is3d()) { - // Set a new default tooltip formatter - var default3dScatterTooltip = 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>'; - if (this.userOptions.tooltip) { - this.tooltipOptions.pointFormat = this.userOptions.tooltip.pointFormat || default3dScatterTooltip; - } else { - this.tooltipOptions.pointFormat = default3dScatterTooltip; - } - } - return result; - }); - /** - * Extension to the VML Renderer - */ - if (Highcharts.VMLRenderer) { - - Highcharts.setOptions({ animate: false }); - - Highcharts.VMLRenderer.prototype.cuboid = Highcharts.SVGRenderer.prototype.cuboid; - Highcharts.VMLRenderer.prototype.cuboidPath = Highcharts.SVGRenderer.prototype.cuboidPath; - - Highcharts.VMLRenderer.prototype.toLinePath = Highcharts.SVGRenderer.prototype.toLinePath; - - Highcharts.VMLRenderer.prototype.createElement3D = Highcharts.SVGRenderer.prototype.createElement3D; - - Highcharts.VMLRenderer.prototype.arc3d = function (shapeArgs) { - var result = Highcharts.SVGRenderer.prototype.arc3d.call(this, shapeArgs); - result.css({ zIndex: result.zIndex }); - return result; - }; - - Highcharts.VMLRenderer.prototype.arc3dPath = Highcharts.SVGRenderer.prototype.arc3dPath; - - Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - // VML doesn't support a negative z-index - if (this.sideFrame) { - this.sideFrame.css({ zIndex: 0 }); - this.sideFrame.front.attr({ fill: this.sideFrame.color }); - } - if (this.bottomFrame) { - this.bottomFrame.css({ zIndex: 1 }); - this.bottomFrame.front.attr({ fill: this.bottomFrame.color }); - } - if (this.backFrame) { - this.backFrame.css({ zIndex: 0 }); - this.backFrame.front.attr({ fill: this.backFrame.color }); - } - }); - - } - -})); diff --git a/platforms/browser/www/lib/highcharts/highcharts-more.js b/platforms/browser/www/lib/highcharts/highcharts-more.js deleted file mode 100644 index b9438d63..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts-more.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(n){typeof module==="object"&&module.exports?module.exports=n:n(Highcharts)})(function(n){function K(a,b,c){this.init(a,b,c)}var P=n.arrayMin,Q=n.arrayMax,s=n.each,H=n.extend,t=n.merge,R=n.map,o=n.pick,A=n.pInt,p=n.getOptions().plotOptions,i=n.seriesTypes,u=n.extendClass,L=n.splat,r=n.wrap,M=n.Axis,z=n.Tick,I=n.Point,S=n.Pointer,T=n.CenteredSeriesMixin,B=n.TrackerMixin,w=n.Series,y=Math,E=y.round,C=y.floor,N=y.max,U=n.Color,v=function(){};H(K.prototype,{init:function(a,b,c){var f=this,e= -f.defaultOptions;f.chart=b;f.options=a=t(e,b.angular?{background:{}}:void 0,a);(a=a.background)&&s([].concat(L(a)).reverse(),function(a){var b=a.backgroundColor,j=c.userOptions,a=t(f.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a);j.plotBands=j.plotBands||[];j.plotBands!==c.options.plotBands&&j.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver", -backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:-Number.MAX_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}});var G=M.prototype,z=z.prototype,V={getOffset:v,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:v,setCategories:v,setTitle:v},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1, -tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15,x:0,y:null},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){a=this.options=t(this.defaultOptions,this.defaultRadialOptions,a);if(!a.plotBands)a.plotBands=[]},getOffset:function(){G.getOffset.call(this); -this.chart.axisOffset[this.side]=0;this.center=this.pane.center=T.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center,b=o(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min|| -1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset:0},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial){this.center=this.pane.center=n.CenteredSeriesMixin.getCenter.call(this.pane);if(this.isCircular)this.sector=this.endAngleRad-this.startAngleRad;this.len=this.width=this.height=this.center[2]*o(this.sector,1)/2}},getPosition:function(a, -b){return this.postTranslate(this.isCircular?this.translate(a):0,o(this.isCircular?b:this.translate(a),this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart,f=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+f[0]+Math.cos(a)*b,y:c.plotTop+f[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var f=this.center,e=this.startAngleRad,d=f[2]/2,h=[o(c.outerRadius,"100%"),c.innerRadius,o(c.thickness,10)],j=/%$/,m,g=this.isCircular;this.options.gridLineInterpolation==="polygon"? -f=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(a=Math.max(a,this.min),b=Math.min(b,this.max),g||(h[0]=this.translate(a),h[1]=this.translate(b)),h=R(h,function(a){j.test(a)&&(a=A(a,10)*d/100);return a}),c.shape==="circle"||!g?(a=-Math.PI/2,b=Math.PI*1.5,m=!0):(a=e+this.translate(a),b=e+this.translate(b)),f=this.chart.renderer.symbols.arc(this.left+f[0],this.top+f[1],h[0],h[0],{start:Math.min(a,b),end:Math.max(a,b),innerR:o(h[1],h[0]-h[2]),open:m}));return f},getPlotLinePath:function(a, -b){var c=this,f=c.center,e=c.chart,d=c.getPosition(a),h,j,m;c.isCircular?m=["M",f[0]+e.plotLeft,f[1]+e.plotTop,"L",d.x,d.y]:c.options.gridLineInterpolation==="circle"?(a=c.translate(a))&&(m=c.getLinePath(0,a)):(s(e.xAxis,function(a){a.pane===c.pane&&(h=a)}),m=[],a=c.translate(a),f=h.tickPositions,h.autoConnect&&(f=f.concat([f[0]])),b&&(f=[].concat(f).reverse()),s(f,function(d,b){j=h.getPosition(d,a);m.push(b?"L":"M",j.x,j.y)}));return m},getTitlePosition:function(){var a=this.center,b=this.chart, -c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};r(G,"init",function(a,b,c){var k;var f=b.angular,e=b.polar,d=c.isX,h=f&&d,j,m;m=b.options;var g=c.pane||0;if(f){if(H(this,h?V:O),j=!d)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)H(this,O),this.defaultRadialOptions=(j=d)?this.defaultRadialXOptions:t(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!h&&(f||e)){a=this.options;if(!b.panes)b.panes= -[];this.pane=(k=b.panes[g]=b.panes[g]||new K(L(m.pane)[g],b,this),g=k);g=g.options;b.inverted=!1;m.chart.zoomType=null;this.startAngleRad=b=(g.startAngle-90)*Math.PI/180;this.endAngleRad=m=(o(g.endAngle,g.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=j)&&c.max===void 0&&m-b===2*Math.PI)this.autoConnect=!0}});r(z,"getPosition",function(a,b,c,f,e){var d=this.axis;return d.getPosition?d.getPosition(c):a.call(this,b,c,f,e)});r(z,"getLabelPosition",function(a,b,c,f,e,d,h, -j,m){var g=this.axis,l=d.y,k=20,i=d.align,x=(g.translate(this.pos)+g.startAngleRad+Math.PI/2)/Math.PI*180%360;g.isRadial?(a=g.getPosition(this.pos,g.center[2]/2+o(d.distance,-25)),d.rotation==="auto"?f.attr({rotation:x}):l===null&&(l=g.chart.renderer.fontMetrics(f.styles.fontSize).b-f.getBBox().height/2),i===null&&(g.isCircular?(this.label.getBBox().width>g.len*g.tickInterval/(g.max-g.min)&&(k=0),i=x>k&&x<180-k?"left":x>180+k&&x<360-k?"right":"center"):i="center",f.attr({align:i})),a.x+=d.x,a.y+= -l):a=a.call(this,b,c,f,e,d,h,j,m);return a});r(z,"getMarkPath",function(a,b,c,f,e,d,h){var j=this.axis;j.isRadial?(a=j.getPosition(this.pos,j.center[2]/2+f),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,f,e,d,h);return b});p.arearange=t(p.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">\u25cf</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},trackByArea:!0,dataLabels:{align:null,verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}, -states:{hover:{halo:!1}}});i.arearange=u(i.area,{type:"arearange",pointArrayMap:["low","high"],dataLabelCollections:["dataLabel","dataLabelUpper"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",deferTranslatePolar:!0,highToXY:function(a){var b=this.chart,c=this.xAxis.postTranslate(a.rectPlotX,this.yAxis.len-a.plotHigh);a.plotHighX=c.x-b.plotLeft;a.plotHigh=c.y-b.plotTop},getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y= -null;else if(b.low===null&&b.high!==null)b.y=b.high});w.prototype.getSegments.call(this)},translate:function(){var a=this,b=a.yAxis;i.area.prototype.translate.apply(a);s(a.points,function(a){var f=a.low,e=a.high,d=a.plotY;e===null&&f===null?a.y=null:f===null?(a.plotLow=a.plotY=null,a.plotHigh=b.translate(e,0,1,0,1)):e===null?(a.plotLow=d,a.plotHigh=null):(a.plotLow=d,a.plotHigh=b.translate(e,0,1,0,1))});this.chart.polar&&s(this.points,function(b){a.highToXY(b)})},getSegmentPath:function(a){var b, -c=[],f=a.length,e=w.prototype.getSegmentPath,d,h;h=this.options;var j=h.step;for(b=n.grep(a,function(a){return a.plotLow!==null});f--;)d=a[f],d.plotHigh!==null&&c.push({plotX:d.plotHighX||d.plotX,plotY:d.plotHigh});a=e.call(this,b);if(j)j===!0&&(j="left"),h.step={left:"right",center:"center",right:"left"}[j];c=e.call(this,c);h.step=j;h=[].concat(a,c);this.chart.polar||(c[0]="L");this.areaPath=this.areaPath.concat(a,c);return h},drawDataLabels:function(){var a=this.data,b=a.length,c,f=[],e=w.prototype, -d=this.options.dataLabels,h=d.align,j=d.verticalAlign,m=d.inside,g,l,k=this.chart.inverted;if(d.enabled||this._hasPointLabels){for(c=b;c--;)if(g=a[c]){l=m?g.plotHigh<g.plotLow:g.plotHigh>g.plotLow;g.y=g.high;g._plotY=g.plotY;g.plotY=g.plotHigh;f[c]=g.dataLabel;g.dataLabel=g.dataLabelUpper;g.below=l;if(k){if(!h)d.align=l?"right":"left"}else if(!j)d.verticalAlign=l?"top":"bottom";d.x=d.xHigh;d.y=d.yHigh}e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(c=b;c--;)if(g=a[c]){l=m?g.plotHigh< -g.plotLow:g.plotHigh>g.plotLow;g.dataLabelUpper=g.dataLabel;g.dataLabel=f[c];g.y=g.low;g.plotY=g._plotY;g.below=!l;if(k){if(!h)d.align=l?"left":"right"}else if(!j)d.verticalAlign=l?"bottom":"top";d.x=d.xLow;d.y=d.yLow}e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}d.align=h;d.verticalAlign=j},alignDataLabel:function(){i.column.prototype.alignDataLabel.apply(this,arguments)},setStackedPoints:v,getSymbol:v,drawPoints:v});p.areasplinerange=t(p.arearange);i.areasplinerange=u(i.arearange,{type:"areasplinerange", -getPointSpline:i.spline.prototype.getPointSpline});(function(){var a=i.column.prototype;p.columnrange=t(p.column,p.arearange,{lineWidth:1,pointRange:null});i.columnrange=u(i.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,f=b.xAxis,e=b.chart,d;a.translate.apply(b);s(b.points,function(a){var j=a.shapeArgs,m=b.options.minPointLength,g,l;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;l=d;g=a.plotY-d;Math.abs(g)<m?(m-=g,g+=m,l-=m/2):g<0&&(g*=-1,l-=g);j.height=g;j.y= -l;a.tooltipPos=e.inverted?[c.len+c.pos-e.plotLeft-l-g/2,f.len+f.pos-e.plotTop-j.x-j.width/2,g]:[f.left-e.plotLeft+j.x+j.width/2,c.pos-e.plotTop+l+g/2,g]})},directTouch:!0,trackerGroups:["group","dataLabelsGroup"],drawGraph:v,crispCol:a.crispCol,pointAttrToOptions:a.pointAttrToOptions,drawPoints:a.drawPoints,drawTracker:a.drawTracker,animate:a.animate,getColumnMetrics:a.getColumnMetrics})})();p.gauge=t(p.line,{dataLabels:{enabled:!0,defer:!1,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,crop:!1, -verticalAlign:"top",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1});B={type:"gauge",pointClass:u(I,{setState:function(a){this.state=a}}),angular:!0,drawGraph:v,fixedBox:!0,forceDL:!0,trackerGroups:["group","dataLabelsGroup"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(f){var e=t(b.dial,f.dial),d=A(o(e.radius,80))*c[2]/200,h=A(o(e.baseLength,70))*d/100,j=A(o(e.rearLength,10))*d/100,m=e.baseWidth||3,g=e.topWidth|| -1,l=b.overshoot,k=a.startAngleRad+a.translate(f.y,null,null,null,!0);l&&typeof l==="number"?(l=l/180*Math.PI,k=Math.max(a.startAngleRad-l,Math.min(a.endAngleRad+l,k))):b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;f.shapeType="path";f.shapeArgs={d:e.path||["M",-j,-m/2,"L",h,-m/2,d,-g/2,d,g/2,h,m/2,-j,m/2,"z"],translateX:c[0],translateY:c[1],rotation:k};f.plotX=c[0];f.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,f=a.options,e=f.pivot, -d=a.chart.renderer;s(a.points,function(b){var c=b.graphic,e=b.shapeArgs,g=e.d,l=t(f.dial,b.dial);c?(c.animate(e),e.d=g):b.graphic=d[b.shapeType](e).attr({stroke:l.borderColor||"none","stroke-width":l.borderWidth||0,fill:l.backgroundColor||"black",rotation:e.rotation,zIndex:1}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=d.circle(0,0,o(e.radius,5)).attr({"stroke-width":e.borderWidth||0,stroke:e.borderColor||"silver",fill:e.backgroundColor||"black",zIndex:2}).translate(b[0], -b[1]).add(a.group)},animate:function(a){var b=this;if(!a)s(b.points,function(a){var f=a.graphic;f&&(f.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),f.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);w.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(a,b){w.prototype.setData.call(this,a,!1);this.processData(); -this.generatePoints();o(b,!0)&&this.chart.redraw()},drawTracker:B&&B.drawTrackerPoint};i.gauge=u(i.line,B);p.boxplot=t(p.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{point.color}">\u25cf</span> <b> {series.name}</b><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",whiskerWidth:2});i.boxplot= -u(i.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:v,translate:function(){var a=this.yAxis,b=this.pointArrayMap;i.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer, -f,e,d,h,j,m,g,l,k,i,x,n,J,p,t,r,v,u,w,y,B,A,z=a.doQuartiles!==!1,F,D=a.options.whiskerLength;s(a.points,function(q){k=q.graphic;B=q.shapeArgs;x={};p={};r={};A=q.color||a.color;if(q.plotY!==void 0)if(f=q.pointAttr[q.selected?"selected":""],v=B.width,u=C(B.x),w=u+v,y=E(v/2),e=C(z?q.q1Plot:q.lowPlot),d=C(z?q.q3Plot:q.lowPlot),h=C(q.highPlot),j=C(q.lowPlot),x.stroke=q.stemColor||b.stemColor||A,x["stroke-width"]=o(q.stemWidth,b.stemWidth,b.lineWidth),x.dashstyle=q.stemDashStyle||b.stemDashStyle,p.stroke= -q.whiskerColor||b.whiskerColor||A,p["stroke-width"]=o(q.whiskerWidth,b.whiskerWidth,b.lineWidth),r.stroke=q.medianColor||b.medianColor||A,r["stroke-width"]=o(q.medianWidth,b.medianWidth,b.lineWidth),g=x["stroke-width"]%2/2,l=u+y+g,i=["M",l,d,"L",l,h,"M",l,e,"L",l,j],z&&(g=f["stroke-width"]%2/2,l=C(l)+g,e=C(e)+g,d=C(d)+g,u+=g,w+=g,n=["M",u,d,"L",u,e,"L",w,e,"L",w,d,"L",u,d,"z"]),D&&(g=p["stroke-width"]%2/2,h+=g,j+=g,F=/%$/.test(D)?y*parseFloat(D)/100:D/2,J=["M",l-F,h,"L",l+F,h,"M",l-F,j,"L",l+F,j]), -g=r["stroke-width"]%2/2,m=E(q.medianPlot)+g,t=["M",u,m,"L",w,m],k)q.stem.animate({d:i}),D&&q.whiskers.animate({d:J}),z&&q.box.animate({d:n}),q.medianShape.animate({d:t});else{q.graphic=k=c.g().add(a.group);q.stem=c.path(i).attr(x).add(k);if(D)q.whiskers=c.path(J).attr(p).add(k);if(z)q.box=c.path(n).attr(f).add(k);q.medianShape=c.path(t).attr(r).add(k)}})},setStackedPoints:v});p.errorbar=t(p.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -whiskerWidth:null});i.errorbar=u(i.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:i.arearange?i.arearange.prototype.drawDataLabels:v,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||i.column.prototype.getColumnMetrics.call(this)}});p.waterfall=t(p.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333",dataLabels:{inside:!0},states:{hover:{lineWidthPlus:0}}}); -i.waterfall=u(i.column,{type:"waterfall",upColorProp:"fill",pointValKey:"y",translate:function(){var a=this.options,b=this.yAxis,c,f,e,d,h,j,m,g,l,k=o(a.minPointLength,5),n=a.threshold,x=a.stacking;i.column.prototype.translate.apply(this);this.minPointLengthOffset=0;m=g=n;f=this.points;for(c=0,a=f.length;c<a;c++){e=f[c];j=this.processedYData[c];d=e.shapeArgs;l=(h=x&&b.stacks[(this.negStacks&&j<n?"-":"")+this.stackKey])?h[e.x].points[this.index+","+c]:[0,j];if(e.isSum)e.y=j;else if(e.isIntermediateSum)e.y= -j-g;h=N(m,m+e.y)+l[0];d.y=b.translate(h,0,1);if(e.isSum)d.y=b.translate(l[1],0,1),d.height=Math.min(b.translate(l[0],0,1),b.len)-d.y+this.minPointLengthOffset;else if(e.isIntermediateSum)d.y=b.translate(l[1],0,1),d.height=Math.min(b.translate(g,0,1),b.len)-d.y+this.minPointLengthOffset,g=l[1];else{if(m!==0)d.height=j>0?b.translate(m,0,1)-d.y:b.translate(m,0,1)-b.translate(m-j,0,1);m+=j}d.height<0&&(d.y+=d.height,d.height*=-1);e.plotY=d.y=E(d.y)-this.borderWidth%2/2;d.height=N(E(d.height),0.001);e.yBottom= -d.y+d.height;if(d.height<=k)d.height=k,this.minPointLengthOffset+=k;d.y-=this.minPointLengthOffset;d=e.plotY+(e.negative?d.height:0)-this.minPointLengthOffset;this.chart.inverted?e.tooltipPos[0]=b.len-d:e.tooltipPos[1]=d}},processData:function(a){var b=this.yData,c=this.options.data,f,e=b.length,d,h,j,m,g,l;h=d=j=m=this.options.threshold||0;for(l=0;l<e;l++)g=b[l],f=c&&c[l]?c[l]:{},g==="sum"||f.isSum?b[l]=h:g==="intermediateSum"||f.isIntermediateSum?b[l]=d:(h+=g,d+=g),j=Math.min(h,j),m=Math.max(h, -m);w.prototype.processData.call(this,a);this.dataMin=j;this.dataMax=m},toYData:function(a){return a.isSum?a.x===0?null:"sum":a.isIntermediateSum?a.x===0?null:"intermediateSum":a.y},getAttribs:function(){i.column.prototype.getAttribs.apply(this,arguments);var a=this,b=a.options,c=b.states,f=b.upColor||a.color,b=n.Color(f).brighten(0.1).get(),e=t(a.pointAttr),d=a.upColorProp;e[""][d]=f;e.hover[d]=c.hover.upColor||b;e.select[d]=c.select.upColor||f;s(a.points,function(d){if(!d.options.color)d.y>0?(d.pointAttr= -e,d.color=f):d.pointAttr=a.pointAttr})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.borderWidth)%2/2,f=[],e,d,h;for(h=1;h<b;h++)d=a[h].shapeArgs,e=a[h-1].shapeArgs,d=["M",e.x+e.width,e.y+c,"L",d.x,e.y+c],a[h-1].y<0&&(d[2]+=e.height,d[5]+=e.height),f=f.concat(d);return f},getExtremes:v,drawGraph:w.prototype.drawGraph});p.polygon=t(p.scatter,{marker:{enabled:!1}});i.polygon=u(i.scatter,{type:"polygon",fillGraph:!0,getSegmentPath:function(a){return w.prototype.getSegmentPath.call(this, -a).concat("z")},drawGraph:w.prototype.drawGraph,drawLegendSymbol:n.LegendSymbolMixin.drawRectangle});p.bubble=t(p.scatter,{dataLabels:{formatter:function(){return this.point.z},inside:!0,verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"});B=u(I,{haloPath:function(){return I.prototype.haloPath.call(this,this.shapeArgs.r+ -this.series.options.states.hover.halo.size)},ttBelow:!1});i.bubble=u(i.scatter,{type:"bubble",pointClass:B,pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],bubblePadding:!0,zoneAxis:"z",pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=o(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=U(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a= -w.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,f){var e,d,h,j=this.zData,m=[],g=this.options,l=g.sizeBy!=="width",k=g.zThreshold,i=b-a;for(d=0,e=j.length;d<e;d++)h=j[d],g.sizeByAbsoluteValue&&h!==null&&(h=Math.abs(h-k),b=Math.max(b-k,Math.abs(a-k)),a=0),h===null?h=null:h<a?h=c/2-1:(h=i>0?(h-a)/i:0.5,l&&h>=0&&(h=Math.sqrt(h)),h=y.ceil(c+h*(f-c))/2),m.push(h);this.radii=m},animate:function(a){var b=this.options.animation;if(!a)s(this.points, -function(a){var f=a.graphic,a=a.shapeArgs;f&&a&&(f.attr("r",1),f.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,f,e=this.radii;i.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],f=e?e[a]:0,typeof f==="number"&&f>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:f},c.dlBox={x:c.plotX-f,y:c.plotY-f,width:2*f,height:2*f}):c.shapeArgs=c.plotY=c.dlBox=void 0},drawLegendSymbol:function(a,b){var c=this.chart.renderer,f=c.fontMetrics(a.itemStyle.fontSize).f/ -2;b.legendSymbol=c.circle(f,a.baseline-f,f).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:i.column.prototype.drawPoints,alignDataLabel:i.column.prototype.alignDataLabel,buildKDTree:v,applyZones:v});M.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,f=0,e=b,d=this.isXAxis,h=d?"xData":"yData",j=this.min,m={},g=y.min(c.plotWidth,c.plotHeight),l=Number.MAX_VALUE,k=-Number.MAX_VALUE,i=this.max-j,n=b/i,p=[];s(this.series,function(b){var h=b.options;if(b.bubblePadding&& -(b.visible||!c.options.chart.ignoreHiddenSeries))if(a.allowZoomOutside=!0,p.push(b),d)s(["minSize","maxSize"],function(a){var d=h[a],b=/%$/.test(d),d=A(d);m[a]=b?g*d/100:d}),b.minPxSize=m.minSize,b.maxPxSize=m.maxSize,b=b.zData,b.length&&(l=o(h.zMin,y.min(l,y.max(P(b),h.displayNegative===!1?h.zThreshold:-Number.MAX_VALUE))),k=o(h.zMax,y.max(k,Q(b))))});s(p,function(a){var b=a[h],c=b.length,g;d&&a.getRadii(l,k,a.minPxSize,a.maxPxSize);if(i>0)for(;c--;)typeof b[c]==="number"&&(g=a.radii[c],f=Math.min((b[c]- -j)*n-g,f),e=Math.max((b[c]-j)*n+g,e))});p.length&&i>0&&!this.isLog&&(e-=b,n*=(b+f-e)/b,s([["min","userMin",f],["max","userMax",e]],function(d){o(a.options[d[0]],a[d[1]])===void 0&&(a[d[0]]+=d[2]/n)}))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var d=this.xAxis.center;a.push("L",d[0],d[1])},this.closedStacks=!0}function b(a,b){var c=this.chart,f=this.options.animation,g=this.group,e=this.markerGroup,k=this.xAxis.center,i=c.plotLeft,n=c.plotTop; -if(c.polar){if(c.renderer.isSVG)f===!0&&(f={}),b?(c={translateX:k[0]+i,translateY:k[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),e&&e.attr(c)):(c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,f),e&&e.animate(c,f),this.animate=null)}else a.call(this,b)}var c=w.prototype,f=S.prototype,e;c.searchPointByAngle=function(a){var b=this.chart,c=this.xAxis.pane.center;return this.searchKDTree({clientX:180+Math.atan2(a.chartX-c[0]-b.plotLeft,a.chartY-c[1]-b.plotTop)*(-180/Math.PI)})};r(c,"buildKDTree", -function(a){if(this.chart.polar)this.kdByAngle?this.searchPoint=this.searchPointByAngle:this.kdDimensions=2;a.apply(this)});c.toXY=function(a){var b,c=this.chart,f=a.plotX;b=a.plotY;a.rectPlotX=f;a.rectPlotY=b;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-b);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop;this.kdByAngle?(c=(f/Math.PI*180+this.xAxis.pane.options.startAngle)%360,c<0&&(c+=360),a.clientX=c):a.clientX=a.plotX};i.area&&r(i.area.prototype,"init",a);i.areaspline&& -r(i.areaspline.prototype,"init",a);i.spline&&r(i.spline.prototype,"getPointSpline",function(a,b,c,f){var g,e,k,i,n,p,o;if(this.chart.polar){g=c.plotX;e=c.plotY;a=b[f-1];k=b[f+1];this.connectEnds&&(a||(a=b[b.length-2]),k||(k=b[1]));if(a&&k)i=a.plotX,n=a.plotY,b=k.plotX,p=k.plotY,i=(1.5*g+i)/2.5,n=(1.5*e+n)/2.5,k=(1.5*g+b)/2.5,o=(1.5*e+p)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(n-e,2)),p=Math.sqrt(Math.pow(k-g,2)+Math.pow(o-e,2)),i=Math.atan2(n-e,i-g),n=Math.atan2(o-e,k-g),o=Math.PI/2+(i+n)/2,Math.abs(i- -o)>Math.PI/2&&(o-=Math.PI),i=g+Math.cos(o)*b,n=e+Math.sin(o)*b,k=g+Math.cos(Math.PI+o)*p,o=e+Math.sin(Math.PI+o)*p,c.rightContX=k,c.rightContY=o;f?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,n||e,g,e],a.rightContX=a.rightContY=null):c=["M",g,e]}else c=a.call(this,b,c,f);return c});r(c,"translate",function(a){var b=this.chart;a.call(this);if(b.polar&&(this.kdByAngle=b.tooltip&&b.tooltip.shared,!this.preventPostTranslate)){a=this.points;for(b=a.length;b--;)this.toXY(a[b])}});r(c,"getSegmentPath", -function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});r(c,"animate",b);if(i.column)e=i.column.prototype,r(e,"animate",b),r(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,e=b.center,g=b.startAngleRad,f=this.chart.renderer,k,i;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(i=b.length;i--;)k=b[i],a=k.barX+g,k.shapeType="path", -k.shapeArgs={d:f.symbols.arc(e[0],e[1],c-k.plotY,null,{start:a,end:a+k.pointWidth,innerR:c-o(k.yBottom,c)})},this.toXY(k),k.tooltipPos=[k.plotX,k.plotY],k.ttBelow=k.plotY>e[1]}}),r(e,"alignDataLabel",function(a,b,e,f,g,i){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(f.align===null)f.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(f.verticalAlign===null)f.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,e,f,g,i)}else a.call(this,b,e,f,g,i)}); -r(f,"getCoordinates",function(a,b){var c=this.chart,f={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var d=a.isXAxis,e=a.center,i=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;f[d?"xAxis":"yAxis"].push({axis:a,value:a.translate(d?Math.PI-Math.atan2(i,e):Math.sqrt(Math.pow(i,2)+Math.pow(e,2)),!0)})}):f=a.call(this,b);return f})})()}); diff --git a/platforms/browser/www/lib/highcharts/highcharts-more.src.js b/platforms/browser/www/lib/highcharts/highcharts-more.src.js deleted file mode 100644 index 63529baf..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts-more.src.js +++ /dev/null @@ -1,2687 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { -var arrayMin = Highcharts.arrayMin, - arrayMax = Highcharts.arrayMax, - each = Highcharts.each, - extend = Highcharts.extend, - merge = Highcharts.merge, - map = Highcharts.map, - pick = Highcharts.pick, - pInt = Highcharts.pInt, - defaultPlotOptions = Highcharts.getOptions().plotOptions, - seriesTypes = Highcharts.seriesTypes, - extendClass = Highcharts.extendClass, - splat = Highcharts.splat, - wrap = Highcharts.wrap, - Axis = Highcharts.Axis, - Tick = Highcharts.Tick, - Point = Highcharts.Point, - Pointer = Highcharts.Pointer, - CenteredSeriesMixin = Highcharts.CenteredSeriesMixin, - TrackerMixin = Highcharts.TrackerMixin, - Series = Highcharts.Series, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathMax = math.max, - Color = Highcharts.Color, - noop = function () {}, - UNDEFINED;/** - * The Pane object allows options that are common to a set of X and Y axes. - * - * In the future, this can be extended to basic Highcharts and Highstock. - */ - function Pane(options, chart, firstAxis) { - this.init(options, chart, firstAxis); - } - - // Extend the Pane prototype - extend(Pane.prototype, { - - /** - * Initiate the Pane object - */ - init: function (options, chart, firstAxis) { - var pane = this, - backgroundOption, - defaultOptions = pane.defaultOptions; - - pane.chart = chart; - - // Set options. Angular charts have a default background (#3318) - pane.options = options = merge(defaultOptions, chart.angular ? { background: {} } : undefined, options); - - backgroundOption = options.background; - - // To avoid having weighty logic to place, update and remove the backgrounds, - // push them to the first axis' plot bands and borrow the existing logic there. - if (backgroundOption) { - each([].concat(splat(backgroundOption)).reverse(), function (config) { - var backgroundColor = config.backgroundColor, // if defined, replace the old one (specific for gradients) - axisUserOptions = firstAxis.userOptions; - config = merge(pane.defaultBackgroundOptions, config); - if (backgroundColor) { - config.backgroundColor = backgroundColor; - } - config.color = config.backgroundColor; // due to naming in plotBands - firstAxis.options.plotBands.unshift(config); - axisUserOptions.plotBands = axisUserOptions.plotBands || []; // #3176 - if (axisUserOptions.plotBands !== firstAxis.options.plotBands) { - axisUserOptions.plotBands.unshift(config); - } - }); - } - }, - - /** - * The default options object - */ - defaultOptions: { - // background: {conditional}, - center: ['50%', '50%'], - size: '85%', - startAngle: 0 - //endAngle: startAngle + 360 - }, - - /** - * The default background options - */ - defaultBackgroundOptions: { - shape: 'circle', - borderWidth: 1, - borderColor: 'silver', - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#FFF'], - [1, '#DDD'] - ] - }, - from: -Number.MAX_VALUE, // corrected to axis min - innerRadius: 0, - to: Number.MAX_VALUE, // corrected to axis max - outerRadius: '105%' - } - }); - - var axisProto = Axis.prototype, - tickProto = Tick.prototype; - - /** - * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges - */ - var hiddenAxisMixin = { - getOffset: noop, - redraw: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - render: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - setScale: noop, - setCategories: noop, - setTitle: noop - }; - - /** - * Augmented methods for the value axis - */ - var radialAxisMixin = { - isRadial: true, - - /** - * The default options extend defaultYAxisOptions - */ - defaultRadialGaugeOptions: { - labels: { - align: 'center', - x: 0, - y: null // auto - }, - minorGridLineWidth: 0, - minorTickInterval: 'auto', - minorTickLength: 10, - minorTickPosition: 'inside', - minorTickWidth: 1, - tickLength: 10, - tickPosition: 'inside', - tickWidth: 2, - title: { - rotation: 0 - }, - zIndex: 2 // behind dials, points in the series group - }, - - // Circular axis around the perimeter of a polar chart - defaultRadialXOptions: { - gridLineWidth: 1, // spokes - labels: { - align: null, // auto - distance: 15, - x: 0, - y: null // auto - }, - maxPadding: 0, - minPadding: 0, - showLastLabel: false, - tickLength: 0 - }, - - // Radial axis, like a spoke in a polar chart - defaultRadialYOptions: { - gridLineInterpolation: 'circle', - labels: { - align: 'right', - x: -3, - y: -2 - }, - showLastLabel: false, - title: { - x: 4, - text: null, - rotation: 90 - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - - var options = this.options = merge( - this.defaultOptions, - this.defaultRadialOptions, - userOptions - ); - - // Make sure the plotBands array is instanciated for each Axis (#2649) - if (!options.plotBands) { - options.plotBands = []; - } - - }, - - /** - * Wrap the getOffset method to return zero offset for title or labels in a radial - * axis - */ - getOffset: function () { - // Call the Axis prototype method (the method we're in now is on the instance) - axisProto.getOffset.call(this); - - // Title or label offsets are not counted - this.chart.axisOffset[this.side] = 0; - - // Set the center array - this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane); - }, - - - /** - * Get the path for the axis line. This method is also referenced in the getPlotLinePath - * method. - */ - getLinePath: function (lineWidth, radius) { - var center = this.center; - radius = pick(radius, center[2] / 2 - this.offset); - - return this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radius, - radius, - { - start: this.startAngleRad, - end: this.endAngleRad, - open: true, - innerR: 0 - } - ); - }, - - /** - * Override setAxisTranslation by setting the translation to the difference - * in rotation. This allows the translate method to return angle for - * any given value. - */ - setAxisTranslation: function () { - - // Call uber method - axisProto.setAxisTranslation.call(this); - - // Set transA and minPixelPadding - if (this.center) { // it's not defined the first time - if (this.isCircular) { - - this.transA = (this.endAngleRad - this.startAngleRad) / - ((this.max - this.min) || 1); - - - } else { - this.transA = (this.center[2] / 2) / ((this.max - this.min) || 1); - } - - if (this.isXAxis) { - this.minPixelPadding = this.transA * this.minPointOffset; - } else { - // This is a workaround for regression #2593, but categories still don't position correctly. - this.minPixelPadding = 0; - } - } - }, - - /** - * In case of auto connect, add one closestPointRange to the max value right before - * tickPositions are computed, so that ticks will extend passed the real max. - */ - beforeSetTickPositions: function () { - if (this.autoConnect) { - this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260 - } - }, - - /** - * Override the setAxisSize method to use the arc's circumference as length. This - * allows tickPixelInterval to apply to pixel lengths along the perimeter - */ - setAxisSize: function () { - - axisProto.setAxisSize.call(this); - - if (this.isRadial) { - - // Set the center array - this.center = this.pane.center = Highcharts.CenteredSeriesMixin.getCenter.call(this.pane); - - // The sector is used in Axis.translate to compute the translation of reversed axis points (#2570) - if (this.isCircular) { - this.sector = this.endAngleRad - this.startAngleRad; - } - - // Axis len is used to lay out the ticks - this.len = this.width = this.height = this.center[2] * pick(this.sector, 1) / 2; - - - } - }, - - /** - * Returns the x, y coordinate of a point given by a value and a pixel distance - * from center - */ - getPosition: function (value, length) { - return this.postTranslate( - this.isCircular ? this.translate(value) : 0, // #2848 - pick(this.isCircular ? length : this.translate(value), this.center[2] / 2) - this.offset - ); - }, - - /** - * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. - */ - postTranslate: function (angle, radius) { - - var chart = this.chart, - center = this.center; - - angle = this.startAngleRad + angle; - - return { - x: chart.plotLeft + center[0] + Math.cos(angle) * radius, - y: chart.plotTop + center[1] + Math.sin(angle) * radius - }; - - }, - - /** - * Find the path for plot bands along the radial axis - */ - getPlotBandPath: function (from, to, options) { - var center = this.center, - startAngleRad = this.startAngleRad, - fullRadius = center[2] / 2, - radii = [ - pick(options.outerRadius, '100%'), - options.innerRadius, - pick(options.thickness, 10) - ], - percentRegex = /%$/, - start, - end, - open, - isCircular = this.isCircular, // X axis in a polar chart - ret; - - // Polygonal plot bands - if (this.options.gridLineInterpolation === 'polygon') { - ret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true)); - - // Circular grid bands - } else { - - // Keep within bounds - from = Math.max(from, this.min); - to = Math.min(to, this.max); - - // Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from - if (!isCircular) { - radii[0] = this.translate(from); - radii[1] = this.translate(to); - } - - // Convert percentages to pixel values - radii = map(radii, function (radius) { - if (percentRegex.test(radius)) { - radius = (pInt(radius, 10) * fullRadius) / 100; - } - return radius; - }); - - // Handle full circle - if (options.shape === 'circle' || !isCircular) { - start = -Math.PI / 2; - end = Math.PI * 1.5; - open = true; - } else { - start = startAngleRad + this.translate(from); - end = startAngleRad + this.translate(to); - } - - - ret = this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radii[0], - radii[0], - { - start: Math.min(start, end), // Math is for reversed yAxis (#3606) - end: Math.max(start, end), - innerR: pick(radii[1], radii[0] - radii[2]), - open: open - } - ); - } - - return ret; - }, - - /** - * Find the path for plot lines perpendicular to the radial axis. - */ - getPlotLinePath: function (value, reverse) { - var axis = this, - center = axis.center, - chart = axis.chart, - end = axis.getPosition(value), - xAxis, - xy, - tickPositions, - ret; - - // Spokes - if (axis.isCircular) { - ret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y]; - - // Concentric circles - } else if (axis.options.gridLineInterpolation === 'circle') { - value = axis.translate(value); - if (value) { // a value of 0 is in the center - ret = axis.getLinePath(0, value); - } - // Concentric polygons - } else { - // Find the X axis in the same pane - each(chart.xAxis, function (a) { - if (a.pane === axis.pane) { - xAxis = a; - } - }); - ret = []; - value = axis.translate(value); - tickPositions = xAxis.tickPositions; - if (xAxis.autoConnect) { - tickPositions = tickPositions.concat([tickPositions[0]]); - } - // Reverse the positions for concatenation of polygonal plot bands - if (reverse) { - tickPositions = [].concat(tickPositions).reverse(); - } - - each(tickPositions, function (pos, i) { - xy = xAxis.getPosition(pos, value); - ret.push(i ? 'L' : 'M', xy.x, xy.y); - }); - - } - return ret; - }, - - /** - * Find the position for the axis title, by default inside the gauge - */ - getTitlePosition: function () { - var center = this.center, - chart = this.chart, - titleOptions = this.options.title; - - return { - x: chart.plotLeft + center[0] + (titleOptions.x || 0), - y: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * - center[2]) + (titleOptions.y || 0) - }; - } - - }; - - /** - * Override axisProto.init to mix in special axis instance functions and function overrides - */ - wrap(axisProto, 'init', function (proceed, chart, userOptions) { - var axis = this, - angular = chart.angular, - polar = chart.polar, - isX = userOptions.isX, - isHidden = angular && isX, - isCircular, - startAngleRad, - endAngleRad, - options, - chartOptions = chart.options, - paneIndex = userOptions.pane || 0, - pane, - paneOptions; - - // Before prototype.init - if (angular) { - extend(this, isHidden ? hiddenAxisMixin : radialAxisMixin); - isCircular = !isX; - if (isCircular) { - this.defaultRadialOptions = this.defaultRadialGaugeOptions; - } - - } else if (polar) { - //extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin); - extend(this, radialAxisMixin); - isCircular = isX; - this.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions); - - } - - // Run prototype.init - proceed.call(this, chart, userOptions); - - if (!isHidden && (angular || polar)) { - options = this.options; - - // Create the pane and set the pane options. - if (!chart.panes) { - chart.panes = []; - } - this.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane( - splat(chartOptions.pane)[paneIndex], - chart, - axis - ); - paneOptions = pane.options; - - - // Disable certain features on angular and polar axes - chart.inverted = false; - chartOptions.chart.zoomType = null; - - // Start and end angle options are - // given in degrees relative to top, while internal computations are - // in radians relative to right (like SVG). - this.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180; - this.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360) - 90) * Math.PI / 180; - this.offset = options.offset || 0; - - this.isCircular = isCircular; - - // Automatically connect grid lines? - if (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) { - this.autoConnect = true; - } - } - - }); - - /** - * Add special cases within the Tick class' methods for radial axes. - */ - wrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) { - var axis = this.axis; - - return axis.getPosition ? - axis.getPosition(pos) : - proceed.call(this, horiz, pos, tickmarkOffset, old); - }); - - /** - * Wrap the getLabelPosition function to find the center position of the label - * based on the distance option - */ - wrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - optionsY = labelOptions.y, - ret, - centerSlot = 20, // 20 degrees to each side at the top and bottom - align = labelOptions.align, - angle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360; - - if (axis.isRadial) { - ret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25)); - - // Automatically rotated - if (labelOptions.rotation === 'auto') { - label.attr({ - rotation: angle - }); - - // Vertically centered - } else if (optionsY === null) { - optionsY = axis.chart.renderer.fontMetrics(label.styles.fontSize).b - label.getBBox().height / 2; - } - - // Automatic alignment - if (align === null) { - if (axis.isCircular) { - if (this.label.getBBox().width > axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506 - centerSlot = 0; - } - if (angle > centerSlot && angle < 180 - centerSlot) { - align = 'left'; // right hemisphere - } else if (angle > 180 + centerSlot && angle < 360 - centerSlot) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - } else { - align = 'center'; - } - label.attr({ - align: align - }); - } - - ret.x += labelOptions.x; - ret.y += optionsY; - - } else { - ret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - } - return ret; - }); - - /** - * Wrap the getMarkPath function to return the path of the radial marker - */ - wrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) { - var axis = this.axis, - endPoint, - ret; - - if (axis.isRadial) { - endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength); - ret = [ - 'M', - x, - y, - 'L', - endPoint.x, - endPoint.y - ]; - } else { - ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer); - } - return ret; - });/* - * The AreaRangeSeries class - * - */ - - /** - * Extend the default options with map options - */ - defaultPlotOptions.arearange = merge(defaultPlotOptions.area, { - lineWidth: 1, - marker: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{series.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>' - }, - trackByArea: true, - dataLabels: { - align: null, - verticalAlign: null, - xLow: 0, - xHigh: 0, - yLow: 0, - yHigh: 0 - }, - states: { - hover: { - halo: false - } - } - }); - - /** - * Add the series type - */ - seriesTypes.arearange = extendClass(seriesTypes.area, { - type: 'arearange', - pointArrayMap: ['low', 'high'], - dataLabelCollections: ['dataLabel', 'dataLabelUpper'], - toYData: function (point) { - return [point.low, point.high]; - }, - pointValKey: 'low', - deferTranslatePolar: true, - - /** - * Translate a point's plotHigh from the internal angle and radius measures to - * true plotHigh coordinates. This is an addition of the toXY method found in - * Polar.js, because it runs too early for arearanges to be considered (#3419). - */ - highToXY: function (point) { - // Find the polar plotX and plotY - var chart = this.chart, - xy = this.xAxis.postTranslate(point.rectPlotX, this.yAxis.len - point.plotHigh); - point.plotHighX = xy.x - chart.plotLeft; - point.plotHigh = xy.y - chart.plotTop; - }, - - /** - * Extend getSegments to force null points if the higher value is null. #1703. - */ - getSegments: function () { - var series = this; - - each(series.points, function (point) { - if (!series.options.connectNulls && (point.low === null || point.high === null)) { - point.y = null; - } else if (point.low === null && point.high !== null) { - point.y = point.high; - } - }); - Series.prototype.getSegments.call(this); - }, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis; - - seriesTypes.area.prototype.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - - var low = point.low, - high = point.high, - plotY = point.plotY; - - if (high === null && low === null) { - point.y = null; - } else if (low === null) { - point.plotLow = point.plotY = null; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } else if (high === null) { - point.plotLow = plotY; - point.plotHigh = null; - } else { - point.plotLow = plotY; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } - }); - - // Postprocess plotHigh - if (this.chart.polar) { - each(this.points, function (point) { - series.highToXY(point); - }); - } - }, - - /** - * Extend the line series' getSegmentPath method by applying the segment - * path to both lower and higher values of the range - */ - getSegmentPath: function (segment) { - - var lowSegment, - highSegment = [], - i = segment.length, - baseGetSegmentPath = Series.prototype.getSegmentPath, - point, - linePath, - lowerPath, - options = this.options, - step = options.step, - higherPath; - - // Remove nulls from low segment - lowSegment = Highcharts.grep(segment, function (point) { - return point.plotLow !== null; - }); - - // Make a segment with plotX and plotY for the top values - while (i--) { - point = segment[i]; - if (point.plotHigh !== null) { - highSegment.push({ - plotX: point.plotHighX || point.plotX, // plotHighX is for polar charts - plotY: point.plotHigh - }); - } - } - - // Get the paths - lowerPath = baseGetSegmentPath.call(this, lowSegment); - if (step) { - if (step === true) { - step = 'left'; - } - options.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath - } - higherPath = baseGetSegmentPath.call(this, highSegment); - options.step = step; - - // Create a line on both top and bottom of the range - linePath = [].concat(lowerPath, higherPath); - - // For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo' - if (!this.chart.polar) { - higherPath[0] = 'L'; // this probably doesn't work for spline - } - this.areaPath = this.areaPath.concat(lowerPath, higherPath); - - return linePath; - }, - - /** - * Extend the basic drawDataLabels method by running it for both lower and higher - * values. - */ - drawDataLabels: function () { - - var data = this.data, - length = data.length, - i, - originalDataLabels = [], - seriesProto = Series.prototype, - dataLabelOptions = this.options.dataLabels, - align = dataLabelOptions.align, - verticalAlign = dataLabelOptions.verticalAlign, - inside = dataLabelOptions.inside, - point, - up, - inverted = this.chart.inverted; - - if (dataLabelOptions.enabled || this._hasPointLabels) { - - // Step 1: set preliminary values for plotY and dataLabel and draw the upper labels - i = length; - while (i--) { - point = data[i]; - if (point) { - up = inside ? point.plotHigh < point.plotLow : point.plotHigh > point.plotLow; - - // Set preliminary values - point.y = point.high; - point._plotY = point.plotY; - point.plotY = point.plotHigh; - - // Store original data labels and set preliminary label objects to be picked up - // in the uber method - originalDataLabels[i] = point.dataLabel; - point.dataLabel = point.dataLabelUpper; - - // Set the default offset - point.below = up; - if (inverted) { - if (!align) { - dataLabelOptions.align = up ? 'right' : 'left'; - } - } else { - if (!verticalAlign) { - dataLabelOptions.verticalAlign = up ? 'top' : 'bottom'; - } - } - - dataLabelOptions.x = dataLabelOptions.xHigh; - dataLabelOptions.y = dataLabelOptions.yHigh; - } - } - - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); // #1209 - } - - // Step 2: reorganize and handle data labels for the lower values - i = length; - while (i--) { - point = data[i]; - if (point) { - up = inside ? point.plotHigh < point.plotLow : point.plotHigh > point.plotLow; - - // Move the generated labels from step 1, and reassign the original data labels - point.dataLabelUpper = point.dataLabel; - point.dataLabel = originalDataLabels[i]; - - // Reset values - point.y = point.low; - point.plotY = point._plotY; - - // Set the default offset - point.below = !up; - if (inverted) { - if (!align) { - dataLabelOptions.align = up ? 'left' : 'right'; - } - } else { - if (!verticalAlign) { - dataLabelOptions.verticalAlign = up ? 'bottom' : 'top'; - } - - } - - dataLabelOptions.x = dataLabelOptions.xLow; - dataLabelOptions.y = dataLabelOptions.yLow; - } - } - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); - } - } - - dataLabelOptions.align = align; - dataLabelOptions.verticalAlign = verticalAlign; - }, - - alignDataLabel: function () { - seriesTypes.column.prototype.alignDataLabel.apply(this, arguments); - }, - - setStackedPoints: noop, - - getSymbol: noop, - - drawPoints: noop - }); - /** - * The AreaSplineRangeSeries class - */ - - defaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange); - - /** - * AreaSplineRangeSeries object - */ - seriesTypes.areasplinerange = extendClass(seriesTypes.arearange, { - type: 'areasplinerange', - getPointSpline: seriesTypes.spline.prototype.getPointSpline - }); - - (function () { - - var colProto = seriesTypes.column.prototype; - - /** - * The ColumnRangeSeries class - */ - defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, { - lineWidth: 1, - pointRange: null - }); - - /** - * ColumnRangeSeries object - */ - seriesTypes.columnrange = extendClass(seriesTypes.arearange, { - type: 'columnrange', - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - xAxis = series.xAxis, - chart = series.chart, - plotHigh; - - colProto.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - var shapeArgs = point.shapeArgs, - minPointLength = series.options.minPointLength, - heightDifference, - height, - y; - - point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1); - point.plotLow = point.plotY; - - // adjust shape - y = plotHigh; - height = point.plotY - plotHigh; - - // Adjust for minPointLength - if (Math.abs(height) < minPointLength) { - heightDifference = (minPointLength - height); - height += heightDifference; - y -= heightDifference / 2; - - // Adjust for negative ranges or reversed Y axis (#1457) - } else if (height < 0) { - height *= -1; - y -= height; - } - - shapeArgs.height = height; - shapeArgs.y = y; - - point.tooltipPos = chart.inverted ? - [ - yAxis.len + yAxis.pos - chart.plotLeft - y - height / 2, - xAxis.len + xAxis.pos - chart.plotTop - shapeArgs.x - shapeArgs.width / 2, - height - ] : [ - xAxis.left - chart.plotLeft + shapeArgs.x + shapeArgs.width / 2, - yAxis.pos - chart.plotTop + y + height / 2, - height - ]; // don't inherit from column tooltip position - #3372 - }); - }, - directTouch: true, - trackerGroups: ['group', 'dataLabelsGroup'], - drawGraph: noop, - crispCol: colProto.crispCol, - pointAttrToOptions: colProto.pointAttrToOptions, - drawPoints: colProto.drawPoints, - drawTracker: colProto.drawTracker, - animate: colProto.animate, - getColumnMetrics: colProto.getColumnMetrics - }); - }()); - - /* - * The GaugeSeries class - */ - - - - /** - * Extend the default options - */ - defaultPlotOptions.gauge = merge(defaultPlotOptions.line, { - dataLabels: { - enabled: true, - defer: false, - y: 15, - borderWidth: 1, - borderColor: 'silver', - borderRadius: 3, - crop: false, - verticalAlign: 'top', - zIndex: 2 - }, - dial: { - // radius: '80%', - // backgroundColor: 'black', - // borderColor: 'silver', - // borderWidth: 0, - // baseWidth: 3, - // topWidth: 1, - // baseLength: '70%' // of radius - // rearLength: '10%' - }, - pivot: { - //radius: 5, - //borderWidth: 0 - //borderColor: 'silver', - //backgroundColor: 'black' - }, - tooltip: { - headerFormat: '' - }, - showInLegend: false - }); - - /** - * Extend the point object - */ - var GaugePoint = extendClass(Point, { - /** - * Don't do any hover colors or anything - */ - setState: function (state) { - this.state = state; - } - }); - - - /** - * Add the series type - */ - var GaugeSeries = { - type: 'gauge', - pointClass: GaugePoint, - - // chart.angular will be set to true when a gauge series is present, and this will - // be used on the axes - angular: true, - drawGraph: noop, - fixedBox: true, - forceDL: true, - trackerGroups: ['group', 'dataLabelsGroup'], - - /** - * Calculate paths etc - */ - translate: function () { - - var series = this, - yAxis = series.yAxis, - options = series.options, - center = yAxis.center; - - series.generatePoints(); - - each(series.points, function (point) { - - var dialOptions = merge(options.dial, point.dial), - radius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200, - baseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100, - rearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100, - baseWidth = dialOptions.baseWidth || 3, - topWidth = dialOptions.topWidth || 1, - overshoot = options.overshoot, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true); - - // Handle the wrap and overshoot options - if (overshoot && typeof overshoot === 'number') { - overshoot = overshoot / 180 * Math.PI; - rotation = Math.max(yAxis.startAngleRad - overshoot, Math.min(yAxis.endAngleRad + overshoot, rotation)); - - } else if (options.wrap === false) { - rotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation)); - } - - rotation = rotation * 180 / Math.PI; - - point.shapeType = 'path'; - point.shapeArgs = { - d: dialOptions.path || [ - 'M', - -rearLength, -baseWidth / 2, - 'L', - baseLength, -baseWidth / 2, - radius, -topWidth / 2, - radius, topWidth / 2, - baseLength, baseWidth / 2, - -rearLength, baseWidth / 2, - 'z' - ], - translateX: center[0], - translateY: center[1], - rotation: rotation - }; - - // Positions for data label - point.plotX = center[0]; - point.plotY = center[1]; - }); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - - var series = this, - center = series.yAxis.center, - pivot = series.pivot, - options = series.options, - pivotOptions = options.pivot, - renderer = series.chart.renderer; - - each(series.points, function (point) { - - var graphic = point.graphic, - shapeArgs = point.shapeArgs, - d = shapeArgs.d, - dialOptions = merge(options.dial, point.dial); // #1233 - - if (graphic) { - graphic.animate(shapeArgs); - shapeArgs.d = d; // animate alters it - } else { - point.graphic = renderer[point.shapeType](shapeArgs) - .attr({ - stroke: dialOptions.borderColor || 'none', - 'stroke-width': dialOptions.borderWidth || 0, - fill: dialOptions.backgroundColor || 'black', - rotation: shapeArgs.rotation, // required by VML when animation is false - zIndex: 1 - }) - .add(series.group); - } - }); - - // Add or move the pivot - if (pivot) { - pivot.animate({ // #1235 - translateX: center[0], - translateY: center[1] - }); - } else { - series.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5)) - .attr({ - 'stroke-width': pivotOptions.borderWidth || 0, - stroke: pivotOptions.borderColor || 'silver', - fill: pivotOptions.backgroundColor || 'black', - zIndex: 2 - }) - .translate(center[0], center[1]) - .add(series.group); - } - }, - - /** - * Animate the arrow up from startAngle - */ - animate: function (init) { - var series = this; - - if (!init) { - each(series.points, function (point) { - var graphic = point.graphic; - - if (graphic) { - // start value - graphic.attr({ - rotation: series.yAxis.startAngleRad * 180 / Math.PI - }); - - // animate - graphic.animate({ - rotation: point.shapeArgs.rotation - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - render: function () { - this.group = this.plotGroup( - 'group', - 'series', - this.visible ? 'visible' : 'hidden', - this.options.zIndex, - this.chart.seriesGroup - ); - Series.prototype.render.call(this); - this.group.clip(this.chart.clipRect); - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw) { - Series.prototype.setData.call(this, data, false); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(); - } - }, - - /** - * If the tracking module is loaded, add the point tracker - */ - drawTracker: TrackerMixin && TrackerMixin.drawTrackerPoint - }; - seriesTypes.gauge = extendClass(seriesTypes.line, GaugeSeries); - - /* **************************************************************************** - * Start Box plot series code * - *****************************************************************************/ - - // Set default options - defaultPlotOptions.boxplot = merge(defaultPlotOptions.column, { - fillColor: '#FFFFFF', - lineWidth: 1, - //medianColor: null, - medianWidth: 2, - states: { - hover: { - brightness: -0.3 - } - }, - //stemColor: null, - //stemDashStyle: 'solid' - //stemWidth: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{point.color}">\u25CF</span> <b> {series.name}</b><br/>' + // docs - 'Maximum: {point.high}<br/>' + - 'Upper quartile: {point.q3}<br/>' + - 'Median: {point.median}<br/>' + - 'Lower quartile: {point.q1}<br/>' + - 'Minimum: {point.low}<br/>' - - }, - //whiskerColor: null, - whiskerLength: '50%', - whiskerWidth: 2 - }); - - // Create the series object - seriesTypes.boxplot = extendClass(seriesTypes.column, { - type: 'boxplot', - pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.q1, point.median, point.q3, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - - /** - * One-to-one mapping from options to SVG attributes - */ - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - fill: 'fillColor', - stroke: 'color', - 'stroke-width': 'lineWidth' - }, - - /** - * Disable data labels for box plot - */ - drawDataLabels: noop, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - pointArrayMap = series.pointArrayMap; - - seriesTypes.column.prototype.translate.apply(series); - - // do the translation on each point dimension - each(series.points, function (point) { - each(pointArrayMap, function (key) { - if (point[key] !== null) { - point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1); - } - }); - }); - }, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, //state = series.state, - points = series.points, - options = series.options, - chart = series.chart, - renderer = chart.renderer, - pointAttr, - q1Plot, - q3Plot, - highPlot, - lowPlot, - medianPlot, - crispCorr, - crispX, - graphic, - stemPath, - stemAttr, - boxPath, - whiskersPath, - whiskersAttr, - medianPath, - medianAttr, - width, - left, - right, - halfWidth, - shapeArgs, - color, - doQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles - pointWiskerLength, - whiskerLength = series.options.whiskerLength; - - - each(points, function (point) { - - graphic = point.graphic; - shapeArgs = point.shapeArgs; // the box - stemAttr = {}; - whiskersAttr = {}; - medianAttr = {}; - color = point.color || series.color; - - if (point.plotY !== UNDEFINED) { - - pointAttr = point.pointAttr[point.selected ? 'selected' : '']; - - // crisp vector coordinates - width = shapeArgs.width; - left = mathFloor(shapeArgs.x); - right = left + width; - halfWidth = mathRound(width / 2); - //crispX = mathRound(left + halfWidth) + crispCorr; - q1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr; - q3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr; - highPlot = mathFloor(point.highPlot);// + crispCorr; - lowPlot = mathFloor(point.lowPlot);// + crispCorr; - - // Stem attributes - stemAttr.stroke = point.stemColor || options.stemColor || color; - stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth); - stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle; - - // Whiskers attributes - whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color; - whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth); - - // Median attributes - medianAttr.stroke = point.medianColor || options.medianColor || color; - medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth); - - // The stem - crispCorr = (stemAttr['stroke-width'] % 2) / 2; - crispX = left + halfWidth + crispCorr; - stemPath = [ - // stem up - 'M', - crispX, q3Plot, - 'L', - crispX, highPlot, - - // stem down - 'M', - crispX, q1Plot, - 'L', - crispX, lowPlot - ]; - - // The box - if (doQuartiles) { - crispCorr = (pointAttr['stroke-width'] % 2) / 2; - crispX = mathFloor(crispX) + crispCorr; - q1Plot = mathFloor(q1Plot) + crispCorr; - q3Plot = mathFloor(q3Plot) + crispCorr; - left += crispCorr; - right += crispCorr; - boxPath = [ - 'M', - left, q3Plot, - 'L', - left, q1Plot, - 'L', - right, q1Plot, - 'L', - right, q3Plot, - 'L', - left, q3Plot, - 'z' - ]; - } - - // The whiskers - if (whiskerLength) { - crispCorr = (whiskersAttr['stroke-width'] % 2) / 2; - highPlot = highPlot + crispCorr; - lowPlot = lowPlot + crispCorr; - pointWiskerLength = (/%$/).test(whiskerLength) ? halfWidth * parseFloat(whiskerLength) / 100 : whiskerLength / 2; - whiskersPath = [ - // High whisker - 'M', - crispX - pointWiskerLength, - highPlot, - 'L', - crispX + pointWiskerLength, - highPlot, - - // Low whisker - 'M', - crispX - pointWiskerLength, - lowPlot, - 'L', - crispX + pointWiskerLength, - lowPlot - ]; - } - - // The median - crispCorr = (medianAttr['stroke-width'] % 2) / 2; - medianPlot = mathRound(point.medianPlot) + crispCorr; - medianPath = [ - 'M', - left, - medianPlot, - 'L', - right, - medianPlot - ]; - - // Create or update the graphics - if (graphic) { // update - - point.stem.animate({ d: stemPath }); - if (whiskerLength) { - point.whiskers.animate({ d: whiskersPath }); - } - if (doQuartiles) { - point.box.animate({ d: boxPath }); - } - point.medianShape.animate({ d: medianPath }); - - } else { // create new - point.graphic = graphic = renderer.g() - .add(series.group); - - point.stem = renderer.path(stemPath) - .attr(stemAttr) - .add(graphic); - - if (whiskerLength) { - point.whiskers = renderer.path(whiskersPath) - .attr(whiskersAttr) - .add(graphic); - } - if (doQuartiles) { - point.box = renderer.path(boxPath) - .attr(pointAttr) - .add(graphic); - } - point.medianShape = renderer.path(medianPath) - .attr(medianAttr) - .add(graphic); - } - } - }); - - }, - setStackedPoints: noop // #3890 - - - }); - - /* **************************************************************************** - * End Box plot series code * - *****************************************************************************/ - /* **************************************************************************** - * Start error bar series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, { - color: '#000000', - grouping: false, - linkedTo: ':previous', - tooltip: { - pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>' // docs - }, - whiskerWidth: null - }); - - // 2 - Create the series object - seriesTypes.errorbar = extendClass(seriesTypes.boxplot, { - type: 'errorbar', - pointArrayMap: ['low', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - doQuartiles: false, - drawDataLabels: seriesTypes.arearange ? seriesTypes.arearange.prototype.drawDataLabels : noop, - - /** - * Get the width and X offset, either on top of the linked series column - * or standalone - */ - getColumnMetrics: function () { - return (this.linkedParent && this.linkedParent.columnMetrics) || - seriesTypes.column.prototype.getColumnMetrics.call(this); - } - }); - - /* **************************************************************************** - * End error bar series code * - *****************************************************************************/ - /* **************************************************************************** - * Start Waterfall series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, { - lineWidth: 1, - lineColor: '#333', - dashStyle: 'dot', - borderColor: '#333', - dataLabels: { - inside: true - }, - states: { - hover: { - lineWidthPlus: 0 // #3126 - } - } - }); - - - // 2 - Create the series object - seriesTypes.waterfall = extendClass(seriesTypes.column, { - type: 'waterfall', - - upColorProp: 'fill', - - pointValKey: 'y', - - /** - * Translate data points from raw values - */ - translate: function () { - var series = this, - options = series.options, - yAxis = series.yAxis, - len, - i, - points, - point, - shapeArgs, - stack, - y, - yValue, - previousY, - previousIntermediate, - range, - minPointLength = pick(options.minPointLength, 5), - threshold = options.threshold, - stacking = options.stacking, - tooltipY; - - // run column series translate - seriesTypes.column.prototype.translate.apply(this); - series.minPointLengthOffset = 0; - - previousY = previousIntermediate = threshold; - points = series.points; - - for (i = 0, len = points.length; i < len; i++) { - // cache current point object - point = points[i]; - yValue = this.processedYData[i]; - shapeArgs = point.shapeArgs; - - // get current stack - stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey]; - range = stack ? - stack[point.x].points[series.index + ',' + i] : - [0, yValue]; - - // override point value for sums - // #3710 Update point does not propagate to sum - if (point.isSum) { - point.y = yValue; - } else if (point.isIntermediateSum) { - point.y = yValue - previousIntermediate; // #3840 - } - // up points - y = mathMax(previousY, previousY + point.y) + range[0]; - shapeArgs.y = yAxis.translate(y, 0, 1); - - - // sum points - if (point.isSum) { - shapeArgs.y = yAxis.translate(range[1], 0, 1); - shapeArgs.height = Math.min(yAxis.translate(range[0], 0, 1), yAxis.len) - shapeArgs.y + series.minPointLengthOffset; // #4256 - - } else if (point.isIntermediateSum) { - shapeArgs.y = yAxis.translate(range[1], 0, 1); - shapeArgs.height = Math.min(yAxis.translate(previousIntermediate, 0, 1), yAxis.len) - shapeArgs.y + series.minPointLengthOffset; - previousIntermediate = range[1]; - - // If it's not the sum point, update previous stack end position and get - // shape height (#3886) - } else { - if (previousY !== 0) { // Not the first point - shapeArgs.height = yValue > 0 ? - yAxis.translate(previousY, 0, 1) - shapeArgs.y : - yAxis.translate(previousY, 0, 1) - yAxis.translate(previousY - yValue, 0, 1); - } - previousY += yValue; - } - // #3952 Negative sum or intermediate sum not rendered correctly - if (shapeArgs.height < 0) { - shapeArgs.y += shapeArgs.height; - shapeArgs.height *= -1; - } - - point.plotY = shapeArgs.y = mathRound(shapeArgs.y) - (series.borderWidth % 2) / 2; - shapeArgs.height = mathMax(mathRound(shapeArgs.height), 0.001); // #3151 - point.yBottom = shapeArgs.y + shapeArgs.height; - - if (shapeArgs.height <= minPointLength) { - shapeArgs.height = minPointLength; - series.minPointLengthOffset += minPointLength; - } - - shapeArgs.y -= series.minPointLengthOffset; - - // Correct tooltip placement (#3014) - tooltipY = point.plotY + (point.negative ? shapeArgs.height : 0) - series.minPointLengthOffset; - if (series.chart.inverted) { - point.tooltipPos[0] = yAxis.len - tooltipY; - } else { - point.tooltipPos[1] = tooltipY; - } - - } - }, - - /** - * Call default processData then override yData to reflect waterfall's extremes on yAxis - */ - processData: function (force) { - var series = this, - options = series.options, - yData = series.yData, - points = series.options.data, // #3710 Update point does not propagate to sum - point, - dataLength = yData.length, - threshold = options.threshold || 0, - subSum, - sum, - dataMin, - dataMax, - y, - i; - - sum = subSum = dataMin = dataMax = threshold; - - for (i = 0; i < dataLength; i++) { - y = yData[i]; - point = points && points[i] ? points[i] : {}; - - if (y === 'sum' || point.isSum) { - yData[i] = sum; - } else if (y === 'intermediateSum' || point.isIntermediateSum) { - yData[i] = subSum; - } else { - sum += y; - subSum += y; - } - dataMin = Math.min(sum, dataMin); - dataMax = Math.max(sum, dataMax); - } - - Series.prototype.processData.call(this, force); - - // Record extremes - series.dataMin = dataMin; - series.dataMax = dataMax; - }, - - /** - * Return y value or string if point is sum - */ - toYData: function (pt) { - if (pt.isSum) { - return (pt.x === 0 ? null : 'sum'); //#3245 Error when first element is Sum or Intermediate Sum - } - if (pt.isIntermediateSum) { - return (pt.x === 0 ? null : 'intermediateSum'); //#3245 - } - return pt.y; - }, - - /** - * Postprocess mapping between options and SVG attributes - */ - getAttribs: function () { - seriesTypes.column.prototype.getAttribs.apply(this, arguments); - - var series = this, - options = series.options, - stateOptions = options.states, - upColor = options.upColor || series.color, - hoverColor = Highcharts.Color(upColor).brighten(0.1).get(), - seriesDownPointAttr = merge(series.pointAttr), - upColorProp = series.upColorProp; - - seriesDownPointAttr[''][upColorProp] = upColor; - seriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor; - seriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor; - - each(series.points, function (point) { - if (!point.options.color) { - // Up color - if (point.y > 0) { - point.pointAttr = seriesDownPointAttr; - point.color = upColor; - - // Down color (#3710, update to negative) - } else { - point.pointAttr = series.pointAttr; - } - } - }); - }, - - /** - * Draw columns' connector lines - */ - getGraphPath: function () { - - var data = this.data, - length = data.length, - lineWidth = this.options.lineWidth + this.borderWidth, - normalizer = mathRound(lineWidth) % 2 / 2, - path = [], - M = 'M', - L = 'L', - prevArgs, - pointArgs, - i, - d; - - for (i = 1; i < length; i++) { - pointArgs = data[i].shapeArgs; - prevArgs = data[i - 1].shapeArgs; - - d = [ - M, - prevArgs.x + prevArgs.width, prevArgs.y + normalizer, - L, - pointArgs.x, prevArgs.y + normalizer - ]; - - if (data[i - 1].y < 0) { - d[2] += prevArgs.height; - d[5] += prevArgs.height; - } - - path = path.concat(d); - } - - return path; - }, - - /** - * Extremes are recorded in processData - */ - getExtremes: noop, - - drawGraph: Series.prototype.drawGraph - }); - - /* **************************************************************************** - * End Waterfall series code * - *****************************************************************************/ - /** - * Set the default options for polygon - */ - defaultPlotOptions.polygon = merge(defaultPlotOptions.scatter, { - marker: { - enabled: false - } - }); - - /** - * The polygon series class - */ - seriesTypes.polygon = extendClass(seriesTypes.scatter, { - type: 'polygon', - fillGraph: true, - // Close all segments - getSegmentPath: function (segment) { - return Series.prototype.getSegmentPath.call(this, segment).concat('z'); - }, - drawGraph: Series.prototype.drawGraph, - drawLegendSymbol: Highcharts.LegendSymbolMixin.drawRectangle - }); - /* **************************************************************************** - * Start Bubble series code * - *****************************************************************************/ - - // 1 - set default options - defaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, { - dataLabels: { - formatter: function () { // #2945 - return this.point.z; - }, - inside: true, - verticalAlign: 'middle' - }, - // displayNegative: true, - marker: { - // fillOpacity: 0.5, - lineColor: null, // inherit from series.color - lineWidth: 1 - }, - minSize: 8, - maxSize: '20%', - // negativeColor: null, - // sizeBy: 'area' - softThreshold: false, - states: { - hover: { - halo: { - size: 5 - } - } - }, - tooltip: { - pointFormat: '({point.x}, {point.y}), Size: {point.z}' - }, - turboThreshold: 0, - zThreshold: 0, - zoneAxis: 'z' - }); - - var BubblePoint = extendClass(Point, { - haloPath: function () { - return Point.prototype.haloPath.call(this, this.shapeArgs.r + this.series.options.states.hover.halo.size); - }, - ttBelow: false - }); - - // 2 - Create the series object - seriesTypes.bubble = extendClass(seriesTypes.scatter, { - type: 'bubble', - pointClass: BubblePoint, - pointArrayMap: ['y', 'z'], - parallelArrays: ['x', 'y', 'z'], - trackerGroups: ['group', 'dataLabelsGroup'], - bubblePadding: true, - zoneAxis: 'z', - - /** - * Mapping between SVG attributes and the corresponding options - */ - pointAttrToOptions: { - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor' - }, - - /** - * Apply the fillOpacity to all fill positions - */ - applyOpacity: function (fill) { - var markerOptions = this.options.marker, - fillOpacity = pick(markerOptions.fillOpacity, 0.5); - - // When called from Legend.colorizeItem, the fill isn't predefined - fill = fill || markerOptions.fillColor || this.color; - - if (fillOpacity !== 1) { - fill = Color(fill).setOpacity(fillOpacity).get('rgba'); - } - return fill; - }, - - /** - * Extend the convertAttribs method by applying opacity to the fill - */ - convertAttribs: function () { - var obj = Series.prototype.convertAttribs.apply(this, arguments); - - obj.fill = this.applyOpacity(obj.fill); - - return obj; - }, - - /** - * Get the radius for each point based on the minSize, maxSize and each point's Z value. This - * must be done prior to Series.translate because the axis needs to add padding in - * accordance with the point sizes. - */ - getRadii: function (zMin, zMax, minSize, maxSize) { - var len, - i, - pos, - zData = this.zData, - radii = [], - options = this.options, - sizeByArea = options.sizeBy !== 'width', - zThreshold = options.zThreshold, - zRange = zMax - zMin, - value, - radius; - - // Set the shape type and arguments to be picked up in drawPoints - for (i = 0, len = zData.length; i < len; i++) { - - value = zData[i]; - - // When sizing by threshold, the absolute value of z determines the size - // of the bubble. - if (options.sizeByAbsoluteValue && value !== null) { - value = Math.abs(value - zThreshold); - zMax = Math.max(zMax - zThreshold, Math.abs(zMin - zThreshold)); - zMin = 0; - } - - if (value === null) { - radius = null; - // Issue #4419 - if value is less than zMin, push a radius that's always smaller than the minimum size - } else if (value < zMin) { - radius = minSize / 2 - 1; - } else { - // Relative size, a number between 0 and 1 - pos = zRange > 0 ? (value - zMin) / zRange : 0.5; - - if (sizeByArea && pos >= 0) { - pos = Math.sqrt(pos); - } - radius = math.ceil(minSize + pos * (maxSize - minSize)) / 2; - } - radii.push(radius); - } - this.radii = radii; - }, - - /** - * Perform animation on the bubbles - */ - animate: function (init) { - var animation = this.options.animation; - - if (!init) { // run the animation - each(this.points, function (point) { - var graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (graphic && shapeArgs) { - // start values - graphic.attr('r', 1); - - // animate - graphic.animate({ - r: shapeArgs.r - }, animation); - } - }); - - // delete this function to allow it only once - this.animate = null; - } - }, - - /** - * Extend the base translate method to handle bubble size - */ - translate: function () { - - var i, - data = this.data, - point, - radius, - radii = this.radii; - - // Run the parent method - seriesTypes.scatter.prototype.translate.call(this); - - // Set the shape type and arguments to be picked up in drawPoints - i = data.length; - - while (i--) { - point = data[i]; - radius = radii ? radii[i] : 0; // #1737 - - if (typeof radius === 'number' && radius >= this.minPxSize / 2) { - // Shape arguments - point.shapeType = 'circle'; - point.shapeArgs = { - x: point.plotX, - y: point.plotY, - r: radius - }; - - // Alignment box for the data label - point.dlBox = { - x: point.plotX - radius, - y: point.plotY - radius, - width: 2 * radius, - height: 2 * radius - }; - } else { // below zThreshold or z = null - point.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691 - } - } - }, - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawLegendSymbol: function (legend, item) { - var renderer = this.chart.renderer, - radius = renderer.fontMetrics(legend.itemStyle.fontSize).f / 2; - - item.legendSymbol = renderer.circle( - radius, - legend.baseline - radius, - radius - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - item.legendSymbol.isMarker = true; - - }, - - drawPoints: seriesTypes.column.prototype.drawPoints, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel, - buildKDTree: noop, - applyZones: noop - }); - - /** - * Add logic to pad each axis with the amount of pixels - * necessary to avoid the bubbles to overflow. - */ - Axis.prototype.beforePadding = function () { - var axis = this, - axisLength = this.len, - chart = this.chart, - pxMin = 0, - pxMax = axisLength, - isXAxis = this.isXAxis, - dataKey = isXAxis ? 'xData' : 'yData', - min = this.min, - extremes = {}, - smallestSize = math.min(chart.plotWidth, chart.plotHeight), - zMin = Number.MAX_VALUE, - zMax = -Number.MAX_VALUE, - range = this.max - min, - transA = axisLength / range, - activeSeries = []; - - // Handle padding on the second pass, or on redraw - each(this.series, function (series) { - - var seriesOptions = series.options, - zData; - - if (series.bubblePadding && (series.visible || !chart.options.chart.ignoreHiddenSeries)) { - - // Correction for #1673 - axis.allowZoomOutside = true; - - // Cache it - activeSeries.push(series); - - if (isXAxis) { // because X axis is evaluated first - - // For each series, translate the size extremes to pixel values - each(['minSize', 'maxSize'], function (prop) { - var length = seriesOptions[prop], - isPercent = /%$/.test(length); - - length = pInt(length); - extremes[prop] = isPercent ? - smallestSize * length / 100 : - length; - - }); - series.minPxSize = extremes.minSize; - series.maxPxSize = extremes.maxSize; - - // Find the min and max Z - zData = series.zData; - if (zData.length) { // #1735 - zMin = pick(seriesOptions.zMin, math.min( - zMin, - math.max( - arrayMin(zData), - seriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE - ) - )); - zMax = pick(seriesOptions.zMax, math.max(zMax, arrayMax(zData))); - } - } - } - }); - - each(activeSeries, function (series) { - - var data = series[dataKey], - i = data.length, - radius; - - if (isXAxis) { - series.getRadii(zMin, zMax, series.minPxSize, series.maxPxSize); - } - - if (range > 0) { - while (i--) { - if (typeof data[i] === 'number') { - radius = series.radii[i]; - pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin); - pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax); - } - } - } - }); - - - if (activeSeries.length && range > 0 && !this.isLog) { - pxMax -= axisLength; - transA *= (axisLength + pxMin - pxMax) / axisLength; - each([['min', 'userMin', pxMin], ['max', 'userMax', pxMax]], function (keys) { - if (pick(axis.options[keys[0]], axis[keys[1]]) === UNDEFINED) { - axis[keys[0]] += keys[2] / transA; - } - }); - } - }; - - /* **************************************************************************** - * End Bubble series code * - *****************************************************************************/ - - (function () { - - /** - * Extensions for polar charts. Additionally, much of the geometry required for polar charts is - * gathered in RadialAxes.js. - * - */ - - var seriesProto = Series.prototype, - pointerProto = Pointer.prototype, - colProto; - - /** - * Search a k-d tree by the point angle, used for shared tooltips in polar charts - */ - seriesProto.searchPointByAngle = function (e) { - var series = this, - chart = series.chart, - xAxis = series.xAxis, - center = xAxis.pane.center, - plotX = e.chartX - center[0] - chart.plotLeft, - plotY = e.chartY - center[1] - chart.plotTop; - - return this.searchKDTree({ - clientX: 180 + (Math.atan2(plotX, plotY) * (-180 / Math.PI)) - }); - - }; - - /** - * Wrap the buildKDTree function so that it searches by angle (clientX) in case of shared tooltip, - * and by two dimensional distance in case of non-shared. - */ - wrap(seriesProto, 'buildKDTree', function (proceed) { - if (this.chart.polar) { - if (this.kdByAngle) { - this.searchPoint = this.searchPointByAngle; - } else { - this.kdDimensions = 2; - } - } - proceed.apply(this); - }); - - /** - * Translate a point's plotX and plotY from the internal angle and radius measures to - * true plotX, plotY coordinates - */ - seriesProto.toXY = function (point) { - var xy, - chart = this.chart, - plotX = point.plotX, - plotY = point.plotY, - clientX; - - // Save rectangular plotX, plotY for later computation - point.rectPlotX = plotX; - point.rectPlotY = plotY; - - // Find the polar plotX and plotY - xy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY); - point.plotX = point.polarPlotX = xy.x - chart.plotLeft; - point.plotY = point.polarPlotY = xy.y - chart.plotTop; - - // If shared tooltip, record the angle in degrees in order to align X points. Otherwise, - // use a standard k-d tree to get the nearest point in two dimensions. - if (this.kdByAngle) { - clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360; - if (clientX < 0) { // #2665 - clientX += 360; - } - point.clientX = clientX; - } else { - point.clientX = point.plotX; - } - }; - - /** - * Add some special init logic to areas and areasplines - */ - function initArea(proceed, chart, options) { - proceed.call(this, chart, options); - if (this.chart.polar) { - - /** - * Overridden method to close a segment path. While in a cartesian plane the area - * goes down to the threshold, in the polar chart it goes to the center. - */ - this.closeSegment = function (path) { - var center = this.xAxis.center; - path.push( - 'L', - center[0], - center[1] - ); - }; - - // Instead of complicated logic to draw an area around the inner area in a stack, - // just draw it behind - this.closedStacks = true; - } - } - - - if (seriesTypes.area) { - wrap(seriesTypes.area.prototype, 'init', initArea); - } - if (seriesTypes.areaspline) { - wrap(seriesTypes.areaspline.prototype, 'init', initArea); - } - - if (seriesTypes.spline) { - /** - * Overridden method for calculating a spline from one point to the next - */ - wrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) { - - var ret, - smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc; - denom = smoothing + 1, - plotX, - plotY, - lastPoint, - nextPoint, - lastX, - lastY, - nextX, - nextY, - leftContX, - leftContY, - rightContX, - rightContY, - distanceLeftControlPoint, - distanceRightControlPoint, - leftContAngle, - rightContAngle, - jointAngle; - - - if (this.chart.polar) { - - plotX = point.plotX; - plotY = point.plotY; - lastPoint = segment[i - 1]; - nextPoint = segment[i + 1]; - - // Connect ends - if (this.connectEnds) { - if (!lastPoint) { - lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected - } - if (!nextPoint) { - nextPoint = segment[1]; - } - } - - // find control points - if (lastPoint && nextPoint) { - - lastX = lastPoint.plotX; - lastY = lastPoint.plotY; - nextX = nextPoint.plotX; - nextY = nextPoint.plotY; - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)); - distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)); - leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX); - rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX); - jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2); - - - // Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle - if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) { - jointAngle -= Math.PI; - } - - // Find the corrected control points for a spline straight through the point - leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint; - leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint; - rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint; - rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint; - - // Record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - - // moveTo or lineTo - if (!i) { - ret = ['M', plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - - - } else { - ret = proceed.call(this, segment, point, i); - } - return ret; - }); - } - - /** - * Extend translate. The plotX and plotY values are computed as if the polar chart were a - * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from - * center. - */ - wrap(seriesProto, 'translate', function (proceed) { - var chart = this.chart, - points, - i; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (chart.polar) { - this.kdByAngle = chart.tooltip && chart.tooltip.shared; - - if (!this.preventPostTranslate) { - points = this.points; - i = points.length; - - while (i--) { - // Translate plotX, plotY from angle and radius to true plot coordinates - this.toXY(points[i]); - } - } - } - }); - - /** - * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in - * line-like series. - */ - wrap(seriesProto, 'getSegmentPath', function (proceed, segment) { - - var points = this.points; - - // Connect the path - if (this.chart.polar && this.options.connectEnds !== false && - segment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) { - this.connectEnds = true; // re-used in splines - segment = [].concat(segment, [points[0]]); - } - - // Run uber method - return proceed.call(this, segment); - - }); - - - function polarAnimate(proceed, init) { - var chart = this.chart, - animation = this.options.animation, - group = this.group, - markerGroup = this.markerGroup, - center = this.xAxis.center, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - attribs; - - // Specific animation for polar charts - if (chart.polar) { - - // Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation - // would be so slow it would't matter. - if (chart.renderer.isSVG) { - - if (animation === true) { - animation = {}; - } - - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - attribs = { - translateX: center[0] + plotLeft, - translateY: center[1] + plotTop, - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - //markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: plotLeft, - translateY: plotTop, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - } - - // For non-polar charts, revert to the basic animation - } else { - proceed.call(this, init); - } - } - - // Define the animate method for regular series - wrap(seriesProto, 'animate', polarAnimate); - - - if (seriesTypes.column) { - - colProto = seriesTypes.column.prototype; - /** - * Define the animate method for columnseries - */ - wrap(colProto, 'animate', polarAnimate); - - - /** - * Extend the column prototype's translate method - */ - wrap(colProto, 'translate', function (proceed) { - - var xAxis = this.xAxis, - len = this.yAxis.len, - center = xAxis.center, - startAngleRad = xAxis.startAngleRad, - renderer = this.chart.renderer, - start, - points, - point, - i; - - this.preventPostTranslate = true; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (xAxis.isRadial) { - points = this.points; - i = points.length; - while (i--) { - point = points[i]; - start = point.barX + startAngleRad; - point.shapeType = 'path'; - point.shapeArgs = { - d: renderer.symbols.arc( - center[0], - center[1], - len - point.plotY, - null, - { - start: start, - end: start + point.pointWidth, - innerR: len - pick(point.yBottom, len) - } - ) - }; - // Provide correct plotX, plotY for tooltip - this.toXY(point); - point.tooltipPos = [point.plotX, point.plotY]; - point.ttBelow = point.plotY > center[1]; - } - } - }); - - - /** - * Align column data labels outside the columns. #1199. - */ - wrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) { - - if (this.chart.polar) { - var angle = point.rectPlotX / Math.PI * 180, - align, - verticalAlign; - - // Align nicely outside the perimeter of the columns - if (options.align === null) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - options.align = align; - } - if (options.verticalAlign === null) { - if (angle < 45 || angle > 315) { - verticalAlign = 'bottom'; // top part - } else if (angle > 135 && angle < 225) { - verticalAlign = 'top'; // bottom part - } else { - verticalAlign = 'middle'; // left or right - } - options.verticalAlign = verticalAlign; - } - - seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - } else { - proceed.call(this, point, dataLabel, options, alignTo, isNew); - } - - }); - } - - /** - * Extend getCoordinates to prepare for polar axis values - */ - wrap(pointerProto, 'getCoordinates', function (proceed, e) { - var chart = this.chart, - ret = { - xAxis: [], - yAxis: [] - }; - - if (chart.polar) { - - each(chart.axes, function (axis) { - var isXAxis = axis.isXAxis, - center = axis.center, - x = e.chartX - center[0] - chart.plotLeft, - y = e.chartY - center[1] - chart.plotTop; - - ret[isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.translate( - isXAxis ? - Math.PI - Math.atan2(x, y) : // angle - Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center - true - ) - }); - }); - - } else { - ret = proceed.call(this, e); - } - - return ret; - }); - - }()); - -})); diff --git a/platforms/browser/www/lib/highcharts/highcharts.js b/platforms/browser/www/lib/highcharts/highcharts.js deleted file mode 100644 index 2ef06f23..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts.js +++ /dev/null @@ -1,337 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(C,Y){typeof module==="object"&&module.exports?module.exports=C.document?Y(C):Y:C.Highcharts=Y(C)})(typeof window!=="undefined"?window:this,function(C){function Y(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw Error(c);C.console&&console.log(c)}function qb(a,b,c){this.options=b;this.elem=a;this.prop=c}function D(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&& -Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function F(a,b){return parseInt(a,b||10)}function ya(a){return typeof a==="string"}function Z(a){return a&&typeof a==="object"}function Ja(a){return Object.prototype.toString.call(a)==="[object Array]"}function ka(a){return typeof a==="number"}function Ca(a){return V.log(a)/ -V.LN10}function la(a){return V.pow(10,a)}function ma(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function q(a){return a!==B&&a!==null}function L(a,b,c){var d,e;if(ya(b))q(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(q(b)&&Z(b))for(d in b)a.setAttribute(d,b[d]);return e}function ta(a){return Ja(a)?a:[a]}function Qa(a,b,c){if(b)return setTimeout(a,b,c);a.call(0,c)}function M(a,b){if(za&&!da&&b&&b.opacity!==B)b.filter="alpha(opacity="+b.opacity*100+")";v(a.style, -b)}function $(a,b,c,d,e){a=z.createElement(a);b&&v(a,b);e&&M(a,{padding:0,border:"none",margin:0});c&&M(a,c);d&&d.appendChild(a);return a}function na(a,b){var c=function(){};c.prototype=new a;v(c.prototype,b);return c}function Ka(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Za(a){return(ib&&ib(a)||rb||0)*6E4}function La(a,b){for(var c="{",d=!1,e,f,g,h,i,k=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]]; -if(f.length)f=f.join(":"),g=/\.([0-9])/,h=O.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=u.numberFormat(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:""))):e=Ra(f,e)}k.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}k.push(a);return k.join("")}function sb(a){return V.pow(10,S(V.log(a)/V.LN10))}function tb(a,b,c,d,e){var f,g=a,c=p(c,1);f=a/c;b||(b=[1,2,2.5,5,10],d===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(g=b[d],e&&g*c>=a||!e&&f<=(b[d]+(b[d+1]||b[d]))/ -2)break;g*=c;return g}function jb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].safeI=e;a.sort(function(a,c){d=b(a,c);return d===0?a.safeI-c.safeI:d});for(e=0;e<c;e++)delete a[e].safeI}function Sa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Da(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ta(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ua(a){kb||(kb=$(Ma));a&&kb.appendChild(a);kb.innerHTML=""}function fa(a,b){return parseFloat(a.toPrecision(b|| -14))}function Va(a,b){b.renderer.globalAnimation=p(a,b.animation)}function Fb(){var a=O.global,b=a.useUTC,c=b?"getUTC":"get",d=b?"setUTC":"set";oa=a.Date||C.Date;rb=b&&a.timezoneOffset;ib=b&&a.getTimezoneOffset;lb=function(a,c,d,h,i,k){var j;b?(j=oa.UTC.apply(0,arguments),j+=Za(j)):j=(new oa(a,c,p(d,1),p(h,0),p(i,0),p(k,0))).getTime();return j};ub=c+"Minutes";vb=c+"Hours";wb=c+"Day";$a=c+"Date";ab=c+"Month";bb=c+"FullYear";Gb=d+"Milliseconds";Hb=d+"Seconds";Ib=d+"Minutes";Jb=d+"Hours";xb=d+"Date"; -yb=d+"Month";zb=d+"FullYear"}function ia(a){if(!(this instanceof ia))return new ia(a);this.init(a)}function Q(){}function Wa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function Kb(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:p(b.y,f?4:c?14:-6), -x:p(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var B,z=C.document,V=Math,A=V.round,S=V.floor,ua=V.ceil,s=V.max,E=V.min,P=V.abs,T=V.cos,aa=V.sin,pa=V.PI,ga=pa*2/360,Aa=C.navigator&&C.navigator.userAgent||"",Lb=C.opera,za=/(msie|trident|edge)/i.test(Aa)&&!Lb,mb=z&&z.documentMode===8,nb=!za&&/AppleWebKit/.test(Aa),Na=/Firefox/.test(Aa),Mb=/(Mobile|Android|Windows Phone)/.test(Aa),Ea="http://www.w3.org/2000/svg",da=z&&z.createElementNS&&!!z.createElementNS(Ea,"svg").createSVGRect, -Qb=Na&&parseInt(Aa.split("Firefox/")[1],10)<4,ha=z&&!da&&!za&&!!z.createElement("canvas").getContext,cb,db,Nb={},Ab=0,kb,O,Ra,G,va=function(){},W=[],eb=0,Ma="div",Rb=/^[0-9]+$/,ob=["plotTop","marginRight","marginBottom","plotLeft"],oa,lb,rb,ib,ub,vb,wb,$a,ab,bb,Gb,Hb,Ib,Jb,xb,yb,zb,I={},u;u=C.Highcharts?Y(16,!0):{win:C};u.seriesTypes=I;var Fa=[],Ga,qa,o,Oa,Bb,Ha,N,U,H,Xa,Pa;qb.prototype={dSetter:function(){var a=this.paths[0],b=this.paths[1],c=[],d=this.now,e=a.length,f;if(d===1)c=this.toD;else if(e=== -b.length&&d<1)for(;e--;)f=parseFloat(a[e]),c[e]=isNaN(f)?a[e]:d*parseFloat(b[e]-f)+f;else c=b;this.elem.attr("d",c)},update:function(){var a=this.elem,b=this.prop,c=this.now,d=this.options.step;if(this[b+"Setter"])this[b+"Setter"]();else a.attr?a.element&&a.attr(b,c):a.style[b]=c+this.unit;d&&d.call(a,c,this)},run:function(a,b,c){var d=this,e=function(a){return e.stopped?!1:d.step(a)},f;this.startTime=+new oa;this.start=a;this.end=b;this.unit=c;this.now=this.start;this.pos=0;e.elem=this.elem;if(e()&& -Fa.push(e)===1)e.timerId=setInterval(function(){for(f=0;f<Fa.length;f++)Fa[f]()||Fa.splice(f--,1);Fa.length||clearInterval(e.timerId)},13)},step:function(a){var b=+new oa,c,d=this.options;c=this.elem;var e=d.complete,f=d.duration,g=d.curAnim,h;if(c.attr&&!c.element)c=!1;else if(a||b>=f+this.startTime){this.now=this.end;this.pos=1;this.update();a=g[this.prop]=!0;for(h in g)g[h]!==!0&&(a=!1);a&&e&&e.call(c);c=!1}else this.pos=d.easing((b-this.startTime)/f),this.now=this.start+(this.end-this.start)* -this.pos,this.update(),c=!0;return c},initPath:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,k=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f- -2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]}};var v=u.extend=function(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a},p=u.pick=function(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],c!==B&&c!==null)return c},fb=u.wrap=function(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}};Ra=function(a,b,c){if(!q(b)||isNaN(b))return O.lang.invalidDate||"";var a=p(a,"%Y-%m-%d %H:%M:%S"),d=new oa(b- -Za(b)),e,f=d[vb](),g=d[wb](),h=d[$a](),i=d[ab](),k=d[bb](),j=O.lang,m=j.weekdays,d=v({a:m[g].substr(0,3),A:m[g],d:Ka(h),e:h,w:g,b:j.shortMonths[i],B:j.months[i],m:Ka(i+1),y:k.toString().substr(2,2),Y:k,H:Ka(f),k:f,I:Ka(f%12||12),l:f%12||12,M:Ka(d[ub]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ka(d.getSeconds()),L:Ka(A(b%1E3),3)},u.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};G={millisecond:1, -second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};u.numberFormat=function(a,b,c,d){var e=O.lang,a=+a||0,f=b===-1?Math.min((a.toString().split(".")[1]||"").length,20):isNaN(b=Math.abs(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(F(a=P(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+P(a-c).toFixed(f).slice(2):"")};Math.easeInOutSine=function(a){return-0.5* -(Math.cos(Math.PI*a)-1)};Ga=function(a,b){var c=C.getComputedStyle(a,void 0);return c&&F(c.getPropertyValue(b))};qa=function(a,b){return b.indexOf?b.indexOf(a):[].indexOf.call(b,a)};Oa=function(a,b){return[].filter.call(a,b)};Ha=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c[d]=b.call(a[d],a[d],d,a);return c};Bb=function(a){var b=z.documentElement,a=a.getBoundingClientRect();return{top:a.top+(C.pageYOffset||b.scrollTop)-(b.clientTop||0),left:a.left+(C.pageXOffset||b.scrollLeft)-(b.clientLeft|| -0)}};Pa=function(a){for(var b=Fa.length;b--;)if(Fa[b].elem===a)Fa[b].stopped=!0};o=function(a,b){return Array.prototype.forEach.call(a,b)};N=function(a,b,c){function d(b){b.target=b.srcElement||C;c.call(a,b)}var e=a.hcEvents=a.hcEvents||{};if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent){if(!a.hcEventsIE)a.hcEventsIE={};a.hcEventsIE[c.toString()]=d;a.attachEvent("on"+b,d)}e[b]||(e[b]=[]);e[b].push(c)};U=function(a,b,c){function d(b,c){a.removeEventListener?a.removeEventListener(b, -c,!1):a.attachEvent&&(c=a.hcEventsIE[c.toString()],a.detachEvent("on"+b,c))}function e(){var c,e,f;if(a.nodeName)for(f in b?(c={},c[b]=!0):c=g,c)if(g[f])for(e=g[f].length;e--;)d(f,g[f][e])}var f,g=a.hcEvents,h;if(g)b?(f=g[b]||[],c?(h=qa(c,f),h>-1&&(f.splice(h,1),g[b]=f),d(b,c)):(e(),g[b]=[])):(e(),a.hcEvents={})};H=function(a,b,c,d){var e;e=a.hcEvents;var f,g,h,i,c=c||{};if(z.createEvent&&(a.dispatchEvent||a.fireEvent))e=z.createEvent("Events"),e.initEvent(b,!0,!0),e.target=a,v(e,c),a.dispatchEvent? -a.dispatchEvent(e):a.fireEvent(b,e);else if(e){e=e[b]||[];f=e.length;h=function(){c.defaultPrevented=!0};for(g=0;g<f;g++){i=e[g];if(c.stopped)return;c.preventDefault=h;c.target=a;if(!c.type)c.type=b;i.call(a,c)===!1&&c.preventDefault()}}d&&!c.defaultPrevented&&d(c)};Xa=function(a,b,c){var d,e="",f,g,h;Z(c)||(d=arguments,c={duration:d[2],easing:d[3],complete:d[4]});if(!ka(c.duration))c.duration=400;c.easing=Math[c.easing]||Math.easeInOutSine;c.curAnim=D(b);for(h in b)g=new qb(a,c,h),f=null,h==="d"? -(g.paths=g.initPath(a,a.d,b.d),g.toD=b.d,d=0,f=1):a.attr?d=a.attr(h):(d=parseFloat(Ga(a,h))||0,h!=="opacity"&&(e="px")),f||(f=b[h]),f.match&&f.match("px")&&(f=f.replace(/px/g,"")),g.run(d,f,e)};if(C.jQuery)C.jQuery.fn.highcharts=function(){var a=[].slice.call(arguments);if(this[0])return a[0]?(new (u[ya(a[0])?a.shift():"Chart"])(this[0],a[0],a[1]),this):W[L(this[0],"data-highcharts-chart")]};z&&!z.defaultView&&(Ga=function(a,b){var c;c={width:"clientWidth",height:"clientHeight"}[b];if(a.style[b])return F(a.style[b]); -b==="opacity"&&(b="filter");if(c)return a.style.zoom=1,a[c]-2*Ga(a,"padding");c=a.currentStyle[b.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()})];b==="filter"&&(c=c.replace(/alpha\(opacity=([0-9]+)\)/,function(a,b){return b/100}));return c===""?1:F(c)});Array.prototype.forEach||(o=function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c});Array.prototype.indexOf||(qa=function(a,b){var c,d=0;if(b)for(c=b.length;d<c;d++)if(b[d]===a)return d;return-1});Array.prototype.filter|| -(Oa=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c});u.Fx=qb;u.inArray=qa;u.each=o;u.grep=Oa;u.offset=Bb;u.map=Ha;u.addEvent=N;u.removeEvent=U;u.fireEvent=H;u.animate=Xa;u.stop=Pa;O={colors:"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#2b908f,#f45b5b,#91e8e1".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","), -shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/4.2.1/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:0, -defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#333333",fontSize:"18px"}},subtitle:{text:"",align:"center",style:{color:"#555555"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0, -lineWidthPlus:1,radiusPlus:2},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return this.y===null?"":u.numberFormat(this.y,-1)},style:{color:"contrast",fontSize:"11px",fontWeight:"bold",textShadow:"0 0 6px contrast, 0 0 3px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{lineWidthPlus:1,marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0, -turboThreshold:1E3}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderColor:"#909090",borderRadius:0,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{color:"#333333",fontSize:"12px",fontWeight:"bold"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolPadding:5,verticalAlign:"bottom", -x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:da,backgroundColor:"rgba(249, 249, 249, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y", -year:"%Y"},footerFormat:"",headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>',shadow:!0,snap:Mb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",pointerEvents:"none",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090", -fontSize:"9px"}}};var ba=O.plotOptions,ea=ba.line;Fb();ia.prototype={parsers:[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(a){return[F(a[1]),F(a[2]),F(a[3]),parseFloat(a[4],10)]}},{regex:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,parse:function(a){return[F(a[1],16),F(a[2],16),F(a[3],16),1]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(a){return[F(a[1]),F(a[2]),F(a[3]),1]}}], -init:function(a){var b,c,d,e;if((this.input=a)&&a.stops)this.stops=Ha(a.stops,function(a){return new ia(a[1])});else for(d=this.parsers.length;d--&&!c;)e=this.parsers[d],(b=e.regex.exec(a))&&(c=e.parse(b));this.rgba=c||[]},get:function(a){var b=this.input,c=this.rgba,d;this.stops?(d=D(b),d.stops=[].concat(d.stops),o(this.stops,function(b,c){d.stops[c]=[d.stops[c][0],b.get(a)]})):d=c&&!isNaN(c[0])?a==="rgb"||!a&&c[3]===1?"rgb("+c[0]+","+c[1]+","+c[2]+")":a==="a"?c[3]:"rgba("+c.join(",")+")":b;return d}, -brighten:function(a){var b,c=this.rgba;if(this.stops)o(this.stops,function(b){b.brighten(a)});else if(ka(a)&&a!==0)for(b=0;b<3;b++)c[b]+=F(a*255),c[b]<0&&(c[b]=0),c[b]>255&&(c[b]=255);return this},setOpacity:function(a){this.rgba[3]=a;return this}};Q.prototype={opacity:1,textProps:"direction,fontSize,fontWeight,fontFamily,fontStyle,color,lineHeight,width,textDecoration,textOverflow,textShadow".split(","),init:function(a,b){this.element=b==="span"?$(b):z.createElementNS(Ea,b);this.renderer=a},animate:function(a, -b,c){b=p(b,this.renderer.globalAnimation,!0);Pa(this);if(b){b=D(b,{});if(c)b.complete=c;Xa(this,a,b)}else this.attr(a,null,c);return this},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,k,j,m,l,n,t,r=[],p;a.linearGradient?f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];i=d.gradients;j=a.stops;n=c.radialReference;Ja(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&n&&!q(g.gradientUnits)&&(h=g,g=D(g,d.getRadialAttr(n, -h),{gradientUnits:"userSpaceOnUse"}));for(t in g)t!=="id"&&r.push(t,g[t]);for(t in j)r.push(j[t]);r=r.join(",");i[r]?n=i[r].attr("id"):(g.id=n="highcharts-"+Ab++,i[r]=k=d.createElement(f).attr(g).add(d.defs),k.radAttr=h,k.stops=[],o(j,function(a){a[1].indexOf("rgba")===0?(e=ia(a[1]),m=e.get("rgb"),l=e.get("a")):(m=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":m,"stop-opacity":l}).add(k);k.stops.push(a)}));p="url("+d.url+"#"+n+")";c.setAttribute(b,p);c.gradient=r;a.toString=function(){return p}}}, -applyTextShadow:function(a){var b=this.element,c,d=a.indexOf("contrast")!==-1,e={},f=this.renderer.forExport,g=f||b.style.textShadow!==B&&!za;if(d)e.textShadow=a=a.replace(/contrast/g,this.renderer.getContrast(b.style.fill));if(nb||f)e.textRendering="geometricPrecision";g?this.css(e):(this.fakeTS=!0,this.ySetter=this.xSetter,c=[].slice.call(b.getElementsByTagName("tspan")),o(a.split(/\s?,\s?/g),function(a){var d=b.firstChild,e,f,a=a.split(" ");e=a[a.length-1];(f=a[a.length-2])&&o(c,function(a,c){var g; -c===0&&(a.setAttribute("x",b.getAttribute("x")),c=b.getAttribute("y"),a.setAttribute("y",c||0),c===null&&b.setAttribute("y",0));g=a.cloneNode(1);L(g,{"class":"highcharts-text-shadow",fill:e,stroke:e,"stroke-opacity":1/s(F(f),3),"stroke-width":f,"stroke-linejoin":"round"});b.insertBefore(g,d)})}))},attr:function(a,b,c){var d,e=this.element,f,g=this,h;typeof a==="string"&&b!==B&&(d=a,a={},a[d]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(d in a){b=a[d]; -h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(d)&&(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(d==="x"||d==="y"))this.doTransform=!0;h||(this[d+"Setter"]||this._defaultSetter).call(this,b,d,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(d)&&this.updateShadows(d,b)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}c&&c();return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a, -a==="height"?Math.max(b-(c[d].cutHeight||0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element,c=L(b,"class")||"";c.indexOf(a)===-1&&L(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;o("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=p(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":"none")},crisp:function(a){var b, -c={},d,e=a.strokeWidth||this.strokeWidth||0;d=A(e)%2/2;a.x=S(a.x||this.x||0)+d;a.y=S(a.y||this.y||0)+d;a.width=S((a.width||this.width||0)-2*d);a.height=S((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&F(a.width)||this.textWidth;b&& -(a=v(b,c));this.styles=a;e&&(ha||!da&&this.renderer.forExport)&&delete a.width;if(za&&!da)M(this.element,a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";L(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;db&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=oa.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(Aa.indexOf("Android")===-1||oa.now()-(c.touchEventFired|| -0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){var b=this.renderer.gradients[this.element.gradient];this.element.radialReference=a;b&&b.radAttr&&b.animate(this.renderer.getRadialAttr(a,b.radAttr));return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted, -f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")");(q(c)||q(d))&&a.push("scale("+p(c,1)+" "+p(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions= -a,this.alignByTranslate=b,!c||ya(c))this.alignTo=d=c||"renderer",ma(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=p(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=A(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=A(g);this[this.placed?"animate":"attr"](h);this.placed= -!0;this.alignAttr=h;return this},getBBox:function(a,b){var c,d=this.renderer,e,f,g,h=this.element,i=this.styles;e=this.textStr;var k,j=h.style,m,l=d.cache,n=d.cacheKeys,t;f=p(b,this.rotation);g=f*ga;e!==B&&(t=["",f||0,i&&i.fontSize,h.style.width].join(","),t=e===""||Rb.test(e)?"num:"+e.toString().length+t:e+t);t&&!a&&(c=l[t]);if(!c){if(h.namespaceURI===Ea||d.forExport){try{m=this.fakeTS&&function(a){o(h.querySelectorAll(".highcharts-text-shadow"),function(b){b.style.display=a})},Na&&j.textShadow? -(k=j.textShadow,j.textShadow=""):m&&m("none"),c=h.getBBox?v({},h.getBBox()):{width:h.offsetWidth,height:h.offsetHeight},k?j.textShadow=k:m&&m("")}catch(r){}if(!c||c.width<0)c={width:0,height:0}}else c=this.htmlGetBBox();if(d.isSVG){d=c.width;e=c.height;if(za&&i&&i.fontSize==="11px"&&e.toPrecision(3)==="16.9")c.height=e=14;if(f)c.width=P(e*aa(g))+P(d*T(g)),c.height=P(e*T(g))+P(d*aa(g))}if(t){for(;n.length>250;)delete l[n.shift()];l[t]||n.push(t);l[t]=c}}return c},show:function(a){return this.attr({visibility:a? -"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.attr({y:-9999})}})},add:function(a){var b=this.renderer,c=this.element,d;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)d=this.zIndexSetter();d||(a?a.element:b.box).appendChild(c);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b= -a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Pa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&o(c,function(b){a.safeRemoveChild(b)});d&&d.div&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div, -d=b;a.alignTo&&ma(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,k,j;if(a){i=p(a.width,3);k=(a.opacity||0.15)/i;j=this.parentInverted?"(-1,-1)":"("+p(a.offsetX,1)+", "+p(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;L(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":k*e,"stroke-width":h,transform:"translate"+j,fill:"none"});if(c)L(f,"height",s(L(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f): -g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName==="circle"&&(a={x:"cx",y:"cy"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=p(this[a],this.element?this.element.getAttribute(a):null,0);/^[\-0-9\.]+$/.test(a)&&(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(" "));/(NaN| {2}|^$)/.test(a)&&(a="M 0 0");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a= -a.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(b=a.length;b--;)a[b]=F(a[b])*this["stroke-width"];a=a.join(",").replace("NaN","none");this.element.setAttribute("stroke-dasharray",a)}},alignSetter:function(a){this.element.setAttribute("text-anchor",{left:"start",center:"middle",right:"end"}[a])},opacitySetter:function(a, -b,c){this[b]=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName("title")[0];b||(b=z.createElementNS(Ea,"title"),this.element.appendChild(b));b.appendChild(z.createTextNode(String(p(a),"").replace(/<[^>]*>/g,"")))},textSetter:function(a){if(a!==this.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a==="string"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},visibilitySetter:function(a,b,c){a=== -"inherit"?c.removeAttribute(b):c.setAttribute(b,a)},zIndexSetter:function(a,b){var c=this.renderer,d=this.parentGroup,c=(d||c).element||c.box,e,f,g=this.element,h;e=this.added;var i;q(a)&&(g.setAttribute(b,a),a=+a,this[b]===a&&(e=!1),this[b]=a);if(e){if((a=this.zIndex)&&d)d.handleZ=!0;d=c.childNodes;for(i=0;i<d.length&&!h;i++)if(e=d[i],f=L(e,"zIndex"),e!==g&&(F(f)>a||!q(a)&&q(f)))c.insertBefore(g,e),h=!0;h||c.appendChild(g)}return h},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};Q.prototype.yGetter= -Q.prototype.xGetter;Q.prototype.translateXSetter=Q.prototype.translateYSetter=Q.prototype.rotationSetter=Q.prototype.verticalAlignSetter=Q.prototype.scaleXSetter=Q.prototype.scaleYSetter=function(a,b){this[b]=a;this.doTransform=!0};Q.prototype["stroke-widthSetter"]=Q.prototype.strokeSetter=function(a,b,c){this[b]=a;if(this.stroke&&this["stroke-width"])this.strokeWidth=this["stroke-width"],Q.prototype.fillSetter.call(this,this.stroke,"stroke",c),c.setAttribute("stroke-width",this["stroke-width"]), -this.hasStroke=!0;else if(b==="stroke-width"&&a===0&&this.hasStroke)c.removeAttribute("stroke"),this.hasStroke=!1};var Ba=function(){this.init.apply(this,arguments)};Ba.prototype={Element:Q,init:function(a,b,c,d,e,f){var g,d=this.createElement("svg").attr({version:"1.1"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&L(g,"xmlns",Ea);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Na||nb)&&z.getElementsByTagName("base").length?C.location.href.replace(/#.*?$/, -"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(z.createTextNode("Created with Highcharts 4.2.1"));this.defs=this.createElement("defs").add();this.allowHTML=f;this.forExport=e;this.gradients={};this.cache={};this.cacheKeys=[];this.setSize(b,c,!1);var h;if(Na&&a.getBoundingClientRect)this.subPixelFix=b=function(){M(a,{left:0,top:0});h=a.getBoundingClientRect();M(a,{left:ua(h.left)-h.left+"px",top:ua(h.top)-h.top+"px"})},b(),N(C,"resize", -b)},getStyle:function(a){return this.style=v({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ta(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&U(C,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element; -b.init(this,a);return b},draw:function(){},getRadialAttr:function(a,b){return{cx:a[0]-a[2]/2+b.cx*a[2],cy:a[1]-a[2]/2+b.cy*a[2],r:b.r*a[2]}},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=p(a.textStr,"").toString(),f=e.indexOf("<")!==-1,g=b.childNodes,h,i,k=L(b,"x"),j=a.styles,m=a.textWidth,l=j&&j.lineHeight,n=j&&j.textShadow,t=j&&j.textOverflow==="ellipsis",r=g.length,X=m&&!a.added&&this.box,y=function(a){return l?F(l):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize: -j&&j.fontSize||c.style.fontSize||12,a).h},x=function(a){return a.replace(/&lt;/g,"<").replace(/&gt;/g,">")};r--;)b.removeChild(g[r]);!f&&!n&&!t&&e.indexOf(" ")===-1?b.appendChild(z.createTextNode(x(e))):(h=/<.*style="([^"]+)".*>/,i=/<.*href="(http[^"]+)".*>/,X&&X.appendChild(b),e=f?e.replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g):[e],e[e.length-1]=== -""&&e.pop(),o(e,function(e,f){var g,l=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");g=e.split("|||");o(g,function(e){if(e!==""||g.length===1){var n={},r=z.createElementNS(Ea,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),L(r,"style",p));i.test(e)&&!d&&(L(r,"onclick",'location.href="'+e.match(i)[1]+'"'),M(r,{cursor:"pointer"}));e=x(e.replace(/<(.|\n)*?>/g,"")||" ");if(e!==" "){r.appendChild(z.createTextNode(e));if(l)n.dx=0;else if(f&&k!==null)n.x= -k;L(r,n);b.appendChild(r);!l&&f&&(!da&&d&&M(r,{display:"block"}),L(r,"dy",y(r)));if(m){for(var n=e.replace(/([^\^])-/g,"$1- ").split(" "),X=g.length>1||f||n.length>1&&j.whiteSpace!=="nowrap",o,w,q,s=[],v=y(r),B=1,A=a.rotation,u=e,D=u.length;(X||t)&&(n.length||s.length);)a.rotation=0,o=a.getBBox(!0),q=o.width,!da&&c.forExport&&(q=c.measureSpanWidth(r.firstChild.data,a.styles)),o=q>m,w===void 0&&(w=o),t&&w?(D/=2,u===""||!o&&D<0.5?n=[]:(o&&(w=!0),u=e.substring(0,u.length+(o?-1:1)*ua(D)),n=[u+(m>3?"\u2026": -"")],r.removeChild(r.firstChild))):!o||n.length===1?(n=s,s=[],n.length&&(B++,r=z.createElementNS(Ea,"tspan"),L(r,{dy:v,x:k}),p&&L(r,"style",p),b.appendChild(r)),q>m&&(m=q)):(r.removeChild(r.firstChild),s.unshift(n.pop())),n.length&&r.appendChild(z.createTextNode(n.join(" ").replace(/- /g,"-")));w&&a.attr("title",a.textStr);a.rotation=A}l++}}})}),X&&X.removeChild(b),n&&a.applyTextShadow&&a.applyTextShadow(n))},getContrast:function(a){a=ia(a).rgba;return a[0]+a[1]+a[2]>384?"#000000":"#FFFFFF"},button:function(a, -b,c,d,e,f,g,h,i){var k=this.label(a,b,c,i,null,null,null,null,"button"),j=0,m,l,n,t,r,p,a={x1:0,y1:0,x2:0,y2:1},e=D({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=D(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);t=f.style;delete f.style;g=D(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);r=g.style;delete g.style;h=D(e,{style:{color:"#CCC"}}, -h);p=h.style;delete h.style;N(k.element,za?"mouseover":"mouseenter",function(){j!==3&&k.attr(f).css(t)});N(k.element,za?"mouseout":"mouseleave",function(){j!==3&&(m=[e,f,g][j],l=[n,t,r][j],k.attr(m).css(l))});k.setState=function(a){(k.state=j=a)?a===2?k.attr(g).css(r):a===3&&k.attr(h).css(p):k.attr(e).css(n)};return k.on("click",function(a){j!==3&&d.call(k,a)}).attr(e).css(v({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=A(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=A(a[2])+b%2/ -2);return a},path:function(a){var b={fill:"none"};Ja(a)?b.d=a:Z(a)&&v(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=Z(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(Z(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a, -b,c,d,e,f){var e=Z(a)?a.r:e,g=this.createElement("rect"),a=Z(a)?a:a===B?{}:{x:a,y:b,width:s(c,0),height:s(d,0)};if(f!==B)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){L(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return q(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a, -b,c,d,e){var f={preserveAspectRatio:"none"};arguments.length>1&&v(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(A(b),A(c),d,e,f),i=/^url\((.*?)\)$/,k,j;if(h)g=this.path(h),v(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&v(g,f);else if(i.test(a))j=function(a,b){a.element&&(a.attr({width:b[0], -height:b[1]}),a.alignByTranslate||a.translate(A((d-b[0])/2),A((e-b[1])/2)))},k=a.match(i)[1],a=Nb[k]||f&&f.width&&f.height&&[f.width,f.height],g=this.image(k).attr({x:b,y:c}),g.isImg=!0,a?j(g,a):(g.attr({width:0,height:0}),$("img",{onload:function(){this.width===0&&(M(this,{position:"absolute",top:"-999em"}),z.body.appendChild(this));j(g,Nb[k]=[this.width,this.height]);this.parentNode&&this.parentNode.removeChild(this)},src:k}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M", -a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=T(f),k=aa(f),j=T(g),g=aa(g),e=e.end-f<pa?0:1; -return["M",a+c*i,b+c*k,"A",c,c,0,e,1,a+c*j,b+c*g,h?"M":"L",a+d*j,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*k,h?"":"Z"]},callout:function(a,b,c,d,e){var f=E(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,e=e&&e.anchorY,i;i=["M",a+f,b,"L",a+c-f,b,"C",a+c,b,a+c,b,a+c,b+f,"L",a+c,b+d-f,"C",a+c,b+d,a+c,b+d,a+c-f,b+d,"L",a+f,b+d,"C",a,b+d,a,b+d,a,b+d-f,"L",a,b+f,"C",a,b,a,b,a+f,b];h&&h>c&&e>b+g&&e<b+d-g?i.splice(13,3,"L",a+c,e-6,a+c+6,e,a+c,e+6,a+c,b+d-f):h&&h<0&&e>b+g&&e<b+d-g?i.splice(33,3,"L",a,e+6,a-6,e,a,e-6,a,b+f):e&&e> -d&&h>a+g&&h<a+c-g?i.splice(23,3,"L",h+6,b+d,h,b+d+6,h-6,b+d,a+f,b+d):e&&e<0&&h>a+g&&h<a+c-g&&i.splice(3,3,"L",h-6,b,h,b-6,h+6,b,c-f,b);return i}},clipRect:function(a,b,c,d){var e="highcharts-"+Ab++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;a.count=0;return a},text:function(a,b,c,d){var e=ha||!da&&this.forExport,f={};if(d&&(this.allowHTML||!this.forExport))return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a|| -a===0)f.text=a;a=this.createElement("text").attr(f);e&&a.css({position:"absolute"});if(!d)a.xSetter=function(a,b,c){var d=c.getElementsByTagName("tspan"),e,f=c.getAttribute(b),l;for(l=0;l<d.length;l++)e=d[l],e.getAttribute(b)===f&&e.setAttribute(b,a);c.setAttribute(b,a)};return a},fontMetrics:function(a,b){var c,d,a=a||this.style.fontSize;!a&&b&&C.getComputedStyle&&(b=b.element||b,a=(c=C.getComputedStyle(b,""))&&c.fontSize);a=/px/.test(a)?F(a):/em/.test(a)?parseFloat(a)*12:12;c=a<24?a+3:A(a*1.2); -d=A(c*0.8);return{h:c,b:d,f:a}},rotCorr:function(a,b,c){var d=a;b&&c&&(d=s(d*T(b*ga),4));return{x:-a/3*aa(b*ga),y:d}},label:function(a,b,c,d,e,f,g,h,i){var k=this,j=k.g(i),m=k.text("",0,0,g).attr({zIndex:1}),l,n,t=0,r=3,p=0,y,x,w,s,ca=0,gb={},u,z,J,E,C;J=function(){var a,b;a=m.element.style;n=(y===void 0||x===void 0||j.styles.textAlign)&&q(m.textStr)&&m.getBBox();j.width=(y||n.width||0)+2*r+p;j.height=(x||n.height||0)+2*r;u=r+k.fontMetrics(a&&a.fontSize,m).b;if(z){if(!l)a=ca,b=(h?-u:0)+ca,j.box=l= -d?k.symbol(d,a,b,j.width,j.height,gb):k.rect(a,b,j.width,j.height,0,gb["stroke-width"]),l.isImg||l.attr("fill","none"),l.add(j);l.isImg||l.attr(v({width:A(j.width),height:A(j.height)},gb));gb=null}};E=function(){var a=j.styles,a=a&&a.textAlign,b=p+r,c;c=h?0:u;if(q(y)&&n&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(y-n.width);if(b!==m.x||c!==m.y)m.attr("x",b),c!==B&&m.attr("y",c);m.x=b;m.y=c};C=function(a,b){l?l.attr(a,b):gb[a]=b};j.onAdd=function(){m.add(j);j.attr({text:a||a===0?a:"", -x:b,y:c});l&&q(e)&&j.attr({anchorX:e,anchorY:f})};j.widthSetter=function(a){y=a};j.heightSetter=function(a){x=a};j.paddingSetter=function(a){if(q(a)&&a!==r)r=j.padding=a,E()};j.paddingLeftSetter=function(a){q(a)&&a!==p&&(p=a,E())};j.alignSetter=function(a){a={left:0,center:0.5,right:1}[a];a!==t&&(t=a,n&&j.attr({x:b}))};j.textSetter=function(a){a!==B&&m.textSetter(a);J();E()};j["stroke-widthSetter"]=function(a,b){a&&(z=!0);ca=a%2/2;C(b,a)};j.strokeSetter=j.fillSetter=j.rSetter=function(a,b){b==="fill"&& -a&&(z=!0);C(b,a)};j.anchorXSetter=function(a,b){e=a;C(b,A(a)-ca-w)};j.anchorYSetter=function(a,b){f=a;C(b,a-s)};j.xSetter=function(a){j.x=a;t&&(a-=t*((y||n.width)+2*r));w=A(a);j.attr("translateX",w)};j.ySetter=function(a){s=j.y=A(a);j.attr("translateY",s)};var F=j.css;return v(j,{css:function(a){if(a){var b={},a=D(a);o(j.textProps,function(c){a[c]!==B&&(b[c]=a[c],delete a[c])});m.css(b)}return F.call(j,a)},getBBox:function(){return{width:n.width+2*r,height:n.height+2*r,x:n.x-r,y:n.y-r}},shadow:function(a){l&& -l.shadow(a);return j},destroy:function(){U(j.element,"mouseenter");U(j.element,"mouseleave");m&&(m=m.destroy());l&&(l=l.destroy());Q.prototype.destroy.call(j);j=k=J=E=C=null}})}};cb=Ba;v(Q.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();if(a&&a.textOverflow==="ellipsis")a.whiteSpace="nowrap",a.overflow="hidden";this.styles=v(this.styles,a);M(this.element,a);return this},htmlGetBBox:function(){var a=this.element; -if(a.nodeName==="text")a.style.position="absolute";return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=this.shadows,k=this.styles;M(b,{marginLeft:c,marginTop:d});i&&o(i,function(a){M(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&o(b.childNodes,function(c){a.invertChild(c, -b)});if(b.tagName==="SPAN"){var j=this.rotation,m,l=F(this.textWidth),n=[j,g,b.innerHTML,this.textWidth,this.textAlign].join(",");if(n!==this.cTT){m=a.fontMetrics(b.style.fontSize).b;q(j)&&this.setSpanRotation(j,h,m);i=p(this.elemWidth,b.offsetWidth);if(i>l&&/[ \-]/.test(b.textContent||b.innerText))M(b,{width:l+"px",display:"block",whiteSpace:k&&k.whiteSpace||"normal"}),i=l;this.getSpanCorrection(i,m,h,j,g)}M(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(nb)m=b.offsetHeight;this.cTT= -n}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=za?"-ms-transform":nb?"-webkit-transform":Na?"MozTransform":Lb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Na?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";M(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});v(Ba.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;e.innerHTML= -this.textStr=a;d.htmlUpdateTransform()};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:A(b),y:A(c)}).css({position:"absolute",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});e.style.whiteSpace="nowrap";d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;o(k.reverse(),function(a){var d,e=L(a.element, -"class");e&&(e={className:e});b=a.div=a.div||$(Ma,e,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;v(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0}});o(["opacity","visibility"],function(b){fb(a,b+"Setter",function(a,b,c,e){a.call(this,b,c,e);d[c]=b})})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var K;if(!da&& -!ha){K={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ma;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=$(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,e=a&&a.inverted,d=a?a.element||a:d;if(a)this.parentGroup=a;e&&b.invertChild(c,d);d.appendChild(c);this.added= -!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:Q.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=T(a*ga),c=aa(a*ga);M(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):"none"})},getSpanCorrection:function(a,b,c,d,e){var f=d?T(d*ga):1,g=d?aa(d*ga):0,h=p(this.elemHeight,this.element.offsetHeight), -i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),M(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ka(a[b]))c[b]=A(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b= -this,c;a?(c=a.members,ma(c,b),c.push(b),b.destroyClip=function(){ma(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:mb?"inherit":"rect(auto)"});return b.css(a)},css:Q.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ua(a)},destroy:function(){this.destroyClip&&this.destroyClip();return Q.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=C.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length; -if(c===9||c===11)a[c-4]=a[c-2]=F(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,k,j=f.path,m,l,n,t;j&&typeof j.value!=="string"&&(j="x");l=j;if(a){n=p(a.width,3);t=(a.opacity||0.15)/n;for(e=1;e<=3;e++){m=n*2+1-2*e;c&&(l=this.cutOffPath(j.value,m+0.5));k=['<shape isShadow="true" strokeweight="',m,'" filled="false" path="',l,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=$(g.prepVML(k),null,{left:F(i.left)+p(a.offsetX,1),top:F(i.top)+ -p(a.offsetY,1)});if(c)h.cutOff=m+1;k=['<stroke color="',a.color||"black",'" opacity="',t*e,'"/>'];$(g.prepVML(k),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:va,setAttr:function(a,b){mb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||$(this.renderer.prepVML(["<stroke/>"]),null,null,c))[b]=a||"solid"; -this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join&&a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!=="none",this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},"fill-opacitySetter":function(a,b,c){$(this.renderer.prepVML(["<",b.split("-")[0],' opacity="',a,'"/>']),null,null, -c)},opacitySetter:va,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-A(aa(a*ga)+1)+"px";c.top=A(T(a*ga))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b,this))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ka(a)&&(a+="px");this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&o(this.shadows,function(c){c.style[b]=a});c.nodeName=== -"DIV"&&(a=a==="hidden"?"-999em":0,mb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};K["stroke-opacitySetter"]=K["fill-opacitySetter"];u.VMLElement=K=na(Q,K);K.prototype.ySetter=K.prototype.widthSetter=K.prototype.heightSetter=K.prototype.xSetter;var Cb={Element:K,isIE8:Aa.indexOf("MSIE 8.0")>-1,init:function(a, -b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ma).css(v(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.gradients={};this.cache={};this.cacheKeys=[];this.setSize(b,c,!1);if(!z.namespaces.hcv){z.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{z.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){z.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=Z(a);return v(e,{members:[],count:0,left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+A(a?e:d)+"px,"+ -A(a?f:b)+"px,"+A(a?b:f)+"px,"+A(a?d:e)+"px)"};!a&&mb&&c==="DIV"&&v(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){o(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,k="none";a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var j,m,l=a.linearGradient||a.radialGradient,n,t,r,p,y,x="",a=a.stops,w,q=[],ca=function(){h=['<fill colors="'+q.join(",")+'" opacity="',r,'" o:opacity2="',t,'" type="',i,'" ', -x,'focus="100%" method="any" />'];$(e.prepVML(h),null,null,b)};n=a[0];w=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);w[0]<1&&a.push([1,w[1]]);o(a,function(a,b){g.test(a[1])?(f=ia(a[1]),j=f.get("rgb"),m=f.get("a")):(j=a[1],m=1);q.push(a[0]*100+"% "+j);b?(r=m,p=j):(t=m,y=j)});if(c==="fill")if(i==="gradient")c=l.x1||l[0]||0,a=l.y1||l[1]||0,n=l.x2||l[2]||0,l=l.y2||l[3]||0,x='angle="'+(90-V.atan((l-a)/(n-c))*180/pa)+'"',ca();else{var k=l.r,s=k*2,v=k*2,B=l.cx,A=l.cy,u=b.radialReference,z,k=function(){u&&(z= -d.getBBox(),B+=(u[0]-z.x)/z.width-0.5,A+=(u[1]-z.y)/z.height-0.5,s*=u[2]/z.width,v*=u[2]/z.height);x='src="'+O.global.VMLRadialGradientURL+'" size="'+s+","+v+'" origin="0.5,0.5" position="'+B+","+A+'" color2="'+y+'" ';ca()};d.added?k():d.onAdd=k;k=p}else k=j}else if(g.test(a)&&b.tagName!=="IMG")f=ia(a),d[c+"-opacitySetter"](f.get("a"),c,b),k=f.get("rgb");else{k=b.getElementsByTagName(c);if(k.length)k[0].opacity=1,k[0].type="solid";k=a}return k},prepVML:function(a){var b=this.isIE8,a=a.join("");b? -(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:Ba.prototype.html,path:function(a){var b={coordsize:"10 10"};Ja(a)?b.d=a:Z(a)&&v(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(Z(a))c=a.r,b=a.y,a=a.x;d.isCircle= -!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ma).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):Ba.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;M(a,{flip:"x",left:F(d.width)-(e?F(e.top): -1),top:F(d.height)-(e?F(e.left):1),rotation:-90});o(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=T(f),i=aa(f),k=T(g),j=aa(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*k,b+h*j];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*k,b+c*j,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ -c,b+d/2,"e"]},rect:function(a,b,c,d,e){return Ba.prototype.symbols[!q(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};u.VMLRenderer=K=function(){this.init.apply(this,arguments)};K.prototype=D(Ba.prototype,Cb);cb=K}Ba.prototype.measureSpanWidth=function(a,b){var c=z.createElement("span"),d;d=z.createTextNode(a);c.appendChild(d);M(c,b);this.box.appendChild(c);d=c.offsetWidth;Ua(c);return d};var Ob;if(ha)u.CanVGRenderer=K=function(){Ea="http://www.w3.org/1999/xhtml"},K.prototype.symbols={},Ob=function(){function a(){var a= -b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){if(b.length===0){var e=z.getElementsByTagName("head")[0],f=z.createElement("script");f.type="text/javascript";f.src=d;f.onload=a;e.appendChild(f)}b.push(c)}}}(),cb=K;Wa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.categories,e=a.names,f=this.pos,g=b.labels,h=a.tickPositions,i=f===h[0],k=f===h[h.length-1],e=d?p(d[f],e[f],f):f,d=this.label,h=h.info,j;a.isDatetimeAxis&&h&&(j=b.dateTimeLabelFormats[h.higherRanks[f]|| -h.unitName]);this.isFirst=i;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:i,isLast:k,dateTimeLabelFormat:j,value:a.isLog?fa(la(e)):e});q(d)?d&&d.attr({text:b}):(this.labelLength=(this.label=d=q(b)&&g.enabled?c.renderer.text(b,0,0,g.useHTML).css(D(g.style)).add(a.labelGroup):null)&&d.getBBox().width,this.rotation=0)},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0},handleOverflow:function(a){var b=this.axis,c=a.x,d=b.chart.chartWidth, -e=b.chart.spacing,f=p(b.labelLeft,E(b.pos,e[3])),e=p(b.labelRight,s(b.pos+b.len,d-e[1])),g=this.label,h=this.rotation,i={left:0,center:0.5,right:1}[b.labelAlign],k=g.getBBox().width,j=b.slotWidth,m=1,l,n={};if(h)h<0&&c-i*k<f?l=A(c/T(h*ga)-f):h>0&&c+i*k>e&&(l=A((d-c)/T(h*ga)));else if(d=c+(1-i)*k,c-i*k<f?j=a.x+j*(1-i)-f:d>e&&(j=e-a.x+j*i,m=-1),j=E(b.slotWidth,j),j<b.slotWidth&&b.labelAlign==="center"&&(a.x+=m*(b.slotWidth-j-i*(b.slotWidth-E(k,j)))),k>j||b.autoRotation&&g.styles.width)l=j;if(l){n.width= -l;if(!b.options.labels.style.textOverflow)n.textOverflow="ellipsis";g.css(n)}},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,k=i.transA,j=i.reversed,m=i.staggerLines,l=i.tickRotCorr|| -{x:0,y:0},n=e.y;q(n)||(n=i.side===2?l.y+8:n=T(c.rotation*ga)*(l.y-c.getBBox(!1,0).height/2));a=a+e.x+l.x-(f&&d?f*k*(j?-1:1):0);b=b+n-(f&&!d?f*k*(j?1:-1):0);m&&(c=g/(h||1)%m,i.opposite&&(c=m-c-1),b+=c*(i.labelOffset/m));return{x:a,y:A(b)}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,k=this.pos,j=e.labels,m=this.gridLine,l=h?h+"Grid":"grid",n=h?h+"Tick": -"tick",t=e[l+"LineWidth"],r=e[l+"LineColor"],o=e[l+"LineDashStyle"],y=e[n+"Length"],l=p(e[n+"Width"],!h&&d.isXAxis?1:0),x=e[n+"Color"],w=e[n+"Position"],n=this.mark,q=j.step,ca=!0,s=d.tickmarkOffset,v=this.getPosition(g,k,s,b),u=v.x,v=v.y,A=g&&u===d.pos+d.len||!g&&v===d.pos?-1:1,c=p(c,1);this.isActive=!0;if(t){k=d.getPlotLinePath(k+s,t*A,b,!0);if(m===B){m={stroke:r,"stroke-width":t};if(o)m.dashstyle=o;if(!h)m.zIndex=1;if(b)m.opacity=0;this.gridLine=m=t?f.path(k).attr(m).add(d.gridGroup):null}if(!b&& -m&&k)m[this.isNew?"attr":"animate"]({d:k,opacity:c})}if(l&&y)w==="inside"&&(y=-y),d.opposite&&(y=-y),h=this.getMarkPath(u,v,y,l*A,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:x,"stroke-width":l,opacity:c}).add(d.axisGroup);if(i&&!isNaN(u))i.xy=v=this.getLabelPosition(u,v,i,g,j,s,a,q),this.isFirst&&!this.isLast&&!p(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!p(e.showLastLabel,1)?ca=!1:g&&!d.isRadial&&!j.step&&!j.rotation&&!b&&c!==0&&this.handleOverflow(v),q&&a%q&&(ca=!1), -ca&&!isNaN(v.y)?(v.opacity=c,i[this.isNew?"attr":"animate"](v),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Ta(this,this.axis)}};u.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};u.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=a.options,e=d.label,f=a.label,g=d.width,h=d.to,i=d.from,k=q(i)&&q(h),j=d.value,m=d.dashStyle,l=a.svgElem,n=[],t,r=d.color,p=d.zIndex,o=d.events,x={},w=b.chart.renderer;b.isLog&&(i=Ca(i),h=Ca(h),j=Ca(j));if(g){if(n= -b.getPlotLinePath(j,g),x={stroke:r,"stroke-width":g},m)x.dashstyle=m}else if(k){n=b.getPlotBandPath(i,h,d);if(r)x.fill=r;if(d.borderWidth)x.stroke=d.borderColor,x["stroke-width"]=d.borderWidth}else return;if(q(p))x.zIndex=p;if(l)if(n)l.show(),l.animate({d:n});else{if(l.hide(),f)a.label=f=f.destroy()}else if(n&&n.length&&(a.svgElem=l=w.path(n).attr(x).add(),o))for(t in d=function(b){l.on(b,function(c){o[b].apply(a,[c])})},o)d(t);if(e&&q(e.text)&&n&&n.length&&b.width>0&&b.height>0&&!n.flat){e=D({align:c&& -k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},e);if(!f){x={align:e.textAlign||e.align,rotation:e.rotation};if(q(p))x.zIndex=p;a.label=f=w.text(e.text,0,0,e.useHTML).attr(x).css(e.style).add()}b=[n[1],n[4],k?n[6]:n[1]];k=[n[2],n[5],k?n[7]:n[2]];n=Sa(b);c=Sa(k);f.align(e,!1,{x:n,y:c,width:Da(b)-n,height:Da(k)-c});f.show()}else f&&f.hide();return a},destroy:function(){ma(this.axis.plotLinesAndBands,this);delete this.axis;Ta(this)}};var ja=u.Axis=function(){this.init.apply(this, -arguments)};ja.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#D8D8D8",labels:{enabled:!0,style:{color:"#606060",cursor:"default",fontSize:"11px"},x:0,y:15},lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1, -startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return u.numberFormat(this.total,-1)},style:D(ba.line.dataLabels.style,{color:"#000000"})}}, -defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0,y:null},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.chart=a;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite? -1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.reversed=d.reversed;this.visible=d.visible!==!1;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=this.names||[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=q(d.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands= -{};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stacksTouched=0;this.min=this.max=null;this.crosshair=p(d.crosshair,ta(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;qa(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===B)this.reversed=!0;this.removePlotLine= -this.removePlotBand=this.removePlotBandOrLine;for(f in d)N(this,f,d[f]);if(this.isLog)this.val2lin=Ca,this.lin2val=la},setOptions:function(a){this.options=D(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],D(O[this.coll],a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=O.lang.numericSymbols,f=e&&e.length, -g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=La(h,this);else if(c)g=b;else if(d)g=Ra(d,b);else if(f&&a>=1E3)for(;f--&&g===B;)c=Math.pow(1E3,f+1),a>=c&&b*10%c===0&&e[f]!==null&&(g=u.numberFormat(b/c,-1)+e[f]);g===B&&(g=P(b)>=1E4?u.numberFormat(b,-1):u.numberFormat(b,-1,B,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();o(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d=c.options,e=d.threshold,f;a.hasVisibleSeries=!0;a.isLog&&e<=0&&(e=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=E(p(a.dataMin,d[0]),Sa(d)),a.dataMax=s(p(a.dataMax,d[0]),Da(d))}else{c.getExtremes();f=c.dataMax;c=c.dataMin;if(q(c)&&q(f))a.dataMin=E(p(a.dataMin,c),c),a.dataMax=s(p(a.dataMax,f),f);if(q(e))a.threshold=e;if(!d.softThreshold||a.isLog)a.softThreshold=!1}}})},translate:function(a,b,c,d,e,f){var g=this.linkedParent||this,h=1,i=0,k=d?g.oldTransA: -g.transA,d=d?g.oldMin:g.min,j=g.minPixelPadding,e=(g.doPostTranslate||g.isLog&&e)&&g.lin2val;if(!k)k=g.transA;if(c)h*=-1,i=g.len;g.reversed&&(h*=-1,i-=h*(g.sector||g.len));b?(a=a*h+i,a-=j,a=a/k+d,e&&(a=g.lin2val(a))):(e&&(a=g.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*k+i+h*j+(ka(f)?k*f*g.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a, -b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,k,j=c&&f.oldChartHeight||f.chartHeight,m=c&&f.oldChartWidth||f.chartWidth,l;i=this.transB;var n=function(a,b,c){if(a<b||a>c)d?a=E(s(b,a),c):l=!0;return a},e=p(e,this.translate(a,null,null,c)),a=c=A(e+i);i=k=A(j-e-i);isNaN(e)?l=!0:this.horiz?(i=h,k=j-this.bottom,a=c=n(a,g,g+this.width)):(a=g,c=m-this.right,i=k=n(i,h,h+this.height));return l&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,k],b||1)},getLinearTickPositions:function(a,b,c){var d,e=fa(S(b/ -a)*a),f=fa(ua(c/a)*a),g=[];if(b===c&&ka(b))return[b];for(b=e;b<=f;){g.push(b);b=fa(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e,f=this.pointRangePadding||0;e=this.min-f;var f=this.max+f,g=f-e;if(g&&g/c<this.len/3)if(this.isLog){f=b.length;for(e=1;e<f;e++)d=d.concat(this.getLogTickPositions(c,b[e-1],b[e],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c), -e,f,a.startOfWeek));else for(b=e+(b[0]-e)%c;b<=f;b+=c)d.push(b);d.length!==0&&this.trimTicks(d,a.startOnTick,a.endOnTick);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,k,j;if(this.isXAxis&&this.minRange===B&&!this.isLog)q(a.min)||q(a.max)?this.minRange=null:(o(this.series,function(a){i=a.xData;for(g=k=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===B||h<f)f=h}),this.minRange=E(f*5,this.dataMax-this.dataMin)); -if(c-b<this.minRange){j=this.minRange;d=(j-c+b)/2;d=[b-d,p(a.min,b-d)];if(e)d[2]=this.dataMin;b=Da(d);c=[b+j,p(a.max,b+j)];if(e)c[2]=this.dataMax;c=Sa(c);c-b<j&&(d[0]=c-j,d[1]=p(a.min,c-j),b=Da(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,k=b.transA,j=b.isXAxis;if(j||i||d)if(h?(f=h.minPointOffset,g=h.pointRangePadding):(o(b.series,function(a){var b=a.closestPointRange;!a.noSharedTooltip&&q(b)&& -(e=q(e)?E(e,b):b)}),o(b.series,function(a){var c=i?1:j?p(a.options.pointRange,e,0):b.axisPointRange||0,a=a.options.pointPlacement;d=s(d,c);b.single||(f=s(f,ya(a)?0:c/2),g=s(g,a==="on"?0:c))})),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=E(d,c),j)b.closestPointRange=e;if(a)b.oldTransA=k;b.translationSlope=b.transA=k=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=k*f},minFromRange:function(){return this.max-this.range},setTickInterval:function(a){var b= -this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=d.maxPadding,k=d.minPadding,j=d.tickInterval,m=d.tickPixelInterval,l=b.categories,n=b.threshold,t=b.softThreshold,r,X,y,x;!f&&!l&&!h&&this.getTickAmount();y=p(b.userMin,d.min);x=p(b.userMax,d.max);h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=p(c.min,c.dataMin),b.max=p(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&Y(11,1)):(!t&&q(n)&&(b.dataMin>=n?(r=n,k=0):b.dataMax<=n&&(X=n, -i=0)),b.min=p(y,r,b.dataMin),b.max=p(x,X,b.dataMax));if(e)!a&&E(b.min,p(b.dataMin,b.min))<=0&&Y(10,1),b.min=fa(Ca(b.min),15),b.max=fa(Ca(b.max),15);if(b.range&&q(b.max))b.userMin=b.min=y=s(b.min,b.minFromRange()),b.userMax=x=b.max,b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!l&&!b.axisPointRange&&!b.usePercentage&&!h&&q(b.min)&&q(b.max)&&(c=b.max-b.min))!q(y)&&k&&(b.min-=c*k),!q(x)&&i&&(b.max+=c*i);if(ka(d.floor))b.min=s(b.min,d.floor);if(ka(d.ceiling))b.max=E(b.max,d.ceiling); -if(t&&q(b.dataMin))if(n=n||0,!q(y)&&b.min<n&&b.dataMin>=n)b.min=n;else if(!q(x)&&b.max>n&&b.dataMax<=n)b.max=n;b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:h&&!j&&m===b.linkedParent.options.tickPixelInterval?j=b.linkedParent.tickInterval:p(j,this.tickAmount?(b.max-b.min)/s(this.tickAmount-1,1):void 0,l?1:(b.max-b.min)*m/s(b.len,m));g&&!a&&o(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions(); -if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange&&!j)b.tickInterval=s(b.pointRange,b.tickInterval);a=p(d.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);if(!j&&b.tickInterval<a)b.tickInterval=a;if(!f&&!e&&!j)b.tickInterval=tb(b.tickInterval,null,sb(b.tickInterval),p(d.allowDecimals,!(b.tickInterval>0.5&&b.tickInterval<5&&b.max>1E3&&b.max<9999)),!!this.tickAmount);if(!this.tickAmount&&this.len)b.tickInterval=b.unsquish();this.setTickPositions()}, -setTickPositions:function(){var a=this.options,b,c=a.tickPositions,d=a.tickPositioner,e=a.startOnTick,f=a.endOnTick,g;this.tickmarkOffset=this.categories&&a.tickmarkPlacement==="between"&&this.tickInterval===1?0.5:0;this.minorTickInterval=a.minorTickInterval==="auto"&&this.tickInterval?this.tickInterval/5:a.minorTickInterval;this.tickPositions=b=c&&c.slice();if(!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions, -this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b=[b[0],b.pop()]),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max]))))this.tickPositions=b=d;if(!this.isLinked)this.trimTicks(b,e,f),this.min===this.max&&q(this.min)&&!this.tickAmount&&(g=!0,this.min-=0.5,this.max+=0.5),this.single=g,!c&&!d&&this.adjustTickAmount()},trimTicks:function(a,b,c){var d=a[0],e= -a[a.length-1],f=this.minPointOffset||0;b?this.min=d:this.min-f>d&&a.shift();c?this.max=e:this.max+f<e&&a.pop();a.length===0&&q(d)&&a.push((e+d)/2)},alignToOthers:function(){var a={},b,c=this.options;this.chart.options.chart.alignTicks!==!1&&c.alignTicks!==!1&&o(this.chart[this.coll],function(c){var e=c.options,e=[c.horiz?e.left:e.top,e.width,e.height,e.pane].join(",");c.series.length&&(a[e]?b=!0:a[e]=1)});return b},getTickAmount:function(){var a=this.options,b=a.tickAmount,c=a.tickPixelInterval;!q(a.tickInterval)&& -this.len<c&&!this.isRadial&&!this.isLog&&a.startOnTick&&a.endOnTick&&(b=2);!b&&this.alignToOthers()&&(b=ua(this.len/c)+1);if(b<4)this.finalTickAmt=b,b=5;this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,e=b&&b.length;if(e<c){for(;b.length<c;)b.push(fa(b[b.length-1]+a));this.transA*=(e-1)/(c-1);this.max=b[b.length-1]}else e>c&&(this.tickInterval*=2,this.setTickPositions());if(q(d)){for(a=c=b.length;a--;)(d===3&&a%2===1|| -d<=2&&a>0&&a<c-1)&&b.splice(a,1);this.finalTickAmt=B}},setScale:function(){var a,b;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();b=this.len!==this.oldAxisLength;o(this.series,function(b){if(b.isDirtyData||b.isDirty||b.xAxis.isDirty)a=!0});if(b||a||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax||this.alignToOthers()){if(this.resetStacks&&this.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(), -this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,!this.isDirty)this.isDirty=b||this.min!==this.oldMin||this.max!==this.oldMax}else this.cleanStacks&&this.cleanStacks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=p(c,!0);o(f.series,function(a){delete a.kdTree});e=v(e,{min:a,max:b});H(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,e=this.options,f=E(c,p(e.min,c)),e=s(d,p(e.max,d));this.allowZoomOutside|| -(q(c)&&a<=f&&(a=f),q(d)&&b>=e&&(b=e));this.displayBtn=a!==B||b!==B;this.setExtremes(a,b,!1,B,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=p(b.width,a.plotWidth-c+(b.offsetRight||0)),f=p(b.height,a.plotHeight),g=p(b.top,a.plotTop),b=p(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseFloat(f)/100*a.plotHeight);c.test(g)&&(g=parseFloat(g)/100*a.plotHeight+a.plotTop);this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight- -f-g;this.right=a.chartWidth-e-b;this.len=s(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?fa(la(this.min)):this.min,max:a?fa(la(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?la(this.min):this.min,b=b?la(this.max):this.max;a===null?a=b<0?b:c:c>a?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(p(a,0)-this.side*90+720)%360;return a>15&& -a<165?"right":a>195&&a<345?"left":"center"},unsquish:function(){var a=this.ticks,b=this.options.labels,c=this.horiz,d=this.tickInterval,e=d,f=this.len/(((this.categories?1:0)+this.max-this.min)/d),g,h=b.rotation,i=this.chart.renderer.fontMetrics(b.style.fontSize,a[0]&&a[0].label),k,j=Number.MAX_VALUE,m,l=function(a){a/=f||1;a=a>1?ua(a):1;return a*d};c?(m=!b.staggerLines&&!b.step&&(q(h)?[h]:f<p(b.autoRotationLimit,80)&&b.autoRotation))&&o(m,function(a){var b;if(a===h||a&&a>=-90&&a<=90)k=l(P(i.h/aa(ga* -a))),b=k+P(a/360),b<j&&(j=b,g=a,e=k)}):b.step||(e=l(i.h));this.autoRotation=m;this.labelRotation=p(g,h);return e},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,e=this.options.labels,f=this.horiz,g=a.margin,h=this.categories?c.length:c.length-1,g=this.slotWidth=f&&(e.step||0)<2&&!e.rotation&&(this.staggerLines||1)*a.plotWidth/h||!f&&(g[3]&&g[3]-a.spacing[3]||a.chartWidth*0.33),i=s(1,A(g-2*(e.padding||5))),k={},h=b.fontMetrics(e.style.fontSize,d[0]&&d[0].label), -j=e.style.textOverflow,m,l=0,n,t;if(!ya(e.rotation))k.rotation=e.rotation||0;if(this.autoRotation)o(c,function(a){if((a=d[a])&&a.labelLength>l)l=a.labelLength}),l>i&&l>h.h?k.rotation=this.labelRotation:this.labelRotation=0;else if(g&&(m={width:i+"px"},!j)){m.textOverflow="clip";for(n=c.length;!f&&n--;)if(t=c[n],i=d[t].label)if(i.styles.textOverflow==="ellipsis"&&i.css({textOverflow:"clip"}),i.getBBox().height>this.len/c.length-(h.h-h.f)||d[t].labelLength>g)i.specCss={textOverflow:"ellipsis"}}if(k.rotation&& -(m={width:(l>a.chartHeight*0.5?a.chartHeight*0.33:a.chartHeight)+"px"},!j))m.textOverflow="ellipsis";this.labelAlign=k.align=e.align||this.autoLabelAlign(this.labelRotation);o(c,function(a){var b=(a=d[a])&&a.label;if(b)b.attr(k),m&&b.css(D(m,b.specCss)),delete b.specCss,a.rotation=k.rotation});this.tickRotCorr=b.rotCorr(h.b,this.labelRotation||0,this.side!==0)},hasData:function(){return this.hasVisibleSeries||q(this.min)&&q(this.max)&&!!this.tickPositions},getOffset:function(){var a=this,b=a.chart, -c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,k,j,m=0,l,n=0,t=d.title,r=d.labels,X=0,y=a.opposite,x=b.axisOffset,b=b.clipOffset,w=[-1,1,1,-1][h],v,ca=a.axisParent;k=a.hasData();a.showAxis=j=k||p(d.showEmpty,!0);a.staggerLines=a.horiz&&r.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(ca),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(ca),a.labelGroup=c.g("axis-labels").attr({zIndex:r.zIndex||7}).addClass("highcharts-"+ -a.coll.toLowerCase()+"-labels").add(ca);if(k||a.isLinked){if(o(e,function(b){f[b]?f[b].addLabel():f[b]=new Wa(a,b)}),a.renderUnsquish(),r.reserveSpace!==!1&&(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign||a.labelAlign==="center")&&o(e,function(a){X=s(f[a].getLabelSize(),X)}),a.staggerLines)X*=a.staggerLines,a.labelOffset=X*(a.opposite?-1:1)}else for(v in f)f[v].destroy(),delete f[v];if(t&&t.text&&t.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(t.text,0,0,t.useHTML).attr({zIndex:7,rotation:t.rotation|| -0,align:t.textAlign||{low:y?"right":"left",middle:"center",high:y?"left":"right"}[t.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(t.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(j)m=a.axisTitle.getBBox()[g?"height":"width"],l=t.offset,n=q(l)?0:p(t.margin,g?5:10);a.axisTitle[j?"show":"hide"](!0)}a.offset=w*p(d.offset,x[h]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};c=h===2?a.tickRotCorr.y:0;g=Math.abs(X)+n+(X&&w*(g?p(r.y,a.tickRotCorr.y+8):r.x)-c);a.axisTitleMargin=p(l,g);x[h]= -s(x[h],a.axisTitleMargin+m+w*a.offset,g);d=d.offset?0:S(d.lineWidth/2)*2;b[i]=s(b[i],d)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite, -h=this.offset,i=e.x||0,k=e.y||0,j=F(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?j:0);return{x:a?d+i:b+(g?this.width:0)+h+i,y:a?b+k-(g?this.height:0)+h:d+k}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.ticks,k=a.minorTicks,j=a.alternateBands,m=d.stackLabels,l=d.alternateGridColor,n=a.tickmarkOffset,t=d.lineWidth, -r,p=b.hasRendered&&q(a.oldMin)&&!isNaN(a.oldMin),y=a.showAxis,x=c.globalAnimation,w,s;a.labelEdge.length=0;a.overlap=!1;o([i,k,j],function(a){for(var b in a)a[b].isActive=!1});if(a.hasData()||f){a.minorTickInterval&&!a.categories&&o(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Wa(a,b,"minor"));p&&k[b].isNew&&k[b].render(null,!0);k[b].render(null,!1,1)});if(g.length&&(o(g,function(b,c){if(!f||b>=a.min&&b<=a.max)i[b]||(i[b]=new Wa(a,b)),p&&i[b].isNew&&i[b].render(c,!0,0.1),i[b].render(c)}), -n&&(a.min===0||a.single)))i[-1]||(i[-1]=new Wa(a,-1,null,!0)),i[-1].render(-1);l&&o(g,function(c,d){s=g[d+1]!==B?g[d+1]+n:a.max-n;if(d%2===0&&c<a.max&&s<=a.max+(b.polar?-n:n))j[c]||(j[c]=new u.PlotLineOrBand(a)),w=c+n,j[c].options={from:e?la(w):w,to:e?la(s):s,color:l},j[c].render(),j[c].isActive=!0});if(!a._addedPlotLB)o((d.plotLines||[]).concat(d.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0}o([i,k,j],function(a){var c,d,e=[],f=x?x.duration||500:0;for(c in a)if(!a[c].isActive)a[c].render(c, -!1,0),a[c].isActive=!1,e.push(c);Qa(function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])},a===j||!b.hasRendered||!f?0:f)});if(t)r=a.getLinePath(t),a.axisLine?a.axisLine.animate({d:r}):a.axisLine=c.path(r).attr({stroke:d.lineColor,"stroke-width":t,zIndex:7}).add(a.axisGroup),a.axisLine[y?"show":"hide"](!0);if(h&&y)h[h.isNew?"attr":"animate"](a.getTitlePosition()),h.isNew=!1;m&&m.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){this.visible&&(this.render(), -o(this.plotLinesAndBands,function(a){a.render()}));o(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||U(b);for(d in c)Ta(c[d]),c[d]=null;o([b.ticks,b.minorTicks,b.alternateBands],function(a){Ta(a)});for(a=e.length;a--;)e[a].destroy();o("stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup".split(","),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},drawCrosshair:function(a,b){var c,d=this.crosshair, -e,f;if(!this.crosshair||(q(b)||!p(d.snap,!0))===!1||b&&b.series&&b.series[this.coll]!==this)this.hideCrosshair();else if(p(d.snap,!0)?q(b)&&(c=this.isXAxis?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos,c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:p(b.stackY,b.y))||null:this.getPlotLinePath(null,null,null,null,c)||null,c===null)this.hideCrosshair();else if(e=this.categories&&!this.isRadial,f=p(d.width,e?this.transA:1),this.cross)this.cross.attr({d:c,visibility:"visible", -"stroke-width":f});else{e={"stroke-width":f,stroke:d.color||(e?"rgba(155,200,255,0.2)":"#C0C0C0"),zIndex:p(d.zIndex,2)};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}},hideCrosshair:function(){this.cross&&this.cross.hide()}};v(ja.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b,null,null,!0),d=this.getPlotLinePath(a,null,null,!0);d&&c?(d.flat=d.toString()===c.toString(),d.push(c[4],c[5],c[1],c[2])):d=null;return d},addPlotBand:function(a){return this.addPlotBandOrLine(a, -"plotBands")},addPlotLine:function(a){return this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new u.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();o([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id=== -a&&ma(b,b[e])})}});ja.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=O.global.useUTC,h,i=new oa(b-Za(b)),k=a.unitRange,j=a.count;if(q(b)){i[Gb](k>=G.second?0:j*S(i.getMilliseconds()/j));if(k>=G.second)i[Hb](k>=G.minute?0:j*S(i.getSeconds()/j));if(k>=G.minute)i[Ib](k>=G.hour?0:j*S(i[ub]()/j));if(k>=G.hour)i[Jb](k>=G.day?0:j*S(i[vb]()/j));if(k>=G.day)i[xb](k>=G.month?1:j*S(i[$a]()/j));k>=G.month&&(i[yb](k>=G.year?0:j*S(i[ab]()/j)),h=i[bb]());k>=G.year&&(h-=h%j,i[zb](h));if(k===G.week)i[xb](i[$a]()- -i[wb]()+p(d,1));b=1;if(rb||ib)i=i.getTime(),i=new oa(i+Za(i));h=i[bb]();for(var d=i.getTime(),m=i[ab](),l=i[$a](),n=(G.day+(g?Za(i):i.getTimezoneOffset()*6E4))%G.day;d<c;)e.push(d),k===G.year?d=lb(h+b*j,0):k===G.month?d=lb(h,m+b*j):!g&&(k===G.day||k===G.week)?d=lb(h,m,l+b*j*(k===G.day?1:7)):d+=k*j,b++;e.push(d);o(Oa(e,function(a){return k<=G.hour&&a%G.day===n}),function(a){f[a]="day"})}e.info=v(a,{higherRanks:f,totalRange:k*j});return e};ja.prototype.normalizeTimeTickInterval=function(a,b){var c= -b||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],d=c[c.length-1],e=G[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=G[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+G[c[g+1][0]])/2)break;e===G.year&&a<5*e&&(f=[1,2,5]);c=tb(a/e,f,d[0]==="year"?s(sb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};ja.prototype.getLogTickPositions=function(a,b,c,d){var e= -this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=A(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=S(b),h,i,k,j,m,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!m;f++){i=e.length;for(h=0;h<i&&!m;h++)k=Ca(la(f)*e[h]),k>b&&(!d||j<=c)&&j!==B&&g.push(j),j>c&&(m=!0),j=k}else if(b=la(b),c=la(c),a=e[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length: -f)||1)),a=tb(a,null,sb(a)),g=Ha(this.getLinearTickPositions(a,b,c),Ca),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g};var Pb=u.Tooltip=function(){this.init.apply(this,arguments)};Pb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=F(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c, -r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});ha||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden&&(P(a-f.x)>1||P(b-f.y)>1),h=e.followPointer||e.len>1;v(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?B:g?(2*f.anchorX+c)/3:c,anchorY:h?B:g?(f.anchorY+d)/2:d});e.label.attr(f); -if(g)clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(a){var b=this;clearTimeout(this.hideTimer);a=p(a,this.options.hideDelay,500);if(!this.isHidden)this.hideTimer=Qa(function(){b.label[a?"fadeOut":"hide"]();b.isHidden=!0},a)},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=d.plotLeft,h=0,i=0,k,j,a=ta(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===B&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY- -f]);c||(o(a,function(a){k=a.series.yAxis;j=a.series.xAxis;h+=a.plotX+(!e&&j?j.left-g:0);i+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&k?k.top-f:0)}),h/=a.length,i/=a.length,c=[e?d.plotWidth-i:h,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-h:i]);return Ha(c,A)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g=c.h||0,h,i=["y",d.chartHeight,b,c.plotY+d.plotTop,d.plotTop,d.plotTop+d.plotHeight],k=["x",d.chartWidth,a,c.plotX+d.plotLeft,d.plotLeft,d.plotLeft+d.plotWidth], -j=p(c.ttBelow,d.inverted&&!c.negative||!d.inverted&&c.negative),m=function(a,b,c,d,h,i){var k=c<d-e,l=d+e+c<b,m=d-e-c;d+=e;if(j&&l)f[a]=d;else if(!j&&k)f[a]=m;else if(k)f[a]=E(i-c,m-g<0?m:m-g);else if(l)f[a]=s(h,d+g+c>b?d:d+g);else return!1},l=function(a,b,c,d){var g;d<e||d>b-e?g=!1:f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2;return g},n=function(a){var b=i;i=k;k=b;h=a},t=function(){m.apply(0,i)!==!1?l.apply(0,k)===!1&&!h&&(n(!0),t()):h?f.x=f.y=0:(n(!0),t())};(d.inverted||this.len>1)&&n();t();return f},defaultFormatter:function(a){var b= -this.points||ta(this),c;c=[a.tooltipFooterHeaderFormatter(b[0])];c=c.concat(a.bodyFormatter(b));c.push(a.tooltipFooterHeaderFormatter(b[0],!0));return c.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h,i={},k,j=[];k=e.formatter||this.defaultFormatter;var i=c.hoverPoints,m,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=ta(a)[0].series.tooltipOptions.followPointer;h=this.getAnchor(a,b);f=h[0];g=h[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints= -a,i&&o(i,function(a){a.setState()}),o(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),i={x:a[0].category,y:a[0].y},i.points=j,this.len=j.length,a=a[0]):i=a.getLabelConfig();k=k.call(i,this);i=a.series;this.distance=p(i.tooltipOptions.distance,16);k===!1?this.hide():(this.isHidden&&(Pa(d),d.attr("opacity",1).show()),d.attr({text:k}),m=e.borderColor||a.color||i.color||"#606060",d.attr({stroke:m}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow,h:h[2]||0}),this.isHidden= -!1);H(c,"tooltipRefresh",{text:k,x:f+c.plotLeft,y:g+c.plotTop,borderColor:m})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(A(c.x),A(c.y||0),a.plotX+b.plotLeft,a.plotY+b.plotTop)},getXDateFormat:function(a,b,c){var d,b=b.dateTimeLabelFormats,e=c&&c.closestPointRange,f,g={millisecond:15,second:12,minute:9,hour:6,day:3},h,i="millisecond";if(e){h=Ra("%m-%d %H:%M:%S.%L",a.x);for(f in G){if(e===G.week&&+Ra("%w", -a.x)===c.options.startOfWeek&&h.substr(6)==="00:00:00.000"){f="week";break}if(G[f]>e){f=i;break}if(g[f]&&h.substr(g[f])!=="01-01 00:00:00.000".substr(g[f]))break;f!=="week"&&(i=f)}f&&(d=b[f])}else d=b.day;return d||b.year},tooltipFooterHeaderFormatter:function(a,b){var c=b?"footer":"header",d=a.series,e=d.tooltipOptions,f=e.xDateFormat,g=d.xAxis,h=g&&g.options.type==="datetime"&&ka(a.key),c=e[c+"Format"];h&&!f&&(f=this.getXDateFormat(a,e,g));h&&f&&(c=c.replace("{point.key}","{point.key:"+f+"}")); -return La(c,{point:a,series:d})},bodyFormatter:function(a){return Ha(a,function(a){var c=a.series.tooltipOptions;return(c.pointFormatter||a.point.tooltipFormatter).call(a.point,c.pointFormat)})}};var ra;db=z&&z.documentElement.ontouchstart!==B;var Ya=u.Pointer=function(a,b){this.init(a,b)};Ya.prototype={init:function(a,b){var c=b.chart,d=c.events,e=ha?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&& -!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(u.Tooltip&&b.tooltip.enabled)a.tooltip=new Pb(a,b.tooltip),this.followTouchMove=p(b.tooltip.followTouchMove,!0);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||C.event;if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Bb(this.chart.container);d.pageX===B?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left, -d=d.pageY-b.top);return v(a,{chartX:A(c),chartY:A(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};o(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e=d?d.shared:!1,f=b.hoverPoint,g=b.hoverSeries,h,i=Number.MAX_VALUE,k,j,m,l=[],n,t;if(!e&&!g)for(h=0;h<c.length;h++)if(c[h].directTouch||!c[h].options.stickyTracking)c=[];g&&(e?g.noSharedTooltip: -g.directTouch)&&f?n=f:(o(c,function(b){k=b.noSharedTooltip&&e;j=!e&&b.directTouch;b.visible&&!k&&!j&&p(b.options.enableMouseTracking,!0)&&(t=b.searchPoint(a,!k&&b.kdDimensions===1))&&l.push(t)}),o(l,function(a){m=!e&&a.series.kdDimensions===1?a.dist:a.distX;a&&typeof m==="number"&&m<i&&(i=m,n=a)}));if(n&&(n!==this.prevKDPoint||d&&d.isHidden)){if(e&&!n.series.noSharedTooltip){for(h=l.length;h--;)(l[h].clientX!==n.clientX||l[h].series.noSharedTooltip)&&l.splice(h,1);l.length&&d&&d.refresh(l,a);o(l, -function(b){b.onMouseOver(a,b!==(g&&g.directTouch&&f||n))})}else if(d&&d.refresh(n,a),!g||!g.directTouch)n.onMouseOver(a);this.prevKDPoint=n}else c=g&&g.tooltipOptions.followPointer,d&&c&&!d.isHidden&&(c=d.getAnchor([{}],a),d.updatePosition({plotX:c[0],plotY:c[1]}));if(!this._onDocumentMouseMove)this._onDocumentMouseMove=function(a){if(W[ra])W[ra].pointer.onDocumentMouseMove(a)},N(z,"mousemove",this._onDocumentMouseMove);o(b.axes,function(b){b.drawCrosshair(a,p(n,f))})},reset:function(a,b){var c= -this.chart,d=c.hoverSeries,e=c.hoverPoint,f=c.hoverPoints,g=c.tooltip,h=g&&g.shared?f:e;(a=a&&g&&h)&&o(ta(h),function(b){b.plotX===void 0&&(a=!1)});if(a)g.refresh(h),e&&(e.setState(e.state,!0),o(c.axes,function(a){p(a.options.crosshair&&a.options.crosshair.snap,!0)?a.drawCrosshair(null,e):a.hideCrosshair()}));else{if(e)e.onMouseOut();f&&o(f,function(a){a.setState()});if(d)d.onMouseOut();g&&g.hide(b);if(this._onDocumentMouseMove)U(z,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove= -null;o(c.axes,function(a){a.hideCrosshair()});this.hoverX=c.hoverPoints=c.hoverPoint=null}},scaleGroups:function(a,b){var c=this.chart,d;o(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY= -this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,k=b.plotWidth,j=b.plotHeight,m,l=this.selectionMarker,n=this.mouseDownX,t=this.mouseDownY,r=c.panKey&&a[c.panKey+"Key"];if(!l||!l.touch)if(d<h?d=h:d>h+k&&(d=h+k),e<i?e=i:e>i+j&&(e=i+j),this.hasDragged=Math.sqrt(Math.pow(n-d,2)+Math.pow(t-e,2)),this.hasDragged>10){m=b.isInsidePlot(n-h,t-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&m&&!r&& -!l)this.selectionMarker=l=b.renderer.rect(h,i,f?1:k,g?1:j,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();l&&f&&(d-=n,l.attr({width:P(d),x:(d>0?0:d)+n}));l&&g&&(d=e-t,l.attr({height:P(d),y:(d>0?0:d)+t}));m&&!l&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this,c=this.chart,d=this.hasPinched;if(this.selectionMarker){var e={xAxis:[],yAxis:[]},f=this.selectionMarker,g=f.attr?f.attr("x"):f.x,h=f.attr?f.attr("y"):f.y,i=f.attr?f.attr("width"):f.width,k=f.attr?f.attr("height"): -f.height,j;if(this.hasDragged||d)o(c.axes,function(c){if(c.zoomEnabled&&q(c.min)&&(d||b[{xAxis:"zoomX",yAxis:"zoomY"}[c.coll]])){var f=c.horiz,n=a.type==="touchend"?c.minPixelPadding:0,t=c.toValue((f?g:h)+n),f=c.toValue((f?g+i:h+k)-n);e[c.coll].push({axis:c,min:E(t,f),max:s(t,f)});j=!0}}),j&&H(c,"selection",e,function(a){c.zoom(v(a,d?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();d&&this.scaleGroups()}if(c)M(c.container,{cursor:c._cursor}),c.cancelClick=this.hasDragged> -10,c.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){W[ra]&&W[ra].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,a=this.normalize(a,c);c&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=W[ra];if(a)a.pointer.reset(), -a.pointer.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart;ra=b.index;a=this.normalize(a);a.returnValue=!1;b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=L(a,"class")){if(c.indexOf(b)!==-1)return!0;if(c.indexOf("highcharts-container")!==-1)return!1}a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries, -a=a.relatedTarget||a.toElement;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&!this.inClass(a,"highcharts-series-"+b.index))b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(H(c.series,"click",v(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(v(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&H(b,"click",a)))},setDOMEvents:function(){var a= -this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};N(b,"mouseleave",a.onContainerMouseLeave);eb===1&&N(z,"mouseup",a.onDocumentMouseUp);if(db)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},eb===1&&N(z,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;U(this.chart.container,"mouseleave",this.onContainerMouseLeave); -eb||(U(z,"mouseup",this.onDocumentMouseUp),U(z,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};v(u.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,k=a?"x":"y",j=a?"X":"Y",m="chart"+j,l=a?"width":"height",n=i["plot"+(a? -"Left":"Top")],t,r,p=h||1,o=i.inverted,x=i.bounds[a?"h":"v"],w=b.length===1,q=b[0][m],s=c[0][m],v=!w&&b[1][m],u=!w&&c[1][m],A,c=function(){!w&&P(q-v)>20&&(p=h||P(s-u)/P(q-v));r=(n-s)/p+q;t=i["plot"+(a?"Width":"Height")]/p};c();b=r;b<x.min?(b=x.min,A=!0):b+t>x.max&&(b=x.max-t,A=!0);A?(s-=0.8*(s-g[k][0]),w||(u-=0.8*(u-g[k][1])),c()):g[k]=[s,u];o||(f[k]=r-n,f[l]=t);f=o?1/p:p;e[l]=t;e[k]=b;d[o?a?"scaleY":"scaleX":"scale"+j]=p;d["translate"+j]=f*n+(s-f*q)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown, -e=a.touches,f=e.length,g=b.lastValidTouch,h=b.hasZoom,i=b.selectionMarker,k={},j=f===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||b.runChartClick),m={};if(f>1)b.initiated=!0;h&&b.initiated&&!j&&a.preventDefault();Ha(e,function(a){return b.normalize(a)});if(a.type==="touchstart")o(e,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),g.x=[d[0].chartX,d[1]&&d[1].chartX],g.y=[d[0].chartY,d[1]&&d[1].chartY],o(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"], -d=a.minPixelPadding,e=a.toPixels(p(a.options.min,a.dataMin)),f=a.toPixels(p(a.options.max,a.dataMax)),g=E(e,f),e=s(e,f);b.min=E(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}}),b.res=!0;else if(d.length){if(!i)b.selectionMarker=i=v({destroy:va,touch:!0},c.plotBox);b.pinchTranslate(d,e,k,i,m,g);b.hasPinched=h;b.scaleGroups(k,m);if(!h&&b.followTouchMove&&f===1)this.runPointActions(b.normalize(a));else if(b.res)b.res=!1,this.reset(!1,0)}},touch:function(a,b){var c=this.chart;ra=c.index;a.touches.length===1?(a= -this.normalize(a),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY-c.plotTop)&&!c.openMenu?(b&&this.runPointActions(a),this.pinch(a)):b&&this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchStart:function(a){this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(a){W[ra]&&W[ra].pointer.drop(a)}});if(C.PointerEvent||C.MSPointerEvent){var wa={},Db=!!C.PointerEvent,Sb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in wa)wa.hasOwnProperty(a)&& -b.push({pageX:wa[a].pageX,pageY:wa[a].pageY,target:wa[a].target});return b},Eb=function(a,b,c,d){if((a.pointerType==="touch"||a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&W[ra])d(a),d=W[ra].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:va,touches:Sb()})};v(Ya.prototype,{onContainerPointerDown:function(a){Eb(a,"onContainerTouchStart","touchstart",function(a){wa[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Eb(a,"onContainerTouchMove", -"touchmove",function(a){wa[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!wa[a.pointerId].target)wa[a.pointerId].target=a.currentTarget})},onDocumentPointerUp:function(a){Eb(a,"onDocumentTouchEnd","touchend",function(a){delete wa[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,Db?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,Db?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(z,Db?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}}); -fb(Ya.prototype,"init",function(a,b,c){a.call(this,b,c);this.hasZoom&&M(b.container,{"-ms-touch-action":"none","touch-action":"none"})});fb(Ya.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(N)});fb(Ya.prototype,"destroy",function(a){this.batchMSEvents(U);a.call(this)})}var pb=u.Legend=function(a,b){this.init(a,b)};pb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=b.itemMarginTop||0;this.options=b;if(b.enabled)c.itemStyle=d,c.itemHiddenStyle= -D(d,b.itemHiddenStyle),c.itemMarginTop=e,c.padding=d=p(b.padding,8),c.initialItemX=d,c.initialItemY=d-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.symbolWidth=p(b.symbolWidth,16),c.pages=[],c.render(),N(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},k;d&&d.css({fill:c, -color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(k in i.stroke=h,g=a.convertAttribs(g),g)d=g[k],d!==B&&(i[k]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ua(a.checkbox)}, -destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight,e=this.titleHeight;if(b)c=b.translateY,o(this.allItems,function(f){var g=f.checkbox,h;g&&(h=c+e+g.y+(a||0)+3,M(g,{left:b.translateX+f.checkboxOffset+g.x-20+"px",top:h+"px",display:h>c-6&&h<c+d-6?"":"none"}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title= -this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},setText:function(a){var b=this.options;a.legendItem.attr({text:b.labelFormat?La(b.labelFormat,a):b.labelFormatter.call(a)})},renderItem:function(a){var b=this.chart,c=b.renderer,d=this.options,e=d.layout==="horizontal",f=this.symbolWidth,g=d.symbolPadding, -h=this.itemStyle,i=this.itemHiddenStyle,k=this.padding,j=e?p(d.itemDistance,20):0,m=!d.rtl,l=d.width,n=d.itemMarginBottom||0,t=this.itemMarginTop,r=this.initialItemX,o=a.legendItem,y=a.series&&a.series.drawLegendSymbol?a.series:a,x=y.options,x=this.createCheckboxForItem&&x&&x.showCheckbox,q=d.useHTML;if(!o){a.legendGroup=c.g("legend-item").attr({zIndex:1}).add(this.scrollGroup);a.legendItem=o=c.text("",m?f+g:-g,this.baseline||0,q).css(D(a.visible?h:i)).attr({align:m?"left":"right",zIndex:2}).add(a.legendGroup); -if(!this.baseline)this.fontMetrics=c.fontMetrics(h.fontSize,o),this.baseline=this.fontMetrics.f+3+t,o.attr("y",this.baseline);y.drawLegendSymbol(this,a);this.setItemEvents&&this.setItemEvents(a,o,q,h,i);this.colorizeItem(a,a.visible);x&&this.createCheckboxForItem(a)}this.setText(a);c=o.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||f+g+c.width+j+(x?20:0);this.itemHeight=g=A(a.legendItemHeight||c.height);if(e&&this.itemX-r+f>(l||b.chartWidth-2*k-r-d.x))this.itemX=r,this.itemY+=t+this.lastLineHeight+ -n,this.lastLineHeight=0;this.maxItemWidth=s(this.maxItemWidth,f);this.lastItemY=t+this.itemY+n;this.lastLineHeight=s(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=t+g+n,this.lastLineHeight=g);this.offsetWidth=l||s((e?this.itemX-r-j:f)+k,this.offsetWidth)},getAllItems:function(){var a=[];o(this.chart.series,function(b){var c=b.options;if(p(c.showInLegend,!q(c.linkedTo)?B:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},adjustMargins:function(a, -b){var c=this.chart,d=this.options,e=d.align.charAt(0)+d.verticalAlign.charAt(0)+d.layout.charAt(0);this.display&&!d.floating&&o([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(f,g){f.test(e)&&!q(a[g])&&(c[ob[g]]=s(c[ob[g]],c.legend[(g+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][g]*d[g%2?"x":"y"]+p(d.margin,12)+b[g]))})},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,k=a.options,j=a.padding,m=k.borderWidth,l=k.backgroundColor;a.itemX=a.initialItemX; -a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();jb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});k.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;a.lastLineHeight=0;o(e,function(b){a.renderItem(b)});g=(k.width||a.offsetWidth)+j;h=a.lastItemY+a.lastLineHeight+ -a.titleHeight;h=a.handleOverflow(h);h+=j;if(m||l){if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,k.borderRadius,m||0).attr({stroke:k.borderColor,"stroke-width":m||0,fill:l||"none"}).add(d).shadow(k.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;o(e,function(b){a.positionItem(b)});f&&d.align(v({width:g,height:h},k),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this, -c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,k=e.navigation,j=p(k.animation,!0),m=k.arrowSize||12,l=this.nav,n=this.pages,t=this.padding,r,q=this.allItems,y=function(a){i.attr({height:a});if(b.contentGroup.div)b.contentGroup.div.style.clip="rect("+t+"px,9999px,"+(t+a)+"px,0)"};e.layout==="horizontal"&&(f/=2);g&&(f=E(f,g));n.length=0;if(a>f){this.clipHeight=h=s(f-20-this.titleHeight-t,0);this.currentPage= -p(this.currentPage,1);this.fullHeight=a;o(q,function(a,b){var c=a._legendItemPos[1],d=A(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(r||c)!==n[e-1])n.push(r||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==r&&(r=c)});if(!i)i=b.clipRect=d.clipRect(0,t,9999,0),b.contentGroup.clip(i);y(h);if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,m,m).on("click",function(){b.scroll(-1,j)}).add(l),this.pager=d.text("",15,10).css(k.style).add(l),this.down= -d.symbol("triangle-down",0,0,m,m).on("click",function(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)y(c.chartHeight),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,k=this.padding;e>d&&(e=d);if(e>0)b!==B&&Va(b,this.chart),this.nav.attr({translateX:k,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}), -this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};K=u.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||a.fontMetrics.f;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-c+1,a.symbolWidth,c,a.options.symbolRadius|| -0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d=a.symbolWidth,e=this.chart.renderer,f=this.legendGroup,a=a.baseline-A(a.fontMetrics.b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=c=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b,c).add(f),c.isMarker=!0}};(/Trident\/7\.0/.test(Aa)||Na)&&fb(pb.prototype,"positionItem", -function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});var hb=u.Chart=function(){this.getArgs.apply(this,arguments)};u.chart=function(a,b,c){return new hb(a,b,c)};hb.prototype={callbacks:[],getArgs:function(){var a=[].slice.call(arguments);if(ya(a[0])||a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(a,b){var c,d=a.series;a.series=null;c=D(O,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing= -this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=W.length;W.push(f);eb++;d.reflow!==!1&&N(f,"load",function(){f.initReflow()});if(e)for(g in e)N(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=ha?!1:p(d.animation,!0);f.pointCount=f.colorCounter=f.symbolCounter=0;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=I[a.type||b.type||b.defaultSeriesType])|| -Y(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.hasCartesianSeries,k=this.isDirtyBox,j=c.length,m=j,l=this.renderer,n=l.isHidden(),p=[];Va(a,this);n&&this.cloneRenderTo();for(this.layOutTitles();m--;)if(a=c[m],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(m=j;m--;)if(a=c[m],a.options.stacking)a.isDirty= -!0;o(c,function(a){a.isDirty&&a.options.legendType==="point"&&(a.updateTotals&&a.updateTotals(),f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(i&&!this.isResizing)this.maxTicks=null,o(b,function(a){a.setScale()});this.getMargins();i&&(o(b,function(a){a.isDirty&&(k=!0)}),o(b,function(a){var b=a.min+","+a.max;if(a.extKey!==b)a.extKey=b,p.push(function(){H(a,"afterSetExtremes",v(a.eventArgs,a.getExtremes()));delete a.eventArgs});(k||g)&&a.redraw()}));k&&this.drawChartBox(); -o(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();H(this,"redraw");n&&this.cloneRenderTo(!0);o(p,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ta(b.xAxis|| -{}),b=b.yAxis=ta(b.yAxis||{});o(c,function(a,b){a.index=b;a.isX=!0});o(b,function(a,b){a.index=b});c=c.concat(b);o(c,function(b){new ja(a,b)})},getSelectedPoints:function(){var a=[];o(this.series,function(b){a=a.concat(Oa(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return Oa(this.series,function(a){return a.selected})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=D(e.title,a);g=e.subtitle=D(e.subtitle,b),e=g;o([["title",a,f],["subtitle", -b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,f=e.title,e=e.subtitle,g=this.renderer,h=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||h)+"px"}).align(v({y:g.fontMetrics(f.style.fontSize,c).b-3},f),!1,"spacingBox"),!f.floating&& -!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||h)+"px"}).align(v({y:b+(f.margin-13)+g.fontMetrics(e.style.fontSize,c).b},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign&&(b=ua(b+d.getBBox().height)));c=this.titleOffset!==b;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&p(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!q(b))this.containerWidth=Ga(c, -"width");if(!q(a))this.containerHeight=Ga(c,"height");this.chartWidth=s(0,b||this.containerWidth||600);this.chartHeight=s(0,p(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ua(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),M(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&& -b.style.setProperty("display","block","important"),z.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options,c=b.chart,d,e;a=this.renderTo;var f="highcharts-"+Ab++;if(!a)this.renderTo=a=c.renderTo;if(ya(a))this.renderTo=a=z.getElementById(a);a||Y(13,!0);d=F(L(a,"data-highcharts-chart"));!isNaN(d)&&W[d]&&W[d].hasRendered&&W[d].destroy();L(a,"data-highcharts-chart",this.index);a.innerHTML="";!c.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();d=this.chartWidth; -e=this.chartHeight;this.container=a=$(Ma,{className:"highcharts-container"+(c.className?" "+c.className:""),id:f},v({position:"relative",overflow:"hidden",width:d+"px",height:e+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},c.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=new (u[c.renderer]||cb)(a,d,e,c.style,c.forExport,b.exporting&&b.exporting.allowHTML);ha&&this.renderer.create(this,a,d,e);this.renderer.chartIndex=this.index}, -getMargins:function(a){var b=this.spacing,c=this.margin,d=this.titleOffset;this.resetMargins();if(d&&!q(c[0]))this.plotTop=s(this.plotTop,d+this.options.title.margin+b[0]);this.legend.adjustMargins(c,b);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],c=a.margin;a.hasCartesianSeries&&o(a.axes,function(a){a.visible&&a.getOffset()});o(ob, -function(d,e){q(c[e])||(a[d]+=b[e])});a.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||Ga(d,"width"),f=c.height||Ga(d,"height"),c=a?a.target:C;if(!b.hasUserSize&&!b.isPrinting&&e&&f&&(c===C||c===z)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),b.reflowTimeout=Qa(function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null},a?100:0);b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)}; -N(C,"resize",b);N(a,"destroy",function(){U(C,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g=d.renderer;d.isResizing+=1;Va(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(q(a))d.chartWidth=e=s(0,A(a)),d.hasUserSize=!!e;if(q(b))d.chartHeight=f=s(0,A(b));a=g.globalAnimation;(a?Xa:M)(d.container,{width:e+"px",height:f+"px"},a);d.setChartSize(!0);g.setSize(e,f,c);d.maxTicks=null;o(d.axes,function(a){a.isDirty=!0;a.setScale()});o(d.series,function(a){a.isDirty=!0});d.isDirtyLegend= -!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;H(d,"resize");a=g.globalAnimation;Qa(function(){d&&H(d,"endResize",null,function(){d.isResizing-=1})},a===!1?0:a&&a.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,k,j,m;this.plotLeft=i=A(this.plotLeft);this.plotTop=k=A(this.plotTop);this.plotWidth=j=s(0,A(d-i-this.marginRight));this.plotHeight= -m=s(0,A(e-k-this.marginBottom));this.plotSizeX=b?m:j;this.plotSizeY=b?j:m;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:k,width:j,height:m};d=2*S(this.plotBorderWidth/2);b=ua(s(d,h[3])/2);c=ua(s(d,h[0])/2);this.clipBox={x:b,y:c,width:S(this.plotSizeX-s(d,h[1])/2-b),height:s(0,S(this.plotSizeY-s(d,h[2])/2-c))};a||o(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a= -this;o(ob,function(b,c){a[b]=p(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,k=a.backgroundColor,j=a.plotBackgroundColor,m=a.plotBackgroundImage,l=a.plotBorderWidth||0,n,p=this.plotLeft,o=this.plotTop,q=this.plotWidth,y=this.plotHeight,x=this.plotBox,s=this.clipRect,v= -this.clipBox;n=i+(a.shadow?8:0);if(i||k)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:k||"none"};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(j)f?f.animate(x):this.plotBackground=b.rect(p,o,q,y,0).attr({fill:j}).add().shadow(a.plotShadow);if(m)h?h.animate(x):this.plotBGImage=b.image(m,p,o,q,y).add();s?s.animate({width:v.width,height:v.height}):this.clipRect= -b.clipRect(v);if(l)g?g.animate(g.crisp({x:p,y:o,width:q,height:y,strokeWidth:-l})):this.plotBorder=b.rect(p,o,q,y,0,-l).attr({stroke:a.plotBorderColor,"stroke-width":l,fill:"none",zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;o(["inverted","angular","polar"],function(g){c=I[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=I[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a= -this,b=a.series;o(b,function(a){a.linkedSeries.length=0});o(b,function(b){var d=b.options.linkedTo;if(ya(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d,b.visible=p(b.options.visible,d.options.visible,b.visible)})},renderSeries:function(){o(this.series,function(a){a.translate();a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&o(b.items,function(c){var d=v(b.style,c.style),e=F(d.left)+a.plotLeft,f=F(d.top)+a.plotTop+12;delete d.left; -delete d.top;a.renderer.text(c.html,e,f).attr({zIndex:2}).css(d).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,d,e,f,g;this.setTitle();this.legend=new pb(this,c.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();d=this.plotWidth;e=this.plotHeight-=21;o(a,function(a){a.setScale()});this.getAxisMargins();f=d/this.plotWidth>1.1;g=e/this.plotHeight>1.05;if(f||g)this.maxTicks=null,o(a,function(a){(a.horiz&&f||!a.horiz&&g)&&a.setTickInterval(!0)}), -this.getMargins();this.drawChartBox();this.hasCartesianSeries&&o(a,function(a){a.visible&&a.render()});if(!this.seriesGroup)this.seriesGroup=b.g("series-group").attr({zIndex:3}).add();this.renderSeries();this.renderLabels();this.showCredits(c.credits);this.hasRendered=!0},showCredits:function(a){if(a.enabled&&!this.credits)this.credits=this.renderer.text(a.text,0,0).on("click",function(){if(a.href)C.location.href=a.href}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position)}, -destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;H(a,"destroy");W[a.index]=B;eb--;a.renderTo.removeAttribute("data-highcharts-chart");U(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();o("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML= -"",U(d),f&&Ua(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!da&&C==C.top&&z.readyState!=="complete"||ha&&!C.canvg?(ha?Ob.push(function(){a.firstRender()},a.options.global.canvasToolsURL):z.attachEvent("onreadystatechange",function(){z.detachEvent("onreadystatechange",a.firstRender);z.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();H(a,"init");a.resetMargins();a.setChartSize(); -a.propFromSeries();a.getAxes();o(b.series||[],function(b){a.initSeries(b)});a.linkSeries();H(a,"beforeRender");if(u.Pointer)a.pointer=new Ya(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);o(a.callbacks,function(b){a.index!==B&&b.apply(a,[a])});H(a,"load");a.cloneRenderTo(!0)}},splashArray:function(a,b){var c=b[a],c=Z(c)?c:[c,c,c,c];return[p(b[a+"Top"],c[0]),p(b[a+"Right"],c[1]),p(b[a+"Bottom"],c[2]),p(b[a+"Left"],c[3])]}};var Cb=u.CenteredSeriesMixin={getCenter:function(){var a=this.options, -b=this.chart,c=2*(a.slicedOffset||0),d=b.plotWidth-2*c,b=b.plotHeight-2*c,e=a.center,e=[p(e[0],"50%"),p(e[1],"50%"),a.size||"100%",a.innerSize||0],f=E(d,b),g,h;for(g=0;g<4;++g)h=e[g],a=g<2||g===2&&/%$/.test(h),e[g]=(/%$/.test(h)?[d,b,f,e[2]][g]*parseFloat(h)/100:parseFloat(h))+(a?c:0);e[3]>e[2]&&(e[3]=e[2]);return e}},Ia=function(){};Ia.prototype={init:function(a,b,c){this.series=a;this.color=a.color;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors, -this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.options.pointValKey||c.pointValKey,a=Ia.prototype.optionsToObject.call(this,a);v(this,a);this.options=this.options?v(this.options,a):a;if(d)this.y=this[d];if(this.x===B&&c)this.x=b===B?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.options.keys,e=d||c.pointArrayMap||["y"],f=e.length,g=0,h= -0;if(typeof a==="number"||a===null)b[e[0]]=a;else if(Ja(a)){if(!d&&a.length>f){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];g++}for(;h<f;){if(!d||a[g]!==void 0)b[e[h]]=a[g];g++;h++}}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ma(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut(); -if(this.graphic||this.dataLabel)U(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=["graphic","dataLabel","dataLabelUpper","connector","shadowGroup"],b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b= -this.series,c=b.tooltipOptions,d=p(c.valueDecimals,""),e=c.valuePrefix||"",f=c.valueSuffix||"";o(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return La(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select&&d.select(null,a.ctrlKey|| -a.metaKey||a.shiftKey)});H(this,a,b,c)},visible:!0};var R=u.Series=function(){};R.prototype={isCartesian:!0,type:"line",pointClass:Ia,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return p(a.options.index,a._i)-p(b.options.index,b._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries= -[];c.bindAxes();v(c,{name:b.name,state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(ha)b.animation=!1;e=b.events;for(d in e)N(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();o(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;jb(f,g);this.yAxis&&jb(this.yAxis.series,g);o(f,function(a,b){a.index=b;a.name= -a.name||"Series "+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;o(a.axisTypes||[],function(e){o(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==B&&b[e]===d.id||b[e]===B&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&Y(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;o(c.parallelArrays,typeof b==="number"?function(d){var f=d==="y"&&c.toYData?c.toYData(a):a[d];c[d+"Data"][b]=f}:function(a){Array.prototype[b].apply(c[a+"Data"], -Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,c,d=a.pointIntervalUnit,b=p(b,a.pointStart,0);this.pointInterval=c=p(this.pointInterval,a.pointInterval,1);if(d==="month"||d==="year")a=new oa(b),a=d==="month"?+a[yb](a[ab]()+c):+a[zb](a[bb]()+c),c=a-b;this.xIncrement=b+c;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else o(d,function(c, -g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=D(e,c.series,a);this.tooltipOptions=D(O.tooltip,O.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;this.zoneAxis=c.zoneAxis;a=this.zones=(c.zones||[]).slice();if((c.negativeColor|| -c.negativeFillColor)&&!c.zones)a.push({value:c[this.zoneAxis+"Threshold"]||c.threshold||0,color:c.negativeColor,fillColor:c.negativeFillColor});a.length&&q(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return c},getCyclic:function(a,b,c){var d=this.userOptions,e="_"+a+"Index",f=a+"Counter";b||(q(d[e])?b=d[e]:(d[e]=b=this.chart[f]%c.length,this.chart[f]+=1),b=c[b]);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color|| -ba[this.type].color,this.chart.options.colors)},getSymbol:function(){var a=this.options.marker;this.getCyclic("symbol",a.symbol,this.chart.options.symbols);if(/^url/.test(this.symbol))a.radius=0},drawLegendSymbol:K.drawLineMarker,setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,k=e.chart,j=null,m=e.xAxis,l=m&&!!m.categories,n=i.turboThreshold,t=this.xData,r=this.yData,s=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=p(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData&& -e.visible)o(a,function(a,b){f[b].update&&a!==i.data[b]&&f[b].update(a,!1,null,!1)});else{e.xIncrement=null;e.colorCounter=0;o(this.parallelArrays,function(a){e[a+"Data"].length=0});if(n&&h>n){for(c=0;j===null&&c<h;)j=a[c],c++;if(ka(j)){l=p(i.pointStart,0);j=p(i.pointInterval,1);for(c=0;c<h;c++)t[c]=l,r[c]=a[c],l+=j;e.xIncrement=l}else if(Ja(j))if(s)for(c=0;c<h;c++)j=a[c],t[c]=j[0],r[c]=j.slice(1,s+1);else for(c=0;c<h;c++)j=a[c],t[c]=j[0],r[c]=j[1];else Y(12)}else for(c=0;c<h;c++)if(a[c]!==B&&(j={series:e}, -e.pointClass.prototype.applyOptions.apply(j,[a[c]]),e.updateParallelArrays(j,c),l&&q(j.name)))m.names[j.x]=j.name;ya(r[0])&&Y(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();if(m)m.minRange=m.userMinRange;e.isDirty=e.isDirtyData=k.isDirtyBox=!0;c=!1}i.legendType==="point"&&(this.processData(),this.generatePoints());b&&k.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i,k=this.options;i=k.cropThreshold;var k=this.getExtremesFromAll|| -k.getExtremesFromAll,j=this.isCartesian,m,l;if(j&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(h)a=h.getExtremes(),m=a.min,l=a.max;if(j&&this.sorted&&!k&&(!i||d>i||this.forceCrop))if(b[d-1]<m||b[0]>l)b=[],c=[];else if(b[0]<m||b[d-1]>l)e=this.cropData(this.xData,this.yData,m,l),b=e.xData,c=e.yData,e=e.start,f=!0;for(i=b.length-1;i>=0;i--)d=b[i]-b[i-1],d>0&&(g===B||d<g)?g=d:d<0&&this.requireSorting&&Y(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c; -this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=p(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(c=i;c<e;c++)if(a[c]>d){g=c+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,k=this.hasGroupedData,j,m=[],l;if(!b&&!k)b=[],b.length=a.length,b=this.data=b;for(l=0;l<g;l++)i= -h+l,k?m[l]=(new f).init(this,[d[l]].concat(ta(e[l]))):(b[i]?j=b[i]:a[i]!==B&&(b[i]=j=(new f).init(this,a[i],d[l])),m[l]=j),m[l].index=i;if(b&&(g!==(c=b.length)||k))for(l=0;l<c;l++)if(l===h&&!k&&(l+=g),b[l])b[l].destroyElements(),b[l].plotX=B;this.data=b;this.points=m},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,k,j,m,a=a||this.stackedYData||this.processedYData;d=a.length;for(m=0;m<d;m++)if(k=c[m],j=a[m],i=j!==null&&j!== -B&&(!b.isLog||j.length||j>0),k=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(c[m+1]||k)>=g&&(c[m-1]||k)<=h,i&&k)if(i=j.length)for(;i--;)j[i]!==null&&(e[f++]=j[i]);else e[f++]=j;this.dataMin=Sa(e);this.dataMax=Da(e)},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,k=i==="between"||ka(i),j=a.threshold, -m=a.startFromThreshold?j:0,l,n,t,o,v=Number.MAX_VALUE,a=0;a<g;a++){var y=f[a],x=y.x,w=y.y;n=y.low;var u=b&&e.stacks[(this.negStacks&&w<(m?0:j)?"-":"")+this.stackKey];if(e.isLog&&w!==null&&w<=0)y.y=w=null,Y(10);y.plotX=l=E(s(-1E5,c.translate(x,0,0,0,1,i,this.type==="flags")),1E5);if(b&&this.visible&&u&&u[x])o=this.getStackIndicator(o,x,this.index),u=u[x],w=u.points[o.key],n=w[0],w=w[1],n===m&&(n=p(j,e.min)),e.isLog&&n<=0&&(n=null),y.total=y.stackTotal=u.total,y.percentage=u.total&&y.y/u.total*100, -y.stackY=w,u.setOffset(this.pointXOffset||0,this.barW||0);y.yBottom=q(n)?e.translate(n,0,1,0,1):null;h&&(w=this.modifyValue(w,y));y.plotY=n=typeof w==="number"&&w!==Infinity?E(s(-1E5,e.translate(w,0,1,0,1)),1E5):B;y.isInside=n!==B&&n>=0&&n<=e.len&&l>=0&&l<=c.len;y.clientX=k?c.translate(x,0,0,0,1):l;y.negative=y.y<(j||0);y.category=d&&d[y.x]!==B?d[y.x]:y.x;a&&(v=E(v,P(l-t)));t=l}this.closestPointRangePx=v;this.getSegments()},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,e=b.inverted, -f=this.clipBox,g=f||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,g.height,c.xAxis,c.yAxis].join(","),i=b[h],k=b[h+"m"];if(!i){if(a)g.width=0,b[h+"m"]=k=d.clipRect(-99,e?-b.plotLeft:-b.plotTop,99,e?b.chartWidth:b.chartHeight);b[h]=i=d.clipRect(g)}a&&(i.count+=1);if(c.clip!==!1)this.group.clip(a||f?i:b.clipRect),this.markerGroup.clip(k),this.sharedClipKey=h;a||(i.count-=1,i.count<=0&&h&&b[h]&&(f||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b= -this.chart,c=this.options.animation,d;if(c&&!Z(c))c=ba[this.type].animation;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99},c),this.animate=null)},afterAnimate:function(){this.setClip();H(this,"afterAnimate")},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,k,j,m=this.options.marker,l=this.pointAttr[""],n,o,r,q=this.markerGroup,s=p(m.enabled,this.xAxis.isRadial,this.closestPointRangePx>2*m.radius); -if(m.enabled!==!1||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=S(g.plotX),e=g.plotY,j=g.graphic,n=g.marker||{},o=!!g.marker,a=s&&n.enabled===B||n.enabled,r=g.isInside,a&&e!==B&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""]||l,h=a.r,i=p(n.symbol,this.symbol),k=i.indexOf("url")===0,j)j[r?"show":"hide"](!0).animate(v({x:d-h,y:e-h},j.symbolName?{width:2*h,height:2*h}:{}));else{if(r&&(h>0||k))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h,o?n:m).attr(a).add(q)}else if(j)g.graphic= -j.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h=a.options.negativeColor;f={stroke:g,fill:g};var i=a.points||[],k,j,m=[],l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var n=c.lineColor,t=c.fillColor;j=b.turboThreshold;var r=a.zones,s=a.zoneAxis||"y",y;b.marker? -(e.radius=e.radius||c.radius+e.radiusPlus,e.lineWidth=e.lineWidth||c.lineWidth+e.lineWidthPlus):(e.color=e.color||ia(e.color||g).brighten(e.brightness).get(),e.negativeColor=e.negativeColor||ia(e.negativeColor||h).brighten(e.brightness).get());m[""]=a.convertAttribs(c,f);o(["hover","select"],function(b){m[b]=a.convertAttribs(d[b],m[""])});a.pointAttr=m;g=i.length;if(!j||g<j||k)for(;g--;){j=i[g];if((c=j.options&&j.options.marker||j.options)&&c.enabled===!1)c.radius=0;if(r.length){k=0;for(f=r[k];j[s]>= -f.value;)f=r[++k];j.color=j.fillColor=p(f.color,a.color)}k=b.colorByPoint||j.color;if(j.options)for(y in l)q(c[l[y]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker||j.negative&&!f.fillColor&&!e.fillColor)f[a.pointAttrToOptions.fill]=f.color||!j.options.color&&e[j.negative&&h?"negativeColor":"color"]||ia(j.color).brighten(f.brightness||e.brightness).get();f={color:j.color};if(!t)f.fillColor=j.color;if(!n)f.lineColor=j.color;c.hasOwnProperty("color")&&!c.color&&delete c.color; -k[""]=a.convertAttribs(v(f,c),m[""]);k.hover=a.convertAttribs(d.hover,m.hover,k[""]);k.select=a.convertAttribs(d.select,m.select,k[""])}else k=m;j.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(Aa),d,e=a.data||[],f,g,h;H(a,"destroy");U(a);o(a.axisTypes||[],function(b){if(h=a[b])ma(h.series,a),h.isDirty=h.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(d=e.length;d--;)(f=e[d])&&f.destroy&&f.destroy();a.points=null;clearTimeout(a.animationTimeout);for(g in a)a[g]instanceof -Q&&!a[g].survive&&(d=c&&g==="group"?"hide":"destroy",a[g][d]());if(b.hoverSeries===a)b.hoverSeries=null;ma(b.series,a);for(g in a)delete a[g]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;o(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h,"L"):d==="center"?c.push((i.plotX+g)/2,i.plotY,"L",(i.plotX+g)/2,h,"L"):c.push(g,i.plotY,"L")),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a= -this,b=[],c,d=[];o(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color,b.dashStyle]],d=b.lineWidth,e=b.linecap!=="square",f=this.getGraphPath(),g=this.fillGraph&&this.color||"none";o(this.zones,function(d,e){c.push(["zoneGraph"+e,d.color||a.color,d.dashStyle||b.dashStyle])});o(c,function(c,i){var k=c[0],j=a[k];if(j)j.animate({d:f});else if((d|| -g)&&f.length)j={stroke:c[1],"stroke-width":d,fill:g,zIndex:1},c[2]?j.dashstyle=c[2]:e&&(j["stroke-linecap"]=j["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(f).attr(j).add(a.group).shadow(i<2&&b.shadow)})},applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,f,g=this.clips||[],h,i=this.graph,k=this.area,j=s(b.chartWidth,b.chartHeight),m=this[(this.zoneAxis||"y")+"Axis"],l,n=m.reversed,t=b.inverted,r=m.horiz,q,y,x,v=!1;if(d.length&&(i||k)&&m.min!==B)i&&i.hide(),k&&k.hide(), -l=m.getExtremes(),o(d,function(d,o){e=n?r?b.plotWidth:0:r?0:m.toPixels(l.min);e=E(s(p(f,e),0),j);f=E(s(A(m.toPixels(p(d.value,l.max),!0)),0),j);v&&(e=f=m.toPixels(l.max));q=Math.abs(e-f);y=E(e,f);x=s(e,f);if(m.isXAxis){if(h={x:t?x:y,y:0,width:q,height:j},!r)h.x=b.plotHeight-h.x}else if(h={x:0,y:t?x:y,width:j,height:q},r)h.y=b.plotWidth-h.y;b.inverted&&c.isVML&&(h=m.isXAxis?{x:0,y:n?y:x,height:h.width,width:b.chartWidth}:{x:h.y-b.plotLeft-b.spacingBox.x,y:0,width:h.height,height:b.chartHeight});g[o]? -g[o].animate(h):(g[o]=c.clipRect(h),i&&a["zoneGraph"+o].clip(g[o]),k&&a["zoneArea"+o].clip(g[o]));v=d.value>l.max}),this.clips=g},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};o(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)N(c,"resize",a),N(b,"destroy",function(){U(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({zIndex:d||0.1}).add(e), -f.addClass("highcharts-series-"+this.index));f.attr({visibility:c})[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&p(c.duration,500)||0,f=a.visible?"inherit":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group", -"series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());o(a.points,function(a){a.redraw&&a.redraw()});a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)a.animationTimeout=Qa(function(){a.afterAnimate()}, -e);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.isDirty,d=this.group,e=this.xAxis,f=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),d.animate({translateX:p(e&&e.left,a.plotLeft),translateY:p(f&&f.top,a.plotTop)}));this.translate();this.render();b&&H(this,"updatedData");(c||b)&&delete this.kdTree},kdDimensions:1,kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted; -return this.searchKDTree({clientX:e?c.len-a.chartY+c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,e,f){var g,h;if(h=c&&c.length)return g=b.kdAxisArray[e%f],c.sort(function(a,b){return a[g]-b[g]}),h=Math.floor(h/2),{point:c[h],left:a(c.slice(0,h),e+1,f),right:a(c.slice(h+1),e+1,f)}}var b=this,c=b.kdDimensions;delete b.kdTree;Qa(function(){var d=Oa(b.points||[],function(a){return a.y!==null});b.kdTree=a(d,c,c)},b.options.kdNow?0:1)},searchKDTree:function(a, -b){function c(a,b,k,j){var m=b.point,l=d.kdAxisArray[k%j],n,p,o=m;p=q(a[e])&&q(m[e])?Math.pow(a[e]-m[e],2):null;n=q(a[f])&&q(m[f])?Math.pow(a[f]-m[f],2):null;n=(p||0)+(n||0);m.dist=q(n)?Math.sqrt(n):Number.MAX_VALUE;m.distX=q(p)?Math.sqrt(p):Number.MAX_VALUE;l=a[l]-m[l];n=l<0?"left":"right";p=l<0?"right":"left";b[n]&&(n=c(a,b[n],k+1,j),o=n[g]<o[g]?n:m);b[p]&&Math.sqrt(l*l)<o[g]&&(a=c(a,b[p],k+1,j),o=a[g]<o[g]?a:o);return o}var d=this,e=this.kdAxisArray[0],f=this.kdAxisArray[1],g=b?"distX":"dist"; -this.kdTree||this.buildKDTree();if(this.kdTree)return c(a,this.kdTree,this.kdDimensions,this.kdDimensions)}};Kb.prototype={destroy:function(){Ta(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?La(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d= -c.chart,e=d.inverted,f=c.reversed,f=this.isNegative&&!f||!this.isNegative&&f,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=P(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};hb.prototype.getStacks=function(){var a=this;o(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks= -a.stacks});o(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+p(b.options.stack,"")})};ja.prototype.buildStacks=function(){var a=this.series,b=p(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};ja.prototype.renderStackTotals=function(){var a=this.chart,b=a.renderer,c=this.stacks, -d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};ja.prototype.resetStacks=function(){var a=this.stacks,b,c;if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].touched<this.stacksTouched?(a[b][c].destroy(),delete a[b][c]):(a[b][c].total=null,a[b][c].cum=0)};ja.prototype.cleanStacks=function(){var a,b,c;if(!this.isXAxis){if(this.oldStacks)a=this.stacks= -this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}};R.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.startFromThreshold?f:0,h=e.stack,e=e.stacking,i=this.stackKey,k="-"+i,j=this.negStacks,m=this.yAxis,l=m.stacks,n=m.oldStacks,o,r,q,y,v,w,u;m.stacksTouched+=1;for(v=0;v<d;v++){w=a[v];u=b[v];o=this.getStackIndicator(o, -w,this.index);y=o.key;q=(r=j&&u<(g?0:f))?k:i;l[q]||(l[q]={});if(!l[q][w])n[q]&&n[q][w]?(l[q][w]=n[q][w],l[q][w].total=null):l[q][w]=new Kb(m,m.options.stackLabels,r,w,h);q=l[q][w];q.points[y]=[p(q.cum,g)];q.touched=m.stacksTouched;o.index>0&&this.singleStacks===!1&&(q.points[y][0]=q.points[this.index+","+w+",0"][0]);e==="percent"?(r=r?i:k,j&&l[r]&&l[r][w]?(r=l[r][w],q.total=r.total=s(r.total,q.total)+P(u)||0):q.total=fa(q.total+(P(u)||0))):q.total=fa(q.total+(u||0));q.cum=p(q.cum,g)+(u||0);q.points[y].push(q.cum); -c[v]=q.cum}if(e==="percent")m.usePercentage=!0;this.stackedYData=c;m.oldStacks={}}};R.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData,e;o([b,"-"+b],function(b){var f;for(var g=d.length,h,i;g--;)if(h=d[g],e=a.getStackIndicator(e,h,a.index),f=(i=c[b]&&c[b][h])&&i.points[e.key],h=f)i=i.total?100/i.total:0,h[0]=fa(h[0]*i),h[1]=fa(h[1]*i),a.stackedYData[g]=h[1]})};R.prototype.getStackIndicator=function(a,b,c){!q(a)||a.x!==b?a={x:b,index:0}:a.index++;a.key= -[c,b,a.index].join(",");return a};v(hb.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=p(b,!0),H(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new ja(this,D(a,{index:this[e].length,isX:b}));f[e]=ta(f[e]||{});f[e].push(a);p(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this,c=b.options,d=b.loadingDiv,e=c.loading,f=function(){d&&M(d,{left:b.plotLeft+ -"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};if(!d)b.loadingDiv=d=$(Ma,{className:"highcharts-loading"},v(e.style,{zIndex:10,display:"none"}),b.container),b.loadingSpan=$("span",null,e.labelStyle,d),N(b,"redraw",f);b.loadingSpan.innerHTML=a||c.lang.loading;if(!b.loadingShown)M(d,{opacity:0,display:""}),Xa(d,{opacity:e.style.opacity},{duration:e.showDuration||0}),b.loadingShown=!0;f()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Xa(b,{opacity:0},{duration:a.loading.hideDuration|| -100,complete:function(){M(b,{display:"none"})}});this.loadingShown=!1}});v(Ia.prototype,{update:function(a,b,c,d){function e(){f.applyOptions(a);if(f.y===null&&h)f.graphic=h.destroy();if(Z(a)&&!Ja(a))f.redraw=function(){if(h&&h.element&&a&&a.marker&&a.marker.symbol)f.graphic=h.destroy();if(a&&a.dataLabels&&f.dataLabel)f.dataLabel=f.dataLabel.destroy();f.redraw=null};i=f.index;g.updateParallelArrays(f,i);if(m&&f.name)m[f.x]=f.name;j.data[i]=Z(j.data[i])?f.options:a;g.isDirty=g.isDirtyData=!0;if(!g.fixedBox&& -g.hasCartesianSeries)k.isDirtyBox=!0;if(j.legendType==="point")k.isDirtyLegend=!0;b&&k.redraw(c)}var f=this,g=f.series,h=f.graphic,i,k=g.chart,j=g.options,m=g.xAxis&&g.xAxis.names,b=p(b,!0);d===!1?e():f.firePointEvent("update",{options:a},e)},remove:function(a,b){this.series.removePoint(qa(this,this.series.data),a,b)}});v(R.prototype,{addPoint:function(a,b,c,d){var e=this,f=e.options,g=e.data,h=e.graph,i=e.area,k=e.chart,j=e.xAxis&&e.xAxis.names,m=h&&h.shift||0,l=["graph","area"],h=f.data,n,t=e.xData; -Va(d,k);if(c){for(d=e.zones.length;d--;)l.push("zoneGraph"+d,"zoneArea"+d);o(l,function(a){if(e[a])e[a].shift=m+(f.step?2:1)})}if(i)i.isArea=!0;b=p(b,!0);i={series:e};e.pointClass.prototype.applyOptions.apply(i,[a]);l=i.x;d=t.length;if(e.requireSorting&&l<t[d-1])for(n=!0;d&&t[d-1]>l;)d--;e.updateParallelArrays(i,"splice",d,0,0);e.updateParallelArrays(i,d);if(j&&i.name)j[l]=i.name;h.splice(d,0,a);n&&(e.data.splice(d,0,null),e.processData());f.legendType==="point"&&e.generatePoints();c&&(g[0]&&g[0].remove? -g[0].remove(!1):(g.shift(),e.updateParallelArrays(i,"shift"),h.shift()));e.isDirty=!0;e.isDirtyData=!0;b&&(e.getAttribs(),k.redraw())},removePoint:function(a,b,c){var d=this,e=d.data,f=e[a],g=d.points,h=d.chart,i=function(){e.length===g.length&&g.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(f||{series:d},"splice",a,1);f&&f.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&h.redraw()};Va(c,h);b=p(b,!0);f?f.firePointEvent("remove",null,i):i()},remove:function(a,b){var c=this, -d=c.chart;H(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();p(a,!0)&&d.redraw(b)})},update:function(a,b){var c=this,d=this.chart,e=this.userOptions,f=this.type,g=I[f].prototype,h=["group","markerGroup","dataLabelsGroup"],i;if(a.type&&a.type!==f||a.zIndex!==void 0)h.length=0;o(h,function(a){h[a]=c[a];delete c[a]});a=D(e,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(i in g)this[i]=B;v(this,I[a.type||f].prototype); -o(h,function(a){c[a]=h[a]});this.init(d,a);d.linkSeries();p(b,!0)&&d.redraw(!1)}});v(ja.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=D(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.chart._labelPanes=B;this.init(c,v(a,{events:B}));c.isDirtyBox=!0;p(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ma(b.axes,this);ma(b[c],this);b.options[c].splice(this.options.index, -1);o(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;p(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var xa=na(R);I.line=xa;ba.area=D(ea,{softThreshold:!1,threshold:0});var sa=na(R,{type:"area",singleStacks:!1,getSegments:function(){var a=this,b=[],c=[],d=[],e=this.xAxis,f=this.yAxis,g=f.stacks[this.stackKey],h={},i,k,j=this.points,m=this.options.connectNulls,l,n,p;if(this.options.stacking&&!this.cropped){for(n= -0;n<j.length;n++)h[j[n].x]=j[n];for(p in g)g[p].total!==null&&d.push(+p);d.sort(function(a,b){return a-b});o(d,function(b){var d=null,j;if(!m||h[b]&&h[b].y!==null)if(h[b])c.push(h[b]);else{for(n=a.index;n<=f.series.length;n++)if(l=a.getStackIndicator(null,b,n),j=g[b].points[l.key]){d=j[1];break}i=e.translate(b);k=f.getThreshold(d);c.push({y:null,plotX:i,clientX:i,plotY:k,yBottom:k,onMouseOver:va})}});c.length&&b.push(c)}else R.prototype.getSegments.call(this),b=this.segments;this.segments=b},getSegmentPath:function(a){var b= -R.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=p(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];R.prototype.drawGraph.apply(this); -var a=this,b=this.areaPath,c=this.options,d=[["area",this.color,c.fillColor]];o(this.zones,function(b,f){d.push(["zoneArea"+f,b.color||a.color,b.fillColor||c.fillColor])});o(d,function(d){var f=d[0],g=a[f];g?g.animate({d:b}):(g={fill:d[2]||d[1],zIndex:0},d[2]||(g["fill-opacity"]=c.fillOpacity||0.75),a[f]=a.chart.renderer.path(b).attr(g).add(a.group))})},drawLegendSymbol:K.drawRectangle});I.area=sa;ba.spline=D(ea);xa=na(R,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c- -1],g=a[c+1],h,i,k,j;if(f&&g){a=f.plotY;k=g.plotX;var g=g.plotY,m;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;k=(1.5*d+k)/2.5;j=(1.5*e+g)/2.5;m=(j-i)*(k-d)/(k-h)+e-j;i+=m;j+=m;i>a&&i>e?(i=s(a,e),j=2*e-i):i<a&&i<e&&(i=E(a,e),j=2*e-i);j>g&&j>e?(j=s(g,e),i=2*e-j):j<g&&j<e&&(j=E(g,e),i=2*e-j);b.rightContX=k;b.rightContY=j}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});I.spline=xa;ba.areaspline=D(ba.area);sa=sa.prototype;xa=na(xa,{type:"areaspline", -closedStacks:!0,getSegmentPath:sa.getSegmentPath,closeSegment:sa.closeSegment,drawGraph:sa.drawGraph,drawLegendSymbol:K.drawRectangle});I.areaspline=xa;ba.column=D(ea,{borderColor:"#FFFFFF",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},softThreshold:!1,startFromThreshold:!0,stickyTracking:!1, -tooltip:{distance:6},threshold:0});xa=na(R,{type:"column",pointAttrToOptions:{stroke:"borderColor",fill:"color",r:"borderRadius"},cropShoulder:0,directTouch:!0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){R.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h=0;b.grouping===!1?h=1:o(a.chart.series,function(b){var c= -b.options,e=b.yAxis,i;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===B&&(g[f]=h++),i=g[f]):c.grouping!==!1&&(i=h++),b.columnIndex=i});var i=E(P(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),k=i*b.groupPadding,j=(i-2*k)/h,b=E(b.maxPointWidth||c.len,p(b.pointWidth,j*(1-2*b.pointPadding)));a.columnMetrics={width:b,offset:(j-b)/2+(k+((a.columnIndex||0)+(e?1:0))*j-i/2)*(e?-1:1)};return a.columnMetrics},crispCol:function(a, -b,c,d){var e=this.chart,f=this.borderWidth,g=-(f%2?0.5:0),f=f%2?0.5:1;e.inverted&&e.renderer.isVML&&(f+=1);c=Math.round(a+c)+g;a=Math.round(a)+g;c-=a;d=Math.round(b+d)+f;g=P(b)<=0.5&&d>0.5;b=Math.round(b)+f;d-=b;g&&(b-=1,d+=1);return{x:a,y:b,width:c,height:d}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=p(c.borderWidth,a.closestPointRange*a.xAxis.transA<2?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=p(c.minPointLength,5),h=a.getColumnMetrics(),i=h.width, -k=a.barW=s(i,1+2*d),j=a.pointXOffset=h.offset;b.inverted&&(f-=0.5);c.pointPadding&&(k=ua(k));R.prototype.translate.apply(a);o(a.points,function(c){var d=E(p(c.yBottom,f),9E4),h=999+P(d),h=E(s(-h,c.plotY),e.len+h),o=c.plotX+j,q=k,v=E(h,d),y,u=s(h,d)-v;P(u)<g&&g&&(u=g,y=!e.reversed&&!c.negative||e.reversed&&c.negative,v=P(v-f)>g?d-g:f-(y?g:0));c.barX=o;c.pointWidth=i;c.tooltipPos=b.inverted?[e.len+e.pos-b.plotLeft-h,a.xAxis.len-o-q/2,u]:[o+q/2,h+e.pos-b.plotTop,u];c.shapeType="rect";c.shapeArgs=a.crispCol(o, -v,q,u)})},getSymbol:va,drawLegendSymbol:K.drawRectangle,drawGraph:va,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||250,f,g;o(a.points,function(h){var i=h.plotY,k=h.graphic;if(i!==B&&!isNaN(i)&&h.y!==null)f=h.shapeArgs,i=q(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=h.pointAttr[h.selected?"select":""]||a.pointAttr[""],k?(Pa(k),k.attr(i).attr(g)[b.pointCount<e?"animate":"attr"](D(f))):h.graphic=d[h.shapeType](f).attr(i).attr(g).add(h.group||a.group).shadow(c.shadow, -null,c.stacking&&!c.borderRadius);else if(k)h.graphic=k.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(da)a?(e.scaleY=0.001,a=E(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0}); -R.prototype.remove.apply(a,arguments)}});I.column=xa;ba.bar=D(ba.column);sa=na(xa,{type:"bar",inverted:!0});I.bar=sa;ba.scatter=D(ea,{lineWidth:0,marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px;"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}});sa=na(R,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1, -kdDimensions:2,drawGraph:function(){this.options.lineWidth&&R.prototype.drawGraph.call(this)}});I.scatter=sa;ba.pie=D(ea,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.y===null?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});ea={type:"pie", -isCartesian:!1,pointClass:na(Ia,{init:function(){Ia.prototype.init.apply(this,arguments);var a=this,b;a.name=p(a.name,"Slice");b=function(b){a.slice(b.type==="select")};N(a,"select",b);N(a,"unselect",b);return a},setVisible:function(a,b){var c=this,d=c.series,e=d.chart,f=d.options.ignoreHiddenPoint,b=p(b,f);if(a!==c.visible){c.visible=c.options.visible=a=a===B?!c.visible:a;d.options.data[qa(c,d.data)]=c.options;o(["graphic","dataLabel","connector","shadowGroup"],function(b){if(c[b])c[b][a?"show": -"hide"](!0)});c.legendItem&&e.legend.colorizeItem(c,a);!a&&c.state==="hover"&&c.setState("");if(f)d.isDirty=!0;b&&e.redraw()}},slice:function(a,b,c){var d=this.series;Va(c,d.chart);p(b,!0);this.sliced=this.options.sliced=a=q(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.sliced||!this.visible? -[]:this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)o(c,function(a){var c=a.graphic,g=a.shapeArgs;c&&(c.attr({r:a.startR||b.center[3]/2,start:d,end:d}),c.animate({r:g.r, -start:g.start,end:g.end},b.options.animation))}),b.animate=null},updateTotals:function(){var a,b=0,c=this.points,d=c.length,e,f=this.options.ignoreHiddenPoint;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0&&(e.visible||!f)?e.y/b*100:0,e.total=b},generatePoints:function(){R.prototype.generatePoints.call(this);this.updateTotals()},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle|| -0,k=this.startAngleRad=pa/180*(i-90),i=(this.endAngleRad=pa/180*(p(c.endAngle,i+360)-90))-k,j=this.points,m=c.dataLabels.distance,c=c.ignoreHiddenPoint,l,n=j.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=V.asin(E((b-a[1])/(a[2]/2+m),1));return a[0]+(c?-1:1)*T(h)*(a[2]/2+m)};for(l=0;l<n;l++){o=j[l];f=k+b*i;if(!c||o.visible)b+=o.percentage/100;g=k+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:A(f*1E3)/1E3,end:A(g*1E3)/1E3};h=(g+f)/2;h>1.5*pa? -h-=2*pa:h<-pa/2&&(h+=2*pa);o.slicedTranslation={translateX:A(T(h)*d),translateY:A(aa(h)*d)};f=T(h)*a[2]/2;g=aa(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-pa/2||h>pa/2?1:0;o.angle=h;e=E(e,m/2);o.labelPos=[a[0]+f+T(h)*m,a[1]+g+aa(h)*m,a[0]+f+T(h)*e,a[1]+g+aa(h)*e,a[0]+f,a[1]+g,m<0?"center":o.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g,h,i;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);o(a.points, -function(k){if(k.y!==null){d=k.graphic;h=k.shapeArgs;f=k.shadowGroup;g=k.pointAttr[k.selected?"select":""];if(!g.stroke)g.stroke=g.fill;if(e&&!f)f=k.shadowGroup=b.g("shadow").add(a.shadowGroup);c=k.sliced?k.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);if(d)d.setRadialReference(a.center).attr(g).animate(v(h,c));else{i={"stroke-linejoin":"round"};if(!k.visible)i.visibility="hidden";k.graphic=d=b[k.shapeType](h).setRadialReference(a.center).attr(g).attr(i).attr(c).add(a.group).shadow(e, -f)}}})},searchPoint:va,sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:K.drawRectangle,getCenter:Cb.getCenter,getSymbol:va};ea=na(R,ea);I.pie=ea;R.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h=a.hasRendered||0,i,k,j=a.chart.renderer;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),k=a.plotGroup("dataLabelsGroup","data-labels",d.defer?"hidden":"visible",d.zIndex|| -6),p(d.defer,!0)&&(k.attr({opacity:+h}),h||N(a,"afterAnimate",function(){a.visible&&k.show();k[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,o(e,function(e){var h,n=e.dataLabel,o,r,s=e.connector,u=!0,x,w={};f=e.dlOptions||e.options&&e.options.dataLabels;h=p(f&&f.enabled,g.enabled)&&e.y!==null;if(n&&!h)e.dataLabel=n.destroy();else if(h){d=D(g,f);x=d.style;h=d.rotation;o=e.getLabelConfig();i=d.format?La(d.format,o):d.formatter.call(o,d);x.color=p(d.color,x.color,a.color,"black"); -if(n)if(q(i))n.attr({text:i}),u=!1;else{if(e.dataLabel=n=n.destroy(),s)e.connector=s.destroy()}else if(q(i)){n={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:h,padding:d.padding,zIndex:1};if(x.color==="contrast")w.color=d.inside||d.distance<0||b.stacking?j.getContrast(e.color||a.color):"#000000";if(c)w.cursor=c;for(r in n)n[r]===B&&delete n[r];n=e.dataLabel=j[h?"text":"label"](i,0,-9999,d.shape,null,null,d.useHTML).attr(n).css(v(x,w)).add(k).shadow(d.shadow)}n&& -a.alignDataLabel(e,n,d,null,u)}})};R.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=p(a.plotX,-9999),i=p(a.plotY,-9999),k=b.getBBox(),j=f.renderer.fontMetrics(c.style.fontSize).b,m=this.visible&&(a.series.forceDL||f.isInsidePlot(h,A(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g));if(m)d=v({x:g?f.plotWidth-i:h,y:A(g?f.plotHeight-h:i),width:0,height:0},d),v(c,{width:k.width,height:k.height}),c.rotation?(a=f.renderer.rotCorr(j,c.rotation),b[e?"attr":"animate"]({x:d.x+ -c.x+d.width/2+a.x,y:d.y+c.y+d.height/2}).attr({align:c.align})):(b.align(c,null,d),g=b.alignAttr,p(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,k,d,e):p(c.crop,!0)&&(m=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+k.width,g.y+k.height)),c.shape&&b.attr({anchorX:a.plotX,anchorY:a.plotY}));if(!m)Pa(b),b.attr({y:-9999}),b.placed=!1};R.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,k,j,m=a.box?0:a.padding||0;k=c.x+m;if(k<0)h==="right"?b.align= -"left":b.x=-k,j=!0;k=c.x+d.width-m;if(k>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-k,j=!0;k=c.y+m;if(k<0)i==="bottom"?b.verticalAlign="top":b.y=-k,j=!0;k=c.y+d.height-m;if(k>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-k,j=!0;if(j)a.placed=!f,a.align(b,null,e)};if(I.pie)I.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=p(e.connectorPadding,10),g=p(e.connectorWidth,1),h=d.plotWidth,i=d.plotHeight,k,j,m=p(e.softConnector, -!0),l=e.distance,n=a.center,q=n[2]/2,r=n[1],v=l>0,u,x,w,B=[[],[]],z,C,D,F,J,G=[0,0,0,0],M=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){R.prototype.drawDataLabels.apply(a);o(b,function(a){a.dataLabel&&a.visible&&B[a.half].push(a)});for(F=2;F--;){var H=[],N=[],I=B[F],L=I.length,K;if(L){a.sortByAngle(I,F-0.5);for(J=b=0;!b&&I[J];)b=I[J]&&I[J].dataLabel&&(I[J].dataLabel.getBBox().height||21),J++;if(l>0){x=E(r+q+l,d.plotHeight);for(J=s(0,r-q-l);J<=x;J+=b)H.push(J);x=H.length; -if(L>x){c=[].concat(I);c.sort(M);for(J=L;J--;)c[J].rank=J;for(J=L;J--;)I[J].rank>=x&&I.splice(J,1);L=I.length}for(J=0;J<L;J++){c=I[J];w=c.labelPos;c=9999;var Q,O;for(O=0;O<x;O++)Q=P(H[O]-w[1]),Q<c&&(c=Q,K=O);if(K<J&&H[J]!==null)K=J;else for(x<L-J+K&&H[J]!==null&&(K=x-L+J);H[K]===null;)K++;N.push({i:K,y:H[K]});H[K]=null}N.sort(M)}for(J=0;J<L;J++){c=I[J];w=c.labelPos;u=c.dataLabel;D=c.visible===!1?"hidden":"inherit";c=w[1];if(l>0){if(x=N.pop(),K=x.i,C=x.y,c>C&&H[K+1]!==null||c<C&&H[K-1]!==null)C=E(s(0, -c),d.plotHeight)}else C=c;z=e.justify?n[0]+(F?-1:1)*(q+l):a.getX(C===r-q-l||C===r+q+l?c:C,F);u._attr={visibility:D,align:w[6]};u._pos={x:z+e.x+({left:f,right:-f}[w[6]]||0),y:C+e.y-10};u.connX=z;u.connY=C;if(this.options.size===null)x=u.width,z-x<f?G[3]=s(A(x-z+f),G[3]):z+x>h-f&&(G[1]=s(A(z+x-h+f),G[1])),C-b/2<0?G[0]=s(A(-C+b/2),G[0]):C+b/2>i&&(G[2]=s(A(C+b/2-i),G[2]))}}}if(Da(G)===0||this.verifyDataLabelOverflow(G))this.placeDataLabels(),v&&g&&o(this.points,function(b){k=b.connector;w=b.labelPos; -if((u=b.dataLabel)&&u._pos&&b.visible)D=u._attr.visibility,z=u.connX,C=u.connY,j=m?["M",z+(w[6]==="left"?5:-5),C,"C",z,C,2*w[2]-w[4],2*w[3]-w[5],w[2],w[3],"L",w[4],w[5]]:["M",z+(w[6]==="left"?5:-5),C,"L",w[2],w[3],"L",w[4],w[5]],k?(k.animate({d:j}),k.attr("visibility",D)):b.connector=k=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:D}).add(a.dataLabelsGroup);else if(k)b.connector=k.destroy()})}},I.pie.prototype.placeDataLabels=function(){o(this.points, -function(a){var b=a.dataLabel;if(b&&a.visible)(a=b._pos)?(b.attr(b._attr),b[b.moved?"animate":"attr"](a),b.moved=!0):b&&b.attr({y:-9999})})},I.pie.prototype.alignDataLabel=va,I.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c.minSize||80,f=e,g;d[0]!==null?f=s(b[2]-s(a[1],a[3]),e):(f=s(b[2]-a[1]-a[3],e),b[0]+=(a[3]-a[1])/2);d[1]!==null?f=s(E(f,b[2]-s(a[0],a[2])),e):(f=s(E(f,b[2]-a[0]-a[2]),e),b[1]+=(a[0]-a[2])/2);f<b[2]?(b[2]=f,b[3]=Math.min(/%$/.test(c.innerSize|| -0)?f*parseFloat(c.innerSize||0)/100:parseFloat(c.innerSize||0),f),this.translate(b),o(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):g=!0;return g};if(I.column)I.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart.inverted,g=a.series,h=a.dlBox||a.shapeArgs,i=p(a.below,a.plotY>p(this.translatedThreshold,g.yAxis.len)),k=p(c.inside,!!this.options.stacking);if(h){d=D(h);if(d.y<0)d.height+=d.y,d.y=0;h=d.y+d.height-g.yAxis.len; -h>0&&(d.height-=h);f&&(d={x:g.yAxis.len-d.y-d.height,y:g.xAxis.len-d.x-d.width,width:d.height,height:d.width});if(!k)f?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0)}c.align=p(c.align,!f||k?"center":i?"right":"left");c.verticalAlign=p(c.verticalAlign,f||k?"middle":i?"top":"bottom");R.prototype.alignDataLabel.call(this,a,b,c,d,e)};(function(a){var b=a.Chart,c=a.each,d=a.pick,e=a.addEvent;b.prototype.callbacks.push(function(a){function b(){var e=[];c(a.series,function(a){var b=a.options.dataLabels, -f=a.dataLabelCollections||["dataLabel"];(b.enabled||a._hasPointLabels)&&!b.allowOverlap&&a.visible&&c(f,function(b){c(a.points,function(a){if(a[b])a[b].labelrank=d(a.labelrank,a.shapeArgs&&a.shapeArgs.height),e.push(a[b])})})});a.hideOverlappingLabels(e)}b();e(a,"redraw",b)});b.prototype.hideOverlappingLabels=function(a){var b=a.length,d,e,k,j,m,l,n;for(e=0;e<b;e++)if(d=a[e])d.oldOpacity=d.opacity,d.newOpacity=1;a.sort(function(a,b){return(b.labelrank||0)-(a.labelrank||0)});for(e=0;e<b;e++){k=a[e]; -for(d=e+1;d<b;++d)if(j=a[d],k&&j&&k.placed&&j.placed&&k.newOpacity!==0&&j.newOpacity!==0&&(m=k.alignAttr,l=j.alignAttr,n=2*(k.box?0:k.padding),m=!(l.x>m.x+(k.width-n)||l.x+(j.width-n)<m.x||l.y>m.y+(k.height-n)||l.y+(j.height-n)<m.y)))(k.labelrank<j.labelrank?k:j).newOpacity=0}c(a,function(a){var b,c;if(a){c=a.newOpacity;if(a.oldOpacity!==c&&a.placed)c?a.show(!0):b=function(){a.hide()},a.alignAttr.opacity=c,a[a.isOld?"animate":"attr"](a.alignAttr,null,b);a.isOld=!0}})}})(u);ea=u.TrackerMixin={drawTrackerPoint:function(){var a= -this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(a){for(var c=a.target,d;c&&!d;)d=c.point,c=c.parentNode;if(d!==B&&d!==b.hoverPoint)d.onMouseOver(a)};o(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)o(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),db))a[b].on("touchstart",f)}),a._hasTracking=!0}, -drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,k=a.tracker,j=b.cursor,m=j&&{cursor:j},j=a.singlePoints,l,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},p="rgba(192,192,192,"+(da?1.0E-4:0.002)+")";if(e&&!c)for(l=e+1;l--;)d[l]==="M"&&d.splice(l+1,0,d[l+1]-i,d[l+2],"L"),(l&&d[l]==="M"||l===e)&&d.splice(l,0,"L",d[l-2]+i,d[l-1]);for(l=0;l<j.length;l++)e=j[l],d.push("M",e.plotX- -i,e.plotY,"L",e.plotX+i,e.plotY);k?k.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:p,fill:c?p:"none","stroke-width":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),o([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",n).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(m);if(db)a.on("touchstart",n)}))}};if(I.column)xa.prototype.drawTracker=ea.drawTrackerPoint;if(I.pie)I.pie.prototype.drawTracker= -ea.drawTrackerPoint;if(I.scatter)sa.prototype.drawTracker=ea.drawTrackerPoint;v(pb.prototype,{setItemEvents:function(a,b,c,d,e){var f=this;(c?b:a.legendGroup).on("mouseover",function(){a.setState("hover");b.css(f.options.itemHoverStyle)}).on("mouseout",function(){b.css(a.visible?d:e);a.setState()}).on("click",function(b){var c=function(){a.setVisible&&a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):H(a,"legendItemClick",b,c)})},createCheckboxForItem:function(a){a.checkbox= -$("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);N(a.checkbox,"click",function(b){H(a.series||a,"checkboxClick",{checked:b.target.checked,item:a},function(){a.select()})})}});O.legend.itemStyle.cursor="pointer";v(hb.prototype,{showResetZoom:function(){var a=this,b=O.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo==="chart"?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null, -function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;H(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?o(this.axes,function(a){b=a.zoom()}):o(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b=e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom(); -else if(!d&&Z(e))this.resetZoomButton=e.destroy();b&&this.redraw(p(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&o(d,function(a){a.setState()});o(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],k=(h.pointRange||0)/2,j=h.getExtremes(),m=h.toValue(i-d,!0)+k,k=h.toValue(i+c[b?"plotWidth":"plotHeight"]-d,!0)-k,i=i>d;if(h.series.length&&(i||m>E(j.dataMin,j.min))&& -(!i||k<s(j.dataMax,j.max)))h.setExtremes(m,k,!1,!1,{trigger:"pan"}),e=!0;c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);M(c.container,{cursor:"move"})}});v(Ia.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=p(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]=c.options;c.setState(a&&"select");b||o(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a, -d.data)]=a.options,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(a,b){var c=this.series,d=c.chart,e=d.tooltip,f=d.hoverPoint;if(d.hoverSeries!==c)c.onMouseOver();if(f&&f!==this)f.onMouseOut();if(this.series&&(this.firePointEvent("mouseOver"),e&&(!e.shared||c.noSharedTooltip)&&e.refresh(this,a),this.setState("hover"),!b))d.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;this.firePointEvent("mouseOut");if(!b||qa(this,b)===-1)this.setState(),a.hoverPoint= -null},importEvents:function(){if(!this.hasImportedEvents){var a=D(this.series.options.point,this.options).events,b;this.events=a;for(b in a)N(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=S(this.plotX),d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],k=i&&i.enabled===!1,j=e.stateMarkerGraphic,m=this.marker||{},l=e.chart,n=e.halo,o,a=a||"";o=this.pointAttr[a]||e.pointAttr[a];if(!(a===this.state&&!b||this.selected&& -a!=="select"||f[a]&&f[a].enabled===!1||a&&(k||h&&i.enabled===!1)||a&&m.states&&m.states[a]&&m.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&o.r,this.graphic.attr(D(o,g?{x:c-g,y:d-g,width:2*g,height:2*g}:{})),j&&j.hide();else{if(a&&i)if(g=i.radius,m=m.symbol||e.symbol,j&&j.currentSymbol!==m&&(j=j.destroy()),j)j[b?"animate":"attr"]({x:c-g,y:d-g});else if(m)e.stateMarkerGraphic=j=l.renderer.symbol(m,c-g,d-g,2*g,2*g).attr(o).add(e.markerGroup),j.currentSymbol=m;if(j)j[a&&l.isInsidePlot(c, -d,l.inverted)?"show":"hide"](),j.element.point=this}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=l.renderer.path().add(l.seriesGroup);n.attr(v({fill:this.color||e.color,"fill-opacity":c.opacity},c.attributes))[b?"animate":"attr"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted,f=Math.floor(this.plotX);return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:f)-a,d.translateY+(e?b.xAxis.len- -f:this.plotY)-a,a*2,a*2)}});v(R.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&H(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;b.hoverSeries=null;if(d)d.onMouseOut();this&&a.events.mouseOut&&H(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState()},setState:function(a){var b=this.options, -c=this.graph,d=b.states,e=b.lineWidth,b=0,a=a||"";if(this.state!==a&&(this.state=a,!(d[a]&&d[a].enabled===!1)&&(a&&(e=d[a].lineWidth||e+(d[a].lineWidthPlus||0)),c&&!c.dashstyle))){a={"stroke-width":e};for(c.attr(a);this["zoneGraph"+b];)this["zoneGraph"+b].attr(a),b+=1}},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===B?!h:a)?"show":"hide";o(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()}); -if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&o(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});o(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();H(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===B?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;H(this,a?"select":"unselect")}, -drawTracker:ea.drawTrackerGraph});v(u,{Color:ia,Point:Ia,Tick:Wa,Renderer:cb,SVGElement:Q,SVGRenderer:Ba,arrayMin:Sa,arrayMax:Da,charts:W,dateFormat:Ra,error:Y,format:La,pathAnim:void 0,getOptions:function(){return O},hasBidiBug:Qb,isTouchDevice:Mb,setOptions:function(a){O=D(!0,O,a);Fb();return O},addEvent:N,removeEvent:U,createElement:$,discardElement:Ua,css:M,each:o,map:Ha,merge:D,splat:ta,stableSort:jb,extendClass:na,pInt:F,svg:da,canvas:ha,vml:!da&&!ha,product:"Highcharts",version:"4.2.1"});return u}); diff --git a/platforms/browser/www/lib/highcharts/highcharts.src.js b/platforms/browser/www/lib/highcharts/highcharts.src.js deleted file mode 100644 index 3bd4bf81..00000000 --- a/platforms/browser/www/lib/highcharts/highcharts.src.js +++ /dev/null @@ -1,19265 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (root, factory) { - if (typeof module === 'object' && module.exports) { - module.exports = root.document ? - factory(root) : - factory; - } else { - root.Highcharts = factory(root); - } -}(typeof window !== 'undefined' ? window : this, function (win) { // eslint-disable-line no-undef -// encapsulated variables - var UNDEFINED, - doc = win.document, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathCeil = math.ceil, - mathMax = math.max, - mathMin = math.min, - mathAbs = math.abs, - mathCos = math.cos, - mathSin = math.sin, - mathPI = math.PI, - deg2rad = mathPI * 2 / 360, - - - // some variables - userAgent = (win.navigator && win.navigator.userAgent) || '', - isOpera = win.opera, - isMS = /(msie|trident|edge)/i.test(userAgent) && !isOpera, - docMode8 = doc && doc.documentMode === 8, - isWebKit = !isMS && /AppleWebKit/.test(userAgent), - isFirefox = /Firefox/.test(userAgent), - isTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent), - SVG_NS = 'http://www.w3.org/2000/svg', - hasSVG = doc && doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, - hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38 - useCanVG = doc && !hasSVG && !isMS && !!doc.createElement('canvas').getContext, - Renderer, - hasTouch, - symbolSizes = {}, - idCounter = 0, - garbageBin, - defaultOptions, - dateFormat, // function - pathAnim, - timeUnits, - noop = function () {}, - charts = [], - chartCount = 0, - PRODUCT = 'Highcharts', - VERSION = '4.2.1', - - // some constants for frequently used strings - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - PREFIX = 'highcharts-', - VISIBLE = 'visible', - PX = 'px', - NONE = 'none', - M = 'M', - L = 'L', - numRegex = /^[0-9]+$/, - NORMAL_STATE = '', - HOVER_STATE = 'hover', - SELECT_STATE = 'select', - marginNames = ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - - // Object for extending Axis - AxisPlotLineOrBandExtension, - - // constants for attributes - STROKE_WIDTH = 'stroke-width', - - // time methods, changed based on whether or not UTC is used - Date, // Allow using a different Date class - makeTime, - timezoneOffset, - getTimezoneOffset, - getMinutes, - getHours, - getDay, - getDate, - getMonth, - getFullYear, - setMilliseconds, - setSeconds, - setMinutes, - setHours, - setDate, - setMonth, - setFullYear, - - - // lookup over the types and the associated classes - seriesTypes = {}, - Highcharts; - - /** - * Provide error messages for debugging, with links to online explanation - */ - function error(code, stop) { - var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; - if (stop) { - throw new Error(msg); - } - // else ... - if (win.console) { - console.log(msg); // eslint-disable-line no-console - } - } - - // The Highcharts namespace - Highcharts = win.Highcharts ? error(16, true) : { win: win }; - - Highcharts.seriesTypes = seriesTypes; - var timers = [], - getStyle, - - // Previous adapter functions - inArray, - each, - grep, - offset, - map, - addEvent, - removeEvent, - fireEvent, - animate, - stop; - - /** - * An animator object. One instance applies to one property (attribute or style prop) - * on one element. - * - * @param {object} elem The element to animate. May be a DOM element or a Highcharts SVGElement wrapper. - * @param {object} options Animation options, including duration, easing, step and complete. - * @param {object} prop The property to animate. - */ - function Fx(elem, options, prop) { - this.options = options; - this.elem = elem; - this.prop = prop; - } - Fx.prototype = { - - /** - * Animating a path definition on SVGElement - * @returns {undefined} - */ - dSetter: function () { - var start = this.paths[0], - end = this.paths[1], - ret = [], - now = this.now, - i = start.length, - startVal; - - if (now === 1) { // land on the final path without adjustment points appended in the ends - ret = this.toD; - - } else if (i === end.length && now < 1) { - while (i--) { - startVal = parseFloat(start[i]); - ret[i] = - isNaN(startVal) ? // a letter instruction like M or L - start[i] : - now * (parseFloat(end[i] - startVal)) + startVal; - - } - } else { // if animation is finished or length not matching, land on right value - ret = end; - } - this.elem.attr('d', ret); - }, - - /** - * Update the element with the current animation step - * @returns {undefined} - */ - update: function () { - var elem = this.elem, - prop = this.prop, // if destroyed, it is null - now = this.now, - step = this.options.step; - - // Animation setter defined from outside - if (this[prop + 'Setter']) { - this[prop + 'Setter'](); - - // Other animations on SVGElement - } else if (elem.attr) { - if (elem.element) { - elem.attr(prop, now); - } - - // HTML styles, raw HTML content like container size - } else { - elem.style[prop] = now + this.unit; - } - - if (step) { - step.call(elem, now, this); - } - - }, - - /** - * Run an animation - */ - run: function (from, to, unit) { - var self = this, - timer = function (gotoEnd) { - return timer.stopped ? false : self.step(gotoEnd); - }, - i; - - this.startTime = +new Date(); - this.start = from; - this.end = to; - this.unit = unit; - this.now = this.start; - this.pos = 0; - - timer.elem = this.elem; - - if (timer() && timers.push(timer) === 1) { - timer.timerId = setInterval(function () { - - for (i = 0; i < timers.length; i++) { - if (!timers[i]()) { - timers.splice(i--, 1); - } - } - - if (!timers.length) { - clearInterval(timer.timerId); - } - }, 13); - } - }, - - /** - * Run a single step in the animation - * @param {Boolean} gotoEnd Whether to go to then endpoint of the animation after abort - * @returns {Boolean} True if animation continues - */ - step: function (gotoEnd) { - var t = +new Date(), - ret, - done, - options = this.options, - elem = this.elem, - complete = options.complete, - duration = options.duration, - curAnim = options.curAnim, - i; - - if (elem.attr && !elem.element) { // #2616, element including flag is destroyed - ret = false; - - } else if (gotoEnd || t >= duration + this.startTime) { - this.now = this.end; - this.pos = 1; - this.update(); - - curAnim[this.prop] = true; - - done = true; - for (i in curAnim) { - if (curAnim[i] !== true) { - done = false; - } - } - - if (done && complete) { - complete.call(elem); - } - ret = false; - - } else { - this.pos = options.easing((t - this.startTime) / duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - ret = true; - } - return ret; - }, - - /** - * Prepare start and end values so that the path can be animated one to one - */ - initPath: function (elem, fromD, toD) { - fromD = fromD || ''; - var shift = elem.shift, - bezier = fromD.indexOf('C') > -1, - numParams = bezier ? 7 : 3, - endLength, - slice, - i, - start = fromD.split(' '), - end = [].concat(toD), // copy - startBaseLine, - endBaseLine, - sixify = function (arr) { // in splines make move points have six parameters like bezier curves - i = arr.length; - while (i--) { - if (arr[i] === M) { - arr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]); - } - } - }; - - if (bezier) { - sixify(start); - sixify(end); - } - - // pull out the base lines before padding - if (elem.isArea) { - startBaseLine = start.splice(start.length - 6, 6); - endBaseLine = end.splice(end.length - 6, 6); - } - - // if shifting points, prepend a dummy point to the end path - if (shift <= end.length / numParams && start.length === end.length) { - while (shift--) { - end = [].concat(end).splice(0, numParams).concat(end); - } - } - elem.shift = 0; // reset for following animations - - // copy and append last point until the length matches the end length - if (start.length) { - endLength = end.length; - while (start.length < endLength) { - - //bezier && sixify(start); - slice = [].concat(start).splice(start.length - numParams, numParams); - if (bezier) { // disable first control point - slice[numParams - 6] = slice[numParams - 2]; - slice[numParams - 5] = slice[numParams - 1]; - } - start = start.concat(slice); - } - } - - if (startBaseLine) { // append the base lines for areas - start = start.concat(startBaseLine); - end = end.concat(endBaseLine); - } - return [start, end]; - } - }; // End of Fx prototype - - - /** - * Extend an object with the members of another - * @param {Object} a The object to be extended - * @param {Object} b The object to add to the first one - */ - var extend = Highcharts.extend = function (a, b) { - var n; - if (!a) { - a = {}; - } - for (n in b) { - a[n] = b[n]; - } - return a; - }; - - /** - * Deep merge two or more objects and return a third object. If the first argument is - * true, the contents of the second object is copied into the first object. - * Previously this function redirected to jQuery.extend(true), but this had two limitations. - * First, it deep merged arrays, which lead to workarounds in Highcharts. Second, - * it copied properties from extended prototypes. - */ - function merge() { - var i, - args = arguments, - len, - ret = {}, - doCopy = function (copy, original) { - var value, key; - - // An object is replacing a primitive - if (typeof copy !== 'object') { - copy = {}; - } - - for (key in original) { - if (original.hasOwnProperty(key)) { - value = original[key]; - - // Copy the contents of objects, but not arrays or DOM nodes - if (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]' && - key !== 'renderTo' && typeof value.nodeType !== 'number') { - copy[key] = doCopy(copy[key] || {}, value); - - // Primitives and arrays are copied over directly - } else { - copy[key] = original[key]; - } - } - } - return copy; - }; - - // If first argument is true, copy into the existing object. Used in setOptions. - if (args[0] === true) { - ret = args[1]; - args = Array.prototype.slice.call(args, 2); - } - - // For each argument, extend the return - len = args.length; - for (i = 0; i < len; i++) { - ret = doCopy(ret, args[i]); - } - - return ret; - } - - /** - * Shortcut for parseInt - * @param {Object} s - * @param {Number} mag Magnitude - */ - function pInt(s, mag) { - return parseInt(s, mag || 10); - } - - /** - * Check for string - * @param {Object} s - */ - function isString(s) { - return typeof s === 'string'; - } - - /** - * Check for object - * @param {Object} obj - */ - function isObject(obj) { - return obj && typeof obj === 'object'; - } - - /** - * Check for array - * @param {Object} obj - */ - function isArray(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - } - - /** - * Check for number - * @param {Object} n - */ - function isNumber(n) { - return typeof n === 'number'; - } - - function log2lin(num) { - return math.log(num) / math.LN10; - } - function lin2log(num) { - return math.pow(10, num); - } - - /** - * Remove last occurence of an item from an array - * @param {Array} arr - * @param {Mixed} item - */ - function erase(arr, item) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - arr.splice(i, 1); - break; - } - } - //return arr; - } - - /** - * Returns true if the object is not null or undefined. - * @param {Object} obj - */ - function defined(obj) { - return obj !== UNDEFINED && obj !== null; - } - - /** - * Set or get an attribute or an object of attributes. Can't use jQuery attr because - * it attempts to set expando properties on the SVG element, which is not allowed. - * - * @param {Object} elem The DOM element to receive the attribute(s) - * @param {String|Object} prop The property or an abject of key-value pairs - * @param {String} value The value if a single property is set - */ - function attr(elem, prop, value) { - var key, - ret; - - // if the prop is a string - if (isString(prop)) { - // set the value - if (defined(value)) { - elem.setAttribute(prop, value); - - // get the value - } else if (elem && elem.getAttribute) { // elem not defined when printing pie demo... - ret = elem.getAttribute(prop); - } - - // else if prop is defined, it is a hash of key/value pairs - } else if (defined(prop) && isObject(prop)) { - for (key in prop) { - elem.setAttribute(key, prop[key]); - } - } - return ret; - } - /** - * Check if an element is an array, and if not, make it into an array. - */ - function splat(obj) { - return isArray(obj) ? obj : [obj]; - } - - /** - * Set a timeout if the delay is given, otherwise perform the function synchronously - * @param {Function} fn The function to perform - * @param {Number} delay Delay in milliseconds - * @param {Ojbect} context The context - * @returns {Nubmer} An identifier for the timeout - */ - function syncTimeout(fn, delay, context) { - if (delay) { - return setTimeout(fn, delay, context); - } - fn.call(0, context); - } - - - /** - * Return the first value that is defined. - */ - var pick = Highcharts.pick = function () { - var args = arguments, - i, - arg, - length = args.length; - for (i = 0; i < length; i++) { - arg = args[i]; - if (arg !== UNDEFINED && arg !== null) { - return arg; - } - } - }; - - /** - * Set CSS on a given element - * @param {Object} el - * @param {Object} styles Style object with camel case property names - */ - function css(el, styles) { - if (isMS && !hasSVG) { // #2686 - if (styles && styles.opacity !== UNDEFINED) { - styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; - } - } - extend(el.style, styles); - } - - /** - * Utility function to create element with attributes and styles - * @param {Object} tag - * @param {Object} attribs - * @param {Object} styles - * @param {Object} parent - * @param {Object} nopad - */ - function createElement(tag, attribs, styles, parent, nopad) { - var el = doc.createElement(tag); - if (attribs) { - extend(el, attribs); - } - if (nopad) { - css(el, { padding: 0, border: 'none', margin: 0 }); - } - if (styles) { - css(el, styles); - } - if (parent) { - parent.appendChild(el); - } - return el; - } - - /** - * Extend a prototyped class by new members - * @param {Object} parent - * @param {Object} members - */ - function extendClass(Parent, members) { - var object = function () { - }; - object.prototype = new Parent(); - extend(object.prototype, members); - return object; - } - - /** - * Pad a string to a given length by adding 0 to the beginning - * @param {Number} number - * @param {Number} length - */ - function pad(number, length) { - return new Array((length || 2) + 1 - String(number).length).join(0) + number; - } - - /** - * Return a length based on either the integer value, or a percentage of a base. - */ - function relativeLength(value, base) { - return (/%$/).test(value) ? base * parseFloat(value) / 100 : parseFloat(value); - } - - /** - * Wrap a method with extended functionality, preserving the original function - * @param {Object} obj The context object that the method belongs to - * @param {String} method The name of the method to extend - * @param {Function} func A wrapper function callback. This function is called with the same arguments - * as the original function, except that the original function is unshifted and passed as the first - * argument. - */ - var wrap = Highcharts.wrap = function (obj, method, func) { - var proceed = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - args.unshift(proceed); - return func.apply(this, args); - }; - }; - - - function getTZOffset(timestamp) { - return ((getTimezoneOffset && getTimezoneOffset(timestamp)) || timezoneOffset || 0) * 60000; - } - - /** - * Based on http://www.php.net/manual/en/function.strftime.php - * @param {String} format - * @param {Number} timestamp - * @param {Boolean} capitalize - */ - dateFormat = function (format, timestamp, capitalize) { - if (!defined(timestamp) || isNaN(timestamp)) { - return defaultOptions.lang.invalidDate || ''; - } - format = pick(format, '%Y-%m-%d %H:%M:%S'); - - var date = new Date(timestamp - getTZOffset(timestamp)), - key, // used in for constuct below - // get the basic time values - hours = date[getHours](), - day = date[getDay](), - dayOfMonth = date[getDate](), - month = date[getMonth](), - fullYear = date[getFullYear](), - lang = defaultOptions.lang, - langWeekdays = lang.weekdays, - - // List all format keys. Custom formats can be added from the outside. - replacements = extend({ - - // Day - 'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon' - 'A': langWeekdays[day], // Long weekday, like 'Monday' - 'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31 - 'e': dayOfMonth, // Day of the month, 1 through 31 - 'w': day, - - // Week (none implemented) - //'W': weekNumber(), - - // Month - 'b': lang.shortMonths[month], // Short month, like 'Jan' - 'B': lang.months[month], // Long month, like 'January' - 'm': pad(month + 1), // Two digit month number, 01 through 12 - - // Year - 'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009 - 'Y': fullYear, // Four digits year, like 2009 - - // Time - 'H': pad(hours), // Two digits hours in 24h format, 00 through 23 - 'k': hours, // Hours in 24h format, 0 through 23 - 'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11 - 'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12 - 'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59 - 'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM - 'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM - 'S': pad(date.getSeconds()), // Two digits seconds, 00 through 59 - 'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby) - }, Highcharts.dateFormats); - - - // do the replaces - for (key in replacements) { - while (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster - format = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]); - } - } - - // Optionally capitalize the string and return - return capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format; - }; - - /** - * Format a single variable. Similar to sprintf, without the % prefix. - */ - function formatSingle(format, val) { - var floatRegex = /f$/, - decRegex = /\.([0-9])/, - lang = defaultOptions.lang, - decimals; - - if (floatRegex.test(format)) { // float - decimals = format.match(decRegex); - decimals = decimals ? decimals[1] : -1; - if (val !== null) { - val = Highcharts.numberFormat( - val, - decimals, - lang.decimalPoint, - format.indexOf(',') > -1 ? lang.thousandsSep : '' - ); - } - } else { - val = dateFormat(format, val); - } - return val; - } - - /** - * Format a string according to a subset of the rules of Python's String.format method. - */ - function format(str, ctx) { - var splitter = '{', - isInside = false, - segment, - valueAndFormat, - path, - i, - len, - ret = [], - val, - index; - - while ((index = str.indexOf(splitter)) !== -1) { - - segment = str.slice(0, index); - if (isInside) { // we're on the closing bracket looking back - - valueAndFormat = segment.split(':'); - path = valueAndFormat.shift().split('.'); // get first and leave format - len = path.length; - val = ctx; - - // Assign deeper paths - for (i = 0; i < len; i++) { - val = val[path[i]]; - } - - // Format the replacement - if (valueAndFormat.length) { - val = formatSingle(valueAndFormat.join(':'), val); - } - - // Push the result and advance the cursor - ret.push(val); - - } else { - ret.push(segment); - - } - str = str.slice(index + 1); // the rest - isInside = !isInside; // toggle - splitter = isInside ? '}' : '{'; // now look for next matching bracket - } - ret.push(str); - return ret.join(''); - } - - /** - * Get the magnitude of a number - */ - function getMagnitude(num) { - return math.pow(10, mathFloor(math.log(num) / math.LN10)); - } - - /** - * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5 - * @param {Number} interval - * @param {Array} multiples - * @param {Number} magnitude - * @param {Object} options - */ - function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, preventExceed) { - var normalized, - i, - retInterval = interval; - - // round to a tenfold of 1, 2, 2.5 or 5 - magnitude = pick(magnitude, 1); - normalized = interval / magnitude; - - // multiples for a linear scale - if (!multiples) { - multiples = [1, 2, 2.5, 5, 10]; - - // the allowDecimals option - if (allowDecimals === false) { - if (magnitude === 1) { - multiples = [1, 2, 5, 10]; - } else if (magnitude <= 0.1) { - multiples = [1 / magnitude]; - } - } - } - - // normalize the interval to the nearest multiple - for (i = 0; i < multiples.length; i++) { - retInterval = multiples[i]; - if ((preventExceed && retInterval * magnitude >= interval) || // only allow tick amounts smaller than natural - (!preventExceed && (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2))) { - break; - } - } - - // multiply back to the correct magnitude - retInterval *= magnitude; - - return retInterval; - } - - - /** - * Utility method that sorts an object array and keeping the order of equal items. - * ECMA script standard does not specify the behaviour when items are equal. - */ - function stableSort(arr, sortFunction) { - var length = arr.length, - sortValue, - i; - - // Add index to each item - for (i = 0; i < length; i++) { - arr[i].safeI = i; // stable sort index - } - - arr.sort(function (a, b) { - sortValue = sortFunction(a, b); - return sortValue === 0 ? a.safeI - b.safeI : sortValue; - }); - - // Remove index from items - for (i = 0; i < length; i++) { - delete arr[i].safeI; // stable sort index - } - } - - /** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ - function arrayMin(data) { - var i = data.length, - min = data[0]; - - while (i--) { - if (data[i] < min) { - min = data[i]; - } - } - return min; - } - - /** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ - function arrayMax(data) { - var i = data.length, - max = data[0]; - - while (i--) { - if (data[i] > max) { - max = data[i]; - } - } - return max; - } - - /** - * Utility method that destroys any SVGElement or VMLElement that are properties on the given object. - * It loops all properties and invokes destroy if there is a destroy method. The property is - * then delete'ed. - * @param {Object} The object to destroy properties on - * @param {Object} Exception, do not destroy this property, only delete it. - */ - function destroyObjectProperties(obj, except) { - var n; - for (n in obj) { - // If the object is non-null and destroy is defined - if (obj[n] && obj[n] !== except && obj[n].destroy) { - // Invoke the destroy - obj[n].destroy(); - } - - // Delete the property from the object. - delete obj[n]; - } - } - - - /** - * Discard an element by moving it to the bin and delete - * @param {Object} The HTML node to discard - */ - function discardElement(element) { - // create a garbage bin element, not part of the DOM - if (!garbageBin) { - garbageBin = createElement(DIV); - } - - // move the node and empty bin - if (element) { - garbageBin.appendChild(element); - } - garbageBin.innerHTML = ''; - } - - /** - * Fix JS round off float errors - * @param {Number} num - */ - function correctFloat(num, prec) { - return parseFloat( - num.toPrecision(prec || 14) - ); - } - - /** - * Set the global animation to either a given value, or fall back to the - * given chart's animation option - * @param {Object} animation - * @param {Object} chart - */ - function setAnimation(animation, chart) { - chart.renderer.globalAnimation = pick(animation, chart.animation); - } - - /** - * The time unit lookup - */ - timeUnits = { - millisecond: 1, - second: 1000, - minute: 60000, - hour: 3600000, - day: 24 * 3600000, - week: 7 * 24 * 3600000, - month: 28 * 24 * 3600000, - year: 364 * 24 * 3600000 - }; - - - /** - * Format a number and return a string based on input settings - * @param {Number} number The input number to format - * @param {Number} decimals The amount of decimals - * @param {String} decPoint The decimal point, defaults to the one given in the lang options - * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options - */ - Highcharts.numberFormat = function (number, decimals, decPoint, thousandsSep) { - var lang = defaultOptions.lang, - // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/ - n = +number || 0, - c = decimals === -1 ? - Math.min((n.toString().split('.')[1] || '').length, 20) : // Preserve decimals. Not huge numbers (#3793). - (isNaN(decimals = Math.abs(decimals)) ? 2 : decimals), - d = decPoint === undefined ? lang.decimalPoint : decPoint, - t = thousandsSep === undefined ? lang.thousandsSep : thousandsSep, - s = n < 0 ? '-' : '', - i = String(pInt(n = mathAbs(n).toFixed(c))), - j = i.length > 3 ? i.length % 3 : 0; - - return (s + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + t) + - (c ? d + mathAbs(n - i).toFixed(c).slice(2) : '')); - }; - - /** - * Easing definition - * @param {Number} pos Current position, ranging from 0 to 1 - */ - Math.easeInOutSine = function (pos) { - return -0.5 * (Math.cos(Math.PI * pos) - 1); - }; - - /** - * Internal method to return CSS value for given element and property - */ - getStyle = function (el, prop) { - var style = win.getComputedStyle(el, undefined); - return style && pInt(style.getPropertyValue(prop)); - }; - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray = function (item, arr) { - return arr.indexOf ? arr.indexOf(item) : [].indexOf.call(arr, item); - }; - - /** - * Filter an array - */ - grep = function (elements, callback) { - return [].filter.call(elements, callback); - }; - - /** - * Map an array - */ - map = function (arr, fn) { - var results = [], i = 0, len = arr.length; - - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - - return results; - }; - - /** - * Get the element's offset position, corrected by overflow:auto. - */ - offset = function (el) { - var docElem = doc.documentElement, - box = el.getBoundingClientRect(); - - return { - top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - }; - - /** - * Stop running animation. - * A possible extension to this would be to stop a single property, when - * we want to continue animating others. Then assign the prop to the timer - * in the Fx.run method, and check for the prop here. This would be an improvement - * in all cases where we stop the animation from .attr. Instead of stopping - * everything, we can just stop the actual attributes we're setting. - */ - stop = function (el) { - - var i = timers.length; - - // Remove timers related to this element (#4519) - while (i--) { - if (timers[i].elem === el) { - timers[i].stopped = true; // #4667 - } - } - }; - - /** - * Utility for iterating over an array. - * @param {Array} arr - * @param {Function} fn - */ - each = function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - }; - - /** - * Add an event listener - */ - addEvent = function (el, type, fn) { - - var events = el.hcEvents = el.hcEvents || {}; - - function wrappedFn(e) { - e.target = e.srcElement || win; // #2820 - fn.call(el, e); - } - - // Handle DOM events in modern browsers - if (el.addEventListener) { - el.addEventListener(type, fn, false); - - // Handle old IE implementation - } else if (el.attachEvent) { - - if (!el.hcEventsIE) { - el.hcEventsIE = {}; - } - - // Link wrapped fn with original fn, so we can get this in removeEvent - el.hcEventsIE[fn.toString()] = wrappedFn; - - el.attachEvent('on' + type, wrappedFn); - } - - if (!events[type]) { - events[type] = []; - } - - events[type].push(fn); - }; - - /** - * Remove event added with addEvent - */ - removeEvent = function (el, type, fn) { - - var events, - hcEvents = el.hcEvents, - index; - - function removeOneEvent(type, fn) { - if (el.removeEventListener) { - el.removeEventListener(type, fn, false); - } else if (el.attachEvent) { - fn = el.hcEventsIE[fn.toString()]; - el.detachEvent('on' + type, fn); - } - } - - function removeAllEvents() { - var types, - len, - n; - - if (!el.nodeName) { - return; // break on non-DOM events - } - - if (type) { - types = {}; - types[type] = true; - } else { - types = hcEvents; - } - - for (n in types) { - if (hcEvents[n]) { - len = hcEvents[n].length; - while (len--) { - removeOneEvent(n, hcEvents[n][len]); - } - } - } - } - - if (hcEvents) { - if (type) { - events = hcEvents[type] || []; - if (fn) { - index = inArray(fn, events); - if (index > -1) { - events.splice(index, 1); - hcEvents[type] = events; - } - removeOneEvent(type, fn); - - } else { - removeAllEvents(); - hcEvents[type] = []; - } - } else { - removeAllEvents(); - el.hcEvents = {}; - } - } - }; - - /** - * Fire an event on a custom object - */ - fireEvent = function (el, type, eventArguments, defaultFunction) { - var e, - hcEvents = el.hcEvents, - events, - len, - i, - preventDefault, - fn; - - eventArguments = eventArguments || {}; - - if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { - e = doc.createEvent('Events'); - e.initEvent(type, true, true); - e.target = el; - - extend(e, eventArguments); - - if (el.dispatchEvent) { - el.dispatchEvent(e); - } else { - el.fireEvent(type, e); - } - - } else if (hcEvents) { - - events = hcEvents[type] || []; - len = events.length; - - // Attach a simple preventDefault function to skip default handler if called - preventDefault = function () { - eventArguments.defaultPrevented = true; - }; - - for (i = 0; i < len; i++) { - fn = events[i]; - - // eventArguments is never null here - if (eventArguments.stopped) { - return; - } - - eventArguments.preventDefault = preventDefault; - eventArguments.target = el; - - // If the type is not set, we're running a custom event (#2297). If it is set, - // we're running a browser event, and setting it will cause en error in - // IE8 (#2465). - if (!eventArguments.type) { - eventArguments.type = type; - } - - // If the event handler return false, prevent the default handler from executing - if (fn.call(el, eventArguments) === false) { - eventArguments.preventDefault(); - } - } - } - - // Run the default if not prevented - if (defaultFunction && !eventArguments.defaultPrevented) { - defaultFunction(eventArguments); - } - }; - - /** - * The global animate method, which uses Fx to create individual animators. - */ - animate = function (el, params, opt) { - var start, - unit = '', - end, - fx, - args, - prop; - - if (!isObject(opt)) { // Number or undefined/null - args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (!isNumber(opt.duration)) { - opt.duration = 400; - } - opt.easing = Math[opt.easing] || Math.easeInOutSine; - opt.curAnim = merge(params); - - for (prop in params) { - fx = new Fx(el, opt, prop); - end = null; - - if (prop === 'd') { - fx.paths = fx.initPath( - el, - el.d, - params.d - ); - fx.toD = params.d; - start = 0; - end = 1; - } else if (el.attr) { - start = el.attr(prop); - } else { - start = parseFloat(getStyle(el, prop)) || 0; - if (prop !== 'opacity') { - unit = 'px'; - } - } - - if (!end) { - end = params[prop]; - } - if (end.match && end.match('px')) { - end = end.replace(/px/g, ''); // #4351 - } - fx.run(start, end, unit); - } - }; - - /** - * Register Highcharts as a plugin in jQuery - */ - if (win.jQuery) { - win.jQuery.fn.highcharts = function () { - var args = [].slice.call(arguments); - - if (this[0]) { // this[0] is the renderTo div - - // Create the chart - if (args[0]) { - new Highcharts[ // eslint-disable-line no-new - isString(args[0]) ? args.shift() : 'Chart' // Constructor defaults to Chart - ](this[0], args[0], args[1]); - return this; - } - - // When called without parameters or with the return argument, return an existing chart - return charts[attr(this[0], 'data-highcharts-chart')]; - } - }; - } - - - /** - * Compatibility section to add support for legacy IE. This can be removed if old IE - * support is not needed. - */ - if (doc && !doc.defaultView) { - getStyle = function (el, prop) { - var val, - alias = { width: 'clientWidth', height: 'clientHeight' }[prop]; - - if (el.style[prop]) { - return pInt(el.style[prop]); - } - if (prop === 'opacity') { - prop = 'filter'; - } - - // Getting the rendered width and height - if (alias) { - el.style.zoom = 1; - return el[alias] - 2 * getStyle(el, 'padding'); - } - - val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { - return b.toUpperCase(); - })]; - if (prop === 'filter') { - val = val.replace( - /alpha\(opacity=([0-9]+)\)/, - function (a, b) { - return b / 100; - } - ); - } - - return val === '' ? 1 : pInt(val); - }; - } - - if (!Array.prototype.forEach) { - each = function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - } - - if (!Array.prototype.indexOf) { - inArray = function (item, arr) { - var len, - i = 0; - - if (arr) { - len = arr.length; - - for (; i < len; i++) { - if (arr[i] === item) { - return i; - } - } - } - - return -1; - }; - } - - if (!Array.prototype.filter) { - grep = function (elements, fn) { - var ret = [], - i = 0, - length = elements.length; - - for (; i < length; i++) { - if (fn(elements[i], i)) { - ret.push(elements[i]); - } - } - - return ret; - }; - } - - //--- End compatibility section --- - - // Expose utilities - Highcharts.Fx = Fx; - Highcharts.inArray = inArray; - Highcharts.each = each; - Highcharts.grep = grep; - Highcharts.offset = offset; - Highcharts.map = map; - Highcharts.addEvent = addEvent; - Highcharts.removeEvent = removeEvent; - Highcharts.fireEvent = fireEvent; - Highcharts.animate = animate; - Highcharts.stop = stop; - - /* **************************************************************************** - * Handle the options * - *****************************************************************************/ - defaultOptions = { - colors: ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', - '#8085e9', '#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1'], - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December'], - shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - // invalidDate: '', - decimalPoint: '.', - numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ' ' - }, - global: { - useUTC: true, - //timezoneOffset: 0, - canvasToolsURL: 'http://code.highcharts.com/modules/canvas-tools.js', - VMLRadialGradientURL: 'http://code.highcharts.com/4.2.1/gfx/vml-radial-gradient.png' - }, - chart: { - //animation: true, - //alignTicks: false, - //reflow: true, - //className: null, - //events: { load, selection }, - //margin: [null], - //marginTop: null, - //marginRight: null, - //marginBottom: null, - //marginLeft: null, - borderColor: '#4572A7', - //borderWidth: 0, - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: true, - //inverted: false, - //shadow: false, - spacing: [10, 10, 15, 10], - //spacingTop: 10, - //spacingRight: 10, - //spacingBottom: 15, - //spacingLeft: 10, - //style: { - // fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // default font - // fontSize: '12px' - //}, - backgroundColor: '#FFFFFF', - //plotBackgroundColor: null, - plotBorderColor: '#C0C0C0', - //plotBorderWidth: 0, - //plotShadow: false, - //zoomType: '' - resetZoomButton: { - theme: { - zIndex: 20 - }, - position: { - align: 'right', - x: -10, - //verticalAlign: 'top', - y: 10 - } - // relativeTo: 'plot' - } - }, - title: { - text: 'Chart title', - align: 'center', - // floating: false, - margin: 15, - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#333333', - fontSize: '18px' - } - - }, - subtitle: { - text: '', - align: 'center', - // floating: false - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#555555' - } - }, - - plotOptions: { - line: { // base series options - allowPointSelect: false, - showCheckbox: false, - animation: { - duration: 1000 - }, - //connectNulls: false, - //cursor: 'default', - //clip: true, - //dashStyle: null, - //enableMouseTracking: true, - events: {}, - //legendIndex: 0, - //linecap: 'round', - lineWidth: 2, - //shadow: false, - // stacking: null, - marker: { - //enabled: true, - //symbol: null, - lineWidth: 0, - radius: 4, - lineColor: '#FFFFFF', - //fillColor: null, - states: { // states for a single point - hover: { - enabled: true, - lineWidthPlus: 1, - radiusPlus: 2 - }, - select: { - fillColor: '#FFFFFF', - lineColor: '#000000', - lineWidth: 2 - } - } - }, - point: { - events: {} - }, - dataLabels: { - align: 'center', - // defer: true, - // enabled: false, - formatter: function () { - return this.y === null ? '' : Highcharts.numberFormat(this.y, -1); - }, - style: { - color: 'contrast', - fontSize: '11px', - fontWeight: 'bold', - textShadow: '0 0 6px contrast, 0 0 3px contrast' - }, - verticalAlign: 'bottom', // above singular point - x: 0, - y: 0, - // backgroundColor: undefined, - // borderColor: undefined, - // borderRadius: undefined, - // borderWidth: undefined, - padding: 5 - // shadow: false - }, - cropThreshold: 300, // draw points outside the plot area when the number of points is less than this - pointRange: 0, - //pointStart: 0, - //pointInterval: 1, - //showInLegend: null, // auto: true for standalone series, false for linked series - softThreshold: true, - states: { // states for the entire series - hover: { - //enabled: false, - lineWidthPlus: 1, - marker: { - // lineWidth: base + 1, - // radius: base + 1 - }, - halo: { - size: 10, - opacity: 0.25 - } - }, - select: { - marker: {} - } - }, - stickyTracking: true, - //tooltip: { - //pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.y}</b>' - //valueDecimals: null, - //xDateFormat: '%A, %b %e, %Y', - //valuePrefix: '', - //ySuffix: '' - //} - turboThreshold: 1000 - // zIndex: null - } - }, - labels: { - //items: [], - style: { - //font: defaultFont, - position: ABSOLUTE, - color: '#3E576F' - } - }, - legend: { - enabled: true, - align: 'center', - //floating: false, - layout: 'horizontal', - labelFormatter: function () { - return this.name; - }, - //borderWidth: 0, - borderColor: '#909090', - borderRadius: 0, - navigation: { - // animation: true, - activeColor: '#274b6d', - // arrowSize: 12 - inactiveColor: '#CCC' - // style: {} // text styles - }, - // margin: 20, - // reversed: false, - shadow: false, - // backgroundColor: null, - /*style: { - padding: '5px' - },*/ - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold' - }, - itemHoverStyle: { - //cursor: 'pointer', removed as of #601 - color: '#000' - }, - itemHiddenStyle: { - color: '#CCC' - }, - itemCheckboxStyle: { - position: ABSOLUTE, - width: '13px', // for IE precision - height: '13px' - }, - // itemWidth: undefined, - // symbolRadius: 0, - // symbolWidth: 16, - symbolPadding: 5, - verticalAlign: 'bottom', - // width: undefined, - x: 0, - y: 0, - title: { - //text: null, - style: { - fontWeight: 'bold' - } - } - }, - - loading: { - // hideDuration: 100, - labelStyle: { - fontWeight: 'bold', - position: RELATIVE, - top: '45%' - }, - // showDuration: 0, - style: { - position: ABSOLUTE, - backgroundColor: 'white', - opacity: 0.5, - textAlign: 'center' - } - }, - - tooltip: { - enabled: true, - animation: hasSVG, - //crosshairs: null, - backgroundColor: 'rgba(249, 249, 249, .85)', - borderWidth: 1, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y' - }, - footerFormat: '', - //formatter: defaultFormatter, - headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>', - pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.y}</b><br/>', - shadow: true, - //shape: 'callout', - //shared: false, - snap: isTouchDevice ? 25 : 10, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - padding: '8px', - pointerEvents: 'none', // #1686 http://caniuse.com/#feat=pointer-events - whiteSpace: 'nowrap' - } - //xDateFormat: '%A, %b %e, %Y', - //valueDecimals: null, - //valuePrefix: '', - //valueSuffix: '' - }, - - credits: { - enabled: true, - text: 'Highcharts.com', - href: 'http://www.highcharts.com', - position: { - align: 'right', - x: -10, - verticalAlign: 'bottom', - y: -5 - }, - style: { - cursor: 'pointer', - color: '#909090', - fontSize: '9px' - } - } - }; - - - - /** - * Set the time methods globally based on the useUTC option. Time method can be either - * local time or UTC (default). - */ - function setTimeMethods() { - var globalOptions = defaultOptions.global, - useUTC = globalOptions.useUTC, - GET = useUTC ? 'getUTC' : 'get', - SET = useUTC ? 'setUTC' : 'set'; - - - Date = globalOptions.Date || win.Date; - timezoneOffset = useUTC && globalOptions.timezoneOffset; - getTimezoneOffset = useUTC && globalOptions.getTimezoneOffset; - makeTime = function (year, month, date, hours, minutes, seconds) { - var d; - if (useUTC) { - d = Date.UTC.apply(0, arguments); - d += getTZOffset(d); - } else { - d = new Date( - year, - month, - pick(date, 1), - pick(hours, 0), - pick(minutes, 0), - pick(seconds, 0) - ).getTime(); - } - return d; - }; - getMinutes = GET + 'Minutes'; - getHours = GET + 'Hours'; - getDay = GET + 'Day'; - getDate = GET + 'Date'; - getMonth = GET + 'Month'; - getFullYear = GET + 'FullYear'; - setMilliseconds = SET + 'Milliseconds'; - setSeconds = SET + 'Seconds'; - setMinutes = SET + 'Minutes'; - setHours = SET + 'Hours'; - setDate = SET + 'Date'; - setMonth = SET + 'Month'; - setFullYear = SET + 'FullYear'; - - } - - /** - * Merge the default options with custom options and return the new options structure - * @param {Object} options The new custom options - */ - function setOptions(options) { - - // Copy in the default options - defaultOptions = merge(true, defaultOptions, options); - - // Apply UTC - setTimeMethods(); - - return defaultOptions; - } - - /** - * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules - * wasn't enough because the setOptions method created a new object. - */ - function getOptions() { - return defaultOptions; - } - - - - - - - // Series defaults - var defaultPlotOptions = defaultOptions.plotOptions, - defaultSeriesOptions = defaultPlotOptions.line; - - // set the default time methods - setTimeMethods(); - - - /** - * Handle color operations. The object methods are chainable. - * @param {String} input The input color in either rbga or hex format - */ - function Color(input) { - // Backwards compatibility, allow instanciation without new - if (!(this instanceof Color)) { - return new Color(input); - } - // Initialize - this.init(input); - } - Color.prototype = { - - // Collection of parsers. This can be extended from the outside by pushing parsers - // to Highcharts.Colors.prototype.parsers. - parsers: [{ - // RGBA color - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function (result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; - } - }, { - // HEX color - regex: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, - parse: function (result) { - return [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1]; - } - }, { - // RGB color - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function (result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; - } - }], - - /** - * Parse the input color to rgba array - * @param {String} input - */ - init: function (input) { - var result, - rgba, - i, - parser; - - this.input = input; - - // Gradients - if (input && input.stops) { - this.stops = map(input.stops, function (stop) { - return new Color(stop[1]); - }); - - // Solid colors - } else { - i = this.parsers.length; - while (i-- && !rgba) { - parser = this.parsers[i]; - result = parser.regex.exec(input); - if (result) { - rgba = parser.parse(result); - } - } - } - this.rgba = rgba || []; - }, - - /** - * Return the color a specified format - * @param {String} format - */ - get: function (format) { - var input = this.input, - rgba = this.rgba, - ret; - - if (this.stops) { - ret = merge(input); - ret.stops = [].concat(ret.stops); - each(this.stops, function (stop, i) { - ret.stops[i] = [ret.stops[i][0], stop.get(format)]; - }); - - // it's NaN if gradient colors on a column chart - } else if (rgba && !isNaN(rgba[0])) { - if (format === 'rgb' || (!format && rgba[3] === 1)) { - ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; - } else if (format === 'a') { - ret = rgba[3]; - } else { - ret = 'rgba(' + rgba.join(',') + ')'; - } - } else { - ret = input; - } - return ret; - }, - - /** - * Brighten the color - * @param {Number} alpha - */ - brighten: function (alpha) { - var i, - rgba = this.rgba; - - if (this.stops) { - each(this.stops, function (stop) { - stop.brighten(alpha); - }); - - } else if (isNumber(alpha) && alpha !== 0) { - for (i = 0; i < 3; i++) { - rgba[i] += pInt(alpha * 255); - - if (rgba[i] < 0) { - rgba[i] = 0; - } - if (rgba[i] > 255) { - rgba[i] = 255; - } - } - } - return this; - }, - - /** - * Set the color's opacity to a given alpha value - * @param {Number} alpha - */ - setOpacity: function (alpha) { - this.rgba[3] = alpha; - return this; - } - }; - - - /** - * A wrapper object for SVG elements - */ - function SVGElement() {} - - SVGElement.prototype = { - - // Default base for animation - opacity: 1, - // For labels, these CSS properties are applied to the <text> node directly - textProps: ['direction', 'fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'color', - 'lineHeight', 'width', 'textDecoration', 'textOverflow', 'textShadow'], - - /** - * Initialize the SVG renderer - * @param {Object} renderer - * @param {String} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this; - wrapper.element = nodeName === 'span' ? - createElement(nodeName) : - doc.createElementNS(SVG_NS, nodeName); - wrapper.renderer = renderer; - }, - - /** - * Animate a given attribute - * @param {Object} params - * @param {Number} options Options include duration, easing, step and complete - * @param {Function} complete Function to perform at the end of animation - */ - animate: function (params, options, complete) { - var animOptions = pick(options, this.renderer.globalAnimation, true); - stop(this); // stop regardless of animation actually running, or reverting to .attr (#607) - if (animOptions) { - animOptions = merge(animOptions, {}); //#2625 - if (complete) { // allows using a callback with the global animation without overwriting it - animOptions.complete = complete; - } - animate(this, params, animOptions); - } else { - this.attr(params, null, complete); - } - return this; - }, - - /** - * Build an SVG gradient out of a common JavaScript configuration object - */ - colorGradient: function (color, prop, elem) { - var renderer = this.renderer, - colorObject, - gradName, - gradAttr, - radAttr, - gradients, - gradientObject, - stops, - stopColor, - stopOpacity, - radialReference, - n, - id, - key = [], - value; - - // Apply linear or radial gradients - if (color.linearGradient) { - gradName = 'linearGradient'; - } else if (color.radialGradient) { - gradName = 'radialGradient'; - } - - if (gradName) { - gradAttr = color[gradName]; - gradients = renderer.gradients; - stops = color.stops; - radialReference = elem.radialReference; - - // Keep < 2.2 kompatibility - if (isArray(gradAttr)) { - color[gradName] = gradAttr = { - x1: gradAttr[0], - y1: gradAttr[1], - x2: gradAttr[2], - y2: gradAttr[3], - gradientUnits: 'userSpaceOnUse' - }; - } - - // Correct the radial gradient for the radial reference system - if (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) { - radAttr = gradAttr; // Save the radial attributes for updating - gradAttr = merge(gradAttr, - renderer.getRadialAttr(radialReference, radAttr), - { gradientUnits: 'userSpaceOnUse' } - ); - } - - // Build the unique key to detect whether we need to create a new element (#1282) - for (n in gradAttr) { - if (n !== 'id') { - key.push(n, gradAttr[n]); - } - } - for (n in stops) { - key.push(stops[n]); - } - key = key.join(','); - - // Check if a gradient object with the same config object is created within this renderer - if (gradients[key]) { - id = gradients[key].attr('id'); - - } else { - - // Set the id and create the element - gradAttr.id = id = PREFIX + idCounter++; - gradients[key] = gradientObject = renderer.createElement(gradName) - .attr(gradAttr) - .add(renderer.defs); - - gradientObject.radAttr = radAttr; - - // The gradient needs to keep a list of stops to be able to destroy them - gradientObject.stops = []; - each(stops, function (stop) { - var stopObject; - if (stop[1].indexOf('rgba') === 0) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - stopObject = renderer.createElement('stop').attr({ - offset: stop[0], - 'stop-color': stopColor, - 'stop-opacity': stopOpacity - }).add(gradientObject); - - // Add the stop element to the gradient - gradientObject.stops.push(stopObject); - }); - } - - // Set the reference to the gradient object - value = 'url(' + renderer.url + '#' + id + ')'; - elem.setAttribute(prop, value); - elem.gradient = key; - - // Allow the color to be concatenated into tooltips formatters etc. (#2995) - color.toString = function () { - return value; - }; - } - }, - - /** - * Apply a polyfill to the text-stroke CSS property, by copying the text element - * and apply strokes to the copy. - * - * Contrast checks at http://jsfiddle.net/highcharts/43soe9m1/2/ - * - * docs: update default, document the polyfill and the limitations on hex colors and pixel values, document contrast pseudo-color - */ - applyTextShadow: function (textShadow) { - var elem = this.element, - tspans, - hasContrast = textShadow.indexOf('contrast') !== -1, - styles = {}, - forExport = this.renderer.forExport, - // IE10 and IE11 report textShadow in elem.style even though it doesn't work. Check - // this again with new IE release. In exports, the rendering is passed to PhantomJS. - supports = forExport || (elem.style.textShadow !== UNDEFINED && !isMS); - - // When the text shadow is set to contrast, use dark stroke for light text and vice versa - if (hasContrast) { - styles.textShadow = textShadow = textShadow.replace(/contrast/g, this.renderer.getContrast(elem.style.fill)); - } - - // Safari with retina displays as well as PhantomJS bug (#3974). Firefox does not tolerate this, - // it removes the text shadows. - if (isWebKit || forExport) { - styles.textRendering = 'geometricPrecision'; - } - - /* Selective side-by-side testing in supported browser (http://jsfiddle.net/highcharts/73L1ptrh/) - if (elem.textContent.indexOf('2.') === 0) { - elem.style['text-shadow'] = 'none'; - supports = false; - } - // */ - - // No reason to polyfill, we've got native support - if (supports) { - this.css(styles); // Apply altered textShadow or textRendering workaround - } else { - - this.fakeTS = true; // Fake text shadow - - // In order to get the right y position of the clones, - // copy over the y setter - this.ySetter = this.xSetter; - - tspans = [].slice.call(elem.getElementsByTagName('tspan')); - each(textShadow.split(/\s?,\s?/g), function (textShadow) { - var firstChild = elem.firstChild, - color, - strokeWidth; - - textShadow = textShadow.split(' '); - color = textShadow[textShadow.length - 1]; - - // Approximately tune the settings to the text-shadow behaviour - strokeWidth = textShadow[textShadow.length - 2]; - - if (strokeWidth) { - each(tspans, function (tspan, y) { - var clone; - - // Let the first line start at the correct X position - if (y === 0) { - tspan.setAttribute('x', elem.getAttribute('x')); - y = elem.getAttribute('y'); - tspan.setAttribute('y', y || 0); - if (y === null) { - elem.setAttribute('y', 0); - } - } - - // Create the clone and apply shadow properties - clone = tspan.cloneNode(1); - attr(clone, { - 'class': PREFIX + 'text-shadow', - 'fill': color, - 'stroke': color, - 'stroke-opacity': 1 / mathMax(pInt(strokeWidth), 3), - 'stroke-width': strokeWidth, - 'stroke-linejoin': 'round' - }); - elem.insertBefore(clone, firstChild); - }); - } - }); - } - }, - - /** - * Set or get a given attribute - * @param {Object|String} hash - * @param {Mixed|Undefined} val - */ - attr: function (hash, val, complete) { - var key, - value, - element = this.element, - hasSetSymbolSize, - ret = this, - skipAttr; - - // single key-value pair - if (typeof hash === 'string' && val !== UNDEFINED) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter: first argument is a string, second is undefined - if (typeof hash === 'string') { - ret = (this[hash + 'Getter'] || this._defaultGetter).call(this, hash, element); - - // setter - } else { - - for (key in hash) { - value = hash[key]; - skipAttr = false; - - - - if (this.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) { - if (!hasSetSymbolSize) { - this.symbolAttr(hash); - hasSetSymbolSize = true; - } - skipAttr = true; - } - - if (this.rotation && (key === 'x' || key === 'y')) { - this.doTransform = true; - } - - if (!skipAttr) { - (this[key + 'Setter'] || this._defaultSetter).call(this, value, key, element); - } - - // Let the shadow follow the main element - if (this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) { - this.updateShadows(key, value); - } - } - - // Update transform. Do this outside the loop to prevent redundant updating for batch setting - // of attributes. - if (this.doTransform) { - this.updateTransform(); - this.doTransform = false; - } - - } - - // In accordance with animate, run a complete callback - if (complete) { - complete(); - } - - return ret; - }, - - updateShadows: function (key, value) { - var shadows = this.shadows, - i = shadows.length; - while (i--) { - shadows[i].setAttribute( - key, - key === 'height' ? - Math.max(value - (shadows[i].cutHeight || 0), 0) : - key === 'd' ? this.d : value - ); - } - }, - - /** - * Add a class name to an element - */ - addClass: function (className) { - var element = this.element, - currentClassName = attr(element, 'class') || ''; - - if (currentClassName.indexOf(className) === -1) { - attr(element, 'class', currentClassName + ' ' + className); - } - return this; - }, - /* hasClass and removeClass are not (yet) needed - hasClass: function (className) { - return attr(this.element, 'class').indexOf(className) !== -1; - }, - removeClass: function (className) { - attr(this.element, 'class', attr(this.element, 'class').replace(className, '')); - return this; - }, - */ - - /** - * If one of the symbol size affecting parameters are changed, - * check all the others only once for each call to an element's - * .attr() method - * @param {Object} hash - */ - symbolAttr: function (hash) { - var wrapper = this; - - each(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) { - wrapper[key] = pick(hash[key], wrapper[key]); - }); - - wrapper.attr({ - d: wrapper.renderer.symbols[wrapper.symbolName]( - wrapper.x, - wrapper.y, - wrapper.width, - wrapper.height, - wrapper - ) - }); - }, - - /** - * Apply a clipping path to this object - * @param {String} id - */ - clip: function (clipRect) { - return this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE); - }, - - /** - * Calculate the coordinates needed for drawing a rectangle crisply and return the - * calculated attributes - * @param {Number} strokeWidth - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - crisp: function (rect) { - - var wrapper = this, - key, - attribs = {}, - normalizer, - strokeWidth = rect.strokeWidth || wrapper.strokeWidth || 0; - - normalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors - - // normalize for crisp edges - rect.x = mathFloor(rect.x || wrapper.x || 0) + normalizer; - rect.y = mathFloor(rect.y || wrapper.y || 0) + normalizer; - rect.width = mathFloor((rect.width || wrapper.width || 0) - 2 * normalizer); - rect.height = mathFloor((rect.height || wrapper.height || 0) - 2 * normalizer); - rect.strokeWidth = strokeWidth; - - for (key in rect) { - if (wrapper[key] !== rect[key]) { // only set attribute if changed - wrapper[key] = attribs[key] = rect[key]; - } - } - - return attribs; - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: function (styles) { - var elemWrapper = this, - oldStyles = elemWrapper.styles, - newStyles = {}, - elem = elemWrapper.element, - textWidth, - n, - serializedCss = '', - hyphenate, - hasNew = !oldStyles; - - // convert legacy - if (styles && styles.color) { - styles.fill = styles.color; - } - - // Filter out existing styles to increase performance (#2640) - if (oldStyles) { - for (n in styles) { - if (styles[n] !== oldStyles[n]) { - newStyles[n] = styles[n]; - hasNew = true; - } - } - } - if (hasNew) { - textWidth = elemWrapper.textWidth = - (styles && styles.width && elem.nodeName.toLowerCase() === 'text' && pInt(styles.width)) || - elemWrapper.textWidth; // #3501 - - // Merge the new styles with the old ones - if (oldStyles) { - styles = extend( - oldStyles, - newStyles - ); - } - - // store object - elemWrapper.styles = styles; - - if (textWidth && (useCanVG || (!hasSVG && elemWrapper.renderer.forExport))) { - delete styles.width; - } - - // serialize and set style attribute - if (isMS && !hasSVG) { - css(elemWrapper.element, styles); - } else { - hyphenate = function (a, b) { - return '-' + b.toLowerCase(); - }; - for (n in styles) { - serializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';'; - } - attr(elem, 'style', serializedCss); // #1881 - } - - - // re-build text - if (textWidth && elemWrapper.added) { - elemWrapper.renderer.buildText(elemWrapper); - } - } - - return elemWrapper; - }, - - /** - * Add an event listener - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - var svgElement = this, - element = svgElement.element; - - // touch - if (hasTouch && eventType === 'click') { - element.ontouchstart = function (e) { - svgElement.touchEventFired = Date.now(); - e.preventDefault(); - handler.call(element, e); - }; - element.onclick = function (e) { - if (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269 - handler.call(element, e); - } - }; - } else { - // simplest possible event model for internal use - element['on' + eventType] = handler; - } - return this; - }, - - /** - * Set the coordinates needed to draw a consistent radial gradient across - * pie slices regardless of positioning inside the chart. The format is - * [centerX, centerY, diameter] in pixels. - */ - setRadialReference: function (coordinates) { - var existingGradient = this.renderer.gradients[this.element.gradient]; - - this.element.radialReference = coordinates; - - // On redrawing objects with an existing gradient, the gradient needs - // to be repositioned (#3801) - if (existingGradient && existingGradient.radAttr) { - existingGradient.animate( - this.renderer.getRadialAttr( - coordinates, - existingGradient.radAttr - ) - ); - } - - return this; - }, - - /** - * Move an object and its children by x and y values - * @param {Number} x - * @param {Number} y - */ - translate: function (x, y) { - return this.attr({ - translateX: x, - translateY: y - }); - }, - - /** - * Invert a group, rotate and flip - */ - invert: function () { - var wrapper = this; - wrapper.inverted = true; - wrapper.updateTransform(); - return wrapper; - }, - - /** - * Private method to update the transform attribute based on internal - * properties - */ - updateTransform: function () { - var wrapper = this, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - scaleX = wrapper.scaleX, - scaleY = wrapper.scaleY, - inverted = wrapper.inverted, - rotation = wrapper.rotation, - element = wrapper.element, - transform; - - // flipping affects translate as adjustment for flipping around the group's axis - if (inverted) { - translateX += wrapper.attr('width'); - translateY += wrapper.attr('height'); - } - - // Apply translate. Nearly all transformed elements have translation, so instead - // of checking for translate = 0, do it always (#1767, #1846). - transform = ['translate(' + translateX + ',' + translateY + ')']; - - // apply rotation - if (inverted) { - transform.push('rotate(90) scale(-1,1)'); - } else if (rotation) { // text rotation - transform.push('rotate(' + rotation + ' ' + (element.getAttribute('x') || 0) + ' ' + (element.getAttribute('y') || 0) + ')'); - - // Delete bBox memo when the rotation changes - //delete wrapper.bBox; - } - - // apply scale - if (defined(scaleX) || defined(scaleY)) { - transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')'); - } - - if (transform.length) { - element.setAttribute('transform', transform.join(' ')); - } - }, - /** - * Bring the element to the front - */ - toFront: function () { - var element = this.element; - element.parentNode.appendChild(element); - return this; - }, - - - /** - * Break down alignment options like align, verticalAlign, x and y - * to x and y relative to the chart. - * - * @param {Object} alignOptions - * @param {Boolean} alignByTranslate - * @param {String[Object} box The box to align to, needs a width and height. When the - * box is a string, it refers to an object in the Renderer. For example, when - * box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height - * x and y properties. - * - */ - align: function (alignOptions, alignByTranslate, box) { - var align, - vAlign, - x, - y, - attribs = {}, - alignTo, - renderer = this.renderer, - alignedObjects = renderer.alignedObjects; - - // First call on instanciate - if (alignOptions) { - this.alignOptions = alignOptions; - this.alignByTranslate = alignByTranslate; - if (!box || isString(box)) { // boxes other than renderer handle this internally - this.alignTo = alignTo = box || 'renderer'; - erase(alignedObjects, this); // prevent duplicates, like legendGroup after resize - alignedObjects.push(this); - box = null; // reassign it below - } - - // When called on resize, no arguments are supplied - } else { - alignOptions = this.alignOptions; - alignByTranslate = this.alignByTranslate; - alignTo = this.alignTo; - } - - box = pick(box, renderer[alignTo], renderer); - - // Assign variables - align = alignOptions.align; - vAlign = alignOptions.verticalAlign; - x = (box.x || 0) + (alignOptions.x || 0); // default: left align - y = (box.y || 0) + (alignOptions.y || 0); // default: top align - - // Align - if (align === 'right' || align === 'center') { - x += (box.width - (alignOptions.width || 0)) / - { right: 1, center: 2 }[align]; - } - attribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x); - - - // Vertical align - if (vAlign === 'bottom' || vAlign === 'middle') { - y += (box.height - (alignOptions.height || 0)) / - ({ bottom: 1, middle: 2 }[vAlign] || 1); - - } - attribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y); - - // Animate only if already placed - this[this.placed ? 'animate' : 'attr'](attribs); - this.placed = true; - this.alignAttr = attribs; - - return this; - }, - - /** - * Get the bounding box (width, height, x and y) for the element - */ - getBBox: function (reload, rot) { - var wrapper = this, - bBox,// = wrapper.bBox, - renderer = wrapper.renderer, - width, - height, - rotation, - rad, - element = wrapper.element, - styles = wrapper.styles, - textStr = wrapper.textStr, - textShadow, - elemStyle = element.style, - toggleTextShadowShim, - cache = renderer.cache, - cacheKeys = renderer.cacheKeys, - cacheKey; - - rotation = pick(rot, wrapper.rotation); - rad = rotation * deg2rad; - - if (textStr !== UNDEFINED) { - - // Properties that affect bounding box - cacheKey = ['', rotation || 0, styles && styles.fontSize, element.style.width].join(','); - - // Since numbers are monospaced, and numerical labels appear a lot in a chart, - // we assume that a label of n characters has the same bounding box as others - // of the same length. - if (textStr === '' || numRegex.test(textStr)) { - cacheKey = 'num:' + textStr.toString().length + cacheKey; - - // Caching all strings reduces rendering time by 4-5%. - } else { - cacheKey = textStr + cacheKey; - } - } - - if (cacheKey && !reload) { - bBox = cache[cacheKey]; - } - - // No cache found - if (!bBox) { - - // SVG elements - if (element.namespaceURI === SVG_NS || renderer.forExport) { - try { // Fails in Firefox if the container has display: none. - - // When the text shadow shim is used, we need to hide the fake shadows - // to get the correct bounding box (#3872) - toggleTextShadowShim = this.fakeTS && function (display) { - each(element.querySelectorAll('.' + PREFIX + 'text-shadow'), function (tspan) { - tspan.style.display = display; - }); - }; - - // Workaround for #3842, Firefox reporting wrong bounding box for shadows - if (isFirefox && elemStyle.textShadow) { - textShadow = elemStyle.textShadow; - elemStyle.textShadow = ''; - } else if (toggleTextShadowShim) { - toggleTextShadowShim(NONE); - } - - bBox = element.getBBox ? - // SVG: use extend because IE9 is not allowed to change width and height in case - // of rotation (below) - extend({}, element.getBBox()) : - // Canvas renderer and legacy IE in export mode - { - width: element.offsetWidth, - height: element.offsetHeight - }; - - // #3842 - if (textShadow) { - elemStyle.textShadow = textShadow; - } else if (toggleTextShadowShim) { - toggleTextShadowShim(''); - } - } catch (e) {} - - // If the bBox is not set, the try-catch block above failed. The other condition - // is for Opera that returns a width of -Infinity on hidden elements. - if (!bBox || bBox.width < 0) { - bBox = { width: 0, height: 0 }; - } - - - // VML Renderer or useHTML within SVG - } else { - - bBox = wrapper.htmlGetBBox(); - - } - - // True SVG elements as well as HTML elements in modern browsers using the .useHTML option - // need to compensated for rotation - if (renderer.isSVG) { - width = bBox.width; - height = bBox.height; - - // Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669, #2568) - if (isMS && styles && styles.fontSize === '11px' && height.toPrecision(3) === '16.9') { - bBox.height = height = 14; - } - - // Adjust for rotated text - if (rotation) { - bBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad)); - bBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad)); - } - } - - // Cache it - if (cacheKey) { - - // Rotate (#4681) - while (cacheKeys.length > 250) { - delete cache[cacheKeys.shift()]; - } - - if (!cache[cacheKey]) { - cacheKeys.push(cacheKey); - } - cache[cacheKey] = bBox; - } - } - return bBox; - }, - - /** - * Show the element - */ - show: function (inherit) { - return this.attr({ visibility: inherit ? 'inherit' : VISIBLE }); - }, - - /** - * Hide the element - */ - hide: function () { - return this.attr({ visibility: HIDDEN }); - }, - - fadeOut: function (duration) { - var elemWrapper = this; - elemWrapper.animate({ - opacity: 0 - }, { - duration: duration || 150, - complete: function () { - elemWrapper.attr({ y: -9999 }); // #3088, assuming we're only using this for tooltips - } - }); - }, - - /** - * Add the element - * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined - * to append the element to the renderer.box. - */ - add: function (parent) { - - var renderer = this.renderer, - element = this.element, - inserted; - - if (parent) { - this.parentGroup = parent; - } - - // mark as inverted - this.parentInverted = parent && parent.inverted; - - // build formatted text - if (this.textStr !== undefined) { - renderer.buildText(this); - } - - // Mark as added - this.added = true; - - // If we're adding to renderer root, or other elements in the group - // have a z index, we need to handle it - if (!parent || parent.handleZ || this.zIndex) { - inserted = this.zIndexSetter(); - } - - // If zIndex is not handled, append at the end - if (!inserted) { - (parent ? parent.element : renderer.box).appendChild(element); - } - - // fire an event for internal hooks - if (this.onAdd) { - this.onAdd(); - } - - return this; - }, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - var parentNode = element.parentNode; - if (parentNode) { - parentNode.removeChild(element); - } - }, - - /** - * Destroy the element and element wrapper - */ - destroy: function () { - var wrapper = this, - element = wrapper.element || {}, - shadows = wrapper.shadows, - parentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && wrapper.parentGroup, - grandParent, - key, - i; - - // remove events - element.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null; - stop(wrapper); // stop running animations - - if (wrapper.clipPath) { - wrapper.clipPath = wrapper.clipPath.destroy(); - } - - // Destroy stops in case this is a gradient object - if (wrapper.stops) { - for (i = 0; i < wrapper.stops.length; i++) { - wrapper.stops[i] = wrapper.stops[i].destroy(); - } - wrapper.stops = null; - } - - // remove element - wrapper.safeRemoveChild(element); - - // destroy shadows - if (shadows) { - each(shadows, function (shadow) { - wrapper.safeRemoveChild(shadow); - }); - } - - // In case of useHTML, clean up empty containers emulating SVG groups (#1960, #2393, #2697). - while (parentToClean && parentToClean.div && parentToClean.div.childNodes.length === 0) { - grandParent = parentToClean.parentGroup; - wrapper.safeRemoveChild(parentToClean.div); - delete parentToClean.div; - parentToClean = grandParent; - } - - // remove from alignObjects - if (wrapper.alignTo) { - erase(wrapper.renderer.alignedObjects, wrapper); - } - - for (key in wrapper) { - delete wrapper[key]; - } - - return null; - }, - - /** - * Add a shadow to the element. Must be done after the element is added to the DOM - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - shadow, - element = this.element, - strokeWidth, - shadowWidth, - shadowElementOpacity, - - // compensate for inverted plot area - transform; - - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - transform = this.parentInverted ? - '(-1,-1)' : - '(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')'; - for (i = 1; i <= shadowWidth; i++) { - shadow = element.cloneNode(0); - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - attr(shadow, { - 'isShadow': 'true', - 'stroke': shadowOptions.color || 'black', - 'stroke-opacity': shadowElementOpacity * i, - 'stroke-width': strokeWidth, - 'transform': 'translate' + transform, - 'fill': NONE - }); - if (cutOff) { - attr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0)); - shadow.cutHeight = strokeWidth; - } - - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - shadows.push(shadow); - } - - this.shadows = shadows; - } - return this; - - }, - - xGetter: function (key) { - if (this.element.nodeName === 'circle') { - key = { x: 'cx', y: 'cy' }[key] || key; - } - return this._defaultGetter(key); - }, - - /** - * Get the current value of an attribute or pseudo attribute, used mainly - * for animation. - */ - _defaultGetter: function (key) { - var ret = pick(this[key], this.element ? this.element.getAttribute(key) : null, 0); - - if (/^[\-0-9\.]+$/.test(ret)) { // is numerical - ret = parseFloat(ret); - } - return ret; - }, - - - dSetter: function (value, key, element) { - if (value && value.join) { // join path - value = value.join(' '); - } - if (/(NaN| {2}|^$)/.test(value)) { - value = 'M 0 0'; - } - element.setAttribute(key, value); - - this[key] = value; - }, - dashstyleSetter: function (value) { - var i; - value = value && value.toLowerCase(); - if (value) { - value = value - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); // ending comma - - i = value.length; - while (i--) { - value[i] = pInt(value[i]) * this['stroke-width']; - } - value = value.join(',') - .replace('NaN', 'none'); // #3226 - this.element.setAttribute('stroke-dasharray', value); - } - }, - alignSetter: function (value) { - this.element.setAttribute('text-anchor', { left: 'start', center: 'middle', right: 'end' }[value]); - }, - opacitySetter: function (value, key, element) { - this[key] = value; - element.setAttribute(key, value); - }, - titleSetter: function (value) { - var titleNode = this.element.getElementsByTagName('title')[0]; - if (!titleNode) { - titleNode = doc.createElementNS(SVG_NS, 'title'); - this.element.appendChild(titleNode); - } - titleNode.appendChild( - doc.createTextNode( - (String(pick(value), '')).replace(/<[^>]*>/g, '') // #3276, #3895 - ) - ); - }, - textSetter: function (value) { - if (value !== this.textStr) { - // Delete bBox memo when the text changes - delete this.bBox; - - this.textStr = value; - if (this.added) { - this.renderer.buildText(this); - } - } - }, - fillSetter: function (value, key, element) { - if (typeof value === 'string') { - element.setAttribute(key, value); - } else if (value) { - this.colorGradient(value, key, element); - } - }, - visibilitySetter: function (value, key, element) { - // IE9-11 doesn't handle visibilty:inherit well, so we remove the attribute instead (#2881, #3909) - if (value === 'inherit') { - element.removeAttribute(key); - } else { - element.setAttribute(key, value); - } - }, - zIndexSetter: function (value, key) { - var renderer = this.renderer, - parentGroup = this.parentGroup, - parentWrapper = parentGroup || renderer, - parentNode = parentWrapper.element || renderer.box, - childNodes, - otherElement, - otherZIndex, - element = this.element, - inserted, - run = this.added, - i; - - if (defined(value)) { - element.setAttribute(key, value); // So we can read it for other elements in the group - value = +value; - if (this[key] === value) { // Only update when needed (#3865) - run = false; - } - this[key] = value; - } - - // Insert according to this and other elements' zIndex. Before .add() is called, - // nothing is done. Then on add, or by later calls to zIndexSetter, the node - // is placed on the right place in the DOM. - if (run) { - value = this.zIndex; - - if (value && parentGroup) { - parentGroup.handleZ = true; - } - - childNodes = parentNode.childNodes; - for (i = 0; i < childNodes.length && !inserted; i++) { - otherElement = childNodes[i]; - otherZIndex = attr(otherElement, 'zIndex'); - if (otherElement !== element && ( - // Insert before the first element with a higher zIndex - pInt(otherZIndex) > value || - // If no zIndex given, insert before the first element with a zIndex - (!defined(value) && defined(otherZIndex)) - - )) { - parentNode.insertBefore(element, otherElement); - inserted = true; - } - } - if (!inserted) { - parentNode.appendChild(element); - } - } - return inserted; - }, - _defaultSetter: function (value, key, element) { - element.setAttribute(key, value); - } - }; - - // Some shared setters and getters - SVGElement.prototype.yGetter = SVGElement.prototype.xGetter; - SVGElement.prototype.translateXSetter = SVGElement.prototype.translateYSetter = - SVGElement.prototype.rotationSetter = SVGElement.prototype.verticalAlignSetter = - SVGElement.prototype.scaleXSetter = SVGElement.prototype.scaleYSetter = function (value, key) { - this[key] = value; - this.doTransform = true; - }; - - // WebKit and Batik have problems with a stroke-width of zero, so in this case we remove the - // stroke attribute altogether. #1270, #1369, #3065, #3072. - SVGElement.prototype['stroke-widthSetter'] = SVGElement.prototype.strokeSetter = function (value, key, element) { - this[key] = value; - // Only apply the stroke attribute if the stroke width is defined and larger than 0 - if (this.stroke && this['stroke-width']) { - this.strokeWidth = this['stroke-width']; - SVGElement.prototype.fillSetter.call(this, this.stroke, 'stroke', element); // use prototype as instance may be overridden - element.setAttribute('stroke-width', this['stroke-width']); - this.hasStroke = true; - } else if (key === 'stroke-width' && value === 0 && this.hasStroke) { - element.removeAttribute('stroke'); - this.hasStroke = false; - } - }; - - - /** - * The default SVG renderer - */ - var SVGRenderer = function () { - this.init.apply(this, arguments); - }; - SVGRenderer.prototype = { - Element: SVGElement, - - /** - * Initialize the SVGRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - * @param {Boolean} forExport - */ - init: function (container, width, height, style, forExport, allowHTML) { - var renderer = this, - boxWrapper, - element, - desc; - - boxWrapper = renderer.createElement('svg') - .attr({ - version: '1.1' - }) - .css(this.getStyle(style)); - element = boxWrapper.element; - container.appendChild(element); - - // For browsers other than IE, add the namespace attribute (#1978) - if (container.innerHTML.indexOf('xmlns') === -1) { - attr(element, 'xmlns', SVG_NS); - } - - // object properties - renderer.isSVG = true; - renderer.box = element; - renderer.boxWrapper = boxWrapper; - renderer.alignedObjects = []; - - // Page url used for internal references. #24, #672, #1070 - renderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ? - win.location.href - .replace(/#.*?$/, '') // remove the hash - .replace(/([\('\)])/g, '\\$1') // escape parantheses and quotes - .replace(/ /g, '%20') : // replace spaces (needed for Safari only) - ''; - - // Add description - desc = this.createElement('desc').add(); - desc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION)); - - - renderer.defs = this.createElement('defs').add(); - renderer.allowHTML = allowHTML; - renderer.forExport = forExport; - renderer.gradients = {}; // Object where gradient SvgElements are stored - renderer.cache = {}; // Cache for numerical bounding boxes - renderer.cacheKeys = []; - - renderer.setSize(width, height, false); - - - - // Issue 110 workaround: - // In Firefox, if a div is positioned by percentage, its pixel position may land - // between pixels. The container itself doesn't display this, but an SVG element - // inside this container will be drawn at subpixel precision. In order to draw - // sharp lines, this must be compensated for. This doesn't seem to work inside - // iframes though (like in jsFiddle). - var subPixelFix, rect; - if (isFirefox && container.getBoundingClientRect) { - renderer.subPixelFix = subPixelFix = function () { - css(container, { left: 0, top: 0 }); - rect = container.getBoundingClientRect(); - css(container, { - left: (mathCeil(rect.left) - rect.left) + PX, - top: (mathCeil(rect.top) - rect.top) + PX - }); - }; - - // run the fix now - subPixelFix(); - - // run it on resize - addEvent(win, 'resize', subPixelFix); - } - }, - - getStyle: function (style) { - this.style = extend({ - fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', // default font - fontSize: '12px' - }, style); - return this.style; - }, - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none. #608. - */ - isHidden: function () { - return !this.boxWrapper.getBBox().width; - }, - - /** - * Destroys the renderer and its allocated members. - */ - destroy: function () { - var renderer = this, - rendererDefs = renderer.defs; - renderer.box = null; - renderer.boxWrapper = renderer.boxWrapper.destroy(); - - // Call destroy on all gradient elements - destroyObjectProperties(renderer.gradients || {}); - renderer.gradients = null; - - // Defs are null in VMLRenderer - // Otherwise, destroy them here. - if (rendererDefs) { - renderer.defs = rendererDefs.destroy(); - } - - // Remove sub pixel fix handler - // We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed - // See issue #982 - if (renderer.subPixelFix) { - removeEvent(win, 'resize', renderer.subPixelFix); - } - - renderer.alignedObjects = null; - - return null; - }, - - /** - * Create a wrapper for an SVG element - * @param {Object} nodeName - */ - createElement: function (nodeName) { - var wrapper = new this.Element(); - wrapper.init(this, nodeName); - return wrapper; - }, - - /** - * Dummy function for use in canvas renderer - */ - draw: function () {}, - - /** - * Get converted radial gradient attributes - */ - getRadialAttr: function (radialReference, gradAttr) { - return { - cx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2], - cy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2], - r: gradAttr.r * radialReference[2] - }; - }, - - /** - * Parse a simple HTML string into SVG tspans - * - * @param {Object} textNode The parent text SVG node - */ - buildText: function (wrapper) { - var textNode = wrapper.element, - renderer = this, - forExport = renderer.forExport, - textStr = pick(wrapper.textStr, '').toString(), - hasMarkup = textStr.indexOf('<') !== -1, - lines, - childNodes = textNode.childNodes, - styleRegex, - hrefRegex, - parentX = attr(textNode, 'x'), - textStyles = wrapper.styles, - width = wrapper.textWidth, - textLineHeight = textStyles && textStyles.lineHeight, - textShadow = textStyles && textStyles.textShadow, - ellipsis = textStyles && textStyles.textOverflow === 'ellipsis', - i = childNodes.length, - tempParent = width && !wrapper.added && this.box, - getLineHeight = function (tspan) { - return textLineHeight ? - pInt(textLineHeight) : - renderer.fontMetrics( - /(px|em)$/.test(tspan && tspan.style.fontSize) ? - tspan.style.fontSize : - ((textStyles && textStyles.fontSize) || renderer.style.fontSize || 12), - tspan - ).h; - }, - unescapeAngleBrackets = function (inputStr) { - return inputStr.replace(/&lt;/g, '<').replace(/&gt;/g, '>'); - }; - - /// remove old text - while (i--) { - textNode.removeChild(childNodes[i]); - } - - // Skip tspans, add text directly to text node. The forceTSpan is a hook - // used in text outline hack. - if (!hasMarkup && !textShadow && !ellipsis && textStr.indexOf(' ') === -1) { - textNode.appendChild(doc.createTextNode(unescapeAngleBrackets(textStr))); - - // Complex strings, add more logic - } else { - - styleRegex = /<.*style="([^"]+)".*>/; - hrefRegex = /<.*href="(http[^"]+)".*>/; - - if (tempParent) { - tempParent.appendChild(textNode); // attach it to the DOM to read offset width - } - - if (hasMarkup) { - lines = textStr - .replace(/<(b|strong)>/g, '<span style="font-weight:bold">') - .replace(/<(i|em)>/g, '<span style="font-style:italic">') - .replace(/<a/g, '<span') - .replace(/<\/(b|strong|i|em|a)>/g, '</span>') - .split(/<br.*?>/g); - - } else { - lines = [textStr]; - } - - - // remove empty line at end - if (lines[lines.length - 1] === '') { - lines.pop(); - } - - - // build the lines - each(lines, function (line, lineNo) { - var spans, spanNo = 0; - - line = line.replace(/<span/g, '|||<span').replace(/<\/span>/g, '</span>|||'); - spans = line.split('|||'); - - each(spans, function (span) { - if (span !== '' || spans.length === 1) { - var attributes = {}, - tspan = doc.createElementNS(SVG_NS, 'tspan'), - spanStyle; // #390 - if (styleRegex.test(span)) { - spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2'); - attr(tspan, 'style', spanStyle); - } - if (hrefRegex.test(span) && !forExport) { // Not for export - #1529 - attr(tspan, 'onclick', 'location.href=\"' + span.match(hrefRegex)[1] + '\"'); - css(tspan, { cursor: 'pointer' }); - } - - span = unescapeAngleBrackets(span.replace(/<(.|\n)*?>/g, '') || ' '); - - // Nested tags aren't supported, and cause crash in Safari (#1596) - if (span !== ' ') { - - // add the text node - tspan.appendChild(doc.createTextNode(span)); - - if (!spanNo) { // first span in a line, align it to the left - if (lineNo && parentX !== null) { - attributes.x = parentX; - } - } else { - attributes.dx = 0; // #16 - } - - // add attributes - attr(tspan, attributes); - - // Append it - textNode.appendChild(tspan); - - // first span on subsequent line, add the line height - if (!spanNo && lineNo) { - - // allow getting the right offset height in exporting in IE - if (!hasSVG && forExport) { - css(tspan, { display: 'block' }); - } - - // Set the line height based on the font size of either - // the text element or the tspan element - attr( - tspan, - 'dy', - getLineHeight(tspan) - ); - } - - /*if (width) { - renderer.breakText(wrapper, width); - }*/ - - // Check width and apply soft breaks or ellipsis - if (width) { - var words = span.replace(/([^\^])-/g, '$1- ').split(' '), // #1273 - hasWhiteSpace = spans.length > 1 || lineNo || (words.length > 1 && textStyles.whiteSpace !== 'nowrap'), - tooLong, - wasTooLong, - actualWidth, - rest = [], - dy = getLineHeight(tspan), - softLineNo = 1, - rotation = wrapper.rotation, - wordStr = span, // for ellipsis - cursor = wordStr.length, // binary search cursor - bBox; - - while ((hasWhiteSpace || ellipsis) && (words.length || rest.length)) { - wrapper.rotation = 0; // discard rotation when computing box - bBox = wrapper.getBBox(true); - actualWidth = bBox.width; - - // Old IE cannot measure the actualWidth for SVG elements (#2314) - if (!hasSVG && renderer.forExport) { - actualWidth = renderer.measureSpanWidth(tspan.firstChild.data, wrapper.styles); - } - - tooLong = actualWidth > width; - - // For ellipsis, do a binary search for the correct string length - if (wasTooLong === undefined) { - wasTooLong = tooLong; // First time - } - if (ellipsis && wasTooLong) { - cursor /= 2; - - if (wordStr === '' || (!tooLong && cursor < 0.5)) { - words = []; // All ok, break out - } else { - if (tooLong) { - wasTooLong = true; - } - wordStr = span.substring(0, wordStr.length + (tooLong ? -1 : 1) * mathCeil(cursor)); - words = [wordStr + (width > 3 ? '\u2026' : '')]; - tspan.removeChild(tspan.firstChild); - } - - // Looping down, this is the first word sequence that is not too long, - // so we can move on to build the next line. - } else if (!tooLong || words.length === 1) { - words = rest; - rest = []; - - if (words.length) { - softLineNo++; - - tspan = doc.createElementNS(SVG_NS, 'tspan'); - attr(tspan, { - dy: dy, - x: parentX - }); - if (spanStyle) { // #390 - attr(tspan, 'style', spanStyle); - } - textNode.appendChild(tspan); - } - if (actualWidth > width) { // a single word is pressing it out - width = actualWidth; - } - } else { // append to existing line tspan - tspan.removeChild(tspan.firstChild); - rest.unshift(words.pop()); - } - if (words.length) { - tspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-'))); - } - } - if (wasTooLong) { - wrapper.attr('title', wrapper.textStr); - } - wrapper.rotation = rotation; - } - - spanNo++; - } - } - }); - }); - if (tempParent) { - tempParent.removeChild(textNode); // attach it to the DOM to read offset width - } - - // Apply the text shadow - if (textShadow && wrapper.applyTextShadow) { - wrapper.applyTextShadow(textShadow); - } - } - }, - - - - /* - breakText: function (wrapper, width) { - var bBox = wrapper.getBBox(), - node = wrapper.element, - textLength = node.textContent.length, - pos = mathRound(width * textLength / bBox.width), // try this position first, based on average character width - increment = 0, - finalPos; - - if (bBox.width > width) { - while (finalPos === undefined) { - textLength = node.getSubStringLength(0, pos); - - if (textLength <= width) { - if (increment === -1) { - finalPos = pos; - } else { - increment = 1; - } - } else { - if (increment === 1) { - finalPos = pos - 1; - } else { - increment = -1; - } - } - pos += increment; - } - } - console.log(finalPos, node.getSubStringLength(0, finalPos)) - }, - */ - - /** - * Returns white for dark colors and black for bright colors - */ - getContrast: function (color) { - color = Color(color).rgba; - return color[0] + color[1] + color[2] > 384 ? '#000000' : '#FFFFFF'; - }, - - /** - * Create a button with preset states - * @param {String} text - * @param {Number} x - * @param {Number} y - * @param {Function} callback - * @param {Object} normalState - * @param {Object} hoverState - * @param {Object} pressedState - */ - button: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState, shape) { - var label = this.label(text, x, y, shape, null, null, null, null, 'button'), - curState = 0, - stateOptions, - stateStyle, - normalStyle, - hoverStyle, - pressedStyle, - disabledStyle, - verticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 }; - - // Normal state - prepare the attributes - normalState = merge({ - 'stroke-width': 1, - stroke: '#CCCCCC', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FEFEFE'], - [1, '#F6F6F6'] - ] - }, - r: 2, - padding: 5, - style: { - color: 'black' - } - }, normalState); - normalStyle = normalState.style; - delete normalState.style; - - // Hover state - hoverState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FFF'], - [1, '#ACF'] - ] - } - }, hoverState); - hoverStyle = hoverState.style; - delete hoverState.style; - - // Pressed state - pressedState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#9BD'], - [1, '#CDF'] - ] - } - }, pressedState); - pressedStyle = pressedState.style; - delete pressedState.style; - - // Disabled state - disabledState = merge(normalState, { - style: { - color: '#CCC' - } - }, disabledState); - disabledStyle = disabledState.style; - delete disabledState.style; - - // Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667). - addEvent(label.element, isMS ? 'mouseover' : 'mouseenter', function () { - if (curState !== 3) { - label.attr(hoverState) - .css(hoverStyle); - } - }); - addEvent(label.element, isMS ? 'mouseout' : 'mouseleave', function () { - if (curState !== 3) { - stateOptions = [normalState, hoverState, pressedState][curState]; - stateStyle = [normalStyle, hoverStyle, pressedStyle][curState]; - label.attr(stateOptions) - .css(stateStyle); - } - }); - - label.setState = function (state) { - label.state = curState = state; - if (!state) { - label.attr(normalState) - .css(normalStyle); - } else if (state === 2) { - label.attr(pressedState) - .css(pressedStyle); - } else if (state === 3) { - label.attr(disabledState) - .css(disabledStyle); - } - }; - - return label - .on('click', function (e) { - if (curState !== 3) { - callback.call(label, e); - } - }) - .attr(normalState) - .css(extend({ cursor: 'default' }, normalStyle)); - }, - - /** - * Make a straight line crisper by not spilling out to neighbour pixels - * @param {Array} points - * @param {Number} width - */ - crispLine: function (points, width) { - // points format: [M, 0, 0, L, 100, 0] - // normalize to a crisp line - if (points[1] === points[4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave the same. - points[1] = points[4] = mathRound(points[1]) - (width % 2 / 2); - } - if (points[2] === points[5]) { - points[2] = points[5] = mathRound(points[2]) + (width % 2 / 2); - } - return points; - }, - - - /** - * Draw a path - * @param {Array} path An SVG path in array form - */ - path: function (path) { - var attr = { - fill: NONE - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - return this.createElement('path').attr(attr); - }, - - /** - * Draw and return an SVG circle - * @param {Number} x The x position - * @param {Number} y The y position - * @param {Number} r The radius - */ - circle: function (x, y, r) { - var attr = isObject(x) ? x : { x: x, y: y, r: r }, - wrapper = this.createElement('circle'); - - wrapper.xSetter = function (value) { - this.element.setAttribute('cx', value); - }; - wrapper.ySetter = function (value) { - this.element.setAttribute('cy', value); - }; - return wrapper.attr(attr); - }, - - /** - * Draw and return an arc - * @param {Number} x X position - * @param {Number} y Y position - * @param {Number} r Radius - * @param {Number} innerR Inner radius like used in donut charts - * @param {Number} start Starting angle - * @param {Number} end Ending angle - */ - arc: function (x, y, r, innerR, start, end) { - var arc; - - if (isObject(x)) { - y = x.y; - r = x.r; - innerR = x.innerR; - start = x.start; - end = x.end; - x = x.x; - } - - // Arcs are defined as symbols for the ability to set - // attributes in attr and animate - arc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, { - innerR: innerR || 0, - start: start || 0, - end: end || 0 - }); - arc.r = r; // #959 - return arc; - }, - - /** - * Draw and return a rectangle - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Number} width - * @param {Number} height - * @param {Number} r Border corner radius - * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing - */ - rect: function (x, y, width, height, r, strokeWidth) { - - r = isObject(x) ? x.r : r; - - var wrapper = this.createElement('rect'), - attribs = isObject(x) ? x : x === UNDEFINED ? {} : { - x: x, - y: y, - width: mathMax(width, 0), - height: mathMax(height, 0) - }; - - if (strokeWidth !== UNDEFINED) { - attribs.strokeWidth = strokeWidth; - attribs = wrapper.crisp(attribs); - } - - if (r) { - attribs.r = r; - } - - wrapper.rSetter = function (value) { - attr(this.element, { - rx: value, - ry: value - }); - }; - - return wrapper.attr(attribs); - }, - - /** - * Resize the box and re-align all aligned elements - * @param {Object} width - * @param {Object} height - * @param {Boolean} animate - * - */ - setSize: function (width, height, animate) { - var renderer = this, - alignedObjects = renderer.alignedObjects, - i = alignedObjects.length; - - renderer.width = width; - renderer.height = height; - - renderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({ - width: width, - height: height - }); - - while (i--) { - alignedObjects[i].align(); - } - }, - - /** - * Create a group - * @param {String} name The group will be given a class name of 'highcharts-{name}'. - * This can be used for styling and scripting. - */ - g: function (name) { - var elem = this.createElement('g'); - return defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem; - }, - - /** - * Display an image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var attribs = { - preserveAspectRatio: NONE - }, - elemWrapper; - - // optional properties - if (arguments.length > 1) { - extend(attribs, { - x: x, - y: y, - width: width, - height: height - }); - } - - elemWrapper = this.createElement('image').attr(attribs); - - // set the href in the xlink namespace - if (elemWrapper.element.setAttributeNS) { - elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', - 'href', src); - } else { - // could be exporting in IE - // using href throws "not supported" in ie7 and under, requries regex shim to fix later - elemWrapper.element.setAttribute('hc-svg-href', src); - } - return elemWrapper; - }, - - /** - * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object. - * - * @param {Object} symbol - * @param {Object} x - * @param {Object} y - * @param {Object} radius - * @param {Object} options - */ - symbol: function (symbol, x, y, width, height, options) { - - var obj, - - // get the symbol definition function - symbolFn = this.symbols[symbol], - - // check if there's a path defined for this symbol - path = symbolFn && symbolFn( - mathRound(x), - mathRound(y), - width, - height, - options - ), - - imageRegex = /^url\((.*?)\)$/, - imageSrc, - imageSize, - centerImage; - - if (path) { - - obj = this.path(path); - // expando properties for use in animate and attr - extend(obj, { - symbolName: symbol, - x: x, - y: y, - width: width, - height: height - }); - if (options) { - extend(obj, options); - } - - - // image symbols - } else if (imageRegex.test(symbol)) { - - // On image load, set the size and position - centerImage = function (img, size) { - if (img.element) { // it may be destroyed in the meantime (#1390) - img.attr({ - width: size[0], - height: size[1] - }); - - if (!img.alignByTranslate) { // #185 - img.translate( - mathRound((width - size[0]) / 2), // #1378 - mathRound((height - size[1]) / 2) - ); - } - } - }; - - imageSrc = symbol.match(imageRegex)[1]; - imageSize = symbolSizes[imageSrc] || (options && options.width && options.height && [options.width, options.height]); - - // Ireate the image synchronously, add attribs async - obj = this.image(imageSrc) - .attr({ - x: x, - y: y - }); - obj.isImg = true; - - if (imageSize) { - centerImage(obj, imageSize); - } else { - // Initialize image to be 0 size so export will still function if there's no cached sizes. - obj.attr({ width: 0, height: 0 }); - - // Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8, - // the created element must be assigned to a variable in order to load (#292). - createElement('img', { - onload: function () { - - // Special case for SVGs on IE11, the width is not accessible until the image is - // part of the DOM (#2854). - if (this.width === 0) { - css(this, { - position: ABSOLUTE, - top: '-999em' - }); - doc.body.appendChild(this); - } - - // Center the image - centerImage(obj, symbolSizes[imageSrc] = [this.width, this.height]); - - // Clean up after #2854 workaround. - if (this.parentNode) { - this.parentNode.removeChild(this); - } - }, - src: imageSrc - }); - } - } - - return obj; - }, - - /** - * An extendable collection of functions for defining symbol paths. - */ - symbols: { - 'circle': function (x, y, w, h) { - var cpw = 0.166 * w; - return [ - M, x + w / 2, y, - 'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h, - 'C', x - cpw, y + h, x - cpw, y, x + w / 2, y, - 'Z' - ]; - }, - - 'square': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle-down': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w / 2, y + h, - 'Z' - ]; - }, - 'diamond': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h / 2, - x + w / 2, y + h, - x, y + h / 2, - 'Z' - ]; - }, - 'arc': function (x, y, w, h, options) { - var start = options.start, - radius = options.r || w || h, - end = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561) - innerRadius = options.innerR, - open = options.open, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - longArc = options.end - start < mathPI ? 0 : 1; - - return [ - M, - x + radius * cosStart, - y + radius * sinStart, - 'A', // arcTo - radius, // x radius - radius, // y radius - 0, // slanting - longArc, // long or short arc - 1, // clockwise - x + radius * cosEnd, - y + radius * sinEnd, - open ? M : L, - x + innerRadius * cosEnd, - y + innerRadius * sinEnd, - 'A', // arcTo - innerRadius, // x radius - innerRadius, // y radius - 0, // slanting - longArc, // long or short arc - 0, // clockwise - x + innerRadius * cosStart, - y + innerRadius * sinStart, - - open ? '' : 'Z' // close - ]; - }, - - /** - * Callout shape used for default tooltips, also used for rounded rectangles in VML - */ - callout: function (x, y, w, h, options) { - var arrowLength = 6, - halfDistance = 6, - r = mathMin((options && options.r) || 0, w, h), - safeDistance = r + halfDistance, - anchorX = options && options.anchorX, - anchorY = options && options.anchorY, - path; - - path = [ - 'M', x + r, y, - 'L', x + w - r, y, // top side - 'C', x + w, y, x + w, y, x + w, y + r, // top-right corner - 'L', x + w, y + h - r, // right side - 'C', x + w, y + h, x + w, y + h, x + w - r, y + h, // bottom-right corner - 'L', x + r, y + h, // bottom side - 'C', x, y + h, x, y + h, x, y + h - r, // bottom-left corner - 'L', x, y + r, // left side - 'C', x, y, x, y, x + r, y // top-right corner - ]; - - if (anchorX && anchorX > w && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace right side - path.splice(13, 3, - 'L', x + w, anchorY - halfDistance, - x + w + arrowLength, anchorY, - x + w, anchorY + halfDistance, - x + w, y + h - r - ); - } else if (anchorX && anchorX < 0 && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace left side - path.splice(33, 3, - 'L', x, anchorY + halfDistance, - x - arrowLength, anchorY, - x, anchorY - halfDistance, - x, y + r - ); - } else if (anchorY && anchorY > h && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace bottom - path.splice(23, 3, - 'L', anchorX + halfDistance, y + h, - anchorX, y + h + arrowLength, - anchorX - halfDistance, y + h, - x + r, y + h - ); - } else if (anchorY && anchorY < 0 && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace top - path.splice(3, 3, - 'L', anchorX - halfDistance, y, - anchorX, y - arrowLength, - anchorX + halfDistance, y, - w - r, y - ); - } - return path; - } - }, - - /** - * Define a clipping rectangle - * @param {String} id - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - var wrapper, - id = PREFIX + idCounter++, - - clipPath = this.createElement('clipPath').attr({ - id: id - }).add(this.defs); - - wrapper = this.rect(x, y, width, height, 0).add(clipPath); - wrapper.id = id; - wrapper.clipPath = clipPath; - wrapper.count = 0; - - return wrapper; - }, - - - - - - /** - * Add text to the SVG object - * @param {String} str - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Boolean} useHTML Use HTML to render the text - */ - text: function (str, x, y, useHTML) { - - // declare variables - var renderer = this, - fakeSVG = useCanVG || (!hasSVG && renderer.forExport), - wrapper, - attr = {}; - - if (useHTML && (renderer.allowHTML || !renderer.forExport)) { - return renderer.html(str, x, y); - } - - attr.x = Math.round(x || 0); // X is always needed for line-wrap logic - if (y) { - attr.y = Math.round(y); - } - if (str || str === 0) { - attr.text = str; - } - - wrapper = renderer.createElement('text') - .attr(attr); - - // Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063) - if (fakeSVG) { - wrapper.css({ - position: ABSOLUTE - }); - } - - if (!useHTML) { - wrapper.xSetter = function (value, key, element) { - var tspans = element.getElementsByTagName('tspan'), - tspan, - parentVal = element.getAttribute(key), - i; - for (i = 0; i < tspans.length; i++) { - tspan = tspans[i]; - // If the x values are equal, the tspan represents a linebreak - if (tspan.getAttribute(key) === parentVal) { - tspan.setAttribute(key, value); - } - } - element.setAttribute(key, value); - }; - } - - return wrapper; - }, - - /** - * Utility to return the baseline offset and total line height from the font size - */ - fontMetrics: function (fontSize, elem) { - var lineHeight, - baseline, - style; - - fontSize = fontSize || this.style.fontSize; - if (!fontSize && elem && win.getComputedStyle) { - elem = elem.element || elem; // SVGElement - style = win.getComputedStyle(elem, ''); - fontSize = style && style.fontSize; // #4309, the style doesn't exist inside a hidden iframe in Firefox - } - fontSize = /px/.test(fontSize) ? pInt(fontSize) : /em/.test(fontSize) ? parseFloat(fontSize) * 12 : 12; - - // Empirical values found by comparing font size and bounding box height. - // Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/ - lineHeight = fontSize < 24 ? fontSize + 3 : mathRound(fontSize * 1.2); - baseline = mathRound(lineHeight * 0.8); - - return { - h: lineHeight, - b: baseline, - f: fontSize - }; - }, - - /** - * Correct X and Y positioning of a label for rotation (#1764) - */ - rotCorr: function (baseline, rotation, alterY) { - var y = baseline; - if (rotation && alterY) { - y = mathMax(y * mathCos(rotation * deg2rad), 4); - } - return { - x: (-baseline / 3) * mathSin(rotation * deg2rad), - y: y - }; - }, - - /** - * Add a label, a text item that can hold a colored or gradient background - * as well as a border and shadow. - * @param {string} str - * @param {Number} x - * @param {Number} y - * @param {String} shape - * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the - * coordinates it should be pinned to - * @param {Number} anchorY - * @param {Boolean} baseline Whether to position the label relative to the text baseline, - * like renderer.text, or to the upper border of the rectangle. - * @param {String} className Class name for the group - */ - label: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) { - - var renderer = this, - wrapper = renderer.g(className), - text = renderer.text('', 0, 0, useHTML) - .attr({ - zIndex: 1 - }), - //.add(wrapper), - box, - bBox, - alignFactor = 0, - padding = 3, - paddingLeft = 0, - width, - height, - wrapperX, - wrapperY, - crispAdjust = 0, - deferredAttr = {}, - baselineOffset, - needsBox, - updateBoxSize, - updateTextPadding, - boxAttr; - - /** - * This function runs after the label is added to the DOM (when the bounding box is - * available), and after the text of the label is updated to detect the new bounding - * box and reflect it in the border box. - */ - updateBoxSize = function () { - var boxX, - boxY, - style = text.element.style; - - bBox = (width === undefined || height === undefined || wrapper.styles.textAlign) && defined(text.textStr) && - text.getBBox(); //#3295 && 3514 box failure when string equals 0 - wrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft; - wrapper.height = (height || bBox.height || 0) + 2 * padding; - - // update the label-scoped y offset - baselineOffset = padding + renderer.fontMetrics(style && style.fontSize, text).b; - - - if (needsBox) { - - if (!box) { - // create the border box if it is not already present - boxX = crispAdjust; - boxY = (baseline ? -baselineOffset : 0) + crispAdjust; - - wrapper.box = box = shape ? - renderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height, deferredAttr) : - renderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]); - - if (!box.isImg) { // #4324, fill "none" causes it to be ignored by mouse events in IE - box.attr('fill', NONE); - } - box.add(wrapper); - } - - // apply the box attributes - if (!box.isImg) { // #1630 - box.attr(extend({ - width: mathRound(wrapper.width), - height: mathRound(wrapper.height) - }, deferredAttr)); - } - deferredAttr = null; - } - }; - - /** - * This function runs after setting text or padding, but only if padding is changed - */ - updateTextPadding = function () { - var styles = wrapper.styles, - textAlign = styles && styles.textAlign, - x = paddingLeft + padding, - y; - - // determin y based on the baseline - y = baseline ? 0 : baselineOffset; - - // compensate for alignment - if (defined(width) && bBox && (textAlign === 'center' || textAlign === 'right')) { - x += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width); - } - - // update if anything changed - if (x !== text.x || y !== text.y) { - text.attr('x', x); - if (y !== UNDEFINED) { - text.attr('y', y); - } - } - - // record current values - text.x = x; - text.y = y; - }; - - /** - * Set a box attribute, or defer it if the box is not yet created - * @param {Object} key - * @param {Object} value - */ - boxAttr = function (key, value) { - if (box) { - box.attr(key, value); - } else { - deferredAttr[key] = value; - } - }; - - /** - * After the text element is added, get the desired size of the border box - * and add it before the text in the DOM. - */ - wrapper.onAdd = function () { - text.add(wrapper); - wrapper.attr({ - text: (str || str === 0) ? str : '', // alignment is available now // #3295: 0 not rendered if given as a value - x: x, - y: y - }); - - if (box && defined(anchorX)) { - wrapper.attr({ - anchorX: anchorX, - anchorY: anchorY - }); - } - }; - - /* - * Add specific attribute setters. - */ - - // only change local variables - wrapper.widthSetter = function (value) { - width = value; - }; - wrapper.heightSetter = function (value) { - height = value; - }; - wrapper.paddingSetter = function (value) { - if (defined(value) && value !== padding) { - padding = wrapper.padding = value; - updateTextPadding(); - } - }; - wrapper.paddingLeftSetter = function (value) { - if (defined(value) && value !== paddingLeft) { - paddingLeft = value; - updateTextPadding(); - } - }; - - - // change local variable and prevent setting attribute on the group - wrapper.alignSetter = function (value) { - value = { left: 0, center: 0.5, right: 1 }[value]; - if (value !== alignFactor) { - alignFactor = value; - if (bBox) { // Bounding box exists, means we're dynamically changing - wrapper.attr({ x: x }); - } - } - }; - - // apply these to the box and the text alike - wrapper.textSetter = function (value) { - if (value !== UNDEFINED) { - text.textSetter(value); - } - updateBoxSize(); - updateTextPadding(); - }; - - // apply these to the box but not to the text - wrapper['stroke-widthSetter'] = function (value, key) { - if (value) { - needsBox = true; - } - crispAdjust = value % 2 / 2; - boxAttr(key, value); - }; - wrapper.strokeSetter = wrapper.fillSetter = wrapper.rSetter = function (value, key) { - if (key === 'fill' && value) { - needsBox = true; - } - boxAttr(key, value); - }; - wrapper.anchorXSetter = function (value, key) { - anchorX = value; - boxAttr(key, mathRound(value) - crispAdjust - wrapperX); - }; - wrapper.anchorYSetter = function (value, key) { - anchorY = value; - boxAttr(key, value - wrapperY); - }; - - // rename attributes - wrapper.xSetter = function (value) { - wrapper.x = value; // for animation getter - if (alignFactor) { - value -= alignFactor * ((width || bBox.width) + 2 * padding); - } - wrapperX = mathRound(value); - wrapper.attr('translateX', wrapperX); - }; - wrapper.ySetter = function (value) { - wrapperY = wrapper.y = mathRound(value); - wrapper.attr('translateY', wrapperY); - }; - - // Redirect certain methods to either the box or the text - var baseCss = wrapper.css; - return extend(wrapper, { - /** - * Pick up some properties and apply them to the text instead of the wrapper - */ - css: function (styles) { - if (styles) { - var textStyles = {}; - styles = merge(styles); // create a copy to avoid altering the original object (#537) - each(wrapper.textProps, function (prop) { - if (styles[prop] !== UNDEFINED) { - textStyles[prop] = styles[prop]; - delete styles[prop]; - } - }); - text.css(textStyles); - } - return baseCss.call(wrapper, styles); - }, - /** - * Return the bounding box of the box, not the group - */ - getBBox: function () { - return { - width: bBox.width + 2 * padding, - height: bBox.height + 2 * padding, - x: bBox.x - padding, - y: bBox.y - padding - }; - }, - /** - * Apply the shadow to the box - */ - shadow: function (b) { - if (box) { - box.shadow(b); - } - return wrapper; - }, - /** - * Destroy and release memory. - */ - destroy: function () { - - // Added by button implementation - removeEvent(wrapper.element, 'mouseenter'); - removeEvent(wrapper.element, 'mouseleave'); - - if (text) { - text = text.destroy(); - } - if (box) { - box = box.destroy(); - } - // Call base implementation to destroy the rest - SVGElement.prototype.destroy.call(wrapper); - - // Release local pointers (#1298) - wrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = null; - } - }); - } - }; // end SVGRenderer - - - // general renderer - Renderer = SVGRenderer; - // extend SvgElement for useHTML option - extend(SVGElement.prototype, { - /** - * Apply CSS to HTML elements. This is used in text within SVG rendering and - * by the VML renderer - */ - htmlCss: function (styles) { - var wrapper = this, - element = wrapper.element, - textWidth = styles && element.tagName === 'SPAN' && styles.width; - - if (textWidth) { - delete styles.width; - wrapper.textWidth = textWidth; - wrapper.updateTransform(); - } - if (styles && styles.textOverflow === 'ellipsis') { - styles.whiteSpace = 'nowrap'; - styles.overflow = 'hidden'; - } - wrapper.styles = extend(wrapper.styles, styles); - css(wrapper.element, styles); - - return wrapper; - }, - - /** - * VML and useHTML method for calculating the bounding box based on offsets - * @param {Boolean} refresh Whether to force a fresh value from the DOM or to - * use the cached value - * - * @return {Object} A hash containing values for x, y, width and height - */ - - htmlGetBBox: function () { - var wrapper = this, - element = wrapper.element; - - // faking getBBox in exported SVG in legacy IE - // faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?) - if (element.nodeName === 'text') { - element.style.position = ABSOLUTE; - } - - return { - x: element.offsetLeft, - y: element.offsetTop, - width: element.offsetWidth, - height: element.offsetHeight - }; - }, - - /** - * VML override private method to update elements based on internal - * properties based on SVG transform - */ - htmlUpdateTransform: function () { - // aligning non added elements is expensive - if (!this.added) { - this.alignOnAdd = true; - return; - } - - var wrapper = this, - renderer = wrapper.renderer, - elem = wrapper.element, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - x = wrapper.x || 0, - y = wrapper.y || 0, - align = wrapper.textAlign || 'left', - alignCorrection = { left: 0, center: 0.5, right: 1 }[align], - shadows = wrapper.shadows, - styles = wrapper.styles; - - // apply translate - css(elem, { - marginLeft: translateX, - marginTop: translateY - }); - if (shadows) { // used in labels/tooltip - each(shadows, function (shadow) { - css(shadow, { - marginLeft: translateX + 1, - marginTop: translateY + 1 - }); - }); - } - - // apply inversion - if (wrapper.inverted) { // wrapper is a group - each(elem.childNodes, function (child) { - renderer.invertChild(child, elem); - }); - } - - if (elem.tagName === 'SPAN') { - - var width, - rotation = wrapper.rotation, - baseline, - textWidth = pInt(wrapper.textWidth), - currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth, wrapper.textAlign].join(','); - - if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed - - - baseline = renderer.fontMetrics(elem.style.fontSize).b; - - // Renderer specific handling of span rotation - if (defined(rotation)) { - wrapper.setSpanRotation(rotation, alignCorrection, baseline); - } - - width = pick(wrapper.elemWidth, elem.offsetWidth); - - // Update textWidth - if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254 - css(elem, { - width: textWidth + PX, - display: 'block', - whiteSpace: (styles && styles.whiteSpace) || 'normal' // #3331 - }); - width = textWidth; - } - - wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align); - } - - // apply position with correction - css(elem, { - left: (x + (wrapper.xCorr || 0)) + PX, - top: (y + (wrapper.yCorr || 0)) + PX - }); - - // force reflow in webkit to apply the left and top on useHTML element (#1249) - if (isWebKit) { - baseline = elem.offsetHeight; // assigned to baseline for lint purpose - } - - // record current text transform - wrapper.cTT = currentTextTransform; - } - }, - - /** - * Set the rotation of an individual HTML span - */ - setSpanRotation: function (rotation, alignCorrection, baseline) { - var rotationStyle = {}, - cssTransformKey = isMS ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : ''; - - rotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)'; - rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin = (alignCorrection * 100) + '% ' + baseline + 'px'; - css(this.element, rotationStyle); - }, - - /** - * Get the correction in X and Y positioning as the element is rotated. - */ - getSpanCorrection: function (width, baseline, alignCorrection) { - this.xCorr = -width * alignCorrection; - this.yCorr = -baseline; - } - }); - - // Extend SvgRenderer for useHTML option. - extend(SVGRenderer.prototype, { - /** - * Create HTML text node. This is used by the VML renderer as well as the SVG - * renderer through the useHTML option. - * - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - html: function (str, x, y) { - var wrapper = this.createElement('span'), - element = wrapper.element, - renderer = wrapper.renderer; - - // Text setter - wrapper.textSetter = function (value) { - if (value !== element.innerHTML) { - delete this.bBox; - } - element.innerHTML = this.textStr = value; - wrapper.htmlUpdateTransform(); - }; - - // Various setters which rely on update transform - wrapper.xSetter = wrapper.ySetter = wrapper.alignSetter = wrapper.rotationSetter = function (value, key) { - if (key === 'align') { - key = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML. - } - wrapper[key] = value; - wrapper.htmlUpdateTransform(); - }; - - // Set the default attributes - wrapper - .attr({ - text: str, - x: mathRound(x), - y: mathRound(y) - }) - .css({ - position: ABSOLUTE, - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize - }); - - // Keep the whiteSpace style outside the wrapper.styles collection - element.style.whiteSpace = 'nowrap'; - - // Use the HTML specific .css method - wrapper.css = wrapper.htmlCss; - - // This is specific for HTML within SVG - if (renderer.isSVG) { - wrapper.add = function (svgGroupWrapper) { - - var htmlGroup, - container = renderer.box.parentNode, - parentGroup, - parents = []; - - this.parentGroup = svgGroupWrapper; - - // Create a mock group to hold the HTML elements - if (svgGroupWrapper) { - htmlGroup = svgGroupWrapper.div; - if (!htmlGroup) { - - // Read the parent chain into an array and read from top down - parentGroup = svgGroupWrapper; - while (parentGroup) { - - parents.push(parentGroup); - - // Move up to the next parent group - parentGroup = parentGroup.parentGroup; - } - - // Ensure dynamically updating position when any parent is translated - each(parents.reverse(), function (parentGroup) { - var htmlGroupStyle, - cls = attr(parentGroup.element, 'class'); - - if (cls) { - cls = { className: cls }; - } // else null - - // Create a HTML div and append it to the parent div to emulate - // the SVG group structure - htmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, cls, { - position: ABSOLUTE, - left: (parentGroup.translateX || 0) + PX, - top: (parentGroup.translateY || 0) + PX - }, htmlGroup || container); // the top group is appended to container - - // Shortcut - htmlGroupStyle = htmlGroup.style; - - // Set listeners to update the HTML div's position whenever the SVG group - // position is changed - extend(parentGroup, { - translateXSetter: function (value, key) { - htmlGroupStyle.left = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - }, - translateYSetter: function (value, key) { - htmlGroupStyle.top = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - } - }); - - // These properties are set as attributes on the SVG group, and as - // identical CSS properties on the div. (#3542) - each(['opacity', 'visibility'], function (prop) { - wrap(parentGroup, prop + 'Setter', function (proceed, value, key, elem) { - proceed.call(this, value, key, elem); - htmlGroupStyle[key] = value; - }); - }); - }); - - } - } else { - htmlGroup = container; - } - - htmlGroup.appendChild(element); - - // Shared with VML: - wrapper.added = true; - if (wrapper.alignOnAdd) { - wrapper.htmlUpdateTransform(); - } - - return wrapper; - }; - } - return wrapper; - } - }); - - - /* **************************************************************************** - * * - * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - * For applications and websites that don't need IE support, like platform * - * targeted mobile apps and web apps, this code can be removed. * - * * - *****************************************************************************/ - - /** - * @constructor - */ - var VMLRenderer, VMLElement; - if (!hasSVG && !useCanVG) { - - /** - * The VML element wrapper. - */ - VMLElement = { - - /** - * Initialize a new VML element wrapper. It builds the markup as a string - * to minimize DOM traffic. - * @param {Object} renderer - * @param {Object} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this, - markup = ['<', nodeName, ' filled="f" stroked="f"'], - style = ['position: ', ABSOLUTE, ';'], - isDiv = nodeName === DIV; - - // divs and shapes need size - if (nodeName === 'shape' || isDiv) { - style.push('left:0;top:0;width:1px;height:1px;'); - } - style.push('visibility: ', isDiv ? HIDDEN : VISIBLE); - - markup.push(' style="', style.join(''), '"/>'); - - // create element with default attributes and style - if (nodeName) { - markup = isDiv || nodeName === 'span' || nodeName === 'img' ? - markup.join('') : - renderer.prepVML(markup); - wrapper.element = createElement(markup); - } - - wrapper.renderer = renderer; - }, - - /** - * Add the node to the given parent - * @param {Object} parent - */ - add: function (parent) { - var wrapper = this, - renderer = wrapper.renderer, - element = wrapper.element, - box = renderer.box, - inverted = parent && parent.inverted, - - // get the parent node - parentNode = parent ? - parent.element || parent : - box; - - if (parent) { - this.parentGroup = parent; - } - - // if the parent group is inverted, apply inversion on all children - if (inverted) { // only on groups - renderer.invertChild(element, parentNode); - } - - // append it - parentNode.appendChild(element); - - // align text after adding to be able to read offset - wrapper.added = true; - if (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) { - wrapper.updateTransform(); - } - - // fire an event for internal hooks - if (wrapper.onAdd) { - wrapper.onAdd(); - } - - return wrapper; - }, - - /** - * VML always uses htmlUpdateTransform - */ - updateTransform: SVGElement.prototype.htmlUpdateTransform, - - /** - * Set the rotation of a span with oldIE's filter - */ - setSpanRotation: function () { - // Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented - // but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+ - // has support for CSS3 transform. The getBBox method also needs to be updated - // to compensate for the rotation, like it currently does for SVG. - // Test case: http://jsfiddle.net/highcharts/Ybt44/ - - var rotation = this.rotation, - costheta = mathCos(rotation * deg2rad), - sintheta = mathSin(rotation * deg2rad); - - css(this.element, { - filter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta, - ', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta, - ', sizingMethod=\'auto expand\')'].join('') : NONE - }); - }, - - /** - * Get the positioning correction for the span after rotating. - */ - getSpanCorrection: function (width, baseline, alignCorrection, rotation, align) { - - var costheta = rotation ? mathCos(rotation * deg2rad) : 1, - sintheta = rotation ? mathSin(rotation * deg2rad) : 0, - height = pick(this.elemHeight, this.element.offsetHeight), - quad, - nonLeft = align && align !== 'left'; - - // correct x and y - this.xCorr = costheta < 0 && -width; - this.yCorr = sintheta < 0 && -height; - - // correct for baseline and corners spilling out after rotation - quad = costheta * sintheta < 0; - this.xCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection); - this.yCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1); - // correct for the length/height of the text - if (nonLeft) { - this.xCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1); - if (rotation) { - this.yCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1); - } - css(this.element, { - textAlign: align - }); - } - }, - - /** - * Converts a subset of an SVG path definition to its VML counterpart. Takes an array - * as the parameter and returns a string. - */ - pathToVML: function (value) { - // convert paths - var i = value.length, - path = []; - - while (i--) { - - // Multiply by 10 to allow subpixel precision. - // Substracting half a pixel seems to make the coordinates - // align with SVG, but this hasn't been tested thoroughly - if (isNumber(value[i])) { - path[i] = mathRound(value[i] * 10) - 5; - } else if (value[i] === 'Z') { // close the path - path[i] = 'x'; - } else { - path[i] = value[i]; - - // When the start X and end X coordinates of an arc are too close, - // they are rounded to the same value above. In this case, substract or - // add 1 from the end X and Y positions. #186, #760, #1371, #1410. - if (value.isArc && (value[i] === 'wa' || value[i] === 'at')) { - // Start and end X - if (path[i + 5] === path[i + 7]) { - path[i + 7] += value[i + 7] > value[i + 5] ? 1 : -1; - } - // Start and end Y - if (path[i + 6] === path[i + 8]) { - path[i + 8] += value[i + 8] > value[i + 6] ? 1 : -1; - } - } - } - } - - - // Loop up again to handle path shortcuts (#2132) - /*while (i++ < path.length) { - if (path[i] === 'H') { // horizontal line to - path[i] = 'L'; - path.splice(i + 2, 0, path[i - 1]); - } else if (path[i] === 'V') { // vertical line to - path[i] = 'L'; - path.splice(i + 1, 0, path[i - 2]); - } - }*/ - return path.join(' ') || 'x'; - }, - - /** - * Set the element's clipping to a predefined rectangle - * - * @param {String} id The id of the clip rectangle - */ - clip: function (clipRect) { - var wrapper = this, - clipMembers, - cssRet; - - if (clipRect) { - clipMembers = clipRect.members; - erase(clipMembers, wrapper); // Ensure unique list of elements (#1258) - clipMembers.push(wrapper); - wrapper.destroyClip = function () { - erase(clipMembers, wrapper); - }; - cssRet = clipRect.getCSS(wrapper); - - } else { - if (wrapper.destroyClip) { - wrapper.destroyClip(); - } - cssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214 - } - - return wrapper.css(cssRet); - - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: SVGElement.prototype.htmlCss, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - // discardElement will detach the node from its parent before attaching it - // to the garbage bin. Therefore it is important that the node is attached and have parent. - if (element.parentNode) { - discardElement(element); - } - }, - - /** - * Extend element.destroy by removing it from the clip members array - */ - destroy: function () { - if (this.destroyClip) { - this.destroyClip(); - } - - return SVGElement.prototype.destroy.apply(this); - }, - - /** - * Add an event listener. VML override for normalizing event parameters. - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - // simplest possible event model for internal use - this.element['on' + eventType] = function () { - var evt = win.event; - evt.target = evt.srcElement; - handler(evt); - }; - return this; - }, - - /** - * In stacked columns, cut off the shadows so that they don't overlap - */ - cutOffPath: function (path, length) { - - var len; - - path = path.split(/[ ,]/); - len = path.length; - - if (len === 9 || len === 11) { - path[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length; - } - return path.join(' '); - }, - - /** - * Apply a drop shadow by copying elements and giving them different strokes - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - element = this.element, - renderer = this.renderer, - shadow, - elemStyle = element.style, - markup, - path = element.path, - strokeWidth, - modifiedPath, - shadowWidth, - shadowElementOpacity; - - // some times empty paths are not strings - if (path && typeof path.value !== 'string') { - path = 'x'; - } - modifiedPath = path; - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - for (i = 1; i <= 3; i++) { - - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - - // Cut off shadows for stacked column items - if (cutOff) { - modifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5); - } - - markup = ['<shape isShadow="true" strokeweight="', strokeWidth, - '" filled="false" path="', modifiedPath, - '" coordsize="10 10" style="', element.style.cssText, '" />']; - - shadow = createElement(renderer.prepVML(markup), - null, { - left: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1), - top: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1) - } - ); - if (cutOff) { - shadow.cutOff = strokeWidth + 1; - } - - // apply the opacity - markup = ['<stroke color="', shadowOptions.color || 'black', '" opacity="', shadowElementOpacity * i, '"/>']; - createElement(renderer.prepVML(markup), null, null, shadow); - - - // insert it - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - // record it - shadows.push(shadow); - - } - - this.shadows = shadows; - } - return this; - }, - updateShadows: noop, // Used in SVG only - - setAttr: function (key, value) { - if (docMode8) { // IE8 setAttribute bug - this.element[key] = value; - } else { - this.element.setAttribute(key, value); - } - }, - classSetter: function (value) { - // IE8 Standards mode has problems retrieving the className unless set like this - this.element.className = value; - }, - dashstyleSetter: function (value, key, element) { - var strokeElem = element.getElementsByTagName('stroke')[0] || - createElement(this.renderer.prepVML(['<stroke/>']), null, null, element); - strokeElem[key] = value || 'solid'; - this[key] = value; /* because changing stroke-width will change the dash length - and cause an epileptic effect */ - }, - dSetter: function (value, key, element) { - var i, - shadows = this.shadows; - value = value || []; - this.d = value.join && value.join(' '); // used in getter for animation - - element.path = value = this.pathToVML(value); - - // update shadows - if (shadows) { - i = shadows.length; - while (i--) { - shadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value; - } - } - this.setAttr(key, value); - }, - fillSetter: function (value, key, element) { - var nodeName = element.nodeName; - if (nodeName === 'SPAN') { // text color - element.style.color = value; - } else if (nodeName !== 'IMG') { // #1336 - element.filled = value !== NONE; - this.setAttr('fillcolor', this.renderer.color(value, element, key, this)); - } - }, - 'fill-opacitySetter': function (value, key, element) { - createElement( - this.renderer.prepVML(['<', key.split('-')[0], ' opacity="', value, '"/>']), - null, - null, - element - ); - }, - opacitySetter: noop, // Don't bother - animation is too slow and filters introduce artifacts - rotationSetter: function (value, key, element) { - var style = element.style; - this[key] = style[key] = value; // style is for #1873 - - // Correction for the 1x1 size of the shape container. Used in gauge needles. - style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX; - style.top = mathRound(mathCos(value * deg2rad)) + PX; - }, - strokeSetter: function (value, key, element) { - this.setAttr('strokecolor', this.renderer.color(value, element, key, this)); - }, - 'stroke-widthSetter': function (value, key, element) { - element.stroked = !!value; // VML "stroked" attribute - this[key] = value; // used in getter, issue #113 - if (isNumber(value)) { - value += PX; - } - this.setAttr('strokeweight', value); - }, - titleSetter: function (value, key) { - this.setAttr(key, value); - }, - visibilitySetter: function (value, key, element) { - - // Handle inherited visibility - if (value === 'inherit') { - value = VISIBLE; - } - - // Let the shadow follow the main element - if (this.shadows) { - each(this.shadows, function (shadow) { - shadow.style[key] = value; - }); - } - - // Instead of toggling the visibility CSS property, move the div out of the viewport. - // This works around #61 and #586 - if (element.nodeName === 'DIV') { - value = value === HIDDEN ? '-999em' : 0; - - // In order to redraw, IE7 needs the div to be visible when tucked away - // outside the viewport. So the visibility is actually opposite of - // the expected value. This applies to the tooltip only. - if (!docMode8) { - element.style[key] = value ? VISIBLE : HIDDEN; - } - key = 'top'; - } - element.style[key] = value; - }, - xSetter: function (value, key, element) { - this[key] = value; // used in getter - - if (key === 'x') { - key = 'left'; - } else if (key === 'y') { - key = 'top'; - }/* else { - value = mathMax(0, value); // don't set width or height below zero (#311) - }*/ - - // clipping rectangle special - if (this.updateClipping) { - this[key] = value; // the key is now 'left' or 'top' for 'x' and 'y' - this.updateClipping(); - } else { - // normal - element.style[key] = value; - } - }, - zIndexSetter: function (value, key, element) { - element.style[key] = value; - } - }; - VMLElement['stroke-opacitySetter'] = VMLElement['fill-opacitySetter']; - - Highcharts.VMLElement = VMLElement = extendClass(SVGElement, VMLElement); - - // Some shared setters - VMLElement.prototype.ySetter = - VMLElement.prototype.widthSetter = - VMLElement.prototype.heightSetter = - VMLElement.prototype.xSetter; - - - /** - * The VML renderer - */ - var VMLRendererExtension = { // inherit SVGRenderer - - Element: VMLElement, - isIE8: userAgent.indexOf('MSIE 8.0') > -1, - - - /** - * Initialize the VMLRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - */ - init: function (container, width, height, style) { - var renderer = this, - boxWrapper, - box, - css; - - renderer.alignedObjects = []; - - boxWrapper = renderer.createElement(DIV) - .css(extend(this.getStyle(style), { position: 'relative' })); - box = boxWrapper.element; - container.appendChild(boxWrapper.element); - - - // generate the containing box - renderer.isVML = true; - renderer.box = box; - renderer.boxWrapper = boxWrapper; - renderer.gradients = {}; - renderer.cache = {}; // Cache for numerical bounding boxes - renderer.cacheKeys = []; - - - renderer.setSize(width, height, false); - - // The only way to make IE6 and IE7 print is to use a global namespace. However, - // with IE8 the only way to make the dynamic shapes visible in screen and print mode - // seems to be to add the xmlns attribute and the behaviour style inline. - if (!doc.namespaces.hcv) { - - doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'); - - // Setup default CSS (#2153, #2368, #2384) - css = 'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' + - '{ behavior:url(#default#VML); display: inline-block; } '; - try { - doc.createStyleSheet().cssText = css; - } catch (e) { - doc.styleSheets[0].cssText += css; - } - - } - }, - - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none - */ - isHidden: function () { - return !this.box.offsetWidth; - }, - - /** - * Define a clipping rectangle. In VML it is accomplished by storing the values - * for setting the CSS style to all associated members. - * - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - - // create a dummy element - var clipRect = this.createElement(), - isObj = isObject(x); - - // mimic a rectangle with its style object for automatic updating in attr - return extend(clipRect, { - members: [], - count: 0, - left: (isObj ? x.x : x) + 1, - top: (isObj ? x.y : y) + 1, - width: (isObj ? x.width : width) - 1, - height: (isObj ? x.height : height) - 1, - getCSS: function (wrapper) { - var element = wrapper.element, - nodeName = element.nodeName, - isShape = nodeName === 'shape', - inverted = wrapper.inverted, - rect = this, - top = rect.top - (isShape ? element.offsetTop : 0), - left = rect.left, - right = left + rect.width, - bottom = top + rect.height, - ret = { - clip: 'rect(' + - mathRound(inverted ? left : top) + 'px,' + - mathRound(inverted ? bottom : right) + 'px,' + - mathRound(inverted ? right : bottom) + 'px,' + - mathRound(inverted ? top : left) + 'px)' - }; - - // issue 74 workaround - if (!inverted && docMode8 && nodeName === 'DIV') { - extend(ret, { - width: right + PX, - height: bottom + PX - }); - } - return ret; - }, - - // used in attr and animation to update the clipping of all members - updateClipping: function () { - each(clipRect.members, function (member) { - if (member.element) { // Deleted series, like in stock/members/series-remove demo. Should be removed from members, but this will do. - member.css(clipRect.getCSS(member)); - } - }); - } - }); - - }, - - - /** - * Take a color and return it if it's a string, make it a gradient if it's a - * gradient configuration object, and apply opacity. - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop, wrapper) { - var renderer = this, - colorObject, - regexRgba = /^rgba/, - markup, - fillType, - ret = NONE; - - // Check for linear or radial gradient - if (color && color.linearGradient) { - fillType = 'gradient'; - } else if (color && color.radialGradient) { - fillType = 'pattern'; - } - - - if (fillType) { - - var stopColor, - stopOpacity, - gradient = color.linearGradient || color.radialGradient, - x1, - y1, - x2, - y2, - opacity1, - opacity2, - color1, - color2, - fillAttr = '', - stops = color.stops, - firstStop, - lastStop, - colors = [], - addFillNode = function () { - // Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - markup = ['<fill colors="' + colors.join(',') + '" opacity="', opacity2, '" o:opacity2="', opacity1, - '" type="', fillType, '" ', fillAttr, 'focus="100%" method="any" />']; - createElement(renderer.prepVML(markup), null, null, elem); - }; - - // Extend from 0 to 1 - firstStop = stops[0]; - lastStop = stops[stops.length - 1]; - if (firstStop[0] > 0) { - stops.unshift([ - 0, - firstStop[1] - ]); - } - if (lastStop[0] < 1) { - stops.push([ - 1, - lastStop[1] - ]); - } - - // Compute the stops - each(stops, function (stop, i) { - if (regexRgba.test(stop[1])) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - - // Build the color attribute - colors.push((stop[0] * 100) + '% ' + stopColor); - - // Only start and end opacities are allowed, so we use the first and the last - if (!i) { - opacity1 = stopOpacity; - color2 = stopColor; - } else { - opacity2 = stopOpacity; - color1 = stopColor; - } - }); - - // Apply the gradient to fills only. - if (prop === 'fill') { - - // Handle linear gradient angle - if (fillType === 'gradient') { - x1 = gradient.x1 || gradient[0] || 0; - y1 = gradient.y1 || gradient[1] || 0; - x2 = gradient.x2 || gradient[2] || 0; - y2 = gradient.y2 || gradient[3] || 0; - fillAttr = 'angle="' + (90 - math.atan( - (y2 - y1) / // y vector - (x2 - x1) // x vector - ) * 180 / mathPI) + '"'; - - addFillNode(); - - // Radial (circular) gradient - } else { - - var r = gradient.r, - sizex = r * 2, - sizey = r * 2, - cx = gradient.cx, - cy = gradient.cy, - radialReference = elem.radialReference, - bBox, - applyRadialGradient = function () { - if (radialReference) { - bBox = wrapper.getBBox(); - cx += (radialReference[0] - bBox.x) / bBox.width - 0.5; - cy += (radialReference[1] - bBox.y) / bBox.height - 0.5; - sizex *= radialReference[2] / bBox.width; - sizey *= radialReference[2] / bBox.height; - } - fillAttr = 'src="' + defaultOptions.global.VMLRadialGradientURL + '" ' + - 'size="' + sizex + ',' + sizey + '" ' + - 'origin="0.5,0.5" ' + - 'position="' + cx + ',' + cy + '" ' + - 'color2="' + color2 + '" '; - - addFillNode(); - }; - - // Apply radial gradient - if (wrapper.added) { - applyRadialGradient(); - } else { - // We need to know the bounding box to get the size and position right - wrapper.onAdd = applyRadialGradient; - } - - // The fill element's color attribute is broken in IE8 standards mode, so we - // need to set the parent shape's fillcolor attribute instead. - ret = color1; - } - - // Gradients are not supported for VML stroke, return the first color. #722. - } else { - ret = stopColor; - } - - // If the color is an rgba color, split it and add a fill node - // to hold the opacity component - } else if (regexRgba.test(color) && elem.tagName !== 'IMG') { - - colorObject = Color(color); - - wrapper[prop + '-opacitySetter'](colorObject.get('a'), prop, elem); - - ret = colorObject.get('rgb'); - - - } else { - var propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node - if (propNodes.length) { - propNodes[0].opacity = 1; - propNodes[0].type = 'solid'; - } - ret = color; - } - - return ret; - }, - - /** - * Take a VML string and prepare it for either IE8 or IE6/IE7. - * @param {Array} markup A string array of the VML markup to prepare - */ - prepVML: function (markup) { - var vmlStyle = 'display:inline-block;behavior:url(#default#VML);', - isIE8 = this.isIE8; - - markup = markup.join(''); - - if (isIE8) { // add xmlns and style inline - markup = markup.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />'); - if (markup.indexOf('style="') === -1) { - markup = markup.replace('/>', ' style="' + vmlStyle + '" />'); - } else { - markup = markup.replace('style="', 'style="' + vmlStyle); - } - - } else { // add namespace - markup = markup.replace('<', '<hcv:'); - } - - return markup; - }, - - /** - * Create rotated and aligned text - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - text: SVGRenderer.prototype.html, - - /** - * Create and return a path element - * @param {Array} path - */ - path: function (path) { - var attr = { - // subpixel precision down to 0.1 (width and height = 1px) - coordsize: '10 10' - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - // create the shape - return this.createElement('shape').attr(attr); - }, - - /** - * Create and return a circle element. In VML circles are implemented as - * shapes, which is faster than v:oval - * @param {Number} x - * @param {Number} y - * @param {Number} r - */ - circle: function (x, y, r) { - var circle = this.symbol('circle'); - if (isObject(x)) { - r = x.r; - y = x.y; - x = x.x; - } - circle.isCircle = true; // Causes x and y to mean center (#1682) - circle.r = r; - return circle.attr({ x: x, y: y }); - }, - - /** - * Create a group using an outer div and an inner v:group to allow rotating - * and flipping. A simple v:group would have problems with positioning - * child HTML elements and CSS clip. - * - * @param {String} name The name of the group - */ - g: function (name) { - var wrapper, - attribs; - - // set the class name - if (name) { - attribs = { 'className': PREFIX + name, 'class': PREFIX + name }; - } - - // the div to hold HTML and clipping - wrapper = this.createElement(DIV).attr(attribs); - - return wrapper; - }, - - /** - * VML override to create a regular HTML image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var obj = this.createElement('img') - .attr({ src: src }); - - if (arguments.length > 1) { - obj.attr({ - x: x, - y: y, - width: width, - height: height - }); - } - return obj; - }, - - /** - * For rectangles, VML uses a shape for rect to overcome bugs and rotation problems - */ - createElement: function (nodeName) { - return nodeName === 'rect' ? this.symbol(nodeName) : SVGRenderer.prototype.createElement.call(this, nodeName); - }, - - /** - * In the VML renderer, each child of an inverted div (group) is inverted - * @param {Object} element - * @param {Object} parentNode - */ - invertChild: function (element, parentNode) { - var ren = this, - parentStyle = parentNode.style, - imgStyle = element.tagName === 'IMG' && element.style; // #1111 - - css(element, { - flip: 'x', - left: pInt(parentStyle.width) - (imgStyle ? pInt(imgStyle.top) : 1), - top: pInt(parentStyle.height) - (imgStyle ? pInt(imgStyle.left) : 1), - rotation: -90 - }); - - // Recursively invert child elements, needed for nested composite shapes like box plots and error bars. #1680, #1806. - each(element.childNodes, function (child) { - ren.invertChild(child, element); - }); - }, - - /** - * Symbol definitions that override the parent SVG renderer's symbols - * - */ - symbols: { - // VML specific arc function - arc: function (x, y, w, h, options) { - var start = options.start, - end = options.end, - radius = options.r || w || h, - innerRadius = options.innerR, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - ret; - - if (end - start === 0) { // no angle, don't show it. - return ['x']; - } - - ret = [ - 'wa', // clockwise arc to - x - radius, // left - y - radius, // top - x + radius, // right - y + radius, // bottom - x + radius * cosStart, // start x - y + radius * sinStart, // start y - x + radius * cosEnd, // end x - y + radius * sinEnd // end y - ]; - - if (options.open && !innerRadius) { - ret.push( - 'e', - M, - x,// - innerRadius, - y// - innerRadius - ); - } - - ret.push( - 'at', // anti clockwise arc to - x - innerRadius, // left - y - innerRadius, // top - x + innerRadius, // right - y + innerRadius, // bottom - x + innerRadius * cosEnd, // start x - y + innerRadius * sinEnd, // start y - x + innerRadius * cosStart, // end x - y + innerRadius * sinStart, // end y - 'x', // finish path - 'e' // close - ); - - ret.isArc = true; - return ret; - - }, - // Add circle symbol path. This performs significantly faster than v:oval. - circle: function (x, y, w, h, wrapper) { - - if (wrapper) { - w = h = 2 * wrapper.r; - } - - // Center correction, #1682 - if (wrapper && wrapper.isCircle) { - x -= w / 2; - y -= h / 2; - } - - // Return the path - return [ - 'wa', // clockwisearcto - x, // left - y, // top - x + w, // right - y + h, // bottom - x + w, // start x - y + h / 2, // start y - x + w, // end x - y + h / 2, // end y - //'x', // finish path - 'e' // close - ]; - }, - /** - * Add rectangle symbol path which eases rotation and omits arcsize problems - * compared to the built-in VML roundrect shape. When borders are not rounded, - * use the simpler square path, else use the callout path without the arrow. - */ - rect: function (x, y, w, h, options) { - return SVGRenderer.prototype.symbols[ - !defined(options) || !options.r ? 'square' : 'callout' - ].call(0, x, y, w, h, options); - } - } - }; - Highcharts.VMLRenderer = VMLRenderer = function () { - this.init.apply(this, arguments); - }; - VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension); - - // general renderer - Renderer = VMLRenderer; - } - - // This method is used with exporting in old IE, when emulating SVG (see #2314) - SVGRenderer.prototype.measureSpanWidth = function (text, styles) { - var measuringSpan = doc.createElement('span'), - offsetWidth, - textNode = doc.createTextNode(text); - - measuringSpan.appendChild(textNode); - css(measuringSpan, styles); - this.box.appendChild(measuringSpan); - offsetWidth = measuringSpan.offsetWidth; - discardElement(measuringSpan); // #2463 - return offsetWidth; - }; - - - /* **************************************************************************** - * * - * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - *****************************************************************************/ - /* **************************************************************************** - * * - * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT * - * TARGETING THAT SYSTEM. * - * * - *****************************************************************************/ - var CanVGRenderer, - CanVGController; - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - function getScript(scriptLocation, callback) { - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - } - - if (useCanVG) { - /** - * The CanVGRenderer is empty from start to keep the source footprint small. - * When requested, the CanVGController downloads the rest of the source packaged - * together with the canvg library. - */ - Highcharts.CanVGRenderer = CanVGRenderer = function () { - // Override the global SVG namespace to fake SVG/HTML that accepts CSS - SVG_NS = 'http://www.w3.org/1999/xhtml'; - }; - - /** - * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but - * the implementation from SvgRenderer will not be merged in until first render. - */ - CanVGRenderer.prototype.symbols = {}; - - /** - * Handles on demand download of canvg rendering support. - */ - CanVGController = (function () { - // List of renderering calls - var deferredRenderCalls = []; - - /** - * When downloaded, we are ready to draw deferred charts. - */ - function drawDeferred() { - var callLength = deferredRenderCalls.length, - callIndex; - - // Draw all pending render calls - for (callIndex = 0; callIndex < callLength; callIndex++) { - deferredRenderCalls[callIndex](); - } - // Clear the list - deferredRenderCalls = []; - } - - return { - push: function (func, scriptLocation) { - // Only get the script once - if (deferredRenderCalls.length === 0) { - getScript(scriptLocation, drawDeferred); - } - // Register render call - deferredRenderCalls.push(func); - } - }; - }()); - - Renderer = CanVGRenderer; - } // end CanVGRenderer - - /* **************************************************************************** - * * - * END OF ANDROID < 3 SPECIFIC CODE * - * * - *****************************************************************************/ - - /** - * The Tick class - */ - function Tick(axis, pos, type, noLabel) { - this.axis = axis; - this.pos = pos; - this.type = type || ''; - this.isNew = true; - - if (!type && !noLabel) { - this.addLabel(); - } - } - - Tick.prototype = { - /** - * Write the tick label - */ - addLabel: function () { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - categories = axis.categories, - names = axis.names, - pos = tick.pos, - labelOptions = options.labels, - str, - tickPositions = axis.tickPositions, - isFirst = pos === tickPositions[0], - isLast = pos === tickPositions[tickPositions.length - 1], - value = categories ? - pick(categories[pos], names[pos], pos) : - pos, - label = tick.label, - tickPositionInfo = tickPositions.info, - dateTimeLabelFormat; - - // Set the datetime label format. If a higher rank is set for this position, use that. If not, - // use the general format. - if (axis.isDatetimeAxis && tickPositionInfo) { - dateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName]; - } - // set properties for access in render method - tick.isFirst = isFirst; - tick.isLast = isLast; - - // get the string - str = axis.labelFormatter.call({ - axis: axis, - chart: chart, - isFirst: isFirst, - isLast: isLast, - dateTimeLabelFormat: dateTimeLabelFormat, - value: axis.isLog ? correctFloat(lin2log(value)) : value - }); - - // prepare CSS - //css = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX }; - - // first call - if (!defined(label)) { - - tick.label = label = - defined(str) && labelOptions.enabled ? - chart.renderer.text( - str, - 0, - 0, - labelOptions.useHTML - ) - //.attr(attr) - // without position absolute, IE export sometimes is wrong - .css(merge(labelOptions.style)) - .add(axis.labelGroup) : - null; - tick.labelLength = label && label.getBBox().width; // Un-rotated length - tick.rotation = 0; // Base value to detect change for new calls to getBBox - - // update - } else if (label) { - label.attr({ text: str }); - } - }, - - /** - * Get the offset height or width of the label - */ - getLabelSize: function () { - return this.label ? - this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] : - 0; - }, - - /** - * Handle the label overflow by adjusting the labels to the left and right edge, or - * hide them if they collide into the neighbour label. - */ - handleOverflow: function (xy) { - var axis = this.axis, - pxPos = xy.x, - chartWidth = axis.chart.chartWidth, - spacing = axis.chart.spacing, - leftBound = pick(axis.labelLeft, mathMin(axis.pos, spacing[3])), - rightBound = pick(axis.labelRight, mathMax(axis.pos + axis.len, chartWidth - spacing[1])), - label = this.label, - rotation = this.rotation, - factor = { left: 0, center: 0.5, right: 1 }[axis.labelAlign], - labelWidth = label.getBBox().width, - slotWidth = axis.slotWidth, - xCorrection = factor, - goRight = 1, - leftPos, - rightPos, - textWidth, - css = {}; - - // Check if the label overshoots the chart spacing box. If it does, move it. - // If it now overshoots the slotWidth, add ellipsis. - if (!rotation) { - leftPos = pxPos - factor * labelWidth; - rightPos = pxPos + (1 - factor) * labelWidth; - - if (leftPos < leftBound) { - slotWidth = xy.x + slotWidth * (1 - factor) - leftBound; - } else if (rightPos > rightBound) { - slotWidth = rightBound - xy.x + slotWidth * factor; - goRight = -1; - } - - slotWidth = mathMin(axis.slotWidth, slotWidth); // #4177 - if (slotWidth < axis.slotWidth && axis.labelAlign === 'center') { - xy.x += goRight * (axis.slotWidth - slotWidth - xCorrection * (axis.slotWidth - mathMin(labelWidth, slotWidth))); - } - // If the label width exceeds the available space, set a text width to be - // picked up below. Also, if a width has been set before, we need to set a new - // one because the reported labelWidth will be limited by the box (#3938). - if (labelWidth > slotWidth || (axis.autoRotation && label.styles.width)) { - textWidth = slotWidth; - } - - // Add ellipsis to prevent rotated labels to be clipped against the edge of the chart - } else if (rotation < 0 && pxPos - factor * labelWidth < leftBound) { - textWidth = mathRound(pxPos / mathCos(rotation * deg2rad) - leftBound); - } else if (rotation > 0 && pxPos + factor * labelWidth > rightBound) { - textWidth = mathRound((chartWidth - pxPos) / mathCos(rotation * deg2rad)); - } - - if (textWidth) { - css.width = textWidth; - if (!axis.options.labels.style.textOverflow) { - css.textOverflow = 'ellipsis'; - } - label.css(css); - } - }, - - /** - * Get the x and y position for ticks and labels - */ - getPosition: function (horiz, pos, tickmarkOffset, old) { - var axis = this.axis, - chart = axis.chart, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight; - - return { - x: horiz ? - axis.translate(pos + tickmarkOffset, null, null, old) + axis.transB : - axis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0), - - y: horiz ? - cHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) : - cHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB - }; - - }, - - /** - * Get the x, y position of the tick label - */ - getLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - transA = axis.transA, - reversed = axis.reversed, - staggerLines = axis.staggerLines, - rotCorr = axis.tickRotCorr || { x: 0, y: 0 }, - yOffset = labelOptions.y, - line; - - if (!defined(yOffset)) { - yOffset = axis.side === 2 ? - rotCorr.y + 8 : - // #3140, #3140 - yOffset = mathCos(label.rotation * deg2rad) * (rotCorr.y - label.getBBox(false, 0).height / 2); - } - - x = x + labelOptions.x + rotCorr.x - (tickmarkOffset && horiz ? - tickmarkOffset * transA * (reversed ? -1 : 1) : 0); - y = y + yOffset - (tickmarkOffset && !horiz ? - tickmarkOffset * transA * (reversed ? 1 : -1) : 0); - - // Correct for staggered labels - if (staggerLines) { - line = (index / (step || 1) % staggerLines); - if (axis.opposite) { - line = staggerLines - line - 1; - } - y += line * (axis.labelOffset / staggerLines); - } - - return { - x: x, - y: mathRound(y) - }; - }, - - /** - * Extendible method to return the path of the marker - */ - getMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) { - return renderer.crispLine([ - M, - x, - y, - L, - x + (horiz ? 0 : -tickLength), - y + (horiz ? tickLength : 0) - ], tickWidth); - }, - - /** - * Put everything in place - * - * @param index {Number} - * @param old {Boolean} Use old coordinates to prepare an animation into new position - */ - render: function (index, old, opacity) { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - renderer = chart.renderer, - horiz = axis.horiz, - type = tick.type, - label = tick.label, - pos = tick.pos, - labelOptions = options.labels, - gridLine = tick.gridLine, - gridPrefix = type ? type + 'Grid' : 'grid', - tickPrefix = type ? type + 'Tick' : 'tick', - gridLineWidth = options[gridPrefix + 'LineWidth'], - gridLineColor = options[gridPrefix + 'LineColor'], - dashStyle = options[gridPrefix + 'LineDashStyle'], - tickLength = options[tickPrefix + 'Length'], - tickWidth = pick(options[tickPrefix + 'Width'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1 - tickColor = options[tickPrefix + 'Color'], - tickPosition = options[tickPrefix + 'Position'], - gridLinePath, - mark = tick.mark, - markPath, - step = /*axis.labelStep || */labelOptions.step, - attribs, - show = true, - tickmarkOffset = axis.tickmarkOffset, - xy = tick.getPosition(horiz, pos, tickmarkOffset, old), - x = xy.x, - y = xy.y, - reverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 - - opacity = pick(opacity, 1); - this.isActive = true; - - // create the grid line - if (gridLineWidth) { - gridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true); - - if (gridLine === UNDEFINED) { - attribs = { - stroke: gridLineColor, - 'stroke-width': gridLineWidth - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - if (!type) { - attribs.zIndex = 1; - } - if (old) { - attribs.opacity = 0; - } - tick.gridLine = gridLine = - gridLineWidth ? - renderer.path(gridLinePath) - .attr(attribs).add(axis.gridGroup) : - null; - } - - // If the parameter 'old' is set, the current call will be followed - // by another call, therefore do not do any animations this time - if (!old && gridLine && gridLinePath) { - gridLine[tick.isNew ? 'attr' : 'animate']({ - d: gridLinePath, - opacity: opacity - }); - } - } - - // create the tick mark - if (tickWidth && tickLength) { - - // negate the length - if (tickPosition === 'inside') { - tickLength = -tickLength; - } - if (axis.opposite) { - tickLength = -tickLength; - } - - markPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer); - if (mark) { // updating - mark.animate({ - d: markPath, - opacity: opacity - }); - } else { // first time - tick.mark = renderer.path( - markPath - ).attr({ - stroke: tickColor, - 'stroke-width': tickWidth, - opacity: opacity - }).add(axis.axisGroup); - } - } - - // the label is created on init - now move it into place - if (label && !isNaN(x)) { - label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - - // Apply show first and show last. If the tick is both first and last, it is - // a single centered tick, in which case we show the label anyway (#2100). - if ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) || - (tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) { - show = false; - - // Handle label overflow and show or hide accordingly - } else if (horiz && !axis.isRadial && !labelOptions.step && !labelOptions.rotation && !old && opacity !== 0) { - tick.handleOverflow(xy); - } - - // apply step - if (step && index % step) { - // show those indices dividable by step - show = false; - } - - // Set the new position, and show or hide - if (show && !isNaN(xy.y)) { - xy.opacity = opacity; - label[tick.isNew ? 'attr' : 'animate'](xy); - tick.isNew = false; - } else { - label.attr('y', -9999); // #1338 - } - } - }, - - /** - * Destructor for the tick prototype - */ - destroy: function () { - destroyObjectProperties(this, this.axis); - } - }; - - /** - * The object wrapper for plot lines and plot bands - * @param {Object} options - */ - Highcharts.PlotLineOrBand = function (axis, options) { - this.axis = axis; - - if (options) { - this.options = options; - this.id = options.id; - } - }; - - Highcharts.PlotLineOrBand.prototype = { - - /** - * Render the plot line or plot band. If it is already existing, - * move it. - */ - render: function () { - var plotLine = this, - axis = plotLine.axis, - horiz = axis.horiz, - options = plotLine.options, - optionsLabel = options.label, - label = plotLine.label, - width = options.width, - to = options.to, - from = options.from, - isBand = defined(from) && defined(to), - value = options.value, - dashStyle = options.dashStyle, - svgElem = plotLine.svgElem, - path = [], - addEvent, - eventType, - xs, - ys, - x, - y, - color = options.color, - zIndex = options.zIndex, - events = options.events, - attribs = {}, - renderer = axis.chart.renderer; - - // logarithmic conversion - if (axis.isLog) { - from = log2lin(from); - to = log2lin(to); - value = log2lin(value); - } - - // plot line - if (width) { - path = axis.getPlotLinePath(value, width); - attribs = { - stroke: color, - 'stroke-width': width - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - } else if (isBand) { // plot band - - path = axis.getPlotBandPath(from, to, options); - if (color) { - attribs.fill = color; - } - if (options.borderWidth) { - attribs.stroke = options.borderColor; - attribs['stroke-width'] = options.borderWidth; - } - } else { - return; - } - // zIndex - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - - // common for lines and bands - if (svgElem) { - if (path) { - svgElem.show(); - svgElem.animate({ d: path }); - } else { - svgElem.hide(); - if (label) { - plotLine.label = label = label.destroy(); - } - } - } else if (path && path.length) { - plotLine.svgElem = svgElem = renderer.path(path) - .attr(attribs).add(); - - // events - if (events) { - addEvent = function (eventType) { - svgElem.on(eventType, function (e) { - events[eventType].apply(plotLine, [e]); - }); - }; - for (eventType in events) { - addEvent(eventType); - } - } - } - - // the plot band/line label - if (optionsLabel && defined(optionsLabel.text) && path && path.length && - axis.width > 0 && axis.height > 0 && !path.flat) { - // apply defaults - optionsLabel = merge({ - align: horiz && isBand && 'center', - x: horiz ? !isBand && 4 : 10, - verticalAlign: !horiz && isBand && 'middle', - y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, - rotation: horiz && !isBand && 90 - }, optionsLabel); - - // add the SVG element - if (!label) { - attribs = { - align: optionsLabel.textAlign || optionsLabel.align, - rotation: optionsLabel.rotation - }; - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - plotLine.label = label = renderer.text( - optionsLabel.text, - 0, - 0, - optionsLabel.useHTML - ) - .attr(attribs) - .css(optionsLabel.style) - .add(); - } - - // get the bounding box and align the label - // #3000 changed to better handle choice between plotband or plotline - xs = [path[1], path[4], (isBand ? path[6] : path[1])]; - ys = [path[2], path[5], (isBand ? path[7] : path[2])]; - x = arrayMin(xs); - y = arrayMin(ys); - - label.align(optionsLabel, false, { - x: x, - y: y, - width: arrayMax(xs) - x, - height: arrayMax(ys) - y - }); - label.show(); - - } else if (label) { // move out of sight - label.hide(); - } - - // chainable - return plotLine; - }, - - /** - * Remove the plot line or band - */ - destroy: function () { - // remove it from the lookup - erase(this.axis.plotLinesAndBands, this); - - delete this.axis; - destroyObjectProperties(this); - } - }; - - /** - * Object with members for extending the Axis prototype - */ - - AxisPlotLineOrBandExtension = { - - /** - * Create the path for a plot band - */ - getPlotBandPath: function (from, to) { - var toPath = this.getPlotLinePath(to, null, null, true), - path = this.getPlotLinePath(from, null, null, true); - - if (path && toPath) { - - // Flat paths don't need labels (#3836) - path.flat = path.toString() === toPath.toString(); - - path.push( - toPath[4], - toPath[5], - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }, - - addPlotBand: function (options) { - return this.addPlotBandOrLine(options, 'plotBands'); - }, - - addPlotLine: function (options) { - return this.addPlotBandOrLine(options, 'plotLines'); - }, - - /** - * Add a plot band or plot line after render time - * - * @param options {Object} The plotBand or plotLine configuration object - */ - addPlotBandOrLine: function (options, coll) { - var obj = new Highcharts.PlotLineOrBand(this, options).render(), - userOptions = this.userOptions; - - if (obj) { // #2189 - // Add it to the user options for exporting and Axis.update - if (coll) { - userOptions[coll] = userOptions[coll] || []; - userOptions[coll].push(options); - } - this.plotLinesAndBands.push(obj); - } - - return obj; - }, - - /** - * Remove a plot band or plot line from the chart by id - * @param {Object} id - */ - removePlotBandOrLine: function (id) { - var plotLinesAndBands = this.plotLinesAndBands, - options = this.options, - userOptions = this.userOptions, - i = plotLinesAndBands.length; - while (i--) { - if (plotLinesAndBands[i].id === id) { - plotLinesAndBands[i].destroy(); - } - } - each([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) { - i = arr.length; - while (i--) { - if (arr[i].id === id) { - erase(arr, arr[i]); - } - } - }); - } - }; - - /** - * Create a new axis object - * @param {Object} chart - * @param {Object} options - */ - var Axis = Highcharts.Axis = function () { - this.init.apply(this, arguments); - }; - - Axis.prototype = { - - /** - * Default options for the X axis - the Y axis has extended defaults - */ - defaultOptions: { - // allowDecimals: null, - // alternateGridColor: null, - // categories: [], - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: '%b \'%y', - year: '%Y' - }, - endOnTick: false, - gridLineColor: '#D8D8D8', - // gridLineDashStyle: 'solid', - // gridLineWidth: 0, - // reversed: false, - - labels: { - enabled: true, - // rotation: 0, - // align: 'center', - // step: null, - style: { - color: '#606060', - cursor: 'default', - fontSize: '11px' - }, - x: 0, - y: 15 - /*formatter: function () { - return this.value; - },*/ - }, - lineColor: '#C0D0E0', - lineWidth: 1, - //linkedTo: null, - //max: undefined, - //min: undefined, - minPadding: 0.01, - maxPadding: 0.01, - //minRange: null, - minorGridLineColor: '#E0E0E0', - // minorGridLineDashStyle: null, - minorGridLineWidth: 1, - minorTickColor: '#A0A0A0', - //minorTickInterval: null, - minorTickLength: 2, - minorTickPosition: 'outside', // inside or outside - //minorTickWidth: 0, - //opposite: false, - //offset: 0, - //plotBands: [{ - // events: {}, - // zIndex: 1, - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //plotLines: [{ - // events: {} - // dashStyle: {} - // zIndex: - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //reversed: false, - // showFirstLabel: true, - // showLastLabel: true, - startOfWeek: 1, - startOnTick: false, - tickColor: '#C0D0E0', - //tickInterval: null, - tickLength: 10, - tickmarkPlacement: 'between', // on or between - tickPixelInterval: 100, - tickPosition: 'outside', - //tickWidth: 1, - title: { - //text: null, - align: 'middle', // low, middle or high - //margin: 0 for horizontal, 10 for vertical axes, - //rotation: 0, - //side: 'outside', - style: { - color: '#707070' - } - //x: 0, - //y: 0 - }, - type: 'linear' // linear, logarithmic or datetime - //visible: true - }, - - /** - * This options set extends the defaultOptions for Y axes - */ - defaultYAxisOptions: { - endOnTick: true, - gridLineWidth: 1, - tickPixelInterval: 72, - showLastLabel: true, - labels: { - x: -8, - y: 3 - }, - lineWidth: 0, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: true, - //tickWidth: 0, - title: { - rotation: 270, - text: 'Values' - }, - stackLabels: { - enabled: false, - //align: dynamic, - //y: dynamic, - //x: dynamic, - //verticalAlign: dynamic, - //textAlign: dynamic, - //rotation: 0, - formatter: function () { - return Highcharts.numberFormat(this.total, -1); - }, - style: merge(defaultPlotOptions.line.dataLabels.style, { color: '#000000' }) - } - }, - - /** - * These options extend the defaultOptions for left axes - */ - defaultLeftAxisOptions: { - labels: { - x: -15, - y: null - }, - title: { - rotation: 270 - } - }, - - /** - * These options extend the defaultOptions for right axes - */ - defaultRightAxisOptions: { - labels: { - x: 15, - y: null - }, - title: { - rotation: 90 - } - }, - - /** - * These options extend the defaultOptions for bottom axes - */ - defaultBottomAxisOptions: { - labels: { - autoRotation: [-45], - x: 0, - y: null // based on font size - // overflow: undefined, - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - /** - * These options extend the defaultOptions for top axes - */ - defaultTopAxisOptions: { - labels: { - autoRotation: [-45], - x: 0, - y: -15 - // overflow: undefined - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - - /** - * Initialize the axis - */ - init: function (chart, userOptions) { - - - var isXAxis = userOptions.isX, - axis = this; - - axis.chart = chart; - - // Flag, is the axis horizontal - axis.horiz = chart.inverted ? !isXAxis : isXAxis; - - // Flag, isXAxis - axis.isXAxis = isXAxis; - axis.coll = isXAxis ? 'xAxis' : 'yAxis'; - - axis.opposite = userOptions.opposite; // needed in setOptions - axis.side = userOptions.side || (axis.horiz ? - (axis.opposite ? 0 : 2) : // top : bottom - (axis.opposite ? 1 : 3)); // right : left - - axis.setOptions(userOptions); - - - var options = this.options, - type = options.type, - isDatetimeAxis = type === 'datetime'; - - axis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format - - - // Flag, stagger lines or not - axis.userOptions = userOptions; - - //axis.axisTitleMargin = UNDEFINED,// = options.title.margin, - axis.minPixelPadding = 0; - - axis.reversed = options.reversed; - axis.visible = options.visible !== false; - axis.zoomEnabled = options.zoomEnabled !== false; - - // Initial categories - axis.categories = options.categories || type === 'category'; - axis.names = axis.names || []; // Preserve on update (#3830) - - // Elements - //axis.axisGroup = UNDEFINED; - //axis.gridGroup = UNDEFINED; - //axis.axisTitle = UNDEFINED; - //axis.axisLine = UNDEFINED; - - // Shorthand types - axis.isLog = type === 'logarithmic'; - axis.isDatetimeAxis = isDatetimeAxis; - - // Flag, if axis is linked to another axis - axis.isLinked = defined(options.linkedTo); - // Linked axis. - //axis.linkedParent = UNDEFINED; - - // Tick positions - //axis.tickPositions = UNDEFINED; // array containing predefined positions - // Tick intervals - //axis.tickInterval = UNDEFINED; - //axis.minorTickInterval = UNDEFINED; - - - // Major ticks - axis.ticks = {}; - axis.labelEdge = []; - // Minor ticks - axis.minorTicks = {}; - - // List of plotLines/Bands - axis.plotLinesAndBands = []; - - // Alternate bands - axis.alternateBands = {}; - - // Axis metrics - //axis.left = UNDEFINED; - //axis.top = UNDEFINED; - //axis.width = UNDEFINED; - //axis.height = UNDEFINED; - //axis.bottom = UNDEFINED; - //axis.right = UNDEFINED; - //axis.transA = UNDEFINED; - //axis.transB = UNDEFINED; - //axis.oldTransA = UNDEFINED; - axis.len = 0; - //axis.oldMin = UNDEFINED; - //axis.oldMax = UNDEFINED; - //axis.oldUserMin = UNDEFINED; - //axis.oldUserMax = UNDEFINED; - //axis.oldAxisLength = UNDEFINED; - axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; - axis.range = options.range; - axis.offset = options.offset || 0; - - - // Dictionary for stacks - axis.stacks = {}; - axis.oldStacks = {}; - axis.stacksTouched = 0; - - // Min and max in the data - //axis.dataMin = UNDEFINED, - //axis.dataMax = UNDEFINED, - - // The axis range - axis.max = null; - axis.min = null; - - // User set min and max - //axis.userMin = UNDEFINED, - //axis.userMax = UNDEFINED, - - // Crosshair options - axis.crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], false); - // Run Axis - - var eventType, - events = axis.options.events; - - // Register - if (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update() - if (isXAxis && !this.isColorAxis) { // #2713 - chart.axes.splice(chart.xAxis.length, 0, axis); - } else { - chart.axes.push(axis); - } - - chart[axis.coll].push(axis); - } - - axis.series = axis.series || []; // populated by Series - - // inverted charts have reversed xAxes as default - if (chart.inverted && isXAxis && axis.reversed === UNDEFINED) { - axis.reversed = true; - } - - axis.removePlotBand = axis.removePlotBandOrLine; - axis.removePlotLine = axis.removePlotBandOrLine; - - - // register event listeners - for (eventType in events) { - addEvent(axis, eventType, events[eventType]); - } - - // extend logarithmic axis - if (axis.isLog) { - axis.val2lin = log2lin; - axis.lin2val = lin2log; - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - this.options = merge( - this.defaultOptions, - this.isXAxis ? {} : this.defaultYAxisOptions, - [this.defaultTopAxisOptions, this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], - merge( - defaultOptions[this.coll], // if set in setOptions (#1053) - userOptions - ) - ); - }, - - /** - * The default label formatter. The context is a special config object for the label. - */ - defaultLabelFormatter: function () { - var axis = this.axis, - value = this.value, - categories = axis.categories, - dateTimeLabelFormat = this.dateTimeLabelFormat, - numericSymbols = defaultOptions.lang.numericSymbols, - i = numericSymbols && numericSymbols.length, - multi, - ret, - formatOption = axis.options.labels.format, - - // make sure the same symbol is added for all labels on a linear axis - numericSymbolDetector = axis.isLog ? value : axis.tickInterval; - - if (formatOption) { - ret = format(formatOption, this); - - } else if (categories) { - ret = value; - - } else if (dateTimeLabelFormat) { // datetime axis - ret = dateFormat(dateTimeLabelFormat, value); - - } else if (i && numericSymbolDetector >= 1000) { - // Decide whether we should add a numeric symbol like k (thousands) or M (millions). - // If we are to enable this in tooltip or other places as well, we can move this - // logic to the numberFormatter and enable it by a parameter. - while (i-- && ret === UNDEFINED) { - multi = Math.pow(1000, i + 1); - if (numericSymbolDetector >= multi && (value * 10) % multi === 0 && numericSymbols[i] !== null) { - ret = Highcharts.numberFormat(value / multi, -1) + numericSymbols[i]; - } - } - } - - if (ret === UNDEFINED) { - if (mathAbs(value) >= 10000) { // add thousands separators - ret = Highcharts.numberFormat(value, -1); - - } else { // small numbers - ret = Highcharts.numberFormat(value, -1, UNDEFINED, ''); // #2466 - } - } - - return ret; - }, - - /** - * Get the minimum and maximum for the series of each axis - */ - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // Reset properties in case we're redrawing (#3353) - axis.dataMin = axis.dataMax = axis.threshold = null; - axis.softThreshold = !axis.isXAxis; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - xData, - threshold = seriesOptions.threshold, - seriesDataMin, - seriesDataMax; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - // Get dataMin and dataMax for X axes - if (axis.isXAxis) { - xData = series.xData; - if (xData.length) { - axis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData)); - axis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData)); - } - - // Get dataMin and dataMax for Y axes, as well as handle stacking and processed data - } else { - - // Get this particular series extremes - series.getExtremes(); - seriesDataMax = series.dataMax; - seriesDataMin = series.dataMin; - - // Get the dataMin and dataMax so far. If percentage is used, the min and max are - // always 0 and 100. If seriesDataMin and seriesDataMax is null, then series - // doesn't have active y data, we continue with nulls - if (defined(seriesDataMin) && defined(seriesDataMax)) { - axis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin); - axis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax); - } - - // Adjust to threshold - if (defined(threshold)) { - axis.threshold = threshold; - } - // If any series has a hard threshold, it takes precedence - if (!seriesOptions.softThreshold || axis.isLog) { - axis.softThreshold = false; - } - } - } - }); - }, - - /** - * Translate from axis value to pixel position on the chart, or back - * - */ - translate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) { - var axis = this.linkedParent || this, // #1417 - sign = 1, - cvsOffset = 0, - localA = old ? axis.oldTransA : axis.transA, - localMin = old ? axis.oldMin : axis.min, - returnValue, - minPixelPadding = axis.minPixelPadding, - doPostTranslate = (axis.doPostTranslate || (axis.isLog && handleLog)) && axis.lin2val; - - if (!localA) { - localA = axis.transA; - } - - // In vertical axes, the canvas coordinates start from 0 at the top like in - // SVG. - if (cvsCoord) { - sign *= -1; // canvas coordinates inverts the value - cvsOffset = axis.len; - } - - // Handle reversed axis - if (axis.reversed) { - sign *= -1; - cvsOffset -= sign * (axis.sector || axis.len); - } - - // From pixels to value - if (backwards) { // reverse translation - - val = val * sign + cvsOffset; - val -= minPixelPadding; - returnValue = val / localA + localMin; // from chart pixel to value - if (doPostTranslate) { // log and ordinal axes - returnValue = axis.lin2val(returnValue); - } - - // From value to pixels - } else { - if (doPostTranslate) { // log and ordinal axes - val = axis.val2lin(val); - } - if (pointPlacement === 'between') { - pointPlacement = 0.5; - } - returnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) + - (isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0); - } - - return returnValue; - }, - - /** - * Utility method to translate an axis value to pixel position. - * @param {Number} value A value in terms of axis units - * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart - * or just the axis/pane itself. - */ - toPixels: function (value, paneCoordinates) { - return this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos); - }, - - /* - * Utility method to translate a pixel position in to an axis value - * @param {Number} pixel The pixel value coordinate - * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the - * axis/pane itself. - */ - toValue: function (pixel, paneCoordinates) { - return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true); - }, - - /** - * Create the path for a plot line that goes from the given value on - * this axis, across the plot to the opposite side - * @param {Number} value - * @param {Number} lineWidth Used for calculation crisp line - * @param {Number] old Use old coordinates (for resizing and rescaling) - */ - getPlotLinePath: function (value, lineWidth, old, force, translatedValue) { - var axis = this, - chart = axis.chart, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight, - cWidth = (old && chart.oldChartWidth) || chart.chartWidth, - skip, - transB = axis.transB, - /** - * Check if x is between a and b. If not, either move to a/b or skip, - * depending on the force parameter. - */ - between = function (x, a, b) { - if (x < a || x > b) { - if (force) { - x = mathMin(mathMax(a, x), b); - } else { - skip = true; - } - } - return x; - }; - - translatedValue = pick(translatedValue, axis.translate(value, null, null, old)); - x1 = x2 = mathRound(translatedValue + transB); - y1 = y2 = mathRound(cHeight - translatedValue - transB); - - if (isNaN(translatedValue)) { // no min or max - skip = true; - - } else if (axis.horiz) { - y1 = axisTop; - y2 = cHeight - axis.bottom; - x1 = x2 = between(x1, axisLeft, axisLeft + axis.width); - } else { - x1 = axisLeft; - x2 = cWidth - axis.right; - y1 = y2 = between(y1, axisTop, axisTop + axis.height); - } - return skip && !force ? - null : - chart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 1); - }, - - /** - * Set the tick positions of a linear axis to round values like whole tens or every five. - */ - getLinearTickPositions: function (tickInterval, min, max) { - var pos, - lastPos, - roundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval), - roundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval), - tickPositions = []; - - // For single points, add a tick regardless of the relative position (#2662) - if (min === max && isNumber(min)) { - return [min]; - } - - // Populate the intermediate values - pos = roundedMin; - while (pos <= roundedMax) { - - // Place the tick on the rounded value - tickPositions.push(pos); - - // Always add the raw tickInterval, not the corrected one. - pos = correctFloat(pos + tickInterval); - - // If the interval is not big enough in the current min - max range to actually increase - // the loop variable, we need to break out to prevent endless loop. Issue #619 - if (pos === lastPos) { - break; - } - - // Record the last value - lastPos = pos; - } - return tickPositions; - }, - - /** - * Return the minor tick positions. For logarithmic axes, reuse the same logic - * as for major ticks. - */ - getMinorTickPositions: function () { - var axis = this, - options = axis.options, - tickPositions = axis.tickPositions, - minorTickInterval = axis.minorTickInterval, - minorTickPositions = [], - pos, - i, - pointRangePadding = axis.pointRangePadding || 0, - min = axis.min - pointRangePadding, // #1498 - max = axis.max + pointRangePadding, // #1498 - range = max - min, - len; - - // If minor ticks get too dense, they are hard to read, and may cause long running script. So we don't draw them. - if (range && range / minorTickInterval < axis.len / 3) { // #3875 - - if (axis.isLog) { - len = tickPositions.length; - for (i = 1; i < len; i++) { - minorTickPositions = minorTickPositions.concat( - axis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true) - ); - } - } else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314 - minorTickPositions = minorTickPositions.concat( - axis.getTimeTicks( - axis.normalizeTimeTickInterval(minorTickInterval), - min, - max, - options.startOfWeek - ) - ); - } else { - for (pos = min + (tickPositions[0] - min) % minorTickInterval; pos <= max; pos += minorTickInterval) { - minorTickPositions.push(pos); - } - } - } - - if (minorTickPositions.length !== 0) { // don't change the extremes, when there is no minor ticks - axis.trimTicks(minorTickPositions, options.startOnTick, options.endOnTick); // #3652 #3743 #1498 - } - return minorTickPositions; - }, - - /** - * Adjust the min and max for the minimum range. Keep in mind that the series data is - * not yet processed, so we don't have information on data cropping and grouping, or - * updated axis.pointRange or series.pointRange. The data can't be processed until - * we have finally established min and max. - */ - adjustForMinRange: function () { - var axis = this, - options = axis.options, - min = axis.min, - max = axis.max, - zoomOffset, - spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange, - closestDataRange, - i, - distance, - xData, - loopLength, - minArgs, - maxArgs, - minRange; - - // Set the automatic minimum range based on the closest point distance - if (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) { - - if (defined(options.min) || defined(options.max)) { - axis.minRange = null; // don't do this again - - } else { - - // Find the closest distance between raw data points, as opposed to - // closestPointRange that applies to processed points (cropped and grouped) - each(axis.series, function (series) { - xData = series.xData; - loopLength = series.xIncrement ? 1 : xData.length - 1; - for (i = loopLength; i > 0; i--) { - distance = xData[i] - xData[i - 1]; - if (closestDataRange === UNDEFINED || distance < closestDataRange) { - closestDataRange = distance; - } - } - }); - axis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin); - } - } - - // if minRange is exceeded, adjust - if (max - min < axis.minRange) { - minRange = axis.minRange; - zoomOffset = (minRange - max + min) / 2; - - // if min and max options have been set, don't go beyond it - minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; - if (spaceAvailable) { // if space is available, stay within the data range - minArgs[2] = axis.dataMin; - } - min = arrayMax(minArgs); - - maxArgs = [min + minRange, pick(options.max, min + minRange)]; - if (spaceAvailable) { // if space is availabe, stay within the data range - maxArgs[2] = axis.dataMax; - } - - max = arrayMin(maxArgs); - - // now if the max is adjusted, adjust the min back - if (max - min < minRange) { - minArgs[0] = max - minRange; - minArgs[1] = pick(options.min, max - minRange); - min = arrayMax(minArgs); - } - } - - // Record modified extremes - axis.min = min; - axis.max = max; - }, - - /** - * Update translation information - */ - setAxisTranslation: function (saveOld) { - var axis = this, - range = axis.max - axis.min, - pointRange = axis.axisPointRange || 0, - closestPointRange, - minPointOffset = 0, - pointRangePadding = 0, - linkedParent = axis.linkedParent, - ordinalCorrection, - hasCategories = !!axis.categories, - transA = axis.transA, - isXAxis = axis.isXAxis; - - // Adjust translation for padding. Y axis with categories need to go through the same (#1784). - if (isXAxis || hasCategories || pointRange) { - if (linkedParent) { - minPointOffset = linkedParent.minPointOffset; - pointRangePadding = linkedParent.pointRangePadding; - - } else { - // Find the closestPointRange across all series - each(axis.series, function (series) { - var seriesClosest = series.closestPointRange; - if (!series.noSharedTooltip && defined(seriesClosest)) { - closestPointRange = defined(closestPointRange) ? - mathMin(closestPointRange, seriesClosest) : - seriesClosest; - } - }); - - each(axis.series, function (series) { - var seriesPointRange = hasCategories ? - 1 : - (isXAxis ? - pick(series.options.pointRange, closestPointRange, 0) : - (axis.axisPointRange || 0)), // #2806 - pointPlacement = series.options.pointPlacement; - - pointRange = mathMax(pointRange, seriesPointRange); - - if (!axis.single) { - // minPointOffset is the value padding to the left of the axis in order to make - // room for points with a pointRange, typically columns. When the pointPlacement option - // is 'between' or 'on', this padding does not apply. - minPointOffset = mathMax( - minPointOffset, - isString(pointPlacement) ? 0 : seriesPointRange / 2 - ); - - // Determine the total padding needed to the length of the axis to make room for the - // pointRange. If the series' pointPlacement is 'on', no padding is added. - pointRangePadding = mathMax( - pointRangePadding, - pointPlacement === 'on' ? 0 : seriesPointRange - ); - } - }); - } - - // Record minPointOffset and pointRangePadding - ordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853 - axis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection; - axis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection; - - // pointRange means the width reserved for each point, like in a column chart - axis.pointRange = mathMin(pointRange, range); - - // closestPointRange means the closest distance between points. In columns - // it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange - // is some other value - if (isXAxis) { - axis.closestPointRange = closestPointRange; - } - } - - // Secondary values - if (saveOld) { - axis.oldTransA = transA; - } - axis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1); - axis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend - axis.minPixelPadding = transA * minPointOffset; - }, - - minFromRange: function () { - return this.max - this.range; - }, - - /** - * Set the tick positions to round values and optionally extend the extremes - * to the nearest tick - */ - setTickInterval: function (secondPass) { - var axis = this, - chart = axis.chart, - options = axis.options, - isLog = axis.isLog, - isDatetimeAxis = axis.isDatetimeAxis, - isXAxis = axis.isXAxis, - isLinked = axis.isLinked, - maxPadding = options.maxPadding, - minPadding = options.minPadding, - length, - linkedParentExtremes, - tickIntervalOption = options.tickInterval, - minTickInterval, - tickPixelIntervalOption = options.tickPixelInterval, - categories = axis.categories, - threshold = axis.threshold, - softThreshold = axis.softThreshold, - thresholdMin, - thresholdMax, - hardMin, - hardMax; - - if (!isDatetimeAxis && !categories && !isLinked) { - this.getTickAmount(); - } - - // Min or max set either by zooming/setExtremes or initial options - hardMin = pick(axis.userMin, options.min); - hardMax = pick(axis.userMax, options.max); - - // Linked axis gets the extremes from the parent axis - if (isLinked) { - axis.linkedParent = chart[axis.coll][options.linkedTo]; - linkedParentExtremes = axis.linkedParent.getExtremes(); - axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin); - axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax); - if (options.type !== axis.linkedParent.options.type) { - error(11, 1); // Can't link axes of different type - } - - // Initial min and max from the extreme data values - } else { - - // Adjust to hard threshold - if (!softThreshold && defined(threshold)) { - if (axis.dataMin >= threshold) { - thresholdMin = threshold; - minPadding = 0; - } else if (axis.dataMax <= threshold) { - thresholdMax = threshold; - maxPadding = 0; - } - } - - axis.min = pick(hardMin, thresholdMin, axis.dataMin); - axis.max = pick(hardMax, thresholdMax, axis.dataMax); - - } - - if (isLog) { - if (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978 - error(10, 1); // Can't plot negative values on log axis - } - // The correctFloat cures #934, float errors on full tens. But it - // was too aggressive for #4360 because of conversion back to lin, - // therefore use precision 15. - axis.min = correctFloat(log2lin(axis.min), 15); - axis.max = correctFloat(log2lin(axis.max), 15); - } - - // handle zoomed range - if (axis.range && defined(axis.max)) { - axis.userMin = axis.min = hardMin = mathMax(axis.min, axis.minFromRange()); // #618 - axis.userMax = hardMax = axis.max; - - axis.range = null; // don't use it when running setExtremes - } - - // Hook for adjusting this.min and this.max. Used by bubble series. - if (axis.beforePadding) { - axis.beforePadding(); - } - - // adjust min and max for the minimum range - axis.adjustForMinRange(); - - // Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding - // into account, we do this after computing tick interval (#1337). - if (!categories && !axis.axisPointRange && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) { - length = axis.max - axis.min; - if (length) { - if (!defined(hardMin) && minPadding) { - axis.min -= length * minPadding; - } - if (!defined(hardMax) && maxPadding) { - axis.max += length * maxPadding; - } - } - } - - // Stay within floor and ceiling - if (isNumber(options.floor)) { - axis.min = mathMax(axis.min, options.floor); - } - if (isNumber(options.ceiling)) { - axis.max = mathMin(axis.max, options.ceiling); - } - - // When the threshold is soft, adjust the extreme value only if - // the data extreme and the padded extreme land on either side of the threshold. For example, - // a series of [0, 1, 2, 3] would make the yAxis add a tick for -1 because of the - // default minPadding and startOnTick options. This is prevented by the softThreshold - // option. - if (softThreshold && defined(axis.dataMin)) { - threshold = threshold || 0; - if (!defined(hardMin) && axis.min < threshold && axis.dataMin >= threshold) { - axis.min = threshold; - } else if (!defined(hardMax) && axis.max > threshold && axis.dataMax <= threshold) { - axis.max = threshold; - } - } - - - // get tickInterval - if (axis.min === axis.max || axis.min === undefined || axis.max === undefined) { - axis.tickInterval = 1; - } else if (isLinked && !tickIntervalOption && - tickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) { - axis.tickInterval = tickIntervalOption = axis.linkedParent.tickInterval; - } else { - axis.tickInterval = pick( - tickIntervalOption, - this.tickAmount ? ((axis.max - axis.min) / mathMax(this.tickAmount - 1, 1)) : undefined, - categories ? // for categoried axis, 1 is default, for linear axis use tickPix - 1 : - // don't let it be more than the data range - (axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption) - ); - } - - // Now we're finished detecting min and max, crop and group series data. This - // is in turn needed in order to find tick positions in ordinal axes. - if (isXAxis && !secondPass) { - each(axis.series, function (series) { - series.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax); - }); - } - - // set the translation factor used in translate function - axis.setAxisTranslation(true); - - // hook for ordinal axes and radial axes - if (axis.beforeSetTickPositions) { - axis.beforeSetTickPositions(); - } - - // hook for extensions, used in Highstock ordinal axes - if (axis.postProcessTickInterval) { - axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); - } - - // In column-like charts, don't cramp in more ticks than there are points (#1943, #4184) - if (axis.pointRange && !tickIntervalOption) { - axis.tickInterval = mathMax(axis.pointRange, axis.tickInterval); - } - - // Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined. - minTickInterval = pick(options.minTickInterval, axis.isDatetimeAxis && axis.closestPointRange); - if (!tickIntervalOption && axis.tickInterval < minTickInterval) { - axis.tickInterval = minTickInterval; - } - - // for linear axes, get magnitude and normalize the interval - if (!isDatetimeAxis && !isLog && !tickIntervalOption) { - axis.tickInterval = normalizeTickInterval( - axis.tickInterval, - null, - getMagnitude(axis.tickInterval), - // If the tick interval is between 0.5 and 5 and the axis max is in the order of - // thousands, chances are we are dealing with years. Don't allow decimals. #3363. - pick(options.allowDecimals, !(axis.tickInterval > 0.5 && axis.tickInterval < 5 && axis.max > 1000 && axis.max < 9999)), - !!this.tickAmount - ); - } - - // Prevent ticks from getting so close that we can't draw the labels - if (!this.tickAmount && this.len) { // Color axis with disabled legend has no length - axis.tickInterval = axis.unsquish(); - } - - this.setTickPositions(); - }, - - /** - * Now we have computed the normalized tickInterval, get the tick positions - */ - setTickPositions: function () { - - var options = this.options, - tickPositions, - tickPositionsOption = options.tickPositions, - tickPositioner = options.tickPositioner, - startOnTick = options.startOnTick, - endOnTick = options.endOnTick, - single; - - // Set the tickmarkOffset - this.tickmarkOffset = (this.categories && options.tickmarkPlacement === 'between' && - this.tickInterval === 1) ? 0.5 : 0; // #3202 - - - // get minorTickInterval - this.minorTickInterval = options.minorTickInterval === 'auto' && this.tickInterval ? - this.tickInterval / 5 : options.minorTickInterval; - - // Find the tick positions - this.tickPositions = tickPositions = tickPositionsOption && tickPositionsOption.slice(); // Work on a copy (#1565) - if (!tickPositions) { - - if (this.isDatetimeAxis) { - tickPositions = this.getTimeTicks( - this.normalizeTimeTickInterval(this.tickInterval, options.units), - this.min, - this.max, - options.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - true - ); - } else if (this.isLog) { - tickPositions = this.getLogTickPositions(this.tickInterval, this.min, this.max); - } else { - tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max); - } - - // Too dense ticks, keep only the first and last (#4477) - if (tickPositions.length > this.len) { - tickPositions = [tickPositions[0], tickPositions.pop()]; - } - - this.tickPositions = tickPositions; - - // Run the tick positioner callback, that allows modifying auto tick positions. - if (tickPositioner) { - tickPositioner = tickPositioner.apply(this, [this.min, this.max]); - if (tickPositioner) { - this.tickPositions = tickPositions = tickPositioner; - } - } - - } - - if (!this.isLinked) { - - // reset min/max or remove extremes based on start/end on tick - this.trimTicks(tickPositions, startOnTick, endOnTick); - - // When there is only one point, or all points have the same value on this axis, then min - // and max are equal and tickPositions.length is 0 or 1. In this case, add some padding - // in order to center the point, but leave it with one tick. #1337. - if (this.min === this.max && defined(this.min) && !this.tickAmount) { - // Substract half a unit (#2619, #2846, #2515, #3390) - single = true; - this.min -= 0.5; - this.max += 0.5; - } - this.single = single; - - if (!tickPositionsOption && !tickPositioner) { - this.adjustTickAmount(); - } - } - }, - - /** - * Handle startOnTick and endOnTick by either adapting to padding min/max or rounded min/max - */ - trimTicks: function (tickPositions, startOnTick, endOnTick) { - var roundedMin = tickPositions[0], - roundedMax = tickPositions[tickPositions.length - 1], - minPointOffset = this.minPointOffset || 0; - - if (startOnTick) { - this.min = roundedMin; - } else if (this.min - minPointOffset > roundedMin) { - tickPositions.shift(); - } - - if (endOnTick) { - this.max = roundedMax; - } else if (this.max + minPointOffset < roundedMax) { - tickPositions.pop(); - } - - // If no tick are left, set one tick in the middle (#3195) - if (tickPositions.length === 0 && defined(roundedMin)) { - tickPositions.push((roundedMax + roundedMin) / 2); - } - }, - - /** - * Check if there are multiple axes in the same pane - * @returns {Boolean} There are other axes - */ - alignToOthers: function () { - var others = {}, // Whether there is another axis to pair with this one - hasOther, - options = this.options; - - if (this.chart.options.chart.alignTicks !== false && options.alignTicks !== false) { - each(this.chart[this.coll], function (axis) { - var otherOptions = axis.options, - horiz = axis.horiz, - key = [ - horiz ? otherOptions.left : otherOptions.top, - otherOptions.width, - otherOptions.height, - otherOptions.pane - ].join(','); - - - if (axis.series.length) { // #4442 - if (others[key]) { - hasOther = true; // #4201 - } else { - others[key] = 1; - } - } - }); - } - return hasOther; - }, - - /** - * Set the max ticks of either the x and y axis collection - */ - getTickAmount: function () { - var options = this.options, - tickAmount = options.tickAmount, - tickPixelInterval = options.tickPixelInterval; - - if (!defined(options.tickInterval) && this.len < tickPixelInterval && !this.isRadial && - !this.isLog && options.startOnTick && options.endOnTick) { - tickAmount = 2; - } - - if (!tickAmount && this.alignToOthers()) { - // Add 1 because 4 tick intervals require 5 ticks (including first and last) - tickAmount = mathCeil(this.len / tickPixelInterval) + 1; - } - - // For tick amounts of 2 and 3, compute five ticks and remove the intermediate ones. This - // prevents the axis from adding ticks that are too far away from the data extremes. - if (tickAmount < 4) { - this.finalTickAmt = tickAmount; - tickAmount = 5; - } - - this.tickAmount = tickAmount; - }, - - /** - * When using multiple axes, adjust the number of ticks to match the highest - * number of ticks in that group - */ - adjustTickAmount: function () { - var tickInterval = this.tickInterval, - tickPositions = this.tickPositions, - tickAmount = this.tickAmount, - finalTickAmt = this.finalTickAmt, - currentTickAmount = tickPositions && tickPositions.length, - i, - len; - - if (currentTickAmount < tickAmount) { - while (tickPositions.length < tickAmount) { - tickPositions.push(correctFloat( - tickPositions[tickPositions.length - 1] + tickInterval - )); - } - this.transA *= (currentTickAmount - 1) / (tickAmount - 1); - this.max = tickPositions[tickPositions.length - 1]; - - // We have too many ticks, run second pass to try to reduce ticks - } else if (currentTickAmount > tickAmount) { - this.tickInterval *= 2; - this.setTickPositions(); - } - - // The finalTickAmt property is set in getTickAmount - if (defined(finalTickAmt)) { - i = len = tickPositions.length; - while (i--) { - if ( - (finalTickAmt === 3 && i % 2 === 1) || // Remove every other tick - (finalTickAmt <= 2 && i > 0 && i < len - 1) // Remove all but first and last - ) { - tickPositions.splice(i, 1); - } - } - this.finalTickAmt = UNDEFINED; - } - }, - - /** - * Set the scale based on data min and max, user set min and max or options - * - */ - setScale: function () { - var axis = this, - isDirtyData, - isDirtyAxisLength; - - axis.oldMin = axis.min; - axis.oldMax = axis.max; - axis.oldAxisLength = axis.len; - - // set the new axisLength - axis.setAxisSize(); - //axisLength = horiz ? axisWidth : axisHeight; - isDirtyAxisLength = axis.len !== axis.oldAxisLength; - - // is there new data? - each(axis.series, function (series) { - if (series.isDirtyData || series.isDirty || - series.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well - isDirtyData = true; - } - }); - - // do we really need to go through all this? - if (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw || - axis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax || axis.alignToOthers()) { - - if (axis.resetStacks) { - axis.resetStacks(); - } - - axis.forceRedraw = false; - - // get data extremes if needed - axis.getSeriesExtremes(); - - // get fixed positions based on tickInterval - axis.setTickInterval(); - - // record old values to decide whether a rescale is necessary later on (#540) - axis.oldUserMin = axis.userMin; - axis.oldUserMax = axis.userMax; - - // Mark as dirty if it is not already set to dirty and extremes have changed. #595. - if (!axis.isDirty) { - axis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax; - } - } else if (axis.cleanStacks) { - axis.cleanStacks(); - } - }, - - /** - * Set the extremes and optionally redraw - * @param {Number} newMin - * @param {Number} newMax - * @param {Boolean} redraw - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * @param {Object} eventArguments - * - */ - setExtremes: function (newMin, newMax, redraw, animation, eventArguments) { - var axis = this, - chart = axis.chart; - - redraw = pick(redraw, true); // defaults to true - - each(axis.series, function (serie) { - delete serie.kdTree; - }); - - // Extend the arguments with min and max - eventArguments = extend(eventArguments, { - min: newMin, - max: newMax - }); - - // Fire the event - fireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler - - axis.userMin = newMin; - axis.userMax = newMax; - axis.eventArgs = eventArguments; - - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Overridable method for zooming chart. Pulled out in a separate method to allow overriding - * in stock charts. - */ - zoom: function (newMin, newMax) { - var dataMin = this.dataMin, - dataMax = this.dataMax, - options = this.options, - min = mathMin(dataMin, pick(options.min, dataMin)), - max = mathMax(dataMax, pick(options.max, dataMax)); - - // Prevent pinch zooming out of range. Check for defined is for #1946. #1734. - if (!this.allowZoomOutside) { - if (defined(dataMin) && newMin <= min) { - newMin = min; - } - if (defined(dataMax) && newMax >= max) { - newMax = max; - } - } - - // In full view, displaying the reset zoom button is not required - this.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED; - - // Do it - this.setExtremes( - newMin, - newMax, - false, - UNDEFINED, - { trigger: 'zoom' } - ); - return true; - }, - - /** - * Update the axis metrics - */ - setAxisSize: function () { - var chart = this.chart, - options = this.options, - offsetLeft = options.offsetLeft || 0, - offsetRight = options.offsetRight || 0, - horiz = this.horiz, - width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight), - height = pick(options.height, chart.plotHeight), - top = pick(options.top, chart.plotTop), - left = pick(options.left, chart.plotLeft + offsetLeft), - percentRegex = /%$/; - - // Check for percentage based input values - if (percentRegex.test(height)) { - height = parseFloat(height) / 100 * chart.plotHeight; - } - if (percentRegex.test(top)) { - top = parseFloat(top) / 100 * chart.plotHeight + chart.plotTop; - } - - // Expose basic values to use in Series object and navigator - this.left = left; - this.top = top; - this.width = width; - this.height = height; - this.bottom = chart.chartHeight - height - top; - this.right = chart.chartWidth - width - left; - - // Direction agnostic properties - this.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905 - this.pos = horiz ? left : top; // distance from SVG origin - }, - - /** - * Get the actual axis extremes - */ - getExtremes: function () { - var axis = this, - isLog = axis.isLog; - - return { - min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, - max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, - dataMin: axis.dataMin, - dataMax: axis.dataMax, - userMin: axis.userMin, - userMax: axis.userMax - }; - }, - - /** - * Get the zero plane either based on zero or on the min or max value. - * Used in bar and area plots - */ - getThreshold: function (threshold) { - var axis = this, - isLog = axis.isLog, - realMin = isLog ? lin2log(axis.min) : axis.min, - realMax = isLog ? lin2log(axis.max) : axis.max; - - // With a threshold of null, make the columns/areas rise from the top or bottom - // depending on the value, assuming an actual threshold of 0 (#4233). - if (threshold === null) { - threshold = realMax < 0 ? realMax : realMin; - } else if (realMin > threshold) { - threshold = realMin; - } else if (realMax < threshold) { - threshold = realMax; - } - - return axis.translate(threshold, 0, 1, 0, 1); - }, - - /** - * Compute auto alignment for the axis label based on which side the axis is on - * and the given rotation for the label - */ - autoLabelAlign: function (rotation) { - var ret, - angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; - - if (angle > 15 && angle < 165) { - ret = 'right'; - } else if (angle > 195 && angle < 345) { - ret = 'left'; - } else { - ret = 'center'; - } - return ret; - }, - - /** - * Prevent the ticks from getting so close we can't draw the labels. On a horizontal - * axis, this is handled by rotating the labels, removing ticks and adding ellipsis. - * On a vertical axis remove ticks and add ellipsis. - */ - unsquish: function () { - var chart = this.chart, - ticks = this.ticks, - labelOptions = this.options.labels, - horiz = this.horiz, - tickInterval = this.tickInterval, - newTickInterval = tickInterval, - slotSize = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / tickInterval), - rotation, - rotationOption = labelOptions.rotation, - labelMetrics = chart.renderer.fontMetrics(labelOptions.style.fontSize, ticks[0] && ticks[0].label), - step, - bestScore = Number.MAX_VALUE, - autoRotation, - // Return the multiple of tickInterval that is needed to avoid collision - getStep = function (spaceNeeded) { - var step = spaceNeeded / (slotSize || 1); - step = step > 1 ? mathCeil(step) : 1; - return step * tickInterval; - }; - - if (horiz) { - autoRotation = !labelOptions.staggerLines && !labelOptions.step && ( // #3971 - defined(rotationOption) ? - [rotationOption] : - slotSize < pick(labelOptions.autoRotationLimit, 80) && labelOptions.autoRotation - ); - - if (autoRotation) { - - // Loop over the given autoRotation options, and determine which gives the best score. The - // best score is that with the lowest number of steps and a rotation closest to horizontal. - each(autoRotation, function (rot) { - var score; - - if (rot === rotationOption || (rot && rot >= -90 && rot <= 90)) { // #3891 - - step = getStep(mathAbs(labelMetrics.h / mathSin(deg2rad * rot))); - - score = step + mathAbs(rot / 360); - - if (score < bestScore) { - bestScore = score; - rotation = rot; - newTickInterval = step; - } - } - }); - } - - } else if (!labelOptions.step) { // #4411 - newTickInterval = getStep(labelMetrics.h); - } - - this.autoRotation = autoRotation; - this.labelRotation = pick(rotation, rotationOption); - - return newTickInterval; - }, - - renderUnsquish: function () { - var chart = this.chart, - renderer = chart.renderer, - tickPositions = this.tickPositions, - ticks = this.ticks, - labelOptions = this.options.labels, - horiz = this.horiz, - margin = chart.margin, - slotCount = this.categories ? tickPositions.length : tickPositions.length - 1, - slotWidth = this.slotWidth = (horiz && (labelOptions.step || 0) < 2 && !labelOptions.rotation && // #4415 - ((this.staggerLines || 1) * chart.plotWidth) / slotCount) || - (!horiz && ((margin[3] && (margin[3] - chart.spacing[3])) || chart.chartWidth * 0.33)), // #1580, #1931, - innerWidth = mathMax(1, mathRound(slotWidth - 2 * (labelOptions.padding || 5))), - attr = {}, - labelMetrics = renderer.fontMetrics(labelOptions.style.fontSize, ticks[0] && ticks[0].label), - textOverflowOption = labelOptions.style.textOverflow, - css, - labelLength = 0, - label, - i, - pos; - - // Set rotation option unless it is "auto", like in gauges - if (!isString(labelOptions.rotation)) { - attr.rotation = labelOptions.rotation || 0; // #4443 - } - - // Handle auto rotation on horizontal axis - if (this.autoRotation) { - - // Get the longest label length - each(tickPositions, function (tick) { - tick = ticks[tick]; - if (tick && tick.labelLength > labelLength) { - labelLength = tick.labelLength; - } - }); - - // Apply rotation only if the label is too wide for the slot, and - // the label is wider than its height. - if (labelLength > innerWidth && labelLength > labelMetrics.h) { - attr.rotation = this.labelRotation; - } else { - this.labelRotation = 0; - } - - // Handle word-wrap or ellipsis on vertical axis - } else if (slotWidth) { - // For word-wrap or ellipsis - css = { width: innerWidth + PX }; - - if (!textOverflowOption) { - css.textOverflow = 'clip'; - - // On vertical axis, only allow word wrap if there is room for more lines. - i = tickPositions.length; - while (!horiz && i--) { - pos = tickPositions[i]; - label = ticks[pos].label; - if (label) { - // Reset ellipsis in order to get the correct bounding box (#4070) - if (label.styles.textOverflow === 'ellipsis') { - label.css({ textOverflow: 'clip' }); - } - if (label.getBBox().height > this.len / tickPositions.length - (labelMetrics.h - labelMetrics.f) || - ticks[pos].labelLength > slotWidth) { // #4678 - label.specCss = { textOverflow: 'ellipsis' }; - } - } - } - } - } - - - // Add ellipsis if the label length is significantly longer than ideal - if (attr.rotation) { - css = { - width: (labelLength > chart.chartHeight * 0.5 ? chart.chartHeight * 0.33 : chart.chartHeight) + PX - }; - if (!textOverflowOption) { - css.textOverflow = 'ellipsis'; - } - } - - // Set the explicit or automatic label alignment - this.labelAlign = attr.align = labelOptions.align || this.autoLabelAlign(this.labelRotation); - - // Apply general and specific CSS - each(tickPositions, function (pos) { - var tick = ticks[pos], - label = tick && tick.label; - if (label) { - label.attr(attr); // This needs to go before the CSS in old IE (#4502) - if (css) { - label.css(merge(css, label.specCss)); - } - delete label.specCss; - tick.rotation = attr.rotation; - } - }); - - // Note: Why is this not part of getLabelPosition? - this.tickRotCorr = renderer.rotCorr(labelMetrics.b, this.labelRotation || 0, this.side !== 0); - }, - - /** - * Return true if the axis has associated data - */ - hasData: function () { - return this.hasVisibleSeries || (defined(this.min) && defined(this.max) && !!this.tickPositions); - }, - - /** - * Render the tick labels to a preliminary position to get their sizes - */ - getOffset: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - tickPositions = axis.tickPositions, - ticks = axis.ticks, - horiz = axis.horiz, - side = axis.side, - invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side, - hasData, - showAxis, - titleOffset = 0, - titleOffsetOption, - titleMargin = 0, - axisTitleOptions = options.title, - labelOptions = options.labels, - labelOffset = 0, // reset - labelOffsetPadded, - opposite = axis.opposite, - axisOffset = chart.axisOffset, - clipOffset = chart.clipOffset, - clip, - directionFactor = [-1, 1, 1, -1][side], - n, - axisParent = axis.axisParent, // Used in color axis - lineHeightCorrection; - - // For reuse in Axis.render - hasData = axis.hasData(); - axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); - - // Set/reset staggerLines - axis.staggerLines = axis.horiz && labelOptions.staggerLines; - - // Create the axisGroup and gridGroup elements on first iteration - if (!axis.axisGroup) { - axis.gridGroup = renderer.g('grid') - .attr({ zIndex: options.gridZIndex || 1 }) - .add(axisParent); - axis.axisGroup = renderer.g('axis') - .attr({ zIndex: options.zIndex || 2 }) - .add(axisParent); - axis.labelGroup = renderer.g('axis-labels') - .attr({ zIndex: labelOptions.zIndex || 7 }) - .addClass(PREFIX + axis.coll.toLowerCase() + '-labels') - .add(axisParent); - } - - if (hasData || axis.isLinked) { - - // Generate ticks - each(tickPositions, function (pos) { - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } else { - ticks[pos].addLabel(); // update labels depending on tick interval - } - }); - - axis.renderUnsquish(); - - - // Left side must be align: right and right side must have align: left for labels - if (labelOptions.reserveSpace !== false && (side === 0 || side === 2 || - { 1: 'left', 3: 'right' }[side] === axis.labelAlign || axis.labelAlign === 'center')) { - each(tickPositions, function (pos) { - - // get the highest offset - labelOffset = mathMax( - ticks[pos].getLabelSize(), - labelOffset - ); - }); - } - - if (axis.staggerLines) { - labelOffset *= axis.staggerLines; - axis.labelOffset = labelOffset * (axis.opposite ? -1 : 1); - } - - - } else { // doesn't have data - for (n in ticks) { - ticks[n].destroy(); - delete ticks[n]; - } - } - - if (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { - if (!axis.axisTitle) { - axis.axisTitle = renderer.text( - axisTitleOptions.text, - 0, - 0, - axisTitleOptions.useHTML - ) - .attr({ - zIndex: 7, - rotation: axisTitleOptions.rotation || 0, - align: - axisTitleOptions.textAlign || - { - low: opposite ? 'right' : 'left', - middle: 'center', - high: opposite ? 'left' : 'right' - }[axisTitleOptions.align] - }) - .addClass(PREFIX + this.coll.toLowerCase() + '-title') - .css(axisTitleOptions.style) - .add(axis.axisGroup); - axis.axisTitle.isNew = true; - } - - if (showAxis) { - titleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; - titleOffsetOption = axisTitleOptions.offset; - titleMargin = defined(titleOffsetOption) ? 0 : pick(axisTitleOptions.margin, horiz ? 5 : 10); - } - - // hide or show the title depending on whether showEmpty is set - axis.axisTitle[showAxis ? 'show' : 'hide'](true); - } - - // handle automatic or user set offset - axis.offset = directionFactor * pick(options.offset, axisOffset[side]); - - axis.tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }; // polar - lineHeightCorrection = side === 2 ? axis.tickRotCorr.y : 0; - labelOffsetPadded = Math.abs(labelOffset) + titleMargin + - (labelOffset && (directionFactor * (horiz ? pick(labelOptions.y, axis.tickRotCorr.y + 8) : labelOptions.x) - lineHeightCorrection)); - axis.axisTitleMargin = pick(titleOffsetOption, labelOffsetPadded); - - axisOffset[side] = mathMax( - axisOffset[side], - axis.axisTitleMargin + titleOffset + directionFactor * axis.offset, - labelOffsetPadded // #3027 - ); - - // Decide the clipping needed to keep the graph inside the plot area and axis lines - clip = options.offset ? 0 : mathFloor(options.lineWidth / 2) * 2; // #4308, #4371 - clipOffset[invertedSide] = mathMax(clipOffset[invertedSide], clip); - }, - - /** - * Get the path for the axis line - */ - getLinePath: function (lineWidth) { - var chart = this.chart, - opposite = this.opposite, - offset = this.offset, - horiz = this.horiz, - lineLeft = this.left + (opposite ? this.width : 0) + offset, - lineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset; - - if (opposite) { - lineWidth *= -1; // crispify the other way - #1480, #1687 - } - - return chart.renderer - .crispLine([ - M, - horiz ? - this.left : - lineLeft, - horiz ? - lineTop : - this.top, - L, - horiz ? - chart.chartWidth - this.right : - lineLeft, - horiz ? - lineTop : - chart.chartHeight - this.bottom - ], lineWidth); - }, - - /** - * Position the title - */ - getTitlePosition: function () { - // compute anchor points for each of the title align options - var horiz = this.horiz, - axisLeft = this.left, - axisTop = this.top, - axisLength = this.len, - axisTitleOptions = this.options.title, - margin = horiz ? axisLeft : axisTop, - opposite = this.opposite, - offset = this.offset, - xOption = axisTitleOptions.x || 0, - yOption = axisTitleOptions.y || 0, - fontSize = pInt(axisTitleOptions.style.fontSize || 12), - - // the position in the length direction of the axis - alongAxis = { - low: margin + (horiz ? 0 : axisLength), - middle: margin + axisLength / 2, - high: margin + (horiz ? axisLength : 0) - }[axisTitleOptions.align], - - // the position in the perpendicular direction of the axis - offAxis = (horiz ? axisTop + this.height : axisLeft) + - (horiz ? 1 : -1) * // horizontal axis reverses the margin - (opposite ? -1 : 1) * // so does opposite axes - this.axisTitleMargin + - (this.side === 2 ? fontSize : 0); - - return { - x: horiz ? - alongAxis + xOption : - offAxis + (opposite ? this.width : 0) + offset + xOption, - y: horiz ? - offAxis + yOption - (opposite ? this.height : 0) + offset : - alongAxis + yOption - }; - }, - - /** - * Render the axis - */ - render: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - isLog = axis.isLog, - isLinked = axis.isLinked, - tickPositions = axis.tickPositions, - axisTitle = axis.axisTitle, - ticks = axis.ticks, - minorTicks = axis.minorTicks, - alternateBands = axis.alternateBands, - stackLabelOptions = options.stackLabels, - alternateGridColor = options.alternateGridColor, - tickmarkOffset = axis.tickmarkOffset, - lineWidth = options.lineWidth, - linePath, - hasRendered = chart.hasRendered, - slideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin), - showAxis = axis.showAxis, - globalAnimation = renderer.globalAnimation, - from, - to; - - // Reset - axis.labelEdge.length = 0; - //axis.justifyToPlot = overflow === 'justify'; - axis.overlap = false; - - // Mark all elements inActive before we go over and mark the active ones - each([ticks, minorTicks, alternateBands], function (coll) { - var pos; - for (pos in coll) { - coll[pos].isActive = false; - } - }); - - // If the series has data draw the ticks. Else only the line and title - if (axis.hasData() || isLinked) { - - // minor ticks - if (axis.minorTickInterval && !axis.categories) { - each(axis.getMinorTickPositions(), function (pos) { - if (!minorTicks[pos]) { - minorTicks[pos] = new Tick(axis, pos, 'minor'); - } - - // render new ticks in old position - if (slideInTicks && minorTicks[pos].isNew) { - minorTicks[pos].render(null, true); - } - - minorTicks[pos].render(null, false, 1); - }); - } - - // Major ticks. Pull out the first item and render it last so that - // we can get the position of the neighbour label. #808. - if (tickPositions.length) { // #1300 - each(tickPositions, function (pos, i) { - - // linked axes need an extra check to find out if - if (!isLinked || (pos >= axis.min && pos <= axis.max)) { - - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } - - // render new ticks in old position - if (slideInTicks && ticks[pos].isNew) { - ticks[pos].render(i, true, 0.1); - } - - ticks[pos].render(i); - } - - }); - // In a categorized axis, the tick marks are displayed between labels. So - // we need to add a tick mark and grid line at the left edge of the X axis. - if (tickmarkOffset && (axis.min === 0 || axis.single)) { - if (!ticks[-1]) { - ticks[-1] = new Tick(axis, -1, null, true); - } - ticks[-1].render(-1); - } - - } - - // alternate grid color - if (alternateGridColor) { - each(tickPositions, function (pos, i) { - to = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max - tickmarkOffset; - if (i % 2 === 0 && pos < axis.max && to <= axis.max + (chart.polar ? -tickmarkOffset : tickmarkOffset)) { // #2248, #4660 - if (!alternateBands[pos]) { - alternateBands[pos] = new Highcharts.PlotLineOrBand(axis); - } - from = pos + tickmarkOffset; // #949 - alternateBands[pos].options = { - from: isLog ? lin2log(from) : from, - to: isLog ? lin2log(to) : to, - color: alternateGridColor - }; - alternateBands[pos].render(); - alternateBands[pos].isActive = true; - } - }); - } - - // custom plot lines and bands - if (!axis._addedPlotLB) { // only first time - each((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) { - axis.addPlotBandOrLine(plotLineOptions); - }); - axis._addedPlotLB = true; - } - - } // end if hasData - - // Remove inactive ticks - each([ticks, minorTicks, alternateBands], function (coll) { - var pos, - i, - forDestruction = [], - delay = globalAnimation ? globalAnimation.duration || 500 : 0, - destroyInactiveItems = function () { - i = forDestruction.length; - while (i--) { - // When resizing rapidly, the same items may be destroyed in different timeouts, - // or the may be reactivated - if (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) { - coll[forDestruction[i]].destroy(); - delete coll[forDestruction[i]]; - } - } - - }; - - for (pos in coll) { - - if (!coll[pos].isActive) { - // Render to zero opacity - coll[pos].render(pos, false, 0); - coll[pos].isActive = false; - forDestruction.push(pos); - } - } - - // When the objects are finished fading out, destroy them - syncTimeout( - destroyInactiveItems, - coll === alternateBands || !chart.hasRendered || !delay ? 0 : delay - ); - }); - - // Static items. As the axis group is cleared on subsequent calls - // to render, these items are added outside the group. - // axis line - if (lineWidth) { - linePath = axis.getLinePath(lineWidth); - if (!axis.axisLine) { - axis.axisLine = renderer.path(linePath) - .attr({ - stroke: options.lineColor, - 'stroke-width': lineWidth, - zIndex: 7 - }) - .add(axis.axisGroup); - } else { - axis.axisLine.animate({ d: linePath }); - } - - // show or hide the line depending on options.showEmpty - axis.axisLine[showAxis ? 'show' : 'hide'](true); - } - - if (axisTitle && showAxis) { - - axisTitle[axisTitle.isNew ? 'attr' : 'animate']( - axis.getTitlePosition() - ); - axisTitle.isNew = false; - } - - // Stacked totals: - if (stackLabelOptions && stackLabelOptions.enabled) { - axis.renderStackTotals(); - } - // End stacked totals - - axis.isDirty = false; - }, - - /** - * Redraw the axis to reflect changes in the data or axis extremes - */ - redraw: function () { - - if (this.visible) { - // render the axis - this.render(); - - // move plot lines and bands - each(this.plotLinesAndBands, function (plotLine) { - plotLine.render(); - }); - } - - // mark associated series as dirty and ready for redraw - each(this.series, function (series) { - series.isDirty = true; - }); - - }, - - /** - * Destroys an Axis instance. - */ - destroy: function (keepEvents) { - var axis = this, - stacks = axis.stacks, - stackKey, - plotLinesAndBands = axis.plotLinesAndBands, - i; - - // Remove the events - if (!keepEvents) { - removeEvent(axis); - } - - // Destroy each stack total - for (stackKey in stacks) { - destroyObjectProperties(stacks[stackKey]); - - stacks[stackKey] = null; - } - - // Destroy collections - each([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) { - destroyObjectProperties(coll); - }); - i = plotLinesAndBands.length; - while (i--) { // #1975 - plotLinesAndBands[i].destroy(); - } - - // Destroy local variables - each(['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', 'cross', 'gridGroup', 'labelGroup'], function (prop) { - if (axis[prop]) { - axis[prop] = axis[prop].destroy(); - } - }); - - // Destroy crosshair - if (this.cross) { - this.cross.destroy(); - } - }, - - /** - * Draw the crosshair - * - * @param {Object} e The event arguments from the modified pointer event - * @param {Object} point The Point object - */ - drawCrosshair: function (e, point) { - - var path, - options = this.crosshair, - pos, - attribs, - categorized, - strokeWidth; - - if ( - // Disabled in options - !this.crosshair || - // Snap - ((defined(point) || !pick(options.snap, true)) === false) || - // Not on this axis (#4095, #2888) - (point && point.series && point.series[this.coll] !== this) - ) { - this.hideCrosshair(); - - } else { - - // Get the path - if (!pick(options.snap, true)) { - pos = (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); - } else if (defined(point)) { - pos = this.isXAxis ? point.plotX : this.len - point.plotY; // #3834 - } - - if (this.isRadial) { - path = this.getPlotLinePath(this.isXAxis ? point.x : pick(point.stackY, point.y)) || null; // #3189 - } else { - path = this.getPlotLinePath(null, null, null, null, pos) || null; // #3189 - } - - if (path === null) { - this.hideCrosshair(); - return; - } - - categorized = this.categories && !this.isRadial; - strokeWidth = pick(options.width, (categorized ? this.transA : 1)); - - // Draw the cross - if (this.cross) { - this.cross - .attr({ - d: path, - visibility: 'visible', - 'stroke-width': strokeWidth // #4737 - }); - } else { - attribs = { - 'stroke-width': strokeWidth, - stroke: options.color || (categorized ? 'rgba(155,200,255,0.2)' : '#C0C0C0'), - zIndex: pick(options.zIndex, 2) - }; - if (options.dashStyle) { - attribs.dashstyle = options.dashStyle; - } - this.cross = this.chart.renderer.path(path).attr(attribs).add(); - } - - } - - }, - - /** - * Hide the crosshair. - */ - hideCrosshair: function () { - if (this.cross) { - this.cross.hide(); - } - } - }; // end Axis - - extend(Axis.prototype, AxisPlotLineOrBandExtension); - - /** - * Set the tick positions to a time unit that makes sense, for example - * on the first of each month or on every Monday. Return an array - * with the time positions. Used in datetime axes as well as for grouping - * data on a datetime axis. - * - * @param {Object} normalizedInterval The interval in axis values (ms) and the count - * @param {Number} min The minimum in axis values - * @param {Number} max The maximum in axis values - * @param {Number} startOfWeek - */ - Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) { - var tickPositions = [], - i, - higherRanks = {}, - useUTC = defaultOptions.global.useUTC, - minYear, // used in months and years as a basis for Date.UTC() - minDate = new Date(min - getTZOffset(min)), - interval = normalizedInterval.unitRange, - count = normalizedInterval.count; - - if (defined(min)) { // #1300 - minDate[setMilliseconds](interval >= timeUnits.second ? 0 : // #3935 - count * mathFloor(minDate.getMilliseconds() / count)); // #3652, #3654 - - if (interval >= timeUnits.second) { // second - minDate[setSeconds](interval >= timeUnits.minute ? 0 : // #3935 - count * mathFloor(minDate.getSeconds() / count)); - } - - if (interval >= timeUnits.minute) { // minute - minDate[setMinutes](interval >= timeUnits.hour ? 0 : - count * mathFloor(minDate[getMinutes]() / count)); - } - - if (interval >= timeUnits.hour) { // hour - minDate[setHours](interval >= timeUnits.day ? 0 : - count * mathFloor(minDate[getHours]() / count)); - } - - if (interval >= timeUnits.day) { // day - minDate[setDate](interval >= timeUnits.month ? 1 : - count * mathFloor(minDate[getDate]() / count)); - } - - if (interval >= timeUnits.month) { // month - minDate[setMonth](interval >= timeUnits.year ? 0 : - count * mathFloor(minDate[getMonth]() / count)); - minYear = minDate[getFullYear](); - } - - if (interval >= timeUnits.year) { // year - minYear -= minYear % count; - minDate[setFullYear](minYear); - } - - // week is a special case that runs outside the hierarchy - if (interval === timeUnits.week) { - // get start of current week, independent of count - minDate[setDate](minDate[getDate]() - minDate[getDay]() + - pick(startOfWeek, 1)); - } - - - // get tick positions - i = 1; - if (timezoneOffset || getTimezoneOffset) { - minDate = minDate.getTime(); - minDate = new Date(minDate + getTZOffset(minDate)); - } - minYear = minDate[getFullYear](); - var time = minDate.getTime(), - minMonth = minDate[getMonth](), - minDateDate = minDate[getDate](), - localTimezoneOffset = (timeUnits.day + - (useUTC ? getTZOffset(minDate) : minDate.getTimezoneOffset() * 60 * 1000) - ) % timeUnits.day; // #950, #3359 - - // iterate and add tick positions at appropriate values - while (time < max) { - tickPositions.push(time); - - // if the interval is years, use Date.UTC to increase years - if (interval === timeUnits.year) { - time = makeTime(minYear + i * count, 0); - - // if the interval is months, use Date.UTC to increase months - } else if (interval === timeUnits.month) { - time = makeTime(minYear, minMonth + i * count); - - // if we're using global time, the interval is not fixed as it jumps - // one hour at the DST crossover - } else if (!useUTC && (interval === timeUnits.day || interval === timeUnits.week)) { - time = makeTime(minYear, minMonth, minDateDate + - i * count * (interval === timeUnits.day ? 1 : 7)); - - // else, the interval is fixed and we use simple addition - } else { - time += interval * count; - } - - i++; - } - - // push the last time - tickPositions.push(time); - - - // mark new days if the time is dividible by day (#1649, #1760) - each(grep(tickPositions, function (time) { - return interval <= timeUnits.hour && time % timeUnits.day === localTimezoneOffset; - }), function (time) { - higherRanks[time] = 'day'; - }); - } - - - // record information on the chosen unit - for dynamic label formatter - tickPositions.info = extend(normalizedInterval, { - higherRanks: higherRanks, - totalRange: interval * count - }); - - return tickPositions; - }; - - /** - * Get a normalized tick interval for dates. Returns a configuration object with - * unit range (interval), count and name. Used to prepare data for getTimeTicks. - * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs - * of segments in stock charts, the normalizing logic was extracted in order to - * prevent it for running over again for each segment having the same interval. - * #662, #697. - */ - Axis.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) { - var units = unitsOption || [[ - 'millisecond', // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], [ - 'second', - [1, 2, 5, 10, 15, 30] - ], [ - 'minute', - [1, 2, 5, 10, 15, 30] - ], [ - 'hour', - [1, 2, 3, 4, 6, 8, 12] - ], [ - 'day', - [1, 2] - ], [ - 'week', - [1, 2] - ], [ - 'month', - [1, 2, 3, 4, 6] - ], [ - 'year', - null - ]], - unit = units[units.length - 1], // default unit is years - interval = timeUnits[unit[0]], - multiples = unit[1], - count, - i; - - // loop through the units to find the one that best fits the tickInterval - for (i = 0; i < units.length; i++) { - unit = units[i]; - interval = timeUnits[unit[0]]; - multiples = unit[1]; - - - if (units[i + 1]) { - // lessThan is in the middle between the highest multiple and the next unit. - var lessThan = (interval * multiples[multiples.length - 1] + - timeUnits[units[i + 1][0]]) / 2; - - // break and keep the current unit - if (tickInterval <= lessThan) { - break; - } - } - } - - // prevent 2.5 years intervals, though 25, 250 etc. are allowed - if (interval === timeUnits.year && tickInterval < 5 * interval) { - multiples = [1, 2, 5]; - } - - // get the count - count = normalizeTickInterval( - tickInterval / interval, - multiples, - unit[0] === 'year' ? mathMax(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 - ); - - return { - unitRange: interval, - count: count, - unitName: unit[0] - }; - }; - /** - * Methods defined on the Axis prototype - */ - - /** - * Set the tick positions of a logarithmic axis - */ - Axis.prototype.getLogTickPositions = function (interval, min, max, minor) { - var axis = this, - options = axis.options, - axisLength = axis.len, - // Since we use this method for both major and minor ticks, - // use a local variable and return the result - positions = []; - - // Reset - if (!minor) { - axis._minorAutoInterval = null; - } - - // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. - if (interval >= 0.5) { - interval = mathRound(interval); - positions = axis.getLinearTickPositions(interval, min, max); - - // Second case: We need intermediary ticks. For example - // 1, 2, 4, 6, 8, 10, 20, 40 etc. - } else if (interval >= 0.08) { - var roundedMin = mathFloor(min), - intermediate, - i, - j, - len, - pos, - lastPos, - break2; - - if (interval > 0.3) { - intermediate = [1, 2, 4]; - } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 4, 6, 8]; - } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - } - - for (i = roundedMin; i < max + 1 && !break2; i++) { - len = intermediate.length; - for (j = 0; j < len && !break2; j++) { - pos = log2lin(lin2log(i) * intermediate[j]); - if (pos > min && (!minor || lastPos <= max) && lastPos !== UNDEFINED) { // #1670, lastPos is #3113 - positions.push(lastPos); - } - - if (lastPos > max) { - break2 = true; - } - lastPos = pos; - } - } - - // Third case: We are so deep in between whole logarithmic values that - // we might as well handle the tick positions like a linear axis. For - // example 1.01, 1.02, 1.03, 1.04. - } else { - var realMin = lin2log(min), - realMax = lin2log(max), - tickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'], - filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, - tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), - totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; - - interval = pick( - filteredTickIntervalOption, - axis._minorAutoInterval, - (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) - ); - - interval = normalizeTickInterval( - interval, - null, - getMagnitude(interval) - ); - - positions = map(axis.getLinearTickPositions( - interval, - realMin, - realMax - ), log2lin); - - if (!minor) { - axis._minorAutoInterval = interval / 5; - } - } - - // Set the axis-level tickInterval variable - if (!minor) { - axis.tickInterval = interval; - } - return positions; - };/** - * The tooltip object - * @param {Object} chart The chart instance - * @param {Object} options Tooltip options - */ - var Tooltip = Highcharts.Tooltip = function () { - this.init.apply(this, arguments); - }; - - Tooltip.prototype = { - - init: function (chart, options) { - - var borderWidth = options.borderWidth, - style = options.style, - padding = pInt(style.padding); - - // Save the chart and options - this.chart = chart; - this.options = options; - - // Keep track of the current series - //this.currentSeries = UNDEFINED; - - // List of crosshairs - this.crosshairs = []; - - // Current values of x and y when animating - this.now = { x: 0, y: 0 }; - - // The tooltip is initially hidden - this.isHidden = true; - - - // create the label - this.label = chart.renderer.label('', 0, 0, options.shape || 'callout', null, null, options.useHTML, null, 'tooltip') - .attr({ - padding: padding, - fill: options.backgroundColor, - 'stroke-width': borderWidth, - r: options.borderRadius, - zIndex: 8 - }) - .css(style) - .css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117) - .add() - .attr({ y: -9999 }); // #2301, #2657 - - // When using canVG the shadow shows up as a gray circle - // even if the tooltip is hidden. - if (!useCanVG) { - this.label.shadow(options.shadow); - } - - // Public property for getting the shared state. - this.shared = options.shared; - }, - - /** - * Destroy the tooltip and its elements. - */ - destroy: function () { - // Destroy and clear local variables - if (this.label) { - this.label = this.label.destroy(); - } - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - - /** - * Provide a soft movement for the tooltip - * - * @param {Number} x - * @param {Number} y - * @private - */ - move: function (x, y, anchorX, anchorY) { - var tooltip = this, - now = tooltip.now, - animate = tooltip.options.animation !== false && !tooltip.isHidden && - // When we get close to the target position, abort animation and land on the right place (#3056) - (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1), - skipAnchor = tooltip.followPointer || tooltip.len > 1; - - // Get intermediate values for animation - extend(now, { - x: animate ? (2 * now.x + x) / 3 : x, - y: animate ? (now.y + y) / 2 : y, - anchorX: skipAnchor ? UNDEFINED : animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, - anchorY: skipAnchor ? UNDEFINED : animate ? (now.anchorY + anchorY) / 2 : anchorY - }); - - // Move to the intermediate value - tooltip.label.attr(now); - - - // Run on next tick of the mouse tracker - if (animate) { - - // Never allow two timeouts - clearTimeout(this.tooltipTimeout); - - // Set the fixed interval ticking for the smooth tooltip - this.tooltipTimeout = setTimeout(function () { - // The interval function may still be running during destroy, so check that the chart is really there before calling. - if (tooltip) { - tooltip.move(x, y, anchorX, anchorY); - } - }, 32); - - } - }, - - /** - * Hide the tooltip - */ - hide: function (delay) { - var tooltip = this; - clearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766) - delay = pick(delay, this.options.hideDelay, 500); - if (!this.isHidden) { - this.hideTimer = syncTimeout(function () { - tooltip.label[delay ? 'fadeOut' : 'hide'](); - tooltip.isHidden = true; - }, delay); - } - }, - - /** - * Extendable method to get the anchor position of the tooltip - * from a point or set of points - */ - getAnchor: function (points, mouseEvent) { - var ret, - chart = this.chart, - inverted = chart.inverted, - plotTop = chart.plotTop, - plotLeft = chart.plotLeft, - plotX = 0, - plotY = 0, - yAxis, - xAxis; - - points = splat(points); - - // Pie uses a special tooltipPos - ret = points[0].tooltipPos; - - // When tooltip follows mouse, relate the position to the mouse - if (this.followPointer && mouseEvent) { - if (mouseEvent.chartX === UNDEFINED) { - mouseEvent = chart.pointer.normalize(mouseEvent); - } - ret = [ - mouseEvent.chartX - chart.plotLeft, - mouseEvent.chartY - plotTop - ]; - } - // When shared, use the average position - if (!ret) { - each(points, function (point) { - yAxis = point.series.yAxis; - xAxis = point.series.xAxis; - plotX += point.plotX + (!inverted && xAxis ? xAxis.left - plotLeft : 0); - plotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) + - (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 - }); - - plotX /= points.length; - plotY /= points.length; - - ret = [ - inverted ? chart.plotWidth - plotY : plotX, - this.shared && !inverted && points.length > 1 && mouseEvent ? - mouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424) - inverted ? chart.plotHeight - plotX : plotY - ]; - } - - return map(ret, mathRound); - }, - - /** - * Place the tooltip in a chart without spilling over - * and not covering the point it self. - */ - getPosition: function (boxWidth, boxHeight, point) { - - var chart = this.chart, - distance = this.distance, - ret = {}, - h = point.h || 0, // #4117 - swapped, - first = ['y', chart.chartHeight, boxHeight, point.plotY + chart.plotTop, chart.plotTop, chart.plotTop + chart.plotHeight], - second = ['x', chart.chartWidth, boxWidth, point.plotX + chart.plotLeft, chart.plotLeft, chart.plotLeft + chart.plotWidth], - // The far side is right or bottom - preferFarSide = pick(point.ttBelow, (chart.inverted && !point.negative) || (!chart.inverted && point.negative)), - /** - * Handle the preferred dimension. When the preferred dimension is tooltip - * on top or bottom of the point, it will look for space there. - */ - firstDimension = function (dim, outerSize, innerSize, point, min, max) { - var roomLeft = innerSize < point - distance, - roomRight = point + distance + innerSize < outerSize, - alignedLeft = point - distance - innerSize, - alignedRight = point + distance; - - if (preferFarSide && roomRight) { - ret[dim] = alignedRight; - } else if (!preferFarSide && roomLeft) { - ret[dim] = alignedLeft; - } else if (roomLeft) { - ret[dim] = mathMin(max - innerSize, alignedLeft - h < 0 ? alignedLeft : alignedLeft - h); - } else if (roomRight) { - ret[dim] = mathMax(min, alignedRight + h + innerSize > outerSize ? alignedRight : alignedRight + h); - } else { - return false; - } - }, - /** - * Handle the secondary dimension. If the preferred dimension is tooltip - * on top or bottom of the point, the second dimension is to align the tooltip - * above the point, trying to align center but allowing left or right - * align within the chart box. - */ - secondDimension = function (dim, outerSize, innerSize, point) { - var retVal; - - // Too close to the edge, return false and swap dimensions - if (point < distance || point > outerSize - distance) { - retVal = false; - // Align left/top - } else if (point < innerSize / 2) { - ret[dim] = 1; - // Align right/bottom - } else if (point > outerSize - innerSize / 2) { - ret[dim] = outerSize - innerSize - 2; - // Align center - } else { - ret[dim] = point - innerSize / 2; - } - return retVal; - }, - /** - * Swap the dimensions - */ - swap = function (count) { - var temp = first; - first = second; - second = temp; - swapped = count; - }, - run = function () { - if (firstDimension.apply(0, first) !== false) { - if (secondDimension.apply(0, second) === false && !swapped) { - swap(true); - run(); - } - } else if (!swapped) { - swap(true); - run(); - } else { - ret.x = ret.y = 0; - } - }; - - // Under these conditions, prefer the tooltip on the side of the point - if (chart.inverted || this.len > 1) { - swap(); - } - run(); - - return ret; - - }, - - /** - * In case no user defined formatter is given, this will be used. Note that the context - * here is an object holding point, series, x, y etc. - */ - defaultFormatter: function (tooltip) { - var items = this.points || splat(this), - s; - - // build the header - s = [tooltip.tooltipFooterHeaderFormatter(items[0])]; //#3397: abstraction to enable formatting of footer and header - - // build the values - s = s.concat(tooltip.bodyFormatter(items)); - - // footer - s.push(tooltip.tooltipFooterHeaderFormatter(items[0], true)); //#3397: abstraction to enable formatting of footer and header - - return s.join(''); - }, - - /** - * Refresh the tooltip's text and position. - * @param {Object} point - */ - refresh: function (point, mouseEvent) { - var tooltip = this, - chart = tooltip.chart, - label = tooltip.label, - options = tooltip.options, - x, - y, - anchor, - textConfig = {}, - text, - pointConfig = [], - formatter = options.formatter || tooltip.defaultFormatter, - hoverPoints = chart.hoverPoints, - borderColor, - shared = tooltip.shared, - currentSeries; - - clearTimeout(this.hideTimer); - - // get the reference point coordinates (pie charts use tooltipPos) - tooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer; - anchor = tooltip.getAnchor(point, mouseEvent); - x = anchor[0]; - y = anchor[1]; - - // shared tooltip, array is sent over - if (shared && !(point.series && point.series.noSharedTooltip)) { - - // hide previous hoverPoints and set new - - chart.hoverPoints = point; - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(point, function (item) { - item.setState(HOVER_STATE); - - pointConfig.push(item.getLabelConfig()); - }); - - textConfig = { - x: point[0].category, - y: point[0].y - }; - textConfig.points = pointConfig; - this.len = pointConfig.length; - point = point[0]; - - // single point tooltip - } else { - textConfig = point.getLabelConfig(); - } - text = formatter.call(textConfig, tooltip); - - // register the current series - currentSeries = point.series; - this.distance = pick(currentSeries.tooltipOptions.distance, 16); - - // update the inner HTML - if (text === false) { - this.hide(); - } else { - - // show it - if (tooltip.isHidden) { - stop(label); - label.attr('opacity', 1).show(); - } - - // update text - label.attr({ - text: text - }); - - // set the stroke color of the box - borderColor = options.borderColor || point.color || currentSeries.color || '#606060'; - label.attr({ - stroke: borderColor - }); - tooltip.updatePosition({ - plotX: x, - plotY: y, - negative: point.negative, - ttBelow: point.ttBelow, - h: anchor[2] || 0 - }); - - this.isHidden = false; - } - fireEvent(chart, 'tooltipRefresh', { - text: text, - x: x + chart.plotLeft, - y: y + chart.plotTop, - borderColor: borderColor - }); - }, - - /** - * Find the new position and perform the move - */ - updatePosition: function (point) { - var chart = this.chart, - label = this.label, - pos = (this.options.positioner || this.getPosition).call( - this, - label.width, - label.height, - point - ); - - // do the move - this.move( - mathRound(pos.x), - mathRound(pos.y || 0), // can be undefined (#3977) - point.plotX + chart.plotLeft, - point.plotY + chart.plotTop - ); - }, - - /** - * Get the best X date format based on the closest point range on the axis. - */ - getXDateFormat: function (point, options, xAxis) { - var xDateFormat, - dateTimeLabelFormats = options.dateTimeLabelFormats, - closestPointRange = xAxis && xAxis.closestPointRange, - n, - blank = '01-01 00:00:00.000', - strpos = { - millisecond: 15, - second: 12, - minute: 9, - hour: 6, - day: 3 - }, - date, - lastN = 'millisecond'; // for sub-millisecond data, #4223 - - if (closestPointRange) { - date = dateFormat('%m-%d %H:%M:%S.%L', point.x); - for (n in timeUnits) { - - // If the range is exactly one week and we're looking at a Sunday/Monday, go for the week format - if (closestPointRange === timeUnits.week && +dateFormat('%w', point.x) === xAxis.options.startOfWeek && - date.substr(6) === blank.substr(6)) { - n = 'week'; - break; - } - - // The first format that is too great for the range - if (timeUnits[n] > closestPointRange) { - n = lastN; - break; - } - - // If the point is placed every day at 23:59, we need to show - // the minutes as well. #2637. - if (strpos[n] && date.substr(strpos[n]) !== blank.substr(strpos[n])) { - break; - } - - // Weeks are outside the hierarchy, only apply them on Mondays/Sundays like in the first condition - if (n !== 'week') { - lastN = n; - } - } - - if (n) { - xDateFormat = dateTimeLabelFormats[n]; - } - } else { - xDateFormat = dateTimeLabelFormats.day; - } - - return xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 - }, - - /** - * Format the footer/header of the tooltip - * #3397: abstraction to enable formatting of footer and header - */ - tooltipFooterHeaderFormatter: function (point, isFooter) { - var footOrHead = isFooter ? 'footer' : 'header', - series = point.series, - tooltipOptions = series.tooltipOptions, - xDateFormat = tooltipOptions.xDateFormat, - xAxis = series.xAxis, - isDateTime = xAxis && xAxis.options.type === 'datetime' && isNumber(point.key), - formatString = tooltipOptions[footOrHead + 'Format']; - - // Guess the best date format based on the closest point distance (#568, #3418) - if (isDateTime && !xDateFormat) { - xDateFormat = this.getXDateFormat(point, tooltipOptions, xAxis); - } - - // Insert the footer date format if any - if (isDateTime && xDateFormat) { - formatString = formatString.replace('{point.key}', '{point.key:' + xDateFormat + '}'); - } - - return format(formatString, { - point: point, - series: series - }); - }, - - /** - * Build the body (lines) of the tooltip by iterating over the items and returning one entry for each item, - * abstracting this functionality allows to easily overwrite and extend it. - */ - bodyFormatter: function (items) { - return map(items, function (item) { - var tooltipOptions = item.series.tooltipOptions; - return (tooltipOptions.pointFormatter || item.point.tooltipFormatter).call(item.point, tooltipOptions.pointFormat); - }); - } - - }; - - var hoverChartIndex; - - // Global flag for touch support - hasTouch = doc && doc.documentElement.ontouchstart !== UNDEFINED; - - /** - * The mouse tracker object. All methods starting with "on" are primary DOM event handlers. - * Subsequent methods should be named differently from what they are doing. - * @param {Object} chart The Chart instance - * @param {Object} options The root options object - */ - var Pointer = Highcharts.Pointer = function (chart, options) { - this.init(chart, options); - }; - - Pointer.prototype = { - /** - * Initialize Pointer - */ - init: function (chart, options) { - - var chartOptions = options.chart, - chartEvents = chartOptions.events, - zoomType = useCanVG ? '' : chartOptions.zoomType, - inverted = chart.inverted, - zoomX, - zoomY; - - // Store references - this.options = options; - this.chart = chart; - - // Zoom status - this.zoomX = zoomX = /x/.test(zoomType); - this.zoomY = zoomY = /y/.test(zoomType); - this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); - this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); - this.hasZoom = zoomX || zoomY; - - // Do we need to handle click on a touch device? - this.runChartClick = chartEvents && !!chartEvents.click; - - this.pinchDown = []; - this.lastValidTouch = {}; - - if (Highcharts.Tooltip && options.tooltip.enabled) { - chart.tooltip = new Tooltip(chart, options.tooltip); - this.followTouchMove = pick(options.tooltip.followTouchMove, true); - } - - this.setDOMEvents(); - }, - - /** - * Add crossbrowser support for chartX and chartY - * @param {Object} e The event object in standard browsers - */ - normalize: function (e, chartPosition) { - var chartX, - chartY, - ePos; - - // IE normalizing - e = e || win.event; - if (!e.target) { - e.target = e.srcElement; - } - - // iOS (#2757) - ePos = e.touches ? (e.touches.length ? e.touches.item(0) : e.changedTouches[0]) : e; - - // Get mouse position - if (!chartPosition) { - this.chartPosition = chartPosition = offset(this.chart.container); - } - - // chartX and chartY - if (ePos.pageX === UNDEFINED) { // IE < 9. #886. - chartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is - // for IE10 quirks mode within framesets - chartY = e.y; - } else { - chartX = ePos.pageX - chartPosition.left; - chartY = ePos.pageY - chartPosition.top; - } - - return extend(e, { - chartX: mathRound(chartX), - chartY: mathRound(chartY) - }); - }, - - /** - * Get the click position in terms of axis values. - * - * @param {Object} e A pointer event - */ - getCoordinates: function (e) { - var coordinates = { - xAxis: [], - yAxis: [] - }; - - each(this.chart.axes, function (axis) { - coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) - }); - }); - return coordinates; - }, - - /** - * With line type charts with a single tracker, get the point closest to the mouse. - * Run Point.onMouseOver and display tooltip for the point or points. - */ - runPointActions: function (e) { - - var pointer = this, - chart = pointer.chart, - series = chart.series, - tooltip = chart.tooltip, - shared = tooltip ? tooltip.shared : false, - followPointer, - hoverPoint = chart.hoverPoint, - hoverSeries = chart.hoverSeries, - i, - distance = Number.MAX_VALUE, // #4511 - anchor, - noSharedTooltip, - stickToHoverSeries, - directTouch, - pointDistance, - kdpoints = [], - kdpoint, - kdpointT; - - // For hovering over the empty parts of the plot area (hoverSeries is undefined). - // If there is one series with point tracking (combo chart), don't go to nearest neighbour. - if (!shared && !hoverSeries) { - for (i = 0; i < series.length; i++) { - if (series[i].directTouch || !series[i].options.stickyTracking) { - series = []; - } - } - } - - // If it has a hoverPoint and that series requires direct touch (like columns, #3899), or we're on - // a noSharedTooltip series among shared tooltip series (#4546), use the hoverPoint . Otherwise, - // search the k-d tree. - stickToHoverSeries = hoverSeries && (shared ? hoverSeries.noSharedTooltip : hoverSeries.directTouch); - if (stickToHoverSeries && hoverPoint) { - kdpoint = hoverPoint; - - // Handle shared tooltip or cases where a series is not yet hovered - } else { - // Find nearest points on all series - each(series, function (s) { - // Skip hidden series - noSharedTooltip = s.noSharedTooltip && shared; - directTouch = !shared && s.directTouch; - if (s.visible && !noSharedTooltip && !directTouch && pick(s.options.enableMouseTracking, true)) { // #3821 - kdpointT = s.searchPoint(e, !noSharedTooltip && s.kdDimensions === 1); // #3828 - if (kdpointT) { - kdpoints.push(kdpointT); - } - } - }); - // Find absolute nearest point - each(kdpoints, function (p) { - pointDistance = !shared && p.series.kdDimensions === 1 ? p.dist : p.distX; // #4645 - - if (p && typeof pointDistance === 'number' && pointDistance < distance) { - distance = pointDistance; - kdpoint = p; - } - }); - } - - // Refresh tooltip for kdpoint if new hover point or tooltip was hidden // #3926, #4200 - if (kdpoint && (kdpoint !== this.prevKDPoint || (tooltip && tooltip.isHidden))) { - // Draw tooltip if necessary - if (shared && !kdpoint.series.noSharedTooltip) { - i = kdpoints.length; - while (i--) { - if (kdpoints[i].clientX !== kdpoint.clientX || kdpoints[i].series.noSharedTooltip) { - kdpoints.splice(i, 1); - } - } - if (kdpoints.length && tooltip) { - tooltip.refresh(kdpoints, e); - } - - // Do mouseover on all points (#3919, #3985, #4410) - each(kdpoints, function (point) { - point.onMouseOver(e, point !== ((hoverSeries && hoverSeries.directTouch && hoverPoint) || kdpoint)); - }); - } else { - if (tooltip) { - tooltip.refresh(kdpoint, e); - } - if (!hoverSeries || !hoverSeries.directTouch) { // #4448 - kdpoint.onMouseOver(e); - } - } - this.prevKDPoint = kdpoint; - - // Update positions (regardless of kdpoint or hoverPoint) - } else { - followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer; - if (tooltip && followPointer && !tooltip.isHidden) { - anchor = tooltip.getAnchor([{}], e); - tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] }); - } - } - - // Start the event listener to pick up the tooltip and crosshairs - if (!pointer._onDocumentMouseMove) { - pointer._onDocumentMouseMove = function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.onDocumentMouseMove(e); - } - }; - addEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - } - - // Crosshair - each(chart.axes, function (axis) { - axis.drawCrosshair(e, pick(kdpoint, hoverPoint)); - }); - - - }, - - - - /** - * Reset the tracking by hiding the tooltip, the hover series state and the hover point - * - * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible - */ - reset: function (allowMove, delay) { - var pointer = this, - chart = pointer.chart, - hoverSeries = chart.hoverSeries, - hoverPoint = chart.hoverPoint, - hoverPoints = chart.hoverPoints, - tooltip = chart.tooltip, - tooltipPoints = tooltip && tooltip.shared ? hoverPoints : hoverPoint; - - // Narrow in allowMove - allowMove = allowMove && tooltip && tooltipPoints; - - // Check if the points have moved outside the plot area (#1003, #4736) - if (allowMove) { - each(splat(tooltipPoints), function (point) { - if (point.plotX === undefined) { - allowMove = false; - } - }); - } - - // Just move the tooltip, #349 - if (allowMove) { - tooltip.refresh(tooltipPoints); - if (hoverPoint) { // #2500 - hoverPoint.setState(hoverPoint.state, true); - each(chart.axes, function (axis) { - if (pick(axis.options.crosshair && axis.options.crosshair.snap, true)) { - axis.drawCrosshair(null, hoverPoint); - } else { - axis.hideCrosshair(); - } - }); - - } - - // Full reset - } else { - - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - if (hoverSeries) { - hoverSeries.onMouseOut(); - } - - if (tooltip) { - tooltip.hide(delay); - } - - if (pointer._onDocumentMouseMove) { - removeEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - pointer._onDocumentMouseMove = null; - } - - // Remove crosshairs - each(chart.axes, function (axis) { - axis.hideCrosshair(); - }); - - pointer.hoverX = chart.hoverPoints = chart.hoverPoint = null; - - } - }, - - /** - * Scale series groups to a certain scale and translation - */ - scaleGroups: function (attribs, clip) { - - var chart = this.chart, - seriesAttribs; - - // Scale each series - each(chart.series, function (series) { - seriesAttribs = attribs || series.getPlotBox(); // #1701 - if (series.xAxis && series.xAxis.zoomEnabled) { - series.group.attr(seriesAttribs); - if (series.markerGroup) { - series.markerGroup.attr(seriesAttribs); - series.markerGroup.clip(clip ? chart.clipRect : null); - } - if (series.dataLabelsGroup) { - series.dataLabelsGroup.attr(seriesAttribs); - } - } - }); - - // Clip - chart.clipRect.attr(clip || chart.clipBox); - }, - - /** - * Start a drag operation - */ - dragStart: function (e) { - var chart = this.chart; - - // Record the start position - chart.mouseIsDown = e.type; - chart.cancelClick = false; - chart.mouseDownX = this.mouseDownX = e.chartX; - chart.mouseDownY = this.mouseDownY = e.chartY; - }, - - /** - * Perform a drag operation in response to a mousemove event while the mouse is down - */ - drag: function (e) { - - var chart = this.chart, - chartOptions = chart.options.chart, - chartX = e.chartX, - chartY = e.chartY, - zoomHor = this.zoomHor, - zoomVert = this.zoomVert, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - clickedInside, - size, - selectionMarker = this.selectionMarker, - mouseDownX = this.mouseDownX, - mouseDownY = this.mouseDownY, - panKey = chartOptions.panKey && e[chartOptions.panKey + 'Key']; - - // If the device supports both touch and mouse (like IE11), and we are touch-dragging - // inside the plot area, don't handle the mouse event. #4339. - if (selectionMarker && selectionMarker.touch) { - return; - } - - // If the mouse is outside the plot area, adjust to cooordinates - // inside to prevent the selection marker from going outside - if (chartX < plotLeft) { - chartX = plotLeft; - } else if (chartX > plotLeft + plotWidth) { - chartX = plotLeft + plotWidth; - } - - if (chartY < plotTop) { - chartY = plotTop; - } else if (chartY > plotTop + plotHeight) { - chartY = plotTop + plotHeight; - } - - // determine if the mouse has moved more than 10px - this.hasDragged = Math.sqrt( - Math.pow(mouseDownX - chartX, 2) + - Math.pow(mouseDownY - chartY, 2) - ); - - if (this.hasDragged > 10) { - clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); - - // make a selection - if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside && !panKey) { - if (!selectionMarker) { - this.selectionMarker = selectionMarker = chart.renderer.rect( - plotLeft, - plotTop, - zoomHor ? 1 : plotWidth, - zoomVert ? 1 : plotHeight, - 0 - ) - .attr({ - fill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)', - zIndex: 7 - }) - .add(); - } - } - - // adjust the width of the selection marker - if (selectionMarker && zoomHor) { - size = chartX - mouseDownX; - selectionMarker.attr({ - width: mathAbs(size), - x: (size > 0 ? 0 : size) + mouseDownX - }); - } - // adjust the height of the selection marker - if (selectionMarker && zoomVert) { - size = chartY - mouseDownY; - selectionMarker.attr({ - height: mathAbs(size), - y: (size > 0 ? 0 : size) + mouseDownY - }); - } - - // panning - if (clickedInside && !selectionMarker && chartOptions.panning) { - chart.pan(e, chartOptions.panning); - } - } - }, - - /** - * On mouse up or touch end across the entire document, drop the selection. - */ - drop: function (e) { - var pointer = this, - chart = this.chart, - hasPinched = this.hasPinched; - - if (this.selectionMarker) { - var selectionData = { - xAxis: [], - yAxis: [] - }, - selectionBox = this.selectionMarker, - selectionLeft = selectionBox.attr ? selectionBox.attr('x') : selectionBox.x, - selectionTop = selectionBox.attr ? selectionBox.attr('y') : selectionBox.y, - selectionWidth = selectionBox.attr ? selectionBox.attr('width') : selectionBox.width, - selectionHeight = selectionBox.attr ? selectionBox.attr('height') : selectionBox.height, - runZoom; - - // a selection has been made - if (this.hasDragged || hasPinched) { - - // record each axis' min and max - each(chart.axes, function (axis) { - if (axis.zoomEnabled && defined(axis.min) && (hasPinched || pointer[{ xAxis: 'zoomX', yAxis: 'zoomY' }[axis.coll]])) { // #859, #3569 - var horiz = axis.horiz, - minPixelPadding = e.type === 'touchend' ? axis.minPixelPadding : 0, // #1207, #3075 - selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop) + minPixelPadding), - selectionMax = axis.toValue((horiz ? selectionLeft + selectionWidth : selectionTop + selectionHeight) - minPixelPadding); - - selectionData[axis.coll].push({ - axis: axis, - min: mathMin(selectionMin, selectionMax), // for reversed axes - max: mathMax(selectionMin, selectionMax) - }); - runZoom = true; - } - }); - if (runZoom) { - fireEvent(chart, 'selection', selectionData, function (args) { - chart.zoom(extend(args, hasPinched ? { animation: false } : null)); - }); - } - - } - this.selectionMarker = this.selectionMarker.destroy(); - - // Reset scaling preview - if (hasPinched) { - this.scaleGroups(); - } - } - - // Reset all - if (chart) { // it may be destroyed on mouse up - #877 - css(chart.container, { cursor: chart._cursor }); - chart.cancelClick = this.hasDragged > 10; // #370 - chart.mouseIsDown = this.hasDragged = this.hasPinched = false; - this.pinchDown = []; - } - }, - - onContainerMouseDown: function (e) { - - e = this.normalize(e); - - // issue #295, dragging not always working in Firefox - if (e.preventDefault) { - e.preventDefault(); - } - - this.dragStart(e); - }, - - - - onDocumentMouseUp: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - }, - - /** - * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea. - * Issue #149 workaround. The mouseleave event does not always fire. - */ - onDocumentMouseMove: function (e) { - var chart = this.chart, - chartPosition = this.chartPosition; - - e = this.normalize(e, chartPosition); - - // If we're outside, hide the tooltip - if (chartPosition && !this.inClass(e.target, 'highcharts-tracker') && - !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - this.reset(); - } - }, - - /** - * When mouse leaves the container, hide the tooltip. - */ - onContainerMouseLeave: function () { - var chart = charts[hoverChartIndex]; - if (chart) { - chart.pointer.reset(); - chart.pointer.chartPosition = null; // also reset the chart position, used in #149 fix - } - }, - - // The mousemove, touchmove and touchstart event handler - onContainerMouseMove: function (e) { - - var chart = this.chart; - - hoverChartIndex = chart.index; - - e = this.normalize(e); - e.returnValue = false; // #2251, #3224 - - if (chart.mouseIsDown === 'mousedown') { - this.drag(e); - } - - // Show the tooltip and run mouse over events (#977) - if ((this.inClass(e.target, 'highcharts-tracker') || - chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { - this.runPointActions(e); - } - }, - - /** - * Utility to detect whether an element has, or has a parent with, a specific - * class name. Used on detection of tracker objects and on deciding whether - * hovering the tooltip should cause the active series to mouse out. - */ - inClass: function (element, className) { - var elemClassName; - while (element) { - elemClassName = attr(element, 'class'); - if (elemClassName) { - if (elemClassName.indexOf(className) !== -1) { - return true; - } - if (elemClassName.indexOf(PREFIX + 'container') !== -1) { - return false; - } - } - element = element.parentNode; - } - }, - - onTrackerMouseOut: function (e) { - var series = this.chart.hoverSeries, - relatedTarget = e.relatedTarget || e.toElement; - - if (series && !series.options.stickyTracking && - !this.inClass(relatedTarget, PREFIX + 'tooltip') && - !this.inClass(relatedTarget, PREFIX + 'series-' + series.index)) { // #2499, #4465 - series.onMouseOut(); - } - }, - - onContainerClick: function (e) { - var chart = this.chart, - hoverPoint = chart.hoverPoint, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop; - - e = this.normalize(e); - - if (!chart.cancelClick) { - - // On tracker click, fire the series and point events. #783, #1583 - if (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) { - - // the series click event - fireEvent(hoverPoint.series, 'click', extend(e, { - point: hoverPoint - })); - - // the point click event - if (chart.hoverPoint) { // it may be destroyed (#1844) - hoverPoint.firePointEvent('click', e); - } - - // When clicking outside a tracker, fire a chart event - } else { - extend(e, this.getCoordinates(e)); - - // fire a click event in the chart - if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { - fireEvent(chart, 'click', e); - } - } - - - } - }, - - /** - * Set the JS DOM events on the container and document. This method should contain - * a one-to-one assignment between methods and their handlers. Any advanced logic should - * be moved to the handler reflecting the event's name. - */ - setDOMEvents: function () { - - var pointer = this, - container = pointer.chart.container; - - container.onmousedown = function (e) { - pointer.onContainerMouseDown(e); - }; - container.onmousemove = function (e) { - pointer.onContainerMouseMove(e); - }; - container.onclick = function (e) { - pointer.onContainerClick(e); - }; - addEvent(container, 'mouseleave', pointer.onContainerMouseLeave); - if (chartCount === 1) { - addEvent(doc, 'mouseup', pointer.onDocumentMouseUp); - } - if (hasTouch) { - container.ontouchstart = function (e) { - pointer.onContainerTouchStart(e); - }; - container.ontouchmove = function (e) { - pointer.onContainerTouchMove(e); - }; - if (chartCount === 1) { - addEvent(doc, 'touchend', pointer.onDocumentTouchEnd); - } - } - - }, - - /** - * Destroys the Pointer object and disconnects DOM events. - */ - destroy: function () { - var prop; - - removeEvent(this.chart.container, 'mouseleave', this.onContainerMouseLeave); - if (!chartCount) { - removeEvent(doc, 'mouseup', this.onDocumentMouseUp); - removeEvent(doc, 'touchend', this.onDocumentTouchEnd); - } - - // memory and CPU leak - clearInterval(this.tooltipTimeout); - - for (prop in this) { - this[prop] = null; - } - } - }; - - - /* Support for touch devices */ - extend(Highcharts.Pointer.prototype, { - - /** - * Run translation operations - */ - pinchTranslate: function (pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { - if (this.zoomHor || this.pinchHor) { - this.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - if (this.zoomVert || this.pinchVert) { - this.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - }, - - /** - * Run translation operations for each direction (horizontal and vertical) independently - */ - pinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, forcedScale) { - var chart = this.chart, - xy = horiz ? 'x' : 'y', - XY = horiz ? 'X' : 'Y', - sChartXY = 'chart' + XY, - wh = horiz ? 'width' : 'height', - plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], - selectionWH, - selectionXY, - clipXY, - scale = forcedScale || 1, - inverted = chart.inverted, - bounds = chart.bounds[horiz ? 'h' : 'v'], - singleTouch = pinchDown.length === 1, - touch0Start = pinchDown[0][sChartXY], - touch0Now = touches[0][sChartXY], - touch1Start = !singleTouch && pinchDown[1][sChartXY], - touch1Now = !singleTouch && touches[1][sChartXY], - outOfBounds, - transformScale, - scaleKey, - setScale = function () { - if (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis - scale = forcedScale || mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start); - } - - clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; - selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale; - }; - - // Set the scale, first pass - setScale(); - - selectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not - - // Out of bounds - if (selectionXY < bounds.min) { - selectionXY = bounds.min; - outOfBounds = true; - } else if (selectionXY + selectionWH > bounds.max) { - selectionXY = bounds.max - selectionWH; - outOfBounds = true; - } - - // Is the chart dragged off its bounds, determined by dataMin and dataMax? - if (outOfBounds) { - - // Modify the touchNow position in order to create an elastic drag movement. This indicates - // to the user that the chart is responsive but can't be dragged further. - touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); - if (!singleTouch) { - touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); - } - - // Set the scale, second pass to adapt to the modified touchNow positions - setScale(); - - } else { - lastValidTouch[xy] = [touch0Now, touch1Now]; - } - - // Set geometry for clipping, selection and transformation - if (!inverted) { - clip[xy] = clipXY - plotLeftTop; - clip[wh] = selectionWH; - } - scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; - transformScale = inverted ? 1 / scale : scale; - - selectionMarker[wh] = selectionWH; - selectionMarker[xy] = selectionXY; - transform[scaleKey] = scale; - transform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start)); - }, - - /** - * Handle touch events with two touches - */ - pinch: function (e) { - - var self = this, - chart = self.chart, - pinchDown = self.pinchDown, - touches = e.touches, - touchesLength = touches.length, - lastValidTouch = self.lastValidTouch, - hasZoom = self.hasZoom, - selectionMarker = self.selectionMarker, - transform = {}, - fireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && - chart.runTrackerClick) || self.runChartClick), - clip = {}; - - // Don't initiate panning until the user has pinched. This prevents us from - // blocking page scrolling as users scroll down a long page (#4210). - if (touchesLength > 1) { - self.initiated = true; - } - - // On touch devices, only proceed to trigger click if a handler is defined - if (hasZoom && self.initiated && !fireClickEvent) { - e.preventDefault(); - } - - // Normalize each touch - map(touches, function (e) { - return self.normalize(e); - }); - - // Register the touch start position - if (e.type === 'touchstart') { - each(touches, function (e, i) { - pinchDown[i] = { chartX: e.chartX, chartY: e.chartY }; - }); - lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX]; - lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY]; - - // Identify the data bounds in pixels - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], - minPixelPadding = axis.minPixelPadding, - min = axis.toPixels(pick(axis.options.min, axis.dataMin)), - max = axis.toPixels(pick(axis.options.max, axis.dataMax)), - absMin = mathMin(min, max), - absMax = mathMax(min, max); - - // Store the bounds for use in the touchmove handler - bounds.min = mathMin(axis.pos, absMin - minPixelPadding); - bounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding); - } - }); - self.res = true; // reset on next move - - // Event type is touchmove, handle panning and pinching - } else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first - - - // Set the marker - if (!selectionMarker) { - self.selectionMarker = selectionMarker = extend({ - destroy: noop, - touch: true - }, chart.plotBox); - } - - self.pinchTranslate(pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - - self.hasPinched = hasZoom; - - // Scale and translate the groups to provide visual feedback during pinching - self.scaleGroups(transform, clip); - - // Optionally move the tooltip on touchmove - if (!hasZoom && self.followTouchMove && touchesLength === 1) { - this.runPointActions(self.normalize(e)); - } else if (self.res) { - self.res = false; - this.reset(false, 0); - } - } - }, - - /** - * General touch handler shared by touchstart and touchmove. - */ - touch: function (e, start) { - var chart = this.chart; - - hoverChartIndex = chart.index; - - if (e.touches.length === 1) { - - e = this.normalize(e); - - if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop) && !chart.openMenu) { - - // Run mouse events and display tooltip etc - if (start) { - this.runPointActions(e); - } - - this.pinch(e); - - } else if (start) { - // Hide the tooltip on touching outside the plot area (#1203) - this.reset(); - } - - } else if (e.touches.length === 2) { - this.pinch(e); - } - }, - - onContainerTouchStart: function (e) { - this.touch(e, true); - }, - - onContainerTouchMove: function (e) { - this.touch(e); - }, - - onDocumentTouchEnd: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - } - - }); - if (win.PointerEvent || win.MSPointerEvent) { - - // The touches object keeps track of the points being touched at all times - var touches = {}, - hasPointerEvent = !!win.PointerEvent, - getWebkitTouches = function () { - var key, fake = []; - fake.item = function (i) { - return this[i]; - }; - for (key in touches) { - if (touches.hasOwnProperty(key)) { - fake.push({ - pageX: touches[key].pageX, - pageY: touches[key].pageY, - target: touches[key].target - }); - } - } - return fake; - }, - translateMSPointer = function (e, method, wktype, func) { - var p; - if ((e.pointerType === 'touch' || e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[hoverChartIndex]) { - func(e); - p = charts[hoverChartIndex].pointer; - p[method]({ - type: wktype, - target: e.currentTarget, - preventDefault: noop, - touches: getWebkitTouches() - }); - } - }; - - /** - * Extend the Pointer prototype with methods for each event handler and more - */ - extend(Pointer.prototype, { - onContainerPointerDown: function (e) { - translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY, target: e.currentTarget }; - }); - }, - onContainerPointerMove: function (e) { - translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY }; - if (!touches[e.pointerId].target) { - touches[e.pointerId].target = e.currentTarget; - } - }); - }, - onDocumentPointerUp: function (e) { - translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function (e) { - delete touches[e.pointerId]; - }); - }, - - /** - * Add or remove the MS Pointer specific events - */ - batchMSEvents: function (fn) { - fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); - fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); - fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - } - }); - - // Disable default IE actions for pinch and such on chart element - wrap(Pointer.prototype, 'init', function (proceed, chart, options) { - proceed.call(this, chart, options); - if (this.hasZoom) { // #4014 - css(chart.container, { - '-ms-touch-action': NONE, - 'touch-action': NONE - }); - } - }); - - // Add IE specific touch events to chart - wrap(Pointer.prototype, 'setDOMEvents', function (proceed) { - proceed.apply(this); - if (this.hasZoom || this.followTouchMove) { - this.batchMSEvents(addEvent); - } - }); - // Destroy MS events also - wrap(Pointer.prototype, 'destroy', function (proceed) { - this.batchMSEvents(removeEvent); - proceed.call(this); - }); - } - /** - * The overview of the chart's series - */ - var Legend = Highcharts.Legend = function (chart, options) { - this.init(chart, options); - }; - - Legend.prototype = { - - /** - * Initialize the legend - */ - init: function (chart, options) { - - var legend = this, - itemStyle = options.itemStyle, - padding, - itemMarginTop = options.itemMarginTop || 0; - - this.options = options; - - if (!options.enabled) { - return; - } - - legend.itemStyle = itemStyle; - legend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle); - legend.itemMarginTop = itemMarginTop; - legend.padding = padding = pick(options.padding, 8); - legend.initialItemX = padding; - legend.initialItemY = padding - 5; // 5 is the number of pixels above the text - legend.maxItemWidth = 0; - legend.chart = chart; - legend.itemHeight = 0; - legend.symbolWidth = pick(options.symbolWidth, 16); - legend.pages = []; - - - // Render it - legend.render(); - - // move checkboxes - addEvent(legend.chart, 'endResize', function () { - legend.positionCheckboxes(); - }); - - }, - - /** - * Set the colors for the legend item - * @param {Object} item A Series or Point instance - * @param {Object} visible Dimmed or colored - */ - colorizeItem: function (item, visible) { - var legend = this, - options = legend.options, - legendItem = item.legendItem, - legendLine = item.legendLine, - legendSymbol = item.legendSymbol, - hiddenColor = legend.itemHiddenStyle.color, - textColor = visible ? options.itemStyle.color : hiddenColor, - symbolColor = visible ? (item.legendColor || item.color || '#CCC') : hiddenColor, - markerOptions = item.options && item.options.marker, - symbolAttr = { fill: symbolColor }, - key, - val; - - if (legendItem) { - legendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE - } - if (legendLine) { - legendLine.attr({ stroke: symbolColor }); - } - - if (legendSymbol) { - - // Apply marker options - if (markerOptions && legendSymbol.isMarker) { // #585 - symbolAttr.stroke = symbolColor; - markerOptions = item.convertAttribs(markerOptions); - for (key in markerOptions) { - val = markerOptions[key]; - if (val !== UNDEFINED) { - symbolAttr[key] = val; - } - } - } - - legendSymbol.attr(symbolAttr); - } - }, - - /** - * Position the legend item - * @param {Object} item A Series or Point instance - */ - positionItem: function (item) { - var legend = this, - options = legend.options, - symbolPadding = options.symbolPadding, - ltr = !options.rtl, - legendItemPos = item._legendItemPos, - itemX = legendItemPos[0], - itemY = legendItemPos[1], - checkbox = item.checkbox, - legendGroup = item.legendGroup; - - if (legendGroup && legendGroup.element) { - legendGroup.translate( - ltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4, - itemY - ); - } - - if (checkbox) { - checkbox.x = itemX; - checkbox.y = itemY; - } - }, - - /** - * Destroy a single legend item - * @param {Object} item The series or point - */ - destroyItem: function (item) { - var checkbox = item.checkbox; - - // destroy SVG elements - each(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) { - if (item[key]) { - item[key] = item[key].destroy(); - } - }); - - if (checkbox) { - discardElement(item.checkbox); - } - }, - - /** - * Destroys the legend. - */ - destroy: function () { - var legend = this, - legendGroup = legend.group, - box = legend.box; - - if (box) { - legend.box = box.destroy(); - } - - if (legendGroup) { - legend.group = legendGroup.destroy(); - } - }, - - /** - * Position the checkboxes after the width is determined - */ - positionCheckboxes: function (scrollOffset) { - var alignAttr = this.group.alignAttr, - translateY, - clipHeight = this.clipHeight || this.legendHeight, - titleHeight = this.titleHeight; - - if (alignAttr) { - translateY = alignAttr.translateY; - each(this.allItems, function (item) { - var checkbox = item.checkbox, - top; - - if (checkbox) { - top = translateY + titleHeight + checkbox.y + (scrollOffset || 0) + 3; - css(checkbox, { - left: (alignAttr.translateX + item.checkboxOffset + checkbox.x - 20) + PX, - top: top + PX, - display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE - }); - } - }); - } - }, - - /** - * Render the legend title on top of the legend - */ - renderTitle: function () { - var options = this.options, - padding = this.padding, - titleOptions = options.title, - titleHeight = 0, - bBox; - - if (titleOptions.text) { - if (!this.title) { - this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title') - .attr({ zIndex: 1 }) - .css(titleOptions.style) - .add(this.group); - } - bBox = this.title.getBBox(); - titleHeight = bBox.height; - this.offsetWidth = bBox.width; // #1717 - this.contentGroup.attr({ translateY: titleHeight }); - } - this.titleHeight = titleHeight; - }, - - /** - * Set the legend item text - */ - setText: function (item) { - var options = this.options; - item.legendItem.attr({ - text: options.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item) - }); - }, - - /** - * Render a single specific legend item - * @param {Object} item A series or point - */ - renderItem: function (item) { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - options = legend.options, - horizontal = options.layout === 'horizontal', - symbolWidth = legend.symbolWidth, - symbolPadding = options.symbolPadding, - itemStyle = legend.itemStyle, - itemHiddenStyle = legend.itemHiddenStyle, - padding = legend.padding, - itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, - ltr = !options.rtl, - itemHeight, - widthOption = options.width, - itemMarginBottom = options.itemMarginBottom || 0, - itemMarginTop = legend.itemMarginTop, - initialItemX = legend.initialItemX, - bBox, - itemWidth, - li = item.legendItem, - series = item.series && item.series.drawLegendSymbol ? item.series : item, - seriesOptions = series.options, - showCheckbox = legend.createCheckboxForItem && seriesOptions && seriesOptions.showCheckbox, - useHTML = options.useHTML; - - if (!li) { // generate it once, later move it - - // Generate the group box - // A group to hold the symbol and text. Text is to be appended in Legend class. - item.legendGroup = renderer.g('legend-item') - .attr({ zIndex: 1 }) - .add(legend.scrollGroup); - - // Generate the list item text and add it to the group - item.legendItem = li = renderer.text( - '', - ltr ? symbolWidth + symbolPadding : -symbolPadding, - legend.baseline || 0, - useHTML - ) - .css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021) - .attr({ - align: ltr ? 'left' : 'right', - zIndex: 2 - }) - .add(item.legendGroup); - - // Get the baseline for the first item - the font size is equal for all - if (!legend.baseline) { - legend.fontMetrics = renderer.fontMetrics(itemStyle.fontSize, li); - legend.baseline = legend.fontMetrics.f + 3 + itemMarginTop; - li.attr('y', legend.baseline); - } - - // Draw the legend symbol inside the group box - series.drawLegendSymbol(legend, item); - - if (legend.setItemEvents) { - legend.setItemEvents(item, li, useHTML, itemStyle, itemHiddenStyle); - } - - // Colorize the items - legend.colorizeItem(item, item.visible); - - // add the HTML checkbox on top - if (showCheckbox) { - legend.createCheckboxForItem(item); - } - } - - // Always update the text - legend.setText(item); - - // calculate the positions for the next line - bBox = li.getBBox(); - - itemWidth = item.checkboxOffset = - options.itemWidth || - item.legendItemWidth || - symbolWidth + symbolPadding + bBox.width + itemDistance + (showCheckbox ? 20 : 0); - legend.itemHeight = itemHeight = mathRound(item.legendItemHeight || bBox.height); - - // if the item exceeds the width, start a new line - if (horizontal && legend.itemX - initialItemX + itemWidth > - (widthOption || (chart.chartWidth - 2 * padding - initialItemX - options.x))) { - legend.itemX = initialItemX; - legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom; - legend.lastLineHeight = 0; // reset for next line (#915, #3976) - } - - // If the item exceeds the height, start a new column - /*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) { - legend.itemY = legend.initialItemY; - legend.itemX += legend.maxItemWidth; - legend.maxItemWidth = 0; - }*/ - - // Set the edge positions - legend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth); - legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; - legend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915 - - // cache the position of the newly generated or reordered items - item._legendItemPos = [legend.itemX, legend.itemY]; - - // advance - if (horizontal) { - legend.itemX += itemWidth; - - } else { - legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; - legend.lastLineHeight = itemHeight; - } - - // the width of the widest item - legend.offsetWidth = widthOption || mathMax( - (horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding, - legend.offsetWidth - ); - }, - - /** - * Get all items, which is one item per series for normal series and one item per point - * for pie series. - */ - getAllItems: function () { - var allItems = []; - each(this.chart.series, function (series) { - var seriesOptions = series.options; - - // Handle showInLegend. If the series is linked to another series, defaults to false. - if (!pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? UNDEFINED : false, true)) { - return; - } - - // use points or series for the legend item depending on legendType - allItems = allItems.concat( - series.legendItems || - (seriesOptions.legendType === 'point' ? - series.data : - series) - ); - }); - return allItems; - }, - - /** - * Adjust the chart margins by reserving space for the legend on only one side - * of the chart. If the position is set to a corner, top or bottom is reserved - * for horizontal legends and left or right for vertical ones. - */ - adjustMargins: function (margin, spacing) { - var chart = this.chart, - options = this.options, - // Use the first letter of each alignment option in order to detect the side - alignment = options.align.charAt(0) + options.verticalAlign.charAt(0) + options.layout.charAt(0); // #4189 - use charAt(x) notation instead of [x] for IE7 - - if (this.display && !options.floating) { - - each([ - /(lth|ct|rth)/, - /(rtv|rm|rbv)/, - /(rbh|cb|lbh)/, - /(lbv|lm|ltv)/ - ], function (alignments, side) { - if (alignments.test(alignment) && !defined(margin[side])) { - // Now we have detected on which side of the chart we should reserve space for the legend - chart[marginNames[side]] = mathMax( - chart[marginNames[side]], - chart.legend[(side + 1) % 2 ? 'legendHeight' : 'legendWidth'] + - [1, -1, -1, 1][side] * options[(side % 2) ? 'x' : 'y'] + - pick(options.margin, 12) + - spacing[side] - ); - } - }); - } - }, - - /** - * Render the legend. This method can be called both before and after - * chart.render. If called after, it will only rearrange items instead - * of creating new ones. - */ - render: function () { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - legendGroup = legend.group, - allItems, - display, - legendWidth, - legendHeight, - box = legend.box, - options = legend.options, - padding = legend.padding, - legendBorderWidth = options.borderWidth, - legendBackgroundColor = options.backgroundColor; - - legend.itemX = legend.initialItemX; - legend.itemY = legend.initialItemY; - legend.offsetWidth = 0; - legend.lastItemY = 0; - - if (!legendGroup) { - legend.group = legendGroup = renderer.g('legend') - .attr({ zIndex: 7 }) - .add(); - legend.contentGroup = renderer.g() - .attr({ zIndex: 1 }) // above background - .add(legendGroup); - legend.scrollGroup = renderer.g() - .add(legend.contentGroup); - } - - legend.renderTitle(); - - // add each series or point - allItems = legend.getAllItems(); - - // sort by legendIndex - stableSort(allItems, function (a, b) { - return ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0); - }); - - // reversed legend - if (options.reversed) { - allItems.reverse(); - } - - legend.allItems = allItems; - legend.display = display = !!allItems.length; - - // render the items - legend.lastLineHeight = 0; - each(allItems, function (item) { - legend.renderItem(item); - }); - - // Get the box - legendWidth = (options.width || legend.offsetWidth) + padding; - legendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight; - legendHeight = legend.handleOverflow(legendHeight); - legendHeight += padding; - - // Draw the border and/or background - if (legendBorderWidth || legendBackgroundColor) { - - if (!box) { - legend.box = box = renderer.rect( - 0, - 0, - legendWidth, - legendHeight, - options.borderRadius, - legendBorderWidth || 0 - ).attr({ - stroke: options.borderColor, - 'stroke-width': legendBorderWidth || 0, - fill: legendBackgroundColor || NONE - }) - .add(legendGroup) - .shadow(options.shadow); - box.isNew = true; - - } else if (legendWidth > 0 && legendHeight > 0) { - box[box.isNew ? 'attr' : 'animate']( - box.crisp({ width: legendWidth, height: legendHeight }) - ); - box.isNew = false; - } - - // hide the border if no items - box[display ? 'show' : 'hide'](); - } - - legend.legendWidth = legendWidth; - legend.legendHeight = legendHeight; - - // Now that the legend width and height are established, put the items in the - // final position - each(allItems, function (item) { - legend.positionItem(item); - }); - - // 1.x compatibility: positioning based on style - /*var props = ['left', 'right', 'top', 'bottom'], - prop, - i = 4; - while (i--) { - prop = props[i]; - if (options.style[prop] && options.style[prop] !== 'auto') { - options[i < 2 ? 'align' : 'verticalAlign'] = prop; - options[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1); - } - }*/ - - if (display) { - legendGroup.align(extend({ - width: legendWidth, - height: legendHeight - }, options), true, 'spacingBox'); - } - - if (!chart.isResizing) { - this.positionCheckboxes(); - } - }, - - /** - * Set up the overflow handling by adding navigation with up and down arrows below the - * legend. - */ - handleOverflow: function (legendHeight) { - var legend = this, - chart = this.chart, - renderer = chart.renderer, - options = this.options, - optionsY = options.y, - alignTop = options.verticalAlign === 'top', - spaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding, - maxHeight = options.maxHeight, - clipHeight, - clipRect = this.clipRect, - navOptions = options.navigation, - animation = pick(navOptions.animation, true), - arrowSize = navOptions.arrowSize || 12, - nav = this.nav, - pages = this.pages, - padding = this.padding, - lastY, - allItems = this.allItems, - clipToHeight = function (height) { - clipRect.attr({ - height: height - }); - - // useHTML - if (legend.contentGroup.div) { - legend.contentGroup.div.style.clip = 'rect(' + padding + 'px,9999px,' + (padding + height) + 'px,0)'; - } - }; - - - // Adjust the height - if (options.layout === 'horizontal') { - spaceHeight /= 2; - } - if (maxHeight) { - spaceHeight = mathMin(spaceHeight, maxHeight); - } - - // Reset the legend height and adjust the clipping rectangle - pages.length = 0; - if (legendHeight > spaceHeight) { - - this.clipHeight = clipHeight = mathMax(spaceHeight - 20 - this.titleHeight - padding, 0); - this.currentPage = pick(this.currentPage, 1); - this.fullHeight = legendHeight; - - // Fill pages with Y positions so that the top of each a legend item defines - // the scroll top for each page (#2098) - each(allItems, function (item, i) { - var y = item._legendItemPos[1], - h = mathRound(item.legendItem.getBBox().height), - len = pages.length; - - if (!len || (y - pages[len - 1] > clipHeight && (lastY || y) !== pages[len - 1])) { - pages.push(lastY || y); - len++; - } - - if (i === allItems.length - 1 && y + h - pages[len - 1] > clipHeight) { - pages.push(y); - } - if (y !== lastY) { - lastY = y; - } - }); - - // Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787) - if (!clipRect) { - clipRect = legend.clipRect = renderer.clipRect(0, padding, 9999, 0); - legend.contentGroup.clip(clipRect); - } - - clipToHeight(clipHeight); - - // Add navigation elements - if (!nav) { - this.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group); - this.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(-1, animation); - }) - .add(nav); - this.pager = renderer.text('', 15, 10) - .css(navOptions.style) - .add(nav); - this.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(1, animation); - }) - .add(nav); - } - - // Set initial position - legend.scroll(0); - - legendHeight = spaceHeight; - - } else if (nav) { - clipToHeight(chart.chartHeight); - nav.hide(); - this.scrollGroup.attr({ - translateY: 1 - }); - this.clipHeight = 0; // #1379 - } - - return legendHeight; - }, - - /** - * Scroll the legend by a number of pages - * @param {Object} scrollBy - * @param {Object} animation - */ - scroll: function (scrollBy, animation) { - var pages = this.pages, - pageCount = pages.length, - currentPage = this.currentPage + scrollBy, - clipHeight = this.clipHeight, - navOptions = this.options.navigation, - activeColor = navOptions.activeColor, - inactiveColor = navOptions.inactiveColor, - pager = this.pager, - padding = this.padding, - scrollOffset; - - // When resizing while looking at the last page - if (currentPage > pageCount) { - currentPage = pageCount; - } - - if (currentPage > 0) { - - if (animation !== UNDEFINED) { - setAnimation(animation, this.chart); - } - - this.nav.attr({ - translateX: padding, - translateY: clipHeight + this.padding + 7 + this.titleHeight, - visibility: VISIBLE - }); - this.up.attr({ - fill: currentPage === 1 ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === 1 ? 'default' : 'pointer' - }); - pager.attr({ - text: currentPage + '/' + pageCount - }); - this.down.attr({ - x: 18 + this.pager.getBBox().width, // adjust to text width - fill: currentPage === pageCount ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === pageCount ? 'default' : 'pointer' - }); - - scrollOffset = -pages[currentPage - 1] + this.initialItemY; - - this.scrollGroup.animate({ - translateY: scrollOffset - }); - - this.currentPage = currentPage; - this.positionCheckboxes(scrollOffset); - } - - } - - }; - - /* - * LegendSymbolMixin - */ - - var LegendSymbolMixin = Highcharts.LegendSymbolMixin = { - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawRectangle: function (legend, item) { - var symbolHeight = legend.options.symbolHeight || legend.fontMetrics.f; - - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - symbolHeight + 1, // #3988 - legend.symbolWidth, - symbolHeight, - legend.options.symbolRadius || 0 - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - - }, - - /** - * Get the series' symbol in the legend. This method should be overridable to create custom - * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols. - * - * @param {Object} legend The legend object - */ - drawLineMarker: function (legend) { - - var options = this.options, - markerOptions = options.marker, - radius, - legendSymbol, - symbolWidth = legend.symbolWidth, - renderer = this.chart.renderer, - legendItemGroup = this.legendGroup, - verticalCenter = legend.baseline - mathRound(legend.fontMetrics.b * 0.3), - attr; - - // Draw the line - if (options.lineWidth) { - attr = { - 'stroke-width': options.lineWidth - }; - if (options.dashStyle) { - attr.dashstyle = options.dashStyle; - } - this.legendLine = renderer.path([ - M, - 0, - verticalCenter, - L, - symbolWidth, - verticalCenter - ]) - .attr(attr) - .add(legendItemGroup); - } - - // Draw the marker - if (markerOptions && markerOptions.enabled !== false) { - radius = markerOptions.radius; - this.legendSymbol = legendSymbol = renderer.symbol( - this.symbol, - (symbolWidth / 2) - radius, - verticalCenter - radius, - 2 * radius, - 2 * radius, - markerOptions - ) - .add(legendItemGroup); - legendSymbol.isMarker = true; - } - } - }; - - // Workaround for #2030, horizontal legend items not displaying in IE11 Preview, - // and for #2580, a similar drawing flaw in Firefox 26. - // Explore if there's a general cause for this. The problem may be related - // to nested group elements, as the legend item texts are within 4 group elements. - if (/Trident\/7\.0/.test(userAgent) || isFirefox) { - wrap(Legend.prototype, 'positionItem', function (proceed, item) { - var legend = this, - runPositionItem = function () { // If chart destroyed in sync, this is undefined (#2030) - if (item._legendItemPos) { - proceed.call(legend, item); - } - }; - - // Do it now, for export and to get checkbox placement - runPositionItem(); - - // Do it after to work around the core issue - setTimeout(runPositionItem); - }); - } - /** - * The Chart class - * @param {String|Object} renderTo The DOM element to render to, or its id - * @param {Object} options - * @param {Function} callback Function to run when the chart has loaded - */ - var Chart = Highcharts.Chart = function () { - this.getArgs.apply(this, arguments); - }; - - Highcharts.chart = function (a, b, c) { - return new Chart(a, b, c); - }; - - Chart.prototype = { - - /** - * Hook for modules - */ - callbacks: [], - - /** - * Handle the arguments passed to the constructor - * @returns {Array} Arguments without renderTo - */ - getArgs: function () { - var args = [].slice.call(arguments); - - // Remove the optional first argument, renderTo, and - // set it on this. - if (isString(args[0]) || args[0].nodeName) { - this.renderTo = args.shift(); - } - this.init(args[0], args[1]); - }, - - /** - * Initialize the chart - */ - init: function (userOptions, callback) { - - // Handle regular options - var options, - seriesOptions = userOptions.series; // skip merging data points to increase performance - - userOptions.series = null; - options = merge(defaultOptions, userOptions); // do the merge - options.series = userOptions.series = seriesOptions; // set back the series data - this.userOptions = userOptions; - - var optionsChart = options.chart; - - // Create margin & spacing array - this.margin = this.splashArray('margin', optionsChart); - this.spacing = this.splashArray('spacing', optionsChart); - - var chartEvents = optionsChart.events; - - //this.runChartClick = chartEvents && !!chartEvents.click; - this.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom - - this.callback = callback; - this.isResizing = 0; - this.options = options; - //chartTitleOptions = UNDEFINED; - //chartSubtitleOptions = UNDEFINED; - - this.axes = []; - this.series = []; - this.hasCartesianSeries = optionsChart.showAxes; - //this.axisOffset = UNDEFINED; - //this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes - //this.inverted = UNDEFINED; - //this.loadingShown = UNDEFINED; - //this.container = UNDEFINED; - //this.chartWidth = UNDEFINED; - //this.chartHeight = UNDEFINED; - //this.marginRight = UNDEFINED; - //this.marginBottom = UNDEFINED; - //this.containerWidth = UNDEFINED; - //this.containerHeight = UNDEFINED; - //this.oldChartWidth = UNDEFINED; - //this.oldChartHeight = UNDEFINED; - - //this.renderTo = UNDEFINED; - //this.renderToClone = UNDEFINED; - - //this.spacingBox = UNDEFINED - - //this.legend = UNDEFINED; - - // Elements - //this.chartBackground = UNDEFINED; - //this.plotBackground = UNDEFINED; - //this.plotBGImage = UNDEFINED; - //this.plotBorder = UNDEFINED; - //this.loadingDiv = UNDEFINED; - //this.loadingSpan = UNDEFINED; - - var chart = this, - eventType; - - // Add the chart to the global lookup - chart.index = charts.length; - charts.push(chart); - chartCount++; - - // Set up auto resize - if (optionsChart.reflow !== false) { - addEvent(chart, 'load', function () { - chart.initReflow(); - }); - } - - // Chart event handlers - if (chartEvents) { - for (eventType in chartEvents) { - addEvent(chart, eventType, chartEvents[eventType]); - } - } - - chart.xAxis = []; - chart.yAxis = []; - - // Expose methods and variables - chart.animation = useCanVG ? false : pick(optionsChart.animation, true); - chart.pointCount = chart.colorCounter = chart.symbolCounter = 0; - - chart.firstRender(); - }, - - /** - * Initialize an individual series, called internally before render time - */ - initSeries: function (options) { - var chart = this, - optionsChart = chart.options.chart, - type = options.type || optionsChart.type || optionsChart.defaultSeriesType, - series, - constr = seriesTypes[type]; - - // No such series type - if (!constr) { - error(17, true); - } - - series = new constr(); - series.init(this, options); - return series; - }, - - /** - * Check whether a given point is within the plot area - * - * @param {Number} plotX Pixel x relative to the plot area - * @param {Number} plotY Pixel y relative to the plot area - * @param {Boolean} inverted Whether the chart is inverted - */ - isInsidePlot: function (plotX, plotY, inverted) { - var x = inverted ? plotY : plotX, - y = inverted ? plotX : plotY; - - return x >= 0 && - x <= this.plotWidth && - y >= 0 && - y <= this.plotHeight; - }, - - /** - * Redraw legend, axes or series based on updated data - * - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - redraw: function (animation) { - var chart = this, - axes = chart.axes, - series = chart.series, - pointer = chart.pointer, - legend = chart.legend, - redrawLegend = chart.isDirtyLegend, - hasStackedSeries, - hasDirtyStacks, - hasCartesianSeries = chart.hasCartesianSeries, - isDirtyBox = chart.isDirtyBox, - seriesLength = series.length, - i = seriesLength, - serie, - renderer = chart.renderer, - isHiddenChart = renderer.isHidden(), - afterRedraw = []; - - setAnimation(animation, chart); - - if (isHiddenChart) { - chart.cloneRenderTo(); - } - - // Adjust title layout (reflow multiline text) - chart.layOutTitles(); - - // link stacked series - while (i--) { - serie = series[i]; - - if (serie.options.stacking) { - hasStackedSeries = true; - - if (serie.isDirty) { - hasDirtyStacks = true; - break; - } - } - } - if (hasDirtyStacks) { // mark others as dirty - i = seriesLength; - while (i--) { - serie = series[i]; - if (serie.options.stacking) { - serie.isDirty = true; - } - } - } - - // Handle updated data in the series - each(series, function (serie) { - if (serie.isDirty) { - if (serie.options.legendType === 'point') { - if (serie.updateTotals) { - serie.updateTotals(); - } - redrawLegend = true; - } - } - }); - - // handle added or removed series - if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed - // draw legend graphics - legend.render(); - - chart.isDirtyLegend = false; - } - - // reset stacks - if (hasStackedSeries) { - chart.getStacks(); - } - - - if (hasCartesianSeries) { - if (!chart.isResizing) { - - // reset maxTicks - chart.maxTicks = null; - - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - } - } - - chart.getMargins(); // #3098 - - if (hasCartesianSeries) { - // If one axis is dirty, all axes must be redrawn (#792, #2169) - each(axes, function (axis) { - if (axis.isDirty) { - isDirtyBox = true; - } - }); - - // redraw axes - each(axes, function (axis) { - - // Fire 'afterSetExtremes' only if extremes are set - var key = axis.min + ',' + axis.max; - if (axis.extKey !== key) { // #821, #4452 - axis.extKey = key; - afterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119) - fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 - delete axis.eventArgs; - }); - } - if (isDirtyBox || hasStackedSeries) { - axis.redraw(); - } - }); - } - - // the plot areas size has changed - if (isDirtyBox) { - chart.drawChartBox(); - } - - - // redraw affected series - each(series, function (serie) { - if (serie.isDirty && serie.visible && - (!serie.isCartesian || serie.xAxis)) { // issue #153 - serie.redraw(); - } - }); - - // move tooltip or reset - if (pointer) { - pointer.reset(true); - } - - // redraw if canvas - renderer.draw(); - - // fire the event - fireEvent(chart, 'redraw'); - - if (isHiddenChart) { - chart.cloneRenderTo(true); - } - - // Fire callbacks that are put on hold until after the redraw - each(afterRedraw, function (callback) { - callback.call(); - }); - }, - - /** - * Get an axis, series or point object by id. - * @param id {String} The id as given in the configuration options - */ - get: function (id) { - var chart = this, - axes = chart.axes, - series = chart.series; - - var i, - j, - points; - - // search axes - for (i = 0; i < axes.length; i++) { - if (axes[i].options.id === id) { - return axes[i]; - } - } - - // search series - for (i = 0; i < series.length; i++) { - if (series[i].options.id === id) { - return series[i]; - } - } - - // search points - for (i = 0; i < series.length; i++) { - points = series[i].points || []; - for (j = 0; j < points.length; j++) { - if (points[j].id === id) { - return points[j]; - } - } - } - return null; - }, - - /** - * Create the Axis instances based on the config options - */ - getAxes: function () { - var chart = this, - options = this.options, - xAxisOptions = options.xAxis = splat(options.xAxis || {}), - yAxisOptions = options.yAxis = splat(options.yAxis || {}), - optionsArray; - - // make sure the options are arrays and add some members - each(xAxisOptions, function (axis, i) { - axis.index = i; - axis.isX = true; - }); - - each(yAxisOptions, function (axis, i) { - axis.index = i; - }); - - // concatenate all axis options into one array - optionsArray = xAxisOptions.concat(yAxisOptions); - - each(optionsArray, function (axisOptions) { - new Axis(chart, axisOptions); // eslint-disable-line no-new - }); - }, - - - /** - * Get the currently selected points from all series - */ - getSelectedPoints: function () { - var points = []; - each(this.series, function (serie) { - points = points.concat(grep(serie.points || [], function (point) { - return point.selected; - })); - }); - return points; - }, - - /** - * Get the currently selected series - */ - getSelectedSeries: function () { - return grep(this.series, function (serie) { - return serie.selected; - }); - }, - - /** - * Show the title and subtitle of the chart - * - * @param titleOptions {Object} New title options - * @param subtitleOptions {Object} New subtitle options - * - */ - setTitle: function (titleOptions, subtitleOptions, redraw) { - var chart = this, - options = chart.options, - chartTitleOptions, - chartSubtitleOptions; - - chartTitleOptions = options.title = merge(options.title, titleOptions); - chartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions); - - // add title and subtitle - each([ - ['title', titleOptions, chartTitleOptions], - ['subtitle', subtitleOptions, chartSubtitleOptions] - ], function (arr) { - var name = arr[0], - title = chart[name], - titleOptions = arr[1], - chartTitleOptions = arr[2]; - - if (title && titleOptions) { - chart[name] = title = title.destroy(); // remove old - } - - if (chartTitleOptions && chartTitleOptions.text && !title) { - chart[name] = chart.renderer.text( - chartTitleOptions.text, - 0, - 0, - chartTitleOptions.useHTML - ) - .attr({ - align: chartTitleOptions.align, - 'class': PREFIX + name, - zIndex: chartTitleOptions.zIndex || 4 - }) - .css(chartTitleOptions.style) - .add(); - } - }); - chart.layOutTitles(redraw); - }, - - /** - * Lay out the chart titles and cache the full offset height for use in getMargins - */ - layOutTitles: function (redraw) { - var titleOffset = 0, - title = this.title, - subtitle = this.subtitle, - options = this.options, - titleOptions = options.title, - subtitleOptions = options.subtitle, - requiresDirtyBox, - renderer = this.renderer, - autoWidth = this.spacingBox.width - 44; // 44 makes room for default context button - - if (title) { - title - .css({ width: (titleOptions.width || autoWidth) + PX }) - .align(extend({ - y: renderer.fontMetrics(titleOptions.style.fontSize, title).b - 3 - }, titleOptions), false, 'spacingBox'); - - if (!titleOptions.floating && !titleOptions.verticalAlign) { - titleOffset = title.getBBox().height; - } - } - if (subtitle) { - subtitle - .css({ width: (subtitleOptions.width || autoWidth) + PX }) - .align(extend({ - y: titleOffset + (titleOptions.margin - 13) + renderer.fontMetrics(subtitleOptions.style.fontSize, title).b - }, subtitleOptions), false, 'spacingBox'); - - if (!subtitleOptions.floating && !subtitleOptions.verticalAlign) { - titleOffset = mathCeil(titleOffset + subtitle.getBBox().height); - } - } - - requiresDirtyBox = this.titleOffset !== titleOffset; - this.titleOffset = titleOffset; // used in getMargins - - if (!this.isDirtyBox && requiresDirtyBox) { - this.isDirtyBox = requiresDirtyBox; - // Redraw if necessary (#2719, #2744) - if (this.hasRendered && pick(redraw, true) && this.isDirtyBox) { - this.redraw(); - } - } - }, - - /** - * Get chart width and height according to options and container size - */ - getChartSize: function () { - var chart = this, - optionsChart = chart.options.chart, - widthOption = optionsChart.width, - heightOption = optionsChart.height, - renderTo = chart.renderToClone || chart.renderTo; - - // Get inner width and height - if (!defined(widthOption)) { - chart.containerWidth = getStyle(renderTo, 'width'); - } - if (!defined(heightOption)) { - chart.containerHeight = getStyle(renderTo, 'height'); - } - - chart.chartWidth = mathMax(0, widthOption || chart.containerWidth || 600); // #1393, 1460 - chart.chartHeight = mathMax(0, pick(heightOption, - // the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7: - chart.containerHeight > 19 ? chart.containerHeight : 400)); - }, - - /** - * Create a clone of the chart's renderTo div and place it outside the viewport to allow - * size computation on chart.render and chart.redraw - */ - cloneRenderTo: function (revert) { - var clone = this.renderToClone, - container = this.container; - - // Destroy the clone and bring the container back to the real renderTo div - if (revert) { - if (clone) { - this.renderTo.appendChild(container); - discardElement(clone); - delete this.renderToClone; - } - - // Set up the clone - } else { - if (container && container.parentNode === this.renderTo) { - this.renderTo.removeChild(container); // do not clone this - } - this.renderToClone = clone = this.renderTo.cloneNode(0); - css(clone, { - position: ABSOLUTE, - top: '-9999px', - display: 'block' // #833 - }); - if (clone.style.setProperty) { // #2631 - clone.style.setProperty('display', 'block', 'important'); - } - doc.body.appendChild(clone); - if (container) { - clone.appendChild(container); - } - } - }, - - /** - * Get the containing element, determine the size and create the inner container - * div to hold the chart - */ - getContainer: function () { - var chart = this, - container, - options = chart.options, - optionsChart = options.chart, - chartWidth, - chartHeight, - renderTo = chart.renderTo, - indexAttrName = 'data-highcharts-chart', - oldChartIndex, - Ren, - containerId = 'highcharts-' + idCounter++; - - if (!renderTo) { - chart.renderTo = renderTo = optionsChart.renderTo; - } - - if (isString(renderTo)) { - chart.renderTo = renderTo = doc.getElementById(renderTo); - } - - // Display an error if the renderTo is wrong - if (!renderTo) { - error(13, true); - } - - // If the container already holds a chart, destroy it. The check for hasRendered is there - // because web pages that are saved to disk from the browser, will preserve the data-highcharts-chart - // attribute and the SVG contents, but not an interactive chart. So in this case, - // charts[oldChartIndex] will point to the wrong chart if any (#2609). - oldChartIndex = pInt(attr(renderTo, indexAttrName)); - if (!isNaN(oldChartIndex) && charts[oldChartIndex] && charts[oldChartIndex].hasRendered) { - charts[oldChartIndex].destroy(); - } - - // Make a reference to the chart from the div - attr(renderTo, indexAttrName, chart.index); - - // remove previous chart - renderTo.innerHTML = ''; - - // If the container doesn't have an offsetWidth, it has or is a child of a node - // that has display:none. We need to temporarily move it out to a visible - // state to determine the size, else the legend and tooltips won't render - // properly. The allowClone option is used in sparklines as a micro optimization, - // saving about 1-2 ms each chart. - if (!optionsChart.skipClone && !renderTo.offsetWidth) { - chart.cloneRenderTo(); - } - - // get the width and height - chart.getChartSize(); - chartWidth = chart.chartWidth; - chartHeight = chart.chartHeight; - - // create the inner container - chart.container = container = createElement(DIV, { - className: PREFIX + 'container' + - (optionsChart.className ? ' ' + optionsChart.className : ''), - id: containerId - }, extend({ - position: RELATIVE, - overflow: HIDDEN, // needed for context menu (avoid scrollbars) and - // content overflow in IE - width: chartWidth + PX, - height: chartHeight + PX, - textAlign: 'left', - lineHeight: 'normal', // #427 - zIndex: 0, // #1072 - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' - }, optionsChart.style), - chart.renderToClone || renderTo - ); - - // cache the cursor (#1650) - chart._cursor = container.style.cursor; - - // Initialize the renderer - Ren = Highcharts[optionsChart.renderer] || Renderer; - chart.renderer = new Ren( - container, - chartWidth, - chartHeight, - optionsChart.style, - optionsChart.forExport, - options.exporting && options.exporting.allowHTML - ); - - if (useCanVG) { - // If we need canvg library, extend and configure the renderer - // to get the tracker for translating mouse events - chart.renderer.create(chart, container, chartWidth, chartHeight); - } - // Add a reference to the charts index - chart.renderer.chartIndex = chart.index; - }, - - /** - * Calculate margins by rendering axis labels in a preliminary position. Title, - * subtitle and legend have already been rendered at this stage, but will be - * moved into their final positions - */ - getMargins: function (skipAxes) { - var chart = this, - spacing = chart.spacing, - margin = chart.margin, - titleOffset = chart.titleOffset; - - chart.resetMargins(); - - // Adjust for title and subtitle - if (titleOffset && !defined(margin[0])) { - chart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]); - } - - // Adjust for legend - chart.legend.adjustMargins(margin, spacing); - - // adjust for scroller - if (chart.extraBottomMargin) { - chart.marginBottom += chart.extraBottomMargin; - } - if (chart.extraTopMargin) { - chart.plotTop += chart.extraTopMargin; - } - if (!skipAxes) { - this.getAxisMargins(); - } - }, - - getAxisMargins: function () { - - var chart = this, - axisOffset = chart.axisOffset = [0, 0, 0, 0], // top, right, bottom, left - margin = chart.margin; - - // pre-render axes to get labels offset width - if (chart.hasCartesianSeries) { - each(chart.axes, function (axis) { - if (axis.visible) { - axis.getOffset(); - } - }); - } - - // Add the axis offsets - each(marginNames, function (m, side) { - if (!defined(margin[side])) { - chart[m] += axisOffset[side]; - } - }); - - chart.setChartSize(); - - }, - - /** - * Resize the chart to its container if size is not explicitly set - */ - reflow: function (e) { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderTo, - width = optionsChart.width || getStyle(renderTo, 'width'), - height = optionsChart.height || getStyle(renderTo, 'height'), - target = e ? e.target : win; - - // Width and height checks for display:none. Target is doc in IE8 and Opera, - // win in Firefox, Chrome and IE9. - if (!chart.hasUserSize && !chart.isPrinting && width && height && (target === win || target === doc)) { // #1093 - if (width !== chart.containerWidth || height !== chart.containerHeight) { - clearTimeout(chart.reflowTimeout); - // When called from window.resize, e is set, else it's called directly (#2224) - chart.reflowTimeout = syncTimeout(function () { - if (chart.container) { // It may have been destroyed in the meantime (#1257) - chart.setSize(width, height, false); - chart.hasUserSize = null; - } - }, e ? 100 : 0); - } - chart.containerWidth = width; - chart.containerHeight = height; - } - }, - - /** - * Add the event handlers necessary for auto resizing - */ - initReflow: function () { - var chart = this, - reflow = function (e) { - chart.reflow(e); - }; - - - addEvent(win, 'resize', reflow); - addEvent(chart, 'destroy', function () { - removeEvent(win, 'resize', reflow); - }); - }, - - /** - * Resize the chart to a given width and height - * @param {Number} width - * @param {Number} height - * @param {Object|Boolean} animation - */ - setSize: function (width, height, animation) { - var chart = this, - chartWidth, - chartHeight, - renderer = chart.renderer, - globalAnimation; - - // Handle the isResizing counter - chart.isResizing += 1; - - // set the animation for the current process - setAnimation(animation, chart); - - chart.oldChartHeight = chart.chartHeight; - chart.oldChartWidth = chart.chartWidth; - if (defined(width)) { - chart.chartWidth = chartWidth = mathMax(0, mathRound(width)); - chart.hasUserSize = !!chartWidth; - } - if (defined(height)) { - chart.chartHeight = chartHeight = mathMax(0, mathRound(height)); - } - - // Resize the container with the global animation applied if enabled (#2503) - globalAnimation = renderer.globalAnimation; - (globalAnimation ? animate : css)(chart.container, { - width: chartWidth + PX, - height: chartHeight + PX - }, globalAnimation); - - chart.setChartSize(true); - renderer.setSize(chartWidth, chartHeight, animation); - - // handle axes - chart.maxTicks = null; - each(chart.axes, function (axis) { - axis.isDirty = true; - axis.setScale(); - }); - - // make sure non-cartesian series are also handled - each(chart.series, function (serie) { - serie.isDirty = true; - }); - - chart.isDirtyLegend = true; // force legend redraw - chart.isDirtyBox = true; // force redraw of plot and chart border - - chart.layOutTitles(); // #2857 - chart.getMargins(); - - chart.redraw(animation); - - - chart.oldChartHeight = null; - fireEvent(chart, 'resize'); - - // Fire endResize and set isResizing back. If animation is disabled, fire without delay - globalAnimation = renderer.globalAnimation; // Reassign it before using it, it may have changed since the top of this function. - syncTimeout(function () { - if (chart) { - fireEvent(chart, 'endResize', null, function () { - chart.isResizing -= 1; - }); - } - }, globalAnimation === false ? 0 : ((globalAnimation && globalAnimation.duration) || 500)); - }, - - /** - * Set the public chart properties. This is done before and after the pre-render - * to determine margin sizes - */ - setChartSize: function (skipAxes) { - var chart = this, - inverted = chart.inverted, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - optionsChart = chart.options.chart, - spacing = chart.spacing, - clipOffset = chart.clipOffset, - clipX, - clipY, - plotLeft, - plotTop, - plotWidth, - plotHeight, - plotBorderWidth; - - chart.plotLeft = plotLeft = mathRound(chart.plotLeft); - chart.plotTop = plotTop = mathRound(chart.plotTop); - chart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight)); - chart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom)); - - chart.plotSizeX = inverted ? plotHeight : plotWidth; - chart.plotSizeY = inverted ? plotWidth : plotHeight; - - chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; - - // Set boxes used for alignment - chart.spacingBox = renderer.spacingBox = { - x: spacing[3], - y: spacing[0], - width: chartWidth - spacing[3] - spacing[1], - height: chartHeight - spacing[0] - spacing[2] - }; - chart.plotBox = renderer.plotBox = { - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }; - - plotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2); - clipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2); - clipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2); - chart.clipBox = { - x: clipX, - y: clipY, - width: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), - height: mathMax(0, mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY)) - }; - - if (!skipAxes) { - each(chart.axes, function (axis) { - axis.setAxisSize(); - axis.setAxisTranslation(); - }); - } - }, - - /** - * Initial margins before auto size margins are applied - */ - resetMargins: function () { - var chart = this; - - each(marginNames, function (m, side) { - chart[m] = pick(chart.margin[side], chart.spacing[side]); - }); - chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left - chart.clipOffset = [0, 0, 0, 0]; - }, - - /** - * Draw the borders and backgrounds for chart and plot area - */ - drawChartBox: function () { - var chart = this, - optionsChart = chart.options.chart, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartBackground = chart.chartBackground, - plotBackground = chart.plotBackground, - plotBorder = chart.plotBorder, - plotBGImage = chart.plotBGImage, - chartBorderWidth = optionsChart.borderWidth || 0, - chartBackgroundColor = optionsChart.backgroundColor, - plotBackgroundColor = optionsChart.plotBackgroundColor, - plotBackgroundImage = optionsChart.plotBackgroundImage, - plotBorderWidth = optionsChart.plotBorderWidth || 0, - mgn, - bgAttr, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - plotBox = chart.plotBox, - clipRect = chart.clipRect, - clipBox = chart.clipBox; - - // Chart area - mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); - - if (chartBorderWidth || chartBackgroundColor) { - if (!chartBackground) { - - bgAttr = { - fill: chartBackgroundColor || NONE - }; - if (chartBorderWidth) { // #980 - bgAttr.stroke = optionsChart.borderColor; - bgAttr['stroke-width'] = chartBorderWidth; - } - chart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn, - optionsChart.borderRadius, chartBorderWidth) - .attr(bgAttr) - .addClass(PREFIX + 'background') - .add() - .shadow(optionsChart.shadow); - - } else { // resize - chartBackground.animate( - chartBackground.crisp({ width: chartWidth - mgn, height: chartHeight - mgn }) - ); - } - } - - - // Plot background - if (plotBackgroundColor) { - if (!plotBackground) { - chart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0) - .attr({ - fill: plotBackgroundColor - }) - .add() - .shadow(optionsChart.plotShadow); - } else { - plotBackground.animate(plotBox); - } - } - if (plotBackgroundImage) { - if (!plotBGImage) { - chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight) - .add(); - } else { - plotBGImage.animate(plotBox); - } - } - - // Plot clip - if (!clipRect) { - chart.clipRect = renderer.clipRect(clipBox); - } else { - clipRect.animate({ - width: clipBox.width, - height: clipBox.height - }); - } - - // Plot area border - if (plotBorderWidth) { - if (!plotBorder) { - chart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth) - .attr({ - stroke: optionsChart.plotBorderColor, - 'stroke-width': plotBorderWidth, - fill: NONE, - zIndex: 1 - }) - .add(); - } else { - plotBorder.animate( - plotBorder.crisp({ x: plotLeft, y: plotTop, width: plotWidth, height: plotHeight, strokeWidth: -plotBorderWidth }) //#3282 plotBorder should be negative - ); - } - } - - // reset - chart.isDirtyBox = false; - }, - - /** - * Detect whether a certain chart property is needed based on inspecting its options - * and series. This mainly applies to the chart.invert property, and in extensions to - * the chart.angular and chart.polar properties. - */ - propFromSeries: function () { - var chart = this, - optionsChart = chart.options.chart, - klass, - seriesOptions = chart.options.series, - i, - value; - - - each(['inverted', 'angular', 'polar'], function (key) { - - // The default series type's class - klass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType]; - - // Get the value from available chart-wide properties - value = ( - chart[key] || // 1. it is set before - optionsChart[key] || // 2. it is set in the options - (klass && klass.prototype[key]) // 3. it's default series class requires it - ); - - // 4. Check if any the chart's series require it - i = seriesOptions && seriesOptions.length; - while (!value && i--) { - klass = seriesTypes[seriesOptions[i].type]; - if (klass && klass.prototype[key]) { - value = true; - } - } - - // Set the chart property - chart[key] = value; - }); - - }, - - /** - * Link two or more series together. This is done initially from Chart.render, - * and after Chart.addSeries and Series.remove. - */ - linkSeries: function () { - var chart = this, - chartSeries = chart.series; - - // Reset links - each(chartSeries, function (series) { - series.linkedSeries.length = 0; - }); - - // Apply new links - each(chartSeries, function (series) { - var linkedTo = series.options.linkedTo; - if (isString(linkedTo)) { - if (linkedTo === ':previous') { - linkedTo = chart.series[series.index - 1]; - } else { - linkedTo = chart.get(linkedTo); - } - if (linkedTo) { - linkedTo.linkedSeries.push(series); - series.linkedParent = linkedTo; - series.visible = pick(series.options.visible, linkedTo.options.visible, series.visible); // #3879 - } - } - }); - }, - - /** - * Render series for the chart - */ - renderSeries: function () { - each(this.series, function (serie) { - serie.translate(); - serie.render(); - }); - }, - - /** - * Render labels for the chart - */ - renderLabels: function () { - var chart = this, - labels = chart.options.labels; - if (labels.items) { - each(labels.items, function (label) { - var style = extend(labels.style, label.style), - x = pInt(style.left) + chart.plotLeft, - y = pInt(style.top) + chart.plotTop + 12; - - // delete to prevent rewriting in IE - delete style.left; - delete style.top; - - chart.renderer.text( - label.html, - x, - y - ) - .attr({ zIndex: 2 }) - .css(style) - .add(); - - }); - } - }, - - /** - * Render all graphics for the chart - */ - render: function () { - var chart = this, - axes = chart.axes, - renderer = chart.renderer, - options = chart.options, - tempWidth, - tempHeight, - redoHorizontal, - redoVertical; - - // Title - chart.setTitle(); - - - // Legend - chart.legend = new Legend(chart, options.legend); - - // Get stacks - if (chart.getStacks) { - chart.getStacks(); - } - - // Get chart margins - chart.getMargins(true); - chart.setChartSize(); - - // Record preliminary dimensions for later comparison - tempWidth = chart.plotWidth; - tempHeight = chart.plotHeight = chart.plotHeight - 21; // 21 is the most common correction for X axis labels - - // Get margins by pre-rendering axes - each(axes, function (axis) { - axis.setScale(); - }); - chart.getAxisMargins(); - - // If the plot area size has changed significantly, calculate tick positions again - redoHorizontal = tempWidth / chart.plotWidth > 1.1; - redoVertical = tempHeight / chart.plotHeight > 1.05; // Height is more sensitive - - if (redoHorizontal || redoVertical) { - - chart.maxTicks = null; // reset for second pass - each(axes, function (axis) { - if ((axis.horiz && redoHorizontal) || (!axis.horiz && redoVertical)) { - axis.setTickInterval(true); // update to reflect the new margins - } - }); - chart.getMargins(); // second pass to check for new labels - } - - // Draw the borders and backgrounds - chart.drawChartBox(); - - - // Axes - if (chart.hasCartesianSeries) { - each(axes, function (axis) { - if (axis.visible) { - axis.render(); - } - }); - } - - // The series - if (!chart.seriesGroup) { - chart.seriesGroup = renderer.g('series-group') - .attr({ zIndex: 3 }) - .add(); - } - chart.renderSeries(); - - // Labels - chart.renderLabels(); - - // Credits - chart.showCredits(options.credits); - - // Set flag - chart.hasRendered = true; - - }, - - /** - * Show chart credits based on config options - */ - showCredits: function (credits) { - if (credits.enabled && !this.credits) { - this.credits = this.renderer.text( - credits.text, - 0, - 0 - ) - .on('click', function () { - if (credits.href) { - win.location.href = credits.href; - } - }) - .attr({ - align: credits.position.align, - zIndex: 8 - }) - .css(credits.style) - .add() - .align(credits.position); - } - }, - - /** - * Clean up memory usage - */ - destroy: function () { - var chart = this, - axes = chart.axes, - series = chart.series, - container = chart.container, - i, - parentNode = container && container.parentNode; - - // fire the chart.destoy event - fireEvent(chart, 'destroy'); - - // Delete the chart from charts lookup array - charts[chart.index] = UNDEFINED; - chartCount--; - chart.renderTo.removeAttribute('data-highcharts-chart'); - - // remove events - removeEvent(chart); - - // ==== Destroy collections: - // Destroy axes - i = axes.length; - while (i--) { - axes[i] = axes[i].destroy(); - } - - // Destroy each series - i = series.length; - while (i--) { - series[i] = series[i].destroy(); - } - - // ==== Destroy chart properties: - each(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', - 'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', - 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) { - var prop = chart[name]; - - if (prop && prop.destroy) { - chart[name] = prop.destroy(); - } - }); - - // remove container and all SVG - if (container) { // can break in IE when destroyed before finished loading - container.innerHTML = ''; - removeEvent(container); - if (parentNode) { - discardElement(container); - } - - } - - // clean it all up - for (i in chart) { - delete chart[i]; - } - - }, - - - /** - * VML namespaces can't be added until after complete. Listening - * for Perini's doScroll hack is not enough. - */ - isReadyToRender: function () { - var chart = this; - - // Note: win == win.top is required - if ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) { // eslint-disable-line eqeqeq - if (useCanVG) { - // Delay rendering until canvg library is downloaded and ready - CanVGController.push(function () { - chart.firstRender(); - }, chart.options.global.canvasToolsURL); - } else { - doc.attachEvent('onreadystatechange', function () { - doc.detachEvent('onreadystatechange', chart.firstRender); - if (doc.readyState === 'complete') { - chart.firstRender(); - } - }); - } - return false; - } - return true; - }, - - /** - * Prepare for first rendering after all data are loaded - */ - firstRender: function () { - var chart = this, - options = chart.options, - callback = chart.callback; - - // Check whether the chart is ready to render - if (!chart.isReadyToRender()) { - return; - } - - // Create the container - chart.getContainer(); - - // Run an early event after the container and renderer are established - fireEvent(chart, 'init'); - - - chart.resetMargins(); - chart.setChartSize(); - - // Set the common chart properties (mainly invert) from the given series - chart.propFromSeries(); - - // get axes - chart.getAxes(); - - // Initialize the series - each(options.series || [], function (serieOptions) { - chart.initSeries(serieOptions); - }); - - chart.linkSeries(); - - // Run an event after axes and series are initialized, but before render. At this stage, - // the series data is indexed and cached in the xData and yData arrays, so we can access - // those before rendering. Used in Highstock. - fireEvent(chart, 'beforeRender'); - - // depends on inverted and on margins being set - if (Highcharts.Pointer) { - chart.pointer = new Pointer(chart, options); - } - - chart.render(); - - // add canvas - chart.renderer.draw(); - // run callbacks - if (callback) { - callback.apply(chart, [chart]); - } - each(chart.callbacks, function (fn) { - if (chart.index !== UNDEFINED) { // Chart destroyed in its own callback (#3600) - fn.apply(chart, [chart]); - } - }); - - // Fire the load event - fireEvent(chart, 'load'); - - // If the chart was rendered outside the top container, put it back in (#3679) - chart.cloneRenderTo(true); - - }, - - /** - * Creates arrays for spacing and margin from given options. - */ - splashArray: function (target, options) { - var oVar = options[target], - tArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar]; - - return [pick(options[target + 'Top'], tArray[0]), - pick(options[target + 'Right'], tArray[1]), - pick(options[target + 'Bottom'], tArray[2]), - pick(options[target + 'Left'], tArray[3])]; - } - }; // end Chart - - var CenteredSeriesMixin = Highcharts.CenteredSeriesMixin = { - /** - * Get the center of the pie based on the size and center options relative to the - * plot area. Borrowed by the polar and gauge series types. - */ - getCenter: function () { - - var options = this.options, - chart = this.chart, - slicingRoom = 2 * (options.slicedOffset || 0), - handleSlicingRoom, - plotWidth = chart.plotWidth - 2 * slicingRoom, - plotHeight = chart.plotHeight - 2 * slicingRoom, - centerOption = options.center, - positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], - smallestSize = mathMin(plotWidth, plotHeight), - i, - value; - - for (i = 0; i < 4; ++i) { - value = positions[i]; - handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value)); - - // i == 0: centerX, relative to width - // i == 1: centerY, relative to height - // i == 2: size, relative to smallestSize - // i == 3: innerSize, relative to size - positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + - (handleSlicingRoom ? slicingRoom : 0); - - } - // innerSize cannot be larger than size (#3632) - if (positions[3] > positions[2]) { - positions[3] = positions[2]; - } - return positions; - } - }; - - /** - * The Point object and prototype. Inheritable and used as base for PiePoint - */ - var Point = function () {}; - Point.prototype = { - - /** - * Initialize the point - * @param {Object} series The series object containing this point - * @param {Object} options The data in either number, array or object format - */ - init: function (series, options, x) { - - var point = this, - colors; - point.series = series; - point.color = series.color; // #3445 - point.applyOptions(options, x); - point.pointAttr = {}; - - if (series.options.colorByPoint) { - colors = series.options.colors || series.chart.options.colors; - point.color = point.color || colors[series.colorCounter++]; - // loop back to zero - if (series.colorCounter === colors.length) { - series.colorCounter = 0; - } - } - - series.chart.pointCount++; - return point; - }, - /** - * Apply the options containing the x and y data and possible some extra properties. - * This is called on point init or from point.update. - * - * @param {Object} options - */ - applyOptions: function (options, x) { - var point = this, - series = point.series, - pointValKey = series.options.pointValKey || series.pointValKey; - - options = Point.prototype.optionsToObject.call(this, options); - - // copy options directly to point - extend(point, options); - point.options = point.options ? extend(point.options, options) : options; - - // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. - if (pointValKey) { - point.y = point[pointValKey]; - } - - // If no x is set by now, get auto incremented value. All points must have an - // x value, however the y value can be null to create a gap in the series - if (point.x === UNDEFINED && series) { - point.x = x === UNDEFINED ? series.autoIncrement() : x; - } - - return point; - }, - - /** - * Transform number or array configs into objects - */ - optionsToObject: function (options) { - var ret = {}, - series = this.series, - keys = series.options.keys, - pointArrayMap = keys || series.pointArrayMap || ['y'], - valueCount = pointArrayMap.length, - firstItemType, - i = 0, - j = 0; - - if (typeof options === 'number' || options === null) { - ret[pointArrayMap[0]] = options; - - } else if (isArray(options)) { - // with leading x value - if (!keys && options.length > valueCount) { - firstItemType = typeof options[0]; - if (firstItemType === 'string') { - ret.name = options[0]; - } else if (firstItemType === 'number') { - ret.x = options[0]; - } - i++; - } - while (j < valueCount) { - if (!keys || options[i] !== undefined) { // Skip undefined positions for keys - ret[pointArrayMap[j]] = options[i]; - } - i++; - j++; - } - } else if (typeof options === 'object') { - ret = options; - - // This is the fastest way to detect if there are individual point dataLabels that need - // to be considered in drawDataLabels. These can only occur in object configs. - if (options.dataLabels) { - series._hasPointLabels = true; - } - - // Same approach as above for markers - if (options.marker) { - series._hasPointMarkers = true; - } - } - return ret; - }, - - /** - * Destroy a point to clear memory. Its reference still stays in series.data. - */ - destroy: function () { - var point = this, - series = point.series, - chart = series.chart, - hoverPoints = chart.hoverPoints, - prop; - - chart.pointCount--; - - if (hoverPoints) { - point.setState(); - erase(hoverPoints, point); - if (!hoverPoints.length) { - chart.hoverPoints = null; - } - - } - if (point === chart.hoverPoint) { - point.onMouseOut(); - } - - // remove all events - if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive - removeEvent(point); - point.destroyElements(); - } - - if (point.legendItem) { // pies have legend items - chart.legend.destroyItem(point); - } - - for (prop in point) { - point[prop] = null; - } - - - }, - - /** - * Destroy SVG elements associated with the point - */ - destroyElements: function () { - var point = this, - props = ['graphic', 'dataLabel', 'dataLabelUpper', 'connector', 'shadowGroup'], - prop, - i = 6; - while (i--) { - prop = props[i]; - if (point[prop]) { - point[prop] = point[prop].destroy(); - } - } - }, - - /** - * Return the configuration hash needed for the data label and tooltip formatters - */ - getLabelConfig: function () { - return { - x: this.category, - y: this.y, - color: this.color, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal - }; - }, - - /** - * Extendable method for formatting each point's tooltip line - * - * @return {String} A string to be concatenated in to the common tooltip text - */ - tooltipFormatter: function (pointFormat) { - - // Insert options for valueDecimals, valuePrefix, and valueSuffix - var series = this.series, - seriesTooltipOptions = series.tooltipOptions, - valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), - valuePrefix = seriesTooltipOptions.valuePrefix || '', - valueSuffix = seriesTooltipOptions.valueSuffix || ''; - - // Loop over the point array map and replace unformatted values with sprintf formatting markup - each(series.pointArrayMap || ['y'], function (key) { - key = '{point.' + key; // without the closing bracket - if (valuePrefix || valueSuffix) { - pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); - } - pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); - }); - - return format(pointFormat, { - point: this, - series: this.series - }); - }, - - /** - * Fire an event on the Point object. - * @param {String} eventType - * @param {Object} eventArgs Additional event arguments - * @param {Function} defaultFunction Default event handler - */ - firePointEvent: function (eventType, eventArgs, defaultFunction) { - var point = this, - series = this.series, - seriesOptions = series.options; - - // load event handlers on demand to save time on mouseover/out - if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { - this.importEvents(); - } - - // add default handler if in selection mode - if (eventType === 'click' && seriesOptions.allowPointSelect) { - defaultFunction = function (event) { - // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera - if (point.select) { // Could be destroyed by prior event handlers (#2911) - point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); - } - }; - } - - fireEvent(this, eventType, eventArgs, defaultFunction); - }, - visible: true - };/** - * @classDescription The base function which all other series types inherit from. The data in the series is stored - * in various arrays. - * - * - First, series.options.data contains all the original config options for - * each point whether added by options or methods like series.addPoint. - * - Next, series.data contains those values converted to points, but in case the series data length - * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It - * only contains the points that have been created on demand. - * - Then there's series.points that contains all currently visible point objects. In case of cropping, - * the cropped-away points are not part of this array. The series.points array starts at series.cropStart - * compared to series.data and series.options.data. If however the series data is grouped, these can't - * be correlated one to one. - * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points. - * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points. - * - * @param {Object} chart - * @param {Object} options - */ - var Series = Highcharts.Series = function () {}; - - Series.prototype = { - - isCartesian: true, - type: 'line', - pointClass: Point, - sorted: true, // requires the data to be sorted - requireSorting: true, - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor', - r: 'radius' - }, - directTouch: false, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], // each point's x and y values are stored in this.xData and this.yData - init: function (chart, options) { - var series = this, - eventType, - events, - chartSeries = chart.series, - sortByIndex = function (a, b) { - return pick(a.options.index, a._i) - pick(b.options.index, b._i); - }; - - series.chart = chart; - series.options = options = series.setOptions(options); // merge with plotOptions - series.linkedSeries = []; - - // bind the axes - series.bindAxes(); - - // set some variables - extend(series, { - name: options.name, - state: NORMAL_STATE, - pointAttr: {}, - visible: options.visible !== false, // true by default - selected: options.selected === true // false by default - }); - - // special - if (useCanVG) { - options.animation = false; - } - - // register event listeners - events = options.events; - for (eventType in events) { - addEvent(series, eventType, events[eventType]); - } - if ( - (events && events.click) || - (options.point && options.point.events && options.point.events.click) || - options.allowPointSelect - ) { - chart.runTrackerClick = true; - } - - series.getColor(); - series.getSymbol(); - - // Set the data - each(series.parallelArrays, function (key) { - series[key + 'Data'] = []; - }); - series.setData(options.data, false); - - // Mark cartesian - if (series.isCartesian) { - chart.hasCartesianSeries = true; - } - - // Register it in the chart - chartSeries.push(series); - series._i = chartSeries.length - 1; - - // Sort series according to index option (#248, #1123, #2456) - stableSort(chartSeries, sortByIndex); - if (this.yAxis) { - stableSort(this.yAxis.series, sortByIndex); - } - - each(chartSeries, function (series, i) { - series.index = i; - series.name = series.name || 'Series ' + (i + 1); - }); - - }, - - /** - * Set the xAxis and yAxis properties of cartesian series, and register the series - * in the axis.series array - */ - bindAxes: function () { - var series = this, - seriesOptions = series.options, - chart = series.chart, - axisOptions; - - each(series.axisTypes || [], function (AXIS) { // repeat for xAxis and yAxis - - each(chart[AXIS], function (axis) { // loop through the chart's axis objects - axisOptions = axis.options; - - // apply if the series xAxis or yAxis option mathches the number of the - // axis, or if undefined, use the first axis - if ((seriesOptions[AXIS] === axisOptions.index) || - (seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) || - (seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) { - - // register this series in the axis.series lookup - axis.series.push(series); - - // set this series.xAxis or series.yAxis reference - series[AXIS] = axis; - - // mark dirty for redraw - axis.isDirty = true; - } - }); - - // The series needs an X and an Y axis - if (!series[AXIS] && series.optionalAxis !== AXIS) { - error(18, true); - } - - }); - }, - - /** - * For simple series types like line and column, the data values are held in arrays like - * xData and yData for quick lookup to find extremes and more. For multidimensional series - * like bubble and map, this can be extended with arrays like zData and valueData by - * adding to the series.parallelArrays array. - */ - updateParallelArrays: function (point, i) { - var series = point.series, - args = arguments, - fn = typeof i === 'number' ? - // Insert the value in the given position - function (key) { - var val = key === 'y' && series.toYData ? series.toYData(point) : point[key]; - series[key + 'Data'][i] = val; - } : - // Apply the method specified in i with the following arguments as arguments - function (key) { - Array.prototype[i].apply(series[key + 'Data'], Array.prototype.slice.call(args, 2)); - }; - - each(series.parallelArrays, fn); - }, - - /** - * Return an auto incremented x value based on the pointStart and pointInterval options. - * This is only used if an x value is not given for the point that calls autoIncrement. - */ - autoIncrement: function () { - - var options = this.options, - xIncrement = this.xIncrement, - date, - pointInterval, - pointIntervalUnit = options.pointIntervalUnit; - - xIncrement = pick(xIncrement, options.pointStart, 0); - - this.pointInterval = pointInterval = pick(this.pointInterval, options.pointInterval, 1); - - // Added code for pointInterval strings - if (pointIntervalUnit === 'month' || pointIntervalUnit === 'year') { - date = new Date(xIncrement); - date = (pointIntervalUnit === 'month') ? - +date[setMonth](date[getMonth]() + pointInterval) : - +date[setFullYear](date[getFullYear]() + pointInterval); - pointInterval = date - xIncrement; - } - - this.xIncrement = xIncrement + pointInterval; - return xIncrement; - }, - - /** - * Divide the series data into segments divided by null values. - */ - getSegments: function () { - var series = this, - lastNull = -1, - segments = [], - i, - points = series.points, - pointsLength = points.length; - - if (pointsLength) { // no action required for [] - - // if connect nulls, just remove null points - if (series.options.connectNulls) { - i = pointsLength; - while (i--) { - if (points[i].y === null) { - points.splice(i, 1); - } - } - if (points.length) { - segments = [points]; - } - - // else, split on null points - } else { - each(points, function (point, i) { - if (point.y === null) { - if (i > lastNull + 1) { - segments.push(points.slice(lastNull + 1, i)); - } - lastNull = i; - } else if (i === pointsLength - 1) { // last value - segments.push(points.slice(lastNull + 1, i + 1)); - } - }); - } - } - - // register it - series.segments = segments; - }, - - /** - * Set the series options by merging from the options tree - * @param {Object} itemOptions - */ - setOptions: function (itemOptions) { - var chart = this.chart, - chartOptions = chart.options, - plotOptions = chartOptions.plotOptions, - userOptions = chart.userOptions || {}, - userPlotOptions = userOptions.plotOptions || {}, - typeOptions = plotOptions[this.type], - options, - zones; - - this.userOptions = itemOptions; - - // General series options take precedence over type options because otherwise, default - // type options like column.animation would be overwritten by the general option. - // But issues have been raised here (#3881), and the solution may be to distinguish - // between default option and userOptions like in the tooltip below. - options = merge( - typeOptions, - plotOptions.series, - itemOptions - ); - - // The tooltip options are merged between global and series specific options - this.tooltipOptions = merge( - defaultOptions.tooltip, - defaultOptions.plotOptions[this.type].tooltip, - userOptions.tooltip, - userPlotOptions.series && userPlotOptions.series.tooltip, - userPlotOptions[this.type] && userPlotOptions[this.type].tooltip, - itemOptions.tooltip - ); - - // Delete marker object if not allowed (#1125) - if (typeOptions.marker === null) { - delete options.marker; - } - - // Handle color zones - this.zoneAxis = options.zoneAxis; - zones = this.zones = (options.zones || []).slice(); - if ((options.negativeColor || options.negativeFillColor) && !options.zones) { - zones.push({ - value: options[this.zoneAxis + 'Threshold'] || options.threshold || 0, - color: options.negativeColor, - fillColor: options.negativeFillColor - }); - } - if (zones.length) { // Push one extra zone for the rest - if (defined(zones[zones.length - 1].value)) { - zones.push({ - color: this.color, - fillColor: this.fillColor - }); - } - } - return options; - }, - - getCyclic: function (prop, value, defaults) { - var i, - userOptions = this.userOptions, - indexName = '_' + prop + 'Index', - counterName = prop + 'Counter'; - - if (!value) { - if (defined(userOptions[indexName])) { // after Series.update() - i = userOptions[indexName]; - } else { - userOptions[indexName] = i = this.chart[counterName] % defaults.length; - this.chart[counterName] += 1; - } - value = defaults[i]; - } - this[prop] = value; - }, - - /** - * Get the series' color - */ - getColor: function () { - if (this.options.colorByPoint) { - this.options.color = null; // #4359, selected slice got series.color even when colorByPoint was set. - } else { - this.getCyclic('color', this.options.color || defaultPlotOptions[this.type].color, this.chart.options.colors); - } - }, - /** - * Get the series' symbol - */ - getSymbol: function () { - var seriesMarkerOption = this.options.marker; - - this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols); - - // don't substract radius in image symbols (#604) - if (/^url/.test(this.symbol)) { - seriesMarkerOption.radius = 0; - } - }, - - drawLegendSymbol: LegendSymbolMixin.drawLineMarker, - - /** - * Replace the series data with a new set of data - * @param {Object} data - * @param {Object} redraw - */ - setData: function (data, redraw, animation, updatePoints) { - var series = this, - oldData = series.points, - oldDataLength = (oldData && oldData.length) || 0, - dataLength, - options = series.options, - chart = series.chart, - firstPoint = null, - xAxis = series.xAxis, - hasCategories = xAxis && !!xAxis.categories, - i, - turboThreshold = options.turboThreshold, - pt, - xData = this.xData, - yData = this.yData, - pointArrayMap = series.pointArrayMap, - valueCount = pointArrayMap && pointArrayMap.length; - - data = data || []; - dataLength = data.length; - redraw = pick(redraw, true); - - // If the point count is the same as is was, just run Point.update which is - // cheaper, allows animation, and keeps references to points. - if (updatePoints !== false && dataLength && oldDataLength === dataLength && !series.cropped && !series.hasGroupedData && series.visible) { - each(data, function (point, i) { - // .update doesn't exist on a linked, hidden series (#3709) - if (oldData[i].update && point !== options.data[i]) { - oldData[i].update(point, false, null, false); - } - }); - - } else { - - // Reset properties - series.xIncrement = null; - - series.colorCounter = 0; // for series with colorByPoint (#1547) - - // Update parallel arrays - each(this.parallelArrays, function (key) { - series[key + 'Data'].length = 0; - }); - - // In turbo mode, only one- or twodimensional arrays of numbers are allowed. The - // first value is tested, and we assume that all the rest are defined the same - // way. Although the 'for' loops are similar, they are repeated inside each - // if-else conditional for max performance. - if (turboThreshold && dataLength > turboThreshold) { - - // find the first non-null point - i = 0; - while (firstPoint === null && i < dataLength) { - firstPoint = data[i]; - i++; - } - - - if (isNumber(firstPoint)) { // assume all points are numbers - var x = pick(options.pointStart, 0), - pointInterval = pick(options.pointInterval, 1); - - for (i = 0; i < dataLength; i++) { - xData[i] = x; - yData[i] = data[i]; - x += pointInterval; - } - series.xIncrement = x; - } else if (isArray(firstPoint)) { // assume all points are arrays - if (valueCount) { // [x, low, high] or [x, o, h, l, c] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt.slice(1, valueCount + 1); - } - } else { // [x, y] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt[1]; - } - } - } else { - error(12); // Highcharts expects configs to be numbers or arrays in turbo mode - } - } else { - for (i = 0; i < dataLength; i++) { - if (data[i] !== UNDEFINED) { // stray commas in oldIE - pt = { series: series }; - series.pointClass.prototype.applyOptions.apply(pt, [data[i]]); - series.updateParallelArrays(pt, i); - if (hasCategories && defined(pt.name)) { // #4401 - xAxis.names[pt.x] = pt.name; // #2046 - } - } - } - } - - // Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON - if (isString(yData[0])) { - error(14, true); - } - - series.data = []; - series.options.data = data; - //series.zData = zData; - - // destroy old points - i = oldDataLength; - while (i--) { - if (oldData[i] && oldData[i].destroy) { - oldData[i].destroy(); - } - } - - // reset minRange (#878) - if (xAxis) { - xAxis.minRange = xAxis.userMinRange; - } - - // redraw - series.isDirty = series.isDirtyData = chart.isDirtyBox = true; - animation = false; - } - - // Typically for pie series, points need to be processed and generated - // prior to rendering the legend - if (options.legendType === 'point') { // docs: legendType now supported on more series types (at least column and pie) - this.processData(); - this.generatePoints(); - } - - if (redraw) { - chart.redraw(animation); - } - }, - - /** - * Process the data by cropping away unused data points if the series is longer - * than the crop threshold. This saves computing time for lage series. - */ - processData: function (force) { - var series = this, - processedXData = series.xData, // copied during slice operation below - processedYData = series.yData, - dataLength = processedXData.length, - croppedData, - cropStart = 0, - cropped, - distance, - closestPointRange, - xAxis = series.xAxis, - i, // loop variable - options = series.options, - cropThreshold = options.cropThreshold, - getExtremesFromAll = series.getExtremesFromAll || options.getExtremesFromAll, // #4599 - isCartesian = series.isCartesian, - xExtremes, - min, - max; - - // If the series data or axes haven't changed, don't go through this. Return false to pass - // the message on to override methods like in data grouping. - if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { - return false; - } - - if (xAxis) { - xExtremes = xAxis.getExtremes(); // corrected for log axis (#3053) - min = xExtremes.min; - max = xExtremes.max; - } - - // optionally filter out points outside the plot area - if (isCartesian && series.sorted && !getExtremesFromAll && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) { - - // it's outside current extremes - if (processedXData[dataLength - 1] < min || processedXData[0] > max) { - processedXData = []; - processedYData = []; - - // only crop if it's actually spilling out - } else if (processedXData[0] < min || processedXData[dataLength - 1] > max) { - croppedData = this.cropData(series.xData, series.yData, min, max); - processedXData = croppedData.xData; - processedYData = croppedData.yData; - cropStart = croppedData.start; - cropped = true; - } - } - - - // Find the closest distance between processed points - for (i = processedXData.length - 1; i >= 0; i--) { - distance = processedXData[i] - processedXData[i - 1]; - - if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { - closestPointRange = distance; - - // Unsorted data is not supported by the line tooltip, as well as data grouping and - // navigation in Stock charts (#725) and width calculation of columns (#1900) - } else if (distance < 0 && series.requireSorting) { - error(15); - } - } - - // Record the properties - series.cropped = cropped; // undefined or true - series.cropStart = cropStart; - series.processedXData = processedXData; - series.processedYData = processedYData; - - series.closestPointRange = closestPointRange; - - }, - - /** - * Iterate over xData and crop values between min and max. Returns object containing crop start/end - * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range - */ - cropData: function (xData, yData, min, max) { - var dataLength = xData.length, - cropStart = 0, - cropEnd = dataLength, - cropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside - i, - j; - - // iterate up to find slice start - for (i = 0; i < dataLength; i++) { - if (xData[i] >= min) { - cropStart = mathMax(0, i - cropShoulder); - break; - } - } - - // proceed to find slice end - for (j = i; j < dataLength; j++) { - if (xData[j] > max) { - cropEnd = j + cropShoulder; - break; - } - } - - return { - xData: xData.slice(cropStart, cropEnd), - yData: yData.slice(cropStart, cropEnd), - start: cropStart, - end: cropEnd - }; - }, - - - /** - * Generate the data point after the data has been processed by cropping away - * unused points and optionally grouped in Highcharts Stock. - */ - generatePoints: function () { - var series = this, - options = series.options, - dataOptions = options.data, - data = series.data, - dataLength, - processedXData = series.processedXData, - processedYData = series.processedYData, - pointClass = series.pointClass, - processedDataLength = processedXData.length, - cropStart = series.cropStart || 0, - cursor, - hasGroupedData = series.hasGroupedData, - point, - points = [], - i; - - if (!data && !hasGroupedData) { - var arr = []; - arr.length = dataOptions.length; - data = series.data = arr; - } - - for (i = 0; i < processedDataLength; i++) { - cursor = cropStart + i; - if (!hasGroupedData) { - if (data[cursor]) { - point = data[cursor]; - } else if (dataOptions[cursor] !== UNDEFINED) { // #970 - data[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]); - } - points[i] = point; - } else { - // splat the y data in case of ohlc data array - points[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i]))); - } - points[i].index = cursor; // For faster access in Point.update - } - - // Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when - // swithching view from non-grouped data to grouped data (#637) - if (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) { - for (i = 0; i < dataLength; i++) { - if (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points - i += processedDataLength; - } - if (data[i]) { - data[i].destroyElements(); - data[i].plotX = UNDEFINED; // #1003 - } - } - } - - series.data = data; - series.points = points; - }, - - /** - * Calculate Y extremes for visible data - */ - getExtremes: function (yData) { - var xAxis = this.xAxis, - yAxis = this.yAxis, - xData = this.processedXData, - yDataLength, - activeYData = [], - activeCounter = 0, - xExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis - xMin = xExtremes.min, - xMax = xExtremes.max, - validValue, - withinRange, - x, - y, - i, - j; - - yData = yData || this.stackedYData || this.processedYData; - yDataLength = yData.length; - - for (i = 0; i < yDataLength; i++) { - - x = xData[i]; - y = yData[i]; - - // For points within the visible range, including the first point outside the - // visible range, consider y extremes - validValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0)); - withinRange = this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || - ((xData[i + 1] || x) >= xMin && (xData[i - 1] || x) <= xMax); - - if (validValue && withinRange) { - - j = y.length; - if (j) { // array, like ohlc or range data - while (j--) { - if (y[j] !== null) { - activeYData[activeCounter++] = y[j]; - } - } - } else { - activeYData[activeCounter++] = y; - } - } - } - this.dataMin = arrayMin(activeYData); - this.dataMax = arrayMax(activeYData); - }, - - /** - * Translate data points from raw data values to chart specific positioning data - * needed later in drawPoints, drawGraph and drawTracker. - */ - translate: function () { - if (!this.processedXData) { // hidden series - this.processData(); - } - this.generatePoints(); - var series = this, - options = series.options, - stacking = options.stacking, - xAxis = series.xAxis, - categories = xAxis.categories, - yAxis = series.yAxis, - points = series.points, - dataLength = points.length, - hasModifyValue = !!series.modifyValue, - i, - pointPlacement = options.pointPlacement, - dynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement), - threshold = options.threshold, - stackThreshold = options.startFromThreshold ? threshold : 0, - plotX, - plotY, - lastPlotX, - stackIndicator, - closestPointRangePx = Number.MAX_VALUE; - - // Translate each point - for (i = 0; i < dataLength; i++) { - var point = points[i], - xValue = point.x, - yValue = point.y, - yBottom = point.low, - stack = stacking && yAxis.stacks[(series.negStacks && yValue < (stackThreshold ? 0 : threshold) ? '-' : '') + series.stackKey], - pointStack, - stackValues; - - // Discard disallowed y values for log axes (#3434) - if (yAxis.isLog && yValue !== null && yValue <= 0) { - point.y = yValue = null; - error(10); - } - - // Get the plotX translation - point.plotX = plotX = mathMin(mathMax(-1e5, xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags')), 1e5); // #3923 - - - // Calculate the bottom y value for stacked series - if (stacking && series.visible && stack && stack[xValue]) { - stackIndicator = series.getStackIndicator(stackIndicator, xValue, series.index); - pointStack = stack[xValue]; - stackValues = pointStack.points[stackIndicator.key]; - yBottom = stackValues[0]; - yValue = stackValues[1]; - - if (yBottom === stackThreshold) { - yBottom = pick(threshold, yAxis.min); - } - if (yAxis.isLog && yBottom <= 0) { // #1200, #1232 - yBottom = null; - } - - point.total = point.stackTotal = pointStack.total; - point.percentage = pointStack.total && (point.y / pointStack.total * 100); - point.stackY = yValue; - - // Place the stack label - pointStack.setOffset(series.pointXOffset || 0, series.barW || 0); - - } - - // Set translated yBottom or remove it - point.yBottom = defined(yBottom) ? - yAxis.translate(yBottom, 0, 1, 0, 1) : - null; - - // general hook, used for Highstock compare mode - if (hasModifyValue) { - yValue = series.modifyValue(yValue, point); - } - - // Set the the plotY value, reset it for redraws - point.plotY = plotY = (typeof yValue === 'number' && yValue !== Infinity) ? - mathMin(mathMax(-1e5, yAxis.translate(yValue, 0, 1, 0, 1)), 1e5) : // #3201 - UNDEFINED; - point.isInside = plotY !== UNDEFINED && plotY >= 0 && plotY <= yAxis.len && // #3519 - plotX >= 0 && plotX <= xAxis.len; - - - // Set client related positions for mouse tracking - point.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : plotX; // #1514 - - point.negative = point.y < (threshold || 0); - - // some API data - point.category = categories && categories[point.x] !== UNDEFINED ? - categories[point.x] : point.x; - - // Determine auto enabling of markers (#3635) - if (i) { - closestPointRangePx = mathMin(closestPointRangePx, mathAbs(plotX - lastPlotX)); - } - lastPlotX = plotX; - - } - - series.closestPointRangePx = closestPointRangePx; - - // now that we have the cropped data, build the segments - series.getSegments(); - }, - - /** - * Set the clipping for the series. For animated series it is called twice, first to initiate - * animating the clip then the second time without the animation to set the final clip. - */ - setClip: function (animation) { - var chart = this.chart, - options = this.options, - renderer = chart.renderer, - inverted = chart.inverted, - seriesClipBox = this.clipBox, - clipBox = seriesClipBox || chart.clipBox, - sharedClipKey = this.sharedClipKey || ['_sharedClip', animation && animation.duration, animation && animation.easing, clipBox.height, options.xAxis, options.yAxis].join(','), // #4526 - clipRect = chart[sharedClipKey], - markerClipRect = chart[sharedClipKey + 'm']; - - // If a clipping rectangle with the same properties is currently present in the chart, use that. - if (!clipRect) { - - // When animation is set, prepare the initial positions - if (animation) { - clipBox.width = 0; - - chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( - -99, // include the width of the first marker - inverted ? -chart.plotLeft : -chart.plotTop, - 99, - inverted ? chart.chartWidth : chart.chartHeight - ); - } - chart[sharedClipKey] = clipRect = renderer.clipRect(clipBox); - - } - if (animation) { - clipRect.count += 1; - } - - if (options.clip !== false) { - this.group.clip(animation || seriesClipBox ? clipRect : chart.clipRect); - this.markerGroup.clip(markerClipRect); - this.sharedClipKey = sharedClipKey; - } - - // Remove the shared clipping rectangle when all series are shown - if (!animation) { - clipRect.count -= 1; - if (clipRect.count <= 0 && sharedClipKey && chart[sharedClipKey]) { - if (!seriesClipBox) { - chart[sharedClipKey] = chart[sharedClipKey].destroy(); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); - } - } - } - }, - - /** - * Animate in the series - */ - animate: function (init) { - var series = this, - chart = series.chart, - clipRect, - animation = series.options.animation, - sharedClipKey; - - // Animation option is set to true - if (animation && !isObject(animation)) { - animation = defaultPlotOptions[series.type].animation; - } - - // Initialize the animation. Set up the clipping rectangle. - if (init) { - - series.setClip(animation); - - // Run the animation - } else { - sharedClipKey = this.sharedClipKey; - clipRect = chart[sharedClipKey]; - if (clipRect) { - clipRect.animate({ - width: chart.plotSizeX - }, animation); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'].animate({ - width: chart.plotSizeX + 99 - }, animation); - } - - // Delete this function to allow it only once - series.animate = null; - - } - }, - - /** - * This runs after animation to land on the final plot clipping - */ - afterAnimate: function () { - this.setClip(); - fireEvent(this, 'afterAnimate'); - }, - - /** - * Draw the markers - */ - drawPoints: function () { - var series = this, - pointAttr, - points = series.points, - chart = series.chart, - plotX, - plotY, - i, - point, - radius, - symbol, - isImage, - graphic, - options = series.options, - seriesMarkerOptions = options.marker, - seriesPointAttr = series.pointAttr[''], - pointMarkerOptions, - hasPointMarker, - enabled, - isInside, - markerGroup = series.markerGroup, - xAxis = series.xAxis, - globallyEnabled = pick( - seriesMarkerOptions.enabled, - xAxis.isRadial, - series.closestPointRangePx > 2 * seriesMarkerOptions.radius - ); - - if (seriesMarkerOptions.enabled !== false || series._hasPointMarkers) { - - i = points.length; - while (i--) { - point = points[i]; - plotX = mathFloor(point.plotX); // #1843 - plotY = point.plotY; - graphic = point.graphic; - pointMarkerOptions = point.marker || {}; - hasPointMarker = !!point.marker; - enabled = (globallyEnabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled; - isInside = point.isInside; - - // only draw the point if y is defined - if (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - - // shortcuts - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || seriesPointAttr; - radius = pointAttr.r; - symbol = pick(pointMarkerOptions.symbol, series.symbol); - isImage = symbol.indexOf('url') === 0; - - if (graphic) { // update - graphic[isInside ? 'show' : 'hide'](true) // Since the marker group isn't clipped, each individual marker must be toggled - .animate(extend({ - x: plotX - radius, - y: plotY - radius - }, graphic.symbolName ? { // don't apply to image symbols #507 - width: 2 * radius, - height: 2 * radius - } : {})); - } else if (isInside && (radius > 0 || isImage)) { - point.graphic = graphic = chart.renderer.symbol( - symbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius, - hasPointMarker ? pointMarkerOptions : seriesMarkerOptions - ) - .attr(pointAttr) - .add(markerGroup); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - } - } - - }, - - /** - * Convert state properties from API naming conventions to SVG attributes - * - * @param {Object} options API options object - * @param {Object} base1 SVG attribute object to inherit from - * @param {Object} base2 Second level SVG attribute object to inherit from - */ - convertAttribs: function (options, base1, base2, base3) { - var conversion = this.pointAttrToOptions, - attr, - option, - obj = {}; - - options = options || {}; - base1 = base1 || {}; - base2 = base2 || {}; - base3 = base3 || {}; - - for (attr in conversion) { - option = conversion[attr]; - obj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]); - } - return obj; - }, - - /** - * Get the state attributes. Each series type has its own set of attributes - * that are allowed to change on a point's state change. Series wide attributes are stored for - * all series, and additionally point specific attributes are stored for all - * points with individual marker options. If such options are not defined for the point, - * a reference to the series wide attributes is stored in point.pointAttr. - */ - getAttribs: function () { - var series = this, - seriesOptions = series.options, - normalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions, - stateOptions = normalOptions.states, - stateOptionsHover = stateOptions[HOVER_STATE], - pointStateOptionsHover, - seriesColor = series.color, - seriesNegativeColor = series.options.negativeColor, - normalDefaults = { - stroke: seriesColor, - fill: seriesColor - }, - points = series.points || [], // #927 - i, - j, - threshold, - point, - seriesPointAttr = [], - pointAttr, - pointAttrToOptions = series.pointAttrToOptions, - hasPointSpecificOptions = series.hasPointSpecificOptions, - defaultLineColor = normalOptions.lineColor, - defaultFillColor = normalOptions.fillColor, - turboThreshold = seriesOptions.turboThreshold, - zones = series.zones, - zoneAxis = series.zoneAxis || 'y', - attr, - key; - - // series type specific modifications - if (seriesOptions.marker) { // line, spline, area, areaspline, scatter - - // if no hover radius is given, default to normal radius + 2 - stateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + stateOptionsHover.radiusPlus; - stateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + stateOptionsHover.lineWidthPlus; - - } else { // column, bar, pie - - // if no hover color is given, brighten the normal color - stateOptionsHover.color = stateOptionsHover.color || - Color(stateOptionsHover.color || seriesColor) - .brighten(stateOptionsHover.brightness).get(); - - // if no hover negativeColor is given, brighten the normal negativeColor - stateOptionsHover.negativeColor = stateOptionsHover.negativeColor || - Color(stateOptionsHover.negativeColor || seriesNegativeColor) - .brighten(stateOptionsHover.brightness).get(); - } - - // general point attributes for the series normal state - seriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults); - - // HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius - each([HOVER_STATE, SELECT_STATE], function (state) { - seriesPointAttr[state] = - series.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]); - }); - - // set it - series.pointAttr = seriesPointAttr; - - - // Generate the point-specific attribute collections if specific point - // options are given. If not, create a referance to the series wide point - // attributes - i = points.length; - if (!turboThreshold || i < turboThreshold || hasPointSpecificOptions) { - while (i--) { - point = points[i]; - normalOptions = (point.options && point.options.marker) || point.options; - if (normalOptions && normalOptions.enabled === false) { - normalOptions.radius = 0; - } - - if (zones.length) { - j = 0; - threshold = zones[j]; - while (point[zoneAxis] >= threshold.value) { - threshold = zones[++j]; - } - - point.color = point.fillColor = pick(threshold.color, series.color); // #3636, #4267, #4430 - inherit color from series, when color is undefined - - } - - hasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868 - - // check if the point has specific visual options - if (point.options) { - for (key in pointAttrToOptions) { - if (defined(normalOptions[pointAttrToOptions[key]])) { - hasPointSpecificOptions = true; - } - } - } - - // a specific marker config object is defined for the individual point: - // create it's own attribute collection - if (hasPointSpecificOptions) { - normalOptions = normalOptions || {}; - pointAttr = []; - stateOptions = normalOptions.states || {}; // reassign for individual point - pointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {}; - - // Handle colors for column and pies - if (!seriesOptions.marker || (point.negative && !pointStateOptionsHover.fillColor && !stateOptionsHover.fillColor)) { // column, bar, point or negative threshold for series with markers (#3636) - // If no hover color is given, brighten the normal color. #1619, #2579 - pointStateOptionsHover[series.pointAttrToOptions.fill] = pointStateOptionsHover.color || (!point.options.color && stateOptionsHover[(point.negative && seriesNegativeColor ? 'negativeColor' : 'color')]) || - Color(point.color) - .brighten(pointStateOptionsHover.brightness || stateOptionsHover.brightness) - .get(); - } - - // normal point state inherits series wide normal state - attr = { color: point.color }; // #868 - if (!defaultFillColor) { // Individual point color or negative color markers (#2219) - attr.fillColor = point.color; - } - if (!defaultLineColor) { - attr.lineColor = point.color; // Bubbles take point color, line markers use white - } - // Color is explicitly set to null or undefined (#1288, #4068) - if (normalOptions.hasOwnProperty('color') && !normalOptions.color) { - delete normalOptions.color; - } - pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]); - - // inherit from point normal and series hover - pointAttr[HOVER_STATE] = series.convertAttribs( - stateOptions[HOVER_STATE], - seriesPointAttr[HOVER_STATE], - pointAttr[NORMAL_STATE] - ); - - // inherit from point normal and series hover - pointAttr[SELECT_STATE] = series.convertAttribs( - stateOptions[SELECT_STATE], - seriesPointAttr[SELECT_STATE], - pointAttr[NORMAL_STATE] - ); - - - // no marker config object is created: copy a reference to the series-wide - // attribute collection - } else { - pointAttr = seriesPointAttr; - } - - point.pointAttr = pointAttr; - } - } - }, - - /** - * Clear DOM objects and free up memory - */ - destroy: function () { - var series = this, - chart = series.chart, - issue134 = /AppleWebKit\/533/.test(userAgent), - destroy, - i, - data = series.data || [], - point, - prop, - axis; - - // add event hook - fireEvent(series, 'destroy'); - - // remove all events - removeEvent(series); - - // erase from axes - each(series.axisTypes || [], function (AXIS) { - axis = series[AXIS]; - if (axis) { - erase(axis.series, series); - axis.isDirty = axis.forceRedraw = true; - } - }); - - // remove legend items - if (series.legendItem) { - series.chart.legend.destroyItem(series); - } - - // destroy all points with their elements - i = data.length; - while (i--) { - point = data[i]; - if (point && point.destroy) { - point.destroy(); - } - } - series.points = null; - - // Clear the animation timeout if we are destroying the series during initial animation - clearTimeout(series.animationTimeout); - - // Destroy all SVGElements associated to the series - for (prop in series) { - if (series[prop] instanceof SVGElement && !series[prop].survive) { // Survive provides a hook for not destroying - - // issue 134 workaround - destroy = issue134 && prop === 'group' ? - 'hide' : - 'destroy'; - - series[prop][destroy](); - } - } - - // remove from hoverSeries - if (chart.hoverSeries === series) { - chart.hoverSeries = null; - } - erase(chart.series, series); - - // clear all members - for (prop in series) { - delete series[prop]; - } - }, - - /** - * Return the graph path of a segment - */ - getSegmentPath: function (segment) { - var series = this, - segmentPath = [], - step = series.options.step; - - // build the segment line - each(segment, function (point, i) { - - var plotX = point.plotX, - plotY = point.plotY, - lastPoint; - - if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object - segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); - - } else { - - // moveTo or lineTo - segmentPath.push(i ? L : M); - - // step line? - if (step && i) { - lastPoint = segment[i - 1]; - if (step === 'right') { - segmentPath.push( - lastPoint.plotX, - plotY, - L - ); - - } else if (step === 'center') { - segmentPath.push( - (lastPoint.plotX + plotX) / 2, - lastPoint.plotY, - L, - (lastPoint.plotX + plotX) / 2, - plotY, - L - ); - - } else { - segmentPath.push( - plotX, - lastPoint.plotY, - L - ); - } - } - - // normal line to next point - segmentPath.push( - point.plotX, - point.plotY - ); - } - }); - - return segmentPath; - }, - - /** - * Get the graph path - */ - getGraphPath: function () { - var series = this, - graphPath = [], - segmentPath, - singlePoints = []; // used in drawTracker - - // Divide into segments and build graph and area paths - each(series.segments, function (segment) { - - segmentPath = series.getSegmentPath(segment); - - // add the segment to the graph, or a single point for tracking - if (segment.length > 1) { - graphPath = graphPath.concat(segmentPath); - } else { - singlePoints.push(segment[0]); - } - }); - - // Record it for use in drawGraph and drawTracker, and return graphPath - series.singlePoints = singlePoints; - series.graphPath = graphPath; - - return graphPath; - - }, - - /** - * Draw the actual graph - */ - drawGraph: function () { - var series = this, - options = this.options, - props = [['graph', options.lineColor || this.color, options.dashStyle]], - lineWidth = options.lineWidth, - roundCap = options.linecap !== 'square', - graphPath = this.getGraphPath(), - fillColor = (this.fillGraph && this.color) || NONE, // polygon series use filled graph - zones = this.zones; - - each(zones, function (threshold, i) { - props.push(['zoneGraph' + i, threshold.color || series.color, threshold.dashStyle || options.dashStyle]); - }); - - // Draw the graph - each(props, function (prop, i) { - var graphKey = prop[0], - graph = series[graphKey], - attribs; - - if (graph) { - graph.animate({ d: graphPath }); - - } else if ((lineWidth || fillColor) && graphPath.length) { // #1487 - attribs = { - stroke: prop[1], - 'stroke-width': lineWidth, - fill: fillColor, - zIndex: 1 // #1069 - }; - if (prop[2]) { - attribs.dashstyle = prop[2]; - } else if (roundCap) { - attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; - } - - series[graphKey] = series.chart.renderer.path(graphPath) - .attr(attribs) - .add(series.group) - .shadow((i < 2) && options.shadow); // add shadow to normal series (0) or to first zone (1) #3932 - } - }); - }, - - /** - * Clip the graphs into the positive and negative coloured graphs - */ - applyZones: function () { - var series = this, - chart = this.chart, - renderer = chart.renderer, - zones = this.zones, - translatedFrom, - translatedTo, - clips = this.clips || [], - clipAttr, - graph = this.graph, - area = this.area, - chartSizeMax = mathMax(chart.chartWidth, chart.chartHeight), - axis = this[(this.zoneAxis || 'y') + 'Axis'], - extremes, - reversed = axis.reversed, - inverted = chart.inverted, - horiz = axis.horiz, - pxRange, - pxPosMin, - pxPosMax, - ignoreZones = false; - - if (zones.length && (graph || area) && axis.min !== UNDEFINED) { - // The use of the Color Threshold assumes there are no gaps - // so it is safe to hide the original graph and area - if (graph) { - graph.hide(); - } - if (area) { - area.hide(); - } - - // Create the clips - extremes = axis.getExtremes(); - each(zones, function (threshold, i) { - - translatedFrom = reversed ? - (horiz ? chart.plotWidth : 0) : - (horiz ? 0 : axis.toPixels(extremes.min)); - translatedFrom = mathMin(mathMax(pick(translatedTo, translatedFrom), 0), chartSizeMax); - translatedTo = mathMin(mathMax(mathRound(axis.toPixels(pick(threshold.value, extremes.max), true)), 0), chartSizeMax); - - if (ignoreZones) { - translatedFrom = translatedTo = axis.toPixels(extremes.max); - } - - pxRange = Math.abs(translatedFrom - translatedTo); - pxPosMin = mathMin(translatedFrom, translatedTo); - pxPosMax = mathMax(translatedFrom, translatedTo); - if (axis.isXAxis) { - clipAttr = { - x: inverted ? pxPosMax : pxPosMin, - y: 0, - width: pxRange, - height: chartSizeMax - }; - if (!horiz) { - clipAttr.x = chart.plotHeight - clipAttr.x; - } - } else { - clipAttr = { - x: 0, - y: inverted ? pxPosMax : pxPosMin, - width: chartSizeMax, - height: pxRange - }; - if (horiz) { - clipAttr.y = chart.plotWidth - clipAttr.y; - } - } - - /// VML SUPPPORT - if (chart.inverted && renderer.isVML) { - if (axis.isXAxis) { - clipAttr = { - x: 0, - y: reversed ? pxPosMin : pxPosMax, - height: clipAttr.width, - width: chart.chartWidth - }; - } else { - clipAttr = { - x: clipAttr.y - chart.plotLeft - chart.spacingBox.x, - y: 0, - width: clipAttr.height, - height: chart.chartHeight - }; - } - } - /// END OF VML SUPPORT - - if (clips[i]) { - clips[i].animate(clipAttr); - } else { - clips[i] = renderer.clipRect(clipAttr); - - if (graph) { - series['zoneGraph' + i].clip(clips[i]); - } - - if (area) { - series['zoneArea' + i].clip(clips[i]); - } - } - // if this zone extends out of the axis, ignore the others - ignoreZones = threshold.value > extremes.max; - }); - this.clips = clips; - } - }, - - /** - * Initialize and perform group inversion on series.group and series.markerGroup - */ - invertGroups: function () { - var series = this, - chart = series.chart; - - // Pie, go away (#1736) - if (!series.xAxis) { - return; - } - - // A fixed size is needed for inversion to work - function setInvert() { - var size = { - width: series.yAxis.len, - height: series.xAxis.len - }; - - each(['group', 'markerGroup'], function (groupName) { - if (series[groupName]) { - series[groupName].attr(size).invert(); - } - }); - } - - addEvent(chart, 'resize', setInvert); // do it on resize - addEvent(series, 'destroy', function () { - removeEvent(chart, 'resize', setInvert); - }); - - // Do it now - setInvert(); // do it now - - // On subsequent render and redraw, just do setInvert without setting up events again - series.invertGroups = setInvert; - }, - - /** - * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and - * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size. - */ - plotGroup: function (prop, name, visibility, zIndex, parent) { - var group = this[prop], - isNew = !group; - - // Generate it on first call - if (isNew) { - this[prop] = group = this.chart.renderer.g(name) - .attr({ - zIndex: zIndex || 0.1 // IE8 needs this - }) - .add(parent); - - group.addClass('highcharts-series-' + this.index); - } - - // Place it on first and subsequent (redraw) calls - group.attr({ visibility: visibility })[isNew ? 'attr' : 'animate'](this.getPlotBox()); - return group; - }, - - /** - * Get the translation and scale for the plot area of this series - */ - getPlotBox: function () { - var chart = this.chart, - xAxis = this.xAxis, - yAxis = this.yAxis; - - // Swap axes for inverted (#2339) - if (chart.inverted) { - xAxis = yAxis; - yAxis = this.xAxis; - } - return { - translateX: xAxis ? xAxis.left : chart.plotLeft, - translateY: yAxis ? yAxis.top : chart.plotTop, - scaleX: 1, // #1623 - scaleY: 1 - }; - }, - - /** - * Render the graph and markers - */ - render: function () { - var series = this, - chart = series.chart, - group, - options = series.options, - animation = options.animation, - // Animation doesn't work in IE8 quirks when the group div is hidden, - // and looks bad in other oldIE - animDuration = (animation && !!series.animate && chart.renderer.isSVG && pick(animation.duration, 500)) || 0, - visibility = series.visible ? 'inherit' : 'hidden', // #2597 - zIndex = options.zIndex, - hasRendered = series.hasRendered, - chartSeriesGroup = chart.seriesGroup; - - // the group - group = series.plotGroup( - 'group', - 'series', - visibility, - zIndex, - chartSeriesGroup - ); - - series.markerGroup = series.plotGroup( - 'markerGroup', - 'markers', - visibility, - zIndex, - chartSeriesGroup - ); - - // initiate the animation - if (animDuration) { - series.animate(true); - } - - // cache attributes for shapes - series.getAttribs(); - - // SVGRenderer needs to know this before drawing elements (#1089, #1795) - group.inverted = series.isCartesian ? chart.inverted : false; - - // draw the graph if any - if (series.drawGraph) { - series.drawGraph(); - series.applyZones(); - } - - each(series.points, function (point) { - if (point.redraw) { - point.redraw(); - } - }); - - // draw the data labels (inn pies they go before the points) - if (series.drawDataLabels) { - series.drawDataLabels(); - } - - // draw the points - if (series.visible) { - series.drawPoints(); - } - - - // draw the mouse tracking area - if (series.drawTracker && series.options.enableMouseTracking !== false) { - series.drawTracker(); - } - - // Handle inverted series and tracker groups - if (chart.inverted) { - series.invertGroups(); - } - - // Initial clipping, must be defined after inverting groups for VML. Applies to columns etc. (#3839). - if (options.clip !== false && !series.sharedClipKey && !hasRendered) { - group.clip(chart.clipRect); - } - - // Run the animation - if (animDuration) { - series.animate(); - } - - // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option - // which should be available to the user). - if (!hasRendered) { - series.animationTimeout = syncTimeout(function () { - series.afterAnimate(); - }, animDuration); - } - - series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - series.hasRendered = true; - }, - - /** - * Redraw the series after an update in the axes. - */ - redraw: function () { - var series = this, - chart = series.chart, - wasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after - wasDirty = series.isDirty, - group = series.group, - xAxis = series.xAxis, - yAxis = series.yAxis; - - // reposition on resize - if (group) { - if (chart.inverted) { - group.attr({ - width: chart.plotWidth, - height: chart.plotHeight - }); - } - - group.animate({ - translateX: pick(xAxis && xAxis.left, chart.plotLeft), - translateY: pick(yAxis && yAxis.top, chart.plotTop) - }); - } - - series.translate(); - series.render(); - if (wasDirtyData) { - fireEvent(series, 'updatedData'); - } - if (wasDirty || wasDirtyData) { // #3945 recalculate the kdtree when dirty - delete this.kdTree; // #3868 recalculate the kdtree with dirty data - } - }, - - /** - * KD Tree && PointSearching Implementation - */ - - kdDimensions: 1, - kdAxisArray: ['clientX', 'plotY'], - - searchPoint: function (e, compareX) { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - inverted = series.chart.inverted; - - return this.searchKDTree({ - clientX: inverted ? xAxis.len - e.chartY + xAxis.pos : e.chartX - xAxis.pos, - plotY: inverted ? yAxis.len - e.chartX + yAxis.pos : e.chartY - yAxis.pos - }, compareX); - }, - - buildKDTree: function () { - var series = this, - dimensions = series.kdDimensions; - - // Internal function - function _kdtree(points, depth, dimensions) { - var axis, median, length = points && points.length; - - if (length) { - - // alternate between the axis - axis = series.kdAxisArray[depth % dimensions]; - - // sort point array - points.sort(function (a, b) { - return a[axis] - b[axis]; - }); - - median = Math.floor(length / 2); - - // build and return nod - return { - point: points[median], - left: _kdtree(points.slice(0, median), depth + 1, dimensions), - right: _kdtree(points.slice(median + 1), depth + 1, dimensions) - }; - - } - } - - // Start the recursive build process with a clone of the points array and null points filtered out (#3873) - function startRecursive() { - var points = grep(series.points || [], function (point) { // #4390 - return point.y !== null; - }); - - series.kdTree = _kdtree(points, dimensions, dimensions); - } - delete series.kdTree; - - // For testing tooltips, don't build async - syncTimeout(startRecursive, series.options.kdNow ? 0 : 1); - }, - - searchKDTree: function (point, compareX) { - var series = this, - kdX = this.kdAxisArray[0], - kdY = this.kdAxisArray[1], - kdComparer = compareX ? 'distX' : 'dist'; - - // Set the one and two dimensional distance on the point object - function setDistance(p1, p2) { - var x = (defined(p1[kdX]) && defined(p2[kdX])) ? Math.pow(p1[kdX] - p2[kdX], 2) : null, - y = (defined(p1[kdY]) && defined(p2[kdY])) ? Math.pow(p1[kdY] - p2[kdY], 2) : null, - r = (x || 0) + (y || 0); - - p2.dist = defined(r) ? Math.sqrt(r) : Number.MAX_VALUE; - p2.distX = defined(x) ? Math.sqrt(x) : Number.MAX_VALUE; - } - function _search(search, tree, depth, dimensions) { - var point = tree.point, - axis = series.kdAxisArray[depth % dimensions], - tdist, - sideA, - sideB, - ret = point, - nPoint1, - nPoint2; - - setDistance(search, point); - - // Pick side based on distance to splitting point - tdist = search[axis] - point[axis]; - sideA = tdist < 0 ? 'left' : 'right'; - sideB = tdist < 0 ? 'right' : 'left'; - - // End of tree - if (tree[sideA]) { - nPoint1 = _search(search, tree[sideA], depth + 1, dimensions); - - ret = (nPoint1[kdComparer] < ret[kdComparer] ? nPoint1 : point); - } - if (tree[sideB]) { - // compare distance to current best to splitting point to decide wether to check side B or not - if (Math.sqrt(tdist * tdist) < ret[kdComparer]) { - nPoint2 = _search(search, tree[sideB], depth + 1, dimensions); - ret = (nPoint2[kdComparer] < ret[kdComparer] ? nPoint2 : ret); - } - } - - return ret; - } - - if (!this.kdTree) { - this.buildKDTree(); - } - - if (this.kdTree) { - return _search(point, - this.kdTree, this.kdDimensions, this.kdDimensions); - } - } - - }; // end Series prototype - - /** - * The class for stack items - */ - function StackItem(axis, options, isNegative, x, stackOption) { - - var inverted = axis.chart.inverted; - - this.axis = axis; - - // Tells if the stack is negative - this.isNegative = isNegative; - - // Save the options to be able to style the label - this.options = options; - - // Save the x value to be able to position the label later - this.x = x; - - // Initialize total value - this.total = null; - - // This will keep each points' extremes stored by series.index and point index - this.points = {}; - - // Save the stack option on the series configuration object, and whether to treat it as percent - this.stack = stackOption; - - // The align options and text align varies on whether the stack is negative and - // if the chart is inverted or not. - // First test the user supplied value, then use the dynamic. - this.alignOptions = { - align: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'), - verticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), - y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), - x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) - }; - - this.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center'); - } - - StackItem.prototype = { - destroy: function () { - destroyObjectProperties(this, this.axis); - }, - - /** - * Renders the stack total label and adds it to the stack label group. - */ - render: function (group) { - var options = this.options, - formatOption = options.format, - str = formatOption ? - format(formatOption, this) : - options.formatter.call(this); // format the text in the label - - // Change the text to reflect the new total and set visibility to hidden in case the serie is hidden - if (this.label) { - this.label.attr({ text: str, visibility: 'hidden' }); - // Create new label - } else { - this.label = - this.axis.chart.renderer.text(str, null, null, options.useHTML) // dummy positions, actual position updated with setOffset method in columnseries - .css(options.style) // apply style - .attr({ - align: this.textAlign, // fix the text-anchor - rotation: options.rotation, // rotation - visibility: HIDDEN // hidden until setOffset is called - }) - .add(group); // add to the labels-group - } - }, - - /** - * Sets the offset that the stack has from the x value and repositions the label. - */ - setOffset: function (xOffset, xWidth) { - var stackItem = this, - axis = stackItem.axis, - chart = axis.chart, - inverted = chart.inverted, - reversed = axis.reversed, - neg = (this.isNegative && !reversed) || (!this.isNegative && reversed), // #4056 - y = axis.translate(axis.usePercentage ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates - yZero = axis.translate(0), // stack origin - h = mathAbs(y - yZero), // stack height - x = chart.xAxis[0].translate(this.x) + xOffset, // stack x position - plotHeight = chart.plotHeight, - stackBox = { // this is the box for the complete stack - x: inverted ? (neg ? y : y - h) : x, - y: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y), - width: inverted ? h : xWidth, - height: inverted ? xWidth : h - }, - label = this.label, - alignAttr; - - if (label) { - label.align(this.alignOptions, null, stackBox); // align the label to the box - - // Set visibility (#678) - alignAttr = label.alignAttr; - label[this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? 'show' : 'hide'](true); - } - } - }; - - /** - * Generate stacks for each series and calculate stacks total values - */ - Chart.prototype.getStacks = function () { - var chart = this; - - // reset stacks for each yAxis - each(chart.yAxis, function (axis) { - if (axis.stacks && axis.hasVisibleSeries) { - axis.oldStacks = axis.stacks; - } - }); - - each(chart.series, function (series) { - if (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) { - series.stackKey = series.type + pick(series.options.stack, ''); - } - }); - }; - - - // Stacking methods defined on the Axis prototype - - /** - * Build the stacks from top down - */ - Axis.prototype.buildStacks = function () { - var series = this.series, - reversedStacks = pick(this.options.reversedStacks, true), - i = series.length; - if (!this.isXAxis) { - this.usePercentage = false; - while (i--) { - series[reversedStacks ? i : series.length - i - 1].setStackedPoints(); - } - // Loop up again to compute percent stack - if (this.usePercentage) { - for (i = 0; i < series.length; i++) { - series[i].setPercentStacks(); - } - } - } - }; - - Axis.prototype.renderStackTotals = function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - stacks = axis.stacks, - stackKey, - oneStack, - stackCategory, - stackTotalGroup = axis.stackTotalGroup; - - // Create a separate group for the stack total labels - if (!stackTotalGroup) { - axis.stackTotalGroup = stackTotalGroup = - renderer.g('stack-labels') - .attr({ - visibility: VISIBLE, - zIndex: 6 - }) - .add(); - } - - // plotLeft/Top will change when y axis gets wider so we need to translate the - // stackTotalGroup at every render call. See bug #506 and #516 - stackTotalGroup.translate(chart.plotLeft, chart.plotTop); - - // Render each stack total - for (stackKey in stacks) { - oneStack = stacks[stackKey]; - for (stackCategory in oneStack) { - oneStack[stackCategory].render(stackTotalGroup); - } - } - }; - - /** - * Set all the stacks to initial states and destroy unused ones. - */ - Axis.prototype.resetStacks = function () { - var stacks = this.stacks, - type, - i; - if (!this.isXAxis) { - for (type in stacks) { - for (i in stacks[type]) { - - // Clean up memory after point deletion (#1044, #4320) - if (stacks[type][i].touched < this.stacksTouched) { - stacks[type][i].destroy(); - delete stacks[type][i]; - - // Reset stacks - } else { - stacks[type][i].total = null; - stacks[type][i].cum = 0; - } - } - } - } - }; - - Axis.prototype.cleanStacks = function () { - var stacks, type, i; - - if (!this.isXAxis) { - if (this.oldStacks) { - stacks = this.stacks = this.oldStacks; - } - - // reset stacks - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].cum = stacks[type][i].total; - } - } - } - }; - - - // Stacking methods defnied for Series prototype - - /** - * Adds series' points value to corresponding stack - */ - Series.prototype.setStackedPoints = function () { - if (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) { - return; - } - - var series = this, - xData = series.processedXData, - yData = series.processedYData, - stackedYData = [], - yDataLength = yData.length, - seriesOptions = series.options, - threshold = seriesOptions.threshold, - stackThreshold = seriesOptions.startFromThreshold ? threshold : 0, - stackOption = seriesOptions.stack, - stacking = seriesOptions.stacking, - stackKey = series.stackKey, - negKey = '-' + stackKey, - negStacks = series.negStacks, - yAxis = series.yAxis, - stacks = yAxis.stacks, - oldStacks = yAxis.oldStacks, - stackIndicator, - isNegative, - stack, - other, - key, - pointKey, - i, - x, - y; - - - yAxis.stacksTouched += 1; - - // loop over the non-null y values and read them into a local array - for (i = 0; i < yDataLength; i++) { - x = xData[i]; - y = yData[i]; - stackIndicator = series.getStackIndicator(stackIndicator, x, series.index); - pointKey = stackIndicator.key; - // Read stacked values into a stack based on the x value, - // the sign of y and the stack key. Stacking is also handled for null values (#739) - isNegative = negStacks && y < (stackThreshold ? 0 : threshold); - key = isNegative ? negKey : stackKey; - - // Create empty object for this stack if it doesn't exist yet - if (!stacks[key]) { - stacks[key] = {}; - } - - // Initialize StackItem for this x - if (!stacks[key][x]) { - if (oldStacks[key] && oldStacks[key][x]) { - stacks[key][x] = oldStacks[key][x]; - stacks[key][x].total = null; - } else { - stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption); - } - } - - // If the StackItem doesn't exist, create it first - stack = stacks[key][x]; - stack.points[pointKey] = [pick(stack.cum, stackThreshold)]; - stack.touched = yAxis.stacksTouched; - - // In area charts, if there are multiple points on the same X value, let the - // area fill the full span of those points - if (stackIndicator.index > 0 && series.singleStacks === false) { - stack.points[pointKey][0] = stack.points[series.index + ',' + x + ',0'][0]; - } - - // Add value to the stack total - if (stacking === 'percent') { - - // Percent stacked column, totals are the same for the positive and negative stacks - other = isNegative ? stackKey : negKey; - if (negStacks && stacks[other] && stacks[other][x]) { - other = stacks[other][x]; - stack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0; - - // Percent stacked areas - } else { - stack.total = correctFloat(stack.total + (mathAbs(y) || 0)); - } - } else { - stack.total = correctFloat(stack.total + (y || 0)); - } - - stack.cum = pick(stack.cum, stackThreshold) + (y || 0); - - stack.points[pointKey].push(stack.cum); - stackedYData[i] = stack.cum; - - } - - if (stacking === 'percent') { - yAxis.usePercentage = true; - } - - this.stackedYData = stackedYData; // To be used in getExtremes - - // Reset old stacks - yAxis.oldStacks = {}; - }; - - /** - * Iterate over all stacks and compute the absolute values to percent - */ - Series.prototype.setPercentStacks = function () { - var series = this, - stackKey = series.stackKey, - stacks = series.yAxis.stacks, - processedXData = series.processedXData, - stackIndicator; - - each([stackKey, '-' + stackKey], function (key) { - var i = processedXData.length, - x, - stack, - pointExtremes, - totalFactor; - - while (i--) { - x = processedXData[i]; - stackIndicator = series.getStackIndicator(stackIndicator, x, series.index); - stack = stacks[key] && stacks[key][x]; - pointExtremes = stack && stack.points[stackIndicator.key]; - if (pointExtremes) { - totalFactor = stack.total ? 100 / stack.total : 0; - pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value - pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value - series.stackedYData[i] = pointExtremes[1]; - } - } - }); - }; - - /** - * Get stack indicator, according to it's x-value, to determine points with the same x-value - */ - Series.prototype.getStackIndicator = function (stackIndicator, x, index) { - if (!defined(stackIndicator) || stackIndicator.x !== x) { - stackIndicator = { - x: x, - index: 0 - }; - } else { - stackIndicator.index++; - } - - stackIndicator.key = [index, x, stackIndicator.index].join(','); - - return stackIndicator; - }; - - // Extend the Chart prototype for dynamic methods - extend(Chart.prototype, { - - /** - * Add a series dynamically after time - * - * @param {Object} options The config options - * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - * @return {Object} series The newly created series object - */ - addSeries: function (options, redraw, animation) { - var series, - chart = this; - - if (options) { - redraw = pick(redraw, true); // defaults to true - - fireEvent(chart, 'addSeries', { options: options }, function () { - series = chart.initSeries(options); - - chart.isDirtyLegend = true; // the series array is out of sync with the display - chart.linkSeries(); - if (redraw) { - chart.redraw(animation); - } - }); - } - - return series; - }, - - /** - * Add an axis to the chart - * @param {Object} options The axis option - * @param {Boolean} isX Whether it is an X axis or a value axis - */ - addAxis: function (options, isX, redraw, animation) { - var key = isX ? 'xAxis' : 'yAxis', - chartOptions = this.options; - - new Axis(this, merge(options, { // eslint-disable-line no-new - index: this[key].length, - isX: isX - })); - - // Push the new axis options to the chart options - chartOptions[key] = splat(chartOptions[key] || {}); - chartOptions[key].push(options); - - if (pick(redraw, true)) { - this.redraw(animation); - } - }, - - /** - * Dim the chart and show a loading text or symbol - * @param {String} str An optional text to show in the loading label instead of the default one - */ - showLoading: function (str) { - var chart = this, - options = chart.options, - loadingDiv = chart.loadingDiv, - loadingOptions = options.loading, - setLoadingSize = function () { - if (loadingDiv) { - css(loadingDiv, { - left: chart.plotLeft + PX, - top: chart.plotTop + PX, - width: chart.plotWidth + PX, - height: chart.plotHeight + PX - }); - } - }; - - // create the layer at the first call - if (!loadingDiv) { - chart.loadingDiv = loadingDiv = createElement(DIV, { - className: PREFIX + 'loading' - }, extend(loadingOptions.style, { - zIndex: 10, - display: NONE - }), chart.container); - - chart.loadingSpan = createElement( - 'span', - null, - loadingOptions.labelStyle, - loadingDiv - ); - addEvent(chart, 'redraw', setLoadingSize); // #1080 - } - - // update text - chart.loadingSpan.innerHTML = str || options.lang.loading; - - // show it - if (!chart.loadingShown) { - css(loadingDiv, { - opacity: 0, - display: '' - }); - animate(loadingDiv, { - opacity: loadingOptions.style.opacity - }, { - duration: loadingOptions.showDuration || 0 - }); - chart.loadingShown = true; - } - setLoadingSize(); - }, - - /** - * Hide the loading layer - */ - hideLoading: function () { - var options = this.options, - loadingDiv = this.loadingDiv; - - if (loadingDiv) { - animate(loadingDiv, { - opacity: 0 - }, { - duration: options.loading.hideDuration || 100, - complete: function () { - css(loadingDiv, { display: NONE }); - } - }); - } - this.loadingShown = false; - } - }); - - // extend the Point prototype for dynamic methods - extend(Point.prototype, { - /** - * Update the point with new options (typically x/y data) and optionally redraw the series. - * - * @param {Object} options Point options as defined in the series.data array - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - */ - update: function (options, redraw, animation, runEvent) { - var point = this, - series = point.series, - graphic = point.graphic, - i, - chart = series.chart, - seriesOptions = series.options, - names = series.xAxis && series.xAxis.names; - - redraw = pick(redraw, true); - - function update() { - - point.applyOptions(options); - - // Update visuals - if (point.y === null && graphic) { // #4146 - point.graphic = graphic.destroy(); - } - if (isObject(options) && !isArray(options)) { - // Defer the actual redraw until getAttribs has been called (#3260) - point.redraw = function () { - if (graphic && graphic.element) { - if (options && options.marker && options.marker.symbol) { - point.graphic = graphic.destroy(); - } - } - if (options && options.dataLabels && point.dataLabel) { // #2468 - point.dataLabel = point.dataLabel.destroy(); - } - point.redraw = null; - }; - } - - // record changes in the parallel arrays - i = point.index; - series.updateParallelArrays(point, i); - if (names && point.name) { - names[point.x] = point.name; - } - - // Record the options to options.data. If there is an object from before, - // use point options, otherwise use raw options. (#4701) - seriesOptions.data[i] = isObject(seriesOptions.data[i]) ? point.options : options; - - // redraw - series.isDirty = series.isDirtyData = true; - if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 - chart.isDirtyBox = true; - } - - if (seriesOptions.legendType === 'point') { // #1831, #1885 - chart.isDirtyLegend = true; - } - if (redraw) { - chart.redraw(animation); - } - } - - // Fire the event with a default handler of doing the update - if (runEvent === false) { // When called from setData - update(); - } else { - point.firePointEvent('update', { options: options }, update); - } - }, - - /** - * Remove a point and optionally redraw the series and if necessary the axes - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - this.series.removePoint(inArray(this, this.series.data), redraw, animation); - } - }); - - // Extend the series prototype for dynamic methods - extend(Series.prototype, { - /** - * Add a point dynamically after chart load time - * @param {Object} options Point options as given in series.data - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean} shift If shift is true, a point is shifted off the start - * of the series as one is appended to the end. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - addPoint: function (options, redraw, shift, animation) { - var series = this, - seriesOptions = series.options, - data = series.data, - graph = series.graph, - area = series.area, - chart = series.chart, - names = series.xAxis && series.xAxis.names, - currentShift = (graph && graph.shift) || 0, - shiftShapes = ['graph', 'area'], - dataOptions = seriesOptions.data, - point, - isInTheMiddle, - xData = series.xData, - i, - x; - - setAnimation(animation, chart); - - // Make graph animate sideways - if (shift) { - i = series.zones.length; - while (i--) { - shiftShapes.push('zoneGraph' + i, 'zoneArea' + i); - } - each(shiftShapes, function (shape) { - if (series[shape]) { - series[shape].shift = currentShift + (seriesOptions.step ? 2 : 1); - } - }); - } - if (area) { - area.isArea = true; // needed in animation, both with and without shift - } - - // Optional redraw, defaults to true - redraw = pick(redraw, true); - - // Get options and push the point to xData, yData and series.options. In series.generatePoints - // the Point instance will be created on demand and pushed to the series.data array. - point = { series: series }; - series.pointClass.prototype.applyOptions.apply(point, [options]); - x = point.x; - - // Get the insertion point - i = xData.length; - if (series.requireSorting && x < xData[i - 1]) { - isInTheMiddle = true; - while (i && xData[i - 1] > x) { - i--; - } - } - - series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item - series.updateParallelArrays(point, i); // update it - - if (names && point.name) { - names[x] = point.name; - } - dataOptions.splice(i, 0, options); - - if (isInTheMiddle) { - series.data.splice(i, 0, null); - series.processData(); - } - - // Generate points to be added to the legend (#1329) - if (seriesOptions.legendType === 'point') { - series.generatePoints(); - } - - // Shift the first point off the parallel arrays - if (shift) { - if (data[0] && data[0].remove) { - data[0].remove(false); - } else { - data.shift(); - series.updateParallelArrays(point, 'shift'); - - dataOptions.shift(); - } - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - series.getAttribs(); // #1937 - chart.redraw(); - } - }, - - /** - * Remove a point (rendered or not), by index - */ - removePoint: function (i, redraw, animation) { - - var series = this, - data = series.data, - point = data[i], - points = series.points, - chart = series.chart, - remove = function () { - - if (data.length === points.length) { - points.splice(i, 1); - } - data.splice(i, 1); - series.options.data.splice(i, 1); - series.updateParallelArrays(point || { series: series }, 'splice', i, 1); - - if (point) { - point.destroy(); - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - chart.redraw(); - } - }; - - setAnimation(animation, chart); - redraw = pick(redraw, true); - - // Fire the event with a default handler of removing the point - if (point) { - point.firePointEvent('remove', null, remove); - } else { - remove(); - } - }, - - /** - * Remove a series and optionally redraw the chart - * - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - var series = this, - chart = series.chart; - - // Fire the event with a default handler of removing the point - fireEvent(series, 'remove', null, function () { - - // Destroy elements - series.destroy(); - - // Redraw - chart.isDirtyLegend = chart.isDirtyBox = true; - chart.linkSeries(); - - if (pick(redraw, true)) { - chart.redraw(animation); - } - }); - }, - - /** - * Update the series with a new set of options - */ - update: function (newOptions, redraw) { - var series = this, - chart = this.chart, - // must use user options when changing type because this.options is merged - // in with type specific plotOptions - oldOptions = this.userOptions, - oldType = this.type, - proto = seriesTypes[oldType].prototype, - preserve = ['group', 'markerGroup', 'dataLabelsGroup'], - n; - - // If we're changing type or zIndex, create new groups (#3380, #3404) - if ((newOptions.type && newOptions.type !== oldType) || newOptions.zIndex !== undefined) { - preserve.length = 0; - } - - // Make sure groups are not destroyed (#3094) - each(preserve, function (prop) { - preserve[prop] = series[prop]; - delete series[prop]; - }); - - // Do the merge, with some forced options - newOptions = merge(oldOptions, { - animation: false, - index: this.index, - pointStart: this.xData[0] // when updating after addPoint - }, { data: this.options.data }, newOptions); - - // Destroy the series and delete all properties. Reinsert all methods - // and properties from the new type prototype (#2270, #3719) - this.remove(false); - for (n in proto) { - this[n] = UNDEFINED; - } - extend(this, seriesTypes[newOptions.type || oldType].prototype); - - // Re-register groups (#3094) - each(preserve, function (prop) { - series[prop] = preserve[prop]; - }); - - this.init(chart, newOptions); - chart.linkSeries(); // Links are lost in this.remove (#3028) - if (pick(redraw, true)) { - chart.redraw(false); - } - } - }); - - // Extend the Axis.prototype for dynamic methods - extend(Axis.prototype, { - - /** - * Update the axis with a new options structure - */ - update: function (newOptions, redraw) { - var chart = this.chart; - - newOptions = chart.options[this.coll][this.options.index] = merge(this.userOptions, newOptions); - - this.destroy(true); - this._addedPlotLB = this.chart._labelPanes = UNDEFINED; // #1611, #2887, #4314 - - this.init(chart, extend(newOptions, { events: UNDEFINED })); - - chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Remove the axis from the chart - */ - remove: function (redraw) { - var chart = this.chart, - key = this.coll, // xAxis or yAxis - axisSeries = this.series, - i = axisSeries.length; - - // Remove associated series (#2687) - while (i--) { - if (axisSeries[i]) { - axisSeries[i].remove(false); - } - } - - // Remove the axis - erase(chart.axes, this); - erase(chart[key], this); - chart.options[key].splice(this.options.index, 1); - each(chart[key], function (axis, i) { // Re-index, #1706 - axis.options.index = i; - }); - this.destroy(); - chart.isDirtyBox = true; - - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Update the axis title by options - */ - setTitle: function (newTitleOptions, redraw) { - this.update({ title: newTitleOptions }, redraw); - }, - - /** - * Set new axis categories and optionally redraw - * @param {Array} categories - * @param {Boolean} redraw - */ - setCategories: function (categories, redraw) { - this.update({ categories: categories }, redraw); - } - - }); - - - /** - * LineSeries object - */ - var LineSeries = extendClass(Series); - seriesTypes.line = LineSeries; - - /** - * Set the default options for area - */ - defaultPlotOptions.area = merge(defaultSeriesOptions, { - softThreshold: false, - threshold: 0 - // trackByArea: false, - // lineColor: null, // overrides color, but lets fillColor be unaltered - // fillOpacity: 0.75, - // fillColor: null - }); - - /** - * AreaSeries object - */ - var AreaSeries = extendClass(Series, { - type: 'area', - singleStacks: false, - /** - * For stacks, don't split segments on null values. Instead, draw null values with - * no marker. Also insert dummy points for any X position that exists in other series - * in the stack. - */ - getSegments: function () { - var series = this, - segments = [], - segment = [], - keys = [], - xAxis = this.xAxis, - yAxis = this.yAxis, - stack = yAxis.stacks[this.stackKey], - pointMap = {}, - plotX, - plotY, - points = this.points, - connectNulls = this.options.connectNulls, - stackIndicator, - i, - x; - - if (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue - // Create a map where we can quickly look up the points by their X value. - for (i = 0; i < points.length; i++) { - pointMap[points[i].x] = points[i]; - } - - // Sort the keys (#1651) - for (x in stack) { - if (stack[x].total !== null) { // nulled after switching between grouping and not (#1651, #2336) - keys.push(+x); - } - } - keys.sort(function (a, b) { - return a - b; - }); - - each(keys, function (x) { - var threshold = null, - stackPoint, - skip = connectNulls && (!pointMap[x] || pointMap[x].y === null); // #1836 - - if (!skip) { - - // The point exists, push it to the segment - if (pointMap[x]) { - segment.push(pointMap[x]); - - // There is no point for this X value in this series, so we - // insert a dummy point in order for the areas to be drawn - // correctly. - } else { - - // Loop down the stack to find the series below this one that has - // a value (#1991) - for (i = series.index; i <= yAxis.series.length; i++) { - stackIndicator = series.getStackIndicator(null, x, i); - stackPoint = stack[x].points[stackIndicator.key]; - if (stackPoint) { - threshold = stackPoint[1]; - break; - } - } - - plotX = xAxis.translate(x); - plotY = yAxis.getThreshold(threshold); - segment.push({ - y: null, - plotX: plotX, - clientX: plotX, - plotY: plotY, - yBottom: plotY, - onMouseOver: noop - }); - } - } - }); - - if (segment.length) { - segments.push(segment); - } - - } else { - Series.prototype.getSegments.call(this); - segments = this.segments; - } - - this.segments = segments; - }, - - /** - * Extend the base Series getSegmentPath method by adding the path for the area. - * This path is pushed to the series.areaPath property. - */ - getSegmentPath: function (segment) { - - var segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method - areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path - i, - options = this.options, - segLength = segmentPath.length, - translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 - yBottom; - - if (segLength === 3) { // for animation from 1 to two points - areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); - } - if (options.stacking && !this.closedStacks) { - - // Follow stack back. Later, implement areaspline. A general solution could be to - // reverse the entire graphPath of the previous series, though may be hard with - // splines and with series with different extremes - for (i = segment.length - 1; i >= 0; i--) { - - yBottom = pick(segment[i].yBottom, translatedThreshold); - - // step line? - if (i < segment.length - 1 && options.step) { - areaSegmentPath.push(segment[i + 1].plotX, yBottom); - } - - areaSegmentPath.push(segment[i].plotX, yBottom); - } - - } else { // follow zero line back - this.closeSegment(areaSegmentPath, segment, translatedThreshold); - } - this.areaPath = this.areaPath.concat(areaSegmentPath); - return segmentPath; - }, - - /** - * Extendable method to close the segment path of an area. This is overridden in polar - * charts. - */ - closeSegment: function (path, segment, translatedThreshold) { - path.push( - L, - segment[segment.length - 1].plotX, - translatedThreshold, - L, - segment[0].plotX, - translatedThreshold - ); - }, - - /** - * Draw the graph and the underlying area. This method calls the Series base - * function and adds the area. The areaPath is calculated in the getSegmentPath - * method called from Series.prototype.drawGraph. - */ - drawGraph: function () { - - // Define or reset areaPath - this.areaPath = []; - - // Call the base method - Series.prototype.drawGraph.apply(this); - - // Define local variables - var series = this, - areaPath = this.areaPath, - options = this.options, - zones = this.zones, - props = [['area', this.color, options.fillColor]]; // area name, main color, fill color - - each(zones, function (threshold, i) { - props.push(['zoneArea' + i, threshold.color || series.color, threshold.fillColor || options.fillColor]); - }); - each(props, function (prop) { - var areaKey = prop[0], - area = series[areaKey], - attr; - - // Create or update the area - if (area) { // update - area.animate({ d: areaPath }); - - } else { // create - attr = { - fill: prop[2] || prop[1], - zIndex: 0 // #1069 - }; - if (!prop[2]) { - attr['fill-opacity'] = options.fillOpacity || 0.75; - } - series[areaKey] = series.chart.renderer.path(areaPath) - .attr(attr) - .add(series.group); - } - }); - }, - - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - - seriesTypes.area = AreaSeries; - /** - * Set the default options for spline - */ - defaultPlotOptions.spline = merge(defaultSeriesOptions); - - /** - * SplineSeries object - */ - var SplineSeries = extendClass(Series, { - type: 'spline', - - /** - * Get the spline segment from a given point's previous neighbour to the given point - */ - getPointSpline: function (segment, point, i) { - var smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc - denom = smoothing + 1, - plotX = point.plotX, - plotY = point.plotY, - lastPoint = segment[i - 1], - nextPoint = segment[i + 1], - leftContX, - leftContY, - rightContX, - rightContY, - ret; - - // find control points - if (lastPoint && nextPoint) { - - var lastX = lastPoint.plotX, - lastY = lastPoint.plotY, - nextX = nextPoint.plotX, - nextY = nextPoint.plotY, - correction; - - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - - // have the two control points make a straight line through main point - correction = ((rightContY - leftContY) * (rightContX - plotX)) / - (rightContX - leftContX) + plotY - rightContY; - - leftContY += correction; - rightContY += correction; - - // to prevent false extremes, check that control points are between - // neighbouring points' y values - if (leftContY > lastY && leftContY > plotY) { - leftContY = mathMax(lastY, plotY); - rightContY = 2 * plotY - leftContY; // mirror of left control point - } else if (leftContY < lastY && leftContY < plotY) { - leftContY = mathMin(lastY, plotY); - rightContY = 2 * plotY - leftContY; - } - if (rightContY > nextY && rightContY > plotY) { - rightContY = mathMax(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } else if (rightContY < nextY && rightContY < plotY) { - rightContY = mathMin(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } - - // record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - // Visualize control points for debugging - /* - if (leftContX) { - this.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2) - .attr({ - stroke: 'red', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'red', - 'stroke-width': 1 - }) - .add(); - this.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2) - .attr({ - stroke: 'green', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'green', - 'stroke-width': 1 - }) - .add(); - } - */ - - // moveTo or lineTo - if (!i) { - ret = [M, plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - return ret; - } - }); - seriesTypes.spline = SplineSeries; - - /** - * Set the default options for areaspline - */ - defaultPlotOptions.areaspline = merge(defaultPlotOptions.area); - - /** - * AreaSplineSeries object - */ - var areaProto = AreaSeries.prototype, - AreaSplineSeries = extendClass(SplineSeries, { - type: 'areaspline', - closedStacks: true, // instead of following the previous graph back, follow the threshold back - - // Mix in methods from the area series - getSegmentPath: areaProto.getSegmentPath, - closeSegment: areaProto.closeSegment, - drawGraph: areaProto.drawGraph, - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - - seriesTypes.areaspline = AreaSplineSeries; - - /** - * Set the default options for column - */ - defaultPlotOptions.column = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - //borderWidth: 1, - borderRadius: 0, - //colorByPoint: undefined, - groupPadding: 0.2, - //grouping: true, - marker: null, // point options are specified in the base options - pointPadding: 0.1, - //pointWidth: null, - minPointLength: 0, - cropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes - pointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories - states: { - hover: { - brightness: 0.1, - shadow: false, - halo: false - }, - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - }, - dataLabels: { - align: null, // auto - verticalAlign: null, // auto - y: null - }, - softThreshold: false, - startFromThreshold: true, // false doesn't work well: http://jsfiddle.net/highcharts/hz8fopan/14/ - stickyTracking: false, - tooltip: { - distance: 6 - }, - threshold: 0 - }); - - /** - * ColumnSeries object - */ - var ColumnSeries = extendClass(Series, { - type: 'column', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - fill: 'color', - r: 'borderRadius' - }, - cropShoulder: 0, - directTouch: true, // When tooltip is not shared, this series (and derivatives) requires direct touch/hover. KD-tree does not apply. - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: true, // use separate negative stacks, unlike area stacks where a negative - // point is substracted from previous (#1910) - - /** - * Initialize the series - */ - init: function () { - Series.prototype.init.apply(this, arguments); - - var series = this, - chart = series.chart; - - // if the series is added dynamically, force redraw of other - // series affected by a new column - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - }, - - /** - * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding, - * pointWidth etc. - */ - getColumnMetrics: function () { - - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - reversedXAxis = xAxis.reversed, - stackKey, - stackGroups = {}, - columnCount = 0; - - // Get the total number of column type series. - // This is called on every series. Consider moving this logic to a - // chart.orderStacks() function and call it on init, addSeries and removeSeries - if (options.grouping === false) { - columnCount = 1; - } else { - each(series.chart.series, function (otherSeries) { - var otherOptions = otherSeries.options, - otherYAxis = otherSeries.yAxis, - columnIndex; - if (otherSeries.type === series.type && otherSeries.visible && - yAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) { // #642, #2086 - if (otherOptions.stacking) { - stackKey = otherSeries.stackKey; - if (stackGroups[stackKey] === UNDEFINED) { - stackGroups[stackKey] = columnCount++; - } - columnIndex = stackGroups[stackKey]; - } else if (otherOptions.grouping !== false) { // #1162 - columnIndex = columnCount++; - } - otherSeries.columnIndex = columnIndex; - } - }); - } - - var categoryWidth = mathMin( - mathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || xAxis.tickInterval || 1), // #2610 - xAxis.len // #1535 - ), - groupPadding = categoryWidth * options.groupPadding, - groupWidth = categoryWidth - 2 * groupPadding, - pointOffsetWidth = groupWidth / columnCount, - pointWidth = mathMin( - options.maxPointWidth || xAxis.len, - pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding)) - ), - pointPadding = (pointOffsetWidth - pointWidth) / 2, - colIndex = (series.columnIndex || 0) + (reversedXAxis ? 1 : 0), // #1251, #3737 - pointXOffset = pointPadding + (groupPadding + colIndex * - pointOffsetWidth - (categoryWidth / 2)) * - (reversedXAxis ? -1 : 1); - - // Save it for reading in linked series (Error bars particularly) - series.columnMetrics = { - width: pointWidth, - offset: pointXOffset - }; - return series.columnMetrics; - - }, - - /** - * Make the columns crisp. The edges are rounded to the nearest full pixel. - */ - crispCol: function (x, y, w, h) { - var chart = this.chart, - borderWidth = this.borderWidth, - xCrisp = -(borderWidth % 2 ? 0.5 : 0), - yCrisp = borderWidth % 2 ? 0.5 : 1, - right, - bottom, - fromTop; - - if (chart.inverted && chart.renderer.isVML) { - yCrisp += 1; - } - - // Horizontal. We need to first compute the exact right edge, then round it - // and compute the width from there. - right = Math.round(x + w) + xCrisp; - x = Math.round(x) + xCrisp; - w = right - x; - - // Vertical - bottom = Math.round(y + h) + yCrisp; - fromTop = mathAbs(y) <= 0.5 && bottom > 0.5; // #4504, #4656 - y = Math.round(y) + yCrisp; - h = bottom - y; - - // Top edges are exceptions - if (fromTop) { - y -= 1; - h += 1; - } - - return { - x: x, - y: y, - width: w, - height: h - }; - }, - - /** - * Translate each point to the plot area coordinate system and find shape positions - */ - translate: function () { - var series = this, - chart = series.chart, - options = series.options, - borderWidth = series.borderWidth = pick( - options.borderWidth, - series.closestPointRange * series.xAxis.transA < 2 ? 0 : 1 // #3635 - ), - yAxis = series.yAxis, - threshold = options.threshold, - translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold), - minPointLength = pick(options.minPointLength, 5), - metrics = series.getColumnMetrics(), - pointWidth = metrics.width, - seriesBarW = series.barW = mathMax(pointWidth, 1 + 2 * borderWidth), // postprocessed for border width - pointXOffset = series.pointXOffset = metrics.offset; - - if (chart.inverted) { - translatedThreshold -= 0.5; // #3355 - } - - // When the pointPadding is 0, we want the columns to be packed tightly, so we allow individual - // columns to have individual sizes. When pointPadding is greater, we strive for equal-width - // columns (#2694). - if (options.pointPadding) { - seriesBarW = mathCeil(seriesBarW); - } - - Series.prototype.translate.apply(series); - - // Record the new values - each(series.points, function (point) { - var yBottom = mathMin(pick(point.yBottom, translatedThreshold), 9e4), // #3575 - safeDistance = 999 + mathAbs(yBottom), - plotY = mathMin(mathMax(-safeDistance, point.plotY), yAxis.len + safeDistance), // Don't draw too far outside plot area (#1303, #2241, #4264) - barX = point.plotX + pointXOffset, - barW = seriesBarW, - barY = mathMin(plotY, yBottom), - up, - barH = mathMax(plotY, yBottom) - barY; - - // Handle options.minPointLength - if (mathAbs(barH) < minPointLength) { - if (minPointLength) { - barH = minPointLength; - up = (!yAxis.reversed && !point.negative) || (yAxis.reversed && point.negative); - barY = mathAbs(barY - translatedThreshold) > minPointLength ? // stacked - yBottom - minPointLength : // keep position - translatedThreshold - (up ? minPointLength : 0); // #1485, #4051 - } - } - - // Cache for access in polar - point.barX = barX; - point.pointWidth = pointWidth; - - // Fix the tooltip on center of grouped columns (#1216, #424, #3648) - point.tooltipPos = chart.inverted ? - [yAxis.len + yAxis.pos - chart.plotLeft - plotY, series.xAxis.len - barX - barW / 2, barH] : - [barX + barW / 2, plotY + yAxis.pos - chart.plotTop, barH]; - - // Register shape type and arguments to be used in drawPoints - point.shapeType = 'rect'; - point.shapeArgs = series.crispCol(barX, barY, barW, barH); - }); - - }, - - getSymbol: noop, - - /** - * Use a solid rectangle like the area series types - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - - /** - * Columns have no graph - */ - drawGraph: noop, - - /** - * Draw the columns. For bars, the series.group is rotated, so the same coordinates - * apply for columns and bars. This method is inherited by scatter series. - * - */ - drawPoints: function () { - var series = this, - chart = this.chart, - options = series.options, - renderer = chart.renderer, - animationLimit = options.animationLimit || 250, - shapeArgs, - pointAttr; - - // draw the columns - each(series.points, function (point) { - var plotY = point.plotY, - graphic = point.graphic, - borderAttr; - - if (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - shapeArgs = point.shapeArgs; - - borderAttr = defined(series.borderWidth) ? { - 'stroke-width': series.borderWidth - } : {}; - - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || series.pointAttr[NORMAL_STATE]; - - if (graphic) { // update - stop(graphic); - graphic.attr(borderAttr).attr(pointAttr)[chart.pointCount < animationLimit ? 'animate' : 'attr'](merge(shapeArgs)); // #4267 - - } else { - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .attr(borderAttr) - .attr(pointAttr) - .add(point.group || series.group) - .shadow(options.shadow, null, options.stacking && !options.borderRadius); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - }); - }, - - /** - * Animate the column heights one by one from zero - * @param {Boolean} init Whether to initialize the animation or run it - */ - animate: function (init) { - var series = this, - yAxis = this.yAxis, - options = series.options, - inverted = this.chart.inverted, - attr = {}, - translatedThreshold; - - if (hasSVG) { // VML is too slow anyway - if (init) { - attr.scaleY = 0.001; - translatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold))); - if (inverted) { - attr.translateX = translatedThreshold - yAxis.len; - } else { - attr.translateY = translatedThreshold; - } - series.group.attr(attr); - - } else { // run the animation - - attr.scaleY = 1; - attr[inverted ? 'translateX' : 'translateY'] = yAxis.pos; - series.group.animate(attr, series.options.animation); - - // delete this function to allow it only once - series.animate = null; - } - } - }, - - /** - * Remove this series from the chart - */ - remove: function () { - var series = this, - chart = series.chart; - - // column and bar series affects other series of the same type - // as they are either stacked or grouped - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - - Series.prototype.remove.apply(series, arguments); - } - }); - seriesTypes.column = ColumnSeries; - /** - * Set the default options for bar - */ - defaultPlotOptions.bar = merge(defaultPlotOptions.column); - /** - * The Bar series class - */ - var BarSeries = extendClass(ColumnSeries, { - type: 'bar', - inverted: true - }); - seriesTypes.bar = BarSeries; - - /** - * Set the default options for scatter - */ - defaultPlotOptions.scatter = merge(defaultSeriesOptions, { - lineWidth: 0, - marker: { - enabled: true // Overrides auto-enabling in line series (#3647) - }, - tooltip: { - headerFormat: '<span style="color:{point.color}">\u25CF</span> <span style="font-size: 10px;"> {series.name}</span><br/>', - pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>' - } - }); - - /** - * The scatter series class - */ - var ScatterSeries = extendClass(Series, { - type: 'scatter', - sorted: false, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: false, // #2342 - kdDimensions: 2, - drawGraph: function () { - if (this.options.lineWidth) { - Series.prototype.drawGraph.call(this); - } - } - }); - - seriesTypes.scatter = ScatterSeries; - - /** - * Set the default options for pie - */ - defaultPlotOptions.pie = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - borderWidth: 1, - center: [null, null], - clip: false, - colorByPoint: true, // always true for pies - dataLabels: { - // align: null, - // connectorWidth: 1, - // connectorColor: point.color, - // connectorPadding: 5, - distance: 30, - enabled: true, - formatter: function () { // #2945 - return this.y === null ? undefined : this.point.name; - }, - // softConnector: true, - x: 0 - // y: 0 - }, - ignoreHiddenPoint: true, - //innerSize: 0, - legendType: 'point', - marker: null, // point options are specified in the base options - size: null, - showInLegend: false, - slicedOffset: 10, - states: { - hover: { - brightness: 0.1, - shadow: false - } - }, - stickyTracking: false, - tooltip: { - followPointer: true - } - }); - - /** - * Extended point object for pies - */ - var PiePoint = extendClass(Point, { - /** - * Initiate the pie slice - */ - init: function () { - - Point.prototype.init.apply(this, arguments); - - var point = this, - toggleSlice; - - point.name = pick(point.name, 'Slice'); - - // add event listener for select - toggleSlice = function (e) { - point.slice(e.type === 'select'); - }; - addEvent(point, 'select', toggleSlice); - addEvent(point, 'unselect', toggleSlice); - - return point; - }, - - /** - * Toggle the visibility of the pie slice - * @param {Boolean} vis Whether to show the slice or not. If undefined, the - * visibility is toggled - */ - setVisible: function (vis, redraw) { - var point = this, - series = point.series, - chart = series.chart, - ignoreHiddenPoint = series.options.ignoreHiddenPoint; - - redraw = pick(redraw, ignoreHiddenPoint); - - if (vis !== point.visible) { - - // If called without an argument, toggle visibility - point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - // Show and hide associated elements. This is performed regardless of redraw or not, - // because chart.redraw only handles full series. - each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) { - if (point[key]) { - point[key][vis ? 'show' : 'hide'](true); - } - }); - - if (point.legendItem) { - chart.legend.colorizeItem(point, vis); - } - - // #4170, hide halo after hiding point - if (!vis && point.state === 'hover') { - point.setState(''); - } - - // Handle ignore hidden slices - if (ignoreHiddenPoint) { - series.isDirty = true; - } - - if (redraw) { - chart.redraw(); - } - } - }, - - /** - * Set or toggle whether the slice is cut out from the pie - * @param {Boolean} sliced When undefined, the slice state is toggled - * @param {Boolean} redraw Whether to redraw the chart. True by default. - */ - slice: function (sliced, redraw, animation) { - var point = this, - series = point.series, - chart = series.chart, - translation; - - setAnimation(animation, chart); - - // redraw is true by default - redraw = pick(redraw, true); - - // if called without an argument, toggle - point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - translation = sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - point.graphic.animate(translation); - - if (point.shadowGroup) { - point.shadowGroup.animate(translation); - } - - }, - - haloPath: function (size) { - var shapeArgs = this.shapeArgs, - chart = this.series.chart; - - return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(chart.plotLeft + shapeArgs.x, chart.plotTop + shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, { - innerR: this.shapeArgs.r, - start: shapeArgs.start, - end: shapeArgs.end - }); - } - }); - - /** - * The Pie series class - */ - var PieSeries = { - type: 'pie', - isCartesian: false, - pointClass: PiePoint, - requireSorting: false, - directTouch: true, - noSharedTooltip: true, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color' - }, - - /** - * Animate the pies in - */ - animate: function (init) { - var series = this, - points = series.points, - startAngleRad = series.startAngleRad; - - if (!init) { - each(points, function (point) { - var graphic = point.graphic, - args = point.shapeArgs; - - if (graphic) { - // start values - graphic.attr({ - r: point.startR || (series.center[3] / 2), // animate from inner radius (#779) - start: startAngleRad, - end: startAngleRad - }); - - // animate - graphic.animate({ - r: args.r, - start: args.start, - end: args.end - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - /** - * Recompute total chart sum and update percentages of points. - */ - updateTotals: function () { - var i, - total = 0, - points = this.points, - len = points.length, - point, - ignoreHiddenPoint = this.options.ignoreHiddenPoint; - - // Get the total sum - for (i = 0; i < len; i++) { - point = points[i]; - total += (ignoreHiddenPoint && !point.visible) ? 0 : point.y; - } - this.total = total; - - // Set each point's properties - for (i = 0; i < len; i++) { - point = points[i]; - point.percentage = (total > 0 && (point.visible || !ignoreHiddenPoint)) ? point.y / total * 100 : 0; - point.total = total; - } - }, - - /** - * Extend the generatePoints method by adding total and percentage properties to each point - */ - generatePoints: function () { - Series.prototype.generatePoints.call(this); - this.updateTotals(); - }, - - /** - * Do translation for pie slices - */ - translate: function (positions) { - this.generatePoints(); - - var series = this, - cumulative = 0, - precision = 1000, // issue #172 - options = series.options, - slicedOffset = options.slicedOffset, - connectorOffset = slicedOffset + options.borderWidth, - start, - end, - angle, - startAngle = options.startAngle || 0, - startAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90), - endAngleRad = series.endAngleRad = mathPI / 180 * ((pick(options.endAngle, startAngle + 360)) - 90), - circ = endAngleRad - startAngleRad, //2 * mathPI, - points = series.points, - radiusX, // the x component of the radius vector for a given point - radiusY, - labelDistance = options.dataLabels.distance, - ignoreHiddenPoint = options.ignoreHiddenPoint, - i, - len = points.length, - point; - - // Get positions - either an integer or a percentage string must be given. - // If positions are passed as a parameter, we're in a recursive loop for adjusting - // space for data labels. - if (!positions) { - series.center = positions = series.getCenter(); - } - - // utility for getting the x value from a given y, used for anticollision logic in data labels - series.getX = function (y, left) { - - angle = math.asin(mathMin((y - positions[1]) / (positions[2] / 2 + labelDistance), 1)); - - return positions[0] + - (left ? -1 : 1) * - (mathCos(angle) * (positions[2] / 2 + labelDistance)); - }; - - // Calculate the geometry for each point - for (i = 0; i < len; i++) { - - point = points[i]; - - // set start and end angle - start = startAngleRad + (cumulative * circ); - if (!ignoreHiddenPoint || point.visible) { - cumulative += point.percentage / 100; - } - end = startAngleRad + (cumulative * circ); - - // set the shape - point.shapeType = 'arc'; - point.shapeArgs = { - x: positions[0], - y: positions[1], - r: positions[2] / 2, - innerR: positions[3] / 2, - start: mathRound(start * precision) / precision, - end: mathRound(end * precision) / precision - }; - - // The angle must stay within -90 and 270 (#2645) - angle = (end + start) / 2; - if (angle > 1.5 * mathPI) { - angle -= 2 * mathPI; - } else if (angle < -mathPI / 2) { - angle += 2 * mathPI; - } - - // Center for the sliced out slice - point.slicedTranslation = { - translateX: mathRound(mathCos(angle) * slicedOffset), - translateY: mathRound(mathSin(angle) * slicedOffset) - }; - - // set the anchor point for tooltips - radiusX = mathCos(angle) * positions[2] / 2; - radiusY = mathSin(angle) * positions[2] / 2; - point.tooltipPos = [ - positions[0] + radiusX * 0.7, - positions[1] + radiusY * 0.7 - ]; - - point.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0; - point.angle = angle; - - // set the anchor point for data labels - connectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678 - point.labelPos = [ - positions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector - positions[1] + radiusY + mathSin(angle) * labelDistance, // a/a - positions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie - positions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a - positions[0] + radiusX, // landing point for connector - positions[1] + radiusY, // a/a - labelDistance < 0 ? // alignment - 'center' : - point.half ? 'right' : 'left', // alignment - angle // center angle - ]; - - } - }, - - drawGraph: null, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, - chart = series.chart, - renderer = chart.renderer, - groupTranslation, - //center, - graphic, - //group, - shadow = series.options.shadow, - shadowGroup, - pointAttr, - shapeArgs, - attr; - - if (shadow && !series.shadowGroup) { - series.shadowGroup = renderer.g('shadow') - .add(series.group); - } - - // draw the slices - each(series.points, function (point) { - if (point.y !== null) { - graphic = point.graphic; - shapeArgs = point.shapeArgs; - shadowGroup = point.shadowGroup; - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]; - if (!pointAttr.stroke) { - pointAttr.stroke = pointAttr.fill; - } - - // put the shadow behind all points - if (shadow && !shadowGroup) { - shadowGroup = point.shadowGroup = renderer.g('shadow') - .add(series.shadowGroup); - } - - // if the point is sliced, use special translation, else use plot area traslation - groupTranslation = point.sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - //group.translate(groupTranslation[0], groupTranslation[1]); - if (shadowGroup) { - shadowGroup.attr(groupTranslation); - } - - // draw the slice - if (graphic) { - graphic - .setRadialReference(series.center) - .attr(pointAttr) - .animate(extend(shapeArgs, groupTranslation)); - } else { - attr = { 'stroke-linejoin': 'round' }; - if (!point.visible) { - attr.visibility = 'hidden'; - } - - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .setRadialReference(series.center) - .attr(pointAttr) - .attr(attr) - .attr(groupTranslation) - .add(series.group) - .shadow(shadow, shadowGroup); - } - } - }); - - }, - - - searchPoint: noop, - - /** - * Utility for sorting data labels - */ - sortByAngle: function (points, sign) { - points.sort(function (a, b) { - return a.angle !== undefined && (b.angle - a.angle) * sign; - }); - }, - - /** - * Use a simple symbol from LegendSymbolMixin - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - /** - * Use the getCenter method from drawLegendSymbol - */ - getCenter: CenteredSeriesMixin.getCenter, - - /** - * Pies don't have point marker symbols - */ - getSymbol: noop - - }; - PieSeries = extendClass(Series, PieSeries); - seriesTypes.pie = PieSeries; - - /** - * Draw the data labels - */ - Series.prototype.drawDataLabels = function () { - - var series = this, - seriesOptions = series.options, - cursor = seriesOptions.cursor, - options = seriesOptions.dataLabels, - points = series.points, - pointOptions, - generalOptions, - hasRendered = series.hasRendered || 0, - str, - dataLabelsGroup, - renderer = series.chart.renderer; - - if (options.enabled || series._hasPointLabels) { - - // Process default alignment of data labels for columns - if (series.dlProcessOptions) { - series.dlProcessOptions(options); - } - - // Create a separate group for the data labels to avoid rotation - dataLabelsGroup = series.plotGroup( - 'dataLabelsGroup', - 'data-labels', - options.defer ? HIDDEN : VISIBLE, - options.zIndex || 6 - ); - - if (pick(options.defer, true)) { - dataLabelsGroup.attr({ opacity: +hasRendered }); // #3300 - if (!hasRendered) { - addEvent(series, 'afterAnimate', function () { - if (series.visible) { // #3023, #3024 - dataLabelsGroup.show(); - } - dataLabelsGroup[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, { duration: 200 }); - }); - } - } - - // Make the labels for each point - generalOptions = options; - each(points, function (point) { - - var enabled, - dataLabel = point.dataLabel, - labelConfig, - attr, - name, - rotation, - connector = point.connector, - isNew = true, - style, - moreStyle = {}; - - // Determine if each data label is enabled - pointOptions = point.dlOptions || (point.options && point.options.dataLabels); // dlOptions is used in treemaps - enabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled) && point.y !== null; // #2282, #4641 - - - // If the point is outside the plot area, destroy it. #678, #820 - if (dataLabel && !enabled) { - point.dataLabel = dataLabel.destroy(); - - // Individual labels are disabled if the are explicitly disabled - // in the point options, or if they fall outside the plot area. - } else if (enabled) { - - // Create individual options structure that can be extended without - // affecting others - options = merge(generalOptions, pointOptions); - style = options.style; - - rotation = options.rotation; - - // Get the string - labelConfig = point.getLabelConfig(); - str = options.format ? - format(options.format, labelConfig) : - options.formatter.call(labelConfig, options); - - // Determine the color - style.color = pick(options.color, style.color, series.color, 'black'); - - - // update existing label - if (dataLabel) { - - if (defined(str)) { - dataLabel - .attr({ - text: str - }); - isNew = false; - - } else { // #1437 - the label is shown conditionally - point.dataLabel = dataLabel = dataLabel.destroy(); - if (connector) { - point.connector = connector.destroy(); - } - } - - // create new label - } else if (defined(str)) { - attr = { - //align: align, - fill: options.backgroundColor, - stroke: options.borderColor, - 'stroke-width': options.borderWidth, - r: options.borderRadius || 0, - rotation: rotation, - padding: options.padding, - zIndex: 1 - }; - - // Get automated contrast color - if (style.color === 'contrast') { - moreStyle.color = options.inside || options.distance < 0 || !!seriesOptions.stacking ? - renderer.getContrast(point.color || series.color) : - '#000000'; - } - if (cursor) { - moreStyle.cursor = cursor; - } - - - // Remove unused attributes (#947) - for (name in attr) { - if (attr[name] === UNDEFINED) { - delete attr[name]; - } - } - - dataLabel = point.dataLabel = renderer[rotation ? 'text' : 'label']( // labels don't support rotation - str, - 0, - -9999, - options.shape, - null, - null, - options.useHTML - ) - .attr(attr) - .css(extend(style, moreStyle)) - .add(dataLabelsGroup) - .shadow(options.shadow); - - } - - if (dataLabel) { - // Now the data label is created and placed at 0,0, so we need to align it - series.alignDataLabel(point, dataLabel, options, null, isNew); - } - } - }); - } - }; - - /** - * Align each individual data label - */ - Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - plotX = pick(point.plotX, -9999), - plotY = pick(point.plotY, -9999), - bBox = dataLabel.getBBox(), - baseline = chart.renderer.fontMetrics(options.style.fontSize).b, - rotCorr, // rotation correction - // Math.round for rounding errors (#2683), alignTo to allow column labels (#2700) - visible = this.visible && (point.series.forceDL || chart.isInsidePlot(plotX, mathRound(plotY), inverted) || - (alignTo && chart.isInsidePlot(plotX, inverted ? alignTo.x + 1 : alignTo.y + alignTo.height - 1, inverted))), - alignAttr; // the final position; - - if (visible) { - - // The alignment box is a singular point - alignTo = extend({ - x: inverted ? chart.plotWidth - plotY : plotX, - y: mathRound(inverted ? chart.plotHeight - plotX : plotY), - width: 0, - height: 0 - }, alignTo); - - // Add the text size for alignment calculation - extend(options, { - width: bBox.width, - height: bBox.height - }); - - // Allow a hook for changing alignment in the last moment, then do the alignment - if (options.rotation) { // Fancy box alignment isn't supported for rotated text - rotCorr = chart.renderer.rotCorr(baseline, options.rotation); // #3723 - dataLabel[isNew ? 'attr' : 'animate']({ - x: alignTo.x + options.x + alignTo.width / 2 + rotCorr.x, - y: alignTo.y + options.y + alignTo.height / 2 - }) - .attr({ // #3003 - align: options.align - }); - } else { - dataLabel.align(options, null, alignTo); - alignAttr = dataLabel.alignAttr; - - // Handle justify or crop - if (pick(options.overflow, 'justify') === 'justify') { - this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew); - - } else if (pick(options.crop, true)) { - // Now check that the data label is within the plot area - visible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height); - - } - - // When we're using a shape, make it possible with a connector or an arrow pointing to thie point - if (options.shape) { - dataLabel.attr({ - anchorX: point.plotX, - anchorY: point.plotY - }); - } - - } - } - - // Show or hide based on the final aligned position - if (!visible) { - stop(dataLabel); - dataLabel.attr({ y: -9999 }); - dataLabel.placed = false; // don't animate back in - } - - }; - - /** - * If data labels fall partly outside the plot area, align them back in, in a way that - * doesn't hide the point. - */ - Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBox, alignTo, isNew) { - var chart = this.chart, - align = options.align, - verticalAlign = options.verticalAlign, - off, - justified, - padding = dataLabel.box ? 0 : (dataLabel.padding || 0); - - // Off left - off = alignAttr.x + padding; - if (off < 0) { - if (align === 'right') { - options.align = 'left'; - } else { - options.x = -off; - } - justified = true; - } - - // Off right - off = alignAttr.x + bBox.width - padding; - if (off > chart.plotWidth) { - if (align === 'left') { - options.align = 'right'; - } else { - options.x = chart.plotWidth - off; - } - justified = true; - } - - // Off top - off = alignAttr.y + padding; - if (off < 0) { - if (verticalAlign === 'bottom') { - options.verticalAlign = 'top'; - } else { - options.y = -off; - } - justified = true; - } - - // Off bottom - off = alignAttr.y + bBox.height - padding; - if (off > chart.plotHeight) { - if (verticalAlign === 'top') { - options.verticalAlign = 'bottom'; - } else { - options.y = chart.plotHeight - off; - } - justified = true; - } - - if (justified) { - dataLabel.placed = !isNew; - dataLabel.align(options, null, alignTo); - } - }; - - /** - * Override the base drawDataLabels method by pie specific functionality - */ - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawDataLabels = function () { - var series = this, - data = series.data, - point, - chart = series.chart, - options = series.options.dataLabels, - connectorPadding = pick(options.connectorPadding, 10), - connectorWidth = pick(options.connectorWidth, 1), - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - connector, - connectorPath, - softConnector = pick(options.softConnector, true), - distanceOption = options.distance, - seriesCenter = series.center, - radius = seriesCenter[2] / 2, - centerY = seriesCenter[1], - outside = distanceOption > 0, - dataLabel, - dataLabelWidth, - labelPos, - labelHeight, - halves = [// divide the points into right and left halves for anti collision - [], // right - [] // left - ], - x, - y, - visibility, - rankArr, - i, - j, - overflow = [0, 0, 0, 0], // top, right, bottom, left - sort = function (a, b) { - return b.y - a.y; - }; - - // get out if not enabled - if (!series.visible || (!options.enabled && !series._hasPointLabels)) { - return; - } - - // run parent method - Series.prototype.drawDataLabels.apply(series); - - // arrange points for detection collision - each(data, function (point) { - if (point.dataLabel && point.visible) { // #407, #2510 - halves[point.half].push(point); - } - }); - - /* Loop over the points in each half, starting from the top and bottom - * of the pie to detect overlapping labels. - */ - i = 2; - while (i--) { - - var slots = [], - slotsLength, - usedSlots = [], - points = halves[i], - pos, - bottom, - length = points.length, - slotIndex; - - if (!length) { - continue; - } - - // Sort by angle - series.sortByAngle(points, i - 0.5); - - // Assume equal label heights on either hemisphere (#2630) - j = labelHeight = 0; - while (!labelHeight && points[j]) { // #1569 - labelHeight = points[j] && points[j].dataLabel && (points[j].dataLabel.getBBox().height || 21); // 21 is for #968 - j++; - } - - // Only do anti-collision when we are outside the pie and have connectors (#856) - if (distanceOption > 0) { - - // Build the slots - bottom = mathMin(centerY + radius + distanceOption, chart.plotHeight); - for (pos = mathMax(0, centerY - radius - distanceOption); pos <= bottom; pos += labelHeight) { - slots.push(pos); - } - slotsLength = slots.length; - - - /* Visualize the slots - if (!series.slotElements) { - series.slotElements = []; - } - if (i === 1) { - series.slotElements.forEach(function (elem) { - elem.destroy(); - }); - series.slotElements.length = 0; - } - - slots.forEach(function (pos, no) { - var slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0), - slotY = pos + chart.plotTop; - - if (!isNaN(slotX)) { - series.slotElements.push(chart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1) - .attr({ - 'stroke-width': 1, - stroke: 'silver', - fill: 'rgba(0,0,255,0.1)' - }) - .add()); - series.slotElements.push(chart.renderer.text('Slot '+ no, slotX, slotY + 4) - .attr({ - fill: 'silver' - }).add()); - } - }); - // */ - - // if there are more values than available slots, remove lowest values - if (length > slotsLength) { - // create an array for sorting and ranking the points within each quarter - rankArr = [].concat(points); - rankArr.sort(sort); - j = length; - while (j--) { - rankArr[j].rank = j; - } - j = length; - while (j--) { - if (points[j].rank >= slotsLength) { - points.splice(j, 1); - } - } - length = points.length; - } - - // The label goes to the nearest open slot, but not closer to the edge than - // the label's index. - for (j = 0; j < length; j++) { - - point = points[j]; - labelPos = point.labelPos; - - var closest = 9999, - distance, - slotI; - - // find the closest slot index - for (slotI = 0; slotI < slotsLength; slotI++) { - distance = mathAbs(slots[slotI] - labelPos[1]); - if (distance < closest) { - closest = distance; - slotIndex = slotI; - } - } - - // if that slot index is closer to the edges of the slots, move it - // to the closest appropriate slot - if (slotIndex < j && slots[j] !== null) { // cluster at the top - slotIndex = j; - } else if (slotsLength < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom - slotIndex = slotsLength - length + j; - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } else { - // Slot is taken, find next free slot below. In the next run, the next slice will find the - // slot above these, because it is the closest one - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } - - usedSlots.push({ i: slotIndex, y: slots[slotIndex] }); - slots[slotIndex] = null; // mark as taken - } - // sort them in order to fill in from the top - usedSlots.sort(sort); - } - - // now the used slots are sorted, fill them up sequentially - for (j = 0; j < length; j++) { - - var slot, naturalY; - - point = points[j]; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - visibility = point.visible === false ? HIDDEN : 'inherit'; - naturalY = labelPos[1]; - - if (distanceOption > 0) { - slot = usedSlots.pop(); - slotIndex = slot.i; - - // if the slot next to currrent slot is free, the y value is allowed - // to fall back to the natural position - y = slot.y; - if ((naturalY > y && slots[slotIndex + 1] !== null) || - (naturalY < y && slots[slotIndex - 1] !== null)) { - y = mathMin(mathMax(0, naturalY), chart.plotHeight); - } - - } else { - y = naturalY; - } - - // get the x - use the natural x position for first and last slot, to prevent the top - // and botton slice connectors from touching each other on either side - x = options.justify ? - seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) : - series.getX(y === centerY - radius - distanceOption || y === centerY + radius + distanceOption ? naturalY : y, i); - - - // Record the placement and visibility - dataLabel._attr = { - visibility: visibility, - align: labelPos[6] - }; - dataLabel._pos = { - x: x + options.x + - ({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0), - y: y + options.y - 10 // 10 is for the baseline (label vs text) - }; - dataLabel.connX = x; - dataLabel.connY = y; - - - // Detect overflowing data labels - if (this.options.size === null) { - dataLabelWidth = dataLabel.width; - // Overflow left - if (x - dataLabelWidth < connectorPadding) { - overflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]); - - // Overflow right - } else if (x + dataLabelWidth > plotWidth - connectorPadding) { - overflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]); - } - - // Overflow top - if (y - labelHeight / 2 < 0) { - overflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]); - - // Overflow left - } else if (y + labelHeight / 2 > plotHeight) { - overflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]); - } - } - } // for each point - } // for each half - - // Do not apply the final placement and draw the connectors until we have verified - // that labels are not spilling over. - if (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) { - - // Place the labels in the final position - this.placeDataLabels(); - - // Draw the connectors - if (outside && connectorWidth) { - each(this.points, function (point) { - connector = point.connector; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - - if (dataLabel && dataLabel._pos && point.visible) { - visibility = dataLabel._attr.visibility; - x = dataLabel.connX; - y = dataLabel.connY; - connectorPath = softConnector ? [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - 'C', - x, y, // first break, next to the label - 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ] : [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - L, - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ]; - - if (connector) { - connector.animate({ d: connectorPath }); - connector.attr('visibility', visibility); - - } else { - point.connector = connector = series.chart.renderer.path(connectorPath).attr({ - 'stroke-width': connectorWidth, - stroke: options.connectorColor || point.color || '#606060', - visibility: visibility - //zIndex: 0 // #2722 (reversed) - }) - .add(series.dataLabelsGroup); - } - } else if (connector) { - point.connector = connector.destroy(); - } - }); - } - } - }; - /** - * Perform the final placement of the data labels after we have verified that they - * fall within the plot area. - */ - seriesTypes.pie.prototype.placeDataLabels = function () { - each(this.points, function (point) { - var dataLabel = point.dataLabel, - _pos; - - if (dataLabel && point.visible) { - _pos = dataLabel._pos; - if (_pos) { - dataLabel.attr(dataLabel._attr); - dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); - dataLabel.moved = true; - } else if (dataLabel) { - dataLabel.attr({ y: -9999 }); - } - } - }); - }; - - seriesTypes.pie.prototype.alignDataLabel = noop; - - /** - * Verify whether the data labels are allowed to draw, or we should run more translation and data - * label positioning to keep them inside the plot area. Returns true when data labels are ready - * to draw. - */ - seriesTypes.pie.prototype.verifyDataLabelOverflow = function (overflow) { - - var center = this.center, - options = this.options, - centerOption = options.center, - minSize = options.minSize || 80, - newSize = minSize, - ret; - - // Handle horizontal size and center - if (centerOption[0] !== null) { // Fixed center - newSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize); - - } else { // Auto center - newSize = mathMax( - center[2] - overflow[1] - overflow[3], // horizontal overflow - minSize - ); - center[0] += (overflow[3] - overflow[1]) / 2; // horizontal center - } - - // Handle vertical size and center - if (centerOption[1] !== null) { // Fixed center - newSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize); - - } else { // Auto center - newSize = mathMax( - mathMin( - newSize, - center[2] - overflow[0] - overflow[2] // vertical overflow - ), - minSize - ); - center[1] += (overflow[0] - overflow[2]) / 2; // vertical center - } - - // If the size must be decreased, we need to run translate and drawDataLabels again - if (newSize < center[2]) { - center[2] = newSize; - center[3] = Math.min(relativeLength(options.innerSize || 0, newSize), newSize); // #3632 - this.translate(center); - each(this.points, function (point) { - if (point.dataLabel) { - point.dataLabel._pos = null; // reset - } - }); - - if (this.drawDataLabels) { - this.drawDataLabels(); - } - // Else, return true to indicate that the pie and its labels is within the plot area - } else { - ret = true; - } - return ret; - }; - } - - if (seriesTypes.column) { - - /** - * Override the basic data label alignment by adjusting for the position of the column - */ - seriesTypes.column.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var inverted = this.chart.inverted, - series = point.series, - dlBox = point.dlBox || point.shapeArgs, // data label box for alignment - below = pick(point.below, point.plotY > pick(this.translatedThreshold, series.yAxis.len)), // point.below is used in range series - inside = pick(options.inside, !!this.options.stacking), // draw it inside the box? - overshoot; - - // Align to the column itself, or the top of it - if (dlBox) { // Area range uses this method but not alignTo - alignTo = merge(dlBox); - - if (alignTo.y < 0) { - alignTo.height += alignTo.y; - alignTo.y = 0; - } - overshoot = alignTo.y + alignTo.height - series.yAxis.len; - if (overshoot > 0) { - alignTo.height -= overshoot; - } - - if (inverted) { - alignTo = { - x: series.yAxis.len - alignTo.y - alignTo.height, - y: series.xAxis.len - alignTo.x - alignTo.width, - width: alignTo.height, - height: alignTo.width - }; - } - - // Compute the alignment box - if (!inside) { - if (inverted) { - alignTo.x += below ? 0 : alignTo.width; - alignTo.width = 0; - } else { - alignTo.y += below ? alignTo.height : 0; - alignTo.height = 0; - } - } - } - - - // When alignment is undefined (typically columns and bars), display the individual - // point below or above the point depending on the threshold - options.align = pick( - options.align, - !inverted || inside ? 'center' : below ? 'right' : 'left' - ); - options.verticalAlign = pick( - options.verticalAlign, - inverted || inside ? 'middle' : below ? 'top' : 'bottom' - ); - - // Call the parent method - Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - }; - } - - - - /** - * Highcharts module to hide overlapping data labels. This module is included in Highcharts. - */ - (function (H) { - var Chart = H.Chart, - each = H.each, - pick = H.pick, - addEvent = H.addEvent; - - // Collect potensial overlapping data labels. Stack labels probably don't need to be - // considered because they are usually accompanied by data labels that lie inside the columns. - Chart.prototype.callbacks.push(function (chart) { - function collectAndHide() { - var labels = []; - - each(chart.series, function (series) { - var dlOptions = series.options.dataLabels, - collections = series.dataLabelCollections || ['dataLabel']; // Range series have two collections - if ((dlOptions.enabled || series._hasPointLabels) && !dlOptions.allowOverlap && series.visible) { // #3866 - each(collections, function (coll) { - each(series.points, function (point) { - if (point[coll]) { - point[coll].labelrank = pick(point.labelrank, point.shapeArgs && point.shapeArgs.height); // #4118 - labels.push(point[coll]); - } - }); - }); - } - }); - chart.hideOverlappingLabels(labels); - } - - // Do it now ... - collectAndHide(); - - // ... and after each chart redraw - addEvent(chart, 'redraw', collectAndHide); - - }); - - /** - * Hide overlapping labels. Labels are moved and faded in and out on zoom to provide a smooth - * visual imression. - */ - Chart.prototype.hideOverlappingLabels = function (labels) { - - var len = labels.length, - label, - i, - j, - label1, - label2, - isIntersecting, - pos1, - pos2, - padding, - intersectRect = function (x1, y1, w1, h1, x2, y2, w2, h2) { - return !( - x2 > x1 + w1 || - x2 + w2 < x1 || - y2 > y1 + h1 || - y2 + h2 < y1 - ); - }; - - // Mark with initial opacity - for (i = 0; i < len; i++) { - label = labels[i]; - if (label) { - label.oldOpacity = label.opacity; - label.newOpacity = 1; - } - } - - // Prevent a situation in a gradually rising slope, that each label - // will hide the previous one because the previous one always has - // lower rank. - labels.sort(function (a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - - // Detect overlapping labels - for (i = 0; i < len; i++) { - label1 = labels[i]; - - for (j = i + 1; j < len; ++j) { - label2 = labels[j]; - if (label1 && label2 && label1.placed && label2.placed && label1.newOpacity !== 0 && label2.newOpacity !== 0) { - pos1 = label1.alignAttr; - pos2 = label2.alignAttr; - padding = 2 * (label1.box ? 0 : label1.padding); // Substract the padding if no background or border (#4333) - isIntersecting = intersectRect( - pos1.x, - pos1.y, - label1.width - padding, - label1.height - padding, - pos2.x, - pos2.y, - label2.width - padding, - label2.height - padding - ); - - if (isIntersecting) { - (label1.labelrank < label2.labelrank ? label1 : label2).newOpacity = 0; - } - } - } - } - - // Hide or show - each(labels, function (label) { - var complete, - newOpacity; - - if (label) { - newOpacity = label.newOpacity; - - if (label.oldOpacity !== newOpacity && label.placed) { - - // Make sure the label is completely hidden to avoid catching clicks (#4362) - if (newOpacity) { - label.show(true); - } else { - complete = function () { - label.hide(); - }; - } - - // Animate or set the opacity - label.alignAttr.opacity = newOpacity; - label[label.isOld ? 'animate' : 'attr'](label.alignAttr, null, complete); - - } - label.isOld = true; - } - }); - }; - }(Highcharts)); - /** - * TrackerMixin for points and graphs - */ - - var TrackerMixin = Highcharts.TrackerMixin = { - - drawTrackerPoint: function () { - var series = this, - chart = series.chart, - pointer = chart.pointer, - cursor = series.options.cursor, - css = cursor && { cursor: cursor }, - onMouseOver = function (e) { - var target = e.target, - point; - - while (target && !point) { - point = target.point; - target = target.parentNode; - } - - if (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart - point.onMouseOver(e); - } - }; - - // Add reference to the point - each(series.points, function (point) { - if (point.graphic) { - point.graphic.element.point = point; - } - if (point.dataLabel) { - point.dataLabel.element.point = point; - } - }); - - // Add the event listeners, we need to do this only once - if (!series._hasTracking) { - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key] - .addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { - pointer.onTrackerMouseOut(e); - }) - .css(css); - if (hasTouch) { - series[key].on('touchstart', onMouseOver); - } - } - }); - series._hasTracking = true; - } - }, - - /** - * Draw the tracker object that sits above all data labels and markers to - * track mouse events on the graph or points. For the line type charts - * the tracker uses the same graphPath, but with a greater stroke width - * for better control. - */ - drawTrackerGraph: function () { - var series = this, - options = series.options, - trackByArea = options.trackByArea, - trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), - trackerPathLength = trackerPath.length, - chart = series.chart, - pointer = chart.pointer, - renderer = chart.renderer, - snap = chart.options.tooltip.snap, - tracker = series.tracker, - cursor = options.cursor, - css = cursor && { cursor: cursor }, - singlePoints = series.singlePoints, - singlePoint, - i, - onMouseOver = function () { - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - }, - /* - * Empirical lowest possible opacities for TRACKER_FILL for an element to stay invisible but clickable - * IE6: 0.002 - * IE7: 0.002 - * IE8: 0.002 - * IE9: 0.00000000001 (unlimited) - * IE10: 0.0001 (exporting only) - * FF: 0.00000000001 (unlimited) - * Chrome: 0.000001 - * Safari: 0.000001 - * Opera: 0.00000000001 (unlimited) - */ - TRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')'; - - // Extend end points. A better way would be to use round linecaps, - // but those are not clickable in VML. - if (trackerPathLength && !trackByArea) { - i = trackerPathLength + 1; - while (i--) { - if (trackerPath[i] === M) { // extend left side - trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); - } - if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side - trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); - } - } - } - - // handle single points - for (i = 0; i < singlePoints.length; i++) { - singlePoint = singlePoints[i]; - trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, - L, singlePoint.plotX + snap, singlePoint.plotY); - } - - // draw the tracker - if (tracker) { - tracker.attr({ d: trackerPath }); - } else { // create - - series.tracker = renderer.path(trackerPath) - .attr({ - 'stroke-linejoin': 'round', // #1225 - visibility: series.visible ? VISIBLE : HIDDEN, - stroke: TRACKER_FILL, - fill: trackByArea ? TRACKER_FILL : NONE, - 'stroke-width': options.lineWidth + (trackByArea ? 0 : 2 * snap), - zIndex: 2 - }) - .add(series.group); - - // The tracker is added to the series group, which is clipped, but is covered - // by the marker group. So the marker group also needs to capture events. - each([series.tracker, series.markerGroup], function (tracker) { - tracker.addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { - pointer.onTrackerMouseOut(e); - }) - .css(css); - - if (hasTouch) { - tracker.on('touchstart', onMouseOver); - } - }); - } - } - }; - /* End TrackerMixin */ - - - /** - * Add tracking event listener to the series group, so the point graphics - * themselves act as trackers - */ - - if (seriesTypes.column) { - ColumnSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.scatter) { - ScatterSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - /* - * Extend Legend for item events - */ - extend(Legend.prototype, { - - setItemEvents: function (item, legendItem, useHTML, itemStyle, itemHiddenStyle) { - var legend = this; - // Set the events on the item group, or in case of useHTML, the item itself (#1249) - (useHTML ? legendItem : item.legendGroup).on('mouseover', function () { - item.setState(HOVER_STATE); - legendItem.css(legend.options.itemHoverStyle); - }) - .on('mouseout', function () { - legendItem.css(item.visible ? itemStyle : itemHiddenStyle); - item.setState(); - }) - .on('click', function (event) { - var strLegendItemClick = 'legendItemClick', - fnLegendItemClick = function () { - if (item.setVisible) { - item.setVisible(); - } - }; - - // Pass over the click/touch event. #4. - event = { - browserEvent: event - }; - - // click the name or symbol - if (item.firePointEvent) { // point - item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); - } else { - fireEvent(item, strLegendItemClick, event, fnLegendItemClick); - } - }); - }, - - createCheckboxForItem: function (item) { - var legend = this; - - item.checkbox = createElement('input', { - type: 'checkbox', - checked: item.selected, - defaultChecked: item.selected // required by IE7 - }, legend.options.itemCheckboxStyle, legend.chart.container); - - addEvent(item.checkbox, 'click', function (event) { - var target = event.target; - fireEvent( - item.series || item, - 'checkboxClick', - { // #3712 - checked: target.checked, - item: item - }, - function () { - item.select(); - } - ); - }); - } - }); - - /* - * Add pointer cursor to legend itemstyle in defaultOptions - */ - defaultOptions.legend.itemStyle.cursor = 'pointer'; - - - /* - * Extend the Chart object with interaction - */ - - extend(Chart.prototype, { - /** - * Display the zoom button - */ - showResetZoom: function () { - var chart = this, - lang = defaultOptions.lang, - btnOptions = chart.options.chart.resetZoomButton, - theme = btnOptions.theme, - states = theme.states, - alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; - - function zoomOut() { - chart.zoomOut(); - } - - this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, zoomOut, theme, states && states.hover) - .attr({ - align: btnOptions.position.align, - title: lang.resetZoomTitle - }) - .add() - .align(btnOptions.position, false, alignTo); - - }, - - /** - * Zoom out to 1:1 - */ - zoomOut: function () { - var chart = this; - fireEvent(chart, 'selection', { resetSelection: true }, function () { - chart.zoom(); - }); - }, - - /** - * Zoom into a given portion of the chart given by axis coordinates - * @param {Object} event - */ - zoom: function (event) { - var chart = this, - hasZoomed, - pointer = chart.pointer, - displayButton = false, - resetZoomButton; - - // If zoom is called with no arguments, reset the axes - if (!event || event.resetSelection) { - each(chart.axes, function (axis) { - hasZoomed = axis.zoom(); - }); - } else { // else, zoom in on all axes - each(event.xAxis.concat(event.yAxis), function (axisData) { - var axis = axisData.axis, - isXAxis = axis.isXAxis; - - // don't zoom more than minRange - if (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) { - hasZoomed = axis.zoom(axisData.min, axisData.max); - if (axis.displayBtn) { - displayButton = true; - } - } - }); - } - - // Show or hide the Reset zoom button - resetZoomButton = chart.resetZoomButton; - if (displayButton && !resetZoomButton) { - chart.showResetZoom(); - } else if (!displayButton && isObject(resetZoomButton)) { - chart.resetZoomButton = resetZoomButton.destroy(); - } - - - // Redraw - if (hasZoomed) { - chart.redraw( - pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation - ); - } - }, - - /** - * Pan the chart by dragging the mouse across the pane. This function is called - * on mouse move, and the distance to pan is computed from chartX compared to - * the first chartX position in the dragging operation. - */ - pan: function (e, panning) { - - var chart = this, - hoverPoints = chart.hoverPoints, - doRedraw; - - // remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps - var mousePos = e[isX ? 'chartX' : 'chartY'], - axis = chart[isX ? 'xAxis' : 'yAxis'][0], - startPos = chart[isX ? 'mouseDownX' : 'mouseDownY'], - halfPointRange = (axis.pointRange || 0) / 2, - extremes = axis.getExtremes(), - newMin = axis.toValue(startPos - mousePos, true) + halfPointRange, - newMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange, - goingLeft = startPos > mousePos; // #3613 - - if (axis.series.length && - (goingLeft || newMin > mathMin(extremes.dataMin, extremes.min)) && - (!goingLeft || newMax < mathMax(extremes.dataMax, extremes.max))) { - axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' }); - doRedraw = true; - } - - chart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run - }); - - if (doRedraw) { - chart.redraw(false); - } - css(chart.container, { cursor: 'move' }); - } - }); - - /* - * Extend the Point object with interaction - */ - extend(Point.prototype, { - /** - * Toggle the selection status of a point - * @param {Boolean} selected Whether to select or unselect the point. - * @param {Boolean} accumulate Whether to add to the previous selection. By default, - * this happens if the control key (Cmd on Mac) was pressed during clicking. - */ - select: function (selected, accumulate) { - var point = this, - series = point.series, - chart = series.chart; - - selected = pick(selected, !point.selected); - - // fire the event with the default handler - point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () { - point.selected = point.options.selected = selected; - series.options.data[inArray(point, series.data)] = point.options; - - point.setState(selected && SELECT_STATE); - - // unselect all other points unless Ctrl or Cmd + click - if (!accumulate) { - each(chart.getSelectedPoints(), function (loopPoint) { - if (loopPoint.selected && loopPoint !== point) { - loopPoint.selected = loopPoint.options.selected = false; - series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; - loopPoint.setState(NORMAL_STATE); - loopPoint.firePointEvent('unselect'); - } - }); - } - }); - }, - - /** - * Runs on mouse over the point - * - * @param {Object} e The event arguments - * @param {Boolean} byProximity Falsy for kd points that are closest to the mouse, or to - * actually hovered points. True for other points in shared tooltip. - */ - onMouseOver: function (e, byProximity) { - var point = this, - series = point.series, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - - // set normal state to previous series - if (hoverPoint && hoverPoint !== point) { - hoverPoint.onMouseOut(); - } - - if (point.series) { // It may have been destroyed, #4130 - - // trigger the event - point.firePointEvent('mouseOver'); - - // update the tooltip - if (tooltip && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.refresh(point, e); - } - - // hover this - point.setState(HOVER_STATE); - if (!byProximity) { - chart.hoverPoint = point; - } - } - }, - - /** - * Runs on mouse out from the point - */ - onMouseOut: function () { - var chart = this.series.chart, - hoverPoints = chart.hoverPoints; - - this.firePointEvent('mouseOut'); - - if (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887, #2240 - this.setState(); - chart.hoverPoint = null; - } - }, - - /** - * Import events from the series' and point's options. Only do it on - * demand, to save processing time on hovering. - */ - importEvents: function () { - if (!this.hasImportedEvents) { - var point = this, - options = merge(point.series.options.point, point.options), - events = options.events, - eventType; - - point.events = events; - - for (eventType in events) { - addEvent(point, eventType, events[eventType]); - } - this.hasImportedEvents = true; - - } - }, - - /** - * Set the point's state - * @param {String} state - */ - setState: function (state, move) { - var point = this, - plotX = mathFloor(point.plotX), // #4586 - plotY = point.plotY, - series = point.series, - stateOptions = series.options.states, - markerOptions = defaultPlotOptions[series.type].marker && series.options.marker, - normalDisabled = markerOptions && !markerOptions.enabled, - markerStateOptions = markerOptions && markerOptions.states[state], - stateDisabled = markerStateOptions && markerStateOptions.enabled === false, - stateMarkerGraphic = series.stateMarkerGraphic, - pointMarker = point.marker || {}, - chart = series.chart, - radius, - halo = series.halo, - haloOptions, - newSymbol, - pointAttr; - - state = state || NORMAL_STATE; // empty string - pointAttr = point.pointAttr[state] || series.pointAttr[state]; - - if ( - // already has this state - (state === point.state && !move) || - // selected points don't respond to hover - (point.selected && state !== SELECT_STATE) || - // series' state options is disabled - (stateOptions[state] && stateOptions[state].enabled === false) || - // general point marker's state options is disabled - (state && (stateDisabled || (normalDisabled && markerStateOptions.enabled === false))) || - // individual point marker's state options is disabled - (state && pointMarker.states && pointMarker.states[state] && pointMarker.states[state].enabled === false) // #1610 - - ) { - return; - } - - // apply hover styles to the existing point - if (point.graphic) { - radius = markerOptions && point.graphic.symbolName && pointAttr.r; - point.graphic.attr(merge( - pointAttr, - radius ? { // new symbol attributes (#507, #612) - x: plotX - radius, - y: plotY - radius, - width: 2 * radius, - height: 2 * radius - } : {} - )); - - // Zooming in from a range with no markers to a range with markers - if (stateMarkerGraphic) { - stateMarkerGraphic.hide(); - } - } else { - // if a graphic is not applied to each point in the normal state, create a shared - // graphic for the hover state - if (state && markerStateOptions) { - radius = markerStateOptions.radius; - newSymbol = pointMarker.symbol || series.symbol; - - // If the point has another symbol than the previous one, throw away the - // state marker graphic and force a new one (#1459) - if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { - stateMarkerGraphic = stateMarkerGraphic.destroy(); - } - - // Add a new state marker graphic - if (!stateMarkerGraphic) { - if (newSymbol) { - series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( - newSymbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr) - .add(series.markerGroup); - stateMarkerGraphic.currentSymbol = newSymbol; - } - - // Move the existing graphic - } else { - stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 - x: plotX - radius, - y: plotY - radius - }); - } - } - - if (stateMarkerGraphic) { - stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 - stateMarkerGraphic.element.point = point; // #4310 - } - } - - // Show me your halo - haloOptions = stateOptions[state] && stateOptions[state].halo; - if (haloOptions && haloOptions.size) { - if (!halo) { - series.halo = halo = chart.renderer.path() - .add(chart.seriesGroup); - } - halo.attr(extend({ - fill: point.color || series.color, - 'fill-opacity': haloOptions.opacity - }, - haloOptions.attributes))[move ? 'animate' : 'attr']({ - d: point.haloPath(haloOptions.size) - }); - } else if (halo) { - halo.attr({ d: [] }); - } - - point.state = state; - }, - - /** - * Get the circular path definition for the halo - * @param {Number} size The radius of the circular halo - * @returns {Array} The path definition - */ - haloPath: function (size) { - var series = this.series, - chart = series.chart, - plotBox = series.getPlotBox(), - inverted = chart.inverted, - plotX = Math.floor(this.plotX); - - return chart.renderer.symbols.circle( - plotBox.translateX + (inverted ? series.yAxis.len - this.plotY : plotX) - size, - plotBox.translateY + (inverted ? series.xAxis.len - plotX : this.plotY) - size, - size * 2, - size * 2 - ); - } - }); - - /* - * Extend the Series object with interaction - */ - - extend(Series.prototype, { - /** - * Series mouse over handler - */ - onMouseOver: function () { - var series = this, - chart = series.chart, - hoverSeries = chart.hoverSeries; - - // set normal state to previous series - if (hoverSeries && hoverSeries !== series) { - hoverSeries.onMouseOut(); - } - - // trigger the event, but to save processing time, - // only if defined - if (series.options.events.mouseOver) { - fireEvent(series, 'mouseOver'); - } - - // hover this - series.setState(HOVER_STATE); - chart.hoverSeries = series; - }, - - /** - * Series mouse out handler - */ - onMouseOut: function () { - // trigger the event only if listeners exist - var series = this, - options = series.options, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - chart.hoverSeries = null; // #182, set to null before the mouseOut event fires - - // trigger mouse out on the point, which must be in this series - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - // fire the mouse out event - if (series && options.events.mouseOut) { - fireEvent(series, 'mouseOut'); - } - - - // hide the tooltip - if (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.hide(); - } - - // set normal state - series.setState(); - }, - - /** - * Set the state of the graph - */ - setState: function (state) { - var series = this, - options = series.options, - graph = series.graph, - stateOptions = options.states, - lineWidth = options.lineWidth, - attribs, - i = 0; - - state = state || NORMAL_STATE; - - if (series.state !== state) { - series.state = state; - - if (stateOptions[state] && stateOptions[state].enabled === false) { - return; - } - - if (state) { - lineWidth = stateOptions[state].lineWidth || lineWidth + (stateOptions[state].lineWidthPlus || 0); // #4035 - } - - if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML - attribs = { - 'stroke-width': lineWidth - }; - // use attr because animate will cause any other animation on the graph to stop - graph.attr(attribs); - while (series['zoneGraph' + i]) { - series['zoneGraph' + i].attr(attribs); - i = i + 1; - } - } - } - }, - - /** - * Set the visibility of the graph - * - * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED, - * the visibility is toggled. - */ - setVisible: function (vis, redraw) { - var series = this, - chart = series.chart, - legendItem = series.legendItem, - showOrHide, - ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, - oldVisibility = series.visible; - - // if called without an argument, toggle visibility - series.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis; - showOrHide = vis ? 'show' : 'hide'; - - // show or hide elements - each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) { - if (series[key]) { - series[key][showOrHide](); - } - }); - - - // hide tooltip (#1361) - if (chart.hoverSeries === series || (chart.hoverPoint && chart.hoverPoint.series) === series) { - series.onMouseOut(); - } - - - if (legendItem) { - chart.legend.colorizeItem(series, vis); - } - - - // rescale or adapt to resized chart - series.isDirty = true; - // in a stack, all other series are affected - if (series.options.stacking) { - each(chart.series, function (otherSeries) { - if (otherSeries.options.stacking && otherSeries.visible) { - otherSeries.isDirty = true; - } - }); - } - - // show or hide linked series - each(series.linkedSeries, function (otherSeries) { - otherSeries.setVisible(vis, false); - }); - - if (ignoreHiddenSeries) { - chart.isDirtyBox = true; - } - if (redraw !== false) { - chart.redraw(); - } - - fireEvent(series, showOrHide); - }, - - /** - * Show the graph - */ - show: function () { - this.setVisible(true); - }, - - /** - * Hide the graph - */ - hide: function () { - this.setVisible(false); - }, - - - /** - * Set the selected state of the graph - * - * @param selected {Boolean} True to select the series, false to unselect. If - * UNDEFINED, the selection state is toggled. - */ - select: function (selected) { - var series = this; - // if called without an argument, toggle - series.selected = selected = (selected === UNDEFINED) ? !series.selected : selected; - - if (series.checkbox) { - series.checkbox.checked = selected; - } - - fireEvent(series, selected ? 'select' : 'unselect'); - }, - - drawTracker: TrackerMixin.drawTrackerGraph - }); - - // global variables - extend(Highcharts, { - - // Constructors - Color: Color, - Point: Point, - Tick: Tick, - Renderer: Renderer, - SVGElement: SVGElement, - SVGRenderer: SVGRenderer, - - // Various - arrayMin: arrayMin, - arrayMax: arrayMax, - charts: charts, - dateFormat: dateFormat, - error: error, - format: format, - pathAnim: pathAnim, - getOptions: getOptions, - hasBidiBug: hasBidiBug, - isTouchDevice: isTouchDevice, - setOptions: setOptions, - addEvent: addEvent, - removeEvent: removeEvent, - createElement: createElement, - discardElement: discardElement, - css: css, - each: each, - map: map, - merge: merge, - splat: splat, - stableSort: stableSort, - extendClass: extendClass, - pInt: pInt, - svg: hasSVG, - canvas: useCanVG, - vml: !hasSVG && !useCanVG, - product: PRODUCT, - version: VERSION - }); - - return Highcharts; -})); diff --git a/platforms/browser/www/lib/highcharts/modules/boost.js b/platforms/browser/www/lib/highcharts/modules/boost.js deleted file mode 100644 index 28e8b662..00000000 --- a/platforms/browser/www/lib/highcharts/modules/boost.js +++ /dev/null @@ -1,12 +0,0 @@ -(function(c){typeof module==="object"&&module.exports?module.exports=c:c(Highcharts)})(function(c){function v(a,b,d,e,f){f=f||0;e=e||w;k(a.slice(f,f+e),b);f+e<a.length?setTimeout(function(){v(a,b,d,e,f+e)}):d&&d()}var p=c.win.document,M=function(){},N=c.Color,j=c.Series,h=c.seriesTypes,k=c.each,q=c.extend,O=c.addEvent,P=c.fireEvent,Q=c.merge,R=c.pick,g=c.wrap,n=c.getOptions().plotOptions,w=5E4;k(["area","arearange","column","line","scatter"],function(a){if(n[a])n[a].boostThreshold=5E3});k(["translate", -"generatePoints","drawTracker","drawPoints","render"],function(a){function b(b){var e=this.options.stacking&&(a==="translate"||a==="generatePoints");if((this.processedXData||this.options.data).length<(this.options.boostThreshold||Number.MAX_VALUE)||e){if(a==="render"&&this.image)this.image.attr({href:""}),this.animate=null;b.call(this)}else if(this[a+"Canvas"])this[a+"Canvas"]()}g(j.prototype,a,b);a==="translate"&&(h.column&&g(h.column.prototype,a,b),h.arearange&&g(h.arearange.prototype,a,b))});g(j.prototype, -"getExtremes",function(a){this.hasExtremes()||a.apply(this,Array.prototype.slice.call(arguments,1))});g(j.prototype,"setData",function(a){this.hasExtremes(!0)||a.apply(this,Array.prototype.slice.call(arguments,1))});g(j.prototype,"processData",function(a){this.hasExtremes(!0)||a.apply(this,Array.prototype.slice.call(arguments,1))});c.extend(j.prototype,{pointRange:0,hasExtremes:function(a){var b=this.options,d=this.xAxis&&this.xAxis.options,e=this.yAxis&&this.yAxis.options;return b.data.length>(b.boostThreshold|| -Number.MAX_VALUE)&&typeof e.min==="number"&&typeof e.max==="number"&&(!a||typeof d.min==="number"&&typeof d.max==="number")},destroyGraphics:function(){var a=this,b=this.points,d,e;if(b)for(e=0;e<b.length;e+=1)if((d=b[e])&&d.graphic)d.graphic=d.graphic.destroy();k(["graph","area","tracker"],function(b){a[b]&&(a[b]=a[b].destroy())})},getContext:function(){var a=this.chart,b=a.plotWidth,d=a.plotHeight,e=this.ctx,f=function(a,b,d,e,f,c,i){a.call(this,d,b,e,f,c,i)};this.canvas?e.clearRect(0,0,b,d):(this.canvas= -p.createElement("canvas"),this.image=a.renderer.image("",0,0,b,d).add(this.group),this.ctx=e=this.canvas.getContext("2d"),a.inverted&&k(["moveTo","lineTo","rect","arc"],function(a){g(e,a,f)}));this.canvas.setAttribute("width",b);this.canvas.setAttribute("height",d);this.image.attr({width:b,height:d});return e},canvasToSVG:function(){this.image.attr({href:this.canvas.toDataURL("image/png")})},cvsLineTo:function(a,b,d){a.lineTo(b,d)},renderCanvas:function(){var a=this,b=a.options,d=a.chart,e=this.xAxis, -f=this.yAxis,c,h,g=0,j=a.processedXData,k=a.processedYData,n=b.data,i=e.getExtremes(),p=i.min,S=i.max,i=f.getExtremes(),T=i.min,U=i.max,x={},r,V=!!a.sampling,y,z=b.marker&&b.marker.radius,A=this.cvsDrawPoint,B=b.lineWidth?this.cvsLineTo:!1,C=z<=1?this.cvsMarkerSquare:this.cvsMarkerCircle,W=b.enableMouseTracking!==!1,D,i=b.threshold,l=f.getThreshold(i),E=typeof i==="number",F=l,X=this.fill,G=a.pointArrayMap&&a.pointArrayMap.join(",")==="low,high",H=!!b.stacking,Y=a.cropStart||0,i=d.options.loading, -Z=a.requireSorting,I,$=b.connectNulls,J=!j,s,t,m,o,aa=a.fillOpacity?(new N(a.color)).setOpacity(R(b.fillOpacity,0.75)).get():a.color,K=function(){X?(c.fillStyle=aa,c.fill()):(c.strokeStyle=a.color,c.lineWidth=b.lineWidth,c.stroke())},L=function(a,b,d){g===0&&c.beginPath();I?c.moveTo(a,b):A?A(c,a,b,d,D):B?B(c,a,b):C&&C(c,a,b,z);g+=1;g===1E3&&(K(),g=0);D={clientX:a,plotY:b,yBottom:d}},u=function(a,b,c){W&&!x[a+","+b]&&(x[a+","+b]=!0,d.inverted&&(a=e.len-a,b=f.len-b),y.push({clientX:a,plotX:a,plotY:b, -i:Y+c}))};(this.points||this.graph)&&this.destroyGraphics();a.plotGroup("group","series",a.visible?"visible":"hidden",b.zIndex,d.seriesGroup);a.getAttribs();a.markerGroup=a.group;O(a,"destroy",function(){a.markerGroup=null});y=this.points=[];c=this.getContext();a.buildKDTree=M;if(n.length>99999)d.options.loading=Q(i,{labelStyle:{backgroundColor:"rgba(255,255,255,0.75)",padding:"1em",borderRadius:"0.5em"},style:{backgroundColor:"none",opacity:1}}),d.showLoading("Drawing..."),d.options.loading=i,d.loadingShown=== -!0?d.loadingShown=1:d.loadingShown+=1;h=0;v(H?a.data:j||n,function(b){var d,c,g,i=!0;J?(d=b[0],c=b[1]):(d=b,c=k[h]);if(G)J&&(c=b.slice(1,3)),g=c[0],c=c[1];else if(H)d=b.x,c=b.stackY,g=c-b.y;b=c===null;Z||(i=c>=T&&c<=U);if(!b&&d>=p&&d<=S&&i)if(d=Math.round(e.toPixels(d,!0)),V){if(m===void 0||d===r){G||(g=c);if(o===void 0||c>t)t=c,o=h;if(m===void 0||g<s)s=g,m=h}d!==r&&(m!==void 0&&(c=f.toPixels(t,!0),l=f.toPixels(s,!0),L(d,E?Math.min(c,F):c,E?Math.max(l,F):l),u(d,c,o),l!==c&&u(d,l,m)),m=o=void 0,r= -d)}else c=Math.round(f.toPixels(c,!0)),L(d,c,l),u(d,c,h);I=b&&!$;h+=1;h%w===0&&a.canvasToSVG()},function(){var b=d.loadingDiv,c=+d.loadingShown;K();a.canvasToSVG();P(a,"renderedCanvas");if(c===1)q(b.style,{transition:"opacity 250ms",opacity:0}),d.loadingShown=!1,setTimeout(function(){b.parentNode&&b.parentNode.removeChild(b);d.loadingDiv=d.loadingSpan=null},250);if(c)d.loadingShown=c-1;a.directTouch=!1;a.options.stickyTracking=!0;delete a.buildKDTree;a.buildKDTree()},d.renderer.forExport?Number.MAX_VALUE: -void 0)}});h.scatter.prototype.cvsMarkerCircle=function(a,b,d,c){a.moveTo(b,d);a.arc(b,d,c,0,2*Math.PI,!1)};h.scatter.prototype.cvsMarkerSquare=function(a,b,d,c){a.moveTo(b,d);a.rect(b-c,d-c,c*2,c*2)};h.scatter.prototype.fill=!0;q(h.area.prototype,{cvsDrawPoint:function(a,b,c,e,f){f&&b!==f.clientX&&(a.moveTo(f.clientX,f.yBottom),a.lineTo(f.clientX,f.plotY),a.lineTo(b,c),a.lineTo(b,e))},fill:!0,fillOpacity:!0,sampling:!0});q(h.column.prototype,{cvsDrawPoint:function(a,b,c,e){a.rect(b-1,c,1,e-c)},fill:!0, -sampling:!0});j.prototype.getPoint=function(a){var b=a;if(a&&!(a instanceof this.pointClass))b=(new this.pointClass).init(this,this.options.data[a.i]),b.category=b.x,b.dist=a.dist,b.distX=a.distX,b.plotX=a.plotX,b.plotY=a.plotY;return b};g(j.prototype,"searchPoint",function(a){return this.getPoint(a.apply(this,[].slice.call(arguments,1)))})}); diff --git a/platforms/browser/www/lib/highcharts/modules/boost.src.js b/platforms/browser/www/lib/highcharts/modules/boost.src.js deleted file mode 100644 index 15bb91db..00000000 --- a/platforms/browser/www/lib/highcharts/modules/boost.src.js +++ /dev/null @@ -1,595 +0,0 @@ -/** - * This is an experimental Highcharts module that draws long data series on a canvas - * in order to increase performance of the initial load time and tooltip responsiveness. - * - * Compatible with HTML5 canvas compatible browsers (not IE < 9). - * - * Author: Torstein Honsi - * - * - * Development plan - * - Column range. - * - Heatmap. - * - Treemap. - * - Check how it works with Highstock and data grouping. - * - Check inverted charts. - * - Check reversed axes. - * - Chart callback should be async after last series is drawn. (But not necessarily, we don't do - that with initial series animation). - * - Cache full-size image so we don't have to redraw on hide/show and zoom up. But k-d-tree still - * needs to be built. - * - Test IE9 and IE10. - * - Stacking is not perhaps not correct since it doesn't use the translation given in - * the translate method. If this gets to complicated, a possible way out would be to - * have a simplified renderCanvas method that simply draws the areaPath on a canvas. - * - * If this module is taken in as part of the core - * - All the loading logic should be merged with core. Update styles in the core. - * - Most of the method wraps should probably be added directly in parent methods. - * - * Notes for boost mode - * - Area lines are not drawn - * - Point markers are not drawn - * - Zones and negativeColor don't work - * - Columns are always one pixel wide. Don't set the threshold too low. - * - * Optimizing tips for users - * - For scatter plots, use a marker.radius of 1 or less. It results in a rectangle being drawn, which is - * considerably faster than a circle. - * - Set extremes (min, max) explicitly on the axes in order for Highcharts to avoid computing extremes. - * - Set enableMouseTracking to false on the series to improve total rendering time. - * - The default threshold is set based on one series. If you have multiple, dense series, the combined - * number of points drawn gets higher, and you may want to set the threshold lower in order to - * use optimizations. - */ - -/* eslint indent: [2, 4] */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - 'use strict'; - - var win = H.win, - doc = win.document, - noop = function () {}, - Color = H.Color, - Series = H.Series, - seriesTypes = H.seriesTypes, - each = H.each, - extend = H.extend, - addEvent = H.addEvent, - fireEvent = H.fireEvent, - merge = H.merge, - pick = H.pick, - wrap = H.wrap, - plotOptions = H.getOptions().plotOptions, - CHUNK_SIZE = 50000; - - function eachAsync(arr, fn, finalFunc, chunkSize, i) { - i = i || 0; - chunkSize = chunkSize || CHUNK_SIZE; - each(arr.slice(i, i + chunkSize), fn); - if (i + chunkSize < arr.length) { - setTimeout(function () { - eachAsync(arr, fn, finalFunc, chunkSize, i + chunkSize); - }); - } else if (finalFunc) { - finalFunc(); - } - } - - // Set default options - each(['area', 'arearange', 'column', 'line', 'scatter'], function (type) { - if (plotOptions[type]) { - plotOptions[type].boostThreshold = 5000; - } - }); - - /** - * Override a bunch of methods the same way. If the number of points is below the threshold, - * run the original method. If not, check for a canvas version or do nothing. - */ - each(['translate', 'generatePoints', 'drawTracker', 'drawPoints', 'render'], function (method) { - function branch(proceed) { - var letItPass = this.options.stacking && (method === 'translate' || method === 'generatePoints'); - if ((this.processedXData || this.options.data).length < (this.options.boostThreshold || Number.MAX_VALUE) || - letItPass) { - - // Clear image - if (method === 'render' && this.image) { - this.image.attr({ href: '' }); - this.animate = null; // We're zooming in, don't run animation - } - - proceed.call(this); - - // If a canvas version of the method exists, like renderCanvas(), run - } else if (this[method + 'Canvas']) { - - this[method + 'Canvas'](); - } - } - wrap(Series.prototype, method, branch); - - // A special case for some types - its translate method is already wrapped - if (method === 'translate') { - if (seriesTypes.column) { - wrap(seriesTypes.column.prototype, method, branch); - } - if (seriesTypes.arearange) { - wrap(seriesTypes.arearange.prototype, method, branch); - } - } - }); - - /** - * Do not compute extremes when min and max are set. - * If we use this in the core, we can add the hook to hasExtremes to the methods directly. - */ - wrap(Series.prototype, 'getExtremes', function (proceed) { - if (!this.hasExtremes()) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - wrap(Series.prototype, 'setData', function (proceed) { - if (!this.hasExtremes(true)) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - wrap(Series.prototype, 'processData', function (proceed) { - if (!this.hasExtremes(true)) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - - - H.extend(Series.prototype, { - pointRange: 0, - - hasExtremes: function (checkX) { - var options = this.options, - data = options.data, - xAxis = this.xAxis && this.xAxis.options, - yAxis = this.yAxis && this.yAxis.options; - return data.length > (options.boostThreshold || Number.MAX_VALUE) && typeof yAxis.min === 'number' && typeof yAxis.max === 'number' && - (!checkX || (typeof xAxis.min === 'number' && typeof xAxis.max === 'number')); - }, - - /** - * If implemented in the core, parts of this can probably be shared with other similar - * methods in Highcharts. - */ - destroyGraphics: function () { - var series = this, - points = this.points, - point, - i; - - if (points) { - for (i = 0; i < points.length; i = i + 1) { - point = points[i]; - if (point && point.graphic) { - point.graphic = point.graphic.destroy(); - } - } - } - - each(['graph', 'area', 'tracker'], function (prop) { - if (series[prop]) { - series[prop] = series[prop].destroy(); - } - }); - }, - - /** - * Create a hidden canvas to draw the graph on. The contents is later copied over - * to an SVG image element. - */ - getContext: function () { - var chart = this.chart, - width = chart.plotWidth, - height = chart.plotHeight, - ctx = this.ctx, - swapXY = function (proceed, x, y, a, b, c, d) { - proceed.call(this, y, x, a, b, c, d); - }; - - if (!this.canvas) { - this.canvas = doc.createElement('canvas'); - this.image = chart.renderer.image('', 0, 0, width, height).add(this.group); - this.ctx = ctx = this.canvas.getContext('2d'); - if (chart.inverted) { - each(['moveTo', 'lineTo', 'rect', 'arc'], function (fn) { - wrap(ctx, fn, swapXY); - }); - } - } else { - ctx.clearRect(0, 0, width, height); - } - - this.canvas.setAttribute('width', width); - this.canvas.setAttribute('height', height); - this.image.attr({ - width: width, - height: height - }); - - return ctx; - }, - - /** - * Draw the canvas image inside an SVG image - */ - canvasToSVG: function () { - this.image.attr({ href: this.canvas.toDataURL('image/png') }); - }, - - cvsLineTo: function (ctx, clientX, plotY) { - ctx.lineTo(clientX, plotY); - }, - - renderCanvas: function () { - var series = this, - options = series.options, - chart = series.chart, - xAxis = this.xAxis, - yAxis = this.yAxis, - ctx, - i, - c = 0, - xData = series.processedXData, - yData = series.processedYData, - rawData = options.data, - xExtremes = xAxis.getExtremes(), - xMin = xExtremes.min, - xMax = xExtremes.max, - yExtremes = yAxis.getExtremes(), - yMin = yExtremes.min, - yMax = yExtremes.max, - pointTaken = {}, - lastClientX, - sampling = !!series.sampling, - points, - r = options.marker && options.marker.radius, - cvsDrawPoint = this.cvsDrawPoint, - cvsLineTo = options.lineWidth ? this.cvsLineTo : false, - cvsMarker = r <= 1 ? this.cvsMarkerSquare : this.cvsMarkerCircle, - enableMouseTracking = options.enableMouseTracking !== false, - lastPoint, - threshold = options.threshold, - yBottom = yAxis.getThreshold(threshold), - hasThreshold = typeof threshold === 'number', - translatedThreshold = yBottom, - doFill = this.fill, - isRange = series.pointArrayMap && series.pointArrayMap.join(',') === 'low,high', - isStacked = !!options.stacking, - cropStart = series.cropStart || 0, - loadingOptions = chart.options.loading, - requireSorting = series.requireSorting, - wasNull, - connectNulls = options.connectNulls, - useRaw = !xData, - minVal, - maxVal, - minI, - maxI, - fillColor = series.fillOpacity ? - new Color(series.color).setOpacity(pick(options.fillOpacity, 0.75)).get() : - series.color, - stroke = function () { - if (doFill) { - ctx.fillStyle = fillColor; - ctx.fill(); - } else { - ctx.strokeStyle = series.color; - ctx.lineWidth = options.lineWidth; - ctx.stroke(); - } - }, - drawPoint = function (clientX, plotY, yBottom) { - if (c === 0) { - ctx.beginPath(); - } - - if (wasNull) { - ctx.moveTo(clientX, plotY); - } else { - if (cvsDrawPoint) { - cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint); - } else if (cvsLineTo) { - cvsLineTo(ctx, clientX, plotY); - } else if (cvsMarker) { - cvsMarker(ctx, clientX, plotY, r); - } - } - - // We need to stroke the line for every 1000 pixels. It will crash the browser - // memory use if we stroke too infrequently. - c = c + 1; - if (c === 1000) { - stroke(); - c = 0; - } - - // Area charts need to keep track of the last point - lastPoint = { - clientX: clientX, - plotY: plotY, - yBottom: yBottom - }; - }, - - addKDPoint = function (clientX, plotY, i) { - - // The k-d tree requires series points. Reduce the amount of points, since the time to build the - // tree increases exponentially. - if (enableMouseTracking && !pointTaken[clientX + ',' + plotY]) { - pointTaken[clientX + ',' + plotY] = true; - - if (chart.inverted) { - clientX = xAxis.len - clientX; - plotY = yAxis.len - plotY; - } - - points.push({ - clientX: clientX, - plotX: clientX, - plotY: plotY, - i: cropStart + i - }); - } - }; - - // If we are zooming out from SVG mode, destroy the graphics - if (this.points || this.graph) { - this.destroyGraphics(); - } - - // The group - series.plotGroup( - 'group', - 'series', - series.visible ? 'visible' : 'hidden', - options.zIndex, - chart.seriesGroup - ); - - series.getAttribs(); - series.markerGroup = series.group; - addEvent(series, 'destroy', function () { - series.markerGroup = null; - }); - - points = this.points = []; - ctx = this.getContext(); - series.buildKDTree = noop; // Do not start building while drawing - - // Display a loading indicator - if (rawData.length > 99999) { - chart.options.loading = merge(loadingOptions, { - labelStyle: { - backgroundColor: 'rgba(255,255,255,0.75)', - padding: '1em', - borderRadius: '0.5em' - }, - style: { - backgroundColor: 'none', - opacity: 1 - } - }); - chart.showLoading('Drawing...'); - chart.options.loading = loadingOptions; // reset - if (chart.loadingShown === true) { - chart.loadingShown = 1; - } else { - chart.loadingShown = chart.loadingShown + 1; - } - } - - // Loop over the points - i = 0; - eachAsync(isStacked ? series.data : (xData || rawData), function (d) { - - var x, - y, - clientX, - plotY, - isNull, - low, - isYInside = true; - - if (useRaw) { - x = d[0]; - y = d[1]; - } else { - x = d; - y = yData[i]; - } - - // Resolve low and high for range series - if (isRange) { - if (useRaw) { - y = d.slice(1, 3); - } - low = y[0]; - y = y[1]; - } else if (isStacked) { - x = d.x; - y = d.stackY; - low = y - d.y; - } - - isNull = y === null; - - // Optimize for scatter zooming - if (!requireSorting) { - isYInside = y >= yMin && y <= yMax; - } - - if (!isNull && x >= xMin && x <= xMax && isYInside) { - - clientX = Math.round(xAxis.toPixels(x, true)); - - if (sampling) { - if (minI === undefined || clientX === lastClientX) { - if (!isRange) { - low = y; - } - if (maxI === undefined || y > maxVal) { - maxVal = y; - maxI = i; - } - if (minI === undefined || low < minVal) { - minVal = low; - minI = i; - } - - } - if (clientX !== lastClientX) { // Add points and reset - if (minI !== undefined) { // then maxI is also a number - plotY = yAxis.toPixels(maxVal, true); - yBottom = yAxis.toPixels(minVal, true); - drawPoint( - clientX, - hasThreshold ? Math.min(plotY, translatedThreshold) : plotY, - hasThreshold ? Math.max(yBottom, translatedThreshold) : yBottom - ); - addKDPoint(clientX, plotY, maxI); - if (yBottom !== plotY) { - addKDPoint(clientX, yBottom, minI); - } - } - - - minI = maxI = undefined; - lastClientX = clientX; - } - } else { - plotY = Math.round(yAxis.toPixels(y, true)); - drawPoint(clientX, plotY, yBottom); - addKDPoint(clientX, plotY, i); - } - } - wasNull = isNull && !connectNulls; - - i = i + 1; - - if (i % CHUNK_SIZE === 0) { - series.canvasToSVG(); - } - - }, function () { - - var loadingDiv = chart.loadingDiv, - loadingShown = +chart.loadingShown; - - stroke(); - series.canvasToSVG(); - - fireEvent(series, 'renderedCanvas'); - - // Do not use chart.hideLoading, as it runs JS animation and will be blocked by buildKDTree. - // CSS animation looks good, but then it must be deleted in timeout. If we add the module to core, - // change hideLoading so we can skip this block. - if (loadingShown === 1) { - extend(loadingDiv.style, { - transition: 'opacity 250ms', - opacity: 0 - }); - - chart.loadingShown = false; - setTimeout(function () { - if (loadingDiv.parentNode) { // In exporting it is falsy - loadingDiv.parentNode.removeChild(loadingDiv); - } - chart.loadingDiv = chart.loadingSpan = null; - }, 250); - } - if (loadingShown) { - chart.loadingShown = loadingShown - 1; - } - - // Pass tests in Pointer. - // Replace this with a single property, and replace when zooming in - // below boostThreshold. - series.directTouch = false; - series.options.stickyTracking = true; - - delete series.buildKDTree; // Go back to prototype, ready to build - series.buildKDTree(); - - // Don't do async on export, the exportChart, getSVGForExport and getSVG methods are not chained for it. - }, chart.renderer.forExport ? Number.MAX_VALUE : undefined); - } - }); - - seriesTypes.scatter.prototype.cvsMarkerCircle = function (ctx, clientX, plotY, r) { - ctx.moveTo(clientX, plotY); - ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false); - }; - - // Rect is twice as fast as arc, should be used for small markers - seriesTypes.scatter.prototype.cvsMarkerSquare = function (ctx, clientX, plotY, r) { - ctx.moveTo(clientX, plotY); - ctx.rect(clientX - r, plotY - r, r * 2, r * 2); - }; - seriesTypes.scatter.prototype.fill = true; - - extend(seriesTypes.area.prototype, { - cvsDrawPoint: function (ctx, clientX, plotY, yBottom, lastPoint) { - if (lastPoint && clientX !== lastPoint.clientX) { - ctx.moveTo(lastPoint.clientX, lastPoint.yBottom); - ctx.lineTo(lastPoint.clientX, lastPoint.plotY); - ctx.lineTo(clientX, plotY); - ctx.lineTo(clientX, yBottom); - } - }, - fill: true, - fillOpacity: true, - sampling: true - }); - - extend(seriesTypes.column.prototype, { - cvsDrawPoint: function (ctx, clientX, plotY, yBottom) { - ctx.rect(clientX - 1, plotY, 1, yBottom - plotY); - }, - fill: true, - sampling: true - }); - - /** - * Return a full Point object based on the index. The boost module uses stripped point objects - * for performance reasons. - * @param {Number} boostPoint A stripped-down point object - * @returns {Object} A Point object as per http://api.highcharts.com/highcharts#Point - */ - Series.prototype.getPoint = function (boostPoint) { - var point = boostPoint; - - if (boostPoint && !(boostPoint instanceof this.pointClass)) { - point = (new this.pointClass()).init(this, this.options.data[boostPoint.i]); - point.category = point.x; - - point.dist = boostPoint.dist; - point.distX = boostPoint.distX; - point.plotX = boostPoint.plotX; - point.plotY = boostPoint.plotY; - } - - return point; - }; - - /** - * Return a point instance from the k-d-tree - */ - wrap(Series.prototype, 'searchPoint', function (proceed) { - return this.getPoint( - proceed.apply(this, [].slice.call(arguments, 1)) - ); - }); -})); diff --git a/platforms/browser/www/lib/highcharts/modules/broken-axis.js b/platforms/browser/www/lib/highcharts/modules/broken-axis.js deleted file mode 100644 index eb970ff3..00000000 --- a/platforms/browser/www/lib/highcharts/modules/broken-axis.js +++ /dev/null @@ -1,7 +0,0 @@ -(function(e){typeof module==="object"&&module.exports?module.exports=e:e(Highcharts)})(function(e){function u(){return Array.prototype.slice.call(arguments,1)}function s(d){d.apply(this);this.drawBreaks()}var q=e.pick,o=e.wrap,r=e.each,v=e.extend,t=e.fireEvent,p=e.Axis,w=e.Series;v(p.prototype,{isInBreak:function(d,h){var a=d.repeat||Infinity,b=d.from,c=d.to-d.from,a=h>=b?(h-b)%a:a-(b-h)%a;return d.inclusive?a<=c:a<c&&a!==0},isInAnyBreak:function(d,h){var a=this.options.breaks,b=a&&a.length,c,f,j; -if(b){for(;b--;)this.isInBreak(a[b],d)&&(c=!0,f||(f=q(a[b].showPoints,this.isXAxis?!1:!0)));j=c&&h?c&&!f:c}return j}});o(p.prototype,"setTickPositions",function(d){d.apply(this,Array.prototype.slice.call(arguments,1));if(this.options.breaks){var h=this.tickPositions,a=this.tickPositions.info,b=[],c;for(c=0;c<h.length;c++)this.isInAnyBreak(h[c])||b.push(h[c]);this.tickPositions=b;this.tickPositions.info=a}});o(p.prototype,"init",function(d,h,a){if(a.breaks&&a.breaks.length)a.ordinal=!1;d.call(this, -h,a);if(this.options.breaks){var b=this;b.doPostTranslate=!0;this.val2lin=function(c){var f=c,a,d;for(d=0;d<b.breakArray.length;d++)if(a=b.breakArray[d],a.to<=c)f-=a.len;else if(a.from>=c)break;else if(b.isInBreak(a,c)){f-=c-a.from;break}return f};this.lin2val=function(c){var f,a;for(a=0;a<b.breakArray.length;a++)if(f=b.breakArray[a],f.from>=c)break;else f.to<c?c+=f.len:b.isInBreak(f,c)&&(c+=f.len);return c};this.setExtremes=function(c,a,b,d,h){for(;this.isInAnyBreak(c);)c-=this.closestPointRange; -for(;this.isInAnyBreak(a);)a-=this.closestPointRange;p.prototype.setExtremes.call(this,c,a,b,d,h)};this.setAxisTranslation=function(c){p.prototype.setAxisTranslation.call(this,c);var a=b.options.breaks,c=[],d=[],h=0,k,g,e=b.userMin||b.min,l=b.userMax||b.max,i,n;for(n in a)g=a[n],k=g.repeat||Infinity,b.isInBreak(g,e)&&(e+=g.to%k-e%k),b.isInBreak(g,l)&&(l-=l%k-g.from%k);for(n in a){g=a[n];i=g.from;for(k=g.repeat||Infinity;i-k>e;)i-=k;for(;i<e;)i+=k;for(;i<l;i+=k)c.push({value:i,move:"in"}),c.push({value:i+ -(g.to-g.from),move:"out",size:g.breakSize})}c.sort(function(a,c){return a.value===c.value?(a.move==="in"?0:1)-(c.move==="in"?0:1):a.value-c.value});a=0;i=e;for(n in c){g=c[n];a+=g.move==="in"?1:-1;if(a===1&&g.move==="in")i=g.value;a===0&&(d.push({from:i,to:g.value,len:g.value-i-(g.size||0)}),h+=g.value-i-(g.size||0))}b.breakArray=d;t(b,"afterBreaks");b.transA*=(l-b.min)/(l-e-h);b.min=e;b.max=l}}});o(w.prototype,"generatePoints",function(d){d.apply(this,u(arguments));var e=this.xAxis,a=this.yAxis, -b=this.points,c,f=b.length,j=this.options.connectNulls,m;if(e&&a&&(e.options.breaks||a.options.breaks))for(;f--;)if(c=b[f],m=c.y===null&&j===!1,!m&&(e.isInAnyBreak(c.x,!0)||a.isInAnyBreak(c.y,!0)))b.splice(f,1),this.data[f]&&this.data[f].destroyElements()});e.Series.prototype.drawBreaks=function(){var d=this,e=d.points,a,b,c,f,j;r(["y","x"],function(m){a=d[m+"Axis"];b=a.breakArray||[];c=a.isXAxis?a.min:q(d.options.threshold,a.min);r(e,function(d){j=q(d["stack"+m.toUpperCase()],d[m]);r(b,function(b){f= -!1;if(c<b.from&&j>b.to||c>b.from&&j<b.from)f="pointBreak";else if(c<b.from&&j>b.from&&j<b.to||c>b.from&&j>b.to&&j<b.from)f="pointInBreak";f&&t(a,f,{point:d,brk:b})})})})};o(e.seriesTypes.column.prototype,"drawPoints",s);o(e.Series.prototype,"drawPoints",s)}); diff --git a/platforms/browser/www/lib/highcharts/modules/broken-axis.src.js b/platforms/browser/www/lib/highcharts/modules/broken-axis.src.js deleted file mode 100644 index 8b85f13b..00000000 --- a/platforms/browser/www/lib/highcharts/modules/broken-axis.src.js +++ /dev/null @@ -1,330 +0,0 @@ -/** - * Highcharts JS v4.2.1 (2015-12-21) - * Highcharts Broken Axis module - * - * License: www.highcharts.com/license - */ - -(function (factory) { - /*= if (!build.assembly) { =*/ - if (typeof module === 'object' && module.exports) { - module.exports = factory; - return; - } - /*= } =*/ - factory(Highcharts); - -}(function (H) { - - 'use strict'; - - var pick = H.pick, - wrap = H.wrap, - each = H.each, - extend = H.extend, - fireEvent = H.fireEvent, - Axis = H.Axis, - Series = H.Series; - - function stripArguments() { - return Array.prototype.slice.call(arguments, 1); - } - - extend(Axis.prototype, { - isInBreak: function (brk, val) { - var ret, - repeat = brk.repeat || Infinity, - from = brk.from, - length = brk.to - brk.from, - test = (val >= from ? (val - from) % repeat : repeat - ((from - val) % repeat)); - - if (!brk.inclusive) { - ret = test < length && test !== 0; - } else { - ret = test <= length; - } - return ret; - }, - - isInAnyBreak: function (val, testKeep) { - - var breaks = this.options.breaks, - i = breaks && breaks.length, - inbrk, - keep, - ret; - - - if (i) { - - while (i--) { - if (this.isInBreak(breaks[i], val)) { - inbrk = true; - if (!keep) { - keep = pick(breaks[i].showPoints, this.isXAxis ? false : true); - } - } - } - - if (inbrk && testKeep) { - ret = inbrk && !keep; - } else { - ret = inbrk; - } - } - return ret; - } - }); - - wrap(Axis.prototype, 'setTickPositions', function (proceed) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - - if (this.options.breaks) { - var axis = this, - tickPositions = this.tickPositions, - info = this.tickPositions.info, - newPositions = [], - i; - - for (i = 0; i < tickPositions.length; i++) { - if (!axis.isInAnyBreak(tickPositions[i])) { - newPositions.push(tickPositions[i]); - } - } - - this.tickPositions = newPositions; - this.tickPositions.info = info; - } - }); - - wrap(Axis.prototype, 'init', function (proceed, chart, userOptions) { - // Force Axis to be not-ordinal when breaks are defined - if (userOptions.breaks && userOptions.breaks.length) { - userOptions.ordinal = false; - } - - proceed.call(this, chart, userOptions); - - if (this.options.breaks) { - - var axis = this; - - axis.doPostTranslate = true; - - this.val2lin = function (val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.to <= val) { - nval -= brk.len; - } else if (brk.from >= val) { - break; - } else if (axis.isInBreak(brk, val)) { - nval -= (val - brk.from); - break; - } - } - - return nval; - }; - - this.lin2val = function (val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.from >= nval) { - break; - } else if (brk.to < nval) { - nval += brk.len; - } else if (axis.isInBreak(brk, nval)) { - nval += brk.len; - } - } - return nval; - }; - - this.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) { - // If trying to set extremes inside a break, extend it to before and after the break ( #3857 ) - while (this.isInAnyBreak(newMin)) { - newMin -= this.closestPointRange; - } - while (this.isInAnyBreak(newMax)) { - newMax -= this.closestPointRange; - } - Axis.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments); - }; - - this.setAxisTranslation = function (saveOld) { - Axis.prototype.setAxisTranslation.call(this, saveOld); - - var breaks = axis.options.breaks, - breakArrayT = [], // Temporary one - breakArray = [], - length = 0, - inBrk, - repeat, - brk, - min = axis.userMin || axis.min, - max = axis.userMax || axis.max, - start, - i, - j; - - // Min & max check (#4247) - for (i in breaks) { - brk = breaks[i]; - repeat = brk.repeat || Infinity; - if (axis.isInBreak(brk, min)) { - min += (brk.to % repeat) - (min % repeat); - } - if (axis.isInBreak(brk, max)) { - max -= (max % repeat) - (brk.from % repeat); - } - } - - // Construct an array holding all breaks in the axis - for (i in breaks) { - brk = breaks[i]; - start = brk.from; - repeat = brk.repeat || Infinity; - - while (start - repeat > min) { - start -= repeat; - } - while (start < min) { - start += repeat; - } - - for (j = start; j < max; j += repeat) { - breakArrayT.push({ - value: j, - move: 'in' - }); - breakArrayT.push({ - value: j + (brk.to - brk.from), - move: 'out', - size: brk.breakSize - }); - } - } - - breakArrayT.sort(function (a, b) { - var ret; - if (a.value === b.value) { - ret = (a.move === 'in' ? 0 : 1) - (b.move === 'in' ? 0 : 1); - } else { - ret = a.value - b.value; - } - return ret; - }); - - // Simplify the breaks - inBrk = 0; - start = min; - - for (i in breakArrayT) { - brk = breakArrayT[i]; - inBrk += (brk.move === 'in' ? 1 : -1); - - if (inBrk === 1 && brk.move === 'in') { - start = brk.value; - } - if (inBrk === 0) { - breakArray.push({ - from: start, - to: brk.value, - len: brk.value - start - (brk.size || 0) - }); - length += brk.value - start - (brk.size || 0); - } - } - - axis.breakArray = breakArray; - - fireEvent(axis, 'afterBreaks'); - - axis.transA *= ((max - axis.min) / (max - min - length)); - - axis.min = min; - axis.max = max; - }; - } - }); - - wrap(Series.prototype, 'generatePoints', function (proceed) { - - proceed.apply(this, stripArguments(arguments)); - - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - points = series.points, - point, - i = points.length, - connectNulls = series.options.connectNulls, - nullGap; - - - if (xAxis && yAxis && (xAxis.options.breaks || yAxis.options.breaks)) { - while (i--) { - point = points[i]; - - nullGap = point.y === null && connectNulls === false; // respect nulls inside the break (#4275) - if (!nullGap && (xAxis.isInAnyBreak(point.x, true) || yAxis.isInAnyBreak(point.y, true))) { - points.splice(i, 1); - if (this.data[i]) { - this.data[i].destroyElements(); // removes the graphics for this point if they exist - } - } - } - } - - }); - - function drawPointsWrapped(proceed) { - proceed.apply(this); - this.drawBreaks(); - } - - H.Series.prototype.drawBreaks = function () { - var series = this, - points = series.points, - axis, - breaks, - threshold, - axisName = 'Axis', - eventName, - y; - - each(['y', 'x'], function (key) { - axis = series[key + axisName]; - breaks = axis.breakArray || []; - threshold = axis.isXAxis ? axis.min : pick(series.options.threshold, axis.min); - each(points, function (point) { - y = pick(point['stack' + key.toUpperCase()], point[key]); - each(breaks, function (brk) { - eventName = false; - - if ((threshold < brk.from && y > brk.to) || (threshold > brk.from && y < brk.from)) { - eventName = 'pointBreak'; - } else if ((threshold < brk.from && y > brk.from && y < brk.to) || (threshold > brk.from && y > brk.to && y < brk.from)) { // point falls inside the break - eventName = 'pointInBreak'; // docs - } - if (eventName) { - fireEvent(axis, eventName, { point: point, brk: brk }); - } - }); - }); - }); - }; - - wrap(H.seriesTypes.column.prototype, 'drawPoints', drawPointsWrapped); - wrap(H.Series.prototype, 'drawPoints', drawPointsWrapped); - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/canvas-tools.js b/platforms/browser/www/lib/highcharts/modules/canvas-tools.js deleted file mode 100644 index 1b88365a..00000000 --- a/platforms/browser/www/lib/highcharts/modules/canvas-tools.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - A class to parse color values - @author Stoyan Stefanov <sstoo@gmail.com> - @link http://www.phpied.com/rgb-color-parser-in-javascript/ - Use it if you like it - - canvg.js - Javascript SVG parser and renderer on Canvas - MIT Licensed - Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/ - - Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - - Highcharts JS v4.2.1 (2015-12-21) - CanVGRenderer Extension module - - (c) 2011-2012 Torstein Honsi, Erik Olsson - - License: www.highcharts.com/license -*/ -function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var m=m.replace(/ /g,""),m=m.toLowerCase(),a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b", -darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff", -gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa", -lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080", -oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd", -slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/, -example:["#00ff00","336699"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0: -this.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b="0"+b);a.length==1&&(a="0"+a);d.length==1&&(d="0"+d);return"#"+b+a+d};this.getHelpXML=function(){for(var b=[],c=0;c<d.length;c++)for(var k=d[c].example,h=0;h<k.length;h++)b[b.length]=k[h];for(var j in a)b[b.length]=j;k=document.createElement("ul"); -k.setAttribute("id","rgbcolor-examples");for(c=0;c<b.length;c++)try{var l=document.createElement("li"),o=new RGBColor(b[c]),n=document.createElement("div");n.style.cssText="margin: 3px; border: 1px solid black; background:"+o.toHex()+"; color:"+o.toHex();n.appendChild(document.createTextNode("test"));var q=document.createTextNode(" "+b[c]+" -> "+o.toRGB()+" -> "+o.toHex());l.appendChild(n);l.appendChild(q);k.appendChild(l)}catch(p){}return k}} -if(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1}; -(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height}; -this.ComputeSize=function(a){return a!=null&&typeof a=="number"?a:a=="x"?this.width():a=="y"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\s+|\s+$/g,"")};a.compressSpaces=function(a){return a?a.replace(/[\s\r\t\n]+/gm," "):""};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"))? -(d.open("GET",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,""),d=new ActiveXObject("Microsoft.XMLDOM");d.async="false";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==""};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+"").match(/%$/)&& -(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=""){var f=new RGBColor(b.value);f.ok&&(c="rgba("+f.r+", "+f.g+", "+f.b+", "+d+")")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\()?#([^\)]+)\)?$/,"$2");return a.Definitions[d]},isUrl:function(){return b.value.indexOf("url(")== -0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+"";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)? -b.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+"";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+ -"";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=["normal","italic","oblique","inherit"];this.Variants=["normal","small-caps","inherit"];this.Weights="normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit".split(",");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont("","","","","",a.ctx.font);return{fontFamily:f|| -g.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(" ")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||"")).split(" "),k=!1,e=!1,f=!1,g=!1,h="",j=0;j<d.length;j++)if(!e&&c.Styles.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontStyle=d[j];e=!0}else if(!g&&c.Variants.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontVariant= -d[j];e=g=!0}else if(!f&&c.Weights.indexOf(d[j])!=-1){if(d[j]!="inherit")b.fontWeight=d[j];e=g=f=!0}else if(k)d[j]!="inherit"&&(h+=d[j]);else{if(d[j]!="inherit")b.fontSize=d[j].split("/")[0];e=g=f=k=!0}if(h!="")b.fontFamily=h;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||"").replace(/,/g," "))).split(" "),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform= -function(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2- -this.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c- -a);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k= -(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1, -0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property("angle",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x|| -0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle= -new a.Property("angle",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)}; -this.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split("(")[0],e=c[b].split("(")[1].replace(")","");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,h,j,l){var d=a.compressSpaces(d),d=d.replace(/^defer\s/,""),o=d.split(" ")[0]||"xMidYMid",d=d.split(" ")[1]||"meet",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d=="meet"&&(k*= -p,f*=p);d=="slice"&&(k*=m,f*=m);j=new a.Property("refX",j);l=new a.Property("refY",l);j.hasValue()&&l.hasValue()?c.translate(-p*j.Length.toPixels("x"),-p*l.Length.toPixels("y")):(o.match(/^xMid/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e-f));o=="none"?c.scale(n, -q):d=="meet"?c.scale(p,p):d=="slice"&&c.scale(m,m);c.translate(g==null?0:-g,h==null?0:-h)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,"");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c; -c=new a.Property(b,"");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style("display").value!="none"&&this.attribute("visibility").value!="hidden"){b.save();this.setContext(b);if(this.attribute("mask").hasValue()){var a=this.attribute("mask").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style("filter").hasValue()?(a=this.style("filter").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext= -function(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName]; -if(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute("class").hasValue())for(var d=a.compressSpaces(this.attribute("class").value).split(" "),e=0;e<d.length;e++){b=a.Styles["."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+"."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute("style").hasValue()){b=this.attribute("style").value.split(";");for(d=0;d<b.length;d++)a.trim(b[d])!=""&&(c=b[d].split(":"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k, -c))}this.attribute("id").hasValue()&&a.Definitions[this.attribute("id").value]==null&&(a.Definitions[this.attribute("id").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style("fill").Definition.isUrl()){var b=this.style("fill").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style("fill").hasValue())b=this.style("fill"),this.style("fill-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("fill-opacity").value)), -d.fillStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke").Definition.isUrl()){if(b=this.style("stroke").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style("stroke").hasValue())b=this.style("stroke"),this.style("stroke-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("stroke-opacity").value)),d.strokeStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke-width").hasValue())d.lineWidth=this.style("stroke-width").Length.toPixels();if(this.style("stroke-linecap").hasValue())d.lineCap= -this.style("stroke-linecap").value;if(this.style("stroke-linejoin").hasValue())d.lineJoin=this.style("stroke-linejoin").value;if(this.style("stroke-miterlimit").hasValue())d.miterLimit=this.style("stroke-miterlimit").value;if(typeof d.font!="undefined")d.font=a.Font.CreateFont(this.style("font-style").value,this.style("font-variant").value,this.style("font-weight").value,this.style("font-size").hasValue()?this.style("font-size").Length.toPixels()+"px":"",this.style("font-family").value).toString(); -this.attribute("transform").hasValue()&&(new a.Transform(this.attribute("transform").value)).apply(d);this.attribute("clip-path").hasValue()&&(b=this.attribute("clip-path").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style("opacity").hasValue())d.globalAlpha=this.style("opacity").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath(); -return new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=""&&d.fill();d.strokeStyle!=""&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style("marker-start").Definition.isUrl()){var c=this.style("marker-start").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style("marker-mid").Definition.isUrl())for(var c=this.style("marker-mid").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style("marker-end").Definition.isUrl()&& -(c=this.style("marker-end").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext; -this.setContext=function(d){d.strokeStyle="rgba(0,0,0,0)";d.lineCap="butt";d.lineJoin="miter";d.miterLimit=4;this.baseSetContext(d);this.attribute("x").hasValue()&&this.attribute("y").hasValue()&&d.translate(this.attribute("x").Length.toPixels("x"),this.attribute("y").Length.toPixels("y"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root=="undefined"&&this.attribute("width").hasValue()&&this.attribute("height").hasValue()){var b=this.attribute("width").Length.toPixels("x"),c=this.attribute("height").Length.toPixels("y"), -e=0,f=0;this.attribute("refX").hasValue()&&this.attribute("refY").hasValue()&&(e=-this.attribute("refX").Length.toPixels("x"),f=-this.attribute("refY").Length.toPixels("y"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute("viewBox").hasValue()){var e=a.ToNumberArray(this.attribute("viewBox").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute("preserveAspectRatio").value,a.ViewPort.width(),b,a.ViewPort.height(), -c,f,g,this.attribute("refX").value,this.attribute("refY").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("x").Length.toPixels("x"),c=this.attribute("y").Length.toPixels("y"),e=this.attribute("width").Length.toPixels("x"),f=this.attribute("height").Length.toPixels("y"),g=this.attribute("rx").Length.toPixels("x"), -h=this.attribute("ry").Length.toPixels("y");this.attribute("rx").hasValue()&&!this.attribute("ry").hasValue()&&(h=g);this.attribute("ry").hasValue()&&!this.attribute("rx").hasValue()&&(g=h);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+h),d.lineTo(b+e,c+f-h),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-h),d.lineTo(b,c+h),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype= -new a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("cx").Length.toPixels("x"),c=this.attribute("cy").Length.toPixels("y"),e=this.attribute("r").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c); -this.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute("rx").Length.toPixels("x"),e=this.attribute("ry").Length.toPixels("y"),f=this.attribute("cx").Length.toPixels("x"),g=this.attribute("cy").Length.toPixels("y");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype= -new a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute("x1").Length.toPixels("x"),this.attribute("y1").Length.toPixels("y")),new a.Point(this.attribute("x2").Length.toPixels("x"),this.attribute("y2").Length.toPixels("y"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)}; -this.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute("points").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x, -this.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x, -this.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute("d").value;c=c.replace(/,/gm," ");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,"$1 $2");c=c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([0-9])([+\-])/gm, -"$1 $2");c=c.replace(/(\.[0-9]*)(\.)/gm,"$1 $2");c=c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,"$1 $3 $4 ");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(" ");this.reset=function(){this.i=-1;this.previousCommand=this.command="";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()? -!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint(); -return this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!="c"&&this.previousCommand.toLowerCase()!="s"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length- -1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b= -this.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case "M":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case "L":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&& -d.lineTo(e.x,e.y)}break;case "H":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "V":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "C":for(;!b.isCommandOrEnd();){var g= -b.current,f=b.getPoint(),h=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,h,f);c.addBezierCurve(g.x,g.y,f.x,f.y,h.x,h.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,h.x,h.y,e.x,e.y)}break;case "S":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),h=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,h,f),c.addBezierCurve(g.x,g.y,f.x,f.y,h.x,h.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,h.x,h.y,e.x,e.y);break;case "Q":for(;!b.isCommandOrEnd();)g=b.current,h=b.getAsControlPoint(), -e=b.getAsCurrentPoint(),b.addMarker(e,h,h),c.addQuadraticCurve(g.x,g.y,h.x,h.y,e.x,e.y),d!=null&&d.quadraticCurveTo(h.x,h.y,e.x,e.y);break;case "T":for(;!b.isCommandOrEnd();)g=b.current,h=b.getReflectedControlPoint(),b.control=h,e=b.getAsCurrentPoint(),b.addMarker(e,h,h),c.addQuadraticCurve(g.x,g.y,h.x,h.y,e.x,e.y),d!=null&&d.quadraticCurveTo(h.x,h.y,e.x,e.y);break;case "A":for(;!b.isCommandOrEnd();){var g=b.current,j=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),h=b.getScalar(), -e=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(j,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(j*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==h?-1:1)*Math.sqrt((Math.pow(j,2)*Math.pow(l,2)-Math.pow(j,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(j,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*j*n.y/l,o*-l*n.x/j),g=new a.Point((g.x+e.x)/2+Math.cos(f)* -p.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/j,(n.y-p.y)/l]),q=[(n.x-p.x)/j,(n.y-p.y)/l],p=[(-n.x-p.x)/j,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);h==0&&n>0&&(n-=2*Math.PI);h==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-j*Math.cos((o+n)/ -2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(h==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(h==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=j>l?j:l,e=j>l?1:j/l,j=j>l?l/j:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,j),d.arc(0,0,m,o,o+n,1-h),d.scale(1/e,1/j),d.rotate(-f),d.translate(-g.x,-g.y))}break;case "Z":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e], -b[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);b.attributes.x=new a.Property("x",this.attribute("x").value);b.attributes.y=new a.Property("y",this.attribute("y").value);b.attributes.width=new a.Property("width",this.attribute("width").value);b.attributes.height=new a.Property("height", -this.attribute("height").value);b.children=this.children;var c=document.createElement("canvas");c.width=this.attribute("width").Length.toPixels("x");c.height=this.attribute("height").Length.toPixels("y");b.render(c.getContext("2d"));return d.createPattern(c,"repeat")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute("orient").valueOrDefault("auto")== -"auto"&&d.rotate(c);this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);e.attributes.refX=new a.Property("refX",this.attribute("refX").value);e.attributes.refY=new a.Property("refY",this.attribute("refY").value);e.attributes.width=new a.Property("width",this.attribute("markerWidth").value);e.attributes.height=new a.Property("height", -this.attribute("markerHeight").value);e.attributes.fill=new a.Property("fill",this.attribute("fill").valueOrDefault("black"));e.attributes.stroke=new a.Property("stroke",this.attribute("stroke").valueOrDefault("none"));e.children=this.children;e.render(d);d.restore();this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute("orient").valueOrDefault("auto")=="auto"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype= -new a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute("gradientUnits").valueOrDefault("objectBoundingBox");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute("xlink:href").hasValue()&& -(c=this.attribute("xlink:href").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute("gradientTransform").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property("x",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property("y",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property("width",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property("height",a.MAX_VIRTUAL_PIXELS); -var g=new a.Element.g;g.attributes.transform=new a.Property("transform",this.attribute("gradientTransform").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property("x",0);f.attributes.y=new a.Property("y",0);f.attributes.width=new a.Property("width",c.width);f.attributes.height=new a.Property("height",c.height);f.children=[g];g=document.createElement("canvas");g.width=c.width;g.height=c.height;c=g.getContext("2d");c.fillStyle=e;f.render(c);return c.createPattern(g,"no-repeat")}return e}}; -a.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("x1").numValue():this.attribute("x1").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y1").numValue():this.attribute("y1").Length.toPixels("y"),g=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("x2").numValue():this.attribute("x2").Length.toPixels("x"),c=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y2").numValue():this.attribute("y2").Length.toPixels("y");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("cx").numValue():this.attribute("cx").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("cy").numValue():this.attribute("cy").Length.toPixels("y"),g=e,h=f;this.attribute("fx").hasValue()&&(g=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("fx").numValue():this.attribute("fx").Length.toPixels("x"));this.attribute("fy").hasValue()&&(h=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("fy").numValue(): -this.attribute("fy").Length.toPixels("y"));c=this.gradientUnits=="objectBoundingBox"?(c.width()+c.height())/2*this.attribute("r").numValue():this.attribute("r").Length.toPixels();return a.createRadialGradient(g,h,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute("offset").numValue();c=this.style("stop-color");this.style("stop-opacity").hasValue()&&(c=c.Color.addOpacity(this.style("stop-opacity").value)); -this.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute("begin").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute("dur").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute("attributeType").value,b=this.attribute("attributeName").value;return a=="CSS"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue= -null;this.removed=!1;this.calcValue=function(){return""};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute("repeatCount").value=="indefinite")this.duration=0;else return this.attribute("fill").valueOrDefault("remove")=="remove"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute("type").hasValue()&& -(a=this.attribute("type").value+"("+a+")"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute("from").numValue(),b=this.attribute("to").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor= -function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute("from").value),b=new RGBColor(this.attribute("to").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return"rgb("+parseInt(c,10)+","+parseInt(e,10)+","+parseInt(a,10)+")"}return this.attribute("from").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base= -a.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type=="font-face")this.fontFace=d,d.style("font-family").hasValue()&&(a.Definitions[d.style("font-family").value]=this);else if(d.type=="missing-glyph")this.missingGlyph= -d;else if(d.type=="glyph")d.arabicForm!=""?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]=="undefined"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute("ascent").value;this.descent=this.attribute("descent").value;this.unitsPerEm=this.attribute("units-per-em").numValue()};a.Element.fontface.prototype= -new a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.unicode=this.attribute("unicode").value;this.arabicForm=this.attribute("arabic-form").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase; -this.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style("dominant-baseline").hasValue())b.textBaseline=this.style("dominant-baseline").value;if(this.style("alignment-baseline").hasValue())b.textBaseline=this.style("alignment-baseline").value};this.renderChildren= -function(b){for(var a=this.style("text-anchor").valueOrDefault("start"),c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),h=0;h<this.children.length;h++){var j=this.children[h];j.attribute("x").hasValue()?j.x=j.attribute("x").Length.toPixels("x"):(j.attribute("dx").hasValue()&&(c+=j.attribute("dx").Length.toPixels("x")),j.x=c);c=j.measureText?j.measureText(b):0;if(a!="start"&&(h==0||j.attribute("x").hasValue())){for(var l=c,o=h+1;o<this.children.length;o++){var n= -this.children[o];if(n.attribute("x").hasValue())break;l+=n.measureText?n.measureText(b):0}j.x-=a=="end"?l:l/2}c=j.x+c;j.attribute("y").hasValue()?j.y=j.attribute("y").Length.toPixels("y"):(j.attribute("dy").hasValue()&&(d+=j.attribute("dy").Length.toPixels("y")),j.y=d);d=j.y;j.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g= -"isolated";if((c==0||b[c-1]==" ")&&c<b.length-2&&b[c+1]!=" ")g="terminal";c>0&&b[c-1]!=" "&&c<b.length-2&&b[c+1]!=" "&&(g="medial");if(c>0&&b[c-1]!=" "&&(c==b.length-1||b[c+1]==" "))g="initial";typeof a.glyphs[e]!="undefined"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type=="glyph"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var k=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -e=this.parent.style("font-style").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split("").reverse().join(""));for(var g=a.ToNumberArray(this.parent.attribute("dx").value),h=0;h<f.length;h++){var j=this.getGlyph(b,f,h),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e=="italic"&&c.transform(1,0,0.4,1,0,0);j.render(c);e=="italic"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/ -l,-1/l);c.translate(-this.x,-this.y);this.x+=k*(j.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[h]!="undefined"&&!isNaN(g[h])&&(this.x+=g[h])}}else c.strokeStyle!=""&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=""&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var c=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -k=0,e=this.getText();b.isRTL&&(e=e.split("").reverse().join(""));for(var f=a.ToNumberArray(this.parent.attribute("dx").value),g=0;g<e.length;g++){var h=this.getGlyph(b,e,g);k+=(h.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!="undefined"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase; -a.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase; -a.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:"";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x, -this.y-c.Length.toPixels("y"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute("xlink:href").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor="pointer"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement("img");this.loaded=!1;var d=this;this.img.onload= -function(){d.loaded=!0};this.img.src=this.attribute("xlink:href").value;this.renderChildren=function(b){var c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute("preserveAspectRatio").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase; -a.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute("viewBox").hasValue()){var b= -a.ToNumberArray(this.attribute("viewBox").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute("preserveAspectRatio").value,this.attribute("width").Length.toPixels("x"),width,this.attribute("height").Length.toPixels("y"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue: -""),c=c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,""),c=a.compressSpaces(c),c=c.split("}"),d=0;d<c.length;d++)if(a.trim(c[d])!="")for(var b=c[d].split("{"),k=b[0].split(","),b=b[1].split(";"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=""){for(var g={},h=0;h<b.length;h++){var j=b[h].indexOf(":"),l=b[h].substr(0,j),j=b[h].substr(j+1,b[h].length-j);l!=null&&j!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(j)))}a.Styles[f]=g;if(f=="@font-face"){f=g["font-family"].value.replace(/"/g, -"");g=g.src.value.split(",");for(h=0;h<g.length;h++)if(g[h].indexOf('format("svg")')>0){l=g[h].indexOf("url");j=g[h].indexOf(")",l);l=g[h].substr(l+5,j-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName("font");for(j=0;j<l.length;j++){var o=a.CreateElement(l[j]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a); -this.attribute("x").hasValue()&&a.translate(this.attribute("x").Length.toPixels("x"),0);this.attribute("y").hasValue()&&a.translate(0,this.attribute("y").Length.toPixels("y"))};this.getDefinition=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(this.attribute("width").hasValue())a.attribute("width",!0).value=this.attribute("width").value;if(this.attribute("height").hasValue())a.attribute("height",!0).value=this.attribute("height").value;return a};this.path=function(a){var b= -this.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute("x").Length.toPixels("x"),e=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y"),h=b.attribute("mask").value;b.attribute("mask").value= -"";var j=document.createElement("canvas");j.width=c+f;j.height=e+g;var l=j.getContext("2d");this.renderChildren(l);var o=document.createElement("canvas");o.width=c+f;o.height=e+g;var n=o.getContext("2d");b.render(n);n.globalCompositeOperation="destination-in";n.fillStyle=l.createPattern(j,"no-repeat");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,"no-repeat");a.fillRect(0,0,c+f,e+g);b.attribute("mask").value=h};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath= -function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute("x").Length.toPixels("x"),f=this.attribute("y").Length.toPixels("y");if(e==0||f==0)e=c.x1,f=c.y1;var g= -this.attribute("width").Length.toPixels("x"),h=this.attribute("height").Length.toPixels("y");if(g==0||h==0)g=c.width(),h=c.height();c=b.style("filter").value;b.style("filter").value="";var j=0.2*g,l=0.2*h,o=document.createElement("canvas");o.width=g+2*j;o.height=h+2*l;var n=o.getContext("2d");n.translate(-e+j,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*j,h+2*l);a.drawImage(o,0,0,g+2*j,h+2*l,e-j,f-l,g+2*j,h+2*l);b.style("filter",!0).value=c};this.render= -function(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var h=0;h<g;h++)for(var j=0;j<f;j++)for(var l=a[h*f*4+j*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[h*f*4+j*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(j-q,0),m=a[h*f*4+p*4+3]/255,p=Math.min(j+q,f-1),p=a[h*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(j-q,0),r=a[h*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(j+q,f-1),r=a[h*f*4+r*4+o]);n+= -s*(m+r*(p==0||o==3?1:p))}c[j*g*4+h*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute("stdDeviation").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),h=Math.ceil(e*4)+1;mask=[];for(var j=0;j<h;j++)mask[j]=Math.exp(-0.5*(j/e)*(j/e));e=mask;h=0;for(j=1;j<e.length;j++)h+=Math.abs(e[j]);h=2*h+Math.abs(e[0]);for(j=0;j<e.length;j++)e[j]/=h;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype= -new a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log("ERROR: Element '"+a.nodeName+"' not yet implemented.")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,""),d=d.replace(/\-/g,""),b=null,b=typeof a.Element[d]!="undefined"?new a.Element[d](c):new a.Element.MISSING(c); -b.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)}, -c.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style("width").hasValue())c.canvas.width=k.style("width").Length.toPixels("x"),c.canvas.style.width=c.canvas.width+"px";if(k.style("height").hasValue())c.canvas.height= -k.style("height").Length.toPixels("y"),c.canvas.style.height=c.canvas.height+"px"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute("x",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute("y",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute("width").hasValue()&&(f=k.attribute("width").Length.toPixels("x")/ -a.opts.scaleWidth);k.attribute("height").hasValue()&&(g=k.attribute("height").Length.toPixels("y")/a.opts.scaleHeight);k.attribute("width",!0).value=a.opts.scaleWidth;k.attribute("height",!0).value=a.opts.scaleHeight;k.attribute("viewBox",!0).value="0 0 "+b*f+" "+d*g;k.attribute("preserveAspectRatio",!0).value="none"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback=="function"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f()); -a.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw=="function"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!= -0};this.onclick=function(a,d){this.events.push({type:"onclick",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:"onmousemove",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k= -this.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor="";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName("svg"),b=0;b<c.length;b++){a=c[b];d=document.createElement("canvas");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d, -a);a.parentNode.removeChild(a);var k=document.createElement("div");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a=="string"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext("2d"),typeof c.documentElement!="undefined"?b.loadXmlDoc(a,c):c.substr(0,1)=="<"?b.loadXml(a,c):b.load(a,c)}})(); -if(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})}; -(function(m){var a=m.win,c=m.css,d=m.CanVGRenderer,b=m.SVGRenderer,k=m.extend,e=m.merge,f=m.addEvent,g=m.createElement,h=m.discardElement;k(d.prototype,b.prototype);k(d.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,f=d.left,d=d.top,h=a.offsetWidth,k=a.offsetHeight,m={visibility:"hidden",position:"absolute"};this.init(a,b,c);this.canvas=g("canvas",{width:h,height:k},{position:"relative",left:f,top:d},a);this.ttLine= -g("div",null,m,e);this.ttDiv=g("div",null,m,e);this.ttTimer=void 0;this.hiddenSvg=a=g("div",{width:h,height:k},{visibility:"hidden",left:f,top:d},e);a.appendChild(this.box)},configure:function(a){var b=this,d=a.options.tooltip,g=d.borderWidth,h=b.ttDiv,k=d.style,m=b.ttLine,s=parseInt(k.padding,10),k=e(k,{padding:s+"px","background-color":d.backgroundColor,"border-style":"solid","border-width":g+"px","border-radius":d.borderRadius+"px"});d.shadow&&(k=e(k,{"box-shadow":"1px 1px 3px gray","-webkit-box-shadow":"1px 1px 3px gray"})); -c(h,k);c(m,{"border-left":"1px solid darkgray"});f(a,"tooltipRefresh",function(d){var e=a.container,f=e.offsetLeft,e=e.offsetTop,g;h.innerHTML=d.text;g=a.tooltip.getPosition(h.offsetWidth,h.offsetHeight,{plotX:d.x,plotY:d.y});c(h,{visibility:"visible",left:g.x+"px",top:g.y+"px","border-color":d.borderColor});c(m,{visibility:"visible",left:f+d.x+"px",top:e+a.plotTop+"px",height:a.plotHeight+"px"});b.ttTimer!==void 0&&clearTimeout(b.ttTimer);b.ttTimer=setTimeout(function(){c(h,{visibility:"hidden"}); -c(m,{visibility:"hidden"})},3E3)})},destroy:function(){h(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);h(this.ttLine);h(this.ttDiv);h(this.hiddenSvg);return b.prototype.destroy.apply(this)},color:function(a,c,d){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return b.prototype.color.call(this,a,c,d)},draw:function(){a.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts); diff --git a/platforms/browser/www/lib/highcharts/modules/canvas-tools.src.js b/platforms/browser/www/lib/highcharts/modules/canvas-tools.src.js deleted file mode 100644 index 477dfee9..00000000 --- a/platforms/browser/www/lib/highcharts/modules/canvas-tools.src.js +++ /dev/null @@ -1,3115 +0,0 @@ -/** - * @license A class to parse color values - * @author Stoyan Stefanov <sstoo@gmail.com> - * @link http://www.phpied.com/rgb-color-parser-in-javascript/ - * Use it if you like it - * - */ -function RGBColor(color_string) -{ - this.ok = false; - - // strip any leading # - if (color_string.charAt(0) == '#') { // remove # if any - color_string = color_string.substr(1,6); - } - - color_string = color_string.replace(/ /g,''); - color_string = color_string.toLowerCase(); - - // before getting into regexps, try simple matches - // and overwrite the input - var simple_colors = { - aliceblue: 'f0f8ff', - antiquewhite: 'faebd7', - aqua: '00ffff', - aquamarine: '7fffd4', - azure: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '000000', - blanchedalmond: 'ffebcd', - blue: '0000ff', - blueviolet: '8a2be2', - brown: 'a52a2a', - burlywood: 'deb887', - cadetblue: '5f9ea0', - chartreuse: '7fff00', - chocolate: 'd2691e', - coral: 'ff7f50', - cornflowerblue: '6495ed', - cornsilk: 'fff8dc', - crimson: 'dc143c', - cyan: '00ffff', - darkblue: '00008b', - darkcyan: '008b8b', - darkgoldenrod: 'b8860b', - darkgray: 'a9a9a9', - darkgreen: '006400', - darkkhaki: 'bdb76b', - darkmagenta: '8b008b', - darkolivegreen: '556b2f', - darkorange: 'ff8c00', - darkorchid: '9932cc', - darkred: '8b0000', - darksalmon: 'e9967a', - darkseagreen: '8fbc8f', - darkslateblue: '483d8b', - darkslategray: '2f4f4f', - darkturquoise: '00ced1', - darkviolet: '9400d3', - deeppink: 'ff1493', - deepskyblue: '00bfff', - dimgray: '696969', - dodgerblue: '1e90ff', - feldspar: 'd19275', - firebrick: 'b22222', - floralwhite: 'fffaf0', - forestgreen: '228b22', - fuchsia: 'ff00ff', - gainsboro: 'dcdcdc', - ghostwhite: 'f8f8ff', - gold: 'ffd700', - goldenrod: 'daa520', - gray: '808080', - green: '008000', - greenyellow: 'adff2f', - honeydew: 'f0fff0', - hotpink: 'ff69b4', - indianred : 'cd5c5c', - indigo : '4b0082', - ivory: 'fffff0', - khaki: 'f0e68c', - lavender: 'e6e6fa', - lavenderblush: 'fff0f5', - lawngreen: '7cfc00', - lemonchiffon: 'fffacd', - lightblue: 'add8e6', - lightcoral: 'f08080', - lightcyan: 'e0ffff', - lightgoldenrodyellow: 'fafad2', - lightgrey: 'd3d3d3', - lightgreen: '90ee90', - lightpink: 'ffb6c1', - lightsalmon: 'ffa07a', - lightseagreen: '20b2aa', - lightskyblue: '87cefa', - lightslateblue: '8470ff', - lightslategray: '778899', - lightsteelblue: 'b0c4de', - lightyellow: 'ffffe0', - lime: '00ff00', - limegreen: '32cd32', - linen: 'faf0e6', - magenta: 'ff00ff', - maroon: '800000', - mediumaquamarine: '66cdaa', - mediumblue: '0000cd', - mediumorchid: 'ba55d3', - mediumpurple: '9370d8', - mediumseagreen: '3cb371', - mediumslateblue: '7b68ee', - mediumspringgreen: '00fa9a', - mediumturquoise: '48d1cc', - mediumvioletred: 'c71585', - midnightblue: '191970', - mintcream: 'f5fffa', - mistyrose: 'ffe4e1', - moccasin: 'ffe4b5', - navajowhite: 'ffdead', - navy: '000080', - oldlace: 'fdf5e6', - olive: '808000', - olivedrab: '6b8e23', - orange: 'ffa500', - orangered: 'ff4500', - orchid: 'da70d6', - palegoldenrod: 'eee8aa', - palegreen: '98fb98', - paleturquoise: 'afeeee', - palevioletred: 'd87093', - papayawhip: 'ffefd5', - peachpuff: 'ffdab9', - peru: 'cd853f', - pink: 'ffc0cb', - plum: 'dda0dd', - powderblue: 'b0e0e6', - purple: '800080', - red: 'ff0000', - rosybrown: 'bc8f8f', - royalblue: '4169e1', - saddlebrown: '8b4513', - salmon: 'fa8072', - sandybrown: 'f4a460', - seagreen: '2e8b57', - seashell: 'fff5ee', - sienna: 'a0522d', - silver: 'c0c0c0', - skyblue: '87ceeb', - slateblue: '6a5acd', - slategray: '708090', - snow: 'fffafa', - springgreen: '00ff7f', - steelblue: '4682b4', - tan: 'd2b48c', - teal: '008080', - thistle: 'd8bfd8', - tomato: 'ff6347', - turquoise: '40e0d0', - violet: 'ee82ee', - violetred: 'd02090', - wheat: 'f5deb3', - white: 'ffffff', - whitesmoke: 'f5f5f5', - yellow: 'ffff00', - yellowgreen: '9acd32' - }; - for (var key in simple_colors) { - if (color_string == key) { - color_string = simple_colors[key]; - } - } - // emd of simple type-in colors - - // array of color definition objects - var color_defs = [ - { - re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, - example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], - process: function (bits){ - return [ - parseInt(bits[1]), - parseInt(bits[2]), - parseInt(bits[3]) - ]; - } - }, - { - re: /^(\w{2})(\w{2})(\w{2})$/, - example: ['#00ff00', '336699'], - process: function (bits){ - return [ - parseInt(bits[1], 16), - parseInt(bits[2], 16), - parseInt(bits[3], 16) - ]; - } - }, - { - re: /^(\w{1})(\w{1})(\w{1})$/, - example: ['#fb0', 'f0f'], - process: function (bits){ - return [ - parseInt(bits[1] + bits[1], 16), - parseInt(bits[2] + bits[2], 16), - parseInt(bits[3] + bits[3], 16) - ]; - } - } - ]; - - // search through the definitions to find a match - for (var i = 0; i < color_defs.length; i++) { - var re = color_defs[i].re; - var processor = color_defs[i].process; - var bits = re.exec(color_string); - if (bits) { - channels = processor(bits); - this.r = channels[0]; - this.g = channels[1]; - this.b = channels[2]; - this.ok = true; - } - - } - - // validate/cleanup values - this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r); - this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g); - this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b); - - // some getters - this.toRGB = function () { - return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; - } - this.toHex = function () { - var r = this.r.toString(16); - var g = this.g.toString(16); - var b = this.b.toString(16); - if (r.length == 1) r = '0' + r; - if (g.length == 1) g = '0' + g; - if (b.length == 1) b = '0' + b; - return '#' + r + g + b; - } - - // help - this.getHelpXML = function () { - - var examples = new Array(); - // add regexps - for (var i = 0; i < color_defs.length; i++) { - var example = color_defs[i].example; - for (var j = 0; j < example.length; j++) { - examples[examples.length] = example[j]; - } - } - // add type-in colors - for (var sc in simple_colors) { - examples[examples.length] = sc; - } - - var xml = document.createElement('ul'); - xml.setAttribute('id', 'rgbcolor-examples'); - for (var i = 0; i < examples.length; i++) { - try { - var list_item = document.createElement('li'); - var list_color = new RGBColor(examples[i]); - var example_div = document.createElement('div'); - example_div.style.cssText = - 'margin: 3px; ' - + 'border: 1px solid black; ' - + 'background:' + list_color.toHex() + '; ' - + 'color:' + list_color.toHex() - ; - example_div.appendChild(document.createTextNode('test')); - var list_item_value = document.createTextNode( - ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex() - ); - list_item.appendChild(example_div); - list_item.appendChild(list_item_value); - xml.appendChild(list_item); - - } catch(e){} - } - return xml; - - } - -} - -/** - * @license canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - * - */ -if(!window.console) { - window.console = {}; - window.console.log = function(str) {}; - window.console.dir = function(str) {}; -} - -if(!Array.prototype.indexOf){ - Array.prototype.indexOf = function(obj){ - for(var i=0; i<this.length; i++){ - if(this[i]==obj){ - return i; - } - } - return -1; - } -} - -(function(){ - // canvg(target, s) - // empty parameters: replace all 'svg' elements on page with 'canvas' elements - // target: canvas element or the id of a canvas element - // s: svg string, url to svg file, or xml document - // opts: optional hash of options - // ignoreMouse: true => ignore mouse events - // ignoreAnimation: true => ignore animations - // ignoreDimensions: true => does not try to resize canvas - // ignoreClear: true => does not clear canvas - // offsetX: int => draws at a x offset - // offsetY: int => draws at a y offset - // scaleWidth: int => scales horizontally to width - // scaleHeight: int => scales vertically to height - // renderCallback: function => will call the function after the first render is completed - // forceRedraw: function => will call the function on every frame, if it returns true, will redraw - this.canvg = function (target, s, opts) { - // no parameters - if (target == null && s == null && opts == null) { - var svgTags = document.getElementsByTagName('svg'); - for (var i=0; i<svgTags.length; i++) { - var svgTag = svgTags[i]; - var c = document.createElement('canvas'); - c.width = svgTag.clientWidth; - c.height = svgTag.clientHeight; - svgTag.parentNode.insertBefore(c, svgTag); - svgTag.parentNode.removeChild(svgTag); - var div = document.createElement('div'); - div.appendChild(svgTag); - canvg(c, div.innerHTML); - } - return; - } - opts = opts || {}; - - if (typeof target == 'string') { - target = document.getElementById(target); - } - - // reuse class per canvas - var svg; - if (target.svg == null) { - svg = build(); - target.svg = svg; - } - else { - svg = target.svg; - svg.stop(); - } - svg.opts = opts; - - var ctx = target.getContext('2d'); - if (typeof(s.documentElement) != 'undefined') { - // load from xml doc - svg.loadXmlDoc(ctx, s); - } - else if (s.substr(0,1) == '<') { - // load from xml string - svg.loadXml(ctx, s); - } - else { - // load from url - svg.load(ctx, s); - } - } - - function build() { - var svg = { }; - - svg.FRAMERATE = 30; - svg.MAX_VIRTUAL_PIXELS = 30000; - - // globals - svg.init = function(ctx) { - svg.Definitions = {}; - svg.Styles = {}; - svg.Animations = []; - svg.Images = []; - svg.ctx = ctx; - svg.ViewPort = new (function () { - this.viewPorts = []; - this.Clear = function() { this.viewPorts = []; } - this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); } - this.RemoveCurrent = function() { this.viewPorts.pop(); } - this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; } - this.width = function() { return this.Current().width; } - this.height = function() { return this.Current().height; } - this.ComputeSize = function(d) { - if (d != null && typeof(d) == 'number') return d; - if (d == 'x') return this.width(); - if (d == 'y') return this.height(); - return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); - } - }); - } - svg.init(); - - // images loaded - svg.ImagesLoaded = function() { - for (var i=0; i<svg.Images.length; i++) { - if (!svg.Images[i].loaded) return false; - } - return true; - } - - // trim - svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); } - - // compress spaces - svg.compressSpaces = function(s) { return s ? s.replace(/[\s\r\t\n]+/gm,' ') : ''; } - - // ajax - svg.ajax = function(url) { - var AJAX; - if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();} - else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');} - if(AJAX){ - AJAX.open('GET',url,false); - AJAX.send(null); - return AJAX.responseText; - } - return null; - } - - // parse xml - svg.parseXml = function(xml) { - if (window.DOMParser) - { - var parser = new DOMParser(); - return parser.parseFromString(xml, 'text/xml'); - } - else - { - xml = xml.replace(/<!DOCTYPE svg[^>]*>/, ''); - var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); - xmlDoc.async = 'false'; - xmlDoc.loadXML(xml); - return xmlDoc; - } - } - - svg.Property = function(name, value) { - this.name = name; - this.value = value; - - this.hasValue = function() { - return (this.value != null && this.value !== ''); - } - - // return the numerical value of the property - this.numValue = function() { - if (!this.hasValue()) return 0; - - var n = parseFloat(this.value); - if ((this.value + '').match(/%$/)) { - n = n / 100.0; - } - return n; - } - - this.valueOrDefault = function(def) { - if (this.hasValue()) return this.value; - return def; - } - - this.numValueOrDefault = function(def) { - if (this.hasValue()) return this.numValue(); - return def; - } - - /* EXTENSIONS */ - var that = this; - - // color extensions - this.Color = { - // augment the current color value with the opacity - addOpacity: function(opacity) { - var newValue = that.value; - if (opacity != null && opacity != '') { - var color = new RGBColor(that.value); - if (color.ok) { - newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')'; - } - } - return new svg.Property(that.name, newValue); - } - } - - // definition extensions - this.Definition = { - // get the definition from the definitions table - getDefinition: function() { - var name = that.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); - return svg.Definitions[name]; - }, - - isUrl: function() { - return that.value.indexOf('url(') == 0 - }, - - getFillStyle: function(e) { - var def = this.getDefinition(); - - // gradient - if (def != null && def.createGradient) { - return def.createGradient(svg.ctx, e); - } - - // pattern - if (def != null && def.createPattern) { - return def.createPattern(svg.ctx, e); - } - - return null; - } - } - - // length extensions - this.Length = { - DPI: function(viewPort) { - return 96.0; // TODO: compute? - }, - - EM: function(viewPort) { - var em = 12; - - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - if (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort); - - return em; - }, - - // get the length as pixels - toPixels: function(viewPort) { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/em$/)) return that.numValue() * this.EM(viewPort); - if (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0; - if (s.match(/px$/)) return that.numValue(); - if (s.match(/pt$/)) return that.numValue() * 1.25; - if (s.match(/pc$/)) return that.numValue() * 15; - if (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54; - if (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4; - if (s.match(/in$/)) return that.numValue() * this.DPI(viewPort); - if (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort); - return that.numValue(); - } - } - - // time extensions - this.Time = { - // get the time as milliseconds - toMilliseconds: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/s$/)) return that.numValue() * 1000; - if (s.match(/ms$/)) return that.numValue(); - return that.numValue(); - } - } - - // angle extensions - this.Angle = { - // get the angle as radians - toRadians: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0); - if (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0); - if (s.match(/rad$/)) return that.numValue(); - return that.numValue() * (Math.PI / 180.0); - } - } - } - - // fonts - svg.Font = new (function() { - this.Styles = ['normal','italic','oblique','inherit']; - this.Variants = ['normal','small-caps','inherit']; - this.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit']; - - this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { - var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font); - return { - fontFamily: fontFamily || f.fontFamily, - fontSize: fontSize || f.fontSize, - fontStyle: fontStyle || f.fontStyle, - fontWeight: fontWeight || f.fontWeight, - fontVariant: fontVariant || f.fontVariant, - toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } - } - } - - var that = this; - this.Parse = function(s) { - var f = {}; - var d = svg.trim(svg.compressSpaces(s || '')).split(' '); - var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false } - var ff = ''; - for (var i=0; i<d.length; i++) { - if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; } - else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; } - else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; } - else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; } - else { if (d[i] != 'inherit') ff += d[i]; } - } if (ff != '') f.fontFamily = ff; - return f; - } - }); - - // points and paths - svg.ToNumberArray = function(s) { - var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' '); - for (var i=0; i<a.length; i++) { - a[i] = parseFloat(a[i]); - } - return a; - } - svg.Point = function(x, y) { - this.x = x; - this.y = y; - - this.angleTo = function(p) { - return Math.atan2(p.y - this.y, p.x - this.x); - } - - this.applyTransform = function(v) { - var xp = this.x * v[0] + this.y * v[2] + v[4]; - var yp = this.x * v[1] + this.y * v[3] + v[5]; - this.x = xp; - this.y = yp; - } - } - svg.CreatePoint = function(s) { - var a = svg.ToNumberArray(s); - return new svg.Point(a[0], a[1]); - } - svg.CreatePath = function(s) { - var a = svg.ToNumberArray(s); - var path = []; - for (var i=0; i<a.length; i+=2) { - path.push(new svg.Point(a[i], a[i+1])); - } - return path; - } - - // bounding box - svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - - this.x = function() { return this.x1; } - this.y = function() { return this.y1; } - this.width = function() { return this.x2 - this.x1; } - this.height = function() { return this.y2 - this.y1; } - - this.addPoint = function(x, y) { - if (x != null) { - if (isNaN(this.x1) || isNaN(this.x2)) { - this.x1 = x; - this.x2 = x; - } - if (x < this.x1) this.x1 = x; - if (x > this.x2) this.x2 = x; - } - - if (y != null) { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - } - this.addX = function(x) { this.addPoint(x, null); } - this.addY = function(y) { this.addPoint(null, y); } - - this.addBoundingBox = function(bb) { - this.addPoint(bb.x1, bb.y1); - this.addPoint(bb.x2, bb.y2); - } - - this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { - var cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0) - var cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0) - this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); - } - - this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - var p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y]; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - - for (i=0; i<=1; i++) { - var f = function(t) { - return Math.pow(1-t, 3) * p0[i] - + 3 * Math.pow(1-t, 2) * t * p1[i] - + 3 * (1-t) * Math.pow(t, 2) * p2[i] - + Math.pow(t, 3) * p3[i]; - } - - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - - if (a == 0) { - if (b == 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i == 0) this.addX(f(t)); - if (i == 1) this.addY(f(t)); - } - continue; - } - - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i == 0) this.addX(f(t1)); - if (i == 1) this.addY(f(t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i == 0) this.addX(f(t2)); - if (i == 1) this.addY(f(t2)); - } - } - } - - this.isPointInBox = function(x, y) { - return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2); - } - - this.addPoint(x1, y1); - this.addPoint(x2, y2); - } - - // transforms - svg.Transform = function(v) { - var that = this; - this.Type = {} - - // translate - this.Type.translate = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.translate(this.p.x || 0.0, this.p.y || 0.0); - } - this.applyToPoint = function(p) { - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - } - } - - // rotate - this.Type.rotate = function(s) { - var a = svg.ToNumberArray(s); - this.angle = new svg.Property('angle', a[0]); - this.cx = a[1] || 0; - this.cy = a[2] || 0; - this.apply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(this.angle.Angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - } - this.applyToPoint = function(p) { - var a = this.angle.Angle.toRadians(); - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); - p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]); - } - } - - this.Type.scale = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0); - } - this.applyToPoint = function(p) { - p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]); - } - } - - this.Type.matrix = function(s) { - this.m = svg.ToNumberArray(s); - this.apply = function(ctx) { - ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); - } - this.applyToPoint = function(p) { - p.applyTransform(this.m); - } - } - - this.Type.SkewBase = function(s) { - this.base = that.Type.matrix; - this.base(s); - this.angle = new svg.Property('angle', s); - } - this.Type.SkewBase.prototype = new this.Type.matrix; - - this.Type.skewX = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0]; - } - this.Type.skewX.prototype = new this.Type.SkewBase; - - this.Type.skewY = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0]; - } - this.Type.skewY.prototype = new this.Type.SkewBase; - - this.transforms = []; - - this.apply = function(ctx) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].apply(ctx); - } - } - - this.applyToPoint = function(p) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].applyToPoint(p); - } - } - - var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/); - for (var i=0; i<data.length; i++) { - var type = data[i].split('(')[0]; - var s = data[i].split('(')[1].replace(')',''); - var transform = new this.Type[type](s); - this.transforms.push(transform); - } - } - - // aspect ratio - svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { - // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute - aspectRatio = svg.compressSpaces(aspectRatio); - aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer - var align = aspectRatio.split(' ')[0] || 'xMidYMid'; - var meetOrSlice = aspectRatio.split(' ')[1] || 'meet'; - - // calculate scale - var scaleX = width / desiredWidth; - var scaleY = height / desiredHeight; - var scaleMin = Math.min(scaleX, scaleY); - var scaleMax = Math.max(scaleX, scaleY); - if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; } - if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; } - - refX = new svg.Property('refX', refX); - refY = new svg.Property('refY', refY); - if (refX.hasValue() && refY.hasValue()) { - ctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y')); - } - else { - // align - if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); - if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); - if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); - if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); - } - - // scale - if (align == 'none') ctx.scale(scaleX, scaleY); - else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); - else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); - - // translate - ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); - } - - // elements - svg.Element = {} - - svg.Element.ElementBase = function(node) { - this.attributes = {}; - this.styles = {}; - this.children = []; - - // get or create attribute - this.attribute = function(name, createIfNotExists) { - var a = this.attributes[name]; - if (a != null) return a; - - a = new svg.Property(name, ''); - if (createIfNotExists == true) this.attributes[name] = a; - return a; - } - - // get or create style, crawls up node tree - this.style = function(name, createIfNotExists) { - var s = this.styles[name]; - if (s != null) return s; - - var a = this.attribute(name); - if (a != null && a.hasValue()) { - return a; - } - - var p = this.parent; - if (p != null) { - var ps = p.style(name); - if (ps != null && ps.hasValue()) { - return ps; - } - } - - s = new svg.Property(name, ''); - if (createIfNotExists == true) this.styles[name] = s; - return s; - } - - // base render - this.render = function(ctx) { - // don't render display=none - if (this.style('display').value == 'none') return; - - // don't render visibility=hidden - if (this.attribute('visibility').value == 'hidden') return; - - ctx.save(); - this.setContext(ctx); - // mask - if (this.attribute('mask').hasValue()) { - var mask = this.attribute('mask').Definition.getDefinition(); - if (mask != null) mask.apply(ctx, this); - } - else if (this.style('filter').hasValue()) { - var filter = this.style('filter').Definition.getDefinition(); - if (filter != null) filter.apply(ctx, this); - } - else this.renderChildren(ctx); - this.clearContext(ctx); - ctx.restore(); - } - - // base set context - this.setContext = function(ctx) { - // OVERRIDE ME! - } - - // base clear context - this.clearContext = function(ctx) { - // OVERRIDE ME! - } - - // base render children - this.renderChildren = function(ctx) { - for (var i=0; i<this.children.length; i++) { - this.children[i].render(ctx); - } - } - - this.addChild = function(childNode, create) { - var child = childNode; - if (create) child = svg.CreateElement(childNode); - child.parent = this; - this.children.push(child); - } - - if (node != null && node.nodeType == 1) { //ELEMENT_NODE - // add children - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE - } - - // add attributes - for (var i=0; i<node.attributes.length; i++) { - var attribute = node.attributes[i]; - this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue); - } - - // add tag styles - var styles = svg.Styles[node.nodeName]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - - // add class styles - if (this.attribute('class').hasValue()) { - var classes = svg.compressSpaces(this.attribute('class').value).split(' '); - for (var j=0; j<classes.length; j++) { - styles = svg.Styles['.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - styles = svg.Styles[node.nodeName+'.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - } - } - - // add inline styles - if (this.attribute('style').hasValue()) { - var styles = this.attribute('style').value.split(';'); - for (var i=0; i<styles.length; i++) { - if (svg.trim(styles[i]) != '') { - var style = styles[i].split(':'); - var name = svg.trim(style[0]); - var value = svg.trim(style[1]); - this.styles[name] = new svg.Property(name, value); - } - } - } - - // add id - if (this.attribute('id').hasValue()) { - if (svg.Definitions[this.attribute('id').value] == null) { - svg.Definitions[this.attribute('id').value] = this; - } - } - } - } - - svg.Element.RenderedElementBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.setContext = function(ctx) { - // fill - if (this.style('fill').Definition.isUrl()) { - var fs = this.style('fill').Definition.getFillStyle(this); - if (fs != null) ctx.fillStyle = fs; - } - else if (this.style('fill').hasValue()) { - var fillStyle = this.style('fill'); - if (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value); - ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value); - } - - // stroke - if (this.style('stroke').Definition.isUrl()) { - var fs = this.style('stroke').Definition.getFillStyle(this); - if (fs != null) ctx.strokeStyle = fs; - } - else if (this.style('stroke').hasValue()) { - var strokeStyle = this.style('stroke'); - if (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value); - ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value); - } - if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels(); - if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value; - if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value; - if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value; - - // font - if (typeof(ctx.font) != 'undefined') { - ctx.font = svg.Font.CreateFont( - this.style('font-style').value, - this.style('font-variant').value, - this.style('font-weight').value, - this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', - this.style('font-family').value).toString(); - } - - // transform - if (this.attribute('transform').hasValue()) { - var transform = new svg.Transform(this.attribute('transform').value); - transform.apply(ctx); - } - - // clip - if (this.attribute('clip-path').hasValue()) { - var clip = this.attribute('clip-path').Definition.getDefinition(); - if (clip != null) clip.apply(ctx); - } - - // opacity - if (this.style('opacity').hasValue()) { - ctx.globalAlpha = this.style('opacity').numValue(); - } - } - } - svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase; - - svg.Element.PathElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.path = function(ctx) { - if (ctx != null) ctx.beginPath(); - return new svg.BoundingBox(); - } - - this.renderChildren = function(ctx) { - this.path(ctx); - svg.Mouse.checkPath(this, ctx); - if (ctx.fillStyle != '') ctx.fill(); - if (ctx.strokeStyle != '') ctx.stroke(); - - var markers = this.getMarkers(); - if (markers != null) { - if (this.style('marker-start').Definition.isUrl()) { - var marker = this.style('marker-start').Definition.getDefinition(); - marker.render(ctx, markers[0][0], markers[0][1]); - } - if (this.style('marker-mid').Definition.isUrl()) { - var marker = this.style('marker-mid').Definition.getDefinition(); - for (var i=1;i<markers.length-1;i++) { - marker.render(ctx, markers[i][0], markers[i][1]); - } - } - if (this.style('marker-end').Definition.isUrl()) { - var marker = this.style('marker-end').Definition.getDefinition(); - marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]); - } - } - } - - this.getBoundingBox = function() { - return this.path(); - } - - this.getMarkers = function() { - return null; - } - } - svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase; - - // svg element - svg.Element.svg = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseClearContext = this.clearContext; - this.clearContext = function(ctx) { - this.baseClearContext(ctx); - svg.ViewPort.RemoveCurrent(); - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - // initial values - ctx.strokeStyle = 'rgba(0,0,0,0)'; - ctx.lineCap = 'butt'; - ctx.lineJoin = 'miter'; - ctx.miterLimit = 4; - - this.baseSetContext(ctx); - - // create new view port - if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) { - ctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y')); - } - - var width = svg.ViewPort.width(); - var height = svg.ViewPort.height(); - if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) { - width = this.attribute('width').Length.toPixels('x'); - height = this.attribute('height').Length.toPixels('y'); - - var x = 0; - var y = 0; - if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) { - x = -this.attribute('refX').Length.toPixels('x'); - y = -this.attribute('refY').Length.toPixels('y'); - } - - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(width, y); - ctx.lineTo(width, height); - ctx.lineTo(x, height); - ctx.closePath(); - ctx.clip(); - } - svg.ViewPort.SetCurrent(width, height); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - svg.ViewPort.width(), - width, - svg.ViewPort.height(), - height, - minX, - minY, - this.attribute('refX').value, - this.attribute('refY').value); - - svg.ViewPort.RemoveCurrent(); - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.svg.prototype = new svg.Element.RenderedElementBase; - - // rect element - svg.Element.rect = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx; - if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry; - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(x + rx, y); - ctx.lineTo(x + width - rx, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + ry) - ctx.lineTo(x + width, y + height - ry); - ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height) - ctx.lineTo(x + rx, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - ry) - ctx.lineTo(x, y + ry); - ctx.quadraticCurveTo(x, y, x + rx, y) - ctx.closePath(); - } - - return new svg.BoundingBox(x, y, x + width, y + height); - } - } - svg.Element.rect.prototype = new svg.Element.PathElementBase; - - // circle element - svg.Element.circle = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - var r = this.attribute('r').Length.toPixels(); - - if (ctx != null) { - ctx.beginPath(); - ctx.arc(cx, cy, r, 0, Math.PI * 2, true); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); - } - } - svg.Element.circle.prototype = new svg.Element.PathElementBase; - - // ellipse element - svg.Element.ellipse = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(cx, cy - ry); - ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy); - ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry); - ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy); - ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); - } - } - svg.Element.ellipse.prototype = new svg.Element.PathElementBase; - - // line element - svg.Element.line = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.getPoints = function() { - return [ - new svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')), - new svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))]; - } - - this.path = function(ctx) { - var points = this.getPoints(); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - ctx.lineTo(points[1].x, points[1].y); - } - - return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); - } - - this.getMarkers = function() { - var points = this.getPoints(); - var a = points[0].angleTo(points[1]); - return [[points[0], a], [points[1], a]]; - } - } - svg.Element.line.prototype = new svg.Element.PathElementBase; - - // polyline element - svg.Element.polyline = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.points = svg.CreatePath(this.attribute('points').value); - this.path = function(ctx) { - var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); - } - for (var i=1; i<this.points.length; i++) { - bb.addPoint(this.points[i].x, this.points[i].y); - if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); - } - return bb; - } - - this.getMarkers = function() { - var markers = []; - for (var i=0; i<this.points.length - 1; i++) { - markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]); - } - markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]); - return markers; - } - } - svg.Element.polyline.prototype = new svg.Element.PathElementBase; - - // polygon element - svg.Element.polygon = function(node) { - this.base = svg.Element.polyline; - this.base(node); - - this.basePath = this.path; - this.path = function(ctx) { - var bb = this.basePath(ctx); - if (ctx != null) { - ctx.lineTo(this.points[0].x, this.points[0].y); - ctx.closePath(); - } - return bb; - } - } - svg.Element.polygon.prototype = new svg.Element.polyline; - - // path element - svg.Element.path = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - var d = this.attribute('d').value; - // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF - d = d.replace(/,/gm,' '); // get rid of all commas - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax - d = svg.compressSpaces(d); // compress multiple spaces - d = svg.trim(d); - this.PathParser = new (function(d) { - this.tokens = d.split(' '); - - this.reset = function() { - this.i = -1; - this.command = ''; - this.previousCommand = ''; - this.start = new svg.Point(0, 0); - this.control = new svg.Point(0, 0); - this.current = new svg.Point(0, 0); - this.points = []; - this.angles = []; - } - - this.isEnd = function() { - return this.i >= this.tokens.length - 1; - } - - this.isCommandOrEnd = function() { - if (this.isEnd()) return true; - return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; - } - - this.isRelativeCommand = function() { - return this.command == this.command.toLowerCase(); - } - - this.getToken = function() { - this.i = this.i + 1; - return this.tokens[this.i]; - } - - this.getScalar = function() { - return parseFloat(this.getToken()); - } - - this.nextCommand = function() { - this.previousCommand = this.command; - this.command = this.getToken(); - } - - this.getPoint = function() { - var p = new svg.Point(this.getScalar(), this.getScalar()); - return this.makeAbsolute(p); - } - - this.getAsControlPoint = function() { - var p = this.getPoint(); - this.control = p; - return p; - } - - this.getAsCurrentPoint = function() { - var p = this.getPoint(); - this.current = p; - return p; - } - - this.getReflectedControlPoint = function() { - if (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') { - return this.current; - } - - // reflect point - var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); - return p; - } - - this.makeAbsolute = function(p) { - if (this.isRelativeCommand()) { - p.x = this.current.x + p.x; - p.y = this.current.y + p.y; - } - return p; - } - - this.addMarker = function(p, from, priorTo) { - // if the last angle isn't filled in because we didn't have this point yet ... - if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) { - this.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo); - } - this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); - } - - this.addMarkerAngle = function(p, a) { - this.points.push(p); - this.angles.push(a); - } - - this.getMarkerPoints = function() { return this.points; } - this.getMarkerAngles = function() { - for (var i=0; i<this.angles.length; i++) { - if (this.angles[i] == null) { - for (var j=i+1; j<this.angles.length; j++) { - if (this.angles[j] != null) { - this.angles[i] = this.angles[j]; - break; - } - } - } - } - return this.angles; - } - })(d); - - this.path = function(ctx) { - var pp = this.PathParser; - pp.reset(); - - var bb = new svg.BoundingBox(); - if (ctx != null) ctx.beginPath(); - while (!pp.isEnd()) { - pp.nextCommand(); - switch (pp.command.toUpperCase()) { - case 'M': - var p = pp.getAsCurrentPoint(); - pp.addMarker(p); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.moveTo(p.x, p.y); - pp.start = pp.current; - while (!pp.isCommandOrEnd()) { - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, pp.start); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'L': - while (!pp.isCommandOrEnd()) { - var c = pp.current; - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, c); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'H': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'V': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'C': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'S': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getReflectedControlPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'Q': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'T': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getReflectedControlPoint(); - pp.control = cntrl; - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'A': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var rx = pp.getScalar(); - var ry = pp.getScalar(); - var xAxisRotation = pp.getScalar() * (Math.PI / 180.0); - var largeArcFlag = pp.getScalar(); - var sweepFlag = pp.getScalar(); - var cp = pp.getAsCurrentPoint(); - - // Conversion from endpoint to center parameterization - // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - // x1', y1' - var currp = new svg.Point( - Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0, - -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0 - ); - // adjust radii - var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2); - if (l > 1) { - rx *= Math.sqrt(l); - ry *= Math.sqrt(l); - } - // cx', cy' - var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( - ((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) / - (Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2)) - ); - if (isNaN(s)) s = 0; - var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); - // cx, cy - var centp = new svg.Point( - (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, - (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y - ); - // vector magnitude - var m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); } - // ratio between two vectors - var r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) } - // angle between two vectors - var a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); } - // initial angle - var a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]); - // angle delta - var u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]; - var v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry]; - var ad = a(u, v); - if (r(u,v) <= -1) ad = Math.PI; - if (r(u,v) >= 1) ad = 0; - - if (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI; - if (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI; - - // for markers - var halfWay = new svg.Point( - centp.x - rx * Math.cos((a1 + ad) / 2), - centp.y - ry * Math.sin((a1 + ad) / 2) - ); - pp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - pp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - - bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better - if (ctx != null) { - var r = rx > ry ? rx : ry; - var sx = rx > ry ? 1 : rx / ry; - var sy = rx > ry ? ry / rx : 1; - - ctx.translate(centp.x, centp.y); - ctx.rotate(xAxisRotation); - ctx.scale(sx, sy); - ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); - ctx.scale(1/sx, 1/sy); - ctx.rotate(-xAxisRotation); - ctx.translate(-centp.x, -centp.y); - } - } - break; - case 'Z': - if (ctx != null) ctx.closePath(); - pp.current = pp.start; - } - } - - return bb; - } - - this.getMarkers = function() { - var points = this.PathParser.getMarkerPoints(); - var angles = this.PathParser.getMarkerAngles(); - - var markers = []; - for (var i=0; i<points.length; i++) { - markers.push([points[i], angles[i]]); - } - return markers; - } - } - svg.Element.path.prototype = new svg.Element.PathElementBase; - - // pattern element - svg.Element.pattern = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.createPattern = function(ctx, element) { - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value); - tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value); - tempSvg.children = this.children; - - var c = document.createElement('canvas'); - c.width = this.attribute('width').Length.toPixels('x'); - c.height = this.attribute('height').Length.toPixels('y'); - tempSvg.render(c.getContext('2d')); - return ctx.createPattern(c, 'repeat'); - } - } - svg.Element.pattern.prototype = new svg.Element.ElementBase; - - // marker element - svg.Element.marker = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.baseRender = this.render; - this.render = function(ctx, point, angle) { - ctx.translate(point.x, point.y); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth); - ctx.save(); - - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value); - tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value); - tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black')); - tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none')); - tempSvg.children = this.children; - tempSvg.render(ctx); - - ctx.restore(); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle); - ctx.translate(-point.x, -point.y); - } - } - svg.Element.marker.prototype = new svg.Element.ElementBase; - - // definitions element - svg.Element.defs = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.render = function(ctx) { - // NOOP - } - } - svg.Element.defs.prototype = new svg.Element.ElementBase; - - // base for gradients - svg.Element.GradientBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); - - this.stops = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - this.stops.push(child); - } - - this.getGradient = function() { - // OVERRIDE ME! - } - - this.createGradient = function(ctx, element) { - var stopsContainer = this; - if (this.attribute('xlink:href').hasValue()) { - stopsContainer = this.attribute('xlink:href').Definition.getDefinition(); - } - - var g = this.getGradient(ctx, element); - for (var i=0; i<stopsContainer.stops.length; i++) { - g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color); - } - - if (this.attribute('gradientTransform').hasValue()) { - // render as transformed pattern on temporary canvas - var rootView = svg.ViewPort.viewPorts[0]; - - var rect = new svg.Element.rect(); - rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS); - rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS); - - var group = new svg.Element.g(); - group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value); - group.children = [ rect ]; - - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['x'] = new svg.Property('x', 0); - tempSvg.attributes['y'] = new svg.Property('y', 0); - tempSvg.attributes['width'] = new svg.Property('width', rootView.width); - tempSvg.attributes['height'] = new svg.Property('height', rootView.height); - tempSvg.children = [ group ]; - - var c = document.createElement('canvas'); - c.width = rootView.width; - c.height = rootView.height; - var tempCtx = c.getContext('2d'); - tempCtx.fillStyle = g; - tempSvg.render(tempCtx); - return tempCtx.createPattern(c, 'no-repeat'); - } - - return g; - } - } - svg.Element.GradientBase.prototype = new svg.Element.ElementBase; - - // linear gradient element - svg.Element.linearGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var x1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x1').numValue() - : this.attribute('x1').Length.toPixels('x')); - var y1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y1').numValue() - : this.attribute('y1').Length.toPixels('y')); - var x2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x2').numValue() - : this.attribute('x2').Length.toPixels('x')); - var y2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y2').numValue() - : this.attribute('y2').Length.toPixels('y')); - - return ctx.createLinearGradient(x1, y1, x2, y2); - } - } - svg.Element.linearGradient.prototype = new svg.Element.GradientBase; - - // radial gradient element - svg.Element.radialGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var cx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('cx').numValue() - : this.attribute('cx').Length.toPixels('x')); - var cy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('cy').numValue() - : this.attribute('cy').Length.toPixels('y')); - - var fx = cx; - var fy = cy; - if (this.attribute('fx').hasValue()) { - fx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('fx').numValue() - : this.attribute('fx').Length.toPixels('x')); - } - if (this.attribute('fy').hasValue()) { - fy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('fy').numValue() - : this.attribute('fy').Length.toPixels('y')); - } - - var r = (this.gradientUnits == 'objectBoundingBox' - ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue() - : this.attribute('r').Length.toPixels()); - - return ctx.createRadialGradient(fx, fy, 0, cx, cy, r); - } - } - svg.Element.radialGradient.prototype = new svg.Element.GradientBase; - - // gradient stop element - svg.Element.stop = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.offset = this.attribute('offset').numValue(); - - var stopColor = this.style('stop-color'); - if (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value); - this.color = stopColor.value; - } - svg.Element.stop.prototype = new svg.Element.ElementBase; - - // animation base element - svg.Element.AnimateBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - svg.Animations.push(this); - - this.duration = 0.0; - this.begin = this.attribute('begin').Time.toMilliseconds(); - this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds(); - - this.getProperty = function() { - var attributeType = this.attribute('attributeType').value; - var attributeName = this.attribute('attributeName').value; - - if (attributeType == 'CSS') { - return this.parent.style(attributeName, true); - } - return this.parent.attribute(attributeName, true); - }; - - this.initialValue = null; - this.removed = false; - - this.calcValue = function() { - // OVERRIDE ME! - return ''; - } - - this.update = function(delta) { - // set initial value - if (this.initialValue == null) { - this.initialValue = this.getProperty().value; - } - - // if we're past the end time - if (this.duration > this.maxDuration) { - // loop for indefinitely repeating animations - if (this.attribute('repeatCount').value == 'indefinite') { - this.duration = 0.0 - } - else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) { - this.removed = true; - this.getProperty().value = this.initialValue; - return true; - } - else { - return false; // no updates made - } - } - this.duration = this.duration + delta; - - // if we're past the begin time - var updated = false; - if (this.begin < this.duration) { - var newValue = this.calcValue(); // tween - - if (this.attribute('type').hasValue()) { - // for transform, etc. - var type = this.attribute('type').value; - newValue = type + '(' + newValue + ')'; - } - - this.getProperty().value = newValue; - updated = true; - } - - return updated; - } - - // fraction of duration we've covered - this.progress = function() { - return ((this.duration - this.begin) / (this.maxDuration - this.begin)); - } - } - svg.Element.AnimateBase.prototype = new svg.Element.ElementBase; - - // animate element - svg.Element.animate = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = this.attribute('from').numValue(); - var to = this.attribute('to').numValue(); - - // tween value linearly - return from + (to - from) * this.progress(); - }; - } - svg.Element.animate.prototype = new svg.Element.AnimateBase; - - // animate color element - svg.Element.animateColor = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = new RGBColor(this.attribute('from').value); - var to = new RGBColor(this.attribute('to').value); - - if (from.ok && to.ok) { - // tween color linearly - var r = from.r + (to.r - from.r) * this.progress(); - var g = from.g + (to.g - from.g) * this.progress(); - var b = from.b + (to.b - from.b) * this.progress(); - return 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')'; - } - return this.attribute('from').value; - }; - } - svg.Element.animateColor.prototype = new svg.Element.AnimateBase; - - // animate transform element - svg.Element.animateTransform = function(node) { - this.base = svg.Element.animate; - this.base(node); - } - svg.Element.animateTransform.prototype = new svg.Element.animate; - - // font element - svg.Element.font = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - - this.isRTL = false; - this.isArabic = false; - this.fontFace = null; - this.missingGlyph = null; - this.glyphs = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - if (child.type == 'font-face') { - this.fontFace = child; - if (child.style('font-family').hasValue()) { - svg.Definitions[child.style('font-family').value] = this; - } - } - else if (child.type == 'missing-glyph') this.missingGlyph = child; - else if (child.type == 'glyph') { - if (child.arabicForm != '') { - this.isRTL = true; - this.isArabic = true; - if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = []; - this.glyphs[child.unicode][child.arabicForm] = child; - } - else { - this.glyphs[child.unicode] = child; - } - } - } - } - svg.Element.font.prototype = new svg.Element.ElementBase; - - // font-face element - svg.Element.fontface = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.ascent = this.attribute('ascent').value; - this.descent = this.attribute('descent').value; - this.unitsPerEm = this.attribute('units-per-em').numValue(); - } - svg.Element.fontface.prototype = new svg.Element.ElementBase; - - // missing-glyph element - svg.Element.missingglyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = 0; - } - svg.Element.missingglyph.prototype = new svg.Element.path; - - // glyph element - svg.Element.glyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - this.unicode = this.attribute('unicode').value; - this.arabicForm = this.attribute('arabic-form').value; - } - svg.Element.glyph.prototype = new svg.Element.path; - - // text element - svg.Element.text = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - if (node != null) { - // add children - this.children = []; - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) { // capture tspan and tref nodes - this.addChild(childNode, true); - } - else if (childNode.nodeType == 3) { // capture text - this.addChild(new svg.Element.tspan(childNode), false); - } - } - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value; - if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value; - } - - this.renderChildren = function(ctx) { - var textAnchor = this.style('text-anchor').valueOrDefault('start'); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - - if (child.attribute('x').hasValue()) { - child.x = child.attribute('x').Length.toPixels('x'); - } - else { - if (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x'); - child.x = x; - } - - var childLength = child.measureText ? child.measureText(ctx) : 0; - if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group? - // loop through rest of children - var groupLength = childLength; - for (var j=i+1; j<this.children.length; j++) { - var childInGroup = this.children[j]; - if (childInGroup.attribute('x').hasValue()) break; // new group - groupLength += childInGroup.measureText ? childInGroup.measureText(ctx) : 0; - } - child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0); - } - x = child.x + childLength; - - if (child.attribute('y').hasValue()) { - child.y = child.attribute('y').Length.toPixels('y'); - } - else { - if (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y'); - child.y = y; - } - y = child.y; - - child.render(ctx); - } - } - } - svg.Element.text.prototype = new svg.Element.RenderedElementBase; - - // text base - svg.Element.TextElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getGlyph = function(font, text, i) { - var c = text[i]; - var glyph = null; - if (font.isArabic) { - var arabicForm = 'isolated'; - if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; - if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial'; - if (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial'; - if (typeof(font.glyphs[c]) != 'undefined') { - glyph = font.glyphs[c][arabicForm]; - if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c]; - } - } - else { - glyph = font.glyphs[c]; - } - if (glyph == null) glyph = font.missingGlyph; - return glyph; - } - - this.renderChildren = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - var scale = fontSize / customFont.fontFace.unitsPerEm; - ctx.translate(this.x, this.y); - ctx.scale(scale, -scale); - var lw = ctx.lineWidth; - ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; - if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0); - glyph.render(ctx); - if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0); - ctx.lineWidth = lw; - ctx.scale(1/scale, -1/scale); - ctx.translate(-this.x, -this.y); - - this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - this.x += dx[i]; - } - } - return; - } - - if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); - if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); - } - - this.getText = function() { - // OVERRIDE ME - } - - this.measureText = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var measure = 0; - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - measure += dx[i]; - } - } - return measure; - } - - var textToMeasure = svg.compressSpaces(this.getText()); - if (!ctx.measureText) return textToMeasure.length * 10; - - ctx.save(); - this.setContext(ctx); - var width = ctx.measureText(textToMeasure).width; - ctx.restore(); - return width; - } - } - svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase; - - // tspan - svg.Element.tspan = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.text = node.nodeType == 3 ? node.nodeValue : // text - node.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element - node.text; - this.getText = function() { - return this.text; - } - } - svg.Element.tspan.prototype = new svg.Element.TextElementBase; - - // tref - svg.Element.tref = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.getText = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (element != null) return element.children[0].getText(); - } - } - svg.Element.tref.prototype = new svg.Element.TextElementBase; - - // a element - svg.Element.a = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.hasText = true; - for (var i=0; i<node.childNodes.length; i++) { - if (node.childNodes[i].nodeType != 3) this.hasText = false; - } - - // this might contain text - this.text = this.hasText ? node.childNodes[0].nodeValue : ''; - this.getText = function() { - return this.text; - } - - this.baseRenderChildren = this.renderChildren; - this.renderChildren = function(ctx) { - if (this.hasText) { - // render as text element - this.baseRenderChildren(ctx); - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y)); - } - else { - // render as temporary group - var g = new svg.Element.g(); - g.children = this.children; - g.parent = this; - g.render(ctx); - } - } - - this.onclick = function() { - window.open(this.attribute('xlink:href').value); - } - - this.onmousemove = function() { - svg.ctx.canvas.style.cursor = 'pointer'; - } - } - svg.Element.a.prototype = new svg.Element.TextElementBase; - - // image element - svg.Element.image = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - svg.Images.push(this); - this.img = document.createElement('img'); - this.loaded = false; - var that = this; - this.img.onload = function() { that.loaded = true; } - this.img.src = this.attribute('xlink:href').value; - - this.renderChildren = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) return; - - ctx.save(); - ctx.translate(x, y); - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - width, - this.img.width, - height, - this.img.height, - 0, - 0); - ctx.drawImage(this.img, 0, 0); - ctx.restore(); - } - } - svg.Element.image.prototype = new svg.Element.RenderedElementBase; - - // group element - svg.Element.g = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getBoundingBox = function() { - var bb = new svg.BoundingBox(); - for (var i=0; i<this.children.length; i++) { - bb.addBoundingBox(this.children[i].getBoundingBox()); - } - return bb; - }; - } - svg.Element.g.prototype = new svg.Element.RenderedElementBase; - - // symbol element - svg.Element.symbol = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - this.attribute('width').Length.toPixels('x'), - width, - this.attribute('height').Length.toPixels('y'), - height, - minX, - minY); - - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.symbol.prototype = new svg.Element.RenderedElementBase; - - // style element - svg.Element.style = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - // text, or spaces then CDATA - var css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : ''); - css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments - css = svg.compressSpaces(css); // replace whitespace - var cssDefs = css.split('}'); - for (var i=0; i<cssDefs.length; i++) { - if (svg.trim(cssDefs[i]) != '') { - var cssDef = cssDefs[i].split('{'); - var cssClasses = cssDef[0].split(','); - var cssProps = cssDef[1].split(';'); - for (var j=0; j<cssClasses.length; j++) { - var cssClass = svg.trim(cssClasses[j]); - if (cssClass != '') { - var props = {}; - for (var k=0; k<cssProps.length; k++) { - var prop = cssProps[k].indexOf(':'); - var name = cssProps[k].substr(0, prop); - var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); - if (name != null && value != null) { - props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); - } - } - svg.Styles[cssClass] = props; - if (cssClass == '@font-face') { - var fontFamily = props['font-family'].value.replace(/"/g,''); - var srcs = props['src'].value.split(','); - for (var s=0; s<srcs.length; s++) { - if (srcs[s].indexOf('format("svg")') > 0) { - var urlStart = srcs[s].indexOf('url'); - var urlEnd = srcs[s].indexOf(')', urlStart); - var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); - var doc = svg.parseXml(svg.ajax(url)); - var fonts = doc.getElementsByTagName('font'); - for (var f=0; f<fonts.length; f++) { - var font = svg.CreateElement(fonts[f]); - svg.Definitions[fontFamily] = font; - } - } - } - } - } - } - } - } - } - svg.Element.style.prototype = new svg.Element.ElementBase; - - // use element - svg.Element.use = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0); - if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y')); - } - - this.getDefinition = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value; - if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value; - return element; - } - - this.path = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.path(ctx); - } - - this.renderChildren = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.render(ctx); - } - } - svg.Element.use.prototype = new svg.Element.RenderedElementBase; - - // mask element - svg.Element.mask = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - - // temporarily remove mask to avoid recursion - var mask = element.attribute('mask').value; - element.attribute('mask').value = ''; - - var cMask = document.createElement('canvas'); - cMask.width = x + width; - cMask.height = y + height; - var maskCtx = cMask.getContext('2d'); - this.renderChildren(maskCtx); - - var c = document.createElement('canvas'); - c.width = x + width; - c.height = y + height; - var tempCtx = c.getContext('2d'); - element.render(tempCtx); - tempCtx.globalCompositeOperation = 'destination-in'; - tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat'); - tempCtx.fillRect(0, 0, x + width, y + height); - - ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat'); - ctx.fillRect(0, 0, x + width, y + height); - - // reassign mask - element.attribute('mask').value = mask; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.mask.prototype = new svg.Element.ElementBase; - - // clip element - svg.Element.clipPath = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx) { - for (var i=0; i<this.children.length; i++) { - if (this.children[i].path) { - this.children[i].path(ctx); - ctx.clip(); - } - } - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.clipPath.prototype = new svg.Element.ElementBase; - - // filters - svg.Element.filter = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var bb = element.getBoundingBox(); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - if (x == 0 || y == 0) { - x = bb.x1; - y = bb.y1; - } - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) { - width = bb.width(); - height = bb.height(); - } - - // temporarily remove filter to avoid recursion - var filter = element.style('filter').value; - element.style('filter').value = ''; - - // max filter distance - var extraPercent = .20; - var px = extraPercent * width; - var py = extraPercent * height; - - var c = document.createElement('canvas'); - c.width = width + 2*px; - c.height = height + 2*py; - var tempCtx = c.getContext('2d'); - tempCtx.translate(-x + px, -y + py); - element.render(tempCtx); - - // apply filters - for (var i=0; i<this.children.length; i++) { - this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py); - } - - // render on me - ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py); - - // reassign filter - element.style('filter', true).value = filter; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.filter.prototype = new svg.Element.ElementBase; - - svg.Element.feGaussianBlur = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - function make_fgauss(sigma) { - sigma = Math.max(sigma, 0.01); - var len = Math.ceil(sigma * 4.0) + 1; - mask = []; - for (var i = 0; i < len; i++) { - mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma)); - } - return mask; - } - - function normalize(mask) { - var sum = 0; - for (var i = 1; i < mask.length; i++) { - sum += Math.abs(mask[i]); - } - sum = 2 * sum + Math.abs(mask[0]); - for (var i = 0; i < mask.length; i++) { - mask[i] /= sum; - } - return mask; - } - - function convolve_even(src, dst, mask, width, height) { - for (var y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - var a = imGet(src, x, y, width, height, 3)/255; - for (var rgba = 0; rgba < 4; rgba++) { - var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a); - for (var i = 1; i < mask.length; i++) { - var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255; - var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255; - sum += mask[i] * - ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + - (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2)); - } - imSet(dst, y, x, height, width, rgba, sum); - } - } - } - } - - function imGet(img, x, y, width, height, rgba) { - return img[y*width*4 + x*4 + rgba]; - } - - function imSet(img, x, y, width, height, rgba, val) { - img[y*width*4 + x*4 + rgba] = val; - } - - function blur(ctx, width, height, sigma) - { - var srcData = ctx.getImageData(0, 0, width, height); - var mask = make_fgauss(sigma); - mask = normalize(mask); - tmp = []; - convolve_even(srcData.data, tmp, mask, width, height); - convolve_even(tmp, srcData.data, mask, height, width); - ctx.clearRect(0, 0, width, height); - ctx.putImageData(srcData, 0, 0); - } - - this.apply = function(ctx, x, y, width, height) { - // assuming x==0 && y==0 for now - blur(ctx, width, height, this.attribute('stdDeviation').numValue()); - } - } - svg.Element.filter.prototype = new svg.Element.feGaussianBlur; - - // title element, do nothing - svg.Element.title = function(node) { - } - svg.Element.title.prototype = new svg.Element.ElementBase; - - // desc element, do nothing - svg.Element.desc = function(node) { - } - svg.Element.desc.prototype = new svg.Element.ElementBase; - - svg.Element.MISSING = function(node) { - console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.'); - } - svg.Element.MISSING.prototype = new svg.Element.ElementBase; - - // element factory - svg.CreateElement = function(node) { - var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace - className = className.replace(/\-/g,''); // remove dashes - var e = null; - if (typeof(svg.Element[className]) != 'undefined') { - e = new svg.Element[className](node); - } - else { - e = new svg.Element.MISSING(node); - } - - e.type = node.nodeName; - return e; - } - - // load from url - svg.load = function(ctx, url) { - svg.loadXml(ctx, svg.ajax(url)); - } - - // load from xml - svg.loadXml = function(ctx, xml) { - svg.loadXmlDoc(ctx, svg.parseXml(xml)); - } - - svg.loadXmlDoc = function(ctx, dom) { - svg.init(ctx); - - var mapXY = function(p) { - var e = ctx.canvas; - while (e) { - p.x -= e.offsetLeft; - p.y -= e.offsetTop; - e = e.offsetParent; - } - if (window.scrollX) p.x += window.scrollX; - if (window.scrollY) p.y += window.scrollY; - return p; - } - - // bind mouse - if (svg.opts['ignoreMouse'] != true) { - ctx.canvas.onclick = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onclick(p.x, p.y); - }; - ctx.canvas.onmousemove = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onmousemove(p.x, p.y); - }; - } - - var e = svg.CreateElement(dom.documentElement); - e.root = true; - - // render loop - var isFirstRender = true; - var draw = function() { - svg.ViewPort.Clear(); - if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); - - if (svg.opts['ignoreDimensions'] != true) { - // set canvas size - if (e.style('width').hasValue()) { - ctx.canvas.width = e.style('width').Length.toPixels('x'); - ctx.canvas.style.width = ctx.canvas.width + 'px'; - } - if (e.style('height').hasValue()) { - ctx.canvas.height = e.style('height').Length.toPixels('y'); - ctx.canvas.style.height = ctx.canvas.height + 'px'; - } - } - var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; - var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; - svg.ViewPort.SetCurrent(cWidth, cHeight); - - if (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX']; - if (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY']; - if (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) { - var xRatio = 1, yRatio = 1; - if (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth']; - if (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight']; - - e.attribute('width', true).value = svg.opts['scaleWidth']; - e.attribute('height', true).value = svg.opts['scaleHeight']; - e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio); - e.attribute('preserveAspectRatio', true).value = 'none'; - } - - // clear and render - if (svg.opts['ignoreClear'] != true) { - ctx.clearRect(0, 0, cWidth, cHeight); - } - e.render(ctx); - if (isFirstRender) { - isFirstRender = false; - if (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback'](); - } - } - - var waitingForImages = true; - if (svg.ImagesLoaded()) { - waitingForImages = false; - draw(); - } - svg.intervalID = setInterval(function() { - var needUpdate = false; - - if (waitingForImages && svg.ImagesLoaded()) { - waitingForImages = false; - needUpdate = true; - } - - // need update from mouse events? - if (svg.opts['ignoreMouse'] != true) { - needUpdate = needUpdate | svg.Mouse.hasEvents(); - } - - // need update from animations? - if (svg.opts['ignoreAnimation'] != true) { - for (var i=0; i<svg.Animations.length; i++) { - needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE); - } - } - - // need update from redraw? - if (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') { - if (svg.opts['forceRedraw']() == true) needUpdate = true; - } - - // render if needed - if (needUpdate) { - draw(); - svg.Mouse.runEvents(); // run and clear our events - } - }, 1000 / svg.FRAMERATE); - } - - svg.stop = function() { - if (svg.intervalID) { - clearInterval(svg.intervalID); - } - } - - svg.Mouse = new (function() { - this.events = []; - this.hasEvents = function() { return this.events.length != 0; } - - this.onclick = function(x, y) { - this.events.push({ type: 'onclick', x: x, y: y, - run: function(e) { if (e.onclick) e.onclick(); } - }); - } - - this.onmousemove = function(x, y) { - this.events.push({ type: 'onmousemove', x: x, y: y, - run: function(e) { if (e.onmousemove) e.onmousemove(); } - }); - } - - this.eventElements = []; - - this.checkPath = function(element, ctx) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.checkBoundingBox = function(element, bb) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.runEvents = function() { - svg.ctx.canvas.style.cursor = ''; - - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - var element = this.eventElements[i]; - while (element) { - e.run(element); - element = element.parent; - } - } - - // done running, clear - this.events = []; - this.eventElements = []; - } - }); - - return svg; - } -})(); - -if (CanvasRenderingContext2D) { - CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) { - canvg(this.canvas, s, { - ignoreMouse: true, - ignoreAnimation: true, - ignoreDimensions: true, - ignoreClear: true, - offsetX: dx, - offsetY: dy, - scaleWidth: dw, - scaleHeight: dh - }); - } -}/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * CanVGRenderer Extension module - * - * (c) 2011-2012 Torstein Honsi, Erik Olsson - * - * License: www.highcharts.com/license - */ - -(function (Highcharts) { - var UNDEFINED, - win = Highcharts.win, - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - VISIBLE = 'visible', - PX = 'px', - css = Highcharts.css, - CanVGRenderer = Highcharts.CanVGRenderer, - SVGRenderer = Highcharts.SVGRenderer, - extend = Highcharts.extend, - merge = Highcharts.merge, - addEvent = Highcharts.addEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement; - - // Extend CanVG renderer on demand, inherit from SVGRenderer - extend(CanVGRenderer.prototype, SVGRenderer.prototype); - - // Add additional functionality: - extend(CanVGRenderer.prototype, { - create: function (chart, container, chartWidth, chartHeight) { - this.setContainer(container, chartWidth, chartHeight); - this.configure(chart); - }, - setContainer: function (container, chartWidth, chartHeight) { - var containerStyle = container.style, - containerParent = container.parentNode, - containerLeft = containerStyle.left, - containerTop = containerStyle.top, - containerOffsetWidth = container.offsetWidth, - containerOffsetHeight = container.offsetHeight, - canvas, - initialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE }; - - this.init(container, chartWidth, chartHeight); - - // add the canvas above it - canvas = createElement('canvas', { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - position: RELATIVE, - left: containerLeft, - top: containerTop - }, container); - this.canvas = canvas; - - // Create the tooltip line and div, they are placed as siblings to - // the container (and as direct childs to the div specified in the html page) - this.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttTimer = UNDEFINED; - - // Move away the svg node to a new div inside the container's parent so we can hide it. - var hiddenSvg = createElement(DIV, { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - visibility: HIDDEN, - left: containerLeft, - top: containerTop - }, containerParent); - this.hiddenSvg = hiddenSvg; - hiddenSvg.appendChild(this.box); - }, - - /** - * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh. - **/ - configure: function (chart) { - var renderer = this, - options = chart.options.tooltip, - borderWidth = options.borderWidth, - tooltipDiv = renderer.ttDiv, - tooltipDivStyle = options.style, - tooltipLine = renderer.ttLine, - padding = parseInt(tooltipDivStyle.padding, 10); - - // Add border styling from options to the style - tooltipDivStyle = merge(tooltipDivStyle, { - padding: padding + PX, - 'background-color': options.backgroundColor, - 'border-style': 'solid', - 'border-width': borderWidth + PX, - 'border-radius': options.borderRadius + PX - }); - - // Optionally add shadow - if (options.shadow) { - tooltipDivStyle = merge(tooltipDivStyle, { - 'box-shadow': '1px 1px 3px gray', // w3c - '-webkit-box-shadow': '1px 1px 3px gray' // webkit - }); - } - css(tooltipDiv, tooltipDivStyle); - - // Set simple style on the line - css(tooltipLine, { - 'border-left': '1px solid darkgray' - }); - - // This event is triggered when a new tooltip should be shown - addEvent(chart, 'tooltipRefresh', function (args) { - var chartContainer = chart.container, - offsetLeft = chartContainer.offsetLeft, - offsetTop = chartContainer.offsetTop, - position; - - // Set the content of the tooltip - tooltipDiv.innerHTML = args.text; - - // Compute the best position for the tooltip based on the divs size and container size. - position = chart.tooltip.getPosition( - tooltipDiv.offsetWidth, - tooltipDiv.offsetHeight, - { plotX: args.x, plotY: args.y } - ); - - css(tooltipDiv, { - visibility: VISIBLE, - left: position.x + PX, - top: position.y + PX, - 'border-color': args.borderColor - }); - - // Position the tooltip line - css(tooltipLine, { - visibility: VISIBLE, - left: offsetLeft + args.x + PX, - top: offsetTop + chart.plotTop + PX, - height: chart.plotHeight + PX - }); - - // This timeout hides the tooltip after 3 seconds - // First clear any existing timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Start a new timer that hides tooltip and line - renderer.ttTimer = setTimeout(function () { - css(tooltipDiv, { visibility: HIDDEN }); - css(tooltipLine, { visibility: HIDDEN }); - }, 3000); - }); - }, - - /** - * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer. - */ - destroy: function () { - var renderer = this; - - // Remove the canvas - discardElement(renderer.canvas); - - // Kill the timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Remove the divs for tooltip and line - discardElement(renderer.ttLine); - discardElement(renderer.ttDiv); - discardElement(renderer.hiddenSvg); - - // Continue with base class - return SVGRenderer.prototype.destroy.apply(renderer); - }, - - /** - * Take a color and return it if it's a string, do not make it a gradient even if it is a - * gradient. Currently canvg cannot render gradients (turns out black), - * see: http://code.google.com/p/canvg/issues/detail?id=104 - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop) { - if (color && color.linearGradient) { - // Pick the end color and forward to base implementation - color = color.stops[color.stops.length - 1][1]; - } - return SVGRenderer.prototype.color.call(this, color, elem, prop); - }, - - /** - * Draws the SVG on the canvas or adds a draw invokation to the deferred list. - */ - draw: function () { - var renderer = this; - win.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML); - } - }); -}(Highcharts)); diff --git a/platforms/browser/www/lib/highcharts/modules/data.js b/platforms/browser/www/lib/highcharts/modules/data.js deleted file mode 100644 index eafd6748..00000000 --- a/platforms/browser/www/lib/highcharts/modules/data.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Data module - - (c) 2012-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(g){typeof module==="object"&&module.exports?module.exports=g:g(Highcharts)})(function(g){var t=g.win.document,j=g.each,u=g.pick,r=g.inArray,v=g.splat,k,p=function(b,a){this.init(b,a)};g.extend(p.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.firstRowAsNames=u(b.firstRowAsNames,!0);this.decimalRegex=b.decimalPoint&&RegExp("^(-?[0-9]+)"+b.decimalPoint+"([0-9]+)$");this.rawColumns=[];this.columns.length?this.dataFound(): -(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=this.options,e=[],f=function(b){return(g.seriesTypes[b||"line"].prototype.pointArrayMap||[0]).length},d=b&&b.chart&&b.chart.type,c=[],h=[],q=0,i;j(b&&b.series||[],function(b){c.push(f(b.type||d))});j(a&&a.seriesMapping||[],function(b){e.push(b.x||0)});e.length===0&&e.push(0);j(a&&a.seriesMapping||[],function(a){var e=new k,o,n=c[q]||f(d),m=g.seriesTypes[((b&&b.series||[])[q]|| -{}).type||d||"line"].prototype.pointArrayMap||["y"];e.addColumnReader(a.x,"x");for(o in a)a.hasOwnProperty(o)&&o!=="x"&&e.addColumnReader(a[o],o);for(i=0;i<n;i++)e.hasReader(m[i])||e.addColumnReader(void 0,m[i]);h.push(e);q++});a=g.seriesTypes[d||"line"].prototype.pointArrayMap;a===void 0&&(a=["y"]);this.valueCount={global:f(d),xColumns:e,individual:c,seriesBuilders:h,globalPointArrayMap:a}},dataFound:function(){if(this.options.switchRowsAndColumns)this.columns=this.rowsToColumns(this.columns);this.getColumnDistribution(); -this.parseTypes();this.parsed()!==!1&&this.complete()},parseCSV:function(){var b=this,a=this.options,e=a.csv,f=this.columns,d=a.startRow||0,c=a.endRow||Number.MAX_VALUE,h=a.startColumn||0,q=a.endColumn||Number.MAX_VALUE,i,g,s=0;e&&(g=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),i=a.itemDelimiter||(e.indexOf("\t")!==-1?"\t":","),j(g,function(a,e){var g=b.trim(a),w=g.indexOf("#")===0;e>=d&&e<=c&&!w&&g!==""&&(g=a.split(i),j(g,function(b,a){a>=h&&a<=q&&(f[a-h]||(f[a-h]=[]), -f[a-h][s]=b)}),s+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,e=this.columns,f=b.startRow||0,d=b.endRow||Number.MAX_VALUE,c=b.startColumn||0,h=b.endColumn||Number.MAX_VALUE;a&&(typeof a==="string"&&(a=t.getElementById(a)),j(a.getElementsByTagName("tr"),function(b,a){a>=f&&a<=d&&j(b.children,function(b,d){if((b.tagName==="TD"||b.tagName==="TH")&&d>=c&&d<=h)e[d-c]||(e[d-c]=[]),e[d-c][a-f]=b.innerHTML})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this, -a=this.options,e=a.googleSpreadsheetKey,f=this.columns,d=a.startRow||0,c=a.endRow||Number.MAX_VALUE,h=a.startColumn||0,g=a.endColumn||Number.MAX_VALUE,i,j;e&&jQuery.ajax({dataType:"json",url:"https://spreadsheets.google.com/feeds/cells/"+e+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",error:a.error,success:function(a){var a=a.feed.entry,e,n=a.length,m=0,k=0,l;for(l=0;l<n;l++)e=a[l],m=Math.max(m,e.gs$cell.col),k=Math.max(k,e.gs$cell.row);for(l=0;l<m;l++)if(l>= -h&&l<=g)f[l-h]=[],f[l-h].length=Math.min(k,c-d);for(l=0;l<n;l++)if(e=a[l],i=e.gs$cell.row-1,j=e.gs$cell.col-1,j>=h&&j<=g&&i>=d&&i<=c)f[j-h][i-d]=e.content.$t;b.dataFound()}})},trim:function(b,a){typeof b==="string"&&(b=b.replace(/^\s+|\s+$/g,""),a&&/^[0-9\s]+$/.test(b)&&(b=b.replace(/\s/g,"")),this.decimalRegex&&(b=b.replace(this.decimalRegex,"$1.$2")));return b},parseTypes:function(){for(var b=this.columns,a=b.length;a--;)this.parseColumn(b[a],a)},parseColumn:function(b,a){var e=this.rawColumns, -f=this.columns,d=b.length,c,h,g,i,j=this.firstRowAsNames,k=r(a,this.valueCount.xColumns)!==-1,o=[],n=this.chartOptions,m,p=(this.options.columnTypes||[])[a],n=k&&(n&&n.xAxis&&v(n.xAxis)[0].type==="category"||p==="string");for(e[a]||(e[a]=[]);d--;)if(c=o[d]||b[d],g=this.trim(c),i=this.trim(c,!0),h=parseFloat(i),e[a][d]===void 0&&(e[a][d]=g),n||d===0&&j)b[d]=g;else if(+i===h)b[d]=h,h>31536E6&&p!=="float"?b.isDatetime=!0:b.isNumeric=!0,b[d+1]!==void 0&&(m=h>b[d+1]);else if(h=this.parseDate(c),k&&typeof h=== -"number"&&!isNaN(h)&&p!=="float"){if(o[d]=c,b[d]=h,b.isDatetime=!0,b[d+1]!==void 0){c=h>b[d+1];if(c!==m&&m!==void 0)this.alternativeFormat?(this.dateFormat=this.alternativeFormat,d=b.length,this.alternativeFormat=this.dateFormats[this.dateFormat].alternative):b.unsorted=!0;m=c}}else if(b[d]=g===""?null:g,d!==0&&(b.isDatetime||b.isNumeric))b.mixed=!0;k&&b.mixed&&(f[a]=e[a]);if(k&&m&&this.options.sort)for(a=0;a<f.length;a++)f[a].reverse(),j&&f[a].unshift(f[a].pop())},dateFormats:{"YYYY-mm-dd":{regex:/^([0-9]{4})[\-\/\.]([0-9]{2})[\-\/\.]([0-9]{2})$/, -parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}},"dd/mm/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(b){return Date.UTC(+b[3],b[2]-1,+b[1])},alternative:"mm/dd/YYYY"},"mm/dd/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(b){return Date.UTC(+b[3],b[1]-1,+b[2])}},"dd/mm/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(b){return Date.UTC(+b[3]+2E3,b[2]-1,+b[1])},alternative:"mm/dd/YY"}, -"mm/dd/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(b){return Date.UTC(+b[3]+2E3,b[1]-1,+b[2])}}},parseDate:function(b){var a=this.options.parseDate,e,f,d=this.options.dateFormat||this.dateFormat,c;if(a)e=a(b);else if(typeof b==="string"){if(d)a=this.dateFormats[d],(c=b.match(a.regex))&&(e=a.parser(c));else for(f in this.dateFormats)if(a=this.dateFormats[f],c=b.match(a.regex)){this.dateFormat=f;this.alternativeFormat=a.alternative;e=a.parser(c);break}c||(c=Date.parse(b), -typeof c==="object"&&c!==null&&c.getTime?e=c.getTime()-c.getTimezoneOffset()*6E4:typeof c==="number"&&!isNaN(c)&&(e=c-(new Date(c)).getTimezoneOffset()*6E4))}return e},rowsToColumns:function(b){var a,e,f,d,c;if(b){c=[];e=b.length;for(a=0;a<e;a++){d=b[a].length;for(f=0;f<d;f++)c[f]||(c[f]=[]),c[f][a]=b[a][f]}}return c},parsed:function(){if(this.options.parsed)return this.options.parsed.call(this,this.columns)},getFreeIndexes:function(b,a){var e,f,d=[],c=[],h;for(f=0;f<b;f+=1)d.push(!0);for(e=0;e<a.length;e+= -1){h=a[e].getReferencedColumnIndexes();for(f=0;f<h.length;f+=1)d[h[f]]=!1}for(f=0;f<d.length;f+=1)d[f]&&c.push(f);return c},complete:function(){var b=this.columns,a,e=this.options,f,d,c,h,g=[],i;if(e.complete||e.afterComplete){for(c=0;c<b.length;c++)if(this.firstRowAsNames)b[c].name=b[c].shift();f=[];d=this.getFreeIndexes(b.length,this.valueCount.seriesBuilders);for(c=0;c<this.valueCount.seriesBuilders.length;c++)i=this.valueCount.seriesBuilders[c],i.populateColumns(d)&&g.push(i);for(;d.length>0;){i= -new k;i.addColumnReader(0,"x");c=r(0,d);c!==-1&&d.splice(c,1);for(c=0;c<this.valueCount.global;c++)i.addColumnReader(void 0,this.valueCount.globalPointArrayMap[c]);i.populateColumns(d)&&g.push(i)}g.length>0&&g[0].readers.length>0&&(i=b[g[0].readers[0].columnIndex],i!==void 0&&(i.isDatetime?a="datetime":i.isNumeric||(a="category")));if(a==="category")for(c=0;c<g.length;c++){i=g[c];for(d=0;d<i.readers.length;d++)if(i.readers[d].configName==="x")i.readers[d].configName="name"}for(c=0;c<g.length;c++){i= -g[c];d=[];for(h=0;h<b[0].length;h++)d[h]=i.read(b,h);f[c]={data:d};if(i.name)f[c].name=i.name;if(a==="category")f[c].turboThreshold=0}b={series:f};if(a)b.xAxis={type:a};e.complete&&e.complete(b);e.afterComplete&&e.afterComplete(b)}}});g.Data=p;g.data=function(b,a){return new p(b,a)};g.wrap(g.Chart.prototype,"init",function(b,a,e){var f=this;a&&a.data?g.data(g.extend(a.data,{afterComplete:function(d){var c,h;if(a.hasOwnProperty("series"))if(typeof a.series==="object")for(c=Math.max(a.series.length, -d.series.length);c--;)h=a.series[c]||{},a.series[c]=g.merge(h,d.series[c]);else delete a.series;a=g.merge(d,a);b.call(f,a,e)}}),a):b.call(f,a,e)});k=function(){this.readers=[];this.pointIsArray=!0};k.prototype.populateColumns=function(b){var a=!0;j(this.readers,function(a){if(a.columnIndex===void 0)a.columnIndex=b.shift()});j(this.readers,function(b){b.columnIndex===void 0&&(a=!1)});return a};k.prototype.read=function(b,a){var e=this.pointIsArray,f=e?[]:{},d;j(this.readers,function(c){var d=b[c.columnIndex][a]; -e?f.push(d):f[c.configName]=d});if(this.name===void 0&&this.readers.length>=2&&(d=this.getReferencedColumnIndexes(),d.length>=2))d.shift(),d.sort(),this.name=b[d.shift()].name;return f};k.prototype.addColumnReader=function(b,a){this.readers.push({columnIndex:b,configName:a});if(!(a==="x"||a==="y"||a===void 0))this.pointIsArray=!1};k.prototype.getReferencedColumnIndexes=function(){var b,a=[],e;for(b=0;b<this.readers.length;b+=1)e=this.readers[b],e.columnIndex!==void 0&&a.push(e.columnIndex);return a}; -k.prototype.hasReader=function(b){var a,e;for(a=0;a<this.readers.length;a+=1)if(e=this.readers[a],e.configName===b)return!0}}); diff --git a/platforms/browser/www/lib/highcharts/modules/data.src.js b/platforms/browser/www/lib/highcharts/modules/data.src.js deleted file mode 100644 index 3601a22a..00000000 --- a/platforms/browser/www/lib/highcharts/modules/data.src.js +++ /dev/null @@ -1,959 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Data module - * - * (c) 2012-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/*global jQuery */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - // Utilities - var win = Highcharts.win, - doc = win.document, - each = Highcharts.each, - pick = Highcharts.pick, - inArray = Highcharts.inArray, - splat = Highcharts.splat, - SeriesBuilder; - - - // The Data constructor - var Data = function (dataOptions, chartOptions) { - this.init(dataOptions, chartOptions); - }; - - // Set the prototype properties - Highcharts.extend(Data.prototype, { - - /** - * Initialize the Data object with the given options - */ - init: function (options, chartOptions) { - this.options = options; - this.chartOptions = chartOptions; - this.columns = options.columns || this.rowsToColumns(options.rows) || []; - this.firstRowAsNames = pick(options.firstRowAsNames, true); - this.decimalRegex = options.decimalPoint && new RegExp('^(-?[0-9]+)' + options.decimalPoint + '([0-9]+)$'); - - // This is a two-dimensional array holding the raw, trimmed string values - // with the same organisation as the columns array. It makes it possible - // for example to revert from interpreted timestamps to string-based - // categories. - this.rawColumns = []; - - // No need to parse or interpret anything - if (this.columns.length) { - this.dataFound(); - - // Parse and interpret - } else { - - // Parse a CSV string if options.csv is given - this.parseCSV(); - - // Parse a HTML table if options.table is given - this.parseTable(); - - // Parse a Google Spreadsheet - this.parseGoogleSpreadsheet(); - } - - }, - - /** - * Get the column distribution. For example, a line series takes a single column for - * Y values. A range series takes two columns for low and high values respectively, - * and an OHLC series takes four columns. - */ - getColumnDistribution: function () { - var chartOptions = this.chartOptions, - options = this.options, - xColumns = [], - getValueCount = function (type) { - return (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length; - }, - getPointArrayMap = function (type) { - return Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap; - }, - globalType = chartOptions && chartOptions.chart && chartOptions.chart.type, - individualCounts = [], - seriesBuilders = [], - seriesIndex = 0, - i; - - each((chartOptions && chartOptions.series) || [], function (series) { - individualCounts.push(getValueCount(series.type || globalType)); - }); - - // Collect the x-column indexes from seriesMapping - each((options && options.seriesMapping) || [], function (mapping) { - xColumns.push(mapping.x || 0); - }); - - // If there are no defined series with x-columns, use the first column as x column - if (xColumns.length === 0) { - xColumns.push(0); - } - - // Loop all seriesMappings and constructs SeriesBuilders from - // the mapping options. - each((options && options.seriesMapping) || [], function (mapping) { - var builder = new SeriesBuilder(), - name, - numberOfValueColumnsNeeded = individualCounts[seriesIndex] || getValueCount(globalType), - seriesArr = (chartOptions && chartOptions.series) || [], - series = seriesArr[seriesIndex] || {}, - pointArrayMap = getPointArrayMap(series.type || globalType) || ['y']; - - // Add an x reader from the x property or from an undefined column - // if the property is not set. It will then be auto populated later. - builder.addColumnReader(mapping.x, 'x'); - - // Add all column mappings - for (name in mapping) { - if (mapping.hasOwnProperty(name) && name !== 'x') { - builder.addColumnReader(mapping[name], name); - } - } - - // Add missing columns - for (i = 0; i < numberOfValueColumnsNeeded; i++) { - if (!builder.hasReader(pointArrayMap[i])) { - //builder.addNextColumnReader(pointArrayMap[i]); - // Create and add a column reader for the next free column index - builder.addColumnReader(undefined, pointArrayMap[i]); - } - } - - seriesBuilders.push(builder); - seriesIndex++; - }); - - var globalPointArrayMap = getPointArrayMap(globalType); - if (globalPointArrayMap === undefined) { - globalPointArrayMap = ['y']; - } - - this.valueCount = { - global: getValueCount(globalType), - xColumns: xColumns, - individual: individualCounts, - seriesBuilders: seriesBuilders, - globalPointArrayMap: globalPointArrayMap - }; - }, - - /** - * When the data is parsed into columns, either by CSV, table, GS or direct input, - * continue with other operations. - */ - dataFound: function () { - - if (this.options.switchRowsAndColumns) { - this.columns = this.rowsToColumns(this.columns); - } - - // Interpret the info about series and columns - this.getColumnDistribution(); - - // Interpret the values into right types - this.parseTypes(); - - // Handle columns if a handleColumns callback is given - if (this.parsed() !== false) { - - // Complete if a complete callback is given - this.complete(); - } - - }, - - /** - * Parse a CSV input string - */ - parseCSV: function () { - var self = this, - options = this.options, - csv = options.csv, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - itemDelimiter, - lines, - activeRowNo = 0; - - if (csv) { - - lines = csv - .replace(/\r\n/g, '\n') // Unix - .replace(/\r/g, '\n') // Mac - .split(options.lineDelimiter || '\n'); - - itemDelimiter = options.itemDelimiter || (csv.indexOf('\t') !== -1 ? '\t' : ','); - - each(lines, function (line, rowNo) { - var trimmed = self.trim(line), - isComment = trimmed.indexOf('#') === 0, - isBlank = trimmed === '', - items; - - if (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) { - items = line.split(itemDelimiter); - each(items, function (item, colNo) { - if (colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo - startColumn]) { - columns[colNo - startColumn] = []; - } - - columns[colNo - startColumn][activeRowNo] = item; - } - }); - activeRowNo += 1; - } - }); - - this.dataFound(); - } - }, - - /** - * Parse a HTML table - */ - parseTable: function () { - var options = this.options, - table = options.table, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE; - - if (table) { - - if (typeof table === 'string') { - table = doc.getElementById(table); - } - - each(table.getElementsByTagName('tr'), function (tr, rowNo) { - if (rowNo >= startRow && rowNo <= endRow) { - each(tr.children, function (item, colNo) { - if ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo - startColumn]) { - columns[colNo - startColumn] = []; - } - - columns[colNo - startColumn][rowNo - startRow] = item.innerHTML; - } - }); - } - }); - - this.dataFound(); // continue - } - }, - - /** - */ - parseGoogleSpreadsheet: function () { - var self = this, - options = this.options, - googleSpreadsheetKey = options.googleSpreadsheetKey, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - gr, // google row - gc; // google column - - if (googleSpreadsheetKey) { - jQuery.ajax({ - dataType: 'json', - url: 'https://spreadsheets.google.com/feeds/cells/' + - googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') + - '/public/values?alt=json-in-script&callback=?', - error: options.error, - success: function (json) { - // Prepare the data from the spreadsheat - var cells = json.feed.entry, - cell, - cellCount = cells.length, - colCount = 0, - rowCount = 0, - i; - - // First, find the total number of columns and rows that - // are actually filled with data - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - colCount = Math.max(colCount, cell.gs$cell.col); - rowCount = Math.max(rowCount, cell.gs$cell.row); - } - - // Set up arrays containing the column data - for (i = 0; i < colCount; i++) { - if (i >= startColumn && i <= endColumn) { - // Create new columns with the length of either end-start or rowCount - columns[i - startColumn] = []; - - // Setting the length to avoid jslint warning - columns[i - startColumn].length = Math.min(rowCount, endRow - startRow); - } - } - - // Loop over the cells and assign the value to the right - // place in the column arrays - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - gr = cell.gs$cell.row - 1; // rows start at 1 - gc = cell.gs$cell.col - 1; // columns start at 1 - - // If both row and col falls inside start and end - // set the transposed cell value in the newly created columns - if (gc >= startColumn && gc <= endColumn && - gr >= startRow && gr <= endRow) { - columns[gc - startColumn][gr - startRow] = cell.content.$t; - } - } - self.dataFound(); - } - }); - } - }, - - /** - * Trim a string from whitespace - */ - trim: function (str, inside) { - if (typeof str === 'string') { - str = str.replace(/^\s+|\s+$/g, ''); - - // Clear white space insdie the string, like thousands separators - if (inside && /^[0-9\s]+$/.test(str)) { - str = str.replace(/\s/g, ''); - } - - if (this.decimalRegex) { - str = str.replace(this.decimalRegex, '$1.$2'); - } - } - return str; - }, - - /** - * Parse numeric cells in to number types and date types in to true dates. - */ - parseTypes: function () { - var columns = this.columns, - col = columns.length; - - while (col--) { - this.parseColumn(columns[col], col); - } - - }, - - /** - * Parse a single column. Set properties like .isDatetime and .isNumeric. - */ - parseColumn: function (column, col) { - var rawColumns = this.rawColumns, - columns = this.columns, - row = column.length, - val, - floatVal, - trimVal, - trimInsideVal, - firstRowAsNames = this.firstRowAsNames, - isXColumn = inArray(col, this.valueCount.xColumns) !== -1, - dateVal, - backup = [], - diff, - chartOptions = this.chartOptions, - descending, - columnTypes = this.options.columnTypes || [], - columnType = columnTypes[col], - forceCategory = isXColumn && ((chartOptions && chartOptions.xAxis && splat(chartOptions.xAxis)[0].type === 'category') || columnType === 'string'); - - if (!rawColumns[col]) { - rawColumns[col] = []; - } - while (row--) { - val = backup[row] || column[row]; - - trimVal = this.trim(val); - trimInsideVal = this.trim(val, true); - floatVal = parseFloat(trimInsideVal); - - // Set it the first time - if (rawColumns[col][row] === undefined) { - rawColumns[col][row] = trimVal; - } - - // Disable number or date parsing by setting the X axis type to category - if (forceCategory || (row === 0 && firstRowAsNames)) { - column[row] = trimVal; - - } else if (+trimInsideVal === floatVal) { // is numeric - - column[row] = floatVal; - - // If the number is greater than milliseconds in a year, assume datetime - if (floatVal > 365 * 24 * 3600 * 1000 && columnType !== 'float') { - column.isDatetime = true; - } else { - column.isNumeric = true; - } - - if (column[row + 1] !== undefined) { - descending = floatVal > column[row + 1]; - } - - // String, continue to determine if it is a date string or really a string - } else { - dateVal = this.parseDate(val); - // Only allow parsing of dates if this column is an x-column - if (isXColumn && typeof dateVal === 'number' && !isNaN(dateVal) && columnType !== 'float') { // is date - backup[row] = val; - column[row] = dateVal; - column.isDatetime = true; - - // Check if the dates are uniformly descending or ascending. If they - // are not, chances are that they are a different time format, so check - // for alternative. - if (column[row + 1] !== undefined) { - diff = dateVal > column[row + 1]; - if (diff !== descending && descending !== undefined) { - if (this.alternativeFormat) { - this.dateFormat = this.alternativeFormat; - row = column.length; - this.alternativeFormat = this.dateFormats[this.dateFormat].alternative; - } else { - column.unsorted = true; - } - } - descending = diff; - } - - } else { // string - column[row] = trimVal === '' ? null : trimVal; - if (row !== 0 && (column.isDatetime || column.isNumeric)) { - column.mixed = true; - } - } - } - } - - // If strings are intermixed with numbers or dates in a parsed column, it is an indication - // that parsing went wrong or the data was not intended to display as numbers or dates and - // parsing is too aggressive. Fall back to categories. Demonstrated in the - // highcharts/demo/column-drilldown sample. - if (isXColumn && column.mixed) { - columns[col] = rawColumns[col]; - } - - // If the 0 column is date or number and descending, reverse all columns. - if (isXColumn && descending && this.options.sort) { - for (col = 0; col < columns.length; col++) { - columns[col].reverse(); - if (firstRowAsNames) { - columns[col].unshift(columns[col].pop()); - } - } - } - }, - - /** - * A collection of available date formats, extendable from the outside to support - * custom date formats. - */ - dateFormats: { - 'YYYY-mm-dd': { - regex: /^([0-9]{4})[\-\/\.]([0-9]{2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[1], match[2] - 1, +match[3]); - } - }, - 'dd/mm/YYYY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/, - parser: function (match) { - return Date.UTC(+match[3], match[2] - 1, +match[1]); - }, - alternative: 'mm/dd/YYYY' // different format with the same regex - }, - 'mm/dd/YYYY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/, - parser: function (match) { - return Date.UTC(+match[3], match[1] - 1, +match[2]); - } - }, - 'dd/mm/YY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[3] + 2000, match[2] - 1, +match[1]); - }, - alternative: 'mm/dd/YY' // different format with the same regex - }, - 'mm/dd/YY': { - regex: /^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/, - parser: function (match) { - return Date.UTC(+match[3] + 2000, match[1] - 1, +match[2]); - } - } - }, - - /** - * Parse a date and return it as a number. Overridable through options.parseDate. - */ - parseDate: function (val) { - var parseDate = this.options.parseDate, - ret, - key, - format, - dateFormat = this.options.dateFormat || this.dateFormat, - match; - - if (parseDate) { - ret = parseDate(val); - - } else if (typeof val === 'string') { - // Auto-detect the date format the first time - if (!dateFormat) { - for (key in this.dateFormats) { - format = this.dateFormats[key]; - match = val.match(format.regex); - if (match) { - this.dateFormat = dateFormat = key; - this.alternativeFormat = format.alternative; - ret = format.parser(match); - break; - } - } - // Next time, use the one previously found - } else { - format = this.dateFormats[dateFormat]; - match = val.match(format.regex); - if (match) { - ret = format.parser(match); - } - } - // Fall back to Date.parse - if (!match) { - match = Date.parse(val); - // External tools like Date.js and MooTools extend Date object and - // returns a date. - if (typeof match === 'object' && match !== null && match.getTime) { - ret = match.getTime() - match.getTimezoneOffset() * 60000; - - // Timestamp - } else if (typeof match === 'number' && !isNaN(match)) { - ret = match - (new Date(match)).getTimezoneOffset() * 60000; - } - } - } - return ret; - }, - - /** - * Reorganize rows into columns - */ - rowsToColumns: function (rows) { - var row, - rowsLength, - col, - colsLength, - columns; - - if (rows) { - columns = []; - rowsLength = rows.length; - for (row = 0; row < rowsLength; row++) { - colsLength = rows[row].length; - for (col = 0; col < colsLength; col++) { - if (!columns[col]) { - columns[col] = []; - } - columns[col][row] = rows[row][col]; - } - } - } - return columns; - }, - - /** - * A hook for working directly on the parsed columns - */ - parsed: function () { - if (this.options.parsed) { - return this.options.parsed.call(this, this.columns); - } - }, - - getFreeIndexes: function (numberOfColumns, seriesBuilders) { - var s, - i, - freeIndexes = [], - freeIndexValues = [], - referencedIndexes; - - // Add all columns as free - for (i = 0; i < numberOfColumns; i = i + 1) { - freeIndexes.push(true); - } - - // Loop all defined builders and remove their referenced columns - for (s = 0; s < seriesBuilders.length; s = s + 1) { - referencedIndexes = seriesBuilders[s].getReferencedColumnIndexes(); - - for (i = 0; i < referencedIndexes.length; i = i + 1) { - freeIndexes[referencedIndexes[i]] = false; - } - } - - // Collect the values for the free indexes - for (i = 0; i < freeIndexes.length; i = i + 1) { - if (freeIndexes[i]) { - freeIndexValues.push(i); - } - } - - return freeIndexValues; - }, - - /** - * If a complete callback function is provided in the options, interpret the - * columns into a Highcharts options object. - */ - complete: function () { - - var columns = this.columns, - xColumns = [], - type, - options = this.options, - series, - data, - i, - j, - r, - seriesIndex, - chartOptions, - allSeriesBuilders = [], - builder, - freeIndexes, - typeCol, - index; - - xColumns.length = columns.length; - if (options.complete || options.afterComplete) { - - // Get the names and shift the top row - for (i = 0; i < columns.length; i++) { - if (this.firstRowAsNames) { - columns[i].name = columns[i].shift(); - } - } - - // Use the next columns for series - series = []; - freeIndexes = this.getFreeIndexes(columns.length, this.valueCount.seriesBuilders); - - // Populate defined series - for (seriesIndex = 0; seriesIndex < this.valueCount.seriesBuilders.length; seriesIndex++) { - builder = this.valueCount.seriesBuilders[seriesIndex]; - - // If the builder can be populated with remaining columns, then add it to allBuilders - if (builder.populateColumns(freeIndexes)) { - allSeriesBuilders.push(builder); - } - } - - // Populate dynamic series - while (freeIndexes.length > 0) { - builder = new SeriesBuilder(); - builder.addColumnReader(0, 'x'); - - // Mark index as used (not free) - index = inArray(0, freeIndexes); - if (index !== -1) { - freeIndexes.splice(index, 1); - } - - for (i = 0; i < this.valueCount.global; i++) { - // Create and add a column reader for the next free column index - builder.addColumnReader(undefined, this.valueCount.globalPointArrayMap[i]); - } - - // If the builder can be populated with remaining columns, then add it to allBuilders - if (builder.populateColumns(freeIndexes)) { - allSeriesBuilders.push(builder); - } - } - - // Get the data-type from the first series x column - if (allSeriesBuilders.length > 0 && allSeriesBuilders[0].readers.length > 0) { - typeCol = columns[allSeriesBuilders[0].readers[0].columnIndex]; - if (typeCol !== undefined) { - if (typeCol.isDatetime) { - type = 'datetime'; - } else if (!typeCol.isNumeric) { - type = 'category'; - } - } - } - // Axis type is category, then the "x" column should be called "name" - if (type === 'category') { - for (seriesIndex = 0; seriesIndex < allSeriesBuilders.length; seriesIndex++) { - builder = allSeriesBuilders[seriesIndex]; - for (r = 0; r < builder.readers.length; r++) { - if (builder.readers[r].configName === 'x') { - builder.readers[r].configName = 'name'; - } - } - } - } - - // Read data for all builders - for (seriesIndex = 0; seriesIndex < allSeriesBuilders.length; seriesIndex++) { - builder = allSeriesBuilders[seriesIndex]; - - // Iterate down the cells of each column and add data to the series - data = []; - for (j = 0; j < columns[0].length; j++) { - data[j] = builder.read(columns, j); - } - - // Add the series - series[seriesIndex] = { - data: data - }; - if (builder.name) { - series[seriesIndex].name = builder.name; - } - if (type === 'category') { - series[seriesIndex].turboThreshold = 0; - } - } - - - - // Do the callback - chartOptions = { - series: series - }; - if (type) { - chartOptions.xAxis = { - type: type - }; - } - - if (options.complete) { - options.complete(chartOptions); - } - - // The afterComplete hook is used internally to avoid conflict with the externally - // available complete option. - if (options.afterComplete) { - options.afterComplete(chartOptions); - } - } - } - }); - - // Register the Data prototype and data function on Highcharts - Highcharts.Data = Data; - Highcharts.data = function (options, chartOptions) { - return new Data(options, chartOptions); - }; - - // Extend Chart.init so that the Chart constructor accepts a new configuration - // option group, data. - Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) { - var chart = this; - - if (userOptions && userOptions.data) { - Highcharts.data(Highcharts.extend(userOptions.data, { - - afterComplete: function (dataOptions) { - var i, series; - - // Merge series configs - if (userOptions.hasOwnProperty('series')) { - if (typeof userOptions.series === 'object') { - i = Math.max(userOptions.series.length, dataOptions.series.length); - while (i--) { - series = userOptions.series[i] || {}; - userOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]); - } - } else { // Allow merging in dataOptions.series (#2856) - delete userOptions.series; - } - } - - // Do the merge - userOptions = Highcharts.merge(dataOptions, userOptions); - - proceed.call(chart, userOptions, callback); - } - }), userOptions); - } else { - proceed.call(chart, userOptions, callback); - } - }); - - /** - * Creates a new SeriesBuilder. A SeriesBuilder consists of a number - * of ColumnReaders that reads columns and give them a name. - * Ex: A series builder can be constructed to read column 3 as 'x' and - * column 7 and 8 as 'y1' and 'y2'. - * The output would then be points/rows of the form {x: 11, y1: 22, y2: 33} - * - * The name of the builder is taken from the second column. In the above - * example it would be the column with index 7. - * @constructor - */ - SeriesBuilder = function () { - this.readers = []; - this.pointIsArray = true; - }; - - /** - * Populates readers with column indexes. A reader can be added without - * a specific index and for those readers the index is taken sequentially - * from the free columns (this is handled by the ColumnCursor instance). - * @returns {boolean} - */ - SeriesBuilder.prototype.populateColumns = function (freeIndexes) { - var builder = this, - enoughColumns = true; - - // Loop each reader and give it an index if its missing. - // The freeIndexes.shift() will return undefined if there - // are no more columns. - each(builder.readers, function (reader) { - if (reader.columnIndex === undefined) { - reader.columnIndex = freeIndexes.shift(); - } - }); - - // Now, all readers should have columns mapped. If not - // then return false to signal that this series should - // not be added. - each(builder.readers, function (reader) { - if (reader.columnIndex === undefined) { - enoughColumns = false; - } - }); - - return enoughColumns; - }; - - /** - * Reads a row from the dataset and returns a point or array depending - * on the names of the readers. - * @param columns - * @param rowIndex - * @returns {Array | Object} - */ - SeriesBuilder.prototype.read = function (columns, rowIndex) { - var builder = this, - pointIsArray = builder.pointIsArray, - point = pointIsArray ? [] : {}, - columnIndexes; - - // Loop each reader and ask it to read its value. - // Then, build an array or point based on the readers names. - each(builder.readers, function (reader) { - var value = columns[reader.columnIndex][rowIndex]; - if (pointIsArray) { - point.push(value); - } else { - point[reader.configName] = value; - } - }); - - // The name comes from the first column (excluding the x column) - if (this.name === undefined && builder.readers.length >= 2) { - columnIndexes = builder.getReferencedColumnIndexes(); - if (columnIndexes.length >= 2) { - // remove the first one (x col) - columnIndexes.shift(); - - // Sort the remaining - columnIndexes.sort(); - - // Now use the lowest index as name column - this.name = columns[columnIndexes.shift()].name; - } - } - - return point; - }; - - /** - * Creates and adds ColumnReader from the given columnIndex and configName. - * ColumnIndex can be undefined and in that case the reader will be given - * an index when columns are populated. - * @param columnIndex {Number | undefined} - * @param configName - */ - SeriesBuilder.prototype.addColumnReader = function (columnIndex, configName) { - this.readers.push({ - columnIndex: columnIndex, - configName: configName - }); - - if (!(configName === 'x' || configName === 'y' || configName === undefined)) { - this.pointIsArray = false; - } - }; - - /** - * Returns an array of column indexes that the builder will use when - * reading data. - * @returns {Array} - */ - SeriesBuilder.prototype.getReferencedColumnIndexes = function () { - var i, - referencedColumnIndexes = [], - columnReader; - - for (i = 0; i < this.readers.length; i = i + 1) { - columnReader = this.readers[i]; - if (columnReader.columnIndex !== undefined) { - referencedColumnIndexes.push(columnReader.columnIndex); - } - } - - return referencedColumnIndexes; - }; - - /** - * Returns true if the builder has a reader for the given configName. - * @param configName - * @returns {boolean} - */ - SeriesBuilder.prototype.hasReader = function (configName) { - var i, columnReader; - for (i = 0; i < this.readers.length; i = i + 1) { - columnReader = this.readers[i]; - if (columnReader.configName === configName) { - return true; - } - } - // Else return undefined - }; - - - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/drilldown.js b/platforms/browser/www/lib/highcharts/modules/drilldown.js deleted file mode 100644 index bdcaae34..00000000 --- a/platforms/browser/www/lib/highcharts/modules/drilldown.js +++ /dev/null @@ -1,17 +0,0 @@ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){function A(a,b,c){var e;!b.rgba.length||!a.rgba.length?a=b.input||"none":(a=a.rgba,b=b.rgba,e=b[3]!==1||a[3]!==1,a=(e?"rgba(":"rgb(")+Math.round(b[0]+(a[0]-b[0])*(1-c))+","+Math.round(b[1]+(a[1]-b[1])*(1-c))+","+Math.round(b[2]+(a[2]-b[2])*(1-c))+(e?","+(b[3]+(a[3]-b[3])*(1-c)):"")+")");return a}var t=function(){},q=d.getOptions(),h=d.each,l=d.extend,B=d.format,u=d.pick,r=d.wrap,m=d.Chart,p=d.seriesTypes, -v=p.pie,n=p.column,w=d.Tick,x=d.fireEvent,y=d.inArray,z=1;h(["fill","stroke"],function(a){d.Fx.prototype[a+"Setter"]=function(){this.elem.attr(a,A(d.Color(this.start),d.Color(this.end),this.pos))}});l(q.lang,{drillUpText:"\u25c1 Back to {series.name}"});q.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},activeDataLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right", -x:-10,y:10}}};d.SVGRenderer.prototype.Element.prototype.fadeIn=function(a){this.attr({opacity:0.1,visibility:"inherit"}).animate({opacity:u(this.newOpacity,1)},a||{duration:250})};m.prototype.addSeriesAsDrilldown=function(a,b){this.addSingleSeriesAsDrilldown(a,b);this.applyDrilldown()};m.prototype.addSingleSeriesAsDrilldown=function(a,b){var c=a.series,e=c.xAxis,g=c.yAxis,f;f=a.color||c.color;var i,d=[],j=[],k,o;if(!this.drilldownLevels)this.drilldownLevels=[];k=c.options._levelNumber||0;(o=this.drilldownLevels[this.drilldownLevels.length- -1])&&o.levelNumber!==k&&(o=void 0);b=l({color:f,_ddSeriesId:z++},b);i=y(a,c.points);h(c.chart.series,function(a){if(a.xAxis===e&&!a.isDrilling)a.options._ddSeriesId=a.options._ddSeriesId||z++,a.options._colorIndex=a.userOptions._colorIndex,a.options._levelNumber=a.options._levelNumber||k,o?(d=o.levelSeries,j=o.levelSeriesOptions):(d.push(a),j.push(a.options))});f={levelNumber:k,seriesOptions:c.options,levelSeriesOptions:j,levelSeries:d,shapeArgs:a.shapeArgs,bBox:a.graphic?a.graphic.getBBox():{},color:f, -lowerSeriesOptions:b,pointOptions:c.options.data[i],pointIndex:i,oldExtremes:{xMin:e&&e.userMin,xMax:e&&e.userMax,yMin:g&&g.userMin,yMax:g&&g.userMax}};this.drilldownLevels.push(f);f=f.lowerSeries=this.addSeries(b,!1);f.options._levelNumber=k+1;if(e)e.oldPos=e.pos,e.userMin=e.userMax=null,g.userMin=g.userMax=null;if(c.type===f.type)f.animate=f.animateDrilldown||t,f.options.animation=!0};m.prototype.applyDrilldown=function(){var a=this.drilldownLevels,b;if(a&&a.length>0)b=a[a.length-1].levelNumber, -h(this.drilldownLevels,function(a){a.levelNumber===b&&h(a.levelSeries,function(a){a.options&&a.options._levelNumber===b&&a.remove(!1)})});this.redraw();this.showDrillUpButton()};m.prototype.getDrilldownBackText=function(){var a=this.drilldownLevels;if(a&&a.length>0)return a=a[a.length-1],a.series=a.seriesOptions,B(this.options.lang.drillUpText,a)};m.prototype.showDrillUpButton=function(){var a=this,b=this.getDrilldownBackText(),c=a.options.drilldown.drillUpButton,e,g;this.drillUpButton?this.drillUpButton.attr({text:b}).align(): -(g=(e=c.theme)&&e.states,this.drillUpButton=this.renderer.button(b,null,null,function(){a.drillUp()},e,g&&g.hover,g&&g.select).attr({align:c.position.align,zIndex:9}).add().align(c.position,!1,c.relativeTo||"plotBox"))};m.prototype.drillUp=function(){for(var a=this,b=a.drilldownLevels,c=b[b.length-1].levelNumber,e=b.length,g=a.series,f,i,d,j,k=function(b){var c;h(g,function(a){a.options._ddSeriesId===b._ddSeriesId&&(c=a)});c=c||a.addSeries(b,!1);if(c.type===d.type&&c.animateDrillupTo)c.animate=c.animateDrillupTo; -b===i.seriesOptions&&(j=c)};e--;)if(i=b[e],i.levelNumber===c){b.pop();d=i.lowerSeries;if(!d.chart)for(f=g.length;f--;)if(g[f].options.id===i.lowerSeriesOptions.id&&g[f].options._levelNumber===c+1){d=g[f];break}d.xData=[];h(i.levelSeriesOptions,k);x(a,"drillup",{seriesOptions:i.seriesOptions});if(j.type===d.type)j.drilldownLevel=i,j.options.animation=a.options.drilldown.animation,d.animateDrillupFrom&&d.chart&&d.animateDrillupFrom(i);j.options._levelNumber=c;d.remove(!1);if(j.xAxis)f=i.oldExtremes, -j.xAxis.setExtremes(f.xMin,f.xMax,!1),j.yAxis.setExtremes(f.yMin,f.yMax,!1)}this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align();this.ddDupes.length=[]};n.prototype.supportsDrilldown=!0;n.prototype.animateDrillupTo=function(a){if(!a){var b=this,c=b.drilldownLevel;h(this.points,function(a){a.graphic&&a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){b.points&& -h(b.points,function(a,b){var f=b===(c&&c.pointIndex)?"show":"fadeIn",d=f==="show"?!0:void 0;if(a.graphic)a.graphic[f](d);if(a.dataLabel)a.dataLabel[f](d);if(a.connector)a.connector[f](d)})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=t}};n.prototype.animateDrilldown=function(a){var b=this,c=this.chart.drilldownLevels,e,d=this.chart.options.drilldown.animation,f=this.xAxis;if(!a)h(c,function(a){if(b.options._ddSeriesId===a.lowerSeriesOptions._ddSeriesId)e=a.shapeArgs, -e.fill=a.color}),e.x+=u(f.oldPos,f.pos)-f.pos,h(this.points,function(a){a.graphic&&a.graphic.attr(e).animate(l(a.shapeArgs,{fill:a.color}),d);a.dataLabel&&a.dataLabel.fadeIn(d)}),this.animate=null};n.prototype.animateDrillupFrom=function(a){var b=this.chart.options.drilldown.animation,c=this.group,e=this;h(e.trackerGroups,function(a){if(e[a])e[a].on("mouseover")});delete this.group;h(this.points,function(e){var f=e.graphic,i=function(){f.destroy();c&&(c=c.destroy())};f&&(delete e.graphic,b?f.animate(l(a.shapeArgs, -{fill:a.color}),d.merge(b,{complete:i})):(f.attr(a.shapeArgs),i()))})};v&&l(v.prototype,{supportsDrilldown:!0,animateDrillupTo:n.prototype.animateDrillupTo,animateDrillupFrom:n.prototype.animateDrillupFrom,animateDrilldown:function(a){var b=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,e=b.shapeArgs,g=e.start,f=(e.end-g)/this.points.length;if(!a)h(this.points,function(a,h){a.graphic.attr(d.merge(e,{start:g+h*f,end:g+(h+1)*f,fill:b.color}))[c? -"animate":"attr"](l(a.shapeArgs,{fill:a.color}),c)}),this.animate=null}});d.Point.prototype.doDrilldown=function(a,b){var c=this.series.chart,e=c.options.drilldown,d=(e.series||[]).length,f;if(!c.ddDupes)c.ddDupes=[];for(;d--&&!f;)e.series[d].id===this.drilldown&&y(this.drilldown,c.ddDupes)===-1&&(f=e.series[d],c.ddDupes.push(this.drilldown));x(c,"drilldown",{point:this,seriesOptions:f,category:b,points:b!==void 0&&this.series.xAxis.ddPoints[b].slice(0)});f&&(a?c.addSingleSeriesAsDrilldown(this,f): -c.addSeriesAsDrilldown(this,f))};d.Axis.prototype.drilldownCategory=function(a){var b,c,d=this.ddPoints[a];for(b in d)(c=d[b])&&c.series&&c.series.visible&&c.doDrilldown&&c.doDrilldown(!0,a);this.chart.applyDrilldown()};d.Axis.prototype.getDDPoints=function(a,b){var c=this.ddPoints;if(!c)this.ddPoints=c={};c[a]||(c[a]=[]);if(c[a].levelNumber!==b)c[a].length=0;return c[a]};w.prototype.drillable=function(){var a=this.pos,b=this.label,c=this.axis,e=c.ddPoints&&c.ddPoints[a];if(b&&e&&e.length){if(!b.basicStyles)b.basicStyles= -d.merge(b.styles);b.addClass("highcharts-drilldown-axis-label").css(c.chart.options.drilldown.activeAxisLabelStyle).on("click",function(){c.drilldownCategory(a)})}else if(b&&b.basicStyles)b.styles={},b.css(b.basicStyles),b.on("click",null)};r(w.prototype,"addLabel",function(a){a.call(this);this.drillable()});r(d.Point.prototype,"init",function(a,b,c,e){var g=a.call(this,b,c,e),a=(c=b.xAxis)&&c.ticks[e],c=c&&c.getDDPoints(e,b.options._levelNumber);if(g.drilldown&&(d.addEvent(g,"click",function(){b.xAxis&& -b.chart.options.drilldown.allowPointDrilldown===!1?b.xAxis.drilldownCategory(e):g.doDrilldown()}),c))c.push(g),c.levelNumber=b.options._levelNumber;a&&a.drillable();return g});r(d.Series.prototype,"drawDataLabels",function(a){var b=this.chart.options.drilldown.activeDataLabelStyle;a.call(this);h(this.points,function(a){a.drilldown&&a.dataLabel&&a.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(b)})});var s,q=function(a){a.call(this);h(this.points,function(a){a.drilldown&&a.graphic&& -a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(s in p)p[s].prototype.supportsDrilldown&&r(p[s].prototype,"drawTracker",q)}); diff --git a/platforms/browser/www/lib/highcharts/modules/drilldown.src.js b/platforms/browser/www/lib/highcharts/modules/drilldown.src.js deleted file mode 100644 index b5bfdc76..00000000 --- a/platforms/browser/www/lib/highcharts/modules/drilldown.src.js +++ /dev/null @@ -1,717 +0,0 @@ -/** - * Highcharts Drilldown module - * - * Author: Torstein Honsi - * License: www.highcharts.com/license - * - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - 'use strict'; - - var noop = function () {}, - defaultOptions = H.getOptions(), - each = H.each, - extend = H.extend, - format = H.format, - pick = H.pick, - wrap = H.wrap, - Chart = H.Chart, - seriesTypes = H.seriesTypes, - PieSeries = seriesTypes.pie, - ColumnSeries = seriesTypes.column, - Tick = H.Tick, - fireEvent = H.fireEvent, - inArray = H.inArray, - ddSeriesId = 1; - - // Utilities - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. This method is copied from ColorAxis.js - * and should always be kept updated, until we get AMD support. - */ - function tweenColors(from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - } - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - H.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, tweenColors(H.Color(this.start), H.Color(this.end), this.pos)); - }; - }); - - // Add language - extend(defaultOptions.lang, { - drillUpText: '◁ Back to {series.name}' - }); - defaultOptions.drilldown = { - activeAxisLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - activeDataLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - animation: { - duration: 500 - }, - drillUpButton: { - position: { - align: 'right', - x: -10, - y: 10 - } - // relativeTo: 'plotBox' - // theme - } - }; - - /** - * A general fadeIn method - */ - H.SVGRenderer.prototype.Element.prototype.fadeIn = function (animation) { - this - .attr({ - opacity: 0.1, - visibility: 'inherit' - }) - .animate({ - opacity: pick(this.newOpacity, 1) // newOpacity used in maps - }, animation || { - duration: 250 - }); - }; - - Chart.prototype.addSeriesAsDrilldown = function (point, ddOptions) { - this.addSingleSeriesAsDrilldown(point, ddOptions); - this.applyDrilldown(); - }; - Chart.prototype.addSingleSeriesAsDrilldown = function (point, ddOptions) { - var oldSeries = point.series, - xAxis = oldSeries.xAxis, - yAxis = oldSeries.yAxis, - newSeries, - color = point.color || oldSeries.color, - pointIndex, - levelSeries = [], - levelSeriesOptions = [], - level, - levelNumber, - last; - - if (!this.drilldownLevels) { - this.drilldownLevels = []; - } - - levelNumber = oldSeries.options._levelNumber || 0; - - // See if we can reuse the registered series from last run - last = this.drilldownLevels[this.drilldownLevels.length - 1]; - if (last && last.levelNumber !== levelNumber) { - last = undefined; - } - - - ddOptions = extend({ - color: color, - _ddSeriesId: ddSeriesId++ - }, ddOptions); - pointIndex = inArray(point, oldSeries.points); - - // Record options for all current series - each(oldSeries.chart.series, function (series) { - if (series.xAxis === xAxis && !series.isDrilling) { - series.options._ddSeriesId = series.options._ddSeriesId || ddSeriesId++; - series.options._colorIndex = series.userOptions._colorIndex; - series.options._levelNumber = series.options._levelNumber || levelNumber; // #3182 - - if (last) { - levelSeries = last.levelSeries; - levelSeriesOptions = last.levelSeriesOptions; - } else { - levelSeries.push(series); - levelSeriesOptions.push(series.options); - } - } - }); - - // Add a record of properties for each drilldown level - level = { - levelNumber: levelNumber, - seriesOptions: oldSeries.options, - levelSeriesOptions: levelSeriesOptions, - levelSeries: levelSeries, - shapeArgs: point.shapeArgs, - bBox: point.graphic ? point.graphic.getBBox() : {}, // no graphic in line series with markers disabled - color: color, - lowerSeriesOptions: ddOptions, - pointOptions: oldSeries.options.data[pointIndex], - pointIndex: pointIndex, - oldExtremes: { - xMin: xAxis && xAxis.userMin, - xMax: xAxis && xAxis.userMax, - yMin: yAxis && yAxis.userMin, - yMax: yAxis && yAxis.userMax - } - }; - - // Push it to the lookup array - this.drilldownLevels.push(level); - - newSeries = level.lowerSeries = this.addSeries(ddOptions, false); - newSeries.options._levelNumber = levelNumber + 1; - if (xAxis) { - xAxis.oldPos = xAxis.pos; - xAxis.userMin = xAxis.userMax = null; - yAxis.userMin = yAxis.userMax = null; - } - - // Run fancy cross-animation on supported and equal types - if (oldSeries.type === newSeries.type) { - newSeries.animate = newSeries.animateDrilldown || noop; - newSeries.options.animation = true; - } - }; - - Chart.prototype.applyDrilldown = function () { - var drilldownLevels = this.drilldownLevels, - levelToRemove; - - if (drilldownLevels && drilldownLevels.length > 0) { // #3352, async loading - levelToRemove = drilldownLevels[drilldownLevels.length - 1].levelNumber; - each(this.drilldownLevels, function (level) { - if (level.levelNumber === levelToRemove) { - each(level.levelSeries, function (series) { - if (series.options && series.options._levelNumber === levelToRemove) { // Not removed, not added as part of a multi-series drilldown - series.remove(false); - } - }); - } - }); - } - - this.redraw(); - this.showDrillUpButton(); - }; - - Chart.prototype.getDrilldownBackText = function () { - var drilldownLevels = this.drilldownLevels, - lastLevel; - if (drilldownLevels && drilldownLevels.length > 0) { // #3352, async loading - lastLevel = drilldownLevels[drilldownLevels.length - 1]; - lastLevel.series = lastLevel.seriesOptions; - return format(this.options.lang.drillUpText, lastLevel); - } - - }; - - Chart.prototype.showDrillUpButton = function () { - var chart = this, - backText = this.getDrilldownBackText(), - buttonOptions = chart.options.drilldown.drillUpButton, - attr, - states; - - - if (!this.drillUpButton) { - attr = buttonOptions.theme; - states = attr && attr.states; - - this.drillUpButton = this.renderer.button( - backText, - null, - null, - function () { - chart.drillUp(); - }, - attr, - states && states.hover, - states && states.select - ) - .attr({ - align: buttonOptions.position.align, - zIndex: 9 - }) - .add() - .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); - } else { - this.drillUpButton.attr({ - text: backText - }) - .align(); - } - }; - - Chart.prototype.drillUp = function () { - var chart = this, - drilldownLevels = chart.drilldownLevels, - levelNumber = drilldownLevels[drilldownLevels.length - 1].levelNumber, - i = drilldownLevels.length, - chartSeries = chart.series, - seriesI, - level, - oldSeries, - newSeries, - oldExtremes, - addSeries = function (seriesOptions) { - var addedSeries; - each(chartSeries, function (series) { - if (series.options._ddSeriesId === seriesOptions._ddSeriesId) { - addedSeries = series; - } - }); - - addedSeries = addedSeries || chart.addSeries(seriesOptions, false); - if (addedSeries.type === oldSeries.type && addedSeries.animateDrillupTo) { - addedSeries.animate = addedSeries.animateDrillupTo; - } - if (seriesOptions === level.seriesOptions) { - newSeries = addedSeries; - } - }; - - while (i--) { - - level = drilldownLevels[i]; - if (level.levelNumber === levelNumber) { - drilldownLevels.pop(); - - // Get the lower series by reference or id - oldSeries = level.lowerSeries; - if (!oldSeries.chart) { // #2786 - seriesI = chartSeries.length; // #2919 - while (seriesI--) { - if (chartSeries[seriesI].options.id === level.lowerSeriesOptions.id && - chartSeries[seriesI].options._levelNumber === levelNumber + 1) { // #3867 - oldSeries = chartSeries[seriesI]; - break; - } - } - } - oldSeries.xData = []; // Overcome problems with minRange (#2898) - - each(level.levelSeriesOptions, addSeries); - - fireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions }); - - if (newSeries.type === oldSeries.type) { - newSeries.drilldownLevel = level; - newSeries.options.animation = chart.options.drilldown.animation; - - if (oldSeries.animateDrillupFrom && oldSeries.chart) { // #2919 - oldSeries.animateDrillupFrom(level); - } - } - newSeries.options._levelNumber = levelNumber; - - oldSeries.remove(false); - - // Reset the zoom level of the upper series - if (newSeries.xAxis) { - oldExtremes = level.oldExtremes; - newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false); - newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false); - } - } - } - - this.redraw(); - - if (this.drilldownLevels.length === 0) { - this.drillUpButton = this.drillUpButton.destroy(); - } else { - this.drillUpButton.attr({ - text: this.getDrilldownBackText() - }) - .align(); - } - - this.ddDupes.length = []; // #3315 - }; - - - ColumnSeries.prototype.supportsDrilldown = true; - - /** - * When drilling up, keep the upper series invisible until the lower series has - * moved into place - */ - ColumnSeries.prototype.animateDrillupTo = function (init) { - if (!init) { - var newSeries = this, - level = newSeries.drilldownLevel; - - each(this.points, function (point) { - if (point.graphic) { // #3407 - point.graphic.hide(); - } - if (point.dataLabel) { - point.dataLabel.hide(); - } - if (point.connector) { - point.connector.hide(); - } - }); - - - // Do dummy animation on first point to get to complete - setTimeout(function () { - if (newSeries.points) { // May be destroyed in the meantime, #3389 - each(newSeries.points, function (point, i) { - // Fade in other points - var verb = i === (level && level.pointIndex) ? 'show' : 'fadeIn', - inherit = verb === 'show' ? true : undefined; - if (point.graphic) { // #3407 - point.graphic[verb](inherit); - } - if (point.dataLabel) { - point.dataLabel[verb](inherit); - } - if (point.connector) { - point.connector[verb](inherit); - } - }); - } - }, Math.max(this.chart.options.drilldown.animation.duration - 50, 0)); - - // Reset - this.animate = noop; - } - - }; - - ColumnSeries.prototype.animateDrilldown = function (init) { - var series = this, - drilldownLevels = this.chart.drilldownLevels, - animateFrom, - animationOptions = this.chart.options.drilldown.animation, - xAxis = this.xAxis; - - if (!init) { - each(drilldownLevels, function (level) { - if (series.options._ddSeriesId === level.lowerSeriesOptions._ddSeriesId) { - animateFrom = level.shapeArgs; - animateFrom.fill = level.color; - } - }); - - animateFrom.x += (pick(xAxis.oldPos, xAxis.pos) - xAxis.pos); - - each(this.points, function (point) { - if (point.graphic) { - point.graphic - .attr(animateFrom) - .animate( - extend(point.shapeArgs, { fill: point.color }), - animationOptions - ); - } - if (point.dataLabel) { - point.dataLabel.fadeIn(animationOptions); - } - }); - this.animate = null; - } - - }; - - /** - * When drilling up, pull out the individual point graphics from the lower series - * and animate them into the origin point in the upper series. - */ - ColumnSeries.prototype.animateDrillupFrom = function (level) { - var animationOptions = this.chart.options.drilldown.animation, - group = this.group, - series = this; - - // Cancel mouse events on the series group (#2787) - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key].on('mouseover'); - } - }); - - - delete this.group; - each(this.points, function (point) { - var graphic = point.graphic, - complete = function () { - graphic.destroy(); - if (group) { - group = group.destroy(); - } - }; - - if (graphic) { - - delete point.graphic; - - if (animationOptions) { - graphic.animate( - extend(level.shapeArgs, { fill: level.color }), - H.merge(animationOptions, { complete: complete }) - ); - } else { - graphic.attr(level.shapeArgs); - complete(); - } - } - }); - }; - - if (PieSeries) { - extend(PieSeries.prototype, { - supportsDrilldown: true, - animateDrillupTo: ColumnSeries.prototype.animateDrillupTo, - animateDrillupFrom: ColumnSeries.prototype.animateDrillupFrom, - - animateDrilldown: function (init) { - var level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1], - animationOptions = this.chart.options.drilldown.animation, - animateFrom = level.shapeArgs, - start = animateFrom.start, - angle = animateFrom.end - start, - startAngle = angle / this.points.length; - - if (!init) { - each(this.points, function (point, i) { - point.graphic - .attr(H.merge(animateFrom, { - start: start + i * startAngle, - end: start + (i + 1) * startAngle, - fill: level.color - }))[animationOptions ? 'animate' : 'attr']( - extend(point.shapeArgs, { fill: point.color }), - animationOptions - ); - }); - this.animate = null; - } - } - }); - } - - H.Point.prototype.doDrilldown = function (_holdRedraw, category) { - var series = this.series, - chart = series.chart, - drilldown = chart.options.drilldown, - i = (drilldown.series || []).length, - seriesOptions; - - if (!chart.ddDupes) { - chart.ddDupes = []; - } - - while (i-- && !seriesOptions) { - if (drilldown.series[i].id === this.drilldown && inArray(this.drilldown, chart.ddDupes) === -1) { - seriesOptions = drilldown.series[i]; - chart.ddDupes.push(this.drilldown); - } - } - - // Fire the event. If seriesOptions is undefined, the implementer can check for - // seriesOptions, and call addSeriesAsDrilldown async if necessary. - fireEvent(chart, 'drilldown', { - point: this, - seriesOptions: seriesOptions, - category: category, - points: category !== undefined && this.series.xAxis.ddPoints[category].slice(0) - }); - - if (seriesOptions) { - if (_holdRedraw) { - chart.addSingleSeriesAsDrilldown(this, seriesOptions); - } else { - chart.addSeriesAsDrilldown(this, seriesOptions); - } - } - }; - - /** - * Drill down to a given category. This is the same as clicking on an axis label. - */ - H.Axis.prototype.drilldownCategory = function (x) { - var key, - point, - ddPointsX = this.ddPoints[x]; - for (key in ddPointsX) { - point = ddPointsX[key]; - if (point && point.series && point.series.visible && point.doDrilldown) { // #3197 - point.doDrilldown(true, x); - } - } - this.chart.applyDrilldown(); - }; - - /** - * Create and return a collection of points associated with the X position. Reset it for each level. - */ - H.Axis.prototype.getDDPoints = function (x, levelNumber) { - var ddPoints = this.ddPoints; - if (!ddPoints) { - this.ddPoints = ddPoints = {}; - } - if (!ddPoints[x]) { - ddPoints[x] = []; - } - if (ddPoints[x].levelNumber !== levelNumber) { - ddPoints[x].length = 0; // reset - } - return ddPoints[x]; - }; - - - /** - * Make a tick label drillable, or remove drilling on update - */ - Tick.prototype.drillable = function () { - var pos = this.pos, - label = this.label, - axis = this.axis, - ddPointsX = axis.ddPoints && axis.ddPoints[pos]; - - if (label && ddPointsX && ddPointsX.length) { - if (!label.basicStyles) { - label.basicStyles = H.merge(label.styles); - } - label - .addClass('highcharts-drilldown-axis-label') - .css(axis.chart.options.drilldown.activeAxisLabelStyle) - .on('click', function () { - axis.drilldownCategory(pos); - }); - - } else if (label && label.basicStyles) { - label.styles = {}; // reset for full overwrite of styles - label.css(label.basicStyles); - label.on('click', null); // #3806 - } - }; - - /** - * Always keep the drillability updated (#3951) - */ - wrap(Tick.prototype, 'addLabel', function (proceed) { - proceed.call(this); - this.drillable(); - }); - - - /** - * On initialization of each point, identify its label and make it clickable. Also, provide a - * list of points associated to that label. - */ - wrap(H.Point.prototype, 'init', function (proceed, series, options, x) { - var point = proceed.call(this, series, options, x), - xAxis = series.xAxis, - tick = xAxis && xAxis.ticks[x], - ddPointsX = xAxis && xAxis.getDDPoints(x, series.options._levelNumber); - - if (point.drilldown) { - - // Add the click event to the point - H.addEvent(point, 'click', function () { - if (series.xAxis && series.chart.options.drilldown.allowPointDrilldown === false) { - series.xAxis.drilldownCategory(x); - } else { - point.doDrilldown(); - } - }); - /*wrap(point, 'importEvents', function (proceed) { // wrapping importEvents makes point.click event work - if (!this.hasImportedEvents) { - proceed.call(this); - H.addEvent(this, 'click', function () { - this.doDrilldown(); - }); - } - });*/ - - - // Register drilldown points on this X value - if (ddPointsX) { - ddPointsX.push(point); - ddPointsX.levelNumber = series.options._levelNumber; - } - - } - - // Add or remove click handler and style on the tick label - if (tick) { - tick.drillable(); - } - - return point; - }); - - wrap(H.Series.prototype, 'drawDataLabels', function (proceed) { - var css = this.chart.options.drilldown.activeDataLabelStyle; - - proceed.call(this); - - each(this.points, function (point) { - if (point.drilldown && point.dataLabel) { - point.dataLabel - .attr({ - 'class': 'highcharts-drilldown-data-label' - }) - .css(css); - } - }); - }); - - // Mark the trackers with a pointer - var type, - drawTrackerWrapper = function (proceed) { - proceed.call(this); - each(this.points, function (point) { - if (point.drilldown && point.graphic) { - point.graphic - .attr({ - 'class': 'highcharts-drilldown-point' - }) - .css({ cursor: 'pointer' }); - } - }); - }; - for (type in seriesTypes) { - if (seriesTypes[type].prototype.supportsDrilldown) { - wrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper); - } - } - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/exporting.js b/platforms/browser/www/lib/highcharts/modules/exporting.js deleted file mode 100644 index 36a85056..00000000 --- a/platforms/browser/www/lib/highcharts/modules/exporting.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Exporting module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(f){typeof module==="object"&&module.exports?module.exports=f:f(Highcharts)})(function(f){var r=f.win,m=r.document,A=f.Chart,t=f.addEvent,B=f.removeEvent,C=f.fireEvent,n=f.createElement,s=f.discardElement,v=f.css,l=f.merge,i=f.each,q=f.extend,F=f.splat,G=Math.max,H=f.isTouchDevice,I=f.Renderer.prototype.symbols,y=f.getOptions(),z;q(y.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image", -contextButtonTitle:"Chart context menu"});y.navigation={menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:H?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}}; -y.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu",symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG", -onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(a,b,e){var c,a=n("form",l({method:"post",action:a,enctype:"multipart/form-data"},e),{display:"none"},m.body);for(c in b)n("input",{type:"hidden",name:c,value:b[c]},null,a);a.submit();s(a)};q(A.prototype,{sanitizeSVG:function(a){return a.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (NS[0-9]+\:)?href=/g, -" xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1="rgb($2)" $1-opacity="$3"').replace(/&nbsp;/g,"\u00a0").replace(/&shy;/g,"\u00ad").replace(/<IMG /g,"<image ").replace(/<(\/?)TITLE>/g,"<$1title>").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/ id=([^" >]+)/g,' id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g, -" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(b){return b.toLowerCase()})},getChartHTML:function(){return this.container.innerHTML},getSVG:function(a){var b=this,e,c,g,j,k,d=l(b.options,a),J=d.exporting.allowHTML;if(!m.createElementNS)m.createElementNS=function(b,a){return m.createElement(a)};c=n("div",null,{position:"absolute",top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},m.body);g=b.renderTo.style.width;k=b.renderTo.style.height;g=d.exporting.sourceWidth|| -d.chart.width||/px$/.test(g)&&parseInt(g,10)||600;k=d.exporting.sourceHeight||d.chart.height||/px$/.test(k)&&parseInt(k,10)||400;q(d.chart,{animation:!1,renderTo:c,forExport:!0,renderer:"SVGRenderer",width:g,height:k});d.exporting.enabled=!1;delete d.data;d.series=[];i(b.series,function(a){j=l(a.options,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:a.visible});j.isInternal||d.series.push(j)});a&&i(["xAxis","yAxis"],function(b){i(F(a[b]),function(a,c){d[b][c]=l(d[b][c],a)})});e=new f.Chart(d, -b.callback);i(["xAxis","yAxis"],function(a){i(b[a],function(b,c){var d=e[a][c],f=b.getExtremes(),g=f.userMin,f=f.userMax;d&&(g!==void 0||f!==void 0)&&d.setExtremes(g,f,!0,!1)})});g=e.getChartHTML();d=null;e.destroy();s(c);if(J&&(c=g.match(/<\/svg>(.*?$)/)))c='<foreignObject x="0" y="0" width="200" height="200"><body xmlns="http://www.w3.org/1999/xhtml">'+c[1]+"</body></foreignObject>",g=g.replace("</svg>",c+"</svg>");g=this.sanitizeSVG(g);return g=g.replace(/(url\(#highcharts-[0-9]+)&quot;/g,"$1").replace(/&quot;/g, -"'")},getSVGForExport:function(a,b){var e=this.options.exporting;return this.getSVG(l({chart:{borderRadius:0}},e.chartOptions,b,{exporting:{sourceWidth:a&&a.sourceWidth||e.sourceWidth,sourceHeight:a&&a.sourceHeight||e.sourceHeight}}))},exportChart:function(a,b){var e=this.getSVGForExport(a,b),a=l(this.options.exporting,a);f.post(a.url,{filename:a.filename||"chart",type:a.type,width:a.width||0,scale:a.scale||2,svg:e},a.formAttributes)},print:function(){var a=this,b=a.container,e=[],c=b.parentNode, -f=m.body,j=f.childNodes;if(!a.isPrinting)a.isPrinting=!0,a.pointer.reset(null,0),C(a,"beforePrint"),i(j,function(a,b){if(a.nodeType===1)e[b]=a.style.display,a.style.display="none"}),f.appendChild(b),r.focus(),r.print(),setTimeout(function(){c.appendChild(b);i(j,function(a,b){if(a.nodeType===1)a.style.display=e[b]});a.isPrinting=!1;C(a,"afterPrint")},1E3)},contextMenu:function(a,b,e,c,f,j,k){var d=this,l=d.options.navigation,D=l.menuItemStyle,o=d.chartWidth,p=d.chartHeight,E="cache-"+a,h=d[E],u=G(f, -j),w,x,r,s=function(b){d.pointer.inClass(b.target,a)||x()};if(!h)d[E]=h=n("div",{className:a},{position:"absolute",zIndex:1E3,padding:u+"px"},d.container),w=n("div",null,q({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},l.menuStyle),h),x=function(){v(h,{display:"none"});k&&k.setState(0);d.openMenu=!1},t(h,"mouseleave",function(){r=setTimeout(x,500)}),t(h,"mouseenter",function(){clearTimeout(r)}),t(m,"mouseup",s),t(d,"destroy",function(){B(m,"mouseup", -s)}),i(b,function(a){if(a){var b=a.separator?n("hr",null,null,w):n("div",{onmouseover:function(){v(this,l.menuItemHoverStyle)},onmouseout:function(){v(this,D)},onclick:function(b){b&&b.stopPropagation();x();a.onclick&&a.onclick.apply(d,arguments)},innerHTML:a.text||d.options.lang[a.textKey]},q({cursor:"pointer"},D),w);d.exportDivElements.push(b)}}),d.exportDivElements.push(w,h),d.exportMenuWidth=h.offsetWidth,d.exportMenuHeight=h.offsetHeight;b={display:"block"};e+d.exportMenuWidth>o?b.right=o-e- -f-u+"px":b.left=e-u+"px";c+j+d.exportMenuHeight>p&&k.alignOptions.verticalAlign!=="top"?b.bottom=p-c-u+"px":b.top=c+j-u+"px";v(h,b);d.openMenu=!0},addButton:function(a){var b=this,e=b.renderer,c=l(b.options.navigation.buttonOptions,a),g=c.onclick,j=c.menuItems,k,d,m={stroke:c.symbolStroke,fill:c.symbolFill},i=c.symbolSize||12;if(!b.btnCount)b.btnCount=0;if(!b.exportDivElements)b.exportDivElements=[],b.exportSVGElements=[];if(c.enabled!==!1){var o=c.theme,p=o.states,n=p&&p.hover,p=p&&p.select,h;delete o.states; -g?h=function(a){a.stopPropagation();g.call(b,a)}:j&&(h=function(){b.contextMenu(d.menuClassName,j,d.translateX,d.translateY,d.width,d.height,d);d.setState(2)});c.text&&c.symbol?o.paddingLeft=f.pick(o.paddingLeft,25):c.text||q(o,{width:c.width,height:c.height,padding:0});d=e.button(c.text,0,0,h,o,n,p).attr({title:b.options.lang[c._titleKey],"stroke-linecap":"round"});d.menuClassName=a.menuClassName||"highcharts-menu-"+b.btnCount++;c.symbol&&(k=e.symbol(c.symbol,c.symbolX-i/2,c.symbolY-i/2,i,i).attr(q(m, -{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(d));d.add().align(q(c,{width:d.width,x:f.pick(c.x,z)}),!0,"spacingBox");z+=(d.width+c.buttonSpacing)*(c.align==="right"?-1:1);b.exportSVGElements.push(d,k)}},destroyExport:function(a){var a=a.target,b,e;for(b=0;b<a.exportSVGElements.length;b++)if(e=a.exportSVGElements[b])e.onclick=e.ontouchstart=null,a.exportSVGElements[b]=e.destroy();for(b=0;b<a.exportDivElements.length;b++)e=a.exportDivElements[b],B(e,"mouseleave"),a.exportDivElements[b]=e.onmouseout= -e.onmouseover=e.ontouchstart=e.onclick=null,s(e)}});I.menu=function(a,b,e,c){return["M",a,b+2.5,"L",a+e,b+2.5,"M",a,b+c/2+0.5,"L",a+e,b+c/2+0.5,"M",a,b+c-1.5,"L",a+e,b+c-1.5]};A.prototype.callbacks.push(function(a){var b,e=a.options.exporting,c=e.buttons;z=0;if(e.enabled!==!1){for(b in c)a.addButton(c[b]);t(a,"destroy",a.destroyExport)}})}); diff --git a/platforms/browser/www/lib/highcharts/modules/exporting.src.js b/platforms/browser/www/lib/highcharts/modules/exporting.src.js deleted file mode 100644 index 82a01e61..00000000 --- a/platforms/browser/www/lib/highcharts/modules/exporting.src.js +++ /dev/null @@ -1,780 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Exporting module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/* eslint indent:0 */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - -// create shortcuts -var win = Highcharts.win, - doc = win.document, - Chart = Highcharts.Chart, - addEvent = Highcharts.addEvent, - removeEvent = Highcharts.removeEvent, - fireEvent = Highcharts.fireEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement, - css = Highcharts.css, - merge = Highcharts.merge, - each = Highcharts.each, - extend = Highcharts.extend, - splat = Highcharts.splat, - math = Math, - mathMax = math.max, - isTouchDevice = Highcharts.isTouchDevice, - M = 'M', - L = 'L', - DIV = 'div', - HIDDEN = 'hidden', - NONE = 'none', - PREFIX = 'highcharts-', - ABSOLUTE = 'absolute', - PX = 'px', - UNDEFINED, - symbols = Highcharts.Renderer.prototype.symbols, - defaultOptions = Highcharts.getOptions(), - buttonOffset; - - // Add language - extend(defaultOptions.lang, { - printChart: 'Print chart', - downloadPNG: 'Download PNG image', - downloadJPEG: 'Download JPEG image', - downloadPDF: 'Download PDF document', - downloadSVG: 'Download SVG vector image', - contextButtonTitle: 'Chart context menu' - }); - -// Buttons and menus are collected in a separate config option set called 'navigation'. -// This can be extended later to add control buttons like zoom and pan right click menus. -defaultOptions.navigation = { - menuStyle: { - border: '1px solid #A0A0A0', - background: '#FFFFFF', - padding: '5px 0' - }, - menuItemStyle: { - padding: '0 10px', - background: NONE, - color: '#303030', - fontSize: isTouchDevice ? '14px' : '11px' - }, - menuItemHoverStyle: { - background: '#4572A5', - color: '#FFFFFF' - }, - - buttonOptions: { - symbolFill: '#E0E0E0', - symbolSize: 14, - symbolStroke: '#666', - symbolStrokeWidth: 3, - symbolX: 12.5, - symbolY: 10.5, - align: 'right', - buttonSpacing: 3, - height: 22, - // text: null, - theme: { - fill: 'white', // capture hover - stroke: 'none' - }, - verticalAlign: 'top', - width: 24 - } -}; - - - -// Add the export related options -defaultOptions.exporting = { - //enabled: true, - //filename: 'chart', - type: 'image/png', - url: 'http://export.highcharts.com/', - //width: undefined, - //scale: 2 - buttons: { - contextButton: { - menuClassName: PREFIX + 'contextmenu', - //x: -10, - symbol: 'menu', - _titleKey: 'contextButtonTitle', - menuItems: [{ - textKey: 'printChart', - onclick: function () { - this.print(); - } - }, { - separator: true - }, { - textKey: 'downloadPNG', - onclick: function () { - this.exportChart(); - } - }, { - textKey: 'downloadJPEG', - onclick: function () { - this.exportChart({ - type: 'image/jpeg' - }); - } - }, { - textKey: 'downloadPDF', - onclick: function () { - this.exportChart({ - type: 'application/pdf' - }); - } - }, { - textKey: 'downloadSVG', - onclick: function () { - this.exportChart({ - type: 'image/svg+xml' - }); - } - } - // Enable this block to add "View SVG" to the dropdown menu - /* - ,{ - - text: 'View SVG', - onclick: function () { - var svg = this.getSVG() - .replace(/</g, '\n&lt;') - .replace(/>/g, '&gt;'); - - doc.body.innerHTML = '<pre>' + svg + '</pre>'; - } - } // */ - ] - } - } -}; - -// Add the Highcharts.post utility -Highcharts.post = function (url, data, formAttributes) { - var name, - form; - - // create the form - form = createElement('form', merge({ - method: 'post', - action: url, - enctype: 'multipart/form-data' - }, formAttributes), { - display: NONE - }, doc.body); - - // add the data - for (name in data) { - createElement('input', { - type: HIDDEN, - name: name, - value: data[name] - }, null, form); - } - - // submit - form.submit(); - - // clean up - discardElement(form); -}; - -extend(Chart.prototype, { - - /** - * A collection of regex fixes on the produces SVG to account for expando properties, - * browser bugs, VML problems and other. Returns a cleaned SVG. - */ - sanitizeSVG: function (svg) { - return svg - .replace(/zIndex="[^"]+"/g, '') - .replace(/isShadow="[^"]+"/g, '') - .replace(/symbolName="[^"]+"/g, '') - .replace(/jQuery[0-9]+="[^"]+"/g, '') - .replace(/url\([^#]+#/g, 'url(#') - .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ') - .replace(/ (NS[0-9]+\:)?href=/g, ' xlink:href=') // #3567 - .replace(/\n/, ' ') - // Any HTML added to the container after the SVG (#894) - .replace(/<\/svg>.*?$/, '</svg>') - // Batik doesn't support rgba fills and strokes (#3095) - .replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, '$1="rgb($2)" $1-opacity="$3"') - /* This fails in IE < 8 - .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight - return s2 +'.'+ s3[0]; - })*/ - - // Replace HTML entities, issue #347 - .replace(/&nbsp;/g, '\u00A0') // no-break space - .replace(/&shy;/g, '\u00AD') // soft hyphen - - // IE specific - .replace(/<IMG /g, '<image ') - .replace(/<(\/?)TITLE>/g, '<$1title>') - .replace(/height=([^" ]+)/g, 'height="$1"') - .replace(/width=([^" ]+)/g, 'width="$1"') - .replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>') - .replace(/ id=([^" >]+)/g, ' id="$1"') // #4003 - .replace(/class=([^" >]+)/g, 'class="$1"') - .replace(/ transform /g, ' ') - .replace(/:(path|rect)/g, '$1') - .replace(/style="([^"]+)"/g, function (s) { - return s.toLowerCase(); - }); - }, - - /** - * Return innerHTML of chart. Used as hook for plugins. - */ - getChartHTML: function () { - return this.container.innerHTML; - }, - - /** - * Return an SVG representation of the chart - * - * @param additionalOptions {Object} Additional chart options for the generated SVG representation - */ - getSVG: function (additionalOptions) { - var chart = this, - chartCopy, - sandbox, - svg, - seriesOptions, - sourceWidth, - sourceHeight, - cssWidth, - cssHeight, - html, - options = merge(chart.options, additionalOptions), // copy the options and add extra options - allowHTML = options.exporting.allowHTML; - - - // IE compatibility hack for generating SVG content that it doesn't really understand - if (!doc.createElementNS) { - doc.createElementNS = function (ns, tagName) { - return doc.createElement(tagName); - }; - } - - // create a sandbox where a new chart will be generated - sandbox = createElement(DIV, null, { - position: ABSOLUTE, - top: '-9999em', - width: chart.chartWidth + PX, - height: chart.chartHeight + PX - }, doc.body); - - // get the source size - cssWidth = chart.renderTo.style.width; - cssHeight = chart.renderTo.style.height; - sourceWidth = options.exporting.sourceWidth || - options.chart.width || - (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) || - 600; - sourceHeight = options.exporting.sourceHeight || - options.chart.height || - (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) || - 400; - - // override some options - extend(options.chart, { - animation: false, - renderTo: sandbox, - forExport: true, - renderer: 'SVGRenderer', - width: sourceWidth, - height: sourceHeight - }); - options.exporting.enabled = false; // hide buttons in print - delete options.data; // #3004 - - // prepare for replicating the chart - options.series = []; - each(chart.series, function (serie) { - seriesOptions = merge(serie.options, { - animation: false, // turn off animation - enableMouseTracking: false, - showCheckbox: false, - visible: serie.visible - }); - - if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set - options.series.push(seriesOptions); - } - }); - - // Axis options must be merged in one by one, since it may be an array or an object (#2022, #3900) - if (additionalOptions) { - each(['xAxis', 'yAxis'], function (axisType) { - each(splat(additionalOptions[axisType]), function (axisOptions, i) { - options[axisType][i] = merge(options[axisType][i], axisOptions); - }); - }); - } - - // generate the chart copy - chartCopy = new Highcharts.Chart(options, chart.callback); - - // reflect axis extremes in the export - each(['xAxis', 'yAxis'], function (axisType) { - each(chart[axisType], function (axis, i) { - var axisCopy = chartCopy[axisType][i], - extremes = axis.getExtremes(), - userMin = extremes.userMin, - userMax = extremes.userMax; - - if (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) { - axisCopy.setExtremes(userMin, userMax, true, false); - } - }); - }); - - // get the SVG from the container's innerHTML - svg = chartCopy.getChartHTML(); - - // free up memory - options = null; - chartCopy.destroy(); - discardElement(sandbox); - - // Move HTML into a foreignObject - if (allowHTML) { - html = svg.match(/<\/svg>(.*?$)/); - if (html) { - html = '<foreignObject x="0" y="0" width="200" height="200">' + - '<body xmlns="http://www.w3.org/1999/xhtml">' + - html[1] + - '</body>' + - '</foreignObject>'; - svg = svg.replace('</svg>', html + '</svg>'); - } - } - - // sanitize - svg = this.sanitizeSVG(svg); - - // IE9 beta bugs with innerHTML. Test again with final IE9. - svg = svg.replace(/(url\(#highcharts-[0-9]+)&quot;/g, '$1') - .replace(/&quot;/g, '\''); - - return svg; - }, - - getSVGForExport: function (options, chartOptions) { - var chartExportingOptions = this.options.exporting; - - return this.getSVG(merge( - { chart: { borderRadius: 0 } }, - chartExportingOptions.chartOptions, - chartOptions, - { - exporting: { - sourceWidth: (options && options.sourceWidth) || chartExportingOptions.sourceWidth, - sourceHeight: (options && options.sourceHeight) || chartExportingOptions.sourceHeight - } - } - )); - }, - - /** - * Submit the SVG representation of the chart to the server - * @param {Object} options Exporting options. Possible members are url, type, width and formAttributes. - * @param {Object} chartOptions Additional chart options for the SVG representation of the chart - */ - exportChart: function (options, chartOptions) { - - var svg = this.getSVGForExport(options, chartOptions); - - // merge the options - options = merge(this.options.exporting, options); - - // do the post - Highcharts.post(options.url, { - filename: options.filename || 'chart', - type: options.type, - width: options.width || 0, // IE8 fails to post undefined correctly, so use 0 - scale: options.scale || 2, - svg: svg - }, options.formAttributes); - - }, - - /** - * Print the chart - */ - print: function () { - - var chart = this, - container = chart.container, - origDisplay = [], - origParent = container.parentNode, - body = doc.body, - childNodes = body.childNodes; - - if (chart.isPrinting) { // block the button while in printing mode - return; - } - - chart.isPrinting = true; - chart.pointer.reset(null, 0); - - fireEvent(chart, 'beforePrint'); - - // hide all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - origDisplay[i] = node.style.display; - node.style.display = NONE; - } - }); - - // pull out the chart - body.appendChild(container); - - // print - win.focus(); // #1510 - win.print(); - - // allow the browser to prepare before reverting - setTimeout(function () { - - // put the chart back in - origParent.appendChild(container); - - // restore all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - node.style.display = origDisplay[i]; - } - }); - - chart.isPrinting = false; - - fireEvent(chart, 'afterPrint'); - - }, 1000); - - }, - - /** - * Display a popup menu for choosing the export type - * - * @param {String} className An identifier for the menu - * @param {Array} items A collection with text and onclicks for the items - * @param {Number} x The x position of the opener button - * @param {Number} y The y position of the opener button - * @param {Number} width The width of the opener button - * @param {Number} height The height of the opener button - */ - contextMenu: function (className, items, x, y, width, height, button) { - var chart = this, - navOptions = chart.options.navigation, - menuItemStyle = navOptions.menuItemStyle, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - cacheName = 'cache-' + className, - menu = chart[cacheName], - menuPadding = mathMax(width, height), // for mouse leave detection - boxShadow = '3px 3px 10px #888', - innerMenu, - hide, - hideTimer, - menuStyle, - docMouseUpHandler = function (e) { - if (!chart.pointer.inClass(e.target, className)) { - hide(); - } - }; - - // create the menu only the first time - if (!menu) { - - // create a HTML element above the SVG - chart[cacheName] = menu = createElement(DIV, { - className: className - }, { - position: ABSOLUTE, - zIndex: 1000, - padding: menuPadding + PX - }, chart.container); - - innerMenu = createElement(DIV, null, - extend({ - MozBoxShadow: boxShadow, - WebkitBoxShadow: boxShadow, - boxShadow: boxShadow - }, navOptions.menuStyle), menu); - - // hide on mouse out - hide = function () { - css(menu, { display: NONE }); - if (button) { - button.setState(0); - } - chart.openMenu = false; - }; - - // Hide the menu some time after mouse leave (#1357) - addEvent(menu, 'mouseleave', function () { - hideTimer = setTimeout(hide, 500); - }); - addEvent(menu, 'mouseenter', function () { - clearTimeout(hideTimer); - }); - - - // Hide it on clicking or touching outside the menu (#2258, #2335, #2407) - addEvent(doc, 'mouseup', docMouseUpHandler); - addEvent(chart, 'destroy', function () { - removeEvent(doc, 'mouseup', docMouseUpHandler); - }); - - - // create the items - each(items, function (item) { - if (item) { - var element = item.separator ? - createElement('hr', null, null, innerMenu) : - createElement(DIV, { - onmouseover: function () { - css(this, navOptions.menuItemHoverStyle); - }, - onmouseout: function () { - css(this, menuItemStyle); - }, - onclick: function (e) { - if (e) { // IE7 - e.stopPropagation(); - } - hide(); - if (item.onclick) { - item.onclick.apply(chart, arguments); - } - }, - innerHTML: item.text || chart.options.lang[item.textKey] - }, extend({ - cursor: 'pointer' - }, menuItemStyle), innerMenu); - - - // Keep references to menu divs to be able to destroy them - chart.exportDivElements.push(element); - } - }); - - // Keep references to menu and innerMenu div to be able to destroy them - chart.exportDivElements.push(innerMenu, menu); - - chart.exportMenuWidth = menu.offsetWidth; - chart.exportMenuHeight = menu.offsetHeight; - } - - menuStyle = { display: 'block' }; - - // if outside right, right align it - if (x + chart.exportMenuWidth > chartWidth) { - menuStyle.right = (chartWidth - x - width - menuPadding) + PX; - } else { - menuStyle.left = (x - menuPadding) + PX; - } - // if outside bottom, bottom align it - if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') { - menuStyle.bottom = (chartHeight - y - menuPadding) + PX; - } else { - menuStyle.top = (y + height - menuPadding) + PX; - } - - css(menu, menuStyle); - chart.openMenu = true; - }, - - /** - * Add the export button to the chart - */ - addButton: function (options) { - var chart = this, - renderer = chart.renderer, - btnOptions = merge(chart.options.navigation.buttonOptions, options), - onclick = btnOptions.onclick, - menuItems = btnOptions.menuItems, - symbol, - button, - symbolAttr = { - stroke: btnOptions.symbolStroke, - fill: btnOptions.symbolFill - }, - symbolSize = btnOptions.symbolSize || 12; - if (!chart.btnCount) { - chart.btnCount = 0; - } - - // Keeps references to the button elements - if (!chart.exportDivElements) { - chart.exportDivElements = []; - chart.exportSVGElements = []; - } - - if (btnOptions.enabled === false) { - return; - } - - - var attr = btnOptions.theme, - states = attr.states, - hover = states && states.hover, - select = states && states.select, - callback; - - delete attr.states; - - if (onclick) { - callback = function (e) { - e.stopPropagation(); - onclick.call(chart, e); - }; - - } else if (menuItems) { - callback = function () { - chart.contextMenu( - button.menuClassName, - menuItems, - button.translateX, - button.translateY, - button.width, - button.height, - button - ); - button.setState(2); - }; - } - - - if (btnOptions.text && btnOptions.symbol) { - attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25); - - } else if (!btnOptions.text) { - extend(attr, { - width: btnOptions.width, - height: btnOptions.height, - padding: 0 - }); - } - - button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select) - .attr({ - title: chart.options.lang[btnOptions._titleKey], - 'stroke-linecap': 'round' - }); - button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++; - - if (btnOptions.symbol) { - symbol = renderer.symbol( - btnOptions.symbol, - btnOptions.symbolX - (symbolSize / 2), - btnOptions.symbolY - (symbolSize / 2), - symbolSize, - symbolSize - ) - .attr(extend(symbolAttr, { - 'stroke-width': btnOptions.symbolStrokeWidth || 1, - zIndex: 1 - })).add(button); - } - - button.add() - .align(extend(btnOptions, { - width: button.width, - x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654 - }), true, 'spacingBox'); - - buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1); - - chart.exportSVGElements.push(button, symbol); - - }, - - /** - * Destroy the buttons. - */ - destroyExport: function (e) { - var chart = e.target, - i, - elem; - - // Destroy the extra buttons added - for (i = 0; i < chart.exportSVGElements.length; i++) { - elem = chart.exportSVGElements[i]; - - // Destroy and null the svg/vml elements - if (elem) { // #1822 - elem.onclick = elem.ontouchstart = null; - chart.exportSVGElements[i] = elem.destroy(); - } - } - - // Destroy the divs for the menu - for (i = 0; i < chart.exportDivElements.length; i++) { - elem = chart.exportDivElements[i]; - - // Remove the event handler - removeEvent(elem, 'mouseleave'); - - // Remove inline events - chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null; - - // Destroy the div by moving to garbage bin - discardElement(elem); - } - } -}); - - -symbols.menu = function (x, y, width, height) { - var arr = [ - M, x, y + 2.5, - L, x + width, y + 2.5, - M, x, y + height / 2 + 0.5, - L, x + width, y + height / 2 + 0.5, - M, x, y + height - 1.5, - L, x + width, y + height - 1.5 - ]; - return arr; -}; - -// Add the buttons on chart load -Chart.prototype.callbacks.push(function (chart) { - var n, - exportingOptions = chart.options.exporting, - buttons = exportingOptions.buttons; - - buttonOffset = 0; - - if (exportingOptions.enabled !== false) { - - for (n in buttons) { - chart.addButton(buttons[n]); - } - - // Destroy the export elements at chart destroy - addEvent(chart, 'destroy', chart.destroyExport); - } - -}); - - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/funnel.js b/platforms/browser/www/lib/highcharts/modules/funnel.js deleted file mode 100644 index 31dee7f1..00000000 --- a/platforms/browser/www/lib/highcharts/modules/funnel.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - - Highcharts funnel module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(b){typeof module==="object"&&module.exports?module.exports=b:b(Highcharts)})(function(b){var q=b.getOptions(),w=q.plotOptions,r=b.seriesTypes,G=b.merge,E=function(){},B=b.each,F=b.pick;w.funnel=G(w.pie,{animation:!1,center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",reversed:!1,dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});r.funnel=b.extendClass(r.pie,{type:"funnel",animate:E, -translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},b=0,e=this.chart,c=this.options,f=c.reversed,o=c.ignoreHiddenPoint,g=e.plotWidth,h=e.plotHeight,q=0,e=c.center,i=a(e[0],g),x=a(e[1],h),r=a(c.width,g),l,s,d=a(c.height,h),t=a(c.neckWidth,g),C=a(c.neckHeight,h),u=x-d/2+d-C,a=this.data,y,z,w=c.dataLabels.position==="left"?1:0,A,m,D,p,j,v,n;this.getWidthAt=s=function(k){var a=x-d/2;return k>u||d===C?t:t+(r-t)*(1-(k-a)/(d-C))};this.getX=function(k,a){return i+ -(a?-1:1)*(s(f?h-k:k)/2+c.dataLabels.distance)};this.center=[i,x,d];this.centerX=i;B(a,function(a){if(!o||a.visible!==!1)b+=a.y});B(a,function(a){n=null;z=b?a.y/b:0;m=x-d/2+q*d;j=m+z*d;l=s(m);A=i-l/2;D=A+l;l=s(j);p=i-l/2;v=p+l;m>u?(A=p=i-t/2,D=v=i+t/2):j>u&&(n=j,l=s(u),p=i-l/2,v=p+l,j=u);f&&(m=d-m,j=d-j,n=n?d-n:null);y=["M",A,m,"L",D,m,v,j];n&&y.push(v,n,p,n);y.push(p,j,"Z");a.shapeType="path";a.shapeArgs={d:y};a.percentage=z*100;a.plotX=i;a.plotY=(m+(n||j))/2;a.tooltipPos=[i,a.plotY];a.slice=E;a.half= -w;if(!o||a.visible!==!1)q+=z})},drawPoints:function(){var a=this,b=a.options,e=a.chart.renderer;B(a.data,function(c){var f=c.options,o=c.graphic,g=c.shapeArgs;o?o.animate(g):c.graphic=e.path(g).attr({fill:c.color,stroke:F(f.borderColor,b.borderColor),"stroke-width":F(f.borderWidth,b.borderWidth)}).add(a.group)})},sortByAngle:function(a){a.sort(function(a,b){return a.plotY-b.plotY})},drawDataLabels:function(){var a=this.data,b=this.options.dataLabels.distance,e,c,f,o=a.length,g,h;for(this.center[2]-= -2*b;o--;)f=a[o],c=(e=f.half)?1:-1,h=f.plotY,g=this.getX(h,e),f.labelPos=[0,h,g+(b-5)*c,h,g+b*c,h,e?"right":"left",0];r.pie.prototype.drawDataLabels.call(this)}});q.plotOptions.pyramid=b.merge(q.plotOptions.funnel,{neckWidth:"0%",neckHeight:"0%",reversed:!0});b.seriesTypes.pyramid=b.extendClass(b.seriesTypes.funnel,{type:"pyramid"})}); diff --git a/platforms/browser/www/lib/highcharts/modules/funnel.src.js b/platforms/browser/www/lib/highcharts/modules/funnel.src.js deleted file mode 100644 index d8a27b65..00000000 --- a/platforms/browser/www/lib/highcharts/modules/funnel.src.js +++ /dev/null @@ -1,322 +0,0 @@ -/** - * @license - * Highcharts funnel module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ -/* eslint indent:0 */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - -'use strict'; - -// create shortcuts -var defaultOptions = Highcharts.getOptions(), - defaultPlotOptions = defaultOptions.plotOptions, - seriesTypes = Highcharts.seriesTypes, - merge = Highcharts.merge, - noop = function () {}, - each = Highcharts.each, - pick = Highcharts.pick; - -// set default options -defaultPlotOptions.funnel = merge(defaultPlotOptions.pie, { - animation: false, - center: ['50%', '50%'], - width: '90%', - neckWidth: '30%', - height: '100%', - neckHeight: '25%', - reversed: false, - dataLabels: { - //position: 'right', - connectorWidth: 1, - connectorColor: '#606060' - }, - size: true, // to avoid adapting to data label size in Pie.drawDataLabels - states: { - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - } -}); - - -seriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, { - - type: 'funnel', - animate: noop, - - /** - * Overrides the pie translate method - */ - translate: function () { - - var - // Get positions - either an integer or a percentage string must be given - getLength = function (length, relativeTo) { - return (/%$/).test(length) ? - relativeTo * parseInt(length, 10) / 100 : - parseInt(length, 10); - }, - - sum = 0, - series = this, - chart = series.chart, - options = series.options, - reversed = options.reversed, - ignoreHiddenPoint = options.ignoreHiddenPoint, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - cumulative = 0, // start at top - center = options.center, - centerX = getLength(center[0], plotWidth), - centerY = getLength(center[1], plotHeight), - width = getLength(options.width, plotWidth), - tempWidth, - getWidthAt, - height = getLength(options.height, plotHeight), - neckWidth = getLength(options.neckWidth, plotWidth), - neckHeight = getLength(options.neckHeight, plotHeight), - neckY = (centerY - height / 2) + height - neckHeight, - data = series.data, - path, - fraction, - half = options.dataLabels.position === 'left' ? 1 : 0, - - x1, - y1, - x2, - x3, - y3, - x4, - y5; - - // Return the width at a specific y coordinate - series.getWidthAt = getWidthAt = function (y) { - var top = (centerY - height / 2); - - return y > neckY || height === neckHeight ? - neckWidth : - neckWidth + (width - neckWidth) * (1 - (y - top) / (height - neckHeight)); - }; - series.getX = function (y, half) { - return centerX + (half ? -1 : 1) * ((getWidthAt(reversed ? plotHeight - y : y) / 2) + options.dataLabels.distance); - }; - - // Expose - series.center = [centerX, centerY, height]; - series.centerX = centerX; - - /* - * Individual point coordinate naming: - * - * x1,y1 _________________ x2,y1 - * \ / - * \ / - * \ / - * \ / - * \ / - * x3,y3 _________ x4,y3 - * - * Additional for the base of the neck: - * - * | | - * | | - * | | - * x3,y5 _________ x4,y5 - */ - - - - - // get the total sum - each(data, function (point) { - if (!ignoreHiddenPoint || point.visible !== false) { - sum += point.y; - } - }); - - each(data, function (point) { - // set start and end positions - y5 = null; - fraction = sum ? point.y / sum : 0; - y1 = centerY - height / 2 + cumulative * height; - y3 = y1 + fraction * height; - //tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight)); - tempWidth = getWidthAt(y1); - x1 = centerX - tempWidth / 2; - x2 = x1 + tempWidth; - tempWidth = getWidthAt(y3); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - // the entire point is within the neck - if (y1 > neckY) { - x1 = x3 = centerX - neckWidth / 2; - x2 = x4 = centerX + neckWidth / 2; - - // the base of the neck - } else if (y3 > neckY) { - y5 = y3; - - tempWidth = getWidthAt(neckY); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - y3 = neckY; - } - - if (reversed) { - y1 = height - y1; - y3 = height - y3; - y5 = (y5 ? height - y5 : null); - } - // save the path - path = [ - 'M', - x1, y1, - 'L', - x2, y1, - x4, y3 - ]; - if (y5) { - path.push(x4, y5, x3, y5); - } - path.push(x3, y3, 'Z'); - - // prepare for using shared dr - point.shapeType = 'path'; - point.shapeArgs = { d: path }; - - - // for tooltips and data labels - point.percentage = fraction * 100; - point.plotX = centerX; - point.plotY = (y1 + (y5 || y3)) / 2; - - // Placement of tooltips and data labels - point.tooltipPos = [ - centerX, - point.plotY - ]; - - // Slice is a noop on funnel points - point.slice = noop; - - // Mimicking pie data label placement logic - point.half = half; - - if (!ignoreHiddenPoint || point.visible !== false) { - cumulative += fraction; - } - }); - }, - /** - * Draw a single point (wedge) - * @param {Object} point The point object - * @param {Object} color The color of the point - * @param {Number} brightness The brightness relative to the color - */ - drawPoints: function () { - var series = this, - options = series.options, - chart = series.chart, - renderer = chart.renderer; - - each(series.data, function (point) { - var pointOptions = point.options, - graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (!graphic) { // Create the shapes - point.graphic = renderer.path(shapeArgs) - .attr({ - fill: point.color, - stroke: pick(pointOptions.borderColor, options.borderColor), - 'stroke-width': pick(pointOptions.borderWidth, options.borderWidth) - }) - .add(series.group); - - } else { // Update the shapes - graphic.animate(shapeArgs); - } - }); - }, - - /** - * Funnel items don't have angles (#2289) - */ - sortByAngle: function (points) { - points.sort(function (a, b) { - return a.plotY - b.plotY; - }); - }, - - /** - * Extend the pie data label method - */ - drawDataLabels: function () { - var data = this.data, - labelDistance = this.options.dataLabels.distance, - leftSide, - sign, - point, - i = data.length, - x, - y; - - // In the original pie label anticollision logic, the slots are distributed - // from one labelDistance above to one labelDistance below the pie. In funnels - // we don't want this. - this.center[2] -= 2 * labelDistance; - - // Set the label position array for each point. - while (i--) { - point = data[i]; - leftSide = point.half; - sign = leftSide ? 1 : -1; - y = point.plotY; - x = this.getX(y, leftSide); - - // set the anchor point for data labels - point.labelPos = [ - 0, // first break of connector - y, // a/a - x + (labelDistance - 5) * sign, // second break, right outside point shape - y, // a/a - x + labelDistance * sign, // landing point for connector - y, // a/a - leftSide ? 'right' : 'left', // alignment - 0 // center angle - ]; - } - - seriesTypes.pie.prototype.drawDataLabels.call(this); - } - -}); - -/** - * Pyramid series type. - * A pyramid series is a special type of funnel, without neck and reversed by default. - */ -defaultOptions.plotOptions.pyramid = Highcharts.merge(defaultOptions.plotOptions.funnel, { - neckWidth: '0%', - neckHeight: '0%', - reversed: true -}); -Highcharts.seriesTypes.pyramid = Highcharts.extendClass(Highcharts.seriesTypes.funnel, { - type: 'pyramid' -}); - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/heatmap.js b/platforms/browser/www/lib/highcharts/modules/heatmap.js deleted file mode 100644 index 7956dac2..00000000 --- a/platforms/browser/www/lib/highcharts/modules/heatmap.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2011-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){var m=d.Axis,q=d.Chart,i=d.Color,x=d.Legend,s=d.LegendSymbolMixin,t=d.Series,y=d.Point,u=d.getOptions(),h=d.each,r=d.extend,v=d.extendClass,j=d.merge,k=d.pick,o=d.seriesTypes,w=d.wrap,n=function(){},p=d.ColorAxis=function(){this.isColorAxis=!0;this.init.apply(this,arguments)};r(p.prototype,m.prototype);r(p.prototype,{defaultColorAxisOptions:{lineWidth:0,minPadding:0,maxPadding:0,gridLineWidth:1,tickPixelInterval:72, -startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},color:"gray",width:0.01},labels:{overflow:"justify"},minColor:"#EFEFFF",maxColor:"#003875",tickLength:5},init:function(a,b){var c=a.options.legend.layout!=="vertical",f;f=j(this.defaultColorAxisOptions,{side:c?2:1,reversed:!c},b,{opposite:!c,showEmpty:!1,title:null,isColor:!0});m.prototype.init.call(this,a,f);b.dataClasses&&this.initDataClasses(b);this.initStops(b);this.horiz=c;this.zoomEnabled=!1},tweenColors:function(a,b,c){var f; -!b.rgba.length||!a.rgba.length?a=b.input||"none":(a=a.rgba,b=b.rgba,f=b[3]!==1||a[3]!==1,a=(f?"rgba(":"rgb(")+Math.round(b[0]+(a[0]-b[0])*(1-c))+","+Math.round(b[1]+(a[1]-b[1])*(1-c))+","+Math.round(b[2]+(a[2]-b[2])*(1-c))+(f?","+(b[3]+(a[3]-b[3])*(1-c)):"")+")");return a},initDataClasses:function(a){var b=this,c=this.chart,f,e=0,l=this.options,g=a.dataClasses.length;this.dataClasses=f=[];this.legendItems=[];h(a.dataClasses,function(a,d){var h,a=j(a);f.push(a);if(!a.color)l.dataClassColor==="category"? -(h=c.options.colors,a.color=h[e++],e===h.length&&(e=0)):a.color=b.tweenColors(i(l.minColor),i(l.maxColor),g<2?0.5:d/(g-1))})},initStops:function(a){this.stops=a.stops||[[0,this.options.minColor],[1,this.options.maxColor]];h(this.stops,function(a){a.color=i(a[1])})},setOptions:function(a){m.prototype.setOptions.call(this,a);this.options.crosshair=this.options.marker;this.coll="colorAxis"},setAxisSize:function(){var a=this.legendSymbol,b=this.chart,c,f,e;if(a)this.left=c=a.attr("x"),this.top=f=a.attr("y"), -this.width=e=a.attr("width"),this.height=a=a.attr("height"),this.right=b.chartWidth-c-e,this.bottom=b.chartHeight-f-a,this.len=this.horiz?e:a,this.pos=this.horiz?c:f},toColor:function(a,b){var c,f=this.stops,e,l=this.dataClasses,g,d;if(l)for(d=l.length;d--;){if(g=l[d],e=g.from,f=g.to,(e===void 0||a>=e)&&(f===void 0||a<=f)){c=g.color;if(b)b.dataClass=d;break}}else{this.isLog&&(a=this.val2lin(a));c=1-(this.max-a)/(this.max-this.min||1);for(d=f.length;d--;)if(c>f[d][0])break;e=f[d]||f[d+1];f=f[d+1]|| -e;c=1-(f[0]-c)/(f[0]-e[0]||1);c=this.tweenColors(e.color,f.color,c)}return c},getOffset:function(){var a=this.legendGroup,b=this.chart.axisOffset[this.side];if(a){this.axisParent=a;m.prototype.getOffset.call(this);if(!this.added)this.added=!0,this.labelLeft=0,this.labelRight=this.width;this.chart.axisOffset[this.side]=b}},setLegendColor:function(){var a,b=this.options,c=this.reversed;a=c?1:0;c=c?0:1;a=this.horiz?[a,0,c,0]:[0,c,0,a];this.legendColor={linearGradient:{x1:a[0],y1:a[1],x2:a[2],y2:a[3]}, -stops:b.stops||[[0,b.minColor],[1,b.maxColor]]}},drawLegendSymbol:function(a,b){var c=a.padding,f=a.options,e=this.horiz,d=k(f.symbolWidth,e?200:12),g=k(f.symbolHeight,e?12:200),h=k(f.labelPadding,e?16:30),f=k(f.itemDistance,10);this.setLegendColor();b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,d,g).attr({zIndex:1}).add(b.legendGroup);this.legendItemWidth=d+c+(e?f:h);this.legendItemHeight=g+c+(e?h:0)},setState:n,visible:!0,setVisible:n,getSeriesExtremes:function(){var a;if(this.series.length)a= -this.series[0],this.dataMin=a.valueMin,this.dataMax=a.valueMax},drawCrosshair:function(a,b){var c=b&&b.plotX,f=b&&b.plotY,e,d=this.pos,g=this.len;if(b)e=this.toPixels(b[b.series.colorKey]),e<d?e=d-2:e>d+g&&(e=d+g+2),b.plotX=e,b.plotY=this.len-e,m.prototype.drawCrosshair.call(this,a,b),b.plotX=c,b.plotY=f,this.cross&&this.cross.attr({fill:this.crosshair.color}).add(this.legendGroup)},getPlotLinePath:function(a,b,c,f,e){return typeof e==="number"?this.horiz?["M",e-4,this.top-6,"L",e+4,this.top-6,e, -this.top,"Z"]:["M",this.left,e,"L",this.left-6,e+6,this.left-6,e-6,"Z"]:m.prototype.getPlotLinePath.call(this,a,b,c,f)},update:function(a,b){var c=this.chart,f=c.legend;h(this.series,function(a){a.isDirtyData=!0});if(a.dataClasses&&f.allItems)h(f.allItems,function(a){a.isDataClass&&a.legendGroup.destroy()}),c.isDirtyLegend=!0;c.options[this.coll]=j(this.userOptions,a);m.prototype.update.call(this,a,b);this.legendItem&&(this.setLegendColor(),f.colorizeItem(this,!0))},getDataClassLegendSymbols:function(){var a= -this,b=this.chart,c=this.legendItems,f=b.options.legend,e=f.valueDecimals,l=f.valueSuffix||"",g;c.length||h(this.dataClasses,function(f,m){var i=!0,j=f.from,k=f.to;g="";j===void 0?g="< ":k===void 0&&(g="> ");j!==void 0&&(g+=d.numberFormat(j,e)+l);j!==void 0&&k!==void 0&&(g+=" - ");k!==void 0&&(g+=d.numberFormat(k,e)+l);c.push(r({chart:b,name:g,options:{},drawLegendSymbol:s.drawRectangle,visible:!0,setState:n,isDataClass:!0,setVisible:function(){i=this.visible=!i;h(a.series,function(a){h(a.points, -function(a){a.dataClass===m&&a.setVisible(i)})});b.legend.colorizeItem(this,i)}},f))});return c},name:""});h(["fill","stroke"],function(a){d.Fx.prototype[a+"Setter"]=function(){this.elem.attr(a,p.prototype.tweenColors(i(this.start),i(this.end),this.pos))}});w(q.prototype,"getAxes",function(a){var b=this.options.colorAxis;a.call(this);this.colorAxis=[];b&&new p(this,b)});w(x.prototype,"getAllItems",function(a){var b=[],c=this.chart.colorAxis[0];c&&(c.options.dataClasses?b=b.concat(c.getDataClassLegendSymbols()): -b.push(c),h(c.series,function(a){a.options.showInLegend=!1}));return b.concat(a.call(this))});q={pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",dashstyle:"dashStyle"},pointArrayMap:["value"],axisTypes:["xAxis","yAxis","colorAxis"],optionalAxis:"colorAxis",trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:n,parallelArrays:["x","y","value"],colorKey:"value",translateColors:function(){var a=this,b=this.options.nullColor,c=this.colorAxis,f=this.colorKey; -h(this.data,function(e){var d=e[f];if(d=e.options.color||(d===null?b:c&&d!==void 0?c.toColor(d,e):e.color||a.color))e.color=d})}};u.plotOptions.heatmap=j(u.plotOptions.scatter,{animation:!1,borderWidth:0,nullColor:"#F8F8F8",dataLabels:{formatter:function(){return this.point.value},inside:!0,verticalAlign:"middle",crop:!1,overflow:!1,padding:0},marker:null,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}<br/>"},states:{normal:{animation:!0},hover:{halo:!1,brightness:0.2}}}); -o.heatmap=v(o.scatter,j(q,{type:"heatmap",pointArrayMap:["y","value"],hasPointSpecificOptions:!0,pointClass:v(y,{setVisible:function(a){var b=this,c=a?"show":"hide";h(["graphic","dataLabel"],function(a){if(b[a])b[a][c]()})}}),supportsDrilldown:!0,getExtremesFromAll:!0,directTouch:!0,init:function(){var a;o.scatter.prototype.init.apply(this,arguments);a=this.options;a.pointRange=k(a.pointRange,a.colsize||1);this.yAxis.axisPointRange=a.rowsize||1},translate:function(){var a=this.options,b=this.xAxis, -c=this.yAxis,f=function(a,b,c){return Math.min(Math.max(b,a),c)};this.generatePoints();h(this.points,function(e){var d=(a.colsize||1)/2,g=(a.rowsize||1)/2,h=f(Math.round(b.len-b.translate(e.x-d,0,1,0,1)),0,b.len),d=f(Math.round(b.len-b.translate(e.x+d,0,1,0,1)),0,b.len),i=f(Math.round(c.translate(e.y-g,0,1,0,1)),0,c.len),g=f(Math.round(c.translate(e.y+g,0,1,0,1)),0,c.len);e.plotX=e.clientX=(h+d)/2;e.plotY=(i+g)/2;e.shapeType="rect";e.shapeArgs={x:Math.min(h,d),y:Math.min(i,g),width:Math.abs(d-h), -height:Math.abs(g-i)}});this.translateColors();this.chart.hasRendered&&h(this.points,function(a){a.shapeArgs.fill=a.options.color||a.color})},drawPoints:o.column.prototype.drawPoints,animate:n,getBox:n,drawLegendSymbol:s.drawRectangle,getExtremes:function(){t.prototype.getExtremes.call(this,this.valueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;t.prototype.getExtremes.call(this)}}))}); diff --git a/platforms/browser/www/lib/highcharts/modules/heatmap.src.js b/platforms/browser/www/lib/highcharts/modules/heatmap.src.js deleted file mode 100644 index 195e2b4a..00000000 --- a/platforms/browser/www/lib/highcharts/modules/heatmap.src.js +++ /dev/null @@ -1,711 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2011-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ -/* eslint indent: [2, 4] */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - - var UNDEFINED, - Axis = Highcharts.Axis, - Chart = Highcharts.Chart, - Color = Highcharts.Color, - Legend = Highcharts.Legend, - LegendSymbolMixin = Highcharts.LegendSymbolMixin, - Series = Highcharts.Series, - Point = Highcharts.Point, - - defaultOptions = Highcharts.getOptions(), - each = Highcharts.each, - extend = Highcharts.extend, - extendClass = Highcharts.extendClass, - merge = Highcharts.merge, - pick = Highcharts.pick, - seriesTypes = Highcharts.seriesTypes, - wrap = Highcharts.wrap, - noop = function () {}; - - - - - /** - * The ColorAxis object for inclusion in gradient legends - */ - var ColorAxis = Highcharts.ColorAxis = function () { - this.isColorAxis = true; - this.init.apply(this, arguments); - }; - extend(ColorAxis.prototype, Axis.prototype); - extend(ColorAxis.prototype, { - defaultColorAxisOptions: { - lineWidth: 0, - minPadding: 0, - maxPadding: 0, - gridLineWidth: 1, - tickPixelInterval: 72, - startOnTick: true, - endOnTick: true, - offset: 0, - marker: { - animation: { - duration: 50 - }, - color: 'gray', - width: 0.01 - }, - labels: { - overflow: 'justify' - }, - minColor: '#EFEFFF', - maxColor: '#003875', - tickLength: 5 - }, - init: function (chart, userOptions) { - var horiz = chart.options.legend.layout !== 'vertical', - options; - - // Build the options - options = merge(this.defaultColorAxisOptions, { - side: horiz ? 2 : 1, - reversed: !horiz - }, userOptions, { - opposite: !horiz, - showEmpty: false, - title: null, - isColor: true - }); - - Axis.prototype.init.call(this, chart, options); - - // Base init() pushes it to the xAxis array, now pop it again - //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop(); - - // Prepare data classes - if (userOptions.dataClasses) { - this.initDataClasses(userOptions); - } - this.initStops(userOptions); - - // Override original axis properties - this.horiz = horiz; - this.zoomEnabled = false; - }, - - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. - * NOTE: Changes here should be copied - * to the same function in drilldown.src.js and solid-gauge-src.js. - */ - tweenColors: function (from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - }, - - initDataClasses: function (userOptions) { - var axis = this, - chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options, - len = userOptions.dataClasses.length; - this.dataClasses = dataClasses = []; - this.legendItems = []; - - each(userOptions.dataClasses, function (dataClass, i) { - var colors; - - dataClass = merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = axis.tweenColors( - Color(options.minColor), - Color(options.maxColor), - len < 2 ? 0.5 : i / (len - 1) // #3219 - ); - } - } - }); - }, - - initStops: function (userOptions) { - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function (stop) { - stop.color = Color(stop[1]); - }); - }, - - /** - * Extend the setOptions method to process extreme colors and color - * stops. - */ - setOptions: function (userOptions) { - Axis.prototype.setOptions.call(this, userOptions); - - this.options.crosshair = this.options.marker; - this.coll = 'colorAxis'; - }, - - setAxisSize: function () { - var symbol = this.legendSymbol, - chart = this.chart, - x, - y, - width, - height; - - if (symbol) { - this.left = x = symbol.attr('x'); - this.top = y = symbol.attr('y'); - this.width = width = symbol.attr('width'); - this.height = height = symbol.attr('height'); - this.right = chart.chartWidth - x - width; - this.bottom = chart.chartHeight - y - height; - - this.len = this.horiz ? width : height; - this.pos = this.horiz ? x : y; - } - }, - - /** - * Translate from a value to a color - */ - toColor: function (value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / ((this.max - this.min) || 1)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = this.tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - - /** - * Override the getOffset method to add the whole axis groups inside the legend. - */ - getOffset: function () { - var group = this.legendGroup, - sideOffset = this.chart.axisOffset[this.side]; - - if (group) { - - // Hook for the getOffset method to add groups to this parent group - this.axisParent = group; - - // Call the base - Axis.prototype.getOffset.call(this); - - // First time only - if (!this.added) { - - this.added = true; - - this.labelLeft = 0; - this.labelRight = this.width; - } - // Reset it to avoid color axis reserving space - this.chart.axisOffset[this.side] = sideOffset; - } - }, - - /** - * Create the color gradient - */ - setLegendColor: function () { - var grad, - horiz = this.horiz, - options = this.options, - reversed = this.reversed, - one = reversed ? 1 : 0, - zero = reversed ? 0 : 1; - - grad = horiz ? [one, 0, zero, 0] : [0, zero, 0, one]; // #3190 - this.legendColor = { - linearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] }, - stops: options.stops || [ - [0, options.minColor], - [1, options.maxColor] - ] - }; - }, - - /** - * The color axis appears inside the legend and has its own legend symbol - */ - drawLegendSymbol: function (legend, item) { - var padding = legend.padding, - legendOptions = legend.options, - horiz = this.horiz, - width = pick(legendOptions.symbolWidth, horiz ? 200 : 12), - height = pick(legendOptions.symbolHeight, horiz ? 12 : 200), - labelPadding = pick(legendOptions.labelPadding, horiz ? 16 : 30), - itemDistance = pick(legendOptions.itemDistance, 10); - - this.setLegendColor(); - - // Create the gradient - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - 11, - width, - height - ).attr({ - zIndex: 1 - }).add(item.legendGroup); - - // Set how much space this legend item takes up - this.legendItemWidth = width + padding + (horiz ? itemDistance : labelPadding); - this.legendItemHeight = height + padding + (horiz ? labelPadding : 0); - }, - /** - * Fool the legend - */ - setState: noop, - visible: true, - setVisible: noop, - getSeriesExtremes: function () { - var series; - if (this.series.length) { - series = this.series[0]; - this.dataMin = series.valueMin; - this.dataMax = series.valueMax; - } - }, - drawCrosshair: function (e, point) { - var plotX = point && point.plotX, - plotY = point && point.plotY, - crossPos, - axisPos = this.pos, - axisLen = this.len; - - if (point) { - crossPos = this.toPixels(point[point.series.colorKey]); - if (crossPos < axisPos) { - crossPos = axisPos - 2; - } else if (crossPos > axisPos + axisLen) { - crossPos = axisPos + axisLen + 2; - } - - point.plotX = crossPos; - point.plotY = this.len - crossPos; - Axis.prototype.drawCrosshair.call(this, e, point); - point.plotX = plotX; - point.plotY = plotY; - - if (this.cross) { - this.cross - .attr({ - fill: this.crosshair.color - }) - .add(this.legendGroup); - } - } - }, - getPlotLinePath: function (a, b, c, d, pos) { - return typeof pos === 'number' ? // crosshairs only // #3969 pos can be 0 !! - (this.horiz ? - ['M', pos - 4, this.top - 6, 'L', pos + 4, this.top - 6, pos, this.top, 'Z'] : - ['M', this.left, pos, 'L', this.left - 6, pos + 6, this.left - 6, pos - 6, 'Z'] - ) : - Axis.prototype.getPlotLinePath.call(this, a, b, c, d); - }, - - update: function (newOptions, redraw) { - var chart = this.chart, - legend = chart.legend; - - each(this.series, function (series) { - series.isDirtyData = true; // Needed for Axis.update when choropleth colors change - }); - - // When updating data classes, destroy old items and make sure new ones are created (#3207) - if (newOptions.dataClasses && legend.allItems) { - each(legend.allItems, function (item) { - if (item.isDataClass) { - item.legendGroup.destroy(); - } - }); - chart.isDirtyLegend = true; - } - - // Keep the options structure updated for export. Unlike xAxis and yAxis, the colorAxis is - // not an array. (#3207) - chart.options[this.coll] = merge(this.userOptions, newOptions); - - Axis.prototype.update.call(this, newOptions, redraw); - if (this.legendItem) { - this.setLegendColor(); - legend.colorizeItem(this, true); - } - }, - - /** - * Get the legend item symbols for data classes - */ - getDataClassLegendSymbols: function () { - var axis = this, - chart = this.chart, - legendItems = this.legendItems, - legendOptions = chart.options.legend, - valueDecimals = legendOptions.valueDecimals, - valueSuffix = legendOptions.valueSuffix || '', - name; - - if (!legendItems.length) { - each(this.dataClasses, function (dataClass, i) { - var vis = true, - from = dataClass.from, - to = dataClass.to; - - // Assemble the default name. This can be overridden by legend.options.labelFormatter - name = ''; - if (from === UNDEFINED) { - name = '< '; - } else if (to === UNDEFINED) { - name = '> '; - } - if (from !== UNDEFINED) { - name += Highcharts.numberFormat(from, valueDecimals) + valueSuffix; - } - if (from !== UNDEFINED && to !== UNDEFINED) { - name += ' - '; - } - if (to !== UNDEFINED) { - name += Highcharts.numberFormat(to, valueDecimals) + valueSuffix; - } - - // Add a mock object to the legend items - legendItems.push(extend({ - chart: chart, - name: name, - options: {}, - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - visible: true, - setState: noop, - isDataClass: true, - setVisible: function () { - vis = this.visible = !vis; - each(axis.series, function (series) { - each(series.points, function (point) { - if (point.dataClass === i) { - point.setVisible(vis); - } - }); - }); - - chart.legend.colorizeItem(this, vis); - } - }, dataClass)); - }); - } - return legendItems; - }, - name: '' // Prevents 'undefined' in legend in IE8 - }); - - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - Highcharts.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, ColorAxis.prototype.tweenColors(Color(this.start), Color(this.end), this.pos)); - }; - }); - - /** - * Extend the chart getAxes method to also get the color axis - */ - wrap(Chart.prototype, 'getAxes', function (proceed) { - - var options = this.options, - colorAxisOptions = options.colorAxis; - - proceed.call(this); - - this.colorAxis = []; - if (colorAxisOptions) { - new ColorAxis(this, colorAxisOptions); // eslint-disable-line no-new - } - }); - - - /** - * Wrap the legend getAllItems method to add the color axis. This also removes the - * axis' own series to prevent them from showing up individually. - */ - wrap(Legend.prototype, 'getAllItems', function (proceed) { - var allItems = [], - colorAxis = this.chart.colorAxis[0]; - - if (colorAxis) { - - // Data classes - if (colorAxis.options.dataClasses) { - allItems = allItems.concat(colorAxis.getDataClassLegendSymbols()); - // Gradient legend - } else { - // Add this axis on top - allItems.push(colorAxis); - } - - // Don't add the color axis' series - each(colorAxis.series, function (series) { - series.options.showInLegend = false; - }); - } - - return allItems.concat(proceed.call(this)); - }); - /** - * Mixin for maps and heatmaps - */ - var colorPointMixin = { - /** - * Set the visibility of a single point - */ - setVisible: function (vis) { - var point = this, - method = vis ? 'show' : 'hide'; - - // Show and hide associated elements - each(['graphic', 'dataLabel'], function (key) { - if (point[key]) { - point[key][method](); - } - }); - } - }; - var colorSeriesMixin = { - - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color', - dashstyle: 'dashStyle' - }, - pointArrayMap: ['value'], - axisTypes: ['xAxis', 'yAxis', 'colorAxis'], - optionalAxis: 'colorAxis', - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - getSymbol: noop, - parallelArrays: ['x', 'y', 'value'], - colorKey: 'value', - - /** - * In choropleth maps, the color is a result of the value, so this needs translation too - */ - translateColors: function () { - var series = this, - nullColor = this.options.nullColor, - colorAxis = this.colorAxis, - colorKey = this.colorKey; - - each(this.data, function (point) { - var value = point[colorKey], - color; - - color = point.options.color || - (value === null ? nullColor : (colorAxis && value !== undefined) ? colorAxis.toColor(value, point) : point.color || series.color); - - if (color) { - point.color = color; - } - }); - } - }; - - /** - * Extend the default options with map options - */ - defaultOptions.plotOptions.heatmap = merge(defaultOptions.plotOptions.scatter, { - animation: false, - borderWidth: 0, - nullColor: '#F8F8F8', - dataLabels: { - formatter: function () { // #2945 - return this.point.value; - }, - inside: true, - verticalAlign: 'middle', - crop: false, - overflow: false, - padding: 0 // #3837 - }, - marker: null, - pointRange: null, // dynamically set to colsize by default - tooltip: { - pointFormat: '{point.x}, {point.y}: {point.value}<br/>' - }, - states: { - normal: { - animation: true - }, - hover: { - halo: false, // #3406, halo is not required on heatmaps - brightness: 0.2 - } - } - }); - - // The Heatmap series type - seriesTypes.heatmap = extendClass(seriesTypes.scatter, merge(colorSeriesMixin, { - type: 'heatmap', - pointArrayMap: ['y', 'value'], - hasPointSpecificOptions: true, - pointClass: extendClass(Point, colorPointMixin), - supportsDrilldown: true, - getExtremesFromAll: true, - directTouch: true, - - /** - * Override the init method to add point ranges on both axes. - */ - init: function () { - var options; - seriesTypes.scatter.prototype.init.apply(this, arguments); - - options = this.options; - options.pointRange = pick(options.pointRange, options.colsize || 1); // #3758, prevent resetting in setData - this.yAxis.axisPointRange = options.rowsize || 1; // general point range - }, - translate: function () { - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - between = function (x, a, b) { - return Math.min(Math.max(a, x), b); - }; - - series.generatePoints(); - - each(series.points, function (point) { - var xPad = (options.colsize || 1) / 2, - yPad = (options.rowsize || 1) / 2, - x1 = between(Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), 0, xAxis.len), - x2 = between(Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), 0, xAxis.len), - y1 = between(Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), 0, yAxis.len), - y2 = between(Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), 0, yAxis.len); - - // Set plotX and plotY for use in K-D-Tree and more - point.plotX = point.clientX = (x1 + x2) / 2; - point.plotY = (y1 + y2) / 2; - - point.shapeType = 'rect'; - point.shapeArgs = { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - width: Math.abs(x2 - x1), - height: Math.abs(y2 - y1) - }; - }); - - series.translateColors(); - - // Make sure colors are updated on colorAxis update (#2893) - if (this.chart.hasRendered) { - each(series.points, function (point) { - point.shapeArgs.fill = point.options.color || point.color; // #3311 - }); - } - }, - drawPoints: seriesTypes.column.prototype.drawPoints, - animate: noop, - getBox: noop, - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - getExtremes: function () { - // Get the extremes from the value data - Series.prototype.getExtremes.call(this, this.valueData); - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Get the extremes from the y data - Series.prototype.getExtremes.call(this); - } - - })); - - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/no-data-to-display.js b/platforms/browser/www/lib/highcharts/modules/no-data-to-display.js deleted file mode 100644 index f613d29a..00000000 --- a/platforms/browser/www/lib/highcharts/modules/no-data-to-display.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Plugin for displaying a message when there is no data visible in chart. - - (c) 2010-2014 Highsoft AS - Author: Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(a){typeof module==="object"&&module.exports?module.exports=a:a(Highcharts)})(function(a){function h(){return!!this.points.length}function d(){this.hasData()?this.hideNoData():this.showNoData()}var e=a.seriesTypes,c=a.Chart.prototype,f=a.getOptions(),g=a.extend,i=a.each;g(f.lang,{noData:"No data to display"});f.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};i(["pie","gauge","waterfall","bubble"],function(b){if(e[b])e[b].prototype.hasData= -h});a.Series.prototype.hasData=function(){return this.visible&&this.dataMax!==void 0&&this.dataMin!==void 0};c.showNoData=function(b){var a=this.options,b=b||a.lang.noData,a=a.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(b,0,0,null,null,null,a.useHTML,null,"no-data").attr(a.attr).css(a.style).add(),this.noDataLabel.align(g(this.noDataLabel.getBBox(),a.position),!1,"plotBox")};c.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};c.hasData=function(){for(var a= -this.series,c=a.length;c--;)if(a[c].hasData()&&!a[c].options.isInternal)return!0;return!1};c.callbacks.push(function(b){a.addEvent(b,"load",d);a.addEvent(b,"redraw",d)})}); diff --git a/platforms/browser/www/lib/highcharts/modules/no-data-to-display.src.js b/platforms/browser/www/lib/highcharts/modules/no-data-to-display.src.js deleted file mode 100644 index 2d071100..00000000 --- a/platforms/browser/www/lib/highcharts/modules/no-data-to-display.src.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Plugin for displaying a message when there is no data visible in chart. - * - * (c) 2010-2014 Highsoft AS - * Author: Oystein Moseng - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - - var seriesTypes = H.seriesTypes, - chartPrototype = H.Chart.prototype, - defaultOptions = H.getOptions(), - extend = H.extend, - each = H.each; - - // Add language option - extend(defaultOptions.lang, { - noData: 'No data to display' - }); - - // Add default display options for message - defaultOptions.noData = { - position: { - x: 0, - y: 0, - align: 'center', - verticalAlign: 'middle' - }, - attr: { - }, - style: { - fontWeight: 'bold', - fontSize: '12px', - color: '#60606a' - } - // useHTML: false - }; - - /** - * Define hasData functions for series. These return true if there are data points on this series within the plot area - */ - function hasDataPie() { - return !!this.points.length; /* != 0 */ - } - - each(['pie', 'gauge', 'waterfall', 'bubble'], function (type) { - if (seriesTypes[type]) { - seriesTypes[type].prototype.hasData = hasDataPie; - } - }); - - H.Series.prototype.hasData = function () { - return this.visible && this.dataMax !== undefined && this.dataMin !== undefined; // #3703 - }; - - /** - * Display a no-data message. - * - * @param {String} str An optional message to show in place of the default one - */ - chartPrototype.showNoData = function (str) { - var chart = this, - options = chart.options, - text = str || options.lang.noData, - noDataOptions = options.noData; - - if (!chart.noDataLabel) { - chart.noDataLabel = chart.renderer - .label( - text, - 0, - 0, - null, - null, - null, - noDataOptions.useHTML, - null, - 'no-data' - ) - .attr(noDataOptions.attr) - .css(noDataOptions.style) - .add(); - chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox'); - } - }; - - /** - * Hide no-data message - */ - chartPrototype.hideNoData = function () { - var chart = this; - if (chart.noDataLabel) { - chart.noDataLabel = chart.noDataLabel.destroy(); - } - }; - - /** - * Returns true if there are data points within the plot area now - */ - chartPrototype.hasData = function () { - var chart = this, - series = chart.series, - i = series.length; - - while (i--) { - if (series[i].hasData() && !series[i].options.isInternal) { - return true; - } - } - - return false; - }; - - /** - * Show no-data message if there is no data in sight. Otherwise, hide it. - */ - function handleNoData() { - var chart = this; - if (chart.hasData()) { - chart.hideNoData(); - } else { - chart.showNoData(); - } - } - - /** - * Add event listener to handle automatic display of no-data message - */ - chartPrototype.callbacks.push(function (chart) { - H.addEvent(chart, 'load', handleNoData); - H.addEvent(chart, 'redraw', handleNoData); - }); - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/offline-exporting.js b/platforms/browser/www/lib/highcharts/modules/offline-exporting.js deleted file mode 100644 index bc21bb3c..00000000 --- a/platforms/browser/www/lib/highcharts/modules/offline-exporting.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Client side exporting module - - (c) 2015 Torstein Honsi / Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(c){typeof module==="object"&&module.exports?module.exports=c:c(Highcharts)})(function(c){function z(c,f){var h=l.getElementsByTagName("head")[0],b=l.createElement("script");b.type="text/javascript";b.src=c;b.onload=f;h.appendChild(b)}var f=c.win,i=f.navigator,l=f.document;c.CanVGRenderer={};c.Chart.prototype.exportChartLocal=function(A,B){var h=this,b=c.merge(h.options.exporting,A),s=i.userAgent.indexOf("WebKit")>-1&&i.userAgent.indexOf("Chrome")<0,n=b.scale||2,p,t=f.URL||f.webkitURL||f, -k,u=0,q,o,v,d=function(){if(b.fallbackToExportServer===!1)throw"Fallback to export server disabled";h.exportChart(b)},w=function(a,g,e,c,m,b,d){var j=new f.Image;if(!s)j.crossOrigin="Anonymous";j.onload=function(){var b=l.createElement("canvas"),f=b.getContext&&b.getContext("2d"),h;if(f){b.height=j.height*n;b.width=j.width*n;f.drawImage(j,0,0,b.width,b.height);try{h=b.toDataURL(),e(h,g)}catch(i){if(i.name==="SecurityError"||i.name==="SECURITY_ERR"||i.message==="SecurityError")c(a,g);else throw i; -}}else m(a,g);d&&d(a,g)};j.onerror=function(){b(a,g);d&&d(a,g)};j.src=a},x=function(a){try{if(!s&&i.userAgent.toLowerCase().indexOf("firefox")<0)return t.createObjectURL(new f.Blob([a],{type:"image/svg+xml;charset-utf-16"}))}catch(b){}return"data:image/svg+xml;charset=UTF-8,"+encodeURIComponent(a)},r=function(a,c){var e=l.createElement("a"),d=(b.filename||"chart")+"."+c,m;if(i.msSaveOrOpenBlob)i.msSaveOrOpenBlob(a,d);else if(e.download!==void 0)e.href=a,e.download=d,e.target="_blank",l.body.appendChild(e), -e.click(),l.body.removeChild(e);else try{if(m=f.open(a,"chart"),m===void 0||m===null)throw 1;}catch(h){f.location.href=a}},y=function(){var a,g,e=h.sanitizeSVG(p.innerHTML);if(b&&b.type==="image/svg+xml")try{i.msSaveOrOpenBlob?(g=new MSBlobBuilder,g.append(e),a=g.getBlob("image/svg+xml")):a=x(e),r(a,"svg")}catch(k){d()}else a=x(e),w(a,{},function(a){try{r(a,"png")}catch(b){d()}},function(){var a=l.createElement("canvas"),b=a.getContext("2d"),g=e.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1]* -n,j=e.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1]*n,k=function(){b.drawSvg(e,0,0,g,j);try{r(i.msSaveOrOpenBlob?a.msToBlob():a.toDataURL("image/png"),"png")}catch(c){d()}};a.width=g;a.height=j;f.canvg?k():(h.showLoading(),z(c.getOptions().global.canvasToolsURL,function(){h.hideLoading();k()}))},d,d,function(){try{t.revokeObjectURL(a)}catch(b){}})},C=function(a,b){++u;b.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",a);u===k.length&&y()};c.wrap(c.Chart.prototype,"getChartHTML", -function(a){p=this.container.cloneNode(!0);return a.apply(this,Array.prototype.slice.call(arguments,1))});h.getSVGForExport(b,B);k=p.getElementsByTagName("image");try{k.length||y();for(o=0,v=k.length;o<v;++o)q=k[o],w(q.getAttributeNS("http://www.w3.org/1999/xlink","href"),{imageElement:q},C,d,d,d)}catch(D){d()}};c.getOptions().exporting.buttons.contextButton.menuItems=[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChartLocal()}}, -{textKey:"downloadSVG",onclick:function(){this.exportChartLocal({type:"image/svg+xml"})}}]}); diff --git a/platforms/browser/www/lib/highcharts/modules/offline-exporting.src.js b/platforms/browser/www/lib/highcharts/modules/offline-exporting.src.js deleted file mode 100644 index 093f49f3..00000000 --- a/platforms/browser/www/lib/highcharts/modules/offline-exporting.src.js +++ /dev/null @@ -1,301 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Client side exporting module - * - * (c) 2015 Torstein Honsi / Oystein Moseng - * - * License: www.highcharts.com/license - */ - -/*global MSBlobBuilder */ -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (Highcharts) { - - var win = Highcharts.win, - nav = win.navigator, - doc = win.document; - - // Dummy object so we can reuse our canvas-tools.js without errors - Highcharts.CanVGRenderer = {}; - - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - function getScript(scriptLocation, callback) { - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - } - - /** - * Add a new method to the Chart object to perform a local download - */ - Highcharts.Chart.prototype.exportChartLocal = function (exportingOptions, chartOptions) { - var chart = this, - options = Highcharts.merge(chart.options.exporting, exportingOptions), - webKit = nav.userAgent.indexOf('WebKit') > -1 && nav.userAgent.indexOf('Chrome') < 0, // Webkit and not chrome - scale = options.scale || 2, - chartCopyContainer, - domurl = win.URL || win.webkitURL || win, - images, - imagesEmbedded = 0, - el, - i, - l, - fallbackToExportServer = function () { - if (options.fallbackToExportServer === false) { - throw 'Fallback to export server disabled'; - } - chart.exportChart(options); - }, - // Get data:URL from image URL - // Pass in callbacks to handle results. finallyCallback is always called at the end of the process. Supplying this callback is optional. - // All callbacks receive two arguments: imageURL, and callbackArgs. callbackArgs is used only by callbacks and can contain whatever. - imageToDataUrl = function (imageURL, callbackArgs, successCallback, taintedCallback, noCanvasSupportCallback, failedLoadCallback, finallyCallback) { - var img = new win.Image(); - if (!webKit) { - img.crossOrigin = 'Anonymous'; // For some reason Safari chokes on this attribute - } - img.onload = function () { - var canvas = doc.createElement('canvas'), - ctx = canvas.getContext && canvas.getContext('2d'), - dataURL; - - if (!ctx) { - noCanvasSupportCallback(imageURL, callbackArgs); - } else { - canvas.height = img.height * scale; - canvas.width = img.width * scale; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - - // Now we try to get the contents of the canvas. - try { - dataURL = canvas.toDataURL(); - successCallback(dataURL, callbackArgs); - } catch (e) { - // Failed - either tainted canvas or something else went horribly wrong - if (e.name === 'SecurityError' || e.name === 'SECURITY_ERR' || e.message === 'SecurityError') { - taintedCallback(imageURL, callbackArgs); - } else { - throw e; - } - } - } - if (finallyCallback) { - finallyCallback(imageURL, callbackArgs); - } - }; - img.onerror = function () { - failedLoadCallback(imageURL, callbackArgs); - if (finallyCallback) { - finallyCallback(imageURL, callbackArgs); - } - }; - img.src = imageURL; - }, - // Get blob URL from SVG code. Falls back to normal data URI. - svgToDataUrl = function (svg) { - try { - // Safari requires data URI since it doesn't allow navigation to blob URLs - // Firefox has an issue with Blobs and internal references, leading to gradients not working using Blobs (#4550) - if (!webKit && nav.userAgent.toLowerCase().indexOf('firefox') < 0) { - return domurl.createObjectURL(new win.Blob([svg], { type: 'image/svg+xml;charset-utf-16' })); - } - } catch (e) { - // Ignore - } - return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg); - }, - // Download contents by dataURL/blob - download = function (dataURL, extension) { - var a = doc.createElement('a'), - filename = (options.filename || 'chart') + '.' + extension, - windowRef; - - // IE specific blob implementation - if (nav.msSaveOrOpenBlob) { - nav.msSaveOrOpenBlob(dataURL, filename); - return; - } - - // Try HTML5 download attr if supported - if (a.download !== undefined) { - a.href = dataURL; - a.download = filename; // HTML5 download attribute - a.target = '_blank'; - doc.body.appendChild(a); - a.click(); - doc.body.removeChild(a); - } else { - // No download attr, just opening data URI - try { - windowRef = win.open(dataURL, 'chart'); - if (windowRef === undefined || windowRef === null) { - throw 1; - } - } catch (e) { - // window.open failed, trying location.href - win.location.href = dataURL; - } - } - }, - // Get data URL to an image of the chart and call download on it - initiateDownload = function () { - var svgurl, - blob, - svg = chart.sanitizeSVG(chartCopyContainer.innerHTML); // SVG of chart copy - - // Initiate download depending on file type - if (options && options.type === 'image/svg+xml') { - // SVG download. In this case, we want to use Microsoft specific Blob if available - try { - if (nav.msSaveOrOpenBlob) { - blob = new MSBlobBuilder(); - blob.append(svg); - svgurl = blob.getBlob('image/svg+xml'); - } else { - svgurl = svgToDataUrl(svg); - } - download(svgurl, 'svg'); - } catch (e) { - fallbackToExportServer(); - } - } else { - // PNG download - create bitmap from SVG - - // First, try to get PNG by rendering on canvas - svgurl = svgToDataUrl(svg); - imageToDataUrl(svgurl, { /* args */ }, function (imageURL) { - // Success - try { - download(imageURL, 'png'); - } catch (e) { - fallbackToExportServer(); - } - }, function () { - // Failed due to tainted canvas - // Create new and untainted canvas - var canvas = doc.createElement('canvas'), - ctx = canvas.getContext('2d'), - imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, - imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, - downloadWithCanVG = function () { - ctx.drawSvg(svg, 0, 0, imageWidth, imageHeight); - try { - download(nav.msSaveOrOpenBlob ? canvas.msToBlob() : canvas.toDataURL('image/png'), 'png'); - } catch (e) { - fallbackToExportServer(); - } - }; - - canvas.width = imageWidth; - canvas.height = imageHeight; - if (win.canvg) { - // Use preloaded canvg - downloadWithCanVG(); - } else { - // Must load canVG first - chart.showLoading(); - getScript(Highcharts.getOptions().global.canvasToolsURL, function () { - chart.hideLoading(); - downloadWithCanVG(); - }); - } - }, - // No canvas support - fallbackToExportServer, - // Failed to load image - fallbackToExportServer, - // Finally - function () { - try { - domurl.revokeObjectURL(svgurl); - } catch (e) { - // Ignore - } - }); - } - }, - // Success handler, we converted image to base64! - embeddedSuccess = function (imageURL, callbackArgs) { - ++imagesEmbedded; - - // Change image href in chart copy - callbackArgs.imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageURL); - - // Start download when done with the last image - if (imagesEmbedded === images.length) { - initiateDownload(); - } - }; - - // Hook into getSVG to get a copy of the chart copy's container - Highcharts.wrap(Highcharts.Chart.prototype, 'getChartHTML', function (proceed) { - chartCopyContainer = this.container.cloneNode(true); - return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - }); - - // Trigger hook to get chart copy - chart.getSVGForExport(options, chartOptions); - images = chartCopyContainer.getElementsByTagName('image'); - - try { - // If there are no images to embed, just go ahead and start the download process - if (!images.length) { - initiateDownload(); - } - - // Go through the images we want to embed - for (i = 0, l = images.length; i < l; ++i) { - el = images[i]; - imageToDataUrl(el.getAttributeNS('http://www.w3.org/1999/xlink', 'href'), { imageElement: el }, - embeddedSuccess, - // Tainted canvas - fallbackToExportServer, - // No canvas support - fallbackToExportServer, - // Failed to load source - fallbackToExportServer - ); - } - } catch (e) { - fallbackToExportServer(); - } - }; - - // Extend the default options to use the local exporter logic - Highcharts.getOptions().exporting.buttons.contextButton.menuItems = [{ - textKey: 'printChart', - onclick: function () { - this.print(); - } - }, { - separator: true - }, { - textKey: 'downloadPNG', - onclick: function () { - this.exportChartLocal(); - } - }, { - textKey: 'downloadSVG', - onclick: function () { - this.exportChartLocal({ - type: 'image/svg+xml' - }); - } - }]; - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/solid-gauge.js b/platforms/browser/www/lib/highcharts/modules/solid-gauge.js deleted file mode 100644 index 6ef652e8..00000000 --- a/platforms/browser/www/lib/highcharts/modules/solid-gauge.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - Solid angular gauge module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(a){typeof module==="object"&&module.exports?module.exports=a:a(Highcharts)})(function(a){var q=a.getOptions().plotOptions,r=a.pInt,s=a.pick,k=a.each,l;q.solidgauge=a.merge(q.gauge,{colorByPoint:!0});l={initDataClasses:function(b){var d=this,i=this.chart,c,g=0,e=this.options;this.dataClasses=c=[];k(b.dataClasses,function(f,h){var p,f=a.merge(f);c.push(f);if(!f.color)e.dataClassColor==="category"?(p=i.options.colors,f.color=p[g++],g===p.length&&(g=0)):f.color=d.tweenColors(a.Color(e.minColor), -a.Color(e.maxColor),h/(b.dataClasses.length-1))})},initStops:function(b){this.stops=b.stops||[[0,this.options.minColor],[1,this.options.maxColor]];k(this.stops,function(b){b.color=a.Color(b[1])})},toColor:function(b,d){var a,c=this.stops,g,e=this.dataClasses,f,h;if(e)for(h=e.length;h--;){if(f=e[h],g=f.from,c=f.to,(g===void 0||b>=g)&&(c===void 0||b<=c)){a=f.color;if(d)d.dataClass=h;break}}else{this.isLog&&(b=this.val2lin(b));a=1-(this.max-b)/(this.max-this.min);for(h=c.length;h--;)if(a>c[h][0])break; -g=c[h]||c[h+1];c=c[h+1]||g;a=1-(c[0]-a)/(c[0]-g[0]||1);a=this.tweenColors(g.color,c.color,a)}return a},tweenColors:function(b,a,i){var c;!a.rgba.length||!b.rgba.length?b=a.input||"none":(b=b.rgba,a=a.rgba,c=a[3]!==1||b[3]!==1,b=(c?"rgba(":"rgb(")+Math.round(a[0]+(b[0]-a[0])*(1-i))+","+Math.round(a[1]+(b[1]-a[1])*(1-i))+","+Math.round(a[2]+(b[2]-a[2])*(1-i))+(c?","+(a[3]+(b[3]-a[3])*(1-i)):"")+")");return b}};k(["fill","stroke"],function(b){a.Fx.prototype[b+"Setter"]=function(){this.elem.attr(b,l.tweenColors(a.Color(this.start), -a.Color(this.end),this.pos))}});a.seriesTypes.solidgauge=a.extendClass(a.seriesTypes.gauge,{type:"solidgauge",pointAttrToOptions:{},bindAxes:function(){var b;a.seriesTypes.gauge.prototype.bindAxes.call(this);b=this.yAxis;a.extend(b,l);b.options.dataClasses&&b.initDataClasses(b.options);b.initStops(b.options)},drawPoints:function(){var b=this,d=b.yAxis,i=d.center,c=b.options,g=b.chart.renderer,e=c.overshoot,f=e&&typeof e==="number"?e/180*Math.PI:0;a.each(b.points,function(a){var e=a.graphic,j=d.startAngleRad+ -d.translate(a.y,null,null,null,!0),k=r(s(a.options.radius,c.radius,100))*i[2]/200,m=r(s(a.options.innerRadius,c.innerRadius,60))*i[2]/200,n=d.toColor(a.y,a),o=Math.min(d.startAngleRad,d.endAngleRad),l=Math.max(d.startAngleRad,d.endAngleRad);n==="none"&&(n=a.color||b.color||"none");if(n!=="none")a.color=n;j=Math.max(o-f,Math.min(l+f,j));c.wrap===!1&&(j=Math.max(o,Math.min(l,j)));o=Math.min(j,d.startAngleRad);j=Math.max(j,d.startAngleRad);j-o>2*Math.PI&&(j=o+2*Math.PI);a.shapeArgs=m={x:i[0],y:i[1], -r:k,innerR:m,start:o,end:j,fill:n};a.startR=k;if(e){if(a=m.d,e.animate(m),a)m.d=a}else a.graphic=g.arc(m).attr({stroke:c.borderColor||"none","stroke-width":c.borderWidth||0,fill:n,"sweep-flag":0}).add(b.group)})},animate:function(b){if(!b)this.startAngleRad=this.yAxis.startAngleRad,a.seriesTypes.pie.prototype.animate.call(this,b)}})}); diff --git a/platforms/browser/www/lib/highcharts/modules/solid-gauge.src.js b/platforms/browser/www/lib/highcharts/modules/solid-gauge.src.js deleted file mode 100644 index faa5c661..00000000 --- a/platforms/browser/www/lib/highcharts/modules/solid-gauge.src.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * Solid angular gauge module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - 'use strict'; - - var defaultPlotOptions = H.getOptions().plotOptions, - pInt = H.pInt, - pick = H.pick, - each = H.each, - colorAxisMethods, - UNDEFINED; - - // The default options - defaultPlotOptions.solidgauge = H.merge(defaultPlotOptions.gauge, { - colorByPoint: true - }); - - - // These methods are defined in the ColorAxis object, and copied here. - // If we implement an AMD system we should make ColorAxis a dependency. - colorAxisMethods = { - - - initDataClasses: function (userOptions) { - var axis = this, - chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options; - this.dataClasses = dataClasses = []; - - each(userOptions.dataClasses, function (dataClass, i) { - var colors; - - dataClass = H.merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = axis.tweenColors(H.Color(options.minColor), H.Color(options.maxColor), i / (userOptions.dataClasses.length - 1)); - } - } - }); - }, - - initStops: function (userOptions) { - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function (stop) { - stop.color = H.Color(stop[1]); - }); - }, - /** - * Translate from a value to a color - */ - toColor: function (value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / (this.max - this.min)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = this.tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. - */ - tweenColors: function (from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - } - }; - - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function (prop) { - H.Fx.prototype[prop + 'Setter'] = function () { - this.elem.attr(prop, colorAxisMethods.tweenColors(H.Color(this.start), H.Color(this.end), this.pos)); - }; - }); - - // The series prototype - H.seriesTypes.solidgauge = H.extendClass(H.seriesTypes.gauge, { - type: 'solidgauge', - pointAttrToOptions: {}, // #4301, don't inherit line marker's attribs - bindAxes: function () { - var axis; - H.seriesTypes.gauge.prototype.bindAxes.call(this); - - axis = this.yAxis; - H.extend(axis, colorAxisMethods); - - // Prepare data classes - if (axis.options.dataClasses) { - axis.initDataClasses(axis.options); - } - axis.initStops(axis.options); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - var series = this, - yAxis = series.yAxis, - center = yAxis.center, - options = series.options, - renderer = series.chart.renderer, - overshoot = options.overshoot, - overshootVal = overshoot && typeof overshoot === 'number' ? overshoot / 180 * Math.PI : 0; - - H.each(series.points, function (point) { - var graphic = point.graphic, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true), - radius = (pInt(pick(point.options.radius, options.radius, 100)) * center[2]) / 200, - innerRadius = (pInt(pick(point.options.innerRadius, options.innerRadius, 60)) * center[2]) / 200, - shapeArgs, - d, - toColor = yAxis.toColor(point.y, point), - axisMinAngle = Math.min(yAxis.startAngleRad, yAxis.endAngleRad), - axisMaxAngle = Math.max(yAxis.startAngleRad, yAxis.endAngleRad), - minAngle, - maxAngle; - - if (toColor === 'none') { // #3708 - toColor = point.color || series.color || 'none'; - } - if (toColor !== 'none') { - point.color = toColor; - } - - // Handle overshoot and clipping to axis max/min - rotation = Math.max(axisMinAngle - overshootVal, Math.min(axisMaxAngle + overshootVal, rotation)); - - // Handle the wrap option - if (options.wrap === false) { - rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation)); - } - - minAngle = Math.min(rotation, yAxis.startAngleRad); - maxAngle = Math.max(rotation, yAxis.startAngleRad); - - if (maxAngle - minAngle > 2 * Math.PI) { - maxAngle = minAngle + 2 * Math.PI; - } - - point.shapeArgs = shapeArgs = { - x: center[0], - y: center[1], - r: radius, - innerR: innerRadius, - start: minAngle, - end: maxAngle, - fill: toColor - }; - point.startR = radius; // For PieSeries.animate - - if (graphic) { - d = shapeArgs.d; - graphic.animate(shapeArgs); - if (d) { - shapeArgs.d = d; // animate alters it - } - } else { - point.graphic = renderer.arc(shapeArgs) - .attr({ - stroke: options.borderColor || 'none', - 'stroke-width': options.borderWidth || 0, - fill: toColor, - 'sweep-flag': 0 - }) - .add(series.group); - } - }); - }, - - /** - * Extend the pie slice animation by animating from start angle and up - */ - animate: function (init) { - - if (!init) { - this.startAngleRad = this.yAxis.startAngleRad; - H.seriesTypes.pie.prototype.animate.call(this, init); - } - } - }); - -})); diff --git a/platforms/browser/www/lib/highcharts/modules/treemap.js b/platforms/browser/www/lib/highcharts/modules/treemap.js deleted file mode 100644 index f9543544..00000000 --- a/platforms/browser/www/lib/highcharts/modules/treemap.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Highcharts JS v4.2.1 (2015-12-21) - - (c) 2014 Highsoft AS - Authors: Jon Arild Nygard / Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(f){typeof module==="object"&&module.exports?module.exports=f:f(Highcharts)})(function(f){var j=f.seriesTypes,A=f.map,o=f.merge,t=f.extend,u=f.extendClass,v=f.getOptions().plotOptions,w=function(){},k=f.each,s=f.grep,i=f.pick,m=f.Series,B=f.stableSort,x=f.Color,C=function(a,b,c){var d,c=c||this;for(d in a)a.hasOwnProperty(d)&&b.call(c,a[d],d,a)},y=function(a,b,c,d){d=d||this;a=a||[];k(a,function(e,g){c=b.call(d,c,e,g,a)});return c},r=function(a,b,c){c=c||this;a=b.call(c,a);a!==!1&&r(a,b, -c)};v.treemap=o(v.scatter,{showInLegend:!1,marker:!1,borderColor:"#E0E0E0",borderWidth:1,dataLabels:{enabled:!0,defer:!1,verticalAlign:"middle",formatter:function(){return this.point.name||this.point.id},inside:!0},tooltip:{headerFormat:"",pointFormat:"<b>{point.name}</b>: {point.node.val}</b><br/>"},layoutAlgorithm:"sliceAndDice",layoutStartingDirection:"vertical",alternateStartingDirection:!1,levelIsConstant:!0,states:{hover:{borderColor:"#A0A0A0",brightness:j.heatmap?0:0.1,shadow:!1}},drillUpButton:{position:{align:"right", -x:-10,y:10}}});j.treemap=u(j.scatter,o({pointAttrToOptions:{},pointArrayMap:["value"],axisTypes:j.heatmap?["xAxis","yAxis","colorAxis"]:["xAxis","yAxis"],optionalAxis:"colorAxis",getSymbol:w,parallelArrays:["x","y","value","colorValue"],colorKey:"colorValue",translateColors:j.heatmap&&j.heatmap.prototype.translateColors},{type:"treemap",trackerGroups:["group","dataLabelsGroup"],pointClass:u(f.Point,{setVisible:j.pie.prototype.pointClass.prototype.setVisible}),getListOfParents:function(a,b){var c= -y(a,function(a,c,b){c=i(c.parent,"");a[c]===void 0&&(a[c]=[]);a[c].push(b);return a},{});C(c,function(a,c,g){c!==""&&f.inArray(c,b)===-1&&(k(a,function(a){g[""].push(a)}),delete g[c])});return c},getTree:function(){var a,b=this;a=A(this.data,function(a){return a.id});a=b.getListOfParents(this.data,a);b.nodeMap=[];a=b.buildNode("",-1,0,a,null);r(this.nodeMap[this.rootNode],function(a){var d=!1,e=a.parent;a.visible=!0;if(e||e==="")d=b.nodeMap[e];return d});r(this.nodeMap[this.rootNode].children,function(a){var b= -!1;k(a,function(a){a.visible=!0;a.children.length&&(b=(b||[]).concat(a.children))});return b});this.setTreeValues(a);return a},init:function(a,b){m.prototype.init.call(this,a,b);this.options.allowDrillToNode&&this.drillTo()},buildNode:function(a,b,c,d,e){var g=this,h=[],z=g.points[b],q;k(d[a]||[],function(b){q=g.buildNode(g.points[b].id,b,c+1,d,a);h.push(q)});b={id:a,i:b,children:h,level:c,parent:e,visible:!1};g.nodeMap[b.id]=b;if(z)z.node=b;return b},setTreeValues:function(a){var b=this,c=b.options, -d=0,e=[],g,h=b.points[a.i];k(a.children,function(a){a=b.setTreeValues(a);e.push(a);a.ignore?r(a.children,function(a){var c=!1;k(a,function(a){t(a,{ignore:!0,isLeaf:!1,visible:!1});a.children.length&&(c=(c||[]).concat(a.children))});return c}):d+=a.val});B(e,function(a,c){return a.sortIndex-c.sortIndex});g=i(h&&h.value,d);t(a,{children:e,childrenTotal:d,ignore:!(i(h&&h.visible,!0)&&g>0),isLeaf:a.visible&&!d,levelDynamic:c.levelIsConstant?a.level:a.level-b.nodeMap[b.rootNode].level,name:i(h&&h.name, -""),sortIndex:i(h&&h.sortIndex,-g),val:g});return a},calculateChildrenAreas:function(a,b){var c=this,d=c.options,e=this.levelMap[a.levelDynamic+1],g=i(c[e&&e.layoutAlgorithm]&&e.layoutAlgorithm,d.layoutAlgorithm),h=d.alternateStartingDirection,f=[],d=s(a.children,function(a){return!a.ignore});if(e&&e.layoutStartingDirection)b.direction=e.layoutStartingDirection==="vertical"?0:1;f=c[g](b,d);k(d,function(a,d){var e=f[d];a.values=o(e,{val:a.childrenTotal,direction:h?1-b.direction:b.direction});a.pointValues= -o(e,{x:e.x/c.axisRatio,width:e.width/c.axisRatio});a.children.length&&c.calculateChildrenAreas(a,a.values)})},setPointValues:function(){var a=this.xAxis,b=this.yAxis;k(this.points,function(c){var d=c.node.pointValues,e,g,h;d?(e=Math.round(a.translate(d.x,0,0,0,1)),g=Math.round(a.translate(d.x+d.width,0,0,0,1)),h=Math.round(b.translate(d.y,0,0,0,1)),d=Math.round(b.translate(d.y+d.height,0,0,0,1)),c.shapeType="rect",c.shapeArgs={x:Math.min(e,g),y:Math.min(h,d),width:Math.abs(g-e),height:Math.abs(d- -h)},c.plotX=c.shapeArgs.x+c.shapeArgs.width/2,c.plotY=c.shapeArgs.y+c.shapeArgs.height/2):(delete c.plotX,delete c.plotY)})},setColorRecursive:function(a,b){var c=this,d,e;if(a){d=c.points[a.i];e=c.levelMap[a.levelDynamic];b=i(d&&d.options.color,e&&e.color,b);if(d)d.color=b;a.children.length&&k(a.children,function(a){c.setColorRecursive(a,b)})}},algorithmGroup:function(a,b,c,d){this.height=a;this.width=b;this.plot=d;this.startDirection=this.direction=c;this.lH=this.nH=this.lW=this.nW=this.total=0; -this.elArr=[];this.lP={total:0,lH:0,nH:0,lW:0,nW:0,nR:0,lR:0,aspectRatio:function(a,c){return Math.max(a/c,c/a)}};this.addElement=function(a){this.lP.total=this.elArr[this.elArr.length-1];this.total+=a;this.direction===0?(this.lW=this.nW,this.lP.lH=this.lP.total/this.lW,this.lP.lR=this.lP.aspectRatio(this.lW,this.lP.lH),this.nW=this.total/this.height,this.lP.nH=this.lP.total/this.nW,this.lP.nR=this.lP.aspectRatio(this.nW,this.lP.nH)):(this.lH=this.nH,this.lP.lW=this.lP.total/this.lH,this.lP.lR=this.lP.aspectRatio(this.lP.lW, -this.lH),this.nH=this.total/this.width,this.lP.nW=this.lP.total/this.nH,this.lP.nR=this.lP.aspectRatio(this.lP.nW,this.nH));this.elArr.push(a)};this.reset=function(){this.lW=this.nW=0;this.elArr=[];this.total=0}},algorithmCalcPoints:function(a,b,c,d){var e,g,h,f,q=c.lW,n=c.lH,l=c.plot,i,j=0,p=c.elArr.length-1;b?(q=c.nW,n=c.nH):i=c.elArr[c.elArr.length-1];k(c.elArr,function(a){if(b||j<p)c.direction===0?(e=l.x,g=l.y,h=q,f=a/h):(e=l.x,g=l.y,f=n,h=a/f),d.push({x:e,y:g,width:h,height:f}),c.direction=== -0?l.y+=f:l.x+=h;j+=1});c.reset();c.direction===0?c.width-=q:c.height-=n;l.y=l.parent.y+(l.parent.height-c.height);l.x=l.parent.x+(l.parent.width-c.width);if(a)c.direction=1-c.direction;b||c.addElement(i)},algorithmLowAspectRatio:function(a,b,c){var d=[],e=this,g,f={x:b.x,y:b.y,parent:b},i=0,j=c.length-1,n=new this.algorithmGroup(b.height,b.width,b.direction,f);k(c,function(c){g=b.width*b.height*(c.val/b.val);n.addElement(g);n.lP.nR>n.lP.lR&&e.algorithmCalcPoints(a,!1,n,d,f);i===j&&e.algorithmCalcPoints(a, -!0,n,d,f);i+=1});return d},algorithmFill:function(a,b,c){var d=[],e,f=b.direction,h=b.x,i=b.y,j=b.width,n=b.height,l,o,m,p;k(c,function(c){e=b.width*b.height*(c.val/b.val);l=h;o=i;f===0?(p=n,m=e/p,j-=m,h+=m):(m=j,p=e/m,n-=p,i+=p);d.push({x:l,y:o,width:m,height:p});a&&(f=1-f)});return d},strip:function(a,b){return this.algorithmLowAspectRatio(!1,a,b)},squarified:function(a,b){return this.algorithmLowAspectRatio(!0,a,b)},sliceAndDice:function(a,b){return this.algorithmFill(!0,a,b)},stripes:function(a, -b){return this.algorithmFill(!1,a,b)},translate:function(){var a,b;m.prototype.translate.call(this);this.rootNode=i(this.options.rootId,"");this.levelMap=y(this.options.levels,function(a,b){a[b.level]=b;return a},{});b=this.tree=this.getTree();this.axisRatio=this.xAxis.len/this.yAxis.len;this.nodeMap[""].pointValues=a={x:0,y:0,width:100,height:100};this.nodeMap[""].values=a=o(a,{width:a.width*this.axisRatio,direction:this.options.layoutStartingDirection==="vertical"?0:1,val:b.val});this.calculateChildrenAreas(b, -a);this.colorAxis?this.translateColors():this.options.colorByPoint||this.setColorRecursive(this.tree,void 0);b=this.nodeMap[this.rootNode].pointValues;this.xAxis.setExtremes(b.x,b.x+b.width,!1);this.yAxis.setExtremes(b.y,b.y+b.height,!1);this.xAxis.setScale();this.yAxis.setScale();this.setPointValues()},drawDataLabels:function(){var a=this,b=s(a.points,function(a){return a.node.visible}),c,d;k(b,function(b){d=a.levelMap[b.node.levelDynamic];c={style:{}};if(!b.node.isLeaf)c.enabled=!1;if(d&&d.dataLabels)c= -o(c,d.dataLabels),a._hasPointLabels=!0;if(b.shapeArgs)c.style.width=b.shapeArgs.width;b.dlOptions=o(c,b.options.dataLabels)});m.prototype.drawDataLabels.call(this)},alignDataLabel:j.column.prototype.alignDataLabel,pointAttribs:function(a,b){var c=this.levelMap[a.node.levelDynamic]||{},d=this.options,e=b&&d.states[b]||{},c={stroke:a.borderColor||c.borderColor||e.borderColor||d.borderColor,"stroke-width":i(a.borderWidth,c.borderWidth,e.borderWidth,d.borderWidth),dashstyle:a.borderDashStyle||c.borderDashStyle|| -e.borderDashStyle||d.borderDashStyle,fill:a.color||this.color,zIndex:b==="hover"?1:0};if(a.node.level<=this.nodeMap[this.rootNode].level)c.fill="none",c["stroke-width"]=0;else if(a.node.isLeaf){if(b)c.fill=x(c.fill).brighten(e.brightness).get()}else c.fill=i(d.interactByLeaf,!d.allowDrillToNode)?"none":x(c.fill).setOpacity(b==="hover"?0.75:0.15).get();return c},drawPoints:function(){var a=this,b=s(a.points,function(a){return a.node.visible});k(b,function(c){var b="levelGroup-"+c.node.levelDynamic; -a[b]||(a[b]=a.chart.renderer.g(b).attr({zIndex:1E3-c.node.levelDynamic}).add(a.group));c.group=a[b];c.pointAttr={"":a.pointAttribs(c),hover:a.pointAttribs(c,"hover"),select:{}}});j.column.prototype.drawPoints.call(this);a.options.allowDrillToNode&&k(b,function(b){var d;if(b.graphic)d=b.drillId=a.options.interactByLeaf?a.drillToByLeaf(b):a.drillToByGroup(b),b.graphic.css({cursor:d?"pointer":"default"})})},drillTo:function(){var a=this;f.addEvent(a,"click",function(b){var b=b.point,c=b.drillId,d;c&& -(d=a.nodeMap[a.rootNode].name||a.rootNode,b.setState(""),a.drillToNode(c),a.showDrillUpButton(d))})},drillToByGroup:function(a){var b=!1;if(a.node.level-this.nodeMap[this.rootNode].level===1&&!a.node.isLeaf)b=a.id;return b},drillToByLeaf:function(a){var b=!1;if(a.node.parent!==this.rootNode&&a.node.isLeaf)for(a=a.node;!b;)if(a=this.nodeMap[a.parent],a.parent===this.rootNode)b=a.id;return b},drillUp:function(){var a=null;this.rootNode&&(a=this.nodeMap[this.rootNode],a=a.parent!==null?this.nodeMap[a.parent]: -this.nodeMap[""]);if(a!==null)this.drillToNode(a.id),a.id===""?this.drillUpButton=this.drillUpButton.destroy():(a=this.nodeMap[a.parent],this.showDrillUpButton(a.name||a.id))},drillToNode:function(a){this.options.rootId=a;this.isDirty=!0;this.chart.redraw()},showDrillUpButton:function(a){var b=this,a=a||"< Back",c=b.options.drillUpButton,d,e;if(c.text)a=c.text;this.drillUpButton?this.drillUpButton.attr({text:a}).align():(e=(d=c.theme)&&d.states,this.drillUpButton=this.chart.renderer.button(a,null, -null,function(){b.drillUp()},d,e&&e.hover,e&&e.select).attr({align:c.position.align,zIndex:9}).add().align(c.position,!1,c.relativeTo||"plotBox"))},buildKDTree:w,drawLegendSymbol:f.LegendSymbolMixin.drawRectangle,getExtremes:function(){m.prototype.getExtremes.call(this,this.colorValueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;m.prototype.getExtremes.call(this)},getExtremesFromAll:!0,bindAxes:function(){var a={endOnTick:!1,gridLineWidth:0,lineWidth:0,min:0,dataMin:0,minPadding:0,max:100, -dataMax:100,maxPadding:0,startOnTick:!1,title:null,tickPositions:[]};m.prototype.bindAxes.call(this);f.extend(this.yAxis.options,a);f.extend(this.xAxis.options,a)}}))}); diff --git a/platforms/browser/www/lib/highcharts/modules/treemap.src.js b/platforms/browser/www/lib/highcharts/modules/treemap.src.js deleted file mode 100644 index a93f830c..00000000 --- a/platforms/browser/www/lib/highcharts/modules/treemap.src.js +++ /dev/null @@ -1,868 +0,0 @@ -/** - * @license Highcharts JS v4.2.1 (2015-12-21) - * - * (c) 2014 Highsoft AS - * Authors: Jon Arild Nygard / Oystein Moseng - * - * License: www.highcharts.com/license - */ - -(function (factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function (H) { - var seriesTypes = H.seriesTypes, - map = H.map, - merge = H.merge, - extend = H.extend, - extendClass = H.extendClass, - defaultOptions = H.getOptions(), - plotOptions = defaultOptions.plotOptions, - noop = function () { - }, - each = H.each, - grep = H.grep, - pick = H.pick, - Series = H.Series, - stableSort = H.stableSort, - Color = H.Color, - eachObject = function (list, func, context) { - var key; - context = context || this; - for (key in list) { - if (list.hasOwnProperty(key)) { - func.call(context, list[key], key, list); - } - } - }, - reduce = function (arr, func, previous, context) { - context = context || this; - arr = arr || []; // @note should each be able to handle empty values automatically? - each(arr, function (current, i) { - previous = func.call(context, previous, current, i, arr); - }); - return previous; - }, - // @todo find correct name for this function. - recursive = function (item, func, context) { - var next; - context = context || this; - next = func.call(context, item); - if (next !== false) { - recursive(next, func, context); - } - }; - - // Define default options - plotOptions.treemap = merge(plotOptions.scatter, { - showInLegend: false, - marker: false, - borderColor: '#E0E0E0', - borderWidth: 1, - dataLabels: { - enabled: true, - defer: false, - verticalAlign: 'middle', - formatter: function () { // #2945 - return this.point.name || this.point.id; - }, - inside: true - }, - tooltip: { - headerFormat: '', - pointFormat: '<b>{point.name}</b>: {point.node.val}</b><br/>' - }, - layoutAlgorithm: 'sliceAndDice', - layoutStartingDirection: 'vertical', - alternateStartingDirection: false, - levelIsConstant: true, - states: { - hover: { - borderColor: '#A0A0A0', - brightness: seriesTypes.heatmap ? 0 : 0.1, - shadow: false - } - }, - drillUpButton: { - position: { - align: 'right', - x: -10, - y: 10 - } - } - }); - - // Stolen from heatmap - var colorSeriesMixin = { - // mapping between SVG attributes and the corresponding options - pointAttrToOptions: {}, - pointArrayMap: ['value'], - axisTypes: seriesTypes.heatmap ? ['xAxis', 'yAxis', 'colorAxis'] : ['xAxis', 'yAxis'], - optionalAxis: 'colorAxis', - getSymbol: noop, - parallelArrays: ['x', 'y', 'value', 'colorValue'], - colorKey: 'colorValue', // Point color option key - translateColors: seriesTypes.heatmap && seriesTypes.heatmap.prototype.translateColors - }; - - // The Treemap series type - seriesTypes.treemap = extendClass(seriesTypes.scatter, merge(colorSeriesMixin, { - type: 'treemap', - trackerGroups: ['group', 'dataLabelsGroup'], - pointClass: extendClass(H.Point, { - setVisible: seriesTypes.pie.prototype.pointClass.prototype.setVisible - }), - /** - * Creates an object map from parent id to childrens index. - * @param {Array} data List of points set in options. - * @param {string} data[].parent Parent id of point. - * @param {Array} ids List of all point ids. - * @return {Object} Map from parent id to children index in data. - */ - getListOfParents: function (data, ids) { - var listOfParents = reduce(data, function (prev, curr, i) { - var parent = pick(curr.parent, ''); - if (prev[parent] === undefined) { - prev[parent] = []; - } - prev[parent].push(i); - return prev; - }, {}); - - // If parent does not exist, hoist parent to root of tree. - eachObject(listOfParents, function (children, parent, list) { - if ((parent !== '') && (H.inArray(parent, ids) === -1)) { - each(children, function (child) { - list[''].push(child); - }); - delete list[parent]; - } - }); - return listOfParents; - }, - /** - * Creates a tree structured object from the series points - */ - getTree: function () { - var tree, - series = this, - allIds = map(this.data, function (d) { - return d.id; - }), - parentList = series.getListOfParents(this.data, allIds); - - series.nodeMap = []; - tree = series.buildNode('', -1, 0, parentList, null); - recursive(this.nodeMap[this.rootNode], function (node) { - var next = false, - p = node.parent; - node.visible = true; - if (p || p === '') { - next = series.nodeMap[p]; - } - return next; - }); - recursive(this.nodeMap[this.rootNode].children, function (children) { - var next = false; - each(children, function (child) { - child.visible = true; - if (child.children.length) { - next = (next || []).concat(child.children); - } - }); - return next; - }); - this.setTreeValues(tree); - return tree; - }, - init: function (chart, options) { - var series = this; - Series.prototype.init.call(series, chart, options); - if (series.options.allowDrillToNode) { - series.drillTo(); - } - }, - buildNode: function (id, i, level, list, parent) { - var series = this, - children = [], - point = series.points[i], - node, - child; - - // Actions - each((list[id] || []), function (i) { - child = series.buildNode(series.points[i].id, i, (level + 1), list, id); - children.push(child); - }); - node = { - id: id, - i: i, - children: children, - level: level, - parent: parent, - visible: false // @todo move this to better location - }; - series.nodeMap[node.id] = node; - if (point) { - point.node = node; - } - return node; - }, - setTreeValues: function (tree) { - var series = this, - options = series.options, - childrenTotal = 0, - children = [], - val, - point = series.points[tree.i]; - - // First give the children some values - each(tree.children, function (child) { - child = series.setTreeValues(child); - children.push(child); - - if (!child.ignore) { - childrenTotal += child.val; - } else { - // @todo Add predicate to avoid looping already ignored children - recursive(child.children, function (children) { - var next = false; - each(children, function (node) { - extend(node, { - ignore: true, - isLeaf: false, - visible: false - }); - if (node.children.length) { - next = (next || []).concat(node.children); - } - }); - return next; - }); - } - }); - // Sort the children - stableSort(children, function (a, b) { - return a.sortIndex - b.sortIndex; - }); - // Set the values - val = pick(point && point.value, childrenTotal); - extend(tree, { - children: children, - childrenTotal: childrenTotal, - // Ignore this node if point is not visible - ignore: !(pick(point && point.visible, true) && (val > 0)), - isLeaf: tree.visible && !childrenTotal, - levelDynamic: (options.levelIsConstant ? tree.level : (tree.level - series.nodeMap[series.rootNode].level)), - name: pick(point && point.name, ''), - sortIndex: pick(point && point.sortIndex, -val), - val: val - }); - return tree; - }, - /** - * Recursive function which calculates the area for all children of a node. - * @param {Object} node The node which is parent to the children. - * @param {Object} area The rectangular area of the parent. - */ - calculateChildrenAreas: function (parent, area) { - var series = this, - options = series.options, - level = this.levelMap[parent.levelDynamic + 1], - algorithm = pick((series[level && level.layoutAlgorithm] && level.layoutAlgorithm), options.layoutAlgorithm), - alternate = options.alternateStartingDirection, - childrenValues = [], - children; - - // Collect all children which should be included - children = grep(parent.children, function (n) { - return !n.ignore; - }); - - if (level && level.layoutStartingDirection) { - area.direction = level.layoutStartingDirection === 'vertical' ? 0 : 1; - } - childrenValues = series[algorithm](area, children); - each(children, function (child, index) { - var values = childrenValues[index]; - child.values = merge(values, { - val: child.childrenTotal, - direction: (alternate ? 1 - area.direction : area.direction) - }); - child.pointValues = merge(values, { - x: (values.x / series.axisRatio), - width: (values.width / series.axisRatio) - }); - // If node has children, then call method recursively - if (child.children.length) { - series.calculateChildrenAreas(child, child.values); - } - }); - }, - setPointValues: function () { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis; - each(series.points, function (point) { - var node = point.node, - values = node.pointValues, - x1, - x2, - y1, - y2; - // Points which is ignored, have no values. - if (values) { - x1 = Math.round(xAxis.translate(values.x, 0, 0, 0, 1)); - x2 = Math.round(xAxis.translate(values.x + values.width, 0, 0, 0, 1)); - y1 = Math.round(yAxis.translate(values.y, 0, 0, 0, 1)); - y2 = Math.round(yAxis.translate(values.y + values.height, 0, 0, 0, 1)); - // Set point values - point.shapeType = 'rect'; - point.shapeArgs = { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - width: Math.abs(x2 - x1), - height: Math.abs(y2 - y1) - }; - point.plotX = point.shapeArgs.x + (point.shapeArgs.width / 2); - point.plotY = point.shapeArgs.y + (point.shapeArgs.height / 2); - } else { - // Reset visibility - delete point.plotX; - delete point.plotY; - } - }); - }, - setColorRecursive: function (node, color) { - var series = this, - point, - level; - if (node) { - point = series.points[node.i]; - level = series.levelMap[node.levelDynamic]; - // Select either point color, level color or inherited color. - color = pick(point && point.options.color, level && level.color, color); - if (point) { - point.color = color; - } - // Do it all again with the children - if (node.children.length) { - each(node.children, function (child) { - series.setColorRecursive(child, color); - }); - } - } - }, - algorithmGroup: function (h, w, d, p) { - this.height = h; - this.width = w; - this.plot = p; - this.direction = d; - this.startDirection = d; - this.total = 0; - this.nW = 0; - this.lW = 0; - this.nH = 0; - this.lH = 0; - this.elArr = []; - this.lP = { - total: 0, - lH: 0, - nH: 0, - lW: 0, - nW: 0, - nR: 0, - lR: 0, - aspectRatio: function (w, h) { - return Math.max((w / h), (h / w)); - } - }; - this.addElement = function (el) { - this.lP.total = this.elArr[this.elArr.length - 1]; - this.total = this.total + el; - if (this.direction === 0) { - // Calculate last point old aspect ratio - this.lW = this.nW; - this.lP.lH = this.lP.total / this.lW; - this.lP.lR = this.lP.aspectRatio(this.lW, this.lP.lH); - // Calculate last point new aspect ratio - this.nW = this.total / this.height; - this.lP.nH = this.lP.total / this.nW; - this.lP.nR = this.lP.aspectRatio(this.nW, this.lP.nH); - } else { - // Calculate last point old aspect ratio - this.lH = this.nH; - this.lP.lW = this.lP.total / this.lH; - this.lP.lR = this.lP.aspectRatio(this.lP.lW, this.lH); - // Calculate last point new aspect ratio - this.nH = this.total / this.width; - this.lP.nW = this.lP.total / this.nH; - this.lP.nR = this.lP.aspectRatio(this.lP.nW, this.nH); - } - this.elArr.push(el); - }; - this.reset = function () { - this.nW = 0; - this.lW = 0; - this.elArr = []; - this.total = 0; - }; - }, - algorithmCalcPoints: function (directionChange, last, group, childrenArea) { - var pX, - pY, - pW, - pH, - gW = group.lW, - gH = group.lH, - plot = group.plot, - keep, - i = 0, - end = group.elArr.length - 1; - if (last) { - gW = group.nW; - gH = group.nH; - } else { - keep = group.elArr[group.elArr.length - 1]; - } - each(group.elArr, function (p) { - if (last || (i < end)) { - if (group.direction === 0) { - pX = plot.x; - pY = plot.y; - pW = gW; - pH = p / pW; - } else { - pX = plot.x; - pY = plot.y; - pH = gH; - pW = p / pH; - } - childrenArea.push({ - x: pX, - y: pY, - width: pW, - height: pH - }); - if (group.direction === 0) { - plot.y = plot.y + pH; - } else { - plot.x = plot.x + pW; - } - } - i = i + 1; - }); - // Reset variables - group.reset(); - if (group.direction === 0) { - group.width = group.width - gW; - } else { - group.height = group.height - gH; - } - plot.y = plot.parent.y + (plot.parent.height - group.height); - plot.x = plot.parent.x + (plot.parent.width - group.width); - if (directionChange) { - group.direction = 1 - group.direction; - } - // If not last, then add uncalculated element - if (!last) { - group.addElement(keep); - } - }, - algorithmLowAspectRatio: function (directionChange, parent, children) { - var childrenArea = [], - series = this, - pTot, - plot = { - x: parent.x, - y: parent.y, - parent: parent - }, - direction = parent.direction, - i = 0, - end = children.length - 1, - group = new this.algorithmGroup(parent.height, parent.width, direction, plot); - // Loop through and calculate all areas - each(children, function (child) { - pTot = (parent.width * parent.height) * (child.val / parent.val); - group.addElement(pTot); - if (group.lP.nR > group.lP.lR) { - series.algorithmCalcPoints(directionChange, false, group, childrenArea, plot); - } - // If last child, then calculate all remaining areas - if (i === end) { - series.algorithmCalcPoints(directionChange, true, group, childrenArea, plot); - } - i = i + 1; - }); - return childrenArea; - }, - algorithmFill: function (directionChange, parent, children) { - var childrenArea = [], - pTot, - direction = parent.direction, - x = parent.x, - y = parent.y, - width = parent.width, - height = parent.height, - pX, - pY, - pW, - pH; - each(children, function (child) { - pTot = (parent.width * parent.height) * (child.val / parent.val); - pX = x; - pY = y; - if (direction === 0) { - pH = height; - pW = pTot / pH; - width = width - pW; - x = x + pW; - } else { - pW = width; - pH = pTot / pW; - height = height - pH; - y = y + pH; - } - childrenArea.push({ - x: pX, - y: pY, - width: pW, - height: pH - }); - if (directionChange) { - direction = 1 - direction; - } - }); - return childrenArea; - }, - strip: function (parent, children) { - return this.algorithmLowAspectRatio(false, parent, children); - }, - squarified: function (parent, children) { - return this.algorithmLowAspectRatio(true, parent, children); - }, - sliceAndDice: function (parent, children) { - return this.algorithmFill(true, parent, children); - }, - stripes: function (parent, children) { - return this.algorithmFill(false, parent, children); - }, - translate: function () { - var pointValues, - seriesArea, - tree, - val; - - // Call prototype function - Series.prototype.translate.call(this); - - // Assign variables - this.rootNode = pick(this.options.rootId, ''); - // Create a object map from level to options - this.levelMap = reduce(this.options.levels, function (arr, item) { - arr[item.level] = item; - return arr; - }, {}); - tree = this.tree = this.getTree(); // @todo Only if series.isDirtyData is true - - // Calculate plotting values. - this.axisRatio = (this.xAxis.len / this.yAxis.len); - this.nodeMap[''].pointValues = pointValues = { x: 0, y: 0, width: 100, height: 100 }; - this.nodeMap[''].values = seriesArea = merge(pointValues, { - width: (pointValues.width * this.axisRatio), - direction: (this.options.layoutStartingDirection === 'vertical' ? 0 : 1), - val: tree.val - }); - this.calculateChildrenAreas(tree, seriesArea); - - // Logic for point colors - if (this.colorAxis) { - this.translateColors(); - } else if (!this.options.colorByPoint) { - this.setColorRecursive(this.tree, undefined); - } - - // Update axis extremes according to the root node. - val = this.nodeMap[this.rootNode].pointValues; - this.xAxis.setExtremes(val.x, val.x + val.width, false); - this.yAxis.setExtremes(val.y, val.y + val.height, false); - this.xAxis.setScale(); - this.yAxis.setScale(); - - // Assign values to points. - this.setPointValues(); - }, - /** - * Extend drawDataLabels with logic to handle custom options related to the treemap series: - * - Points which is not a leaf node, has dataLabels disabled by default. - * - Options set on series.levels is merged in. - * - Width of the dataLabel is set to match the width of the point shape. - */ - drawDataLabels: function () { - var series = this, - points = grep(series.points, function (n) { - return n.node.visible; - }), - options, - level; - each(points, function (point) { - level = series.levelMap[point.node.levelDynamic]; - // Set options to new object to avoid problems with scope - options = { style: {} }; - - // If not a leaf, then label should be disabled as default - if (!point.node.isLeaf) { - options.enabled = false; - } - - // If options for level exists, include them as well - if (level && level.dataLabels) { - options = merge(options, level.dataLabels); - series._hasPointLabels = true; - } - - // Set dataLabel width to the width of the point shape. - if (point.shapeArgs) { - options.style.width = point.shapeArgs.width; - } - - // Merge custom options with point options - point.dlOptions = merge(options, point.options.dataLabels); - }); - Series.prototype.drawDataLabels.call(this); - }, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel, - - /** - * Get presentational attributes - */ - pointAttribs: function (point, state) { - var level = this.levelMap[point.node.levelDynamic] || {}, - options = this.options, - attr, - stateOptions = (state && options.states[state]) || {}; - - // Set attributes by precedence. Point trumps level trumps series. Stroke width uses pick - // because it can be 0. - attr = { - 'stroke': point.borderColor || level.borderColor || stateOptions.borderColor || options.borderColor, - 'stroke-width': pick(point.borderWidth, level.borderWidth, stateOptions.borderWidth, options.borderWidth), - 'dashstyle': point.borderDashStyle || level.borderDashStyle || stateOptions.borderDashStyle || options.borderDashStyle, - 'fill': point.color || this.color, - 'zIndex': state === 'hover' ? 1 : 0 - }; - - if (point.node.level <= this.nodeMap[this.rootNode].level) { - // Hide levels above the current view - attr.fill = 'none'; - attr['stroke-width'] = 0; - } else if (!point.node.isLeaf) { - // If not a leaf, then remove fill - // @todo let users set the opacity - attr.fill = pick(options.interactByLeaf, !options.allowDrillToNode) ? 'none' : Color(attr.fill).setOpacity(state === 'hover' ? 0.75 : 0.15).get(); - } else if (state) { - // Brighten and hoist the hover nodes - attr.fill = Color(attr.fill).brighten(stateOptions.brightness).get(); - } - - return attr; - }, - - /** - * Extending ColumnSeries drawPoints - */ - drawPoints: function () { - var series = this, - points = grep(series.points, function (n) { - return n.node.visible; - }); - - each(points, function (point) { - var groupKey = 'levelGroup-' + point.node.levelDynamic; - if (!series[groupKey]) { - series[groupKey] = series.chart.renderer.g(groupKey) - .attr({ - zIndex: 1000 - point.node.levelDynamic // @todo Set the zIndex based upon the number of levels, instead of using 1000 - }) - .add(series.group); - } - point.group = series[groupKey]; - // Preliminary code in prepraration for HC5 that uses pointAttribs for all series - point.pointAttr = { - '': series.pointAttribs(point), - 'hover': series.pointAttribs(point, 'hover'), - 'select': {} - }; - }); - // Call standard drawPoints - seriesTypes.column.prototype.drawPoints.call(this); - - // If drillToNode is allowed, set a point cursor on clickables & add drillId to point - if (series.options.allowDrillToNode) { - each(points, function (point) { - var cursor, - drillId; - if (point.graphic) { - drillId = point.drillId = series.options.interactByLeaf ? series.drillToByLeaf(point) : series.drillToByGroup(point); - cursor = drillId ? 'pointer' : 'default'; - point.graphic.css({ cursor: cursor }); - } - }); - } - }, - /** - * Add drilling on the suitable points - */ - drillTo: function () { - var series = this; - H.addEvent(series, 'click', function (event) { - var point = event.point, - drillId = point.drillId, - drillName; - // If a drill id is returned, add click event and cursor. - if (drillId) { - drillName = series.nodeMap[series.rootNode].name || series.rootNode; - point.setState(''); // Remove hover - series.drillToNode(drillId); - series.showDrillUpButton(drillName); - } - }); - }, - /** - * Finds the drill id for a parent node. - * Returns false if point should not have a click event - * @param {Object} point - * @return {string || boolean} Drill to id or false when point should not have a click event - */ - drillToByGroup: function (point) { - var series = this, - drillId = false; - if ((point.node.level - series.nodeMap[series.rootNode].level) === 1 && !point.node.isLeaf) { - drillId = point.id; - } - return drillId; - }, - /** - * Finds the drill id for a leaf node. - * Returns false if point should not have a click event - * @param {Object} point - * @return {string || boolean} Drill to id or false when point should not have a click event - */ - drillToByLeaf: function (point) { - var series = this, - drillId = false, - nodeParent; - if ((point.node.parent !== series.rootNode) && (point.node.isLeaf)) { - nodeParent = point.node; - while (!drillId) { - nodeParent = series.nodeMap[nodeParent.parent]; - if (nodeParent.parent === series.rootNode) { - drillId = nodeParent.id; - } - } - } - return drillId; - }, - drillUp: function () { - var drillPoint = null, - node, - parent; - if (this.rootNode) { - node = this.nodeMap[this.rootNode]; - if (node.parent !== null) { - drillPoint = this.nodeMap[node.parent]; - } else { - drillPoint = this.nodeMap['']; - } - } - - if (drillPoint !== null) { - this.drillToNode(drillPoint.id); - if (drillPoint.id === '') { - this.drillUpButton = this.drillUpButton.destroy(); - } else { - parent = this.nodeMap[drillPoint.parent]; - this.showDrillUpButton((parent.name || parent.id)); - } - } - }, - drillToNode: function (id) { - this.options.rootId = id; - this.isDirty = true; // Force redraw - this.chart.redraw(); - }, - showDrillUpButton: function (name) { - var series = this, - backText = (name || '< Back'), - buttonOptions = series.options.drillUpButton, - attr, - states; - - if (buttonOptions.text) { - backText = buttonOptions.text; - } - if (!this.drillUpButton) { - attr = buttonOptions.theme; - states = attr && attr.states; - - this.drillUpButton = this.chart.renderer.button( - backText, - null, - null, - function () { - series.drillUp(); - }, - attr, - states && states.hover, - states && states.select - ) - .attr({ - align: buttonOptions.position.align, - zIndex: 9 - }) - .add() - .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); - } else { - this.drillUpButton.attr({ - text: backText - }) - .align(); - } - }, - buildKDTree: noop, - drawLegendSymbol: H.LegendSymbolMixin.drawRectangle, - getExtremes: function () { - // Get the extremes from the value data - Series.prototype.getExtremes.call(this, this.colorValueData); - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Get the extremes from the y data - Series.prototype.getExtremes.call(this); - }, - getExtremesFromAll: true, - bindAxes: function () { - var treeAxis = { - endOnTick: false, - gridLineWidth: 0, - lineWidth: 0, - min: 0, - dataMin: 0, - minPadding: 0, - max: 100, - dataMax: 100, - maxPadding: 0, - startOnTick: false, - title: null, - tickPositions: [] - }; - Series.prototype.bindAxes.call(this); - H.extend(this.yAxis.options, treeAxis); - H.extend(this.xAxis.options, treeAxis); - } - })); -})); diff --git a/platforms/browser/www/lib/highcharts/themes/dark-blue.js b/platforms/browser/www/lib/highcharts/themes/dark-blue.js deleted file mode 100644 index 7cf7138a..00000000 --- a/platforms/browser/www/lib/highcharts/themes/dark-blue.js +++ /dev/null @@ -1,254 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(48, 48, 96)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/dark-green.js b/platforms/browser/www/lib/highcharts/themes/dark-green.js deleted file mode 100644 index 4a7ad586..00000000 --- a/platforms/browser/www/lib/highcharts/themes/dark-green.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgb(48, 96, 48)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/dark-unica.js b/platforms/browser/www/lib/highcharts/themes/dark-unica.js deleted file mode 100644 index 598c061c..00000000 --- a/platforms/browser/www/lib/highcharts/themes/dark-unica.js +++ /dev/null @@ -1,213 +0,0 @@ -/** - * Dark theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Unica+One', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -Highcharts.theme = { - colors: ["#2b908f", "#90ee7e", "#f45b5b", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, '#2a2a2b'], - [1, '#3e3e40'] - ] - }, - style: { - fontFamily: "'Unica One', sans-serif" - }, - plotBorderColor: '#606063' - }, - title: { - style: { - color: '#E0E0E3', - textTransform: 'uppercase', - fontSize: '20px' - } - }, - subtitle: { - style: { - color: '#E0E0E3', - textTransform: 'uppercase' - } - }, - xAxis: { - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: '#707073', - minorGridLineColor: '#505053', - tickColor: '#707073', - title: { - style: { - color: '#A0A0A3' - - } - } - }, - yAxis: { - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: '#707073', - minorGridLineColor: '#505053', - tickColor: '#707073', - tickWidth: 1, - title: { - style: { - color: '#A0A0A3' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.85)', - style: { - color: '#F0F0F0' - } - }, - plotOptions: { - series: { - dataLabels: { - color: '#B0B0B3' - }, - marker: { - lineColor: '#333' - } - }, - boxplot: { - fillColor: '#505053' - }, - candlestick: { - lineColor: 'white' - }, - errorbar: { - color: 'white' - } - }, - legend: { - itemStyle: { - color: '#E0E0E3' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#606063' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#707073' - } - }, - - drilldown: { - activeAxisLabelStyle: { - color: '#F0F0F3' - }, - activeDataLabelStyle: { - color: '#F0F0F3' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - theme: { - fill: '#505053' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: '#505053', - stroke: '#000000', - style: { - color: '#CCC' - }, - states: { - hover: { - fill: '#707073', - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: '#000003', - stroke: '#000000', - style: { - color: 'white' - } - } - } - }, - inputBoxBorderColor: '#505053', - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(255,255,255,0.1)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - }, - xAxis: { - gridLineColor: '#505053' - } - }, - - scrollbar: { - barBackgroundColor: '#808083', - barBorderColor: '#808083', - buttonArrowColor: '#CCC', - buttonBackgroundColor: '#606063', - buttonBorderColor: '#606063', - rifleColor: '#FFF', - trackBackgroundColor: '#404043', - trackBorderColor: '#404043' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: '#505053', - dataLabelsColor: '#B0B0B3', - textColor: '#C0C0C0', - contrastTextColor: '#F0F0F3', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/gray.js b/platforms/browser/www/lib/highcharts/themes/gray.js deleted file mode 100644 index d9a40169..00000000 --- a/platforms/browser/www/lib/highcharts/themes/gray.js +++ /dev/null @@ -1,257 +0,0 @@ -/** - * Gray theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgb(96, 96, 96)'], - [1, 'rgb(16, 16, 16)'] - ] - }, - borderWidth: 0, - borderRadius: 0, - plotBackgroundColor: null, - plotShadow: false, - plotBorderWidth: 0 - }, - title: { - style: { - color: '#FFF', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#DDD', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#999', - tickColor: '#999', - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: null, - minorTickInterval: null, - gridLineColor: 'rgba(255, 255, 255, .1)', - minorGridLineColor: 'rgba(255,255,255,0.07)', - lineWidth: 0, - tickWidth: 0, - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - color: '#CCC' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#333' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - tooltip: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgba(96, 96, 96, .8)'], - [1, 'rgba(16, 16, 16, .8)'] - ] - }, - borderWidth: 0, - style: { - color: '#FFF' - } - }, - - - plotOptions: { - series: { - nullColor: '#444444' - }, - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - - toolbar: { - itemStyle: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the demo examples - legendBackgroundColor: 'rgba(48, 48, 48, 0.8)', - background2: 'rgb(70, 70, 70)', - dataLabelsColor: '#444', - textColor: '#E0E0E0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/grid-light.js b/platforms/browser/www/lib/highcharts/themes/grid-light.js deleted file mode 100644 index 8d4ec7fa..00000000 --- a/platforms/browser/www/lib/highcharts/themes/grid-light.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Grid-light theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Dosis:400,600', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -Highcharts.theme = { - colors: ["#7cb5ec", "#f7a35c", "#90ee7e", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: null, - style: { - fontFamily: "Dosis, sans-serif" - } - }, - title: { - style: { - fontSize: '16px', - fontWeight: 'bold', - textTransform: 'uppercase' - } - }, - tooltip: { - borderWidth: 0, - backgroundColor: 'rgba(219,219,216,0.8)', - shadow: false - }, - legend: { - itemStyle: { - fontWeight: 'bold', - fontSize: '13px' - } - }, - xAxis: { - gridLineWidth: 1, - labels: { - style: { - fontSize: '12px' - } - } - }, - yAxis: { - minorTickInterval: 'auto', - title: { - style: { - textTransform: 'uppercase' - } - }, - labels: { - style: { - fontSize: '12px' - } - } - }, - plotOptions: { - candlestick: { - lineColor: '#404048' - } - }, - - - // General - background2: '#F0F0EA' - -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/grid.js b/platforms/browser/www/lib/highcharts/themes/grid.js deleted file mode 100644 index 70342f5e..00000000 --- a/platforms/browser/www/lib/highcharts/themes/grid.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Grid theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(255, 255, 255)'], - [1, 'rgb(240, 240, 255)'] - ] - }, - borderWidth: 2, - plotBackgroundColor: 'rgba(255, 255, 255, .9)', - plotShadow: true, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#000', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineWidth: 1, - lineColor: '#000', - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - minorTickInterval: 'auto', - lineColor: '#000', - lineWidth: 1, - tickWidth: 1, - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: 'black' - - }, - itemHoverStyle: { - color: '#039' - }, - itemHiddenStyle: { - color: 'gray' - } - }, - labels: { - style: { - color: '#99b' - } - }, - - navigation: { - buttonOptions: { - theme: { - stroke: '#CCCCCC' - } - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/sand-signika.js b/platforms/browser/www/lib/highcharts/themes/sand-signika.js deleted file mode 100644 index d17c08e4..00000000 --- a/platforms/browser/www/lib/highcharts/themes/sand-signika.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Sand-Signika theme for Highcharts JS - * @author Torstein Honsi - */ - -// Load the fonts -Highcharts.createElement('link', { - href: '//fonts.googleapis.com/css?family=Signika:400,700', - rel: 'stylesheet', - type: 'text/css' -}, null, document.getElementsByTagName('head')[0]); - -// Add the background image to the container -Highcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) { - proceed.call(this); - this.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)'; -}); - - -Highcharts.theme = { - colors: ["#f45b5b", "#8085e9", "#8d4654", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: null, - style: { - fontFamily: "Signika, serif" - } - }, - title: { - style: { - color: 'black', - fontSize: '16px', - fontWeight: 'bold' - } - }, - subtitle: { - style: { - color: 'black' - } - }, - tooltip: { - borderWidth: 0 - }, - legend: { - itemStyle: { - fontWeight: 'bold', - fontSize: '13px' - } - }, - xAxis: { - labels: { - style: { - color: '#6e6e70' - } - } - }, - yAxis: { - labels: { - style: { - color: '#6e6e70' - } - } - }, - plotOptions: { - series: { - shadow: true - }, - candlestick: { - lineColor: '#404048' - }, - map: { - shadow: false - } - }, - - // Highstock specific - navigator: { - xAxis: { - gridLineColor: '#D0D0D8' - } - }, - rangeSelector: { - buttonTheme: { - fill: 'white', - stroke: '#C0C0C8', - 'stroke-width': 1, - states: { - select: { - fill: '#D0D0D8' - } - } - } - }, - scrollbar: { - trackBorderColor: '#C0C0C8' - }, - - // General - background2: '#E0E0E8' - -}; - -// Apply the theme -Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/highcharts/themes/skies.js b/platforms/browser/www/lib/highcharts/themes/skies.js deleted file mode 100644 index d58b1f24..00000000 --- a/platforms/browser/www/lib/highcharts/themes/skies.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Skies theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], - chart: { - className: 'skies', - borderWidth: 0, - plotShadow: true, - plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', - plotBackgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgba(255, 255, 255, 1)'], - [1, 'rgba(255, 255, 255, 0)'] - ] - }, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#3E576F', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#6D869F', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: 'rgba(255, 255, 255, .5)', - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - tickWidth: 1, - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#3E576F' - }, - itemHoverStyle: { - color: 'black' - }, - itemHiddenStyle: { - color: 'silver' - } - }, - labels: { - style: { - color: '#3E576F' - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/platforms/browser/www/lib/jquery/.bower.json b/platforms/browser/www/lib/jquery/.bower.json deleted file mode 100644 index f6a1ee43..00000000 --- a/platforms/browser/www/lib/jquery/.bower.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.1", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ], - "homepage": "https://github.com/jquery/jquery", - "_release": "2.1.1", - "_resolution": { - "type": "version", - "tag": "2.1.1", - "commit": "4dec426aa2a6cbabb1b064319ba7c272d594a688" - }, - "_source": "git://github.com/jquery/jquery.git", - "_target": ">= 1.9.0", - "_originalSource": "jquery" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/jquery/MIT-LICENSE.txt b/platforms/browser/www/lib/jquery/MIT-LICENSE.txt deleted file mode 100644 index cdd31b5c..00000000 --- a/platforms/browser/www/lib/jquery/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2014 jQuery Foundation and other contributors -http://jquery.com/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/browser/www/lib/jquery/bower.json b/platforms/browser/www/lib/jquery/bower.json deleted file mode 100644 index c66a7506..00000000 --- a/platforms/browser/www/lib/jquery/bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.1", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ] -} diff --git a/platforms/browser/www/lib/jquery/src/ajax.js b/platforms/browser/www/lib/jquery/src/ajax.js deleted file mode 100644 index d39de2a9..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax.js +++ /dev/null @@ -1,806 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./ajax/var/nonce", - "./ajax/var/rquery", - "./core/init", - "./ajax/parseJSON", - "./ajax/parseXML", - "./deferred" -], function( jQuery, rnotwhite, nonce, rquery ) { - -var - // Document location - ajaxLocParts, - ajaxLocation, - - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat("*"); - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/jsonp.js b/platforms/browser/www/lib/jquery/src/ajax/jsonp.js deleted file mode 100644 index ff0d5389..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/jsonp.js +++ /dev/null @@ -1,89 +0,0 @@ -define([ - "../core", - "./var/nonce", - "./var/rquery", - "../ajax" -], function( jQuery, nonce, rquery ) { - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/load.js b/platforms/browser/www/lib/jquery/src/ajax/load.js deleted file mode 100644 index bff25b1a..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/load.js +++ /dev/null @@ -1,75 +0,0 @@ -define([ - "../core", - "../core/parseHTML", - "../ajax", - "../traversing", - "../manipulation", - "../selector", - // Optional event/alias dependency - "../event/alias" -], function( jQuery ) { - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/parseJSON.js b/platforms/browser/www/lib/jquery/src/ajax/parseJSON.js deleted file mode 100644 index 3a96d15b..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/parseJSON.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - -return jQuery.parseJSON; - -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/parseXML.js b/platforms/browser/www/lib/jquery/src/ajax/parseXML.js deleted file mode 100644 index 9eeb625f..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/parseXML.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - -return jQuery.parseXML; - -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/script.js b/platforms/browser/www/lib/jquery/src/ajax/script.js deleted file mode 100644 index f44329d4..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/script.js +++ /dev/null @@ -1,64 +0,0 @@ -define([ - "../core", - "../ajax" -], function( jQuery ) { - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/var/nonce.js b/platforms/browser/www/lib/jquery/src/ajax/var/nonce.js deleted file mode 100644 index 0871aae8..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/var/nonce.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../core" -], function( jQuery ) { - return jQuery.now(); -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/var/rquery.js b/platforms/browser/www/lib/jquery/src/ajax/var/rquery.js deleted file mode 100644 index 500a77a0..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/var/rquery.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\?/); -}); diff --git a/platforms/browser/www/lib/jquery/src/ajax/xhr.js b/platforms/browser/www/lib/jquery/src/ajax/xhr.js deleted file mode 100644 index bdeeee3f..00000000 --- a/platforms/browser/www/lib/jquery/src/ajax/xhr.js +++ /dev/null @@ -1,135 +0,0 @@ -define([ - "../core", - "../var/support", - "../ajax" -], function( jQuery, support ) { - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -if ( window.ActiveXObject ) { - jQuery( window ).on( "unload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes.js b/platforms/browser/www/lib/jquery/src/attributes.js deleted file mode 100644 index fa2ef1ed..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes.js +++ /dev/null @@ -1,11 +0,0 @@ -define([ - "./core", - "./attributes/attr", - "./attributes/prop", - "./attributes/classes", - "./attributes/val" -], function( jQuery ) { - -// Return jQuery for attributes-only inclusion -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes/attr.js b/platforms/browser/www/lib/jquery/src/attributes/attr.js deleted file mode 100644 index 8601cfe1..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes/attr.js +++ /dev/null @@ -1,143 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../core/access", - "./support", - "../selector" -], function( jQuery, rnotwhite, strundefined, access, support ) { - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes/classes.js b/platforms/browser/www/lib/jquery/src/attributes/classes.js deleted file mode 100644 index 7d714b8e..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes/classes.js +++ /dev/null @@ -1,158 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../data/var/data_priv", - "../core/init" -], function( jQuery, rnotwhite, strundefined, data_priv ) { - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes/prop.js b/platforms/browser/www/lib/jquery/src/attributes/prop.js deleted file mode 100644 index e2b95dca..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes/prop.js +++ /dev/null @@ -1,96 +0,0 @@ -define([ - "../core", - "../core/access", - "./support" -], function( jQuery, access, support ) { - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -// Support: IE9+ -// Selectedness for an option in an optgroup can be inaccurate -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes/support.js b/platforms/browser/www/lib/jquery/src/attributes/support.js deleted file mode 100644 index 376b54ad..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes/support.js +++ /dev/null @@ -1,35 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS 5.1, Android 4.x, Android 2.3 - // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere) - support.checkOn = input.value !== ""; - - // Must access the parent to make an option select properly - // Support: IE9, IE10 - support.optSelected = opt.selected; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Check if an input maintains its value after becoming a radio - // Support: IE9, IE10 - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - -return support; - -}); diff --git a/platforms/browser/www/lib/jquery/src/attributes/val.js b/platforms/browser/www/lib/jquery/src/attributes/val.js deleted file mode 100644 index 42ef3234..00000000 --- a/platforms/browser/www/lib/jquery/src/attributes/val.js +++ /dev/null @@ -1,163 +0,0 @@ -define([ - "../core", - "./support", - "../core/init" -], function( jQuery, support ) { - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // IE6-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/callbacks.js b/platforms/browser/www/lib/jquery/src/callbacks.js deleted file mode 100644 index 17572bb9..00000000 --- a/platforms/browser/www/lib/jquery/src/callbacks.js +++ /dev/null @@ -1,205 +0,0 @@ -define([ - "./core", - "./var/rnotwhite" -], function( jQuery, rnotwhite ) { - -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/core.js b/platforms/browser/www/lib/jquery/src/core.js deleted file mode 100644 index b520b593..00000000 --- a/platforms/browser/www/lib/jquery/src/core.js +++ /dev/null @@ -1,498 +0,0 @@ -define([ - "./var/arr", - "./var/slice", - "./var/concat", - "./var/push", - "./var/indexOf", - "./var/class2type", - "./var/toString", - "./var/hasOwn", - "./var/support" -], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "@VERSION", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android < 4.0, iOS < 6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Support: Android<4.1 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/core/access.js b/platforms/browser/www/lib/jquery/src/core/access.js deleted file mode 100644 index b6110c8f..00000000 --- a/platforms/browser/www/lib/jquery/src/core/access.js +++ /dev/null @@ -1,60 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - -return access; - -}); diff --git a/platforms/browser/www/lib/jquery/src/core/init.js b/platforms/browser/www/lib/jquery/src/core/init.js deleted file mode 100644 index daf5d190..00000000 --- a/platforms/browser/www/lib/jquery/src/core/init.js +++ /dev/null @@ -1,123 +0,0 @@ -// Initialize a jQuery object -define([ - "../core", - "./var/rsingleTag", - "../traversing/findFilter" -], function( jQuery, rsingleTag ) { - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - -return init; - -}); diff --git a/platforms/browser/www/lib/jquery/src/core/parseHTML.js b/platforms/browser/www/lib/jquery/src/core/parseHTML.js deleted file mode 100644 index 64cf2a18..00000000 --- a/platforms/browser/www/lib/jquery/src/core/parseHTML.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "./var/rsingleTag", - "../manipulation" // buildFragment -], function( jQuery, rsingleTag ) { - -// data: string of html -// context (optional): If specified, the fragment will be created in this context, defaults to document -// keepScripts (optional): If true, will include scripts passed in the html string -jQuery.parseHTML = function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - -return jQuery.parseHTML; - -}); diff --git a/platforms/browser/www/lib/jquery/src/core/ready.js b/platforms/browser/www/lib/jquery/src/core/ready.js deleted file mode 100644 index 122b1610..00000000 --- a/platforms/browser/www/lib/jquery/src/core/ready.js +++ /dev/null @@ -1,97 +0,0 @@ -define([ - "../core", - "../core/init", - "../deferred" -], function( jQuery ) { - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - -}); diff --git a/platforms/browser/www/lib/jquery/src/core/var/rsingleTag.js b/platforms/browser/www/lib/jquery/src/core/var/rsingleTag.js deleted file mode 100644 index 7e7090b7..00000000 --- a/platforms/browser/www/lib/jquery/src/core/var/rsingleTag.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // Match a standalone tag - return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); -}); diff --git a/platforms/browser/www/lib/jquery/src/css.js b/platforms/browser/www/lib/jquery/src/css.js deleted file mode 100644 index 6c20b32d..00000000 --- a/platforms/browser/www/lib/jquery/src/css.js +++ /dev/null @@ -1,451 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./core/access", - "./css/var/rmargin", - "./css/var/rnumnonpx", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/var/getStyles", - "./css/curCSS", - "./css/defaultDisplay", - "./css/addGetHookIf", - "./css/support", - "./data/var/data_priv", - - "./core/init", - "./css/swap", - "./core/ready", - "./selector" // contains -], function( jQuery, pnum, access, rmargin, rnumnonpx, cssExpand, isHidden, - getStyles, curCSS, defaultDisplay, addGetHookIf, support, data_priv ) { - -var - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name[0].toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = data_priv.get( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set. See: #7116 - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifying setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - style[ name ] = value; - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/css/addGetHookIf.js b/platforms/browser/www/lib/jquery/src/css/addGetHookIf.js deleted file mode 100644 index 81d694cb..00000000 --- a/platforms/browser/www/lib/jquery/src/css/addGetHookIf.js +++ /dev/null @@ -1,24 +0,0 @@ -define(function() { - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due to missing dependency), - // remove it. - // Since there are no other hooks for marginRight, remove the whole object. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - -return addGetHookIf; - -}); diff --git a/platforms/browser/www/lib/jquery/src/css/curCSS.js b/platforms/browser/www/lib/jquery/src/css/curCSS.js deleted file mode 100644 index abcc8cb7..00000000 --- a/platforms/browser/www/lib/jquery/src/css/curCSS.js +++ /dev/null @@ -1,57 +0,0 @@ -define([ - "../core", - "./var/rnumnonpx", - "./var/rmargin", - "./var/getStyles", - "../selector" // contains -], function( jQuery, rnumnonpx, rmargin, getStyles ) { - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - -return curCSS; -}); diff --git a/platforms/browser/www/lib/jquery/src/css/defaultDisplay.js b/platforms/browser/www/lib/jquery/src/css/defaultDisplay.js deleted file mode 100644 index 631b9ba8..00000000 --- a/platforms/browser/www/lib/jquery/src/css/defaultDisplay.js +++ /dev/null @@ -1,70 +0,0 @@ -define([ - "../core", - "../manipulation" // appendTo -], function( jQuery ) { - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} - -return defaultDisplay; - -}); diff --git a/platforms/browser/www/lib/jquery/src/css/hiddenVisibleSelectors.js b/platforms/browser/www/lib/jquery/src/css/hiddenVisibleSelectors.js deleted file mode 100644 index c7f1c7ee..00000000 --- a/platforms/browser/www/lib/jquery/src/css/hiddenVisibleSelectors.js +++ /dev/null @@ -1,15 +0,0 @@ -define([ - "../core", - "../selector" -], function( jQuery ) { - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - -}); diff --git a/platforms/browser/www/lib/jquery/src/css/support.js b/platforms/browser/www/lib/jquery/src/css/support.js deleted file mode 100644 index 4a4d75c4..00000000 --- a/platforms/browser/www/lib/jquery/src/css/support.js +++ /dev/null @@ -1,91 +0,0 @@ -define([ - "../core", - "../var/support" -], function( jQuery, support ) { - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - - return ret; - } - }); - } -})(); - -return support; - -}); diff --git a/platforms/browser/www/lib/jquery/src/css/swap.js b/platforms/browser/www/lib/jquery/src/css/swap.js deleted file mode 100644 index ce164353..00000000 --- a/platforms/browser/www/lib/jquery/src/css/swap.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - -return jQuery.swap; - -}); diff --git a/platforms/browser/www/lib/jquery/src/css/var/cssExpand.js b/platforms/browser/www/lib/jquery/src/css/var/cssExpand.js deleted file mode 100644 index 91e90a88..00000000 --- a/platforms/browser/www/lib/jquery/src/css/var/cssExpand.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return [ "Top", "Right", "Bottom", "Left" ]; -}); diff --git a/platforms/browser/www/lib/jquery/src/css/var/getStyles.js b/platforms/browser/www/lib/jquery/src/css/var/getStyles.js deleted file mode 100644 index 26cc0a25..00000000 --- a/platforms/browser/www/lib/jquery/src/css/var/getStyles.js +++ /dev/null @@ -1,5 +0,0 @@ -define(function() { - return function( elem ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - }; -}); diff --git a/platforms/browser/www/lib/jquery/src/css/var/isHidden.js b/platforms/browser/www/lib/jquery/src/css/var/isHidden.js deleted file mode 100644 index 15ab81a9..00000000 --- a/platforms/browser/www/lib/jquery/src/css/var/isHidden.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../../core", - "../../selector" - // css is assumed -], function( jQuery ) { - - return function( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); - }; -}); diff --git a/platforms/browser/www/lib/jquery/src/css/var/rmargin.js b/platforms/browser/www/lib/jquery/src/css/var/rmargin.js deleted file mode 100644 index da0438db..00000000 --- a/platforms/browser/www/lib/jquery/src/css/var/rmargin.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^margin/); -}); diff --git a/platforms/browser/www/lib/jquery/src/css/var/rnumnonpx.js b/platforms/browser/www/lib/jquery/src/css/var/rnumnonpx.js deleted file mode 100644 index c93be285..00000000 --- a/platforms/browser/www/lib/jquery/src/css/var/rnumnonpx.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../var/pnum" -], function( pnum ) { - return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); -}); diff --git a/platforms/browser/www/lib/jquery/src/data.js b/platforms/browser/www/lib/jquery/src/data.js deleted file mode 100644 index e3f3578f..00000000 --- a/platforms/browser/www/lib/jquery/src/data.js +++ /dev/null @@ -1,179 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./core/access", - "./data/var/data_priv", - "./data/var/data_user" -], function( jQuery, rnotwhite, access, data_priv, data_user ) { - -/* - Implementation Summary - - 1. Enforce API surface and semantic compatibility with 1.9.x branch - 2. Improve the module's maintainability by reducing the storage - paths to a single mechanism. - 3. Use the same single mechanism to support "private" and "user" data. - 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) - 5. Avoid exposing implementation details on user objects (eg. expando properties) - 6. Provide a clear path for implementation upgrade to WeakMap in 2014 -*/ -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/data/Data.js b/platforms/browser/www/lib/jquery/src/data/Data.js deleted file mode 100644 index d34606bf..00000000 --- a/platforms/browser/www/lib/jquery/src/data/Data.js +++ /dev/null @@ -1,181 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "./accepts" -], function( jQuery, rnotwhite ) { - -function Data() { - // Support: Android < 4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Math.random(); -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android < 4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; - -return Data; -}); diff --git a/platforms/browser/www/lib/jquery/src/data/accepts.js b/platforms/browser/www/lib/jquery/src/data/accepts.js deleted file mode 100644 index 291c7b47..00000000 --- a/platforms/browser/www/lib/jquery/src/data/accepts.js +++ /dev/null @@ -1,20 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - -return jQuery.acceptData; -}); diff --git a/platforms/browser/www/lib/jquery/src/data/var/data_priv.js b/platforms/browser/www/lib/jquery/src/data/var/data_priv.js deleted file mode 100644 index 24399e46..00000000 --- a/platforms/browser/www/lib/jquery/src/data/var/data_priv.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/platforms/browser/www/lib/jquery/src/data/var/data_user.js b/platforms/browser/www/lib/jquery/src/data/var/data_user.js deleted file mode 100644 index 24399e46..00000000 --- a/platforms/browser/www/lib/jquery/src/data/var/data_user.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/platforms/browser/www/lib/jquery/src/deferred.js b/platforms/browser/www/lib/jquery/src/deferred.js deleted file mode 100644 index 7fcc214a..00000000 --- a/platforms/browser/www/lib/jquery/src/deferred.js +++ /dev/null @@ -1,149 +0,0 @@ -define([ - "./core", - "./var/slice", - "./callbacks" -], function( jQuery, slice ) { - -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/deprecated.js b/platforms/browser/www/lib/jquery/src/deprecated.js deleted file mode 100644 index 1b068bc3..00000000 --- a/platforms/browser/www/lib/jquery/src/deprecated.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "./core", - "./traversing" -], function( jQuery ) { - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - -}); diff --git a/platforms/browser/www/lib/jquery/src/dimensions.js b/platforms/browser/www/lib/jquery/src/dimensions.js deleted file mode 100644 index 9cb0e99f..00000000 --- a/platforms/browser/www/lib/jquery/src/dimensions.js +++ /dev/null @@ -1,50 +0,0 @@ -define([ - "./core", - "./core/access", - "./css" -], function( jQuery, access ) { - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/effects.js b/platforms/browser/www/lib/jquery/src/effects.js deleted file mode 100644 index 5fafc528..00000000 --- a/platforms/browser/www/lib/jquery/src/effects.js +++ /dev/null @@ -1,649 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/defaultDisplay", - "./data/var/data_priv", - - "./core/init", - "./effects/Tween", - "./queue", - "./css", - "./deferred", - "./traversing" -], function( jQuery, pnum, cssExpand, isHidden, defaultDisplay, data_priv ) { - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // we're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // enable finishing flag on private data - data.finish = true; - - // empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/effects/Tween.js b/platforms/browser/www/lib/jquery/src/effects/Tween.js deleted file mode 100644 index d1e4dca8..00000000 --- a/platforms/browser/www/lib/jquery/src/effects/Tween.js +++ /dev/null @@ -1,114 +0,0 @@ -define([ - "../core", - "../css" -], function( jQuery ) { - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes - -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - -}); diff --git a/platforms/browser/www/lib/jquery/src/effects/animatedSelector.js b/platforms/browser/www/lib/jquery/src/effects/animatedSelector.js deleted file mode 100644 index bc5a3d6c..00000000 --- a/platforms/browser/www/lib/jquery/src/effects/animatedSelector.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core", - "../selector", - "../effects" -], function( jQuery ) { - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - -}); diff --git a/platforms/browser/www/lib/jquery/src/event.js b/platforms/browser/www/lib/jquery/src/event.js deleted file mode 100644 index f38d70a4..00000000 --- a/platforms/browser/www/lib/jquery/src/event.js +++ /dev/null @@ -1,868 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./var/rnotwhite", - "./var/hasOwn", - "./var/slice", - "./event/support", - "./data/var/data_priv", - - "./core/init", - "./data/accepts", - "./selector" -], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) { - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome < 28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - // Support: Android < 4.0 - src.returnValue === false ? - returnTrue : - returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// Create "bubbling" focus and blur events -// Support: Firefox, Chrome, Safari -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/event/alias.js b/platforms/browser/www/lib/jquery/src/event/alias.js deleted file mode 100644 index 7e791750..00000000 --- a/platforms/browser/www/lib/jquery/src/event/alias.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "../event" -], function( jQuery ) { - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/event/support.js b/platforms/browser/www/lib/jquery/src/event/support.js deleted file mode 100644 index 85060db7..00000000 --- a/platforms/browser/www/lib/jquery/src/event/support.js +++ /dev/null @@ -1,9 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -support.focusinBubbles = "onfocusin" in window; - -return support; - -}); diff --git a/platforms/browser/www/lib/jquery/src/exports/amd.js b/platforms/browser/www/lib/jquery/src/exports/amd.js deleted file mode 100644 index 9a9846f9..00000000 --- a/platforms/browser/www/lib/jquery/src/exports/amd.js +++ /dev/null @@ -1,24 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - -}); diff --git a/platforms/browser/www/lib/jquery/src/exports/global.js b/platforms/browser/www/lib/jquery/src/exports/global.js deleted file mode 100644 index 8eee5bb7..00000000 --- a/platforms/browser/www/lib/jquery/src/exports/global.js +++ /dev/null @@ -1,32 +0,0 @@ -define([ - "../core", - "../var/strundefined" -], function( jQuery, strundefined ) { - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in -// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - -}); diff --git a/platforms/browser/www/lib/jquery/src/intro.js b/platforms/browser/www/lib/jquery/src/intro.js deleted file mode 100644 index f7dd78d3..00000000 --- a/platforms/browser/www/lib/jquery/src/intro.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * jQuery JavaScript Library v@VERSION - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: @DATE - */ - -(function( global, factory ) { - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -//"use strict"; diff --git a/platforms/browser/www/lib/jquery/src/jquery.js b/platforms/browser/www/lib/jquery/src/jquery.js deleted file mode 100644 index 46460fa9..00000000 --- a/platforms/browser/www/lib/jquery/src/jquery.js +++ /dev/null @@ -1,36 +0,0 @@ -define([ - "./core", - "./selector", - "./traversing", - "./callbacks", - "./deferred", - "./core/ready", - "./data", - "./queue", - "./queue/delay", - "./attributes", - "./event", - "./event/alias", - "./manipulation", - "./manipulation/_evalUrl", - "./wrap", - "./css", - "./css/hiddenVisibleSelectors", - "./serialize", - "./ajax", - "./ajax/xhr", - "./ajax/script", - "./ajax/jsonp", - "./ajax/load", - "./effects", - "./effects/animatedSelector", - "./offset", - "./dimensions", - "./deprecated", - "./exports/amd", - "./exports/global" -], function( jQuery ) { - -return jQuery; - -}); diff --git a/platforms/browser/www/lib/jquery/src/manipulation.js b/platforms/browser/www/lib/jquery/src/manipulation.js deleted file mode 100644 index 31d0c4ed..00000000 --- a/platforms/browser/www/lib/jquery/src/manipulation.js +++ /dev/null @@ -1,582 +0,0 @@ -define([ - "./core", - "./var/concat", - "./var/push", - "./core/access", - "./manipulation/var/rcheckableType", - "./manipulation/support", - "./data/var/data_priv", - "./data/var/data_user", - - "./core/init", - "./data/accepts", - "./traversing", - "./selector", - "./event" -], function( jQuery, concat, push, access, rcheckableType, support, data_priv, data_user ) { - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE 9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE 9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute("type"); - } - - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Support: IE >= 9 -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Support: IE >= 9 - // Fix Cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Fixes #12346 - // Support: Webkit, IE - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/manipulation/_evalUrl.js b/platforms/browser/www/lib/jquery/src/manipulation/_evalUrl.js deleted file mode 100644 index 6704749a..00000000 --- a/platforms/browser/www/lib/jquery/src/manipulation/_evalUrl.js +++ /dev/null @@ -1,18 +0,0 @@ -define([ - "../ajax" -], function( jQuery ) { - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - -return jQuery._evalUrl; - -}); diff --git a/platforms/browser/www/lib/jquery/src/manipulation/support.js b/platforms/browser/www/lib/jquery/src/manipulation/support.js deleted file mode 100644 index fb1e8556..00000000 --- a/platforms/browser/www/lib/jquery/src/manipulation/support.js +++ /dev/null @@ -1,31 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // #11217 - WebKit loses check when the name is after the checked attribute - // Support: Windows Web Apps (WWA) - // `name` and `type` need .setAttribute for WWA - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE9-IE11+ - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); - -return support; - -}); diff --git a/platforms/browser/www/lib/jquery/src/manipulation/var/rcheckableType.js b/platforms/browser/www/lib/jquery/src/manipulation/var/rcheckableType.js deleted file mode 100644 index c27a15dc..00000000 --- a/platforms/browser/www/lib/jquery/src/manipulation/var/rcheckableType.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^(?:checkbox|radio)$/i); -}); diff --git a/platforms/browser/www/lib/jquery/src/offset.js b/platforms/browser/www/lib/jquery/src/offset.js deleted file mode 100644 index dc7bb955..00000000 --- a/platforms/browser/www/lib/jquery/src/offset.js +++ /dev/null @@ -1,204 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./core/access", - "./css/var/rnumnonpx", - "./css/curCSS", - "./css/addGetHookIf", - "./css/support", - - "./core/init", - "./css", - "./selector" // contains -], function( jQuery, strundefined, access, rnumnonpx, curCSS, addGetHookIf, support ) { - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // We assume that getBoundingClientRect is available when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// getComputedStyle returns percent when specified for top/left/bottom/right -// rather than make the css module depend on the offset module, we just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/outro.js b/platforms/browser/www/lib/jquery/src/outro.js deleted file mode 100644 index be4600a5..00000000 --- a/platforms/browser/www/lib/jquery/src/outro.js +++ /dev/null @@ -1 +0,0 @@ -})); diff --git a/platforms/browser/www/lib/jquery/src/queue.js b/platforms/browser/www/lib/jquery/src/queue.js deleted file mode 100644 index fbfaf9ca..00000000 --- a/platforms/browser/www/lib/jquery/src/queue.js +++ /dev/null @@ -1,142 +0,0 @@ -define([ - "./core", - "./data/var/data_priv", - "./deferred", - "./callbacks" -], function( jQuery, data_priv ) { - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", key ] ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/queue/delay.js b/platforms/browser/www/lib/jquery/src/queue/delay.js deleted file mode 100644 index 4b4498ce..00000000 --- a/platforms/browser/www/lib/jquery/src/queue/delay.js +++ /dev/null @@ -1,22 +0,0 @@ -define([ - "../core", - "../queue", - "../effects" // Delay is optional because of this dependency -], function( jQuery ) { - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); -}; - -return jQuery.fn.delay; -}); diff --git a/platforms/browser/www/lib/jquery/src/selector-native.js b/platforms/browser/www/lib/jquery/src/selector-native.js deleted file mode 100644 index d8163c2f..00000000 --- a/platforms/browser/www/lib/jquery/src/selector-native.js +++ /dev/null @@ -1,172 +0,0 @@ -define([ - "./core" -], function( jQuery ) { - -/* - * Optional (non-Sizzle) selector module for custom builds. - * - * Note that this DOES NOT SUPPORT many documented jQuery - * features in exchange for its smaller size: - * - * Attribute not equal selector - * Positional selectors (:first; :eq(n); :odd; etc.) - * Type selectors (:input; :checkbox; :button; etc.) - * State-based selectors (:animated; :visible; :hidden; etc.) - * :has(selector) - * :not(complex selector) - * custom selectors via Sizzle extensions - * Leading combinators (e.g., $collection.find("> *")) - * Reliable functionality on XML fragments - * Requiring all parts of a selector to match elements under context - * (e.g., $div.find("div > *") now matches children of $div) - * Matching against non-elements - * Reliable sorting of disconnected nodes - * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit) - * - * If any of these are unacceptable tradeoffs, either use Sizzle or - * customize this stub for the project's specific needs. - */ - -var docElem = window.document.documentElement, - selector_hasDuplicate, - matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector, - selector_sortOrder = function( a, b ) { - // Flag for duplicate removal - if ( a === b ) { - selector_hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 ) { - - // Choose the first element that is related to our document - if ( a === document || jQuery.contains(document, a) ) { - return -1; - } - if ( b === document || jQuery.contains(document, b) ) { - return 1; - } - - // Maintain original order - return 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - }; - -jQuery.extend({ - find: function( selector, context, results, seed ) { - var elem, nodeType, - i = 0; - - results = results || []; - context = context || document; - - // Same basic safeguard as Sizzle - if ( !selector || typeof selector !== "string" ) { - return results; - } - - // Early return if context is not an element or document - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( seed ) { - while ( (elem = seed[i++]) ) { - if ( jQuery.find.matchesSelector(elem, selector) ) { - results.push( elem ); - } - } - } else { - jQuery.merge( results, context.querySelectorAll(selector) ); - } - - return results; - }, - unique: function( results ) { - var elem, - duplicates = [], - i = 0, - j = 0; - - selector_hasDuplicate = false; - results.sort( selector_sortOrder ); - - if ( selector_hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; - }, - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - return elem.textContent; - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; - }, - contains: function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) ); - }, - isXMLDoc: function( elem ) { - return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML"; - }, - expr: { - attrHandle: {}, - match: { - bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i, - needsContext: /^[\x20\t\r\n\f]*[>+~]/ - } - } -}); - -jQuery.extend( jQuery.find, { - matches: function( expr, elements ) { - return jQuery.find( expr, null, null, elements ); - }, - matchesSelector: function( elem, expr ) { - return matches.call( elem, expr ); - }, - attr: function( elem, name ) { - return elem.getAttribute( name ); - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/selector-sizzle.js b/platforms/browser/www/lib/jquery/src/selector-sizzle.js deleted file mode 100644 index 7d3926b1..00000000 --- a/platforms/browser/www/lib/jquery/src/selector-sizzle.js +++ /dev/null @@ -1,14 +0,0 @@ -define([ - "./core", - "sizzle" -], function( jQuery, Sizzle ) { - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - -}); diff --git a/platforms/browser/www/lib/jquery/src/selector.js b/platforms/browser/www/lib/jquery/src/selector.js deleted file mode 100644 index 01e9733b..00000000 --- a/platforms/browser/www/lib/jquery/src/selector.js +++ /dev/null @@ -1 +0,0 @@ -define([ "./selector-sizzle" ]); diff --git a/platforms/browser/www/lib/jquery/src/serialize.js b/platforms/browser/www/lib/jquery/src/serialize.js deleted file mode 100644 index 0d6dfec6..00000000 --- a/platforms/browser/www/lib/jquery/src/serialize.js +++ /dev/null @@ -1,111 +0,0 @@ -define([ - "./core", - "./manipulation/var/rcheckableType", - "./core/init", - "./traversing", // filter - "./attributes/prop" -], function( jQuery, rcheckableType ) { - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/traversing.js b/platforms/browser/www/lib/jquery/src/traversing.js deleted file mode 100644 index 943d16cb..00000000 --- a/platforms/browser/www/lib/jquery/src/traversing.js +++ /dev/null @@ -1,200 +0,0 @@ -define([ - "./core", - "./var/indexOf", - "./traversing/var/rneedsContext", - "./core/init", - "./traversing/findFilter", - "./selector" -], function( jQuery, indexOf, rneedsContext ) { - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/jquery/src/traversing/findFilter.js b/platforms/browser/www/lib/jquery/src/traversing/findFilter.js deleted file mode 100644 index dd70a73f..00000000 --- a/platforms/browser/www/lib/jquery/src/traversing/findFilter.js +++ /dev/null @@ -1,100 +0,0 @@ -define([ - "../core", - "../var/indexOf", - "./var/rneedsContext", - "../selector" -], function( jQuery, indexOf, rneedsContext ) { - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - -}); diff --git a/platforms/browser/www/lib/jquery/src/traversing/var/rneedsContext.js b/platforms/browser/www/lib/jquery/src/traversing/var/rneedsContext.js deleted file mode 100644 index 3d6ae403..00000000 --- a/platforms/browser/www/lib/jquery/src/traversing/var/rneedsContext.js +++ /dev/null @@ -1,6 +0,0 @@ -define([ - "../../core", - "../../selector" -], function( jQuery ) { - return jQuery.expr.match.needsContext; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/arr.js b/platforms/browser/www/lib/jquery/src/var/arr.js deleted file mode 100644 index b18fc9ce..00000000 --- a/platforms/browser/www/lib/jquery/src/var/arr.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return []; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/class2type.js b/platforms/browser/www/lib/jquery/src/var/class2type.js deleted file mode 100644 index e674c3ba..00000000 --- a/platforms/browser/www/lib/jquery/src/var/class2type.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // [[Class]] -> type pairs - return {}; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/concat.js b/platforms/browser/www/lib/jquery/src/var/concat.js deleted file mode 100644 index 7dcf77e3..00000000 --- a/platforms/browser/www/lib/jquery/src/var/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.concat; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/hasOwn.js b/platforms/browser/www/lib/jquery/src/var/hasOwn.js deleted file mode 100644 index 32c002af..00000000 --- a/platforms/browser/www/lib/jquery/src/var/hasOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.hasOwnProperty; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/indexOf.js b/platforms/browser/www/lib/jquery/src/var/indexOf.js deleted file mode 100644 index cdbe3c74..00000000 --- a/platforms/browser/www/lib/jquery/src/var/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.indexOf; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/pnum.js b/platforms/browser/www/lib/jquery/src/var/pnum.js deleted file mode 100644 index 40704472..00000000 --- a/platforms/browser/www/lib/jquery/src/var/pnum.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/push.js b/platforms/browser/www/lib/jquery/src/var/push.js deleted file mode 100644 index ad6f0a17..00000000 --- a/platforms/browser/www/lib/jquery/src/var/push.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.push; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/rnotwhite.js b/platforms/browser/www/lib/jquery/src/var/rnotwhite.js deleted file mode 100644 index 7c69bec5..00000000 --- a/platforms/browser/www/lib/jquery/src/var/rnotwhite.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\S+/g); -}); diff --git a/platforms/browser/www/lib/jquery/src/var/slice.js b/platforms/browser/www/lib/jquery/src/var/slice.js deleted file mode 100644 index 614d46ca..00000000 --- a/platforms/browser/www/lib/jquery/src/var/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.slice; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/strundefined.js b/platforms/browser/www/lib/jquery/src/var/strundefined.js deleted file mode 100644 index 04e16b03..00000000 --- a/platforms/browser/www/lib/jquery/src/var/strundefined.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return typeof undefined; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/support.js b/platforms/browser/www/lib/jquery/src/var/support.js deleted file mode 100644 index b25dbc74..00000000 --- a/platforms/browser/www/lib/jquery/src/var/support.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // All support tests are defined in their respective modules. - return {}; -}); diff --git a/platforms/browser/www/lib/jquery/src/var/toString.js b/platforms/browser/www/lib/jquery/src/var/toString.js deleted file mode 100644 index ca92d222..00000000 --- a/platforms/browser/www/lib/jquery/src/var/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.toString; -}); diff --git a/platforms/browser/www/lib/jquery/src/wrap.js b/platforms/browser/www/lib/jquery/src/wrap.js deleted file mode 100644 index b6dce72e..00000000 --- a/platforms/browser/www/lib/jquery/src/wrap.js +++ /dev/null @@ -1,78 +0,0 @@ -define([ - "./core", - "./core/init", - "./traversing" // parent, contents -], function( jQuery ) { - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapAll( html.call(this, i) ); - }); - } - - if ( this[ 0 ] ) { - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); - -return jQuery; -}); diff --git a/platforms/browser/www/lib/json3/.bower.json b/platforms/browser/www/lib/json3/.bower.json deleted file mode 100644 index a53d8384..00000000 --- a/platforms/browser/www/lib/json3/.bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT", - "_release": "3.3.2", - "_resolution": { - "type": "version", - "tag": "v3.3.2", - "commit": "dec5c2a5dc723ff867caa32a81ed93ab814f7426" - }, - "_source": "git://github.com/bestiejs/json3.git", - "_target": "~3.3.1", - "_originalSource": "json3" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/json3/CHANGELOG.md b/platforms/browser/www/lib/json3/CHANGELOG.md deleted file mode 100644 index e93fa399..00000000 --- a/platforms/browser/www/lib/json3/CHANGELOG.md +++ /dev/null @@ -1,44 +0,0 @@ -# JSON3 Changelog - -## 3.1.0 - - * Switched to `bestiejs` organisation - * Added support for a list of properties as the `filter` argument for `JSON.stringify` - * Fixed Firefox 4 and 4.0.1 allowing non-standard extensions to `JSON.parse` - -## 3.0.0 - - * Renamed `JSON3` to `JSON` - * Removed `JSON3.Version` - * Added minified version of library - * Created a [GitHub Project Page](http://bestiejs.github.io/json3) - * Preserved alphanumeric order when iterating over shadowed properties on objects - -## 0.8.5 - - * Avoided relying on native functions `Math.abs`, and `isFinite`, and native constructors `String`, `Number`, `Object`, and `Array` - * Fixed AMD export logic - -## 0.8.0 - - * Renamed `Prim` to `JSON3` - * Added `JSON3.Version` - * Added support for AMD lodaers as the `"json"` module - * Added feature tests for native `JSON` implementations - * Added string coercion for the `source` argument in `JSON3.parse` - * Fixed the date serialization routine in `JSON3.stringify` - -## 0.5.0 - - * Fixed `Prim.stringify`'s handling of the `width` argument - * Added Microsoft's ES5 Conformance Tests to the test suite - -## 0.2.0 - - * Added `Prim.stringify` for serializing values - * Renamed `Prim.Escapes` to `Prim.Unescapes` - * Disallowed unescaped tab characters in strings passed to `Prim.parse` - -## 0.1.0 - - * Initial release of Prim diff --git a/platforms/browser/www/lib/json3/CONTRIBUTING.md b/platforms/browser/www/lib/json3/CONTRIBUTING.md deleted file mode 100644 index b0cb8579..00000000 --- a/platforms/browser/www/lib/json3/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# Contributing to JSON3 - -If you'd like to contribute to JSON3, please review our [contributing guidelines](http://bestiejs.github.io/json3/#section_5). Thanks! diff --git a/platforms/browser/www/lib/json3/LICENSE b/platforms/browser/www/lib/json3/LICENSE deleted file mode 100644 index c0de33a8..00000000 --- a/platforms/browser/www/lib/json3/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012-2014 Kit Cambridge. -http://kitcambridge.be/ - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/platforms/browser/www/lib/json3/README.md b/platforms/browser/www/lib/json3/README.md deleted file mode 100644 index 9aa7935d..00000000 --- a/platforms/browser/www/lib/json3/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# JSON 3 # - -![JSON 3 Logo](http://bestiejs.github.io/json3/page/logo.png) - -[![Build Status](https://secure.travis-ci.org/bestiejs/json3.png?branch=gh-pages)](http://travis-ci.org/bestiejs/json3) - -**JSON 3** is a modern JSON implementation compatible with a variety of JavaScript platforms, including Internet Explorer 6, Opera 7, Safari 2, and Netscape 6. The current version is **3.3.2**. - -- [Development Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.js) *(43 KB; uncompressed with comments)* -- [Production Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js) *(3.5 KB; compressed and `gzip`-ped)* - -Special thanks to [cdnjs](http://cdnjs.com/libraries/json3/) and [jsDelivr](http://www.jsdelivr.com/#!json3) for hosting CDN copies of JSON 3. - -[JSON](http://json.org/) is a language-independent data interchange format based on a loose subset of the JavaScript grammar. Originally popularized by [Douglas Crockford](http://www.crockford.com/), the format was standardized in the [fifth edition](http://es5.github.com/) of the ECMAScript specification. The 5.1 edition, ratified in June 2011, incorporates several modifications to the grammar pertaining to the serialization of dates. - -JSON 3 exposes two functions: `stringify()` for [serializing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify) a JavaScript value to JSON, and `parse()` for [producing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/parse) a JavaScript value from a JSON source string. It is a **drop-in replacement** for [JSON 2](http://json.org/js). The functions behave exactly as described in the ECMAScript spec, **except** for the date serialization discrepancy noted below. - -The JSON 3 parser does **not** use `eval` or regular expressions. This provides security and performance benefits in obsolete and mobile environments, where the margin is particularly significant. The complete [benchmark suite](http://jsperf.com/json3) is available on [jsPerf](http://jsperf.com/). - -The project is [hosted on GitHub](http://git.io/json3), along with the [unit tests](http://bestiejs.github.io/json3/test/test_browser.html). It is part of the [BestieJS](https://github.com/bestiejs) family, a collection of best-in-class JavaScript libraries that promote cross-platform support, specification precedents, unit testing, and plenty of documentation. - -# Changes from JSON 2 # - -JSON 3... - -* Correctly serializes primitive wrapper objects. -* Throws a `TypeError` when serializing cyclic structures (JSON 2 recurses until the call stack overflows). -* Utilizes **feature tests** to detect broken or incomplete *native* JSON implementations (JSON 2 only checks for the presence of the native functions). The tests are only executed once at runtime, so there is no additional performance cost when parsing or serializing values. - -**As of v3.2.3**, JSON 3 is compatible with [Prototype](http://prototypejs.org) 1.6.1 and older. - -In contrast to JSON 2, JSON 3 **does not**... - -* Add `toJSON()` methods to the `Boolean`, `Number`, and `String` prototypes. These are not part of any standard, and are made redundant by the design of the `stringify()` implementation. -* Add `toJSON()` or `toISOString()` methods to `Date.prototype`. See the note about date serialization below. - -## Date Serialization - -**JSON 3 deviates from the specification in one important way**: it does not define `Date#toISOString()` or `Date#toJSON()`. This preserves CommonJS compatibility and avoids polluting native prototypes. Instead, date serialization is performed internally by the `stringify()` implementation: if a date object does not define a custom `toJSON()` method, it is serialized as a [simplified ISO 8601 date-time string](http://es5.github.com/#x15.9.1.15). - -**Several native `Date#toJSON()` implementations produce date time strings that do *not* conform to the grammar outlined in the spec**. For instance, all versions of Safari 4, as well as JSON 2, fail to serialize extended years correctly. Furthermore, JSON 2 and older implementations omit the milliseconds from the date-time string (optional in ES 5, but required in 5.1). Finally, in all versions of Safari 4 and 5, serializing an invalid date will produce the string `"Invalid Date"`, rather than `null`. Because these environments exhibit other serialization bugs, however, JSON 3 will override the native `stringify()` implementation. - -Portions of the date serialization code are adapted from the [`date-shim`](https://github.com/Yaffle/date-shim) project. - -# Usage # - -## Web Browsers - - <script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js"></script> - <script> - JSON.stringify({"Hello": 123}); - // => '{"Hello":123}' - JSON.parse("[[1, 2, 3], 1, 2, 3, 4]", function (key, value) { - if (typeof value == "number") { - value = value % 2 ? "Odd" : "Even"; - } - return value; - }); - // => [["Odd", "Even", "Odd"], "Odd", "Even", "Odd", "Even"] - </script> - -**When used in a web browser**, JSON 3 exposes an additional `JSON3` object containing the `noConflict()` and `runInContext()` functions, as well as aliases to the `stringify()` and `parse()` functions. - -### `noConflict` and `runInContext` - -* `JSON3.noConflict()` restores the original value of the global `JSON` object and returns a reference to the `JSON3` object. -* `JSON3.runInContext([context, exports])` initializes JSON 3 using the given `context` object (e.g., `window`, `global`, etc.), or the global object if omitted. If an `exports` object is specified, the `stringify()`, `parse()`, and `runInContext()` functions will be attached to it instead of a new object. - -### Asynchronous Module Loaders - -JSON 3 is defined as an [anonymous module](https://github.com/amdjs/amdjs-api/wiki/AMD#define-function-) for compatibility with [RequireJS](http://requirejs.org/), [`curl.js`](https://github.com/cujojs/curl), and other asynchronous module loaders. - - <script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.js"></script> - <script> - require({ - "paths": { - "json3": "./path/to/json3" - } - }, ["json3"], function (JSON) { - JSON.parse("[1, 2, 3]"); - // => [1, 2, 3] - }); - </script> - -To avoid issues with third-party scripts, **JSON 3 is exported to the global scope even when used with a module loader**. If this behavior is undesired, `JSON3.noConflict()` can be used to restore the global `JSON` object to its original value. - -## CommonJS Environments - - var JSON3 = require("./path/to/json3"); - JSON3.parse("[1, 2, 3]"); - // => [1, 2, 3] - -## JavaScript Engines - - load("path/to/json3.js"); - JSON.stringify({"Hello": 123, "Good-bye": 456}, ["Hello"], "\t"); - // => '{\n\t"Hello": 123\n}' - -# Compatibility # - -JSON 3 has been **tested** with the following web browsers, CommonJS environments, and JavaScript engines. - -## Web Browsers - -- Windows [Internet Explorer](http://www.microsoft.com/windows/internet-explorer), version 6.0 and higher -- Mozilla [Firefox](http://www.mozilla.com/firefox), version 1.0 and higher -- Apple [Safari](http://www.apple.com/safari), version 2.0 and higher -- [Opera](http://www.opera.com) 7.02 and higher -- [Mozilla](http://sillydog.org/narchive/gecko.php) 1.0, [Netscape](http://sillydog.org/narchive/) 6.2.3, and [SeaMonkey](http://www.seamonkey-project.org/) 1.0 and higher - -## CommonJS Environments - -- [Node](http://nodejs.org/) 0.2.6 and higher -- [RingoJS](http://ringojs.org/) 0.4 and higher -- [Narwhal](http://narwhaljs.org/) 0.3.2 and higher - -## JavaScript Engines - -- Mozilla [Rhino](http://www.mozilla.org/rhino) 1.5R5 and higher -- WebKit [JSC](https://trac.webkit.org/wiki/JSC) -- Google [V8](http://code.google.com/p/v8) - -## Known Incompatibilities - -* Attempting to serialize the `arguments` object may produce inconsistent results across environments due to specification version differences. As a workaround, please convert the `arguments` object to an array first: `JSON.stringify([].slice.call(arguments, 0))`. - -## Required Native Methods - -JSON 3 assumes that the following methods exist and function as described in the ECMAScript specification: - -- The `Number`, `String`, `Array`, `Object`, `Date`, `SyntaxError`, and `TypeError` constructors. -- `String.fromCharCode` -- `Object#toString` -- `Function#call` -- `Math.floor` -- `Number#toString` -- `Date#valueOf` -- `String.prototype`: `indexOf`, `charCodeAt`, `charAt`, `slice`. -- `Array.prototype`: `push`, `pop`, `join`. - -# Contribute # - -Check out a working copy of the JSON 3 source code with [Git](http://git-scm.com/): - - $ git clone git://github.com/bestiejs/json3.git - $ cd json3 - -If you'd like to contribute a feature or bug fix, you can [fork](http://help.github.com/fork-a-repo/) JSON 3, commit your changes, and [send a pull request](http://help.github.com/send-pull-requests/). Please make sure to update the unit tests in the `test` directory as well. - -Alternatively, you can use the [GitHub issue tracker](https://github.com/bestiejs/json3/issues) to submit bug reports, feature requests, and questions, or send tweets to [@kitcambridge](http://twitter.com/kitcambridge). - -JSON 3 is released under the [MIT License](http://kit.mit-license.org/). diff --git a/platforms/browser/www/lib/json3/bower.json b/platforms/browser/www/lib/json3/bower.json deleted file mode 100644 index 7215dada..00000000 --- a/platforms/browser/www/lib/json3/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT" -} diff --git a/platforms/browser/www/lib/json3/lib/json3.js b/platforms/browser/www/lib/json3/lib/json3.js deleted file mode 100644 index 4817c9e7..00000000 --- a/platforms/browser/www/lib/json3/lib/json3.js +++ /dev/null @@ -1,902 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = typeof define === "function" && define.amd; - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root["Object"]()); - exports || (exports = root["Object"]()); - - // Native constructor aliases. - var Number = context["Number"] || root["Number"], - String = context["String"] || root["String"], - Object = context["Object"] || root["Object"], - Date = context["Date"] || root["Date"], - SyntaxError = context["SyntaxError"] || root["SyntaxError"], - TypeError = context["TypeError"] || root["TypeError"], - Math = context["Math"] || root["Math"], - nativeJSON = context["JSON"] || root["JSON"]; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty, forEach, undef; - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - try { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - // Safari < 2.0.2 stores the internal millisecond time value correctly, - // but clips the values returned by the date methods to the range of - // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - } catch (exception) {} - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] !== undef) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("json-parse"); - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - try { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undef && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undef) === undef && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undef && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undef]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undef, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - } catch (exception) { - stringifySupported = false; - } - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse; - if (typeof parse == "function") { - try { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - var parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - try { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - } catch (exception) {} - if (parseSupported) { - try { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - } catch (exception) {} - } - if (parseSupported) { - try { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - } catch (exception) {} - } - } - } - } catch (exception) { - parseSupported = false; - } - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - } - - // Internal: Determines if a property is a direct property of the given - // object. Delegates to the native `Object#hasOwnProperty` method. - if (!(isProperty = objectProto.hasOwnProperty)) { - isProperty = function (property) { - var members = {}, constructor; - if ((members.__proto__ = null, members.__proto__ = { - // The *proto* property cannot be set multiple times in recent - // versions of Firefox and SeaMonkey. - "toString": 1 - }, members).toString != getClass) { - // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but - // supports the mutable *proto* property. - isProperty = function (property) { - // Capture and break the object's prototype chain (see section 8.6.2 - // of the ES 5.1 spec). The parenthesized expression prevents an - // unsafe transformation by the Closure Compiler. - var original = this.__proto__, result = property in (this.__proto__ = null, this); - // Restore the original prototype chain. - this.__proto__ = original; - return result; - }; - } else { - // Capture a reference to the top-level `Object` constructor. - constructor = members.constructor; - // Use the `constructor` property to simulate `Object#hasOwnProperty` in - // other environments. - isProperty = function (property) { - var parent = (this.constructor || constructor).prototype; - return property in this && !(property in parent && this[property] === parent[property]); - }; - } - members = null; - return isProperty.call(this, property); - }; - } - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - forEach = function (object, callback) { - var size = 0, Properties, members, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - members = new Properties(); - for (property in members) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(members, property)) { - size++; - } - } - Properties = members = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); - }; - } else if (size == 2) { - // Safari <= 2.0.4 enumerates shadowed properties twice. - forEach = function (object, callback) { - // Create a set of iterated properties. - var members = {}, isFunction = getClass.call(object) == functionClass, property; - for (property in object) { - // Store each property name to prevent double enumeration. The - // `prototype` property of functions is not enumerated due to cross- - // environment inconsistencies. - if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forEach(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var quote = function (value) { - var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; - var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); - for (; index < length; index++) { - var charCode = value.charCodeAt(index); - // If the character is a control character, append its Unicode or - // shorthand escape sequence; otherwise, append the character as-is. - switch (charCode) { - case 8: case 9: case 10: case 12: case 13: case 34: case 92: - result += Escapes[charCode]; - break; - default: - if (charCode < 32) { - result += unicodePrefix + toPaddedString(2, charCode.toString(16)); - break; - } - result += useCharIndex ? symbols[index] : value.charAt(index); - } - } - return result + '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; - try { - // Necessary for host object support. - value = object[property]; - } catch (exception) {} - if (typeof value == "object" && value) { - className = getClass.call(value); - if (className == dateClass && !isProperty.call(value, "toJSON")) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - if (getDay) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - } else { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - } - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - } else { - value = null; - } - } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { - // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the - // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 - // ignores all `toJSON` methods on these objects unless they are - // defined directly on an instance. - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - if (value === null) { - return "null"; - } - className = getClass.call(value); - if (className == booleanClass) { - // Booleans are represented literally. - return "" + value; - } else if (className == numberClass) { - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - } else if (className == stringClass) { - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undef ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forEach(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undef) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - if ((className = getClass.call(filter)) == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); - } - } - if (width) { - if ((className = getClass.call(width)) == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - if (source.slice(Index, Index + 4) == "true") { - Index += 4; - return true; - } else if (source.slice(Index, Index + 5) == "false") { - Index += 5; - return false; - } else if (source.slice(Index, Index + 4) == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undef) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forEach` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(value, length, callback); - } - } else { - forEach(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports["runInContext"] = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root["JSON3"], - isRestored = false; - - var JSON3 = runInContext(root, (root["JSON3"] = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root["JSON3"] = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - define(function () { - return JSON3; - }); - } -}).call(this); diff --git a/platforms/browser/www/lib/json3/lib/json3.min.js b/platforms/browser/www/lib/json3/lib/json3.min.js deleted file mode 100644 index 5f896fa0..00000000 --- a/platforms/browser/www/lib/json3/lib/json3.min.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -(function(){function N(p,r){function q(a){if(q[a]!==w)return q[a];var c;if("bug-string-char-index"==a)c="a"!="a"[0];else if("json"==a)c=q("json-stringify")&&q("json-parse");else{var e;if("json-stringify"==a){c=r.stringify;var b="function"==typeof c&&s;if(b){(e=function(){return 1}).toJSON=e;try{b="0"===c(0)&&"0"===c(new t)&&'""'==c(new A)&&c(u)===w&&c(w)===w&&c()===w&&"1"===c(e)&&"[1]"==c([e])&&"[null]"==c([w])&&"null"==c(null)&&"[null,null,null]"==c([w,u,null])&&'{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'== -c({a:[e,!0,!1,null,"\x00\b\n\f\r\t"]})&&"1"===c(null,e)&&"[\n 1,\n 2\n]"==c([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==c(new C(-864E13))&&'"+275760-09-13T00:00:00.000Z"'==c(new C(864E13))&&'"-000001-01-01T00:00:00.000Z"'==c(new C(-621987552E5))&&'"1969-12-31T23:59:59.999Z"'==c(new C(-1))}catch(f){b=!1}}c=b}if("json-parse"==a){c=r.parse;if("function"==typeof c)try{if(0===c("0")&&!c(!1)){e=c('{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}');var n=5==e.a.length&&1===e.a[0];if(n){try{n=!c('"\t"')}catch(d){}if(n)try{n= -1!==c("01")}catch(g){}if(n)try{n=1!==c("1.")}catch(m){}}}}catch(X){n=!1}c=n}}return q[a]=!!c}p||(p=k.Object());r||(r=k.Object());var t=p.Number||k.Number,A=p.String||k.String,H=p.Object||k.Object,C=p.Date||k.Date,G=p.SyntaxError||k.SyntaxError,K=p.TypeError||k.TypeError,L=p.Math||k.Math,I=p.JSON||k.JSON;"object"==typeof I&&I&&(r.stringify=I.stringify,r.parse=I.parse);var H=H.prototype,u=H.toString,v,B,w,s=new C(-0xc782b5b800cec);try{s=-109252==s.getUTCFullYear()&&0===s.getUTCMonth()&&1===s.getUTCDate()&& -10==s.getUTCHours()&&37==s.getUTCMinutes()&&6==s.getUTCSeconds()&&708==s.getUTCMilliseconds()}catch(Q){}if(!q("json")){var D=q("bug-string-char-index");if(!s)var x=L.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],E=function(a,c){return M[c]+365*(a-1970)+x((a-1969+(c=+(1<c)))/4)-x((a-1901+c)/100)+x((a-1601+c)/400)};(v=H.hasOwnProperty)||(v=function(a){var c={},e;(c.__proto__=null,c.__proto__={toString:1},c).toString!=u?v=function(a){var c=this.__proto__;a=a in(this.__proto__=null,this);this.__proto__= -c;return a}:(e=c.constructor,v=function(a){var c=(this.constructor||e).prototype;return a in this&&!(a in c&&this[a]===c[a])});c=null;return v.call(this,a)});B=function(a,c){var e=0,b,f,n;(b=function(){this.valueOf=0}).prototype.valueOf=0;f=new b;for(n in f)v.call(f,n)&&e++;b=f=null;e?B=2==e?function(a,c){var e={},b="[object Function]"==u.call(a),f;for(f in a)b&&"prototype"==f||v.call(e,f)||!(e[f]=1)||!v.call(a,f)||c(f)}:function(a,c){var e="[object Function]"==u.call(a),b,f;for(b in a)e&&"prototype"== -b||!v.call(a,b)||(f="constructor"===b)||c(b);(f||v.call(a,b="constructor"))&&c(b)}:(f="valueOf toString toLocaleString propertyIsEnumerable isPrototypeOf hasOwnProperty constructor".split(" "),B=function(a,c){var e="[object Function]"==u.call(a),b,h=!e&&"function"!=typeof a.constructor&&F[typeof a.hasOwnProperty]&&a.hasOwnProperty||v;for(b in a)e&&"prototype"==b||!h.call(a,b)||c(b);for(e=f.length;b=f[--e];h.call(a,b)&&c(b));});return B(a,c)};if(!q("json-stringify")){var U={92:"\\\\",34:'\\"',8:"\\b", -12:"\\f",10:"\\n",13:"\\r",9:"\\t"},y=function(a,c){return("000000"+(c||0)).slice(-a)},R=function(a){for(var c='"',b=0,h=a.length,f=!D||10<h,n=f&&(D?a.split(""):a);b<h;b++){var d=a.charCodeAt(b);switch(d){case 8:case 9:case 10:case 12:case 13:case 34:case 92:c+=U[d];break;default:if(32>d){c+="\\u00"+y(2,d.toString(16));break}c+=f?n[b]:a.charAt(b)}}return c+'"'},O=function(a,c,b,h,f,n,d){var g,m,k,l,p,r,s,t,q;try{g=c[a]}catch(z){}if("object"==typeof g&&g)if(m=u.call(g),"[object Date]"!=m||v.call(g, -"toJSON"))"function"==typeof g.toJSON&&("[object Number]"!=m&&"[object String]"!=m&&"[object Array]"!=m||v.call(g,"toJSON"))&&(g=g.toJSON(a));else if(g>-1/0&&g<1/0){if(E){l=x(g/864E5);for(m=x(l/365.2425)+1970-1;E(m+1,0)<=l;m++);for(k=x((l-E(m,0))/30.42);E(m,k+1)<=l;k++);l=1+l-E(m,k);p=(g%864E5+864E5)%864E5;r=x(p/36E5)%24;s=x(p/6E4)%60;t=x(p/1E3)%60;p%=1E3}else m=g.getUTCFullYear(),k=g.getUTCMonth(),l=g.getUTCDate(),r=g.getUTCHours(),s=g.getUTCMinutes(),t=g.getUTCSeconds(),p=g.getUTCMilliseconds(); -g=(0>=m||1E4<=m?(0>m?"-":"+")+y(6,0>m?-m:m):y(4,m))+"-"+y(2,k+1)+"-"+y(2,l)+"T"+y(2,r)+":"+y(2,s)+":"+y(2,t)+"."+y(3,p)+"Z"}else g=null;b&&(g=b.call(c,a,g));if(null===g)return"null";m=u.call(g);if("[object Boolean]"==m)return""+g;if("[object Number]"==m)return g>-1/0&&g<1/0?""+g:"null";if("[object String]"==m)return R(""+g);if("object"==typeof g){for(a=d.length;a--;)if(d[a]===g)throw K();d.push(g);q=[];c=n;n+=f;if("[object Array]"==m){k=0;for(a=g.length;k<a;k++)m=O(k,g,b,h,f,n,d),q.push(m===w?"null": -m);a=q.length?f?"[\n"+n+q.join(",\n"+n)+"\n"+c+"]":"["+q.join(",")+"]":"[]"}else B(h||g,function(a){var c=O(a,g,b,h,f,n,d);c!==w&&q.push(R(a)+":"+(f?" ":"")+c)}),a=q.length?f?"{\n"+n+q.join(",\n"+n)+"\n"+c+"}":"{"+q.join(",")+"}":"{}";d.pop();return a}};r.stringify=function(a,c,b){var h,f,n,d;if(F[typeof c]&&c)if("[object Function]"==(d=u.call(c)))f=c;else if("[object Array]"==d){n={};for(var g=0,k=c.length,l;g<k;l=c[g++],(d=u.call(l),"[object String]"==d||"[object Number]"==d)&&(n[l]=1));}if(b)if("[object Number]"== -(d=u.call(b))){if(0<(b-=b%1))for(h="",10<b&&(b=10);h.length<b;h+=" ");}else"[object String]"==d&&(h=10>=b.length?b:b.slice(0,10));return O("",(l={},l[""]=a,l),f,n,h,"",[])}}if(!q("json-parse")){var V=A.fromCharCode,W={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},b,J,l=function(){b=J=null;throw G();},z=function(){for(var a=J,c=a.length,e,h,f,k,d;b<c;)switch(d=a.charCodeAt(b),d){case 9:case 10:case 13:case 32:b++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e= -D?a.charAt(b):a[b],b++,e;case 34:e="@";for(b++;b<c;)if(d=a.charCodeAt(b),32>d)l();else if(92==d)switch(d=a.charCodeAt(++b),d){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=W[d];b++;break;case 117:h=++b;for(f=b+4;b<f;b++)d=a.charCodeAt(b),48<=d&&57>=d||97<=d&&102>=d||65<=d&&70>=d||l();e+=V("0x"+a.slice(h,b));break;default:l()}else{if(34==d)break;d=a.charCodeAt(b);for(h=b;32<=d&&92!=d&&34!=d;)d=a.charCodeAt(++b);e+=a.slice(h,b)}if(34==a.charCodeAt(b))return b++,e;l();default:h= -b;45==d&&(k=!0,d=a.charCodeAt(++b));if(48<=d&&57>=d){for(48==d&&(d=a.charCodeAt(b+1),48<=d&&57>=d)&&l();b<c&&(d=a.charCodeAt(b),48<=d&&57>=d);b++);if(46==a.charCodeAt(b)){for(f=++b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}d=a.charCodeAt(b);if(101==d||69==d){d=a.charCodeAt(++b);43!=d&&45!=d||b++;for(f=b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}return+a.slice(h,b)}k&&l();if("true"==a.slice(b,b+4))return b+=4,!0;if("false"==a.slice(b,b+5))return b+=5,!1;if("null"==a.slice(b, -b+4))return b+=4,null;l()}return"$"},P=function(a){var c,b;"$"==a&&l();if("string"==typeof a){if("@"==(D?a.charAt(0):a[0]))return a.slice(1);if("["==a){for(c=[];;b||(b=!0)){a=z();if("]"==a)break;b&&(","==a?(a=z(),"]"==a&&l()):l());","==a&&l();c.push(P(a))}return c}if("{"==a){for(c={};;b||(b=!0)){a=z();if("}"==a)break;b&&(","==a?(a=z(),"}"==a&&l()):l());","!=a&&"string"==typeof a&&"@"==(D?a.charAt(0):a[0])&&":"==z()||l();c[a.slice(1)]=P(z())}return c}l()}return a},T=function(a,b,e){e=S(a,b,e);e=== -w?delete a[b]:a[b]=e},S=function(a,b,e){var h=a[b],f;if("object"==typeof h&&h)if("[object Array]"==u.call(h))for(f=h.length;f--;)T(h,f,e);else B(h,function(a){T(h,a,e)});return e.call(a,b,h)};r.parse=function(a,c){var e,h;b=0;J=""+a;e=P(z());"$"!=z()&&l();b=J=null;return c&&"[object Function]"==u.call(c)?S((h={},h[""]=e,h),"",c):e}}}r.runInContext=N;return r}var K=typeof define==="function"&&define.amd,F={"function":!0,object:!0},G=F[typeof exports]&&exports&&!exports.nodeType&&exports,k=F[typeof window]&& -window||this,t=G&&F[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;!t||t.global!==t&&t.window!==t&&t.self!==t||(k=t);if(G&&!K)N(k,G);else{var L=k.JSON,Q=k.JSON3,M=!1,A=N(k,k.JSON3={noConflict:function(){M||(M=!0,k.JSON=L,k.JSON3=Q,L=Q=null);return A}});k.JSON={parse:A.parse,stringify:A.stringify}}K&&define(function(){return A})}).call(this); diff --git a/platforms/browser/www/lib/lodash/.bower.json b/platforms/browser/www/lib/lodash/.bower.json deleted file mode 100644 index f8119955..00000000 --- a/platforms/browser/www/lib/lodash/.bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lodash", - "version": "2.4.1", - "main": "dist/lodash.compat.js", - "ignore": [ - ".*", - "*.custom.*", - "*.template.*", - "*.map", - "*.md", - "/*.min.*", - "/lodash.js", - "index.js", - "component.json", - "package.json", - "doc", - "modularize", - "node_modules", - "perf", - "test", - "vendor" - ], - "homepage": "https://github.com/lodash/lodash", - "_release": "2.4.1", - "_resolution": { - "type": "version", - "tag": "2.4.1", - "commit": "c7aa842eded639d6d90a5714d3195a8802c86687" - }, - "_source": "git://github.com/lodash/lodash.git", - "_target": "~2.4.1", - "_originalSource": "lodash" -} \ No newline at end of file diff --git a/platforms/browser/www/lib/lodash/LICENSE.txt b/platforms/browser/www/lib/lodash/LICENSE.txt deleted file mode 100644 index 49869bba..00000000 --- a/platforms/browser/www/lib/lodash/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> -Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/platforms/browser/www/lib/lodash/bower.json b/platforms/browser/www/lib/lodash/bower.json deleted file mode 100644 index a6f139d7..00000000 --- a/platforms/browser/www/lib/lodash/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "lodash", - "version": "2.4.1", - "main": "dist/lodash.compat.js", - "ignore": [ - ".*", - "*.custom.*", - "*.template.*", - "*.map", - "*.md", - "/*.min.*", - "/lodash.js", - "index.js", - "component.json", - "package.json", - "doc", - "modularize", - "node_modules", - "perf", - "test", - "vendor" - ] -} diff --git a/platforms/browser/www/lib/moment/moment.js b/platforms/browser/www/lib/moment/moment.js deleted file mode 100644 index c003e95f..00000000 --- a/platforms/browser/www/lib/moment/moment.js +++ /dev/null @@ -1,3606 +0,0 @@ -//! moment.js -//! version : 2.11.1 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; - - var hookCallback; - - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - m._isValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } - } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } - - return m; - } - - function isUndefined(input) { - return input === void 0; - } - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - var momentProperties = utils_hooks__hooks.momentProperties = []; - - function copyConfig(to, from) { - var i, prop, val; - - if (!isUndefined(from._isAMomentObject)) { - to._isAMomentObject = from._isAMomentObject; - } - if (!isUndefined(from._i)) { - to._i = from._i; - } - if (!isUndefined(from._f)) { - to._f = from._f; - } - if (!isUndefined(from._l)) { - to._l = from._l; - } - if (!isUndefined(from._strict)) { - to._strict = from._strict; - } - if (!isUndefined(from._tzm)) { - to._tzm = from._tzm; - } - if (!isUndefined(from._isUTC)) { - to._isUTC = from._isUTC; - } - if (!isUndefined(from._offset)) { - to._offset = from._offset; - } - if (!isUndefined(from._pf)) { - to._pf = getParsingFlags(from); - } - if (!isUndefined(from._locale)) { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (!isUndefined(val)) { - to[prop] = val; - } - } - } - - return to; - } - - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; - } - } - - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } - - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function Locale() { - } - - // internal storage for locale config files - var locales = {}; - var globalLocale; - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (isUndefined(values)) { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } - - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } - } - - return globalLocale._abbr; - } - - function defineLocale (name, values) { - if (values !== null) { - values.abbr = name; - locales[name] = locales[name] || new Locale(); - locales[name].set(values); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - } - - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return globalLocale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - } - - var aliases = {}; - - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } - - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; - } - - function get_set__get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; - } - - function get_set__set (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - // MOMENTS - - function getSet (units, value) { - var unit; - if (typeof units === 'object') { - for (unit in units) { - this.set(unit, units[unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; - } - - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } - - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var formatTokenFunctions = {}; - - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } - } - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - - // any word (or two) characters or numbers including two/three word month in arabic. - // includes scottish gaelic two word and hyphenated months - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - - - var regexes = {}; - - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } - - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } - - return regexes[token](config._strict, config._locale); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - })); - } - - function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - var tokens = {}; - - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } - - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } - - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } - - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - // FORMATTING - - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); - - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); - - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); - - // ALIASES - - addUnitAlias('month', 'M'); - - // PARSING - - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', function (isStrict, locale) { - return locale.monthsShortRegex(isStrict); - }); - addRegexToken('MMMM', function (isStrict, locale) { - return locale.monthsRegex(isStrict); - }); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); - - // LOCALES - - var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m, format) { - return isArray(this._months) ? this._months[m.month()] : - this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m, format) { - return isArray(this._monthsShort) ? this._monthsShort[m.month()] : - this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - } - - // MOMENTS - - function setMonth (mom, value) { - var dayOfMonth; - - if (!mom.isValid()) { - // No op - return mom; - } - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } - } - - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } - - var defaultMonthsShortRegex = matchWord; - function monthsShortRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsShortStrictRegex; - } else { - return this._monthsShortRegex; - } - } else { - return this._monthsShortStrictRegex && isStrict ? - this._monthsShortStrictRegex : this._monthsShortRegex; - } - } - - var defaultMonthsRegex = matchWord; - function monthsRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsStrictRegex; - } else { - return this._monthsRegex; - } - } else { - return this._monthsStrictRegex && isStrict ? - this._monthsStrictRegex : this._monthsRegex; - } - } - - function computeMonthsParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var shortPieces = [], longPieces = [], mixedPieces = [], - i, mom; - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); - } - // Sorting makes sure if one month (or abbr) is a prefix of another it - // will match the longer piece. - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._monthsShortRegex = this._monthsRegex; - this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')$', 'i'); - this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')$', 'i'); - } - - function checkOverflow (m) { - var overflow; - var a = m._a; - - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - if (getParsingFlags(m)._overflowWeeks && overflow === -1) { - overflow = WEEK; - } - if (getParsingFlags(m)._overflowWeekday && overflow === -1) { - overflow = WEEKDAY; - } - - getParsingFlags(m).overflow = overflow; - } - - return m; - } - - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (firstTime) { - warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], - ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], - ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], - ['GGGG-[W]WW', /\d{4}-W\d\d/, false], - ['YYYY-DDD', /\d{4}-\d{3}/], - ['YYYY-MM', /\d{4}-\d\d/, false], - ['YYYYYYMMDD', /[+-]\d{10}/], - ['YYYYMMDD', /\d{8}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], - ['HH:mm:ss', /\d\d:\d\d:\d\d/], - ['HH:mm', /\d\d:\d\d/], - ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], - ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], - ['HHmmss', /\d\d\d\d\d\d/], - ['HHmm', /\d\d\d\d/], - ['HH', /\d\d/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), - allowTime, dateFormat, timeFormat, tzFormat; - - if (match) { - getParsingFlags(config).iso = true; - - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(match[1])) { - dateFormat = isoDates[i][0]; - allowTime = isoDates[i][2] !== false; - break; - } - } - if (dateFormat == null) { - config._isValid = false; - return; - } - if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(match[3])) { - // match[2] should be 'T' or space - timeFormat = (match[2] || ' ') + isoTimes[i][0]; - break; - } - } - if (timeFormat == null) { - config._isValid = false; - return; - } - } - if (!allowTime && timeFormat != null) { - config._isValid = false; - return; - } - if (match[4]) { - if (tzRegex.exec(match[4])) { - tzFormat = 'Z'; - } else { - config._isValid = false; - return; - } - } - config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); - - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } - - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } - - utils_hooks__hooks.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { - date.setFullYear(y); - } - return date; - } - - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - - //the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { - date.setUTCFullYear(y); - } - return date; - } - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; - }); - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // HOOKS - - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', false); - - function getIsLeapYear () { - return isLeapYear(this.year()); - } - - // start-of-first-week - start-of-year - function firstWeekOffset(year, dow, doy) { - var // first-week day -- which january is always in the first week (4 for iso, 1 for other) - fwd = 7 + dow - doy, - // first-week day local weekday -- which local weekday is fwd - fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; - - return -fwdlw + fwd - 1; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, dow, doy) { - var localWeekday = (7 + weekday - dow) % 7, - weekOffset = firstWeekOffset(year, dow, doy), - dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, - resYear, resDayOfYear; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } - - return { - year: resYear, - dayOfYear: resDayOfYear - }; - } - - function weekOfYear(mom, dow, doy) { - var weekOffset = firstWeekOffset(mom.year(), dow, doy), - week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, - resWeek, resYear; - - if (week < 1) { - resYear = mom.year() - 1; - resWeek = week + weeksInYear(resYear, dow, doy); - } else if (week > weeksInYear(mom.year(), dow, doy)) { - resWeek = week - weeksInYear(mom.year(), dow, doy); - resYear = mom.year() + 1; - } else { - resYear = mom.year(); - resWeek = week; - } - - return { - week: resWeek, - year: resYear - }; - } - - function weeksInYear(year, dow, doy) { - var weekOffset = firstWeekOffset(year, dow, doy), - weekOffsetNext = firstWeekOffset(year + 1, dow, doy); - return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; - } - - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; - } - - function currentDateArray(config) { - // hooks is actually the exported moment object - var nowValue = new Date(utils_hooks__hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; - } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; - } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } - } else { - // default to begining of week - weekday = dow; - } - } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - } - - // constant that refers to the ISO standard - utils_hooks__hooks.ISO_8601 = function () {}; - - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } - - config._a = []; - getParsingFlags(config).empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && - config._a[HOUR] <= 12 && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } - - - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; - - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; - } else { - // this is not supposed to happen - return hour; - } - } - - // date from string and array of format strings - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; - - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - - getParsingFlags(tempConfig).score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { - return obj && parseInt(obj, 10); - }); - - configFromArray(config); - } - - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); - - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; - } else { - configFromInput(config); - } - - if (!valid__isValid(config)) { - config._d = null; - } - - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(utils_hooks__hooks.now()); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } - } - - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } - - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } - - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other < this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other > this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - } - - function max () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - } - - var now = function () { - return Date.now ? Date.now() : +(new Date()); - }; - - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = locale_locales__getLocale(); - - this._bubble(); - } - - function isDuration (obj) { - return obj instanceof Duration; - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } - - offset('Z', ':'); - offset('ZZ', ''); - - // PARSING - - addRegexToken('Z', matchShortOffset); - addRegexToken('ZZ', matchShortOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(matchShortOffset, input); - }); - - // HELPERS - - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - - function offsetFromString(matcher, string) { - var matches = ((string || '').match(matcher) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? minutes : -minutes; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } - - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } - - // HOOKS - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; - - // MOMENTS - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (!this.isValid()) { - return input != null ? this : NaN; - } - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(matchShortOffset, input); - } else if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } - - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - - this.utcOffset(input, keepLocalTime); - - return this; - } else { - return -this.utcOffset(); - } - } - - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } - - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(matchOffset, this._i)); - } - return this; - } - - function hasAlignedHourOffset (input) { - if (!this.isValid()) { - return false; - } - input = input ? local__createLocal(input).utcOffset() : 0; - - return (this.utcOffset() - input) % 60 === 0; - } - - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (!isUndefined(this._isDSTShifted)) { - return this._isDSTShifted; - } - - var c = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } - - return this._isDSTShifted; - } - - function isLocal () { - return this.isValid() ? !this._isUTC : false; - } - - function isUtcOffset () { - return this.isValid() ? this._isUTC : false; - } - - function isUtc () { - return this.isValid() ? this._isUTC && this._offset === 0 : false; - } - - // ASP.NET json date format regex - var aspNetRegex = /(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - var isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; - - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; - - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - d : parseIso(match[4], sign), - h : parseIso(match[5], sign), - m : parseIso(match[6], sign), - s : parseIso(match[7], sign), - w : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - } - - create__createDuration.fn = Duration.prototype; - - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - if (!(base.isValid() && other.isValid())) { - return {milliseconds: 0, months: 0}; - } - - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } - - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - - if (!mom.isValid()) { - // No op - return; - } - - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } - - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); - - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - - var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]); - - return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } - - function isAfter (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return +this > +localInput; - } else { - return +localInput < +this.clone().startOf(units); - } - } - - function isBefore (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return +this < +localInput; - } else { - return +this.clone().endOf(units) < +localInput; - } - } - - function isBetween (from, to, units) { - return this.isAfter(from, units) && this.isBefore(to, units); - } - - function isSame (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input), - inputMs; - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - return +this === +localInput; - } else { - inputMs = +localInput; - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - } - - function isSameOrAfter (input, units) { - return this.isSame(input, units) || this.isAfter(input,units); - } - - function isSameOrBefore (input, units) { - return this.isSame(input, units) || this.isBefore(input,units); - } - - function diff (input, units, asFloat) { - var that, - zoneDelta, - delta, output; - - if (!this.isValid()) { - return NaN; - } - - that = cloneWithOffset(input, this); - - if (!that.isValid()) { - return NaN; - } - - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } - - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } - - return -(wholeMonthDiff + adjust); - } - - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } - - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if (isFunction(Date.prototype.toISOString)) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } - - function format (inputString) { - var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); - return this.localeData().postformat(output); - } - - function from (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } - - function to (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - function locale (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - } - - var lang = deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ); - - function localeData () { - return this._locale; - } - - function startOf (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } - - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } - - function to_type__valueOf () { - return +this._d - ((this._offset || 0) * 60000); - } - - function unix () { - return Math.floor(+this / 1000); - } - - function toDate () { - return this._offset ? new Date(+this) : this._d; - } - - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } - - function toObject () { - var m = this; - return { - years: m.year(), - months: m.month(), - date: m.date(), - hours: m.hours(), - minutes: m.minutes(), - seconds: m.seconds(), - milliseconds: m.milliseconds() - }; - } - - function toJSON () { - // JSON.stringify(new Date(NaN)) === 'null' - return this.isValid() ? this.toISOString() : 'null'; - } - - function moment_valid__isValid () { - return valid__isValid(this); - } - - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } - - function invalidAt () { - return getParsingFlags(this).overflow; - } - - function creationData() { - return { - input: this._i, - format: this._f, - locale: this._locale, - isUTC: this._isUTC, - strict: this._strict - }; - } - - // FORMATTING - - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); - - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); - - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } - - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - - // ALIASES - - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PARSING - - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); - - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // MOMENTS - - function getSetWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, - this.week(), - this.weekday(), - this.localeData()._week.dow, - this.localeData()._week.doy); - } - - function getSetISOWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, this.isoWeek(), this.isoWeekday(), 1, 4); - } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } - - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } - - function getSetWeekYearHelper(input, week, weekday, dow, doy) { - var weeksTarget; - if (input == null) { - return weekOfYear(this, dow, doy).year; - } else { - weeksTarget = weeksInYear(input, dow, doy); - if (week > weeksTarget) { - week = weeksTarget; - } - return setWeekAll.call(this, input, week, weekday, dow, doy); - } - } - - function setWeekAll(weekYear, week, weekday, dow, doy) { - var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), - date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); - - // console.log("got", weekYear, week, weekday, "set", date.toISOString()); - this.year(date.getUTCFullYear()); - this.month(date.getUTCMonth()); - this.date(date.getUTCDate()); - return this; - } - - // FORMATTING - - addFormatToken('Q', 0, 'Qo', 'quarter'); - - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PARSING - - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); - - // MOMENTS - - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } - - // FORMATTING - - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PARSING - - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); - - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); - - // HELPERS - - // LOCALES - - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } - - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; - - function localeFirstDayOfWeek () { - return this._week.dow; - } - - function localeFirstDayOfYear () { - return this._week.doy; - } - - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - // FORMATTING - - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PARSING - - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); - - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); - - // MOMENTS - - var getSetDayOfMonth = makeGetSet('Date', true); - - // FORMATTING - - addFormatToken('d', 0, 'do', 'day'); - - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); - - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); - - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); - - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PARSING - - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', matchWord); - addRegexToken('ddd', matchWord); - addRegexToken('dddd', matchWord); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { - var weekday = config._locale.weekdaysParse(input, token, config._strict); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); - - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); - - // HELPERS - - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } - - if (!isNaN(input)) { - return parseInt(input, 10); - } - - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } - - return null; - } - - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m, format) { - return isArray(this._weekdays) ? this._weekdays[m.day()] : - this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; - } - - function localeWeekdaysParse (weekdayName, format, strict) { - var i, mom, regex; - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._minWeekdaysParse = []; - this._shortWeekdaysParse = []; - this._fullWeekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - - mom = local__createLocal([2000, 1]).day(i); - if (strict && !this._fullWeekdaysParse[i]) { - this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); - this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); - this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); - } - if (!this._weekdaysParse[i]) { - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } - - // MOMENTS - - function getSetDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - } - - function getSetLocaleDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - - function getSetISODayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } - - // FORMATTING - - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PARSING - - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); - - // HELPERS - - // MOMENTS - - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } - - // FORMATTING - - function hFormat() { - return this.hours() % 12 || 12; - } - - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, hFormat); - - addFormatToken('hmm', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); - }); - - addFormatToken('hmmss', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - addFormatToken('Hmm', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2); - }); - - addFormatToken('Hmmss', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } - - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } - - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addRegexToken('hmm', match3to4); - addRegexToken('hmmss', match5to6); - addRegexToken('Hmm', match3to4); - addRegexToken('Hmmss', match5to6); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('Hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - }); - addParseToken('Hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - }); - - // LOCALES - - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); - - // FORMATTING - - addFormatToken('m', ['mm', 2], 0, 'minute'); - - // ALIASES - - addUnitAlias('minute', 'm'); - - // PARSING - - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); - - // MOMENTS - - var getSetMinute = makeGetSet('Minutes', false); - - // FORMATTING - - addFormatToken('s', ['ss', 2], 0, 'second'); - - // ALIASES - - addUnitAlias('second', 's'); - - // PARSING - - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); - - // MOMENTS - - var getSetSecond = makeGetSet('Seconds', false); - - // FORMATTING - - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); - - - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PARSING - - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); - - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } - - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } - - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS - - var getSetMillisecond = makeGetSet('Milliseconds', false); - - // FORMATTING - - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); - - // MOMENTS - - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isSameOrAfter = isSameOrAfter; - momentPrototype__proto.isSameOrBefore = isSameOrBefore; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = toJSON; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - momentPrototype__proto.creationData = creationData; - - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; - - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; - - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; - - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; - - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; - - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); - - var momentPrototype = momentPrototype__proto; - - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } - - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } - - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return isFunction(output) ? output.call(mom, now) : output; - } - - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; - - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; - - if (format || !formatUpper) { - return format; - } - - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; - - function ordinal (number) { - return this._ordinal.replace('%d', number); - } - - function preParsePostFormat (string) { - return string; - } - - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (isFunction(output)) ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return isFunction(format) ? format(output) : format.replace(/%s/i, output); - } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (isFunction(prop)) { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - - var prototype__proto = Locale.prototype; - - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; - - // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - prototype__proto._monthsRegex = defaultMonthsRegex; - prototype__proto.monthsRegex = monthsRegex; - prototype__proto._monthsShortRegex = defaultMonthsShortRegex; - prototype__proto.monthsShortRegex = monthsShortRegex; - - // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } - - function list (format, index, field, count, setter) { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - - if (index != null) { - return lists__get(format, index, field, setter); - } - - var i; - var out = []; - for (i = 0; i < count; i++) { - out[i] = lists__get(format, i, field, setter); - } - return out; - } - - function lists__listMonths (format, index) { - return list(format, index, 'months', 12, 'month'); - } - - function lists__listMonthsShort (format, index) { - return list(format, index, 'monthsShort', 12, 'month'); - } - - function lists__listWeekdays (format, index) { - return list(format, index, 'weekdays', 7, 'day'); - } - - function lists__listWeekdaysShort (format, index) { - return list(format, index, 'weekdaysShort', 7, 'day'); - } - - function lists__listWeekdaysMin (format, index) { - return list(format, index, 'weekdaysMin', 7, 'day'); - } - - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - - var mathAbs = Math.abs; - - function duration_abs__abs () { - var data = this._data; - - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); - - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); - - return this; - } - - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); - - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; - - return duration._bubble(); - } - - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } - - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } - - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } - - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; - - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; - - hours = absFloor(minutes / 60); - data.hours = hours % 24; - - days += absFloor(hours / 24); - - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - - return this; - } - - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } - - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; - } - - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; - - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - } - - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } - - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } - - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } - - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } - - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; - } - - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); - - if (withSuffix) { - output = locale.pastFuture(+this, output); - } - - return locale.postformat(output); - } - - var iso_string__abs = Math.abs; - - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; - - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; - - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; - - // Side effect imports - - // FORMATTING - - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); - - // PARSING - - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - - utils_hooks__hooks.version = '2.11.1'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.now = now; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - utils_hooks__hooks.prototype = momentPrototype; - - var _moment = utils_hooks__hooks; - - return _moment; - -})); \ No newline at end of file diff --git a/platforms/browser/www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js b/platforms/browser/www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js deleted file mode 100644 index f62801db..00000000 --- a/platforms/browser/www/plugins/cordova-plugin-device/src/browser/DeviceProxy.js +++ /dev/null @@ -1,84 +0,0 @@ -cordova.define("cordova-plugin-device.DeviceProxy", function(require, exports, module) { /* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -var browser = require('cordova/platform'); - -function getPlatform() { - return "browser"; -} - -function getModel() { - return getBrowserInfo(true); -} - -function getVersion() { - return getBrowserInfo(false); -} - -function getBrowserInfo(getModel) { - var userAgent = navigator.userAgent; - var returnVal = ''; - var offset; - - if ((offset = userAgent.indexOf('Chrome')) !== -1) { - returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7); - } else if ((offset = userAgent.indexOf('Safari')) !== -1) { - if (getModel) { - returnVal = 'Safari'; - } else { - returnVal = userAgent.substring(offset + 7); - - if ((offset = userAgent.indexOf('Version')) !== -1) { - returnVal = userAgent.substring(offset + 8); - } - } - } else if ((offset = userAgent.indexOf('Firefox')) !== -1) { - returnVal = (getModel) ? 'Firefox' : userAgent.substring(offset + 8); - } else if ((offset = userAgent.indexOf('MSIE')) !== -1) { - returnVal = (getModel) ? 'MSIE' : userAgent.substring(offset + 5); - } else if ((offset = userAgent.indexOf('Trident')) !== -1) { - returnVal = (getModel) ? 'MSIE' : '11'; - } - - if ((offset = returnVal.indexOf(';')) !== -1 || (offset = returnVal.indexOf(' ')) !== -1) { - returnVal = returnVal.substring(0, offset); - } - - return returnVal; -} - - -module.exports = { - getDeviceInfo: function (success, error) { - setTimeout(function () { - success({ - cordova: browser.cordovaVersion, - platform: getPlatform(), - model: getModel(), - version: getVersion(), - uuid: null - }); - }, 0); - } -}; - -require("cordova/exec/proxy").add("Device", module.exports); - -}); diff --git a/platforms/browser/www/plugins/cordova-plugin-device/www/device.js b/platforms/browser/www/plugins/cordova-plugin-device/www/device.js deleted file mode 100644 index ff0c5b48..00000000 --- a/platforms/browser/www/plugins/cordova-plugin-device/www/device.js +++ /dev/null @@ -1,85 +0,0 @@ -cordova.define("cordova-plugin-device.device", function(require, exports, module) { /* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var argscheck = require('cordova/argscheck'), - channel = require('cordova/channel'), - utils = require('cordova/utils'), - exec = require('cordova/exec'), - cordova = require('cordova'); - -channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); - -/** - * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the - * phone, etc. - * @constructor - */ -function Device() { - this.available = false; - this.platform = null; - this.version = null; - this.uuid = null; - this.cordova = null; - this.model = null; - this.manufacturer = null; - this.isVirtual = null; - this.serial = null; - - var me = this; - - channel.onCordovaReady.subscribe(function() { - me.getInfo(function(info) { - //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - //TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - me.uuid = info.uuid; - me.cordova = buildLabel; - me.model = info.model; - me.isVirtual = info.isVirtual; - me.manufacturer = info.manufacturer || 'unknown'; - me.serial = info.serial || 'unknown'; - channel.onCordovaInfoReady.fire(); - },function(e) { - me.available = false; - utils.alert("[ERROR] Error initializing Cordova: " + e); - }); - }); -} - -/** - * Get device info - * - * @param {Function} successCallback The function to call when the heading data is available - * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) - */ -Device.prototype.getInfo = function(successCallback, errorCallback) { - argscheck.checkArgs('fF', 'Device.getInfo', arguments); - exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); -}; - -module.exports = new Device(); - -}); diff --git a/platforms/browser/www/robots.txt b/platforms/browser/www/robots.txt deleted file mode 100644 index 94174950..00000000 --- a/platforms/browser/www/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# robotstxt.org - -User-agent: * diff --git a/platforms/browser/www/scripts/app.js b/platforms/browser/www/scripts/app.js deleted file mode 100644 index 057cc822..00000000 --- a/platforms/browser/www/scripts/app.js +++ /dev/null @@ -1,249 +0,0 @@ -// 'use strict'; - -/** - * @ngdoc overview - * @name livewellApp - * @description - * # livewellApp - * - * Main module of the application. - */ -angular - .module('livewellApp', [ - 'ngAnimate', - 'ngCookies', - 'ngResource', - 'ngRoute', - 'ngSanitize', - 'ngTouch', - 'highcharts-ng', - 'angularMoment' - ]) - .config(function ($routeProvider) { - $routeProvider - .when('/', { - templateUrl: 'views/home.html', - controller: 'HomeCtrl' - }) - .when('/main', { - templateUrl: 'views/main.html', - controller: 'MainCtrl' - }) - .when('/about', { - templateUrl: 'views/about.html', - controller: 'AboutCtrl' - }) - .when('/foundations', { - templateUrl: 'views/foundations.html', - controller: 'FoundationsCtrl' - }) - .when('/checkins', { - templateUrl: 'views/checkins.html', - controller: 'CheckinsCtrl' - }) - .when('/daily_review', { - templateUrl: 'views/daily_review.html', - controller: 'DailyReviewCtrl' - }) - .when('/wellness', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/wellness/:section', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/wellness', { - templateUrl: 'views/wellness.html', - controller: 'WellnessCtrl' - }) - .when('/instructions', { - templateUrl: 'views/instructions.html', - controller: 'InstructionsCtrl' - }) - .when('/daily_review_summary', { - templateUrl: 'views/daily_review_summary.html', - controller: 'DailyReviewSummaryCtrl' - }) - .when('/daily_review_conclusion', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/daily_review_conclusion/:id', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/daily_review_conclusion/:intervention_set/:id', { - templateUrl: 'views/daily_review_conclusion.html', - controller: 'DailyReviewConclusionCtrl' - }) - .when('/medications', { - templateUrl: 'views/medications.html', - controller: 'MedicationsCtrl' - }) - .when('/skills', { - templateUrl: 'views/skills.html', - controller: 'SkillsCtrl' - }) - .when('/team', { - templateUrl: 'views/team.html', - controller: 'TeamCtrl' - }) - .when('/intervention', { - templateUrl: 'views/intervention.html', - controller: 'InterventionCtrl' - }) - .when('/intervention/:code', { - templateUrl: 'views/intervention.html', - controller: 'InterventionCtrl' - }) - .when('/exit', { - templateUrl: 'views/exit.html', - controller: 'ExitCtrl' - }) - .when('/charts', { - templateUrl: 'views/charts.html', - controller: 'ChartsCtrl' - }) - .when('/weekly_check_in', { - templateUrl: 'views/weekly_check_in.html', - controller: 'WeeklyCheckInCtrl' - }) - .when('/weekly_check_in/:questionIndex', { - templateUrl: 'views/weekly_check_in.html', - controller: 'WeeklyCheckInCtrl' - }) - .when('/daily_check_in', { - templateUrl: 'views/daily_check_in.html', - controller: 'DailyCheckInCtrl' - }) - .when('/daily_check_in/:id', { - templateUrl: 'views/daily_check_in.html', - controller: 'DailyCheckInCtrl' - }) - .when('/settings', { - templateUrl: 'views/settings.html', - controller: 'SettingsCtrl' - }) - .when('/localStorageBackupRestore', { - templateUrl: 'views/localstoragebackuprestore.html', - controller: 'LocalstoragebackuprestoreCtrl' - }) - .when('/cms', { - templateUrl: 'views/cms.html', - controller: 'CmsCtrl' - }) - .when('/admin', { - templateUrl: 'views/admin.html', - controller: 'AdminCtrl' - }) - .when('/load_interventions', { - templateUrl: 'views/load_interventions.html', - controller: 'LoadInterventionsCtrl' - }) - .when('/lesson_player/:id', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/lesson_player/', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/lesson_player/:id/:post', { - templateUrl: 'views/lesson_player.html', - controller: 'LessonPlayerCtrl' - }) - .when('/skills_fundamentals', { - templateUrl: 'views/skills_fundamentals.html', - controller: 'SkillsFundamentalsCtrl' - }) - .when('/skills_awareness', { - templateUrl: 'views/skills_awareness.html', - controller: 'SkillsAwarenessCtrl' - }) - .when('/skills_lifestyle', { - templateUrl: 'views/skills_lifestyle.html', - controller: 'SkillsLifestyleCtrl' - }) - .when('/skills_coping', { - templateUrl: 'views/skills_coping.html', - controller: 'SkillsCopingCtrl' - }) - .when('/skills_team', { - templateUrl: 'views/skills_team.html', - controller: 'SkillsTeamCtrl' - }) - .when('/skills_fundamentals', { - templateUrl: 'views/skills_fundamentals.html', - controller: 'SkillsFundamentalsCtrl' - }) - .when('/ews', { - templateUrl: 'views/ews.html', - controller: 'EwsCtrl' - }) - .when('/ews2', { - templateUrl: 'views/ews2.html', - controller: 'Ews2Ctrl' - }) - .when('/schedule', { - templateUrl: 'views/schedule.html', - controller: 'ScheduleCtrl' - }) - .when('/summary_player', { - templateUrl: 'views/summary_player.html', - controller: 'SummaryPlayerCtrl' - }) - .when('/summary_player/:id/:post', { - templateUrl: 'views/summary_player.html', - controller: 'SummaryPlayerCtrl' - }) - .when('/load_interventions_review', { - templateUrl: 'views/load_interventions_review.html', - controller: 'LoadInterventionsReviewCtrl' - }) - .when('/mySkills', { - templateUrl: 'views/myskills.html', - controller: 'MyskillsCtrl' - }) - .when('/charts', { - templateUrl: 'views/charts.html', - controller: 'ChartsCtrl' - }) - .when('/chartsMedication', { - templateUrl: 'views/chartsmedication.html', - controller: 'ChartsmedicationCtrl' - }) - .when('/chartsSleep', { - templateUrl: 'views/chartssleep.html', - controller: 'ChartssleepCtrl' - }) - .when('/chartsRoutine', { - templateUrl: 'views/chartsroutine.html', - controller: 'ChartsroutineCtrl' - }) - .when('/chartsActivity', { - templateUrl: 'views/chartsactivity.html', - controller: 'ChartsactivityCtrl' - }) - .when('/dailyReviewTester', { - templateUrl: 'views/dailyreviewtester.html', - controller: 'DailyreviewtesterCtrl' - }) - .when('/personalSnapshot', { - templateUrl: 'views/personalsnapshot.html', - controller: 'PersonalsnapshotCtrl' - }) - .when('/home', { - templateUrl: 'views/home.html', - controller: 'HomeCtrl' - }) - .when('/usereditor', { - templateUrl: 'views/usereditor.html', - controller: 'UsereditorCtrl' - }) - .otherwise({ - redirectTo: '/' - }); - }).run(function($rootScope) { - -}); diff --git a/platforms/browser/www/scripts/controllers/about.js b/platforms/browser/www/scripts/controllers/about.js deleted file mode 100644 index 7e72299c..00000000 --- a/platforms/browser/www/scripts/controllers/about.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AboutCtrl - * @description - * # AboutCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AboutCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/admin.js b/platforms/browser/www/scripts/controllers/admin.js deleted file mode 100644 index 03b340f1..00000000 --- a/platforms/browser/www/scripts/controllers/admin.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AdminCtrl - * @description - * # AdminCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AdminCtrl', function ($scope,Questions) { - - }); diff --git a/platforms/browser/www/scripts/controllers/awareness.js b/platforms/browser/www/scripts/controllers/awareness.js deleted file mode 100644 index 883f8e80..00000000 --- a/platforms/browser/www/scripts/controllers/awareness.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:AwarenessCtrl - * @description - * # AwarenessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('AwarenessCtrl', function ($scope,UserData) { - - //awareness variables - $scope.awareness = UserData.query('awareness'); - $scope.intervention_anchors = UserData.query('anchors'); - $scope.plan = UserData.query('plan'); - - $scope.showAnchors = false; - $scope.showAction = false; - $scope.showPlan = true; - - $('.awareness-btn').removeClass('btn-active'); - $('#load-plan').addClass('btn-active'); - - $scope.loadAnchors = function(){ - $scope.showAnchors = true; - $scope.showAction = false; - $scope.showPlan = false; - $('.awareness-btn').removeClass('btn-active'); - $('#load-anchors').addClass('btn-active'); - } - - $scope.loadAction = function(){ - $scope.showAnchors = false; - $scope.showAction = true; - $scope.showPlan = false; - $('.awareness-btn').removeClass('btn-active'); - $('#load-action').addClass('btn-active'); - } - - $scope.loadPlan = function(){ - $scope.showAnchors = false; - $scope.showAction = false; - $scope.showPlan = true; - $('.awareness-btn').removeClass('btn-active'); - $('#load-plan').addClass('btn-active'); - } - - - }); diff --git a/platforms/browser/www/scripts/controllers/backup b/platforms/browser/www/scripts/controllers/backup deleted file mode 100644 index d87a458c..00000000 --- a/platforms/browser/www/scripts/controllers/backup +++ /dev/null @@ -1 +0,0 @@ -"{\"awareness\":\"[{\\\"userId\\\":\\\"test\\\",\\\"order\\\":3,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"+2\\\",\\\"name\\\":\\\"Mild Up\\\",\\\"id\\\":\\\"cdd38c91ddf29885\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":4,\\\"value\\\":\\\"+1\\\",\\\"name\\\":\\\"Slight Up\\\",\\\"id\\\":\\\"d612cfee454b4a2a\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":5,\\\"value\\\":\\\"0\\\",\\\"name\\\":\\\"Balanced\\\",\\\"id\\\":\\\"83b912bed2eee8cd\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":6,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-1\\\",\\\"name\\\":\\\"Slight Down\\\",\\\"id\\\":\\\"529da655f43f3853\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":7,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-2\\\",\\\"name\\\":\\\"Mild Down\\\",\\\"id\\\":\\\"186ca99b9fa64874\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":8,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-3\\\",\\\"name\\\":\\\"Moderate Down\\\",\\\"id\\\":\\\"a4737da1b0cb1b0f\\\"},{\\\"userId\\\":\\\"test\\\",\\\"order\\\":9,\\\"response\\\":\\\"\\\",\\\"value\\\":\\\"-4\\\",\\\"name\\\":\\\"Severe Down\\\",\\\"id\\\":\\\"07f10ba389bdf871\\\"},{\\\"name\\\":\\\"Severe Up\\\",\\\"order\\\":1,\\\"response\\\":\\\"Crisis, call 911\\\",\\\"userId\\\":\\\"test\\\",\\\"value\\\":\\\"+4\\\",\\\"id\\\":\\\"bc86889da8728a75\\\"},{\\\"name\\\":\\\"Moderate Up\\\",\\\"order\\\":2,\\\"response\\\":\\\"Work closely with your psychiatrist\\\",\\\"userId\\\":\\\"test\\\",\\\"value\\\":\\\"+3\\\",\\\"id\\\":\\\"bf79863b86ad795f\\\"}]\",\"medications\":\"[{\\\"userId\\\":\\\"test\\\",\\\"name\\\":\\\"Paxil\\\",\\\"dose\\\":\\\"30mg\\\",\\\"when\\\":\\\"twice daily\\\",\\\"id\\\":\\\"1207f5105ded9947\\\"},{\\\"userId\\\":\\\"test\\\",\\\"name\\\":\\\"Havidol\\\",\\\"dose\\\":\\\"100g\\\",\\\"when\\\":\\\"every 5 minutes\\\",\\\"id\\\":\\\"1e3cf5b135943a7d\\\"}]\",\"pound\":\"[\\\"user\\\",\\\"pound\\\"]\",\"questioncriteria\":\"[{\\\"levelOrder\\\":\\\"1\\\",\\\"levelOrderValue\\\":\\\"1\\\",\\\"questionCriteriaId\\\":\\\"a1\\\",\\\"section\\\":\\\"medication\\\",\\\"id\\\":\\\"0b60522013b62834\\\"}]\",\"questionresponses\":\"[{\\\"label\\\":\\\"Not at all\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"6f04febc1dcd9901\\\"},{\\\"label\\\":\\\"Several days\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"06baf3eab84568a9\\\"},{\\\"label\\\":\\\"More than half the days\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"2255a56c9a5d7840\\\"},{\\\"label\\\":\\\"Nearly every day\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responseGroupLabel\\\":\\\"phq9\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"2b8171b28d4a9872\\\"},{\\\"label\\\":\\\" I often feel happier or more cheerful than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"dcbcb90d9073f8b9\\\"},{\\\"label\\\":\\\" I feel happier or more cheerful than usual most of the time.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"e788aab4046c2bcb\\\"},{\\\"label\\\":\\\"I feel happier or more cheerful than usual all of the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"7e6bdf02e6c088d5\\\"},{\\\"label\\\":\\\" I occasionally feel happier or more cheerful than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"responseGroupLabel\\\":\\\"amrs1\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"8afbd4f2cb39a841\\\"},{\\\"label\\\":\\\" I occasionally feel more self-confident than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"9b55a9e0c9e35a08\\\"},{\\\"label\\\":\\\" I often feel more self-confident than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"3b32f497db74d831\\\"},{\\\"label\\\":\\\" I feel more self-confident than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"b82d2f1d064b39f5\\\"},{\\\"label\\\":\\\" I feel extremely self-confident all of the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"responseGroupLabel\\\":\\\"amrs2\\\",\\\"value\\\":\\\" 3\\\",\\\"id\\\":\\\"e9634a047324d807\\\"},{\\\"label\\\":\\\" I occasionally talk more than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"248dd7f49401b816\\\"},{\\\"label\\\":\\\" I occasionally need less sleep than usual\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"26daf6c957e1d83b\\\"},{\\\"label\\\":\\\" I frequently need less sleep than usual\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"c6b337238dac09cb\\\"},{\\\"label\\\":\\\" I often need less sleep than usual\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"a5938f5841d23a8d\\\"},{\\\"label\\\":\\\" I can go all day and night without any sleep and still not feel tired.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"responseGroupLabel\\\":\\\"amrs3\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"dd04b42fb498a867\\\"},{\\\"label\\\":\\\" I talk constantly and cannot be interrupted.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"95c03e5561173858\\\"},{\\\"label\\\":\\\" I frequently talk more than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"31d48584769878d1\\\"},{\\\"label\\\":\\\" I often talk more than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"responseGroupLabel\\\":\\\"amrs4\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"ee97165355d88836\\\"},{\\\"label\\\":\\\" I have occasionally been more active than usual.\\\",\\\"order\\\":\\\"1\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"0\\\",\\\"id\\\":\\\"bbfc7642a646194e\\\"},{\\\"label\\\":\\\" I have often been more active than usual.\\\",\\\"order\\\":\\\"2\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"1\\\",\\\"id\\\":\\\"d62f39be9109c8fe\\\"},{\\\"label\\\":\\\" I have frequently been more active than usual.\\\",\\\"order\\\":\\\"3\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"2\\\",\\\"id\\\":\\\"d1c802de87aefa16\\\"},{\\\"label\\\":\\\" I am constantly active or on the go all the time.\\\",\\\"order\\\":\\\"4\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"responseGroupLabel\\\":\\\"amrs5\\\",\\\"value\\\":\\\"3\\\",\\\"id\\\":\\\"b1121bbd24aaf9e7\\\"},{\\\"responseGroupId\\\":\\\"a1\\\",\\\"responseGroupLabel\\\":\\\"a1\\\",\\\"order\\\":\\\"1\\\",\\\"label\\\":\\\"Page 1\\\",\\\"value\\\":\\\"1\\\",\\\"goToCriteria\\\":\\\"\\\",\\\"id\\\":\\\"d5ba075d4538bbac\\\"}]\",\"questions\":\"[{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING DOWN, DEPRESSED, OR HOPELESS?\\\",\\\"order\\\":2,\\\"questionDataLabel\\\":\\\"phq2\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"07189e9eea498a07\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by a POOR APPETITE OR OVEREATING?\\\",\\\"order\\\":5,\\\"questionDataLabel\\\":\\\"phq5\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"d4c04f0d4f0e0bc7\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING BAD ABOUT YOURSELF - OR THAT YOU ARE A FAILURE OR HAVE LET YOURSELF OR YOUR FAMILY DOWN?\\\",\\\"order\\\":6,\\\"questionDataLabel\\\":\\\"phq6\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"a1d7af08b11de878\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by TROUBLE CONCENTRATING ON THINGS, SUCH AS READING THE NEWSPAPER OR WATCHING TELEVISION?\\\",\\\"order\\\":7,\\\"questionDataLabel\\\":\\\"phq7\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"c317fef4e47308d2\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by MOVING OR SPEAKING SO SLOWLY THAT OTHER PEOPLE COULD HAVE NOTICED? OR THE OPPOSITE - BEING SO FIDGETY OR RESTLESS THAT YOU HAVE BEEN MOVING AROUND A LOT MORE THAN USUAL?\\\",\\\"order\\\":8,\\\"questionDataLabel\\\":\\\"phq8\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"3144ed93440c28ec\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by THOUGHTS THAT YOU WOULD BE BETTER OFF DEAD, OR OF HURTING YOURSELF?\\\",\\\"order\\\":9,\\\"questionDataLabel\\\":\\\"phq9\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"decf5d36ced538d0\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by TROUBLE FALLING OR STAYING ASLEEP, OR SLEEPING TOO MUCH?\\\",\\\"order\\\":3,\\\"questionDataLabel\\\":\\\"phq3\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"2bbfc1e863d4b98a\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by LITTLE INTEREST OR PLEASURE IN DOING THINGS?\\\",\\\"order\\\":1,\\\"questionDataLabel\\\":\\\"phq1\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"responses\\\":\\\"{}\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"f99a845eea530b2c\\\"},{\\\"content\\\":\\\"Over the past week, how often have you been bothered by FEELING TIRED OR HAVING LITTLE ENERGY?\\\",\\\"order\\\":4,\\\"questionDataLabel\\\":\\\"phq4\\\",\\\"questionGroup\\\":\\\"phq9\\\",\\\"required\\\":\\\"required\\\",\\\"responseGroupId\\\":\\\"phq9\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"4632c4b2ab01d86a\\\"},{\\\"questionGroup\\\":\\\"phq9\\\",\\\"order\\\":0,\\\"type\\\":\\\"html\\\",\\\"content\\\":\\\"<h2>Welcome to the Weekly Check-In!</h2>\\\",\\\"questionDataLabel\\\":\\\"\\\",\\\"responseGroupId\\\":\\\"\\\",\\\"required\\\":\\\"\\\",\\\"id\\\":\\\"d485d4c8d859f8cc\\\"},{\\\"questionGroup\\\":\\\"amrs\\\",\\\"order\\\":1,\\\"type\\\":\\\"radio\\\",\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"questionDataLabel\\\":\\\"amrs1\\\",\\\"responseGroupId\\\":\\\"amrs1\\\",\\\"required\\\":\\\"\\\",\\\"id\\\":\\\"90c7b6d682c7187f\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":2,\\\"questionDataLabel\\\":\\\"amrs2\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs2\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"430194fe140b18e8\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":3,\\\"questionDataLabel\\\":\\\"amrs4\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs4\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"ba2637d288da182f\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":4,\\\"questionDataLabel\\\":\\\"amrs3\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs3\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"23fae8ba4842c866\\\"},{\\\"content\\\":\\\"Which statement best describes the way you have been feeling?\\\",\\\"order\\\":5,\\\"questionDataLabel\\\":\\\"amrs5\\\",\\\"questionGroup\\\":\\\"amrs\\\",\\\"responseGroupId\\\":\\\"amrs5\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"53c964a687dff873\\\"},{\\\"content\\\":\\\"Where should I go next\\\",\\\"hideBackButton\\\":true,\\\"hideNextButton\\\":true,\\\"order\\\":1,\\\"questionCriteriaId\\\":\\\"a1\\\",\\\"questionDataLabel\\\":\\\"a1\\\",\\\"questionGroup\\\":\\\"cyoa\\\",\\\"responseGroupId\\\":\\\"a\\\",\\\"showBackButton\\\":\\\"false\\\",\\\"showNextButton\\\":\\\"false\\\",\\\"type\\\":\\\"radio\\\",\\\"id\\\":\\\"aed39f2a638cbb1c\\\"}]\",\"responsecriteria\":\"[]\",\"smarts\":\"[]\",\"staticcontent\":\"[{\\\"content\\\":\\\"Put in awesome text to teach people about livewell\\\",\\\"dateTimeUpdated\\\":\\\"NOW\\\",\\\"sectionKey\\\":\\\"instructions\\\",\\\"id\\\":\\\"fba0d88650522987\\\"}]\",\"team\":\"[{\\\"name\\\":\\\"Donatella Jackson\\\",\\\"role\\\":\\\"Nurse\\\",\\\"phone\\\":\\\"555.555.5555\\\",\\\"userId\\\":\\\"test\\\",\\\"id\\\":\\\"3e6ac0f8ce202a51\\\"}]\",\"user\":\"[{\\\"id\\\":1,\\\"userID\\\":null,\\\"groupID\\\":null,\\\"loginKey\\\":null,\\\"created_at\\\":\\\"2014-09-18T22:29:39.609Z\\\"}]\",\"userresponses\":\"[]\"}" \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/charts.js b/platforms/browser/www/scripts/controllers/charts.js deleted file mode 100644 index b46fb271..00000000 --- a/platforms/browser/www/scripts/controllers/charts.js +++ /dev/null @@ -1,192 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ChartsactivityCtrl - * @description - * # ChartsactivityCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ChartsCtrl', function($scope, $timeout,Pound) { - - $scope.pageTitle = 'My Charts'; - - - $timeout(function(){$('td').tooltip()}); - - $scope.dailyCheckInResponseArray = Pound.find('dailyCheckIn'); - $scope.recodedResponses = JSON.parse(localStorage['recodedResponses']); - $scope.timezoneoffset = new Date().getTimezoneOffset() / 60; - - $scope.graph = [] - if ($scope.dailyCheckInResponseArray.length > 7) { - $scope.graph[6] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 1]; - $scope.graph[5] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 2]; - $scope.graph[4] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 3]; - $scope.graph[3] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 4]; - $scope.graph[2] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 5]; - $scope.graph[1] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 6]; - $scope.graph[0] = $scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 7]; - } else { - $scope.graph = $scope.dailyCheckInResponseArray; - } - - console.log($scope.graph); - - $scope.wellness = []; - $scope.dates = []; - - for (var i = 0; i < $scope.graph.length; i++) { - debugger; - $scope.wellness.push(parseInt($scope.graph[i].wellness)); - $scope.dates.push(moment($scope.graph[i].created_at).format('MM-DD')); - } - - - - $scope.routine = { - class: function(value) { - var returnvalue = null; - switch (value) { - case 0: - returnvalue = ['c','missed two']; - break; - case 1: - returnvalue = ['b','missed one']; - break; - case 2: - returnvalue = ['a','in range']; - break; - } - return returnvalue - } - }; - - $scope.medication = { - class: function(value) { - var returnvalue = null; - switch (value) { - case 0: - returnvalue = ['c','took none']; - break; - case 0.5: - returnvalue = ['b','took some']; - break; - case 1: - returnvalue = ['a','took all']; - break; - } - return returnvalue - } - }; - - $scope.sleep = { - class: function(value) { - var returnvalue = null; - - switch (value) { - case -1: - returnvalue = ['c','too little']; - break; - case -0.5: - returnvalue = ['b','too little']; - break; - case 0: - returnvalue = ['a','in range']; - break; - case .5: - returnvalue = ['b','too much']; - break; - case 1: - returnvalue = ['c','too much']; - break; - } - - return returnvalue - } - }; - - - - - Highcharts.theme = { - exporting: { - enabled: false - }, - chart: { - backgroundColor: 'transparent', - style: { - fontFamily: "sans-serif" - }, - plotBorderColor: '#606063' - }, - yAxis: { - max:3, - min:-3, - gridLineColor: '#707073', - labels: { - style: { - color: '#E0E0E3' - } - }, - lineColor: 'white', - minorGridLineColor: '#505053', - minorGridLineWidth: '1.5', - tickColor: '#707073', - }, - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - background2: '#505053', - dataLabelsColor: '#B0B0B3', - textColor: '#C0C0C0', - contrastTextColor: '#F0F0F3', - maskColor: 'rgba(255,255,255,0.3)' - }; - - Highcharts.setOptions(Highcharts.theme); - - $scope.config = { - title: { - text: ' ', - x: -20, //center, - enabled: false - }, - subtitle: { - text: '', - x: -20 - }, - xAxis: { - categories: $scope.dates - }, - yAxis: { - title: { - text: '' - }, - plotLines: [{ - value: 0, - width: 1.5, - color: 'white' - }], - labels: { - enabled: false - } - }, - tooltip: { - valueSuffix: '', - enabled: false - }, - legend: { - layout: 'vertical', - align: 'right', - verticalAlign: 'middle', - borderWidth: 0, - enabled: false - }, - series: [{ - showInLegend: false, - name: 'Wellness', - data: $scope.wellness - }] - }; - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/checkins.js b/platforms/browser/www/scripts/controllers/checkins.js deleted file mode 100644 index a65a9f33..00000000 --- a/platforms/browser/www/scripts/controllers/checkins.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:CheckinsCtrl - * @description - * # CheckinsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('CheckinsCtrl', function ($scope, $location) { - $scope.pageTitle = 'Check Ins'; - - - - }); diff --git a/platforms/browser/www/scripts/controllers/cms.js b/platforms/browser/www/scripts/controllers/cms.js deleted file mode 100644 index 48226abc..00000000 --- a/platforms/browser/www/scripts/controllers/cms.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:CmsCtrl - * @description - * # CmsCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('CmsCtrl', function ($scope,Questions) { - - - $scope.formFieldTypes = ['checkbox','radio','html','text','textarea','select','email','time','phone','url']; - - $scope.questionGroups = Questions.uniqueQuestionGroups(); - $scope.questions = Questions.questions; - $scope.responses = Questions.responses; - $scope.questionCriteria = Questions.questionCriteria; - $scope.responseCriteria = Questions.responseCriteria; - - console.log(Questions); - - $scope.viewTypes = [{name:'Table', value:'table'},{name:'Map', value:'map'}]; - $scope.viewType = 'table'; - $scope.questionGroup = 'cyoa'; - $scope.selectedQuestions = _.sortBy(Questions.query($scope.questionGroup),'questionGroup'); - - $scope.showGroup = function(){ - $scope.selectedQuestions = _.sortBy(Questions.query($scope.questionGroup),'questionGroup'); - console.log($scope.selectedQuestions); - - } - -$scope.editResponses = function(id){ - $scope.modalTitle = 'Edit Responses'; - $scope.responseGroupId = id; - $scope.showResponses = _.where($scope.responses,{responseGroupId:$scope.responseGroupId}); - $scope.uniqueResponseGroups = _.pluck(_.uniq($scope.responses,'responseGroupId'),'responseGroupId'); - $scope.goesToOptions = $scope.selectedQuestions; - $("#responseModal").modal(); -} - -$scope.saveResponses = function(id){ - $("#responseModal").modal('toggle'); - Questions.save('responses',$scope.responses); - Questions.save('responseCriteria',$scope.responseCriteria); -} - - - -$scope.editQuestion = function(id){ - -} - -$scope.addQuestion = function(id){ - -} -$scope.deleteQuestion = function(id){ - -} - -$scope.editCriteria = function(id){ - -} - - - - -}); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/daily_check_in.js b/platforms/browser/www/scripts/controllers/daily_check_in.js deleted file mode 100644 index 3076cfa5..00000000 --- a/platforms/browser/www/scripts/controllers/daily_check_in.js +++ /dev/null @@ -1,500 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyCheckInCtrl - * @description - * # DailyCheckInCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyCheckInCtrl', function($scope, $location, $routeParams, Pound, Guid) { - $scope.pageTitle = 'Daily Check In'; - - $scope.dailyCheckIn = { - gotUp: '', - toBed: '', - wellness: '', - medications: '', - startTime: new Date() - }; - - $scope.emergency = false; - - $scope.warningPhoneNumber = null; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0] != undefined) { - $scope.phoneNumber = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].phone; - } else { - $scope.phoneNumber = '312-503-1886'; - } - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachNumber = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].phone; - } else { - $scope.coachNumber = '312-503-1886'; - } - - $scope.responses = [{ - order: 1, - callCoach: true, - response: '-4', - label: '-4', - tailoredMessage: 'some message', - warningMessage: 'You rated yourself as being in a crisis with a -4, if this is correct, close and press submit.' - }, { - order: 2, - callCoach: false, - response: '-3', - label: '-3', - tailoredMessage: 'some message' - }, { - order: 3, - callCoach: false, - response: '-2', - label: '-2', - tailoredMessage: 'some message' - }, { - order: 4, - callCoach: false, - response: '-1', - label: '-1', - tailoredMessage: 'some message' - }, { - order: 5, - callCoach: false, - response: '0', - label: '0', - tailoredMessage: 'some message' - }, { - order: 6, - callCoach: false, - response: '1', - label: '+1', - tailoredMessage: 'some message' - }, { - order: 7, - callCoach: false, - response: '2', - label: '+2', - tailoredMessage: 'some message' - }, { - order: 8, - callCoach: false, - response: '3', - label: '+3', - tailoredMessage: 'some message' - }, { - order: 9, - callCoach: true, - response: '4', - label: '+4', - tailoredMessage: 'some message', - warningMessage: 'You rated yourself as being in a crisis with a +4, if this is correct, close and press submit.' - }]; - - $scope.times = [{ - value: "0000", - label: "12:00AM" - }, { - value: "0030", - label: "12:30AM" - }, { - value: "0100", - label: "1:00AM" - }, { - value: "0130", - label: "1:30AM" - }, { - value: "0200", - label: "2:00AM" - }, { - value: "0230", - label: "2:30AM" - }, { - value: "0300", - label: "3:00AM" - }, { - value: "0330", - label: "3:30AM" - }, { - value: "0400", - label: "4:00AM" - }, { - value: "0430", - label: "4:30AM" - }, { - value: "0500", - label: "5:00AM" - }, { - value: "0530", - label: "5:30AM" - }, { - value: "0600", - label: "6:00AM" - }, { - value: "0630", - label: "6:30AM" - }, { - value: "0700", - label: "7:00AM" - }, { - value: "0730", - label: "7:30AM" - }, { - value: "0800", - label: "8:00AM" - }, { - value: "0830", - label: "8:30AM" - }, { - value: "0900", - label: "9:00AM" - }, { - value: "0930", - label: "9:30AM" - }, { - value: "1000", - label: "10:00AM" - }, { - value: "1030", - label: "10:30AM" - }, { - value: "1100", - label: "11:00AM" - }, { - value: "1130", - label: "11:30AM" - }, { - value: "1200", - label: "12:00PM" - }, { - value: "1230", - label: "12:30PM" - }, { - value: "1300", - label: "1:00PM" - }, { - value: "1330", - label: "1:30PM" - }, { - value: "1400", - label: "2:00PM" - }, { - value: "1430", - label: "2:30PM" - }, { - value: "1500", - label: "3:00PM" - }, { - value: "1530", - label: "3:30PM" - }, { - value: "1600", - label: "4:00PM" - }, { - value: "1630", - label: "4:30PM" - }, { - value: "1700", - label: "5:00PM" - }, { - value: "1730", - label: "5:30PM" - }, { - value: "1800", - label: "6:00PM" - }, { - value: "1830", - label: "6:30PM" - }, { - value: "1900", - label: "7:00PM" - }, { - value: "1930", - label: "7:30PM" - }, { - value: "2000", - label: "8:00PM" - }, { - value: "2030", - label: "8:30PM" - }, { - value: "2100", - label: "9:00PM" - }, { - value: "2130", - label: "9:30PM" - }, { - value: "2200", - label: "10:00PM" - }, { - value: "2230", - label: "10:30PM" - }, { - value: "2300", - label: "11:00PM" - }, { - value: "2330", - label: "11:30PM" - }]; - - $scope.hours = [{ - value: "0", - label: "0 hrs" - }, { - value: "0.5", - label: "0.5 hrs" - }, { - value: "1", - label: "1 hrs" - }, { - value: "1.5", - label: "1.5 hrs" - }, { - value: "2", - label: "2 hrs" - }, { - value: "2.5", - label: "2.5 hrs" - }, { - value: "3", - label: "3 hrs" - }, { - value: "3.5", - label: "3.5 hrs" - }, { - value: "4", - label: "4 hrs" - }, { - value: "4.5", - label: "4.5 hrs" - }, { - value: "5", - label: "5 hrs" - }, { - value: "5.5", - label: "5.5 hrs" - }, { - value: "6", - label: "6 hrs" - }, { - value: "6.5", - label: "6.5 hrs" - }, { - value: "7", - label: "7 hrs" - }, { - value: "7.5", - label: "7.5 hrs" - }, { - value: "8", - label: "8 hrs" - }, { - value: "8.5", - label: "8.5 hrs" - }, { - value: "9", - label: "9 hrs" - }, { - value: "9.5", - label: "9.5 hrs" - }, { - value: "10", - label: "10 hrs" - }, { - value: "10.5", - label: "10.5 hrs" - }, { - value: "11", - label: "11 hrs" - }, { - value: "11.5", - label: "11.5 hrs" - }, { - value: "12", - label: "12 hrs" - }, { - value: "12.5", - label: "12.5 hrs" - }, { - value: "13", - label: "13 hrs" - }, { - value: "13.5", - label: "13.5 hrs" - }, { - value: "14", - label: "14 hrs" - }, { - value: "14.5", - label: "14.5 hrs" - }, { - value: "15", - label: "15 hrs" - }, { - value: "15.5", - label: "15.5 hrs" - }, { - value: "16", - label: "16 hrs" - }, { - value: "16.5", - label: "16.5 hrs" - }, { - value: "17", - label: "17 hrs" - }, { - value: "17.5", - label: "17.5 hrs" - }, { - value: "18", - label: "18 hrs" - }, { - value: "18.5", - label: "18.5 hrs" - }, { - value: "19", - label: "19 hrs" - }, { - value: "19.5", - label: "19.5 hrs" - }, { - value: "20", - label: "20 hrs" - }, { - value: "20.5", - label: "20.5 hrs" - }, { - value: "21", - label: "21 hrs" - }, { - value: "21.5", - label: "21.5 hrs" - }, { - value: "22", - label: "22 hrs" - }, { - value: "22.5", - label: "22.5 hrs" - }, { - value: "23", - label: "23 hrs" - }, { - value: "23.5", - label: "23.5 hrs" - }, { - value: "24", - label: "24 hrs" - }]; - - - $scope.saveCheckIn = function() { - - var allAnswersFinished = $scope.dailyCheckIn.gotUp != '' & $scope.dailyCheckIn.toBed != '' & $scope.dailyCheckIn.medications != '' & $scope.dailyCheckIn.wellness != '' & $scope.dailyCheckIn.sleepDuration != ''; - - if (allAnswersFinished) { - $scope.dailyCheckIn.endTime = new Date(); - if ($scope.dailyCheckIn.wellness == 4 || $scope.dailyCheckIn.wellness == -4) { - $scope.emergency = true; - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - coachEmail: $scope.coachEmail, - message: 'User answered with a ' + $scope.dailyCheckIn.wellness + ' on the daily check in' - }).execute(); - } - - Pound.add('dailyCheckIn', $scope.dailyCheckIn); - $scope.nextId = $routeParams.id; - - var sessionID = Guid.create(); - - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'toBed', - questionValue: $scope.dailyCheckIn.toBed - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'gotUp', - questionValue: $scope.dailyCheckIn.gotUp - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'wellness', - questionValue: $scope.dailyCheckIn.wellness - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'medications', - questionValue: $scope.dailyCheckIn.medications - }).execute(); - (new PurpleRobot()).emitReading('livewell_survey_data', { - survey: 'daily', - sessionGUID: sessionID, - startTime: $scope.dailyCheckIn.startTime, - questionDataLabel: 'sleepDuration', - questionValue: $scope.dailyCheckIn.sleepDuration - }).execute(); - - $("#continue").modal(); - } else { - $("#warning").modal(); - $scope.selectedWarningMessage = 'You must respond to all questions on this page!'; - } - } - - $scope.highlight = function(id, response) { - - $('label').removeClass('highlight'); - $(id).addClass('highlight'); - $scope.dailyCheckIn.wellness = response; - - } - - $scope.warning = function(response) { - - if (response.warningMessage.length > 0) { - $scope.selectedWarningMessage = response.warningMessage; - if (response.callCoach == true) { - $scope.warningPhoneNumber = $scope.phoneNumber; - } else { - $scope.warningPhoneNumber = null; - } - $("#warning").modal(); - } - - - } - - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/daily_review.js b/platforms/browser/www/scripts/controllers/daily_review.js deleted file mode 100644 index b83c2238..00000000 --- a/platforms/browser/www/scripts/controllers/daily_review.js +++ /dev/null @@ -1,150 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewCtrl - * @description - * # DailyReviewCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewCtrl', function($scope, $routeParams, $timeout, UserData, Pound, DailyReviewAlgorithm, ClinicalStatusUpdate, Guid) { - $scope.pageTitle = "Daily Review"; - - Pound.add('dailyReviewStarted', { - userStarted: true, - code: $scope.code - }); - - $timeout(function(){$('.add-tooltip').tooltip()}); - - $scope.routineData = UserData.query('sleepRoutineRanges'); - - $scope.cleanTime = function(militaryTime){ - - var time = militaryTime.toString(); - var cleanTime = ''; - - if (time[0] == '0' && time[1] == '0'){ - cleanTime = '12:' + time[2] + time[3]; - } else if( time[0] == '0'){ - cleanTime = time[1] + ":" + time[2] + time[3]; - } else if (parseInt(time[0] + time[1]) > 12 ){ - cleanTime = (parseInt(time[0] + time[1]) - 12) + ":" + time[2] + time[3]; - } else { - cleanTime = time[0] + time[1] + ":" + time[2] + time[3]; - } - - if (parseInt(militaryTime) > 1200){ - return cleanTime + ' PM' - } - else { - return cleanTime + ' AM' - } - - } - - $scope.interventionGroups = UserData.query('dailyReview'); - - $scope.updatedClinicalStatus = {}; - - var runAlgorithm = function(Pound) { - var object = {}; - var sessionID = Guid.create(); - - object.code = DailyReviewAlgorithm.code(); - $scope.updatedClinicalStatus = ClinicalStatusUpdate.execute(); - - (new PurpleRobot()).emitReading('livewell_dailyreviewcode', { - sessionGUID: sessionID, - code: object.code - }).execute(); - (new PurpleRobot()).emitReading('livewell_clinicalstatus', { - sessionGUID: sessionID, - status: $scope.updatedClinicalStatus - }).execute(); - - return object - - } - - $scope.code = runAlgorithm().code; - - //TO REMOVE - $scope.recodedResponses = DailyReviewAlgorithm.recodedResponses(); - $scope.dailyCheckInResponseArray = Pound.find('dailyCheckIn') - $scope.dailyCheckInResponses = ' |today| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 1]) + ' |t-1| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 2]) + ' |t-2| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 3]) + ' |t-3| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 4]) + ' |t-4| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 5]) + ' |t-5| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 6]) + ' |t-6| ' + JSON.stringify($scope.dailyCheckInResponseArray[$scope.dailyCheckInResponseArray.length - 7]); - - //STOP REMOVE - - $scope.percentages = DailyReviewAlgorithm.percentages(); - - $(".modal-backdrop").remove(); - - var latestWarning = Pound.find('clinical_reachout')[Pound.find('clinical_reachout').length - 1]; - - if (latestWarning != undefined) { - if (latestWarning.shownToUser == undefined) { - $scope.warningMessage = Pound.find('clinical_reachout')[Pound.find('clinical_reachout').length - 1].message - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - - $scope.phoneNumber = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].phone; - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - coachEmail: $scope.coachEmail, - message: $scope.warningMessage - }).execute(); - - latestWarning.shownToUser = true; - Pound.update('clinical_reachout', latestWarning); - $scope.showWarning = true; - $("#warning").modal(); - } - } - - $scope.dailyReviewCategory = _.where($scope.interventionGroups, { - code: $scope.code - })[0].questionSet; - - $scope.interventionResponse = function() { - - if ($scope.code == 1 || $scope.code == 2) { - return 'Please contact your care provider or hospital'; - } else { - if (_.where($scope.interventionGroups, { - code: $scope.code - })[0] != undefined) { - if (typeof(_.where($scope.interventionGroups, { - code: $scope.code - })[0].response) == 'object') { - return _.where($scope.interventionGroups, { - code: $scope.code - })[0].response[Math.floor((Math.random() * _.where($scope.interventionGroups, { - code: $scope.code - })[0].response.length))] - } else { - return _.where($scope.interventionGroups, { - code: $scope.code - })[0].response - } - } - } - } - - - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/daily_review_conclusion.js b/platforms/browser/www/scripts/controllers/daily_review_conclusion.js deleted file mode 100644 index d0c7af3f..00000000 --- a/platforms/browser/www/scripts/controllers/daily_review_conclusion.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewConclusionCtrl - * @description - * # DailyReviewConclusionCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewConclusionCtrl', function ($scope, $sanitize) { - $scope.pageTitle = "Daily Review"; - $scope.lastNotification = "Keep up the good work!<br/>Check out your medication plan in Reduce Risk."; - }); diff --git a/platforms/browser/www/scripts/controllers/daily_review_summary.js b/platforms/browser/www/scripts/controllers/daily_review_summary.js deleted file mode 100644 index 9d9eb9db..00000000 --- a/platforms/browser/www/scripts/controllers/daily_review_summary.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyReviewSummaryCtrl - * @description - * # DailyReviewSummaryCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyReviewSummaryCtrl', function ($scope) { - $scope.pageTitle = "Daily Review"; - }); diff --git a/platforms/browser/www/scripts/controllers/dailyreviewtester.js b/platforms/browser/www/scripts/controllers/dailyreviewtester.js deleted file mode 100644 index 33415dc5..00000000 --- a/platforms/browser/www/scripts/controllers/dailyreviewtester.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:DailyreviewtesterCtrl - * @description - * # DailyreviewtesterCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('DailyreviewtesterCtrl', function ($scope,Pound,dailyReview) { - - $scope.collection = Pound.find('dailyCheckIn'); - - $scope.proposedIntervention = dailyReview.getCode(); - - }); diff --git a/platforms/browser/www/scripts/controllers/ews.js b/platforms/browser/www/scripts/controllers/ews.js deleted file mode 100644 index 15f57db5..00000000 --- a/platforms/browser/www/scripts/controllers/ews.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('EwsCtrl', function ($scope,$location,UserData,UserDetails,Guid) { - - $scope.pageTitle = "Weekly Check In"; - - $scope.ews = UserData.query('ews'); - - $scope.onClick=function(){ - - var el = JSON.stringify($('form').serializeArray()) || {name:'ews', value:null}; ; - var sessionID = Guid.create(); - - var payload = { - userId: UserDetails.find, - survey: 'ews', - questionDataLabel: 'ews', - questionValue: el, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading('livewell_survey_data',payload).execute(); - - $location.path('/ews2'); - - - } - - }); diff --git a/platforms/browser/www/scripts/controllers/ews2.js b/platforms/browser/www/scripts/controllers/ews2.js deleted file mode 100644 index f57c3cf7..00000000 --- a/platforms/browser/www/scripts/controllers/ews2.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('Ews2Ctrl', function ($scope,$location,UserData,UserDetails,Guid) { - - $scope.pageTitle = "Weekly Check In"; - - $scope.ews2 = UserData.query('ews2'); - - $scope.onClick=function(){ - - - var el = JSON.stringify($('form').serializeArray()) || {name:'ews', value:null}; ; - var sessionID = Guid.create(); - - var payload = { - userId: UserDetails.find, - survey: 'ews2', - questionDataLabel: 'ews2', - questionValue: el, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading('livewell_survey_data',payload).execute(); - console.log(payload); - - $location.path('/'); - - } - - - - }); diff --git a/platforms/browser/www/scripts/controllers/exit.js b/platforms/browser/www/scripts/controllers/exit.js deleted file mode 100644 index 064b8b5c..00000000 --- a/platforms/browser/www/scripts/controllers/exit.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ExitCtrl - * @description - * # ExitCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ExitCtrl', function ($scope) { - - navigator.app.exitApp(); - - }); diff --git a/platforms/browser/www/scripts/controllers/fetch_content.js b/platforms/browser/www/scripts/controllers/fetch_content.js deleted file mode 100644 index 6039c3de..00000000 --- a/platforms/browser/www/scripts/controllers/fetch_content.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:FetchContentCtrl - * @description - * # FetchContentCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('FetchContentCtrl', function ($scope,$http) { - - var SERVER_LOCATION = 'https://livewell2.firebaseio.com/'; - var SECURE_CONTENT = 'https://mohrlab.northwestern.edu/livewell-dash/content/'; - var APP_COLLECTIONS_ROUTE = 'appcollections'; - var USER_ID = $scope.userID; - var ROUTE_SUFFIX = '.json'; - - $scope.error = ''; - $scope.errorColor = 'white'; - $scope.errorClass = ''; - - var downloadContent = function(app_collections){ - - if($scope.userID != undefined){localStorage['userID'] = $scope.userID; } - - _.each(app_collections,function(el){ - $http.get(SERVER_LOCATION + "users/" + localStorage['userID'] + "/" + el.route + ROUTE_SUFFIX ) - .success(function(response) { - - if(el.route == 'team' && response == null){ - alert('THE USER HAS NOT BEEN CONFIGURED!'); - } - - if (response.length != undefined){ - localStorage[el.route] = JSON.stringify(_.compact(response)); - } - else { - localStorage[el.route] = JSON.stringify(response); - } - }).error(function(err) { - $scope.error = 'Error on: ' + el.label; - $scope.errorColor = 'red'; - }); - }) - } - - $scope.fetchSecureContent = function(){ - - $http.get(SECURE_CONTENT +'?user='+ localStorage['userID'] +'&token=' + localStorage['registrationid']) - .success(function(content) { - localStorage['secureContent'] = JSON.stringify(content); - }).error(function(err) { - $scope.error = 'No internet connection!'; - $scope.errorColor = 'red'; - }); - } - - $scope.fetchContent = function(){ - $scope.errorColor = 'green'; - $scope.fetchSecureContent(); - $http.get(SERVER_LOCATION + APP_COLLECTIONS_ROUTE + ROUTE_SUFFIX) - .success(function(app_collections) { - downloadContent(_.compact(app_collections)); - }).error(function(err) { - $scope.error = 'No internet connection!'; - $scope.errorColor = 'red'; - }); - } - - - }); diff --git a/platforms/browser/www/scripts/controllers/foundations.js b/platforms/browser/www/scripts/controllers/foundations.js deleted file mode 100644 index 3eb01464..00000000 --- a/platforms/browser/www/scripts/controllers/foundations.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:FoundationsCtrl - * @description - * # FoundationsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('FoundationsCtrl', function ($scope) { - - $scope.pageTitle = "Foundations"; - - $scope.mainLinks = [ - {name:"Overview", id:162, post:'foundations', type:'lesson_player'}, - {name:"Basic Facts ", id:183, post:'foundations', type:'lesson_player'}, - {name:"Medications", id:184, post:'foundations', type:'lesson_player'}, - {name:"Lifestyle Skills", id:185, post:'foundations', type:'lesson_player'}, - {name:"Coping Skills", id:186, post:'foundations', type:'lesson_player'}, - {name:"Team", id:187, post:'foundations', type:'lesson_player'}, - {name:"Awareness", id:188, post:'foundations', type:'lesson_player'}, - {name:"Action", id:189, post:'foundations', type:'lesson_player'}, - {name:"Conclusion", id:250, post:'foundations', type:'lesson_player'}] - - }); diff --git a/platforms/browser/www/scripts/controllers/home.js b/platforms/browser/www/scripts/controllers/home.js deleted file mode 100644 index f4daefec..00000000 --- a/platforms/browser/www/scripts/controllers/home.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:HomeCtrl - * @description - * # HomeCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('HomeCtrl', function ($scope, Pound) { - - - var possibleGreetings = ['Welcome back!','Hello!','Greetings!','Good to see you!']; - - $scope.mainLinks = [ - {name:"Foundations", href:"foundations"}, - {name:"Toolbox", href:"skills"}, - {name:"Wellness Plan", href:"wellness/resources"}, - ]; - - var requiredUserCollections = []; - - $scope.appConfigured = localStorage['appConfigured']; - - $scope.verifyUserContent = function(){ - - $scope.errorVerifyUserColor = 'green'; - } - - $scope.startTrial = function(){ - $scope.startDate = new Date().getDay() - localStorage['appConfigured'] = true; - window.location.href = ""; - } - - $scope.dailyCheckInCompleteToday = function(){ - - var collection = Pound.find('dailyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - - function dropTime(dt){ - - var datetime = dt; - - datetime.setHours(0) - datetime.setMinutes(0); - datetime.setSeconds(0); - datetime.setMilliseconds(0); - - return datetime.toString() - - } - - if (dropTime(mostRecentResponseDateTime) == dropTime(new Date()) ){ - return true - } else { - return false - } - - }; - - $scope.weeklyCheckInCompleteThisWeek = function(){ - - var collection = Pound.find('weeklyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - var now = moment(new Date()); - var lastSundayMorning = moment(new Date()).subtract(new Date().getDay(),'d').set({hour:0,minute:0,second:0,millisecond:0}); - - var validResponse = moment(mostRecentResponseDateTime).isAfter(lastSundayMorning) && moment(mostRecentResponseDateTime).isBefore(now); - - if (collection.length == 0){ - return false - } - else if (validResponse){ - return true - } else { - return false - } - - }; - - $scope.dailyReviewCompleteToday = function(){ - var dailyReviewComplete = false; - var thisMorning = moment(new Date()).set({hour:0,minute:0,second:0,millisecond:0}); - - var collection = Pound.find('dailyReviewStarted'); - var mostRecentResponse = collection[collection.length-1] || 0; - var mostRecentResponseDateTime = new Date(Date.parse(mostRecentResponse.created_at)); - - if(moment(mostRecentResponseDateTime).isAfter(thisMorning)){ - - dailyReviewComplete = true; - } - - return dailyReviewComplete - - - } - - $scope.lastDailyCheckInWasEmergency = function(){ - var collection = Pound.find('dailyCheckIn'); - var mostRecentResponse = collection[collection.length-1] || 0; - - if(mostRecentResponse.wellness != '-4' && mostRecentResponse.wellness != '4'){ - return false - } - else{ - return true - } - } - - $scope.greeting = possibleGreetings[Math.floor(Math.random()*possibleGreetings.length)]; - - $(".modal-backdrop").remove(); - - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/instructions.js b/platforms/browser/www/scripts/controllers/instructions.js deleted file mode 100644 index aa98396a..00000000 --- a/platforms/browser/www/scripts/controllers/instructions.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:InstructionsCtrl - * @description - * # InstructionsCtrl - * Controller of the livewellApp - */ - angular.module('livewellApp') - .controller('InstructionsCtrl', function ($scope, StaticContent) { - $scope.pageTitle = "Instructions"; - - $scope.mainLinks = [ - {id:198,name:"Introduction", post:"instructions"}, - {id:201,name:"Settings", post:"instructions"}, - {id:199,name:"Toolbox", post:"instructions"}, - {id:202,name:"Coach", post:"instructions"}, - {id:203,name:"Psychiatrist", post:"instructions"}, - {id:204,name:"Foundations", post:"instructions"}, - {id:205,name:"Daily Check In", post:"instructions"}, - {id:372,name:"Weekly Check In", post:"instructions"}, - {id:369,name:"Daily Review", post:"instructions"}, - {id:371,name:"Wellness Plan", post:"instructions"}, - {id:370,name:"Charts", post:"instructions"} - ] - - - }); diff --git a/platforms/browser/www/scripts/controllers/intervention.js b/platforms/browser/www/scripts/controllers/intervention.js deleted file mode 100644 index 466ab0cd..00000000 --- a/platforms/browser/www/scripts/controllers/intervention.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:InterventionCtrl - * @description - * # InterventionCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('InterventionCtrl', function ($scope, $routeParams,Questions) { - $scope.pageTitle = "Daily Review"; - - console.log($routeParams); - $scope.questionGroups = Questions.query($routeParams.code); - - $scope.hideProgressBar = true; - - var pr = new PurpleRobot(); - pr.disableTrigger('dailyCheckIn1').disableTrigger('dailyCheckIn2').disableTrigger('dailyCheckIn3').disableTrigger('dailyCheckIn4').disableTrigger('dailyCheckIn5').disableTrigger('dailyCheckIn6').execute(); - - }); diff --git a/platforms/browser/www/scripts/controllers/lesson_player.js b/platforms/browser/www/scripts/controllers/lesson_player.js deleted file mode 100644 index ca0d839f..00000000 --- a/platforms/browser/www/scripts/controllers/lesson_player.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LessonPlayerCtrl - * @description - * # LessonPlayerCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LessonPlayerCtrl', function ($scope, $routeParams, $sce, $location) { - - -$scope.getChapterContents = function (chapter_id, appContent) { - var search_criteria = { - id: parseInt(chapter_id) - }; - - var chapter_contents_list = _.where(appContent, search_criteria)[0].element_list.toString().split(","); - var chapter_contents = []; - - // console.log("Chapter selected:",_.where(appContent, search_criteria)[0]); - // console.log("Chapter contents list:",chapter_contents_list); - - _.each(chapter_contents_list, function (element) { - // console.log(parseInt(element)); - chapter_contents.push(_.where(appContent, { - id: parseInt(element) - })[0]); - }); - return chapter_contents; -}; - -$scope.lessons = JSON.parse(localStorage['lessons']); - -$scope.backButton = '&lt;'; -$scope.backButtonClass = 'btn btn-info'; -$scope.nextButton = '&gt;'; -$scope.nextButtonClass = 'btn btn-primary'; -$scope.currentSlideIndex = 0; - -$scope.pageTitle = _.where($scope.lessons, {id:parseInt($routeParams.id)})[0].pretty_name; - -$scope.currentChapterContents = $scope.getChapterContents($routeParams.id,$scope.lessons); - -$scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - - -$scope.next = function(){ - if ($scope.currentSlideIndex+1 < $scope.currentChapterContents.length){ - $scope.currentSlideIndex++; - $scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - } - else { - if ($routeParams.post == undefined) - { window.location.href = '#/';} - else { - window.location.href = '#/' + $routeParams.post; - } - } - - if ($scope.currentSlideIndex+1 == $scope.currentChapterContents.length){ - $scope.nextButton = '&gt;'; - } - else{ - $scope.nextButton = '&gt;'; - - } -} - -$scope.back = function(){ - if ($scope.currentSlideIndex > 0){ - $scope.currentSlideIndex--; - $scope.currentSlideContents = $scope.currentChapterContents[$scope.currentSlideIndex].main_content; - } - -} - -}); diff --git a/platforms/browser/www/scripts/controllers/load_interventions.js b/platforms/browser/www/scripts/controllers/load_interventions.js deleted file mode 100644 index 8bde5f7e..00000000 --- a/platforms/browser/www/scripts/controllers/load_interventions.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LoadInterventionsReviewCtrl - * @description - * # LoadInterventionsReviewCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LoadInterventionsCtrl', function ($scope, UserData, $location, $filter) { - - $scope.pageTitle = 'Topics'; - - $scope.hierarchy = UserData.query('interventionLabels'); - $scope.interventionGroups = UserData.query('dailyReview') - - debugger; - - $scope.goToIntervention = function(code){ - - $location.path('intervention/' + $filter('filter')($scope.interventionGroups,{code:code},true)[0].questionSet); - - } - - }); diff --git a/platforms/browser/www/scripts/controllers/localstoragebackuprestore.js b/platforms/browser/www/scripts/controllers/localstoragebackuprestore.js deleted file mode 100644 index a9764368..00000000 --- a/platforms/browser/www/scripts/controllers/localstoragebackuprestore.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LocalstoragebackuprestoreCtrl - * @description - * # LocalstoragebackuprestoreCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LocalstoragebackuprestoreCtrl', function ($scope, $sanitize) { - - - - $scope.initiateLocalBackup = function(){ - $scope.localStorageContents = JSON.stringify(JSON.stringify(localStorage)); - } - - $scope.restoreLocalBackup = function(){ - var restoreContent = JSON.parse(JSON.parse($scope.localStorageContents)); - - _.each(_.keys(restoreContent), function(el){ - - debugger; - localStorage[el] = eval("restoreContent." + el); - - }); - localStorage = JSON.parse($scope.localStorageContents); - //open file or copy and paste string and replace localStorage - - } - - $scope.updateRemoteService = function(serverURL){ - - //use the local app-collections store to iterate over all local collections and post to valid routes - - } - - $scope.wipeLocalStorage = function(){ - localStorage.clear(); - } - - }); diff --git a/platforms/browser/www/scripts/controllers/login.js b/platforms/browser/www/scripts/controllers/login.js deleted file mode 100644 index 2317e239..00000000 --- a/platforms/browser/www/scripts/controllers/login.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:LoginCtrl - * @description - * # LoginCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('LoginCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/main.js b/platforms/browser/www/scripts/controllers/main.js deleted file mode 100644 index 7e11947d..00000000 --- a/platforms/browser/www/scripts/controllers/main.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:MainCtrl - * @description - * # MainCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MainCtrl', function ($scope, UserDetails) { - - $scope.pageTitle = 'Main Menu'; - - $scope.mainLinks = [ - {name:"Foundations", href:"foundations"}, - {name:"Toolbox", href:"skills"}, - {name:"Wellness Plan", href:"wellness/resources"}, - ]; - - // $scope.showLogin = function(){ - - // if (UserDetails.find.id == null){ - // return true - // } - // else { - // return false - // } - - // } - - }); diff --git a/platforms/browser/www/scripts/controllers/medications.js b/platforms/browser/www/scripts/controllers/medications.js deleted file mode 100644 index c67c03e5..00000000 --- a/platforms/browser/www/scripts/controllers/medications.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MedicationsCtrl', function ($scope,UserData) { - $scope.pageTitle = "My Medications"; - $scope.medications = UserData.query('medications'); - - - }); diff --git a/platforms/browser/www/scripts/controllers/myskills.js b/platforms/browser/www/scripts/controllers/myskills.js deleted file mode 100644 index a0c0e3b2..00000000 --- a/platforms/browser/www/scripts/controllers/myskills.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:MyskillsCtrl - * @description - * # MyskillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('MyskillsCtrl', function ($scope,$location,$filter,$route) { - - $scope.currentSkillId = null; - - $scope.currentSkillContent = null; - - $scope.lessons = JSON.parse(localStorage['lessons']); - - if (JSON.parse(localStorage['mySkills'] != undefined)){ - $scope.mySkills = _.uniq(JSON.parse(localStorage['mySkills'])); - } else { - $scope.mySkills = []; - } - - $scope.skill = function(id){ - return $filter('filter')($scope.lessons,{id:id},true) - }; - - $scope.showSkill = function(id){ - $scope.currentSkillId = id; - $scope.currentSkillContent = $scope.skill(id)[0].main_content; - } - - $scope.removeSkill = function () { - - var id = $scope.currentSkillId; - var array = $scope.mySkills; - var index = array.indexOf(id); - - if (index > -1) { - array.splice(index, 1); - } - - $scope.mySkills = array; - - localStorage['mySkills'] = JSON.stringify($scope.mySkills); - - $route.reload() - - } - - - - - }); diff --git a/platforms/browser/www/scripts/controllers/personalsnapshot.js b/platforms/browser/www/scripts/controllers/personalsnapshot.js deleted file mode 100644 index c18ce6d2..00000000 --- a/platforms/browser/www/scripts/controllers/personalsnapshot.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:PersonalsnapshotCtrl - * @description - * # PersonalsnapshotCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('PersonalsnapshotCtrl', function ($scope, UserData) { - - // var sleepRoutineRanges = {}; - - // sleepRoutineRanges.MoreSevere = 12; - // sleepRoutineRanges.More = 9; - // sleepRoutineRanges.Less = 7; - // sleepRoutineRanges.LessSevere = 4; - - // sleepRoutineRanges.BedTimeStrt_MT = '2300'; - // sleepRoutineRanges.BedtimeStop_MT = '0100'; - - // sleepRoutineRanges.RiseTimeStrt_MT = '0630'; - // sleepRoutineRanges.RiseTimeStop_MT = '0830'; - - $scope.sleepRoutineRanges = UserData.query('sleepRoutineRanges'); - $scope.currentClinicalStatusCode = UserData.query('clinicalStatus').currentCode; - - }); diff --git a/platforms/browser/www/scripts/controllers/resources.js b/platforms/browser/www/scripts/controllers/resources.js deleted file mode 100644 index 2de3bf3a..00000000 --- a/platforms/browser/www/scripts/controllers/resources.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:ResourcesCtrl - * @description - * # ResourcesCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ResourcesCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/risks.js b/platforms/browser/www/scripts/controllers/risks.js deleted file mode 100644 index ed681bcc..00000000 --- a/platforms/browser/www/scripts/controllers/risks.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:RisksCtrl - * @description - * # RisksCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('RisksCtrl', function ($scope,UserData) { - //risk variables - $scope.smarts = UserData.query('smarts'); - - - - }); diff --git a/platforms/browser/www/scripts/controllers/schedule.js b/platforms/browser/www/scripts/controllers/schedule.js deleted file mode 100644 index b079ad15..00000000 --- a/platforms/browser/www/scripts/controllers/schedule.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('ScheduleCtrl', function ($scope,UserData) { - $scope.pageTitle = "My Schedule"; - $scope.schedules = UserData.query('schedule'); - - - }); diff --git a/platforms/browser/www/scripts/controllers/settings.js b/platforms/browser/www/scripts/controllers/settings.js deleted file mode 100644 index 903c8e4c..00000000 --- a/platforms/browser/www/scripts/controllers/settings.js +++ /dev/null @@ -1,269 +0,0 @@ -'use strict'; -/** - * @ngdoc function - * @name livewellApp.controller:SettingsCtrl - * @description - * # SettingsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SettingsCtrl', function($scope) { - $scope.pageTitle = 'Settings'; - $scope.times = [{ - value: "00:00", - label: "12:00AM" - }, { - value: "00:30", - label: "12:30AM" - }, { - value: "01:00", - label: "1:00AM" - }, { - value: "01:30", - label: "1:30AM" - }, { - value: "02:00", - label: "2:00AM" - }, { - value: "02:30", - label: "2:30AM" - }, { - value: "03:00", - label: "3:00AM" - }, { - value: "03:30", - label: "3:30AM" - }, { - value: "04:00", - label: "4:00AM" - }, { - value: "04:30", - label: "4:30AM" - }, { - value: "05:00", - label: "5:00AM" - }, { - value: "05:30", - label: "5:30AM" - }, { - value: "06:00", - label: "6:00AM" - }, { - value: "06:30", - label: "6:30AM" - }, { - value: "07:00", - label: "7:00AM" - }, { - value: "07:30", - label: "7:30AM" - }, { - value: "08:00", - label: "8:00AM" - }, { - value: "08:30", - label: "8:30AM" - }, { - value: "09:00", - label: "9:00AM" - }, { - value: "09:30", - label: "9:30AM" - }, { - value: "10:00", - label: "10:00AM" - }, { - value: "10:30", - label: "10:30AM" - }, { - value: "11:00", - label: "11:00AM" - }, { - value: "11:30", - label: "11:30AM" - }, { - value: "12:00", - label: "12:00PM" - }, { - value: "12:30", - label: "12:30PM" - }, { - value: "13:00", - label: "1:00PM" - }, { - value: "13:30", - label: "1:30PM" - }, { - value: "14:00", - label: "2:00PM" - }, { - value: "14:30", - label: "2:30PM" - }, { - value: "15:00", - label: "3:00PM" - }, { - value: "15:30", - label: "3:30PM" - }, { - value: "16:00", - label: "4:00PM" - }, { - value: "16:30", - label: "4:30PM" - }, { - value: "17:00", - label: "5:00PM" - }, { - value: "17:30", - label: "5:30PM" - }, { - value: "18:00", - label: "6:00PM" - }, { - value: "18:30", - label: "6:30PM" - }, { - value: "19:00", - label: "7:00PM" - }, { - value: "19:30", - label: "7:30PM" - }, { - value: "20:00", - label: "8:00PM" - }, { - value: "20:30", - label: "8:30PM" - }, { - value: "21:00", - label: "9:00PM" - }, { - value: "21:30", - label: "9:30PM" - }, { - value: "22:00", - label: "10:00PM" - }, { - value: "22:30", - label: "10:30PM" - }, { - value: "23:00", - label: "11:00PM" - }, { - value: "23:30", - label: "11:30PM" - }]; - - if (localStorage['checkinPrompt'] == undefined) { - $scope.checkinPrompt = { - value: "00:00", - label: "12:00AM" - }; - - } else { - $scope.checkinPrompt = JSON.parse(localStorage['checkinPrompt']); - } - - $scope.savePromptSchedule = function() { - - - (new PurpleRobot()).emitReading('livewell_prompt_registration', { - startTime: $scope.checkinPrompt.value, - registrationId: localStorage.registrationId - }).execute(); - - - var checkInValues = $scope.checkinPrompt.value.split(":"); - localStorage['checkinPrompt'] = JSON.stringify($scope.checkinPrompt); - //new Date(year, month, day, hours, minutes, seconds, milliseconds) - var dailyCheckInDateTime1 = new Date(2016, 0, 1, parseInt(checkInValues[0])-1, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd1 = new Date(2016, 0, 1, parseInt(checkInValues[0])-1, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime2 = new Date(2016, 0, 1, parseInt(checkInValues[0]), parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd2 = new Date(2016, 0, 1, parseInt(checkInValues[0]), parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime3 = new Date(2016, 0, 1, parseInt(checkInValues[0])+1, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd3 = new Date(2016, 0, 1, parseInt(checkInValues[0])+1, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime4 = new Date(2016, 0, 1, parseInt(checkInValues[0])+2, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd4 = new Date(2016, 0, 1, parseInt(checkInValues[0])+2, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime5 = new Date(2016, 0, 1, parseInt(checkInValues[0])+3, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd5 = new Date(2016, 0, 1, parseInt(checkInValues[0])+3, parseInt(checkInValues[1]) + 1, 0); - var dailyCheckInDateTime6 = new Date(2016, 0, 1, parseInt(checkInValues[0])+4, parseInt(checkInValues[1]), 0); - var dailyCheckinDateTimeEnd6 = new Date(2016, 0, 1, parseInt(checkInValues[0])+4, parseInt(checkInValues[1]) + 1, 0); - var dailyReviewRenewalDateTime = new Date(2016, 0, 1, 2, 0, 0); - var dailyReviewRenewalDateTimeEnd = new Date(2016, 0, 1, 2, 1, 0); - var pr = new PurpleRobot(); - - - - // var dailyCheckInDialog = - // pr.showScriptNotification({ - // title: "LiveWell", - // message: "Can you complete your LiveWell activities now?", - // isPersistent: true, - // isSticky: false, - // script: pr.launchApplication('edu.northwestern.cbits.livewell') - // }); - - // var dailyReviewRenew = - // pr.enableTrigger('dailyCheckIn1').enableTrigger('dailyCheckIn2').enableTrigger('dailyCheckIn3').enableTrigger('dailyCheckIn4').enableTrigger('dailyCheckIn5').enableTrigger('dailyCheckIn6'); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn1', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime1, - // endAt: dailyCheckinDateTimeEnd1 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn2', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime2, - // endAt: dailyCheckinDateTimeEnd2 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn3', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime3, - // endAt: dailyCheckinDateTimeEnd3 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn4', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime4, - // endAt: dailyCheckinDateTimeEnd4 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn5', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime5, - // endAt: dailyCheckinDateTimeEnd5 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyCheckIn6', - // random: false, - // script: dailyCheckInDialog, - // startAt: dailyCheckInDateTime6, - // endAt: dailyCheckinDateTimeEnd6 - // }).execute(); - - // (new PurpleRobot()).updateTrigger({ - // triggerId: 'dailyReviewReset', - // random: false, - // script: dailyReviewRenew, - // startAt: dailyReviewRenewalDateTime, - // endAt: dailyReviewRenewalDateTimeEnd - // }).execute(); - - $("form").append('<div class="alert alert-success">Your prompt times have been updated.</div>'); - - }; - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/setup.js b/platforms/browser/www/scripts/controllers/setup.js deleted file mode 100644 index 2e0ba11b..00000000 --- a/platforms/browser/www/scripts/controllers/setup.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SetupCtrl - * @description - * # SetupCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SetupCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/skills.js b/platforms/browser/www/scripts/controllers/skills.js deleted file mode 100644 index 2836c901..00000000 --- a/platforms/browser/www/scripts/controllers/skills.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsCtrl', function ($scope) { - $scope.pageTitle = "Toolbox"; - - $scope.mainLinks = [ - {id:'fundamentals',name:"Making Changes"}, - {id:'awareness',name:"Self-Assessment"}, - {id:'lifestyle',name:"Lifestyle"}, - {id:'coping',name:"Coping"}, - {id:'team',name:"Team"}, - - ] - - - }); diff --git a/platforms/browser/www/scripts/controllers/skills_awareness.js b/platforms/browser/www/scripts/controllers/skills_awareness.js deleted file mode 100644 index 1ed61db5..00000000 --- a/platforms/browser/www/scripts/controllers/skills_awareness.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsAwarenessCtrl - * @description - * # SkillsAwarenessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsAwarenessCtrl', function ($scope) { - - $scope.pageTitle = "Self-Assessment"; - - $scope.mainLinks = [ - {name:"Symptoms and Triggers", id:194, post:'skills_awareness'}, - {name:"Skills and Strengths", id:196, post:'skills_awareness'}, - {name:"Supports and Environment", id:197, post:'skills_awareness'} - ] - }); - - - - diff --git a/platforms/browser/www/scripts/controllers/skills_coping.js b/platforms/browser/www/scripts/controllers/skills_coping.js deleted file mode 100644 index 0fd71d97..00000000 --- a/platforms/browser/www/scripts/controllers/skills_coping.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCopingCtrl - * @description - * # SkillsCopingCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsCopingCtrl', function ($scope) { - - $scope.pageTitle = "Coping"; - - $scope.mainLinks = [ - {name:"Depression - Dial Up", id:550, post:'skills_coping',type:'summary_player'}, - {name:"Mania - Dial Down", id:551, post:'skills_coping',type:'summary_player'} - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/skills_fundamentals.js b/platforms/browser/www/scripts/controllers/skills_fundamentals.js deleted file mode 100644 index f835b891..00000000 --- a/platforms/browser/www/scripts/controllers/skills_fundamentals.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsFundamentalsCtrl - * @description - * # SkillsFundamentalsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsFundamentalsCtrl', function ($scope) { - - $scope.pageTitle = "Making Changes"; - - $scope.mainLinks = [ - {name:"Get Prepared", id:190, post:'skills_fundamentals'}, - {name:"Set Goal", id:193, post:'skills_fundamentals'}, - {name:"Develop Plan",id:191,post:'skills_fundamentals'}, - {name:"Monitor Behavior", id:192, post:'skills_fundamentals'}, - {name:"Evaluate Performance",id:195,post:'skills_fundamentals'} - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/skills_lifestyle.js b/platforms/browser/www/scripts/controllers/skills_lifestyle.js deleted file mode 100644 index 9785c8f3..00000000 --- a/platforms/browser/www/scripts/controllers/skills_lifestyle.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsLifestyleCtrl - * @description - * # SkillsLifestyleCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsLifestyleCtrl', function ($scope) { - $scope.pageTitle = "Lifestyle"; - - $scope.mainLinks = [ - {name:"Sleep", id:543, post:'skills_lifestyle'}, - {name:"Medications", id:544, post:'skills_lifestyle'}, - {name:"Attend", id:545, post:'skills_lifestyle'}, - {name:"Routine", id:546, post:'skills_lifestyle'}, - {name:"Tranquility", id:547, post:'skills_lifestyle'}, - {name:"Socialization", id:562, post:'skills_lifestyle'} - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/skills_team.js b/platforms/browser/www/scripts/controllers/skills_team.js deleted file mode 100644 index 60a6c139..00000000 --- a/platforms/browser/www/scripts/controllers/skills_team.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsTeamCtrl - * @description - * # SkillsTeamCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SkillsTeamCtrl', function ($scope) { - $scope.pageTitle = "Team"; - - // $scope.mainLinks = [ - // {name:"Duality", id:553, post:'skills_team'}, - // {name:"Humilty", id:554, post:'skills_team'}, - // {name:"Obligation", id:555, post:'skills_team'}, - // {name:"Sacrifice", id:556, post:'skills_team'}, - // {name:"Asking for Help", id:557, post:'skills_team'}, - // {name:"Giving Back", id:558, post:'skills_team'}, - // {name:"Doctor Checklist", id:559, post:'skills_team'}, - // {name:"Support Checklist", id:560, post:'skills_team'}, - // {name:"Hospital Checklist", id:561, post:'skills_team'} - // ]; - - $scope.mainLinks = [ - {name:"Psychiatrist", id:580, post:'skills_team'}, - {name:"Supports", id:581, post:'skills_team'}, - {name:"Hospital", id:582, post:'skills_team'} - ]; - - - - }); diff --git a/platforms/browser/www/scripts/controllers/summary_player.js b/platforms/browser/www/scripts/controllers/summary_player.js deleted file mode 100644 index 1bb3471f..00000000 --- a/platforms/browser/www/scripts/controllers/summary_player.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SummaryPlayerCtrl - * @description - * # SummaryPlayerCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('SummaryPlayerCtrl', function ($scope, $routeParams, $location) { - - $scope.getChapterContents = function (chapter_id, appContent) { - var search_criteria = { - id: parseInt(chapter_id) - }; - - var chapter = _.where(appContent, search_criteria)[0]; - - chapter.element_array = _.where(appContent, search_criteria)[0].element_list.toString().split(","); - - chapter.contents = []; - // console.log("Chapter selected:",_.where(appContent, search_criteria)[0]); - // console.log("Chapter contents list:",chapter_contents_list); - - _.each(chapter.element_array, function (element) { - // console.log(parseInt(element)); - chapter.contents.push(_.where(appContent, { - id: parseInt(element) - })[0]); - }); - - return chapter; - }; - - $scope.showAddSkills = false; - - $scope.lessons = JSON.parse(localStorage['lessons']); - - $scope.chapter = $scope.getChapterContents($routeParams.id,$scope.lessons); - - $scope.pageTitle = $scope.chapter.pretty_name; - - $scope.page = $scope.chapter.contents; - - $scope.addToMySkills = function(){ - - var id = $scope.page.id; - - if (localStorage['mySkills'] == undefined){ - - localStorage['mySkills'] = JSON.stringify([id]); - } - else { - var mySkills = JSON.parse(localStorage['mySkills']); - - mySkills.push(parseInt(id)); - localStorage['mySkills'] = JSON.stringify(mySkills); - } - - $location.path('/mySkills'); - - } - debugger; - - }); diff --git a/platforms/browser/www/scripts/controllers/team.js b/platforms/browser/www/scripts/controllers/team.js deleted file mode 100644 index bf249f3a..00000000 --- a/platforms/browser/www/scripts/controllers/team.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:SkillsCtrl - * @description - * # SkillsCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('TeamCtrl', function ($scope, UserData) { - $scope.pageTitle = "My Team"; - - $scope.team = UserData.query('team'); - $scope.secureTeam = UserData.query('secureContent').team; - }); diff --git a/platforms/browser/www/scripts/controllers/usereditor.js b/platforms/browser/www/scripts/controllers/usereditor.js deleted file mode 100644 index c2f0825d..00000000 --- a/platforms/browser/www/scripts/controllers/usereditor.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:UsereditorCtrl - * @description - * # UsereditorCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('UsereditorCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); diff --git a/platforms/browser/www/scripts/controllers/weekly_check_in.js b/platforms/browser/www/scripts/controllers/weekly_check_in.js deleted file mode 100644 index 77259df0..00000000 --- a/platforms/browser/www/scripts/controllers/weekly_check_in.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:WeeklyCheckInCtrl - * @description - * # WeeklyCheckInCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('WeeklyCheckInCtrl', function($scope, $location, $routeParams, Questions, Guid, UserDetails, Pound) { - - - $scope.pageTitle = 'Weekly Check In'; - - var phq_questions = Questions.query('phq9'); - var amrs_questions = Questions.query('amrs'); - - //combine questions into one group for the page - $scope.questionGroups = [phq_questions, amrs_questions]; - - //allows you to pass a question index url param into the question group directive - $scope.questionIndex = parseInt($routeParams.questionIndex) - 1 || 0; - - $scope.skippable = false; - - //overrides questiongroup default submit action to send data to PR - $scope.submit = function() { - - var _SAVE_LOCATION = 'livewell_survey_data'; - - $scope.responseArray[$scope.currentIndex] = $('form').serializeArray()[0]; - - var responses = _.flatten($scope.responseArray); - - var sessionID = Guid.create(); - - - - _.each(responses, function(el) { - - var payload = { - userId: UserDetails.find, - survey: $scope.pageTitle, - questionDataLabel: el.name, - questionValue: el.value, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading(_SAVE_LOCATION, payload).execute(); - console.log(payload); - - }); - - var responsePayload = { - sessionID: sessionID, - responses: responses - }; - - Pound.add('weeklyCheckIn', responsePayload); - - var lWR = responses; - var phq8Sum = parseInt(lWR[0].value) + parseInt(lWR[1].value) + parseInt(lWR[2].value) + parseInt(lWR[3].value) + parseInt(lWR[4].value) + parseInt(lWR[5].value) + parseInt(lWR[6].value) + parseInt(lWR[7].value); - var amrsSum = parseInt(lWR[8].value) + parseInt(lWR[9].value) + parseInt(lWR[10].value) + parseInt(lWR[11].value) + parseInt(lWR[12].value); - - if (_.where(JSON.parse(localStorage.team, { - role: 'Psychiatrist' - })[0] != undefined)) { - $scope.psychiatristEmail = _.where(JSON.parse(localStorage.team), { - role: 'Psychiatrist' - })[0].email; - } else { - $scope.psychiatristEmail = ''; - } - - if (_.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0] != undefined) { - $scope.coachEmail = _.where(JSON.parse(localStorage.team), { - role: 'Coach' - })[0].email; - } else { - $scope.coachEmail = '' - } - - - if (amrsSum >= 10) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'coach', - message: 'Altman Mania Rating Scale >= 10' - }).execute(); - (new PurpleRobot()).emitReading('livewell_email', { - coachEmail: $scope.coachEmail, - message: 'Altman Mania Rating Scale >= 10' - }).execute(); - } - if (amrsSum >= 16) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'psychiatrist', - message: 'Altman Mania Rating Scale >= 16' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - message: 'Altman Mania Rating Scale >= 16' - }).execute(); - } - if (phq8Sum >= 15) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'coach', - message: 'PHQ8 >= 15' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - coachEmail: $scope.coachEmail, - message: 'PHQ8 >= 15' - }).execute(); - } - if (phq8Sum >= 20) { - (new PurpleRobot()).emitReading('livewell_clinicalreachout', { - call: 'psychiatrist', - message: 'PHQ8 >= 20' - }).execute(); - - (new PurpleRobot()).emitReading('livewell_email', { - psychiatristEmail: $scope.psychiatristEmail, - message: 'PHQ8 >= 20' - }).execute(); - } - - $location.path("/ews"); - - } - - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/controllers/wellness.js b/platforms/browser/www/scripts/controllers/wellness.js deleted file mode 100644 index 58e18178..00000000 --- a/platforms/browser/www/scripts/controllers/wellness.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -/** - * @ngdoc function - * @name livewellApp.controller:WellnessCtrl - * @description - * # WellnessCtrl - * Controller of the livewellApp - */ -angular.module('livewellApp') - .controller('WellnessCtrl', function ($scope,$routeParams) { - $scope.pageTitle = 'Wellness Plan'; - - $scope.section = $routeParams.section || ""; - - $scope.showResources = function(){ - $scope.riskVisible = false; - $scope.awarenessVisible = false; - $scope.resourcesVisible = true; - $('button#awareness').removeClass('btn-active'); - $('button#risk').removeClass('btn-active'); - $('button#resources').addClass('btn-active'); - } - - $scope.showRisk = function(){ - $scope.awarenessVisible = false; - $scope.resourcesVisible = false; - $scope.riskVisible = true; - $('button#awareness').removeClass('btn-active'); - $('button#risk').addClass('btn-active'); - $('button#resources').removeClass('btn-active'); - } - - $scope.showAwareness = function(){ - $scope.resourcesVisible = false; - $scope.riskVisible = false; - $scope.awarenessVisible = true; - $('button#resources').removeClass('btn-active'); - $('button#risk').removeClass('btn-active'); - $('button#awareness').addClass('btn-active'); - - } - - - switch($scope.section) { - case "resources": - $scope.showResources(); - break; - case "awareness": - $scope.showAwareness(); - break; - case "risk": - $scope.showRisk(); - break; - default: - $scope.resourcesVisible = false; - $scope.riskVisible = false; - $scope.awarenessVisible = false; - } - - - - - }); diff --git a/platforms/browser/www/scripts/questionGroups/questiongroup.js b/platforms/browser/www/scripts/questionGroups/questiongroup.js deleted file mode 100644 index c37469b7..00000000 --- a/platforms/browser/www/scripts/questionGroups/questiongroup.js +++ /dev/null @@ -1,204 +0,0 @@ -'use strict'; - -/** - * @ngdoc directive - * @name livewellApp.directive:questionGroup - * @description - * # questionGroup - */ -angular.module('livewellApp') - .directive('questionGroup', function ($location) { - return { - templateUrl: 'views/questionGroups/question_group.html', - restrict: 'E', - link: function postLink(scope, element, attrs) { - - scope._LABELS = scope.labels || [ - {name:'back',label:'&lt;'}, - {name:'next',label:'&gt;'}, - {name:'submit', label:'Save'} - ]; - - scope._SURVEY_FAILURE_LABEL = scope.surveyFailureLabel || '<b>Unfortunately, this survey failed to load:</b>'; - - scope.questionGroups = _.flatten(scope.questionGroups); - scope.questionAnswered = []; - - scope.responseArray = []; - - scope.surveyFailure = function(){ - - var error = {}; - //there are no questions - if (scope.questionGroups.length == 0 && _.isArray(scope.questionGroups)) { - error = { error:true, message:"There are no questions available." } - } - //questions are not in an array - else if (_.isArray(scope.questionGroups) == false){ - error = { error:true, message:"Questions are not properly formatted." } - } - else { - error = { error:false } - } - - if (error.error == true){ - console.error(error); - } - - return error - - } - - scope.label = function(labelName){ - return _.where(scope._LABELS, {name:labelName})[0].label - } - - scope.numberOfQuestions = scope.questionGroups.length; - - scope.randomizationScheme = {}; - - scope.currentIndex = scope.questionIndex || 0; - - scope.showQuestion = function(questionPosition){ - - var dataLabelToRandomize = scope.questionGroups[scope.currentIndex].questionDataLabel; - - var numResponsesToRandomize = _.where(scope.questionGroups,{questionDataLabel:dataLabelToRandomize}).length; - - if (numResponsesToRandomize > 1){ - - var questionsToRandomize = _.where(scope.questionGroups,{questionDataLabel:dataLabelToRandomize}); - - if(scope.randomizationScheme[dataLabelToRandomize] == undefined){ - scope.randomizationScheme[dataLabelToRandomize] = Math.floor(Math.random() * (numResponsesToRandomize)); - } - - - var randomQuestionToPick = questionsToRandomize[scope.randomizationScheme[dataLabelToRandomize]]; - - scope.currentIndex = _.findIndex(scope.questionGroups,{id:randomQuestionToPick.id}); - - // console.log(questionPosition, scope.currentIndex,questionPosition == scope.currentIndex,scope.questionGroups,{id:randomQuestionToPick.id}); - - } - - - return questionPosition == scope.currentIndex; - } - - scope.goesToIndex = ""; - - scope.goesTo = function(goesToId,index){ - - scope.skipArray[index] = true; - - for (var index = 0; index < scope.questionGroups.length; index++) { - if (scope.questionGroups[index].questionDataLabel == goesToId){ - scope.goesToIndex = index; - } - } - - // alert(scope.goesToIndex,goesToId ); - - } - - scope.next = function(question,index){ - // console.log(question); - - scope.responseArray[scope.currentIndex] = $('form').serializeArray()[0]; - - if (question.responses.length == 1 && question.responses[0].goesTo != "") - { - scope.goesTo(question.responses[0].goesTo); - } - - if (scope.goesToIndex != "") - { - - scope.currentIndex = scope.goesToIndex; - - } - else { - - if( scope.skipArray[index] == true){ - scope.currentIndex++;} - else{ - alert('You must enter an answer to continue!');//modal - } - - } - scope.goesToIndex = ""; - }; - - scope.back = function(){ - - scope.currentIndex--; - - - }; - - - //is overridden by scope.complete function if different action is desired at the end of survey - scope.submit = scope.submit || function(){ - console.log('OVERRIDE THIS IN YOUR CONTROLLER SCOPE: ',$('form').serializeArray()); - - var _SAVE_LOCATION = 'livewell_survey_data'; - - $scope.responseArray[$scope.currentIndex] = $('form').serializeArray()[0]; - - var responses = _.flatten($scope.responseArray); - - var sessionID = Guid.create(); - - _.each(responses, function(el){ - - var payload = { - userId: UserDetails.find, - survey: 'survey', - questionDataLabel: el.name, - questionValue: el.value, - sessionGUID: sessionID, - savedAt: new Date() - }; - - (new PurpleRobot()).emitReading(_SAVE_LOCATION,payload).execute(); - console.log(payload); - - }); - - - - $location.path('#/'); - } - - scope.skippable = scope.skippable || true; - scope.skipArray = []; - - - scope.questionViewType = function(questionType){ - - switch (questionType){ - - case "radio" || "checkbox": - return "multiple" - break; - case "text" || "phone" || "email" || "textarea": - return "single" - break; - default: - return "html" - break; - - } - - } - -// scope.showEndNav = function(length,pageTitle) { -// if (length == 0 && pageTitle = 'Daily Review'){ -// return true} -// } -// } - - } - }; - }); diff --git a/platforms/browser/www/scripts/services/clinicalstatusupdate.js b/platforms/browser/www/scripts/services/clinicalstatusupdate.js deleted file mode 100644 index f6c40c09..00000000 --- a/platforms/browser/www/scripts/services/clinicalstatusupdate.js +++ /dev/null @@ -1,147 +0,0 @@ -'use strict'; -/** - * @ngdoc service - * @name livewellApp.clinicalStatusUpdate - * @description - * # clinicalStatusUpdate - * Service in the livewellApp. - */ -angular.module('livewellApp').service('ClinicalStatusUpdate', function(Pound, UserData) { - // AngularJS will instantiate a singleton by calling "new" on this function - var contents = {}; - contents.execute = function() { - var currentClinicalStatusCode = function(){return UserData.query('clinicalStatus').currentCode}; - //"[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - var dailyReviewResponses = Pound.find('dailyCheckIn'); - var weeklyReviewResponses = Pound.find('weeklyCheckIn'); - var newClinicalStatus = currentClinicalStatusCode(); - var sendEmail = false; - var intensityCount = { - 0: 0, - 1: 0, - 2: 0, - 3: 0, - 4: 0 - }; - - for (var i = dailyReviewResponses.length - 1; i > dailyReviewResponses.length - 8; i--) { - var aWV = 0; - if (dailyReviewResponses[i] != undefined) { - var aWV = Math.abs(parseInt(dailyReviewResponses[i].wellness)); - } - console.log(aWV); - if (aWV == 0) { - intensityCount[0] = intensityCount[0] + 1 - } - if (aWV == 1) { - intensityCount[1] = intensityCount[1] + 1 - } - if (aWV == 2) { - intensityCount[2] = intensityCount[2] + 1 - } - if (aWV == 3) { - intensityCount[3] = intensityCount[3] + 1 - } - if (aWV == 4) { - intensityCount[4] = intensityCount[4] + 1 - } - } - - var lastWeeklyResponses = []; - - if (weeklyReviewResponses[weeklyReviewResponses.length - 1] != undefined){ - lastWeeklyResponses = weeklyReviewResponses[weeklyReviewResponses.length - 1].responses; - } - else{ - lastWeeklyResponses = [ - {name:'phq1', value:'0'}, - {name:'phq2', value:'0'}, - {name:'phq3', value:'0'}, - {name:'phq4', value:'0'}, - {name:'phq5', value:'0'}, - {name:'phq6', value:'0'}, - {name:'phq7', value:'0'}, - {name:'phq8', value:'0'}, - {name:'amrs1', value:'0'}, - {name:'amrs2', value:'0'}, - {name:'amrs3', value:'0'}, - {name:'amrs4', value:'0'}, - {name:'amrs5', value:'0'} - ]; - } - var lWR = lastWeeklyResponses; - var phq8Sum = parseInt(lWR[0].value) + parseInt(lWR[1].value) + parseInt(lWR[2].value) + parseInt(lWR[3].value) + parseInt(lWR[4].value) + parseInt(lWR[5].value) + parseInt(lWR[6].value) + parseInt(lWR[7].value); - var amrsSum = parseInt(lWR[8].value) + parseInt(lWR[9].value) + parseInt(lWR[10].value) + parseInt(lWR[11].value) + parseInt(lWR[12].value); - //"[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - switch (parseInt(currentClinicalStatusCode())) { - case 1://well - //Well if abs(wr) ≥ 2 for 4 of last 7 days Prodromal - if ((intensityCount[2] + intensityCount[3] + intensityCount[4]) >= 4) { - newClinicalStatus = 2; - } - // //Well if last ASRM ≥ 6 Well, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - // //Well if last PHQ8 ≥ 10 Well, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 2://prodromal - //Prodromal if abs(wr) ≤ 1 for 5 of last 7 days Well - if ((intensityCount[1] + intensityCount[0]) >= 5) { - newClinicalStatus = 1; - } - //Prodromal if abs(wr) ≥ 3 for 5 of last 7 days Unwell - if ((intensityCount[3] + intensityCount[4]) >= 5) { - newClinicalStatus = 4; - } - //Prodromal if last ASRM ≥ 6 Prodromal, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - //Prodromal if last PHQ8 ≥ 10 Prodromal, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 3://recovering - //Recovering if abs(wr) ≤ 1 for 5 of last 7 days Well - if ((intensityCount[1] + intensityCount[0]) >= 5) { - newClinicalStatus = 1; - } - //Recovering if abs(wr) ≥ 3 for 5 of last 7 days Unwell - if ((intensityCount[3] + intensityCount[4]) >= 5) { - newClinicalStatus = 4; - } - //Recovering if last ASRM ≥ 6 Recovering, email alert to coach - if (amrsSum >= 6) { - sendEmail = true; - } - //Recovering if last PHQ8 ≥ 10 Recovering, email alert to coach - if (phq8Sum >= 10) { - sendEmail = true; - } - break; - case 4://unwell - //Unwell if abs(wr) ≤ 2 for 5 of last 7 days Recovering - if ((intensityCount[0] + intensityCount[1] + intensityCount[2]) >= 5) { - newClinicalStatus = 3; - } - break; - } - - var returnStatus = {}; - returnStatus.amrsSum = amrsSum; - returnStatus.phq8Sum = phq8Sum; - returnStatus.intensityCount = intensityCount; - returnStatus.oldStatus = currentClinicalStatusCode(); - returnStatus.newStatus = newClinicalStatus; - localStorage['clinicalStatus'] = JSON.stringify({ - currentCode: newClinicalStatus - }); - return returnStatus - } - return contents; -}); \ No newline at end of file diff --git a/platforms/browser/www/scripts/services/dailyreview.js b/platforms/browser/www/scripts/services/dailyreview.js deleted file mode 100644 index 18564eb2..00000000 --- a/platforms/browser/www/scripts/services/dailyreview.js +++ /dev/null @@ -1,548 +0,0 @@ -'use strict'; -/** - * @ngdoc service - * @name livewellApp.dailyReview - * @description - * # dailyReview - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('DailyReviewAlgorithm', function(Pound, UserData) { - // AngularJS will instantiate a singleton by calling "new" on this function - var contents = {}, - recoder = {}, - history = {}, - dailyCheckInData = {}, - conditions = []; - var sleepRoutineRanges = UserData.query('sleepRoutineRanges'); - var currentClinicalStatusCode = function(){return UserData.query('clinicalStatus').currentCode}; - var dailyReviewResponses = Pound.find('dailyCheckIn'); - recoder.execute = function(sleepRoutineRanges, dailyReviewResponses) { - var historySeed = {}; - historySeed.wellness = [0, 0, 0, 0, 0, 0, 0]; // wellness balanced 7 days - historySeed.medications = [1, 1, 1, 1, 1, 1, 1]; // took all meds 7 days - historySeed.sleep = [0, 0, 0, 0, 0, 0, 0]; // in baseline range 7 days - historySeed.routine = [2, 2, 2, 2, 2, 2, 2]; // in both windows 7 days - for (var i = 0; i < 7; i++) { - var responsePosition = dailyReviewResponses.length + i - 7; - if (dailyReviewResponses[responsePosition] != undefined) { - historySeed.wellness[i] = parseInt(dailyReviewResponses[responsePosition].wellness); - historySeed.medications[i] = recoder.medications(dailyReviewResponses[responsePosition].medications); - historySeed.sleep[i] = recoder.sleep(dailyReviewResponses[responsePosition].sleepDuration,sleepRoutineRanges); - historySeed.routine[i] = recoder.routine(dailyReviewResponses[responsePosition].toBed, dailyReviewResponses[responsePosition].gotUp, sleepRoutineRanges); - } - } - localStorage['recodedResponses'] = JSON.stringify(historySeed); - return historySeed - } - - recoder.medications = function(medications) { - switch (medications) { - case '0': - return 0 - break; - case '1': - return 0.5 - break; - case '2': - return 1 - break; - } - } - - recoder.sleep = function(sleepDuration, sleepRoutineRanges) { - var score = 0; - // duration = gotUp - toBed - // look at ranges defined in sleepRoutineRanges, which range is it in? - - var duration = parseInt(sleepDuration); - - if (duration <= sleepRoutineRanges.LessSevere) { - score = -1; - } - if (duration >= sleepRoutineRanges.MoreSevere) { - score = 1; - } - if (duration >= sleepRoutineRanges.Less && duration <= sleepRoutineRanges.More) { - score = 0; - } - if (duration < sleepRoutineRanges.Less && duration >= sleepRoutineRanges.LessSevere) { - score = -0.5; - } - if (duration > sleepRoutineRanges.More && duration <= sleepRoutineRanges.MoreSevere) { - score = 0.5; - } - return score - } - - recoder.routine = function(toBed, gotUp, sleepRoutineRanges) { - var sum = 0; - var range = sleepRoutineRanges; - var numGotUp = parseInt(gotUp); - var numToBed = parseInt(toBed); - var bedTimeStart = parseInt(sleepRoutineRanges.BedTimeStrt_MT); - var bedTimeStop = parseInt(sleepRoutineRanges.BedTimeStop_MT); - var riseTimeStart = parseInt(sleepRoutineRanges.RiseTimeStrt_MT); - var riseTimeStop = parseInt(sleepRoutineRanges.RiseTimeStop_MT); - if (bedTimeStart > bedTimeStop) { - bedTimeStop = bedTimeStop + 2400; - } - if (riseTimeStart > riseTimeStop) { - riseTimeStop = riseTimeStop + 2400; - } - if (numGotUp < riseTimeStart && numGotUp < riseTimeStop) { - numGotUp = numGotUp + 2400; - } - if (numToBed < bedTimeStart && numToBed < bedTimeStop) { - numToBed = numToBed + 2400; - } - if (numGotUp >= riseTimeStart && numGotUp <= riseTimeStop) { - sum++ - } - if (numToBed >= bedTimeStart && numToBed <= bedTimeStop) { - sum++ - } - return parseInt(sum) - }; - - conditions[26] = function(data, code) { - //well - return true - }; - conditions[25] = function(data, code) { - //at risk routine - //Baseline ≥ 3 of last 4 days mrd ≠ Bedtime Window and/or mrd ≠ Risetime Window, - //Bedtime and Risetime Windows ≤ 5 of last 4 days - var sum1 = data.routine[3] + data.routine[4] + data.routine[5] + data.routine[6]; - - return code == 1 && Math.abs(data.wellness[6]) < 2 && ((data.routine[6] < 2 && sum1 <= 5)) - }; - conditions[24] = function(data, code) { - //at risk sleep erratic - //mrd ≠ Baseline, Baseline ≤ 2 of last 4 days - var sum1 = 0; - if (data.sleep[3] == 0) { - sum1++ - } - if (data.sleep[4] == 0) { - sum1++ - } - if (data.sleep[5] == 0) { - sum1++ - } - if (data.sleep[6] == 0) { - sum1++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] != 0) && sum1 <= 2 - }; - conditions[23] = function(data, code) { - //at risk sleep more - //mrd = More or More-Severe, More or More-Severe ≥ 2 last 4 days, Less or Less-Severe ≤ 1 last 4 days - var sum1 = 0; - if (data.sleep[3] == -1 || data.sleep[3] == -0.5) { - sum1++ - } - if (data.sleep[4] == -1 || data.sleep[4] == -0.5) { - sum1++ - } - if (data.sleep[5] == -1 || data.sleep[5] == -0.5) { - sum1++ - } - if (data.sleep[6] == -1 || data.sleep[6] == -0.5) { - sum1++ - } - var sum2 = 0; - if (data.sleep[3] == 1 || data.sleep[3] == 0.5) { - sum2++ - } - if (data.sleep[4] == 1 || data.sleep[4] == 0.5) { - sum2++ - } - if (data.sleep[5] == 1 || data.sleep[5] == 0.5) { - sum2++ - } - if (data.sleep[6] == 1 || data.sleep[6] == 0.5) { - sum2++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] == 1 || data.sleep[6] == 0.5) && sum1 <= 1 && sum2 >= 2 - }; - conditions[22] = function(data, code) { - //at risk sleep less - //mrd = Less or Less-Severe, Less or Less-Severe ≥ 2 of last 4 days, More or More-Severe ≤ 1 of last 4 days - var sum1 = 0; - if (data.sleep[3] == -1 || data.sleep[3] == -0.5) { - sum1++ - } - if (data.sleep[4] == -1 || data.sleep[4] == -0.5) { - sum1++ - } - if (data.sleep[5] == -1 || data.sleep[5] == -0.5) { - sum1++ - } - if (data.sleep[6] == -1 || data.sleep[6] == -0.5) { - sum1++ - } - var sum2 = 0; - if (data.sleep[3] == 1 || data.sleep[3] == 0.5) { - sum2++ - } - if (data.sleep[4] == 1 || data.sleep[4] == 0.5) { - sum2++ - } - if (data.sleep[5] == 1 || data.sleep[5] == 0.5) { - sum2++ - } - if (data.sleep[6] == 1 || data.sleep[6] == 0.5) { - sum2++ - } - return code == 1 && Math.abs(data.wellness[6]) < 2 && (data.sleep[6] == -1 || data.sleep[6] == -0.5) && sum1 >= 2 && sum2 <= 1 - }; - conditions[21] = function(data, code) { - //at risk medications - return code == 1 && Math.abs(data.wellness[6]) < 2 && data.medications[6] != 1 - }; - conditions[20] = function(data, code) { - //at risk sleep more severe - //mrd = More-Severe, More-Severe ≥ 3 of last 4 days - var sum = 0; - if (data.sleep[3] == 1) { - sum++ - } - if (data.sleep[4] == 1) { - sum++ - } - if (data.sleep[5] == 1) { - sum++ - } - if (data.sleep[6] == 1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.sleep[6] == 1 && sum >= 3; - - if (dailyReviewIsTrueWhen){ - if (sum == 3){ - - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too much', code:20}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:20}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too much', email:'psychiatrist', code:20}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:20}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[19] = function(data, code) { - //at risk sleep less severe - //mrd = Less-Severe, Less-Severe ≥ 2 of last 4 days - var sum = 0; - if (data.sleep[3] == -1) { - sum++ - } - if (data.sleep[4] == -1) { - sum++ - } - if (data.sleep[5] == -1) { - sum++ - } - if (data.sleep[6] == -1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.sleep[6] == -1 && sum >= 2; - - if (dailyReviewIsTrueWhen){ - if (sum == 2){ - - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too little', code:19}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:19}).execute(); - } - if (sum == 3){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about sleeping too little', email:'psychiatrist', code:19}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:19}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[18] = function(data, code) { - //at risk medications severe - var sum = 0; - if (data.medications[3] != 1) { - sum++ - } - if (data.medications[4] != 1) { - sum++ - } - if (data.medications[5] != 1) { - sum++ - } - if (data.medications[6] != 1) { - sum++ - } - - var dailyReviewIsTrueWhen = code == 1 && Math.abs(data.wellness[6]) < 2 && data.medications[6] != 1 && sum >= 3; - - if (dailyReviewIsTrueWhen){ - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about taking your medications', code:18}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'psychiatrist', code:18}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{message:'Call your psychiatrist about taking your medications', call:'psychiatrist', email:'coach', code:18}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:18}).execute(); - } - } - return dailyReviewIsTrueWhen - }; - conditions[17] = function(data, code) { - //mild down well - var dailyReviewIsTrueWhen = data.wellness[6] == -2 && code == 1; - - if (dailyReviewIsTrueWhen){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:17}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:17}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'coach', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:17}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:17}).execute(); - } - } - - - - return dailyReviewIsTrueWhen; - }; - conditions[16] = function(data, code) { - //mild up well - var dailyReviewIsTrueWhen = data.wellness[6] == 2 && code == 1; - - if (dailyReviewIsTrueWhen){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 2){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:16}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:16}).execute(); - } - if (sum >= 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:16}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:16}).execute(); - } - - } - - return dailyReviewIsTrueWhen - }; - conditions[15] = function(data, code) { - //balanced prodromal - return code == 2 - }; - conditions[14] = function(data, code) { - //balanced recovering - return code == 3 - }; - conditions[13] = function(data, code) { - //mild down prodromal - return data.wellness[6] == -2 && code == 2; - }; - conditions[12] = function(data, code) { - //mild up prodromal - return data.wellness[6] == 2 && code == 2; - }; - conditions[11] = function(data, code) { - //mild down recovering - return data.wellness[6] == -2 && code == 3; - }; - conditions[10] = function(data, code) { - //mild up recovering - return data.wellness[6] == 2 && code == 3; - }; - conditions[9] = function(data, code) { - //moderate down - var dailyReviewIsTrueWhen = data.wellness[6] == -3 && code != 4; - - if (dailyReviewIsTrueWhen && code == 1){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:9}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:9}).execute(); - } - if (sum == 4){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:9}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:9}).execute(); - } - } - - return dailyReviewIsTrueWhen - }; - conditions[8] = function(data, code) { - //moderate up - var dailyReviewIsTrueWhen = data.wellness[6] == 3 && code != 4; - - if (dailyReviewIsTrueWhen && code == 1){ - var sum = 0; - if (Math.abs(data.wellness[3]) > 1) { - sum++ - } - if (Math.abs(data.wellness[4]) > 1) { - sum++ - } - if (Math.abs(data.wellness[5]) > 1) { - sum++ - } - if (Math.abs(data.wellness[6]) > 1) { - sum++ - } - - if (sum == 2){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', code:8}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', code:8}).execute(); - } - if (sum >= 3){ - Pound.add('clinical_reachout',{call:'psychiatrist', message:'Call your psychiatrist about worsening symptoms', email:'psychiatrist',code:8}); - (new PurpleRobot()).emitReading('livewell_clinicalreachout',{call:'coach', email:'psychiatrist', code:8}).execute(); - } - - } - - return dailyReviewIsTrueWhen - }; - conditions[7] = function(data, code) { - //balanced unwell - return code == 4; - }; - conditions[6] = function(data, code) { - //mild down unwell - return data.wellness[6] == -2 && code == 4; - }; - conditions[5] = function(data, code) { - //mild up unwell - return data.wellness[6] == 2 && code == 4; - }; - conditions[4] = function(data, code) { - //moderate down unwell - return data.wellness[6] == -3 && code == 4; - }; - conditions[3] = function(data, code) { - //moderate up unwell - return data.wellness[6] == 3 && code == 4; - }; - conditions[2] = function(data, code) { - //logic for severe down - return data.wellness[6] == -4; - }; - conditions[1] = function(data, code) { - //logic for severe up - return data.wellness[6] == 4; - }; - conditions[0] = function() { - return false - } - // "[{"code":1,"label":"well"},{"code":2,"label":"prodromal"},{"code":3,"label":"recovering"},{"code":4,"label":"unwell"}]" - recoder.wellnessFormatter = function(wellnessRating) { - switch (wellnessRating) { - case -4: - return 0; - break; - case -3: - return .25; - break; - case -2: - return .5; - break - case -1: - return 1; - break; - case 0: - return 1; - break; - case 1: - return 1; - break; - case 2: - return 0.5; - break; - case 3: - return 0.25; - break; - case 4: - return 0; - break; - } - } - contents.getPercentages = function() { - var contents = {}; - var recodedSevenDays = recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')); - var sleepValues = {}; - sleepValues[-1] = 0; - sleepValues[-0.5] = 0.25; - sleepValues[0] = 1; - sleepValues[0.5] = 0.5; - sleepValues[1] = 0.25; - contents.sleep = (sleepValues[recodedSevenDays.sleep[0]] + sleepValues[recodedSevenDays.sleep[1]] + sleepValues[recodedSevenDays.sleep[2]] + sleepValues[recodedSevenDays.sleep[3]] + sleepValues[recodedSevenDays.sleep[4]] + sleepValues[recodedSevenDays.sleep[5]] + sleepValues[recodedSevenDays.sleep[6]]) / 7; - contents.wellness = (recoder.wellnessFormatter(recodedSevenDays.wellness[0]) + recoder.wellnessFormatter(recodedSevenDays.wellness[1]) + recoder.wellnessFormatter(recodedSevenDays.wellness[2]) + recoder.wellnessFormatter(recodedSevenDays.wellness[3]) + recoder.wellnessFormatter(recodedSevenDays.wellness[4]) + recoder.wellnessFormatter(recodedSevenDays.wellness[5]) + recoder.wellnessFormatter(recodedSevenDays.wellness[6])) / 7; - contents.medications = (recodedSevenDays.medications[0] + recodedSevenDays.medications[1] + recodedSevenDays.medications[2] + recodedSevenDays.medications[3] + recodedSevenDays.medications[4] + recodedSevenDays.medications[5] + recodedSevenDays.medications[6]) / 7; - contents.routine = (recodedSevenDays.routine[0] + recodedSevenDays.routine[1] + recodedSevenDays.routine[2] + recodedSevenDays.routine[3] + recodedSevenDays.routine[4] + recodedSevenDays.routine[5] + recodedSevenDays.routine[6]) / 14; - return contents - } - contents.getCode = function() { - //look for the highest TRUE value in the condition set - var recodedSevenDays = recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')); - console.log(recodedSevenDays); - for (var i = 0; i < conditions.length; i++) { - var selection = conditions[i](recodedSevenDays, currentClinicalStatusCode()); - if (selection == true) { - return i - break; - } - } - } - contents.code = function(){return contents.getCode()}; - contents.percentages = function(){return contents.getPercentages()}; - contents.recodedResponses = function() { - return recoder.execute(sleepRoutineRanges, Pound.find('dailyCheckIn')) - }; - return contents - }); \ No newline at end of file diff --git a/platforms/browser/www/scripts/services/guid.js b/platforms/browser/www/scripts/services/guid.js deleted file mode 100644 index 5da4a5f2..00000000 --- a/platforms/browser/www/scripts/services/guid.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.Guid - * @description - * # Guid - * provides the capacity to generate a guid as needed, - */ -angular.module('livewellApp') - .service('Guid', function Guid() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var guid = {}; - - // make a string 4 of length 4 with random alphanumerics - guid.S4 = function () { - return (((1+Math.random())*0x10000)|0).toString(16).substring(1); - } - - // concat a bunch together plus stitch in '4' in the third group - guid.create = function() { - return (guid.S4() + guid.S4() + "-" + guid.S4() + "-4" + guid.S4().substr(0,3) + "-" + guid.S4() + "-" + guid.S4() + guid.S4() + guid.S4()).toLowerCase(); - } - - return guid - - }); diff --git a/platforms/browser/www/scripts/services/pound.js b/platforms/browser/www/scripts/services/pound.js deleted file mode 100644 index d6ef03af..00000000 --- a/platforms/browser/www/scripts/services/pound.js +++ /dev/null @@ -1,189 +0,0 @@ - -/** - * @ngdoc service - * @name livewellApp.Pound - * @description - * # Pound - * acts as an interface to localStorage - * TODO, use localForage, but gracefully degrade to localStorage if it doesn't exist - */ -angular.module('livewellApp') - .service('Pound', function Pound() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var pound = {}; - - console.warn('CAUTION: localForage does not exist'); - - //pound.insert(key, object) - //adds to or CREATES a store - //key: name of thing to store - //object: value of thing to store in json form - //pound.add("foo",{"thing":"thing value"}); - //adds {"thing":"thing value"} to a key called "foo" in localStorage - pound.add = function(key,object){ - var collection = []; - - if (localStorage[key]){ - collection = JSON.parse(localStorage[key]); - object.id = collection.length+1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection.push(object); - localStorage[key] = JSON.stringify(collection); - } - else - { - object.id = 1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection = [object]; - localStorage[key] = JSON.stringify(collection); - pound.add("pound",key); - } - - return {added:object}; - }; - - - //pound.save(key, object, id) - //equivalent of upsert - //key: name of thing to store - //object: value of thing to store in json form - // - //pound.save("foo",{thing:"thing value", id:id_value}); - //looks to find a thing called foo that has an array of objects inside - //then looks to find an object in that array that has an id of a particular value, - // if it exists, the object is updated with the keys in the object to replace - ///if it does not exist, it is added - pound.save = function(key,object){ - var collection = []; - - if (localStorage[key]){ - - var exists = false; - collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx){ - if (el.id == object.id){ - exists = true; - object.timestamp = new Date(); - collection[idx] = object; - } - - }); - - if (exists == false){ - object.id = collection.length+1; - object.timestamp = new Date(); - object.created_at = new Date(); - collection.push(object); - } - } - - else - { - object.id = 1; - object.created_at = new Date(); - collection = [object]; - pound.add("pound",key); - } - - localStorage[key] = JSON.stringify(collection); - - return {saved:object}; - }; - - //pound.update(key, object) - //get collection of JSON objects - //iterate through collection and check if passed object matches an element - //merge attributes of objects - //set the collection at the current index to the value of the object - //stringify the collection and set the localStorage key to that value - - pound.update = function(key, object) { - var collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx) { - - if (el.id == object.id) { - - for( var attribute in el) { - el[attribute] = object[attribute] - object.updated_at = new Date(); - } - - collection[idx] = object - } - }); - localStorage[key] = JSON.stringify(collection); - - return {updated:object}; - } - - //pound.find(key,criteria_object) - //key: name of localstorage location - //criteria_object: object that matches the criteria you're looking for - //pound.find("foo") - //returns the ENTIRE contents of the localStorage array - //pound.find("foo",{thing:"thing value"}) - //returns the elements in the array that match that criteria - - pound.find = function(key,criteria_object){ - var collection = []; - if(localStorage[key]){ - collection = JSON.parse(localStorage[key]); - - if (criteria_object){ - return _.where(collection,criteria_object) || [] } - else { return collection || [];} - } - else{ return [];} - }; - - pound.list = function(){ - return pound.find("pound"); - }; - - //pound.delete(key,id) - //removes an item from a collection that matches a specific id criteria - pound.delete = function(key,id){ - - var collection = []; - var object_to_delete; - collection = JSON.parse(localStorage[key]); - - _.each(collection, function(el, idx){ - if (el.id == id){ - object_to_delete = collection[idx]; - collection[idx] = false; - }; - }); - - localStorage[key] = JSON.stringify(_.compact(collection)); - - return {deleted:object_to_delete}; - } - - - //pound.nuke(key) - //completely removes the key from local storage and pound list - pound.nuke = function(key){ - var collection = pound.list; - - localStorage.removeItem(key); - _.each(collection, function(el, idx){ - if (el == key){ - collection[idx] = false; - }; - }); - localStorage["pound"] = JSON.stringify(_.compact(collection)); - - return {cleared:key}; - }; - - - return pound - - -}); diff --git a/platforms/browser/www/scripts/services/questions.js b/platforms/browser/www/scripts/services/questions.js deleted file mode 100644 index fb116703..00000000 --- a/platforms/browser/www/scripts/services/questions.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.Questions - * @description - * # Questions - * accesses locally stored questions that were provided over the questions / question-responses routes - */ -angular.module('livewellApp') - .service('Questions', function Questions($http) { - // AngularJS will instantiate a singleton by calling "new" on this function - - var _CONTENT_SERVER_URL = 'https://livewellnew.firebaseio.com'; - - var content = {}; - var _QUESTIONS_COLLECTION_KEY = 'questions'; - var _RESPONSES_COLLECTION_KEY = 'questionresponses'; - var _QUESTION_CRITERIA_COLLECTION_KEY = 'questioncriteria'; - var _RESPONSE_CRITERIA_COLLECTION_KEY = 'responsecriteria'; - - content.query = function(questionGroup){ - - if (localStorage[_QUESTIONS_COLLECTION_KEY] != undefined){ - //grab from synched local storage - content.items = JSON.parse(localStorage[_QUESTIONS_COLLECTION_KEY]); - //filter to show only one question group - if (questionGroup != undefined){ - content.items = _.where(content.items, {questionGroup:questionGroup}); - } - - //attach response groups to questions - var responses_collection = JSON.parse(localStorage[_RESPONSES_COLLECTION_KEY]); - var question_criteria_collection = JSON.parse(localStorage[_QUESTION_CRITERIA_COLLECTION_KEY]); - var response_criteria_collection = JSON.parse(localStorage[_RESPONSE_CRITERIA_COLLECTION_KEY]); - - _.each(content.items, function(el,idx){ - content.items[idx].responses = _.where(responses_collection, {responseGroupId: el.responseGroupId}); - content.items[idx].criteria = _.where(question_criteria_collection, {questionCriteriaId: el.questionCriteriaId}); - _.each(content.items[idx].responses, function(el2,idx2){ - content.items[idx].responses[idx2].criteria = _.where(response_criteria_collection,{responseId:el2.id}); - }); - - }); - - - - content.responses = responses_collection; - - content.questions = JSON.parse(localStorage[_QUESTIONS_COLLECTION_KEY]); - content.questionCriteria = question_criteria_collection; - content.responseCriteria = response_criteria_collection; - - content.items = _.sortBy(content.items,"order"); - - } - else{ - content.items = []; - } - - return content.items - - } - - content.save = function(collectionToSave,collection){ - debugger; - localStorage[collectionToSave] = JSON.stringify(collection); - $http.put(_CONTENT_SERVER_URL + "/" + collectionToSave).success(alert("Data saved to server")); - } - - content.uniqueQuestionGroups = function(){ - - var uniqueQuestionGroups = []; - _.each(_.uniq(content.query(),"questionGroup"), function(el){ - uniqueQuestionGroups.push({name: el.questionGroup, id: el.questionGroup}); - }); - - return _.uniq(uniqueQuestionGroups,"name") - - } - - return content - }); diff --git a/platforms/browser/www/scripts/services/static_content.js b/platforms/browser/www/scripts/services/static_content.js deleted file mode 100644 index d32c3dce..00000000 --- a/platforms/browser/www/scripts/services/static_content.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.StaticContent - * @description - * # StaticContent - * accesses general purpose locally stored static content - */ -angular.module('livewellApp') - .service('StaticContent', function StaticContent() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var content = {}; - var _COLLECTION_KEY = 'staticContent'; - var _NULL_COLLECTION_MESSAGE = '<div class="alert alert-warning">No content has been provided for this section.</div>'; - - if (localStorage[_COLLECTION_KEY] != undefined){ - content.items = JSON.parse(localStorage[_COLLECTION_KEY]); - } - else{ - content.items = []; - } - - content.query = function(key){ - - var queryResponse = _.where(content.items, {sectionKey:key}); - - if (queryResponse.length > 0){ - return queryResponse[0].content - } - else{ - return _NULL_COLLECTION_MESSAGE; - - }} - - -return content - -}); diff --git a/platforms/browser/www/scripts/services/user_data.js b/platforms/browser/www/scripts/services/user_data.js deleted file mode 100644 index c53728de..00000000 --- a/platforms/browser/www/scripts/services/user_data.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.UserData - * @description - * # UserData - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('UserData', function UserData() { - // AngularJS will instantiate a singleton by calling "new" on this function - - var content = {}; - - content.query = function(collectionKey){ - - console.log(collectionKey); - if (localStorage[collectionKey] != undefined){ - content.items = JSON.parse(localStorage[collectionKey]); - } - else{ - content.items = []; - } - console.log(content.items); - return content.items - - } - - return content - - }); diff --git a/platforms/browser/www/scripts/services/user_details.js b/platforms/browser/www/scripts/services/user_details.js deleted file mode 100644 index aaf3d55f..00000000 --- a/platforms/browser/www/scripts/services/user_details.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -/** - * @ngdoc service - * @name livewellApp.UserDetails - * @description - * # UserDetails - * Service in the livewellApp. - */ -angular.module('livewellApp') - .service('UserDetails', function UserDetails(Pound) { - // AngularJS will instantiate a singleton by calling "new" on this function - - var _USER_LOCAL_COLLECTION_KEY = 'user'; - - var userDetails = {}; - - var userDetailsModel = { - uid: 1, - userID: null, - groupID: null, - loginKey: null - } - - //if there is no user, create a dummy user object based on the above model - if (localStorage[_USER_LOCAL_COLLECTION_KEY] == undefined){ - // Pound.save(_USER_LOCAL_COLLECTION_KEY,userDetailsModel); - } - - //return the current user object - userDetails.find = Pound.find(_USER_LOCAL_COLLECTION_KEY,{uid:'1'})[0]; - - //updates the whole user object - userDetails.update = function(userObject){ - Pound.update(_USER_LOCAL_COLLECTION_KEY,userObject); - return userDetails.find - }; - - // updates one key in the whole user object - userDetails.updateKey = function(key, value){ - var userObject = userDetails.find; - userObject[key] = value; - return userDetails.update(userObject); - } - - return userDetails; - - - }); diff --git a/platforms/browser/www/scripts/vendor/cordova.android.js b/platforms/browser/www/scripts/vendor/cordova.android.js deleted file mode 100644 index 1a9f5d97..00000000 --- a/platforms/browser/www/scripts/vendor/cordova.android.js +++ /dev/null @@ -1,1749 +0,0 @@ -// Platform: android -// 3.4.0 -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var CORDOVA_JS_BUILD_LABEL = '3.4.0'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:CORDOVA_JS_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/android/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: src/android/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used only on the 2.3 simulator, where addJavascriptInterface() is broken. - */ - -module.exports = { - exec: function(service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(value) { - prompt(value, 'gap_bridge_mode:'); - }, - retrieveJsMessages: function(fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:'); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/android/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1, - // This mode is currently for benchmarking purposes only. It must be enabled - // on the native side through the ENABLE_LOCATION_CHANGE_EXEC_MODE - // constant within CordovaWebViewClient.java before it will work. - LOCATION_CHANGE: 2 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2, - // Uses reflection to access private APIs of the WebView that can send JS - // to be executed. - // Requires Android 3.2.4 or above. - PRIVATE_API: 3 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - messagesFromNative = []; - -function androidExec(success, fail, service, action, args) { - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - if (jsToNativeBridgeMode == jsToNativeModes.LOCATION_CHANGE) { - window.location = 'http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson; - } else { - var messages = nativeApiProvider.get().exec(service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - return; - } else { - androidExec.processMessages(messages); - } - } -} - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - var msg = nativeApiProvider.get().retrieveJsMessages(!!opt_fromOnlineEvent); - androidExec.processMessages(msg); -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - console.log('Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only.'); - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - nativeApiProvider.get().setNativeToJsBridgeMode(mode); - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - try { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadKind = message.charAt(nextSpaceIdx + 1); - var payload; - if (payloadKind == 's') { - payload = message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 't') { - payload = true; - } else if (payloadKind == 'f') { - payload = false; - } else if (payloadKind == 'N') { - payload = null; - } else if (payloadKind == 'n') { - payload = +message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 'A') { - var data = message.slice(nextSpaceIdx + 2); - var bytes = window.atob(data); - var arraybuffer = new Uint8Array(bytes.length); - for (var i = 0; i < bytes.length; i++) { - arraybuffer[i] = bytes.charCodeAt(i); - } - payload = arraybuffer.buffer; - } else if (payloadKind == 'S') { - payload = window.atob(message.slice(nextSpaceIdx + 2)); - } else { - payload = JSON.parse(message.slice(nextSpaceIdx + 1)); - } - cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback); - } else { - console.log("processMessage failed: invalid message:" + message); - } - } catch (e) { - console.log("processMessage failed: Message: " + message); - console.log("processMessage failed: Error: " + e); - console.log("processMessage failed: Stack: " + e.stack); - } -} - -// This is called from the NativeToJsMessageQueue.java. -androidExec.processMessages = function(messages) { - if (messages) { - messagesFromNative.push(messages); - // Check for the reentrant case, and enqueue the message if that's the case. - if (messagesFromNative.length > 1) { - return; - } - while (messagesFromNative.length) { - // Don't unshift until the end so that reentrancy can be detected. - messages = messagesFromNative[0]; - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (messages == '*') { - messagesFromNative.shift(); - window.setTimeout(pollOnce, 0); - return; - } - - var spaceIdx = messages.indexOf(' '); - var msgLen = +messages.slice(0, spaceIdx); - var message = messages.substr(spaceIdx + 1, msgLen); - messages = messages.slice(spaceIdx + msgLen + 1); - processMessage(message); - if (messages) { - messagesFromNative[0] = messages; - } else { - messagesFromNative.shift(); - } - } - } -}; - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -pluginloader.load(function() { - channel.onPluginsReady.fire(); -}); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/android/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Tell the native code that a page change has occurred. - exec(null, null, 'PluginManager', 'startup', []); - // Tell the JS that the native side is ready. - channel.onNativeReady.fire(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(null, null, "App", "show", []); - }); - } -}; - -}); - -// file: src/android/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, "App", "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, "App", "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, "App", "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, "App", "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, "App", "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, "App", "overrideBackbutton", [override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, "App", "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -function injectScript(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - script.onerror = onerror || onload; - script.src = url; - document.head.appendChild(script); -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module) { - try { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - // This can be skipped if it had any merges or clobbers, though, - // since the mapper will already have required the module. - if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) { - modulemapper.runs(module.id); - } - } - catch(err) { - // error with module, most likely clobbers, should we continue? - } - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectScript(path + moduleList[i].file, scriptLoadedCallback); - } -} - -function injectPluginScript(pathPrefix, finishPluginLoading) { - var pluginPath = pathPrefix + 'cordova_plugins.js'; - - injectScript(pluginPath, function() { - try { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, finishPluginLoading); - } - catch (e) { - // Error loading cordova_plugins.js, file not found or something - // this is an acceptable error, pre-3.0.0, so we just move on. - finishPluginLoading(); - } - }, finishPluginLoading); // also, add script load error handler for file not found -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = 'cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src; - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length); - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectPluginScript(pathPrefix, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/browser/www/scripts/vendor/cordova.js b/platforms/browser/www/scripts/vendor/cordova.js deleted file mode 100644 index 225d4ab2..00000000 --- a/platforms/browser/www/scripts/vendor/cordova.js +++ /dev/null @@ -1,1938 +0,0 @@ -// Platform: android -// 8ca0f3b2b87e0759c5236b91c80f18438544409c -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '3.6.4'; -// file: src/scripts/require.js - -/*jshint -W079 */ -/*jshint -W020 */ - -var require, - define; - -(function () { - var modules = {}, - // Stack of moduleIds currently being built. - requireStack = [], - // Map of module ID -> index into requireStack of modules currently being built. - inProgressModules = {}, - SEPARATOR = "."; - - - - function build(module) { - var factory = module.factory, - localRequire = function (id) { - var resultantId = id; - //Its a relative path, so lop off the last portion and add the id (minus "./") - if (id.charAt(0) === ".") { - resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2); - } - return require(resultantId); - }; - module.exports = {}; - delete module.factory; - factory(localRequire, module.exports, module); - return module.exports; - } - - require = function (id) { - if (!modules[id]) { - throw "module " + id + " not found"; - } else if (id in inProgressModules) { - var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id; - throw "Cycle in require graph: " + cycle; - } - if (modules[id].factory) { - try { - inProgressModules[id] = requireStack.length; - requireStack.push(id); - return build(modules[id]); - } finally { - delete inProgressModules[id]; - requireStack.pop(); - } - } - return modules[id].exports; - }; - - define = function (id, factory) { - if (modules[id]) { - throw "module " + id + " already defined"; - } - - modules[id] = { - id: id, - factory: factory - }; - }; - - define.remove = function (id) { - delete modules[id]; - }; - - define.moduleMap = modules; -})(); - -//Export for use in node -if (typeof module === "object" && typeof require === "function") { - module.exports.require = require; - module.exports.define = define; -} - -// file: src/cordova.js -define("cordova", function(require, exports, module) { - - -var channel = require('cordova/channel'); -var platform = require('cordova/platform'); - -/** - * Intercept calls to addEventListener + removeEventListener and handle deviceready, - * resume, and pause events. - */ -var m_document_addEventListener = document.addEventListener; -var m_document_removeEventListener = document.removeEventListener; -var m_window_addEventListener = window.addEventListener; -var m_window_removeEventListener = window.removeEventListener; - -/** - * Houses custom event handlers to intercept on document + window event listeners. - */ -var documentEventHandlers = {}, - windowEventHandlers = {}; - -document.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof documentEventHandlers[e] != 'undefined') { - documentEventHandlers[e].subscribe(handler); - } else { - m_document_addEventListener.call(document, evt, handler, capture); - } -}; - -window.addEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - if (typeof windowEventHandlers[e] != 'undefined') { - windowEventHandlers[e].subscribe(handler); - } else { - m_window_addEventListener.call(window, evt, handler, capture); - } -}; - -document.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof documentEventHandlers[e] != "undefined") { - documentEventHandlers[e].unsubscribe(handler); - } else { - m_document_removeEventListener.call(document, evt, handler, capture); - } -}; - -window.removeEventListener = function(evt, handler, capture) { - var e = evt.toLowerCase(); - // If unsubscribing from an event that is handled by a plugin - if (typeof windowEventHandlers[e] != "undefined") { - windowEventHandlers[e].unsubscribe(handler); - } else { - m_window_removeEventListener.call(window, evt, handler, capture); - } -}; - -function createEvent(type, data) { - var event = document.createEvent('Events'); - event.initEvent(type, false, false); - if (data) { - for (var i in data) { - if (data.hasOwnProperty(i)) { - event[i] = data[i]; - } - } - } - return event; -} - - -var cordova = { - define:define, - require:require, - version:PLATFORM_VERSION_BUILD_LABEL, - platformVersion:PLATFORM_VERSION_BUILD_LABEL, - platformId:platform.id, - /** - * Methods to add/remove your own addEventListener hijacking on document + window. - */ - addWindowEventHandler:function(event) { - return (windowEventHandlers[event] = channel.create(event)); - }, - addStickyDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.createSticky(event)); - }, - addDocumentEventHandler:function(event) { - return (documentEventHandlers[event] = channel.create(event)); - }, - removeWindowEventHandler:function(event) { - delete windowEventHandlers[event]; - }, - removeDocumentEventHandler:function(event) { - delete documentEventHandlers[event]; - }, - /** - * Retrieve original event handlers that were replaced by Cordova - * - * @return object - */ - getOriginalHandlers: function() { - return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener}, - 'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}}; - }, - /** - * Method to fire event from native code - * bNoDetach is required for events which cause an exception which needs to be caught in native code - */ - fireDocumentEvent: function(type, data, bNoDetach) { - var evt = createEvent(type, data); - if (typeof documentEventHandlers[type] != 'undefined') { - if( bNoDetach ) { - documentEventHandlers[type].fire(evt); - } - else { - setTimeout(function() { - // Fire deviceready on listeners that were registered before cordova.js was loaded. - if (type == 'deviceready') { - document.dispatchEvent(evt); - } - documentEventHandlers[type].fire(evt); - }, 0); - } - } else { - document.dispatchEvent(evt); - } - }, - fireWindowEvent: function(type, data) { - var evt = createEvent(type,data); - if (typeof windowEventHandlers[type] != 'undefined') { - setTimeout(function() { - windowEventHandlers[type].fire(evt); - }, 0); - } else { - window.dispatchEvent(evt); - } - }, - - /** - * Plugin callback mechanism. - */ - // Randomize the starting callbackId to avoid collisions after refreshing or navigating. - // This way, it's very unlikely that any new callback would get the same callbackId as an old callback. - callbackId: Math.floor(Math.random() * 2000000000), - callbacks: {}, - callbackStatus: { - NO_RESULT: 0, - OK: 1, - CLASS_NOT_FOUND_EXCEPTION: 2, - ILLEGAL_ACCESS_EXCEPTION: 3, - INSTANTIATION_EXCEPTION: 4, - MALFORMED_URL_EXCEPTION: 5, - IO_EXCEPTION: 6, - INVALID_ACTION: 7, - JSON_EXCEPTION: 8, - ERROR: 9 - }, - - /** - * Called by native code when returning successful result from an action. - */ - callbackSuccess: function(callbackId, args) { - try { - cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in success callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning error result from an action. - */ - callbackError: function(callbackId, args) { - // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. - // Derive success from status. - try { - cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); - } catch (e) { - console.log("Error in error callback: " + callbackId + " = "+e); - } - }, - - /** - * Called by native code when returning the result from an action. - */ - callbackFromNative: function(callbackId, success, status, args, keepCallback) { - var callback = cordova.callbacks[callbackId]; - if (callback) { - if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success.apply(null, args); - } else if (!success) { - callback.fail && callback.fail.apply(null, args); - } - - // Clear callback if not expecting any more results - if (!keepCallback) { - delete cordova.callbacks[callbackId]; - } - } - }, - addConstructor: function(func) { - channel.onCordovaReady.subscribe(function() { - try { - func(); - } catch(e) { - console.log("Failed to run constructor: " + e); - } - }); - } -}; - - -module.exports = cordova; - -}); - -// file: src/android/android/nativeapiprovider.js -define("cordova/android/nativeapiprovider", function(require, exports, module) { - -/** - * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi. - */ - -var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi'); -var currentApi = nativeApi; - -module.exports = { - get: function() { return currentApi; }, - setPreferPrompt: function(value) { - currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi; - }, - // Used only by tests. - set: function(value) { - currentApi = value; - } -}; - -}); - -// file: src/android/android/promptbasednativeapi.js -define("cordova/android/promptbasednativeapi", function(require, exports, module) { - -/** - * Implements the API of ExposedJsApi.java, but uses prompt() to communicate. - * This is used pre-JellyBean, where addJavascriptInterface() is disabled. - */ - -module.exports = { - exec: function(bridgeSecret, service, action, callbackId, argsJson) { - return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId])); - }, - setNativeToJsBridgeMode: function(bridgeSecret, value) { - prompt(value, 'gap_bridge_mode:' + bridgeSecret); - }, - retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) { - return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret); - } -}; - -}); - -// file: src/common/argscheck.js -define("cordova/argscheck", function(require, exports, module) { - -var exec = require('cordova/exec'); -var utils = require('cordova/utils'); - -var moduleExports = module.exports; - -var typeMap = { - 'A': 'Array', - 'D': 'Date', - 'N': 'Number', - 'S': 'String', - 'F': 'Function', - 'O': 'Object' -}; - -function extractParamName(callee, argIndex) { - return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex]; -} - -function checkArgs(spec, functionName, args, opt_callee) { - if (!moduleExports.enableChecks) { - return; - } - var errMsg = null; - var typeName; - for (var i = 0; i < spec.length; ++i) { - var c = spec.charAt(i), - cUpper = c.toUpperCase(), - arg = args[i]; - // Asterix means allow anything. - if (c == '*') { - continue; - } - typeName = utils.typeName(arg); - if ((arg === null || arg === undefined) && c == cUpper) { - continue; - } - if (typeName != typeMap[cUpper]) { - errMsg = 'Expected ' + typeMap[cUpper]; - break; - } - } - if (errMsg) { - errMsg += ', but got ' + typeName + '.'; - errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg; - // Don't log when running unit tests. - if (typeof jasmine == 'undefined') { - console.error(errMsg); - } - throw TypeError(errMsg); - } -} - -function getValue(value, defaultValue) { - return value === undefined ? defaultValue : value; -} - -moduleExports.checkArgs = checkArgs; -moduleExports.getValue = getValue; -moduleExports.enableChecks = true; - - -}); - -// file: src/common/base64.js -define("cordova/base64", function(require, exports, module) { - -var base64 = exports; - -base64.fromArrayBuffer = function(arrayBuffer) { - var array = new Uint8Array(arrayBuffer); - return uint8ToBase64(array); -}; - -base64.toArrayBuffer = function(str) { - var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary'); - var arrayBuffer = new ArrayBuffer(decodedStr.length); - var array = new Uint8Array(arrayBuffer); - for (var i=0, len=decodedStr.length; i < len; i++) { - array[i] = decodedStr.charCodeAt(i); - } - return arrayBuffer; -}; - -//------------------------------------------------------------------------------ - -/* This code is based on the performance tests at http://jsperf.com/b64tests - * This 12-bit-at-a-time algorithm was the best performing version on all - * platforms tested. - */ - -var b64_6bit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64_12bit; - -var b64_12bitTable = function() { - b64_12bit = []; - for (var i=0; i<64; i++) { - for (var j=0; j<64; j++) { - b64_12bit[i*64+j] = b64_6bit[i] + b64_6bit[j]; - } - } - b64_12bitTable = function() { return b64_12bit; }; - return b64_12bit; -}; - -function uint8ToBase64(rawData) { - var numBytes = rawData.byteLength; - var output=""; - var segment; - var table = b64_12bitTable(); - for (var i=0;i<numBytes-2;i+=3) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8) + rawData[i+2]; - output += table[segment >> 12]; - output += table[segment & 0xfff]; - } - if (numBytes - i == 2) { - segment = (rawData[i] << 16) + (rawData[i+1] << 8); - output += table[segment >> 12]; - output += b64_6bit[(segment & 0xfff) >> 6]; - output += '='; - } else if (numBytes - i == 1) { - segment = (rawData[i] << 16); - output += table[segment >> 12]; - output += '=='; - } - return output; -} - -}); - -// file: src/common/builder.js -define("cordova/builder", function(require, exports, module) { - -var utils = require('cordova/utils'); - -function each(objects, func, context) { - for (var prop in objects) { - if (objects.hasOwnProperty(prop)) { - func.apply(context, [objects[prop], prop]); - } - } -} - -function clobber(obj, key, value) { - exports.replaceHookForTesting(obj, key); - obj[key] = value; - // Getters can only be overridden by getters. - if (obj[key] !== value) { - utils.defineGetter(obj, key, function() { - return value; - }); - } -} - -function assignOrWrapInDeprecateGetter(obj, key, value, message) { - if (message) { - utils.defineGetter(obj, key, function() { - console.log(message); - delete obj[key]; - clobber(obj, key, value); - return value; - }); - } else { - clobber(obj, key, value); - } -} - -function include(parent, objects, clobber, merge) { - each(objects, function (obj, key) { - try { - var result = obj.path ? require(obj.path) : {}; - - if (clobber) { - // Clobber if it doesn't exist. - if (typeof parent[key] === 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else if (typeof obj.path !== 'undefined') { - // If merging, merge properties onto parent, otherwise, clobber. - if (merge) { - recursiveMerge(parent[key], result); - } else { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } - } - result = parent[key]; - } else { - // Overwrite if not currently defined. - if (typeof parent[key] == 'undefined') { - assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); - } else { - // Set result to what already exists, so we can build children into it if they exist. - result = parent[key]; - } - } - - if (obj.children) { - include(result, obj.children, clobber, merge); - } - } catch(e) { - utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"'); - } - }); -} - -/** - * Merge properties from one object onto another recursively. Properties from - * the src object will overwrite existing target property. - * - * @param target Object to merge properties into. - * @param src Object to merge properties from. - */ -function recursiveMerge(target, src) { - for (var prop in src) { - if (src.hasOwnProperty(prop)) { - if (target.prototype && target.prototype.constructor === target) { - // If the target object is a constructor override off prototype. - clobber(target.prototype, prop, src[prop]); - } else { - if (typeof src[prop] === 'object' && typeof target[prop] === 'object') { - recursiveMerge(target[prop], src[prop]); - } else { - clobber(target, prop, src[prop]); - } - } - } - } -} - -exports.buildIntoButDoNotClobber = function(objects, target) { - include(target, objects, false, false); -}; -exports.buildIntoAndClobber = function(objects, target) { - include(target, objects, true, false); -}; -exports.buildIntoAndMerge = function(objects, target) { - include(target, objects, true, true); -}; -exports.recursiveMerge = recursiveMerge; -exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter; -exports.replaceHookForTesting = function() {}; - -}); - -// file: src/common/channel.js -define("cordova/channel", function(require, exports, module) { - -var utils = require('cordova/utils'), - nextGuid = 1; - -/** - * Custom pub-sub "channel" that can have functions subscribed to it - * This object is used to define and control firing of events for - * cordova initialization, as well as for custom events thereafter. - * - * The order of events during page load and Cordova startup is as follows: - * - * onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed. - * onNativeReady* Internal event that indicates the Cordova native side is ready. - * onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created. - * onDeviceReady* User event fired to indicate that Cordova is ready - * onResume User event fired to indicate a start/resume lifecycle event - * onPause User event fired to indicate a pause lifecycle event - * onDestroy* Internal event fired when app is being destroyed (User should use window.onunload event, not this one). - * - * The events marked with an * are sticky. Once they have fired, they will stay in the fired state. - * All listeners that subscribe after the event is fired will be executed right away. - * - * The only Cordova events that user code should register for are: - * deviceready Cordova native code is initialized and Cordova APIs can be called from JavaScript - * pause App has moved to background - * resume App has returned to foreground - * - * Listeners can be registered as: - * document.addEventListener("deviceready", myDeviceReadyListener, false); - * document.addEventListener("resume", myResumeListener, false); - * document.addEventListener("pause", myPauseListener, false); - * - * The DOM lifecycle events should be used for saving and restoring state - * window.onload - * window.onunload - * - */ - -/** - * Channel - * @constructor - * @param type String the channel name - */ -var Channel = function(type, sticky) { - this.type = type; - // Map of guid -> function. - this.handlers = {}; - // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired. - this.state = sticky ? 1 : 0; - // Used in sticky mode to remember args passed to fire(). - this.fireArgs = null; - // Used by onHasSubscribersChange to know if there are any listeners. - this.numHandlers = 0; - // Function that is called when the first listener is subscribed, or when - // the last listener is unsubscribed. - this.onHasSubscribersChange = null; -}, - channel = { - /** - * Calls the provided function only after all of the channels specified - * have been fired. All channels must be sticky channels. - */ - join: function(h, c) { - var len = c.length, - i = len, - f = function() { - if (!(--i)) h(); - }; - for (var j=0; j<len; j++) { - if (c[j].state === 0) { - throw Error('Can only use join with sticky channels.'); - } - c[j].subscribe(f); - } - if (!len) h(); - }, - create: function(type) { - return channel[type] = new Channel(type, false); - }, - createSticky: function(type) { - return channel[type] = new Channel(type, true); - }, - - /** - * cordova Channels that must fire before "deviceready" is fired. - */ - deviceReadyChannelsArray: [], - deviceReadyChannelsMap: {}, - - /** - * Indicate that a feature needs to be initialized before it is ready to be used. - * This holds up Cordova's "deviceready" event until the feature has been initialized - * and Cordova.initComplete(feature) is called. - * - * @param feature {String} The unique feature name - */ - waitForInitialization: function(feature) { - if (feature) { - var c = channel[feature] || this.createSticky(feature); - this.deviceReadyChannelsMap[feature] = c; - this.deviceReadyChannelsArray.push(c); - } - }, - - /** - * Indicate that initialization code has completed and the feature is ready to be used. - * - * @param feature {String} The unique feature name - */ - initializationComplete: function(feature) { - var c = this.deviceReadyChannelsMap[feature]; - if (c) { - c.fire(); - } - } - }; - -function forceFunction(f) { - if (typeof f != 'function') throw "Function required as first argument!"; -} - -/** - * Subscribes the given function to the channel. Any time that - * Channel.fire is called so too will the function. - * Optionally specify an execution context for the function - * and a guid that can be used to stop subscribing to the channel. - * Returns the guid. - */ -Channel.prototype.subscribe = function(f, c) { - // need a function to call - forceFunction(f); - if (this.state == 2) { - f.apply(c || this, this.fireArgs); - return; - } - - var func = f, - guid = f.observer_guid; - if (typeof c == "object") { func = utils.close(c, f); } - - if (!guid) { - // first time any channel has seen this subscriber - guid = '' + nextGuid++; - } - func.observer_guid = guid; - f.observer_guid = guid; - - // Don't add the same handler more than once. - if (!this.handlers[guid]) { - this.handlers[guid] = func; - this.numHandlers++; - if (this.numHandlers == 1) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Unsubscribes the function with the given guid from the channel. - */ -Channel.prototype.unsubscribe = function(f) { - // need a function to unsubscribe - forceFunction(f); - - var guid = f.observer_guid, - handler = this.handlers[guid]; - if (handler) { - delete this.handlers[guid]; - this.numHandlers--; - if (this.numHandlers === 0) { - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - -/** - * Calls all functions subscribed to this channel. - */ -Channel.prototype.fire = function(e) { - var fail = false, - fireArgs = Array.prototype.slice.call(arguments); - // Apply stickiness. - if (this.state == 1) { - this.state = 2; - this.fireArgs = fireArgs; - } - if (this.numHandlers) { - // Copy the values first so that it is safe to modify it from within - // callbacks. - var toCall = []; - for (var item in this.handlers) { - toCall.push(this.handlers[item]); - } - for (var i = 0; i < toCall.length; ++i) { - toCall[i].apply(this, fireArgs); - } - if (this.state == 2 && this.numHandlers) { - this.numHandlers = 0; - this.handlers = {}; - this.onHasSubscribersChange && this.onHasSubscribersChange(); - } - } -}; - - -// defining them here so they are ready super fast! -// DOM event that is received when the web page is loaded and parsed. -channel.createSticky('onDOMContentLoaded'); - -// Event to indicate the Cordova native side is ready. -channel.createSticky('onNativeReady'); - -// Event to indicate that all Cordova JavaScript objects have been created -// and it's time to run plugin constructors. -channel.createSticky('onCordovaReady'); - -// Event to indicate that all automatically loaded JS plugins are loaded and ready. -// FIXME remove this -channel.createSticky('onPluginsReady'); - -// Event to indicate that Cordova is ready -channel.createSticky('onDeviceReady'); - -// Event to indicate a resume lifecycle event -channel.create('onResume'); - -// Event to indicate a pause lifecycle event -channel.create('onPause'); - -// Event to indicate a destroy lifecycle event -channel.createSticky('onDestroy'); - -// Channels that must fire before "deviceready" is fired. -channel.waitForInitialization('onCordovaReady'); -channel.waitForInitialization('onDOMContentLoaded'); - -module.exports = channel; - -}); - -// file: src/android/exec.js -define("cordova/exec", function(require, exports, module) { - -/** - * Execute a cordova command. It is up to the native side whether this action - * is synchronous or asynchronous. The native side can return: - * Synchronous: PluginResult object as a JSON string - * Asynchronous: Empty string "" - * If async, the native side will cordova.callbackSuccess or cordova.callbackError, - * depending upon the result of the action. - * - * @param {Function} success The success callback - * @param {Function} fail The fail callback - * @param {String} service The name of the service to use - * @param {String} action Action to be run in cordova - * @param {String[]} [args] Zero or more arguments to pass to the method - */ -var cordova = require('cordova'), - nativeApiProvider = require('cordova/android/nativeapiprovider'), - utils = require('cordova/utils'), - base64 = require('cordova/base64'), - channel = require('cordova/channel'), - jsToNativeModes = { - PROMPT: 0, - JS_OBJECT: 1 - }, - nativeToJsModes = { - // Polls for messages using the JS->Native bridge. - POLLING: 0, - // For LOAD_URL to be viable, it would need to have a work-around for - // the bug where the soft-keyboard gets dismissed when a message is sent. - LOAD_URL: 1, - // For the ONLINE_EVENT to be viable, it would need to intercept all event - // listeners (both through addEventListener and window.ononline) as well - // as set the navigator property itself. - ONLINE_EVENT: 2, - // Uses reflection to access private APIs of the WebView that can send JS - // to be executed. - // Requires Android 3.2.4 or above. - PRIVATE_API: 3 - }, - jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, - pollEnabled = false, - messagesFromNative = [], - bridgeSecret = -1; - -function androidExec(success, fail, service, action, args) { - if (bridgeSecret < 0) { - // If we ever catch this firing, we'll need to queue up exec()s - // and fire them once we get a secret. For now, I don't think - // it's possible for exec() to be called since plugins are parsed but - // not run until until after onNativeReady. - throw new Error('exec() called without bridgeSecret'); - } - // Set default bridge modes if they have not already been set. - // By default, we use the failsafe, since addJavascriptInterface breaks too often - if (jsToNativeBridgeMode === undefined) { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - } - - // Process any ArrayBuffers in the args into a string. - for (var i = 0; i < args.length; i++) { - if (utils.typeName(args[i]) == 'ArrayBuffer') { - args[i] = base64.fromArrayBuffer(args[i]); - } - } - - var callbackId = service + cordova.callbackId++, - argsJson = JSON.stringify(args); - - if (success || fail) { - cordova.callbacks[callbackId] = {success:success, fail:fail}; - } - - var messages = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson); - // If argsJson was received by Java as null, try again with the PROMPT bridge mode. - // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666. - if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") { - androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT); - androidExec(success, fail, service, action, args); - androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT); - return; - } else { - androidExec.processMessages(messages, true); - } -} - -androidExec.init = function() { - bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode); - channel.onNativeReady.fire(); -}; - -function pollOnceFromOnlineEvent() { - pollOnce(true); -} - -function pollOnce(opt_fromOnlineEvent) { - if (bridgeSecret < 0) { - // This can happen when the NativeToJsMessageQueue resets the online state on page transitions. - // We know there's nothing to retrieve, so no need to poll. - return; - } - var msg = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent); - androidExec.processMessages(msg); -} - -function pollingTimerFunc() { - if (pollEnabled) { - pollOnce(); - setTimeout(pollingTimerFunc, 50); - } -} - -function hookOnlineApis() { - function proxyEvent(e) { - cordova.fireWindowEvent(e.type); - } - // The network module takes care of firing online and offline events. - // It currently fires them only on document though, so we bridge them - // to window here (while first listening for exec()-releated online/offline - // events). - window.addEventListener('online', pollOnceFromOnlineEvent, false); - window.addEventListener('offline', pollOnceFromOnlineEvent, false); - cordova.addWindowEventHandler('online'); - cordova.addWindowEventHandler('offline'); - document.addEventListener('online', proxyEvent, false); - document.addEventListener('offline', proxyEvent, false); -} - -hookOnlineApis(); - -androidExec.jsToNativeModes = jsToNativeModes; -androidExec.nativeToJsModes = nativeToJsModes; - -androidExec.setJsToNativeBridgeMode = function(mode) { - if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) { - mode = jsToNativeModes.PROMPT; - } - nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT); - jsToNativeBridgeMode = mode; -}; - -androidExec.setNativeToJsBridgeMode = function(mode) { - if (mode == nativeToJsBridgeMode) { - return; - } - if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - pollEnabled = false; - } - - nativeToJsBridgeMode = mode; - // Tell the native side to switch modes. - // Otherwise, it will be set by androidExec.init() - if (bridgeSecret >= 0) { - nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode); - } - - if (mode == nativeToJsModes.POLLING) { - pollEnabled = true; - setTimeout(pollingTimerFunc, 1); - } -}; - -// Processes a single message, as encoded by NativeToJsMessageQueue.java. -function processMessage(message) { - try { - var firstChar = message.charAt(0); - if (firstChar == 'J') { - eval(message.slice(1)); - } else if (firstChar == 'S' || firstChar == 'F') { - var success = firstChar == 'S'; - var keepCallback = message.charAt(1) == '1'; - var spaceIdx = message.indexOf(' ', 2); - var status = +message.slice(2, spaceIdx); - var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1); - var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx); - var payloadKind = message.charAt(nextSpaceIdx + 1); - var payload; - if (payloadKind == 's') { - payload = message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 't') { - payload = true; - } else if (payloadKind == 'f') { - payload = false; - } else if (payloadKind == 'N') { - payload = null; - } else if (payloadKind == 'n') { - payload = +message.slice(nextSpaceIdx + 2); - } else if (payloadKind == 'A') { - var data = message.slice(nextSpaceIdx + 2); - var bytes = window.atob(data); - var arraybuffer = new Uint8Array(bytes.length); - for (var i = 0; i < bytes.length; i++) { - arraybuffer[i] = bytes.charCodeAt(i); - } - payload = arraybuffer.buffer; - } else if (payloadKind == 'S') { - payload = window.atob(message.slice(nextSpaceIdx + 2)); - } else { - payload = JSON.parse(message.slice(nextSpaceIdx + 1)); - } - cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback); - } else { - console.log("processMessage failed: invalid message: " + JSON.stringify(message)); - } - } catch (e) { - console.log("processMessage failed: Error: " + e); - console.log("processMessage failed: Stack: " + e.stack); - console.log("processMessage failed: Message: " + message); - } -} - -var isProcessing = false; - -// This is called from the NativeToJsMessageQueue.java. -androidExec.processMessages = function(messages, opt_useTimeout) { - if (messages) { - messagesFromNative.push(messages); - } - // Check for the reentrant case. - if (isProcessing) { - return; - } - if (opt_useTimeout) { - window.setTimeout(androidExec.processMessages, 0); - return; - } - isProcessing = true; - try { - // TODO: add setImmediate polyfill and process only one message at a time. - while (messagesFromNative.length) { - var msg = popMessageFromQueue(); - // The Java side can send a * message to indicate that it - // still has messages waiting to be retrieved. - if (msg == '*' && messagesFromNative.length === 0) { - setTimeout(pollOnce, 0); - return; - } - processMessage(msg); - } - } finally { - isProcessing = false; - } -}; - -function popMessageFromQueue() { - var messageBatch = messagesFromNative.shift(); - if (messageBatch == '*') { - return '*'; - } - - var spaceIdx = messageBatch.indexOf(' '); - var msgLen = +messageBatch.slice(0, spaceIdx); - var message = messageBatch.substr(spaceIdx + 1, msgLen); - messageBatch = messageBatch.slice(spaceIdx + msgLen + 1); - if (messageBatch) { - messagesFromNative.unshift(messageBatch); - } - return message; -} - -module.exports = androidExec; - -}); - -// file: src/common/exec/proxy.js -define("cordova/exec/proxy", function(require, exports, module) { - - -// internal map of proxy function -var CommandProxyMap = {}; - -module.exports = { - - // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...); - add:function(id,proxyObj) { - console.log("adding proxy for " + id); - CommandProxyMap[id] = proxyObj; - return proxyObj; - }, - - // cordova.commandProxy.remove("Accelerometer"); - remove:function(id) { - var proxy = CommandProxyMap[id]; - delete CommandProxyMap[id]; - CommandProxyMap[id] = null; - return proxy; - }, - - get:function(service,action) { - return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null ); - } -}; -}); - -// file: src/common/init.js -define("cordova/init", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var modulemapper = require('cordova/modulemapper'); -var platform = require('cordova/platform'); -var pluginloader = require('cordova/pluginloader'); - -var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady]; - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -modulemapper.clobbers('cordova', 'cordova'); -modulemapper.clobbers('cordova/exec', 'cordova.exec'); -modulemapper.clobbers('cordova/exec', 'Cordova.exec'); - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. -// The delay allows the attached modules to be defined before the plugin loader looks for them. -setTimeout(function() { - pluginloader.load(function() { - channel.onPluginsReady.fire(); - }); -}, 0); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - modulemapper.mapModules(window); - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - - -}); - -// file: src/common/init_b.js -define("cordova/init_b", function(require, exports, module) { - -var channel = require('cordova/channel'); -var cordova = require('cordova'); -var platform = require('cordova/platform'); - -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady]; - -// setting exec -cordova.exec = require('cordova/exec'); - -function logUnfiredChannels(arr) { - for (var i = 0; i < arr.length; ++i) { - if (arr[i].state != 2) { - console.log('Channel not fired: ' + arr[i].type); - } - } -} - -window.setTimeout(function() { - if (channel.onDeviceReady.state != 2) { - console.log('deviceready has not fired after 5 seconds.'); - logUnfiredChannels(platformInitChannelsArray); - logUnfiredChannels(channel.deviceReadyChannelsArray); - } -}, 5000); - -// Replace navigator before any modules are required(), to ensure it happens as soon as possible. -// We replace it so that properties that can't be clobbered can instead be overridden. -function replaceNavigator(origNavigator) { - var CordovaNavigator = function() {}; - CordovaNavigator.prototype = origNavigator; - var newNavigator = new CordovaNavigator(); - // This work-around really only applies to new APIs that are newer than Function.bind. - // Without it, APIs such as getGamepads() break. - if (CordovaNavigator.bind) { - for (var key in origNavigator) { - if (typeof origNavigator[key] == 'function') { - newNavigator[key] = origNavigator[key].bind(origNavigator); - } else { - (function(k) { - Object.defineProperty(newNavigator, k, { - get: function() { - return origNavigator[k]; - }, - configurable: true, - enumerable: true - }); - })(key); - } - } - } - return newNavigator; -} -if (window.navigator) { - window.navigator = replaceNavigator(window.navigator); -} - -if (!window.console) { - window.console = { - log: function(){} - }; -} -if (!window.console.warn) { - window.console.warn = function(msg) { - this.log("warn: " + msg); - }; -} - -// Register pause, resume and deviceready channels as events on document. -channel.onPause = cordova.addDocumentEventHandler('pause'); -channel.onResume = cordova.addDocumentEventHandler('resume'); -channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready'); - -// Listen for DOMContentLoaded and notify our channel subscribers. -if (document.readyState == 'complete' || document.readyState == 'interactive') { - channel.onDOMContentLoaded.fire(); -} else { - document.addEventListener('DOMContentLoaded', function() { - channel.onDOMContentLoaded.fire(); - }, false); -} - -// _nativeReady is global variable that the native side can set -// to signify that the native code is ready. It is a global since -// it may be called before any cordova JS is ready. -if (window._nativeReady) { - channel.onNativeReady.fire(); -} - -// Call the platform-specific initialization. -platform.bootstrap && platform.bootstrap(); - -/** - * Create all cordova objects once native side is ready. - */ -channel.join(function() { - - platform.initialize && platform.initialize(); - - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); - - // Fire onDeviceReady event once page has fully loaded, all - // constructors have run and cordova info has been received from native - // side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); - -}, platformInitChannelsArray); - -}); - -// file: src/common/modulemapper.js -define("cordova/modulemapper", function(require, exports, module) { - -var builder = require('cordova/builder'), - moduleMap = define.moduleMap, - symbolList, - deprecationMap; - -exports.reset = function() { - symbolList = []; - deprecationMap = {}; -}; - -function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { - if (!(moduleName in moduleMap)) { - throw new Error('Module ' + moduleName + ' does not exist.'); - } - symbolList.push(strategy, moduleName, symbolPath); - if (opt_deprecationMessage) { - deprecationMap[symbolPath] = opt_deprecationMessage; - } -} - -// Note: Android 2.3 does have Function.bind(). -exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('c', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('m', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { - addEntry('d', moduleName, symbolPath, opt_deprecationMessage); -}; - -exports.runs = function(moduleName) { - addEntry('r', moduleName, null); -}; - -function prepareNamespace(symbolPath, context) { - if (!symbolPath) { - return context; - } - var parts = symbolPath.split('.'); - var cur = context; - for (var i = 0, part; part = parts[i]; ++i) { - cur = cur[part] = cur[part] || {}; - } - return cur; -} - -exports.mapModules = function(context) { - var origSymbols = {}; - context.CDV_origSymbols = origSymbols; - for (var i = 0, len = symbolList.length; i < len; i += 3) { - var strategy = symbolList[i]; - var moduleName = symbolList[i + 1]; - var module = require(moduleName); - // <runs/> - if (strategy == 'r') { - continue; - } - var symbolPath = symbolList[i + 2]; - var lastDot = symbolPath.lastIndexOf('.'); - var namespace = symbolPath.substr(0, lastDot); - var lastName = symbolPath.substr(lastDot + 1); - - var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; - var parentObj = prepareNamespace(namespace, context); - var target = parentObj[lastName]; - - if (strategy == 'm' && target) { - builder.recursiveMerge(target, module); - } else if ((strategy == 'd' && !target) || (strategy != 'd')) { - if (!(symbolPath in origSymbols)) { - origSymbols[symbolPath] = target; - } - builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); - } - } -}; - -exports.getOriginalSymbol = function(context, symbolPath) { - var origSymbols = context.CDV_origSymbols; - if (origSymbols && (symbolPath in origSymbols)) { - return origSymbols[symbolPath]; - } - var parts = symbolPath.split('.'); - var obj = context; - for (var i = 0; i < parts.length; ++i) { - obj = obj && obj[parts[i]]; - } - return obj; -}; - -exports.reset(); - - -}); - -// file: src/android/platform.js -define("cordova/platform", function(require, exports, module) { - -module.exports = { - id: 'android', - bootstrap: function() { - var channel = require('cordova/channel'), - cordova = require('cordova'), - exec = require('cordova/exec'), - modulemapper = require('cordova/modulemapper'); - - // Get the shared secret needed to use the bridge. - exec.init(); - - // TODO: Extract this as a proper plugin. - modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app'); - - // Inject a listener for the backbutton on the document. - var backButtonChannel = cordova.addDocumentEventHandler('backbutton'); - backButtonChannel.onHasSubscribersChange = function() { - // If we just attached the first handler or detached the last handler, - // let native know we need to override the back button. - exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]); - }; - - // Add hardware MENU and SEARCH button handlers - cordova.addDocumentEventHandler('menubutton'); - cordova.addDocumentEventHandler('searchbutton'); - - function bindButtonChannel(buttonName) { - // generic button bind used for volumeup/volumedown buttons - var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button'); - volumeButtonChannel.onHasSubscribersChange = function() { - exec(null, null, "App", "overrideButton", [buttonName, this.numHandlers == 1]); - }; - } - // Inject a listener for the volume buttons on the document. - bindButtonChannel('volumeup'); - bindButtonChannel('volumedown'); - - // Let native code know we are all done on the JS side. - // Native code will then un-hide the WebView. - channel.onCordovaReady.subscribe(function() { - exec(null, null, "App", "show", []); - }); - } -}; - -}); - -// file: src/android/plugin/android/app.js -define("cordova/plugin/android/app", function(require, exports, module) { - -var exec = require('cordova/exec'); - -module.exports = { - /** - * Clear the resource cache. - */ - clearCache:function() { - exec(null, null, "App", "clearCache", []); - }, - - /** - * Load the url into the webview or into new browser instance. - * - * @param url The URL to load - * @param props Properties that can be passed in to the activity: - * wait: int => wait msec before loading URL - * loadingDialog: "Title,Message" => display a native loading dialog - * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error - * clearHistory: boolean => clear webview history (default=false) - * openExternal: boolean => open in a new browser (default=false) - * - * Example: - * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); - */ - loadUrl:function(url, props) { - exec(null, null, "App", "loadUrl", [url, props]); - }, - - /** - * Cancel loadUrl that is waiting to be loaded. - */ - cancelLoadUrl:function() { - exec(null, null, "App", "cancelLoadUrl", []); - }, - - /** - * Clear web history in this web view. - * Instead of BACK button loading the previous web page, it will exit the app. - */ - clearHistory:function() { - exec(null, null, "App", "clearHistory", []); - }, - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - backHistory:function() { - exec(null, null, "App", "backHistory", []); - }, - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "backbutton" event, this is automatically done. - * - * @param override T=override, F=cancel override - */ - overrideBackbutton:function(override) { - exec(null, null, "App", "overrideBackbutton", [override]); - }, - - /** - * Override the default behavior of the Android volume button. - * If overridden, when the volume button is pressed, the "volume[up|down]button" - * JavaScript event will be fired. - * - * Note: The user should not have to call this method. Instead, when the user - * registers for the "volume[up|down]button" event, this is automatically done. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - overrideButton:function(button, override) { - exec(null, null, "App", "overrideButton", [button, override]); - }, - - /** - * Exit and terminate the application. - */ - exitApp:function() { - return exec(null, null, "App", "exitApp", []); - } -}; - -}); - -// file: src/common/pluginloader.js -define("cordova/pluginloader", function(require, exports, module) { - -var modulemapper = require('cordova/modulemapper'); -var urlutil = require('cordova/urlutil'); - -// Helper function to inject a <script> tag. -// Exported for testing. -exports.injectScript = function(url, onload, onerror) { - var script = document.createElement("script"); - // onload fires even when script fails loads with an error. - script.onload = onload; - // onerror fires for malformed URLs. - script.onerror = onerror; - script.src = url; - document.head.appendChild(script); -}; - -function injectIfNecessary(id, url, onload, onerror) { - onerror = onerror || onload; - if (id in define.moduleMap) { - onload(); - } else { - exports.injectScript(url, function() { - if (id in define.moduleMap) { - onload(); - } else { - onerror(); - } - }, onerror); - } -} - -function onScriptLoadingComplete(moduleList, finishPluginLoading) { - // Loop through all the plugins and then through their clobbers and merges. - for (var i = 0, module; module = moduleList[i]; i++) { - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - modulemapper.clobbers(module.id, module.clobbers[j]); - } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - modulemapper.merges(module.id, module.merges[k]); - } - } - - // Finally, if runs is truthy we want to simply require() the module. - if (module.runs) { - modulemapper.runs(module.id); - } - } - - finishPluginLoading(); -} - -// Handler for the cordova_plugins.js content. -// See plugman's plugin_loader.js for the details of this object. -// This function is only called if the really is a plugins array that isn't empty. -// Otherwise the onerror response handler will just call finishPluginLoading(). -function handlePluginsObject(path, moduleList, finishPluginLoading) { - // Now inject the scripts. - var scriptCounter = moduleList.length; - - if (!scriptCounter) { - finishPluginLoading(); - return; - } - function scriptLoadedCallback() { - if (!--scriptCounter) { - onScriptLoadingComplete(moduleList, finishPluginLoading); - } - } - - for (var i = 0; i < moduleList.length; i++) { - injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback); - } -} - -function findCordovaPath() { - var path = null; - var scripts = document.getElementsByTagName('script'); - var term = '/cordova.js'; - for (var n = scripts.length-1; n>-1; n--) { - var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007). - if (src.indexOf(term) == (src.length - term.length)) { - path = src.substring(0, src.length - term.length) + '/'; - break; - } - } - return path; -} - -// Tries to load all plugins' js-modules. -// This is an async process, but onDeviceReady is blocked on onPluginsReady. -// onPluginsReady is fired when there are no plugins to load, or they are all done. -exports.load = function(callback) { - var pathPrefix = findCordovaPath(); - if (pathPrefix === null) { - console.log('Could not find cordova.js script tag. Plugin loading may fail.'); - pathPrefix = ''; - } - injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() { - var moduleList = require("cordova/plugin_list"); - handlePluginsObject(pathPrefix, moduleList, callback); - }, callback); -}; - - -}); - -// file: src/common/urlutil.js -define("cordova/urlutil", function(require, exports, module) { - - -/** - * For already absolute URLs, returns what is passed in. - * For relative URLs, converts them to absolute ones. - */ -exports.makeAbsolute = function makeAbsolute(url) { - var anchorEl = document.createElement('a'); - anchorEl.href = url; - return anchorEl.href; -}; - - -}); - -// file: src/common/utils.js -define("cordova/utils", function(require, exports, module) { - -var utils = exports; - -/** - * Defines a property getter / setter for obj[key]. - */ -utils.defineGetterSetter = function(obj, key, getFunc, opt_setFunc) { - if (Object.defineProperty) { - var desc = { - get: getFunc, - configurable: true - }; - if (opt_setFunc) { - desc.set = opt_setFunc; - } - Object.defineProperty(obj, key, desc); - } else { - obj.__defineGetter__(key, getFunc); - if (opt_setFunc) { - obj.__defineSetter__(key, opt_setFunc); - } - } -}; - -/** - * Defines a property getter for obj[key]. - */ -utils.defineGetter = utils.defineGetterSetter; - -utils.arrayIndexOf = function(a, item) { - if (a.indexOf) { - return a.indexOf(item); - } - var len = a.length; - for (var i = 0; i < len; ++i) { - if (a[i] == item) { - return i; - } - } - return -1; -}; - -/** - * Returns whether the item was found in the array. - */ -utils.arrayRemove = function(a, item) { - var index = utils.arrayIndexOf(a, item); - if (index != -1) { - a.splice(index, 1); - } - return index != -1; -}; - -utils.typeName = function(val) { - return Object.prototype.toString.call(val).slice(8, -1); -}; - -/** - * Returns an indication of whether the argument is an array or not - */ -utils.isArray = function(a) { - return utils.typeName(a) == 'Array'; -}; - -/** - * Returns an indication of whether the argument is a Date or not - */ -utils.isDate = function(d) { - return utils.typeName(d) == 'Date'; -}; - -/** - * Does a deep clone of the object. - */ -utils.clone = function(obj) { - if(!obj || typeof obj == 'function' || utils.isDate(obj) || typeof obj != 'object') { - return obj; - } - - var retVal, i; - - if(utils.isArray(obj)){ - retVal = []; - for(i = 0; i < obj.length; ++i){ - retVal.push(utils.clone(obj[i])); - } - return retVal; - } - - retVal = {}; - for(i in obj){ - if(!(i in retVal) || retVal[i] != obj[i]) { - retVal[i] = utils.clone(obj[i]); - } - } - return retVal; -}; - -/** - * Returns a wrapped version of the function - */ -utils.close = function(context, func, params) { - if (typeof params == 'undefined') { - return function() { - return func.apply(context, arguments); - }; - } else { - return function() { - return func.apply(context, params); - }; - } -}; - -/** - * Create a UUID - */ -utils.createUUID = function() { - return UUIDcreatePart(4) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(2) + '-' + - UUIDcreatePart(6); -}; - -/** - * Extends a child object from a parent object using classical inheritance - * pattern. - */ -utils.extend = (function() { - // proxy used to establish prototype chain - var F = function() {}; - // extend Child from Parent - return function(Child, Parent) { - F.prototype = Parent.prototype; - Child.prototype = new F(); - Child.__super__ = Parent.prototype; - Child.prototype.constructor = Child; - }; -}()); - -/** - * Alerts a message in any available way: alert or console.log. - */ -utils.alert = function(msg) { - if (window.alert) { - window.alert(msg); - } else if (console && console.log) { - console.log(msg); - } -}; - - -//------------------------------------------------------------------------------ -function UUIDcreatePart(length) { - var uuidpart = ""; - for (var i=0; i<length; i++) { - var uuidchar = parseInt((Math.random() * 256), 10).toString(16); - if (uuidchar.length == 1) { - uuidchar = "0" + uuidchar; - } - uuidpart += uuidchar; - } - return uuidpart; -} - - -}); - -window.cordova = require('cordova'); -// file: src/scripts/bootstrap.js - -require('cordova/init'); - -})(); \ No newline at end of file diff --git a/platforms/browser/www/styles/bootstrap.min.css b/platforms/browser/www/styles/bootstrap.min.css deleted file mode 100644 index 0e39c3bb..00000000 --- a/platforms/browser/www/styles/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} - -/* @import url(http://fonts.googleapis.com/css?family=Lato);*/ \ No newline at end of file diff --git a/platforms/browser/www/styles/main.css b/platforms/browser/www/styles/main.css deleted file mode 100644 index 73276c39..00000000 --- a/platforms/browser/www/styles/main.css +++ /dev/null @@ -1,134 +0,0 @@ -html { - min-height:100%; -} - -body { - font-family: 'Lato', sans-serif !important; - font-size:.9em; - min-height:100%; - background-repeat:no-repeat !important; - margin:0; - padding:0; - background: #339999 !important; - color:white !important; -} - -.gly-spin { - -webkit-animation: spin 2s infinite linear; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} - -.row-group-wide { -width:90%; margin-left:5%; -} - - -.btn { - font-size:1.3em; - margin-bottom:10px; - -} - -.btn-lg { - border-radius: 24px; -} - -.btn-sm { - border-radius: 24px; -} -.btn-md { - border-radius: 24px; -} -.btn { - border-radius:24px !important; -} - -.btn-info { - background:transparent !important; - border: 2px solid white !important; - color: white !important; -} - -.btn-primary { - background:white !important; - border: 2px solid white !important; - color: #44aa66 !important; - -} - -.btn-active { - background:#28866f !important; - border: 2px solid #28866f !important; - color: white !important; -} - -.well, .panel { - color: #44aa66 !important; - -} - -.btn-full {width:100%; margin-top:.5em; display:block;} - -.logo {width:50px; float:right; margin-top:1em;} - -.row.header {position:absolute; top:0; left:0; width:100%; background-color: #4E5D6C} - -.wide {width:100%;} - -.bgcolor9 {background-color: #BF5052 !important;} -.bgcolor8 {background-color: #C56564 !important;} -.bgcolor7 {background-color: #D89494 !important;} -.bgcolor6 {background-color: #E4B8B8 !important;} -.bgcolor5 {background-color: #C2D49D !important;} -.bgcolor4 {background-color: #94CDDB !important;} -.bgcolor3 {background-color: #5DA9BA !important;} -.bgcolor2 {background-color: #368498 !important;} -.bgcolor1 {background-color: #145F79 !important;} - -h4{margin-top:.75em !important;} - - -/* QUESTION GROUP STYLES*/ -.btn-group-radio{padding:.25em 0; text-align: center;} -.center-form {text-align: center;} -.question_number {font-size:1.5em;} -.question-content {margin-bottom:.75em; font-size:.8em;} -.question-group {text-align: center; display:block; margin-top:.25em;} -.question-group label {display:block; text-align: left; margin:auto; font-size:1.3em; margin-bottom:.5em;} -.question-group .response-label{font-weight: normal;font-size:1.1em;} -.question-group .content-label{margin-bottom:.5em;} -.question-nav {position:absolute; bottom:0; left:0;width:100%; margin-right:auto; margin-left:auto;} -.nav-left {text-align: left; width:40%; float:left;} -.nav-center {text-align: center; width:20%;float:left;} -.nav-right {text-align: right; width:40%;float:left;} -.question-group-progress {background-color: rgba(40,140,50,0.4); border-radius: .5em} -.response-label {white-space: normal !important;} - -select {color:black !important;} -option {color:black !important;} - -/*.mainContent h1 {font-size:1.9em;margin:0!important;margin-left:1.5em !important; padding:0 !important;} -*/ - -.highlight {background-color:white !important; color:#1e497c !important;} - -body div,p {text-indent: 0 !important;} - -table.rounded-cells{ border-spacing: 10px; border-collapse: separate;} - -.rounded-cells td { border-radius: .25em; background-color: gray;height:20px; display:block; float:left; width:13.08%; margin:.6%} - -td.a{background-color:#50BF52;} - -td.b{background-color:#CCCC00;} - -td.c{background-color:#FF9900} - -input {color:black !important;} - -li { - margin-bottom:.5em; -} - diff --git a/platforms/browser/www/views/about.html b/platforms/browser/www/views/about.html deleted file mode 100644 index d21bf89f..00000000 --- a/platforms/browser/www/views/about.html +++ /dev/null @@ -1 +0,0 @@ -<p>This is the about view.</p> diff --git a/platforms/browser/www/views/admin.html b/platforms/browser/www/views/admin.html deleted file mode 100644 index 03c5d2fd..00000000 --- a/platforms/browser/www/views/admin.html +++ /dev/null @@ -1,10 +0,0 @@ - -<nav class="navbar navbar-default" role="navigation"> - <div class="container-fluid"> - <!-- Brand and toggle get grouped for better mobile display --> - <div class="navbar-header"> - <a ng-href="#/cms" class="btn btn-info">Content Editor</a> - <a class="navbar-brand" href="#">Admin</a> - </div> -</div> -</nav> \ No newline at end of file diff --git a/platforms/browser/www/views/charts.html b/platforms/browser/www/views/charts.html deleted file mode 100644 index b104852e..00000000 --- a/platforms/browser/www/views/charts.html +++ /dev/null @@ -1,22 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<!--<div class="alert alert-warning">--> -<!--Complete your daily check in at least three times to see your feedback charts!--> -<!--</div>--> - <h4>Medication</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.medications track by $index" ng-click="addToolTip()" class="{{medication.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{medication.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - - <h4>Sleep</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.sleep track by $index" ng-click="addToolTip()" class="add-tooltip {{sleep.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{sleep.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - - <h4>Routine</h4> - <table class="table rounded-cells"> - <tr><td ng-repeat="day in recodedResponses.routine track by $index" ng-click="addToolTip()" class="add-tooltip {{routine.class(day)[0]}}" data-toggle="tooltip" data-placement="top" title="{{routine.class(day)[1]}}" tooltip-placement="top"></td></tr> - </table> - -<h4>Wellness</h4> -<highchart id="chart1" config="config" style="width:100%; height:250px;" ></highchart> \ No newline at end of file diff --git a/platforms/browser/www/views/checkins.html b/platforms/browser/www/views/checkins.html deleted file mode 100644 index b665a0f4..00000000 --- a/platforms/browser/www/views/checkins.html +++ /dev/null @@ -1,5 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-href="#/daily_check_in" class="btn btn-info btn-full">Daily Check In</a><br/> - -<a ng-href="#/weekly_check_in" class="btn btn-info btn-full">Weekly Check In</a> \ No newline at end of file diff --git a/platforms/browser/www/views/cms.html b/platforms/browser/www/views/cms.html deleted file mode 100644 index 9f81c9bf..00000000 --- a/platforms/browser/www/views/cms.html +++ /dev/null @@ -1,32 +0,0 @@ -<div class="navbar navbar-fixed"> - <form class="navbar-form navbar-left" role="search"> - <div class="form-group"> - <select class="form-control" ng-model="questionGroup" ng-change="showGroup()" ng-options="x.id as x.name for x in questionGroups"> - <option value="">choose a question group</option> - </select> - <select class="form-control" ng-model="viewType" ng-options="x.value as x.name for x in viewTypes"> - <option value="">select a view</option> - </select> - </div> - </form> -</div> - -<div ng-if="viewType == 'table'" > - <div ng-include="'/views/cms/table.html'"></div> -</div> - -<div ng-if="viewType == 'map'" class="row"> - - <h2>Map</h2> - - -<div id="questionGroupmap"></div> - -<!-- <div ng-repeat="question in selectedQuestions" class="row"> - - {{question.content}} - - </div> - --> -</div> - diff --git a/platforms/browser/www/views/cms/table.html b/platforms/browser/www/views/cms/table.html deleted file mode 100644 index b95da982..00000000 --- a/platforms/browser/www/views/cms/table.html +++ /dev/null @@ -1,49 +0,0 @@ -<table style="width:100%;" class="table table-striped"> - <tr ng-repeat="question in selectedQuestions"> - <td class="col-md-1">{{$index}}</td> - <td class="col-md-7"> - <select ng-model="selectedQuestions[$index].type" ng-options="item for item in formFieldTypes"></select> - <label>Data Label: <input type="text" ng-model="selectedQuestions[$index].questionDataLabel"></label> - <textarea ng-bind-html="selectedQuestions[$index].content" class="form-control" ng-model="selectedQuestions[$index].content"></textarea> - </td> - <td class="col-md-4"> - <table class="table table-striped"> - <tr ng-repeat="response in question.responses"> - <td class="col-md-1">{{response.value}}</td> - <td class="col-md-10">{{response.label}}</td> - </tr> - </table> - <button class="btn btn-success" ng-click="editResponses('{{selectedQuestions[$index].responseGroupId}}')"> Edit Responses </button> - </td> - </tr> -</table> -<button ng-if="questionGroup != ''" class="btn btn-primary" ng-click="addQuestion()"> + Add Question</button> - -<div class="modal fade" id="responseModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> - <h4 class="modal-title">{{modalTitle}}</h4> - </div> - <div class="modal-body"> - <table class="table table-striped"> - <select ng-model="responseGroupId" ng-options="item as item for item in uniqueResponseGroups"></select> - - - <tr><th>Order</th><th>Label</th><th>Value</th><th>Goes to:</th></tr> - <tr ng-repeat="response in showResponses"> - <td class="col-md-1"><input type="text" ng-model="showResponses[$index].order"></td> - <td class="col-md-4"><input type="text" ng-model="showResponses[$index].label"></td> - <td class="col-md-4"><input type="text" ng-model="showResponses[$index].value"></td> - <td class="col-md-3"><select ng-model="showResponses[$index].goesTo" ng-options="item.questionDataLabel for item in goesToOptions"><option></option></select></td> - </tr> - </table> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> - <button type="button" class="btn btn-primary" ng-click="saveResponses()">Save changes</button> - </div> - </div> - </div> -</div> diff --git a/platforms/browser/www/views/daily_check_in.html b/platforms/browser/www/views/daily_check_in.html deleted file mode 100644 index eae5aef3..00000000 --- a/platforms/browser/www/views/daily_check_in.html +++ /dev/null @@ -1,95 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div id="warning" class="modal fade"> - <div class="modal-dialog"> - <div class="modal-content"> - - <div class="modal-body alert-danger"> - {{selectedWarningMessage}} - <br/> - <br/> - - <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button> - </div> - - </div> - <!-- /.modal-content --> - </div> - <!-- /.modal-dialog --> -</div> -<!-- /.modal --> - -<div id="continue" class="modal fade"> - <div class="modal-dialog"> - <div class="modal-content"> - - <div class="modal-body alert-warning"> - - <Br/> - <div class="alert alert-danger" ng-show="emergency"> - Looks like you are in a crisis we recommend that you call your psychiatrist, call 9-1-1, or go to the nearest emergency room. - <br/> - - <a ng-show="warningPhoneNumber != null" class="btn btn-primary" href="tel:{{warningPhoneNumber}}">Call Your Psychiatrist Now</a> - - </div> - <a ng-href="#/daily_review/{{nextId}}" class="btn btn-primary btn-full" >Continue to Daily Review</a> - <br/> - <a ng-href="#/" class="btn btn-primary btn-full">Return Home</a> - </div> - - </div> - <!-- /.modal-content --> - </div> - <!-- /.modal-dialog --> -</div> -<!-- /.modal --> - - -<form ng-submit="saveCheckIn()" class="center-form"> - <h4>MEDICATIONS</h4> - - <div class="row-fluid"> - <label class="btn btn-success col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="2"> All</label> - <label class="btn btn-warning col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="1"> Some</label> - <label class="btn btn-danger col-sm-4 col-md-4 col-xs-4"> - <input type="radio" ng-model="dailyCheckIn.medications" value="0"> None</label> - </div> - - <br/> - <br/> - <h4>SLEEP</h4> - <select ng-model="dailyCheckIn.sleepDuration" name="sleepDuration" > - <option ng-repeat="hour in hours" value="{{hour.value}}" style="color:black !important;">{{hour.label}}</option> - </select> - - - <h4>ROUTINE</h4> - <div class="row"> - <div class="col-sm-6"> - <h5>Went To Bed</h5> - <select ng-model="dailyCheckIn.toBed" name="toBed"> - <option ng-repeat="time in times" value="{{time.value}}" style="color:black !important;">{{time.label}}</option> - </select> - </div> - <div class="col-sm-6"> - <h5>Got Up</h5> - <select ng-model="dailyCheckIn.gotUp" name="gotUp"> - <option ng-repeat="time in times" value="{{time.value}}" style="color:black !important;">{{time.label}}</option> - </select> - </div> - </div> - - - - <h4>WELLNESS</h4> - <div class="btn-group btn-group-justified" data-toggle="buttons"> - <label ng-click="highlight('#button{{response.order}}','{{response.response}}');warning({{response}})" id="button{{response.order}}" class="btn bgcolor{{response.order}} btn-group-radio" ng-repeat="response in responses">{{response.label}} - - </div> - - <br/> - <button type="submit" class="btn btn-primary btn-full">Submit</button> -</form> \ No newline at end of file diff --git a/platforms/browser/www/views/daily_review.html b/platforms/browser/www/views/daily_review.html deleted file mode 100644 index 68731190..00000000 --- a/platforms/browser/www/views/daily_review.html +++ /dev/null @@ -1,101 +0,0 @@ -<div id="warning" class="modal fade" ng-show="showWarning"> - <div class="modal-dialog"> - <div class="modal-body alert-danger"> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> - <h4 class="modal-title">Ask for help</h4> - {{warningMessage}}<br/><br/> - <a href="tel:{{phoneNumber}}" class="btn btn-primary">Call Now</a> - </div> - </div> - <!-- /.modal-content --> -</div> -<!-- /.modal-dialog --> -</div><!-- /.modal --> -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group" ng-show='code != 1 && code != 2'> - <div class="row"> - <div class="col-md-3 col-xs-3"></div> - <div class="col-md-6 col-xs-6" style="text-align:center;"> - Last seven days<br/><br/> - </div> - <div class="col-md-3 col-xs-3"></div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Medication</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% medications taken (All)"> - - <div class="progress-bar progress-bar-{{selectedIntervention.medicationsClass}}" role="progressbar" aria-valuenow="{{percentages.medications * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.medications * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.medications * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Sleep</div> - <div class="col-md-6 col-xs-6"> - - <div class="add-tooltip progress" data-toggle="tooltip" title="% within sleep range ({{routineData.Less}}-{{routineData.More}} hrs)"> - <div class="progress-bar progress-bar-{{selectedIntervention.sleepClass}}" role="progressbar" aria-valuenow="{{percentages.sleep * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.sleep * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.sleep * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Routine</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% within routine windows (bedtime {{cleanTime(routineData.BedTimeStrt_MT)}} - {{cleanTime(routineData.BedTimeStop_MT)}}, risetime = {{cleanTime(routineData.RiseTimeStrt_MT)}} - {{cleanTime(routineData.RiseTimeStop_MT)}})"> - <div class="progress-bar progress-bar-{{selectedIntervention.routineClass}}" role="progressbar" aria-valuenow="{{percentages.routine * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.routine * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.routine * 100 | number: 0}}%</div> - </div> - <div class="row"> - <div class="col-md-3 col-xs-3">Wellness</div> - <div class="col-md-6 col-xs-6"> - <div class="add-tooltip progress" data-toggle="tooltip" title="% well (-1 to 1)"> - <div class="progress-bar progress-bar-{{selectedIntervention.wellnessClass}}" role="progressbar" aria-valuenow="{{percentages.wellness * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{percentages.wellness * 100}}%;"> - </div> - </div> - </div> - <div class="col-md-3 col-xs-3">{{percentages.wellness * 100 | number: 0}}%</div> - </div> -</div> -<div class="row-group" style="margin-top:2em;"> - <div class="row"> - <div class="col-md-12" style="margin-bottom:1em;" ng-bind-html="interventionResponse()"></div> - </div> -</div> -<div class="row-group" style="margin-top:1em;"> - <div class="row"> - <div class="col-md-12 col-xs-12"> - <a ng-href="#/intervention/{{dailyReviewCategory}}" class="btn btn-primary btn-full">Continue</a> - </div> - - <!-- <div class="col-md-5 col-xs-5"> - <a ng-href="#/exit" class="btn btn-default wide">Exit</a> - </div> --> - </div> -</div> -<!-- <a ng-href="#/daily_check_in" class="btn btn-primary btn-full">Daily Check In</a> - --> -<!-- <h2>{{code}} {{dailyReviewCategory}}</h2> - <h3>Daily Check Ins (last 7)</h3> - <div class="well">{{dailyCheckInResponses}}</div> - - <h3>Recoded Responses</h3> - <div class="well">{{recodedResponses}}</div> - - <h3>Status Update Logic</h3> - - <div class="well"> - Previous Status: {{updatedClinicalStatus.oldStatus}}<br/> - New Status: {{updatedClinicalStatus.newStatus}}<br/> - Last AMRS Score: {{updatedClinicalStatus.amrsSum}}<br/> - Last PHQ Score: {{updatedClinicalStatus.phq8Sum}}<br/><br/> - Wellness Rating Counts:in last 7 days: <br/>{{updatedClinicalStatus.intensityCount}} - - <Br/></div> --> \ No newline at end of file diff --git a/platforms/browser/www/views/daily_review_conclusion.html b/platforms/browser/www/views/daily_review_conclusion.html deleted file mode 100644 index 4f4b491b..00000000 --- a/platforms/browser/www/views/daily_review_conclusion.html +++ /dev/null @@ -1,20 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div class="col-md-10 col-md-offset-1 col-sm-10 col-sm-offset-1" ng-bind-html="lastNotification" style="padding:1em;font-size:1.4em;"> -</div> - <a ng-href="#/wellness/resources" class="btn btn-info btn-full">Resources</a><br/> - <a ng-href="#/wellness/risk" class="btn btn-info btn-full">Reduce Risks</a><br/> - <a ng-href="#/wellness/awareness" class="btn btn-info btn-full">Awareness &amp; Action</a><br/><br/> - <a ng-href="#/charts" class="btn btn-default btn-full">My Charts</a><br/> - -<br/> -<!-- <div class="row-group" style="margin-top:1em;"> -<div class="row"> - <div class="col-md-offset-1 col-xs-offset-1 col-md-5 col-xs-5"> - <a ng-href="#/" class="btn btn-primary wide">Return Home</a> - </div> - <div class="col-md-5 col-xs-5"> - <a ng-href="#/exit" class="btn btn-default wide">Exit</a> - </div> -</div> -</div> --> \ No newline at end of file diff --git a/platforms/browser/www/views/daily_review_summary.html b/platforms/browser/www/views/daily_review_summary.html deleted file mode 100644 index aae03e9b..00000000 --- a/platforms/browser/www/views/daily_review_summary.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> \ No newline at end of file diff --git a/platforms/browser/www/views/dailyreviewtester.html b/platforms/browser/www/views/dailyreviewtester.html deleted file mode 100644 index 65336cd0..00000000 --- a/platforms/browser/www/views/dailyreviewtester.html +++ /dev/null @@ -1,15 +0,0 @@ -<h2>Daily Review Tester</h2> - -<table class="table table-striped"> - <tr><th>ID</th><th>Wellness</th><th>Meds</th><th>Got Up</th><th>Went To Bed</th><th>Time</th></tr> - <tr ng-repeat="item in collection"> - <td>{{$index}}</td> - <td>{{item.wellness}}</td> - <td>{{item.medications}}</td> - <td>{{item.gotUp}}</td> - <td>{{item.toBed}}</td> - <td>{{item.timestamp}}</td> - </tr> -</table> - -<h1>Intervention: {{proposedIntervention}}</h1> \ No newline at end of file diff --git a/platforms/browser/www/views/ews.html b/platforms/browser/www/views/ews.html deleted file mode 100644 index e74d9e11..00000000 --- a/platforms/browser/www/views/ews.html +++ /dev/null @@ -1,18 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Check all warning signs of mania you experienced in the past week. If none, then -check none:</h4> -<form> -<div ng-controller="EwsCtrl" class="row-group"> -<br/> - <div ng-repeat="element in ews" > - <label for="{{element.value}}" class="btn btn-info wide" style="text-align:left; margin-bottom:10px;"> - <input name="ews" value="{{element.value}}" type="checkbox" id="{{element.value}}"> - <span ng-bind-html="element.value"></span> - </label> - </div> - -</div> -<br/> -<a ng-click='onClick()' class="wide btn-lg btn btn-primary">Next</a> -</form> diff --git a/platforms/browser/www/views/ews2.html b/platforms/browser/www/views/ews2.html deleted file mode 100644 index 6b1f71e2..00000000 --- a/platforms/browser/www/views/ews2.html +++ /dev/null @@ -1,20 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Check all warning sign of depression you experienced in the past week. If none, then -check none:</h4> - -<form> -<div ng-controller="Ews2Ctrl" class="row-group"> -<br/> - <div ng-repeat="element in ews2" > - <label for="{{element.value}}" class="btn btn-info wide" style="text-align:left; margin-bottom:10px;"> - <input name="ews2" value="{{element.value}}" type="checkbox" id="{{element.value}}"> - <span ng-bind-html="element.value"></span> - </label> - </div> - -</div> -<br/> - -<a ng-click="onClick()" class="wide btn-lg btn btn-primary">Submit</a> -</form> \ No newline at end of file diff --git a/platforms/browser/www/views/exit.html b/platforms/browser/www/views/exit.html deleted file mode 100644 index 33ac557a..00000000 --- a/platforms/browser/www/views/exit.html +++ /dev/null @@ -1 +0,0 @@ -<h3>Logging Off...</h3> \ No newline at end of file diff --git a/platforms/browser/www/views/foundations.html b/platforms/browser/www/views/foundations.html deleted file mode 100644 index 2405fe46..00000000 --- a/platforms/browser/www/views/foundations.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/lesson_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/home.html b/platforms/browser/www/views/home.html deleted file mode 100644 index 0939972f..00000000 --- a/platforms/browser/www/views/home.html +++ /dev/null @@ -1,47 +0,0 @@ -<div ng-hide="appConfigured"> -<div class="row" style="margin-top:10px; margin-bottom:"> - <div class="col-md-3 col-xs-3 col-sm-3 text-center"><img src="images/logo.png" style="width:100%;" /></div> - <div class="col-md-9 col-xs-9 col-sm-9 text-left"><h3>Set Up</h3> - </div> -</div> -<div class="row"> - <div class="col-md-12 col-xs-12 col-sm-12 text-left"> - <ol ng-controller="FetchContentCtrl"> - <li><h6>User ID</h6> - <input ng-model="userID" placeholder="enter the user id here"/><br/> - </li> - <li> - <a ng-click="fetchContent()" class=" btn btn-primary btn-sm {{errorClass}}" style="background-color:{{errorColor}} !important;" ><i class="glyphicon glyphicon-refresh"></i> Fetch Application Content</a><br/><br/> - </li> - </ol> - <a ng-click="startTrial()" class=" btn btn-primary btn-sm {{errorClass}}" style="background-color:{{errorColor}}" ><i class="glyphicon glyphicon-thumbs-up"></i> Start the Trial!</a><br/><br/> - - </div> -</div> - -</div> -<div ng-show="appConfigured"> -<div class="row" ng-controller="FetchContentCtrl"> - <div class="col-md-2 col-xs-2 col-sm-2 text-center"> - <a ng-href="#/instructions"><i class="glyphicon glyphicon-info-sign" style="font-size:2em; color:white; margin-top:10px;"></i></a> - <a ng-href="#/settings"><i class="glyphicon glyphicon-cog" style="font-size:2em; color:white; margin-top:10px;"></i></a> - </div> - <div class="col-xs-8 col-md-8 col-sm-8 text-center"> - <img src="images/logo.png" style="width:200px; margin-top:50px;" /> - </div> - <div class="col-md-2 col-xs-2 col-sm-2 text-center"><a ng-click="fetchContent()" class="{{errorClass}}" ><i class="glyphicon glyphicon-refresh" style="font-size:2em; color:{{errorColor}}; margin-top:10px;"></i></a></div> -</div> - -<div class="row col-md-12 col-xs-12 col-sm-12 col-lg-12 text-center" style="position:absolute; bottom:25px;" > -<h3>{{greeting}}</h3> - -<a class="btn btn-full btn-primary" ng-href="#/weekly_check_in" ng-hide="weeklyCheckInCompleteThisWeek()">Weekly Check In</a> -<a class="btn btn-full btn-primary" ng-href="#/daily_check_in" ng-hide="dailyCheckInCompleteToday()">Daily Check In</a> -<a class="btn btn-full btn-primary" ng-href="#/daily_review" ng-show="(!dailyReviewCompleteToday() && dailyCheckInCompleteToday()) && !lastDailyCheckInWasEmergency()">Daily Review</a> -<a class="btn btn-full btn-info" ng-href="#/daily_review" ng-show="dailyCheckInCompleteToday() && weeklyCheckInCompleteThisWeek() && dailyReviewCompleteToday() && !lastDailyCheckInWasEmergency()">Daily Review</a> -<a ng-href="#/load_interventions" class="btn btn-info btn-full" ng-show="dailyCheckInCompleteToday() && weeklyCheckInCompleteThisWeek() && dailyReviewCompleteToday() && !lastDailyCheckInWasEmergency()">Review Something Else</a> - -<a ng-repeat="link in mainLinks" ng-href="#/{{link.href}}" class="btn btn-info btn-full">{{link.name}}</a> -<br/> - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/instructions.html b/platforms/browser/www/views/instructions.html deleted file mode 100644 index 2405fe46..00000000 --- a/platforms/browser/www/views/instructions.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/lesson_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/intervention.html b/platforms/browser/www/views/intervention.html deleted file mode 100644 index 4afdb919..00000000 --- a/platforms/browser/www/views/intervention.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<question-group></question-group> \ No newline at end of file diff --git a/platforms/browser/www/views/lesson_player.html b/platforms/browser/www/views/lesson_player.html deleted file mode 100644 index da50134d..00000000 --- a/platforms/browser/www/views/lesson_player.html +++ /dev/null @@ -1,18 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<div class="row-fluid mainContainer" style="width:103%; margin-left:-3%; font-size:1.2em;"> - <div class="col-md-12 col-sm-12 col-xs-12 mainContent" ng-bind-html="currentSlideContents" style="margin-bottom:10px; margin-top: 10px;"> </div> -</div> -<div > - <div class="col-md-3 col-sm-3 col-xs-3"> - <button class="{{backButtonClass}}" ng-click="back()" ng-bind-html="backButton" ng-show="currentSlideIndex > 0"></button> - </div> - <div class="col-md-6 col-sm-6 col-xs-6 text-center"> - <div class="currentSlideCount">{{currentSlideIndex+1}} out of {{currentChapterContents.length}}</div> - <div class="progress"> - <div class="progress-bar" role="progressbar" aria-valuenow="{{((currentSlideIndex+1)/currentChapterContents.length)*100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{((currentSlideIndex+1)/currentChapterContents.length)*100}}%;"> </div> - </div> - </div> - <div class="col-md-3 col-sm-3 col-xs-3"> - <button class="{{nextButtonClass}}" ng-click="next()" ng-bind-html="nextButton"></button> - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/load_interventions.html b/platforms/browser/www/views/load_interventions.html deleted file mode 100644 index 830c7170..00000000 --- a/platforms/browser/www/views/load_interventions.html +++ /dev/null @@ -1,6 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<h4>Select a topic you'd like to learn more about:</h4> -<div ng-repeat="intervention in hierarchy | orderBy:'code':true"> - <a class="btn wide btn-info" style="margin-bottom:.5em;" ng-click="goToIntervention({{intervention.code}})" ng-hide="intervention.disabled == 'disabled'">{{intervention.category}}</a> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/localstoragebackuprestore.html b/platforms/browser/www/views/localstoragebackuprestore.html deleted file mode 100644 index fde0e255..00000000 --- a/platforms/browser/www/views/localstoragebackuprestore.html +++ /dev/null @@ -1,29 +0,0 @@ -<h2>Manage App Data</h2> - -<div class="col-md-12 col-xs-12 col-sm-12"> - -<h2>Local File Backup &amp; Restore</h2> -<textarea ng-model="localStorageContents" class="wide"></textarea><br/> - -<button class="btn btn-success wide" ng-click="initiateLocalBackup()">Backup</button><br/> - -<button class="btn btn-success wide" ng-click="restoreLocalBackup()">Restore</button><br/> - -<h2>Server Management</h2> -<div ng-controller="FetchContentCtrl"> - <button ng-click="fetchContent()" class="btn btn-primary wide">Update Application Content</button> - - <div id="update-summary"> - <div ng-repeat="item in summary">{{item.label}</div> - </div> - -</div> - -<button class="btn btn-warning wide" ng-click="updateRemoteService()" disabled>Update Remote Service</button><br/> - - - -<h2>Utilities</h2> - -<button class="btn btn-danger wide" ng-click="wipeLocalStorage()">Clear All Permanent App Data</button><br/><br/> -</div> diff --git a/platforms/browser/www/views/login.html b/platforms/browser/www/views/login.html deleted file mode 100644 index b83974e0..00000000 --- a/platforms/browser/www/views/login.html +++ /dev/null @@ -1 +0,0 @@ -<p>This is the login view.</p> diff --git a/platforms/browser/www/views/main.html b/platforms/browser/www/views/main.html deleted file mode 100644 index 130cf91e..00000000 --- a/platforms/browser/www/views/main.html +++ /dev/null @@ -1,5 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/{{link.href}}" class="btn btn-info btn-full">{{link.name}}</a> -<br/><br/> -<a ng-href="#/instructions" class="btn btn-info btn-full">Instructions</a> diff --git a/platforms/browser/www/views/medications.html b/platforms/browser/www/views/medications.html deleted file mode 100644 index 6ca14401..00000000 --- a/platforms/browser/www/views/medications.html +++ /dev/null @@ -1,9 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group row-group-wide"> -<div class="row"> -<div class="well" ng-repeat="medication in medications"> -{{medication.name}}, {{medication.dose}} {{medication.when}} -</div></div> - -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/myskills.html b/platforms/browser/www/views/myskills.html deleted file mode 100644 index 81412929..00000000 --- a/platforms/browser/www/views/myskills.html +++ /dev/null @@ -1,31 +0,0 @@ -<div class="row"> - <div class="col-sm-2 col-xs-2 col-md-2"><br/> - <a ng-href="#/" class="btn-lg" style="color:white;"><span class="glyphicon glyphicon-home"></span></a></div> - - <div class="col-sm-8 col-xs-8 col-md-8 text-center"> - <h3>My Skills</h3> - </div> - <div class="col-sm-2 col-xs-2 col-md-2"> - </div> -</div> - -<div class="well" ng-show="mySkills.length < 1"> - <i>When you have added skills, they will appear here.</i> -</div> - -<div ng-show="mySkills.length > 0 && currentSkillId == null"> - - <div ng-repeat='mySkill in mySkills'> - <button ng-click='showSkill({{mySkill}})' class='btn btn-info wide' style="margin-bottom:10px;">{{skill(mySkill)[0].pretty_name}}</button> -</div> - -</div> - - -<div ng-show="currentSkillId != null" > - - <div ng-bind-html="currentSkillContent.trim()" class="content"></div><br/> - <button ng-click="currentSkillId = null" class="btn btn-default">Return to My Skills</button> - <button ng-click="removeSkill()" class="btn btn-danger">Remove from My Skills</button> - -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/partials/awareness.html b/platforms/browser/www/views/partials/awareness.html deleted file mode 100644 index b9272137..00000000 --- a/platforms/browser/www/views/partials/awareness.html +++ /dev/null @@ -1,26 +0,0 @@ - -<div ng-controller="AwarenessCtrl"> - - - <button ng-click="loadPlan()" class="btn btn-info col-md-4 col-sm-4 col-xs-4 awareness-btn" id="load-plan">Plan</button> - <button ng-click="loadAnchors()" class="btn btn-info col-md-4 col-sm-4 col-xs-4 awareness-btn" id="load-anchors">Anchors</button> - <button class="btn-info btn col-md-4 col-sm-4 col-xs-4 awareness-btn" ng-click="loadAction()" id="load-action">Definition</button> - -<div ng-show="showAction"> - <table class="col-md-12 col-sm-12 table" > - <tr ng-repeat="element in awareness | orderBy: 'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> - -<div ng-show="showAnchors"> - <table class="col-md-12 col-sm-12 table"> - <tr ng-repeat="element in intervention_anchors | orderBy:'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> - -<div ng-show="showPlan"> - <table class="col-md-12 col-sm-12 table"> - <tr ng-repeat="element in plan | orderBy:'order':true"><th class="col-md-1 col-xs-1 col-sm-1 bgcolor{{element.order}}">{{element.value}}</th><th class="col-xs-2 col-md-2 col-sm-2 bgcolor{{element.order}}">{{element.name}}</th><td class="col-xs-9 col-md-9 col-sm-9" ng-bind-html="element.response"></td></tr> - </table> -</div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/partials/navbar.html b/platforms/browser/www/views/partials/navbar.html deleted file mode 100644 index a9ed8b8f..00000000 --- a/platforms/browser/www/views/partials/navbar.html +++ /dev/null @@ -1,10 +0,0 @@ -<div class="row"> - <div class="col-sm-2 col-xs-2 col-md-2"><br/> - <a ng-href="#/" class="btn-lg" style="color:white;"><span class="glyphicon glyphicon-home"></span></a></div> - - <div class="col-sm-8 col-xs-8 col-md-8 text-center"> - <h3>{{pageTitle}}</h3> - </div> - <div class="col-sm-2 col-xs-2 col-md-2"> - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/partials/resources.html b/platforms/browser/www/views/partials/resources.html deleted file mode 100644 index 486c478a..00000000 --- a/platforms/browser/www/views/partials/resources.html +++ /dev/null @@ -1,5 +0,0 @@ - <a ng-href="#/medications" class="btn btn-info btn-full">My Medications</a><br/> - <a ng-href="#/team" class="btn btn-info btn-full">My Team</a><br/> - <a ng-href="#/mySkills" class="btn btn-info btn-full">My Skills</a><br/> - <a ng-href="#/charts" class="btn btn-info btn-full">My Charts</a><br/> -<!-- <a ng-href="#/schedule" class="btn btn-info btn-full">My Schedule</a><br/> --> \ No newline at end of file diff --git a/platforms/browser/www/views/partials/risks.html b/platforms/browser/www/views/partials/risks.html deleted file mode 100644 index 1ecb9fd5..00000000 --- a/platforms/browser/www/views/partials/risks.html +++ /dev/null @@ -1,9 +0,0 @@ -<div ng-controller="RisksCtrl" class="row-group"> -<br/><br/><br/> -<table class="table col-md-12 col-xs-12 col-sm-12"> -<tr ng-repeat="element in smarts"><td class="col-xs-4 col-sm-4 col-md-4" style="vertical-align:middle;"> -<a ng-href="#/summary_player/{{element.lesson_id}}/skills_lifestyle" class="btn btn-info btn-full" style="margin:0;">{{element.name}}</a></td> -<td class="col-sm-8 col-xs-8 col-md-8" ng-bind-html="element.value"></td> -</tr> -</table> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/personalsnapshot.html b/platforms/browser/www/views/personalsnapshot.html deleted file mode 100644 index c326317a..00000000 --- a/platforms/browser/www/views/personalsnapshot.html +++ /dev/null @@ -1,12 +0,0 @@ -<h2>Personal Snapshot</h2> -<table class="table table-striped"> -<tr><th>More Severe:</th><td>{{sleepRoutineRanges.MoreSevere}}</td></tr> -<tr><th>More:</th><td>{{sleepRoutineRanges.More}}</td></tr> -<tr><th>Less:</th><td>{{sleepRoutineRanges.Less}}</td></tr> -<tr><th>Less Severe:</th><td>{{sleepRoutineRanges.LessSevere}}</td></tr> -<tr><th>Bed Time Range Start:</th><td>{{sleepRoutineRanges.BedTimeStrt_MT}}</td></tr> -<tr><th>Bed Time Range Stop:</th><td>{{sleepRoutineRanges.BedTimeStop_MT}}</td></tr> -<tr><th>Rise Time Range Start:</th><td>{{sleepRoutineRanges.RiseTimeStrt_MT}}</td></tr> -<tr><th>Rise Time Range Stop:</th><td>{{sleepRoutineRanges.RiseTimeStop_MT}}</td></tr> -<tr><th>Clinical Status Code:</th><td>{{currentClinicalStatusCode}}</td></tr> -</table> \ No newline at end of file diff --git a/platforms/browser/www/views/questionGroups/html.html b/platforms/browser/www/views/questionGroups/html.html deleted file mode 100644 index 65bdaac4..00000000 --- a/platforms/browser/www/views/questionGroups/html.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> \ No newline at end of file diff --git a/platforms/browser/www/views/questionGroups/multiple.html b/platforms/browser/www/views/questionGroups/multiple.html deleted file mode 100644 index 88270e9c..00000000 --- a/platforms/browser/www/views/questionGroups/multiple.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> - -<div ng-hide="question.responses.length == 1"> -<div class="response-group"> - <label ng-repeat="response in question.responses | orderBy : 'order' " class="btn btn-info wide btn-sm response-label" style="font-size:.8em;"> - <input type="{{question.type}}" name="{{question.questionDataLabel}}" id="q{{question.questionDataLabel}}{{response.value}}" value="{{response.value}}" ng-click="goesTo('{{response.goesTo}}',{{$parent.$index}});" data-goto="{{response.goesTo}}"> - {{response.label}} - </label> -</div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/questionGroups/nav.html b/platforms/browser/www/views/questionGroups/nav.html deleted file mode 100644 index 4b4e7688..00000000 --- a/platforms/browser/www/views/questionGroups/nav.html +++ /dev/null @@ -1,20 +0,0 @@ -<div class="question-nav" style="margin-bottom:5px;"> -{{hideBackButton}} -{{hideNextButton}} - <div class="nav-left">&nbsp; - <button class="btn btn-lg btn-info" ng-click='back()' ng-hide="{{question.hideBackButton}}" ng-if="$index != 0" ng-bind-html="label('back')"></button> - &nbsp; - </div> - <div class="nav-center"> - &nbsp; - <span class="question-group-progress" ng-hide="hideProgressBar"> - &nbsp;{{$index+1}} / {{numberOfQuestions}}&nbsp; - </span> - </div> - <div class="nav-right"> - &nbsp; - <button class="btn btn-lg btn-primary" ng-click='next({{question}},{{$index}})' ng-hide="{{question.hideNextbutton}}" ng-if="$index != numberOfQuestions -1" ng-bind-html="label('next')"></button> - <button type="submit" class="btn btn-lg btn-primary" ng-click='submit()' ng-hide="{{question.hideNextButton}}" ng-if="$index == numberOfQuestions - 1" ng-bind-html="label('submit')"></button> -&nbsp; - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/questionGroups/question_group.html b/platforms/browser/www/views/questionGroups/question_group.html deleted file mode 100644 index dc4e95bf..00000000 --- a/platforms/browser/www/views/questionGroups/question_group.html +++ /dev/null @@ -1,35 +0,0 @@ -<form> - <div ng-repeat="question in questionGroups" class="question-group" data-idx="{{$index}}" ng-if='showQuestion($index)' > - <label> - <div ng-switch on="questionViewType(question.type)"> - <div ng-switch-when="multiple"> - <div ng-include="'views/questionGroups/multiple.html'"></div> - </div> - <div ng-switch-when="single"> - <div ng-include="'views/questionGroups/single.html'"></div> - </div> - <div ng-switch-default> - <div ng-include="'views/questionGroups/html.html'"></div> - </div> - </div> - </label> - <div ng-show="question.responses.length == 0 && pageTitle == 'Daily Review'"> - <a ng-href="#/wellness/resources" class="btn btn-info btn-full">Wellness Plan</a><br/> - <a ng-href="#/skills" class="btn btn-info btn-full">Toolbox</a><br/> - <a ng-href="#/foundations" class="btn btn-info btn-full">Foundations</a><br/><br/> - <a ng-href="#/load_interventions" class="btn btn-info btn-full">Review Something Else</a> - </div> - - <div ng-hide="question.responses.length == 0 && pageTitle == 'Daily Review'"> - - <div ng-include="'views/questionGroups/nav.html'"></div> - </div> - </div> -</form> -<div ng-show="surveyFailure().error" > - <div class="alert alert-danger"> - <span ng-bind-html="_SURVEY_FAILURE_LABEL"></span><br/> - <span ng-bind-html="surveyFailure().message"></span> - </div> -</div> - diff --git a/platforms/browser/www/views/questionGroups/single.html b/platforms/browser/www/views/questionGroups/single.html deleted file mode 100644 index 065bfb89..00000000 --- a/platforms/browser/www/views/questionGroups/single.html +++ /dev/null @@ -1,14 +0,0 @@ -<div ng-include="'views/questionGroups/title.html'"></div> - -<div class="response-group"> - - <div ng-switch on="question.type"> - <div ng-switch-when="textarea"> - <textarea name="{{question.questionDataLabel}}"></textarea> - </div> - <div ng-switch-default> - <input type="{{question.type}}" name="{{question.questionDataLabel}}"> - </div> - - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/questionGroups/title.html b/platforms/browser/www/views/questionGroups/title.html deleted file mode 100644 index a9c5091f..00000000 --- a/platforms/browser/www/views/questionGroups/title.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-bind-html='question.content' style="font-size:1em !important; font-weight:normal !important; margin-bottom:10px;"></div> \ No newline at end of file diff --git a/platforms/browser/www/views/schedule.html b/platforms/browser/www/views/schedule.html deleted file mode 100644 index c1eb6ba6..00000000 --- a/platforms/browser/www/views/schedule.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<br/> -<div class="row-group row-group-wide"> -<div class="row"> -<div class="well" ng-repeat="schedule in schedules"> -{{schedule.name}}, -{{schedule.when}} -</div></div> - -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/settings.html b/platforms/browser/www/views/settings.html deleted file mode 100644 index 878af616..00000000 --- a/platforms/browser/www/views/settings.html +++ /dev/null @@ -1,24 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<div class="col-xs-12 col-sm-12 col-md-12"> - -<form ng-submit="savePromptSchedule()"> - -<h4>Set Your Daily Notification Time</h4> - -<select id="checkinPrompt" name="checkinPrompt" ng-model="checkinPrompt" ng-options="time.label for time in times track by time.value" style="color:black !important;"> -</select> -<br/><Br/> -<button type="submit" class="btn btn-primary">Save</button> -<br/><br/> -<p>This time will determine when you will first be prompted to complete your daily activities.</p> -<p><b>Daily activities</b> are all white buttons on the home screen of the device.</p> -<p>You will be prompted every 1 hour to complete your activities after this time!</p> - - -<br/><br/> - -</form> - -</div> diff --git a/platforms/browser/www/views/skills.html b/platforms/browser/www/views/skills.html deleted file mode 100644 index c0434e49..00000000 --- a/platforms/browser/www/views/skills.html +++ /dev/null @@ -1,4 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<a ng-repeat="link in mainLinks" ng-href="#/skills_{{link.id}}" class="btn btn-info btn-full">{{link.name}}</a> - diff --git a/platforms/browser/www/views/skills_awareness.html b/platforms/browser/www/views/skills_awareness.html deleted file mode 100644 index 9bcdc8d3..00000000 --- a/platforms/browser/www/views/skills_awareness.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<p><b>Awareness</b> means knowing what to look for and then looking for it!  You can use tools here to build awareness and help you identify your symptoms, early warning signs, and triggers for depression and mania.</p> - -<p><b>Preparedness</b> means identifying skills and supports in advance. You can use the tools here to build your plans for action.</p> - -<p>Take a look!</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/skills_coping.html b/platforms/browser/www/views/skills_coping.html deleted file mode 100644 index 362de84d..00000000 --- a/platforms/browser/www/views/skills_coping.html +++ /dev/null @@ -1,4 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> -<p>You can use coping skills to manage early warning signs and early symptoms. This reduces your chances of having a full-blown episode of mania or depression.</p> -<p>You can read learn about specific coping skills here. Practice the skills you like for managing early warning signs and symptoms. </p> -<a ng-repeat="link in mainLinks" ng-href="#/{{link.type}}/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/skills_fundamentals.html b/platforms/browser/www/views/skills_fundamentals.html deleted file mode 100644 index 786b91db..00000000 --- a/platforms/browser/www/views/skills_fundamentals.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - -<p>Research suggests that there are 5 crucial steps to making lasting behavior changes in life. This is true no matter what the behavior.<p><p> It could be trying to take medications on a consistent basis, getting a better daily routine, eating better, or exercising more regularly. Check out the sections ​below for more information. Try the suggestions and see if you can’t be more effective in your life!</p> - - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/skills_lifestyle.html b/platforms/browser/www/views/skills_lifestyle.html deleted file mode 100644 index 39d9b94d..00000000 --- a/platforms/browser/www/views/skills_lifestyle.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<p>There are lifestyle choices that can increase your risk of experiencing symptoms. There are also lifestyle choices that can decrease your risk of experiencing symptoms.</p> -<p>You can learn about specific lifestyle skills here. Practice these skills to reduce risk.</p> -<p>Take a look!</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/skills_team.html b/platforms/browser/www/views/skills_team.html deleted file mode 100644 index e9844d03..00000000 --- a/platforms/browser/www/views/skills_team.html +++ /dev/null @@ -1,7 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<p>Managing bipolar disorder requires having a good team in place. At a minimum, your team involves a psychiatrist, personal supports, and a hospital.</p> - -<p>Building a team and using it effectively requires some effort. You can learn more about building your team here.</p> - -<a ng-repeat="link in mainLinks" ng-href="#/summary_player/{{link.id}}/{{link.post}}" class="btn btn-info btn-full">{{link.name}}</a> \ No newline at end of file diff --git a/platforms/browser/www/views/summary_player.html b/platforms/browser/www/views/summary_player.html deleted file mode 100644 index 74500366..00000000 --- a/platforms/browser/www/views/summary_player.html +++ /dev/null @@ -1,10 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<select ng-click="showAddSkills = true" ng-model="page" ng-options="item.pretty_name for item in chapter.contents track by item.id" class="wide"> - <option style="display:none" value="">select a skill</option> -</select> - -<div ng-bind-html="page.main_content" class="content" style="font-size:1.2em;"></div> - -<br/> -<button ng-show="showAddSkills == true" ng-click="addToMySkills({{page.id}})" class='btn btn-default'>Add to My Skills</button> \ No newline at end of file diff --git a/platforms/browser/www/views/team.html b/platforms/browser/www/views/team.html deleted file mode 100644 index 0e311a8a..00000000 --- a/platforms/browser/www/views/team.html +++ /dev/null @@ -1,16 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<div class="row-group row-group-wide"> - <div class="row"> - <div ng-repeat="person in team"> - <h5>{{person.role}}</h5> - <table class="well col-md-12 col-xs-12 col-sm-1" > - <tr><td class="col-md-6 col-sm-6 col-xs-6">{{person.name}}</td><td class="col-md-6 col-sm-6 col-xs-6"> <a href="tel:{{person.phone}}" class="btn btn-primary btn-sm">{{person.phone}}</a></td></tr></table> - </div> - <div ng-repeat="person in secureTeam"> - <h5>{{person.role}}</h5> - <table class="well col-md-12 col-xs-12 col-sm-1" > - <tr><td class="col-md-6 col-sm-6 col-xs-6">{{person.name}}</td><td class="col-md-6 col-sm-6 col-xs-6"> <a href="tel:{{person.phone}}" class="btn btn-primary btn-sm">{{person.phone}}</a></td></tr></table> - </div> - </div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/usereditor.html b/platforms/browser/www/views/usereditor.html deleted file mode 100644 index 46b7ad37..00000000 --- a/platforms/browser/www/views/usereditor.html +++ /dev/null @@ -1,160 +0,0 @@ -<h2>User Editor</h2> -<div class="row"> -<div class="col-md-3"> -<label> Select a user: -<select name="" class="form-control wide"> - <option ng-repeat='user in users'>{{user}}</option> -</select> -</label> -<br/> -<input ng-model="userCreate" type="text"> -<button class="btn btn-primary" ng-click='users.push(userCreate)'>Add a user</button> - -<h4>Content Editor</h4> -<h5>User Settings</h4> -<button class="btn btn-info btn-full" ng-click="type='routine'">Sleep Routine Ranges</button><br/> -<button class="btn btn-info btn-full" ng-click="type='routine2'">Sleep Duration Ranges</button><br/> -<button class="btn btn-info btn-full" ng-click="type='status'">Clinical Status <label class="label-success label">Well</label></button><br/> -<h5>Wellness Plan</h5> -<button class="btn btn-info btn-full" ng-click="type='plan'">Plan</button><br/> -<button class="btn btn-info btn-full" ng-click="type='anchors'">Anchors</button><br/> -<button class="btn btn-info btn-full" ng-click="type='risk'">Reduce Risk</button><br/> -<button class="btn btn-info btn-full" ng-click="type='medication'">Medication</button><br/> -<button class="btn btn-info btn-full" ng-click="type='team'">Team</button><br/> -<button class="btn btn-info btn-full" ng-click="type='schedule'">Schedule</button><br/> - -<h5>Weekly Check In &gt; Early Warning Signs</h5> -<button class="btn btn-info btn-full" ng-click="type='mania'">Mania</button><br/> -<button class="btn btn-info btn-full" ng-click="type='depression'">Depression</button><br/> - -</div> -<div class="col-md-9"> -<!-- <button class="btn btn-warning">Add an anchor</button><br/><br/> -<input type="text" class="form-control" placeholder="Enter a value"> -<input type="text" class="form-control" placeholder="Enter a label"> -<button class="btn-primary btn">Save</button> - --> -<div ng-show="type == 'status'"> - <h2>Clinical Status</h2> -<select class="form-control" name="clinical"> - <option>Well</option> - <option>Prodromal</option> - <option>Recovering</option> - <option>Unwell</option> -</select> -</div> - -<div ng-show="type =='routine'"> -<h2>Routine</h2> -<label>Sleep time start <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Sleep time end <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Wake time start <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Wake time end <input type="text" name="sleep_time_start" class="form-control"></label><br/> -</div> - -<div ng-show="type =='routine2'"> -<h2>Routine</h2> -<label>Less <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>Less Severe <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>More <input type="text" name="sleep_time_start" class="form-control"></label><br/> -<label>More Severe <input type="text" name="sleep_time_start" class="form-control"></label><br/> -</div> - -<div ng-show="type =='plan'"> -<h2>Plan</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/></div> -<div ng-show="type =='anchors'"> -<h2>Anchors</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -</div> -<div ng-show="type =='risk'"> -<h2>Reduce Risk</h2> -<label>+4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>+1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>0</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-1</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-2</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-3</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/> -<label>-4</label> <textarea name="text" class="form-control" style="width:100% important!" rows="4"></textarea><br/></div> -<div ng-show="type =='medication'"> -<h2>Medications</h2> -<label>Medication 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label><br/> -<label>Medication 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 4 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 5 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 6 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 7 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -<label>Medication 8 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="dose"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"> </label</label><br/> -</div> - -<div ng-show="type =='team'"> -<h2>Team</h2> -<label>Member 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -<label>Member 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -<label>Member 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="relationship"> <input type="text" name="sleep_time_start" class="form-control" placeholder="phone number"> </label><br/> -</div> - -<div ng-show="type =='schedule'"> -<h2>Schedule</h2> -<i>Please add phone appointments with the participant here!</i><br/><br/> -<label>Event 1 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 2 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 3 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 4 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 5 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 6 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 7 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -<label>Event 8 <input type="text" name="sleep_time_start" class="form-control" placeholder="name"> <input type="text" name="sleep_time_start" class="form-control" placeholder="when"></label><br/> -</div> - -<div ng-show="type =='depression'"> -<h2>EWS: Depression</h2> -<label>Item #1<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #2<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #3<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #4<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #5<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #6<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #7<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #8<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #9<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #10<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -</div> - -<div ng-show="type =='mania'"> -<h2>EWS: Mania</h2> -<label>Item #1<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #2<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #3<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #4<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #5<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #6<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #7<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #8<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #9<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -<label>Item #10<input type="text" name="sleep_time_start" class="form-control" placeholder="name"></label><br/> -</div> - - -</div> -<div class="col-md-3"></div> -</div> \ No newline at end of file diff --git a/platforms/browser/www/views/weekly_check_in.html b/platforms/browser/www/views/weekly_check_in.html deleted file mode 100644 index 4afdb919..00000000 --- a/platforms/browser/www/views/weekly_check_in.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - -<question-group></question-group> \ No newline at end of file diff --git a/platforms/browser/www/views/wellness.html b/platforms/browser/www/views/wellness.html deleted file mode 100644 index 3294d075..00000000 --- a/platforms/browser/www/views/wellness.html +++ /dev/null @@ -1,19 +0,0 @@ -<div ng-include="'views/partials/navbar.html'"></div> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="resources" ng-click="showResources()">My <br/>Resources</button> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="risk" ng-click="showRisk()">Reduce <Br/>Risk</button> - - <button type="button" class="btn btn-info top-nav col-md-4 col-sm-4 col-xs-4 " id="awareness" ng-click="showAwareness()">Awareness <br/>&amp; Action</button> - -<div ng-show="awarenessVisible"> - <div ng-include="'views/partials/awareness.html'"></div> -</div> - -<div ng-show="riskVisible"> -<div ng-include="'views/partials/risks.html'"></div> -</div> - -<div ng-show="resourcesVisible"> - <div ng-include="'views/partials/resources.html'"></div> -</div> \ No newline at end of file diff --git a/platforms/platforms.json b/platforms/platforms.json deleted file mode 100644 index de5bb0e4..00000000 --- a/platforms/platforms.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "browser": "3.6.0", - "android": "5.1.1" -} \ No newline at end of file
  • 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